react-native-reanimated-carousel 3.1.2 → 3.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,"__esModule",{value:true});exports.useCarouselController=useCarouselController;var _react=_interopRequireWildcard(require("react"));var _reactNativeReanimated=require("react-native-reanimated");var _constants=require("../constants");var _computedWithAutoFillData=require("../utils/computedWithAutoFillData");var _dealWithAnimation=require("../utils/dealWithAnimation");var _handlerOffsetDirection=require("../utils/handlerOffsetDirection");var _log=require("../utils/log");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 useCarouselController(options){var size=options.size,data=options.data,loop=options.loop,handlerOffset=options.handlerOffset,withAnimation=options.withAnimation,_options$defaultIndex=options.defaultIndex,defaultIndex=_options$defaultIndex===void 0?0:_options$defaultIndex,duration=options.duration,autoFillData=options.autoFillData;var dataInfo=_react.default.useMemo(function(){return{length:data.length,disable:!data.length,originalLength:data.length};},[data]);var index=(0,_reactNativeReanimated.useSharedValue)(defaultIndex);var sharedIndex=(0,_react.useRef)(defaultIndex);var sharedPreIndex=(0,_react.useRef)(defaultIndex);var currentFixedPage=_react.default.useCallback(function(){if(loop)return-Math.round(handlerOffset.value/size);var fixed=handlerOffset.value/size%dataInfo.length;return Math.round(handlerOffset.value<=0?Math.abs(fixed):Math.abs(fixed>0?dataInfo.length-fixed:0));},[handlerOffset,dataInfo,size,loop]);function setSharedIndex(newSharedIndex){sharedIndex.current=newSharedIndex;}(0,_reactNativeReanimated.useAnimatedReaction)(function(){var _f=function _f(){var handlerOffsetValue=handlerOffset.value;var toInt=(0,_log.round)(handlerOffsetValue/size)%dataInfo.length;var isPositive=handlerOffsetValue<=0;var i=isPositive?Math.abs(toInt):Math.abs(toInt>0?dataInfo.length-toInt:0);var newSharedIndexValue=(0,_computedWithAutoFillData.convertToSharedIndex)({loop:loop,rawDataLength:dataInfo.originalLength,autoFillData:autoFillData,index:i});return{i:i,newSharedIndexValue:newSharedIndexValue};};_f._closure={handlerOffset:handlerOffset,round:_log.round,size:size,dataInfo:dataInfo,convertToSharedIndex:_computedWithAutoFillData.convertToSharedIndex,loop:loop,autoFillData:autoFillData};_f.asString="function _f(){const{handlerOffset,round,size,dataInfo,convertToSharedIndex,loop,autoFillData}=jsThis._closure;{const handlerOffsetValue=handlerOffset.value;const toInt=round(handlerOffsetValue/size)%dataInfo.length;const isPositive=handlerOffsetValue<=0;const i=isPositive?Math.abs(toInt):Math.abs(toInt>0?dataInfo.length-toInt:0);const newSharedIndexValue=convertToSharedIndex({loop:loop,rawDataLength:dataInfo.originalLength,autoFillData:autoFillData,index:i});return{i:i,newSharedIndexValue:newSharedIndexValue};}}";_f.__workletHash=442719064151;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (84:4)";return _f;}(),function(){var _f=function _f(_ref){var i=_ref.i,newSharedIndexValue=_ref.newSharedIndexValue;index.value=i;(0,_reactNativeReanimated.runOnJS)(setSharedIndex)(newSharedIndexValue);};_f._closure={index:index,runOnJS:_reactNativeReanimated.runOnJS,setSharedIndex:setSharedIndex};_f.asString="function _f({i:i,newSharedIndexValue:newSharedIndexValue}){const{index,runOnJS,setSharedIndex}=jsThis._closure;{index.value=i;runOnJS(setSharedIndex)(newSharedIndexValue);}}";_f.__workletHash=16638491076412;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (104:4)";return _f;}(),[sharedPreIndex,sharedIndex,size,dataInfo,index,loop,autoFillData,handlerOffset]);var getCurrentIndex=_react.default.useCallback(function(){return index.value;},[index]);var canSliding=_react.default.useCallback(function(){return!dataInfo.disable;},[dataInfo]);var onScrollEnd=_react.default.useCallback(function(){options.onScrollEnd==null?void 0:options.onScrollEnd();},[options]);var onScrollBegin=_react.default.useCallback(function(){options.onScrollBegin==null?void 0:options.onScrollBegin();},[options]);var scrollWithTiming=_react.default.useCallback(function(){var _f=function _f(toValue,onFinished){var callback=function(){var _f=function _f(isFinished){if(isFinished){(0,_reactNativeReanimated.runOnJS)(onScrollEnd)();onFinished&&(0,_reactNativeReanimated.runOnJS)(onFinished)();}};_f._closure={runOnJS:_reactNativeReanimated.runOnJS,onScrollEnd:onScrollEnd,onFinished:onFinished};_f.asString="function _f(isFinished){const{runOnJS,onScrollEnd,onFinished}=jsThis._closure;{if(isFinished){runOnJS(onScrollEnd)();onFinished&&runOnJS(onFinished)();}}}";_f.__workletHash=7767198641261;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (139:23)";return _f;}();var defaultWithAnimation={type:"timing",config:{duration:duration,easing:_constants.Easing.easeOutQuart}};return(0,_dealWithAnimation.dealWithAnimation)(withAnimation!=null?withAnimation:defaultWithAnimation)(toValue,callback);};_f._closure={runOnJS:_reactNativeReanimated.runOnJS,onScrollEnd:onScrollEnd,duration:duration,Easing:{easeOutQuart:_constants.Easing.easeOutQuart},dealWithAnimation:_dealWithAnimation.dealWithAnimation,withAnimation:withAnimation};_f.asString="function _f(toValue,onFinished){const{runOnJS,onScrollEnd,duration,Easing,dealWithAnimation,withAnimation}=jsThis._closure;{var _withAnimation;const callback=function(isFinished){\"worklet\";if(isFinished){runOnJS(onScrollEnd)();onFinished&&runOnJS(onFinished)();}};const defaultWithAnimation={type:\"timing\",config:{duration:duration,easing:Easing.easeOutQuart}};return dealWithAnimation((_withAnimation=withAnimation)!==null&&_withAnimation!==void 0?_withAnimation:defaultWithAnimation)(toValue,callback);}}";_f.__workletHash=12575476119920;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (137:4)";return _f;}(),[duration,withAnimation,onScrollEnd]);var next=_react.default.useCallback(function(){var _f=function _f(){var opts=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var _opts$count=opts.count,count=_opts$count===void 0?1:_opts$count,_opts$animated=opts.animated,animated=_opts$animated===void 0?true:_opts$animated,onFinished=opts.onFinished;if(!canSliding()||!loop&&index.value>=dataInfo.length-1)return;onScrollBegin==null?void 0:onScrollBegin();var nextPage=currentFixedPage()+count;index.value=nextPage;if(animated){handlerOffset.value=scrollWithTiming(-nextPage*size,onFinished);}else{handlerOffset.value=-nextPage*size;onFinished==null?void 0:onFinished();}};_f._closure={canSliding:canSliding,loop:loop,index:index,dataInfo:dataInfo,onScrollBegin:onScrollBegin,currentFixedPage:currentFixedPage,handlerOffset:handlerOffset,scrollWithTiming:scrollWithTiming,size:size};_f.asString="function _f(opts={}){const{canSliding,loop,index,dataInfo,onScrollBegin,currentFixedPage,handlerOffset,scrollWithTiming,size}=jsThis._closure;{var _onScrollBegin;const{count=1,animated=true,onFinished:onFinished}=opts;if(!canSliding()||!loop&&index.value>=dataInfo.length-1)return;(_onScrollBegin=onScrollBegin)===null||_onScrollBegin===void 0?void 0:_onScrollBegin();const nextPage=currentFixedPage()+count;index.value=nextPage;if(animated){handlerOffset.value=scrollWithTiming(-nextPage*size,onFinished);}else{handlerOffset.value=-nextPage*size;onFinished===null||onFinished===void 0?void 0:onFinished();}}}";_f.__workletHash=10530429864168;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (161:4)";return _f;}(),[canSliding,loop,index,dataInfo,onScrollBegin,handlerOffset,size,scrollWithTiming,currentFixedPage]);var prev=_react.default.useCallback(function(){var opts=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var _opts$count2=opts.count,count=_opts$count2===void 0?1:_opts$count2,_opts$animated2=opts.animated,animated=_opts$animated2===void 0?true:_opts$animated2,onFinished=opts.onFinished;if(!canSliding()||!loop&&index.value<=0)return;onScrollBegin==null?void 0:onScrollBegin();var prevPage=currentFixedPage()-count;index.value=prevPage;if(animated){handlerOffset.value=scrollWithTiming(-prevPage*size,onFinished);}else{handlerOffset.value=-prevPage*size;onFinished==null?void 0:onFinished();}},[canSliding,loop,index,onScrollBegin,handlerOffset,size,scrollWithTiming,currentFixedPage]);var to=_react.default.useCallback(function(opts){var i=opts.i,_opts$animated3=opts.animated,animated=_opts$animated3===void 0?false:_opts$animated3,onFinished=opts.onFinished;if(i===index.value)return;if(!canSliding())return;onScrollBegin==null?void 0:onScrollBegin();var direction=(0,_handlerOffsetDirection.handlerOffsetDirection)(handlerOffset);var offset=i*size*direction;var totalSize=dataInfo.length*size;var isCloseToNextLoop=false;if(loop){isCloseToNextLoop=Math.abs(handlerOffset.value%totalSize)/totalSize>=0.5;}var finalOffset=(Math.floor(Math.abs(handlerOffset.value/totalSize))+(isCloseToNextLoop?1:0))*totalSize*direction+offset;if(animated){index.value=i;handlerOffset.value=scrollWithTiming(finalOffset,onFinished);}else{handlerOffset.value=finalOffset;index.value=i;onFinished==null?void 0:onFinished();}},[index,canSliding,onScrollBegin,handlerOffset,size,dataInfo.length,loop,scrollWithTiming]);var scrollTo=_react.default.useCallback(function(){var opts=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var i=opts.index,count=opts.count,_opts$animated4=opts.animated,animated=_opts$animated4===void 0?false:_opts$animated4,onFinished=opts.onFinished;if(typeof i==="number"&&i>-1){to({i:i,animated:animated,onFinished:onFinished});return;}if(!count)return;var n=Math.round(count);if(n<0)prev({count:Math.abs(n),animated:animated,onFinished:onFinished});else next({count:n,animated:animated,onFinished:onFinished});},[prev,next,to]);return{next:next,prev:prev,scrollTo:scrollTo,getCurrentIndex:getCurrentIndex,getSharedIndex:function getSharedIndex(){return sharedIndex.current;}};}
1
+ Object.defineProperty(exports,"__esModule",{value:true});exports.useCarouselController=useCarouselController;var _react=_interopRequireWildcard(require("react"));var _reactNativeReanimated=require("react-native-reanimated");var _constants=require("../constants");var _computedWithAutoFillData=require("../utils/computedWithAutoFillData");var _dealWithAnimation=require("../utils/dealWithAnimation");var _handlerOffsetDirection=require("../utils/handlerOffsetDirection");var _log=require("../utils/log");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 useCarouselController(options){var size=options.size,data=options.data,loop=options.loop,handlerOffset=options.handlerOffset,withAnimation=options.withAnimation,_options$defaultIndex=options.defaultIndex,defaultIndex=_options$defaultIndex===void 0?0:_options$defaultIndex,duration=options.duration,autoFillData=options.autoFillData;var dataInfo=_react.default.useMemo(function(){return{length:data.length,disable:!data.length,originalLength:data.length};},[data]);var index=(0,_reactNativeReanimated.useSharedValue)(defaultIndex);var sharedIndex=(0,_react.useRef)(defaultIndex);var sharedPreIndex=(0,_react.useRef)(defaultIndex);var currentFixedPage=_react.default.useCallback(function(){if(loop)return-Math.round(handlerOffset.value/size);var fixed=handlerOffset.value/size%dataInfo.length;return Math.round(handlerOffset.value<=0?Math.abs(fixed):Math.abs(fixed>0?dataInfo.length-fixed:0));},[handlerOffset,dataInfo,size,loop]);function setSharedIndex(newSharedIndex){sharedIndex.current=newSharedIndex;}(0,_reactNativeReanimated.useAnimatedReaction)(function(){var _f=function _f(){var handlerOffsetValue=handlerOffset.value;var toInt=(0,_log.round)(handlerOffsetValue/size)%dataInfo.length;var isPositive=handlerOffsetValue<=0;var i=isPositive?Math.abs(toInt):Math.abs(toInt>0?dataInfo.length-toInt:0);var newSharedIndexValue=(0,_computedWithAutoFillData.convertToSharedIndex)({loop:loop,rawDataLength:dataInfo.originalLength,autoFillData:autoFillData,index:i});return{i:i,newSharedIndexValue:newSharedIndexValue};};_f._closure={handlerOffset:handlerOffset,round:_log.round,size:size,dataInfo:dataInfo,convertToSharedIndex:_computedWithAutoFillData.convertToSharedIndex,loop:loop,autoFillData:autoFillData};_f.asString="function _f(){const{handlerOffset,round,size,dataInfo,convertToSharedIndex,loop,autoFillData}=jsThis._closure;{const handlerOffsetValue=handlerOffset.value;const toInt=round(handlerOffsetValue/size)%dataInfo.length;const isPositive=handlerOffsetValue<=0;const i=isPositive?Math.abs(toInt):Math.abs(toInt>0?dataInfo.length-toInt:0);const newSharedIndexValue=convertToSharedIndex({loop:loop,rawDataLength:dataInfo.originalLength,autoFillData:autoFillData,index:i});return{i:i,newSharedIndexValue:newSharedIndexValue};}}";_f.__workletHash=442719064151;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (84:4)";return _f;}(),function(){var _f=function _f(_ref){var i=_ref.i,newSharedIndexValue=_ref.newSharedIndexValue;index.value=i;(0,_reactNativeReanimated.runOnJS)(setSharedIndex)(newSharedIndexValue);};_f._closure={index:index,runOnJS:_reactNativeReanimated.runOnJS,setSharedIndex:setSharedIndex};_f.asString="function _f({i:i,newSharedIndexValue:newSharedIndexValue}){const{index,runOnJS,setSharedIndex}=jsThis._closure;{index.value=i;runOnJS(setSharedIndex)(newSharedIndexValue);}}";_f.__workletHash=16638491076412;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (104:4)";return _f;}(),[sharedPreIndex,sharedIndex,size,dataInfo,index,loop,autoFillData,handlerOffset]);var getCurrentIndex=_react.default.useCallback(function(){var realIndex=(0,_computedWithAutoFillData.computedRealIndexWithAutoFillData)({index:index.value,dataLength:dataInfo.originalLength,loop:loop,autoFillData:autoFillData});return realIndex;},[index,autoFillData,dataInfo,loop]);var canSliding=_react.default.useCallback(function(){return!dataInfo.disable;},[dataInfo]);var onScrollEnd=_react.default.useCallback(function(){options.onScrollEnd==null?void 0:options.onScrollEnd();},[options]);var onScrollBegin=_react.default.useCallback(function(){options.onScrollBegin==null?void 0:options.onScrollBegin();},[options]);var scrollWithTiming=_react.default.useCallback(function(){var _f=function _f(toValue,onFinished){var callback=function(){var _f=function _f(isFinished){if(isFinished){(0,_reactNativeReanimated.runOnJS)(onScrollEnd)();onFinished&&(0,_reactNativeReanimated.runOnJS)(onFinished)();}};_f._closure={runOnJS:_reactNativeReanimated.runOnJS,onScrollEnd:onScrollEnd,onFinished:onFinished};_f.asString="function _f(isFinished){const{runOnJS,onScrollEnd,onFinished}=jsThis._closure;{if(isFinished){runOnJS(onScrollEnd)();onFinished&&runOnJS(onFinished)();}}}";_f.__workletHash=7767198641261;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (146:23)";return _f;}();var defaultWithAnimation={type:"timing",config:{duration:duration,easing:_constants.Easing.easeOutQuart}};return(0,_dealWithAnimation.dealWithAnimation)(withAnimation!=null?withAnimation:defaultWithAnimation)(toValue,callback);};_f._closure={runOnJS:_reactNativeReanimated.runOnJS,onScrollEnd:onScrollEnd,duration:duration,Easing:{easeOutQuart:_constants.Easing.easeOutQuart},dealWithAnimation:_dealWithAnimation.dealWithAnimation,withAnimation:withAnimation};_f.asString="function _f(toValue,onFinished){const{runOnJS,onScrollEnd,duration,Easing,dealWithAnimation,withAnimation}=jsThis._closure;{var _withAnimation;const callback=function(isFinished){\"worklet\";if(isFinished){runOnJS(onScrollEnd)();onFinished&&runOnJS(onFinished)();}};const defaultWithAnimation={type:\"timing\",config:{duration:duration,easing:Easing.easeOutQuart}};return dealWithAnimation((_withAnimation=withAnimation)!==null&&_withAnimation!==void 0?_withAnimation:defaultWithAnimation)(toValue,callback);}}";_f.__workletHash=12575476119920;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (144:4)";return _f;}(),[duration,withAnimation,onScrollEnd]);var next=_react.default.useCallback(function(){var _f=function _f(){var opts=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var _opts$count=opts.count,count=_opts$count===void 0?1:_opts$count,_opts$animated=opts.animated,animated=_opts$animated===void 0?true:_opts$animated,onFinished=opts.onFinished;if(!canSliding()||!loop&&index.value>=dataInfo.length-1)return;onScrollBegin==null?void 0:onScrollBegin();var nextPage=currentFixedPage()+count;index.value=nextPage;if(animated){handlerOffset.value=scrollWithTiming(-nextPage*size,onFinished);}else{handlerOffset.value=-nextPage*size;onFinished==null?void 0:onFinished();}};_f._closure={canSliding:canSliding,loop:loop,index:index,dataInfo:dataInfo,onScrollBegin:onScrollBegin,currentFixedPage:currentFixedPage,handlerOffset:handlerOffset,scrollWithTiming:scrollWithTiming,size:size};_f.asString="function _f(opts={}){const{canSliding,loop,index,dataInfo,onScrollBegin,currentFixedPage,handlerOffset,scrollWithTiming,size}=jsThis._closure;{var _onScrollBegin;const{count=1,animated=true,onFinished:onFinished}=opts;if(!canSliding()||!loop&&index.value>=dataInfo.length-1)return;(_onScrollBegin=onScrollBegin)===null||_onScrollBegin===void 0?void 0:_onScrollBegin();const nextPage=currentFixedPage()+count;index.value=nextPage;if(animated){handlerOffset.value=scrollWithTiming(-nextPage*size,onFinished);}else{handlerOffset.value=-nextPage*size;onFinished===null||onFinished===void 0?void 0:onFinished();}}}";_f.__workletHash=10530429864168;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (168:4)";return _f;}(),[canSliding,loop,index,dataInfo,onScrollBegin,handlerOffset,size,scrollWithTiming,currentFixedPage]);var prev=_react.default.useCallback(function(){var opts=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var _opts$count2=opts.count,count=_opts$count2===void 0?1:_opts$count2,_opts$animated2=opts.animated,animated=_opts$animated2===void 0?true:_opts$animated2,onFinished=opts.onFinished;if(!canSliding()||!loop&&index.value<=0)return;onScrollBegin==null?void 0:onScrollBegin();var prevPage=currentFixedPage()-count;index.value=prevPage;if(animated){handlerOffset.value=scrollWithTiming(-prevPage*size,onFinished);}else{handlerOffset.value=-prevPage*size;onFinished==null?void 0:onFinished();}},[canSliding,loop,index,onScrollBegin,handlerOffset,size,scrollWithTiming,currentFixedPage]);var to=_react.default.useCallback(function(opts){var i=opts.i,_opts$animated3=opts.animated,animated=_opts$animated3===void 0?false:_opts$animated3,onFinished=opts.onFinished;if(i===index.value)return;if(!canSliding())return;onScrollBegin==null?void 0:onScrollBegin();var direction=(0,_handlerOffsetDirection.handlerOffsetDirection)(handlerOffset);var offset=i*size*direction;var totalSize=dataInfo.length*size;var isCloseToNextLoop=false;if(loop){isCloseToNextLoop=Math.abs(handlerOffset.value%totalSize)/totalSize>=0.5;}var finalOffset=(Math.floor(Math.abs(handlerOffset.value/totalSize))+(isCloseToNextLoop?1:0))*totalSize*direction+offset;if(animated){index.value=i;handlerOffset.value=scrollWithTiming(finalOffset,onFinished);}else{handlerOffset.value=finalOffset;index.value=i;onFinished==null?void 0:onFinished();}},[index,canSliding,onScrollBegin,handlerOffset,size,dataInfo.length,loop,scrollWithTiming]);var scrollTo=_react.default.useCallback(function(){var opts=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var i=opts.index,count=opts.count,_opts$animated4=opts.animated,animated=_opts$animated4===void 0?false:_opts$animated4,onFinished=opts.onFinished;if(typeof i==="number"&&i>-1){to({i:i,animated:animated,onFinished:onFinished});return;}if(!count)return;var n=Math.round(count);if(n<0)prev({count:Math.abs(n),animated:animated,onFinished:onFinished});else next({count:n,animated:animated,onFinished:onFinished});},[prev,next,to]);return{next:next,prev:prev,scrollTo:scrollTo,getCurrentIndex:getCurrentIndex,getSharedIndex:function getSharedIndex(){return sharedIndex.current;}};}
2
2
  //# sourceMappingURL=useCarouselController.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["useCarouselController.tsx"],"names":["useCarouselController","options","size","data","loop","handlerOffset","withAnimation","defaultIndex","duration","autoFillData","dataInfo","React","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetValue","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","direction","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 {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from \"../types\";\nimport { convertToSharedIndex } from \"../utils/computedWithAutoFillData\";\nimport { dealWithAnimation } from \"../utils/dealWithAnimation\";\nimport { handlerOffsetDirection } from \"../utils/handlerOffsetDirection\";\nimport { round } from \"../utils/log\";\n\ninterface IOpts {\n loop: boolean\n size: number\n data: TCarouselProps[\"data\"]\n autoFillData: TCarouselProps[\"autoFillData\"]\n handlerOffset: 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 handlerOffset,\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(handlerOffset.value / size);\n\n const fixed = (handlerOffset.value / size) % dataInfo.length;\n return Math.round(\n handlerOffset.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0),\n );\n }, [handlerOffset, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetValue = handlerOffset.value;\n const toInt = round(handlerOffsetValue / size) % dataInfo.length;\n const isPositive = handlerOffsetValue <= 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 handlerOffset,\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 handlerOffset.value = scrollWithTiming(\n -nextPage * size,\n onFinished,\n ) as any;\n }\n else {\n handlerOffset.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffset,\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 handlerOffset.value = scrollWithTiming(\n -prevPage * size,\n onFinished,\n );\n }\n else {\n handlerOffset.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffset,\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 direction = handlerOffsetDirection(handlerOffset);\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(handlerOffset.value % totalSize) / totalSize\n >= 0.5;\n }\n\n const finalOffset\n = (Math.floor(Math.abs(handlerOffset.value / totalSize))\n + (isCloseToNextLoop ? 1 : 0))\n * totalSize\n * direction\n + offset;\n\n if (animated) {\n index.value = i;\n handlerOffset.value = scrollWithTiming(finalOffset, onFinished);\n }\n else {\n handlerOffset.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffset,\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 const n = Math.round(count);\n\n if (n < 0)\n prev({ count: Math.abs(n), animated, onFinished });\n\n else\n next({ count: n, animated, onFinished });\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","handlerOffset","withAnimation","defaultIndex","duration","autoFillData","dataInfo","React","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","convertToSharedIndex","runOnJS","getCurrentIndex","realIndex","dataLength","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","Easing","easeOutQuart","dealWithAnimation","next","opts","count","animated","nextPage","prev","prevPage","to","direction","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 {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from \"../types\";\nimport { computedRealIndexWithAutoFillData, convertToSharedIndex } from \"../utils/computedWithAutoFillData\";\nimport { dealWithAnimation } from \"../utils/dealWithAnimation\";\nimport { handlerOffsetDirection } from \"../utils/handlerOffsetDirection\";\nimport { round } from \"../utils/log\";\n\ninterface IOpts {\n loop: boolean\n size: number\n data: TCarouselProps[\"data\"]\n autoFillData: TCarouselProps[\"autoFillData\"]\n handlerOffset: 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 handlerOffset,\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(handlerOffset.value / size);\n\n const fixed = (handlerOffset.value / size) % dataInfo.length;\n return Math.round(\n handlerOffset.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0),\n );\n }, [handlerOffset, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetValue = handlerOffset.value;\n const toInt = round(handlerOffsetValue / size) % dataInfo.length;\n const isPositive = handlerOffsetValue <= 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 handlerOffset,\n ],\n );\n\n const getCurrentIndex = React.useCallback(() => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: index.value,\n dataLength: dataInfo.originalLength,\n loop,\n autoFillData: autoFillData!,\n });\n\n return realIndex;\n }, [index, autoFillData, dataInfo, loop]);\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 handlerOffset.value = scrollWithTiming(\n -nextPage * size,\n onFinished,\n ) as any;\n }\n else {\n handlerOffset.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffset,\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 handlerOffset.value = scrollWithTiming(\n -prevPage * size,\n onFinished,\n );\n }\n else {\n handlerOffset.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffset,\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 direction = handlerOffsetDirection(handlerOffset);\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(handlerOffset.value % totalSize) / totalSize\n >= 0.5;\n }\n\n const finalOffset\n = (Math.floor(Math.abs(handlerOffset.value / totalSize))\n + (isCloseToNextLoop ? 1 : 0))\n * totalSize\n * direction\n + offset;\n\n if (animated) {\n index.value = i;\n handlerOffset.value = scrollWithTiming(finalOffset, onFinished);\n }\n else {\n handlerOffset.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffset,\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 const n = Math.round(count);\n\n if (n < 0)\n prev({ count: Math.abs(n), animated, onFinished });\n\n else\n next({ count: n, animated, onFinished });\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,2 +1,2 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.useCommonVariables=useCommonVariables;var _react=_interopRequireDefault(require("react"));var _reactNativeReanimated=require("react-native-reanimated");var _computeNewIndexWhenDataChanges=require("./computeNewIndexWhenDataChanges");var _handlerOffsetDirection=require("../utils/handlerOffsetDirection");function useCommonVariables(props){var vertical=props.vertical,height=props.height,width=props.width,data=props.data,defaultIndex=props.defaultIndex,defaultScrollOffsetValue=props.defaultScrollOffsetValue,loop=props.loop;var size=vertical?height:width;var validLength=data.length-1;var defaultHandlerOffsetValue=-Math.abs(defaultIndex*size);var _handlerOffset=(0,_reactNativeReanimated.useSharedValue)(defaultHandlerOffsetValue);var handlerOffset=defaultScrollOffsetValue!=null?defaultScrollOffsetValue:_handlerOffset;var prevData=(0,_reactNativeReanimated.useSharedValue)(data);_react.default.useEffect(function(){handlerOffset.value=defaultHandlerOffsetValue;},[vertical,handlerOffset,defaultHandlerOffsetValue]);(0,_reactNativeReanimated.useAnimatedReaction)(function(){var _f=function _f(){var _data=data.slice();var previousLength=prevData.value.length;var currentLength=_data.length;var isLengthChanged=previousLength!==currentLength;var shouldComputed=isLengthChanged&&loop;if(shouldComputed)prevData.value=_data;return{shouldComputed:shouldComputed,previousLength:previousLength,currentLength:currentLength};};_f._closure={data:data,prevData:prevData,loop:loop};_f.asString="function _f(){const{data,prevData,loop}=jsThis._closure;{const _data=data.slice();const previousLength=prevData.value.length;const currentLength=_data.length;const isLengthChanged=previousLength!==currentLength;const shouldComputed=isLengthChanged&&loop;if(shouldComputed)prevData.value=_data;return{shouldComputed:shouldComputed,previousLength:previousLength,currentLength:currentLength};}}";_f.__workletHash=9373731722865;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCommonVariables.ts (39:22)";return _f;}(),function(){var _f=function _f(_ref){var shouldComputed=_ref.shouldComputed,previousLength=_ref.previousLength,currentLength=_ref.currentLength;if(shouldComputed){var direction=(0,_handlerOffsetDirection.handlerOffsetDirection)(handlerOffset);handlerOffset.value=(0,_computeNewIndexWhenDataChanges.computeNewIndexWhenDataChanges)({direction:direction,previousLength:previousLength,currentLength:currentLength,size:size,handlerOffset:handlerOffset.value});}};_f._closure={handlerOffsetDirection:_handlerOffsetDirection.handlerOffsetDirection,handlerOffset:handlerOffset,computeNewIndexWhenDataChanges:_computeNewIndexWhenDataChanges.computeNewIndexWhenDataChanges,size:size};_f.asString="function _f({shouldComputed:shouldComputed,previousLength:previousLength,currentLength:currentLength}){const{handlerOffsetDirection,handlerOffset,computeNewIndexWhenDataChanges,size}=jsThis._closure;{if(shouldComputed){const direction=handlerOffsetDirection(handlerOffset);handlerOffset.value=computeNewIndexWhenDataChanges({direction:direction,previousLength:previousLength,currentLength:currentLength,size:size,handlerOffset:handlerOffset.value});}}}";_f.__workletHash=7425703877323;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCommonVariables.ts (54:5)";return _f;}(),[data,loop]);return{size:size,validLength:validLength,handlerOffset:handlerOffset};}
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.useCommonVariables=useCommonVariables;var _react=_interopRequireDefault(require("react"));var _reactNativeReanimated=require("react-native-reanimated");var _computeNewIndexWhenDataChanges=require("./computeNewIndexWhenDataChanges");var _handlerOffsetDirection=require("../utils/handlerOffsetDirection");function useCommonVariables(props){var vertical=props.vertical,height=props.height,width=props.width,data=props.data,defaultIndex=props.defaultIndex,defaultScrollOffsetValue=props.defaultScrollOffsetValue,loop=props.loop;var size=vertical?height:width;var validLength=data.length-1;var defaultHandlerOffsetValue=-Math.abs(defaultIndex*size);var _handlerOffset=(0,_reactNativeReanimated.useSharedValue)(defaultHandlerOffsetValue);var handlerOffset=defaultScrollOffsetValue!=null?defaultScrollOffsetValue:_handlerOffset;var prevDataLength=(0,_reactNativeReanimated.useSharedValue)(data.length);_react.default.useEffect(function(){handlerOffset.value=defaultHandlerOffsetValue;},[vertical,handlerOffset,defaultHandlerOffsetValue]);(0,_reactNativeReanimated.useAnimatedReaction)(function(){var _f=function _f(){var previousLength=prevDataLength.value;var currentLength=data.length;var isLengthChanged=previousLength!==currentLength;var shouldComputed=isLengthChanged&&loop;if(shouldComputed)prevDataLength.value=data.length;return{shouldComputed:shouldComputed,previousLength:previousLength,currentLength:currentLength};};_f._closure={prevDataLength:prevDataLength,data:data,loop:loop};_f.asString="function _f(){const{prevDataLength,data,loop}=jsThis._closure;{const previousLength=prevDataLength.value;const currentLength=data.length;const isLengthChanged=previousLength!==currentLength;const shouldComputed=isLengthChanged&&loop;if(shouldComputed)prevDataLength.value=data.length;return{shouldComputed:shouldComputed,previousLength:previousLength,currentLength:currentLength};}}";_f.__workletHash=9379463381326;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCommonVariables.ts (39:22)";return _f;}(),function(){var _f=function _f(_ref){var shouldComputed=_ref.shouldComputed,previousLength=_ref.previousLength,currentLength=_ref.currentLength;if(shouldComputed){var direction=(0,_handlerOffsetDirection.handlerOffsetDirection)(handlerOffset);handlerOffset.value=(0,_computeNewIndexWhenDataChanges.computeNewIndexWhenDataChanges)({direction:direction,previousLength:previousLength,currentLength:currentLength,size:size,handlerOffset:handlerOffset.value});}};_f._closure={handlerOffsetDirection:_handlerOffsetDirection.handlerOffsetDirection,handlerOffset:handlerOffset,computeNewIndexWhenDataChanges:_computeNewIndexWhenDataChanges.computeNewIndexWhenDataChanges,size:size};_f.asString="function _f({shouldComputed:shouldComputed,previousLength:previousLength,currentLength:currentLength}){const{handlerOffsetDirection,handlerOffset,computeNewIndexWhenDataChanges,size}=jsThis._closure;{if(shouldComputed){const direction=handlerOffsetDirection(handlerOffset);handlerOffset.value=computeNewIndexWhenDataChanges({direction:direction,previousLength:previousLength,currentLength:currentLength,size:size,handlerOffset:handlerOffset.value});}}}";_f.__workletHash=7425703877323;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCommonVariables.ts (53:5)";return _f;}(),[data,loop]);return{size:size,validLength:validLength,handlerOffset:handlerOffset};}
2
2
  //# sourceMappingURL=useCommonVariables.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["useCommonVariables.ts"],"names":["useCommonVariables","props","vertical","height","width","data","defaultIndex","defaultScrollOffsetValue","loop","size","validLength","length","defaultHandlerOffsetValue","Math","abs","_handlerOffset","handlerOffset","prevData","React","useEffect","value","_data","slice","previousLength","currentLength","isLengthChanged","shouldComputed","direction","handlerOffsetDirection","computeNewIndexWhenDataChanges"],"mappings":"0LAAA,oDAEA,8DAEA,gFAGA,uEAQO,QAASA,CAAAA,kBAAT,CACLC,KADK,CAEa,CAClB,GACEC,CAAAA,QADF,CAQID,KARJ,CACEC,QADF,CAEEC,MAFF,CAQIF,KARJ,CAEEE,MAFF,CAGEC,KAHF,CAQIH,KARJ,CAGEG,KAHF,CAIEC,IAJF,CAQIJ,KARJ,CAIEI,IAJF,CAKEC,YALF,CAQIL,KARJ,CAKEK,YALF,CAMEC,wBANF,CAQIN,KARJ,CAMEM,wBANF,CAOEC,IAPF,CAQIP,KARJ,CAOEO,IAPF,CASA,GAAMC,CAAAA,IAAI,CAAGP,QAAQ,CAAGC,MAAH,CAAYC,KAAjC,CACA,GAAMM,CAAAA,WAAW,CAAGL,IAAI,CAACM,MAAL,CAAc,CAAlC,CACA,GAAMC,CAAAA,yBAAyB,CAAG,CAACC,IAAI,CAACC,GAAL,CAASR,YAAY,CAAGG,IAAxB,CAAnC,CACA,GAAMM,CAAAA,cAAc,CAAG,0CAAuBH,yBAAvB,CAAvB,CACA,GAAMI,CAAAA,aAAa,CAAGT,wBAAH,OAAGA,wBAAH,CAA+BQ,cAAlD,CACA,GAAME,CAAAA,QAAQ,CAAG,0CAAeZ,IAAf,CAAjB,CAEAa,eAAMC,SAAN,CAAgB,UAAM,CACpBH,aAAa,CAACI,KAAd,CAAsBR,yBAAtB,CACD,CAFD,CAEG,CAACV,QAAD,CAAWc,aAAX,CAA0BJ,yBAA1B,CAFH,EAIA,8EAA0B,CACxB,GAAMS,CAAAA,KAAK,CAAGhB,IAAI,CAACiB,KAAL,EAAd,CACA,GAAMC,CAAAA,cAAc,CAAGN,QAAQ,CAACG,KAAT,CAAeT,MAAtC,CACA,GAAMa,CAAAA,aAAa,CAAGH,KAAK,CAACV,MAA5B,CACA,GAAMc,CAAAA,eAAe,CAAGF,cAAc,GAAKC,aAA3C,CACA,GAAME,CAAAA,cAAc,CAAGD,eAAe,EAAIjB,IAA1C,CAEA,GAAIkB,cAAJ,CACET,QAAQ,CAACG,KAAT,CAAiBC,KAAjB,CAEF,MAAO,CACLK,cAAc,CAAdA,cADK,CAELH,cAAc,CAAdA,cAFK,CAGLC,aAAa,CAAbA,aAHK,CAAP,CAKD,CAfD,mBApCcnB,IAoCd,UA9BoBY,QA8BpB,MA/B0CT,IA+B1C,gmBAe0D,IAApDkB,CAAAA,cAAoD,MAApDA,cAAoD,CAApCH,cAAoC,MAApCA,cAAoC,CAApBC,aAAoB,MAApBA,aAAoB,CACxD,GAAIE,cAAJ,CAAoB,CAElB,GAAMC,CAAAA,SAAS,CAAG,mDAAuBX,aAAvB,CAAlB,CAEAA,aAAa,CAACI,KAAd,CAAsB,mEAA+B,CACnDO,SAAS,CAATA,SADmD,CAEnDJ,cAAc,CAAdA,cAFmD,CAGnDC,aAAa,CAAbA,aAHmD,CAInDf,IAAI,CAAJA,IAJmD,CAKnDO,aAAa,CAAEA,aAAa,CAACI,KALsB,CAA/B,CAAtB,CAOD,CACF,CA5BD,qCA9BoBQ,8CA8BpB,eAxBmBZ,aAwBnB,gCA7BwBa,8DA6BxB,MAzBIpB,IAyBJ,ynBA4BG,CAACJ,IAAD,CAAOG,IAAP,CA5BH,EA8BA,MAAO,CACLC,IAAI,CAAJA,IADK,CAELC,WAAW,CAAXA,WAFK,CAGLM,aAAa,CAAbA,aAHK,CAAP,CAKD","sourcesContent":["import React from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport { useSharedValue, useAnimatedReaction } from \"react-native-reanimated\";\n\nimport { computeNewIndexWhenDataChanges } from \"./computeNewIndexWhenDataChanges\";\nimport type { TInitializeCarouselProps } from \"./useInitProps\";\n\nimport { handlerOffsetDirection } from \"../utils/handlerOffsetDirection\";\n\ninterface ICommonVariables {\n size: number\n validLength: number\n handlerOffset: Animated.SharedValue<number>\n}\n\nexport function useCommonVariables(\n props: TInitializeCarouselProps<any>,\n): ICommonVariables {\n const {\n vertical,\n height,\n width,\n data,\n defaultIndex,\n defaultScrollOffsetValue,\n loop,\n } = props;\n const size = vertical ? height : width;\n const validLength = data.length - 1;\n const defaultHandlerOffsetValue = -Math.abs(defaultIndex * size);\n const _handlerOffset = useSharedValue<number>(defaultHandlerOffsetValue);\n const handlerOffset = defaultScrollOffsetValue ?? _handlerOffset;\n const prevData = useSharedValue(data);\n\n React.useEffect(() => {\n handlerOffset.value = defaultHandlerOffsetValue;\n }, [vertical, handlerOffset, defaultHandlerOffsetValue]);\n\n useAnimatedReaction(() => {\n const _data = data.slice();\n const previousLength = prevData.value.length;\n const currentLength = _data.length;\n const isLengthChanged = previousLength !== currentLength;\n const shouldComputed = isLengthChanged && loop;\n\n if (shouldComputed)\n prevData.value = _data;\n\n return {\n shouldComputed,\n previousLength,\n currentLength,\n };\n }, ({ shouldComputed, previousLength, currentLength }) => {\n if (shouldComputed) {\n // direction -> 1 | -1\n const direction = handlerOffsetDirection(handlerOffset);\n\n handlerOffset.value = computeNewIndexWhenDataChanges({\n direction,\n previousLength,\n currentLength,\n size,\n handlerOffset: handlerOffset.value,\n });\n }\n }, [data, loop]);\n\n return {\n size,\n validLength,\n handlerOffset,\n };\n}\n"]}
1
+ {"version":3,"sources":["useCommonVariables.ts"],"names":["useCommonVariables","props","vertical","height","width","data","defaultIndex","defaultScrollOffsetValue","loop","size","validLength","length","defaultHandlerOffsetValue","Math","abs","_handlerOffset","handlerOffset","prevDataLength","React","useEffect","value","previousLength","currentLength","isLengthChanged","shouldComputed","direction","handlerOffsetDirection","computeNewIndexWhenDataChanges"],"mappings":"0LAAA,oDAEA,8DAEA,gFAGA,uEAQO,QAASA,CAAAA,kBAAT,CACLC,KADK,CAEa,CAClB,GACEC,CAAAA,QADF,CAQID,KARJ,CACEC,QADF,CAEEC,MAFF,CAQIF,KARJ,CAEEE,MAFF,CAGEC,KAHF,CAQIH,KARJ,CAGEG,KAHF,CAIEC,IAJF,CAQIJ,KARJ,CAIEI,IAJF,CAKEC,YALF,CAQIL,KARJ,CAKEK,YALF,CAMEC,wBANF,CAQIN,KARJ,CAMEM,wBANF,CAOEC,IAPF,CAQIP,KARJ,CAOEO,IAPF,CASA,GAAMC,CAAAA,IAAI,CAAGP,QAAQ,CAAGC,MAAH,CAAYC,KAAjC,CACA,GAAMM,CAAAA,WAAW,CAAGL,IAAI,CAACM,MAAL,CAAc,CAAlC,CACA,GAAMC,CAAAA,yBAAyB,CAAG,CAACC,IAAI,CAACC,GAAL,CAASR,YAAY,CAAGG,IAAxB,CAAnC,CACA,GAAMM,CAAAA,cAAc,CAAG,0CAAuBH,yBAAvB,CAAvB,CACA,GAAMI,CAAAA,aAAa,CAAGT,wBAAH,OAAGA,wBAAH,CAA+BQ,cAAlD,CACA,GAAME,CAAAA,cAAc,CAAG,0CAAeZ,IAAI,CAACM,MAApB,CAAvB,CAEAO,eAAMC,SAAN,CAAgB,UAAM,CACpBH,aAAa,CAACI,KAAd,CAAsBR,yBAAtB,CACD,CAFD,CAEG,CAACV,QAAD,CAAWc,aAAX,CAA0BJ,yBAA1B,CAFH,EAIA,8EAA0B,CACxB,GAAMS,CAAAA,cAAc,CAAGJ,cAAc,CAACG,KAAtC,CACA,GAAME,CAAAA,aAAa,CAAGjB,IAAI,CAACM,MAA3B,CACA,GAAMY,CAAAA,eAAe,CAAGF,cAAc,GAAKC,aAA3C,CACA,GAAME,CAAAA,cAAc,CAAGD,eAAe,EAAIf,IAA1C,CAEA,GAAIgB,cAAJ,CACEP,cAAc,CAACG,KAAf,CAAuBf,IAAI,CAACM,MAA5B,CAEF,MAAO,CACLa,cAAc,CAAdA,cADK,CAELH,cAAc,CAAdA,cAFK,CAGLC,aAAa,CAAbA,aAHK,CAAP,CAKD,CAdD,6BAhCoBL,cAgCpB,MAhC2CZ,IAgC3C,MAjC0CG,IAiC1C,ulBAc0D,IAApDgB,CAAAA,cAAoD,MAApDA,cAAoD,CAApCH,cAAoC,MAApCA,cAAoC,CAApBC,aAAoB,MAApBA,aAAoB,CACxD,GAAIE,cAAJ,CAAoB,CAElB,GAAMC,CAAAA,SAAS,CAAG,mDAAuBT,aAAvB,CAAlB,CAEAA,aAAa,CAACI,KAAd,CAAsB,mEAA+B,CACnDK,SAAS,CAATA,SADmD,CAEnDJ,cAAc,CAAdA,cAFmD,CAGnDC,aAAa,CAAbA,aAHmD,CAInDb,IAAI,CAAJA,IAJmD,CAKnDO,aAAa,CAAEA,aAAa,CAACI,KALsB,CAA/B,CAAtB,CAOD,CACF,CA3BD,qCA9BoBM,8CA8BpB,eAxBmBV,aAwBnB,gCA7BwBW,8DA6BxB,MAzBIlB,IAyBJ,ynBA2BG,CAACJ,IAAD,CAAOG,IAAP,CA3BH,EA6BA,MAAO,CACLC,IAAI,CAAJA,IADK,CAELC,WAAW,CAAXA,WAFK,CAGLM,aAAa,CAAbA,aAHK,CAAP,CAKD","sourcesContent":["import React from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport { useSharedValue, useAnimatedReaction } from \"react-native-reanimated\";\n\nimport { computeNewIndexWhenDataChanges } from \"./computeNewIndexWhenDataChanges\";\nimport type { TInitializeCarouselProps } from \"./useInitProps\";\n\nimport { handlerOffsetDirection } from \"../utils/handlerOffsetDirection\";\n\ninterface ICommonVariables {\n size: number\n validLength: number\n handlerOffset: Animated.SharedValue<number>\n}\n\nexport function useCommonVariables(\n props: TInitializeCarouselProps<any>,\n): ICommonVariables {\n const {\n vertical,\n height,\n width,\n data,\n defaultIndex,\n defaultScrollOffsetValue,\n loop,\n } = props;\n const size = vertical ? height : width;\n const validLength = data.length - 1;\n const defaultHandlerOffsetValue = -Math.abs(defaultIndex * size);\n const _handlerOffset = useSharedValue<number>(defaultHandlerOffsetValue);\n const handlerOffset = defaultScrollOffsetValue ?? _handlerOffset;\n const prevDataLength = useSharedValue(data.length);\n\n React.useEffect(() => {\n handlerOffset.value = defaultHandlerOffsetValue;\n }, [vertical, handlerOffset, defaultHandlerOffsetValue]);\n\n useAnimatedReaction(() => {\n const previousLength = prevDataLength.value;\n const currentLength = data.length;\n const isLengthChanged = previousLength !== currentLength;\n const shouldComputed = isLengthChanged && loop;\n\n if (shouldComputed)\n prevDataLength.value = data.length;\n\n return {\n shouldComputed,\n previousLength,\n currentLength,\n };\n }, ({ shouldComputed, previousLength, currentLength }) => {\n if (shouldComputed) {\n // direction -> 1 | -1\n const direction = handlerOffsetDirection(handlerOffset);\n\n handlerOffset.value = computeNewIndexWhenDataChanges({\n direction,\n previousLength,\n currentLength,\n size,\n handlerOffset: handlerOffset.value,\n });\n }\n }, [data, loop]);\n\n return {\n size,\n validLength,\n handlerOffset,\n };\n}\n"]}
@@ -1,2 +1,2 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.useInitProps=useInitProps;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _react=_interopRequireDefault(require("react"));var _computedWithAutoFillData=require("../utils/computedWithAutoFillData");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;}function useInitProps(props){var _props$enableSnap;var _props$defaultIndex=props.defaultIndex,defaultIndex=_props$defaultIndex===void 0?0:_props$defaultIndex,_props$data=props.data,rawData=_props$data===void 0?[]:_props$data,_props$loop=props.loop,loop=_props$loop===void 0?true:_props$loop,_props$enabled=props.enabled,enabled=_props$enabled===void 0?true:_props$enabled,_props$autoPlayInterv=props.autoPlayInterval,_autoPlayInterval=_props$autoPlayInterv===void 0?1000:_props$autoPlayInterv,_props$scrollAnimatio=props.scrollAnimationDuration,scrollAnimationDuration=_props$scrollAnimatio===void 0?500:_props$scrollAnimatio,_props$style=props.style,style=_props$style===void 0?{}:_props$style,_props$panGestureHand=props.panGestureHandlerProps,panGestureHandlerProps=_props$panGestureHand===void 0?{}:_props$panGestureHand,_props$pagingEnabled=props.pagingEnabled,pagingEnabled=_props$pagingEnabled===void 0?true:_props$pagingEnabled,_props$autoFillData=props.autoFillData,autoFillData=_props$autoFillData===void 0?true:_props$autoFillData,_props$snapEnabled=props.snapEnabled,snapEnabled=_props$snapEnabled===void 0?(_props$enableSnap=props.enableSnap)!=null?_props$enableSnap:true:_props$snapEnabled,_width=props.width,_height=props.height;var width=Math.round(_width||0);var height=Math.round(_height||0);var autoPlayInterval=Math.max(_autoPlayInterval,0);var data=_react.default.useMemo(function(){return(0,_computedWithAutoFillData.computedFillDataWithAutoFillData)({loop:loop,autoFillData:autoFillData,data:rawData,dataLength:rawData.length});},[rawData,loop,autoFillData]);if(props.mode==="vertical-stack"||props.mode==="horizontal-stack"){var _props$modeConfig$sho,_props$modeConfig;if(!props.modeConfig)props.modeConfig={};props.modeConfig.showLength=(_props$modeConfig$sho=(_props$modeConfig=props.modeConfig)==null?void 0:_props$modeConfig.showLength)!=null?_props$modeConfig$sho:data.length-1;}return _objectSpread(_objectSpread({},props),{},{defaultIndex:defaultIndex,autoFillData:autoFillData,data:data,rawData:rawData,loop:loop,enabled:enabled,autoPlayInterval:autoPlayInterval,scrollAnimationDuration:scrollAnimationDuration,style:style,panGestureHandlerProps:panGestureHandlerProps,pagingEnabled:pagingEnabled,snapEnabled:snapEnabled,width:width,height:height});}
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.useInitProps=useInitProps;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _react=_interopRequireDefault(require("react"));var _computedWithAutoFillData=require("../utils/computedWithAutoFillData");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;}function useInitProps(props){var _props$enableSnap;var _props$defaultIndex=props.defaultIndex,defaultIndex=_props$defaultIndex===void 0?0:_props$defaultIndex,_props$data=props.data,rawData=_props$data===void 0?[]:_props$data,_props$loop=props.loop,loop=_props$loop===void 0?true:_props$loop,_props$enabled=props.enabled,enabled=_props$enabled===void 0?true:_props$enabled,_props$autoPlayInterv=props.autoPlayInterval,_autoPlayInterval=_props$autoPlayInterv===void 0?1000:_props$autoPlayInterv,_props$scrollAnimatio=props.scrollAnimationDuration,scrollAnimationDuration=_props$scrollAnimatio===void 0?500:_props$scrollAnimatio,_props$style=props.style,style=_props$style===void 0?{}:_props$style,_props$panGestureHand=props.panGestureHandlerProps,panGestureHandlerProps=_props$panGestureHand===void 0?{}:_props$panGestureHand,_props$pagingEnabled=props.pagingEnabled,pagingEnabled=_props$pagingEnabled===void 0?true:_props$pagingEnabled,_props$autoFillData=props.autoFillData,autoFillData=_props$autoFillData===void 0?true:_props$autoFillData,_props$snapEnabled=props.snapEnabled,snapEnabled=_props$snapEnabled===void 0?(_props$enableSnap=props.enableSnap)!=null?_props$enableSnap:true:_props$snapEnabled,_width=props.width,_height=props.height;var width=Math.round(_width||0);var height=Math.round(_height||0);var autoPlayInterval=Math.max(_autoPlayInterval,0);var data=_react.default.useMemo(function(){var computedData=(0,_computedWithAutoFillData.computedFillDataWithAutoFillData)({loop:loop,autoFillData:autoFillData,data:rawData,dataLength:rawData.length});return Array.from({length:computedData.length});},[rawData,loop,autoFillData]);if(props.mode==="vertical-stack"||props.mode==="horizontal-stack"){var _props$modeConfig$sho,_props$modeConfig;if(!props.modeConfig)props.modeConfig={};props.modeConfig.showLength=(_props$modeConfig$sho=(_props$modeConfig=props.modeConfig)==null?void 0:_props$modeConfig.showLength)!=null?_props$modeConfig$sho:data.length-1;}return _objectSpread(_objectSpread({},props),{},{defaultIndex:defaultIndex,autoFillData:autoFillData,data:data,rawData:rawData,loop:loop,enabled:enabled,autoPlayInterval:autoPlayInterval,scrollAnimationDuration:scrollAnimationDuration,style:style,panGestureHandlerProps:panGestureHandlerProps,pagingEnabled:pagingEnabled,snapEnabled:snapEnabled,width:width,height:height});}
2
2
  //# sourceMappingURL=useInitProps.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["useInitProps.ts"],"names":["useInitProps","props","defaultIndex","data","rawData","loop","enabled","autoPlayInterval","_autoPlayInterval","scrollAnimationDuration","style","panGestureHandlerProps","pagingEnabled","autoFillData","snapEnabled","enableSnap","_width","width","_height","height","Math","round","max","React","useMemo","dataLength","length","mode","modeConfig","showLength"],"mappings":"4QAAA,oDAGA,2E,kxBAqBO,QAASA,CAAAA,YAAT,CACLC,KADK,CAEwB,uBAC7B,wBAcIA,KAdJ,CACEC,YADF,CACEA,YADF,8BACiB,CADjB,iCAcID,KAdJ,CAEEE,IAFF,CAEQC,OAFR,sBAEkB,EAFlB,yBAcIH,KAdJ,CAGEI,IAHF,CAGEA,IAHF,sBAGS,IAHT,4BAcIJ,KAdJ,CAIEK,OAJF,CAIEA,OAJF,yBAIY,IAJZ,sCAcIL,KAdJ,CAKEM,gBALF,CAKoBC,iBALpB,gCAKwC,IALxC,6CAcIP,KAdJ,CAMEQ,uBANF,CAMEA,uBANF,gCAM4B,GAN5B,oCAcIR,KAdJ,CAOES,KAPF,CAOEA,KAPF,uBAOU,EAPV,oCAcIT,KAdJ,CAQEU,sBARF,CAQEA,sBARF,gCAQ2B,EAR3B,4CAcIV,KAdJ,CASEW,aATF,CASEA,aATF,+BASkB,IATlB,0CAcIX,KAdJ,CAUEY,YAVF,CAUEA,YAVF,8BAUiB,IAVjB,wCAcIZ,KAdJ,CAWEa,WAXF,CAWEA,WAXF,gDAWgBb,KAAK,CAACc,UAXtB,0BAWoC,IAXpC,oBAYSC,MAZT,CAcIf,KAdJ,CAYEgB,KAZF,CAaUC,OAbV,CAcIjB,KAdJ,CAaEkB,MAbF,CAgBA,GAAMF,CAAAA,KAAK,CAAGG,IAAI,CAACC,KAAL,CAAWL,MAAM,EAAI,CAArB,CAAd,CACA,GAAMG,CAAAA,MAAM,CAAGC,IAAI,CAACC,KAAL,CAAWH,OAAO,EAAI,CAAtB,CAAf,CACA,GAAMX,CAAAA,gBAAgB,CAAGa,IAAI,CAACE,GAAL,CAASd,iBAAT,CAA4B,CAA5B,CAAzB,CAEA,GAAML,CAAAA,IAAI,CAAGoB,eAAMC,OAAN,CACX,iBACE,+DAAoC,CAClCnB,IAAI,CAAJA,IADkC,CAElCQ,YAAY,CAAZA,YAFkC,CAGlCV,IAAI,CAAEC,OAH4B,CAIlCqB,UAAU,CAAErB,OAAO,CAACsB,MAJc,CAApC,CADF,EADW,CAQX,CAACtB,OAAD,CAAUC,IAAV,CAAgBQ,YAAhB,CARW,CAAb,CAWA,GAAIZ,KAAK,CAAC0B,IAAN,GAAe,gBAAf,EAAmC1B,KAAK,CAAC0B,IAAN,GAAe,kBAAtD,CAA0E,6CACxE,GAAI,CAAC1B,KAAK,CAAC2B,UAAX,CACE3B,KAAK,CAAC2B,UAAN,CAAmB,EAAnB,CAEF3B,KAAK,CAAC2B,UAAN,CAAiBC,UAAjB,2CACU5B,KAAK,CAAC2B,UADhB,eACU,kBAAkBC,UAD5B,8BAC0C1B,IAAI,CAACuB,MAAL,CAAc,CADxD,CAED,CACD,sCACKzB,KADL,MAEEC,YAAY,CAAZA,YAFF,CAGEW,YAAY,CAAZA,YAHF,CAIEV,IAAI,CAAJA,IAJF,CAKEC,OAAO,CAAPA,OALF,CAMEC,IAAI,CAAJA,IANF,CAOEC,OAAO,CAAPA,OAPF,CAQEC,gBAAgB,CAAhBA,gBARF,CASEE,uBAAuB,CAAvBA,uBATF,CAUEC,KAAK,CAALA,KAVF,CAWEC,sBAAsB,CAAtBA,sBAXF,CAYEC,aAAa,CAAbA,aAZF,CAaEE,WAAW,CAAXA,WAbF,CAcEG,KAAK,CAALA,KAdF,CAeEE,MAAM,CAANA,MAfF,GAiBD","sourcesContent":["import React from \"react\";\n\nimport type { TCarouselProps } from \"../types\";\nimport { computedFillDataWithAutoFillData } from \"../utils/computedWithAutoFillData\";\n\ntype TGetRequiredProps<P extends keyof TCarouselProps> = Record<\nP,\nRequired<TCarouselProps>[P]\n>;\n\nexport type TInitializeCarouselProps<T> = TCarouselProps<T> &\nTGetRequiredProps<\n| \"defaultIndex\"\n| \"loop\"\n| \"width\"\n| \"height\"\n| \"scrollAnimationDuration\"\n| \"autoPlayInterval\"\n| \"autoFillData\"\n> & {\n // Raw data that has not been processed\n rawData: T[]\n};\n\nexport function useInitProps<T>(\n props: TCarouselProps<T>,\n): TInitializeCarouselProps<T> {\n const {\n defaultIndex = 0,\n data: rawData = [],\n loop = true,\n enabled = true,\n autoPlayInterval: _autoPlayInterval = 1000,\n scrollAnimationDuration = 500,\n style = {},\n panGestureHandlerProps = {},\n pagingEnabled = true,\n autoFillData = true,\n snapEnabled = props.enableSnap ?? true,\n width: _width,\n height: _height,\n } = props;\n\n const width = Math.round(_width || 0);\n const height = Math.round(_height || 0);\n const autoPlayInterval = Math.max(_autoPlayInterval, 0);\n\n const data = React.useMemo<T[]>(\n () =>\n computedFillDataWithAutoFillData<T>({\n loop,\n autoFillData,\n data: rawData,\n dataLength: rawData.length,\n }),\n [rawData, loop, autoFillData],\n );\n\n if (props.mode === \"vertical-stack\" || props.mode === \"horizontal-stack\") {\n if (!props.modeConfig)\n props.modeConfig = {};\n\n props.modeConfig.showLength\n = props.modeConfig?.showLength ?? data.length - 1;\n }\n return {\n ...props,\n defaultIndex,\n autoFillData,\n data,\n rawData,\n loop,\n enabled,\n autoPlayInterval,\n scrollAnimationDuration,\n style,\n panGestureHandlerProps,\n pagingEnabled,\n snapEnabled,\n width,\n height,\n };\n}\n"]}
1
+ {"version":3,"sources":["useInitProps.ts"],"names":["useInitProps","props","defaultIndex","data","rawData","loop","enabled","autoPlayInterval","_autoPlayInterval","scrollAnimationDuration","style","panGestureHandlerProps","pagingEnabled","autoFillData","snapEnabled","enableSnap","_width","width","_height","height","Math","round","max","React","useMemo","computedData","dataLength","length","Array","from","mode","modeConfig","showLength"],"mappings":"4QAAA,oDAGA,2E,kxBAqBO,QAASA,CAAAA,YAAT,CACLC,KADK,CAEwB,uBAC7B,wBAcIA,KAdJ,CACEC,YADF,CACEA,YADF,8BACiB,CADjB,iCAcID,KAdJ,CAEEE,IAFF,CAEQC,OAFR,sBAEkB,EAFlB,yBAcIH,KAdJ,CAGEI,IAHF,CAGEA,IAHF,sBAGS,IAHT,4BAcIJ,KAdJ,CAIEK,OAJF,CAIEA,OAJF,yBAIY,IAJZ,sCAcIL,KAdJ,CAKEM,gBALF,CAKoBC,iBALpB,gCAKwC,IALxC,6CAcIP,KAdJ,CAMEQ,uBANF,CAMEA,uBANF,gCAM4B,GAN5B,oCAcIR,KAdJ,CAOES,KAPF,CAOEA,KAPF,uBAOU,EAPV,oCAcIT,KAdJ,CAQEU,sBARF,CAQEA,sBARF,gCAQ2B,EAR3B,4CAcIV,KAdJ,CASEW,aATF,CASEA,aATF,+BASkB,IATlB,0CAcIX,KAdJ,CAUEY,YAVF,CAUEA,YAVF,8BAUiB,IAVjB,wCAcIZ,KAdJ,CAWEa,WAXF,CAWEA,WAXF,gDAWgBb,KAAK,CAACc,UAXtB,0BAWoC,IAXpC,oBAYSC,MAZT,CAcIf,KAdJ,CAYEgB,KAZF,CAaUC,OAbV,CAcIjB,KAdJ,CAaEkB,MAbF,CAgBA,GAAMF,CAAAA,KAAK,CAAGG,IAAI,CAACC,KAAL,CAAWL,MAAM,EAAI,CAArB,CAAd,CACA,GAAMG,CAAAA,MAAM,CAAGC,IAAI,CAACC,KAAL,CAAWH,OAAO,EAAI,CAAtB,CAAf,CACA,GAAMX,CAAAA,gBAAgB,CAAGa,IAAI,CAACE,GAAL,CAASd,iBAAT,CAA4B,CAA5B,CAAzB,CAEA,GAAML,CAAAA,IAAI,CAAGoB,eAAMC,OAAN,CACX,UAAM,CACJ,GAAMC,CAAAA,YAAY,CAAG,+DAAoC,CACvDpB,IAAI,CAAJA,IADuD,CAEvDQ,YAAY,CAAZA,YAFuD,CAGvDV,IAAI,CAAEC,OAHiD,CAIvDsB,UAAU,CAAEtB,OAAO,CAACuB,MAJmC,CAApC,CAArB,CAOA,MAAOC,CAAAA,KAAK,CAACC,IAAN,CAAW,CAAEF,MAAM,CAAEF,YAAY,CAACE,MAAvB,CAAX,CAAP,CACD,CAVU,CAWX,CAACvB,OAAD,CAAUC,IAAV,CAAgBQ,YAAhB,CAXW,CAAb,CAcA,GAAIZ,KAAK,CAAC6B,IAAN,GAAe,gBAAf,EAAmC7B,KAAK,CAAC6B,IAAN,GAAe,kBAAtD,CAA0E,6CACxE,GAAI,CAAC7B,KAAK,CAAC8B,UAAX,CACE9B,KAAK,CAAC8B,UAAN,CAAmB,EAAnB,CAEF9B,KAAK,CAAC8B,UAAN,CAAiBC,UAAjB,2CAA8B/B,KAAK,CAAC8B,UAApC,eAA8B,kBAAkBC,UAAhD,8BAA8D7B,IAAI,CAACwB,MAAL,CAAc,CAA5E,CACD,CAED,sCACK1B,KADL,MAEEC,YAAY,CAAZA,YAFF,CAGEW,YAAY,CAAZA,YAHF,CAIEV,IAAI,CAAJA,IAJF,CAKEC,OAAO,CAAPA,OALF,CAMEC,IAAI,CAAJA,IANF,CAOEC,OAAO,CAAPA,OAPF,CAQEC,gBAAgB,CAAhBA,gBARF,CASEE,uBAAuB,CAAvBA,uBATF,CAUEC,KAAK,CAALA,KAVF,CAWEC,sBAAsB,CAAtBA,sBAXF,CAYEC,aAAa,CAAbA,aAZF,CAaEE,WAAW,CAAXA,WAbF,CAcEG,KAAK,CAALA,KAdF,CAeEE,MAAM,CAANA,MAfF,GAiBD","sourcesContent":["import React from \"react\";\n\nimport type { TCarouselProps } from \"../types\";\nimport { computedFillDataWithAutoFillData } from \"../utils/computedWithAutoFillData\";\n\ntype TGetRequiredProps<P extends keyof TCarouselProps> = Record<\nP,\nRequired<TCarouselProps>[P]\n>;\n\nexport type TInitializeCarouselProps<T> = TCarouselProps<T> &\nTGetRequiredProps<\n| \"defaultIndex\"\n| \"loop\"\n| \"width\"\n| \"height\"\n| \"scrollAnimationDuration\"\n| \"autoPlayInterval\"\n| \"autoFillData\"\n> & {\n // Raw data that has not been processed\n rawData: T[]\n};\n\nexport function useInitProps<T>(\n props: TCarouselProps<T>,\n): TInitializeCarouselProps<T> {\n const {\n defaultIndex = 0,\n data: rawData = [],\n loop = true,\n enabled = true,\n autoPlayInterval: _autoPlayInterval = 1000,\n scrollAnimationDuration = 500,\n style = {},\n panGestureHandlerProps = {},\n pagingEnabled = true,\n autoFillData = true,\n snapEnabled = props.enableSnap ?? true,\n width: _width,\n height: _height,\n } = props;\n\n const width = Math.round(_width || 0);\n const height = Math.round(_height || 0);\n const autoPlayInterval = Math.max(_autoPlayInterval, 0);\n\n const data = React.useMemo<T[]>(\n () => {\n const computedData = computedFillDataWithAutoFillData<T>({\n loop,\n autoFillData,\n data: rawData,\n dataLength: rawData.length,\n });\n\n return Array.from({ length: computedData.length });\n },\n [rawData, loop, autoFillData],\n );\n\n if (props.mode === \"vertical-stack\" || props.mode === \"horizontal-stack\") {\n if (!props.modeConfig)\n props.modeConfig = {};\n\n props.modeConfig.showLength = props.modeConfig?.showLength ?? data.length - 1;\n }\n\n return {\n ...props,\n defaultIndex,\n autoFillData,\n data,\n rawData,\n loop,\n enabled,\n autoPlayInterval,\n scrollAnimationDuration,\n style,\n panGestureHandlerProps,\n pagingEnabled,\n snapEnabled,\n width,\n height,\n };\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import React, { useRef } from "react";
2
2
  import { runOnJS, useAnimatedReaction, useSharedValue } from "react-native-reanimated";
3
3
  import { Easing } from "../constants";
4
- import { convertToSharedIndex } from "../utils/computedWithAutoFillData";
4
+ import { computedRealIndexWithAutoFillData, convertToSharedIndex } from "../utils/computedWithAutoFillData";
5
5
  import { dealWithAnimation } from "../utils/dealWithAnimation";
6
6
  import { handlerOffsetDirection } from "../utils/handlerOffsetDirection";
7
7
  import { round } from "../utils/log";
@@ -59,8 +59,14 @@ export function useCarouselController(options) {
59
59
  runOnJS(setSharedIndex)(newSharedIndexValue);
60
60
  }, [sharedPreIndex, sharedIndex, size, dataInfo, index, loop, autoFillData, handlerOffset]);
61
61
  const getCurrentIndex = React.useCallback(() => {
62
- return index.value;
63
- }, [index]);
62
+ const realIndex = computedRealIndexWithAutoFillData({
63
+ index: index.value,
64
+ dataLength: dataInfo.originalLength,
65
+ loop,
66
+ autoFillData: autoFillData
67
+ });
68
+ return realIndex;
69
+ }, [index, autoFillData, dataInfo, loop]);
64
70
  const canSliding = React.useCallback(() => {
65
71
  return !dataInfo.disable;
66
72
  }, [dataInfo]);
@@ -1 +1 @@
1
- {"version":3,"sources":["useCarouselController.tsx"],"names":["React","useRef","runOnJS","useAnimatedReaction","useSharedValue","Easing","convertToSharedIndex","dealWithAnimation","handlerOffsetDirection","round","useCarouselController","options","size","data","loop","handlerOffset","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetValue","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","direction","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 {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from \"../types\";\nimport { convertToSharedIndex } from \"../utils/computedWithAutoFillData\";\nimport { dealWithAnimation } from \"../utils/dealWithAnimation\";\nimport { handlerOffsetDirection } from \"../utils/handlerOffsetDirection\";\nimport { round } from \"../utils/log\";\n\ninterface IOpts {\n loop: boolean\n size: number\n data: TCarouselProps[\"data\"]\n autoFillData: TCarouselProps[\"autoFillData\"]\n handlerOffset: 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 handlerOffset,\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(handlerOffset.value / size);\n\n const fixed = (handlerOffset.value / size) % dataInfo.length;\n return Math.round(\n handlerOffset.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0),\n );\n }, [handlerOffset, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetValue = handlerOffset.value;\n const toInt = round(handlerOffsetValue / size) % dataInfo.length;\n const isPositive = handlerOffsetValue <= 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 handlerOffset,\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 handlerOffset.value = scrollWithTiming(\n -nextPage * size,\n onFinished,\n ) as any;\n }\n else {\n handlerOffset.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffset,\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 handlerOffset.value = scrollWithTiming(\n -prevPage * size,\n onFinished,\n );\n }\n else {\n handlerOffset.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffset,\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 direction = handlerOffsetDirection(handlerOffset);\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(handlerOffset.value % totalSize) / totalSize\n >= 0.5;\n }\n\n const finalOffset\n = (Math.floor(Math.abs(handlerOffset.value / totalSize))\n + (isCloseToNextLoop ? 1 : 0))\n * totalSize\n * direction\n + offset;\n\n if (animated) {\n index.value = i;\n handlerOffset.value = scrollWithTiming(finalOffset, onFinished);\n }\n else {\n handlerOffset.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffset,\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 const n = Math.round(count);\n\n if (n < 0)\n prev({ count: Math.abs(n), animated, onFinished });\n\n else\n next({ count: n, animated, onFinished });\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","runOnJS","useAnimatedReaction","useSharedValue","Easing","computedRealIndexWithAutoFillData","convertToSharedIndex","dealWithAnimation","handlerOffsetDirection","round","useCarouselController","options","size","data","loop","handlerOffset","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","realIndex","dataLength","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","direction","offset","totalSize","isCloseToNextLoop","finalOffset","floor","scrollTo","n","getSharedIndex"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,MAAhB,QAA8B,OAA9B;AAEA,SACEC,OADF,EAEEC,mBAFF,EAGEC,cAHF,QAIO,yBAJP;AAMA,SAASC,MAAT,QAAuB,cAAvB;AAMA,SAASC,iCAAT,EAA4CC,oBAA5C,QAAwE,mCAAxE;AACA,SAASC,iBAAT,QAAkC,4BAAlC;AACA,SAASC,sBAAT,QAAuC,iCAAvC;AACA,SAASC,KAAT,QAAsB,cAAtB;AAuBA,OAAO,SAASC,qBAAT,CAA+BC,OAA/B,EAAoE;AACzE,QAAM;AACJC,IAAAA,IADI;AAEJC,IAAAA,IAFI;AAGJC,IAAAA,IAHI;AAIJC,IAAAA,aAJI;AAKJC,IAAAA,aALI;AAMJC,IAAAA,YAAY,GAAG,CANX;AAOJC,IAAAA,QAPI;AAQJC,IAAAA;AARI,MASFR,OATJ;AAWA,QAAMS,QAAQ,GAAGrB,KAAK,CAACsB,OAAN,CACf,OAAO;AACLC,IAAAA,MAAM,EAAET,IAAI,CAACS,MADR;AAELC,IAAAA,OAAO,EAAE,CAACV,IAAI,CAACS,MAFV;AAGLE,IAAAA,cAAc,EAAEX,IAAI,CAACS;AAHhB,GAAP,CADe,EAMf,CAACT,IAAD,CANe,CAAjB;AASA,QAAMY,KAAK,GAAGtB,cAAc,CAASc,YAAT,CAA5B,CArByE,CAsBzE;;AACA,QAAMS,WAAW,GAAG1B,MAAM,CAASiB,YAAT,CAA1B;AACA,QAAMU,cAAc,GAAG3B,MAAM,CAASiB,YAAT,CAA7B;AAEA,QAAMW,gBAAgB,GAAG7B,KAAK,CAAC8B,WAAN,CAAkB,MAAM;AAC/C,QAAIf,IAAJ,EACE,OAAO,CAACgB,IAAI,CAACrB,KAAL,CAAWM,aAAa,CAACgB,KAAd,GAAsBnB,IAAjC,CAAR;AAEF,UAAMoB,KAAK,GAAIjB,aAAa,CAACgB,KAAd,GAAsBnB,IAAvB,GAA+BQ,QAAQ,CAACE,MAAtD;AACA,WAAOQ,IAAI,CAACrB,KAAL,CACLM,aAAa,CAACgB,KAAd,IAAuB,CAAvB,GACID,IAAI,CAACG,GAAL,CAASD,KAAT,CADJ,GAEIF,IAAI,CAACG,GAAL,CAASD,KAAK,GAAG,CAAR,GAAYZ,QAAQ,CAACE,MAAT,GAAkBU,KAA9B,GAAsC,CAA/C,CAHC,CAAP;AAKD,GAVwB,EAUtB,CAACjB,aAAD,EAAgBK,QAAhB,EAA0BR,IAA1B,EAAgCE,IAAhC,CAVsB,CAAzB;;AAYA,WAASoB,cAAT,CAAwBC,cAAxB,EAAgD;AAC9CT,IAAAA,WAAW,CAACU,OAAZ,GAAsBD,cAAtB;AACD;;AAEDjC,EAAAA,mBAAmB,CACjB,MAAM;AACJ,UAAMmC,kBAAkB,GAAGtB,aAAa,CAACgB,KAAzC;AACA,UAAMO,KAAK,GAAG7B,KAAK,CAAC4B,kBAAkB,GAAGzB,IAAtB,CAAL,GAAmCQ,QAAQ,CAACE,MAA1D;AACA,UAAMiB,UAAU,GAAGF,kBAAkB,IAAI,CAAzC;AACA,UAAMG,CAAC,GAAGD,UAAU,GAChBT,IAAI,CAACG,GAAL,CAASK,KAAT,CADgB,GAEhBR,IAAI,CAACG,GAAL,CAASK,KAAK,GAAG,CAAR,GAAYlB,QAAQ,CAACE,MAAT,GAAkBgB,KAA9B,GAAsC,CAA/C,CAFJ;AAIA,UAAMG,mBAAmB,GAAGnC,oBAAoB,CAAC;AAC/CQ,MAAAA,IAD+C;AAE/C4B,MAAAA,aAAa,EAAEtB,QAAQ,CAACI,cAFuB;AAG/CL,MAAAA,YAAY,EAAEA,YAHiC;AAI/CM,MAAAA,KAAK,EAAEe;AAJwC,KAAD,CAAhD;AAOA,WAAO;AACLA,MAAAA,CADK;AAELC,MAAAA;AAFK,KAAP;AAID,GApBgB,EAqBjB,QAAgC;AAAA,QAA/B;AAAED,MAAAA,CAAF;AAAKC,MAAAA;AAAL,KAA+B;AAC9BhB,IAAAA,KAAK,CAACM,KAAN,GAAcS,CAAd;AACAvC,IAAAA,OAAO,CAACiC,cAAD,CAAP,CAAwBO,mBAAxB;AACD,GAxBgB,EAyBjB,CACEd,cADF,EAEED,WAFF,EAGEd,IAHF,EAIEQ,QAJF,EAKEK,KALF,EAMEX,IANF,EAOEK,YAPF,EAQEJ,aARF,CAzBiB,CAAnB;AAqCA,QAAM4B,eAAe,GAAG5C,KAAK,CAAC8B,WAAN,CAAkB,MAAM;AAC9C,UAAMe,SAAS,GAAGvC,iCAAiC,CAAC;AAClDoB,MAAAA,KAAK,EAAEA,KAAK,CAACM,KADqC;AAElDc,MAAAA,UAAU,EAAEzB,QAAQ,CAACI,cAF6B;AAGlDV,MAAAA,IAHkD;AAIlDK,MAAAA,YAAY,EAAEA;AAJoC,KAAD,CAAnD;AAOA,WAAOyB,SAAP;AACD,GATuB,EASrB,CAACnB,KAAD,EAAQN,YAAR,EAAsBC,QAAtB,EAAgCN,IAAhC,CATqB,CAAxB;AAWA,QAAMgC,UAAU,GAAG/C,KAAK,CAAC8B,WAAN,CAAkB,MAAM;AACzC,WAAO,CAACT,QAAQ,CAACG,OAAjB;AACD,GAFkB,EAEhB,CAACH,QAAD,CAFgB,CAAnB;AAIA,QAAM2B,WAAW,GAAGhD,KAAK,CAAC8B,WAAN,CAAkB,MAAM;AAAA;;AAC1C,4BAAAlB,OAAO,CAACoC,WAAR,mFAAApC,OAAO;AACR,GAFmB,EAEjB,CAACA,OAAD,CAFiB,CAApB;AAIA,QAAMqC,aAAa,GAAGjD,KAAK,CAAC8B,WAAN,CAAkB,MAAM;AAAA;;AAC5C,6BAAAlB,OAAO,CAACqC,aAAR,qFAAArC,OAAO;AACR,GAFqB,EAEnB,CAACA,OAAD,CAFmB,CAAtB;AAIA,QAAMsC,gBAAgB,GAAGlD,KAAK,CAAC8B,WAAN,CACvB,CAACqB,OAAD,EAAkBC,UAAlB,KAA8C;AAC5C;;AACA,UAAMC,QAAQ,GAAIC,UAAD,IAAyB;AACxC;;AACA,UAAIA,UAAJ,EAAgB;AACdpD,QAAAA,OAAO,CAAC8C,WAAD,CAAP;AACAI,QAAAA,UAAU,IAAIlD,OAAO,CAACkD,UAAD,CAAP,EAAd;AACD;AACF,KAND;;AAQA,UAAMG,oBAAyC,GAAG;AAChDC,MAAAA,IAAI,EAAE,QAD0C;AAEhDC,MAAAA,MAAM,EAAE;AAAEtC,QAAAA,QAAF;AAAYuC,QAAAA,MAAM,EAAErD,MAAM,CAACsD;AAA3B;AAFwC,KAAlD;AAKA,WAAOnD,iBAAiB,CAACS,aAAD,aAACA,aAAD,cAACA,aAAD,GAAkBsC,oBAAlB,CAAjB,CACLJ,OADK,EAELE,QAFK,CAAP;AAID,GApBsB,EAqBvB,CAAClC,QAAD,EAAWF,aAAX,EAA0B+B,WAA1B,CArBuB,CAAzB;AAwBA,QAAMY,IAAI,GAAG5D,KAAK,CAAC8B,WAAN,CACX,YAAuC;AACrC;;AADqC,QAAtC+B,IAAsC,uEAAP,EAAO;AAErC,UAAM;AAAEC,MAAAA,KAAK,GAAG,CAAV;AAAaC,MAAAA,QAAQ,GAAG,IAAxB;AAA8BX,MAAAA;AAA9B,QAA6CS,IAAnD;AACA,QAAI,CAACd,UAAU,EAAX,IAAkB,CAAChC,IAAD,IAASW,KAAK,CAACM,KAAN,IAAeX,QAAQ,CAACE,MAAT,GAAkB,CAAhE,EACE;AAEF0B,IAAAA,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa;AAEb,UAAMe,QAAQ,GAAGnC,gBAAgB,KAAKiC,KAAtC;AACApC,IAAAA,KAAK,CAACM,KAAN,GAAcgC,QAAd;;AAEA,QAAID,QAAJ,EAAc;AACZ/C,MAAAA,aAAa,CAACgB,KAAd,GAAsBkB,gBAAgB,CACpC,CAACc,QAAD,GAAYnD,IADwB,EAEpCuC,UAFoC,CAAtC;AAID,KALD,MAMK;AACHpC,MAAAA,aAAa,CAACgB,KAAd,GAAsB,CAACgC,QAAD,GAAYnD,IAAlC;AACAuC,MAAAA,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU;AACX;AACF,GAtBU,EAuBX,CACEL,UADF,EAEEhC,IAFF,EAGEW,KAHF,EAIEL,QAJF,EAKE4B,aALF,EAMEjC,aANF,EAOEH,IAPF,EAQEqC,gBARF,EASErB,gBATF,CAvBW,CAAb;AAoCA,QAAMoC,IAAI,GAAGjE,KAAK,CAAC8B,WAAN,CACX,YAAuC;AAAA,QAAtC+B,IAAsC,uEAAP,EAAO;AACrC,UAAM;AAAEC,MAAAA,KAAK,GAAG,CAAV;AAAaC,MAAAA,QAAQ,GAAG,IAAxB;AAA8BX,MAAAA;AAA9B,QAA6CS,IAAnD;AACA,QAAI,CAACd,UAAU,EAAX,IAAkB,CAAChC,IAAD,IAASW,KAAK,CAACM,KAAN,IAAe,CAA9C,EAAkD;AAElDiB,IAAAA,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa;AAEb,UAAMiB,QAAQ,GAAGrC,gBAAgB,KAAKiC,KAAtC;AACApC,IAAAA,KAAK,CAACM,KAAN,GAAckC,QAAd;;AAEA,QAAIH,QAAJ,EAAc;AACZ/C,MAAAA,aAAa,CAACgB,KAAd,GAAsBkB,gBAAgB,CACpC,CAACgB,QAAD,GAAYrD,IADwB,EAEpCuC,UAFoC,CAAtC;AAID,KALD,MAMK;AACHpC,MAAAA,aAAa,CAACgB,KAAd,GAAsB,CAACkC,QAAD,GAAYrD,IAAlC;AACAuC,MAAAA,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU;AACX;AACF,GApBU,EAqBX,CACEL,UADF,EAEEhC,IAFF,EAGEW,KAHF,EAIEuB,aAJF,EAKEjC,aALF,EAMEH,IANF,EAOEqC,gBAPF,EAQErB,gBARF,CArBW,CAAb;AAiCA,QAAMsC,EAAE,GAAGnE,KAAK,CAAC8B,WAAN,CACR+B,IAAD,IAAqE;AACnE,UAAM;AAAEpB,MAAAA,CAAF;AAAKsB,MAAAA,QAAQ,GAAG,KAAhB;AAAuBX,MAAAA;AAAvB,QAAsCS,IAA5C;AACA,QAAIpB,CAAC,KAAKf,KAAK,CAACM,KAAhB,EAAuB;AACvB,QAAI,CAACe,UAAU,EAAf,EAAmB;AAEnBE,IAAAA,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa,GALsD,CAMnE;;AACA,UAAMmB,SAAS,GAAG3D,sBAAsB,CAACO,aAAD,CAAxC,CAPmE,CASnE;;AACA,UAAMqD,MAAM,GAAG5B,CAAC,GAAG5B,IAAJ,GAAWuD,SAA1B,CAVmE,CAWnE;;AACA,UAAME,SAAS,GAAGjD,QAAQ,CAACE,MAAT,GAAkBV,IAApC;AAEA,QAAI0D,iBAAiB,GAAG,KAAxB;;AAEA,QAAIxD,IAAJ,EAAU;AACRwD,MAAAA,iBAAiB,GACHxC,IAAI,CAACG,GAAL,CAASlB,aAAa,CAACgB,KAAd,GAAsBsC,SAA/B,IAA4CA,SAA5C,IACC,GAFf;AAGD;;AAED,UAAME,WAAW,GACL,CAACzC,IAAI,CAAC0C,KAAL,CAAW1C,IAAI,CAACG,GAAL,CAASlB,aAAa,CAACgB,KAAd,GAAsBsC,SAA/B,CAAX,KACIC,iBAAiB,GAAG,CAAH,GAAO,CAD5B,CAAD,IAEID,SAFJ,GAGIF,SAHJ,GAIAC,MALZ;;AAOA,QAAIN,QAAJ,EAAc;AACZrC,MAAAA,KAAK,CAACM,KAAN,GAAcS,CAAd;AACAzB,MAAAA,aAAa,CAACgB,KAAd,GAAsBkB,gBAAgB,CAACsB,WAAD,EAAcpB,UAAd,CAAtC;AACD,KAHD,MAIK;AACHpC,MAAAA,aAAa,CAACgB,KAAd,GAAsBwC,WAAtB;AACA9C,MAAAA,KAAK,CAACM,KAAN,GAAcS,CAAd;AACAW,MAAAA,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU;AACX;AACF,GAvCQ,EAwCT,CACE1B,KADF,EAEEqB,UAFF,EAGEE,aAHF,EAIEjC,aAJF,EAKEH,IALF,EAMEQ,QAAQ,CAACE,MANX,EAOER,IAPF,EAQEmC,gBARF,CAxCS,CAAX;AAoDA,QAAMwB,QAAQ,GAAG1E,KAAK,CAAC8B,WAAN,CACf,YAAuC;AAAA,QAAtC+B,IAAsC,uEAAP,EAAO;AACrC,UAAM;AAAEnC,MAAAA,KAAK,EAAEe,CAAT;AAAYqB,MAAAA,KAAZ;AAAmBC,MAAAA,QAAQ,GAAG,KAA9B;AAAqCX,MAAAA;AAArC,QAAoDS,IAA1D;;AACA,QAAI,OAAOpB,CAAP,KAAa,QAAb,IAAyBA,CAAC,GAAG,CAAC,CAAlC,EAAqC;AACnC0B,MAAAA,EAAE,CAAC;AAAE1B,QAAAA,CAAF;AAAKsB,QAAAA,QAAL;AAAeX,QAAAA;AAAf,OAAD,CAAF;AACA;AACD;;AAED,QAAI,CAACU,KAAL,EACE;AAEF,UAAMa,CAAC,GAAG5C,IAAI,CAACrB,KAAL,CAAWoD,KAAX,CAAV;AAEA,QAAIa,CAAC,GAAG,CAAR,EACEV,IAAI,CAAC;AAAEH,MAAAA,KAAK,EAAE/B,IAAI,CAACG,GAAL,CAASyC,CAAT,CAAT;AAAsBZ,MAAAA,QAAtB;AAAgCX,MAAAA;AAAhC,KAAD,CAAJ,CADF,KAIEQ,IAAI,CAAC;AAAEE,MAAAA,KAAK,EAAEa,CAAT;AAAYZ,MAAAA,QAAZ;AAAsBX,MAAAA;AAAtB,KAAD,CAAJ;AACH,GAlBc,EAmBf,CAACa,IAAD,EAAOL,IAAP,EAAaO,EAAb,CAnBe,CAAjB;AAsBA,SAAO;AACLP,IAAAA,IADK;AAELK,IAAAA,IAFK;AAGLS,IAAAA,QAHK;AAIL9B,IAAAA,eAJK;AAKLgC,IAAAA,cAAc,EAAE,MAAMjD,WAAW,CAACU;AAL7B,GAAP;AAOD","sourcesContent":["import React, { useRef } from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from \"../types\";\nimport { computedRealIndexWithAutoFillData, convertToSharedIndex } from \"../utils/computedWithAutoFillData\";\nimport { dealWithAnimation } from \"../utils/dealWithAnimation\";\nimport { handlerOffsetDirection } from \"../utils/handlerOffsetDirection\";\nimport { round } from \"../utils/log\";\n\ninterface IOpts {\n loop: boolean\n size: number\n data: TCarouselProps[\"data\"]\n autoFillData: TCarouselProps[\"autoFillData\"]\n handlerOffset: 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 handlerOffset,\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(handlerOffset.value / size);\n\n const fixed = (handlerOffset.value / size) % dataInfo.length;\n return Math.round(\n handlerOffset.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0),\n );\n }, [handlerOffset, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetValue = handlerOffset.value;\n const toInt = round(handlerOffsetValue / size) % dataInfo.length;\n const isPositive = handlerOffsetValue <= 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 handlerOffset,\n ],\n );\n\n const getCurrentIndex = React.useCallback(() => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: index.value,\n dataLength: dataInfo.originalLength,\n loop,\n autoFillData: autoFillData!,\n });\n\n return realIndex;\n }, [index, autoFillData, dataInfo, loop]);\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 handlerOffset.value = scrollWithTiming(\n -nextPage * size,\n onFinished,\n ) as any;\n }\n else {\n handlerOffset.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffset,\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 handlerOffset.value = scrollWithTiming(\n -prevPage * size,\n onFinished,\n );\n }\n else {\n handlerOffset.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffset,\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 direction = handlerOffsetDirection(handlerOffset);\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(handlerOffset.value % totalSize) / totalSize\n >= 0.5;\n }\n\n const finalOffset\n = (Math.floor(Math.abs(handlerOffset.value / totalSize))\n + (isCloseToNextLoop ? 1 : 0))\n * totalSize\n * direction\n + offset;\n\n if (animated) {\n index.value = i;\n handlerOffset.value = scrollWithTiming(finalOffset, onFinished);\n }\n else {\n handlerOffset.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffset,\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 const n = Math.round(count);\n\n if (n < 0)\n prev({ count: Math.abs(n), animated, onFinished });\n\n else\n next({ count: n, animated, onFinished });\n },\n [prev, next, to],\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
@@ -19,18 +19,16 @@ export function useCommonVariables(props) {
19
19
  const _handlerOffset = useSharedValue(defaultHandlerOffsetValue);
20
20
 
21
21
  const handlerOffset = defaultScrollOffsetValue !== null && defaultScrollOffsetValue !== void 0 ? defaultScrollOffsetValue : _handlerOffset;
22
- const prevData = useSharedValue(data);
22
+ const prevDataLength = useSharedValue(data.length);
23
23
  React.useEffect(() => {
24
24
  handlerOffset.value = defaultHandlerOffsetValue;
25
25
  }, [vertical, handlerOffset, defaultHandlerOffsetValue]);
26
26
  useAnimatedReaction(() => {
27
- const _data = data.slice();
28
-
29
- const previousLength = prevData.value.length;
30
- const currentLength = _data.length;
27
+ const previousLength = prevDataLength.value;
28
+ const currentLength = data.length;
31
29
  const isLengthChanged = previousLength !== currentLength;
32
30
  const shouldComputed = isLengthChanged && loop;
33
- if (shouldComputed) prevData.value = _data;
31
+ if (shouldComputed) prevDataLength.value = data.length;
34
32
  return {
35
33
  shouldComputed,
36
34
  previousLength,
@@ -1 +1 @@
1
- {"version":3,"sources":["useCommonVariables.ts"],"names":["React","useSharedValue","useAnimatedReaction","computeNewIndexWhenDataChanges","handlerOffsetDirection","useCommonVariables","props","vertical","height","width","data","defaultIndex","defaultScrollOffsetValue","loop","size","validLength","length","defaultHandlerOffsetValue","Math","abs","_handlerOffset","handlerOffset","prevData","useEffect","value","_data","slice","previousLength","currentLength","isLengthChanged","shouldComputed","direction"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAEA,SAASC,cAAT,EAAyBC,mBAAzB,QAAoD,yBAApD;AAEA,SAASC,8BAAT,QAA+C,kCAA/C;AAGA,SAASC,sBAAT,QAAuC,iCAAvC;AAQA,OAAO,SAASC,kBAAT,CACLC,KADK,EAEa;AAClB,QAAM;AACJC,IAAAA,QADI;AAEJC,IAAAA,MAFI;AAGJC,IAAAA,KAHI;AAIJC,IAAAA,IAJI;AAKJC,IAAAA,YALI;AAMJC,IAAAA,wBANI;AAOJC,IAAAA;AAPI,MAQFP,KARJ;AASA,QAAMQ,IAAI,GAAGP,QAAQ,GAAGC,MAAH,GAAYC,KAAjC;AACA,QAAMM,WAAW,GAAGL,IAAI,CAACM,MAAL,GAAc,CAAlC;AACA,QAAMC,yBAAyB,GAAG,CAACC,IAAI,CAACC,GAAL,CAASR,YAAY,GAAGG,IAAxB,CAAnC;;AACA,QAAMM,cAAc,GAAGnB,cAAc,CAASgB,yBAAT,CAArC;;AACA,QAAMI,aAAa,GAAGT,wBAAH,aAAGA,wBAAH,cAAGA,wBAAH,GAA+BQ,cAAlD;AACA,QAAME,QAAQ,GAAGrB,cAAc,CAACS,IAAD,CAA/B;AAEAV,EAAAA,KAAK,CAACuB,SAAN,CAAgB,MAAM;AACpBF,IAAAA,aAAa,CAACG,KAAd,GAAsBP,yBAAtB;AACD,GAFD,EAEG,CAACV,QAAD,EAAWc,aAAX,EAA0BJ,yBAA1B,CAFH;AAIAf,EAAAA,mBAAmB,CAAC,MAAM;AACxB,UAAMuB,KAAK,GAAGf,IAAI,CAACgB,KAAL,EAAd;;AACA,UAAMC,cAAc,GAAGL,QAAQ,CAACE,KAAT,CAAeR,MAAtC;AACA,UAAMY,aAAa,GAAGH,KAAK,CAACT,MAA5B;AACA,UAAMa,eAAe,GAAGF,cAAc,KAAKC,aAA3C;AACA,UAAME,cAAc,GAAGD,eAAe,IAAIhB,IAA1C;AAEA,QAAIiB,cAAJ,EACER,QAAQ,CAACE,KAAT,GAAiBC,KAAjB;AAEF,WAAO;AACLK,MAAAA,cADK;AAELH,MAAAA,cAFK;AAGLC,MAAAA;AAHK,KAAP;AAKD,GAfkB,EAehB,QAAuD;AAAA,QAAtD;AAAEE,MAAAA,cAAF;AAAkBH,MAAAA,cAAlB;AAAkCC,MAAAA;AAAlC,KAAsD;;AACxD,QAAIE,cAAJ,EAAoB;AAClB;AACA,YAAMC,SAAS,GAAG3B,sBAAsB,CAACiB,aAAD,CAAxC;AAEAA,MAAAA,aAAa,CAACG,KAAd,GAAsBrB,8BAA8B,CAAC;AACnD4B,QAAAA,SADmD;AAEnDJ,QAAAA,cAFmD;AAGnDC,QAAAA,aAHmD;AAInDd,QAAAA,IAJmD;AAKnDO,QAAAA,aAAa,EAAEA,aAAa,CAACG;AALsB,OAAD,CAApD;AAOD;AACF,GA5BkB,EA4BhB,CAACd,IAAD,EAAOG,IAAP,CA5BgB,CAAnB;AA8BA,SAAO;AACLC,IAAAA,IADK;AAELC,IAAAA,WAFK;AAGLM,IAAAA;AAHK,GAAP;AAKD","sourcesContent":["import React from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport { useSharedValue, useAnimatedReaction } from \"react-native-reanimated\";\n\nimport { computeNewIndexWhenDataChanges } from \"./computeNewIndexWhenDataChanges\";\nimport type { TInitializeCarouselProps } from \"./useInitProps\";\n\nimport { handlerOffsetDirection } from \"../utils/handlerOffsetDirection\";\n\ninterface ICommonVariables {\n size: number\n validLength: number\n handlerOffset: Animated.SharedValue<number>\n}\n\nexport function useCommonVariables(\n props: TInitializeCarouselProps<any>,\n): ICommonVariables {\n const {\n vertical,\n height,\n width,\n data,\n defaultIndex,\n defaultScrollOffsetValue,\n loop,\n } = props;\n const size = vertical ? height : width;\n const validLength = data.length - 1;\n const defaultHandlerOffsetValue = -Math.abs(defaultIndex * size);\n const _handlerOffset = useSharedValue<number>(defaultHandlerOffsetValue);\n const handlerOffset = defaultScrollOffsetValue ?? _handlerOffset;\n const prevData = useSharedValue(data);\n\n React.useEffect(() => {\n handlerOffset.value = defaultHandlerOffsetValue;\n }, [vertical, handlerOffset, defaultHandlerOffsetValue]);\n\n useAnimatedReaction(() => {\n const _data = data.slice();\n const previousLength = prevData.value.length;\n const currentLength = _data.length;\n const isLengthChanged = previousLength !== currentLength;\n const shouldComputed = isLengthChanged && loop;\n\n if (shouldComputed)\n prevData.value = _data;\n\n return {\n shouldComputed,\n previousLength,\n currentLength,\n };\n }, ({ shouldComputed, previousLength, currentLength }) => {\n if (shouldComputed) {\n // direction -> 1 | -1\n const direction = handlerOffsetDirection(handlerOffset);\n\n handlerOffset.value = computeNewIndexWhenDataChanges({\n direction,\n previousLength,\n currentLength,\n size,\n handlerOffset: handlerOffset.value,\n });\n }\n }, [data, loop]);\n\n return {\n size,\n validLength,\n handlerOffset,\n };\n}\n"]}
1
+ {"version":3,"sources":["useCommonVariables.ts"],"names":["React","useSharedValue","useAnimatedReaction","computeNewIndexWhenDataChanges","handlerOffsetDirection","useCommonVariables","props","vertical","height","width","data","defaultIndex","defaultScrollOffsetValue","loop","size","validLength","length","defaultHandlerOffsetValue","Math","abs","_handlerOffset","handlerOffset","prevDataLength","useEffect","value","previousLength","currentLength","isLengthChanged","shouldComputed","direction"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAEA,SAASC,cAAT,EAAyBC,mBAAzB,QAAoD,yBAApD;AAEA,SAASC,8BAAT,QAA+C,kCAA/C;AAGA,SAASC,sBAAT,QAAuC,iCAAvC;AAQA,OAAO,SAASC,kBAAT,CACLC,KADK,EAEa;AAClB,QAAM;AACJC,IAAAA,QADI;AAEJC,IAAAA,MAFI;AAGJC,IAAAA,KAHI;AAIJC,IAAAA,IAJI;AAKJC,IAAAA,YALI;AAMJC,IAAAA,wBANI;AAOJC,IAAAA;AAPI,MAQFP,KARJ;AASA,QAAMQ,IAAI,GAAGP,QAAQ,GAAGC,MAAH,GAAYC,KAAjC;AACA,QAAMM,WAAW,GAAGL,IAAI,CAACM,MAAL,GAAc,CAAlC;AACA,QAAMC,yBAAyB,GAAG,CAACC,IAAI,CAACC,GAAL,CAASR,YAAY,GAAGG,IAAxB,CAAnC;;AACA,QAAMM,cAAc,GAAGnB,cAAc,CAASgB,yBAAT,CAArC;;AACA,QAAMI,aAAa,GAAGT,wBAAH,aAAGA,wBAAH,cAAGA,wBAAH,GAA+BQ,cAAlD;AACA,QAAME,cAAc,GAAGrB,cAAc,CAACS,IAAI,CAACM,MAAN,CAArC;AAEAhB,EAAAA,KAAK,CAACuB,SAAN,CAAgB,MAAM;AACpBF,IAAAA,aAAa,CAACG,KAAd,GAAsBP,yBAAtB;AACD,GAFD,EAEG,CAACV,QAAD,EAAWc,aAAX,EAA0BJ,yBAA1B,CAFH;AAIAf,EAAAA,mBAAmB,CAAC,MAAM;AACxB,UAAMuB,cAAc,GAAGH,cAAc,CAACE,KAAtC;AACA,UAAME,aAAa,GAAGhB,IAAI,CAACM,MAA3B;AACA,UAAMW,eAAe,GAAGF,cAAc,KAAKC,aAA3C;AACA,UAAME,cAAc,GAAGD,eAAe,IAAId,IAA1C;AAEA,QAAIe,cAAJ,EACEN,cAAc,CAACE,KAAf,GAAuBd,IAAI,CAACM,MAA5B;AAEF,WAAO;AACLY,MAAAA,cADK;AAELH,MAAAA,cAFK;AAGLC,MAAAA;AAHK,KAAP;AAKD,GAdkB,EAchB,QAAuD;AAAA,QAAtD;AAAEE,MAAAA,cAAF;AAAkBH,MAAAA,cAAlB;AAAkCC,MAAAA;AAAlC,KAAsD;;AACxD,QAAIE,cAAJ,EAAoB;AAClB;AACA,YAAMC,SAAS,GAAGzB,sBAAsB,CAACiB,aAAD,CAAxC;AAEAA,MAAAA,aAAa,CAACG,KAAd,GAAsBrB,8BAA8B,CAAC;AACnD0B,QAAAA,SADmD;AAEnDJ,QAAAA,cAFmD;AAGnDC,QAAAA,aAHmD;AAInDZ,QAAAA,IAJmD;AAKnDO,QAAAA,aAAa,EAAEA,aAAa,CAACG;AALsB,OAAD,CAApD;AAOD;AACF,GA3BkB,EA2BhB,CAACd,IAAD,EAAOG,IAAP,CA3BgB,CAAnB;AA6BA,SAAO;AACLC,IAAAA,IADK;AAELC,IAAAA,WAFK;AAGLM,IAAAA;AAHK,GAAP;AAKD","sourcesContent":["import React from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport { useSharedValue, useAnimatedReaction } from \"react-native-reanimated\";\n\nimport { computeNewIndexWhenDataChanges } from \"./computeNewIndexWhenDataChanges\";\nimport type { TInitializeCarouselProps } from \"./useInitProps\";\n\nimport { handlerOffsetDirection } from \"../utils/handlerOffsetDirection\";\n\ninterface ICommonVariables {\n size: number\n validLength: number\n handlerOffset: Animated.SharedValue<number>\n}\n\nexport function useCommonVariables(\n props: TInitializeCarouselProps<any>,\n): ICommonVariables {\n const {\n vertical,\n height,\n width,\n data,\n defaultIndex,\n defaultScrollOffsetValue,\n loop,\n } = props;\n const size = vertical ? height : width;\n const validLength = data.length - 1;\n const defaultHandlerOffsetValue = -Math.abs(defaultIndex * size);\n const _handlerOffset = useSharedValue<number>(defaultHandlerOffsetValue);\n const handlerOffset = defaultScrollOffsetValue ?? _handlerOffset;\n const prevDataLength = useSharedValue(data.length);\n\n React.useEffect(() => {\n handlerOffset.value = defaultHandlerOffsetValue;\n }, [vertical, handlerOffset, defaultHandlerOffsetValue]);\n\n useAnimatedReaction(() => {\n const previousLength = prevDataLength.value;\n const currentLength = data.length;\n const isLengthChanged = previousLength !== currentLength;\n const shouldComputed = isLengthChanged && loop;\n\n if (shouldComputed)\n prevDataLength.value = data.length;\n\n return {\n shouldComputed,\n previousLength,\n currentLength,\n };\n }, ({ shouldComputed, previousLength, currentLength }) => {\n if (shouldComputed) {\n // direction -> 1 | -1\n const direction = handlerOffsetDirection(handlerOffset);\n\n handlerOffset.value = computeNewIndexWhenDataChanges({\n direction,\n previousLength,\n currentLength,\n size,\n handlerOffset: handlerOffset.value,\n });\n }\n }, [data, loop]);\n\n return {\n size,\n validLength,\n handlerOffset,\n };\n}\n"]}
@@ -21,12 +21,17 @@ export function useInitProps(props) {
21
21
  const width = Math.round(_width || 0);
22
22
  const height = Math.round(_height || 0);
23
23
  const autoPlayInterval = Math.max(_autoPlayInterval, 0);
24
- const data = React.useMemo(() => computedFillDataWithAutoFillData({
25
- loop,
26
- autoFillData,
27
- data: rawData,
28
- dataLength: rawData.length
29
- }), [rawData, loop, autoFillData]);
24
+ const data = React.useMemo(() => {
25
+ const computedData = computedFillDataWithAutoFillData({
26
+ loop,
27
+ autoFillData,
28
+ data: rawData,
29
+ dataLength: rawData.length
30
+ });
31
+ return Array.from({
32
+ length: computedData.length
33
+ });
34
+ }, [rawData, loop, autoFillData]);
30
35
 
31
36
  if (props.mode === "vertical-stack" || props.mode === "horizontal-stack") {
32
37
  var _props$modeConfig$sho, _props$modeConfig;
@@ -1 +1 @@
1
- {"version":3,"sources":["useInitProps.ts"],"names":["React","computedFillDataWithAutoFillData","useInitProps","props","defaultIndex","data","rawData","loop","enabled","autoPlayInterval","_autoPlayInterval","scrollAnimationDuration","style","panGestureHandlerProps","pagingEnabled","autoFillData","snapEnabled","enableSnap","width","_width","height","_height","Math","round","max","useMemo","dataLength","length","mode","modeConfig","showLength"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAGA,SAASC,gCAAT,QAAiD,mCAAjD;AAqBA,OAAO,SAASC,YAAT,CACLC,KADK,EAEwB;AAAA;;AAC7B,QAAM;AACJC,IAAAA,YAAY,GAAG,CADX;AAEJC,IAAAA,IAAI,EAAEC,OAAO,GAAG,EAFZ;AAGJC,IAAAA,IAAI,GAAG,IAHH;AAIJC,IAAAA,OAAO,GAAG,IAJN;AAKJC,IAAAA,gBAAgB,EAAEC,iBAAiB,GAAG,IALlC;AAMJC,IAAAA,uBAAuB,GAAG,GANtB;AAOJC,IAAAA,KAAK,GAAG,EAPJ;AAQJC,IAAAA,sBAAsB,GAAG,EARrB;AASJC,IAAAA,aAAa,GAAG,IATZ;AAUJC,IAAAA,YAAY,GAAG,IAVX;AAWJC,IAAAA,WAAW,wBAAGb,KAAK,CAACc,UAAT,iEAAuB,IAX9B;AAYJC,IAAAA,KAAK,EAAEC,MAZH;AAaJC,IAAAA,MAAM,EAAEC;AAbJ,MAcFlB,KAdJ;AAgBA,QAAMe,KAAK,GAAGI,IAAI,CAACC,KAAL,CAAWJ,MAAM,IAAI,CAArB,CAAd;AACA,QAAMC,MAAM,GAAGE,IAAI,CAACC,KAAL,CAAWF,OAAO,IAAI,CAAtB,CAAf;AACA,QAAMZ,gBAAgB,GAAGa,IAAI,CAACE,GAAL,CAASd,iBAAT,EAA4B,CAA5B,CAAzB;AAEA,QAAML,IAAI,GAAGL,KAAK,CAACyB,OAAN,CACX,MACExB,gCAAgC,CAAI;AAClCM,IAAAA,IADkC;AAElCQ,IAAAA,YAFkC;AAGlCV,IAAAA,IAAI,EAAEC,OAH4B;AAIlCoB,IAAAA,UAAU,EAAEpB,OAAO,CAACqB;AAJc,GAAJ,CAFvB,EAQX,CAACrB,OAAD,EAAUC,IAAV,EAAgBQ,YAAhB,CARW,CAAb;;AAWA,MAAIZ,KAAK,CAACyB,IAAN,KAAe,gBAAf,IAAmCzB,KAAK,CAACyB,IAAN,KAAe,kBAAtD,EAA0E;AAAA;;AACxE,QAAI,CAACzB,KAAK,CAAC0B,UAAX,EACE1B,KAAK,CAAC0B,UAAN,GAAmB,EAAnB;AAEF1B,IAAAA,KAAK,CAAC0B,UAAN,CAAiBC,UAAjB,iDACU3B,KAAK,CAAC0B,UADhB,sDACU,kBAAkBC,UAD5B,yEAC0CzB,IAAI,CAACsB,MAAL,GAAc,CADxD;AAED;;AACD,SAAO,EACL,GAAGxB,KADE;AAELC,IAAAA,YAFK;AAGLW,IAAAA,YAHK;AAILV,IAAAA,IAJK;AAKLC,IAAAA,OALK;AAMLC,IAAAA,IANK;AAOLC,IAAAA,OAPK;AAQLC,IAAAA,gBARK;AASLE,IAAAA,uBATK;AAULC,IAAAA,KAVK;AAWLC,IAAAA,sBAXK;AAYLC,IAAAA,aAZK;AAaLE,IAAAA,WAbK;AAcLE,IAAAA,KAdK;AAeLE,IAAAA;AAfK,GAAP;AAiBD","sourcesContent":["import React from \"react\";\n\nimport type { TCarouselProps } from \"../types\";\nimport { computedFillDataWithAutoFillData } from \"../utils/computedWithAutoFillData\";\n\ntype TGetRequiredProps<P extends keyof TCarouselProps> = Record<\nP,\nRequired<TCarouselProps>[P]\n>;\n\nexport type TInitializeCarouselProps<T> = TCarouselProps<T> &\nTGetRequiredProps<\n| \"defaultIndex\"\n| \"loop\"\n| \"width\"\n| \"height\"\n| \"scrollAnimationDuration\"\n| \"autoPlayInterval\"\n| \"autoFillData\"\n> & {\n // Raw data that has not been processed\n rawData: T[]\n};\n\nexport function useInitProps<T>(\n props: TCarouselProps<T>,\n): TInitializeCarouselProps<T> {\n const {\n defaultIndex = 0,\n data: rawData = [],\n loop = true,\n enabled = true,\n autoPlayInterval: _autoPlayInterval = 1000,\n scrollAnimationDuration = 500,\n style = {},\n panGestureHandlerProps = {},\n pagingEnabled = true,\n autoFillData = true,\n snapEnabled = props.enableSnap ?? true,\n width: _width,\n height: _height,\n } = props;\n\n const width = Math.round(_width || 0);\n const height = Math.round(_height || 0);\n const autoPlayInterval = Math.max(_autoPlayInterval, 0);\n\n const data = React.useMemo<T[]>(\n () =>\n computedFillDataWithAutoFillData<T>({\n loop,\n autoFillData,\n data: rawData,\n dataLength: rawData.length,\n }),\n [rawData, loop, autoFillData],\n );\n\n if (props.mode === \"vertical-stack\" || props.mode === \"horizontal-stack\") {\n if (!props.modeConfig)\n props.modeConfig = {};\n\n props.modeConfig.showLength\n = props.modeConfig?.showLength ?? data.length - 1;\n }\n return {\n ...props,\n defaultIndex,\n autoFillData,\n data,\n rawData,\n loop,\n enabled,\n autoPlayInterval,\n scrollAnimationDuration,\n style,\n panGestureHandlerProps,\n pagingEnabled,\n snapEnabled,\n width,\n height,\n };\n}\n"]}
1
+ {"version":3,"sources":["useInitProps.ts"],"names":["React","computedFillDataWithAutoFillData","useInitProps","props","defaultIndex","data","rawData","loop","enabled","autoPlayInterval","_autoPlayInterval","scrollAnimationDuration","style","panGestureHandlerProps","pagingEnabled","autoFillData","snapEnabled","enableSnap","width","_width","height","_height","Math","round","max","useMemo","computedData","dataLength","length","Array","from","mode","modeConfig","showLength"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAGA,SAASC,gCAAT,QAAiD,mCAAjD;AAqBA,OAAO,SAASC,YAAT,CACLC,KADK,EAEwB;AAAA;;AAC7B,QAAM;AACJC,IAAAA,YAAY,GAAG,CADX;AAEJC,IAAAA,IAAI,EAAEC,OAAO,GAAG,EAFZ;AAGJC,IAAAA,IAAI,GAAG,IAHH;AAIJC,IAAAA,OAAO,GAAG,IAJN;AAKJC,IAAAA,gBAAgB,EAAEC,iBAAiB,GAAG,IALlC;AAMJC,IAAAA,uBAAuB,GAAG,GANtB;AAOJC,IAAAA,KAAK,GAAG,EAPJ;AAQJC,IAAAA,sBAAsB,GAAG,EARrB;AASJC,IAAAA,aAAa,GAAG,IATZ;AAUJC,IAAAA,YAAY,GAAG,IAVX;AAWJC,IAAAA,WAAW,wBAAGb,KAAK,CAACc,UAAT,iEAAuB,IAX9B;AAYJC,IAAAA,KAAK,EAAEC,MAZH;AAaJC,IAAAA,MAAM,EAAEC;AAbJ,MAcFlB,KAdJ;AAgBA,QAAMe,KAAK,GAAGI,IAAI,CAACC,KAAL,CAAWJ,MAAM,IAAI,CAArB,CAAd;AACA,QAAMC,MAAM,GAAGE,IAAI,CAACC,KAAL,CAAWF,OAAO,IAAI,CAAtB,CAAf;AACA,QAAMZ,gBAAgB,GAAGa,IAAI,CAACE,GAAL,CAASd,iBAAT,EAA4B,CAA5B,CAAzB;AAEA,QAAML,IAAI,GAAGL,KAAK,CAACyB,OAAN,CACX,MAAM;AACJ,UAAMC,YAAY,GAAGzB,gCAAgC,CAAI;AACvDM,MAAAA,IADuD;AAEvDQ,MAAAA,YAFuD;AAGvDV,MAAAA,IAAI,EAAEC,OAHiD;AAIvDqB,MAAAA,UAAU,EAAErB,OAAO,CAACsB;AAJmC,KAAJ,CAArD;AAOA,WAAOC,KAAK,CAACC,IAAN,CAAW;AAAEF,MAAAA,MAAM,EAAEF,YAAY,CAACE;AAAvB,KAAX,CAAP;AACD,GAVU,EAWX,CAACtB,OAAD,EAAUC,IAAV,EAAgBQ,YAAhB,CAXW,CAAb;;AAcA,MAAIZ,KAAK,CAAC4B,IAAN,KAAe,gBAAf,IAAmC5B,KAAK,CAAC4B,IAAN,KAAe,kBAAtD,EAA0E;AAAA;;AACxE,QAAI,CAAC5B,KAAK,CAAC6B,UAAX,EACE7B,KAAK,CAAC6B,UAAN,GAAmB,EAAnB;AAEF7B,IAAAA,KAAK,CAAC6B,UAAN,CAAiBC,UAAjB,iDAA8B9B,KAAK,CAAC6B,UAApC,sDAA8B,kBAAkBC,UAAhD,yEAA8D5B,IAAI,CAACuB,MAAL,GAAc,CAA5E;AACD;;AAED,SAAO,EACL,GAAGzB,KADE;AAELC,IAAAA,YAFK;AAGLW,IAAAA,YAHK;AAILV,IAAAA,IAJK;AAKLC,IAAAA,OALK;AAMLC,IAAAA,IANK;AAOLC,IAAAA,OAPK;AAQLC,IAAAA,gBARK;AASLE,IAAAA,uBATK;AAULC,IAAAA,KAVK;AAWLC,IAAAA,sBAXK;AAYLC,IAAAA,aAZK;AAaLE,IAAAA,WAbK;AAcLE,IAAAA,KAdK;AAeLE,IAAAA;AAfK,GAAP;AAiBD","sourcesContent":["import React from \"react\";\n\nimport type { TCarouselProps } from \"../types\";\nimport { computedFillDataWithAutoFillData } from \"../utils/computedWithAutoFillData\";\n\ntype TGetRequiredProps<P extends keyof TCarouselProps> = Record<\nP,\nRequired<TCarouselProps>[P]\n>;\n\nexport type TInitializeCarouselProps<T> = TCarouselProps<T> &\nTGetRequiredProps<\n| \"defaultIndex\"\n| \"loop\"\n| \"width\"\n| \"height\"\n| \"scrollAnimationDuration\"\n| \"autoPlayInterval\"\n| \"autoFillData\"\n> & {\n // Raw data that has not been processed\n rawData: T[]\n};\n\nexport function useInitProps<T>(\n props: TCarouselProps<T>,\n): TInitializeCarouselProps<T> {\n const {\n defaultIndex = 0,\n data: rawData = [],\n loop = true,\n enabled = true,\n autoPlayInterval: _autoPlayInterval = 1000,\n scrollAnimationDuration = 500,\n style = {},\n panGestureHandlerProps = {},\n pagingEnabled = true,\n autoFillData = true,\n snapEnabled = props.enableSnap ?? true,\n width: _width,\n height: _height,\n } = props;\n\n const width = Math.round(_width || 0);\n const height = Math.round(_height || 0);\n const autoPlayInterval = Math.max(_autoPlayInterval, 0);\n\n const data = React.useMemo<T[]>(\n () => {\n const computedData = computedFillDataWithAutoFillData<T>({\n loop,\n autoFillData,\n data: rawData,\n dataLength: rawData.length,\n });\n\n return Array.from({ length: computedData.length });\n },\n [rawData, loop, autoFillData],\n );\n\n if (props.mode === \"vertical-stack\" || props.mode === \"horizontal-stack\") {\n if (!props.modeConfig)\n props.modeConfig = {};\n\n props.modeConfig.showLength = props.modeConfig?.showLength ?? data.length - 1;\n }\n\n return {\n ...props,\n defaultIndex,\n autoFillData,\n data,\n rawData,\n loop,\n enabled,\n autoPlayInterval,\n scrollAnimationDuration,\n style,\n panGestureHandlerProps,\n pagingEnabled,\n snapEnabled,\n width,\n height,\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-reanimated-carousel",
3
- "version": "3.1.2",
3
+ "version": "3.1.4",
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",
@@ -12,7 +12,7 @@ import type {
12
12
  TCarouselProps,
13
13
  WithTimingAnimation,
14
14
  } from "../types";
15
- import { convertToSharedIndex } from "../utils/computedWithAutoFillData";
15
+ import { computedRealIndexWithAutoFillData, convertToSharedIndex } from "../utils/computedWithAutoFillData";
16
16
  import { dealWithAnimation } from "../utils/dealWithAnimation";
17
17
  import { handlerOffsetDirection } from "../utils/handlerOffsetDirection";
18
18
  import { round } from "../utils/log";
@@ -118,8 +118,15 @@ export function useCarouselController(options: IOpts): ICarouselController {
118
118
  );
119
119
 
120
120
  const getCurrentIndex = React.useCallback(() => {
121
- return index.value;
122
- }, [index]);
121
+ const realIndex = computedRealIndexWithAutoFillData({
122
+ index: index.value,
123
+ dataLength: dataInfo.originalLength,
124
+ loop,
125
+ autoFillData: autoFillData!,
126
+ });
127
+
128
+ return realIndex;
129
+ }, [index, autoFillData, dataInfo, loop]);
123
130
 
124
131
  const canSliding = React.useCallback(() => {
125
132
  return !dataInfo.disable;
@@ -30,21 +30,20 @@ export function useCommonVariables(
30
30
  const defaultHandlerOffsetValue = -Math.abs(defaultIndex * size);
31
31
  const _handlerOffset = useSharedValue<number>(defaultHandlerOffsetValue);
32
32
  const handlerOffset = defaultScrollOffsetValue ?? _handlerOffset;
33
- const prevData = useSharedValue(data);
33
+ const prevDataLength = useSharedValue(data.length);
34
34
 
35
35
  React.useEffect(() => {
36
36
  handlerOffset.value = defaultHandlerOffsetValue;
37
37
  }, [vertical, handlerOffset, defaultHandlerOffsetValue]);
38
38
 
39
39
  useAnimatedReaction(() => {
40
- const _data = data.slice();
41
- const previousLength = prevData.value.length;
42
- const currentLength = _data.length;
40
+ const previousLength = prevDataLength.value;
41
+ const currentLength = data.length;
43
42
  const isLengthChanged = previousLength !== currentLength;
44
43
  const shouldComputed = isLengthChanged && loop;
45
44
 
46
45
  if (shouldComputed)
47
- prevData.value = _data;
46
+ prevDataLength.value = data.length;
48
47
 
49
48
  return {
50
49
  shouldComputed,
@@ -46,13 +46,16 @@ export function useInitProps<T>(
46
46
  const autoPlayInterval = Math.max(_autoPlayInterval, 0);
47
47
 
48
48
  const data = React.useMemo<T[]>(
49
- () =>
50
- computedFillDataWithAutoFillData<T>({
49
+ () => {
50
+ const computedData = computedFillDataWithAutoFillData<T>({
51
51
  loop,
52
52
  autoFillData,
53
53
  data: rawData,
54
54
  dataLength: rawData.length,
55
- }),
55
+ });
56
+
57
+ return Array.from({ length: computedData.length });
58
+ },
56
59
  [rawData, loop, autoFillData],
57
60
  );
58
61
 
@@ -60,9 +63,9 @@ export function useInitProps<T>(
60
63
  if (!props.modeConfig)
61
64
  props.modeConfig = {};
62
65
 
63
- props.modeConfig.showLength
64
- = props.modeConfig?.showLength ?? data.length - 1;
66
+ props.modeConfig.showLength = props.modeConfig?.showLength ?? data.length - 1;
65
67
  }
68
+
66
69
  return {
67
70
  ...props,
68
71
  defaultIndex,