react-native-reanimated-carousel 2.5.0 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -186,7 +186,7 @@ yarn web:pretty
186
186
 
187
187
  <p align="center">
188
188
  <a href="./sponsorkit/sponsors.svg">
189
- <img src='./sponsorkit/sponsors.png'/>
189
+ <img src='./sponsorkit/sponsors.svg'/>
190
190
  </a>
191
191
  </p>
192
192
 
package/README.zh-CN.md CHANGED
@@ -183,6 +183,14 @@ yarn web
183
183
  yarn web:pretty
184
184
  ```
185
185
 
186
+ ## 赞助商
187
+
188
+ <p align="center">
189
+ <a href="./sponsorkit/sponsors.svg">
190
+ <img src='./sponsorkit/sponsors.svg'/>
191
+ </a>
192
+ </p>
193
+
186
194
  ## 许可
187
195
 
188
196
  MIT
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,"__esModule",{value:true});exports.useCarouselController=useCarouselController;var _react=_interopRequireWildcard(require("react"));var _constants=require("../constants");var _reactNativeReanimated=require("react-native-reanimated");var _dealWithAnimation=require("../utils/dealWithAnimation");var _computedWithAutoFillData=require("../utils/computedWithAutoFillData");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,handlerOffsetX=options.handlerOffsetX,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(handlerOffsetX.value/size);}var fixed=handlerOffsetX.value/size%dataInfo.length;return Math.round(handlerOffsetX.value<=0?Math.abs(fixed):Math.abs(fixed>0?dataInfo.length-fixed:0));},[handlerOffsetX,dataInfo,size,loop]);function setSharedIndex(newSharedIndex){sharedIndex.current=newSharedIndex;}(0,_reactNativeReanimated.useAnimatedReaction)(function(){var _f=function _f(){var handlerOffsetXValue=handlerOffsetX.value;var toInt=(0,_log.round)(handlerOffsetXValue/size)%dataInfo.length;var isPositive=handlerOffsetXValue<=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={handlerOffsetX:handlerOffsetX,round:_log.round,size:size,dataInfo:dataInfo,convertToSharedIndex:_computedWithAutoFillData.convertToSharedIndex,loop:loop,autoFillData:autoFillData};_f.asString="function _f(){const{handlerOffsetX,round,size,dataInfo,convertToSharedIndex,loop,autoFillData}=jsThis._closure;{const handlerOffsetXValue=handlerOffsetX.value;const toInt=round(handlerOffsetXValue/size)%dataInfo.length;const isPositive=handlerOffsetXValue<=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=14011541648783;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (83:8)";global.__reanimatedWorkletInit(_f);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 (103:8)";global.__reanimatedWorkletInit(_f);return _f;}(),[sharedPreIndex,sharedIndex,size,dataInfo,index,loop,autoFillData,handlerOffsetX]);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 (138:29)";global.__reanimatedWorkletInit(_f);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=15006680124176;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (136:8)";global.__reanimatedWorkletInit(_f);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){handlerOffsetX.value=scrollWithTiming(-nextPage*size,onFinished);}else{handlerOffsetX.value=-nextPage*size;onFinished==null?void 0:onFinished();}};_f._closure={canSliding:canSliding,loop:loop,index:index,dataInfo:dataInfo,onScrollBegin:onScrollBegin,currentFixedPage:currentFixedPage,handlerOffsetX:handlerOffsetX,scrollWithTiming:scrollWithTiming,size:size};_f.asString="function _f(opts={}){const{canSliding,loop,index,dataInfo,onScrollBegin,currentFixedPage,handlerOffsetX,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){handlerOffsetX.value=scrollWithTiming(-nextPage*size,onFinished);}else{handlerOffsetX.value=-nextPage*size;onFinished===null||onFinished===void 0?void 0:onFinished();}}}";_f.__workletHash=1734401141936;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (160:8)";global.__reanimatedWorkletInit(_f);return _f;}(),[canSliding,loop,index,dataInfo,onScrollBegin,handlerOffsetX,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){handlerOffsetX.value=scrollWithTiming(-prevPage*size,onFinished);}else{handlerOffsetX.value=-prevPage*size;onFinished==null?void 0:onFinished();}},[canSliding,loop,index,onScrollBegin,handlerOffsetX,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 offset=handlerOffsetX.value+(index.value-i)*size;if(animated){index.value=i;handlerOffsetX.value=scrollWithTiming(offset,onFinished);}else{handlerOffsetX.value=offset;index.value=i;onFinished==null?void 0:onFinished();}},[index,canSliding,onScrollBegin,handlerOffsetX,size,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(i){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 _constants=require("../constants");var _reactNativeReanimated=require("react-native-reanimated");var _dealWithAnimation=require("../utils/dealWithAnimation");var _computedWithAutoFillData=require("../utils/computedWithAutoFillData");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,handlerOffsetX=options.handlerOffsetX,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(handlerOffsetX.value/size);}var fixed=handlerOffsetX.value/size%dataInfo.length;return Math.round(handlerOffsetX.value<=0?Math.abs(fixed):Math.abs(fixed>0?dataInfo.length-fixed:0));},[handlerOffsetX,dataInfo,size,loop]);function setSharedIndex(newSharedIndex){sharedIndex.current=newSharedIndex;}(0,_reactNativeReanimated.useAnimatedReaction)(function(){var _f=function _f(){var handlerOffsetXValue=handlerOffsetX.value;var toInt=(0,_log.round)(handlerOffsetXValue/size)%dataInfo.length;var isPositive=handlerOffsetXValue<=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={handlerOffsetX:handlerOffsetX,round:_log.round,size:size,dataInfo:dataInfo,convertToSharedIndex:_computedWithAutoFillData.convertToSharedIndex,loop:loop,autoFillData:autoFillData};_f.asString="function _f(){const{handlerOffsetX,round,size,dataInfo,convertToSharedIndex,loop,autoFillData}=jsThis._closure;{const handlerOffsetXValue=handlerOffsetX.value;const toInt=round(handlerOffsetXValue/size)%dataInfo.length;const isPositive=handlerOffsetXValue<=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=14011541648783;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (83:8)";global.__reanimatedWorkletInit(_f);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 (103:8)";global.__reanimatedWorkletInit(_f);return _f;}(),[sharedPreIndex,sharedIndex,size,dataInfo,index,loop,autoFillData,handlerOffsetX]);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 (138:29)";global.__reanimatedWorkletInit(_f);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=15006680124176;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (136:8)";global.__reanimatedWorkletInit(_f);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){handlerOffsetX.value=scrollWithTiming(-nextPage*size,onFinished);}else{handlerOffsetX.value=-nextPage*size;onFinished==null?void 0:onFinished();}};_f._closure={canSliding:canSliding,loop:loop,index:index,dataInfo:dataInfo,onScrollBegin:onScrollBegin,currentFixedPage:currentFixedPage,handlerOffsetX:handlerOffsetX,scrollWithTiming:scrollWithTiming,size:size};_f.asString="function _f(opts={}){const{canSliding,loop,index,dataInfo,onScrollBegin,currentFixedPage,handlerOffsetX,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){handlerOffsetX.value=scrollWithTiming(-nextPage*size,onFinished);}else{handlerOffsetX.value=-nextPage*size;onFinished===null||onFinished===void 0?void 0:onFinished();}}}";_f.__workletHash=1734401141936;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (160:8)";global.__reanimatedWorkletInit(_f);return _f;}(),[canSliding,loop,index,dataInfo,onScrollBegin,handlerOffsetX,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){handlerOffsetX.value=scrollWithTiming(-prevPage*size,onFinished);}else{handlerOffsetX.value=-prevPage*size;onFinished==null?void 0:onFinished();}},[canSliding,loop,index,onScrollBegin,handlerOffsetX,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 offset=handlerOffsetX.value+(index.value-i)*size;if(animated){index.value=i;handlerOffsetX.value=scrollWithTiming(offset,onFinished);}else{handlerOffsetX.value=offset;index.value=i;onFinished==null?void 0:onFinished();}},[index,canSliding,onScrollBegin,handlerOffsetX,size,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","handlerOffsetX","withAnimation","defaultIndex","duration","autoFillData","dataInfo","React","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetXValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","convertToSharedIndex","runOnJS","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","Easing","easeOutQuart","dealWithAnimation","next","opts","count","animated","nextPage","prev","prevPage","to","offset","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '@/utils/dealWithAnimation';\nimport { convertToSharedIndex } from '@/utils/computedWithAutoFillData';\nimport { round } from '@/utils/log';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n data: TCarouselProps['data'];\n autoFillData: TCarouselProps['autoFillData'];\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n duration?: number;\n defaultIndex?: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n data,\n loop,\n handlerOffsetX,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n }),\n [data]\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % dataInfo.length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0)\n );\n }, [handlerOffsetX, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetXValue = handlerOffsetX.value;\n const toInt = round(handlerOffsetXValue / size) % dataInfo.length;\n const isPositive = handlerOffsetXValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffsetX,\n ]\n );\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffsetX.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n\n const offset = handlerOffsetX.value + (index.value - i) * size;\n\n if (animated) {\n index.value = i;\n handlerOffsetX.value = scrollWithTiming(offset, onFinished);\n } else {\n handlerOffsetX.value = offset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n\n if (i) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count) {\n return;\n }\n\n const n = Math.round(count);\n\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next, to]\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
1
+ {"version":3,"sources":["useCarouselController.tsx"],"names":["useCarouselController","options","size","data","loop","handlerOffsetX","withAnimation","defaultIndex","duration","autoFillData","dataInfo","React","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetXValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","convertToSharedIndex","runOnJS","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","Easing","easeOutQuart","dealWithAnimation","next","opts","count","animated","nextPage","prev","prevPage","to","offset","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '@/utils/dealWithAnimation';\nimport { convertToSharedIndex } from '@/utils/computedWithAutoFillData';\nimport { round } from '@/utils/log';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n data: TCarouselProps['data'];\n autoFillData: TCarouselProps['autoFillData'];\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n duration?: number;\n defaultIndex?: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n data,\n loop,\n handlerOffsetX,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n }),\n [data]\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % dataInfo.length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0)\n );\n }, [handlerOffsetX, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetXValue = handlerOffsetX.value;\n const toInt = round(handlerOffsetXValue / size) % dataInfo.length;\n const isPositive = handlerOffsetXValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffsetX,\n ]\n );\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffsetX.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n\n const offset = handlerOffsetX.value + (index.value - i) * size;\n\n if (animated) {\n index.value = i;\n handlerOffsetX.value = scrollWithTiming(offset, onFinished);\n } else {\n handlerOffsetX.value = offset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n\n if (typeof i === 'number' && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count) {\n return;\n }\n\n const n = Math.round(count);\n\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next, to]\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
@@ -166,7 +166,7 @@ export function useCarouselController(options) {
166
166
  onFinished
167
167
  } = opts;
168
168
 
169
- if (i) {
169
+ if (typeof i === 'number' && i > -1) {
170
170
  to({
171
171
  i,
172
172
  animated,
@@ -1 +1 @@
1
- {"version":3,"sources":["useCarouselController.tsx"],"names":["React","useRef","Easing","runOnJS","useAnimatedReaction","useSharedValue","dealWithAnimation","convertToSharedIndex","round","useCarouselController","options","size","data","loop","handlerOffsetX","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetXValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","offset","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '@/utils/dealWithAnimation';\nimport { convertToSharedIndex } from '@/utils/computedWithAutoFillData';\nimport { round } from '@/utils/log';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n data: TCarouselProps['data'];\n autoFillData: TCarouselProps['autoFillData'];\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n duration?: number;\n defaultIndex?: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n data,\n loop,\n handlerOffsetX,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n }),\n [data]\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % dataInfo.length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0)\n );\n }, [handlerOffsetX, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetXValue = handlerOffsetX.value;\n const toInt = round(handlerOffsetXValue / size) % dataInfo.length;\n const isPositive = handlerOffsetXValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffsetX,\n ]\n );\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffsetX.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n\n const offset = handlerOffsetX.value + (index.value - i) * size;\n\n if (animated) {\n index.value = i;\n handlerOffsetX.value = scrollWithTiming(offset, onFinished);\n } else {\n handlerOffsetX.value = offset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n\n if (i) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count) {\n return;\n }\n\n const n = Math.round(count);\n\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next, to]\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
1
+ {"version":3,"sources":["useCarouselController.tsx"],"names":["React","useRef","Easing","runOnJS","useAnimatedReaction","useSharedValue","dealWithAnimation","convertToSharedIndex","round","useCarouselController","options","size","data","loop","handlerOffsetX","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetXValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","offset","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '@/utils/dealWithAnimation';\nimport { convertToSharedIndex } from '@/utils/computedWithAutoFillData';\nimport { round } from '@/utils/log';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n data: TCarouselProps['data'];\n autoFillData: TCarouselProps['autoFillData'];\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n duration?: number;\n defaultIndex?: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n data,\n loop,\n handlerOffsetX,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n }),\n [data]\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % dataInfo.length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0)\n );\n }, [handlerOffsetX, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetXValue = handlerOffsetX.value;\n const toInt = round(handlerOffsetXValue / size) % dataInfo.length;\n const isPositive = handlerOffsetXValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffsetX,\n ]\n );\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffsetX.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n\n const offset = handlerOffsetX.value + (index.value - i) * size;\n\n if (animated) {\n index.value = i;\n handlerOffsetX.value = scrollWithTiming(offset, onFinished);\n } else {\n handlerOffsetX.value = offset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n\n if (typeof i === 'number' && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count) {\n return;\n }\n\n const n = Math.round(count);\n\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next, to]\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-reanimated-carousel",
3
- "version": "2.5.0",
3
+ "version": "2.5.1",
4
4
  "description": "Simple carousel component.fully implemented using Reanimated 2.Infinitely scrolling, very smooth.",
5
5
  "main": "lib/commonjs/index",
6
6
  "types": "lib/typescript/index.d.ts",
@@ -256,7 +256,7 @@ export function useCarouselController(options: IOpts): ICarouselController {
256
256
  (opts: TCarouselActionOptions = {}) => {
257
257
  const { index: i, count, animated = false, onFinished } = opts;
258
258
 
259
- if (i) {
259
+ if (typeof i === 'number' && i > -1) {
260
260
  to({ i, animated, onFinished });
261
261
  return;
262
262
  }