@amazon-devices/react-native-screens 2.0.1758683737
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/LICENSE +7 -0
- package/README.md +223 -0
- package/RNScreens.podspec +53 -0
- package/SystemBundles/8f5a820b958535e533acb38dbc0c72c1837721b9db075f4a1740e42b9fee3910.bundle +33668 -0
- package/SystemBundles/8f5a820b958535e533acb38dbc0c72c1837721b9db075f4a1740e42b9fee3910.map +1 -0
- package/SystemModules/amzn__react-native-screens.modules.txt +101 -0
- package/SystemModules/amzn__react-native-screens.private.modules.txt +244 -0
- package/SystemModules/keplerscript-system-bundle-config.json +7 -0
- package/THIRD_PARTY_NOTICES.txt +707 -0
- package/android/build.gradle +133 -0
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +49 -0
- package/android/src/main/AndroidManifest.xml +5 -0
- package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +77 -0
- package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +29 -0
- package/android/src/main/java/com/swmansion/rnscreens/FragmentHolder.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +21 -0
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +289 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +372 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +40 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenEventDispatcher.kt +21 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +331 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +336 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +282 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +15 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +398 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +204 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +38 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +41 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +75 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +186 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +296 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +19 -0
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +133 -0
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +178 -0
- package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +67 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +26 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAppearEvent.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDisappearEvent.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDismissedEvent.kt +20 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +32 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillAppearEvent.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillDisappearEvent.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +28 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +24 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/DeviceUtils.kt +12 -0
- package/android/src/main/jni/CMakeLists.txt +72 -0
- package/android/src/main/jni/rnscreens.cpp +16 -0
- package/android/src/main/jni/rnscreens.h +28 -0
- package/android/src/main/res/base/anim/rns_default_enter_in.xml +18 -0
- package/android/src/main/res/base/anim/rns_default_enter_out.xml +19 -0
- package/android/src/main/res/base/anim/rns_default_exit_in.xml +17 -0
- package/android/src/main/res/base/anim/rns_default_exit_out.xml +18 -0
- package/android/src/main/res/base/anim/rns_fade_from_bottom.xml +14 -0
- package/android/src/main/res/base/anim/rns_fade_in.xml +7 -0
- package/android/src/main/res/base/anim/rns_fade_out.xml +7 -0
- package/android/src/main/res/base/anim/rns_fade_to_bottom.xml +15 -0
- package/android/src/main/res/base/anim/rns_no_animation_20.xml +6 -0
- package/android/src/main/res/base/anim/rns_no_animation_250.xml +7 -0
- package/android/src/main/res/base/anim/rns_no_animation_350.xml +6 -0
- package/android/src/main/res/base/anim/rns_no_animation_medium.xml +7 -0
- package/android/src/main/res/base/anim/rns_slide_in_from_bottom.xml +7 -0
- package/android/src/main/res/base/anim/rns_slide_in_from_left.xml +5 -0
- package/android/src/main/res/base/anim/rns_slide_in_from_right.xml +5 -0
- package/android/src/main/res/base/anim/rns_slide_out_to_bottom.xml +7 -0
- package/android/src/main/res/base/anim/rns_slide_out_to_left.xml +5 -0
- package/android/src/main/res/base/anim/rns_slide_out_to_right.xml +5 -0
- package/android/src/main/res/base/anim/rns_standard_accelerate_interpolator.xml +6 -0
- package/android/src/main/res/v33/anim-v33/rns_default_enter_in.xml +38 -0
- package/android/src/main/res/v33/anim-v33/rns_default_enter_out.xml +38 -0
- package/android/src/main/res/v33/anim-v33/rns_default_exit_in.xml +38 -0
- package/android/src/main/res/v33/anim-v33/rns_default_exit_out.xml +38 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +111 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +44 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +107 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +42 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerDelegate.java +31 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerInterface.java +17 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerInterface.java +16 -0
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +10 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +41 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +9 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +30 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +14 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +45 -0
- package/ios/RCTImageComponentView+RNSScreenStackHeaderConfig.h +11 -0
- package/ios/RCTImageComponentView+RNSScreenStackHeaderConfig.mm +14 -0
- package/ios/RNSConvert.h +36 -0
- package/ios/RNSConvert.mm +154 -0
- package/ios/RNSEnums.h +71 -0
- package/ios/RNSFullWindowOverlay.h +34 -0
- package/ios/RNSFullWindowOverlay.mm +241 -0
- package/ios/RNSScreen.h +144 -0
- package/ios/RNSScreen.mm +1599 -0
- package/ios/RNSScreenContainer.h +45 -0
- package/ios/RNSScreenContainer.mm +343 -0
- package/ios/RNSScreenNavigationContainer.h +16 -0
- package/ios/RNSScreenNavigationContainer.mm +66 -0
- package/ios/RNSScreenStack.h +37 -0
- package/ios/RNSScreenStack.mm +1111 -0
- package/ios/RNSScreenStackAnimator.h +8 -0
- package/ios/RNSScreenStackAnimator.mm +320 -0
- package/ios/RNSScreenStackHeaderConfig.h +74 -0
- package/ios/RNSScreenStackHeaderConfig.mm +967 -0
- package/ios/RNSScreenStackHeaderSubview.h +44 -0
- package/ios/RNSScreenStackHeaderSubview.mm +147 -0
- package/ios/RNSScreenWindowTraits.h +26 -0
- package/ios/RNSScreenWindowTraits.mm +266 -0
- package/ios/RNSSearchBar.h +43 -0
- package/ios/RNSSearchBar.mm +465 -0
- package/ios/RNScreens.xcodeproj/project.pbxproj +461 -0
- package/ios/UIViewController+RNScreens.h +9 -0
- package/ios/UIViewController+RNScreens.mm +78 -0
- package/ios/UIWindow+RNScreens.h +9 -0
- package/ios/UIWindow+RNScreens.mm +17 -0
- package/ios/events/RNSHeaderHeightChangeEvent.h +8 -0
- package/ios/events/RNSHeaderHeightChangeEvent.mm +44 -0
- package/ios/events/RNSScreenViewEvent.h +12 -0
- package/ios/events/RNSScreenViewEvent.mm +59 -0
- package/ios/utils/RNSUIBarButtonItem.h +5 -0
- package/ios/utils/RNSUIBarButtonItem.mm +22 -0
- package/kepler-compatibility.json +8 -0
- package/kepler-transformed-package-info.json +3 -0
- package/lib/commonjs/TransitionProgressContext.js +11 -0
- package/lib/commonjs/TransitionProgressContext.js.map +1 -0
- package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js +11 -0
- package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenContainerNativeComponent.js +33 -0
- package/lib/commonjs/fabric/ScreenContainerNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenNativeComponent.js +70 -0
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js +11 -0
- package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js +31 -0
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js +12 -0
- package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenStackNativeComponent.js +35 -0
- package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/SearchBarNativeComponent.js +19 -0
- package/lib/commonjs/fabric/SearchBarNativeComponent.js.map +1 -0
- package/lib/commonjs/index.js +147 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/index.native.js +407 -0
- package/lib/commonjs/index.native.js.map +1 -0
- package/lib/commonjs/native-stack/index.js +49 -0
- package/lib/commonjs/native-stack/index.js.map +1 -0
- package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js +75 -0
- package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js.map +1 -0
- package/lib/commonjs/native-stack/types.js +6 -0
- package/lib/commonjs/native-stack/types.js.map +1 -0
- package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js +12 -0
- package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -0
- package/lib/commonjs/native-stack/utils/HeaderHeightContext.js +12 -0
- package/lib/commonjs/native-stack/utils/HeaderHeightContext.js.map +1 -0
- package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js +75 -0
- package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js.map +1 -0
- package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js +35 -0
- package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js.map +1 -0
- package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js +19 -0
- package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -0
- package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +54 -0
- package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -0
- package/lib/commonjs/native-stack/utils/useHeaderHeight.js +19 -0
- package/lib/commonjs/native-stack/utils/useHeaderHeight.js.map +1 -0
- package/lib/commonjs/native-stack/views/FontProcessor.js +21 -0
- package/lib/commonjs/native-stack/views/FontProcessor.js.map +1 -0
- package/lib/commonjs/native-stack/views/HeaderConfig.js +141 -0
- package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -0
- package/lib/commonjs/native-stack/views/NativeStackView.js +354 -0
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -0
- package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js +12 -0
- package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js.map +1 -0
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +101 -0
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
- package/lib/commonjs/reanimated/ReanimatedScreen.js +22 -0
- package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -0
- package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +47 -0
- package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -0
- package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js +12 -0
- package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js.map +1 -0
- package/lib/commonjs/reanimated/index.js +28 -0
- package/lib/commonjs/reanimated/index.js.map +1 -0
- package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js +19 -0
- package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js.map +1 -0
- package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js +19 -0
- package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js.map +1 -0
- package/lib/commonjs/types.js +6 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/useTransitionProgress.js +19 -0
- package/lib/commonjs/useTransitionProgress.js.map +1 -0
- package/lib/commonjs/utils.js +21 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/module/TransitionProgressContext.js +3 -0
- package/lib/module/TransitionProgressContext.js.map +1 -0
- package/lib/module/fabric/FullWindowOverlayNativeComponent.js +4 -0
- package/lib/module/fabric/FullWindowOverlayNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenContainerNativeComponent.js +25 -0
- package/lib/module/fabric/ScreenContainerNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenNativeComponent.js +63 -0
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js +4 -0
- package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js +23 -0
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js +7 -0
- package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenStackNativeComponent.js +28 -0
- package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -0
- package/lib/module/fabric/SearchBarNativeComponent.js +10 -0
- package/lib/module/fabric/SearchBarNativeComponent.js.map +1 -0
- package/lib/module/index.js +67 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/index.native.js +410 -0
- package/lib/module/index.native.js.map +1 -0
- package/lib/module/native-stack/index.js +22 -0
- package/lib/module/native-stack/index.js.map +1 -0
- package/lib/module/native-stack/navigators/createNativeStackNavigator.js +72 -0
- package/lib/module/native-stack/navigators/createNativeStackNavigator.js.map +1 -0
- package/lib/module/native-stack/types.js +2 -0
- package/lib/module/native-stack/types.js.map +1 -0
- package/lib/module/native-stack/utils/AnimatedHeaderHeightContext.js +4 -0
- package/lib/module/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -0
- package/lib/module/native-stack/utils/HeaderHeightContext.js +4 -0
- package/lib/module/native-stack/utils/HeaderHeightContext.js.map +1 -0
- package/lib/module/native-stack/utils/SafeAreaProviderCompat.js +68 -0
- package/lib/module/native-stack/utils/SafeAreaProviderCompat.js.map +1 -0
- package/lib/module/native-stack/utils/getDefaultHeaderHeight.js +29 -0
- package/lib/module/native-stack/utils/getDefaultHeaderHeight.js.map +1 -0
- package/lib/module/native-stack/utils/useAnimatedHeaderHeight.js +10 -0
- package/lib/module/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -0
- package/lib/module/native-stack/utils/useBackPressSubscription.js +47 -0
- package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -0
- package/lib/module/native-stack/utils/useHeaderHeight.js +10 -0
- package/lib/module/native-stack/utils/useHeaderHeight.js.map +1 -0
- package/lib/module/native-stack/views/FontProcessor.js +13 -0
- package/lib/module/native-stack/views/FontProcessor.js.map +1 -0
- package/lib/module/native-stack/views/HeaderConfig.js +132 -0
- package/lib/module/native-stack/views/HeaderConfig.js.map +1 -0
- package/lib/module/native-stack/views/NativeStackView.js +355 -0
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -0
- package/lib/module/reanimated/ReanimatedHeaderHeightContext.js +5 -0
- package/lib/module/reanimated/ReanimatedHeaderHeightContext.js.map +1 -0
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js +97 -0
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
- package/lib/module/reanimated/ReanimatedScreen.js +17 -0
- package/lib/module/reanimated/ReanimatedScreen.js.map +1 -0
- package/lib/module/reanimated/ReanimatedScreenProvider.js +40 -0
- package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -0
- package/lib/module/reanimated/ReanimatedTransitionProgressContext.js +5 -0
- package/lib/module/reanimated/ReanimatedTransitionProgressContext.js.map +1 -0
- package/lib/module/reanimated/index.js +4 -0
- package/lib/module/reanimated/index.js.map +1 -0
- package/lib/module/reanimated/useReanimatedHeaderHeight.js +10 -0
- package/lib/module/reanimated/useReanimatedHeaderHeight.js.map +1 -0
- package/lib/module/reanimated/useReanimatedTransitionProgress.js +10 -0
- package/lib/module/reanimated/useReanimatedTransitionProgress.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/useTransitionProgress.js +10 -0
- package/lib/module/useTransitionProgress.js.map +1 -0
- package/lib/module/utils.js +14 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/typescript/TransitionProgressContext.d.ts +9 -0
- package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts +7 -0
- package/lib/typescript/fabric/ScreenContainerNativeComponent.d.ts +5 -0
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts +66 -0
- package/lib/typescript/fabric/ScreenNavigationContainerNativeComponent.d.ts +7 -0
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +33 -0
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +10 -0
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts +8 -0
- package/lib/typescript/fabric/SearchBarNativeComponent.d.ts +49 -0
- package/lib/typescript/index.d.ts +33 -0
- package/lib/typescript/index.native.d.ts +2 -0
- package/lib/typescript/native-stack/index.d.ts +19 -0
- package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts +6 -0
- package/lib/typescript/native-stack/types.d.ts +438 -0
- package/lib/typescript/native-stack/utils/AnimatedHeaderHeightContext.d.ts +4 -0
- package/lib/typescript/native-stack/utils/HeaderHeightContext.d.ts +3 -0
- package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts +11 -0
- package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts +7 -0
- package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts +1 -0
- package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts +16 -0
- package/lib/typescript/native-stack/utils/useHeaderHeight.d.ts +1 -0
- package/lib/typescript/native-stack/views/FontProcessor.d.ts +1 -0
- package/lib/typescript/native-stack/views/HeaderConfig.d.ts +8 -0
- package/lib/typescript/native-stack/views/NativeStackView.d.ts +10 -0
- package/lib/typescript/reanimated/ReanimatedHeaderHeightContext.d.ts +4 -0
- package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +5 -0
- package/lib/typescript/reanimated/ReanimatedScreen.d.ts +5 -0
- package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts +2 -0
- package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts +9 -0
- package/lib/typescript/reanimated/index.d.ts +3 -0
- package/lib/typescript/reanimated/useReanimatedHeaderHeight.d.ts +3 -0
- package/lib/typescript/reanimated/useReanimatedTransitionProgress.d.ts +11 -0
- package/lib/typescript/types.d.ts +612 -0
- package/lib/typescript/useTransitionProgress.d.ts +5 -0
- package/lib/typescript/utils.d.ts +3 -0
- package/native-stack/README.md +814 -0
- package/native-stack/package.json +6 -0
- package/package.json +1 -0
- package/react-native.config.js +42 -0
- package/reanimated/package.json +6 -0
- package/src/TransitionProgressContext.tsx +12 -0
- package/src/fabric/FullWindowOverlayNativeComponent.ts +7 -0
- package/src/fabric/ScreenContainerNativeComponent.ts +28 -0
- package/src/fabric/ScreenNativeComponent.ts +158 -0
- package/src/fabric/ScreenNavigationContainerNativeComponent.ts +10 -0
- package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +61 -0
- package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +22 -0
- package/src/fabric/ScreenStackNativeComponent.ts +33 -0
- package/src/fabric/SearchBarNativeComponent.ts +79 -0
- package/src/index.native.tsx +599 -0
- package/src/index.tsx +119 -0
- package/src/native-stack/index.tsx +27 -0
- package/src/native-stack/navigators/createNativeStackNavigator.tsx +107 -0
- package/src/native-stack/types.tsx +486 -0
- package/src/native-stack/utils/AnimatedHeaderHeightContext.tsx +8 -0
- package/src/native-stack/utils/HeaderHeightContext.tsx +5 -0
- package/src/native-stack/utils/SafeAreaProviderCompat.tsx +78 -0
- package/src/native-stack/utils/getDefaultHeaderHeight.tsx +41 -0
- package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +15 -0
- package/src/native-stack/utils/useBackPressSubscription.tsx +66 -0
- package/src/native-stack/utils/useHeaderHeight.tsx +15 -0
- package/src/native-stack/views/FontProcessor.tsx +14 -0
- package/src/native-stack/views/HeaderConfig.tsx +187 -0
- package/src/native-stack/views/NativeStackView.tsx +466 -0
- package/src/reanimated/ReanimatedHeaderHeightContext.tsx +7 -0
- package/src/reanimated/ReanimatedNativeStackScreen.tsx +130 -0
- package/src/reanimated/ReanimatedScreen.tsx +25 -0
- package/src/reanimated/ReanimatedScreenProvider.tsx +42 -0
- package/src/reanimated/ReanimatedTransitionProgressContext.tsx +13 -0
- package/src/reanimated/index.tsx +3 -0
- package/src/reanimated/useReanimatedHeaderHeight.tsx +14 -0
- package/src/reanimated/useReanimatedTransitionProgress.tsx +14 -0
- package/src/types.tsx +699 -0
- package/src/useTransitionProgress.tsx +15 -0
- package/src/utils.ts +18 -0
- package/windows/README.md +25 -0
- package/windows/RNScreens/PropertySheet.props +16 -0
- package/windows/RNScreens/RNScreens.cpp +66 -0
- package/windows/RNScreens/RNScreens.def +3 -0
- package/windows/RNScreens/RNScreens.h +41 -0
- package/windows/RNScreens/RNScreens.idl +8 -0
- package/windows/RNScreens/RNScreens.vcxproj +187 -0
- package/windows/RNScreens/RNScreens.vcxproj.filters +52 -0
- package/windows/RNScreens/ReactPackageProvider.cpp +30 -0
- package/windows/RNScreens/ReactPackageProvider.h +17 -0
- package/windows/RNScreens/ReactPackageProvider.idl +9 -0
- package/windows/RNScreens/Screen.cpp +122 -0
- package/windows/RNScreens/Screen.h +64 -0
- package/windows/RNScreens/ScreenContainer.cpp +49 -0
- package/windows/RNScreens/ScreenContainer.h +23 -0
- package/windows/RNScreens/ScreenContainerViewManager.cpp +133 -0
- package/windows/RNScreens/ScreenContainerViewManager.h +78 -0
- package/windows/RNScreens/ScreenStack.cpp +65 -0
- package/windows/RNScreens/ScreenStack.h +23 -0
- package/windows/RNScreens/ScreenStackHeaderConfig.cpp +19 -0
- package/windows/RNScreens/ScreenStackHeaderConfig.h +14 -0
- package/windows/RNScreens/ScreenStackHeaderConfigViewManager.cpp +89 -0
- package/windows/RNScreens/ScreenStackHeaderConfigViewManager.h +62 -0
- package/windows/RNScreens/ScreenStackViewManager.cpp +132 -0
- package/windows/RNScreens/ScreenStackViewManager.h +78 -0
- package/windows/RNScreens/ScreenViewManager.cpp +154 -0
- package/windows/RNScreens/ScreenViewManager.h +78 -0
- package/windows/RNScreens/packages.config +4 -0
- package/windows/RNScreens/pch.cpp +1 -0
- package/windows/RNScreens/pch.h +9 -0
- package/windows/RNScreens62.sln +254 -0
- package/windows/RNScreens63.sln +225 -0
- package/windows/RNScreens65.sln +144 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
package com.swmansion.rnscreens
|
|
2
|
+
|
|
3
|
+
import android.util.Log
|
|
4
|
+
import android.view.View
|
|
5
|
+
import com.facebook.react.bridge.JSApplicationCausedNativeException
|
|
6
|
+
import com.facebook.react.common.MapBuilder
|
|
7
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
8
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
9
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
10
|
+
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
11
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
12
|
+
import com.facebook.react.viewmanagers.RNSScreenStackHeaderConfigManagerDelegate
|
|
13
|
+
import com.facebook.react.viewmanagers.RNSScreenStackHeaderConfigManagerInterface
|
|
14
|
+
import com.swmansion.rnscreens.events.HeaderAttachedEvent
|
|
15
|
+
import com.swmansion.rnscreens.events.HeaderDetachedEvent
|
|
16
|
+
import javax.annotation.Nonnull
|
|
17
|
+
|
|
18
|
+
@ReactModule(name = ScreenStackHeaderConfigViewManager.REACT_CLASS)
|
|
19
|
+
class ScreenStackHeaderConfigViewManager : ViewGroupManager<ScreenStackHeaderConfig>(), RNSScreenStackHeaderConfigManagerInterface<ScreenStackHeaderConfig> {
|
|
20
|
+
private val mDelegate: ViewManagerDelegate<ScreenStackHeaderConfig>
|
|
21
|
+
|
|
22
|
+
init {
|
|
23
|
+
mDelegate = RNSScreenStackHeaderConfigManagerDelegate<ScreenStackHeaderConfig, ScreenStackHeaderConfigViewManager>(this)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
override fun getName(): String = REACT_CLASS
|
|
27
|
+
|
|
28
|
+
override fun createViewInstance(reactContext: ThemedReactContext) = ScreenStackHeaderConfig(reactContext)
|
|
29
|
+
|
|
30
|
+
override fun addView(parent: ScreenStackHeaderConfig, child: View, index: Int) {
|
|
31
|
+
if (child !is ScreenStackHeaderSubview) {
|
|
32
|
+
throw JSApplicationCausedNativeException(
|
|
33
|
+
"Config children should be of type " + ScreenStackHeaderSubviewManager.REACT_CLASS
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
parent.addConfigSubview(child, index)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
override fun onDropViewInstance(@Nonnull view: ScreenStackHeaderConfig) {
|
|
40
|
+
view.destroy()
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
override fun removeAllViews(parent: ScreenStackHeaderConfig) {
|
|
44
|
+
parent.removeAllConfigSubviews()
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
override fun removeViewAt(parent: ScreenStackHeaderConfig, index: Int) {
|
|
48
|
+
parent.removeConfigSubview(index)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
override fun getChildCount(parent: ScreenStackHeaderConfig): Int = parent.configSubviewsCount
|
|
52
|
+
|
|
53
|
+
override fun getChildAt(parent: ScreenStackHeaderConfig, index: Int): View = parent.getConfigSubview(index)
|
|
54
|
+
|
|
55
|
+
override fun needsCustomLayoutForChildren() = true
|
|
56
|
+
|
|
57
|
+
override fun onAfterUpdateTransaction(parent: ScreenStackHeaderConfig) {
|
|
58
|
+
super.onAfterUpdateTransaction(parent)
|
|
59
|
+
parent.onUpdate()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@ReactProp(name = "title")
|
|
63
|
+
override fun setTitle(config: ScreenStackHeaderConfig, title: String?) {
|
|
64
|
+
config.setTitle(title)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@ReactProp(name = "titleFontFamily")
|
|
68
|
+
override fun setTitleFontFamily(config: ScreenStackHeaderConfig, titleFontFamily: String?) {
|
|
69
|
+
config.setTitleFontFamily(titleFontFamily)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@ReactProp(name = "titleFontSize")
|
|
73
|
+
override fun setTitleFontSize(config: ScreenStackHeaderConfig, titleFontSize: Int) {
|
|
74
|
+
config.setTitleFontSize(titleFontSize.toFloat())
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@ReactProp(name = "titleFontWeight")
|
|
78
|
+
override fun setTitleFontWeight(config: ScreenStackHeaderConfig, titleFontWeight: String?) {
|
|
79
|
+
config.setTitleFontWeight(titleFontWeight)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@ReactProp(name = "titleColor", customType = "Color")
|
|
83
|
+
override fun setTitleColor(config: ScreenStackHeaderConfig, titleColor: Int?) {
|
|
84
|
+
if (titleColor != null) {
|
|
85
|
+
config.setTitleColor(titleColor)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@ReactProp(name = "backgroundColor", customType = "Color")
|
|
90
|
+
override fun setBackgroundColor(config: ScreenStackHeaderConfig, backgroundColor: Int?) {
|
|
91
|
+
config.setBackgroundColor(backgroundColor)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@ReactProp(name = "hideShadow")
|
|
95
|
+
override fun setHideShadow(config: ScreenStackHeaderConfig, hideShadow: Boolean) {
|
|
96
|
+
config.setHideShadow(hideShadow)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@ReactProp(name = "hideBackButton")
|
|
100
|
+
override fun setHideBackButton(config: ScreenStackHeaderConfig, hideBackButton: Boolean) {
|
|
101
|
+
config.setHideBackButton(hideBackButton)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@ReactProp(name = "topInsetEnabled")
|
|
105
|
+
override fun setTopInsetEnabled(config: ScreenStackHeaderConfig, topInsetEnabled: Boolean) {
|
|
106
|
+
config.setTopInsetEnabled(topInsetEnabled)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@ReactProp(name = "color", customType = "Color")
|
|
110
|
+
override fun setColor(config: ScreenStackHeaderConfig, color: Int?) {
|
|
111
|
+
config.setTintColor(color ?: 0)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@ReactProp(name = "hidden")
|
|
115
|
+
override fun setHidden(config: ScreenStackHeaderConfig, hidden: Boolean) {
|
|
116
|
+
config.setHidden(hidden)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@ReactProp(name = "translucent")
|
|
120
|
+
override fun setTranslucent(config: ScreenStackHeaderConfig, translucent: Boolean) {
|
|
121
|
+
config.setTranslucent(translucent)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@ReactProp(name = "backButtonInCustomView")
|
|
125
|
+
override fun setBackButtonInCustomView(
|
|
126
|
+
config: ScreenStackHeaderConfig,
|
|
127
|
+
backButtonInCustomView: Boolean
|
|
128
|
+
) {
|
|
129
|
+
config.setBackButtonInCustomView(backButtonInCustomView)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
@ReactProp(name = "direction")
|
|
133
|
+
override fun setDirection(config: ScreenStackHeaderConfig, direction: String?) {
|
|
134
|
+
config.setDirection(direction)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any>? {
|
|
138
|
+
return MapBuilder.of(
|
|
139
|
+
HeaderAttachedEvent.EVENT_NAME,
|
|
140
|
+
MapBuilder.of("registrationName", "onAttached"),
|
|
141
|
+
HeaderDetachedEvent.EVENT_NAME,
|
|
142
|
+
MapBuilder.of("registrationName", "onDetached"),
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderConfig> = mDelegate
|
|
147
|
+
|
|
148
|
+
companion object {
|
|
149
|
+
const val REACT_CLASS = "RNSScreenStackHeaderConfig"
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// TODO: Find better way to handle platform specific props
|
|
153
|
+
private fun logNotAvailable(propName: String) {
|
|
154
|
+
Log.w("RN SCREENS", "$propName prop is not available on Android")
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
override fun setBackTitle(view: ScreenStackHeaderConfig?, value: String?) {
|
|
158
|
+
logNotAvailable("backTitle")
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
override fun setBackTitleFontFamily(view: ScreenStackHeaderConfig?, value: String?) {
|
|
162
|
+
logNotAvailable("backTitleFontFamily")
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
override fun setBackTitleFontSize(view: ScreenStackHeaderConfig?, value: Int) {
|
|
166
|
+
logNotAvailable("backTitleFontSize")
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
override fun setBackTitleVisible(view: ScreenStackHeaderConfig?, value: Boolean) {
|
|
170
|
+
logNotAvailable("backTitleVisible")
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
override fun setLargeTitle(view: ScreenStackHeaderConfig?, value: Boolean) {
|
|
174
|
+
logNotAvailable("largeTitle")
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
override fun setLargeTitleFontFamily(view: ScreenStackHeaderConfig?, value: String?) {
|
|
178
|
+
logNotAvailable("largeTitleFontFamily")
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
override fun setLargeTitleFontSize(view: ScreenStackHeaderConfig?, value: Int) {
|
|
182
|
+
logNotAvailable("largeTitleFontSize")
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
override fun setLargeTitleFontWeight(view: ScreenStackHeaderConfig?, value: String?) {
|
|
186
|
+
logNotAvailable("largeTitleFontWeight")
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
override fun setLargeTitleBackgroundColor(view: ScreenStackHeaderConfig?, value: Int?) {
|
|
190
|
+
logNotAvailable("largeTitleBackgroundColor")
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
override fun setLargeTitleHideShadow(view: ScreenStackHeaderConfig?, value: Boolean) {
|
|
194
|
+
logNotAvailable("largeTitleHideShadow")
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
override fun setLargeTitleColor(view: ScreenStackHeaderConfig?, value: Int?) {
|
|
198
|
+
logNotAvailable("largeTitleColor")
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
override fun setDisableBackButtonMenu(view: ScreenStackHeaderConfig?, value: Boolean) {
|
|
202
|
+
logNotAvailable("disableBackButtonMenu")
|
|
203
|
+
}
|
|
204
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
package com.swmansion.rnscreens
|
|
2
|
+
|
|
3
|
+
import android.annotation.SuppressLint
|
|
4
|
+
import android.view.View
|
|
5
|
+
import com.facebook.react.bridge.ReactContext
|
|
6
|
+
import com.facebook.react.views.view.ReactViewGroup
|
|
7
|
+
|
|
8
|
+
@SuppressLint("ViewConstructor")
|
|
9
|
+
class ScreenStackHeaderSubview(context: ReactContext?) : ReactViewGroup(context) {
|
|
10
|
+
private var mReactWidth = 0
|
|
11
|
+
private var mReactHeight = 0
|
|
12
|
+
var type = Type.RIGHT
|
|
13
|
+
|
|
14
|
+
val config: ScreenStackHeaderConfig?
|
|
15
|
+
get() = (parent as? CustomToolbar)?.config
|
|
16
|
+
|
|
17
|
+
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
|
18
|
+
if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY &&
|
|
19
|
+
MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY
|
|
20
|
+
) {
|
|
21
|
+
// dimensions provided by react
|
|
22
|
+
mReactWidth = MeasureSpec.getSize(widthMeasureSpec)
|
|
23
|
+
mReactHeight = MeasureSpec.getSize(heightMeasureSpec)
|
|
24
|
+
val parent = parent
|
|
25
|
+
if (parent != null) {
|
|
26
|
+
forceLayout()
|
|
27
|
+
(parent as View).requestLayout()
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
setMeasuredDimension(mReactWidth, mReactHeight)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) = Unit
|
|
34
|
+
|
|
35
|
+
enum class Type {
|
|
36
|
+
LEFT, CENTER, RIGHT, BACK, SEARCH_BAR
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
package com.swmansion.rnscreens
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.JSApplicationIllegalArgumentException
|
|
4
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
5
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
6
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
7
|
+
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
8
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
9
|
+
import com.facebook.react.viewmanagers.RNSScreenStackHeaderSubviewManagerDelegate
|
|
10
|
+
import com.facebook.react.viewmanagers.RNSScreenStackHeaderSubviewManagerInterface
|
|
11
|
+
|
|
12
|
+
@ReactModule(name = ScreenStackHeaderSubviewManager.REACT_CLASS)
|
|
13
|
+
class ScreenStackHeaderSubviewManager : ViewGroupManager<ScreenStackHeaderSubview>(), RNSScreenStackHeaderSubviewManagerInterface<ScreenStackHeaderSubview> {
|
|
14
|
+
private val mDelegate: ViewManagerDelegate<ScreenStackHeaderSubview>
|
|
15
|
+
|
|
16
|
+
init {
|
|
17
|
+
mDelegate = RNSScreenStackHeaderSubviewManagerDelegate<ScreenStackHeaderSubview, ScreenStackHeaderSubviewManager>(this)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
override fun getName() = REACT_CLASS
|
|
21
|
+
|
|
22
|
+
override fun createViewInstance(context: ThemedReactContext) = ScreenStackHeaderSubview(context)
|
|
23
|
+
|
|
24
|
+
@ReactProp(name = "type")
|
|
25
|
+
override fun setType(view: ScreenStackHeaderSubview, type: String?) {
|
|
26
|
+
view.type = when (type) {
|
|
27
|
+
"left" -> ScreenStackHeaderSubview.Type.LEFT
|
|
28
|
+
"center" -> ScreenStackHeaderSubview.Type.CENTER
|
|
29
|
+
"right" -> ScreenStackHeaderSubview.Type.RIGHT
|
|
30
|
+
"back" -> ScreenStackHeaderSubview.Type.BACK
|
|
31
|
+
"searchBar" -> ScreenStackHeaderSubview.Type.SEARCH_BAR
|
|
32
|
+
else -> throw JSApplicationIllegalArgumentException("Unknown type $type")
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderSubview> = mDelegate
|
|
37
|
+
|
|
38
|
+
companion object {
|
|
39
|
+
const val REACT_CLASS = "RNSScreenStackHeaderSubview"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
package com.swmansion.rnscreens
|
|
2
|
+
|
|
3
|
+
import android.view.View
|
|
4
|
+
import android.view.ViewGroup
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
7
|
+
import com.facebook.react.uimanager.LayoutShadowNode
|
|
8
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
9
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
10
|
+
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
11
|
+
import com.facebook.react.viewmanagers.RNSScreenStackManagerDelegate
|
|
12
|
+
import com.facebook.react.viewmanagers.RNSScreenStackManagerInterface
|
|
13
|
+
import com.swmansion.rnscreens.events.StackFinishTransitioningEvent
|
|
14
|
+
|
|
15
|
+
@ReactModule(name = ScreenStackViewManager.REACT_CLASS)
|
|
16
|
+
class ScreenStackViewManager : ViewGroupManager<ScreenStack>(), RNSScreenStackManagerInterface<ScreenStack> {
|
|
17
|
+
private val mDelegate: ViewManagerDelegate<ScreenStack>
|
|
18
|
+
|
|
19
|
+
init {
|
|
20
|
+
mDelegate = RNSScreenStackManagerDelegate<ScreenStack, ScreenStackViewManager>(this)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
override fun getName() = REACT_CLASS
|
|
24
|
+
|
|
25
|
+
override fun createViewInstance(reactContext: ThemedReactContext) = ScreenStack(reactContext)
|
|
26
|
+
|
|
27
|
+
override fun addView(parent: ScreenStack, child: View, index: Int) {
|
|
28
|
+
require(child is Screen) { "Attempt attach child that is not of type RNScreen" }
|
|
29
|
+
parent.addScreen(child, index)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
override fun removeViewAt(parent: ScreenStack, index: Int) {
|
|
33
|
+
prepareOutTransition(parent.getScreenAt(index))
|
|
34
|
+
parent.removeScreenAt(index)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
private fun prepareOutTransition(screen: Screen?) {
|
|
38
|
+
startTransitionRecursive(screen)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
private fun startTransitionRecursive(parent: ViewGroup?) {
|
|
42
|
+
parent?.let {
|
|
43
|
+
for (i in 0 until it.childCount) {
|
|
44
|
+
val child = it.getChildAt(i)
|
|
45
|
+
child?.let { view -> it.startViewTransition(view) }
|
|
46
|
+
if (child is ScreenStackHeaderConfig) {
|
|
47
|
+
// we want to start transition on children of the toolbar too,
|
|
48
|
+
// which is not a child of ScreenStackHeaderConfig
|
|
49
|
+
startTransitionRecursive(child.toolbar)
|
|
50
|
+
}
|
|
51
|
+
if (child is ViewGroup) {
|
|
52
|
+
startTransitionRecursive(child)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
override fun getChildCount(parent: ScreenStack) = parent.screenCount
|
|
59
|
+
|
|
60
|
+
override fun getChildAt(parent: ScreenStack, index: Int): View = parent.getScreenAt(index)
|
|
61
|
+
|
|
62
|
+
override fun createShadowNodeInstance(context: ReactApplicationContext): LayoutShadowNode = ScreensShadowNode(context)
|
|
63
|
+
|
|
64
|
+
override fun needsCustomLayoutForChildren() = true
|
|
65
|
+
|
|
66
|
+
protected override fun getDelegate(): ViewManagerDelegate<ScreenStack> = mDelegate
|
|
67
|
+
|
|
68
|
+
override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> = mutableMapOf(
|
|
69
|
+
StackFinishTransitioningEvent.EVENT_NAME to mutableMapOf("registrationName" to "onFinishTransitioning")
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
companion object {
|
|
73
|
+
const val REACT_CLASS = "RNSScreenStack"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
package com.swmansion.rnscreens
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.JSApplicationIllegalArgumentException
|
|
4
|
+
import com.facebook.react.bridge.ReadableMap
|
|
5
|
+
import com.facebook.react.common.MapBuilder
|
|
6
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
7
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
8
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
9
|
+
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
10
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
11
|
+
import com.facebook.react.viewmanagers.RNSScreenManagerDelegate
|
|
12
|
+
import com.facebook.react.viewmanagers.RNSScreenManagerInterface
|
|
13
|
+
import com.swmansion.rnscreens.events.HeaderBackButtonClickedEvent
|
|
14
|
+
import com.swmansion.rnscreens.events.HeaderHeightChangeEvent
|
|
15
|
+
import com.swmansion.rnscreens.events.ScreenAppearEvent
|
|
16
|
+
import com.swmansion.rnscreens.events.ScreenDisappearEvent
|
|
17
|
+
import com.swmansion.rnscreens.events.ScreenDismissedEvent
|
|
18
|
+
import com.swmansion.rnscreens.events.ScreenTransitionProgressEvent
|
|
19
|
+
import com.swmansion.rnscreens.events.ScreenWillAppearEvent
|
|
20
|
+
import com.swmansion.rnscreens.events.ScreenWillDisappearEvent
|
|
21
|
+
|
|
22
|
+
@ReactModule(name = ScreenViewManager.REACT_CLASS)
|
|
23
|
+
class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInterface<Screen> {
|
|
24
|
+
private val mDelegate: ViewManagerDelegate<Screen>
|
|
25
|
+
|
|
26
|
+
init {
|
|
27
|
+
mDelegate = RNSScreenManagerDelegate<Screen, ScreenViewManager>(this)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
override fun getName() = REACT_CLASS
|
|
31
|
+
|
|
32
|
+
override fun createViewInstance(reactContext: ThemedReactContext) = Screen(reactContext)
|
|
33
|
+
|
|
34
|
+
override fun setActivityState(view: Screen, activityState: Float) {
|
|
35
|
+
setActivityState(view, activityState.toInt())
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@ReactProp(name = "activityState")
|
|
39
|
+
fun setActivityState(view: Screen, activityState: Int) {
|
|
40
|
+
if (activityState == -1) {
|
|
41
|
+
// Null will be provided when activityState is set as an animated value and we change
|
|
42
|
+
// it from JS to be a plain value (non animated).
|
|
43
|
+
// In case when null is received, we want to ignore such value and not make
|
|
44
|
+
// any updates as the actual non-null value will follow immediately.
|
|
45
|
+
return
|
|
46
|
+
}
|
|
47
|
+
when (activityState) {
|
|
48
|
+
0 -> view.setActivityState(Screen.ActivityState.INACTIVE)
|
|
49
|
+
1 -> view.setActivityState(Screen.ActivityState.TRANSITIONING_OR_BELOW_TOP)
|
|
50
|
+
2 -> view.setActivityState(Screen.ActivityState.ON_TOP)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@ReactProp(name = "stackPresentation")
|
|
55
|
+
override fun setStackPresentation(view: Screen, presentation: String?) {
|
|
56
|
+
view.stackPresentation = when (presentation) {
|
|
57
|
+
"push" -> Screen.StackPresentation.PUSH
|
|
58
|
+
"modal", "containedModal", "fullScreenModal", "formSheet" ->
|
|
59
|
+
Screen.StackPresentation.MODAL
|
|
60
|
+
"transparentModal", "containedTransparentModal" ->
|
|
61
|
+
Screen.StackPresentation.TRANSPARENT_MODAL
|
|
62
|
+
else -> throw JSApplicationIllegalArgumentException("Unknown presentation type $presentation")
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@ReactProp(name = "stackAnimation")
|
|
67
|
+
override fun setStackAnimation(view: Screen, animation: String?) {
|
|
68
|
+
view.stackAnimation = when (animation) {
|
|
69
|
+
null, "default", "flip", "simple_push" -> Screen.StackAnimation.DEFAULT
|
|
70
|
+
"none" -> Screen.StackAnimation.NONE
|
|
71
|
+
"fade" -> Screen.StackAnimation.FADE
|
|
72
|
+
"slide_from_right" -> Screen.StackAnimation.SLIDE_FROM_RIGHT
|
|
73
|
+
"slide_from_left" -> Screen.StackAnimation.SLIDE_FROM_LEFT
|
|
74
|
+
"slide_from_bottom" -> Screen.StackAnimation.SLIDE_FROM_BOTTOM
|
|
75
|
+
"fade_from_bottom" -> Screen.StackAnimation.FADE_FROM_BOTTOM
|
|
76
|
+
else -> throw JSApplicationIllegalArgumentException("Unknown animation type $animation")
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@ReactProp(name = "gestureEnabled", defaultBoolean = true)
|
|
81
|
+
override fun setGestureEnabled(view: Screen, gestureEnabled: Boolean) {
|
|
82
|
+
view.isGestureEnabled = gestureEnabled
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@ReactProp(name = "replaceAnimation")
|
|
86
|
+
override fun setReplaceAnimation(view: Screen, animation: String?) {
|
|
87
|
+
view.replaceAnimation = when (animation) {
|
|
88
|
+
null, "pop" -> Screen.ReplaceAnimation.POP
|
|
89
|
+
"push" -> Screen.ReplaceAnimation.PUSH
|
|
90
|
+
else -> throw JSApplicationIllegalArgumentException("Unknown replace animation type $animation")
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@ReactProp(name = "screenOrientation")
|
|
95
|
+
override fun setScreenOrientation(view: Screen, screenOrientation: String?) {
|
|
96
|
+
view.setScreenOrientation(screenOrientation)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@ReactProp(name = "statusBarAnimation")
|
|
100
|
+
override fun setStatusBarAnimation(view: Screen, statusBarAnimation: String?) {
|
|
101
|
+
val animated = statusBarAnimation != null && "none" != statusBarAnimation
|
|
102
|
+
view.isStatusBarAnimated = animated
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@ReactProp(name = "statusBarColor", customType = "Color")
|
|
106
|
+
override fun setStatusBarColor(view: Screen, statusBarColor: Int?) {
|
|
107
|
+
view.statusBarColor = statusBarColor
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
@ReactProp(name = "statusBarStyle")
|
|
111
|
+
override fun setStatusBarStyle(view: Screen, statusBarStyle: String?) {
|
|
112
|
+
view.statusBarStyle = statusBarStyle
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
@ReactProp(name = "statusBarTranslucent")
|
|
116
|
+
override fun setStatusBarTranslucent(view: Screen, statusBarTranslucent: Boolean) {
|
|
117
|
+
view.isStatusBarTranslucent = statusBarTranslucent
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@ReactProp(name = "statusBarHidden")
|
|
121
|
+
override fun setStatusBarHidden(view: Screen, statusBarHidden: Boolean) {
|
|
122
|
+
view.isStatusBarHidden = statusBarHidden
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
@ReactProp(name = "navigationBarColor", customType = "Color")
|
|
126
|
+
override fun setNavigationBarColor(view: Screen, navigationBarColor: Int?) {
|
|
127
|
+
view.navigationBarColor = navigationBarColor
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
@ReactProp(name = "navigationBarHidden")
|
|
131
|
+
override fun setNavigationBarHidden(view: Screen, navigationBarHidden: Boolean) {
|
|
132
|
+
view.isNavigationBarHidden = navigationBarHidden
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
@ReactProp(name = "nativeBackButtonDismissalEnabled")
|
|
136
|
+
override fun setNativeBackButtonDismissalEnabled(
|
|
137
|
+
view: Screen,
|
|
138
|
+
nativeBackButtonDismissalEnabled: Boolean
|
|
139
|
+
) {
|
|
140
|
+
view.nativeBackButtonDismissalEnabled = nativeBackButtonDismissalEnabled
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// these props are not available on Android, however we must override their setters
|
|
144
|
+
override fun setFullScreenSwipeEnabled(view: Screen?, value: Boolean) = Unit
|
|
145
|
+
|
|
146
|
+
override fun setTransitionDuration(view: Screen?, value: Int) = Unit
|
|
147
|
+
|
|
148
|
+
override fun setHideKeyboardOnSwipe(view: Screen?, value: Boolean) = Unit
|
|
149
|
+
|
|
150
|
+
override fun setCustomAnimationOnSwipe(view: Screen?, value: Boolean) = Unit
|
|
151
|
+
|
|
152
|
+
override fun setGestureResponseDistance(view: Screen?, value: ReadableMap?) = Unit
|
|
153
|
+
|
|
154
|
+
override fun setHomeIndicatorHidden(view: Screen?, value: Boolean) = Unit
|
|
155
|
+
|
|
156
|
+
override fun setPreventNativeDismiss(view: Screen?, value: Boolean) = Unit
|
|
157
|
+
|
|
158
|
+
override fun setSwipeDirection(view: Screen?, value: String?) = Unit
|
|
159
|
+
|
|
160
|
+
override fun setSheetAllowedDetents(view: Screen, value: String?) = Unit
|
|
161
|
+
|
|
162
|
+
override fun setSheetLargestUndimmedDetent(view: Screen, value: String?) = Unit
|
|
163
|
+
|
|
164
|
+
override fun setSheetGrabberVisible(view: Screen?, value: Boolean) = Unit
|
|
165
|
+
|
|
166
|
+
override fun setSheetCornerRadius(view: Screen?, value: Float) = Unit
|
|
167
|
+
|
|
168
|
+
override fun setSheetExpandsWhenScrolledToEdge(view: Screen?, value: Boolean) = Unit
|
|
169
|
+
|
|
170
|
+
override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> = mutableMapOf(
|
|
171
|
+
ScreenDismissedEvent.EVENT_NAME to MapBuilder.of("registrationName", "onDismissed"),
|
|
172
|
+
ScreenWillAppearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onWillAppear"),
|
|
173
|
+
ScreenAppearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onAppear"),
|
|
174
|
+
ScreenWillDisappearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onWillDisappear"),
|
|
175
|
+
ScreenDisappearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onDisappear"),
|
|
176
|
+
HeaderHeightChangeEvent.EVENT_NAME to MapBuilder.of("registrationName", "onHeaderHeightChange"),
|
|
177
|
+
HeaderBackButtonClickedEvent.EVENT_NAME to MapBuilder.of("registrationName", "onHeaderBackButtonClicked"),
|
|
178
|
+
ScreenTransitionProgressEvent.EVENT_NAME to MapBuilder.of("registrationName", "onTransitionProgress")
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
protected override fun getDelegate(): ViewManagerDelegate<Screen> = mDelegate
|
|
182
|
+
|
|
183
|
+
companion object {
|
|
184
|
+
const val REACT_CLASS = "RNSScreen"
|
|
185
|
+
}
|
|
186
|
+
}
|