react-native-reanimated-carousel 2.3.10 → 2.3.11
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/lib/commonjs/hooks/useCarouselController.js +1 -1
- package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
- package/lib/commonjs/hooks/useCommonVariables.js +1 -1
- package/lib/commonjs/hooks/useCommonVariables.js.map +1 -1
- package/lib/module/hooks/useCarouselController.js +4 -6
- package/lib/module/hooks/useCarouselController.js.map +1 -1
- package/lib/module/hooks/useCommonVariables.js +2 -3
- package/lib/module/hooks/useCommonVariables.js.map +1 -1
- package/package.json +1 -1
- package/src/hooks/useCarouselController.tsx +24 -22
- package/src/hooks/useCommonVariables.ts +2 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.useCarouselController=useCarouselController;var _react=_interopRequireDefault(require("react"));var _constants=require("../constants");var _reactNativeReanimated=require("react-native-reanimated");var _dealWithAnimation=require("../utils/dealWithAnimation");var _computedWithAutoFillData=require("../utils/computedWithAutoFillData");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,_reactNativeReanimated.useSharedValue)(defaultIndex);var sharedPreIndex=(0,_reactNativeReanimated.useSharedValue)(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]);
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.useCarouselController=useCarouselController;var _react=_interopRequireDefault(require("react"));var _constants=require("../constants");var _reactNativeReanimated=require("react-native-reanimated");var _dealWithAnimation=require("../utils/dealWithAnimation");var _computedWithAutoFillData=require("../utils/computedWithAutoFillData");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,_reactNativeReanimated.useSharedValue)(defaultIndex);var sharedPreIndex=(0,_reactNativeReanimated.useSharedValue)(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]);(0,_reactNativeReanimated.useDerivedValue)(function(){var _f=function _f(){var handlerOffsetXValue=handlerOffsetX.value;sharedPreIndex.value=sharedIndex.value;var toInt=handlerOffsetXValue/size%dataInfo.length;var isPositive=handlerOffsetXValue<=0;var i=isPositive?Math.abs(toInt):Math.abs(toInt>0?dataInfo.length-toInt:0);index.value=i;sharedIndex.value=(0,_computedWithAutoFillData.convertToSharedIndex)({loop:loop,rawDataLength:dataInfo.originalLength,autoFillData:autoFillData,index:i});};_f._closure={handlerOffsetX:handlerOffsetX,sharedPreIndex:sharedPreIndex,sharedIndex:sharedIndex,size:size,dataInfo:dataInfo,index:index,convertToSharedIndex:_computedWithAutoFillData.convertToSharedIndex,loop:loop,autoFillData:autoFillData};_f.asString="function _f(){const{handlerOffsetX,sharedPreIndex,sharedIndex,size,dataInfo,index,convertToSharedIndex,loop,autoFillData}=jsThis._closure;{const handlerOffsetXValue=handlerOffsetX.value;sharedPreIndex.value=sharedIndex.value;const toInt=handlerOffsetXValue/size%dataInfo.length;const isPositive=handlerOffsetXValue<=0;const i=isPositive?Math.abs(toInt):Math.abs(toInt>0?dataInfo.length-toInt:0);index.value=i;sharedIndex.value=convertToSharedIndex({loop:loop,rawDataLength:dataInfo.originalLength,autoFillData:autoFillData,index:i});}}";_f.__workletHash=7043149865678;_f.__location="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (79:20)";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/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (124: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/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (122: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/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (146: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(idx){var animated=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;if(idx===index.value)return;if(!canSliding())return;onScrollBegin==null?void 0:onScrollBegin();var offset=handlerOffsetX.value+(index.value-idx)*size;if(animated){index.value=idx;handlerOffsetX.value=scrollWithTiming(offset);}else{handlerOffsetX.value=offset;index.value=idx;(0,_reactNativeReanimated.runOnJS)(onScrollEnd)();}},[index,canSliding,onScrollBegin,handlerOffsetX,size,scrollWithTiming,onScrollEnd]);var scrollTo=_react.default.useCallback(function(){var opts=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var count=opts.count,_opts$animated3=opts.animated,animated=_opts$animated3===void 0?false:_opts$animated3,onFinished=opts.onFinished;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]);return{sharedIndex:sharedIndex,sharedPreIndex:sharedPreIndex,to:to,next:next,prev:prev,scrollTo:scrollTo,getCurrentIndex:getCurrentIndex};}
|
|
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","computedIndex","handlerOffsetXValue","toInt","isPositive","i","rawDataLength","convertToSharedIndex","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","runOnJS","defaultWithAnimation","type","config","easing","Easing","easeOutQuart","dealWithAnimation","next","opts","count","animated","nextPage","prev","prevPage","to","idx","offset","scrollTo","n"],"mappings":"gMAAA,oDAEA,uCACA,8DAUA,6DACA,2EAyBO,QAASA,CAAAA,qBAAT,CAA+BC,OAA/B,CAAoE,CACvE,GACIC,CAAAA,IADJ,CASID,OATJ,CACIC,IADJ,CAEIC,IAFJ,CASIF,OATJ,CAEIE,IAFJ,CAGIC,IAHJ,CASIH,OATJ,CAGIG,IAHJ,CAIIC,cAJJ,CASIJ,OATJ,CAIII,cAJJ,CAKIC,aALJ,CASIL,OATJ,CAKIK,aALJ,uBASIL,OATJ,CAMIM,YANJ,CAMIA,YANJ,gCAMmB,CANnB,uBAOIC,QAPJ,CASIP,OATJ,CAOIO,QAPJ,CAQIC,YARJ,CASIR,OATJ,CAQIQ,YARJ,CAWA,GAAMC,CAAAA,QAAQ,CAAGC,eAAMC,OAAN,CACb,iBAAO,CACHC,MAAM,CAAEV,IAAI,CAACU,MADV,CAEHC,OAAO,CAAE,CAACX,IAAI,CAACU,MAFZ,CAGHE,cAAc,CAAEZ,IAAI,CAACU,MAHlB,CAAP,EADa,CAMb,CAACV,IAAD,CANa,CAAjB,CASA,GAAMa,CAAAA,KAAK,CAAG,0CAAuBT,YAAvB,CAAd,CAEA,GAAMU,CAAAA,WAAW,CAAG,0CAAuBV,YAAvB,CAApB,CACA,GAAMW,CAAAA,cAAc,CAAG,0CAAuBX,YAAvB,CAAvB,CAEA,GAAMY,CAAAA,gBAAgB,CAAGR,eAAMS,WAAN,CAAkB,UAAM,CAC7C,GAAIhB,IAAJ,CAAU,CACN,MAAO,CAACiB,IAAI,CAACC,KAAL,CAAWjB,cAAc,CAACkB,KAAf,CAAuBrB,IAAlC,CAAR,CACH,CAED,GAAMsB,CAAAA,KAAK,CAAInB,cAAc,CAACkB,KAAf,CAAuBrB,IAAxB,CAAgCQ,QAAQ,CAACG,MAAvD,CACA,MAAOQ,CAAAA,IAAI,CAACC,KAAL,CACHjB,cAAc,CAACkB,KAAf,EAAwB,CAAxB,CACMF,IAAI,CAACI,GAAL,CAASD,KAAT,CADN,CAEMH,IAAI,CAACI,GAAL,CAASD,KAAK,CAAG,CAAR,CAAYd,QAAQ,CAACG,MAAT,CAAkBW,KAA9B,CAAsC,CAA/C,CAHH,CAAP,CAKH,CAXwB,CAWtB,CAACnB,cAAD,CAAiBK,QAAjB,CAA2BR,IAA3B,CAAiCE,IAAjC,CAXsB,CAAzB,CAaA,GAAMsB,CAAAA,aAAa,CAAGf,eAAMS,WAAN,+BACjBO,mBADiB,CACe,CAE7BT,cAAc,CAACK,KAAf,CAAuBN,WAAW,CAACM,KAAnC,CACA,GAAMK,CAAAA,KAAK,CAAID,mBAAmB,CAAGzB,IAAvB,CAA+BQ,QAAQ,CAACG,MAAtD,CACA,GAAMgB,CAAAA,UAAU,CAAGF,mBAAmB,EAAI,CAA1C,CACA,GAAMG,CAAAA,CAAC,CAAGD,UAAU,CACdR,IAAI,CAACI,GAAL,CAASG,KAAT,CADc,CAEdP,IAAI,CAACI,GAAL,CAASG,KAAK,CAAG,CAAR,CAAYlB,QAAQ,CAACG,MAAT,CAAkBe,KAA9B,CAAsC,CAA/C,CAFN,CAGAZ,KAAK,CAACO,KAAN,CAAcO,CAAd,CACAb,WAAW,CAACM,KAAZ,CAAoB,mDAAqB,CACrCnB,IAAI,CAAJA,IADqC,CAErC2B,aAAa,CAAErB,QAAQ,CAACK,cAFa,CAGrCN,YAAY,CAAEA,YAHuB,CAIrCO,KAAK,CAAEc,CAJ8B,CAArB,CAApB,CAMH,CAhBiB,6BA5ExBZ,cA4EwB,aAvExBD,WAuEwB,MA3EYf,IA2EZ,UAzEsCQ,QAyEtC,OAxExBM,KAwEwB,sBAvEJgB,8CAuEI,MAtEtB5B,IAsEsB,cApERK,YAoEQ,gsBAiBlB,CAACS,cAAD,CAAiBD,WAAjB,CAA8Bf,IAA9B,CAAoCQ,QAApC,CAA8CM,KAA9C,CAAqDZ,IAArD,CAA2DK,YAA3D,CAjBkB,CAAtB,CAoBA,iEAAoB,oBAAMJ,CAAAA,cAAc,CAACkB,KAArB,EAApB,6BAjGGlB,cAiGH,ySAAgDqB,aAAhD,CAA+D,CAC3DrB,cAD2D,CAA/D,EAIA,GAAM4B,CAAAA,eAAe,CAAGtB,eAAMS,WAAN,CAAkB,UAAM,CAC5C,MAAOJ,CAAAA,KAAK,CAACO,KAAb,CACH,CAFuB,CAErB,CAACP,KAAD,CAFqB,CAAxB,CAIA,GAAMkB,CAAAA,UAAU,CAAGvB,eAAMS,WAAN,CAAkB,UAAM,CACvC,MAAO,CAACV,QAAQ,CAACI,OAAjB,CACH,CAFkB,CAEhB,CAACJ,QAAD,CAFgB,CAAnB,CAIA,GAAMyB,CAAAA,WAAW,CAAGxB,eAAMS,WAAN,CAAkB,UAAM,CACxCnB,OAAO,CAACkC,WAAR,cAAAlC,OAAO,CAACkC,WAAR,GACH,CAFmB,CAEjB,CAAClC,OAAD,CAFiB,CAApB,CAIA,GAAMmC,CAAAA,aAAa,CAAGzB,eAAMS,WAAN,CAAkB,UAAM,CAC1CnB,OAAO,CAACmC,aAAR,cAAAnC,OAAO,CAACmC,aAAR,GACH,CAFqB,CAEnB,CAACnC,OAAD,CAFmB,CAAtB,CAIA,GAAMoC,CAAAA,gBAAgB,CAAG1B,eAAMS,WAAN,+BACpBkB,OADoB,CACHC,UADG,CACyB,CAE1C,GAAMC,CAAAA,QAAQ,+BAAIC,UAAJ,CAA4B,CAEtC,GAAIA,UAAJ,CAAgB,CACZ,mCAAQN,WAAR,IACAI,UAAU,EAAI,mCAAQA,UAAR,GAAd,CACH,CACJ,CANa,sBArHRG,8BAqHQ,aAtHdP,WAsHc,YArHAI,UAqHA,gXAAd,CAQA,GAAMI,CAAAA,oBAAyC,CAAG,CAC9CC,IAAI,CAAE,QADwC,CAE9CC,MAAM,CAAE,CAAErC,QAAQ,CAARA,QAAF,CAAYsC,MAAM,CAAEC,kBAAOC,YAA3B,CAFsC,CAAlD,CAKA,MAAO,yCAAkB1C,aAAlB,OAAkBA,aAAlB,CAAmCqC,oBAAnC,EACHL,OADG,CAEHE,QAFG,CAAP,CAIH,CApBoB,sBA/GTE,8BA+GS,aAhHfP,WAgHe,UAxGvB3B,QAwGuB,sBAvGfuC,kBAAOC,YAuGQ,oBApGpBC,oCAoGoB,eApGF3C,aAoGE,itBAqBrB,CAACE,QAAD,CAAWF,aAAX,CAA0B6B,WAA1B,CArBqB,CAAzB,CAwBA,GAAMe,CAAAA,IAAI,CAAGvC,eAAMS,WAAN,gCAC8B,IAAtC+B,CAAAA,IAAsC,2DAAP,EAAO,CAEnC,gBAAmDA,IAAnD,CAAQC,KAAR,CAAQA,KAAR,sBAAgB,CAAhB,4BAAmDD,IAAnD,CAAmBE,QAAnB,CAAmBA,QAAnB,yBAA8B,IAA9B,gBAAoCd,UAApC,CAAmDY,IAAnD,CAAoCZ,UAApC,CACA,GAAI,CAACL,UAAU,EAAX,EAAkB,CAAC9B,IAAD,EAASY,KAAK,CAACO,KAAN,EAAeb,QAAQ,CAACG,MAAT,CAAkB,CAAhE,CACI,OAEJuB,aAAa,MAAb,QAAAA,aAAa,GAEb,GAAMkB,CAAAA,QAAQ,CAAGnC,gBAAgB,GAAKiC,KAAtC,CACApC,KAAK,CAACO,KAAN,CAAc+B,QAAd,CAEA,GAAID,QAAJ,CAAc,CACVhD,cAAc,CAACkB,KAAf,CAAuBc,gBAAgB,CACnC,CAACiB,QAAD,CAAYpD,IADuB,CAEnCqC,UAFmC,CAAvC,CAIH,CALD,IAKO,CACHlC,cAAc,CAACkB,KAAf,CAAuB,CAAC+B,QAAD,CAAYpD,IAAnC,CACAqC,UAAU,MAAV,QAAAA,UAAU,GACb,CACJ,CArBQ,yBAvIVL,UAuIU,MAvIO9B,IAuIP,OApIfY,KAoIe,UAvI8BN,QAuI9B,eAtIf0B,aAsIe,kBArIEjB,gBAqIF,gBA/Hbd,cA+Ha,kBAjIWgC,gBAiIX,MA/HsBnC,IA+HtB,0zBAsBT,CACIgC,UADJ,CAEI9B,IAFJ,CAGIY,KAHJ,CAIIN,QAJJ,CAKI0B,aALJ,CAMI/B,cANJ,CAOIH,IAPJ,CAQImC,gBARJ,CASIlB,gBATJ,CAtBS,CAAb,CAmCA,GAAMoC,CAAAA,IAAI,CAAG5C,eAAMS,WAAN,CACT,UAAuC,IAAtC+B,CAAAA,IAAsC,2DAAP,EAAO,CACnC,iBAAmDA,IAAnD,CAAQC,KAAR,CAAQA,KAAR,uBAAgB,CAAhB,8BAAmDD,IAAnD,CAAmBE,QAAnB,CAAmBA,QAAnB,0BAA8B,IAA9B,iBAAoCd,UAApC,CAAmDY,IAAnD,CAAoCZ,UAApC,CACA,GAAI,CAACL,UAAU,EAAX,EAAkB,CAAC9B,IAAD,EAASY,KAAK,CAACO,KAAN,EAAe,CAA9C,CAAkD,OAElDa,aAAa,MAAb,QAAAA,aAAa,GAEb,GAAMoB,CAAAA,QAAQ,CAAGrC,gBAAgB,GAAKiC,KAAtC,CACApC,KAAK,CAACO,KAAN,CAAciC,QAAd,CAEA,GAAIH,QAAJ,CAAc,CACVhD,cAAc,CAACkB,KAAf,CAAuBc,gBAAgB,CACnC,CAACmB,QAAD,CAAYtD,IADuB,CAEnCqC,UAFmC,CAAvC,CAIH,CALD,IAKO,CACHlC,cAAc,CAACkB,KAAf,CAAuB,CAACiC,QAAD,CAAYtD,IAAnC,CACAqC,UAAU,MAAV,QAAAA,UAAU,GACb,CACJ,CAnBQ,CAoBT,CACIL,UADJ,CAEI9B,IAFJ,CAGIY,KAHJ,CAIIoB,aAJJ,CAKI/B,cALJ,CAMIH,IANJ,CAOImC,gBAPJ,CAQIlB,gBARJ,CApBS,CAAb,CAgCA,GAAMsC,CAAAA,EAAE,CAAG9C,eAAMS,WAAN,CACP,SAACsC,GAAD,CAA4C,IAA9BL,CAAAA,QAA8B,2DAAV,KAAU,CACxC,GAAIK,GAAG,GAAK1C,KAAK,CAACO,KAAlB,CAAyB,OACzB,GAAI,CAACW,UAAU,EAAf,CAAmB,OAEnBE,aAAa,MAAb,QAAAA,aAAa,GAEb,GAAMuB,CAAAA,MAAM,CAAGtD,cAAc,CAACkB,KAAf,CAAuB,CAACP,KAAK,CAACO,KAAN,CAAcmC,GAAf,EAAsBxD,IAA5D,CAEA,GAAImD,QAAJ,CAAc,CACVrC,KAAK,CAACO,KAAN,CAAcmC,GAAd,CACArD,cAAc,CAACkB,KAAf,CAAuBc,gBAAgB,CAACsB,MAAD,CAAvC,CACH,CAHD,IAGO,CACHtD,cAAc,CAACkB,KAAf,CAAuBoC,MAAvB,CACA3C,KAAK,CAACO,KAAN,CAAcmC,GAAd,CACA,mCAAQvB,WAAR,IACH,CACJ,CAjBM,CAkBP,CACInB,KADJ,CAEIkB,UAFJ,CAGIE,aAHJ,CAII/B,cAJJ,CAKIH,IALJ,CAMImC,gBANJ,CAOIF,WAPJ,CAlBO,CAAX,CA6BA,GAAMyB,CAAAA,QAAQ,CAAGjD,eAAMS,WAAN,CACb,UAAuC,IAAtC+B,CAAAA,IAAsC,2DAAP,EAAO,CACnC,GAAQC,CAAAA,KAAR,CAAgDD,IAAhD,CAAQC,KAAR,iBAAgDD,IAAhD,CAAeE,QAAf,CAAeA,QAAf,0BAA0B,KAA1B,iBAAiCd,UAAjC,CAAgDY,IAAhD,CAAiCZ,UAAjC,CACA,GAAI,CAACa,KAAL,CAAY,CACR,OACH,CACD,GAAMS,CAAAA,CAAC,CAAGxC,IAAI,CAACC,KAAL,CAAW8B,KAAX,CAAV,CACA,GAAIS,CAAC,CAAG,CAAR,CAAW,CACPN,IAAI,CAAC,CAAEH,KAAK,CAAE/B,IAAI,CAACI,GAAL,CAASoC,CAAT,CAAT,CAAsBR,QAAQ,CAARA,QAAtB,CAAgCd,UAAU,CAAVA,UAAhC,CAAD,CAAJ,CACH,CAFD,IAEO,CACHW,IAAI,CAAC,CAAEE,KAAK,CAAES,CAAT,CAAYR,QAAQ,CAARA,QAAZ,CAAsBd,UAAU,CAAVA,UAAtB,CAAD,CAAJ,CACH,CACJ,CAZY,CAab,CAACgB,IAAD,CAAOL,IAAP,CAba,CAAjB,CAgBA,MAAO,CACHjC,WAAW,CAAXA,WADG,CAEHC,cAAc,CAAdA,cAFG,CAGHuC,EAAE,CAAFA,EAHG,CAIHP,IAAI,CAAJA,IAJG,CAKHK,IAAI,CAAJA,IALG,CAMHK,QAAQ,CAARA,QANG,CAOH3B,eAAe,CAAfA,eAPG,CAAP,CASH","sourcesContent":["import React 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';\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 sharedIndex: Animated.SharedValue<number>;\n sharedPreIndex: Animated.SharedValue<number>;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n to: (index: number, animated?: boolean) => void;\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 = useSharedValue<number>(defaultIndex);\n const sharedPreIndex = useSharedValue<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 const computedIndex = React.useCallback(\n (handlerOffsetXValue: number) => {\n 'worklet';\n sharedPreIndex.value = sharedIndex.value;\n const toInt = (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 index.value = i;\n sharedIndex.value = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n },\n [sharedPreIndex, sharedIndex, size, dataInfo, index, loop, autoFillData]\n );\n\n useAnimatedReaction(() => handlerOffsetX.value, computedIndex, [\n handlerOffsetX,\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 (idx: number, animated: boolean = false) => {\n if (idx === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n\n const offset = handlerOffsetX.value + (index.value - idx) * size;\n\n if (animated) {\n index.value = idx;\n handlerOffsetX.value = scrollWithTiming(offset);\n } else {\n handlerOffsetX.value = offset;\n index.value = idx;\n runOnJS(onScrollEnd)();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n onScrollEnd,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count, animated = false, onFinished } = opts;\n if (!count) {\n return;\n }\n const n = Math.round(count);\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]\n );\n\n return {\n sharedIndex,\n sharedPreIndex,\n to,\n next,\n prev,\n scrollTo,\n getCurrentIndex,\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","handlerOffsetXValue","toInt","isPositive","i","rawDataLength","convertToSharedIndex","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","runOnJS","defaultWithAnimation","type","config","easing","Easing","easeOutQuart","dealWithAnimation","next","opts","count","animated","nextPage","prev","prevPage","to","idx","offset","scrollTo","n"],"mappings":"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","sourcesContent":["import React from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useDerivedValue,\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';\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 sharedIndex: Animated.SharedValue<number>;\n sharedPreIndex: Animated.SharedValue<number>;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n to: (index: number, animated?: boolean) => void;\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 = useSharedValue<number>(defaultIndex);\n const sharedPreIndex = useSharedValue<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 useDerivedValue(() => {\n const handlerOffsetXValue = handlerOffsetX.value;\n sharedPreIndex.value = sharedIndex.value;\n const toInt = (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 index.value = i;\n sharedIndex.value = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n }, [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffsetX,\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 (idx: number, animated: boolean = false) => {\n if (idx === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n\n const offset = handlerOffsetX.value + (index.value - idx) * size;\n\n if (animated) {\n index.value = idx;\n handlerOffsetX.value = scrollWithTiming(offset);\n } else {\n handlerOffsetX.value = offset;\n index.value = idx;\n runOnJS(onScrollEnd)();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n onScrollEnd,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count, animated = false, onFinished } = opts;\n if (!count) {\n return;\n }\n const n = Math.round(count);\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]\n );\n\n return {\n sharedIndex,\n sharedPreIndex,\n to,\n next,\n prev,\n scrollTo,\n getCurrentIndex,\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");function useCommonVariables(props){var vertical=props.vertical,height=props.height,width=props.width,data=props.data,defaultIndex=props.defaultIndex
|
|
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");function useCommonVariables(props){var vertical=props.vertical,height=props.height,width=props.width,data=props.data,defaultIndex=props.defaultIndex;var size=vertical?height:width;var validLength=data.length-1;var defaultHandlerOffsetX=-Math.abs(defaultIndex*size);var handlerOffsetX=(0,_reactNativeReanimated.useSharedValue)(defaultHandlerOffsetX);_react.default.useEffect(function(){handlerOffsetX.value=defaultHandlerOffsetX;},[vertical,handlerOffsetX,defaultHandlerOffsetX]);return{size:size,validLength:validLength,handlerOffsetX:handlerOffsetX};}
|
|
2
2
|
//# sourceMappingURL=useCommonVariables.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useCommonVariables.ts"],"names":["useCommonVariables","props","vertical","height","width","data","defaultIndex","
|
|
1
|
+
{"version":3,"sources":["useCommonVariables.ts"],"names":["useCommonVariables","props","vertical","height","width","data","defaultIndex","size","validLength","length","defaultHandlerOffsetX","Math","abs","handlerOffsetX","React","useEffect","value"],"mappings":"0LAAA,oDACA,8DASO,QAASA,CAAAA,kBAAT,CACHC,KADG,CAEa,CAChB,GAAQC,CAAAA,QAAR,CAAwDD,KAAxD,CAAQC,QAAR,CAAkBC,MAAlB,CAAwDF,KAAxD,CAAkBE,MAAlB,CAA0BC,KAA1B,CAAwDH,KAAxD,CAA0BG,KAA1B,CAAiCC,IAAjC,CAAwDJ,KAAxD,CAAiCI,IAAjC,CAAuCC,YAAvC,CAAwDL,KAAxD,CAAuCK,YAAvC,CACA,GAAMC,CAAAA,IAAI,CAAGL,QAAQ,CAAGC,MAAH,CAAYC,KAAjC,CACA,GAAMI,CAAAA,WAAW,CAAGH,IAAI,CAACI,MAAL,CAAc,CAAlC,CACA,GAAMC,CAAAA,qBAAqB,CAAG,CAACC,IAAI,CAACC,GAAL,CAASN,YAAY,CAAGC,IAAxB,CAA/B,CACA,GAAMM,CAAAA,cAAc,CAAG,0CAAuBH,qBAAvB,CAAvB,CAEAI,eAAMC,SAAN,CAAgB,UAAM,CAClBF,cAAc,CAACG,KAAf,CAAuBN,qBAAvB,CACH,CAFD,CAEG,CAACR,QAAD,CAAWW,cAAX,CAA2BH,qBAA3B,CAFH,EAIA,MAAO,CACHH,IAAI,CAAJA,IADG,CAEHC,WAAW,CAAXA,WAFG,CAGHK,cAAc,CAAdA,cAHG,CAAP,CAKH","sourcesContent":["import React from 'react';\nimport Animated, { useSharedValue } from 'react-native-reanimated';\nimport type { TInitializeCarouselProps } from './useInitProps';\n\ninterface ICommonVariables {\n size: number;\n validLength: number;\n handlerOffsetX: Animated.SharedValue<number>;\n}\n\nexport function useCommonVariables(\n props: TInitializeCarouselProps<any>\n): ICommonVariables {\n const { vertical, height, width, data, defaultIndex } = props;\n const size = vertical ? height : width;\n const validLength = data.length - 1;\n const defaultHandlerOffsetX = -Math.abs(defaultIndex * size);\n const handlerOffsetX = useSharedValue<number>(defaultHandlerOffsetX);\n\n React.useEffect(() => {\n handlerOffsetX.value = defaultHandlerOffsetX;\n }, [vertical, handlerOffsetX, defaultHandlerOffsetX]);\n\n return {\n size,\n validLength,\n handlerOffsetX,\n };\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Easing } from '../constants';
|
|
3
|
-
import { runOnJS,
|
|
3
|
+
import { runOnJS, useDerivedValue, useSharedValue } from 'react-native-reanimated';
|
|
4
4
|
import { dealWithAnimation } from '@/utils/dealWithAnimation';
|
|
5
5
|
import { convertToSharedIndex } from '@/utils/computedWithAutoFillData';
|
|
6
6
|
export function useCarouselController(options) {
|
|
@@ -31,9 +31,8 @@ export function useCarouselController(options) {
|
|
|
31
31
|
const fixed = handlerOffsetX.value / size % dataInfo.length;
|
|
32
32
|
return Math.round(handlerOffsetX.value <= 0 ? Math.abs(fixed) : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0));
|
|
33
33
|
}, [handlerOffsetX, dataInfo, size, loop]);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
useDerivedValue(() => {
|
|
35
|
+
const handlerOffsetXValue = handlerOffsetX.value;
|
|
37
36
|
sharedPreIndex.value = sharedIndex.value;
|
|
38
37
|
const toInt = handlerOffsetXValue / size % dataInfo.length;
|
|
39
38
|
const isPositive = handlerOffsetXValue <= 0;
|
|
@@ -45,8 +44,7 @@ export function useCarouselController(options) {
|
|
|
45
44
|
autoFillData: autoFillData,
|
|
46
45
|
index: i
|
|
47
46
|
});
|
|
48
|
-
}, [sharedPreIndex, sharedIndex, size, dataInfo, index, loop, autoFillData]);
|
|
49
|
-
useAnimatedReaction(() => handlerOffsetX.value, computedIndex, [handlerOffsetX]);
|
|
47
|
+
}, [sharedPreIndex, sharedIndex, size, dataInfo, index, loop, autoFillData, handlerOffsetX]);
|
|
50
48
|
const getCurrentIndex = React.useCallback(() => {
|
|
51
49
|
return index.value;
|
|
52
50
|
}, [index]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useCarouselController.tsx"],"names":["React","Easing","runOnJS","useAnimatedReaction","useSharedValue","dealWithAnimation","convertToSharedIndex","useCarouselController","options","size","data","loop","handlerOffsetX","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","computedIndex","handlerOffsetXValue","toInt","isPositive","i","rawDataLength","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","idx","offset","scrollTo","n"],"mappings":"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","sourcesContent":["import React 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';\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 sharedIndex: Animated.SharedValue<number>;\n sharedPreIndex: Animated.SharedValue<number>;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n to: (index: number, animated?: boolean) => void;\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 = useSharedValue<number>(defaultIndex);\n const sharedPreIndex = useSharedValue<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 const computedIndex = React.useCallback(\n (handlerOffsetXValue: number) => {\n 'worklet';\n sharedPreIndex.value = sharedIndex.value;\n const toInt = (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 index.value = i;\n sharedIndex.value = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n },\n [sharedPreIndex, sharedIndex, size, dataInfo, index, loop, autoFillData]\n );\n\n useAnimatedReaction(() => handlerOffsetX.value, computedIndex, [\n handlerOffsetX,\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 (idx: number, animated: boolean = false) => {\n if (idx === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n\n const offset = handlerOffsetX.value + (index.value - idx) * size;\n\n if (animated) {\n index.value = idx;\n handlerOffsetX.value = scrollWithTiming(offset);\n } else {\n handlerOffsetX.value = offset;\n index.value = idx;\n runOnJS(onScrollEnd)();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n onScrollEnd,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count, animated = false, onFinished } = opts;\n if (!count) {\n return;\n }\n const n = Math.round(count);\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]\n );\n\n return {\n sharedIndex,\n sharedPreIndex,\n to,\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["useCarouselController.tsx"],"names":["React","Easing","runOnJS","useDerivedValue","useSharedValue","dealWithAnimation","convertToSharedIndex","useCarouselController","options","size","data","loop","handlerOffsetX","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","handlerOffsetXValue","toInt","isPositive","i","rawDataLength","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","idx","offset","scrollTo","n"],"mappings":"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","sourcesContent":["import React from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useDerivedValue,\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';\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 sharedIndex: Animated.SharedValue<number>;\n sharedPreIndex: Animated.SharedValue<number>;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n to: (index: number, animated?: boolean) => void;\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 = useSharedValue<number>(defaultIndex);\n const sharedPreIndex = useSharedValue<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 useDerivedValue(() => {\n const handlerOffsetXValue = handlerOffsetX.value;\n sharedPreIndex.value = sharedIndex.value;\n const toInt = (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 index.value = i;\n sharedIndex.value = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n }, [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffsetX,\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 (idx: number, animated: boolean = false) => {\n if (idx === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n\n const offset = handlerOffsetX.value + (index.value - idx) * size;\n\n if (animated) {\n index.value = idx;\n handlerOffsetX.value = scrollWithTiming(offset);\n } else {\n handlerOffsetX.value = offset;\n index.value = idx;\n runOnJS(onScrollEnd)();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n onScrollEnd,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count, animated = false, onFinished } = opts;\n if (!count) {\n return;\n }\n const n = Math.round(count);\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]\n );\n\n return {\n sharedIndex,\n sharedPreIndex,\n to,\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n };\n}\n"]}
|
|
@@ -6,8 +6,7 @@ export function useCommonVariables(props) {
|
|
|
6
6
|
height,
|
|
7
7
|
width,
|
|
8
8
|
data,
|
|
9
|
-
defaultIndex
|
|
10
|
-
rawData
|
|
9
|
+
defaultIndex
|
|
11
10
|
} = props;
|
|
12
11
|
const size = vertical ? height : width;
|
|
13
12
|
const validLength = data.length - 1;
|
|
@@ -15,7 +14,7 @@ export function useCommonVariables(props) {
|
|
|
15
14
|
const handlerOffsetX = useSharedValue(defaultHandlerOffsetX);
|
|
16
15
|
React.useEffect(() => {
|
|
17
16
|
handlerOffsetX.value = defaultHandlerOffsetX;
|
|
18
|
-
}, [vertical, handlerOffsetX, defaultHandlerOffsetX
|
|
17
|
+
}, [vertical, handlerOffsetX, defaultHandlerOffsetX]);
|
|
19
18
|
return {
|
|
20
19
|
size,
|
|
21
20
|
validLength,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useCommonVariables.ts"],"names":["React","useSharedValue","useCommonVariables","props","vertical","height","width","data","defaultIndex","
|
|
1
|
+
{"version":3,"sources":["useCommonVariables.ts"],"names":["React","useSharedValue","useCommonVariables","props","vertical","height","width","data","defaultIndex","size","validLength","length","defaultHandlerOffsetX","Math","abs","handlerOffsetX","useEffect","value"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAAmBC,cAAnB,QAAyC,yBAAzC;AASA,OAAO,SAASC,kBAAT,CACHC,KADG,EAEa;AAChB,QAAM;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,MAAZ;AAAoBC,IAAAA,KAApB;AAA2BC,IAAAA,IAA3B;AAAiCC,IAAAA;AAAjC,MAAkDL,KAAxD;AACA,QAAMM,IAAI,GAAGL,QAAQ,GAAGC,MAAH,GAAYC,KAAjC;AACA,QAAMI,WAAW,GAAGH,IAAI,CAACI,MAAL,GAAc,CAAlC;AACA,QAAMC,qBAAqB,GAAG,CAACC,IAAI,CAACC,GAAL,CAASN,YAAY,GAAGC,IAAxB,CAA/B;AACA,QAAMM,cAAc,GAAGd,cAAc,CAASW,qBAAT,CAArC;AAEAZ,EAAAA,KAAK,CAACgB,SAAN,CAAgB,MAAM;AAClBD,IAAAA,cAAc,CAACE,KAAf,GAAuBL,qBAAvB;AACH,GAFD,EAEG,CAACR,QAAD,EAAWW,cAAX,EAA2BH,qBAA3B,CAFH;AAIA,SAAO;AACHH,IAAAA,IADG;AAEHC,IAAAA,WAFG;AAGHK,IAAAA;AAHG,GAAP;AAKH","sourcesContent":["import React from 'react';\nimport Animated, { useSharedValue } from 'react-native-reanimated';\nimport type { TInitializeCarouselProps } from './useInitProps';\n\ninterface ICommonVariables {\n size: number;\n validLength: number;\n handlerOffsetX: Animated.SharedValue<number>;\n}\n\nexport function useCommonVariables(\n props: TInitializeCarouselProps<any>\n): ICommonVariables {\n const { vertical, height, width, data, defaultIndex } = props;\n const size = vertical ? height : width;\n const validLength = data.length - 1;\n const defaultHandlerOffsetX = -Math.abs(defaultIndex * size);\n const handlerOffsetX = useSharedValue<number>(defaultHandlerOffsetX);\n\n React.useEffect(() => {\n handlerOffsetX.value = defaultHandlerOffsetX;\n }, [vertical, handlerOffsetX, defaultHandlerOffsetX]);\n\n return {\n size,\n validLength,\n handlerOffsetX,\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-reanimated-carousel",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.11",
|
|
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",
|
|
@@ -3,7 +3,7 @@ import type Animated from 'react-native-reanimated';
|
|
|
3
3
|
import { Easing } from '../constants';
|
|
4
4
|
import {
|
|
5
5
|
runOnJS,
|
|
6
|
-
|
|
6
|
+
useDerivedValue,
|
|
7
7
|
useSharedValue,
|
|
8
8
|
} from 'react-native-reanimated';
|
|
9
9
|
import type {
|
|
@@ -76,27 +76,29 @@ export function useCarouselController(options: IOpts): ICarouselController {
|
|
|
76
76
|
);
|
|
77
77
|
}, [handlerOffsetX, dataInfo, size, loop]);
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
79
|
+
useDerivedValue(() => {
|
|
80
|
+
const handlerOffsetXValue = handlerOffsetX.value;
|
|
81
|
+
sharedPreIndex.value = sharedIndex.value;
|
|
82
|
+
const toInt = (handlerOffsetXValue / size) % dataInfo.length;
|
|
83
|
+
const isPositive = handlerOffsetXValue <= 0;
|
|
84
|
+
const i = isPositive
|
|
85
|
+
? Math.abs(toInt)
|
|
86
|
+
: Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);
|
|
87
|
+
index.value = i;
|
|
88
|
+
sharedIndex.value = convertToSharedIndex({
|
|
89
|
+
loop,
|
|
90
|
+
rawDataLength: dataInfo.originalLength,
|
|
91
|
+
autoFillData: autoFillData!,
|
|
92
|
+
index: i,
|
|
93
|
+
});
|
|
94
|
+
}, [
|
|
95
|
+
sharedPreIndex,
|
|
96
|
+
sharedIndex,
|
|
97
|
+
size,
|
|
98
|
+
dataInfo,
|
|
99
|
+
index,
|
|
100
|
+
loop,
|
|
101
|
+
autoFillData,
|
|
100
102
|
handlerOffsetX,
|
|
101
103
|
]);
|
|
102
104
|
|
|
@@ -11,7 +11,7 @@ interface ICommonVariables {
|
|
|
11
11
|
export function useCommonVariables(
|
|
12
12
|
props: TInitializeCarouselProps<any>
|
|
13
13
|
): ICommonVariables {
|
|
14
|
-
const { vertical, height, width, data, defaultIndex
|
|
14
|
+
const { vertical, height, width, data, defaultIndex } = props;
|
|
15
15
|
const size = vertical ? height : width;
|
|
16
16
|
const validLength = data.length - 1;
|
|
17
17
|
const defaultHandlerOffsetX = -Math.abs(defaultIndex * size);
|
|
@@ -19,7 +19,7 @@ export function useCommonVariables(
|
|
|
19
19
|
|
|
20
20
|
React.useEffect(() => {
|
|
21
21
|
handlerOffsetX.value = defaultHandlerOffsetX;
|
|
22
|
-
}, [vertical, handlerOffsetX, defaultHandlerOffsetX
|
|
22
|
+
}, [vertical, handlerOffsetX, defaultHandlerOffsetX]);
|
|
23
23
|
|
|
24
24
|
return {
|
|
25
25
|
size,
|