react-native-screens 3.28.0 → 3.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/RNScreens.podspec +3 -3
- package/android/CMakeLists.txt +27 -0
- package/android/build.gradle +21 -2
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +17 -14
- package/android/src/main/cpp/jni-adapter.cpp +110 -0
- package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +13 -8
- package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +8 -8
- package/android/src/main/java/com/swmansion/rnscreens/ModalScreenViewManager.kt +12 -0
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +38 -5
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +32 -42
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +76 -48
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +38 -35
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +43 -37
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +23 -23
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +73 -71
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +3 -3
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +5 -5
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +3 -3
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +3 -3
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +4 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +13 -16
- package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +105 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +1 -0
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +14 -10
- package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +8 -8
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +3 -7
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +4 -8
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +3 -7
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +3 -3
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +9 -13
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +3 -7
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +3 -7
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +3 -7
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +3 -7
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +3 -7
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +3 -7
- package/android/src/main/jni/rnscreens.h +1 -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/swmansion/rnscreens/FabricEnabledViewGroup.kt +1 -1
- package/android/src/paper/java/com/swmansion/rnscreens/NativeScreensModuleSpec.java +32 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenComponentDescriptor.h +41 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.cpp +15 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.h +31 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +6 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +1 -5
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +1 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +8 -3
- package/cpp/RNScreensTurboModule.cpp +107 -0
- package/cpp/RNScreensTurboModule.h +43 -0
- package/gesture-handler/package.json +6 -0
- package/ios/RNSConvert.h +2 -0
- package/ios/RNSConvert.mm +5 -2
- package/ios/RNSEnums.h +1 -0
- package/ios/RNSModalScreen.h +8 -0
- package/ios/RNSModalScreen.mm +36 -0
- package/ios/RNSModule.h +19 -0
- package/ios/RNSModule.mm +174 -0
- package/ios/RNSScreen.h +4 -1
- package/ios/RNSScreen.mm +48 -26
- package/ios/RNSScreenStack.h +6 -0
- package/ios/RNSScreenStack.mm +150 -23
- package/ios/RNSScreenStackAnimator.mm +89 -1
- package/ios/RNSScreenStackHeaderConfig.mm +7 -1
- package/ios/RNSScreenWindowTraits.h +1 -1
- package/ios/RNSScreenWindowTraits.mm +24 -50
- package/ios/RNSSearchBar.mm +24 -0
- package/ios/utils/RNSUIBarButtonItem.h +2 -0
- package/lib/commonjs/TransitionProgressContext.js +3 -4
- package/lib/commonjs/TransitionProgressContext.js.map +1 -1
- package/lib/commonjs/components/FullWindowOverlay.js +28 -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 +161 -0
- package/lib/commonjs/components/Screen.js.map +1 -0
- package/lib/commonjs/components/Screen.web.js +46 -0
- package/lib/commonjs/components/Screen.web.js.map +1 -0
- package/lib/commonjs/components/ScreenContainer.js +33 -0
- package/lib/commonjs/components/ScreenContainer.js.map +1 -0
- package/lib/commonjs/components/ScreenContainer.web.js +11 -0
- package/lib/commonjs/components/ScreenContainer.web.js.map +1 -0
- package/lib/commonjs/components/ScreenStack.js +45 -0
- package/lib/commonjs/components/ScreenStack.js.map +1 -0
- package/lib/commonjs/components/ScreenStack.web.js +9 -0
- package/lib/commonjs/components/ScreenStack.web.js.map +1 -0
- package/lib/commonjs/components/ScreenStackHeaderConfig.js +53 -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/SearchBar.js +59 -0
- package/lib/commonjs/components/SearchBar.js.map +1 -0
- package/lib/commonjs/components/SearchBar.web.js +11 -0
- package/lib/commonjs/components/SearchBar.web.js.map +1 -0
- package/lib/commonjs/components/helpers/DelayedFreeze.js +32 -0
- package/lib/commonjs/components/helpers/DelayedFreeze.js.map +1 -0
- package/lib/commonjs/core.js +41 -0
- package/lib/commonjs/core.js.map +1 -0
- package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js +1 -2
- package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ModalScreenNativeComponent.js +13 -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 +1 -2
- package/lib/commonjs/fabric/ScreenContainerNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenNativeComponent.js +1 -2
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js +1 -2
- package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js +1 -2
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js +1 -2
- package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenStackNativeComponent.js +1 -2
- package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/SearchBarNativeComponent.js +3 -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 +202 -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 +38 -0
- package/lib/commonjs/gesture-handler/defaults.js.map +1 -0
- package/lib/commonjs/gesture-handler/fabricUtils.js +30 -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 +183 -100
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/native-stack/contexts/GHContext.js +11 -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 +20 -24
- 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 +3 -4
- package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -1
- package/lib/commonjs/native-stack/utils/HeaderHeightContext.js +3 -4
- package/lib/commonjs/native-stack/utils/HeaderHeightContext.js.map +1 -1
- package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js +2 -2
- 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.map +1 -1
- package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js +2 -2
- 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 +2 -2
- package/lib/commonjs/native-stack/utils/useHeaderHeight.js.map +1 -1
- package/lib/commonjs/native-stack/views/FontProcessor.js +1 -2
- package/lib/commonjs/native-stack/views/FontProcessor.js.map +1 -1
- package/lib/commonjs/native-stack/views/HeaderConfig.js +11 -7
- package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/commonjs/native-stack/views/NativeStackView.js +50 -15
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js +3 -4
- package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +6 -9
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedScreen.js +1 -2
- package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +6 -14
- package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js +3 -4
- 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 +2 -2
- package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/useTransitionProgress.js +2 -2
- package/lib/commonjs/useTransitionProgress.js.map +1 -1
- package/lib/commonjs/utils.js +2 -4
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/TransitionProgressContext.js.map +1 -1
- package/lib/module/components/FullWindowOverlay.js +21 -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 +156 -0
- package/lib/module/components/Screen.js.map +1 -0
- package/lib/module/components/Screen.web.js +38 -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 +5 -0
- package/lib/module/components/ScreenContainer.web.js.map +1 -0
- package/lib/module/components/ScreenStack.js +40 -0
- package/lib/module/components/ScreenStack.js.map +1 -0
- package/lib/module/components/ScreenStack.web.js +3 -0
- package/lib/module/components/ScreenStack.web.js.map +1 -0
- package/lib/module/components/ScreenStackHeaderConfig.js +43 -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/SearchBar.js +52 -0
- package/lib/module/components/SearchBar.js.map +1 -0
- package/lib/module/components/SearchBar.web.js +5 -0
- package/lib/module/components/SearchBar.web.js.map +1 -0
- package/lib/module/components/helpers/DelayedFreeze.js +25 -0
- package/lib/module/components/helpers/DelayedFreeze.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.map +1 -1
- package/lib/module/fabric/ModalScreenNativeComponent.js +8 -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.map +1 -1
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -1
- package/lib/module/fabric/SearchBarNativeComponent.js +1 -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 +194 -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 +32 -0
- package/lib/module/gesture-handler/defaults.js.map +1 -0
- package/lib/module/gesture-handler/fabricUtils.js +23 -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 +31 -64
- package/lib/module/index.js.map +1 -1
- package/lib/module/native-stack/contexts/GHContext.js +4 -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 +17 -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.map +1 -1
- 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 +1 -2
- package/lib/module/native-stack/views/FontProcessor.js.map +1 -1
- package/lib/module/native-stack/views/HeaderConfig.js +8 -5
- package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/module/native-stack/views/NativeStackView.js +49 -14
- 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 +2 -4
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
- package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
- package/lib/module/reanimated/ReanimatedScreenProvider.js +6 -14
- 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.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.map +1 -1
- package/lib/typescript/TransitionProgressContext.d.ts +1 -0
- package/lib/typescript/TransitionProgressContext.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 +20 -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 +7 -0
- package/lib/typescript/components/ScreenContainer.d.ts.map +1 -0
- package/lib/typescript/components/ScreenContainer.web.d.ts +5 -0
- package/lib/typescript/components/ScreenContainer.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 +3 -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/SearchBar.d.ts +26 -0
- package/lib/typescript/components/SearchBar.d.ts.map +1 -0
- package/lib/typescript/components/SearchBar.web.d.ts +5 -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/core.d.ts +7 -0
- package/lib/typescript/core.d.ts.map +1 -0
- package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +68 -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/ScreenNativeComponent.d.ts +2 -1
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenNavigationContainerNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/ScreenNavigationContainerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/SearchBarNativeComponent.d.ts +3 -1
- 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 +8 -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 +11 -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 +1 -0
- package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts.map +1 -0
- package/lib/typescript/native-stack/types.d.ts +39 -2
- 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 +1 -0
- package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts.map +1 -0
- package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts +1 -0
- package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts.map +1 -0
- package/lib/typescript/native-stack/utils/getStatusBarHeight.d.ts +1 -0
- package/lib/typescript/native-stack/utils/getStatusBarHeight.d.ts.map +1 -0
- package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts +1 -0
- 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/HeaderConfig.d.ts +1 -0
- package/lib/typescript/native-stack/views/HeaderConfig.d.ts.map +1 -0
- package/lib/typescript/native-stack/views/NativeStackView.d.ts +1 -0
- 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 +2 -2
- package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts.map +1 -0
- package/lib/typescript/reanimated/ReanimatedScreen.d.ts +2 -2
- 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 +1 -0
- 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 +11 -2
- package/lib/typescript/types.d.ts.map +1 -0
- package/lib/typescript/useTransitionProgress.d.ts +1 -0
- package/lib/typescript/useTransitionProgress.d.ts.map +1 -0
- package/lib/typescript/utils.d.ts +1 -0
- package/lib/typescript/utils.d.ts.map +1 -0
- package/native-stack/README.md +2 -1
- package/native-stack/package.json +1 -1
- package/package.json +18 -11
- package/react-native.config.js +2 -1
- package/reanimated/package.json +1 -1
- package/src/components/FullWindowOverlay.tsx +25 -0
- package/src/components/FullWindowOverlay.web.tsx +6 -0
- package/src/components/Screen.tsx +218 -0
- package/src/components/Screen.web.tsx +43 -0
- package/src/components/ScreenContainer.tsx +33 -0
- package/src/components/ScreenContainer.web.tsx +6 -0
- package/src/components/ScreenStack.tsx +41 -0
- package/src/components/ScreenStack.web.tsx +3 -0
- package/src/components/ScreenStackHeaderConfig.tsx +76 -0
- package/src/components/ScreenStackHeaderConfig.web.tsx +39 -0
- package/src/components/SearchBar.tsx +91 -0
- package/src/components/SearchBar.web.tsx +6 -0
- package/src/components/helpers/DelayedFreeze.tsx +27 -0
- package/src/core.ts +43 -0
- package/src/fabric/ModalScreenNativeComponent.ts +104 -0
- package/src/fabric/NativeScreensModule.ts +7 -0
- package/src/fabric/NativeScreensModule.web.ts +1 -0
- package/src/fabric/ScreenNativeComponent.ts +1 -1
- package/src/fabric/SearchBarNativeComponent.ts +2 -0
- 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 +38 -0
- package/src/gesture-handler/fabricUtils.ts +39 -0
- package/src/gesture-handler/fabricUtils.web.ts +10 -0
- package/src/gesture-handler/index.tsx +4 -0
- package/src/index.tsx +65 -112
- package/src/native-stack/contexts/GHContext.tsx +7 -0
- package/src/native-stack/types.tsx +62 -1
- package/src/native-stack/views/HeaderConfig.tsx +11 -0
- package/src/native-stack/views/NativeStackView.tsx +65 -13
- package/src/types.tsx +13 -1
- package/lib/commonjs/index.native.js +0 -418
- package/lib/commonjs/index.native.js.map +0 -1
- package/lib/module/index.native.js +0 -415
- package/lib/module/index.native.js.map +0 -1
- package/lib/typescript/index.native.d.ts +0 -2
- package/src/index.native.tsx +0 -619
|
@@ -17,10 +17,10 @@ import javax.annotation.Nonnull
|
|
|
17
17
|
|
|
18
18
|
@ReactModule(name = ScreenStackHeaderConfigViewManager.REACT_CLASS)
|
|
19
19
|
class ScreenStackHeaderConfigViewManager : ViewGroupManager<ScreenStackHeaderConfig>(), RNSScreenStackHeaderConfigManagerInterface<ScreenStackHeaderConfig> {
|
|
20
|
-
private val
|
|
20
|
+
private val delegate: ViewManagerDelegate<ScreenStackHeaderConfig>
|
|
21
21
|
|
|
22
22
|
init {
|
|
23
|
-
|
|
23
|
+
delegate = RNSScreenStackHeaderConfigManagerDelegate<ScreenStackHeaderConfig, ScreenStackHeaderConfigViewManager>(this)
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
override fun getName(): String = REACT_CLASS
|
|
@@ -143,7 +143,7 @@ class ScreenStackHeaderConfigViewManager : ViewGroupManager<ScreenStackHeaderCon
|
|
|
143
143
|
)
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderConfig> =
|
|
146
|
+
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderConfig> = delegate
|
|
147
147
|
|
|
148
148
|
companion object {
|
|
149
149
|
const val REACT_CLASS = "RNSScreenStackHeaderConfig"
|
|
@@ -7,8 +7,8 @@ import com.facebook.react.views.view.ReactViewGroup
|
|
|
7
7
|
|
|
8
8
|
@SuppressLint("ViewConstructor")
|
|
9
9
|
class ScreenStackHeaderSubview(context: ReactContext?) : ReactViewGroup(context) {
|
|
10
|
-
private var
|
|
11
|
-
private var
|
|
10
|
+
private var reactWidth = 0
|
|
11
|
+
private var reactHeight = 0
|
|
12
12
|
var type = Type.RIGHT
|
|
13
13
|
|
|
14
14
|
val config: ScreenStackHeaderConfig?
|
|
@@ -19,15 +19,15 @@ class ScreenStackHeaderSubview(context: ReactContext?) : ReactViewGroup(context)
|
|
|
19
19
|
MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY
|
|
20
20
|
) {
|
|
21
21
|
// dimensions provided by react
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
reactWidth = MeasureSpec.getSize(widthMeasureSpec)
|
|
23
|
+
reactHeight = MeasureSpec.getSize(heightMeasureSpec)
|
|
24
24
|
val parent = parent
|
|
25
25
|
if (parent != null) {
|
|
26
26
|
forceLayout()
|
|
27
27
|
(parent as View).requestLayout()
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
setMeasuredDimension(
|
|
30
|
+
setMeasuredDimension(reactWidth, reactHeight)
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) = Unit
|
|
@@ -11,10 +11,10 @@ import com.facebook.react.viewmanagers.RNSScreenStackHeaderSubviewManagerInterfa
|
|
|
11
11
|
|
|
12
12
|
@ReactModule(name = ScreenStackHeaderSubviewManager.REACT_CLASS)
|
|
13
13
|
class ScreenStackHeaderSubviewManager : ViewGroupManager<ScreenStackHeaderSubview>(), RNSScreenStackHeaderSubviewManagerInterface<ScreenStackHeaderSubview> {
|
|
14
|
-
private val
|
|
14
|
+
private val delegate: ViewManagerDelegate<ScreenStackHeaderSubview>
|
|
15
15
|
|
|
16
16
|
init {
|
|
17
|
-
|
|
17
|
+
delegate = RNSScreenStackHeaderSubviewManagerDelegate<ScreenStackHeaderSubview, ScreenStackHeaderSubviewManager>(this)
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
override fun getName() = REACT_CLASS
|
|
@@ -33,7 +33,7 @@ class ScreenStackHeaderSubviewManager : ViewGroupManager<ScreenStackHeaderSubvie
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderSubview> =
|
|
36
|
+
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderSubview> = delegate
|
|
37
37
|
|
|
38
38
|
companion object {
|
|
39
39
|
const val REACT_CLASS = "RNSScreenStackHeaderSubview"
|
|
@@ -14,10 +14,10 @@ import com.swmansion.rnscreens.events.StackFinishTransitioningEvent
|
|
|
14
14
|
|
|
15
15
|
@ReactModule(name = ScreenStackViewManager.REACT_CLASS)
|
|
16
16
|
class ScreenStackViewManager : ViewGroupManager<ScreenStack>(), RNSScreenStackManagerInterface<ScreenStack> {
|
|
17
|
-
private val
|
|
17
|
+
private val delegate: ViewManagerDelegate<ScreenStack>
|
|
18
18
|
|
|
19
19
|
init {
|
|
20
|
-
|
|
20
|
+
delegate = RNSScreenStackManagerDelegate<ScreenStack, ScreenStackViewManager>(this)
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
override fun getName() = REACT_CLASS
|
|
@@ -63,7 +63,7 @@ class ScreenStackViewManager : ViewGroupManager<ScreenStack>(), RNSScreenStackMa
|
|
|
63
63
|
|
|
64
64
|
override fun needsCustomLayoutForChildren() = true
|
|
65
65
|
|
|
66
|
-
protected override fun getDelegate(): ViewManagerDelegate<ScreenStack> =
|
|
66
|
+
protected override fun getDelegate(): ViewManagerDelegate<ScreenStack> = delegate
|
|
67
67
|
|
|
68
68
|
override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> = mutableMapOf(
|
|
69
69
|
StackFinishTransitioningEvent.EVENT_NAME to mutableMapOf("registrationName" to "onFinishTransitioning")
|
|
@@ -22,11 +22,11 @@ import com.swmansion.rnscreens.events.ScreenWillAppearEvent
|
|
|
22
22
|
import com.swmansion.rnscreens.events.ScreenWillDisappearEvent
|
|
23
23
|
|
|
24
24
|
@ReactModule(name = ScreenViewManager.REACT_CLASS)
|
|
25
|
-
class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInterface<Screen> {
|
|
26
|
-
private val
|
|
25
|
+
open class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInterface<Screen> {
|
|
26
|
+
private val delegate: ViewManagerDelegate<Screen>
|
|
27
27
|
|
|
28
28
|
init {
|
|
29
|
-
|
|
29
|
+
delegate = RNSScreenManagerDelegate<Screen, ScreenViewManager>(this)
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
override fun getName() = REACT_CLASS
|
|
@@ -193,7 +193,7 @@ class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInterface<
|
|
|
193
193
|
ScreenTransitionProgressEvent.EVENT_NAME to MapBuilder.of("registrationName", "onTransitionProgress")
|
|
194
194
|
)
|
|
195
195
|
|
|
196
|
-
protected override fun getDelegate(): ViewManagerDelegate<Screen> =
|
|
196
|
+
protected override fun getDelegate(): ViewManagerDelegate<Screen> = delegate
|
|
197
197
|
|
|
198
198
|
companion object {
|
|
199
199
|
const val REACT_CLASS = "RNSScreen"
|
|
@@ -11,7 +11,6 @@ import android.os.Build
|
|
|
11
11
|
import android.view.ViewParent
|
|
12
12
|
import androidx.core.graphics.Insets
|
|
13
13
|
import androidx.core.view.ViewCompat
|
|
14
|
-
import androidx.core.view.WindowCompat
|
|
15
14
|
import androidx.core.view.WindowInsetsCompat
|
|
16
15
|
import androidx.core.view.WindowInsetsControllerCompat
|
|
17
16
|
import com.facebook.react.bridge.GuardedRunnable
|
|
@@ -22,21 +21,21 @@ import com.swmansion.rnscreens.Screen.WindowTraits
|
|
|
22
21
|
object ScreenWindowTraits {
|
|
23
22
|
// Methods concerning statusBar management were taken from `react-native`'s status bar module:
|
|
24
23
|
// https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.java
|
|
25
|
-
private var
|
|
26
|
-
private var
|
|
27
|
-
private var
|
|
28
|
-
private var
|
|
24
|
+
private var didSetOrientation = false
|
|
25
|
+
private var didSetStatusBarAppearance = false
|
|
26
|
+
private var didSetNavigationBarAppearance = false
|
|
27
|
+
private var defaultStatusBarColor: Int? = null
|
|
29
28
|
|
|
30
29
|
internal fun applyDidSetOrientation() {
|
|
31
|
-
|
|
30
|
+
didSetOrientation = true
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
internal fun applyDidSetStatusBarAppearance() {
|
|
35
|
-
|
|
34
|
+
didSetStatusBarAppearance = true
|
|
36
35
|
}
|
|
37
36
|
|
|
38
37
|
internal fun applyDidSetNavigationBarAppearance() {
|
|
39
|
-
|
|
38
|
+
didSetNavigationBarAppearance = true
|
|
40
39
|
}
|
|
41
40
|
|
|
42
41
|
internal fun setOrientation(screen: Screen, activity: Activity?) {
|
|
@@ -48,17 +47,16 @@ object ScreenWindowTraits {
|
|
|
48
47
|
activity.requestedOrientation = orientation
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
@SuppressLint("ObsoleteSdkInt") // to be removed when support for < 0.64 is dropped
|
|
52
50
|
internal fun setColor(screen: Screen, activity: Activity?, context: ReactContext?) {
|
|
53
51
|
if (activity == null || context == null) {
|
|
54
52
|
return
|
|
55
53
|
}
|
|
56
|
-
if (
|
|
57
|
-
|
|
54
|
+
if (defaultStatusBarColor == null) {
|
|
55
|
+
defaultStatusBarColor = activity.window.statusBarColor
|
|
58
56
|
}
|
|
59
57
|
val screenForColor = findScreenForTrait(screen, WindowTraits.COLOR)
|
|
60
58
|
val screenForAnimated = findScreenForTrait(screen, WindowTraits.ANIMATED)
|
|
61
|
-
val color = screenForColor?.statusBarColor ?:
|
|
59
|
+
val color = screenForColor?.statusBarColor ?: defaultStatusBarColor
|
|
62
60
|
val animated = screenForAnimated?.isStatusBarAnimated ?: false
|
|
63
61
|
|
|
64
62
|
UiThreadUtil.runOnUiThread(
|
|
@@ -197,7 +195,6 @@ object ScreenWindowTraits {
|
|
|
197
195
|
val screenForNavBarHidden = findScreenForTrait(screen, WindowTraits.NAVIGATION_BAR_HIDDEN)
|
|
198
196
|
val hidden = screenForNavBarHidden?.isNavigationBarHidden ?: false
|
|
199
197
|
|
|
200
|
-
WindowCompat.setDecorFitsSystemWindows(window, hidden)
|
|
201
198
|
if (hidden) {
|
|
202
199
|
WindowInsetsControllerCompat(window, window.decorView).let { controller ->
|
|
203
200
|
controller.hide(WindowInsetsCompat.Type.navigationBars())
|
|
@@ -213,16 +210,16 @@ object ScreenWindowTraits {
|
|
|
213
210
|
}
|
|
214
211
|
|
|
215
212
|
internal fun trySetWindowTraits(screen: Screen, activity: Activity?, context: ReactContext?) {
|
|
216
|
-
if (
|
|
213
|
+
if (didSetOrientation) {
|
|
217
214
|
setOrientation(screen, activity)
|
|
218
215
|
}
|
|
219
|
-
if (
|
|
216
|
+
if (didSetStatusBarAppearance) {
|
|
220
217
|
setColor(screen, activity, context)
|
|
221
218
|
setStyle(screen, activity, context)
|
|
222
219
|
setTranslucent(screen, activity, context)
|
|
223
220
|
setHidden(screen, activity)
|
|
224
221
|
}
|
|
225
|
-
if (
|
|
222
|
+
if (didSetNavigationBarAppearance) {
|
|
226
223
|
setNavigationBarColor(screen, activity)
|
|
227
224
|
setNavigationBarHidden(screen, activity)
|
|
228
225
|
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
package com.swmansion.rnscreens
|
|
2
|
+
|
|
3
|
+
import android.util.Log
|
|
4
|
+
import com.facebook.proguard.annotations.DoNotStrip
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.bridge.UiThreadUtil
|
|
7
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
8
|
+
import com.facebook.react.uimanager.UIManagerHelper
|
|
9
|
+
import com.swmansion.rnscreens.events.ScreenTransitionProgressEvent
|
|
10
|
+
import java.util.concurrent.atomic.AtomicBoolean
|
|
11
|
+
|
|
12
|
+
@ReactModule(name = ScreensModule.NAME)
|
|
13
|
+
class ScreensModule(private val reactContext: ReactApplicationContext)
|
|
14
|
+
: NativeScreensModuleSpec(reactContext)
|
|
15
|
+
{
|
|
16
|
+
private var topScreenId: Int = -1
|
|
17
|
+
private val isActiveTransition = AtomicBoolean(false)
|
|
18
|
+
|
|
19
|
+
init {
|
|
20
|
+
try {
|
|
21
|
+
System.loadLibrary("rnscreens")
|
|
22
|
+
val jsContext = reactApplicationContext.javaScriptContextHolder
|
|
23
|
+
if (jsContext != null) {
|
|
24
|
+
nativeInstall(jsContext.get())
|
|
25
|
+
} else {
|
|
26
|
+
Log.e("[RNScreens]", "Could not install JSI bindings.")
|
|
27
|
+
}
|
|
28
|
+
} catch (exception: Exception) {
|
|
29
|
+
Log.w("[RNScreens]", "Could not load RNScreens module.")
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
private external fun nativeInstall(jsiPtr: Long)
|
|
34
|
+
|
|
35
|
+
override fun getName(): String = NAME
|
|
36
|
+
|
|
37
|
+
@DoNotStrip
|
|
38
|
+
private fun startTransition(reactTag: Int?): IntArray {
|
|
39
|
+
UiThreadUtil.assertOnUiThread()
|
|
40
|
+
if (isActiveTransition.get() || reactTag == null) {
|
|
41
|
+
return intArrayOf(-1, -1)
|
|
42
|
+
}
|
|
43
|
+
topScreenId = -1
|
|
44
|
+
val result = intArrayOf(-1, -1)
|
|
45
|
+
val uiManager = UIManagerHelper.getUIManagerForReactTag(reactContext, reactTag)
|
|
46
|
+
val stack = uiManager?.resolveView(reactTag)
|
|
47
|
+
if (stack is ScreenStack) {
|
|
48
|
+
val fragments = stack.fragments
|
|
49
|
+
val screensCount = fragments.size
|
|
50
|
+
if (screensCount > 1) {
|
|
51
|
+
isActiveTransition.set(true)
|
|
52
|
+
stack.attachBelowTop()
|
|
53
|
+
topScreenId = fragments[screensCount - 1].screen.id
|
|
54
|
+
result[0] = topScreenId
|
|
55
|
+
result[1] = fragments[screensCount - 2].screen.id
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return result
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@DoNotStrip
|
|
62
|
+
private fun updateTransition(progress: Double) {
|
|
63
|
+
UiThreadUtil.assertOnUiThread()
|
|
64
|
+
if (topScreenId == -1) {
|
|
65
|
+
return
|
|
66
|
+
}
|
|
67
|
+
val progressFloat = progress.toFloat();
|
|
68
|
+
val coalescingKey = ScreenFragment.getCoalescingKey(progressFloat)
|
|
69
|
+
UIManagerHelper
|
|
70
|
+
.getEventDispatcherForReactTag(reactContext, topScreenId)
|
|
71
|
+
?.dispatchEvent(
|
|
72
|
+
ScreenTransitionProgressEvent(
|
|
73
|
+
UIManagerHelper.getSurfaceId(reactContext),
|
|
74
|
+
topScreenId, progressFloat, true, true, coalescingKey
|
|
75
|
+
)
|
|
76
|
+
)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@DoNotStrip
|
|
80
|
+
private fun finishTransition(reactTag: Int?, canceled: Boolean) {
|
|
81
|
+
UiThreadUtil.assertOnUiThread()
|
|
82
|
+
if (!isActiveTransition.get() || reactTag == null) {
|
|
83
|
+
Log.e(
|
|
84
|
+
"[RNScreens]",
|
|
85
|
+
"Unable to call `finishTransition` method before transition start."
|
|
86
|
+
)
|
|
87
|
+
return
|
|
88
|
+
}
|
|
89
|
+
val uiManager = UIManagerHelper.getUIManagerForReactTag(reactContext, reactTag)
|
|
90
|
+
val stack = uiManager?.resolveView(reactTag)
|
|
91
|
+
if (stack is ScreenStack) {
|
|
92
|
+
if (canceled) {
|
|
93
|
+
stack.detachBelowTop()
|
|
94
|
+
} else {
|
|
95
|
+
stack.notifyTopDetached()
|
|
96
|
+
}
|
|
97
|
+
isActiveTransition.set(false)
|
|
98
|
+
}
|
|
99
|
+
topScreenId = -1
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
companion object {
|
|
103
|
+
const val NAME = "RNSModule"
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -6,10 +6,10 @@ import com.facebook.react.uimanager.NativeViewHierarchyManager
|
|
|
6
6
|
import com.facebook.react.uimanager.NativeViewHierarchyOptimizer
|
|
7
7
|
import com.facebook.react.uimanager.UIManagerModule
|
|
8
8
|
|
|
9
|
-
internal class ScreensShadowNode(private var
|
|
9
|
+
internal class ScreensShadowNode(private var context: ReactContext) : LayoutShadowNode() {
|
|
10
10
|
override fun onBeforeLayout(nativeViewHierarchyOptimizer: NativeViewHierarchyOptimizer) {
|
|
11
11
|
super.onBeforeLayout(nativeViewHierarchyOptimizer)
|
|
12
|
-
(
|
|
12
|
+
(context.getNativeModule(UIManagerModule::class.java))?.addUIBlock { nativeViewHierarchyManager: NativeViewHierarchyManager ->
|
|
13
13
|
val view = nativeViewHierarchyManager.resolveView(reactTag)
|
|
14
14
|
if (view is ScreenContainer) {
|
|
15
15
|
view.performUpdates()
|
|
@@ -106,6 +106,7 @@ class SearchBarManager : ViewGroupManager<SearchBarView>() {
|
|
|
106
106
|
"clearText" -> root.handleClearTextJsRequest()
|
|
107
107
|
"toggleCancelButton" -> root.handleToggleCancelButtonJsRequest(false) // just a dummy argument
|
|
108
108
|
"setText" -> root.handleSetTextJsRequest(args?.getString(0))
|
|
109
|
+
"cancelSearch" -> root.handleCancelSearchJsRequest()
|
|
109
110
|
else -> throw JSApplicationIllegalArgumentException("Unsupported native command received: $commandId")
|
|
110
111
|
}
|
|
111
112
|
}
|
|
@@ -28,9 +28,9 @@ class SearchBarView(reactContext: ReactContext?) : ReactViewGroup(reactContext)
|
|
|
28
28
|
var autoFocus: Boolean = false
|
|
29
29
|
var shouldShowHintSearchIcon: Boolean = true
|
|
30
30
|
|
|
31
|
-
private var
|
|
31
|
+
private var searchViewFormatter: SearchViewFormatter? = null
|
|
32
32
|
|
|
33
|
-
private var
|
|
33
|
+
private var areListenersSet: Boolean = false
|
|
34
34
|
|
|
35
35
|
private val headerConfig: ScreenStackHeaderConfig?
|
|
36
36
|
get() {
|
|
@@ -52,17 +52,17 @@ class SearchBarView(reactContext: ReactContext?) : ReactViewGroup(reactContext)
|
|
|
52
52
|
private fun setSearchViewProps() {
|
|
53
53
|
val searchView = screenStackFragment?.searchView
|
|
54
54
|
if (searchView != null) {
|
|
55
|
-
if (!
|
|
55
|
+
if (!areListenersSet) {
|
|
56
56
|
setSearchViewListeners(searchView)
|
|
57
|
-
|
|
57
|
+
areListenersSet = true
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
searchView.inputType = inputType.toAndroidInputType(autoCapitalize)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
searchViewFormatter?.setTextColor(textColor)
|
|
62
|
+
searchViewFormatter?.setTintColor(tintColor)
|
|
63
|
+
searchViewFormatter?.setHeaderIconColor(headerIconColor)
|
|
64
|
+
searchViewFormatter?.setHintTextColor(hintTextColor)
|
|
65
|
+
searchViewFormatter?.setPlaceholder(placeholder, shouldShowHintSearchIcon)
|
|
66
66
|
searchView.overrideBackAction = shouldOverrideBackButton
|
|
67
67
|
}
|
|
68
68
|
}
|
|
@@ -71,7 +71,7 @@ class SearchBarView(reactContext: ReactContext?) : ReactViewGroup(reactContext)
|
|
|
71
71
|
super.onAttachedToWindow()
|
|
72
72
|
|
|
73
73
|
screenStackFragment?.onSearchViewCreate = { newSearchView ->
|
|
74
|
-
if (
|
|
74
|
+
if (searchViewFormatter == null) searchViewFormatter =
|
|
75
75
|
SearchViewFormatter(newSearchView)
|
|
76
76
|
setSearchViewProps()
|
|
77
77
|
if (autoFocus) {
|
|
@@ -150,6 +150,10 @@ class SearchBarView(reactContext: ReactContext?) : ReactViewGroup(reactContext)
|
|
|
150
150
|
text?.let { screenStackFragment?.searchView?.setText(it) }
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
+
fun handleCancelSearchJsRequest() {
|
|
154
|
+
screenStackFragment?.searchView?.cancelSearch()
|
|
155
|
+
}
|
|
156
|
+
|
|
153
157
|
private fun setToolbarElementsVisibility(visibility: Int) {
|
|
154
158
|
for (i in 0..(headerConfig?.configSubviewsCount?.minus(1) ?: 0)) {
|
|
155
159
|
val subview = headerConfig?.getConfigSubview(i)
|
|
@@ -8,8 +8,8 @@ import androidx.appcompat.R
|
|
|
8
8
|
import androidx.appcompat.widget.SearchView
|
|
9
9
|
|
|
10
10
|
class SearchViewFormatter(var searchView: SearchView) {
|
|
11
|
-
private var
|
|
12
|
-
private var
|
|
11
|
+
private var defaultTextColor: Int? = null
|
|
12
|
+
private var defaultTintBackground: Drawable? = null
|
|
13
13
|
|
|
14
14
|
private val searchEditText
|
|
15
15
|
get() = searchView.findViewById<View>(R.id.search_src_text) as? EditText
|
|
@@ -21,10 +21,10 @@ class SearchViewFormatter(var searchView: SearchView) {
|
|
|
21
21
|
get() = searchView.findViewById<ImageView>(R.id.search_close_btn)
|
|
22
22
|
|
|
23
23
|
fun setTextColor(textColor: Int?) {
|
|
24
|
-
val currentDefaultTextColor =
|
|
24
|
+
val currentDefaultTextColor = defaultTextColor
|
|
25
25
|
if (textColor != null) {
|
|
26
|
-
if (
|
|
27
|
-
|
|
26
|
+
if (defaultTextColor == null) {
|
|
27
|
+
defaultTextColor = searchEditText?.textColors?.defaultColor
|
|
28
28
|
}
|
|
29
29
|
searchEditText?.setTextColor(textColor)
|
|
30
30
|
} else if (currentDefaultTextColor != null) {
|
|
@@ -33,10 +33,10 @@ class SearchViewFormatter(var searchView: SearchView) {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
fun setTintColor(tintColor: Int?) {
|
|
36
|
-
val currentDefaultTintColor =
|
|
36
|
+
val currentDefaultTintColor = defaultTintBackground
|
|
37
37
|
if (tintColor != null) {
|
|
38
|
-
if (
|
|
39
|
-
|
|
38
|
+
if (defaultTintBackground == null) {
|
|
39
|
+
defaultTintBackground = searchTextPlate.background
|
|
40
40
|
}
|
|
41
41
|
searchTextPlate.setBackgroundColor(tintColor)
|
|
42
42
|
} else if (currentDefaultTintColor != null) {
|
|
@@ -5,14 +5,10 @@ import com.facebook.react.bridge.WritableMap
|
|
|
5
5
|
import com.facebook.react.uimanager.events.Event
|
|
6
6
|
|
|
7
7
|
class HeaderAttachedEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
|
-
override fun getEventName(): String
|
|
9
|
-
return EVENT_NAME
|
|
10
|
-
}
|
|
8
|
+
override fun getEventName(): String = EVENT_NAME
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return 0
|
|
15
|
-
}
|
|
10
|
+
// All events for a given view can be coalesced.
|
|
11
|
+
override fun getCoalescingKey(): Short = 0
|
|
16
12
|
|
|
17
13
|
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
18
14
|
|
package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt
CHANGED
|
@@ -5,18 +5,14 @@ import com.facebook.react.bridge.WritableMap
|
|
|
5
5
|
import com.facebook.react.uimanager.events.Event
|
|
6
6
|
|
|
7
7
|
class HeaderBackButtonClickedEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
|
-
override fun getEventName(): String
|
|
9
|
-
return EVENT_NAME
|
|
10
|
-
}
|
|
8
|
+
override fun getEventName(): String = EVENT_NAME
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return 0
|
|
15
|
-
}
|
|
10
|
+
// All events for a given view can be coalesced.
|
|
11
|
+
override fun getCoalescingKey(): Short = 0
|
|
16
12
|
|
|
17
13
|
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
18
14
|
|
|
19
15
|
companion object {
|
|
20
|
-
const val EVENT_NAME = "
|
|
16
|
+
const val EVENT_NAME = "topHeaderBackButtonClicked"
|
|
21
17
|
}
|
|
22
18
|
}
|
|
@@ -5,14 +5,10 @@ import com.facebook.react.bridge.WritableMap
|
|
|
5
5
|
import com.facebook.react.uimanager.events.Event
|
|
6
6
|
|
|
7
7
|
class HeaderDetachedEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
|
-
override fun getEventName(): String
|
|
9
|
-
return EVENT_NAME
|
|
10
|
-
}
|
|
8
|
+
override fun getEventName(): String = EVENT_NAME
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return 0
|
|
15
|
-
}
|
|
10
|
+
// All events for a given view can be coalesced.
|
|
11
|
+
override fun getCoalescingKey(): Short = 0
|
|
16
12
|
|
|
17
13
|
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
18
14
|
|
|
@@ -6,17 +6,17 @@ import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
|
6
6
|
|
|
7
7
|
class HeaderHeightChangeEvent(
|
|
8
8
|
viewId: Int,
|
|
9
|
-
private val
|
|
9
|
+
private val headerHeight: Double
|
|
10
10
|
) : Event<HeaderHeightChangeEvent>(viewId) {
|
|
11
11
|
|
|
12
12
|
override fun getEventName() = EVENT_NAME
|
|
13
13
|
|
|
14
14
|
// As the same header height could appear twice, use header height as a coalescing key.
|
|
15
|
-
override fun getCoalescingKey(): Short =
|
|
15
|
+
override fun getCoalescingKey(): Short = headerHeight.toInt().toShort()
|
|
16
16
|
|
|
17
17
|
override fun dispatch(rctEventEmitter: RCTEventEmitter) {
|
|
18
18
|
val map = Arguments.createMap()
|
|
19
|
-
map.putDouble("headerHeight",
|
|
19
|
+
map.putDouble("headerHeight", headerHeight)
|
|
20
20
|
rctEventEmitter.receiveEvent(viewTag, eventName, map)
|
|
21
21
|
}
|
|
22
22
|
|
package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt
CHANGED
|
@@ -7,23 +7,19 @@ import com.facebook.react.uimanager.events.Event
|
|
|
7
7
|
class ScreenTransitionProgressEvent(
|
|
8
8
|
surfaceId: Int,
|
|
9
9
|
viewId: Int,
|
|
10
|
-
private val
|
|
11
|
-
private val
|
|
12
|
-
private val
|
|
13
|
-
private val
|
|
10
|
+
private val progress: Float,
|
|
11
|
+
private val isClosing: Boolean,
|
|
12
|
+
private val isGoingForward: Boolean,
|
|
13
|
+
private val coalescingKey: Short
|
|
14
14
|
) : Event<ScreenAppearEvent?>(surfaceId, viewId) {
|
|
15
|
-
override fun getEventName(): String
|
|
16
|
-
return EVENT_NAME
|
|
17
|
-
}
|
|
15
|
+
override fun getEventName(): String = EVENT_NAME
|
|
18
16
|
|
|
19
|
-
override fun getCoalescingKey(): Short
|
|
20
|
-
return mCoalescingKey
|
|
21
|
-
}
|
|
17
|
+
override fun getCoalescingKey(): Short = coalescingKey
|
|
22
18
|
|
|
23
19
|
override fun getEventData(): WritableMap? = Arguments.createMap().apply {
|
|
24
|
-
putDouble("progress",
|
|
25
|
-
putInt("closing", if (
|
|
26
|
-
putInt("goingForward", if (
|
|
20
|
+
putDouble("progress", progress.toDouble())
|
|
21
|
+
putInt("closing", if (isClosing) 1 else 0)
|
|
22
|
+
putInt("goingForward", if (isGoingForward) 1 else 0)
|
|
27
23
|
}
|
|
28
24
|
|
|
29
25
|
companion object {
|
|
@@ -5,14 +5,10 @@ import com.facebook.react.bridge.WritableMap
|
|
|
5
5
|
import com.facebook.react.uimanager.events.Event
|
|
6
6
|
|
|
7
7
|
class SearchBarBlurEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
|
-
override fun getEventName(): String
|
|
9
|
-
return EVENT_NAME
|
|
10
|
-
}
|
|
8
|
+
override fun getEventName(): String = EVENT_NAME
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return 0
|
|
15
|
-
}
|
|
10
|
+
// All events for a given view can be coalesced.
|
|
11
|
+
override fun getCoalescingKey(): Short = 0
|
|
16
12
|
|
|
17
13
|
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
18
14
|
|
|
@@ -9,14 +9,10 @@ class SearchBarChangeTextEvent(
|
|
|
9
9
|
viewId: Int,
|
|
10
10
|
private val text: String?,
|
|
11
11
|
) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
12
|
-
override fun getEventName(): String
|
|
13
|
-
return EVENT_NAME
|
|
14
|
-
}
|
|
12
|
+
override fun getEventName(): String = EVENT_NAME
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return 0
|
|
19
|
-
}
|
|
14
|
+
// All events for a given view can be coalesced.
|
|
15
|
+
override fun getCoalescingKey(): Short = 0
|
|
20
16
|
|
|
21
17
|
override fun getEventData(): WritableMap? = Arguments.createMap().apply {
|
|
22
18
|
putString("text", text)
|
|
@@ -5,14 +5,10 @@ import com.facebook.react.bridge.WritableMap
|
|
|
5
5
|
import com.facebook.react.uimanager.events.Event
|
|
6
6
|
|
|
7
7
|
class SearchBarCloseEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
|
-
override fun getEventName(): String
|
|
9
|
-
return EVENT_NAME
|
|
10
|
-
}
|
|
8
|
+
override fun getEventName(): String = EVENT_NAME
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return 0
|
|
15
|
-
}
|
|
10
|
+
// All events for a given view can be coalesced.
|
|
11
|
+
override fun getCoalescingKey(): Short = 0
|
|
16
12
|
|
|
17
13
|
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
18
14
|
|
|
@@ -5,14 +5,10 @@ import com.facebook.react.bridge.WritableMap
|
|
|
5
5
|
import com.facebook.react.uimanager.events.Event
|
|
6
6
|
|
|
7
7
|
class SearchBarFocusEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
|
-
override fun getEventName(): String
|
|
9
|
-
return EVENT_NAME
|
|
10
|
-
}
|
|
8
|
+
override fun getEventName(): String = EVENT_NAME
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return 0
|
|
15
|
-
}
|
|
10
|
+
// All events for a given view can be coalesced.
|
|
11
|
+
override fun getCoalescingKey(): Short = 0
|
|
16
12
|
|
|
17
13
|
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
18
14
|
|
|
@@ -5,14 +5,10 @@ import com.facebook.react.bridge.WritableMap
|
|
|
5
5
|
import com.facebook.react.uimanager.events.Event
|
|
6
6
|
|
|
7
7
|
class SearchBarOpenEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
|
-
override fun getEventName(): String
|
|
9
|
-
return EVENT_NAME
|
|
10
|
-
}
|
|
8
|
+
override fun getEventName(): String = EVENT_NAME
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return 0
|
|
15
|
-
}
|
|
10
|
+
// All events for a given view can be coalesced.
|
|
11
|
+
override fun getCoalescingKey(): Short = 0
|
|
16
12
|
|
|
17
13
|
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
18
14
|
|