react-native-screens 3.29.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 +81 -15
- 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
package/README.md
CHANGED
|
@@ -11,6 +11,7 @@ To learn about how to use `react-native-screens` with Fabric architecture, head
|
|
|
11
11
|
- [x] iOS
|
|
12
12
|
- [x] Android
|
|
13
13
|
- [x] tvOS
|
|
14
|
+
- [x] visionOS
|
|
14
15
|
- [x] Windows
|
|
15
16
|
- [x] Web
|
|
16
17
|
|
|
@@ -103,8 +104,9 @@ Screens are already integrated with the React Native's most popular navigation l
|
|
|
103
104
|
|
|
104
105
|
## Supported react-native version
|
|
105
106
|
|
|
106
|
-
| version | react-native version |
|
|
107
|
+
| library version | react-native version |
|
|
107
108
|
| ------- | -------------------- |
|
|
109
|
+
| 3.30.0+ | 0.68.0+ |
|
|
108
110
|
| 3.14.0+ | 0.64.0+ |
|
|
109
111
|
| 3.0.0+ | 0.62.0+ |
|
|
110
112
|
| 2.0.0+ | 0.60.0+ |
|
|
@@ -113,13 +115,11 @@ Screens are already integrated with the React Native's most popular navigation l
|
|
|
113
115
|
|
|
114
116
|
[Fabric](https://reactnative.dev/architecture/fabric-renderer) is React Native's new rendering system.
|
|
115
117
|
|
|
116
|
-
|
|
117
|
-
- As of [version `3.19.0`](https://github.com/software-mansion/react-native-screens/releases/tag/3.19.0) of this project, Fabric is supported only for react-native 0.71+. Support for lower versions has been dropped.
|
|
118
|
-
- As of [version `3.18.0`](https://github.com/software-mansion/react-native-screens/releases/tag/3.18.0) of this project, Fabric is supported only for react-native 0.70+. Support for lower versions has been dropped.
|
|
119
|
-
- As of [version `3.14.0`](https://github.com/software-mansion/react-native-screens/releases/tag/3.14.0) of this project, Fabric is supported only for react-native 0.69+. Support for lower versions has been dropped.
|
|
118
|
+
Here's a table with summary of supported `react-native` versions when Fabric is turned on.
|
|
120
119
|
|
|
121
|
-
| version | react-native version |
|
|
120
|
+
| library version | react-native version |
|
|
122
121
|
| ------- | -------------------- |
|
|
122
|
+
| 3.28.0+ | 0.73.0+ |
|
|
123
123
|
| 3.21.0+ | 0.72.0+ |
|
|
124
124
|
| 3.19.0+ | 0.71.0+ |
|
|
125
125
|
| 3.18.0+ | 0.70.0+ |
|
|
@@ -145,7 +145,7 @@ You are all set 🎉 – when screens are enabled in your application code react
|
|
|
145
145
|
|
|
146
146
|
### Experimental support for `react-freeze`
|
|
147
147
|
|
|
148
|
-
> You have to use React Native 0.
|
|
148
|
+
> You have to use React Native 0.68 or higher, react-navigation 5.x or 6.x and react-native-screens >= v3.9.0
|
|
149
149
|
|
|
150
150
|
Since `v3.9.0`, `react-native-screens` comes with experimental support for [`react-freeze`](https://github.com/software-mansion-labs/react-freeze). It uses the React `Suspense` mechanism to prevent parts of the React component tree from rendering, while keeping its state untouched.
|
|
151
151
|
|
package/RNScreens.podspec
CHANGED
|
@@ -4,7 +4,7 @@ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
|
|
4
4
|
|
|
5
5
|
new_arch_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'
|
|
6
6
|
platform = new_arch_enabled ? "11.0" : "9.0"
|
|
7
|
-
source_files = new_arch_enabled ? 'ios/**/*.{h,m,mm,cpp}' : "ios/**/*.{h,m,mm}"
|
|
7
|
+
source_files = new_arch_enabled ? 'ios/**/*.{h,m,mm,cpp}' : ["ios/**/*.{h,m,mm}", "cpp/**/*.{cpp,h}"]
|
|
8
8
|
|
|
9
9
|
folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
|
|
10
10
|
|
|
@@ -17,7 +17,7 @@ class RNScreensDependencyHelper
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
s.subspec "common" do |ss|
|
|
20
|
-
ss.source_files = "common/cpp/**/*.{cpp,h}"
|
|
20
|
+
ss.source_files = ["common/cpp/**/*.{cpp,h}", "cpp/**/*.{cpp,h}"]
|
|
21
21
|
ss.header_dir = "rnscreens"
|
|
22
22
|
ss.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/common/cpp\"" }
|
|
23
23
|
end
|
|
@@ -60,7 +60,7 @@ Pod::Spec.new do |s|
|
|
|
60
60
|
s.homepage = "https://github.com/software-mansion/react-native-screens"
|
|
61
61
|
s.license = "MIT"
|
|
62
62
|
s.author = { "author" => "author@domain.cn" }
|
|
63
|
-
s.platforms = { :ios => platform, :tvos => "11.0" }
|
|
63
|
+
s.platforms = { :ios => platform, :tvos => "11.0", :visionos => "1.0" }
|
|
64
64
|
s.source = { :git => "https://github.com/software-mansion/react-native-screens.git", :tag => "#{s.version}" }
|
|
65
65
|
s.source_files = source_files
|
|
66
66
|
s.requires_arc = true
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.9.0)
|
|
2
|
+
|
|
3
|
+
project(rnscreens)
|
|
4
|
+
|
|
5
|
+
add_library(rnscreens
|
|
6
|
+
SHARED
|
|
7
|
+
../cpp/RNScreensTurboModule.cpp
|
|
8
|
+
./src/main/cpp/jni-adapter.cpp
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
include_directories(
|
|
12
|
+
../cpp
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
set_target_properties(rnscreens PROPERTIES
|
|
16
|
+
CXX_STANDARD 17
|
|
17
|
+
CXX_STANDARD_REQUIRED ON
|
|
18
|
+
CXX_EXTENSIONS OFF
|
|
19
|
+
POSITION_INDEPENDENT_CODE ON
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
find_package(ReactAndroid REQUIRED CONFIG)
|
|
23
|
+
|
|
24
|
+
target_link_libraries(rnscreens
|
|
25
|
+
ReactAndroid::jsi
|
|
26
|
+
android
|
|
27
|
+
)
|
package/android/build.gradle
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import com.android.Version
|
|
2
|
+
import groovy.json.JsonSlurper
|
|
2
3
|
|
|
3
4
|
buildscript {
|
|
4
5
|
ext {
|
|
@@ -73,6 +74,19 @@ android {
|
|
|
73
74
|
ndk {
|
|
74
75
|
abiFilters (*reactNativeArchitectures())
|
|
75
76
|
}
|
|
77
|
+
externalNativeBuild {
|
|
78
|
+
cmake {
|
|
79
|
+
arguments "-DANDROID_STL=c++_shared"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
buildFeatures {
|
|
84
|
+
prefab true
|
|
85
|
+
}
|
|
86
|
+
externalNativeBuild {
|
|
87
|
+
cmake {
|
|
88
|
+
path "CMakeLists.txt"
|
|
89
|
+
}
|
|
76
90
|
}
|
|
77
91
|
lintOptions {
|
|
78
92
|
abortOnError false
|
|
@@ -86,7 +100,13 @@ android {
|
|
|
86
100
|
// while there are more libraries copied in intermediates folder of the lib build directory, we exclude
|
|
87
101
|
// only the ones that make the build fail (ideally we should only include librnscreens_modules but we
|
|
88
102
|
// are only allowed to specify exclude patterns)
|
|
89
|
-
|
|
103
|
+
excludes = [
|
|
104
|
+
"META-INF",
|
|
105
|
+
"META-INF/**",
|
|
106
|
+
"**/libjsi.so",
|
|
107
|
+
"**/libc++_shared.so",
|
|
108
|
+
"**/libreact_render*.so"
|
|
109
|
+
]
|
|
90
110
|
}
|
|
91
111
|
sourceSets.main {
|
|
92
112
|
ext.androidResDir = "src/main/res"
|
|
@@ -101,7 +121,6 @@ android {
|
|
|
101
121
|
"build/generated/source/codegen/java"
|
|
102
122
|
]
|
|
103
123
|
}
|
|
104
|
-
|
|
105
124
|
}
|
|
106
125
|
res {
|
|
107
126
|
if (safeExtGet('compileSdkVersion', rnsDefaultCompileSdkVersion) >= 33) {
|
|
@@ -3,7 +3,6 @@ package com.swmansion.rnscreens
|
|
|
3
3
|
import android.view.ViewGroup
|
|
4
4
|
import androidx.annotation.UiThread
|
|
5
5
|
import com.facebook.react.bridge.ReactContext
|
|
6
|
-
import com.facebook.react.bridge.ReadableMap
|
|
7
6
|
import com.facebook.react.bridge.WritableMap
|
|
8
7
|
import com.facebook.react.bridge.WritableNativeMap
|
|
9
8
|
import com.facebook.react.uimanager.FabricViewStateManager
|
|
@@ -13,36 +12,40 @@ import kotlin.math.abs
|
|
|
13
12
|
abstract class FabricEnabledViewGroup constructor(context: ReactContext?) : ViewGroup(context), FabricViewStateManager.HasFabricViewStateManager {
|
|
14
13
|
private val mFabricViewStateManager: FabricViewStateManager = FabricViewStateManager()
|
|
15
14
|
|
|
15
|
+
private var lastSetWidth = 0f
|
|
16
|
+
private var lastSetHeight = 0f
|
|
17
|
+
|
|
16
18
|
override fun getFabricViewStateManager(): FabricViewStateManager {
|
|
17
19
|
return mFabricViewStateManager
|
|
18
20
|
}
|
|
19
21
|
|
|
20
|
-
protected fun updateScreenSizeFabric(width: Int, height: Int) {
|
|
21
|
-
updateState(width, height)
|
|
22
|
+
protected fun updateScreenSizeFabric(width: Int, height: Int, headerHeight: Double) {
|
|
23
|
+
updateState(width, height, headerHeight)
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
@UiThread
|
|
25
|
-
fun updateState(width: Int, height: Int) {
|
|
27
|
+
fun updateState(width: Int, height: Int, headerHeight: Double) {
|
|
26
28
|
val realWidth: Float = PixelUtil.toDIPFromPixel(width.toFloat())
|
|
27
29
|
val realHeight: Float = PixelUtil.toDIPFromPixel(height.toFloat())
|
|
28
30
|
|
|
29
31
|
// Check incoming state values. If they're already the correct value, return early to prevent
|
|
30
32
|
// infinite UpdateState/SetState loop.
|
|
31
|
-
val
|
|
32
|
-
if (
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (abs(stateFrameWidth - realWidth) < delta &&
|
|
37
|
-
abs(stateFrameHeight - realHeight) < delta
|
|
38
|
-
) {
|
|
39
|
-
return
|
|
40
|
-
}
|
|
33
|
+
val delta = 0.9f
|
|
34
|
+
if (abs(lastSetWidth - realWidth) < delta &&
|
|
35
|
+
abs(lastSetHeight - realHeight) < delta
|
|
36
|
+
) {
|
|
37
|
+
return
|
|
41
38
|
}
|
|
39
|
+
|
|
40
|
+
lastSetWidth = realWidth
|
|
41
|
+
lastSetHeight = realHeight
|
|
42
|
+
|
|
42
43
|
mFabricViewStateManager.setState {
|
|
43
44
|
val map: WritableMap = WritableNativeMap()
|
|
44
45
|
map.putDouble("frameWidth", realWidth.toDouble())
|
|
45
46
|
map.putDouble("frameHeight", realHeight.toDouble())
|
|
47
|
+
map.putDouble("contentOffsetX", 0.0)
|
|
48
|
+
map.putDouble("contentOffsetY", headerHeight)
|
|
46
49
|
map
|
|
47
50
|
}
|
|
48
51
|
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#include <array>
|
|
2
|
+
#include <mutex>
|
|
3
|
+
#include <jni.h>
|
|
4
|
+
#include <jsi/jsi.h>
|
|
5
|
+
#include "RNScreensTurboModule.h"
|
|
6
|
+
|
|
7
|
+
using namespace facebook;
|
|
8
|
+
|
|
9
|
+
jobject globalThis;
|
|
10
|
+
|
|
11
|
+
extern "C"
|
|
12
|
+
JNIEXPORT void JNICALL
|
|
13
|
+
Java_com_swmansion_rnscreens_ScreensModule_nativeInstall(JNIEnv *env, jobject thiz, jlong jsiPtr) {
|
|
14
|
+
auto runtime = reinterpret_cast<jsi::Runtime*>(jsiPtr);
|
|
15
|
+
if (!runtime) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
jsi::Runtime &rt = *runtime;
|
|
19
|
+
globalThis = env->NewGlobalRef(thiz);
|
|
20
|
+
JavaVM* jvm;
|
|
21
|
+
env->GetJavaVM(&jvm);
|
|
22
|
+
|
|
23
|
+
const auto &startTransition = [jvm](int stackTag) -> std::array<int, 2> {
|
|
24
|
+
JNIEnv* currentEnv;
|
|
25
|
+
if (jvm->AttachCurrentThread(¤tEnv, nullptr) != JNI_OK) {
|
|
26
|
+
return {0, 0};
|
|
27
|
+
}
|
|
28
|
+
jclass javaClass = currentEnv->GetObjectClass(globalThis);
|
|
29
|
+
jmethodID methodID = currentEnv->GetMethodID(
|
|
30
|
+
javaClass,
|
|
31
|
+
"startTransition",
|
|
32
|
+
"(Ljava/lang/Integer;)[I"
|
|
33
|
+
);
|
|
34
|
+
jclass integerClass = currentEnv->FindClass("java/lang/Integer");
|
|
35
|
+
jmethodID integerConstructor = currentEnv->GetMethodID(integerClass, "<init>", "(I)V");
|
|
36
|
+
jobject integerArg = currentEnv->NewObject(integerClass, integerConstructor, stackTag);
|
|
37
|
+
jintArray resultArray = (jintArray) currentEnv->CallObjectMethod(
|
|
38
|
+
globalThis,
|
|
39
|
+
methodID,
|
|
40
|
+
integerArg
|
|
41
|
+
);
|
|
42
|
+
std::array<int, 2> result = {-1, -1};
|
|
43
|
+
jint* elements = currentEnv->GetIntArrayElements(resultArray, nullptr);
|
|
44
|
+
if (elements != nullptr) {
|
|
45
|
+
result[0] = elements[0];
|
|
46
|
+
result[1] = elements[1];
|
|
47
|
+
currentEnv->ReleaseIntArrayElements(resultArray, elements, JNI_ABORT);
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const auto &updateTransition = [jvm](int stackTag, double progress){
|
|
53
|
+
JNIEnv* currentEnv;
|
|
54
|
+
if (jvm->AttachCurrentThread(¤tEnv, nullptr) != JNI_OK) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
jclass javaClass = currentEnv->GetObjectClass(globalThis);
|
|
58
|
+
jmethodID methodID = currentEnv->GetMethodID(
|
|
59
|
+
javaClass,
|
|
60
|
+
"updateTransition",
|
|
61
|
+
"(D)V"
|
|
62
|
+
);
|
|
63
|
+
currentEnv->CallVoidMethod(globalThis, methodID, progress);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const auto &finishTransition = [jvm](int stackTag, bool canceled){
|
|
67
|
+
JNIEnv* currentEnv;
|
|
68
|
+
if (jvm->AttachCurrentThread(¤tEnv, nullptr) != JNI_OK) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
jclass javaClass = currentEnv->GetObjectClass(globalThis);
|
|
72
|
+
jmethodID methodID = currentEnv->GetMethodID(
|
|
73
|
+
javaClass,
|
|
74
|
+
"finishTransition",
|
|
75
|
+
"(Ljava/lang/Integer;Z)V"
|
|
76
|
+
);
|
|
77
|
+
jclass integerClass = currentEnv->FindClass("java/lang/Integer");
|
|
78
|
+
jmethodID integerConstructor = currentEnv->GetMethodID(integerClass, "<init>", "(I)V");
|
|
79
|
+
jobject integerArg = currentEnv->NewObject(integerClass, integerConstructor, stackTag);
|
|
80
|
+
currentEnv->CallVoidMethod(globalThis, methodID, integerArg, canceled);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const auto &disableSwipeBackForTopScreen = [](int _stackTag){
|
|
84
|
+
// no implementation for Android
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
auto rnScreensModule = std::make_shared<RNScreens::RNScreensTurboModule>(
|
|
88
|
+
startTransition,
|
|
89
|
+
updateTransition,
|
|
90
|
+
finishTransition,
|
|
91
|
+
disableSwipeBackForTopScreen
|
|
92
|
+
);
|
|
93
|
+
auto rnScreensModuleHostObject = jsi::Object::createFromHostObject(rt, rnScreensModule);
|
|
94
|
+
rt.global().setProperty(
|
|
95
|
+
rt,
|
|
96
|
+
RNScreens::RNScreensTurboModule::MODULE_NAME,
|
|
97
|
+
std::move(rnScreensModuleHostObject)
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
void JNICALL JNI_OnUnload(JavaVM *jvm, void *) {
|
|
102
|
+
JNIEnv *env;
|
|
103
|
+
if (jvm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (globalThis != nullptr) {
|
|
107
|
+
env->DeleteGlobalRef(globalThis);
|
|
108
|
+
globalThis = nullptr;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -13,17 +13,17 @@ class CustomSearchView(context: Context, fragment: Fragment) : SearchView(contex
|
|
|
13
13
|
setOnSearchClickListener - https://developer.android.com/reference/android/widget/SearchView#setOnSearchClickListener(android.view.View.OnClickListener)
|
|
14
14
|
setOnCloseListener - https://developer.android.com/reference/android/widget/SearchView#setOnCloseListener(android.widget.SearchView.OnCloseListener)
|
|
15
15
|
*/
|
|
16
|
-
private var
|
|
17
|
-
private var
|
|
16
|
+
private var onCloseListener: OnCloseListener? = null
|
|
17
|
+
private var onSearchClickedListener: OnClickListener? = null
|
|
18
18
|
|
|
19
|
-
private var
|
|
19
|
+
private var onBackPressedCallback: OnBackPressedCallback =
|
|
20
20
|
object : OnBackPressedCallback(true) {
|
|
21
21
|
override fun handleOnBackPressed() {
|
|
22
22
|
isIconified = true
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
private val backPressOverrider = FragmentBackPressOverrider(fragment,
|
|
26
|
+
private val backPressOverrider = FragmentBackPressOverrider(fragment, onBackPressedCallback)
|
|
27
27
|
|
|
28
28
|
var overrideBackAction: Boolean
|
|
29
29
|
set(value) {
|
|
@@ -40,12 +40,17 @@ class CustomSearchView(context: Context, fragment: Fragment) : SearchView(contex
|
|
|
40
40
|
|
|
41
41
|
fun setText(text: String) = setQuery(text, false)
|
|
42
42
|
|
|
43
|
+
fun cancelSearch() {
|
|
44
|
+
clearText()
|
|
45
|
+
setIconified(true)
|
|
46
|
+
}
|
|
47
|
+
|
|
43
48
|
override fun setOnCloseListener(listener: OnCloseListener?) {
|
|
44
|
-
|
|
49
|
+
onCloseListener = listener
|
|
45
50
|
}
|
|
46
51
|
|
|
47
52
|
override fun setOnSearchClickListener(listener: OnClickListener?) {
|
|
48
|
-
|
|
53
|
+
onSearchClickedListener = listener
|
|
49
54
|
}
|
|
50
55
|
|
|
51
56
|
override fun onAttachedToWindow() {
|
|
@@ -62,12 +67,12 @@ class CustomSearchView(context: Context, fragment: Fragment) : SearchView(contex
|
|
|
62
67
|
|
|
63
68
|
init {
|
|
64
69
|
super.setOnSearchClickListener { v ->
|
|
65
|
-
|
|
70
|
+
onSearchClickedListener?.onClick(v)
|
|
66
71
|
backPressOverrider.maybeAddBackCallback()
|
|
67
72
|
}
|
|
68
73
|
|
|
69
74
|
super.setOnCloseListener {
|
|
70
|
-
val result =
|
|
75
|
+
val result = onCloseListener?.onClose() ?: false
|
|
71
76
|
backPressOverrider.removeBackCallbackIfAdded()
|
|
72
77
|
result
|
|
73
78
|
}
|
|
@@ -5,25 +5,25 @@ import androidx.fragment.app.Fragment
|
|
|
5
5
|
|
|
6
6
|
class FragmentBackPressOverrider(
|
|
7
7
|
private val fragment: Fragment,
|
|
8
|
-
private val
|
|
8
|
+
private val onBackPressedCallback: OnBackPressedCallback
|
|
9
9
|
) {
|
|
10
|
-
private var
|
|
10
|
+
private var isCallbackAdded: Boolean = false
|
|
11
11
|
var overrideBackAction: Boolean = true
|
|
12
12
|
|
|
13
13
|
fun maybeAddBackCallback() {
|
|
14
|
-
if (!
|
|
14
|
+
if (!isCallbackAdded && overrideBackAction) {
|
|
15
15
|
fragment.activity?.onBackPressedDispatcher?.addCallback(
|
|
16
16
|
fragment,
|
|
17
|
-
|
|
17
|
+
onBackPressedCallback
|
|
18
18
|
)
|
|
19
|
-
|
|
19
|
+
isCallbackAdded = true
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
fun removeBackCallbackIfAdded() {
|
|
24
|
-
if (
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
if (isCallbackAdded) {
|
|
25
|
+
onBackPressedCallback.remove()
|
|
26
|
+
isCallbackAdded = false
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.swmansion.rnscreens
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
4
|
+
|
|
5
|
+
@ReactModule(name = ModalScreenViewManager.REACT_CLASS)
|
|
6
|
+
class ModalScreenViewManager : ScreenViewManager() {
|
|
7
|
+
override fun getName() = REACT_CLASS
|
|
8
|
+
|
|
9
|
+
companion object {
|
|
10
|
+
const val REACT_CLASS = "RNSModalScreen"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -1,21 +1,54 @@
|
|
|
1
1
|
package com.swmansion.rnscreens
|
|
2
2
|
|
|
3
|
-
import com.facebook.react.
|
|
3
|
+
import com.facebook.react.TurboReactPackage
|
|
4
4
|
import com.facebook.react.bridge.NativeModule
|
|
5
5
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.annotations.ReactModuleList
|
|
7
|
+
import com.facebook.react.module.model.ReactModuleInfo
|
|
8
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
6
9
|
import com.facebook.react.uimanager.ViewManager
|
|
7
10
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
@ReactModuleList(
|
|
12
|
+
nativeModules = [
|
|
13
|
+
ScreensModule::class
|
|
14
|
+
]
|
|
15
|
+
)
|
|
16
|
+
class RNScreensPackage : TurboReactPackage() {
|
|
12
17
|
override fun createViewManagers(reactContext: ReactApplicationContext) =
|
|
13
18
|
listOf<ViewManager<*, *>>(
|
|
14
19
|
ScreenContainerViewManager(),
|
|
15
20
|
ScreenViewManager(),
|
|
21
|
+
ModalScreenViewManager(),
|
|
16
22
|
ScreenStackViewManager(),
|
|
17
23
|
ScreenStackHeaderConfigViewManager(),
|
|
18
24
|
ScreenStackHeaderSubviewManager(),
|
|
19
25
|
SearchBarManager()
|
|
20
26
|
)
|
|
27
|
+
|
|
28
|
+
override fun getModule(
|
|
29
|
+
s: String,
|
|
30
|
+
reactApplicationContext: ReactApplicationContext
|
|
31
|
+
): NativeModule? {
|
|
32
|
+
when (s) {
|
|
33
|
+
ScreensModule.NAME -> return ScreensModule(reactApplicationContext)
|
|
34
|
+
}
|
|
35
|
+
return null
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
|
|
39
|
+
return ReactModuleInfoProvider {
|
|
40
|
+
val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
|
|
41
|
+
val isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
|
|
42
|
+
moduleInfos[ScreensModule.NAME] = ReactModuleInfo(
|
|
43
|
+
ScreensModule.NAME,
|
|
44
|
+
ScreensModule.NAME,
|
|
45
|
+
false, // canOverrideExistingModule
|
|
46
|
+
false, // needsEagerInit
|
|
47
|
+
true, // hasConstants
|
|
48
|
+
false, // isCxxModule
|
|
49
|
+
isTurboModule
|
|
50
|
+
)
|
|
51
|
+
moduleInfos
|
|
52
|
+
}
|
|
53
|
+
}
|
|
21
54
|
}
|