@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
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
package com.swmansion.rnscreens
|
|
2
|
+
|
|
3
|
+
import android.annotation.SuppressLint
|
|
4
|
+
import android.view.View
|
|
5
|
+
import androidx.core.view.ViewCompat
|
|
6
|
+
import androidx.core.view.WindowInsetsAnimationCompat
|
|
7
|
+
import androidx.core.view.WindowInsetsCompat
|
|
8
|
+
import com.facebook.react.bridge.ReactContext
|
|
9
|
+
import com.facebook.react.views.view.ReactViewGroup
|
|
10
|
+
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
|
11
|
+
import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
|
|
12
|
+
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_COLLAPSED
|
|
13
|
+
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED
|
|
14
|
+
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_HALF_EXPANDED
|
|
15
|
+
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_HIDDEN
|
|
16
|
+
import com.google.android.material.math.MathUtils
|
|
17
|
+
import com.swmansion.rnscreens.bottomsheet.SheetUtils
|
|
18
|
+
import kotlin.math.max
|
|
19
|
+
|
|
20
|
+
@SuppressLint("ViewConstructor")
|
|
21
|
+
class ScreenFooter(
|
|
22
|
+
val reactContext: ReactContext,
|
|
23
|
+
) : ReactViewGroup(reactContext) {
|
|
24
|
+
private var lastContainerHeight: Int = 0
|
|
25
|
+
private var lastStableSheetState: Int = STATE_HIDDEN
|
|
26
|
+
private var isAnimationControlledByKeyboard = false
|
|
27
|
+
private var lastSlideOffset = 0.0f
|
|
28
|
+
private var lastBottomInset = 0
|
|
29
|
+
private var isCallbackRegistered = false
|
|
30
|
+
|
|
31
|
+
// ScreenFooter is supposed to be direct child of Screen
|
|
32
|
+
private val screenParent
|
|
33
|
+
get() = parent as? Screen
|
|
34
|
+
|
|
35
|
+
private val sheetBehavior
|
|
36
|
+
get() = requireScreenParent().sheetBehavior
|
|
37
|
+
|
|
38
|
+
private val hasReceivedInitialLayoutFromParent get() = lastContainerHeight > 0
|
|
39
|
+
|
|
40
|
+
// Due to Android restrictions on layout flow, particularly
|
|
41
|
+
// the fact that onMeasure must set `measuredHeight` & `measuredWidth` React calls `measure` on every
|
|
42
|
+
// view group with accurate dimensions computed by Yoga. This is our entry point to get current view dimensions.
|
|
43
|
+
private val reactHeight
|
|
44
|
+
get() = measuredHeight
|
|
45
|
+
|
|
46
|
+
private val reactWidth
|
|
47
|
+
get() = measuredWidth
|
|
48
|
+
|
|
49
|
+
// Main goal of this callback implementation is to handle keyboard appearance. We use it to make sure
|
|
50
|
+
// that the footer respects keyboard during layout.
|
|
51
|
+
// Note `DISPATCH_MODE_STOP` is used here to avoid propagation of insets callback to footer subtree.
|
|
52
|
+
private val insetsAnimation =
|
|
53
|
+
object : WindowInsetsAnimationCompat.Callback(DISPATCH_MODE_STOP) {
|
|
54
|
+
override fun onStart(
|
|
55
|
+
animation: WindowInsetsAnimationCompat,
|
|
56
|
+
bounds: WindowInsetsAnimationCompat.BoundsCompat,
|
|
57
|
+
): WindowInsetsAnimationCompat.BoundsCompat {
|
|
58
|
+
isAnimationControlledByKeyboard = true
|
|
59
|
+
return super.onStart(animation, bounds)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
override fun onProgress(
|
|
63
|
+
insets: WindowInsetsCompat,
|
|
64
|
+
runningAnimations: MutableList<WindowInsetsAnimationCompat>,
|
|
65
|
+
): WindowInsetsCompat {
|
|
66
|
+
val imeBottomInset = insets.getInsets(WindowInsetsCompat.Type.ime()).bottom
|
|
67
|
+
val navigationBarBottomInset =
|
|
68
|
+
insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom
|
|
69
|
+
|
|
70
|
+
// **It looks like** when keyboard is presented its inset does include navigation bar
|
|
71
|
+
// bottom inset, while it is already accounted for somewhere (dunno where).
|
|
72
|
+
// That is why we subtract navigation bar bottom inset here.
|
|
73
|
+
//
|
|
74
|
+
// Situations where keyboard is not visible and navigation bar is present are handled
|
|
75
|
+
// directly in layout function by not allowing lastBottomInset to contribute value less
|
|
76
|
+
// than 0. Alternative would be write logic specific to keyboard animation direction (hide / show).
|
|
77
|
+
lastBottomInset = imeBottomInset - navigationBarBottomInset
|
|
78
|
+
layoutFooterOnYAxis(
|
|
79
|
+
lastContainerHeight,
|
|
80
|
+
reactHeight,
|
|
81
|
+
sheetTopWhileDragging(lastSlideOffset),
|
|
82
|
+
lastBottomInset,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
// Please note that we do *not* consume any insets here, so that we do not interfere with
|
|
86
|
+
// any other view.
|
|
87
|
+
return insets
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
override fun onEnd(animation: WindowInsetsAnimationCompat) {
|
|
91
|
+
isAnimationControlledByKeyboard = false
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
init {
|
|
96
|
+
val rootView =
|
|
97
|
+
checkNotNull(reactContext.currentActivity) {
|
|
98
|
+
"[RNScreens] Context detached from activity while creating ScreenFooter"
|
|
99
|
+
}.window.decorView
|
|
100
|
+
|
|
101
|
+
// Note that we do override insets animation on given view. I can see it interfering e.g.
|
|
102
|
+
// with reanimated keyboard or even other places in our code. Need to test this.
|
|
103
|
+
ViewCompat.setWindowInsetsAnimationCallback(rootView, insetsAnimation)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
private fun requireScreenParent(): Screen = requireNotNull(screenParent)
|
|
107
|
+
|
|
108
|
+
private fun requireSheetBehavior(): BottomSheetBehavior<Screen> = requireNotNull(sheetBehavior)
|
|
109
|
+
|
|
110
|
+
// React calls `layout` function to set view dimensions, thus this is our entry point for
|
|
111
|
+
// fixing layout up after Yoga repositions it.
|
|
112
|
+
override fun onLayout(
|
|
113
|
+
changed: Boolean,
|
|
114
|
+
left: Int,
|
|
115
|
+
top: Int,
|
|
116
|
+
right: Int,
|
|
117
|
+
bottom: Int,
|
|
118
|
+
) {
|
|
119
|
+
super.onLayout(changed, left, top, right, bottom)
|
|
120
|
+
if (!hasReceivedInitialLayoutFromParent) {
|
|
121
|
+
return
|
|
122
|
+
}
|
|
123
|
+
layoutFooterOnYAxis(
|
|
124
|
+
lastContainerHeight,
|
|
125
|
+
bottom - top,
|
|
126
|
+
sheetTopInStableState(requireSheetBehavior().state),
|
|
127
|
+
lastBottomInset,
|
|
128
|
+
)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
private var footerCallback =
|
|
132
|
+
object : BottomSheetCallback() {
|
|
133
|
+
override fun onStateChanged(
|
|
134
|
+
bottomSheet: View,
|
|
135
|
+
newState: Int,
|
|
136
|
+
) {
|
|
137
|
+
if (!SheetUtils.isStateStable(newState)) {
|
|
138
|
+
return
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
when (newState) {
|
|
142
|
+
STATE_COLLAPSED,
|
|
143
|
+
STATE_HALF_EXPANDED,
|
|
144
|
+
STATE_EXPANDED,
|
|
145
|
+
->
|
|
146
|
+
layoutFooterOnYAxis(
|
|
147
|
+
lastContainerHeight,
|
|
148
|
+
reactHeight,
|
|
149
|
+
sheetTopInStableState(newState),
|
|
150
|
+
lastBottomInset,
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
else -> {}
|
|
154
|
+
}
|
|
155
|
+
lastStableSheetState = newState
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
override fun onSlide(
|
|
159
|
+
bottomSheet: View,
|
|
160
|
+
slideOffset: Float,
|
|
161
|
+
) {
|
|
162
|
+
lastSlideOffset = max(slideOffset, 0.0f)
|
|
163
|
+
if (!isAnimationControlledByKeyboard) {
|
|
164
|
+
layoutFooterOnYAxis(
|
|
165
|
+
lastContainerHeight,
|
|
166
|
+
reactHeight,
|
|
167
|
+
sheetTopWhileDragging(lastSlideOffset),
|
|
168
|
+
lastBottomInset,
|
|
169
|
+
)
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Important to keep this method idempotent! We attempt to (un)register
|
|
175
|
+
// our callback in different places depending on whether the behavior is already created.
|
|
176
|
+
fun registerWithSheetBehavior(behavior: BottomSheetBehavior<Screen>) {
|
|
177
|
+
if (!isCallbackRegistered) {
|
|
178
|
+
behavior.addBottomSheetCallback(footerCallback)
|
|
179
|
+
isCallbackRegistered = true
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Important to keep this method idempotent! We attempt to (un)register
|
|
184
|
+
// our callback in different places depending on whether the behavior is already created.
|
|
185
|
+
fun unregisterWithSheetBehavior(behavior: BottomSheetBehavior<Screen>) {
|
|
186
|
+
if (isCallbackRegistered) {
|
|
187
|
+
behavior.removeBottomSheetCallback(footerCallback)
|
|
188
|
+
isCallbackRegistered = false
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
override fun onAttachedToWindow() {
|
|
193
|
+
super.onAttachedToWindow()
|
|
194
|
+
sheetBehavior?.let { registerWithSheetBehavior(it) }
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
override fun onDetachedFromWindow() {
|
|
198
|
+
super.onDetachedFromWindow()
|
|
199
|
+
sheetBehavior?.let { unregisterWithSheetBehavior(it) }
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Calculate position of sheet's top while it is in stable state given concrete sheet state.
|
|
204
|
+
*
|
|
205
|
+
* This method should not be used for sheet in unstable state.
|
|
206
|
+
*
|
|
207
|
+
* @param state sheet state as defined in [BottomSheetBehavior]
|
|
208
|
+
* @return position of sheet's top **relative to container**
|
|
209
|
+
*/
|
|
210
|
+
private fun sheetTopInStableState(state: Int): Int {
|
|
211
|
+
val behavior = requireSheetBehavior()
|
|
212
|
+
return when (state) {
|
|
213
|
+
STATE_COLLAPSED -> lastContainerHeight - behavior.peekHeight
|
|
214
|
+
STATE_HALF_EXPANDED -> (lastContainerHeight * (1 - behavior.halfExpandedRatio)).toInt()
|
|
215
|
+
STATE_EXPANDED -> behavior.expandedOffset
|
|
216
|
+
STATE_HIDDEN -> lastContainerHeight
|
|
217
|
+
else -> throw IllegalArgumentException("[RNScreens] use of stable-state method for unstable state")
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Calculate position of sheet's top while it is in dragging / settling state given concrete slide offset
|
|
223
|
+
* as reported by [BottomSheetCallback.onSlide].
|
|
224
|
+
*
|
|
225
|
+
* This method should not be used for sheet in stable state.
|
|
226
|
+
*
|
|
227
|
+
* Currently the implementation assumes that the Screen's (sheet's) container starts at y: 0
|
|
228
|
+
* in global coordinates. Then we can use simply sheet's top. If that is for some reason
|
|
229
|
+
* unavailable, then we fallback to interpolation basing on values provided by sheet behaviour.
|
|
230
|
+
*
|
|
231
|
+
* We don't want to primarily rely on interpolation, because due to division rounding errors the footer
|
|
232
|
+
* will "flicker" (jump up / down a single pixel).
|
|
233
|
+
*
|
|
234
|
+
* @param slideOffset sheet offset as reported by [BottomSheetCallback.onSlide]
|
|
235
|
+
* @return position of sheet's top **relative to container**
|
|
236
|
+
*/
|
|
237
|
+
private fun sheetTopWhileDragging(slideOffset: Float): Int =
|
|
238
|
+
screenParent?.top ?: MathUtils
|
|
239
|
+
.lerp(
|
|
240
|
+
sheetTopInStableState(STATE_COLLAPSED).toFloat(),
|
|
241
|
+
sheetTopInStableState(
|
|
242
|
+
STATE_EXPANDED,
|
|
243
|
+
).toFloat(),
|
|
244
|
+
slideOffset,
|
|
245
|
+
).toInt()
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Parent Screen will call this on it's layout. We need to be notified on any update to Screen's content
|
|
249
|
+
* or its container dimensions change. This is also our entrypoint to acquiring container height.
|
|
250
|
+
*/
|
|
251
|
+
fun onParentLayout(
|
|
252
|
+
changed: Boolean,
|
|
253
|
+
left: Int,
|
|
254
|
+
top: Int,
|
|
255
|
+
right: Int,
|
|
256
|
+
bottom: Int,
|
|
257
|
+
containerHeight: Int,
|
|
258
|
+
) {
|
|
259
|
+
lastContainerHeight = containerHeight
|
|
260
|
+
layoutFooterOnYAxis(
|
|
261
|
+
containerHeight,
|
|
262
|
+
reactHeight,
|
|
263
|
+
sheetTopInStableState(requireSheetBehavior().state),
|
|
264
|
+
)
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Layouts this component within parent screen. It takes care only of vertical axis, leaving
|
|
269
|
+
* horizontal axis solely for React to handle.
|
|
270
|
+
*
|
|
271
|
+
* This is a bit against Android rules, that parents should layout their children,
|
|
272
|
+
* however I wanted to keep this logic away from Screen component to avoid introducing
|
|
273
|
+
* complexity there and have footer logic as much separated as it is possible.
|
|
274
|
+
*
|
|
275
|
+
* Please note that React has no clue about updates enforced in below method.
|
|
276
|
+
*
|
|
277
|
+
* @param containerHeight this should be the height of the screen (sheet) container used
|
|
278
|
+
* to calculate sheet properties when configuring behavior (pixels)
|
|
279
|
+
* @param footerHeight summarized height of this component children (pixels)
|
|
280
|
+
* @param sheetTop current bottom sheet top (Screen top) **relative to container** (pixels)
|
|
281
|
+
* @param bottomInset current bottom inset, used to offset the footer by keyboard height (pixels)
|
|
282
|
+
*/
|
|
283
|
+
fun layoutFooterOnYAxis(
|
|
284
|
+
containerHeight: Int,
|
|
285
|
+
footerHeight: Int,
|
|
286
|
+
sheetTop: Int,
|
|
287
|
+
bottomInset: Int = 0,
|
|
288
|
+
) {
|
|
289
|
+
// max(bottomInset, 0) is just a hack to avoid double offset of navigation bar.
|
|
290
|
+
val newTop = containerHeight - footerHeight - sheetTop - max(bottomInset, 0)
|
|
291
|
+
val heightBeforeUpdate = reactHeight
|
|
292
|
+
this.top = max(newTop, 0)
|
|
293
|
+
this.bottom = this.top + heightBeforeUpdate
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
companion object {
|
|
297
|
+
const val TAG = "ScreenFooter"
|
|
298
|
+
}
|
|
299
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
package com.swmansion.rnscreens
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
4
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
5
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
6
|
+
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
7
|
+
import com.facebook.react.viewmanagers.RNSScreenFooterManagerDelegate
|
|
8
|
+
import com.facebook.react.viewmanagers.RNSScreenFooterManagerInterface
|
|
9
|
+
|
|
10
|
+
@ReactModule(name = ScreenFooterManager.REACT_CLASS)
|
|
11
|
+
class ScreenFooterManager :
|
|
12
|
+
ViewGroupManager<ScreenFooter>(),
|
|
13
|
+
RNSScreenFooterManagerInterface<ScreenFooter> {
|
|
14
|
+
private val delegate: ViewManagerDelegate<ScreenFooter> = RNSScreenFooterManagerDelegate(this)
|
|
15
|
+
|
|
16
|
+
override fun getName(): String = REACT_CLASS
|
|
17
|
+
|
|
18
|
+
override fun createViewInstance(context: ThemedReactContext) = ScreenFooter(context)
|
|
19
|
+
|
|
20
|
+
override fun getDelegate(): ViewManagerDelegate<ScreenFooter> = delegate
|
|
21
|
+
|
|
22
|
+
companion object {
|
|
23
|
+
const val REACT_CLASS = "RNSScreenFooter"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -15,6 +15,7 @@ import com.facebook.react.bridge.UiThreadUtil
|
|
|
15
15
|
import com.facebook.react.uimanager.UIManagerHelper
|
|
16
16
|
import com.facebook.react.uimanager.events.Event
|
|
17
17
|
import com.facebook.react.uimanager.events.EventDispatcher
|
|
18
|
+
import com.swmansion.rnscreens.bottomsheet.DimmingFragment
|
|
18
19
|
import com.swmansion.rnscreens.events.HeaderBackButtonClickedEvent
|
|
19
20
|
import com.swmansion.rnscreens.events.ScreenAppearEvent
|
|
20
21
|
import com.swmansion.rnscreens.events.ScreenDisappearEvent
|
|
@@ -22,12 +23,18 @@ import com.swmansion.rnscreens.events.ScreenDismissedEvent
|
|
|
22
23
|
import com.swmansion.rnscreens.events.ScreenTransitionProgressEvent
|
|
23
24
|
import com.swmansion.rnscreens.events.ScreenWillAppearEvent
|
|
24
25
|
import com.swmansion.rnscreens.events.ScreenWillDisappearEvent
|
|
26
|
+
import com.swmansion.rnscreens.ext.recycle
|
|
25
27
|
import kotlin.math.max
|
|
26
28
|
import kotlin.math.min
|
|
27
29
|
|
|
28
|
-
open class ScreenFragment :
|
|
30
|
+
open class ScreenFragment :
|
|
31
|
+
Fragment,
|
|
32
|
+
ScreenFragmentWrapper {
|
|
29
33
|
enum class ScreenLifecycleEvent {
|
|
30
|
-
|
|
34
|
+
DID_APPEAR,
|
|
35
|
+
WILL_APPEAR,
|
|
36
|
+
DID_DISAPPEAR,
|
|
37
|
+
WILL_DISAPPEAR,
|
|
31
38
|
}
|
|
32
39
|
|
|
33
40
|
override val fragment: Fragment
|
|
@@ -36,11 +43,14 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
|
|
|
36
43
|
// if we call empty constructor, there is no screen to be assigned so not sure why it is suggested
|
|
37
44
|
@Suppress("JoinDeclarationAndAssignment")
|
|
38
45
|
override lateinit var screen: Screen
|
|
39
|
-
|
|
46
|
+
|
|
47
|
+
override val childScreenContainers: MutableList<ScreenContainer> = ArrayList()
|
|
48
|
+
|
|
40
49
|
private var shouldUpdateOnResume = false
|
|
50
|
+
|
|
41
51
|
// if we don't set it, it will be 0.0f at the beginning so the progress will not be sent
|
|
42
52
|
// due to progress value being already 0.0f
|
|
43
|
-
private var
|
|
53
|
+
private var transitionProgress = -1f
|
|
44
54
|
|
|
45
55
|
// those 2 vars are needed since sometimes the events would be dispatched twice in child containers
|
|
46
56
|
// (should only happen if parent has `NONE` animation) and we don't need too complicated logic.
|
|
@@ -55,7 +65,7 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
|
|
|
55
65
|
|
|
56
66
|
constructor() {
|
|
57
67
|
throw IllegalStateException(
|
|
58
|
-
"Screen fragments should never be restored. Follow instructions from https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067 to properly configure your main activity."
|
|
68
|
+
"Screen fragments should never be restored. Follow instructions from https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067 to properly configure your main activity.",
|
|
59
69
|
)
|
|
60
70
|
}
|
|
61
71
|
|
|
@@ -75,14 +85,17 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
|
|
|
75
85
|
override fun onCreateView(
|
|
76
86
|
inflater: LayoutInflater,
|
|
77
87
|
container: ViewGroup?,
|
|
78
|
-
savedInstanceState: Bundle
|
|
88
|
+
savedInstanceState: Bundle?,
|
|
79
89
|
): View? {
|
|
80
|
-
screen.layoutParams =
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
90
|
+
screen.layoutParams =
|
|
91
|
+
FrameLayout.LayoutParams(
|
|
92
|
+
ViewGroup.LayoutParams.MATCH_PARENT,
|
|
93
|
+
ViewGroup.LayoutParams.MATCH_PARENT,
|
|
94
|
+
)
|
|
95
|
+
val wrapper =
|
|
96
|
+
context?.let { ScreensFrameLayout(it) }?.apply {
|
|
97
|
+
addView(screen.recycle())
|
|
98
|
+
}
|
|
86
99
|
return wrapper
|
|
87
100
|
}
|
|
88
101
|
|
|
@@ -152,57 +165,59 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
|
|
|
152
165
|
return null
|
|
153
166
|
}
|
|
154
167
|
|
|
155
|
-
override
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
ScreenLifecycleEvent.Disappear -> !canDispatchAppear
|
|
163
|
-
}
|
|
168
|
+
override fun canDispatchLifecycleEvent(event: ScreenLifecycleEvent): Boolean =
|
|
169
|
+
when (event) {
|
|
170
|
+
ScreenLifecycleEvent.WILL_APPEAR -> canDispatchWillAppear
|
|
171
|
+
ScreenLifecycleEvent.DID_APPEAR -> canDispatchAppear
|
|
172
|
+
ScreenLifecycleEvent.WILL_DISAPPEAR -> !canDispatchWillAppear
|
|
173
|
+
ScreenLifecycleEvent.DID_DISAPPEAR -> !canDispatchAppear
|
|
174
|
+
}
|
|
164
175
|
|
|
165
176
|
override fun updateLastEventDispatched(event: ScreenLifecycleEvent) {
|
|
166
177
|
when (event) {
|
|
167
|
-
ScreenLifecycleEvent.
|
|
168
|
-
ScreenLifecycleEvent.
|
|
169
|
-
ScreenLifecycleEvent.
|
|
170
|
-
ScreenLifecycleEvent.
|
|
178
|
+
ScreenLifecycleEvent.WILL_APPEAR -> canDispatchWillAppear = false
|
|
179
|
+
ScreenLifecycleEvent.DID_APPEAR -> canDispatchAppear = false
|
|
180
|
+
ScreenLifecycleEvent.WILL_DISAPPEAR -> canDispatchWillAppear = true
|
|
181
|
+
ScreenLifecycleEvent.DID_DISAPPEAR -> canDispatchAppear = true
|
|
171
182
|
}
|
|
172
183
|
}
|
|
173
184
|
|
|
174
185
|
private fun dispatchOnWillAppear() {
|
|
175
|
-
dispatchLifecycleEvent(ScreenLifecycleEvent.
|
|
186
|
+
dispatchLifecycleEvent(ScreenLifecycleEvent.WILL_APPEAR, this)
|
|
176
187
|
dispatchTransitionProgressEvent(0.0f, false)
|
|
177
188
|
}
|
|
178
189
|
|
|
179
190
|
private fun dispatchOnAppear() {
|
|
180
|
-
dispatchLifecycleEvent(ScreenLifecycleEvent.
|
|
191
|
+
dispatchLifecycleEvent(ScreenLifecycleEvent.DID_APPEAR, this)
|
|
181
192
|
dispatchTransitionProgressEvent(1.0f, false)
|
|
182
193
|
}
|
|
183
194
|
|
|
184
195
|
private fun dispatchOnWillDisappear() {
|
|
185
|
-
dispatchLifecycleEvent(ScreenLifecycleEvent.
|
|
196
|
+
dispatchLifecycleEvent(ScreenLifecycleEvent.WILL_DISAPPEAR, this)
|
|
186
197
|
dispatchTransitionProgressEvent(0.0f, true)
|
|
187
198
|
}
|
|
188
199
|
|
|
189
200
|
private fun dispatchOnDisappear() {
|
|
190
|
-
dispatchLifecycleEvent(ScreenLifecycleEvent.
|
|
201
|
+
dispatchLifecycleEvent(ScreenLifecycleEvent.DID_DISAPPEAR, this)
|
|
191
202
|
dispatchTransitionProgressEvent(1.0f, true)
|
|
192
203
|
}
|
|
193
204
|
|
|
194
|
-
override fun dispatchLifecycleEvent(
|
|
205
|
+
override fun dispatchLifecycleEvent(
|
|
206
|
+
event: ScreenLifecycleEvent,
|
|
207
|
+
fragmentWrapper: ScreenFragmentWrapper,
|
|
208
|
+
) {
|
|
195
209
|
val fragment = fragmentWrapper.fragment
|
|
196
210
|
if (fragment is ScreenStackFragment && fragment.canDispatchLifecycleEvent(event)) {
|
|
197
211
|
fragment.screen.let {
|
|
198
212
|
fragmentWrapper.updateLastEventDispatched(event)
|
|
199
213
|
val surfaceId = UIManagerHelper.getSurfaceId(it)
|
|
200
|
-
val lifecycleEvent: Event<*> =
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
214
|
+
val lifecycleEvent: Event<*> =
|
|
215
|
+
when (event) {
|
|
216
|
+
ScreenLifecycleEvent.WILL_APPEAR -> ScreenWillAppearEvent(surfaceId, it.id)
|
|
217
|
+
ScreenLifecycleEvent.DID_APPEAR -> ScreenAppearEvent(surfaceId, it.id)
|
|
218
|
+
ScreenLifecycleEvent.WILL_DISAPPEAR -> ScreenWillDisappearEvent(surfaceId, it.id)
|
|
219
|
+
ScreenLifecycleEvent.DID_DISAPPEAR -> ScreenDisappearEvent(surfaceId, it.id)
|
|
220
|
+
}
|
|
206
221
|
val screenContext = screen.context as ReactContext
|
|
207
222
|
val eventDispatcher: EventDispatcher? =
|
|
208
223
|
UIManagerHelper.getEventDispatcherForReactTag(screenContext, screen.id)
|
|
@@ -213,7 +228,7 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
|
|
|
213
228
|
}
|
|
214
229
|
|
|
215
230
|
override fun dispatchLifecycleEventInChildContainers(event: ScreenLifecycleEvent) {
|
|
216
|
-
|
|
231
|
+
childScreenContainers.filter { it.screenCount > 0 }.forEach {
|
|
217
232
|
it.topScreen?.fragmentWrapper?.let { fragment -> dispatchLifecycleEvent(event, fragment) }
|
|
218
233
|
}
|
|
219
234
|
}
|
|
@@ -226,16 +241,14 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
|
|
|
226
241
|
?.dispatchEvent(HeaderBackButtonClickedEvent(surfaceId, screen.id))
|
|
227
242
|
}
|
|
228
243
|
|
|
229
|
-
override fun dispatchTransitionProgressEvent(
|
|
244
|
+
override fun dispatchTransitionProgressEvent(
|
|
245
|
+
alpha: Float,
|
|
246
|
+
closing: Boolean,
|
|
247
|
+
) {
|
|
230
248
|
if (this is ScreenStackFragment) {
|
|
231
|
-
if (
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
- progress is 0 -> key 1
|
|
235
|
-
- progress is 1 -> key 2
|
|
236
|
-
- progress is between 0 and 1 -> key 3
|
|
237
|
-
*/
|
|
238
|
-
val coalescingKey = (if (mProgress == 0.0f) 1 else if (mProgress == 1.0f) 2 else 3).toShort()
|
|
249
|
+
if (transitionProgress != alpha) {
|
|
250
|
+
transitionProgress = max(0.0f, min(1.0f, alpha))
|
|
251
|
+
val coalescingKey = getCoalescingKey(transitionProgress)
|
|
239
252
|
val container: ScreenContainer? = screen.container
|
|
240
253
|
val goingForward = if (container is ScreenStack) container.goingForward else false
|
|
241
254
|
val screenContext = screen.context as ReactContext
|
|
@@ -244,19 +257,23 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
|
|
|
244
257
|
?.dispatchEvent(
|
|
245
258
|
ScreenTransitionProgressEvent(
|
|
246
259
|
UIManagerHelper.getSurfaceId(screenContext),
|
|
247
|
-
screen.id,
|
|
248
|
-
|
|
260
|
+
screen.id,
|
|
261
|
+
transitionProgress,
|
|
262
|
+
closing,
|
|
263
|
+
goingForward,
|
|
264
|
+
coalescingKey,
|
|
265
|
+
),
|
|
249
266
|
)
|
|
250
267
|
}
|
|
251
268
|
}
|
|
252
269
|
}
|
|
253
270
|
|
|
254
271
|
override fun addChildScreenContainer(container: ScreenContainer) {
|
|
255
|
-
|
|
272
|
+
childScreenContainers.add(container)
|
|
256
273
|
}
|
|
257
274
|
|
|
258
275
|
override fun removeChildScreenContainer(container: ScreenContainer) {
|
|
259
|
-
|
|
276
|
+
childScreenContainers.remove(container)
|
|
260
277
|
}
|
|
261
278
|
|
|
262
279
|
override fun onViewAnimationStart() {
|
|
@@ -273,7 +290,12 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
|
|
|
273
290
|
// since we subscribe to parent's animation start/end and dispatch events in child from there
|
|
274
291
|
// check for `isTransitioning` should be enough since the child's animation should take only
|
|
275
292
|
// 20ms due to always being `StackAnimation.NONE` when nested stack being pushed
|
|
276
|
-
val parent =
|
|
293
|
+
val parent =
|
|
294
|
+
if (parentFragment is DimmingFragment) {
|
|
295
|
+
parentFragment?.parentFragment
|
|
296
|
+
} else {
|
|
297
|
+
parentFragment
|
|
298
|
+
}
|
|
277
299
|
if (parent == null || (parent is ScreenFragment && !parent.isTransitioning)) {
|
|
278
300
|
// onViewAnimationStart/End is triggered from View#onAnimationStart/End method of the fragment's root
|
|
279
301
|
// view. We override an appropriate method of the StackFragment's
|
|
@@ -297,7 +319,7 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
|
|
|
297
319
|
override fun onDestroy() {
|
|
298
320
|
super.onDestroy()
|
|
299
321
|
val container = screen.container
|
|
300
|
-
if (container == null || !container.hasScreen(this)) {
|
|
322
|
+
if (container == null || !container.hasScreen(this.screen.fragmentWrapper)) {
|
|
301
323
|
// we only send dismissed even when the screen has been removed from its container
|
|
302
324
|
val screenContext = screen.context
|
|
303
325
|
if (screenContext is ReactContext) {
|
|
@@ -307,25 +329,27 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
|
|
|
307
329
|
?.dispatchEvent(ScreenDismissedEvent(surfaceId, screen.id))
|
|
308
330
|
}
|
|
309
331
|
}
|
|
310
|
-
|
|
332
|
+
childScreenContainers.clear()
|
|
311
333
|
}
|
|
312
334
|
|
|
313
335
|
companion object {
|
|
314
|
-
|
|
315
|
-
protected fun recycleView(view: View): View {
|
|
316
|
-
// screen fragments reuse view instances instead of creating new ones. In order to reuse a given
|
|
317
|
-
// view it needs to be detached from the view hierarchy to allow the fragment to attach it back.
|
|
318
|
-
val parent = view.parent
|
|
319
|
-
if (parent != null) {
|
|
320
|
-
(parent as ViewGroup).endViewTransition(view)
|
|
321
|
-
parent.removeView(view)
|
|
322
|
-
}
|
|
336
|
+
const val TAG = "ScreenFragment"
|
|
323
337
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
338
|
+
fun getCoalescingKey(progress: Float): Short {
|
|
339
|
+
/* We want value of 0 and 1 to be always dispatched so we base coalescing key on the progress:
|
|
340
|
+
- progress is 0 -> key 1
|
|
341
|
+
- progress is 1 -> key 2
|
|
342
|
+
- progress is between 0 and 1 -> key 3
|
|
343
|
+
*/
|
|
344
|
+
return (
|
|
345
|
+
if (progress == 0.0f) {
|
|
346
|
+
1
|
|
347
|
+
} else if (progress == 1.0f) {
|
|
348
|
+
2
|
|
349
|
+
} else {
|
|
350
|
+
3
|
|
351
|
+
}
|
|
352
|
+
).toShort()
|
|
329
353
|
}
|
|
330
354
|
}
|
|
331
355
|
}
|
|
@@ -3,20 +3,31 @@ package com.swmansion.rnscreens
|
|
|
3
3
|
import android.app.Activity
|
|
4
4
|
import com.facebook.react.bridge.ReactContext
|
|
5
5
|
|
|
6
|
-
interface ScreenFragmentWrapper :
|
|
6
|
+
interface ScreenFragmentWrapper :
|
|
7
|
+
FragmentHolder,
|
|
8
|
+
ScreenEventDispatcher {
|
|
7
9
|
var screen: Screen
|
|
8
10
|
|
|
9
11
|
// Communication with container
|
|
10
12
|
val childScreenContainers: List<ScreenContainer>
|
|
13
|
+
|
|
11
14
|
fun addChildScreenContainer(container: ScreenContainer)
|
|
15
|
+
|
|
12
16
|
fun removeChildScreenContainer(container: ScreenContainer)
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Container that this fragment belongs to calls it to notify the fragment,
|
|
20
|
+
* that the container has updated.
|
|
21
|
+
*/
|
|
13
22
|
fun onContainerUpdate()
|
|
14
23
|
|
|
15
24
|
// Animation phase callbacks
|
|
16
25
|
fun onViewAnimationStart()
|
|
26
|
+
|
|
17
27
|
fun onViewAnimationEnd()
|
|
18
28
|
|
|
19
29
|
// Helpers
|
|
20
30
|
fun tryGetActivity(): Activity?
|
|
31
|
+
|
|
21
32
|
fun tryGetContext(): ReactContext?
|
|
22
33
|
}
|