@amazon-devices/react-native-screens 2.0.1758683737
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -0
- package/README.md +223 -0
- package/RNScreens.podspec +53 -0
- package/SystemBundles/8f5a820b958535e533acb38dbc0c72c1837721b9db075f4a1740e42b9fee3910.bundle +33668 -0
- package/SystemBundles/8f5a820b958535e533acb38dbc0c72c1837721b9db075f4a1740e42b9fee3910.map +1 -0
- package/SystemModules/amzn__react-native-screens.modules.txt +101 -0
- package/SystemModules/amzn__react-native-screens.private.modules.txt +244 -0
- package/SystemModules/keplerscript-system-bundle-config.json +7 -0
- package/THIRD_PARTY_NOTICES.txt +707 -0
- package/android/build.gradle +133 -0
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +49 -0
- package/android/src/main/AndroidManifest.xml +5 -0
- package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +77 -0
- package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +29 -0
- package/android/src/main/java/com/swmansion/rnscreens/FragmentHolder.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +21 -0
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +289 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +372 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +40 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenEventDispatcher.kt +21 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +331 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +336 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +282 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +15 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +398 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +204 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +38 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +41 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +75 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +186 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +296 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +19 -0
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +133 -0
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +178 -0
- package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +67 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +26 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAppearEvent.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDisappearEvent.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDismissedEvent.kt +20 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +32 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillAppearEvent.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillDisappearEvent.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +28 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +24 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/DeviceUtils.kt +12 -0
- package/android/src/main/jni/CMakeLists.txt +72 -0
- package/android/src/main/jni/rnscreens.cpp +16 -0
- package/android/src/main/jni/rnscreens.h +28 -0
- package/android/src/main/res/base/anim/rns_default_enter_in.xml +18 -0
- package/android/src/main/res/base/anim/rns_default_enter_out.xml +19 -0
- package/android/src/main/res/base/anim/rns_default_exit_in.xml +17 -0
- package/android/src/main/res/base/anim/rns_default_exit_out.xml +18 -0
- package/android/src/main/res/base/anim/rns_fade_from_bottom.xml +14 -0
- package/android/src/main/res/base/anim/rns_fade_in.xml +7 -0
- package/android/src/main/res/base/anim/rns_fade_out.xml +7 -0
- package/android/src/main/res/base/anim/rns_fade_to_bottom.xml +15 -0
- package/android/src/main/res/base/anim/rns_no_animation_20.xml +6 -0
- package/android/src/main/res/base/anim/rns_no_animation_250.xml +7 -0
- package/android/src/main/res/base/anim/rns_no_animation_350.xml +6 -0
- package/android/src/main/res/base/anim/rns_no_animation_medium.xml +7 -0
- package/android/src/main/res/base/anim/rns_slide_in_from_bottom.xml +7 -0
- package/android/src/main/res/base/anim/rns_slide_in_from_left.xml +5 -0
- package/android/src/main/res/base/anim/rns_slide_in_from_right.xml +5 -0
- package/android/src/main/res/base/anim/rns_slide_out_to_bottom.xml +7 -0
- package/android/src/main/res/base/anim/rns_slide_out_to_left.xml +5 -0
- package/android/src/main/res/base/anim/rns_slide_out_to_right.xml +5 -0
- package/android/src/main/res/base/anim/rns_standard_accelerate_interpolator.xml +6 -0
- package/android/src/main/res/v33/anim-v33/rns_default_enter_in.xml +38 -0
- package/android/src/main/res/v33/anim-v33/rns_default_enter_out.xml +38 -0
- package/android/src/main/res/v33/anim-v33/rns_default_exit_in.xml +38 -0
- package/android/src/main/res/v33/anim-v33/rns_default_exit_out.xml +38 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +111 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +44 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +107 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +42 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerDelegate.java +31 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerInterface.java +17 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerInterface.java +16 -0
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +10 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +41 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +9 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +30 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +14 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +45 -0
- package/ios/RCTImageComponentView+RNSScreenStackHeaderConfig.h +11 -0
- package/ios/RCTImageComponentView+RNSScreenStackHeaderConfig.mm +14 -0
- package/ios/RNSConvert.h +36 -0
- package/ios/RNSConvert.mm +154 -0
- package/ios/RNSEnums.h +71 -0
- package/ios/RNSFullWindowOverlay.h +34 -0
- package/ios/RNSFullWindowOverlay.mm +241 -0
- package/ios/RNSScreen.h +144 -0
- package/ios/RNSScreen.mm +1599 -0
- package/ios/RNSScreenContainer.h +45 -0
- package/ios/RNSScreenContainer.mm +343 -0
- package/ios/RNSScreenNavigationContainer.h +16 -0
- package/ios/RNSScreenNavigationContainer.mm +66 -0
- package/ios/RNSScreenStack.h +37 -0
- package/ios/RNSScreenStack.mm +1111 -0
- package/ios/RNSScreenStackAnimator.h +8 -0
- package/ios/RNSScreenStackAnimator.mm +320 -0
- package/ios/RNSScreenStackHeaderConfig.h +74 -0
- package/ios/RNSScreenStackHeaderConfig.mm +967 -0
- package/ios/RNSScreenStackHeaderSubview.h +44 -0
- package/ios/RNSScreenStackHeaderSubview.mm +147 -0
- package/ios/RNSScreenWindowTraits.h +26 -0
- package/ios/RNSScreenWindowTraits.mm +266 -0
- package/ios/RNSSearchBar.h +43 -0
- package/ios/RNSSearchBar.mm +465 -0
- package/ios/RNScreens.xcodeproj/project.pbxproj +461 -0
- package/ios/UIViewController+RNScreens.h +9 -0
- package/ios/UIViewController+RNScreens.mm +78 -0
- package/ios/UIWindow+RNScreens.h +9 -0
- package/ios/UIWindow+RNScreens.mm +17 -0
- package/ios/events/RNSHeaderHeightChangeEvent.h +8 -0
- package/ios/events/RNSHeaderHeightChangeEvent.mm +44 -0
- package/ios/events/RNSScreenViewEvent.h +12 -0
- package/ios/events/RNSScreenViewEvent.mm +59 -0
- package/ios/utils/RNSUIBarButtonItem.h +5 -0
- package/ios/utils/RNSUIBarButtonItem.mm +22 -0
- package/kepler-compatibility.json +8 -0
- package/kepler-transformed-package-info.json +3 -0
- package/lib/commonjs/TransitionProgressContext.js +11 -0
- package/lib/commonjs/TransitionProgressContext.js.map +1 -0
- package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js +11 -0
- package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenContainerNativeComponent.js +33 -0
- package/lib/commonjs/fabric/ScreenContainerNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenNativeComponent.js +70 -0
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js +11 -0
- package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js +31 -0
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js +12 -0
- package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenStackNativeComponent.js +35 -0
- package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/SearchBarNativeComponent.js +19 -0
- package/lib/commonjs/fabric/SearchBarNativeComponent.js.map +1 -0
- package/lib/commonjs/index.js +147 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/index.native.js +407 -0
- package/lib/commonjs/index.native.js.map +1 -0
- package/lib/commonjs/native-stack/index.js +49 -0
- package/lib/commonjs/native-stack/index.js.map +1 -0
- package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js +75 -0
- package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js.map +1 -0
- package/lib/commonjs/native-stack/types.js +6 -0
- package/lib/commonjs/native-stack/types.js.map +1 -0
- package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js +12 -0
- package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -0
- package/lib/commonjs/native-stack/utils/HeaderHeightContext.js +12 -0
- package/lib/commonjs/native-stack/utils/HeaderHeightContext.js.map +1 -0
- package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js +75 -0
- package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js.map +1 -0
- package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js +35 -0
- package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js.map +1 -0
- package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js +19 -0
- package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -0
- package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +54 -0
- package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -0
- package/lib/commonjs/native-stack/utils/useHeaderHeight.js +19 -0
- package/lib/commonjs/native-stack/utils/useHeaderHeight.js.map +1 -0
- package/lib/commonjs/native-stack/views/FontProcessor.js +21 -0
- package/lib/commonjs/native-stack/views/FontProcessor.js.map +1 -0
- package/lib/commonjs/native-stack/views/HeaderConfig.js +141 -0
- package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -0
- package/lib/commonjs/native-stack/views/NativeStackView.js +354 -0
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -0
- package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js +12 -0
- package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js.map +1 -0
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +101 -0
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
- package/lib/commonjs/reanimated/ReanimatedScreen.js +22 -0
- package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -0
- package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +47 -0
- package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -0
- package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js +12 -0
- package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js.map +1 -0
- package/lib/commonjs/reanimated/index.js +28 -0
- package/lib/commonjs/reanimated/index.js.map +1 -0
- package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js +19 -0
- package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js.map +1 -0
- package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js +19 -0
- package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js.map +1 -0
- package/lib/commonjs/types.js +6 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/useTransitionProgress.js +19 -0
- package/lib/commonjs/useTransitionProgress.js.map +1 -0
- package/lib/commonjs/utils.js +21 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/module/TransitionProgressContext.js +3 -0
- package/lib/module/TransitionProgressContext.js.map +1 -0
- package/lib/module/fabric/FullWindowOverlayNativeComponent.js +4 -0
- package/lib/module/fabric/FullWindowOverlayNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenContainerNativeComponent.js +25 -0
- package/lib/module/fabric/ScreenContainerNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenNativeComponent.js +63 -0
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js +4 -0
- package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js +23 -0
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js +7 -0
- package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenStackNativeComponent.js +28 -0
- package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -0
- package/lib/module/fabric/SearchBarNativeComponent.js +10 -0
- package/lib/module/fabric/SearchBarNativeComponent.js.map +1 -0
- package/lib/module/index.js +67 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/index.native.js +410 -0
- package/lib/module/index.native.js.map +1 -0
- package/lib/module/native-stack/index.js +22 -0
- package/lib/module/native-stack/index.js.map +1 -0
- package/lib/module/native-stack/navigators/createNativeStackNavigator.js +72 -0
- package/lib/module/native-stack/navigators/createNativeStackNavigator.js.map +1 -0
- package/lib/module/native-stack/types.js +2 -0
- package/lib/module/native-stack/types.js.map +1 -0
- package/lib/module/native-stack/utils/AnimatedHeaderHeightContext.js +4 -0
- package/lib/module/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -0
- package/lib/module/native-stack/utils/HeaderHeightContext.js +4 -0
- package/lib/module/native-stack/utils/HeaderHeightContext.js.map +1 -0
- package/lib/module/native-stack/utils/SafeAreaProviderCompat.js +68 -0
- package/lib/module/native-stack/utils/SafeAreaProviderCompat.js.map +1 -0
- package/lib/module/native-stack/utils/getDefaultHeaderHeight.js +29 -0
- package/lib/module/native-stack/utils/getDefaultHeaderHeight.js.map +1 -0
- package/lib/module/native-stack/utils/useAnimatedHeaderHeight.js +10 -0
- package/lib/module/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -0
- package/lib/module/native-stack/utils/useBackPressSubscription.js +47 -0
- package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -0
- package/lib/module/native-stack/utils/useHeaderHeight.js +10 -0
- package/lib/module/native-stack/utils/useHeaderHeight.js.map +1 -0
- package/lib/module/native-stack/views/FontProcessor.js +13 -0
- package/lib/module/native-stack/views/FontProcessor.js.map +1 -0
- package/lib/module/native-stack/views/HeaderConfig.js +132 -0
- package/lib/module/native-stack/views/HeaderConfig.js.map +1 -0
- package/lib/module/native-stack/views/NativeStackView.js +355 -0
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -0
- package/lib/module/reanimated/ReanimatedHeaderHeightContext.js +5 -0
- package/lib/module/reanimated/ReanimatedHeaderHeightContext.js.map +1 -0
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js +97 -0
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
- package/lib/module/reanimated/ReanimatedScreen.js +17 -0
- package/lib/module/reanimated/ReanimatedScreen.js.map +1 -0
- package/lib/module/reanimated/ReanimatedScreenProvider.js +40 -0
- package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -0
- package/lib/module/reanimated/ReanimatedTransitionProgressContext.js +5 -0
- package/lib/module/reanimated/ReanimatedTransitionProgressContext.js.map +1 -0
- package/lib/module/reanimated/index.js +4 -0
- package/lib/module/reanimated/index.js.map +1 -0
- package/lib/module/reanimated/useReanimatedHeaderHeight.js +10 -0
- package/lib/module/reanimated/useReanimatedHeaderHeight.js.map +1 -0
- package/lib/module/reanimated/useReanimatedTransitionProgress.js +10 -0
- package/lib/module/reanimated/useReanimatedTransitionProgress.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/useTransitionProgress.js +10 -0
- package/lib/module/useTransitionProgress.js.map +1 -0
- package/lib/module/utils.js +14 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/typescript/TransitionProgressContext.d.ts +9 -0
- package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts +7 -0
- package/lib/typescript/fabric/ScreenContainerNativeComponent.d.ts +5 -0
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts +66 -0
- package/lib/typescript/fabric/ScreenNavigationContainerNativeComponent.d.ts +7 -0
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +33 -0
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +10 -0
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts +8 -0
- package/lib/typescript/fabric/SearchBarNativeComponent.d.ts +49 -0
- package/lib/typescript/index.d.ts +33 -0
- package/lib/typescript/index.native.d.ts +2 -0
- package/lib/typescript/native-stack/index.d.ts +19 -0
- package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts +6 -0
- package/lib/typescript/native-stack/types.d.ts +438 -0
- package/lib/typescript/native-stack/utils/AnimatedHeaderHeightContext.d.ts +4 -0
- package/lib/typescript/native-stack/utils/HeaderHeightContext.d.ts +3 -0
- package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts +11 -0
- package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts +7 -0
- package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts +1 -0
- package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts +16 -0
- package/lib/typescript/native-stack/utils/useHeaderHeight.d.ts +1 -0
- package/lib/typescript/native-stack/views/FontProcessor.d.ts +1 -0
- package/lib/typescript/native-stack/views/HeaderConfig.d.ts +8 -0
- package/lib/typescript/native-stack/views/NativeStackView.d.ts +10 -0
- package/lib/typescript/reanimated/ReanimatedHeaderHeightContext.d.ts +4 -0
- package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +5 -0
- package/lib/typescript/reanimated/ReanimatedScreen.d.ts +5 -0
- package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts +2 -0
- package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts +9 -0
- package/lib/typescript/reanimated/index.d.ts +3 -0
- package/lib/typescript/reanimated/useReanimatedHeaderHeight.d.ts +3 -0
- package/lib/typescript/reanimated/useReanimatedTransitionProgress.d.ts +11 -0
- package/lib/typescript/types.d.ts +612 -0
- package/lib/typescript/useTransitionProgress.d.ts +5 -0
- package/lib/typescript/utils.d.ts +3 -0
- package/native-stack/README.md +814 -0
- package/native-stack/package.json +6 -0
- package/package.json +1 -0
- package/react-native.config.js +42 -0
- package/reanimated/package.json +6 -0
- package/src/TransitionProgressContext.tsx +12 -0
- package/src/fabric/FullWindowOverlayNativeComponent.ts +7 -0
- package/src/fabric/ScreenContainerNativeComponent.ts +28 -0
- package/src/fabric/ScreenNativeComponent.ts +158 -0
- package/src/fabric/ScreenNavigationContainerNativeComponent.ts +10 -0
- package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +61 -0
- package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +22 -0
- package/src/fabric/ScreenStackNativeComponent.ts +33 -0
- package/src/fabric/SearchBarNativeComponent.ts +79 -0
- package/src/index.native.tsx +599 -0
- package/src/index.tsx +119 -0
- package/src/native-stack/index.tsx +27 -0
- package/src/native-stack/navigators/createNativeStackNavigator.tsx +107 -0
- package/src/native-stack/types.tsx +486 -0
- package/src/native-stack/utils/AnimatedHeaderHeightContext.tsx +8 -0
- package/src/native-stack/utils/HeaderHeightContext.tsx +5 -0
- package/src/native-stack/utils/SafeAreaProviderCompat.tsx +78 -0
- package/src/native-stack/utils/getDefaultHeaderHeight.tsx +41 -0
- package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +15 -0
- package/src/native-stack/utils/useBackPressSubscription.tsx +66 -0
- package/src/native-stack/utils/useHeaderHeight.tsx +15 -0
- package/src/native-stack/views/FontProcessor.tsx +14 -0
- package/src/native-stack/views/HeaderConfig.tsx +187 -0
- package/src/native-stack/views/NativeStackView.tsx +466 -0
- package/src/reanimated/ReanimatedHeaderHeightContext.tsx +7 -0
- package/src/reanimated/ReanimatedNativeStackScreen.tsx +130 -0
- package/src/reanimated/ReanimatedScreen.tsx +25 -0
- package/src/reanimated/ReanimatedScreenProvider.tsx +42 -0
- package/src/reanimated/ReanimatedTransitionProgressContext.tsx +13 -0
- package/src/reanimated/index.tsx +3 -0
- package/src/reanimated/useReanimatedHeaderHeight.tsx +14 -0
- package/src/reanimated/useReanimatedTransitionProgress.tsx +14 -0
- package/src/types.tsx +699 -0
- package/src/useTransitionProgress.tsx +15 -0
- package/src/utils.ts +18 -0
- package/windows/README.md +25 -0
- package/windows/RNScreens/PropertySheet.props +16 -0
- package/windows/RNScreens/RNScreens.cpp +66 -0
- package/windows/RNScreens/RNScreens.def +3 -0
- package/windows/RNScreens/RNScreens.h +41 -0
- package/windows/RNScreens/RNScreens.idl +8 -0
- package/windows/RNScreens/RNScreens.vcxproj +187 -0
- package/windows/RNScreens/RNScreens.vcxproj.filters +52 -0
- package/windows/RNScreens/ReactPackageProvider.cpp +30 -0
- package/windows/RNScreens/ReactPackageProvider.h +17 -0
- package/windows/RNScreens/ReactPackageProvider.idl +9 -0
- package/windows/RNScreens/Screen.cpp +122 -0
- package/windows/RNScreens/Screen.h +64 -0
- package/windows/RNScreens/ScreenContainer.cpp +49 -0
- package/windows/RNScreens/ScreenContainer.h +23 -0
- package/windows/RNScreens/ScreenContainerViewManager.cpp +133 -0
- package/windows/RNScreens/ScreenContainerViewManager.h +78 -0
- package/windows/RNScreens/ScreenStack.cpp +65 -0
- package/windows/RNScreens/ScreenStack.h +23 -0
- package/windows/RNScreens/ScreenStackHeaderConfig.cpp +19 -0
- package/windows/RNScreens/ScreenStackHeaderConfig.h +14 -0
- package/windows/RNScreens/ScreenStackHeaderConfigViewManager.cpp +89 -0
- package/windows/RNScreens/ScreenStackHeaderConfigViewManager.h +62 -0
- package/windows/RNScreens/ScreenStackViewManager.cpp +132 -0
- package/windows/RNScreens/ScreenStackViewManager.h +78 -0
- package/windows/RNScreens/ScreenViewManager.cpp +154 -0
- package/windows/RNScreens/ScreenViewManager.h +78 -0
- package/windows/RNScreens/packages.config +4 -0
- package/windows/RNScreens/pch.cpp +1 -0
- package/windows/RNScreens/pch.h +9 -0
- package/windows/RNScreens62.sln +254 -0
- package/windows/RNScreens63.sln +225 -0
- package/windows/RNScreens65.sln +144 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
|
|
2
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
3
|
+
#import <React/RCTViewComponentView.h>
|
|
4
|
+
#endif
|
|
5
|
+
|
|
6
|
+
#import <React/RCTConvert.h>
|
|
7
|
+
#import <React/RCTViewManager.h>
|
|
8
|
+
#import "RNSEnums.h"
|
|
9
|
+
|
|
10
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
11
|
+
|
|
12
|
+
@interface RNSScreenStackHeaderSubview :
|
|
13
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
14
|
+
RCTViewComponentView
|
|
15
|
+
#else
|
|
16
|
+
UIView
|
|
17
|
+
#endif
|
|
18
|
+
|
|
19
|
+
@property (nonatomic) RNSScreenStackHeaderSubviewType type;
|
|
20
|
+
|
|
21
|
+
@property (nonatomic, weak) UIView *reactSuperview;
|
|
22
|
+
|
|
23
|
+
@property (nonatomic, weak) RCTBridge *bridge;
|
|
24
|
+
|
|
25
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
26
|
+
#else
|
|
27
|
+
- (instancetype)initWithBridge:(RCTBridge *)bridge;
|
|
28
|
+
#endif // RCT_NEW_ARCH_ENABLED
|
|
29
|
+
|
|
30
|
+
@end
|
|
31
|
+
|
|
32
|
+
@interface RNSScreenStackHeaderSubviewManager : RCTViewManager
|
|
33
|
+
|
|
34
|
+
@property (nonatomic) RNSScreenStackHeaderSubviewType type;
|
|
35
|
+
|
|
36
|
+
@end
|
|
37
|
+
|
|
38
|
+
@interface RCTConvert (RNSScreenStackHeaderSubview)
|
|
39
|
+
|
|
40
|
+
+ (RNSScreenStackHeaderSubviewType)RNSScreenStackHeaderSubviewType:(id)json;
|
|
41
|
+
|
|
42
|
+
@end
|
|
43
|
+
|
|
44
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
#import "RNSScreenStackHeaderSubview.h"
|
|
2
|
+
#import "RNSConvert.h"
|
|
3
|
+
|
|
4
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
5
|
+
#import <react/renderer/components/rnscreens/ComponentDescriptors.h>
|
|
6
|
+
#import <react/renderer/components/rnscreens/EventEmitters.h>
|
|
7
|
+
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
8
|
+
|
|
9
|
+
#import <React/RCTConversions.h>
|
|
10
|
+
#import <React/RCTFabricComponentsPlugins.h>
|
|
11
|
+
#endif // RCT_NEW_ARCH_ENABLED
|
|
12
|
+
|
|
13
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
14
|
+
namespace react = facebook::react;
|
|
15
|
+
#endif // RCT_NEW_ARCH_ENABLED
|
|
16
|
+
|
|
17
|
+
@interface RCTBridge (Private)
|
|
18
|
+
+ (RCTBridge *)currentBridge;
|
|
19
|
+
@end
|
|
20
|
+
|
|
21
|
+
@implementation RNSScreenStackHeaderSubview
|
|
22
|
+
|
|
23
|
+
#pragma mark - Common
|
|
24
|
+
|
|
25
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
26
|
+
|
|
27
|
+
#pragma mark - Fabric specific
|
|
28
|
+
|
|
29
|
+
- (instancetype)initWithFrame:(CGRect)frame
|
|
30
|
+
{
|
|
31
|
+
if (self = [super initWithFrame:frame]) {
|
|
32
|
+
static const auto defaultProps = std::make_shared<const react::RNSScreenStackHeaderSubviewProps>();
|
|
33
|
+
_props = defaultProps;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return self;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
#pragma mark - RCTComponentViewProtocol
|
|
40
|
+
|
|
41
|
+
- (void)prepareForRecycle
|
|
42
|
+
{
|
|
43
|
+
[super prepareForRecycle];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
- (void)updateProps:(react::Props::Shared const &)props oldProps:(react::Props::Shared const &)oldProps
|
|
47
|
+
{
|
|
48
|
+
const auto &newHeaderSubviewProps = *std::static_pointer_cast<const react::RNSScreenStackHeaderSubviewProps>(props);
|
|
49
|
+
|
|
50
|
+
[self setType:[RNSConvert RNSScreenStackHeaderSubviewTypeFromCppEquivalent:newHeaderSubviewProps.type]];
|
|
51
|
+
[super updateProps:props oldProps:oldProps];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
+ (react::ComponentDescriptorProvider)componentDescriptorProvider
|
|
55
|
+
{
|
|
56
|
+
return react::concreteComponentDescriptorProvider<react::RNSScreenStackHeaderSubviewComponentDescriptor>();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
- (void)updateLayoutMetrics:(const react::LayoutMetrics &)layoutMetrics
|
|
60
|
+
oldLayoutMetrics:(const react::LayoutMetrics &)oldLayoutMetrics
|
|
61
|
+
{
|
|
62
|
+
CGRect frame = RCTCGRectFromRect(layoutMetrics.frame);
|
|
63
|
+
// CALayer will crash if we pass NaN or Inf values.
|
|
64
|
+
// It's unclear how to detect this case on cross-platform manner holistically, so we have to do it on the mounting
|
|
65
|
+
// layer as well. NaN/Inf is a kinda valid result of some math operations. Even if we can (and should) detect (and
|
|
66
|
+
// report early) incorrect (NaN and Inf) values which come from JavaScript side, we sometimes cannot backtrace the
|
|
67
|
+
// sources of a calculation that produced an incorrect/useless result.
|
|
68
|
+
if (!std::isfinite(frame.size.width) || !std::isfinite(frame.size.height)) {
|
|
69
|
+
RCTLogWarn(
|
|
70
|
+
@"-[UIView(ComponentViewProtocol) updateLayoutMetrics:oldLayoutMetrics:]: Received invalid layout metrics (%@) for a view (%@).",
|
|
71
|
+
NSStringFromCGRect(frame),
|
|
72
|
+
self);
|
|
73
|
+
} else {
|
|
74
|
+
self.bounds = CGRect{CGPointZero, frame.size};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
#else
|
|
79
|
+
#pragma mark - Paper specific
|
|
80
|
+
|
|
81
|
+
- (instancetype)initWithBridge:(RCTBridge *)bridge
|
|
82
|
+
{
|
|
83
|
+
if (self = [super init]) {
|
|
84
|
+
_bridge = bridge;
|
|
85
|
+
}
|
|
86
|
+
return self;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
- (void)reactSetFrame:(CGRect)frame
|
|
90
|
+
{
|
|
91
|
+
// Block any attempt to set coordinates on RNSScreenStackHeaderSubview. This
|
|
92
|
+
// makes UINavigationBar the only one to control the position of header content.
|
|
93
|
+
[super reactSetFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
#endif // RCT_NEW_ARCH_ENABLED
|
|
97
|
+
|
|
98
|
+
- (RCTBridge *)bridge
|
|
99
|
+
{
|
|
100
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
101
|
+
return [RCTBridge currentBridge];
|
|
102
|
+
#else
|
|
103
|
+
return _bridge;
|
|
104
|
+
#endif // RCT_NEW_ARCH_ENABLED
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@end
|
|
108
|
+
|
|
109
|
+
@implementation RNSScreenStackHeaderSubviewManager
|
|
110
|
+
|
|
111
|
+
RCT_EXPORT_MODULE()
|
|
112
|
+
|
|
113
|
+
RCT_EXPORT_VIEW_PROPERTY(type, RNSScreenStackHeaderSubviewType)
|
|
114
|
+
|
|
115
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
116
|
+
#else
|
|
117
|
+
- (UIView *)view
|
|
118
|
+
{
|
|
119
|
+
return [[RNSScreenStackHeaderSubview alloc] initWithBridge:self.bridge];
|
|
120
|
+
}
|
|
121
|
+
#endif
|
|
122
|
+
|
|
123
|
+
@end
|
|
124
|
+
|
|
125
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
126
|
+
Class<RCTComponentViewProtocol> RNSScreenStackHeaderSubviewCls(void)
|
|
127
|
+
{
|
|
128
|
+
return RNSScreenStackHeaderSubview.class;
|
|
129
|
+
}
|
|
130
|
+
#endif
|
|
131
|
+
|
|
132
|
+
@implementation RCTConvert (RNSScreenStackHeaderSubview)
|
|
133
|
+
|
|
134
|
+
RCT_ENUM_CONVERTER(
|
|
135
|
+
RNSScreenStackHeaderSubviewType,
|
|
136
|
+
(@{
|
|
137
|
+
@"back" : @(RNSScreenStackHeaderSubviewTypeBackButton),
|
|
138
|
+
@"left" : @(RNSScreenStackHeaderSubviewTypeLeft),
|
|
139
|
+
@"right" : @(RNSScreenStackHeaderSubviewTypeRight),
|
|
140
|
+
@"title" : @(RNSScreenStackHeaderSubviewTypeTitle),
|
|
141
|
+
@"center" : @(RNSScreenStackHeaderSubviewTypeCenter),
|
|
142
|
+
@"searchBar" : @(RNSScreenStackHeaderSubviewTypeSearchBar),
|
|
143
|
+
}),
|
|
144
|
+
RNSScreenStackHeaderSubviewTypeTitle,
|
|
145
|
+
integerValue)
|
|
146
|
+
|
|
147
|
+
@end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#import "RNSScreen.h"
|
|
2
|
+
|
|
3
|
+
@interface RNSScreenWindowTraits : NSObject
|
|
4
|
+
|
|
5
|
+
+ (void)updateWindowTraits;
|
|
6
|
+
|
|
7
|
+
#if !TARGET_OS_TV
|
|
8
|
+
+ (void)assertViewControllerBasedStatusBarAppearenceSet;
|
|
9
|
+
#endif
|
|
10
|
+
+ (void)updateStatusBarAppearance;
|
|
11
|
+
+ (void)enforceDesiredDeviceOrientation;
|
|
12
|
+
+ (void)updateHomeIndicatorAutoHidden;
|
|
13
|
+
|
|
14
|
+
#if !TARGET_OS_TV
|
|
15
|
+
+ (UIStatusBarStyle)statusBarStyleForRNSStatusBarStyle:(RNSStatusBarStyle)statusBarStyle;
|
|
16
|
+
+ (UIInterfaceOrientation)defaultOrientationForOrientationMask:(UIInterfaceOrientationMask)orientationMask;
|
|
17
|
+
+ (UIInterfaceOrientation)interfaceOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation;
|
|
18
|
+
+ (UIInterfaceOrientationMask)maskFromOrientation:(UIInterfaceOrientation)orientation;
|
|
19
|
+
#endif
|
|
20
|
+
|
|
21
|
+
+ (BOOL)shouldAskScreensForTrait:(RNSWindowTrait)trait
|
|
22
|
+
includingModals:(BOOL)includingModals
|
|
23
|
+
inViewController:(UIViewController *)vc;
|
|
24
|
+
+ (BOOL)shouldAskScreensForScreenOrientationInViewController:(UIViewController *)vc;
|
|
25
|
+
|
|
26
|
+
@end
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
#import "RNSScreenWindowTraits.h"
|
|
2
|
+
#import "RNSScreenContainer.h"
|
|
3
|
+
#import "RNSScreenStack.h"
|
|
4
|
+
|
|
5
|
+
@implementation RNSScreenWindowTraits
|
|
6
|
+
|
|
7
|
+
#if !TARGET_OS_TV
|
|
8
|
+
+ (void)assertViewControllerBasedStatusBarAppearenceSet
|
|
9
|
+
{
|
|
10
|
+
static dispatch_once_t once;
|
|
11
|
+
static bool viewControllerBasedAppearence;
|
|
12
|
+
dispatch_once(&once, ^{
|
|
13
|
+
viewControllerBasedAppearence =
|
|
14
|
+
[[[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIViewControllerBasedStatusBarAppearance"] boolValue];
|
|
15
|
+
});
|
|
16
|
+
if (!viewControllerBasedAppearence) {
|
|
17
|
+
RCTLogError(@"If you want to change the appearance of status bar, you have to change \
|
|
18
|
+
UIViewControllerBasedStatusBarAppearance key in the Info.plist to YES");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
#endif
|
|
22
|
+
|
|
23
|
+
+ (void)updateStatusBarAppearance
|
|
24
|
+
{
|
|
25
|
+
#if !TARGET_OS_TV
|
|
26
|
+
[UIView animateWithDuration:0.4
|
|
27
|
+
animations:^{ // duration based on "Programming iOS 13" p. 311 implementation
|
|
28
|
+
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
|
|
29
|
+
__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
|
|
30
|
+
if (@available(iOS 13, *)) {
|
|
31
|
+
UIWindow *firstWindow = [[[UIApplication sharedApplication] windows] firstObject];
|
|
32
|
+
if (firstWindow != nil) {
|
|
33
|
+
[[firstWindow rootViewController] setNeedsStatusBarAppearanceUpdate];
|
|
34
|
+
}
|
|
35
|
+
} else
|
|
36
|
+
#endif
|
|
37
|
+
{
|
|
38
|
+
[UIApplication.sharedApplication.keyWindow.rootViewController setNeedsStatusBarAppearanceUpdate];
|
|
39
|
+
}
|
|
40
|
+
}];
|
|
41
|
+
#endif
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
+ (void)updateHomeIndicatorAutoHidden
|
|
45
|
+
{
|
|
46
|
+
#if !TARGET_OS_TV
|
|
47
|
+
|
|
48
|
+
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
|
|
49
|
+
__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
|
|
50
|
+
if (@available(iOS 13, *)) {
|
|
51
|
+
UIWindow *firstWindow = [[[UIApplication sharedApplication] windows] firstObject];
|
|
52
|
+
if (firstWindow != nil) {
|
|
53
|
+
[[firstWindow rootViewController] setNeedsUpdateOfHomeIndicatorAutoHidden];
|
|
54
|
+
}
|
|
55
|
+
} else
|
|
56
|
+
#endif
|
|
57
|
+
{
|
|
58
|
+
if (@available(iOS 11.0, *)) {
|
|
59
|
+
[UIApplication.sharedApplication.keyWindow.rootViewController setNeedsUpdateOfHomeIndicatorAutoHidden];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
#endif
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
#if !TARGET_OS_TV
|
|
66
|
+
+ (UIStatusBarStyle)statusBarStyleForRNSStatusBarStyle:(RNSStatusBarStyle)statusBarStyle
|
|
67
|
+
{
|
|
68
|
+
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
|
|
69
|
+
__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
|
|
70
|
+
if (@available(iOS 13.0, *)) {
|
|
71
|
+
switch (statusBarStyle) {
|
|
72
|
+
case RNSStatusBarStyleAuto:
|
|
73
|
+
return [UITraitCollection.currentTraitCollection userInterfaceStyle] == UIUserInterfaceStyleDark
|
|
74
|
+
? UIStatusBarStyleLightContent
|
|
75
|
+
: UIStatusBarStyleDarkContent;
|
|
76
|
+
case RNSStatusBarStyleInverted:
|
|
77
|
+
return [UITraitCollection.currentTraitCollection userInterfaceStyle] == UIUserInterfaceStyleDark
|
|
78
|
+
? UIStatusBarStyleDarkContent
|
|
79
|
+
: UIStatusBarStyleLightContent;
|
|
80
|
+
case RNSStatusBarStyleLight:
|
|
81
|
+
return UIStatusBarStyleLightContent;
|
|
82
|
+
case RNSStatusBarStyleDark:
|
|
83
|
+
return UIStatusBarStyleDarkContent;
|
|
84
|
+
default:
|
|
85
|
+
return UIStatusBarStyleLightContent;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
#endif
|
|
89
|
+
// it is the only non-default style available for iOS < 13
|
|
90
|
+
if (statusBarStyle == RNSStatusBarStyleLight) {
|
|
91
|
+
return UIStatusBarStyleLightContent;
|
|
92
|
+
}
|
|
93
|
+
return UIStatusBarStyleDefault;
|
|
94
|
+
}
|
|
95
|
+
#endif
|
|
96
|
+
|
|
97
|
+
#if !TARGET_OS_TV
|
|
98
|
+
+ (UIInterfaceOrientation)defaultOrientationForOrientationMask:(UIInterfaceOrientationMask)orientationMask
|
|
99
|
+
{
|
|
100
|
+
if (UIInterfaceOrientationMaskPortrait & orientationMask) {
|
|
101
|
+
return UIInterfaceOrientationPortrait;
|
|
102
|
+
} else if (UIInterfaceOrientationMaskLandscapeLeft & orientationMask) {
|
|
103
|
+
return UIInterfaceOrientationLandscapeLeft;
|
|
104
|
+
} else if (UIInterfaceOrientationMaskLandscapeRight & orientationMask) {
|
|
105
|
+
return UIInterfaceOrientationLandscapeRight;
|
|
106
|
+
} else if (UIInterfaceOrientationMaskPortraitUpsideDown & orientationMask) {
|
|
107
|
+
return UIInterfaceOrientationPortraitUpsideDown;
|
|
108
|
+
}
|
|
109
|
+
return UIInterfaceOrientationUnknown;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
+ (UIInterfaceOrientation)interfaceOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation
|
|
113
|
+
{
|
|
114
|
+
switch (deviceOrientation) {
|
|
115
|
+
case UIDeviceOrientationPortrait:
|
|
116
|
+
return UIInterfaceOrientationPortrait;
|
|
117
|
+
case UIDeviceOrientationPortraitUpsideDown:
|
|
118
|
+
return UIInterfaceOrientationPortraitUpsideDown;
|
|
119
|
+
// UIDevice and UIInterface landscape orientations are switched
|
|
120
|
+
case UIDeviceOrientationLandscapeLeft:
|
|
121
|
+
return UIInterfaceOrientationLandscapeRight;
|
|
122
|
+
case UIDeviceOrientationLandscapeRight:
|
|
123
|
+
return UIInterfaceOrientationLandscapeLeft;
|
|
124
|
+
default:
|
|
125
|
+
return UIInterfaceOrientationUnknown;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
+ (UIInterfaceOrientationMask)maskFromOrientation:(UIInterfaceOrientation)orientation
|
|
130
|
+
{
|
|
131
|
+
return 1 << orientation;
|
|
132
|
+
}
|
|
133
|
+
#endif
|
|
134
|
+
|
|
135
|
+
+ (void)enforceDesiredDeviceOrientation
|
|
136
|
+
{
|
|
137
|
+
#if !TARGET_OS_TV
|
|
138
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
139
|
+
UIInterfaceOrientationMask orientationMask = UIInterfaceOrientationMaskAllButUpsideDown;
|
|
140
|
+
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
|
|
141
|
+
__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
|
|
142
|
+
if (@available(iOS 13, *)) {
|
|
143
|
+
UIWindow *firstWindow = [[[UIApplication sharedApplication] windows] firstObject];
|
|
144
|
+
if (firstWindow != nil) {
|
|
145
|
+
orientationMask = [firstWindow rootViewController].supportedInterfaceOrientations;
|
|
146
|
+
}
|
|
147
|
+
} else
|
|
148
|
+
#endif
|
|
149
|
+
{
|
|
150
|
+
orientationMask = UIApplication.sharedApplication.keyWindow.rootViewController.supportedInterfaceOrientations;
|
|
151
|
+
}
|
|
152
|
+
UIInterfaceOrientation currentDeviceOrientation =
|
|
153
|
+
[RNSScreenWindowTraits interfaceOrientationFromDeviceOrientation:[[UIDevice currentDevice] orientation]];
|
|
154
|
+
UIInterfaceOrientation currentInterfaceOrientation = [RNSScreenWindowTraits interfaceOrientation];
|
|
155
|
+
UIInterfaceOrientation newOrientation = UIInterfaceOrientationUnknown;
|
|
156
|
+
if ([RNSScreenWindowTraits maskFromOrientation:currentDeviceOrientation] & orientationMask) {
|
|
157
|
+
if (!([RNSScreenWindowTraits maskFromOrientation:currentInterfaceOrientation] & orientationMask)) {
|
|
158
|
+
// if the device orientation is in the mask, but interface orientation is not, we rotate to device's orientation
|
|
159
|
+
newOrientation = currentDeviceOrientation;
|
|
160
|
+
} else {
|
|
161
|
+
if (currentDeviceOrientation != currentInterfaceOrientation) {
|
|
162
|
+
// if both device orientation and interface orientation are in the mask, but in different orientations, we
|
|
163
|
+
// rotate to device's orientation
|
|
164
|
+
newOrientation = currentDeviceOrientation;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
} else {
|
|
168
|
+
if (!([RNSScreenWindowTraits maskFromOrientation:currentInterfaceOrientation] & orientationMask)) {
|
|
169
|
+
// if both device orientation and interface orientation are not in the mask, we rotate to closest available
|
|
170
|
+
// rotation from mask
|
|
171
|
+
newOrientation = [RNSScreenWindowTraits defaultOrientationForOrientationMask:orientationMask];
|
|
172
|
+
} else {
|
|
173
|
+
// if the device orientation is not in the mask, but interface orientation is in the mask, do nothing
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (newOrientation != UIInterfaceOrientationUnknown) {
|
|
177
|
+
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_16_0) && \
|
|
178
|
+
__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_16_0
|
|
179
|
+
if (@available(iOS 16.0, *)) {
|
|
180
|
+
NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects];
|
|
181
|
+
UIWindowScene *scene = (UIWindowScene *)array[0];
|
|
182
|
+
UIWindowSceneGeometryPreferencesIOS *geometryPreferences =
|
|
183
|
+
[[UIWindowSceneGeometryPreferencesIOS alloc] initWithInterfaceOrientations:orientationMask];
|
|
184
|
+
[scene requestGeometryUpdateWithPreferences:geometryPreferences
|
|
185
|
+
errorHandler:^(NSError *_Nonnull error){
|
|
186
|
+
}];
|
|
187
|
+
|
|
188
|
+
// `attemptRotationToDeviceOrientation` is deprecated for modern OS versions
|
|
189
|
+
// so we need to use `setNeedsUpdateOfSupportedInterfaceOrientations`
|
|
190
|
+
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
|
|
191
|
+
while (topController.presentedViewController) {
|
|
192
|
+
topController = topController.presentedViewController;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
[topController setNeedsUpdateOfSupportedInterfaceOrientations];
|
|
196
|
+
} else
|
|
197
|
+
#endif // Check for iOS 16
|
|
198
|
+
{
|
|
199
|
+
[[UIDevice currentDevice] setValue:@(newOrientation) forKey:@"orientation"];
|
|
200
|
+
[UIViewController attemptRotationToDeviceOrientation];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
#endif // !TARGET_TV_OS
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
+ (void)updateWindowTraits
|
|
208
|
+
{
|
|
209
|
+
[RNSScreenWindowTraits updateStatusBarAppearance];
|
|
210
|
+
[RNSScreenWindowTraits enforceDesiredDeviceOrientation];
|
|
211
|
+
[RNSScreenWindowTraits updateHomeIndicatorAutoHidden];
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
#if !TARGET_OS_TV
|
|
215
|
+
// based on
|
|
216
|
+
// https://stackoverflow.com/questions/57965701/statusbarorientation-was-deprecated-in-ios-13-0-when-attempting-to-get-app-ori/61249908#61249908
|
|
217
|
+
+ (UIInterfaceOrientation)interfaceOrientation
|
|
218
|
+
{
|
|
219
|
+
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
|
|
220
|
+
__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
|
|
221
|
+
if (@available(iOS 13.0, *)) {
|
|
222
|
+
UIWindow *firstWindow = [[[UIApplication sharedApplication] windows] firstObject];
|
|
223
|
+
if (firstWindow == nil) {
|
|
224
|
+
return UIInterfaceOrientationUnknown;
|
|
225
|
+
}
|
|
226
|
+
UIWindowScene *windowScene = firstWindow.windowScene;
|
|
227
|
+
if (windowScene == nil) {
|
|
228
|
+
return UIInterfaceOrientationUnknown;
|
|
229
|
+
}
|
|
230
|
+
return windowScene.interfaceOrientation;
|
|
231
|
+
} else
|
|
232
|
+
#endif
|
|
233
|
+
{
|
|
234
|
+
return UIApplication.sharedApplication.statusBarOrientation;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
#endif
|
|
238
|
+
|
|
239
|
+
// method to be used in Expo for checking if RNScreens have trait set
|
|
240
|
+
+ (BOOL)shouldAskScreensForTrait:(RNSWindowTrait)trait
|
|
241
|
+
includingModals:(BOOL)includingModals
|
|
242
|
+
inViewController:(UIViewController *)vc
|
|
243
|
+
{
|
|
244
|
+
UIViewController *lastViewController = [[vc childViewControllers] lastObject];
|
|
245
|
+
if ([lastViewController conformsToProtocol:@protocol(RNSViewControllerDelegate)]) {
|
|
246
|
+
UIViewController *vc = nil;
|
|
247
|
+
if ([lastViewController isKindOfClass:[RNSViewController class]]) {
|
|
248
|
+
vc = [(RNSViewController *)lastViewController findActiveChildVC];
|
|
249
|
+
} else if ([lastViewController isKindOfClass:[RNSNavigationController class]]) {
|
|
250
|
+
vc = [(RNSNavigationController *)lastViewController topViewController];
|
|
251
|
+
}
|
|
252
|
+
return [vc isKindOfClass:[RNSScreen class]] &&
|
|
253
|
+
[(RNSScreen *)vc findChildVCForConfigAndTrait:trait includingModals:includingModals] != nil;
|
|
254
|
+
}
|
|
255
|
+
return NO;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// same method as above, but directly for orientation
|
|
259
|
+
+ (BOOL)shouldAskScreensForScreenOrientationInViewController:(UIViewController *)vc
|
|
260
|
+
{
|
|
261
|
+
return [RNSScreenWindowTraits shouldAskScreensForTrait:RNSWindowTraitOrientation
|
|
262
|
+
includingModals:YES
|
|
263
|
+
inViewController:vc];
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
@end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#import <UIKit/UIKit.h>
|
|
2
|
+
|
|
3
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
4
|
+
#import <React/RCTViewComponentView.h>
|
|
5
|
+
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
6
|
+
#endif
|
|
7
|
+
|
|
8
|
+
#import <React/RCTBridge.h>
|
|
9
|
+
#import <React/RCTComponent.h>
|
|
10
|
+
#import <React/RCTViewManager.h>
|
|
11
|
+
#import "RNSEnums.h"
|
|
12
|
+
|
|
13
|
+
@interface RNSSearchBar :
|
|
14
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
15
|
+
RCTViewComponentView <UISearchBarDelegate, RCTRNSSearchBarViewProtocol>
|
|
16
|
+
#else
|
|
17
|
+
UIView <UISearchBarDelegate>
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
@property (nonatomic) BOOL hideWhenScrolling;
|
|
21
|
+
@property (nonatomic) RNSSearchBarPlacement placement;
|
|
22
|
+
@property (nonatomic, retain) UISearchController *controller;
|
|
23
|
+
|
|
24
|
+
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_16_0) && \
|
|
25
|
+
__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_16_0 && !TARGET_OS_TV
|
|
26
|
+
- (UINavigationItemSearchBarPlacement)placementAsUINavigationItemSearchBarPlacement API_AVAILABLE(ios(16.0))
|
|
27
|
+
API_UNAVAILABLE(tvos, watchos);
|
|
28
|
+
#endif // Check for iOS >= 16 && !TARGET_OS_TV
|
|
29
|
+
|
|
30
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
31
|
+
#else
|
|
32
|
+
@property (nonatomic, copy) RCTBubblingEventBlock onChangeText;
|
|
33
|
+
@property (nonatomic, copy) RCTBubblingEventBlock onCancelButtonPress;
|
|
34
|
+
@property (nonatomic, copy) RCTBubblingEventBlock onSearchButtonPress;
|
|
35
|
+
@property (nonatomic, copy) RCTBubblingEventBlock onFocus;
|
|
36
|
+
@property (nonatomic, copy) RCTBubblingEventBlock onBlur;
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
@end
|
|
40
|
+
|
|
41
|
+
@interface RNSSearchBarManager : RCTViewManager
|
|
42
|
+
|
|
43
|
+
@end
|