react-native-reanimated-carousel 4.0.0-alpha.8 → 4.0.0-alpha.9

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 (36) hide show
  1. package/README.md +2 -3
  2. package/lib/commonjs/components/Carousel.js +6 -6
  3. package/lib/commonjs/components/Carousel.js.map +1 -1
  4. package/lib/commonjs/components/ScrollViewGesture.js +5 -5
  5. package/lib/commonjs/components/ScrollViewGesture.js.map +1 -1
  6. package/lib/commonjs/hooks/useCarouselController.js +9 -9
  7. package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
  8. package/lib/commonjs/hooks/usePanGestureProxy.js +12 -12
  9. package/lib/commonjs/hooks/usePanGestureProxy.js.map +1 -1
  10. package/lib/commonjs/hooks/usePanGestureProxy.test.js +8 -8
  11. package/lib/commonjs/hooks/usePanGestureProxy.test.js.map +1 -1
  12. package/lib/commonjs/index.js.map +1 -1
  13. package/lib/module/components/Carousel.js +6 -6
  14. package/lib/module/components/Carousel.js.map +1 -1
  15. package/lib/module/components/ScrollViewGesture.js +5 -5
  16. package/lib/module/components/ScrollViewGesture.js.map +1 -1
  17. package/lib/module/hooks/useCarouselController.js +9 -9
  18. package/lib/module/hooks/useCarouselController.js.map +1 -1
  19. package/lib/module/hooks/usePanGestureProxy.js +12 -12
  20. package/lib/module/hooks/usePanGestureProxy.js.map +1 -1
  21. package/lib/module/hooks/usePanGestureProxy.test.js +8 -8
  22. package/lib/module/hooks/usePanGestureProxy.test.js.map +1 -1
  23. package/lib/module/index.js.map +1 -1
  24. package/lib/typescript/components/ScrollViewGesture.d.ts +1 -1
  25. package/lib/typescript/hooks/useCarouselController.d.ts +1 -1
  26. package/lib/typescript/hooks/usePanGestureProxy.d.ts +1 -1
  27. package/lib/typescript/index.d.ts +1 -0
  28. package/lib/typescript/types.d.ts +2 -2
  29. package/package.json +1 -1
  30. package/src/components/Carousel.tsx +6 -6
  31. package/src/components/ScrollViewGesture.tsx +6 -6
  32. package/src/hooks/useCarouselController.tsx +9 -9
  33. package/src/hooks/usePanGestureProxy.test.tsx +6 -7
  34. package/src/hooks/usePanGestureProxy.ts +15 -15
  35. package/src/index.tsx +2 -0
  36. package/src/types.ts +2 -2
package/README.md CHANGED
@@ -32,9 +32,8 @@ Check out [the documentation website](https://reanimated-carousel.dev).
32
32
  | <a href="./example/app/src/pages/parallax/index.tsx">parallax-vertical</a> | <a href="./example/app/src/pages/stack/index.tsx">stack-horizontal-left</a> | <a href="./example/app/src/pages/stack/index.tsx">stack-horizontal-right</a> |
33
33
  | <img src="assets/stack-vertical-left.gif"/> | <img src="assets/stack-vertical-right.gif"/> | <img src="assets/stack-horizontal-right.gif"/> |
34
34
  | <a href="./example/app/src/pages/stack/index.tsx">stack-vertical-left</a> | <a href="./example/app/src/pages/stack/index.tsx">stack-vertical-right</a> | <a href="./example/app/src/pages/stack/index.tsx">stack-horizontal-right</a> |
35
- | <img src="assets/left-align.gif"/> |
36
- | <a href="./example/app/src/pages/left-align/index.tsx">left-align</a> |
37
-
35
+ | <img src="assets/left-align.gif"/> | | <img src="assets/right-align.gif" > |
36
+ | <a href="./example/app/src/pages/left-align/index.tsx">left-align</a> | | <a href="./example/app/src/pages/right-align/index.tsx">right-align</a> |
38
37
 
39
38
  > You can make cool animations with custom animation API [[Details]](https://reanimated-carousel.dev/custom-animations)
40
39
 
@@ -64,7 +64,7 @@ const Carousel = /*#__PURE__*/_react.default.forwardRef((_props, ref) => {
64
64
  renderItem,
65
65
  onScrollEnd,
66
66
  onSnapToItem,
67
- onScrollBegin,
67
+ onScrollStart,
68
68
  onProgressChange,
69
69
  customAnimation,
70
70
  defaultIndex
@@ -102,7 +102,7 @@ const Carousel = /*#__PURE__*/_react.default.forwardRef((_props, ref) => {
102
102
  fixedDirection,
103
103
  duration: scrollAnimationDuration,
104
104
  onScrollEnd: () => (0, _reactNativeReanimated.runOnJS)(_onScrollEnd)(),
105
- onScrollBegin: () => !!onScrollBegin && (0, _reactNativeReanimated.runOnJS)(onScrollBegin)()
105
+ onScrollStart: () => !!onScrollStart && (0, _reactNativeReanimated.runOnJS)(onScrollStart)()
106
106
  });
107
107
  const {
108
108
  next,
@@ -134,10 +134,10 @@ const Carousel = /*#__PURE__*/_react.default.forwardRef((_props, ref) => {
134
134
  if (onScrollEnd) onScrollEnd(realIndex);
135
135
  }, [loop, autoFillData, rawDataLength, getSharedIndex, onSnapToItem, onScrollEnd]);
136
136
 
137
- const scrollViewGestureOnScrollBegin = _react.default.useCallback(() => {
137
+ const scrollViewGestureOnScrollStart = _react.default.useCallback(() => {
138
138
  pauseAutoPlay();
139
- onScrollBegin === null || onScrollBegin === void 0 ? void 0 : onScrollBegin();
140
- }, [onScrollBegin, pauseAutoPlay]);
139
+ onScrollStart === null || onScrollStart === void 0 ? void 0 : onScrollStart();
140
+ }, [onScrollStart, pauseAutoPlay]);
141
141
 
142
142
  const scrollViewGestureOnScrollEnd = _react.default.useCallback(() => {
143
143
  startAutoPlay();
@@ -173,7 +173,7 @@ const Carousel = /*#__PURE__*/_react.default.forwardRef((_props, ref) => {
173
173
  height: height || "100%"
174
174
  }, style, vertical ? styles.itemsVertical : styles.itemsHorizontal],
175
175
  testID: testID,
176
- onScrollBegin: scrollViewGestureOnScrollBegin,
176
+ onScrollStart: scrollViewGestureOnScrollStart,
177
177
  onScrollEnd: scrollViewGestureOnScrollEnd,
178
178
  onTouchBegin: scrollViewGestureOnTouchBegin,
179
179
  onTouchEnd: scrollViewGestureOnTouchEnd
@@ -1 +1 @@
1
- {"version":3,"sources":["Carousel.tsx"],"names":["Carousel","React","forwardRef","_props","ref","props","testID","loop","autoFillData","data","dataLength","rawDataLength","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","fixedDirection","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffset","offsetX","totalSize","x","value","isNaN","carouselController","duration","_onScrollEnd","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","layoutConfig","common","styles","container","itemsVertical","itemsHorizontal","StyleSheet","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport { GestureHandlerRootView } from \"react-native-gesture-handler\";\nimport { runOnJS, useDerivedValue } from \"react-native-reanimated\";\n\nimport { ItemRenderer } from \"./ItemRenderer\";\nimport { ScrollViewGesture } from \"./ScrollViewGesture\";\n\nimport { useAutoPlay } from \"../hooks/useAutoPlay\";\nimport { useCarouselController } from \"../hooks/useCarouselController\";\nimport { useCommonVariables } from \"../hooks/useCommonVariables\";\nimport { useInitProps } from \"../hooks/useInitProps\";\nimport { useLayoutConfig } from \"../hooks/useLayoutConfig\";\nimport { useOnProgressChange } from \"../hooks/useOnProgressChange\";\nimport { usePropsErrorBoundary } from \"../hooks/usePropsErrorBoundary\";\nimport { CTX } from \"../store\";\nimport type { ICarouselInstance, TCarouselProps } from \"../types\";\nimport { computedRealIndexWithAutoFillData } from \"../utils/computed-with-auto-fill-data\";\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n loop,\n autoFillData,\n // Fill data with autoFillData\n data,\n // Length of fill data\n dataLength,\n // Length of raw data\n rawDataLength,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n fixedDirection,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffset } = commonVariables;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffset.value % totalSize;\n\n if (!loop)\n return handlerOffset.value;\n\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary({ ...props, dataLength });\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawDataLength,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n dataLength,\n autoFillData,\n handlerOffset,\n withAnimation,\n defaultIndex,\n fixedDirection,\n duration: scrollAnimationDuration,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n });\n\n const { next, prev, scrollTo, getSharedIndex, getCurrentIndex }\n = carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n const realIndex = computedRealIndexWithAutoFillData({\n index: _sharedIndex,\n dataLength: rawDataLength,\n loop,\n autoFillData,\n });\n\n if (onSnapToItem)\n onSnapToItem(realIndex);\n\n if (onScrollEnd)\n onScrollEnd(realIndex);\n }, [\n loop,\n autoFillData,\n rawDataLength,\n getSharedIndex,\n onSnapToItem,\n onScrollEnd,\n ]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n scrollTo,\n }),\n [getCurrentIndex, next, prev, scrollTo],\n );\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n return (\n <GestureHandlerRootView>\n <CTX.Provider value={{ props, common: commonVariables }}>\n <ScrollViewGesture\n key={mode}\n size={size}\n translation={handlerOffset}\n style={[\n styles.container,\n {\n width: width || \"100%\",\n height: height || \"100%\",\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n testID={testID}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n <ItemRenderer\n data={data}\n dataLength={dataLength}\n rawDataLength={rawDataLength}\n loop={loop}\n size={size}\n windowSize={windowSize}\n autoFillData={autoFillData}\n offsetX={offsetX}\n handlerOffset={handlerOffset}\n layoutConfig={layoutConfig}\n renderItem={renderItem}\n customAnimation={customAnimation}\n />\n </ScrollViewGesture>\n </CTX.Provider>\n </GestureHandlerRootView>\n );\n },\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: \"hidden\",\n },\n itemsHorizontal: {\n flexDirection: \"row\",\n },\n itemsVertical: {\n flexDirection: \"column\",\n },\n});\n"]}
1
+ {"version":3,"sources":["Carousel.tsx"],"names":["Carousel","React","forwardRef","_props","ref","props","testID","loop","autoFillData","data","dataLength","rawDataLength","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","fixedDirection","renderItem","onScrollEnd","onSnapToItem","onScrollStart","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffset","offsetX","totalSize","x","value","isNaN","carouselController","duration","_onScrollEnd","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollStart","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","layoutConfig","common","styles","container","itemsVertical","itemsHorizontal","StyleSheet","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport { GestureHandlerRootView } from \"react-native-gesture-handler\";\nimport { runOnJS, useDerivedValue } from \"react-native-reanimated\";\n\nimport { ItemRenderer } from \"./ItemRenderer\";\nimport { ScrollViewGesture } from \"./ScrollViewGesture\";\n\nimport { useAutoPlay } from \"../hooks/useAutoPlay\";\nimport { useCarouselController } from \"../hooks/useCarouselController\";\nimport { useCommonVariables } from \"../hooks/useCommonVariables\";\nimport { useInitProps } from \"../hooks/useInitProps\";\nimport { useLayoutConfig } from \"../hooks/useLayoutConfig\";\nimport { useOnProgressChange } from \"../hooks/useOnProgressChange\";\nimport { usePropsErrorBoundary } from \"../hooks/usePropsErrorBoundary\";\nimport { CTX } from \"../store\";\nimport type { ICarouselInstance, TCarouselProps } from \"../types\";\nimport { computedRealIndexWithAutoFillData } from \"../utils/computed-with-auto-fill-data\";\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n loop,\n autoFillData,\n // Fill data with autoFillData\n data,\n // Length of fill data\n dataLength,\n // Length of raw data\n rawDataLength,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n fixedDirection,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollStart,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffset } = commonVariables;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffset.value % totalSize;\n\n if (!loop)\n return handlerOffset.value;\n\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary({ ...props, dataLength });\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawDataLength,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n dataLength,\n autoFillData,\n handlerOffset,\n withAnimation,\n defaultIndex,\n fixedDirection,\n duration: scrollAnimationDuration,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollStart: () => !!onScrollStart && runOnJS(onScrollStart)(),\n });\n\n const { next, prev, scrollTo, getSharedIndex, getCurrentIndex }\n = carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n const realIndex = computedRealIndexWithAutoFillData({\n index: _sharedIndex,\n dataLength: rawDataLength,\n loop,\n autoFillData,\n });\n\n if (onSnapToItem)\n onSnapToItem(realIndex);\n\n if (onScrollEnd)\n onScrollEnd(realIndex);\n }, [\n loop,\n autoFillData,\n rawDataLength,\n getSharedIndex,\n onSnapToItem,\n onScrollEnd,\n ]);\n\n const scrollViewGestureOnScrollStart = React.useCallback(() => {\n pauseAutoPlay();\n onScrollStart?.();\n }, [onScrollStart, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n scrollTo,\n }),\n [getCurrentIndex, next, prev, scrollTo],\n );\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n return (\n <GestureHandlerRootView>\n <CTX.Provider value={{ props, common: commonVariables }}>\n <ScrollViewGesture\n key={mode}\n size={size}\n translation={handlerOffset}\n style={[\n styles.container,\n {\n width: width || \"100%\",\n height: height || \"100%\",\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n testID={testID}\n onScrollStart={scrollViewGestureOnScrollStart}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n <ItemRenderer\n data={data}\n dataLength={dataLength}\n rawDataLength={rawDataLength}\n loop={loop}\n size={size}\n windowSize={windowSize}\n autoFillData={autoFillData}\n offsetX={offsetX}\n handlerOffset={handlerOffset}\n layoutConfig={layoutConfig}\n renderItem={renderItem}\n customAnimation={customAnimation}\n />\n </ScrollViewGesture>\n </CTX.Provider>\n </GestureHandlerRootView>\n );\n },\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: \"hidden\",\n },\n itemsHorizontal: {\n flexDirection: \"row\",\n },\n itemsVertical: {\n flexDirection: \"column\",\n },\n});\n"]}
@@ -46,7 +46,7 @@ const IScrollViewGesture = props => {
46
46
  translation,
47
47
  testID,
48
48
  style = {},
49
- onScrollBegin,
49
+ onScrollStart,
50
50
  onScrollEnd,
51
51
  onTouchBegin,
52
52
  onTouchEnd
@@ -213,16 +213,16 @@ const IScrollViewGesture = props => {
213
213
  return translation;
214
214
  }
215
215
 
216
- const onGestureBegin = (0, _react.useCallback)(_ => {
216
+ const onGestureStart = (0, _react.useCallback)(_ => {
217
217
  "worklet";
218
218
 
219
219
  touching.value = true;
220
220
  validStart.value = true;
221
- onScrollBegin && (0, _reactNativeReanimated.runOnJS)(onScrollBegin)();
221
+ onScrollStart && (0, _reactNativeReanimated.runOnJS)(onScrollStart)();
222
222
  max.value = (maxPage - 1) * size;
223
223
  if (!loop && !overscrollEnabled) max.value = getLimit();
224
224
  panOffset.value = translation.value;
225
- }, [max, size, maxPage, loop, touching, panOffset, validStart, translation, overscrollEnabled, getLimit, onScrollBegin]);
225
+ }, [max, size, maxPage, loop, touching, panOffset, validStart, translation, overscrollEnabled, getLimit, onScrollStart]);
226
226
  const onGestureUpdate = (0, _react.useCallback)(e => {
227
227
  "worklet";
228
228
 
@@ -278,7 +278,7 @@ const IScrollViewGesture = props => {
278
278
  }, [size, loop, touching, panOffset, translation, isHorizontal, scrollEndVelocity, scrollEndTranslation, fixedDirection, maxScrollDistancePerSwipeIsSet, maxScrollDistancePerSwipe, endWithSpring, withSpring, onScrollEnd]);
279
279
  const gesture = (0, _usePanGestureProxy.usePanGestureProxy)({
280
280
  onConfigurePanGesture,
281
- onGestureBegin,
281
+ onGestureStart,
282
282
  onGestureUpdate,
283
283
  onGestureEnd,
284
284
  options: {
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["IScrollViewGesture","props","onConfigurePanGesture","vertical","pagingEnabled","snapEnabled","loop","scrollAnimationDuration","withAnimation","enabled","dataLength","overscrollEnabled","maxScrollDistancePerSwipe","fixedDirection","React","useContext","CTX","size","translation","testID","style","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","isHorizontal","max","panOffset","touching","validStart","scrollEndTranslation","scrollEndVelocity","containerRef","maxScrollDistancePerSwipeIsSet","getLimit","useCallback","width","containerWidth","withSpring","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","Easing","easeOutQuart","isFinished","endWithSpring","origin","value","velocity","finalTranslation","deceleration","Math","abs","offset","computed","ceil","floor","page","finalPage","withProcessTranslation","min","nextPage","round","limit","sign","onFinish","activeDecay","resetBoundary","onGestureBegin","_","onGestureUpdate","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","translationValue","onGestureEnd","_success","velocityX","velocityY","totalTranslation","gesture","options","children","ScrollViewGesture"],"mappings":"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","sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport React, { useCallback } from \"react\";\nimport type { StyleProp, ViewStyle } from \"react-native\";\nimport type { GestureStateChangeEvent, PanGestureHandlerEventPayload } from \"react-native-gesture-handler\";\nimport { GestureDetector } from \"react-native-gesture-handler\";\nimport Animated, {\n cancelAnimation,\n measure,\n runOnJS,\n useAnimatedReaction,\n useAnimatedRef,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport { usePanGestureProxy } from \"../hooks/usePanGestureProxy\";\nimport { CTX } from \"../store\";\nimport type { WithTimingAnimation } from \"../types\";\nimport { dealWithAnimation } from \"../utils/deal-with-animation\";\n\ninterface Props {\n size: number\n infinite?: boolean\n testID?: string\n style?: StyleProp<ViewStyle>\n onScrollBegin?: () => void\n onScrollEnd?: () => void\n onTouchBegin?: () => void\n onTouchEnd?: () => void\n translation: Animated.SharedValue<number>\n}\n\nconst IScrollViewGesture: React.FC<PropsWithChildren<Props>> = (props) => {\n const {\n props: {\n onConfigurePanGesture,\n vertical,\n pagingEnabled,\n snapEnabled,\n loop,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n dataLength,\n overscrollEnabled,\n maxScrollDistancePerSwipe,\n fixedDirection,\n },\n } = React.useContext(CTX);\n\n const {\n size,\n translation,\n testID,\n style = {},\n onScrollBegin,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = dataLength;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const max = useSharedValue(0);\n const panOffset = useSharedValue(0);\n const touching = useSharedValue(false);\n const validStart = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n const containerRef = useAnimatedRef<Animated.View>();\n const maxScrollDistancePerSwipeIsSet = typeof maxScrollDistancePerSwipe === \"number\";\n\n // Get the limit of the scroll.\n const getLimit = React.useCallback(() => {\n \"worklet\";\n\n if (!loop && !overscrollEnabled) {\n const { width: containerWidth = 0 } = measure(containerRef);\n\n // If the item's total width is less than the container's width, then there is no need to scroll.\n if (dataLength * size < containerWidth)\n return 0;\n\n // Disable the \"overscroll\" effect\n return dataLength * size - containerWidth;\n }\n\n return dataLength * size;\n }, [loop, size, dataLength, overscrollEnabled]);\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 [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 // Default to scroll in the direction of the slide (with deceleration)\n let finalTranslation: number = withDecay({ velocity, deceleration: 0.999 });\n\n // If the distance of the swipe exceeds the max scroll distance, keep the view at the current position\n if (maxScrollDistancePerSwipeIsSet && Math.abs(scrollEndTranslation.value) > maxScrollDistancePerSwipe) {\n finalTranslation = origin;\n }\n else {\n /**\n * The page size is the same as the item size.\n * If direction is vertical, the page size is the height of the item.\n * If direction is horizontal, the page size is the width of the item.\n *\n * `page size` equals to `size` variable.\n * */\n if (pagingEnabled) {\n // distance with direction\n const offset = -(scrollEndTranslation.value >= 0 ? 1 : -1); // 1 or -1\n const computed = offset < 0 ? Math.ceil : Math.floor;\n const page = computed(-translation.value / size);\n\n if (loop) {\n const finalPage = page + offset;\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n }\n else {\n const finalPage = Math.min(maxPage - 1, Math.max(0, page + offset));\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n }\n }\n\n if (!pagingEnabled && snapEnabled) {\n // scroll to the nearest item\n const nextPage = Math.round((origin + velocity * 0.4) / size) * size;\n finalTranslation = withSpring(withProcessTranslation(nextPage), onFinished);\n }\n }\n\n translation.value = finalTranslation;\n\n function withProcessTranslation(translation: number) {\n if (!loop && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n },\n [\n withSpring,\n size,\n maxPage,\n loop,\n snapEnabled,\n translation,\n pagingEnabled,\n scrollEndVelocity.value,\n maxScrollDistancePerSwipe,\n scrollEndTranslation.value,\n maxScrollDistancePerSwipeIsSet,\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 if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!loop) {\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 (!loop)\n translation.value = withSpring(-((maxPage - 1) * size));\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n loop,\n activeDecay,\n withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled)\n resetBoundary();\n },\n [pagingEnabled, resetBoundary],\n );\n\n function withProcessTranslation(translation: number) {\n \"worklet\";\n\n if (!loop && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n\n const onGestureBegin = useCallback((_: PanGestureHandlerEventPayload) => {\n \"worklet\";\n\n touching.value = true;\n validStart.value = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n\n max.value = (maxPage - 1) * size;\n if (!loop && !overscrollEnabled)\n max.value = getLimit();\n\n panOffset.value = translation.value;\n }, [\n max,\n size,\n maxPage,\n loop,\n touching,\n panOffset,\n validStart,\n translation,\n overscrollEnabled,\n getLimit,\n onScrollBegin,\n ]);\n\n const onGestureUpdate = useCallback((e: PanGestureHandlerEventPayload) => {\n \"worklet\";\n\n if (validStart.value) {\n validStart.value = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (fixedDirection === \"negative\")\n panTranslation = -Math.abs(panTranslation);\n\n else if (fixedDirection === \"positive\")\n panTranslation = +Math.abs(panTranslation);\n\n if (!loop) {\n if ((translation.value > 0 || translation.value < -max.value)) {\n const boundary = translation.value > 0 ? 0 : -max.value;\n const fixed = boundary - panOffset.value;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n }\n\n const translationValue = panOffset.value + panTranslation;\n translation.value = translationValue;\n }, [\n isHorizontal,\n max,\n panOffset,\n loop,\n overscrollEnabled,\n fixedDirection,\n translation,\n validStart,\n touching,\n ]);\n\n const onGestureEnd = useCallback((e: GestureStateChangeEvent<PanGestureHandlerEventPayload>, _success: boolean) => {\n \"worklet\";\n\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (fixedDirection === \"negative\")\n panTranslation = -Math.abs(panTranslation);\n\n else if (fixedDirection === \"positive\")\n panTranslation = +Math.abs(panTranslation);\n\n scrollEndTranslation.value = panTranslation;\n\n const totalTranslation = scrollEndVelocity.value + scrollEndTranslation.value;\n\n if (maxScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) > maxScrollDistancePerSwipe) {\n const nextPage = Math.round((panOffset.value + maxScrollDistancePerSwipe * Math.sign(totalTranslation)) / size) * size;\n translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);\n }\n else {\n endWithSpring(onScrollEnd);\n }\n\n if (!loop)\n touching.value = false;\n }, [\n size,\n loop,\n touching,\n panOffset,\n translation,\n isHorizontal,\n scrollEndVelocity,\n scrollEndTranslation,\n fixedDirection,\n maxScrollDistancePerSwipeIsSet,\n maxScrollDistancePerSwipe,\n endWithSpring,\n withSpring,\n onScrollEnd,\n ]);\n\n const gesture = usePanGestureProxy({\n onConfigurePanGesture,\n onGestureBegin,\n onGestureUpdate,\n onGestureEnd,\n options: { enabled },\n });\n\n return (\n <GestureDetector gesture={gesture}>\n <Animated.View\n ref={containerRef}\n testID={testID}\n style={style}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n {props.children}\n </Animated.View>\n </GestureDetector>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n"]}
1
+ {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["IScrollViewGesture","props","onConfigurePanGesture","vertical","pagingEnabled","snapEnabled","loop","scrollAnimationDuration","withAnimation","enabled","dataLength","overscrollEnabled","maxScrollDistancePerSwipe","fixedDirection","React","useContext","CTX","size","translation","testID","style","onScrollStart","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","isHorizontal","max","panOffset","touching","validStart","scrollEndTranslation","scrollEndVelocity","containerRef","maxScrollDistancePerSwipeIsSet","getLimit","useCallback","width","containerWidth","withSpring","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","Easing","easeOutQuart","isFinished","endWithSpring","origin","value","velocity","finalTranslation","deceleration","Math","abs","offset","computed","ceil","floor","page","finalPage","withProcessTranslation","min","nextPage","round","limit","sign","onFinish","activeDecay","resetBoundary","onGestureStart","_","onGestureUpdate","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","translationValue","onGestureEnd","_success","velocityX","velocityY","totalTranslation","gesture","options","children","ScrollViewGesture"],"mappings":"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","sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport React, { useCallback } from \"react\";\nimport type { StyleProp, ViewStyle } from \"react-native\";\nimport type { GestureStateChangeEvent, PanGestureHandlerEventPayload } from \"react-native-gesture-handler\";\nimport { GestureDetector } from \"react-native-gesture-handler\";\nimport Animated, {\n cancelAnimation,\n measure,\n runOnJS,\n useAnimatedReaction,\n useAnimatedRef,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport { usePanGestureProxy } from \"../hooks/usePanGestureProxy\";\nimport { CTX } from \"../store\";\nimport type { WithTimingAnimation } from \"../types\";\nimport { dealWithAnimation } from \"../utils/deal-with-animation\";\n\ninterface Props {\n size: number\n infinite?: boolean\n testID?: string\n style?: StyleProp<ViewStyle>\n onScrollStart?: () => void\n onScrollEnd?: () => void\n onTouchBegin?: () => void\n onTouchEnd?: () => void\n translation: Animated.SharedValue<number>\n}\n\nconst IScrollViewGesture: React.FC<PropsWithChildren<Props>> = (props) => {\n const {\n props: {\n onConfigurePanGesture,\n vertical,\n pagingEnabled,\n snapEnabled,\n loop,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n dataLength,\n overscrollEnabled,\n maxScrollDistancePerSwipe,\n fixedDirection,\n },\n } = React.useContext(CTX);\n\n const {\n size,\n translation,\n testID,\n style = {},\n onScrollStart,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = dataLength;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const max = useSharedValue(0);\n const panOffset = useSharedValue(0);\n const touching = useSharedValue(false);\n const validStart = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n const containerRef = useAnimatedRef<Animated.View>();\n const maxScrollDistancePerSwipeIsSet = typeof maxScrollDistancePerSwipe === \"number\";\n\n // Get the limit of the scroll.\n const getLimit = React.useCallback(() => {\n \"worklet\";\n\n if (!loop && !overscrollEnabled) {\n const { width: containerWidth = 0 } = measure(containerRef);\n\n // If the item's total width is less than the container's width, then there is no need to scroll.\n if (dataLength * size < containerWidth)\n return 0;\n\n // Disable the \"overscroll\" effect\n return dataLength * size - containerWidth;\n }\n\n return dataLength * size;\n }, [loop, size, dataLength, overscrollEnabled]);\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 [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 // Default to scroll in the direction of the slide (with deceleration)\n let finalTranslation: number = withDecay({ velocity, deceleration: 0.999 });\n\n // If the distance of the swipe exceeds the max scroll distance, keep the view at the current position\n if (maxScrollDistancePerSwipeIsSet && Math.abs(scrollEndTranslation.value) > maxScrollDistancePerSwipe) {\n finalTranslation = origin;\n }\n else {\n /**\n * The page size is the same as the item size.\n * If direction is vertical, the page size is the height of the item.\n * If direction is horizontal, the page size is the width of the item.\n *\n * `page size` equals to `size` variable.\n * */\n if (pagingEnabled) {\n // distance with direction\n const offset = -(scrollEndTranslation.value >= 0 ? 1 : -1); // 1 or -1\n const computed = offset < 0 ? Math.ceil : Math.floor;\n const page = computed(-translation.value / size);\n\n if (loop) {\n const finalPage = page + offset;\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n }\n else {\n const finalPage = Math.min(maxPage - 1, Math.max(0, page + offset));\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n }\n }\n\n if (!pagingEnabled && snapEnabled) {\n // scroll to the nearest item\n const nextPage = Math.round((origin + velocity * 0.4) / size) * size;\n finalTranslation = withSpring(withProcessTranslation(nextPage), onFinished);\n }\n }\n\n translation.value = finalTranslation;\n\n function withProcessTranslation(translation: number) {\n if (!loop && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n },\n [\n withSpring,\n size,\n maxPage,\n loop,\n snapEnabled,\n translation,\n pagingEnabled,\n scrollEndVelocity.value,\n maxScrollDistancePerSwipe,\n scrollEndTranslation.value,\n maxScrollDistancePerSwipeIsSet,\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 if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!loop) {\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 (!loop)\n translation.value = withSpring(-((maxPage - 1) * size));\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n loop,\n activeDecay,\n withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled)\n resetBoundary();\n },\n [pagingEnabled, resetBoundary],\n );\n\n function withProcessTranslation(translation: number) {\n \"worklet\";\n\n if (!loop && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n\n const onGestureStart = useCallback((_: PanGestureHandlerEventPayload) => {\n \"worklet\";\n\n touching.value = true;\n validStart.value = true;\n onScrollStart && runOnJS(onScrollStart)();\n\n max.value = (maxPage - 1) * size;\n if (!loop && !overscrollEnabled)\n max.value = getLimit();\n\n panOffset.value = translation.value;\n }, [\n max,\n size,\n maxPage,\n loop,\n touching,\n panOffset,\n validStart,\n translation,\n overscrollEnabled,\n getLimit,\n onScrollStart,\n ]);\n\n const onGestureUpdate = useCallback((e: PanGestureHandlerEventPayload) => {\n \"worklet\";\n\n if (validStart.value) {\n validStart.value = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (fixedDirection === \"negative\")\n panTranslation = -Math.abs(panTranslation);\n\n else if (fixedDirection === \"positive\")\n panTranslation = +Math.abs(panTranslation);\n\n if (!loop) {\n if ((translation.value > 0 || translation.value < -max.value)) {\n const boundary = translation.value > 0 ? 0 : -max.value;\n const fixed = boundary - panOffset.value;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n }\n\n const translationValue = panOffset.value + panTranslation;\n translation.value = translationValue;\n }, [\n isHorizontal,\n max,\n panOffset,\n loop,\n overscrollEnabled,\n fixedDirection,\n translation,\n validStart,\n touching,\n ]);\n\n const onGestureEnd = useCallback((e: GestureStateChangeEvent<PanGestureHandlerEventPayload>, _success: boolean) => {\n \"worklet\";\n\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (fixedDirection === \"negative\")\n panTranslation = -Math.abs(panTranslation);\n\n else if (fixedDirection === \"positive\")\n panTranslation = +Math.abs(panTranslation);\n\n scrollEndTranslation.value = panTranslation;\n\n const totalTranslation = scrollEndVelocity.value + scrollEndTranslation.value;\n\n if (maxScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) > maxScrollDistancePerSwipe) {\n const nextPage = Math.round((panOffset.value + maxScrollDistancePerSwipe * Math.sign(totalTranslation)) / size) * size;\n translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);\n }\n else {\n endWithSpring(onScrollEnd);\n }\n\n if (!loop)\n touching.value = false;\n }, [\n size,\n loop,\n touching,\n panOffset,\n translation,\n isHorizontal,\n scrollEndVelocity,\n scrollEndTranslation,\n fixedDirection,\n maxScrollDistancePerSwipeIsSet,\n maxScrollDistancePerSwipe,\n endWithSpring,\n withSpring,\n onScrollEnd,\n ]);\n\n const gesture = usePanGestureProxy({\n onConfigurePanGesture,\n onGestureStart,\n onGestureUpdate,\n onGestureEnd,\n options: { enabled },\n });\n\n return (\n <GestureDetector gesture={gesture}>\n <Animated.View\n ref={containerRef}\n testID={testID}\n style={style}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n {props.children}\n </Animated.View>\n </GestureDetector>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n"]}
@@ -101,10 +101,10 @@ function useCarouselController(options) {
101
101
  (_options$onScrollEnd = options.onScrollEnd) === null || _options$onScrollEnd === void 0 ? void 0 : _options$onScrollEnd.call(options);
102
102
  }, [options]);
103
103
 
104
- const onScrollBegin = _react.default.useCallback(() => {
105
- var _options$onScrollBegi;
104
+ const onScrollStart = _react.default.useCallback(() => {
105
+ var _options$onScrollStar;
106
106
 
107
- (_options$onScrollBegi = options.onScrollBegin) === null || _options$onScrollBegi === void 0 ? void 0 : _options$onScrollBegi.call(options);
107
+ (_options$onScrollStar = options.onScrollStart) === null || _options$onScrollStar === void 0 ? void 0 : _options$onScrollStar.call(options);
108
108
  }, [options]);
109
109
 
110
110
  const scrollWithTiming = _react.default.useCallback((toValue, onFinished) => {
@@ -139,7 +139,7 @@ function useCarouselController(options) {
139
139
  onFinished
140
140
  } = opts;
141
141
  if (!canSliding() || !loop && index.value >= dataInfo.length - 1) return;
142
- onScrollBegin === null || onScrollBegin === void 0 ? void 0 : onScrollBegin();
142
+ onScrollStart === null || onScrollStart === void 0 ? void 0 : onScrollStart();
143
143
  const nextPage = currentFixedPage() + count;
144
144
  index.value = nextPage;
145
145
 
@@ -149,7 +149,7 @@ function useCarouselController(options) {
149
149
  handlerOffset.value = -nextPage * size;
150
150
  onFinished === null || onFinished === void 0 ? void 0 : onFinished();
151
151
  }
152
- }, [canSliding, loop, index, dataInfo, onScrollBegin, handlerOffset, size, scrollWithTiming, currentFixedPage]);
152
+ }, [canSliding, loop, index, dataInfo, onScrollStart, handlerOffset, size, scrollWithTiming, currentFixedPage]);
153
153
 
154
154
  const prev = _react.default.useCallback(function () {
155
155
  let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -159,7 +159,7 @@ function useCarouselController(options) {
159
159
  onFinished
160
160
  } = opts;
161
161
  if (!canSliding() || !loop && index.value <= 0) return;
162
- onScrollBegin === null || onScrollBegin === void 0 ? void 0 : onScrollBegin();
162
+ onScrollStart === null || onScrollStart === void 0 ? void 0 : onScrollStart();
163
163
  const prevPage = currentFixedPage() - count;
164
164
  index.value = prevPage;
165
165
 
@@ -169,7 +169,7 @@ function useCarouselController(options) {
169
169
  handlerOffset.value = -prevPage * size;
170
170
  onFinished === null || onFinished === void 0 ? void 0 : onFinished();
171
171
  }
172
- }, [canSliding, loop, index, onScrollBegin, handlerOffset, size, scrollWithTiming, currentFixedPage]);
172
+ }, [canSliding, loop, index, onScrollStart, handlerOffset, size, scrollWithTiming, currentFixedPage]);
173
173
 
174
174
  const to = _react.default.useCallback(opts => {
175
175
  const {
@@ -179,7 +179,7 @@ function useCarouselController(options) {
179
179
  } = opts;
180
180
  if (i === index.value) return;
181
181
  if (!canSliding()) return;
182
- onScrollBegin === null || onScrollBegin === void 0 ? void 0 : onScrollBegin(); // direction -> 1 | -1
182
+ onScrollStart === null || onScrollStart === void 0 ? void 0 : onScrollStart(); // direction -> 1 | -1
183
183
 
184
184
  const direction = (0, _handleroffsetDirection.handlerOffsetDirection)(handlerOffset, fixedDirection); // target offset
185
185
 
@@ -202,7 +202,7 @@ function useCarouselController(options) {
202
202
  index.value = i;
203
203
  onFinished === null || onFinished === void 0 ? void 0 : onFinished();
204
204
  }
205
- }, [size, loop, index, fixedDirection, handlerOffset, dataInfo.length, canSliding, onScrollBegin, scrollWithTiming]);
205
+ }, [size, loop, index, fixedDirection, handlerOffset, dataInfo.length, canSliding, onScrollStart, scrollWithTiming]);
206
206
 
207
207
  const scrollTo = _react.default.useCallback(function () {
208
208
  let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -1 +1 @@
1
- {"version":3,"sources":["useCarouselController.tsx"],"names":["useCarouselController","options","size","loop","dataLength","handlerOffset","withAnimation","defaultIndex","duration","autoFillData","fixedDirection","dataInfo","React","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","realIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","Easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","direction","offset","totalSize","isCloseToNextLoop","finalOffset","floor","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from \"../types\";\nimport { computedRealIndexWithAutoFillData, convertToSharedIndex } from \"../utils/computed-with-auto-fill-data\";\nimport { dealWithAnimation } from \"../utils/deal-with-animation\";\nimport { handlerOffsetDirection } from \"../utils/handleroffset-direction\";\nimport { round } from \"../utils/log\";\n\ninterface IOpts {\n loop: boolean\n size: number\n dataLength: number\n handlerOffset: Animated.SharedValue<number>\n autoFillData: TCarouselProps[\"autoFillData\"]\n withAnimation?: TCarouselProps[\"withAnimation\"]\n fixedDirection?: TCarouselProps[\"fixedDirection\"]\n duration?: number\n defaultIndex?: number\n onScrollBegin?: () => void\n onScrollEnd?: () => void\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number\n prev: (opts?: TCarouselActionOptions) => void\n next: (opts?: TCarouselActionOptions) => void\n getCurrentIndex: () => number\n scrollTo: (opts?: TCarouselActionOptions) => void\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n loop,\n dataLength,\n handlerOffset,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n fixedDirection,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: dataLength,\n disable: !dataLength,\n originalLength: dataLength,\n }),\n [dataLength],\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop)\n return -Math.round(handlerOffset.value / size);\n\n const fixed = (handlerOffset.value / size) % dataInfo.length;\n return Math.round(\n handlerOffset.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0),\n );\n }, [handlerOffset, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetValue = handlerOffset.value;\n const toInt = round(handlerOffsetValue / size) % dataInfo.length;\n const isPositive = handlerOffsetValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffset,\n ],\n );\n\n const getCurrentIndex = React.useCallback(() => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: index.value,\n dataLength: dataInfo.originalLength,\n loop,\n autoFillData: autoFillData!,\n });\n\n return realIndex;\n }, [index, autoFillData, dataInfo, loop]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const callback = (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback,\n );\n },\n [duration, withAnimation, onScrollEnd],\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n \"worklet\";\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -nextPage * size,\n onFinished,\n ) as any;\n }\n else {\n handlerOffset.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffset,\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 handlerOffset.value = scrollWithTiming(\n -prevPage * size,\n onFinished,\n );\n }\n else {\n handlerOffset.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ],\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n // direction -> 1 | -1\n const direction = handlerOffsetDirection(handlerOffset, fixedDirection);\n\n // target offset\n const offset = i * size * direction;\n // page width size * page count\n const totalSize = dataInfo.length * size;\n\n let isCloseToNextLoop = false;\n\n if (loop) {\n isCloseToNextLoop\n = Math.abs(handlerOffset.value % totalSize) / totalSize\n >= 0.5;\n }\n\n const finalOffset\n = (Math.floor(Math.abs(handlerOffset.value / totalSize))\n + (isCloseToNextLoop ? 1 : 0))\n * totalSize\n * direction\n + offset;\n\n if (animated) {\n index.value = i;\n handlerOffset.value = scrollWithTiming(finalOffset, onFinished);\n }\n else {\n handlerOffset.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n size,\n loop,\n index,\n fixedDirection,\n handlerOffset,\n dataInfo.length,\n canSliding,\n onScrollBegin,\n scrollWithTiming,\n ],\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n if (typeof i === \"number\" && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count)\n return;\n\n const n = Math.round(count);\n\n if (n < 0)\n prev({ count: Math.abs(n), animated, onFinished });\n\n else\n next({ count: n, animated, onFinished });\n },\n [prev, next, to],\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
1
+ {"version":3,"sources":["useCarouselController.tsx"],"names":["useCarouselController","options","size","loop","dataLength","handlerOffset","withAnimation","defaultIndex","duration","autoFillData","fixedDirection","dataInfo","React","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","round","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","realIndex","canSliding","onScrollEnd","onScrollStart","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","Easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","direction","offset","totalSize","isCloseToNextLoop","finalOffset","floor","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from \"../types\";\nimport { computedRealIndexWithAutoFillData, convertToSharedIndex } from \"../utils/computed-with-auto-fill-data\";\nimport { dealWithAnimation } from \"../utils/deal-with-animation\";\nimport { handlerOffsetDirection } from \"../utils/handleroffset-direction\";\nimport { round } from \"../utils/log\";\n\ninterface IOpts {\n loop: boolean\n size: number\n dataLength: number\n handlerOffset: Animated.SharedValue<number>\n autoFillData: TCarouselProps[\"autoFillData\"]\n withAnimation?: TCarouselProps[\"withAnimation\"]\n fixedDirection?: TCarouselProps[\"fixedDirection\"]\n duration?: number\n defaultIndex?: number\n onScrollStart?: () => void\n onScrollEnd?: () => void\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number\n prev: (opts?: TCarouselActionOptions) => void\n next: (opts?: TCarouselActionOptions) => void\n getCurrentIndex: () => number\n scrollTo: (opts?: TCarouselActionOptions) => void\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n loop,\n dataLength,\n handlerOffset,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n fixedDirection,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: dataLength,\n disable: !dataLength,\n originalLength: dataLength,\n }),\n [dataLength],\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop)\n return -Math.round(handlerOffset.value / size);\n\n const fixed = (handlerOffset.value / size) % dataInfo.length;\n return Math.round(\n handlerOffset.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0),\n );\n }, [handlerOffset, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetValue = handlerOffset.value;\n const toInt = round(handlerOffsetValue / size) % dataInfo.length;\n const isPositive = handlerOffsetValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffset,\n ],\n );\n\n const getCurrentIndex = React.useCallback(() => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: index.value,\n dataLength: dataInfo.originalLength,\n loop,\n autoFillData: autoFillData!,\n });\n\n return realIndex;\n }, [index, autoFillData, dataInfo, loop]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollStart = React.useCallback(() => {\n options.onScrollStart?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const callback = (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback,\n );\n },\n [duration, withAnimation, onScrollEnd],\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n \"worklet\";\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollStart?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -nextPage * size,\n onFinished,\n ) as any;\n }\n else {\n handlerOffset.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollStart,\n handlerOffset,\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 onScrollStart?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -prevPage * size,\n onFinished,\n );\n }\n else {\n handlerOffset.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollStart,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ],\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollStart?.();\n // direction -> 1 | -1\n const direction = handlerOffsetDirection(handlerOffset, fixedDirection);\n\n // target offset\n const offset = i * size * direction;\n // page width size * page count\n const totalSize = dataInfo.length * size;\n\n let isCloseToNextLoop = false;\n\n if (loop) {\n isCloseToNextLoop\n = Math.abs(handlerOffset.value % totalSize) / totalSize\n >= 0.5;\n }\n\n const finalOffset\n = (Math.floor(Math.abs(handlerOffset.value / totalSize))\n + (isCloseToNextLoop ? 1 : 0))\n * totalSize\n * direction\n + offset;\n\n if (animated) {\n index.value = i;\n handlerOffset.value = scrollWithTiming(finalOffset, onFinished);\n }\n else {\n handlerOffset.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n size,\n loop,\n index,\n fixedDirection,\n handlerOffset,\n dataInfo.length,\n canSliding,\n onScrollStart,\n scrollWithTiming,\n ],\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n if (typeof i === \"number\" && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count)\n return;\n\n const n = Math.round(count);\n\n if (n < 0)\n prev({ count: Math.abs(n), animated, onFinished });\n\n else\n next({ count: n, animated, onFinished });\n },\n [prev, next, to],\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
@@ -14,7 +14,7 @@ var _useUpdateGestureConfig = require("./useUpdateGestureConfig");
14
14
  const usePanGestureProxy = customization => {
15
15
  const {
16
16
  onConfigurePanGesture,
17
- onGestureBegin,
17
+ onGestureStart,
18
18
  onGestureUpdate,
19
19
  onGestureEnd,
20
20
  options = {}
@@ -24,20 +24,20 @@ const usePanGestureProxy = customization => {
24
24
 
25
25
 
26
26
  const originalGestures = {
27
- onBegin: gesture.onBegin,
27
+ onStart: gesture.onStart,
28
28
  onUpdate: gesture.onUpdate,
29
29
  onEnd: gesture.onEnd
30
30
  }; // Save the user defined gesture callbacks
31
31
 
32
32
  const userDefinedConflictGestures = {
33
- onBegin: undefined,
33
+ onStart: undefined,
34
34
  onUpdate: undefined,
35
35
  onEnd: undefined
36
36
  };
37
37
 
38
- const fakeOnBegin = cb => {
39
- // Using fakeOnBegin to save the user defined callback
40
- userDefinedConflictGestures.onBegin = cb;
38
+ const fakeOnStart = cb => {
39
+ // Using fakeOnStart to save the user defined callback
40
+ userDefinedConflictGestures.onStart = cb;
41
41
  return gesture;
42
42
  };
43
43
 
@@ -54,19 +54,19 @@ const usePanGestureProxy = customization => {
54
54
  }; // Setup the fake callbacks
55
55
 
56
56
 
57
- gesture.onBegin = fakeOnBegin;
57
+ gesture.onStart = fakeOnStart;
58
58
  gesture.onUpdate = fakeOnUpdate;
59
59
  gesture.onEnd = fakeOnEnd;
60
60
  if (onConfigurePanGesture) // Get the gesture with the user defined configuration
61
61
  onConfigurePanGesture(gesture); // Restore the original callbacks
62
62
 
63
- gesture.onBegin = originalGestures.onBegin;
63
+ gesture.onStart = originalGestures.onStart;
64
64
  gesture.onUpdate = originalGestures.onUpdate;
65
65
  gesture.onEnd = originalGestures.onEnd; // Setup the original callbacks with the user defined callbacks
66
66
 
67
- gesture.onBegin(e => {
68
- onGestureBegin(e);
69
- if (userDefinedConflictGestures.onBegin) userDefinedConflictGestures.onBegin(e);
67
+ gesture.onStart(e => {
68
+ onGestureStart(e);
69
+ if (userDefinedConflictGestures.onStart) userDefinedConflictGestures.onStart(e);
70
70
  }).onUpdate(e => {
71
71
  onGestureUpdate(e);
72
72
  if (userDefinedConflictGestures.onUpdate) userDefinedConflictGestures.onUpdate(e);
@@ -75,7 +75,7 @@ const usePanGestureProxy = customization => {
75
75
  if (userDefinedConflictGestures.onEnd) userDefinedConflictGestures.onEnd(e, success);
76
76
  });
77
77
  return gesture;
78
- }, [onGestureBegin, onGestureUpdate, onGestureEnd, onConfigurePanGesture]);
78
+ }, [onGestureStart, onGestureUpdate, onGestureEnd, onConfigurePanGesture]);
79
79
  (0, _useUpdateGestureConfig.useUpdateGestureConfig)(gesture, options);
80
80
  return gesture;
81
81
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["usePanGestureProxy.ts"],"names":["usePanGestureProxy","customization","onConfigurePanGesture","onGestureBegin","onGestureUpdate","onGestureEnd","options","gesture","Gesture","Pan","originalGestures","onBegin","onUpdate","onEnd","userDefinedConflictGestures","undefined","fakeOnBegin","cb","fakeOnUpdate","fakeOnEnd","e","success"],"mappings":";;;;;;;AAAA;;AAEA;;AAGA;;AAEO,MAAMA,kBAAkB,GAC7BC,aADgC,IAQ7B;AACH,QAAM;AACJC,IAAAA,qBADI;AAEJC,IAAAA,cAFI;AAGJC,IAAAA,eAHI;AAIJC,IAAAA,YAJI;AAKJC,IAAAA,OAAO,GAAG;AALN,MAMFL,aANJ;AAQA,QAAMM,OAAO,GAAG,oBAAQ,MAAM;AAC5B,UAAMA,OAAO,GAAGC,mCAAQC,GAAR,EAAhB,CAD4B,CAG5B;;;AACA,UAAMC,gBAAgB,GAAG;AACvBC,MAAAA,OAAO,EAAEJ,OAAO,CAACI,OADM;AAEvBC,MAAAA,QAAQ,EAAEL,OAAO,CAACK,QAFK;AAGvBC,MAAAA,KAAK,EAAEN,OAAO,CAACM;AAHQ,KAAzB,CAJ4B,CAU5B;;AACA,UAAMC,2BAIL,GAAG;AACFH,MAAAA,OAAO,EAAEI,SADP;AAEFH,MAAAA,QAAQ,EAAEG,SAFR;AAGFF,MAAAA,KAAK,EAAEE;AAHL,KAJJ;;AAUA,UAAMC,WAAmC,GAAIC,EAAD,IAAQ;AAClD;AACAH,MAAAA,2BAA2B,CAACH,OAA5B,GAAsCM,EAAtC;AACA,aAAOV,OAAP;AACD,KAJD;;AAMA,UAAMW,YAAqC,GAAID,EAAD,IAAQ;AACpD;AACAH,MAAAA,2BAA2B,CAACF,QAA5B,GAAuCK,EAAvC;AACA,aAAOV,OAAP;AACD,KAJD;;AAMA,UAAMY,SAA+B,GAAIF,EAAD,IAAQ;AAC9C;AACAH,MAAAA,2BAA2B,CAACD,KAA5B,GAAoCI,EAApC;AACA,aAAOV,OAAP;AACD,KAJD,CAjC4B,CAuC5B;;;AACAA,IAAAA,OAAO,CAACI,OAAR,GAAkBK,WAAlB;AACAT,IAAAA,OAAO,CAACK,QAAR,GAAmBM,YAAnB;AACAX,IAAAA,OAAO,CAACM,KAAR,GAAgBM,SAAhB;AAEA,QAAIjB,qBAAJ,EACE;AACAA,MAAAA,qBAAqB,CAACK,OAAD,CAArB,CA9C0B,CAgD5B;;AACAA,IAAAA,OAAO,CAACI,OAAR,GAAkBD,gBAAgB,CAACC,OAAnC;AACAJ,IAAAA,OAAO,CAACK,QAAR,GAAmBF,gBAAgB,CAACE,QAApC;AACAL,IAAAA,OAAO,CAACM,KAAR,GAAgBH,gBAAgB,CAACG,KAAjC,CAnD4B,CAqD5B;;AACAN,IAAAA,OAAO,CACJI,OADH,CACYS,CAAD,IAAO;AACdjB,MAAAA,cAAc,CAACiB,CAAD,CAAd;AAEA,UAAIN,2BAA2B,CAACH,OAAhC,EACEG,2BAA2B,CAACH,OAA5B,CAAoCS,CAApC;AACH,KANH,EAOGR,QAPH,CAOaQ,CAAD,IAAO;AACfhB,MAAAA,eAAe,CAACgB,CAAD,CAAf;AAEA,UAAIN,2BAA2B,CAACF,QAAhC,EACEE,2BAA2B,CAACF,QAA5B,CAAqCQ,CAArC;AACH,KAZH,EAaGP,KAbH,CAaS,CAACO,CAAD,EAAIC,OAAJ,KAAgB;AACrBhB,MAAAA,YAAY,CAACe,CAAD,EAAIC,OAAJ,CAAZ;AAEA,UAAIP,2BAA2B,CAACD,KAAhC,EACEC,2BAA2B,CAACD,KAA5B,CAAkCO,CAAlC,EAAqCC,OAArC;AACH,KAlBH;AAoBA,WAAOd,OAAP;AACD,GA3Ee,EA2Eb,CACDJ,cADC,EAEDC,eAFC,EAGDC,YAHC,EAIDH,qBAJC,CA3Ea,CAAhB;AAkFA,sDAAuBK,OAAvB,EAAgCD,OAAhC;AAEA,SAAOC,OAAP;AACD,CAtGM","sourcesContent":["import { useMemo } from \"react\";\nimport type { GestureStateChangeEvent, GestureUpdateEvent, PanGesture, PanGestureHandlerEventPayload } from \"react-native-gesture-handler\";\nimport { Gesture } from \"react-native-gesture-handler\";\n\nimport type { GestureConfig } from \"./useUpdateGestureConfig\";\nimport { useUpdateGestureConfig } from \"./useUpdateGestureConfig\";\n\nexport const usePanGestureProxy = (\n customization: {\n onConfigurePanGesture?: (gesture: PanGesture) => void\n onGestureBegin: (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => void\n onGestureUpdate: (event: GestureUpdateEvent<PanGestureHandlerEventPayload>) => void\n onGestureEnd: (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>, success: boolean) => void\n options?: GestureConfig\n },\n) => {\n const {\n onConfigurePanGesture,\n onGestureBegin,\n onGestureUpdate,\n onGestureEnd,\n options = {},\n } = customization;\n\n const gesture = useMemo(() => {\n const gesture = Gesture.Pan();\n\n // Save the original gesture callbacks\n const originalGestures = {\n onBegin: gesture.onBegin,\n onUpdate: gesture.onUpdate,\n onEnd: gesture.onEnd,\n };\n\n // Save the user defined gesture callbacks\n const userDefinedConflictGestures: {\n onBegin?: Parameters<(typeof gesture)[\"onBegin\"]>[0]\n onUpdate?: Parameters<(typeof gesture)[\"onUpdate\"]>[0]\n onEnd?: Parameters<(typeof gesture)[\"onEnd\"]>[0]\n } = {\n onBegin: undefined,\n onUpdate: undefined,\n onEnd: undefined,\n };\n\n const fakeOnBegin: typeof gesture.onBegin = (cb) => {\n // Using fakeOnBegin to save the user defined callback\n userDefinedConflictGestures.onBegin = cb;\n return gesture;\n };\n\n const fakeOnUpdate: typeof gesture.onUpdate = (cb) => {\n // Using fakeOnUpdate to save the user defined callback\n userDefinedConflictGestures.onUpdate = cb;\n return gesture;\n };\n\n const fakeOnEnd: typeof gesture.onEnd = (cb) => {\n // Using fakeOnEnd to save the user defined callback\n userDefinedConflictGestures.onEnd = cb;\n return gesture;\n };\n\n // Setup the fake callbacks\n gesture.onBegin = fakeOnBegin;\n gesture.onUpdate = fakeOnUpdate;\n gesture.onEnd = fakeOnEnd;\n\n if (onConfigurePanGesture)\n // Get the gesture with the user defined configuration\n onConfigurePanGesture(gesture);\n\n // Restore the original callbacks\n gesture.onBegin = originalGestures.onBegin;\n gesture.onUpdate = originalGestures.onUpdate;\n gesture.onEnd = originalGestures.onEnd;\n\n // Setup the original callbacks with the user defined callbacks\n gesture\n .onBegin((e) => {\n onGestureBegin(e);\n\n if (userDefinedConflictGestures.onBegin)\n userDefinedConflictGestures.onBegin(e);\n })\n .onUpdate((e) => {\n onGestureUpdate(e);\n\n if (userDefinedConflictGestures.onUpdate)\n userDefinedConflictGestures.onUpdate(e);\n })\n .onEnd((e, success) => {\n onGestureEnd(e, success);\n\n if (userDefinedConflictGestures.onEnd)\n userDefinedConflictGestures.onEnd(e, success);\n });\n\n return gesture;\n }, [\n onGestureBegin,\n onGestureUpdate,\n onGestureEnd,\n onConfigurePanGesture,\n ]);\n\n useUpdateGestureConfig(gesture, options);\n\n return gesture;\n};\n"]}
1
+ {"version":3,"sources":["usePanGestureProxy.ts"],"names":["usePanGestureProxy","customization","onConfigurePanGesture","onGestureStart","onGestureUpdate","onGestureEnd","options","gesture","Gesture","Pan","originalGestures","onStart","onUpdate","onEnd","userDefinedConflictGestures","undefined","fakeOnStart","cb","fakeOnUpdate","fakeOnEnd","e","success"],"mappings":";;;;;;;AAAA;;AAEA;;AAGA;;AAEO,MAAMA,kBAAkB,GAC7BC,aADgC,IAQ7B;AACH,QAAM;AACJC,IAAAA,qBADI;AAEJC,IAAAA,cAFI;AAGJC,IAAAA,eAHI;AAIJC,IAAAA,YAJI;AAKJC,IAAAA,OAAO,GAAG;AALN,MAMFL,aANJ;AAQA,QAAMM,OAAO,GAAG,oBAAQ,MAAM;AAC5B,UAAMA,OAAO,GAAGC,mCAAQC,GAAR,EAAhB,CAD4B,CAG5B;;;AACA,UAAMC,gBAAgB,GAAG;AACvBC,MAAAA,OAAO,EAAEJ,OAAO,CAACI,OADM;AAEvBC,MAAAA,QAAQ,EAAEL,OAAO,CAACK,QAFK;AAGvBC,MAAAA,KAAK,EAAEN,OAAO,CAACM;AAHQ,KAAzB,CAJ4B,CAU5B;;AACA,UAAMC,2BAIL,GAAG;AACFH,MAAAA,OAAO,EAAEI,SADP;AAEFH,MAAAA,QAAQ,EAAEG,SAFR;AAGFF,MAAAA,KAAK,EAAEE;AAHL,KAJJ;;AAUA,UAAMC,WAAmC,GAAIC,EAAD,IAAQ;AAClD;AACAH,MAAAA,2BAA2B,CAACH,OAA5B,GAAsCM,EAAtC;AACA,aAAOV,OAAP;AACD,KAJD;;AAMA,UAAMW,YAAqC,GAAID,EAAD,IAAQ;AACpD;AACAH,MAAAA,2BAA2B,CAACF,QAA5B,GAAuCK,EAAvC;AACA,aAAOV,OAAP;AACD,KAJD;;AAMA,UAAMY,SAA+B,GAAIF,EAAD,IAAQ;AAC9C;AACAH,MAAAA,2BAA2B,CAACD,KAA5B,GAAoCI,EAApC;AACA,aAAOV,OAAP;AACD,KAJD,CAjC4B,CAuC5B;;;AACAA,IAAAA,OAAO,CAACI,OAAR,GAAkBK,WAAlB;AACAT,IAAAA,OAAO,CAACK,QAAR,GAAmBM,YAAnB;AACAX,IAAAA,OAAO,CAACM,KAAR,GAAgBM,SAAhB;AAEA,QAAIjB,qBAAJ,EACE;AACAA,MAAAA,qBAAqB,CAACK,OAAD,CAArB,CA9C0B,CAgD5B;;AACAA,IAAAA,OAAO,CAACI,OAAR,GAAkBD,gBAAgB,CAACC,OAAnC;AACAJ,IAAAA,OAAO,CAACK,QAAR,GAAmBF,gBAAgB,CAACE,QAApC;AACAL,IAAAA,OAAO,CAACM,KAAR,GAAgBH,gBAAgB,CAACG,KAAjC,CAnD4B,CAqD5B;;AACAN,IAAAA,OAAO,CACJI,OADH,CACYS,CAAD,IAAO;AACdjB,MAAAA,cAAc,CAACiB,CAAD,CAAd;AAEA,UAAIN,2BAA2B,CAACH,OAAhC,EACEG,2BAA2B,CAACH,OAA5B,CAAoCS,CAApC;AACH,KANH,EAOGR,QAPH,CAOaQ,CAAD,IAAO;AACfhB,MAAAA,eAAe,CAACgB,CAAD,CAAf;AAEA,UAAIN,2BAA2B,CAACF,QAAhC,EACEE,2BAA2B,CAACF,QAA5B,CAAqCQ,CAArC;AACH,KAZH,EAaGP,KAbH,CAaS,CAACO,CAAD,EAAIC,OAAJ,KAAgB;AACrBhB,MAAAA,YAAY,CAACe,CAAD,EAAIC,OAAJ,CAAZ;AAEA,UAAIP,2BAA2B,CAACD,KAAhC,EACEC,2BAA2B,CAACD,KAA5B,CAAkCO,CAAlC,EAAqCC,OAArC;AACH,KAlBH;AAoBA,WAAOd,OAAP;AACD,GA3Ee,EA2Eb,CACDJ,cADC,EAEDC,eAFC,EAGDC,YAHC,EAIDH,qBAJC,CA3Ea,CAAhB;AAkFA,sDAAuBK,OAAvB,EAAgCD,OAAhC;AAEA,SAAOC,OAAP;AACD,CAtGM","sourcesContent":["import { useMemo } from \"react\";\nimport type { GestureStateChangeEvent, GestureUpdateEvent, PanGesture, PanGestureHandlerEventPayload } from \"react-native-gesture-handler\";\nimport { Gesture } from \"react-native-gesture-handler\";\n\nimport type { GestureConfig } from \"./useUpdateGestureConfig\";\nimport { useUpdateGestureConfig } from \"./useUpdateGestureConfig\";\n\nexport const usePanGestureProxy = (\n customization: {\n onConfigurePanGesture?: (gesture: PanGesture) => void\n onGestureStart: (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => void\n onGestureUpdate: (event: GestureUpdateEvent<PanGestureHandlerEventPayload>) => void\n onGestureEnd: (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>, success: boolean) => void\n options?: GestureConfig\n },\n) => {\n const {\n onConfigurePanGesture,\n onGestureStart,\n onGestureUpdate,\n onGestureEnd,\n options = {},\n } = customization;\n\n const gesture = useMemo(() => {\n const gesture = Gesture.Pan();\n\n // Save the original gesture callbacks\n const originalGestures = {\n onStart: gesture.onStart,\n onUpdate: gesture.onUpdate,\n onEnd: gesture.onEnd,\n };\n\n // Save the user defined gesture callbacks\n const userDefinedConflictGestures: {\n onStart?: Parameters<(typeof gesture)[\"onStart\"]>[0]\n onUpdate?: Parameters<(typeof gesture)[\"onUpdate\"]>[0]\n onEnd?: Parameters<(typeof gesture)[\"onEnd\"]>[0]\n } = {\n onStart: undefined,\n onUpdate: undefined,\n onEnd: undefined,\n };\n\n const fakeOnStart: typeof gesture.onStart = (cb) => {\n // Using fakeOnStart to save the user defined callback\n userDefinedConflictGestures.onStart = cb;\n return gesture;\n };\n\n const fakeOnUpdate: typeof gesture.onUpdate = (cb) => {\n // Using fakeOnUpdate to save the user defined callback\n userDefinedConflictGestures.onUpdate = cb;\n return gesture;\n };\n\n const fakeOnEnd: typeof gesture.onEnd = (cb) => {\n // Using fakeOnEnd to save the user defined callback\n userDefinedConflictGestures.onEnd = cb;\n return gesture;\n };\n\n // Setup the fake callbacks\n gesture.onStart = fakeOnStart;\n gesture.onUpdate = fakeOnUpdate;\n gesture.onEnd = fakeOnEnd;\n\n if (onConfigurePanGesture)\n // Get the gesture with the user defined configuration\n onConfigurePanGesture(gesture);\n\n // Restore the original callbacks\n gesture.onStart = originalGestures.onStart;\n gesture.onUpdate = originalGestures.onUpdate;\n gesture.onEnd = originalGestures.onEnd;\n\n // Setup the original callbacks with the user defined callbacks\n gesture\n .onStart((e) => {\n onGestureStart(e);\n\n if (userDefinedConflictGestures.onStart)\n userDefinedConflictGestures.onStart(e);\n })\n .onUpdate((e) => {\n onGestureUpdate(e);\n\n if (userDefinedConflictGestures.onUpdate)\n userDefinedConflictGestures.onUpdate(e);\n })\n .onEnd((e, success) => {\n onGestureEnd(e, success);\n\n if (userDefinedConflictGestures.onEnd)\n userDefinedConflictGestures.onEnd(e, success);\n });\n\n return gesture;\n }, [\n onGestureStart,\n onGestureUpdate,\n onGestureEnd,\n onConfigurePanGesture,\n ]);\n\n useUpdateGestureConfig(gesture, options);\n\n return gesture;\n};\n"]}
@@ -50,9 +50,9 @@ describe("Using RNGH v2 gesture API", () => {
50
50
  const pan = (0, _usePanGestureProxy.usePanGestureProxy)({
51
51
  onConfigurePanGesture: gesture => {
52
52
  // This is user's customizations
53
- gesture.onStart(treatStartAsUpdate ? handlers.active : handlers.start).onBegin(handlersFromUser.begin).onUpdate(handlersFromUser.active).onEnd(handlersFromUser.end).onFinalize(handlers.finish).withTestId("pan");
53
+ gesture.onBegin(handlersFromUser.begin).onUpdate(handlersFromUser.active).onEnd(handlersFromUser.end).onFinalize(handlers.finish).withTestId("pan");
54
54
  },
55
- onGestureBegin: handlers.begin,
55
+ onGestureStart: treatStartAsUpdate ? handlers.active : handlers.start,
56
56
  onGestureUpdate: handlers.active,
57
57
  onGestureEnd: handlers.end,
58
58
  options: {
@@ -74,9 +74,9 @@ describe("Using RNGH v2 gesture API", () => {
74
74
 
75
75
  const pan = (0, _usePanGestureProxy.usePanGestureProxy)({
76
76
  onConfigurePanGesture: _ => {
77
- _.onFinalize(panHandlers.finish).withTestId("pan");
77
+ _.onBegin(panHandlers.begin).onFinalize(panHandlers.finish).withTestId("pan");
78
78
  },
79
- onGestureBegin: panHandlers.begin,
79
+ onGestureStart: panHandlers.start,
80
80
  onGestureUpdate: panHandlers.active,
81
81
  onGestureEnd: panHandlers.end,
82
82
  options: {
@@ -148,9 +148,9 @@ describe("Event list validation", () => {
148
148
  } = _ref3;
149
149
  const pan = (0, _usePanGestureProxy.usePanGestureProxy)({
150
150
  onConfigurePanGesture: _ => {
151
- _.onStart(treatStartAsUpdate ? handlers.active : handlers.start).onBegin(handlersFromUser.begin).onUpdate(handlersFromUser.active).onEnd(handlersFromUser.end).onFinalize(handlers.finish).withTestId("pan");
151
+ _.onBegin(handlersFromUser.begin).onUpdate(handlersFromUser.active).onEnd(handlersFromUser.end).onFinalize(handlers.finish).withTestId("pan");
152
152
  },
153
- onGestureBegin: handlers.begin,
153
+ onGestureStart: treatStartAsUpdate ? handlers.active : handlers.start,
154
154
  onGestureUpdate: handlers.active,
155
155
  onGestureEnd: handlers.end,
156
156
  options: {
@@ -214,9 +214,9 @@ describe("Filling event list with defaults", () => {
214
214
 
215
215
  const pan = (0, _usePanGestureProxy.usePanGestureProxy)({
216
216
  onConfigurePanGesture: _ => {
217
- _.onStart(treatStartAsUpdate ? handlers.active : handlers.start).onFinalize(handlers.finish).withTestId("pan");
217
+ _.onBegin(handlers.begin).onFinalize(handlers.finish).withTestId("pan");
218
218
  },
219
- onGestureBegin: handlers.begin,
219
+ onGestureStart: treatStartAsUpdate ? handlers.active : handlers.start,
220
220
  onGestureUpdate: handlers.active,
221
221
  onGestureEnd: handlers.end,
222
222
  options: {