react-native-reanimated-carousel 4.0.0-alpha.5 → 4.0.0-alpha.6

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 (70) hide show
  1. package/lib/commonjs/{layouts → components}/BaseLayout.js +4 -2
  2. package/lib/commonjs/components/BaseLayout.js.map +1 -0
  3. package/lib/commonjs/components/Carousel.js +4 -3
  4. package/lib/commonjs/components/Carousel.js.map +1 -1
  5. package/lib/commonjs/components/ScrollViewGesture.js +34 -30
  6. package/lib/commonjs/components/ScrollViewGesture.js.map +1 -1
  7. package/lib/commonjs/hooks/useLayoutConfig.js.map +1 -1
  8. package/lib/commonjs/hooks/useOffsetX.js +9 -6
  9. package/lib/commonjs/hooks/useOffsetX.js.map +1 -1
  10. package/lib/commonjs/hooks/useOffsetX.test.js +53 -0
  11. package/lib/commonjs/hooks/useOffsetX.test.js.map +1 -0
  12. package/lib/commonjs/hooks/usePanGestureProxy.js +84 -0
  13. package/lib/commonjs/hooks/usePanGestureProxy.js.map +1 -0
  14. package/lib/commonjs/hooks/usePanGestureProxy.test.js +397 -0
  15. package/lib/commonjs/hooks/usePanGestureProxy.test.js.map +1 -0
  16. package/lib/commonjs/hooks/useUpdateGestureConfig.js.map +1 -1
  17. package/lib/commonjs/hooks/useVisibleRanges.js +17 -6
  18. package/lib/commonjs/hooks/useVisibleRanges.js.map +1 -1
  19. package/lib/commonjs/hooks/useVisibleRanges.test.js +162 -0
  20. package/lib/commonjs/hooks/useVisibleRanges.test.js.map +1 -0
  21. package/lib/module/{layouts → components}/BaseLayout.js +4 -2
  22. package/lib/module/components/BaseLayout.js.map +1 -0
  23. package/lib/module/components/Carousel.js +3 -2
  24. package/lib/module/components/Carousel.js.map +1 -1
  25. package/lib/module/components/ScrollViewGesture.js +36 -31
  26. package/lib/module/components/ScrollViewGesture.js.map +1 -1
  27. package/lib/module/hooks/useLayoutConfig.js.map +1 -1
  28. package/lib/module/hooks/useOffsetX.js +9 -6
  29. package/lib/module/hooks/useOffsetX.js.map +1 -1
  30. package/lib/module/hooks/useOffsetX.test.js +48 -0
  31. package/lib/module/hooks/useOffsetX.test.js.map +1 -0
  32. package/lib/module/hooks/usePanGestureProxy.js +71 -0
  33. package/lib/module/hooks/usePanGestureProxy.js.map +1 -0
  34. package/lib/module/hooks/usePanGestureProxy.test.js +383 -0
  35. package/lib/module/hooks/usePanGestureProxy.test.js.map +1 -0
  36. package/lib/module/hooks/useUpdateGestureConfig.js.map +1 -1
  37. package/lib/module/hooks/useVisibleRanges.js +17 -6
  38. package/lib/module/hooks/useVisibleRanges.js.map +1 -1
  39. package/lib/module/hooks/useVisibleRanges.test.js +157 -0
  40. package/lib/module/hooks/useVisibleRanges.test.js.map +1 -0
  41. package/lib/typescript/hooks/useLayoutConfig.d.ts +1 -1
  42. package/lib/typescript/hooks/useOffsetX.test.d.ts +1 -0
  43. package/lib/typescript/hooks/usePanGestureProxy.d.ts +9 -0
  44. package/lib/typescript/hooks/usePanGestureProxy.test.d.ts +1 -0
  45. package/lib/typescript/hooks/useUpdateGestureConfig.d.ts +3 -2
  46. package/lib/typescript/hooks/useVisibleRanges.d.ts +1 -0
  47. package/lib/typescript/hooks/useVisibleRanges.test.d.ts +1 -0
  48. package/lib/typescript/types.d.ts +5 -0
  49. package/package.json +2 -1
  50. package/src/{layouts → components}/BaseLayout.tsx +10 -8
  51. package/src/components/Carousel.tsx +2 -1
  52. package/src/components/ScrollViewGesture.tsx +48 -43
  53. package/src/hooks/useLayoutConfig.ts +1 -1
  54. package/src/hooks/useOffsetX.test.ts +54 -0
  55. package/src/hooks/useOffsetX.ts +33 -31
  56. package/src/hooks/usePanGestureProxy.test.tsx +377 -0
  57. package/src/hooks/usePanGestureProxy.ts +110 -0
  58. package/src/hooks/useUpdateGestureConfig.ts +4 -2
  59. package/src/hooks/useVisibleRanges.test.tsx +179 -0
  60. package/src/hooks/useVisibleRanges.tsx +23 -7
  61. package/src/types.ts +5 -0
  62. package/lib/commonjs/layouts/BaseLayout.js.map +0 -1
  63. package/lib/commonjs/layouts/ParallaxLayout.js +0 -84
  64. package/lib/commonjs/layouts/ParallaxLayout.js.map +0 -1
  65. package/lib/module/layouts/BaseLayout.js.map +0 -1
  66. package/lib/module/layouts/ParallaxLayout.js +0 -61
  67. package/lib/module/layouts/ParallaxLayout.js.map +0 -1
  68. package/lib/typescript/layouts/ParallaxLayout.d.ts +0 -13
  69. package/src/layouts/ParallaxLayout.tsx +0 -141
  70. /package/lib/typescript/{layouts → components}/BaseLayout.d.ts +0 -0
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+
3
+ var _reactNativeReanimated = require("react-native-reanimated");
4
+
5
+ var _reactHooks = require("@testing-library/react-hooks");
6
+
7
+ var _useVisibleRanges = require("./useVisibleRanges");
8
+
9
+ const viewSize = 393;
10
+ describe("useVisibleRanges", () => {
11
+ it("should only display the front of the list when loop is false", async () => {
12
+ const hook = (0, _reactHooks.renderHook)(() => {
13
+ const translation = (0, _reactNativeReanimated.useSharedValue)(-0);
14
+ const range = (0, _useVisibleRanges.useVisibleRanges)({
15
+ total: 10,
16
+ translation,
17
+ viewSize,
18
+ windowSize: 4,
19
+ loop: false
20
+ });
21
+ return range;
22
+ });
23
+ const expected = hook.result.current.value;
24
+ expect(expected).toMatchInlineSnapshot(`
25
+ {
26
+ "negativeRange": [
27
+ -3,
28
+ 0,
29
+ ],
30
+ "positiveRange": [
31
+ 0,
32
+ 3,
33
+ ],
34
+ }
35
+ `);
36
+ });
37
+ it("should display the rear of the list and the front of the list when loop is true", async () => {
38
+ const hook = (0, _reactHooks.renderHook)(() => {
39
+ const translation = (0, _reactNativeReanimated.useSharedValue)(-0);
40
+ const range = (0, _useVisibleRanges.useVisibleRanges)({
41
+ total: 10,
42
+ translation,
43
+ viewSize,
44
+ windowSize: 4,
45
+ loop: true
46
+ });
47
+ return range;
48
+ });
49
+ const expected = hook.result.current.value;
50
+ expect(expected).toMatchInlineSnapshot(`
51
+ {
52
+ "negativeRange": [
53
+ 8,
54
+ 9,
55
+ ],
56
+ "positiveRange": [
57
+ 0,
58
+ 2,
59
+ ],
60
+ }
61
+ `);
62
+ });
63
+ it("should shows the increased range of the list when the loop is false and swiped the carousel.", async () => {
64
+ const slide0hook = (0, _reactHooks.renderHook)(() => {
65
+ const translation = (0, _reactNativeReanimated.useSharedValue)(-0 * viewSize);
66
+ const range = (0, _useVisibleRanges.useVisibleRanges)({
67
+ total: 10,
68
+ translation,
69
+ viewSize,
70
+ windowSize: 4,
71
+ loop: false
72
+ });
73
+ return range;
74
+ }).result.current.value;
75
+ const slide1hook = (0, _reactHooks.renderHook)(() => {
76
+ const translation = (0, _reactNativeReanimated.useSharedValue)(-1 * viewSize);
77
+ const range = (0, _useVisibleRanges.useVisibleRanges)({
78
+ total: 10,
79
+ translation,
80
+ viewSize,
81
+ windowSize: 4,
82
+ loop: false
83
+ });
84
+ return range;
85
+ }).result.current.value;
86
+ const slide2hook = (0, _reactHooks.renderHook)(() => {
87
+ const translation = (0, _reactNativeReanimated.useSharedValue)(-2 * viewSize);
88
+ const range = (0, _useVisibleRanges.useVisibleRanges)({
89
+ total: 10,
90
+ translation,
91
+ viewSize,
92
+ windowSize: 4,
93
+ loop: false
94
+ });
95
+ return range;
96
+ }).result.current.value;
97
+ const slide3hook = (0, _reactHooks.renderHook)(() => {
98
+ const translation = (0, _reactNativeReanimated.useSharedValue)(-3 * viewSize);
99
+ const range = (0, _useVisibleRanges.useVisibleRanges)({
100
+ total: 10,
101
+ translation,
102
+ viewSize,
103
+ windowSize: 4,
104
+ loop: false
105
+ });
106
+ return range;
107
+ }).result.current.value; // [0,3] Display the 0,1,2,3 items.
108
+
109
+ expect(slide0hook).toMatchInlineSnapshot(`
110
+ {
111
+ "negativeRange": [
112
+ -3,
113
+ 0,
114
+ ],
115
+ "positiveRange": [
116
+ 0,
117
+ 3,
118
+ ],
119
+ }
120
+ `); // [1,4] Display the 1,2,3,4 items.
121
+
122
+ expect(slide1hook).toMatchInlineSnapshot(`
123
+ {
124
+ "negativeRange": [
125
+ -2,
126
+ 1,
127
+ ],
128
+ "positiveRange": [
129
+ 1,
130
+ 4,
131
+ ],
132
+ }
133
+ `); // [2,5] Display the 2,3,4,5 items.
134
+
135
+ expect(slide2hook).toMatchInlineSnapshot(`
136
+ {
137
+ "negativeRange": [
138
+ -1,
139
+ 2,
140
+ ],
141
+ "positiveRange": [
142
+ 2,
143
+ 5,
144
+ ],
145
+ }
146
+ `); // [3.6] Display the 3,4,5,6 items.
147
+
148
+ expect(slide3hook).toMatchInlineSnapshot(`
149
+ {
150
+ "negativeRange": [
151
+ 0,
152
+ 3,
153
+ ],
154
+ "positiveRange": [
155
+ 3,
156
+ 6,
157
+ ],
158
+ }
159
+ `);
160
+ });
161
+ });
162
+ //# sourceMappingURL=useVisibleRanges.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useVisibleRanges.test.tsx"],"names":["viewSize","describe","it","hook","translation","range","total","windowSize","loop","expected","result","current","value","expect","toMatchInlineSnapshot","slide0hook","slide1hook","slide2hook","slide3hook"],"mappings":"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","sourcesContent":["import { useSharedValue } from \"react-native-reanimated\";\n\nimport { renderHook } from \"@testing-library/react-hooks\";\n\nimport { useVisibleRanges } from \"./useVisibleRanges\";\n\nconst viewSize = 393;\n\ndescribe(\"useVisibleRanges\", () => {\n it(\"should only display the front of the list when loop is false\", async () => {\n const hook = renderHook(() => {\n const translation = useSharedValue(-0);\n const range = useVisibleRanges({\n total: 10,\n translation,\n viewSize,\n windowSize: 4,\n loop: false,\n });\n\n return range;\n });\n\n const expected = hook.result.current.value;\n\n expect(expected).toMatchInlineSnapshot(`\n {\n \"negativeRange\": [\n -3,\n 0,\n ],\n \"positiveRange\": [\n 0,\n 3,\n ],\n }\n `);\n });\n\n it(\"should display the rear of the list and the front of the list when loop is true\", async () => {\n const hook = renderHook(() => {\n const translation = useSharedValue(-0);\n const range = useVisibleRanges({\n total: 10,\n translation,\n viewSize,\n windowSize: 4,\n loop: true,\n });\n\n return range;\n });\n\n const expected = hook.result.current.value;\n\n expect(expected).toMatchInlineSnapshot(`\n {\n \"negativeRange\": [\n 8,\n 9,\n ],\n \"positiveRange\": [\n 0,\n 2,\n ],\n }\n `);\n });\n\n it(\"should shows the increased range of the list when the loop is false and swiped the carousel.\", async () => {\n const slide0hook = renderHook(() => {\n const translation = useSharedValue(-0 * viewSize);\n const range = useVisibleRanges({\n total: 10,\n translation,\n viewSize,\n windowSize: 4,\n loop: false,\n });\n\n return range;\n }).result.current.value;\n\n const slide1hook = renderHook(() => {\n const translation = useSharedValue(-1 * viewSize);\n const range = useVisibleRanges({\n total: 10,\n translation,\n viewSize,\n windowSize: 4,\n loop: false,\n });\n\n return range;\n }).result.current.value;\n\n const slide2hook = renderHook(() => {\n const translation = useSharedValue(-2 * viewSize);\n const range = useVisibleRanges({\n total: 10,\n translation,\n viewSize,\n windowSize: 4,\n loop: false,\n });\n\n return range;\n }).result.current.value;\n\n const slide3hook = renderHook(() => {\n const translation = useSharedValue(-3 * viewSize);\n const range = useVisibleRanges({\n total: 10,\n translation,\n viewSize,\n windowSize: 4,\n loop: false,\n });\n\n return range;\n }).result.current.value;\n\n // [0,3] Display the 0,1,2,3 items.\n expect(slide0hook).toMatchInlineSnapshot(`\n {\n \"negativeRange\": [\n -3,\n 0,\n ],\n \"positiveRange\": [\n 0,\n 3,\n ],\n }\n `);\n\n // [1,4] Display the 1,2,3,4 items.\n expect(slide1hook).toMatchInlineSnapshot(`\n {\n \"negativeRange\": [\n -2,\n 1,\n ],\n \"positiveRange\": [\n 1,\n 4,\n ],\n }\n `);\n\n // [2,5] Display the 2,3,4,5 items.\n expect(slide2hook).toMatchInlineSnapshot(`\n {\n \"negativeRange\": [\n -1,\n 2,\n ],\n \"positiveRange\": [\n 2,\n 5,\n ],\n }\n `);\n\n // [3.6] Display the 3,4,5,6 items.\n expect(slide3hook).toMatchInlineSnapshot(`\n {\n \"negativeRange\": [\n 0,\n 3,\n ],\n \"positiveRange\": [\n 3,\n 6,\n ],\n }\n `);\n });\n});\n"]}
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import Animated, { runOnJS, useAnimatedReaction, useAnimatedStyle, useDerivedValue } from "react-native-reanimated";
3
- import { LazyView } from "../components/LazyView";
3
+ import { LazyView } from "./LazyView";
4
4
  import { useCheckMounted } from "../hooks/useCheckMounted";
5
5
  import { useOffsetX } from "../hooks/useOffsetX";
6
6
  import { CTX } from "../store";
@@ -55,7 +55,9 @@ export const BaseLayout = props => {
55
55
 
56
56
  const x = useOffsetX(offsetXConfig, visibleRanges);
57
57
  const animationValue = useDerivedValue(() => x.value / size, [x, size]);
58
- const animatedStyle = useAnimatedStyle(() => animationStyle(x.value / size), [animationStyle]);
58
+ const animatedStyle = useAnimatedStyle(() => {
59
+ return animationStyle(x.value / size);
60
+ }, [animationStyle]);
59
61
  const updateView = React.useCallback((negativeRange, positiveRange) => {
60
62
  mounted.current && setShouldUpdate(index >= negativeRange[0] && index <= negativeRange[1] || index >= positiveRange[0] && index <= positiveRange[1]);
61
63
  }, [index, mounted]);
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["BaseLayout.tsx"],"names":["React","Animated","runOnJS","useAnimatedReaction","useAnimatedStyle","useDerivedValue","LazyView","useCheckMounted","useOffsetX","CTX","BaseLayout","props","mounted","handlerOffset","index","children","visibleRanges","animationStyle","context","useContext","loop","dataLength","width","height","vertical","customConfig","mode","modeConfig","size","shouldUpdate","setShouldUpdate","useState","offsetXConfig","snapDirection","showLength","type","viewCount","x","animationValue","value","animatedStyle","updateView","useCallback","negativeRange","positiveRange","current","position"],"mappings":"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","sourcesContent":["import React from \"react\";\nimport type { ViewStyle } from \"react-native\";\nimport type { AnimatedStyleProp } from \"react-native-reanimated\";\nimport Animated, {\n runOnJS,\n useAnimatedReaction,\n useAnimatedStyle,\n useDerivedValue,\n} from \"react-native-reanimated\";\n\nimport { LazyView } from \"./LazyView\";\n\nimport { useCheckMounted } from \"../hooks/useCheckMounted\";\nimport type { IOpts } from \"../hooks/useOffsetX\";\nimport { useOffsetX } from \"../hooks/useOffsetX\";\nimport type { IVisibleRanges } from \"../hooks/useVisibleRanges\";\nimport type { ILayoutConfig } from \"../layouts/stack\";\nimport { CTX } from \"../store\";\n\nexport type TAnimationStyle = (value: number) => AnimatedStyleProp<ViewStyle>;\n\nexport const BaseLayout: React.FC<{\n index: number\n handlerOffset: Animated.SharedValue<number>\n visibleRanges: IVisibleRanges\n animationStyle: TAnimationStyle\n children: (ctx: {\n animationValue: Animated.SharedValue<number>\n }) => React.ReactElement\n}> = (props) => {\n const mounted = useCheckMounted();\n const { handlerOffset, index, children, visibleRanges, animationStyle }\n = props;\n\n const context = React.useContext(CTX);\n const {\n props: {\n loop,\n dataLength,\n width,\n height,\n vertical,\n customConfig,\n mode,\n modeConfig,\n },\n } = context;\n const size = vertical ? height : width;\n const [shouldUpdate, setShouldUpdate] = React.useState(false);\n let offsetXConfig: IOpts = {\n handlerOffset,\n index,\n size,\n dataLength,\n loop,\n ...(typeof customConfig === \"function\" ? customConfig() : {}),\n };\n\n if (mode === \"horizontal-stack\") {\n const { snapDirection, showLength } = modeConfig as ILayoutConfig;\n\n offsetXConfig = {\n handlerOffset,\n index,\n size,\n dataLength,\n loop,\n type: snapDirection === \"right\" ? \"negative\" : \"positive\",\n viewCount: showLength,\n };\n }\n\n const x = useOffsetX(offsetXConfig, visibleRanges);\n const animationValue = useDerivedValue(() => x.value / size, [x, size]);\n const animatedStyle = useAnimatedStyle(\n () => {\n return animationStyle(x.value / size);\n },\n [animationStyle],\n );\n\n const updateView = React.useCallback(\n (negativeRange: number[], positiveRange: number[]) => {\n mounted.current\n && setShouldUpdate(\n (index >= negativeRange[0] && index <= negativeRange[1])\n || (index >= positiveRange[0] && index <= positiveRange[1]),\n );\n },\n [index, mounted],\n );\n\n useAnimatedReaction(\n () => visibleRanges.value,\n () => {\n runOnJS(updateView)(\n visibleRanges.value.negativeRange,\n visibleRanges.value.positiveRange,\n );\n },\n [visibleRanges.value],\n );\n\n return (\n <Animated.View\n style={[\n {\n width: width || \"100%\",\n height: height || \"100%\",\n position: \"absolute\",\n },\n animatedStyle,\n ]}\n /**\n * We use this testID to know when the carousel item is ready to be tested in test.\n * e.g.\n * The testID of first item will be changed to __CAROUSEL_ITEM_0_READY__ from __CAROUSEL_ITEM_0_NOT_READY__ when the item is ready.\n * */\n testID={`__CAROUSEL_ITEM_${index}_${shouldUpdate ? \"READY\" : \"NOT_READY\"}__`}\n >\n <LazyView shouldUpdate={shouldUpdate}>\n {children({ animationValue })}\n </LazyView>\n </Animated.View>\n );\n};\n"]}
@@ -2,6 +2,7 @@ import React from "react";
2
2
  import { StyleSheet } from "react-native";
3
3
  import { GestureHandlerRootView } from "react-native-gesture-handler";
4
4
  import { runOnJS, useDerivedValue } from "react-native-reanimated";
5
+ import { BaseLayout } from "./BaseLayout";
5
6
  import { ScrollViewGesture } from "./ScrollViewGesture";
6
7
  import { useAutoPlay } from "../hooks/useAutoPlay";
7
8
  import { useCarouselController } from "../hooks/useCarouselController";
@@ -11,7 +12,6 @@ import { useLayoutConfig } from "../hooks/useLayoutConfig";
11
12
  import { useOnProgressChange } from "../hooks/useOnProgressChange";
12
13
  import { usePropsErrorBoundary } from "../hooks/usePropsErrorBoundary";
13
14
  import { useVisibleRanges } from "../hooks/useVisibleRanges";
14
- import { BaseLayout } from "../layouts/BaseLayout";
15
15
  import { CTX } from "../store";
16
16
  import { computedRealIndexWithAutoFillData } from "../utils/computed-with-auto-fill-data";
17
17
  const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
@@ -132,7 +132,8 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
132
132
  total: dataLength,
133
133
  viewSize: size,
134
134
  translation: handlerOffset,
135
- windowSize
135
+ windowSize,
136
+ loop
136
137
  });
137
138
  const layoutConfig = useLayoutConfig({ ...props,
138
139
  size
@@ -1 +1 @@
1
- {"version":3,"sources":["Carousel.tsx"],"names":["React","StyleSheet","GestureHandlerRootView","runOnJS","useDerivedValue","ScrollViewGesture","useAutoPlay","useCarouselController","useCommonVariables","useInitProps","useLayoutConfig","useOnProgressChange","usePropsErrorBoundary","useVisibleRanges","BaseLayout","CTX","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","testID","loop","autoFillData","data","dataLength","rawData","rawDataLength","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffset","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","i","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","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 { 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 { useVisibleRanges } from \"../hooks/useVisibleRanges\";\nimport { BaseLayout } from \"../layouts/BaseLayout\";\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 // Raw data that has not been processed\n rawData,\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 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 onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\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 visibleRanges = useVisibleRanges({\n total: dataLength,\n viewSize: size,\n translation: handlerOffset,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawDataLength,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffset={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ],\n );\n\n return (\n <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 {data.map(renderLayout)}\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":["React","StyleSheet","GestureHandlerRootView","runOnJS","useDerivedValue","BaseLayout","ScrollViewGesture","useAutoPlay","useCarouselController","useCommonVariables","useInitProps","useLayoutConfig","useOnProgressChange","usePropsErrorBoundary","useVisibleRanges","CTX","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","testID","loop","autoFillData","data","dataLength","rawData","rawDataLength","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffset","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","i","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","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 { BaseLayout } from \"./BaseLayout\";\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 { useVisibleRanges } from \"../hooks/useVisibleRanges\";\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 // Raw data that has not been processed\n rawData,\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 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 onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\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 visibleRanges = useVisibleRanges({\n total: dataLength,\n viewSize: size,\n translation: handlerOffset,\n windowSize,\n loop,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawDataLength,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffset={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ],\n );\n\n return (\n <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 {data.map(renderLayout)}\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,8 +1,8 @@
1
- import React, { useCallback, useMemo } from "react";
2
- import { Gesture, GestureDetector } from "react-native-gesture-handler";
1
+ import React, { useCallback } from "react";
2
+ import { GestureDetector } from "react-native-gesture-handler";
3
3
  import Animated, { cancelAnimation, measure, runOnJS, useAnimatedReaction, useAnimatedRef, useDerivedValue, useSharedValue, withDecay } from "react-native-reanimated";
4
4
  import { Easing } from "../constants";
5
- import { useUpdateGestureConfig } from "../hooks/useUpdateGestureConfig";
5
+ import { usePanGestureProxy } from "../hooks/usePanGestureProxy";
6
6
  import { CTX } from "../store";
7
7
  import { dealWithAnimation } from "../utils/deal-with-animation";
8
8
 
@@ -13,13 +13,14 @@ const IScrollViewGesture = props => {
13
13
  vertical,
14
14
  pagingEnabled,
15
15
  snapEnabled,
16
- loop: infinite,
16
+ loop,
17
17
  scrollAnimationDuration,
18
18
  withAnimation,
19
19
  enabled,
20
20
  dataLength,
21
21
  overscrollEnabled,
22
- maxScrollDistancePerSwipe
22
+ maxScrollDistancePerSwipe,
23
+ fixedDirection
23
24
  }
24
25
  } = React.useContext(CTX);
25
26
  const {
@@ -46,7 +47,7 @@ const IScrollViewGesture = props => {
46
47
  const getLimit = React.useCallback(() => {
47
48
  "worklet";
48
49
 
49
- if (!infinite && !overscrollEnabled) {
50
+ if (!loop && !overscrollEnabled) {
50
51
  const {
51
52
  width: containerWidth = 0
52
53
  } = measure(containerRef); // If the item's total width is less than the container's width, then there is no need to scroll.
@@ -57,7 +58,7 @@ const IScrollViewGesture = props => {
57
58
  }
58
59
 
59
60
  return dataLength * size;
60
- }, [infinite, size, dataLength, overscrollEnabled]);
61
+ }, [loop, size, dataLength, overscrollEnabled]);
61
62
  const withSpring = React.useCallback((toValue, onFinished) => {
62
63
  "worklet";
63
64
 
@@ -102,7 +103,7 @@ const IScrollViewGesture = props => {
102
103
  const computed = offset < 0 ? Math.ceil : Math.floor;
103
104
  const page = computed(-translation.value / size);
104
105
 
105
- if (infinite) {
106
+ if (loop) {
106
107
  const finalPage = page + offset;
107
108
  finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);
108
109
  } else {
@@ -121,7 +122,7 @@ const IScrollViewGesture = props => {
121
122
  translation.value = finalTranslation;
122
123
 
123
124
  function withProcessTranslation(translation) {
124
- if (!infinite && !overscrollEnabled) {
125
+ if (!loop && !overscrollEnabled) {
125
126
  const limit = getLimit();
126
127
  const sign = Math.sign(translation);
127
128
  return sign * Math.max(0, Math.min(limit, Math.abs(translation)));
@@ -129,7 +130,7 @@ const IScrollViewGesture = props => {
129
130
 
130
131
  return translation;
131
132
  }
132
- }, [withSpring, size, maxPage, infinite, snapEnabled, translation, pagingEnabled, scrollEndVelocity.value, maxScrollDistancePerSwipe, scrollEndTranslation.value, maxScrollDistancePerSwipeIsSet]);
133
+ }, [withSpring, size, maxPage, loop, snapEnabled, translation, pagingEnabled, scrollEndVelocity.value, maxScrollDistancePerSwipe, scrollEndTranslation.value, maxScrollDistancePerSwipeIsSet]);
133
134
  const onFinish = React.useCallback(isFinished => {
134
135
  "worklet";
135
136
 
@@ -157,7 +158,7 @@ const IScrollViewGesture = props => {
157
158
  return;
158
159
  }
159
160
 
160
- if (!infinite) {
161
+ if (!loop) {
161
162
  translation.value = withSpring(0);
162
163
  return;
163
164
  }
@@ -169,9 +170,9 @@ const IScrollViewGesture = props => {
169
170
  return;
170
171
  }
171
172
 
172
- if (!infinite) translation.value = withSpring(-((maxPage - 1) * size));
173
+ if (!loop) translation.value = withSpring(-((maxPage - 1) * size));
173
174
  }
174
- }, [touching.value, translation, maxPage, size, scrollEndTranslation.value, infinite, activeDecay, withSpring]);
175
+ }, [touching.value, translation, maxPage, size, scrollEndTranslation.value, loop, activeDecay, withSpring]);
175
176
  useAnimatedReaction(() => translation.value, () => {
176
177
  if (!pagingEnabled) resetBoundary();
177
178
  }, [pagingEnabled, resetBoundary]);
@@ -179,7 +180,7 @@ const IScrollViewGesture = props => {
179
180
  function withProcessTranslation(translation) {
180
181
  "worklet";
181
182
 
182
- if (!infinite && !overscrollEnabled) {
183
+ if (!loop && !overscrollEnabled) {
183
184
  const limit = getLimit();
184
185
  const sign = Math.sign(translation);
185
186
  return sign * Math.max(0, Math.min(limit, Math.abs(translation)));
@@ -188,16 +189,16 @@ const IScrollViewGesture = props => {
188
189
  return translation;
189
190
  }
190
191
 
191
- const onGestureBegin = useCallback(() => {
192
+ const onGestureBegin = useCallback(_ => {
192
193
  "worklet";
193
194
 
194
195
  touching.value = true;
195
196
  validStart.value = true;
196
197
  onScrollBegin && runOnJS(onScrollBegin)();
197
198
  max.value = (maxPage - 1) * size;
198
- if (!infinite && !overscrollEnabled) max.value = getLimit();
199
+ if (!loop && !overscrollEnabled) max.value = getLimit();
199
200
  panOffset.value = translation.value;
200
- }, [max, size, maxPage, infinite, touching, panOffset, validStart, translation, overscrollEnabled, getLimit, onScrollBegin]);
201
+ }, [max, size, maxPage, loop, touching, panOffset, validStart, translation, overscrollEnabled, getLimit, onScrollBegin]);
201
202
  const onGestureUpdate = useCallback(e => {
202
203
  "worklet";
203
204
 
@@ -211,9 +212,10 @@ const IScrollViewGesture = props => {
211
212
  translationX,
212
213
  translationY
213
214
  } = e;
214
- const panTranslation = isHorizontal.value ? translationX : translationY;
215
+ let panTranslation = isHorizontal.value ? translationX : translationY;
216
+ if (fixedDirection === "negative") panTranslation = -Math.abs(panTranslation);else if (fixedDirection === "positive") panTranslation = +Math.abs(panTranslation);
215
217
 
216
- if (!infinite) {
218
+ if (!loop) {
217
219
  if (translation.value > 0 || translation.value < -max.value) {
218
220
  const boundary = translation.value > 0 ? 0 : -max.value;
219
221
  const fixed = boundary - panOffset.value;
@@ -225,8 +227,8 @@ const IScrollViewGesture = props => {
225
227
 
226
228
  const translationValue = panOffset.value + panTranslation;
227
229
  translation.value = translationValue;
228
- }, [isHorizontal, max, panOffset, infinite, overscrollEnabled, translation, validStart, touching]);
229
- const onGestureFinish = useCallback(e => {
230
+ }, [isHorizontal, max, panOffset, loop, overscrollEnabled, fixedDirection, translation, validStart, touching]);
231
+ const onGestureEnd = useCallback((e, _success) => {
230
232
  "worklet";
231
233
 
232
234
  const {
@@ -236,7 +238,9 @@ const IScrollViewGesture = props => {
236
238
  translationY
237
239
  } = e;
238
240
  scrollEndVelocity.value = isHorizontal.value ? velocityX : velocityY;
239
- scrollEndTranslation.value = isHorizontal.value ? translationX : translationY;
241
+ let panTranslation = isHorizontal.value ? translationX : translationY;
242
+ if (fixedDirection === "negative") panTranslation = -Math.abs(panTranslation);else if (fixedDirection === "positive") panTranslation = +Math.abs(panTranslation);
243
+ scrollEndTranslation.value = panTranslation;
240
244
  const totalTranslation = scrollEndVelocity.value + scrollEndTranslation.value;
241
245
 
242
246
  if (maxScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) > maxScrollDistancePerSwipe) {
@@ -246,15 +250,16 @@ const IScrollViewGesture = props => {
246
250
  endWithSpring(onScrollEnd);
247
251
  }
248
252
 
249
- if (!infinite) touching.value = false;
250
- }, [size, infinite, touching, panOffset, translation, isHorizontal, scrollEndVelocity, scrollEndTranslation, maxScrollDistancePerSwipeIsSet, maxScrollDistancePerSwipe, endWithSpring, withSpring, onScrollEnd]);
251
- const gesture = useMemo(() => {
252
- const gesture = Gesture.Pan().onBegin(onGestureBegin).onUpdate(onGestureUpdate).onEnd(onGestureFinish);
253
- if (onConfigurePanGesture) onConfigurePanGesture(gesture);
254
- return gesture;
255
- }, [onGestureBegin, onGestureUpdate, onGestureFinish, onConfigurePanGesture]);
256
- useUpdateGestureConfig(gesture, {
257
- enabled
253
+ if (!loop) touching.value = false;
254
+ }, [size, loop, touching, panOffset, translation, isHorizontal, scrollEndVelocity, scrollEndTranslation, fixedDirection, maxScrollDistancePerSwipeIsSet, maxScrollDistancePerSwipe, endWithSpring, withSpring, onScrollEnd]);
255
+ const gesture = usePanGestureProxy({
256
+ onConfigurePanGesture,
257
+ onGestureBegin,
258
+ onGestureUpdate,
259
+ onGestureEnd,
260
+ options: {
261
+ enabled
262
+ }
258
263
  });
259
264
  return /*#__PURE__*/React.createElement(GestureDetector, {
260
265
  gesture: gesture
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["React","useCallback","useMemo","Gesture","GestureDetector","Animated","cancelAnimation","measure","runOnJS","useAnimatedReaction","useAnimatedRef","useDerivedValue","useSharedValue","withDecay","Easing","useUpdateGestureConfig","CTX","dealWithAnimation","IScrollViewGesture","props","onConfigurePanGesture","vertical","pagingEnabled","snapEnabled","loop","infinite","scrollAnimationDuration","withAnimation","enabled","dataLength","overscrollEnabled","maxScrollDistancePerSwipe","useContext","size","translation","testID","style","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","isHorizontal","max","panOffset","touching","validStart","scrollEndTranslation","scrollEndVelocity","containerRef","maxScrollDistancePerSwipeIsSet","getLimit","width","containerWidth","withSpring","toValue","onFinished","defaultWithAnimation","type","config","duration","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","onGestureFinish","velocityX","velocityY","totalTranslation","gesture","Pan","onBegin","onUpdate","onEnd","children","ScrollViewGesture"],"mappings":"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","sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport React, { useCallback, useMemo } from \"react\";\nimport type { StyleProp, ViewStyle } from \"react-native\";\nimport type { GestureStateChangeEvent, PanGestureHandlerEventPayload } from \"react-native-gesture-handler\";\nimport {\n Gesture,\n GestureDetector,\n} 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 { useUpdateGestureConfig } from \"../hooks/useUpdateGestureConfig\";\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: infinite,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n dataLength,\n overscrollEnabled,\n maxScrollDistancePerSwipe,\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 (!infinite && !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 }, [infinite, 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 (infinite) {\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 (!infinite && !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 infinite,\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 (!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 }\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 [pagingEnabled, resetBoundary],\n );\n\n function withProcessTranslation(translation: number) {\n \"worklet\";\n\n if (!infinite && !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(() => {\n \"worklet\";\n\n touching.value = true;\n validStart.value = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n\n max.value = (maxPage - 1) * size;\n if (!infinite && !overscrollEnabled)\n max.value = getLimit();\n\n panOffset.value = translation.value;\n }, [\n max,\n size,\n maxPage,\n infinite,\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 const panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n if (!infinite) {\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 infinite,\n overscrollEnabled,\n translation,\n validStart,\n touching,\n ]);\n\n const onGestureFinish = useCallback((e: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {\n \"worklet\";\n\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 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 (!infinite)\n touching.value = false;\n }, [\n size,\n infinite,\n touching,\n panOffset,\n translation,\n isHorizontal,\n scrollEndVelocity,\n scrollEndTranslation,\n maxScrollDistancePerSwipeIsSet,\n maxScrollDistancePerSwipe,\n endWithSpring,\n withSpring,\n onScrollEnd,\n ]);\n\n const gesture = useMemo(() => {\n const gesture = Gesture.Pan()\n .onBegin(onGestureBegin)\n .onUpdate(onGestureUpdate)\n .onEnd(onGestureFinish);\n\n if (onConfigurePanGesture)\n onConfigurePanGesture(gesture);\n\n return gesture;\n },\n [\n onGestureBegin,\n onGestureUpdate,\n onGestureFinish,\n onConfigurePanGesture,\n ]);\n\n useUpdateGestureConfig(gesture, { enabled });\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":["React","useCallback","GestureDetector","Animated","cancelAnimation","measure","runOnJS","useAnimatedReaction","useAnimatedRef","useDerivedValue","useSharedValue","withDecay","Easing","usePanGestureProxy","CTX","dealWithAnimation","IScrollViewGesture","props","onConfigurePanGesture","vertical","pagingEnabled","snapEnabled","loop","scrollAnimationDuration","withAnimation","enabled","dataLength","overscrollEnabled","maxScrollDistancePerSwipe","fixedDirection","useContext","size","translation","testID","style","onScrollBegin","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","isHorizontal","max","panOffset","touching","validStart","scrollEndTranslation","scrollEndVelocity","containerRef","maxScrollDistancePerSwipeIsSet","getLimit","width","containerWidth","withSpring","toValue","onFinished","defaultWithAnimation","type","config","duration","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 +1 @@
1
- {"version":3,"sources":["useLayoutConfig.ts"],"names":["React","Layouts","useLayoutConfig","opts","size","vertical","useMemo","baseConfig","mode","parallax","modeConfig","horizontalStack","verticalStack","normal"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAIA,SAASC,OAAT,QAAwB,YAAxB;AAKA,OAAO,SAASC,eAAT,CACLC,IADK,EAEY;AACjB,QAAM;AAAEC,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAAqBF,IAA3B;AAEA,SAAOH,KAAK,CAACM,OAAN,CAAc,MAAM;AACzB,UAAMC,UAAU,GAAG;AAAEH,MAAAA,IAAF;AAAQC,MAAAA;AAAR,KAAnB;;AACA,YAAQF,IAAI,CAACK,IAAb;AACE,WAAK,UAAL;AACE,eAAOP,OAAO,CAACQ,QAAR,CAAiBF,UAAjB,EAA6BJ,IAAI,CAACO,UAAlC,CAAP;;AACF,WAAK,kBAAL;AACE,eAAOT,OAAO,CAACU,eAAR,CAAwBR,IAAI,CAACO,UAA7B,CAAP;;AACF,WAAK,gBAAL;AACE,eAAOT,OAAO,CAACW,aAAR,CAAsBT,IAAI,CAACO,UAA3B,CAAP;;AACF;AACE,eAAOT,OAAO,CAACY,MAAR,CAAeN,UAAf,CAAP;AARJ;AAUD,GAZM,EAYJ,CAACJ,IAAI,CAACK,IAAN,EAAYL,IAAI,CAACO,UAAjB,EAA6BN,IAA7B,EAAmCC,QAAnC,CAZI,CAAP;AAaD","sourcesContent":["import React from \"react\";\n\nimport type { TInitializeCarouselProps } from \"./useInitProps\";\n\nimport { Layouts } from \"../layouts\";\nimport type { TAnimationStyle } from \"../layouts/BaseLayout\";\n\ntype TLayoutConfigOpts<T> = TInitializeCarouselProps<T> & { size: number };\n\nexport function useLayoutConfig<T>(\n opts: TLayoutConfigOpts<T>,\n): TAnimationStyle {\n const { size, vertical } = opts as Required<TLayoutConfigOpts<T>>;\n\n return React.useMemo(() => {\n const baseConfig = { size, vertical };\n switch (opts.mode) {\n case \"parallax\":\n return Layouts.parallax(baseConfig, opts.modeConfig);\n case \"horizontal-stack\":\n return Layouts.horizontalStack(opts.modeConfig);\n case \"vertical-stack\":\n return Layouts.verticalStack(opts.modeConfig);\n default:\n return Layouts.normal(baseConfig);\n }\n }, [opts.mode, opts.modeConfig, size, vertical]);\n}\n"]}
1
+ {"version":3,"sources":["useLayoutConfig.ts"],"names":["React","Layouts","useLayoutConfig","opts","size","vertical","useMemo","baseConfig","mode","parallax","modeConfig","horizontalStack","verticalStack","normal"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAKA,SAASC,OAAT,QAAwB,YAAxB;AAIA,OAAO,SAASC,eAAT,CACLC,IADK,EAEY;AACjB,QAAM;AAAEC,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAAqBF,IAA3B;AAEA,SAAOH,KAAK,CAACM,OAAN,CAAc,MAAM;AACzB,UAAMC,UAAU,GAAG;AAAEH,MAAAA,IAAF;AAAQC,MAAAA;AAAR,KAAnB;;AACA,YAAQF,IAAI,CAACK,IAAb;AACE,WAAK,UAAL;AACE,eAAOP,OAAO,CAACQ,QAAR,CAAiBF,UAAjB,EAA6BJ,IAAI,CAACO,UAAlC,CAAP;;AACF,WAAK,kBAAL;AACE,eAAOT,OAAO,CAACU,eAAR,CAAwBR,IAAI,CAACO,UAA7B,CAAP;;AACF,WAAK,gBAAL;AACE,eAAOT,OAAO,CAACW,aAAR,CAAsBT,IAAI,CAACO,UAA3B,CAAP;;AACF;AACE,eAAOT,OAAO,CAACY,MAAR,CAAeN,UAAf,CAAP;AARJ;AAUD,GAZM,EAYJ,CAACJ,IAAI,CAACK,IAAN,EAAYL,IAAI,CAACO,UAAjB,EAA6BN,IAA7B,EAAmCC,QAAnC,CAZI,CAAP;AAaD","sourcesContent":["import React from \"react\";\n\nimport type { TInitializeCarouselProps } from \"./useInitProps\";\n\nimport type { TAnimationStyle } from \"../components/BaseLayout\";\nimport { Layouts } from \"../layouts\";\n\ntype TLayoutConfigOpts<T> = TInitializeCarouselProps<T> & { size: number };\n\nexport function useLayoutConfig<T>(\n opts: TLayoutConfigOpts<T>,\n): TAnimationStyle {\n const { size, vertical } = opts as Required<TLayoutConfigOpts<T>>;\n\n return React.useMemo(() => {\n const baseConfig = { size, vertical };\n switch (opts.mode) {\n case \"parallax\":\n return Layouts.parallax(baseConfig, opts.modeConfig);\n case \"horizontal-stack\":\n return Layouts.horizontalStack(opts.modeConfig);\n case \"vertical-stack\":\n return Layouts.verticalStack(opts.modeConfig);\n default:\n return Layouts.normal(baseConfig);\n }\n }, [opts.mode, opts.modeConfig, size, vertical]);\n}\n"]}