@react-navigation/stack 6.3.2 → 6.3.4
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/Stack/Card.js +8 -10
- package/lib/commonjs/views/Stack/Card.js.map +1 -1
- package/lib/commonjs/views/Stack/CardSheet.js +10 -2
- package/lib/commonjs/views/Stack/CardSheet.js.map +1 -1
- package/lib/module/views/Stack/Card.js +8 -10
- package/lib/module/views/Stack/Card.js.map +1 -1
- package/lib/module/views/Stack/CardSheet.js +10 -2
- package/lib/module/views/Stack/CardSheet.js.map +1 -1
- package/lib/typescript/src/views/Stack/Card.d.ts +2 -5
- package/lib/typescript/src/views/Stack/CardSheet.d.ts +5 -2
- package/package.json +2 -2
- package/src/views/Stack/Card.tsx +9 -16
- package/src/views/Stack/CardSheet.tsx +14 -2
|
@@ -62,10 +62,6 @@ class Card extends React.Component {
|
|
|
62
62
|
constructor() {
|
|
63
63
|
super(...arguments);
|
|
64
64
|
|
|
65
|
-
_defineProperty(this, "state", {
|
|
66
|
-
pointerEvents: 'auto'
|
|
67
|
-
});
|
|
68
|
-
|
|
69
65
|
_defineProperty(this, "isCurrentlyMounted", false);
|
|
70
66
|
|
|
71
67
|
_defineProperty(this, "isClosing", new _reactNative.Animated.Value(FALSE));
|
|
@@ -153,10 +149,10 @@ class Card extends React.Component {
|
|
|
153
149
|
});
|
|
154
150
|
|
|
155
151
|
_defineProperty(this, "setPointerEventsEnabled", enabled => {
|
|
152
|
+
var _this$ref$current;
|
|
153
|
+
|
|
156
154
|
const pointerEvents = enabled ? 'box-none' : 'none';
|
|
157
|
-
this.
|
|
158
|
-
pointerEvents
|
|
159
|
-
});
|
|
155
|
+
(_this$ref$current = this.ref.current) === null || _this$ref$current === void 0 ? void 0 : _this$ref$current.setPointerEvents(pointerEvents);
|
|
160
156
|
});
|
|
161
157
|
|
|
162
158
|
_defineProperty(this, "handleStartInteraction", () => {
|
|
@@ -270,6 +266,8 @@ class Card extends React.Component {
|
|
|
270
266
|
left: insetLeft
|
|
271
267
|
}
|
|
272
268
|
})));
|
|
269
|
+
|
|
270
|
+
_defineProperty(this, "ref", /*#__PURE__*/React.createRef());
|
|
273
271
|
}
|
|
274
272
|
|
|
275
273
|
componentDidMount() {
|
|
@@ -304,9 +302,9 @@ class Card extends React.Component {
|
|
|
304
302
|
|
|
305
303
|
const toValue = this.getAnimateToValue(this.props);
|
|
306
304
|
|
|
307
|
-
if (
|
|
305
|
+
if (this.getAnimateToValue(prevProps) !== toValue || this.lastToValue !== toValue) {
|
|
308
306
|
// We need to trigger the animation when route was closed
|
|
309
|
-
//
|
|
307
|
+
// Thr route might have been closed by a `POP` action or by a gesture
|
|
310
308
|
// When route was closed due to a gesture, the animation would've happened already
|
|
311
309
|
// It's still important to trigger the animation so that `onClose` is called
|
|
312
310
|
// If `onClose` is not called, cleanup step won't be performed for gestures
|
|
@@ -461,7 +459,7 @@ class Card extends React.Component {
|
|
|
461
459
|
}, shadowStyle],
|
|
462
460
|
pointerEvents: "none"
|
|
463
461
|
}) : null, /*#__PURE__*/React.createElement(_CardSheet.default, {
|
|
464
|
-
|
|
462
|
+
ref: this.ref,
|
|
465
463
|
enabled: pageOverflowEnabled,
|
|
466
464
|
layout: layout,
|
|
467
465
|
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","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":";;;;;;;AAAA;;AACA;;AACA;;AAYA;;AAQA;;AACA;;AACA;;AACA;;AACA;;AAKA;;AACA;;;;;;;;;;;;AAyCA,MAAMA,uBAAuB,GAAG,GAAhC;AAEA,MAAMC,IAAI,GAAG,CAAb;AACA,MAAMC,KAAK,GAAG,CAAd;AAEA;AACA;AACA;;AACA,MAAMC,oCAAoC,GAAG,EAA7C;AACA,MAAMC,kCAAkC,GAAG,GAA3C;AAEA,MAAMC,eAAe,GAAGC,sBAASC,EAAT,KAAgB,KAAxC;;AAEA,MAAMC,eAAe,GAAIC,KAAD,IAAgB;AACtC,MAAIA,KAAJ,EAAW;AACT,UAAMC,cAAc,GAAGC,wBAAWC,OAAX,CAAmBH,KAAnB,CAAvB;;AACA,WAAOC,cAAc,CAACG,OAAf,IAA0B,IAAjC;AACD;;AAED,SAAO,KAAP;AACD,CAPD;;AASe,MAAMC,IAAN,SAAmBC,KAAK,CAACC,SAAzB,CAAiD;AAAA;AAAA;;AAAA,mCAe/C;AACbC,MAAAA,aAAa,EAAE;AADF,KAf+C;;AAAA,gDA8DjC,KA9DiC;;AAAA,uCAgE1C,IAAIC,sBAASC,KAAb,CAAmBjB,KAAnB,CAhE0C;;AAAA,sCAkE3C,IAAIgB,sBAASC,KAAb,CACjB,oCAAsB,KAAKC,KAAL,CAAWC,gBAAjC,CADiB,CAlE2C;;AAAA,oCAsE7C;AACfC,MAAAA,KAAK,EAAE,IAAIJ,sBAASC,KAAb,CAAmB,KAAKC,KAAL,CAAWG,MAAX,CAAkBD,KAArC,CADQ;AAEfE,MAAAA,MAAM,EAAE,IAAIN,sBAASC,KAAb,CAAmB,KAAKC,KAAL,CAAWG,MAAX,CAAkBC,MAArC;AAFO,KAtE6C;;AAAA,uCA2E1C,IAAIN,sBAASC,KAAb,CAAmBjB,KAAnB,CA3E0C;;AAAA;;AAAA;;AAAA;;AAAA,qCAmF5C,QAMZ;AAAA,UANa;AACjBuB,QAAAA,OADiB;AAEjBC,QAAAA;AAFiB,OAMb;AACJ,YAAM;AAAEC,QAAAA,OAAF;AAAWC,QAAAA,cAAX;AAA2BC,QAAAA,MAA3B;AAAmCC,QAAAA,OAAnC;AAA4CC,QAAAA;AAA5C,UACJ,KAAKX,KADP;AAGA,YAAMY,OAAO,GAAG,KAAKC,iBAAL,CAAuB,EACrC,GAAG,KAAKb,KAD6B;AAErCK,QAAAA;AAFqC,OAAvB,CAAhB;AAKA,WAAKS,WAAL,GAAmBF,OAAnB;AAEA,WAAKG,SAAL,CAAeC,QAAf,CAAwBX,OAAO,GAAGxB,IAAH,GAAUC,KAAzC;AAEA,YAAMmC,IAAI,GAAGZ,OAAO,GAAGG,cAAc,CAACU,KAAlB,GAA0BV,cAAc,CAACW,IAA7D;AAEA,YAAMC,SAAS,GACbH,IAAI,CAACG,SAAL,KAAmB,QAAnB,GAA8BtB,sBAASuB,MAAvC,GAAgDvB,sBAASwB,MAD3D;AAGA,WAAKC,uBAAL,CAA6B,CAAClB,OAA9B;AACA,WAAKmB,sBAAL;AAEAC,MAAAA,YAAY,CAAC,KAAKC,sBAAN,CAAZ;AAEAf,MAAAA,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAG;AAAEN,QAAAA,OAAF;AAAWE,QAAAA,OAAO,EAAED,QAAQ,KAAKqB;AAAjC,OAAH,CAAZ;AACAP,MAAAA,SAAS,CAACb,OAAD,EAAU,EACjB,GAAGU,IAAI,CAACW,MADS;AAEjBtB,QAAAA,QAFiB;AAGjBM,QAAAA,OAHiB;AAIjB3B,QAAAA,eAJiB;AAKjB4C,QAAAA,aAAa,EAAE;AALE,OAAV,CAAT,CAMGC,KANH,CAMS,SAAkB;AAAA,YAAjB;AAAEC,UAAAA;AAAF,SAAiB;AACzB,aAAKC,oBAAL;AAEAP,QAAAA,YAAY,CAAC,KAAKC,sBAAN,CAAZ;;AAEA,YAAIK,QAAJ,EAAc;AACZ,cAAI1B,OAAJ,EAAa;AACXK,YAAAA,OAAO;AACR,WAFD,MAEO;AACLD,YAAAA,MAAM;AACP;;AAED,cAAI,KAAKwB,kBAAT,EAA6B;AAC3B;AACA,iBAAKC,WAAL;AACD;AACF;AACF,OAvBD;AAwBD,KAzI6D;;AAAA,+CA2IlC,SAQtB;AAAA,UARuB;AAC3B7B,QAAAA,OAD2B;AAE3BF,QAAAA,MAF2B;AAG3BF,QAAAA;AAH2B,OAQvB;;AACJ,UAAI,CAACI,OAAL,EAAc;AACZ,eAAO,CAAP;AACD;;AAED,aAAO,sCAAwBF,MAAxB,EAAgCF,gBAAhC,CAAP;AACD,KAzJ6D;;AAAA,qDA2J3BkC,OAAD,IAAsB;AACtD,YAAMtC,aAAa,GAAGsC,OAAO,GAAG,UAAH,GAAgB,MAA7C;AAEA,WAAKC,QAAL,CAAc;AAAEvC,QAAAA;AAAF,OAAd;AACD,KA/J6D;;AAAA,oDAiK7B,MAAM;AACrC,UAAI,KAAKwC,iBAAL,KAA2BV,SAA/B,EAA0C;AACxC,aAAKU,iBAAL,GAAyBC,gCAAmBC,uBAAnB,EAAzB;AACD;AACF,KArK6D;;AAAA,kDAuK/B,MAAM;AACnC,UAAI,KAAKF,iBAAL,KAA2BV,SAA/B,EAA0C;AACxCW,wCAAmBE,sBAAnB,CAA0C,KAAKH,iBAA/C;;AACA,aAAKA,iBAAL,GAAyBV,SAAzB;AACD;AACF,KA5K6D;;AAAA,sDA8K3B,SAEE;AAAA,UAFD;AAClCc,QAAAA;AADkC,OAEC;AACnC,YAAM;AACJtC,QAAAA,MADI;AAEJO,QAAAA,OAFI;AAGJgC,QAAAA,cAHI;AAIJC,QAAAA,iBAJI;AAKJC,QAAAA,YALI;AAMJ3C,QAAAA,gBANI;AAOJ4C,QAAAA;AAPI,UAQF,KAAK7C,KART;;AAUA,cAAQyC,WAAW,CAACK,KAApB;AACE,aAAKC,6BAAaC,MAAlB;AACE,eAAKC,SAAL,CAAejC,QAAf,CAAwBnC,IAAxB;AACA,eAAK2C,sBAAL;AACAkB,UAAAA,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc;AACd;;AACF,aAAKK,6BAAaG,SAAlB;AAA6B;AAC3B,iBAAKD,SAAL,CAAejC,QAAf,CAAwBlC,KAAxB;AACA,iBAAKkD,oBAAL;AAEA,kBAAM1B,QAAQ,GACZL,gBAAgB,KAAK,UAArB,IACAA,gBAAgB,KAAK,mBADrB,GAEIwC,WAAW,CAACU,SAFhB,GAGIV,WAAW,CAACW,SAJlB;AAMA,iBAAKC,OAAL,CAAa;AAAEhD,cAAAA,OAAO,EAAE,KAAKL,KAAL,CAAWK,OAAtB;AAA+BC,cAAAA;AAA/B,aAAb;AAEAqC,YAAAA,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,YAAAA,iBAAiB;AACjB;AACD;;AACD,aAAKI,6BAAaO,GAAlB;AAAuB;AACrB,iBAAKL,SAAL,CAAejC,QAAf,CAAwBlC,KAAxB;AAEA,gBAAIyE,QAAJ;AACA,gBAAIC,WAAJ;AACA,gBAAIlD,QAAJ;;AAEA,gBACEL,gBAAgB,KAAK,UAArB,IACAA,gBAAgB,KAAK,mBAFvB,EAGE;AACAsD,cAAAA,QAAQ,GAAGpD,MAAM,CAACC,MAAlB;AACAoD,cAAAA,WAAW,GAAGf,WAAW,CAACgB,YAA1B;AACAnD,cAAAA,QAAQ,GAAGmC,WAAW,CAACU,SAAvB;AACD,aAPD,MAOO;AACLI,cAAAA,QAAQ,GAAGpD,MAAM,CAACD,KAAlB;AACAsD,cAAAA,WAAW,GAAGf,WAAW,CAACiB,YAA1B;AACApD,cAAAA,QAAQ,GAAGmC,WAAW,CAACW,SAAvB;AACD;;AAED,kBAAM/C,OAAO,GACX,CAACmD,WAAW,GAAGlD,QAAQ,GAAGuC,qBAA1B,IACE,oCAAsB5C,gBAAtB,CADF,GAEAsD,QAAQ,GAAG,CAFX,GAGIjD,QAAQ,KAAK,CAAb,IAAkBkD,WAAW,KAAK,CAHtC,GAII,KAAKxD,KAAL,CAAWK,OALjB;AAOA,iBAAKgD,OAAL,CAAa;AAAEhD,cAAAA,OAAF;AAAWC,cAAAA;AAAX,aAAb;;AAEA,gBAAID,OAAJ,EAAa;AACX;AACA;AACA,mBAAKqB,sBAAL,GAA8BiC,UAAU,CAAC,MAAM;AAC7CjD,gBAAAA,OAAO,GADsC,CAG7C;AACA;;AACA,qBAAKwB,WAAL;AACD,eANuC,EAMrC,EANqC,CAAxC;AAOD;;AAEDU,YAAAA,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY;AACZ;AACD;AAhEH;AAkED,KA7P6D;;AAAA,kDAgQ/B,sBAC7B,CACEgB,iBADF,EAEExC,SAFF,KAGKwC,iBAAiB,CAACxC,SAAD,CAJO,CAhQ+B;;AAAA,8CAwQnC,sBACzB,CACEyC,kBADF,EAEEC,OAFF,EAGEC,IAHF,EAIE5D,MAJF,EAKE6D,QALF,EAMEC,UANF,EAOEC,WAPF,EAQEC,SARF,MASM;AACJC,MAAAA,KAAK,EAAEP,kBADH;AAEJC,MAAAA,OAAO,EAAE;AAAEO,QAAAA,QAAQ,EAAEP;AAAZ,OAFL;AAGJC,MAAAA,IAAI,EAAEA,IAAI,IAAI;AAAEM,QAAAA,QAAQ,EAAEN;AAAZ,OAHV;AAIJ1D,MAAAA,OAAO,EAAE,KAAKU,SAJV;AAKJuD,MAAAA,OAAO,EAAE,KAAKrB,SALV;AAMJsB,MAAAA,QAAQ,EAAE,KAAKA,QANX;AAOJC,MAAAA,OAAO,EAAE;AACPC,QAAAA,MAAM,EAAEtE;AADD,OAPL;AAUJuE,MAAAA,MAAM,EAAE;AACNC,QAAAA,GAAG,EAAEX,QADC;AAENY,QAAAA,KAAK,EAAEX,UAFD;AAGNY,QAAAA,MAAM,EAAEX,WAHF;AAINY,QAAAA,IAAI,EAAEX;AAJA;AAVJ,KATN,CADyB,CAxQmC;AAAA;;AAmB9DY,EAAAA,iBAAiB,GAAG;AAClB,SAAK1B,OAAL,CAAa;AAAEhD,MAAAA,OAAO,EAAE,KAAKL,KAAL,CAAWK;AAAtB,KAAb;AACA,SAAK4B,kBAAL,GAA0B,IAA1B;AACD;;AAED+C,EAAAA,kBAAkB,CAACC,SAAD,EAAmB;AACnC,UAAM;AAAE9E,MAAAA,MAAF;AAAUF,MAAAA,gBAAV;AAA4BI,MAAAA;AAA5B,QAAwC,KAAKL,KAAnD;AACA,UAAM;AAAEE,MAAAA,KAAF;AAASE,MAAAA;AAAT,QAAoBD,MAA1B;;AAEA,QAAID,KAAK,KAAK+E,SAAS,CAAC9E,MAAV,CAAiBD,KAA/B,EAAsC;AACpC,WAAKC,MAAL,CAAYD,KAAZ,CAAkBc,QAAlB,CAA2Bd,KAA3B;AACD;;AAED,QAAIE,MAAM,KAAK6E,SAAS,CAAC9E,MAAV,CAAiBC,MAAhC,EAAwC;AACtC,WAAKD,MAAL,CAAYC,MAAZ,CAAmBY,QAAnB,CAA4BZ,MAA5B;AACD;;AAED,QAAIH,gBAAgB,KAAKgF,SAAS,CAAChF,gBAAnC,EAAqD;AACnD,WAAKsE,QAAL,CAAcvD,QAAd,CAAuB,oCAAsBf,gBAAtB,CAAvB;AACD;;AAED,UAAMW,OAAO,GAAG,KAAKC,iBAAL,CAAuB,KAAKb,KAA5B,CAAhB;;AAEA,QACEK,OAAO,KAAK4E,SAAS,CAAC5E,OAAtB,KACC,KAAKQ,iBAAL,CAAuBoE,SAAvB,MAAsCrE,OAAtC,IACC,KAAKE,WAAL,KAAqBF,OAFvB,CADF,EAIE;AACA;AACA;AACA;AACA;AACA;AACA,WAAKyC,OAAL,CAAa;AAAEhD,QAAAA;AAAF,OAAb;AACD;AACF;;AAED6E,EAAAA,oBAAoB,GAAG;AACrB,SAAKlF,KAAL,CAAWO,OAAX,CAAmB4E,aAAnB;AACA,SAAKlD,kBAAL,GAA0B,KAA1B;AACA,SAAKD,oBAAL;AACD;;AAyOOoD,EAAAA,yBAAyB,GAAG;AAClC,UAAM;AAAEjF,MAAAA,MAAF;AAAUF,MAAAA,gBAAV;AAA4BoF,MAAAA;AAA5B,QAAwD,KAAKrF,KAAnE;AACA,UAAMsF,8BAA8B,GAAG,IAAvC;AAEA,UAAM/B,QAAQ,GACZ8B,uBAAuB,KAAK1D,SAA5B,GACI0D,uBADJ,GAEIpF,gBAAgB,KAAK,UAArB,IACAA,gBAAgB,KAAK,mBADrB,GAEAjB,kCAFA,GAGAD,oCANN;;AAQA,QAAIkB,gBAAgB,KAAK,UAAzB,EAAqC;AACnC,aAAO;AACLsF,QAAAA,SAAS,EAAE,EADN;AAELC,QAAAA,UAAU,EAAE,CAFP;AAGLC,QAAAA,OAAO,EAAE;AAAEZ,UAAAA,MAAM,EAAE,CAAC1E,MAAM,CAACC,MAAR,GAAiBmD;AAA3B,SAHJ;AAIL+B,QAAAA;AAJK,OAAP;AAMD,KAPD,MAOO,IAAIrF,gBAAgB,KAAK,mBAAzB,EAA8C;AACnD,aAAO;AACLsF,QAAAA,SAAS,EAAE,EADN;AAELC,QAAAA,UAAU,EAAE,CAAC,CAFR;AAGLC,QAAAA,OAAO,EAAE;AAAEd,UAAAA,GAAG,EAAE,CAACxE,MAAM,CAACC,MAAR,GAAiBmD;AAAxB,SAHJ;AAIL+B,QAAAA;AAJK,OAAP;AAMD,KAPM,MAOA;AACL,YAAMG,OAAO,GAAG,CAACtF,MAAM,CAACD,KAAR,GAAgBqD,QAAhC;AACA,YAAMmC,kBAAkB,GAAG,oCAAsBzF,gBAAtB,CAA3B;;AAEA,UAAIyF,kBAAkB,KAAK,CAA3B,EAA8B;AAC5B,eAAO;AACLC,UAAAA,UAAU,EAAE,CADP;AAELC,UAAAA,SAAS,EAAE,EAFN;AAGLH,UAAAA,OAAO,EAAE;AAAEb,YAAAA,KAAK,EAAEa;AAAT,WAHJ;AAILH,UAAAA;AAJK,SAAP;AAMD,OAPD,MAOO;AACL,eAAO;AACLK,UAAAA,UAAU,EAAE,CAAC,CADR;AAELC,UAAAA,SAAS,EAAE,EAFN;AAGLH,UAAAA,OAAO,EAAE;AAAEX,YAAAA,IAAI,EAAEW;AAAR,WAHJ;AAILH,UAAAA;AAJK,SAAP;AAMD;AACF;AACF;;AAEDO,EAAAA,MAAM,GAAG;AACP,UAAM;AACJjC,MAAAA,iBADI;AAEJC,MAAAA,kBAFI;AAGJC,MAAAA,OAHI;AAIJvD,MAAAA,OAJI;AAKJwD,MAAAA,IALI;AAMJ5D,MAAAA,MANI;AAOJuE,MAAAA,MAPI;AAQJoB,MAAAA,OARI;AASJC,MAAAA,cATI;AAUJC,MAAAA,aAVI;AAWJC,MAAAA,cAXI;AAYJhG,MAAAA,gBAZI;AAaJiG,MAAAA,mBAbI;AAcJC,MAAAA,iBAdI;AAeJC,MAAAA,QAfI;AAgBJC,MAAAA,cAAc,EAAEC,oBAhBZ;AAiBJC,MAAAA,YAjBI;AAkBJ,SAAGC;AAlBC,QAmBF,KAAKxG,KAnBT;AAqBA,UAAMyG,kBAAkB,GAAG,KAAKC,gBAAL,CACzB7C,kBADyB,EAEzBC,OAFyB,EAGzBC,IAHyB,EAIzB5D,MAJyB,EAKzBuE,MAAM,CAACC,GALkB,EAMzBD,MAAM,CAACE,KANkB,EAOzBF,MAAM,CAACG,MAPkB,EAQzBH,MAAM,CAACI,IARkB,CAA3B;AAWA,UAAM6B,iBAAiB,GAAG,KAAKC,oBAAL,CACxBhD,iBADwB,EAExB6C,kBAFwB,CAA1B;AAKA,UAAM;AAAEJ,MAAAA,cAAF;AAAkBQ,MAAAA,SAAlB;AAA6BC,MAAAA,YAA7B;AAA2CC,MAAAA;AAA3C,QACJJ,iBADF;AAGA,UAAMK,kBAAkB,GAAGf,cAAc,GACrCnG,sBAASmH,KAAT,CACE,CACE;AACExE,MAAAA,WAAW,EACTxC,gBAAgB,KAAK,UAArB,IACAA,gBAAgB,KAAK,mBADrB,GAEI;AAAEwD,QAAAA,YAAY,EAAElD;AAAhB,OAFJ,GAGI;AAAEmD,QAAAA,YAAY,EAAEnD;AAAhB;AALR,KADF,CADF,EAUE;AAAEtB,MAAAA;AAAF,KAVF,CADqC,GAarC0C,SAbJ;;AAeA,UAAM;AAAEuF,MAAAA;AAAF,QAAsB3H,wBAAWC,OAAX,CAAmB+G,YAAY,IAAI,EAAnC,CAA5B;;AACA,UAAMY,aAAa,GACjB,OAAOD,eAAP,KAA2B,QAA3B,GACI,oBAAMA,eAAN,EAAuBE,KAAvB,OAAmC,CADvC,GAEI,KAHN;AAKA,wBACE,oBAAC,6BAAD,CAAsB,QAAtB;AAA+B,MAAA,KAAK,EAAEX;AAAtC,OAEI;AACA;AACAvH,0BAASC,EAAT,KAAgB,KAAhB,IACA4G,cADA,IAEAhC,IAFA,IAGAsD,sBAAsB,CAACzD,iBAAD,CAHtB,gBAIE,oBAAC,8BAAD;AACE,MAAA,IAAI,EAAEuC,iBADR;AAEE,MAAA,MAAM,EAAEhG,MAFV;AAGE,MAAA,MAAM,EAAEuE,MAHV;AAIE,MAAA,KAAK,EAAEmC;AAJT,MAJF,GAUI,IAdR,eAgBE,oBAAC,qBAAD,CAAU,IAAV;AACE,MAAA,KAAK,EAAE;AACL;AACA;AACA;AACA;AACApH,QAAAA,OAAO,EAAEqE;AALJ,OADT,CAQE;AARF;AASE,MAAA,WAAW,EAAE;AATf,MAhBF,eA2BE,oBAAC,iBAAD;AAAM,MAAA,aAAa,EAAC;AAApB,OAAmC0C,IAAnC,GACGT,cAAc,gBACb,oBAAC,iBAAD;AAAM,MAAA,aAAa,EAAC,UAApB;AAA+B,MAAA,KAAK,EAAExG,wBAAW+H;AAAjD,OACGxB,OAAO,CAAC;AAAEzG,MAAAA,KAAK,EAAEyH;AAAT,KAAD,CADV,CADa,GAIX,IALN,eAME,oBAAC,qBAAD,CAAU,IAAV;AACE,MAAA,KAAK,EAAE,CAACS,MAAM,CAACC,SAAR,EAAmBnB,cAAnB,EAAmCC,oBAAnC,CADT;AAEE,MAAA,aAAa,EAAC;AAFhB,oBAIE,oBAAC,iCAAD;AACE,MAAA,OAAO,EAAEnG,MAAM,CAACD,KAAP,KAAiB,CAAjB,IAAsB+F,cADjC;AAEE,MAAA,cAAc,EAAEe,kBAFlB;AAGE,MAAA,oBAAoB,EAAE,KAAKS;AAH7B,OAIM,KAAKrC,yBAAL,EAJN,gBAME,oBAAC,qBAAD,CAAU,IAAV;AACE,MAAA,8BAA8B,EAAEhG,eAAe,CAACyH,SAAD,CADjD;AAEE,MAAA,KAAK,EAAE,CAACU,MAAM,CAACC,SAAR,EAAmBX,SAAnB;AAFT,OAIGb,aAAa,IAAIe,WAAjB,IAAgC,CAACI,aAAjC,gBACC,oBAAC,qBAAD,CAAU,IAAV;AACE,MAAA,KAAK,EAAE,CACLI,MAAM,CAACG,MADF,EAELzH,gBAAgB,KAAK,YAArB,GACI,CAACsH,MAAM,CAACI,gBAAR,EAA0BJ,MAAM,CAACK,UAAjC,CADJ,GAEI3H,gBAAgB,KAAK,qBAArB,GACA,CAACsH,MAAM,CAACI,gBAAR,EAA0BJ,MAAM,CAACM,WAAjC,CADA,GAEA5H,gBAAgB,KAAK,UAArB,GACA,CAACsH,MAAM,CAACO,cAAR,EAAwBP,MAAM,CAACQ,SAA/B,CADA,GAEA,CAACR,MAAM,CAACO,cAAR,EAAwBP,MAAM,CAACS,YAA/B,CARC,EASL;AAAEd,QAAAA;AAAF,OATK,EAULH,WAVK,CADT;AAaE,MAAA,aAAa,EAAC;AAbhB,MADD,GAgBG,IApBN,eAqBE,oBAAC,kBAAD;AACE,MAAA,aAAa,EAAE,KAAKjE,KAAL,CAAWjD,aAD5B;AAEE,MAAA,OAAO,EAAEqG,mBAFX;AAGE,MAAA,MAAM,EAAE/F,MAHV;AAIE,MAAA,KAAK,EAAEoG;AAJT,OAMGH,QANH,CArBF,CANF,CAJF,CANF,CA3BF,CADF;AA+ED;;AAle6D;;;;gBAA3C1G,I,kBACG;AACpBsG,EAAAA,aAAa,EAAE,KADK;AAEpBC,EAAAA,cAAc,EAAE,IAFI;AAGpBpD,EAAAA,qBAAqB,EAAEjE,uBAHH;AAIpBkH,EAAAA,OAAO,EAAE;AAAA,QAAC;AACRzG,MAAAA;AADQ,KAAD;AAAA,WAKPA,KAAK,gBACH,oBAAC,qBAAD,CAAU,IAAV;AAAe,MAAA,aAAa,EAAC,MAA7B;AAAoC,MAAA,KAAK,EAAE,CAACkI,MAAM,CAACzB,OAAR,EAAiBzG,KAAjB;AAA3C,MADG,GAED,IAPG;AAAA;AAJW,C;;AAoejB,MAAMgI,sBAAsB,GACjCY,qBADoC,IAEjC;AACH,SACEA,qBAAqB,KAAKC,+CAA1B,IACA;AACAD,EAAAA,qBAAqB,CAACE,IAAtB,KAA+B,yBAHjC;AAKD,CARM;;;;AAUP,MAAMZ,MAAM,GAAGhI,wBAAW6I,MAAX,CAAkB;AAC/BZ,EAAAA,SAAS,EAAE;AACTa,IAAAA,IAAI,EAAE;AADG,GADoB;AAI/BvC,EAAAA,OAAO,EAAE;AACPuC,IAAAA,IAAI,EAAE,CADC;AAEPnB,IAAAA,eAAe,EAAE;AAFV,GAJsB;AAQ/BQ,EAAAA,MAAM,EAAE;AACNY,IAAAA,QAAQ,EAAE,UADJ;AAENC,IAAAA,YAAY,EAAE,CAFR;AAGNC,IAAAA,WAAW,EAAE,MAHP;AAINC,IAAAA,aAAa,EAAE;AAJT,GARuB;AAc/Bd,EAAAA,gBAAgB,EAAE;AAChBhD,IAAAA,GAAG,EAAE,CADW;AAEhBE,IAAAA,MAAM,EAAE,CAFQ;AAGhB3E,IAAAA,KAAK,EAAE,CAHS;AAIhBwI,IAAAA,YAAY,EAAE;AAAExI,MAAAA,KAAK,EAAE,CAAC,CAAV;AAAaE,MAAAA,MAAM,EAAE;AAArB;AAJE,GAda;AAoB/BwH,EAAAA,UAAU,EAAE;AACV9C,IAAAA,IAAI,EAAE;AADI,GApBmB;AAuB/B+C,EAAAA,WAAW,EAAE;AACXjD,IAAAA,KAAK,EAAE;AADI,GAvBkB;AA0B/BkD,EAAAA,cAAc,EAAE;AACdhD,IAAAA,IAAI,EAAE,CADQ;AAEdF,IAAAA,KAAK,EAAE,CAFO;AAGdxE,IAAAA,MAAM,EAAE,CAHM;AAIdsI,IAAAA,YAAY,EAAE;AAAExI,MAAAA,KAAK,EAAE,CAAT;AAAYE,MAAAA,MAAM,EAAE,CAAC;AAArB;AAJA,GA1Be;AAgC/B2H,EAAAA,SAAS,EAAE;AACTpD,IAAAA,GAAG,EAAE;AADI,GAhCoB;AAmC/BqD,EAAAA,YAAY,EAAE;AACZnD,IAAAA,MAAM,EAAE;AADI;AAnCiB,CAAlB,CAAf","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 closing !== prevProps.closing &&\n (this.getAnimateToValue(prevProps) !== toValue ||\n this.lastToValue !== toValue)\n ) {\n // We need to trigger the animation when route was closed\n // The 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"]}
|
|
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","ref","current","setPointerEvents","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, { CardSheetRef } 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.ref.current?.setPointerEvents(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 ref = React.createRef<CardSheetRef>();\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.ref}\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"]}
|
|
@@ -26,7 +26,15 @@ var _default = /*#__PURE__*/React.forwardRef(function CardSheet(_ref, ref) {
|
|
|
26
26
|
style,
|
|
27
27
|
...rest
|
|
28
28
|
} = _ref;
|
|
29
|
-
const [fill, setFill] = React.useState(false);
|
|
29
|
+
const [fill, setFill] = React.useState(false); // To avoid triggering a rerender in Card during animation we had to move
|
|
30
|
+
// the state to CardSheet. The `setPointerEvents` is then hoisted back to the Card.
|
|
31
|
+
|
|
32
|
+
const [pointerEvents, setPointerEvents] = React.useState('auto');
|
|
33
|
+
React.useImperativeHandle(ref, () => {
|
|
34
|
+
return {
|
|
35
|
+
setPointerEvents
|
|
36
|
+
};
|
|
37
|
+
});
|
|
30
38
|
React.useEffect(() => {
|
|
31
39
|
if (typeof document === 'undefined' || !document.body) {
|
|
32
40
|
// Only run when DOM is available
|
|
@@ -38,7 +46,7 @@ var _default = /*#__PURE__*/React.forwardRef(function CardSheet(_ref, ref) {
|
|
|
38
46
|
setFill(width === layout.width && height === layout.height);
|
|
39
47
|
}, [layout.height, layout.width]);
|
|
40
48
|
return /*#__PURE__*/React.createElement(_reactNative.View, _extends({}, rest, {
|
|
41
|
-
|
|
49
|
+
pointerEvents: pointerEvents,
|
|
42
50
|
style: [enabled && fill ? styles.page : styles.card, style]
|
|
43
51
|
}));
|
|
44
52
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CardSheet.tsx"],"names":["React","forwardRef","CardSheet","ref","enabled","layout","style","rest","fill","setFill","useState","useEffect","document","body","width","clientWidth","height","clientHeight","styles","page","card","StyleSheet","create","minHeight","flex","overflow"],"mappings":";;;;;;;AAAA;;AACA;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["CardSheet.tsx"],"names":["React","forwardRef","CardSheet","ref","enabled","layout","style","rest","fill","setFill","useState","pointerEvents","setPointerEvents","useImperativeHandle","useEffect","document","body","width","clientWidth","height","clientHeight","styles","page","card","StyleSheet","create","minHeight","flex","overflow"],"mappings":";;;;;;;AAAA;;AACA;;;;;;;;AAYA;AACA;AACA;AACA;4BACeA,KAAK,CAACC,UAAN,CAAsC,SAASC,SAAT,OAEnDC,GAFmD,EAGnD;AAAA,MAFA;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,MAAX;AAAmBC,IAAAA,KAAnB;AAA0B,OAAGC;AAA7B,GAEA;AACA,QAAM,CAACC,IAAD,EAAOC,OAAP,IAAkBT,KAAK,CAACU,QAAN,CAAe,KAAf,CAAxB,CADA,CAEA;AACA;;AACA,QAAM,CAACC,aAAD,EAAgBC,gBAAhB,IACJZ,KAAK,CAACU,QAAN,CAA2C,MAA3C,CADF;AAGAV,EAAAA,KAAK,CAACa,mBAAN,CAA0BV,GAA1B,EAA+B,MAAM;AACnC,WAAO;AAAES,MAAAA;AAAF,KAAP;AACD,GAFD;AAIAZ,EAAAA,KAAK,CAACc,SAAN,CAAgB,MAAM;AACpB,QAAI,OAAOC,QAAP,KAAoB,WAApB,IAAmC,CAACA,QAAQ,CAACC,IAAjD,EAAuD;AACrD;AACA;AACD;;AAED,UAAMC,KAAK,GAAGF,QAAQ,CAACC,IAAT,CAAcE,WAA5B;AACA,UAAMC,MAAM,GAAGJ,QAAQ,CAACC,IAAT,CAAcI,YAA7B;AAEAX,IAAAA,OAAO,CAACQ,KAAK,KAAKZ,MAAM,CAACY,KAAjB,IAA0BE,MAAM,KAAKd,MAAM,CAACc,MAA7C,CAAP;AACD,GAVD,EAUG,CAACd,MAAM,CAACc,MAAR,EAAgBd,MAAM,CAACY,KAAvB,CAVH;AAYA,sBACE,oBAAC,iBAAD,eACMV,IADN;AAEE,IAAA,aAAa,EAAEI,aAFjB;AAGE,IAAA,KAAK,EAAE,CAACP,OAAO,IAAII,IAAX,GAAkBa,MAAM,CAACC,IAAzB,GAAgCD,MAAM,CAACE,IAAxC,EAA8CjB,KAA9C;AAHT,KADF;AAOD,CAjCc,C;;;;AAmCf,MAAMe,MAAM,GAAGG,wBAAWC,MAAX,CAAkB;AAC/BH,EAAAA,IAAI,EAAE;AACJI,IAAAA,SAAS,EAAE;AADP,GADyB;AAI/BH,EAAAA,IAAI,EAAE;AACJI,IAAAA,IAAI,EAAE,CADF;AAEJC,IAAAA,QAAQ,EAAE;AAFN;AAJyB,CAAlB,CAAf","sourcesContent":["import * as React from 'react';\nimport { StyleSheet, View, ViewProps } from 'react-native';\n\ntype Props = ViewProps & {\n enabled: boolean;\n layout: { width: number; height: number };\n children: React.ReactNode;\n};\n\nexport type CardSheetRef = {\n setPointerEvents: React.Dispatch<ViewProps['pointerEvents']>;\n};\n\n// This component will render a page which overflows the screen\n// if the container fills the body by comparing the size\n// This lets the document.body handle scrolling of the content\n// It's necessary for mobile browsers to be able to hide address bar on scroll\nexport default React.forwardRef<CardSheetRef, Props>(function CardSheet(\n { enabled, layout, style, ...rest },\n ref\n) {\n const [fill, setFill] = React.useState(false);\n // To avoid triggering a rerender in Card during animation we had to move\n // the state to CardSheet. The `setPointerEvents` is then hoisted back to the Card.\n const [pointerEvents, setPointerEvents] =\n React.useState<ViewProps['pointerEvents']>('auto');\n\n React.useImperativeHandle(ref, () => {\n return { setPointerEvents };\n });\n\n React.useEffect(() => {\n if (typeof document === 'undefined' || !document.body) {\n // Only run when DOM is available\n return;\n }\n\n const width = document.body.clientWidth;\n const height = document.body.clientHeight;\n\n setFill(width === layout.width && height === layout.height);\n }, [layout.height, layout.width]);\n\n return (\n <View\n {...rest}\n pointerEvents={pointerEvents}\n style={[enabled && fill ? styles.page : styles.card, style]}\n />\n );\n});\n\nconst styles = StyleSheet.create({\n page: {\n minHeight: '100%',\n },\n card: {\n flex: 1,\n overflow: 'hidden',\n },\n});\n"]}
|
|
@@ -37,10 +37,6 @@ 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
|
-
|
|
44
40
|
_defineProperty(this, "isCurrentlyMounted", false);
|
|
45
41
|
|
|
46
42
|
_defineProperty(this, "isClosing", new Animated.Value(FALSE));
|
|
@@ -128,10 +124,10 @@ export default class Card extends React.Component {
|
|
|
128
124
|
});
|
|
129
125
|
|
|
130
126
|
_defineProperty(this, "setPointerEventsEnabled", enabled => {
|
|
127
|
+
var _this$ref$current;
|
|
128
|
+
|
|
131
129
|
const pointerEvents = enabled ? 'box-none' : 'none';
|
|
132
|
-
this.
|
|
133
|
-
pointerEvents
|
|
134
|
-
});
|
|
130
|
+
(_this$ref$current = this.ref.current) === null || _this$ref$current === void 0 ? void 0 : _this$ref$current.setPointerEvents(pointerEvents);
|
|
135
131
|
});
|
|
136
132
|
|
|
137
133
|
_defineProperty(this, "handleStartInteraction", () => {
|
|
@@ -244,6 +240,8 @@ export default class Card extends React.Component {
|
|
|
244
240
|
left: insetLeft
|
|
245
241
|
}
|
|
246
242
|
})));
|
|
243
|
+
|
|
244
|
+
_defineProperty(this, "ref", /*#__PURE__*/React.createRef());
|
|
247
245
|
}
|
|
248
246
|
|
|
249
247
|
componentDidMount() {
|
|
@@ -278,9 +276,9 @@ export default class Card extends React.Component {
|
|
|
278
276
|
|
|
279
277
|
const toValue = this.getAnimateToValue(this.props);
|
|
280
278
|
|
|
281
|
-
if (
|
|
279
|
+
if (this.getAnimateToValue(prevProps) !== toValue || this.lastToValue !== toValue) {
|
|
282
280
|
// We need to trigger the animation when route was closed
|
|
283
|
-
//
|
|
281
|
+
// Thr route might have been closed by a `POP` action or by a gesture
|
|
284
282
|
// When route was closed due to a gesture, the animation would've happened already
|
|
285
283
|
// It's still important to trigger the animation so that `onClose` is called
|
|
286
284
|
// If `onClose` is not called, cleanup step won't be performed for gestures
|
|
@@ -433,7 +431,7 @@ export default class Card extends React.Component {
|
|
|
433
431
|
}, shadowStyle],
|
|
434
432
|
pointerEvents: "none"
|
|
435
433
|
}) : null, /*#__PURE__*/React.createElement(CardSheet, {
|
|
436
|
-
|
|
434
|
+
ref: this.ref,
|
|
437
435
|
enabled: pageOverflowEnabled,
|
|
438
436
|
layout: layout,
|
|
439
437
|
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","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 closing !== prevProps.closing &&\n (this.getAnimateToValue(prevProps) !== toValue ||\n this.lastToValue !== toValue)\n ) {\n // We need to trigger the animation when route was closed\n // The 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"]}
|
|
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","ref","current","setPointerEvents","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, { CardSheetRef } 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.ref.current?.setPointerEvents(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 ref = React.createRef<CardSheetRef>();\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.ref}\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"]}
|
|
@@ -13,7 +13,15 @@ export default /*#__PURE__*/React.forwardRef(function CardSheet(_ref, ref) {
|
|
|
13
13
|
style,
|
|
14
14
|
...rest
|
|
15
15
|
} = _ref;
|
|
16
|
-
const [fill, setFill] = React.useState(false);
|
|
16
|
+
const [fill, setFill] = React.useState(false); // To avoid triggering a rerender in Card during animation we had to move
|
|
17
|
+
// the state to CardSheet. The `setPointerEvents` is then hoisted back to the Card.
|
|
18
|
+
|
|
19
|
+
const [pointerEvents, setPointerEvents] = React.useState('auto');
|
|
20
|
+
React.useImperativeHandle(ref, () => {
|
|
21
|
+
return {
|
|
22
|
+
setPointerEvents
|
|
23
|
+
};
|
|
24
|
+
});
|
|
17
25
|
React.useEffect(() => {
|
|
18
26
|
if (typeof document === 'undefined' || !document.body) {
|
|
19
27
|
// Only run when DOM is available
|
|
@@ -25,7 +33,7 @@ export default /*#__PURE__*/React.forwardRef(function CardSheet(_ref, ref) {
|
|
|
25
33
|
setFill(width === layout.width && height === layout.height);
|
|
26
34
|
}, [layout.height, layout.width]);
|
|
27
35
|
return /*#__PURE__*/React.createElement(View, _extends({}, rest, {
|
|
28
|
-
|
|
36
|
+
pointerEvents: pointerEvents,
|
|
29
37
|
style: [enabled && fill ? styles.page : styles.card, style]
|
|
30
38
|
}));
|
|
31
39
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CardSheet.tsx"],"names":["React","StyleSheet","View","forwardRef","CardSheet","ref","enabled","layout","style","rest","fill","setFill","useState","useEffect","document","body","width","clientWidth","height","clientHeight","styles","page","card","create","minHeight","flex","overflow"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,UAAT,EAAqBC,IAArB,QAA4C,cAA5C;
|
|
1
|
+
{"version":3,"sources":["CardSheet.tsx"],"names":["React","StyleSheet","View","forwardRef","CardSheet","ref","enabled","layout","style","rest","fill","setFill","useState","pointerEvents","setPointerEvents","useImperativeHandle","useEffect","document","body","width","clientWidth","height","clientHeight","styles","page","card","create","minHeight","flex","overflow"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,UAAT,EAAqBC,IAArB,QAA4C,cAA5C;AAYA;AACA;AACA;AACA;AACA,4BAAeF,KAAK,CAACG,UAAN,CAAsC,SAASC,SAAT,OAEnDC,GAFmD,EAGnD;AAAA,MAFA;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,MAAX;AAAmBC,IAAAA,KAAnB;AAA0B,OAAGC;AAA7B,GAEA;AACA,QAAM,CAACC,IAAD,EAAOC,OAAP,IAAkBX,KAAK,CAACY,QAAN,CAAe,KAAf,CAAxB,CADA,CAEA;AACA;;AACA,QAAM,CAACC,aAAD,EAAgBC,gBAAhB,IACJd,KAAK,CAACY,QAAN,CAA2C,MAA3C,CADF;AAGAZ,EAAAA,KAAK,CAACe,mBAAN,CAA0BV,GAA1B,EAA+B,MAAM;AACnC,WAAO;AAAES,MAAAA;AAAF,KAAP;AACD,GAFD;AAIAd,EAAAA,KAAK,CAACgB,SAAN,CAAgB,MAAM;AACpB,QAAI,OAAOC,QAAP,KAAoB,WAApB,IAAmC,CAACA,QAAQ,CAACC,IAAjD,EAAuD;AACrD;AACA;AACD;;AAED,UAAMC,KAAK,GAAGF,QAAQ,CAACC,IAAT,CAAcE,WAA5B;AACA,UAAMC,MAAM,GAAGJ,QAAQ,CAACC,IAAT,CAAcI,YAA7B;AAEAX,IAAAA,OAAO,CAACQ,KAAK,KAAKZ,MAAM,CAACY,KAAjB,IAA0BE,MAAM,KAAKd,MAAM,CAACc,MAA7C,CAAP;AACD,GAVD,EAUG,CAACd,MAAM,CAACc,MAAR,EAAgBd,MAAM,CAACY,KAAvB,CAVH;AAYA,sBACE,oBAAC,IAAD,eACMV,IADN;AAEE,IAAA,aAAa,EAAEI,aAFjB;AAGE,IAAA,KAAK,EAAE,CAACP,OAAO,IAAII,IAAX,GAAkBa,MAAM,CAACC,IAAzB,GAAgCD,MAAM,CAACE,IAAxC,EAA8CjB,KAA9C;AAHT,KADF;AAOD,CAjCc,CAAf;AAmCA,MAAMe,MAAM,GAAGtB,UAAU,CAACyB,MAAX,CAAkB;AAC/BF,EAAAA,IAAI,EAAE;AACJG,IAAAA,SAAS,EAAE;AADP,GADyB;AAI/BF,EAAAA,IAAI,EAAE;AACJG,IAAAA,IAAI,EAAE,CADF;AAEJC,IAAAA,QAAQ,EAAE;AAFN;AAJyB,CAAlB,CAAf","sourcesContent":["import * as React from 'react';\nimport { StyleSheet, View, ViewProps } from 'react-native';\n\ntype Props = ViewProps & {\n enabled: boolean;\n layout: { width: number; height: number };\n children: React.ReactNode;\n};\n\nexport type CardSheetRef = {\n setPointerEvents: React.Dispatch<ViewProps['pointerEvents']>;\n};\n\n// This component will render a page which overflows the screen\n// if the container fills the body by comparing the size\n// This lets the document.body handle scrolling of the content\n// It's necessary for mobile browsers to be able to hide address bar on scroll\nexport default React.forwardRef<CardSheetRef, Props>(function CardSheet(\n { enabled, layout, style, ...rest },\n ref\n) {\n const [fill, setFill] = React.useState(false);\n // To avoid triggering a rerender in Card during animation we had to move\n // the state to CardSheet. The `setPointerEvents` is then hoisted back to the Card.\n const [pointerEvents, setPointerEvents] =\n React.useState<ViewProps['pointerEvents']>('auto');\n\n React.useImperativeHandle(ref, () => {\n return { setPointerEvents };\n });\n\n React.useEffect(() => {\n if (typeof document === 'undefined' || !document.body) {\n // Only run when DOM is available\n return;\n }\n\n const width = document.body.clientWidth;\n const height = document.body.clientHeight;\n\n setFill(width === layout.width && height === layout.height);\n }, [layout.height, layout.width]);\n\n return (\n <View\n {...rest}\n pointerEvents={pointerEvents}\n style={[enabled && fill ? styles.page : styles.card, style]}\n />\n );\n});\n\nconst styles = StyleSheet.create({\n page: {\n minHeight: '100%',\n },\n card: {\n flex: 1,\n overflow: 'hidden',\n },\n});\n"]}
|
|
@@ -39,10 +39,7 @@ declare type Props = ViewProps & {
|
|
|
39
39
|
containerStyle?: StyleProp<ViewStyle>;
|
|
40
40
|
contentStyle?: StyleProp<ViewStyle>;
|
|
41
41
|
};
|
|
42
|
-
|
|
43
|
-
pointerEvents: ViewProps['pointerEvents'];
|
|
44
|
-
};
|
|
45
|
-
export default class Card extends React.Component<Props, State> {
|
|
42
|
+
export default class Card extends React.Component<Props> {
|
|
46
43
|
static defaultProps: {
|
|
47
44
|
shadowEnabled: boolean;
|
|
48
45
|
gestureEnabled: boolean;
|
|
@@ -51,7 +48,6 @@ export default class Card extends React.Component<Props, State> {
|
|
|
51
48
|
style: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;
|
|
52
49
|
}) => JSX.Element | null;
|
|
53
50
|
};
|
|
54
|
-
state: State;
|
|
55
51
|
componentDidMount(): void;
|
|
56
52
|
componentDidUpdate(prevProps: Props): void;
|
|
57
53
|
componentWillUnmount(): void;
|
|
@@ -72,6 +68,7 @@ export default class Card extends React.Component<Props, State> {
|
|
|
72
68
|
private getInterpolatedStyle;
|
|
73
69
|
private getCardAnimation;
|
|
74
70
|
private gestureActivationCriteria;
|
|
71
|
+
private ref;
|
|
75
72
|
render(): JSX.Element;
|
|
76
73
|
}
|
|
77
74
|
export declare const getIsModalPresentation: (cardStyleInterpolator: StackCardStyleInterpolator) => boolean;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { ViewProps } from 'react-native';
|
|
3
|
+
export declare type CardSheetRef = {
|
|
4
|
+
setPointerEvents: React.Dispatch<ViewProps['pointerEvents']>;
|
|
5
|
+
};
|
|
3
6
|
declare const _default: React.ForwardRefExoticComponent<ViewProps & {
|
|
4
7
|
enabled: boolean;
|
|
5
8
|
layout: {
|
|
@@ -7,5 +10,5 @@ declare const _default: React.ForwardRefExoticComponent<ViewProps & {
|
|
|
7
10
|
height: number;
|
|
8
11
|
};
|
|
9
12
|
children: React.ReactNode;
|
|
10
|
-
} & React.RefAttributes<
|
|
13
|
+
} & React.RefAttributes<CardSheetRef>>;
|
|
11
14
|
export default _default;
|
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.3.
|
|
4
|
+
"version": "6.3.4",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native-component",
|
|
7
7
|
"react-component",
|
|
@@ -81,5 +81,5 @@
|
|
|
81
81
|
]
|
|
82
82
|
]
|
|
83
83
|
},
|
|
84
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "2b52fba92b87b66ec4334069a332ab747cf33056"
|
|
85
85
|
}
|
package/src/views/Stack/Card.tsx
CHANGED
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
PanGestureHandlerGestureEvent,
|
|
31
31
|
} from '../GestureHandler';
|
|
32
32
|
import ModalStatusBarManager from '../ModalStatusBarManager';
|
|
33
|
-
import CardSheet from './CardSheet';
|
|
33
|
+
import CardSheet, { CardSheetRef } from './CardSheet';
|
|
34
34
|
|
|
35
35
|
type Props = ViewProps & {
|
|
36
36
|
interpolationIndex: number;
|
|
@@ -67,10 +67,6 @@ type Props = ViewProps & {
|
|
|
67
67
|
contentStyle?: StyleProp<ViewStyle>;
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
-
type State = {
|
|
71
|
-
pointerEvents: ViewProps['pointerEvents'];
|
|
72
|
-
};
|
|
73
|
-
|
|
74
70
|
const GESTURE_VELOCITY_IMPACT = 0.3;
|
|
75
71
|
|
|
76
72
|
const TRUE = 1;
|
|
@@ -93,7 +89,7 @@ const hasOpacityStyle = (style: any) => {
|
|
|
93
89
|
return false;
|
|
94
90
|
};
|
|
95
91
|
|
|
96
|
-
export default class Card extends React.Component<Props
|
|
92
|
+
export default class Card extends React.Component<Props> {
|
|
97
93
|
static defaultProps = {
|
|
98
94
|
shadowEnabled: false,
|
|
99
95
|
gestureEnabled: true,
|
|
@@ -108,10 +104,6 @@ export default class Card extends React.Component<Props, State> {
|
|
|
108
104
|
) : null,
|
|
109
105
|
};
|
|
110
106
|
|
|
111
|
-
state: State = {
|
|
112
|
-
pointerEvents: 'auto',
|
|
113
|
-
};
|
|
114
|
-
|
|
115
107
|
componentDidMount() {
|
|
116
108
|
this.animate({ closing: this.props.closing });
|
|
117
109
|
this.isCurrentlyMounted = true;
|
|
@@ -136,12 +128,11 @@ export default class Card extends React.Component<Props, State> {
|
|
|
136
128
|
const toValue = this.getAnimateToValue(this.props);
|
|
137
129
|
|
|
138
130
|
if (
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
this.lastToValue !== toValue)
|
|
131
|
+
this.getAnimateToValue(prevProps) !== toValue ||
|
|
132
|
+
this.lastToValue !== toValue
|
|
142
133
|
) {
|
|
143
134
|
// We need to trigger the animation when route was closed
|
|
144
|
-
//
|
|
135
|
+
// Thr route might have been closed by a `POP` action or by a gesture
|
|
145
136
|
// When route was closed due to a gesture, the animation would've happened already
|
|
146
137
|
// It's still important to trigger the animation so that `onClose` is called
|
|
147
138
|
// If `onClose` is not called, cleanup step won't be performed for gestures
|
|
@@ -251,7 +242,7 @@ export default class Card extends React.Component<Props, State> {
|
|
|
251
242
|
private setPointerEventsEnabled = (enabled: boolean) => {
|
|
252
243
|
const pointerEvents = enabled ? 'box-none' : 'none';
|
|
253
244
|
|
|
254
|
-
this.
|
|
245
|
+
this.ref.current?.setPointerEvents(pointerEvents);
|
|
255
246
|
};
|
|
256
247
|
|
|
257
248
|
private handleStartInteraction = () => {
|
|
@@ -434,6 +425,8 @@ export default class Card extends React.Component<Props, State> {
|
|
|
434
425
|
}
|
|
435
426
|
}
|
|
436
427
|
|
|
428
|
+
private ref = React.createRef<CardSheetRef>();
|
|
429
|
+
|
|
437
430
|
render() {
|
|
438
431
|
const {
|
|
439
432
|
styleInterpolator,
|
|
@@ -562,7 +555,7 @@ export default class Card extends React.Component<Props, State> {
|
|
|
562
555
|
/>
|
|
563
556
|
) : null}
|
|
564
557
|
<CardSheet
|
|
565
|
-
|
|
558
|
+
ref={this.ref}
|
|
566
559
|
enabled={pageOverflowEnabled}
|
|
567
560
|
layout={layout}
|
|
568
561
|
style={contentStyle}
|
|
@@ -7,15 +7,27 @@ type Props = ViewProps & {
|
|
|
7
7
|
children: React.ReactNode;
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
+
export type CardSheetRef = {
|
|
11
|
+
setPointerEvents: React.Dispatch<ViewProps['pointerEvents']>;
|
|
12
|
+
};
|
|
13
|
+
|
|
10
14
|
// This component will render a page which overflows the screen
|
|
11
15
|
// if the container fills the body by comparing the size
|
|
12
16
|
// This lets the document.body handle scrolling of the content
|
|
13
17
|
// It's necessary for mobile browsers to be able to hide address bar on scroll
|
|
14
|
-
export default React.forwardRef<
|
|
18
|
+
export default React.forwardRef<CardSheetRef, Props>(function CardSheet(
|
|
15
19
|
{ enabled, layout, style, ...rest },
|
|
16
20
|
ref
|
|
17
21
|
) {
|
|
18
22
|
const [fill, setFill] = React.useState(false);
|
|
23
|
+
// To avoid triggering a rerender in Card during animation we had to move
|
|
24
|
+
// the state to CardSheet. The `setPointerEvents` is then hoisted back to the Card.
|
|
25
|
+
const [pointerEvents, setPointerEvents] =
|
|
26
|
+
React.useState<ViewProps['pointerEvents']>('auto');
|
|
27
|
+
|
|
28
|
+
React.useImperativeHandle(ref, () => {
|
|
29
|
+
return { setPointerEvents };
|
|
30
|
+
});
|
|
19
31
|
|
|
20
32
|
React.useEffect(() => {
|
|
21
33
|
if (typeof document === 'undefined' || !document.body) {
|
|
@@ -32,7 +44,7 @@ export default React.forwardRef<View, Props>(function CardSheet(
|
|
|
32
44
|
return (
|
|
33
45
|
<View
|
|
34
46
|
{...rest}
|
|
35
|
-
|
|
47
|
+
pointerEvents={pointerEvents}
|
|
36
48
|
style={[enabled && fill ? styles.page : styles.card, style]}
|
|
37
49
|
/>
|
|
38
50
|
);
|