@react-navigation/stack 6.2.3 → 6.3.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/lib/commonjs/views/GestureHandlerNative.js +0 -6
- package/lib/commonjs/views/GestureHandlerNative.js.map +1 -1
- package/lib/commonjs/views/Screens.js.map +1 -1
- package/lib/commonjs/views/Stack/Card.js +6 -6
- package/lib/commonjs/views/Stack/Card.js.map +1 -1
- package/lib/commonjs/views/Stack/CardStack.js +4 -2
- package/lib/commonjs/views/Stack/CardStack.js.map +1 -1
- package/lib/module/views/GestureHandlerNative.js +1 -1
- package/lib/module/views/GestureHandlerNative.js.map +1 -1
- package/lib/module/views/Screens.js.map +1 -1
- package/lib/module/views/Stack/Card.js +6 -6
- package/lib/module/views/Stack/Card.js.map +1 -1
- package/lib/module/views/Stack/CardStack.js +4 -2
- package/lib/module/views/Stack/CardStack.js.map +1 -1
- package/lib/typescript/src/types.d.ts +8 -0
- package/lib/typescript/src/views/GestureHandlerNative.d.ts +2 -1
- package/lib/typescript/src/views/Screens.d.ts +1 -0
- package/lib/typescript/src/views/Stack/Card.d.ts +5 -2
- package/package.json +11 -11
- package/src/types.tsx +8 -0
- package/src/views/GestureHandlerNative.tsx +1 -1
- package/src/views/Screens.tsx +1 -0
- package/src/views/Stack/Card.tsx +11 -5
- package/src/views/Stack/CardStack.tsx +3 -1
|
@@ -16,12 +16,6 @@ Object.defineProperty(exports, "GestureState", {
|
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
18
|
exports.PanGestureHandler = PanGestureHandler;
|
|
19
|
-
Object.defineProperty(exports, "PanGestureHandlerGestureEvent", {
|
|
20
|
-
enumerable: true,
|
|
21
|
-
get: function () {
|
|
22
|
-
return _reactNativeGestureHandler.PanGestureHandlerGestureEvent;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
19
|
|
|
26
20
|
var React = _interopRequireWildcard(require("react"));
|
|
27
21
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["GestureHandlerNative.tsx"],"names":["PanGestureHandler","props","gestureRef","React","useRef"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["GestureHandlerNative.tsx"],"names":["PanGestureHandler","props","gestureRef","React","useRef"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAKA;;;;;;;;;;AAEO,SAASA,iBAAT,CAA2BC,KAA3B,EAA+D;AACpE,QAAMC,UAAU,GAAGC,KAAK,CAACC,MAAN,CAAsC,IAAtC,CAAnB;AAEA,sBACE,oBAAC,iCAAD,CAA0B,QAA1B;AAAmC,IAAA,KAAK,EAAEF;AAA1C,kBACE,oBAAC,4CAAD,eAA6BD,KAA7B;AAAoC,IAAA,GAAG,EAAEC;AAAzC,KADF,CADF;AAKD","sourcesContent":["import * as React from 'react';\nimport {\n PanGestureHandler as PanGestureHandlerNative,\n PanGestureHandlerProperties,\n} from 'react-native-gesture-handler';\n\nimport GestureHandlerRefContext from '../utils/GestureHandlerRefContext';\n\nexport function PanGestureHandler(props: PanGestureHandlerProperties) {\n const gestureRef = React.useRef<PanGestureHandlerNative>(null);\n\n return (\n <GestureHandlerRefContext.Provider value={gestureRef}>\n <PanGestureHandlerNative {...props} ref={gestureRef} />\n </GestureHandlerRefContext.Provider>\n );\n}\n\nexport type { PanGestureHandlerGestureEvent } from 'react-native-gesture-handler';\nexport {\n GestureHandlerRootView,\n State as GestureState,\n} from 'react-native-gesture-handler';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Screens.tsx"],"names":["Screens","require","e","MaybeScreenContainer","enabled","rest","MaybeScreen","active"],"mappings":";;;;;;;AAAA;;AACA;;;;;;;;AAEA,IAAIA,OAAJ;;AAEA,IAAI;AACFA,EAAAA,OAAO,GAAGC,OAAO,CAAC,sBAAD,CAAjB;AACD,CAFD,CAEE,OAAOC,CAAP,EAAU,CACV;AACD;;AAEM,MAAMC,oBAAoB,GAAG,QAM9B;AAAA,MAN+B;AACnCC,IAAAA,OADmC;AAEnC,OAAGC;AAFgC,GAM/B;;AACJ,MAAIL,OAAO,IAAI,IAAf,EAAqB;AACnB,wBAAO,oBAAC,OAAD,CAAS,eAAT;AAAyB,MAAA,OAAO,EAAEI;AAAlC,OAA+CC,IAA/C,EAAP;AACD;;AAED,sBAAO,oBAAC,iBAAD,EAAUA,IAAV,CAAP;AACD,CAZM;;;;AAcA,MAAMC,WAAW,GAAG,
|
|
1
|
+
{"version":3,"sources":["Screens.tsx"],"names":["Screens","require","e","MaybeScreenContainer","enabled","rest","MaybeScreen","active"],"mappings":";;;;;;;AAAA;;AACA;;;;;;;;AAEA,IAAIA,OAAJ;;AAEA,IAAI;AACFA,EAAAA,OAAO,GAAGC,OAAO,CAAC,sBAAD,CAAjB;AACD,CAFD,CAEE,OAAOC,CAAP,EAAU,CACV;AACD;;AAEM,MAAMC,oBAAoB,GAAG,QAM9B;AAAA,MAN+B;AACnCC,IAAAA,OADmC;AAEnC,OAAGC;AAFgC,GAM/B;;AACJ,MAAIL,OAAO,IAAI,IAAf,EAAqB;AACnB,wBAAO,oBAAC,OAAD,CAAS,eAAT;AAAyB,MAAA,OAAO,EAAEI;AAAlC,OAA+CC,IAA/C,EAAP;AACD;;AAED,sBAAO,oBAAC,iBAAD,EAAUA,IAAV,CAAP;AACD,CAZM;;;;AAcA,MAAMC,WAAW,GAAG,SASrB;AAAA,MATsB;AAC1BF,IAAAA,OAD0B;AAE1BG,IAAAA,MAF0B;AAG1B,OAAGF;AAHuB,GAStB;;AACJ,MAAIL,OAAO,IAAI,IAAf,EAAqB;AACnB,wBACE,oBAAC,OAAD,CAAS,MAAT;AAAgB,MAAA,OAAO,EAAEI,OAAzB;AAAkC,MAAA,aAAa,EAAEG;AAAjD,OAA6DF,IAA7D,EADF;AAGD;;AAED,sBAAO,oBAAC,iBAAD,EAAUA,IAAV,CAAP;AACD,CAjBM","sourcesContent":["import * as React from 'react';\nimport { Animated, View, ViewProps } from 'react-native';\n\nlet Screens: typeof import('react-native-screens') | undefined;\n\ntry {\n Screens = require('react-native-screens');\n} catch (e) {\n // Ignore\n}\n\nexport const MaybeScreenContainer = ({\n enabled,\n ...rest\n}: ViewProps & {\n enabled: boolean;\n children: React.ReactNode;\n}) => {\n if (Screens != null) {\n return <Screens.ScreenContainer enabled={enabled} {...rest} />;\n }\n\n return <View {...rest} />;\n};\n\nexport const MaybeScreen = ({\n enabled,\n active,\n ...rest\n}: ViewProps & {\n enabled: boolean;\n active: 0 | 1 | Animated.AnimatedInterpolation;\n children: React.ReactNode;\n freezeOnBlur?: boolean;\n}) => {\n if (Screens != null) {\n return (\n <Screens.Screen enabled={enabled} activityState={active} {...rest} />\n );\n }\n\n return <View {...rest} />;\n};\n"]}
|
|
@@ -62,6 +62,10 @@ class Card extends React.Component {
|
|
|
62
62
|
constructor() {
|
|
63
63
|
super(...arguments);
|
|
64
64
|
|
|
65
|
+
_defineProperty(this, "state", {
|
|
66
|
+
pointerEvents: 'auto'
|
|
67
|
+
});
|
|
68
|
+
|
|
65
69
|
_defineProperty(this, "isCurrentlyMounted", false);
|
|
66
70
|
|
|
67
71
|
_defineProperty(this, "isClosing", new _reactNative.Animated.Value(FALSE));
|
|
@@ -149,10 +153,8 @@ class Card extends React.Component {
|
|
|
149
153
|
});
|
|
150
154
|
|
|
151
155
|
_defineProperty(this, "setPointerEventsEnabled", enabled => {
|
|
152
|
-
var _this$contentRef$curr;
|
|
153
|
-
|
|
154
156
|
const pointerEvents = enabled ? 'box-none' : 'none';
|
|
155
|
-
|
|
157
|
+
this.setState({
|
|
156
158
|
pointerEvents
|
|
157
159
|
});
|
|
158
160
|
});
|
|
@@ -268,8 +270,6 @@ class Card extends React.Component {
|
|
|
268
270
|
left: insetLeft
|
|
269
271
|
}
|
|
270
272
|
})));
|
|
271
|
-
|
|
272
|
-
_defineProperty(this, "contentRef", /*#__PURE__*/React.createRef());
|
|
273
273
|
}
|
|
274
274
|
|
|
275
275
|
componentDidMount() {
|
|
@@ -461,7 +461,7 @@ class Card extends React.Component {
|
|
|
461
461
|
}, shadowStyle],
|
|
462
462
|
pointerEvents: "none"
|
|
463
463
|
}) : null, /*#__PURE__*/React.createElement(_CardSheet.default, {
|
|
464
|
-
|
|
464
|
+
pointerEvents: this.state.pointerEvents,
|
|
465
465
|
enabled: pageOverflowEnabled,
|
|
466
466
|
layout: layout,
|
|
467
467
|
style: contentStyle
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Card.tsx"],"names":["GESTURE_VELOCITY_IMPACT","TRUE","FALSE","GESTURE_RESPONSE_DISTANCE_HORIZONTAL","GESTURE_RESPONSE_DISTANCE_VERTICAL","useNativeDriver","Platform","OS","hasOpacityStyle","style","flattenedStyle","StyleSheet","flatten","opacity","Card","React","Component","Animated","Value","props","gestureDirection","width","layout","height","closing","velocity","gesture","transitionSpec","onOpen","onClose","onTransition","toValue","getAnimateToValue","lastToValue","isClosing","setValue","spec","close","open","animation","spring","timing","setPointerEventsEnabled","handleStartInteraction","clearTimeout","pendingGestureCallback","undefined","config","isInteraction","start","finished","handleEndInteraction","isCurrentlyMounted","forceUpdate","enabled","pointerEvents","contentRef","current","setNativeProps","interactionHandle","InteractionManager","createInteractionHandle","clearInteractionHandle","nativeEvent","onGestureBegin","onGestureCanceled","onGestureEnd","gestureVelocityImpact","state","GestureState","ACTIVE","isSwiping","CANCELLED","velocityY","velocityX","animate","END","distance","translation","translationY","translationX","setTimeout","styleInterpolator","interpolationIndex","next","insetTop","insetRight","insetBottom","insetLeft","index","progress","swiping","inverted","layouts","screen","insets","top","right","bottom","left","createRef","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","stopAnimation","gestureActivationCriteria","gestureResponseDistance","enableTrackpadTwoFingerGesture","maxDeltaX","minOffsetY","hitSlop","invertedMultiplier","minOffsetX","maxDeltaY","render","overlay","overlayEnabled","shadowEnabled","gestureEnabled","pageOverflowEnabled","headerDarkContent","children","containerStyle","customContainerStyle","contentStyle","rest","interpolationProps","getCardAnimation","interpolatedStyle","getInterpolatedStyle","cardStyle","overlayStyle","shadowStyle","handleGestureEvent","event","backgroundColor","isTransparent","alpha","getIsModalPresentation","absoluteFill","styles","container","handleGestureStateChange","shadow","shadowHorizontal","shadowLeft","shadowRight","shadowVertical","shadowTop","shadowBottom","cardStyleInterpolator","forModalPresentationIOS","name","create","flex","position","shadowRadius","shadowColor","shadowOpacity","shadowOffset"],"mappings":"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","sourcesContent":["import Color from 'color';\nimport * as React from 'react';\nimport {\n Animated,\n InteractionManager,\n Platform,\n StyleProp,\n StyleSheet,\n View,\n ViewProps,\n ViewStyle,\n} from 'react-native';\nimport type { EdgeInsets } from 'react-native-safe-area-context';\n\nimport { forModalPresentationIOS } from '../../TransitionConfigs/CardStyleInterpolators';\nimport type {\n GestureDirection,\n Layout,\n StackCardInterpolationProps,\n StackCardStyleInterpolator,\n TransitionSpec,\n} from '../../types';\nimport CardAnimationContext from '../../utils/CardAnimationContext';\nimport getDistanceForDirection from '../../utils/getDistanceForDirection';\nimport getInvertedMultiplier from '../../utils/getInvertedMultiplier';\nimport memoize from '../../utils/memoize';\nimport {\n GestureState,\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n} from '../GestureHandler';\nimport ModalStatusBarManager from '../ModalStatusBarManager';\nimport CardSheet from './CardSheet';\n\ntype Props = ViewProps & {\n interpolationIndex: number;\n closing: boolean;\n next?: Animated.AnimatedInterpolation;\n current: Animated.AnimatedInterpolation;\n gesture: Animated.Value;\n layout: Layout;\n insets: EdgeInsets;\n headerDarkContent: boolean | undefined;\n pageOverflowEnabled: boolean;\n gestureDirection: GestureDirection;\n onOpen: () => void;\n onClose: () => void;\n onTransition: (props: { closing: boolean; gesture: boolean }) => void;\n onGestureBegin: () => void;\n onGestureCanceled: () => void;\n onGestureEnd: () => void;\n children: React.ReactNode;\n overlay: (props: {\n style: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\n }) => React.ReactNode;\n overlayEnabled: boolean;\n shadowEnabled: boolean;\n gestureEnabled: boolean;\n gestureResponseDistance?: number;\n gestureVelocityImpact: number;\n transitionSpec: {\n open: TransitionSpec;\n close: TransitionSpec;\n };\n styleInterpolator: StackCardStyleInterpolator;\n containerStyle?: StyleProp<ViewStyle>;\n contentStyle?: StyleProp<ViewStyle>;\n};\n\nconst GESTURE_VELOCITY_IMPACT = 0.3;\n\nconst TRUE = 1;\nconst FALSE = 0;\n\n/**\n * The distance of touch start from the edge of the screen where the gesture will be recognized\n */\nconst GESTURE_RESPONSE_DISTANCE_HORIZONTAL = 50;\nconst GESTURE_RESPONSE_DISTANCE_VERTICAL = 135;\n\nconst useNativeDriver = Platform.OS !== 'web';\n\nconst hasOpacityStyle = (style: any) => {\n if (style) {\n const flattenedStyle = StyleSheet.flatten(style);\n return flattenedStyle.opacity != null;\n }\n\n return false;\n};\n\nexport default class Card extends React.Component<Props> {\n static defaultProps = {\n shadowEnabled: false,\n gestureEnabled: true,\n gestureVelocityImpact: GESTURE_VELOCITY_IMPACT,\n overlay: ({\n style,\n }: {\n style: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\n }) =>\n style ? (\n <Animated.View pointerEvents=\"none\" style={[styles.overlay, style]} />\n ) : null,\n };\n\n componentDidMount() {\n this.animate({ closing: this.props.closing });\n this.isCurrentlyMounted = true;\n }\n\n componentDidUpdate(prevProps: Props) {\n const { layout, gestureDirection, closing } = this.props;\n const { width, height } = layout;\n\n if (width !== prevProps.layout.width) {\n this.layout.width.setValue(width);\n }\n\n if (height !== prevProps.layout.height) {\n this.layout.height.setValue(height);\n }\n\n if (gestureDirection !== prevProps.gestureDirection) {\n this.inverted.setValue(getInvertedMultiplier(gestureDirection));\n }\n\n const toValue = this.getAnimateToValue(this.props);\n\n if (\n this.getAnimateToValue(prevProps) !== toValue ||\n this.lastToValue !== toValue\n ) {\n // We need to trigger the animation when route was closed\n // Thr route might have been closed by a `POP` action or by a gesture\n // When route was closed due to a gesture, the animation would've happened already\n // It's still important to trigger the animation so that `onClose` is called\n // If `onClose` is not called, cleanup step won't be performed for gestures\n this.animate({ closing });\n }\n }\n\n componentWillUnmount() {\n this.props.gesture.stopAnimation();\n this.isCurrentlyMounted = false;\n this.handleEndInteraction();\n }\n\n private isCurrentlyMounted = false;\n\n private isClosing = new Animated.Value(FALSE);\n\n private inverted = new Animated.Value(\n getInvertedMultiplier(this.props.gestureDirection)\n );\n\n private layout = {\n width: new Animated.Value(this.props.layout.width),\n height: new Animated.Value(this.props.layout.height),\n };\n\n private isSwiping = new Animated.Value(FALSE);\n\n private interactionHandle: number | undefined;\n\n private pendingGestureCallback: number | undefined;\n\n private lastToValue: number | undefined;\n\n private animate = ({\n closing,\n velocity,\n }: {\n closing: boolean;\n velocity?: number;\n }) => {\n const { gesture, transitionSpec, onOpen, onClose, onTransition } =\n this.props;\n\n const toValue = this.getAnimateToValue({\n ...this.props,\n closing,\n });\n\n this.lastToValue = toValue;\n\n this.isClosing.setValue(closing ? TRUE : FALSE);\n\n const spec = closing ? transitionSpec.close : transitionSpec.open;\n\n const animation =\n spec.animation === 'spring' ? Animated.spring : Animated.timing;\n\n this.setPointerEventsEnabled(!closing);\n this.handleStartInteraction();\n\n clearTimeout(this.pendingGestureCallback);\n\n onTransition?.({ closing, gesture: velocity !== undefined });\n animation(gesture, {\n ...spec.config,\n velocity,\n toValue,\n useNativeDriver,\n isInteraction: false,\n }).start(({ finished }) => {\n this.handleEndInteraction();\n\n clearTimeout(this.pendingGestureCallback);\n\n if (finished) {\n if (closing) {\n onClose();\n } else {\n onOpen();\n }\n\n if (this.isCurrentlyMounted) {\n // Make sure to re-open screen if it wasn't removed\n this.forceUpdate();\n }\n }\n });\n };\n\n private getAnimateToValue = ({\n closing,\n layout,\n gestureDirection,\n }: {\n closing?: boolean;\n layout: Layout;\n gestureDirection: GestureDirection;\n }) => {\n if (!closing) {\n return 0;\n }\n\n return getDistanceForDirection(layout, gestureDirection);\n };\n\n private setPointerEventsEnabled = (enabled: boolean) => {\n const pointerEvents = enabled ? 'box-none' : 'none';\n\n this.contentRef.current?.setNativeProps({ pointerEvents });\n };\n\n private handleStartInteraction = () => {\n if (this.interactionHandle === undefined) {\n this.interactionHandle = InteractionManager.createInteractionHandle();\n }\n };\n\n private handleEndInteraction = () => {\n if (this.interactionHandle !== undefined) {\n InteractionManager.clearInteractionHandle(this.interactionHandle);\n this.interactionHandle = undefined;\n }\n };\n\n private handleGestureStateChange = ({\n nativeEvent,\n }: PanGestureHandlerGestureEvent) => {\n const {\n layout,\n onClose,\n onGestureBegin,\n onGestureCanceled,\n onGestureEnd,\n gestureDirection,\n gestureVelocityImpact,\n } = this.props;\n\n switch (nativeEvent.state) {\n case GestureState.ACTIVE:\n this.isSwiping.setValue(TRUE);\n this.handleStartInteraction();\n onGestureBegin?.();\n break;\n case GestureState.CANCELLED: {\n this.isSwiping.setValue(FALSE);\n this.handleEndInteraction();\n\n const velocity =\n gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ? nativeEvent.velocityY\n : nativeEvent.velocityX;\n\n this.animate({ closing: this.props.closing, velocity });\n\n onGestureCanceled?.();\n break;\n }\n case GestureState.END: {\n this.isSwiping.setValue(FALSE);\n\n let distance;\n let translation;\n let velocity;\n\n if (\n gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ) {\n distance = layout.height;\n translation = nativeEvent.translationY;\n velocity = nativeEvent.velocityY;\n } else {\n distance = layout.width;\n translation = nativeEvent.translationX;\n velocity = nativeEvent.velocityX;\n }\n\n const closing =\n (translation + velocity * gestureVelocityImpact) *\n getInvertedMultiplier(gestureDirection) >\n distance / 2\n ? velocity !== 0 || translation !== 0\n : this.props.closing;\n\n this.animate({ closing, velocity });\n\n if (closing) {\n // We call onClose with a delay to make sure that the animation has already started\n // This will make sure that the state update caused by this doesn't affect start of animation\n this.pendingGestureCallback = setTimeout(() => {\n onClose();\n\n // Trigger an update after we dispatch the action to remove the screen\n // This will make sure that we check if the screen didn't get removed so we can cancel the animation\n this.forceUpdate();\n }, 32) as any as number;\n }\n\n onGestureEnd?.();\n break;\n }\n }\n };\n\n // Memoize this to avoid extra work on re-render\n private getInterpolatedStyle = memoize(\n (\n styleInterpolator: StackCardStyleInterpolator,\n animation: StackCardInterpolationProps\n ) => styleInterpolator(animation)\n );\n\n // Keep track of the animation context when deps changes.\n private getCardAnimation = memoize(\n (\n interpolationIndex: number,\n current: Animated.AnimatedInterpolation,\n next: Animated.AnimatedInterpolation | undefined,\n layout: Layout,\n insetTop: number,\n insetRight: number,\n insetBottom: number,\n insetLeft: number\n ) => ({\n index: interpolationIndex,\n current: { progress: current },\n next: next && { progress: next },\n closing: this.isClosing,\n swiping: this.isSwiping,\n inverted: this.inverted,\n layouts: {\n screen: layout,\n },\n insets: {\n top: insetTop,\n right: insetRight,\n bottom: insetBottom,\n left: insetLeft,\n },\n })\n );\n\n private gestureActivationCriteria() {\n const { layout, gestureDirection, gestureResponseDistance } = this.props;\n const enableTrackpadTwoFingerGesture = true;\n\n const distance =\n gestureResponseDistance !== undefined\n ? gestureResponseDistance\n : gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ? GESTURE_RESPONSE_DISTANCE_VERTICAL\n : GESTURE_RESPONSE_DISTANCE_HORIZONTAL;\n\n if (gestureDirection === 'vertical') {\n return {\n maxDeltaX: 15,\n minOffsetY: 5,\n hitSlop: { bottom: -layout.height + distance },\n enableTrackpadTwoFingerGesture,\n };\n } else if (gestureDirection === 'vertical-inverted') {\n return {\n maxDeltaX: 15,\n minOffsetY: -5,\n hitSlop: { top: -layout.height + distance },\n enableTrackpadTwoFingerGesture,\n };\n } else {\n const hitSlop = -layout.width + distance;\n const invertedMultiplier = getInvertedMultiplier(gestureDirection);\n\n if (invertedMultiplier === 1) {\n return {\n minOffsetX: 5,\n maxDeltaY: 20,\n hitSlop: { right: hitSlop },\n enableTrackpadTwoFingerGesture,\n };\n } else {\n return {\n minOffsetX: -5,\n maxDeltaY: 20,\n hitSlop: { left: hitSlop },\n enableTrackpadTwoFingerGesture,\n };\n }\n }\n }\n\n private contentRef = React.createRef<View>();\n\n render() {\n const {\n styleInterpolator,\n interpolationIndex,\n current,\n gesture,\n next,\n layout,\n insets,\n overlay,\n overlayEnabled,\n shadowEnabled,\n gestureEnabled,\n gestureDirection,\n pageOverflowEnabled,\n headerDarkContent,\n children,\n containerStyle: customContainerStyle,\n contentStyle,\n ...rest\n } = this.props;\n\n const interpolationProps = this.getCardAnimation(\n interpolationIndex,\n current,\n next,\n layout,\n insets.top,\n insets.right,\n insets.bottom,\n insets.left\n );\n\n const interpolatedStyle = this.getInterpolatedStyle(\n styleInterpolator,\n interpolationProps\n );\n\n const { containerStyle, cardStyle, overlayStyle, shadowStyle } =\n interpolatedStyle;\n\n const handleGestureEvent = gestureEnabled\n ? Animated.event(\n [\n {\n nativeEvent:\n gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ? { translationY: gesture }\n : { translationX: gesture },\n },\n ],\n { useNativeDriver }\n )\n : undefined;\n\n const { backgroundColor } = StyleSheet.flatten(contentStyle || {});\n const isTransparent =\n typeof backgroundColor === 'string'\n ? Color(backgroundColor).alpha() === 0\n : false;\n\n return (\n <CardAnimationContext.Provider value={interpolationProps}>\n {\n // StatusBar messes with translucent status bar on Android\n // So we should only enable it on iOS\n Platform.OS === 'ios' &&\n overlayEnabled &&\n next &&\n getIsModalPresentation(styleInterpolator) ? (\n <ModalStatusBarManager\n dark={headerDarkContent}\n layout={layout}\n insets={insets}\n style={cardStyle}\n />\n ) : null\n }\n <Animated.View\n style={{\n // This is a dummy style that doesn't actually change anything visually.\n // Animated needs the animated value to be used somewhere, otherwise things don't update properly.\n // If we disable animations and hide header, it could end up making the value unused.\n // So we have this dummy style that will always be used regardless of what else changed.\n opacity: current,\n }}\n // Make sure that this view isn't removed. If this view is removed, our style with animated value won't apply\n collapsable={false}\n />\n <View pointerEvents=\"box-none\" {...rest}>\n {overlayEnabled ? (\n <View pointerEvents=\"box-none\" style={StyleSheet.absoluteFill}>\n {overlay({ style: overlayStyle })}\n </View>\n ) : null}\n <Animated.View\n style={[styles.container, containerStyle, customContainerStyle]}\n pointerEvents=\"box-none\"\n >\n <PanGestureHandler\n enabled={layout.width !== 0 && gestureEnabled}\n onGestureEvent={handleGestureEvent}\n onHandlerStateChange={this.handleGestureStateChange}\n {...this.gestureActivationCriteria()}\n >\n <Animated.View\n needsOffscreenAlphaCompositing={hasOpacityStyle(cardStyle)}\n style={[styles.container, cardStyle]}\n >\n {shadowEnabled && shadowStyle && !isTransparent ? (\n <Animated.View\n style={[\n styles.shadow,\n gestureDirection === 'horizontal'\n ? [styles.shadowHorizontal, styles.shadowLeft]\n : gestureDirection === 'horizontal-inverted'\n ? [styles.shadowHorizontal, styles.shadowRight]\n : gestureDirection === 'vertical'\n ? [styles.shadowVertical, styles.shadowTop]\n : [styles.shadowVertical, styles.shadowBottom],\n { backgroundColor },\n shadowStyle,\n ]}\n pointerEvents=\"none\"\n />\n ) : null}\n <CardSheet\n ref={this.contentRef}\n enabled={pageOverflowEnabled}\n layout={layout}\n style={contentStyle}\n >\n {children}\n </CardSheet>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </View>\n </CardAnimationContext.Provider>\n );\n }\n}\n\nexport const getIsModalPresentation = (\n cardStyleInterpolator: StackCardStyleInterpolator\n) => {\n return (\n cardStyleInterpolator === forModalPresentationIOS ||\n // Handle custom modal presentation interpolators as well\n cardStyleInterpolator.name === 'forModalPresentationIOS'\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n overlay: {\n flex: 1,\n backgroundColor: '#000',\n },\n shadow: {\n position: 'absolute',\n shadowRadius: 5,\n shadowColor: '#000',\n shadowOpacity: 0.3,\n },\n shadowHorizontal: {\n top: 0,\n bottom: 0,\n width: 3,\n shadowOffset: { width: -1, height: 1 },\n },\n shadowLeft: {\n left: 0,\n },\n shadowRight: {\n right: 0,\n },\n shadowVertical: {\n left: 0,\n right: 0,\n height: 3,\n shadowOffset: { width: 1, height: -1 },\n },\n shadowTop: {\n top: 0,\n },\n shadowBottom: {\n bottom: 0,\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["Card.tsx"],"names":["GESTURE_VELOCITY_IMPACT","TRUE","FALSE","GESTURE_RESPONSE_DISTANCE_HORIZONTAL","GESTURE_RESPONSE_DISTANCE_VERTICAL","useNativeDriver","Platform","OS","hasOpacityStyle","style","flattenedStyle","StyleSheet","flatten","opacity","Card","React","Component","pointerEvents","Animated","Value","props","gestureDirection","width","layout","height","closing","velocity","gesture","transitionSpec","onOpen","onClose","onTransition","toValue","getAnimateToValue","lastToValue","isClosing","setValue","spec","close","open","animation","spring","timing","setPointerEventsEnabled","handleStartInteraction","clearTimeout","pendingGestureCallback","undefined","config","isInteraction","start","finished","handleEndInteraction","isCurrentlyMounted","forceUpdate","enabled","setState","interactionHandle","InteractionManager","createInteractionHandle","clearInteractionHandle","nativeEvent","onGestureBegin","onGestureCanceled","onGestureEnd","gestureVelocityImpact","state","GestureState","ACTIVE","isSwiping","CANCELLED","velocityY","velocityX","animate","END","distance","translation","translationY","translationX","setTimeout","styleInterpolator","interpolationIndex","current","next","insetTop","insetRight","insetBottom","insetLeft","index","progress","swiping","inverted","layouts","screen","insets","top","right","bottom","left","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","stopAnimation","gestureActivationCriteria","gestureResponseDistance","enableTrackpadTwoFingerGesture","maxDeltaX","minOffsetY","hitSlop","invertedMultiplier","minOffsetX","maxDeltaY","render","overlay","overlayEnabled","shadowEnabled","gestureEnabled","pageOverflowEnabled","headerDarkContent","children","containerStyle","customContainerStyle","contentStyle","rest","interpolationProps","getCardAnimation","interpolatedStyle","getInterpolatedStyle","cardStyle","overlayStyle","shadowStyle","handleGestureEvent","event","backgroundColor","isTransparent","alpha","getIsModalPresentation","absoluteFill","styles","container","handleGestureStateChange","shadow","shadowHorizontal","shadowLeft","shadowRight","shadowVertical","shadowTop","shadowBottom","cardStyleInterpolator","forModalPresentationIOS","name","create","flex","position","shadowRadius","shadowColor","shadowOpacity","shadowOffset"],"mappings":"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","sourcesContent":["import Color from 'color';\nimport * as React from 'react';\nimport {\n Animated,\n InteractionManager,\n Platform,\n StyleProp,\n StyleSheet,\n View,\n ViewProps,\n ViewStyle,\n} from 'react-native';\nimport type { EdgeInsets } from 'react-native-safe-area-context';\n\nimport { forModalPresentationIOS } from '../../TransitionConfigs/CardStyleInterpolators';\nimport type {\n GestureDirection,\n Layout,\n StackCardInterpolationProps,\n StackCardStyleInterpolator,\n TransitionSpec,\n} from '../../types';\nimport CardAnimationContext from '../../utils/CardAnimationContext';\nimport getDistanceForDirection from '../../utils/getDistanceForDirection';\nimport getInvertedMultiplier from '../../utils/getInvertedMultiplier';\nimport memoize from '../../utils/memoize';\nimport {\n GestureState,\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n} from '../GestureHandler';\nimport ModalStatusBarManager from '../ModalStatusBarManager';\nimport CardSheet from './CardSheet';\n\ntype Props = ViewProps & {\n interpolationIndex: number;\n closing: boolean;\n next?: Animated.AnimatedInterpolation;\n current: Animated.AnimatedInterpolation;\n gesture: Animated.Value;\n layout: Layout;\n insets: EdgeInsets;\n headerDarkContent: boolean | undefined;\n pageOverflowEnabled: boolean;\n gestureDirection: GestureDirection;\n onOpen: () => void;\n onClose: () => void;\n onTransition: (props: { closing: boolean; gesture: boolean }) => void;\n onGestureBegin: () => void;\n onGestureCanceled: () => void;\n onGestureEnd: () => void;\n children: React.ReactNode;\n overlay: (props: {\n style: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\n }) => React.ReactNode;\n overlayEnabled: boolean;\n shadowEnabled: boolean;\n gestureEnabled: boolean;\n gestureResponseDistance?: number;\n gestureVelocityImpact: number;\n transitionSpec: {\n open: TransitionSpec;\n close: TransitionSpec;\n };\n styleInterpolator: StackCardStyleInterpolator;\n containerStyle?: StyleProp<ViewStyle>;\n contentStyle?: StyleProp<ViewStyle>;\n};\n\ntype State = {\n pointerEvents: ViewProps['pointerEvents'];\n};\n\nconst GESTURE_VELOCITY_IMPACT = 0.3;\n\nconst TRUE = 1;\nconst FALSE = 0;\n\n/**\n * The distance of touch start from the edge of the screen where the gesture will be recognized\n */\nconst GESTURE_RESPONSE_DISTANCE_HORIZONTAL = 50;\nconst GESTURE_RESPONSE_DISTANCE_VERTICAL = 135;\n\nconst useNativeDriver = Platform.OS !== 'web';\n\nconst hasOpacityStyle = (style: any) => {\n if (style) {\n const flattenedStyle = StyleSheet.flatten(style);\n return flattenedStyle.opacity != null;\n }\n\n return false;\n};\n\nexport default class Card extends React.Component<Props, State> {\n static defaultProps = {\n shadowEnabled: false,\n gestureEnabled: true,\n gestureVelocityImpact: GESTURE_VELOCITY_IMPACT,\n overlay: ({\n style,\n }: {\n style: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\n }) =>\n style ? (\n <Animated.View pointerEvents=\"none\" style={[styles.overlay, style]} />\n ) : null,\n };\n\n state: State = {\n pointerEvents: 'auto',\n };\n\n componentDidMount() {\n this.animate({ closing: this.props.closing });\n this.isCurrentlyMounted = true;\n }\n\n componentDidUpdate(prevProps: Props) {\n const { layout, gestureDirection, closing } = this.props;\n const { width, height } = layout;\n\n if (width !== prevProps.layout.width) {\n this.layout.width.setValue(width);\n }\n\n if (height !== prevProps.layout.height) {\n this.layout.height.setValue(height);\n }\n\n if (gestureDirection !== prevProps.gestureDirection) {\n this.inverted.setValue(getInvertedMultiplier(gestureDirection));\n }\n\n const toValue = this.getAnimateToValue(this.props);\n\n if (\n this.getAnimateToValue(prevProps) !== toValue ||\n this.lastToValue !== toValue\n ) {\n // We need to trigger the animation when route was closed\n // Thr route might have been closed by a `POP` action or by a gesture\n // When route was closed due to a gesture, the animation would've happened already\n // It's still important to trigger the animation so that `onClose` is called\n // If `onClose` is not called, cleanup step won't be performed for gestures\n this.animate({ closing });\n }\n }\n\n componentWillUnmount() {\n this.props.gesture.stopAnimation();\n this.isCurrentlyMounted = false;\n this.handleEndInteraction();\n }\n\n private isCurrentlyMounted = false;\n\n private isClosing = new Animated.Value(FALSE);\n\n private inverted = new Animated.Value(\n getInvertedMultiplier(this.props.gestureDirection)\n );\n\n private layout = {\n width: new Animated.Value(this.props.layout.width),\n height: new Animated.Value(this.props.layout.height),\n };\n\n private isSwiping = new Animated.Value(FALSE);\n\n private interactionHandle: number | undefined;\n\n private pendingGestureCallback: number | undefined;\n\n private lastToValue: number | undefined;\n\n private animate = ({\n closing,\n velocity,\n }: {\n closing: boolean;\n velocity?: number;\n }) => {\n const { gesture, transitionSpec, onOpen, onClose, onTransition } =\n this.props;\n\n const toValue = this.getAnimateToValue({\n ...this.props,\n closing,\n });\n\n this.lastToValue = toValue;\n\n this.isClosing.setValue(closing ? TRUE : FALSE);\n\n const spec = closing ? transitionSpec.close : transitionSpec.open;\n\n const animation =\n spec.animation === 'spring' ? Animated.spring : Animated.timing;\n\n this.setPointerEventsEnabled(!closing);\n this.handleStartInteraction();\n\n clearTimeout(this.pendingGestureCallback);\n\n onTransition?.({ closing, gesture: velocity !== undefined });\n animation(gesture, {\n ...spec.config,\n velocity,\n toValue,\n useNativeDriver,\n isInteraction: false,\n }).start(({ finished }) => {\n this.handleEndInteraction();\n\n clearTimeout(this.pendingGestureCallback);\n\n if (finished) {\n if (closing) {\n onClose();\n } else {\n onOpen();\n }\n\n if (this.isCurrentlyMounted) {\n // Make sure to re-open screen if it wasn't removed\n this.forceUpdate();\n }\n }\n });\n };\n\n private getAnimateToValue = ({\n closing,\n layout,\n gestureDirection,\n }: {\n closing?: boolean;\n layout: Layout;\n gestureDirection: GestureDirection;\n }) => {\n if (!closing) {\n return 0;\n }\n\n return getDistanceForDirection(layout, gestureDirection);\n };\n\n private setPointerEventsEnabled = (enabled: boolean) => {\n const pointerEvents = enabled ? 'box-none' : 'none';\n\n this.setState({ pointerEvents });\n };\n\n private handleStartInteraction = () => {\n if (this.interactionHandle === undefined) {\n this.interactionHandle = InteractionManager.createInteractionHandle();\n }\n };\n\n private handleEndInteraction = () => {\n if (this.interactionHandle !== undefined) {\n InteractionManager.clearInteractionHandle(this.interactionHandle);\n this.interactionHandle = undefined;\n }\n };\n\n private handleGestureStateChange = ({\n nativeEvent,\n }: PanGestureHandlerGestureEvent) => {\n const {\n layout,\n onClose,\n onGestureBegin,\n onGestureCanceled,\n onGestureEnd,\n gestureDirection,\n gestureVelocityImpact,\n } = this.props;\n\n switch (nativeEvent.state) {\n case GestureState.ACTIVE:\n this.isSwiping.setValue(TRUE);\n this.handleStartInteraction();\n onGestureBegin?.();\n break;\n case GestureState.CANCELLED: {\n this.isSwiping.setValue(FALSE);\n this.handleEndInteraction();\n\n const velocity =\n gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ? nativeEvent.velocityY\n : nativeEvent.velocityX;\n\n this.animate({ closing: this.props.closing, velocity });\n\n onGestureCanceled?.();\n break;\n }\n case GestureState.END: {\n this.isSwiping.setValue(FALSE);\n\n let distance;\n let translation;\n let velocity;\n\n if (\n gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ) {\n distance = layout.height;\n translation = nativeEvent.translationY;\n velocity = nativeEvent.velocityY;\n } else {\n distance = layout.width;\n translation = nativeEvent.translationX;\n velocity = nativeEvent.velocityX;\n }\n\n const closing =\n (translation + velocity * gestureVelocityImpact) *\n getInvertedMultiplier(gestureDirection) >\n distance / 2\n ? velocity !== 0 || translation !== 0\n : this.props.closing;\n\n this.animate({ closing, velocity });\n\n if (closing) {\n // We call onClose with a delay to make sure that the animation has already started\n // This will make sure that the state update caused by this doesn't affect start of animation\n this.pendingGestureCallback = setTimeout(() => {\n onClose();\n\n // Trigger an update after we dispatch the action to remove the screen\n // This will make sure that we check if the screen didn't get removed so we can cancel the animation\n this.forceUpdate();\n }, 32) as any as number;\n }\n\n onGestureEnd?.();\n break;\n }\n }\n };\n\n // Memoize this to avoid extra work on re-render\n private getInterpolatedStyle = memoize(\n (\n styleInterpolator: StackCardStyleInterpolator,\n animation: StackCardInterpolationProps\n ) => styleInterpolator(animation)\n );\n\n // Keep track of the animation context when deps changes.\n private getCardAnimation = memoize(\n (\n interpolationIndex: number,\n current: Animated.AnimatedInterpolation,\n next: Animated.AnimatedInterpolation | undefined,\n layout: Layout,\n insetTop: number,\n insetRight: number,\n insetBottom: number,\n insetLeft: number\n ) => ({\n index: interpolationIndex,\n current: { progress: current },\n next: next && { progress: next },\n closing: this.isClosing,\n swiping: this.isSwiping,\n inverted: this.inverted,\n layouts: {\n screen: layout,\n },\n insets: {\n top: insetTop,\n right: insetRight,\n bottom: insetBottom,\n left: insetLeft,\n },\n })\n );\n\n private gestureActivationCriteria() {\n const { layout, gestureDirection, gestureResponseDistance } = this.props;\n const enableTrackpadTwoFingerGesture = true;\n\n const distance =\n gestureResponseDistance !== undefined\n ? gestureResponseDistance\n : gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ? GESTURE_RESPONSE_DISTANCE_VERTICAL\n : GESTURE_RESPONSE_DISTANCE_HORIZONTAL;\n\n if (gestureDirection === 'vertical') {\n return {\n maxDeltaX: 15,\n minOffsetY: 5,\n hitSlop: { bottom: -layout.height + distance },\n enableTrackpadTwoFingerGesture,\n };\n } else if (gestureDirection === 'vertical-inverted') {\n return {\n maxDeltaX: 15,\n minOffsetY: -5,\n hitSlop: { top: -layout.height + distance },\n enableTrackpadTwoFingerGesture,\n };\n } else {\n const hitSlop = -layout.width + distance;\n const invertedMultiplier = getInvertedMultiplier(gestureDirection);\n\n if (invertedMultiplier === 1) {\n return {\n minOffsetX: 5,\n maxDeltaY: 20,\n hitSlop: { right: hitSlop },\n enableTrackpadTwoFingerGesture,\n };\n } else {\n return {\n minOffsetX: -5,\n maxDeltaY: 20,\n hitSlop: { left: hitSlop },\n enableTrackpadTwoFingerGesture,\n };\n }\n }\n }\n\n render() {\n const {\n styleInterpolator,\n interpolationIndex,\n current,\n gesture,\n next,\n layout,\n insets,\n overlay,\n overlayEnabled,\n shadowEnabled,\n gestureEnabled,\n gestureDirection,\n pageOverflowEnabled,\n headerDarkContent,\n children,\n containerStyle: customContainerStyle,\n contentStyle,\n ...rest\n } = this.props;\n\n const interpolationProps = this.getCardAnimation(\n interpolationIndex,\n current,\n next,\n layout,\n insets.top,\n insets.right,\n insets.bottom,\n insets.left\n );\n\n const interpolatedStyle = this.getInterpolatedStyle(\n styleInterpolator,\n interpolationProps\n );\n\n const { containerStyle, cardStyle, overlayStyle, shadowStyle } =\n interpolatedStyle;\n\n const handleGestureEvent = gestureEnabled\n ? Animated.event(\n [\n {\n nativeEvent:\n gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ? { translationY: gesture }\n : { translationX: gesture },\n },\n ],\n { useNativeDriver }\n )\n : undefined;\n\n const { backgroundColor } = StyleSheet.flatten(contentStyle || {});\n const isTransparent =\n typeof backgroundColor === 'string'\n ? Color(backgroundColor).alpha() === 0\n : false;\n\n return (\n <CardAnimationContext.Provider value={interpolationProps}>\n {\n // StatusBar messes with translucent status bar on Android\n // So we should only enable it on iOS\n Platform.OS === 'ios' &&\n overlayEnabled &&\n next &&\n getIsModalPresentation(styleInterpolator) ? (\n <ModalStatusBarManager\n dark={headerDarkContent}\n layout={layout}\n insets={insets}\n style={cardStyle}\n />\n ) : null\n }\n <Animated.View\n style={{\n // This is a dummy style that doesn't actually change anything visually.\n // Animated needs the animated value to be used somewhere, otherwise things don't update properly.\n // If we disable animations and hide header, it could end up making the value unused.\n // So we have this dummy style that will always be used regardless of what else changed.\n opacity: current,\n }}\n // Make sure that this view isn't removed. If this view is removed, our style with animated value won't apply\n collapsable={false}\n />\n <View pointerEvents=\"box-none\" {...rest}>\n {overlayEnabled ? (\n <View pointerEvents=\"box-none\" style={StyleSheet.absoluteFill}>\n {overlay({ style: overlayStyle })}\n </View>\n ) : null}\n <Animated.View\n style={[styles.container, containerStyle, customContainerStyle]}\n pointerEvents=\"box-none\"\n >\n <PanGestureHandler\n enabled={layout.width !== 0 && gestureEnabled}\n onGestureEvent={handleGestureEvent}\n onHandlerStateChange={this.handleGestureStateChange}\n {...this.gestureActivationCriteria()}\n >\n <Animated.View\n needsOffscreenAlphaCompositing={hasOpacityStyle(cardStyle)}\n style={[styles.container, cardStyle]}\n >\n {shadowEnabled && shadowStyle && !isTransparent ? (\n <Animated.View\n style={[\n styles.shadow,\n gestureDirection === 'horizontal'\n ? [styles.shadowHorizontal, styles.shadowLeft]\n : gestureDirection === 'horizontal-inverted'\n ? [styles.shadowHorizontal, styles.shadowRight]\n : gestureDirection === 'vertical'\n ? [styles.shadowVertical, styles.shadowTop]\n : [styles.shadowVertical, styles.shadowBottom],\n { backgroundColor },\n shadowStyle,\n ]}\n pointerEvents=\"none\"\n />\n ) : null}\n <CardSheet\n pointerEvents={this.state.pointerEvents}\n enabled={pageOverflowEnabled}\n layout={layout}\n style={contentStyle}\n >\n {children}\n </CardSheet>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </View>\n </CardAnimationContext.Provider>\n );\n }\n}\n\nexport const getIsModalPresentation = (\n cardStyleInterpolator: StackCardStyleInterpolator\n) => {\n return (\n cardStyleInterpolator === forModalPresentationIOS ||\n // Handle custom modal presentation interpolators as well\n cardStyleInterpolator.name === 'forModalPresentationIOS'\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n overlay: {\n flex: 1,\n backgroundColor: '#000',\n },\n shadow: {\n position: 'absolute',\n shadowRadius: 5,\n shadowColor: '#000',\n shadowOpacity: 0.3,\n },\n shadowHorizontal: {\n top: 0,\n bottom: 0,\n width: 3,\n shadowOffset: { width: -1, height: 1 },\n },\n shadowLeft: {\n left: 0,\n },\n shadowRight: {\n right: 0,\n },\n shadowVertical: {\n left: 0,\n right: 0,\n height: 3,\n shadowOffset: { width: 1, height: -1 },\n },\n shadowTop: {\n top: 0,\n },\n shadowBottom: {\n bottom: 0,\n },\n});\n"]}
|
|
@@ -33,7 +33,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
33
33
|
|
|
34
34
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
35
35
|
|
|
36
|
-
const EPSILON =
|
|
36
|
+
const EPSILON = 1e-5;
|
|
37
37
|
const STATE_INACTIVE = 0;
|
|
38
38
|
const STATE_TRANSITIONING_OR_BELOW_TOP = 1;
|
|
39
39
|
const STATE_ON_TOP = 2;
|
|
@@ -413,7 +413,8 @@ class CardStack extends React.Component {
|
|
|
413
413
|
headerShown = true,
|
|
414
414
|
headerTransparent,
|
|
415
415
|
headerStyle,
|
|
416
|
-
headerTintColor
|
|
416
|
+
headerTintColor,
|
|
417
|
+
freezeOnBlur
|
|
417
418
|
} = scene.descriptor.options;
|
|
418
419
|
const safeAreaInsetTop = insets.top;
|
|
419
420
|
const safeAreaInsetRight = insets.right;
|
|
@@ -444,6 +445,7 @@ class CardStack extends React.Component {
|
|
|
444
445
|
style: _reactNative.StyleSheet.absoluteFill,
|
|
445
446
|
enabled: detachInactiveScreens,
|
|
446
447
|
active: isScreenActive,
|
|
448
|
+
freezeOnBlur: freezeOnBlur,
|
|
447
449
|
pointerEvents: "box-none"
|
|
448
450
|
}, /*#__PURE__*/React.createElement(_CardContainer.default, {
|
|
449
451
|
index: index,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CardStack.tsx"],"names":["EPSILON","STATE_INACTIVE","STATE_TRANSITIONING_OR_BELOW_TOP","STATE_ON_TOP","FALLBACK_DESCRIPTOR","Object","freeze","options","getInterpolationIndex","scenes","index","cardStyleInterpolator","descriptor","interpolationIndex","i","cardStyleInterpolatorCurrent","getIsModal","scene","isParentModal","isModalPresentation","isModal","getHeaderHeights","insets","isParentHeaderShown","layout","previous","reduce","acc","curr","headerStatusBarHeight","top","headerStyle","style","StyleSheet","flatten","height","route","key","getDistanceFromOptions","presentation","gestureDirection","ModalTransition","DefaultTransition","getProgressFromGesture","gesture","distance","width","Math","max","interpolate","inputRange","outputRange","CardStack","React","Component","getDerivedStateFromProps","props","state","routes","descriptors","gestures","animationEnabled","Animated","Value","openingRouteKeys","includes","map","self","previousRoute","nextRoute","oldScene","currentGesture","previousGesture","undefined","nextGesture","nextDescriptor","previousDescriptor","optionsForTransitionConfig","length","defaultTransitionPreset","ModalFadeTransition","Platform","OS","gestureEnabled","transitionSpec","forNoAnimationCard","headerStyleInterpolator","cardOverlayEnabled","headerMode","header","progress","current","next","__memo","every","it","headerHeights","constructor","e","nativeEvent","setState","previousHeight","getPreviousRoute","previousScene","find","SafeAreaProviderCompat","initialMetrics","frame","render","closingRouteKeys","onOpenRoute","onCloseRoute","renderHeader","renderScene","onTransitionStart","onTransitionEnd","onGestureStart","onGestureEnd","onGestureCancel","detachInactiveScreens","focusedRoute","focusedHeaderHeight","isFloatHeaderAbsolute","slice","some","headerTransparent","headerShown","activeScreensLimit","detachPreviousScreen","lastIndexOf","forModalPresentationIOS","floatingHeader","mode","getPreviousScene","getFocusedRoute","onContentHeightChange","handleHeaderLayout","styles","floating","absolute","container","handleLayout","focused","isScreenActive","sceneForActivity","outputValue","extrapolate","headerTintColor","safeAreaInsetTop","safeAreaInsetRight","right","safeAreaInsetBottom","bottom","safeAreaInsetLeft","left","headerHeight","headerDarkContent","isDark","flattenedHeaderStyle","backgroundColor","isNextScreenTransparent","detachCurrentScreen","absoluteFill","create","flex","position","zIndex"],"mappings":"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","sourcesContent":["import {\n Background,\n getDefaultHeaderHeight,\n SafeAreaProviderCompat,\n} from '@react-navigation/elements';\nimport type {\n ParamListBase,\n Route,\n StackNavigationState,\n} from '@react-navigation/native';\nimport Color from 'color';\nimport * as React from 'react';\nimport {\n Animated,\n LayoutChangeEvent,\n Platform,\n StyleSheet,\n} from 'react-native';\nimport type { EdgeInsets } from 'react-native-safe-area-context';\n\nimport {\n forModalPresentationIOS,\n forNoAnimation as forNoAnimationCard,\n} from '../../TransitionConfigs/CardStyleInterpolators';\nimport {\n DefaultTransition,\n ModalFadeTransition,\n ModalTransition,\n} from '../../TransitionConfigs/TransitionPresets';\nimport type {\n Layout,\n Scene,\n StackDescriptor,\n StackDescriptorMap,\n StackHeaderMode,\n StackNavigationOptions,\n} from '../../types';\nimport getDistanceForDirection from '../../utils/getDistanceForDirection';\nimport type { Props as HeaderContainerProps } from '../Header/HeaderContainer';\nimport { MaybeScreen, MaybeScreenContainer } from '../Screens';\nimport { getIsModalPresentation } from './Card';\nimport CardContainer from './CardContainer';\n\ntype GestureValues = {\n [key: string]: Animated.Value;\n};\n\ntype Props = {\n insets: EdgeInsets;\n state: StackNavigationState<ParamListBase>;\n descriptors: StackDescriptorMap;\n routes: Route<string>[];\n openingRouteKeys: string[];\n closingRouteKeys: string[];\n onOpenRoute: (props: { route: Route<string> }) => void;\n onCloseRoute: (props: { route: Route<string> }) => void;\n getPreviousRoute: (props: {\n route: Route<string>;\n }) => Route<string> | undefined;\n renderHeader: (props: HeaderContainerProps) => React.ReactNode;\n renderScene: (props: { route: Route<string> }) => React.ReactNode;\n isParentHeaderShown: boolean;\n isParentModal: boolean;\n onTransitionStart: (\n props: { route: Route<string> },\n closing: boolean\n ) => void;\n onTransitionEnd: (props: { route: Route<string> }, closing: boolean) => void;\n onGestureStart: (props: { route: Route<string> }) => void;\n onGestureEnd: (props: { route: Route<string> }) => void;\n onGestureCancel: (props: { route: Route<string> }) => void;\n detachInactiveScreens?: boolean;\n};\n\ntype State = {\n routes: Route<string>[];\n descriptors: StackDescriptorMap;\n scenes: Scene[];\n gestures: GestureValues;\n layout: Layout;\n headerHeights: Record<string, number>;\n};\n\nconst EPSILON = 0.01;\n\nconst STATE_INACTIVE = 0;\nconst STATE_TRANSITIONING_OR_BELOW_TOP = 1;\nconst STATE_ON_TOP = 2;\n\nconst FALLBACK_DESCRIPTOR = Object.freeze({ options: {} });\n\nconst getInterpolationIndex = (scenes: Scene[], index: number) => {\n const { cardStyleInterpolator } = scenes[index].descriptor.options;\n\n // Start from current card and count backwards the number of cards with same interpolation\n let interpolationIndex = 0;\n\n for (let i = index - 1; i >= 0; i--) {\n const cardStyleInterpolatorCurrent =\n scenes[i]?.descriptor.options.cardStyleInterpolator;\n\n if (cardStyleInterpolatorCurrent !== cardStyleInterpolator) {\n break;\n }\n\n interpolationIndex++;\n }\n\n return interpolationIndex;\n};\n\nconst getIsModal = (\n scene: Scene,\n interpolationIndex: number,\n isParentModal: boolean\n) => {\n if (isParentModal) {\n return true;\n }\n\n const { cardStyleInterpolator } = scene.descriptor.options;\n const isModalPresentation = getIsModalPresentation(cardStyleInterpolator);\n const isModal = isModalPresentation && interpolationIndex !== 0;\n\n return isModal;\n};\n\nconst getHeaderHeights = (\n scenes: Scene[],\n insets: EdgeInsets,\n isParentHeaderShown: boolean,\n isParentModal: boolean,\n layout: Layout,\n previous: Record<string, number>\n) => {\n return scenes.reduce<Record<string, number>>((acc, curr, index) => {\n const {\n headerStatusBarHeight = isParentHeaderShown ? 0 : insets.top,\n headerStyle,\n } = curr.descriptor.options;\n\n const style = StyleSheet.flatten(headerStyle || {});\n\n const height =\n 'height' in style && typeof style.height === 'number'\n ? style.height\n : previous[curr.route.key];\n\n const interpolationIndex = getInterpolationIndex(scenes, index);\n const isModal = getIsModal(curr, interpolationIndex, isParentModal);\n\n acc[curr.route.key] =\n typeof height === 'number'\n ? height\n : getDefaultHeaderHeight(layout, isModal, headerStatusBarHeight);\n\n return acc;\n }, {});\n};\n\nconst getDistanceFromOptions = (\n layout: Layout,\n descriptor?: StackDescriptor\n) => {\n const {\n presentation,\n gestureDirection = presentation === 'modal'\n ? ModalTransition.gestureDirection\n : DefaultTransition.gestureDirection,\n } = (descriptor?.options || {}) as StackNavigationOptions;\n\n return getDistanceForDirection(layout, gestureDirection);\n};\n\nconst getProgressFromGesture = (\n gesture: Animated.Value,\n layout: Layout,\n descriptor?: StackDescriptor\n) => {\n const distance = getDistanceFromOptions(\n {\n // Make sure that we have a non-zero distance, otherwise there will be incorrect progress\n // This causes blank screen on web if it was previously inside container with display: none\n width: Math.max(1, layout.width),\n height: Math.max(1, layout.height),\n },\n descriptor\n );\n\n if (distance > 0) {\n return gesture.interpolate({\n inputRange: [0, distance],\n outputRange: [1, 0],\n });\n }\n\n return gesture.interpolate({\n inputRange: [distance, 0],\n outputRange: [0, 1],\n });\n};\n\nexport default class CardStack extends React.Component<Props, State> {\n static getDerivedStateFromProps(\n props: Props,\n state: State\n ): Partial<State> | null {\n if (\n props.routes === state.routes &&\n props.descriptors === state.descriptors\n ) {\n return null;\n }\n\n const gestures = props.routes.reduce<GestureValues>((acc, curr) => {\n const descriptor = props.descriptors[curr.key];\n const { animationEnabled } = descriptor?.options || {};\n\n acc[curr.key] =\n state.gestures[curr.key] ||\n new Animated.Value(\n props.openingRouteKeys.includes(curr.key) &&\n animationEnabled !== false\n ? getDistanceFromOptions(state.layout, descriptor)\n : 0\n );\n\n return acc;\n }, {});\n\n const scenes = props.routes.map((route, index, self) => {\n const previousRoute = self[index - 1];\n const nextRoute = self[index + 1];\n\n const oldScene = state.scenes[index];\n\n const currentGesture = gestures[route.key];\n const previousGesture = previousRoute\n ? gestures[previousRoute.key]\n : undefined;\n const nextGesture = nextRoute ? gestures[nextRoute.key] : undefined;\n\n const descriptor =\n props.descriptors[route.key] ||\n state.descriptors[route.key] ||\n (oldScene ? oldScene.descriptor : FALLBACK_DESCRIPTOR);\n\n const nextDescriptor =\n props.descriptors[nextRoute?.key] || state.descriptors[nextRoute?.key];\n\n const previousDescriptor =\n props.descriptors[previousRoute?.key] ||\n state.descriptors[previousRoute?.key];\n\n // When a screen is not the last, it should use next screen's transition config\n // Many transitions also animate the previous screen, so using 2 different transitions doesn't look right\n // For example combining a slide and a modal transition would look wrong otherwise\n // With this approach, combining different transition styles in the same navigator mostly looks right\n // This will still be broken when 2 transitions have different idle state (e.g. modal presentation),\n // but majority of the transitions look alright\n const optionsForTransitionConfig =\n index !== self.length - 1 &&\n nextDescriptor &&\n nextDescriptor.options.presentation !== 'transparentModal'\n ? nextDescriptor.options\n : descriptor.options;\n\n let defaultTransitionPreset =\n optionsForTransitionConfig.presentation === 'modal'\n ? ModalTransition\n : optionsForTransitionConfig.presentation === 'transparentModal'\n ? ModalFadeTransition\n : DefaultTransition;\n\n const {\n animationEnabled = Platform.OS !== 'web' &&\n Platform.OS !== 'windows' &&\n Platform.OS !== 'macos',\n gestureEnabled = Platform.OS === 'ios' && animationEnabled,\n gestureDirection = defaultTransitionPreset.gestureDirection,\n transitionSpec = defaultTransitionPreset.transitionSpec,\n cardStyleInterpolator = animationEnabled === false\n ? forNoAnimationCard\n : defaultTransitionPreset.cardStyleInterpolator,\n headerStyleInterpolator = defaultTransitionPreset.headerStyleInterpolator,\n cardOverlayEnabled = (Platform.OS !== 'ios' &&\n optionsForTransitionConfig.presentation !== 'transparentModal') ||\n getIsModalPresentation(cardStyleInterpolator),\n } = optionsForTransitionConfig;\n\n const headerMode: StackHeaderMode =\n descriptor.options.headerMode ??\n (!(\n optionsForTransitionConfig.presentation === 'modal' ||\n optionsForTransitionConfig.presentation === 'transparentModal' ||\n nextDescriptor?.options.presentation === 'modal' ||\n nextDescriptor?.options.presentation === 'transparentModal' ||\n getIsModalPresentation(cardStyleInterpolator)\n ) &&\n Platform.OS === 'ios' &&\n descriptor.options.header === undefined\n ? 'float'\n : 'screen');\n\n const scene = {\n route,\n descriptor: {\n ...descriptor,\n options: {\n ...descriptor.options,\n animationEnabled,\n cardOverlayEnabled,\n cardStyleInterpolator,\n gestureDirection,\n gestureEnabled,\n headerStyleInterpolator,\n transitionSpec,\n headerMode,\n },\n },\n progress: {\n current: getProgressFromGesture(\n currentGesture,\n state.layout,\n descriptor\n ),\n next:\n nextGesture &&\n nextDescriptor?.options.presentation !== 'transparentModal'\n ? getProgressFromGesture(\n nextGesture,\n state.layout,\n nextDescriptor\n )\n : undefined,\n previous: previousGesture\n ? getProgressFromGesture(\n previousGesture,\n state.layout,\n previousDescriptor\n )\n : undefined,\n },\n __memo: [\n state.layout,\n descriptor,\n nextDescriptor,\n previousDescriptor,\n currentGesture,\n nextGesture,\n previousGesture,\n ],\n };\n\n if (\n oldScene &&\n scene.__memo.every((it, i) => {\n // @ts-expect-error: we haven't added __memo to the annotation to prevent usage elsewhere\n return oldScene.__memo[i] === it;\n })\n ) {\n return oldScene;\n }\n\n return scene;\n });\n\n return {\n routes: props.routes,\n scenes,\n gestures,\n descriptors: props.descriptors,\n headerHeights: getHeaderHeights(\n scenes,\n props.insets,\n props.isParentHeaderShown,\n props.isParentModal,\n state.layout,\n state.headerHeights\n ),\n };\n }\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n routes: [],\n scenes: [],\n gestures: {},\n layout: SafeAreaProviderCompat.initialMetrics.frame,\n descriptors: this.props.descriptors,\n // Used when card's header is null and mode is float to make transition\n // between screens with headers and those without headers smooth.\n // This is not a great heuristic here. We don't know synchronously\n // on mount what the header height is so we have just used the most\n // common cases here.\n headerHeights: {},\n };\n }\n\n private handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n const layout = { width, height };\n\n this.setState((state, props) => {\n if (height === state.layout.height && width === state.layout.width) {\n return null;\n }\n\n return {\n layout,\n headerHeights: getHeaderHeights(\n state.scenes,\n props.insets,\n props.isParentHeaderShown,\n props.isParentModal,\n layout,\n state.headerHeights\n ),\n };\n });\n };\n\n private handleHeaderLayout = ({\n route,\n height,\n }: {\n route: Route<string>;\n height: number;\n }) => {\n this.setState(({ headerHeights }) => {\n const previousHeight = headerHeights[route.key];\n\n if (previousHeight === height) {\n return null;\n }\n\n return {\n headerHeights: {\n ...headerHeights,\n [route.key]: height,\n },\n };\n });\n };\n\n private getFocusedRoute = () => {\n const { state } = this.props;\n\n return state.routes[state.index];\n };\n\n private getPreviousScene = ({ route }: { route: Route<string> }) => {\n const { getPreviousRoute } = this.props;\n const { scenes } = this.state;\n\n const previousRoute = getPreviousRoute({ route });\n\n if (previousRoute) {\n const previousScene = scenes.find(\n (scene) => scene.descriptor.route.key === previousRoute.key\n );\n\n return previousScene;\n }\n\n return undefined;\n };\n\n render() {\n const {\n insets,\n state,\n routes,\n closingRouteKeys,\n onOpenRoute,\n onCloseRoute,\n renderHeader,\n renderScene,\n isParentHeaderShown,\n isParentModal,\n onTransitionStart,\n onTransitionEnd,\n onGestureStart,\n onGestureEnd,\n onGestureCancel,\n detachInactiveScreens = Platform.OS === 'web' ||\n Platform.OS === 'android' ||\n Platform.OS === 'ios',\n } = this.props;\n\n const { scenes, layout, gestures, headerHeights } = this.state;\n\n const focusedRoute = state.routes[state.index];\n const focusedHeaderHeight = headerHeights[focusedRoute.key];\n\n const isFloatHeaderAbsolute = this.state.scenes.slice(-2).some((scene) => {\n const options = scene.descriptor.options ?? {};\n const { headerMode, headerTransparent, headerShown = true } = options;\n\n if (\n headerTransparent ||\n headerShown === false ||\n headerMode === 'screen'\n ) {\n return true;\n }\n\n return false;\n });\n\n let activeScreensLimit = 1;\n\n for (let i = scenes.length - 1; i >= 0; i--) {\n const { options } = scenes[i].descriptor;\n const {\n // By default, we don't want to detach the previous screen of the active one for modals\n detachPreviousScreen = options.presentation === 'transparentModal'\n ? false\n : getIsModalPresentation(options.cardStyleInterpolator)\n ? i !==\n scenes\n .map((scene) => scene.descriptor.options.cardStyleInterpolator)\n .lastIndexOf(forModalPresentationIOS)\n : true,\n } = options;\n\n if (detachPreviousScreen === false) {\n activeScreensLimit++;\n } else {\n // Check at least last 2 screens before stopping\n // This will make sure that screen isn't detached when another screen is animating on top of the transparent one\n // For example, (Opaque -> Transparent -> Opaque)\n if (i <= scenes.length - 2) {\n break;\n }\n }\n }\n\n const floatingHeader = (\n <React.Fragment key=\"header\">\n {renderHeader({\n mode: 'float',\n layout,\n scenes,\n getPreviousScene: this.getPreviousScene,\n getFocusedRoute: this.getFocusedRoute,\n onContentHeightChange: this.handleHeaderLayout,\n style: [\n styles.floating,\n isFloatHeaderAbsolute && [\n // Without this, the header buttons won't be touchable on Android when headerTransparent: true\n { height: focusedHeaderHeight },\n styles.absolute,\n ],\n ],\n })}\n </React.Fragment>\n );\n\n return (\n <Background>\n {isFloatHeaderAbsolute ? null : floatingHeader}\n <MaybeScreenContainer\n enabled={detachInactiveScreens}\n style={styles.container}\n onLayout={this.handleLayout}\n >\n {routes.map((route, index, self) => {\n const focused = focusedRoute.key === route.key;\n const gesture = gestures[route.key];\n const scene = scenes[index];\n\n // For the screens that shouldn't be active, the value is 0\n // For those that should be active, but are not the top screen, the value is 1\n // For those on top of the stack and with interaction enabled, the value is 2\n // For the old implementation, it stays the same it was\n let isScreenActive: Animated.AnimatedInterpolation | 2 | 1 | 0 = 1;\n\n if (index < self.length - activeScreensLimit - 1) {\n // screen should be inactive because it is too deep in the stack\n isScreenActive = STATE_INACTIVE;\n } else {\n const sceneForActivity = scenes[self.length - 1];\n const outputValue =\n index === self.length - 1\n ? STATE_ON_TOP // the screen is on top after the transition\n : index >= self.length - activeScreensLimit\n ? STATE_TRANSITIONING_OR_BELOW_TOP // the screen should stay active after the transition, it is not on top but is in activeLimit\n : STATE_INACTIVE; // the screen should be active only during the transition, it is at the edge of activeLimit\n isScreenActive = sceneForActivity\n ? sceneForActivity.progress.current.interpolate({\n inputRange: [0, 1 - EPSILON, 1],\n outputRange: [1, 1, outputValue],\n extrapolate: 'clamp',\n })\n : STATE_TRANSITIONING_OR_BELOW_TOP;\n }\n\n const {\n headerShown = true,\n headerTransparent,\n headerStyle,\n headerTintColor,\n } = scene.descriptor.options;\n\n const safeAreaInsetTop = insets.top;\n const safeAreaInsetRight = insets.right;\n const safeAreaInsetBottom = insets.bottom;\n const safeAreaInsetLeft = insets.left;\n\n const headerHeight =\n headerShown !== false ? headerHeights[route.key] : 0;\n\n let headerDarkContent: boolean | undefined;\n\n if (headerShown) {\n if (typeof headerTintColor === 'string') {\n headerDarkContent = Color(headerTintColor).isDark();\n } else {\n const flattenedHeaderStyle = StyleSheet.flatten(headerStyle);\n\n if (\n flattenedHeaderStyle &&\n 'backgroundColor' in flattenedHeaderStyle &&\n typeof flattenedHeaderStyle.backgroundColor === 'string'\n ) {\n headerDarkContent = !Color(\n flattenedHeaderStyle.backgroundColor\n ).isDark();\n }\n }\n }\n\n // Start from current card and count backwards the number of cards with same interpolation\n const interpolationIndex = getInterpolationIndex(scenes, index);\n const isModal = getIsModal(\n scene,\n interpolationIndex,\n isParentModal\n );\n\n const isNextScreenTransparent =\n scenes[index + 1]?.descriptor.options.presentation ===\n 'transparentModal';\n\n const detachCurrentScreen =\n scenes[index + 1]?.descriptor.options.detachPreviousScreen !==\n false;\n\n return (\n <MaybeScreen\n key={route.key}\n style={StyleSheet.absoluteFill}\n enabled={detachInactiveScreens}\n active={isScreenActive}\n pointerEvents=\"box-none\"\n >\n <CardContainer\n index={index}\n interpolationIndex={interpolationIndex}\n modal={isModal}\n active={index === self.length - 1}\n focused={focused}\n closing={closingRouteKeys.includes(route.key)}\n layout={layout}\n gesture={gesture}\n scene={scene}\n safeAreaInsetTop={safeAreaInsetTop}\n safeAreaInsetRight={safeAreaInsetRight}\n safeAreaInsetBottom={safeAreaInsetBottom}\n safeAreaInsetLeft={safeAreaInsetLeft}\n onGestureStart={onGestureStart}\n onGestureCancel={onGestureCancel}\n onGestureEnd={onGestureEnd}\n headerHeight={headerHeight}\n isParentHeaderShown={isParentHeaderShown}\n onHeaderHeightChange={this.handleHeaderLayout}\n getPreviousScene={this.getPreviousScene}\n getFocusedRoute={this.getFocusedRoute}\n headerDarkContent={headerDarkContent}\n hasAbsoluteFloatHeader={\n isFloatHeaderAbsolute && !headerTransparent\n }\n renderHeader={renderHeader}\n renderScene={renderScene}\n onOpenRoute={onOpenRoute}\n onCloseRoute={onCloseRoute}\n onTransitionStart={onTransitionStart}\n onTransitionEnd={onTransitionEnd}\n isNextScreenTransparent={isNextScreenTransparent}\n detachCurrentScreen={detachCurrentScreen}\n />\n </MaybeScreen>\n );\n })}\n </MaybeScreenContainer>\n {isFloatHeaderAbsolute ? floatingHeader : null}\n </Background>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n absolute: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n },\n floating: {\n zIndex: 1,\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["CardStack.tsx"],"names":["EPSILON","STATE_INACTIVE","STATE_TRANSITIONING_OR_BELOW_TOP","STATE_ON_TOP","FALLBACK_DESCRIPTOR","Object","freeze","options","getInterpolationIndex","scenes","index","cardStyleInterpolator","descriptor","interpolationIndex","i","cardStyleInterpolatorCurrent","getIsModal","scene","isParentModal","isModalPresentation","isModal","getHeaderHeights","insets","isParentHeaderShown","layout","previous","reduce","acc","curr","headerStatusBarHeight","top","headerStyle","style","StyleSheet","flatten","height","route","key","getDistanceFromOptions","presentation","gestureDirection","ModalTransition","DefaultTransition","getProgressFromGesture","gesture","distance","width","Math","max","interpolate","inputRange","outputRange","CardStack","React","Component","getDerivedStateFromProps","props","state","routes","descriptors","gestures","animationEnabled","Animated","Value","openingRouteKeys","includes","map","self","previousRoute","nextRoute","oldScene","currentGesture","previousGesture","undefined","nextGesture","nextDescriptor","previousDescriptor","optionsForTransitionConfig","length","defaultTransitionPreset","ModalFadeTransition","Platform","OS","gestureEnabled","transitionSpec","forNoAnimationCard","headerStyleInterpolator","cardOverlayEnabled","headerMode","header","progress","current","next","__memo","every","it","headerHeights","constructor","e","nativeEvent","setState","previousHeight","getPreviousRoute","previousScene","find","SafeAreaProviderCompat","initialMetrics","frame","render","closingRouteKeys","onOpenRoute","onCloseRoute","renderHeader","renderScene","onTransitionStart","onTransitionEnd","onGestureStart","onGestureEnd","onGestureCancel","detachInactiveScreens","focusedRoute","focusedHeaderHeight","isFloatHeaderAbsolute","slice","some","headerTransparent","headerShown","activeScreensLimit","detachPreviousScreen","lastIndexOf","forModalPresentationIOS","floatingHeader","mode","getPreviousScene","getFocusedRoute","onContentHeightChange","handleHeaderLayout","styles","floating","absolute","container","handleLayout","focused","isScreenActive","sceneForActivity","outputValue","extrapolate","headerTintColor","freezeOnBlur","safeAreaInsetTop","safeAreaInsetRight","right","safeAreaInsetBottom","bottom","safeAreaInsetLeft","left","headerHeight","headerDarkContent","isDark","flattenedHeaderStyle","backgroundColor","isNextScreenTransparent","detachCurrentScreen","absoluteFill","create","flex","position","zIndex"],"mappings":";;;;;;;AAAA;;AAUA;;AACA;;AACA;;AAQA;;AAIA;;AAaA;;AAEA;;AACA;;AACA;;;;;;;;;;AA0CA,MAAMA,OAAO,GAAG,IAAhB;AAEA,MAAMC,cAAc,GAAG,CAAvB;AACA,MAAMC,gCAAgC,GAAG,CAAzC;AACA,MAAMC,YAAY,GAAG,CAArB;AAEA,MAAMC,mBAAmB,GAAGC,MAAM,CAACC,MAAP,CAAc;AAAEC,EAAAA,OAAO,EAAE;AAAX,CAAd,CAA5B;;AAEA,MAAMC,qBAAqB,GAAG,CAACC,MAAD,EAAkBC,KAAlB,KAAoC;AAChE,QAAM;AAAEC,IAAAA;AAAF,MAA4BF,MAAM,CAACC,KAAD,CAAN,CAAcE,UAAd,CAAyBL,OAA3D,CADgE,CAGhE;;AACA,MAAIM,kBAAkB,GAAG,CAAzB;;AAEA,OAAK,IAAIC,CAAC,GAAGJ,KAAK,GAAG,CAArB,EAAwBI,CAAC,IAAI,CAA7B,EAAgCA,CAAC,EAAjC,EAAqC;AAAA;;AACnC,UAAMC,4BAA4B,gBAChCN,MAAM,CAACK,CAAD,CAD0B,8CAChC,UAAWF,UAAX,CAAsBL,OAAtB,CAA8BI,qBADhC;;AAGA,QAAII,4BAA4B,KAAKJ,qBAArC,EAA4D;AAC1D;AACD;;AAEDE,IAAAA,kBAAkB;AACnB;;AAED,SAAOA,kBAAP;AACD,CAlBD;;AAoBA,MAAMG,UAAU,GAAG,CACjBC,KADiB,EAEjBJ,kBAFiB,EAGjBK,aAHiB,KAId;AACH,MAAIA,aAAJ,EAAmB;AACjB,WAAO,IAAP;AACD;;AAED,QAAM;AAAEP,IAAAA;AAAF,MAA4BM,KAAK,CAACL,UAAN,CAAiBL,OAAnD;AACA,QAAMY,mBAAmB,GAAG,kCAAuBR,qBAAvB,CAA5B;AACA,QAAMS,OAAO,GAAGD,mBAAmB,IAAIN,kBAAkB,KAAK,CAA9D;AAEA,SAAOO,OAAP;AACD,CAdD;;AAgBA,MAAMC,gBAAgB,GAAG,CACvBZ,MADuB,EAEvBa,MAFuB,EAGvBC,mBAHuB,EAIvBL,aAJuB,EAKvBM,MALuB,EAMvBC,QANuB,KAOpB;AACH,SAAOhB,MAAM,CAACiB,MAAP,CAAsC,CAACC,GAAD,EAAMC,IAAN,EAAYlB,KAAZ,KAAsB;AACjE,UAAM;AACJmB,MAAAA,qBAAqB,GAAGN,mBAAmB,GAAG,CAAH,GAAOD,MAAM,CAACQ,GADrD;AAEJC,MAAAA;AAFI,QAGFH,IAAI,CAAChB,UAAL,CAAgBL,OAHpB;;AAKA,UAAMyB,KAAK,GAAGC,wBAAWC,OAAX,CAAmBH,WAAW,IAAI,EAAlC,CAAd;;AAEA,UAAMI,MAAM,GACV,YAAYH,KAAZ,IAAqB,OAAOA,KAAK,CAACG,MAAb,KAAwB,QAA7C,GACIH,KAAK,CAACG,MADV,GAEIV,QAAQ,CAACG,IAAI,CAACQ,KAAL,CAAWC,GAAZ,CAHd;AAKA,UAAMxB,kBAAkB,GAAGL,qBAAqB,CAACC,MAAD,EAASC,KAAT,CAAhD;AACA,UAAMU,OAAO,GAAGJ,UAAU,CAACY,IAAD,EAAOf,kBAAP,EAA2BK,aAA3B,CAA1B;AAEAS,IAAAA,GAAG,CAACC,IAAI,CAACQ,KAAL,CAAWC,GAAZ,CAAH,GACE,OAAOF,MAAP,KAAkB,QAAlB,GACIA,MADJ,GAEI,sCAAuBX,MAAvB,EAA+BJ,OAA/B,EAAwCS,qBAAxC,CAHN;AAKA,WAAOF,GAAP;AACD,GAtBM,EAsBJ,EAtBI,CAAP;AAuBD,CA/BD;;AAiCA,MAAMW,sBAAsB,GAAG,CAC7Bd,MAD6B,EAE7BZ,UAF6B,KAG1B;AACH,QAAM;AACJ2B,IAAAA,YADI;AAEJC,IAAAA,gBAAgB,GAAGD,YAAY,KAAK,OAAjB,GACfE,mCAAgBD,gBADD,GAEfE,qCAAkBF;AAJlB,MAKD,CAAA5B,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEL,OAAZ,KAAuB,EAL5B;AAOA,SAAO,sCAAwBiB,MAAxB,EAAgCgB,gBAAhC,CAAP;AACD,CAZD;;AAcA,MAAMG,sBAAsB,GAAG,CAC7BC,OAD6B,EAE7BpB,MAF6B,EAG7BZ,UAH6B,KAI1B;AACH,QAAMiC,QAAQ,GAAGP,sBAAsB,CACrC;AACE;AACA;AACAQ,IAAAA,KAAK,EAAEC,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYxB,MAAM,CAACsB,KAAnB,CAHT;AAIEX,IAAAA,MAAM,EAAEY,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYxB,MAAM,CAACW,MAAnB;AAJV,GADqC,EAOrCvB,UAPqC,CAAvC;;AAUA,MAAIiC,QAAQ,GAAG,CAAf,EAAkB;AAChB,WAAOD,OAAO,CAACK,WAAR,CAAoB;AACzBC,MAAAA,UAAU,EAAE,CAAC,CAAD,EAAIL,QAAJ,CADa;AAEzBM,MAAAA,WAAW,EAAE,CAAC,CAAD,EAAI,CAAJ;AAFY,KAApB,CAAP;AAID;;AAED,SAAOP,OAAO,CAACK,WAAR,CAAoB;AACzBC,IAAAA,UAAU,EAAE,CAACL,QAAD,EAAW,CAAX,CADa;AAEzBM,IAAAA,WAAW,EAAE,CAAC,CAAD,EAAI,CAAJ;AAFY,GAApB,CAAP;AAID,CA1BD;;AA4Be,MAAMC,SAAN,SAAwBC,KAAK,CAACC,SAA9B,CAAsD;AACpC,SAAxBC,wBAAwB,CAC7BC,KAD6B,EAE7BC,KAF6B,EAGN;AACvB,QACED,KAAK,CAACE,MAAN,KAAiBD,KAAK,CAACC,MAAvB,IACAF,KAAK,CAACG,WAAN,KAAsBF,KAAK,CAACE,WAF9B,EAGE;AACA,aAAO,IAAP;AACD;;AAED,UAAMC,QAAQ,GAAGJ,KAAK,CAACE,MAAN,CAAahC,MAAb,CAAmC,CAACC,GAAD,EAAMC,IAAN,KAAe;AACjE,YAAMhB,UAAU,GAAG4C,KAAK,CAACG,WAAN,CAAkB/B,IAAI,CAACS,GAAvB,CAAnB;AACA,YAAM;AAAEwB,QAAAA;AAAF,UAAuB,CAAAjD,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEL,OAAZ,KAAuB,EAApD;AAEAoB,MAAAA,GAAG,CAACC,IAAI,CAACS,GAAN,CAAH,GACEoB,KAAK,CAACG,QAAN,CAAehC,IAAI,CAACS,GAApB,KACA,IAAIyB,sBAASC,KAAb,CACEP,KAAK,CAACQ,gBAAN,CAAuBC,QAAvB,CAAgCrC,IAAI,CAACS,GAArC,KACAwB,gBAAgB,KAAK,KADrB,GAEIvB,sBAAsB,CAACmB,KAAK,CAACjC,MAAP,EAAeZ,UAAf,CAF1B,GAGI,CAJN,CAFF;AASA,aAAOe,GAAP;AACD,KAdgB,EAcd,EAdc,CAAjB;AAgBA,UAAMlB,MAAM,GAAG+C,KAAK,CAACE,MAAN,CAAaQ,GAAb,CAAiB,CAAC9B,KAAD,EAAQ1B,KAAR,EAAeyD,IAAf,KAAwB;AAAA;;AACtD,YAAMC,aAAa,GAAGD,IAAI,CAACzD,KAAK,GAAG,CAAT,CAA1B;AACA,YAAM2D,SAAS,GAAGF,IAAI,CAACzD,KAAK,GAAG,CAAT,CAAtB;AAEA,YAAM4D,QAAQ,GAAGb,KAAK,CAAChD,MAAN,CAAaC,KAAb,CAAjB;AAEA,YAAM6D,cAAc,GAAGX,QAAQ,CAACxB,KAAK,CAACC,GAAP,CAA/B;AACA,YAAMmC,eAAe,GAAGJ,aAAa,GACjCR,QAAQ,CAACQ,aAAa,CAAC/B,GAAf,CADyB,GAEjCoC,SAFJ;AAGA,YAAMC,WAAW,GAAGL,SAAS,GAAGT,QAAQ,CAACS,SAAS,CAAChC,GAAX,CAAX,GAA6BoC,SAA1D;AAEA,YAAM7D,UAAU,GACd4C,KAAK,CAACG,WAAN,CAAkBvB,KAAK,CAACC,GAAxB,KACAoB,KAAK,CAACE,WAAN,CAAkBvB,KAAK,CAACC,GAAxB,CADA,KAECiC,QAAQ,GAAGA,QAAQ,CAAC1D,UAAZ,GAAyBR,mBAFlC,CADF;AAKA,YAAMuE,cAAc,GAClBnB,KAAK,CAACG,WAAN,CAAkBU,SAAlB,aAAkBA,SAAlB,uBAAkBA,SAAS,CAAEhC,GAA7B,KAAqCoB,KAAK,CAACE,WAAN,CAAkBU,SAAlB,aAAkBA,SAAlB,uBAAkBA,SAAS,CAAEhC,GAA7B,CADvC;AAGA,YAAMuC,kBAAkB,GACtBpB,KAAK,CAACG,WAAN,CAAkBS,aAAlB,aAAkBA,aAAlB,uBAAkBA,aAAa,CAAE/B,GAAjC,KACAoB,KAAK,CAACE,WAAN,CAAkBS,aAAlB,aAAkBA,aAAlB,uBAAkBA,aAAa,CAAE/B,GAAjC,CAFF,CApBsD,CAwBtD;AACA;AACA;AACA;AACA;AACA;;AACA,YAAMwC,0BAA0B,GAC9BnE,KAAK,KAAKyD,IAAI,CAACW,MAAL,GAAc,CAAxB,IACAH,cADA,IAEAA,cAAc,CAACpE,OAAf,CAAuBgC,YAAvB,KAAwC,kBAFxC,GAGIoC,cAAc,CAACpE,OAHnB,GAIIK,UAAU,CAACL,OALjB;AAOA,UAAIwE,uBAAuB,GACzBF,0BAA0B,CAACtC,YAA3B,KAA4C,OAA5C,GACIE,kCADJ,GAEIoC,0BAA0B,CAACtC,YAA3B,KAA4C,kBAA5C,GACAyC,sCADA,GAEAtC,oCALN;AAOA,YAAM;AACJmB,QAAAA,gBAAgB,GAAGoB,sBAASC,EAAT,KAAgB,KAAhB,IACjBD,sBAASC,EAAT,KAAgB,SADC,IAEjBD,sBAASC,EAAT,KAAgB,OAHd;AAIJC,QAAAA,cAAc,GAAGF,sBAASC,EAAT,KAAgB,KAAhB,IAAyBrB,gBAJtC;AAKJrB,QAAAA,gBAAgB,GAAGuC,uBAAuB,CAACvC,gBALvC;AAMJ4C,QAAAA,cAAc,GAAGL,uBAAuB,CAACK,cANrC;AAOJzE,QAAAA,qBAAqB,GAAGkD,gBAAgB,KAAK,KAArB,GACpBwB,sCADoB,GAEpBN,uBAAuB,CAACpE,qBATxB;AAUJ2E,QAAAA,uBAAuB,GAAGP,uBAAuB,CAACO,uBAV9C;AAWJC,QAAAA,kBAAkB,GAAIN,sBAASC,EAAT,KAAgB,KAAhB,IACpBL,0BAA0B,CAACtC,YAA3B,KAA4C,kBADzB,IAEnB,kCAAuB5B,qBAAvB;AAbE,UAcFkE,0BAdJ;AAgBA,YAAMW,UAA2B,4BAC/B5E,UAAU,CAACL,OAAX,CAAmBiF,UADY,yEAE9B,EACCX,0BAA0B,CAACtC,YAA3B,KAA4C,OAA5C,IACAsC,0BAA0B,CAACtC,YAA3B,KAA4C,kBAD5C,IAEA,CAAAoC,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAEpE,OAAhB,CAAwBgC,YAAxB,MAAyC,OAFzC,IAGA,CAAAoC,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAEpE,OAAhB,CAAwBgC,YAAxB,MAAyC,kBAHzC,IAIA,kCAAuB5B,qBAAvB,CALD,KAODsE,sBAASC,EAAT,KAAgB,KAPf,IAQDtE,UAAU,CAACL,OAAX,CAAmBkF,MAAnB,KAA8BhB,SAR7B,GASG,OATH,GAUG,QAZN;AAcA,YAAMxD,KAAK,GAAG;AACZmB,QAAAA,KADY;AAEZxB,QAAAA,UAAU,EAAE,EACV,GAAGA,UADO;AAEVL,UAAAA,OAAO,EAAE,EACP,GAAGK,UAAU,CAACL,OADP;AAEPsD,YAAAA,gBAFO;AAGP0B,YAAAA,kBAHO;AAIP5E,YAAAA,qBAJO;AAKP6B,YAAAA,gBALO;AAMP2C,YAAAA,cANO;AAOPG,YAAAA,uBAPO;AAQPF,YAAAA,cARO;AASPI,YAAAA;AATO;AAFC,SAFA;AAgBZE,QAAAA,QAAQ,EAAE;AACRC,UAAAA,OAAO,EAAEhD,sBAAsB,CAC7B4B,cAD6B,EAE7Bd,KAAK,CAACjC,MAFuB,EAG7BZ,UAH6B,CADvB;AAMRgF,UAAAA,IAAI,EACFlB,WAAW,IACX,CAAAC,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAEpE,OAAhB,CAAwBgC,YAAxB,MAAyC,kBADzC,GAEII,sBAAsB,CACpB+B,WADoB,EAEpBjB,KAAK,CAACjC,MAFc,EAGpBmD,cAHoB,CAF1B,GAOIF,SAdE;AAeRhD,UAAAA,QAAQ,EAAE+C,eAAe,GACrB7B,sBAAsB,CACpB6B,eADoB,EAEpBf,KAAK,CAACjC,MAFc,EAGpBoD,kBAHoB,CADD,GAMrBH;AArBI,SAhBE;AAuCZoB,QAAAA,MAAM,EAAE,CACNpC,KAAK,CAACjC,MADA,EAENZ,UAFM,EAGN+D,cAHM,EAINC,kBAJM,EAKNL,cALM,EAMNG,WANM,EAONF,eAPM;AAvCI,OAAd;;AAkDA,UACEF,QAAQ,IACRrD,KAAK,CAAC4E,MAAN,CAAaC,KAAb,CAAmB,CAACC,EAAD,EAAKjF,CAAL,KAAW;AAC5B;AACA,eAAOwD,QAAQ,CAACuB,MAAT,CAAgB/E,CAAhB,MAAuBiF,EAA9B;AACD,OAHD,CAFF,EAME;AACA,eAAOzB,QAAP;AACD;;AAED,aAAOrD,KAAP;AACD,KAvIc,CAAf;AAyIA,WAAO;AACLyC,MAAAA,MAAM,EAAEF,KAAK,CAACE,MADT;AAELjD,MAAAA,MAFK;AAGLmD,MAAAA,QAHK;AAILD,MAAAA,WAAW,EAAEH,KAAK,CAACG,WAJd;AAKLqC,MAAAA,aAAa,EAAE3E,gBAAgB,CAC7BZ,MAD6B,EAE7B+C,KAAK,CAAClC,MAFuB,EAG7BkC,KAAK,CAACjC,mBAHuB,EAI7BiC,KAAK,CAACtC,aAJuB,EAK7BuC,KAAK,CAACjC,MALuB,EAM7BiC,KAAK,CAACuC,aANuB;AAL1B,KAAP;AAcD;;AAEDC,EAAAA,WAAW,CAACzC,MAAD,EAAe;AACxB,UAAMA,MAAN;;AADwB,0CAkBF0C,CAAD,IAA0B;AAC/C,YAAM;AAAE/D,QAAAA,MAAF;AAAUW,QAAAA;AAAV,UAAoBoD,CAAC,CAACC,WAAF,CAAc3E,MAAxC;AAEA,YAAMA,MAAM,GAAG;AAAEsB,QAAAA,KAAF;AAASX,QAAAA;AAAT,OAAf;AAEA,WAAKiE,QAAL,CAAc,CAAC3C,KAAD,EAAQD,KAAR,KAAkB;AAC9B,YAAIrB,MAAM,KAAKsB,KAAK,CAACjC,MAAN,CAAaW,MAAxB,IAAkCW,KAAK,KAAKW,KAAK,CAACjC,MAAN,CAAasB,KAA7D,EAAoE;AAClE,iBAAO,IAAP;AACD;;AAED,eAAO;AACLtB,UAAAA,MADK;AAELwE,UAAAA,aAAa,EAAE3E,gBAAgB,CAC7BoC,KAAK,CAAChD,MADuB,EAE7B+C,KAAK,CAAClC,MAFuB,EAG7BkC,KAAK,CAACjC,mBAHuB,EAI7BiC,KAAK,CAACtC,aAJuB,EAK7BM,MAL6B,EAM7BiC,KAAK,CAACuC,aANuB;AAF1B,SAAP;AAWD,OAhBD;AAiBD,KAxCyB;;AAAA,gDA0CG,QAMvB;AAAA,UANwB;AAC5B5D,QAAAA,KAD4B;AAE5BD,QAAAA;AAF4B,OAMxB;AACJ,WAAKiE,QAAL,CAAc,SAAuB;AAAA,YAAtB;AAAEJ,UAAAA;AAAF,SAAsB;AACnC,cAAMK,cAAc,GAAGL,aAAa,CAAC5D,KAAK,CAACC,GAAP,CAApC;;AAEA,YAAIgE,cAAc,KAAKlE,MAAvB,EAA+B;AAC7B,iBAAO,IAAP;AACD;;AAED,eAAO;AACL6D,UAAAA,aAAa,EAAE,EACb,GAAGA,aADU;AAEb,aAAC5D,KAAK,CAACC,GAAP,GAAaF;AAFA;AADV,SAAP;AAMD,OAbD;AAcD,KA/DyB;;AAAA,6CAiEA,MAAM;AAC9B,YAAM;AAAEsB,QAAAA;AAAF,UAAY,KAAKD,KAAvB;AAEA,aAAOC,KAAK,CAACC,MAAN,CAAaD,KAAK,CAAC/C,KAAnB,CAAP;AACD,KArEyB;;AAAA,8CAuEC,SAAyC;AAAA,UAAxC;AAAE0B,QAAAA;AAAF,OAAwC;AAClE,YAAM;AAAEkE,QAAAA;AAAF,UAAuB,KAAK9C,KAAlC;AACA,YAAM;AAAE/C,QAAAA;AAAF,UAAa,KAAKgD,KAAxB;AAEA,YAAMW,aAAa,GAAGkC,gBAAgB,CAAC;AAAElE,QAAAA;AAAF,OAAD,CAAtC;;AAEA,UAAIgC,aAAJ,EAAmB;AACjB,cAAMmC,aAAa,GAAG9F,MAAM,CAAC+F,IAAP,CACnBvF,KAAD,IAAWA,KAAK,CAACL,UAAN,CAAiBwB,KAAjB,CAAuBC,GAAvB,KAA+B+B,aAAa,CAAC/B,GADpC,CAAtB;AAIA,eAAOkE,aAAP;AACD;;AAED,aAAO9B,SAAP;AACD,KAtFyB;;AAGxB,SAAKhB,KAAL,GAAa;AACXC,MAAAA,MAAM,EAAE,EADG;AAEXjD,MAAAA,MAAM,EAAE,EAFG;AAGXmD,MAAAA,QAAQ,EAAE,EAHC;AAIXpC,MAAAA,MAAM,EAAEiF,iCAAuBC,cAAvB,CAAsCC,KAJnC;AAKXhD,MAAAA,WAAW,EAAE,KAAKH,KAAL,CAAWG,WALb;AAMX;AACA;AACA;AACA;AACA;AACAqC,MAAAA,aAAa,EAAE;AAXJ,KAAb;AAaD;;AAwEDY,EAAAA,MAAM,GAAG;AACP,UAAM;AACJtF,MAAAA,MADI;AAEJmC,MAAAA,KAFI;AAGJC,MAAAA,MAHI;AAIJmD,MAAAA,gBAJI;AAKJC,MAAAA,WALI;AAMJC,MAAAA,YANI;AAOJC,MAAAA,YAPI;AAQJC,MAAAA,WARI;AASJ1F,MAAAA,mBATI;AAUJL,MAAAA,aAVI;AAWJgG,MAAAA,iBAXI;AAYJC,MAAAA,eAZI;AAaJC,MAAAA,cAbI;AAcJC,MAAAA,YAdI;AAeJC,MAAAA,eAfI;AAgBJC,MAAAA,qBAAqB,GAAGtC,sBAASC,EAAT,KAAgB,KAAhB,IACtBD,sBAASC,EAAT,KAAgB,SADM,IAEtBD,sBAASC,EAAT,KAAgB;AAlBd,QAmBF,KAAK1B,KAnBT;AAqBA,UAAM;AAAE/C,MAAAA,MAAF;AAAUe,MAAAA,MAAV;AAAkBoC,MAAAA,QAAlB;AAA4BoC,MAAAA;AAA5B,QAA8C,KAAKvC,KAAzD;AAEA,UAAM+D,YAAY,GAAG/D,KAAK,CAACC,MAAN,CAAaD,KAAK,CAAC/C,KAAnB,CAArB;AACA,UAAM+G,mBAAmB,GAAGzB,aAAa,CAACwB,YAAY,CAACnF,GAAd,CAAzC;AAEA,UAAMqF,qBAAqB,GAAG,KAAKjE,KAAL,CAAWhD,MAAX,CAAkBkH,KAAlB,CAAwB,CAAC,CAAzB,EAA4BC,IAA5B,CAAkC3G,KAAD,IAAW;AAAA;;AACxE,YAAMV,OAAO,4BAAGU,KAAK,CAACL,UAAN,CAAiBL,OAApB,yEAA+B,EAA5C;AACA,YAAM;AAAEiF,QAAAA,UAAF;AAAcqC,QAAAA,iBAAd;AAAiCC,QAAAA,WAAW,GAAG;AAA/C,UAAwDvH,OAA9D;;AAEA,UACEsH,iBAAiB,IACjBC,WAAW,KAAK,KADhB,IAEAtC,UAAU,KAAK,QAHjB,EAIE;AACA,eAAO,IAAP;AACD;;AAED,aAAO,KAAP;AACD,KAb6B,CAA9B;AAeA,QAAIuC,kBAAkB,GAAG,CAAzB;;AAEA,SAAK,IAAIjH,CAAC,GAAGL,MAAM,CAACqE,MAAP,GAAgB,CAA7B,EAAgChE,CAAC,IAAI,CAArC,EAAwCA,CAAC,EAAzC,EAA6C;AAC3C,YAAM;AAAEP,QAAAA;AAAF,UAAcE,MAAM,CAACK,CAAD,CAAN,CAAUF,UAA9B;AACA,YAAM;AACJ;AACAoH,QAAAA,oBAAoB,GAAGzH,OAAO,CAACgC,YAAR,KAAyB,kBAAzB,GACnB,KADmB,GAEnB,kCAAuBhC,OAAO,CAACI,qBAA/B,IACAG,CAAC,KACDL,MAAM,CACHyD,GADH,CACQjD,KAAD,IAAWA,KAAK,CAACL,UAAN,CAAiBL,OAAjB,CAAyBI,qBAD3C,EAEGsH,WAFH,CAEeC,+CAFf,CAFA,GAKA;AATA,UAUF3H,OAVJ;;AAYA,UAAIyH,oBAAoB,KAAK,KAA7B,EAAoC;AAClCD,QAAAA,kBAAkB;AACnB,OAFD,MAEO;AACL;AACA;AACA;AACA,YAAIjH,CAAC,IAAIL,MAAM,CAACqE,MAAP,GAAgB,CAAzB,EAA4B;AAC1B;AACD;AACF;AACF;;AAED,UAAMqD,cAAc,gBAClB,oBAAC,KAAD,CAAO,QAAP;AAAgB,MAAA,GAAG,EAAC;AAApB,OACGnB,YAAY,CAAC;AACZoB,MAAAA,IAAI,EAAE,OADM;AAEZ5G,MAAAA,MAFY;AAGZf,MAAAA,MAHY;AAIZ4H,MAAAA,gBAAgB,EAAE,KAAKA,gBAJX;AAKZC,MAAAA,eAAe,EAAE,KAAKA,eALV;AAMZC,MAAAA,qBAAqB,EAAE,KAAKC,kBANhB;AAOZxG,MAAAA,KAAK,EAAE,CACLyG,MAAM,CAACC,QADF,EAELhB,qBAAqB,IAAI,CACvB;AACA;AAAEvF,QAAAA,MAAM,EAAEsF;AAAV,OAFuB,EAGvBgB,MAAM,CAACE,QAHgB,CAFpB;AAPK,KAAD,CADf,CADF;AAqBA,wBACE,oBAAC,oBAAD,QACGjB,qBAAqB,GAAG,IAAH,GAAUS,cADlC,eAEE,oBAAC,6BAAD;AACE,MAAA,OAAO,EAAEZ,qBADX;AAEE,MAAA,KAAK,EAAEkB,MAAM,CAACG,SAFhB;AAGE,MAAA,QAAQ,EAAE,KAAKC;AAHjB,OAKGnF,MAAM,CAACQ,GAAP,CAAW,CAAC9B,KAAD,EAAQ1B,KAAR,EAAeyD,IAAf,KAAwB;AAAA;;AAClC,YAAM2E,OAAO,GAAGtB,YAAY,CAACnF,GAAb,KAAqBD,KAAK,CAACC,GAA3C;AACA,YAAMO,OAAO,GAAGgB,QAAQ,CAACxB,KAAK,CAACC,GAAP,CAAxB;AACA,YAAMpB,KAAK,GAAGR,MAAM,CAACC,KAAD,CAApB,CAHkC,CAKlC;AACA;AACA;AACA;;AACA,UAAIqI,cAA0D,GAAG,CAAjE;;AAEA,UAAIrI,KAAK,GAAGyD,IAAI,CAACW,MAAL,GAAciD,kBAAd,GAAmC,CAA/C,EAAkD;AAChD;AACAgB,QAAAA,cAAc,GAAG9I,cAAjB;AACD,OAHD,MAGO;AACL,cAAM+I,gBAAgB,GAAGvI,MAAM,CAAC0D,IAAI,CAACW,MAAL,GAAc,CAAf,CAA/B;AACA,cAAMmE,WAAW,GACfvI,KAAK,KAAKyD,IAAI,CAACW,MAAL,GAAc,CAAxB,GACI3E,YADJ,CACiB;AADjB,UAEIO,KAAK,IAAIyD,IAAI,CAACW,MAAL,GAAciD,kBAAvB,GACA7H,gCADA,CACiC;AADjC,UAEAD,cALN,CAFK,CAOiB;;AACtB8I,QAAAA,cAAc,GAAGC,gBAAgB,GAC7BA,gBAAgB,CAACtD,QAAjB,CAA0BC,OAA1B,CAAkC1C,WAAlC,CAA8C;AAC5CC,UAAAA,UAAU,EAAE,CAAC,CAAD,EAAI,IAAIlD,OAAR,EAAiB,CAAjB,CADgC;AAE5CmD,UAAAA,WAAW,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO8F,WAAP,CAF+B;AAG5CC,UAAAA,WAAW,EAAE;AAH+B,SAA9C,CAD6B,GAM7BhJ,gCANJ;AAOD;;AAED,YAAM;AACJ4H,QAAAA,WAAW,GAAG,IADV;AAEJD,QAAAA,iBAFI;AAGJ9F,QAAAA,WAHI;AAIJoH,QAAAA,eAJI;AAKJC,QAAAA;AALI,UAMFnI,KAAK,CAACL,UAAN,CAAiBL,OANrB;AAQA,YAAM8I,gBAAgB,GAAG/H,MAAM,CAACQ,GAAhC;AACA,YAAMwH,kBAAkB,GAAGhI,MAAM,CAACiI,KAAlC;AACA,YAAMC,mBAAmB,GAAGlI,MAAM,CAACmI,MAAnC;AACA,YAAMC,iBAAiB,GAAGpI,MAAM,CAACqI,IAAjC;AAEA,YAAMC,YAAY,GAChB9B,WAAW,KAAK,KAAhB,GAAwB9B,aAAa,CAAC5D,KAAK,CAACC,GAAP,CAArC,GAAmD,CADrD;AAGA,UAAIwH,iBAAJ;;AAEA,UAAI/B,WAAJ,EAAiB;AACf,YAAI,OAAOqB,eAAP,KAA2B,QAA/B,EAAyC;AACvCU,UAAAA,iBAAiB,GAAG,oBAAMV,eAAN,EAAuBW,MAAvB,EAApB;AACD,SAFD,MAEO;AACL,gBAAMC,oBAAoB,GAAG9H,wBAAWC,OAAX,CAAmBH,WAAnB,CAA7B;;AAEA,cACEgI,oBAAoB,IACpB,qBAAqBA,oBADrB,IAEA,OAAOA,oBAAoB,CAACC,eAA5B,KAAgD,QAHlD,EAIE;AACAH,YAAAA,iBAAiB,GAAG,CAAC,oBACnBE,oBAAoB,CAACC,eADF,EAEnBF,MAFmB,EAArB;AAGD;AACF;AACF,OAjEiC,CAmElC;;;AACA,YAAMjJ,kBAAkB,GAAGL,qBAAqB,CAACC,MAAD,EAASC,KAAT,CAAhD;AACA,YAAMU,OAAO,GAAGJ,UAAU,CACxBC,KADwB,EAExBJ,kBAFwB,EAGxBK,aAHwB,CAA1B;AAMA,YAAM+I,uBAAuB,GAC3B,YAAAxJ,MAAM,CAACC,KAAK,GAAG,CAAT,CAAN,oDAAmBE,UAAnB,CAA8BL,OAA9B,CAAsCgC,YAAtC,MACA,kBAFF;AAIA,YAAM2H,mBAAmB,GACvB,aAAAzJ,MAAM,CAACC,KAAK,GAAG,CAAT,CAAN,sDAAmBE,UAAnB,CAA8BL,OAA9B,CAAsCyH,oBAAtC,MACA,KAFF;AAIA,0BACE,oBAAC,oBAAD;AACE,QAAA,GAAG,EAAE5F,KAAK,CAACC,GADb;AAEE,QAAA,KAAK,EAAEJ,wBAAWkI,YAFpB;AAGE,QAAA,OAAO,EAAE5C,qBAHX;AAIE,QAAA,MAAM,EAAEwB,cAJV;AAKE,QAAA,YAAY,EAAEK,YALhB;AAME,QAAA,aAAa,EAAC;AANhB,sBAQE,oBAAC,sBAAD;AACE,QAAA,KAAK,EAAE1I,KADT;AAEE,QAAA,kBAAkB,EAAEG,kBAFtB;AAGE,QAAA,KAAK,EAAEO,OAHT;AAIE,QAAA,MAAM,EAAEV,KAAK,KAAKyD,IAAI,CAACW,MAAL,GAAc,CAJlC;AAKE,QAAA,OAAO,EAAEgE,OALX;AAME,QAAA,OAAO,EAAEjC,gBAAgB,CAAC5C,QAAjB,CAA0B7B,KAAK,CAACC,GAAhC,CANX;AAOE,QAAA,MAAM,EAAEb,MAPV;AAQE,QAAA,OAAO,EAAEoB,OARX;AASE,QAAA,KAAK,EAAE3B,KATT;AAUE,QAAA,gBAAgB,EAAEoI,gBAVpB;AAWE,QAAA,kBAAkB,EAAEC,kBAXtB;AAYE,QAAA,mBAAmB,EAAEE,mBAZvB;AAaE,QAAA,iBAAiB,EAAEE,iBAbrB;AAcE,QAAA,cAAc,EAAEtC,cAdlB;AAeE,QAAA,eAAe,EAAEE,eAfnB;AAgBE,QAAA,YAAY,EAAED,YAhBhB;AAiBE,QAAA,YAAY,EAAEuC,YAjBhB;AAkBE,QAAA,mBAAmB,EAAErI,mBAlBvB;AAmBE,QAAA,oBAAoB,EAAE,KAAKiH,kBAnB7B;AAoBE,QAAA,gBAAgB,EAAE,KAAKH,gBApBzB;AAqBE,QAAA,eAAe,EAAE,KAAKC,eArBxB;AAsBE,QAAA,iBAAiB,EAAEuB,iBAtBrB;AAuBE,QAAA,sBAAsB,EACpBnC,qBAAqB,IAAI,CAACG,iBAxB9B;AA0BE,QAAA,YAAY,EAAEb,YA1BhB;AA2BE,QAAA,WAAW,EAAEC,WA3Bf;AA4BE,QAAA,WAAW,EAAEH,WA5Bf;AA6BE,QAAA,YAAY,EAAEC,YA7BhB;AA8BE,QAAA,iBAAiB,EAAEG,iBA9BrB;AA+BE,QAAA,eAAe,EAAEC,eA/BnB;AAgCE,QAAA,uBAAuB,EAAE8C,uBAhC3B;AAiCE,QAAA,mBAAmB,EAAEC;AAjCvB,QARF,CADF;AA8CD,KAjIA,CALH,CAFF,EA0IGxC,qBAAqB,GAAGS,cAAH,GAAoB,IA1I5C,CADF;AA8ID;;AAtfkE;;;;AAyfrE,MAAMM,MAAM,GAAGxG,wBAAWmI,MAAX,CAAkB;AAC/BxB,EAAAA,SAAS,EAAE;AACTyB,IAAAA,IAAI,EAAE;AADG,GADoB;AAI/B1B,EAAAA,QAAQ,EAAE;AACR2B,IAAAA,QAAQ,EAAE,UADF;AAERxI,IAAAA,GAAG,EAAE,CAFG;AAGR6H,IAAAA,IAAI,EAAE,CAHE;AAIRJ,IAAAA,KAAK,EAAE;AAJC,GAJqB;AAU/Bb,EAAAA,QAAQ,EAAE;AACR6B,IAAAA,MAAM,EAAE;AADA;AAVqB,CAAlB,CAAf","sourcesContent":["import {\n Background,\n getDefaultHeaderHeight,\n SafeAreaProviderCompat,\n} from '@react-navigation/elements';\nimport type {\n ParamListBase,\n Route,\n StackNavigationState,\n} from '@react-navigation/native';\nimport Color from 'color';\nimport * as React from 'react';\nimport {\n Animated,\n LayoutChangeEvent,\n Platform,\n StyleSheet,\n} from 'react-native';\nimport type { EdgeInsets } from 'react-native-safe-area-context';\n\nimport {\n forModalPresentationIOS,\n forNoAnimation as forNoAnimationCard,\n} from '../../TransitionConfigs/CardStyleInterpolators';\nimport {\n DefaultTransition,\n ModalFadeTransition,\n ModalTransition,\n} from '../../TransitionConfigs/TransitionPresets';\nimport type {\n Layout,\n Scene,\n StackDescriptor,\n StackDescriptorMap,\n StackHeaderMode,\n StackNavigationOptions,\n} from '../../types';\nimport getDistanceForDirection from '../../utils/getDistanceForDirection';\nimport type { Props as HeaderContainerProps } from '../Header/HeaderContainer';\nimport { MaybeScreen, MaybeScreenContainer } from '../Screens';\nimport { getIsModalPresentation } from './Card';\nimport CardContainer from './CardContainer';\n\ntype GestureValues = {\n [key: string]: Animated.Value;\n};\n\ntype Props = {\n insets: EdgeInsets;\n state: StackNavigationState<ParamListBase>;\n descriptors: StackDescriptorMap;\n routes: Route<string>[];\n openingRouteKeys: string[];\n closingRouteKeys: string[];\n onOpenRoute: (props: { route: Route<string> }) => void;\n onCloseRoute: (props: { route: Route<string> }) => void;\n getPreviousRoute: (props: {\n route: Route<string>;\n }) => Route<string> | undefined;\n renderHeader: (props: HeaderContainerProps) => React.ReactNode;\n renderScene: (props: { route: Route<string> }) => React.ReactNode;\n isParentHeaderShown: boolean;\n isParentModal: boolean;\n onTransitionStart: (\n props: { route: Route<string> },\n closing: boolean\n ) => void;\n onTransitionEnd: (props: { route: Route<string> }, closing: boolean) => void;\n onGestureStart: (props: { route: Route<string> }) => void;\n onGestureEnd: (props: { route: Route<string> }) => void;\n onGestureCancel: (props: { route: Route<string> }) => void;\n detachInactiveScreens?: boolean;\n};\n\ntype State = {\n routes: Route<string>[];\n descriptors: StackDescriptorMap;\n scenes: Scene[];\n gestures: GestureValues;\n layout: Layout;\n headerHeights: Record<string, number>;\n};\n\nconst EPSILON = 1e-5;\n\nconst STATE_INACTIVE = 0;\nconst STATE_TRANSITIONING_OR_BELOW_TOP = 1;\nconst STATE_ON_TOP = 2;\n\nconst FALLBACK_DESCRIPTOR = Object.freeze({ options: {} });\n\nconst getInterpolationIndex = (scenes: Scene[], index: number) => {\n const { cardStyleInterpolator } = scenes[index].descriptor.options;\n\n // Start from current card and count backwards the number of cards with same interpolation\n let interpolationIndex = 0;\n\n for (let i = index - 1; i >= 0; i--) {\n const cardStyleInterpolatorCurrent =\n scenes[i]?.descriptor.options.cardStyleInterpolator;\n\n if (cardStyleInterpolatorCurrent !== cardStyleInterpolator) {\n break;\n }\n\n interpolationIndex++;\n }\n\n return interpolationIndex;\n};\n\nconst getIsModal = (\n scene: Scene,\n interpolationIndex: number,\n isParentModal: boolean\n) => {\n if (isParentModal) {\n return true;\n }\n\n const { cardStyleInterpolator } = scene.descriptor.options;\n const isModalPresentation = getIsModalPresentation(cardStyleInterpolator);\n const isModal = isModalPresentation && interpolationIndex !== 0;\n\n return isModal;\n};\n\nconst getHeaderHeights = (\n scenes: Scene[],\n insets: EdgeInsets,\n isParentHeaderShown: boolean,\n isParentModal: boolean,\n layout: Layout,\n previous: Record<string, number>\n) => {\n return scenes.reduce<Record<string, number>>((acc, curr, index) => {\n const {\n headerStatusBarHeight = isParentHeaderShown ? 0 : insets.top,\n headerStyle,\n } = curr.descriptor.options;\n\n const style = StyleSheet.flatten(headerStyle || {});\n\n const height =\n 'height' in style && typeof style.height === 'number'\n ? style.height\n : previous[curr.route.key];\n\n const interpolationIndex = getInterpolationIndex(scenes, index);\n const isModal = getIsModal(curr, interpolationIndex, isParentModal);\n\n acc[curr.route.key] =\n typeof height === 'number'\n ? height\n : getDefaultHeaderHeight(layout, isModal, headerStatusBarHeight);\n\n return acc;\n }, {});\n};\n\nconst getDistanceFromOptions = (\n layout: Layout,\n descriptor?: StackDescriptor\n) => {\n const {\n presentation,\n gestureDirection = presentation === 'modal'\n ? ModalTransition.gestureDirection\n : DefaultTransition.gestureDirection,\n } = (descriptor?.options || {}) as StackNavigationOptions;\n\n return getDistanceForDirection(layout, gestureDirection);\n};\n\nconst getProgressFromGesture = (\n gesture: Animated.Value,\n layout: Layout,\n descriptor?: StackDescriptor\n) => {\n const distance = getDistanceFromOptions(\n {\n // Make sure that we have a non-zero distance, otherwise there will be incorrect progress\n // This causes blank screen on web if it was previously inside container with display: none\n width: Math.max(1, layout.width),\n height: Math.max(1, layout.height),\n },\n descriptor\n );\n\n if (distance > 0) {\n return gesture.interpolate({\n inputRange: [0, distance],\n outputRange: [1, 0],\n });\n }\n\n return gesture.interpolate({\n inputRange: [distance, 0],\n outputRange: [0, 1],\n });\n};\n\nexport default class CardStack extends React.Component<Props, State> {\n static getDerivedStateFromProps(\n props: Props,\n state: State\n ): Partial<State> | null {\n if (\n props.routes === state.routes &&\n props.descriptors === state.descriptors\n ) {\n return null;\n }\n\n const gestures = props.routes.reduce<GestureValues>((acc, curr) => {\n const descriptor = props.descriptors[curr.key];\n const { animationEnabled } = descriptor?.options || {};\n\n acc[curr.key] =\n state.gestures[curr.key] ||\n new Animated.Value(\n props.openingRouteKeys.includes(curr.key) &&\n animationEnabled !== false\n ? getDistanceFromOptions(state.layout, descriptor)\n : 0\n );\n\n return acc;\n }, {});\n\n const scenes = props.routes.map((route, index, self) => {\n const previousRoute = self[index - 1];\n const nextRoute = self[index + 1];\n\n const oldScene = state.scenes[index];\n\n const currentGesture = gestures[route.key];\n const previousGesture = previousRoute\n ? gestures[previousRoute.key]\n : undefined;\n const nextGesture = nextRoute ? gestures[nextRoute.key] : undefined;\n\n const descriptor =\n props.descriptors[route.key] ||\n state.descriptors[route.key] ||\n (oldScene ? oldScene.descriptor : FALLBACK_DESCRIPTOR);\n\n const nextDescriptor =\n props.descriptors[nextRoute?.key] || state.descriptors[nextRoute?.key];\n\n const previousDescriptor =\n props.descriptors[previousRoute?.key] ||\n state.descriptors[previousRoute?.key];\n\n // When a screen is not the last, it should use next screen's transition config\n // Many transitions also animate the previous screen, so using 2 different transitions doesn't look right\n // For example combining a slide and a modal transition would look wrong otherwise\n // With this approach, combining different transition styles in the same navigator mostly looks right\n // This will still be broken when 2 transitions have different idle state (e.g. modal presentation),\n // but majority of the transitions look alright\n const optionsForTransitionConfig =\n index !== self.length - 1 &&\n nextDescriptor &&\n nextDescriptor.options.presentation !== 'transparentModal'\n ? nextDescriptor.options\n : descriptor.options;\n\n let defaultTransitionPreset =\n optionsForTransitionConfig.presentation === 'modal'\n ? ModalTransition\n : optionsForTransitionConfig.presentation === 'transparentModal'\n ? ModalFadeTransition\n : DefaultTransition;\n\n const {\n animationEnabled = Platform.OS !== 'web' &&\n Platform.OS !== 'windows' &&\n Platform.OS !== 'macos',\n gestureEnabled = Platform.OS === 'ios' && animationEnabled,\n gestureDirection = defaultTransitionPreset.gestureDirection,\n transitionSpec = defaultTransitionPreset.transitionSpec,\n cardStyleInterpolator = animationEnabled === false\n ? forNoAnimationCard\n : defaultTransitionPreset.cardStyleInterpolator,\n headerStyleInterpolator = defaultTransitionPreset.headerStyleInterpolator,\n cardOverlayEnabled = (Platform.OS !== 'ios' &&\n optionsForTransitionConfig.presentation !== 'transparentModal') ||\n getIsModalPresentation(cardStyleInterpolator),\n } = optionsForTransitionConfig;\n\n const headerMode: StackHeaderMode =\n descriptor.options.headerMode ??\n (!(\n optionsForTransitionConfig.presentation === 'modal' ||\n optionsForTransitionConfig.presentation === 'transparentModal' ||\n nextDescriptor?.options.presentation === 'modal' ||\n nextDescriptor?.options.presentation === 'transparentModal' ||\n getIsModalPresentation(cardStyleInterpolator)\n ) &&\n Platform.OS === 'ios' &&\n descriptor.options.header === undefined\n ? 'float'\n : 'screen');\n\n const scene = {\n route,\n descriptor: {\n ...descriptor,\n options: {\n ...descriptor.options,\n animationEnabled,\n cardOverlayEnabled,\n cardStyleInterpolator,\n gestureDirection,\n gestureEnabled,\n headerStyleInterpolator,\n transitionSpec,\n headerMode,\n },\n },\n progress: {\n current: getProgressFromGesture(\n currentGesture,\n state.layout,\n descriptor\n ),\n next:\n nextGesture &&\n nextDescriptor?.options.presentation !== 'transparentModal'\n ? getProgressFromGesture(\n nextGesture,\n state.layout,\n nextDescriptor\n )\n : undefined,\n previous: previousGesture\n ? getProgressFromGesture(\n previousGesture,\n state.layout,\n previousDescriptor\n )\n : undefined,\n },\n __memo: [\n state.layout,\n descriptor,\n nextDescriptor,\n previousDescriptor,\n currentGesture,\n nextGesture,\n previousGesture,\n ],\n };\n\n if (\n oldScene &&\n scene.__memo.every((it, i) => {\n // @ts-expect-error: we haven't added __memo to the annotation to prevent usage elsewhere\n return oldScene.__memo[i] === it;\n })\n ) {\n return oldScene;\n }\n\n return scene;\n });\n\n return {\n routes: props.routes,\n scenes,\n gestures,\n descriptors: props.descriptors,\n headerHeights: getHeaderHeights(\n scenes,\n props.insets,\n props.isParentHeaderShown,\n props.isParentModal,\n state.layout,\n state.headerHeights\n ),\n };\n }\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n routes: [],\n scenes: [],\n gestures: {},\n layout: SafeAreaProviderCompat.initialMetrics.frame,\n descriptors: this.props.descriptors,\n // Used when card's header is null and mode is float to make transition\n // between screens with headers and those without headers smooth.\n // This is not a great heuristic here. We don't know synchronously\n // on mount what the header height is so we have just used the most\n // common cases here.\n headerHeights: {},\n };\n }\n\n private handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n const layout = { width, height };\n\n this.setState((state, props) => {\n if (height === state.layout.height && width === state.layout.width) {\n return null;\n }\n\n return {\n layout,\n headerHeights: getHeaderHeights(\n state.scenes,\n props.insets,\n props.isParentHeaderShown,\n props.isParentModal,\n layout,\n state.headerHeights\n ),\n };\n });\n };\n\n private handleHeaderLayout = ({\n route,\n height,\n }: {\n route: Route<string>;\n height: number;\n }) => {\n this.setState(({ headerHeights }) => {\n const previousHeight = headerHeights[route.key];\n\n if (previousHeight === height) {\n return null;\n }\n\n return {\n headerHeights: {\n ...headerHeights,\n [route.key]: height,\n },\n };\n });\n };\n\n private getFocusedRoute = () => {\n const { state } = this.props;\n\n return state.routes[state.index];\n };\n\n private getPreviousScene = ({ route }: { route: Route<string> }) => {\n const { getPreviousRoute } = this.props;\n const { scenes } = this.state;\n\n const previousRoute = getPreviousRoute({ route });\n\n if (previousRoute) {\n const previousScene = scenes.find(\n (scene) => scene.descriptor.route.key === previousRoute.key\n );\n\n return previousScene;\n }\n\n return undefined;\n };\n\n render() {\n const {\n insets,\n state,\n routes,\n closingRouteKeys,\n onOpenRoute,\n onCloseRoute,\n renderHeader,\n renderScene,\n isParentHeaderShown,\n isParentModal,\n onTransitionStart,\n onTransitionEnd,\n onGestureStart,\n onGestureEnd,\n onGestureCancel,\n detachInactiveScreens = Platform.OS === 'web' ||\n Platform.OS === 'android' ||\n Platform.OS === 'ios',\n } = this.props;\n\n const { scenes, layout, gestures, headerHeights } = this.state;\n\n const focusedRoute = state.routes[state.index];\n const focusedHeaderHeight = headerHeights[focusedRoute.key];\n\n const isFloatHeaderAbsolute = this.state.scenes.slice(-2).some((scene) => {\n const options = scene.descriptor.options ?? {};\n const { headerMode, headerTransparent, headerShown = true } = options;\n\n if (\n headerTransparent ||\n headerShown === false ||\n headerMode === 'screen'\n ) {\n return true;\n }\n\n return false;\n });\n\n let activeScreensLimit = 1;\n\n for (let i = scenes.length - 1; i >= 0; i--) {\n const { options } = scenes[i].descriptor;\n const {\n // By default, we don't want to detach the previous screen of the active one for modals\n detachPreviousScreen = options.presentation === 'transparentModal'\n ? false\n : getIsModalPresentation(options.cardStyleInterpolator)\n ? i !==\n scenes\n .map((scene) => scene.descriptor.options.cardStyleInterpolator)\n .lastIndexOf(forModalPresentationIOS)\n : true,\n } = options;\n\n if (detachPreviousScreen === false) {\n activeScreensLimit++;\n } else {\n // Check at least last 2 screens before stopping\n // This will make sure that screen isn't detached when another screen is animating on top of the transparent one\n // For example, (Opaque -> Transparent -> Opaque)\n if (i <= scenes.length - 2) {\n break;\n }\n }\n }\n\n const floatingHeader = (\n <React.Fragment key=\"header\">\n {renderHeader({\n mode: 'float',\n layout,\n scenes,\n getPreviousScene: this.getPreviousScene,\n getFocusedRoute: this.getFocusedRoute,\n onContentHeightChange: this.handleHeaderLayout,\n style: [\n styles.floating,\n isFloatHeaderAbsolute && [\n // Without this, the header buttons won't be touchable on Android when headerTransparent: true\n { height: focusedHeaderHeight },\n styles.absolute,\n ],\n ],\n })}\n </React.Fragment>\n );\n\n return (\n <Background>\n {isFloatHeaderAbsolute ? null : floatingHeader}\n <MaybeScreenContainer\n enabled={detachInactiveScreens}\n style={styles.container}\n onLayout={this.handleLayout}\n >\n {routes.map((route, index, self) => {\n const focused = focusedRoute.key === route.key;\n const gesture = gestures[route.key];\n const scene = scenes[index];\n\n // For the screens that shouldn't be active, the value is 0\n // For those that should be active, but are not the top screen, the value is 1\n // For those on top of the stack and with interaction enabled, the value is 2\n // For the old implementation, it stays the same it was\n let isScreenActive: Animated.AnimatedInterpolation | 2 | 1 | 0 = 1;\n\n if (index < self.length - activeScreensLimit - 1) {\n // screen should be inactive because it is too deep in the stack\n isScreenActive = STATE_INACTIVE;\n } else {\n const sceneForActivity = scenes[self.length - 1];\n const outputValue =\n index === self.length - 1\n ? STATE_ON_TOP // the screen is on top after the transition\n : index >= self.length - activeScreensLimit\n ? STATE_TRANSITIONING_OR_BELOW_TOP // the screen should stay active after the transition, it is not on top but is in activeLimit\n : STATE_INACTIVE; // the screen should be active only during the transition, it is at the edge of activeLimit\n isScreenActive = sceneForActivity\n ? sceneForActivity.progress.current.interpolate({\n inputRange: [0, 1 - EPSILON, 1],\n outputRange: [1, 1, outputValue],\n extrapolate: 'clamp',\n })\n : STATE_TRANSITIONING_OR_BELOW_TOP;\n }\n\n const {\n headerShown = true,\n headerTransparent,\n headerStyle,\n headerTintColor,\n freezeOnBlur,\n } = scene.descriptor.options;\n\n const safeAreaInsetTop = insets.top;\n const safeAreaInsetRight = insets.right;\n const safeAreaInsetBottom = insets.bottom;\n const safeAreaInsetLeft = insets.left;\n\n const headerHeight =\n headerShown !== false ? headerHeights[route.key] : 0;\n\n let headerDarkContent: boolean | undefined;\n\n if (headerShown) {\n if (typeof headerTintColor === 'string') {\n headerDarkContent = Color(headerTintColor).isDark();\n } else {\n const flattenedHeaderStyle = StyleSheet.flatten(headerStyle);\n\n if (\n flattenedHeaderStyle &&\n 'backgroundColor' in flattenedHeaderStyle &&\n typeof flattenedHeaderStyle.backgroundColor === 'string'\n ) {\n headerDarkContent = !Color(\n flattenedHeaderStyle.backgroundColor\n ).isDark();\n }\n }\n }\n\n // Start from current card and count backwards the number of cards with same interpolation\n const interpolationIndex = getInterpolationIndex(scenes, index);\n const isModal = getIsModal(\n scene,\n interpolationIndex,\n isParentModal\n );\n\n const isNextScreenTransparent =\n scenes[index + 1]?.descriptor.options.presentation ===\n 'transparentModal';\n\n const detachCurrentScreen =\n scenes[index + 1]?.descriptor.options.detachPreviousScreen !==\n false;\n\n return (\n <MaybeScreen\n key={route.key}\n style={StyleSheet.absoluteFill}\n enabled={detachInactiveScreens}\n active={isScreenActive}\n freezeOnBlur={freezeOnBlur}\n pointerEvents=\"box-none\"\n >\n <CardContainer\n index={index}\n interpolationIndex={interpolationIndex}\n modal={isModal}\n active={index === self.length - 1}\n focused={focused}\n closing={closingRouteKeys.includes(route.key)}\n layout={layout}\n gesture={gesture}\n scene={scene}\n safeAreaInsetTop={safeAreaInsetTop}\n safeAreaInsetRight={safeAreaInsetRight}\n safeAreaInsetBottom={safeAreaInsetBottom}\n safeAreaInsetLeft={safeAreaInsetLeft}\n onGestureStart={onGestureStart}\n onGestureCancel={onGestureCancel}\n onGestureEnd={onGestureEnd}\n headerHeight={headerHeight}\n isParentHeaderShown={isParentHeaderShown}\n onHeaderHeightChange={this.handleHeaderLayout}\n getPreviousScene={this.getPreviousScene}\n getFocusedRoute={this.getFocusedRoute}\n headerDarkContent={headerDarkContent}\n hasAbsoluteFloatHeader={\n isFloatHeaderAbsolute && !headerTransparent\n }\n renderHeader={renderHeader}\n renderScene={renderScene}\n onOpenRoute={onOpenRoute}\n onCloseRoute={onCloseRoute}\n onTransitionStart={onTransitionStart}\n onTransitionEnd={onTransitionEnd}\n isNextScreenTransparent={isNextScreenTransparent}\n detachCurrentScreen={detachCurrentScreen}\n />\n </MaybeScreen>\n );\n })}\n </MaybeScreenContainer>\n {isFloatHeaderAbsolute ? floatingHeader : null}\n </Background>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n absolute: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n },\n floating: {\n zIndex: 1,\n },\n});\n"]}
|
|
@@ -11,5 +11,5 @@ export function PanGestureHandler(props) {
|
|
|
11
11
|
ref: gestureRef
|
|
12
12
|
})));
|
|
13
13
|
}
|
|
14
|
-
export { GestureHandlerRootView, State as GestureState
|
|
14
|
+
export { GestureHandlerRootView, State as GestureState } from 'react-native-gesture-handler';
|
|
15
15
|
//# sourceMappingURL=GestureHandlerNative.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["GestureHandlerNative.tsx"],"names":["React","PanGestureHandler","PanGestureHandlerNative","GestureHandlerRefContext","props","gestureRef","useRef","GestureHandlerRootView","State","GestureState"
|
|
1
|
+
{"version":3,"sources":["GestureHandlerNative.tsx"],"names":["React","PanGestureHandler","PanGestureHandlerNative","GestureHandlerRefContext","props","gestureRef","useRef","GestureHandlerRootView","State","GestureState"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SACEC,iBAAiB,IAAIC,uBADvB,QAGO,8BAHP;AAKA,OAAOC,wBAAP,MAAqC,mCAArC;AAEA,OAAO,SAASF,iBAAT,CAA2BG,KAA3B,EAA+D;AACpE,QAAMC,UAAU,GAAGL,KAAK,CAACM,MAAN,CAAsC,IAAtC,CAAnB;AAEA,sBACE,oBAAC,wBAAD,CAA0B,QAA1B;AAAmC,IAAA,KAAK,EAAED;AAA1C,kBACE,oBAAC,uBAAD,eAA6BD,KAA7B;AAAoC,IAAA,GAAG,EAAEC;AAAzC,KADF,CADF;AAKD;AAGD,SACEE,sBADF,EAEEC,KAAK,IAAIC,YAFX,QAGO,8BAHP","sourcesContent":["import * as React from 'react';\nimport {\n PanGestureHandler as PanGestureHandlerNative,\n PanGestureHandlerProperties,\n} from 'react-native-gesture-handler';\n\nimport GestureHandlerRefContext from '../utils/GestureHandlerRefContext';\n\nexport function PanGestureHandler(props: PanGestureHandlerProperties) {\n const gestureRef = React.useRef<PanGestureHandlerNative>(null);\n\n return (\n <GestureHandlerRefContext.Provider value={gestureRef}>\n <PanGestureHandlerNative {...props} ref={gestureRef} />\n </GestureHandlerRefContext.Provider>\n );\n}\n\nexport type { PanGestureHandlerGestureEvent } from 'react-native-gesture-handler';\nexport {\n GestureHandlerRootView,\n State as GestureState,\n} from 'react-native-gesture-handler';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Screens.tsx"],"names":["React","View","Screens","require","e","MaybeScreenContainer","enabled","rest","MaybeScreen","active"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAAmBC,IAAnB,QAA0C,cAA1C;AAEA,IAAIC,OAAJ;;AAEA,IAAI;AACFA,EAAAA,OAAO,GAAGC,OAAO,CAAC,sBAAD,CAAjB;AACD,CAFD,CAEE,OAAOC,CAAP,EAAU,CACV;AACD;;AAED,OAAO,MAAMC,oBAAoB,GAAG,QAM9B;AAAA,MAN+B;AACnCC,IAAAA,OADmC;AAEnC,OAAGC;AAFgC,GAM/B;;AACJ,MAAIL,OAAO,IAAI,IAAf,EAAqB;AACnB,wBAAO,oBAAC,OAAD,CAAS,eAAT;AAAyB,MAAA,OAAO,EAAEI;AAAlC,OAA+CC,IAA/C,EAAP;AACD;;AAED,sBAAO,oBAAC,IAAD,EAAUA,IAAV,CAAP;AACD,CAZM;AAcP,OAAO,MAAMC,WAAW,GAAG,
|
|
1
|
+
{"version":3,"sources":["Screens.tsx"],"names":["React","View","Screens","require","e","MaybeScreenContainer","enabled","rest","MaybeScreen","active"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAAmBC,IAAnB,QAA0C,cAA1C;AAEA,IAAIC,OAAJ;;AAEA,IAAI;AACFA,EAAAA,OAAO,GAAGC,OAAO,CAAC,sBAAD,CAAjB;AACD,CAFD,CAEE,OAAOC,CAAP,EAAU,CACV;AACD;;AAED,OAAO,MAAMC,oBAAoB,GAAG,QAM9B;AAAA,MAN+B;AACnCC,IAAAA,OADmC;AAEnC,OAAGC;AAFgC,GAM/B;;AACJ,MAAIL,OAAO,IAAI,IAAf,EAAqB;AACnB,wBAAO,oBAAC,OAAD,CAAS,eAAT;AAAyB,MAAA,OAAO,EAAEI;AAAlC,OAA+CC,IAA/C,EAAP;AACD;;AAED,sBAAO,oBAAC,IAAD,EAAUA,IAAV,CAAP;AACD,CAZM;AAcP,OAAO,MAAMC,WAAW,GAAG,SASrB;AAAA,MATsB;AAC1BF,IAAAA,OAD0B;AAE1BG,IAAAA,MAF0B;AAG1B,OAAGF;AAHuB,GAStB;;AACJ,MAAIL,OAAO,IAAI,IAAf,EAAqB;AACnB,wBACE,oBAAC,OAAD,CAAS,MAAT;AAAgB,MAAA,OAAO,EAAEI,OAAzB;AAAkC,MAAA,aAAa,EAAEG;AAAjD,OAA6DF,IAA7D,EADF;AAGD;;AAED,sBAAO,oBAAC,IAAD,EAAUA,IAAV,CAAP;AACD,CAjBM","sourcesContent":["import * as React from 'react';\nimport { Animated, View, ViewProps } from 'react-native';\n\nlet Screens: typeof import('react-native-screens') | undefined;\n\ntry {\n Screens = require('react-native-screens');\n} catch (e) {\n // Ignore\n}\n\nexport const MaybeScreenContainer = ({\n enabled,\n ...rest\n}: ViewProps & {\n enabled: boolean;\n children: React.ReactNode;\n}) => {\n if (Screens != null) {\n return <Screens.ScreenContainer enabled={enabled} {...rest} />;\n }\n\n return <View {...rest} />;\n};\n\nexport const MaybeScreen = ({\n enabled,\n active,\n ...rest\n}: ViewProps & {\n enabled: boolean;\n active: 0 | 1 | Animated.AnimatedInterpolation;\n children: React.ReactNode;\n freezeOnBlur?: boolean;\n}) => {\n if (Screens != null) {\n return (\n <Screens.Screen enabled={enabled} activityState={active} {...rest} />\n );\n }\n\n return <View {...rest} />;\n};\n"]}
|
|
@@ -37,6 +37,10 @@ export default class Card extends React.Component {
|
|
|
37
37
|
constructor() {
|
|
38
38
|
super(...arguments);
|
|
39
39
|
|
|
40
|
+
_defineProperty(this, "state", {
|
|
41
|
+
pointerEvents: 'auto'
|
|
42
|
+
});
|
|
43
|
+
|
|
40
44
|
_defineProperty(this, "isCurrentlyMounted", false);
|
|
41
45
|
|
|
42
46
|
_defineProperty(this, "isClosing", new Animated.Value(FALSE));
|
|
@@ -124,10 +128,8 @@ export default class Card extends React.Component {
|
|
|
124
128
|
});
|
|
125
129
|
|
|
126
130
|
_defineProperty(this, "setPointerEventsEnabled", enabled => {
|
|
127
|
-
var _this$contentRef$curr;
|
|
128
|
-
|
|
129
131
|
const pointerEvents = enabled ? 'box-none' : 'none';
|
|
130
|
-
|
|
132
|
+
this.setState({
|
|
131
133
|
pointerEvents
|
|
132
134
|
});
|
|
133
135
|
});
|
|
@@ -242,8 +244,6 @@ export default class Card extends React.Component {
|
|
|
242
244
|
left: insetLeft
|
|
243
245
|
}
|
|
244
246
|
})));
|
|
245
|
-
|
|
246
|
-
_defineProperty(this, "contentRef", /*#__PURE__*/React.createRef());
|
|
247
247
|
}
|
|
248
248
|
|
|
249
249
|
componentDidMount() {
|
|
@@ -433,7 +433,7 @@ export default class Card extends React.Component {
|
|
|
433
433
|
}, shadowStyle],
|
|
434
434
|
pointerEvents: "none"
|
|
435
435
|
}) : null, /*#__PURE__*/React.createElement(CardSheet, {
|
|
436
|
-
|
|
436
|
+
pointerEvents: this.state.pointerEvents,
|
|
437
437
|
enabled: pageOverflowEnabled,
|
|
438
438
|
layout: layout,
|
|
439
439
|
style: contentStyle
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Card.tsx"],"names":["Color","React","Animated","InteractionManager","Platform","StyleSheet","View","forModalPresentationIOS","CardAnimationContext","getDistanceForDirection","getInvertedMultiplier","memoize","GestureState","PanGestureHandler","ModalStatusBarManager","CardSheet","GESTURE_VELOCITY_IMPACT","TRUE","FALSE","GESTURE_RESPONSE_DISTANCE_HORIZONTAL","GESTURE_RESPONSE_DISTANCE_VERTICAL","useNativeDriver","OS","hasOpacityStyle","style","flattenedStyle","flatten","opacity","Card","Component","Value","props","gestureDirection","width","layout","height","closing","velocity","gesture","transitionSpec","onOpen","onClose","onTransition","toValue","getAnimateToValue","lastToValue","isClosing","setValue","spec","close","open","animation","spring","timing","setPointerEventsEnabled","handleStartInteraction","clearTimeout","pendingGestureCallback","undefined","config","isInteraction","start","finished","handleEndInteraction","isCurrentlyMounted","forceUpdate","enabled","pointerEvents","contentRef","current","setNativeProps","interactionHandle","createInteractionHandle","clearInteractionHandle","nativeEvent","onGestureBegin","onGestureCanceled","onGestureEnd","gestureVelocityImpact","state","ACTIVE","isSwiping","CANCELLED","velocityY","velocityX","animate","END","distance","translation","translationY","translationX","setTimeout","styleInterpolator","interpolationIndex","next","insetTop","insetRight","insetBottom","insetLeft","index","progress","swiping","inverted","layouts","screen","insets","top","right","bottom","left","createRef","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","stopAnimation","gestureActivationCriteria","gestureResponseDistance","enableTrackpadTwoFingerGesture","maxDeltaX","minOffsetY","hitSlop","invertedMultiplier","minOffsetX","maxDeltaY","render","overlay","overlayEnabled","shadowEnabled","gestureEnabled","pageOverflowEnabled","headerDarkContent","children","containerStyle","customContainerStyle","contentStyle","rest","interpolationProps","getCardAnimation","interpolatedStyle","getInterpolatedStyle","cardStyle","overlayStyle","shadowStyle","handleGestureEvent","event","backgroundColor","isTransparent","alpha","getIsModalPresentation","absoluteFill","styles","container","handleGestureStateChange","shadow","shadowHorizontal","shadowLeft","shadowRight","shadowVertical","shadowTop","shadowBottom","cardStyleInterpolator","name","create","flex","position","shadowRadius","shadowColor","shadowOpacity","shadowOffset"],"mappings":"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","sourcesContent":["import Color from 'color';\nimport * as React from 'react';\nimport {\n Animated,\n InteractionManager,\n Platform,\n StyleProp,\n StyleSheet,\n View,\n ViewProps,\n ViewStyle,\n} from 'react-native';\nimport type { EdgeInsets } from 'react-native-safe-area-context';\n\nimport { forModalPresentationIOS } from '../../TransitionConfigs/CardStyleInterpolators';\nimport type {\n GestureDirection,\n Layout,\n StackCardInterpolationProps,\n StackCardStyleInterpolator,\n TransitionSpec,\n} from '../../types';\nimport CardAnimationContext from '../../utils/CardAnimationContext';\nimport getDistanceForDirection from '../../utils/getDistanceForDirection';\nimport getInvertedMultiplier from '../../utils/getInvertedMultiplier';\nimport memoize from '../../utils/memoize';\nimport {\n GestureState,\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n} from '../GestureHandler';\nimport ModalStatusBarManager from '../ModalStatusBarManager';\nimport CardSheet from './CardSheet';\n\ntype Props = ViewProps & {\n interpolationIndex: number;\n closing: boolean;\n next?: Animated.AnimatedInterpolation;\n current: Animated.AnimatedInterpolation;\n gesture: Animated.Value;\n layout: Layout;\n insets: EdgeInsets;\n headerDarkContent: boolean | undefined;\n pageOverflowEnabled: boolean;\n gestureDirection: GestureDirection;\n onOpen: () => void;\n onClose: () => void;\n onTransition: (props: { closing: boolean; gesture: boolean }) => void;\n onGestureBegin: () => void;\n onGestureCanceled: () => void;\n onGestureEnd: () => void;\n children: React.ReactNode;\n overlay: (props: {\n style: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\n }) => React.ReactNode;\n overlayEnabled: boolean;\n shadowEnabled: boolean;\n gestureEnabled: boolean;\n gestureResponseDistance?: number;\n gestureVelocityImpact: number;\n transitionSpec: {\n open: TransitionSpec;\n close: TransitionSpec;\n };\n styleInterpolator: StackCardStyleInterpolator;\n containerStyle?: StyleProp<ViewStyle>;\n contentStyle?: StyleProp<ViewStyle>;\n};\n\nconst GESTURE_VELOCITY_IMPACT = 0.3;\n\nconst TRUE = 1;\nconst FALSE = 0;\n\n/**\n * The distance of touch start from the edge of the screen where the gesture will be recognized\n */\nconst GESTURE_RESPONSE_DISTANCE_HORIZONTAL = 50;\nconst GESTURE_RESPONSE_DISTANCE_VERTICAL = 135;\n\nconst useNativeDriver = Platform.OS !== 'web';\n\nconst hasOpacityStyle = (style: any) => {\n if (style) {\n const flattenedStyle = StyleSheet.flatten(style);\n return flattenedStyle.opacity != null;\n }\n\n return false;\n};\n\nexport default class Card extends React.Component<Props> {\n static defaultProps = {\n shadowEnabled: false,\n gestureEnabled: true,\n gestureVelocityImpact: GESTURE_VELOCITY_IMPACT,\n overlay: ({\n style,\n }: {\n style: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\n }) =>\n style ? (\n <Animated.View pointerEvents=\"none\" style={[styles.overlay, style]} />\n ) : null,\n };\n\n componentDidMount() {\n this.animate({ closing: this.props.closing });\n this.isCurrentlyMounted = true;\n }\n\n componentDidUpdate(prevProps: Props) {\n const { layout, gestureDirection, closing } = this.props;\n const { width, height } = layout;\n\n if (width !== prevProps.layout.width) {\n this.layout.width.setValue(width);\n }\n\n if (height !== prevProps.layout.height) {\n this.layout.height.setValue(height);\n }\n\n if (gestureDirection !== prevProps.gestureDirection) {\n this.inverted.setValue(getInvertedMultiplier(gestureDirection));\n }\n\n const toValue = this.getAnimateToValue(this.props);\n\n if (\n this.getAnimateToValue(prevProps) !== toValue ||\n this.lastToValue !== toValue\n ) {\n // We need to trigger the animation when route was closed\n // Thr route might have been closed by a `POP` action or by a gesture\n // When route was closed due to a gesture, the animation would've happened already\n // It's still important to trigger the animation so that `onClose` is called\n // If `onClose` is not called, cleanup step won't be performed for gestures\n this.animate({ closing });\n }\n }\n\n componentWillUnmount() {\n this.props.gesture.stopAnimation();\n this.isCurrentlyMounted = false;\n this.handleEndInteraction();\n }\n\n private isCurrentlyMounted = false;\n\n private isClosing = new Animated.Value(FALSE);\n\n private inverted = new Animated.Value(\n getInvertedMultiplier(this.props.gestureDirection)\n );\n\n private layout = {\n width: new Animated.Value(this.props.layout.width),\n height: new Animated.Value(this.props.layout.height),\n };\n\n private isSwiping = new Animated.Value(FALSE);\n\n private interactionHandle: number | undefined;\n\n private pendingGestureCallback: number | undefined;\n\n private lastToValue: number | undefined;\n\n private animate = ({\n closing,\n velocity,\n }: {\n closing: boolean;\n velocity?: number;\n }) => {\n const { gesture, transitionSpec, onOpen, onClose, onTransition } =\n this.props;\n\n const toValue = this.getAnimateToValue({\n ...this.props,\n closing,\n });\n\n this.lastToValue = toValue;\n\n this.isClosing.setValue(closing ? TRUE : FALSE);\n\n const spec = closing ? transitionSpec.close : transitionSpec.open;\n\n const animation =\n spec.animation === 'spring' ? Animated.spring : Animated.timing;\n\n this.setPointerEventsEnabled(!closing);\n this.handleStartInteraction();\n\n clearTimeout(this.pendingGestureCallback);\n\n onTransition?.({ closing, gesture: velocity !== undefined });\n animation(gesture, {\n ...spec.config,\n velocity,\n toValue,\n useNativeDriver,\n isInteraction: false,\n }).start(({ finished }) => {\n this.handleEndInteraction();\n\n clearTimeout(this.pendingGestureCallback);\n\n if (finished) {\n if (closing) {\n onClose();\n } else {\n onOpen();\n }\n\n if (this.isCurrentlyMounted) {\n // Make sure to re-open screen if it wasn't removed\n this.forceUpdate();\n }\n }\n });\n };\n\n private getAnimateToValue = ({\n closing,\n layout,\n gestureDirection,\n }: {\n closing?: boolean;\n layout: Layout;\n gestureDirection: GestureDirection;\n }) => {\n if (!closing) {\n return 0;\n }\n\n return getDistanceForDirection(layout, gestureDirection);\n };\n\n private setPointerEventsEnabled = (enabled: boolean) => {\n const pointerEvents = enabled ? 'box-none' : 'none';\n\n this.contentRef.current?.setNativeProps({ pointerEvents });\n };\n\n private handleStartInteraction = () => {\n if (this.interactionHandle === undefined) {\n this.interactionHandle = InteractionManager.createInteractionHandle();\n }\n };\n\n private handleEndInteraction = () => {\n if (this.interactionHandle !== undefined) {\n InteractionManager.clearInteractionHandle(this.interactionHandle);\n this.interactionHandle = undefined;\n }\n };\n\n private handleGestureStateChange = ({\n nativeEvent,\n }: PanGestureHandlerGestureEvent) => {\n const {\n layout,\n onClose,\n onGestureBegin,\n onGestureCanceled,\n onGestureEnd,\n gestureDirection,\n gestureVelocityImpact,\n } = this.props;\n\n switch (nativeEvent.state) {\n case GestureState.ACTIVE:\n this.isSwiping.setValue(TRUE);\n this.handleStartInteraction();\n onGestureBegin?.();\n break;\n case GestureState.CANCELLED: {\n this.isSwiping.setValue(FALSE);\n this.handleEndInteraction();\n\n const velocity =\n gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ? nativeEvent.velocityY\n : nativeEvent.velocityX;\n\n this.animate({ closing: this.props.closing, velocity });\n\n onGestureCanceled?.();\n break;\n }\n case GestureState.END: {\n this.isSwiping.setValue(FALSE);\n\n let distance;\n let translation;\n let velocity;\n\n if (\n gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ) {\n distance = layout.height;\n translation = nativeEvent.translationY;\n velocity = nativeEvent.velocityY;\n } else {\n distance = layout.width;\n translation = nativeEvent.translationX;\n velocity = nativeEvent.velocityX;\n }\n\n const closing =\n (translation + velocity * gestureVelocityImpact) *\n getInvertedMultiplier(gestureDirection) >\n distance / 2\n ? velocity !== 0 || translation !== 0\n : this.props.closing;\n\n this.animate({ closing, velocity });\n\n if (closing) {\n // We call onClose with a delay to make sure that the animation has already started\n // This will make sure that the state update caused by this doesn't affect start of animation\n this.pendingGestureCallback = setTimeout(() => {\n onClose();\n\n // Trigger an update after we dispatch the action to remove the screen\n // This will make sure that we check if the screen didn't get removed so we can cancel the animation\n this.forceUpdate();\n }, 32) as any as number;\n }\n\n onGestureEnd?.();\n break;\n }\n }\n };\n\n // Memoize this to avoid extra work on re-render\n private getInterpolatedStyle = memoize(\n (\n styleInterpolator: StackCardStyleInterpolator,\n animation: StackCardInterpolationProps\n ) => styleInterpolator(animation)\n );\n\n // Keep track of the animation context when deps changes.\n private getCardAnimation = memoize(\n (\n interpolationIndex: number,\n current: Animated.AnimatedInterpolation,\n next: Animated.AnimatedInterpolation | undefined,\n layout: Layout,\n insetTop: number,\n insetRight: number,\n insetBottom: number,\n insetLeft: number\n ) => ({\n index: interpolationIndex,\n current: { progress: current },\n next: next && { progress: next },\n closing: this.isClosing,\n swiping: this.isSwiping,\n inverted: this.inverted,\n layouts: {\n screen: layout,\n },\n insets: {\n top: insetTop,\n right: insetRight,\n bottom: insetBottom,\n left: insetLeft,\n },\n })\n );\n\n private gestureActivationCriteria() {\n const { layout, gestureDirection, gestureResponseDistance } = this.props;\n const enableTrackpadTwoFingerGesture = true;\n\n const distance =\n gestureResponseDistance !== undefined\n ? gestureResponseDistance\n : gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ? GESTURE_RESPONSE_DISTANCE_VERTICAL\n : GESTURE_RESPONSE_DISTANCE_HORIZONTAL;\n\n if (gestureDirection === 'vertical') {\n return {\n maxDeltaX: 15,\n minOffsetY: 5,\n hitSlop: { bottom: -layout.height + distance },\n enableTrackpadTwoFingerGesture,\n };\n } else if (gestureDirection === 'vertical-inverted') {\n return {\n maxDeltaX: 15,\n minOffsetY: -5,\n hitSlop: { top: -layout.height + distance },\n enableTrackpadTwoFingerGesture,\n };\n } else {\n const hitSlop = -layout.width + distance;\n const invertedMultiplier = getInvertedMultiplier(gestureDirection);\n\n if (invertedMultiplier === 1) {\n return {\n minOffsetX: 5,\n maxDeltaY: 20,\n hitSlop: { right: hitSlop },\n enableTrackpadTwoFingerGesture,\n };\n } else {\n return {\n minOffsetX: -5,\n maxDeltaY: 20,\n hitSlop: { left: hitSlop },\n enableTrackpadTwoFingerGesture,\n };\n }\n }\n }\n\n private contentRef = React.createRef<View>();\n\n render() {\n const {\n styleInterpolator,\n interpolationIndex,\n current,\n gesture,\n next,\n layout,\n insets,\n overlay,\n overlayEnabled,\n shadowEnabled,\n gestureEnabled,\n gestureDirection,\n pageOverflowEnabled,\n headerDarkContent,\n children,\n containerStyle: customContainerStyle,\n contentStyle,\n ...rest\n } = this.props;\n\n const interpolationProps = this.getCardAnimation(\n interpolationIndex,\n current,\n next,\n layout,\n insets.top,\n insets.right,\n insets.bottom,\n insets.left\n );\n\n const interpolatedStyle = this.getInterpolatedStyle(\n styleInterpolator,\n interpolationProps\n );\n\n const { containerStyle, cardStyle, overlayStyle, shadowStyle } =\n interpolatedStyle;\n\n const handleGestureEvent = gestureEnabled\n ? Animated.event(\n [\n {\n nativeEvent:\n gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ? { translationY: gesture }\n : { translationX: gesture },\n },\n ],\n { useNativeDriver }\n )\n : undefined;\n\n const { backgroundColor } = StyleSheet.flatten(contentStyle || {});\n const isTransparent =\n typeof backgroundColor === 'string'\n ? Color(backgroundColor).alpha() === 0\n : false;\n\n return (\n <CardAnimationContext.Provider value={interpolationProps}>\n {\n // StatusBar messes with translucent status bar on Android\n // So we should only enable it on iOS\n Platform.OS === 'ios' &&\n overlayEnabled &&\n next &&\n getIsModalPresentation(styleInterpolator) ? (\n <ModalStatusBarManager\n dark={headerDarkContent}\n layout={layout}\n insets={insets}\n style={cardStyle}\n />\n ) : null\n }\n <Animated.View\n style={{\n // This is a dummy style that doesn't actually change anything visually.\n // Animated needs the animated value to be used somewhere, otherwise things don't update properly.\n // If we disable animations and hide header, it could end up making the value unused.\n // So we have this dummy style that will always be used regardless of what else changed.\n opacity: current,\n }}\n // Make sure that this view isn't removed. If this view is removed, our style with animated value won't apply\n collapsable={false}\n />\n <View pointerEvents=\"box-none\" {...rest}>\n {overlayEnabled ? (\n <View pointerEvents=\"box-none\" style={StyleSheet.absoluteFill}>\n {overlay({ style: overlayStyle })}\n </View>\n ) : null}\n <Animated.View\n style={[styles.container, containerStyle, customContainerStyle]}\n pointerEvents=\"box-none\"\n >\n <PanGestureHandler\n enabled={layout.width !== 0 && gestureEnabled}\n onGestureEvent={handleGestureEvent}\n onHandlerStateChange={this.handleGestureStateChange}\n {...this.gestureActivationCriteria()}\n >\n <Animated.View\n needsOffscreenAlphaCompositing={hasOpacityStyle(cardStyle)}\n style={[styles.container, cardStyle]}\n >\n {shadowEnabled && shadowStyle && !isTransparent ? (\n <Animated.View\n style={[\n styles.shadow,\n gestureDirection === 'horizontal'\n ? [styles.shadowHorizontal, styles.shadowLeft]\n : gestureDirection === 'horizontal-inverted'\n ? [styles.shadowHorizontal, styles.shadowRight]\n : gestureDirection === 'vertical'\n ? [styles.shadowVertical, styles.shadowTop]\n : [styles.shadowVertical, styles.shadowBottom],\n { backgroundColor },\n shadowStyle,\n ]}\n pointerEvents=\"none\"\n />\n ) : null}\n <CardSheet\n ref={this.contentRef}\n enabled={pageOverflowEnabled}\n layout={layout}\n style={contentStyle}\n >\n {children}\n </CardSheet>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </View>\n </CardAnimationContext.Provider>\n );\n }\n}\n\nexport const getIsModalPresentation = (\n cardStyleInterpolator: StackCardStyleInterpolator\n) => {\n return (\n cardStyleInterpolator === forModalPresentationIOS ||\n // Handle custom modal presentation interpolators as well\n cardStyleInterpolator.name === 'forModalPresentationIOS'\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n overlay: {\n flex: 1,\n backgroundColor: '#000',\n },\n shadow: {\n position: 'absolute',\n shadowRadius: 5,\n shadowColor: '#000',\n shadowOpacity: 0.3,\n },\n shadowHorizontal: {\n top: 0,\n bottom: 0,\n width: 3,\n shadowOffset: { width: -1, height: 1 },\n },\n shadowLeft: {\n left: 0,\n },\n shadowRight: {\n right: 0,\n },\n shadowVertical: {\n left: 0,\n right: 0,\n height: 3,\n shadowOffset: { width: 1, height: -1 },\n },\n shadowTop: {\n top: 0,\n },\n shadowBottom: {\n bottom: 0,\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["Card.tsx"],"names":["Color","React","Animated","InteractionManager","Platform","StyleSheet","View","forModalPresentationIOS","CardAnimationContext","getDistanceForDirection","getInvertedMultiplier","memoize","GestureState","PanGestureHandler","ModalStatusBarManager","CardSheet","GESTURE_VELOCITY_IMPACT","TRUE","FALSE","GESTURE_RESPONSE_DISTANCE_HORIZONTAL","GESTURE_RESPONSE_DISTANCE_VERTICAL","useNativeDriver","OS","hasOpacityStyle","style","flattenedStyle","flatten","opacity","Card","Component","pointerEvents","Value","props","gestureDirection","width","layout","height","closing","velocity","gesture","transitionSpec","onOpen","onClose","onTransition","toValue","getAnimateToValue","lastToValue","isClosing","setValue","spec","close","open","animation","spring","timing","setPointerEventsEnabled","handleStartInteraction","clearTimeout","pendingGestureCallback","undefined","config","isInteraction","start","finished","handleEndInteraction","isCurrentlyMounted","forceUpdate","enabled","setState","interactionHandle","createInteractionHandle","clearInteractionHandle","nativeEvent","onGestureBegin","onGestureCanceled","onGestureEnd","gestureVelocityImpact","state","ACTIVE","isSwiping","CANCELLED","velocityY","velocityX","animate","END","distance","translation","translationY","translationX","setTimeout","styleInterpolator","interpolationIndex","current","next","insetTop","insetRight","insetBottom","insetLeft","index","progress","swiping","inverted","layouts","screen","insets","top","right","bottom","left","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","stopAnimation","gestureActivationCriteria","gestureResponseDistance","enableTrackpadTwoFingerGesture","maxDeltaX","minOffsetY","hitSlop","invertedMultiplier","minOffsetX","maxDeltaY","render","overlay","overlayEnabled","shadowEnabled","gestureEnabled","pageOverflowEnabled","headerDarkContent","children","containerStyle","customContainerStyle","contentStyle","rest","interpolationProps","getCardAnimation","interpolatedStyle","getInterpolatedStyle","cardStyle","overlayStyle","shadowStyle","handleGestureEvent","event","backgroundColor","isTransparent","alpha","getIsModalPresentation","absoluteFill","styles","container","handleGestureStateChange","shadow","shadowHorizontal","shadowLeft","shadowRight","shadowVertical","shadowTop","shadowBottom","cardStyleInterpolator","name","create","flex","position","shadowRadius","shadowColor","shadowOpacity","shadowOffset"],"mappings":"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","sourcesContent":["import Color from 'color';\nimport * as React from 'react';\nimport {\n Animated,\n InteractionManager,\n Platform,\n StyleProp,\n StyleSheet,\n View,\n ViewProps,\n ViewStyle,\n} from 'react-native';\nimport type { EdgeInsets } from 'react-native-safe-area-context';\n\nimport { forModalPresentationIOS } from '../../TransitionConfigs/CardStyleInterpolators';\nimport type {\n GestureDirection,\n Layout,\n StackCardInterpolationProps,\n StackCardStyleInterpolator,\n TransitionSpec,\n} from '../../types';\nimport CardAnimationContext from '../../utils/CardAnimationContext';\nimport getDistanceForDirection from '../../utils/getDistanceForDirection';\nimport getInvertedMultiplier from '../../utils/getInvertedMultiplier';\nimport memoize from '../../utils/memoize';\nimport {\n GestureState,\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n} from '../GestureHandler';\nimport ModalStatusBarManager from '../ModalStatusBarManager';\nimport CardSheet from './CardSheet';\n\ntype Props = ViewProps & {\n interpolationIndex: number;\n closing: boolean;\n next?: Animated.AnimatedInterpolation;\n current: Animated.AnimatedInterpolation;\n gesture: Animated.Value;\n layout: Layout;\n insets: EdgeInsets;\n headerDarkContent: boolean | undefined;\n pageOverflowEnabled: boolean;\n gestureDirection: GestureDirection;\n onOpen: () => void;\n onClose: () => void;\n onTransition: (props: { closing: boolean; gesture: boolean }) => void;\n onGestureBegin: () => void;\n onGestureCanceled: () => void;\n onGestureEnd: () => void;\n children: React.ReactNode;\n overlay: (props: {\n style: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\n }) => React.ReactNode;\n overlayEnabled: boolean;\n shadowEnabled: boolean;\n gestureEnabled: boolean;\n gestureResponseDistance?: number;\n gestureVelocityImpact: number;\n transitionSpec: {\n open: TransitionSpec;\n close: TransitionSpec;\n };\n styleInterpolator: StackCardStyleInterpolator;\n containerStyle?: StyleProp<ViewStyle>;\n contentStyle?: StyleProp<ViewStyle>;\n};\n\ntype State = {\n pointerEvents: ViewProps['pointerEvents'];\n};\n\nconst GESTURE_VELOCITY_IMPACT = 0.3;\n\nconst TRUE = 1;\nconst FALSE = 0;\n\n/**\n * The distance of touch start from the edge of the screen where the gesture will be recognized\n */\nconst GESTURE_RESPONSE_DISTANCE_HORIZONTAL = 50;\nconst GESTURE_RESPONSE_DISTANCE_VERTICAL = 135;\n\nconst useNativeDriver = Platform.OS !== 'web';\n\nconst hasOpacityStyle = (style: any) => {\n if (style) {\n const flattenedStyle = StyleSheet.flatten(style);\n return flattenedStyle.opacity != null;\n }\n\n return false;\n};\n\nexport default class Card extends React.Component<Props, State> {\n static defaultProps = {\n shadowEnabled: false,\n gestureEnabled: true,\n gestureVelocityImpact: GESTURE_VELOCITY_IMPACT,\n overlay: ({\n style,\n }: {\n style: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\n }) =>\n style ? (\n <Animated.View pointerEvents=\"none\" style={[styles.overlay, style]} />\n ) : null,\n };\n\n state: State = {\n pointerEvents: 'auto',\n };\n\n componentDidMount() {\n this.animate({ closing: this.props.closing });\n this.isCurrentlyMounted = true;\n }\n\n componentDidUpdate(prevProps: Props) {\n const { layout, gestureDirection, closing } = this.props;\n const { width, height } = layout;\n\n if (width !== prevProps.layout.width) {\n this.layout.width.setValue(width);\n }\n\n if (height !== prevProps.layout.height) {\n this.layout.height.setValue(height);\n }\n\n if (gestureDirection !== prevProps.gestureDirection) {\n this.inverted.setValue(getInvertedMultiplier(gestureDirection));\n }\n\n const toValue = this.getAnimateToValue(this.props);\n\n if (\n this.getAnimateToValue(prevProps) !== toValue ||\n this.lastToValue !== toValue\n ) {\n // We need to trigger the animation when route was closed\n // Thr route might have been closed by a `POP` action or by a gesture\n // When route was closed due to a gesture, the animation would've happened already\n // It's still important to trigger the animation so that `onClose` is called\n // If `onClose` is not called, cleanup step won't be performed for gestures\n this.animate({ closing });\n }\n }\n\n componentWillUnmount() {\n this.props.gesture.stopAnimation();\n this.isCurrentlyMounted = false;\n this.handleEndInteraction();\n }\n\n private isCurrentlyMounted = false;\n\n private isClosing = new Animated.Value(FALSE);\n\n private inverted = new Animated.Value(\n getInvertedMultiplier(this.props.gestureDirection)\n );\n\n private layout = {\n width: new Animated.Value(this.props.layout.width),\n height: new Animated.Value(this.props.layout.height),\n };\n\n private isSwiping = new Animated.Value(FALSE);\n\n private interactionHandle: number | undefined;\n\n private pendingGestureCallback: number | undefined;\n\n private lastToValue: number | undefined;\n\n private animate = ({\n closing,\n velocity,\n }: {\n closing: boolean;\n velocity?: number;\n }) => {\n const { gesture, transitionSpec, onOpen, onClose, onTransition } =\n this.props;\n\n const toValue = this.getAnimateToValue({\n ...this.props,\n closing,\n });\n\n this.lastToValue = toValue;\n\n this.isClosing.setValue(closing ? TRUE : FALSE);\n\n const spec = closing ? transitionSpec.close : transitionSpec.open;\n\n const animation =\n spec.animation === 'spring' ? Animated.spring : Animated.timing;\n\n this.setPointerEventsEnabled(!closing);\n this.handleStartInteraction();\n\n clearTimeout(this.pendingGestureCallback);\n\n onTransition?.({ closing, gesture: velocity !== undefined });\n animation(gesture, {\n ...spec.config,\n velocity,\n toValue,\n useNativeDriver,\n isInteraction: false,\n }).start(({ finished }) => {\n this.handleEndInteraction();\n\n clearTimeout(this.pendingGestureCallback);\n\n if (finished) {\n if (closing) {\n onClose();\n } else {\n onOpen();\n }\n\n if (this.isCurrentlyMounted) {\n // Make sure to re-open screen if it wasn't removed\n this.forceUpdate();\n }\n }\n });\n };\n\n private getAnimateToValue = ({\n closing,\n layout,\n gestureDirection,\n }: {\n closing?: boolean;\n layout: Layout;\n gestureDirection: GestureDirection;\n }) => {\n if (!closing) {\n return 0;\n }\n\n return getDistanceForDirection(layout, gestureDirection);\n };\n\n private setPointerEventsEnabled = (enabled: boolean) => {\n const pointerEvents = enabled ? 'box-none' : 'none';\n\n this.setState({ pointerEvents });\n };\n\n private handleStartInteraction = () => {\n if (this.interactionHandle === undefined) {\n this.interactionHandle = InteractionManager.createInteractionHandle();\n }\n };\n\n private handleEndInteraction = () => {\n if (this.interactionHandle !== undefined) {\n InteractionManager.clearInteractionHandle(this.interactionHandle);\n this.interactionHandle = undefined;\n }\n };\n\n private handleGestureStateChange = ({\n nativeEvent,\n }: PanGestureHandlerGestureEvent) => {\n const {\n layout,\n onClose,\n onGestureBegin,\n onGestureCanceled,\n onGestureEnd,\n gestureDirection,\n gestureVelocityImpact,\n } = this.props;\n\n switch (nativeEvent.state) {\n case GestureState.ACTIVE:\n this.isSwiping.setValue(TRUE);\n this.handleStartInteraction();\n onGestureBegin?.();\n break;\n case GestureState.CANCELLED: {\n this.isSwiping.setValue(FALSE);\n this.handleEndInteraction();\n\n const velocity =\n gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ? nativeEvent.velocityY\n : nativeEvent.velocityX;\n\n this.animate({ closing: this.props.closing, velocity });\n\n onGestureCanceled?.();\n break;\n }\n case GestureState.END: {\n this.isSwiping.setValue(FALSE);\n\n let distance;\n let translation;\n let velocity;\n\n if (\n gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ) {\n distance = layout.height;\n translation = nativeEvent.translationY;\n velocity = nativeEvent.velocityY;\n } else {\n distance = layout.width;\n translation = nativeEvent.translationX;\n velocity = nativeEvent.velocityX;\n }\n\n const closing =\n (translation + velocity * gestureVelocityImpact) *\n getInvertedMultiplier(gestureDirection) >\n distance / 2\n ? velocity !== 0 || translation !== 0\n : this.props.closing;\n\n this.animate({ closing, velocity });\n\n if (closing) {\n // We call onClose with a delay to make sure that the animation has already started\n // This will make sure that the state update caused by this doesn't affect start of animation\n this.pendingGestureCallback = setTimeout(() => {\n onClose();\n\n // Trigger an update after we dispatch the action to remove the screen\n // This will make sure that we check if the screen didn't get removed so we can cancel the animation\n this.forceUpdate();\n }, 32) as any as number;\n }\n\n onGestureEnd?.();\n break;\n }\n }\n };\n\n // Memoize this to avoid extra work on re-render\n private getInterpolatedStyle = memoize(\n (\n styleInterpolator: StackCardStyleInterpolator,\n animation: StackCardInterpolationProps\n ) => styleInterpolator(animation)\n );\n\n // Keep track of the animation context when deps changes.\n private getCardAnimation = memoize(\n (\n interpolationIndex: number,\n current: Animated.AnimatedInterpolation,\n next: Animated.AnimatedInterpolation | undefined,\n layout: Layout,\n insetTop: number,\n insetRight: number,\n insetBottom: number,\n insetLeft: number\n ) => ({\n index: interpolationIndex,\n current: { progress: current },\n next: next && { progress: next },\n closing: this.isClosing,\n swiping: this.isSwiping,\n inverted: this.inverted,\n layouts: {\n screen: layout,\n },\n insets: {\n top: insetTop,\n right: insetRight,\n bottom: insetBottom,\n left: insetLeft,\n },\n })\n );\n\n private gestureActivationCriteria() {\n const { layout, gestureDirection, gestureResponseDistance } = this.props;\n const enableTrackpadTwoFingerGesture = true;\n\n const distance =\n gestureResponseDistance !== undefined\n ? gestureResponseDistance\n : gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ? GESTURE_RESPONSE_DISTANCE_VERTICAL\n : GESTURE_RESPONSE_DISTANCE_HORIZONTAL;\n\n if (gestureDirection === 'vertical') {\n return {\n maxDeltaX: 15,\n minOffsetY: 5,\n hitSlop: { bottom: -layout.height + distance },\n enableTrackpadTwoFingerGesture,\n };\n } else if (gestureDirection === 'vertical-inverted') {\n return {\n maxDeltaX: 15,\n minOffsetY: -5,\n hitSlop: { top: -layout.height + distance },\n enableTrackpadTwoFingerGesture,\n };\n } else {\n const hitSlop = -layout.width + distance;\n const invertedMultiplier = getInvertedMultiplier(gestureDirection);\n\n if (invertedMultiplier === 1) {\n return {\n minOffsetX: 5,\n maxDeltaY: 20,\n hitSlop: { right: hitSlop },\n enableTrackpadTwoFingerGesture,\n };\n } else {\n return {\n minOffsetX: -5,\n maxDeltaY: 20,\n hitSlop: { left: hitSlop },\n enableTrackpadTwoFingerGesture,\n };\n }\n }\n }\n\n render() {\n const {\n styleInterpolator,\n interpolationIndex,\n current,\n gesture,\n next,\n layout,\n insets,\n overlay,\n overlayEnabled,\n shadowEnabled,\n gestureEnabled,\n gestureDirection,\n pageOverflowEnabled,\n headerDarkContent,\n children,\n containerStyle: customContainerStyle,\n contentStyle,\n ...rest\n } = this.props;\n\n const interpolationProps = this.getCardAnimation(\n interpolationIndex,\n current,\n next,\n layout,\n insets.top,\n insets.right,\n insets.bottom,\n insets.left\n );\n\n const interpolatedStyle = this.getInterpolatedStyle(\n styleInterpolator,\n interpolationProps\n );\n\n const { containerStyle, cardStyle, overlayStyle, shadowStyle } =\n interpolatedStyle;\n\n const handleGestureEvent = gestureEnabled\n ? Animated.event(\n [\n {\n nativeEvent:\n gestureDirection === 'vertical' ||\n gestureDirection === 'vertical-inverted'\n ? { translationY: gesture }\n : { translationX: gesture },\n },\n ],\n { useNativeDriver }\n )\n : undefined;\n\n const { backgroundColor } = StyleSheet.flatten(contentStyle || {});\n const isTransparent =\n typeof backgroundColor === 'string'\n ? Color(backgroundColor).alpha() === 0\n : false;\n\n return (\n <CardAnimationContext.Provider value={interpolationProps}>\n {\n // StatusBar messes with translucent status bar on Android\n // So we should only enable it on iOS\n Platform.OS === 'ios' &&\n overlayEnabled &&\n next &&\n getIsModalPresentation(styleInterpolator) ? (\n <ModalStatusBarManager\n dark={headerDarkContent}\n layout={layout}\n insets={insets}\n style={cardStyle}\n />\n ) : null\n }\n <Animated.View\n style={{\n // This is a dummy style that doesn't actually change anything visually.\n // Animated needs the animated value to be used somewhere, otherwise things don't update properly.\n // If we disable animations and hide header, it could end up making the value unused.\n // So we have this dummy style that will always be used regardless of what else changed.\n opacity: current,\n }}\n // Make sure that this view isn't removed. If this view is removed, our style with animated value won't apply\n collapsable={false}\n />\n <View pointerEvents=\"box-none\" {...rest}>\n {overlayEnabled ? (\n <View pointerEvents=\"box-none\" style={StyleSheet.absoluteFill}>\n {overlay({ style: overlayStyle })}\n </View>\n ) : null}\n <Animated.View\n style={[styles.container, containerStyle, customContainerStyle]}\n pointerEvents=\"box-none\"\n >\n <PanGestureHandler\n enabled={layout.width !== 0 && gestureEnabled}\n onGestureEvent={handleGestureEvent}\n onHandlerStateChange={this.handleGestureStateChange}\n {...this.gestureActivationCriteria()}\n >\n <Animated.View\n needsOffscreenAlphaCompositing={hasOpacityStyle(cardStyle)}\n style={[styles.container, cardStyle]}\n >\n {shadowEnabled && shadowStyle && !isTransparent ? (\n <Animated.View\n style={[\n styles.shadow,\n gestureDirection === 'horizontal'\n ? [styles.shadowHorizontal, styles.shadowLeft]\n : gestureDirection === 'horizontal-inverted'\n ? [styles.shadowHorizontal, styles.shadowRight]\n : gestureDirection === 'vertical'\n ? [styles.shadowVertical, styles.shadowTop]\n : [styles.shadowVertical, styles.shadowBottom],\n { backgroundColor },\n shadowStyle,\n ]}\n pointerEvents=\"none\"\n />\n ) : null}\n <CardSheet\n pointerEvents={this.state.pointerEvents}\n enabled={pageOverflowEnabled}\n layout={layout}\n style={contentStyle}\n >\n {children}\n </CardSheet>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </View>\n </CardAnimationContext.Provider>\n );\n }\n}\n\nexport const getIsModalPresentation = (\n cardStyleInterpolator: StackCardStyleInterpolator\n) => {\n return (\n cardStyleInterpolator === forModalPresentationIOS ||\n // Handle custom modal presentation interpolators as well\n cardStyleInterpolator.name === 'forModalPresentationIOS'\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n overlay: {\n flex: 1,\n backgroundColor: '#000',\n },\n shadow: {\n position: 'absolute',\n shadowRadius: 5,\n shadowColor: '#000',\n shadowOpacity: 0.3,\n },\n shadowHorizontal: {\n top: 0,\n bottom: 0,\n width: 3,\n shadowOffset: { width: -1, height: 1 },\n },\n shadowLeft: {\n left: 0,\n },\n shadowRight: {\n right: 0,\n },\n shadowVertical: {\n left: 0,\n right: 0,\n height: 3,\n shadowOffset: { width: 1, height: -1 },\n },\n shadowTop: {\n top: 0,\n },\n shadowBottom: {\n bottom: 0,\n },\n});\n"]}
|
|
@@ -10,7 +10,7 @@ import getDistanceForDirection from '../../utils/getDistanceForDirection';
|
|
|
10
10
|
import { MaybeScreen, MaybeScreenContainer } from '../Screens';
|
|
11
11
|
import { getIsModalPresentation } from './Card';
|
|
12
12
|
import CardContainer from './CardContainer';
|
|
13
|
-
const EPSILON =
|
|
13
|
+
const EPSILON = 1e-5;
|
|
14
14
|
const STATE_INACTIVE = 0;
|
|
15
15
|
const STATE_TRANSITIONING_OR_BELOW_TOP = 1;
|
|
16
16
|
const STATE_ON_TOP = 2;
|
|
@@ -388,7 +388,8 @@ export default class CardStack extends React.Component {
|
|
|
388
388
|
headerShown = true,
|
|
389
389
|
headerTransparent,
|
|
390
390
|
headerStyle,
|
|
391
|
-
headerTintColor
|
|
391
|
+
headerTintColor,
|
|
392
|
+
freezeOnBlur
|
|
392
393
|
} = scene.descriptor.options;
|
|
393
394
|
const safeAreaInsetTop = insets.top;
|
|
394
395
|
const safeAreaInsetRight = insets.right;
|
|
@@ -419,6 +420,7 @@ export default class CardStack extends React.Component {
|
|
|
419
420
|
style: StyleSheet.absoluteFill,
|
|
420
421
|
enabled: detachInactiveScreens,
|
|
421
422
|
active: isScreenActive,
|
|
423
|
+
freezeOnBlur: freezeOnBlur,
|
|
422
424
|
pointerEvents: "box-none"
|
|
423
425
|
}, /*#__PURE__*/React.createElement(CardContainer, {
|
|
424
426
|
index: index,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CardStack.tsx"],"names":["Background","getDefaultHeaderHeight","SafeAreaProviderCompat","Color","React","Animated","Platform","StyleSheet","forModalPresentationIOS","forNoAnimation","forNoAnimationCard","DefaultTransition","ModalFadeTransition","ModalTransition","getDistanceForDirection","MaybeScreen","MaybeScreenContainer","getIsModalPresentation","CardContainer","EPSILON","STATE_INACTIVE","STATE_TRANSITIONING_OR_BELOW_TOP","STATE_ON_TOP","FALLBACK_DESCRIPTOR","Object","freeze","options","getInterpolationIndex","scenes","index","cardStyleInterpolator","descriptor","interpolationIndex","i","cardStyleInterpolatorCurrent","getIsModal","scene","isParentModal","isModalPresentation","isModal","getHeaderHeights","insets","isParentHeaderShown","layout","previous","reduce","acc","curr","headerStatusBarHeight","top","headerStyle","style","flatten","height","route","key","getDistanceFromOptions","presentation","gestureDirection","getProgressFromGesture","gesture","distance","width","Math","max","interpolate","inputRange","outputRange","CardStack","Component","getDerivedStateFromProps","props","state","routes","descriptors","gestures","animationEnabled","Value","openingRouteKeys","includes","map","self","previousRoute","nextRoute","oldScene","currentGesture","previousGesture","undefined","nextGesture","nextDescriptor","previousDescriptor","optionsForTransitionConfig","length","defaultTransitionPreset","OS","gestureEnabled","transitionSpec","headerStyleInterpolator","cardOverlayEnabled","headerMode","header","progress","current","next","__memo","every","it","headerHeights","constructor","e","nativeEvent","setState","previousHeight","getPreviousRoute","previousScene","find","initialMetrics","frame","render","closingRouteKeys","onOpenRoute","onCloseRoute","renderHeader","renderScene","onTransitionStart","onTransitionEnd","onGestureStart","onGestureEnd","onGestureCancel","detachInactiveScreens","focusedRoute","focusedHeaderHeight","isFloatHeaderAbsolute","slice","some","headerTransparent","headerShown","activeScreensLimit","detachPreviousScreen","lastIndexOf","floatingHeader","mode","getPreviousScene","getFocusedRoute","onContentHeightChange","handleHeaderLayout","styles","floating","absolute","container","handleLayout","focused","isScreenActive","sceneForActivity","outputValue","extrapolate","headerTintColor","safeAreaInsetTop","safeAreaInsetRight","right","safeAreaInsetBottom","bottom","safeAreaInsetLeft","left","headerHeight","headerDarkContent","isDark","flattenedHeaderStyle","backgroundColor","isNextScreenTransparent","detachCurrentScreen","absoluteFill","create","flex","position","zIndex"],"mappings":"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","sourcesContent":["import {\n Background,\n getDefaultHeaderHeight,\n SafeAreaProviderCompat,\n} from '@react-navigation/elements';\nimport type {\n ParamListBase,\n Route,\n StackNavigationState,\n} from '@react-navigation/native';\nimport Color from 'color';\nimport * as React from 'react';\nimport {\n Animated,\n LayoutChangeEvent,\n Platform,\n StyleSheet,\n} from 'react-native';\nimport type { EdgeInsets } from 'react-native-safe-area-context';\n\nimport {\n forModalPresentationIOS,\n forNoAnimation as forNoAnimationCard,\n} from '../../TransitionConfigs/CardStyleInterpolators';\nimport {\n DefaultTransition,\n ModalFadeTransition,\n ModalTransition,\n} from '../../TransitionConfigs/TransitionPresets';\nimport type {\n Layout,\n Scene,\n StackDescriptor,\n StackDescriptorMap,\n StackHeaderMode,\n StackNavigationOptions,\n} from '../../types';\nimport getDistanceForDirection from '../../utils/getDistanceForDirection';\nimport type { Props as HeaderContainerProps } from '../Header/HeaderContainer';\nimport { MaybeScreen, MaybeScreenContainer } from '../Screens';\nimport { getIsModalPresentation } from './Card';\nimport CardContainer from './CardContainer';\n\ntype GestureValues = {\n [key: string]: Animated.Value;\n};\n\ntype Props = {\n insets: EdgeInsets;\n state: StackNavigationState<ParamListBase>;\n descriptors: StackDescriptorMap;\n routes: Route<string>[];\n openingRouteKeys: string[];\n closingRouteKeys: string[];\n onOpenRoute: (props: { route: Route<string> }) => void;\n onCloseRoute: (props: { route: Route<string> }) => void;\n getPreviousRoute: (props: {\n route: Route<string>;\n }) => Route<string> | undefined;\n renderHeader: (props: HeaderContainerProps) => React.ReactNode;\n renderScene: (props: { route: Route<string> }) => React.ReactNode;\n isParentHeaderShown: boolean;\n isParentModal: boolean;\n onTransitionStart: (\n props: { route: Route<string> },\n closing: boolean\n ) => void;\n onTransitionEnd: (props: { route: Route<string> }, closing: boolean) => void;\n onGestureStart: (props: { route: Route<string> }) => void;\n onGestureEnd: (props: { route: Route<string> }) => void;\n onGestureCancel: (props: { route: Route<string> }) => void;\n detachInactiveScreens?: boolean;\n};\n\ntype State = {\n routes: Route<string>[];\n descriptors: StackDescriptorMap;\n scenes: Scene[];\n gestures: GestureValues;\n layout: Layout;\n headerHeights: Record<string, number>;\n};\n\nconst EPSILON = 0.01;\n\nconst STATE_INACTIVE = 0;\nconst STATE_TRANSITIONING_OR_BELOW_TOP = 1;\nconst STATE_ON_TOP = 2;\n\nconst FALLBACK_DESCRIPTOR = Object.freeze({ options: {} });\n\nconst getInterpolationIndex = (scenes: Scene[], index: number) => {\n const { cardStyleInterpolator } = scenes[index].descriptor.options;\n\n // Start from current card and count backwards the number of cards with same interpolation\n let interpolationIndex = 0;\n\n for (let i = index - 1; i >= 0; i--) {\n const cardStyleInterpolatorCurrent =\n scenes[i]?.descriptor.options.cardStyleInterpolator;\n\n if (cardStyleInterpolatorCurrent !== cardStyleInterpolator) {\n break;\n }\n\n interpolationIndex++;\n }\n\n return interpolationIndex;\n};\n\nconst getIsModal = (\n scene: Scene,\n interpolationIndex: number,\n isParentModal: boolean\n) => {\n if (isParentModal) {\n return true;\n }\n\n const { cardStyleInterpolator } = scene.descriptor.options;\n const isModalPresentation = getIsModalPresentation(cardStyleInterpolator);\n const isModal = isModalPresentation && interpolationIndex !== 0;\n\n return isModal;\n};\n\nconst getHeaderHeights = (\n scenes: Scene[],\n insets: EdgeInsets,\n isParentHeaderShown: boolean,\n isParentModal: boolean,\n layout: Layout,\n previous: Record<string, number>\n) => {\n return scenes.reduce<Record<string, number>>((acc, curr, index) => {\n const {\n headerStatusBarHeight = isParentHeaderShown ? 0 : insets.top,\n headerStyle,\n } = curr.descriptor.options;\n\n const style = StyleSheet.flatten(headerStyle || {});\n\n const height =\n 'height' in style && typeof style.height === 'number'\n ? style.height\n : previous[curr.route.key];\n\n const interpolationIndex = getInterpolationIndex(scenes, index);\n const isModal = getIsModal(curr, interpolationIndex, isParentModal);\n\n acc[curr.route.key] =\n typeof height === 'number'\n ? height\n : getDefaultHeaderHeight(layout, isModal, headerStatusBarHeight);\n\n return acc;\n }, {});\n};\n\nconst getDistanceFromOptions = (\n layout: Layout,\n descriptor?: StackDescriptor\n) => {\n const {\n presentation,\n gestureDirection = presentation === 'modal'\n ? ModalTransition.gestureDirection\n : DefaultTransition.gestureDirection,\n } = (descriptor?.options || {}) as StackNavigationOptions;\n\n return getDistanceForDirection(layout, gestureDirection);\n};\n\nconst getProgressFromGesture = (\n gesture: Animated.Value,\n layout: Layout,\n descriptor?: StackDescriptor\n) => {\n const distance = getDistanceFromOptions(\n {\n // Make sure that we have a non-zero distance, otherwise there will be incorrect progress\n // This causes blank screen on web if it was previously inside container with display: none\n width: Math.max(1, layout.width),\n height: Math.max(1, layout.height),\n },\n descriptor\n );\n\n if (distance > 0) {\n return gesture.interpolate({\n inputRange: [0, distance],\n outputRange: [1, 0],\n });\n }\n\n return gesture.interpolate({\n inputRange: [distance, 0],\n outputRange: [0, 1],\n });\n};\n\nexport default class CardStack extends React.Component<Props, State> {\n static getDerivedStateFromProps(\n props: Props,\n state: State\n ): Partial<State> | null {\n if (\n props.routes === state.routes &&\n props.descriptors === state.descriptors\n ) {\n return null;\n }\n\n const gestures = props.routes.reduce<GestureValues>((acc, curr) => {\n const descriptor = props.descriptors[curr.key];\n const { animationEnabled } = descriptor?.options || {};\n\n acc[curr.key] =\n state.gestures[curr.key] ||\n new Animated.Value(\n props.openingRouteKeys.includes(curr.key) &&\n animationEnabled !== false\n ? getDistanceFromOptions(state.layout, descriptor)\n : 0\n );\n\n return acc;\n }, {});\n\n const scenes = props.routes.map((route, index, self) => {\n const previousRoute = self[index - 1];\n const nextRoute = self[index + 1];\n\n const oldScene = state.scenes[index];\n\n const currentGesture = gestures[route.key];\n const previousGesture = previousRoute\n ? gestures[previousRoute.key]\n : undefined;\n const nextGesture = nextRoute ? gestures[nextRoute.key] : undefined;\n\n const descriptor =\n props.descriptors[route.key] ||\n state.descriptors[route.key] ||\n (oldScene ? oldScene.descriptor : FALLBACK_DESCRIPTOR);\n\n const nextDescriptor =\n props.descriptors[nextRoute?.key] || state.descriptors[nextRoute?.key];\n\n const previousDescriptor =\n props.descriptors[previousRoute?.key] ||\n state.descriptors[previousRoute?.key];\n\n // When a screen is not the last, it should use next screen's transition config\n // Many transitions also animate the previous screen, so using 2 different transitions doesn't look right\n // For example combining a slide and a modal transition would look wrong otherwise\n // With this approach, combining different transition styles in the same navigator mostly looks right\n // This will still be broken when 2 transitions have different idle state (e.g. modal presentation),\n // but majority of the transitions look alright\n const optionsForTransitionConfig =\n index !== self.length - 1 &&\n nextDescriptor &&\n nextDescriptor.options.presentation !== 'transparentModal'\n ? nextDescriptor.options\n : descriptor.options;\n\n let defaultTransitionPreset =\n optionsForTransitionConfig.presentation === 'modal'\n ? ModalTransition\n : optionsForTransitionConfig.presentation === 'transparentModal'\n ? ModalFadeTransition\n : DefaultTransition;\n\n const {\n animationEnabled = Platform.OS !== 'web' &&\n Platform.OS !== 'windows' &&\n Platform.OS !== 'macos',\n gestureEnabled = Platform.OS === 'ios' && animationEnabled,\n gestureDirection = defaultTransitionPreset.gestureDirection,\n transitionSpec = defaultTransitionPreset.transitionSpec,\n cardStyleInterpolator = animationEnabled === false\n ? forNoAnimationCard\n : defaultTransitionPreset.cardStyleInterpolator,\n headerStyleInterpolator = defaultTransitionPreset.headerStyleInterpolator,\n cardOverlayEnabled = (Platform.OS !== 'ios' &&\n optionsForTransitionConfig.presentation !== 'transparentModal') ||\n getIsModalPresentation(cardStyleInterpolator),\n } = optionsForTransitionConfig;\n\n const headerMode: StackHeaderMode =\n descriptor.options.headerMode ??\n (!(\n optionsForTransitionConfig.presentation === 'modal' ||\n optionsForTransitionConfig.presentation === 'transparentModal' ||\n nextDescriptor?.options.presentation === 'modal' ||\n nextDescriptor?.options.presentation === 'transparentModal' ||\n getIsModalPresentation(cardStyleInterpolator)\n ) &&\n Platform.OS === 'ios' &&\n descriptor.options.header === undefined\n ? 'float'\n : 'screen');\n\n const scene = {\n route,\n descriptor: {\n ...descriptor,\n options: {\n ...descriptor.options,\n animationEnabled,\n cardOverlayEnabled,\n cardStyleInterpolator,\n gestureDirection,\n gestureEnabled,\n headerStyleInterpolator,\n transitionSpec,\n headerMode,\n },\n },\n progress: {\n current: getProgressFromGesture(\n currentGesture,\n state.layout,\n descriptor\n ),\n next:\n nextGesture &&\n nextDescriptor?.options.presentation !== 'transparentModal'\n ? getProgressFromGesture(\n nextGesture,\n state.layout,\n nextDescriptor\n )\n : undefined,\n previous: previousGesture\n ? getProgressFromGesture(\n previousGesture,\n state.layout,\n previousDescriptor\n )\n : undefined,\n },\n __memo: [\n state.layout,\n descriptor,\n nextDescriptor,\n previousDescriptor,\n currentGesture,\n nextGesture,\n previousGesture,\n ],\n };\n\n if (\n oldScene &&\n scene.__memo.every((it, i) => {\n // @ts-expect-error: we haven't added __memo to the annotation to prevent usage elsewhere\n return oldScene.__memo[i] === it;\n })\n ) {\n return oldScene;\n }\n\n return scene;\n });\n\n return {\n routes: props.routes,\n scenes,\n gestures,\n descriptors: props.descriptors,\n headerHeights: getHeaderHeights(\n scenes,\n props.insets,\n props.isParentHeaderShown,\n props.isParentModal,\n state.layout,\n state.headerHeights\n ),\n };\n }\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n routes: [],\n scenes: [],\n gestures: {},\n layout: SafeAreaProviderCompat.initialMetrics.frame,\n descriptors: this.props.descriptors,\n // Used when card's header is null and mode is float to make transition\n // between screens with headers and those without headers smooth.\n // This is not a great heuristic here. We don't know synchronously\n // on mount what the header height is so we have just used the most\n // common cases here.\n headerHeights: {},\n };\n }\n\n private handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n const layout = { width, height };\n\n this.setState((state, props) => {\n if (height === state.layout.height && width === state.layout.width) {\n return null;\n }\n\n return {\n layout,\n headerHeights: getHeaderHeights(\n state.scenes,\n props.insets,\n props.isParentHeaderShown,\n props.isParentModal,\n layout,\n state.headerHeights\n ),\n };\n });\n };\n\n private handleHeaderLayout = ({\n route,\n height,\n }: {\n route: Route<string>;\n height: number;\n }) => {\n this.setState(({ headerHeights }) => {\n const previousHeight = headerHeights[route.key];\n\n if (previousHeight === height) {\n return null;\n }\n\n return {\n headerHeights: {\n ...headerHeights,\n [route.key]: height,\n },\n };\n });\n };\n\n private getFocusedRoute = () => {\n const { state } = this.props;\n\n return state.routes[state.index];\n };\n\n private getPreviousScene = ({ route }: { route: Route<string> }) => {\n const { getPreviousRoute } = this.props;\n const { scenes } = this.state;\n\n const previousRoute = getPreviousRoute({ route });\n\n if (previousRoute) {\n const previousScene = scenes.find(\n (scene) => scene.descriptor.route.key === previousRoute.key\n );\n\n return previousScene;\n }\n\n return undefined;\n };\n\n render() {\n const {\n insets,\n state,\n routes,\n closingRouteKeys,\n onOpenRoute,\n onCloseRoute,\n renderHeader,\n renderScene,\n isParentHeaderShown,\n isParentModal,\n onTransitionStart,\n onTransitionEnd,\n onGestureStart,\n onGestureEnd,\n onGestureCancel,\n detachInactiveScreens = Platform.OS === 'web' ||\n Platform.OS === 'android' ||\n Platform.OS === 'ios',\n } = this.props;\n\n const { scenes, layout, gestures, headerHeights } = this.state;\n\n const focusedRoute = state.routes[state.index];\n const focusedHeaderHeight = headerHeights[focusedRoute.key];\n\n const isFloatHeaderAbsolute = this.state.scenes.slice(-2).some((scene) => {\n const options = scene.descriptor.options ?? {};\n const { headerMode, headerTransparent, headerShown = true } = options;\n\n if (\n headerTransparent ||\n headerShown === false ||\n headerMode === 'screen'\n ) {\n return true;\n }\n\n return false;\n });\n\n let activeScreensLimit = 1;\n\n for (let i = scenes.length - 1; i >= 0; i--) {\n const { options } = scenes[i].descriptor;\n const {\n // By default, we don't want to detach the previous screen of the active one for modals\n detachPreviousScreen = options.presentation === 'transparentModal'\n ? false\n : getIsModalPresentation(options.cardStyleInterpolator)\n ? i !==\n scenes\n .map((scene) => scene.descriptor.options.cardStyleInterpolator)\n .lastIndexOf(forModalPresentationIOS)\n : true,\n } = options;\n\n if (detachPreviousScreen === false) {\n activeScreensLimit++;\n } else {\n // Check at least last 2 screens before stopping\n // This will make sure that screen isn't detached when another screen is animating on top of the transparent one\n // For example, (Opaque -> Transparent -> Opaque)\n if (i <= scenes.length - 2) {\n break;\n }\n }\n }\n\n const floatingHeader = (\n <React.Fragment key=\"header\">\n {renderHeader({\n mode: 'float',\n layout,\n scenes,\n getPreviousScene: this.getPreviousScene,\n getFocusedRoute: this.getFocusedRoute,\n onContentHeightChange: this.handleHeaderLayout,\n style: [\n styles.floating,\n isFloatHeaderAbsolute && [\n // Without this, the header buttons won't be touchable on Android when headerTransparent: true\n { height: focusedHeaderHeight },\n styles.absolute,\n ],\n ],\n })}\n </React.Fragment>\n );\n\n return (\n <Background>\n {isFloatHeaderAbsolute ? null : floatingHeader}\n <MaybeScreenContainer\n enabled={detachInactiveScreens}\n style={styles.container}\n onLayout={this.handleLayout}\n >\n {routes.map((route, index, self) => {\n const focused = focusedRoute.key === route.key;\n const gesture = gestures[route.key];\n const scene = scenes[index];\n\n // For the screens that shouldn't be active, the value is 0\n // For those that should be active, but are not the top screen, the value is 1\n // For those on top of the stack and with interaction enabled, the value is 2\n // For the old implementation, it stays the same it was\n let isScreenActive: Animated.AnimatedInterpolation | 2 | 1 | 0 = 1;\n\n if (index < self.length - activeScreensLimit - 1) {\n // screen should be inactive because it is too deep in the stack\n isScreenActive = STATE_INACTIVE;\n } else {\n const sceneForActivity = scenes[self.length - 1];\n const outputValue =\n index === self.length - 1\n ? STATE_ON_TOP // the screen is on top after the transition\n : index >= self.length - activeScreensLimit\n ? STATE_TRANSITIONING_OR_BELOW_TOP // the screen should stay active after the transition, it is not on top but is in activeLimit\n : STATE_INACTIVE; // the screen should be active only during the transition, it is at the edge of activeLimit\n isScreenActive = sceneForActivity\n ? sceneForActivity.progress.current.interpolate({\n inputRange: [0, 1 - EPSILON, 1],\n outputRange: [1, 1, outputValue],\n extrapolate: 'clamp',\n })\n : STATE_TRANSITIONING_OR_BELOW_TOP;\n }\n\n const {\n headerShown = true,\n headerTransparent,\n headerStyle,\n headerTintColor,\n } = scene.descriptor.options;\n\n const safeAreaInsetTop = insets.top;\n const safeAreaInsetRight = insets.right;\n const safeAreaInsetBottom = insets.bottom;\n const safeAreaInsetLeft = insets.left;\n\n const headerHeight =\n headerShown !== false ? headerHeights[route.key] : 0;\n\n let headerDarkContent: boolean | undefined;\n\n if (headerShown) {\n if (typeof headerTintColor === 'string') {\n headerDarkContent = Color(headerTintColor).isDark();\n } else {\n const flattenedHeaderStyle = StyleSheet.flatten(headerStyle);\n\n if (\n flattenedHeaderStyle &&\n 'backgroundColor' in flattenedHeaderStyle &&\n typeof flattenedHeaderStyle.backgroundColor === 'string'\n ) {\n headerDarkContent = !Color(\n flattenedHeaderStyle.backgroundColor\n ).isDark();\n }\n }\n }\n\n // Start from current card and count backwards the number of cards with same interpolation\n const interpolationIndex = getInterpolationIndex(scenes, index);\n const isModal = getIsModal(\n scene,\n interpolationIndex,\n isParentModal\n );\n\n const isNextScreenTransparent =\n scenes[index + 1]?.descriptor.options.presentation ===\n 'transparentModal';\n\n const detachCurrentScreen =\n scenes[index + 1]?.descriptor.options.detachPreviousScreen !==\n false;\n\n return (\n <MaybeScreen\n key={route.key}\n style={StyleSheet.absoluteFill}\n enabled={detachInactiveScreens}\n active={isScreenActive}\n pointerEvents=\"box-none\"\n >\n <CardContainer\n index={index}\n interpolationIndex={interpolationIndex}\n modal={isModal}\n active={index === self.length - 1}\n focused={focused}\n closing={closingRouteKeys.includes(route.key)}\n layout={layout}\n gesture={gesture}\n scene={scene}\n safeAreaInsetTop={safeAreaInsetTop}\n safeAreaInsetRight={safeAreaInsetRight}\n safeAreaInsetBottom={safeAreaInsetBottom}\n safeAreaInsetLeft={safeAreaInsetLeft}\n onGestureStart={onGestureStart}\n onGestureCancel={onGestureCancel}\n onGestureEnd={onGestureEnd}\n headerHeight={headerHeight}\n isParentHeaderShown={isParentHeaderShown}\n onHeaderHeightChange={this.handleHeaderLayout}\n getPreviousScene={this.getPreviousScene}\n getFocusedRoute={this.getFocusedRoute}\n headerDarkContent={headerDarkContent}\n hasAbsoluteFloatHeader={\n isFloatHeaderAbsolute && !headerTransparent\n }\n renderHeader={renderHeader}\n renderScene={renderScene}\n onOpenRoute={onOpenRoute}\n onCloseRoute={onCloseRoute}\n onTransitionStart={onTransitionStart}\n onTransitionEnd={onTransitionEnd}\n isNextScreenTransparent={isNextScreenTransparent}\n detachCurrentScreen={detachCurrentScreen}\n />\n </MaybeScreen>\n );\n })}\n </MaybeScreenContainer>\n {isFloatHeaderAbsolute ? floatingHeader : null}\n </Background>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n absolute: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n },\n floating: {\n zIndex: 1,\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["CardStack.tsx"],"names":["Background","getDefaultHeaderHeight","SafeAreaProviderCompat","Color","React","Animated","Platform","StyleSheet","forModalPresentationIOS","forNoAnimation","forNoAnimationCard","DefaultTransition","ModalFadeTransition","ModalTransition","getDistanceForDirection","MaybeScreen","MaybeScreenContainer","getIsModalPresentation","CardContainer","EPSILON","STATE_INACTIVE","STATE_TRANSITIONING_OR_BELOW_TOP","STATE_ON_TOP","FALLBACK_DESCRIPTOR","Object","freeze","options","getInterpolationIndex","scenes","index","cardStyleInterpolator","descriptor","interpolationIndex","i","cardStyleInterpolatorCurrent","getIsModal","scene","isParentModal","isModalPresentation","isModal","getHeaderHeights","insets","isParentHeaderShown","layout","previous","reduce","acc","curr","headerStatusBarHeight","top","headerStyle","style","flatten","height","route","key","getDistanceFromOptions","presentation","gestureDirection","getProgressFromGesture","gesture","distance","width","Math","max","interpolate","inputRange","outputRange","CardStack","Component","getDerivedStateFromProps","props","state","routes","descriptors","gestures","animationEnabled","Value","openingRouteKeys","includes","map","self","previousRoute","nextRoute","oldScene","currentGesture","previousGesture","undefined","nextGesture","nextDescriptor","previousDescriptor","optionsForTransitionConfig","length","defaultTransitionPreset","OS","gestureEnabled","transitionSpec","headerStyleInterpolator","cardOverlayEnabled","headerMode","header","progress","current","next","__memo","every","it","headerHeights","constructor","e","nativeEvent","setState","previousHeight","getPreviousRoute","previousScene","find","initialMetrics","frame","render","closingRouteKeys","onOpenRoute","onCloseRoute","renderHeader","renderScene","onTransitionStart","onTransitionEnd","onGestureStart","onGestureEnd","onGestureCancel","detachInactiveScreens","focusedRoute","focusedHeaderHeight","isFloatHeaderAbsolute","slice","some","headerTransparent","headerShown","activeScreensLimit","detachPreviousScreen","lastIndexOf","floatingHeader","mode","getPreviousScene","getFocusedRoute","onContentHeightChange","handleHeaderLayout","styles","floating","absolute","container","handleLayout","focused","isScreenActive","sceneForActivity","outputValue","extrapolate","headerTintColor","freezeOnBlur","safeAreaInsetTop","safeAreaInsetRight","right","safeAreaInsetBottom","bottom","safeAreaInsetLeft","left","headerHeight","headerDarkContent","isDark","flattenedHeaderStyle","backgroundColor","isNextScreenTransparent","detachCurrentScreen","absoluteFill","create","flex","position","zIndex"],"mappings":"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","sourcesContent":["import {\n Background,\n getDefaultHeaderHeight,\n SafeAreaProviderCompat,\n} from '@react-navigation/elements';\nimport type {\n ParamListBase,\n Route,\n StackNavigationState,\n} from '@react-navigation/native';\nimport Color from 'color';\nimport * as React from 'react';\nimport {\n Animated,\n LayoutChangeEvent,\n Platform,\n StyleSheet,\n} from 'react-native';\nimport type { EdgeInsets } from 'react-native-safe-area-context';\n\nimport {\n forModalPresentationIOS,\n forNoAnimation as forNoAnimationCard,\n} from '../../TransitionConfigs/CardStyleInterpolators';\nimport {\n DefaultTransition,\n ModalFadeTransition,\n ModalTransition,\n} from '../../TransitionConfigs/TransitionPresets';\nimport type {\n Layout,\n Scene,\n StackDescriptor,\n StackDescriptorMap,\n StackHeaderMode,\n StackNavigationOptions,\n} from '../../types';\nimport getDistanceForDirection from '../../utils/getDistanceForDirection';\nimport type { Props as HeaderContainerProps } from '../Header/HeaderContainer';\nimport { MaybeScreen, MaybeScreenContainer } from '../Screens';\nimport { getIsModalPresentation } from './Card';\nimport CardContainer from './CardContainer';\n\ntype GestureValues = {\n [key: string]: Animated.Value;\n};\n\ntype Props = {\n insets: EdgeInsets;\n state: StackNavigationState<ParamListBase>;\n descriptors: StackDescriptorMap;\n routes: Route<string>[];\n openingRouteKeys: string[];\n closingRouteKeys: string[];\n onOpenRoute: (props: { route: Route<string> }) => void;\n onCloseRoute: (props: { route: Route<string> }) => void;\n getPreviousRoute: (props: {\n route: Route<string>;\n }) => Route<string> | undefined;\n renderHeader: (props: HeaderContainerProps) => React.ReactNode;\n renderScene: (props: { route: Route<string> }) => React.ReactNode;\n isParentHeaderShown: boolean;\n isParentModal: boolean;\n onTransitionStart: (\n props: { route: Route<string> },\n closing: boolean\n ) => void;\n onTransitionEnd: (props: { route: Route<string> }, closing: boolean) => void;\n onGestureStart: (props: { route: Route<string> }) => void;\n onGestureEnd: (props: { route: Route<string> }) => void;\n onGestureCancel: (props: { route: Route<string> }) => void;\n detachInactiveScreens?: boolean;\n};\n\ntype State = {\n routes: Route<string>[];\n descriptors: StackDescriptorMap;\n scenes: Scene[];\n gestures: GestureValues;\n layout: Layout;\n headerHeights: Record<string, number>;\n};\n\nconst EPSILON = 1e-5;\n\nconst STATE_INACTIVE = 0;\nconst STATE_TRANSITIONING_OR_BELOW_TOP = 1;\nconst STATE_ON_TOP = 2;\n\nconst FALLBACK_DESCRIPTOR = Object.freeze({ options: {} });\n\nconst getInterpolationIndex = (scenes: Scene[], index: number) => {\n const { cardStyleInterpolator } = scenes[index].descriptor.options;\n\n // Start from current card and count backwards the number of cards with same interpolation\n let interpolationIndex = 0;\n\n for (let i = index - 1; i >= 0; i--) {\n const cardStyleInterpolatorCurrent =\n scenes[i]?.descriptor.options.cardStyleInterpolator;\n\n if (cardStyleInterpolatorCurrent !== cardStyleInterpolator) {\n break;\n }\n\n interpolationIndex++;\n }\n\n return interpolationIndex;\n};\n\nconst getIsModal = (\n scene: Scene,\n interpolationIndex: number,\n isParentModal: boolean\n) => {\n if (isParentModal) {\n return true;\n }\n\n const { cardStyleInterpolator } = scene.descriptor.options;\n const isModalPresentation = getIsModalPresentation(cardStyleInterpolator);\n const isModal = isModalPresentation && interpolationIndex !== 0;\n\n return isModal;\n};\n\nconst getHeaderHeights = (\n scenes: Scene[],\n insets: EdgeInsets,\n isParentHeaderShown: boolean,\n isParentModal: boolean,\n layout: Layout,\n previous: Record<string, number>\n) => {\n return scenes.reduce<Record<string, number>>((acc, curr, index) => {\n const {\n headerStatusBarHeight = isParentHeaderShown ? 0 : insets.top,\n headerStyle,\n } = curr.descriptor.options;\n\n const style = StyleSheet.flatten(headerStyle || {});\n\n const height =\n 'height' in style && typeof style.height === 'number'\n ? style.height\n : previous[curr.route.key];\n\n const interpolationIndex = getInterpolationIndex(scenes, index);\n const isModal = getIsModal(curr, interpolationIndex, isParentModal);\n\n acc[curr.route.key] =\n typeof height === 'number'\n ? height\n : getDefaultHeaderHeight(layout, isModal, headerStatusBarHeight);\n\n return acc;\n }, {});\n};\n\nconst getDistanceFromOptions = (\n layout: Layout,\n descriptor?: StackDescriptor\n) => {\n const {\n presentation,\n gestureDirection = presentation === 'modal'\n ? ModalTransition.gestureDirection\n : DefaultTransition.gestureDirection,\n } = (descriptor?.options || {}) as StackNavigationOptions;\n\n return getDistanceForDirection(layout, gestureDirection);\n};\n\nconst getProgressFromGesture = (\n gesture: Animated.Value,\n layout: Layout,\n descriptor?: StackDescriptor\n) => {\n const distance = getDistanceFromOptions(\n {\n // Make sure that we have a non-zero distance, otherwise there will be incorrect progress\n // This causes blank screen on web if it was previously inside container with display: none\n width: Math.max(1, layout.width),\n height: Math.max(1, layout.height),\n },\n descriptor\n );\n\n if (distance > 0) {\n return gesture.interpolate({\n inputRange: [0, distance],\n outputRange: [1, 0],\n });\n }\n\n return gesture.interpolate({\n inputRange: [distance, 0],\n outputRange: [0, 1],\n });\n};\n\nexport default class CardStack extends React.Component<Props, State> {\n static getDerivedStateFromProps(\n props: Props,\n state: State\n ): Partial<State> | null {\n if (\n props.routes === state.routes &&\n props.descriptors === state.descriptors\n ) {\n return null;\n }\n\n const gestures = props.routes.reduce<GestureValues>((acc, curr) => {\n const descriptor = props.descriptors[curr.key];\n const { animationEnabled } = descriptor?.options || {};\n\n acc[curr.key] =\n state.gestures[curr.key] ||\n new Animated.Value(\n props.openingRouteKeys.includes(curr.key) &&\n animationEnabled !== false\n ? getDistanceFromOptions(state.layout, descriptor)\n : 0\n );\n\n return acc;\n }, {});\n\n const scenes = props.routes.map((route, index, self) => {\n const previousRoute = self[index - 1];\n const nextRoute = self[index + 1];\n\n const oldScene = state.scenes[index];\n\n const currentGesture = gestures[route.key];\n const previousGesture = previousRoute\n ? gestures[previousRoute.key]\n : undefined;\n const nextGesture = nextRoute ? gestures[nextRoute.key] : undefined;\n\n const descriptor =\n props.descriptors[route.key] ||\n state.descriptors[route.key] ||\n (oldScene ? oldScene.descriptor : FALLBACK_DESCRIPTOR);\n\n const nextDescriptor =\n props.descriptors[nextRoute?.key] || state.descriptors[nextRoute?.key];\n\n const previousDescriptor =\n props.descriptors[previousRoute?.key] ||\n state.descriptors[previousRoute?.key];\n\n // When a screen is not the last, it should use next screen's transition config\n // Many transitions also animate the previous screen, so using 2 different transitions doesn't look right\n // For example combining a slide and a modal transition would look wrong otherwise\n // With this approach, combining different transition styles in the same navigator mostly looks right\n // This will still be broken when 2 transitions have different idle state (e.g. modal presentation),\n // but majority of the transitions look alright\n const optionsForTransitionConfig =\n index !== self.length - 1 &&\n nextDescriptor &&\n nextDescriptor.options.presentation !== 'transparentModal'\n ? nextDescriptor.options\n : descriptor.options;\n\n let defaultTransitionPreset =\n optionsForTransitionConfig.presentation === 'modal'\n ? ModalTransition\n : optionsForTransitionConfig.presentation === 'transparentModal'\n ? ModalFadeTransition\n : DefaultTransition;\n\n const {\n animationEnabled = Platform.OS !== 'web' &&\n Platform.OS !== 'windows' &&\n Platform.OS !== 'macos',\n gestureEnabled = Platform.OS === 'ios' && animationEnabled,\n gestureDirection = defaultTransitionPreset.gestureDirection,\n transitionSpec = defaultTransitionPreset.transitionSpec,\n cardStyleInterpolator = animationEnabled === false\n ? forNoAnimationCard\n : defaultTransitionPreset.cardStyleInterpolator,\n headerStyleInterpolator = defaultTransitionPreset.headerStyleInterpolator,\n cardOverlayEnabled = (Platform.OS !== 'ios' &&\n optionsForTransitionConfig.presentation !== 'transparentModal') ||\n getIsModalPresentation(cardStyleInterpolator),\n } = optionsForTransitionConfig;\n\n const headerMode: StackHeaderMode =\n descriptor.options.headerMode ??\n (!(\n optionsForTransitionConfig.presentation === 'modal' ||\n optionsForTransitionConfig.presentation === 'transparentModal' ||\n nextDescriptor?.options.presentation === 'modal' ||\n nextDescriptor?.options.presentation === 'transparentModal' ||\n getIsModalPresentation(cardStyleInterpolator)\n ) &&\n Platform.OS === 'ios' &&\n descriptor.options.header === undefined\n ? 'float'\n : 'screen');\n\n const scene = {\n route,\n descriptor: {\n ...descriptor,\n options: {\n ...descriptor.options,\n animationEnabled,\n cardOverlayEnabled,\n cardStyleInterpolator,\n gestureDirection,\n gestureEnabled,\n headerStyleInterpolator,\n transitionSpec,\n headerMode,\n },\n },\n progress: {\n current: getProgressFromGesture(\n currentGesture,\n state.layout,\n descriptor\n ),\n next:\n nextGesture &&\n nextDescriptor?.options.presentation !== 'transparentModal'\n ? getProgressFromGesture(\n nextGesture,\n state.layout,\n nextDescriptor\n )\n : undefined,\n previous: previousGesture\n ? getProgressFromGesture(\n previousGesture,\n state.layout,\n previousDescriptor\n )\n : undefined,\n },\n __memo: [\n state.layout,\n descriptor,\n nextDescriptor,\n previousDescriptor,\n currentGesture,\n nextGesture,\n previousGesture,\n ],\n };\n\n if (\n oldScene &&\n scene.__memo.every((it, i) => {\n // @ts-expect-error: we haven't added __memo to the annotation to prevent usage elsewhere\n return oldScene.__memo[i] === it;\n })\n ) {\n return oldScene;\n }\n\n return scene;\n });\n\n return {\n routes: props.routes,\n scenes,\n gestures,\n descriptors: props.descriptors,\n headerHeights: getHeaderHeights(\n scenes,\n props.insets,\n props.isParentHeaderShown,\n props.isParentModal,\n state.layout,\n state.headerHeights\n ),\n };\n }\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n routes: [],\n scenes: [],\n gestures: {},\n layout: SafeAreaProviderCompat.initialMetrics.frame,\n descriptors: this.props.descriptors,\n // Used when card's header is null and mode is float to make transition\n // between screens with headers and those without headers smooth.\n // This is not a great heuristic here. We don't know synchronously\n // on mount what the header height is so we have just used the most\n // common cases here.\n headerHeights: {},\n };\n }\n\n private handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n const layout = { width, height };\n\n this.setState((state, props) => {\n if (height === state.layout.height && width === state.layout.width) {\n return null;\n }\n\n return {\n layout,\n headerHeights: getHeaderHeights(\n state.scenes,\n props.insets,\n props.isParentHeaderShown,\n props.isParentModal,\n layout,\n state.headerHeights\n ),\n };\n });\n };\n\n private handleHeaderLayout = ({\n route,\n height,\n }: {\n route: Route<string>;\n height: number;\n }) => {\n this.setState(({ headerHeights }) => {\n const previousHeight = headerHeights[route.key];\n\n if (previousHeight === height) {\n return null;\n }\n\n return {\n headerHeights: {\n ...headerHeights,\n [route.key]: height,\n },\n };\n });\n };\n\n private getFocusedRoute = () => {\n const { state } = this.props;\n\n return state.routes[state.index];\n };\n\n private getPreviousScene = ({ route }: { route: Route<string> }) => {\n const { getPreviousRoute } = this.props;\n const { scenes } = this.state;\n\n const previousRoute = getPreviousRoute({ route });\n\n if (previousRoute) {\n const previousScene = scenes.find(\n (scene) => scene.descriptor.route.key === previousRoute.key\n );\n\n return previousScene;\n }\n\n return undefined;\n };\n\n render() {\n const {\n insets,\n state,\n routes,\n closingRouteKeys,\n onOpenRoute,\n onCloseRoute,\n renderHeader,\n renderScene,\n isParentHeaderShown,\n isParentModal,\n onTransitionStart,\n onTransitionEnd,\n onGestureStart,\n onGestureEnd,\n onGestureCancel,\n detachInactiveScreens = Platform.OS === 'web' ||\n Platform.OS === 'android' ||\n Platform.OS === 'ios',\n } = this.props;\n\n const { scenes, layout, gestures, headerHeights } = this.state;\n\n const focusedRoute = state.routes[state.index];\n const focusedHeaderHeight = headerHeights[focusedRoute.key];\n\n const isFloatHeaderAbsolute = this.state.scenes.slice(-2).some((scene) => {\n const options = scene.descriptor.options ?? {};\n const { headerMode, headerTransparent, headerShown = true } = options;\n\n if (\n headerTransparent ||\n headerShown === false ||\n headerMode === 'screen'\n ) {\n return true;\n }\n\n return false;\n });\n\n let activeScreensLimit = 1;\n\n for (let i = scenes.length - 1; i >= 0; i--) {\n const { options } = scenes[i].descriptor;\n const {\n // By default, we don't want to detach the previous screen of the active one for modals\n detachPreviousScreen = options.presentation === 'transparentModal'\n ? false\n : getIsModalPresentation(options.cardStyleInterpolator)\n ? i !==\n scenes\n .map((scene) => scene.descriptor.options.cardStyleInterpolator)\n .lastIndexOf(forModalPresentationIOS)\n : true,\n } = options;\n\n if (detachPreviousScreen === false) {\n activeScreensLimit++;\n } else {\n // Check at least last 2 screens before stopping\n // This will make sure that screen isn't detached when another screen is animating on top of the transparent one\n // For example, (Opaque -> Transparent -> Opaque)\n if (i <= scenes.length - 2) {\n break;\n }\n }\n }\n\n const floatingHeader = (\n <React.Fragment key=\"header\">\n {renderHeader({\n mode: 'float',\n layout,\n scenes,\n getPreviousScene: this.getPreviousScene,\n getFocusedRoute: this.getFocusedRoute,\n onContentHeightChange: this.handleHeaderLayout,\n style: [\n styles.floating,\n isFloatHeaderAbsolute && [\n // Without this, the header buttons won't be touchable on Android when headerTransparent: true\n { height: focusedHeaderHeight },\n styles.absolute,\n ],\n ],\n })}\n </React.Fragment>\n );\n\n return (\n <Background>\n {isFloatHeaderAbsolute ? null : floatingHeader}\n <MaybeScreenContainer\n enabled={detachInactiveScreens}\n style={styles.container}\n onLayout={this.handleLayout}\n >\n {routes.map((route, index, self) => {\n const focused = focusedRoute.key === route.key;\n const gesture = gestures[route.key];\n const scene = scenes[index];\n\n // For the screens that shouldn't be active, the value is 0\n // For those that should be active, but are not the top screen, the value is 1\n // For those on top of the stack and with interaction enabled, the value is 2\n // For the old implementation, it stays the same it was\n let isScreenActive: Animated.AnimatedInterpolation | 2 | 1 | 0 = 1;\n\n if (index < self.length - activeScreensLimit - 1) {\n // screen should be inactive because it is too deep in the stack\n isScreenActive = STATE_INACTIVE;\n } else {\n const sceneForActivity = scenes[self.length - 1];\n const outputValue =\n index === self.length - 1\n ? STATE_ON_TOP // the screen is on top after the transition\n : index >= self.length - activeScreensLimit\n ? STATE_TRANSITIONING_OR_BELOW_TOP // the screen should stay active after the transition, it is not on top but is in activeLimit\n : STATE_INACTIVE; // the screen should be active only during the transition, it is at the edge of activeLimit\n isScreenActive = sceneForActivity\n ? sceneForActivity.progress.current.interpolate({\n inputRange: [0, 1 - EPSILON, 1],\n outputRange: [1, 1, outputValue],\n extrapolate: 'clamp',\n })\n : STATE_TRANSITIONING_OR_BELOW_TOP;\n }\n\n const {\n headerShown = true,\n headerTransparent,\n headerStyle,\n headerTintColor,\n freezeOnBlur,\n } = scene.descriptor.options;\n\n const safeAreaInsetTop = insets.top;\n const safeAreaInsetRight = insets.right;\n const safeAreaInsetBottom = insets.bottom;\n const safeAreaInsetLeft = insets.left;\n\n const headerHeight =\n headerShown !== false ? headerHeights[route.key] : 0;\n\n let headerDarkContent: boolean | undefined;\n\n if (headerShown) {\n if (typeof headerTintColor === 'string') {\n headerDarkContent = Color(headerTintColor).isDark();\n } else {\n const flattenedHeaderStyle = StyleSheet.flatten(headerStyle);\n\n if (\n flattenedHeaderStyle &&\n 'backgroundColor' in flattenedHeaderStyle &&\n typeof flattenedHeaderStyle.backgroundColor === 'string'\n ) {\n headerDarkContent = !Color(\n flattenedHeaderStyle.backgroundColor\n ).isDark();\n }\n }\n }\n\n // Start from current card and count backwards the number of cards with same interpolation\n const interpolationIndex = getInterpolationIndex(scenes, index);\n const isModal = getIsModal(\n scene,\n interpolationIndex,\n isParentModal\n );\n\n const isNextScreenTransparent =\n scenes[index + 1]?.descriptor.options.presentation ===\n 'transparentModal';\n\n const detachCurrentScreen =\n scenes[index + 1]?.descriptor.options.detachPreviousScreen !==\n false;\n\n return (\n <MaybeScreen\n key={route.key}\n style={StyleSheet.absoluteFill}\n enabled={detachInactiveScreens}\n active={isScreenActive}\n freezeOnBlur={freezeOnBlur}\n pointerEvents=\"box-none\"\n >\n <CardContainer\n index={index}\n interpolationIndex={interpolationIndex}\n modal={isModal}\n active={index === self.length - 1}\n focused={focused}\n closing={closingRouteKeys.includes(route.key)}\n layout={layout}\n gesture={gesture}\n scene={scene}\n safeAreaInsetTop={safeAreaInsetTop}\n safeAreaInsetRight={safeAreaInsetRight}\n safeAreaInsetBottom={safeAreaInsetBottom}\n safeAreaInsetLeft={safeAreaInsetLeft}\n onGestureStart={onGestureStart}\n onGestureCancel={onGestureCancel}\n onGestureEnd={onGestureEnd}\n headerHeight={headerHeight}\n isParentHeaderShown={isParentHeaderShown}\n onHeaderHeightChange={this.handleHeaderLayout}\n getPreviousScene={this.getPreviousScene}\n getFocusedRoute={this.getFocusedRoute}\n headerDarkContent={headerDarkContent}\n hasAbsoluteFloatHeader={\n isFloatHeaderAbsolute && !headerTransparent\n }\n renderHeader={renderHeader}\n renderScene={renderScene}\n onOpenRoute={onOpenRoute}\n onCloseRoute={onCloseRoute}\n onTransitionStart={onTransitionStart}\n onTransitionEnd={onTransitionEnd}\n isNextScreenTransparent={isNextScreenTransparent}\n detachCurrentScreen={detachCurrentScreen}\n />\n </MaybeScreen>\n );\n })}\n </MaybeScreenContainer>\n {isFloatHeaderAbsolute ? floatingHeader : null}\n </Background>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n absolute: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n },\n floating: {\n zIndex: 1,\n },\n});\n"]}
|
|
@@ -286,6 +286,14 @@ export declare type StackNavigationOptions = StackHeaderOptions & Partial<Transi
|
|
|
286
286
|
* Defaults to `true`.
|
|
287
287
|
*/
|
|
288
288
|
keyboardHandlingEnabled?: boolean;
|
|
289
|
+
/**
|
|
290
|
+
* Whether inactive screens should be suspended from re-rendering. Defaults to `false`.
|
|
291
|
+
* Defaults to `true` when `enableFreeze()` is run at the top of the application.
|
|
292
|
+
* Requires `react-native-screens` version >=3.16.0.
|
|
293
|
+
*
|
|
294
|
+
* Only supported on iOS and Android.
|
|
295
|
+
*/
|
|
296
|
+
freezeOnBlur?: boolean;
|
|
289
297
|
};
|
|
290
298
|
export declare type StackNavigationConfig = {
|
|
291
299
|
/**
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { PanGestureHandlerProperties } from 'react-native-gesture-handler';
|
|
3
3
|
export declare function PanGestureHandler(props: PanGestureHandlerProperties): JSX.Element;
|
|
4
|
-
export {
|
|
4
|
+
export type { PanGestureHandlerGestureEvent } from 'react-native-gesture-handler';
|
|
5
|
+
export { GestureHandlerRootView, State as GestureState, } from 'react-native-gesture-handler';
|
|
@@ -39,7 +39,10 @@ declare type Props = ViewProps & {
|
|
|
39
39
|
containerStyle?: StyleProp<ViewStyle>;
|
|
40
40
|
contentStyle?: StyleProp<ViewStyle>;
|
|
41
41
|
};
|
|
42
|
-
|
|
42
|
+
declare type State = {
|
|
43
|
+
pointerEvents: ViewProps['pointerEvents'];
|
|
44
|
+
};
|
|
45
|
+
export default class Card extends React.Component<Props, State> {
|
|
43
46
|
static defaultProps: {
|
|
44
47
|
shadowEnabled: boolean;
|
|
45
48
|
gestureEnabled: boolean;
|
|
@@ -48,6 +51,7 @@ export default class Card extends React.Component<Props> {
|
|
|
48
51
|
style: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;
|
|
49
52
|
}) => JSX.Element | null;
|
|
50
53
|
};
|
|
54
|
+
state: State;
|
|
51
55
|
componentDidMount(): void;
|
|
52
56
|
componentDidUpdate(prevProps: Props): void;
|
|
53
57
|
componentWillUnmount(): void;
|
|
@@ -68,7 +72,6 @@ export default class Card extends React.Component<Props> {
|
|
|
68
72
|
private getInterpolatedStyle;
|
|
69
73
|
private getCardAnimation;
|
|
70
74
|
private gestureActivationCriteria;
|
|
71
|
-
private contentRef;
|
|
72
75
|
render(): JSX.Element;
|
|
73
76
|
}
|
|
74
77
|
export declare const getIsModalPresentation: (cardStyleInterpolator: StackCardStyleInterpolator) => boolean;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-navigation/stack",
|
|
3
3
|
"description": "Stack navigator component for iOS and Android with animated transitions and gestures",
|
|
4
|
-
"version": "6.
|
|
4
|
+
"version": "6.3.0",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native-component",
|
|
7
7
|
"react-component",
|
|
@@ -40,23 +40,23 @@
|
|
|
40
40
|
"clean": "del lib"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@react-navigation/elements": "^1.3.
|
|
43
|
+
"@react-navigation/elements": "^1.3.6",
|
|
44
44
|
"color": "^4.2.3",
|
|
45
45
|
"warn-once": "^0.1.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@react-navigation/native": "^6.0.
|
|
48
|
+
"@react-navigation/native": "^6.0.13",
|
|
49
49
|
"@testing-library/react-native": "^7.2.0",
|
|
50
50
|
"@types/color": "^3.0.1",
|
|
51
|
-
"@types/react": "
|
|
52
|
-
"@types/react-native": "~0.
|
|
51
|
+
"@types/react": "~18.0.0",
|
|
52
|
+
"@types/react-native": "~0.69.1",
|
|
53
53
|
"del-cli": "^3.0.1",
|
|
54
|
-
"react": "
|
|
55
|
-
"react-native": "
|
|
54
|
+
"react": "18.0.0",
|
|
55
|
+
"react-native": "0.69.5",
|
|
56
56
|
"react-native-builder-bob": "^0.18.1",
|
|
57
|
-
"react-native-gesture-handler": "~2.
|
|
58
|
-
"react-native-safe-area-context": "4.
|
|
59
|
-
"react-native-screens": "~3.
|
|
57
|
+
"react-native-gesture-handler": "~2.5.0",
|
|
58
|
+
"react-native-safe-area-context": "4.3.1",
|
|
59
|
+
"react-native-screens": "~3.15.0",
|
|
60
60
|
"typescript": "^4.7.4"
|
|
61
61
|
},
|
|
62
62
|
"peerDependencies": {
|
|
@@ -81,5 +81,5 @@
|
|
|
81
81
|
]
|
|
82
82
|
]
|
|
83
83
|
},
|
|
84
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "fc4c3a63ab156e17db7ba0cbd32ada319f78714e"
|
|
85
85
|
}
|
package/src/types.tsx
CHANGED
|
@@ -333,6 +333,14 @@ export type StackNavigationOptions = StackHeaderOptions &
|
|
|
333
333
|
* Defaults to `true`.
|
|
334
334
|
*/
|
|
335
335
|
keyboardHandlingEnabled?: boolean;
|
|
336
|
+
/**
|
|
337
|
+
* Whether inactive screens should be suspended from re-rendering. Defaults to `false`.
|
|
338
|
+
* Defaults to `true` when `enableFreeze()` is run at the top of the application.
|
|
339
|
+
* Requires `react-native-screens` version >=3.16.0.
|
|
340
|
+
*
|
|
341
|
+
* Only supported on iOS and Android.
|
|
342
|
+
*/
|
|
343
|
+
freezeOnBlur?: boolean;
|
|
336
344
|
};
|
|
337
345
|
|
|
338
346
|
export type StackNavigationConfig = {
|
|
@@ -16,8 +16,8 @@ export function PanGestureHandler(props: PanGestureHandlerProperties) {
|
|
|
16
16
|
);
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
export type { PanGestureHandlerGestureEvent } from 'react-native-gesture-handler';
|
|
19
20
|
export {
|
|
20
21
|
GestureHandlerRootView,
|
|
21
22
|
State as GestureState,
|
|
22
|
-
PanGestureHandlerGestureEvent,
|
|
23
23
|
} from 'react-native-gesture-handler';
|
package/src/views/Screens.tsx
CHANGED
package/src/views/Stack/Card.tsx
CHANGED
|
@@ -67,6 +67,10 @@ type Props = ViewProps & {
|
|
|
67
67
|
contentStyle?: StyleProp<ViewStyle>;
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
+
type State = {
|
|
71
|
+
pointerEvents: ViewProps['pointerEvents'];
|
|
72
|
+
};
|
|
73
|
+
|
|
70
74
|
const GESTURE_VELOCITY_IMPACT = 0.3;
|
|
71
75
|
|
|
72
76
|
const TRUE = 1;
|
|
@@ -89,7 +93,7 @@ const hasOpacityStyle = (style: any) => {
|
|
|
89
93
|
return false;
|
|
90
94
|
};
|
|
91
95
|
|
|
92
|
-
export default class Card extends React.Component<Props> {
|
|
96
|
+
export default class Card extends React.Component<Props, State> {
|
|
93
97
|
static defaultProps = {
|
|
94
98
|
shadowEnabled: false,
|
|
95
99
|
gestureEnabled: true,
|
|
@@ -104,6 +108,10 @@ export default class Card extends React.Component<Props> {
|
|
|
104
108
|
) : null,
|
|
105
109
|
};
|
|
106
110
|
|
|
111
|
+
state: State = {
|
|
112
|
+
pointerEvents: 'auto',
|
|
113
|
+
};
|
|
114
|
+
|
|
107
115
|
componentDidMount() {
|
|
108
116
|
this.animate({ closing: this.props.closing });
|
|
109
117
|
this.isCurrentlyMounted = true;
|
|
@@ -242,7 +250,7 @@ export default class Card extends React.Component<Props> {
|
|
|
242
250
|
private setPointerEventsEnabled = (enabled: boolean) => {
|
|
243
251
|
const pointerEvents = enabled ? 'box-none' : 'none';
|
|
244
252
|
|
|
245
|
-
this.
|
|
253
|
+
this.setState({ pointerEvents });
|
|
246
254
|
};
|
|
247
255
|
|
|
248
256
|
private handleStartInteraction = () => {
|
|
@@ -425,8 +433,6 @@ export default class Card extends React.Component<Props> {
|
|
|
425
433
|
}
|
|
426
434
|
}
|
|
427
435
|
|
|
428
|
-
private contentRef = React.createRef<View>();
|
|
429
|
-
|
|
430
436
|
render() {
|
|
431
437
|
const {
|
|
432
438
|
styleInterpolator,
|
|
@@ -555,7 +561,7 @@ export default class Card extends React.Component<Props> {
|
|
|
555
561
|
/>
|
|
556
562
|
) : null}
|
|
557
563
|
<CardSheet
|
|
558
|
-
|
|
564
|
+
pointerEvents={this.state.pointerEvents}
|
|
559
565
|
enabled={pageOverflowEnabled}
|
|
560
566
|
layout={layout}
|
|
561
567
|
style={contentStyle}
|
|
@@ -81,7 +81,7 @@ type State = {
|
|
|
81
81
|
headerHeights: Record<string, number>;
|
|
82
82
|
};
|
|
83
83
|
|
|
84
|
-
const EPSILON =
|
|
84
|
+
const EPSILON = 1e-5;
|
|
85
85
|
|
|
86
86
|
const STATE_INACTIVE = 0;
|
|
87
87
|
const STATE_TRANSITIONING_OR_BELOW_TOP = 1;
|
|
@@ -604,6 +604,7 @@ export default class CardStack extends React.Component<Props, State> {
|
|
|
604
604
|
headerTransparent,
|
|
605
605
|
headerStyle,
|
|
606
606
|
headerTintColor,
|
|
607
|
+
freezeOnBlur,
|
|
607
608
|
} = scene.descriptor.options;
|
|
608
609
|
|
|
609
610
|
const safeAreaInsetTop = insets.top;
|
|
@@ -656,6 +657,7 @@ export default class CardStack extends React.Component<Props, State> {
|
|
|
656
657
|
style={StyleSheet.absoluteFill}
|
|
657
658
|
enabled={detachInactiveScreens}
|
|
658
659
|
active={isScreenActive}
|
|
660
|
+
freezeOnBlur={freezeOnBlur}
|
|
659
661
|
pointerEvents="box-none"
|
|
660
662
|
>
|
|
661
663
|
<CardContainer
|