react-native-tab-view 3.1.1 → 3.2.1

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.
Files changed (65) hide show
  1. package/README.md +13 -1
  2. package/lib/commonjs/Pager.android.js.map +1 -1
  3. package/lib/commonjs/Pager.ios.js.map +1 -1
  4. package/lib/commonjs/Pager.js.map +1 -1
  5. package/lib/commonjs/PagerViewAdapter.js +40 -22
  6. package/lib/commonjs/PagerViewAdapter.js.map +1 -1
  7. package/lib/commonjs/PanResponderAdapter.js +41 -29
  8. package/lib/commonjs/PanResponderAdapter.js.map +1 -1
  9. package/lib/commonjs/PlatformPressable.js +19 -15
  10. package/lib/commonjs/PlatformPressable.js.map +1 -1
  11. package/lib/commonjs/SceneMap.js +14 -11
  12. package/lib/commonjs/SceneMap.js.map +1 -1
  13. package/lib/commonjs/SceneView.js +2 -2
  14. package/lib/commonjs/SceneView.js.map +1 -1
  15. package/lib/commonjs/TabBar.js +124 -81
  16. package/lib/commonjs/TabBar.js.map +1 -1
  17. package/lib/commonjs/TabBarIndicator.js +7 -6
  18. package/lib/commonjs/TabBarIndicator.js.map +1 -1
  19. package/lib/commonjs/TabBarItem.js +7 -6
  20. package/lib/commonjs/TabBarItem.js.map +1 -1
  21. package/lib/commonjs/TabView.js +42 -33
  22. package/lib/commonjs/TabView.js.map +1 -1
  23. package/lib/commonjs/index.js +6 -6
  24. package/lib/commonjs/index.js.map +1 -1
  25. package/lib/commonjs/types.js +4 -0
  26. package/lib/commonjs/types.js.map +1 -1
  27. package/lib/commonjs/useAnimatedValue.js.map +1 -1
  28. package/lib/module/Pager.android.js.map +1 -1
  29. package/lib/module/Pager.ios.js.map +1 -1
  30. package/lib/module/Pager.js.map +1 -1
  31. package/lib/module/PagerViewAdapter.js +40 -22
  32. package/lib/module/PagerViewAdapter.js.map +1 -1
  33. package/lib/module/PanResponderAdapter.js +41 -28
  34. package/lib/module/PanResponderAdapter.js.map +1 -1
  35. package/lib/module/PlatformPressable.js +19 -15
  36. package/lib/module/PlatformPressable.js.map +1 -1
  37. package/lib/module/SceneMap.js +14 -11
  38. package/lib/module/SceneMap.js.map +1 -1
  39. package/lib/module/SceneView.js +2 -2
  40. package/lib/module/SceneView.js.map +1 -1
  41. package/lib/module/TabBar.js +125 -81
  42. package/lib/module/TabBar.js.map +1 -1
  43. package/lib/module/TabBarIndicator.js +7 -6
  44. package/lib/module/TabBarIndicator.js.map +1 -1
  45. package/lib/module/TabBarItem.js +7 -6
  46. package/lib/module/TabBarItem.js.map +1 -1
  47. package/lib/module/TabView.js +41 -32
  48. package/lib/module/TabView.js.map +1 -1
  49. package/lib/module/index.js.map +1 -1
  50. package/lib/module/types.js +1 -1
  51. package/lib/module/types.js.map +1 -1
  52. package/lib/module/useAnimatedValue.js.map +1 -1
  53. package/lib/typescript/PagerViewAdapter.d.ts +1 -1
  54. package/lib/typescript/PanResponderAdapter.d.ts +1 -1
  55. package/lib/typescript/TabBar.d.ts +3 -1
  56. package/lib/typescript/TabBarIndicator.d.ts +1 -0
  57. package/lib/typescript/TabView.d.ts +2 -1
  58. package/lib/typescript/types.d.ts +1 -0
  59. package/package.json +19 -18
  60. package/src/PagerViewAdapter.tsx +23 -9
  61. package/src/PanResponderAdapter.tsx +23 -17
  62. package/src/TabBar.tsx +75 -31
  63. package/src/TabBarIndicator.tsx +14 -5
  64. package/src/TabView.tsx +5 -0
  65. package/src/types.tsx +1 -0
package/README.md CHANGED
@@ -308,6 +308,10 @@ String indicating whether the keyboard gets dismissed in response to a drag gest
308
308
 
309
309
  Boolean indicating whether to enable swipe gestures. Swipe gestures are enabled by default. Passing `false` will disable swipe gestures, but the user can still switch tabs by pressing the tab bar.
310
310
 
311
+ #### `animationEnabled`
312
+
313
+ Enables animation when changing tab. By default it's true.
314
+
311
315
  ##### `onSwipeStart`
312
316
 
313
317
  Callback which is called when the swipe gesture starts, i.e. the user touches the screen and moves it.
@@ -331,6 +335,10 @@ Object containing the initial height and width of the screens. Passing this will
331
335
 
332
336
  Style to apply to the view wrapping each screen. You can pass this to override some default styles such as overflow clipping:
333
337
 
338
+ ##### `pagerStyle`
339
+
340
+ Style to apply to the pager view wrapping all the scenes.
341
+
334
342
  ##### `style`
335
343
 
336
344
  Style to apply to the tab view container.
@@ -408,7 +416,7 @@ Function which takes an object with the current route, focused status and color
408
416
  <TabBar
409
417
  renderIcon={({ route, focused, color }) => (
410
418
  <Icon
411
- name={focused ? 'abums' : 'albums-outlined'}
419
+ name={focused ? 'albums' : 'albums-outlined'}
412
420
  color={color}
413
421
  />
414
422
  )}
@@ -518,6 +526,10 @@ Style to apply to the inner container for tabs.
518
526
 
519
527
  Style to apply to the tab bar container.
520
528
 
529
+ ### `gap`
530
+
531
+ Define a spacing between tabs.
532
+
521
533
  ## Using with other libraries
522
534
 
523
535
  ### [React Navigation](https://github.com/react-navigation/react-navigation)
@@ -1 +1 @@
1
- {"version":3,"sources":["Pager.android.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA","sourcesContent":["export { default } from './PagerViewAdapter';\n"]}
1
+ {"version":3,"names":[],"sources":["Pager.android.tsx"],"sourcesContent":["export { default } from './PagerViewAdapter';\n"],"mappings":";;;;;;;;;;;;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["Pager.ios.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA","sourcesContent":["export { default } from './PagerViewAdapter';\n"]}
1
+ {"version":3,"names":[],"sources":["Pager.ios.tsx"],"sourcesContent":["export { default } from './PagerViewAdapter';\n"],"mappings":";;;;;;;;;;;;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["Pager.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA","sourcesContent":["export { default } from './PanResponderAdapter';\n"]}
1
+ {"version":3,"names":[],"sources":["Pager.tsx"],"sourcesContent":["export { default } from './PanResponderAdapter';\n"],"mappings":";;;;;;;;;;;;AAAA"}
@@ -19,21 +19,23 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
19
19
 
20
20
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
21
 
22
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
22
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
23
23
 
24
24
  const AnimatedViewPager = _reactNative.Animated.createAnimatedComponent(_reactNativePagerView.default);
25
25
 
26
- function PagerViewAdapter({
27
- keyboardDismissMode = 'auto',
28
- swipeEnabled = true,
29
- navigationState,
30
- onIndexChange,
31
- onSwipeStart,
32
- onSwipeEnd,
33
- children,
34
- style,
35
- ...rest
36
- }) {
26
+ function PagerViewAdapter(_ref) {
27
+ let {
28
+ keyboardDismissMode = 'auto',
29
+ swipeEnabled = true,
30
+ navigationState,
31
+ onIndexChange,
32
+ onSwipeStart,
33
+ onSwipeEnd,
34
+ children,
35
+ style,
36
+ animationEnabled,
37
+ ...rest
38
+ } = _ref;
37
39
  const {
38
40
  index
39
41
  } = navigationState;
@@ -47,22 +49,37 @@ function PagerViewAdapter({
47
49
  navigationStateRef.current = navigationState;
48
50
  });
49
51
  const jumpTo = React.useCallback(key => {
50
- var _pagerRef$current;
51
-
52
52
  const index = navigationStateRef.current.routes.findIndex(route => route.key === key);
53
- (_pagerRef$current = pagerRef.current) === null || _pagerRef$current === void 0 ? void 0 : _pagerRef$current.setPage(index);
54
- }, []);
53
+
54
+ if (animationEnabled) {
55
+ var _pagerRef$current;
56
+
57
+ (_pagerRef$current = pagerRef.current) === null || _pagerRef$current === void 0 ? void 0 : _pagerRef$current.setPage(index);
58
+ } else {
59
+ var _pagerRef$current2;
60
+
61
+ (_pagerRef$current2 = pagerRef.current) === null || _pagerRef$current2 === void 0 ? void 0 : _pagerRef$current2.setPageWithoutAnimation(index);
62
+ position.setValue(index);
63
+ }
64
+ }, [animationEnabled, position]);
55
65
  React.useEffect(() => {
56
66
  if (keyboardDismissMode === 'auto') {
57
67
  _reactNative.Keyboard.dismiss();
58
68
  }
59
69
 
60
70
  if (indexRef.current !== index) {
61
- var _pagerRef$current2;
71
+ if (animationEnabled) {
72
+ var _pagerRef$current3;
62
73
 
63
- (_pagerRef$current2 = pagerRef.current) === null || _pagerRef$current2 === void 0 ? void 0 : _pagerRef$current2.setPage(index);
74
+ (_pagerRef$current3 = pagerRef.current) === null || _pagerRef$current3 === void 0 ? void 0 : _pagerRef$current3.setPage(index);
75
+ } else {
76
+ var _pagerRef$current4;
77
+
78
+ (_pagerRef$current4 = pagerRef.current) === null || _pagerRef$current4 === void 0 ? void 0 : _pagerRef$current4.setPageWithoutAnimation(index);
79
+ position.setValue(index);
80
+ }
64
81
  }
65
- }, [keyboardDismissMode, index]);
82
+ }, [keyboardDismissMode, index, animationEnabled, position]);
66
83
 
67
84
  const onPageScrollStateChanged = state => {
68
85
  const {
@@ -76,9 +93,10 @@ function PagerViewAdapter({
76
93
 
77
94
  case 'dragging':
78
95
  {
79
- const subscription = offset.addListener(({
80
- value
81
- }) => {
96
+ const subscription = offset.addListener(_ref2 => {
97
+ let {
98
+ value
99
+ } = _ref2;
82
100
  const next = index + (value > 0 ? Math.ceil(value) : Math.floor(value));
83
101
 
84
102
  if (next !== index) {
@@ -1 +1 @@
1
- {"version":3,"sources":["PagerViewAdapter.tsx"],"names":["AnimatedViewPager","Animated","createAnimatedComponent","ViewPager","PagerViewAdapter","keyboardDismissMode","swipeEnabled","navigationState","onIndexChange","onSwipeStart","onSwipeEnd","children","style","rest","index","listenersRef","React","useRef","pagerRef","indexRef","navigationStateRef","position","offset","useEffect","current","jumpTo","useCallback","key","routes","findIndex","route","setPage","Keyboard","dismiss","onPageScrollStateChanged","state","pageScrollState","nativeEvent","subscription","addListener","value","next","Math","ceil","floor","forEach","listener","removeListener","addEnterListener","push","indexOf","splice","add","render","styles","container","event","useNativeDriver","e","StyleSheet","create","flex"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAGA;;;;;;;;;;AASA,MAAMA,iBAAiB,GAAGC,sBAASC,uBAAT,CAAiCC,6BAAjC,CAA1B;;AAoBe,SAASC,gBAAT,CAA2C;AACxDC,EAAAA,mBAAmB,GAAG,MADkC;AAExDC,EAAAA,YAAY,GAAG,IAFyC;AAGxDC,EAAAA,eAHwD;AAIxDC,EAAAA,aAJwD;AAKxDC,EAAAA,YALwD;AAMxDC,EAAAA,UANwD;AAOxDC,EAAAA,QAPwD;AAQxDC,EAAAA,KARwD;AASxD,KAAGC;AATqD,CAA3C,EAUF;AACX,QAAM;AAAEC,IAAAA;AAAF,MAAYP,eAAlB;AAEA,QAAMQ,YAAY,GAAGC,KAAK,CAACC,MAAN,CAAyB,EAAzB,CAArB;AAEA,QAAMC,QAAQ,GAAGF,KAAK,CAACC,MAAN,EAAjB;AACA,QAAME,QAAQ,GAAGH,KAAK,CAACC,MAAN,CAAqBH,KAArB,CAAjB;AACA,QAAMM,kBAAkB,GAAGJ,KAAK,CAACC,MAAN,CAAaV,eAAb,CAA3B;AAEA,QAAMc,QAAQ,GAAG,+BAAiBP,KAAjB,CAAjB;AACA,QAAMQ,MAAM,GAAG,+BAAiB,CAAjB,CAAf;AAEAN,EAAAA,KAAK,CAACO,SAAN,CAAgB,MAAM;AACpBH,IAAAA,kBAAkB,CAACI,OAAnB,GAA6BjB,eAA7B;AACD,GAFD;AAIA,QAAMkB,MAAM,GAAGT,KAAK,CAACU,WAAN,CAAmBC,GAAD,IAAiB;AAAA;;AAChD,UAAMb,KAAK,GAAGM,kBAAkB,CAACI,OAAnB,CAA2BI,MAA3B,CAAkCC,SAAlC,CACXC,KAAD,IAA4BA,KAAK,CAACH,GAAN,KAAcA,GAD9B,CAAd;AAIA,yBAAAT,QAAQ,CAACM,OAAT,wEAAkBO,OAAlB,CAA0BjB,KAA1B;AACD,GANc,EAMZ,EANY,CAAf;AAQAE,EAAAA,KAAK,CAACO,SAAN,CAAgB,MAAM;AACpB,QAAIlB,mBAAmB,KAAK,MAA5B,EAAoC;AAClC2B,4BAASC,OAAT;AACD;;AAED,QAAId,QAAQ,CAACK,OAAT,KAAqBV,KAAzB,EAAgC;AAAA;;AAC9B,4BAAAI,QAAQ,CAACM,OAAT,0EAAkBO,OAAlB,CAA0BjB,KAA1B;AACD;AACF,GARD,EAQG,CAACT,mBAAD,EAAsBS,KAAtB,CARH;;AAUA,QAAMoB,wBAAwB,GAC5BC,KAD+B,IAE5B;AACH,UAAM;AAAEC,MAAAA;AAAF,QAAsBD,KAAK,CAACE,WAAlC;;AAEA,YAAQD,eAAR;AACE,WAAK,MAAL;AACE1B,QAAAA,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU;AACV;;AACF,WAAK,UAAL;AAAiB;AACf,gBAAM4B,YAAY,GAAGhB,MAAM,CAACiB,WAAP,CAAmB,CAAC;AAAEC,YAAAA;AAAF,WAAD,KAAe;AACrD,kBAAMC,IAAI,GACR3B,KAAK,IAAI0B,KAAK,GAAG,CAAR,GAAYE,IAAI,CAACC,IAAL,CAAUH,KAAV,CAAZ,GAA+BE,IAAI,CAACE,KAAL,CAAWJ,KAAX,CAAnC,CADP;;AAGA,gBAAIC,IAAI,KAAK3B,KAAb,EAAoB;AAClBC,cAAAA,YAAY,CAACS,OAAb,CAAqBqB,OAArB,CAA8BC,QAAD,IAAcA,QAAQ,CAACL,IAAD,CAAnD;AACD;;AAEDnB,YAAAA,MAAM,CAACyB,cAAP,CAAsBT,YAAtB;AACD,WAToB,CAArB;AAWA7B,UAAAA,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY;AACZ;AACD;AAlBH;AAoBD,GAzBD;;AA2BA,QAAMuC,gBAAgB,GAAGhC,KAAK,CAACU,WAAN,CAAmBoB,QAAD,IAAwB;AACjE/B,IAAAA,YAAY,CAACS,OAAb,CAAqByB,IAArB,CAA0BH,QAA1B;AAEA,WAAO,MAAM;AACX,YAAMhC,KAAK,GAAGC,YAAY,CAACS,OAAb,CAAqB0B,OAArB,CAA6BJ,QAA7B,CAAd;;AAEA,UAAIhC,KAAK,GAAG,CAAC,CAAb,EAAgB;AACdC,QAAAA,YAAY,CAACS,OAAb,CAAqB2B,MAArB,CAA4BrC,KAA5B,EAAmC,CAAnC;AACD;AACF,KAND;AAOD,GAVwB,EAUtB,EAVsB,CAAzB;AAYA,SAAOH,QAAQ,CAAC;AACdU,IAAAA,QAAQ,EAAEpB,sBAASmD,GAAT,CAAa/B,QAAb,EAAuBC,MAAvB,CADI;AAEd0B,IAAAA,gBAFc;AAGdvB,IAAAA,MAHc;AAId4B,IAAAA,MAAM,EAAG1C,QAAD,iBACN,oBAAC,iBAAD,eACME,IADN;AAEE,MAAA,GAAG,EAAEK,QAFP;AAGE,MAAA,KAAK,EAAE,CAACoC,MAAM,CAACC,SAAR,EAAmB3C,KAAnB,CAHT;AAIE,MAAA,WAAW,EAAEE,KAJf;AAKE,MAAA,mBAAmB,EACjBT,mBAAmB,KAAK,MAAxB,GAAiC,SAAjC,GAA6CA,mBANjD;AAQE,MAAA,YAAY,EAAEJ,sBAASuD,KAAT,CACZ,CACE;AACEnB,QAAAA,WAAW,EAAE;AACXhB,UAAAA,QAAQ,EAAEA,QADC;AAEXC,UAAAA,MAAM,EAAEA;AAFG;AADf,OADF,CADY,EASZ;AAAEmC,QAAAA,eAAe,EAAE;AAAnB,OATY,CARhB;AAmBE,MAAA,cAAc,EAAGC,CAAD,IAAO;AACrB,cAAM5C,KAAK,GAAG4C,CAAC,CAACrB,WAAF,CAAchB,QAA5B;AACAF,QAAAA,QAAQ,CAACK,OAAT,GAAmBV,KAAnB;AACAN,QAAAA,aAAa,CAACM,KAAD,CAAb;AACD,OAvBH;AAwBE,MAAA,wBAAwB,EAAEoB,wBAxB5B;AAyBE,MAAA,aAAa,EAAE5B;AAzBjB,QA2BGK,QA3BH;AALY,GAAD,CAAf;AAoCD;;AAED,MAAM2C,MAAM,GAAGK,wBAAWC,MAAX,CAAkB;AAC/BL,EAAAA,SAAS,EAAE;AACTM,IAAAA,IAAI,EAAE;AADG;AADoB,CAAlB,CAAf","sourcesContent":["import * as React from 'react';\nimport { Animated, Keyboard, StyleSheet } from 'react-native';\nimport ViewPager, {\n PageScrollStateChangedNativeEvent,\n} from 'react-native-pager-view';\nimport useAnimatedValue from './useAnimatedValue';\nimport type {\n NavigationState,\n Route,\n Listener,\n EventEmitterProps,\n PagerProps,\n} from './types';\n\nconst AnimatedViewPager = Animated.createAnimatedComponent(ViewPager);\n\ntype Props<T extends Route> = PagerProps & {\n onIndexChange: (index: number) => void;\n navigationState: NavigationState<T>;\n children: (\n props: EventEmitterProps & {\n // Animated value which represents the state of current index\n // It can include fractional digits as it represents the intermediate value\n position: Animated.AnimatedInterpolation;\n // Function to actually render the content of the pager\n // The parent component takes care of rendering\n render: (children: React.ReactNode) => React.ReactNode;\n // Callback to call when switching the tab\n // The tab switch animation is performed even if the index in state is unchanged\n jumpTo: (key: string) => void;\n }\n ) => React.ReactElement;\n};\n\nexport default function PagerViewAdapter<T extends Route>({\n keyboardDismissMode = 'auto',\n swipeEnabled = true,\n navigationState,\n onIndexChange,\n onSwipeStart,\n onSwipeEnd,\n children,\n style,\n ...rest\n}: Props<T>) {\n const { index } = navigationState;\n\n const listenersRef = React.useRef<Listener[]>([]);\n\n const pagerRef = React.useRef<ViewPager>();\n const indexRef = React.useRef<number>(index);\n const navigationStateRef = React.useRef(navigationState);\n\n const position = useAnimatedValue(index);\n const offset = useAnimatedValue(0);\n\n React.useEffect(() => {\n navigationStateRef.current = navigationState;\n });\n\n const jumpTo = React.useCallback((key: string) => {\n const index = navigationStateRef.current.routes.findIndex(\n (route: { key: string }) => route.key === key\n );\n\n pagerRef.current?.setPage(index);\n }, []);\n\n React.useEffect(() => {\n if (keyboardDismissMode === 'auto') {\n Keyboard.dismiss();\n }\n\n if (indexRef.current !== index) {\n pagerRef.current?.setPage(index);\n }\n }, [keyboardDismissMode, index]);\n\n const onPageScrollStateChanged = (\n state: PageScrollStateChangedNativeEvent\n ) => {\n const { pageScrollState } = state.nativeEvent;\n\n switch (pageScrollState) {\n case 'idle':\n onSwipeEnd?.();\n return;\n case 'dragging': {\n const subscription = offset.addListener(({ value }) => {\n const next =\n index + (value > 0 ? Math.ceil(value) : Math.floor(value));\n\n if (next !== index) {\n listenersRef.current.forEach((listener) => listener(next));\n }\n\n offset.removeListener(subscription);\n });\n\n onSwipeStart?.();\n return;\n }\n }\n };\n\n const addEnterListener = React.useCallback((listener: Listener) => {\n listenersRef.current.push(listener);\n\n return () => {\n const index = listenersRef.current.indexOf(listener);\n\n if (index > -1) {\n listenersRef.current.splice(index, 1);\n }\n };\n }, []);\n\n return children({\n position: Animated.add(position, offset),\n addEnterListener,\n jumpTo,\n render: (children) => (\n <AnimatedViewPager\n {...rest}\n ref={pagerRef}\n style={[styles.container, style]}\n initialPage={index}\n keyboardDismissMode={\n keyboardDismissMode === 'auto' ? 'on-drag' : keyboardDismissMode\n }\n onPageScroll={Animated.event(\n [\n {\n nativeEvent: {\n position: position,\n offset: offset,\n },\n },\n ],\n { useNativeDriver: true }\n )}\n onPageSelected={(e) => {\n const index = e.nativeEvent.position;\n indexRef.current = index;\n onIndexChange(index);\n }}\n onPageScrollStateChanged={onPageScrollStateChanged}\n scrollEnabled={swipeEnabled}\n >\n {children}\n </AnimatedViewPager>\n ),\n });\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"]}
1
+ {"version":3,"names":["AnimatedViewPager","Animated","createAnimatedComponent","ViewPager","PagerViewAdapter","keyboardDismissMode","swipeEnabled","navigationState","onIndexChange","onSwipeStart","onSwipeEnd","children","style","animationEnabled","rest","index","listenersRef","React","useRef","pagerRef","indexRef","navigationStateRef","position","useAnimatedValue","offset","useEffect","current","jumpTo","useCallback","key","routes","findIndex","route","setPage","setPageWithoutAnimation","setValue","Keyboard","dismiss","onPageScrollStateChanged","state","pageScrollState","nativeEvent","subscription","addListener","value","next","Math","ceil","floor","forEach","listener","removeListener","addEnterListener","push","indexOf","splice","add","render","styles","container","event","useNativeDriver","e","StyleSheet","create","flex"],"sources":["PagerViewAdapter.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Animated, Keyboard, StyleSheet } from 'react-native';\nimport ViewPager, {\n PageScrollStateChangedNativeEvent,\n} from 'react-native-pager-view';\nimport useAnimatedValue from './useAnimatedValue';\nimport type {\n NavigationState,\n Route,\n Listener,\n EventEmitterProps,\n PagerProps,\n} from './types';\n\nconst AnimatedViewPager = Animated.createAnimatedComponent(ViewPager);\n\ntype Props<T extends Route> = PagerProps & {\n onIndexChange: (index: number) => void;\n navigationState: NavigationState<T>;\n children: (\n props: EventEmitterProps & {\n // Animated value which represents the state of current index\n // It can include fractional digits as it represents the intermediate value\n position: Animated.AnimatedInterpolation;\n // Function to actually render the content of the pager\n // The parent component takes care of rendering\n render: (children: React.ReactNode) => React.ReactNode;\n // Callback to call when switching the tab\n // The tab switch animation is performed even if the index in state is unchanged\n jumpTo: (key: string) => void;\n }\n ) => React.ReactElement;\n};\n\nexport default function PagerViewAdapter<T extends Route>({\n keyboardDismissMode = 'auto',\n swipeEnabled = true,\n navigationState,\n onIndexChange,\n onSwipeStart,\n onSwipeEnd,\n children,\n style,\n animationEnabled,\n ...rest\n}: Props<T>) {\n const { index } = navigationState;\n\n const listenersRef = React.useRef<Listener[]>([]);\n\n const pagerRef = React.useRef<ViewPager>();\n const indexRef = React.useRef<number>(index);\n const navigationStateRef = React.useRef(navigationState);\n\n const position = useAnimatedValue(index);\n const offset = useAnimatedValue(0);\n\n React.useEffect(() => {\n navigationStateRef.current = navigationState;\n });\n\n const jumpTo = React.useCallback(\n (key: string) => {\n const index = navigationStateRef.current.routes.findIndex(\n (route: { key: string }) => route.key === key\n );\n\n if (animationEnabled) {\n pagerRef.current?.setPage(index);\n } else {\n pagerRef.current?.setPageWithoutAnimation(index);\n position.setValue(index);\n }\n },\n [animationEnabled, position]\n );\n\n React.useEffect(() => {\n if (keyboardDismissMode === 'auto') {\n Keyboard.dismiss();\n }\n\n if (indexRef.current !== index) {\n if (animationEnabled) {\n pagerRef.current?.setPage(index);\n } else {\n pagerRef.current?.setPageWithoutAnimation(index);\n position.setValue(index);\n }\n }\n }, [keyboardDismissMode, index, animationEnabled, position]);\n\n const onPageScrollStateChanged = (\n state: PageScrollStateChangedNativeEvent\n ) => {\n const { pageScrollState } = state.nativeEvent;\n\n switch (pageScrollState) {\n case 'idle':\n onSwipeEnd?.();\n return;\n case 'dragging': {\n const subscription = offset.addListener(({ value }) => {\n const next =\n index + (value > 0 ? Math.ceil(value) : Math.floor(value));\n\n if (next !== index) {\n listenersRef.current.forEach((listener) => listener(next));\n }\n\n offset.removeListener(subscription);\n });\n\n onSwipeStart?.();\n return;\n }\n }\n };\n\n const addEnterListener = React.useCallback((listener: Listener) => {\n listenersRef.current.push(listener);\n\n return () => {\n const index = listenersRef.current.indexOf(listener);\n\n if (index > -1) {\n listenersRef.current.splice(index, 1);\n }\n };\n }, []);\n\n return children({\n position: Animated.add(position, offset),\n addEnterListener,\n jumpTo,\n render: (children) => (\n <AnimatedViewPager\n {...rest}\n ref={pagerRef}\n style={[styles.container, style]}\n initialPage={index}\n keyboardDismissMode={\n keyboardDismissMode === 'auto' ? 'on-drag' : keyboardDismissMode\n }\n onPageScroll={Animated.event(\n [\n {\n nativeEvent: {\n position: position,\n offset: offset,\n },\n },\n ],\n { useNativeDriver: true }\n )}\n onPageSelected={(e) => {\n const index = e.nativeEvent.position;\n indexRef.current = index;\n onIndexChange(index);\n }}\n onPageScrollStateChanged={onPageScrollStateChanged}\n scrollEnabled={swipeEnabled}\n >\n {children}\n </AnimatedViewPager>\n ),\n });\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"],"mappings":"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"}
@@ -17,7 +17,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
17
17
 
18
18
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
19
 
20
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
20
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
21
21
 
22
22
  const DEAD_ZONE = 12;
23
23
  const DefaultTransitionSpec = {
@@ -28,17 +28,19 @@ const DefaultTransitionSpec = {
28
28
  overshootClamping: true
29
29
  };
30
30
 
31
- function PanResponderAdapter({
32
- layout,
33
- keyboardDismissMode = 'auto',
34
- swipeEnabled = true,
35
- navigationState,
36
- onIndexChange,
37
- onSwipeStart,
38
- onSwipeEnd,
39
- children,
40
- style
41
- }) {
31
+ function PanResponderAdapter(_ref) {
32
+ let {
33
+ layout,
34
+ keyboardDismissMode = 'auto',
35
+ swipeEnabled = true,
36
+ navigationState,
37
+ onIndexChange,
38
+ onSwipeStart,
39
+ onSwipeEnd,
40
+ children,
41
+ style,
42
+ animationEnabled = false
43
+ } = _ref;
42
44
  const {
43
45
  routes,
44
46
  index
@@ -52,27 +54,36 @@ function PanResponderAdapter({
52
54
  const pendingIndexRef = React.useRef();
53
55
  const swipeVelocityThreshold = 0.15;
54
56
  const swipeDistanceThreshold = layout.width / 1.75;
55
- const jumpToIndex = React.useCallback(index => {
57
+ const jumpToIndex = React.useCallback(function (index) {
58
+ let animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : animationEnabled;
56
59
  const offset = -index * layoutRef.current.width;
57
60
  const {
58
61
  timing,
59
62
  ...transitionConfig
60
63
  } = DefaultTransitionSpec;
61
64
 
62
- _reactNative.Animated.parallel([timing(panX, { ...transitionConfig,
63
- toValue: offset,
64
- useNativeDriver: false
65
- })]).start(({
66
- finished
67
- }) => {
68
- if (finished) {
69
- onIndexChangeRef.current(index);
70
- pendingIndexRef.current = undefined;
71
- }
72
- });
73
-
74
- pendingIndexRef.current = index;
75
- }, [panX]);
65
+ if (animate) {
66
+ _reactNative.Animated.parallel([timing(panX, { ...transitionConfig,
67
+ toValue: offset,
68
+ useNativeDriver: false
69
+ })]).start(_ref2 => {
70
+ let {
71
+ finished
72
+ } = _ref2;
73
+
74
+ if (finished) {
75
+ onIndexChangeRef.current(index);
76
+ pendingIndexRef.current = undefined;
77
+ }
78
+ });
79
+
80
+ pendingIndexRef.current = index;
81
+ } else {
82
+ panX.setValue(offset);
83
+ onIndexChangeRef.current(index);
84
+ pendingIndexRef.current = undefined;
85
+ }
86
+ }, [animationEnabled, panX]);
76
87
  React.useEffect(() => {
77
88
  navigationStateRef.current = navigationState;
78
89
  layoutRef.current = layout;
@@ -122,7 +133,8 @@ function PanResponderAdapter({
122
133
  const diffX = _reactNative.I18nManager.isRTL ? -gestureState.dx : gestureState.dx;
123
134
 
124
135
  if ( // swiping left
125
- diffX > 0 && index <= 0 || diffX < 0 && index >= routes.length - 1) {
136
+ diffX > 0 && index <= 0 || // swiping right
137
+ diffX < 0 && index >= routes.length - 1) {
126
138
  return;
127
139
  }
128
140
 
@@ -154,7 +166,7 @@ function PanResponderAdapter({
154
166
  nextIndex = currentIndex;
155
167
  }
156
168
 
157
- jumpToIndex(nextIndex);
169
+ jumpToIndex(nextIndex, true);
158
170
  }; // TODO: use the listeners
159
171
 
160
172
 
@@ -1 +1 @@
1
- {"version":3,"sources":["PanResponderAdapter.tsx"],"names":["DEAD_ZONE","DefaultTransitionSpec","timing","Animated","spring","stiffness","damping","mass","overshootClamping","PanResponderAdapter","layout","keyboardDismissMode","swipeEnabled","navigationState","onIndexChange","onSwipeStart","onSwipeEnd","children","style","routes","index","panX","listenersRef","React","useRef","navigationStateRef","layoutRef","onIndexChangeRef","currentIndexRef","pendingIndexRef","swipeVelocityThreshold","swipeDistanceThreshold","width","jumpToIndex","useCallback","offset","current","transitionConfig","parallel","toValue","useNativeDriver","start","finished","undefined","useEffect","setValue","Keyboard","dismiss","isMovingHorizontally","_","gestureState","Math","abs","dx","dy","vx","vy","canMoveScreen","event","diffX","I18nManager","isRTL","length","startGesture","stopAnimation","setOffset","_value","respondToGesture","position","_offset","next","ceil","floor","forEach","listener","finishGesture","flattenOffset","currentIndex","nextIndex","round","min","max","isFinite","addEnterListener","push","indexOf","splice","jumpTo","key","findIndex","route","panResponder","PanResponder","create","onMoveShouldSetPanResponder","onMoveShouldSetPanResponderCapture","onPanResponderGrant","onPanResponderMove","onPanResponderTerminate","onPanResponderRelease","onPanResponderTerminationRequest","maxTranslate","translateX","multiply","interpolate","inputRange","outputRange","extrapolate","divide","Value","render","styles","sheet","transform","panHandlers","Children","map","child","i","focused","StyleSheet","absoluteFill","flex","flexDirection","alignItems"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n PanResponder,\n Keyboard,\n StyleSheet,\n GestureResponderEvent,\n PanResponderGestureState,\n I18nManager,\n View,\n} from 'react-native';\nimport useAnimatedValue from './useAnimatedValue';\nimport type {\n NavigationState,\n Route,\n Layout,\n EventEmitterProps,\n PagerProps,\n Listener,\n} from './types';\n\ntype Props<T extends Route> = PagerProps & {\n layout: Layout;\n onIndexChange: (index: number) => void;\n navigationState: NavigationState<T>;\n children: (\n props: EventEmitterProps & {\n // Animated value which represents the state of current index\n // It can include fractional digits as it represents the intermediate value\n position: Animated.AnimatedInterpolation;\n // Function to actually render the content of the pager\n // The parent component takes care of rendering\n render: (children: React.ReactNode) => React.ReactNode;\n // Callback to call when switching the tab\n // The tab switch animation is performed even if the index in state is unchanged\n jumpTo: (key: string) => void;\n }\n ) => React.ReactElement;\n};\n\nconst DEAD_ZONE = 12;\n\nconst DefaultTransitionSpec = {\n timing: Animated.spring,\n stiffness: 1000,\n damping: 500,\n mass: 3,\n overshootClamping: true,\n};\n\nexport default function PanResponderAdapter<T extends Route>({\n layout,\n keyboardDismissMode = 'auto',\n swipeEnabled = true,\n navigationState,\n onIndexChange,\n onSwipeStart,\n onSwipeEnd,\n children,\n style,\n}: Props<T>) {\n const { routes, index } = navigationState;\n\n const panX = useAnimatedValue(0);\n\n const listenersRef = React.useRef<Listener[]>([]);\n\n const navigationStateRef = React.useRef(navigationState);\n const layoutRef = React.useRef(layout);\n const onIndexChangeRef = React.useRef(onIndexChange);\n\n const currentIndexRef = React.useRef(index);\n const pendingIndexRef = React.useRef<number>();\n\n const swipeVelocityThreshold = 0.15;\n const swipeDistanceThreshold = layout.width / 1.75;\n\n const jumpToIndex = React.useCallback(\n (index: number) => {\n const offset = -index * layoutRef.current.width;\n\n const { timing, ...transitionConfig } = DefaultTransitionSpec;\n\n Animated.parallel([\n timing(panX, {\n ...transitionConfig,\n toValue: offset,\n useNativeDriver: false,\n }),\n ]).start(({ finished }) => {\n if (finished) {\n onIndexChangeRef.current(index);\n pendingIndexRef.current = undefined;\n }\n });\n\n pendingIndexRef.current = index;\n },\n [panX]\n );\n\n React.useEffect(() => {\n navigationStateRef.current = navigationState;\n layoutRef.current = layout;\n onIndexChangeRef.current = onIndexChange;\n });\n\n React.useEffect(() => {\n const offset = -navigationStateRef.current.index * layout.width;\n\n panX.setValue(offset);\n }, [layout.width, panX]);\n\n React.useEffect(() => {\n if (keyboardDismissMode === 'auto') {\n Keyboard.dismiss();\n }\n\n if (layout.width && currentIndexRef.current !== index) {\n currentIndexRef.current = index;\n jumpToIndex(index);\n }\n }, [jumpToIndex, keyboardDismissMode, layout.width, index]);\n\n const isMovingHorizontally = (\n _: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n return (\n Math.abs(gestureState.dx) > Math.abs(gestureState.dy * 2) &&\n Math.abs(gestureState.vx) > Math.abs(gestureState.vy * 2)\n );\n };\n\n const canMoveScreen = (\n event: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n if (swipeEnabled === false) {\n return false;\n }\n\n const diffX = I18nManager.isRTL ? -gestureState.dx : gestureState.dx;\n\n return (\n isMovingHorizontally(event, gestureState) &&\n ((diffX >= DEAD_ZONE && currentIndexRef.current > 0) ||\n (diffX <= -DEAD_ZONE && currentIndexRef.current < routes.length - 1))\n );\n };\n\n const startGesture = () => {\n onSwipeStart?.();\n\n if (keyboardDismissMode === 'on-drag') {\n Keyboard.dismiss();\n }\n\n panX.stopAnimation();\n // @ts-expect-error: _value is private, but docs use it as well\n panX.setOffset(panX._value);\n };\n\n const respondToGesture = (\n _: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n const diffX = I18nManager.isRTL ? -gestureState.dx : gestureState.dx;\n\n if (\n // swiping left\n (diffX > 0 && index <= 0) ||\n // swiping right\n (diffX < 0 && index >= routes.length - 1)\n ) {\n return;\n }\n\n if (layout.width) {\n // @ts-expect-error: _offset is private, but docs use it as well\n const position = (panX._offset + diffX) / -layout.width;\n const next =\n position > index ? Math.ceil(position) : Math.floor(position);\n\n if (next !== index) {\n listenersRef.current.forEach((listener) => listener(next));\n }\n }\n\n panX.setValue(diffX);\n };\n\n const finishGesture = (\n _: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n panX.flattenOffset();\n\n onSwipeEnd?.();\n\n const currentIndex =\n typeof pendingIndexRef.current === 'number'\n ? pendingIndexRef.current\n : currentIndexRef.current;\n\n let nextIndex = currentIndex;\n\n if (\n Math.abs(gestureState.dx) > Math.abs(gestureState.dy) &&\n Math.abs(gestureState.vx) > Math.abs(gestureState.vy) &&\n (Math.abs(gestureState.dx) > swipeDistanceThreshold ||\n Math.abs(gestureState.vx) > swipeVelocityThreshold)\n ) {\n nextIndex = Math.round(\n Math.min(\n Math.max(\n 0,\n I18nManager.isRTL\n ? currentIndex + gestureState.dx / Math.abs(gestureState.dx)\n : currentIndex - gestureState.dx / Math.abs(gestureState.dx)\n ),\n routes.length - 1\n )\n );\n\n currentIndexRef.current = nextIndex;\n }\n\n if (!isFinite(nextIndex)) {\n nextIndex = currentIndex;\n }\n\n jumpToIndex(nextIndex);\n };\n\n // TODO: use the listeners\n const addEnterListener = React.useCallback((listener: Listener) => {\n listenersRef.current.push(listener);\n\n return () => {\n const index = listenersRef.current.indexOf(listener);\n\n if (index > -1) {\n listenersRef.current.splice(index, 1);\n }\n };\n }, []);\n\n const jumpTo = React.useCallback(\n (key: string) => {\n const index = navigationStateRef.current.routes.findIndex(\n (route: { key: string }) => route.key === key\n );\n\n jumpToIndex(index);\n },\n [jumpToIndex]\n );\n\n const panResponder = PanResponder.create({\n onMoveShouldSetPanResponder: canMoveScreen,\n onMoveShouldSetPanResponderCapture: canMoveScreen,\n onPanResponderGrant: startGesture,\n onPanResponderMove: respondToGesture,\n onPanResponderTerminate: finishGesture,\n onPanResponderRelease: finishGesture,\n onPanResponderTerminationRequest: () => true,\n });\n\n const maxTranslate = layout.width * (routes.length - 1);\n const translateX = Animated.multiply(\n panX.interpolate({\n inputRange: [-maxTranslate, 0],\n outputRange: [-maxTranslate, 0],\n extrapolate: 'clamp',\n }),\n I18nManager.isRTL ? -1 : 1\n );\n\n return children({\n position: layout.width\n ? Animated.divide(panX, -layout.width)\n : new Animated.Value(index),\n addEnterListener,\n jumpTo,\n render: (children) => (\n <Animated.View\n style={[\n styles.sheet,\n layout.width\n ? {\n width: routes.length * layout.width,\n transform: [{ translateX }],\n }\n : null,\n style,\n ]}\n {...panResponder.panHandlers}\n >\n {React.Children.map(children, (child, i) => {\n const route = routes[i];\n const focused = i === index;\n\n return (\n <View\n key={route.key}\n style={\n layout.width\n ? { width: layout.width }\n : focused\n ? StyleSheet.absoluteFill\n : null\n }\n >\n {focused || layout.width ? child : null}\n </View>\n );\n })}\n </Animated.View>\n ),\n });\n}\n\nconst styles = StyleSheet.create({\n sheet: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'stretch',\n },\n});\n"]}
1
+ {"version":3,"names":["DEAD_ZONE","DefaultTransitionSpec","timing","Animated","spring","stiffness","damping","mass","overshootClamping","PanResponderAdapter","layout","keyboardDismissMode","swipeEnabled","navigationState","onIndexChange","onSwipeStart","onSwipeEnd","children","style","animationEnabled","routes","index","panX","useAnimatedValue","listenersRef","React","useRef","navigationStateRef","layoutRef","onIndexChangeRef","currentIndexRef","pendingIndexRef","swipeVelocityThreshold","swipeDistanceThreshold","width","jumpToIndex","useCallback","animate","offset","current","transitionConfig","parallel","toValue","useNativeDriver","start","finished","undefined","setValue","useEffect","Keyboard","dismiss","isMovingHorizontally","_","gestureState","Math","abs","dx","dy","vx","vy","canMoveScreen","event","diffX","I18nManager","isRTL","length","startGesture","stopAnimation","setOffset","_value","respondToGesture","position","_offset","next","ceil","floor","forEach","listener","finishGesture","flattenOffset","currentIndex","nextIndex","round","min","max","isFinite","addEnterListener","push","indexOf","splice","jumpTo","key","findIndex","route","panResponder","PanResponder","create","onMoveShouldSetPanResponder","onMoveShouldSetPanResponderCapture","onPanResponderGrant","onPanResponderMove","onPanResponderTerminate","onPanResponderRelease","onPanResponderTerminationRequest","maxTranslate","translateX","multiply","interpolate","inputRange","outputRange","extrapolate","divide","Value","render","styles","sheet","transform","panHandlers","Children","map","child","i","focused","StyleSheet","absoluteFill","flex","flexDirection","alignItems"],"sources":["PanResponderAdapter.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n PanResponder,\n Keyboard,\n StyleSheet,\n GestureResponderEvent,\n PanResponderGestureState,\n I18nManager,\n View,\n} from 'react-native';\nimport useAnimatedValue from './useAnimatedValue';\nimport type {\n NavigationState,\n Route,\n Layout,\n EventEmitterProps,\n PagerProps,\n Listener,\n} from './types';\n\ntype Props<T extends Route> = PagerProps & {\n layout: Layout;\n onIndexChange: (index: number) => void;\n navigationState: NavigationState<T>;\n children: (\n props: EventEmitterProps & {\n // Animated value which represents the state of current index\n // It can include fractional digits as it represents the intermediate value\n position: Animated.AnimatedInterpolation;\n // Function to actually render the content of the pager\n // The parent component takes care of rendering\n render: (children: React.ReactNode) => React.ReactNode;\n // Callback to call when switching the tab\n // The tab switch animation is performed even if the index in state is unchanged\n jumpTo: (key: string) => void;\n }\n ) => React.ReactElement;\n};\n\nconst DEAD_ZONE = 12;\n\nconst DefaultTransitionSpec = {\n timing: Animated.spring,\n stiffness: 1000,\n damping: 500,\n mass: 3,\n overshootClamping: true,\n};\n\nexport default function PanResponderAdapter<T extends Route>({\n layout,\n keyboardDismissMode = 'auto',\n swipeEnabled = true,\n navigationState,\n onIndexChange,\n onSwipeStart,\n onSwipeEnd,\n children,\n style,\n animationEnabled = false,\n}: Props<T>) {\n const { routes, index } = navigationState;\n\n const panX = useAnimatedValue(0);\n\n const listenersRef = React.useRef<Listener[]>([]);\n\n const navigationStateRef = React.useRef(navigationState);\n const layoutRef = React.useRef(layout);\n const onIndexChangeRef = React.useRef(onIndexChange);\n\n const currentIndexRef = React.useRef(index);\n const pendingIndexRef = React.useRef<number>();\n\n const swipeVelocityThreshold = 0.15;\n const swipeDistanceThreshold = layout.width / 1.75;\n\n const jumpToIndex = React.useCallback(\n (index: number, animate = animationEnabled) => {\n const offset = -index * layoutRef.current.width;\n\n const { timing, ...transitionConfig } = DefaultTransitionSpec;\n\n if (animate) {\n Animated.parallel([\n timing(panX, {\n ...transitionConfig,\n toValue: offset,\n useNativeDriver: false,\n }),\n ]).start(({ finished }) => {\n if (finished) {\n onIndexChangeRef.current(index);\n pendingIndexRef.current = undefined;\n }\n });\n pendingIndexRef.current = index;\n } else {\n panX.setValue(offset);\n onIndexChangeRef.current(index);\n pendingIndexRef.current = undefined;\n }\n },\n [animationEnabled, panX]\n );\n\n React.useEffect(() => {\n navigationStateRef.current = navigationState;\n layoutRef.current = layout;\n onIndexChangeRef.current = onIndexChange;\n });\n\n React.useEffect(() => {\n const offset = -navigationStateRef.current.index * layout.width;\n\n panX.setValue(offset);\n }, [layout.width, panX]);\n\n React.useEffect(() => {\n if (keyboardDismissMode === 'auto') {\n Keyboard.dismiss();\n }\n\n if (layout.width && currentIndexRef.current !== index) {\n currentIndexRef.current = index;\n jumpToIndex(index);\n }\n }, [jumpToIndex, keyboardDismissMode, layout.width, index]);\n\n const isMovingHorizontally = (\n _: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n return (\n Math.abs(gestureState.dx) > Math.abs(gestureState.dy * 2) &&\n Math.abs(gestureState.vx) > Math.abs(gestureState.vy * 2)\n );\n };\n\n const canMoveScreen = (\n event: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n if (swipeEnabled === false) {\n return false;\n }\n\n const diffX = I18nManager.isRTL ? -gestureState.dx : gestureState.dx;\n\n return (\n isMovingHorizontally(event, gestureState) &&\n ((diffX >= DEAD_ZONE && currentIndexRef.current > 0) ||\n (diffX <= -DEAD_ZONE && currentIndexRef.current < routes.length - 1))\n );\n };\n\n const startGesture = () => {\n onSwipeStart?.();\n\n if (keyboardDismissMode === 'on-drag') {\n Keyboard.dismiss();\n }\n\n panX.stopAnimation();\n // @ts-expect-error: _value is private, but docs use it as well\n panX.setOffset(panX._value);\n };\n\n const respondToGesture = (\n _: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n const diffX = I18nManager.isRTL ? -gestureState.dx : gestureState.dx;\n\n if (\n // swiping left\n (diffX > 0 && index <= 0) ||\n // swiping right\n (diffX < 0 && index >= routes.length - 1)\n ) {\n return;\n }\n\n if (layout.width) {\n // @ts-expect-error: _offset is private, but docs use it as well\n const position = (panX._offset + diffX) / -layout.width;\n const next =\n position > index ? Math.ceil(position) : Math.floor(position);\n\n if (next !== index) {\n listenersRef.current.forEach((listener) => listener(next));\n }\n }\n\n panX.setValue(diffX);\n };\n\n const finishGesture = (\n _: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n panX.flattenOffset();\n\n onSwipeEnd?.();\n\n const currentIndex =\n typeof pendingIndexRef.current === 'number'\n ? pendingIndexRef.current\n : currentIndexRef.current;\n\n let nextIndex = currentIndex;\n\n if (\n Math.abs(gestureState.dx) > Math.abs(gestureState.dy) &&\n Math.abs(gestureState.vx) > Math.abs(gestureState.vy) &&\n (Math.abs(gestureState.dx) > swipeDistanceThreshold ||\n Math.abs(gestureState.vx) > swipeVelocityThreshold)\n ) {\n nextIndex = Math.round(\n Math.min(\n Math.max(\n 0,\n I18nManager.isRTL\n ? currentIndex + gestureState.dx / Math.abs(gestureState.dx)\n : currentIndex - gestureState.dx / Math.abs(gestureState.dx)\n ),\n routes.length - 1\n )\n );\n\n currentIndexRef.current = nextIndex;\n }\n\n if (!isFinite(nextIndex)) {\n nextIndex = currentIndex;\n }\n\n jumpToIndex(nextIndex, true);\n };\n\n // TODO: use the listeners\n const addEnterListener = React.useCallback((listener: Listener) => {\n listenersRef.current.push(listener);\n\n return () => {\n const index = listenersRef.current.indexOf(listener);\n\n if (index > -1) {\n listenersRef.current.splice(index, 1);\n }\n };\n }, []);\n\n const jumpTo = React.useCallback(\n (key: string) => {\n const index = navigationStateRef.current.routes.findIndex(\n (route: { key: string }) => route.key === key\n );\n\n jumpToIndex(index);\n },\n [jumpToIndex]\n );\n\n const panResponder = PanResponder.create({\n onMoveShouldSetPanResponder: canMoveScreen,\n onMoveShouldSetPanResponderCapture: canMoveScreen,\n onPanResponderGrant: startGesture,\n onPanResponderMove: respondToGesture,\n onPanResponderTerminate: finishGesture,\n onPanResponderRelease: finishGesture,\n onPanResponderTerminationRequest: () => true,\n });\n\n const maxTranslate = layout.width * (routes.length - 1);\n const translateX = Animated.multiply(\n panX.interpolate({\n inputRange: [-maxTranslate, 0],\n outputRange: [-maxTranslate, 0],\n extrapolate: 'clamp',\n }),\n I18nManager.isRTL ? -1 : 1\n );\n\n return children({\n position: layout.width\n ? Animated.divide(panX, -layout.width)\n : new Animated.Value(index),\n addEnterListener,\n jumpTo,\n render: (children) => (\n <Animated.View\n style={[\n styles.sheet,\n layout.width\n ? {\n width: routes.length * layout.width,\n transform: [{ translateX }],\n }\n : null,\n style,\n ]}\n {...panResponder.panHandlers}\n >\n {React.Children.map(children, (child, i) => {\n const route = routes[i];\n const focused = i === index;\n\n return (\n <View\n key={route.key}\n style={\n layout.width\n ? { width: layout.width }\n : focused\n ? StyleSheet.absoluteFill\n : null\n }\n >\n {focused || layout.width ? child : null}\n </View>\n );\n })}\n </Animated.View>\n ),\n });\n}\n\nconst styles = StyleSheet.create({\n sheet: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'stretch',\n },\n});\n"],"mappings":"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"}
@@ -13,7 +13,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
13
13
 
14
14
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
15
 
16
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
16
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
17
17
 
18
18
  const ANDROID_VERSION_LOLLIPOP = 21;
19
19
  const ANDROID_SUPPORTS_RIPPLE = _reactNative.Platform.OS === 'android' && _reactNative.Platform.Version >= ANDROID_VERSION_LOLLIPOP;
@@ -25,25 +25,29 @@ const ANDROID_SUPPORTS_RIPPLE = _reactNative.Platform.OS === 'android' && _react
25
25
  * On other platforms, you can pass the props of TouchableOpacity.
26
26
  */
27
27
 
28
- function PlatformPressable({
29
- android_ripple,
30
- pressColor = 'rgba(0, 0, 0, .32)',
31
- pressOpacity,
32
- style,
33
- ...rest
34
- }) {
28
+ function PlatformPressable(_ref) {
29
+ let {
30
+ android_ripple,
31
+ pressColor = 'rgba(0, 0, 0, .32)',
32
+ pressOpacity,
33
+ style,
34
+ ...rest
35
+ } = _ref;
35
36
  return /*#__PURE__*/React.createElement(_reactNative.Pressable, _extends({
36
37
  android_ripple: ANDROID_SUPPORTS_RIPPLE ? {
37
38
  color: pressColor,
38
39
  ...android_ripple
39
40
  } : undefined,
40
- style: ({
41
- pressed
42
- }) => [{
43
- opacity: pressed && !ANDROID_SUPPORTS_RIPPLE ? pressOpacity : 1
44
- }, typeof style === 'function' ? style({
45
- pressed
46
- }) : style]
41
+ style: _ref2 => {
42
+ let {
43
+ pressed
44
+ } = _ref2;
45
+ return [{
46
+ opacity: pressed && !ANDROID_SUPPORTS_RIPPLE ? pressOpacity : 1
47
+ }, typeof style === 'function' ? style({
48
+ pressed
49
+ }) : style];
50
+ }
47
51
  }, rest));
48
52
  }
49
53
  //# sourceMappingURL=PlatformPressable.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["PlatformPressable.tsx"],"names":["ANDROID_VERSION_LOLLIPOP","ANDROID_SUPPORTS_RIPPLE","Platform","OS","Version","PlatformPressable","android_ripple","pressColor","pressOpacity","style","rest","color","undefined","pressed","opacity"],"mappings":";;;;;;;AAAA;;AACA;;;;;;;;AAQA,MAAMA,wBAAwB,GAAG,EAAjC;AACA,MAAMC,uBAAuB,GAC3BC,sBAASC,EAAT,KAAgB,SAAhB,IAA6BD,sBAASE,OAAT,IAAoBJ,wBADnD;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASK,iBAAT,CAA2B;AACxCC,EAAAA,cADwC;AAExCC,EAAAA,UAAU,GAAG,oBAF2B;AAGxCC,EAAAA,YAHwC;AAIxCC,EAAAA,KAJwC;AAKxC,KAAGC;AALqC,CAA3B,EAML;AACR,sBACE,oBAAC,sBAAD;AACE,IAAA,cAAc,EACZT,uBAAuB,GACnB;AAAEU,MAAAA,KAAK,EAAEJ,UAAT;AAAqB,SAAGD;AAAxB,KADmB,GAEnBM,SAJR;AAME,IAAA,KAAK,EAAE,CAAC;AAAEC,MAAAA;AAAF,KAAD,KAAiB,CACtB;AAAEC,MAAAA,OAAO,EAAED,OAAO,IAAI,CAACZ,uBAAZ,GAAsCO,YAAtC,GAAqD;AAAhE,KADsB,EAEtB,OAAOC,KAAP,KAAiB,UAAjB,GAA8BA,KAAK,CAAC;AAAEI,MAAAA;AAAF,KAAD,CAAnC,GAAmDJ,KAF7B;AAN1B,KAUMC,IAVN,EADF;AAcD","sourcesContent":["import * as React from 'react';\nimport { Platform, Pressable, PressableProps } from 'react-native';\n\nexport type Props = PressableProps & {\n pressColor?: string;\n pressOpacity?: number;\n children: React.ReactNode;\n};\n\nconst ANDROID_VERSION_LOLLIPOP = 21;\nconst ANDROID_SUPPORTS_RIPPLE =\n Platform.OS === 'android' && Platform.Version >= ANDROID_VERSION_LOLLIPOP;\n\n/**\n * PlatformPressable provides an abstraction on top of TouchableNativeFeedback and\n * TouchableOpacity to handle platform differences.\n *\n * On Android, you can pass the props of TouchableNativeFeedback.\n * On other platforms, you can pass the props of TouchableOpacity.\n */\nexport default function PlatformPressable({\n android_ripple,\n pressColor = 'rgba(0, 0, 0, .32)',\n pressOpacity,\n style,\n ...rest\n}: Props) {\n return (\n <Pressable\n android_ripple={\n ANDROID_SUPPORTS_RIPPLE\n ? { color: pressColor, ...android_ripple }\n : undefined\n }\n style={({ pressed }) => [\n { opacity: pressed && !ANDROID_SUPPORTS_RIPPLE ? pressOpacity : 1 },\n typeof style === 'function' ? style({ pressed }) : style,\n ]}\n {...rest}\n />\n );\n}\n"]}
1
+ {"version":3,"names":["ANDROID_VERSION_LOLLIPOP","ANDROID_SUPPORTS_RIPPLE","Platform","OS","Version","PlatformPressable","android_ripple","pressColor","pressOpacity","style","rest","color","undefined","pressed","opacity"],"sources":["PlatformPressable.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Platform, Pressable, PressableProps } from 'react-native';\n\nexport type Props = PressableProps & {\n pressColor?: string;\n pressOpacity?: number;\n children: React.ReactNode;\n};\n\nconst ANDROID_VERSION_LOLLIPOP = 21;\nconst ANDROID_SUPPORTS_RIPPLE =\n Platform.OS === 'android' && Platform.Version >= ANDROID_VERSION_LOLLIPOP;\n\n/**\n * PlatformPressable provides an abstraction on top of TouchableNativeFeedback and\n * TouchableOpacity to handle platform differences.\n *\n * On Android, you can pass the props of TouchableNativeFeedback.\n * On other platforms, you can pass the props of TouchableOpacity.\n */\nexport default function PlatformPressable({\n android_ripple,\n pressColor = 'rgba(0, 0, 0, .32)',\n pressOpacity,\n style,\n ...rest\n}: Props) {\n return (\n <Pressable\n android_ripple={\n ANDROID_SUPPORTS_RIPPLE\n ? { color: pressColor, ...android_ripple }\n : undefined\n }\n style={({ pressed }) => [\n { opacity: pressed && !ANDROID_SUPPORTS_RIPPLE ? pressOpacity : 1 },\n typeof style === 'function' ? style({ pressed }) : style,\n ]}\n {...rest}\n />\n );\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;;;;;;;AAQA,MAAMA,wBAAwB,GAAG,EAAjC;AACA,MAAMC,uBAAuB,GAC3BC,qBAAA,CAASC,EAAT,KAAgB,SAAhB,IAA6BD,qBAAA,CAASE,OAAT,IAAoBJ,wBADnD;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASK,iBAAT,OAML;EAAA,IANgC;IACxCC,cADwC;IAExCC,UAAU,GAAG,oBAF2B;IAGxCC,YAHwC;IAIxCC,KAJwC;IAKxC,GAAGC;EALqC,CAMhC;EACR,oBACE,oBAAC,sBAAD;IACE,cAAc,EACZT,uBAAuB,GACnB;MAAEU,KAAK,EAAEJ,UAAT;MAAqB,GAAGD;IAAxB,CADmB,GAEnBM,SAJR;IAME,KAAK,EAAE;MAAA,IAAC;QAAEC;MAAF,CAAD;MAAA,OAAiB,CACtB;QAAEC,OAAO,EAAED,OAAO,IAAI,CAACZ,uBAAZ,GAAsCO,YAAtC,GAAqD;MAAhE,CADsB,EAEtB,OAAOC,KAAP,KAAiB,UAAjB,GAA8BA,KAAK,CAAC;QAAEI;MAAF,CAAD,CAAnC,GAAmDJ,KAF7B,CAAjB;IAAA;EANT,GAUMC,IAVN,EADF;AAcD"}
@@ -23,16 +23,19 @@ class SceneComponent extends React.PureComponent {
23
23
  }
24
24
 
25
25
  function SceneMap(scenes) {
26
- return ({
27
- route,
28
- jumpTo,
29
- position
30
- }) => /*#__PURE__*/React.createElement(SceneComponent, {
31
- key: route.key,
32
- component: scenes[route.key],
33
- route: route,
34
- jumpTo: jumpTo,
35
- position: position
36
- });
26
+ return _ref => {
27
+ let {
28
+ route,
29
+ jumpTo,
30
+ position
31
+ } = _ref;
32
+ return /*#__PURE__*/React.createElement(SceneComponent, {
33
+ key: route.key,
34
+ component: scenes[route.key],
35
+ route: route,
36
+ jumpTo: jumpTo,
37
+ position: position
38
+ });
39
+ };
37
40
  }
38
41
  //# sourceMappingURL=SceneMap.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["SceneMap.tsx"],"names":["SceneComponent","React","PureComponent","render","component","rest","props","createElement","SceneMap","scenes","route","jumpTo","position","key"],"mappings":";;;;;;;AAAA;;;;;;AAGA,MAAMA,cAAN,SAEUC,KAAK,CAACC,aAFhB,CAEiC;AAC/BC,EAAAA,MAAM,GAAG;AACP,UAAM;AAAEC,MAAAA,SAAF;AAAa,SAAGC;AAAhB,QAAyB,KAAKC,KAApC;AACA,wBAAOL,KAAK,CAACM,aAAN,CAAoBH,SAApB,EAA+BC,IAA/B,CAAP;AACD;;AAJ8B;;AAOlB,SAASG,QAAT,CAAiCC,MAAjC,EAEZ;AACD,SAAO,CAAC;AAAEC,IAAAA,KAAF;AAASC,IAAAA,MAAT;AAAiBC,IAAAA;AAAjB,GAAD,kBACL,oBAAC,cAAD;AACE,IAAA,GAAG,EAAEF,KAAK,CAACG,GADb;AAEE,IAAA,SAAS,EAAEJ,MAAM,CAACC,KAAK,CAACG,GAAP,CAFnB;AAGE,IAAA,KAAK,EAAEH,KAHT;AAIE,IAAA,MAAM,EAAEC,MAJV;AAKE,IAAA,QAAQ,EAAEC;AALZ,IADF;AASD","sourcesContent":["import * as React from 'react';\nimport type { SceneRendererProps } from './types';\n\nclass SceneComponent<\n T extends { component: React.ComponentType<any> }\n> extends React.PureComponent<T> {\n render() {\n const { component, ...rest } = this.props;\n return React.createElement(component, rest);\n }\n}\n\nexport default function SceneMap<T extends any>(scenes: {\n [key: string]: React.ComponentType<T>;\n}) {\n return ({ route, jumpTo, position }: SceneRendererProps & { route: any }) => (\n <SceneComponent\n key={route.key}\n component={scenes[route.key]}\n route={route}\n jumpTo={jumpTo}\n position={position}\n />\n );\n}\n"]}
1
+ {"version":3,"names":["SceneComponent","React","PureComponent","render","component","rest","props","createElement","SceneMap","scenes","route","jumpTo","position","key"],"sources":["SceneMap.tsx"],"sourcesContent":["import * as React from 'react';\nimport type { SceneRendererProps } from './types';\n\nclass SceneComponent<\n T extends { component: React.ComponentType<any> }\n> extends React.PureComponent<T> {\n render() {\n const { component, ...rest } = this.props;\n return React.createElement(component, rest);\n }\n}\n\nexport default function SceneMap<T extends any>(scenes: {\n [key: string]: React.ComponentType<T>;\n}) {\n return ({ route, jumpTo, position }: SceneRendererProps & { route: any }) => (\n <SceneComponent\n key={route.key}\n component={scenes[route.key]}\n route={route}\n jumpTo={jumpTo}\n position={position}\n />\n );\n}\n"],"mappings":";;;;;;;AAAA;;;;;;AAGA,MAAMA,cAAN,SAEUC,KAAK,CAACC,aAFhB,CAEiC;EAC/BC,MAAM,GAAG;IACP,MAAM;MAAEC,SAAF;MAAa,GAAGC;IAAhB,IAAyB,KAAKC,KAApC;IACA,oBAAOL,KAAK,CAACM,aAAN,CAAoBH,SAApB,EAA+BC,IAA/B,CAAP;EACD;;AAJ8B;;AAOlB,SAASG,QAAT,CAAiCC,MAAjC,EAEZ;EACD,OAAO;IAAA,IAAC;MAAEC,KAAF;MAASC,MAAT;MAAiBC;IAAjB,CAAD;IAAA,oBACL,oBAAC,cAAD;MACE,GAAG,EAAEF,KAAK,CAACG,GADb;MAEE,SAAS,EAAEJ,MAAM,CAACC,KAAK,CAACG,GAAP,CAFnB;MAGE,KAAK,EAAEH,KAHT;MAIE,MAAM,EAAEC,MAJV;MAKE,QAAQ,EAAEC;IALZ,EADK;EAAA,CAAP;AASD"}
@@ -16,8 +16,8 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
16
16
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
17
 
18
18
  class SceneView extends React.Component {
19
- constructor(...args) {
20
- super(...args);
19
+ constructor() {
20
+ super(...arguments);
21
21
 
22
22
  _defineProperty(this, "state", {
23
23
  loading: Math.abs(this.props.navigationState.index - this.props.index) > this.props.lazyPreloadDistance
@@ -1 +1 @@
1
- {"version":3,"sources":["SceneView.tsx"],"names":["SceneView","React","Component","loading","Math","abs","props","navigationState","index","lazyPreloadDistance","value","setState","prevState","getDerivedStateFromProps","state","componentDidMount","lazy","unsubscribe","addEnterListener","handleEnter","timerHandler","setTimeout","componentDidUpdate","prevProps","componentWillUnmount","clearTimeout","undefined","render","layout","style","focused","styles","route","width","StyleSheet","absoluteFill","children","create","flex","overflow"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { View, StyleSheet, StyleProp, ViewStyle } from 'react-native';\nimport type {\n SceneRendererProps,\n EventEmitterProps,\n NavigationState,\n Route,\n} from './types';\n\ntype Props<T extends Route> = SceneRendererProps &\n EventEmitterProps & {\n navigationState: NavigationState<T>;\n lazy: boolean;\n lazyPreloadDistance: number;\n index: number;\n children: (props: { loading: boolean }) => React.ReactNode;\n style?: StyleProp<ViewStyle>;\n };\n\ntype State = {\n loading: boolean;\n};\n\nexport default class SceneView<T extends Route> extends React.Component<\n Props<T>,\n State\n> {\n static getDerivedStateFromProps(props: Props<Route>, state: State) {\n if (\n state.loading &&\n Math.abs(props.navigationState.index - props.index) <=\n props.lazyPreloadDistance\n ) {\n // Always render the route when it becomes focused\n return { loading: false };\n }\n\n return null;\n }\n\n state = {\n loading:\n Math.abs(this.props.navigationState.index - this.props.index) >\n this.props.lazyPreloadDistance,\n };\n\n componentDidMount() {\n if (this.props.lazy) {\n // If lazy mode is enabled, listen to when we enter screens\n this.unsubscribe = this.props.addEnterListener(this.handleEnter);\n } else if (this.state.loading) {\n // If lazy mode is not enabled, render the scene with a delay if not loaded already\n // This improves the initial startup time as the scene is no longer blocking\n this.timerHandler = setTimeout(\n () => this.setState({ loading: false }),\n 0\n );\n }\n }\n\n componentDidUpdate(prevProps: Props<T>, prevState: State) {\n if (\n this.props.lazy !== prevProps.lazy ||\n this.state.loading !== prevState.loading\n ) {\n // We only need the listener if the tab hasn't loaded yet and lazy is enabled\n if (this.props.lazy && this.state.loading) {\n this.unsubscribe?.();\n this.unsubscribe = this.props.addEnterListener(this.handleEnter);\n } else {\n this.unsubscribe?.();\n }\n }\n }\n\n componentWillUnmount() {\n this.unsubscribe?.();\n\n if (this.timerHandler) {\n clearTimeout(this.timerHandler);\n this.timerHandler = undefined;\n }\n }\n\n private timerHandler: NodeJS.Timeout | undefined;\n\n private unsubscribe: (() => void) | null = null;\n\n private handleEnter = (value: number) => {\n const { index } = this.props;\n\n // If we're entering the current route, we need to load it\n if (value === index) {\n this.setState((prevState) => {\n if (prevState.loading) {\n return { loading: false };\n }\n\n return null;\n });\n }\n };\n\n render() {\n const { navigationState, index, layout, style } = this.props;\n const { loading } = this.state;\n\n const focused = navigationState.index === index;\n\n return (\n <View\n accessibilityElementsHidden={!focused}\n importantForAccessibility={focused ? 'auto' : 'no-hide-descendants'}\n style={[\n styles.route,\n // If we don't have the layout yet, make the focused screen fill the container\n // This avoids delay before we are able to render pages side by side\n layout.width\n ? { width: layout.width }\n : focused\n ? StyleSheet.absoluteFill\n : null,\n style,\n ]}\n >\n {\n // Only render the route only if it's either focused or layout is available\n // When layout is not available, we must not render unfocused routes\n // so that the focused route can fill the screen\n focused || layout.width ? this.props.children({ loading }) : null\n }\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n route: {\n flex: 1,\n overflow: 'hidden',\n },\n});\n"]}
1
+ {"version":3,"names":["SceneView","React","Component","loading","Math","abs","props","navigationState","index","lazyPreloadDistance","value","setState","prevState","getDerivedStateFromProps","state","componentDidMount","lazy","unsubscribe","addEnterListener","handleEnter","timerHandler","setTimeout","componentDidUpdate","prevProps","componentWillUnmount","clearTimeout","undefined","render","layout","style","focused","styles","route","width","StyleSheet","absoluteFill","children","create","flex","overflow"],"sources":["SceneView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { View, StyleSheet, StyleProp, ViewStyle } from 'react-native';\nimport type {\n SceneRendererProps,\n EventEmitterProps,\n NavigationState,\n Route,\n} from './types';\n\ntype Props<T extends Route> = SceneRendererProps &\n EventEmitterProps & {\n navigationState: NavigationState<T>;\n lazy: boolean;\n lazyPreloadDistance: number;\n index: number;\n children: (props: { loading: boolean }) => React.ReactNode;\n style?: StyleProp<ViewStyle>;\n };\n\ntype State = {\n loading: boolean;\n};\n\nexport default class SceneView<T extends Route> extends React.Component<\n Props<T>,\n State\n> {\n static getDerivedStateFromProps(props: Props<Route>, state: State) {\n if (\n state.loading &&\n Math.abs(props.navigationState.index - props.index) <=\n props.lazyPreloadDistance\n ) {\n // Always render the route when it becomes focused\n return { loading: false };\n }\n\n return null;\n }\n\n state = {\n loading:\n Math.abs(this.props.navigationState.index - this.props.index) >\n this.props.lazyPreloadDistance,\n };\n\n componentDidMount() {\n if (this.props.lazy) {\n // If lazy mode is enabled, listen to when we enter screens\n this.unsubscribe = this.props.addEnterListener(this.handleEnter);\n } else if (this.state.loading) {\n // If lazy mode is not enabled, render the scene with a delay if not loaded already\n // This improves the initial startup time as the scene is no longer blocking\n this.timerHandler = setTimeout(\n () => this.setState({ loading: false }),\n 0\n );\n }\n }\n\n componentDidUpdate(prevProps: Props<T>, prevState: State) {\n if (\n this.props.lazy !== prevProps.lazy ||\n this.state.loading !== prevState.loading\n ) {\n // We only need the listener if the tab hasn't loaded yet and lazy is enabled\n if (this.props.lazy && this.state.loading) {\n this.unsubscribe?.();\n this.unsubscribe = this.props.addEnterListener(this.handleEnter);\n } else {\n this.unsubscribe?.();\n }\n }\n }\n\n componentWillUnmount() {\n this.unsubscribe?.();\n\n if (this.timerHandler) {\n clearTimeout(this.timerHandler);\n this.timerHandler = undefined;\n }\n }\n\n private timerHandler: NodeJS.Timeout | undefined;\n\n private unsubscribe: (() => void) | null = null;\n\n private handleEnter = (value: number) => {\n const { index } = this.props;\n\n // If we're entering the current route, we need to load it\n if (value === index) {\n this.setState((prevState) => {\n if (prevState.loading) {\n return { loading: false };\n }\n\n return null;\n });\n }\n };\n\n render() {\n const { navigationState, index, layout, style } = this.props;\n const { loading } = this.state;\n\n const focused = navigationState.index === index;\n\n return (\n <View\n accessibilityElementsHidden={!focused}\n importantForAccessibility={focused ? 'auto' : 'no-hide-descendants'}\n style={[\n styles.route,\n // If we don't have the layout yet, make the focused screen fill the container\n // This avoids delay before we are able to render pages side by side\n layout.width\n ? { width: layout.width }\n : focused\n ? StyleSheet.absoluteFill\n : null,\n style,\n ]}\n >\n {\n // Only render the route only if it's either focused or layout is available\n // When layout is not available, we must not render unfocused routes\n // so that the focused route can fill the screen\n focused || layout.width ? this.props.children({ loading }) : null\n }\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n route: {\n flex: 1,\n overflow: 'hidden',\n },\n});\n"],"mappings":"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"}