react-native-reanimated-carousel 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,25 @@
1
+ # [2.1.0](https://github.com/dohooo/react-native-reanimated-carousel/compare/v2.0.0...v2.1.0) (2022-01-08)
2
+
3
+
4
+ ### Features
5
+
6
+ * pass animation value to renderItem ([bf57233](https://github.com/dohooo/react-native-reanimated-carousel/commit/bf572335a19179aefd52d0bf43e61029ec2f945a)), closes [#89](https://github.com/dohooo/react-native-reanimated-carousel/issues/89)
7
+ * support to custom carousel animations by `customAnimation` `customConfig` props ([eb3082b](https://github.com/dohooo/react-native-reanimated-carousel/commit/eb3082b74d3f08f6205cce47a30435ffc8570145))
8
+
9
+
10
+ ### BREAKING CHANGES
11
+
12
+ * Remove the parameter of `renderItem` and change it to `info` object
13
+
14
+
15
+
16
+ ## [1.1.1](https://github.com/dohooo/react-native-reanimated-carousel/compare/v2.0.0...v2.1.0) (2022-01-04)
17
+
18
+
19
+ ### Bug Fixes
20
+
21
+ * fix bug with windowSize props ([8a048df](https://github.com/dohooo/react-native-reanimated-carousel/commit/8a048dfafbf46ba6d4776f82564dea43af026144)), closes [#71](https://github.com/dohooo/react-native-reanimated-carousel/issues/71)
22
+
1
23
  # [2.0.0](https://github.com/dohooo/react-native-reanimated-carousel/compare/v1.2.0-beta.4...v2.0.0) (2022-01-07)
2
24
 
3
25
 
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  English | [简体中文](./README.zh-CN.md)
2
2
 
3
- # react-native-reanimated-carousel 2
3
+ # react-native-reanimated-carousel
4
4
 
5
5
  <img src="assets/banner.png" width="100%"/>
6
6
 
@@ -13,12 +13,12 @@ English | [简体中文](./README.zh-CN.md)
13
13
 
14
14
  ## ReactNative community's best use of the carousel component! 🎉🎉🎉
15
15
 
16
- - **It completely solves this [problem](https://github.com/meliorence/react-native-snap-carousel/issues/632) for `react-native-snap-carousel`!**
16
+ - **It completely solves this** [[problem]](https://github.com/meliorence/react-native-snap-carousel/issues/632) **for `react-native-snap-carousel`!**
17
17
  - **Simple**、**Infinitely scrolling very smooth**、**Fully implemented using Reanimated 2!**
18
18
 
19
- > V2 has been released! Joint it! [V1 docs](https://github.com/dohooo/react-native-reanimated-carousel/tree/v1.x.x)
19
+ > v2 has been released! Join it! [[v1 docs]](https://github.com/dohooo/react-native-reanimated-carousel/tree/v1.x.x)
20
20
 
21
- > Click on the image to see the demo. [Try it(Snack)](https://snack.expo.dev/@zhaodonghao586/simple-carousel) 🍺
21
+ > Click on the image to see the demo. [[Try it]](https://snack.expo.dev/@zhaodonghao586/simple-carousel) 🍺
22
22
 
23
23
  <p align="center">
24
24
  <a href="./example/src/normal/index.tsx">
@@ -47,7 +47,16 @@ English | [简体中文](./README.zh-CN.md)
47
47
  </a>
48
48
  </p>
49
49
 
50
- <br/>
50
+ > Now you can make cool animations with us! Very easy! [[Details]](./docs/custom-animation.md)
51
+
52
+ <p align="center">
53
+ <a href="./example/src/advanced-parallax/index.tsx">
54
+ <img src="assets/advanced-parallax.gif" width="300"/>
55
+ </a>
56
+ <a href="./example/src/scale-fade-in-out/index.tsx">
57
+ <img src="assets/scale-fade-in-out.gif" width="300"/>
58
+ </a>
59
+ </p>
51
60
 
52
61
  ## Table of contents
53
62
 
@@ -83,7 +92,7 @@ import Carousel from 'react-native-reanimated-carousel';
83
92
  width={300}
84
93
  height={150}
85
94
  data={[1, 2, 3]}
86
- renderItem={(item) => <AnyElement />}
95
+ renderItem={({ item }) => <AnyElement />}
87
96
  />;
88
97
  ```
89
98
 
@@ -120,8 +129,8 @@ import Carousel from 'react-native-reanimated-carousel';
120
129
  ## Example
121
130
 
122
131
  ```shell
123
- yarn example -- ios
124
- yarn example -- android
132
+ yarn ios
133
+ yarn android
125
134
  ```
126
135
 
127
136
  ## License
package/README.zh-CN.md CHANGED
@@ -1,6 +1,6 @@
1
1
  [English](./README.md) | 简体中文
2
2
 
3
- # react-native-reanimated-carousel 2
3
+ # react-native-reanimated-carousel
4
4
 
5
5
  <img src="assets/banner-zh.jpeg" width="100%"/>
6
6
 
@@ -13,12 +13,12 @@
13
13
 
14
14
  ## ReactNative 社区最好用的轮播图组件! 🎉🎉🎉
15
15
 
16
- - **完全解决了`react-native-snap-carousel`的[问题](https://github.com/meliorence/react-native-snap-carousel/issues/632)**
16
+ - **完全解决了`react-native-snap-carousel`的** [[问题]](https://github.com/meliorence/react-native-snap-carousel/issues/632)
17
17
  - **易用**、**无限滚动**、**完全使用 Reanimated2 实现**
18
18
 
19
- > V2 已经发布,希望大家喜欢!~ [V1 文档](https://github.com/dohooo/react-native-reanimated-carousel/tree/v1.x.x)
19
+ > v2 已经发布,希望大家喜欢!~ [[v1 文档]](https://github.com/dohooo/react-native-reanimated-carousel/tree/v1.x.x)
20
20
 
21
- > 点击图片,查看 demo。[试一下(Snack)](https://snack.expo.dev/@zhaodonghao586/simple-carousel) 🍺
21
+ > 点击图片,查看 demo。[[试一下]](https://snack.expo.dev/@zhaodonghao586/simple-carousel) 🍺
22
22
 
23
23
  <p align="center">
24
24
  <a href="./example/src/normal/index.tsx">
@@ -47,7 +47,17 @@
47
47
  </a>
48
48
  </p>
49
49
 
50
- <br/>
50
+
51
+ > 现在你可以和我们一起来制作酷炫的动画了! 非常简单! [[详情]](./docs/custom-animation.zh-CN.md)
52
+
53
+ <p align="center">
54
+ <a href="./example/src/advanced-parallax/index.tsx">
55
+ <img src="assets/advanced-parallax.gif" width="300"/>
56
+ </a>
57
+ <a href="./example/src/scale-fade-in-out/index.tsx">
58
+ <img src="assets/scale-fade-in-out.gif" width="300"/>
59
+ </a>
60
+ </p>
51
61
 
52
62
  ## 目录
53
63
 
@@ -85,7 +95,7 @@ import Carousel from 'react-native-reanimated-carousel';
85
95
  width={300}
86
96
  height={150}
87
97
  data={[1, 2, 3]}
88
- renderItem={(item) => <AnyElement />}
98
+ renderItem={({ item }) => <AnyElement />}
89
99
  />;
90
100
  ```
91
101
 
@@ -119,8 +129,8 @@ import Carousel from 'react-native-reanimated-carousel';
119
129
  ## 示例
120
130
 
121
131
  ```shell
122
- yarn example -- ios
123
- yarn example -- android
132
+ yarn ios
133
+ yarn android
124
134
  ```
125
135
 
126
136
  ## 许可
@@ -59,7 +59,8 @@ function Carousel(_props, ref) {
59
59
  onScrollEnd,
60
60
  onSnapToItem,
61
61
  onScrollBegin,
62
- onProgressChange
62
+ onProgressChange,
63
+ customAnimation
63
64
  } = props;
64
65
  const commonVariables = (0, _useCommonVariables.useCommonVariables)(props);
65
66
  const {
@@ -165,9 +166,15 @@ function Carousel(_props, ref) {
165
166
  index: i,
166
167
  handlerOffsetX: offsetX,
167
168
  visibleRanges: visibleRanges,
168
- animationStyle: layoutConfig
169
- }, renderItem(item, realIndex));
170
- }, [data, offsetX, renderItem, layoutConfig, visibleRanges]);
169
+ animationStyle: customAnimation || layoutConfig
170
+ }, ({
171
+ animationValue
172
+ }) => renderItem({
173
+ item,
174
+ index: realIndex,
175
+ animationValue
176
+ }));
177
+ }, [data, offsetX, visibleRanges, renderItem, layoutConfig, customAnimation]);
171
178
 
172
179
  return /*#__PURE__*/_react.default.createElement(_store.CTX.Provider, {
173
180
  value: {
@@ -1 +1 @@
1
- {"version":3,"sources":["Carousel.tsx"],"names":["Carousel","_props","ref","props","data","loop","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","commonVariables","size","handlerOffsetX","offsetX","totalSize","length","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","run","pause","scrollViewGestureOnScrollBegin","React","useCallback","current","scrollViewGestureOnScrollEnd","goToIndex","animated","to","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","DATA_LENGTH","SINGLE_ITEM","DOUBLE_ITEM","common","styles","container","itemsVertical","itemsHorizontal","map","forwardRef","StyleSheet","create","overflow","flexDirection"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAEA,SAASA,QAAT,CACIC,MADJ,EAEIC,GAFJ,EAGE;AACE,QAAMC,KAAK,GAAG,gCAAaF,MAAb,CAAd;AAEA,QAAM;AACFG,IAAAA,IADE;AAEFC,IAAAA,IAFE;AAGFC,IAAAA,IAHE;AAIFC,IAAAA,KAJE;AAKFC,IAAAA,KALE;AAMFC,IAAAA,MANE;AAOFC,IAAAA,QAPE;AAQFC,IAAAA,QARE;AASFC,IAAAA,UATE;AAUFC,IAAAA,eAVE;AAWFC,IAAAA,gBAXE;AAYFC,IAAAA,UAZE;AAaFC,IAAAA,WAbE;AAcFC,IAAAA,YAdE;AAeFC,IAAAA,aAfE;AAgBFC,IAAAA;AAhBE,MAiBFhB,KAjBJ;AAmBA,QAAMiB,eAAe,GAAG,4CAAmBjB,KAAnB,CAAxB;AACA,QAAM;AAAEkB,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAA2BF,eAAjC;AAEA,QAAMG,OAAO,GAAG,4CAAgB,MAAM;AAClC,UAAMC,SAAS,GAAGH,IAAI,GAAGjB,IAAI,CAACqB,MAA9B;AACA,UAAMC,CAAC,GAAGJ,cAAc,CAACK,KAAf,GAAuBH,SAAjC;;AAEA,QAAI,CAACnB,IAAL,EAAW;AACP,aAAOiB,cAAc,CAACK,KAAtB;AACH;;AACD,WAAOC,KAAK,CAACF,CAAD,CAAL,GAAW,CAAX,GAAeA,CAAtB;AACH,GARe,EAQb,CAACrB,IAAD,EAAOgB,IAAP,EAAajB,IAAb,CARa,CAAhB;AAUA,oDAAsBD,KAAtB;AACA,gDAAoB;AAAEkB,IAAAA,IAAF;AAAQE,IAAAA,OAAR;AAAiBnB,IAAAA,IAAjB;AAAuBe,IAAAA;AAAvB,GAApB;AAEA,QAAMU,kBAAkB,GAAG,kDAAsB;AAC7CxB,IAAAA,IAD6C;AAE7CgB,IAAAA,IAF6C;AAG7CC,IAAAA,cAH6C;AAI7CG,IAAAA,MAAM,EAAErB,IAAI,CAACqB,MAJgC;AAK7CK,IAAAA,OAAO,EAAE,CAAC1B,IAAI,CAACqB,MAL8B;AAM7CM,IAAAA,cAAc,EAAE3B,IAAI,CAACqB,MANwB;AAO7CT,IAAAA,WAAW,EAAE,MAAM,oCAAQgB,YAAR,GAP0B;AAQ7Cd,IAAAA,aAAa,EAAE,MAAM,CAAC,CAACA,aAAF,IAAmB,oCAAQA,aAAR,GARK;AAS7Ce,IAAAA,QAAQ,EAAGC,CAAD,IAAOjB,YAAY,IAAI,oCAAQA,YAAR,EAAsBiB,CAAtB;AATY,GAAtB,CAA3B;AAYA,QAAM;AACFC,IAAAA,IADE;AAEFC,IAAAA,IAFE;AAGFC,IAAAA,cAHE;AAIFC,IAAAA,WAJE;AAKFC,IAAAA,aALE;AAMFC,IAAAA;AANE,MAOFX,kBAPJ;AASA,QAAM;AAAEY,IAAAA,GAAF;AAAOC,IAAAA;AAAP,MAAiB,8BAAY;AAC/B/B,IAAAA,QAD+B;AAE/BG,IAAAA,gBAF+B;AAG/BD,IAAAA,eAH+B;AAI/BgB,IAAAA;AAJ+B,GAAZ,CAAvB;;AAOA,QAAMc,8BAA8B,GAAGC,eAAMC,WAAN,CAAkB,MAAM;AAC3DH,IAAAA,KAAK;AACLxB,IAAAA,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa;AAChB,GAHsC,EAGpC,CAACA,aAAD,EAAgBwB,KAAhB,CAHoC,CAAvC;;AAKA,QAAMV,YAAY,GAAGY,eAAMC,WAAN,CAAkB,MAAM;AACzCN,IAAAA,aAAa;AACbvB,IAAAA,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAGqB,cAAc,CAACS,OAAlB,EAA2BR,WAAW,CAACQ,OAAvC,CAAX;AACH,GAHoB,EAGlB,CAACT,cAAD,EAAiBC,WAAjB,EAA8BC,aAA9B,EAA6CvB,WAA7C,CAHkB,CAArB;;AAKA,QAAM+B,4BAA4B,GAAGH,eAAMC,WAAN,CAAkB,MAAM;AACzDJ,IAAAA,GAAG;;AACHT,IAAAA,YAAY;AACf,GAHoC,EAGlC,CAACA,YAAD,EAAeS,GAAf,CAHkC,CAArC;;AAKA,QAAMO,SAAS,GAAGJ,eAAMC,WAAN,CACd,CAACX,CAAD,EAAYe,QAAZ,KAAmC;AAC/BpB,IAAAA,kBAAkB,CAACqB,EAAnB,CAAsBhB,CAAtB,EAAyBe,QAAzB;AACH,GAHa,EAId,CAACpB,kBAAD,CAJc,CAAlB;;AAOAe,iBAAMO,mBAAN,CACIjD,GADJ,EAEI,OAAO;AACHiC,IAAAA,IADG;AAEHC,IAAAA,IAFG;AAGHI,IAAAA,eAHG;AAIHQ,IAAAA;AAJG,GAAP,CAFJ,EAQI,CAACR,eAAD,EAAkBQ,SAAlB,EAA6Bb,IAA7B,EAAmCC,IAAnC,CARJ;;AAWA,QAAMgB,aAAa,GAAG,wCAAiB;AACnCC,IAAAA,KAAK,EAAEjD,IAAI,CAACqB,MADuB;AAEnC6B,IAAAA,QAAQ,EAAEjC,IAFyB;AAGnCkC,IAAAA,WAAW,EAAEjC,cAHsB;AAInCV,IAAAA;AAJmC,GAAjB,CAAtB;AAOA,QAAM4C,YAAY,GAAG,sCAAmB,EAAE,GAAGrD,KAAL;AAAYkB,IAAAA;AAAZ,GAAnB,CAArB;;AAEA,QAAMoC,YAAY,GAAGb,eAAMC,WAAN,CACjB,CAACa,IAAD,EAAUxB,CAAV,KAAwB;AACpB,QAAIyB,SAAS,GAAGzB,CAAhB;;AACA,QAAI9B,IAAI,CAACqB,MAAL,KAAgBmC,uBAAYC,WAAhC,EAA6C;AACzCF,MAAAA,SAAS,GAAGzB,CAAC,GAAG,CAAhB;AACH;;AAED,QAAI9B,IAAI,CAACqB,MAAL,KAAgBmC,uBAAYE,WAAhC,EAA6C;AACzCH,MAAAA,SAAS,GAAGzB,CAAC,GAAG,CAAhB;AACH;;AAED,wBACI,6BAAC,sBAAD;AACI,MAAA,GAAG,EAAEA,CADT;AAEI,MAAA,KAAK,EAAEA,CAFX;AAGI,MAAA,cAAc,EAAEX,OAHpB;AAII,MAAA,aAAa,EAAE6B,aAJnB;AAKI,MAAA,cAAc,EAAEI;AALpB,OAOKzC,UAAU,CAAC2C,IAAD,EAAOC,SAAP,CAPf,CADJ;AAWH,GAtBgB,EAuBjB,CAACvD,IAAD,EAAOmB,OAAP,EAAgBR,UAAhB,EAA4ByC,YAA5B,EAA0CJ,aAA1C,CAvBiB,CAArB;;AA0BA,sBACI,6BAAC,UAAD,CAAK,QAAL;AAAc,IAAA,KAAK,EAAE;AAAEjD,MAAAA,KAAF;AAAS4D,MAAAA,MAAM,EAAE3C;AAAjB;AAArB,kBACI,6BAAC,iBAAD;AACI,IAAA,KAAK,EAAE,CACH4C,MAAM,CAACC,SADJ,EAEH;AAAEzD,MAAAA,KAAK,EAAEA,KAAK,IAAI,MAAlB;AAA0BC,MAAAA,MAAM,EAAEA,MAAM,IAAI;AAA5C,KAFG,EAGHF,KAHG;AADX,kBAOI,6BAAC,oCAAD;AACI,IAAA,IAAI,EAAEc,IADV;AAEI,IAAA,WAAW,EAAEC,cAFjB;AAGI,IAAA,aAAa,EAAEqB,8BAHnB;AAII,IAAA,WAAW,EAAEI;AAJjB,kBAMI,6BAAC,8BAAD,CAAU,IAAV;AACI,IAAA,GAAG,EAAEzC,IADT;AAEI,IAAA,KAAK,EAAE,CACH0D,MAAM,CAACC,SADJ,EAEH;AACIzD,MAAAA,KAAK,EAAEA,KAAK,IAAI,MADpB;AAEIC,MAAAA,MAAM,EAAEA,MAAM,IAAI;AAFtB,KAFG,EAMHF,KANG,EAOHG,QAAQ,GACFsD,MAAM,CAACE,aADL,GAEFF,MAAM,CAACG,eATV;AAFX,KAcK/D,IAAI,CAACgE,GAAL,CAASX,YAAT,CAdL,CANJ,CAPJ,CADJ,CADJ;AAmCH;;4BAEcb,eAAMyB,UAAN,CAAiBrE,QAAjB,C;;;;AAEf,MAAMgE,MAAM,GAAGM,wBAAWC,MAAX,CAAkB;AAC7BN,EAAAA,SAAS,EAAE;AACPO,IAAAA,QAAQ,EAAE;AADH,GADkB;AAI7BL,EAAAA,eAAe,EAAE;AACbM,IAAAA,aAAa,EAAE;AADF,GAJY;AAO7BP,EAAAA,aAAa,EAAE;AACXO,IAAAA,aAAa,EAAE;AADJ;AAPc,CAAlB,CAAf","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { DATA_LENGTH } from './constants';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\n\nfunction Carousel<T>(\n _props: PropsWithChildren<TCarouselProps<T>>,\n ref: React.Ref<ICarouselInstance>\n) {\n const props = useInitProps(_props);\n\n const {\n data,\n loop,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * data.length;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, data]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({ size, offsetX, data, onProgressChange });\n\n const carouselController = useCarouselController({\n loop,\n size,\n handlerOffsetX,\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n onChange: (i) => onSnapToItem && runOnJS(onSnapToItem)(i),\n });\n\n const {\n next,\n prev,\n sharedPreIndex,\n sharedIndex,\n computedIndex,\n getCurrentIndex,\n } = carouselController;\n\n const { run, pause } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pause();\n onScrollBegin?.();\n }, [onScrollBegin, pause]);\n\n const _onScrollEnd = React.useCallback(() => {\n computedIndex();\n onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, onScrollEnd]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n run();\n _onScrollEnd();\n }, [_onScrollEnd, run]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n carouselController.to(i, animated);\n },\n [carouselController]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n goToIndex,\n }),\n [getCurrentIndex, goToIndex, next, prev]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig<T>({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: T, i: number) => {\n let realIndex = i;\n if (data.length === DATA_LENGTH.SINGLE_ITEM) {\n realIndex = i % 1;\n }\n\n if (data.length === DATA_LENGTH.DOUBLE_ITEM) {\n realIndex = i % 2;\n }\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={layoutConfig}\n >\n {renderItem(item, realIndex)}\n </BaseLayout>\n );\n },\n [data, offsetX, renderItem, layoutConfig, visibleRanges]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n}\n\nexport default React.forwardRef(Carousel) as typeof Carousel;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
1
+ {"version":3,"sources":["Carousel.tsx"],"names":["Carousel","_props","ref","props","data","loop","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","commonVariables","size","handlerOffsetX","offsetX","totalSize","length","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","run","pause","scrollViewGestureOnScrollBegin","React","useCallback","current","scrollViewGestureOnScrollEnd","goToIndex","animated","to","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","DATA_LENGTH","SINGLE_ITEM","DOUBLE_ITEM","animationValue","index","common","styles","container","itemsVertical","itemsHorizontal","map","forwardRef","StyleSheet","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { DATA_LENGTH } from './constants';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\n\nfunction Carousel<T>(\n _props: PropsWithChildren<TCarouselProps<T>>,\n ref: React.Ref<ICarouselInstance>\n) {\n const props = useInitProps(_props);\n\n const {\n data,\n loop,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * data.length;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, data]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({ size, offsetX, data, onProgressChange });\n\n const carouselController = useCarouselController({\n loop,\n size,\n handlerOffsetX,\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n onChange: (i) => onSnapToItem && runOnJS(onSnapToItem)(i),\n });\n\n const {\n next,\n prev,\n sharedPreIndex,\n sharedIndex,\n computedIndex,\n getCurrentIndex,\n } = carouselController;\n\n const { run, pause } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pause();\n onScrollBegin?.();\n }, [onScrollBegin, pause]);\n\n const _onScrollEnd = React.useCallback(() => {\n computedIndex();\n onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, onScrollEnd]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n run();\n _onScrollEnd();\n }, [_onScrollEnd, run]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n carouselController.to(i, animated);\n },\n [carouselController]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n goToIndex,\n }),\n [getCurrentIndex, goToIndex, next, prev]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig<T>({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: T, i: number) => {\n let realIndex = i;\n if (data.length === DATA_LENGTH.SINGLE_ITEM) {\n realIndex = i % 1;\n }\n\n if (data.length === DATA_LENGTH.DOUBLE_ITEM) {\n realIndex = i % 2;\n }\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n data,\n offsetX,\n visibleRanges,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n}\n\nexport default React.forwardRef(Carousel) as typeof Carousel;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["useInitProps.ts"],"names":["useInitProps","props","defaultIndex","data","_data","loop","autoPlayInterval","style","panGestureHandlerProps","pagingEnabled","enableSnap","width","_width","height","_height","Math","round","React","useMemo","length","DATA_LENGTH","SINGLE_ITEM","DOUBLE_ITEM","mode","modeConfig","showLength"],"mappings":";;;;;;;AAAA;;AACA;;;;AAUO,SAASA,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,GAAGc,eAAMC,OAAN,CAAmB,MAAM;AAClC,QAAI,CAACb,IAAL,EAAW,OAAOD,KAAP;;AAEX,QAAIA,KAAK,CAACe,MAAN,KAAiBC,uBAAYC,WAAjC,EAA8C;AAC1C,aAAO,CAACjB,KAAK,CAAC,CAAD,CAAN,EAAWA,KAAK,CAAC,CAAD,CAAhB,EAAqBA,KAAK,CAAC,CAAD,CAA1B,CAAP;AACH;;AAED,QAAIA,KAAK,CAACe,MAAN,KAAiBC,uBAAYE,WAAjC,EAA8C;AAC1C,aAAO,CAAClB,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,CAACsB,IAAN,KAAe,gBAAf,IAAmCtB,KAAK,CAACsB,IAAN,KAAe,kBAAtD,EAA0E;AAAA;;AACtE,QAAI,CAACtB,KAAK,CAACuB,UAAX,EAAuB;AACnBvB,MAAAA,KAAK,CAACuB,UAAN,GAAmB,EAAnB;AACH;;AACDvB,IAAAA,KAAK,CAACuB,UAAN,CAAiBC,UAAjB,iDACIxB,KAAK,CAACuB,UADV,sDACI,kBAAkBC,UADtB,yEACoCtB,IAAI,CAACgB,MAAL,GAAc,CADlD;AAEH;;AAED,SAAO,EACH,GAAGlB,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\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":["useInitProps","props","defaultIndex","data","_data","loop","autoPlayInterval","style","panGestureHandlerProps","pagingEnabled","enableSnap","width","_width","height","_height","Math","round","React","useMemo","length","DATA_LENGTH","SINGLE_ITEM","DOUBLE_ITEM","mode","modeConfig","showLength"],"mappings":";;;;;;;AAAA;;AACA;;;;AAUO,SAASA,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,GAAGc,eAAMC,OAAN,CAAmB,MAAM;AAClC,QAAI,CAACb,IAAL,EAAW,OAAOD,KAAP;;AAEX,QAAIA,KAAK,CAACe,MAAN,KAAiBC,uBAAYC,WAAjC,EAA8C;AAC1C,aAAO,CAACjB,KAAK,CAAC,CAAD,CAAN,EAAWA,KAAK,CAAC,CAAD,CAAhB,EAAqBA,KAAK,CAAC,CAAD,CAA1B,CAAP;AACH;;AAED,QAAIA,KAAK,CAACe,MAAN,KAAiBC,uBAAYE,WAAjC,EAA8C;AAC1C,aAAO,CAAClB,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,CAACsB,IAAN,KAAe,gBAAf,IAAmCtB,KAAK,CAACsB,IAAN,KAAe,kBAAtD,EAA0E;AAAA;;AACtE,QAAI,CAACtB,KAAK,CAACuB,UAAX,EAAuB;AACnBvB,MAAAA,KAAK,CAACuB,UAAN,GAAmB,EAAnB;AACH;;AACDvB,IAAAA,KAAK,CAACuB,UAAN,CAAiBC,UAAjB,iDACIxB,KAAK,CAACuB,UADV,sDACI,kBAAkBC,UADtB,yEACoCtB,IAAI,CAACgB,MAAL,GAAc,CADlD;AAEH;;AACD,SAAO,EACH,GAAGlB,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"]}
@@ -30,27 +30,31 @@ const BaseLayout = props => {
30
30
  animationStyle
31
31
  } = props;
32
32
 
33
+ const context = _react.default.useContext(_store.CTX);
34
+
33
35
  const {
34
36
  props: {
35
- mode,
36
37
  loop,
37
38
  data,
38
39
  width,
39
40
  height,
40
41
  vertical,
42
+ customConfig,
43
+ mode,
41
44
  modeConfig
42
45
  }
43
- } = _react.default.useContext(_store.CTX);
46
+ } = context;
47
+ const size = vertical ? height : width;
44
48
 
45
49
  const [shouldUpdate, setShouldUpdate] = _react.default.useState(false);
46
50
 
47
- const size = vertical ? height : width;
48
51
  let offsetXConfig = {
49
52
  handlerOffsetX,
50
53
  index,
51
54
  size,
52
55
  data,
53
- loop
56
+ loop,
57
+ ...(typeof customConfig === 'function' ? customConfig() : {})
54
58
  };
55
59
 
56
60
  if (mode === 'horizontal-stack') {
@@ -70,8 +74,8 @@ const BaseLayout = props => {
70
74
  }
71
75
 
72
76
  const x = (0, _useOffsetX.useOffsetX)(offsetXConfig, visibleRanges);
73
-
74
- const _animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => animationStyle(x.value / size), [animationStyle]);
77
+ const animationValue = (0, _reactNativeReanimated.useDerivedValue)(() => x.value / size, [x, size]);
78
+ const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => animationStyle(x.value / size), [animationStyle]);
75
79
 
76
80
  const updateView = _react.default.useCallback((negativeRange, positiveRange) => {
77
81
  setShouldUpdate(index >= negativeRange[0] && index <= negativeRange[1] || index >= positiveRange[0] && index <= positiveRange[1]);
@@ -85,10 +89,12 @@ const BaseLayout = props => {
85
89
  width: width || '100%',
86
90
  height: height || '100%',
87
91
  position: 'absolute'
88
- }, _animatedStyle]
92
+ }, animatedStyle]
89
93
  }, /*#__PURE__*/_react.default.createElement(_LazyView.LazyView, {
90
94
  shouldUpdate: shouldUpdate
91
- }, children));
95
+ }, children({
96
+ animationValue
97
+ })));
92
98
  };
93
99
 
94
100
  exports.BaseLayout = BaseLayout;
@@ -1 +1 @@
1
- {"version":3,"sources":["BaseLayout.tsx"],"names":["BaseLayout","props","handlerOffsetX","index","children","visibleRanges","animationStyle","mode","loop","data","width","height","vertical","modeConfig","React","useContext","CTX","shouldUpdate","setShouldUpdate","useState","size","offsetXConfig","snapDirection","showLength","type","viewCount","x","_animatedStyle","value","updateView","useCallback","negativeRange","positiveRange","position"],"mappings":";;;;;;;AAAA;;AAEA;;AAKA;;AAEA;;AAEA;;;;;;;;AAMO,MAAMA,UAKX,GAAIC,KAAD,IAAW;AACZ,QAAM;AAAEC,IAAAA,cAAF;AAAkBC,IAAAA,KAAlB;AAAyBC,IAAAA,QAAzB;AAAmCC,IAAAA,aAAnC;AAAkDC,IAAAA;AAAlD,MACFL,KADJ;;AAGA,QAAM;AACFA,IAAAA,KAAK,EAAE;AAAEM,MAAAA,IAAF;AAAQC,MAAAA,IAAR;AAAcC,MAAAA,IAAd;AAAoBC,MAAAA,KAApB;AAA2BC,MAAAA,MAA3B;AAAmCC,MAAAA,QAAnC;AAA6CC,MAAAA;AAA7C;AADL,MAEFC,eAAMC,UAAN,CAAiBC,UAAjB,CAFJ;;AAIA,QAAM,CAACC,YAAD,EAAeC,eAAf,IAAkCJ,eAAMK,QAAN,CAAe,KAAf,CAAxC;;AAEA,QAAMC,IAAI,GAAGR,QAAQ,GAAGD,MAAH,GAAYD,KAAjC;AAEA,MAAIW,aAAoB,GAAG;AACvBnB,IAAAA,cADuB;AAEvBC,IAAAA,KAFuB;AAGvBiB,IAAAA,IAHuB;AAIvBX,IAAAA,IAJuB;AAKvBD,IAAAA;AALuB,GAA3B;;AAQA,MAAID,IAAI,KAAK,kBAAb,EAAiC;AAC7B,UAAM;AAAEe,MAAAA,aAAF;AAAiBC,MAAAA;AAAjB,QAAgCV,UAAtC;AAEAQ,IAAAA,aAAa,GAAG;AACZnB,MAAAA,cADY;AAEZC,MAAAA,KAFY;AAGZiB,MAAAA,IAHY;AAIZX,MAAAA,IAJY;AAKZD,MAAAA,IALY;AAMZgB,MAAAA,IAAI,EAAEF,aAAa,KAAK,OAAlB,GAA4B,UAA5B,GAAyC,UANnC;AAOZG,MAAAA,SAAS,EAAEF;AAPC,KAAhB;AASH;;AAED,QAAMG,CAAC,GAAG,4BAAWL,aAAX,EAA0BhB,aAA1B,CAAV;;AAEA,QAAMsB,cAAc,GAAG,6CACnB,MAAMrB,cAAc,CAACoB,CAAC,CAACE,KAAF,GAAUR,IAAX,CADD,EAEnB,CAACd,cAAD,CAFmB,CAAvB;;AAKA,QAAMuB,UAAU,GAAGf,eAAMgB,WAAN,CACf,CAACC,aAAD,EAA0BC,aAA1B,KAAsD;AAClDd,IAAAA,eAAe,CACVf,KAAK,IAAI4B,aAAa,CAAC,CAAD,CAAtB,IAA6B5B,KAAK,IAAI4B,aAAa,CAAC,CAAD,CAApD,IACK5B,KAAK,IAAI6B,aAAa,CAAC,CAAD,CAAtB,IAA6B7B,KAAK,IAAI6B,aAAa,CAAC,CAAD,CAF7C,CAAf;AAIH,GANc,EAOf,CAAC7B,KAAD,CAPe,CAAnB;;AAUA,kDACI,MAAME,aAAa,CAACuB,KADxB,EAEI,MAAM;AACF,wCAAQC,UAAR,EACIxB,aAAa,CAACuB,KAAd,CAAoBG,aADxB,EAEI1B,aAAa,CAACuB,KAAd,CAAoBI,aAFxB;AAIH,GAPL,EAQI,CAAC3B,aAAa,CAACuB,KAAf,CARJ;AAWA,sBACI,6BAAC,8BAAD,CAAU,IAAV;AACI,IAAA,KAAK,EAAE,CACH;AACIlB,MAAAA,KAAK,EAAEA,KAAK,IAAI,MADpB;AAEIC,MAAAA,MAAM,EAAEA,MAAM,IAAI,MAFtB;AAGIsB,MAAAA,QAAQ,EAAE;AAHd,KADG,EAMHN,cANG;AADX,kBAUI,6BAAC,kBAAD;AAAU,IAAA,YAAY,EAAEV;AAAxB,KAAuCb,QAAvC,CAVJ,CADJ;AAcH,CAjFM","sourcesContent":["import React from 'react';\nimport type { ViewStyle } from 'react-native';\nimport Animated, {\n runOnJS,\n useAnimatedReaction,\n useAnimatedStyle,\n} from 'react-native-reanimated';\nimport { IOpts, useOffsetX } from '../hooks/useOffsetX';\nimport type { IVisibleRanges } from '../hooks/useVisibleRanges';\nimport { LazyView } from '../LazyView';\nimport type { ILayoutConfig as IStackLayoutConfig } from './stack';\nimport { CTX } from '../store';\n\nexport type TAnimationStyle = (\n value: number\n) => Animated.AnimatedStyleProp<ViewStyle>;\n\nexport const BaseLayout: React.FC<{\n index: number;\n handlerOffsetX: Animated.SharedValue<number>;\n visibleRanges: IVisibleRanges;\n animationStyle: TAnimationStyle;\n}> = (props) => {\n const { handlerOffsetX, index, children, visibleRanges, animationStyle } =\n props;\n\n const {\n props: { mode, loop, data, width, height, vertical, modeConfig },\n } = React.useContext(CTX);\n\n const [shouldUpdate, setShouldUpdate] = React.useState(false);\n\n const size = vertical ? height : width;\n\n let offsetXConfig: IOpts = {\n handlerOffsetX,\n index,\n size,\n data,\n loop,\n };\n\n if (mode === 'horizontal-stack') {\n const { snapDirection, showLength } = modeConfig as IStackLayoutConfig;\n\n offsetXConfig = {\n handlerOffsetX,\n index,\n size,\n data,\n loop,\n type: snapDirection === 'right' ? 'negative' : 'positive',\n viewCount: showLength,\n };\n }\n\n const x = useOffsetX(offsetXConfig, visibleRanges);\n\n const _animatedStyle = useAnimatedStyle(\n () => animationStyle(x.value / size),\n [animationStyle]\n );\n\n const updateView = React.useCallback(\n (negativeRange: number[], positiveRange: number[]) => {\n setShouldUpdate(\n (index >= negativeRange[0] && index <= negativeRange[1]) ||\n (index >= positiveRange[0] && index <= positiveRange[1])\n );\n },\n [index]\n );\n\n useAnimatedReaction(\n () => visibleRanges.value,\n () => {\n runOnJS(updateView)(\n visibleRanges.value.negativeRange,\n visibleRanges.value.positiveRange\n );\n },\n [visibleRanges.value]\n );\n\n return (\n <Animated.View\n style={[\n {\n width: width || '100%',\n height: height || '100%',\n position: 'absolute',\n },\n _animatedStyle,\n ]}\n >\n <LazyView shouldUpdate={shouldUpdate}>{children}</LazyView>\n </Animated.View>\n );\n};\n"]}
1
+ {"version":3,"sources":["BaseLayout.tsx"],"names":["BaseLayout","props","handlerOffsetX","index","children","visibleRanges","animationStyle","context","React","useContext","CTX","loop","data","width","height","vertical","customConfig","mode","modeConfig","size","shouldUpdate","setShouldUpdate","useState","offsetXConfig","snapDirection","showLength","type","viewCount","x","animationValue","value","animatedStyle","updateView","useCallback","negativeRange","positiveRange","position"],"mappings":"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","sourcesContent":["import React from 'react';\nimport type { ViewStyle } from 'react-native';\nimport Animated, {\n runOnJS,\n useAnimatedReaction,\n useAnimatedStyle,\n useDerivedValue,\n} from 'react-native-reanimated';\nimport { IOpts, useOffsetX } from '../hooks/useOffsetX';\nimport type { IVisibleRanges } from '../hooks/useVisibleRanges';\nimport { LazyView } from '../LazyView';\nimport { CTX } from '../store';\nimport type { ILayoutConfig } from './stack';\n\nexport type TAnimationStyle = (\n value: number\n) => Animated.AnimatedStyleProp<ViewStyle>;\n\nexport const BaseLayout: React.FC<{\n index: number;\n handlerOffsetX: Animated.SharedValue<number>;\n visibleRanges: IVisibleRanges;\n animationStyle: TAnimationStyle;\n children: (ctx: {\n animationValue: Animated.SharedValue<number>;\n }) => React.ReactElement;\n}> = (props) => {\n const { handlerOffsetX, index, children, visibleRanges, animationStyle } =\n props;\n\n const context = React.useContext(CTX);\n const {\n props: {\n loop,\n data,\n width,\n height,\n vertical,\n customConfig,\n mode,\n modeConfig,\n },\n } = context;\n const size = vertical ? height : width;\n const [shouldUpdate, setShouldUpdate] = React.useState(false);\n let offsetXConfig: IOpts = {\n handlerOffsetX,\n index,\n size,\n data,\n loop,\n ...(typeof customConfig === 'function' ? customConfig() : {}),\n };\n\n if (mode === 'horizontal-stack') {\n const { snapDirection, showLength } = modeConfig as ILayoutConfig;\n\n offsetXConfig = {\n handlerOffsetX,\n index,\n size,\n data,\n loop,\n type: snapDirection === 'right' ? 'negative' : 'positive',\n viewCount: showLength,\n };\n }\n\n const x = useOffsetX(offsetXConfig, visibleRanges);\n const animationValue = useDerivedValue(() => x.value / size, [x, size]);\n const animatedStyle = useAnimatedStyle(\n () => animationStyle(x.value / size),\n [animationStyle]\n );\n\n const updateView = React.useCallback(\n (negativeRange: number[], positiveRange: number[]) => {\n setShouldUpdate(\n (index >= negativeRange[0] && index <= negativeRange[1]) ||\n (index >= positiveRange[0] && index <= positiveRange[1])\n );\n },\n [index]\n );\n\n useAnimatedReaction(\n () => visibleRanges.value,\n () => {\n runOnJS(updateView)(\n visibleRanges.value.negativeRange,\n visibleRanges.value.positiveRange\n );\n },\n [visibleRanges.value]\n );\n\n return (\n <Animated.View\n style={[\n {\n width: width || '100%',\n height: height || '100%',\n position: 'absolute',\n },\n animatedStyle,\n ]}\n >\n <LazyView shouldUpdate={shouldUpdate}>\n {children({ animationValue })}\n </LazyView>\n </Animated.View>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["parallax.ts"],"names":["parallaxLayout","baseConfig","modeConfig","size","vertical","parallaxScrollingOffset","parallaxScrollingScale","value","translate","zIndex","Extrapolate","CLAMP","scale","Math","pow","transform","translateY","translateX"],"mappings":";;;;;;;AAAA;;AAoBO,SAASA,cAAT,CACHC,UADG,EAEHC,UAAyB,GAAG,EAFzB,EAGL;AACE,QAAM;AAAEC,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAAqBH,UAA3B;AACA,QAAM;AAAEI,IAAAA,uBAAuB,GAAG,GAA5B;AAAiCC,IAAAA,sBAAsB,GAAG;AAA1D,MACFJ,UADJ;AAGA,SAAQK,KAAD,IAAmB;AACtB;;AACA,UAAMC,SAAS,GAAG,wCACdD,KADc,EAEd,CAAC,CAAC,CAAF,EAAK,CAAL,EAAQ,CAAR,CAFc,EAGd,CAAC,CAACJ,IAAD,GAAQE,uBAAT,EAAkC,CAAlC,EAAqCF,IAAI,GAAGE,uBAA5C,CAHc,CAAlB;AAMA,UAAMI,MAAM,GAAG,wCACXF,KADW,EAEX,CAAC,CAAC,CAAF,EAAK,CAAL,EAAQ,CAAR,CAFW,EAGX,CAAC,CAAD,EAAIJ,IAAJ,EAAU,CAAV,CAHW,EAIXO,mCAAYC,KAJD,CAAf;AAOA,UAAMC,KAAK,GAAG,wCACVL,KADU,EAEV,CAAC,CAAC,CAAF,EAAK,CAAL,EAAQ,CAAR,CAFU,EAGV,CACIM,IAAI,CAACC,GAAL,CAASR,sBAAT,EAAiC,CAAjC,CADJ,EAEIA,sBAFJ,EAGIO,IAAI,CAACC,GAAL,CAASR,sBAAT,EAAiC,CAAjC,CAHJ,CAHU,EAQVI,mCAAYC,KARF,CAAd;AAWA,WAAO;AACHI,MAAAA,SAAS,EAAE,CACPX,QAAQ,GACF;AACIY,QAAAA,UAAU,EAAER;AADhB,OADE,GAIF;AACIS,QAAAA,UAAU,EAAET;AADhB,OALC,EAQP;AACII,QAAAA;AADJ,OARO,CADR;AAaHH,MAAAA;AAbG,KAAP;AAeH,GAzCD;AA0CH","sourcesContent":["import { Extrapolate, interpolate } from 'react-native-reanimated';\n\ntype TBaseConfig = {\n size: number;\n vertical: boolean;\n};\n\nexport interface ILayoutConfig {\n /**\n * When use default Layout props,this prop can be control prev/next item offset.\n * @default 100\n */\n parallaxScrollingOffset?: number;\n /**\n * When use default Layout props,this prop can be control prev/next item offset.\n * @default 0.8\n */\n parallaxScrollingScale?: number;\n}\n\nexport function parallaxLayout(\n baseConfig: TBaseConfig,\n modeConfig: ILayoutConfig = {}\n) {\n const { size, vertical } = baseConfig;\n const { parallaxScrollingOffset = 100, parallaxScrollingScale = 0.8 } =\n modeConfig;\n\n return (value: number) => {\n 'worklet';\n const translate = interpolate(\n value,\n [-1, 0, 1],\n [-size + parallaxScrollingOffset, 0, size - parallaxScrollingOffset]\n );\n\n const zIndex = interpolate(\n value,\n [-1, 0, 1],\n [0, size, 0],\n Extrapolate.CLAMP\n );\n\n const scale = interpolate(\n value,\n [-1, 0, 1],\n [\n Math.pow(parallaxScrollingScale, 2),\n parallaxScrollingScale,\n Math.pow(parallaxScrollingScale, 2),\n ],\n Extrapolate.CLAMP\n );\n\n return {\n transform: [\n vertical\n ? {\n translateY: translate,\n }\n : {\n translateX: translate,\n },\n {\n scale,\n },\n ],\n zIndex,\n };\n };\n}\n"]}
1
+ {"version":3,"sources":["parallax.ts"],"names":["parallaxLayout","baseConfig","modeConfig","size","vertical","parallaxScrollingOffset","parallaxScrollingScale","value","translate","zIndex","Extrapolate","CLAMP","scale","Math","pow","transform","translateY","translateX"],"mappings":";;;;;;;AAAA;;AA6BO,SAASA,cAAT,CACHC,UADG,EAEHC,UAAyB,GAAG,EAFzB,EAGL;AACE,QAAM;AAAEC,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAAqBH,UAA3B;AACA,QAAM;AAAEI,IAAAA,uBAAuB,GAAG,GAA5B;AAAiCC,IAAAA,sBAAsB,GAAG;AAA1D,MACFJ,UADJ;AAGA,SAAQK,KAAD,IAAmB;AACtB;;AACA,UAAMC,SAAS,GAAG,wCACdD,KADc,EAEd,CAAC,CAAC,CAAF,EAAK,CAAL,EAAQ,CAAR,CAFc,EAGd,CAAC,CAACJ,IAAD,GAAQE,uBAAT,EAAkC,CAAlC,EAAqCF,IAAI,GAAGE,uBAA5C,CAHc,CAAlB;AAMA,UAAMI,MAAM,GAAG,wCACXF,KADW,EAEX,CAAC,CAAC,CAAF,EAAK,CAAL,EAAQ,CAAR,CAFW,EAGX,CAAC,CAAD,EAAIJ,IAAJ,EAAU,CAAV,CAHW,EAIXO,mCAAYC,KAJD,CAAf;AAOA,UAAMC,KAAK,GAAG,wCACVL,KADU,EAEV,CAAC,CAAC,CAAF,EAAK,CAAL,EAAQ,CAAR,CAFU,EAGV,CACIM,IAAI,CAACC,GAAL,CAASR,sBAAT,EAAiC,CAAjC,CADJ,EAEIA,sBAFJ,EAGIO,IAAI,CAACC,GAAL,CAASR,sBAAT,EAAiC,CAAjC,CAHJ,CAHU,EAQVI,mCAAYC,KARF,CAAd;AAWA,WAAO;AACHI,MAAAA,SAAS,EAAE,CACPX,QAAQ,GACF;AACIY,QAAAA,UAAU,EAAER;AADhB,OADE,GAIF;AACIS,QAAAA,UAAU,EAAET;AADhB,OALC,EAQP;AACII,QAAAA;AADJ,OARO,CADR;AAaHH,MAAAA;AAbG,KAAP;AAeH,GAzCD;AA0CH","sourcesContent":["import { Extrapolate, interpolate } from 'react-native-reanimated';\nimport type { ComputedDirectionTypes } from '../types';\n\ntype TBaseConfig = {\n size: number;\n vertical: boolean;\n};\n\ninterface ILayoutConfig {\n /**\n * When use default Layout props,this prop can be control prev/next item offset.\n * @default 100\n */\n parallaxScrollingOffset?: number;\n /**\n * When use default Layout props,this prop can be control prev/next item offset.\n * @default 0.8\n */\n parallaxScrollingScale?: number;\n}\n\nexport type TParallaxModeProps = ComputedDirectionTypes<{\n /**\n * Carousel Animated transitions.\n */\n mode?: 'parallax';\n modeConfig?: ILayoutConfig;\n}>;\n\nexport function parallaxLayout(\n baseConfig: TBaseConfig,\n modeConfig: ILayoutConfig = {}\n) {\n const { size, vertical } = baseConfig;\n const { parallaxScrollingOffset = 100, parallaxScrollingScale = 0.8 } =\n modeConfig;\n\n return (value: number) => {\n 'worklet';\n const translate = interpolate(\n value,\n [-1, 0, 1],\n [-size + parallaxScrollingOffset, 0, size - parallaxScrollingOffset]\n );\n\n const zIndex = interpolate(\n value,\n [-1, 0, 1],\n [0, size, 0],\n Extrapolate.CLAMP\n );\n\n const scale = interpolate(\n value,\n [-1, 0, 1],\n [\n Math.pow(parallaxScrollingScale, 2),\n parallaxScrollingScale,\n Math.pow(parallaxScrollingScale, 2),\n ],\n Extrapolate.CLAMP\n );\n\n return {\n transform: [\n vertical\n ? {\n translateY: translate,\n }\n : {\n translateX: translate,\n },\n {\n scale,\n },\n ],\n zIndex,\n };\n };\n}\n"]}
@@ -4,8 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.horizontalStackLayout = horizontalStackLayout;
7
+ exports.useHorizontalStackLayout = useHorizontalStackLayout;
7
8
  exports.verticalStackLayout = verticalStackLayout;
8
9
 
10
+ var _react = require("react");
11
+
9
12
  var _reactNative = require("react-native");
10
13
 
11
14
  var _reactNativeReanimated = require("react-native-reanimated");
@@ -74,6 +77,18 @@ function horizontalStackLayout(modeConfig = {}) {
74
77
  };
75
78
  }
76
79
 
80
+ function useHorizontalStackLayout(customAnimationConfig = {}, customConfig = {}) {
81
+ const config = (0, _react.useMemo)(() => ({
82
+ type: customAnimationConfig.snapDirection === 'right' ? 'negative' : 'positive',
83
+ viewCount: customAnimationConfig.showLength,
84
+ ...customConfig
85
+ }), [customAnimationConfig, customConfig]);
86
+ return {
87
+ layout: horizontalStackLayout(customAnimationConfig),
88
+ config
89
+ };
90
+ }
91
+
77
92
  function verticalStackLayout(modeConfig = {}) {
78
93
  return _value => {
79
94
  'worklet';
@@ -1 +1 @@
1
- {"version":3,"sources":["stack.ts"],"names":["screen","Dimensions","get","horizontalStackLayout","modeConfig","_value","showLength","snapDirection","moveSize","width","stackInterval","scaleInterval","opacityInterval","rotateZDeg","transform","validLength","value","inputRange","getCommonVariables","zIndex","opacity","getCommonStyles","styles","translateX","scale","rotateZ","Extrapolate","CLAMP","push","verticalStackLayout","translateY","opts","easeInOutCubic","v","Math","pow","page","floor","abs","diff","Error","Number","MIN_VALUE"],"mappings":"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","sourcesContent":["import { Dimensions, TransformsStyle, ViewStyle } from 'react-native';\nimport { Extrapolate, interpolate } from 'react-native-reanimated';\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 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 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":["screen","Dimensions","get","horizontalStackLayout","modeConfig","_value","showLength","snapDirection","moveSize","width","stackInterval","scaleInterval","opacityInterval","rotateZDeg","transform","validLength","value","inputRange","getCommonVariables","zIndex","opacity","getCommonStyles","styles","translateX","scale","rotateZ","Extrapolate","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"]}
@@ -32,7 +32,8 @@ function Carousel(_props, ref) {
32
32
  onScrollEnd,
33
33
  onSnapToItem,
34
34
  onScrollBegin,
35
- onProgressChange
35
+ onProgressChange,
36
+ customAnimation
36
37
  } = props;
37
38
  const commonVariables = useCommonVariables(props);
38
39
  const {
@@ -133,9 +134,15 @@ function Carousel(_props, ref) {
133
134
  index: i,
134
135
  handlerOffsetX: offsetX,
135
136
  visibleRanges: visibleRanges,
136
- animationStyle: layoutConfig
137
- }, renderItem(item, realIndex));
138
- }, [data, offsetX, renderItem, layoutConfig, visibleRanges]);
137
+ animationStyle: customAnimation || layoutConfig
138
+ }, ({
139
+ animationValue
140
+ }) => renderItem({
141
+ item,
142
+ index: realIndex,
143
+ animationValue
144
+ }));
145
+ }, [data, offsetX, visibleRanges, renderItem, layoutConfig, customAnimation]);
139
146
  return /*#__PURE__*/React.createElement(CTX.Provider, {
140
147
  value: {
141
148
  props,
@@ -1 +1 @@
1
- {"version":3,"sources":["Carousel.tsx"],"names":["React","Animated","runOnJS","useDerivedValue","useCarouselController","useAutoPlay","usePropsErrorBoundary","ScrollViewGesture","useVisibleRanges","StyleSheet","View","DATA_LENGTH","BaseLayout","useLayoutConfig","useInitProps","CTX","useCommonVariables","useOnProgressChange","Carousel","_props","ref","props","data","loop","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","commonVariables","size","handlerOffsetX","offsetX","totalSize","length","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","run","pause","scrollViewGestureOnScrollBegin","useCallback","current","scrollViewGestureOnScrollEnd","goToIndex","animated","to","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","SINGLE_ITEM","DOUBLE_ITEM","common","styles","container","itemsVertical","itemsHorizontal","map","forwardRef","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { DATA_LENGTH } from './constants';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\n\nfunction Carousel<T>(\n _props: PropsWithChildren<TCarouselProps<T>>,\n ref: React.Ref<ICarouselInstance>\n) {\n const props = useInitProps(_props);\n\n const {\n data,\n loop,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * data.length;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, data]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({ size, offsetX, data, onProgressChange });\n\n const carouselController = useCarouselController({\n loop,\n size,\n handlerOffsetX,\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n onChange: (i) => onSnapToItem && runOnJS(onSnapToItem)(i),\n });\n\n const {\n next,\n prev,\n sharedPreIndex,\n sharedIndex,\n computedIndex,\n getCurrentIndex,\n } = carouselController;\n\n const { run, pause } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pause();\n onScrollBegin?.();\n }, [onScrollBegin, pause]);\n\n const _onScrollEnd = React.useCallback(() => {\n computedIndex();\n onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, onScrollEnd]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n run();\n _onScrollEnd();\n }, [_onScrollEnd, run]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n carouselController.to(i, animated);\n },\n [carouselController]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n goToIndex,\n }),\n [getCurrentIndex, goToIndex, next, prev]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig<T>({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: T, i: number) => {\n let realIndex = i;\n if (data.length === DATA_LENGTH.SINGLE_ITEM) {\n realIndex = i % 1;\n }\n\n if (data.length === DATA_LENGTH.DOUBLE_ITEM) {\n realIndex = i % 2;\n }\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={layoutConfig}\n >\n {renderItem(item, realIndex)}\n </BaseLayout>\n );\n },\n [data, offsetX, renderItem, layoutConfig, visibleRanges]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n}\n\nexport default React.forwardRef(Carousel) as typeof Carousel;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
1
+ {"version":3,"sources":["Carousel.tsx"],"names":["React","Animated","runOnJS","useDerivedValue","useCarouselController","useAutoPlay","usePropsErrorBoundary","ScrollViewGesture","useVisibleRanges","StyleSheet","View","DATA_LENGTH","BaseLayout","useLayoutConfig","useInitProps","CTX","useCommonVariables","useOnProgressChange","Carousel","_props","ref","props","data","loop","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","commonVariables","size","handlerOffsetX","offsetX","totalSize","length","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","run","pause","scrollViewGestureOnScrollBegin","useCallback","current","scrollViewGestureOnScrollEnd","goToIndex","animated","to","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","SINGLE_ITEM","DOUBLE_ITEM","animationValue","index","common","styles","container","itemsVertical","itemsHorizontal","map","forwardRef","create","overflow","flexDirection"],"mappings":"AAAA,OAAOA,KAAP,MAAyC,OAAzC;AACA,OAAOC,QAAP,IAAmBC,OAAnB,EAA4BC,eAA5B,QAAmD,yBAAnD;AACA,SAASC,qBAAT,QAAsC,+BAAtC;AACA,SAASC,WAAT,QAA4B,qBAA5B;AACA,SAASC,qBAAT,QAAsC,+BAAtC;AACA,SAASC,iBAAT,QAAkC,qBAAlC;AACA,SAASC,gBAAT,QAAiC,0BAAjC;AAEA,SAASC,UAAT,EAAqBC,IAArB,QAAiC,cAAjC;AACA,SAASC,WAAT,QAA4B,aAA5B;AACA,SAASC,UAAT,QAA2B,sBAA3B;AACA,SAASC,eAAT,QAAgC,yBAAhC;AACA,SAASC,YAAT,QAA6B,sBAA7B;AACA,SAASC,GAAT,QAAoB,SAApB;AACA,SAASC,kBAAT,QAAmC,4BAAnC;AACA,SAASC,mBAAT,QAAoC,6BAApC;;AAEA,SAASC,QAAT,CACIC,MADJ,EAEIC,GAFJ,EAGE;AACE,QAAMC,KAAK,GAAGP,YAAY,CAACK,MAAD,CAA1B;AAEA,QAAM;AACFG,IAAAA,IADE;AAEFC,IAAAA,IAFE;AAGFC,IAAAA,IAHE;AAIFC,IAAAA,KAJE;AAKFC,IAAAA,KALE;AAMFC,IAAAA,MANE;AAOFC,IAAAA,QAPE;AAQFC,IAAAA,QARE;AASFC,IAAAA,UATE;AAUFC,IAAAA,eAVE;AAWFC,IAAAA,gBAXE;AAYFC,IAAAA,UAZE;AAaFC,IAAAA,WAbE;AAcFC,IAAAA,YAdE;AAeFC,IAAAA,aAfE;AAgBFC,IAAAA,gBAhBE;AAiBFC,IAAAA;AAjBE,MAkBFjB,KAlBJ;AAoBA,QAAMkB,eAAe,GAAGvB,kBAAkB,CAACK,KAAD,CAA1C;AACA,QAAM;AAAEmB,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAA2BF,eAAjC;AAEA,QAAMG,OAAO,GAAGvC,eAAe,CAAC,MAAM;AAClC,UAAMwC,SAAS,GAAGH,IAAI,GAAGlB,IAAI,CAACsB,MAA9B;AACA,UAAMC,CAAC,GAAGJ,cAAc,CAACK,KAAf,GAAuBH,SAAjC;;AAEA,QAAI,CAACpB,IAAL,EAAW;AACP,aAAOkB,cAAc,CAACK,KAAtB;AACH;;AACD,WAAOC,KAAK,CAACF,CAAD,CAAL,GAAW,CAAX,GAAeA,CAAtB;AACH,GAR8B,EAQ5B,CAACtB,IAAD,EAAOiB,IAAP,EAAalB,IAAb,CAR4B,CAA/B;AAUAhB,EAAAA,qBAAqB,CAACe,KAAD,CAArB;AACAJ,EAAAA,mBAAmB,CAAC;AAAEuB,IAAAA,IAAF;AAAQE,IAAAA,OAAR;AAAiBpB,IAAAA,IAAjB;AAAuBe,IAAAA;AAAvB,GAAD,CAAnB;AAEA,QAAMW,kBAAkB,GAAG5C,qBAAqB,CAAC;AAC7CmB,IAAAA,IAD6C;AAE7CiB,IAAAA,IAF6C;AAG7CC,IAAAA,cAH6C;AAI7CG,IAAAA,MAAM,EAAEtB,IAAI,CAACsB,MAJgC;AAK7CK,IAAAA,OAAO,EAAE,CAAC3B,IAAI,CAACsB,MAL8B;AAM7CM,IAAAA,cAAc,EAAE5B,IAAI,CAACsB,MANwB;AAO7CV,IAAAA,WAAW,EAAE,MAAMhC,OAAO,CAACiD,YAAD,CAAP,EAP0B;AAQ7Cf,IAAAA,aAAa,EAAE,MAAM,CAAC,CAACA,aAAF,IAAmBlC,OAAO,CAACkC,aAAD,CAAP,EARK;AAS7CgB,IAAAA,QAAQ,EAAGC,CAAD,IAAOlB,YAAY,IAAIjC,OAAO,CAACiC,YAAD,CAAP,CAAsBkB,CAAtB;AATY,GAAD,CAAhD;AAYA,QAAM;AACFC,IAAAA,IADE;AAEFC,IAAAA,IAFE;AAGFC,IAAAA,cAHE;AAIFC,IAAAA,WAJE;AAKFC,IAAAA,aALE;AAMFC,IAAAA;AANE,MAOFX,kBAPJ;AASA,QAAM;AAAEY,IAAAA,GAAF;AAAOC,IAAAA;AAAP,MAAiBxD,WAAW,CAAC;AAC/BwB,IAAAA,QAD+B;AAE/BG,IAAAA,gBAF+B;AAG/BD,IAAAA,eAH+B;AAI/BiB,IAAAA;AAJ+B,GAAD,CAAlC;AAOA,QAAMc,8BAA8B,GAAG9D,KAAK,CAAC+D,WAAN,CAAkB,MAAM;AAC3DF,IAAAA,KAAK;AACLzB,IAAAA,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa;AAChB,GAHsC,EAGpC,CAACA,aAAD,EAAgByB,KAAhB,CAHoC,CAAvC;;AAKA,QAAMV,YAAY,GAAGnD,KAAK,CAAC+D,WAAN,CAAkB,MAAM;AACzCL,IAAAA,aAAa;AACbxB,IAAAA,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAGsB,cAAc,CAACQ,OAAlB,EAA2BP,WAAW,CAACO,OAAvC,CAAX;AACH,GAHoB,EAGlB,CAACR,cAAD,EAAiBC,WAAjB,EAA8BC,aAA9B,EAA6CxB,WAA7C,CAHkB,CAArB;;AAKA,QAAM+B,4BAA4B,GAAGjE,KAAK,CAAC+D,WAAN,CAAkB,MAAM;AACzDH,IAAAA,GAAG;;AACHT,IAAAA,YAAY;AACf,GAHoC,EAGlC,CAACA,YAAD,EAAeS,GAAf,CAHkC,CAArC;AAKA,QAAMM,SAAS,GAAGlE,KAAK,CAAC+D,WAAN,CACd,CAACV,CAAD,EAAYc,QAAZ,KAAmC;AAC/BnB,IAAAA,kBAAkB,CAACoB,EAAnB,CAAsBf,CAAtB,EAAyBc,QAAzB;AACH,GAHa,EAId,CAACnB,kBAAD,CAJc,CAAlB;AAOAhD,EAAAA,KAAK,CAACqE,mBAAN,CACIjD,GADJ,EAEI,OAAO;AACHkC,IAAAA,IADG;AAEHC,IAAAA,IAFG;AAGHI,IAAAA,eAHG;AAIHO,IAAAA;AAJG,GAAP,CAFJ,EAQI,CAACP,eAAD,EAAkBO,SAAlB,EAA6BZ,IAA7B,EAAmCC,IAAnC,CARJ;AAWA,QAAMe,aAAa,GAAG9D,gBAAgB,CAAC;AACnC+D,IAAAA,KAAK,EAAEjD,IAAI,CAACsB,MADuB;AAEnC4B,IAAAA,QAAQ,EAAEhC,IAFyB;AAGnCiC,IAAAA,WAAW,EAAEhC,cAHsB;AAInCX,IAAAA;AAJmC,GAAD,CAAtC;AAOA,QAAM4C,YAAY,GAAG7D,eAAe,CAAI,EAAE,GAAGQ,KAAL;AAAYmB,IAAAA;AAAZ,GAAJ,CAApC;AAEA,QAAMmC,YAAY,GAAG3E,KAAK,CAAC+D,WAAN,CACjB,CAACa,IAAD,EAAUvB,CAAV,KAAwB;AACpB,QAAIwB,SAAS,GAAGxB,CAAhB;;AACA,QAAI/B,IAAI,CAACsB,MAAL,KAAgBjC,WAAW,CAACmE,WAAhC,EAA6C;AACzCD,MAAAA,SAAS,GAAGxB,CAAC,GAAG,CAAhB;AACH;;AAED,QAAI/B,IAAI,CAACsB,MAAL,KAAgBjC,WAAW,CAACoE,WAAhC,EAA6C;AACzCF,MAAAA,SAAS,GAAGxB,CAAC,GAAG,CAAhB;AACH;;AAED,wBACI,oBAAC,UAAD;AACI,MAAA,GAAG,EAAEA,CADT;AAEI,MAAA,KAAK,EAAEA,CAFX;AAGI,MAAA,cAAc,EAAEX,OAHpB;AAII,MAAA,aAAa,EAAE4B,aAJnB;AAKI,MAAA,cAAc,EAAEhC,eAAe,IAAIoC;AALvC,OAOK,CAAC;AAAEM,MAAAA;AAAF,KAAD,KACG/C,UAAU,CAAC;AACP2C,MAAAA,IADO;AAEPK,MAAAA,KAAK,EAAEJ,SAFA;AAGPG,MAAAA;AAHO,KAAD,CARlB,CADJ;AAiBH,GA5BgB,EA6BjB,CACI1D,IADJ,EAEIoB,OAFJ,EAGI4B,aAHJ,EAIIrC,UAJJ,EAKIyC,YALJ,EAMIpC,eANJ,CA7BiB,CAArB;AAuCA,sBACI,oBAAC,GAAD,CAAK,QAAL;AAAc,IAAA,KAAK,EAAE;AAAEjB,MAAAA,KAAF;AAAS6D,MAAAA,MAAM,EAAE3C;AAAjB;AAArB,kBACI,oBAAC,IAAD;AACI,IAAA,KAAK,EAAE,CACH4C,MAAM,CAACC,SADJ,EAEH;AAAE1D,MAAAA,KAAK,EAAEA,KAAK,IAAI,MAAlB;AAA0BC,MAAAA,MAAM,EAAEA,MAAM,IAAI;AAA5C,KAFG,EAGHF,KAHG;AADX,kBAOI,oBAAC,iBAAD;AACI,IAAA,IAAI,EAAEe,IADV;AAEI,IAAA,WAAW,EAAEC,cAFjB;AAGI,IAAA,aAAa,EAAEqB,8BAHnB;AAII,IAAA,WAAW,EAAEG;AAJjB,kBAMI,oBAAC,QAAD,CAAU,IAAV;AACI,IAAA,GAAG,EAAEzC,IADT;AAEI,IAAA,KAAK,EAAE,CACH2D,MAAM,CAACC,SADJ,EAEH;AACI1D,MAAAA,KAAK,EAAEA,KAAK,IAAI,MADpB;AAEIC,MAAAA,MAAM,EAAEA,MAAM,IAAI;AAFtB,KAFG,EAMHF,KANG,EAOHG,QAAQ,GACFuD,MAAM,CAACE,aADL,GAEFF,MAAM,CAACG,eATV;AAFX,KAcKhE,IAAI,CAACiE,GAAL,CAASZ,YAAT,CAdL,CANJ,CAPJ,CADJ,CADJ;AAmCH;;AAED,4BAAe3E,KAAK,CAACwF,UAAN,CAAiBtE,QAAjB,CAAf;AAEA,MAAMiE,MAAM,GAAG1E,UAAU,CAACgF,MAAX,CAAkB;AAC7BL,EAAAA,SAAS,EAAE;AACPM,IAAAA,QAAQ,EAAE;AADH,GADkB;AAI7BJ,EAAAA,eAAe,EAAE;AACbK,IAAAA,aAAa,EAAE;AADF,GAJY;AAO7BN,EAAAA,aAAa,EAAE;AACXM,IAAAA,aAAa,EAAE;AADJ;AAPc,CAAlB,CAAf","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { DATA_LENGTH } from './constants';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\n\nfunction Carousel<T>(\n _props: PropsWithChildren<TCarouselProps<T>>,\n ref: React.Ref<ICarouselInstance>\n) {\n const props = useInitProps(_props);\n\n const {\n data,\n loop,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * data.length;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, data]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({ size, offsetX, data, onProgressChange });\n\n const carouselController = useCarouselController({\n loop,\n size,\n handlerOffsetX,\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n onChange: (i) => onSnapToItem && runOnJS(onSnapToItem)(i),\n });\n\n const {\n next,\n prev,\n sharedPreIndex,\n sharedIndex,\n computedIndex,\n getCurrentIndex,\n } = carouselController;\n\n const { run, pause } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pause();\n onScrollBegin?.();\n }, [onScrollBegin, pause]);\n\n const _onScrollEnd = React.useCallback(() => {\n computedIndex();\n onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, onScrollEnd]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n run();\n _onScrollEnd();\n }, [_onScrollEnd, run]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n carouselController.to(i, animated);\n },\n [carouselController]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n goToIndex,\n }),\n [getCurrentIndex, goToIndex, next, prev]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig<T>({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: T, i: number) => {\n let realIndex = i;\n if (data.length === DATA_LENGTH.SINGLE_ITEM) {\n realIndex = i % 1;\n }\n\n if (data.length === DATA_LENGTH.DOUBLE_ITEM) {\n realIndex = i % 2;\n }\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n data,\n offsetX,\n visibleRanges,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n}\n\nexport default React.forwardRef(Carousel) as typeof Carousel;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
@@ -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;;AAED,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\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","_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"]}