react-native-reanimated-carousel 2.2.1 → 2.2.2

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.
@@ -45,6 +45,7 @@ function Carousel(_props, ref) {
45
45
  const props = (0, _useInitProps.useInitProps)(_props);
46
46
  const {
47
47
  data,
48
+ rawData,
48
49
  loop,
49
50
  mode,
50
51
  style,
@@ -82,7 +83,7 @@ function Carousel(_props, ref) {
82
83
  (0, _useOnProgressChange.useOnProgressChange)({
83
84
  size,
84
85
  offsetX,
85
- data,
86
+ rawData,
86
87
  onProgressChange
87
88
  });
88
89
  const carouselController = (0, _useCarouselController.useCarouselController)({
@@ -156,11 +157,11 @@ function Carousel(_props, ref) {
156
157
  const renderLayout = _react.default.useCallback((item, i) => {
157
158
  let realIndex = i;
158
159
 
159
- if (data.length === _constants.DATA_LENGTH.SINGLE_ITEM) {
160
+ if (rawData.length === _constants.DATA_LENGTH.SINGLE_ITEM) {
160
161
  realIndex = i % 1;
161
162
  }
162
163
 
163
- if (data.length === _constants.DATA_LENGTH.DOUBLE_ITEM) {
164
+ if (rawData.length === _constants.DATA_LENGTH.DOUBLE_ITEM) {
164
165
  realIndex = i % 2;
165
166
  }
166
167
 
@@ -177,7 +178,7 @@ function Carousel(_props, ref) {
177
178
  index: realIndex,
178
179
  animationValue
179
180
  }));
180
- }, [data, offsetX, visibleRanges, renderItem, layoutConfig, customAnimation]);
181
+ }, [rawData, offsetX, visibleRanges, renderItem, layoutConfig, customAnimation]);
181
182
 
182
183
  return /*#__PURE__*/_react.default.createElement(_store.CTX.Provider, {
183
184
  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","scrollAnimationDuration","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","commonVariables","size","handlerOffsetX","offsetX","totalSize","length","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","duration","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","start","pause","scrollViewGestureOnScrollBegin","React","useCallback","current","scrollViewGestureOnScrollEnd","goToIndex","animated","to","useImperativeHandle","scrollTo","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';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\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 scrollAnimationDuration,\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 duration: scrollAnimationDuration,\n });\n\n const {\n next,\n prev,\n sharedPreIndex,\n sharedIndex,\n computedIndex,\n getCurrentIndex,\n } = carouselController;\n\n const { start, 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 start();\n _onScrollEnd();\n }, [_onScrollEnd, start]);\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 scrollTo: carouselController.scrollTo,\n }),\n [getCurrentIndex, goToIndex, next, prev, carouselController.scrollTo]\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
+ {"version":3,"sources":["Carousel.tsx"],"names":["Carousel","_props","ref","props","data","rawData","loop","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","commonVariables","size","handlerOffsetX","offsetX","totalSize","length","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","duration","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","start","pause","scrollViewGestureOnScrollBegin","React","useCallback","current","scrollViewGestureOnScrollEnd","goToIndex","animated","to","useImperativeHandle","scrollTo","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';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\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 rawData,\n loop,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\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, rawData, 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 duration: scrollAnimationDuration,\n });\n\n const {\n next,\n prev,\n sharedPreIndex,\n sharedIndex,\n computedIndex,\n getCurrentIndex,\n } = carouselController;\n\n const { start, 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 start();\n _onScrollEnd();\n }, [_onScrollEnd, start]);\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 scrollTo: carouselController.scrollTo,\n }),\n [getCurrentIndex, goToIndex, next, prev, carouselController.scrollTo]\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 (rawData.length === DATA_LENGTH.SINGLE_ITEM) {\n realIndex = i % 1;\n }\n\n if (rawData.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 rawData,\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"]}
@@ -38,9 +38,13 @@ function useAutoPlay(opts) {
38
38
  stopped.current = true;
39
39
  }, []);
40
40
  const start = React.useCallback(() => {
41
+ if (!autoPlay) {
42
+ return;
43
+ }
44
+
41
45
  stopped.current = false;
42
46
  play();
43
- }, [play]);
47
+ }, [play, autoPlay]);
44
48
  React.useEffect(() => {
45
49
  if (autoPlay) {
46
50
  start();
@@ -1 +1 @@
1
- {"version":3,"sources":["useAutoPlay.ts"],"names":["useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","timer","React","useRef","stopped","play","useCallback","current","setTimeout","prev","onFinished","next","pause","clearInterval","start","useEffect"],"mappings":";;;;;;;AAAA;;;;;;AAGO,SAASA,WAAT,CAAqBC,IAArB,EAKJ;AACC,QAAM;AACFC,IAAAA,QAAQ,GAAG,KADT;AAEFC,IAAAA,eAAe,GAAG,KAFhB;AAGFC,IAAAA,gBAHE;AAIFC,IAAAA;AAJE,MAKFJ,IALJ;AAOA,QAAMK,KAAK,GAAGC,KAAK,CAACC,MAAN,EAAd;AACA,QAAMC,OAAO,GAAGF,KAAK,CAACC,MAAN,CAAsB,CAACN,QAAvB,CAAhB;AAEA,QAAMQ,IAAI,GAAGH,KAAK,CAACI,WAAN,CAAkB,MAAM;AACjC,QAAIF,OAAO,CAACG,OAAZ,EAAqB;AACjB;AACH;;AAEDN,IAAAA,KAAK,CAACM,OAAN,GAAgBC,UAAU,CAAC,MAAM;AAC7BV,MAAAA,eAAe,GACTE,kBAAkB,CAACS,IAAnB,CAAwB;AAAEC,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CADS,GAETL,kBAAkB,CAACW,IAAnB,CAAwB;AAAED,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CAFN;AAGH,KAJyB,EAIvBN,gBAJuB,CAA1B;AAKH,GAVY,EAUV,CAACD,eAAD,EAAkBC,gBAAlB,EAAoCC,kBAApC,CAVU,CAAb;AAYA,QAAMY,KAAK,GAAGV,KAAK,CAACI,WAAN,CAAkB,MAAM;AAClCL,IAAAA,KAAK,CAACM,OAAN,IAAiBM,aAAa,CAACZ,KAAK,CAACM,OAAP,CAA9B;AACAH,IAAAA,OAAO,CAACG,OAAR,GAAkB,IAAlB;AACH,GAHa,EAGX,EAHW,CAAd;AAKA,QAAMO,KAAK,GAAGZ,KAAK,CAACI,WAAN,CAAkB,MAAM;AAClCF,IAAAA,OAAO,CAACG,OAAR,GAAkB,KAAlB;AACAF,IAAAA,IAAI;AACP,GAHa,EAGX,CAACA,IAAD,CAHW,CAAd;AAKAH,EAAAA,KAAK,CAACa,SAAN,CAAgB,MAAM;AAClB,QAAIlB,QAAJ,EAAc;AACViB,MAAAA,KAAK;AACR,KAFD,MAEO;AACHF,MAAAA,KAAK;AACR;;AACD,WAAOA,KAAP;AACH,GAPD,EAOG,CAACA,KAAD,EAAQE,KAAR,EAAejB,QAAf,CAPH;AASA,SAAO;AACHe,IAAAA,KADG;AAEHE,IAAAA;AAFG,GAAP;AAIH","sourcesContent":["import * as React from 'react';\nimport type { ICarouselController } from './useCarouselController';\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean;\n autoPlayInterval?: number;\n autoPlayReverse?: boolean;\n carouselController: ICarouselController;\n}) {\n const {\n autoPlay = false,\n autoPlayReverse = false,\n autoPlayInterval,\n carouselController,\n } = opts;\n\n const timer = React.useRef<NodeJS.Timer>();\n const stopped = React.useRef<boolean>(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current) {\n return;\n }\n\n timer.current = setTimeout(() => {\n autoPlayReverse\n ? carouselController.prev({ onFinished: play })\n : carouselController.next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, carouselController]);\n\n const pause = React.useCallback(() => {\n timer.current && clearInterval(timer.current);\n stopped.current = true;\n }, []);\n\n const start = React.useCallback(() => {\n stopped.current = false;\n play();\n }, [play]);\n\n React.useEffect(() => {\n if (autoPlay) {\n start();\n } else {\n pause();\n }\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n"]}
1
+ {"version":3,"sources":["useAutoPlay.ts"],"names":["useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","timer","React","useRef","stopped","play","useCallback","current","setTimeout","prev","onFinished","next","pause","clearInterval","start","useEffect"],"mappings":";;;;;;;AAAA;;;;;;AAGO,SAASA,WAAT,CAAqBC,IAArB,EAKJ;AACC,QAAM;AACFC,IAAAA,QAAQ,GAAG,KADT;AAEFC,IAAAA,eAAe,GAAG,KAFhB;AAGFC,IAAAA,gBAHE;AAIFC,IAAAA;AAJE,MAKFJ,IALJ;AAOA,QAAMK,KAAK,GAAGC,KAAK,CAACC,MAAN,EAAd;AACA,QAAMC,OAAO,GAAGF,KAAK,CAACC,MAAN,CAAsB,CAACN,QAAvB,CAAhB;AAEA,QAAMQ,IAAI,GAAGH,KAAK,CAACI,WAAN,CAAkB,MAAM;AACjC,QAAIF,OAAO,CAACG,OAAZ,EAAqB;AACjB;AACH;;AAEDN,IAAAA,KAAK,CAACM,OAAN,GAAgBC,UAAU,CAAC,MAAM;AAC7BV,MAAAA,eAAe,GACTE,kBAAkB,CAACS,IAAnB,CAAwB;AAAEC,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CADS,GAETL,kBAAkB,CAACW,IAAnB,CAAwB;AAAED,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CAFN;AAGH,KAJyB,EAIvBN,gBAJuB,CAA1B;AAKH,GAVY,EAUV,CAACD,eAAD,EAAkBC,gBAAlB,EAAoCC,kBAApC,CAVU,CAAb;AAYA,QAAMY,KAAK,GAAGV,KAAK,CAACI,WAAN,CAAkB,MAAM;AAClCL,IAAAA,KAAK,CAACM,OAAN,IAAiBM,aAAa,CAACZ,KAAK,CAACM,OAAP,CAA9B;AACAH,IAAAA,OAAO,CAACG,OAAR,GAAkB,IAAlB;AACH,GAHa,EAGX,EAHW,CAAd;AAKA,QAAMO,KAAK,GAAGZ,KAAK,CAACI,WAAN,CAAkB,MAAM;AAClC,QAAI,CAACT,QAAL,EAAe;AACX;AACH;;AACDO,IAAAA,OAAO,CAACG,OAAR,GAAkB,KAAlB;AACAF,IAAAA,IAAI;AACP,GANa,EAMX,CAACA,IAAD,EAAOR,QAAP,CANW,CAAd;AAQAK,EAAAA,KAAK,CAACa,SAAN,CAAgB,MAAM;AAClB,QAAIlB,QAAJ,EAAc;AACViB,MAAAA,KAAK;AACR,KAFD,MAEO;AACHF,MAAAA,KAAK;AACR;;AACD,WAAOA,KAAP;AACH,GAPD,EAOG,CAACA,KAAD,EAAQE,KAAR,EAAejB,QAAf,CAPH;AASA,SAAO;AACHe,IAAAA,KADG;AAEHE,IAAAA;AAFG,GAAP;AAIH","sourcesContent":["import * as React from 'react';\nimport type { ICarouselController } from './useCarouselController';\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean;\n autoPlayInterval?: number;\n autoPlayReverse?: boolean;\n carouselController: ICarouselController;\n}) {\n const {\n autoPlay = false,\n autoPlayReverse = false,\n autoPlayInterval,\n carouselController,\n } = opts;\n\n const timer = React.useRef<NodeJS.Timer>();\n const stopped = React.useRef<boolean>(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current) {\n return;\n }\n\n timer.current = setTimeout(() => {\n autoPlayReverse\n ? carouselController.prev({ onFinished: play })\n : carouselController.next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, carouselController]);\n\n const pause = React.useCallback(() => {\n timer.current && clearInterval(timer.current);\n stopped.current = true;\n }, []);\n\n const start = React.useCallback(() => {\n if (!autoPlay) {\n return;\n }\n stopped.current = false;\n play();\n }, [play, autoPlay]);\n\n React.useEffect(() => {\n if (autoPlay) {\n start();\n } else {\n pause();\n }\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n"]}
@@ -14,7 +14,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
14
14
  function useInitProps(props) {
15
15
  const {
16
16
  defaultIndex = 0,
17
- data: _data = [],
17
+ data: rawData = [],
18
18
  loop = true,
19
19
  autoPlayInterval: _autoPlayInterval = 1000,
20
20
  scrollAnimationDuration = 500,
@@ -30,18 +30,18 @@ function useInitProps(props) {
30
30
  const autoPlayInterval = Math.max(_autoPlayInterval, 0);
31
31
 
32
32
  const data = _react.default.useMemo(() => {
33
- if (!loop) return _data;
33
+ if (!loop) return rawData;
34
34
 
35
- if (_data.length === _constants.DATA_LENGTH.SINGLE_ITEM) {
36
- return [_data[0], _data[0], _data[0]];
35
+ if (rawData.length === _constants.DATA_LENGTH.SINGLE_ITEM) {
36
+ return [rawData[0], rawData[0], rawData[0]];
37
37
  }
38
38
 
39
- if (_data.length === _constants.DATA_LENGTH.DOUBLE_ITEM) {
40
- return [_data[0], _data[1], _data[0], _data[1]];
39
+ if (rawData.length === _constants.DATA_LENGTH.DOUBLE_ITEM) {
40
+ return [rawData[0], rawData[1], rawData[0], rawData[1]];
41
41
  }
42
42
 
43
- return _data;
44
- }, [_data, loop]);
43
+ return rawData;
44
+ }, [rawData, loop]);
45
45
 
46
46
  if (props.mode === 'vertical-stack' || props.mode === 'horizontal-stack') {
47
47
  var _props$modeConfig$sho, _props$modeConfig;
@@ -56,6 +56,7 @@ function useInitProps(props) {
56
56
  return { ...props,
57
57
  defaultIndex,
58
58
  data,
59
+ rawData,
59
60
  loop,
60
61
  autoPlayInterval,
61
62
  scrollAnimationDuration,
@@ -1 +1 @@
1
- {"version":3,"sources":["useInitProps.ts"],"names":["useInitProps","props","defaultIndex","data","_data","loop","autoPlayInterval","_autoPlayInterval","scrollAnimationDuration","style","panGestureHandlerProps","pagingEnabled","enableSnap","width","_width","height","_height","Math","round","max","React","useMemo","length","DATA_LENGTH","SINGLE_ITEM","DOUBLE_ITEM","mode","modeConfig","showLength"],"mappings":";;;;;;;AAAA;;AACA;;;;AAkBO,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,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,GAAGiB,eAAMC,OAAN,CAAmB,MAAM;AAClC,QAAI,CAAChB,IAAL,EAAW,OAAOD,KAAP;;AAEX,QAAIA,KAAK,CAACkB,MAAN,KAAiBC,uBAAYC,WAAjC,EAA8C;AAC1C,aAAO,CAACpB,KAAK,CAAC,CAAD,CAAN,EAAWA,KAAK,CAAC,CAAD,CAAhB,EAAqBA,KAAK,CAAC,CAAD,CAA1B,CAAP;AACH;;AAED,QAAIA,KAAK,CAACkB,MAAN,KAAiBC,uBAAYE,WAAjC,EAA8C;AAC1C,aAAO,CAACrB,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,CAACyB,IAAN,KAAe,gBAAf,IAAmCzB,KAAK,CAACyB,IAAN,KAAe,kBAAtD,EAA0E;AAAA;;AACtE,QAAI,CAACzB,KAAK,CAAC0B,UAAX,EAAuB;AACnB1B,MAAAA,KAAK,CAAC0B,UAAN,GAAmB,EAAnB;AACH;;AACD1B,IAAAA,KAAK,CAAC0B,UAAN,CAAiBC,UAAjB,iDACI3B,KAAK,CAAC0B,UADV,sDACI,kBAAkBC,UADtB,yEACoCzB,IAAI,CAACmB,MAAL,GAAc,CADlD;AAEH;;AACD,SAAO,EACH,GAAGrB,KADA;AAEHC,IAAAA,YAFG;AAGHC,IAAAA,IAHG;AAIHE,IAAAA,IAJG;AAKHC,IAAAA,gBALG;AAMHE,IAAAA,uBANG;AAOHC,IAAAA,KAPG;AAQHC,IAAAA,sBARG;AASHC,IAAAA,aATG;AAUHC,IAAAA,UAVG;AAWHC,IAAAA,KAXG;AAYHE,IAAAA;AAZG,GAAP;AAcH","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\nexport function useInitProps<T>(\n props: TCarouselProps<T>\n): TInitializeCarouselProps<T> {\n const {\n defaultIndex = 0,\n data: _data = [],\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 _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 scrollAnimationDuration,\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","rawData","loop","autoPlayInterval","_autoPlayInterval","scrollAnimationDuration","style","panGestureHandlerProps","pagingEnabled","enableSnap","width","_width","height","_height","Math","round","max","React","useMemo","length","DATA_LENGTH","SINGLE_ITEM","DOUBLE_ITEM","mode","modeConfig","showLength"],"mappings":";;;;;;;AAAA;;AACA;;;;AAqBO,SAASA,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,GAAGiB,eAAMC,OAAN,CAAmB,MAAM;AAClC,QAAI,CAAChB,IAAL,EAAW,OAAOD,OAAP;;AAEX,QAAIA,OAAO,CAACkB,MAAR,KAAmBC,uBAAYC,WAAnC,EAAgD;AAC5C,aAAO,CAACpB,OAAO,CAAC,CAAD,CAAR,EAAaA,OAAO,CAAC,CAAD,CAApB,EAAyBA,OAAO,CAAC,CAAD,CAAhC,CAAP;AACH;;AAED,QAAIA,OAAO,CAACkB,MAAR,KAAmBC,uBAAYE,WAAnC,EAAgD;AAC5C,aAAO,CAACrB,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,CAACyB,IAAN,KAAe,gBAAf,IAAmCzB,KAAK,CAACyB,IAAN,KAAe,kBAAtD,EAA0E;AAAA;;AACtE,QAAI,CAACzB,KAAK,CAAC0B,UAAX,EAAuB;AACnB1B,MAAAA,KAAK,CAAC0B,UAAN,GAAmB,EAAnB;AACH;;AACD1B,IAAAA,KAAK,CAAC0B,UAAN,CAAiBC,UAAjB,iDACI3B,KAAK,CAAC0B,UADV,sDACI,kBAAkBC,UADtB,yEACoCzB,IAAI,CAACmB,MAAL,GAAc,CADlD;AAEH;;AACD,SAAO,EACH,GAAGrB,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"]}
@@ -12,28 +12,28 @@ var _constants = require("../constants");
12
12
  function useOnProgressChange(opts) {
13
13
  const {
14
14
  offsetX,
15
- data,
15
+ rawData,
16
16
  size,
17
17
  onProgressChange
18
18
  } = opts;
19
19
  (0, _reactNativeReanimated.useAnimatedReaction)(() => offsetX.value, _value => {
20
20
  let value = _value;
21
21
 
22
- if (data.length === _constants.DATA_LENGTH.SINGLE_ITEM) {
22
+ if (rawData.length === _constants.DATA_LENGTH.SINGLE_ITEM) {
23
23
  value = value % size;
24
24
  }
25
25
 
26
- if (data.length === _constants.DATA_LENGTH.DOUBLE_ITEM) {
26
+ if (rawData.length === _constants.DATA_LENGTH.DOUBLE_ITEM) {
27
27
  value = value % (size * 2);
28
28
  }
29
29
 
30
30
  let absoluteProgress = Math.abs(value / size);
31
31
 
32
32
  if (value > 0) {
33
- absoluteProgress = data.length - absoluteProgress;
33
+ absoluteProgress = rawData.length - absoluteProgress;
34
34
  }
35
35
 
36
36
  !!onProgressChange && (0, _reactNativeReanimated.runOnJS)(onProgressChange)(value, absoluteProgress);
37
- }, [onProgressChange, data]);
37
+ }, [onProgressChange, rawData]);
38
38
  }
39
39
  //# sourceMappingURL=useOnProgressChange.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["useOnProgressChange.ts"],"names":["useOnProgressChange","opts","offsetX","data","size","onProgressChange","value","_value","length","DATA_LENGTH","SINGLE_ITEM","DOUBLE_ITEM","absoluteProgress","Math","abs"],"mappings":";;;;;;;AAAA;;AAIA;;AAGO,SAASA,mBAAT,CACHC,IADG,EAKL;AACE,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,IAAX;AAAiBC,IAAAA,IAAjB;AAAuBC,IAAAA;AAAvB,MAA4CJ,IAAlD;AACA,kDACI,MAAMC,OAAO,CAACI,KADlB,EAEKC,MAAD,IAAY;AACR,QAAID,KAAK,GAAGC,MAAZ;;AAEA,QAAIJ,IAAI,CAACK,MAAL,KAAgBC,uBAAYC,WAAhC,EAA6C;AACzCJ,MAAAA,KAAK,GAAGA,KAAK,GAAGF,IAAhB;AACH;;AAED,QAAID,IAAI,CAACK,MAAL,KAAgBC,uBAAYE,WAAhC,EAA6C;AACzCL,MAAAA,KAAK,GAAGA,KAAK,IAAIF,IAAI,GAAG,CAAX,CAAb;AACH;;AAED,QAAIQ,gBAAgB,GAAGC,IAAI,CAACC,GAAL,CAASR,KAAK,GAAGF,IAAjB,CAAvB;;AAEA,QAAIE,KAAK,GAAG,CAAZ,EAAe;AACXM,MAAAA,gBAAgB,GAAGT,IAAI,CAACK,MAAL,GAAcI,gBAAjC;AACH;;AAED,KAAC,CAACP,gBAAF,IACI,oCAAQA,gBAAR,EAA0BC,KAA1B,EAAiCM,gBAAjC,CADJ;AAEH,GArBL,EAsBI,CAACP,gBAAD,EAAmBF,IAAnB,CAtBJ;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":["useOnProgressChange","opts","offsetX","rawData","size","onProgressChange","value","_value","length","DATA_LENGTH","SINGLE_ITEM","DOUBLE_ITEM","absoluteProgress","Math","abs"],"mappings":";;;;;;;AAAA;;AAIA;;AAGO,SAASA,mBAAT,CACHC,IADG,EAML;AACE,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,OAAX;AAAoBC,IAAAA,IAApB;AAA0BC,IAAAA;AAA1B,MAA+CJ,IAArD;AACA,kDACI,MAAMC,OAAO,CAACI,KADlB,EAEKC,MAAD,IAAY;AACR,QAAID,KAAK,GAAGC,MAAZ;;AAEA,QAAIJ,OAAO,CAACK,MAAR,KAAmBC,uBAAYC,WAAnC,EAAgD;AAC5CJ,MAAAA,KAAK,GAAGA,KAAK,GAAGF,IAAhB;AACH;;AAED,QAAID,OAAO,CAACK,MAAR,KAAmBC,uBAAYE,WAAnC,EAAgD;AAC5CL,MAAAA,KAAK,GAAGA,KAAK,IAAIF,IAAI,GAAG,CAAX,CAAb;AACH;;AAED,QAAIQ,gBAAgB,GAAGC,IAAI,CAACC,GAAL,CAASR,KAAK,GAAGF,IAAjB,CAAvB;;AAEA,QAAIE,KAAK,GAAG,CAAZ,EAAe;AACXM,MAAAA,gBAAgB,GAAGT,OAAO,CAACK,MAAR,GAAiBI,gBAApC;AACH;;AAED,KAAC,CAACP,gBAAF,IACI,oCAAQA,gBAAR,EAA0BC,KAA1B,EAAiCM,gBAAjC,CADJ;AAEH,GArBL,EAsBI,CAACP,gBAAD,EAAmBF,OAAnB,CAtBJ;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"]}
@@ -18,6 +18,7 @@ function Carousel(_props, ref) {
18
18
  const props = useInitProps(_props);
19
19
  const {
20
20
  data,
21
+ rawData,
21
22
  loop,
22
23
  mode,
23
24
  style,
@@ -55,7 +56,7 @@ function Carousel(_props, ref) {
55
56
  useOnProgressChange({
56
57
  size,
57
58
  offsetX,
58
- data,
59
+ rawData,
59
60
  onProgressChange
60
61
  });
61
62
  const carouselController = useCarouselController({
@@ -124,11 +125,11 @@ function Carousel(_props, ref) {
124
125
  const renderLayout = React.useCallback((item, i) => {
125
126
  let realIndex = i;
126
127
 
127
- if (data.length === DATA_LENGTH.SINGLE_ITEM) {
128
+ if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {
128
129
  realIndex = i % 1;
129
130
  }
130
131
 
131
- if (data.length === DATA_LENGTH.DOUBLE_ITEM) {
132
+ if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
132
133
  realIndex = i % 2;
133
134
  }
134
135
 
@@ -145,7 +146,7 @@ function Carousel(_props, ref) {
145
146
  index: realIndex,
146
147
  animationValue
147
148
  }));
148
- }, [data, offsetX, visibleRanges, renderItem, layoutConfig, customAnimation]);
149
+ }, [rawData, offsetX, visibleRanges, renderItem, layoutConfig, customAnimation]);
149
150
  return /*#__PURE__*/React.createElement(CTX.Provider, {
150
151
  value: {
151
152
  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","scrollAnimationDuration","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","commonVariables","size","handlerOffsetX","offsetX","totalSize","length","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","duration","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","start","pause","scrollViewGestureOnScrollBegin","useCallback","current","scrollViewGestureOnScrollEnd","goToIndex","animated","to","useImperativeHandle","scrollTo","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":"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","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\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 scrollAnimationDuration,\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 duration: scrollAnimationDuration,\n });\n\n const {\n next,\n prev,\n sharedPreIndex,\n sharedIndex,\n computedIndex,\n getCurrentIndex,\n } = carouselController;\n\n const { start, 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 start();\n _onScrollEnd();\n }, [_onScrollEnd, start]);\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 scrollTo: carouselController.scrollTo,\n }),\n [getCurrentIndex, goToIndex, next, prev, carouselController.scrollTo]\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
+ {"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","rawData","loop","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","commonVariables","size","handlerOffsetX","offsetX","totalSize","length","x","value","isNaN","carouselController","disable","originalLength","_onScrollEnd","onChange","i","duration","next","prev","sharedPreIndex","sharedIndex","computedIndex","getCurrentIndex","start","pause","scrollViewGestureOnScrollBegin","useCallback","current","scrollViewGestureOnScrollEnd","goToIndex","animated","to","useImperativeHandle","scrollTo","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":"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","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\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 rawData,\n loop,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\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, rawData, 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 duration: scrollAnimationDuration,\n });\n\n const {\n next,\n prev,\n sharedPreIndex,\n sharedIndex,\n computedIndex,\n getCurrentIndex,\n } = carouselController;\n\n const { start, 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 start();\n _onScrollEnd();\n }, [_onScrollEnd, start]);\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 scrollTo: carouselController.scrollTo,\n }),\n [getCurrentIndex, goToIndex, next, prev, carouselController.scrollTo]\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 (rawData.length === DATA_LENGTH.SINGLE_ITEM) {\n realIndex = i % 1;\n }\n\n if (rawData.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 rawData,\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"]}
@@ -26,9 +26,13 @@ export function useAutoPlay(opts) {
26
26
  stopped.current = true;
27
27
  }, []);
28
28
  const start = React.useCallback(() => {
29
+ if (!autoPlay) {
30
+ return;
31
+ }
32
+
29
33
  stopped.current = false;
30
34
  play();
31
- }, [play]);
35
+ }, [play, autoPlay]);
32
36
  React.useEffect(() => {
33
37
  if (autoPlay) {
34
38
  start();
@@ -1 +1 @@
1
- {"version":3,"sources":["useAutoPlay.ts"],"names":["React","useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","timer","useRef","stopped","play","useCallback","current","setTimeout","prev","onFinished","next","pause","clearInterval","start","useEffect"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAGA,OAAO,SAASC,WAAT,CAAqBC,IAArB,EAKJ;AACC,QAAM;AACFC,IAAAA,QAAQ,GAAG,KADT;AAEFC,IAAAA,eAAe,GAAG,KAFhB;AAGFC,IAAAA,gBAHE;AAIFC,IAAAA;AAJE,MAKFJ,IALJ;AAOA,QAAMK,KAAK,GAAGP,KAAK,CAACQ,MAAN,EAAd;AACA,QAAMC,OAAO,GAAGT,KAAK,CAACQ,MAAN,CAAsB,CAACL,QAAvB,CAAhB;AAEA,QAAMO,IAAI,GAAGV,KAAK,CAACW,WAAN,CAAkB,MAAM;AACjC,QAAIF,OAAO,CAACG,OAAZ,EAAqB;AACjB;AACH;;AAEDL,IAAAA,KAAK,CAACK,OAAN,GAAgBC,UAAU,CAAC,MAAM;AAC7BT,MAAAA,eAAe,GACTE,kBAAkB,CAACQ,IAAnB,CAAwB;AAAEC,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CADS,GAETJ,kBAAkB,CAACU,IAAnB,CAAwB;AAAED,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CAFN;AAGH,KAJyB,EAIvBL,gBAJuB,CAA1B;AAKH,GAVY,EAUV,CAACD,eAAD,EAAkBC,gBAAlB,EAAoCC,kBAApC,CAVU,CAAb;AAYA,QAAMW,KAAK,GAAGjB,KAAK,CAACW,WAAN,CAAkB,MAAM;AAClCJ,IAAAA,KAAK,CAACK,OAAN,IAAiBM,aAAa,CAACX,KAAK,CAACK,OAAP,CAA9B;AACAH,IAAAA,OAAO,CAACG,OAAR,GAAkB,IAAlB;AACH,GAHa,EAGX,EAHW,CAAd;AAKA,QAAMO,KAAK,GAAGnB,KAAK,CAACW,WAAN,CAAkB,MAAM;AAClCF,IAAAA,OAAO,CAACG,OAAR,GAAkB,KAAlB;AACAF,IAAAA,IAAI;AACP,GAHa,EAGX,CAACA,IAAD,CAHW,CAAd;AAKAV,EAAAA,KAAK,CAACoB,SAAN,CAAgB,MAAM;AAClB,QAAIjB,QAAJ,EAAc;AACVgB,MAAAA,KAAK;AACR,KAFD,MAEO;AACHF,MAAAA,KAAK;AACR;;AACD,WAAOA,KAAP;AACH,GAPD,EAOG,CAACA,KAAD,EAAQE,KAAR,EAAehB,QAAf,CAPH;AASA,SAAO;AACHc,IAAAA,KADG;AAEHE,IAAAA;AAFG,GAAP;AAIH","sourcesContent":["import * as React from 'react';\nimport type { ICarouselController } from './useCarouselController';\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean;\n autoPlayInterval?: number;\n autoPlayReverse?: boolean;\n carouselController: ICarouselController;\n}) {\n const {\n autoPlay = false,\n autoPlayReverse = false,\n autoPlayInterval,\n carouselController,\n } = opts;\n\n const timer = React.useRef<NodeJS.Timer>();\n const stopped = React.useRef<boolean>(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current) {\n return;\n }\n\n timer.current = setTimeout(() => {\n autoPlayReverse\n ? carouselController.prev({ onFinished: play })\n : carouselController.next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, carouselController]);\n\n const pause = React.useCallback(() => {\n timer.current && clearInterval(timer.current);\n stopped.current = true;\n }, []);\n\n const start = React.useCallback(() => {\n stopped.current = false;\n play();\n }, [play]);\n\n React.useEffect(() => {\n if (autoPlay) {\n start();\n } else {\n pause();\n }\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n"]}
1
+ {"version":3,"sources":["useAutoPlay.ts"],"names":["React","useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","timer","useRef","stopped","play","useCallback","current","setTimeout","prev","onFinished","next","pause","clearInterval","start","useEffect"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAGA,OAAO,SAASC,WAAT,CAAqBC,IAArB,EAKJ;AACC,QAAM;AACFC,IAAAA,QAAQ,GAAG,KADT;AAEFC,IAAAA,eAAe,GAAG,KAFhB;AAGFC,IAAAA,gBAHE;AAIFC,IAAAA;AAJE,MAKFJ,IALJ;AAOA,QAAMK,KAAK,GAAGP,KAAK,CAACQ,MAAN,EAAd;AACA,QAAMC,OAAO,GAAGT,KAAK,CAACQ,MAAN,CAAsB,CAACL,QAAvB,CAAhB;AAEA,QAAMO,IAAI,GAAGV,KAAK,CAACW,WAAN,CAAkB,MAAM;AACjC,QAAIF,OAAO,CAACG,OAAZ,EAAqB;AACjB;AACH;;AAEDL,IAAAA,KAAK,CAACK,OAAN,GAAgBC,UAAU,CAAC,MAAM;AAC7BT,MAAAA,eAAe,GACTE,kBAAkB,CAACQ,IAAnB,CAAwB;AAAEC,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CADS,GAETJ,kBAAkB,CAACU,IAAnB,CAAwB;AAAED,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CAFN;AAGH,KAJyB,EAIvBL,gBAJuB,CAA1B;AAKH,GAVY,EAUV,CAACD,eAAD,EAAkBC,gBAAlB,EAAoCC,kBAApC,CAVU,CAAb;AAYA,QAAMW,KAAK,GAAGjB,KAAK,CAACW,WAAN,CAAkB,MAAM;AAClCJ,IAAAA,KAAK,CAACK,OAAN,IAAiBM,aAAa,CAACX,KAAK,CAACK,OAAP,CAA9B;AACAH,IAAAA,OAAO,CAACG,OAAR,GAAkB,IAAlB;AACH,GAHa,EAGX,EAHW,CAAd;AAKA,QAAMO,KAAK,GAAGnB,KAAK,CAACW,WAAN,CAAkB,MAAM;AAClC,QAAI,CAACR,QAAL,EAAe;AACX;AACH;;AACDM,IAAAA,OAAO,CAACG,OAAR,GAAkB,KAAlB;AACAF,IAAAA,IAAI;AACP,GANa,EAMX,CAACA,IAAD,EAAOP,QAAP,CANW,CAAd;AAQAH,EAAAA,KAAK,CAACoB,SAAN,CAAgB,MAAM;AAClB,QAAIjB,QAAJ,EAAc;AACVgB,MAAAA,KAAK;AACR,KAFD,MAEO;AACHF,MAAAA,KAAK;AACR;;AACD,WAAOA,KAAP;AACH,GAPD,EAOG,CAACA,KAAD,EAAQE,KAAR,EAAehB,QAAf,CAPH;AASA,SAAO;AACHc,IAAAA,KADG;AAEHE,IAAAA;AAFG,GAAP;AAIH","sourcesContent":["import * as React from 'react';\nimport type { ICarouselController } from './useCarouselController';\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean;\n autoPlayInterval?: number;\n autoPlayReverse?: boolean;\n carouselController: ICarouselController;\n}) {\n const {\n autoPlay = false,\n autoPlayReverse = false,\n autoPlayInterval,\n carouselController,\n } = opts;\n\n const timer = React.useRef<NodeJS.Timer>();\n const stopped = React.useRef<boolean>(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current) {\n return;\n }\n\n timer.current = setTimeout(() => {\n autoPlayReverse\n ? carouselController.prev({ onFinished: play })\n : carouselController.next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, carouselController]);\n\n const pause = React.useCallback(() => {\n timer.current && clearInterval(timer.current);\n stopped.current = true;\n }, []);\n\n const start = React.useCallback(() => {\n if (!autoPlay) {\n return;\n }\n stopped.current = false;\n play();\n }, [play, autoPlay]);\n\n React.useEffect(() => {\n if (autoPlay) {\n start();\n } else {\n pause();\n }\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n"]}
@@ -3,7 +3,7 @@ import { DATA_LENGTH } from '../constants';
3
3
  export function useInitProps(props) {
4
4
  const {
5
5
  defaultIndex = 0,
6
- data: _data = [],
6
+ data: rawData = [],
7
7
  loop = true,
8
8
  autoPlayInterval: _autoPlayInterval = 1000,
9
9
  scrollAnimationDuration = 500,
@@ -18,18 +18,18 @@ export function useInitProps(props) {
18
18
  const height = Math.round(_height || 0);
19
19
  const autoPlayInterval = Math.max(_autoPlayInterval, 0);
20
20
  const data = React.useMemo(() => {
21
- if (!loop) return _data;
21
+ if (!loop) return rawData;
22
22
 
23
- if (_data.length === DATA_LENGTH.SINGLE_ITEM) {
24
- return [_data[0], _data[0], _data[0]];
23
+ if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {
24
+ return [rawData[0], rawData[0], rawData[0]];
25
25
  }
26
26
 
27
- if (_data.length === DATA_LENGTH.DOUBLE_ITEM) {
28
- return [_data[0], _data[1], _data[0], _data[1]];
27
+ if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
28
+ return [rawData[0], rawData[1], rawData[0], rawData[1]];
29
29
  }
30
30
 
31
- return _data;
32
- }, [_data, loop]);
31
+ return rawData;
32
+ }, [rawData, loop]);
33
33
 
34
34
  if (props.mode === 'vertical-stack' || props.mode === 'horizontal-stack') {
35
35
  var _props$modeConfig$sho, _props$modeConfig;
@@ -44,6 +44,7 @@ export function useInitProps(props) {
44
44
  return { ...props,
45
45
  defaultIndex,
46
46
  data,
47
+ rawData,
47
48
  loop,
48
49
  autoPlayInterval,
49
50
  scrollAnimationDuration,
@@ -1 +1 @@
1
- {"version":3,"sources":["useInitProps.ts"],"names":["React","DATA_LENGTH","useInitProps","props","defaultIndex","data","_data","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;AAkBA,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,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,KAAP;;AAEX,QAAIA,KAAK,CAACiB,MAAN,KAAiBtB,WAAW,CAACuB,WAAjC,EAA8C;AAC1C,aAAO,CAAClB,KAAK,CAAC,CAAD,CAAN,EAAWA,KAAK,CAAC,CAAD,CAAhB,EAAqBA,KAAK,CAAC,CAAD,CAA1B,CAAP;AACH;;AAED,QAAIA,KAAK,CAACiB,MAAN,KAAiBtB,WAAW,CAACwB,WAAjC,EAA8C;AAC1C,aAAO,CAACnB,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,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;AAIHE,IAAAA,IAJG;AAKHC,IAAAA,gBALG;AAMHE,IAAAA,uBANG;AAOHC,IAAAA,KAPG;AAQHC,IAAAA,sBARG;AASHC,IAAAA,aATG;AAUHC,IAAAA,UAVG;AAWHC,IAAAA,KAXG;AAYHE,IAAAA;AAZG,GAAP;AAcH","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\nexport function useInitProps<T>(\n props: TCarouselProps<T>\n): TInitializeCarouselProps<T> {\n const {\n defaultIndex = 0,\n data: _data = [],\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 _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 scrollAnimationDuration,\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,5 +1,7 @@
1
1
  import type { TCarouselProps } from '../types';
2
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'>;
3
+ export declare type TInitializeCarouselProps<T> = TCarouselProps<T> & TGetRequiredProps<'defaultIndex' | 'loop' | 'width' | 'height' | 'scrollAnimationDuration' | 'autoPlayInterval'> & {
4
+ rawData: T[];
5
+ };
4
6
  export declare function useInitProps<T>(props: TCarouselProps<T>): TInitializeCarouselProps<T>;
5
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-reanimated-carousel",
3
- "version": "2.2.1",
3
+ "version": "2.2.2",
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",
@@ -35,7 +35,7 @@
35
35
  "android": "yarn --cwd example android",
36
36
  "android:pretty": "yarn --cwd example android:pretty",
37
37
  "pods": "cd example && pod-install --quiet",
38
- "bootstrap": "yarn example && yarn && yarn pods",
38
+ "bootstrap": "yarn && yarn pods",
39
39
  "deploy": "cd example && yarn deploy"
40
40
  },
41
41
  "keywords": [
package/src/Carousel.tsx CHANGED
@@ -25,6 +25,7 @@ function Carousel<T>(
25
25
 
26
26
  const {
27
27
  data,
28
+ rawData,
28
29
  loop,
29
30
  mode,
30
31
  style,
@@ -58,7 +59,7 @@ function Carousel<T>(
58
59
  }, [loop, size, data]);
59
60
 
60
61
  usePropsErrorBoundary(props);
61
- useOnProgressChange({ size, offsetX, data, onProgressChange });
62
+ useOnProgressChange({ size, offsetX, rawData, onProgressChange });
62
63
 
63
64
  const carouselController = useCarouselController({
64
65
  loop,
@@ -135,11 +136,11 @@ function Carousel<T>(
135
136
  const renderLayout = React.useCallback(
136
137
  (item: T, i: number) => {
137
138
  let realIndex = i;
138
- if (data.length === DATA_LENGTH.SINGLE_ITEM) {
139
+ if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {
139
140
  realIndex = i % 1;
140
141
  }
141
142
 
142
- if (data.length === DATA_LENGTH.DOUBLE_ITEM) {
143
+ if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
143
144
  realIndex = i % 2;
144
145
  }
145
146
 
@@ -162,7 +163,7 @@ function Carousel<T>(
162
163
  );
163
164
  },
164
165
  [
165
- data,
166
+ rawData,
166
167
  offsetX,
167
168
  visibleRanges,
168
169
  renderItem,
@@ -35,9 +35,12 @@ export function useAutoPlay(opts: {
35
35
  }, []);
36
36
 
37
37
  const start = React.useCallback(() => {
38
+ if (!autoPlay) {
39
+ return;
40
+ }
38
41
  stopped.current = false;
39
42
  play();
40
- }, [play]);
43
+ }, [play, autoPlay]);
41
44
 
42
45
  React.useEffect(() => {
43
46
  if (autoPlay) {
@@ -15,14 +15,17 @@ export type TInitializeCarouselProps<T> = TCarouselProps<T> &
15
15
  | 'height'
16
16
  | 'scrollAnimationDuration'
17
17
  | 'autoPlayInterval'
18
- >;
18
+ > & {
19
+ // Raw data that has not been processed
20
+ rawData: T[];
21
+ };
19
22
 
20
23
  export function useInitProps<T>(
21
24
  props: TCarouselProps<T>
22
25
  ): TInitializeCarouselProps<T> {
23
26
  const {
24
27
  defaultIndex = 0,
25
- data: _data = [],
28
+ data: rawData = [],
26
29
  loop = true,
27
30
  autoPlayInterval: _autoPlayInterval = 1000,
28
31
  scrollAnimationDuration = 500,
@@ -39,18 +42,18 @@ export function useInitProps<T>(
39
42
  const autoPlayInterval = Math.max(_autoPlayInterval, 0);
40
43
 
41
44
  const data = React.useMemo<T[]>(() => {
42
- if (!loop) return _data;
45
+ if (!loop) return rawData;
43
46
 
44
- if (_data.length === DATA_LENGTH.SINGLE_ITEM) {
45
- return [_data[0], _data[0], _data[0]];
47
+ if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {
48
+ return [rawData[0], rawData[0], rawData[0]];
46
49
  }
47
50
 
48
- if (_data.length === DATA_LENGTH.DOUBLE_ITEM) {
49
- return [_data[0], _data[1], _data[0], _data[1]];
51
+ if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
52
+ return [rawData[0], rawData[1], rawData[0], rawData[1]];
50
53
  }
51
54
 
52
- return _data;
53
- }, [_data, loop]);
55
+ return rawData;
56
+ }, [rawData, loop]);
54
57
 
55
58
  if (props.mode === 'vertical-stack' || props.mode === 'horizontal-stack') {
56
59
  if (!props.modeConfig) {
@@ -63,6 +66,7 @@ export function useInitProps<T>(
63
66
  ...props,
64
67
  defaultIndex,
65
68
  data,
69
+ rawData,
66
70
  loop,
67
71
  autoPlayInterval,
68
72
  scrollAnimationDuration,
@@ -9,31 +9,32 @@ export function useOnProgressChange(
9
9
  opts: {
10
10
  size: number;
11
11
  offsetX: Animated.SharedValue<number>;
12
- } & Pick<TCarouselProps, 'data' | 'onProgressChange'>
12
+ rawData: TCarouselProps['data'];
13
+ } & Pick<TCarouselProps, 'onProgressChange'>
13
14
  ) {
14
- const { offsetX, data, size, onProgressChange } = opts;
15
+ const { offsetX, rawData, size, onProgressChange } = opts;
15
16
  useAnimatedReaction(
16
17
  () => offsetX.value,
17
18
  (_value) => {
18
19
  let value = _value;
19
20
 
20
- if (data.length === DATA_LENGTH.SINGLE_ITEM) {
21
+ if (rawData.length === DATA_LENGTH.SINGLE_ITEM) {
21
22
  value = value % size;
22
23
  }
23
24
 
24
- if (data.length === DATA_LENGTH.DOUBLE_ITEM) {
25
+ if (rawData.length === DATA_LENGTH.DOUBLE_ITEM) {
25
26
  value = value % (size * 2);
26
27
  }
27
28
 
28
29
  let absoluteProgress = Math.abs(value / size);
29
30
 
30
31
  if (value > 0) {
31
- absoluteProgress = data.length - absoluteProgress;
32
+ absoluteProgress = rawData.length - absoluteProgress;
32
33
  }
33
34
 
34
35
  !!onProgressChange &&
35
36
  runOnJS(onProgressChange)(value, absoluteProgress);
36
37
  },
37
- [onProgressChange, data]
38
+ [onProgressChange, rawData]
38
39
  );
39
40
  }