react-native-reanimated-carousel 3.0.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -23,25 +23,25 @@ English | [简体中文](./README.zh-CN.md)
23
23
 
24
24
  > Click on the image to see the code snippets. [[Try it]](https://snack.expo.dev/@zhaodonghao586/simple-carousel) 🍺
25
25
 
26
- | <img src="assets/normal-horizontal.gif"/> | <img src="assets/normal-vertical.gif"/> | <img src="assets/parallax-horizontal.gif"/> |
27
- | :--------------------------------------------------------------: | :---------------------------------------------------------------: | :----------------------------------------------------------------: |
28
- | <a href="./example/src/normal/index.tsx">normal-horizontal</a> | <a href="./example/src/normal/index.tsx">normal-vertical</a> | <a href="./example/src/parallax/index.tsx">parallax-horizontal</a> |
29
- | <img src="assets/parallax-vertical.gif"/> | <img src="assets/stack-horizontal-left.gif"/> | <img src="assets/stack-horizontal-right.gif"/> |
30
- | <a href="./example/src/parallax/index.tsx">parallax-vertical</a> | <a href="./example/src/stack/index.tsx">stack-horizontal-left</a> | <a href="./example/src/stack/index.tsx">stack-horizontal-right</a> |
31
- | <img src="assets/stack-vertical-left.gif"/> | <img src="assets/stack-vertical-right.gif"/> | <img src="assets/stack-horizontal-right.gif"/> |
32
- | <a href="./example/src/stack/index.tsx">stack-vertical-left</a> | <a href="./example/src/stack/index.tsx">stack-vertical-right</a> | <a href="./example/src/stack/index.tsx">stack-horizontal-right</a> |
26
+ | <img src="assets/normal-horizontal.gif"/> | <img src="assets/normal-vertical.gif"/> | <img src="assets/parallax-horizontal.gif"/> |
27
+ | :------------------------------------------------------------------: | :-------------------------------------------------------------------: | :--------------------------------------------------------------------: |
28
+ | <a href="./exampleExpo/src/normal/index.tsx">normal-horizontal</a> | <a href="./exampleExpo/src/normal/index.tsx">normal-vertical</a> | <a href="./exampleExpo/src/parallax/index.tsx">parallax-horizontal</a> |
29
+ | <img src="assets/parallax-vertical.gif"/> | <img src="assets/stack-horizontal-left.gif"/> | <img src="assets/stack-horizontal-right.gif"/> |
30
+ | <a href="./exampleExpo/src/parallax/index.tsx">parallax-vertical</a> | <a href="./exampleExpo/src/stack/index.tsx">stack-horizontal-left</a> | <a href="./exampleExpo/src/stack/index.tsx">stack-horizontal-right</a> |
31
+ | <img src="assets/stack-vertical-left.gif"/> | <img src="assets/stack-vertical-right.gif"/> | <img src="assets/stack-horizontal-right.gif"/> |
32
+ | <a href="./exampleExpo/src/stack/index.tsx">stack-vertical-left</a> | <a href="./exampleExpo/src/stack/index.tsx">stack-vertical-right</a> | <a href="./exampleExpo/src/stack/index.tsx">stack-horizontal-right</a> |
33
33
 
34
34
  > Now you can make cool animations with us! Very easy! [[Details]](./docs/custom-animation.md)
35
35
 
36
- | <img src="assets/advanced-parallax.gif"/> | <img src="assets/pause-advanced-parallax.gif"/> | <img src="assets/scale-fade-in-out.gif"/> |
37
- | :-------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------: | :-----------------------------------------------------------------------: |
38
- | <a href="./example/src/advanced-parallax/index.tsx">advanced-parallax</a> | <a href="./example/src/pause-advanced-parallax/index.tsx">pause-advanced-parallax</a> | <a href="./example/src/scale-fade-in-out/index.tsx">scale-fade-in-out</a> |
39
- | <img src="assets/rotate-scale-fade-in-out.gif"/> | <img src="assets/rotate-in-out.gif"/> | <img src="assets/anim-tab-bar.gif"/> |
40
- | <a href="./example/src/rotate-scale-fade-in-out/index.tsx">rotate-scale-fade-in-out</a> | <a href="./example/src/rotate-in-out/index.tsx">rotate-in-out</a> | <a href="./example/src/anim-tab-bar/index.tsx">anim-tab-bar</a> |
41
- | <img src="assets/marquee.gif"/> | <img src="assets/multiple.gif"/> | |
42
- | <a href="./example/src/marquee/index.tsx">marquee</a> | <a href="./example/src/multiple/index.tsx">multiple</a> | |
43
- | <img src="assets/parallax-layers.gif"/> | <img src="assets/flow.gif"/> | |
44
- | <a href="./example/src/parallax-layers/index.tsx">parallax-layers</a> | <a href="./example/src/flow/index.tsx">flow</a> | |
36
+ | <img src="assets/advanced-parallax.gif"/> | <img src="assets/pause-advanced-parallax.gif"/> | <img src="assets/scale-fade-in-out.gif"/> |
37
+ | :-----------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------: |
38
+ | <a href="./exampleExpo/src/advanced-parallax/index.tsx">advanced-parallax</a> | <a href="./exampleExpo/src/pause-advanced-parallax/index.tsx">pause-advanced-parallax</a> | <a href="./exampleExpo/src/scale-fade-in-out/index.tsx">scale-fade-in-out</a> |
39
+ | <img src="assets/rotate-scale-fade-in-out.gif"/> | <img src="assets/rotate-in-out.gif"/> | <img src="assets/anim-tab-bar.gif"/> |
40
+ | <a href="./exampleExpo/src/rotate-scale-fade-in-out/index.tsx">rotate-scale-fade-in-out</a> | <a href="./exampleExpo/src/rotate-in-out/index.tsx">rotate-in-out</a> | <a href="./exampleExpo/src/anim-tab-bar/index.tsx">anim-tab-bar</a> |
41
+ | <img src="assets/marquee.gif"/> | <img src="assets/multiple.gif"/> | <img src="assets/circular.gif"/> |
42
+ | <a href="./exampleExpo/src/marquee/index.tsx">marquee</a> | <a href="./exampleExpo/src/multiple/index.tsx">multiple</a> | <a href="./exampleExpo/src/circular/index.tsx">circular</a> |
43
+ | <img src="assets/parallax-layers.gif"/> | <img src="assets/flow.gif"/> | <img src="assets/fold.gif"/> |
44
+ | <a href="./exampleExpo/src/parallax-layers/index.tsx">parallax-layers</a> | <a href="./exampleExpo/src/flow/index.tsx">flow</a> | <a href="./exampleExpo/src/fold/index.tsx">fold</a> |
45
45
 
46
46
  ## Table of contents
47
47
 
@@ -68,6 +68,11 @@ npm install react-native-reanimated-carousel
68
68
 
69
69
  Now we need to install [`react-native-gesture-handler`](https://github.com/kmagiera/react-native-gesture-handler) and [`react-native-reanimated(>=2.0.0)`](https://github.com/kmagiera/react-native-reanimated).
70
70
 
71
+ | | react-native-reanimated | react-native-gesture-handler |
72
+ | -------------------------------------- | ----------------------- | ---------------------------- |
73
+ | react-native-reanimated-carousel < v3 | <2.7.0 | \* |
74
+ | react-native-reanimated-carousel >= v3 | >=2.7.0 | \* |
75
+
71
76
  ## Usage
72
77
 
73
78
  ```tsx
@@ -142,7 +147,7 @@ yarn web:pretty
142
147
  ## Sponsors
143
148
 
144
149
  <p align="center">
145
- <img src='./sponsorkit/sponsors.svg'/>
150
+ <img src='https://github.com/dohooo/sponsors/blob/master/sponsors.png?raw=true'/>
146
151
  </p>
147
152
 
148
153
  ## License
package/README.zh-CN.md CHANGED
@@ -23,25 +23,25 @@
23
23
 
24
24
  > 点击图片,查看代码 [[试一下]](https://snack.expo.dev/@zhaodonghao586/simple-carousel) 🍺
25
25
 
26
- | <img src="assets/normal-horizontal.gif"/> | <img src="assets/normal-vertical.gif"/> | <img src="assets/parallax-horizontal.gif"/> |
27
- | :--------------------------------------------------------------: | :---------------------------------------------------------------: | :----------------------------------------------------------------: |
28
- | <a href="./example/src/normal/index.tsx">normal-horizontal</a> | <a href="./example/src/normal/index.tsx">normal-vertical</a> | <a href="./example/src/parallax/index.tsx">parallax-horizontal</a> |
29
- | <img src="assets/parallax-vertical.gif"/> | <img src="assets/stack-horizontal-left.gif"/> | <img src="assets/stack-horizontal-right.gif"/> |
30
- | <a href="./example/src/parallax/index.tsx">parallax-vertical</a> | <a href="./example/src/stack/index.tsx">stack-horizontal-left</a> | <a href="./example/src/stack/index.tsx">stack-horizontal-right</a> |
31
- | <img src="assets/stack-vertical-left.gif"/> | <img src="assets/stack-vertical-right.gif"/> | <img src="assets/stack-horizontal-right.gif"/> |
32
- | <a href="./example/src/stack/index.tsx">stack-vertical-left</a> | <a href="./example/src/stack/index.tsx">stack-vertical-right</a> | <a href="./example/src/stack/index.tsx">stack-horizontal-right</a> |
26
+ | <img src="assets/normal-horizontal.gif"/> | <img src="assets/normal-vertical.gif"/> | <img src="assets/parallax-horizontal.gif"/> |
27
+ | :------------------------------------------------------------------: | :-------------------------------------------------------------------: | :--------------------------------------------------------------------: |
28
+ | <a href="./exampleExpo/src/normal/index.tsx">normal-horizontal</a> | <a href="./exampleExpo/src/normal/index.tsx">normal-vertical</a> | <a href="./exampleExpo/src/parallax/index.tsx">parallax-horizontal</a> |
29
+ | <img src="assets/parallax-vertical.gif"/> | <img src="assets/stack-horizontal-left.gif"/> | <img src="assets/stack-horizontal-right.gif"/> |
30
+ | <a href="./exampleExpo/src/parallax/index.tsx">parallax-vertical</a> | <a href="./exampleExpo/src/stack/index.tsx">stack-horizontal-left</a> | <a href="./exampleExpo/src/stack/index.tsx">stack-horizontal-right</a> |
31
+ | <img src="assets/stack-vertical-left.gif"/> | <img src="assets/stack-vertical-right.gif"/> | <img src="assets/stack-horizontal-right.gif"/> |
32
+ | <a href="./exampleExpo/src/stack/index.tsx">stack-vertical-left</a> | <a href="./exampleExpo/src/stack/index.tsx">stack-vertical-right</a> | <a href="./exampleExpo/src/stack/index.tsx">stack-horizontal-right</a> |
33
33
 
34
34
  > 现在你可以和我们一起来制作酷炫的动画了! 非常简单! [[详情]](./docs/custom-animation.zh-CN.md)
35
35
 
36
- | <img src="assets/advanced-parallax.gif"/> | <img src="assets/pause-advanced-parallax.gif"/> | <img src="assets/scale-fade-in-out.gif"/> |
37
- | :-------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------: | :-----------------------------------------------------------------------: |
38
- | <a href="./example/src/advanced-parallax/index.tsx">advanced-parallax</a> | <a href="./example/src/pause-advanced-parallax/index.tsx">pause-advanced-parallax</a> | <a href="./example/src/scale-fade-in-out/index.tsx">scale-fade-in-out</a> |
39
- | <img src="assets/rotate-scale-fade-in-out.gif"/> | <img src="assets/rotate-in-out.gif"/> | <img src="assets/anim-tab-bar.gif"/> |
40
- | <a href="./example/src/rotate-scale-fade-in-out/index.tsx">rotate-scale-fade-in-out</a> | <a href="./example/src/rotate-in-out/index.tsx">rotate-in-out</a> | <a href="./example/src/anim-tab-bar/index.tsx">anim-tab-bar</a> |
41
- | <img src="assets/marquee.gif"/> | <img src="assets/multiple.gif"/> | |
42
- | <a href="./example/src/marquee/index.tsx">marquee</a> | <a href="./example/src/multiple/index.tsx">multiple</a> | |
43
- | <img src="assets/parallax-layers.gif"/> | <img src="assets/flow.gif"/> | |
44
- | <a href="./example/src/parallax-layers/index.tsx">parallax-layers</a> | <a href="./example/src/flow/index.tsx">flow</a> | |
36
+ | <img src="assets/advanced-parallax.gif"/> | <img src="assets/pause-advanced-parallax.gif"/> | <img src="assets/scale-fade-in-out.gif"/> |
37
+ | :-----------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------: |
38
+ | <a href="./exampleExpo/src/advanced-parallax/index.tsx">advanced-parallax</a> | <a href="./exampleExpo/src/pause-advanced-parallax/index.tsx">pause-advanced-parallax</a> | <a href="./exampleExpo/src/scale-fade-in-out/index.tsx">scale-fade-in-out</a> |
39
+ | <img src="assets/rotate-scale-fade-in-out.gif"/> | <img src="assets/rotate-in-out.gif"/> | <img src="assets/anim-tab-bar.gif"/> |
40
+ | <a href="./exampleExpo/src/rotate-scale-fade-in-out/index.tsx">rotate-scale-fade-in-out</a> | <a href="./exampleExpo/src/rotate-in-out/index.tsx">rotate-in-out</a> | <a href="./exampleExpo/src/anim-tab-bar/index.tsx">anim-tab-bar</a> |
41
+ | <img src="assets/marquee.gif"/> | <img src="assets/multiple.gif"/> | <img src="assets/circular.gif"/> |
42
+ | <a href="./exampleExpo/src/marquee/index.tsx">marquee</a> | <a href="./exampleExpo/src/multiple/index.tsx">multiple</a> | <a href="./exampleExpo/src/circular/index.tsx">circular</a> |
43
+ | <img src="assets/parallax-layers.gif"/> | <img src="assets/flow.gif"/> | <img src="assets/fold.gif"/> |
44
+ | <a href="./exampleExpo/src/parallax-layers/index.tsx">parallax-layers</a> | <a href="./exampleExpo/src/flow/index.tsx">flow</a> | <a href="./exampleExpo/src/fold/index.tsx">fold</a> |
45
45
 
46
46
  ## 目录
47
47
 
@@ -69,6 +69,10 @@ npm install react-native-reanimated-carousel
69
69
  ```
70
70
 
71
71
  并且我们需要安装 [`react-native-gesture-handler`](https://github.com/kmagiera/react-native-gesture-handler) 、[`react-native-reanimated(>=2.0.0)`](https://github.com/kmagiera/react-native-reanimated),安装步骤可参考各自文档。
72
+ | | react-native-reanimated | react-native-gesture-handler |
73
+ | -------------------------------------- | ----------------------- | ---------------------------- |
74
+ | react-native-reanimated-carousel < v3 | <2.7.0 | \* |
75
+ | react-native-reanimated-carousel >= v3 | >=2.7.0 | \* |
72
76
 
73
77
  ## 使用
74
78
 
@@ -142,7 +146,7 @@ yarn web:pretty
142
146
  ## 赞助商
143
147
 
144
148
  <p align="center">
145
- <img src='./sponsorkit/sponsors.svg'/>
149
+ <img src='https://github.com/dohooo/sponsors/blob/master/sponsors.png?raw=true'/>
146
150
  </p>
147
151
 
148
152
  ## 许可
@@ -1,2 +1,2 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.ScrollViewGesture=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _react=_interopRequireDefault(require("react"));var _reactNative=require("react-native");var _reactNativeGestureHandler=require("react-native-gesture-handler");var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _constants=require("./constants");var _store=require("./store");var _dealWithAnimation=require("./utils/dealWithAnimation");var _this=this,_jsxFileName="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var IScrollViewGesture=function IScrollViewGesture(props){var _React$useContext=_react.default.useContext(_store.CTX),_React$useContext$pro=_React$useContext.props,vertical=_React$useContext$pro.vertical,data=_React$useContext$pro.data,pagingEnabled=_React$useContext$pro.pagingEnabled,snapEnabled=_React$useContext$pro.snapEnabled,panGestureHandlerProps=_React$useContext$pro.panGestureHandlerProps,infinite=_React$useContext$pro.loop,scrollAnimationDuration=_React$useContext$pro.scrollAnimationDuration,withAnimation=_React$useContext$pro.withAnimation,enabled=_React$useContext$pro.enabled;var translation=props.translation,size=props.size,onScrollBegin=props.onScrollBegin,onScrollEnd=props.onScrollEnd,onTouchBegin=props.onTouchBegin,onTouchEnd=props.onTouchEnd;var maxPage=data.length;var isHorizontal=(0,_reactNativeReanimated.useDerivedValue)(function(){var _f=function _f(){return!vertical;};_f._closure={vertical:vertical};_f.asString="function _f(){const{vertical}=jsThis._closure;{return!vertical;}}";_f.__workletHash=14495821007639;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (63:41)";return _f;}(),[vertical]);var touching=(0,_reactNativeReanimated.useSharedValue)(false);var scrollEndTranslation=(0,_reactNativeReanimated.useSharedValue)(0);var scrollEndVelocity=(0,_reactNativeReanimated.useSharedValue)(0);var _withSpring=_react.default.useCallback(function(){var _f=function _f(toValue,onFinished){var defaultWithAnimation={type:'timing',config:{duration:scrollAnimationDuration+100,easing:_constants.Easing.easeOutQuart}};return(0,_dealWithAnimation.dealWithAnimation)(withAnimation!=null?withAnimation:defaultWithAnimation)(toValue,function(){var _f=function _f(isFinished){if(isFinished){onFinished&&(0,_reactNativeReanimated.runOnJS)(onFinished)();}};_f._closure={onFinished:onFinished,runOnJS:_reactNativeReanimated.runOnJS};_f.asString="function _f(isFinished){const{onFinished,runOnJS}=jsThis._closure;{if(isFinished){onFinished&&runOnJS(onFinished)();}}}";_f.__workletHash=9122154549195;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (81:16)";return _f;}());};_f._closure={scrollAnimationDuration:scrollAnimationDuration,Easing:{easeOutQuart:_constants.Easing.easeOutQuart},dealWithAnimation:_dealWithAnimation.dealWithAnimation,withAnimation:withAnimation,runOnJS:_reactNativeReanimated.runOnJS};_f.asString="function _f(toValue,onFinished){const{scrollAnimationDuration,Easing,dealWithAnimation,withAnimation,runOnJS}=jsThis._closure;{var _withAnimation;const defaultWithAnimation={type:'timing',config:{duration:scrollAnimationDuration+100,easing:Easing.easeOutQuart}};return dealWithAnimation((_withAnimation=withAnimation)!==null&&_withAnimation!==void 0?_withAnimation:defaultWithAnimation)(toValue,function(isFinished){'worklet';if(isFinished){onFinished&&runOnJS(onFinished)();}});}}";_f.__workletHash=16303945491727;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (69:8)";return _f;}(),[scrollAnimationDuration,withAnimation]);var endWithSpring=_react.default.useCallback(function(){var _f=function _f(onFinished){var origin=translation.value;var velocity=scrollEndVelocity.value;if(!pagingEnabled){if(snapEnabled){var nextPage=Math.round((origin+velocity*0.4)/size)*size;translation.value=_withSpring(nextPage,onFinished);return;}translation.value=(0,_reactNativeReanimated.withDecay)({velocity:velocity,deceleration:0.999});return;}var page=Math.round(-translation.value/size);var velocityPage=Math.round(-(translation.value+scrollEndVelocity.value)/size);var finalPage=Math.min(page+1,Math.max(page-1,velocityPage));if(!infinite){finalPage=Math.min(maxPage-1,Math.max(0,finalPage));}translation.value=_withSpring(-finalPage*size,onFinished);};_f._closure={translation:translation,scrollEndVelocity:scrollEndVelocity,pagingEnabled:pagingEnabled,snapEnabled:snapEnabled,size:size,_withSpring:_withSpring,withDecay:_reactNativeReanimated.withDecay,infinite:infinite,maxPage:maxPage};_f.asString="function _f(onFinished){const{translation,scrollEndVelocity,pagingEnabled,snapEnabled,size,_withSpring,withDecay,infinite,maxPage}=jsThis._closure;{const origin=translation.value;const velocity=scrollEndVelocity.value;if(!pagingEnabled){if(snapEnabled){const nextPage=Math.round((origin+velocity*0.4)/size)*size;translation.value=_withSpring(nextPage,onFinished);return;}translation.value=withDecay({velocity:velocity,deceleration:0.999});return;}const page=Math.round(-translation.value/size);const velocityPage=Math.round(-(translation.value+scrollEndVelocity.value)/size);let finalPage=Math.min(page+1,Math.max(page-1,velocityPage));if(!infinite){finalPage=Math.min(maxPage-1,Math.max(0,finalPage));}translation.value=_withSpring(-finalPage*size,onFinished);}}";_f.__workletHash=6617882707805;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (93:8)";return _f;}(),[infinite,_withSpring,translation,scrollEndVelocity,size,maxPage,pagingEnabled,snapEnabled]);var onFinish=_react.default.useCallback(function(){var _f=function _f(isFinished){if(isFinished){touching.value=false;onScrollEnd&&(0,_reactNativeReanimated.runOnJS)(onScrollEnd)();}};_f._closure={touching:touching,onScrollEnd:onScrollEnd,runOnJS:_reactNativeReanimated.runOnJS};_f.asString="function _f(isFinished){const{touching,onScrollEnd,runOnJS}=jsThis._closure;{if(isFinished){touching.value=false;onScrollEnd&&runOnJS(onScrollEnd)();}}}";_f.__workletHash=12308424749737;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (137:8)";return _f;}(),[onScrollEnd,touching]);var activeDecay=_react.default.useCallback(function(){var _f=function _f(){touching.value=true;translation.value=(0,_reactNativeReanimated.withDecay)({velocity:scrollEndVelocity.value},function(){var _f=function _f(isFinished){return onFinish(isFinished);};_f._closure={onFinish:onFinish};_f.asString="function _f(isFinished){const{onFinish}=jsThis._closure;{return onFinish(isFinished);}}";_f.__workletHash=12004837605207;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (152:12)";return _f;}());};_f._closure={touching:touching,translation:translation,withDecay:_reactNativeReanimated.withDecay,scrollEndVelocity:scrollEndVelocity,onFinish:onFinish};_f.asString="function _f(){const{touching,translation,withDecay,scrollEndVelocity,onFinish}=jsThis._closure;{touching.value=true;translation.value=withDecay({velocity:scrollEndVelocity.value},function(isFinished){return onFinish(isFinished);});}}";_f.__workletHash=1701548878343;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (147:42)";return _f;}(),[onFinish,scrollEndVelocity.value,touching,translation]);var resetBoundary=_react.default.useCallback(function(){var _f=function _f(){if(touching.value){return;}if(translation.value>0){if(scrollEndTranslation.value<0){activeDecay();return;}if(!infinite){translation.value=_withSpring(0);return;}}if(translation.value<-((maxPage-1)*size)){if(scrollEndTranslation.value>0){activeDecay();return;}if(!infinite){translation.value=_withSpring(-((maxPage-1)*size));return;}}};_f._closure={touching:touching,translation:translation,scrollEndTranslation:scrollEndTranslation,activeDecay:activeDecay,infinite:infinite,_withSpring:_withSpring,maxPage:maxPage,size:size};_f.asString="function _f(){const{touching,translation,scrollEndTranslation,activeDecay,infinite,_withSpring,maxPage,size}=jsThis._closure;{if(touching.value){return;}if(translation.value>0){if(scrollEndTranslation.value<0){activeDecay();return;}if(!infinite){translation.value=_withSpring(0);return;}}if(translation.value<-((maxPage-1)*size)){if(scrollEndTranslation.value>0){activeDecay();return;}if(!infinite){translation.value=_withSpring(-((maxPage-1)*size));return;}}}}";_f.__workletHash=3458376770899;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (156:44)";return _f;}(),[touching.value,translation,maxPage,size,scrollEndTranslation.value,infinite,activeDecay,_withSpring]);(0,_reactNativeReanimated.useAnimatedReaction)(function(){var _f=function _f(){return translation.value;};_f._closure={translation:translation};_f.asString="function _f(){const{translation}=jsThis._closure;{return translation.value;}}";_f.__workletHash=9829368032147;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (195:8)";return _f;}(),function(){var _f=function _f(){if(!pagingEnabled){resetBoundary();}};_f._closure={pagingEnabled:pagingEnabled,resetBoundary:resetBoundary};_f.asString="function _f(){const{pagingEnabled,resetBoundary}=jsThis._closure;{if(!pagingEnabled){resetBoundary();}}}";_f.__workletHash=10686939088248;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (196:8)";return _f;}(),[pagingEnabled,resetBoundary]);var panGestureEventHandler=(0,_reactNativeReanimated.useAnimatedGestureHandler)({onStart:function(){var _f=function _f(_,ctx){touching.value=true;ctx.validStart=true;onScrollBegin&&(0,_reactNativeReanimated.runOnJS)(onScrollBegin)();ctx.max=(maxPage-1)*size;ctx.panOffset=translation.value;};_f._closure={touching:touching,onScrollBegin:onScrollBegin,runOnJS:_reactNativeReanimated.runOnJS,maxPage:maxPage,size:size,translation:translation};_f.asString="function _f(_,ctx){const{touching,onScrollBegin,runOnJS,maxPage,size,translation}=jsThis._closure;{touching.value=true;ctx.validStart=true;onScrollBegin&&runOnJS(onScrollBegin)();ctx.max=(maxPage-1)*size;ctx.panOffset=translation.value;}}";_f.__workletHash=1789833551681;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (209:21)";return _f;}(),onActive:function(){var _f=function _f(e,ctx){if(ctx.validStart){ctx.validStart=false;(0,_reactNativeReanimated.cancelAnimation)(translation);}touching.value=true;var translationX=e.translationX,translationY=e.translationY;var panTranslation=isHorizontal.value?translationX:translationY;if(!infinite&&(translation.value>0||translation.value<-ctx.max)){var boundary=translation.value>0?0:-ctx.max;var fixed=boundary-ctx.panOffset;var dynamic=panTranslation-fixed;translation.value=boundary+dynamic*0.5;return;}translation.value=ctx.panOffset+panTranslation;};_f._closure={cancelAnimation:_reactNativeReanimated.cancelAnimation,translation:translation,touching:touching,isHorizontal:isHorizontal,infinite:infinite};_f.asString="function _f(e,ctx){const{cancelAnimation,translation,touching,isHorizontal,infinite}=jsThis._closure;{if(ctx.validStart){ctx.validStart=false;cancelAnimation(translation);}touching.value=true;const{translationX:translationX,translationY:translationY}=e;let panTranslation=isHorizontal.value?translationX:translationY;if(!infinite&&(translation.value>0||translation.value<-ctx.max)){const boundary=translation.value>0?0:-ctx.max;const fixed=boundary-ctx.panOffset;const dynamic=panTranslation-fixed;translation.value=boundary+dynamic*0.5;return;}translation.value=ctx.panOffset+panTranslation;}}";_f.__workletHash=10275621069851;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (216:22)";return _f;}(),onEnd:function(){var _f=function _f(e){var velocityX=e.velocityX,velocityY=e.velocityY,translationX=e.translationX,translationY=e.translationY;scrollEndVelocity.value=isHorizontal.value?velocityX:velocityY;scrollEndTranslation.value=isHorizontal.value?translationX:translationY;endWithSpring(onScrollEnd);if(!infinite){touching.value=false;}};_f._closure={scrollEndVelocity:scrollEndVelocity,isHorizontal:isHorizontal,scrollEndTranslation:scrollEndTranslation,endWithSpring:endWithSpring,onScrollEnd:onScrollEnd,infinite:infinite,touching:touching};_f.asString="function _f(e){const{scrollEndVelocity,isHorizontal,scrollEndTranslation,endWithSpring,onScrollEnd,infinite,touching}=jsThis._closure;{const{velocityX:velocityX,velocityY:velocityY,translationX:translationX,translationY:translationY}=e;scrollEndVelocity.value=isHorizontal.value?velocityX:velocityY;scrollEndTranslation.value=isHorizontal.value?translationX:translationY;endWithSpring(onScrollEnd);if(!infinite){touching.value=false;}}}";_f.__workletHash=8095479445863;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (240:19)";return _f;}()},[pagingEnabled,isHorizontal.value,infinite,maxPage,size,snapEnabled,onScrollBegin,onScrollEnd]);var directionStyle=_react.default.useMemo(function(){return vertical?styles.contentHorizontal:styles.contentVertical;},[vertical]);return _react.default.createElement(_reactNativeReanimated.default.View,{style:[styles.container,directionStyle,{width:'100%',height:'100%'}],onTouchStart:onTouchBegin,onTouchEnd:onTouchEnd,__self:_this,__source:{fileName:_jsxFileName,lineNumber:273,columnNumber:9}},_react.default.createElement(_reactNativeGestureHandler.PanGestureHandler,(0,_extends2.default)({},panGestureHandlerProps,{enabled:enabled,onGestureEvent:panGestureEventHandler,__self:_this,__source:{fileName:_jsxFileName,lineNumber:282,columnNumber:13}}),props.children));};var ScrollViewGesture=IScrollViewGesture;exports.ScrollViewGesture=ScrollViewGesture;var styles=_reactNative.StyleSheet.create({container:{flex:1,overflow:'hidden'},contentVertical:{flexDirection:'column'},contentHorizontal:{flexDirection:'row'}});
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.ScrollViewGesture=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _react=_interopRequireDefault(require("react"));var _reactNative=require("react-native");var _reactNativeGestureHandler=require("react-native-gesture-handler");var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _constants=require("./constants");var _store=require("./store");var _dealWithAnimation=require("./utils/dealWithAnimation");var _this=this,_jsxFileName="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var IScrollViewGesture=function IScrollViewGesture(props){var _React$useContext=_react.default.useContext(_store.CTX),_React$useContext$pro=_React$useContext.props,vertical=_React$useContext$pro.vertical,data=_React$useContext$pro.data,pagingEnabled=_React$useContext$pro.pagingEnabled,snapEnabled=_React$useContext$pro.snapEnabled,panGestureHandlerProps=_React$useContext$pro.panGestureHandlerProps,infinite=_React$useContext$pro.loop,scrollAnimationDuration=_React$useContext$pro.scrollAnimationDuration,withAnimation=_React$useContext$pro.withAnimation,enabled=_React$useContext$pro.enabled;var translation=props.translation,size=props.size,onScrollBegin=props.onScrollBegin,onScrollEnd=props.onScrollEnd,onTouchBegin=props.onTouchBegin,onTouchEnd=props.onTouchEnd;var maxPage=data.length;var isHorizontal=(0,_reactNativeReanimated.useDerivedValue)(function(){var _f=function _f(){return!vertical;};_f._closure={vertical:vertical};_f.asString="function _f(){const{vertical}=jsThis._closure;{return!vertical;}}";_f.__workletHash=14495821007639;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (63:41)";return _f;}(),[vertical]);var touching=(0,_reactNativeReanimated.useSharedValue)(false);var scrollEndTranslation=(0,_reactNativeReanimated.useSharedValue)(0);var scrollEndVelocity=(0,_reactNativeReanimated.useSharedValue)(0);var _withSpring=_react.default.useCallback(function(){var _f=function _f(toValue,onFinished){var defaultWithAnimation={type:'timing',config:{duration:scrollAnimationDuration+100,easing:_constants.Easing.easeOutQuart}};return(0,_dealWithAnimation.dealWithAnimation)(withAnimation!=null?withAnimation:defaultWithAnimation)(toValue,function(){var _f=function _f(isFinished){if(isFinished){onFinished&&(0,_reactNativeReanimated.runOnJS)(onFinished)();}};_f._closure={onFinished:onFinished,runOnJS:_reactNativeReanimated.runOnJS};_f.asString="function _f(isFinished){const{onFinished,runOnJS}=jsThis._closure;{if(isFinished){onFinished&&runOnJS(onFinished)();}}}";_f.__workletHash=9122154549195;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (81:16)";return _f;}());};_f._closure={scrollAnimationDuration:scrollAnimationDuration,Easing:{easeOutQuart:_constants.Easing.easeOutQuart},dealWithAnimation:_dealWithAnimation.dealWithAnimation,withAnimation:withAnimation,runOnJS:_reactNativeReanimated.runOnJS};_f.asString="function _f(toValue,onFinished){const{scrollAnimationDuration,Easing,dealWithAnimation,withAnimation,runOnJS}=jsThis._closure;{var _withAnimation;const defaultWithAnimation={type:'timing',config:{duration:scrollAnimationDuration+100,easing:Easing.easeOutQuart}};return dealWithAnimation((_withAnimation=withAnimation)!==null&&_withAnimation!==void 0?_withAnimation:defaultWithAnimation)(toValue,function(isFinished){'worklet';if(isFinished){onFinished&&runOnJS(onFinished)();}});}}";_f.__workletHash=16303945491727;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (69:8)";return _f;}(),[scrollAnimationDuration,withAnimation]);var endWithSpring=_react.default.useCallback(function(){var _f=function _f(onFinished){var origin=translation.value;var velocity=scrollEndVelocity.value;if(!pagingEnabled){if(snapEnabled){var nextPage=Math.round((origin+velocity*0.4)/size)*size;translation.value=_withSpring(nextPage,onFinished);return;}translation.value=(0,_reactNativeReanimated.withDecay)({velocity:velocity,deceleration:0.999});return;}var direction=-scrollEndTranslation.value/Math.abs(scrollEndTranslation.value);var computed=direction<0?Math.ceil:Math.floor;var page=computed(-translation.value/size);var finalPage=page+direction;if(!infinite){finalPage=Math.min(maxPage-1,Math.max(0,finalPage));}translation.value=_withSpring(-finalPage*size,onFinished);};_f._closure={translation:translation,scrollEndVelocity:scrollEndVelocity,pagingEnabled:pagingEnabled,snapEnabled:snapEnabled,size:size,_withSpring:_withSpring,withDecay:_reactNativeReanimated.withDecay,scrollEndTranslation:scrollEndTranslation,infinite:infinite,maxPage:maxPage};_f.asString="function _f(onFinished){const{translation,scrollEndVelocity,pagingEnabled,snapEnabled,size,_withSpring,withDecay,scrollEndTranslation,infinite,maxPage}=jsThis._closure;{const origin=translation.value;const velocity=scrollEndVelocity.value;if(!pagingEnabled){if(snapEnabled){const nextPage=Math.round((origin+velocity*0.4)/size)*size;translation.value=_withSpring(nextPage,onFinished);return;}translation.value=withDecay({velocity:velocity,deceleration:0.999});return;}const direction=-scrollEndTranslation.value/Math.abs(scrollEndTranslation.value);const computed=direction<0?Math.ceil:Math.floor;const page=computed(-translation.value/size);let finalPage=page+direction;if(!infinite){finalPage=Math.min(maxPage-1,Math.max(0,finalPage));}translation.value=_withSpring(-finalPage*size,onFinished);}}";_f.__workletHash=6504539681875;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (93:8)";return _f;}(),[translation,scrollEndVelocity.value,pagingEnabled,size,scrollEndTranslation.value,infinite,_withSpring,snapEnabled,maxPage]);var onFinish=_react.default.useCallback(function(){var _f=function _f(isFinished){if(isFinished){touching.value=false;onScrollEnd&&(0,_reactNativeReanimated.runOnJS)(onScrollEnd)();}};_f._closure={touching:touching,onScrollEnd:onScrollEnd,runOnJS:_reactNativeReanimated.runOnJS};_f.asString="function _f(isFinished){const{touching,onScrollEnd,runOnJS}=jsThis._closure;{if(isFinished){touching.value=false;onScrollEnd&&runOnJS(onScrollEnd)();}}}";_f.__workletHash=12308424749737;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (143:8)";return _f;}(),[onScrollEnd,touching]);var activeDecay=_react.default.useCallback(function(){var _f=function _f(){touching.value=true;translation.value=(0,_reactNativeReanimated.withDecay)({velocity:scrollEndVelocity.value},function(){var _f=function _f(isFinished){return onFinish(isFinished);};_f._closure={onFinish:onFinish};_f.asString="function _f(isFinished){const{onFinish}=jsThis._closure;{return onFinish(isFinished);}}";_f.__workletHash=12004837605207;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (158:12)";return _f;}());};_f._closure={touching:touching,translation:translation,withDecay:_reactNativeReanimated.withDecay,scrollEndVelocity:scrollEndVelocity,onFinish:onFinish};_f.asString="function _f(){const{touching,translation,withDecay,scrollEndVelocity,onFinish}=jsThis._closure;{touching.value=true;translation.value=withDecay({velocity:scrollEndVelocity.value},function(isFinished){return onFinish(isFinished);});}}";_f.__workletHash=1701548878343;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (153:42)";return _f;}(),[onFinish,scrollEndVelocity.value,touching,translation]);var resetBoundary=_react.default.useCallback(function(){var _f=function _f(){if(touching.value){return;}if(translation.value>0){if(scrollEndTranslation.value<0){activeDecay();return;}if(!infinite){translation.value=_withSpring(0);return;}}if(translation.value<-((maxPage-1)*size)){if(scrollEndTranslation.value>0){activeDecay();return;}if(!infinite){translation.value=_withSpring(-((maxPage-1)*size));return;}}};_f._closure={touching:touching,translation:translation,scrollEndTranslation:scrollEndTranslation,activeDecay:activeDecay,infinite:infinite,_withSpring:_withSpring,maxPage:maxPage,size:size};_f.asString="function _f(){const{touching,translation,scrollEndTranslation,activeDecay,infinite,_withSpring,maxPage,size}=jsThis._closure;{if(touching.value){return;}if(translation.value>0){if(scrollEndTranslation.value<0){activeDecay();return;}if(!infinite){translation.value=_withSpring(0);return;}}if(translation.value<-((maxPage-1)*size)){if(scrollEndTranslation.value>0){activeDecay();return;}if(!infinite){translation.value=_withSpring(-((maxPage-1)*size));return;}}}}";_f.__workletHash=3458376770899;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (162:44)";return _f;}(),[touching.value,translation,maxPage,size,scrollEndTranslation.value,infinite,activeDecay,_withSpring]);(0,_reactNativeReanimated.useAnimatedReaction)(function(){var _f=function _f(){return translation.value;};_f._closure={translation:translation};_f.asString="function _f(){const{translation}=jsThis._closure;{return translation.value;}}";_f.__workletHash=9829368032147;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (201:8)";return _f;}(),function(){var _f=function _f(){if(!pagingEnabled){resetBoundary();}};_f._closure={pagingEnabled:pagingEnabled,resetBoundary:resetBoundary};_f.asString="function _f(){const{pagingEnabled,resetBoundary}=jsThis._closure;{if(!pagingEnabled){resetBoundary();}}}";_f.__workletHash=10686939088248;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (202:8)";return _f;}(),[pagingEnabled,resetBoundary]);var panGestureEventHandler=(0,_reactNativeReanimated.useAnimatedGestureHandler)({onStart:function(){var _f=function _f(_,ctx){touching.value=true;ctx.validStart=true;onScrollBegin&&(0,_reactNativeReanimated.runOnJS)(onScrollBegin)();ctx.max=(maxPage-1)*size;ctx.panOffset=translation.value;};_f._closure={touching:touching,onScrollBegin:onScrollBegin,runOnJS:_reactNativeReanimated.runOnJS,maxPage:maxPage,size:size,translation:translation};_f.asString="function _f(_,ctx){const{touching,onScrollBegin,runOnJS,maxPage,size,translation}=jsThis._closure;{touching.value=true;ctx.validStart=true;onScrollBegin&&runOnJS(onScrollBegin)();ctx.max=(maxPage-1)*size;ctx.panOffset=translation.value;}}";_f.__workletHash=1789833551681;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (215:21)";return _f;}(),onActive:function(){var _f=function _f(e,ctx){if(ctx.validStart){ctx.validStart=false;(0,_reactNativeReanimated.cancelAnimation)(translation);}touching.value=true;var translationX=e.translationX,translationY=e.translationY;var panTranslation=isHorizontal.value?translationX:translationY;if(!infinite&&(translation.value>0||translation.value<-ctx.max)){var boundary=translation.value>0?0:-ctx.max;var fixed=boundary-ctx.panOffset;var dynamic=panTranslation-fixed;translation.value=boundary+dynamic*0.5;return;}translation.value=ctx.panOffset+panTranslation;};_f._closure={cancelAnimation:_reactNativeReanimated.cancelAnimation,translation:translation,touching:touching,isHorizontal:isHorizontal,infinite:infinite};_f.asString="function _f(e,ctx){const{cancelAnimation,translation,touching,isHorizontal,infinite}=jsThis._closure;{if(ctx.validStart){ctx.validStart=false;cancelAnimation(translation);}touching.value=true;const{translationX:translationX,translationY:translationY}=e;let panTranslation=isHorizontal.value?translationX:translationY;if(!infinite&&(translation.value>0||translation.value<-ctx.max)){const boundary=translation.value>0?0:-ctx.max;const fixed=boundary-ctx.panOffset;const dynamic=panTranslation-fixed;translation.value=boundary+dynamic*0.5;return;}translation.value=ctx.panOffset+panTranslation;}}";_f.__workletHash=10275621069851;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (222:22)";return _f;}(),onEnd:function(){var _f=function _f(e){var velocityX=e.velocityX,velocityY=e.velocityY,translationX=e.translationX,translationY=e.translationY;scrollEndVelocity.value=isHorizontal.value?velocityX:velocityY;scrollEndTranslation.value=isHorizontal.value?translationX:translationY;endWithSpring(onScrollEnd);if(!infinite){touching.value=false;}};_f._closure={scrollEndVelocity:scrollEndVelocity,isHorizontal:isHorizontal,scrollEndTranslation:scrollEndTranslation,endWithSpring:endWithSpring,onScrollEnd:onScrollEnd,infinite:infinite,touching:touching};_f.asString="function _f(e){const{scrollEndVelocity,isHorizontal,scrollEndTranslation,endWithSpring,onScrollEnd,infinite,touching}=jsThis._closure;{const{velocityX:velocityX,velocityY:velocityY,translationX:translationX,translationY:translationY}=e;scrollEndVelocity.value=isHorizontal.value?velocityX:velocityY;scrollEndTranslation.value=isHorizontal.value?translationX:translationY;endWithSpring(onScrollEnd);if(!infinite){touching.value=false;}}}";_f.__workletHash=8095479445863;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/ScrollViewGesture.tsx (246:19)";return _f;}()},[pagingEnabled,isHorizontal.value,infinite,maxPage,size,snapEnabled,onScrollBegin,onScrollEnd]);var directionStyle=_react.default.useMemo(function(){return vertical?styles.contentHorizontal:styles.contentVertical;},[vertical]);return _react.default.createElement(_reactNativeReanimated.default.View,{style:[styles.container,directionStyle,{width:'100%',height:'100%'}],onTouchStart:onTouchBegin,onTouchEnd:onTouchEnd,__self:_this,__source:{fileName:_jsxFileName,lineNumber:279,columnNumber:9}},_react.default.createElement(_reactNativeGestureHandler.PanGestureHandler,(0,_extends2.default)({},panGestureHandlerProps,{enabled:enabled,onGestureEvent:panGestureEventHandler,__self:_this,__source:{fileName:_jsxFileName,lineNumber:288,columnNumber:13}}),props.children));};var ScrollViewGesture=IScrollViewGesture;exports.ScrollViewGesture=ScrollViewGesture;var styles=_reactNative.StyleSheet.create({container:{flex:1,overflow:'hidden'},contentVertical:{flexDirection:'column'},contentHorizontal:{flexDirection:'row'}});
2
2
  //# sourceMappingURL=ScrollViewGesture.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["IScrollViewGesture","props","React","useContext","CTX","vertical","data","pagingEnabled","snapEnabled","panGestureHandlerProps","infinite","loop","scrollAnimationDuration","withAnimation","enabled","translation","size","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","length","isHorizontal","touching","scrollEndTranslation","scrollEndVelocity","_withSpring","useCallback","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","Easing","easeOutQuart","isFinished","runOnJS","dealWithAnimation","endWithSpring","origin","value","velocity","nextPage","Math","round","deceleration","page","velocityPage","finalPage","min","max","withDecay","onFinish","activeDecay","resetBoundary","panGestureEventHandler","onStart","_","ctx","validStart","panOffset","onActive","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","cancelAnimation","onEnd","velocityX","velocityY","directionStyle","useMemo","styles","contentHorizontal","contentVertical","container","width","height","children","ScrollViewGesture","StyleSheet","create","flex","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, ViewStyle } from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from 'react-native-reanimated';\nimport { Easing } from './constants';\nimport { CTX } from './store';\nimport type { WithTimingAnimation } from './types';\nimport { dealWithAnimation } from './utils/dealWithAnimation';\n\ntype GestureContext = {\n validStart: boolean;\n panOffset: number;\n max: number;\n};\n\ninterface Props {\n size: number;\n infinite?: boolean;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n onTouchBegin?: () => void;\n onTouchEnd?: () => void;\n style?: StyleProp<ViewStyle>;\n translation: Animated.SharedValue<number>;\n}\n\nconst IScrollViewGesture: React.FC<Props> = (props) => {\n const {\n props: {\n vertical,\n data,\n pagingEnabled,\n snapEnabled,\n panGestureHandlerProps,\n loop: infinite,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n },\n } = React.useContext(CTX);\n\n const {\n translation,\n size,\n onScrollBegin,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = data.length;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const touching = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n\n const _withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n onFinished && runOnJS(onFinished)();\n }\n }\n );\n },\n [scrollAnimationDuration, withAnimation]\n );\n\n const endWithSpring = React.useCallback(\n (onFinished?: () => void) => {\n 'worklet';\n const origin = translation.value;\n const velocity = scrollEndVelocity.value;\n if (!pagingEnabled) {\n if (snapEnabled) {\n const nextPage =\n Math.round((origin + velocity * 0.4) / size) * size;\n translation.value = _withSpring(nextPage, onFinished);\n return;\n }\n translation.value = withDecay({\n velocity,\n deceleration: 0.999,\n });\n return;\n }\n const page = Math.round(-translation.value / size);\n const velocityPage = Math.round(\n -(translation.value + scrollEndVelocity.value) / size\n );\n let finalPage = Math.min(\n page + 1,\n Math.max(page - 1, velocityPage)\n );\n if (!infinite) {\n finalPage = Math.min(maxPage - 1, Math.max(0, finalPage));\n }\n\n translation.value = _withSpring(-finalPage * size, onFinished);\n },\n [\n infinite,\n _withSpring,\n translation,\n scrollEndVelocity,\n size,\n maxPage,\n pagingEnabled,\n snapEnabled,\n ]\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching]\n );\n\n const activeDecay = React.useCallback(() => {\n 'worklet';\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n (isFinished) => onFinish(isFinished as boolean)\n );\n }, [onFinish, scrollEndVelocity.value, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n 'worklet';\n if (touching.value) {\n return;\n }\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(-((maxPage - 1) * size));\n return;\n }\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n infinite,\n activeDecay,\n _withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled) {\n resetBoundary();\n }\n },\n [pagingEnabled, resetBoundary]\n );\n\n const panGestureEventHandler = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n GestureContext\n >(\n {\n onStart: (_, ctx) => {\n touching.value = true;\n ctx.validStart = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n ctx.max = (maxPage - 1) * size;\n ctx.panOffset = translation.value;\n },\n onActive: (e, ctx) => {\n if (ctx.validStart) {\n ctx.validStart = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (\n !infinite &&\n (translation.value > 0 || translation.value < -ctx.max)\n ) {\n const boundary = translation.value > 0 ? 0 : -ctx.max;\n const fixed = boundary - ctx.panOffset;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n\n translation.value = ctx.panOffset + panTranslation;\n },\n onEnd: (e) => {\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n scrollEndTranslation.value = isHorizontal.value\n ? translationX\n : translationY;\n\n endWithSpring(onScrollEnd);\n\n if (!infinite) {\n touching.value = false;\n }\n },\n },\n [\n pagingEnabled,\n isHorizontal.value,\n infinite,\n maxPage,\n size,\n snapEnabled,\n onScrollBegin,\n onScrollEnd,\n ]\n );\n\n const directionStyle = React.useMemo(() => {\n return vertical ? styles.contentHorizontal : styles.contentVertical;\n }, [vertical]);\n\n return (\n <Animated.View\n style={[\n styles.container,\n directionStyle,\n { width: '100%', height: '100%' },\n ]}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n <PanGestureHandler\n {...panGestureHandlerProps}\n enabled={enabled}\n onGestureEvent={panGestureEventHandler}\n >\n {props.children}\n </PanGestureHandler>\n </Animated.View>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n overflow: 'hidden',\n },\n contentVertical: {\n flexDirection: 'column',\n },\n contentHorizontal: {\n flexDirection: 'row',\n },\n});\n"]}
1
+ {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["IScrollViewGesture","props","React","useContext","CTX","vertical","data","pagingEnabled","snapEnabled","panGestureHandlerProps","infinite","loop","scrollAnimationDuration","withAnimation","enabled","translation","size","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","length","isHorizontal","touching","scrollEndTranslation","scrollEndVelocity","_withSpring","useCallback","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","Easing","easeOutQuart","isFinished","runOnJS","dealWithAnimation","endWithSpring","origin","value","velocity","nextPage","Math","round","deceleration","direction","abs","computed","ceil","floor","page","finalPage","min","max","withDecay","onFinish","activeDecay","resetBoundary","panGestureEventHandler","onStart","_","ctx","validStart","panOffset","onActive","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","cancelAnimation","onEnd","velocityX","velocityY","directionStyle","useMemo","styles","contentHorizontal","contentVertical","container","width","height","children","ScrollViewGesture","StyleSheet","create","flex","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, ViewStyle } from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from 'react-native-reanimated';\nimport { Easing } from './constants';\nimport { CTX } from './store';\nimport type { WithTimingAnimation } from './types';\nimport { dealWithAnimation } from './utils/dealWithAnimation';\n\ntype GestureContext = {\n validStart: boolean;\n panOffset: number;\n max: number;\n};\n\ninterface Props {\n size: number;\n infinite?: boolean;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n onTouchBegin?: () => void;\n onTouchEnd?: () => void;\n style?: StyleProp<ViewStyle>;\n translation: Animated.SharedValue<number>;\n}\n\nconst IScrollViewGesture: React.FC<Props> = (props) => {\n const {\n props: {\n vertical,\n data,\n pagingEnabled,\n snapEnabled,\n panGestureHandlerProps,\n loop: infinite,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n },\n } = React.useContext(CTX);\n\n const {\n translation,\n size,\n onScrollBegin,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = data.length;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const touching = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n\n const _withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n onFinished && runOnJS(onFinished)();\n }\n }\n );\n },\n [scrollAnimationDuration, withAnimation]\n );\n\n const endWithSpring = React.useCallback(\n (onFinished?: () => void) => {\n 'worklet';\n const origin = translation.value;\n const velocity = scrollEndVelocity.value;\n if (!pagingEnabled) {\n /**\n * If enabled, releasing the touch will scroll to the nearest item.\n * valid when pagingEnabled=false\n */\n if (snapEnabled) {\n const nextPage =\n Math.round((origin + velocity * 0.4) / size) * size;\n\n translation.value = _withSpring(nextPage, onFinished);\n return;\n }\n translation.value = withDecay({\n velocity,\n deceleration: 0.999,\n });\n return;\n }\n\n const direction =\n -scrollEndTranslation.value /\n Math.abs(scrollEndTranslation.value);\n const computed = direction < 0 ? Math.ceil : Math.floor;\n const page = computed(-translation.value / size);\n let finalPage = page + direction;\n\n if (!infinite) {\n finalPage = Math.min(maxPage - 1, Math.max(0, finalPage));\n }\n\n translation.value = _withSpring(-finalPage * size, onFinished);\n },\n [\n translation,\n scrollEndVelocity.value,\n pagingEnabled,\n size,\n scrollEndTranslation.value,\n infinite,\n _withSpring,\n snapEnabled,\n maxPage,\n ]\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching]\n );\n\n const activeDecay = React.useCallback(() => {\n 'worklet';\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n (isFinished) => onFinish(isFinished as boolean)\n );\n }, [onFinish, scrollEndVelocity.value, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n 'worklet';\n if (touching.value) {\n return;\n }\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(-((maxPage - 1) * size));\n return;\n }\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n infinite,\n activeDecay,\n _withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled) {\n resetBoundary();\n }\n },\n [pagingEnabled, resetBoundary]\n );\n\n const panGestureEventHandler = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n GestureContext\n >(\n {\n onStart: (_, ctx) => {\n touching.value = true;\n ctx.validStart = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n ctx.max = (maxPage - 1) * size;\n ctx.panOffset = translation.value;\n },\n onActive: (e, ctx) => {\n if (ctx.validStart) {\n ctx.validStart = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (\n !infinite &&\n (translation.value > 0 || translation.value < -ctx.max)\n ) {\n const boundary = translation.value > 0 ? 0 : -ctx.max;\n const fixed = boundary - ctx.panOffset;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n\n translation.value = ctx.panOffset + panTranslation;\n },\n onEnd: (e) => {\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n scrollEndTranslation.value = isHorizontal.value\n ? translationX\n : translationY;\n\n endWithSpring(onScrollEnd);\n\n if (!infinite) {\n touching.value = false;\n }\n },\n },\n [\n pagingEnabled,\n isHorizontal.value,\n infinite,\n maxPage,\n size,\n snapEnabled,\n onScrollBegin,\n onScrollEnd,\n ]\n );\n\n const directionStyle = React.useMemo(() => {\n return vertical ? styles.contentHorizontal : styles.contentVertical;\n }, [vertical]);\n\n return (\n <Animated.View\n style={[\n styles.container,\n directionStyle,\n { width: '100%', height: '100%' },\n ]}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n <PanGestureHandler\n {...panGestureHandlerProps}\n enabled={enabled}\n onGestureEvent={panGestureEventHandler}\n >\n {props.children}\n </PanGestureHandler>\n </Animated.View>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n overflow: 'hidden',\n },\n contentVertical: {\n flexDirection: 'column',\n },\n contentHorizontal: {\n flexDirection: 'row',\n },\n});\n"]}
@@ -1,2 +1,2 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.usePropsErrorBoundary=usePropsErrorBoundary;var _react=_interopRequireDefault(require("react"));function usePropsErrorBoundary(props){_react.default.useEffect(function(){var defaultIndex=props.defaultIndex,data=props.data;var viewCount=data.length;if(typeof defaultIndex==='number'&&viewCount>0){if(defaultIndex<0||defaultIndex>=viewCount){throw Error('DefaultIndex must be in the range of data length.');}}if(!props.mode||props.mode==='parallax'){if(!props.vertical&&!props.width){throw Error('`width` must be specified for vertical carousels.');}if(props.vertical&&!props.height){throw Error('`height` must be specified for vertical carousels.');}}},[props]);}
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.usePropsErrorBoundary=usePropsErrorBoundary;var _react=_interopRequireDefault(require("react"));function usePropsErrorBoundary(props){_react.default.useEffect(function(){var defaultIndex=props.defaultIndex,data=props.data;var viewCount=data.length;if(typeof defaultIndex==='number'&&viewCount>0){if(defaultIndex<0||defaultIndex>=viewCount){throw Error('DefaultIndex must be in the range of data length.');}}if(!props.mode||props.mode==='parallax'){if(!props.vertical&&!props.width){throw Error('`width` must be specified for horizontal carousels.');}if(props.vertical&&!props.height){throw Error('`height` must be specified for vertical carousels.');}}},[props]);}
2
2
  //# sourceMappingURL=usePropsErrorBoundary.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["usePropsErrorBoundary.ts"],"names":["usePropsErrorBoundary","props","React","useEffect","defaultIndex","data","viewCount","length","Error","mode","vertical","width","height"],"mappings":"gMAAA,oDAGO,QAASA,CAAAA,qBAAT,CAA+BC,KAA/B,CAAsD,CACzDC,eAAMC,SAAN,CAAgB,UAAM,CAClB,GAAQC,CAAAA,YAAR,CAA+BH,KAA/B,CAAQG,YAAR,CAAsBC,IAAtB,CAA+BJ,KAA/B,CAAsBI,IAAtB,CAEA,GAAMC,CAAAA,SAAS,CAAGD,IAAI,CAACE,MAAvB,CACA,GAAI,MAAOH,CAAAA,YAAP,GAAwB,QAAxB,EAAoCE,SAAS,CAAG,CAApD,CAAuD,CACnD,GAAIF,YAAY,CAAG,CAAf,EAAoBA,YAAY,EAAIE,SAAxC,CAAmD,CAC/C,KAAME,CAAAA,KAAK,CACP,mDADO,CAAX,CAGH,CACJ,CAGD,GAAI,CAACP,KAAK,CAACQ,IAAP,EAAeR,KAAK,CAACQ,IAAN,GAAe,UAAlC,CAA8C,CAC1C,GAAI,CAACR,KAAK,CAACS,QAAP,EAAmB,CAACT,KAAK,CAACU,KAA9B,CAAqC,CACjC,KAAMH,CAAAA,KAAK,CACP,mDADO,CAAX,CAGH,CACD,GAAIP,KAAK,CAACS,QAAN,EAAkB,CAACT,KAAK,CAACW,MAA7B,CAAqC,CACjC,KAAMJ,CAAAA,KAAK,CACP,oDADO,CAAX,CAGH,CACJ,CACJ,CAzBD,CAyBG,CAACP,KAAD,CAzBH,EA0BH","sourcesContent":["import React from 'react';\nimport type { TCarouselProps } from 'src/types';\n\nexport function usePropsErrorBoundary(props: TCarouselProps) {\n React.useEffect(() => {\n const { defaultIndex, data } = props;\n\n const viewCount = data.length;\n if (typeof defaultIndex === 'number' && viewCount > 0) {\n if (defaultIndex < 0 || defaultIndex >= viewCount) {\n throw Error(\n 'DefaultIndex must be in the range of data length.'\n );\n }\n }\n\n // TODO\n if (!props.mode || props.mode === 'parallax') {\n if (!props.vertical && !props.width) {\n throw Error(\n '`width` must be specified for vertical carousels.'\n );\n }\n if (props.vertical && !props.height) {\n throw Error(\n '`height` must be specified for vertical carousels.'\n );\n }\n }\n }, [props]);\n}\n"]}
1
+ {"version":3,"sources":["usePropsErrorBoundary.ts"],"names":["usePropsErrorBoundary","props","React","useEffect","defaultIndex","data","viewCount","length","Error","mode","vertical","width","height"],"mappings":"gMAAA,oDAGO,QAASA,CAAAA,qBAAT,CAA+BC,KAA/B,CAAsD,CACzDC,eAAMC,SAAN,CAAgB,UAAM,CAClB,GAAQC,CAAAA,YAAR,CAA+BH,KAA/B,CAAQG,YAAR,CAAsBC,IAAtB,CAA+BJ,KAA/B,CAAsBI,IAAtB,CAEA,GAAMC,CAAAA,SAAS,CAAGD,IAAI,CAACE,MAAvB,CACA,GAAI,MAAOH,CAAAA,YAAP,GAAwB,QAAxB,EAAoCE,SAAS,CAAG,CAApD,CAAuD,CACnD,GAAIF,YAAY,CAAG,CAAf,EAAoBA,YAAY,EAAIE,SAAxC,CAAmD,CAC/C,KAAME,CAAAA,KAAK,CACP,mDADO,CAAX,CAGH,CACJ,CAGD,GAAI,CAACP,KAAK,CAACQ,IAAP,EAAeR,KAAK,CAACQ,IAAN,GAAe,UAAlC,CAA8C,CAC1C,GAAI,CAACR,KAAK,CAACS,QAAP,EAAmB,CAACT,KAAK,CAACU,KAA9B,CAAqC,CACjC,KAAMH,CAAAA,KAAK,CACP,qDADO,CAAX,CAGH,CACD,GAAIP,KAAK,CAACS,QAAN,EAAkB,CAACT,KAAK,CAACW,MAA7B,CAAqC,CACjC,KAAMJ,CAAAA,KAAK,CACP,oDADO,CAAX,CAGH,CACJ,CACJ,CAzBD,CAyBG,CAACP,KAAD,CAzBH,EA0BH","sourcesContent":["import React from 'react';\nimport type { TCarouselProps } from 'src/types';\n\nexport function usePropsErrorBoundary(props: TCarouselProps) {\n React.useEffect(() => {\n const { defaultIndex, data } = props;\n\n const viewCount = data.length;\n if (typeof defaultIndex === 'number' && viewCount > 0) {\n if (defaultIndex < 0 || defaultIndex >= viewCount) {\n throw Error(\n 'DefaultIndex must be in the range of data length.'\n );\n }\n }\n\n // TODO\n if (!props.mode || props.mode === 'parallax') {\n if (!props.vertical && !props.width) {\n throw Error(\n '`width` must be specified for horizontal carousels.'\n );\n }\n if (props.vertical && !props.height) {\n throw Error(\n '`height` must be specified for vertical carousels.'\n );\n }\n }\n }, [props]);\n}\n"]}
@@ -62,6 +62,10 @@ const IScrollViewGesture = props => {
62
62
  const velocity = scrollEndVelocity.value;
63
63
 
64
64
  if (!pagingEnabled) {
65
+ /**
66
+ * If enabled, releasing the touch will scroll to the nearest item.
67
+ * valid when pagingEnabled=false
68
+ */
65
69
  if (snapEnabled) {
66
70
  const nextPage = Math.round((origin + velocity * 0.4) / size) * size;
67
71
  translation.value = _withSpring(nextPage, onFinished);
@@ -75,16 +79,17 @@ const IScrollViewGesture = props => {
75
79
  return;
76
80
  }
77
81
 
78
- const page = Math.round(-translation.value / size);
79
- const velocityPage = Math.round(-(translation.value + scrollEndVelocity.value) / size);
80
- let finalPage = Math.min(page + 1, Math.max(page - 1, velocityPage));
82
+ const direction = -scrollEndTranslation.value / Math.abs(scrollEndTranslation.value);
83
+ const computed = direction < 0 ? Math.ceil : Math.floor;
84
+ const page = computed(-translation.value / size);
85
+ let finalPage = page + direction;
81
86
 
82
87
  if (!infinite) {
83
88
  finalPage = Math.min(maxPage - 1, Math.max(0, finalPage));
84
89
  }
85
90
 
86
91
  translation.value = _withSpring(-finalPage * size, onFinished);
87
- }, [infinite, _withSpring, translation, scrollEndVelocity, size, maxPage, pagingEnabled, snapEnabled]);
92
+ }, [translation, scrollEndVelocity.value, pagingEnabled, size, scrollEndTranslation.value, infinite, _withSpring, snapEnabled, maxPage]);
88
93
  const onFinish = React.useCallback(isFinished => {
89
94
  'worklet';
90
95
 
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["React","StyleSheet","PanGestureHandler","Animated","cancelAnimation","runOnJS","useAnimatedGestureHandler","useAnimatedReaction","useDerivedValue","useSharedValue","withDecay","Easing","CTX","dealWithAnimation","IScrollViewGesture","props","vertical","data","pagingEnabled","snapEnabled","panGestureHandlerProps","loop","infinite","scrollAnimationDuration","withAnimation","enabled","useContext","translation","size","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","length","isHorizontal","touching","scrollEndTranslation","scrollEndVelocity","_withSpring","useCallback","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","easeOutQuart","isFinished","endWithSpring","origin","value","velocity","nextPage","Math","round","deceleration","page","velocityPage","finalPage","min","max","onFinish","activeDecay","resetBoundary","panGestureEventHandler","onStart","_","ctx","validStart","panOffset","onActive","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","onEnd","velocityX","velocityY","directionStyle","useMemo","styles","contentHorizontal","contentVertical","container","width","height","children","ScrollViewGesture","create","flex","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, ViewStyle } from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from 'react-native-reanimated';\nimport { Easing } from './constants';\nimport { CTX } from './store';\nimport type { WithTimingAnimation } from './types';\nimport { dealWithAnimation } from './utils/dealWithAnimation';\n\ntype GestureContext = {\n validStart: boolean;\n panOffset: number;\n max: number;\n};\n\ninterface Props {\n size: number;\n infinite?: boolean;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n onTouchBegin?: () => void;\n onTouchEnd?: () => void;\n style?: StyleProp<ViewStyle>;\n translation: Animated.SharedValue<number>;\n}\n\nconst IScrollViewGesture: React.FC<Props> = (props) => {\n const {\n props: {\n vertical,\n data,\n pagingEnabled,\n snapEnabled,\n panGestureHandlerProps,\n loop: infinite,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n },\n } = React.useContext(CTX);\n\n const {\n translation,\n size,\n onScrollBegin,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = data.length;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const touching = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n\n const _withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n onFinished && runOnJS(onFinished)();\n }\n }\n );\n },\n [scrollAnimationDuration, withAnimation]\n );\n\n const endWithSpring = React.useCallback(\n (onFinished?: () => void) => {\n 'worklet';\n const origin = translation.value;\n const velocity = scrollEndVelocity.value;\n if (!pagingEnabled) {\n if (snapEnabled) {\n const nextPage =\n Math.round((origin + velocity * 0.4) / size) * size;\n translation.value = _withSpring(nextPage, onFinished);\n return;\n }\n translation.value = withDecay({\n velocity,\n deceleration: 0.999,\n });\n return;\n }\n const page = Math.round(-translation.value / size);\n const velocityPage = Math.round(\n -(translation.value + scrollEndVelocity.value) / size\n );\n let finalPage = Math.min(\n page + 1,\n Math.max(page - 1, velocityPage)\n );\n if (!infinite) {\n finalPage = Math.min(maxPage - 1, Math.max(0, finalPage));\n }\n\n translation.value = _withSpring(-finalPage * size, onFinished);\n },\n [\n infinite,\n _withSpring,\n translation,\n scrollEndVelocity,\n size,\n maxPage,\n pagingEnabled,\n snapEnabled,\n ]\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching]\n );\n\n const activeDecay = React.useCallback(() => {\n 'worklet';\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n (isFinished) => onFinish(isFinished as boolean)\n );\n }, [onFinish, scrollEndVelocity.value, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n 'worklet';\n if (touching.value) {\n return;\n }\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(-((maxPage - 1) * size));\n return;\n }\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n infinite,\n activeDecay,\n _withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled) {\n resetBoundary();\n }\n },\n [pagingEnabled, resetBoundary]\n );\n\n const panGestureEventHandler = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n GestureContext\n >(\n {\n onStart: (_, ctx) => {\n touching.value = true;\n ctx.validStart = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n ctx.max = (maxPage - 1) * size;\n ctx.panOffset = translation.value;\n },\n onActive: (e, ctx) => {\n if (ctx.validStart) {\n ctx.validStart = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (\n !infinite &&\n (translation.value > 0 || translation.value < -ctx.max)\n ) {\n const boundary = translation.value > 0 ? 0 : -ctx.max;\n const fixed = boundary - ctx.panOffset;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n\n translation.value = ctx.panOffset + panTranslation;\n },\n onEnd: (e) => {\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n scrollEndTranslation.value = isHorizontal.value\n ? translationX\n : translationY;\n\n endWithSpring(onScrollEnd);\n\n if (!infinite) {\n touching.value = false;\n }\n },\n },\n [\n pagingEnabled,\n isHorizontal.value,\n infinite,\n maxPage,\n size,\n snapEnabled,\n onScrollBegin,\n onScrollEnd,\n ]\n );\n\n const directionStyle = React.useMemo(() => {\n return vertical ? styles.contentHorizontal : styles.contentVertical;\n }, [vertical]);\n\n return (\n <Animated.View\n style={[\n styles.container,\n directionStyle,\n { width: '100%', height: '100%' },\n ]}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n <PanGestureHandler\n {...panGestureHandlerProps}\n enabled={enabled}\n onGestureEvent={panGestureEventHandler}\n >\n {props.children}\n </PanGestureHandler>\n </Animated.View>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n overflow: 'hidden',\n },\n contentVertical: {\n flexDirection: 'column',\n },\n contentHorizontal: {\n flexDirection: 'row',\n },\n});\n"]}
1
+ {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["React","StyleSheet","PanGestureHandler","Animated","cancelAnimation","runOnJS","useAnimatedGestureHandler","useAnimatedReaction","useDerivedValue","useSharedValue","withDecay","Easing","CTX","dealWithAnimation","IScrollViewGesture","props","vertical","data","pagingEnabled","snapEnabled","panGestureHandlerProps","loop","infinite","scrollAnimationDuration","withAnimation","enabled","useContext","translation","size","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","length","isHorizontal","touching","scrollEndTranslation","scrollEndVelocity","_withSpring","useCallback","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","easeOutQuart","isFinished","endWithSpring","origin","value","velocity","nextPage","Math","round","deceleration","direction","abs","computed","ceil","floor","page","finalPage","min","max","onFinish","activeDecay","resetBoundary","panGestureEventHandler","onStart","_","ctx","validStart","panOffset","onActive","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","onEnd","velocityX","velocityY","directionStyle","useMemo","styles","contentHorizontal","contentVertical","container","width","height","children","ScrollViewGesture","create","flex","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleProp, StyleSheet, ViewStyle } from 'react-native';\nimport {\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from 'react-native-reanimated';\nimport { Easing } from './constants';\nimport { CTX } from './store';\nimport type { WithTimingAnimation } from './types';\nimport { dealWithAnimation } from './utils/dealWithAnimation';\n\ntype GestureContext = {\n validStart: boolean;\n panOffset: number;\n max: number;\n};\n\ninterface Props {\n size: number;\n infinite?: boolean;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n onTouchBegin?: () => void;\n onTouchEnd?: () => void;\n style?: StyleProp<ViewStyle>;\n translation: Animated.SharedValue<number>;\n}\n\nconst IScrollViewGesture: React.FC<Props> = (props) => {\n const {\n props: {\n vertical,\n data,\n pagingEnabled,\n snapEnabled,\n panGestureHandlerProps,\n loop: infinite,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n },\n } = React.useContext(CTX);\n\n const {\n translation,\n size,\n onScrollBegin,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = data.length;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const touching = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n\n const _withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n onFinished && runOnJS(onFinished)();\n }\n }\n );\n },\n [scrollAnimationDuration, withAnimation]\n );\n\n const endWithSpring = React.useCallback(\n (onFinished?: () => void) => {\n 'worklet';\n const origin = translation.value;\n const velocity = scrollEndVelocity.value;\n if (!pagingEnabled) {\n /**\n * If enabled, releasing the touch will scroll to the nearest item.\n * valid when pagingEnabled=false\n */\n if (snapEnabled) {\n const nextPage =\n Math.round((origin + velocity * 0.4) / size) * size;\n\n translation.value = _withSpring(nextPage, onFinished);\n return;\n }\n translation.value = withDecay({\n velocity,\n deceleration: 0.999,\n });\n return;\n }\n\n const direction =\n -scrollEndTranslation.value /\n Math.abs(scrollEndTranslation.value);\n const computed = direction < 0 ? Math.ceil : Math.floor;\n const page = computed(-translation.value / size);\n let finalPage = page + direction;\n\n if (!infinite) {\n finalPage = Math.min(maxPage - 1, Math.max(0, finalPage));\n }\n\n translation.value = _withSpring(-finalPage * size, onFinished);\n },\n [\n translation,\n scrollEndVelocity.value,\n pagingEnabled,\n size,\n scrollEndTranslation.value,\n infinite,\n _withSpring,\n snapEnabled,\n maxPage,\n ]\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching]\n );\n\n const activeDecay = React.useCallback(() => {\n 'worklet';\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n (isFinished) => onFinish(isFinished as boolean)\n );\n }, [onFinish, scrollEndVelocity.value, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n 'worklet';\n if (touching.value) {\n return;\n }\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = _withSpring(-((maxPage - 1) * size));\n return;\n }\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n infinite,\n activeDecay,\n _withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled) {\n resetBoundary();\n }\n },\n [pagingEnabled, resetBoundary]\n );\n\n const panGestureEventHandler = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n GestureContext\n >(\n {\n onStart: (_, ctx) => {\n touching.value = true;\n ctx.validStart = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n ctx.max = (maxPage - 1) * size;\n ctx.panOffset = translation.value;\n },\n onActive: (e, ctx) => {\n if (ctx.validStart) {\n ctx.validStart = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (\n !infinite &&\n (translation.value > 0 || translation.value < -ctx.max)\n ) {\n const boundary = translation.value > 0 ? 0 : -ctx.max;\n const fixed = boundary - ctx.panOffset;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n\n translation.value = ctx.panOffset + panTranslation;\n },\n onEnd: (e) => {\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n scrollEndTranslation.value = isHorizontal.value\n ? translationX\n : translationY;\n\n endWithSpring(onScrollEnd);\n\n if (!infinite) {\n touching.value = false;\n }\n },\n },\n [\n pagingEnabled,\n isHorizontal.value,\n infinite,\n maxPage,\n size,\n snapEnabled,\n onScrollBegin,\n onScrollEnd,\n ]\n );\n\n const directionStyle = React.useMemo(() => {\n return vertical ? styles.contentHorizontal : styles.contentVertical;\n }, [vertical]);\n\n return (\n <Animated.View\n style={[\n styles.container,\n directionStyle,\n { width: '100%', height: '100%' },\n ]}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n <PanGestureHandler\n {...panGestureHandlerProps}\n enabled={enabled}\n onGestureEvent={panGestureEventHandler}\n >\n {props.children}\n </PanGestureHandler>\n </Animated.View>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n overflow: 'hidden',\n },\n contentVertical: {\n flexDirection: 'column',\n },\n contentHorizontal: {\n flexDirection: 'row',\n },\n});\n"]}
@@ -16,7 +16,7 @@ export function usePropsErrorBoundary(props) {
16
16
 
17
17
  if (!props.mode || props.mode === 'parallax') {
18
18
  if (!props.vertical && !props.width) {
19
- throw Error('`width` must be specified for vertical carousels.');
19
+ throw Error('`width` must be specified for horizontal carousels.');
20
20
  }
21
21
 
22
22
  if (props.vertical && !props.height) {
@@ -1 +1 @@
1
- {"version":3,"sources":["usePropsErrorBoundary.ts"],"names":["React","usePropsErrorBoundary","props","useEffect","defaultIndex","data","viewCount","length","Error","mode","vertical","width","height"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAGA,OAAO,SAASC,qBAAT,CAA+BC,KAA/B,EAAsD;AACzDF,EAAAA,KAAK,CAACG,SAAN,CAAgB,MAAM;AAClB,UAAM;AAAEC,MAAAA,YAAF;AAAgBC,MAAAA;AAAhB,QAAyBH,KAA/B;AAEA,UAAMI,SAAS,GAAGD,IAAI,CAACE,MAAvB;;AACA,QAAI,OAAOH,YAAP,KAAwB,QAAxB,IAAoCE,SAAS,GAAG,CAApD,EAAuD;AACnD,UAAIF,YAAY,GAAG,CAAf,IAAoBA,YAAY,IAAIE,SAAxC,EAAmD;AAC/C,cAAME,KAAK,CACP,mDADO,CAAX;AAGH;AACJ,KAViB,CAYlB;;;AACA,QAAI,CAACN,KAAK,CAACO,IAAP,IAAeP,KAAK,CAACO,IAAN,KAAe,UAAlC,EAA8C;AAC1C,UAAI,CAACP,KAAK,CAACQ,QAAP,IAAmB,CAACR,KAAK,CAACS,KAA9B,EAAqC;AACjC,cAAMH,KAAK,CACP,mDADO,CAAX;AAGH;;AACD,UAAIN,KAAK,CAACQ,QAAN,IAAkB,CAACR,KAAK,CAACU,MAA7B,EAAqC;AACjC,cAAMJ,KAAK,CACP,oDADO,CAAX;AAGH;AACJ;AACJ,GAzBD,EAyBG,CAACN,KAAD,CAzBH;AA0BH","sourcesContent":["import React from 'react';\nimport type { TCarouselProps } from 'src/types';\n\nexport function usePropsErrorBoundary(props: TCarouselProps) {\n React.useEffect(() => {\n const { defaultIndex, data } = props;\n\n const viewCount = data.length;\n if (typeof defaultIndex === 'number' && viewCount > 0) {\n if (defaultIndex < 0 || defaultIndex >= viewCount) {\n throw Error(\n 'DefaultIndex must be in the range of data length.'\n );\n }\n }\n\n // TODO\n if (!props.mode || props.mode === 'parallax') {\n if (!props.vertical && !props.width) {\n throw Error(\n '`width` must be specified for vertical carousels.'\n );\n }\n if (props.vertical && !props.height) {\n throw Error(\n '`height` must be specified for vertical carousels.'\n );\n }\n }\n }, [props]);\n}\n"]}
1
+ {"version":3,"sources":["usePropsErrorBoundary.ts"],"names":["React","usePropsErrorBoundary","props","useEffect","defaultIndex","data","viewCount","length","Error","mode","vertical","width","height"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAGA,OAAO,SAASC,qBAAT,CAA+BC,KAA/B,EAAsD;AACzDF,EAAAA,KAAK,CAACG,SAAN,CAAgB,MAAM;AAClB,UAAM;AAAEC,MAAAA,YAAF;AAAgBC,MAAAA;AAAhB,QAAyBH,KAA/B;AAEA,UAAMI,SAAS,GAAGD,IAAI,CAACE,MAAvB;;AACA,QAAI,OAAOH,YAAP,KAAwB,QAAxB,IAAoCE,SAAS,GAAG,CAApD,EAAuD;AACnD,UAAIF,YAAY,GAAG,CAAf,IAAoBA,YAAY,IAAIE,SAAxC,EAAmD;AAC/C,cAAME,KAAK,CACP,mDADO,CAAX;AAGH;AACJ,KAViB,CAYlB;;;AACA,QAAI,CAACN,KAAK,CAACO,IAAP,IAAeP,KAAK,CAACO,IAAN,KAAe,UAAlC,EAA8C;AAC1C,UAAI,CAACP,KAAK,CAACQ,QAAP,IAAmB,CAACR,KAAK,CAACS,KAA9B,EAAqC;AACjC,cAAMH,KAAK,CACP,qDADO,CAAX;AAGH;;AACD,UAAIN,KAAK,CAACQ,QAAN,IAAkB,CAACR,KAAK,CAACU,MAA7B,EAAqC;AACjC,cAAMJ,KAAK,CACP,oDADO,CAAX;AAGH;AACJ;AACJ,GAzBD,EAyBG,CAACN,KAAD,CAzBH;AA0BH","sourcesContent":["import React from 'react';\nimport type { TCarouselProps } from 'src/types';\n\nexport function usePropsErrorBoundary(props: TCarouselProps) {\n React.useEffect(() => {\n const { defaultIndex, data } = props;\n\n const viewCount = data.length;\n if (typeof defaultIndex === 'number' && viewCount > 0) {\n if (defaultIndex < 0 || defaultIndex >= viewCount) {\n throw Error(\n 'DefaultIndex must be in the range of data length.'\n );\n }\n }\n\n // TODO\n if (!props.mode || props.mode === 'parallax') {\n if (!props.vertical && !props.width) {\n throw Error(\n '`width` must be specified for horizontal carousels.'\n );\n }\n if (props.vertical && !props.height) {\n throw Error(\n '`height` must be specified for vertical carousels.'\n );\n }\n }\n }, [props]);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-reanimated-carousel",
3
- "version": "3.0.0",
3
+ "version": "3.0.1",
4
4
  "description": "Simple carousel component.fully implemented using Reanimated 2.Infinitely scrolling, very smooth.",
5
5
  "main": "lib/commonjs/index",
6
6
  "types": "lib/typescript/index.d.ts",
@@ -28,15 +28,15 @@
28
28
  "prepare": "bob build",
29
29
  "release": "yarn prepare && release-it --no-git.requireUpstream",
30
30
  "preRelease": "yarn prepare && release-it --no-git.requireUpstream --preRelease=beta",
31
- "ios": "yarn --cwd example ios",
32
- "ios:pretty": "yarn --cwd example ios:pretty",
33
- "web": "yarn --cwd example web",
34
- "web:pretty": "yarn --cwd example web:pretty",
35
- "android": "yarn --cwd example android",
36
- "android:pretty": "yarn --cwd example android:pretty",
37
- "pods": "cd example && pod-install --quiet",
31
+ "ios": "yarn --cwd exampleExpo ios",
32
+ "ios:pretty": "yarn --cwd exampleExpo ios:pretty",
33
+ "web": "yarn --cwd exampleExpo web",
34
+ "web:pretty": "yarn --cwd exampleExpo web:pretty",
35
+ "android": "yarn --cwd exampleExpo android",
36
+ "android:pretty": "yarn --cwd exampleExpo android:pretty",
37
+ "pods": "cd exampleExpo && pod-install --quiet",
38
38
  "bootstrap": "yarn && yarn pods",
39
- "deploy": "cd example && yarn deploy"
39
+ "deploy": "cd exampleExpo && yarn deploy"
40
40
  },
41
41
  "keywords": [
42
42
  "react-native",
@@ -92,7 +92,8 @@
92
92
  "jest": {
93
93
  "preset": "react-native",
94
94
  "modulePathIgnorePatterns": [
95
- "<rootDir>/example/node_modules",
95
+ "<rootDir>/exampleExpo/node_modules",
96
+ "<rootDir>/exampleBare/node_modules",
96
97
  "<rootDir>/lib/"
97
98
  ]
98
99
  },
@@ -95,9 +95,14 @@ const IScrollViewGesture: React.FC<Props> = (props) => {
95
95
  const origin = translation.value;
96
96
  const velocity = scrollEndVelocity.value;
97
97
  if (!pagingEnabled) {
98
+ /**
99
+ * If enabled, releasing the touch will scroll to the nearest item.
100
+ * valid when pagingEnabled=false
101
+ */
98
102
  if (snapEnabled) {
99
103
  const nextPage =
100
104
  Math.round((origin + velocity * 0.4) / size) * size;
105
+
101
106
  translation.value = _withSpring(nextPage, onFinished);
102
107
  return;
103
108
  }
@@ -107,14 +112,14 @@ const IScrollViewGesture: React.FC<Props> = (props) => {
107
112
  });
108
113
  return;
109
114
  }
110
- const page = Math.round(-translation.value / size);
111
- const velocityPage = Math.round(
112
- -(translation.value + scrollEndVelocity.value) / size
113
- );
114
- let finalPage = Math.min(
115
- page + 1,
116
- Math.max(page - 1, velocityPage)
117
- );
115
+
116
+ const direction =
117
+ -scrollEndTranslation.value /
118
+ Math.abs(scrollEndTranslation.value);
119
+ const computed = direction < 0 ? Math.ceil : Math.floor;
120
+ const page = computed(-translation.value / size);
121
+ let finalPage = page + direction;
122
+
118
123
  if (!infinite) {
119
124
  finalPage = Math.min(maxPage - 1, Math.max(0, finalPage));
120
125
  }
@@ -122,14 +127,15 @@ const IScrollViewGesture: React.FC<Props> = (props) => {
122
127
  translation.value = _withSpring(-finalPage * size, onFinished);
123
128
  },
124
129
  [
125
- infinite,
126
- _withSpring,
127
130
  translation,
128
- scrollEndVelocity,
129
- size,
130
- maxPage,
131
+ scrollEndVelocity.value,
131
132
  pagingEnabled,
133
+ size,
134
+ scrollEndTranslation.value,
135
+ infinite,
136
+ _withSpring,
132
137
  snapEnabled,
138
+ maxPage,
133
139
  ]
134
140
  );
135
141
 
@@ -18,7 +18,7 @@ export function usePropsErrorBoundary(props: TCarouselProps) {
18
18
  if (!props.mode || props.mode === 'parallax') {
19
19
  if (!props.vertical && !props.width) {
20
20
  throw Error(
21
- '`width` must be specified for vertical carousels.'
21
+ '`width` must be specified for horizontal carousels.'
22
22
  );
23
23
  }
24
24
  if (props.vertical && !props.height) {