@amazon-devices/react-native-screens 2.0.1759135970 → 3.0.9000000000
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 +57 -18
- package/RNScreens.podspec +12 -30
- package/SystemBundles/31d5b6b69618249f6233b73a1de7c4d890c86be7ccb031ce7cf2dcc41783f9f7.bundle +45301 -0
- package/SystemBundles/31d5b6b69618249f6233b73a1de7c4d890c86be7ccb031ce7cf2dcc41783f9f7.map +13711 -0
- package/SystemModules/amzn__react-native-screens-3.modules.txt +158 -0
- package/SystemModules/amzn__react-native-screens-3.private.modules.txt +377 -0
- package/SystemModules/keplerscript-system-bundle-config.json +4 -4
- package/android/CMakeLists.txt +80 -0
- package/android/build.gradle +96 -17
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +61 -0
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +38 -25
- package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +53 -0
- package/android/src/main/cpp/NativeProxy.cpp +51 -0
- package/android/src/main/cpp/NativeProxy.h +35 -0
- package/android/src/main/cpp/OnLoad.cpp +8 -0
- package/android/src/main/cpp/jni-adapter.cpp +106 -0
- package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +20 -10
- package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +69 -1
- package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +8 -8
- package/android/src/main/java/com/swmansion/rnscreens/InsetsObserverProxy.kt +104 -0
- package/android/src/main/java/com/swmansion/rnscreens/ModalScreenViewManager.kt +12 -0
- package/android/src/main/java/com/swmansion/rnscreens/NativeDismissalObserver.kt +12 -0
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +65 -7
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +327 -84
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +122 -72
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +27 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContentWrapper.kt +38 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContentWrapperManager.kt +25 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenEventDispatcher.kt +10 -2
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFooter.kt +299 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFooterManager.kt +25 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +91 -67
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +12 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenModalFragment.kt +281 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +184 -81
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +467 -80
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +8 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +156 -124
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigShadowNode.kt +25 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +159 -39
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +24 -9
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +19 -13
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +31 -28
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +276 -71
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +124 -64
- package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +127 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +4 -2
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +160 -53
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +57 -32
- package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +15 -10
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/BottomSheetBehaviorExt.kt +42 -0
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/BottomSheetDialogRootView.kt +104 -0
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/BottomSheetDialogScreen.kt +26 -0
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/DimmingFragment.kt +493 -0
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/DimmingView.kt +66 -0
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/GestureTransparentViewGroup.kt +24 -0
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/SheetUtils.kt +135 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +7 -8
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +8 -9
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +7 -8
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +9 -10
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAppearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDisappearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDismissedEvent.kt +8 -4
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +13 -16
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillAppearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillDisappearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +8 -9
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +8 -11
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +7 -8
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +8 -9
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +7 -8
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +12 -11
- package/android/src/main/java/com/swmansion/rnscreens/events/SheetDetentChangedEvent.kt +27 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/ext/NumericExt.kt +12 -0
- package/android/src/main/java/com/swmansion/rnscreens/ext/ViewExt.kt +32 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/DeviceUtils.kt +1 -5
- package/android/src/main/java/com/swmansion/rnscreens/utils/PaddingBundle.kt +8 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper.kt +282 -0
- package/android/src/main/jni/CMakeLists.txt +35 -23
- package/android/src/main/jni/rnscreens.h +3 -0
- package/android/src/main/res/base/anim/rns_ios_from_left_background_close.xml +5 -0
- package/android/src/main/res/base/anim/rns_ios_from_left_background_open.xml +5 -0
- package/android/src/main/res/base/anim/rns_ios_from_left_foreground_close.xml +6 -0
- package/android/src/main/res/base/anim/rns_ios_from_left_foreground_open.xml +6 -0
- package/android/src/main/res/base/anim/rns_ios_from_right_background_close.xml +5 -0
- package/android/src/main/res/base/anim/rns_ios_from_right_background_open.xml +5 -0
- package/android/src/main/res/base/anim/rns_ios_from_right_foreground_close.xml +6 -0
- package/android/src/main/res/base/anim/rns_ios_from_right_foreground_open.xml +6 -0
- package/android/src/main/res/base/drawable/rns_rounder_top_corners_shape.xml +8 -0
- package/android/src/main/res/v33/anim-v33/rns_default_enter_in.xml +0 -1
- package/android/src/main/res/v33/anim-v33/rns_default_enter_out.xml +2 -2
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerInterface.java +16 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContentWrapperManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContentWrapperManagerInterface.java +16 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenFooterManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenFooterManagerInterface.java +16 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +16 -3
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +7 -2
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +6 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +2 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerDelegate.java +99 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerInterface.java +37 -0
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +39 -0
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +11 -2
- package/android/src/paper/java/com/swmansion/rnscreens/NativeProxy.kt +19 -0
- package/android/src/paper/java/com/swmansion/rnscreens/NativeScreensModuleSpec.java +36 -0
- package/common/cpp/react/renderer/components/rnscreens/FrameCorrectionModes.h +51 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenComponentDescriptor.h +40 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.cpp +16 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.h +32 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +55 -12
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +157 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +31 -11
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigComponentDescriptor.h +49 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.cpp +22 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.h +40 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.cpp +34 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.h +57 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewComponentDescriptor.h +27 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.cpp +8 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.h +31 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.cpp +15 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.h +39 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +23 -2
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +33 -8
- package/common/cpp/react/renderer/components/rnscreens/utils/RectUtil.h +36 -0
- package/cpp/RNSScreenRemovalListener.cpp +25 -0
- package/cpp/RNSScreenRemovalListener.h +20 -0
- package/cpp/RNScreensTurboModule.cpp +115 -0
- package/cpp/RNScreensTurboModule.h +40 -0
- package/gesture-handler/package.json +6 -0
- package/ios/RNSConvert.h +24 -4
- package/ios/RNSConvert.mm +180 -55
- package/ios/RNSEnums.h +48 -0
- package/ios/RNSFullWindowOverlay.mm +12 -2
- package/ios/RNSModalScreen.h +8 -0
- package/ios/RNSModalScreen.mm +65 -0
- package/ios/RNSModule.h +19 -0
- package/ios/RNSModule.mm +173 -0
- package/ios/RNSPercentDrivenInteractiveTransition.h +12 -0
- package/ios/RNSPercentDrivenInteractiveTransition.mm +69 -0
- package/ios/RNSScreen.h +24 -5
- package/ios/RNSScreen.mm +652 -173
- package/ios/RNSScreenContainer.mm +12 -1
- package/ios/RNSScreenContentWrapper.h +44 -0
- package/ios/RNSScreenContentWrapper.mm +67 -0
- package/ios/RNSScreenFooter.h +30 -0
- package/ios/RNSScreenFooter.mm +142 -0
- package/ios/RNSScreenNavigationContainer.mm +7 -0
- package/ios/RNSScreenStack.h +6 -0
- package/ios/RNSScreenStack.mm +333 -109
- package/ios/RNSScreenStackAnimator.h +15 -1
- package/ios/RNSScreenStackAnimator.mm +380 -115
- package/ios/RNSScreenStackHeaderConfig.h +74 -6
- package/ios/RNSScreenStackHeaderConfig.mm +338 -69
- package/ios/RNSScreenStackHeaderSubview.h +0 -7
- package/ios/RNSScreenStackHeaderSubview.mm +61 -24
- package/ios/RNSScreenWindowTraits.h +1 -1
- package/ios/RNSScreenWindowTraits.mm +24 -50
- package/ios/RNSSearchBar.h +5 -5
- package/ios/RNSSearchBar.mm +42 -11
- package/ios/events/RNSHeaderHeightChangeEvent.h +0 -1
- package/ios/events/RNSHeaderHeightChangeEvent.mm +15 -0
- package/ios/events/RNSScreenViewEvent.h +0 -1
- package/ios/utils/RCTSurfaceTouchHandler+RNSUtility.h +15 -0
- package/ios/utils/RCTSurfaceTouchHandler+RNSUtility.mm +14 -0
- package/ios/utils/RCTTouchHandler+RNSUtility.h +15 -0
- package/ios/utils/RCTTouchHandler+RNSUtility.mm +15 -0
- package/ios/utils/RNSDefines.h +7 -0
- package/ios/utils/RNSUIBarButtonItem.h +2 -0
- package/ios/utils/UINavigationBar+RNSUtility.h +37 -0
- package/ios/utils/UINavigationBar+RNSUtility.mm +44 -0
- package/ios/utils/UIView+RNSUtility.h +23 -0
- package/ios/utils/UIView+RNSUtility.mm +54 -0
- package/kepler-compatibility.json +2 -2
- package/lib/commonjs/TransitionProgressContext.js +1 -0
- package/lib/commonjs/TransitionProgressContext.js.map +1 -1
- package/lib/commonjs/components/DebugContainer.js +39 -0
- package/lib/commonjs/components/DebugContainer.js.map +1 -0
- package/lib/commonjs/components/DebugContainer.web.js +15 -0
- package/lib/commonjs/components/DebugContainer.web.js.map +1 -0
- package/lib/commonjs/components/FullWindowOverlay.js +31 -0
- package/lib/commonjs/components/FullWindowOverlay.js.map +1 -0
- package/lib/commonjs/components/FullWindowOverlay.web.js +9 -0
- package/lib/commonjs/components/FullWindowOverlay.web.js.map +1 -0
- package/lib/commonjs/components/Screen.js +286 -0
- package/lib/commonjs/components/Screen.js.map +1 -0
- package/lib/commonjs/components/Screen.web.js +47 -0
- package/lib/commonjs/components/Screen.web.js.map +1 -0
- package/lib/commonjs/components/ScreenContainer.js +32 -0
- package/lib/commonjs/components/ScreenContainer.js.map +1 -0
- package/lib/commonjs/components/ScreenContainer.web.js +10 -0
- package/lib/commonjs/components/ScreenContainer.web.js.map +1 -0
- package/lib/commonjs/components/ScreenContentWrapper.js +17 -0
- package/lib/commonjs/components/ScreenContentWrapper.js.map +1 -0
- package/lib/commonjs/components/ScreenContentWrapper.web.js +10 -0
- package/lib/commonjs/components/ScreenContentWrapper.web.js.map +1 -0
- package/lib/commonjs/components/ScreenFooter.js +25 -0
- package/lib/commonjs/components/ScreenFooter.js.map +1 -0
- package/lib/commonjs/components/ScreenFooter.web.js +11 -0
- package/lib/commonjs/components/ScreenFooter.web.js.map +1 -0
- package/lib/commonjs/components/ScreenStack.js +67 -0
- package/lib/commonjs/components/ScreenStack.js.map +1 -0
- package/lib/commonjs/components/ScreenStack.web.js +10 -0
- package/lib/commonjs/components/ScreenStack.web.js.map +1 -0
- package/lib/commonjs/components/ScreenStackHeaderConfig.js +90 -0
- package/lib/commonjs/components/ScreenStackHeaderConfig.js.map +1 -0
- package/lib/commonjs/components/ScreenStackHeaderConfig.web.js +27 -0
- package/lib/commonjs/components/ScreenStackHeaderConfig.web.js.map +1 -0
- package/lib/commonjs/components/ScreenStackItem.js +107 -0
- package/lib/commonjs/components/ScreenStackItem.js.map +1 -0
- package/lib/commonjs/components/SearchBar.js +63 -0
- package/lib/commonjs/components/SearchBar.js.map +1 -0
- package/lib/commonjs/components/SearchBar.web.js +10 -0
- package/lib/commonjs/components/SearchBar.web.js.map +1 -0
- package/lib/commonjs/components/helpers/DelayedFreeze.js +31 -0
- package/lib/commonjs/components/helpers/DelayedFreeze.js.map +1 -0
- package/lib/commonjs/components/helpers/usePrevious.js +15 -0
- package/lib/commonjs/components/helpers/usePrevious.js.map +1 -0
- package/lib/commonjs/contexts.js +11 -0
- package/lib/commonjs/contexts.js.map +1 -0
- package/lib/commonjs/core.js +40 -0
- package/lib/commonjs/core.js.map +1 -0
- package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js +16 -1
- package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ModalScreenNativeComponent.js +14 -0
- package/lib/commonjs/fabric/ModalScreenNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/NativeScreensModule.js +10 -0
- package/lib/commonjs/fabric/NativeScreensModule.js.map +1 -0
- package/lib/commonjs/fabric/NativeScreensModule.web.js +8 -0
- package/lib/commonjs/fabric/NativeScreensModule.web.js.map +1 -0
- package/lib/commonjs/fabric/ScreenContainerNativeComponent.js +8 -11
- package/lib/commonjs/fabric/ScreenContainerNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenContentWrapperNativeComponent.js +18 -0
- package/lib/commonjs/fabric/ScreenContentWrapperNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenFooterNativeComponent.js +10 -0
- package/lib/commonjs/fabric/ScreenFooterNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenNativeComponent.js +13 -15
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js +2 -1
- package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js +10 -9
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js +5 -2
- package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenStackNativeComponent.js +8 -11
- package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/SearchBarNativeComponent.js +4 -5
- package/lib/commonjs/fabric/SearchBarNativeComponent.js.map +1 -1
- package/lib/commonjs/gesture-handler/GestureDetectorProvider.js +19 -0
- package/lib/commonjs/gesture-handler/GestureDetectorProvider.js.map +1 -0
- package/lib/commonjs/gesture-handler/RNScreensTurboModule.js +8 -0
- package/lib/commonjs/gesture-handler/RNScreensTurboModule.js.map +1 -0
- package/lib/commonjs/gesture-handler/ScreenGestureDetector.js +201 -0
- package/lib/commonjs/gesture-handler/ScreenGestureDetector.js.map +1 -0
- package/lib/commonjs/gesture-handler/constraints.js +64 -0
- package/lib/commonjs/gesture-handler/constraints.js.map +1 -0
- package/lib/commonjs/gesture-handler/defaults.js +45 -0
- package/lib/commonjs/gesture-handler/defaults.js.map +1 -0
- package/lib/commonjs/gesture-handler/fabricUtils.js +66 -0
- package/lib/commonjs/gesture-handler/fabricUtils.js.map +1 -0
- package/lib/commonjs/gesture-handler/fabricUtils.web.js +17 -0
- package/lib/commonjs/gesture-handler/fabricUtils.web.js.map +1 -0
- package/lib/commonjs/gesture-handler/index.js +14 -0
- package/lib/commonjs/gesture-handler/index.js.map +1 -0
- package/lib/commonjs/index.js +157 -94
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/native-stack/contexts/GHContext.js +12 -0
- package/lib/commonjs/native-stack/contexts/GHContext.js.map +1 -0
- package/lib/commonjs/native-stack/index.js.map +1 -1
- package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js +21 -20
- package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
- package/lib/commonjs/native-stack/types.js.map +1 -1
- package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -1
- package/lib/commonjs/native-stack/utils/HeaderHeightContext.js.map +1 -1
- package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js.map +1 -1
- package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js.map +1 -1
- package/lib/commonjs/native-stack/utils/getStatusBarHeight.js +22 -0
- package/lib/commonjs/native-stack/utils/getStatusBarHeight.js.map +1 -0
- package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -1
- package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +2 -4
- package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -1
- package/lib/commonjs/native-stack/utils/useHeaderHeight.js.map +1 -1
- package/lib/commonjs/native-stack/views/FontProcessor.js +1 -3
- package/lib/commonjs/native-stack/views/FontProcessor.js.map +1 -1
- package/lib/commonjs/native-stack/views/FooterComponent.js +17 -0
- package/lib/commonjs/native-stack/views/FooterComponent.js.map +1 -0
- package/lib/commonjs/native-stack/views/HeaderConfig.js +21 -13
- package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/commonjs/native-stack/views/NativeStackView.js +118 -52
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +15 -21
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedScreen.js +2 -2
- package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +8 -16
- package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js.map +1 -1
- package/lib/commonjs/reanimated/index.js.map +1 -1
- package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js +2 -2
- package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js.map +1 -1
- package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/useTransitionProgress.js.map +1 -1
- package/lib/commonjs/utils.js +28 -6
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/TransitionProgressContext.js +2 -0
- package/lib/module/TransitionProgressContext.js.map +1 -1
- package/lib/module/components/DebugContainer.js +30 -0
- package/lib/module/components/DebugContainer.js.map +1 -0
- package/lib/module/components/DebugContainer.web.js +6 -0
- package/lib/module/components/DebugContainer.web.js.map +1 -0
- package/lib/module/components/FullWindowOverlay.js +24 -0
- package/lib/module/components/FullWindowOverlay.js.map +1 -0
- package/lib/module/components/FullWindowOverlay.web.js +3 -0
- package/lib/module/components/FullWindowOverlay.web.js.map +1 -0
- package/lib/module/components/Screen.js +282 -0
- package/lib/module/components/Screen.js.map +1 -0
- package/lib/module/components/Screen.web.js +40 -0
- package/lib/module/components/Screen.web.js.map +1 -0
- package/lib/module/components/ScreenContainer.js +26 -0
- package/lib/module/components/ScreenContainer.js.map +1 -0
- package/lib/module/components/ScreenContainer.web.js +4 -0
- package/lib/module/components/ScreenContainer.web.js.map +1 -0
- package/lib/module/components/ScreenContentWrapper.js +10 -0
- package/lib/module/components/ScreenContentWrapper.js.map +1 -0
- package/lib/module/components/ScreenContentWrapper.web.js +4 -0
- package/lib/module/components/ScreenContentWrapper.web.js.map +1 -0
- package/lib/module/components/ScreenFooter.js +18 -0
- package/lib/module/components/ScreenFooter.js.map +1 -0
- package/lib/module/components/ScreenFooter.web.js +6 -0
- package/lib/module/components/ScreenFooter.web.js.map +1 -0
- package/lib/module/components/ScreenStack.js +63 -0
- package/lib/module/components/ScreenStack.js.map +1 -0
- package/lib/module/components/ScreenStack.web.js +4 -0
- package/lib/module/components/ScreenStack.web.js.map +1 -0
- package/lib/module/components/ScreenStackHeaderConfig.js +81 -0
- package/lib/module/components/ScreenStackHeaderConfig.js.map +1 -0
- package/lib/module/components/ScreenStackHeaderConfig.web.js +14 -0
- package/lib/module/components/ScreenStackHeaderConfig.web.js.map +1 -0
- package/lib/module/components/ScreenStackItem.js +98 -0
- package/lib/module/components/ScreenStackItem.js.map +1 -0
- package/lib/module/components/SearchBar.js +57 -0
- package/lib/module/components/SearchBar.js.map +1 -0
- package/lib/module/components/SearchBar.web.js +4 -0
- package/lib/module/components/SearchBar.web.js.map +1 -0
- package/lib/module/components/helpers/DelayedFreeze.js +24 -0
- package/lib/module/components/helpers/DelayedFreeze.js.map +1 -0
- package/lib/module/components/helpers/usePrevious.js +9 -0
- package/lib/module/components/helpers/usePrevious.js.map +1 -0
- package/lib/module/contexts.js +4 -0
- package/lib/module/contexts.js.map +1 -0
- package/lib/module/core.js +31 -0
- package/lib/module/core.js.map +1 -0
- package/lib/module/fabric/FullWindowOverlayNativeComponent.js +16 -0
- package/lib/module/fabric/FullWindowOverlayNativeComponent.js.map +1 -1
- package/lib/module/fabric/ModalScreenNativeComponent.js +10 -0
- package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -0
- package/lib/module/fabric/NativeScreensModule.js +5 -0
- package/lib/module/fabric/NativeScreensModule.js.map +1 -0
- package/lib/module/fabric/NativeScreensModule.web.js +2 -0
- package/lib/module/fabric/NativeScreensModule.web.js.map +1 -0
- package/lib/module/fabric/ScreenContainerNativeComponent.js +3 -4
- package/lib/module/fabric/ScreenContainerNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenContentWrapperNativeComponent.js +10 -0
- package/lib/module/fabric/ScreenContentWrapperNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenFooterNativeComponent.js +3 -0
- package/lib/module/fabric/ScreenFooterNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenNativeComponent.js +8 -7
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js +2 -0
- package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js +8 -2
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js +5 -1
- package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenStackNativeComponent.js +3 -3
- package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -1
- package/lib/module/fabric/SearchBarNativeComponent.js +3 -1
- package/lib/module/fabric/SearchBarNativeComponent.js.map +1 -1
- package/lib/module/gesture-handler/GestureDetectorProvider.js +12 -0
- package/lib/module/gesture-handler/GestureDetectorProvider.js.map +1 -0
- package/lib/module/gesture-handler/RNScreensTurboModule.js +2 -0
- package/lib/module/gesture-handler/RNScreensTurboModule.js.map +1 -0
- package/lib/module/gesture-handler/ScreenGestureDetector.js +193 -0
- package/lib/module/gesture-handler/ScreenGestureDetector.js.map +1 -0
- package/lib/module/gesture-handler/constraints.js +56 -0
- package/lib/module/gesture-handler/constraints.js.map +1 -0
- package/lib/module/gesture-handler/defaults.js +39 -0
- package/lib/module/gesture-handler/defaults.js.map +1 -0
- package/lib/module/gesture-handler/fabricUtils.js +61 -0
- package/lib/module/gesture-handler/fabricUtils.js.map +1 -0
- package/lib/module/gesture-handler/fabricUtils.web.js +10 -0
- package/lib/module/gesture-handler/fabricUtils.web.js.map +1 -0
- package/lib/module/gesture-handler/index.js +5 -0
- package/lib/module/gesture-handler/index.js.map +1 -0
- package/lib/module/index.js +29 -64
- package/lib/module/index.js.map +1 -1
- package/lib/module/native-stack/contexts/GHContext.js +6 -0
- package/lib/module/native-stack/contexts/GHContext.js.map +1 -0
- package/lib/module/native-stack/index.js.map +1 -1
- package/lib/module/native-stack/navigators/createNativeStackNavigator.js +21 -20
- package/lib/module/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
- package/lib/module/native-stack/types.js.map +1 -1
- package/lib/module/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -1
- package/lib/module/native-stack/utils/HeaderHeightContext.js.map +1 -1
- package/lib/module/native-stack/utils/SafeAreaProviderCompat.js.map +1 -1
- package/lib/module/native-stack/utils/getDefaultHeaderHeight.js.map +1 -1
- package/lib/module/native-stack/utils/getStatusBarHeight.js +16 -0
- package/lib/module/native-stack/utils/getStatusBarHeight.js.map +1 -0
- package/lib/module/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -1
- package/lib/module/native-stack/utils/useBackPressSubscription.js +2 -4
- package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -1
- package/lib/module/native-stack/utils/useHeaderHeight.js.map +1 -1
- package/lib/module/native-stack/views/FontProcessor.js +2 -3
- package/lib/module/native-stack/views/FontProcessor.js.map +1 -1
- package/lib/module/native-stack/views/FooterComponent.js +10 -0
- package/lib/module/native-stack/views/FooterComponent.js.map +1 -0
- package/lib/module/native-stack/views/HeaderConfig.js +13 -6
- package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/module/native-stack/views/NativeStackView.js +114 -46
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/module/reanimated/ReanimatedHeaderHeightContext.js.map +1 -1
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js +8 -12
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
- package/lib/module/reanimated/ReanimatedScreen.js +1 -2
- package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
- package/lib/module/reanimated/ReanimatedScreenProvider.js +7 -15
- package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -1
- package/lib/module/reanimated/ReanimatedTransitionProgressContext.js.map +1 -1
- package/lib/module/reanimated/index.js.map +1 -1
- package/lib/module/reanimated/useReanimatedHeaderHeight.js +1 -1
- package/lib/module/reanimated/useReanimatedHeaderHeight.js.map +1 -1
- package/lib/module/reanimated/useReanimatedTransitionProgress.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/useTransitionProgress.js.map +1 -1
- package/lib/module/utils.js +26 -5
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/TransitionProgressContext.d.ts +2 -1
- package/lib/typescript/TransitionProgressContext.d.ts.map +1 -0
- package/lib/typescript/components/DebugContainer.d.ts +15 -0
- package/lib/typescript/components/DebugContainer.d.ts.map +1 -0
- package/lib/typescript/components/DebugContainer.web.d.ts +4 -0
- package/lib/typescript/components/DebugContainer.web.d.ts.map +1 -0
- package/lib/typescript/components/FullWindowOverlay.d.ts +6 -0
- package/lib/typescript/components/FullWindowOverlay.d.ts.map +1 -0
- package/lib/typescript/components/FullWindowOverlay.web.d.ts +6 -0
- package/lib/typescript/components/FullWindowOverlay.web.d.ts.map +1 -0
- package/lib/typescript/components/Screen.d.ts +8 -0
- package/lib/typescript/components/Screen.d.ts.map +1 -0
- package/lib/typescript/components/Screen.web.d.ts +11 -0
- package/lib/typescript/components/Screen.web.d.ts.map +1 -0
- package/lib/typescript/components/ScreenContainer.d.ts +5 -0
- package/lib/typescript/components/ScreenContainer.d.ts.map +1 -0
- package/lib/typescript/components/ScreenContainer.web.d.ts +4 -0
- package/lib/typescript/components/ScreenContainer.web.d.ts.map +1 -0
- package/lib/typescript/components/ScreenContentWrapper.d.ts +5 -0
- package/lib/typescript/components/ScreenContentWrapper.d.ts.map +1 -0
- package/lib/typescript/components/ScreenContentWrapper.web.d.ts +4 -0
- package/lib/typescript/components/ScreenContentWrapper.web.d.ts.map +1 -0
- package/lib/typescript/components/ScreenFooter.d.ts +12 -0
- package/lib/typescript/components/ScreenFooter.d.ts.map +1 -0
- package/lib/typescript/components/ScreenFooter.web.d.ts +6 -0
- package/lib/typescript/components/ScreenFooter.web.d.ts.map +1 -0
- package/lib/typescript/components/ScreenStack.d.ts +5 -0
- package/lib/typescript/components/ScreenStack.d.ts.map +1 -0
- package/lib/typescript/components/ScreenStack.web.d.ts +4 -0
- package/lib/typescript/components/ScreenStack.web.d.ts.map +1 -0
- package/lib/typescript/components/ScreenStackHeaderConfig.d.ts +13 -0
- package/lib/typescript/components/ScreenStackHeaderConfig.d.ts.map +1 -0
- package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts +13 -0
- package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts.map +1 -0
- package/lib/typescript/components/ScreenStackItem.d.ts +11 -0
- package/lib/typescript/components/ScreenStackItem.d.ts.map +1 -0
- package/lib/typescript/components/SearchBar.d.ts +5 -0
- package/lib/typescript/components/SearchBar.d.ts.map +1 -0
- package/lib/typescript/components/SearchBar.web.d.ts +4 -0
- package/lib/typescript/components/SearchBar.web.d.ts.map +1 -0
- package/lib/typescript/components/helpers/DelayedFreeze.d.ts +8 -0
- package/lib/typescript/components/helpers/DelayedFreeze.d.ts.map +1 -0
- package/lib/typescript/components/helpers/usePrevious.d.ts +2 -0
- package/lib/typescript/components/helpers/usePrevious.d.ts.map +1 -0
- package/lib/typescript/contexts.d.ts +5 -0
- package/lib/typescript/contexts.d.ts.map +1 -0
- package/lib/typescript/core.d.ts +6 -0
- package/lib/typescript/core.d.ts.map +1 -0
- package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +76 -0
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/NativeScreensModule.d.ts +6 -0
- package/lib/typescript/fabric/NativeScreensModule.d.ts.map +1 -0
- package/lib/typescript/fabric/NativeScreensModule.web.d.ts +3 -0
- package/lib/typescript/fabric/NativeScreensModule.web.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenContainerNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/ScreenContainerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenContentWrapperNativeComponent.d.ts +6 -0
- package/lib/typescript/fabric/ScreenContentWrapperNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenFooterNativeComponent.d.ts +7 -0
- package/lib/typescript/fabric/ScreenFooterNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts +34 -24
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenNavigationContainerNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/ScreenNavigationContainerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +12 -2
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts +4 -2
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/SearchBarNativeComponent.d.ts +17 -16
- package/lib/typescript/fabric/SearchBarNativeComponent.d.ts.map +1 -0
- package/lib/typescript/gesture-handler/GestureDetectorProvider.d.ts +5 -0
- package/lib/typescript/gesture-handler/GestureDetectorProvider.d.ts.map +1 -0
- package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts +13 -0
- package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts.map +1 -0
- package/lib/typescript/gesture-handler/ScreenGestureDetector.d.ts +5 -0
- package/lib/typescript/gesture-handler/ScreenGestureDetector.d.ts.map +1 -0
- package/lib/typescript/gesture-handler/constraints.d.ts +6 -0
- package/lib/typescript/gesture-handler/constraints.d.ts.map +1 -0
- package/lib/typescript/gesture-handler/defaults.d.ts +20 -0
- package/lib/typescript/gesture-handler/defaults.d.ts.map +1 -0
- package/lib/typescript/gesture-handler/fabricUtils.d.ts +10 -0
- package/lib/typescript/gesture-handler/fabricUtils.d.ts.map +1 -0
- package/lib/typescript/gesture-handler/fabricUtils.web.d.ts +6 -0
- package/lib/typescript/gesture-handler/fabricUtils.web.d.ts.map +1 -0
- package/lib/typescript/gesture-handler/index.d.ts +2 -0
- package/lib/typescript/gesture-handler/index.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +25 -31
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/native-stack/contexts/GHContext.d.ts +4 -0
- package/lib/typescript/native-stack/contexts/GHContext.d.ts.map +1 -0
- package/lib/typescript/native-stack/index.d.ts +1 -0
- package/lib/typescript/native-stack/index.d.ts.map +1 -0
- package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts +4 -0
- package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts.map +1 -0
- package/lib/typescript/native-stack/types.d.ts +191 -33
- package/lib/typescript/native-stack/types.d.ts.map +1 -0
- package/lib/typescript/native-stack/utils/AnimatedHeaderHeightContext.d.ts +1 -0
- package/lib/typescript/native-stack/utils/AnimatedHeaderHeightContext.d.ts.map +1 -0
- package/lib/typescript/native-stack/utils/HeaderHeightContext.d.ts +1 -0
- package/lib/typescript/native-stack/utils/HeaderHeightContext.d.ts.map +1 -0
- package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts +2 -1
- package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts.map +1 -0
- package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts +3 -2
- package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts.map +1 -0
- package/lib/typescript/native-stack/utils/getStatusBarHeight.d.ts +3 -0
- package/lib/typescript/native-stack/utils/getStatusBarHeight.d.ts.map +1 -0
- package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts +2 -1
- package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts.map +1 -0
- package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts +1 -0
- package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts.map +1 -0
- package/lib/typescript/native-stack/utils/useHeaderHeight.d.ts +1 -0
- package/lib/typescript/native-stack/utils/useHeaderHeight.d.ts.map +1 -0
- package/lib/typescript/native-stack/views/FontProcessor.d.ts +1 -0
- package/lib/typescript/native-stack/views/FontProcessor.d.ts.map +1 -0
- package/lib/typescript/native-stack/views/FooterComponent.d.ts +7 -0
- package/lib/typescript/native-stack/views/FooterComponent.d.ts.map +1 -0
- package/lib/typescript/native-stack/views/HeaderConfig.d.ts +3 -2
- package/lib/typescript/native-stack/views/HeaderConfig.d.ts.map +1 -0
- package/lib/typescript/native-stack/views/NativeStackView.d.ts +2 -1
- package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -0
- package/lib/typescript/reanimated/ReanimatedHeaderHeightContext.d.ts +1 -0
- package/lib/typescript/reanimated/ReanimatedHeaderHeightContext.d.ts.map +1 -0
- package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +3 -3
- package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts.map +1 -0
- package/lib/typescript/reanimated/ReanimatedScreen.d.ts +3 -3
- package/lib/typescript/reanimated/ReanimatedScreen.d.ts.map +1 -0
- package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts +1 -0
- package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts.map +1 -0
- package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts +2 -1
- package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts.map +1 -0
- package/lib/typescript/reanimated/index.d.ts +1 -0
- package/lib/typescript/reanimated/index.d.ts.map +1 -0
- package/lib/typescript/reanimated/useReanimatedHeaderHeight.d.ts +2 -3
- package/lib/typescript/reanimated/useReanimatedHeaderHeight.d.ts.map +1 -0
- package/lib/typescript/reanimated/useReanimatedTransitionProgress.d.ts +4 -9
- package/lib/typescript/reanimated/useReanimatedTransitionProgress.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +186 -36
- package/lib/typescript/types.d.ts.map +1 -0
- package/lib/typescript/useTransitionProgress.d.ts +4 -3
- package/lib/typescript/useTransitionProgress.d.ts.map +1 -0
- package/lib/typescript/utils.d.ts +27 -1
- package/lib/typescript/utils.d.ts.map +1 -0
- package/native-stack/README.md +156 -108
- package/native-stack/package.json +4 -4
- package/package.json +1 -1
- package/react-native.config.js +19 -16
- package/reanimated/package.json +1 -1
- package/src/TransitionProgressContext.tsx +3 -1
- package/src/components/DebugContainer.tsx +46 -0
- package/src/components/DebugContainer.web.tsx +7 -0
- package/src/components/FullWindowOverlay.tsx +33 -0
- package/src/components/FullWindowOverlay.web.tsx +6 -0
- package/src/components/Screen.tsx +392 -0
- package/src/components/Screen.web.tsx +46 -0
- package/src/components/ScreenContainer.tsx +28 -0
- package/src/components/ScreenContainer.web.tsx +5 -0
- package/src/components/ScreenContentWrapper.tsx +9 -0
- package/src/components/ScreenContentWrapper.web.tsx +5 -0
- package/src/components/ScreenFooter.tsx +20 -0
- package/src/components/ScreenFooter.web.tsx +7 -0
- package/src/components/ScreenStack.tsx +112 -0
- package/src/components/ScreenStack.web.tsx +5 -0
- package/src/components/ScreenStackHeaderConfig.tsx +122 -0
- package/src/components/ScreenStackHeaderConfig.web.tsx +39 -0
- package/src/components/ScreenStackItem.tsx +174 -0
- package/src/components/SearchBar.tsx +102 -0
- package/src/components/SearchBar.web.tsx +5 -0
- package/src/components/helpers/DelayedFreeze.tsx +27 -0
- package/src/components/helpers/usePrevious.tsx +11 -0
- package/src/contexts.tsx +9 -0
- package/src/core.ts +45 -0
- package/src/fabric/FullWindowOverlayNativeComponent.ts +16 -0
- package/src/fabric/ModalScreenNativeComponent.ts +115 -0
- package/src/fabric/NativeScreensModule.ts +8 -0
- package/src/fabric/NativeScreensModule.web.ts +1 -0
- package/src/fabric/ScreenContainerNativeComponent.ts +3 -3
- package/src/fabric/ScreenContentWrapperNativeComponent.ts +14 -0
- package/src/fabric/ScreenFooterNativeComponent.ts +6 -0
- package/src/fabric/ScreenNativeComponent.ts +34 -23
- package/src/fabric/ScreenNavigationContainerNativeComponent.ts +3 -1
- package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +38 -2
- package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +5 -1
- package/src/fabric/ScreenStackNativeComponent.ts +3 -2
- package/src/fabric/SearchBarNativeComponent.ts +17 -13
- package/src/gesture-handler/GestureDetectorProvider.tsx +16 -0
- package/src/gesture-handler/RNScreensTurboModule.ts +13 -0
- package/src/gesture-handler/ScreenGestureDetector.tsx +241 -0
- package/src/gesture-handler/constraints.ts +87 -0
- package/src/gesture-handler/defaults.ts +46 -0
- package/src/gesture-handler/fabricUtils.ts +86 -0
- package/src/gesture-handler/fabricUtils.web.ts +10 -0
- package/src/gesture-handler/index.tsx +4 -0
- package/src/index.tsx +49 -113
- package/src/native-stack/contexts/GHContext.tsx +9 -0
- package/src/native-stack/navigators/createNativeStackNavigator.tsx +6 -3
- package/src/native-stack/types.tsx +204 -31
- package/src/native-stack/utils/getDefaultHeaderHeight.tsx +2 -2
- package/src/native-stack/utils/getStatusBarHeight.tsx +22 -0
- package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +1 -1
- package/src/native-stack/utils/useBackPressSubscription.tsx +1 -1
- package/src/native-stack/utils/useHeaderHeight.tsx +1 -1
- package/src/native-stack/views/FontProcessor.tsx +2 -2
- package/src/native-stack/views/FooterComponent.tsx +10 -0
- package/src/native-stack/views/HeaderConfig.tsx +20 -5
- package/src/native-stack/views/NativeStackView.tsx +137 -53
- package/src/reanimated/ReanimatedHeaderHeightContext.tsx +1 -1
- package/src/reanimated/ReanimatedNativeStackScreen.tsx +15 -13
- package/src/reanimated/ReanimatedScreen.tsx +4 -3
- package/src/reanimated/ReanimatedScreenProvider.tsx +3 -2
- package/src/reanimated/useReanimatedHeaderHeight.tsx +2 -2
- package/src/reanimated/useReanimatedTransitionProgress.tsx +1 -1
- package/src/types.tsx +210 -40
- package/src/useTransitionProgress.tsx +1 -1
- package/src/utils.ts +27 -5
- package/windows/README.md +4 -1
- package/windows/RNScreens/Screen.h +3 -1
- package/SystemBundles/4a5c11b5bb8dfc0553e927a2c8678e1dbd4a75220fe24dfbdba59b5550215de6.bundle +0 -33681
- package/SystemBundles/4a5c11b5bb8dfc0553e927a2c8678e1dbd4a75220fe24dfbdba59b5550215de6.map +0 -1
- package/SystemModules/amzn__react-native-screens.modules.txt +0 -101
- package/SystemModules/amzn__react-native-screens.private.modules.txt +0 -244
- package/lib/commonjs/index.native.js +0 -409
- package/lib/commonjs/index.native.js.map +0 -1
- package/lib/module/index.native.js +0 -412
- package/lib/module/index.native.js.map +0 -1
- package/lib/typescript/index.native.d.ts +0 -2
- package/src/index.native.tsx +0 -601
package/ios/RNSScreenStack.mm
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
2
2
|
#import <React/RCTFabricComponentsPlugins.h>
|
|
3
|
+
#import <React/RCTFabricSurface.h>
|
|
3
4
|
#import <React/RCTMountingTransactionObserving.h>
|
|
4
5
|
#import <React/RCTSurfaceTouchHandler.h>
|
|
6
|
+
#import <React/RCTSurfaceView.h>
|
|
5
7
|
#import <React/UIView+React.h>
|
|
6
8
|
#import <react/renderer/components/rnscreens/ComponentDescriptors.h>
|
|
7
9
|
#import <react/renderer/components/rnscreens/EventEmitters.h>
|
|
8
10
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
9
11
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
12
|
+
#import "RCTSurfaceTouchHandler+RNSUtility.h"
|
|
10
13
|
#else
|
|
11
14
|
#import <React/RCTBridge.h>
|
|
12
15
|
#import <React/RCTRootContentView.h>
|
|
@@ -14,13 +17,19 @@
|
|
|
14
17
|
#import <React/RCTTouchHandler.h>
|
|
15
18
|
#import <React/RCTUIManager.h>
|
|
16
19
|
#import <React/RCTUIManagerUtils.h>
|
|
20
|
+
#import "RCTTouchHandler+RNSUtility.h"
|
|
17
21
|
#endif // RCT_NEW_ARCH_ENABLED
|
|
18
22
|
|
|
23
|
+
#import "RNSDefines.h"
|
|
24
|
+
#import "RNSPercentDrivenInteractiveTransition.h"
|
|
19
25
|
#import "RNSScreen.h"
|
|
20
26
|
#import "RNSScreenStack.h"
|
|
21
27
|
#import "RNSScreenStackAnimator.h"
|
|
22
28
|
#import "RNSScreenStackHeaderConfig.h"
|
|
23
29
|
#import "RNSScreenWindowTraits.h"
|
|
30
|
+
#import "utils/UINavigationBar+RNSUtility.h"
|
|
31
|
+
|
|
32
|
+
#import "UIView+RNSUtility.h"
|
|
24
33
|
|
|
25
34
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
26
35
|
namespace react = facebook::react;
|
|
@@ -66,13 +75,18 @@ namespace react = facebook::react;
|
|
|
66
75
|
[super viewDidLayoutSubviews];
|
|
67
76
|
if ([self.topViewController isKindOfClass:[RNSScreen class]]) {
|
|
68
77
|
RNSScreen *screenController = (RNSScreen *)self.topViewController;
|
|
78
|
+
BOOL isNotDismissingModal = screenController.presentedViewController == nil ||
|
|
79
|
+
(screenController.presentedViewController != nil &&
|
|
80
|
+
![screenController.presentedViewController isBeingDismissed]);
|
|
69
81
|
|
|
70
82
|
// Calculate header height during simple transition from one screen to another.
|
|
71
83
|
// If RNSScreen includes a navigation controller of type RNSNavigationController, it should not calculate
|
|
72
84
|
// header height, as it could have nested stack.
|
|
73
|
-
if (![screenController hasNestedStack]) {
|
|
74
|
-
[
|
|
85
|
+
if (![screenController hasNestedStack] && isNotDismissingModal) {
|
|
86
|
+
[screenController calculateAndNotifyHeaderHeightChangeIsModal:NO];
|
|
75
87
|
}
|
|
88
|
+
|
|
89
|
+
[self maybeUpdateHeaderInsetsInShadowTreeForScreen:screenController];
|
|
76
90
|
}
|
|
77
91
|
}
|
|
78
92
|
|
|
@@ -85,11 +99,40 @@ namespace react = facebook::react;
|
|
|
85
99
|
{
|
|
86
100
|
return [self topViewController];
|
|
87
101
|
}
|
|
102
|
+
|
|
103
|
+
- (void)maybeUpdateHeaderInsetsInShadowTreeForScreen:(RNSScreen *)screenController
|
|
104
|
+
{
|
|
105
|
+
// This might happen e.g. if there is only native title present in navigation bar.
|
|
106
|
+
if (self.navigationBar.subviews.count < 2) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
auto headerConfig = screenController.screenView.findHeaderConfig;
|
|
111
|
+
if (headerConfig == nil || !headerConfig.shouldHeaderBeVisible) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
NSDirectionalEdgeInsets navBarMargins = [self.navigationBar directionalLayoutMargins];
|
|
116
|
+
NSDirectionalEdgeInsets navBarContentMargins =
|
|
117
|
+
[self.navigationBar.rnscreens_findContentView directionalLayoutMargins];
|
|
118
|
+
|
|
119
|
+
BOOL isDisplayingBackButton = [headerConfig shouldBackButtonBeVisibleInNavigationBar:self.navigationBar];
|
|
120
|
+
|
|
121
|
+
// 44.0 is just "closed eyes default". It is so on device I've tested with, nothing more.
|
|
122
|
+
UIView *barButtonView = isDisplayingBackButton ? self.navigationBar.rnscreens_findBackButtonWrapperView : nil;
|
|
123
|
+
CGFloat platformBackButtonWidth = barButtonView != nil ? barButtonView.frame.size.width : 44.0f;
|
|
124
|
+
|
|
125
|
+
[headerConfig updateHeaderInsetsInShadowTreeTo:NSDirectionalEdgeInsets{
|
|
126
|
+
.leading = navBarMargins.leading + navBarContentMargins.leading +
|
|
127
|
+
(isDisplayingBackButton ? platformBackButtonWidth : 0),
|
|
128
|
+
.trailing = navBarMargins.trailing + navBarContentMargins.trailing,
|
|
129
|
+
}];
|
|
130
|
+
}
|
|
88
131
|
#endif
|
|
89
132
|
|
|
90
133
|
@end
|
|
91
134
|
|
|
92
|
-
#if !TARGET_OS_TV
|
|
135
|
+
#if !TARGET_OS_TV && !TARGET_OS_VISION
|
|
93
136
|
@interface RNSScreenEdgeGestureRecognizer : UIScreenEdgePanGestureRecognizer
|
|
94
137
|
@end
|
|
95
138
|
|
|
@@ -108,16 +151,26 @@ namespace react = facebook::react;
|
|
|
108
151
|
NSMutableArray<RNSScreenView *> *_reactSubviews;
|
|
109
152
|
BOOL _invalidated;
|
|
110
153
|
BOOL _isFullWidthSwiping;
|
|
111
|
-
|
|
112
|
-
BOOL _hasLayout;
|
|
154
|
+
RNSPercentDrivenInteractiveTransition *_interactionController;
|
|
113
155
|
__weak RNSScreenStackManager *_manager;
|
|
114
156
|
BOOL _updateScheduled;
|
|
115
157
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
116
|
-
|
|
117
|
-
|
|
158
|
+
/// Screens that are subject of `ShadowViewMutation::Type::Delete` mutation
|
|
159
|
+
/// in current transaction. This vector should be populated when we receive notification via
|
|
160
|
+
/// `RCTMountingObserving` protocol, that a transaction will be performed, and should
|
|
161
|
+
/// be cleaned up when we're notified that the transaction has been completed.
|
|
162
|
+
std::vector<__strong RNSScreenView *> _toBeDeletedScreens;
|
|
163
|
+
#endif // RCT_NEW_ARCH_ENABLED
|
|
118
164
|
}
|
|
119
165
|
|
|
120
166
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
167
|
+
|
|
168
|
+
// Needed because of this: https://github.com/facebook/react-native/pull/37274
|
|
169
|
+
+ (void)load
|
|
170
|
+
{
|
|
171
|
+
[super load];
|
|
172
|
+
}
|
|
173
|
+
|
|
121
174
|
- (instancetype)initWithFrame:(CGRect)frame
|
|
122
175
|
{
|
|
123
176
|
if (self = [super initWithFrame:frame]) {
|
|
@@ -133,7 +186,6 @@ namespace react = facebook::react;
|
|
|
133
186
|
- (instancetype)initWithManager:(RNSScreenStackManager *)manager
|
|
134
187
|
{
|
|
135
188
|
if (self = [super init]) {
|
|
136
|
-
_hasLayout = NO;
|
|
137
189
|
_invalidated = NO;
|
|
138
190
|
_manager = manager;
|
|
139
191
|
[self initCommonProps];
|
|
@@ -147,7 +199,7 @@ namespace react = facebook::react;
|
|
|
147
199
|
_presentedModals = [NSMutableArray new];
|
|
148
200
|
_controller = [RNSNavigationController new];
|
|
149
201
|
_controller.delegate = self;
|
|
150
|
-
#if !TARGET_OS_TV
|
|
202
|
+
#if !TARGET_OS_TV && !TARGET_OS_VISION
|
|
151
203
|
[self setupGestureHandlers];
|
|
152
204
|
#endif
|
|
153
205
|
// we have to initialize viewControllers with a non empty array for
|
|
@@ -192,21 +244,16 @@ namespace react = facebook::react;
|
|
|
192
244
|
willShowViewController:(UIViewController *)viewController
|
|
193
245
|
animated:(BOOL)animated
|
|
194
246
|
{
|
|
195
|
-
UIView *view = viewController.view;
|
|
196
247
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
197
|
-
if (![view isKindOfClass:[RNSScreenView class]]) {
|
|
248
|
+
if (![viewController.view isKindOfClass:[RNSScreenView class]]) {
|
|
198
249
|
// if the current view is a snapshot, config was already removed so we don't trigger the method
|
|
199
250
|
return;
|
|
200
251
|
}
|
|
201
252
|
#endif
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
break;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
[RNSScreenStackHeaderConfig willShowViewController:viewController animated:animated withConfig:config];
|
|
253
|
+
auto *screenView = static_cast<RNSScreenView *>(viewController.view);
|
|
254
|
+
[RNSScreenStackHeaderConfig willShowViewController:viewController
|
|
255
|
+
animated:animated
|
|
256
|
+
withConfig:screenView.findHeaderConfig];
|
|
210
257
|
}
|
|
211
258
|
|
|
212
259
|
- (void)presentationControllerDidDismiss:(UIPresentationController *)presentationController
|
|
@@ -239,10 +286,12 @@ namespace react = facebook::react;
|
|
|
239
286
|
}
|
|
240
287
|
}
|
|
241
288
|
|
|
289
|
+
RNS_IGNORE_SUPER_CALL_BEGIN
|
|
242
290
|
- (NSArray<UIView *> *)reactSubviews
|
|
243
291
|
{
|
|
244
292
|
return _reactSubviews;
|
|
245
293
|
}
|
|
294
|
+
RNS_IGNORE_SUPER_CALL_END
|
|
246
295
|
|
|
247
296
|
- (void)didMoveToWindow
|
|
248
297
|
{
|
|
@@ -263,18 +312,9 @@ namespace react = facebook::react;
|
|
|
263
312
|
- (void)maybeAddToParentAndUpdateContainer
|
|
264
313
|
{
|
|
265
314
|
BOOL wasScreenMounted = _controller.parentViewController != nil;
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
BOOL isScreenReadyForShowing = self.window && _hasLayout;
|
|
270
|
-
#endif
|
|
271
|
-
if (!isScreenReadyForShowing && !wasScreenMounted) {
|
|
272
|
-
// We wait with adding to parent controller until the stack is mounted and has its initial
|
|
273
|
-
// layout done.
|
|
274
|
-
// If we add it before layout, some of the items (specifically items from the navigation bar),
|
|
275
|
-
// won't be able to position properly. Also the position and size of such items, even if it
|
|
276
|
-
// happens to change, won't be properly updated (this is perhaps some internal issue of UIKit).
|
|
277
|
-
// If we add it when window is not attached, some of the view transitions will be bloced (i.e.
|
|
315
|
+
if (!self.window && !wasScreenMounted) {
|
|
316
|
+
// We wait with adding to parent controller until the stack is mounted.
|
|
317
|
+
// If we add it when window is not attached, some of the view transitions will be blocked (i.e.
|
|
278
318
|
// modal transitions) and the internal view controler's state will get out of sync with what's
|
|
279
319
|
// on screen without us knowing.
|
|
280
320
|
return;
|
|
@@ -320,6 +360,38 @@ namespace react = facebook::react;
|
|
|
320
360
|
}
|
|
321
361
|
}
|
|
322
362
|
|
|
363
|
+
+ (UIViewController *)findTopMostPresentedViewControllerFromViewController:(UIViewController *)controller
|
|
364
|
+
{
|
|
365
|
+
auto presentedVc = controller;
|
|
366
|
+
while (presentedVc.presentedViewController != nil) {
|
|
367
|
+
presentedVc = presentedVc.presentedViewController;
|
|
368
|
+
}
|
|
369
|
+
return presentedVc;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
- (UIViewController *)findReactRootViewController
|
|
373
|
+
{
|
|
374
|
+
UIView *parent = self;
|
|
375
|
+
while (parent) {
|
|
376
|
+
parent = parent.reactSuperview;
|
|
377
|
+
if (parent.isReactRootView) {
|
|
378
|
+
return parent.reactViewController;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
return nil;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
- (UIViewController *)lastFromPresentedViewControllerChainStartingFrom:(UIViewController *)vc
|
|
385
|
+
{
|
|
386
|
+
UIViewController *lastNonNullVc = vc;
|
|
387
|
+
UIViewController *lastVc = vc.presentedViewController;
|
|
388
|
+
while (lastVc != nil) {
|
|
389
|
+
lastNonNullVc = lastVc;
|
|
390
|
+
lastVc = lastVc.presentedViewController;
|
|
391
|
+
}
|
|
392
|
+
return lastNonNullVc;
|
|
393
|
+
}
|
|
394
|
+
|
|
323
395
|
- (void)setModalViewControllers:(NSArray<UIViewController *> *)controllers
|
|
324
396
|
{
|
|
325
397
|
// prevent re-entry
|
|
@@ -346,9 +418,18 @@ namespace react = facebook::react;
|
|
|
346
418
|
NSMutableArray<UIViewController *> *newControllers = [NSMutableArray arrayWithArray:controllers];
|
|
347
419
|
[newControllers removeObjectsInArray:_presentedModals];
|
|
348
420
|
|
|
349
|
-
// find bottom-most controller that should stay on the stack
|
|
421
|
+
// We need to find bottom-most view controller that should stay on the stack
|
|
422
|
+
// for the duration of transition.
|
|
423
|
+
|
|
424
|
+
// There are couple of scenarios:
|
|
425
|
+
// (1) no modals are presented or all modals were presented by this RNSNavigationController,
|
|
426
|
+
// (2) there are modals presented by other RNSNavigationControllers (nested/outer),
|
|
427
|
+
// (3) there are modals presented by other controllers (e.g. React Native's Modal view).
|
|
428
|
+
|
|
429
|
+
// Last controller that is common for both _presentedModals & controllers
|
|
430
|
+
__block UIViewController *changeRootController = _controller;
|
|
431
|
+
// Last common controller index + 1
|
|
350
432
|
NSUInteger changeRootIndex = 0;
|
|
351
|
-
UIViewController *changeRootController = _controller;
|
|
352
433
|
for (NSUInteger i = 0; i < MIN(_presentedModals.count, controllers.count); i++) {
|
|
353
434
|
if (_presentedModals[i] == controllers[i]) {
|
|
354
435
|
changeRootController = controllers[i];
|
|
@@ -400,6 +481,7 @@ namespace react = facebook::react;
|
|
|
400
481
|
return;
|
|
401
482
|
} else {
|
|
402
483
|
UIViewController *previous = changeRootController;
|
|
484
|
+
|
|
403
485
|
for (NSUInteger i = changeRootIndex; i < controllers.count; i++) {
|
|
404
486
|
UIViewController *next = controllers[i];
|
|
405
487
|
BOOL lastModal = (i == controllers.count - 1);
|
|
@@ -437,16 +519,62 @@ namespace react = facebook::react;
|
|
|
437
519
|
}
|
|
438
520
|
};
|
|
439
521
|
|
|
440
|
-
|
|
441
|
-
|
|
522
|
+
// changeRootController is the last controller that *is owned by this stack*, and should stay unchanged after this
|
|
523
|
+
// batch of transitions. Therefore changeRootController.presentedViewController is the first constroller to be
|
|
524
|
+
// dismissed (implying also all controllers above). Notice here, that firstModalToBeDismissed could have been
|
|
525
|
+
// RNSScreen modal presented from *this* stack, another stack, or any other view controller with modal presentation
|
|
526
|
+
// provided by third-party libraries (e.g. React Native's Modal view). In case of presence of other (not managed by
|
|
527
|
+
// us) modal controllers, weird interactions might arise. The code below, besides handling our presentation /
|
|
528
|
+
// dismissal logic also attempts to handle possible wide gamut of cases of interactions with third-party modal
|
|
529
|
+
// controllers, however it's not perfect.
|
|
530
|
+
// TODO: Find general way to manage owned and foreign modal view controllers and refactor this code. Consider building
|
|
531
|
+
// model first (data structue, attempting to be aware of all modals in presentation and some text-like algorithm for
|
|
532
|
+
// computing required operations).
|
|
533
|
+
|
|
534
|
+
UIViewController *firstModalToBeDismissed = changeRootController.presentedViewController;
|
|
535
|
+
|
|
536
|
+
if (firstModalToBeDismissed != nil) {
|
|
442
537
|
BOOL shouldAnimate = changeRootIndex == controllers.count &&
|
|
443
|
-
[
|
|
444
|
-
((RNSScreen *)
|
|
445
|
-
|
|
446
|
-
[
|
|
447
|
-
|
|
448
|
-
|
|
538
|
+
[firstModalToBeDismissed isKindOfClass:[RNSScreen class]] &&
|
|
539
|
+
((RNSScreen *)firstModalToBeDismissed).screenView.stackAnimation != RNSScreenStackAnimationNone;
|
|
540
|
+
|
|
541
|
+
if ([_presentedModals containsObject:firstModalToBeDismissed] ||
|
|
542
|
+
![firstModalToBeDismissed isKindOfClass:RNSScreen.class]) {
|
|
543
|
+
// We dismiss every VC that was presented by changeRootController VC or its descendant.
|
|
544
|
+
// After the series of dismissals is completed we run completion block in which
|
|
545
|
+
// we present modals on top of changeRootController (which may be the this stack VC)
|
|
546
|
+
//
|
|
547
|
+
// There also might the second case, where the firstModalToBeDismissed is foreign.
|
|
548
|
+
// See: https://github.com/software-mansion/react-native-screens/issues/2048
|
|
549
|
+
// For now, to mitigate the issue, we also decide to trigger its dismissal before
|
|
550
|
+
// starting the presentation chain down below in finish() callback.
|
|
551
|
+
[changeRootController dismissViewControllerAnimated:shouldAnimate completion:finish];
|
|
552
|
+
return;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
// changeRootController does not have presentedViewController but it does not mean that no modals are in presentation;
|
|
557
|
+
// modals could be presented by another stack (nested / outer), third-party view controller or they could be using
|
|
558
|
+
// UIModalPresentationCurrentContext / UIModalPresentationOverCurrentContext presentation styles; in the last case
|
|
559
|
+
// for some reason system asks top-level (react root) vc to present instead of our stack, despite the fact that
|
|
560
|
+
// `definesPresentationContext` returns `YES` for UINavigationController.
|
|
561
|
+
// So we first need to find top-level controller manually:
|
|
562
|
+
UIViewController *reactRootVc = [self findReactRootViewController];
|
|
563
|
+
UIViewController *topMostVc = [RNSScreenStackView findTopMostPresentedViewControllerFromViewController:reactRootVc];
|
|
564
|
+
|
|
565
|
+
if (topMostVc != reactRootVc) {
|
|
566
|
+
changeRootController = topMostVc;
|
|
567
|
+
|
|
568
|
+
// Here we handle just the simplest case where the top level VC was dismissed. In any more complex
|
|
569
|
+
// scenario we will still have problems, see: https://github.com/software-mansion/react-native-screens/issues/1813
|
|
570
|
+
if ([_presentedModals containsObject:topMostVc] && ![controllers containsObject:topMostVc]) {
|
|
571
|
+
[changeRootController dismissViewControllerAnimated:YES completion:finish];
|
|
572
|
+
return;
|
|
573
|
+
}
|
|
449
574
|
}
|
|
575
|
+
|
|
576
|
+
// We didn't detect any controllers for dismissal, thus we start presenting new VCs
|
|
577
|
+
finish();
|
|
450
578
|
}
|
|
451
579
|
|
|
452
580
|
- (void)setPushViewControllers:(NSArray<UIViewController *> *)controllers
|
|
@@ -507,10 +635,16 @@ namespace react = facebook::react;
|
|
|
507
635
|
((RNSScreenView *)top.view).replaceAnimation == RNSScreenReplaceAnimationPush) {
|
|
508
636
|
// setting new controllers with animation does `push` animation by default
|
|
509
637
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
638
|
+
// This is a workaround for the case, when in the app we're trying to do `replace` action on screens, when
|
|
639
|
+
// there's already ongoing transition to some screen. In such case, we're making the snapshot, but we're trying
|
|
640
|
+
// to add it to the wrong superview (where it should be UIViewControllerWrapperView, but it's
|
|
641
|
+
// _UIParallaxDimmingView instead). At the moment of RN 0.74 we can't queue the unmounts for such situation
|
|
642
|
+
// either, so we need to turn off animations, when the view is not yet mounted, but it will appear after the
|
|
643
|
+
// transition of previous replacement.
|
|
644
|
+
[_controller setViewControllers:controllers animated:previousTop.view.window != nil];
|
|
645
|
+
#else
|
|
513
646
|
[_controller setViewControllers:controllers animated:YES];
|
|
647
|
+
#endif // RCT_NEW_ARCH_ENABLED
|
|
514
648
|
} else {
|
|
515
649
|
// last top controller is no longer on stack
|
|
516
650
|
// in this case we set the controllers stack to the new list with
|
|
@@ -526,11 +660,8 @@ namespace react = facebook::react;
|
|
|
526
660
|
// no animation and do animated push of the last item
|
|
527
661
|
NSMutableArray *newControllers = [NSMutableArray arrayWithArray:controllers];
|
|
528
662
|
[newControllers removeLastObject];
|
|
663
|
+
|
|
529
664
|
[_controller setViewControllers:newControllers animated:NO];
|
|
530
|
-
#ifdef RCT_NEW_ARCH_ENABLED
|
|
531
|
-
auto screenController = (RNSScreen *)top;
|
|
532
|
-
[screenController resetViewToScreen];
|
|
533
|
-
#endif
|
|
534
665
|
[_controller pushViewController:top animated:YES];
|
|
535
666
|
} else {
|
|
536
667
|
// don't really know what this case could be, but may need to handle it
|
|
@@ -548,7 +679,7 @@ namespace react = facebook::react;
|
|
|
548
679
|
NSMutableArray<UIViewController *> *pushControllers = [NSMutableArray new];
|
|
549
680
|
NSMutableArray<UIViewController *> *modalControllers = [NSMutableArray new];
|
|
550
681
|
for (RNSScreenView *screen in _reactSubviews) {
|
|
551
|
-
if (!screen.dismissed && screen.controller != nil) {
|
|
682
|
+
if (!screen.dismissed && screen.controller != nil && screen.activityState != RNSActivityStateInactive) {
|
|
552
683
|
if (pushControllers.count == 0) {
|
|
553
684
|
// first screen on the list needs to be places as "push controller"
|
|
554
685
|
[pushControllers addObject:screen.controller];
|
|
@@ -570,19 +701,32 @@ namespace react = facebook::react;
|
|
|
570
701
|
{
|
|
571
702
|
[super layoutSubviews];
|
|
572
703
|
_controller.view.frame = self.bounds;
|
|
704
|
+
|
|
705
|
+
// We need to update the bounds of the modal views here, since
|
|
706
|
+
// for contained modals they are not updated by modals themselves.
|
|
707
|
+
for (UIViewController *modal in _presentedModals) {
|
|
708
|
+
// Because `layoutSubviews` method is also called on grabbing the modal,
|
|
709
|
+
// we don't want to update the frame when modal is being dismissed.
|
|
710
|
+
// We also want to get the frame in correct position. In the best case, it
|
|
711
|
+
// should be modal's superview (UITransitionView), which frame is being changed correctly.
|
|
712
|
+
// Otherwise, when superview is nil, we will fallback to the bounds of the ScreenStack.
|
|
713
|
+
BOOL isModalBeingDismissed = [modal isKindOfClass:[RNSScreen class]] && ((RNSScreen *)modal).isBeingDismissed;
|
|
714
|
+
CGRect correctFrame = modal.view.superview != nil ? modal.view.superview.frame : self.bounds;
|
|
715
|
+
|
|
716
|
+
if (!CGRectEqualToRect(modal.view.frame, correctFrame) && !isModalBeingDismissed) {
|
|
717
|
+
modal.view.frame = correctFrame;
|
|
718
|
+
}
|
|
719
|
+
}
|
|
573
720
|
}
|
|
574
721
|
|
|
575
722
|
- (void)dismissOnReload
|
|
576
723
|
{
|
|
577
724
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
578
|
-
if ([_controller.visibleViewController isKindOfClass:[RNSScreen class]]) {
|
|
579
|
-
[(RNSScreen *)_controller.visibleViewController resetViewToScreen];
|
|
580
|
-
}
|
|
581
725
|
#else
|
|
582
726
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
583
727
|
[self invalidate];
|
|
584
728
|
});
|
|
585
|
-
#endif
|
|
729
|
+
#endif // RCT_NEW_ARCH_ENABLED
|
|
586
730
|
}
|
|
587
731
|
|
|
588
732
|
#pragma mark methods connected to transitioning
|
|
@@ -605,7 +749,7 @@ namespace react = facebook::react;
|
|
|
605
749
|
// Also, we need to return the animator when full width swiping even if the animation is not custom,
|
|
606
750
|
// otherwise the screen will be just popped immediately due to no animation
|
|
607
751
|
((operation == UINavigationControllerOperationPop && shouldCancelDismiss) || _isFullWidthSwiping ||
|
|
608
|
-
[RNSScreenStackAnimator isCustomAnimation:screen.stackAnimation])) {
|
|
752
|
+
[RNSScreenStackAnimator isCustomAnimation:screen.stackAnimation] || _customAnimation)) {
|
|
609
753
|
return [[RNSScreenStackAnimator alloc] initWithOperation:operation];
|
|
610
754
|
}
|
|
611
755
|
return nil;
|
|
@@ -617,26 +761,18 @@ namespace react = facebook::react;
|
|
|
617
761
|
// item is close to an edge and we start pulling from edge we want the Touchable to be cancelled.
|
|
618
762
|
// Without the below code the Touchable will remain active (highlighted) for the duration of back
|
|
619
763
|
// gesture and onPress may fire when we release the finger.
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
parent = parent.superview;
|
|
623
|
-
if (parent != nil) {
|
|
624
|
-
#ifdef RCT_NEW_ARCH_ENABLED
|
|
625
|
-
RCTSurfaceTouchHandler *touchHandler = [parent performSelector:@selector(touchHandler)];
|
|
626
|
-
#else
|
|
627
|
-
RCTTouchHandler *touchHandler = [parent performSelector:@selector(touchHandler)];
|
|
628
|
-
#endif
|
|
629
|
-
[touchHandler setEnabled:NO];
|
|
630
|
-
[touchHandler setEnabled:YES];
|
|
631
|
-
[touchHandler reset];
|
|
632
|
-
}
|
|
764
|
+
|
|
765
|
+
[[self rnscreens_findTouchHandlerInAncestorChain] rnscreens_cancelTouches];
|
|
633
766
|
}
|
|
634
767
|
|
|
635
768
|
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
|
|
636
769
|
{
|
|
770
|
+
if (_disableSwipeBack) {
|
|
771
|
+
return NO;
|
|
772
|
+
}
|
|
637
773
|
RNSScreenView *topScreen = _reactSubviews.lastObject;
|
|
638
774
|
|
|
639
|
-
#if TARGET_OS_TV
|
|
775
|
+
#if TARGET_OS_TV || TARGET_OS_VISION
|
|
640
776
|
[self cancelTouchesInParent];
|
|
641
777
|
return YES;
|
|
642
778
|
#else
|
|
@@ -654,12 +790,14 @@ namespace react = facebook::react;
|
|
|
654
790
|
// Now we're dealing with RNSScreenEdgeGestureRecognizer (or _UIParallaxTransitionPanGestureRecognizer)
|
|
655
791
|
if (topScreen.customAnimationOnSwipe && [RNSScreenStackAnimator isCustomAnimation:topScreen.stackAnimation]) {
|
|
656
792
|
if ([gestureRecognizer isKindOfClass:[RNSScreenEdgeGestureRecognizer class]]) {
|
|
793
|
+
UIRectEdge edges = ((RNSScreenEdgeGestureRecognizer *)gestureRecognizer).edges;
|
|
794
|
+
BOOL isRTL = _controller.view.semanticContentAttribute == UISemanticContentAttributeForceRightToLeft;
|
|
795
|
+
BOOL isSlideFromLeft = topScreen.stackAnimation == RNSScreenStackAnimationSlideFromLeft;
|
|
657
796
|
// if we do not set any explicit `semanticContentAttribute`, it is `UISemanticContentAttributeUnspecified` instead
|
|
658
797
|
// of `UISemanticContentAttributeForceLeftToRight`, so we just check if it is RTL or not
|
|
659
|
-
BOOL isCorrectEdge = (
|
|
660
|
-
|
|
661
|
-
(
|
|
662
|
-
((RNSScreenEdgeGestureRecognizer *)gestureRecognizer).edges == UIRectEdgeLeft);
|
|
798
|
+
BOOL isCorrectEdge = (isRTL && edges == UIRectEdgeRight) ||
|
|
799
|
+
(!isRTL && isSlideFromLeft && edges == UIRectEdgeRight) ||
|
|
800
|
+
(isRTL && isSlideFromLeft && edges == UIRectEdgeLeft) || (!isRTL && edges == UIRectEdgeLeft);
|
|
663
801
|
if (isCorrectEdge) {
|
|
664
802
|
[self cancelTouchesInParent];
|
|
665
803
|
return YES;
|
|
@@ -679,7 +817,7 @@ namespace react = facebook::react;
|
|
|
679
817
|
#endif // TARGET_OS_TV
|
|
680
818
|
}
|
|
681
819
|
|
|
682
|
-
#if !TARGET_OS_TV
|
|
820
|
+
#if !TARGET_OS_TV && !TARGET_OS_VISION
|
|
683
821
|
- (void)setupGestureHandlers
|
|
684
822
|
{
|
|
685
823
|
// gesture recognizers for custom stack animations
|
|
@@ -723,11 +861,14 @@ namespace react = facebook::react;
|
|
|
723
861
|
}
|
|
724
862
|
}
|
|
725
863
|
|
|
864
|
+
bool isInverted = topScreen.stackAnimation == RNSScreenStackAnimationSlideFromLeft;
|
|
865
|
+
|
|
726
866
|
float transitionProgress = (translation / distance);
|
|
867
|
+
transitionProgress = isInverted ? transitionProgress * -1 : transitionProgress;
|
|
727
868
|
|
|
728
869
|
switch (gestureRecognizer.state) {
|
|
729
870
|
case UIGestureRecognizerStateBegan: {
|
|
730
|
-
_interactionController = [
|
|
871
|
+
_interactionController = [RNSPercentDrivenInteractiveTransition new];
|
|
731
872
|
[_controller popViewControllerAnimated:YES];
|
|
732
873
|
break;
|
|
733
874
|
}
|
|
@@ -745,13 +886,17 @@ namespace react = facebook::react;
|
|
|
745
886
|
case UIGestureRecognizerStateEnded: {
|
|
746
887
|
// values taken from
|
|
747
888
|
// https://github.com/react-navigation/react-navigation/blob/54739828598d7072c1bf7b369659e3682db3edc5/packages/stack/src/views/Stack/Card.tsx#L316
|
|
748
|
-
|
|
889
|
+
float snapPoint = distance / 2;
|
|
890
|
+
float gestureDistance = translation + velocity * 0.3;
|
|
891
|
+
gestureDistance = isInverted ? gestureDistance * -1 : gestureDistance;
|
|
892
|
+
BOOL shouldFinishTransition = gestureDistance > snapPoint;
|
|
749
893
|
if (shouldFinishTransition) {
|
|
750
894
|
[_interactionController finishInteractiveTransition];
|
|
751
895
|
} else {
|
|
752
896
|
[_interactionController cancelInteractiveTransition];
|
|
753
897
|
}
|
|
754
898
|
_interactionController = nil;
|
|
899
|
+
_isFullWidthSwiping = NO;
|
|
755
900
|
}
|
|
756
901
|
default: {
|
|
757
902
|
break;
|
|
@@ -770,7 +915,7 @@ namespace react = facebook::react;
|
|
|
770
915
|
if (_interactionController == nil && fromView.reactSuperview) {
|
|
771
916
|
BOOL shouldCancelDismiss = [self shouldCancelDismissFromView:fromView toView:toView];
|
|
772
917
|
if (shouldCancelDismiss) {
|
|
773
|
-
_interactionController = [
|
|
918
|
+
_interactionController = [RNSPercentDrivenInteractiveTransition new];
|
|
774
919
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
|
775
920
|
[self->_interactionController cancelInteractiveTransition];
|
|
776
921
|
self->_interactionController = nil;
|
|
@@ -783,6 +928,10 @@ namespace react = facebook::react;
|
|
|
783
928
|
});
|
|
784
929
|
}
|
|
785
930
|
}
|
|
931
|
+
|
|
932
|
+
if (_interactionController != nil) {
|
|
933
|
+
[_interactionController setAnimationController:animationController];
|
|
934
|
+
}
|
|
786
935
|
return _interactionController;
|
|
787
936
|
}
|
|
788
937
|
|
|
@@ -798,12 +947,17 @@ namespace react = facebook::react;
|
|
|
798
947
|
{
|
|
799
948
|
[self emitOnFinishTransitioningEvent];
|
|
800
949
|
[RNSScreenWindowTraits updateWindowTraits];
|
|
950
|
+
// Because of the bug that caused view to have incorrect dimensions while changing the orientation,
|
|
951
|
+
// we need to signalize that it needs to be layouted.
|
|
952
|
+
// see https://github.com/software-mansion/react-native-screens/pull/1970
|
|
953
|
+
[_controller.view setNeedsLayout];
|
|
801
954
|
}
|
|
802
955
|
#endif
|
|
803
956
|
|
|
804
957
|
- (void)markChildUpdated
|
|
805
958
|
{
|
|
806
|
-
//
|
|
959
|
+
// In native stack this should be called only for `preload` purposes.
|
|
960
|
+
[self updateContainer];
|
|
807
961
|
}
|
|
808
962
|
|
|
809
963
|
- (void)didUpdateChildren
|
|
@@ -844,8 +998,8 @@ namespace react = facebook::react;
|
|
|
844
998
|
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
|
|
845
999
|
{
|
|
846
1000
|
if (CGRectContainsPoint(_controller.navigationBar.frame, point)) {
|
|
847
|
-
|
|
848
|
-
UIView *headerConfig =
|
|
1001
|
+
RNSScreenView *topMostScreen = (RNSScreenView *)_reactSubviews.lastObject;
|
|
1002
|
+
UIView *headerConfig = topMostScreen.findHeaderConfig;
|
|
849
1003
|
if ([headerConfig isKindOfClass:[RNSScreenStackHeaderConfig class]]) {
|
|
850
1004
|
UIView *headerHitTestResult = [headerConfig hitTest:point withEvent:event];
|
|
851
1005
|
if (headerHitTestResult != nil) {
|
|
@@ -856,7 +1010,7 @@ namespace react = facebook::react;
|
|
|
856
1010
|
return [super hitTest:point withEvent:event];
|
|
857
1011
|
}
|
|
858
1012
|
|
|
859
|
-
#if !TARGET_OS_TV
|
|
1013
|
+
#if !TARGET_OS_TV && !TARGET_OS_VISION
|
|
860
1014
|
|
|
861
1015
|
- (BOOL)isScrollViewPanGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
|
|
862
1016
|
{
|
|
@@ -930,6 +1084,9 @@ namespace react = facebook::react;
|
|
|
930
1084
|
|
|
931
1085
|
#endif // !TARGET_OS_TV
|
|
932
1086
|
|
|
1087
|
+
RNS_IGNORE_SUPER_CALL_BEGIN
|
|
1088
|
+
// We hijack the udpates as we don't want to update UIKit model yet.
|
|
1089
|
+
// This is done after all mutations are processed.
|
|
933
1090
|
- (void)insertReactSubview:(RNSScreenView *)subview atIndex:(NSInteger)atIndex
|
|
934
1091
|
{
|
|
935
1092
|
if (![subview isKindOfClass:[RNSScreenView class]]) {
|
|
@@ -945,6 +1102,7 @@ namespace react = facebook::react;
|
|
|
945
1102
|
subview.reactSuperview = nil;
|
|
946
1103
|
[_reactSubviews removeObject:subview];
|
|
947
1104
|
}
|
|
1105
|
+
RNS_IGNORE_SUPER_CALL_END
|
|
948
1106
|
|
|
949
1107
|
- (void)didUpdateReactSubviews
|
|
950
1108
|
{
|
|
@@ -952,11 +1110,37 @@ namespace react = facebook::react;
|
|
|
952
1110
|
// set yet, however the layout call is already enqueued on ui thread. Enqueuing update call on the
|
|
953
1111
|
// ui queue will guarantee that the update will run after layout.
|
|
954
1112
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
955
|
-
self->_hasLayout = YES;
|
|
956
1113
|
[self maybeAddToParentAndUpdateContainer];
|
|
957
1114
|
});
|
|
958
1115
|
}
|
|
959
1116
|
|
|
1117
|
+
- (void)startScreenTransition
|
|
1118
|
+
{
|
|
1119
|
+
if (_interactionController == nil) {
|
|
1120
|
+
_customAnimation = YES;
|
|
1121
|
+
_interactionController = [RNSPercentDrivenInteractiveTransition new];
|
|
1122
|
+
[_controller popViewControllerAnimated:YES];
|
|
1123
|
+
}
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1126
|
+
- (void)updateScreenTransition:(double)progress
|
|
1127
|
+
{
|
|
1128
|
+
[_interactionController updateInteractiveTransition:progress];
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
- (void)finishScreenTransition:(BOOL)canceled
|
|
1132
|
+
{
|
|
1133
|
+
_customAnimation = NO;
|
|
1134
|
+
if (canceled) {
|
|
1135
|
+
[_interactionController updateInteractiveTransition:0.0];
|
|
1136
|
+
[_interactionController cancelInteractiveTransition];
|
|
1137
|
+
} else {
|
|
1138
|
+
[_interactionController updateInteractiveTransition:1.0];
|
|
1139
|
+
[_interactionController finishInteractiveTransition];
|
|
1140
|
+
}
|
|
1141
|
+
_interactionController = nil;
|
|
1142
|
+
}
|
|
1143
|
+
|
|
960
1144
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
961
1145
|
#pragma mark - Fabric specific
|
|
962
1146
|
|
|
@@ -977,23 +1161,24 @@ namespace react = facebook::react;
|
|
|
977
1161
|
|
|
978
1162
|
[_reactSubviews insertObject:(RNSScreenView *)childComponentView atIndex:index];
|
|
979
1163
|
((RNSScreenView *)childComponentView).reactSuperview = self;
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
1164
|
+
// Container update is done after all mount operations are executed in
|
|
1165
|
+
// `- [RNSScreenStackView mountingTransactionDidMount: withSurfaceTelemetry:]`
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
- (nullable RNSScreenView *)childScreenForTag:(react::Tag)tag
|
|
1169
|
+
{
|
|
1170
|
+
for (RNSScreenView *child in _reactSubviews) {
|
|
1171
|
+
if (child.tag == tag) {
|
|
1172
|
+
return child;
|
|
1173
|
+
}
|
|
1174
|
+
}
|
|
1175
|
+
return nil;
|
|
983
1176
|
}
|
|
984
1177
|
|
|
985
1178
|
- (void)unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index
|
|
986
1179
|
{
|
|
987
1180
|
RNSScreenView *screenChildComponent = (RNSScreenView *)childComponentView;
|
|
988
|
-
|
|
989
|
-
// We also check `_presentedModals` since if you push 2 modals, second one is not a "child" of _controller.
|
|
990
|
-
// Also, when dissmised with a gesture, the screen already is not under the window, so we don't need to apply
|
|
991
|
-
// snapshot.
|
|
992
|
-
if (screenChildComponent.window != nil &&
|
|
993
|
-
((screenChildComponent == _controller.visibleViewController.view && _presentedModals.count < 2) ||
|
|
994
|
-
screenChildComponent == [_presentedModals.lastObject view])) {
|
|
995
|
-
[screenChildComponent.controller setViewToSnapshot:_snapshot];
|
|
996
|
-
}
|
|
1181
|
+
[screenChildComponent.controller setViewToSnapshot];
|
|
997
1182
|
|
|
998
1183
|
RCTAssert(
|
|
999
1184
|
screenChildComponent.reactSuperview == self,
|
|
@@ -1012,26 +1197,53 @@ namespace react = facebook::react;
|
|
|
1012
1197
|
screenChildComponent.reactSuperview = nil;
|
|
1013
1198
|
[_reactSubviews removeObject:screenChildComponent];
|
|
1014
1199
|
[screenChildComponent removeFromSuperview];
|
|
1015
|
-
dispatch_async(dispatch_get_main_queue(), ^{
|
|
1016
|
-
[self maybeAddToParentAndUpdateContainer];
|
|
1017
|
-
});
|
|
1018
1200
|
}
|
|
1019
1201
|
|
|
1020
|
-
- (void)
|
|
1202
|
+
- (void)mountingTransactionWillMount:(const facebook::react::MountingTransaction &)transaction
|
|
1203
|
+
withSurfaceTelemetry:(const facebook::react::SurfaceTelemetry &)surfaceTelemetry
|
|
1021
1204
|
{
|
|
1022
|
-
|
|
1205
|
+
for (const auto &mutation : transaction.getMutations()) {
|
|
1206
|
+
if (mutation.type == react::ShadowViewMutation::Delete) {
|
|
1207
|
+
RNSScreenView *_Nullable toBeRemovedChild = [self childScreenForTag:mutation.oldChildShadowView.tag];
|
|
1208
|
+
if (toBeRemovedChild != nil) {
|
|
1209
|
+
[toBeRemovedChild willBeUnmountedInUpcomingTransaction];
|
|
1210
|
+
_toBeDeletedScreens.push_back(toBeRemovedChild);
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
1023
1214
|
}
|
|
1024
1215
|
|
|
1025
|
-
- (void)
|
|
1026
|
-
|
|
1216
|
+
- (void)mountingTransactionDidMount:(const facebook::react::MountingTransaction &)transaction
|
|
1217
|
+
withSurfaceTelemetry:(const facebook::react::SurfaceTelemetry &)surfaceTelemetry
|
|
1027
1218
|
{
|
|
1028
|
-
for (auto &mutation : transaction.getMutations()) {
|
|
1029
|
-
if (mutation.
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1219
|
+
for (const auto &mutation : transaction.getMutations()) {
|
|
1220
|
+
if (mutation.parentShadowView.tag == self.tag &&
|
|
1221
|
+
(mutation.type == react::ShadowViewMutation::Type::Insert ||
|
|
1222
|
+
mutation.type == react::ShadowViewMutation::Type::Remove)) {
|
|
1223
|
+
// we need to wait until children have their layout set. At this point they don't have the layout
|
|
1224
|
+
// set yet, however the layout call is already enqueued on ui thread. Enqueuing update call on the
|
|
1225
|
+
// ui queue will guarantee that the update will run after layout.
|
|
1226
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
1227
|
+
[self maybeAddToParentAndUpdateContainer];
|
|
1228
|
+
});
|
|
1229
|
+
break;
|
|
1033
1230
|
}
|
|
1034
1231
|
}
|
|
1232
|
+
|
|
1233
|
+
if (!self->_toBeDeletedScreens.empty()) {
|
|
1234
|
+
__weak RNSScreenStackView *weakSelf = self;
|
|
1235
|
+
// We want to run after container updates are performed (transitions etc.)
|
|
1236
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
1237
|
+
RNSScreenStackView *_Nullable strongSelf = weakSelf;
|
|
1238
|
+
if (strongSelf == nil) {
|
|
1239
|
+
return;
|
|
1240
|
+
}
|
|
1241
|
+
for (RNSScreenView *screenRef : strongSelf->_toBeDeletedScreens) {
|
|
1242
|
+
[screenRef invalidate];
|
|
1243
|
+
}
|
|
1244
|
+
strongSelf->_toBeDeletedScreens.clear();
|
|
1245
|
+
});
|
|
1246
|
+
}
|
|
1035
1247
|
}
|
|
1036
1248
|
|
|
1037
1249
|
- (void)prepareForRecycle
|
|
@@ -1044,7 +1256,6 @@ namespace react = facebook::react;
|
|
|
1044
1256
|
}
|
|
1045
1257
|
|
|
1046
1258
|
[_presentedModals removeAllObjects];
|
|
1047
|
-
[self dismissOnReload];
|
|
1048
1259
|
[_controller willMoveToParentViewController:nil];
|
|
1049
1260
|
[_controller removeFromParentViewController];
|
|
1050
1261
|
[_controller setViewControllers:@[ [UIViewController new] ]];
|
|
@@ -1060,12 +1271,25 @@ namespace react = facebook::react;
|
|
|
1060
1271
|
- (void)invalidate
|
|
1061
1272
|
{
|
|
1062
1273
|
_invalidated = YES;
|
|
1063
|
-
|
|
1274
|
+
[self dismissAllRelatedModals];
|
|
1275
|
+
[_controller willMoveToParentViewController:nil];
|
|
1276
|
+
[_controller removeFromParentViewController];
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
// This method aims to dismiss all modals for which presentation process
|
|
1280
|
+
// has been initiated in this navigation controller, i. e. either a Screen
|
|
1281
|
+
// with modal presentation or foreign modal presented from inside a Screen.
|
|
1282
|
+
- (void)dismissAllRelatedModals
|
|
1283
|
+
{
|
|
1284
|
+
[_controller.presentedViewController dismissViewControllerAnimated:YES completion:nil];
|
|
1285
|
+
|
|
1286
|
+
// This loop seems to be excessive. Above message send to `_controller` should
|
|
1287
|
+
// be enough, because system dismisses the controllers recursively,
|
|
1288
|
+
// however better safe than sorry & introduce a regression, thus it is left here.
|
|
1289
|
+
for (UIViewController *controller in [_presentedModals reverseObjectEnumerator]) {
|
|
1064
1290
|
[controller dismissViewControllerAnimated:NO completion:nil];
|
|
1065
1291
|
}
|
|
1066
1292
|
[_presentedModals removeAllObjects];
|
|
1067
|
-
[_controller willMoveToParentViewController:nil];
|
|
1068
|
-
[_controller removeFromParentViewController];
|
|
1069
1293
|
}
|
|
1070
1294
|
|
|
1071
1295
|
#endif // RCT_NEW_ARCH_ENABLED
|