react-native-screens 4.24.0 → 4.25.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -3
- package/RNScreens.podspec +13 -3
- package/android/CMakeLists.txt +7 -22
- package/android/build.gradle +9 -28
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +0 -2
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +0 -8
- package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +49 -13
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +10 -7
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +15 -89
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +13 -14
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +0 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenModalFragment.kt +1 -2
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +26 -3
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +1 -3
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +36 -16
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +38 -86
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +1 -6
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +16 -6
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +21 -61
- package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +13 -26
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +7 -37
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/SheetUtils.kt +1 -17
- package/android/src/main/java/com/swmansion/rnscreens/ext/ViewExt.kt +4 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/common/ShadowStateProxy.kt +58 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/common/colorscheme/ColorScheme.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/common/colorscheme/ColorSchemeCoordinator.kt +120 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/common/colorscheme/ColorSchemeListener.kt +5 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/common/colorscheme/ColorSchemeProviding.kt +9 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/{tabs/image/TabsImageLoader.kt → helpers/ImageLoader.kt} +9 -8
- package/android/src/main/java/com/swmansion/rnscreens/gamma/helpers/SystemDrawable.kt +3 -2
- package/android/src/main/java/com/swmansion/rnscreens/gamma/helpers/UIManagerHelperExt.kt +11 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/scrollviewmarker/ScrollViewMarker.kt +91 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/scrollviewmarker/ScrollViewMarkerViewManager.kt +55 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/scrollviewmarker/ScrollViewSeeking.kt +13 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/StackHeaderAppBarLayout.kt +109 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/StackHeaderAppBarLayoutBehavior.kt +29 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/StackHeaderCoordinator.kt +589 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/StackHeaderCoordinatorLayout.kt +100 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/StackHeaderScrollingViewBehavior.kt +19 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/config/OnHeaderConfigAttachListener.kt +5 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/config/OnHeaderConfigChangeListener.kt +5 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/config/StackHeaderConfig.kt +163 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/config/StackHeaderConfigProviding.kt +33 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/config/StackHeaderConfigViewManager.kt +192 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/config/StackHeaderType.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/subview/OnStackHeaderSubviewChangeListener.kt +5 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/subview/StackHeaderSubview.kt +87 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/subview/StackHeaderSubviewCollapseMode.kt +20 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/subview/StackHeaderSubviewProviding.kt +14 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/subview/StackHeaderSubviewType.kt +8 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/header/subview/StackHeaderSubviewViewManager.kt +67 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/host/StackContainer.kt +17 -5
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/host/StackHost.kt +27 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/screen/StackScreen.kt +39 -7
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/screen/StackScreenFragment.kt +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/gamma/stack/screen/StackScreenViewManager.kt +72 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/{TabsHostAppearanceApplicator.kt → appearance/TabsAppearanceApplicator.kt} +99 -62
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/appearance/TabsAppearanceCoordinator.kt +51 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/appearance/TabsAppearanceModel.kt +25 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/MenuHelpers.kt +31 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/TabsActionOrigin.kt +26 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/TabsContainer.kt +645 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/TabsNavigationState.kt +60 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/TabsNavigationStateObserver.kt +53 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/TabsNavigationStateObserverRegistry.kt +88 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHost.kt +223 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/{TabsHostA11yCoordinator.kt → host/TabsHostA11yCoordinator.kt} +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHostEventEmitter.kt +77 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHostViewManager.kt +140 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/event/TabsHostTabSelectedEvent.kt +49 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/event/TabsHostTabSelectionPreventedEvent.kt +47 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/event/TabsHostTabSelectionRejectedEvent.kt +56 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/{TabsScreen.kt → screen/TabsScreen.kt} +25 -21
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/{TabsScreenDelegate.kt → screen/TabsScreenDelegate.kt} +2 -5
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/{TabsScreenEventEmitter.kt → screen/TabsScreenEventEmitter.kt} +6 -6
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/{TabsScreenFragment.kt → screen/TabsScreenFragment.kt} +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/screen/TabsScreenViewManager.kt +234 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/{event → screen/event}/TabsScreenDidAppearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/{event → screen/event}/TabsScreenDidDisappearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/{event → screen/event}/TabsScreenWillAppearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/{event → screen/event}/TabsScreenWillDisappearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaView.kt +1 -65
- package/android/src/main/java/com/swmansion/rnscreens/safearea/{paper/SafeAreaViewEdges.kt → SafeAreaViewEdges.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaViewManager.kt +0 -9
- package/android/src/main/java/com/swmansion/rnscreens/utils/ColorUtils.kt +25 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/DrawableUtils.kt +23 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/RNSLog.kt +75 -7
- package/android/src/main/java/com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper.kt +118 -34
- package/android/src/main/jni/rnscreens.h +3 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSSplitScreenComponentDescriptor.h +39 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSSplitScreenShadowNode.cpp +13 -0
- package/common/cpp/react/renderer/components/rnscreens/{RNSSplitViewScreenShadowNode.h → RNSSplitScreenShadowNode.h} +7 -7
- package/common/cpp/react/renderer/components/rnscreens/{RNSSplitViewScreenState.h → RNSSplitScreenState.h} +6 -6
- package/common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigComponentDescriptor.h +43 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigShadowNode.cpp +21 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigShadowNode.h +33 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigState.cpp +13 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackHeaderConfigState.h +44 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewComponentDescriptor.h +14 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewShadowNode.cpp +30 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewShadowNode.h +37 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewState.cpp +12 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackHeaderSubviewState.h +39 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackScreenComponentDescriptor.h +42 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackScreenShadowNode.cpp +15 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackScreenShadowNode.h +30 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackScreenState.cpp +13 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSStackScreenState.h +44 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSTabsBottomAccessoryShadowNode.cpp +17 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSTabsBottomAccessoryShadowNode.h +9 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSTabsHostShadowNode.cpp +6 -2
- package/common/cpp/react/renderer/components/rnscreens/RNSTabsHostShadowNode.h +7 -2
- package/ios/RCTConvert+RNScreens.h +3 -13
- package/ios/RCTConvert+RNScreens.mm +2 -67
- package/ios/RCTImageComponentView+RNSScreenStackHeaderConfig.h +2 -2
- package/ios/RCTImageComponentView+RNSScreenStackHeaderConfig.mm +0 -4
- package/ios/RNSConvert.h +6 -6
- package/ios/RNSConvert.mm +0 -14
- package/ios/RNSEnums.h +3 -3
- package/ios/RNSFullWindowOverlay.h +6 -17
- package/ios/RNSFullWindowOverlay.mm +7 -60
- package/ios/RNSModalScreen.mm +8 -17
- package/ios/RNSModule.h +2 -6
- package/ios/RNSModule.mm +2 -19
- package/ios/RNSScreen.h +13 -49
- package/ios/RNSScreen.mm +97 -339
- package/ios/RNSScreenContainer.h +2 -11
- package/ios/RNSScreenContainer.mm +6 -33
- package/ios/RNSScreenContentWrapper.h +4 -11
- package/ios/RNSScreenContentWrapper.mm +9 -38
- package/ios/RNSScreenFooter.h +4 -11
- package/ios/RNSScreenFooter.mm +7 -32
- package/ios/RNSScreenNavigationContainer.mm +5 -14
- package/ios/RNSScreenStack.h +6 -19
- package/ios/RNSScreenStack.mm +52 -181
- package/ios/RNSScreenStackAnimator.mm +1 -2
- package/ios/RNSScreenStackHeaderConfig.h +3 -60
- package/ios/RNSScreenStackHeaderConfig.mm +11 -230
- package/ios/RNSScreenStackHeaderSubview.h +2 -12
- package/ios/RNSScreenStackHeaderSubview.mm +12 -62
- package/ios/RNSSearchBar.mm +10 -6
- package/ios/bridging/RNSReactBaseView.h +0 -13
- package/ios/conversion/RNSConversions-ScrollViewMarker.h +26 -0
- package/ios/conversion/RNSConversions-ScrollViewMarker.mm +44 -0
- package/ios/conversion/RNSConversions-SplitView.mm +20 -22
- package/ios/conversion/RNSConversions-Stack.h +2 -2
- package/ios/conversion/RNSConversions-Stack.mm +2 -2
- package/ios/conversion/RNSConversions-Tabs.mm +79 -54
- package/ios/conversion/RNSConversions.h +33 -28
- package/ios/gamma/scroll-view-marker/RNSScrollViewMarkerComponentView.h +11 -0
- package/ios/gamma/scroll-view-marker/RNSScrollViewMarkerComponentView.mm +272 -0
- package/ios/gamma/scroll-view-marker/RNSScrollViewSeeking.h +15 -0
- package/ios/gamma/split/RNSSplitAppearanceApplicator.swift +194 -0
- package/ios/gamma/split/RNSSplitAppearanceCoordinator.swift +26 -0
- package/ios/gamma/split/RNSSplitAppearanceUpdateFlags.swift +11 -0
- package/ios/gamma/{split-view/RNSSplitViewHostComponentEventEmitter.h → split/RNSSplitHostComponentEventEmitter.h} +5 -5
- package/ios/gamma/{split-view/RNSSplitViewHostComponentEventEmitter.mm → split/RNSSplitHostComponentEventEmitter.mm} +4 -4
- package/ios/gamma/{split-view/RNSSplitViewHostComponentView.h → split/RNSSplitHostComponentView.h} +10 -10
- package/ios/gamma/{split-view/RNSSplitViewHostComponentView.mm → split/RNSSplitHostComponentView.mm} +83 -75
- package/ios/gamma/{split-view/RNSSplitViewHostComponentViewManager.h → split/RNSSplitHostComponentViewManager.h} +1 -1
- package/ios/gamma/split/RNSSplitHostComponentViewManager.mm +7 -0
- package/ios/gamma/{split-view/RNSSplitViewHostController.swift → split/RNSSplitHostController.swift} +82 -82
- package/ios/gamma/{split-view/RNSSplitViewNavigationController.swift → split/RNSSplitNavigationController.swift} +10 -10
- package/ios/gamma/{split-view/RNSSplitViewScreenComponentEventEmitter.h → split/RNSSplitScreenComponentEventEmitter.h} +5 -5
- package/ios/gamma/{split-view/RNSSplitViewScreenComponentEventEmitter.mm → split/RNSSplitScreenComponentEventEmitter.mm} +4 -4
- package/ios/gamma/{split-view/RNSSplitViewScreenComponentView.h → split/RNSSplitScreenComponentView.h} +17 -17
- package/ios/gamma/{split-view/RNSSplitViewScreenComponentView.mm → split/RNSSplitScreenComponentView.mm} +34 -24
- package/ios/gamma/{split-view/RNSSplitViewScreenComponentViewManager.h → split/RNSSplitScreenComponentViewManager.h} +1 -1
- package/ios/gamma/split/RNSSplitScreenComponentViewManager.mm +7 -0
- package/ios/gamma/split/RNSSplitScreenController.swift +133 -0
- package/ios/gamma/{split-view/RNSSplitViewScreenShadowStateProxy.h → split/RNSSplitScreenShadowStateProxy.h} +14 -14
- package/ios/gamma/{split-view/RNSSplitViewScreenShadowStateProxy.mm → split/RNSSplitScreenShadowStateProxy.mm} +10 -10
- package/ios/gamma/stack/host/RNSStackHostComponentView.h +1 -7
- package/ios/gamma/stack/host/RNSStackHostComponentView.mm +77 -83
- package/ios/gamma/stack/host/RNSStackNavigationController.h +13 -0
- package/ios/gamma/stack/host/RNSStackNavigationController.mm +82 -0
- package/ios/gamma/stack/host/RNSStackOperation.h +25 -0
- package/ios/gamma/stack/host/RNSStackOperation.mm +21 -0
- package/ios/gamma/stack/host/RNSStackOperationCoordinator.h +15 -0
- package/ios/gamma/stack/host/RNSStackOperationCoordinator.mm +78 -0
- package/ios/gamma/stack/screen/RNSStackScreenComponentView.h +1 -0
- package/ios/gamma/stack/screen/RNSStackScreenComponentView.mm +14 -1
- package/ios/gamma/stack/screen/RNSStackScreenController.h +15 -0
- package/ios/gamma/stack/screen/RNSStackScreenController.mm +66 -0
- package/ios/helpers/scroll-view/RNSScrollEdgeEffectApplicator.h +2 -1
- package/ios/helpers/scroll-view/RNSScrollEdgeEffectApplicator.mm +2 -1
- package/ios/safe-area/RNSSafeAreaViewComponentView.h +0 -17
- package/ios/safe-area/RNSSafeAreaViewComponentView.mm +7 -60
- package/ios/stubs/RNSGammaStubs.h +5 -2
- package/ios/stubs/RNSGammaStubs.mm +5 -2
- package/ios/tabs/RNSTabBarAppearanceCoordinator.h +2 -1
- package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +1 -0
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.h +4 -9
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +13 -15
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentViewManager.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +10 -0
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryHelper.mm +34 -5
- package/ios/tabs/host/RNSTabBarController.h +196 -55
- package/ios/tabs/host/RNSTabBarController.mm +814 -53
- package/ios/tabs/host/RNSTabsHostComponentView.h +20 -16
- package/ios/tabs/host/RNSTabsHostComponentView.mm +144 -66
- package/ios/tabs/host/RNSTabsHostComponentViewManager.mm +0 -3
- package/ios/tabs/host/RNSTabsHostEventEmitter.h +49 -12
- package/ios/tabs/host/RNSTabsHostEventEmitter.mm +55 -17
- package/ios/tabs/host/RNSTabsNavigationState.h +184 -0
- package/ios/tabs/host/RNSTabsNavigationState.mm +78 -0
- package/ios/tabs/host/RNSTabsNavigationStateObserverRegistry.h +62 -0
- package/ios/tabs/host/RNSTabsNavigationStateObserverRegistry.mm +104 -0
- package/ios/tabs/screen/RNSTabsScreenComponentView.h +8 -22
- package/ios/tabs/screen/RNSTabsScreenComponentView.mm +44 -105
- package/ios/tabs/screen/RNSTabsScreenComponentViewManager.mm +1 -1
- package/ios/tabs/screen/RNSTabsScreenEventEmitter.h +1 -1
- package/ios/tabs/screen/RNSTabsScreenEventEmitter.mm +2 -2
- package/ios/tabs/screen/RNSTabsScreenViewController.h +8 -5
- package/ios/tabs/screen/RNSTabsScreenViewController.mm +18 -12
- package/ios/utils/RNSLog.swift +6 -0
- package/ios/utils/UIView+RNSUtility.h +1 -12
- package/ios/utils/UIView+RNSUtility.mm +2 -19
- package/lib/commonjs/components/ScreenStack.js +4 -1
- package/lib/commonjs/components/ScreenStack.js.map +1 -1
- package/lib/commonjs/components/ScreenStackHeaderConfig.js +8 -1
- package/lib/commonjs/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/commonjs/components/ScreenStackItem.js +19 -7
- package/lib/commonjs/components/ScreenStackItem.js.map +1 -1
- package/lib/commonjs/components/SearchBar.js.map +1 -1
- package/lib/commonjs/components/contexts/TopInsetApplicationContext.js +33 -0
- package/lib/commonjs/components/contexts/TopInsetApplicationContext.js.map +1 -0
- package/lib/commonjs/components/gamma/scroll-view-marker/ScrollViewMarker.js +23 -0
- package/lib/commonjs/components/gamma/scroll-view-marker/ScrollViewMarker.js.map +1 -0
- package/lib/commonjs/components/gamma/scroll-view-marker/ScrollViewMarker.types.js +6 -0
- package/lib/commonjs/components/gamma/scroll-view-marker/ScrollViewMarker.types.js.map +1 -0
- package/lib/commonjs/components/gamma/scroll-view-marker/index.js +13 -0
- package/lib/commonjs/components/gamma/scroll-view-marker/index.js.map +1 -0
- package/lib/commonjs/components/gamma/split/SplitHost.js +5 -5
- package/lib/commonjs/components/gamma/split/SplitHost.js.map +1 -1
- package/lib/commonjs/components/gamma/split/SplitScreen.js +3 -3
- package/lib/commonjs/components/gamma/split/SplitScreen.js.map +1 -1
- package/lib/commonjs/components/gamma/split/index.js +2 -28
- package/lib/commonjs/components/gamma/split/index.js.map +1 -1
- package/lib/commonjs/components/gamma/stack/header/StackHeaderConfig.android.js +113 -0
- package/lib/commonjs/components/gamma/stack/header/StackHeaderConfig.android.js.map +1 -0
- package/lib/commonjs/components/{tabs/TabsAccessoryContent.types.js → gamma/stack/header/StackHeaderConfig.android.types.js} +1 -1
- package/lib/commonjs/components/gamma/stack/header/StackHeaderConfig.android.types.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/header/StackHeaderConfig.d.js +2 -0
- package/lib/commonjs/components/gamma/stack/header/StackHeaderConfig.d.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/header/StackHeaderConfig.ios.js +27 -0
- package/lib/commonjs/components/gamma/stack/header/StackHeaderConfig.ios.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/header/StackHeaderConfig.ios.types.js +2 -0
- package/lib/commonjs/components/gamma/stack/header/StackHeaderConfig.ios.types.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/header/StackHeaderConfig.types.js +6 -0
- package/lib/commonjs/components/gamma/stack/header/StackHeaderConfig.types.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/header/StackHeaderConfig.web.js +10 -0
- package/lib/commonjs/components/gamma/stack/header/StackHeaderConfig.web.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/header/android/StackHeaderSubview.android.js +33 -0
- package/lib/commonjs/components/gamma/stack/header/android/StackHeaderSubview.android.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/header/android/StackHeaderSubview.android.types.js +6 -0
- package/lib/commonjs/components/gamma/stack/header/android/StackHeaderSubview.android.types.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/header/index.js +14 -0
- package/lib/commonjs/components/gamma/stack/header/index.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/{StackHost.js → host/StackHost.js} +1 -1
- package/lib/commonjs/components/gamma/stack/host/StackHost.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/host/StackHost.types.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/host/StackHost.web.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/host/index.js +14 -0
- package/lib/commonjs/components/gamma/stack/host/index.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/index.js +8 -33
- package/lib/commonjs/components/gamma/stack/index.js.map +1 -1
- package/lib/commonjs/components/gamma/stack/{StackScreen.js → screen/StackScreen.js} +2 -2
- package/lib/commonjs/components/gamma/stack/screen/StackScreen.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/screen/StackScreen.types.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/screen/StackScreen.web.js.map +1 -0
- package/lib/commonjs/components/gamma/stack/screen/index.js +14 -0
- package/lib/commonjs/components/gamma/stack/screen/index.js.map +1 -0
- package/lib/commonjs/components/helpers/PlatformUtils.js +9 -0
- package/lib/commonjs/components/helpers/PlatformUtils.js.map +1 -0
- package/lib/commonjs/components/helpers/prepareHeaderBarButtonItems.js +4 -3
- package/lib/commonjs/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
- package/lib/commonjs/components/safe-area/SafeAreaView.js +1 -2
- package/lib/commonjs/components/safe-area/SafeAreaView.js.map +1 -1
- package/lib/commonjs/components/safe-area/SafeAreaView.web.js +2 -3
- package/lib/commonjs/components/safe-area/SafeAreaView.web.js.map +1 -1
- package/lib/commonjs/components/safe-area/index.js +13 -0
- package/lib/commonjs/components/safe-area/index.js.map +1 -0
- package/lib/commonjs/components/tabs/{TabsAccessory.js → bottom-accessory/TabsBottomAccessory.js} +4 -4
- package/lib/commonjs/components/tabs/bottom-accessory/TabsBottomAccessory.js.map +1 -0
- package/lib/commonjs/components/tabs/bottom-accessory/TabsBottomAccessory.types.js +6 -0
- package/lib/commonjs/components/tabs/bottom-accessory/TabsBottomAccessory.types.js.map +1 -0
- package/lib/commonjs/components/tabs/{TabsAccessoryContent.js → bottom-accessory/TabsBottomAccessoryContent.js} +4 -4
- package/lib/commonjs/components/tabs/bottom-accessory/TabsBottomAccessoryContent.js.map +1 -0
- package/lib/commonjs/components/tabs/bottom-accessory/TabsBottomAccessoryContent.types.js +6 -0
- package/lib/commonjs/components/tabs/bottom-accessory/TabsBottomAccessoryContent.types.js.map +1 -0
- package/lib/commonjs/components/tabs/bottom-accessory/index.js +21 -0
- package/lib/commonjs/components/tabs/bottom-accessory/index.js.map +1 -0
- package/lib/commonjs/components/tabs/host/TabsHost.android.js +67 -0
- package/lib/commonjs/components/tabs/host/TabsHost.android.js.map +1 -0
- package/lib/commonjs/components/tabs/host/TabsHost.android.types.js +2 -0
- package/lib/commonjs/components/tabs/host/TabsHost.android.types.js.map +1 -0
- package/lib/commonjs/components/tabs/host/TabsHost.d.js +2 -0
- package/lib/commonjs/components/tabs/host/TabsHost.d.js.map +1 -0
- package/lib/commonjs/components/tabs/{TabsHost.js → host/TabsHost.ios.js} +42 -31
- package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -0
- package/lib/commonjs/components/tabs/host/TabsHost.ios.types.js +6 -0
- package/lib/commonjs/components/tabs/host/TabsHost.ios.types.js.map +1 -0
- package/lib/commonjs/components/tabs/host/TabsHost.types.js.map +1 -0
- package/lib/commonjs/components/tabs/host/TabsHost.web.js.map +1 -0
- package/lib/commonjs/components/tabs/host/index.js +14 -0
- package/lib/commonjs/components/tabs/host/index.js.map +1 -0
- package/lib/commonjs/components/tabs/host/useTabsHost.js +31 -0
- package/lib/commonjs/components/tabs/host/useTabsHost.js.map +1 -0
- package/lib/commonjs/components/tabs/index.js +6 -8
- package/lib/commonjs/components/tabs/index.js.map +1 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.android.js +143 -0
- package/lib/commonjs/components/tabs/screen/TabsScreen.android.js.map +1 -0
- package/lib/commonjs/components/tabs/screen/TabsScreen.android.types.js +6 -0
- package/lib/commonjs/components/tabs/screen/TabsScreen.android.types.js.map +1 -0
- package/lib/commonjs/components/tabs/screen/TabsScreen.d.js +2 -0
- package/lib/commonjs/components/tabs/screen/TabsScreen.d.js.map +1 -0
- package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js +165 -0
- package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js.map +1 -0
- package/lib/commonjs/components/tabs/{TabsAccessory.types.js → screen/TabsScreen.ios.types.js} +1 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.ios.types.js.map +1 -0
- package/lib/commonjs/components/tabs/screen/TabsScreen.types.js.map +1 -0
- package/lib/commonjs/components/tabs/screen/TabsScreen.web.js.map +1 -0
- package/lib/commonjs/components/tabs/screen/index.js +14 -0
- package/lib/commonjs/components/tabs/screen/index.js.map +1 -0
- package/lib/commonjs/components/tabs/screen/useTabsScreen.js +54 -0
- package/lib/commonjs/components/tabs/screen/useTabsScreen.js.map +1 -0
- package/lib/commonjs/experimental/index.js +41 -19
- package/lib/commonjs/experimental/index.js.map +1 -1
- package/lib/commonjs/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/SearchBarNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/gamma/ScrollViewMarkerNativeComponent.js +10 -0
- package/lib/commonjs/fabric/gamma/ScrollViewMarkerNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/gamma/{SplitViewHostNativeComponent.js → split/SplitHostNativeComponent.js} +2 -2
- package/lib/commonjs/fabric/gamma/split/SplitHostNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/gamma/{SplitViewScreenNativeComponent.js → split/SplitScreenNativeComponent.js} +2 -2
- package/lib/commonjs/fabric/gamma/split/SplitScreenNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/gamma/stack/StackHeaderConfigAndroidNativeComponent.js +13 -0
- package/lib/commonjs/fabric/gamma/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/gamma/stack/StackHeaderConfigIOSNativeComponent.js +13 -0
- package/lib/commonjs/fabric/gamma/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/gamma/stack/StackHeaderSubviewAndroidNativeComponent.js +13 -0
- package/lib/commonjs/fabric/gamma/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/gamma/stack/StackScreenNativeComponent.js +3 -1
- package/lib/commonjs/fabric/gamma/stack/StackScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsBottomAccessoryNativeComponent.js +2 -1
- package/lib/commonjs/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsHostAndroidNativeComponent.js +18 -0
- package/lib/commonjs/fabric/tabs/TabsHostAndroidNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js +17 -0
- package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/tabs/TabsScreenAndroidNativeComponent.js +17 -0
- package/lib/commonjs/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/tabs/{TabsScreenNativeComponent.js → TabsScreenIOSNativeComponent.js} +9 -3
- package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -0
- package/lib/commonjs/flags.js +71 -12
- package/lib/commonjs/flags.js.map +1 -1
- package/lib/commonjs/index.js +13 -21
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/private/hooks/useRenderDebugInfo.js +2 -1
- package/lib/commonjs/private/hooks/useRenderDebugInfo.js.map +1 -1
- package/lib/commonjs/private/index.js +2 -8
- package/lib/commonjs/private/index.js.map +1 -1
- package/lib/commonjs/private/logging.js +27 -10
- package/lib/commonjs/private/logging.js.map +1 -1
- package/lib/module/components/ScreenStack.js +4 -1
- package/lib/module/components/ScreenStack.js.map +1 -1
- package/lib/module/components/ScreenStackHeaderConfig.js +8 -1
- package/lib/module/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/module/components/ScreenStackItem.js +18 -6
- package/lib/module/components/ScreenStackItem.js.map +1 -1
- package/lib/module/components/SearchBar.js.map +1 -1
- package/lib/module/components/contexts/TopInsetApplicationContext.js +24 -0
- package/lib/module/components/contexts/TopInsetApplicationContext.js.map +1 -0
- package/lib/module/components/gamma/scroll-view-marker/ScrollViewMarker.js +16 -0
- package/lib/module/components/gamma/scroll-view-marker/ScrollViewMarker.js.map +1 -0
- package/lib/module/components/gamma/scroll-view-marker/ScrollViewMarker.types.js +2 -0
- package/lib/module/components/gamma/scroll-view-marker/ScrollViewMarker.types.js.map +1 -0
- package/lib/module/components/gamma/scroll-view-marker/index.js +2 -0
- package/lib/module/components/gamma/scroll-view-marker/index.js.map +1 -0
- package/lib/module/components/gamma/split/SplitHost.js +5 -5
- package/lib/module/components/gamma/split/SplitHost.js.map +1 -1
- package/lib/module/components/gamma/split/SplitScreen.js +3 -3
- package/lib/module/components/gamma/split/SplitScreen.js.map +1 -1
- package/lib/module/components/gamma/split/index.js +1 -5
- package/lib/module/components/gamma/split/index.js.map +1 -1
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.android.js +106 -0
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.android.js.map +1 -0
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.android.types.js +2 -0
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.android.types.js.map +1 -0
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.d.js +2 -0
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.d.js.map +1 -0
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.ios.js +21 -0
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.ios.js.map +1 -0
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.ios.types.js +2 -0
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.ios.types.js.map +1 -0
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.types.js +2 -0
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.types.js.map +1 -0
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.web.js +4 -0
- package/lib/module/components/gamma/stack/header/StackHeaderConfig.web.js.map +1 -0
- package/lib/module/components/gamma/stack/header/android/StackHeaderSubview.android.js +27 -0
- package/lib/module/components/gamma/stack/header/android/StackHeaderSubview.android.js.map +1 -0
- package/lib/module/components/gamma/stack/header/android/StackHeaderSubview.android.types.js +2 -0
- package/lib/module/components/gamma/stack/header/android/StackHeaderSubview.android.types.js.map +1 -0
- package/lib/module/components/gamma/stack/header/index.js +2 -0
- package/lib/module/components/gamma/stack/header/index.js.map +1 -0
- package/lib/module/components/gamma/stack/{StackHost.js → host/StackHost.js} +1 -1
- package/lib/module/components/gamma/stack/host/StackHost.js.map +1 -0
- package/lib/module/components/gamma/stack/host/StackHost.types.js.map +1 -0
- package/lib/module/components/gamma/stack/host/StackHost.web.js.map +1 -0
- package/lib/module/components/gamma/stack/host/index.js +2 -0
- package/lib/module/components/gamma/stack/host/index.js.map +1 -0
- package/lib/module/components/gamma/stack/index.js +6 -8
- package/lib/module/components/gamma/stack/index.js.map +1 -1
- package/lib/module/components/gamma/stack/{StackScreen.js → screen/StackScreen.js} +2 -2
- package/lib/module/components/gamma/stack/screen/StackScreen.js.map +1 -0
- package/lib/module/components/gamma/stack/screen/StackScreen.types.js.map +1 -0
- package/lib/module/components/gamma/stack/screen/StackScreen.web.js.map +1 -0
- package/lib/module/components/gamma/stack/screen/index.js +2 -0
- package/lib/module/components/gamma/stack/screen/index.js.map +1 -0
- package/lib/module/components/helpers/PlatformUtils.js +3 -0
- package/lib/module/components/helpers/PlatformUtils.js.map +1 -0
- package/lib/module/components/helpers/prepareHeaderBarButtonItems.js +4 -3
- package/lib/module/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
- package/lib/module/components/safe-area/SafeAreaView.js +1 -2
- package/lib/module/components/safe-area/SafeAreaView.js.map +1 -1
- package/lib/module/components/safe-area/SafeAreaView.web.js +1 -1
- package/lib/module/components/safe-area/SafeAreaView.web.js.map +1 -1
- package/lib/module/components/safe-area/index.js +2 -0
- package/lib/module/components/safe-area/index.js.map +1 -0
- package/lib/module/components/tabs/{TabsAccessory.js → bottom-accessory/TabsBottomAccessory.js} +3 -3
- package/lib/module/components/tabs/bottom-accessory/TabsBottomAccessory.js.map +1 -0
- package/lib/module/components/tabs/bottom-accessory/TabsBottomAccessory.types.js +2 -0
- package/lib/module/components/tabs/bottom-accessory/TabsBottomAccessory.types.js.map +1 -0
- package/lib/module/components/tabs/{TabsAccessoryContent.js → bottom-accessory/TabsBottomAccessoryContent.js} +3 -3
- package/lib/module/components/tabs/bottom-accessory/TabsBottomAccessoryContent.js.map +1 -0
- package/lib/module/components/tabs/bottom-accessory/TabsBottomAccessoryContent.types.js +2 -0
- package/lib/module/components/tabs/bottom-accessory/TabsBottomAccessoryContent.types.js.map +1 -0
- package/lib/module/components/tabs/bottom-accessory/index.js +3 -0
- package/lib/module/components/tabs/bottom-accessory/index.js.map +1 -0
- package/lib/module/components/tabs/host/TabsHost.android.js +62 -0
- package/lib/module/components/tabs/host/TabsHost.android.js.map +1 -0
- package/lib/module/components/tabs/host/TabsHost.android.types.js +2 -0
- package/lib/module/components/tabs/host/TabsHost.android.types.js.map +1 -0
- package/lib/module/components/tabs/host/TabsHost.d.js +2 -0
- package/lib/module/components/tabs/host/TabsHost.d.js.map +1 -0
- package/lib/module/components/tabs/host/TabsHost.ios.js +75 -0
- package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -0
- package/lib/module/components/tabs/host/TabsHost.ios.types.js +2 -0
- package/lib/module/components/tabs/host/TabsHost.ios.types.js.map +1 -0
- package/lib/module/components/tabs/host/TabsHost.types.js.map +1 -0
- package/lib/module/components/tabs/host/TabsHost.web.js.map +1 -0
- package/lib/module/components/tabs/host/index.js +2 -0
- package/lib/module/components/tabs/host/index.js.map +1 -0
- package/lib/module/components/tabs/host/useTabsHost.js +24 -0
- package/lib/module/components/tabs/host/useTabsHost.js.map +1 -0
- package/lib/module/components/tabs/index.js +3 -4
- package/lib/module/components/tabs/index.js.map +1 -1
- package/lib/module/components/tabs/screen/TabsScreen.android.js +138 -0
- package/lib/module/components/tabs/screen/TabsScreen.android.js.map +1 -0
- package/lib/module/components/tabs/screen/TabsScreen.android.types.js +2 -0
- package/lib/module/components/tabs/screen/TabsScreen.android.types.js.map +1 -0
- package/lib/module/components/tabs/screen/TabsScreen.d.js +2 -0
- package/lib/module/components/tabs/screen/TabsScreen.d.js.map +1 -0
- package/lib/module/components/tabs/screen/TabsScreen.ios.js +160 -0
- package/lib/module/components/tabs/screen/TabsScreen.ios.js.map +1 -0
- package/lib/module/components/tabs/screen/TabsScreen.ios.types.js +2 -0
- package/lib/module/components/tabs/screen/TabsScreen.ios.types.js.map +1 -0
- package/lib/module/components/tabs/screen/TabsScreen.types.js.map +1 -0
- package/lib/module/components/tabs/screen/TabsScreen.web.js.map +1 -0
- package/lib/module/components/tabs/screen/index.js +2 -0
- package/lib/module/components/tabs/screen/index.js.map +1 -0
- package/lib/module/components/tabs/screen/useTabsScreen.js +47 -0
- package/lib/module/components/tabs/screen/useTabsScreen.js.map +1 -0
- package/lib/module/experimental/index.js +5 -6
- package/lib/module/experimental/index.js.map +1 -1
- package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -1
- package/lib/module/fabric/SearchBarNativeComponent.js.map +1 -1
- package/lib/module/fabric/gamma/ScrollViewMarkerNativeComponent.js +5 -0
- package/lib/module/fabric/gamma/ScrollViewMarkerNativeComponent.js.map +1 -0
- package/lib/module/fabric/gamma/{SplitViewHostNativeComponent.js → split/SplitHostNativeComponent.js} +2 -2
- package/lib/module/fabric/gamma/split/SplitHostNativeComponent.js.map +1 -0
- package/lib/module/fabric/gamma/{SplitViewScreenNativeComponent.js → split/SplitScreenNativeComponent.js} +2 -2
- package/lib/module/fabric/gamma/split/SplitScreenNativeComponent.js.map +1 -0
- package/lib/module/fabric/gamma/stack/StackHeaderConfigAndroidNativeComponent.js +8 -0
- package/lib/module/fabric/gamma/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -0
- package/lib/module/fabric/gamma/stack/StackHeaderConfigIOSNativeComponent.js +8 -0
- package/lib/module/fabric/gamma/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -0
- package/lib/module/fabric/gamma/stack/StackHeaderSubviewAndroidNativeComponent.js +8 -0
- package/lib/module/fabric/gamma/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -0
- package/lib/module/fabric/gamma/stack/StackScreenNativeComponent.js +3 -1
- package/lib/module/fabric/gamma/stack/StackScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsBottomAccessoryNativeComponent.js +2 -1
- package/lib/module/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsHostAndroidNativeComponent.js +17 -0
- package/lib/module/fabric/tabs/TabsHostAndroidNativeComponent.js.map +1 -0
- package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js +17 -0
- package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -0
- package/lib/module/fabric/tabs/TabsScreenAndroidNativeComponent.js +18 -0
- package/lib/module/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -0
- package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js +20 -0
- package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -0
- package/lib/module/flags.js +71 -12
- package/lib/module/flags.js.map +1 -1
- package/lib/module/index.js +5 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/private/hooks/useRenderDebugInfo.js +2 -1
- package/lib/module/private/hooks/useRenderDebugInfo.js.map +1 -1
- package/lib/module/private/index.js +1 -1
- package/lib/module/private/index.js.map +1 -1
- package/lib/module/private/logging.js +26 -8
- package/lib/module/private/logging.js.map +1 -1
- package/lib/typescript/components/DebugContainer.d.ts +1 -1
- package/lib/typescript/components/DebugContainer.d.ts.map +1 -1
- package/lib/typescript/components/FullWindowOverlay.d.ts +1 -1
- package/lib/typescript/components/FullWindowOverlay.d.ts.map +1 -1
- package/lib/typescript/components/ScreenFooter.d.ts +1 -1
- package/lib/typescript/components/ScreenFooter.d.ts.map +1 -1
- package/lib/typescript/components/ScreenStack.d.ts.map +1 -1
- package/lib/typescript/components/ScreenStackHeaderConfig.d.ts.map +1 -1
- package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts +1 -1
- package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts.map +1 -1
- package/lib/typescript/components/ScreenStackItem.d.ts +2 -2
- package/lib/typescript/components/ScreenStackItem.d.ts.map +1 -1
- package/lib/typescript/components/SearchBar.d.ts.map +1 -1
- package/lib/typescript/components/contexts/TopInsetApplicationContext.d.ts +8 -0
- package/lib/typescript/components/contexts/TopInsetApplicationContext.d.ts.map +1 -0
- package/lib/typescript/components/gamma/scroll-view-marker/ScrollViewMarker.d.ts +4 -0
- package/lib/typescript/components/gamma/scroll-view-marker/ScrollViewMarker.d.ts.map +1 -0
- package/lib/typescript/components/gamma/scroll-view-marker/ScrollViewMarker.types.d.ts +39 -0
- package/lib/typescript/components/gamma/scroll-view-marker/ScrollViewMarker.types.d.ts.map +1 -0
- package/lib/typescript/components/gamma/scroll-view-marker/index.d.ts +3 -0
- package/lib/typescript/components/gamma/scroll-view-marker/index.d.ts.map +1 -0
- package/lib/typescript/components/gamma/split/SplitHost.types.d.ts +30 -29
- package/lib/typescript/components/gamma/split/SplitHost.types.d.ts.map +1 -1
- package/lib/typescript/components/gamma/split/SplitScreen.types.d.ts +5 -5
- package/lib/typescript/components/gamma/split/SplitScreen.types.d.ts.map +1 -1
- package/lib/typescript/components/gamma/split/index.d.ts +4 -4
- package/lib/typescript/components/gamma/split/index.d.ts.map +1 -1
- package/lib/typescript/components/gamma/stack/header/StackHeaderConfig.android.d.ts +8 -0
- package/lib/typescript/components/gamma/stack/header/StackHeaderConfig.android.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/header/StackHeaderConfig.android.types.d.ts +208 -0
- package/lib/typescript/components/gamma/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/header/StackHeaderConfig.ios.d.ts +8 -0
- package/lib/typescript/components/gamma/stack/header/StackHeaderConfig.ios.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/header/StackHeaderConfig.ios.types.d.ts +3 -0
- package/lib/typescript/components/gamma/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/header/StackHeaderConfig.types.d.ts +50 -0
- package/lib/typescript/components/gamma/stack/header/StackHeaderConfig.types.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/header/StackHeaderConfig.web.d.ts +4 -0
- package/lib/typescript/components/gamma/stack/header/StackHeaderConfig.web.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/header/android/StackHeaderSubview.android.d.ts +8 -0
- package/lib/typescript/components/gamma/stack/header/android/StackHeaderSubview.android.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/header/android/StackHeaderSubview.android.types.d.ts +9 -0
- package/lib/typescript/components/gamma/stack/header/android/StackHeaderSubview.android.types.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/header/index.d.ts +5 -0
- package/lib/typescript/components/gamma/stack/header/index.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/host/StackHost.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/host/StackHost.types.d.ts +8 -0
- package/lib/typescript/components/gamma/stack/host/StackHost.types.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/host/StackHost.web.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/host/index.d.ts +3 -0
- package/lib/typescript/components/gamma/stack/host/index.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/index.d.ts +9 -6
- package/lib/typescript/components/gamma/stack/index.d.ts.map +1 -1
- package/lib/typescript/components/gamma/stack/screen/StackScreen.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/screen/StackScreen.types.d.ts +22 -0
- package/lib/typescript/components/gamma/stack/screen/StackScreen.types.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/screen/StackScreen.web.d.ts.map +1 -0
- package/lib/typescript/components/gamma/stack/screen/index.d.ts +3 -0
- package/lib/typescript/components/gamma/stack/screen/index.d.ts.map +1 -0
- package/lib/typescript/components/helpers/PlatformUtils.d.ts +2 -0
- package/lib/typescript/components/helpers/PlatformUtils.d.ts.map +1 -0
- package/lib/typescript/components/helpers/prepareHeaderBarButtonItems.d.ts +81 -81
- package/lib/typescript/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
- package/lib/typescript/components/safe-area/SafeAreaView.d.ts +1 -2
- package/lib/typescript/components/safe-area/SafeAreaView.d.ts.map +1 -1
- package/lib/typescript/components/safe-area/SafeAreaView.types.d.ts +2 -2
- package/lib/typescript/components/safe-area/SafeAreaView.types.d.ts.map +1 -1
- package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts +1 -1
- package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts.map +1 -1
- package/lib/typescript/components/safe-area/index.d.ts +3 -0
- package/lib/typescript/components/safe-area/index.d.ts.map +1 -0
- package/lib/typescript/components/shared/types.d.ts +4 -0
- package/lib/typescript/components/shared/types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/bottom-accessory/TabsBottomAccessory.d.ts +7 -0
- package/lib/typescript/components/tabs/bottom-accessory/TabsBottomAccessory.d.ts.map +1 -0
- package/lib/typescript/components/tabs/bottom-accessory/TabsBottomAccessory.types.d.ts +9 -0
- package/lib/typescript/components/tabs/bottom-accessory/TabsBottomAccessory.types.d.ts.map +1 -0
- package/lib/typescript/components/tabs/bottom-accessory/TabsBottomAccessoryContent.d.ts +7 -0
- package/lib/typescript/components/tabs/bottom-accessory/TabsBottomAccessoryContent.d.ts.map +1 -0
- package/lib/typescript/components/tabs/bottom-accessory/TabsBottomAccessoryContent.types.d.ts +6 -0
- package/lib/typescript/components/tabs/bottom-accessory/TabsBottomAccessoryContent.types.d.ts.map +1 -0
- package/lib/typescript/components/tabs/bottom-accessory/index.d.ts +5 -0
- package/lib/typescript/components/tabs/bottom-accessory/index.d.ts.map +1 -0
- package/lib/typescript/components/tabs/host/TabsHost.android.d.ts +8 -0
- package/lib/typescript/components/tabs/host/TabsHost.android.d.ts.map +1 -0
- package/lib/typescript/components/tabs/host/TabsHost.android.types.d.ts +19 -0
- package/lib/typescript/components/tabs/host/TabsHost.android.types.d.ts.map +1 -0
- package/lib/typescript/components/tabs/{TabsHost.d.ts → host/TabsHost.ios.d.ts} +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -0
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +127 -0
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -0
- package/lib/typescript/components/tabs/host/TabsHost.types.d.ts +244 -0
- package/lib/typescript/components/tabs/host/TabsHost.types.d.ts.map +1 -0
- package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +1 -0
- package/lib/typescript/components/tabs/host/index.d.ts +5 -0
- package/lib/typescript/components/tabs/host/index.d.ts.map +1 -0
- package/lib/typescript/components/tabs/host/useTabsHost.d.ts +15 -0
- package/lib/typescript/components/tabs/host/useTabsHost.d.ts.map +1 -0
- package/lib/typescript/components/tabs/index.d.ts +6 -7
- package/lib/typescript/components/tabs/index.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.android.d.ts +8 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.android.d.ts.map +1 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts +182 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts.map +1 -0
- package/lib/typescript/components/tabs/{TabsScreen.d.ts → screen/TabsScreen.ios.d.ts} +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.ios.d.ts.map +1 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts +292 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts.map +1 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts +174 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts.map +1 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +1 -0
- package/lib/typescript/components/tabs/screen/index.d.ts +5 -0
- package/lib/typescript/components/tabs/screen/index.d.ts.map +1 -0
- package/lib/typescript/components/tabs/screen/useTabsScreen.d.ts +25 -0
- package/lib/typescript/components/tabs/screen/useTabsScreen.d.ts.map +1 -0
- package/lib/typescript/experimental/index.d.ts +4 -4
- package/lib/typescript/experimental/index.d.ts.map +1 -1
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +32 -27
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts +27 -27
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +32 -30
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts +4 -2
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/SearchBarNativeComponent.d.ts +18 -18
- package/lib/typescript/fabric/SearchBarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/gamma/ScrollViewMarkerNativeComponent.d.ts +11 -0
- package/lib/typescript/fabric/gamma/ScrollViewMarkerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/gamma/{SplitViewHostNativeComponent.d.ts → split/SplitHostNativeComponent.d.ts} +6 -6
- package/lib/typescript/fabric/gamma/split/SplitHostNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/gamma/split/SplitScreenNativeComponent.d.ts +13 -0
- package/lib/typescript/fabric/gamma/split/SplitScreenNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/gamma/stack/StackHeaderConfigAndroidNativeComponent.d.ts +20 -0
- package/lib/typescript/fabric/gamma/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/gamma/stack/StackHeaderConfigIOSNativeComponent.d.ts +10 -0
- package/lib/typescript/fabric/gamma/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/gamma/stack/StackHeaderSubviewAndroidNativeComponent.d.ts +10 -0
- package/lib/typescript/fabric/gamma/stack/StackHeaderSubviewAndroidNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/gamma/stack/StackScreenNativeComponent.d.ts +6 -6
- package/lib/typescript/fabric/gamma/stack/StackScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts +39 -0
- package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +50 -0
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +51 -0
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +68 -0
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -0
- package/lib/typescript/flags.d.ts +31 -2
- package/lib/typescript/flags.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +3 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/private/hooks/useRenderDebugInfo.d.ts.map +1 -1
- package/lib/typescript/private/index.d.ts +1 -1
- package/lib/typescript/private/index.d.ts.map +1 -1
- package/lib/typescript/private/logging.d.ts +6 -2
- package/lib/typescript/private/logging.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +209 -188
- package/lib/typescript/types.d.ts.map +1 -1
- package/package.json +21 -21
- package/react-native.config.js +4 -1
- package/src/components/DebugContainer.tsx +1 -1
- package/src/components/FullWindowOverlay.tsx +1 -1
- package/src/components/ScreenFooter.tsx +1 -1
- package/src/components/ScreenStack.tsx +5 -0
- package/src/components/ScreenStackHeaderConfig.tsx +8 -0
- package/src/components/ScreenStackHeaderConfig.web.tsx +1 -1
- package/src/components/ScreenStackItem.tsx +38 -26
- package/src/components/SearchBar.tsx +3 -1
- package/src/components/contexts/TopInsetApplicationContext.ts +27 -0
- package/src/components/gamma/scroll-view-marker/ScrollViewMarker.tsx +17 -0
- package/src/components/gamma/scroll-view-marker/ScrollViewMarker.types.ts +42 -0
- package/src/components/gamma/scroll-view-marker/index.ts +3 -0
- package/src/components/gamma/split/SplitHost.tsx +9 -9
- package/src/components/gamma/split/SplitHost.types.ts +36 -40
- package/src/components/gamma/split/SplitScreen.tsx +5 -5
- package/src/components/gamma/split/SplitScreen.types.ts +13 -5
- package/src/components/gamma/split/index.ts +19 -5
- package/src/components/gamma/stack/header/StackHeaderConfig.android.tsx +166 -0
- package/src/components/gamma/stack/header/StackHeaderConfig.android.types.ts +213 -0
- package/src/components/gamma/stack/header/StackHeaderConfig.d.ts +17 -0
- package/src/components/gamma/stack/header/StackHeaderConfig.ios.tsx +18 -0
- package/src/components/gamma/stack/header/StackHeaderConfig.ios.types.ts +2 -0
- package/src/components/gamma/stack/header/StackHeaderConfig.types.ts +51 -0
- package/src/components/gamma/stack/header/StackHeaderConfig.web.tsx +5 -0
- package/src/components/gamma/stack/header/android/StackHeaderSubview.android.tsx +33 -0
- package/src/components/gamma/stack/header/android/StackHeaderSubview.android.types.ts +16 -0
- package/src/components/gamma/stack/header/index.ts +6 -0
- package/src/components/gamma/stack/{StackHost.tsx → host/StackHost.tsx} +1 -1
- package/src/components/gamma/stack/host/StackHost.types.ts +13 -0
- package/src/components/gamma/stack/host/index.ts +3 -0
- package/src/components/gamma/stack/index.ts +28 -7
- package/src/components/gamma/stack/{StackScreen.tsx → screen/StackScreen.tsx} +2 -2
- package/src/components/gamma/stack/{StackScreen.types.ts → screen/StackScreen.types.ts} +9 -9
- package/src/components/gamma/stack/screen/index.ts +3 -0
- package/src/components/helpers/PlatformUtils.ts +4 -0
- package/src/components/helpers/prepareHeaderBarButtonItems.ts +4 -2
- package/src/components/safe-area/SafeAreaView.tsx +1 -3
- package/src/components/safe-area/SafeAreaView.types.ts +2 -2
- package/src/components/safe-area/SafeAreaView.web.tsx +1 -1
- package/src/components/safe-area/index.ts +3 -0
- package/src/components/shared/types.ts +37 -0
- package/src/components/tabs/{TabsAccessory.tsx → bottom-accessory/TabsBottomAccessory.tsx} +3 -3
- package/src/components/tabs/bottom-accessory/TabsBottomAccessory.types.ts +15 -0
- package/src/components/tabs/bottom-accessory/TabsBottomAccessoryContent.tsx +19 -0
- package/src/components/tabs/bottom-accessory/TabsBottomAccessoryContent.types.ts +6 -0
- package/src/components/tabs/bottom-accessory/index.ts +5 -0
- package/src/components/tabs/host/TabsHost.android.tsx +65 -0
- package/src/components/tabs/host/TabsHost.android.types.ts +18 -0
- package/src/components/tabs/host/TabsHost.d.ts +15 -0
- package/src/components/tabs/host/TabsHost.ios.tsx +94 -0
- package/src/components/tabs/host/TabsHost.ios.types.ts +139 -0
- package/src/components/tabs/host/TabsHost.types.ts +274 -0
- package/src/components/tabs/host/index.ts +6 -0
- package/src/components/tabs/host/useTabsHost.ts +49 -0
- package/src/components/tabs/index.ts +43 -8
- package/src/components/tabs/screen/TabsScreen.android.tsx +198 -0
- package/src/components/tabs/screen/TabsScreen.android.types.ts +189 -0
- package/src/components/tabs/screen/TabsScreen.d.ts +15 -0
- package/src/components/tabs/screen/TabsScreen.ios.tsx +235 -0
- package/src/components/tabs/screen/TabsScreen.ios.types.ts +312 -0
- package/src/components/tabs/screen/TabsScreen.types.ts +202 -0
- package/src/components/tabs/screen/index.ts +6 -0
- package/src/components/tabs/screen/useTabsScreen.ts +97 -0
- package/src/experimental/index.ts +5 -8
- package/src/fabric/ModalScreenNativeComponent.ts +41 -27
- package/src/fabric/ScreenNativeComponent.ts +35 -27
- package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +36 -30
- package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +1 -1
- package/src/fabric/ScreenStackNativeComponent.ts +7 -2
- package/src/fabric/SearchBarNativeComponent.ts +24 -18
- package/src/fabric/gamma/ScrollViewMarkerNativeComponent.ts +15 -0
- package/src/fabric/gamma/{SplitViewHostNativeComponent.ts → split/SplitHostNativeComponent.ts} +8 -6
- package/src/fabric/gamma/split/SplitScreenNativeComponent.ts +24 -0
- package/src/fabric/gamma/stack/StackHeaderConfigAndroidNativeComponent.ts +39 -0
- package/src/fabric/gamma/stack/StackHeaderConfigIOSNativeComponent.ts +18 -0
- package/src/fabric/gamma/stack/StackHeaderSubviewAndroidNativeComponent.ts +27 -0
- package/src/fabric/gamma/stack/StackScreenNativeComponent.ts +11 -7
- package/src/fabric/safe-area/SafeAreaViewNativeComponent.ts +8 -6
- package/src/fabric/tabs/TabsBottomAccessoryNativeComponent.ts +4 -1
- package/src/fabric/tabs/TabsHostAndroidNativeComponent.ts +69 -0
- package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +91 -0
- package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +112 -0
- package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +171 -0
- package/src/flags.ts +94 -14
- package/src/index.tsx +6 -2
- package/src/private/hooks/useRenderDebugInfo.tsx +2 -1
- package/src/private/index.ts +1 -4
- package/src/private/logging.ts +27 -12
- package/src/types.tsx +262 -231
- package/android/src/main/java/com/swmansion/rnscreens/CustomAppBarLayout.kt +0 -25
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigShadowNode.kt +0 -28
- package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +0 -24
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt +0 -566
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostAppearanceCoordinator.kt +0 -46
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostEventEmitter.kt +0 -26
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostViewManager.kt +0 -222
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsScreenViewManager.kt +0 -246
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/event/TabsHostNativeFocusChangeEvent.kt +0 -47
- package/android/src/main/java/com/swmansion/rnscreens/safearea/paper/SafeAreaViewLocalData.kt +0 -10
- package/android/src/main/java/com/swmansion/rnscreens/safearea/paper/SafeAreaViewShadowNode.kt +0 -124
- package/android/src/main/java/com/swmansion/rnscreens/utils/PaddingBundle.kt +0 -9
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSafeAreaViewManagerDelegate.java +0 -37
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSafeAreaViewManagerInterface.java +0 -20
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerDelegate.java +0 -27
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerInterface.java +0 -17
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContentWrapperManagerDelegate.java +0 -27
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContentWrapperManagerInterface.java +0 -17
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenFooterManagerDelegate.java +0 -27
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenFooterManagerInterface.java +0 -17
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +0 -156
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +0 -60
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +0 -128
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +0 -50
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerDelegate.java +0 -39
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerInterface.java +0 -20
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerDelegate.java +0 -33
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerInterface.java +0 -17
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerDelegate.java +0 -107
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerInterface.java +0 -40
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSStackHostManagerDelegate.java +0 -27
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSStackHostManagerInterface.java +0 -17
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSStackScreenManagerDelegate.java +0 -39
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSStackScreenManagerInterface.java +0 -20
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSTabsHostManagerDelegate.java +0 -91
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSTabsHostManagerInterface.java +0 -37
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSTabsScreenManagerDelegate.java +0 -114
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSTabsScreenManagerInterface.java +0 -46
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +0 -56
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledHeaderSubviewViewGroup.kt +0 -19
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +0 -19
- package/android/src/paper/java/com/swmansion/rnscreens/NativeProxy.kt +0 -23
- package/android/src/paper/java/com/swmansion/rnscreens/NativeScreensModuleSpec.java +0 -35
- package/common/cpp/react/renderer/components/rnscreens/RNSSplitViewScreenComponentDescriptor.h +0 -40
- package/common/cpp/react/renderer/components/rnscreens/RNSSplitViewScreenShadowNode.cpp +0 -13
- package/ios/RNSInvalidatedComponentsRegistry.h +0 -15
- package/ios/RNSInvalidatedComponentsRegistry.mm +0 -34
- package/ios/RNSViewControllerInvalidating.h +0 -15
- package/ios/RNSViewControllerInvalidator.h +0 -17
- package/ios/RNSViewControllerInvalidator.mm +0 -23
- package/ios/gamma/split-view/RNSSplitViewAppearanceApplicator.swift +0 -194
- package/ios/gamma/split-view/RNSSplitViewAppearanceCoordinator.swift +0 -26
- package/ios/gamma/split-view/RNSSplitViewAppearanceUpdateFlags.swift +0 -11
- package/ios/gamma/split-view/RNSSplitViewHostComponentViewManager.mm +0 -7
- package/ios/gamma/split-view/RNSSplitViewScreenComponentViewManager.mm +0 -7
- package/ios/gamma/split-view/RNSSplitViewScreenController.swift +0 -133
- package/ios/gamma/stack/host/RNSStackController.swift +0 -65
- package/ios/gamma/stack/screen/RNSStackScreenController.swift +0 -64
- package/ios/safe-area/paper/RNSSafeAreaViewEdges.h +0 -16
- package/ios/safe-area/paper/RNSSafeAreaViewEdges.mm +0 -37
- package/ios/safe-area/paper/RNSSafeAreaViewLocalData.h +0 -22
- package/ios/safe-area/paper/RNSSafeAreaViewLocalData.mm +0 -20
- package/ios/safe-area/paper/RNSSafeAreaViewManager.h +0 -16
- package/ios/safe-area/paper/RNSSafeAreaViewManager.mm +0 -28
- package/ios/safe-area/paper/RNSSafeAreaViewShadowView.h +0 -16
- package/ios/safe-area/paper/RNSSafeAreaViewShadowView.mm +0 -152
- package/ios/tabs/host/RNSTabBarControllerDelegate.h +0 -11
- package/ios/tabs/host/RNSTabBarControllerDelegate.mm +0 -87
- package/lib/commonjs/components/gamma/stack/StackHost.js.map +0 -1
- package/lib/commonjs/components/gamma/stack/StackHost.types.js.map +0 -1
- package/lib/commonjs/components/gamma/stack/StackHost.web.js.map +0 -1
- package/lib/commonjs/components/gamma/stack/StackScreen.js.map +0 -1
- package/lib/commonjs/components/gamma/stack/StackScreen.types.js.map +0 -1
- package/lib/commonjs/components/gamma/stack/StackScreen.web.js.map +0 -1
- package/lib/commonjs/components/tabs/TabsAccessory.js.map +0 -1
- package/lib/commonjs/components/tabs/TabsAccessory.types.js.map +0 -1
- package/lib/commonjs/components/tabs/TabsAccessoryContent.js.map +0 -1
- package/lib/commonjs/components/tabs/TabsAccessoryContent.types.js.map +0 -1
- package/lib/commonjs/components/tabs/TabsHost.js.map +0 -1
- package/lib/commonjs/components/tabs/TabsHost.types.js.map +0 -1
- package/lib/commonjs/components/tabs/TabsHost.web.js.map +0 -1
- package/lib/commonjs/components/tabs/TabsScreen.js +0 -257
- package/lib/commonjs/components/tabs/TabsScreen.js.map +0 -1
- package/lib/commonjs/components/tabs/TabsScreen.types.js.map +0 -1
- package/lib/commonjs/components/tabs/TabsScreen.web.js.map +0 -1
- package/lib/commonjs/experimental/types.js +0 -61
- package/lib/commonjs/experimental/types.js.map +0 -1
- package/lib/commonjs/fabric/gamma/SplitViewHostNativeComponent.js.map +0 -1
- package/lib/commonjs/fabric/gamma/SplitViewScreenNativeComponent.js.map +0 -1
- package/lib/commonjs/fabric/tabs/TabsHostNativeComponent.js +0 -18
- package/lib/commonjs/fabric/tabs/TabsHostNativeComponent.js.map +0 -1
- package/lib/commonjs/fabric/tabs/TabsScreenNativeComponent.js.map +0 -1
- package/lib/module/components/gamma/stack/StackHost.js.map +0 -1
- package/lib/module/components/gamma/stack/StackHost.types.js.map +0 -1
- package/lib/module/components/gamma/stack/StackHost.web.js.map +0 -1
- package/lib/module/components/gamma/stack/StackScreen.js.map +0 -1
- package/lib/module/components/gamma/stack/StackScreen.types.js.map +0 -1
- package/lib/module/components/gamma/stack/StackScreen.web.js.map +0 -1
- package/lib/module/components/tabs/TabsAccessory.js.map +0 -1
- package/lib/module/components/tabs/TabsAccessory.types.js +0 -2
- package/lib/module/components/tabs/TabsAccessory.types.js.map +0 -1
- package/lib/module/components/tabs/TabsAccessoryContent.js.map +0 -1
- package/lib/module/components/tabs/TabsAccessoryContent.types.js +0 -2
- package/lib/module/components/tabs/TabsAccessoryContent.types.js.map +0 -1
- package/lib/module/components/tabs/TabsHost.js +0 -64
- package/lib/module/components/tabs/TabsHost.js.map +0 -1
- package/lib/module/components/tabs/TabsHost.types.js.map +0 -1
- package/lib/module/components/tabs/TabsHost.web.js.map +0 -1
- package/lib/module/components/tabs/TabsScreen.js +0 -251
- package/lib/module/components/tabs/TabsScreen.js.map +0 -1
- package/lib/module/components/tabs/TabsScreen.types.js.map +0 -1
- package/lib/module/components/tabs/TabsScreen.web.js.map +0 -1
- package/lib/module/experimental/types.js +0 -11
- package/lib/module/experimental/types.js.map +0 -1
- package/lib/module/fabric/gamma/SplitViewHostNativeComponent.js.map +0 -1
- package/lib/module/fabric/gamma/SplitViewScreenNativeComponent.js.map +0 -1
- package/lib/module/fabric/tabs/TabsHostNativeComponent.js +0 -15
- package/lib/module/fabric/tabs/TabsHostNativeComponent.js.map +0 -1
- package/lib/module/fabric/tabs/TabsScreenNativeComponent.js +0 -10
- package/lib/module/fabric/tabs/TabsScreenNativeComponent.js.map +0 -1
- package/lib/typescript/components/gamma/stack/StackHost.d.ts.map +0 -1
- package/lib/typescript/components/gamma/stack/StackHost.types.d.ts +0 -8
- package/lib/typescript/components/gamma/stack/StackHost.types.d.ts.map +0 -1
- package/lib/typescript/components/gamma/stack/StackHost.web.d.ts.map +0 -1
- package/lib/typescript/components/gamma/stack/StackScreen.d.ts.map +0 -1
- package/lib/typescript/components/gamma/stack/StackScreen.types.d.ts +0 -22
- package/lib/typescript/components/gamma/stack/StackScreen.types.d.ts.map +0 -1
- package/lib/typescript/components/gamma/stack/StackScreen.web.d.ts.map +0 -1
- package/lib/typescript/components/tabs/TabsAccessory.d.ts +0 -7
- package/lib/typescript/components/tabs/TabsAccessory.d.ts.map +0 -1
- package/lib/typescript/components/tabs/TabsAccessory.types.d.ts +0 -9
- package/lib/typescript/components/tabs/TabsAccessory.types.d.ts.map +0 -1
- package/lib/typescript/components/tabs/TabsAccessoryContent.d.ts +0 -7
- package/lib/typescript/components/tabs/TabsAccessoryContent.d.ts.map +0 -1
- package/lib/typescript/components/tabs/TabsAccessoryContent.types.d.ts +0 -6
- package/lib/typescript/components/tabs/TabsAccessoryContent.types.d.ts.map +0 -1
- package/lib/typescript/components/tabs/TabsHost.d.ts.map +0 -1
- package/lib/typescript/components/tabs/TabsHost.types.d.ts +0 -257
- package/lib/typescript/components/tabs/TabsHost.types.d.ts.map +0 -1
- package/lib/typescript/components/tabs/TabsHost.web.d.ts.map +0 -1
- package/lib/typescript/components/tabs/TabsScreen.d.ts.map +0 -1
- package/lib/typescript/components/tabs/TabsScreen.types.d.ts +0 -536
- package/lib/typescript/components/tabs/TabsScreen.types.d.ts.map +0 -1
- package/lib/typescript/components/tabs/TabsScreen.web.d.ts.map +0 -1
- package/lib/typescript/experimental/types.d.ts +0 -10
- package/lib/typescript/experimental/types.d.ts.map +0 -1
- package/lib/typescript/fabric/gamma/SplitViewHostNativeComponent.d.ts.map +0 -1
- package/lib/typescript/fabric/gamma/SplitViewScreenNativeComponent.d.ts +0 -13
- package/lib/typescript/fabric/gamma/SplitViewScreenNativeComponent.d.ts.map +0 -1
- package/lib/typescript/fabric/tabs/TabsHostNativeComponent.d.ts +0 -34
- package/lib/typescript/fabric/tabs/TabsHostNativeComponent.d.ts.map +0 -1
- package/lib/typescript/fabric/tabs/TabsScreenNativeComponent.d.ts +0 -82
- package/lib/typescript/fabric/tabs/TabsScreenNativeComponent.d.ts.map +0 -1
- package/src/components/gamma/stack/StackHost.types.ts +0 -10
- package/src/components/tabs/TabsAccessory.types.ts +0 -13
- package/src/components/tabs/TabsAccessoryContent.tsx +0 -17
- package/src/components/tabs/TabsAccessoryContent.types.ts +0 -6
- package/src/components/tabs/TabsHost.tsx +0 -105
- package/src/components/tabs/TabsHost.types.ts +0 -297
- package/src/components/tabs/TabsScreen.tsx +0 -382
- package/src/components/tabs/TabsScreen.types.ts +0 -630
- package/src/experimental/types.ts +0 -10
- package/src/fabric/gamma/SplitViewScreenNativeComponent.ts +0 -24
- package/src/fabric/tabs/TabsHostNativeComponent.ts +0 -75
- package/src/fabric/tabs/TabsScreenNativeComponent.ts +0 -175
- /package/lib/commonjs/components/gamma/stack/{StackHost.types.js → host/StackHost.types.js} +0 -0
- /package/lib/commonjs/components/gamma/stack/{StackHost.web.js → host/StackHost.web.js} +0 -0
- /package/lib/commonjs/components/gamma/stack/{StackScreen.types.js → screen/StackScreen.types.js} +0 -0
- /package/lib/commonjs/components/gamma/stack/{StackScreen.web.js → screen/StackScreen.web.js} +0 -0
- /package/lib/commonjs/components/tabs/{TabsHost.types.js → host/TabsHost.types.js} +0 -0
- /package/lib/commonjs/components/tabs/{TabsHost.web.js → host/TabsHost.web.js} +0 -0
- /package/lib/commonjs/components/tabs/{TabsScreen.types.js → screen/TabsScreen.types.js} +0 -0
- /package/lib/commonjs/components/tabs/{TabsScreen.web.js → screen/TabsScreen.web.js} +0 -0
- /package/lib/module/components/gamma/stack/{StackHost.types.js → host/StackHost.types.js} +0 -0
- /package/lib/module/components/gamma/stack/{StackHost.web.js → host/StackHost.web.js} +0 -0
- /package/lib/module/components/gamma/stack/{StackScreen.types.js → screen/StackScreen.types.js} +0 -0
- /package/lib/module/components/gamma/stack/{StackScreen.web.js → screen/StackScreen.web.js} +0 -0
- /package/lib/module/components/tabs/{TabsHost.types.js → host/TabsHost.types.js} +0 -0
- /package/lib/module/components/tabs/{TabsHost.web.js → host/TabsHost.web.js} +0 -0
- /package/lib/module/components/tabs/{TabsScreen.types.js → screen/TabsScreen.types.js} +0 -0
- /package/lib/module/components/tabs/{TabsScreen.web.js → screen/TabsScreen.web.js} +0 -0
- /package/lib/typescript/components/gamma/stack/{StackHost.d.ts → host/StackHost.d.ts} +0 -0
- /package/lib/typescript/components/gamma/stack/{StackHost.web.d.ts → host/StackHost.web.d.ts} +0 -0
- /package/lib/typescript/components/gamma/stack/{StackScreen.d.ts → screen/StackScreen.d.ts} +0 -0
- /package/lib/typescript/components/gamma/stack/{StackScreen.web.d.ts → screen/StackScreen.web.d.ts} +0 -0
- /package/lib/typescript/components/tabs/{TabsHost.web.d.ts → host/TabsHost.web.d.ts} +0 -0
- /package/lib/typescript/components/tabs/{TabsScreen.web.d.ts → screen/TabsScreen.web.d.ts} +0 -0
- /package/src/components/gamma/stack/{StackHost.web.tsx → host/StackHost.web.tsx} +0 -0
- /package/src/components/gamma/stack/{StackScreen.web.tsx → screen/StackScreen.web.tsx} +0 -0
- /package/src/components/tabs/{TabsHost.web.tsx → host/TabsHost.web.tsx} +0 -0
- /package/src/components/tabs/{TabsScreen.web.tsx → screen/TabsScreen.web.tsx} +0 -0
|
@@ -1,12 +1,89 @@
|
|
|
1
1
|
#import "RNSTabBarController.h"
|
|
2
2
|
#import <React/RCTAssert.h>
|
|
3
3
|
#import <React/RCTLog.h>
|
|
4
|
+
#import <objc/message.h>
|
|
5
|
+
#import <objc/runtime.h>
|
|
6
|
+
#import <limits>
|
|
7
|
+
#import "NSString+RNSUtility.h"
|
|
4
8
|
#import "RNSLog.h"
|
|
5
9
|
#import "RNSScreenWindowTraits.h"
|
|
10
|
+
#import "RNSTabsHostComponentView.h"
|
|
11
|
+
#import "RNSTabsNavigationStateObserverRegistry.h"
|
|
12
|
+
|
|
13
|
+
#define RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE !TARGET_OS_TV && !TARGET_OS_VISION
|
|
14
|
+
|
|
15
|
+
// We need UINavigationControllerDelegate to handle navigation within `moreNavigationController`
|
|
16
|
+
@interface RNSTabBarController () <UITabBarControllerDelegate, UINavigationControllerDelegate>
|
|
17
|
+
@end
|
|
18
|
+
|
|
19
|
+
@interface RNSTabBarController ()
|
|
20
|
+
|
|
21
|
+
/// Consulted by the ISA-swizzled `pushViewController:animated:` on `moreNavigationController`
|
|
22
|
+
/// to decide whether a push should proceed.
|
|
23
|
+
- (BOOL)moreNavigationController:(UINavigationController *)navigationController
|
|
24
|
+
shouldPushViewController:(UIViewController *)viewController;
|
|
25
|
+
|
|
26
|
+
@property (nonatomic, readwrite) BOOL shouldProgressStateOnMoreNavigationControllerPush;
|
|
27
|
+
|
|
28
|
+
@end
|
|
29
|
+
|
|
30
|
+
#if RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
31
|
+
/**
|
|
32
|
+
* Replacement implementation for `pushViewController:animated:` injected into
|
|
33
|
+
* a dynamic subclass of `UIMoreNavigationController` via ISA-swizzle.
|
|
34
|
+
*
|
|
35
|
+
* Before allowing the push, this function consults the owning `RNSTabBarController`
|
|
36
|
+
* (reached via UIKit's `tabBarController` property on the parent chain)
|
|
37
|
+
* to check whether the push should be prevented (e.g. due to `preventNativeSelection`).
|
|
38
|
+
*/
|
|
39
|
+
static void rns_pushViewController(__unsafe_unretained id self,
|
|
40
|
+
SEL _cmd,
|
|
41
|
+
UIViewController *viewController,
|
|
42
|
+
BOOL animated)
|
|
43
|
+
{
|
|
44
|
+
UITabBarController *rawTabBarController = static_cast<UIViewController *>(self).tabBarController;
|
|
45
|
+
|
|
46
|
+
RCTAssert([rawTabBarController isKindOfClass:RNSTabBarController.class],
|
|
47
|
+
@"[RNScreens] Expected tabBarController to be of class %@, got: %@",
|
|
48
|
+
RNSTabBarController.class,
|
|
49
|
+
rawTabBarController.class);
|
|
50
|
+
RNSTabBarController *tabBarController = static_cast<RNSTabBarController *>(rawTabBarController);
|
|
51
|
+
|
|
52
|
+
if ([tabBarController moreNavigationController:self shouldPushViewController:viewController]) {
|
|
53
|
+
struct objc_super superInfo = {
|
|
54
|
+
.receiver = self,
|
|
55
|
+
.super_class = class_getSuperclass(object_getClass(self)),
|
|
56
|
+
};
|
|
57
|
+
const auto msgSendSuperPushViewController =
|
|
58
|
+
reinterpret_cast<void (*)(struct objc_super *, SEL, UIViewController *, BOOL)>(objc_msgSendSuper);
|
|
59
|
+
|
|
60
|
+
[tabBarController setShouldProgressStateOnMoreNavigationControllerPush:YES];
|
|
61
|
+
msgSendSuperPushViewController(&superInfo, _cmd, viewController, animated);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
#endif // RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
6
65
|
|
|
7
66
|
@implementation RNSTabBarController {
|
|
8
67
|
NSArray<RNSTabsScreenViewController *> *_Nullable _tabScreenControllers;
|
|
9
68
|
|
|
69
|
+
/// This property is nullable until first container update. Later it MUST NOT be nil.
|
|
70
|
+
RNSTabsNavigationState *_Nullable _navigationState;
|
|
71
|
+
|
|
72
|
+
/// Holds last state that has been a result of UI-side navigation (user request).
|
|
73
|
+
/// This one is also updated in cases where UIKit modifies the selected tab implicitly,
|
|
74
|
+
/// e.g. when user resizes the app and more tab disappears.
|
|
75
|
+
///
|
|
76
|
+
/// This property is nullable until first container update. Later it MUST NOT be nil.
|
|
77
|
+
RNSTabsNavigationState *_Nullable _lastUINavigationState;
|
|
78
|
+
|
|
79
|
+
RNSTabsNavigationStateUpdateRequest *_Nullable _pendingStateUpdate;
|
|
80
|
+
|
|
81
|
+
/// When YES, the controller is inside an explicit selection-changing code path (container update,
|
|
82
|
+
/// delegate handling). Setter overrides skip reconciliation while this flag is set.
|
|
83
|
+
BOOL _isHandlingExplicitSelectionUpdate;
|
|
84
|
+
|
|
85
|
+
RNSTabsNavigationStateObserverRegistry *_observerRegistry;
|
|
86
|
+
|
|
10
87
|
#if !RCT_NEW_ARCH_ENABLED
|
|
11
88
|
BOOL _isControllerFlushBlockScheduled;
|
|
12
89
|
#endif // !RCT_NEW_ARCH_ENABLED
|
|
@@ -18,6 +95,13 @@
|
|
|
18
95
|
_tabScreenControllers = nil;
|
|
19
96
|
_tabBarAppearanceCoordinator = [RNSTabBarAppearanceCoordinator new];
|
|
20
97
|
_tabsHostComponentView = nil;
|
|
98
|
+
_navigationState = nil;
|
|
99
|
+
_pendingStateUpdate = nil;
|
|
100
|
+
_shouldProgressStateOnMoreNavigationControllerPush = NO;
|
|
101
|
+
_observerRegistry = [RNSTabsNavigationStateObserverRegistry new];
|
|
102
|
+
|
|
103
|
+
// Delegate field retains weakly, no risk of cycle.
|
|
104
|
+
self.delegate = self;
|
|
21
105
|
|
|
22
106
|
#if !RCT_NEW_ARCH_ENABLED
|
|
23
107
|
_isControllerFlushBlockScheduled = NO;
|
|
@@ -26,6 +110,41 @@
|
|
|
26
110
|
return self;
|
|
27
111
|
}
|
|
28
112
|
|
|
113
|
+
#pragma mark - Public API
|
|
114
|
+
|
|
115
|
+
- (void)submitSelectionOfTabsScreenWithKey:(nonnull NSString *)screenKey
|
|
116
|
+
{
|
|
117
|
+
RCTAssert(screenKey != nil, @"[RNScreens] Requested screenKey MUST NOT be nil");
|
|
118
|
+
int baseProvenance = _navigationState != nil ? _navigationState.provenance : std::numeric_limits<int>::min();
|
|
119
|
+
RNSTabsNavigationStateUpdateRequest *request =
|
|
120
|
+
[RNSTabsNavigationStateUpdateRequest requestWithSelectedScreenKey:screenKey
|
|
121
|
+
baseProvenance:baseProvenance
|
|
122
|
+
actionOrigin:RNSTabsActionOriginProgrammaticNative];
|
|
123
|
+
[self setPendingNavigationStateUpdate:request];
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
- (void)flushPendingUpdates
|
|
127
|
+
{
|
|
128
|
+
[self performContainerUpdate];
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
- (BOOL)addNavigationStateObserver:(id<RNSTabsNavigationStateObserver>)observer
|
|
132
|
+
{
|
|
133
|
+
return [_observerRegistry addObserver:observer];
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
- (BOOL)removeNavigationStateObserver:(id<RNSTabsNavigationStateObserver>)observer
|
|
137
|
+
{
|
|
138
|
+
return [_observerRegistry removeObserver:observer];
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
- (void)tearDown
|
|
142
|
+
{
|
|
143
|
+
[_observerRegistry clear];
|
|
144
|
+
_pendingStateUpdate = nil;
|
|
145
|
+
_tabsHostComponentView = nil;
|
|
146
|
+
}
|
|
147
|
+
|
|
29
148
|
- (instancetype)initWithTabsHostComponentView:(nullable RNSTabsHostComponentView *)tabsHostComponentView
|
|
30
149
|
{
|
|
31
150
|
if (self = [self init]) {
|
|
@@ -34,35 +153,54 @@
|
|
|
34
153
|
return self;
|
|
35
154
|
}
|
|
36
155
|
|
|
156
|
+
#pragma mark - UIKit callbacks
|
|
157
|
+
|
|
158
|
+
- (void)didMoveToParentViewController:(UIViewController *)parent
|
|
159
|
+
{
|
|
160
|
+
[super didMoveToParentViewController:parent];
|
|
161
|
+
|
|
162
|
+
if (parent != nil) {
|
|
163
|
+
[self updateLayoutDirectionBelowIOS17IfNeeded];
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
37
167
|
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
|
|
38
168
|
{
|
|
39
169
|
RNSLog(@"TabBar: %@ didSelectItem: %@", tabBar, item);
|
|
40
170
|
}
|
|
41
171
|
|
|
42
|
-
|
|
172
|
+
- (void)setSelectedIndex:(NSUInteger)selectedIndex
|
|
173
|
+
{
|
|
174
|
+
[super setSelectedIndex:selectedIndex];
|
|
175
|
+
if (!_isHandlingExplicitSelectionUpdate) {
|
|
176
|
+
[self reconcileNavigationStateWithUIKitState];
|
|
177
|
+
}
|
|
178
|
+
}
|
|
43
179
|
|
|
44
|
-
- (void)
|
|
180
|
+
- (void)setSelectedViewController:(__kindof UIViewController *)selectedViewController
|
|
45
181
|
{
|
|
46
|
-
|
|
47
|
-
|
|
182
|
+
[super setSelectedViewController:selectedViewController];
|
|
183
|
+
if (!_isHandlingExplicitSelectionUpdate) {
|
|
184
|
+
[self reconcileNavigationStateWithUIKitState];
|
|
185
|
+
}
|
|
48
186
|
}
|
|
49
187
|
|
|
50
|
-
-
|
|
188
|
+
#pragma mark - Signals
|
|
189
|
+
|
|
190
|
+
- (void)setPendingNavigationStateUpdate:(nullable RNSTabsNavigationStateUpdateRequest *)stateUpdate
|
|
51
191
|
{
|
|
52
|
-
|
|
53
|
-
self.needsUpdateOfSelectedTab = true;
|
|
54
|
-
#if !RCT_NEW_ARCH_ENABLED
|
|
55
|
-
[self scheduleControllerUpdateIfNeeded];
|
|
56
|
-
#endif // !RCT_NEW_ARCH_ENABLED
|
|
192
|
+
_pendingStateUpdate = stateUpdate;
|
|
57
193
|
}
|
|
58
194
|
|
|
59
|
-
- (void)
|
|
195
|
+
- (void)childViewControllersHaveChangedTo:(NSArray<RNSTabsScreenViewController *> *)reactChildControllers
|
|
60
196
|
{
|
|
61
|
-
|
|
197
|
+
_tabScreenControllers = reactChildControllers;
|
|
198
|
+
self.needsUpdateOfChildViewControllers = true;
|
|
199
|
+
}
|
|
62
200
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
201
|
+
- (void)setNeedsUpdateOfChildViewControllers:(bool)needsReactChildrenUpdate
|
|
202
|
+
{
|
|
203
|
+
_needsUpdateOfChildViewControllers = true;
|
|
66
204
|
#if !RCT_NEW_ARCH_ENABLED
|
|
67
205
|
[self scheduleControllerUpdateIfNeeded];
|
|
68
206
|
#endif // !RCT_NEW_ARCH_ENABLED
|
|
@@ -84,7 +222,12 @@
|
|
|
84
222
|
#endif // !RCT_NEW_ARCH_ENABLED
|
|
85
223
|
}
|
|
86
224
|
|
|
87
|
-
|
|
225
|
+
- (void)setNeedsLayoutDirectionUpdateBelowIOS17:(bool)needsLayoutDirectionUpdate
|
|
226
|
+
{
|
|
227
|
+
_needsLayoutDirectionUpdateBelowIOS17 = needsLayoutDirectionUpdate;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
#pragma mark - RNSReactTransactionObserving
|
|
88
231
|
|
|
89
232
|
- (void)reactMountingTransactionWillMount
|
|
90
233
|
{
|
|
@@ -94,18 +237,225 @@
|
|
|
94
237
|
- (void)reactMountingTransactionDidMount
|
|
95
238
|
{
|
|
96
239
|
RNSLog(@"TabBarCtrl mountintTransactionDidMount running updates");
|
|
97
|
-
[self
|
|
240
|
+
[self performContainerUpdate];
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
#pragma mark - Container update
|
|
244
|
+
|
|
245
|
+
- (void)performContainerUpdate
|
|
246
|
+
{
|
|
247
|
+
_isHandlingExplicitSelectionUpdate = YES;
|
|
248
|
+
[self updateChildViewControllersIfNeeded];
|
|
98
249
|
[self updateSelectedViewControllerIfNeeded];
|
|
250
|
+
_isHandlingExplicitSelectionUpdate = NO;
|
|
251
|
+
|
|
99
252
|
[self updateTabBarAppearanceIfNeeded];
|
|
100
253
|
[self updateTabBarA11yIfNeeded];
|
|
101
254
|
[self updateOrientationIfNeeded];
|
|
102
255
|
}
|
|
103
256
|
|
|
104
|
-
|
|
257
|
+
/**
|
|
258
|
+
* Update UIKit model and associated navigation state.
|
|
259
|
+
*
|
|
260
|
+
* This method will advance state in case the selected view controller is repeated.
|
|
261
|
+
*
|
|
262
|
+
* This method MUST be called only in situations where `UITabBarController` state has not been updated yet.
|
|
263
|
+
* Otherwise it'll progress the state incorrectly.
|
|
264
|
+
*
|
|
265
|
+
* @returns whether the state has been updated or not.
|
|
266
|
+
*/
|
|
267
|
+
- (BOOL)updateSelectedViewControllerTo:(nullable UIViewController *)nextSelectedViewController
|
|
268
|
+
withKey:(nullable NSString *)screenKey
|
|
269
|
+
{
|
|
270
|
+
if (nextSelectedViewController == nil) {
|
|
271
|
+
return NO;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
UIViewController *currSelectedViewController = self.selectedViewController;
|
|
275
|
+
|
|
276
|
+
RCTAssert(![NSString rnscreens_isBlankOrNull:screenKey],
|
|
277
|
+
@"[RNScreens] The screenKey MUST NOT be null if the view controller is not null");
|
|
278
|
+
|
|
279
|
+
[self progressNavigationState:screenKey withOrigin:RNSTabsActionOriginProgrammaticJs];
|
|
280
|
+
|
|
281
|
+
if (currSelectedViewController == nextSelectedViewController) {
|
|
282
|
+
return YES;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
[self setSelectedViewController:nextSelectedViewController];
|
|
286
|
+
return YES;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Update tabs navigation state in reaction to UIKit model update.
|
|
291
|
+
*
|
|
292
|
+
* This method does not update the UIKit model. It assumes that exactly one model update happened,
|
|
293
|
+
* and will sync the state with the UIKit and progress the provenance.
|
|
294
|
+
*/
|
|
295
|
+
- (void)updateNavigationStateOnModelUpdate
|
|
296
|
+
{
|
|
297
|
+
[self progressNavigationState:[self screenKeyForSelectedViewController] withOrigin:RNSTabsActionOriginUser];
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
- (void)userDidRepeatViewControllerSelection:(nonnull UIViewController *)viewController
|
|
301
|
+
{
|
|
302
|
+
RCTAssert(self.selectedViewController == viewController,
|
|
303
|
+
@"[RNScreens] Expected UIKit to update selectedViewController");
|
|
304
|
+
|
|
305
|
+
if ([self isSelectedViewControllerTheMoreNavigationController]) {
|
|
306
|
+
// We don't want to run neither state update nor side effects.
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
[self updateNavigationStateOnModelUpdate];
|
|
311
|
+
|
|
312
|
+
// After state progression we trigger the special effect.
|
|
313
|
+
BOOL repeatedSelectionHandledBySpecialEffect = [[self selectedScreenViewController] tabScreenSelectedRepeatedly];
|
|
314
|
+
|
|
315
|
+
auto *updateContext =
|
|
316
|
+
[[RNSTabsNavigationStateUpdateContext alloc] initWithNavState:_navigationState
|
|
317
|
+
isRepeated:YES
|
|
318
|
+
hasTriggeredSpecialEffect:repeatedSelectionHandledBySpecialEffect
|
|
319
|
+
actionOrigin:RNSTabsActionOriginUser];
|
|
320
|
+
[_observerRegistry emitDidUpdateStateTo:_navigationState withContext:updateContext sender:self];
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
- (void)userDidSelectViewController:(nonnull UIViewController *)viewController
|
|
324
|
+
{
|
|
325
|
+
// At this moment the `UITabBarController` model is already updated.
|
|
326
|
+
RCTAssert(self.selectedViewController == viewController,
|
|
327
|
+
@"[RNScreens] Expected UIKit to update selectedViewController");
|
|
328
|
+
|
|
329
|
+
if ([self isSelectedViewControllerTheMoreNavigationController]) {
|
|
330
|
+
[self disableNavigationBarInMoreNavigationController];
|
|
331
|
+
[self prepareForMoreNavigationControllerHandlingIfNeeded];
|
|
332
|
+
|
|
333
|
+
// We don't want to progress state in case a user selected the more navigation controller.
|
|
334
|
+
// Instead, we emit a dedicated event so JS knows the More tab was tapped.
|
|
335
|
+
[_observerRegistry emitDidSelectMoreTabWithCurrentState:_navigationState sender:self];
|
|
336
|
+
} else {
|
|
337
|
+
[self updateNavigationStateOnModelUpdate];
|
|
338
|
+
auto *updateContext = [[RNSTabsNavigationStateUpdateContext alloc] initWithNavState:_navigationState
|
|
339
|
+
isRepeated:NO
|
|
340
|
+
hasTriggeredSpecialEffect:NO
|
|
341
|
+
actionOrigin:RNSTabsActionOriginUser];
|
|
342
|
+
[_observerRegistry emitDidUpdateStateTo:_navigationState withContext:updateContext sender:self];
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
- (void)onDidPreventUserFromSelectingViewControllerWithKey:(nonnull NSString *)screenKey
|
|
347
|
+
{
|
|
348
|
+
[_observerRegistry emitPreventedSelectionOf:screenKey currentState:_navigationState sender:self];
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
- (BOOL)shouldPreventNativeTabSelection:(nonnull UIViewController *)nextViewController
|
|
352
|
+
{
|
|
353
|
+
if (![nextViewController isKindOfClass:RNSTabsScreenViewController.class]) {
|
|
354
|
+
// Allow for more view controller selection
|
|
355
|
+
return NO;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
auto *screenViewController = static_cast<RNSTabsScreenViewController *>(nextViewController);
|
|
359
|
+
return screenViewController.isPreventNativeSelectionEnabled;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
#pragma mark - UITabBarControllerDelegate
|
|
363
|
+
|
|
364
|
+
// These methods are not called on programatic selection!
|
|
365
|
+
// They are called only when a user taps on tab bar.
|
|
105
366
|
|
|
106
|
-
- (
|
|
367
|
+
- (BOOL)tabBarController:(UITabBarController *)tabBarController
|
|
368
|
+
shouldSelectViewController:(UIViewController *)viewController
|
|
107
369
|
{
|
|
108
|
-
|
|
370
|
+
RCTAssert(tabBarController == self, @"[RNScreens] Unexpected type of controller: %@", tabBarController.class);
|
|
371
|
+
|
|
372
|
+
// Can be UINavigationController in case of MoreNavigationController
|
|
373
|
+
RCTAssert([viewController isKindOfClass:RNSTabsScreenViewController.class] ||
|
|
374
|
+
[viewController isKindOfClass:UINavigationController.class],
|
|
375
|
+
@"[RNScreens] Unexpected type of controller: %@",
|
|
376
|
+
viewController.class);
|
|
377
|
+
|
|
378
|
+
// TODO: handle enforcing orientation with natively-driven tabs
|
|
379
|
+
|
|
380
|
+
// Detect repeated selection and inform tabScreenController
|
|
381
|
+
BOOL repeatedSelection = self.selectedViewController == viewController;
|
|
382
|
+
|
|
383
|
+
if (repeatedSelection) {
|
|
384
|
+
// On repeated selection we return false to prevent native *pop to root* effect that works only starting from iOS 26
|
|
385
|
+
// and interferes with our implementation (which is necessary for controlled tabs).
|
|
386
|
+
|
|
387
|
+
// We trigger the state update from here, because `tabBarController:didSelectViewController:` won't be called.
|
|
388
|
+
[self userDidRepeatViewControllerSelection:viewController];
|
|
389
|
+
|
|
390
|
+
return NO;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
BOOL shouldPreventTabSelection = [self shouldPreventNativeTabSelection:viewController];
|
|
394
|
+
|
|
395
|
+
if (shouldPreventTabSelection) {
|
|
396
|
+
// Ideally we'd call this AFTER we prevent, but there is no appropriate callback.
|
|
397
|
+
// As long as we emit the event asynchronously this is rather fine.
|
|
398
|
+
[self onDidPreventUserFromSelectingViewControllerWithKey:[self screenKeyForViewController:viewController]];
|
|
399
|
+
return NO;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// If we're gonna allow navigation to `moreNavigationController`, then we need to ensure
|
|
403
|
+
// that on top of its stack there is no controller with preventNativeSelection enabled.
|
|
404
|
+
// In such case, we want to pop to root.
|
|
405
|
+
// We do it here, because in `tabBarController:didSelectViewController:` we won't receive
|
|
406
|
+
// `moreNavigationController` in case there is already a tab pushed on the stack.
|
|
407
|
+
if ([self isViewControllerTheMoreNavigationController:viewController]) {
|
|
408
|
+
auto *poppedViewController = [self popToRootInMoreNavigationControllerRespectSelectionPrevention:YES animated:NO];
|
|
409
|
+
if (poppedViewController != nil) {
|
|
410
|
+
// We actually popped something -> let's notify JS realm of this fact.
|
|
411
|
+
[self onDidPreventUserFromSelectingViewControllerWithKey:[self screenKeyForViewController:poppedViewController]];
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
_isHandlingExplicitSelectionUpdate = YES;
|
|
416
|
+
return YES;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
- (void)tabBarController:(UITabBarController *)tabBarController
|
|
420
|
+
didSelectViewController:(UIViewController *)viewController
|
|
421
|
+
{
|
|
422
|
+
RCTAssert(self == tabBarController, @"[RNScreens] Unexpected type of controller: %@", tabBarController.class);
|
|
423
|
+
|
|
424
|
+
// Can be UINavigationController in case of MoreNavigationController
|
|
425
|
+
RCTAssert([viewController isKindOfClass:RNSTabsScreenViewController.class] ||
|
|
426
|
+
[viewController isKindOfClass:UINavigationController.class],
|
|
427
|
+
@"[RNScreens] Unexpected type of controller: %@",
|
|
428
|
+
viewController.class);
|
|
429
|
+
|
|
430
|
+
[self userDidSelectViewController:viewController];
|
|
431
|
+
_isHandlingExplicitSelectionUpdate = NO;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
#pragma mark - UINavigationControllerDelegate
|
|
435
|
+
|
|
436
|
+
- (void)navigationController:(UINavigationController *)navigationController
|
|
437
|
+
willShowViewController:(UIViewController *)viewController
|
|
438
|
+
animated:(BOOL)animated
|
|
439
|
+
{
|
|
440
|
+
#if RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
441
|
+
RCTAssert(self.moreNavigationController == navigationController,
|
|
442
|
+
@"[RNScreens] Unexpected view controller called delegate method: %@",
|
|
443
|
+
navigationController);
|
|
444
|
+
|
|
445
|
+
// The root view controller is of different type.
|
|
446
|
+
if ([viewController isKindOfClass:RNSTabsScreenViewController.class] &&
|
|
447
|
+
[self shouldProgressStateOnMoreNavigationControllerPush]) {
|
|
448
|
+
[self userDidSelectViewController:viewController];
|
|
449
|
+
[self setShouldProgressStateOnMoreNavigationControllerPush:NO];
|
|
450
|
+
}
|
|
451
|
+
#endif // RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
#pragma mark - Signals related
|
|
455
|
+
|
|
456
|
+
- (void)updateChildViewControllersIfNeeded
|
|
457
|
+
{
|
|
458
|
+
if (_needsUpdateOfChildViewControllers) {
|
|
109
459
|
[self updateReactChildrenControllers];
|
|
110
460
|
}
|
|
111
461
|
}
|
|
@@ -113,7 +463,7 @@
|
|
|
113
463
|
- (void)updateReactChildrenControllers
|
|
114
464
|
{
|
|
115
465
|
RNSLog(@"TabBarCtrl updateReactChildrenControllers");
|
|
116
|
-
|
|
466
|
+
_needsUpdateOfChildViewControllers = false;
|
|
117
467
|
|
|
118
468
|
if (_tabScreenControllers == nil) {
|
|
119
469
|
RCTLogWarn(@"[RNScreens] Attempt to update react children while the _updatedChildren array is nil!");
|
|
@@ -125,46 +475,85 @@
|
|
|
125
475
|
|
|
126
476
|
- (void)updateSelectedViewControllerIfNeeded
|
|
127
477
|
{
|
|
128
|
-
if (
|
|
478
|
+
if (_pendingStateUpdate != nil) {
|
|
129
479
|
[self updateSelectedViewController];
|
|
130
480
|
}
|
|
131
481
|
}
|
|
132
482
|
|
|
133
483
|
- (void)updateSelectedViewController
|
|
134
484
|
{
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
#if !defined(NDEBUG)
|
|
139
|
-
[self assertExactlyOneFocusedTab];
|
|
140
|
-
#endif
|
|
141
|
-
|
|
142
|
-
RNSTabsScreenViewController *_Nullable selectedViewController = nil;
|
|
143
|
-
for (RNSTabsScreenViewController *tabViewController in self.viewControllers) {
|
|
144
|
-
RNSLog(
|
|
145
|
-
@"Update Selected View Controller [%ld] isFocused %d",
|
|
146
|
-
tabViewController.tabScreenComponentView.tag,
|
|
147
|
-
tabViewController.tabScreenComponentView.isSelectedScreen);
|
|
148
|
-
if (tabViewController.tabScreenComponentView.isSelectedScreen == true) {
|
|
149
|
-
selectedViewController = tabViewController;
|
|
150
|
-
break;
|
|
151
|
-
}
|
|
485
|
+
if (_pendingStateUpdate == nil || self.viewControllers.count == 0) {
|
|
486
|
+
return;
|
|
152
487
|
}
|
|
153
488
|
|
|
154
|
-
|
|
489
|
+
RNSLog(@"TabBarCtrl updateSelectedViewController");
|
|
490
|
+
[self updateSelectedViewControllerInner];
|
|
491
|
+
_pendingStateUpdate = nil;
|
|
492
|
+
}
|
|
155
493
|
|
|
156
|
-
|
|
494
|
+
/**
|
|
495
|
+
* NEVER call this method directly. Call the proper function `updateSelectedViewController`
|
|
496
|
+
*
|
|
497
|
+
* The logic is extracted to an inner method to correctly manage `_pendingStateUpdate` cleanup.
|
|
498
|
+
*/
|
|
499
|
+
- (void)updateSelectedViewControllerInner
|
|
500
|
+
{
|
|
501
|
+
UIViewController *_Nonnull currSelectedViewController = self.selectedViewController;
|
|
502
|
+
|
|
503
|
+
NSString *_Nonnull nextSelectedViewControllerKey = _pendingStateUpdate.selectedScreenKey;
|
|
504
|
+
UIViewController *nextSelectedViewController = [self findChildViewControllerForKey:nextSelectedViewControllerKey];
|
|
505
|
+
|
|
506
|
+
RCTAssert(nextSelectedViewController != nil,
|
|
507
|
+
@"[RNScreens] Failed to determine next selected view controller for key: %@",
|
|
508
|
+
nextSelectedViewControllerKey);
|
|
509
|
+
|
|
510
|
+
RCTAssert([nextSelectedViewController isKindOfClass:RNSTabsScreenViewController.class],
|
|
511
|
+
@"[RNScreens] nextSelectedViewController MUST be %@, got: %@",
|
|
512
|
+
RNSTabsScreenViewController.class,
|
|
513
|
+
nextSelectedViewController.class);
|
|
514
|
+
|
|
515
|
+
if (self.rejectStaleNavigationStateUpdates && [self isNavigationStateUpdateStale:_pendingStateUpdate]) {
|
|
516
|
+
[_observerRegistry emitRejectedStateUpdate:_pendingStateUpdate
|
|
517
|
+
currentState:_navigationState
|
|
518
|
+
withReason:RNSTabsNavigationStateRejectionReasonStale
|
|
519
|
+
sender:self];
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
if (currSelectedViewController == nextSelectedViewController && _navigationState != nil) {
|
|
524
|
+
// Nothing to do, we don't allow for programmatic repeat selection, unless
|
|
525
|
+
// we're during first render.
|
|
526
|
+
[_observerRegistry emitRejectedStateUpdate:_pendingStateUpdate
|
|
527
|
+
currentState:_navigationState
|
|
528
|
+
withReason:RNSTabsNavigationStateRejectionReasonRepeated
|
|
529
|
+
sender:self];
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
157
532
|
|
|
533
|
+
// TODO: This code MUST be moved to some callback.
|
|
534
|
+
// Should this be called only on JS updates?
|
|
535
|
+
auto *screenViewController = static_cast<RNSTabsScreenViewController *>(nextSelectedViewController);
|
|
158
536
|
if (@available(iOS 26.0, *)) {
|
|
159
537
|
// On iOS 26, we need to set user interface style 2 parent views above the tab bar
|
|
160
538
|
// for this prop to take effect.
|
|
161
539
|
self.tabBar.superview.superview.overrideUserInterfaceStyle =
|
|
162
|
-
|
|
540
|
+
screenViewController.tabScreenComponentView.userInterfaceStyle;
|
|
163
541
|
} else {
|
|
164
|
-
self.tabBar.overrideUserInterfaceStyle =
|
|
542
|
+
self.tabBar.overrideUserInterfaceStyle = screenViewController.tabScreenComponentView.userInterfaceStyle;
|
|
165
543
|
}
|
|
166
544
|
|
|
167
|
-
|
|
545
|
+
RNSLog(@"Change selected view controller to: %@", nextSelectedViewControllerKey);
|
|
546
|
+
BOOL hasStateProgressed = [self updateSelectedViewControllerTo:nextSelectedViewController
|
|
547
|
+
withKey:nextSelectedViewControllerKey];
|
|
548
|
+
|
|
549
|
+
if (hasStateProgressed) {
|
|
550
|
+
RNSTabsNavigationStateUpdateContext *context =
|
|
551
|
+
[[RNSTabsNavigationStateUpdateContext alloc] initWithNavState:_navigationState
|
|
552
|
+
isRepeated:NO
|
|
553
|
+
hasTriggeredSpecialEffect:NO
|
|
554
|
+
actionOrigin:_pendingStateUpdate.actionOrigin];
|
|
555
|
+
[_observerRegistry emitDidUpdateStateTo:_navigationState withContext:context sender:self];
|
|
556
|
+
}
|
|
168
557
|
}
|
|
169
558
|
|
|
170
559
|
- (void)updateTabBarAppearanceIfNeeded
|
|
@@ -199,19 +588,366 @@
|
|
|
199
588
|
}
|
|
200
589
|
}
|
|
201
590
|
|
|
202
|
-
#
|
|
203
|
-
|
|
591
|
+
#pragma mark - Utility
|
|
592
|
+
|
|
593
|
+
- (nullable RNSTabsScreenViewController *)findChildViewControllerForKey:(nullable NSString *)screenKey
|
|
204
594
|
{
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
595
|
+
if (screenKey == nil) {
|
|
596
|
+
return nil;
|
|
597
|
+
}
|
|
598
|
+
for (UIViewController *viewController in self.viewControllers) {
|
|
599
|
+
RCTAssert([viewController isKindOfClass:RNSTabsScreenViewController.class],
|
|
600
|
+
@"[RNScreens] Unexpected type of controller: %@",
|
|
601
|
+
viewController.class);
|
|
602
|
+
auto *screenViewController = static_cast<RNSTabsScreenViewController *>(viewController);
|
|
603
|
+
if ([screenViewController.getScreenKeyOrNull isEqualToString:screenKey]) {
|
|
604
|
+
return screenViewController;
|
|
209
605
|
}
|
|
210
606
|
}
|
|
211
|
-
|
|
212
|
-
|
|
607
|
+
return nil;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
- (void)progressNavigationState:(nonnull NSString *)newSelectedScreenKey withOrigin:(RNSTabsActionOrigin)origin
|
|
611
|
+
{
|
|
612
|
+
RCTAssert(newSelectedScreenKey != nil, @"[RNScreens] newSelectedScreenKey MUST NOT be nil");
|
|
613
|
+
|
|
614
|
+
if (_navigationState == nil) {
|
|
615
|
+
_navigationState = [RNSTabsNavigationState stateWithSelectedScreenKey:newSelectedScreenKey provenance:0];
|
|
616
|
+
return;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
_navigationState = [RNSTabsNavigationState stateWithSelectedScreenKey:newSelectedScreenKey
|
|
620
|
+
provenance:_navigationState.provenance + 1];
|
|
621
|
+
|
|
622
|
+
if (origin != RNSTabsActionOriginProgrammaticJs) {
|
|
623
|
+
_lastUINavigationState = [_navigationState cloneState];
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
/**
|
|
628
|
+
* Be sure to call this method IF AND ONLY IF you know that the `self.selectedViewController`
|
|
629
|
+
* is not the `moreNavigationController`.
|
|
630
|
+
*/
|
|
631
|
+
- (RNSTabsScreenViewController *)selectedScreenViewController
|
|
632
|
+
{
|
|
633
|
+
RCTAssert([self.selectedViewController isKindOfClass:RNSTabsScreenViewController.class],
|
|
634
|
+
@"[RNScreens] Unexpected type of selectedViewController: %@",
|
|
635
|
+
self.selectedViewController.class);
|
|
636
|
+
return static_cast<RNSTabsScreenViewController *>(self.selectedViewController);
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
- (nonnull NSString *)screenKeyForViewController:(nonnull UIViewController *)viewController
|
|
640
|
+
{
|
|
641
|
+
RCTAssert([viewController isKindOfClass:RNSTabsScreenViewController.class],
|
|
642
|
+
@"[RNScreens] Expected selected view controller to be of class %@, got: %@",
|
|
643
|
+
RNSTabsScreenViewController.class,
|
|
644
|
+
viewController.class);
|
|
645
|
+
|
|
646
|
+
auto *screenKey = static_cast<RNSTabsScreenViewController *>(viewController).getScreenKeyOrNull;
|
|
647
|
+
RCTAssert(screenKey != nil, @"[RNScreens] screenKey MUST NOT be nil");
|
|
648
|
+
return screenKey;
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
- (nonnull NSString *)screenKeyForSelectedViewController
|
|
652
|
+
{
|
|
653
|
+
return [self screenKeyForViewController:self.selectedViewController];
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
/**
|
|
657
|
+
* Detect and fix any mismatch between `_navigationState` and UIKit's actual selected view controller.
|
|
658
|
+
*
|
|
659
|
+
* This is called from the `setSelectedIndex:` / `setSelectedViewController:` overrides when
|
|
660
|
+
* the change was NOT initiated by a known code path (container update, delegate handling).
|
|
661
|
+
* The primary case is UIKit restoring a tab when the More navigation controller disappears
|
|
662
|
+
* during a horizontal size class transition on iPad.
|
|
663
|
+
*/
|
|
664
|
+
- (void)reconcileNavigationStateWithUIKitState
|
|
665
|
+
{
|
|
666
|
+
if (_navigationState == nil) {
|
|
667
|
+
// Before the first container update, _navigationState is nil — there is no established baseline
|
|
668
|
+
// to drift from. The normal initialization path (performContainerUpdate → progressNavigationState:)
|
|
669
|
+
// handles the nil → first state transition. Reconciling here would prematurely initialize state
|
|
670
|
+
// and emit a delegate notification before the controller is fully set up.
|
|
671
|
+
return;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
if ([self isSelectedViewControllerTheMoreNavigationController]) {
|
|
675
|
+
// We don't want to progress the state in case of more navigation controller.
|
|
676
|
+
// If we're reconciling here, it means that it won't be handled correctly.
|
|
677
|
+
// I'm not aware of any flow where this could happen, hence assertion.
|
|
678
|
+
RCTAssert(NO, @"[RNScreens] Unexpected state reconciliation with More Navigation Controller");
|
|
679
|
+
return;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
if (![self.selectedViewController isKindOfClass:RNSTabsScreenViewController.class]) {
|
|
683
|
+
RCTAssert(NO,
|
|
684
|
+
@"[RNScreens] Unexpected controller type during state reconciliation: %@",
|
|
685
|
+
self.selectedViewController.class);
|
|
686
|
+
return;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
NSString *selectedScreenKey = [self screenKeyForSelectedViewController];
|
|
690
|
+
if ([_navigationState.selectedScreenKey isEqualToString:selectedScreenKey]) {
|
|
691
|
+
return;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
RNSLog(@"TabBarCtrl reconcileNavigationStateWithUIKitState: %@ -> %@",
|
|
695
|
+
_navigationState.selectedScreenKey,
|
|
696
|
+
selectedScreenKey);
|
|
697
|
+
[self progressNavigationState:selectedScreenKey withOrigin:RNSTabsActionOriginImplicit];
|
|
698
|
+
|
|
699
|
+
auto *context = [[RNSTabsNavigationStateUpdateContext alloc] initWithNavState:_navigationState
|
|
700
|
+
isRepeated:NO
|
|
701
|
+
hasTriggeredSpecialEffect:NO
|
|
702
|
+
actionOrigin:RNSTabsActionOriginImplicit];
|
|
703
|
+
[_observerRegistry emitDidUpdateStateTo:_navigationState withContext:context sender:self];
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
/**
|
|
707
|
+
* This function assumes that the source of the state is NOT user. In current model, user update is never stale.
|
|
708
|
+
*/
|
|
709
|
+
- (BOOL)isNavigationStateUpdateStale:(nullable RNSTabsNavigationStateUpdateRequest *)stateUpdate
|
|
710
|
+
{
|
|
711
|
+
if (stateUpdate == nil) {
|
|
712
|
+
return YES;
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
if (_navigationState == nil || _lastUINavigationState == nil) {
|
|
716
|
+
return NO;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
return stateUpdate.baseProvenance < _lastUINavigationState.provenance;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
#pragma mark-- More Navigation Controller
|
|
723
|
+
|
|
724
|
+
- (BOOL)canHaveMoreNavigationController
|
|
725
|
+
{
|
|
726
|
+
#if RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
727
|
+
// https://developer.apple.com/documentation/uikit/uitabbarcontroller?language=objc#The-More-navigation-controller
|
|
728
|
+
return self.viewControllers.count > 5;
|
|
729
|
+
#else
|
|
730
|
+
return NO;
|
|
731
|
+
#endif // RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
- (BOOL)isViewControllerTheMoreNavigationController:(nonnull UIViewController *)viewController
|
|
735
|
+
{
|
|
736
|
+
#if RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
737
|
+
return [self canHaveMoreNavigationController] && viewController == self.moreNavigationController;
|
|
738
|
+
#else
|
|
739
|
+
return NO;
|
|
740
|
+
#endif // RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
- (BOOL)isSelectedViewControllerTheMoreNavigationController
|
|
744
|
+
{
|
|
745
|
+
return [self isViewControllerTheMoreNavigationController:self.selectedViewController];
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
- (BOOL)isMoreNavigationControllerPresentInTabBar
|
|
749
|
+
{
|
|
750
|
+
#if RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
751
|
+
return [self canHaveMoreNavigationController] &&
|
|
752
|
+
[self.tabBar.items containsObject:self.moreNavigationController.tabBarItem];
|
|
753
|
+
#else
|
|
754
|
+
return NO;
|
|
755
|
+
#endif // RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
- (BOOL)isMoreNavigationControllerTabBarItemSelected
|
|
759
|
+
{
|
|
760
|
+
#if RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
761
|
+
return [self canHaveMoreNavigationController] && self.tabBar.selectedItem == self.moreNavigationController.tabBarItem;
|
|
762
|
+
#else
|
|
763
|
+
return NO;
|
|
764
|
+
#endif // RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
- (void)disableNavigationBarInMoreNavigationController
|
|
768
|
+
{
|
|
769
|
+
#if RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
770
|
+
if (!self.moreNavigationController.navigationBar.isHidden) {
|
|
771
|
+
[self.moreNavigationController setNavigationBarHidden:YES animated:NO];
|
|
772
|
+
}
|
|
773
|
+
#endif // RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
- (nullable UIViewController *)popToRootInMoreNavigationControllerRespectSelectionPrevention:
|
|
777
|
+
(BOOL)shouldRespectSelectionPrevention
|
|
778
|
+
animated:(BOOL)shouldAnimate
|
|
779
|
+
{
|
|
780
|
+
#if RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
781
|
+
if ([self isMoreNavigationControllerPresentInTabBar] && self.moreNavigationController.viewControllers.count > 1) {
|
|
782
|
+
// We quietly assume here, that the root view controller is the `UIMoreListViewController`.
|
|
783
|
+
if (shouldRespectSelectionPrevention) {
|
|
784
|
+
UIViewController *topViewController = self.moreNavigationController.topViewController;
|
|
785
|
+
RCTAssert([topViewController isKindOfClass:RNSTabsScreenViewController.class],
|
|
786
|
+
@"[RNScreens] Unexpected type of view controller on moreNavigationControllerStack: %@",
|
|
787
|
+
topViewController.class);
|
|
788
|
+
RNSTabsScreenViewController *screenController = static_cast<RNSTabsScreenViewController *>(topViewController);
|
|
789
|
+
if (screenController.isPreventNativeSelectionEnabled) {
|
|
790
|
+
return [self popToRootMoreNavigationController:self.moreNavigationController animated:shouldAnimate];
|
|
791
|
+
}
|
|
792
|
+
} else {
|
|
793
|
+
return [self popToRootMoreNavigationController:self.moreNavigationController animated:shouldAnimate];
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
#endif // RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
797
|
+
return nil;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
/**
|
|
801
|
+
* Pops the top view controller from more navigation controller. We expect at most two controllers on the stack of more
|
|
802
|
+
* navigation controller. If this assumption ever becomes invalid, this method needs to be updated.
|
|
803
|
+
*
|
|
804
|
+
* @returns nil if there was nothing to pop, the topViewController otherwise.
|
|
805
|
+
*/
|
|
806
|
+
- (nullable UIViewController *)popToRootMoreNavigationController:
|
|
807
|
+
(nonnull UINavigationController *)moreNavigationController
|
|
808
|
+
animated:(BOOL)animated
|
|
809
|
+
{
|
|
810
|
+
if (moreNavigationController.viewControllers.count < 2) {
|
|
811
|
+
return nil;
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
auto *poppedViewControllers = [moreNavigationController popToRootViewControllerAnimated:animated];
|
|
815
|
+
RCTAssert(poppedViewControllers != nil && poppedViewControllers.count == 1,
|
|
816
|
+
@"[RNScreens] Expected exactly one view controller to be popped");
|
|
817
|
+
return [poppedViewControllers firstObject];
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
- (void)prepareForMoreNavigationControllerHandlingIfNeeded
|
|
821
|
+
{
|
|
822
|
+
#if RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
823
|
+
// This can be called multiple times in lifetime of `RNSTabBarController`.
|
|
824
|
+
// UIKit reuses the same `UIMoreNavigationController` instance, but resets both
|
|
825
|
+
// the delegate and the isa pointer when the More controller disappears from the
|
|
826
|
+
// tab bar (e.g. user resizing the app on iPad). We re-apply both unconditionally.
|
|
827
|
+
if (self.moreNavigationController.delegate == nil) {
|
|
828
|
+
self.moreNavigationController.delegate = self;
|
|
829
|
+
}
|
|
830
|
+
[self ensurePushInterceptorOnMoreNavigationController];
|
|
831
|
+
#endif // RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
/// Creates a dynamic subclass of the runtime class of `moreNavigationController`
|
|
835
|
+
/// (which is the private `UIMoreNavigationController`) and overrides `pushViewController:animated:`
|
|
836
|
+
/// with our gating implementation.
|
|
837
|
+
///
|
|
838
|
+
/// The subclass name is derived from the actual runtime class of `moreNavigationController`
|
|
839
|
+
/// (e.g. `RNS_UIMoreNavigationController`), so if another library ISA-swizzles it first or Apple
|
|
840
|
+
/// changes the private class, each distinct original class gets its own correct dynamic subclass.
|
|
841
|
+
///
|
|
842
|
+
/// This method is idempotent — safe to call multiple times regardless of whether UIKit has
|
|
843
|
+
/// reset the ISA between calls. When the ISA already carries our `RNS_` prefix, we return
|
|
844
|
+
/// early. When UIKit has reset the ISA (e.g. iPad app resize crossing the threshold at which UIKit introduces the More
|
|
845
|
+
/// controller (currently >5 tabs)), the dynamic subclass is looked up (or created) and re-applied.
|
|
846
|
+
- (void)ensurePushInterceptorOnMoreNavigationController
|
|
847
|
+
{
|
|
848
|
+
#if RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
849
|
+
Class currentClass = object_getClass(self.moreNavigationController);
|
|
850
|
+
const char *currentClassName = class_getName(currentClass);
|
|
851
|
+
|
|
852
|
+
// If the ISA already points to our dynamic subclass, the interceptor is in place.
|
|
853
|
+
// Without this guard, repeated calls when UIKit has NOT reset the ISA would stack
|
|
854
|
+
// `RNS_RNS_...` subclasses, causing infinite recursion in rns_pushViewController's
|
|
855
|
+
// objc_msgSendSuper call.
|
|
856
|
+
if (strncmp(currentClassName, "RNS_", 4) == 0) {
|
|
857
|
+
return;
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
// Build a unique subclass name per original runtime class: "RNS_<originalClassName>"
|
|
861
|
+
char dynamicSubclassName[256];
|
|
862
|
+
snprintf(dynamicSubclassName, sizeof(dynamicSubclassName), "RNS_%s", currentClassName);
|
|
863
|
+
|
|
864
|
+
Class dynamicSubclass = objc_getClass(dynamicSubclassName);
|
|
865
|
+
|
|
866
|
+
if (dynamicSubclass == nil) {
|
|
867
|
+
dynamicSubclass = objc_allocateClassPair(currentClass, dynamicSubclassName, 0);
|
|
868
|
+
RCTAssert(dynamicSubclass != nil, @"[RNScreens] Failed to allocate dynamic subclass of %s", currentClassName);
|
|
869
|
+
|
|
870
|
+
Method pushMethod = class_getInstanceMethod(currentClass, @selector(pushViewController:animated:));
|
|
871
|
+
class_addMethod(dynamicSubclass,
|
|
872
|
+
@selector(pushViewController:animated:),
|
|
873
|
+
(IMP)rns_pushViewController,
|
|
874
|
+
method_getTypeEncoding(pushMethod));
|
|
875
|
+
|
|
876
|
+
objc_registerClassPair(dynamicSubclass);
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
object_setClass(self.moreNavigationController, dynamicSubclass);
|
|
880
|
+
#endif // RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
/// Decides whether `moreNavigationController` should be allowed to push `viewController`.
|
|
884
|
+
/// This mirrors the logic in `shouldPreventNativeTabSelection:` for the More list context.
|
|
885
|
+
- (BOOL)moreNavigationController:(UINavigationController *)navigationController
|
|
886
|
+
shouldPushViewController:(UIViewController *)viewController
|
|
887
|
+
{
|
|
888
|
+
BOOL shouldPrevent = [self shouldPreventNativeTabSelection:viewController];
|
|
889
|
+
|
|
890
|
+
if (shouldPrevent) {
|
|
891
|
+
[self onDidPreventUserFromSelectingViewControllerWithKey:[self screenKeyForViewController:viewController]];
|
|
892
|
+
[self deselectMoreListSelectionInNavigationController:navigationController];
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
return !shouldPrevent;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
/// When we prevent a push from the More list, the tapped table view cell stays highlighted
|
|
899
|
+
/// because UIKit expects the push to handle deselection on return. We deselect it manually.
|
|
900
|
+
- (void)deselectMoreListSelectionInNavigationController:(UINavigationController *)navigationController
|
|
901
|
+
{
|
|
902
|
+
#if RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
903
|
+
UIViewController *topVC = navigationController.topViewController;
|
|
904
|
+
UITableView *tableView = [self findTableViewInView:topVC.view];
|
|
905
|
+
|
|
906
|
+
if (tableView != nil) {
|
|
907
|
+
NSIndexPath *selectedIndexPath = tableView.indexPathForSelectedRow;
|
|
908
|
+
if (selectedIndexPath != nil) {
|
|
909
|
+
[tableView deselectRowAtIndexPath:selectedIndexPath animated:YES];
|
|
910
|
+
}
|
|
911
|
+
} else {
|
|
912
|
+
RCTLogWarn(@"[RNScreens] Failed to find a table view to clear focus!");
|
|
913
|
+
}
|
|
914
|
+
#endif // RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
/**
|
|
918
|
+
* Unbounded DFS looking for ANY `UITableView` in the subtree rooted at view.
|
|
919
|
+
* The `view` parameter is included in the search.
|
|
920
|
+
*/
|
|
921
|
+
- (nullable UITableView *)findTableViewInView:(UIView *)view
|
|
922
|
+
{
|
|
923
|
+
if ([view isKindOfClass:UITableView.class]) {
|
|
924
|
+
return (UITableView *)view;
|
|
925
|
+
}
|
|
926
|
+
for (UIView *subview in view.subviews) {
|
|
927
|
+
UITableView *result = [self findTableViewInView:subview];
|
|
928
|
+
if (result != nil) {
|
|
929
|
+
return result;
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
return nil;
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
/**
|
|
936
|
+
* This method allows getting the `moreNavigationController` instance under a couple of conditions.
|
|
937
|
+
*
|
|
938
|
+
* First, it verifies whether we are on an appropriate platform, where the `moreNavigationController`
|
|
939
|
+
* is available.
|
|
940
|
+
* Second, it verifies whether the `moreNavigationController` can even be in the interface right now.
|
|
941
|
+
*/
|
|
942
|
+
- (nullable UINavigationController *)resolveMoreNavigationController
|
|
943
|
+
{
|
|
944
|
+
#if RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
945
|
+
if ([self canHaveMoreNavigationController]) {
|
|
946
|
+
return self.moreNavigationController;
|
|
947
|
+
}
|
|
948
|
+
#endif // RNS_MORE_NAVIGATION_CONTROLLER_AVAILABLE
|
|
949
|
+
return nil;
|
|
213
950
|
}
|
|
214
|
-
#endif
|
|
215
951
|
|
|
216
952
|
#if !RCT_NEW_ARCH_ENABLED
|
|
217
953
|
|
|
@@ -254,6 +990,31 @@
|
|
|
254
990
|
[RNSScreenWindowTraits enforceDesiredDeviceOrientation];
|
|
255
991
|
}
|
|
256
992
|
|
|
993
|
+
- (void)updateLayoutDirectionBelowIOS17IfNeeded
|
|
994
|
+
{
|
|
995
|
+
if (_needsLayoutDirectionUpdateBelowIOS17) {
|
|
996
|
+
[self updateLayoutDirectionBelowIOS17];
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
- (void)updateLayoutDirectionBelowIOS17
|
|
1001
|
+
{
|
|
1002
|
+
_needsLayoutDirectionUpdateBelowIOS17 = false;
|
|
1003
|
+
|
|
1004
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(17_0)
|
|
1005
|
+
if (@available(iOS 17.0, *)) {
|
|
1006
|
+
return;
|
|
1007
|
+
}
|
|
1008
|
+
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(17_0)
|
|
1009
|
+
|
|
1010
|
+
RCTAssert(self.parentViewController != nil,
|
|
1011
|
+
@"[RNScreens] Expected non-null parent view controller for layout direction update.");
|
|
1012
|
+
[self.parentViewController
|
|
1013
|
+
setOverrideTraitCollection:[UITraitCollection
|
|
1014
|
+
traitCollectionWithLayoutDirection:self.tabsHostComponentView.layoutDirection]
|
|
1015
|
+
forChildViewController:self];
|
|
1016
|
+
}
|
|
1017
|
+
|
|
257
1018
|
#pragma mark - RNSOrientationProviding
|
|
258
1019
|
|
|
259
1020
|
#if !TARGET_OS_TV
|