react-native-reanimated-carousel 2.2.2 → 2.2.5-beta.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.
Files changed (78) hide show
  1. package/README.md +1 -1
  2. package/README.zh-CN.md +1 -1
  3. package/lib/commonjs/Carousel.js +1 -221
  4. package/lib/commonjs/Carousel.js.map +1 -1
  5. package/lib/commonjs/LazyView.js +1 -25
  6. package/lib/commonjs/LazyView.js.map +1 -1
  7. package/lib/commonjs/ScrollViewGesture.js +1 -217
  8. package/lib/commonjs/ScrollViewGesture.js.map +1 -1
  9. package/lib/commonjs/constants/index.js +1 -21
  10. package/lib/commonjs/constants/index.js.map +1 -1
  11. package/lib/commonjs/hooks/useAutoPlay.js +1 -61
  12. package/lib/commonjs/hooks/useAutoPlay.js.map +1 -1
  13. package/lib/commonjs/hooks/useCarouselController.js +1 -194
  14. package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
  15. package/lib/commonjs/hooks/useCommonVariables.js +1 -36
  16. package/lib/commonjs/hooks/useCommonVariables.js.map +1 -1
  17. package/lib/commonjs/hooks/useInitProps.js +1 -70
  18. package/lib/commonjs/hooks/useInitProps.js.map +1 -1
  19. package/lib/commonjs/hooks/useLayoutConfig.js +1 -39
  20. package/lib/commonjs/hooks/useLayoutConfig.js.map +1 -1
  21. package/lib/commonjs/hooks/useOffsetX.js +1 -54
  22. package/lib/commonjs/hooks/useOffsetX.js.map +1 -1
  23. package/lib/commonjs/hooks/useOnProgressChange.js +1 -38
  24. package/lib/commonjs/hooks/useOnProgressChange.js.map +1 -1
  25. package/lib/commonjs/hooks/usePropsErrorBoundary.js +1 -37
  26. package/lib/commonjs/hooks/usePropsErrorBoundary.js.map +1 -1
  27. package/lib/commonjs/hooks/useVisibleRanges.js +1 -42
  28. package/lib/commonjs/hooks/useVisibleRanges.js.map +1 -1
  29. package/lib/commonjs/index.js +1 -13
  30. package/lib/commonjs/index.js.map +1 -1
  31. package/lib/commonjs/layouts/BaseLayout.js +1 -100
  32. package/lib/commonjs/layouts/BaseLayout.js.map +1 -1
  33. package/lib/commonjs/layouts/ParallaxLayout.js +1 -82
  34. package/lib/commonjs/layouts/ParallaxLayout.js.map +1 -1
  35. package/lib/commonjs/layouts/index.js +1 -20
  36. package/lib/commonjs/layouts/index.js.map +1 -1
  37. package/lib/commonjs/layouts/normal.js +1 -27
  38. package/lib/commonjs/layouts/normal.js.map +1 -1
  39. package/lib/commonjs/layouts/parallax.js +1 -36
  40. package/lib/commonjs/layouts/parallax.js.map +1 -1
  41. package/lib/commonjs/layouts/stack.js +1 -219
  42. package/lib/commonjs/layouts/stack.js.map +1 -1
  43. package/lib/commonjs/store/index.js +1 -14
  44. package/lib/commonjs/store/index.js.map +1 -1
  45. package/lib/commonjs/types.js +1 -5
  46. package/lib/commonjs/utils/dealWithAnimation.js +2 -0
  47. package/lib/commonjs/utils/dealWithAnimation.js.map +1 -0
  48. package/lib/commonjs/utils/log.js +1 -14
  49. package/lib/commonjs/utils/log.js.map +1 -1
  50. package/lib/module/Carousel.js +14 -10
  51. package/lib/module/Carousel.js.map +1 -1
  52. package/lib/module/ScrollViewGesture.js +46 -29
  53. package/lib/module/ScrollViewGesture.js.map +1 -1
  54. package/lib/module/hooks/useAutoPlay.js +5 -1
  55. package/lib/module/hooks/useAutoPlay.js.map +1 -1
  56. package/lib/module/hooks/useCarouselController.js +21 -7
  57. package/lib/module/hooks/useCarouselController.js.map +1 -1
  58. package/lib/module/layouts/BaseLayout.js +2 -1
  59. package/lib/module/layouts/BaseLayout.js.map +1 -1
  60. package/lib/module/layouts/stack.js.map +1 -1
  61. package/lib/module/utils/dealWithAnimation.js +17 -0
  62. package/lib/module/utils/dealWithAnimation.js.map +1 -0
  63. package/lib/typescript/Carousel.d.ts +3 -4
  64. package/lib/typescript/ScrollViewGesture.d.ts +3 -1
  65. package/lib/typescript/hooks/useCarouselController.d.ts +2 -1
  66. package/lib/typescript/layouts/BaseLayout.d.ts +2 -2
  67. package/lib/typescript/layouts/stack.d.ts +1 -1
  68. package/lib/typescript/types.d.ts +14 -2
  69. package/lib/typescript/utils/dealWithAnimation.d.ts +2 -0
  70. package/package.json +12 -2
  71. package/src/Carousel.tsx +203 -188
  72. package/src/ScrollViewGesture.tsx +70 -33
  73. package/src/hooks/useAutoPlay.ts +4 -1
  74. package/src/hooks/useCarouselController.tsx +28 -12
  75. package/src/layouts/BaseLayout.tsx +3 -3
  76. package/src/layouts/stack.ts +1 -1
  77. package/src/types.ts +22 -4
  78. package/src/utils/dealWithAnimation.ts +22 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["IScrollViewGesture","props","vertical","style","data","pagingEnabled","enableSnap","panGestureHandlerProps","loop","infinite","scrollAnimationDuration","React","useContext","CTX","translation","onScrollBegin","onScrollEnd","size","maxPage","length","isHorizontal","touching","scrollEndTranslation","scrollEndVelocity","_withSpring","useCallback","toValue","onFinished","duration","easing","Easing","easeOutQuart","isFinished","endWithSpring","origin","value","velocity","nextPage","Math","round","deceleration","page","velocityPage","finalPage","min","max","resetBoundary","onFinish","activeDecay","panGestureEventHandler","onStart","_","ctx","panOffset","onActive","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","onEnd","velocityX","velocityY","directionStyle","useMemo","styles","contentHorizontal","contentVertical","container","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 withTiming,\n} from 'react-native-reanimated';\nimport { Easing } from './constants';\nimport { CTX } from './store';\n\ntype GestureContext = {\n panOffset: number;\n max: number;\n};\n\ninterface Props {\n size: number;\n infinite?: boolean;\n onScrollEnd?: () => void;\n onScrollBegin?: () => 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 style,\n data,\n pagingEnabled,\n enableSnap,\n panGestureHandlerProps,\n loop: infinite,\n scrollAnimationDuration,\n },\n } = React.useContext(CTX);\n\n const { translation, onScrollBegin, onScrollEnd, size } = 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 return withTiming(\n toValue,\n {\n duration: scrollAnimationDuration,\n easing: Easing.easeOutQuart,\n },\n (isFinished) => {\n if (isFinished) {\n onFinished?.();\n }\n }\n );\n },\n [scrollAnimationDuration]\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 (enableSnap) {\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 enableSnap,\n ]\n );\n\n const resetBoundary = React.useCallback(() => {\n 'worklet';\n const onFinish = (isFinished: boolean) => {\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n };\n const activeDecay = () => {\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n onFinish\n );\n };\n\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 infinite,\n touching,\n _withSpring,\n translation,\n scrollEndTranslation,\n scrollEndVelocity,\n onScrollEnd,\n maxPage,\n size,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled) {\n resetBoundary();\n }\n },\n [pagingEnabled]\n );\n\n const panGestureEventHandler = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n GestureContext\n >(\n {\n onStart: (_, ctx) => {\n touching.value = true;\n cancelAnimation(translation);\n onScrollBegin && runOnJS(onScrollBegin)();\n ctx.max = (maxPage - 1) * size;\n ctx.panOffset = translation.value;\n },\n onActive: (e, ctx) => {\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 && runOnJS(onScrollEnd)());\n\n if (!infinite) {\n touching.value = false;\n }\n },\n },\n [pagingEnabled, isHorizontal.value, infinite, maxPage, size, enableSnap]\n );\n\n const directionStyle = React.useMemo(() => {\n return vertical ? styles.contentHorizontal : styles.contentVertical;\n }, [vertical]);\n\n return (\n <Animated.View style={[styles.container, directionStyle, style]}>\n <PanGestureHandler\n {...panGestureHandlerProps}\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","style","data","pagingEnabled","enableSnap","panGestureHandlerProps","infinite","loop","scrollAnimationDuration","withAnimation","translation","size","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","length","isHorizontal","touching","scrollEndTranslation","scrollEndVelocity","_withSpring","useCallback","toValue","onFinished","callback","isFinished","runOnJS","defaultWithAnimation","type","config","duration","easing","Easing","easeOutQuart","dealWithAnimation","endWithSpring","origin","value","velocity","nextPage","Math","round","deceleration","page","velocityPage","finalPage","min","max","withDecay","onFinish","activeDecay","resetBoundary","panGestureEventHandler","onStart","_","ctx","panOffset","cancelAnimation","onActive","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","onEnd","velocityX","velocityY","directionStyle","useMemo","styles","contentHorizontal","contentVertical","container","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 { WithAnimation } from './types';\nimport { dealWithAnimation } from './utils/dealWithAnimation';\n\ntype GestureContext = {\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 style,\n data,\n pagingEnabled,\n enableSnap,\n panGestureHandlerProps,\n loop: infinite,\n scrollAnimationDuration,\n withAnimation,\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 callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithAnimation = {\n type: 'timing',\n config: {\n duration: scrollAnimationDuration,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\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 (enableSnap) {\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 enableSnap,\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 cancelAnimation(translation);\n onScrollBegin && runOnJS(onScrollBegin)();\n ctx.max = (maxPage - 1) * size;\n ctx.panOffset = translation.value;\n },\n onActive: (e, ctx) => {\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 && runOnJS(onScrollEnd)());\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 enableSnap,\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={[styles.container, directionStyle, style]}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n <PanGestureHandler\n {...panGestureHandlerProps}\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,22 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Easing = exports.DATA_LENGTH = void 0;
7
-
8
- var _reactNativeReanimated = require("react-native-reanimated");
9
-
10
- let DATA_LENGTH;
11
- exports.DATA_LENGTH = DATA_LENGTH;
12
-
13
- (function (DATA_LENGTH) {
14
- DATA_LENGTH[DATA_LENGTH["SINGLE_ITEM"] = 1] = "SINGLE_ITEM";
15
- DATA_LENGTH[DATA_LENGTH["DOUBLE_ITEM"] = 2] = "DOUBLE_ITEM";
16
- })(DATA_LENGTH || (exports.DATA_LENGTH = DATA_LENGTH = {}));
17
-
18
- const Easing = {
19
- easeOutQuart: _reactNativeReanimated.Easing.bezier(0.25, 1, 0.5, 1)
20
- };
21
- exports.Easing = Easing;
1
+ Object.defineProperty(exports,"__esModule",{value:true});exports.Easing=exports.DATA_LENGTH=void 0;var _reactNativeReanimated=require("react-native-reanimated");var DATA_LENGTH;exports.DATA_LENGTH=DATA_LENGTH;(function(DATA_LENGTH){DATA_LENGTH[DATA_LENGTH["SINGLE_ITEM"]=1]="SINGLE_ITEM";DATA_LENGTH[DATA_LENGTH["DOUBLE_ITEM"]=2]="DOUBLE_ITEM";})(DATA_LENGTH||(exports.DATA_LENGTH=DATA_LENGTH={}));var Easing={easeOutQuart:_reactNativeReanimated.Easing.bezier(0.25,1,0.5,1)};exports.Easing=Easing;
22
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["DATA_LENGTH","Easing","easeOutQuart","_Easing","bezier"],"mappings":";;;;;;;AAAA;;IAEYA,W;;;WAAAA,W;AAAAA,EAAAA,W,CAAAA,W;AAAAA,EAAAA,W,CAAAA,W;GAAAA,W,2BAAAA,W;;AAKL,MAAMC,MAAM,GAAG;AAClBC,EAAAA,YAAY,EAAEC,8BAAQC,MAAR,CAAe,IAAf,EAAqB,CAArB,EAAwB,GAAxB,EAA6B,CAA7B;AADI,CAAf","sourcesContent":["import { Easing as _Easing } from 'react-native-reanimated';\n\nexport enum DATA_LENGTH {\n SINGLE_ITEM = 1,\n DOUBLE_ITEM = 2,\n}\n\nexport const Easing = {\n easeOutQuart: _Easing.bezier(0.25, 1, 0.5, 1),\n};\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":["DATA_LENGTH","Easing","easeOutQuart","_Easing","bezier"],"mappings":"mGAAA,8D,GAEYA,CAAAA,W,2CAAAA,W,EAAAA,W,CAAAA,W,iCAAAA,W,CAAAA,W,oCAAAA,W,uBAAAA,W,MAKL,GAAMC,CAAAA,MAAM,CAAG,CAClBC,YAAY,CAAEC,8BAAQC,MAAR,CAAe,IAAf,CAAqB,CAArB,CAAwB,GAAxB,CAA6B,CAA7B,CADI,CAAf,C","sourcesContent":["import { Easing as _Easing } from 'react-native-reanimated';\n\nexport enum DATA_LENGTH {\n SINGLE_ITEM = 1,\n DOUBLE_ITEM = 2,\n}\n\nexport const Easing = {\n easeOutQuart: _Easing.bezier(0.25, 1, 0.5, 1),\n};\n"]}
@@ -1,62 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useAutoPlay = useAutoPlay;
7
-
8
- var React = _interopRequireWildcard(require("react"));
9
-
10
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
-
12
- 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; }
13
-
14
- function useAutoPlay(opts) {
15
- const {
16
- autoPlay = false,
17
- autoPlayReverse = false,
18
- autoPlayInterval,
19
- carouselController
20
- } = opts;
21
- const timer = React.useRef();
22
- const stopped = React.useRef(!autoPlay);
23
- const play = React.useCallback(() => {
24
- if (stopped.current) {
25
- return;
26
- }
27
-
28
- timer.current = setTimeout(() => {
29
- autoPlayReverse ? carouselController.prev({
30
- onFinished: play
31
- }) : carouselController.next({
32
- onFinished: play
33
- });
34
- }, autoPlayInterval);
35
- }, [autoPlayReverse, autoPlayInterval, carouselController]);
36
- const pause = React.useCallback(() => {
37
- timer.current && clearInterval(timer.current);
38
- stopped.current = true;
39
- }, []);
40
- const start = React.useCallback(() => {
41
- if (!autoPlay) {
42
- return;
43
- }
44
-
45
- stopped.current = false;
46
- play();
47
- }, [play, autoPlay]);
48
- React.useEffect(() => {
49
- if (autoPlay) {
50
- start();
51
- } else {
52
- pause();
53
- }
54
-
55
- return pause;
56
- }, [pause, start, autoPlay]);
57
- return {
58
- pause,
59
- start
60
- };
61
- }
1
+ Object.defineProperty(exports,"__esModule",{value:true});exports.useAutoPlay=useAutoPlay;var React=_interopRequireWildcard(require("react"));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 useAutoPlay(opts){var _opts$autoPlay=opts.autoPlay,autoPlay=_opts$autoPlay===void 0?false:_opts$autoPlay,_opts$autoPlayReverse=opts.autoPlayReverse,autoPlayReverse=_opts$autoPlayReverse===void 0?false:_opts$autoPlayReverse,autoPlayInterval=opts.autoPlayInterval,carouselController=opts.carouselController;var timer=React.useRef();var stopped=React.useRef(!autoPlay);var play=React.useCallback(function(){if(stopped.current){return;}timer.current=setTimeout(function(){autoPlayReverse?carouselController.prev({onFinished:play}):carouselController.next({onFinished:play});},autoPlayInterval);},[autoPlayReverse,autoPlayInterval,carouselController]);var pause=React.useCallback(function(){if(!autoPlay){return;}timer.current&&clearInterval(timer.current);stopped.current=true;},[autoPlay]);var start=React.useCallback(function(){if(!autoPlay){return;}stopped.current=false;play();},[play,autoPlay]);React.useEffect(function(){if(autoPlay){start();}else{pause();}return pause;},[pause,start,autoPlay]);return{pause:pause,start:start};}
62
2
  //# sourceMappingURL=useAutoPlay.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["useAutoPlay.ts"],"names":["useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","timer","React","useRef","stopped","play","useCallback","current","setTimeout","prev","onFinished","next","pause","clearInterval","start","useEffect"],"mappings":";;;;;;;AAAA;;;;;;AAGO,SAASA,WAAT,CAAqBC,IAArB,EAKJ;AACC,QAAM;AACFC,IAAAA,QAAQ,GAAG,KADT;AAEFC,IAAAA,eAAe,GAAG,KAFhB;AAGFC,IAAAA,gBAHE;AAIFC,IAAAA;AAJE,MAKFJ,IALJ;AAOA,QAAMK,KAAK,GAAGC,KAAK,CAACC,MAAN,EAAd;AACA,QAAMC,OAAO,GAAGF,KAAK,CAACC,MAAN,CAAsB,CAACN,QAAvB,CAAhB;AAEA,QAAMQ,IAAI,GAAGH,KAAK,CAACI,WAAN,CAAkB,MAAM;AACjC,QAAIF,OAAO,CAACG,OAAZ,EAAqB;AACjB;AACH;;AAEDN,IAAAA,KAAK,CAACM,OAAN,GAAgBC,UAAU,CAAC,MAAM;AAC7BV,MAAAA,eAAe,GACTE,kBAAkB,CAACS,IAAnB,CAAwB;AAAEC,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CADS,GAETL,kBAAkB,CAACW,IAAnB,CAAwB;AAAED,QAAAA,UAAU,EAAEL;AAAd,OAAxB,CAFN;AAGH,KAJyB,EAIvBN,gBAJuB,CAA1B;AAKH,GAVY,EAUV,CAACD,eAAD,EAAkBC,gBAAlB,EAAoCC,kBAApC,CAVU,CAAb;AAYA,QAAMY,KAAK,GAAGV,KAAK,CAACI,WAAN,CAAkB,MAAM;AAClCL,IAAAA,KAAK,CAACM,OAAN,IAAiBM,aAAa,CAACZ,KAAK,CAACM,OAAP,CAA9B;AACAH,IAAAA,OAAO,CAACG,OAAR,GAAkB,IAAlB;AACH,GAHa,EAGX,EAHW,CAAd;AAKA,QAAMO,KAAK,GAAGZ,KAAK,CAACI,WAAN,CAAkB,MAAM;AAClC,QAAI,CAACT,QAAL,EAAe;AACX;AACH;;AACDO,IAAAA,OAAO,CAACG,OAAR,GAAkB,KAAlB;AACAF,IAAAA,IAAI;AACP,GANa,EAMX,CAACA,IAAD,EAAOR,QAAP,CANW,CAAd;AAQAK,EAAAA,KAAK,CAACa,SAAN,CAAgB,MAAM;AAClB,QAAIlB,QAAJ,EAAc;AACViB,MAAAA,KAAK;AACR,KAFD,MAEO;AACHF,MAAAA,KAAK;AACR;;AACD,WAAOA,KAAP;AACH,GAPD,EAOG,CAACA,KAAD,EAAQE,KAAR,EAAejB,QAAf,CAPH;AASA,SAAO;AACHe,IAAAA,KADG;AAEHE,IAAAA;AAFG,GAAP;AAIH","sourcesContent":["import * as React from 'react';\nimport type { ICarouselController } from './useCarouselController';\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean;\n autoPlayInterval?: number;\n autoPlayReverse?: boolean;\n carouselController: ICarouselController;\n}) {\n const {\n autoPlay = false,\n autoPlayReverse = false,\n autoPlayInterval,\n carouselController,\n } = opts;\n\n const timer = React.useRef<NodeJS.Timer>();\n const stopped = React.useRef<boolean>(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current) {\n return;\n }\n\n timer.current = setTimeout(() => {\n autoPlayReverse\n ? carouselController.prev({ onFinished: play })\n : carouselController.next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, carouselController]);\n\n const pause = React.useCallback(() => {\n timer.current && clearInterval(timer.current);\n stopped.current = true;\n }, []);\n\n const start = React.useCallback(() => {\n if (!autoPlay) {\n return;\n }\n stopped.current = false;\n play();\n }, [play, autoPlay]);\n\n React.useEffect(() => {\n if (autoPlay) {\n start();\n } else {\n pause();\n }\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n"]}
1
+ {"version":3,"sources":["useAutoPlay.ts"],"names":["useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","timer","React","useRef","stopped","play","useCallback","current","setTimeout","prev","onFinished","next","pause","clearInterval","start","useEffect"],"mappings":"yFAAA,oD,0/BAGO,QAASA,CAAAA,WAAT,CAAqBC,IAArB,CAKJ,CACC,mBAKIA,IALJ,CACIC,QADJ,CACIA,QADJ,yBACe,KADf,sCAKID,IALJ,CAEIE,eAFJ,CAEIA,eAFJ,gCAEsB,KAFtB,uBAGIC,gBAHJ,CAKIH,IALJ,CAGIG,gBAHJ,CAIIC,kBAJJ,CAKIJ,IALJ,CAIII,kBAJJ,CAOA,GAAMC,CAAAA,KAAK,CAAGC,KAAK,CAACC,MAAN,EAAd,CACA,GAAMC,CAAAA,OAAO,CAAGF,KAAK,CAACC,MAAN,CAAsB,CAACN,QAAvB,CAAhB,CAEA,GAAMQ,CAAAA,IAAI,CAAGH,KAAK,CAACI,WAAN,CAAkB,UAAM,CACjC,GAAIF,OAAO,CAACG,OAAZ,CAAqB,CACjB,OACH,CAEDN,KAAK,CAACM,OAAN,CAAgBC,UAAU,CAAC,UAAM,CAC7BV,eAAe,CACTE,kBAAkB,CAACS,IAAnB,CAAwB,CAAEC,UAAU,CAAEL,IAAd,CAAxB,CADS,CAETL,kBAAkB,CAACW,IAAnB,CAAwB,CAAED,UAAU,CAAEL,IAAd,CAAxB,CAFN,CAGH,CAJyB,CAIvBN,gBAJuB,CAA1B,CAKH,CAVY,CAUV,CAACD,eAAD,CAAkBC,gBAAlB,CAAoCC,kBAApC,CAVU,CAAb,CAYA,GAAMY,CAAAA,KAAK,CAAGV,KAAK,CAACI,WAAN,CAAkB,UAAM,CAClC,GAAI,CAACT,QAAL,CAAe,CACX,OACH,CACDI,KAAK,CAACM,OAAN,EAAiBM,aAAa,CAACZ,KAAK,CAACM,OAAP,CAA9B,CACAH,OAAO,CAACG,OAAR,CAAkB,IAAlB,CACH,CANa,CAMX,CAACV,QAAD,CANW,CAAd,CAQA,GAAMiB,CAAAA,KAAK,CAAGZ,KAAK,CAACI,WAAN,CAAkB,UAAM,CAClC,GAAI,CAACT,QAAL,CAAe,CACX,OACH,CACDO,OAAO,CAACG,OAAR,CAAkB,KAAlB,CACAF,IAAI,GACP,CANa,CAMX,CAACA,IAAD,CAAOR,QAAP,CANW,CAAd,CAQAK,KAAK,CAACa,SAAN,CAAgB,UAAM,CAClB,GAAIlB,QAAJ,CAAc,CACViB,KAAK,GACR,CAFD,IAEO,CACHF,KAAK,GACR,CACD,MAAOA,CAAAA,KAAP,CACH,CAPD,CAOG,CAACA,KAAD,CAAQE,KAAR,CAAejB,QAAf,CAPH,EASA,MAAO,CACHe,KAAK,CAALA,KADG,CAEHE,KAAK,CAALA,KAFG,CAAP,CAIH","sourcesContent":["import * as React from 'react';\nimport type { ICarouselController } from './useCarouselController';\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean;\n autoPlayInterval?: number;\n autoPlayReverse?: boolean;\n carouselController: ICarouselController;\n}) {\n const {\n autoPlay = false,\n autoPlayReverse = false,\n autoPlayInterval,\n carouselController,\n } = opts;\n\n const timer = React.useRef<NodeJS.Timer>();\n const stopped = React.useRef<boolean>(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current) {\n return;\n }\n\n timer.current = setTimeout(() => {\n autoPlayReverse\n ? carouselController.prev({ onFinished: play })\n : carouselController.next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, carouselController]);\n\n const pause = React.useCallback(() => {\n if (!autoPlay) {\n return;\n }\n timer.current && clearInterval(timer.current);\n stopped.current = true;\n }, [autoPlay]);\n\n const start = React.useCallback(() => {\n if (!autoPlay) {\n return;\n }\n stopped.current = false;\n play();\n }, [play, autoPlay]);\n\n React.useEffect(() => {\n if (autoPlay) {\n start();\n } else {\n pause();\n }\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n"]}
@@ -1,195 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useCarouselController = useCarouselController;
7
-
8
- var _react = _interopRequireDefault(require("react"));
9
-
10
- var _constants = require("../constants");
11
-
12
- var _reactNativeReanimated = require("react-native-reanimated");
13
-
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- function useCarouselController(options) {
17
- const {
18
- size,
19
- loop,
20
- handlerOffsetX,
21
- disable = false,
22
- originalLength,
23
- length,
24
- onChange,
25
- duration
26
- } = options;
27
- const index = (0, _reactNativeReanimated.useSharedValue)(0); // The Index displayed to the user
28
-
29
- const sharedIndex = _react.default.useRef(0);
30
-
31
- const sharedPreIndex = _react.default.useRef(0);
32
-
33
- const currentFixedPage = _react.default.useCallback(() => {
34
- if (loop) {
35
- return -Math.round(handlerOffsetX.value / size);
36
- }
37
-
38
- const fixed = handlerOffsetX.value / size % length;
39
- return Math.round(handlerOffsetX.value <= 0 ? Math.abs(fixed) : Math.abs(fixed > 0 ? length - fixed : 0));
40
- }, [handlerOffsetX, length, size, loop]);
41
-
42
- const convertToSharedIndex = _react.default.useCallback(i => {
43
- if (loop) {
44
- switch (originalLength) {
45
- case 1:
46
- return 0;
47
-
48
- case 2:
49
- return i % 2;
50
- }
51
- }
52
-
53
- return i;
54
- }, [originalLength, loop]);
55
-
56
- const computedIndex = _react.default.useCallback(() => {
57
- sharedPreIndex.current = sharedIndex.current;
58
- const toInt = handlerOffsetX.value / size % length;
59
- const i = handlerOffsetX.value <= 0 ? Math.abs(toInt) : Math.abs(toInt > 0 ? length - toInt : 0);
60
- index.value = i;
61
-
62
- const _sharedIndex = convertToSharedIndex(i);
63
-
64
- sharedIndex.current = _sharedIndex;
65
- onChange(_sharedIndex);
66
- }, [length, handlerOffsetX, sharedPreIndex, index, size, sharedIndex, convertToSharedIndex, onChange]);
67
-
68
- const getCurrentIndex = _react.default.useCallback(() => {
69
- return index.value;
70
- }, [index]);
71
-
72
- const canSliding = _react.default.useCallback(() => {
73
- return !disable;
74
- }, [disable]);
75
-
76
- const onScrollEnd = _react.default.useCallback(() => {
77
- var _options$onScrollEnd;
78
-
79
- (_options$onScrollEnd = options.onScrollEnd) === null || _options$onScrollEnd === void 0 ? void 0 : _options$onScrollEnd.call(options);
80
- }, [options]);
81
-
82
- const onScrollBegin = _react.default.useCallback(() => {
83
- var _options$onScrollBegi;
84
-
85
- (_options$onScrollBegi = options.onScrollBegin) === null || _options$onScrollBegi === void 0 ? void 0 : _options$onScrollBegi.call(options);
86
- }, [options]);
87
-
88
- const scrollWithTiming = _react.default.useCallback((toValue, onFinished) => {
89
- return (0, _reactNativeReanimated.withTiming)(toValue, {
90
- duration,
91
- easing: _constants.Easing.easeOutQuart
92
- }, isFinished => {
93
- if (isFinished) {
94
- (0, _reactNativeReanimated.runOnJS)(onScrollEnd)();
95
- onFinished && (0, _reactNativeReanimated.runOnJS)(onFinished)();
96
- }
97
- });
98
- }, [onScrollEnd, duration]);
99
-
100
- const next = _react.default.useCallback((opts = {}) => {
101
- const {
102
- count = 1,
103
- animated = true,
104
- onFinished
105
- } = opts;
106
- if (!canSliding() || !loop && index.value >= length - 1) return;
107
- onScrollBegin === null || onScrollBegin === void 0 ? void 0 : onScrollBegin();
108
- const nextPage = currentFixedPage() + count;
109
- index.value = nextPage;
110
-
111
- if (animated) {
112
- handlerOffsetX.value = scrollWithTiming(-nextPage * size, onFinished);
113
- } else {
114
- handlerOffsetX.value = -nextPage * size;
115
- onFinished === null || onFinished === void 0 ? void 0 : onFinished();
116
- }
117
- }, [canSliding, loop, index, length, onScrollBegin, handlerOffsetX, size, scrollWithTiming, currentFixedPage]);
118
-
119
- const prev = _react.default.useCallback((opts = {}) => {
120
- const {
121
- count = 1,
122
- animated = true,
123
- onFinished
124
- } = opts;
125
- if (!canSliding() || !loop && index.value <= 0) return;
126
- onScrollBegin === null || onScrollBegin === void 0 ? void 0 : onScrollBegin();
127
- const prevPage = currentFixedPage() - count;
128
- index.value = prevPage;
129
-
130
- if (animated) {
131
- handlerOffsetX.value = scrollWithTiming(-prevPage * size, onFinished);
132
- } else {
133
- handlerOffsetX.value = -prevPage * size;
134
- onFinished === null || onFinished === void 0 ? void 0 : onFinished();
135
- }
136
- }, [canSliding, loop, index, onScrollBegin, handlerOffsetX, size, scrollWithTiming, currentFixedPage]);
137
-
138
- const to = _react.default.useCallback((idx, animated = false) => {
139
- if (idx === index.value) return;
140
- if (!canSliding()) return;
141
- onScrollBegin === null || onScrollBegin === void 0 ? void 0 : onScrollBegin();
142
- const offset = handlerOffsetX.value + (index.value - idx) * size;
143
-
144
- if (animated) {
145
- index.value = idx;
146
- handlerOffsetX.value = scrollWithTiming(offset);
147
- } else {
148
- handlerOffsetX.value = offset;
149
- index.value = idx;
150
- (0, _reactNativeReanimated.runOnJS)(onScrollEnd)();
151
- }
152
- }, [index, canSliding, onScrollBegin, handlerOffsetX, size, scrollWithTiming, onScrollEnd]);
153
-
154
- const scrollTo = _react.default.useCallback((opts = {}) => {
155
- const {
156
- count,
157
- animated = false,
158
- onFinished
159
- } = opts;
160
-
161
- if (!count) {
162
- return;
163
- }
164
-
165
- const n = Math.round(count);
166
-
167
- if (n < 0) {
168
- prev({
169
- count: Math.abs(n),
170
- animated,
171
- onFinished
172
- });
173
- } else {
174
- next({
175
- count: n,
176
- animated,
177
- onFinished
178
- });
179
- }
180
- }, [prev, next]);
181
-
182
- return {
183
- next,
184
- prev,
185
- to,
186
- scrollTo,
187
- index,
188
- length,
189
- sharedIndex,
190
- sharedPreIndex,
191
- computedIndex,
192
- getCurrentIndex
193
- };
194
- }
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");function useCarouselController(options){var size=options.size,loop=options.loop,handlerOffsetX=options.handlerOffsetX,withAnimation=options.withAnimation,_options$disable=options.disable,disable=_options$disable===void 0?false:_options$disable,originalLength=options.originalLength,length=options.length,onChange=options.onChange,duration=options.duration;var index=(0,_reactNativeReanimated.useSharedValue)(0);var sharedIndex=_react.default.useRef(0);var sharedPreIndex=_react.default.useRef(0);var currentFixedPage=_react.default.useCallback(function(){if(loop){return-Math.round(handlerOffsetX.value/size);}var fixed=handlerOffsetX.value/size%length;return Math.round(handlerOffsetX.value<=0?Math.abs(fixed):Math.abs(fixed>0?length-fixed:0));},[handlerOffsetX,length,size,loop]);var convertToSharedIndex=_react.default.useCallback(function(i){if(loop){switch(originalLength){case 1:return 0;case 2:return i%2;}}return i;},[originalLength,loop]);var computedIndex=_react.default.useCallback(function(){sharedPreIndex.current=sharedIndex.current;var toInt=handlerOffsetX.value/size%length;var i=handlerOffsetX.value<=0?Math.abs(toInt):Math.abs(toInt>0?length-toInt:0);index.value=i;var _sharedIndex=convertToSharedIndex(i);sharedIndex.current=_sharedIndex;onChange(_sharedIndex);},[length,handlerOffsetX,sharedPreIndex,index,size,sharedIndex,convertToSharedIndex,onChange]);var getCurrentIndex=_react.default.useCallback(function(){return index.value;},[index]);var canSliding=_react.default.useCallback(function(){return!disable;},[disable]);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 (127: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 (125: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>=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,length:length,onScrollBegin:onScrollBegin,currentFixedPage:currentFixedPage,handlerOffsetX:handlerOffsetX,scrollWithTiming:scrollWithTiming,size:size};_f.asString="function _f(opts={}){const{canSliding,loop,index,length,onScrollBegin,currentFixedPage,handlerOffsetX,scrollWithTiming,size}=jsThis._closure;{var _onScrollBegin;const{count=1,animated=true,onFinished:onFinished}=opts;if(!canSliding()||!loop&&index.value>=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=260250463458;_f.__location="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/hooks/useCarouselController.tsx (149:8)";global.__reanimatedWorkletInit(_f);return _f;}(),[canSliding,loop,index,length,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{next:next,prev:prev,to:to,scrollTo:scrollTo,index:index,length:length,sharedIndex:sharedIndex,sharedPreIndex:sharedPreIndex,computedIndex:computedIndex,getCurrentIndex:getCurrentIndex};}
195
2
  //# sourceMappingURL=useCarouselController.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["useCarouselController.tsx"],"names":["useCarouselController","options","size","loop","handlerOffsetX","disable","originalLength","length","onChange","duration","index","sharedIndex","React","useRef","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","convertToSharedIndex","i","computedIndex","current","toInt","_sharedIndex","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","easing","Easing","easeOutQuart","isFinished","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 { runOnJS, useSharedValue, withTiming } from 'react-native-reanimated';\nimport type { TCarouselActionOptions } from '../types';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n handlerOffsetX: Animated.SharedValue<number>;\n disable?: boolean;\n duration?: number;\n originalLength: number;\n length: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n // the length before fill data\n onChange: (index: number) => void;\n}\n\nexport interface ICarouselController {\n length: number;\n index: Animated.SharedValue<number>;\n sharedIndex: React.MutableRefObject<number>;\n sharedPreIndex: React.MutableRefObject<number>;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n computedIndex: () => 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 loop,\n handlerOffsetX,\n disable = false,\n originalLength,\n length,\n onChange,\n duration,\n } = options;\n\n const index = useSharedValue<number>(0);\n // The Index displayed to the user\n const sharedIndex = React.useRef<number>(0);\n const sharedPreIndex = React.useRef<number>(0);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? length - fixed : 0)\n );\n }, [handlerOffsetX, length, size, loop]);\n\n const convertToSharedIndex = React.useCallback(\n (i: number) => {\n if (loop) {\n switch (originalLength) {\n case 1:\n return 0;\n case 2:\n return i % 2;\n }\n }\n return i;\n },\n [originalLength, loop]\n );\n\n const computedIndex = React.useCallback(() => {\n sharedPreIndex.current = sharedIndex.current;\n const toInt = (handlerOffsetX.value / size) % length;\n const i =\n handlerOffsetX.value <= 0\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? length - toInt : 0);\n index.value = i;\n const _sharedIndex = convertToSharedIndex(i);\n sharedIndex.current = _sharedIndex;\n onChange(_sharedIndex);\n }, [\n length,\n handlerOffsetX,\n sharedPreIndex,\n index,\n size,\n sharedIndex,\n convertToSharedIndex,\n onChange,\n ]);\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !disable;\n }, [disable]);\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 return withTiming(\n toValue,\n { duration, easing: Easing.easeOutQuart },\n (isFinished: boolean) => {\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n }\n );\n },\n [onScrollEnd, duration]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= length - 1)) 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 );\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n length,\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 next,\n prev,\n to,\n scrollTo,\n index,\n length,\n sharedIndex,\n sharedPreIndex,\n computedIndex,\n getCurrentIndex,\n };\n}\n"]}
1
+ {"version":3,"sources":["useCarouselController.tsx"],"names":["useCarouselController","options","size","loop","handlerOffsetX","withAnimation","disable","originalLength","length","onChange","duration","index","sharedIndex","React","useRef","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","convertToSharedIndex","i","computedIndex","current","toInt","_sharedIndex","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 { runOnJS, useSharedValue } from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithAnimation,\n} from '../types';\nimport { dealWithAnimation } from '@/utils/dealWithAnimation';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n disable?: boolean;\n duration?: number;\n originalLength: number;\n length: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n // the length before fill data\n onChange: (index: number) => void;\n}\n\nexport interface ICarouselController {\n length: number;\n index: Animated.SharedValue<number>;\n sharedIndex: React.MutableRefObject<number>;\n sharedPreIndex: React.MutableRefObject<number>;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n computedIndex: () => 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 loop,\n handlerOffsetX,\n withAnimation,\n disable = false,\n originalLength,\n length,\n onChange,\n duration,\n } = options;\n\n const index = useSharedValue<number>(0);\n // The Index displayed to the user\n const sharedIndex = React.useRef<number>(0);\n const sharedPreIndex = React.useRef<number>(0);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? length - fixed : 0)\n );\n }, [handlerOffsetX, length, size, loop]);\n\n const convertToSharedIndex = React.useCallback(\n (i: number) => {\n if (loop) {\n switch (originalLength) {\n case 1:\n return 0;\n case 2:\n return i % 2;\n }\n }\n return i;\n },\n [originalLength, loop]\n );\n\n const computedIndex = React.useCallback(() => {\n sharedPreIndex.current = sharedIndex.current;\n const toInt = (handlerOffsetX.value / size) % length;\n const i =\n handlerOffsetX.value <= 0\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? length - toInt : 0);\n index.value = i;\n const _sharedIndex = convertToSharedIndex(i);\n sharedIndex.current = _sharedIndex;\n onChange(_sharedIndex);\n }, [\n length,\n handlerOffsetX,\n sharedPreIndex,\n index,\n size,\n sharedIndex,\n convertToSharedIndex,\n onChange,\n ]);\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !disable;\n }, [disable]);\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: WithAnimation = {\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 >= length - 1)) 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 length,\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 next,\n prev,\n to,\n scrollTo,\n index,\n length,\n sharedIndex,\n sharedPreIndex,\n computedIndex,\n getCurrentIndex,\n };\n}\n"]}
@@ -1,37 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useCommonVariables = useCommonVariables;
7
-
8
- var _react = _interopRequireDefault(require("react"));
9
-
10
- var _reactNativeReanimated = require("react-native-reanimated");
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- function useCommonVariables(props) {
15
- const {
16
- vertical,
17
- height,
18
- width,
19
- data,
20
- defaultIndex
21
- } = props;
22
- const size = vertical ? height : width;
23
- const validLength = data.length - 1;
24
- const defaultHandlerOffsetX = -Math.abs(defaultIndex * size);
25
- const handlerOffsetX = (0, _reactNativeReanimated.useSharedValue)(defaultHandlerOffsetX);
26
-
27
- _react.default.useEffect(() => {
28
- handlerOffsetX.value = defaultHandlerOffsetX;
29
- }, [vertical, handlerOffsetX, defaultHandlerOffsetX]);
30
-
31
- return {
32
- size,
33
- validLength,
34
- handlerOffsetX
35
- };
36
- }
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.useCommonVariables=useCommonVariables;var _react=_interopRequireDefault(require("react"));var _reactNativeReanimated=require("react-native-reanimated");function useCommonVariables(props){var vertical=props.vertical,height=props.height,width=props.width,data=props.data,defaultIndex=props.defaultIndex;var size=vertical?height:width;var validLength=data.length-1;var defaultHandlerOffsetX=-Math.abs(defaultIndex*size);var handlerOffsetX=(0,_reactNativeReanimated.useSharedValue)(defaultHandlerOffsetX);_react.default.useEffect(function(){handlerOffsetX.value=defaultHandlerOffsetX;},[vertical,handlerOffsetX,defaultHandlerOffsetX]);return{size:size,validLength:validLength,handlerOffsetX:handlerOffsetX};}
37
2
  //# sourceMappingURL=useCommonVariables.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["useCommonVariables.ts"],"names":["useCommonVariables","props","vertical","height","width","data","defaultIndex","size","validLength","length","defaultHandlerOffsetX","Math","abs","handlerOffsetX","React","useEffect","value"],"mappings":";;;;;;;AAAA;;AACA;;;;AASO,SAASA,kBAAT,CACHC,KADG,EAEa;AAChB,QAAM;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,MAAZ;AAAoBC,IAAAA,KAApB;AAA2BC,IAAAA,IAA3B;AAAiCC,IAAAA;AAAjC,MAAkDL,KAAxD;AACA,QAAMM,IAAI,GAAGL,QAAQ,GAAGC,MAAH,GAAYC,KAAjC;AACA,QAAMI,WAAW,GAAGH,IAAI,CAACI,MAAL,GAAc,CAAlC;AACA,QAAMC,qBAAqB,GAAG,CAACC,IAAI,CAACC,GAAL,CAASN,YAAY,GAAGC,IAAxB,CAA/B;AACA,QAAMM,cAAc,GAAG,2CAAuBH,qBAAvB,CAAvB;;AAEAI,iBAAMC,SAAN,CAAgB,MAAM;AAClBF,IAAAA,cAAc,CAACG,KAAf,GAAuBN,qBAAvB;AACH,GAFD,EAEG,CAACR,QAAD,EAAWW,cAAX,EAA2BH,qBAA3B,CAFH;;AAIA,SAAO;AACHH,IAAAA,IADG;AAEHC,IAAAA,WAFG;AAGHK,IAAAA;AAHG,GAAP;AAKH","sourcesContent":["import React from 'react';\nimport Animated, { useSharedValue } from 'react-native-reanimated';\nimport type { TInitializeCarouselProps } from './useInitProps';\n\ninterface ICommonVariables {\n size: number;\n validLength: number;\n handlerOffsetX: Animated.SharedValue<number>;\n}\n\nexport function useCommonVariables(\n props: TInitializeCarouselProps<any>\n): ICommonVariables {\n const { vertical, height, width, data, defaultIndex } = props;\n const size = vertical ? height : width;\n const validLength = data.length - 1;\n const defaultHandlerOffsetX = -Math.abs(defaultIndex * size);\n const handlerOffsetX = useSharedValue<number>(defaultHandlerOffsetX);\n\n React.useEffect(() => {\n handlerOffsetX.value = defaultHandlerOffsetX;\n }, [vertical, handlerOffsetX, defaultHandlerOffsetX]);\n\n return {\n size,\n validLength,\n handlerOffsetX,\n };\n}\n"]}
1
+ {"version":3,"sources":["useCommonVariables.ts"],"names":["useCommonVariables","props","vertical","height","width","data","defaultIndex","size","validLength","length","defaultHandlerOffsetX","Math","abs","handlerOffsetX","React","useEffect","value"],"mappings":"0LAAA,oDACA,8DASO,QAASA,CAAAA,kBAAT,CACHC,KADG,CAEa,CAChB,GAAQC,CAAAA,QAAR,CAAwDD,KAAxD,CAAQC,QAAR,CAAkBC,MAAlB,CAAwDF,KAAxD,CAAkBE,MAAlB,CAA0BC,KAA1B,CAAwDH,KAAxD,CAA0BG,KAA1B,CAAiCC,IAAjC,CAAwDJ,KAAxD,CAAiCI,IAAjC,CAAuCC,YAAvC,CAAwDL,KAAxD,CAAuCK,YAAvC,CACA,GAAMC,CAAAA,IAAI,CAAGL,QAAQ,CAAGC,MAAH,CAAYC,KAAjC,CACA,GAAMI,CAAAA,WAAW,CAAGH,IAAI,CAACI,MAAL,CAAc,CAAlC,CACA,GAAMC,CAAAA,qBAAqB,CAAG,CAACC,IAAI,CAACC,GAAL,CAASN,YAAY,CAAGC,IAAxB,CAA/B,CACA,GAAMM,CAAAA,cAAc,CAAG,0CAAuBH,qBAAvB,CAAvB,CAEAI,eAAMC,SAAN,CAAgB,UAAM,CAClBF,cAAc,CAACG,KAAf,CAAuBN,qBAAvB,CACH,CAFD,CAEG,CAACR,QAAD,CAAWW,cAAX,CAA2BH,qBAA3B,CAFH,EAIA,MAAO,CACHH,IAAI,CAAJA,IADG,CAEHC,WAAW,CAAXA,WAFG,CAGHK,cAAc,CAAdA,cAHG,CAAP,CAKH","sourcesContent":["import React from 'react';\nimport Animated, { useSharedValue } from 'react-native-reanimated';\nimport type { TInitializeCarouselProps } from './useInitProps';\n\ninterface ICommonVariables {\n size: number;\n validLength: number;\n handlerOffsetX: Animated.SharedValue<number>;\n}\n\nexport function useCommonVariables(\n props: TInitializeCarouselProps<any>\n): ICommonVariables {\n const { vertical, height, width, data, defaultIndex } = props;\n const size = vertical ? height : width;\n const validLength = data.length - 1;\n const defaultHandlerOffsetX = -Math.abs(defaultIndex * size);\n const handlerOffsetX = useSharedValue<number>(defaultHandlerOffsetX);\n\n React.useEffect(() => {\n handlerOffsetX.value = defaultHandlerOffsetX;\n }, [vertical, handlerOffsetX, defaultHandlerOffsetX]);\n\n return {\n size,\n validLength,\n handlerOffsetX,\n };\n}\n"]}
@@ -1,71 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useInitProps = useInitProps;
7
-
8
- var _react = _interopRequireDefault(require("react"));
9
-
10
- var _constants = require("../constants");
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- function useInitProps(props) {
15
- const {
16
- defaultIndex = 0,
17
- data: rawData = [],
18
- loop = true,
19
- autoPlayInterval: _autoPlayInterval = 1000,
20
- scrollAnimationDuration = 500,
21
- style = {},
22
- panGestureHandlerProps = {},
23
- pagingEnabled = true,
24
- enableSnap = true,
25
- width: _width,
26
- height: _height
27
- } = props;
28
- const width = Math.round(_width || 0);
29
- const height = Math.round(_height || 0);
30
- const autoPlayInterval = Math.max(_autoPlayInterval, 0);
31
-
32
- const data = _react.default.useMemo(() => {
33
- if (!loop) return rawData;
34
-
35
- if (rawData.length === _constants.DATA_LENGTH.SINGLE_ITEM) {
36
- return [rawData[0], rawData[0], rawData[0]];
37
- }
38
-
39
- if (rawData.length === _constants.DATA_LENGTH.DOUBLE_ITEM) {
40
- return [rawData[0], rawData[1], rawData[0], rawData[1]];
41
- }
42
-
43
- return rawData;
44
- }, [rawData, loop]);
45
-
46
- if (props.mode === 'vertical-stack' || props.mode === 'horizontal-stack') {
47
- var _props$modeConfig$sho, _props$modeConfig;
48
-
49
- if (!props.modeConfig) {
50
- props.modeConfig = {};
51
- }
52
-
53
- props.modeConfig.showLength = (_props$modeConfig$sho = (_props$modeConfig = props.modeConfig) === null || _props$modeConfig === void 0 ? void 0 : _props$modeConfig.showLength) !== null && _props$modeConfig$sho !== void 0 ? _props$modeConfig$sho : data.length - 1;
54
- }
55
-
56
- return { ...props,
57
- defaultIndex,
58
- data,
59
- rawData,
60
- loop,
61
- autoPlayInterval,
62
- scrollAnimationDuration,
63
- style,
64
- panGestureHandlerProps,
65
- pagingEnabled,
66
- enableSnap,
67
- width,
68
- height
69
- };
70
- }
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.useInitProps=useInitProps;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _react=_interopRequireDefault(require("react"));var _constants=require("../constants");function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(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=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){(0,_defineProperty2.default)(target,key,source[key]);});}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source));}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key));});}}return target;}function useInitProps(props){var _props$defaultIndex=props.defaultIndex,defaultIndex=_props$defaultIndex===void 0?0:_props$defaultIndex,_props$data=props.data,rawData=_props$data===void 0?[]:_props$data,_props$loop=props.loop,loop=_props$loop===void 0?true:_props$loop,_props$autoPlayInterv=props.autoPlayInterval,_autoPlayInterval=_props$autoPlayInterv===void 0?1000:_props$autoPlayInterv,_props$scrollAnimatio=props.scrollAnimationDuration,scrollAnimationDuration=_props$scrollAnimatio===void 0?500:_props$scrollAnimatio,_props$style=props.style,style=_props$style===void 0?{}:_props$style,_props$panGestureHand=props.panGestureHandlerProps,panGestureHandlerProps=_props$panGestureHand===void 0?{}:_props$panGestureHand,_props$pagingEnabled=props.pagingEnabled,pagingEnabled=_props$pagingEnabled===void 0?true:_props$pagingEnabled,_props$enableSnap=props.enableSnap,enableSnap=_props$enableSnap===void 0?true:_props$enableSnap,_width=props.width,_height=props.height;var width=Math.round(_width||0);var height=Math.round(_height||0);var autoPlayInterval=Math.max(_autoPlayInterval,0);var data=_react.default.useMemo(function(){if(!loop)return rawData;if(rawData.length===_constants.DATA_LENGTH.SINGLE_ITEM){return[rawData[0],rawData[0],rawData[0]];}if(rawData.length===_constants.DATA_LENGTH.DOUBLE_ITEM){return[rawData[0],rawData[1],rawData[0],rawData[1]];}return rawData;},[rawData,loop]);if(props.mode==='vertical-stack'||props.mode==='horizontal-stack'){var _props$modeConfig$sho,_props$modeConfig;if(!props.modeConfig){props.modeConfig={};}props.modeConfig.showLength=(_props$modeConfig$sho=(_props$modeConfig=props.modeConfig)==null?void 0:_props$modeConfig.showLength)!=null?_props$modeConfig$sho:data.length-1;}return _objectSpread(_objectSpread({},props),{},{defaultIndex:defaultIndex,data:data,rawData:rawData,loop:loop,autoPlayInterval:autoPlayInterval,scrollAnimationDuration:scrollAnimationDuration,style:style,panGestureHandlerProps:panGestureHandlerProps,pagingEnabled:pagingEnabled,enableSnap:enableSnap,width:width,height:height});}
71
2
  //# sourceMappingURL=useInitProps.js.map