@salutejs/plasma-new-hope 0.321.1-canary.1945.14661970912.0 → 0.321.1-canary.1946.14663041744.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/index.css +0 -7
- package/cjs/index.js +0 -7
- package/cjs/index.js.map +1 -1
- package/emotion/cjs/index.js +0 -11
- package/emotion/es/index.js +1 -2
- package/es/index.css +0 -7
- package/es/index.js +0 -3
- package/es/index.js.map +1 -1
- package/package.json +4 -4
- package/styled-components/cjs/index.js +0 -11
- package/styled-components/es/index.js +1 -2
- package/types/index.d.ts +0 -1
- package/types/index.d.ts.map +1 -1
- package/cjs/components/Carousel/Carousel.css +0 -4
- package/cjs/components/Carousel/Carousel.js +0 -80
- package/cjs/components/Carousel/Carousel.js.map +0 -1
- package/cjs/components/Carousel/Carousel.styles.js +0 -67
- package/cjs/components/Carousel/Carousel.styles.js.map +0 -1
- package/cjs/components/Carousel/Carousel.styles_1lyqijv.css +0 -4
- package/cjs/components/Carousel/CarouselItem.js +0 -53
- package/cjs/components/Carousel/CarouselItem.js.map +0 -1
- package/cjs/components/Carousel/CarouselItem_cqjszm.css +0 -1
- package/cjs/components/Carousel/useCarousel.js +0 -487
- package/cjs/components/Carousel/useCarousel.js.map +0 -1
- package/cjs/components/Carousel/useDragScroll.js +0 -62
- package/cjs/components/Carousel/useDragScroll.js.map +0 -1
- package/emotion/cjs/components/Carousel/Carousel.js +0 -77
- package/emotion/cjs/components/Carousel/Carousel.styles.js +0 -49
- package/emotion/cjs/components/Carousel/Carousel.types.js +0 -5
- package/emotion/cjs/components/Carousel/CarouselItem.js +0 -38
- package/emotion/cjs/components/Carousel/index.js +0 -32
- package/emotion/cjs/components/Carousel/useCarousel.js +0 -478
- package/emotion/cjs/components/Carousel/useDragScroll.js +0 -65
- package/emotion/cjs/examples/plasma_b2c/components/Carousel/Carousel.config.js +0 -10
- package/emotion/cjs/examples/plasma_b2c/components/Carousel/Carousel.js +0 -18
- package/emotion/cjs/examples/plasma_b2c/components/Carousel/Carousel.stories.tsx +0 -80
- package/emotion/cjs/examples/plasma_web/components/Carousel/Carousel.config.js +0 -10
- package/emotion/cjs/examples/plasma_web/components/Carousel/Carousel.js +0 -18
- package/emotion/cjs/examples/plasma_web/components/Carousel/Carousel.stories.tsx +0 -80
- package/emotion/es/components/Carousel/Carousel.js +0 -69
- package/emotion/es/components/Carousel/Carousel.styles.js +0 -42
- package/emotion/es/components/Carousel/Carousel.types.js +0 -1
- package/emotion/es/components/Carousel/CarouselItem.js +0 -31
- package/emotion/es/components/Carousel/index.js +0 -3
- package/emotion/es/components/Carousel/useCarousel.js +0 -468
- package/emotion/es/components/Carousel/useDragScroll.js +0 -59
- package/emotion/es/examples/plasma_b2c/components/Carousel/Carousel.config.js +0 -4
- package/emotion/es/examples/plasma_b2c/components/Carousel/Carousel.js +0 -6
- package/emotion/es/examples/plasma_b2c/components/Carousel/Carousel.stories.tsx +0 -80
- package/emotion/es/examples/plasma_web/components/Carousel/Carousel.config.js +0 -4
- package/emotion/es/examples/plasma_web/components/Carousel/Carousel.js +0 -6
- package/emotion/es/examples/plasma_web/components/Carousel/Carousel.stories.tsx +0 -80
- package/es/components/Carousel/Carousel.css +0 -4
- package/es/components/Carousel/Carousel.js +0 -71
- package/es/components/Carousel/Carousel.js.map +0 -1
- package/es/components/Carousel/Carousel.styles.js +0 -60
- package/es/components/Carousel/Carousel.styles.js.map +0 -1
- package/es/components/Carousel/Carousel.styles_1lyqijv.css +0 -4
- package/es/components/Carousel/CarouselItem.js +0 -45
- package/es/components/Carousel/CarouselItem.js.map +0 -1
- package/es/components/Carousel/CarouselItem_cqjszm.css +0 -1
- package/es/components/Carousel/useCarousel.js +0 -472
- package/es/components/Carousel/useCarousel.js.map +0 -1
- package/es/components/Carousel/useDragScroll.js +0 -58
- package/es/components/Carousel/useDragScroll.js.map +0 -1
- package/styled-components/cjs/components/Carousel/Carousel.js +0 -77
- package/styled-components/cjs/components/Carousel/Carousel.styles.js +0 -38
- package/styled-components/cjs/components/Carousel/Carousel.types.js +0 -5
- package/styled-components/cjs/components/Carousel/CarouselItem.js +0 -37
- package/styled-components/cjs/components/Carousel/index.js +0 -32
- package/styled-components/cjs/components/Carousel/useCarousel.js +0 -478
- package/styled-components/cjs/components/Carousel/useDragScroll.js +0 -65
- package/styled-components/cjs/examples/plasma_b2c/components/Carousel/Carousel.config.js +0 -10
- package/styled-components/cjs/examples/plasma_b2c/components/Carousel/Carousel.js +0 -18
- package/styled-components/cjs/examples/plasma_b2c/components/Carousel/Carousel.stories.tsx +0 -80
- package/styled-components/cjs/examples/plasma_web/components/Carousel/Carousel.config.js +0 -10
- package/styled-components/cjs/examples/plasma_web/components/Carousel/Carousel.js +0 -18
- package/styled-components/cjs/examples/plasma_web/components/Carousel/Carousel.stories.tsx +0 -80
- package/styled-components/es/components/Carousel/Carousel.js +0 -69
- package/styled-components/es/components/Carousel/Carousel.styles.js +0 -30
- package/styled-components/es/components/Carousel/Carousel.types.js +0 -1
- package/styled-components/es/components/Carousel/CarouselItem.js +0 -30
- package/styled-components/es/components/Carousel/index.js +0 -3
- package/styled-components/es/components/Carousel/useCarousel.js +0 -468
- package/styled-components/es/components/Carousel/useDragScroll.js +0 -59
- package/styled-components/es/examples/plasma_b2c/components/Carousel/Carousel.config.js +0 -4
- package/styled-components/es/examples/plasma_b2c/components/Carousel/Carousel.js +0 -6
- package/styled-components/es/examples/plasma_b2c/components/Carousel/Carousel.stories.tsx +0 -80
- package/styled-components/es/examples/plasma_web/components/Carousel/Carousel.config.js +0 -4
- package/styled-components/es/examples/plasma_web/components/Carousel/Carousel.js +0 -6
- package/styled-components/es/examples/plasma_web/components/Carousel/Carousel.stories.tsx +0 -80
- package/types/components/Carousel/Carousel.d.ts +0 -22
- package/types/components/Carousel/Carousel.d.ts.map +0 -1
- package/types/components/Carousel/Carousel.styles.d.ts +0 -16
- package/types/components/Carousel/Carousel.styles.d.ts.map +0 -1
- package/types/components/Carousel/Carousel.types.d.ts +0 -111
- package/types/components/Carousel/Carousel.types.d.ts.map +0 -1
- package/types/components/Carousel/CarouselItem.d.ts +0 -4
- package/types/components/Carousel/CarouselItem.d.ts.map +0 -1
- package/types/components/Carousel/index.d.ts +0 -5
- package/types/components/Carousel/index.d.ts.map +0 -1
- package/types/components/Carousel/useCarousel.d.ts +0 -63
- package/types/components/Carousel/useCarousel.d.ts.map +0 -1
- package/types/components/Carousel/useDragScroll.d.ts +0 -3
- package/types/components/Carousel/useDragScroll.d.ts.map +0 -1
@@ -1,472 +0,0 @@
|
|
1
|
-
import { useRef, useMemo, useCallback, useEffect } from 'react';
|
2
|
-
import throttle from 'lodash.throttle';
|
3
|
-
|
4
|
-
/**
|
5
|
-
* Подсчет смещения из-за паддингов.
|
6
|
-
*/
|
7
|
-
var getCalculatedOffset = function getCalculatedOffset(scrollEl, trackEl, axis) {
|
8
|
-
var paddingProp = axis === 'x' ? 'paddingLeft' : 'paddingTop';
|
9
|
-
return parseInt(getComputedStyle(scrollEl)[paddingProp], 10) + parseInt(getComputedStyle(trackEl)[paddingProp], 10);
|
10
|
-
};
|
11
|
-
var positionModByScrollAlign = function positionModByScrollAlign(_ref) {
|
12
|
-
var scrollAlign = _ref.scrollAlign,
|
13
|
-
position = _ref.position,
|
14
|
-
carouselSize = _ref.carouselSize,
|
15
|
-
itemSize = _ref.itemSize,
|
16
|
-
offset = _ref.offset,
|
17
|
-
scrollStart = _ref.scrollStart,
|
18
|
-
axis = _ref.axis;
|
19
|
-
if (scrollAlign === 'start') {
|
20
|
-
var inaccuracy = 1;
|
21
|
-
var paddingOffset = axis === 'y' ? offset - itemSize / 2 + inaccuracy : 0;
|
22
|
-
return position + paddingOffset;
|
23
|
-
}
|
24
|
-
if (scrollAlign === 'center') {
|
25
|
-
return position - carouselSize / 2 + itemSize / 2;
|
26
|
-
}
|
27
|
-
if (scrollAlign === 'end') {
|
28
|
-
return position - carouselSize + itemSize + offset;
|
29
|
-
}
|
30
|
-
if (scrollAlign === 'activeDirection') {
|
31
|
-
if (position >= scrollStart + carouselSize - itemSize) {
|
32
|
-
return position - carouselSize + itemSize + offset;
|
33
|
-
}
|
34
|
-
if (position > scrollStart) {
|
35
|
-
return scrollStart;
|
36
|
-
}
|
37
|
-
}
|
38
|
-
return position;
|
39
|
-
};
|
40
|
-
|
41
|
-
/**
|
42
|
-
* Подсчет скролла до переданного индекса.
|
43
|
-
*/
|
44
|
-
var getCalculatedPos = function getCalculatedPos(_ref2) {
|
45
|
-
var scrollEl = _ref2.scrollEl,
|
46
|
-
items = _ref2.items,
|
47
|
-
axis = _ref2.axis,
|
48
|
-
index = _ref2.index,
|
49
|
-
offset = _ref2.offset,
|
50
|
-
scrollAlign = _ref2.scrollAlign;
|
51
|
-
var position = scrollAlign === 'center' ? offset : 0;
|
52
|
-
var carouselSize;
|
53
|
-
var itemSize;
|
54
|
-
var scrollStart;
|
55
|
-
if (items.item(index) === null) {
|
56
|
-
return position;
|
57
|
-
}
|
58
|
-
for (var i = 0; i < index; i++) {
|
59
|
-
if (axis === 'x') {
|
60
|
-
var _items$item$offsetWid, _items$item;
|
61
|
-
position += (_items$item$offsetWid = (_items$item = items.item(i)) === null || _items$item === void 0 ? void 0 : _items$item.offsetWidth) !== null && _items$item$offsetWid !== void 0 ? _items$item$offsetWid : 0;
|
62
|
-
} else {
|
63
|
-
var _items$item$offsetHei, _items$item2;
|
64
|
-
position += (_items$item$offsetHei = (_items$item2 = items.item(i)) === null || _items$item2 === void 0 ? void 0 : _items$item2.offsetHeight) !== null && _items$item$offsetHei !== void 0 ? _items$item$offsetHei : 0;
|
65
|
-
}
|
66
|
-
}
|
67
|
-
if (axis === 'x') {
|
68
|
-
var _items$item$offsetWid2, _items$item3;
|
69
|
-
carouselSize = scrollEl.offsetWidth;
|
70
|
-
itemSize = (_items$item$offsetWid2 = (_items$item3 = items.item(index)) === null || _items$item3 === void 0 ? void 0 : _items$item3.offsetWidth) !== null && _items$item$offsetWid2 !== void 0 ? _items$item$offsetWid2 : 0;
|
71
|
-
scrollStart = scrollEl.scrollLeft;
|
72
|
-
} else {
|
73
|
-
var _items$item$offsetHei2, _items$item4;
|
74
|
-
carouselSize = scrollEl.offsetHeight;
|
75
|
-
itemSize = (_items$item$offsetHei2 = (_items$item4 = items.item(index)) === null || _items$item4 === void 0 ? void 0 : _items$item4.offsetHeight) !== null && _items$item$offsetHei2 !== void 0 ? _items$item$offsetHei2 : 0;
|
76
|
-
scrollStart = scrollEl.scrollTop;
|
77
|
-
}
|
78
|
-
return positionModByScrollAlign({
|
79
|
-
scrollAlign: scrollAlign,
|
80
|
-
position: position,
|
81
|
-
carouselSize: carouselSize,
|
82
|
-
itemSize: itemSize,
|
83
|
-
offset: offset,
|
84
|
-
scrollStart: scrollStart,
|
85
|
-
axis: axis
|
86
|
-
});
|
87
|
-
};
|
88
|
-
var DEFAULT_DURATION = 300;
|
89
|
-
|
90
|
-
// https://css-tricks.com/emulating-css-timing-functions-javascript/
|
91
|
-
var tfs = {
|
92
|
-
linear: function linear(t) {
|
93
|
-
return t;
|
94
|
-
},
|
95
|
-
// eslint-disable-next-line
|
96
|
-
easeIn: function easeIn(t) {
|
97
|
-
return Math.pow(t, 1.675);
|
98
|
-
},
|
99
|
-
// eslint-disable-next-line
|
100
|
-
easeOut: function easeOut(t) {
|
101
|
-
return 1 - Math.pow(1 - t, 1.675);
|
102
|
-
},
|
103
|
-
easeInOut: function easeInOut(t) {
|
104
|
-
return 0.5 * (Math.sin((t - 0.5) * Math.PI) + 1);
|
105
|
-
}
|
106
|
-
};
|
107
|
-
/**
|
108
|
-
* Плавная прокрутка по горизонтали
|
109
|
-
* @param {Element} elem
|
110
|
-
* @param {number} pos
|
111
|
-
* @param {number} duration
|
112
|
-
* @param {string} timingFunction
|
113
|
-
*/
|
114
|
-
var animatedScrollToX = function animatedScrollToX(elem, pos) {
|
115
|
-
var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_DURATION;
|
116
|
-
var timingFunction = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'easeInOut';
|
117
|
-
var startTime;
|
118
|
-
var startX = elem.scrollLeft;
|
119
|
-
var endX = Math.max(0, Math.min(elem.scrollWidth - elem.clientWidth, pos));
|
120
|
-
var handleNewAnimationFrame = function handleNewAnimationFrame() {
|
121
|
-
startTime = startTime || Date.now();
|
122
|
-
var timePos = Math.min(1, Math.max(1, Date.now() - startTime) / duration);
|
123
|
-
var scrollPos = tfs[timingFunction](timePos);
|
124
|
-
var left = startX + (endX - startX) * scrollPos;
|
125
|
-
elem.scrollTo({
|
126
|
-
left: left
|
127
|
-
});
|
128
|
-
if (timePos !== 1) window.requestAnimationFrame(handleNewAnimationFrame);
|
129
|
-
};
|
130
|
-
window.requestAnimationFrame(handleNewAnimationFrame);
|
131
|
-
};
|
132
|
-
|
133
|
-
/**
|
134
|
-
* Прокрутка к указанной позиции с анимацией или без.
|
135
|
-
*/
|
136
|
-
var scrollToPos = function scrollToPos(_ref3) {
|
137
|
-
var scrollEl = _ref3.scrollEl,
|
138
|
-
pos = _ref3.pos,
|
139
|
-
axis = _ref3.axis,
|
140
|
-
animated = _ref3.animated,
|
141
|
-
duration = _ref3.duration,
|
142
|
-
timingFunction = _ref3.timingFunction;
|
143
|
-
if (axis === 'x' && Math.abs(pos - scrollEl.scrollLeft) > 1) {
|
144
|
-
if (animated) {
|
145
|
-
animatedScrollToX(scrollEl, pos, duration, timingFunction);
|
146
|
-
} else {
|
147
|
-
scrollEl.scrollTo({
|
148
|
-
left: pos
|
149
|
-
});
|
150
|
-
}
|
151
|
-
}
|
152
|
-
};
|
153
|
-
var round = function round(n) {
|
154
|
-
return Math.round(n * 100) / 100;
|
155
|
-
};
|
156
|
-
|
157
|
-
/**
|
158
|
-
* Получить позицию (слот) айтема в каруселе.
|
159
|
-
* Каждый айтем имеет свой слот относительно вьюпорта карусели.
|
160
|
-
*/
|
161
|
-
var getItemSlot = function getItemSlot(itemIndex, itemEnd, itemSize, scrollStart, scrollSize, scrollAlign) {
|
162
|
-
var prevIndex = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;
|
163
|
-
var offset = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 0;
|
164
|
-
/**
|
165
|
-
* Граница и центр скролла (видимой части).
|
166
|
-
* Смещение + размер.
|
167
|
-
*/
|
168
|
-
var scrollEnd = scrollStart + scrollSize;
|
169
|
-
var scrollCenter = scrollStart + scrollSize / 2;
|
170
|
-
var itemCenter = itemEnd - itemSize / 2;
|
171
|
-
if (scrollAlign === 'center') {
|
172
|
-
return round((itemCenter - scrollCenter) / itemSize);
|
173
|
-
}
|
174
|
-
if (scrollAlign === 'start') {
|
175
|
-
return round((itemEnd - itemSize - scrollStart) / itemSize);
|
176
|
-
}
|
177
|
-
if (scrollAlign === 'end') {
|
178
|
-
return round((itemEnd - (scrollSize + scrollStart)) / itemSize);
|
179
|
-
}
|
180
|
-
if (scrollAlign === 'activeDirection') {
|
181
|
-
var prevStart = offset + itemSize * prevIndex;
|
182
|
-
var prevEnd = prevStart + itemSize;
|
183
|
-
var prevVisible = prevEnd > scrollStart && prevStart < scrollEnd;
|
184
|
-
if (!prevVisible) {
|
185
|
-
if (prevIndex < itemIndex) {
|
186
|
-
return round((itemEnd - (scrollSize + scrollStart)) / itemSize);
|
187
|
-
}
|
188
|
-
return round((itemEnd - itemSize - scrollStart) / itemSize);
|
189
|
-
}
|
190
|
-
}
|
191
|
-
return null;
|
192
|
-
};
|
193
|
-
function getCarouselItems(track) {
|
194
|
-
return track.children;
|
195
|
-
}
|
196
|
-
function useDebouncedFunction(func, delay, cleanUp) {
|
197
|
-
var timeoutRef = useRef();
|
198
|
-
|
199
|
-
/**
|
200
|
-
* Очистка таймера
|
201
|
-
*/
|
202
|
-
function clearTimer() {
|
203
|
-
if (timeoutRef.current) {
|
204
|
-
clearTimeout(timeoutRef.current);
|
205
|
-
timeoutRef.current = undefined;
|
206
|
-
}
|
207
|
-
}
|
208
|
-
|
209
|
-
/**
|
210
|
-
* Очищаем таймер при анмаунте компонента, если cleanUp выставлен в true
|
211
|
-
* и тем самым отменяем последний запланированный вызов
|
212
|
-
*/
|
213
|
-
useEffect(function () {
|
214
|
-
return cleanUp ? clearTimer : undefined;
|
215
|
-
}, [cleanUp]);
|
216
|
-
return function () {
|
217
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
218
|
-
args[_key] = arguments[_key];
|
219
|
-
}
|
220
|
-
clearTimer();
|
221
|
-
timeoutRef.current = setTimeout(function () {
|
222
|
-
return func.apply(void 0, args);
|
223
|
-
}, delay);
|
224
|
-
};
|
225
|
-
}
|
226
|
-
var THROTTLE_DEFAULT_MS = 100;
|
227
|
-
var DEBOUNCE_DEFAULT_MS = 150;
|
228
|
-
var useCarousel = function useCarousel(_ref4) {
|
229
|
-
var index = _ref4.index,
|
230
|
-
_ref4$axis = _ref4.axis,
|
231
|
-
axis = _ref4$axis === void 0 ? 'x' : _ref4$axis,
|
232
|
-
_ref4$detectActive = _ref4.detectActive,
|
233
|
-
detectActive = _ref4$detectActive === void 0 ? false : _ref4$detectActive,
|
234
|
-
_ref4$detectThreshold = _ref4.detectThreshold,
|
235
|
-
detectThreshold = _ref4$detectThreshold === void 0 ? 0.5 : _ref4$detectThreshold,
|
236
|
-
_ref4$scrollAlign = _ref4.scrollAlign,
|
237
|
-
scrollAlign = _ref4$scrollAlign === void 0 ? 'center' : _ref4$scrollAlign,
|
238
|
-
scaleCallback = _ref4.scaleCallback,
|
239
|
-
scaleResetCallback = _ref4.scaleResetCallback,
|
240
|
-
onIndexChange = _ref4.onIndexChange,
|
241
|
-
onDetectActiveItem = _ref4.onDetectActiveItem,
|
242
|
-
_ref4$animatedScrollB = _ref4.animatedScrollByIndex,
|
243
|
-
animatedScrollByIndex = _ref4$animatedScrollB === void 0 ? false : _ref4$animatedScrollB,
|
244
|
-
_ref4$throttleMs = _ref4.throttleMs,
|
245
|
-
throttleMs = _ref4$throttleMs === void 0 ? THROTTLE_DEFAULT_MS : _ref4$throttleMs,
|
246
|
-
_ref4$debounceMs = _ref4.debounceMs,
|
247
|
-
debounceMs = _ref4$debounceMs === void 0 ? DEBOUNCE_DEFAULT_MS : _ref4$debounceMs;
|
248
|
-
var prevIndex = useRef(null);
|
249
|
-
var direction = useRef(null);
|
250
|
-
var offset = useRef(0);
|
251
|
-
var scrollRef = useRef(null);
|
252
|
-
var trackRef = useRef(null);
|
253
|
-
|
254
|
-
/**
|
255
|
-
* Для того, чтобы не спамить изменениями индекса.
|
256
|
-
* Задержка дебаунса слегка больше, чем у тротлинга.
|
257
|
-
* Таким образом, событие срабатывает при завершении скролла.
|
258
|
-
*/
|
259
|
-
var debouncedOnIndexChange = useDebouncedFunction(function (i) {
|
260
|
-
return onIndexChange === null || onIndexChange === void 0 ? void 0 : onIndexChange(i);
|
261
|
-
}, debounceMs);
|
262
|
-
|
263
|
-
/**
|
264
|
-
* Вычисление центрального элемента.
|
265
|
-
* Подсчет: от 0 до 1, какое количество ширины/высоты
|
266
|
-
* каждого элемента находится по центру скролла.
|
267
|
-
*/
|
268
|
-
var throttledDetectActiveItem = useMemo(function () {
|
269
|
-
return throttle(function () {
|
270
|
-
if (!detectActive || scrollRef.current === null || trackRef.current === null) {
|
271
|
-
return;
|
272
|
-
}
|
273
|
-
|
274
|
-
/**
|
275
|
-
* Правая (или нижняя для Оу) граница элемента.
|
276
|
-
*/
|
277
|
-
var itemEdge = offset.current;
|
278
|
-
|
279
|
-
/**
|
280
|
-
* Смещение (отрицательный или положительный отступ)
|
281
|
-
* и размер карусели (для Ox - ширина, для Oy - высота).
|
282
|
-
*/
|
283
|
-
var scrollPos = scrollRef.current[axis === 'x' ? 'scrollLeft' : 'scrollTop'];
|
284
|
-
var scrollSize = scrollRef.current[axis === 'x' ? 'offsetWidth' : 'offsetHeight'];
|
285
|
-
|
286
|
-
/**
|
287
|
-
* Граница скролла (видимой части).
|
288
|
-
* Смещение + размер.
|
289
|
-
*/
|
290
|
-
var scrollEdge = scrollPos + scrollSize;
|
291
|
-
|
292
|
-
/**
|
293
|
-
* Элементы перед, после и в видимой части.
|
294
|
-
* перед [ ВИДИМЫЕ ] после
|
295
|
-
*/
|
296
|
-
var prevItems = [];
|
297
|
-
var nextItems = [];
|
298
|
-
var count = 0;
|
299
|
-
var items = getCarouselItems(trackRef.current);
|
300
|
-
|
301
|
-
/**
|
302
|
-
* Проходим по всему списку, суммируя ширины элементов,
|
303
|
-
* пока не найдем один элемент, чей центр будет в центре карусели.
|
304
|
-
*/
|
305
|
-
for (var itemIndex = 0; itemIndex < items.length; itemIndex++) {
|
306
|
-
var _prevIndex$current;
|
307
|
-
var item = items.item(itemIndex);
|
308
|
-
if (item === null) {
|
309
|
-
// eslint-disable-next-line no-continue
|
310
|
-
continue;
|
311
|
-
}
|
312
|
-
|
313
|
-
/**
|
314
|
-
* Для Ox - ширина, для Oy - высота.
|
315
|
-
*/
|
316
|
-
var itemSize = item[axis === 'x' ? 'offsetWidth' : 'offsetHeight'];
|
317
|
-
|
318
|
-
/**
|
319
|
-
* Все элементы правее вьюпорта выпадают из процедуры.
|
320
|
-
* Сравниваем по предыдущему элементу.
|
321
|
-
* [ ... ] ...|n| <- Левый край элемента за пределами начала видимой части
|
322
|
-
*/
|
323
|
-
if (itemEdge > scrollEdge) {
|
324
|
-
if (scaleCallback && scaleResetCallback) {
|
325
|
-
nextItems.push(item);
|
326
|
-
}
|
327
|
-
// eslint-disable-next-line no-continue
|
328
|
-
continue;
|
329
|
-
}
|
330
|
-
itemEdge += itemSize;
|
331
|
-
|
332
|
-
/**
|
333
|
-
* Все элементы левее вьюпорта выпадают из процедуры.
|
334
|
-
* Сравниваем по текущему элементу.
|
335
|
-
* Правый край элемента за пределами начала видимой части -> |p|... [ ... ]
|
336
|
-
*/
|
337
|
-
if (scrollPos > itemEdge) {
|
338
|
-
if (scaleCallback && scaleResetCallback) {
|
339
|
-
prevItems.push(item);
|
340
|
-
}
|
341
|
-
// eslint-disable-next-line no-continue
|
342
|
-
continue;
|
343
|
-
}
|
344
|
-
var itemSlot = getItemSlot(itemIndex, itemEdge, itemSize, scrollPos, scrollSize, scrollAlign, (_prevIndex$current = prevIndex.current) !== null && _prevIndex$current !== void 0 ? _prevIndex$current : 0, offset.current);
|
345
|
-
if (itemSlot !== null) {
|
346
|
-
if (detectThreshold && Math.abs(itemSlot) <= detectThreshold) {
|
347
|
-
onDetectActiveItem === null || onDetectActiveItem === void 0 || onDetectActiveItem(itemIndex);
|
348
|
-
debouncedOnIndexChange === null || debouncedOnIndexChange === void 0 || debouncedOnIndexChange(itemIndex);
|
349
|
-
}
|
350
|
-
if (scaleCallback) {
|
351
|
-
scaleCallback(item, itemSlot);
|
352
|
-
/**
|
353
|
-
* Количество айтемов в видимой части.
|
354
|
-
*/
|
355
|
-
count++;
|
356
|
-
}
|
357
|
-
}
|
358
|
-
}
|
359
|
-
if (scaleCallback && scaleResetCallback) {
|
360
|
-
window.requestAnimationFrame(function () {
|
361
|
-
if (direction.current) {
|
362
|
-
if (nextItems.length) {
|
363
|
-
nextItems.splice(0, count).forEach(function (elem) {
|
364
|
-
return scaleCallback(elem, count);
|
365
|
-
});
|
366
|
-
if (nextItems.length) {
|
367
|
-
nextItems.splice(0, count).forEach(function (elem) {
|
368
|
-
return scaleResetCallback(elem);
|
369
|
-
});
|
370
|
-
}
|
371
|
-
}
|
372
|
-
} else if (prevItems.length) {
|
373
|
-
var prItemsRev = prevItems.reverse();
|
374
|
-
prItemsRev.splice(0, count).forEach(function (elem) {
|
375
|
-
return scaleCallback(elem, count * -1);
|
376
|
-
});
|
377
|
-
if (prItemsRev.length) {
|
378
|
-
prItemsRev.splice(0, count).forEach(function (elem) {
|
379
|
-
return scaleResetCallback(elem);
|
380
|
-
});
|
381
|
-
}
|
382
|
-
}
|
383
|
-
});
|
384
|
-
}
|
385
|
-
}, throttleMs);
|
386
|
-
}, [axis, debouncedOnIndexChange, detectActive, detectThreshold, onDetectActiveItem, scaleCallback, scaleResetCallback, scrollAlign, throttleMs]);
|
387
|
-
|
388
|
-
/**
|
389
|
-
* Прокрутка до нужной позиции индекса.
|
390
|
-
*/
|
391
|
-
var toIndex = useCallback(function (i) {
|
392
|
-
var scrollEl = scrollRef.current;
|
393
|
-
var items = trackRef.current ? getCarouselItems(trackRef.current) : null;
|
394
|
-
if (scrollEl && items && items.length > 0 && i >= 0) {
|
395
|
-
scrollToPos({
|
396
|
-
scrollEl: scrollEl,
|
397
|
-
pos: getCalculatedPos({
|
398
|
-
scrollEl: scrollEl,
|
399
|
-
items: items,
|
400
|
-
axis: axis,
|
401
|
-
index: i,
|
402
|
-
offset: offset.current,
|
403
|
-
scrollAlign: scrollAlign
|
404
|
-
}),
|
405
|
-
axis: axis,
|
406
|
-
/**
|
407
|
-
* Без анимации при переходе на другой конец списка
|
408
|
-
*/
|
409
|
-
animated: animatedScrollByIndex && (prevIndex.current === null || Math.abs(i - prevIndex.current) !== items.length - 1)
|
410
|
-
});
|
411
|
-
prevIndex.current = i;
|
412
|
-
}
|
413
|
-
}, [animatedScrollByIndex, axis, scrollAlign]);
|
414
|
-
useEffect(function () {
|
415
|
-
if (scrollRef.current && trackRef.current) {
|
416
|
-
offset.current = getCalculatedOffset(scrollRef.current, trackRef.current, axis);
|
417
|
-
}
|
418
|
-
}, [axis]);
|
419
|
-
|
420
|
-
/**
|
421
|
-
* Операции на маунте/анмаунте компонента.
|
422
|
-
* Создать слушатели событи и т.п.
|
423
|
-
*/
|
424
|
-
useEffect(function () {
|
425
|
-
var carouselElement = scrollRef.current;
|
426
|
-
if (carouselElement) {
|
427
|
-
carouselElement.addEventListener('scroll', throttledDetectActiveItem);
|
428
|
-
}
|
429
|
-
return function () {
|
430
|
-
if (carouselElement) {
|
431
|
-
carouselElement.removeEventListener('scroll', throttledDetectActiveItem);
|
432
|
-
}
|
433
|
-
};
|
434
|
-
}, [throttledDetectActiveItem]);
|
435
|
-
|
436
|
-
/**
|
437
|
-
* Нужно вызвать только при первом рендере
|
438
|
-
*/
|
439
|
-
useEffect(function () {
|
440
|
-
requestAnimationFrame(function () {
|
441
|
-
/**
|
442
|
-
* Прокрутка до начального индекса.
|
443
|
-
*/
|
444
|
-
toIndex(index);
|
445
|
-
|
446
|
-
/**
|
447
|
-
* Если на момент запуска карусель уже находится на нужной позиции,
|
448
|
-
* событие скролла не произойдет, не сработает и определение центра,
|
449
|
-
* необходимо вызвать его вручную.
|
450
|
-
*/
|
451
|
-
throttledDetectActiveItem();
|
452
|
-
});
|
453
|
-
|
454
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
455
|
-
}, []);
|
456
|
-
|
457
|
-
/**
|
458
|
-
* Прокрутка до нужной позиции индекса, если индекс изменился.
|
459
|
-
*/
|
460
|
-
useEffect(function () {
|
461
|
-
if (index !== prevIndex.current) {
|
462
|
-
toIndex(index);
|
463
|
-
}
|
464
|
-
}, [index, toIndex]);
|
465
|
-
return {
|
466
|
-
scrollRef: scrollRef,
|
467
|
-
trackRef: trackRef
|
468
|
-
};
|
469
|
-
};
|
470
|
-
|
471
|
-
export { animatedScrollToX, getCalculatedOffset, getCalculatedPos, getCarouselItems, getItemSlot, scrollToPos, useCarousel, useDebouncedFunction };
|
472
|
-
//# sourceMappingURL=useCarousel.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"useCarousel.js","sources":["../../../src/components/Carousel/useCarousel.tsx"],"sourcesContent":["import React, { useEffect, useCallback, useRef, useMemo } from 'react';\nimport throttle from 'lodash.throttle';\n\nimport { CarouselProps, ScrollAlign, ScrollAxis } from './Carousel.types';\n\n/**\n * Подсчет смещения из-за паддингов.\n */\nexport const getCalculatedOffset = (scrollEl: Element, trackEl: Element, axis: ScrollAxis) => {\n const paddingProp = axis === 'x' ? 'paddingLeft' : 'paddingTop';\n return parseInt(getComputedStyle(scrollEl)[paddingProp], 10) + parseInt(getComputedStyle(trackEl)[paddingProp], 10);\n};\n\nconst positionModByScrollAlign = ({\n scrollAlign,\n position,\n carouselSize,\n itemSize,\n offset,\n scrollStart,\n axis,\n}: {\n scrollAlign: ScrollAlign;\n position: number;\n carouselSize: number;\n itemSize: number;\n offset: number;\n scrollStart: number;\n axis: ScrollAxis;\n}) => {\n if (scrollAlign === 'start') {\n const inaccuracy = 1;\n const paddingOffset = axis === 'y' ? offset - itemSize / 2 + inaccuracy : 0;\n return position + paddingOffset;\n }\n if (scrollAlign === 'center') {\n return position - carouselSize / 2 + itemSize / 2;\n }\n if (scrollAlign === 'end') {\n return position - carouselSize + itemSize + offset;\n }\n if (scrollAlign === 'activeDirection') {\n if (position >= scrollStart + carouselSize - itemSize) {\n return position - carouselSize + itemSize + offset;\n }\n if (position > scrollStart) {\n return scrollStart;\n }\n }\n return position;\n};\n\n/**\n * Подсчет скролла до переданного индекса.\n */\nexport const getCalculatedPos = ({\n scrollEl,\n items,\n axis,\n index,\n offset,\n scrollAlign,\n}: {\n scrollEl: HTMLElement;\n items: HTMLCollectionOf<HTMLElement>;\n axis: ScrollAxis;\n index: number;\n offset: number;\n scrollAlign: ScrollAlign;\n}) => {\n let position = scrollAlign === 'center' ? offset : 0;\n let carouselSize: number;\n let itemSize: number;\n let scrollStart: number;\n\n if (items.item(index) === null) {\n return position;\n }\n\n for (let i = 0; i < index; i++) {\n if (axis === 'x') {\n position += items.item(i)?.offsetWidth ?? 0;\n } else {\n position += items.item(i)?.offsetHeight ?? 0;\n }\n }\n\n if (axis === 'x') {\n carouselSize = scrollEl.offsetWidth;\n itemSize = items.item(index)?.offsetWidth ?? 0;\n scrollStart = scrollEl.scrollLeft;\n } else {\n carouselSize = scrollEl.offsetHeight;\n itemSize = items.item(index)?.offsetHeight ?? 0;\n scrollStart = scrollEl.scrollTop;\n }\n\n return positionModByScrollAlign({\n scrollAlign,\n position,\n carouselSize,\n itemSize,\n offset,\n scrollStart,\n axis,\n });\n};\n\nconst DEFAULT_DURATION = 300;\n\n// https://css-tricks.com/emulating-css-timing-functions-javascript/\nconst tfs = {\n linear: (t: number) => t,\n // eslint-disable-next-line\n easeIn: (t: number) => Math.pow(t, 1.675),\n // eslint-disable-next-line\n easeOut: (t: number) => 1 - Math.pow(1 - t, 1.675),\n easeInOut: (t: number) => 0.5 * (Math.sin((t - 0.5) * Math.PI) + 1),\n};\n\nexport type TimingFunction = keyof typeof tfs;\n\n/**\n * Плавная прокрутка по горизонтали\n * @param {Element} elem\n * @param {number} pos\n * @param {number} duration\n * @param {string} timingFunction\n */\nexport const animatedScrollToX = (\n elem: Element,\n pos: number,\n duration: number = DEFAULT_DURATION,\n timingFunction: TimingFunction = 'easeInOut',\n): void => {\n let startTime: number;\n const startX = elem.scrollLeft;\n const endX = Math.max(0, Math.min(elem.scrollWidth - elem.clientWidth, pos));\n\n const handleNewAnimationFrame = (): void => {\n startTime = startTime || Date.now();\n const timePos = Math.min(1, Math.max(1, Date.now() - startTime) / duration);\n const scrollPos = tfs[timingFunction](timePos);\n const left = startX + (endX - startX) * scrollPos;\n elem.scrollTo({ left });\n if (timePos !== 1) window.requestAnimationFrame(handleNewAnimationFrame);\n };\n\n window.requestAnimationFrame(handleNewAnimationFrame);\n};\n\n/**\n * Прокрутка к указанной позиции с анимацией или без.\n */\nexport const scrollToPos = ({\n scrollEl,\n pos,\n axis,\n animated,\n duration,\n timingFunction,\n}: {\n scrollEl: HTMLElement;\n pos: number;\n axis: ScrollAxis;\n animated?: boolean;\n duration?: number;\n timingFunction?: TimingFunction;\n}) => {\n if (axis === 'x' && Math.abs(pos - scrollEl.scrollLeft) > 1) {\n if (animated) {\n animatedScrollToX(scrollEl, pos, duration, timingFunction);\n } else {\n scrollEl.scrollTo({ left: pos });\n }\n }\n};\n\nconst round = (n: number) => Math.round(n * 100) / 100;\n\n/**\n * Получить позицию (слот) айтема в каруселе.\n * Каждый айтем имеет свой слот относительно вьюпорта карусели.\n */\nexport const getItemSlot = (\n itemIndex: number,\n itemEnd: number,\n itemSize: number,\n scrollStart: number,\n scrollSize: number,\n scrollAlign: ScrollAlign,\n prevIndex = 0,\n offset = 0,\n) => {\n /**\n * Граница и центр скролла (видимой части).\n * Смещение + размер.\n */\n const scrollEnd = scrollStart + scrollSize;\n const scrollCenter = scrollStart + scrollSize / 2;\n const itemCenter = itemEnd - itemSize / 2;\n\n if (scrollAlign === 'center') {\n return round((itemCenter - scrollCenter) / itemSize);\n }\n if (scrollAlign === 'start') {\n return round((itemEnd - itemSize - scrollStart) / itemSize);\n }\n if (scrollAlign === 'end') {\n return round((itemEnd - (scrollSize + scrollStart)) / itemSize);\n }\n if (scrollAlign === 'activeDirection') {\n const prevStart = offset + itemSize * prevIndex;\n const prevEnd = prevStart + itemSize;\n const prevVisible = prevEnd > scrollStart && prevStart < scrollEnd;\n\n if (!prevVisible) {\n if (prevIndex < itemIndex) {\n return round((itemEnd - (scrollSize + scrollStart)) / itemSize);\n }\n return round((itemEnd - itemSize - scrollStart) / itemSize);\n }\n }\n return null;\n};\n\nexport function getCarouselItems(track: HTMLElement): HTMLCollectionOf<HTMLElement> {\n return track.children as HTMLCollectionOf<HTMLElement>;\n}\n\nexport function useDebouncedFunction(func: (...args: any) => any, delay: number, cleanUp?: boolean) {\n const timeoutRef = useRef<number>();\n\n /**\n * Очистка таймера\n */\n function clearTimer() {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n }\n\n /**\n * Очищаем таймер при анмаунте компонента, если cleanUp выставлен в true\n * и тем самым отменяем последний запланированный вызов\n */\n useEffect(() => (cleanUp ? clearTimer : undefined), [cleanUp]);\n\n return (...args: any[]) => {\n clearTimer();\n timeoutRef.current = setTimeout(() => func(...args), delay);\n };\n}\n\ntype UseCarouselOptions = Pick<\n CarouselProps,\n | 'index'\n | 'scrollAlign'\n | 'detectActive'\n | 'detectThreshold'\n | 'scaleCallback'\n | 'scaleResetCallback'\n | 'onIndexChange'\n | 'onDetectActiveItem'\n> & {\n axis: 'x' | 'y';\n animatedScrollByIndex?: boolean;\n throttleMs?: number;\n debounceMs?: number;\n};\n\ntype UseCarouselHookResult = {\n scrollRef: React.MutableRefObject<HTMLElement | null>;\n trackRef: React.MutableRefObject<HTMLElement | null>;\n};\n\nconst THROTTLE_DEFAULT_MS = 100;\nconst DEBOUNCE_DEFAULT_MS = 150;\n\nexport const useCarousel = ({\n index,\n axis = 'x',\n detectActive = false,\n detectThreshold = 0.5,\n scrollAlign = 'center',\n scaleCallback,\n scaleResetCallback,\n onIndexChange,\n onDetectActiveItem,\n animatedScrollByIndex = false,\n throttleMs = THROTTLE_DEFAULT_MS,\n debounceMs = DEBOUNCE_DEFAULT_MS,\n}: UseCarouselOptions): UseCarouselHookResult => {\n const prevIndex = useRef<number | null>(null);\n const direction = useRef<boolean | null>(null);\n const offset = useRef(0);\n const scrollRef = useRef<HTMLElement | null>(null);\n const trackRef = useRef<HTMLElement | null>(null);\n\n /**\n * Для того, чтобы не спамить изменениями индекса.\n * Задержка дебаунса слегка больше, чем у тротлинга.\n * Таким образом, событие срабатывает при завершении скролла.\n */\n const debouncedOnIndexChange = useDebouncedFunction((i: number) => onIndexChange?.(i), debounceMs);\n\n /**\n * Вычисление центрального элемента.\n * Подсчет: от 0 до 1, какое количество ширины/высоты\n * каждого элемента находится по центру скролла.\n */\n const throttledDetectActiveItem = useMemo(() => {\n return throttle(() => {\n if (!detectActive || scrollRef.current === null || trackRef.current === null) {\n return;\n }\n\n /**\n * Правая (или нижняя для Оу) граница элемента.\n */\n let itemEdge = offset.current;\n\n /**\n * Смещение (отрицательный или положительный отступ)\n * и размер карусели (для Ox - ширина, для Oy - высота).\n */\n const scrollPos = scrollRef.current[axis === 'x' ? 'scrollLeft' : 'scrollTop'];\n const scrollSize = scrollRef.current[axis === 'x' ? 'offsetWidth' : 'offsetHeight'];\n\n /**\n * Граница скролла (видимой части).\n * Смещение + размер.\n */\n const scrollEdge = scrollPos + scrollSize;\n\n /**\n * Элементы перед, после и в видимой части.\n * перед [ ВИДИМЫЕ ] после\n */\n const prevItems: HTMLElement[] = [];\n const nextItems: HTMLElement[] = [];\n let count = 0;\n\n const items = getCarouselItems(trackRef.current);\n\n /**\n * Проходим по всему списку, суммируя ширины элементов,\n * пока не найдем один элемент, чей центр будет в центре карусели.\n */\n for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {\n const item = items.item(itemIndex);\n\n if (item === null) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n /**\n * Для Ox - ширина, для Oy - высота.\n */\n const itemSize = item[axis === 'x' ? 'offsetWidth' : 'offsetHeight'];\n\n /**\n * Все элементы правее вьюпорта выпадают из процедуры.\n * Сравниваем по предыдущему элементу.\n * [ ... ] ...|n| <- Левый край элемента за пределами начала видимой части\n */\n if (itemEdge > scrollEdge) {\n if (scaleCallback && scaleResetCallback) {\n nextItems.push(item);\n }\n // eslint-disable-next-line no-continue\n continue;\n }\n\n itemEdge += itemSize;\n\n /**\n * Все элементы левее вьюпорта выпадают из процедуры.\n * Сравниваем по текущему элементу.\n * Правый край элемента за пределами начала видимой части -> |p|... [ ... ]\n */\n if (scrollPos > itemEdge) {\n if (scaleCallback && scaleResetCallback) {\n prevItems.push(item);\n }\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const itemSlot = getItemSlot(\n itemIndex,\n itemEdge,\n itemSize,\n scrollPos,\n scrollSize,\n scrollAlign,\n prevIndex.current ?? 0,\n offset.current,\n );\n\n if (itemSlot !== null) {\n if (detectThreshold && Math.abs(itemSlot) <= detectThreshold) {\n onDetectActiveItem?.(itemIndex);\n debouncedOnIndexChange?.(itemIndex);\n }\n\n if (scaleCallback) {\n scaleCallback(item, itemSlot);\n /**\n * Количество айтемов в видимой части.\n */\n count++;\n }\n }\n }\n\n if (scaleCallback && scaleResetCallback) {\n window.requestAnimationFrame(() => {\n if (direction.current) {\n if (nextItems.length) {\n nextItems.splice(0, count).forEach((elem) => scaleCallback(elem, count));\n if (nextItems.length) {\n nextItems.splice(0, count).forEach((elem) => scaleResetCallback(elem));\n }\n }\n } else if (prevItems.length) {\n const prItemsRev = prevItems.reverse();\n prItemsRev.splice(0, count).forEach((elem) => scaleCallback(elem, count * -1));\n if (prItemsRev.length) {\n prItemsRev.splice(0, count).forEach((elem) => scaleResetCallback(elem));\n }\n }\n });\n }\n }, throttleMs);\n }, [\n axis,\n debouncedOnIndexChange,\n detectActive,\n detectThreshold,\n onDetectActiveItem,\n scaleCallback,\n scaleResetCallback,\n scrollAlign,\n throttleMs,\n ]);\n\n /**\n * Прокрутка до нужной позиции индекса.\n */\n const toIndex = useCallback(\n (i: number) => {\n const scrollEl = scrollRef.current;\n const items = trackRef.current ? getCarouselItems(trackRef.current) : null;\n\n if (scrollEl && items && items.length > 0 && i >= 0) {\n scrollToPos({\n scrollEl,\n pos: getCalculatedPos({\n scrollEl,\n items,\n axis,\n index: i,\n offset: offset.current,\n scrollAlign,\n }),\n axis,\n /**\n * Без анимации при переходе на другой конец списка\n */\n animated:\n animatedScrollByIndex &&\n (prevIndex.current === null || Math.abs(i - prevIndex.current) !== items.length - 1),\n });\n prevIndex.current = i;\n }\n },\n [animatedScrollByIndex, axis, scrollAlign],\n );\n\n useEffect(() => {\n if (scrollRef.current && trackRef.current) {\n offset.current = getCalculatedOffset(scrollRef.current, trackRef.current, axis);\n }\n }, [axis]);\n\n /**\n * Операции на маунте/анмаунте компонента.\n * Создать слушатели событи и т.п.\n */\n useEffect(() => {\n const carouselElement = scrollRef.current;\n\n if (carouselElement) {\n carouselElement.addEventListener('scroll', throttledDetectActiveItem);\n }\n\n return () => {\n if (carouselElement) {\n carouselElement.removeEventListener('scroll', throttledDetectActiveItem);\n }\n };\n }, [throttledDetectActiveItem]);\n\n /**\n * Нужно вызвать только при первом рендере\n */\n useEffect(() => {\n requestAnimationFrame(() => {\n /**\n * Прокрутка до начального индекса.\n */\n toIndex(index);\n\n /**\n * Если на момент запуска карусель уже находится на нужной позиции,\n * событие скролла не произойдет, не сработает и определение центра,\n * необходимо вызвать его вручную.\n */\n throttledDetectActiveItem();\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n /**\n * Прокрутка до нужной позиции индекса, если индекс изменился.\n */\n useEffect(() => {\n if (index !== prevIndex.current) {\n toIndex(index);\n }\n }, [index, toIndex]);\n\n return {\n scrollRef,\n trackRef,\n };\n};\n"],"names":["getCalculatedOffset","scrollEl","trackEl","axis","paddingProp","parseInt","getComputedStyle","positionModByScrollAlign","_ref","scrollAlign","position","carouselSize","itemSize","offset","scrollStart","inaccuracy","paddingOffset","getCalculatedPos","_ref2","items","index","item","i","_items$item$offsetWid","_items$item","offsetWidth","_items$item$offsetHei","_items$item2","offsetHeight","_items$item$offsetWid2","_items$item3","scrollLeft","_items$item$offsetHei2","_items$item4","scrollTop","DEFAULT_DURATION","tfs","linear","t","easeIn","Math","pow","easeOut","easeInOut","sin","PI","animatedScrollToX","elem","pos","duration","arguments","length","undefined","timingFunction","startTime","startX","endX","max","min","scrollWidth","clientWidth","handleNewAnimationFrame","Date","now","timePos","scrollPos","left","scrollTo","window","requestAnimationFrame","scrollToPos","_ref3","animated","abs","round","n","getItemSlot","itemIndex","itemEnd","scrollSize","prevIndex","scrollEnd","scrollCenter","itemCenter","prevStart","prevEnd","prevVisible","getCarouselItems","track","children","useDebouncedFunction","func","delay","cleanUp","timeoutRef","useRef","clearTimer","current","clearTimeout","useEffect","_len","args","Array","_key","setTimeout","apply","THROTTLE_DEFAULT_MS","DEBOUNCE_DEFAULT_MS","useCarousel","_ref4","_ref4$axis","_ref4$detectActive","detectActive","_ref4$detectThreshold","detectThreshold","_ref4$scrollAlign","scaleCallback","scaleResetCallback","onIndexChange","onDetectActiveItem","_ref4$animatedScrollB","animatedScrollByIndex","_ref4$throttleMs","throttleMs","_ref4$debounceMs","debounceMs","direction","scrollRef","trackRef","debouncedOnIndexChange","throttledDetectActiveItem","useMemo","throttle","itemEdge","scrollEdge","prevItems","nextItems","count","_prevIndex$current","push","itemSlot","splice","forEach","prItemsRev","reverse","toIndex","useCallback","carouselElement","addEventListener","removeEventListener"],"mappings":"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"}
|
@@ -1,58 +0,0 @@
|
|
1
|
-
import { slicedToArray as _slicedToArray } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
2
|
-
import { useState, useCallback, useEffect } from 'react';
|
3
|
-
|
4
|
-
var SCROLL_SPEED = 2;
|
5
|
-
var useDragScroll = function useDragScroll(scrollRef, isDragScrollDisabled) {
|
6
|
-
var _useState = useState(false),
|
7
|
-
_useState2 = _slicedToArray(_useState, 2),
|
8
|
-
isDragging = _useState2[0],
|
9
|
-
setDragging = _useState2[1];
|
10
|
-
var _useState3 = useState(0),
|
11
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
12
|
-
startX = _useState4[0],
|
13
|
-
setStartX = _useState4[1];
|
14
|
-
var _useState5 = useState(0),
|
15
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
16
|
-
scrollLeft = _useState6[0],
|
17
|
-
setScrollLeft = _useState6[1];
|
18
|
-
var handleMouseMove = useCallback(function (e) {
|
19
|
-
if (isDragging && scrollRef && scrollRef.current) {
|
20
|
-
var dx = (e.clientX - startX) * SCROLL_SPEED;
|
21
|
-
scrollRef.current.scrollLeft = scrollLeft - dx;
|
22
|
-
}
|
23
|
-
}, [scrollRef, scrollLeft, isDragging, startX]);
|
24
|
-
var handleMouseUp = useCallback(function () {
|
25
|
-
setDragging(false);
|
26
|
-
if (scrollRef && scrollRef.current) {
|
27
|
-
scrollRef.current.style.cursor = 'grab';
|
28
|
-
}
|
29
|
-
}, [scrollRef, setDragging]);
|
30
|
-
var handleMouseDown = useCallback(function (e) {
|
31
|
-
setDragging(true);
|
32
|
-
if (scrollRef && scrollRef.current) {
|
33
|
-
setStartX(e.clientX);
|
34
|
-
setScrollLeft(scrollRef.current.scrollLeft);
|
35
|
-
scrollRef.current.style.cursor = 'grabbing';
|
36
|
-
}
|
37
|
-
}, [scrollRef, setDragging, setStartX, setScrollLeft, handleMouseUp, handleMouseMove]);
|
38
|
-
useEffect(function () {
|
39
|
-
if (scrollRef && scrollRef.current && !isDragScrollDisabled) {
|
40
|
-
scrollRef.current.style.userSelect = 'none';
|
41
|
-
scrollRef.current.addEventListener('mousedown', handleMouseDown);
|
42
|
-
scrollRef.current.addEventListener('mouseup', handleMouseUp);
|
43
|
-
scrollRef.current.addEventListener('mouseleave', handleMouseUp);
|
44
|
-
scrollRef.current.addEventListener('mousemove', handleMouseMove);
|
45
|
-
}
|
46
|
-
return function () {
|
47
|
-
if (scrollRef && scrollRef.current && !isDragScrollDisabled) {
|
48
|
-
scrollRef.current.removeEventListener('mousedown', handleMouseDown);
|
49
|
-
scrollRef.current.removeEventListener('mouseup', handleMouseUp);
|
50
|
-
scrollRef.current.removeEventListener('mouseleave', handleMouseUp);
|
51
|
-
scrollRef.current.removeEventListener('mousemove', handleMouseMove);
|
52
|
-
}
|
53
|
-
};
|
54
|
-
}, [scrollRef, handleMouseDown, handleMouseUp, handleMouseMove, isDragScrollDisabled]);
|
55
|
-
};
|
56
|
-
|
57
|
-
export { useDragScroll };
|
58
|
-
//# sourceMappingURL=useDragScroll.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"useDragScroll.js","sources":["../../../src/components/Carousel/useDragScroll.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\n\nconst SCROLL_SPEED = 2;\n\nexport const useDragScroll = <T extends HTMLElement>(\n scrollRef: React.MutableRefObject<T | null>,\n isDragScrollDisabled?: boolean,\n) => {\n const [isDragging, setDragging] = useState(false);\n const [startX, setStartX] = useState(0);\n const [scrollLeft, setScrollLeft] = useState(0);\n\n const handleMouseMove = useCallback(\n (e: MouseEvent): void => {\n if (isDragging && scrollRef && scrollRef.current) {\n const dx = (e.clientX - startX) * SCROLL_SPEED;\n scrollRef.current.scrollLeft = scrollLeft - dx;\n }\n },\n [scrollRef, scrollLeft, isDragging, startX],\n );\n\n const handleMouseUp = useCallback((): void => {\n setDragging(false);\n\n if (scrollRef && scrollRef.current) {\n scrollRef.current.style.cursor = 'grab';\n }\n }, [scrollRef, setDragging]);\n\n const handleMouseDown = useCallback(\n (e: MouseEvent): void => {\n setDragging(true);\n\n if (scrollRef && scrollRef.current) {\n setStartX(e.clientX);\n setScrollLeft(scrollRef.current.scrollLeft);\n\n scrollRef.current.style.cursor = 'grabbing';\n }\n },\n [scrollRef, setDragging, setStartX, setScrollLeft, handleMouseUp, handleMouseMove],\n );\n\n useEffect(() => {\n if (scrollRef && scrollRef.current && !isDragScrollDisabled) {\n scrollRef.current.style.userSelect = 'none';\n scrollRef.current.addEventListener('mousedown', handleMouseDown);\n scrollRef.current.addEventListener('mouseup', handleMouseUp);\n scrollRef.current.addEventListener('mouseleave', handleMouseUp);\n scrollRef.current.addEventListener('mousemove', handleMouseMove);\n }\n\n return () => {\n if (scrollRef && scrollRef.current && !isDragScrollDisabled) {\n scrollRef.current.removeEventListener('mousedown', handleMouseDown);\n scrollRef.current.removeEventListener('mouseup', handleMouseUp);\n scrollRef.current.removeEventListener('mouseleave', handleMouseUp);\n scrollRef.current.removeEventListener('mousemove', handleMouseMove);\n }\n };\n }, [scrollRef, handleMouseDown, handleMouseUp, handleMouseMove, isDragScrollDisabled]);\n};\n"],"names":["SCROLL_SPEED","useDragScroll","scrollRef","isDragScrollDisabled","_useState","useState","_useState2","_slicedToArray","isDragging","setDragging","_useState3","_useState4","startX","setStartX","_useState5","_useState6","scrollLeft","setScrollLeft","handleMouseMove","useCallback","e","current","dx","clientX","handleMouseUp","style","cursor","handleMouseDown","useEffect","userSelect","addEventListener","removeEventListener"],"mappings":";;;AAEA,IAAMA,YAAY,GAAG,CAAC,CAAA;AAEf,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CACtBC,SAA2C,EAC3CC,oBAA8B,EAC7B;AACD,EAAA,IAAAC,SAAA,GAAkCC,QAAQ,CAAC,KAAK,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAA1CI,IAAAA,UAAU,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,WAAW,GAAAH,UAAA,CAAA,CAAA,CAAA,CAAA;AAC9B,EAAA,IAAAI,UAAA,GAA4BL,QAAQ,CAAC,CAAC,CAAC;IAAAM,UAAA,GAAAJ,cAAA,CAAAG,UAAA,EAAA,CAAA,CAAA;AAAhCE,IAAAA,MAAM,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,SAAS,GAAAF,UAAA,CAAA,CAAA,CAAA,CAAA;AACxB,EAAA,IAAAG,UAAA,GAAoCT,QAAQ,CAAC,CAAC,CAAC;IAAAU,UAAA,GAAAR,cAAA,CAAAO,UAAA,EAAA,CAAA,CAAA;AAAxCE,IAAAA,UAAU,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,aAAa,GAAAF,UAAA,CAAA,CAAA,CAAA,CAAA;AAEhC,EAAA,IAAMG,eAAe,GAAGC,WAAW,CAC/B,UAACC,CAAa,EAAW;AACrB,IAAA,IAAIZ,UAAU,IAAIN,SAAS,IAAIA,SAAS,CAACmB,OAAO,EAAE;MAC9C,IAAMC,EAAE,GAAG,CAACF,CAAC,CAACG,OAAO,GAAGX,MAAM,IAAIZ,YAAY,CAAA;AAC9CE,MAAAA,SAAS,CAACmB,OAAO,CAACL,UAAU,GAAGA,UAAU,GAAGM,EAAE,CAAA;AAClD,KAAA;GACH,EACD,CAACpB,SAAS,EAAEc,UAAU,EAAER,UAAU,EAAEI,MAAM,CAC9C,CAAC,CAAA;AAED,EAAA,IAAMY,aAAa,GAAGL,WAAW,CAAC,YAAY;IAC1CV,WAAW,CAAC,KAAK,CAAC,CAAA;AAElB,IAAA,IAAIP,SAAS,IAAIA,SAAS,CAACmB,OAAO,EAAE;AAChCnB,MAAAA,SAAS,CAACmB,OAAO,CAACI,KAAK,CAACC,MAAM,GAAG,MAAM,CAAA;AAC3C,KAAA;AACJ,GAAC,EAAE,CAACxB,SAAS,EAAEO,WAAW,CAAC,CAAC,CAAA;AAE5B,EAAA,IAAMkB,eAAe,GAAGR,WAAW,CAC/B,UAACC,CAAa,EAAW;IACrBX,WAAW,CAAC,IAAI,CAAC,CAAA;AAEjB,IAAA,IAAIP,SAAS,IAAIA,SAAS,CAACmB,OAAO,EAAE;AAChCR,MAAAA,SAAS,CAACO,CAAC,CAACG,OAAO,CAAC,CAAA;AACpBN,MAAAA,aAAa,CAACf,SAAS,CAACmB,OAAO,CAACL,UAAU,CAAC,CAAA;AAE3Cd,MAAAA,SAAS,CAACmB,OAAO,CAACI,KAAK,CAACC,MAAM,GAAG,UAAU,CAAA;AAC/C,KAAA;AACJ,GAAC,EACD,CAACxB,SAAS,EAAEO,WAAW,EAAEI,SAAS,EAAEI,aAAa,EAAEO,aAAa,EAAEN,eAAe,CACrF,CAAC,CAAA;AAEDU,EAAAA,SAAS,CAAC,YAAM;IACZ,IAAI1B,SAAS,IAAIA,SAAS,CAACmB,OAAO,IAAI,CAAClB,oBAAoB,EAAE;AACzDD,MAAAA,SAAS,CAACmB,OAAO,CAACI,KAAK,CAACI,UAAU,GAAG,MAAM,CAAA;MAC3C3B,SAAS,CAACmB,OAAO,CAACS,gBAAgB,CAAC,WAAW,EAAEH,eAAe,CAAC,CAAA;MAChEzB,SAAS,CAACmB,OAAO,CAACS,gBAAgB,CAAC,SAAS,EAAEN,aAAa,CAAC,CAAA;MAC5DtB,SAAS,CAACmB,OAAO,CAACS,gBAAgB,CAAC,YAAY,EAAEN,aAAa,CAAC,CAAA;MAC/DtB,SAAS,CAACmB,OAAO,CAACS,gBAAgB,CAAC,WAAW,EAAEZ,eAAe,CAAC,CAAA;AACpE,KAAA;AAEA,IAAA,OAAO,YAAM;MACT,IAAIhB,SAAS,IAAIA,SAAS,CAACmB,OAAO,IAAI,CAAClB,oBAAoB,EAAE;QACzDD,SAAS,CAACmB,OAAO,CAACU,mBAAmB,CAAC,WAAW,EAAEJ,eAAe,CAAC,CAAA;QACnEzB,SAAS,CAACmB,OAAO,CAACU,mBAAmB,CAAC,SAAS,EAAEP,aAAa,CAAC,CAAA;QAC/DtB,SAAS,CAACmB,OAAO,CAACU,mBAAmB,CAAC,YAAY,EAAEP,aAAa,CAAC,CAAA;QAClEtB,SAAS,CAACmB,OAAO,CAACU,mBAAmB,CAAC,WAAW,EAAEb,eAAe,CAAC,CAAA;AACvE,OAAA;KACH,CAAA;AACL,GAAC,EAAE,CAAChB,SAAS,EAAEyB,eAAe,EAAEH,aAAa,EAAEN,eAAe,EAAEf,oBAAoB,CAAC,CAAC,CAAA;AAC1F;;;;"}
|