@quintoandar-tokko/carousel 1.0.54

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.
@@ -0,0 +1,362 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.SliderSwap = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _ImageCard = require("./ImageCard");
10
+ var _box = require("@quintoandar-tokko/box");
11
+ var _icons = require("@quintoandar-tokko/icons");
12
+ var _theme = _interopRequireDefault(require("@quintoandar-tokko/theme"));
13
+ var _ImageErrorFallback = require("./ImageErrorFallback");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
15
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
16
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
17
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
18
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
19
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
20
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
21
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
22
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
23
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
24
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
25
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
26
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
27
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
28
+ var SliderSwap = exports.SliderSwap = function SliderSwap(_ref) {
29
+ var _sliderContainerRef$c, _iconNextRef$current, _iconPrevRef$current;
30
+ var _ref$files = _ref.files,
31
+ files = _ref$files === void 0 ? [] : _ref$files,
32
+ toggleFullscreen = _ref.toggleFullscreen,
33
+ setFullscreen = _ref.setFullscreen,
34
+ otherButton = _ref.otherButton,
35
+ _ref$fullScreen = _ref.fullScreen,
36
+ fullScreen = _ref$fullScreen === void 0 ? false : _ref$fullScreen,
37
+ handleImageClickToFullscreen = _ref.handleImageClickToFullscreen,
38
+ fileType = _ref.fileType,
39
+ setIndex = _ref.setIndex,
40
+ index = _ref.index,
41
+ tabSelected = _ref.tabSelected,
42
+ _ref$setURLOpenFullsc = _ref.setURLOpenFullscreen,
43
+ setURLOpenFullscreen = _ref$setURLOpenFullsc === void 0 ? function () {} : _ref$setURLOpenFullsc;
44
+ var sliderContainerRef = (0, _react.useRef)(null);
45
+ var sliderRef = (0, _react.useRef)(null);
46
+ var iconNextRef = (0, _react.useRef)(null);
47
+ var iconPrevRef = (0, _react.useRef)(null);
48
+ var _useState = (0, _react.useState)(false),
49
+ _useState2 = _slicedToArray(_useState, 2),
50
+ isDragging = _useState2[0],
51
+ setIsDragging = _useState2[1];
52
+ var _useState3 = (0, _react.useState)(0),
53
+ _useState4 = _slicedToArray(_useState3, 2),
54
+ startPos = _useState4[0],
55
+ setStartPos = _useState4[1];
56
+ var _useState5 = (0, _react.useState)(0),
57
+ _useState6 = _slicedToArray(_useState5, 2),
58
+ startPosY = _useState6[0],
59
+ setStartPosY = _useState6[1];
60
+ var _useState7 = (0, _react.useState)(0),
61
+ _useState8 = _slicedToArray(_useState7, 2),
62
+ currentTranslate = _useState8[0],
63
+ setCurrentTranslate = _useState8[1];
64
+ var _useState9 = (0, _react.useState)(0),
65
+ _useState10 = _slicedToArray(_useState9, 2),
66
+ prevTranslate = _useState10[0],
67
+ setPrevTranslate = _useState10[1];
68
+ var _useState11 = (0, _react.useState)(0),
69
+ _useState12 = _slicedToArray(_useState11, 2),
70
+ startTime = _useState12[0],
71
+ setStartTime = _useState12[1];
72
+ var _useState13 = (0, _react.useState)(true),
73
+ _useState14 = _slicedToArray(_useState13, 2),
74
+ isClick = _useState14[0],
75
+ setIsClick = _useState14[1];
76
+ var sliderContainerWidth = (_sliderContainerRef$c = sliderContainerRef.current) === null || _sliderContainerRef$c === void 0 ? void 0 : _sliderContainerRef$c.offsetWidth;
77
+ var iconNextPosition = (_iconNextRef$current = iconNextRef.current) === null || _iconNextRef$current === void 0 ? void 0 : _iconNextRef$current.getBoundingClientRect();
78
+ var iconPrevPosition = (_iconPrevRef$current = iconPrevRef.current) === null || _iconPrevRef$current === void 0 ? void 0 : _iconPrevRef$current.getBoundingClientRect();
79
+ var _useState15 = (0, _react.useState)(0),
80
+ _useState16 = _slicedToArray(_useState15, 2),
81
+ translateX = _useState16[0],
82
+ setTranslateX = _useState16[1];
83
+ var _useState17 = (0, _react.useState)(0),
84
+ _useState18 = _slicedToArray(_useState17, 2),
85
+ visibledIndex = _useState18[0],
86
+ setVisibledIndex = _useState18[1];
87
+ var _useState19 = (0, _react.useState)({}),
88
+ _useState20 = _slicedToArray(_useState19, 2),
89
+ imgErrors = _useState20[0],
90
+ setImgErrors = _useState20[1];
91
+ var debounce = function debounce(func, wait) {
92
+ var timeout;
93
+ return function () {
94
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
95
+ args[_key] = arguments[_key];
96
+ }
97
+ clearTimeout(timeout);
98
+ timeout = setTimeout(function () {
99
+ return func.apply(void 0, args);
100
+ }, wait);
101
+ };
102
+ };
103
+ var touchStart = function touchStart(event) {
104
+ var position = event.type === 'mousedown' ? event.clientX : event.touches[0].clientX;
105
+ var positionY = event.type === 'mousedown' ? event.clientY : event.touches[0].clientY;
106
+ setStartPos(position);
107
+ setStartPosY(positionY);
108
+ setIsDragging(true);
109
+ setPrevTranslate(translateX);
110
+ setStartTime(Date.now());
111
+ setIsClick(true);
112
+ };
113
+ var touchMove = function touchMove(event) {
114
+ if (isDragging) {
115
+ var currentPosition = event.type === 'mousemove' ? event.clientX : event.touches[0].clientX;
116
+ var translate = currentPosition - startPos + prevTranslate;
117
+ setCurrentTranslate(translate);
118
+ handleTraslate(translate);
119
+ if (Math.abs(currentPosition - startPos) > 5) {
120
+ setIsClick(false);
121
+ }
122
+ }
123
+ };
124
+ var debouncedTouchEnd = debounce(function () {
125
+ if (isDragging) {
126
+ setIsDragging(false);
127
+ var movedBy = currentTranslate - prevTranslate;
128
+ var elapsedTime = Date.now() - startTime;
129
+ if (isClick && elapsedTime < 300) {
130
+ if (files.length === 0) return;
131
+ if (startPos > iconNextPosition.x - 10 && startPosY < iconNextPosition.y + 40 && startPosY > iconNextPosition.y - 10) {
132
+ return debouncedNextSlide();
133
+ }
134
+ if (startPos < iconPrevPosition.x + 40 && startPosY < iconPrevPosition.y + 40 && startPosY > iconPrevPosition.y - 10) {
135
+ return debouncedPrevSlide();
136
+ }
137
+ if (!fullScreen) setFullscreen(true);
138
+ return;
139
+ }
140
+ if (movedBy < -10 && translateX > -(sliderContainerWidth * (files.length - 1))) {
141
+ nextSlide();
142
+ } else if (movedBy > 50 && translateX < 0) {
143
+ prevSlide();
144
+ } else {
145
+ handleTraslate(prevTranslate);
146
+ }
147
+ resetPosition();
148
+ }
149
+ }, 50);
150
+ var touchEnd = function touchEnd() {
151
+ debouncedTouchEnd();
152
+ };
153
+ var nextSlide = function nextSlide() {
154
+ var newTranslateX = Math.max(translateX - sliderContainerWidth, -sliderContainerWidth * (files.length - 1));
155
+ setTranslateX(newTranslateX);
156
+ handleTraslate(newTranslateX);
157
+ };
158
+ var prevSlide = function prevSlide() {
159
+ var newTranslateX = Math.min(translateX + sliderContainerWidth, 0);
160
+ setTranslateX(newTranslateX);
161
+ handleTraslate(newTranslateX);
162
+ };
163
+ var debouncedNextSlide = debounce(nextSlide, 170);
164
+ var debouncedPrevSlide = debounce(prevSlide, 170);
165
+ var resetPosition = function resetPosition() {
166
+ setCurrentTranslate(0);
167
+ };
168
+ (0, _react.useEffect)(function () {
169
+ var sliderContainer = sliderContainerRef.current;
170
+ sliderContainer.addEventListener('mousedown', touchStart);
171
+ sliderContainer.addEventListener('mouseup', touchEnd);
172
+ sliderContainer.addEventListener('mousemove', touchMove);
173
+ sliderContainer.addEventListener('touchstart', touchStart, {
174
+ passive: true
175
+ });
176
+ sliderContainer.addEventListener('touchend', touchEnd);
177
+ sliderContainer.addEventListener('touchmove', touchMove, {
178
+ passive: true
179
+ });
180
+ return function () {
181
+ sliderContainer.removeEventListener('mousedown', touchStart, {
182
+ passive: true
183
+ });
184
+ sliderContainer.removeEventListener('mouseup', touchEnd);
185
+ sliderContainer.removeEventListener('mousemove', touchMove);
186
+ sliderContainer.removeEventListener('touchstart', touchStart);
187
+ sliderContainer.removeEventListener('touchend', touchEnd);
188
+ sliderContainer.removeEventListener('touchmove', touchMove, {
189
+ passive: true
190
+ });
191
+ };
192
+ }, [isDragging, startPos, currentTranslate, prevTranslate, translateX, files.length, startTime, isClick]);
193
+ (0, _react.useEffect)(function () {
194
+ if (fullScreen) return;
195
+ setVisibledIndex(Math.round(Math.abs(translateX / sliderContainerWidth)));
196
+ }, [translateX, fullScreen]);
197
+ (0, _react.useEffect)(function () {
198
+ setURLOpenFullscreen(files[visibledIndex || 0]);
199
+ if (handleImageClickToFullscreen) {
200
+ handleImageClickToFullscreen(files[visibledIndex]);
201
+ }
202
+ }, [visibledIndex]);
203
+ (0, _react.useEffect)(function () {
204
+ if (fullScreen && sliderContainerWidth) {
205
+ setIndex(-translateX / sliderContainerWidth);
206
+ }
207
+ }, [translateX, tabSelected, fullScreen]);
208
+ (0, _react.useEffect)(function () {
209
+ if (!sliderContainerWidth) return;
210
+ if (fullScreen) {
211
+ handleTraslate(-sliderContainerWidth * index);
212
+ setTranslateX(-sliderContainerWidth * index);
213
+ }
214
+ }, [fullScreen, tabSelected, sliderContainerWidth]);
215
+ (0, _react.useEffect)(function () {
216
+ if (fullScreen) handleTraslate(-sliderContainerWidth * index);
217
+ }, [index]);
218
+ var handleImgError = function handleImgError(url) {
219
+ setImgErrors(function (prevErrors) {
220
+ return _objectSpread(_objectSpread({}, prevErrors), {}, _defineProperty({}, url, true));
221
+ });
222
+ };
223
+ var handleTraslate = function handleTraslate(traslation) {
224
+ var _sliderRef$current;
225
+ if (!((_sliderRef$current = sliderRef.current) !== null && _sliderRef$current !== void 0 && _sliderRef$current.style)) return;
226
+ return sliderRef.current.style.transform = "translateX(".concat(traslation, "px)");
227
+ };
228
+ return /*#__PURE__*/_react["default"].createElement(_box.Box, {
229
+ ref: sliderContainerRef,
230
+ __css: {
231
+ width: '100%',
232
+ height: '100%',
233
+ overflow: 'hidden',
234
+ position: 'relative'
235
+ }
236
+ }, /*#__PURE__*/_react["default"].createElement(_box.Box, {
237
+ ref: sliderRef,
238
+ __css: {
239
+ display: 'flex',
240
+ alignItems: 'center',
241
+ width: '100%',
242
+ height: '100%',
243
+ transition: 'transform .2s ease'
244
+ },
245
+ className: "sliderContainer"
246
+ }, !fullScreen && files.length > 0 && files.map(function (img, index) {
247
+ return /*#__PURE__*/_react["default"].createElement(_ImageCard.ImageCard, {
248
+ key: index,
249
+ className: "firstTabImg",
250
+ position: 'relative',
251
+ height: '100%',
252
+ minWidth: '100%',
253
+ url: img
254
+ });
255
+ }), !fullScreen && files.length === 0 && /*#__PURE__*/_react["default"].createElement(_box.Box, {
256
+ onClick: function onClick() {
257
+ return toggleFullscreen();
258
+ },
259
+ __css: {
260
+ display: 'flex',
261
+ justifyContent: 'center',
262
+ alignItems: 'center',
263
+ width: '100%',
264
+ height: '100%',
265
+ backgroundColor: _theme["default"].colors.neutralGray7,
266
+ borderRadius: '12px',
267
+ cursor: 'pointer'
268
+ }
269
+ }, /*#__PURE__*/_react["default"].createElement(_icons.Icon, {
270
+ width: "100%",
271
+ height: "100%",
272
+ icon: "icon-propiedades",
273
+ fontSize: "34px",
274
+ color: _theme["default"].colors.neutralGray4
275
+ })), fullScreen && (fileType === 'fotos' || fileType === 'planos') && files.map(function (img, index) {
276
+ return /*#__PURE__*/_react["default"].createElement(_box.Box, {
277
+ key: index,
278
+ __css: {
279
+ display: 'flex',
280
+ alignItems: 'center',
281
+ justifyContent: 'center',
282
+ minWidth: '100%',
283
+ maxWidth: '100%',
284
+ height: '100%',
285
+ borderRadius: '12px',
286
+ cursor: 'pointer'
287
+ },
288
+ onClick: function onClick(e) {
289
+ return e.stopPropagation();
290
+ },
291
+ onDragStart: function onDragStart(e) {
292
+ return e.preventDefault();
293
+ }
294
+ }, imgErrors[img] ? /*#__PURE__*/_react["default"].createElement(_ImageErrorFallback.ImageErrorFallback, {
295
+ fullscreen: true
296
+ }) : /*#__PURE__*/_react["default"].createElement("img", {
297
+ className: "imgFullScreenSlide",
298
+ style: {
299
+ pointerEvents: 'none'
300
+ },
301
+ src: img,
302
+ alt: fileType,
303
+ onError: function onError() {
304
+ return handleImgError(img);
305
+ }
306
+ }));
307
+ }), fullScreen && (fileType === 'videos' || fileType === 'video360') && files.map(function (video, index) {
308
+ return /*#__PURE__*/_react["default"].createElement(_box.Box, {
309
+ key: index,
310
+ __css: {
311
+ display: 'flex',
312
+ alignItems: 'center',
313
+ justifyContent: 'center',
314
+ minWidth: '100%',
315
+ maxHeight: '100%',
316
+ maxWidth: '100%',
317
+ height: "".concat(sliderContainerWidth * 0.7, "px"),
318
+ borderRadius: '12px',
319
+ cursor: 'pointer'
320
+ }
321
+ }, /*#__PURE__*/_react["default"].createElement("iframe", {
322
+ className: "videoFullScreenSlide",
323
+ src: video,
324
+ title: fileType,
325
+ allowFullScreen: true
326
+ }));
327
+ })), (!fullScreen && files.length > 0 || fullScreen) && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_box.Box, {
328
+ __css: {
329
+ left: fullScreen ? '-5px' : '16px',
330
+ width: sliderContainerWidth < 700 ? '30px' : '40px',
331
+ height: sliderContainerWidth < 700 ? '30px' : '40px'
332
+ },
333
+ ref: iconPrevRef,
334
+ className: "nextPrevIconContainer ".concat(fullScreen ? 'fullScreen' : '')
335
+ }, /*#__PURE__*/_react["default"].createElement(_icons.Icon, {
336
+ className: "swapSliderIconPrev ".concat(fullScreen ? 'fullScreen' : ''),
337
+ icon: "icon-atras",
338
+ style: {
339
+ fontSize: sliderContainerWidth < 700 && !fullScreen ? '12px' : '24px'
340
+ }
341
+ })), /*#__PURE__*/_react["default"].createElement(_box.Box, {
342
+ __css: {
343
+ right: fullScreen ? '-5px' : '16px',
344
+ width: sliderContainerWidth < 700 ? '30px' : '40px',
345
+ height: sliderContainerWidth < 700 ? '30px' : '40px'
346
+ },
347
+ ref: iconNextRef,
348
+ className: "nextPrevIconContainer ".concat(fullScreen ? 'fullScreen' : '')
349
+ }, /*#__PURE__*/_react["default"].createElement(_icons.Icon, {
350
+ className: "swapSliderIconNext ".concat(fullScreen ? 'fullScreen' : ''),
351
+ style: {
352
+ transform: 'rotate(180deg)',
353
+ fontSize: sliderContainerWidth < 700 && !fullScreen ? '12px' : '24px'
354
+ },
355
+ icon: "icon-atras"
356
+ }))), !fullScreen && /*#__PURE__*/_react["default"].createElement(_box.Box, {
357
+ onClick: function onClick(e) {
358
+ return e.stopPropagation();
359
+ },
360
+ className: "otherButtonSwap"
361
+ }, otherButton));
362
+ };