react-native-screens 3.14.1 → 3.17.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 +34 -1
- package/RNScreens.podspec +1 -4
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +0 -5
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +50 -21
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +22 -21
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +7 -5
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +1 -2
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +9 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +3 -6
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +4 -4
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +4 -10
- package/ios/RNSFullWindowOverlay.mm +1 -1
- package/ios/RNSScreen.h +1 -0
- package/ios/RNSScreen.mm +30 -11
- package/ios/RNSScreenContainer.mm +1 -1
- package/ios/RNSScreenNavigationContainer.mm +1 -1
- package/ios/RNSScreenStack.mm +62 -19
- package/ios/RNSScreenStackHeaderConfig.mm +3 -3
- package/ios/RNSScreenStackHeaderSubview.h +1 -1
- package/ios/RNSScreenStackHeaderSubview.mm +1 -1
- package/ios/RNSSearchBar.mm +1 -1
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/index.js +4 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.native.js +50 -52
- package/lib/commonjs/index.native.js.map +1 -1
- package/lib/commonjs/native-stack/views/NativeStackView.js +3 -1
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +4 -2
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedScreen.js +1 -1
- package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.native.js +51 -52
- package/lib/module/index.native.js.map +1 -1
- package/lib/module/native-stack/views/NativeStackView.js +3 -1
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js +5 -3
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
- package/lib/module/reanimated/ReanimatedScreen.js +2 -2
- package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/native-stack/types.d.ts +5 -0
- package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +1 -1
- package/lib/typescript/reanimated/ReanimatedScreen.d.ts +1 -1
- package/lib/typescript/types.d.ts +5 -0
- package/native-stack/README.md +6 -0
- package/package.json +1 -1
- package/src/fabric/ScreenNativeComponent.js +1 -1
- package/src/index.native.tsx +49 -56
- package/src/index.tsx +2 -0
- package/src/native-stack/types.tsx +5 -0
- package/src/native-stack/views/NativeStackView.tsx +2 -0
- package/src/reanimated/ReanimatedNativeStackScreen.tsx +5 -3
- package/src/reanimated/ReanimatedScreen.tsx +2 -2
- package/src/types.tsx +5 -0
- package/lib/commonjs/fabric/FullWindowOverlay.js +0 -26
- package/lib/commonjs/fabric/FullWindowOverlay.js.map +0 -1
- package/lib/commonjs/fabric/Screen.js +0 -29
- package/lib/commonjs/fabric/Screen.js.map +0 -1
- package/lib/commonjs/fabric/ScreenContainer.js +0 -28
- package/lib/commonjs/fabric/ScreenContainer.js.map +0 -1
- package/lib/commonjs/fabric/ScreenNavigationContainer.js +0 -28
- package/lib/commonjs/fabric/ScreenNavigationContainer.js.map +0 -1
- package/lib/commonjs/fabric/ScreenStack.js +0 -26
- package/lib/commonjs/fabric/ScreenStack.js.map +0 -1
- package/lib/commonjs/fabric/ScreenStackHeaderSubview.js +0 -37
- package/lib/commonjs/fabric/ScreenStackHeaderSubview.js.map +0 -1
- package/lib/commonjs/fabric/SearchBar.js +0 -37
- package/lib/commonjs/fabric/SearchBar.js.map +0 -1
- package/lib/commonjs/fabric/index.js +0 -72
- package/lib/commonjs/fabric/index.js.map +0 -1
- package/lib/module/fabric/FullWindowOverlay.js +0 -15
- package/lib/module/fabric/FullWindowOverlay.js.map +0 -1
- package/lib/module/fabric/Screen.js +0 -16
- package/lib/module/fabric/Screen.js.map +0 -1
- package/lib/module/fabric/ScreenContainer.js +0 -17
- package/lib/module/fabric/ScreenContainer.js.map +0 -1
- package/lib/module/fabric/ScreenNavigationContainer.js +0 -17
- package/lib/module/fabric/ScreenNavigationContainer.js.map +0 -1
- package/lib/module/fabric/ScreenStack.js +0 -15
- package/lib/module/fabric/ScreenStack.js.map +0 -1
- package/lib/module/fabric/ScreenStackHeaderSubview.js +0 -24
- package/lib/module/fabric/ScreenStackHeaderSubview.js.map +0 -1
- package/lib/module/fabric/SearchBar.js +0 -24
- package/lib/module/fabric/SearchBar.js.map +0 -1
- package/lib/module/fabric/index.js +0 -10
- package/lib/module/fabric/index.js.map +0 -1
- package/src/fabric/FullWindowOverlay.js +0 -13
- package/src/fabric/Screen.js +0 -15
- package/src/fabric/ScreenContainer.js +0 -16
- package/src/fabric/ScreenNavigationContainer.js +0 -16
- package/src/fabric/ScreenStack.js +0 -10
- package/src/fabric/ScreenStackHeaderSubview.js +0 -22
- package/src/fabric/SearchBar.js +0 -20
- package/src/fabric/index.js +0 -19
package/ios/RNSScreenStack.mm
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
8
8
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
9
9
|
|
|
10
|
-
#import
|
|
10
|
+
#import <React/RCTFabricComponentsPlugins.h>
|
|
11
11
|
|
|
12
12
|
#else
|
|
13
13
|
#import <React/RCTBridge.h>
|
|
@@ -598,22 +598,16 @@
|
|
|
598
598
|
|
|
599
599
|
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
|
|
600
600
|
{
|
|
601
|
-
RNSScreenView *topScreen =
|
|
602
|
-
|
|
603
|
-
if (![topScreen isKindOfClass:[RNSScreenView class]] || !topScreen.gestureEnabled ||
|
|
604
|
-
_controller.viewControllers.count < 2) {
|
|
605
|
-
return NO;
|
|
606
|
-
}
|
|
601
|
+
RNSScreenView *topScreen = _reactSubviews.lastObject;
|
|
607
602
|
|
|
608
603
|
#if TARGET_OS_TV
|
|
609
604
|
[self cancelTouchesInParent];
|
|
610
605
|
return YES;
|
|
611
606
|
#else
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
if ([gestureRecognizer
|
|
616
|
-
[self isInGestureResponseDistance:gestureRecognizer topScreen:topScreen]) {
|
|
607
|
+
// RNSPanGestureRecognizer will receive events iff topScreen.fullScreenSwipeEnabled == YES;
|
|
608
|
+
// Events are filtered in gestureRecognizer:shouldReceivePressOrTouchEvent: method
|
|
609
|
+
if ([gestureRecognizer isKindOfClass:[RNSPanGestureRecognizer class]]) {
|
|
610
|
+
if ([self isInGestureResponseDistance:gestureRecognizer topScreen:topScreen]) {
|
|
617
611
|
_isFullWidthSwiping = YES;
|
|
618
612
|
[self cancelTouchesInParent];
|
|
619
613
|
return YES;
|
|
@@ -621,6 +615,7 @@
|
|
|
621
615
|
return NO;
|
|
622
616
|
}
|
|
623
617
|
|
|
618
|
+
// Now we're dealing with RNSScreenEdgeGestureRecognizer (or _UIParallaxTransitionPanGestureRecognizer)
|
|
624
619
|
if (topScreen.customAnimationOnSwipe && [RNSScreenStackAnimator isCustomAnimation:topScreen.stackAnimation]) {
|
|
625
620
|
if ([gestureRecognizer isKindOfClass:[RNSScreenEdgeGestureRecognizer class]]) {
|
|
626
621
|
// if we do not set any explicit `semanticContentAttribute`, it is `UISemanticContentAttributeUnspecified` instead
|
|
@@ -639,10 +634,8 @@
|
|
|
639
634
|
if ([gestureRecognizer isKindOfClass:[RNSScreenEdgeGestureRecognizer class]]) {
|
|
640
635
|
// it should only recognize with `customAnimationOnSwipe` set
|
|
641
636
|
return NO;
|
|
642
|
-
} else if ([gestureRecognizer isKindOfClass:[RNSPanGestureRecognizer class]]) {
|
|
643
|
-
// it should only recognize with `fullScreenSwipeEnabled` set
|
|
644
|
-
return NO;
|
|
645
637
|
}
|
|
638
|
+
// _UIParallaxTransitionPanGestureRecognizer (other...)
|
|
646
639
|
[self cancelTouchesInParent];
|
|
647
640
|
return YES;
|
|
648
641
|
}
|
|
@@ -675,7 +668,7 @@
|
|
|
675
668
|
|
|
676
669
|
- (void)handleSwipe:(UIPanGestureRecognizer *)gestureRecognizer
|
|
677
670
|
{
|
|
678
|
-
RNSScreenView *topScreen =
|
|
671
|
+
RNSScreenView *topScreen = _reactSubviews.lastObject;
|
|
679
672
|
float translation;
|
|
680
673
|
float velocity;
|
|
681
674
|
float distance;
|
|
@@ -807,6 +800,8 @@
|
|
|
807
800
|
return [super hitTest:point withEvent:event];
|
|
808
801
|
}
|
|
809
802
|
|
|
803
|
+
#if !TARGET_OS_TV
|
|
804
|
+
|
|
810
805
|
- (BOOL)isScrollViewPanGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
|
|
811
806
|
{
|
|
812
807
|
// NOTE: This hack is required to restore native behavior of edge swipe (interactive pop gesture)
|
|
@@ -819,18 +814,66 @@
|
|
|
819
814
|
return scrollView.panGestureRecognizer == gestureRecognizer;
|
|
820
815
|
}
|
|
821
816
|
|
|
817
|
+
// Custom method for compatibility with iOS < 13.4
|
|
818
|
+
// RNSScreenStackView is a UIGestureRecognizerDelegate for three types of gesture recognizers:
|
|
819
|
+
// RNSPanGestureRecognizer, RNSScreenEdgeGestureRecognizer, _UIParallaxTransitionPanGestureRecognizer
|
|
820
|
+
// Be careful when adding another type of gesture recognizer.
|
|
821
|
+
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceivePressOrTouchEvent:(NSObject *)event
|
|
822
|
+
{
|
|
823
|
+
RNSScreenView *topScreen = _reactSubviews.lastObject;
|
|
824
|
+
|
|
825
|
+
if (![topScreen isKindOfClass:[RNSScreenView class]] || !topScreen.gestureEnabled ||
|
|
826
|
+
_controller.viewControllers.count < 2 || [topScreen isModal]) {
|
|
827
|
+
return NO;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
// We want to pass events to RNSPanGestureRecognizer iff full screen swipe is enabled.
|
|
831
|
+
if ([gestureRecognizer isKindOfClass:[RNSPanGestureRecognizer class]]) {
|
|
832
|
+
return topScreen.fullScreenSwipeEnabled;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
// RNSScreenEdgeGestureRecognizer || _UIParallaxTransitionPanGestureRecognizer
|
|
836
|
+
return YES;
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceivePress:(UIPress *)press;
|
|
840
|
+
{
|
|
841
|
+
return [self gestureRecognizer:gestureRecognizer shouldReceivePressOrTouchEvent:press];
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
|
|
845
|
+
{
|
|
846
|
+
return [self gestureRecognizer:gestureRecognizer shouldReceivePressOrTouchEvent:touch];
|
|
847
|
+
}
|
|
848
|
+
|
|
822
849
|
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
|
|
823
850
|
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
|
|
824
851
|
{
|
|
825
|
-
|
|
852
|
+
if ([gestureRecognizer isKindOfClass:[RNSPanGestureRecognizer class]] &&
|
|
853
|
+
[self isScrollViewPanGestureRecognizer:otherGestureRecognizer]) {
|
|
854
|
+
RNSPanGestureRecognizer *panGestureRecognizer = (RNSPanGestureRecognizer *)gestureRecognizer;
|
|
855
|
+
BOOL isBackGesture = [panGestureRecognizer translationInView:panGestureRecognizer.view].x > 0 &&
|
|
856
|
+
_controller.viewControllers.count > 1;
|
|
857
|
+
|
|
858
|
+
if (gestureRecognizer.state == UIGestureRecognizerStateBegan || isBackGesture) {
|
|
859
|
+
return NO;
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
return YES;
|
|
863
|
+
}
|
|
864
|
+
return NO;
|
|
826
865
|
}
|
|
827
866
|
|
|
828
867
|
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
|
|
829
868
|
shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
|
|
830
869
|
{
|
|
831
|
-
return
|
|
870
|
+
return (
|
|
871
|
+
[gestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]] &&
|
|
872
|
+
[self isScrollViewPanGestureRecognizer:otherGestureRecognizer]);
|
|
832
873
|
}
|
|
833
874
|
|
|
875
|
+
#endif // !TARGET_OS_TV
|
|
876
|
+
|
|
834
877
|
- (void)insertReactSubview:(RNSScreenView *)subview atIndex:(NSInteger)atIndex
|
|
835
878
|
{
|
|
836
879
|
if (![subview isKindOfClass:[RNSScreenView class]]) {
|
|
@@ -926,7 +969,7 @@
|
|
|
926
969
|
- (void)mountingTransactionWillMount:(facebook::react::MountingTransaction const &)transaction
|
|
927
970
|
withSurfaceTelemetry:(facebook::react::SurfaceTelemetry const &)surfaceTelemetry
|
|
928
971
|
{
|
|
929
|
-
for (auto mutation : transaction.getMutations()) {
|
|
972
|
+
for (auto &mutation : transaction.getMutations()) {
|
|
930
973
|
if (mutation.type == facebook::react::ShadowViewMutation::Type::Remove &&
|
|
931
974
|
mutation.parentShadowView.componentName != nil &&
|
|
932
975
|
strcmp(mutation.parentShadowView.componentName, "RNSScreenStack") == 0) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
#import <react/renderer/components/rnscreens/EventEmitters.h>
|
|
6
6
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
7
7
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
8
|
-
#import
|
|
8
|
+
#import <React/RCTFabricComponentsPlugins.h>
|
|
9
9
|
#else
|
|
10
10
|
#import <React/RCTBridge.h>
|
|
11
11
|
#import <React/RCTImageLoader.h>
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
// we want updates sent to the VC below modal too since it is also visible
|
|
121
|
-
BOOL isPresentingVC = vc.presentedViewController == nextVC;
|
|
121
|
+
BOOL isPresentingVC = nextVC != nil && vc.presentedViewController == nextVC;
|
|
122
122
|
|
|
123
123
|
BOOL isInFullScreenModal = nav == nil && _screenView.stackPresentation == RNSScreenStackPresentationFullScreenModal;
|
|
124
124
|
// if nav is nil, it means we can be in a fullScreen modal, so there is no nextVC, but we still want to update
|
|
@@ -580,7 +580,7 @@
|
|
|
580
580
|
}
|
|
581
581
|
case RNSScreenStackHeaderSubviewTypeBackButton: {
|
|
582
582
|
#ifdef RN_FABRIC_ENABLED
|
|
583
|
-
RCTLogWarn(@"Back button
|
|
583
|
+
RCTLogWarn(@"Back button subview is not yet Fabric compatible in react-native-screens");
|
|
584
584
|
#endif
|
|
585
585
|
break;
|
|
586
586
|
}
|
package/ios/RNSSearchBar.mm
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
#import <react/renderer/components/rnscreens/EventEmitters.h>
|
|
13
13
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
14
14
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
15
|
-
#import
|
|
15
|
+
#import <React/RCTFabricComponentsPlugins.h>
|
|
16
16
|
#import "RNSConvert.h"
|
|
17
17
|
#endif
|
|
18
18
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ScreenNativeComponent.js"],"names":["interfaceOnly"],"mappings":";;;;;;;AAKA;;;;AALA;AACA;AACA;AACA;;AACA;eA0FgB,qCAAoC,WAApC,EAAiD;AAC/DA,EAAAA,aAAa,EAAE;AADgD,CAAjD,C","sourcesContent":["/**\n * @flow strict-local\n * @format\n */\n/* eslint-disable */\nimport codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\nimport type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';\nimport type { HostComponent } from 'react-native/Libraries/Renderer/shims/ReactNativeTypes';\nimport type { ColorValue } from 'react-native/Libraries/StyleSheet/StyleSheet';\nimport type {\n BubblingEventHandler,\n WithDefault,\n Int32,\n} from 'react-native/Libraries/Types/CodegenTypes';\n\ntype ScreenEvent = $ReadOnly<{||}>;\n\ntype ScreenDismissedEvent = $ReadOnly<{|\n dismissCount: Int32,\n|}>;\n\ntype TransitionProgressEvent = $ReadOnly<{|\n progress: Double,\n closing: Int32,\n goingForward: Int32,\n|}>;\n\ntype GestureResponseDistanceType = $ReadOnly<{|\n start: Float,\n end: Float,\n top: Float,\n bottom: Float,\n|}>;\n\ntype StackPresentation =\n | 'push'\n | 'modal'\n | 'transparentModal'\n | 'fullScreenModal'\n | 'formSheet'\n | 'containedModal'\n | 'containedTransparentModal';\n\ntype StackAnimation =\n | 'default'\n | 'flip'\n | 'simple_push'\n | 'none'\n | 'fade'\n | 'slide_from_right'\n | 'slide_from_left'\n | 'slide_from_bottom'\n | 'fade_from_bottom';\n\ntype SwipeDirection = 'vertical' | 'horizontal';\n\ntype ReplaceAnimation = 'pop' | 'push';\n\nexport type NativeProps = $ReadOnly<{|\n ...ViewProps,\n onAppear?: ?BubblingEventHandler<ScreenEvent>,\n onDisappear?: ?BubblingEventHandler<ScreenEvent>,\n onDismissed?: ?BubblingEventHandler<ScreenDismissedEvent>,\n onNativeDismissCancelled?: ?BubblingEventHandler<ScreenDismissedEvent>,\n onWillAppear?: ?BubblingEventHandler<ScreenEvent>,\n onWillDisappear?: ?BubblingEventHandler<ScreenEvent>,\n onTransitionProgress?: ?BubblingEventHandler<TransitionProgressEvent>,\n customAnimationOnSwipe?: boolean,\n fullScreenSwipeEnabled?: boolean,\n homeIndicatorHidden?: boolean,\n preventNativeDismiss?: boolean,\n gestureEnabled?: WithDefault<boolean, true>,\n statusBarColor?: ColorValue,\n statusBarHidden?: boolean,\n screenOrientation?: string,\n statusBarAnimation?: string,\n statusBarStyle?: string,\n statusBarTranslucent?: boolean,\n gestureResponseDistance?: GestureResponseDistanceType,\n stackPresentation?: WithDefault<StackPresentation, 'push'>,\n stackAnimation?: WithDefault<StackAnimation, 'default'>,\n transitionDuration?: WithDefault<Int32, 350>,\n replaceAnimation?: WithDefault<ReplaceAnimation, 'pop'>,\n swipeDirection?: WithDefault<SwipeDirection, 'horizontal'>,\n hideKeyboardOnSwipe?: boolean,\n activityState?: WithDefault<Float, -1.0>,\n
|
|
1
|
+
{"version":3,"sources":["ScreenNativeComponent.js"],"names":["interfaceOnly"],"mappings":";;;;;;;AAKA;;;;AALA;AACA;AACA;AACA;;AACA;eA0FgB,qCAAoC,WAApC,EAAiD;AAC/DA,EAAAA,aAAa,EAAE;AADgD,CAAjD,C","sourcesContent":["/**\n * @flow strict-local\n * @format\n */\n/* eslint-disable */\nimport codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\nimport type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';\nimport type { HostComponent } from 'react-native/Libraries/Renderer/shims/ReactNativeTypes';\nimport type { ColorValue } from 'react-native/Libraries/StyleSheet/StyleSheet';\nimport type {\n BubblingEventHandler,\n WithDefault,\n Int32,\n} from 'react-native/Libraries/Types/CodegenTypes';\n\ntype ScreenEvent = $ReadOnly<{||}>;\n\ntype ScreenDismissedEvent = $ReadOnly<{|\n dismissCount: Int32,\n|}>;\n\ntype TransitionProgressEvent = $ReadOnly<{|\n progress: Double,\n closing: Int32,\n goingForward: Int32,\n|}>;\n\ntype GestureResponseDistanceType = $ReadOnly<{|\n start: Float,\n end: Float,\n top: Float,\n bottom: Float,\n|}>;\n\ntype StackPresentation =\n | 'push'\n | 'modal'\n | 'transparentModal'\n | 'fullScreenModal'\n | 'formSheet'\n | 'containedModal'\n | 'containedTransparentModal';\n\ntype StackAnimation =\n | 'default'\n | 'flip'\n | 'simple_push'\n | 'none'\n | 'fade'\n | 'slide_from_right'\n | 'slide_from_left'\n | 'slide_from_bottom'\n | 'fade_from_bottom';\n\ntype SwipeDirection = 'vertical' | 'horizontal';\n\ntype ReplaceAnimation = 'pop' | 'push';\n\nexport type NativeProps = $ReadOnly<{|\n ...ViewProps,\n onAppear?: ?BubblingEventHandler<ScreenEvent>,\n onDisappear?: ?BubblingEventHandler<ScreenEvent>,\n onDismissed?: ?BubblingEventHandler<ScreenDismissedEvent>,\n onNativeDismissCancelled?: ?BubblingEventHandler<ScreenDismissedEvent>,\n onWillAppear?: ?BubblingEventHandler<ScreenEvent>,\n onWillDisappear?: ?BubblingEventHandler<ScreenEvent>,\n onTransitionProgress?: ?BubblingEventHandler<TransitionProgressEvent>,\n customAnimationOnSwipe?: boolean,\n fullScreenSwipeEnabled?: boolean,\n homeIndicatorHidden?: boolean,\n preventNativeDismiss?: boolean,\n gestureEnabled?: WithDefault<boolean, true>,\n statusBarColor?: ColorValue,\n statusBarHidden?: boolean,\n screenOrientation?: string,\n statusBarAnimation?: string,\n statusBarStyle?: string,\n statusBarTranslucent?: boolean,\n gestureResponseDistance?: GestureResponseDistanceType,\n stackPresentation?: WithDefault<StackPresentation, 'push'>,\n stackAnimation?: WithDefault<StackAnimation, 'default'>,\n transitionDuration?: WithDefault<Int32, 350>,\n replaceAnimation?: WithDefault<ReplaceAnimation, 'pop'>,\n swipeDirection?: WithDefault<SwipeDirection, 'horizontal'>,\n hideKeyboardOnSwipe?: boolean,\n activityState?: WithDefault<Float, -1.0>,\n navigationBarColor?: ColorValue,\n navigationBarHidden?: boolean,\n nativeBackButtonDismissalEnabled?: boolean,\n onHeaderBackButtonClicked?: ?BubblingEventHandler<ScreenEvent>,\n|}>;\n\ntype ComponentType = HostComponent<NativeProps>;\n\nexport default (codegenNativeComponent<NativeProps>('RNSScreen', {\n interfaceOnly: true,\n}): ComponentType);\n"]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -9,6 +9,7 @@ var _exportNames = {
|
|
|
9
9
|
enableFreeze: true,
|
|
10
10
|
NativeScreen: true,
|
|
11
11
|
Screen: true,
|
|
12
|
+
InnerScreen: true,
|
|
12
13
|
ScreenContext: true,
|
|
13
14
|
ScreenContainer: true,
|
|
14
15
|
NativeScreenContainer: true,
|
|
@@ -49,7 +50,7 @@ Object.defineProperty(exports, "executeNativeBackPress", {
|
|
|
49
50
|
return _utils.executeNativeBackPress;
|
|
50
51
|
}
|
|
51
52
|
});
|
|
52
|
-
exports.shouldUseActivityState = exports.ScreenStackHeaderSubview = exports.SearchBar = exports.ScreenStackHeaderConfig = exports.ScreenStackHeaderSearchBarView = exports.ScreenStackHeaderCenterView = exports.ScreenStackHeaderLeftView = exports.ScreenStackHeaderRightView = exports.ScreenStackHeaderBackButtonImage = exports.FullWindowOverlay = exports.ScreenStack = exports.NativeScreenNavigationContainer = exports.NativeScreenContainer = exports.ScreenContainer = exports.ScreenContext = exports.Screen = exports.NativeScreen = void 0;
|
|
53
|
+
exports.shouldUseActivityState = exports.ScreenStackHeaderSubview = exports.SearchBar = exports.ScreenStackHeaderConfig = exports.ScreenStackHeaderSearchBarView = exports.ScreenStackHeaderCenterView = exports.ScreenStackHeaderLeftView = exports.ScreenStackHeaderRightView = exports.ScreenStackHeaderBackButtonImage = exports.FullWindowOverlay = exports.ScreenStack = exports.NativeScreenNavigationContainer = exports.NativeScreenContainer = exports.ScreenContainer = exports.ScreenContext = exports.InnerScreen = exports.Screen = exports.NativeScreen = void 0;
|
|
53
54
|
|
|
54
55
|
var _react = _interopRequireDefault(require("react"));
|
|
55
56
|
|
|
@@ -126,6 +127,8 @@ exports.NativeScreen = NativeScreen;
|
|
|
126
127
|
const Screen = _reactNative.Animated.createAnimatedComponent(NativeScreen);
|
|
127
128
|
|
|
128
129
|
exports.Screen = Screen;
|
|
130
|
+
const InnerScreen = _reactNative.View;
|
|
131
|
+
exports.InnerScreen = InnerScreen;
|
|
129
132
|
|
|
130
133
|
const ScreenContext = /*#__PURE__*/_react.default.createContext(Screen);
|
|
131
134
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["ENABLE_SCREENS","enableScreens","shouldEnableScreens","screensEnabled","enableFreeze","shouldEnableReactFreeze","NativeScreen","React","Component","render","active","activityState","style","enabled","rest","props","undefined","display","Screen","Animated","createAnimatedComponent","ScreenContext","createContext","ScreenContainer","
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["ENABLE_SCREENS","enableScreens","shouldEnableScreens","screensEnabled","enableFreeze","shouldEnableReactFreeze","NativeScreen","React","Component","render","active","activityState","style","enabled","rest","props","undefined","display","Screen","Animated","createAnimatedComponent","InnerScreen","View","ScreenContext","createContext","ScreenContainer","NativeScreenContainer","NativeScreenNavigationContainer","ScreenStack","FullWindowOverlay","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenStackHeaderConfig","SearchBar","ScreenStackHeaderSubview","shouldUseActivityState"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAUA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AACA;;;;;;AAKA,IAAIA,cAAc,GAAG,IAArB;;AAEO,SAASC,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AAC9DF,EAAAA,cAAc,GAAGE,mBAAjB;AACD;;AAEM,SAASC,cAAT,GAAmC;AACxC,SAAOH,cAAP;AACD,C,CAED;AACA;;;AACO,SAASI,YAAT,CAAsBC,uBAAuB,GAAG,IAAhD,EAA4D,CACjE;AACD;;AAEM,MAAMC,YAAN,SAA2BC,eAAMC,SAAjC,CAAwD;AAC7DC,EAAAA,MAAM,GAAgB;AACpB,QAAI;AACFC,MAAAA,MADE;AAEFC,MAAAA,aAFE;AAGFC,MAAAA,KAHE;AAIFC,MAAAA,OAAO,GAAGb,cAJR;AAKF,SAAGc;AALD,QAMA,KAAKC,KANT;;AAQA,QAAIF,OAAJ,EAAa;AACX,UAAIH,MAAM,KAAKM,SAAX,IAAwBL,aAAa,KAAKK,SAA9C,EAAyD;AACvDL,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC,CADuD,CACjB;AACvC;;AACD,0BACE,6BAAC,iBAAD,CACE;AADF;AAEE,QAAA,MAAM,EAAEC,aAAa,KAAK,CAF5B;AAGE,QAAA,KAAK,EAAE,CAACC,KAAD,EAAQ;AAAEK,UAAAA,OAAO,EAAEN,aAAa,KAAK,CAAlB,GAAsB,MAAtB,GAA+B;AAA1C,SAAR;AAHT,SAIMG,IAJN,EADF;AAQD;;AAED,wBAAO,6BAAC,iBAAD,EAAUA,IAAV,CAAP;AACD;;AAzB4D;;;;AA4BxD,MAAMI,MAAM,GAAGC,sBAASC,uBAAT,CAAiCd,YAAjC,CAAf;;;AAEA,MAAMe,WAAW,GAAGC,iBAApB;;;AAEA,MAAMC,aAAa,gBAAGhB,eAAMiB,aAAN,CAAoBN,MAApB,CAAtB;;;AAEA,MAAMO,eAA0D,GAAGH,iBAAnE;;AAEA,MAAMI,qBAAgE,GAAGJ,iBAAzE;;AAEA,MAAMK,+BAA0E,GAAGL,iBAAnF;;AAEA,MAAMM,WAAkD,GAAGN,iBAA3D;;AAEA,MAAMO,iBAAiB,GAAGP,iBAA1B;;;AAEA,MAAMQ,gCAAgC,GAC3Cf,KAD8C,iBAG9C,6BAAC,iBAAD,qBACE,6BAAC,kBAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgDA,KAAhD,EADF,CAHK;;;;AAQA,MAAMgB,0BAA0B,GACrChB,KADwC,iBAExB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMiB,yBAAyB,GACpCjB,KADuC,iBAEvB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMkB,2BAA2B,GACtClB,KADyC,iBAEzB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMmB,8BAA8B,GACzCnB,KAD4C,iBAE5B,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;AAIA,MAAMoB,uBAA0E,GAAGb,iBAAnF,C,CAEP;;;AACO,MAAMc,SAA8C,GAAGd,iBAAvD;;AAEA,MAAMe,wBAEX,GAAGf,iBAFE;;AAIA,MAAMgB,sBAAsB,GAAG,IAA/B","sourcesContent":["import React from 'react';\nimport { Animated, View, ViewProps, ImageProps, Image } from 'react-native';\nimport {\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n HeaderSubviewTypes,\n SearchBarProps,\n} from './types';\n\nexport * from './types';\nexport { default as useTransitionProgress } from './useTransitionProgress';\nexport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\nlet ENABLE_SCREENS = true;\n\nexport function enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = shouldEnableScreens;\n}\n\nexport function screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// @ts-ignore function stub, freezing logic is located in index.native.tsx\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function enableFreeze(shouldEnableReactFreeze = true): void {\n // noop\n}\n\nexport class NativeScreen extends React.Component<ScreenProps> {\n render(): JSX.Element {\n let {\n active,\n activityState,\n style,\n enabled = ENABLE_SCREENS,\n ...rest\n } = this.props;\n\n if (enabled) {\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0; // change taken from index.native.tsx\n }\n return (\n <View\n // @ts-expect-error: hidden exists on web, but not in React Native\n hidden={activityState === 0}\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n {...rest}\n />\n );\n }\n\n return <View {...rest} />;\n }\n}\n\nexport const Screen = Animated.createAnimatedComponent(NativeScreen);\n\nexport const InnerScreen = View;\n\nexport const ScreenContext = React.createContext(Screen);\n\nexport const ScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenNavigationContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const ScreenStack: React.ComponentType<ScreenStackProps> = View;\n\nexport const FullWindowOverlay = View;\n\nexport const ScreenStackHeaderBackButtonImage = (\n props: ImageProps\n): JSX.Element => (\n <View>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </View>\n);\n\nexport const ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps> = View;\n\n// @ts-expect-error: search bar props have no common props with View\nexport const SearchBar: React.ComponentType<SearchBarProps> = View;\n\nexport const ScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>> = View;\n\nexport const shouldUseActivityState = true;\n"]}
|
|
@@ -14,8 +14,6 @@ var _useTransitionProgress = _interopRequireDefault(require("./useTransitionProg
|
|
|
14
14
|
|
|
15
15
|
var _utils = require("./utils");
|
|
16
16
|
|
|
17
|
-
var _global;
|
|
18
|
-
|
|
19
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
20
18
|
|
|
21
19
|
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
@@ -24,10 +22,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
24
22
|
|
|
25
23
|
// web implementation is taken from `index.tsx`
|
|
26
24
|
const isPlatformSupported = _reactNative.Platform.OS === 'ios' || _reactNative.Platform.OS === 'android' || _reactNative.Platform.OS === 'windows';
|
|
27
|
-
let ENABLE_SCREENS = isPlatformSupported;
|
|
28
|
-
|
|
29
|
-
const ENABLE_FABRIC = !!((_global = global) !== null && _global !== void 0 && _global.nativeFabricUIManager);
|
|
30
|
-
const FabricComponents = ENABLE_FABRIC ? require('./fabric') : {};
|
|
25
|
+
let ENABLE_SCREENS = isPlatformSupported;
|
|
31
26
|
|
|
32
27
|
function enableScreens(shouldEnableScreens = true) {
|
|
33
28
|
ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;
|
|
@@ -70,42 +65,42 @@ let NativeSearchBar;
|
|
|
70
65
|
let NativeFullWindowOverlay;
|
|
71
66
|
const ScreensNativeModules = {
|
|
72
67
|
get NativeScreen() {
|
|
73
|
-
NativeScreenValue = NativeScreenValue ||
|
|
68
|
+
NativeScreenValue = NativeScreenValue || (0, _reactNative.requireNativeComponent)('RNSScreen');
|
|
74
69
|
return NativeScreenValue;
|
|
75
70
|
},
|
|
76
71
|
|
|
77
72
|
get NativeScreenContainer() {
|
|
78
|
-
NativeScreenContainerValue = NativeScreenContainerValue ||
|
|
73
|
+
NativeScreenContainerValue = NativeScreenContainerValue || (0, _reactNative.requireNativeComponent)('RNSScreenContainer');
|
|
79
74
|
return NativeScreenContainerValue;
|
|
80
75
|
},
|
|
81
76
|
|
|
82
77
|
get NativeScreenNavigationContainer() {
|
|
83
|
-
NativeScreenNavigationContainerValue = NativeScreenNavigationContainerValue || (_reactNative.Platform.OS === 'ios' ?
|
|
78
|
+
NativeScreenNavigationContainerValue = NativeScreenNavigationContainerValue || (_reactNative.Platform.OS === 'ios' ? (0, _reactNative.requireNativeComponent)('RNSScreenNavigationContainer') : this.NativeScreenContainer);
|
|
84
79
|
return NativeScreenNavigationContainerValue;
|
|
85
80
|
},
|
|
86
81
|
|
|
87
82
|
get NativeScreenStack() {
|
|
88
|
-
NativeScreenStack = NativeScreenStack ||
|
|
83
|
+
NativeScreenStack = NativeScreenStack || (0, _reactNative.requireNativeComponent)('RNSScreenStack');
|
|
89
84
|
return NativeScreenStack;
|
|
90
85
|
},
|
|
91
86
|
|
|
92
87
|
get NativeScreenStackHeaderConfig() {
|
|
93
|
-
NativeScreenStackHeaderConfig = NativeScreenStackHeaderConfig ||
|
|
88
|
+
NativeScreenStackHeaderConfig = NativeScreenStackHeaderConfig || (0, _reactNative.requireNativeComponent)('RNSScreenStackHeaderConfig');
|
|
94
89
|
return NativeScreenStackHeaderConfig;
|
|
95
90
|
},
|
|
96
91
|
|
|
97
92
|
get NativeScreenStackHeaderSubview() {
|
|
98
|
-
NativeScreenStackHeaderSubview = NativeScreenStackHeaderSubview ||
|
|
93
|
+
NativeScreenStackHeaderSubview = NativeScreenStackHeaderSubview || (0, _reactNative.requireNativeComponent)('RNSScreenStackHeaderSubview');
|
|
99
94
|
return NativeScreenStackHeaderSubview;
|
|
100
95
|
},
|
|
101
96
|
|
|
102
97
|
get NativeSearchBar() {
|
|
103
|
-
NativeSearchBar = NativeSearchBar ||
|
|
98
|
+
NativeSearchBar = NativeSearchBar || (0, _reactNative.requireNativeComponent)('RNSSearchBar');
|
|
104
99
|
return NativeSearchBar;
|
|
105
100
|
},
|
|
106
101
|
|
|
107
102
|
get NativeFullWindowOverlay() {
|
|
108
|
-
NativeFullWindowOverlay = NativeFullWindowOverlay ||
|
|
103
|
+
NativeFullWindowOverlay = NativeFullWindowOverlay || (0, _reactNative.requireNativeComponent)('RNSFullWindowOverlay');
|
|
109
104
|
return NativeFullWindowOverlay;
|
|
110
105
|
}
|
|
111
106
|
|
|
@@ -133,42 +128,36 @@ function DelayedFreeze({
|
|
|
133
128
|
}, children);
|
|
134
129
|
}
|
|
135
130
|
|
|
136
|
-
function MaybeFreeze({
|
|
137
|
-
freeze,
|
|
138
|
-
children
|
|
139
|
-
}) {
|
|
140
|
-
if (ENABLE_FREEZE) {
|
|
141
|
-
return /*#__PURE__*/_react.default.createElement(DelayedFreeze, {
|
|
142
|
-
freeze: freeze
|
|
143
|
-
}, children);
|
|
144
|
-
} else {
|
|
145
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
131
|
function ScreenStack(props) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
} = props;
|
|
132
|
+
const {
|
|
133
|
+
children,
|
|
134
|
+
...rest
|
|
135
|
+
} = props;
|
|
155
136
|
|
|
156
|
-
|
|
137
|
+
const size = _react.default.Children.count(children); // freezes all screens except the top one
|
|
157
138
|
|
|
158
139
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}, child));
|
|
140
|
+
const childrenWithFreeze = _react.default.Children.map(children, (child, index) => {
|
|
141
|
+
var _props$descriptor, _props$descriptors, _descriptor$options$f, _descriptor$options;
|
|
162
142
|
|
|
163
|
-
|
|
164
|
-
|
|
143
|
+
// @ts-expect-error it's either SceneView in v6 or RouteView in v5
|
|
144
|
+
const {
|
|
145
|
+
props,
|
|
146
|
+
key
|
|
147
|
+
} = child;
|
|
148
|
+
const descriptor = (_props$descriptor = props === null || props === void 0 ? void 0 : props.descriptor) !== null && _props$descriptor !== void 0 ? _props$descriptor : props === null || props === void 0 ? void 0 : (_props$descriptors = props.descriptors) === null || _props$descriptors === void 0 ? void 0 : _props$descriptors[key];
|
|
149
|
+
const freezeEnabled = (_descriptor$options$f = descriptor === null || descriptor === void 0 ? void 0 : (_descriptor$options = descriptor.options) === null || _descriptor$options === void 0 ? void 0 : _descriptor$options.freezeOnBlur) !== null && _descriptor$options$f !== void 0 ? _descriptor$options$f : ENABLE_FREEZE;
|
|
150
|
+
return /*#__PURE__*/_react.default.createElement(DelayedFreeze, {
|
|
151
|
+
freeze: freezeEnabled && size - index > 1
|
|
152
|
+
}, child);
|
|
153
|
+
});
|
|
165
154
|
|
|
166
|
-
return /*#__PURE__*/_react.default.createElement(ScreensNativeModules.NativeScreenStack,
|
|
155
|
+
return /*#__PURE__*/_react.default.createElement(ScreensNativeModules.NativeScreenStack, rest, childrenWithFreeze);
|
|
167
156
|
} // Incomplete type, all accessible properties available at:
|
|
168
157
|
// react-native/Libraries/Components/View/ReactNativeViewViewConfig.js
|
|
169
158
|
|
|
170
159
|
|
|
171
|
-
class
|
|
160
|
+
class InnerScreen extends _react.default.Component {
|
|
172
161
|
constructor(...args) {
|
|
173
162
|
super(...args);
|
|
174
163
|
|
|
@@ -197,6 +186,7 @@ class Screen extends _react.default.Component {
|
|
|
197
186
|
render() {
|
|
198
187
|
const {
|
|
199
188
|
enabled = ENABLE_SCREENS,
|
|
189
|
+
freezeOnBlur = ENABLE_FREEZE,
|
|
200
190
|
...rest
|
|
201
191
|
} = this.props;
|
|
202
192
|
|
|
@@ -222,21 +212,18 @@ class Screen extends _react.default.Component {
|
|
|
222
212
|
}
|
|
223
213
|
|
|
224
214
|
const handleRef = ref => {
|
|
225
|
-
|
|
226
|
-
var _ref$viewConfig, _ref$viewConfig$valid;
|
|
227
|
-
|
|
228
|
-
if (ref !== null && ref !== void 0 && (_ref$viewConfig = ref.viewConfig) !== null && _ref$viewConfig !== void 0 && (_ref$viewConfig$valid = _ref$viewConfig.validAttributes) !== null && _ref$viewConfig$valid !== void 0 && _ref$viewConfig$valid.style) {
|
|
229
|
-
ref.viewConfig.validAttributes.style = { ...ref.viewConfig.validAttributes.style,
|
|
230
|
-
display: false
|
|
231
|
-
};
|
|
232
|
-
}
|
|
215
|
+
var _ref$viewConfig, _ref$viewConfig$valid;
|
|
233
216
|
|
|
217
|
+
if (ref !== null && ref !== void 0 && (_ref$viewConfig = ref.viewConfig) !== null && _ref$viewConfig !== void 0 && (_ref$viewConfig$valid = _ref$viewConfig.validAttributes) !== null && _ref$viewConfig$valid !== void 0 && _ref$viewConfig$valid.style) {
|
|
218
|
+
ref.viewConfig.validAttributes.style = { ...ref.viewConfig.validAttributes.style,
|
|
219
|
+
display: false
|
|
220
|
+
};
|
|
234
221
|
this.setRef(ref);
|
|
235
222
|
}
|
|
236
223
|
};
|
|
237
224
|
|
|
238
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
239
|
-
freeze: activityState === 0
|
|
225
|
+
return /*#__PURE__*/_react.default.createElement(DelayedFreeze, {
|
|
226
|
+
freeze: freezeOnBlur && activityState === 0
|
|
240
227
|
}, /*#__PURE__*/_react.default.createElement(AnimatedNativeScreen, _extends({}, props, {
|
|
241
228
|
activityState: activityState,
|
|
242
229
|
gestureResponseDistance: {
|
|
@@ -349,8 +336,18 @@ const ScreenStackHeaderSearchBarView = props => /*#__PURE__*/_react.default.crea
|
|
|
349
336
|
}));
|
|
350
337
|
|
|
351
338
|
// context to be used when the user wants to use enhanced implementation
|
|
352
|
-
// e.g. to use `
|
|
353
|
-
const ScreenContext = /*#__PURE__*/_react.default.createContext(
|
|
339
|
+
// e.g. to use `useReanimatedTransitionProgress` (see `reanimated` folder in repo)
|
|
340
|
+
const ScreenContext = /*#__PURE__*/_react.default.createContext(InnerScreen);
|
|
341
|
+
|
|
342
|
+
class Screen extends _react.default.Component {
|
|
343
|
+
render() {
|
|
344
|
+
const ScreenWrapper = this.context || InnerScreen;
|
|
345
|
+
return /*#__PURE__*/_react.default.createElement(ScreenWrapper, this.props);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
_defineProperty(Screen, "contextType", ScreenContext);
|
|
354
351
|
|
|
355
352
|
module.exports = {
|
|
356
353
|
// these are classes so they are not evaluated until used
|
|
@@ -359,6 +356,7 @@ module.exports = {
|
|
|
359
356
|
ScreenContainer,
|
|
360
357
|
ScreenContext,
|
|
361
358
|
ScreenStack,
|
|
359
|
+
InnerScreen,
|
|
362
360
|
|
|
363
361
|
get NativeScreen() {
|
|
364
362
|
return ScreensNativeModules.NativeScreen;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.native.tsx"],"names":["isPlatformSupported","Platform","OS","ENABLE_SCREENS","ENABLE_FABRIC","global","nativeFabricUIManager","FabricComponents","require","enableScreens","shouldEnableScreens","UIManager","getViewManagerConfig","console","error","ENABLE_FREEZE","enableFreeze","shouldEnableReactFreeze","minor","parseInt","version","split","warn","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","Screen","NativeScreenContainer","ScreenContainer","NativeScreenNavigationContainer","ScreenNavigationContainer","ScreenStack","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","FullWindowOverlay","DelayedFreeze","freeze","children","freezeState","setFreezeState","React","useState","setImmediate","MaybeFreeze","props","rest","size","Children","count","childrenWithFreeze","map","child","index","Component","Animated","Value","ref","onComponentRef","setNativeProps","render","enabled","createAnimatedComponent","active","activityState","isNativeStack","gestureResponseDistance","undefined","handleRef","viewConfig","validAttributes","style","display","setRef","start","end","top","bottom","event","nativeEvent","progress","closing","goingForward","useNativeDriver","hasTwoStates","styles","StyleSheet","create","headerSubview","position","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","isSearchBarAvailableForCurrentPlatform","View","useTransitionProgress","executeNativeBackPress"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Animated,\n Image,\n ImageProps,\n Platform,\n requireNativeComponent,\n StyleSheet,\n UIManager,\n View,\n ViewProps,\n} from 'react-native';\nimport { Freeze } from 'react-freeze';\nimport { version } from 'react-native/package.json';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\nimport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\n// @ts-expect-error nativeFabricUIManager is not yet included in the RN types\nconst ENABLE_FABRIC = !!global?.nativeFabricUIManager;\n\nconst FabricComponents = ENABLE_FABRIC ? require('./fabric') : {};\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\nlet ENABLE_FREEZE = false;\n\nfunction enableFreeze(shouldEnableReactFreeze = true): void {\n const minor = parseInt(version.split('.')[1]); // eg. takes 66 from '0.66.0'\n\n // react-freeze requires react-native >=0.64, react-native from main is 0.0.0\n if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {\n console.warn(\n 'react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.'\n );\n }\n\n ENABLE_FREEZE = shouldEnableReactFreeze;\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue ||\n FabricComponents.Screen ||\n requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n FabricComponents.ScreenContainer ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n (Platform.OS === 'ios'\n ? FabricComponents.ScreenNavigationContainer ||\n requireNativeComponent('RNSScreenNavigationContainer')\n : this.NativeScreenContainer);\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack ||\n FabricComponents.ScreenStack ||\n requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n FabricComponents.ScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n FabricComponents.ScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar =\n NativeSearchBar ||\n FabricComponents.SearchBar ||\n requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay ||\n FabricComponents.FullWindowOverlay ||\n requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\ninterface FreezeWrapperProps {\n freeze: boolean;\n children: React.ReactNode;\n}\n\n// This component allows one more render before freezing the screen.\n// Allows activityState to reach the native side and useIsFocused to work correctly.\nfunction DelayedFreeze({ freeze, children }: FreezeWrapperProps) {\n // flag used for determining whether freeze should be enabled\n const [freezeState, setFreezeState] = React.useState(false);\n\n if (freeze !== freezeState) {\n // setImmediate is executed at the end of the JS execution block.\n // Used here for changing the state right after the render.\n setImmediate(() => {\n setFreezeState(freeze);\n });\n }\n\n return <Freeze freeze={freeze ? freezeState : false}>{children}</Freeze>;\n}\n\nfunction MaybeFreeze({ freeze, children }: FreezeWrapperProps) {\n if (ENABLE_FREEZE) {\n return <DelayedFreeze freeze={freeze}>{children}</DelayedFreeze>;\n } else {\n return <>{children}</>;\n }\n}\n\nfunction ScreenStack(props: ScreenStackProps) {\n if (ENABLE_FREEZE) {\n const { children, ...rest } = props;\n const size = React.Children.count(children);\n // freezes all screens except the top one\n const childrenWithFreeze = React.Children.map(children, (child, index) => (\n <DelayedFreeze freeze={size - index > 1}>{child}</DelayedFreeze>\n ));\n return (\n <ScreensNativeModules.NativeScreenStack {...rest}>\n {childrenWithFreeze}\n </ScreensNativeModules.NativeScreenStack>\n );\n }\n return <ScreensNativeModules.NativeScreenStack {...props} />;\n}\n\n// Incomplete type, all accessible properties available at:\n// react-native/Libraries/Components/View/ReactNativeViewViewConfig.js\ninterface ViewConfig extends View {\n viewConfig: {\n validAttributes: {\n style: {\n display: boolean;\n };\n };\n };\n}\n\nclass Screen extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n private closing = new Animated.Value(0);\n private progress = new Animated.Value(0);\n private goingForward = new Animated.Value(0);\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const { enabled = ENABLE_SCREENS, ...rest } = this.props;\n\n if (enabled && isPlatformSupported) {\n AnimatedNativeScreen =\n AnimatedNativeScreen ||\n Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);\n\n let {\n // Filter out active prop in this case because it is unused and\n // can cause problems depending on react-native version:\n // https://github.com/react-navigation/react-navigation/issues/4886\n active,\n activityState,\n children,\n isNativeStack,\n gestureResponseDistance,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n console.warn(\n 'It appears that you are using old version of react-navigation library. Please update @react-navigation/bottom-tabs, @react-navigation/stack and @react-navigation/drawer to version 5.10.0 or above to take full advantage of new functionality added to react-native-screens'\n );\n activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition\n }\n\n const handleRef = (ref: ViewConfig) => {\n if (!ENABLE_FABRIC) {\n if (ref?.viewConfig?.validAttributes?.style) {\n ref.viewConfig.validAttributes.style = {\n ...ref.viewConfig.validAttributes.style,\n display: false,\n };\n }\n this.setRef(ref);\n }\n };\n\n return (\n <MaybeFreeze freeze={activityState === 0}>\n <AnimatedNativeScreen\n {...props}\n activityState={activityState}\n gestureResponseDistance={{\n start: gestureResponseDistance?.start ?? -1,\n end: gestureResponseDistance?.end ?? -1,\n top: gestureResponseDistance?.top ?? -1,\n bottom: gestureResponseDistance?.bottom ?? -1,\n }}\n // This prevents showing blank screen when navigating between multiple screens with freezing\n // https://github.com/software-mansion/react-native-screens/pull/1208\n ref={handleRef}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </AnimatedNativeScreen>\n </MaybeFreeze>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(Screen);\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n ScreenStack,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (!isSearchBarAvailableForCurrentPlatform) {\n console.warn(\n 'Importing SearchBar is only valid on iOS and Android devices.'\n );\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n enableFreeze,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["index.native.tsx"],"names":["isPlatformSupported","Platform","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","UIManager","getViewManagerConfig","console","error","ENABLE_FREEZE","enableFreeze","shouldEnableReactFreeze","minor","parseInt","version","split","warn","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","DelayedFreeze","freeze","children","freezeState","setFreezeState","React","useState","setImmediate","ScreenStack","props","rest","size","Children","count","childrenWithFreeze","map","child","index","key","descriptor","descriptors","freezeEnabled","options","freezeOnBlur","InnerScreen","Component","Animated","Value","ref","onComponentRef","setNativeProps","render","enabled","createAnimatedComponent","active","activityState","isNativeStack","gestureResponseDistance","undefined","handleRef","viewConfig","validAttributes","style","display","setRef","start","end","top","bottom","event","nativeEvent","progress","closing","goingForward","useNativeDriver","ScreenContainer","hasTwoStates","styles","StyleSheet","create","headerSubview","position","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","Screen","ScreenWrapper","context","module","exports","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","isSearchBarAvailableForCurrentPlatform","View","FullWindowOverlay","useTransitionProgress","executeNativeBackPress"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Animated,\n Image,\n ImageProps,\n Platform,\n requireNativeComponent,\n StyleSheet,\n UIManager,\n View,\n ViewProps,\n} from 'react-native';\nimport { Freeze } from 'react-freeze';\nimport { version } from 'react-native/package.json';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\nimport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\nlet ENABLE_FREEZE = false;\n\nfunction enableFreeze(shouldEnableReactFreeze = true): void {\n const minor = parseInt(version.split('.')[1]); // eg. takes 66 from '0.66.0'\n\n // react-freeze requires react-native >=0.64, react-native from main is 0.0.0\n if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {\n console.warn(\n 'react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.'\n );\n }\n\n ENABLE_FREEZE = shouldEnableReactFreeze;\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue || requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n (Platform.OS === 'ios'\n ? requireNativeComponent('RNSScreenNavigationContainer')\n : this.NativeScreenContainer);\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack || requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar = NativeSearchBar || requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay || requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\ninterface FreezeWrapperProps {\n freeze: boolean;\n children: React.ReactNode;\n}\n\n// This component allows one more render before freezing the screen.\n// Allows activityState to reach the native side and useIsFocused to work correctly.\nfunction DelayedFreeze({ freeze, children }: FreezeWrapperProps) {\n // flag used for determining whether freeze should be enabled\n const [freezeState, setFreezeState] = React.useState(false);\n\n if (freeze !== freezeState) {\n // setImmediate is executed at the end of the JS execution block.\n // Used here for changing the state right after the render.\n setImmediate(() => {\n setFreezeState(freeze);\n });\n }\n\n return <Freeze freeze={freeze ? freezeState : false}>{children}</Freeze>;\n}\n\nfunction ScreenStack(props: ScreenStackProps) {\n const { children, ...rest } = props;\n const size = React.Children.count(children);\n // freezes all screens except the top one\n const childrenWithFreeze = React.Children.map(children, (child, index) => {\n // @ts-expect-error it's either SceneView in v6 or RouteView in v5\n const { props, key } = child;\n const descriptor = props?.descriptor ?? props?.descriptors?.[key];\n const freezeEnabled = descriptor?.options?.freezeOnBlur ?? ENABLE_FREEZE;\n\n return (\n <DelayedFreeze freeze={freezeEnabled && size - index > 1}>\n {child}\n </DelayedFreeze>\n );\n });\n\n return (\n <ScreensNativeModules.NativeScreenStack {...rest}>\n {childrenWithFreeze}\n </ScreensNativeModules.NativeScreenStack>\n );\n}\n\n// Incomplete type, all accessible properties available at:\n// react-native/Libraries/Components/View/ReactNativeViewViewConfig.js\ninterface ViewConfig extends View {\n viewConfig: {\n validAttributes: {\n style: {\n display: boolean;\n };\n };\n };\n}\n\nclass InnerScreen extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n private closing = new Animated.Value(0);\n private progress = new Animated.Value(0);\n private goingForward = new Animated.Value(0);\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const {\n enabled = ENABLE_SCREENS,\n freezeOnBlur = ENABLE_FREEZE,\n ...rest\n } = this.props;\n\n if (enabled && isPlatformSupported) {\n AnimatedNativeScreen =\n AnimatedNativeScreen ||\n Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);\n\n let {\n // Filter out active prop in this case because it is unused and\n // can cause problems depending on react-native version:\n // https://github.com/react-navigation/react-navigation/issues/4886\n active,\n activityState,\n children,\n isNativeStack,\n gestureResponseDistance,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n console.warn(\n 'It appears that you are using old version of react-navigation library. Please update @react-navigation/bottom-tabs, @react-navigation/stack and @react-navigation/drawer to version 5.10.0 or above to take full advantage of new functionality added to react-native-screens'\n );\n activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition\n }\n\n const handleRef = (ref: ViewConfig) => {\n if (ref?.viewConfig?.validAttributes?.style) {\n ref.viewConfig.validAttributes.style = {\n ...ref.viewConfig.validAttributes.style,\n display: false,\n };\n this.setRef(ref);\n }\n };\n\n return (\n <DelayedFreeze freeze={freezeOnBlur && activityState === 0}>\n <AnimatedNativeScreen\n {...props}\n activityState={activityState}\n gestureResponseDistance={{\n start: gestureResponseDistance?.start ?? -1,\n end: gestureResponseDistance?.end ?? -1,\n top: gestureResponseDistance?.top ?? -1,\n bottom: gestureResponseDistance?.bottom ?? -1,\n }}\n // This prevents showing blank screen when navigating between multiple screens with freezing\n // https://github.com/software-mansion/react-native-screens/pull/1208\n ref={handleRef}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </AnimatedNativeScreen>\n </DelayedFreeze>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `useReanimatedTransitionProgress` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(InnerScreen);\n\nclass Screen extends React.Component<ScreenProps> {\n static contextType = ScreenContext;\n\n render() {\n const ScreenWrapper = this.context || InnerScreen;\n return <ScreenWrapper {...this.props} />;\n }\n}\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n ScreenStack,\n InnerScreen,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (!isSearchBarAvailableForCurrentPlatform) {\n console.warn(\n 'Importing SearchBar is only valid on iOS and Android devices.'\n );\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n enableFreeze,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n};\n"]}
|