react-slideshow-image 3.4.6 → 3.6.0

Sign up to get free protection for your applications and to get access to all the features.
package/lib/fade.js CHANGED
@@ -67,6 +67,8 @@ function (_Component) {
67
67
  _this.tweenGroup = new _tween["default"].Group();
68
68
  _this.reactSlideshowWrapper = (0, _react.createRef)();
69
69
  _this.wrapper = (0, _react.createRef)();
70
+ _this.startSwipe = _this.startSwipe.bind(_assertThisInitialized(_this));
71
+ _this.endSwipe = _this.endSwipe.bind(_assertThisInitialized(_this));
70
72
  return _this;
71
73
  }
72
74
 
@@ -258,28 +260,68 @@ function (_Component) {
258
260
  this.goNext();
259
261
  }
260
262
  }
263
+ }, {
264
+ key: "startSwipe",
265
+ value: function startSwipe(e) {
266
+ var _getProps6 = (0, _props.getProps)(this.props),
267
+ canSwipe = _getProps6.canSwipe;
268
+
269
+ if (canSwipe) {
270
+ this.startingClientX = e.touches ? e.touches[0].pageX : e.clientX;
271
+ clearTimeout(this.timeout);
272
+ this.dragging = true;
273
+ }
274
+ }
275
+ }, {
276
+ key: "endSwipe",
277
+ value: function endSwipe(e) {
278
+ var clientX = e.changedTouches ? e.changedTouches[0].pageX : e.clientX;
279
+ var distance = clientX - this.startingClientX;
280
+
281
+ var _getProps7 = (0, _props.getProps)(this.props),
282
+ canSwipe = _getProps7.canSwipe;
283
+
284
+ if (canSwipe) {
285
+ this.dragging = false;
286
+
287
+ if (Math.abs(distance) / this.width > 0.2) {
288
+ if (distance < 0) {
289
+ this.goNext();
290
+ } else {
291
+ this.goBack();
292
+ }
293
+ }
294
+ }
295
+ }
261
296
  }, {
262
297
  key: "render",
263
298
  value: function render() {
264
299
  var _this5 = this;
265
300
 
266
- var _getProps6 = (0, _props.getProps)(this.props),
267
- indicators = _getProps6.indicators,
268
- children = _getProps6.children,
269
- arrows = _getProps6.arrows;
301
+ var _getProps8 = (0, _props.getProps)(this.props),
302
+ indicators = _getProps8.indicators,
303
+ children = _getProps8.children,
304
+ arrows = _getProps8.arrows,
305
+ cssClass = _getProps8.cssClass;
270
306
 
271
307
  var index = this.state.index;
272
308
  var unhandledProps = (0, _helpers.getUnhandledProps)(_props.propTypes, this.props);
273
309
  return _react["default"].createElement("div", _extends({
310
+ dir: "ltr",
274
311
  "aria-roledescription": "carousel"
275
312
  }, unhandledProps), _react["default"].createElement("div", {
276
313
  className: "react-slideshow-container",
277
314
  onMouseEnter: this.pauseSlides,
278
315
  onMouseOver: this.pauseSlides,
279
316
  onMouseLeave: this.startSlides,
317
+ onMouseDown: this.startSwipe,
318
+ onMouseUp: this.endSwipe,
319
+ onTouchStart: this.startSwipe,
320
+ onTouchEnd: this.endSwipe,
321
+ onTouchCancel: this.endSwipe,
280
322
  ref: this.reactSlideshowWrapper
281
323
  }, arrows && (0, _helpers.showPreviousArrow)((0, _props.getProps)(this.props), this.state.index, this.preFade), _react["default"].createElement("div", {
282
- className: "react-slideshow-fade-wrapper",
324
+ className: "react-slideshow-fade-wrapper ".concat(cssClass),
283
325
  ref: this.wrapper
284
326
  }, _react["default"].createElement("div", {
285
327
  className: "react-slideshow-fade-images-wrap",
@@ -306,14 +348,14 @@ function (_Component) {
306
348
 
307
349
  var index = this.state.index;
308
350
 
309
- var _getProps7 = (0, _props.getProps)(this.props),
310
- autoplay = _getProps7.autoplay,
311
- children = _getProps7.children,
312
- infinite = _getProps7.infinite,
313
- duration = _getProps7.duration,
314
- transitionDuration = _getProps7.transitionDuration,
315
- onChange = _getProps7.onChange,
316
- easing = _getProps7.easing;
351
+ var _getProps9 = (0, _props.getProps)(this.props),
352
+ autoplay = _getProps9.autoplay,
353
+ children = _getProps9.children,
354
+ infinite = _getProps9.infinite,
355
+ duration = _getProps9.duration,
356
+ transitionDuration = _getProps9.transitionDuration,
357
+ onChange = _getProps9.onChange,
358
+ easing = _getProps9.easing;
317
359
 
318
360
  var existingTweens = this.tweenGroup.getAll();
319
361
 
package/lib/helpers.js CHANGED
@@ -76,11 +76,12 @@ var showPreviousArrow = function showPreviousArrow(_ref, currentIndex, moveSlide
76
76
 
77
77
  exports.showPreviousArrow = showPreviousArrow;
78
78
 
79
- var showNextArrow = function showNextArrow(_ref2, currentIndex, moveSlides) {
80
- var nextArrow = _ref2.nextArrow,
81
- infinite = _ref2.infinite,
82
- children = _ref2.children;
83
- var isDisabled = currentIndex === children.length - 1 && !infinite;
79
+ var showNextArrow = function showNextArrow(properties, currentIndex, moveSlides) {
80
+ var nextArrow = properties.nextArrow,
81
+ infinite = properties.infinite,
82
+ children = properties.children,
83
+ slidesToScroll = properties.slidesToScroll;
84
+ var isDisabled = currentIndex >= children.length - slidesToScroll && !infinite;
84
85
  var props = {
85
86
  'data-type': 'next',
86
87
  'aria-label': 'Next Slide',
@@ -108,39 +109,44 @@ var showNextArrow = function showNextArrow(_ref2, currentIndex, moveSlides) {
108
109
 
109
110
  exports.showNextArrow = showNextArrow;
110
111
 
111
- var showDefaultIndicator = function showDefaultIndicator(currentIndex, key, indicatorProps) {
112
+ var showDefaultIndicator = function showDefaultIndicator(isCurrentPageActive, key, indicatorProps) {
112
113
  return _react["default"].createElement("li", {
113
114
  key: key
114
115
  }, _react["default"].createElement("button", _extends({
115
- className: "each-slideshow-indicator ".concat(currentIndex === key ? 'active' : '')
116
+ className: "each-slideshow-indicator ".concat(isCurrentPageActive ? 'active' : '')
116
117
  }, indicatorProps)));
117
118
  };
118
119
 
119
- var showCustomIndicator = function showCustomIndicator(currentIndex, key, indicatorProps, eachIndicator) {
120
+ var showCustomIndicator = function showCustomIndicator(isCurrentPageActive, key, indicatorProps, eachIndicator) {
120
121
  return _react["default"].cloneElement(eachIndicator, _objectSpread({
121
- className: "".concat(eachIndicator.props.className, " ").concat(currentIndex === key ? 'active' : ''),
122
+ className: "".concat(eachIndicator.props.className, " ").concat(isCurrentPageActive ? 'active' : ''),
122
123
  key: key
123
124
  }, indicatorProps));
124
125
  };
125
126
 
126
127
  var showIndicators = function showIndicators(props, currentIndex, navigate) {
127
128
  var children = props.children,
128
- indicators = props.indicators;
129
+ indicators = props.indicators,
130
+ slidesToScroll = props.slidesToScroll;
129
131
  var isCustomIndicator = typeof indicators !== 'boolean';
132
+ var pages = Math.ceil(children.length / slidesToScroll);
130
133
  return _react["default"].createElement("ul", {
131
134
  className: "indicators"
132
- }, children.map(function (_, key) {
135
+ }, Array.from({
136
+ length: pages
137
+ }, function (_, key) {
133
138
  var indicatorProps = {
134
139
  'data-key': key,
135
140
  'aria-label': "Go to slide ".concat(key + 1),
136
141
  onClick: navigate
137
142
  };
143
+ var isCurrentPageActive = Math.floor((currentIndex + slidesToScroll - 1) / slidesToScroll) === key;
138
144
 
139
145
  if (isCustomIndicator) {
140
- return showCustomIndicator(currentIndex, key, indicatorProps, indicators(key));
146
+ return showCustomIndicator(isCurrentPageActive, key, indicatorProps, indicators(key));
141
147
  }
142
148
 
143
- return showDefaultIndicator(currentIndex, key, indicatorProps);
149
+ return showDefaultIndicator(isCurrentPageActive, key, indicatorProps);
144
150
  }));
145
151
  };
146
152
 
package/lib/props.js CHANGED
@@ -5,6 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.validatePropTypes = exports.propTypes = exports.getProps = void 0;
7
7
 
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
11
+
8
12
  function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
9
13
 
10
14
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
@@ -24,15 +28,16 @@ var defaultProps = {
24
28
  pauseOnHover: true,
25
29
  scale: 1,
26
30
  easing: 'linear',
27
- canSwipe: true
31
+ canSwipe: true,
32
+ slidesToShow: 1,
33
+ slidesToScroll: 1,
34
+ cssClass: ''
28
35
  };
29
36
 
30
37
  var getProps = function getProps(componentProps) {
31
- var children = componentProps.children;
32
-
33
- if (!Array.isArray(children)) {
34
- children = [children];
35
- }
38
+ var children = _react["default"].Children.map(componentProps.children, function (each) {
39
+ return each;
40
+ });
36
41
 
37
42
  return _objectSpread({}, defaultProps, {}, componentProps, {
38
43
  children: children
@@ -54,7 +59,10 @@ var propTypes = {
54
59
  nextArrow: ['object', 'function'],
55
60
  scale: 'number',
56
61
  easing: 'string',
57
- canSwipe: 'boolean'
62
+ canSwipe: 'boolean',
63
+ slidesToShow: 'number',
64
+ slidesToScroll: 'number',
65
+ cssClass: 'string'
58
66
  };
59
67
  exports.propTypes = propTypes;
60
68
 
package/lib/slide.js CHANGED
@@ -152,14 +152,32 @@ function (_Component) {
152
152
  key: "swipe",
153
153
  value: function swipe(e) {
154
154
  var _getProps4 = (0, _props.getProps)(this.props),
155
- canSwipe = _getProps4.canSwipe;
155
+ canSwipe = _getProps4.canSwipe,
156
+ slidesToShow = _getProps4.slidesToShow,
157
+ children = _getProps4.children,
158
+ infinite = _getProps4.infinite,
159
+ slidesToScroll = _getProps4.slidesToScroll;
156
160
 
157
161
  if (canSwipe) {
158
162
  var clientX = e.touches ? e.touches[0].pageX : e.clientX;
159
163
 
160
164
  if (this.dragging) {
161
- var translateValue = this.width * (this.state.index + 1);
162
- this.distanceSwiped = clientX - this.startingClientX;
165
+ var translateValue = this.width * (this.state.index + slidesToShow);
166
+ var distance = clientX - this.startingClientX;
167
+
168
+ if (!infinite && this.state.index === children.length - slidesToScroll && distance < 0) {
169
+ // if it is the last and infinite is false and you're swiping left
170
+ // then nothing happens
171
+ return;
172
+ }
173
+
174
+ if (!infinite && this.state.index === 0 && distance > 0) {
175
+ // if it is the first and infinite is false and you're swiping right
176
+ // then nothing happens
177
+ return;
178
+ }
179
+
180
+ this.distanceSwiped = distance;
163
181
  translateValue -= this.distanceSwiped;
164
182
  this.imageContainer.style.transform = "translate(-".concat(translateValue, "px)");
165
183
  }
@@ -177,12 +195,19 @@ function (_Component) {
177
195
  value: function setWidth() {
178
196
  // the .slice.call was needed to support ie11
179
197
  this.allImages = this.wrapper && Array.prototype.slice.call(this.wrapper.querySelectorAll(".images-wrap > div"), 0) || [];
180
- this.width = this.wrapper && this.wrapper.clientWidth || 0;
181
- var fullwidth = this.width * (_react["default"].Children.count(this.props.children) + 2);
198
+
199
+ var _getProps5 = (0, _props.getProps)(this.props),
200
+ slidesToShow = _getProps5.slidesToShow;
201
+
202
+ this.width = (this.wrapper && this.wrapper.clientWidth || 0) / slidesToShow;
203
+
204
+ var numberOfSlides = _react["default"].Children.count(this.props.children);
205
+
206
+ var fullwidth = this.width * (numberOfSlides + slidesToShow * 2);
182
207
 
183
208
  if (this.imageContainer) {
184
209
  this.imageContainer.style.width = "".concat(fullwidth, "px");
185
- this.imageContainer.style.transform = "translate(-".concat(this.width * (this.state.index + 1), "px)");
210
+ this.imageContainer.style.transform = "translate(-".concat(this.width * (this.state.index + slidesToShow), "px)");
186
211
  }
187
212
 
188
213
  this.applySlideStyle();
@@ -192,10 +217,10 @@ function (_Component) {
192
217
  value: function componentDidUpdate(props) {
193
218
  var _this4 = this;
194
219
 
195
- var _getProps5 = (0, _props.getProps)(this.props),
196
- autoplay = _getProps5.autoplay,
197
- duration = _getProps5.duration,
198
- children = _getProps5.children;
220
+ var _getProps6 = (0, _props.getProps)(this.props),
221
+ autoplay = _getProps6.autoplay,
222
+ duration = _getProps6.duration,
223
+ children = _getProps6.children;
199
224
 
200
225
  var newProps = (0, _props.getProps)(props);
201
226
 
@@ -243,10 +268,10 @@ function (_Component) {
243
268
  value: function startSlides() {
244
269
  var _this6 = this;
245
270
 
246
- var _getProps6 = (0, _props.getProps)(this.props),
247
- pauseOnHover = _getProps6.pauseOnHover,
248
- autoplay = _getProps6.autoplay,
249
- duration = _getProps6.duration;
271
+ var _getProps7 = (0, _props.getProps)(this.props),
272
+ pauseOnHover = _getProps7.pauseOnHover,
273
+ autoplay = _getProps7.autoplay,
274
+ duration = _getProps7.duration;
250
275
 
251
276
  if (this.dragging) {
252
277
  this.endSwipe();
@@ -273,58 +298,123 @@ function (_Component) {
273
298
  key: "goToSlide",
274
299
  value: function goToSlide(_ref2) {
275
300
  var currentTarget = _ref2.currentTarget;
276
- this.goTo(parseInt(currentTarget.dataset.key));
301
+
302
+ var _getProps8 = (0, _props.getProps)(this.props),
303
+ slidesToScroll = _getProps8.slidesToScroll;
304
+
305
+ this.goTo(parseInt(currentTarget.dataset.key * slidesToScroll));
277
306
  }
278
307
  }, {
279
308
  key: "goTo",
280
309
  value: function goTo(index) {
281
- this.slideImages(index);
310
+ this.slideImages(this.calculateIndex(index));
311
+ }
312
+ }, {
313
+ key: "calculateIndex",
314
+ value: function calculateIndex(nextIndex) {
315
+ var _getProps9 = (0, _props.getProps)(this.props),
316
+ children = _getProps9.children,
317
+ slidesToScroll = _getProps9.slidesToScroll;
318
+
319
+ if (nextIndex < children.length && nextIndex + slidesToScroll > children.length) {
320
+ if ((children.length - slidesToScroll) % slidesToScroll) {
321
+ return children.length - slidesToScroll;
322
+ }
323
+
324
+ return nextIndex;
325
+ }
326
+
327
+ return nextIndex;
282
328
  }
283
329
  }, {
284
330
  key: "goNext",
285
331
  value: function goNext() {
286
332
  var index = this.state.index;
287
333
 
288
- var _getProps7 = (0, _props.getProps)(this.props),
289
- children = _getProps7.children,
290
- infinite = _getProps7.infinite;
334
+ var _getProps10 = (0, _props.getProps)(this.props),
335
+ children = _getProps10.children,
336
+ infinite = _getProps10.infinite,
337
+ slidesToScroll = _getProps10.slidesToScroll;
291
338
 
292
- if (!infinite && index === children.length - 1) {
339
+ if (!infinite && index === children.length - slidesToScroll) {
293
340
  return;
294
341
  }
295
342
 
296
- this.slideImages(index + 1);
343
+ var nextIndex = this.calculateIndex(index + slidesToScroll);
344
+ this.slideImages(nextIndex);
297
345
  }
298
346
  }, {
299
347
  key: "goBack",
300
348
  value: function goBack() {
301
349
  var index = this.state.index;
302
350
 
303
- var _getProps8 = (0, _props.getProps)(this.props),
304
- infinite = _getProps8.infinite;
351
+ var _getProps11 = (0, _props.getProps)(this.props),
352
+ infinite = _getProps11.infinite,
353
+ slidesToScroll = _getProps11.slidesToScroll;
305
354
 
306
355
  if (!infinite && index === 0) {
307
356
  return;
308
357
  }
309
358
 
310
- this.slideImages(index - 1);
359
+ var previousIndex = index - slidesToScroll;
360
+
361
+ if (previousIndex % slidesToScroll) {
362
+ previousIndex = Math.ceil(previousIndex / slidesToScroll) * slidesToScroll;
363
+ }
364
+
365
+ this.slideImages(previousIndex);
366
+ }
367
+ }, {
368
+ key: "isSlideActive",
369
+ value: function isSlideActive(key) {
370
+ var _getProps12 = (0, _props.getProps)(this.props),
371
+ slidesToShow = _getProps12.slidesToShow;
372
+
373
+ return key < this.state.index + slidesToShow && key >= this.state.index;
374
+ }
375
+ }, {
376
+ key: "renderPreceedingSlides",
377
+ value: function renderPreceedingSlides(children, slidesToShow) {
378
+ return children.slice(-slidesToShow).map(function (each, index) {
379
+ return _react["default"].createElement("div", {
380
+ "data-index": index - slidesToShow,
381
+ "aria-roledescription": "slide",
382
+ "aria-hidden": "true",
383
+ key: index - slidesToShow
384
+ }, each);
385
+ });
386
+ }
387
+ }, {
388
+ key: "renderTrailingSlides",
389
+ value: function renderTrailingSlides(children, slidesToShow) {
390
+ return children.slice(0, slidesToShow).map(function (each, index) {
391
+ return _react["default"].createElement("div", {
392
+ "data-index": children.length + index,
393
+ "aria-roledescription": "slide",
394
+ "aria-hidden": "true",
395
+ key: children.length + index
396
+ }, each);
397
+ });
311
398
  }
312
399
  }, {
313
400
  key: "render",
314
401
  value: function render() {
315
402
  var _this7 = this;
316
403
 
317
- var _getProps9 = (0, _props.getProps)(this.props),
318
- children = _getProps9.children,
319
- indicators = _getProps9.indicators,
320
- arrows = _getProps9.arrows;
404
+ var _getProps13 = (0, _props.getProps)(this.props),
405
+ children = _getProps13.children,
406
+ indicators = _getProps13.indicators,
407
+ arrows = _getProps13.arrows,
408
+ cssClass = _getProps13.cssClass,
409
+ slidesToShow = _getProps13.slidesToShow;
321
410
 
322
411
  var unhandledProps = (0, _helpers.getUnhandledProps)(_props.propTypes, this.props);
323
412
  var index = this.state.index;
324
413
  var style = {
325
- transform: "translate(-".concat((index + 1) * this.width, "px)")
414
+ transform: "translate(-".concat((index + slidesToShow) * this.width, "px)")
326
415
  };
327
416
  return _react["default"].createElement("div", _extends({
417
+ dir: "ltr",
328
418
  "aria-roledescription": "carousel"
329
419
  }, unhandledProps), _react["default"].createElement("div", {
330
420
  className: "react-slideshow-container",
@@ -340,7 +430,7 @@ function (_Component) {
340
430
  onTouchMove: this.swipe,
341
431
  ref: this.reactSlideshowWrapper
342
432
  }, arrows && (0, _helpers.showPreviousArrow)((0, _props.getProps)(this.props), this.state.index, this.moveSlides), _react["default"].createElement("div", {
343
- className: "react-slideshow-wrapper slide",
433
+ className: "react-slideshow-wrapper slide ".concat(cssClass),
344
434
  ref: function ref(_ref4) {
345
435
  return _this7.wrapper = _ref4;
346
436
  }
@@ -350,37 +440,33 @@ function (_Component) {
350
440
  ref: function ref(_ref3) {
351
441
  return _this7.imageContainer = _ref3;
352
442
  }
353
- }, _react["default"].createElement("div", {
354
- "data-index": "-1",
355
- "aria-roledescription": "slide",
356
- "aria-hidden": "false"
357
- }, children[children.length - 1]), children.map(function (each, key) {
443
+ }, this.renderPreceedingSlides(children, slidesToShow), children.map(function (each, key) {
444
+ var isSlideActive = _this7.isSlideActive(key);
445
+
358
446
  return _react["default"].createElement("div", {
359
447
  "data-index": key,
360
448
  key: key,
361
- className: key === index ? 'active' : '',
449
+ className: isSlideActive ? 'active' : '',
362
450
  "aria-roledescription": "slide",
363
- "aria-hidden": key === index ? 'false' : 'true'
451
+ "aria-hidden": isSlideActive ? 'false' : 'true'
364
452
  }, each);
365
- }), _react["default"].createElement("div", {
366
- "data-index": "-1",
367
- "aria-roledescription": "slide",
368
- "aria-hidden": "false"
369
- }, children[0]))), arrows && (0, _helpers.showNextArrow)((0, _props.getProps)(this.props), this.state.index, this.moveSlides)), indicators && (0, _helpers.showIndicators)((0, _props.getProps)(this.props), this.state.index, this.goToSlide));
453
+ }), this.renderTrailingSlides(children, slidesToShow))), arrows && (0, _helpers.showNextArrow)((0, _props.getProps)(this.props), this.state.index, this.moveSlides)), indicators && (0, _helpers.showIndicators)((0, _props.getProps)(this.props), this.state.index, this.goToSlide));
370
454
  }
371
455
  }, {
372
456
  key: "slideImages",
373
457
  value: function slideImages(index, animationDuration) {
374
458
  var _this8 = this;
375
459
 
376
- var _getProps10 = (0, _props.getProps)(this.props),
377
- children = _getProps10.children,
378
- transitionDuration = _getProps10.transitionDuration,
379
- autoplay = _getProps10.autoplay,
380
- infinite = _getProps10.infinite,
381
- duration = _getProps10.duration,
382
- onChange = _getProps10.onChange,
383
- easing = _getProps10.easing;
460
+ var _getProps14 = (0, _props.getProps)(this.props),
461
+ children = _getProps14.children,
462
+ transitionDuration = _getProps14.transitionDuration,
463
+ autoplay = _getProps14.autoplay,
464
+ infinite = _getProps14.infinite,
465
+ duration = _getProps14.duration,
466
+ onChange = _getProps14.onChange,
467
+ easing = _getProps14.easing,
468
+ slidesToShow = _getProps14.slidesToShow,
469
+ slidesToScroll = _getProps14.slidesToScroll;
384
470
 
385
471
  transitionDuration = animationDuration || transitionDuration;
386
472
  var existingTweens = this.tweenGroup.getAll();
@@ -388,10 +474,10 @@ function (_Component) {
388
474
  if (!existingTweens.length) {
389
475
  clearTimeout(this.timeout);
390
476
  var value = {
391
- margin: -this.width * (this.state.index + 1) + this.distanceSwiped
477
+ margin: -this.width * (this.state.index + slidesToShow) + this.distanceSwiped
392
478
  };
393
479
  var tween = new _tween["default"].Tween(value, this.tweenGroup).to({
394
- margin: -this.width * (index + 1)
480
+ margin: -this.width * (index + slidesToShow)
395
481
  }, transitionDuration).onUpdate(function (value) {
396
482
  if (_this8.imageContainer) {
397
483
  _this8.imageContainer.style.transform = "translate(".concat(value.margin, "px)");
@@ -421,7 +507,7 @@ function (_Component) {
421
507
  var newIndex = index;
422
508
 
423
509
  if (newIndex < 0) {
424
- newIndex = children.length - 1;
510
+ newIndex = children.length - slidesToScroll;
425
511
  } else if (newIndex >= children.length) {
426
512
  newIndex = 0;
427
513
  }
package/lib/zoom.js CHANGED
@@ -66,6 +66,8 @@ function (_Component) {
66
66
  _this.tweenGroup = new _tween["default"].Group();
67
67
  _this.initResizeObserver = _this.initResizeObserver.bind(_assertThisInitialized(_this));
68
68
  _this.reactSlideshowWrapper = (0, _react.createRef)();
69
+ _this.startSwipe = _this.startSwipe.bind(_assertThisInitialized(_this));
70
+ _this.endSwipe = _this.endSwipe.bind(_assertThisInitialized(_this));
69
71
  return _this;
70
72
  }
71
73
 
@@ -257,28 +259,68 @@ function (_Component) {
257
259
  this.goNext();
258
260
  }
259
261
  }
262
+ }, {
263
+ key: "startSwipe",
264
+ value: function startSwipe(e) {
265
+ var _getProps6 = (0, _props.getProps)(this.props),
266
+ canSwipe = _getProps6.canSwipe;
267
+
268
+ if (canSwipe) {
269
+ this.startingClientX = e.touches ? e.touches[0].pageX : e.clientX;
270
+ clearTimeout(this.timeout);
271
+ this.dragging = true;
272
+ }
273
+ }
274
+ }, {
275
+ key: "endSwipe",
276
+ value: function endSwipe(e) {
277
+ var clientX = e.changedTouches ? e.changedTouches[0].pageX : e.clientX;
278
+ var distance = clientX - this.startingClientX;
279
+
280
+ var _getProps7 = (0, _props.getProps)(this.props),
281
+ canSwipe = _getProps7.canSwipe;
282
+
283
+ if (canSwipe) {
284
+ this.dragging = false;
285
+
286
+ if (Math.abs(distance) / this.width > 0.2) {
287
+ if (distance < 0) {
288
+ this.goNext();
289
+ } else {
290
+ this.goBack();
291
+ }
292
+ }
293
+ }
294
+ }
260
295
  }, {
261
296
  key: "render",
262
297
  value: function render() {
263
298
  var _this5 = this;
264
299
 
265
- var _getProps6 = (0, _props.getProps)(this.props),
266
- indicators = _getProps6.indicators,
267
- arrows = _getProps6.arrows,
268
- children = _getProps6.children;
300
+ var _getProps8 = (0, _props.getProps)(this.props),
301
+ indicators = _getProps8.indicators,
302
+ arrows = _getProps8.arrows,
303
+ children = _getProps8.children,
304
+ cssClass = _getProps8.cssClass;
269
305
 
270
306
  var index = this.state.index;
271
307
  var unhandledProps = (0, _helpers.getUnhandledProps)(_props.propTypes, this.props);
272
308
  return _react["default"].createElement("div", _extends({
309
+ dir: "ltr",
273
310
  "aria-roledescription": "carousel"
274
311
  }, unhandledProps), _react["default"].createElement("div", {
275
312
  className: "react-slideshow-container",
276
313
  onMouseEnter: this.pauseSlides,
277
314
  onMouseOver: this.pauseSlides,
278
315
  onMouseLeave: this.startSlides,
316
+ onMouseDown: this.startSwipe,
317
+ onMouseUp: this.endSwipe,
318
+ onTouchStart: this.startSwipe,
319
+ onTouchEnd: this.endSwipe,
320
+ onTouchCancel: this.endSwipe,
279
321
  ref: this.reactSlideshowWrapper
280
322
  }, arrows && (0, _helpers.showPreviousArrow)((0, _props.getProps)(this.props), this.state.index, this.preZoom), _react["default"].createElement("div", {
281
- className: "react-slideshow-zoom-wrapper",
323
+ className: "react-slideshow-zoom-wrapper ".concat(cssClass),
282
324
  ref: function ref(_ref3) {
283
325
  return _this5.wrapper = _ref3;
284
326
  }
@@ -307,15 +349,15 @@ function (_Component) {
307
349
 
308
350
  var index = this.state.index;
309
351
 
310
- var _getProps7 = (0, _props.getProps)(this.props),
311
- children = _getProps7.children,
312
- scale = _getProps7.scale,
313
- autoplay = _getProps7.autoplay,
314
- infinite = _getProps7.infinite,
315
- transitionDuration = _getProps7.transitionDuration,
316
- duration = _getProps7.duration,
317
- onChange = _getProps7.onChange,
318
- easing = _getProps7.easing;
352
+ var _getProps9 = (0, _props.getProps)(this.props),
353
+ children = _getProps9.children,
354
+ scale = _getProps9.scale,
355
+ autoplay = _getProps9.autoplay,
356
+ infinite = _getProps9.infinite,
357
+ transitionDuration = _getProps9.transitionDuration,
358
+ duration = _getProps9.duration,
359
+ onChange = _getProps9.onChange,
360
+ easing = _getProps9.easing;
319
361
 
320
362
  var existingTweens = this.tweenGroup.getAll();
321
363
 
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "react-slideshow-image",
3
- "version": "3.4.6",
3
+ "version": "3.6.0",
4
4
  "author": "Femi Oladeji",
5
5
  "description": "An image slideshow with react",
6
6
  "files": [
7
7
  "lib",
8
8
  "dist"
9
9
  ],
10
- "homepage": "https://react-slideshow.herokuapp.com",
10
+ "homepage": "https://react-slideshow-image.netlify.com",
11
11
  "npmFileMap": [
12
12
  {
13
13
  "basePath": "/dist/",
@@ -56,8 +56,8 @@
56
56
  "style-loader": "^1.2.1",
57
57
  "uglifycss": "0.0.29",
58
58
  "webpack": "^4.42.0",
59
- "webpack-cli": "^3.1.2",
60
- "webpack-dev-server": "^3.11.0"
59
+ "webpack-cli": "^3.3.4",
60
+ "webpack-dev-server": "^3.7.1"
61
61
  },
62
62
  "peerDependencies": {
63
63
  "react": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0",