react-native-reanimated-carousel 1.0.5 → 1.0.6

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/README.md CHANGED
@@ -28,7 +28,7 @@ Updates:
28
28
 
29
29
  ## Reason
30
30
 
31
- 🎉 **Simple、Infinitely scrolling very smooth、Fully implemented using Reanimated 2!**
31
+ 🎉 **It completely solves [this problem](https://github.com/meliorence/react-native-snap-carousel/issues/632) for `react-native-snap-carousel`! Simple、Infinitely scrolling very smooth、Fully implemented using Reanimated 2!**
32
32
 
33
33
  > The common RN infinite scroll component. It's common to get stuck on a fast slide. Wait for the next element to appear. This component will not have similar problems. That's why this library was created.
34
34
 
package/README.zh-CN.md CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  ## 原因
30
30
 
31
- 🎉 **易用、无限滚动、完全使用 Reanimated2 实现**
31
+ 🎉 **完全解决了`react-native-snap-carousel`的[这个问题](https://github.com/meliorence/react-native-snap-carousel/issues/632)! 易用、无限滚动、完全使用 Reanimated2 实现**
32
32
 
33
33
  > 常见的无限滚动轮播图,在快速滑动时会出现卡住的情况,这是因为实现方式而导致的问题。这个组件用了不同的方式来实现,解决了这个问题,这就是创建这个库的原因。
34
34
 
@@ -271,7 +271,7 @@ function Carousel(props, ref) {
271
271
  }, [loop, mode, computedAnimResult, height, offsetX, parallaxScrollingOffset, parallaxScrollingScale, width, renderItem]);
272
272
 
273
273
  return /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.PanGestureHandler, _extends({}, panGestureHandlerProps, {
274
- onHandlerStateChange: animatedListScrollHandler
274
+ onGestureEvent: animatedListScrollHandler
275
275
  }), /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
276
276
  // eslint-disable-next-line react-native/no-inline-styles
277
277
  style: { ...style,
@@ -1 +1 @@
1
- {"version":3,"sources":["Carousel.tsx"],"names":["defaultSpringConfig","damping","Carousel","props","ref","defaultIndex","height","data","_data","loop","mode","autoPlay","autoPlayReverse","autoPlayInterval","parallaxScrollingOffset","parallaxScrollingScale","style","panGestureHandlerProps","renderItem","onSnapToItem","onProgressChange","timingConfig","springConfig","width","Math","round","defaultHandlerOffsetX","abs","handlerOffsetX","React","useMemo","length","computedAnimResult","indexController","originalLength","onChange","i","carouselController","disable","onScrollBegin","onScrollEnd","run","pause","index","sharedPreIndex","sharedIndex","computedIndex","useCallback","current","offsetX","x","value","TOTAL_WIDTH","isNaN","absoluteProgress","next","prev","getCurrentIndex","goToIndex","animated","to","animatedListScrollHandler","onStart","_","ctx","currentContentOffsetX","start","onActive","e","translationX","onEnd","_withAnimationCallback","num","Object","assign","velocity","velocityX","isFinished","page","velocityPage","pageWithVelocity","min","max","useImperativeHandle","renderLayout","item","flexDirection","position","map","forwardRef"],"mappings":"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","sourcesContent":["import React from 'react';\nimport type { FlexStyle, ViewStyle } from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerProps,\n PanGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withSpring,\n} from 'react-native-reanimated';\nimport { CarouselItem } from './CarouselItem';\nimport type { TMode } from './layouts';\nimport { ParallaxLayout } from './layouts/index';\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useComputedAnim } from './hooks/useComputedAnim';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { useIndexController } from './hooks/useIndexController';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\n\nconst defaultSpringConfig: Animated.WithSpringConfig = {\n damping: 100,\n};\nexport interface ICarouselProps<T extends unknown> {\n ref?: React.Ref<ICarouselInstance>;\n /**\n * Carousel loop playback.\n * @default true\n */\n loop?: boolean;\n /**\n * Carousel Animated transitions.\n * @default 'default'\n */\n mode?: TMode;\n /**\n * Specified carousel container width.\n */\n width: number;\n /**\n * Specified carousel container height.\n * @default '100%'\n */\n height?: FlexStyle['height'];\n /**\n * Carousel items data set.\n */\n data: T[];\n /**\n * Default index\n * @default 0\n */\n defaultIndex?: number;\n /**\n * Auto play\n */\n autoPlay?: boolean;\n /**\n * Auto play\n * @description reverse playback\n */\n autoPlayReverse?: boolean;\n /**\n * Auto play\n * @description playback interval\n */\n autoPlayInterval?: number;\n /**\n * Carousel container style\n */\n style?: ViewStyle;\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 * Sping config of translation animated\n */\n springConfig?: Animated.WithSpringConfig;\n /**\n * PanGestureHandler props\n */\n panGestureHandlerProps?: Omit<\n Partial<PanGestureHandlerProps>,\n 'onHandlerStateChange'\n >;\n /**\n * Render carousel item.\n */\n renderItem: (data: T, index: number) => React.ReactNode;\n /**\n * Callback fired when navigating to an item\n */\n onSnapToItem?: (index: number) => void;\n /**\n * On scroll begin\n */\n onScrollBegin?: () => void;\n /**\n * On scroll end\n */\n onScrollEnd?: (previous: number, current: number) => void;\n /**\n * On progress change\n * @param offsetProgress Total of offset distance (0 390 780 ...)\n * @param absoluteProgress Convert to index (0 1 2 ...)\n */\n onProgressChange?: (\n offsetProgress: number,\n absoluteProgress: number\n ) => void;\n}\n\nexport interface ICarouselInstance {\n /**\n * Play the last one\n */\n prev: () => void;\n /**\n * Play the next one\n */\n next: () => void;\n /**\n * Get current item index\n */\n getCurrentIndex: () => number;\n /**\n * Go to index\n */\n goToIndex: (index: number, animated?: boolean) => void;\n}\n\nfunction Carousel<T extends unknown = any>(\n props: ICarouselProps<T>,\n ref: React.Ref<ICarouselInstance>\n) {\n const {\n defaultIndex = 0,\n height = '100%',\n data: _data = [],\n loop = true,\n mode = 'default',\n autoPlay,\n autoPlayReverse,\n autoPlayInterval = 1000,\n parallaxScrollingOffset,\n parallaxScrollingScale,\n style,\n panGestureHandlerProps = {},\n renderItem,\n onSnapToItem,\n onProgressChange,\n } = props;\n\n usePropsErrorBoundary({\n ...props,\n defaultIndex,\n height,\n data: _data,\n loop,\n mode,\n autoPlay,\n autoPlayReverse,\n autoPlayInterval,\n parallaxScrollingOffset,\n parallaxScrollingScale,\n style,\n panGestureHandlerProps,\n // @ts-ignore\n renderItem,\n onSnapToItem,\n onProgressChange,\n });\n\n const timingConfig = {\n ...defaultSpringConfig,\n ...props.springConfig,\n };\n const width = Math.round(props.width);\n const defaultHandlerOffsetX = -Math.abs(defaultIndex * width);\n const handlerOffsetX = useSharedValue<number>(defaultHandlerOffsetX);\n const data = React.useMemo<T[]>(() => {\n if (!loop) return _data;\n\n if (_data.length === 1) {\n return [_data[0], _data[0], _data[0]];\n }\n\n if (_data.length === 2) {\n return [_data[0], _data[1], _data[0], _data[1]];\n }\n\n return _data;\n }, [_data, loop]);\n\n const computedAnimResult = useComputedAnim(width, data.length);\n\n const indexController = useIndexController({\n originalLength: _data.length,\n length: data.length,\n handlerOffsetX,\n width,\n loop,\n onChange: (i) => onSnapToItem && runOnJS(onSnapToItem)(i),\n });\n\n const carouselController = useCarouselController({\n loop,\n width,\n handlerOffsetX,\n indexController,\n disable: !data.length,\n onScrollBegin: () => runOnJS(onScrollBegin)(),\n onScrollEnd: () => runOnJS(onScrollEnd)(),\n });\n\n const { run, pause } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const { index, sharedPreIndex, sharedIndex, computedIndex } =\n indexController;\n\n const onScrollBegin = React.useCallback(() => {\n pause();\n props.onScrollBegin?.();\n }, [pause, props]);\n\n const onScrollEnd = React.useCallback(() => {\n run();\n computedIndex();\n props.onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, props, run]);\n\n const offsetX = useDerivedValue(() => {\n const x = handlerOffsetX.value % computedAnimResult.TOTAL_WIDTH;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [computedAnimResult, loop]);\n\n useAnimatedReaction(\n () => offsetX.value,\n (value) => {\n let absoluteProgress = Math.abs(value / width);\n if (value > 0) {\n absoluteProgress = data.length - absoluteProgress;\n }\n !!onProgressChange &&\n runOnJS(onProgressChange)(value, absoluteProgress);\n },\n [onProgressChange, data]\n );\n\n const next = React.useCallback(() => {\n return carouselController.next();\n }, [carouselController]);\n\n const prev = React.useCallback(() => {\n return carouselController.prev();\n }, [carouselController]);\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n carouselController.to(i, animated);\n },\n [carouselController]\n );\n\n const animatedListScrollHandler =\n useAnimatedGestureHandler<PanGestureHandlerGestureEvent>(\n {\n onStart: (_, ctx: any) => {\n runOnJS(pause)();\n runOnJS(onScrollBegin)();\n cancelAnimation(handlerOffsetX);\n ctx.currentContentOffsetX = handlerOffsetX.value;\n ctx.start = true;\n },\n onActive: (e, ctx: any) => {\n const { translationX } = e;\n if (\n !loop &&\n (handlerOffsetX.value >= 0 ||\n handlerOffsetX.value <= -(data.length - 1) * width)\n ) {\n handlerOffsetX.value =\n ctx.currentContentOffsetX + translationX / 2;\n return;\n }\n handlerOffsetX.value =\n ctx.currentContentOffsetX + translationX;\n },\n onEnd: (e) => {\n function _withAnimationCallback(num: number) {\n return withSpring(\n num,\n Object.assign({}, timingConfig, {\n velocity: e.velocityX,\n }),\n (isFinished) => {\n if (isFinished) {\n runOnJS(onScrollEnd)();\n }\n }\n );\n }\n\n const page = Math.round(handlerOffsetX.value / width);\n\n const velocityPage = Math.round(\n (handlerOffsetX.value + e.velocityX) / width\n );\n\n let pageWithVelocity = Math.min(\n page + 1,\n Math.max(page - 1, velocityPage)\n );\n\n if (!loop) {\n pageWithVelocity = Math.max(\n -(data.length - 1),\n Math.min(0, pageWithVelocity)\n );\n }\n\n if (loop) {\n handlerOffsetX.value = _withAnimationCallback(\n pageWithVelocity * width\n );\n return;\n }\n if (handlerOffsetX.value >= 0) {\n handlerOffsetX.value = _withAnimationCallback(0);\n return;\n }\n\n if (handlerOffsetX.value <= -(data.length - 1) * width) {\n handlerOffsetX.value = _withAnimationCallback(\n -(data.length - 1) * width\n );\n return;\n }\n\n handlerOffsetX.value = _withAnimationCallback(\n pageWithVelocity * width\n );\n },\n },\n [loop, data, onScrollBegin, onScrollEnd]\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 renderLayout = React.useCallback(\n (item: T, i: number) => {\n switch (mode) {\n case 'parallax':\n return (\n <ParallaxLayout\n parallaxScrollingOffset={parallaxScrollingOffset}\n parallaxScrollingScale={parallaxScrollingScale}\n computedAnimResult={computedAnimResult}\n width={width}\n handlerOffsetX={offsetX}\n index={i}\n key={i}\n loop={loop}\n >\n {renderItem(item, i)}\n </ParallaxLayout>\n );\n default:\n return (\n <CarouselItem\n computedAnimResult={computedAnimResult}\n width={width}\n height={height}\n handlerOffsetX={offsetX}\n index={i}\n key={i}\n loop={loop}\n >\n {renderItem(item, i)}\n </CarouselItem>\n );\n }\n },\n [\n loop,\n mode,\n computedAnimResult,\n height,\n offsetX,\n parallaxScrollingOffset,\n parallaxScrollingScale,\n width,\n renderItem,\n ]\n );\n\n return (\n <PanGestureHandler\n {...panGestureHandlerProps}\n onHandlerStateChange={animatedListScrollHandler}\n >\n <Animated.View\n // eslint-disable-next-line react-native/no-inline-styles\n style={{\n ...style,\n width,\n height,\n flexDirection: 'row',\n position: 'relative',\n }}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </PanGestureHandler>\n );\n}\n\nexport default React.forwardRef(Carousel) as typeof Carousel;\n"]}
1
+ {"version":3,"sources":["Carousel.tsx"],"names":["defaultSpringConfig","damping","Carousel","props","ref","defaultIndex","height","data","_data","loop","mode","autoPlay","autoPlayReverse","autoPlayInterval","parallaxScrollingOffset","parallaxScrollingScale","style","panGestureHandlerProps","renderItem","onSnapToItem","onProgressChange","timingConfig","springConfig","width","Math","round","defaultHandlerOffsetX","abs","handlerOffsetX","React","useMemo","length","computedAnimResult","indexController","originalLength","onChange","i","carouselController","disable","onScrollBegin","onScrollEnd","run","pause","index","sharedPreIndex","sharedIndex","computedIndex","useCallback","current","offsetX","x","value","TOTAL_WIDTH","isNaN","absoluteProgress","next","prev","getCurrentIndex","goToIndex","animated","to","animatedListScrollHandler","onStart","_","ctx","currentContentOffsetX","start","onActive","e","translationX","onEnd","_withAnimationCallback","num","Object","assign","velocity","velocityX","isFinished","page","velocityPage","pageWithVelocity","min","max","useImperativeHandle","renderLayout","item","flexDirection","position","map","forwardRef"],"mappings":"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","sourcesContent":["import React from 'react';\nimport type { FlexStyle, ViewStyle } from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerProps,\n PanGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withSpring,\n} from 'react-native-reanimated';\nimport { CarouselItem } from './CarouselItem';\nimport type { TMode } from './layouts';\nimport { ParallaxLayout } from './layouts/index';\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useComputedAnim } from './hooks/useComputedAnim';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { useIndexController } from './hooks/useIndexController';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\n\nconst defaultSpringConfig: Animated.WithSpringConfig = {\n damping: 100,\n};\nexport interface ICarouselProps<T extends unknown> {\n ref?: React.Ref<ICarouselInstance>;\n /**\n * Carousel loop playback.\n * @default true\n */\n loop?: boolean;\n /**\n * Carousel Animated transitions.\n * @default 'default'\n */\n mode?: TMode;\n /**\n * Specified carousel container width.\n */\n width: number;\n /**\n * Specified carousel container height.\n * @default '100%'\n */\n height?: FlexStyle['height'];\n /**\n * Carousel items data set.\n */\n data: T[];\n /**\n * Default index\n * @default 0\n */\n defaultIndex?: number;\n /**\n * Auto play\n */\n autoPlay?: boolean;\n /**\n * Auto play\n * @description reverse playback\n */\n autoPlayReverse?: boolean;\n /**\n * Auto play\n * @description playback interval\n */\n autoPlayInterval?: number;\n /**\n * Carousel container style\n */\n style?: ViewStyle;\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 * Sping config of translation animated\n */\n springConfig?: Animated.WithSpringConfig;\n /**\n * PanGestureHandler props\n */\n panGestureHandlerProps?: Omit<\n Partial<PanGestureHandlerProps>,\n 'onHandlerStateChange'\n >;\n /**\n * Render carousel item.\n */\n renderItem: (data: T, index: number) => React.ReactNode;\n /**\n * Callback fired when navigating to an item\n */\n onSnapToItem?: (index: number) => void;\n /**\n * On scroll begin\n */\n onScrollBegin?: () => void;\n /**\n * On scroll end\n */\n onScrollEnd?: (previous: number, current: number) => void;\n /**\n * On progress change\n * @param offsetProgress Total of offset distance (0 390 780 ...)\n * @param absoluteProgress Convert to index (0 1 2 ...)\n */\n onProgressChange?: (\n offsetProgress: number,\n absoluteProgress: number\n ) => void;\n}\n\nexport interface ICarouselInstance {\n /**\n * Play the last one\n */\n prev: () => void;\n /**\n * Play the next one\n */\n next: () => void;\n /**\n * Get current item index\n */\n getCurrentIndex: () => number;\n /**\n * Go to index\n */\n goToIndex: (index: number, animated?: boolean) => void;\n}\n\nfunction Carousel<T extends unknown = any>(\n props: ICarouselProps<T>,\n ref: React.Ref<ICarouselInstance>\n) {\n const {\n defaultIndex = 0,\n height = '100%',\n data: _data = [],\n loop = true,\n mode = 'default',\n autoPlay,\n autoPlayReverse,\n autoPlayInterval = 1000,\n parallaxScrollingOffset,\n parallaxScrollingScale,\n style,\n panGestureHandlerProps = {},\n renderItem,\n onSnapToItem,\n onProgressChange,\n } = props;\n\n usePropsErrorBoundary({\n ...props,\n defaultIndex,\n height,\n data: _data,\n loop,\n mode,\n autoPlay,\n autoPlayReverse,\n autoPlayInterval,\n parallaxScrollingOffset,\n parallaxScrollingScale,\n style,\n panGestureHandlerProps,\n // @ts-ignore\n renderItem,\n onSnapToItem,\n onProgressChange,\n });\n\n const timingConfig = {\n ...defaultSpringConfig,\n ...props.springConfig,\n };\n const width = Math.round(props.width);\n const defaultHandlerOffsetX = -Math.abs(defaultIndex * width);\n const handlerOffsetX = useSharedValue<number>(defaultHandlerOffsetX);\n const data = React.useMemo<T[]>(() => {\n if (!loop) return _data;\n\n if (_data.length === 1) {\n return [_data[0], _data[0], _data[0]];\n }\n\n if (_data.length === 2) {\n return [_data[0], _data[1], _data[0], _data[1]];\n }\n\n return _data;\n }, [_data, loop]);\n\n const computedAnimResult = useComputedAnim(width, data.length);\n\n const indexController = useIndexController({\n originalLength: _data.length,\n length: data.length,\n handlerOffsetX,\n width,\n loop,\n onChange: (i) => onSnapToItem && runOnJS(onSnapToItem)(i),\n });\n\n const carouselController = useCarouselController({\n loop,\n width,\n handlerOffsetX,\n indexController,\n disable: !data.length,\n onScrollBegin: () => runOnJS(onScrollBegin)(),\n onScrollEnd: () => runOnJS(onScrollEnd)(),\n });\n\n const { run, pause } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const { index, sharedPreIndex, sharedIndex, computedIndex } =\n indexController;\n\n const onScrollBegin = React.useCallback(() => {\n pause();\n props.onScrollBegin?.();\n }, [pause, props]);\n\n const onScrollEnd = React.useCallback(() => {\n run();\n computedIndex();\n props.onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, props, run]);\n\n const offsetX = useDerivedValue(() => {\n const x = handlerOffsetX.value % computedAnimResult.TOTAL_WIDTH;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [computedAnimResult, loop]);\n\n useAnimatedReaction(\n () => offsetX.value,\n (value) => {\n let absoluteProgress = Math.abs(value / width);\n if (value > 0) {\n absoluteProgress = data.length - absoluteProgress;\n }\n !!onProgressChange &&\n runOnJS(onProgressChange)(value, absoluteProgress);\n },\n [onProgressChange, data]\n );\n\n const next = React.useCallback(() => {\n return carouselController.next();\n }, [carouselController]);\n\n const prev = React.useCallback(() => {\n return carouselController.prev();\n }, [carouselController]);\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n carouselController.to(i, animated);\n },\n [carouselController]\n );\n\n const animatedListScrollHandler =\n useAnimatedGestureHandler<PanGestureHandlerGestureEvent>(\n {\n onStart: (_, ctx: any) => {\n runOnJS(pause)();\n runOnJS(onScrollBegin)();\n cancelAnimation(handlerOffsetX);\n ctx.currentContentOffsetX = handlerOffsetX.value;\n ctx.start = true;\n },\n onActive: (e, ctx: any) => {\n const { translationX } = e;\n if (\n !loop &&\n (handlerOffsetX.value >= 0 ||\n handlerOffsetX.value <= -(data.length - 1) * width)\n ) {\n handlerOffsetX.value =\n ctx.currentContentOffsetX + translationX / 2;\n return;\n }\n handlerOffsetX.value =\n ctx.currentContentOffsetX + translationX;\n },\n onEnd: (e) => {\n function _withAnimationCallback(num: number) {\n return withSpring(\n num,\n Object.assign({}, timingConfig, {\n velocity: e.velocityX,\n }),\n (isFinished) => {\n if (isFinished) {\n runOnJS(onScrollEnd)();\n }\n }\n );\n }\n\n const page = Math.round(handlerOffsetX.value / width);\n\n const velocityPage = Math.round(\n (handlerOffsetX.value + e.velocityX) / width\n );\n\n let pageWithVelocity = Math.min(\n page + 1,\n Math.max(page - 1, velocityPage)\n );\n\n if (!loop) {\n pageWithVelocity = Math.max(\n -(data.length - 1),\n Math.min(0, pageWithVelocity)\n );\n }\n\n if (loop) {\n handlerOffsetX.value = _withAnimationCallback(\n pageWithVelocity * width\n );\n return;\n }\n if (handlerOffsetX.value >= 0) {\n handlerOffsetX.value = _withAnimationCallback(0);\n return;\n }\n\n if (handlerOffsetX.value <= -(data.length - 1) * width) {\n handlerOffsetX.value = _withAnimationCallback(\n -(data.length - 1) * width\n );\n return;\n }\n\n handlerOffsetX.value = _withAnimationCallback(\n pageWithVelocity * width\n );\n },\n },\n [loop, data, onScrollBegin, onScrollEnd]\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 renderLayout = React.useCallback(\n (item: T, i: number) => {\n switch (mode) {\n case 'parallax':\n return (\n <ParallaxLayout\n parallaxScrollingOffset={parallaxScrollingOffset}\n parallaxScrollingScale={parallaxScrollingScale}\n computedAnimResult={computedAnimResult}\n width={width}\n handlerOffsetX={offsetX}\n index={i}\n key={i}\n loop={loop}\n >\n {renderItem(item, i)}\n </ParallaxLayout>\n );\n default:\n return (\n <CarouselItem\n computedAnimResult={computedAnimResult}\n width={width}\n height={height}\n handlerOffsetX={offsetX}\n index={i}\n key={i}\n loop={loop}\n >\n {renderItem(item, i)}\n </CarouselItem>\n );\n }\n },\n [\n loop,\n mode,\n computedAnimResult,\n height,\n offsetX,\n parallaxScrollingOffset,\n parallaxScrollingScale,\n width,\n renderItem,\n ]\n );\n\n return (\n <PanGestureHandler\n {...panGestureHandlerProps}\n onGestureEvent={animatedListScrollHandler}\n >\n <Animated.View\n // eslint-disable-next-line react-native/no-inline-styles\n style={{\n ...style,\n width,\n height,\n flexDirection: 'row',\n position: 'relative',\n }}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </PanGestureHandler>\n );\n}\n\nexport default React.forwardRef(Carousel) as typeof Carousel;\n"]}
@@ -235,7 +235,7 @@ function Carousel(props, ref) {
235
235
  }
236
236
  }, [loop, mode, computedAnimResult, height, offsetX, parallaxScrollingOffset, parallaxScrollingScale, width, renderItem]);
237
237
  return /*#__PURE__*/React.createElement(PanGestureHandler, _extends({}, panGestureHandlerProps, {
238
- onHandlerStateChange: animatedListScrollHandler
238
+ onGestureEvent: animatedListScrollHandler
239
239
  }), /*#__PURE__*/React.createElement(Animated.View, {
240
240
  // eslint-disable-next-line react-native/no-inline-styles
241
241
  style: { ...style,
@@ -1 +1 @@
1
- {"version":3,"sources":["Carousel.tsx"],"names":["React","PanGestureHandler","Animated","cancelAnimation","runOnJS","useAnimatedGestureHandler","useAnimatedReaction","useDerivedValue","useSharedValue","withSpring","CarouselItem","ParallaxLayout","useCarouselController","useComputedAnim","useAutoPlay","useIndexController","usePropsErrorBoundary","defaultSpringConfig","damping","Carousel","props","ref","defaultIndex","height","data","_data","loop","mode","autoPlay","autoPlayReverse","autoPlayInterval","parallaxScrollingOffset","parallaxScrollingScale","style","panGestureHandlerProps","renderItem","onSnapToItem","onProgressChange","timingConfig","springConfig","width","Math","round","defaultHandlerOffsetX","abs","handlerOffsetX","useMemo","length","computedAnimResult","indexController","originalLength","onChange","i","carouselController","disable","onScrollBegin","onScrollEnd","run","pause","index","sharedPreIndex","sharedIndex","computedIndex","useCallback","current","offsetX","x","value","TOTAL_WIDTH","isNaN","absoluteProgress","next","prev","getCurrentIndex","goToIndex","animated","to","animatedListScrollHandler","onStart","_","ctx","currentContentOffsetX","start","onActive","e","translationX","onEnd","_withAnimationCallback","num","Object","assign","velocity","velocityX","isFinished","page","velocityPage","pageWithVelocity","min","max","useImperativeHandle","renderLayout","item","flexDirection","position","map","forwardRef"],"mappings":"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","sourcesContent":["import React from 'react';\nimport type { FlexStyle, ViewStyle } from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerProps,\n PanGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withSpring,\n} from 'react-native-reanimated';\nimport { CarouselItem } from './CarouselItem';\nimport type { TMode } from './layouts';\nimport { ParallaxLayout } from './layouts/index';\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useComputedAnim } from './hooks/useComputedAnim';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { useIndexController } from './hooks/useIndexController';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\n\nconst defaultSpringConfig: Animated.WithSpringConfig = {\n damping: 100,\n};\nexport interface ICarouselProps<T extends unknown> {\n ref?: React.Ref<ICarouselInstance>;\n /**\n * Carousel loop playback.\n * @default true\n */\n loop?: boolean;\n /**\n * Carousel Animated transitions.\n * @default 'default'\n */\n mode?: TMode;\n /**\n * Specified carousel container width.\n */\n width: number;\n /**\n * Specified carousel container height.\n * @default '100%'\n */\n height?: FlexStyle['height'];\n /**\n * Carousel items data set.\n */\n data: T[];\n /**\n * Default index\n * @default 0\n */\n defaultIndex?: number;\n /**\n * Auto play\n */\n autoPlay?: boolean;\n /**\n * Auto play\n * @description reverse playback\n */\n autoPlayReverse?: boolean;\n /**\n * Auto play\n * @description playback interval\n */\n autoPlayInterval?: number;\n /**\n * Carousel container style\n */\n style?: ViewStyle;\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 * Sping config of translation animated\n */\n springConfig?: Animated.WithSpringConfig;\n /**\n * PanGestureHandler props\n */\n panGestureHandlerProps?: Omit<\n Partial<PanGestureHandlerProps>,\n 'onHandlerStateChange'\n >;\n /**\n * Render carousel item.\n */\n renderItem: (data: T, index: number) => React.ReactNode;\n /**\n * Callback fired when navigating to an item\n */\n onSnapToItem?: (index: number) => void;\n /**\n * On scroll begin\n */\n onScrollBegin?: () => void;\n /**\n * On scroll end\n */\n onScrollEnd?: (previous: number, current: number) => void;\n /**\n * On progress change\n * @param offsetProgress Total of offset distance (0 390 780 ...)\n * @param absoluteProgress Convert to index (0 1 2 ...)\n */\n onProgressChange?: (\n offsetProgress: number,\n absoluteProgress: number\n ) => void;\n}\n\nexport interface ICarouselInstance {\n /**\n * Play the last one\n */\n prev: () => void;\n /**\n * Play the next one\n */\n next: () => void;\n /**\n * Get current item index\n */\n getCurrentIndex: () => number;\n /**\n * Go to index\n */\n goToIndex: (index: number, animated?: boolean) => void;\n}\n\nfunction Carousel<T extends unknown = any>(\n props: ICarouselProps<T>,\n ref: React.Ref<ICarouselInstance>\n) {\n const {\n defaultIndex = 0,\n height = '100%',\n data: _data = [],\n loop = true,\n mode = 'default',\n autoPlay,\n autoPlayReverse,\n autoPlayInterval = 1000,\n parallaxScrollingOffset,\n parallaxScrollingScale,\n style,\n panGestureHandlerProps = {},\n renderItem,\n onSnapToItem,\n onProgressChange,\n } = props;\n\n usePropsErrorBoundary({\n ...props,\n defaultIndex,\n height,\n data: _data,\n loop,\n mode,\n autoPlay,\n autoPlayReverse,\n autoPlayInterval,\n parallaxScrollingOffset,\n parallaxScrollingScale,\n style,\n panGestureHandlerProps,\n // @ts-ignore\n renderItem,\n onSnapToItem,\n onProgressChange,\n });\n\n const timingConfig = {\n ...defaultSpringConfig,\n ...props.springConfig,\n };\n const width = Math.round(props.width);\n const defaultHandlerOffsetX = -Math.abs(defaultIndex * width);\n const handlerOffsetX = useSharedValue<number>(defaultHandlerOffsetX);\n const data = React.useMemo<T[]>(() => {\n if (!loop) return _data;\n\n if (_data.length === 1) {\n return [_data[0], _data[0], _data[0]];\n }\n\n if (_data.length === 2) {\n return [_data[0], _data[1], _data[0], _data[1]];\n }\n\n return _data;\n }, [_data, loop]);\n\n const computedAnimResult = useComputedAnim(width, data.length);\n\n const indexController = useIndexController({\n originalLength: _data.length,\n length: data.length,\n handlerOffsetX,\n width,\n loop,\n onChange: (i) => onSnapToItem && runOnJS(onSnapToItem)(i),\n });\n\n const carouselController = useCarouselController({\n loop,\n width,\n handlerOffsetX,\n indexController,\n disable: !data.length,\n onScrollBegin: () => runOnJS(onScrollBegin)(),\n onScrollEnd: () => runOnJS(onScrollEnd)(),\n });\n\n const { run, pause } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const { index, sharedPreIndex, sharedIndex, computedIndex } =\n indexController;\n\n const onScrollBegin = React.useCallback(() => {\n pause();\n props.onScrollBegin?.();\n }, [pause, props]);\n\n const onScrollEnd = React.useCallback(() => {\n run();\n computedIndex();\n props.onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, props, run]);\n\n const offsetX = useDerivedValue(() => {\n const x = handlerOffsetX.value % computedAnimResult.TOTAL_WIDTH;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [computedAnimResult, loop]);\n\n useAnimatedReaction(\n () => offsetX.value,\n (value) => {\n let absoluteProgress = Math.abs(value / width);\n if (value > 0) {\n absoluteProgress = data.length - absoluteProgress;\n }\n !!onProgressChange &&\n runOnJS(onProgressChange)(value, absoluteProgress);\n },\n [onProgressChange, data]\n );\n\n const next = React.useCallback(() => {\n return carouselController.next();\n }, [carouselController]);\n\n const prev = React.useCallback(() => {\n return carouselController.prev();\n }, [carouselController]);\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n carouselController.to(i, animated);\n },\n [carouselController]\n );\n\n const animatedListScrollHandler =\n useAnimatedGestureHandler<PanGestureHandlerGestureEvent>(\n {\n onStart: (_, ctx: any) => {\n runOnJS(pause)();\n runOnJS(onScrollBegin)();\n cancelAnimation(handlerOffsetX);\n ctx.currentContentOffsetX = handlerOffsetX.value;\n ctx.start = true;\n },\n onActive: (e, ctx: any) => {\n const { translationX } = e;\n if (\n !loop &&\n (handlerOffsetX.value >= 0 ||\n handlerOffsetX.value <= -(data.length - 1) * width)\n ) {\n handlerOffsetX.value =\n ctx.currentContentOffsetX + translationX / 2;\n return;\n }\n handlerOffsetX.value =\n ctx.currentContentOffsetX + translationX;\n },\n onEnd: (e) => {\n function _withAnimationCallback(num: number) {\n return withSpring(\n num,\n Object.assign({}, timingConfig, {\n velocity: e.velocityX,\n }),\n (isFinished) => {\n if (isFinished) {\n runOnJS(onScrollEnd)();\n }\n }\n );\n }\n\n const page = Math.round(handlerOffsetX.value / width);\n\n const velocityPage = Math.round(\n (handlerOffsetX.value + e.velocityX) / width\n );\n\n let pageWithVelocity = Math.min(\n page + 1,\n Math.max(page - 1, velocityPage)\n );\n\n if (!loop) {\n pageWithVelocity = Math.max(\n -(data.length - 1),\n Math.min(0, pageWithVelocity)\n );\n }\n\n if (loop) {\n handlerOffsetX.value = _withAnimationCallback(\n pageWithVelocity * width\n );\n return;\n }\n if (handlerOffsetX.value >= 0) {\n handlerOffsetX.value = _withAnimationCallback(0);\n return;\n }\n\n if (handlerOffsetX.value <= -(data.length - 1) * width) {\n handlerOffsetX.value = _withAnimationCallback(\n -(data.length - 1) * width\n );\n return;\n }\n\n handlerOffsetX.value = _withAnimationCallback(\n pageWithVelocity * width\n );\n },\n },\n [loop, data, onScrollBegin, onScrollEnd]\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 renderLayout = React.useCallback(\n (item: T, i: number) => {\n switch (mode) {\n case 'parallax':\n return (\n <ParallaxLayout\n parallaxScrollingOffset={parallaxScrollingOffset}\n parallaxScrollingScale={parallaxScrollingScale}\n computedAnimResult={computedAnimResult}\n width={width}\n handlerOffsetX={offsetX}\n index={i}\n key={i}\n loop={loop}\n >\n {renderItem(item, i)}\n </ParallaxLayout>\n );\n default:\n return (\n <CarouselItem\n computedAnimResult={computedAnimResult}\n width={width}\n height={height}\n handlerOffsetX={offsetX}\n index={i}\n key={i}\n loop={loop}\n >\n {renderItem(item, i)}\n </CarouselItem>\n );\n }\n },\n [\n loop,\n mode,\n computedAnimResult,\n height,\n offsetX,\n parallaxScrollingOffset,\n parallaxScrollingScale,\n width,\n renderItem,\n ]\n );\n\n return (\n <PanGestureHandler\n {...panGestureHandlerProps}\n onHandlerStateChange={animatedListScrollHandler}\n >\n <Animated.View\n // eslint-disable-next-line react-native/no-inline-styles\n style={{\n ...style,\n width,\n height,\n flexDirection: 'row',\n position: 'relative',\n }}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </PanGestureHandler>\n );\n}\n\nexport default React.forwardRef(Carousel) as typeof Carousel;\n"]}
1
+ {"version":3,"sources":["Carousel.tsx"],"names":["React","PanGestureHandler","Animated","cancelAnimation","runOnJS","useAnimatedGestureHandler","useAnimatedReaction","useDerivedValue","useSharedValue","withSpring","CarouselItem","ParallaxLayout","useCarouselController","useComputedAnim","useAutoPlay","useIndexController","usePropsErrorBoundary","defaultSpringConfig","damping","Carousel","props","ref","defaultIndex","height","data","_data","loop","mode","autoPlay","autoPlayReverse","autoPlayInterval","parallaxScrollingOffset","parallaxScrollingScale","style","panGestureHandlerProps","renderItem","onSnapToItem","onProgressChange","timingConfig","springConfig","width","Math","round","defaultHandlerOffsetX","abs","handlerOffsetX","useMemo","length","computedAnimResult","indexController","originalLength","onChange","i","carouselController","disable","onScrollBegin","onScrollEnd","run","pause","index","sharedPreIndex","sharedIndex","computedIndex","useCallback","current","offsetX","x","value","TOTAL_WIDTH","isNaN","absoluteProgress","next","prev","getCurrentIndex","goToIndex","animated","to","animatedListScrollHandler","onStart","_","ctx","currentContentOffsetX","start","onActive","e","translationX","onEnd","_withAnimationCallback","num","Object","assign","velocity","velocityX","isFinished","page","velocityPage","pageWithVelocity","min","max","useImperativeHandle","renderLayout","item","flexDirection","position","map","forwardRef"],"mappings":"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","sourcesContent":["import React from 'react';\nimport type { FlexStyle, ViewStyle } from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerProps,\n PanGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withSpring,\n} from 'react-native-reanimated';\nimport { CarouselItem } from './CarouselItem';\nimport type { TMode } from './layouts';\nimport { ParallaxLayout } from './layouts/index';\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useComputedAnim } from './hooks/useComputedAnim';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { useIndexController } from './hooks/useIndexController';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\n\nconst defaultSpringConfig: Animated.WithSpringConfig = {\n damping: 100,\n};\nexport interface ICarouselProps<T extends unknown> {\n ref?: React.Ref<ICarouselInstance>;\n /**\n * Carousel loop playback.\n * @default true\n */\n loop?: boolean;\n /**\n * Carousel Animated transitions.\n * @default 'default'\n */\n mode?: TMode;\n /**\n * Specified carousel container width.\n */\n width: number;\n /**\n * Specified carousel container height.\n * @default '100%'\n */\n height?: FlexStyle['height'];\n /**\n * Carousel items data set.\n */\n data: T[];\n /**\n * Default index\n * @default 0\n */\n defaultIndex?: number;\n /**\n * Auto play\n */\n autoPlay?: boolean;\n /**\n * Auto play\n * @description reverse playback\n */\n autoPlayReverse?: boolean;\n /**\n * Auto play\n * @description playback interval\n */\n autoPlayInterval?: number;\n /**\n * Carousel container style\n */\n style?: ViewStyle;\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 * Sping config of translation animated\n */\n springConfig?: Animated.WithSpringConfig;\n /**\n * PanGestureHandler props\n */\n panGestureHandlerProps?: Omit<\n Partial<PanGestureHandlerProps>,\n 'onHandlerStateChange'\n >;\n /**\n * Render carousel item.\n */\n renderItem: (data: T, index: number) => React.ReactNode;\n /**\n * Callback fired when navigating to an item\n */\n onSnapToItem?: (index: number) => void;\n /**\n * On scroll begin\n */\n onScrollBegin?: () => void;\n /**\n * On scroll end\n */\n onScrollEnd?: (previous: number, current: number) => void;\n /**\n * On progress change\n * @param offsetProgress Total of offset distance (0 390 780 ...)\n * @param absoluteProgress Convert to index (0 1 2 ...)\n */\n onProgressChange?: (\n offsetProgress: number,\n absoluteProgress: number\n ) => void;\n}\n\nexport interface ICarouselInstance {\n /**\n * Play the last one\n */\n prev: () => void;\n /**\n * Play the next one\n */\n next: () => void;\n /**\n * Get current item index\n */\n getCurrentIndex: () => number;\n /**\n * Go to index\n */\n goToIndex: (index: number, animated?: boolean) => void;\n}\n\nfunction Carousel<T extends unknown = any>(\n props: ICarouselProps<T>,\n ref: React.Ref<ICarouselInstance>\n) {\n const {\n defaultIndex = 0,\n height = '100%',\n data: _data = [],\n loop = true,\n mode = 'default',\n autoPlay,\n autoPlayReverse,\n autoPlayInterval = 1000,\n parallaxScrollingOffset,\n parallaxScrollingScale,\n style,\n panGestureHandlerProps = {},\n renderItem,\n onSnapToItem,\n onProgressChange,\n } = props;\n\n usePropsErrorBoundary({\n ...props,\n defaultIndex,\n height,\n data: _data,\n loop,\n mode,\n autoPlay,\n autoPlayReverse,\n autoPlayInterval,\n parallaxScrollingOffset,\n parallaxScrollingScale,\n style,\n panGestureHandlerProps,\n // @ts-ignore\n renderItem,\n onSnapToItem,\n onProgressChange,\n });\n\n const timingConfig = {\n ...defaultSpringConfig,\n ...props.springConfig,\n };\n const width = Math.round(props.width);\n const defaultHandlerOffsetX = -Math.abs(defaultIndex * width);\n const handlerOffsetX = useSharedValue<number>(defaultHandlerOffsetX);\n const data = React.useMemo<T[]>(() => {\n if (!loop) return _data;\n\n if (_data.length === 1) {\n return [_data[0], _data[0], _data[0]];\n }\n\n if (_data.length === 2) {\n return [_data[0], _data[1], _data[0], _data[1]];\n }\n\n return _data;\n }, [_data, loop]);\n\n const computedAnimResult = useComputedAnim(width, data.length);\n\n const indexController = useIndexController({\n originalLength: _data.length,\n length: data.length,\n handlerOffsetX,\n width,\n loop,\n onChange: (i) => onSnapToItem && runOnJS(onSnapToItem)(i),\n });\n\n const carouselController = useCarouselController({\n loop,\n width,\n handlerOffsetX,\n indexController,\n disable: !data.length,\n onScrollBegin: () => runOnJS(onScrollBegin)(),\n onScrollEnd: () => runOnJS(onScrollEnd)(),\n });\n\n const { run, pause } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const { index, sharedPreIndex, sharedIndex, computedIndex } =\n indexController;\n\n const onScrollBegin = React.useCallback(() => {\n pause();\n props.onScrollBegin?.();\n }, [pause, props]);\n\n const onScrollEnd = React.useCallback(() => {\n run();\n computedIndex();\n props.onScrollEnd?.(sharedPreIndex.current, sharedIndex.current);\n }, [sharedPreIndex, sharedIndex, computedIndex, props, run]);\n\n const offsetX = useDerivedValue(() => {\n const x = handlerOffsetX.value % computedAnimResult.TOTAL_WIDTH;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [computedAnimResult, loop]);\n\n useAnimatedReaction(\n () => offsetX.value,\n (value) => {\n let absoluteProgress = Math.abs(value / width);\n if (value > 0) {\n absoluteProgress = data.length - absoluteProgress;\n }\n !!onProgressChange &&\n runOnJS(onProgressChange)(value, absoluteProgress);\n },\n [onProgressChange, data]\n );\n\n const next = React.useCallback(() => {\n return carouselController.next();\n }, [carouselController]);\n\n const prev = React.useCallback(() => {\n return carouselController.prev();\n }, [carouselController]);\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n carouselController.to(i, animated);\n },\n [carouselController]\n );\n\n const animatedListScrollHandler =\n useAnimatedGestureHandler<PanGestureHandlerGestureEvent>(\n {\n onStart: (_, ctx: any) => {\n runOnJS(pause)();\n runOnJS(onScrollBegin)();\n cancelAnimation(handlerOffsetX);\n ctx.currentContentOffsetX = handlerOffsetX.value;\n ctx.start = true;\n },\n onActive: (e, ctx: any) => {\n const { translationX } = e;\n if (\n !loop &&\n (handlerOffsetX.value >= 0 ||\n handlerOffsetX.value <= -(data.length - 1) * width)\n ) {\n handlerOffsetX.value =\n ctx.currentContentOffsetX + translationX / 2;\n return;\n }\n handlerOffsetX.value =\n ctx.currentContentOffsetX + translationX;\n },\n onEnd: (e) => {\n function _withAnimationCallback(num: number) {\n return withSpring(\n num,\n Object.assign({}, timingConfig, {\n velocity: e.velocityX,\n }),\n (isFinished) => {\n if (isFinished) {\n runOnJS(onScrollEnd)();\n }\n }\n );\n }\n\n const page = Math.round(handlerOffsetX.value / width);\n\n const velocityPage = Math.round(\n (handlerOffsetX.value + e.velocityX) / width\n );\n\n let pageWithVelocity = Math.min(\n page + 1,\n Math.max(page - 1, velocityPage)\n );\n\n if (!loop) {\n pageWithVelocity = Math.max(\n -(data.length - 1),\n Math.min(0, pageWithVelocity)\n );\n }\n\n if (loop) {\n handlerOffsetX.value = _withAnimationCallback(\n pageWithVelocity * width\n );\n return;\n }\n if (handlerOffsetX.value >= 0) {\n handlerOffsetX.value = _withAnimationCallback(0);\n return;\n }\n\n if (handlerOffsetX.value <= -(data.length - 1) * width) {\n handlerOffsetX.value = _withAnimationCallback(\n -(data.length - 1) * width\n );\n return;\n }\n\n handlerOffsetX.value = _withAnimationCallback(\n pageWithVelocity * width\n );\n },\n },\n [loop, data, onScrollBegin, onScrollEnd]\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 renderLayout = React.useCallback(\n (item: T, i: number) => {\n switch (mode) {\n case 'parallax':\n return (\n <ParallaxLayout\n parallaxScrollingOffset={parallaxScrollingOffset}\n parallaxScrollingScale={parallaxScrollingScale}\n computedAnimResult={computedAnimResult}\n width={width}\n handlerOffsetX={offsetX}\n index={i}\n key={i}\n loop={loop}\n >\n {renderItem(item, i)}\n </ParallaxLayout>\n );\n default:\n return (\n <CarouselItem\n computedAnimResult={computedAnimResult}\n width={width}\n height={height}\n handlerOffsetX={offsetX}\n index={i}\n key={i}\n loop={loop}\n >\n {renderItem(item, i)}\n </CarouselItem>\n );\n }\n },\n [\n loop,\n mode,\n computedAnimResult,\n height,\n offsetX,\n parallaxScrollingOffset,\n parallaxScrollingScale,\n width,\n renderItem,\n ]\n );\n\n return (\n <PanGestureHandler\n {...panGestureHandlerProps}\n onGestureEvent={animatedListScrollHandler}\n >\n <Animated.View\n // eslint-disable-next-line react-native/no-inline-styles\n style={{\n ...style,\n width,\n height,\n flexDirection: 'row',\n position: 'relative',\n }}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </PanGestureHandler>\n );\n}\n\nexport default React.forwardRef(Carousel) as typeof Carousel;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-reanimated-carousel",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
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",
package/src/Carousel.tsx CHANGED
@@ -431,7 +431,7 @@ function Carousel<T extends unknown = any>(
431
431
  return (
432
432
  <PanGestureHandler
433
433
  {...panGestureHandlerProps}
434
- onHandlerStateChange={animatedListScrollHandler}
434
+ onGestureEvent={animatedListScrollHandler}
435
435
  >
436
436
  <Animated.View
437
437
  // eslint-disable-next-line react-native/no-inline-styles