react-native-reanimated-carousel 2.1.2 → 2.2.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.
Files changed (53) hide show
  1. package/README.md +10 -7
  2. package/README.zh-CN.md +11 -5
  3. package/lib/commonjs/Carousel.js +29 -21
  4. package/lib/commonjs/Carousel.js.map +1 -1
  5. package/lib/commonjs/ScrollViewGesture.js +29 -21
  6. package/lib/commonjs/ScrollViewGesture.js.map +1 -1
  7. package/lib/commonjs/hooks/useAutoPlay.js +27 -13
  8. package/lib/commonjs/hooks/useAutoPlay.js.map +1 -1
  9. package/lib/commonjs/hooks/useCarouselController.js +84 -24
  10. package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
  11. package/lib/commonjs/hooks/useInitProps.js +13 -9
  12. package/lib/commonjs/hooks/useInitProps.js.map +1 -1
  13. package/lib/commonjs/hooks/useOnProgressChange.js +5 -5
  14. package/lib/commonjs/hooks/useOnProgressChange.js.map +1 -1
  15. package/lib/commonjs/layouts/stack.js.map +1 -1
  16. package/lib/module/Carousel.js +26 -21
  17. package/lib/module/Carousel.js.map +1 -1
  18. package/lib/module/ScrollViewGesture.js +27 -21
  19. package/lib/module/ScrollViewGesture.js.map +1 -1
  20. package/lib/module/hooks/useAutoPlay.js +27 -13
  21. package/lib/module/hooks/useAutoPlay.js.map +1 -1
  22. package/lib/module/hooks/useCarouselController.js +82 -24
  23. package/lib/module/hooks/useCarouselController.js.map +1 -1
  24. package/lib/module/hooks/useInitProps.js +13 -9
  25. package/lib/module/hooks/useInitProps.js.map +1 -1
  26. package/lib/module/hooks/useOnProgressChange.js +5 -5
  27. package/lib/module/hooks/useOnProgressChange.js.map +1 -1
  28. package/lib/module/layouts/stack.js.map +1 -1
  29. package/lib/typescript/Carousel.d.ts +3 -4
  30. package/lib/typescript/ScrollViewGesture.d.ts +3 -1
  31. package/lib/typescript/hooks/useAutoPlay.d.ts +1 -1
  32. package/lib/typescript/hooks/useCarouselController.d.ts +5 -3
  33. package/lib/typescript/hooks/useInitProps.d.ts +4 -5
  34. package/lib/typescript/hooks/useOnProgressChange.d.ts +2 -1
  35. package/lib/typescript/layouts/stack.d.ts +1 -1
  36. package/lib/typescript/types.d.ts +22 -4
  37. package/package.json +5 -2
  38. package/src/Carousel.tsx +203 -185
  39. package/src/ScrollViewGesture.tsx +52 -25
  40. package/src/hooks/useAutoPlay.ts +25 -22
  41. package/src/hooks/useCarouselController.tsx +101 -42
  42. package/src/hooks/useInitProps.ts +30 -15
  43. package/src/hooks/useOnProgressChange.ts +7 -6
  44. package/src/layouts/stack.ts +1 -1
  45. package/src/types.ts +23 -4
  46. package/CHANGELOG.md +0 -361
  47. package/lib/commonjs/hooks/useIndexController.js +0 -65
  48. package/lib/commonjs/hooks/useIndexController.js.map +0 -1
  49. package/lib/module/hooks/useIndexController.js +0 -52
  50. package/lib/module/hooks/useIndexController.js.map +0 -1
  51. package/lib/typescript/hooks/useIndexController.d.ts +0 -18
  52. package/src/.DS_Store +0 -0
  53. package/src/hooks/useIndexController.ts +0 -78
@@ -1 +1 @@
1
- {"version":3,"sources":["useInitProps.ts"],"names":["React","DATA_LENGTH","useInitProps","props","defaultIndex","data","_data","loop","autoPlayInterval","style","panGestureHandlerProps","pagingEnabled","enableSnap","width","_width","height","_height","Math","round","useMemo","length","SINGLE_ITEM","DOUBLE_ITEM","mode","modeConfig","showLength"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,WAAT,QAA4B,cAA5B;AAUA,OAAO,SAASC,YAAT,CACHC,KADG,EAEwB;AAC3B,QAAM;AACFC,IAAAA,YAAY,GAAG,CADb;AAEFC,IAAAA,IAAI,EAAEC,KAAK,GAAG,EAFZ;AAGFC,IAAAA,IAAI,GAAG,IAHL;AAIFC,IAAAA,gBAAgB,GAAG,IAJjB;AAKFC,IAAAA,KAAK,GAAG,EALN;AAMFC,IAAAA,sBAAsB,GAAG,EANvB;AAOFC,IAAAA,aAAa,GAAG,IAPd;AAQFC,IAAAA,UAAU,GAAG,IARX;AASFC,IAAAA,KAAK,EAAEC,MATL;AAUFC,IAAAA,MAAM,EAAEC;AAVN,MAWFb,KAXJ;AAaA,QAAMU,KAAK,GAAGI,IAAI,CAACC,KAAL,CAAWJ,MAAM,IAAI,CAArB,CAAd;AACA,QAAMC,MAAM,GAAGE,IAAI,CAACC,KAAL,CAAWF,OAAO,IAAI,CAAtB,CAAf;AAEA,QAAMX,IAAI,GAAGL,KAAK,CAACmB,OAAN,CAAmB,MAAM;AAClC,QAAI,CAACZ,IAAL,EAAW,OAAOD,KAAP;;AAEX,QAAIA,KAAK,CAACc,MAAN,KAAiBnB,WAAW,CAACoB,WAAjC,EAA8C;AAC1C,aAAO,CAACf,KAAK,CAAC,CAAD,CAAN,EAAWA,KAAK,CAAC,CAAD,CAAhB,EAAqBA,KAAK,CAAC,CAAD,CAA1B,CAAP;AACH;;AAED,QAAIA,KAAK,CAACc,MAAN,KAAiBnB,WAAW,CAACqB,WAAjC,EAA8C;AAC1C,aAAO,CAAChB,KAAK,CAAC,CAAD,CAAN,EAAWA,KAAK,CAAC,CAAD,CAAhB,EAAqBA,KAAK,CAAC,CAAD,CAA1B,EAA+BA,KAAK,CAAC,CAAD,CAApC,CAAP;AACH;;AAED,WAAOA,KAAP;AACH,GAZY,EAYV,CAACA,KAAD,EAAQC,IAAR,CAZU,CAAb;;AAcA,MAAIJ,KAAK,CAACoB,IAAN,KAAe,gBAAf,IAAmCpB,KAAK,CAACoB,IAAN,KAAe,kBAAtD,EAA0E;AAAA;;AACtE,QAAI,CAACpB,KAAK,CAACqB,UAAX,EAAuB;AACnBrB,MAAAA,KAAK,CAACqB,UAAN,GAAmB,EAAnB;AACH;;AACDrB,IAAAA,KAAK,CAACqB,UAAN,CAAiBC,UAAjB,iDACItB,KAAK,CAACqB,UADV,sDACI,kBAAkBC,UADtB,yEACoCpB,IAAI,CAACe,MAAL,GAAc,CADlD;AAEH;;AACD,SAAO,EACH,GAAGjB,KADA;AAEHC,IAAAA,YAFG;AAGHC,IAAAA,IAHG;AAIHE,IAAAA,IAJG;AAKHC,IAAAA,gBALG;AAMHC,IAAAA,KANG;AAOHC,IAAAA,sBAPG;AAQHC,IAAAA,aARG;AASHC,IAAAA,UATG;AAUHC,IAAAA,KAVG;AAWHE,IAAAA;AAXG,GAAP;AAaH","sourcesContent":["import React from 'react';\nimport { DATA_LENGTH } from '../constants';\nimport type { TCarouselProps } from '../types';\n\nexport type TInitializeCarouselProps<T> = TCarouselProps<T> & {\n defaultIndex: Required<TCarouselProps>['defaultIndex'];\n loop: Required<TCarouselProps>['loop'];\n width: Required<TCarouselProps>['width'];\n height: Required<TCarouselProps>['height'];\n};\n\nexport function useInitProps<T>(\n props: TCarouselProps<T>\n): TInitializeCarouselProps<T> {\n const {\n defaultIndex = 0,\n data: _data = [],\n loop = true,\n autoPlayInterval = 1000,\n style = {},\n panGestureHandlerProps = {},\n pagingEnabled = true,\n enableSnap = true,\n width: _width,\n height: _height,\n } = props;\n\n const width = Math.round(_width || 0);\n const height = Math.round(_height || 0);\n\n const data = React.useMemo<T[]>(() => {\n if (!loop) return _data;\n\n if (_data.length === DATA_LENGTH.SINGLE_ITEM) {\n return [_data[0], _data[0], _data[0]];\n }\n\n if (_data.length === DATA_LENGTH.DOUBLE_ITEM) {\n return [_data[0], _data[1], _data[0], _data[1]];\n }\n\n return _data;\n }, [_data, loop]);\n\n if (props.mode === 'vertical-stack' || props.mode === 'horizontal-stack') {\n if (!props.modeConfig) {\n props.modeConfig = {};\n }\n props.modeConfig.showLength =\n props.modeConfig?.showLength ?? data.length - 1;\n }\n return {\n ...props,\n defaultIndex,\n data,\n loop,\n autoPlayInterval,\n style,\n panGestureHandlerProps,\n pagingEnabled,\n enableSnap,\n width,\n height,\n };\n}\n"]}
1
+ {"version":3,"sources":["useInitProps.ts"],"names":["React","DATA_LENGTH","useInitProps","props","defaultIndex","data","rawData","loop","autoPlayInterval","_autoPlayInterval","scrollAnimationDuration","style","panGestureHandlerProps","pagingEnabled","enableSnap","width","_width","height","_height","Math","round","max","useMemo","length","SINGLE_ITEM","DOUBLE_ITEM","mode","modeConfig","showLength"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,WAAT,QAA4B,cAA5B;AAqBA,OAAO,SAASC,YAAT,CACHC,KADG,EAEwB;AAC3B,QAAM;AACFC,IAAAA,YAAY,GAAG,CADb;AAEFC,IAAAA,IAAI,EAAEC,OAAO,GAAG,EAFd;AAGFC,IAAAA,IAAI,GAAG,IAHL;AAIFC,IAAAA,gBAAgB,EAAEC,iBAAiB,GAAG,IAJpC;AAKFC,IAAAA,uBAAuB,GAAG,GALxB;AAMFC,IAAAA,KAAK,GAAG,EANN;AAOFC,IAAAA,sBAAsB,GAAG,EAPvB;AAQFC,IAAAA,aAAa,GAAG,IARd;AASFC,IAAAA,UAAU,GAAG,IATX;AAUFC,IAAAA,KAAK,EAAEC,MAVL;AAWFC,IAAAA,MAAM,EAAEC;AAXN,MAYFf,KAZJ;AAcA,QAAMY,KAAK,GAAGI,IAAI,CAACC,KAAL,CAAWJ,MAAM,IAAI,CAArB,CAAd;AACA,QAAMC,MAAM,GAAGE,IAAI,CAACC,KAAL,CAAWF,OAAO,IAAI,CAAtB,CAAf;AACA,QAAMV,gBAAgB,GAAGW,IAAI,CAACE,GAAL,CAASZ,iBAAT,EAA4B,CAA5B,CAAzB;AAEA,QAAMJ,IAAI,GAAGL,KAAK,CAACsB,OAAN,CAAmB,MAAM;AAClC,QAAI,CAACf,IAAL,EAAW,OAAOD,OAAP;;AAEX,QAAIA,OAAO,CAACiB,MAAR,KAAmBtB,WAAW,CAACuB,WAAnC,EAAgD;AAC5C,aAAO,CAAClB,OAAO,CAAC,CAAD,CAAR,EAAaA,OAAO,CAAC,CAAD,CAApB,EAAyBA,OAAO,CAAC,CAAD,CAAhC,CAAP;AACH;;AAED,QAAIA,OAAO,CAACiB,MAAR,KAAmBtB,WAAW,CAACwB,WAAnC,EAAgD;AAC5C,aAAO,CAACnB,OAAO,CAAC,CAAD,CAAR,EAAaA,OAAO,CAAC,CAAD,CAApB,EAAyBA,OAAO,CAAC,CAAD,CAAhC,EAAqCA,OAAO,CAAC,CAAD,CAA5C,CAAP;AACH;;AAED,WAAOA,OAAP;AACH,GAZY,EAYV,CAACA,OAAD,EAAUC,IAAV,CAZU,CAAb;;AAcA,MAAIJ,KAAK,CAACuB,IAAN,KAAe,gBAAf,IAAmCvB,KAAK,CAACuB,IAAN,KAAe,kBAAtD,EAA0E;AAAA;;AACtE,QAAI,CAACvB,KAAK,CAACwB,UAAX,EAAuB;AACnBxB,MAAAA,KAAK,CAACwB,UAAN,GAAmB,EAAnB;AACH;;AACDxB,IAAAA,KAAK,CAACwB,UAAN,CAAiBC,UAAjB,iDACIzB,KAAK,CAACwB,UADV,sDACI,kBAAkBC,UADtB,yEACoCvB,IAAI,CAACkB,MAAL,GAAc,CADlD;AAEH;;AACD,SAAO,EACH,GAAGpB,KADA;AAEHC,IAAAA,YAFG;AAGHC,IAAAA,IAHG;AAIHC,IAAAA,OAJG;AAKHC,IAAAA,IALG;AAMHC,IAAAA,gBANG;AAOHE,IAAAA,uBAPG;AAQHC,IAAAA,KARG;AASHC,IAAAA,sBATG;AAUHC,IAAAA,aAVG;AAWHC,IAAAA,UAXG;AAYHC,IAAAA,KAZG;AAaHE,IAAAA;AAbG,GAAP;AAeH","sourcesContent":["import React from 'react';\nimport { DATA_LENGTH } from '../constants';\nimport type { TCarouselProps } from '../types';\n\ntype TGetRequiredProps<P extends keyof TCarouselProps> = Record<\n P,\n Required<TCarouselProps>[P]\n>;\n\nexport type TInitializeCarouselProps<T> = TCarouselProps<T> &\n TGetRequiredProps<\n | 'defaultIndex'\n | 'loop'\n | 'width'\n | 'height'\n | 'scrollAnimationDuration'\n | 'autoPlayInterval'\n > & {\n // Raw data that has not been processed\n rawData: T[];\n };\n\nexport function useInitProps<T>(\n props: TCarouselProps<T>\n): TInitializeCarouselProps<T> {\n const {\n defaultIndex = 0,\n data: rawData = [],\n loop = true,\n autoPlayInterval: _autoPlayInterval = 1000,\n scrollAnimationDuration = 500,\n style = {},\n panGestureHandlerProps = {},\n pagingEnabled = true,\n enableSnap = true,\n width: _width,\n height: _height,\n } = props;\n\n const width = Math.round(_width || 0);\n const height = Math.round(_height || 0);\n const autoPlayInterval = Math.max(_autoPlayInterval, 0);\n\n const data = React.useMemo<T[]>(() => {\n if (!loop) return rawData;\n\n if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {\n return [rawData[0], rawData[0], rawData[0]];\n }\n\n if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {\n return [rawData[0], rawData[1], rawData[0], rawData[1]];\n }\n\n return rawData;\n }, [rawData, loop]);\n\n if (props.mode === 'vertical-stack' || props.mode === 'horizontal-stack') {\n if (!props.modeConfig) {\n props.modeConfig = {};\n }\n props.modeConfig.showLength =\n props.modeConfig?.showLength ?? data.length - 1;\n }\n return {\n ...props,\n defaultIndex,\n data,\n rawData,\n loop,\n autoPlayInterval,\n scrollAnimationDuration,\n style,\n panGestureHandlerProps,\n pagingEnabled,\n enableSnap,\n width,\n height,\n };\n}\n"]}
@@ -3,28 +3,28 @@ import { DATA_LENGTH } from '../constants';
3
3
  export function useOnProgressChange(opts) {
4
4
  const {
5
5
  offsetX,
6
- data,
6
+ rawData,
7
7
  size,
8
8
  onProgressChange
9
9
  } = opts;
10
10
  useAnimatedReaction(() => offsetX.value, _value => {
11
11
  let value = _value;
12
12
 
13
- if (data.length === DATA_LENGTH.SINGLE_ITEM) {
13
+ if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {
14
14
  value = value % size;
15
15
  }
16
16
 
17
- if (data.length === DATA_LENGTH.DOUBLE_ITEM) {
17
+ if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
18
18
  value = value % (size * 2);
19
19
  }
20
20
 
21
21
  let absoluteProgress = Math.abs(value / size);
22
22
 
23
23
  if (value > 0) {
24
- absoluteProgress = data.length - absoluteProgress;
24
+ absoluteProgress = rawData.length - absoluteProgress;
25
25
  }
26
26
 
27
27
  !!onProgressChange && runOnJS(onProgressChange)(value, absoluteProgress);
28
- }, [onProgressChange, data]);
28
+ }, [onProgressChange, rawData]);
29
29
  }
30
30
  //# sourceMappingURL=useOnProgressChange.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["useOnProgressChange.ts"],"names":["runOnJS","useAnimatedReaction","DATA_LENGTH","useOnProgressChange","opts","offsetX","data","size","onProgressChange","value","_value","length","SINGLE_ITEM","DOUBLE_ITEM","absoluteProgress","Math","abs"],"mappings":"AAAA,SACIA,OADJ,EAEIC,mBAFJ,QAGO,yBAHP;AAIA,SAASC,WAAT,QAA4B,cAA5B;AAGA,OAAO,SAASC,mBAAT,CACHC,IADG,EAKL;AACE,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,IAAX;AAAiBC,IAAAA,IAAjB;AAAuBC,IAAAA;AAAvB,MAA4CJ,IAAlD;AACAH,EAAAA,mBAAmB,CACf,MAAMI,OAAO,CAACI,KADC,EAEdC,MAAD,IAAY;AACR,QAAID,KAAK,GAAGC,MAAZ;;AAEA,QAAIJ,IAAI,CAACK,MAAL,KAAgBT,WAAW,CAACU,WAAhC,EAA6C;AACzCH,MAAAA,KAAK,GAAGA,KAAK,GAAGF,IAAhB;AACH;;AAED,QAAID,IAAI,CAACK,MAAL,KAAgBT,WAAW,CAACW,WAAhC,EAA6C;AACzCJ,MAAAA,KAAK,GAAGA,KAAK,IAAIF,IAAI,GAAG,CAAX,CAAb;AACH;;AAED,QAAIO,gBAAgB,GAAGC,IAAI,CAACC,GAAL,CAASP,KAAK,GAAGF,IAAjB,CAAvB;;AAEA,QAAIE,KAAK,GAAG,CAAZ,EAAe;AACXK,MAAAA,gBAAgB,GAAGR,IAAI,CAACK,MAAL,GAAcG,gBAAjC;AACH;;AAED,KAAC,CAACN,gBAAF,IACIR,OAAO,CAACQ,gBAAD,CAAP,CAA0BC,KAA1B,EAAiCK,gBAAjC,CADJ;AAEH,GArBc,EAsBf,CAACN,gBAAD,EAAmBF,IAAnB,CAtBe,CAAnB;AAwBH","sourcesContent":["import Animated, {\n runOnJS,\n useAnimatedReaction,\n} from 'react-native-reanimated';\nimport { DATA_LENGTH } from '../constants';\nimport type { TCarouselProps } from '../types';\n\nexport function useOnProgressChange(\n opts: {\n size: number;\n offsetX: Animated.SharedValue<number>;\n } & Pick<TCarouselProps, 'data' | 'onProgressChange'>\n) {\n const { offsetX, data, size, onProgressChange } = opts;\n useAnimatedReaction(\n () => offsetX.value,\n (_value) => {\n let value = _value;\n\n if (data.length === DATA_LENGTH.SINGLE_ITEM) {\n value = value % size;\n }\n\n if (data.length === DATA_LENGTH.DOUBLE_ITEM) {\n value = value % (size * 2);\n }\n\n let absoluteProgress = Math.abs(value / size);\n\n if (value > 0) {\n absoluteProgress = data.length - absoluteProgress;\n }\n\n !!onProgressChange &&\n runOnJS(onProgressChange)(value, absoluteProgress);\n },\n [onProgressChange, data]\n );\n}\n"]}
1
+ {"version":3,"sources":["useOnProgressChange.ts"],"names":["runOnJS","useAnimatedReaction","DATA_LENGTH","useOnProgressChange","opts","offsetX","rawData","size","onProgressChange","value","_value","length","SINGLE_ITEM","DOUBLE_ITEM","absoluteProgress","Math","abs"],"mappings":"AAAA,SACIA,OADJ,EAEIC,mBAFJ,QAGO,yBAHP;AAIA,SAASC,WAAT,QAA4B,cAA5B;AAGA,OAAO,SAASC,mBAAT,CACHC,IADG,EAML;AACE,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,OAAX;AAAoBC,IAAAA,IAApB;AAA0BC,IAAAA;AAA1B,MAA+CJ,IAArD;AACAH,EAAAA,mBAAmB,CACf,MAAMI,OAAO,CAACI,KADC,EAEdC,MAAD,IAAY;AACR,QAAID,KAAK,GAAGC,MAAZ;;AAEA,QAAIJ,OAAO,CAACK,MAAR,KAAmBT,WAAW,CAACU,WAAnC,EAAgD;AAC5CH,MAAAA,KAAK,GAAGA,KAAK,GAAGF,IAAhB;AACH;;AAED,QAAID,OAAO,CAACK,MAAR,KAAmBT,WAAW,CAACW,WAAnC,EAAgD;AAC5CJ,MAAAA,KAAK,GAAGA,KAAK,IAAIF,IAAI,GAAG,CAAX,CAAb;AACH;;AAED,QAAIO,gBAAgB,GAAGC,IAAI,CAACC,GAAL,CAASP,KAAK,GAAGF,IAAjB,CAAvB;;AAEA,QAAIE,KAAK,GAAG,CAAZ,EAAe;AACXK,MAAAA,gBAAgB,GAAGR,OAAO,CAACK,MAAR,GAAiBG,gBAApC;AACH;;AAED,KAAC,CAACN,gBAAF,IACIR,OAAO,CAACQ,gBAAD,CAAP,CAA0BC,KAA1B,EAAiCK,gBAAjC,CADJ;AAEH,GArBc,EAsBf,CAACN,gBAAD,EAAmBF,OAAnB,CAtBe,CAAnB;AAwBH","sourcesContent":["import Animated, {\n runOnJS,\n useAnimatedReaction,\n} from 'react-native-reanimated';\nimport { DATA_LENGTH } from '../constants';\nimport type { TCarouselProps } from '../types';\n\nexport function useOnProgressChange(\n opts: {\n size: number;\n offsetX: Animated.SharedValue<number>;\n rawData: TCarouselProps['data'];\n } & Pick<TCarouselProps, 'onProgressChange'>\n) {\n const { offsetX, rawData, size, onProgressChange } = opts;\n useAnimatedReaction(\n () => offsetX.value,\n (_value) => {\n let value = _value;\n\n if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {\n value = value % size;\n }\n\n if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {\n value = value % (size * 2);\n }\n\n let absoluteProgress = Math.abs(value / size);\n\n if (value > 0) {\n absoluteProgress = rawData.length - absoluteProgress;\n }\n\n !!onProgressChange &&\n runOnJS(onProgressChange)(value, absoluteProgress);\n },\n [onProgressChange, rawData]\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["stack.ts"],"names":["useMemo","Dimensions","Extrapolate","interpolate","screen","get","horizontalStackLayout","modeConfig","_value","showLength","snapDirection","moveSize","width","stackInterval","scaleInterval","opacityInterval","rotateZDeg","transform","validLength","value","inputRange","getCommonVariables","zIndex","opacity","getCommonStyles","styles","translateX","scale","rotateZ","CLAMP","push","useHorizontalStackLayout","customAnimationConfig","customConfig","config","type","viewCount","layout","verticalStackLayout","translateY","opts","easeInOutCubic","v","Math","pow","page","floor","abs","diff","Error","Number","MIN_VALUE"],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\nimport { Dimensions, TransformsStyle, ViewStyle } from 'react-native';\nimport { Extrapolate, interpolate } from 'react-native-reanimated';\nimport type { ComputedDirectionTypes, CustomConfig } from 'src/types';\n\nconst screen = Dimensions.get('window');\n\nexport interface ILayoutConfig {\n showLength?: number;\n moveSize?: number;\n stackInterval?: number;\n scaleInterval?: number;\n opacityInterval?: number;\n rotateZDeg?: number;\n snapDirection?: 'left' | 'right';\n}\n\nexport type TStackModeProps = ComputedDirectionTypes<{\n /**\n * Carousel Animated transitions.\n */\n mode?: 'horizontal-stack' | 'vertical-stack';\n /**\n * Stack animation style.\n * @default\n * mode: 'vertical',\n * snapDirection: 'right',\n * moveSize: window.width,\n * stackInterval: 30,\n * scaleInterval: 0.08,\n * rotateZDeg: 135,\n */\n modeConfig?: ILayoutConfig;\n}>;\n\nexport function horizontalStackLayout(modeConfig: ILayoutConfig = {}) {\n return (_value: number) => {\n 'worklet';\n\n const {\n showLength,\n snapDirection = 'left',\n moveSize = screen.width,\n stackInterval = 18,\n scaleInterval = 0.04,\n opacityInterval = 0.1,\n rotateZDeg = 30,\n } = modeConfig;\n\n const transform: TransformsStyle['transform'] = [];\n const { validLength, value, inputRange } = getCommonVariables({\n showLength: showLength!,\n value: _value,\n snapDirection,\n });\n const { zIndex, opacity } = getCommonStyles({\n validLength,\n value,\n opacityInterval,\n snapDirection,\n });\n\n const styles: ViewStyle = {\n transform,\n zIndex,\n opacity,\n };\n\n let translateX: number;\n let scale: number;\n let rotateZ: string;\n\n if (snapDirection === 'left') {\n translateX = interpolate(\n value,\n inputRange,\n [-moveSize, 0, validLength * stackInterval],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1, 1, 1 - validLength * scaleInterval],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [-rotateZDeg, 0, 0],\n Extrapolate.CLAMP\n )}deg`;\n } else if (snapDirection === 'right') {\n translateX = interpolate(\n value,\n inputRange,\n [-validLength * stackInterval, 0, moveSize],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1 - validLength * scaleInterval, 1, 1],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [0, 0, rotateZDeg],\n Extrapolate.CLAMP\n )}deg`;\n }\n\n transform.push(\n {\n translateX: translateX!,\n },\n {\n scale: scale!,\n },\n {\n rotateZ: rotateZ!,\n }\n );\n\n return styles;\n };\n}\n\nexport function useHorizontalStackLayout(\n customAnimationConfig: ILayoutConfig = {},\n customConfig: CustomConfig = {}\n) {\n const config = useMemo(\n () => ({\n type:\n customAnimationConfig.snapDirection === 'right'\n ? 'negative'\n : 'positive',\n viewCount: customAnimationConfig.showLength,\n ...customConfig,\n }),\n [customAnimationConfig, customConfig]\n );\n\n return {\n layout: horizontalStackLayout(customAnimationConfig),\n config,\n };\n}\n\nexport function verticalStackLayout(modeConfig: ILayoutConfig = {}) {\n return (_value: number) => {\n 'worklet';\n\n const {\n showLength,\n snapDirection = 'left',\n moveSize = screen.width,\n stackInterval = 18,\n scaleInterval = 0.04,\n opacityInterval = 0.1,\n rotateZDeg = 30,\n } = modeConfig;\n const transform: TransformsStyle['transform'] = [];\n const { validLength, value, inputRange } = getCommonVariables({\n showLength: showLength!,\n value: _value,\n snapDirection,\n });\n const { zIndex, opacity } = getCommonStyles({\n validLength,\n value,\n opacityInterval,\n snapDirection,\n });\n\n const styles: ViewStyle = {\n transform,\n zIndex,\n opacity,\n };\n\n let translateX: number;\n let scale: number;\n let rotateZ: string;\n let translateY: number;\n\n if (snapDirection === 'left') {\n translateX = interpolate(\n value,\n inputRange,\n [-moveSize, 0, 0],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1, 1, 1 - validLength * scaleInterval],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [-rotateZDeg, 0, 0],\n Extrapolate.CLAMP\n )}deg`;\n translateY = interpolate(\n value,\n inputRange,\n [0, 0, validLength * stackInterval],\n Extrapolate.CLAMP\n );\n } else if (snapDirection === 'right') {\n translateX = interpolate(\n value,\n inputRange,\n [0, 0, moveSize],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1 - validLength * scaleInterval, 1, 1],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [0, 0, rotateZDeg],\n Extrapolate.CLAMP\n )}deg`;\n translateY = interpolate(\n value,\n inputRange,\n [validLength * stackInterval, 0, 0],\n Extrapolate.CLAMP\n );\n }\n\n transform.push(\n {\n translateX: translateX!,\n },\n {\n scale: scale!,\n },\n {\n rotateZ: rotateZ!,\n },\n {\n translateY: translateY!,\n }\n );\n\n return styles;\n };\n}\n\nfunction getCommonVariables(opts: {\n value: number;\n showLength: number;\n snapDirection: 'left' | 'right';\n}) {\n 'worklet';\n\n const { showLength, value: _value, snapDirection } = opts;\n function easeInOutCubic(v: number): number {\n return v < 0.5 ? 4 * v * v * v : 1 - Math.pow(-2 * v + 2, 3) / 2;\n }\n const page = Math.floor(Math.abs(_value));\n const diff = Math.abs(_value) % 1;\n const value =\n _value < 0\n ? -(page + easeInOutCubic(diff))\n : page + easeInOutCubic(diff);\n const validLength = showLength! - 1;\n\n let inputRange: [number, number, number];\n\n if (snapDirection === 'left') {\n inputRange = [-1, 0, validLength];\n } else if (snapDirection === 'right') {\n inputRange = [-validLength, 0, 1];\n } else {\n throw Error('snapDirection must be set to either left or right');\n }\n\n return {\n inputRange,\n validLength,\n value,\n };\n}\n\nfunction getCommonStyles(opts: {\n value: number;\n validLength: number;\n opacityInterval: number;\n snapDirection: 'left' | 'right';\n}) {\n 'worklet';\n\n const { snapDirection, validLength, value, opacityInterval } = opts;\n\n let zIndex: number;\n let opacity: number;\n\n if (snapDirection === 'left') {\n zIndex =\n Math.floor(\n interpolate(\n value,\n [-1.5, -1, -1 + Number.MIN_VALUE, 0, validLength],\n [\n Number.MIN_VALUE,\n validLength,\n validLength,\n validLength - 1,\n -1,\n ]\n ) * 10000\n ) / 100;\n\n opacity = interpolate(\n value,\n [-1, 0, validLength - 1, validLength],\n [0.25, 1, 1 - (validLength - 1) * opacityInterval, 0.25]\n );\n } else if (snapDirection === 'right') {\n zIndex =\n Math.floor(\n interpolate(\n value,\n [-validLength, 0, 1 - Number.MIN_VALUE, 1, 1.5],\n [\n 1,\n validLength - 1,\n validLength,\n validLength,\n Number.MIN_VALUE,\n ]\n ) * 10000\n ) / 100;\n opacity = interpolate(\n value,\n [-validLength, 1 - validLength, 0, 1],\n [0.25, 1 - (validLength - 1) * opacityInterval, 1, 0.25]\n );\n } else {\n throw Error('snapDirection must be set to either left or right');\n }\n\n return {\n zIndex,\n opacity,\n };\n}\n"]}
1
+ {"version":3,"sources":["stack.ts"],"names":["useMemo","Dimensions","Extrapolate","interpolate","screen","get","horizontalStackLayout","modeConfig","_value","showLength","snapDirection","moveSize","width","stackInterval","scaleInterval","opacityInterval","rotateZDeg","transform","validLength","value","inputRange","getCommonVariables","zIndex","opacity","getCommonStyles","styles","translateX","scale","rotateZ","CLAMP","push","useHorizontalStackLayout","customAnimationConfig","customConfig","config","type","viewCount","layout","verticalStackLayout","translateY","opts","easeInOutCubic","v","Math","pow","page","floor","abs","diff","Error","Number","MIN_VALUE"],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\nimport { Dimensions, TransformsStyle, ViewStyle } from 'react-native';\nimport { Extrapolate, interpolate } from 'react-native-reanimated';\nimport type { ComputedDirectionTypes, CustomConfig } from '../types';\n\nconst screen = Dimensions.get('window');\n\nexport interface ILayoutConfig {\n showLength?: number;\n moveSize?: number;\n stackInterval?: number;\n scaleInterval?: number;\n opacityInterval?: number;\n rotateZDeg?: number;\n snapDirection?: 'left' | 'right';\n}\n\nexport type TStackModeProps = ComputedDirectionTypes<{\n /**\n * Carousel Animated transitions.\n */\n mode?: 'horizontal-stack' | 'vertical-stack';\n /**\n * Stack animation style.\n * @default\n * mode: 'vertical',\n * snapDirection: 'right',\n * moveSize: window.width,\n * stackInterval: 30,\n * scaleInterval: 0.08,\n * rotateZDeg: 135,\n */\n modeConfig?: ILayoutConfig;\n}>;\n\nexport function horizontalStackLayout(modeConfig: ILayoutConfig = {}) {\n return (_value: number) => {\n 'worklet';\n\n const {\n showLength,\n snapDirection = 'left',\n moveSize = screen.width,\n stackInterval = 18,\n scaleInterval = 0.04,\n opacityInterval = 0.1,\n rotateZDeg = 30,\n } = modeConfig;\n\n const transform: TransformsStyle['transform'] = [];\n const { validLength, value, inputRange } = getCommonVariables({\n showLength: showLength!,\n value: _value,\n snapDirection,\n });\n const { zIndex, opacity } = getCommonStyles({\n validLength,\n value,\n opacityInterval,\n snapDirection,\n });\n\n const styles: ViewStyle = {\n transform,\n zIndex,\n opacity,\n };\n\n let translateX: number;\n let scale: number;\n let rotateZ: string;\n\n if (snapDirection === 'left') {\n translateX = interpolate(\n value,\n inputRange,\n [-moveSize, 0, validLength * stackInterval],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1, 1, 1 - validLength * scaleInterval],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [-rotateZDeg, 0, 0],\n Extrapolate.CLAMP\n )}deg`;\n } else if (snapDirection === 'right') {\n translateX = interpolate(\n value,\n inputRange,\n [-validLength * stackInterval, 0, moveSize],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1 - validLength * scaleInterval, 1, 1],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [0, 0, rotateZDeg],\n Extrapolate.CLAMP\n )}deg`;\n }\n\n transform.push(\n {\n translateX: translateX!,\n },\n {\n scale: scale!,\n },\n {\n rotateZ: rotateZ!,\n }\n );\n\n return styles;\n };\n}\n\nexport function useHorizontalStackLayout(\n customAnimationConfig: ILayoutConfig = {},\n customConfig: CustomConfig = {}\n) {\n const config = useMemo(\n () => ({\n type:\n customAnimationConfig.snapDirection === 'right'\n ? 'negative'\n : 'positive',\n viewCount: customAnimationConfig.showLength,\n ...customConfig,\n }),\n [customAnimationConfig, customConfig]\n );\n\n return {\n layout: horizontalStackLayout(customAnimationConfig),\n config,\n };\n}\n\nexport function verticalStackLayout(modeConfig: ILayoutConfig = {}) {\n return (_value: number) => {\n 'worklet';\n\n const {\n showLength,\n snapDirection = 'left',\n moveSize = screen.width,\n stackInterval = 18,\n scaleInterval = 0.04,\n opacityInterval = 0.1,\n rotateZDeg = 30,\n } = modeConfig;\n const transform: TransformsStyle['transform'] = [];\n const { validLength, value, inputRange } = getCommonVariables({\n showLength: showLength!,\n value: _value,\n snapDirection,\n });\n const { zIndex, opacity } = getCommonStyles({\n validLength,\n value,\n opacityInterval,\n snapDirection,\n });\n\n const styles: ViewStyle = {\n transform,\n zIndex,\n opacity,\n };\n\n let translateX: number;\n let scale: number;\n let rotateZ: string;\n let translateY: number;\n\n if (snapDirection === 'left') {\n translateX = interpolate(\n value,\n inputRange,\n [-moveSize, 0, 0],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1, 1, 1 - validLength * scaleInterval],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [-rotateZDeg, 0, 0],\n Extrapolate.CLAMP\n )}deg`;\n translateY = interpolate(\n value,\n inputRange,\n [0, 0, validLength * stackInterval],\n Extrapolate.CLAMP\n );\n } else if (snapDirection === 'right') {\n translateX = interpolate(\n value,\n inputRange,\n [0, 0, moveSize],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1 - validLength * scaleInterval, 1, 1],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [0, 0, rotateZDeg],\n Extrapolate.CLAMP\n )}deg`;\n translateY = interpolate(\n value,\n inputRange,\n [validLength * stackInterval, 0, 0],\n Extrapolate.CLAMP\n );\n }\n\n transform.push(\n {\n translateX: translateX!,\n },\n {\n scale: scale!,\n },\n {\n rotateZ: rotateZ!,\n },\n {\n translateY: translateY!,\n }\n );\n\n return styles;\n };\n}\n\nfunction getCommonVariables(opts: {\n value: number;\n showLength: number;\n snapDirection: 'left' | 'right';\n}) {\n 'worklet';\n\n const { showLength, value: _value, snapDirection } = opts;\n function easeInOutCubic(v: number): number {\n return v < 0.5 ? 4 * v * v * v : 1 - Math.pow(-2 * v + 2, 3) / 2;\n }\n const page = Math.floor(Math.abs(_value));\n const diff = Math.abs(_value) % 1;\n const value =\n _value < 0\n ? -(page + easeInOutCubic(diff))\n : page + easeInOutCubic(diff);\n const validLength = showLength! - 1;\n\n let inputRange: [number, number, number];\n\n if (snapDirection === 'left') {\n inputRange = [-1, 0, validLength];\n } else if (snapDirection === 'right') {\n inputRange = [-validLength, 0, 1];\n } else {\n throw Error('snapDirection must be set to either left or right');\n }\n\n return {\n inputRange,\n validLength,\n value,\n };\n}\n\nfunction getCommonStyles(opts: {\n value: number;\n validLength: number;\n opacityInterval: number;\n snapDirection: 'left' | 'right';\n}) {\n 'worklet';\n\n const { snapDirection, validLength, value, opacityInterval } = opts;\n\n let zIndex: number;\n let opacity: number;\n\n if (snapDirection === 'left') {\n zIndex =\n Math.floor(\n interpolate(\n value,\n [-1.5, -1, -1 + Number.MIN_VALUE, 0, validLength],\n [\n Number.MIN_VALUE,\n validLength,\n validLength,\n validLength - 1,\n -1,\n ]\n ) * 10000\n ) / 100;\n\n opacity = interpolate(\n value,\n [-1, 0, validLength - 1, validLength],\n [0.25, 1, 1 - (validLength - 1) * opacityInterval, 0.25]\n );\n } else if (snapDirection === 'right') {\n zIndex =\n Math.floor(\n interpolate(\n value,\n [-validLength, 0, 1 - Number.MIN_VALUE, 1, 1.5],\n [\n 1,\n validLength - 1,\n validLength,\n validLength,\n Number.MIN_VALUE,\n ]\n ) * 10000\n ) / 100;\n opacity = interpolate(\n value,\n [-validLength, 1 - validLength, 0, 1],\n [0.25, 1 - (validLength - 1) * opacityInterval, 1, 0.25]\n );\n } else {\n throw Error('snapDirection must be set to either left or right');\n }\n\n return {\n zIndex,\n opacity,\n };\n}\n"]}
@@ -1,5 +1,4 @@
1
- import React, { PropsWithChildren } from 'react';
2
- import type { ICarouselInstance, TCarouselProps } from './types';
3
- declare function Carousel<T>(_props: PropsWithChildren<TCarouselProps<T>>, ref: React.Ref<ICarouselInstance>): JSX.Element;
4
- declare const _default: typeof Carousel;
1
+ import React from 'react';
2
+ import type { TCarouselProps } from './types';
3
+ declare const _default: <T extends unknown>(props: React.PropsWithChildren<TCarouselProps<T>>) => React.ReactElement;
5
4
  export default _default;
@@ -4,8 +4,10 @@ import Animated from 'react-native-reanimated';
4
4
  interface Props {
5
5
  size: number;
6
6
  infinite?: boolean;
7
- onScrollEnd?: () => void;
8
7
  onScrollBegin?: () => void;
8
+ onScrollEnd?: () => void;
9
+ onTouchBegin?: () => void;
10
+ onTouchEnd?: () => void;
9
11
  style?: StyleProp<ViewStyle>;
10
12
  translation: Animated.SharedValue<number>;
11
13
  }
@@ -5,6 +5,6 @@ export declare function useAutoPlay(opts: {
5
5
  autoPlayReverse?: boolean;
6
6
  carouselController: ICarouselController;
7
7
  }): {
8
- run: () => void;
9
8
  pause: () => void;
9
+ start: () => void;
10
10
  };
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import type Animated from 'react-native-reanimated';
3
+ import type { TCarouselActionOptions } from '../types';
3
4
  interface IOpts {
4
5
  loop: boolean;
5
6
  size: number;
@@ -17,11 +18,12 @@ export interface ICarouselController {
17
18
  index: Animated.SharedValue<number>;
18
19
  sharedIndex: React.MutableRefObject<number>;
19
20
  sharedPreIndex: React.MutableRefObject<number>;
20
- prev: () => void;
21
- next: () => void;
21
+ prev: (opts?: TCarouselActionOptions) => void;
22
+ next: (opts?: TCarouselActionOptions) => void;
22
23
  computedIndex: () => void;
23
24
  getCurrentIndex: () => number;
24
25
  to: (index: number, animated?: boolean) => void;
26
+ scrollTo: (opts?: TCarouselActionOptions) => void;
25
27
  }
26
- export declare function useCarouselController(opts: IOpts): ICarouselController;
28
+ export declare function useCarouselController(options: IOpts): ICarouselController;
27
29
  export {};
@@ -1,8 +1,7 @@
1
1
  import type { TCarouselProps } from '../types';
2
- export declare type TInitializeCarouselProps<T> = TCarouselProps<T> & {
3
- defaultIndex: Required<TCarouselProps>['defaultIndex'];
4
- loop: Required<TCarouselProps>['loop'];
5
- width: Required<TCarouselProps>['width'];
6
- height: Required<TCarouselProps>['height'];
2
+ declare type TGetRequiredProps<P extends keyof TCarouselProps> = Record<P, Required<TCarouselProps>[P]>;
3
+ export declare type TInitializeCarouselProps<T> = TCarouselProps<T> & TGetRequiredProps<'defaultIndex' | 'loop' | 'width' | 'height' | 'scrollAnimationDuration' | 'autoPlayInterval'> & {
4
+ rawData: T[];
7
5
  };
8
6
  export declare function useInitProps<T>(props: TCarouselProps<T>): TInitializeCarouselProps<T>;
7
+ export {};
@@ -3,4 +3,5 @@ import type { TCarouselProps } from '../types';
3
3
  export declare function useOnProgressChange(opts: {
4
4
  size: number;
5
5
  offsetX: Animated.SharedValue<number>;
6
- } & Pick<TCarouselProps, 'data' | 'onProgressChange'>): void;
6
+ rawData: TCarouselProps['data'];
7
+ } & Pick<TCarouselProps, 'onProgressChange'>): void;
@@ -1,5 +1,5 @@
1
1
  import { ViewStyle } from 'react-native';
2
- import type { ComputedDirectionTypes, CustomConfig } from 'src/types';
2
+ import type { ComputedDirectionTypes, CustomConfig } from '../types';
3
3
  export interface ILayoutConfig {
4
4
  showLength?: number;
5
5
  moveSize?: number;
@@ -65,6 +65,11 @@ export declare type TCarouselProps<T = any> = {
65
65
  * @description playback interval
66
66
  */
67
67
  autoPlayInterval?: number;
68
+ /**
69
+ * Time a scroll animation takes to finish
70
+ * @default 500 (ms)
71
+ */
72
+ scrollAnimationDuration?: number;
68
73
  /**
69
74
  * Carousel container style
70
75
  */
@@ -125,21 +130,29 @@ export declare type TCarouselProps<T = any> = {
125
130
  } & (TParallaxModeProps | TStackModeProps);
126
131
  export interface ICarouselInstance {
127
132
  /**
128
- * Play the last one
133
+ * Scroll to previous item, it takes one optional argument (count),
134
+ * which allows you to specify how many items to cross
129
135
  */
130
- prev: () => void;
136
+ prev: (opts?: TCarouselActionOptions) => void;
131
137
  /**
132
- * Play the next one
138
+ * Scroll to next item, it takes one optional argument (count),
139
+ * which allows you to specify how many items to cross
133
140
  */
134
- next: () => void;
141
+ next: (opts?: TCarouselActionOptions) => void;
135
142
  /**
136
143
  * Get current item index
137
144
  */
138
145
  getCurrentIndex: () => number;
139
146
  /**
140
147
  * Go to index
148
+ * @deprecated use scrollTo instead
141
149
  */
142
150
  goToIndex: (index: number, animated?: boolean) => void;
151
+ /**
152
+ * Use value to scroll to a position where relative to the current position,
153
+ * scrollTo(-2) is equivalent to prev(2), scrollTo(2) is equivalent to next(2)
154
+ */
155
+ scrollTo: (opts?: TCarouselActionOptions) => void;
143
156
  }
144
157
  export interface CarouselRenderItemInfo<ItemT> {
145
158
  item: ItemT;
@@ -147,3 +160,8 @@ export interface CarouselRenderItemInfo<ItemT> {
147
160
  animationValue: Animated.SharedValue<number>;
148
161
  }
149
162
  export declare type CarouselRenderItem<ItemT> = (info: CarouselRenderItemInfo<ItemT>) => React.ReactElement;
163
+ export interface TCarouselActionOptions {
164
+ count?: number;
165
+ animated?: boolean;
166
+ onFinished?: () => void;
167
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-reanimated-carousel",
3
- "version": "2.1.2",
3
+ "version": "2.2.4",
4
4
  "description": "Simple carousel component.fully implemented using Reanimated 2.Infinitely scrolling, very smooth.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -30,10 +30,13 @@
30
30
  "release": "release-it --no-git.requireUpstream",
31
31
  "ios": "yarn --cwd example ios",
32
32
  "ios:pretty": "yarn --cwd example ios:pretty",
33
+ "web": "yarn --cwd example web",
34
+ "web:pretty": "yarn --cwd example web:pretty",
33
35
  "android": "yarn --cwd example android",
34
36
  "android:pretty": "yarn --cwd example android:pretty",
35
37
  "pods": "cd example && pod-install --quiet",
36
- "bootstrap": "yarn example && yarn && yarn pods"
38
+ "bootstrap": "yarn && yarn pods",
39
+ "deploy": "cd example && yarn deploy"
37
40
  },
38
41
  "keywords": [
39
42
  "react-native",