react-native-reanimated-carousel 3.0.5 → 3.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/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [3.0.6](https://github.com/dohooo/react-native-reanimated-carousel/compare/v3.0.5...v3.0.6) (2022-09-27)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * can't override the carousel styles. e.g. "overflow: visible;" ([2ab0bff](https://github.com/dohooo/react-native-reanimated-carousel/commit/2ab0bff342a286b819039ac4de6ff801c0a2e83a)), closes [#260](https://github.com/dohooo/react-native-reanimated-carousel/issues/260)
7
+
1
8
  ## [3.0.5](https://github.com/dohooo/react-native-reanimated-carousel/compare/v3.0.4...v3.0.5) (2022-09-15)
2
9
 
3
10
  ## [3.0.4](https://github.com/dohooo/react-native-reanimated-carousel/compare/v3.0.3...v3.0.4) (2022-08-12)
@@ -1,2 +1,2 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _react=_interopRequireDefault(require("react"));var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _useCarouselController=require("./hooks/useCarouselController");var _useAutoPlay2=require("./hooks/useAutoPlay");var _usePropsErrorBoundary=require("./hooks/usePropsErrorBoundary");var _ScrollViewGesture=require("./ScrollViewGesture");var _useVisibleRanges=require("./hooks/useVisibleRanges");var _reactNative=require("react-native");var _BaseLayout=require("./layouts/BaseLayout");var _useLayoutConfig=require("./hooks/useLayoutConfig");var _useInitProps=require("./hooks/useInitProps");var _store=require("./store");var _useCommonVariables=require("./hooks/useCommonVariables");var _useOnProgressChange=require("./hooks/useOnProgressChange");var _computedWithAutoFillData=require("./utils/computedWithAutoFillData");var _this=this,_jsxFileName="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/Carousel.tsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;})),keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?ownKeys(Object(source),!0).forEach(function(key){(0,_defineProperty2.default)(target,key,source[key]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}return target;}var Carousel=_react.default.forwardRef(function(_props,ref){var props=(0,_useInitProps.useInitProps)(_props);var testID=props.testID,data=props.data,rawData=props.rawData,loop=props.loop,autoFillData=props.autoFillData,mode=props.mode,style=props.style,width=props.width,height=props.height,vertical=props.vertical,autoPlay=props.autoPlay,windowSize=props.windowSize,autoPlayReverse=props.autoPlayReverse,autoPlayInterval=props.autoPlayInterval,scrollAnimationDuration=props.scrollAnimationDuration,withAnimation=props.withAnimation,renderItem=props.renderItem,onScrollEnd=props.onScrollEnd,onSnapToItem=props.onSnapToItem,_onScrollBegin=props.onScrollBegin,onProgressChange=props.onProgressChange,customAnimation=props.customAnimation,defaultIndex=props.defaultIndex;var commonVariables=(0,_useCommonVariables.useCommonVariables)(props);var size=commonVariables.size,handlerOffsetX=commonVariables.handlerOffsetX;var dataLength=data.length;var offsetX=(0,_reactNativeReanimated.useDerivedValue)(function(){var _f=function _f(){var totalSize=size*dataLength;var x=handlerOffsetX.value%totalSize;if(!loop){return handlerOffsetX.value;}return isNaN(x)?0:x;};_f._closure={size:size,dataLength:dataLength,handlerOffsetX:handlerOffsetX,loop:loop};_f.asString="function _f(){const{size,dataLength,handlerOffsetX,loop}=jsThis._closure;{const totalSize=size*dataLength;const x=handlerOffsetX.value%totalSize;if(!loop){return handlerOffsetX.value;}return isNaN(x)?0:x;}}";_f.__workletHash=17456063948631;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/Carousel.tsx (54:40)";return _f;}(),[loop,size,dataLength]);(0,_usePropsErrorBoundary.usePropsErrorBoundary)(props);(0,_useOnProgressChange.useOnProgressChange)({autoFillData:autoFillData,loop:loop,size:size,offsetX:offsetX,rawData:rawData,onProgressChange:onProgressChange});var carouselController=(0,_useCarouselController.useCarouselController)({loop:loop,size:size,data:data,autoFillData:autoFillData,handlerOffsetX:handlerOffsetX,withAnimation:withAnimation,defaultIndex:defaultIndex,onScrollEnd:function onScrollEnd(){return(0,_reactNativeReanimated.runOnJS)(_onScrollEnd)();},onScrollBegin:function onScrollBegin(){return!!_onScrollBegin&&(0,_reactNativeReanimated.runOnJS)(_onScrollBegin)();},duration:scrollAnimationDuration});var next=carouselController.next,prev=carouselController.prev,scrollTo=carouselController.scrollTo,getSharedIndex=carouselController.getSharedIndex,getCurrentIndex=carouselController.getCurrentIndex;var _useAutoPlay=(0,_useAutoPlay2.useAutoPlay)({autoPlay:autoPlay,autoPlayInterval:autoPlayInterval,autoPlayReverse:autoPlayReverse,carouselController:carouselController}),startAutoPlay=_useAutoPlay.start,pauseAutoPlay=_useAutoPlay.pause;var _onScrollEnd=_react.default.useCallback(function(){var _sharedIndex=Math.round(getSharedIndex());var realIndex=(0,_computedWithAutoFillData.computedRealIndexWithAutoFillData)({index:_sharedIndex,dataLength:rawData.length,loop:loop,autoFillData:autoFillData});if(onSnapToItem){onSnapToItem(realIndex);}if(onScrollEnd){onScrollEnd(realIndex);}},[loop,autoFillData,rawData.length,getSharedIndex,onSnapToItem,onScrollEnd]);var scrollViewGestureOnScrollBegin=_react.default.useCallback(function(){pauseAutoPlay();_onScrollBegin==null?void 0:_onScrollBegin();},[_onScrollBegin,pauseAutoPlay]);var scrollViewGestureOnScrollEnd=_react.default.useCallback(function(){startAutoPlay();_onScrollEnd();},[_onScrollEnd,startAutoPlay]);var scrollViewGestureOnTouchBegin=_react.default.useCallback(pauseAutoPlay,[pauseAutoPlay]);var scrollViewGestureOnTouchEnd=_react.default.useCallback(startAutoPlay,[startAutoPlay]);_react.default.useImperativeHandle(ref,function(){return{next:next,prev:prev,getCurrentIndex:getCurrentIndex,scrollTo:scrollTo};},[getCurrentIndex,next,prev,scrollTo]);var visibleRanges=(0,_useVisibleRanges.useVisibleRanges)({total:data.length,viewSize:size,translation:handlerOffsetX,windowSize:windowSize});var layoutConfig=(0,_useLayoutConfig.useLayoutConfig)(_objectSpread(_objectSpread({},props),{},{size:size}));var renderLayout=_react.default.useCallback(function(item,i){var realIndex=(0,_computedWithAutoFillData.computedRealIndexWithAutoFillData)({index:i,dataLength:rawData.length,loop:loop,autoFillData:autoFillData});return _react.default.createElement(_BaseLayout.BaseLayout,{key:i,index:i,handlerOffsetX:offsetX,visibleRanges:visibleRanges,animationStyle:customAnimation||layoutConfig,__self:_this,__source:{fileName:_jsxFileName,lineNumber:170,columnNumber:21}},function(_ref){var animationValue=_ref.animationValue;return renderItem({item:item,index:realIndex,animationValue:animationValue});});},[loop,rawData,offsetX,visibleRanges,autoFillData,renderItem,layoutConfig,customAnimation]);return _react.default.createElement(_store.CTX.Provider,{value:{props:props,common:commonVariables},__self:_this,__source:{fileName:_jsxFileName,lineNumber:200,columnNumber:13}},_react.default.createElement(_reactNative.View,{style:[styles.container,{width:width||'100%',height:height||'100%'},style],testID:testID,__self:_this,__source:{fileName:_jsxFileName,lineNumber:201,columnNumber:17}},_react.default.createElement(_ScrollViewGesture.ScrollViewGesture,{size:size,translation:handlerOffsetX,onScrollBegin:scrollViewGestureOnScrollBegin,onScrollEnd:scrollViewGestureOnScrollEnd,onTouchBegin:scrollViewGestureOnTouchBegin,onTouchEnd:scrollViewGestureOnTouchEnd,__self:_this,__source:{fileName:_jsxFileName,lineNumber:209,columnNumber:21}},_react.default.createElement(_reactNativeReanimated.default.View,{key:mode,style:[styles.container,{width:width||'100%',height:height||'100%'},style,vertical?styles.itemsVertical:styles.itemsHorizontal],__self:_this,__source:{fileName:_jsxFileName,lineNumber:217,columnNumber:25}},data.map(renderLayout)))));});var _default=Carousel;exports.default=_default;var styles=_reactNative.StyleSheet.create({container:{overflow:'hidden'},itemsHorizontal:{flexDirection:'row'},itemsVertical:{flexDirection:'column'}});
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _react=_interopRequireDefault(require("react"));var _reactNativeReanimated=require("react-native-reanimated");var _useCarouselController=require("./hooks/useCarouselController");var _useAutoPlay2=require("./hooks/useAutoPlay");var _usePropsErrorBoundary=require("./hooks/usePropsErrorBoundary");var _ScrollViewGesture=require("./ScrollViewGesture");var _useVisibleRanges=require("./hooks/useVisibleRanges");var _reactNative=require("react-native");var _BaseLayout=require("./layouts/BaseLayout");var _useLayoutConfig=require("./hooks/useLayoutConfig");var _useInitProps=require("./hooks/useInitProps");var _store=require("./store");var _useCommonVariables=require("./hooks/useCommonVariables");var _useOnProgressChange=require("./hooks/useOnProgressChange");var _computedWithAutoFillData=require("./utils/computedWithAutoFillData");var _this=this,_jsxFileName="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/Carousel.tsx";function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;})),keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?ownKeys(Object(source),!0).forEach(function(key){(0,_defineProperty2.default)(target,key,source[key]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}return target;}var Carousel=_react.default.forwardRef(function(_props,ref){var props=(0,_useInitProps.useInitProps)(_props);var testID=props.testID,data=props.data,rawData=props.rawData,loop=props.loop,autoFillData=props.autoFillData,mode=props.mode,style=props.style,width=props.width,height=props.height,vertical=props.vertical,autoPlay=props.autoPlay,windowSize=props.windowSize,autoPlayReverse=props.autoPlayReverse,autoPlayInterval=props.autoPlayInterval,scrollAnimationDuration=props.scrollAnimationDuration,withAnimation=props.withAnimation,renderItem=props.renderItem,onScrollEnd=props.onScrollEnd,onSnapToItem=props.onSnapToItem,_onScrollBegin=props.onScrollBegin,onProgressChange=props.onProgressChange,customAnimation=props.customAnimation,defaultIndex=props.defaultIndex;var commonVariables=(0,_useCommonVariables.useCommonVariables)(props);var size=commonVariables.size,handlerOffsetX=commonVariables.handlerOffsetX;var dataLength=data.length;var offsetX=(0,_reactNativeReanimated.useDerivedValue)(function(){var _f=function _f(){var totalSize=size*dataLength;var x=handlerOffsetX.value%totalSize;if(!loop){return handlerOffsetX.value;}return isNaN(x)?0:x;};_f._closure={size:size,dataLength:dataLength,handlerOffsetX:handlerOffsetX,loop:loop};_f.asString="function _f(){const{size,dataLength,handlerOffsetX,loop}=jsThis._closure;{const totalSize=size*dataLength;const x=handlerOffsetX.value%totalSize;if(!loop){return handlerOffsetX.value;}return isNaN(x)?0:x;}}";_f.__workletHash=17456063948631;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/Carousel.tsx (54:40)";return _f;}(),[loop,size,dataLength]);(0,_usePropsErrorBoundary.usePropsErrorBoundary)(props);(0,_useOnProgressChange.useOnProgressChange)({autoFillData:autoFillData,loop:loop,size:size,offsetX:offsetX,rawData:rawData,onProgressChange:onProgressChange});var carouselController=(0,_useCarouselController.useCarouselController)({loop:loop,size:size,data:data,autoFillData:autoFillData,handlerOffsetX:handlerOffsetX,withAnimation:withAnimation,defaultIndex:defaultIndex,onScrollEnd:function onScrollEnd(){return(0,_reactNativeReanimated.runOnJS)(_onScrollEnd)();},onScrollBegin:function onScrollBegin(){return!!_onScrollBegin&&(0,_reactNativeReanimated.runOnJS)(_onScrollBegin)();},duration:scrollAnimationDuration});var next=carouselController.next,prev=carouselController.prev,scrollTo=carouselController.scrollTo,getSharedIndex=carouselController.getSharedIndex,getCurrentIndex=carouselController.getCurrentIndex;var _useAutoPlay=(0,_useAutoPlay2.useAutoPlay)({autoPlay:autoPlay,autoPlayInterval:autoPlayInterval,autoPlayReverse:autoPlayReverse,carouselController:carouselController}),startAutoPlay=_useAutoPlay.start,pauseAutoPlay=_useAutoPlay.pause;var _onScrollEnd=_react.default.useCallback(function(){var _sharedIndex=Math.round(getSharedIndex());var realIndex=(0,_computedWithAutoFillData.computedRealIndexWithAutoFillData)({index:_sharedIndex,dataLength:rawData.length,loop:loop,autoFillData:autoFillData});if(onSnapToItem){onSnapToItem(realIndex);}if(onScrollEnd){onScrollEnd(realIndex);}},[loop,autoFillData,rawData.length,getSharedIndex,onSnapToItem,onScrollEnd]);var scrollViewGestureOnScrollBegin=_react.default.useCallback(function(){pauseAutoPlay();_onScrollBegin==null?void 0:_onScrollBegin();},[_onScrollBegin,pauseAutoPlay]);var scrollViewGestureOnScrollEnd=_react.default.useCallback(function(){startAutoPlay();_onScrollEnd();},[_onScrollEnd,startAutoPlay]);var scrollViewGestureOnTouchBegin=_react.default.useCallback(pauseAutoPlay,[pauseAutoPlay]);var scrollViewGestureOnTouchEnd=_react.default.useCallback(startAutoPlay,[startAutoPlay]);_react.default.useImperativeHandle(ref,function(){return{next:next,prev:prev,getCurrentIndex:getCurrentIndex,scrollTo:scrollTo};},[getCurrentIndex,next,prev,scrollTo]);var visibleRanges=(0,_useVisibleRanges.useVisibleRanges)({total:data.length,viewSize:size,translation:handlerOffsetX,windowSize:windowSize});var layoutConfig=(0,_useLayoutConfig.useLayoutConfig)(_objectSpread(_objectSpread({},props),{},{size:size}));var renderLayout=_react.default.useCallback(function(item,i){var realIndex=(0,_computedWithAutoFillData.computedRealIndexWithAutoFillData)({index:i,dataLength:rawData.length,loop:loop,autoFillData:autoFillData});return _react.default.createElement(_BaseLayout.BaseLayout,{key:i,index:i,handlerOffsetX:offsetX,visibleRanges:visibleRanges,animationStyle:customAnimation||layoutConfig,__self:_this,__source:{fileName:_jsxFileName,lineNumber:170,columnNumber:21}},function(_ref){var animationValue=_ref.animationValue;return renderItem({item:item,index:realIndex,animationValue:animationValue});});},[loop,rawData,offsetX,visibleRanges,autoFillData,renderItem,layoutConfig,customAnimation]);return _react.default.createElement(_store.CTX.Provider,{value:{props:props,common:commonVariables},__self:_this,__source:{fileName:_jsxFileName,lineNumber:200,columnNumber:13}},_react.default.createElement(_ScrollViewGesture.ScrollViewGesture,{key:mode,size:size,translation:handlerOffsetX,style:[styles.container,{width:width||'100%',height:height||'100%'},style,vertical?styles.itemsVertical:styles.itemsHorizontal],testID:testID,onScrollBegin:scrollViewGestureOnScrollBegin,onScrollEnd:scrollViewGestureOnScrollEnd,onTouchBegin:scrollViewGestureOnTouchBegin,onTouchEnd:scrollViewGestureOnTouchEnd,__self:_this,__source:{fileName:_jsxFileName,lineNumber:201,columnNumber:17}},data.map(renderLayout)));});var _default=Carousel;exports.default=_default;var styles=_reactNative.StyleSheet.create({container:{overflow:'hidden'},itemsHorizontal:{flexDirection:'row'},itemsVertical:{flexDirection:'column'}});
2
2
  //# sourceMappingURL=Carousel.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["Carousel.tsx"],"names":["Carousel","React","forwardRef","_props","ref","props","testID","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffsetX","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","next","prev","scrollTo","getSharedIndex","getCurrentIndex","startAutoPlay","start","pauseAutoPlay","pause","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","i","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","StyleSheet","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React 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 { 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';\nimport { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n data,\n autoFillData,\n handlerOffsetX,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const { next, prev, scrollTo, getSharedIndex, getCurrentIndex } =\n carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n const realIndex = computedRealIndexWithAutoFillData({\n index: _sharedIndex,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n if (onSnapToItem) {\n onSnapToItem(realIndex);\n }\n if (onScrollEnd) {\n onScrollEnd(realIndex);\n }\n }, [\n loop,\n autoFillData,\n rawData.length,\n getSharedIndex,\n onSnapToItem,\n onScrollEnd,\n ]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n scrollTo,\n }),\n [getCurrentIndex, next, prev, 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({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\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 loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\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 testID={testID}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\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);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\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","React","forwardRef","_props","ref","props","testID","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffsetX","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","next","prev","scrollTo","getSharedIndex","getCurrentIndex","startAutoPlay","start","pauseAutoPlay","pause","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","i","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","StyleSheet","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { 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 } from 'react-native';\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';\nimport { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n data,\n autoFillData,\n handlerOffsetX,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const { next, prev, scrollTo, getSharedIndex, getCurrentIndex } =\n carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n const realIndex = computedRealIndexWithAutoFillData({\n index: _sharedIndex,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n if (onSnapToItem) {\n onSnapToItem(realIndex);\n }\n if (onScrollEnd) {\n onScrollEnd(realIndex);\n }\n }, [\n loop,\n autoFillData,\n rawData.length,\n getSharedIndex,\n onSnapToItem,\n onScrollEnd,\n ]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n scrollTo,\n }),\n [getCurrentIndex, next, prev, 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({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\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 loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <ScrollViewGesture\n key={mode}\n size={size}\n translation={handlerOffsetX}\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 testID={testID}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n {data.map(renderLayout)}\n </ScrollViewGesture>\n </CTX.Provider>\n );\n }\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\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,2 +1,2 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.ScrollViewGesture=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _react=_interopRequireDefault(require("react"));var _reactNative=require("react-native");var _reactNativeGestureHandler=require("react-native-gesture-handler");var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _constants=require("./constants");var _store=require("./store");var _dealWithAnimation=require("./utils/dealWithAnimation");var _this=this,_jsxFileName="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var IScrollViewGesture=function IScrollViewGesture(props){var _React$useContext=_react.default.useContext(_store.CTX),_React$useContext$pro=_React$useContext.props,vertical=_React$useContext$pro.vertical,data=_React$useContext$pro.data,pagingEnabled=_React$useContext$pro.pagingEnabled,snapEnabled=_React$useContext$pro.snapEnabled,panGestureHandlerProps=_React$useContext$pro.panGestureHandlerProps,infinite=_React$useContext$pro.loop,scrollAnimationDuration=_React$useContext$pro.scrollAnimationDuration,withAnimation=_React$useContext$pro.withAnimation,enabled=_React$useContext$pro.enabled;var translation=props.translation,size=props.size,onScrollBegin=props.onScrollBegin,onScrollEnd=props.onScrollEnd,onTouchBegin=props.onTouchBegin,onTouchEnd=props.onTouchEnd;var maxPage=data.length;var isHorizontal=(0,_reactNativeReanimated.useDerivedValue)(function(){var _f=function _f(){return!vertical;};_f._closure={vertical:vertical};_f.asString="function _f(){const{vertical}=jsThis._closure;{return!vertical;}}";_f.__workletHash=14495821007639;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (63:41)";return _f;}(),[vertical]);var touching=(0,_reactNativeReanimated.useSharedValue)(false);var scrollEndTranslation=(0,_reactNativeReanimated.useSharedValue)(0);var scrollEndVelocity=(0,_reactNativeReanimated.useSharedValue)(0);var _withSpring=_react.default.useCallback(function(){var _f=function _f(toValue,onFinished){var defaultWithAnimation={type:'timing',config:{duration:scrollAnimationDuration+100,easing:_constants.Easing.easeOutQuart}};return(0,_dealWithAnimation.dealWithAnimation)(withAnimation!=null?withAnimation:defaultWithAnimation)(toValue,function(){var _f=function _f(isFinished){if(isFinished){onFinished&&(0,_reactNativeReanimated.runOnJS)(onFinished)();}};_f._closure={onFinished:onFinished,runOnJS:_reactNativeReanimated.runOnJS};_f.asString="function _f(isFinished){const{onFinished,runOnJS}=jsThis._closure;{if(isFinished){onFinished&&runOnJS(onFinished)();}}}";_f.__workletHash=9122154549195;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (81:16)";return _f;}());};_f._closure={scrollAnimationDuration:scrollAnimationDuration,Easing:{easeOutQuart:_constants.Easing.easeOutQuart},dealWithAnimation:_dealWithAnimation.dealWithAnimation,withAnimation:withAnimation,runOnJS:_reactNativeReanimated.runOnJS};_f.asString="function _f(toValue,onFinished){const{scrollAnimationDuration,Easing,dealWithAnimation,withAnimation,runOnJS}=jsThis._closure;{var _withAnimation;const defaultWithAnimation={type:'timing',config:{duration:scrollAnimationDuration+100,easing:Easing.easeOutQuart}};return dealWithAnimation((_withAnimation=withAnimation)!==null&&_withAnimation!==void 0?_withAnimation:defaultWithAnimation)(toValue,function(isFinished){'worklet';if(isFinished){onFinished&&runOnJS(onFinished)();}});}}";_f.__workletHash=16303945491727;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (69:8)";return _f;}(),[scrollAnimationDuration,withAnimation]);var endWithSpring=_react.default.useCallback(function(){var _f=function _f(onFinished){var origin=translation.value;var velocity=scrollEndVelocity.value;if(!pagingEnabled){if(snapEnabled){var nextPage=Math.round((origin+velocity*0.4)/size)*size;translation.value=_withSpring(nextPage,onFinished);return;}translation.value=(0,_reactNativeReanimated.withDecay)({velocity:velocity,deceleration:0.999});return;}var direction=-(scrollEndTranslation.value>=0?1:-1);var computed=direction<0?Math.ceil:Math.floor;var page=computed(-translation.value/size);var finalPage=page+direction;if(!infinite){finalPage=Math.min(maxPage-1,Math.max(0,finalPage));}translation.value=_withSpring(-finalPage*size,onFinished);};_f._closure={translation:translation,scrollEndVelocity:scrollEndVelocity,pagingEnabled:pagingEnabled,snapEnabled:snapEnabled,size:size,_withSpring:_withSpring,withDecay:_reactNativeReanimated.withDecay,scrollEndTranslation:scrollEndTranslation,infinite:infinite,maxPage:maxPage};_f.asString="function _f(onFinished){const{translation,scrollEndVelocity,pagingEnabled,snapEnabled,size,_withSpring,withDecay,scrollEndTranslation,infinite,maxPage}=jsThis._closure;{const origin=translation.value;const velocity=scrollEndVelocity.value;if(!pagingEnabled){if(snapEnabled){const nextPage=Math.round((origin+velocity*0.4)/size)*size;translation.value=_withSpring(nextPage,onFinished);return;}translation.value=withDecay({velocity:velocity,deceleration:0.999});return;}const direction=-(scrollEndTranslation.value>=0?1:-1);const computed=direction<0?Math.ceil:Math.floor;const page=computed(-translation.value/size);let finalPage=page+direction;if(!infinite){finalPage=Math.min(maxPage-1,Math.max(0,finalPage));}translation.value=_withSpring(-finalPage*size,onFinished);}}";_f.__workletHash=7553383763877;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (93:8)";return _f;}(),[translation,scrollEndVelocity.value,pagingEnabled,size,scrollEndTranslation.value,infinite,_withSpring,snapEnabled,maxPage]);var onFinish=_react.default.useCallback(function(){var _f=function _f(isFinished){if(isFinished){touching.value=false;onScrollEnd&&(0,_reactNativeReanimated.runOnJS)(onScrollEnd)();}};_f._closure={touching:touching,onScrollEnd:onScrollEnd,runOnJS:_reactNativeReanimated.runOnJS};_f.asString="function _f(isFinished){const{touching,onScrollEnd,runOnJS}=jsThis._closure;{if(isFinished){touching.value=false;onScrollEnd&&runOnJS(onScrollEnd)();}}}";_f.__workletHash=12308424749737;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (141:8)";return _f;}(),[onScrollEnd,touching]);var activeDecay=_react.default.useCallback(function(){var _f=function _f(){touching.value=true;translation.value=(0,_reactNativeReanimated.withDecay)({velocity:scrollEndVelocity.value},function(){var _f=function _f(isFinished){return onFinish(isFinished);};_f._closure={onFinish:onFinish};_f.asString="function _f(isFinished){const{onFinish}=jsThis._closure;{return onFinish(isFinished);}}";_f.__workletHash=12004837605207;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (156:12)";return _f;}());};_f._closure={touching:touching,translation:translation,withDecay:_reactNativeReanimated.withDecay,scrollEndVelocity:scrollEndVelocity,onFinish:onFinish};_f.asString="function _f(){const{touching,translation,withDecay,scrollEndVelocity,onFinish}=jsThis._closure;{touching.value=true;translation.value=withDecay({velocity:scrollEndVelocity.value},function(isFinished){return onFinish(isFinished);});}}";_f.__workletHash=1701548878343;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (151:42)";return _f;}(),[onFinish,scrollEndVelocity.value,touching,translation]);var resetBoundary=_react.default.useCallback(function(){var _f=function _f(){if(touching.value){return;}if(translation.value>0){if(scrollEndTranslation.value<0){activeDecay();return;}if(!infinite){translation.value=_withSpring(0);return;}}if(translation.value<-((maxPage-1)*size)){if(scrollEndTranslation.value>0){activeDecay();return;}if(!infinite){translation.value=_withSpring(-((maxPage-1)*size));return;}}};_f._closure={touching:touching,translation:translation,scrollEndTranslation:scrollEndTranslation,activeDecay:activeDecay,infinite:infinite,_withSpring:_withSpring,maxPage:maxPage,size:size};_f.asString="function _f(){const{touching,translation,scrollEndTranslation,activeDecay,infinite,_withSpring,maxPage,size}=jsThis._closure;{if(touching.value){return;}if(translation.value>0){if(scrollEndTranslation.value<0){activeDecay();return;}if(!infinite){translation.value=_withSpring(0);return;}}if(translation.value<-((maxPage-1)*size)){if(scrollEndTranslation.value>0){activeDecay();return;}if(!infinite){translation.value=_withSpring(-((maxPage-1)*size));return;}}}}";_f.__workletHash=3458376770899;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (160:44)";return _f;}(),[touching.value,translation,maxPage,size,scrollEndTranslation.value,infinite,activeDecay,_withSpring]);(0,_reactNativeReanimated.useAnimatedReaction)(function(){var _f=function _f(){return translation.value;};_f._closure={translation:translation};_f.asString="function _f(){const{translation}=jsThis._closure;{return translation.value;}}";_f.__workletHash=9829368032147;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (199:8)";return _f;}(),function(){var _f=function _f(){if(!pagingEnabled){resetBoundary();}};_f._closure={pagingEnabled:pagingEnabled,resetBoundary:resetBoundary};_f.asString="function _f(){const{pagingEnabled,resetBoundary}=jsThis._closure;{if(!pagingEnabled){resetBoundary();}}}";_f.__workletHash=10686939088248;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (200:8)";return _f;}(),[pagingEnabled,resetBoundary]);var panGestureEventHandler=(0,_reactNativeReanimated.useAnimatedGestureHandler)({onStart:function(){var _f=function _f(_,ctx){touching.value=true;ctx.validStart=true;onScrollBegin&&(0,_reactNativeReanimated.runOnJS)(onScrollBegin)();ctx.max=(maxPage-1)*size;ctx.panOffset=translation.value;};_f._closure={touching:touching,onScrollBegin:onScrollBegin,runOnJS:_reactNativeReanimated.runOnJS,maxPage:maxPage,size:size,translation:translation};_f.asString="function _f(_,ctx){const{touching,onScrollBegin,runOnJS,maxPage,size,translation}=jsThis._closure;{touching.value=true;ctx.validStart=true;onScrollBegin&&runOnJS(onScrollBegin)();ctx.max=(maxPage-1)*size;ctx.panOffset=translation.value;}}";_f.__workletHash=1789833551681;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (213:21)";return _f;}(),onActive:function(){var _f=function _f(e,ctx){if(ctx.validStart){ctx.validStart=false;(0,_reactNativeReanimated.cancelAnimation)(translation);}touching.value=true;var translationX=e.translationX,translationY=e.translationY;var panTranslation=isHorizontal.value?translationX:translationY;if(!infinite&&(translation.value>0||translation.value<-ctx.max)){var boundary=translation.value>0?0:-ctx.max;var fixed=boundary-ctx.panOffset;var dynamic=panTranslation-fixed;translation.value=boundary+dynamic*0.5;return;}translation.value=ctx.panOffset+panTranslation;};_f._closure={cancelAnimation:_reactNativeReanimated.cancelAnimation,translation:translation,touching:touching,isHorizontal:isHorizontal,infinite:infinite};_f.asString="function _f(e,ctx){const{cancelAnimation,translation,touching,isHorizontal,infinite}=jsThis._closure;{if(ctx.validStart){ctx.validStart=false;cancelAnimation(translation);}touching.value=true;const{translationX:translationX,translationY:translationY}=e;let panTranslation=isHorizontal.value?translationX:translationY;if(!infinite&&(translation.value>0||translation.value<-ctx.max)){const boundary=translation.value>0?0:-ctx.max;const fixed=boundary-ctx.panOffset;const dynamic=panTranslation-fixed;translation.value=boundary+dynamic*0.5;return;}translation.value=ctx.panOffset+panTranslation;}}";_f.__workletHash=10275621069851;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (220:22)";return _f;}(),onEnd:function(){var _f=function _f(e){var velocityX=e.velocityX,velocityY=e.velocityY,translationX=e.translationX,translationY=e.translationY;scrollEndVelocity.value=isHorizontal.value?velocityX:velocityY;scrollEndTranslation.value=isHorizontal.value?translationX:translationY;endWithSpring(onScrollEnd);if(!infinite){touching.value=false;}};_f._closure={scrollEndVelocity:scrollEndVelocity,isHorizontal:isHorizontal,scrollEndTranslation:scrollEndTranslation,endWithSpring:endWithSpring,onScrollEnd:onScrollEnd,infinite:infinite,touching:touching};_f.asString="function _f(e){const{scrollEndVelocity,isHorizontal,scrollEndTranslation,endWithSpring,onScrollEnd,infinite,touching}=jsThis._closure;{const{velocityX:velocityX,velocityY:velocityY,translationX:translationX,translationY:translationY}=e;scrollEndVelocity.value=isHorizontal.value?velocityX:velocityY;scrollEndTranslation.value=isHorizontal.value?translationX:translationY;endWithSpring(onScrollEnd);if(!infinite){touching.value=false;}}}";_f.__workletHash=8095479445863;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (244:19)";return _f;}()},[pagingEnabled,isHorizontal.value,infinite,maxPage,size,snapEnabled,onScrollBegin,onScrollEnd]);var directionStyle=_react.default.useMemo(function(){return vertical?styles.contentHorizontal:styles.contentVertical;},[vertical]);return _react.default.createElement(_reactNativeReanimated.default.View,{style:[styles.container,directionStyle,{width:'100%',height:'100%'}],onTouchStart:onTouchBegin,onTouchEnd:onTouchEnd,__self:_this,__source:{fileName:_jsxFileName,lineNumber:277,columnNumber:9}},_react.default.createElement(_reactNativeGestureHandler.PanGestureHandler,(0,_extends2.default)({},panGestureHandlerProps,{enabled:enabled,onGestureEvent:panGestureEventHandler,__self:_this,__source:{fileName:_jsxFileName,lineNumber:286,columnNumber:13}}),props.children));};var ScrollViewGesture=IScrollViewGesture;exports.ScrollViewGesture=ScrollViewGesture;var styles=_reactNative.StyleSheet.create({container:{flex:1,overflow:'hidden'},contentVertical:{flexDirection:'column'},contentHorizontal:{flexDirection:'row'}});
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.ScrollViewGesture=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _react=_interopRequireDefault(require("react"));var _reactNativeGestureHandler=require("react-native-gesture-handler");var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _constants=require("./constants");var _store=require("./store");var _dealWithAnimation=require("./utils/dealWithAnimation");var _this=this,_jsxFileName="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var IScrollViewGesture=function IScrollViewGesture(props){var _React$useContext=_react.default.useContext(_store.CTX),_React$useContext$pro=_React$useContext.props,vertical=_React$useContext$pro.vertical,data=_React$useContext$pro.data,pagingEnabled=_React$useContext$pro.pagingEnabled,snapEnabled=_React$useContext$pro.snapEnabled,panGestureHandlerProps=_React$useContext$pro.panGestureHandlerProps,infinite=_React$useContext$pro.loop,scrollAnimationDuration=_React$useContext$pro.scrollAnimationDuration,withAnimation=_React$useContext$pro.withAnimation,enabled=_React$useContext$pro.enabled;var size=props.size,translation=props.translation,testID=props.testID,_props$style=props.style,style=_props$style===void 0?{}:_props$style,onScrollBegin=props.onScrollBegin,onScrollEnd=props.onScrollEnd,onTouchBegin=props.onTouchBegin,onTouchEnd=props.onTouchEnd;var maxPage=data.length;var isHorizontal=(0,_reactNativeReanimated.useDerivedValue)(function(){var _f=function _f(){return!vertical;};_f._closure={vertical:vertical};_f.asString="function _f(){const{vertical}=jsThis._closure;{return!vertical;}}";_f.__workletHash=14495821007639;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (66:41)";return _f;}(),[vertical]);var touching=(0,_reactNativeReanimated.useSharedValue)(false);var scrollEndTranslation=(0,_reactNativeReanimated.useSharedValue)(0);var scrollEndVelocity=(0,_reactNativeReanimated.useSharedValue)(0);var _withSpring=_react.default.useCallback(function(){var _f=function _f(toValue,onFinished){var defaultWithAnimation={type:'timing',config:{duration:scrollAnimationDuration+100,easing:_constants.Easing.easeOutQuart}};return(0,_dealWithAnimation.dealWithAnimation)(withAnimation!=null?withAnimation:defaultWithAnimation)(toValue,function(){var _f=function _f(isFinished){if(isFinished){onFinished&&(0,_reactNativeReanimated.runOnJS)(onFinished)();}};_f._closure={onFinished:onFinished,runOnJS:_reactNativeReanimated.runOnJS};_f.asString="function _f(isFinished){const{onFinished,runOnJS}=jsThis._closure;{if(isFinished){onFinished&&runOnJS(onFinished)();}}}";_f.__workletHash=9122154549195;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (84:16)";return _f;}());};_f._closure={scrollAnimationDuration:scrollAnimationDuration,Easing:{easeOutQuart:_constants.Easing.easeOutQuart},dealWithAnimation:_dealWithAnimation.dealWithAnimation,withAnimation:withAnimation,runOnJS:_reactNativeReanimated.runOnJS};_f.asString="function _f(toValue,onFinished){const{scrollAnimationDuration,Easing,dealWithAnimation,withAnimation,runOnJS}=jsThis._closure;{var _withAnimation;const defaultWithAnimation={type:'timing',config:{duration:scrollAnimationDuration+100,easing:Easing.easeOutQuart}};return dealWithAnimation((_withAnimation=withAnimation)!==null&&_withAnimation!==void 0?_withAnimation:defaultWithAnimation)(toValue,function(isFinished){'worklet';if(isFinished){onFinished&&runOnJS(onFinished)();}});}}";_f.__workletHash=16303945491727;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (72:8)";return _f;}(),[scrollAnimationDuration,withAnimation]);var endWithSpring=_react.default.useCallback(function(){var _f=function _f(onFinished){var origin=translation.value;var velocity=scrollEndVelocity.value;if(!pagingEnabled){if(snapEnabled){var nextPage=Math.round((origin+velocity*0.4)/size)*size;translation.value=_withSpring(nextPage,onFinished);return;}translation.value=(0,_reactNativeReanimated.withDecay)({velocity:velocity,deceleration:0.999});return;}var direction=-(scrollEndTranslation.value>=0?1:-1);var computed=direction<0?Math.ceil:Math.floor;var page=computed(-translation.value/size);var finalPage=page+direction;if(!infinite){finalPage=Math.min(maxPage-1,Math.max(0,finalPage));}translation.value=_withSpring(-finalPage*size,onFinished);};_f._closure={translation:translation,scrollEndVelocity:scrollEndVelocity,pagingEnabled:pagingEnabled,snapEnabled:snapEnabled,size:size,_withSpring:_withSpring,withDecay:_reactNativeReanimated.withDecay,scrollEndTranslation:scrollEndTranslation,infinite:infinite,maxPage:maxPage};_f.asString="function _f(onFinished){const{translation,scrollEndVelocity,pagingEnabled,snapEnabled,size,_withSpring,withDecay,scrollEndTranslation,infinite,maxPage}=jsThis._closure;{const origin=translation.value;const velocity=scrollEndVelocity.value;if(!pagingEnabled){if(snapEnabled){const nextPage=Math.round((origin+velocity*0.4)/size)*size;translation.value=_withSpring(nextPage,onFinished);return;}translation.value=withDecay({velocity:velocity,deceleration:0.999});return;}const direction=-(scrollEndTranslation.value>=0?1:-1);const computed=direction<0?Math.ceil:Math.floor;const page=computed(-translation.value/size);let finalPage=page+direction;if(!infinite){finalPage=Math.min(maxPage-1,Math.max(0,finalPage));}translation.value=_withSpring(-finalPage*size,onFinished);}}";_f.__workletHash=7553383763877;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (96:8)";return _f;}(),[translation,scrollEndVelocity.value,pagingEnabled,size,scrollEndTranslation.value,infinite,_withSpring,snapEnabled,maxPage]);var onFinish=_react.default.useCallback(function(){var _f=function _f(isFinished){if(isFinished){touching.value=false;onScrollEnd&&(0,_reactNativeReanimated.runOnJS)(onScrollEnd)();}};_f._closure={touching:touching,onScrollEnd:onScrollEnd,runOnJS:_reactNativeReanimated.runOnJS};_f.asString="function _f(isFinished){const{touching,onScrollEnd,runOnJS}=jsThis._closure;{if(isFinished){touching.value=false;onScrollEnd&&runOnJS(onScrollEnd)();}}}";_f.__workletHash=12308424749737;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (144:8)";return _f;}(),[onScrollEnd,touching]);var activeDecay=_react.default.useCallback(function(){var _f=function _f(){touching.value=true;translation.value=(0,_reactNativeReanimated.withDecay)({velocity:scrollEndVelocity.value},function(){var _f=function _f(isFinished){return onFinish(isFinished);};_f._closure={onFinish:onFinish};_f.asString="function _f(isFinished){const{onFinish}=jsThis._closure;{return onFinish(isFinished);}}";_f.__workletHash=12004837605207;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (159:12)";return _f;}());};_f._closure={touching:touching,translation:translation,withDecay:_reactNativeReanimated.withDecay,scrollEndVelocity:scrollEndVelocity,onFinish:onFinish};_f.asString="function _f(){const{touching,translation,withDecay,scrollEndVelocity,onFinish}=jsThis._closure;{touching.value=true;translation.value=withDecay({velocity:scrollEndVelocity.value},function(isFinished){return onFinish(isFinished);});}}";_f.__workletHash=1701548878343;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (154:42)";return _f;}(),[onFinish,scrollEndVelocity.value,touching,translation]);var resetBoundary=_react.default.useCallback(function(){var _f=function _f(){if(touching.value){return;}if(translation.value>0){if(scrollEndTranslation.value<0){activeDecay();return;}if(!infinite){translation.value=_withSpring(0);return;}}if(translation.value<-((maxPage-1)*size)){if(scrollEndTranslation.value>0){activeDecay();return;}if(!infinite){translation.value=_withSpring(-((maxPage-1)*size));return;}}};_f._closure={touching:touching,translation:translation,scrollEndTranslation:scrollEndTranslation,activeDecay:activeDecay,infinite:infinite,_withSpring:_withSpring,maxPage:maxPage,size:size};_f.asString="function _f(){const{touching,translation,scrollEndTranslation,activeDecay,infinite,_withSpring,maxPage,size}=jsThis._closure;{if(touching.value){return;}if(translation.value>0){if(scrollEndTranslation.value<0){activeDecay();return;}if(!infinite){translation.value=_withSpring(0);return;}}if(translation.value<-((maxPage-1)*size)){if(scrollEndTranslation.value>0){activeDecay();return;}if(!infinite){translation.value=_withSpring(-((maxPage-1)*size));return;}}}}";_f.__workletHash=3458376770899;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (163:44)";return _f;}(),[touching.value,translation,maxPage,size,scrollEndTranslation.value,infinite,activeDecay,_withSpring]);(0,_reactNativeReanimated.useAnimatedReaction)(function(){var _f=function _f(){return translation.value;};_f._closure={translation:translation};_f.asString="function _f(){const{translation}=jsThis._closure;{return translation.value;}}";_f.__workletHash=9829368032147;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (202:8)";return _f;}(),function(){var _f=function _f(){if(!pagingEnabled){resetBoundary();}};_f._closure={pagingEnabled:pagingEnabled,resetBoundary:resetBoundary};_f.asString="function _f(){const{pagingEnabled,resetBoundary}=jsThis._closure;{if(!pagingEnabled){resetBoundary();}}}";_f.__workletHash=10686939088248;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (203:8)";return _f;}(),[pagingEnabled,resetBoundary]);var panGestureEventHandler=(0,_reactNativeReanimated.useAnimatedGestureHandler)({onStart:function(){var _f=function _f(_,ctx){touching.value=true;ctx.validStart=true;onScrollBegin&&(0,_reactNativeReanimated.runOnJS)(onScrollBegin)();ctx.max=(maxPage-1)*size;ctx.panOffset=translation.value;};_f._closure={touching:touching,onScrollBegin:onScrollBegin,runOnJS:_reactNativeReanimated.runOnJS,maxPage:maxPage,size:size,translation:translation};_f.asString="function _f(_,ctx){const{touching,onScrollBegin,runOnJS,maxPage,size,translation}=jsThis._closure;{touching.value=true;ctx.validStart=true;onScrollBegin&&runOnJS(onScrollBegin)();ctx.max=(maxPage-1)*size;ctx.panOffset=translation.value;}}";_f.__workletHash=1789833551681;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (216:21)";return _f;}(),onActive:function(){var _f=function _f(e,ctx){if(ctx.validStart){ctx.validStart=false;(0,_reactNativeReanimated.cancelAnimation)(translation);}touching.value=true;var translationX=e.translationX,translationY=e.translationY;var panTranslation=isHorizontal.value?translationX:translationY;if(!infinite&&(translation.value>0||translation.value<-ctx.max)){var boundary=translation.value>0?0:-ctx.max;var fixed=boundary-ctx.panOffset;var dynamic=panTranslation-fixed;translation.value=boundary+dynamic*0.5;return;}translation.value=ctx.panOffset+panTranslation;};_f._closure={cancelAnimation:_reactNativeReanimated.cancelAnimation,translation:translation,touching:touching,isHorizontal:isHorizontal,infinite:infinite};_f.asString="function _f(e,ctx){const{cancelAnimation,translation,touching,isHorizontal,infinite}=jsThis._closure;{if(ctx.validStart){ctx.validStart=false;cancelAnimation(translation);}touching.value=true;const{translationX:translationX,translationY:translationY}=e;let panTranslation=isHorizontal.value?translationX:translationY;if(!infinite&&(translation.value>0||translation.value<-ctx.max)){const boundary=translation.value>0?0:-ctx.max;const fixed=boundary-ctx.panOffset;const dynamic=panTranslation-fixed;translation.value=boundary+dynamic*0.5;return;}translation.value=ctx.panOffset+panTranslation;}}";_f.__workletHash=10275621069851;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (223:22)";return _f;}(),onEnd:function(){var _f=function _f(e){var velocityX=e.velocityX,velocityY=e.velocityY,translationX=e.translationX,translationY=e.translationY;scrollEndVelocity.value=isHorizontal.value?velocityX:velocityY;scrollEndTranslation.value=isHorizontal.value?translationX:translationY;endWithSpring(onScrollEnd);if(!infinite){touching.value=false;}};_f._closure={scrollEndVelocity:scrollEndVelocity,isHorizontal:isHorizontal,scrollEndTranslation:scrollEndTranslation,endWithSpring:endWithSpring,onScrollEnd:onScrollEnd,infinite:infinite,touching:touching};_f.asString="function _f(e){const{scrollEndVelocity,isHorizontal,scrollEndTranslation,endWithSpring,onScrollEnd,infinite,touching}=jsThis._closure;{const{velocityX:velocityX,velocityY:velocityY,translationX:translationX,translationY:translationY}=e;scrollEndVelocity.value=isHorizontal.value?velocityX:velocityY;scrollEndTranslation.value=isHorizontal.value?translationX:translationY;endWithSpring(onScrollEnd);if(!infinite){touching.value=false;}}}";_f.__workletHash=8095479445863;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (247:19)";return _f;}()},[pagingEnabled,isHorizontal.value,infinite,maxPage,size,snapEnabled,onScrollBegin,onScrollEnd]);return _react.default.createElement(_reactNativeGestureHandler.PanGestureHandler,(0,_extends2.default)({},panGestureHandlerProps,{enabled:enabled,onGestureEvent:panGestureEventHandler,__self:_this,__source:{fileName:_jsxFileName,lineNumber:276,columnNumber:9}}),_react.default.createElement(_reactNativeReanimated.default.View,{testID:testID,style:style,onTouchStart:onTouchBegin,onTouchEnd:onTouchEnd,__self:_this,__source:{fileName:_jsxFileName,lineNumber:281,columnNumber:13}},props.children));};var ScrollViewGesture=IScrollViewGesture;exports.ScrollViewGesture=ScrollViewGesture;
2
2
  //# sourceMappingURL=ScrollViewGesture.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["IScrollViewGesture","props","React","useContext","CTX","vertical","data","pagingEnabled","snapEnabled","panGestureHandlerProps","infinite","loop","scrollAnimationDuration","withAnimation","enabled","translation","size","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","length","isHorizontal","touching","scrollEndTranslation","scrollEndVelocity","_withSpring","useCallback","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","Easing","easeOutQuart","isFinished","runOnJS","dealWithAnimation","endWithSpring","origin","value","velocity","nextPage","Math","round","deceleration","direction","computed","ceil","floor","page","finalPage","min","max","withDecay","onFinish","activeDecay","resetBoundary","panGestureEventHandler","onStart","_","ctx","validStart","panOffset","onActive","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","cancelAnimation","onEnd","velocityX","velocityY","directionStyle","useMemo","styles","contentHorizontal","contentVertical","container","width","height","children","ScrollViewGesture","StyleSheet","create","flex","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, ViewStyle } from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from 'react-native-reanimated';\nimport { Easing } from './constants';\nimport { CTX } from './store';\nimport type { WithTimingAnimation } from './types';\nimport { dealWithAnimation } from './utils/dealWithAnimation';\n\ntype GestureContext = {\n validStart: boolean;\n panOffset: number;\n max: number;\n};\n\ninterface Props {\n size: number;\n infinite?: boolean;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n onTouchBegin?: () => void;\n onTouchEnd?: () => void;\n style?: StyleProp<ViewStyle>;\n translation: Animated.SharedValue<number>;\n}\n\nconst IScrollViewGesture: React.FC<Props> = (props) => {\n const {\n props: {\n vertical,\n data,\n pagingEnabled,\n snapEnabled,\n panGestureHandlerProps,\n loop: infinite,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n },\n } = React.useContext(CTX);\n\n const {\n translation,\n size,\n onScrollBegin,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = data.length;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const touching = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n\n const _withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n onFinished && runOnJS(onFinished)();\n }\n }\n );\n },\n [scrollAnimationDuration, withAnimation]\n );\n\n const endWithSpring = React.useCallback(\n (onFinished?: () => void) => {\n 'worklet';\n const origin = translation.value;\n const velocity = scrollEndVelocity.value;\n if (!pagingEnabled) {\n /**\n * If enabled, releasing the touch will scroll to the nearest item.\n * valid when pagingEnabled=false\n */\n if (snapEnabled) {\n const nextPage =\n Math.round((origin + velocity * 0.4) / size) * size;\n\n translation.value = _withSpring(nextPage, onFinished);\n return;\n }\n translation.value = withDecay({\n velocity,\n deceleration: 0.999,\n });\n return;\n }\n\n const direction = -(scrollEndTranslation.value >= 0 ? 1 : -1);\n const computed = direction < 0 ? Math.ceil : Math.floor;\n const page = computed(-translation.value / size);\n let finalPage = page + direction;\n\n if (!infinite) {\n finalPage = Math.min(maxPage - 1, Math.max(0, finalPage));\n }\n\n translation.value = _withSpring(-finalPage * size, onFinished);\n },\n [\n translation,\n scrollEndVelocity.value,\n pagingEnabled,\n size,\n scrollEndTranslation.value,\n infinite,\n _withSpring,\n snapEnabled,\n maxPage,\n ]\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching]\n );\n\n const activeDecay = React.useCallback(() => {\n 'worklet';\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n (isFinished) => onFinish(isFinished as boolean)\n );\n }, [onFinish, scrollEndVelocity.value, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n 'worklet';\n if (touching.value) {\n return;\n }\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(-((maxPage - 1) * size));\n return;\n }\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n infinite,\n activeDecay,\n _withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled) {\n resetBoundary();\n }\n },\n [pagingEnabled, resetBoundary]\n );\n\n const panGestureEventHandler = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n GestureContext\n >(\n {\n onStart: (_, ctx) => {\n touching.value = true;\n ctx.validStart = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n ctx.max = (maxPage - 1) * size;\n ctx.panOffset = translation.value;\n },\n onActive: (e, ctx) => {\n if (ctx.validStart) {\n ctx.validStart = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (\n !infinite &&\n (translation.value > 0 || translation.value < -ctx.max)\n ) {\n const boundary = translation.value > 0 ? 0 : -ctx.max;\n const fixed = boundary - ctx.panOffset;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n\n translation.value = ctx.panOffset + panTranslation;\n },\n onEnd: (e) => {\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n scrollEndTranslation.value = isHorizontal.value\n ? translationX\n : translationY;\n\n endWithSpring(onScrollEnd);\n\n if (!infinite) {\n touching.value = false;\n }\n },\n },\n [\n pagingEnabled,\n isHorizontal.value,\n infinite,\n maxPage,\n size,\n snapEnabled,\n onScrollBegin,\n onScrollEnd,\n ]\n );\n\n const directionStyle = React.useMemo(() => {\n return vertical ? styles.contentHorizontal : styles.contentVertical;\n }, [vertical]);\n\n return (\n <Animated.View\n style={[\n styles.container,\n directionStyle,\n { width: '100%', height: '100%' },\n ]}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n <PanGestureHandler\n {...panGestureHandlerProps}\n enabled={enabled}\n onGestureEvent={panGestureEventHandler}\n >\n {props.children}\n </PanGestureHandler>\n </Animated.View>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n overflow: 'hidden',\n },\n contentVertical: {\n flexDirection: 'column',\n },\n contentHorizontal: {\n flexDirection: 'row',\n },\n});\n"]}
1
+ {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["IScrollViewGesture","props","React","useContext","CTX","vertical","data","pagingEnabled","snapEnabled","panGestureHandlerProps","infinite","loop","scrollAnimationDuration","withAnimation","enabled","size","translation","testID","style","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","length","isHorizontal","touching","scrollEndTranslation","scrollEndVelocity","_withSpring","useCallback","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","Easing","easeOutQuart","isFinished","runOnJS","dealWithAnimation","endWithSpring","origin","value","velocity","nextPage","Math","round","deceleration","direction","computed","ceil","floor","page","finalPage","min","max","withDecay","onFinish","activeDecay","resetBoundary","panGestureEventHandler","onStart","_","ctx","validStart","panOffset","onActive","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","cancelAnimation","onEnd","velocityX","velocityY","children","ScrollViewGesture"],"mappings":"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","sourcesContent":["import React from 'react';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from 'react-native-reanimated';\nimport { Easing } from './constants';\nimport { CTX } from './store';\nimport type { WithTimingAnimation } from './types';\nimport { dealWithAnimation } from './utils/dealWithAnimation';\n\ntype GestureContext = {\n validStart: boolean;\n panOffset: number;\n max: number;\n};\n\ninterface Props {\n size: number;\n infinite?: boolean;\n testID?: string;\n style?: StyleProp<ViewStyle>;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n onTouchBegin?: () => void;\n onTouchEnd?: () => void;\n translation: Animated.SharedValue<number>;\n}\n\nconst IScrollViewGesture: React.FC<Props> = (props) => {\n const {\n props: {\n vertical,\n data,\n pagingEnabled,\n snapEnabled,\n panGestureHandlerProps,\n loop: infinite,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n },\n } = React.useContext(CTX);\n\n const {\n size,\n translation,\n testID,\n style = {},\n onScrollBegin,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = data.length;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const touching = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n\n const _withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n onFinished && runOnJS(onFinished)();\n }\n }\n );\n },\n [scrollAnimationDuration, withAnimation]\n );\n\n const endWithSpring = React.useCallback(\n (onFinished?: () => void) => {\n 'worklet';\n const origin = translation.value;\n const velocity = scrollEndVelocity.value;\n if (!pagingEnabled) {\n /**\n * If enabled, releasing the touch will scroll to the nearest item.\n * valid when pagingEnabled=false\n */\n if (snapEnabled) {\n const nextPage =\n Math.round((origin + velocity * 0.4) / size) * size;\n\n translation.value = _withSpring(nextPage, onFinished);\n return;\n }\n translation.value = withDecay({\n velocity,\n deceleration: 0.999,\n });\n return;\n }\n\n const direction = -(scrollEndTranslation.value >= 0 ? 1 : -1);\n const computed = direction < 0 ? Math.ceil : Math.floor;\n const page = computed(-translation.value / size);\n let finalPage = page + direction;\n\n if (!infinite) {\n finalPage = Math.min(maxPage - 1, Math.max(0, finalPage));\n }\n\n translation.value = _withSpring(-finalPage * size, onFinished);\n },\n [\n translation,\n scrollEndVelocity.value,\n pagingEnabled,\n size,\n scrollEndTranslation.value,\n infinite,\n _withSpring,\n snapEnabled,\n maxPage,\n ]\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching]\n );\n\n const activeDecay = React.useCallback(() => {\n 'worklet';\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n (isFinished) => onFinish(isFinished as boolean)\n );\n }, [onFinish, scrollEndVelocity.value, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n 'worklet';\n if (touching.value) {\n return;\n }\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(-((maxPage - 1) * size));\n return;\n }\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n infinite,\n activeDecay,\n _withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled) {\n resetBoundary();\n }\n },\n [pagingEnabled, resetBoundary]\n );\n\n const panGestureEventHandler = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n GestureContext\n >(\n {\n onStart: (_, ctx) => {\n touching.value = true;\n ctx.validStart = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n ctx.max = (maxPage - 1) * size;\n ctx.panOffset = translation.value;\n },\n onActive: (e, ctx) => {\n if (ctx.validStart) {\n ctx.validStart = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (\n !infinite &&\n (translation.value > 0 || translation.value < -ctx.max)\n ) {\n const boundary = translation.value > 0 ? 0 : -ctx.max;\n const fixed = boundary - ctx.panOffset;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n\n translation.value = ctx.panOffset + panTranslation;\n },\n onEnd: (e) => {\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n scrollEndTranslation.value = isHorizontal.value\n ? translationX\n : translationY;\n\n endWithSpring(onScrollEnd);\n\n if (!infinite) {\n touching.value = false;\n }\n },\n },\n [\n pagingEnabled,\n isHorizontal.value,\n infinite,\n maxPage,\n size,\n snapEnabled,\n onScrollBegin,\n onScrollEnd,\n ]\n );\n\n return (\n <PanGestureHandler\n {...panGestureHandlerProps}\n enabled={enabled}\n onGestureEvent={panGestureEventHandler}\n >\n <Animated.View\n testID={testID}\n style={style}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n {props.children}\n </Animated.View>\n </PanGestureHandler>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["useCarouselController.tsx"],"names":["useCarouselController","options","size","data","loop","handlerOffsetX","withAnimation","defaultIndex","duration","autoFillData","dataInfo","React","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetXValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","convertToSharedIndex","runOnJS","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","Easing","easeOutQuart","dealWithAnimation","next","opts","count","animated","nextPage","prev","prevPage","to","isPositiveZero","Object","is","isNegativeZero","direction","sign","offset","totalSize","isCloseToNextLoop","finalOffset","floor","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '../utils/dealWithAnimation';\nimport { convertToSharedIndex } from '../utils/computedWithAutoFillData';\nimport { round } from '../utils/log';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n data: TCarouselProps['data'];\n autoFillData: TCarouselProps['autoFillData'];\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n duration?: number;\n defaultIndex?: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n data,\n loop,\n handlerOffsetX,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n }),\n [data]\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % dataInfo.length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0)\n );\n }, [handlerOffsetX, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetXValue = handlerOffsetX.value;\n const toInt = round(handlerOffsetXValue / size) % dataInfo.length;\n const isPositive = handlerOffsetXValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffsetX,\n ]\n );\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffsetX.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n // direction -> 1 | -1\n const isPositiveZero = Object.is(handlerOffsetX.value, +0);\n const isNegativeZero = Object.is(handlerOffsetX.value, -0);\n const direction = isPositiveZero\n ? 1\n : isNegativeZero\n ? -1\n : Math.sign(handlerOffsetX.value); \n \n // target offset\n const offset = i * size * direction;\n // page width size * page count\n const totalSize = dataInfo.length * size;\n\n let isCloseToNextLoop = false;\n\n if (loop) {\n isCloseToNextLoop =\n Math.abs(handlerOffsetX.value % totalSize) / totalSize >=\n 0.5;\n }\n\n const finalOffset =\n (Math.floor(Math.abs(handlerOffsetX.value / totalSize)) +\n (isCloseToNextLoop ? 1 : 0)) *\n totalSize *\n direction +\n offset;\n\n if (animated) {\n index.value = i;\n handlerOffsetX.value = scrollWithTiming(\n finalOffset,\n onFinished\n );\n } else {\n handlerOffsetX.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n dataInfo.length,\n loop,\n scrollWithTiming,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n if (typeof i === 'number' && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count) {\n return;\n }\n\n const n = Math.round(count);\n\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next, to]\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
1
+ {"version":3,"sources":["useCarouselController.tsx"],"names":["useCarouselController","options","size","data","loop","handlerOffsetX","withAnimation","defaultIndex","duration","autoFillData","dataInfo","React","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetXValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","convertToSharedIndex","runOnJS","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","Easing","easeOutQuart","dealWithAnimation","next","opts","count","animated","nextPage","prev","prevPage","to","isPositiveZero","Object","is","isNegativeZero","direction","sign","offset","totalSize","isCloseToNextLoop","finalOffset","floor","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '../utils/dealWithAnimation';\nimport { convertToSharedIndex } from '../utils/computedWithAutoFillData';\nimport { round } from '../utils/log';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n data: TCarouselProps['data'];\n autoFillData: TCarouselProps['autoFillData'];\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n duration?: number;\n defaultIndex?: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n data,\n loop,\n handlerOffsetX,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n }),\n [data]\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % dataInfo.length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0)\n );\n }, [handlerOffsetX, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetXValue = handlerOffsetX.value;\n const toInt = round(handlerOffsetXValue / size) % dataInfo.length;\n const isPositive = handlerOffsetXValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffsetX,\n ]\n );\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffsetX.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n // direction -> 1 | -1\n const isPositiveZero = Object.is(handlerOffsetX.value, +0);\n const isNegativeZero = Object.is(handlerOffsetX.value, -0);\n const direction = isPositiveZero\n ? 1\n : isNegativeZero\n ? -1\n : Math.sign(handlerOffsetX.value);\n\n // target offset\n const offset = i * size * direction;\n // page width size * page count\n const totalSize = dataInfo.length * size;\n\n let isCloseToNextLoop = false;\n\n if (loop) {\n isCloseToNextLoop =\n Math.abs(handlerOffsetX.value % totalSize) / totalSize >=\n 0.5;\n }\n\n const finalOffset =\n (Math.floor(Math.abs(handlerOffsetX.value / totalSize)) +\n (isCloseToNextLoop ? 1 : 0)) *\n totalSize *\n direction +\n offset;\n\n if (animated) {\n index.value = i;\n handlerOffsetX.value = scrollWithTiming(\n finalOffset,\n onFinished\n );\n } else {\n handlerOffsetX.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n dataInfo.length,\n loop,\n scrollWithTiming,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n if (typeof i === 'number' && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count) {\n return;\n }\n\n const n = Math.round(count);\n\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next, to]\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  import React from 'react';
2
- import Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';
2
+ import { runOnJS, useDerivedValue } from 'react-native-reanimated';
3
3
  import { useCarouselController } from './hooks/useCarouselController';
4
4
  import { useAutoPlay } from './hooks/useAutoPlay';
5
5
  import { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';
6
6
  import { ScrollViewGesture } from './ScrollViewGesture';
7
7
  import { useVisibleRanges } from './hooks/useVisibleRanges';
8
- import { StyleSheet, View } from 'react-native';
8
+ import { StyleSheet } from 'react-native';
9
9
  import { BaseLayout } from './layouts/BaseLayout';
10
10
  import { useLayoutConfig } from './hooks/useLayoutConfig';
11
11
  import { useInitProps } from './hooks/useInitProps';
@@ -168,26 +168,20 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
168
168
  props,
169
169
  common: commonVariables
170
170
  }
171
- }, /*#__PURE__*/React.createElement(View, {
172
- style: [styles.container, {
173
- width: width || '100%',
174
- height: height || '100%'
175
- }, style],
176
- testID: testID
177
171
  }, /*#__PURE__*/React.createElement(ScrollViewGesture, {
172
+ key: mode,
178
173
  size: size,
179
174
  translation: handlerOffsetX,
175
+ style: [styles.container, {
176
+ width: width || '100%',
177
+ height: height || '100%'
178
+ }, style, vertical ? styles.itemsVertical : styles.itemsHorizontal],
179
+ testID: testID,
180
180
  onScrollBegin: scrollViewGestureOnScrollBegin,
181
181
  onScrollEnd: scrollViewGestureOnScrollEnd,
182
182
  onTouchBegin: scrollViewGestureOnTouchBegin,
183
183
  onTouchEnd: scrollViewGestureOnTouchEnd
184
- }, /*#__PURE__*/React.createElement(Animated.View, {
185
- key: mode,
186
- style: [styles.container, {
187
- width: width || '100%',
188
- height: height || '100%'
189
- }, style, vertical ? styles.itemsVertical : styles.itemsHorizontal]
190
- }, data.map(renderLayout)))));
184
+ }, data.map(renderLayout)));
191
185
  });
192
186
  export default Carousel;
193
187
  const styles = StyleSheet.create({
@@ -1 +1 @@
1
- {"version":3,"sources":["Carousel.tsx"],"names":["React","Animated","runOnJS","useDerivedValue","useCarouselController","useAutoPlay","usePropsErrorBoundary","ScrollViewGesture","useVisibleRanges","StyleSheet","View","BaseLayout","useLayoutConfig","useInitProps","CTX","useCommonVariables","useOnProgressChange","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","testID","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffsetX","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","i","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React 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 { 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';\nimport { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n data,\n autoFillData,\n handlerOffsetX,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const { next, prev, scrollTo, getSharedIndex, getCurrentIndex } =\n carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n const realIndex = computedRealIndexWithAutoFillData({\n index: _sharedIndex,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n if (onSnapToItem) {\n onSnapToItem(realIndex);\n }\n if (onScrollEnd) {\n onScrollEnd(realIndex);\n }\n }, [\n loop,\n autoFillData,\n rawData.length,\n getSharedIndex,\n onSnapToItem,\n onScrollEnd,\n ]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n scrollTo,\n }),\n [getCurrentIndex, next, prev, 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({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\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 loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\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 testID={testID}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\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);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\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","runOnJS","useDerivedValue","useCarouselController","useAutoPlay","usePropsErrorBoundary","ScrollViewGesture","useVisibleRanges","StyleSheet","BaseLayout","useLayoutConfig","useInitProps","CTX","useCommonVariables","useOnProgressChange","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","testID","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffsetX","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","i","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { 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 } from 'react-native';\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';\nimport { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n data,\n autoFillData,\n handlerOffsetX,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const { next, prev, scrollTo, getSharedIndex, getCurrentIndex } =\n carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n const realIndex = computedRealIndexWithAutoFillData({\n index: _sharedIndex,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n if (onSnapToItem) {\n onSnapToItem(realIndex);\n }\n if (onScrollEnd) {\n onScrollEnd(realIndex);\n }\n }, [\n loop,\n autoFillData,\n rawData.length,\n getSharedIndex,\n onSnapToItem,\n onScrollEnd,\n ]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n scrollTo,\n }),\n [getCurrentIndex, next, prev, 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({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\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 loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <ScrollViewGesture\n key={mode}\n size={size}\n translation={handlerOffsetX}\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 testID={testID}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n {data.map(renderLayout)}\n </ScrollViewGesture>\n </CTX.Provider>\n );\n }\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\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,7 +1,6 @@
1
1
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
3
  import React from 'react';
4
- import { StyleSheet } from 'react-native';
5
4
  import { PanGestureHandler } from 'react-native-gesture-handler';
6
5
  import Animated, { cancelAnimation, runOnJS, useAnimatedGestureHandler, useAnimatedReaction, useDerivedValue, useSharedValue, withDecay } from 'react-native-reanimated';
7
6
  import { Easing } from './constants';
@@ -23,8 +22,10 @@ const IScrollViewGesture = props => {
23
22
  }
24
23
  } = React.useContext(CTX);
25
24
  const {
26
- translation,
27
25
  size,
26
+ translation,
27
+ testID,
28
+ style = {},
28
29
  onScrollBegin,
29
30
  onScrollEnd,
30
31
  onTouchBegin,
@@ -189,33 +190,16 @@ const IScrollViewGesture = props => {
189
190
  }
190
191
  }
191
192
  }, [pagingEnabled, isHorizontal.value, infinite, maxPage, size, snapEnabled, onScrollBegin, onScrollEnd]);
192
- const directionStyle = React.useMemo(() => {
193
- return vertical ? styles.contentHorizontal : styles.contentVertical;
194
- }, [vertical]);
195
- return /*#__PURE__*/React.createElement(Animated.View, {
196
- style: [styles.container, directionStyle, {
197
- width: '100%',
198
- height: '100%'
199
- }],
200
- onTouchStart: onTouchBegin,
201
- onTouchEnd: onTouchEnd
202
- }, /*#__PURE__*/React.createElement(PanGestureHandler, _extends({}, panGestureHandlerProps, {
193
+ return /*#__PURE__*/React.createElement(PanGestureHandler, _extends({}, panGestureHandlerProps, {
203
194
  enabled: enabled,
204
195
  onGestureEvent: panGestureEventHandler
205
- }), props.children));
196
+ }), /*#__PURE__*/React.createElement(Animated.View, {
197
+ testID: testID,
198
+ style: style,
199
+ onTouchStart: onTouchBegin,
200
+ onTouchEnd: onTouchEnd
201
+ }, props.children));
206
202
  };
207
203
 
208
204
  export const ScrollViewGesture = IScrollViewGesture;
209
- const styles = StyleSheet.create({
210
- container: {
211
- flex: 1,
212
- overflow: 'hidden'
213
- },
214
- contentVertical: {
215
- flexDirection: 'column'
216
- },
217
- contentHorizontal: {
218
- flexDirection: 'row'
219
- }
220
- });
221
205
  //# sourceMappingURL=ScrollViewGesture.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["React","StyleSheet","PanGestureHandler","Animated","cancelAnimation","runOnJS","useAnimatedGestureHandler","useAnimatedReaction","useDerivedValue","useSharedValue","withDecay","Easing","CTX","dealWithAnimation","IScrollViewGesture","props","vertical","data","pagingEnabled","snapEnabled","panGestureHandlerProps","loop","infinite","scrollAnimationDuration","withAnimation","enabled","useContext","translation","size","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","length","isHorizontal","touching","scrollEndTranslation","scrollEndVelocity","_withSpring","useCallback","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","easeOutQuart","isFinished","endWithSpring","origin","value","velocity","nextPage","Math","round","deceleration","direction","computed","ceil","floor","page","finalPage","min","max","onFinish","activeDecay","resetBoundary","panGestureEventHandler","onStart","_","ctx","validStart","panOffset","onActive","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","onEnd","velocityX","velocityY","directionStyle","useMemo","styles","contentHorizontal","contentVertical","container","width","height","children","ScrollViewGesture","create","flex","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, ViewStyle } from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from 'react-native-reanimated';\nimport { Easing } from './constants';\nimport { CTX } from './store';\nimport type { WithTimingAnimation } from './types';\nimport { dealWithAnimation } from './utils/dealWithAnimation';\n\ntype GestureContext = {\n validStart: boolean;\n panOffset: number;\n max: number;\n};\n\ninterface Props {\n size: number;\n infinite?: boolean;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n onTouchBegin?: () => void;\n onTouchEnd?: () => void;\n style?: StyleProp<ViewStyle>;\n translation: Animated.SharedValue<number>;\n}\n\nconst IScrollViewGesture: React.FC<Props> = (props) => {\n const {\n props: {\n vertical,\n data,\n pagingEnabled,\n snapEnabled,\n panGestureHandlerProps,\n loop: infinite,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n },\n } = React.useContext(CTX);\n\n const {\n translation,\n size,\n onScrollBegin,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = data.length;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const touching = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n\n const _withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n onFinished && runOnJS(onFinished)();\n }\n }\n );\n },\n [scrollAnimationDuration, withAnimation]\n );\n\n const endWithSpring = React.useCallback(\n (onFinished?: () => void) => {\n 'worklet';\n const origin = translation.value;\n const velocity = scrollEndVelocity.value;\n if (!pagingEnabled) {\n /**\n * If enabled, releasing the touch will scroll to the nearest item.\n * valid when pagingEnabled=false\n */\n if (snapEnabled) {\n const nextPage =\n Math.round((origin + velocity * 0.4) / size) * size;\n\n translation.value = _withSpring(nextPage, onFinished);\n return;\n }\n translation.value = withDecay({\n velocity,\n deceleration: 0.999,\n });\n return;\n }\n\n const direction = -(scrollEndTranslation.value >= 0 ? 1 : -1);\n const computed = direction < 0 ? Math.ceil : Math.floor;\n const page = computed(-translation.value / size);\n let finalPage = page + direction;\n\n if (!infinite) {\n finalPage = Math.min(maxPage - 1, Math.max(0, finalPage));\n }\n\n translation.value = _withSpring(-finalPage * size, onFinished);\n },\n [\n translation,\n scrollEndVelocity.value,\n pagingEnabled,\n size,\n scrollEndTranslation.value,\n infinite,\n _withSpring,\n snapEnabled,\n maxPage,\n ]\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching]\n );\n\n const activeDecay = React.useCallback(() => {\n 'worklet';\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n (isFinished) => onFinish(isFinished as boolean)\n );\n }, [onFinish, scrollEndVelocity.value, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n 'worklet';\n if (touching.value) {\n return;\n }\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(-((maxPage - 1) * size));\n return;\n }\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n infinite,\n activeDecay,\n _withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled) {\n resetBoundary();\n }\n },\n [pagingEnabled, resetBoundary]\n );\n\n const panGestureEventHandler = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n GestureContext\n >(\n {\n onStart: (_, ctx) => {\n touching.value = true;\n ctx.validStart = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n ctx.max = (maxPage - 1) * size;\n ctx.panOffset = translation.value;\n },\n onActive: (e, ctx) => {\n if (ctx.validStart) {\n ctx.validStart = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (\n !infinite &&\n (translation.value > 0 || translation.value < -ctx.max)\n ) {\n const boundary = translation.value > 0 ? 0 : -ctx.max;\n const fixed = boundary - ctx.panOffset;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n\n translation.value = ctx.panOffset + panTranslation;\n },\n onEnd: (e) => {\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n scrollEndTranslation.value = isHorizontal.value\n ? translationX\n : translationY;\n\n endWithSpring(onScrollEnd);\n\n if (!infinite) {\n touching.value = false;\n }\n },\n },\n [\n pagingEnabled,\n isHorizontal.value,\n infinite,\n maxPage,\n size,\n snapEnabled,\n onScrollBegin,\n onScrollEnd,\n ]\n );\n\n const directionStyle = React.useMemo(() => {\n return vertical ? styles.contentHorizontal : styles.contentVertical;\n }, [vertical]);\n\n return (\n <Animated.View\n style={[\n styles.container,\n directionStyle,\n { width: '100%', height: '100%' },\n ]}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n <PanGestureHandler\n {...panGestureHandlerProps}\n enabled={enabled}\n onGestureEvent={panGestureEventHandler}\n >\n {props.children}\n </PanGestureHandler>\n </Animated.View>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n overflow: 'hidden',\n },\n contentVertical: {\n flexDirection: 'column',\n },\n contentHorizontal: {\n flexDirection: 'row',\n },\n});\n"]}
1
+ {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["React","PanGestureHandler","Animated","cancelAnimation","runOnJS","useAnimatedGestureHandler","useAnimatedReaction","useDerivedValue","useSharedValue","withDecay","Easing","CTX","dealWithAnimation","IScrollViewGesture","props","vertical","data","pagingEnabled","snapEnabled","panGestureHandlerProps","loop","infinite","scrollAnimationDuration","withAnimation","enabled","useContext","size","translation","testID","style","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","length","isHorizontal","touching","scrollEndTranslation","scrollEndVelocity","_withSpring","useCallback","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","easeOutQuart","isFinished","endWithSpring","origin","value","velocity","nextPage","Math","round","deceleration","direction","computed","ceil","floor","page","finalPage","min","max","onFinish","activeDecay","resetBoundary","panGestureEventHandler","onStart","_","ctx","validStart","panOffset","onActive","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","onEnd","velocityX","velocityY","children","ScrollViewGesture"],"mappings":"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","sourcesContent":["import React from 'react';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from 'react-native-reanimated';\nimport { Easing } from './constants';\nimport { CTX } from './store';\nimport type { WithTimingAnimation } from './types';\nimport { dealWithAnimation } from './utils/dealWithAnimation';\n\ntype GestureContext = {\n validStart: boolean;\n panOffset: number;\n max: number;\n};\n\ninterface Props {\n size: number;\n infinite?: boolean;\n testID?: string;\n style?: StyleProp<ViewStyle>;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n onTouchBegin?: () => void;\n onTouchEnd?: () => void;\n translation: Animated.SharedValue<number>;\n}\n\nconst IScrollViewGesture: React.FC<Props> = (props) => {\n const {\n props: {\n vertical,\n data,\n pagingEnabled,\n snapEnabled,\n panGestureHandlerProps,\n loop: infinite,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n },\n } = React.useContext(CTX);\n\n const {\n size,\n translation,\n testID,\n style = {},\n onScrollBegin,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = data.length;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const touching = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n\n const _withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n onFinished && runOnJS(onFinished)();\n }\n }\n );\n },\n [scrollAnimationDuration, withAnimation]\n );\n\n const endWithSpring = React.useCallback(\n (onFinished?: () => void) => {\n 'worklet';\n const origin = translation.value;\n const velocity = scrollEndVelocity.value;\n if (!pagingEnabled) {\n /**\n * If enabled, releasing the touch will scroll to the nearest item.\n * valid when pagingEnabled=false\n */\n if (snapEnabled) {\n const nextPage =\n Math.round((origin + velocity * 0.4) / size) * size;\n\n translation.value = _withSpring(nextPage, onFinished);\n return;\n }\n translation.value = withDecay({\n velocity,\n deceleration: 0.999,\n });\n return;\n }\n\n const direction = -(scrollEndTranslation.value >= 0 ? 1 : -1);\n const computed = direction < 0 ? Math.ceil : Math.floor;\n const page = computed(-translation.value / size);\n let finalPage = page + direction;\n\n if (!infinite) {\n finalPage = Math.min(maxPage - 1, Math.max(0, finalPage));\n }\n\n translation.value = _withSpring(-finalPage * size, onFinished);\n },\n [\n translation,\n scrollEndVelocity.value,\n pagingEnabled,\n size,\n scrollEndTranslation.value,\n infinite,\n _withSpring,\n snapEnabled,\n maxPage,\n ]\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching]\n );\n\n const activeDecay = React.useCallback(() => {\n 'worklet';\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n (isFinished) => onFinish(isFinished as boolean)\n );\n }, [onFinish, scrollEndVelocity.value, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n 'worklet';\n if (touching.value) {\n return;\n }\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(-((maxPage - 1) * size));\n return;\n }\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n infinite,\n activeDecay,\n _withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled) {\n resetBoundary();\n }\n },\n [pagingEnabled, resetBoundary]\n );\n\n const panGestureEventHandler = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n GestureContext\n >(\n {\n onStart: (_, ctx) => {\n touching.value = true;\n ctx.validStart = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n ctx.max = (maxPage - 1) * size;\n ctx.panOffset = translation.value;\n },\n onActive: (e, ctx) => {\n if (ctx.validStart) {\n ctx.validStart = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (\n !infinite &&\n (translation.value > 0 || translation.value < -ctx.max)\n ) {\n const boundary = translation.value > 0 ? 0 : -ctx.max;\n const fixed = boundary - ctx.panOffset;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n\n translation.value = ctx.panOffset + panTranslation;\n },\n onEnd: (e) => {\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n scrollEndTranslation.value = isHorizontal.value\n ? translationX\n : translationY;\n\n endWithSpring(onScrollEnd);\n\n if (!infinite) {\n touching.value = false;\n }\n },\n },\n [\n pagingEnabled,\n isHorizontal.value,\n infinite,\n maxPage,\n size,\n snapEnabled,\n onScrollBegin,\n onScrollEnd,\n ]\n );\n\n return (\n <PanGestureHandler\n {...panGestureHandlerProps}\n enabled={enabled}\n onGestureEvent={panGestureEventHandler}\n >\n <Animated.View\n testID={testID}\n style={style}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n {props.children}\n </Animated.View>\n </PanGestureHandler>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["useCarouselController.tsx"],"names":["React","useRef","Easing","runOnJS","useAnimatedReaction","useSharedValue","dealWithAnimation","convertToSharedIndex","round","useCarouselController","options","size","data","loop","handlerOffsetX","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetXValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","isPositiveZero","Object","is","isNegativeZero","direction","sign","offset","totalSize","isCloseToNextLoop","finalOffset","floor","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '../utils/dealWithAnimation';\nimport { convertToSharedIndex } from '../utils/computedWithAutoFillData';\nimport { round } from '../utils/log';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n data: TCarouselProps['data'];\n autoFillData: TCarouselProps['autoFillData'];\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n duration?: number;\n defaultIndex?: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n data,\n loop,\n handlerOffsetX,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n }),\n [data]\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % dataInfo.length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0)\n );\n }, [handlerOffsetX, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetXValue = handlerOffsetX.value;\n const toInt = round(handlerOffsetXValue / size) % dataInfo.length;\n const isPositive = handlerOffsetXValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffsetX,\n ]\n );\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffsetX.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n // direction -> 1 | -1\n const isPositiveZero = Object.is(handlerOffsetX.value, +0);\n const isNegativeZero = Object.is(handlerOffsetX.value, -0);\n const direction = isPositiveZero\n ? 1\n : isNegativeZero\n ? -1\n : Math.sign(handlerOffsetX.value); \n \n // target offset\n const offset = i * size * direction;\n // page width size * page count\n const totalSize = dataInfo.length * size;\n\n let isCloseToNextLoop = false;\n\n if (loop) {\n isCloseToNextLoop =\n Math.abs(handlerOffsetX.value % totalSize) / totalSize >=\n 0.5;\n }\n\n const finalOffset =\n (Math.floor(Math.abs(handlerOffsetX.value / totalSize)) +\n (isCloseToNextLoop ? 1 : 0)) *\n totalSize *\n direction +\n offset;\n\n if (animated) {\n index.value = i;\n handlerOffsetX.value = scrollWithTiming(\n finalOffset,\n onFinished\n );\n } else {\n handlerOffsetX.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n dataInfo.length,\n loop,\n scrollWithTiming,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n if (typeof i === 'number' && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count) {\n return;\n }\n\n const n = Math.round(count);\n\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next, to]\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
1
+ {"version":3,"sources":["useCarouselController.tsx"],"names":["React","useRef","Easing","runOnJS","useAnimatedReaction","useSharedValue","dealWithAnimation","convertToSharedIndex","round","useCarouselController","options","size","data","loop","handlerOffsetX","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetXValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","isPositiveZero","Object","is","isNegativeZero","direction","sign","offset","totalSize","isCloseToNextLoop","finalOffset","floor","scrollTo","n","getSharedIndex"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,MAAhB,QAA8B,OAA9B;AAEA,SAASC,MAAT,QAAuB,cAAvB;AACA,SACIC,OADJ,EAEIC,mBAFJ,EAGIC,cAHJ,QAIO,yBAJP;AAUA,SAASC,iBAAT,QAAkC,4BAAlC;AACA,SAASC,oBAAT,QAAqC,mCAArC;AACA,SAASC,KAAT,QAAsB,cAAtB;AAuBA,OAAO,SAASC,qBAAT,CAA+BC,OAA/B,EAAoE;AACvE,QAAM;AACFC,IAAAA,IADE;AAEFC,IAAAA,IAFE;AAGFC,IAAAA,IAHE;AAIFC,IAAAA,cAJE;AAKFC,IAAAA,aALE;AAMFC,IAAAA,YAAY,GAAG,CANb;AAOFC,IAAAA,QAPE;AAQFC,IAAAA;AARE,MASFR,OATJ;AAWA,QAAMS,QAAQ,GAAGnB,KAAK,CAACoB,OAAN,CACb,OAAO;AACHC,IAAAA,MAAM,EAAET,IAAI,CAACS,MADV;AAEHC,IAAAA,OAAO,EAAE,CAACV,IAAI,CAACS,MAFZ;AAGHE,IAAAA,cAAc,EAAEX,IAAI,CAACS;AAHlB,GAAP,CADa,EAMb,CAACT,IAAD,CANa,CAAjB;AASA,QAAMY,KAAK,GAAGnB,cAAc,CAASW,YAAT,CAA5B,CArBuE,CAsBvE;;AACA,QAAMS,WAAW,GAAGxB,MAAM,CAASe,YAAT,CAA1B;AACA,QAAMU,cAAc,GAAGzB,MAAM,CAASe,YAAT,CAA7B;AAEA,QAAMW,gBAAgB,GAAG3B,KAAK,CAAC4B,WAAN,CAAkB,MAAM;AAC7C,QAAIf,IAAJ,EAAU;AACN,aAAO,CAACgB,IAAI,CAACrB,KAAL,CAAWM,cAAc,CAACgB,KAAf,GAAuBnB,IAAlC,CAAR;AACH;;AAED,UAAMoB,KAAK,GAAIjB,cAAc,CAACgB,KAAf,GAAuBnB,IAAxB,GAAgCQ,QAAQ,CAACE,MAAvD;AACA,WAAOQ,IAAI,CAACrB,KAAL,CACHM,cAAc,CAACgB,KAAf,IAAwB,CAAxB,GACMD,IAAI,CAACG,GAAL,CAASD,KAAT,CADN,GAEMF,IAAI,CAACG,GAAL,CAASD,KAAK,GAAG,CAAR,GAAYZ,QAAQ,CAACE,MAAT,GAAkBU,KAA9B,GAAsC,CAA/C,CAHH,CAAP;AAKH,GAXwB,EAWtB,CAACjB,cAAD,EAAiBK,QAAjB,EAA2BR,IAA3B,EAAiCE,IAAjC,CAXsB,CAAzB;;AAaA,WAASoB,cAAT,CAAwBC,cAAxB,EAAgD;AAC5CT,IAAAA,WAAW,CAACU,OAAZ,GAAsBD,cAAtB;AACH;;AAED9B,EAAAA,mBAAmB,CACf,MAAM;AACF,UAAMgC,mBAAmB,GAAGtB,cAAc,CAACgB,KAA3C;AACA,UAAMO,KAAK,GAAG7B,KAAK,CAAC4B,mBAAmB,GAAGzB,IAAvB,CAAL,GAAoCQ,QAAQ,CAACE,MAA3D;AACA,UAAMiB,UAAU,GAAGF,mBAAmB,IAAI,CAA1C;AACA,UAAMG,CAAC,GAAGD,UAAU,GACdT,IAAI,CAACG,GAAL,CAASK,KAAT,CADc,GAEdR,IAAI,CAACG,GAAL,CAASK,KAAK,GAAG,CAAR,GAAYlB,QAAQ,CAACE,MAAT,GAAkBgB,KAA9B,GAAsC,CAA/C,CAFN;AAIA,UAAMG,mBAAmB,GAAGjC,oBAAoB,CAAC;AAC7CM,MAAAA,IAD6C;AAE7C4B,MAAAA,aAAa,EAAEtB,QAAQ,CAACI,cAFqB;AAG7CL,MAAAA,YAAY,EAAEA,YAH+B;AAI7CM,MAAAA,KAAK,EAAEe;AAJsC,KAAD,CAAhD;AAOA,WAAO;AACHA,MAAAA,CADG;AAEHC,MAAAA;AAFG,KAAP;AAIH,GApBc,EAqBf,QAAgC;AAAA,QAA/B;AAAED,MAAAA,CAAF;AAAKC,MAAAA;AAAL,KAA+B;AAC5BhB,IAAAA,KAAK,CAACM,KAAN,GAAcS,CAAd;AACApC,IAAAA,OAAO,CAAC8B,cAAD,CAAP,CAAwBO,mBAAxB;AACH,GAxBc,EAyBf,CACId,cADJ,EAEID,WAFJ,EAGId,IAHJ,EAIIQ,QAJJ,EAKIK,KALJ,EAMIX,IANJ,EAOIK,YAPJ,EAQIJ,cARJ,CAzBe,CAAnB;AAqCA,QAAM4B,eAAe,GAAG1C,KAAK,CAAC4B,WAAN,CAAkB,MAAM;AAC5C,WAAOJ,KAAK,CAACM,KAAb;AACH,GAFuB,EAErB,CAACN,KAAD,CAFqB,CAAxB;AAIA,QAAMmB,UAAU,GAAG3C,KAAK,CAAC4B,WAAN,CAAkB,MAAM;AACvC,WAAO,CAACT,QAAQ,CAACG,OAAjB;AACH,GAFkB,EAEhB,CAACH,QAAD,CAFgB,CAAnB;AAIA,QAAMyB,WAAW,GAAG5C,KAAK,CAAC4B,WAAN,CAAkB,MAAM;AAAA;;AACxC,4BAAAlB,OAAO,CAACkC,WAAR,mFAAAlC,OAAO;AACV,GAFmB,EAEjB,CAACA,OAAD,CAFiB,CAApB;AAIA,QAAMmC,aAAa,GAAG7C,KAAK,CAAC4B,WAAN,CAAkB,MAAM;AAAA;;AAC1C,6BAAAlB,OAAO,CAACmC,aAAR,qFAAAnC,OAAO;AACV,GAFqB,EAEnB,CAACA,OAAD,CAFmB,CAAtB;AAIA,QAAMoC,gBAAgB,GAAG9C,KAAK,CAAC4B,WAAN,CACrB,CAACmB,OAAD,EAAkBC,UAAlB,KAA8C;AAC1C;;AACA,UAAMC,QAAQ,GAAIC,UAAD,IAAyB;AACtC;;AACA,UAAIA,UAAJ,EAAgB;AACZ/C,QAAAA,OAAO,CAACyC,WAAD,CAAP;AACAI,QAAAA,UAAU,IAAI7C,OAAO,CAAC6C,UAAD,CAAP,EAAd;AACH;AACJ,KAND;;AAQA,UAAMG,oBAAyC,GAAG;AAC9CC,MAAAA,IAAI,EAAE,QADwC;AAE9CC,MAAAA,MAAM,EAAE;AAAEpC,QAAAA,QAAF;AAAYqC,QAAAA,MAAM,EAAEpD,MAAM,CAACqD;AAA3B;AAFsC,KAAlD;AAKA,WAAOjD,iBAAiB,CAACS,aAAD,aAACA,aAAD,cAACA,aAAD,GAAkBoC,oBAAlB,CAAjB,CACHJ,OADG,EAEHE,QAFG,CAAP;AAIH,GApBoB,EAqBrB,CAAChC,QAAD,EAAWF,aAAX,EAA0B6B,WAA1B,CArBqB,CAAzB;AAwBA,QAAMY,IAAI,GAAGxD,KAAK,CAAC4B,WAAN,CACT,YAAuC;AACnC;;AADmC,QAAtC6B,IAAsC,uEAAP,EAAO;AAEnC,UAAM;AAAEC,MAAAA,KAAK,GAAG,CAAV;AAAaC,MAAAA,QAAQ,GAAG,IAAxB;AAA8BX,MAAAA;AAA9B,QAA6CS,IAAnD;AACA,QAAI,CAACd,UAAU,EAAX,IAAkB,CAAC9B,IAAD,IAASW,KAAK,CAACM,KAAN,IAAeX,QAAQ,CAACE,MAAT,GAAkB,CAAhE,EACI;AAEJwB,IAAAA,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa;AAEb,UAAMe,QAAQ,GAAGjC,gBAAgB,KAAK+B,KAAtC;AACAlC,IAAAA,KAAK,CAACM,KAAN,GAAc8B,QAAd;;AAEA,QAAID,QAAJ,EAAc;AACV7C,MAAAA,cAAc,CAACgB,KAAf,GAAuBgB,gBAAgB,CACnC,CAACc,QAAD,GAAYjD,IADuB,EAEnCqC,UAFmC,CAAvC;AAIH,KALD,MAKO;AACHlC,MAAAA,cAAc,CAACgB,KAAf,GAAuB,CAAC8B,QAAD,GAAYjD,IAAnC;AACAqC,MAAAA,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU;AACb;AACJ,GArBQ,EAsBT,CACIL,UADJ,EAEI9B,IAFJ,EAGIW,KAHJ,EAIIL,QAJJ,EAKI0B,aALJ,EAMI/B,cANJ,EAOIH,IAPJ,EAQImC,gBARJ,EASInB,gBATJ,CAtBS,CAAb;AAmCA,QAAMkC,IAAI,GAAG7D,KAAK,CAAC4B,WAAN,CACT,YAAuC;AAAA,QAAtC6B,IAAsC,uEAAP,EAAO;AACnC,UAAM;AAAEC,MAAAA,KAAK,GAAG,CAAV;AAAaC,MAAAA,QAAQ,GAAG,IAAxB;AAA8BX,MAAAA;AAA9B,QAA6CS,IAAnD;AACA,QAAI,CAACd,UAAU,EAAX,IAAkB,CAAC9B,IAAD,IAASW,KAAK,CAACM,KAAN,IAAe,CAA9C,EAAkD;AAElDe,IAAAA,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa;AAEb,UAAMiB,QAAQ,GAAGnC,gBAAgB,KAAK+B,KAAtC;AACAlC,IAAAA,KAAK,CAACM,KAAN,GAAcgC,QAAd;;AAEA,QAAIH,QAAJ,EAAc;AACV7C,MAAAA,cAAc,CAACgB,KAAf,GAAuBgB,gBAAgB,CACnC,CAACgB,QAAD,GAAYnD,IADuB,EAEnCqC,UAFmC,CAAvC;AAIH,KALD,MAKO;AACHlC,MAAAA,cAAc,CAACgB,KAAf,GAAuB,CAACgC,QAAD,GAAYnD,IAAnC;AACAqC,MAAAA,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU;AACb;AACJ,GAnBQ,EAoBT,CACIL,UADJ,EAEI9B,IAFJ,EAGIW,KAHJ,EAIIqB,aAJJ,EAKI/B,cALJ,EAMIH,IANJ,EAOImC,gBAPJ,EAQInB,gBARJ,CApBS,CAAb;AAgCA,QAAMoC,EAAE,GAAG/D,KAAK,CAAC4B,WAAN,CACN6B,IAAD,IAAqE;AACjE,UAAM;AAAElB,MAAAA,CAAF;AAAKoB,MAAAA,QAAQ,GAAG,KAAhB;AAAuBX,MAAAA;AAAvB,QAAsCS,IAA5C;AACA,QAAIlB,CAAC,KAAKf,KAAK,CAACM,KAAhB,EAAuB;AACvB,QAAI,CAACa,UAAU,EAAf,EAAmB;AAEnBE,IAAAA,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa,GALoD,CAMjE;;AACA,UAAMmB,cAAc,GAAGC,MAAM,CAACC,EAAP,CAAUpD,cAAc,CAACgB,KAAzB,EAAgC,CAAC,CAAjC,CAAvB;AACA,UAAMqC,cAAc,GAAGF,MAAM,CAACC,EAAP,CAAUpD,cAAc,CAACgB,KAAzB,EAAgC,CAAC,CAAjC,CAAvB;AACA,UAAMsC,SAAS,GAAGJ,cAAc,GAC1B,CAD0B,GAE1BG,cAAc,GACd,CAAC,CADa,GAEdtC,IAAI,CAACwC,IAAL,CAAUvD,cAAc,CAACgB,KAAzB,CAJN,CATiE,CAejE;;AACA,UAAMwC,MAAM,GAAG/B,CAAC,GAAG5B,IAAJ,GAAWyD,SAA1B,CAhBiE,CAiBjE;;AACA,UAAMG,SAAS,GAAGpD,QAAQ,CAACE,MAAT,GAAkBV,IAApC;AAEA,QAAI6D,iBAAiB,GAAG,KAAxB;;AAEA,QAAI3D,IAAJ,EAAU;AACN2D,MAAAA,iBAAiB,GACb3C,IAAI,CAACG,GAAL,CAASlB,cAAc,CAACgB,KAAf,GAAuByC,SAAhC,IAA6CA,SAA7C,IACA,GAFJ;AAGH;;AAED,UAAME,WAAW,GACb,CAAC5C,IAAI,CAAC6C,KAAL,CAAW7C,IAAI,CAACG,GAAL,CAASlB,cAAc,CAACgB,KAAf,GAAuByC,SAAhC,CAAX,KACIC,iBAAiB,GAAG,CAAH,GAAO,CAD5B,CAAD,IAEID,SAFJ,GAGIH,SAHJ,GAIAE,MALJ;;AAOA,QAAIX,QAAJ,EAAc;AACVnC,MAAAA,KAAK,CAACM,KAAN,GAAcS,CAAd;AACAzB,MAAAA,cAAc,CAACgB,KAAf,GAAuBgB,gBAAgB,CACnC2B,WADmC,EAEnCzB,UAFmC,CAAvC;AAIH,KAND,MAMO;AACHlC,MAAAA,cAAc,CAACgB,KAAf,GAAuB2C,WAAvB;AACAjD,MAAAA,KAAK,CAACM,KAAN,GAAcS,CAAd;AACAS,MAAAA,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU;AACb;AACJ,GA/CM,EAgDP,CACIxB,KADJ,EAEImB,UAFJ,EAGIE,aAHJ,EAII/B,cAJJ,EAKIH,IALJ,EAMIQ,QAAQ,CAACE,MANb,EAOIR,IAPJ,EAQIiC,gBARJ,CAhDO,CAAX;AA4DA,QAAM6B,QAAQ,GAAG3E,KAAK,CAAC4B,WAAN,CACb,YAAuC;AAAA,QAAtC6B,IAAsC,uEAAP,EAAO;AACnC,UAAM;AAAEjC,MAAAA,KAAK,EAAEe,CAAT;AAAYmB,MAAAA,KAAZ;AAAmBC,MAAAA,QAAQ,GAAG,KAA9B;AAAqCX,MAAAA;AAArC,QAAoDS,IAA1D;;AACA,QAAI,OAAOlB,CAAP,KAAa,QAAb,IAAyBA,CAAC,GAAG,CAAC,CAAlC,EAAqC;AACjCwB,MAAAA,EAAE,CAAC;AAAExB,QAAAA,CAAF;AAAKoB,QAAAA,QAAL;AAAeX,QAAAA;AAAf,OAAD,CAAF;AACA;AACH;;AAED,QAAI,CAACU,KAAL,EAAY;AACR;AACH;;AAED,UAAMkB,CAAC,GAAG/C,IAAI,CAACrB,KAAL,CAAWkD,KAAX,CAAV;;AAEA,QAAIkB,CAAC,GAAG,CAAR,EAAW;AACPf,MAAAA,IAAI,CAAC;AAAEH,QAAAA,KAAK,EAAE7B,IAAI,CAACG,GAAL,CAAS4C,CAAT,CAAT;AAAsBjB,QAAAA,QAAtB;AAAgCX,QAAAA;AAAhC,OAAD,CAAJ;AACH,KAFD,MAEO;AACHQ,MAAAA,IAAI,CAAC;AAAEE,QAAAA,KAAK,EAAEkB,CAAT;AAAYjB,QAAAA,QAAZ;AAAsBX,QAAAA;AAAtB,OAAD,CAAJ;AACH;AACJ,GAnBY,EAoBb,CAACa,IAAD,EAAOL,IAAP,EAAaO,EAAb,CApBa,CAAjB;AAuBA,SAAO;AACHP,IAAAA,IADG;AAEHK,IAAAA,IAFG;AAGHc,IAAAA,QAHG;AAIHjC,IAAAA,eAJG;AAKHmC,IAAAA,cAAc,EAAE,MAAMpD,WAAW,CAACU;AAL/B,GAAP;AAOH","sourcesContent":["import React, { useRef } from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '../utils/dealWithAnimation';\nimport { convertToSharedIndex } from '../utils/computedWithAutoFillData';\nimport { round } from '../utils/log';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n data: TCarouselProps['data'];\n autoFillData: TCarouselProps['autoFillData'];\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n duration?: number;\n defaultIndex?: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n data,\n loop,\n handlerOffsetX,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n }),\n [data]\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % dataInfo.length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0)\n );\n }, [handlerOffsetX, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetXValue = handlerOffsetX.value;\n const toInt = round(handlerOffsetXValue / size) % dataInfo.length;\n const isPositive = handlerOffsetXValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffsetX,\n ]\n );\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffsetX.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n // direction -> 1 | -1\n const isPositiveZero = Object.is(handlerOffsetX.value, +0);\n const isNegativeZero = Object.is(handlerOffsetX.value, -0);\n const direction = isPositiveZero\n ? 1\n : isNegativeZero\n ? -1\n : Math.sign(handlerOffsetX.value);\n\n // target offset\n const offset = i * size * direction;\n // page width size * page count\n const totalSize = dataInfo.length * size;\n\n let isCloseToNextLoop = false;\n\n if (loop) {\n isCloseToNextLoop =\n Math.abs(handlerOffsetX.value % totalSize) / totalSize >=\n 0.5;\n }\n\n const finalOffset =\n (Math.floor(Math.abs(handlerOffsetX.value / totalSize)) +\n (isCloseToNextLoop ? 1 : 0)) *\n totalSize *\n direction +\n offset;\n\n if (animated) {\n index.value = i;\n handlerOffsetX.value = scrollWithTiming(\n finalOffset,\n onFinished\n );\n } else {\n handlerOffsetX.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n dataInfo.length,\n loop,\n scrollWithTiming,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n if (typeof i === 'number' && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count) {\n return;\n }\n\n const n = Math.round(count);\n\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next, to]\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
@@ -1,14 +1,15 @@
1
1
  import React from 'react';
2
- import { StyleProp, ViewStyle } from 'react-native';
2
+ import type { StyleProp, ViewStyle } from 'react-native';
3
3
  import Animated from 'react-native-reanimated';
4
4
  interface Props {
5
5
  size: number;
6
6
  infinite?: boolean;
7
+ testID?: string;
8
+ style?: StyleProp<ViewStyle>;
7
9
  onScrollBegin?: () => void;
8
10
  onScrollEnd?: () => void;
9
11
  onTouchBegin?: () => void;
10
12
  onTouchEnd?: () => void;
11
- style?: StyleProp<ViewStyle>;
12
13
  translation: Animated.SharedValue<number>;
13
14
  }
14
15
  export declare const ScrollViewGesture: React.FC<Props>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-reanimated-carousel",
3
- "version": "3.0.5",
3
+ "version": "3.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
  "react-native": "src/index.tsx",
package/src/Carousel.tsx CHANGED
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';
2
+ import { runOnJS, useDerivedValue } from 'react-native-reanimated';
3
3
 
4
4
  import { useCarouselController } from './hooks/useCarouselController';
5
5
  import { useAutoPlay } from './hooks/useAutoPlay';
@@ -8,7 +8,7 @@ import { ScrollViewGesture } from './ScrollViewGesture';
8
8
  import { useVisibleRanges } from './hooks/useVisibleRanges';
9
9
 
10
10
  import type { ICarouselInstance, TCarouselProps } from './types';
11
- import { StyleSheet, View } from 'react-native';
11
+ import { StyleSheet } from 'react-native';
12
12
  import { BaseLayout } from './layouts/BaseLayout';
13
13
  import { useLayoutConfig } from './hooks/useLayoutConfig';
14
14
  import { useInitProps } from './hooks/useInitProps';
@@ -198,40 +198,29 @@ const Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(
198
198
 
199
199
  return (
200
200
  <CTX.Provider value={{ props, common: commonVariables }}>
201
- <View
201
+ <ScrollViewGesture
202
+ key={mode}
203
+ size={size}
204
+ translation={handlerOffsetX}
202
205
  style={[
203
206
  styles.container,
204
- { width: width || '100%', height: height || '100%' },
207
+ {
208
+ width: width || '100%',
209
+ height: height || '100%',
210
+ },
205
211
  style,
212
+ vertical
213
+ ? styles.itemsVertical
214
+ : styles.itemsHorizontal,
206
215
  ]}
207
216
  testID={testID}
217
+ onScrollBegin={scrollViewGestureOnScrollBegin}
218
+ onScrollEnd={scrollViewGestureOnScrollEnd}
219
+ onTouchBegin={scrollViewGestureOnTouchBegin}
220
+ onTouchEnd={scrollViewGestureOnTouchEnd}
208
221
  >
209
- <ScrollViewGesture
210
- size={size}
211
- translation={handlerOffsetX}
212
- onScrollBegin={scrollViewGestureOnScrollBegin}
213
- onScrollEnd={scrollViewGestureOnScrollEnd}
214
- onTouchBegin={scrollViewGestureOnTouchBegin}
215
- onTouchEnd={scrollViewGestureOnTouchEnd}
216
- >
217
- <Animated.View
218
- key={mode}
219
- style={[
220
- styles.container,
221
- {
222
- width: width || '100%',
223
- height: height || '100%',
224
- },
225
- style,
226
- vertical
227
- ? styles.itemsVertical
228
- : styles.itemsHorizontal,
229
- ]}
230
- >
231
- {data.map(renderLayout)}
232
- </Animated.View>
233
- </ScrollViewGesture>
234
- </View>
222
+ {data.map(renderLayout)}
223
+ </ScrollViewGesture>
235
224
  </CTX.Provider>
236
225
  );
237
226
  }
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { StyleProp, StyleSheet, ViewStyle } from 'react-native';
2
+ import type { StyleProp, ViewStyle } from 'react-native';
3
3
  import {
4
4
  PanGestureHandler,
5
5
  PanGestureHandlerGestureEvent,
@@ -27,11 +27,12 @@ type GestureContext = {
27
27
  interface Props {
28
28
  size: number;
29
29
  infinite?: boolean;
30
+ testID?: string;
31
+ style?: StyleProp<ViewStyle>;
30
32
  onScrollBegin?: () => void;
31
33
  onScrollEnd?: () => void;
32
34
  onTouchBegin?: () => void;
33
35
  onTouchEnd?: () => void;
34
- style?: StyleProp<ViewStyle>;
35
36
  translation: Animated.SharedValue<number>;
36
37
  }
37
38
 
@@ -51,8 +52,10 @@ const IScrollViewGesture: React.FC<Props> = (props) => {
51
52
  } = React.useContext(CTX);
52
53
 
53
54
  const {
54
- translation,
55
55
  size,
56
+ translation,
57
+ testID,
58
+ style = {},
56
59
  onScrollBegin,
57
60
  onScrollEnd,
58
61
  onTouchBegin,
@@ -269,42 +272,22 @@ const IScrollViewGesture: React.FC<Props> = (props) => {
269
272
  ]
270
273
  );
271
274
 
272
- const directionStyle = React.useMemo(() => {
273
- return vertical ? styles.contentHorizontal : styles.contentVertical;
274
- }, [vertical]);
275
-
276
275
  return (
277
- <Animated.View
278
- style={[
279
- styles.container,
280
- directionStyle,
281
- { width: '100%', height: '100%' },
282
- ]}
283
- onTouchStart={onTouchBegin}
284
- onTouchEnd={onTouchEnd}
276
+ <PanGestureHandler
277
+ {...panGestureHandlerProps}
278
+ enabled={enabled}
279
+ onGestureEvent={panGestureEventHandler}
285
280
  >
286
- <PanGestureHandler
287
- {...panGestureHandlerProps}
288
- enabled={enabled}
289
- onGestureEvent={panGestureEventHandler}
281
+ <Animated.View
282
+ testID={testID}
283
+ style={style}
284
+ onTouchStart={onTouchBegin}
285
+ onTouchEnd={onTouchEnd}
290
286
  >
291
287
  {props.children}
292
- </PanGestureHandler>
293
- </Animated.View>
288
+ </Animated.View>
289
+ </PanGestureHandler>
294
290
  );
295
291
  };
296
292
 
297
293
  export const ScrollViewGesture = IScrollViewGesture;
298
-
299
- const styles = StyleSheet.create({
300
- container: {
301
- flex: 1,
302
- overflow: 'hidden',
303
- },
304
- contentVertical: {
305
- flexDirection: 'column',
306
- },
307
- contentHorizontal: {
308
- flexDirection: 'row',
309
- },
310
- });
@@ -234,11 +234,11 @@ export function useCarouselController(options: IOpts): ICarouselController {
234
234
  const isPositiveZero = Object.is(handlerOffsetX.value, +0);
235
235
  const isNegativeZero = Object.is(handlerOffsetX.value, -0);
236
236
  const direction = isPositiveZero
237
- ? 1
238
- : isNegativeZero
239
- ? -1
240
- : Math.sign(handlerOffsetX.value);
241
-
237
+ ? 1
238
+ : isNegativeZero
239
+ ? -1
240
+ : Math.sign(handlerOffsetX.value);
241
+
242
242
  // target offset
243
243
  const offset = i * size * direction;
244
244
  // page width size * page count