react-native-reanimated-carousel 4.0.0-alpha.0 → 4.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.md +21 -160
  2. package/lib/commonjs/components/Carousel.js +231 -0
  3. package/lib/commonjs/components/Carousel.js.map +1 -0
  4. package/lib/commonjs/components/LazyView.js +22 -0
  5. package/lib/commonjs/components/LazyView.js.map +1 -0
  6. package/lib/commonjs/components/ScrollViewGesture.js +297 -0
  7. package/lib/commonjs/components/ScrollViewGesture.js.map +1 -0
  8. package/lib/commonjs/constants/index.js +21 -1
  9. package/lib/commonjs/constants/index.js.map +1 -1
  10. package/lib/commonjs/hooks/useAutoPlay.js +56 -1
  11. package/lib/commonjs/hooks/useAutoPlay.js.map +1 -1
  12. package/lib/commonjs/hooks/useCarouselController.js +244 -1
  13. package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
  14. package/lib/commonjs/hooks/useCheckMounted.js +23 -1
  15. package/lib/commonjs/hooks/useCheckMounted.js.map +1 -1
  16. package/lib/commonjs/hooks/useCommonVariables.js +76 -1
  17. package/lib/commonjs/hooks/useCommonVariables.js.map +1 -1
  18. package/lib/commonjs/hooks/useInitProps.js +78 -1
  19. package/lib/commonjs/hooks/useInitProps.js.map +1 -1
  20. package/lib/commonjs/hooks/useLayoutConfig.js +39 -1
  21. package/lib/commonjs/hooks/useLayoutConfig.js.map +1 -1
  22. package/lib/commonjs/hooks/useOffsetX.js +48 -1
  23. package/lib/commonjs/hooks/useOffsetX.js.map +1 -1
  24. package/lib/commonjs/hooks/useOnProgressChange.js +38 -1
  25. package/lib/commonjs/hooks/useOnProgressChange.js.map +1 -1
  26. package/lib/commonjs/hooks/usePropsErrorBoundary.js +36 -1
  27. package/lib/commonjs/hooks/usePropsErrorBoundary.js.map +1 -1
  28. package/lib/commonjs/hooks/useUpdateGestureConfig.js +20 -0
  29. package/lib/commonjs/hooks/useUpdateGestureConfig.js.map +1 -0
  30. package/lib/commonjs/hooks/useVisibleRanges.js +42 -1
  31. package/lib/commonjs/hooks/useVisibleRanges.js.map +1 -1
  32. package/lib/commonjs/index.js +13 -1
  33. package/lib/commonjs/index.js.map +1 -1
  34. package/lib/commonjs/layouts/BaseLayout.js +110 -1
  35. package/lib/commonjs/layouts/BaseLayout.js.map +1 -1
  36. package/lib/commonjs/layouts/ParallaxLayout.js +83 -1
  37. package/lib/commonjs/layouts/ParallaxLayout.js.map +1 -1
  38. package/lib/commonjs/layouts/index.js +20 -1
  39. package/lib/commonjs/layouts/index.js.map +1 -1
  40. package/lib/commonjs/layouts/normal.js +27 -1
  41. package/lib/commonjs/layouts/normal.js.map +1 -1
  42. package/lib/commonjs/layouts/parallax.js +38 -1
  43. package/lib/commonjs/layouts/parallax.js.map +1 -1
  44. package/lib/commonjs/layouts/stack.js +215 -1
  45. package/lib/commonjs/layouts/stack.js.map +1 -1
  46. package/lib/commonjs/store/index.js +14 -1
  47. package/lib/commonjs/store/index.js.map +1 -1
  48. package/lib/commonjs/types.js +5 -1
  49. package/lib/commonjs/utils/computeNewIndexWhenDataChanges.js +52 -0
  50. package/lib/commonjs/utils/computeNewIndexWhenDataChanges.js.map +1 -0
  51. package/lib/commonjs/utils/computed-with-auto-fill-data.js +124 -0
  52. package/lib/commonjs/utils/computed-with-auto-fill-data.js.map +1 -0
  53. package/lib/commonjs/utils/deal-with-animation.js +21 -0
  54. package/lib/commonjs/utils/deal-with-animation.js.map +1 -0
  55. package/lib/commonjs/utils/handleroffset-direction.js +16 -0
  56. package/lib/commonjs/utils/handleroffset-direction.js.map +1 -0
  57. package/lib/commonjs/utils/index.test.js +74 -0
  58. package/lib/commonjs/utils/index.test.js.map +1 -0
  59. package/lib/commonjs/utils/log.js +22 -1
  60. package/lib/commonjs/utils/log.js.map +1 -1
  61. package/lib/module/{Carousel.js → components/Carousel.js} +11 -12
  62. package/lib/module/components/Carousel.js.map +1 -0
  63. package/lib/module/{ScrollViewGesture.js → components/ScrollViewGesture.js} +14 -6
  64. package/lib/module/components/ScrollViewGesture.js.map +1 -0
  65. package/lib/module/hooks/useCarouselController.js +3 -3
  66. package/lib/module/hooks/useCarouselController.js.map +1 -1
  67. package/lib/module/hooks/useCommonVariables.js +2 -2
  68. package/lib/module/hooks/useCommonVariables.js.map +1 -1
  69. package/lib/module/hooks/useInitProps.js +1 -3
  70. package/lib/module/hooks/useInitProps.js.map +1 -1
  71. package/lib/module/hooks/useOnProgressChange.js +1 -1
  72. package/lib/module/hooks/useOnProgressChange.js.map +1 -1
  73. package/lib/module/hooks/useUpdateGestureConfig.js +10 -0
  74. package/lib/module/hooks/useUpdateGestureConfig.js.map +1 -0
  75. package/lib/module/index.js +1 -2
  76. package/lib/module/index.js.map +1 -1
  77. package/lib/module/layouts/BaseLayout.js +1 -1
  78. package/lib/module/layouts/BaseLayout.js.map +1 -1
  79. package/lib/module/layouts/ParallaxLayout.js +1 -1
  80. package/lib/module/layouts/ParallaxLayout.js.map +1 -1
  81. package/lib/module/utils/{computedWithAutoFillData.js → computed-with-auto-fill-data.js} +1 -1
  82. package/lib/module/utils/computed-with-auto-fill-data.js.map +1 -0
  83. package/lib/module/utils/{dealWithAnimation.js → deal-with-animation.js} +1 -1
  84. package/lib/module/utils/deal-with-animation.js.map +1 -0
  85. package/lib/module/utils/{handlerOffsetDirection.js → handleroffset-direction.js} +1 -1
  86. package/lib/module/utils/handleroffset-direction.js.map +1 -0
  87. package/lib/typescript/{Carousel.d.ts → components/Carousel.d.ts} +1 -1
  88. package/lib/typescript/hooks/useUpdateGestureConfig.d.ts +4 -0
  89. package/lib/typescript/index.d.ts +2 -2
  90. package/lib/typescript/types.d.ts +103 -103
  91. package/package.json +18 -16
  92. package/src/{Carousel.tsx → components/Carousel.tsx} +13 -13
  93. package/src/{ScrollViewGesture.tsx → components/ScrollViewGesture.tsx} +30 -15
  94. package/src/hooks/useCarouselController.tsx +3 -3
  95. package/src/hooks/useCommonVariables.ts +2 -2
  96. package/src/hooks/useInitProps.ts +1 -3
  97. package/src/hooks/useOnProgressChange.ts +1 -1
  98. package/src/hooks/useUpdateGestureConfig.ts +13 -0
  99. package/src/index.tsx +2 -2
  100. package/src/layouts/BaseLayout.tsx +1 -1
  101. package/src/layouts/ParallaxLayout.tsx +1 -1
  102. package/src/types.ts +122 -124
  103. package/README.zh-CN.md +0 -202
  104. package/lib/commonjs/Carousel.js +0 -2
  105. package/lib/commonjs/Carousel.js.map +0 -1
  106. package/lib/commonjs/LazyView.js +0 -2
  107. package/lib/commonjs/LazyView.js.map +0 -1
  108. package/lib/commonjs/ScrollViewGesture.js +0 -2
  109. package/lib/commonjs/ScrollViewGesture.js.map +0 -1
  110. package/lib/commonjs/hooks/computeNewIndexWhenDataChanges.js +0 -2
  111. package/lib/commonjs/hooks/computeNewIndexWhenDataChanges.js.map +0 -1
  112. package/lib/commonjs/hooks/index.test.js +0 -2
  113. package/lib/commonjs/hooks/index.test.js.map +0 -1
  114. package/lib/commonjs/utils/computedWithAutoFillData.js +0 -2
  115. package/lib/commonjs/utils/computedWithAutoFillData.js.map +0 -1
  116. package/lib/commonjs/utils/dealWithAnimation.js +0 -2
  117. package/lib/commonjs/utils/dealWithAnimation.js.map +0 -1
  118. package/lib/commonjs/utils/handlerOffsetDirection.js +0 -2
  119. package/lib/commonjs/utils/handlerOffsetDirection.js.map +0 -1
  120. package/lib/module/Carousel.js.map +0 -1
  121. package/lib/module/ScrollViewGesture.js.map +0 -1
  122. package/lib/module/utils/computedWithAutoFillData.js.map +0 -1
  123. package/lib/module/utils/dealWithAnimation.js.map +0 -1
  124. package/lib/module/utils/handlerOffsetDirection.js.map +0 -1
  125. /package/lib/module/{LazyView.js → components/LazyView.js} +0 -0
  126. /package/lib/module/{LazyView.js.map → components/LazyView.js.map} +0 -0
  127. /package/lib/module/{hooks → utils}/computeNewIndexWhenDataChanges.js +0 -0
  128. /package/lib/module/{hooks → utils}/computeNewIndexWhenDataChanges.js.map +0 -0
  129. /package/lib/module/{hooks → utils}/index.test.js +0 -0
  130. /package/lib/module/{hooks → utils}/index.test.js.map +0 -0
  131. /package/lib/typescript/{LazyView.d.ts → components/LazyView.d.ts} +0 -0
  132. /package/lib/typescript/{ScrollViewGesture.d.ts → components/ScrollViewGesture.d.ts} +0 -0
  133. /package/lib/typescript/{hooks → utils}/computeNewIndexWhenDataChanges.d.ts +0 -0
  134. /package/lib/typescript/utils/{computedWithAutoFillData.d.ts → computed-with-auto-fill-data.d.ts} +0 -0
  135. /package/lib/typescript/utils/{dealWithAnimation.d.ts → deal-with-animation.d.ts} +0 -0
  136. /package/lib/typescript/utils/{handlerOffsetDirection.d.ts → handleroffset-direction.d.ts} +0 -0
  137. /package/lib/typescript/{hooks → utils}/index.test.d.ts +0 -0
  138. /package/src/{LazyView.tsx → components/LazyView.tsx} +0 -0
  139. /package/src/{hooks → utils}/computeNewIndexWhenDataChanges.ts +0 -0
  140. /package/src/utils/{computedWithAutoFillData.ts → computed-with-auto-fill-data.ts} +0 -0
  141. /package/src/utils/{dealWithAnimation.ts → deal-with-animation.ts} +0 -0
  142. /package/src/utils/{handlerOffsetDirection.ts → handleroffset-direction.ts} +0 -0
  143. /package/src/{hooks → utils}/index.test.ts +0 -0
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ScrollViewGesture = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _reactNativeGestureHandler = require("react-native-gesture-handler");
11
+
12
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
13
+
14
+ var _constants = require("../constants");
15
+
16
+ var _useUpdateGestureConfig = require("../hooks/useUpdateGestureConfig");
17
+
18
+ var _store = require("../store");
19
+
20
+ var _dealWithAnimation = require("../utils/deal-with-animation");
21
+
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ const IScrollViewGesture = props => {
27
+ const {
28
+ props: {
29
+ onConfigurePanGesture,
30
+ vertical,
31
+ pagingEnabled,
32
+ snapEnabled,
33
+ loop: infinite,
34
+ scrollAnimationDuration,
35
+ withAnimation,
36
+ enabled,
37
+ dataLength,
38
+ overscrollEnabled,
39
+ maxScrollDistancePerSwipe
40
+ }
41
+ } = _react.default.useContext(_store.CTX);
42
+
43
+ const {
44
+ size,
45
+ translation,
46
+ testID,
47
+ style = {},
48
+ onScrollBegin,
49
+ onScrollEnd,
50
+ onTouchBegin,
51
+ onTouchEnd
52
+ } = props;
53
+ const maxPage = dataLength;
54
+ const isHorizontal = (0, _reactNativeReanimated.useDerivedValue)(() => !vertical, [vertical]);
55
+ const max = (0, _reactNativeReanimated.useSharedValue)(0);
56
+ const panOffset = (0, _reactNativeReanimated.useSharedValue)(0);
57
+ const touching = (0, _reactNativeReanimated.useSharedValue)(false);
58
+ const validStart = (0, _reactNativeReanimated.useSharedValue)(false);
59
+ const scrollEndTranslation = (0, _reactNativeReanimated.useSharedValue)(0);
60
+ const scrollEndVelocity = (0, _reactNativeReanimated.useSharedValue)(0);
61
+ const containerRef = (0, _reactNativeReanimated.useAnimatedRef)();
62
+ const maxScrollDistancePerSwipeIsSet = typeof maxScrollDistancePerSwipe === "number"; // Get the limit of the scroll.
63
+
64
+ const getLimit = _react.default.useCallback(() => {
65
+ "worklet";
66
+
67
+ if (!infinite && !overscrollEnabled) {
68
+ const {
69
+ width: containerWidth = 0
70
+ } = (0, _reactNativeReanimated.measure)(containerRef); // If the item's total width is less than the container's width, then there is no need to scroll.
71
+
72
+ if (dataLength * size < containerWidth) return 0; // Disable the "overscroll" effect
73
+
74
+ return dataLength * size - containerWidth;
75
+ }
76
+
77
+ return dataLength * size;
78
+ }, [infinite, size, dataLength, overscrollEnabled]);
79
+
80
+ const withSpring = _react.default.useCallback((toValue, onFinished) => {
81
+ "worklet";
82
+
83
+ const defaultWithAnimation = {
84
+ type: "timing",
85
+ config: {
86
+ duration: scrollAnimationDuration + 100,
87
+ easing: _constants.Easing.easeOutQuart
88
+ }
89
+ };
90
+ return (0, _dealWithAnimation.dealWithAnimation)(withAnimation !== null && withAnimation !== void 0 ? withAnimation : defaultWithAnimation)(toValue, isFinished => {
91
+ "worklet";
92
+
93
+ if (isFinished) onFinished && (0, _reactNativeReanimated.runOnJS)(onFinished)();
94
+ });
95
+ }, [scrollAnimationDuration, withAnimation]);
96
+
97
+ const endWithSpring = _react.default.useCallback(onFinished => {
98
+ "worklet";
99
+
100
+ const origin = translation.value;
101
+ const velocity = scrollEndVelocity.value; // Default to scroll in the direction of the slide (with deceleration)
102
+
103
+ let finalTranslation = (0, _reactNativeReanimated.withDecay)({
104
+ velocity,
105
+ deceleration: 0.999
106
+ }); // If the distance of the swipe exceeds the max scroll distance, keep the view at the current position
107
+
108
+ if (maxScrollDistancePerSwipeIsSet && Math.abs(scrollEndTranslation.value) > maxScrollDistancePerSwipe) {
109
+ finalTranslation = origin;
110
+ } else {
111
+ /**
112
+ * The page size is the same as the item size.
113
+ * If direction is vertical, the page size is the height of the item.
114
+ * If direction is horizontal, the page size is the width of the item.
115
+ *
116
+ * `page size` equals to `size` variable.
117
+ * */
118
+ if (pagingEnabled) {
119
+ // distance with direction
120
+ const offset = -(scrollEndTranslation.value >= 0 ? 1 : -1); // 1 or -1
121
+
122
+ const computed = offset < 0 ? Math.ceil : Math.floor;
123
+ const page = computed(-translation.value / size);
124
+
125
+ if (infinite) {
126
+ const finalPage = page + offset;
127
+ finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);
128
+ } else {
129
+ const finalPage = Math.min(maxPage - 1, Math.max(0, page + offset));
130
+ finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);
131
+ }
132
+ }
133
+
134
+ if (!pagingEnabled && snapEnabled) {
135
+ // scroll to the nearest item
136
+ const nextPage = Math.round((origin + velocity * 0.4) / size) * size;
137
+ finalTranslation = withSpring(withProcessTranslation(nextPage), onFinished);
138
+ }
139
+ }
140
+
141
+ translation.value = finalTranslation;
142
+
143
+ function withProcessTranslation(translation) {
144
+ if (!infinite && !overscrollEnabled) {
145
+ const limit = getLimit();
146
+ const sign = Math.sign(translation);
147
+ return sign * Math.max(0, Math.min(limit, Math.abs(translation)));
148
+ }
149
+
150
+ return translation;
151
+ }
152
+ }, [withSpring, size, maxPage, infinite, snapEnabled, translation, pagingEnabled, scrollEndVelocity.value, maxScrollDistancePerSwipe, scrollEndTranslation.value, maxScrollDistancePerSwipeIsSet]);
153
+
154
+ const onFinish = _react.default.useCallback(isFinished => {
155
+ "worklet";
156
+
157
+ if (isFinished) {
158
+ touching.value = false;
159
+ onScrollEnd && (0, _reactNativeReanimated.runOnJS)(onScrollEnd)();
160
+ }
161
+ }, [onScrollEnd, touching]);
162
+
163
+ const activeDecay = _react.default.useCallback(() => {
164
+ "worklet";
165
+
166
+ touching.value = true;
167
+ translation.value = (0, _reactNativeReanimated.withDecay)({
168
+ velocity: scrollEndVelocity.value
169
+ }, isFinished => onFinish(isFinished));
170
+ }, [onFinish, scrollEndVelocity.value, touching, translation]);
171
+
172
+ const resetBoundary = _react.default.useCallback(() => {
173
+ "worklet";
174
+
175
+ if (touching.value) return;
176
+
177
+ if (translation.value > 0) {
178
+ if (scrollEndTranslation.value < 0) {
179
+ activeDecay();
180
+ return;
181
+ }
182
+
183
+ if (!infinite) {
184
+ translation.value = withSpring(0);
185
+ return;
186
+ }
187
+ }
188
+
189
+ if (translation.value < -((maxPage - 1) * size)) {
190
+ if (scrollEndTranslation.value > 0) {
191
+ activeDecay();
192
+ return;
193
+ }
194
+
195
+ if (!infinite) translation.value = withSpring(-((maxPage - 1) * size));
196
+ }
197
+ }, [touching.value, translation, maxPage, size, scrollEndTranslation.value, infinite, activeDecay, withSpring]);
198
+
199
+ (0, _reactNativeReanimated.useAnimatedReaction)(() => translation.value, () => {
200
+ if (!pagingEnabled) resetBoundary();
201
+ }, [pagingEnabled, resetBoundary]);
202
+
203
+ function withProcessTranslation(translation) {
204
+ "worklet";
205
+
206
+ if (!infinite && !overscrollEnabled) {
207
+ const limit = getLimit();
208
+ const sign = Math.sign(translation);
209
+ return sign * Math.max(0, Math.min(limit, Math.abs(translation)));
210
+ }
211
+
212
+ return translation;
213
+ }
214
+
215
+ const onGestureBegin = (0, _react.useCallback)(() => {
216
+ "worklet";
217
+
218
+ touching.value = true;
219
+ validStart.value = true;
220
+ onScrollBegin && (0, _reactNativeReanimated.runOnJS)(onScrollBegin)();
221
+ max.value = (maxPage - 1) * size;
222
+ if (!infinite && !overscrollEnabled) max.value = getLimit();
223
+ panOffset.value = translation.value;
224
+ }, [max, size, maxPage, infinite, touching, panOffset, validStart, translation, overscrollEnabled, getLimit, onScrollBegin]);
225
+ const onGestureUpdate = (0, _react.useCallback)(e => {
226
+ "worklet";
227
+
228
+ if (validStart.value) {
229
+ validStart.value = false;
230
+ (0, _reactNativeReanimated.cancelAnimation)(translation);
231
+ }
232
+
233
+ touching.value = true;
234
+ const {
235
+ translationX,
236
+ translationY
237
+ } = e;
238
+ const panTranslation = isHorizontal.value ? translationX : translationY;
239
+
240
+ if (!infinite) {
241
+ if (translation.value > 0 || translation.value < -max.value) {
242
+ const boundary = translation.value > 0 ? 0 : -max.value;
243
+ const fixed = boundary - panOffset.value;
244
+ const dynamic = panTranslation - fixed;
245
+ translation.value = boundary + dynamic * 0.5;
246
+ return;
247
+ }
248
+ }
249
+
250
+ const translationValue = panOffset.value + panTranslation;
251
+ translation.value = translationValue;
252
+ }, [isHorizontal, max, panOffset, infinite, overscrollEnabled, translation, validStart, touching]);
253
+ const onGestureFinish = (0, _react.useCallback)(e => {
254
+ "worklet";
255
+
256
+ const {
257
+ velocityX,
258
+ velocityY,
259
+ translationX,
260
+ translationY
261
+ } = e;
262
+ scrollEndVelocity.value = isHorizontal.value ? velocityX : velocityY;
263
+ scrollEndTranslation.value = isHorizontal.value ? translationX : translationY;
264
+ const totalTranslation = scrollEndVelocity.value + scrollEndTranslation.value;
265
+
266
+ if (maxScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) > maxScrollDistancePerSwipe) {
267
+ const nextPage = Math.round((panOffset.value + maxScrollDistancePerSwipe * Math.sign(totalTranslation)) / size) * size;
268
+ translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);
269
+ } else {
270
+ endWithSpring(onScrollEnd);
271
+ }
272
+
273
+ if (!infinite) touching.value = false;
274
+ }, [size, infinite, touching, panOffset, translation, isHorizontal, scrollEndVelocity, scrollEndTranslation, maxScrollDistancePerSwipeIsSet, maxScrollDistancePerSwipe, endWithSpring, withSpring, onScrollEnd]);
275
+ const gesture = (0, _react.useMemo)(() => {
276
+ const gesture = _reactNativeGestureHandler.Gesture.Pan().onBegin(onGestureBegin).onUpdate(onGestureUpdate).onEnd(onGestureFinish);
277
+
278
+ if (onConfigurePanGesture) onConfigurePanGesture(gesture);
279
+ return gesture;
280
+ }, [onGestureBegin, onGestureUpdate, onGestureFinish, onConfigurePanGesture]);
281
+ (0, _useUpdateGestureConfig.useUpdateGestureConfig)(gesture, {
282
+ enabled
283
+ });
284
+ return /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.GestureDetector, {
285
+ gesture: gesture
286
+ }, /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
287
+ ref: containerRef,
288
+ testID: testID,
289
+ style: style,
290
+ onTouchStart: onTouchBegin,
291
+ onTouchEnd: onTouchEnd
292
+ }, props.children));
293
+ };
294
+
295
+ const ScrollViewGesture = IScrollViewGesture;
296
+ exports.ScrollViewGesture = ScrollViewGesture;
297
+ //# sourceMappingURL=ScrollViewGesture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["IScrollViewGesture","props","onConfigurePanGesture","vertical","pagingEnabled","snapEnabled","loop","infinite","scrollAnimationDuration","withAnimation","enabled","dataLength","overscrollEnabled","maxScrollDistancePerSwipe","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","onGestureFinish","velocityX","velocityY","totalTranslation","gesture","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,2 +1,22 @@
1
- Object.defineProperty(exports,"__esModule",{value:true});exports.Easing=exports.DATA_LENGTH=void 0;var _reactNativeReanimated=require("react-native-reanimated");var DATA_LENGTH;exports.DATA_LENGTH=DATA_LENGTH;(function(DATA_LENGTH){DATA_LENGTH[DATA_LENGTH["SINGLE_ITEM"]=1]="SINGLE_ITEM";DATA_LENGTH[DATA_LENGTH["DOUBLE_ITEM"]=2]="DOUBLE_ITEM";})(DATA_LENGTH||(exports.DATA_LENGTH=DATA_LENGTH={}));var Easing={easeOutQuart:_reactNativeReanimated.Easing.bezier(0.25,1,0.5,1)};exports.Easing=Easing;
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Easing = exports.DATA_LENGTH = void 0;
7
+
8
+ var _reactNativeReanimated = require("react-native-reanimated");
9
+
10
+ let DATA_LENGTH;
11
+ exports.DATA_LENGTH = DATA_LENGTH;
12
+
13
+ (function (DATA_LENGTH) {
14
+ DATA_LENGTH[DATA_LENGTH["SINGLE_ITEM"] = 1] = "SINGLE_ITEM";
15
+ DATA_LENGTH[DATA_LENGTH["DOUBLE_ITEM"] = 2] = "DOUBLE_ITEM";
16
+ })(DATA_LENGTH || (exports.DATA_LENGTH = DATA_LENGTH = {}));
17
+
18
+ const Easing = {
19
+ easeOutQuart: _reactNativeReanimated.Easing.bezier(0.25, 1, 0.5, 1)
20
+ };
21
+ exports.Easing = Easing;
2
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["DATA_LENGTH","Easing","easeOutQuart","_Easing","bezier"],"mappings":"mGACA,8D,GAEYA,CAAAA,W,2CAAAA,W,EAAAA,W,CAAAA,W,iCAAAA,W,CAAAA,W,oCAAAA,W,uBAAAA,W,MAKL,GAAMC,CAAAA,MAAM,CAAG,CACpBC,YAAY,CAAEC,8BAAQC,MAAR,CACZ,IADY,CAEZ,CAFY,CAGZ,GAHY,CAIZ,CAJY,CADM,CAAf,C","sourcesContent":["import type Animated from \"react-native-reanimated\";\nimport { Easing as _Easing } from \"react-native-reanimated\";\n\nexport enum DATA_LENGTH {\n SINGLE_ITEM = 1,\n DOUBLE_ITEM = 2,\n}\n\nexport const Easing = {\n easeOutQuart: _Easing.bezier(\n 0.25,\n 1,\n 0.5,\n 1,\n ) as unknown as Animated.EasingFunction,\n};\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":["DATA_LENGTH","Easing","easeOutQuart","_Easing","bezier"],"mappings":";;;;;;;AACA;;IAEYA,W;;;WAAAA,W;AAAAA,EAAAA,W,CAAAA,W;AAAAA,EAAAA,W,CAAAA,W;GAAAA,W,2BAAAA,W;;AAKL,MAAMC,MAAM,GAAG;AACpBC,EAAAA,YAAY,EAAEC,8BAAQC,MAAR,CACZ,IADY,EAEZ,CAFY,EAGZ,GAHY,EAIZ,CAJY;AADM,CAAf","sourcesContent":["import type Animated from \"react-native-reanimated\";\nimport { Easing as _Easing } from \"react-native-reanimated\";\n\nexport enum DATA_LENGTH {\n SINGLE_ITEM = 1,\n DOUBLE_ITEM = 2,\n}\n\nexport const Easing = {\n easeOutQuart: _Easing.bezier(\n 0.25,\n 1,\n 0.5,\n 1,\n ) as unknown as Animated.EasingFunction,\n};\n"]}
@@ -1,2 +1,57 @@
1
- Object.defineProperty(exports,"__esModule",{value:true});exports.useAutoPlay=useAutoPlay;var React=_interopRequireWildcard(require("react"));function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}function useAutoPlay(opts){var _opts$autoPlay=opts.autoPlay,autoPlay=_opts$autoPlay===void 0?false:_opts$autoPlay,_opts$autoPlayReverse=opts.autoPlayReverse,autoPlayReverse=_opts$autoPlayReverse===void 0?false:_opts$autoPlayReverse,autoPlayInterval=opts.autoPlayInterval,carouselController=opts.carouselController;var prev=carouselController.prev,next=carouselController.next;var timer=React.useRef();var stopped=React.useRef(!autoPlay);var play=React.useCallback(function(){if(stopped.current)return;timer.current&&clearTimeout(timer.current);timer.current=setTimeout(function(){autoPlayReverse?prev({onFinished:play}):next({onFinished:play});},autoPlayInterval);},[autoPlayReverse,autoPlayInterval,prev,next]);var pause=React.useCallback(function(){if(!autoPlay)return;timer.current&&clearTimeout(timer.current);stopped.current=true;},[autoPlay]);var start=React.useCallback(function(){if(!autoPlay)return;stopped.current=false;play();},[play,autoPlay]);React.useEffect(function(){if(autoPlay)start();else pause();return pause;},[pause,start,autoPlay]);return{pause:pause,start:start};}
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useAutoPlay = useAutoPlay;
7
+
8
+ var React = _interopRequireWildcard(require("react"));
9
+
10
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
+
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+
14
+ function useAutoPlay(opts) {
15
+ const {
16
+ autoPlay = false,
17
+ autoPlayReverse = false,
18
+ autoPlayInterval,
19
+ carouselController
20
+ } = opts;
21
+ const {
22
+ prev,
23
+ next
24
+ } = carouselController;
25
+ const timer = React.useRef();
26
+ const stopped = React.useRef(!autoPlay);
27
+ const play = React.useCallback(() => {
28
+ if (stopped.current) return;
29
+ timer.current && clearTimeout(timer.current);
30
+ timer.current = setTimeout(() => {
31
+ autoPlayReverse ? prev({
32
+ onFinished: play
33
+ }) : next({
34
+ onFinished: play
35
+ });
36
+ }, autoPlayInterval);
37
+ }, [autoPlayReverse, autoPlayInterval, prev, next]);
38
+ const pause = React.useCallback(() => {
39
+ if (!autoPlay) return;
40
+ timer.current && clearTimeout(timer.current);
41
+ stopped.current = true;
42
+ }, [autoPlay]);
43
+ const start = React.useCallback(() => {
44
+ if (!autoPlay) return;
45
+ stopped.current = false;
46
+ play();
47
+ }, [play, autoPlay]);
48
+ React.useEffect(() => {
49
+ if (autoPlay) start();else pause();
50
+ return pause;
51
+ }, [pause, start, autoPlay]);
52
+ return {
53
+ pause,
54
+ start
55
+ };
56
+ }
2
57
  //# sourceMappingURL=useAutoPlay.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["useAutoPlay.ts"],"names":["useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","prev","next","timer","React","useRef","stopped","play","useCallback","current","clearTimeout","setTimeout","onFinished","pause","start","useEffect"],"mappings":"yFAAA,oD,0/BAIO,QAASA,CAAAA,WAAT,CAAqBC,IAArB,CAKJ,CACD,mBAKIA,IALJ,CACEC,QADF,CACEA,QADF,yBACa,KADb,sCAKID,IALJ,CAEEE,eAFF,CAEEA,eAFF,gCAEoB,KAFpB,uBAGEC,gBAHF,CAKIH,IALJ,CAGEG,gBAHF,CAIEC,kBAJF,CAKIJ,IALJ,CAIEI,kBAJF,CAOA,GAAQC,CAAAA,IAAR,CAAuBD,kBAAvB,CAAQC,IAAR,CAAcC,IAAd,CAAuBF,kBAAvB,CAAcE,IAAd,CACA,GAAMC,CAAAA,KAAK,CAAGC,KAAK,CAACC,MAAN,EAAd,CACA,GAAMC,CAAAA,OAAO,CAAGF,KAAK,CAACC,MAAN,CAAsB,CAACR,QAAvB,CAAhB,CAEA,GAAMU,CAAAA,IAAI,CAAGH,KAAK,CAACI,WAAN,CAAkB,UAAM,CACnC,GAAIF,OAAO,CAACG,OAAZ,CACE,OAEFN,KAAK,CAACM,OAAN,EAAiBC,YAAY,CAACP,KAAK,CAACM,OAAP,CAA7B,CACAN,KAAK,CAACM,OAAN,CAAgBE,UAAU,CAAC,UAAM,CAC/Bb,eAAe,CACXG,IAAI,CAAC,CAAEW,UAAU,CAAEL,IAAd,CAAD,CADO,CAEXL,IAAI,CAAC,CAAEU,UAAU,CAAEL,IAAd,CAAD,CAFR,CAGD,CAJyB,CAIvBR,gBAJuB,CAA1B,CAKD,CAVY,CAUV,CAACD,eAAD,CAAkBC,gBAAlB,CAAoCE,IAApC,CAA0CC,IAA1C,CAVU,CAAb,CAYA,GAAMW,CAAAA,KAAK,CAAGT,KAAK,CAACI,WAAN,CAAkB,UAAM,CACpC,GAAI,CAACX,QAAL,CACE,OAEFM,KAAK,CAACM,OAAN,EAAiBC,YAAY,CAACP,KAAK,CAACM,OAAP,CAA7B,CACAH,OAAO,CAACG,OAAR,CAAkB,IAAlB,CACD,CANa,CAMX,CAACZ,QAAD,CANW,CAAd,CAQA,GAAMiB,CAAAA,KAAK,CAAGV,KAAK,CAACI,WAAN,CAAkB,UAAM,CACpC,GAAI,CAACX,QAAL,CACE,OAEFS,OAAO,CAACG,OAAR,CAAkB,KAAlB,CACAF,IAAI,GACL,CANa,CAMX,CAACA,IAAD,CAAOV,QAAP,CANW,CAAd,CAQAO,KAAK,CAACW,SAAN,CAAgB,UAAM,CACpB,GAAIlB,QAAJ,CACEiB,KAAK,GADP,IAGED,CAAAA,KAAK,GAEP,MAAOA,CAAAA,KAAP,CACD,CAPD,CAOG,CAACA,KAAD,CAAQC,KAAR,CAAejB,QAAf,CAPH,EASA,MAAO,CACLgB,KAAK,CAALA,KADK,CAELC,KAAK,CAALA,KAFK,CAAP,CAID","sourcesContent":["import * as React from \"react\";\n\nimport type { ICarouselController } from \"./useCarouselController\";\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean\n autoPlayInterval?: number\n autoPlayReverse?: boolean\n carouselController: ICarouselController\n}) {\n const {\n autoPlay = false,\n autoPlayReverse = false,\n autoPlayInterval,\n carouselController,\n } = opts;\n\n const { prev, next } = carouselController;\n const timer = React.useRef<ReturnType<typeof setTimeout>>();\n const stopped = React.useRef<boolean>(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current)\n return;\n\n timer.current && clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n autoPlayReverse\n ? prev({ onFinished: play })\n : next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, prev, next]);\n\n const pause = React.useCallback(() => {\n if (!autoPlay)\n return;\n\n timer.current && clearTimeout(timer.current);\n stopped.current = true;\n }, [autoPlay]);\n\n const start = React.useCallback(() => {\n if (!autoPlay)\n return;\n\n stopped.current = false;\n play();\n }, [play, autoPlay]);\n\n React.useEffect(() => {\n if (autoPlay)\n start();\n else\n pause();\n\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n"]}
1
+ {"version":3,"sources":["useAutoPlay.ts"],"names":["useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","prev","next","timer","React","useRef","stopped","play","useCallback","current","clearTimeout","setTimeout","onFinished","pause","start","useEffect"],"mappings":";;;;;;;AAAA;;;;;;AAIO,SAASA,WAAT,CAAqBC,IAArB,EAKJ;AACD,QAAM;AACJC,IAAAA,QAAQ,GAAG,KADP;AAEJC,IAAAA,eAAe,GAAG,KAFd;AAGJC,IAAAA,gBAHI;AAIJC,IAAAA;AAJI,MAKFJ,IALJ;AAOA,QAAM;AAAEK,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAAiBF,kBAAvB;AACA,QAAMG,KAAK,GAAGC,KAAK,CAACC,MAAN,EAAd;AACA,QAAMC,OAAO,GAAGF,KAAK,CAACC,MAAN,CAAsB,CAACR,QAAvB,CAAhB;AAEA,QAAMU,IAAI,GAAGH,KAAK,CAACI,WAAN,CAAkB,MAAM;AACnC,QAAIF,OAAO,CAACG,OAAZ,EACE;AAEFN,IAAAA,KAAK,CAACM,OAAN,IAAiBC,YAAY,CAACP,KAAK,CAACM,OAAP,CAA7B;AACAN,IAAAA,KAAK,CAACM,OAAN,GAAgBE,UAAU,CAAC,MAAM;AAC/Bb,MAAAA,eAAe,GACXG,IAAI,CAAC;AAAEW,QAAAA,UAAU,EAAEL;AAAd,OAAD,CADO,GAEXL,IAAI,CAAC;AAAEU,QAAAA,UAAU,EAAEL;AAAd,OAAD,CAFR;AAGD,KAJyB,EAIvBR,gBAJuB,CAA1B;AAKD,GAVY,EAUV,CAACD,eAAD,EAAkBC,gBAAlB,EAAoCE,IAApC,EAA0CC,IAA1C,CAVU,CAAb;AAYA,QAAMW,KAAK,GAAGT,KAAK,CAACI,WAAN,CAAkB,MAAM;AACpC,QAAI,CAACX,QAAL,EACE;AAEFM,IAAAA,KAAK,CAACM,OAAN,IAAiBC,YAAY,CAACP,KAAK,CAACM,OAAP,CAA7B;AACAH,IAAAA,OAAO,CAACG,OAAR,GAAkB,IAAlB;AACD,GANa,EAMX,CAACZ,QAAD,CANW,CAAd;AAQA,QAAMiB,KAAK,GAAGV,KAAK,CAACI,WAAN,CAAkB,MAAM;AACpC,QAAI,CAACX,QAAL,EACE;AAEFS,IAAAA,OAAO,CAACG,OAAR,GAAkB,KAAlB;AACAF,IAAAA,IAAI;AACL,GANa,EAMX,CAACA,IAAD,EAAOV,QAAP,CANW,CAAd;AAQAO,EAAAA,KAAK,CAACW,SAAN,CAAgB,MAAM;AACpB,QAAIlB,QAAJ,EACEiB,KAAK,GADP,KAGED,KAAK;AAEP,WAAOA,KAAP;AACD,GAPD,EAOG,CAACA,KAAD,EAAQC,KAAR,EAAejB,QAAf,CAPH;AASA,SAAO;AACLgB,IAAAA,KADK;AAELC,IAAAA;AAFK,GAAP;AAID","sourcesContent":["import * as React from \"react\";\n\nimport type { ICarouselController } from \"./useCarouselController\";\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean\n autoPlayInterval?: number\n autoPlayReverse?: boolean\n carouselController: ICarouselController\n}) {\n const {\n autoPlay = false,\n autoPlayReverse = false,\n autoPlayInterval,\n carouselController,\n } = opts;\n\n const { prev, next } = carouselController;\n const timer = React.useRef<ReturnType<typeof setTimeout>>();\n const stopped = React.useRef<boolean>(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current)\n return;\n\n timer.current && clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n autoPlayReverse\n ? prev({ onFinished: play })\n : next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, prev, next]);\n\n const pause = React.useCallback(() => {\n if (!autoPlay)\n return;\n\n timer.current && clearTimeout(timer.current);\n stopped.current = true;\n }, [autoPlay]);\n\n const start = React.useCallback(() => {\n if (!autoPlay)\n return;\n\n stopped.current = false;\n play();\n }, [play, autoPlay]);\n\n React.useEffect(() => {\n if (autoPlay)\n start();\n else\n pause();\n\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n"]}