@snack-uikit/carousel 0.4.5 → 0.4.6-preview-20b0f520.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/dist/cjs/components/ItemProvider/ItemProvider.js +75 -65
- package/dist/esm/components/ItemProvider/ItemProvider.js +64 -55
- package/package.json +6 -5
- package/src/components/ItemProvider/ItemProvider.tsx +65 -86
- package/dist/cjs/components/ItemProvider/helpers.d.ts +0 -2
- package/dist/cjs/components/ItemProvider/helpers.js +0 -14
- package/dist/esm/components/ItemProvider/helpers.d.ts +0 -2
- package/dist/esm/components/ItemProvider/helpers.js +0 -9
- package/src/components/ItemProvider/helpers.ts +0 -11
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var __rest = void 0 && (void 0).__rest || function (s, e) {
|
|
4
|
+
var t = {};
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
3
11
|
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
4
12
|
return mod && mod.__esModule ? mod : {
|
|
5
13
|
"default": mod
|
|
@@ -11,9 +19,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
11
19
|
exports.ItemProvider = ItemProvider;
|
|
12
20
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
13
21
|
const lodash_debounce_1 = __importDefault(require("lodash.debounce"));
|
|
22
|
+
const merge_refs_1 = __importDefault(require("merge-refs"));
|
|
14
23
|
const react_1 = require("react");
|
|
24
|
+
const utils_1 = require("@snack-uikit/utils");
|
|
15
25
|
const testIds_1 = require("../../testIds");
|
|
16
|
-
const helpers_1 = require("./helpers");
|
|
17
26
|
const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
|
|
18
27
|
function ItemProvider(_ref) {
|
|
19
28
|
let {
|
|
@@ -85,68 +94,6 @@ function ItemProvider(_ref) {
|
|
|
85
94
|
hideNonVisibleItems();
|
|
86
95
|
showVisibleItems(scrollBy, page, showItems);
|
|
87
96
|
}, [page, scrollBy, showItems]);
|
|
88
|
-
const [drag, setDrag] = (0, react_1.useState)({
|
|
89
|
-
initial: transform,
|
|
90
|
-
start: 0,
|
|
91
|
-
isDown: false,
|
|
92
|
-
drag: 0,
|
|
93
|
-
finished: true,
|
|
94
|
-
pointers: true
|
|
95
|
-
});
|
|
96
|
-
const handleDragStart = e => {
|
|
97
|
-
e.persist();
|
|
98
|
-
setDrag(Object.assign(Object.assign({}, drag), {
|
|
99
|
-
isDown: true,
|
|
100
|
-
start: (0, helpers_1.getPageX)(e),
|
|
101
|
-
initial: transform,
|
|
102
|
-
finished: false
|
|
103
|
-
}));
|
|
104
|
-
};
|
|
105
|
-
const handleDragFinish = e => {
|
|
106
|
-
e.persist();
|
|
107
|
-
if (drag.finished) {
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
if (Math.abs(drag.drag) < swipeActivateLength) {
|
|
111
|
-
return setDrag({
|
|
112
|
-
initial: transform,
|
|
113
|
-
start: 0,
|
|
114
|
-
isDown: false,
|
|
115
|
-
drag: 0,
|
|
116
|
-
finished: true,
|
|
117
|
-
pointers: true
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
slideCallback(drag.drag > 0 ? -1 : 1);
|
|
121
|
-
setDrag(Object.assign(Object.assign({}, drag), {
|
|
122
|
-
drag: 0,
|
|
123
|
-
isDown: false,
|
|
124
|
-
finished: true,
|
|
125
|
-
pointers: true
|
|
126
|
-
}));
|
|
127
|
-
return;
|
|
128
|
-
};
|
|
129
|
-
const handleDragMove = e => {
|
|
130
|
-
e.persist();
|
|
131
|
-
if (!drag.isDown) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
const pos = (0, helpers_1.getPageX)(e);
|
|
135
|
-
setDrag(Object.assign(Object.assign({}, drag), {
|
|
136
|
-
drag: drag.start - pos,
|
|
137
|
-
pointers: Math.abs(drag.start - pos) < Number.MIN_SAFE_INTEGER
|
|
138
|
-
}));
|
|
139
|
-
};
|
|
140
|
-
const swipeProps = swipe ? {
|
|
141
|
-
onTouchCancel: handleDragFinish,
|
|
142
|
-
onTouchEnd: handleDragFinish,
|
|
143
|
-
onTouchMove: handleDragMove,
|
|
144
|
-
onTouchStart: handleDragStart,
|
|
145
|
-
onMouseDown: handleDragStart,
|
|
146
|
-
onMouseLeave: handleDragFinish,
|
|
147
|
-
onMouseUp: handleDragFinish,
|
|
148
|
-
onMouseMove: handleDragMove
|
|
149
|
-
} : {};
|
|
150
97
|
const handleSlideClick = (0, react_1.useCallback)(e => {
|
|
151
98
|
var _a, _b;
|
|
152
99
|
const slideRect = e.currentTarget.getBoundingClientRect();
|
|
@@ -165,6 +112,69 @@ function ItemProvider(_ref) {
|
|
|
165
112
|
const fallbackWidth = Math.floor(100 / showItems);
|
|
166
113
|
return `${fallbackWidth}%`;
|
|
167
114
|
}, [computedValues.itemWidth, showItems]);
|
|
115
|
+
const canSwipe = (0, react_1.useRef)(true);
|
|
116
|
+
const [drag, setDrag] = (0, react_1.useState)({
|
|
117
|
+
drag: 0,
|
|
118
|
+
pointers: true
|
|
119
|
+
});
|
|
120
|
+
const handleSwipeStart = eventData => {
|
|
121
|
+
if (!swipe) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (eventData.dir !== 'Right' && eventData.dir !== 'Left') {
|
|
125
|
+
canSwipe.current = false;
|
|
126
|
+
} else {
|
|
127
|
+
eventData.event.preventDefault();
|
|
128
|
+
eventData.event.stopPropagation();
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
const handleSwiping = eventData => {
|
|
132
|
+
if (!swipe) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (!canSwipe.current) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
eventData.event.preventDefault();
|
|
139
|
+
eventData.event.stopPropagation();
|
|
140
|
+
setDrag({
|
|
141
|
+
drag: eventData.deltaX,
|
|
142
|
+
pointers: Math.abs(eventData.deltaX) < Number.MIN_SAFE_INTEGER
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
const handleSwiped = eventData => {
|
|
146
|
+
if (!swipe) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (!canSwipe.current) {
|
|
150
|
+
canSwipe.current = true;
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
eventData.event.preventDefault();
|
|
154
|
+
eventData.event.stopPropagation();
|
|
155
|
+
if (Math.abs(drag.drag) < swipeActivateLength) {
|
|
156
|
+
return setDrag({
|
|
157
|
+
drag: 0,
|
|
158
|
+
pointers: true
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
slideCallback(eventData.dir === 'Left' ? -1 : 1);
|
|
162
|
+
setDrag({
|
|
163
|
+
drag: 0,
|
|
164
|
+
pointers: true
|
|
165
|
+
});
|
|
166
|
+
return;
|
|
167
|
+
};
|
|
168
|
+
const _a = (0, utils_1.useSwipe)({
|
|
169
|
+
onSwipeStart: handleSwipeStart,
|
|
170
|
+
onSwiping: handleSwiping,
|
|
171
|
+
onSwiped: handleSwiped,
|
|
172
|
+
trackMouse: true
|
|
173
|
+
}),
|
|
174
|
+
{
|
|
175
|
+
ref
|
|
176
|
+
} = _a,
|
|
177
|
+
swipeProps = __rest(_a, ["ref"]);
|
|
168
178
|
return (0, jsx_runtime_1.jsx)("div", {
|
|
169
179
|
ref: containerRef,
|
|
170
180
|
className: styles_module_scss_1.default.itemProvider,
|
|
@@ -178,10 +188,10 @@ function ItemProvider(_ref) {
|
|
|
178
188
|
className: styles_module_scss_1.default.itemTracker,
|
|
179
189
|
"data-test-id": testIds_1.TEST_IDS.trackLine,
|
|
180
190
|
style: {
|
|
181
|
-
transform: `translateX(${transform
|
|
191
|
+
transform: `translateX(${transform + drag.drag}px)`,
|
|
182
192
|
transition: `transform ${transition}s ease 0s`
|
|
183
193
|
},
|
|
184
|
-
ref: itemsTrackerRef,
|
|
194
|
+
ref: (0, merge_refs_1.default)(ref, itemsTrackerRef),
|
|
185
195
|
children: items.map((item, i) =>
|
|
186
196
|
// eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
|
|
187
197
|
(0, jsx_runtime_1.jsx)("div", {
|
|
@@ -1,8 +1,20 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
1
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
13
|
import debounce from 'lodash.debounce';
|
|
3
|
-
import
|
|
14
|
+
import mergeRefs from 'merge-refs';
|
|
15
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
16
|
+
import { useSwipe } from '@snack-uikit/utils';
|
|
4
17
|
import { TEST_IDS } from '../../testIds';
|
|
5
|
-
import { getPageX } from './helpers';
|
|
6
18
|
import styles from './styles.module.css';
|
|
7
19
|
export function ItemProvider({ items, showItems, scrollBy, slideCallback, transition, swipe, swipeActivateLength, page, gap, }) {
|
|
8
20
|
const containerRef = useRef(null);
|
|
@@ -64,57 +76,6 @@ export function ItemProvider({ items, showItems, scrollBy, slideCallback, transi
|
|
|
64
76
|
hideNonVisibleItems();
|
|
65
77
|
showVisibleItems(scrollBy, page, showItems);
|
|
66
78
|
}, [page, scrollBy, showItems]);
|
|
67
|
-
const [drag, setDrag] = useState({
|
|
68
|
-
initial: transform,
|
|
69
|
-
start: 0,
|
|
70
|
-
isDown: false,
|
|
71
|
-
drag: 0,
|
|
72
|
-
finished: true,
|
|
73
|
-
pointers: true,
|
|
74
|
-
});
|
|
75
|
-
const handleDragStart = (e) => {
|
|
76
|
-
e.persist();
|
|
77
|
-
setDrag(Object.assign(Object.assign({}, drag), { isDown: true, start: getPageX(e), initial: transform, finished: false }));
|
|
78
|
-
};
|
|
79
|
-
const handleDragFinish = (e) => {
|
|
80
|
-
e.persist();
|
|
81
|
-
if (drag.finished) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
if (Math.abs(drag.drag) < swipeActivateLength) {
|
|
85
|
-
return setDrag({
|
|
86
|
-
initial: transform,
|
|
87
|
-
start: 0,
|
|
88
|
-
isDown: false,
|
|
89
|
-
drag: 0,
|
|
90
|
-
finished: true,
|
|
91
|
-
pointers: true,
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
slideCallback(drag.drag > 0 ? -1 : 1);
|
|
95
|
-
setDrag(Object.assign(Object.assign({}, drag), { drag: 0, isDown: false, finished: true, pointers: true }));
|
|
96
|
-
return;
|
|
97
|
-
};
|
|
98
|
-
const handleDragMove = (e) => {
|
|
99
|
-
e.persist();
|
|
100
|
-
if (!drag.isDown) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
const pos = getPageX(e);
|
|
104
|
-
setDrag(Object.assign(Object.assign({}, drag), { drag: drag.start - pos, pointers: Math.abs(drag.start - pos) < Number.MIN_SAFE_INTEGER }));
|
|
105
|
-
};
|
|
106
|
-
const swipeProps = swipe
|
|
107
|
-
? {
|
|
108
|
-
onTouchCancel: handleDragFinish,
|
|
109
|
-
onTouchEnd: handleDragFinish,
|
|
110
|
-
onTouchMove: handleDragMove,
|
|
111
|
-
onTouchStart: handleDragStart,
|
|
112
|
-
onMouseDown: handleDragStart,
|
|
113
|
-
onMouseLeave: handleDragFinish,
|
|
114
|
-
onMouseUp: handleDragFinish,
|
|
115
|
-
onMouseMove: handleDragMove,
|
|
116
|
-
}
|
|
117
|
-
: {};
|
|
118
79
|
const handleSlideClick = useCallback(e => {
|
|
119
80
|
var _a, _b;
|
|
120
81
|
const slideRect = e.currentTarget.getBoundingClientRect();
|
|
@@ -133,10 +94,58 @@ export function ItemProvider({ items, showItems, scrollBy, slideCallback, transi
|
|
|
133
94
|
const fallbackWidth = Math.floor(100 / showItems);
|
|
134
95
|
return `${fallbackWidth}%`;
|
|
135
96
|
}, [computedValues.itemWidth, showItems]);
|
|
97
|
+
const canSwipe = useRef(true);
|
|
98
|
+
const [drag, setDrag] = useState({ drag: 0, pointers: true });
|
|
99
|
+
const handleSwipeStart = eventData => {
|
|
100
|
+
if (!swipe) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (eventData.dir !== 'Right' && eventData.dir !== 'Left') {
|
|
104
|
+
canSwipe.current = false;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
eventData.event.preventDefault();
|
|
108
|
+
eventData.event.stopPropagation();
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const handleSwiping = eventData => {
|
|
112
|
+
if (!swipe) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (!canSwipe.current) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
eventData.event.preventDefault();
|
|
119
|
+
eventData.event.stopPropagation();
|
|
120
|
+
setDrag({ drag: eventData.deltaX, pointers: Math.abs(eventData.deltaX) < Number.MIN_SAFE_INTEGER });
|
|
121
|
+
};
|
|
122
|
+
const handleSwiped = eventData => {
|
|
123
|
+
if (!swipe) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (!canSwipe.current) {
|
|
127
|
+
canSwipe.current = true;
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
eventData.event.preventDefault();
|
|
131
|
+
eventData.event.stopPropagation();
|
|
132
|
+
if (Math.abs(drag.drag) < swipeActivateLength) {
|
|
133
|
+
return setDrag({ drag: 0, pointers: true });
|
|
134
|
+
}
|
|
135
|
+
slideCallback(eventData.dir === 'Left' ? -1 : 1);
|
|
136
|
+
setDrag({ drag: 0, pointers: true });
|
|
137
|
+
return;
|
|
138
|
+
};
|
|
139
|
+
const _a = useSwipe({
|
|
140
|
+
onSwipeStart: handleSwipeStart,
|
|
141
|
+
onSwiping: handleSwiping,
|
|
142
|
+
onSwiped: handleSwiped,
|
|
143
|
+
trackMouse: true,
|
|
144
|
+
}), { ref } = _a, swipeProps = __rest(_a, ["ref"]);
|
|
136
145
|
return (_jsx("div", { ref: containerRef, className: styles.itemProvider, "data-pointers": !drag.pointers || undefined, "data-swipe": swipe || undefined, "data-gap": gap, style: Object.assign({}, (Boolean(gap) ? { '--gap': gap } : {})), children: _jsx("div", Object.assign({}, swipeProps, { className: styles.itemTracker, "data-test-id": TEST_IDS.trackLine, style: {
|
|
137
|
-
transform: `translateX(${transform
|
|
146
|
+
transform: `translateX(${transform + drag.drag}px)`,
|
|
138
147
|
transition: `transform ${transition}s ease 0s`,
|
|
139
|
-
}, ref: itemsTrackerRef, children: items.map((item, i) => (
|
|
148
|
+
}, ref: mergeRefs(ref, itemsTrackerRef), children: items.map((item, i) => (
|
|
140
149
|
// eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
|
|
141
150
|
_jsx("div", { style: { width: itemWidth }, className: styles.itemContainer, role: 'group', "data-test-id": TEST_IDS.trackItem, onClick: handleSlideClick, children: item }, i))) })) }));
|
|
142
151
|
}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.4.
|
|
7
|
+
"version": "0.4.6-preview-20b0f520.0",
|
|
8
8
|
"sideEffects": [
|
|
9
9
|
"*.css",
|
|
10
10
|
"*.woff",
|
|
@@ -36,12 +36,13 @@
|
|
|
36
36
|
"license": "Apache-2.0",
|
|
37
37
|
"scripts": {},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@snack-uikit/icons": "0.24.0",
|
|
40
|
-
"@snack-uikit/pagination": "0.9.
|
|
41
|
-
"@snack-uikit/utils": "3.5.0",
|
|
39
|
+
"@snack-uikit/icons": "0.24.1-preview-20b0f520.0",
|
|
40
|
+
"@snack-uikit/pagination": "0.9.4-preview-20b0f520.0",
|
|
41
|
+
"@snack-uikit/utils": "3.5.1-preview-20b0f520.0",
|
|
42
42
|
"classnames": "2.5.1",
|
|
43
43
|
"lodash.debounce": "4.0.8",
|
|
44
|
+
"merge-refs": "1.3.0",
|
|
44
45
|
"uncontrollable": "8.0.4"
|
|
45
46
|
},
|
|
46
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "3d9f58d349ce6413d2242d7a42b8ba624815dcc0"
|
|
47
48
|
}
|
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
import debounce from 'lodash.debounce';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
TouchEvent,
|
|
7
|
-
useCallback,
|
|
8
|
-
useEffect,
|
|
9
|
-
useMemo,
|
|
10
|
-
useRef,
|
|
11
|
-
useState,
|
|
12
|
-
} from 'react';
|
|
2
|
+
import mergeRefs from 'merge-refs';
|
|
3
|
+
import { MouseEventHandler, ReactElement, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
|
|
5
|
+
import { SwipeCallback, useSwipe } from '@snack-uikit/utils';
|
|
13
6
|
|
|
14
7
|
import { TEST_IDS } from '../../testIds';
|
|
15
|
-
import { getPageX } from './helpers';
|
|
16
8
|
import styles from './styles.module.scss';
|
|
17
9
|
|
|
18
10
|
export type ItemProviderProps = {
|
|
@@ -116,78 +108,6 @@ export function ItemProvider({
|
|
|
116
108
|
showVisibleItems(scrollBy, page, showItems);
|
|
117
109
|
}, [page, scrollBy, showItems]);
|
|
118
110
|
|
|
119
|
-
const [drag, setDrag] = useState({
|
|
120
|
-
initial: transform,
|
|
121
|
-
start: 0,
|
|
122
|
-
isDown: false,
|
|
123
|
-
drag: 0,
|
|
124
|
-
finished: true,
|
|
125
|
-
pointers: true,
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
const handleDragStart = (e: MouseEvent | TouchEvent) => {
|
|
129
|
-
e.persist();
|
|
130
|
-
setDrag({
|
|
131
|
-
...drag,
|
|
132
|
-
isDown: true,
|
|
133
|
-
start: getPageX(e),
|
|
134
|
-
initial: transform,
|
|
135
|
-
finished: false,
|
|
136
|
-
});
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
const handleDragFinish = (e: MouseEvent | TouchEvent) => {
|
|
140
|
-
e.persist();
|
|
141
|
-
|
|
142
|
-
if (drag.finished) {
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (Math.abs(drag.drag) < swipeActivateLength) {
|
|
147
|
-
return setDrag({
|
|
148
|
-
initial: transform,
|
|
149
|
-
start: 0,
|
|
150
|
-
isDown: false,
|
|
151
|
-
drag: 0,
|
|
152
|
-
finished: true,
|
|
153
|
-
pointers: true,
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
slideCallback(drag.drag > 0 ? -1 : 1);
|
|
158
|
-
setDrag({ ...drag, drag: 0, isDown: false, finished: true, pointers: true });
|
|
159
|
-
return;
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
const handleDragMove = (e: MouseEvent | TouchEvent) => {
|
|
163
|
-
e.persist();
|
|
164
|
-
|
|
165
|
-
if (!drag.isDown) {
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
const pos = getPageX(e);
|
|
170
|
-
|
|
171
|
-
setDrag({
|
|
172
|
-
...drag,
|
|
173
|
-
drag: drag.start - pos,
|
|
174
|
-
pointers: Math.abs(drag.start - pos) < Number.MIN_SAFE_INTEGER,
|
|
175
|
-
});
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
const swipeProps = swipe
|
|
179
|
-
? {
|
|
180
|
-
onTouchCancel: handleDragFinish,
|
|
181
|
-
onTouchEnd: handleDragFinish,
|
|
182
|
-
onTouchMove: handleDragMove,
|
|
183
|
-
onTouchStart: handleDragStart,
|
|
184
|
-
onMouseDown: handleDragStart,
|
|
185
|
-
onMouseLeave: handleDragFinish,
|
|
186
|
-
onMouseUp: handleDragFinish,
|
|
187
|
-
onMouseMove: handleDragMove,
|
|
188
|
-
}
|
|
189
|
-
: {};
|
|
190
|
-
|
|
191
111
|
const handleSlideClick: MouseEventHandler = useCallback(
|
|
192
112
|
e => {
|
|
193
113
|
const slideRect = e.currentTarget.getBoundingClientRect();
|
|
@@ -212,6 +132,65 @@ export function ItemProvider({
|
|
|
212
132
|
return `${fallbackWidth}%`;
|
|
213
133
|
}, [computedValues.itemWidth, showItems]);
|
|
214
134
|
|
|
135
|
+
const canSwipe = useRef(true);
|
|
136
|
+
const [drag, setDrag] = useState({ drag: 0, pointers: true });
|
|
137
|
+
|
|
138
|
+
const handleSwipeStart: SwipeCallback = eventData => {
|
|
139
|
+
if (!swipe) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (eventData.dir !== 'Right' && eventData.dir !== 'Left') {
|
|
144
|
+
canSwipe.current = false;
|
|
145
|
+
} else {
|
|
146
|
+
eventData.event.preventDefault();
|
|
147
|
+
eventData.event.stopPropagation();
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
const handleSwiping: SwipeCallback = eventData => {
|
|
152
|
+
if (!swipe) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (!canSwipe.current) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
eventData.event.preventDefault();
|
|
161
|
+
eventData.event.stopPropagation();
|
|
162
|
+
setDrag({ drag: eventData.deltaX, pointers: Math.abs(eventData.deltaX) < Number.MIN_SAFE_INTEGER });
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
const handleSwiped: SwipeCallback = eventData => {
|
|
166
|
+
if (!swipe) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (!canSwipe.current) {
|
|
171
|
+
canSwipe.current = true;
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
eventData.event.preventDefault();
|
|
176
|
+
eventData.event.stopPropagation();
|
|
177
|
+
|
|
178
|
+
if (Math.abs(drag.drag) < swipeActivateLength) {
|
|
179
|
+
return setDrag({ drag: 0, pointers: true });
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
slideCallback(eventData.dir === 'Left' ? -1 : 1);
|
|
183
|
+
setDrag({ drag: 0, pointers: true });
|
|
184
|
+
return;
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
const { ref, ...swipeProps } = useSwipe({
|
|
188
|
+
onSwipeStart: handleSwipeStart,
|
|
189
|
+
onSwiping: handleSwiping,
|
|
190
|
+
onSwiped: handleSwiped,
|
|
191
|
+
trackMouse: true,
|
|
192
|
+
});
|
|
193
|
+
|
|
215
194
|
return (
|
|
216
195
|
<div
|
|
217
196
|
ref={containerRef}
|
|
@@ -228,10 +207,10 @@ export function ItemProvider({
|
|
|
228
207
|
className={styles.itemTracker}
|
|
229
208
|
data-test-id={TEST_IDS.trackLine}
|
|
230
209
|
style={{
|
|
231
|
-
transform: `translateX(${transform
|
|
210
|
+
transform: `translateX(${transform + drag.drag}px)`,
|
|
232
211
|
transition: `transform ${transition}s ease 0s`,
|
|
233
212
|
}}
|
|
234
|
-
ref={itemsTrackerRef}
|
|
213
|
+
ref={mergeRefs(ref as (element: HTMLDivElement) => void, itemsTrackerRef)}
|
|
235
214
|
>
|
|
236
215
|
{items.map((item, i) => (
|
|
237
216
|
// eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getPageX = getPageX;
|
|
7
|
-
function getPageX(e) {
|
|
8
|
-
if (e.nativeEvent instanceof globalThis.MouseEvent) {
|
|
9
|
-
return e.nativeEvent.pageX;
|
|
10
|
-
} else if (e.nativeEvent instanceof globalThis.TouchEvent) {
|
|
11
|
-
return e.nativeEvent.changedTouches[0].pageX;
|
|
12
|
-
}
|
|
13
|
-
return 0;
|
|
14
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { MouseEvent, TouchEvent } from 'react';
|
|
2
|
-
|
|
3
|
-
export function getPageX(e: TouchEvent | MouseEvent): number {
|
|
4
|
-
if (e.nativeEvent instanceof globalThis.MouseEvent) {
|
|
5
|
-
return e.nativeEvent.pageX;
|
|
6
|
-
} else if (e.nativeEvent instanceof globalThis.TouchEvent) {
|
|
7
|
-
return e.nativeEvent.changedTouches[0].pageX;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
return 0;
|
|
11
|
-
}
|