react-native-reanimated-carousel 2.3.11 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _react=_interopRequireDefault(require("react"));var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _useCarouselController=require("./hooks/useCarouselController");var _useAutoPlay2=require("./hooks/useAutoPlay");var _usePropsErrorBoundary=require("./hooks/usePropsErrorBoundary");var _ScrollViewGesture=require("./ScrollViewGesture");var _useVisibleRanges=require("./hooks/useVisibleRanges");var _reactNative=require("react-native");var _BaseLayout=require("./layouts/BaseLayout");var _useLayoutConfig=require("./hooks/useLayoutConfig");var _useInitProps=require("./hooks/useInitProps");var _store=require("./store");var _useCommonVariables=require("./hooks/useCommonVariables");var _useOnProgressChange=require("./hooks/useOnProgressChange");var _computedWithAutoFillData=require("./utils/computedWithAutoFillData");var _this=this,_jsxFileName="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/Carousel.tsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;})),keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?ownKeys(Object(source),!0).forEach(function(key){(0,_defineProperty2.default)(target,key,source[key]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}return target;}var Carousel=_react.default.forwardRef(function(_props,ref){var props=(0,_useInitProps.useInitProps)(_props);var testID=props.testID,data=props.data,rawData=props.rawData,loop=props.loop,autoFillData=props.autoFillData,mode=props.mode,style=props.style,width=props.width,height=props.height,vertical=props.vertical,autoPlay=props.autoPlay,windowSize=props.windowSize,autoPlayReverse=props.autoPlayReverse,autoPlayInterval=props.autoPlayInterval,scrollAnimationDuration=props.scrollAnimationDuration,withAnimation=props.withAnimation,renderItem=props.renderItem,onScrollEnd=props.onScrollEnd,onSnapToItem=props.onSnapToItem,_onScrollBegin=props.onScrollBegin,onProgressChange=props.onProgressChange,customAnimation=props.customAnimation,defaultIndex=props.defaultIndex;var commonVariables=(0,_useCommonVariables.useCommonVariables)(props);var size=commonVariables.size,handlerOffsetX=commonVariables.handlerOffsetX;var dataLength=data.length;var offsetX=(0,_reactNativeReanimated.useDerivedValue)(function(){var _f=function _f(){var totalSize=size*dataLength;var x=handlerOffsetX.value%totalSize;if(!loop){return handlerOffsetX.value;}return isNaN(x)?0:x;};_f._closure={size:size,dataLength:dataLength,handlerOffsetX:handlerOffsetX,loop:loop};_f.asString="function _f(){const{size,dataLength,handlerOffsetX,loop}=jsThis._closure;{const totalSize=size*dataLength;const x=handlerOffsetX.value%totalSize;if(!loop){return handlerOffsetX.value;}return isNaN(x)?0:x;}}";_f.__workletHash=17456063948631;_f.__location="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/Carousel.tsx (58:40)";global.__reanimatedWorkletInit(_f);return _f;}(),[loop,size,dataLength]);(0,_usePropsErrorBoundary.usePropsErrorBoundary)(props);(0,_useOnProgressChange.useOnProgressChange)({autoFillData:autoFillData,loop:loop,size:size,offsetX:offsetX,rawData:rawData,onProgressChange:onProgressChange});var carouselController=(0,_useCarouselController.useCarouselController)({loop:loop,size:size,data:data,autoFillData:autoFillData,handlerOffsetX:handlerOffsetX,withAnimation:withAnimation,defaultIndex:defaultIndex,onScrollEnd:function onScrollEnd(){return(0,_reactNativeReanimated.runOnJS)(_onScrollEnd)();},onScrollBegin:function onScrollBegin(){return!!_onScrollBegin&&(0,_reactNativeReanimated.runOnJS)(_onScrollBegin)();},duration:scrollAnimationDuration});var sharedIndex=carouselController.sharedIndex,sharedPreIndex=carouselController.sharedPreIndex,to=carouselController.to,next=carouselController.next,prev=carouselController.prev,scrollTo=carouselController.scrollTo,getCurrentIndex=carouselController.getCurrentIndex;var _useAutoPlay=(0,_useAutoPlay2.useAutoPlay)({autoPlay:autoPlay,autoPlayInterval:autoPlayInterval,autoPlayReverse:autoPlayReverse,carouselController:carouselController}),startAutoPlay=_useAutoPlay.start,pauseAutoPlay=_useAutoPlay.pause;var _onScrollEnd=_react.default.useCallback(function(){var _f=function _f(){var _sharedIndex=Math.round(sharedIndex.value);var _sharedPreIndex=Math.round(sharedPreIndex.value);if(onSnapToItem){(0,_reactNativeReanimated.runOnJS)(onSnapToItem)(_sharedIndex);}if(onScrollEnd){(0,_reactNativeReanimated.runOnJS)(onScrollEnd)(_sharedPreIndex,_sharedIndex);}};_f._closure={sharedIndex:sharedIndex,sharedPreIndex:sharedPreIndex,onSnapToItem:onSnapToItem,runOnJS:_reactNativeReanimated.runOnJS,onScrollEnd:onScrollEnd};_f.asString="function _f(){const{sharedIndex,sharedPreIndex,onSnapToItem,runOnJS,onScrollEnd}=jsThis._closure;{const _sharedIndex=Math.round(sharedIndex.value);const _sharedPreIndex=Math.round(sharedPreIndex.value);if(onSnapToItem){runOnJS(onSnapToItem)(_sharedIndex);}if(onScrollEnd){runOnJS(onScrollEnd)(_sharedPreIndex,_sharedIndex);}}}";_f.__workletHash=4804319174322;_f.__location="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/Carousel.tsx (108:47)";global.__reanimatedWorkletInit(_f);return _f;}(),[onSnapToItem,onScrollEnd,sharedIndex,sharedPreIndex]);var scrollViewGestureOnScrollBegin=_react.default.useCallback(function(){pauseAutoPlay();_onScrollBegin==null?void 0:_onScrollBegin();},[_onScrollBegin,pauseAutoPlay]);var scrollViewGestureOnScrollEnd=_react.default.useCallback(function(){startAutoPlay();(0,_reactNativeReanimated.runOnUI)(_onScrollEnd)();},[_onScrollEnd,startAutoPlay]);var scrollViewGestureOnTouchBegin=_react.default.useCallback(pauseAutoPlay,[pauseAutoPlay]);var scrollViewGestureOnTouchEnd=_react.default.useCallback(startAutoPlay,[startAutoPlay]);var goToIndex=_react.default.useCallback(function(i,animated){to(i,animated);},[to]);_react.default.useImperativeHandle(ref,function(){return{next:next,prev:prev,getCurrentIndex:getCurrentIndex,goToIndex:goToIndex,scrollTo:scrollTo};},[getCurrentIndex,goToIndex,next,prev,scrollTo]);var visibleRanges=(0,_useVisibleRanges.useVisibleRanges)({total:data.length,viewSize:size,translation:handlerOffsetX,windowSize:windowSize});var layoutConfig=(0,_useLayoutConfig.useLayoutConfig)(_objectSpread(_objectSpread({},props),{},{size:size}));var renderLayout=_react.default.useCallback(function(item,i){var realIndex=(0,_computedWithAutoFillData.computedRealIndexWithAutoFillData)({index:i,dataLength:rawData.length,loop:loop,autoFillData:autoFillData});return _react.default.createElement(_BaseLayout.BaseLayout,{key:i,index:i,handlerOffsetX:offsetX,visibleRanges:visibleRanges,animationStyle:customAnimation||layoutConfig,__self:_this,__source:{fileName:_jsxFileName,lineNumber:180,columnNumber:21}},function(_ref){var animationValue=_ref.animationValue;return renderItem({item:item,index:realIndex,animationValue:animationValue});});},[loop,rawData,offsetX,visibleRanges,autoFillData,renderItem,layoutConfig,customAnimation]);return _react.default.createElement(_store.CTX.Provider,{value:{props:props,common:commonVariables},__self:_this,__source:{fileName:_jsxFileName,lineNumber:210,columnNumber:13}},_react.default.createElement(_reactNative.View,{style:[styles.container,{width:width||'100%',height:height||'100%'},style],testID:testID,__self:_this,__source:{fileName:_jsxFileName,lineNumber:211,columnNumber:17}},_react.default.createElement(_ScrollViewGesture.ScrollViewGesture,{size:size,translation:handlerOffsetX,onScrollBegin:scrollViewGestureOnScrollBegin,onScrollEnd:scrollViewGestureOnScrollEnd,onTouchBegin:scrollViewGestureOnTouchBegin,onTouchEnd:scrollViewGestureOnTouchEnd,__self:_this,__source:{fileName:_jsxFileName,lineNumber:219,columnNumber:21}},_react.default.createElement(_reactNativeReanimated.default.View,{key:mode,style:[styles.container,{width:width||'100%',height:height||'100%'},style,vertical?styles.itemsVertical:styles.itemsHorizontal],__self:_this,__source:{fileName:_jsxFileName,lineNumber:227,columnNumber:25}},data.map(renderLayout)))));});var _default=Carousel;exports.default=_default;var styles=_reactNative.StyleSheet.create({container:{overflow:'hidden'},itemsHorizontal:{flexDirection:'row'},itemsVertical:{flexDirection:'column'}});
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _react=_interopRequireDefault(require("react"));var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _useCarouselController=require("./hooks/useCarouselController");var _useAutoPlay2=require("./hooks/useAutoPlay");var _usePropsErrorBoundary=require("./hooks/usePropsErrorBoundary");var _ScrollViewGesture=require("./ScrollViewGesture");var _useVisibleRanges=require("./hooks/useVisibleRanges");var _reactNative=require("react-native");var _BaseLayout=require("./layouts/BaseLayout");var _useLayoutConfig=require("./hooks/useLayoutConfig");var _useInitProps=require("./hooks/useInitProps");var _store=require("./store");var _useCommonVariables=require("./hooks/useCommonVariables");var _useOnProgressChange=require("./hooks/useOnProgressChange");var _computedWithAutoFillData=require("./utils/computedWithAutoFillData");var _this=this,_jsxFileName="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/Carousel.tsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;})),keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?ownKeys(Object(source),!0).forEach(function(key){(0,_defineProperty2.default)(target,key,source[key]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}return target;}var Carousel=_react.default.forwardRef(function(_props,ref){var props=(0,_useInitProps.useInitProps)(_props);var testID=props.testID,data=props.data,rawData=props.rawData,loop=props.loop,autoFillData=props.autoFillData,mode=props.mode,style=props.style,width=props.width,height=props.height,vertical=props.vertical,autoPlay=props.autoPlay,windowSize=props.windowSize,autoPlayReverse=props.autoPlayReverse,autoPlayInterval=props.autoPlayInterval,scrollAnimationDuration=props.scrollAnimationDuration,withAnimation=props.withAnimation,renderItem=props.renderItem,onScrollEnd=props.onScrollEnd,onSnapToItem=props.onSnapToItem,_onScrollBegin=props.onScrollBegin,onProgressChange=props.onProgressChange,customAnimation=props.customAnimation,defaultIndex=props.defaultIndex;var commonVariables=(0,_useCommonVariables.useCommonVariables)(props);var size=commonVariables.size,handlerOffsetX=commonVariables.handlerOffsetX;var dataLength=data.length;var offsetX=(0,_reactNativeReanimated.useDerivedValue)(function(){var _f=function _f(){var totalSize=size*dataLength;var x=handlerOffsetX.value%totalSize;if(!loop){return handlerOffsetX.value;}return isNaN(x)?0:x;};_f._closure={size:size,dataLength:dataLength,handlerOffsetX:handlerOffsetX,loop:loop};_f.asString="function _f(){const{size,dataLength,handlerOffsetX,loop}=jsThis._closure;{const totalSize=size*dataLength;const x=handlerOffsetX.value%totalSize;if(!loop){return handlerOffsetX.value;}return isNaN(x)?0:x;}}";_f.__workletHash=17456063948631;_f.__location="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/Carousel.tsx (54:40)";global.__reanimatedWorkletInit(_f);return _f;}(),[loop,size,dataLength]);(0,_usePropsErrorBoundary.usePropsErrorBoundary)(props);(0,_useOnProgressChange.useOnProgressChange)({autoFillData:autoFillData,loop:loop,size:size,offsetX:offsetX,rawData:rawData,onProgressChange:onProgressChange});var carouselController=(0,_useCarouselController.useCarouselController)({loop:loop,size:size,data:data,autoFillData:autoFillData,handlerOffsetX:handlerOffsetX,withAnimation:withAnimation,defaultIndex:defaultIndex,onScrollEnd:function onScrollEnd(){return(0,_reactNativeReanimated.runOnJS)(_onScrollEnd)();},onScrollBegin:function onScrollBegin(){return!!_onScrollBegin&&(0,_reactNativeReanimated.runOnJS)(_onScrollBegin)();},duration:scrollAnimationDuration});var to=carouselController.to,next=carouselController.next,prev=carouselController.prev,scrollTo=carouselController.scrollTo,getSharedIndex=carouselController.getSharedIndex,getCurrentIndex=carouselController.getCurrentIndex;var _useAutoPlay=(0,_useAutoPlay2.useAutoPlay)({autoPlay:autoPlay,autoPlayInterval:autoPlayInterval,autoPlayReverse:autoPlayReverse,carouselController:carouselController}),startAutoPlay=_useAutoPlay.start,pauseAutoPlay=_useAutoPlay.pause;var _onScrollEnd=_react.default.useCallback(function(){var _sharedIndex=Math.round(getSharedIndex());if(onSnapToItem){onSnapToItem(_sharedIndex);}if(onScrollEnd){onScrollEnd(_sharedIndex);}},[onSnapToItem,onScrollEnd,getSharedIndex]);var scrollViewGestureOnScrollBegin=_react.default.useCallback(function(){pauseAutoPlay();_onScrollBegin==null?void 0:_onScrollBegin();},[_onScrollBegin,pauseAutoPlay]);var scrollViewGestureOnScrollEnd=_react.default.useCallback(function(){startAutoPlay();_onScrollEnd();},[_onScrollEnd,startAutoPlay]);var scrollViewGestureOnTouchBegin=_react.default.useCallback(pauseAutoPlay,[pauseAutoPlay]);var scrollViewGestureOnTouchEnd=_react.default.useCallback(startAutoPlay,[startAutoPlay]);var goToIndex=_react.default.useCallback(function(i,animated){to(i,animated);},[to]);_react.default.useImperativeHandle(ref,function(){return{next:next,prev:prev,getCurrentIndex:getCurrentIndex,goToIndex:goToIndex,scrollTo:scrollTo};},[getCurrentIndex,goToIndex,next,prev,scrollTo]);var visibleRanges=(0,_useVisibleRanges.useVisibleRanges)({total:data.length,viewSize:size,translation:handlerOffsetX,windowSize:windowSize});var layoutConfig=(0,_useLayoutConfig.useLayoutConfig)(_objectSpread(_objectSpread({},props),{},{size:size}));var renderLayout=_react.default.useCallback(function(item,i){var realIndex=(0,_computedWithAutoFillData.computedRealIndexWithAutoFillData)({index:i,dataLength:rawData.length,loop:loop,autoFillData:autoFillData});return _react.default.createElement(_BaseLayout.BaseLayout,{key:i,index:i,handlerOffsetX:offsetX,visibleRanges:visibleRanges,animationStyle:customAnimation||layoutConfig,__self:_this,__source:{fileName:_jsxFileName,lineNumber:164,columnNumber:21}},function(_ref){var animationValue=_ref.animationValue;return renderItem({item:item,index:realIndex,animationValue:animationValue});});},[loop,rawData,offsetX,visibleRanges,autoFillData,renderItem,layoutConfig,customAnimation]);return _react.default.createElement(_store.CTX.Provider,{value:{props:props,common:commonVariables},__self:_this,__source:{fileName:_jsxFileName,lineNumber:194,columnNumber:13}},_react.default.createElement(_reactNative.View,{style:[styles.container,{width:width||'100%',height:height||'100%'},style],testID:testID,__self:_this,__source:{fileName:_jsxFileName,lineNumber:195,columnNumber:17}},_react.default.createElement(_ScrollViewGesture.ScrollViewGesture,{size:size,translation:handlerOffsetX,onScrollBegin:scrollViewGestureOnScrollBegin,onScrollEnd:scrollViewGestureOnScrollEnd,onTouchBegin:scrollViewGestureOnTouchBegin,onTouchEnd:scrollViewGestureOnTouchEnd,__self:_this,__source:{fileName:_jsxFileName,lineNumber:203,columnNumber:21}},_react.default.createElement(_reactNativeReanimated.default.View,{key:mode,style:[styles.container,{width:width||'100%',height:height||'100%'},style,vertical?styles.itemsVertical:styles.itemsHorizontal],__self:_this,__source:{fileName:_jsxFileName,lineNumber:211,columnNumber:25}},data.map(renderLayout)))));});var _default=Carousel;exports.default=_default;var styles=_reactNative.StyleSheet.create({container:{overflow:'hidden'},itemsHorizontal:{flexDirection:'row'},itemsVertical:{flexDirection:'column'}});
2
2
  //# sourceMappingURL=Carousel.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["Carousel.tsx"],"names":["Carousel","React","forwardRef","_props","ref","props","testID","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffsetX","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","sharedIndex","sharedPreIndex","to","next","prev","scrollTo","getCurrentIndex","startAutoPlay","start","pauseAutoPlay","pause","useCallback","_sharedIndex","Math","round","_sharedPreIndex","runOnJS","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","goToIndex","i","animated","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","index","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","StyleSheet","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport Animated, {\n runOnJS,\n runOnUI,\n useDerivedValue,\n} from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\nimport { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n data,\n autoFillData,\n handlerOffsetX,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const {\n sharedIndex,\n sharedPreIndex,\n to,\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n } = carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n 'worklet';\n const _sharedIndex = Math.round(sharedIndex.value);\n const _sharedPreIndex = Math.round(sharedPreIndex.value);\n\n if (onSnapToItem) {\n runOnJS(onSnapToItem)(_sharedIndex);\n }\n if (onScrollEnd) {\n runOnJS(onScrollEnd)(_sharedPreIndex, _sharedIndex);\n }\n }, [onSnapToItem, onScrollEnd, sharedIndex, sharedPreIndex]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n /**\n * TODO magic\n */\n runOnUI(_onScrollEnd)();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n to(i, animated);\n },\n [to]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n goToIndex,\n scrollTo,\n }),\n [getCurrentIndex, goToIndex, next, prev, scrollTo]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n testID={testID}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n }\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
1
+ {"version":3,"sources":["Carousel.tsx"],"names":["Carousel","React","forwardRef","_props","ref","props","testID","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffsetX","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","to","next","prev","scrollTo","getSharedIndex","getCurrentIndex","startAutoPlay","start","pauseAutoPlay","pause","useCallback","_sharedIndex","Math","round","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","goToIndex","i","animated","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","index","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","StyleSheet","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\nimport { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n data,\n autoFillData,\n handlerOffsetX,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const { to, next, prev, scrollTo, getSharedIndex, getCurrentIndex } =\n carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n if (onSnapToItem) {\n onSnapToItem(_sharedIndex);\n }\n if (onScrollEnd) {\n onScrollEnd(_sharedIndex);\n }\n }, [onSnapToItem, onScrollEnd, getSharedIndex]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n to(i, animated);\n },\n [to]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n goToIndex,\n scrollTo,\n }),\n [getCurrentIndex, goToIndex, next, prev, scrollTo]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n testID={testID}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n }\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
@@ -1,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]);(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};}
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/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (84: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/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (104: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/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (139: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 (137: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 (161: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{to:to,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","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
+ {"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","idx","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 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 = 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 (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 to,\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,"__esModule",{value:true});exports.log=log;function log(){var _console;(_console=console).log.apply(_console,arguments);}
1
+ Object.defineProperty(exports,"__esModule",{value:true});exports.log=log;exports.round=void 0;function log(){var _console;(_console=console).log.apply(_console,arguments);}var round=function(){var _f=function _f(number){return Math.round(number);};_f._closure={};_f.asString="function round(number){return Math.round(number);}";_f.__workletHash=13727510784300;_f.__location="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/utils/log.ts (9:7)";global.__reanimatedWorkletInit(_f);return _f;}();exports.round=round;
2
2
  //# sourceMappingURL=log.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["log.ts"],"names":["log","console"],"mappings":"yEAIO,QAASA,CAAAA,GAAT,EAA0B,cAC7B,UAAAC,OAAO,EAACD,GAAR,2BACH","sourcesContent":["/**\n * In worklet\n * e.g. runOnJS(lop)(...);\n */\nexport function log(...msg: any) {\n console.log(...msg);\n}\n"]}
1
+ {"version":3,"sources":["log.ts"],"names":["log","console","round","number","Math"],"mappings":"8FAIO,QAASA,CAAAA,GAAT,EAA0B,cAC7B,UAAAC,OAAO,EAACD,GAAR,2BACH,C,GAEeE,CAAAA,K,+BAAMC,M,CAAgB,CAElC,MAAOC,CAAAA,IAAI,CAACF,KAAL,CAAWC,MAAX,CAAP,CACH,C","sourcesContent":["/**\n * In worklet\n * e.g. runOnJS(lop)(...);\n */\nexport function log(...msg: any) {\n console.log(...msg);\n}\n\nexport function round(number: number) {\n 'worklet';\n return Math.round(number);\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import Animated, { runOnJS, runOnUI, useDerivedValue } from 'react-native-reanimated';
2
+ import Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';
3
3
  import { useCarouselController } from './hooks/useCarouselController';
4
4
  import { useAutoPlay } from './hooks/useAutoPlay';
5
5
  import { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';
@@ -78,12 +78,11 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
78
78
  duration: scrollAnimationDuration
79
79
  });
80
80
  const {
81
- sharedIndex,
82
- sharedPreIndex,
83
81
  to,
84
82
  next,
85
83
  prev,
86
84
  scrollTo,
85
+ getSharedIndex,
87
86
  getCurrentIndex
88
87
  } = carouselController;
89
88
  const {
@@ -97,20 +96,16 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
97
96
  });
98
97
 
99
98
  const _onScrollEnd = React.useCallback(() => {
100
- 'worklet';
101
-
102
- const _sharedIndex = Math.round(sharedIndex.value);
103
-
104
- const _sharedPreIndex = Math.round(sharedPreIndex.value);
99
+ const _sharedIndex = Math.round(getSharedIndex());
105
100
 
106
101
  if (onSnapToItem) {
107
- runOnJS(onSnapToItem)(_sharedIndex);
102
+ onSnapToItem(_sharedIndex);
108
103
  }
109
104
 
110
105
  if (onScrollEnd) {
111
- runOnJS(onScrollEnd)(_sharedPreIndex, _sharedIndex);
106
+ onScrollEnd(_sharedIndex);
112
107
  }
113
- }, [onSnapToItem, onScrollEnd, sharedIndex, sharedPreIndex]);
108
+ }, [onSnapToItem, onScrollEnd, getSharedIndex]);
114
109
 
115
110
  const scrollViewGestureOnScrollBegin = React.useCallback(() => {
116
111
  pauseAutoPlay();
@@ -118,11 +113,8 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
118
113
  }, [onScrollBegin, pauseAutoPlay]);
119
114
  const scrollViewGestureOnScrollEnd = React.useCallback(() => {
120
115
  startAutoPlay();
121
- /**
122
- * TODO magic
123
- */
124
116
 
125
- runOnUI(_onScrollEnd)();
117
+ _onScrollEnd();
126
118
  }, [_onScrollEnd, startAutoPlay]);
127
119
  const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [pauseAutoPlay]);
128
120
  const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [startAutoPlay]);
@@ -1 +1 @@
1
- {"version":3,"sources":["Carousel.tsx"],"names":["React","Animated","runOnJS","runOnUI","useDerivedValue","useCarouselController","useAutoPlay","usePropsErrorBoundary","ScrollViewGesture","useVisibleRanges","StyleSheet","View","BaseLayout","useLayoutConfig","useInitProps","CTX","useCommonVariables","useOnProgressChange","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","testID","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffsetX","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","sharedIndex","sharedPreIndex","to","next","prev","scrollTo","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","_sharedPreIndex","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","goToIndex","i","animated","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","index","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport Animated, {\n runOnJS,\n runOnUI,\n useDerivedValue,\n} from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\nimport { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n data,\n autoFillData,\n handlerOffsetX,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const {\n sharedIndex,\n sharedPreIndex,\n to,\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n } = carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n 'worklet';\n const _sharedIndex = Math.round(sharedIndex.value);\n const _sharedPreIndex = Math.round(sharedPreIndex.value);\n\n if (onSnapToItem) {\n runOnJS(onSnapToItem)(_sharedIndex);\n }\n if (onScrollEnd) {\n runOnJS(onScrollEnd)(_sharedPreIndex, _sharedIndex);\n }\n }, [onSnapToItem, onScrollEnd, sharedIndex, sharedPreIndex]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n /**\n * TODO magic\n */\n runOnUI(_onScrollEnd)();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n to(i, animated);\n },\n [to]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n goToIndex,\n scrollTo,\n }),\n [getCurrentIndex, goToIndex, next, prev, scrollTo]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n testID={testID}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n }\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
1
+ {"version":3,"sources":["Carousel.tsx"],"names":["React","Animated","runOnJS","useDerivedValue","useCarouselController","useAutoPlay","usePropsErrorBoundary","ScrollViewGesture","useVisibleRanges","StyleSheet","View","BaseLayout","useLayoutConfig","useInitProps","CTX","useCommonVariables","useOnProgressChange","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","testID","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffsetX","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","to","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","goToIndex","i","animated","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","index","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\nimport { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n data,\n autoFillData,\n handlerOffsetX,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const { to, next, prev, scrollTo, getSharedIndex, getCurrentIndex } =\n carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n if (onSnapToItem) {\n onSnapToItem(_sharedIndex);\n }\n if (onScrollEnd) {\n onScrollEnd(_sharedIndex);\n }\n }, [onSnapToItem, onScrollEnd, getSharedIndex]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n to(i, animated);\n },\n [to]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n goToIndex,\n scrollTo,\n }),\n [getCurrentIndex, goToIndex, next, prev, scrollTo]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n testID={testID}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n }\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
@@ -1,8 +1,9 @@
1
- import React from 'react';
1
+ import React, { useRef } from 'react';
2
2
  import { Easing } from '../constants';
3
- import { runOnJS, useDerivedValue, useSharedValue } from 'react-native-reanimated';
3
+ import { runOnJS, useAnimatedReaction, useSharedValue } from 'react-native-reanimated';
4
4
  import { dealWithAnimation } from '@/utils/dealWithAnimation';
5
5
  import { convertToSharedIndex } from '@/utils/computedWithAutoFillData';
6
+ import { round } from '@/utils/log';
6
7
  export function useCarouselController(options) {
7
8
  const {
8
9
  size,
@@ -21,8 +22,8 @@ export function useCarouselController(options) {
21
22
  }), [data]);
22
23
  const index = useSharedValue(defaultIndex); // The Index displayed to the user
23
24
 
24
- const sharedIndex = useSharedValue(defaultIndex);
25
- const sharedPreIndex = useSharedValue(defaultIndex);
25
+ const sharedIndex = useRef(defaultIndex);
26
+ const sharedPreIndex = useRef(defaultIndex);
26
27
  const currentFixedPage = React.useCallback(() => {
27
28
  if (loop) {
28
29
  return -Math.round(handlerOffsetX.value / size);
@@ -31,19 +32,33 @@ export function useCarouselController(options) {
31
32
  const fixed = handlerOffsetX.value / size % dataInfo.length;
32
33
  return Math.round(handlerOffsetX.value <= 0 ? Math.abs(fixed) : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0));
33
34
  }, [handlerOffsetX, dataInfo, size, loop]);
34
- useDerivedValue(() => {
35
+
36
+ function setSharedIndex(newSharedIndex) {
37
+ sharedIndex.current = newSharedIndex;
38
+ }
39
+
40
+ useAnimatedReaction(() => {
35
41
  const handlerOffsetXValue = handlerOffsetX.value;
36
- sharedPreIndex.value = sharedIndex.value;
37
- const toInt = handlerOffsetXValue / size % dataInfo.length;
42
+ const toInt = round(handlerOffsetXValue / size) % dataInfo.length;
38
43
  const isPositive = handlerOffsetXValue <= 0;
39
44
  const i = isPositive ? Math.abs(toInt) : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);
40
- index.value = i;
41
- sharedIndex.value = convertToSharedIndex({
45
+ const newSharedIndexValue = convertToSharedIndex({
42
46
  loop,
43
47
  rawDataLength: dataInfo.originalLength,
44
48
  autoFillData: autoFillData,
45
49
  index: i
46
50
  });
51
+ return {
52
+ i,
53
+ newSharedIndexValue
54
+ };
55
+ }, _ref => {
56
+ let {
57
+ i,
58
+ newSharedIndexValue
59
+ } = _ref;
60
+ index.value = i;
61
+ runOnJS(setSharedIndex)(newSharedIndexValue);
47
62
  }, [sharedPreIndex, sharedIndex, size, dataInfo, index, loop, autoFillData, handlerOffsetX]);
48
63
  const getCurrentIndex = React.useCallback(() => {
49
64
  return index.value;
@@ -167,13 +182,12 @@ export function useCarouselController(options) {
167
182
  }
168
183
  }, [prev, next]);
169
184
  return {
170
- sharedIndex,
171
- sharedPreIndex,
172
185
  to,
173
186
  next,
174
187
  prev,
175
188
  scrollTo,
176
- getCurrentIndex
189
+ getCurrentIndex,
190
+ getSharedIndex: () => sharedIndex.current
177
191
  };
178
192
  }
179
193
  //# sourceMappingURL=useCarouselController.js.map
@@ -1 +1 @@
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"]}
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","idx","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 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 = 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 (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 to,\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
@@ -5,4 +5,9 @@
5
5
  export function log() {
6
6
  console.log(...arguments);
7
7
  }
8
+ export function round(number) {
9
+ 'worklet';
10
+
11
+ return Math.round(number);
12
+ }
8
13
  //# sourceMappingURL=log.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["log.ts"],"names":["log","console"],"mappings":"AAAA;AACA;AACA;AACA;AACA,OAAO,SAASA,GAAT,GAA0B;AAC7BC,EAAAA,OAAO,CAACD,GAAR,CAAY,YAAZ;AACH","sourcesContent":["/**\n * In worklet\n * e.g. runOnJS(lop)(...);\n */\nexport function log(...msg: any) {\n console.log(...msg);\n}\n"]}
1
+ {"version":3,"sources":["log.ts"],"names":["log","console","round","number","Math"],"mappings":"AAAA;AACA;AACA;AACA;AACA,OAAO,SAASA,GAAT,GAA0B;AAC7BC,EAAAA,OAAO,CAACD,GAAR,CAAY,YAAZ;AACH;AAED,OAAO,SAASE,KAAT,CAAeC,MAAf,EAA+B;AAClC;;AACA,SAAOC,IAAI,CAACF,KAAL,CAAWC,MAAX,CAAP;AACH","sourcesContent":["/**\n * In worklet\n * e.g. runOnJS(lop)(...);\n */\nexport function log(...msg: any) {\n console.log(...msg);\n}\n\nexport function round(number: number) {\n 'worklet';\n return Math.round(number);\n}\n"]}
@@ -13,8 +13,7 @@ interface IOpts {
13
13
  onScrollEnd?: () => void;
14
14
  }
15
15
  export interface ICarouselController {
16
- sharedIndex: Animated.SharedValue<number>;
17
- sharedPreIndex: Animated.SharedValue<number>;
16
+ getSharedIndex: () => number;
18
17
  prev: (opts?: TCarouselActionOptions) => void;
19
18
  next: (opts?: TCarouselActionOptions) => void;
20
19
  getCurrentIndex: () => number;
@@ -157,7 +157,7 @@ export declare type TCarouselProps<T = any> = {
157
157
  /**
158
158
  * On scroll end
159
159
  */
160
- onScrollEnd?: (previous: number, current: number) => void;
160
+ onScrollEnd?: (index: number) => void;
161
161
  /**
162
162
  * On progress change
163
163
  * @param offsetProgress Total of offset distance (0 390 780 ...)
@@ -3,3 +3,4 @@
3
3
  * e.g. runOnJS(lop)(...);
4
4
  */
5
5
  export declare function log(...msg: any): void;
6
+ export declare function round(number: number): number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-reanimated-carousel",
3
- "version": "2.3.11",
3
+ "version": "2.4.0",
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",
package/src/Carousel.tsx CHANGED
@@ -1,9 +1,5 @@
1
1
  import React from 'react';
2
- import Animated, {
3
- runOnJS,
4
- runOnUI,
5
- useDerivedValue,
6
- } from 'react-native-reanimated';
2
+ import Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';
7
3
 
8
4
  import { useCarouselController } from './hooks/useCarouselController';
9
5
  import { useAutoPlay } from './hooks/useAutoPlay';
@@ -88,15 +84,8 @@ const Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(
88
84
  duration: scrollAnimationDuration,
89
85
  });
90
86
 
91
- const {
92
- sharedIndex,
93
- sharedPreIndex,
94
- to,
95
- next,
96
- prev,
97
- scrollTo,
98
- getCurrentIndex,
99
- } = carouselController;
87
+ const { to, next, prev, scrollTo, getSharedIndex, getCurrentIndex } =
88
+ carouselController;
100
89
 
101
90
  const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({
102
91
  autoPlay,
@@ -106,17 +95,15 @@ const Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(
106
95
  });
107
96
 
108
97
  const _onScrollEnd = React.useCallback(() => {
109
- 'worklet';
110
- const _sharedIndex = Math.round(sharedIndex.value);
111
- const _sharedPreIndex = Math.round(sharedPreIndex.value);
98
+ const _sharedIndex = Math.round(getSharedIndex());
112
99
 
113
100
  if (onSnapToItem) {
114
- runOnJS(onSnapToItem)(_sharedIndex);
101
+ onSnapToItem(_sharedIndex);
115
102
  }
116
103
  if (onScrollEnd) {
117
- runOnJS(onScrollEnd)(_sharedPreIndex, _sharedIndex);
104
+ onScrollEnd(_sharedIndex);
118
105
  }
119
- }, [onSnapToItem, onScrollEnd, sharedIndex, sharedPreIndex]);
106
+ }, [onSnapToItem, onScrollEnd, getSharedIndex]);
120
107
 
121
108
  const scrollViewGestureOnScrollBegin = React.useCallback(() => {
122
109
  pauseAutoPlay();
@@ -125,10 +112,7 @@ const Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(
125
112
 
126
113
  const scrollViewGestureOnScrollEnd = React.useCallback(() => {
127
114
  startAutoPlay();
128
- /**
129
- * TODO magic
130
- */
131
- runOnUI(_onScrollEnd)();
115
+ _onScrollEnd();
132
116
  }, [_onScrollEnd, startAutoPlay]);
133
117
 
134
118
  const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [
@@ -1,9 +1,9 @@
1
- import React from 'react';
1
+ import React, { useRef } from 'react';
2
2
  import type Animated from 'react-native-reanimated';
3
3
  import { Easing } from '../constants';
4
4
  import {
5
5
  runOnJS,
6
- useDerivedValue,
6
+ useAnimatedReaction,
7
7
  useSharedValue,
8
8
  } from 'react-native-reanimated';
9
9
  import type {
@@ -13,6 +13,7 @@ import type {
13
13
  } from '../types';
14
14
  import { dealWithAnimation } from '@/utils/dealWithAnimation';
15
15
  import { convertToSharedIndex } from '@/utils/computedWithAutoFillData';
16
+ import { round } from '@/utils/log';
16
17
 
17
18
  interface IOpts {
18
19
  loop: boolean;
@@ -28,8 +29,7 @@ interface IOpts {
28
29
  }
29
30
 
30
31
  export interface ICarouselController {
31
- sharedIndex: Animated.SharedValue<number>;
32
- sharedPreIndex: Animated.SharedValue<number>;
32
+ getSharedIndex: () => number;
33
33
  prev: (opts?: TCarouselActionOptions) => void;
34
34
  next: (opts?: TCarouselActionOptions) => void;
35
35
  getCurrentIndex: () => number;
@@ -60,8 +60,8 @@ export function useCarouselController(options: IOpts): ICarouselController {
60
60
 
61
61
  const index = useSharedValue<number>(defaultIndex);
62
62
  // The Index displayed to the user
63
- const sharedIndex = useSharedValue<number>(defaultIndex);
64
- const sharedPreIndex = useSharedValue<number>(defaultIndex);
63
+ const sharedIndex = useRef<number>(defaultIndex);
64
+ const sharedPreIndex = useRef<number>(defaultIndex);
65
65
 
66
66
  const currentFixedPage = React.useCallback(() => {
67
67
  if (loop) {
@@ -76,31 +76,46 @@ export function useCarouselController(options: IOpts): ICarouselController {
76
76
  );
77
77
  }, [handlerOffsetX, dataInfo, size, loop]);
78
78
 
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({
79
+ function setSharedIndex(newSharedIndex: number) {
80
+ sharedIndex.current = newSharedIndex;
81
+ }
82
+
83
+ useAnimatedReaction(
84
+ () => {
85
+ const handlerOffsetXValue = handlerOffsetX.value;
86
+ const toInt = round(handlerOffsetXValue / size) % dataInfo.length;
87
+ const isPositive = handlerOffsetXValue <= 0;
88
+ const i = isPositive
89
+ ? Math.abs(toInt)
90
+ : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);
91
+
92
+ const newSharedIndexValue = convertToSharedIndex({
93
+ loop,
94
+ rawDataLength: dataInfo.originalLength,
95
+ autoFillData: autoFillData!,
96
+ index: i,
97
+ });
98
+
99
+ return {
100
+ i,
101
+ newSharedIndexValue,
102
+ };
103
+ },
104
+ ({ i, newSharedIndexValue }) => {
105
+ index.value = i;
106
+ runOnJS(setSharedIndex)(newSharedIndexValue);
107
+ },
108
+ [
109
+ sharedPreIndex,
110
+ sharedIndex,
111
+ size,
112
+ dataInfo,
113
+ index,
89
114
  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,
102
- handlerOffsetX,
103
- ]);
115
+ autoFillData,
116
+ handlerOffsetX,
117
+ ]
118
+ );
104
119
 
105
120
  const getCurrentIndex = React.useCallback(() => {
106
121
  return index.value;
@@ -255,12 +270,11 @@ export function useCarouselController(options: IOpts): ICarouselController {
255
270
  );
256
271
 
257
272
  return {
258
- sharedIndex,
259
- sharedPreIndex,
260
273
  to,
261
274
  next,
262
275
  prev,
263
276
  scrollTo,
264
277
  getCurrentIndex,
278
+ getSharedIndex: () => sharedIndex.current,
265
279
  };
266
280
  }
package/src/types.ts CHANGED
@@ -172,7 +172,7 @@ export type TCarouselProps<T = any> = {
172
172
  /**
173
173
  * On scroll end
174
174
  */
175
- onScrollEnd?: (previous: number, current: number) => void;
175
+ onScrollEnd?: (index: number) => void;
176
176
  /**
177
177
  * On progress change
178
178
  * @param offsetProgress Total of offset distance (0 390 780 ...)
package/src/utils/log.ts CHANGED
@@ -5,3 +5,8 @@
5
5
  export function log(...msg: any) {
6
6
  console.log(...msg);
7
7
  }
8
+
9
+ export function round(number: number) {
10
+ 'worklet';
11
+ return Math.round(number);
12
+ }