react-slideshow-image 3.4.6 → 3.6.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/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",