@lumx/react 2.2.10 → 2.2.11
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/esm/_internal/Slides.js +42 -68
- package/esm/_internal/Slides.js.map +1 -1
- package/esm/_internal/getRootClassName.js +1 -2
- package/esm/_internal/getRootClassName.js.map +1 -1
- package/esm/_internal/slideshow.js +0 -1
- package/esm/_internal/slideshow.js.map +1 -1
- package/package.json +4 -4
- package/src/components/slideshow/Slides.tsx +5 -22
- package/src/components/slideshow/Slideshow.tsx +4 -9
- package/src/components/slideshow/SlideshowControls.stories.tsx +4 -10
- package/src/components/slideshow/SlideshowItem.tsx +2 -13
- package/src/components/slideshow/__snapshots__/Slideshow.test.tsx.snap +1 -3
- package/src/hooks/useSlideshowControls.ts +31 -18
- package/types.d.ts +4 -8
package/esm/_internal/Slides.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { d as _slicedToArray, _ as _objectSpread2, b as _objectWithoutProperties, c as _extends, a as _defineProperty } from './_rollupPluginBabelHelpers.js';
|
|
2
2
|
import { Theme, Emphasis } from './components.js';
|
|
3
3
|
import React, { useRef, useEffect, useState, useCallback, useMemo, forwardRef } from 'react';
|
|
4
|
-
import { g as getRootClassName, c as classnames, h as handleBasicClasses,
|
|
4
|
+
import { g as getRootClassName, c as classnames, h as handleBasicClasses, e as detectHorizontalSwipe } from './getRootClassName.js';
|
|
5
5
|
import { g as mdiChevronLeft, p as mdiPauseCircleOutline, q as mdiPlayCircleOutline, f as mdiChevronRight } from './Icon2.js';
|
|
6
6
|
import { W as WINDOW } from './constants.js';
|
|
7
7
|
import { m as mergeRefs } from './mergeRefs.js';
|
|
8
8
|
import { I as IconButton } from './IconButton.js';
|
|
9
9
|
import isFunction from 'lodash/isFunction';
|
|
10
10
|
import range from 'lodash/range';
|
|
11
|
-
import { u as useDelayedVisibility } from './useDelayedVisibility.js';
|
|
12
11
|
import uniqueId from 'lodash/uniqueId';
|
|
13
12
|
|
|
14
13
|
/**
|
|
@@ -149,10 +148,20 @@ var useSlideshowControls = function useSlideshowControls(_ref) {
|
|
|
149
148
|
if (currentIndex > slidesCount - 1) {
|
|
150
149
|
setCurrentIndex(defaultActiveIndex);
|
|
151
150
|
}
|
|
152
|
-
}, [currentIndex, slidesCount, defaultActiveIndex]);
|
|
151
|
+
}, [currentIndex, slidesCount, defaultActiveIndex]);
|
|
153
152
|
|
|
154
|
-
var
|
|
153
|
+
var startAutoPlay = function startAutoPlay() {
|
|
154
|
+
setIsAutoPlaying(Boolean(autoPlay));
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
var stopAutoPlay = function stopAutoPlay() {
|
|
155
158
|
setIsAutoPlaying(false);
|
|
159
|
+
}; // Handle click on a bullet to go to a specific slide.
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
var onPaginationClick = useCallback(function (index) {
|
|
163
|
+
stopAutoPlay();
|
|
164
|
+
setIsForcePaused(true);
|
|
156
165
|
|
|
157
166
|
if (index >= 0 && index < slidesCount) {
|
|
158
167
|
setCurrentIndex(index);
|
|
@@ -161,13 +170,15 @@ var useSlideshowControls = function useSlideshowControls(_ref) {
|
|
|
161
170
|
|
|
162
171
|
var onNextClick = useCallback(function () {
|
|
163
172
|
var loopback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
164
|
-
|
|
173
|
+
stopAutoPlay();
|
|
174
|
+
setIsForcePaused(true);
|
|
165
175
|
goToNextSlide(loopback);
|
|
166
176
|
}, [goToNextSlide]); // Handle click or keyboard event to go to previous slide.
|
|
167
177
|
|
|
168
178
|
var onPreviousClick = useCallback(function () {
|
|
169
179
|
var loopback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
170
|
-
|
|
180
|
+
stopAutoPlay();
|
|
181
|
+
setIsForcePaused(true);
|
|
171
182
|
goToPreviousSlide(loopback);
|
|
172
183
|
}, [goToPreviousSlide]); // If the activeIndex props changes, update the current slide
|
|
173
184
|
|
|
@@ -186,21 +197,22 @@ var useSlideshowControls = function useSlideshowControls(_ref) {
|
|
|
186
197
|
return slidesId || uniqueId('slideshow-slides');
|
|
187
198
|
}, [slidesId]);
|
|
188
199
|
|
|
189
|
-
var
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
200
|
+
var toggleAutoPlay = function toggleAutoPlay() {
|
|
201
|
+
if (isSlideshowAutoPlaying) {
|
|
202
|
+
stopAutoPlay();
|
|
203
|
+
} else {
|
|
204
|
+
startAutoPlay();
|
|
205
|
+
}
|
|
195
206
|
};
|
|
196
207
|
|
|
197
|
-
var
|
|
198
|
-
|
|
208
|
+
var toggleForcePause = function toggleForcePause() {
|
|
209
|
+
var shouldBePaused = !isForcePaused;
|
|
210
|
+
setIsForcePaused(shouldBePaused);
|
|
199
211
|
|
|
200
|
-
if (
|
|
201
|
-
stopAutoPlay();
|
|
202
|
-
} else {
|
|
212
|
+
if (!shouldBePaused) {
|
|
203
213
|
startAutoPlay();
|
|
214
|
+
} else {
|
|
215
|
+
stopAutoPlay();
|
|
204
216
|
}
|
|
205
217
|
}; // Start index and end index of visible slides.
|
|
206
218
|
|
|
@@ -218,14 +230,14 @@ var useSlideshowControls = function useSlideshowControls(_ref) {
|
|
|
218
230
|
onNextClick: onNextClick,
|
|
219
231
|
onPaginationClick: onPaginationClick,
|
|
220
232
|
isAutoPlaying: isSlideshowAutoPlaying,
|
|
221
|
-
|
|
233
|
+
toggleAutoPlay: toggleAutoPlay,
|
|
222
234
|
activeIndex: currentIndex,
|
|
223
235
|
slidesCount: slidesCount,
|
|
224
236
|
setActiveIndex: setCurrentIndex,
|
|
225
237
|
startAutoPlay: startAutoPlay,
|
|
226
238
|
stopAutoPlay: stopAutoPlay,
|
|
227
239
|
isForcePaused: isForcePaused,
|
|
228
|
-
|
|
240
|
+
toggleForcePause: toggleForcePause
|
|
229
241
|
};
|
|
230
242
|
};
|
|
231
243
|
|
|
@@ -306,9 +318,6 @@ var Slideshow = forwardRef(function (props, ref) {
|
|
|
306
318
|
setSlideshow = _SlideshowControls$us.setSlideshow,
|
|
307
319
|
isAutoPlaying = _SlideshowControls$us.isAutoPlaying,
|
|
308
320
|
slideshowSlidesId = _SlideshowControls$us.slideshowSlidesId,
|
|
309
|
-
setIsAutoPlaying = _SlideshowControls$us.setIsAutoPlaying,
|
|
310
|
-
startIndexVisible = _SlideshowControls$us.startIndexVisible,
|
|
311
|
-
endIndexVisible = _SlideshowControls$us.endIndexVisible,
|
|
312
321
|
slidesCount = _SlideshowControls$us.slidesCount,
|
|
313
322
|
onNextClick = _SlideshowControls$us.onNextClick,
|
|
314
323
|
onPaginationClick = _SlideshowControls$us.onPaginationClick,
|
|
@@ -316,8 +325,8 @@ var Slideshow = forwardRef(function (props, ref) {
|
|
|
316
325
|
slideshow = _SlideshowControls$us.slideshow,
|
|
317
326
|
stopAutoPlay = _SlideshowControls$us.stopAutoPlay,
|
|
318
327
|
startAutoPlay = _SlideshowControls$us.startAutoPlay,
|
|
319
|
-
|
|
320
|
-
|
|
328
|
+
toggleAutoPlay = _SlideshowControls$us.toggleAutoPlay,
|
|
329
|
+
toggleForcePause = _SlideshowControls$us.toggleForcePause;
|
|
321
330
|
|
|
322
331
|
useFocusWithin({
|
|
323
332
|
element: slideshow,
|
|
@@ -334,9 +343,7 @@ var Slideshow = forwardRef(function (props, ref) {
|
|
|
334
343
|
isAutoPlaying: isAutoPlaying,
|
|
335
344
|
autoPlay: autoPlay,
|
|
336
345
|
slidesId: slideshowSlidesId,
|
|
337
|
-
|
|
338
|
-
startIndexVisible: startIndexVisible,
|
|
339
|
-
endIndexVisible: endIndexVisible,
|
|
346
|
+
toggleAutoPlay: toggleAutoPlay,
|
|
340
347
|
interval: interval,
|
|
341
348
|
ref: mergeRefs(ref, setSlideshow),
|
|
342
349
|
afterSlides: slideshowControlsProps && slidesCount > 1 ? React.createElement("div", {
|
|
@@ -358,9 +365,7 @@ var Slideshow = forwardRef(function (props, ref) {
|
|
|
358
365
|
}, slideshowControlsProps.previousButtonProps),
|
|
359
366
|
playButtonProps: autoPlay ? _objectSpread2({
|
|
360
367
|
'aria-controls': slideshowSlidesId,
|
|
361
|
-
onClick:
|
|
362
|
-
return setIsForcePaused(!isForcePaused);
|
|
363
|
-
}
|
|
368
|
+
onClick: toggleForcePause
|
|
364
369
|
}, slideshowControlsProps.playButtonProps) : undefined
|
|
365
370
|
}))) : undefined
|
|
366
371
|
}, forwardedProps), children);
|
|
@@ -392,18 +397,8 @@ var CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
|
392
397
|
var SlideshowItem = forwardRef(function (props, ref) {
|
|
393
398
|
var className = props.className,
|
|
394
399
|
children = props.children,
|
|
395
|
-
|
|
396
|
-
isCurrentlyVisible = _props$isCurrentlyVis === void 0 ? false : _props$isCurrentlyVis,
|
|
397
|
-
forwardedProps = _objectWithoutProperties(props, ["className", "children", "isCurrentlyVisible"]);
|
|
398
|
-
|
|
399
|
-
var _useState = useState(isCurrentlyVisible),
|
|
400
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
401
|
-
isVisible = _useState2[0],
|
|
402
|
-
setIsVisible = _useState2[1];
|
|
400
|
+
forwardedProps = _objectWithoutProperties(props, ["className", "children"]);
|
|
403
401
|
|
|
404
|
-
useDelayedVisibility(isCurrentlyVisible, SLIDESHOW_TRANSITION_DURATION, function (isNowVisible) {
|
|
405
|
-
setIsVisible(isNowVisible);
|
|
406
|
-
});
|
|
407
402
|
return React.createElement("div", _extends({
|
|
408
403
|
ref: ref,
|
|
409
404
|
className: classnames(className, handleBasicClasses({
|
|
@@ -411,12 +406,7 @@ var SlideshowItem = forwardRef(function (props, ref) {
|
|
|
411
406
|
})),
|
|
412
407
|
"aria-roledescription": "slide",
|
|
413
408
|
role: "group"
|
|
414
|
-
}, forwardedProps,
|
|
415
|
-
style: !isVisible ? _objectSpread2({
|
|
416
|
-
visibility: 'hidden'
|
|
417
|
-
}, forwardedProps.style || {}) : forwardedProps.style || {},
|
|
418
|
-
"aria-hidden": !isVisible
|
|
419
|
-
}), children);
|
|
409
|
+
}, forwardedProps), children);
|
|
420
410
|
});
|
|
421
411
|
SlideshowItem.displayName = COMPONENT_NAME;
|
|
422
412
|
SlideshowItem.className = CLASSNAME;
|
|
@@ -669,14 +659,11 @@ var Slides = forwardRef(function (props, ref) {
|
|
|
669
659
|
fillHeight = props.fillHeight,
|
|
670
660
|
groupBy = props.groupBy,
|
|
671
661
|
isAutoPlaying = props.isAutoPlaying,
|
|
672
|
-
|
|
662
|
+
toggleAutoPlay = props.toggleAutoPlay,
|
|
673
663
|
slidesId = props.slidesId,
|
|
674
|
-
setIsAutoPlaying = props.setIsAutoPlaying,
|
|
675
|
-
startIndexVisible = props.startIndexVisible,
|
|
676
|
-
endIndexVisible = props.endIndexVisible,
|
|
677
664
|
children = props.children,
|
|
678
665
|
afterSlides = props.afterSlides,
|
|
679
|
-
forwardedProps = _objectWithoutProperties(props, ["activeIndex", "id", "className", "theme", "fillHeight", "groupBy", "isAutoPlaying", "
|
|
666
|
+
forwardedProps = _objectWithoutProperties(props, ["activeIndex", "id", "className", "theme", "fillHeight", "groupBy", "isAutoPlaying", "toggleAutoPlay", "slidesId", "children", "afterSlides"]); // Inline style of wrapper element.
|
|
680
667
|
|
|
681
668
|
|
|
682
669
|
var wrapperStyle = {
|
|
@@ -694,26 +681,13 @@ var Slides = forwardRef(function (props, ref) {
|
|
|
694
681
|
}), React.createElement("div", {
|
|
695
682
|
id: slidesId,
|
|
696
683
|
className: "".concat(CLASSNAME$2, "__slides"),
|
|
697
|
-
onMouseEnter:
|
|
698
|
-
|
|
699
|
-
},
|
|
700
|
-
onMouseLeave: function onMouseLeave() {
|
|
701
|
-
return setIsAutoPlaying(Boolean(autoPlay));
|
|
702
|
-
},
|
|
684
|
+
onMouseEnter: toggleAutoPlay,
|
|
685
|
+
onMouseLeave: toggleAutoPlay,
|
|
703
686
|
"aria-live": isAutoPlaying ? 'off' : 'polite'
|
|
704
687
|
}, React.createElement("div", {
|
|
705
688
|
className: "".concat(CLASSNAME$2, "__wrapper"),
|
|
706
689
|
style: wrapperStyle
|
|
707
|
-
},
|
|
708
|
-
if (React.isValidElement(child)) {
|
|
709
|
-
var isCurrentlyVisible = index >= startIndexVisible && index < endIndexVisible;
|
|
710
|
-
return React.cloneElement(child, {
|
|
711
|
-
isCurrentlyVisible: isCurrentlyVisible
|
|
712
|
-
});
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
return null;
|
|
716
|
-
}))), afterSlides);
|
|
690
|
+
}, children)), afterSlides);
|
|
717
691
|
});
|
|
718
692
|
Slides.displayName = COMPONENT_NAME$2;
|
|
719
693
|
Slides.className = CLASSNAME$2;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slides.js","sources":["../../../src/hooks/useInterval.tsx","../../../src/components/slideshow/constants.ts","../../../src/hooks/useSlideshowControls.ts","../../../src/hooks/useFocusWithin.ts","../../../src/components/slideshow/Slideshow.tsx","../../../src/components/slideshow/SlideshowItem.tsx","../../../src/components/slideshow/useSwipeNavigate.ts","../../../src/components/slideshow/useKeyNavigate.ts","../../../src/components/slideshow/usePaginationVisibleRange.ts","../../../src/components/slideshow/SlideshowControls.tsx","../../../src/components/slideshow/Slides.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport isFunction from 'lodash/isFunction';\nimport { Callback } from '../utils';\n\n/**\n * Making setInterval Declarative with React Hooks.\n * Credits: https://overreacted.io/making-setinterval-declarative-with-react-hooks/\n *\n * @param callback Function called by setInterval.\n * @param delay Delay for setInterval.\n */\nexport function useInterval(callback: Callback, delay: number | null): void {\n const savedCallback = useRef<Callback>();\n\n useEffect(() => {\n savedCallback.current = callback;\n });\n\n useEffect(() => {\n if (delay === null) return undefined;\n\n function tick() {\n if (isFunction(savedCallback.current)) {\n savedCallback.current();\n }\n }\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }, [delay]);\n}\n","/**\n * Autoplay default interval in ms.\n */\nexport const AUTOPLAY_DEFAULT_INTERVAL = 5000;\n\n/**\n * Full width size in percent.\n */\nexport const FULL_WIDTH_PERCENT = 100;\n\n/**\n * Edge from the active index.\n */\nexport const EDGE_FROM_ACTIVE_INDEX = 2;\n\n/**\n * Max number of pagination items.\n */\nexport const PAGINATION_ITEMS_MAX = 5;\n\n/**\n * Size of a pagination item. Used to translate wrapper.\n */\nexport const PAGINATION_ITEM_SIZE = 12;\n","import { useState, useCallback, useEffect, useMemo } from 'react';\n\nimport { useInterval } from '@lumx/react/hooks/useInterval';\nimport uniqueId from 'lodash/uniqueId';\nimport { AUTOPLAY_DEFAULT_INTERVAL } from '@lumx/react/components/slideshow/constants';\n\nexport interface UseSlideshowControlsOptions {\n /** default active index to be displayed */\n defaultActiveIndex?: number;\n /** total slides to display */\n itemsCount: number;\n /** Index of the current slide. */\n activeIndex?: number;\n /** Whether the automatic rotation of the slideshow is enabled or not. */\n autoPlay?: boolean;\n /** Whether the image has to fill its container height or not. */\n fillHeight?: boolean;\n /** Number of slides to group together. */\n groupBy?: number;\n /** Interval between each slide when automatic rotation is enabled. */\n interval?: number;\n /** Callback when slide changes */\n onChange?(index: number): void;\n /** slideshow HTML id attribute */\n id?: string;\n /** slides wrapper HTML id attribute */\n slidesId?: string;\n}\n\nexport interface UseSlideshowControls {\n /** Index for the first visible slide, should be used when groupBy is passed in */\n startIndexVisible: number;\n /** Index for the last visible slide, should be used when groupBy is passed in */\n endIndexVisible: number;\n /** total slides to be displayed */\n slidesCount: number;\n /** callback to set */\n setSlideshow: (element: HTMLDivElement | null) => void;\n /** reference to the slideshow element */\n slideshow: HTMLDivElement | null;\n /** id to be used for the slideshow */\n slideshowId: string;\n /** id to be used for the wrapper that contains the slides */\n slideshowSlidesId: string;\n /** callback that triggers the previous slide while using the slideshow controls */\n onPreviousClick: (loopback: boolean) => void;\n /** callback that triggers the next slide while using the slideshow controls */\n onNextClick: (loopback: boolean) => void;\n /** callback that triggers a specific page while using the slideshow controls */\n onPaginationClick: (index: number) => void;\n /** whether the slideshow is autoplaying or not */\n isAutoPlaying: boolean;\n /** whether the slideshow was force paused or not */\n isForcePaused: boolean;\n /** callback to enable/disable the force pause feature */\n setIsForcePaused: (isForcePaused: boolean) => void;\n /** callback to change whether the slideshow is autoplaying or not */\n setIsAutoPlaying: (isAutoPlaying: boolean) => void;\n /** current active slide index */\n activeIndex: number;\n /** set the current index as the active one */\n setActiveIndex: (index: number) => void;\n /** callback that stops the auto play */\n stopAutoPlay: () => void;\n /** callback that starts the auto play */\n startAutoPlay: () => void;\n}\n\nexport const DEFAULT_OPTIONS: Partial<UseSlideshowControlsOptions> = {\n activeIndex: 0,\n groupBy: 1,\n interval: AUTOPLAY_DEFAULT_INTERVAL,\n};\n\nexport const useSlideshowControls = ({\n activeIndex = DEFAULT_OPTIONS.activeIndex,\n groupBy = DEFAULT_OPTIONS.groupBy,\n interval = DEFAULT_OPTIONS.interval,\n autoPlay,\n defaultActiveIndex,\n onChange,\n itemsCount,\n id,\n slidesId,\n}: UseSlideshowControlsOptions): UseSlideshowControls => {\n const [currentIndex, setCurrentIndex] = useState(activeIndex as number);\n // Use state instead of a ref to make the slideshow controls update directly when the element is set.\n const [element, setElement] = useState<HTMLDivElement | null>(null);\n\n // Number of slides when using groupBy prop.\n const slidesCount = Math.ceil(itemsCount / Math.min(groupBy as number, itemsCount));\n\n // Change current index to display next slide.\n const goToNextSlide = useCallback(\n (loopback = true) => {\n setCurrentIndex((index) => {\n if (loopback && index === slidesCount - 1) {\n // Loopback to the start.\n return 0;\n }\n if (index < slidesCount - 1) {\n // Next slide.\n return index + 1;\n }\n return index;\n });\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Change current index to display previous slide.\n const goToPreviousSlide = useCallback(\n (loopback = true) => {\n setCurrentIndex((index) => {\n if (loopback && index === 0) {\n // Loopback to the end.\n return slidesCount - 1;\n }\n if (index > 0) {\n // Previous slide.\n return index - 1;\n }\n return index;\n });\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Auto play\n const [isAutoPlaying, setIsAutoPlaying] = useState(Boolean(autoPlay));\n const [isForcePaused, setIsForcePaused] = useState(false);\n\n const isSlideshowAutoPlaying = isForcePaused ? false : isAutoPlaying;\n // Start\n useInterval(goToNextSlide, isSlideshowAutoPlaying && slidesCount > 1 ? (interval as number) : null);\n\n // Reset current index if it become invalid.\n useEffect(() => {\n if (currentIndex > slidesCount - 1) {\n setCurrentIndex(defaultActiveIndex as number);\n }\n }, [currentIndex, slidesCount, defaultActiveIndex]);\n\n // Handle click on a bullet to go to a specific slide.\n const onPaginationClick = useCallback(\n (index: number) => {\n setIsAutoPlaying(false);\n\n if (index >= 0 && index < slidesCount) {\n setCurrentIndex(index);\n }\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Handle click or keyboard event to go to next slide.\n const onNextClick = useCallback(\n (loopback = true) => {\n setIsAutoPlaying(false);\n goToNextSlide(loopback);\n },\n [goToNextSlide],\n );\n\n // Handle click or keyboard event to go to previous slide.\n const onPreviousClick = useCallback(\n (loopback = true) => {\n setIsAutoPlaying(false);\n goToPreviousSlide(loopback);\n },\n [goToPreviousSlide],\n );\n\n // If the activeIndex props changes, update the current slide\n useEffect(() => {\n setCurrentIndex(activeIndex as number);\n }, [activeIndex]);\n\n // If the slide changes, with autoplay for example, trigger \"onChange\"\n useEffect(() => {\n if (!onChange) return;\n onChange(currentIndex);\n }, [currentIndex, onChange]);\n\n const slideshowId = useMemo(() => id || uniqueId('slideshow'), [id]);\n const slideshowSlidesId = useMemo(() => slidesId || uniqueId('slideshow-slides'), [slidesId]);\n\n const startAutoPlay = () => {\n setIsAutoPlaying(Boolean(autoPlay));\n };\n\n const stopAutoPlay = () => {\n setIsAutoPlaying(false);\n };\n\n const forcePause = (isPaused: boolean) => {\n setIsForcePaused(isPaused);\n\n if (isPaused) {\n stopAutoPlay();\n } else {\n startAutoPlay();\n }\n };\n\n // Start index and end index of visible slides.\n const startIndexVisible = currentIndex * (groupBy as number);\n const endIndexVisible = startIndexVisible + (groupBy as number);\n\n return {\n startIndexVisible,\n endIndexVisible,\n setSlideshow: setElement,\n slideshow: element,\n slideshowId,\n slideshowSlidesId,\n onPreviousClick,\n onNextClick,\n onPaginationClick,\n isAutoPlaying: isSlideshowAutoPlaying,\n setIsAutoPlaying,\n activeIndex: currentIndex,\n slidesCount,\n setActiveIndex: setCurrentIndex,\n startAutoPlay,\n stopAutoPlay,\n isForcePaused,\n setIsForcePaused: forcePause,\n };\n};\n","import { useEffect } from 'react';\n\nexport interface UseFocusWithinOptions {\n /** element to add the focus within to */\n element: HTMLElement | null;\n /** callback to be executed on focus in */\n onFocusIn: (ev: FocusEvent) => void;\n /** callback to be executed on focus out */\n onFocusOut: (ev: FocusEvent) => void;\n}\n\n/**\n * Hook that allows to control when there is a focus event within a given element, meaning\n * that any element within the given target will trigger the focus in and focus out events.\n * @param options - UseFocusWithinOptions\n */\nexport const useFocusWithin = ({ element, onFocusIn, onFocusOut }: UseFocusWithinOptions) => {\n useEffect(() => {\n if (element) {\n element.addEventListener('focusin', onFocusIn);\n\n element.addEventListener('focusout', onFocusOut);\n }\n\n return () => {\n if (element) {\n element.removeEventListener('focusin', onFocusIn);\n\n element.removeEventListener('focusout', onFocusOut);\n }\n };\n }, [onFocusIn, element, onFocusOut]);\n};\n","import React, { forwardRef } from 'react';\n\nimport { SlideshowControls, SlideshowControlsProps, Theme, Slides, SlidesProps } from '@lumx/react';\nimport { DEFAULT_OPTIONS } from '@lumx/react/hooks/useSlideshowControls';\nimport { Comp, GenericProps } from '@lumx/react/utils';\nimport { useFocusWithin } from '@lumx/react/hooks/useFocusWithin';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowProps\n extends GenericProps,\n Pick<SlidesProps, 'autoPlay' | 'slidesId' | 'id' | 'theme' | 'fillHeight' | 'groupBy'> {\n /** current slide active */\n activeIndex?: SlidesProps['activeIndex'];\n /** Interval between each slide when automatic rotation is enabled. */\n interval?: number;\n /** Props to pass to the slideshow controls (minus those already set by the Slideshow props). */\n slideshowControlsProps?: Pick<SlideshowControlsProps, 'nextButtonProps' | 'previousButtonProps'> &\n Omit<\n SlideshowControlsProps,\n | 'activeIndex'\n | 'onPaginationClick'\n | 'onNextClick'\n | 'onPreviousClick'\n | 'slidesCount'\n | 'parentRef'\n | 'theme'\n >;\n /** Callback when slide changes */\n onChange?(index: number): void;\n}\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowProps> = {\n ...DEFAULT_OPTIONS,\n theme: Theme.light,\n};\n\n/**\n * Slideshow component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n autoPlay,\n children,\n className,\n fillHeight,\n groupBy,\n interval,\n onChange,\n slideshowControlsProps,\n theme,\n id,\n slidesId,\n ...forwardedProps\n } = props;\n // Number of slideshow items.\n const itemsCount = React.Children.count(children);\n\n const {\n activeIndex: currentIndex,\n slideshowId,\n setSlideshow,\n isAutoPlaying,\n slideshowSlidesId,\n setIsAutoPlaying,\n startIndexVisible,\n endIndexVisible,\n slidesCount,\n onNextClick,\n onPaginationClick,\n onPreviousClick,\n slideshow,\n stopAutoPlay,\n startAutoPlay,\n isForcePaused,\n setIsForcePaused,\n } = SlideshowControls.useSlideshowControls({\n activeIndex,\n defaultActiveIndex: DEFAULT_PROPS.activeIndex as number,\n autoPlay: Boolean(autoPlay),\n itemsCount,\n groupBy,\n id,\n interval,\n onChange,\n slidesId,\n });\n\n useFocusWithin({\n element: slideshow,\n onFocusIn: stopAutoPlay,\n onFocusOut: startAutoPlay,\n });\n\n return (\n <Slides\n activeIndex={currentIndex}\n id={slideshowId}\n className={className}\n theme={theme}\n fillHeight={fillHeight}\n groupBy={groupBy}\n isAutoPlaying={isAutoPlaying}\n autoPlay={autoPlay}\n slidesId={slideshowSlidesId}\n setIsAutoPlaying={setIsAutoPlaying}\n startIndexVisible={startIndexVisible}\n endIndexVisible={endIndexVisible}\n interval={interval}\n ref={mergeRefs(ref, setSlideshow)}\n afterSlides={\n slideshowControlsProps && slidesCount > 1 ? (\n <div className={`${Slides.className}__controls`}>\n <SlideshowControls\n {...slideshowControlsProps}\n activeIndex={currentIndex}\n onPaginationClick={onPaginationClick}\n onNextClick={onNextClick}\n onPreviousClick={onPreviousClick}\n slidesCount={slidesCount}\n parentRef={slideshow}\n theme={theme}\n isAutoPlaying={isAutoPlaying}\n nextButtonProps={{\n 'aria-controls': slideshowSlidesId,\n ...slideshowControlsProps.nextButtonProps,\n }}\n previousButtonProps={{\n 'aria-controls': slideshowSlidesId,\n ...slideshowControlsProps.previousButtonProps,\n }}\n playButtonProps={\n autoPlay\n ? {\n 'aria-controls': slideshowSlidesId,\n onClick: () => setIsForcePaused(!isForcePaused),\n ...slideshowControlsProps.playButtonProps,\n }\n : undefined\n }\n />\n </div>\n ) : undefined\n }\n {...forwardedProps}\n >\n {children}\n </Slides>\n );\n});\n\nSlideshow.displayName = 'Slideshow';\nSlideshow.defaultProps = DEFAULT_PROPS;\n","import React, { forwardRef, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\nimport { useDelayedVisibility } from '@lumx/react/hooks/useDelayedVisibility';\n\nimport { SLIDESHOW_TRANSITION_DURATION } from '@lumx/core/js/constants';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowItemProps extends GenericProps {\n /** whether the slideshow item is currently visible */\n isCurrentlyVisible?: boolean;\n /** interval in which slides are automatically shown */\n interval?: number;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowItem';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * SlideshowItem component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowItem: Comp<SlideshowItemProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { className, children, isCurrentlyVisible = false, ...forwardedProps } = props;\n const [isVisible, setIsVisible] = useState<boolean>(isCurrentlyVisible);\n\n useDelayedVisibility(isCurrentlyVisible, SLIDESHOW_TRANSITION_DURATION, (isNowVisible) => {\n setIsVisible(isNowVisible);\n });\n\n return (\n <div\n ref={ref}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n }),\n )}\n aria-roledescription=\"slide\"\n role=\"group\"\n {...forwardedProps}\n style={!isVisible ? { visibility: 'hidden', ...(forwardedProps.style || {}) } : forwardedProps.style || {}}\n aria-hidden={!isVisible}\n >\n {children}\n </div>\n );\n});\n\nSlideshowItem.displayName = COMPONENT_NAME;\nSlideshowItem.className = CLASSNAME;\n","import { useEffect } from 'react';\nimport { detectHorizontalSwipe } from '@lumx/core/js/utils';\n\nconst isTouchDevice = () => 'ontouchstart' in window;\n\n/**\n * Listen swipe to navigate left and right.\n */\nexport function useSwipeNavigate(element?: HTMLElement | null, onNext?: () => void, onPrevious?: () => void): void {\n useEffect(() => {\n if (!element || !isTouchDevice()) return undefined;\n\n return detectHorizontalSwipe(element, (swipe) => {\n const callback = swipe === 'right' ? onPrevious : onNext;\n callback?.();\n });\n }, [onPrevious, onNext, element]);\n}\n","import { useEffect } from 'react';\n\n/**\n * Listen keyboard to navigate left and right.\n */\nexport function useKeyNavigate(element?: HTMLElement | null, onNext?: () => void, onPrevious?: () => void): void {\n useEffect(() => {\n if (!element) return undefined;\n const onKeyNavigate = (evt: KeyboardEvent) => {\n let callback;\n if (evt?.key === 'ArrowRight') {\n callback = onNext;\n } else if (evt?.key === 'ArrowLeft') {\n callback = onPrevious;\n }\n if (!callback) return;\n\n callback();\n evt.preventDefault();\n evt.stopPropagation();\n };\n\n element.addEventListener('keydown', onKeyNavigate);\n return () => {\n element.removeEventListener('keydown', onKeyNavigate);\n };\n }, [onPrevious, onNext, element]);\n}\n","import { useMemo, useRef } from 'react';\nimport { EDGE_FROM_ACTIVE_INDEX, PAGINATION_ITEMS_MAX } from '@lumx/react/components/slideshow/constants';\n\ntype Range = { min: number; max: number };\n\n/**\n * Calculate the currently visible pagination \"bullet\" range.\n */\nexport function usePaginationVisibleRange(activeIndex: number, slideCount: number): Range {\n const previousVisibleRangeRef = useRef<Range>();\n return useMemo(() => {\n const lastSlide = slideCount - 1;\n const { current: previousVisibleRange } = previousVisibleRangeRef;\n let newVisibleRange: Range;\n if (activeIndex === previousVisibleRange?.max && activeIndex < lastSlide) {\n newVisibleRange = { min: previousVisibleRange.min + 1, max: previousVisibleRange.max + 1 };\n } else if (activeIndex === previousVisibleRange?.min && activeIndex > 0) {\n newVisibleRange = { min: previousVisibleRange.min - 1, max: previousVisibleRange.max - 1 };\n } else {\n const deltaItems = PAGINATION_ITEMS_MAX - 1;\n let min = activeIndex - EDGE_FROM_ACTIVE_INDEX;\n let max = activeIndex + EDGE_FROM_ACTIVE_INDEX;\n\n if (activeIndex > lastSlide - EDGE_FROM_ACTIVE_INDEX) {\n min = lastSlide - deltaItems;\n max = lastSlide;\n } else if (activeIndex < deltaItems) {\n min = 0;\n max = deltaItems;\n }\n\n newVisibleRange = { min, max };\n }\n previousVisibleRangeRef.current = newVisibleRange;\n return newVisibleRange;\n }, [activeIndex, slideCount]);\n}\n","import React, { forwardRef, RefObject, useCallback, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport range from 'lodash/range';\n\nimport { mdiChevronLeft, mdiChevronRight, mdiPlayCircleOutline, mdiPauseCircleOutline } from '@lumx/icons';\nimport { Emphasis, IconButton, IconButtonProps, Theme } from '@lumx/react';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { WINDOW } from '@lumx/react/constants';\nimport { useSlideshowControls, DEFAULT_OPTIONS } from '@lumx/react/hooks/useSlideshowControls';\n\nimport { useSwipeNavigate } from './useSwipeNavigate';\nimport { useKeyNavigate } from './useKeyNavigate';\nimport { PAGINATION_ITEM_SIZE, PAGINATION_ITEMS_MAX } from './constants';\nimport { usePaginationVisibleRange } from './usePaginationVisibleRange';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowControlsProps extends GenericProps {\n /** Index of the current slide. */\n activeIndex?: number;\n /** Props to pass to the next button (minus those already set by the SlideshowControls props). */\n nextButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Reference to the parent element on which we want to listen touch swipe. */\n parentRef?: RefObject<HTMLDivElement> | HTMLDivElement | null;\n /** Props to pass to the previous button (minus those already set by the SlideshowControls props). */\n previousButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Number of slides. */\n slidesCount: number;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** On next button click callback. */\n onNextClick?(loopback?: boolean): void;\n /** On pagination change callback. */\n onPaginationClick?(index: number): void;\n /** On previous button click callback. */\n onPreviousClick?(loopback?: boolean): void;\n /** whether the slideshow is currently playing */\n isAutoPlaying?: boolean;\n /** function to be executed in order to retrieve the label for the pagination item */\n paginationItemLabel?: (index: number) => string;\n /** Props to pass to the lay button (minus those already set by the SlideshowControls props). */\n playButtonProps?: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowControls';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowControlsProps> = {\n activeIndex: 0,\n theme: Theme.light,\n};\n\n/**\n * SlideshowControls component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nconst InternalSlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n className,\n nextButtonProps,\n onNextClick,\n onPaginationClick,\n onPreviousClick,\n parentRef,\n previousButtonProps,\n slidesCount,\n theme,\n isAutoPlaying = false,\n playButtonProps,\n paginationItemLabel,\n ...forwardedProps\n } = props;\n\n let parent;\n if (WINDOW) {\n // Checking window object to avoid errors in SSR.\n parent = parentRef instanceof HTMLElement ? parentRef : parentRef?.current;\n }\n // Listen to keyboard navigate left & right.\n useKeyNavigate(parent, onNextClick, onPreviousClick);\n // Listen to touch swipe navigate left & right.\n useSwipeNavigate(\n parent,\n // Go next without loopback.\n useCallback(() => onNextClick?.(false), [onNextClick]),\n // Go previous without loopback.\n useCallback(() => onPreviousClick?.(false), [onPreviousClick]),\n );\n\n // Pagination \"bullet\" range.\n const visibleRange = usePaginationVisibleRange(activeIndex as number, slidesCount);\n\n // Inline style of wrapper element.\n const wrapperStyle = { transform: `translateX(-${PAGINATION_ITEM_SIZE * visibleRange.min}px)` };\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--has-infinite-pagination`]: slidesCount > PAGINATION_ITEMS_MAX,\n })}\n >\n <IconButton\n {...previousButtonProps}\n icon={mdiChevronLeft}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onPreviousClick}\n />\n <div className={`${CLASSNAME}__pagination`}>\n <div className={`${CLASSNAME}__pagination-items`} style={wrapperStyle}>\n {useMemo(\n () =>\n range(slidesCount).map((index) => {\n const isOnEdge =\n index !== 0 &&\n index !== slidesCount - 1 &&\n (index === visibleRange.min || index === visibleRange.max);\n const isActive = activeIndex === index;\n const isOutRange = index < visibleRange.min || index > visibleRange.max;\n return (\n <button\n className={classNames(\n handleBasicClasses({\n prefix: `${CLASSNAME}__pagination-item`,\n isActive,\n isOnEdge,\n isOutRange,\n }),\n )}\n key={index}\n type=\"button\"\n onClick={() => onPaginationClick?.(index)}\n {...{\n 'aria-label': paginationItemLabel\n ? paginationItemLabel(index)\n : `${index + 1} / ${slidesCount}`,\n }}\n />\n );\n }),\n [\n slidesCount,\n visibleRange.min,\n visibleRange.max,\n activeIndex,\n paginationItemLabel,\n onPaginationClick,\n ],\n )}\n </div>\n </div>\n\n {playButtonProps ? (\n <IconButton\n {...playButtonProps}\n icon={isAutoPlaying ? mdiPauseCircleOutline : mdiPlayCircleOutline}\n className={`${CLASSNAME}__play`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n />\n ) : null}\n\n <IconButton\n {...nextButtonProps}\n icon={mdiChevronRight}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onNextClick}\n />\n </div>\n );\n});\n\nInternalSlideshowControls.displayName = COMPONENT_NAME;\nInternalSlideshowControls.className = CLASSNAME;\nInternalSlideshowControls.defaultProps = DEFAULT_PROPS;\n\nexport const SlideshowControls = Object.assign(InternalSlideshowControls, {\n useSlideshowControls,\n useSlideshowControlsDefaultOptions: DEFAULT_OPTIONS,\n});\n","import React, { CSSProperties, forwardRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { Theme } from '@lumx/react';\n\nexport interface SlidesProps extends GenericProps {\n /** current slide active */\n activeIndex: number;\n /** slides id to be added to the wrapper */\n id?: string;\n /** custom classname */\n className?: string;\n /** custom theme */\n theme?: Theme;\n /** Whether the automatic rotation of the slideshow is enabled or not. */\n autoPlay?: boolean;\n /** Whether the image has to fill its container height or not. */\n fillHeight?: boolean;\n /** Number of slides to group together. */\n groupBy?: number;\n /** whether the slides are currently playing or not */\n isAutoPlaying?: boolean;\n /** id to be passed in into the slides */\n slidesId?: string;\n /** callback to change whether the slideshow is playing or not */\n setIsAutoPlaying: (isAutoPlaying: boolean) => void;\n /** starting visible index */\n startIndexVisible: number;\n /** ending visible index */\n endIndexVisible: number;\n /** component to be rendered after the slides */\n afterSlides?: React.ReactNode;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Slideshow';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Slides component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Slides: Comp<SlidesProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n id,\n className,\n theme,\n fillHeight,\n groupBy,\n isAutoPlaying,\n autoPlay,\n slidesId,\n setIsAutoPlaying,\n startIndexVisible,\n endIndexVisible,\n children,\n afterSlides,\n ...forwardedProps\n } = props;\n // Inline style of wrapper element.\n const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * activeIndex}%)` };\n\n return (\n <section\n id={id}\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--fill-height`]: fillHeight,\n [`${CLASSNAME}--group-by-${groupBy}`]: Boolean(groupBy),\n })}\n aria-roledescription=\"carousel\"\n >\n <div\n id={slidesId}\n className={`${CLASSNAME}__slides`}\n onMouseEnter={() => setIsAutoPlaying(false)}\n onMouseLeave={() => setIsAutoPlaying(Boolean(autoPlay))}\n aria-live={isAutoPlaying ? 'off' : 'polite'}\n >\n <div className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>\n {React.Children.map(children, (child: React.ReactNode, index: number) => {\n if (React.isValidElement(child)) {\n const isCurrentlyVisible = index >= startIndexVisible && index < endIndexVisible;\n\n return React.cloneElement(child, {\n isCurrentlyVisible,\n });\n }\n\n return null;\n })}\n </div>\n </div>\n\n {afterSlides}\n </section>\n );\n});\n\nSlides.displayName = COMPONENT_NAME;\nSlides.className = CLASSNAME;\n"],"names":["useInterval","callback","delay","savedCallback","useRef","useEffect","current","undefined","tick","isFunction","id","setInterval","clearInterval","AUTOPLAY_DEFAULT_INTERVAL","FULL_WIDTH_PERCENT","EDGE_FROM_ACTIVE_INDEX","PAGINATION_ITEMS_MAX","PAGINATION_ITEM_SIZE","DEFAULT_OPTIONS","activeIndex","groupBy","interval","useSlideshowControls","autoPlay","defaultActiveIndex","onChange","itemsCount","slidesId","useState","currentIndex","setCurrentIndex","element","setElement","slidesCount","Math","ceil","min","goToNextSlide","useCallback","loopback","index","goToPreviousSlide","Boolean","isAutoPlaying","setIsAutoPlaying","isForcePaused","setIsForcePaused","isSlideshowAutoPlaying","onPaginationClick","onNextClick","onPreviousClick","slideshowId","useMemo","uniqueId","slideshowSlidesId","startAutoPlay","stopAutoPlay","forcePause","isPaused","startIndexVisible","endIndexVisible","setSlideshow","slideshow","setActiveIndex","useFocusWithin","onFocusIn","onFocusOut","addEventListener","removeEventListener","DEFAULT_PROPS","theme","Theme","light","Slideshow","forwardRef","props","ref","children","className","fillHeight","slideshowControlsProps","forwardedProps","React","Children","count","SlideshowControls","mergeRefs","Slides","nextButtonProps","previousButtonProps","onClick","playButtonProps","displayName","defaultProps","COMPONENT_NAME","CLASSNAME","getRootClassName","SlideshowItem","isCurrentlyVisible","isVisible","setIsVisible","useDelayedVisibility","SLIDESHOW_TRANSITION_DURATION","isNowVisible","classNames","handleBasicClasses","prefix","visibility","style","isTouchDevice","window","useSwipeNavigate","onNext","onPrevious","detectHorizontalSwipe","swipe","useKeyNavigate","onKeyNavigate","evt","key","preventDefault","stopPropagation","usePaginationVisibleRange","slideCount","previousVisibleRangeRef","lastSlide","previousVisibleRange","newVisibleRange","max","deltaItems","InternalSlideshowControls","parentRef","paginationItemLabel","parent","WINDOW","HTMLElement","visibleRange","wrapperStyle","transform","mdiChevronLeft","dark","Emphasis","low","range","map","isOnEdge","isActive","isOutRange","mdiPauseCircleOutline","mdiPlayCircleOutline","mdiChevronRight","Object","assign","useSlideshowControlsDefaultOptions","afterSlides","child","isValidElement","cloneElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Slides.js","sources":["../../../src/hooks/useInterval.tsx","../../../src/components/slideshow/constants.ts","../../../src/hooks/useSlideshowControls.ts","../../../src/hooks/useFocusWithin.ts","../../../src/components/slideshow/Slideshow.tsx","../../../src/components/slideshow/SlideshowItem.tsx","../../../src/components/slideshow/useSwipeNavigate.ts","../../../src/components/slideshow/useKeyNavigate.ts","../../../src/components/slideshow/usePaginationVisibleRange.ts","../../../src/components/slideshow/SlideshowControls.tsx","../../../src/components/slideshow/Slides.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport isFunction from 'lodash/isFunction';\nimport { Callback } from '../utils';\n\n/**\n * Making setInterval Declarative with React Hooks.\n * Credits: https://overreacted.io/making-setinterval-declarative-with-react-hooks/\n *\n * @param callback Function called by setInterval.\n * @param delay Delay for setInterval.\n */\nexport function useInterval(callback: Callback, delay: number | null): void {\n const savedCallback = useRef<Callback>();\n\n useEffect(() => {\n savedCallback.current = callback;\n });\n\n useEffect(() => {\n if (delay === null) return undefined;\n\n function tick() {\n if (isFunction(savedCallback.current)) {\n savedCallback.current();\n }\n }\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }, [delay]);\n}\n","/**\n * Autoplay default interval in ms.\n */\nexport const AUTOPLAY_DEFAULT_INTERVAL = 5000;\n\n/**\n * Full width size in percent.\n */\nexport const FULL_WIDTH_PERCENT = 100;\n\n/**\n * Edge from the active index.\n */\nexport const EDGE_FROM_ACTIVE_INDEX = 2;\n\n/**\n * Max number of pagination items.\n */\nexport const PAGINATION_ITEMS_MAX = 5;\n\n/**\n * Size of a pagination item. Used to translate wrapper.\n */\nexport const PAGINATION_ITEM_SIZE = 12;\n","import { useState, useCallback, useEffect, useMemo } from 'react';\n\nimport { useInterval } from '@lumx/react/hooks/useInterval';\nimport uniqueId from 'lodash/uniqueId';\nimport { AUTOPLAY_DEFAULT_INTERVAL } from '@lumx/react/components/slideshow/constants';\n\nexport interface UseSlideshowControlsOptions {\n /** default active index to be displayed */\n defaultActiveIndex?: number;\n /** total slides to display */\n itemsCount: number;\n /** Index of the current slide. */\n activeIndex?: number;\n /** Whether the automatic rotation of the slideshow is enabled or not. */\n autoPlay?: boolean;\n /** Whether the image has to fill its container height or not. */\n fillHeight?: boolean;\n /** Number of slides to group together. */\n groupBy?: number;\n /** Interval between each slide when automatic rotation is enabled. */\n interval?: number;\n /** Callback when slide changes */\n onChange?(index: number): void;\n /** slideshow HTML id attribute */\n id?: string;\n /** slides wrapper HTML id attribute */\n slidesId?: string;\n}\n\nexport interface UseSlideshowControls {\n /** Index for the first visible slide, should be used when groupBy is passed in */\n startIndexVisible: number;\n /** Index for the last visible slide, should be used when groupBy is passed in */\n endIndexVisible: number;\n /** total slides to be displayed */\n slidesCount: number;\n /** callback to set */\n setSlideshow: (element: HTMLDivElement | null) => void;\n /** reference to the slideshow element */\n slideshow: HTMLDivElement | null;\n /** id to be used for the slideshow */\n slideshowId: string;\n /** id to be used for the wrapper that contains the slides */\n slideshowSlidesId: string;\n /** callback that triggers the previous slide while using the slideshow controls */\n onPreviousClick: (loopback: boolean) => void;\n /** callback that triggers the next slide while using the slideshow controls */\n onNextClick: (loopback: boolean) => void;\n /** callback that triggers a specific page while using the slideshow controls */\n onPaginationClick: (index: number) => void;\n /** whether the slideshow is autoplaying or not */\n isAutoPlaying: boolean;\n /** whether the slideshow was force paused or not */\n isForcePaused: boolean;\n /** callback to change whether the slideshow is autoplaying or not */\n toggleAutoPlay: () => void;\n /** calback to change whether the slideshow should be force paused or not */\n toggleForcePause: () => void;\n /** current active slide index */\n activeIndex: number;\n /** set the current index as the active one */\n setActiveIndex: (index: number) => void;\n /** callback that stops the auto play */\n stopAutoPlay: () => void;\n /** callback that starts the auto play */\n startAutoPlay: () => void;\n}\n\nexport const DEFAULT_OPTIONS: Partial<UseSlideshowControlsOptions> = {\n activeIndex: 0,\n groupBy: 1,\n interval: AUTOPLAY_DEFAULT_INTERVAL,\n};\n\nexport const useSlideshowControls = ({\n activeIndex = DEFAULT_OPTIONS.activeIndex,\n groupBy = DEFAULT_OPTIONS.groupBy,\n interval = DEFAULT_OPTIONS.interval,\n autoPlay,\n defaultActiveIndex,\n onChange,\n itemsCount,\n id,\n slidesId,\n}: UseSlideshowControlsOptions): UseSlideshowControls => {\n const [currentIndex, setCurrentIndex] = useState(activeIndex as number);\n // Use state instead of a ref to make the slideshow controls update directly when the element is set.\n const [element, setElement] = useState<HTMLDivElement | null>(null);\n\n // Number of slides when using groupBy prop.\n const slidesCount = Math.ceil(itemsCount / Math.min(groupBy as number, itemsCount));\n\n // Change current index to display next slide.\n const goToNextSlide = useCallback(\n (loopback = true) => {\n setCurrentIndex((index) => {\n if (loopback && index === slidesCount - 1) {\n // Loopback to the start.\n return 0;\n }\n if (index < slidesCount - 1) {\n // Next slide.\n return index + 1;\n }\n return index;\n });\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Change current index to display previous slide.\n const goToPreviousSlide = useCallback(\n (loopback = true) => {\n setCurrentIndex((index) => {\n if (loopback && index === 0) {\n // Loopback to the end.\n return slidesCount - 1;\n }\n if (index > 0) {\n // Previous slide.\n return index - 1;\n }\n return index;\n });\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Auto play\n const [isAutoPlaying, setIsAutoPlaying] = useState(Boolean(autoPlay));\n const [isForcePaused, setIsForcePaused] = useState(false);\n\n const isSlideshowAutoPlaying = isForcePaused ? false : isAutoPlaying;\n // Start\n useInterval(goToNextSlide, isSlideshowAutoPlaying && slidesCount > 1 ? (interval as number) : null);\n\n // Reset current index if it become invalid.\n useEffect(() => {\n if (currentIndex > slidesCount - 1) {\n setCurrentIndex(defaultActiveIndex as number);\n }\n }, [currentIndex, slidesCount, defaultActiveIndex]);\n\n const startAutoPlay = () => {\n setIsAutoPlaying(Boolean(autoPlay));\n };\n\n const stopAutoPlay = () => {\n setIsAutoPlaying(false);\n };\n\n // Handle click on a bullet to go to a specific slide.\n const onPaginationClick = useCallback(\n (index: number) => {\n stopAutoPlay();\n setIsForcePaused(true);\n\n if (index >= 0 && index < slidesCount) {\n setCurrentIndex(index);\n }\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Handle click or keyboard event to go to next slide.\n const onNextClick = useCallback(\n (loopback = true) => {\n stopAutoPlay();\n setIsForcePaused(true);\n goToNextSlide(loopback);\n },\n [goToNextSlide],\n );\n\n // Handle click or keyboard event to go to previous slide.\n const onPreviousClick = useCallback(\n (loopback = true) => {\n stopAutoPlay();\n setIsForcePaused(true);\n goToPreviousSlide(loopback);\n },\n [goToPreviousSlide],\n );\n\n // If the activeIndex props changes, update the current slide\n useEffect(() => {\n setCurrentIndex(activeIndex as number);\n }, [activeIndex]);\n\n // If the slide changes, with autoplay for example, trigger \"onChange\"\n useEffect(() => {\n if (!onChange) return;\n onChange(currentIndex);\n }, [currentIndex, onChange]);\n\n const slideshowId = useMemo(() => id || uniqueId('slideshow'), [id]);\n const slideshowSlidesId = useMemo(() => slidesId || uniqueId('slideshow-slides'), [slidesId]);\n\n const toggleAutoPlay = () => {\n if (isSlideshowAutoPlaying) {\n stopAutoPlay();\n } else {\n startAutoPlay();\n }\n };\n\n const toggleForcePause = () => {\n const shouldBePaused = !isForcePaused;\n\n setIsForcePaused(shouldBePaused);\n\n if (!shouldBePaused) {\n startAutoPlay();\n } else {\n stopAutoPlay();\n }\n };\n\n // Start index and end index of visible slides.\n const startIndexVisible = currentIndex * (groupBy as number);\n const endIndexVisible = startIndexVisible + (groupBy as number);\n\n return {\n startIndexVisible,\n endIndexVisible,\n setSlideshow: setElement,\n slideshow: element,\n slideshowId,\n slideshowSlidesId,\n onPreviousClick,\n onNextClick,\n onPaginationClick,\n isAutoPlaying: isSlideshowAutoPlaying,\n toggleAutoPlay,\n activeIndex: currentIndex,\n slidesCount,\n setActiveIndex: setCurrentIndex,\n startAutoPlay,\n stopAutoPlay,\n isForcePaused,\n toggleForcePause,\n };\n};\n","import { useEffect } from 'react';\n\nexport interface UseFocusWithinOptions {\n /** element to add the focus within to */\n element: HTMLElement | null;\n /** callback to be executed on focus in */\n onFocusIn: (ev: FocusEvent) => void;\n /** callback to be executed on focus out */\n onFocusOut: (ev: FocusEvent) => void;\n}\n\n/**\n * Hook that allows to control when there is a focus event within a given element, meaning\n * that any element within the given target will trigger the focus in and focus out events.\n * @param options - UseFocusWithinOptions\n */\nexport const useFocusWithin = ({ element, onFocusIn, onFocusOut }: UseFocusWithinOptions) => {\n useEffect(() => {\n if (element) {\n element.addEventListener('focusin', onFocusIn);\n\n element.addEventListener('focusout', onFocusOut);\n }\n\n return () => {\n if (element) {\n element.removeEventListener('focusin', onFocusIn);\n\n element.removeEventListener('focusout', onFocusOut);\n }\n };\n }, [onFocusIn, element, onFocusOut]);\n};\n","import React, { forwardRef } from 'react';\n\nimport { SlideshowControls, SlideshowControlsProps, Theme, Slides, SlidesProps } from '@lumx/react';\nimport { DEFAULT_OPTIONS } from '@lumx/react/hooks/useSlideshowControls';\nimport { Comp, GenericProps } from '@lumx/react/utils';\nimport { useFocusWithin } from '@lumx/react/hooks/useFocusWithin';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowProps\n extends GenericProps,\n Pick<SlidesProps, 'autoPlay' | 'slidesId' | 'id' | 'theme' | 'fillHeight' | 'groupBy'> {\n /** current slide active */\n activeIndex?: SlidesProps['activeIndex'];\n /** Interval between each slide when automatic rotation is enabled. */\n interval?: number;\n /** Props to pass to the slideshow controls (minus those already set by the Slideshow props). */\n slideshowControlsProps?: Pick<SlideshowControlsProps, 'nextButtonProps' | 'previousButtonProps'> &\n Omit<\n SlideshowControlsProps,\n | 'activeIndex'\n | 'onPaginationClick'\n | 'onNextClick'\n | 'onPreviousClick'\n | 'slidesCount'\n | 'parentRef'\n | 'theme'\n >;\n /** Callback when slide changes */\n onChange?(index: number): void;\n}\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowProps> = {\n ...DEFAULT_OPTIONS,\n theme: Theme.light,\n};\n\n/**\n * Slideshow component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n autoPlay,\n children,\n className,\n fillHeight,\n groupBy,\n interval,\n onChange,\n slideshowControlsProps,\n theme,\n id,\n slidesId,\n ...forwardedProps\n } = props;\n // Number of slideshow items.\n const itemsCount = React.Children.count(children);\n\n const {\n activeIndex: currentIndex,\n slideshowId,\n setSlideshow,\n isAutoPlaying,\n slideshowSlidesId,\n slidesCount,\n onNextClick,\n onPaginationClick,\n onPreviousClick,\n slideshow,\n stopAutoPlay,\n startAutoPlay,\n toggleAutoPlay,\n toggleForcePause,\n } = SlideshowControls.useSlideshowControls({\n activeIndex,\n defaultActiveIndex: DEFAULT_PROPS.activeIndex as number,\n autoPlay: Boolean(autoPlay),\n itemsCount,\n groupBy,\n id,\n interval,\n onChange,\n slidesId,\n });\n\n useFocusWithin({\n element: slideshow,\n onFocusIn: stopAutoPlay,\n onFocusOut: startAutoPlay,\n });\n\n return (\n <Slides\n activeIndex={currentIndex}\n id={slideshowId}\n className={className}\n theme={theme}\n fillHeight={fillHeight}\n groupBy={groupBy}\n isAutoPlaying={isAutoPlaying}\n autoPlay={autoPlay}\n slidesId={slideshowSlidesId}\n toggleAutoPlay={toggleAutoPlay}\n interval={interval}\n ref={mergeRefs(ref, setSlideshow)}\n afterSlides={\n slideshowControlsProps && slidesCount > 1 ? (\n <div className={`${Slides.className}__controls`}>\n <SlideshowControls\n {...slideshowControlsProps}\n activeIndex={currentIndex}\n onPaginationClick={onPaginationClick}\n onNextClick={onNextClick}\n onPreviousClick={onPreviousClick}\n slidesCount={slidesCount}\n parentRef={slideshow}\n theme={theme}\n isAutoPlaying={isAutoPlaying}\n nextButtonProps={{\n 'aria-controls': slideshowSlidesId,\n ...slideshowControlsProps.nextButtonProps,\n }}\n previousButtonProps={{\n 'aria-controls': slideshowSlidesId,\n ...slideshowControlsProps.previousButtonProps,\n }}\n playButtonProps={\n autoPlay\n ? {\n 'aria-controls': slideshowSlidesId,\n onClick: toggleForcePause,\n ...slideshowControlsProps.playButtonProps,\n }\n : undefined\n }\n />\n </div>\n ) : undefined\n }\n {...forwardedProps}\n >\n {children}\n </Slides>\n );\n});\n\nSlideshow.displayName = 'Slideshow';\nSlideshow.defaultProps = DEFAULT_PROPS;\n","import React, { forwardRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowItemProps extends GenericProps {\n /** whether the slideshow item is currently visible */\n isCurrentlyVisible?: boolean;\n /** interval in which slides are automatically shown */\n interval?: number;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowItem';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * SlideshowItem component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowItem: Comp<SlideshowItemProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { className, children, ...forwardedProps } = props;\n\n return (\n <div\n ref={ref}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n }),\n )}\n aria-roledescription=\"slide\"\n role=\"group\"\n {...forwardedProps}\n >\n {children}\n </div>\n );\n});\n\nSlideshowItem.displayName = COMPONENT_NAME;\nSlideshowItem.className = CLASSNAME;\n","import { useEffect } from 'react';\nimport { detectHorizontalSwipe } from '@lumx/core/js/utils';\n\nconst isTouchDevice = () => 'ontouchstart' in window;\n\n/**\n * Listen swipe to navigate left and right.\n */\nexport function useSwipeNavigate(element?: HTMLElement | null, onNext?: () => void, onPrevious?: () => void): void {\n useEffect(() => {\n if (!element || !isTouchDevice()) return undefined;\n\n return detectHorizontalSwipe(element, (swipe) => {\n const callback = swipe === 'right' ? onPrevious : onNext;\n callback?.();\n });\n }, [onPrevious, onNext, element]);\n}\n","import { useEffect } from 'react';\n\n/**\n * Listen keyboard to navigate left and right.\n */\nexport function useKeyNavigate(element?: HTMLElement | null, onNext?: () => void, onPrevious?: () => void): void {\n useEffect(() => {\n if (!element) return undefined;\n const onKeyNavigate = (evt: KeyboardEvent) => {\n let callback;\n if (evt?.key === 'ArrowRight') {\n callback = onNext;\n } else if (evt?.key === 'ArrowLeft') {\n callback = onPrevious;\n }\n if (!callback) return;\n\n callback();\n evt.preventDefault();\n evt.stopPropagation();\n };\n\n element.addEventListener('keydown', onKeyNavigate);\n return () => {\n element.removeEventListener('keydown', onKeyNavigate);\n };\n }, [onPrevious, onNext, element]);\n}\n","import { useMemo, useRef } from 'react';\nimport { EDGE_FROM_ACTIVE_INDEX, PAGINATION_ITEMS_MAX } from '@lumx/react/components/slideshow/constants';\n\ntype Range = { min: number; max: number };\n\n/**\n * Calculate the currently visible pagination \"bullet\" range.\n */\nexport function usePaginationVisibleRange(activeIndex: number, slideCount: number): Range {\n const previousVisibleRangeRef = useRef<Range>();\n return useMemo(() => {\n const lastSlide = slideCount - 1;\n const { current: previousVisibleRange } = previousVisibleRangeRef;\n let newVisibleRange: Range;\n if (activeIndex === previousVisibleRange?.max && activeIndex < lastSlide) {\n newVisibleRange = { min: previousVisibleRange.min + 1, max: previousVisibleRange.max + 1 };\n } else if (activeIndex === previousVisibleRange?.min && activeIndex > 0) {\n newVisibleRange = { min: previousVisibleRange.min - 1, max: previousVisibleRange.max - 1 };\n } else {\n const deltaItems = PAGINATION_ITEMS_MAX - 1;\n let min = activeIndex - EDGE_FROM_ACTIVE_INDEX;\n let max = activeIndex + EDGE_FROM_ACTIVE_INDEX;\n\n if (activeIndex > lastSlide - EDGE_FROM_ACTIVE_INDEX) {\n min = lastSlide - deltaItems;\n max = lastSlide;\n } else if (activeIndex < deltaItems) {\n min = 0;\n max = deltaItems;\n }\n\n newVisibleRange = { min, max };\n }\n previousVisibleRangeRef.current = newVisibleRange;\n return newVisibleRange;\n }, [activeIndex, slideCount]);\n}\n","import React, { forwardRef, RefObject, useCallback, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport range from 'lodash/range';\n\nimport { mdiChevronLeft, mdiChevronRight, mdiPlayCircleOutline, mdiPauseCircleOutline } from '@lumx/icons';\nimport { Emphasis, IconButton, IconButtonProps, Theme } from '@lumx/react';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { WINDOW } from '@lumx/react/constants';\nimport { useSlideshowControls, DEFAULT_OPTIONS } from '@lumx/react/hooks/useSlideshowControls';\n\nimport { useSwipeNavigate } from './useSwipeNavigate';\nimport { useKeyNavigate } from './useKeyNavigate';\nimport { PAGINATION_ITEM_SIZE, PAGINATION_ITEMS_MAX } from './constants';\nimport { usePaginationVisibleRange } from './usePaginationVisibleRange';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowControlsProps extends GenericProps {\n /** Index of the current slide. */\n activeIndex?: number;\n /** Props to pass to the next button (minus those already set by the SlideshowControls props). */\n nextButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Reference to the parent element on which we want to listen touch swipe. */\n parentRef?: RefObject<HTMLDivElement> | HTMLDivElement | null;\n /** Props to pass to the previous button (minus those already set by the SlideshowControls props). */\n previousButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Number of slides. */\n slidesCount: number;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** On next button click callback. */\n onNextClick?(loopback?: boolean): void;\n /** On pagination change callback. */\n onPaginationClick?(index: number): void;\n /** On previous button click callback. */\n onPreviousClick?(loopback?: boolean): void;\n /** whether the slideshow is currently playing */\n isAutoPlaying?: boolean;\n /** function to be executed in order to retrieve the label for the pagination item */\n paginationItemLabel?: (index: number) => string;\n /** Props to pass to the lay button (minus those already set by the SlideshowControls props). */\n playButtonProps?: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowControls';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowControlsProps> = {\n activeIndex: 0,\n theme: Theme.light,\n};\n\n/**\n * SlideshowControls component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nconst InternalSlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n className,\n nextButtonProps,\n onNextClick,\n onPaginationClick,\n onPreviousClick,\n parentRef,\n previousButtonProps,\n slidesCount,\n theme,\n isAutoPlaying = false,\n playButtonProps,\n paginationItemLabel,\n ...forwardedProps\n } = props;\n\n let parent;\n if (WINDOW) {\n // Checking window object to avoid errors in SSR.\n parent = parentRef instanceof HTMLElement ? parentRef : parentRef?.current;\n }\n // Listen to keyboard navigate left & right.\n useKeyNavigate(parent, onNextClick, onPreviousClick);\n // Listen to touch swipe navigate left & right.\n useSwipeNavigate(\n parent,\n // Go next without loopback.\n useCallback(() => onNextClick?.(false), [onNextClick]),\n // Go previous without loopback.\n useCallback(() => onPreviousClick?.(false), [onPreviousClick]),\n );\n\n // Pagination \"bullet\" range.\n const visibleRange = usePaginationVisibleRange(activeIndex as number, slidesCount);\n\n // Inline style of wrapper element.\n const wrapperStyle = { transform: `translateX(-${PAGINATION_ITEM_SIZE * visibleRange.min}px)` };\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--has-infinite-pagination`]: slidesCount > PAGINATION_ITEMS_MAX,\n })}\n >\n <IconButton\n {...previousButtonProps}\n icon={mdiChevronLeft}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onPreviousClick}\n />\n <div className={`${CLASSNAME}__pagination`}>\n <div className={`${CLASSNAME}__pagination-items`} style={wrapperStyle}>\n {useMemo(\n () =>\n range(slidesCount).map((index) => {\n const isOnEdge =\n index !== 0 &&\n index !== slidesCount - 1 &&\n (index === visibleRange.min || index === visibleRange.max);\n const isActive = activeIndex === index;\n const isOutRange = index < visibleRange.min || index > visibleRange.max;\n return (\n <button\n className={classNames(\n handleBasicClasses({\n prefix: `${CLASSNAME}__pagination-item`,\n isActive,\n isOnEdge,\n isOutRange,\n }),\n )}\n key={index}\n type=\"button\"\n onClick={() => onPaginationClick?.(index)}\n {...{\n 'aria-label': paginationItemLabel\n ? paginationItemLabel(index)\n : `${index + 1} / ${slidesCount}`,\n }}\n />\n );\n }),\n [\n slidesCount,\n visibleRange.min,\n visibleRange.max,\n activeIndex,\n paginationItemLabel,\n onPaginationClick,\n ],\n )}\n </div>\n </div>\n\n {playButtonProps ? (\n <IconButton\n {...playButtonProps}\n icon={isAutoPlaying ? mdiPauseCircleOutline : mdiPlayCircleOutline}\n className={`${CLASSNAME}__play`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n />\n ) : null}\n\n <IconButton\n {...nextButtonProps}\n icon={mdiChevronRight}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onNextClick}\n />\n </div>\n );\n});\n\nInternalSlideshowControls.displayName = COMPONENT_NAME;\nInternalSlideshowControls.className = CLASSNAME;\nInternalSlideshowControls.defaultProps = DEFAULT_PROPS;\n\nexport const SlideshowControls = Object.assign(InternalSlideshowControls, {\n useSlideshowControls,\n useSlideshowControlsDefaultOptions: DEFAULT_OPTIONS,\n});\n","import React, { CSSProperties, forwardRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\nimport { Theme } from '@lumx/react';\n\nexport interface SlidesProps extends GenericProps {\n /** current slide active */\n activeIndex: number;\n /** slides id to be added to the wrapper */\n id?: string;\n /** custom classname */\n className?: string;\n /** custom theme */\n theme?: Theme;\n /** Whether the automatic rotation of the slideshow is enabled or not. */\n autoPlay?: boolean;\n /** Whether the image has to fill its container height or not. */\n fillHeight?: boolean;\n /** Number of slides to group together. */\n groupBy?: number;\n /** whether the slides are currently playing or not */\n isAutoPlaying?: boolean;\n /** id to be passed in into the slides */\n slidesId?: string;\n /** callback to change whether the slideshow is playing or not */\n toggleAutoPlay: () => void;\n /** component to be rendered after the slides */\n afterSlides?: React.ReactNode;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Slideshow';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Slides component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Slides: Comp<SlidesProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n id,\n className,\n theme,\n fillHeight,\n groupBy,\n isAutoPlaying,\n toggleAutoPlay,\n slidesId,\n children,\n afterSlides,\n ...forwardedProps\n } = props;\n // Inline style of wrapper element.\n const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * activeIndex}%)` };\n\n return (\n <section\n id={id}\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--fill-height`]: fillHeight,\n [`${CLASSNAME}--group-by-${groupBy}`]: Boolean(groupBy),\n })}\n aria-roledescription=\"carousel\"\n >\n <div\n id={slidesId}\n className={`${CLASSNAME}__slides`}\n onMouseEnter={toggleAutoPlay}\n onMouseLeave={toggleAutoPlay}\n aria-live={isAutoPlaying ? 'off' : 'polite'}\n >\n <div className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>\n {children}\n </div>\n </div>\n\n {afterSlides}\n </section>\n );\n});\n\nSlides.displayName = COMPONENT_NAME;\nSlides.className = CLASSNAME;\n"],"names":["useInterval","callback","delay","savedCallback","useRef","useEffect","current","undefined","tick","isFunction","id","setInterval","clearInterval","AUTOPLAY_DEFAULT_INTERVAL","FULL_WIDTH_PERCENT","EDGE_FROM_ACTIVE_INDEX","PAGINATION_ITEMS_MAX","PAGINATION_ITEM_SIZE","DEFAULT_OPTIONS","activeIndex","groupBy","interval","useSlideshowControls","autoPlay","defaultActiveIndex","onChange","itemsCount","slidesId","useState","currentIndex","setCurrentIndex","element","setElement","slidesCount","Math","ceil","min","goToNextSlide","useCallback","loopback","index","goToPreviousSlide","Boolean","isAutoPlaying","setIsAutoPlaying","isForcePaused","setIsForcePaused","isSlideshowAutoPlaying","startAutoPlay","stopAutoPlay","onPaginationClick","onNextClick","onPreviousClick","slideshowId","useMemo","uniqueId","slideshowSlidesId","toggleAutoPlay","toggleForcePause","shouldBePaused","startIndexVisible","endIndexVisible","setSlideshow","slideshow","setActiveIndex","useFocusWithin","onFocusIn","onFocusOut","addEventListener","removeEventListener","DEFAULT_PROPS","theme","Theme","light","Slideshow","forwardRef","props","ref","children","className","fillHeight","slideshowControlsProps","forwardedProps","React","Children","count","SlideshowControls","mergeRefs","Slides","nextButtonProps","previousButtonProps","onClick","playButtonProps","displayName","defaultProps","COMPONENT_NAME","CLASSNAME","getRootClassName","SlideshowItem","classNames","handleBasicClasses","prefix","isTouchDevice","window","useSwipeNavigate","onNext","onPrevious","detectHorizontalSwipe","swipe","useKeyNavigate","onKeyNavigate","evt","key","preventDefault","stopPropagation","usePaginationVisibleRange","slideCount","previousVisibleRangeRef","lastSlide","previousVisibleRange","newVisibleRange","max","deltaItems","InternalSlideshowControls","parentRef","paginationItemLabel","parent","WINDOW","HTMLElement","visibleRange","wrapperStyle","transform","mdiChevronLeft","dark","Emphasis","low","range","map","isOnEdge","isActive","isOutRange","mdiPauseCircleOutline","mdiPlayCircleOutline","mdiChevronRight","Object","assign","useSlideshowControlsDefaultOptions","afterSlides"],"mappings":"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"}
|
|
@@ -301,7 +301,6 @@ var CSS_PREFIX = 'lumx';
|
|
|
301
301
|
|
|
302
302
|
var DIALOG_TRANSITION_DURATION = 400;
|
|
303
303
|
var NOTIFICATION_TRANSITION_DURATION = 200;
|
|
304
|
-
var SLIDESHOW_TRANSITION_DURATION = 5000;
|
|
305
304
|
/**
|
|
306
305
|
* Delay on hover after which we open or close the tooltip.
|
|
307
306
|
* Only applies to devices supporting pointer hover.
|
|
@@ -343,5 +342,5 @@ function getRootClassName(componentName, subComponent) {
|
|
|
343
342
|
return formattedClassName;
|
|
344
343
|
}
|
|
345
344
|
|
|
346
|
-
export { CSS_PREFIX as C, DIALOG_TRANSITION_DURATION as D, NOTIFICATION_TRANSITION_DURATION as N,
|
|
345
|
+
export { CSS_PREFIX as C, DIALOG_TRANSITION_DURATION as D, NOTIFICATION_TRANSITION_DURATION as N, TOOLTIP_LONG_PRESS_DELAY as T, getBasicClass as a, onButtonPressed as b, classnames as c, createCommonjsModule as d, detectHorizontalSwipe as e, onEscapePressed as f, getRootClassName as g, handleBasicClasses as h, TOOLTIP_HOVER_DELAY as i, onEnterPressed as o };
|
|
347
346
|
//# sourceMappingURL=getRootClassName.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getRootClassName.js","sources":["../../../../../node_modules/classnames/index.js","../../../../lumx-core/src/js/utils.ts","../../../../lumx-core/src/js/constants/index.ts","../../../src/utils/getRootClassName.ts"],"sourcesContent":["/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import classNames from 'classnames';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport React from 'react';\n\nimport isBoolean from 'lodash/isBoolean';\nimport isEmpty from 'lodash/isEmpty';\nimport kebabCase from 'lodash/kebabCase';\nimport noop from 'lodash/noop';\n\n/**\n * Enhance isEmpty method to also works with numbers.\n *\n * @param value The value to check.\n * @return Whether the input value is empty or != 0.\n */\nconst _isEmpty = (value: any) => {\n if (typeof value === 'number') {\n return value === 0;\n }\n\n return isEmpty(value);\n};\n\n/**\n * Get the basic CSS class for the given type.\n *\n * @param prefix The class name prefix for the generated CSS class.\n * @param type The type of CSS class we want to generate (e.g.: 'color', 'variant', ...).\n * @param value The value of the type of the CSS class (e.g.: 'primary', 'button', ...).\n * @return The basic CSS class.\n */\nexport function getBasicClass({\n prefix,\n type,\n value,\n}: {\n prefix: string;\n type: string;\n value: string | number | boolean | undefined;\n}): string {\n if (isBoolean(value)) {\n if (!value) {\n // False value should not return a class.\n return '';\n }\n const booleanPrefixes = ['has', 'is'];\n\n if (booleanPrefixes.some((booleanPrefix) => type.toString().startsWith(booleanPrefix))) {\n return `${prefix}--${kebabCase(type)}`;\n }\n\n return `${prefix}--is-${kebabCase(type)}`;\n }\n\n return `${prefix}--${kebabCase(type)}-${value}`;\n}\n\n/**\n * Return all basic LumX CSS classes which are available for every components.\n *\n * @see {@link /src/components/index.d.ts} for the possible values of each parameter.\n *\n * @param prefix The class name prefix for the generated CSS class.\n * @param props All the other props you want to generate a class.\n * The rule of thumb: the key is the name of the prop in the class, the value a string that will\n * be used in the classname to represent the value of the given prop.\n * @return All LumX basic CSS classes.\n */\nexport function handleBasicClasses({ prefix, ...props }: { prefix: string; [prop: string]: any }): string {\n const otherClasses: any = {};\n if (!isEmpty(props)) {\n Object.keys(props).forEach((prop) => {\n otherClasses[getBasicClass({ prefix, type: prop, value: props[prop] })] = isBoolean(props[prop])\n ? props[prop]\n : !_isEmpty(props[prop]);\n });\n }\n\n return classNames(prefix, otherClasses);\n}\n\ndeclare type SwipeDirection = 'none' | 'up' | 'down' | 'left' | 'right';\n\n/**\n * Detects swipe direction.\n * Credits: http://javascriptkit.com/javatutors/touchevents2.shtml.\n *\n * @deprecated use `detectHorizontalSwipe` instead if possible (better performance and does not block scroll)\n * @param touchSurface Element that will hold touch events.\n * @param handleSwipe Callback function.\n * @return Function to remove listeners.\n */\nexport function detectSwipe(touchSurface: Element, handleSwipe: (direction: SwipeDirection) => void = noop) {\n let distX: number;\n let distY: number;\n let startX: number;\n let startY: number;\n let direction: SwipeDirection;\n // Required min distance traveled to be considered swipe.\n const threshold = 150;\n // Maximum distance allowed at the same time in perpendicular direction.\n const restraint = 100;\n // Maximum time allowed to travel that distance.\n const allowedTime = 300;\n let elapsedTime: number;\n let startTime: number;\n\n const onTouchStart = (evt: Event) => {\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n direction = 'none';\n // Const dist = 0;\n startX = touch.pageX;\n startY = touch.pageY;\n // Record time when finger first makes contact with surface.\n startTime = new Date().getTime();\n evt.preventDefault();\n };\n\n const onTouchMove = (evt: Event) => {\n // Prevent scrolling when inside DIV.\n evt.preventDefault();\n };\n\n const onTouchEnd = (evt: Event) => {\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n // Get horizontal dist traveled by finger while in contact with surface.\n distX = touch.pageX - startX;\n // Get vertical dist traveled by finger while in contact with surface.\n distY = touch.pageY - startY;\n // Get time elapsed.\n elapsedTime = new Date().getTime() - startTime;\n if (elapsedTime <= allowedTime) {\n // First condition for awipe met.\n if (Math.abs(distX) >= threshold && Math.abs(distY) <= restraint) {\n // 2nd condition for horizontal swipe met.\n // If dist traveled is negative, it indicates left swipe.\n direction = distX < 0 ? 'left' : 'right';\n } else if (Math.abs(distY) >= threshold && Math.abs(distX) <= restraint) {\n // 2nd condition for vertical swipe met.\n // If dist traveled is negative, it indicates up swipe.\n direction = distY < 0 ? 'up' : 'down';\n }\n }\n handleSwipe(direction);\n evt.preventDefault();\n };\n\n touchSurface.addEventListener('touchstart', onTouchStart, false);\n touchSurface.addEventListener('touchmove', onTouchMove, false);\n touchSurface.addEventListener('touchend', onTouchEnd, false);\n\n return () => {\n touchSurface.removeEventListener('touchstart', onTouchStart, false);\n touchSurface.removeEventListener('touchmove', onTouchMove, false);\n touchSurface.removeEventListener('touchend', onTouchEnd, false);\n };\n}\n\n/**\n * Checks whether or not the browser support passive events.\n * @see https://github.com/Modernizr/Modernizr/blob/6d56d814b9682843313b16060adb25a58d83a317/feature-detects/dom/passiveeventlisteners.js\n */\nfunction isPassiveEventAvailable() {\n let supportsPassiveOption = false;\n try {\n const opts = Object.defineProperty({}, 'passive', {\n get() {\n supportsPassiveOption = true;\n },\n });\n window.addEventListener('testPassiveEventSupport', noop, opts);\n window.removeEventListener('testPassiveEventSupport', noop, opts);\n } catch (e) {\n // ignored\n }\n return supportsPassiveOption;\n}\n\n/**\n * Detects horizontal swipe direction without blocking the browser scroll using passive event.\n * @see http://javascriptkit.com/javatutors/touchevents2.shtml\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n */\nexport function detectHorizontalSwipe(touchSurface: Element, handleSwipe: (direction: 'right' | 'left') => void) {\n let startX: number;\n let startY: number;\n // Required min distance traveled to be considered swipe.\n const threshold = 150;\n // Maximum distance allowed at the same time in perpendicular direction.\n const restraint = 150;\n // Maximum time allowed to travel that distance.\n const allowedTime = 300;\n let elapsedTime: number;\n let startTime: number;\n let finished: boolean;\n\n const onTouchStart = (evt: Event) => {\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n startX = touch.pageX;\n startY = touch.pageY;\n // Record time when finger first makes contact with surface.\n startTime = new Date().getTime();\n finished = false;\n };\n\n const onTouchMove = (evt: Event) => {\n if (finished) {\n return;\n }\n\n elapsedTime = new Date().getTime() - startTime;\n if (elapsedTime > allowedTime) {\n // Touch swipe too long to be considered.\n return;\n }\n\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n // Get horizontal dist traveled by finger while in contact with surface.\n const distX = touch.pageX - startX;\n // Get vertical dist traveled by finger while in contact with surface.\n const distY = touch.pageY - startY;\n\n if (!(Math.abs(distX) >= threshold && Math.abs(distY) <= restraint)) {\n // Swipe is not horizontal.\n return;\n }\n // Swipe direction.\n const direction = distX < 0 ? 'left' : 'right';\n\n handleSwipe(direction);\n finished = true;\n };\n\n // Activate passive event if possible for better scrolling performance.\n const eventOptions: any = isPassiveEventAvailable() ? { passive: true } : false;\n touchSurface.addEventListener('touchstart', onTouchStart, eventOptions);\n touchSurface.addEventListener('touchmove', onTouchMove, eventOptions);\n\n return () => {\n touchSurface.removeEventListener('touchstart', onTouchStart, eventOptions);\n touchSurface.removeEventListener('touchmove', onTouchMove, eventOptions);\n };\n}\n\ntype KeyboardEventHandler<E extends KeyboardEvent | React.KeyboardEvent> = (event: E) => void;\n\n/**\n * Make sure the pressed key is the enter key before calling the callback.\n *\n * @param handler The handler to call on enter/return press.\n * @return The decorated function.\n */\nexport function onEnterPressed<E extends KeyboardEvent | React.KeyboardEvent>(\n handler: KeyboardEventHandler<E>,\n): KeyboardEventHandler<E> {\n return (evt) => {\n if (evt.key !== 'Enter') {\n return;\n }\n handler(evt);\n };\n}\n\n/**\n * Make sure the pressed key is the escape key before calling the callback.\n *\n * @param handler The handler to call on enter/return press.\n * @return The decorated function.\n */\nexport function onEscapePressed<E extends KeyboardEvent | React.KeyboardEvent>(\n handler: KeyboardEventHandler<E>,\n): KeyboardEventHandler<E> {\n return (evt) => {\n if (evt.key !== 'Escape') {\n return;\n }\n handler(evt);\n };\n}\n\n/**\n * Handle button key pressed (Enter + Space).\n *\n * @param handler The handler to call.\n * @return The decorated function.\n */\nexport function onButtonPressed<E extends KeyboardEvent | React.KeyboardEvent>(\n handler: KeyboardEventHandler<E>,\n): KeyboardEventHandler<E> {\n return (evt) => {\n if (evt.key !== 'Enter' && evt.key !== ' ') {\n return;\n }\n handler(evt);\n };\n}\n","/**\n * The prefix to use for the CSS classes.\n */\nexport const CSS_PREFIX = 'lumx';\n\n/**\n * Key codes.\n */\nexport * from './keycodes';\n\n/**\n * Animation duration constants. Take into consideration that if you change one of these variables,\n * you need to update their scss counterpart as well\n */\nexport const DIALOG_TRANSITION_DURATION = 400;\nexport const NOTIFICATION_TRANSITION_DURATION = 200;\nexport const SLIDESHOW_TRANSITION_DURATION = 5000;\n\n/**\n * Delay on hover after which we open or close the tooltip.\n * Only applies to devices supporting pointer hover.\n */\nexport const TOOLTIP_HOVER_DELAY = {\n open: 500,\n close: 0,\n};\n\n/**\n * Delay on long press after which we open or close the tooltip.\n * Only applies to devices not supporting pointer hover.\n */\nexport const TOOLTIP_LONG_PRESS_DELAY = {\n open: 250,\n close: 3000,\n};\n","import { CSS_PREFIX } from '@lumx/react/constants';\n\nimport kebabCase from 'lodash/kebabCase';\n\n// See https://regex101.com/r/YjS1uI/3\nconst LAST_PART_CLASSNAME = /^(.*)-(.+)$/gi;\n\n/**\n * Get the name of the root CSS class of a component based on its name.\n *\n * @param componentName The name of the component. This name should contains the component prefix and be\n * written in PascalCase.\n * @param subComponent Whether the current component is a sub component, if true, define the class according\n * to BEM standards.\n * @return The name of the root CSS class. This classname include the CSS classname prefix and is written in\n * lower-snake-case.\n */\nexport function getRootClassName(componentName: string, subComponent?: boolean): string {\n const formattedClassName = `${CSS_PREFIX}-${kebabCase(componentName)}`;\n\n if (subComponent) {\n return formattedClassName.replace(LAST_PART_CLASSNAME, '$1__$2');\n }\n return formattedClassName;\n}\n"],"names":["_isEmpty","value","isEmpty","getBasicClass","prefix","type","isBoolean","booleanPrefixes","some","booleanPrefix","toString","startsWith","kebabCase","handleBasicClasses","props","otherClasses","Object","keys","forEach","prop","classNames","isPassiveEventAvailable","supportsPassiveOption","opts","defineProperty","get","window","addEventListener","noop","removeEventListener","e","detectHorizontalSwipe","touchSurface","handleSwipe","startX","startY","threshold","restraint","allowedTime","elapsedTime","startTime","finished","onTouchStart","evt","Array","from","changedTouches","touch","pageX","pageY","Date","getTime","onTouchMove","distX","distY","Math","abs","direction","eventOptions","passive","onEnterPressed","handler","key","onEscapePressed","onButtonPressed","CSS_PREFIX","DIALOG_TRANSITION_DURATION","NOTIFICATION_TRANSITION_DURATION","SLIDESHOW_TRANSITION_DURATION","TOOLTIP_HOVER_DELAY","open","close","TOOLTIP_LONG_PRESS_DELAY","LAST_PART_CLASSNAME","getRootClassName","componentName","subComponent","formattedClassName","replace"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"getRootClassName.js","sources":["../../../../../node_modules/classnames/index.js","../../../../lumx-core/src/js/utils.ts","../../../../lumx-core/src/js/constants/index.ts","../../../src/utils/getRootClassName.ts"],"sourcesContent":["/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import classNames from 'classnames';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport React from 'react';\n\nimport isBoolean from 'lodash/isBoolean';\nimport isEmpty from 'lodash/isEmpty';\nimport kebabCase from 'lodash/kebabCase';\nimport noop from 'lodash/noop';\n\n/**\n * Enhance isEmpty method to also works with numbers.\n *\n * @param value The value to check.\n * @return Whether the input value is empty or != 0.\n */\nconst _isEmpty = (value: any) => {\n if (typeof value === 'number') {\n return value === 0;\n }\n\n return isEmpty(value);\n};\n\n/**\n * Get the basic CSS class for the given type.\n *\n * @param prefix The class name prefix for the generated CSS class.\n * @param type The type of CSS class we want to generate (e.g.: 'color', 'variant', ...).\n * @param value The value of the type of the CSS class (e.g.: 'primary', 'button', ...).\n * @return The basic CSS class.\n */\nexport function getBasicClass({\n prefix,\n type,\n value,\n}: {\n prefix: string;\n type: string;\n value: string | number | boolean | undefined;\n}): string {\n if (isBoolean(value)) {\n if (!value) {\n // False value should not return a class.\n return '';\n }\n const booleanPrefixes = ['has', 'is'];\n\n if (booleanPrefixes.some((booleanPrefix) => type.toString().startsWith(booleanPrefix))) {\n return `${prefix}--${kebabCase(type)}`;\n }\n\n return `${prefix}--is-${kebabCase(type)}`;\n }\n\n return `${prefix}--${kebabCase(type)}-${value}`;\n}\n\n/**\n * Return all basic LumX CSS classes which are available for every components.\n *\n * @see {@link /src/components/index.d.ts} for the possible values of each parameter.\n *\n * @param prefix The class name prefix for the generated CSS class.\n * @param props All the other props you want to generate a class.\n * The rule of thumb: the key is the name of the prop in the class, the value a string that will\n * be used in the classname to represent the value of the given prop.\n * @return All LumX basic CSS classes.\n */\nexport function handleBasicClasses({ prefix, ...props }: { prefix: string; [prop: string]: any }): string {\n const otherClasses: any = {};\n if (!isEmpty(props)) {\n Object.keys(props).forEach((prop) => {\n otherClasses[getBasicClass({ prefix, type: prop, value: props[prop] })] = isBoolean(props[prop])\n ? props[prop]\n : !_isEmpty(props[prop]);\n });\n }\n\n return classNames(prefix, otherClasses);\n}\n\ndeclare type SwipeDirection = 'none' | 'up' | 'down' | 'left' | 'right';\n\n/**\n * Detects swipe direction.\n * Credits: http://javascriptkit.com/javatutors/touchevents2.shtml.\n *\n * @deprecated use `detectHorizontalSwipe` instead if possible (better performance and does not block scroll)\n * @param touchSurface Element that will hold touch events.\n * @param handleSwipe Callback function.\n * @return Function to remove listeners.\n */\nexport function detectSwipe(touchSurface: Element, handleSwipe: (direction: SwipeDirection) => void = noop) {\n let distX: number;\n let distY: number;\n let startX: number;\n let startY: number;\n let direction: SwipeDirection;\n // Required min distance traveled to be considered swipe.\n const threshold = 150;\n // Maximum distance allowed at the same time in perpendicular direction.\n const restraint = 100;\n // Maximum time allowed to travel that distance.\n const allowedTime = 300;\n let elapsedTime: number;\n let startTime: number;\n\n const onTouchStart = (evt: Event) => {\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n direction = 'none';\n // Const dist = 0;\n startX = touch.pageX;\n startY = touch.pageY;\n // Record time when finger first makes contact with surface.\n startTime = new Date().getTime();\n evt.preventDefault();\n };\n\n const onTouchMove = (evt: Event) => {\n // Prevent scrolling when inside DIV.\n evt.preventDefault();\n };\n\n const onTouchEnd = (evt: Event) => {\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n // Get horizontal dist traveled by finger while in contact with surface.\n distX = touch.pageX - startX;\n // Get vertical dist traveled by finger while in contact with surface.\n distY = touch.pageY - startY;\n // Get time elapsed.\n elapsedTime = new Date().getTime() - startTime;\n if (elapsedTime <= allowedTime) {\n // First condition for awipe met.\n if (Math.abs(distX) >= threshold && Math.abs(distY) <= restraint) {\n // 2nd condition for horizontal swipe met.\n // If dist traveled is negative, it indicates left swipe.\n direction = distX < 0 ? 'left' : 'right';\n } else if (Math.abs(distY) >= threshold && Math.abs(distX) <= restraint) {\n // 2nd condition for vertical swipe met.\n // If dist traveled is negative, it indicates up swipe.\n direction = distY < 0 ? 'up' : 'down';\n }\n }\n handleSwipe(direction);\n evt.preventDefault();\n };\n\n touchSurface.addEventListener('touchstart', onTouchStart, false);\n touchSurface.addEventListener('touchmove', onTouchMove, false);\n touchSurface.addEventListener('touchend', onTouchEnd, false);\n\n return () => {\n touchSurface.removeEventListener('touchstart', onTouchStart, false);\n touchSurface.removeEventListener('touchmove', onTouchMove, false);\n touchSurface.removeEventListener('touchend', onTouchEnd, false);\n };\n}\n\n/**\n * Checks whether or not the browser support passive events.\n * @see https://github.com/Modernizr/Modernizr/blob/6d56d814b9682843313b16060adb25a58d83a317/feature-detects/dom/passiveeventlisteners.js\n */\nfunction isPassiveEventAvailable() {\n let supportsPassiveOption = false;\n try {\n const opts = Object.defineProperty({}, 'passive', {\n get() {\n supportsPassiveOption = true;\n },\n });\n window.addEventListener('testPassiveEventSupport', noop, opts);\n window.removeEventListener('testPassiveEventSupport', noop, opts);\n } catch (e) {\n // ignored\n }\n return supportsPassiveOption;\n}\n\n/**\n * Detects horizontal swipe direction without blocking the browser scroll using passive event.\n * @see http://javascriptkit.com/javatutors/touchevents2.shtml\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n */\nexport function detectHorizontalSwipe(touchSurface: Element, handleSwipe: (direction: 'right' | 'left') => void) {\n let startX: number;\n let startY: number;\n // Required min distance traveled to be considered swipe.\n const threshold = 150;\n // Maximum distance allowed at the same time in perpendicular direction.\n const restraint = 150;\n // Maximum time allowed to travel that distance.\n const allowedTime = 300;\n let elapsedTime: number;\n let startTime: number;\n let finished: boolean;\n\n const onTouchStart = (evt: Event) => {\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n startX = touch.pageX;\n startY = touch.pageY;\n // Record time when finger first makes contact with surface.\n startTime = new Date().getTime();\n finished = false;\n };\n\n const onTouchMove = (evt: Event) => {\n if (finished) {\n return;\n }\n\n elapsedTime = new Date().getTime() - startTime;\n if (elapsedTime > allowedTime) {\n // Touch swipe too long to be considered.\n return;\n }\n\n const [touch] = Array.from((evt as TouchEvent).changedTouches);\n // Get horizontal dist traveled by finger while in contact with surface.\n const distX = touch.pageX - startX;\n // Get vertical dist traveled by finger while in contact with surface.\n const distY = touch.pageY - startY;\n\n if (!(Math.abs(distX) >= threshold && Math.abs(distY) <= restraint)) {\n // Swipe is not horizontal.\n return;\n }\n // Swipe direction.\n const direction = distX < 0 ? 'left' : 'right';\n\n handleSwipe(direction);\n finished = true;\n };\n\n // Activate passive event if possible for better scrolling performance.\n const eventOptions: any = isPassiveEventAvailable() ? { passive: true } : false;\n touchSurface.addEventListener('touchstart', onTouchStart, eventOptions);\n touchSurface.addEventListener('touchmove', onTouchMove, eventOptions);\n\n return () => {\n touchSurface.removeEventListener('touchstart', onTouchStart, eventOptions);\n touchSurface.removeEventListener('touchmove', onTouchMove, eventOptions);\n };\n}\n\ntype KeyboardEventHandler<E extends KeyboardEvent | React.KeyboardEvent> = (event: E) => void;\n\n/**\n * Make sure the pressed key is the enter key before calling the callback.\n *\n * @param handler The handler to call on enter/return press.\n * @return The decorated function.\n */\nexport function onEnterPressed<E extends KeyboardEvent | React.KeyboardEvent>(\n handler: KeyboardEventHandler<E>,\n): KeyboardEventHandler<E> {\n return (evt) => {\n if (evt.key !== 'Enter') {\n return;\n }\n handler(evt);\n };\n}\n\n/**\n * Make sure the pressed key is the escape key before calling the callback.\n *\n * @param handler The handler to call on enter/return press.\n * @return The decorated function.\n */\nexport function onEscapePressed<E extends KeyboardEvent | React.KeyboardEvent>(\n handler: KeyboardEventHandler<E>,\n): KeyboardEventHandler<E> {\n return (evt) => {\n if (evt.key !== 'Escape') {\n return;\n }\n handler(evt);\n };\n}\n\n/**\n * Handle button key pressed (Enter + Space).\n *\n * @param handler The handler to call.\n * @return The decorated function.\n */\nexport function onButtonPressed<E extends KeyboardEvent | React.KeyboardEvent>(\n handler: KeyboardEventHandler<E>,\n): KeyboardEventHandler<E> {\n return (evt) => {\n if (evt.key !== 'Enter' && evt.key !== ' ') {\n return;\n }\n handler(evt);\n };\n}\n","/**\n * The prefix to use for the CSS classes.\n */\nexport const CSS_PREFIX = 'lumx';\n\n/**\n * Key codes.\n */\nexport * from './keycodes';\n\n/**\n * Animation duration constants. Take into consideration that if you change one of these variables,\n * you need to update their scss counterpart as well\n */\nexport const DIALOG_TRANSITION_DURATION = 400;\nexport const NOTIFICATION_TRANSITION_DURATION = 200;\nexport const SLIDESHOW_TRANSITION_DURATION = 5000;\n\n/**\n * Delay on hover after which we open or close the tooltip.\n * Only applies to devices supporting pointer hover.\n */\nexport const TOOLTIP_HOVER_DELAY = {\n open: 500,\n close: 0,\n};\n\n/**\n * Delay on long press after which we open or close the tooltip.\n * Only applies to devices not supporting pointer hover.\n */\nexport const TOOLTIP_LONG_PRESS_DELAY = {\n open: 250,\n close: 3000,\n};\n","import { CSS_PREFIX } from '@lumx/react/constants';\n\nimport kebabCase from 'lodash/kebabCase';\n\n// See https://regex101.com/r/YjS1uI/3\nconst LAST_PART_CLASSNAME = /^(.*)-(.+)$/gi;\n\n/**\n * Get the name of the root CSS class of a component based on its name.\n *\n * @param componentName The name of the component. This name should contains the component prefix and be\n * written in PascalCase.\n * @param subComponent Whether the current component is a sub component, if true, define the class according\n * to BEM standards.\n * @return The name of the root CSS class. This classname include the CSS classname prefix and is written in\n * lower-snake-case.\n */\nexport function getRootClassName(componentName: string, subComponent?: boolean): string {\n const formattedClassName = `${CSS_PREFIX}-${kebabCase(componentName)}`;\n\n if (subComponent) {\n return formattedClassName.replace(LAST_PART_CLASSNAME, '$1__$2');\n }\n return formattedClassName;\n}\n"],"names":["_isEmpty","value","isEmpty","getBasicClass","prefix","type","isBoolean","booleanPrefixes","some","booleanPrefix","toString","startsWith","kebabCase","handleBasicClasses","props","otherClasses","Object","keys","forEach","prop","classNames","isPassiveEventAvailable","supportsPassiveOption","opts","defineProperty","get","window","addEventListener","noop","removeEventListener","e","detectHorizontalSwipe","touchSurface","handleSwipe","startX","startY","threshold","restraint","allowedTime","elapsedTime","startTime","finished","onTouchStart","evt","Array","from","changedTouches","touch","pageX","pageY","Date","getTime","onTouchMove","distX","distY","Math","abs","direction","eventOptions","passive","onEnterPressed","handler","key","onEscapePressed","onButtonPressed","CSS_PREFIX","DIALOG_TRANSITION_DURATION","NOTIFICATION_TRANSITION_DURATION","TOOLTIP_HOVER_DELAY","open","close","TOOLTIP_LONG_PRESS_DELAY","LAST_PART_CLASSNAME","getRootClassName","componentName","subComponent","formattedClassName","replace"],"mappings":"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"}
|
|
@@ -20,7 +20,6 @@ import 'lodash/range';
|
|
|
20
20
|
import 'react-dom';
|
|
21
21
|
import './ClickAwayProvider.js';
|
|
22
22
|
import 'lodash/pull';
|
|
23
|
-
import './useDelayedVisibility.js';
|
|
24
23
|
export { c as Slides, S as Slideshow, b as SlideshowControls, a as SlideshowItem } from './Slides.js';
|
|
25
24
|
import 'lodash/uniqueId';
|
|
26
25
|
import './Tooltip2.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slideshow.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slideshow.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@juggle/resize-observer": "^3.2.0",
|
|
10
|
-
"@lumx/core": "^2.2.
|
|
11
|
-
"@lumx/icons": "^2.2.
|
|
10
|
+
"@lumx/core": "^2.2.11",
|
|
11
|
+
"@lumx/icons": "^2.2.11",
|
|
12
12
|
"@popperjs/core": "^2.5.4",
|
|
13
13
|
"body-scroll-lock": "^3.1.5",
|
|
14
14
|
"classnames": "^2.2.6",
|
|
@@ -120,6 +120,6 @@
|
|
|
120
120
|
"build:storybook": "cd storybook && ./build"
|
|
121
121
|
},
|
|
122
122
|
"sideEffects": false,
|
|
123
|
-
"version": "2.2.
|
|
124
|
-
"gitHead": "
|
|
123
|
+
"version": "2.2.11",
|
|
124
|
+
"gitHead": "a223105b739e72009fde0ade1919b74b13c3e528"
|
|
125
125
|
}
|
|
@@ -26,11 +26,7 @@ export interface SlidesProps extends GenericProps {
|
|
|
26
26
|
/** id to be passed in into the slides */
|
|
27
27
|
slidesId?: string;
|
|
28
28
|
/** callback to change whether the slideshow is playing or not */
|
|
29
|
-
|
|
30
|
-
/** starting visible index */
|
|
31
|
-
startIndexVisible: number;
|
|
32
|
-
/** ending visible index */
|
|
33
|
-
endIndexVisible: number;
|
|
29
|
+
toggleAutoPlay: () => void;
|
|
34
30
|
/** component to be rendered after the slides */
|
|
35
31
|
afterSlides?: React.ReactNode;
|
|
36
32
|
}
|
|
@@ -61,11 +57,8 @@ export const Slides: Comp<SlidesProps, HTMLDivElement> = forwardRef((props, ref)
|
|
|
61
57
|
fillHeight,
|
|
62
58
|
groupBy,
|
|
63
59
|
isAutoPlaying,
|
|
64
|
-
|
|
60
|
+
toggleAutoPlay,
|
|
65
61
|
slidesId,
|
|
66
|
-
setIsAutoPlaying,
|
|
67
|
-
startIndexVisible,
|
|
68
|
-
endIndexVisible,
|
|
69
62
|
children,
|
|
70
63
|
afterSlides,
|
|
71
64
|
...forwardedProps
|
|
@@ -87,22 +80,12 @@ export const Slides: Comp<SlidesProps, HTMLDivElement> = forwardRef((props, ref)
|
|
|
87
80
|
<div
|
|
88
81
|
id={slidesId}
|
|
89
82
|
className={`${CLASSNAME}__slides`}
|
|
90
|
-
onMouseEnter={
|
|
91
|
-
onMouseLeave={
|
|
83
|
+
onMouseEnter={toggleAutoPlay}
|
|
84
|
+
onMouseLeave={toggleAutoPlay}
|
|
92
85
|
aria-live={isAutoPlaying ? 'off' : 'polite'}
|
|
93
86
|
>
|
|
94
87
|
<div className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>
|
|
95
|
-
{
|
|
96
|
-
if (React.isValidElement(child)) {
|
|
97
|
-
const isCurrentlyVisible = index >= startIndexVisible && index < endIndexVisible;
|
|
98
|
-
|
|
99
|
-
return React.cloneElement(child, {
|
|
100
|
-
isCurrentlyVisible,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return null;
|
|
105
|
-
})}
|
|
88
|
+
{children}
|
|
106
89
|
</div>
|
|
107
90
|
</div>
|
|
108
91
|
|
|
@@ -72,9 +72,6 @@ export const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props
|
|
|
72
72
|
setSlideshow,
|
|
73
73
|
isAutoPlaying,
|
|
74
74
|
slideshowSlidesId,
|
|
75
|
-
setIsAutoPlaying,
|
|
76
|
-
startIndexVisible,
|
|
77
|
-
endIndexVisible,
|
|
78
75
|
slidesCount,
|
|
79
76
|
onNextClick,
|
|
80
77
|
onPaginationClick,
|
|
@@ -82,8 +79,8 @@ export const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props
|
|
|
82
79
|
slideshow,
|
|
83
80
|
stopAutoPlay,
|
|
84
81
|
startAutoPlay,
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
toggleAutoPlay,
|
|
83
|
+
toggleForcePause,
|
|
87
84
|
} = SlideshowControls.useSlideshowControls({
|
|
88
85
|
activeIndex,
|
|
89
86
|
defaultActiveIndex: DEFAULT_PROPS.activeIndex as number,
|
|
@@ -113,9 +110,7 @@ export const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props
|
|
|
113
110
|
isAutoPlaying={isAutoPlaying}
|
|
114
111
|
autoPlay={autoPlay}
|
|
115
112
|
slidesId={slideshowSlidesId}
|
|
116
|
-
|
|
117
|
-
startIndexVisible={startIndexVisible}
|
|
118
|
-
endIndexVisible={endIndexVisible}
|
|
113
|
+
toggleAutoPlay={toggleAutoPlay}
|
|
119
114
|
interval={interval}
|
|
120
115
|
ref={mergeRefs(ref, setSlideshow)}
|
|
121
116
|
afterSlides={
|
|
@@ -143,7 +138,7 @@ export const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props
|
|
|
143
138
|
autoPlay
|
|
144
139
|
? {
|
|
145
140
|
'aria-controls': slideshowSlidesId,
|
|
146
|
-
onClick:
|
|
141
|
+
onClick: toggleForcePause,
|
|
147
142
|
...slideshowControlsProps.playButtonProps,
|
|
148
143
|
}
|
|
149
144
|
: undefined
|
|
@@ -39,18 +39,15 @@ export const ControllingSlideshow = ({ theme }: any) => {
|
|
|
39
39
|
setSlideshow,
|
|
40
40
|
isAutoPlaying,
|
|
41
41
|
slideshowSlidesId,
|
|
42
|
-
setIsAutoPlaying,
|
|
43
|
-
startIndexVisible,
|
|
44
|
-
endIndexVisible,
|
|
45
42
|
slidesCount,
|
|
46
43
|
onNextClick,
|
|
47
44
|
onPaginationClick,
|
|
48
45
|
onPreviousClick,
|
|
49
46
|
slideshow,
|
|
50
|
-
isForcePaused,
|
|
51
|
-
setIsForcePaused,
|
|
52
47
|
stopAutoPlay,
|
|
53
48
|
startAutoPlay,
|
|
49
|
+
toggleAutoPlay,
|
|
50
|
+
toggleForcePause,
|
|
54
51
|
} = SlideshowControls.useSlideshowControls({
|
|
55
52
|
activeIndex: 0,
|
|
56
53
|
defaultActiveIndex: 0,
|
|
@@ -73,11 +70,8 @@ export const ControllingSlideshow = ({ theme }: any) => {
|
|
|
73
70
|
ref={setSlideshow}
|
|
74
71
|
theme={theme}
|
|
75
72
|
isAutoPlaying={isAutoPlaying}
|
|
76
|
-
autoPlay
|
|
77
73
|
slidesId={slideshowSlidesId}
|
|
78
|
-
|
|
79
|
-
startIndexVisible={startIndexVisible}
|
|
80
|
-
endIndexVisible={endIndexVisible}
|
|
74
|
+
toggleAutoPlay={toggleAutoPlay}
|
|
81
75
|
groupBy={1}
|
|
82
76
|
style={{ width: '50%' }}
|
|
83
77
|
afterSlides={
|
|
@@ -96,7 +90,7 @@ export const ControllingSlideshow = ({ theme }: any) => {
|
|
|
96
90
|
playButtonProps={{
|
|
97
91
|
label: 'Play/Pause',
|
|
98
92
|
'aria-controls': slideshowSlidesId,
|
|
99
|
-
onClick:
|
|
93
|
+
onClick: toggleForcePause,
|
|
100
94
|
}}
|
|
101
95
|
paginationItemLabel={(index) => `Slide ${index}`}
|
|
102
96
|
/>
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import React, { forwardRef
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
2
|
|
|
3
3
|
import classNames from 'classnames';
|
|
4
4
|
|
|
5
5
|
import { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';
|
|
6
6
|
|
|
7
|
-
import { useDelayedVisibility } from '@lumx/react/hooks/useDelayedVisibility';
|
|
8
|
-
|
|
9
|
-
import { SLIDESHOW_TRANSITION_DURATION } from '@lumx/core/js/constants';
|
|
10
|
-
|
|
11
7
|
/**
|
|
12
8
|
* Defines the props of the component.
|
|
13
9
|
*/
|
|
@@ -36,12 +32,7 @@ const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
|
36
32
|
* @return React element.
|
|
37
33
|
*/
|
|
38
34
|
export const SlideshowItem: Comp<SlideshowItemProps, HTMLDivElement> = forwardRef((props, ref) => {
|
|
39
|
-
const { className, children,
|
|
40
|
-
const [isVisible, setIsVisible] = useState<boolean>(isCurrentlyVisible);
|
|
41
|
-
|
|
42
|
-
useDelayedVisibility(isCurrentlyVisible, SLIDESHOW_TRANSITION_DURATION, (isNowVisible) => {
|
|
43
|
-
setIsVisible(isNowVisible);
|
|
44
|
-
});
|
|
35
|
+
const { className, children, ...forwardedProps } = props;
|
|
45
36
|
|
|
46
37
|
return (
|
|
47
38
|
<div
|
|
@@ -55,8 +46,6 @@ export const SlideshowItem: Comp<SlideshowItemProps, HTMLDivElement> = forwardRe
|
|
|
55
46
|
aria-roledescription="slide"
|
|
56
47
|
role="group"
|
|
57
48
|
{...forwardedProps}
|
|
58
|
-
style={!isVisible ? { visibility: 'hidden', ...(forwardedProps.style || {}) } : forwardedProps.style || {}}
|
|
59
|
-
aria-hidden={!isVisible}
|
|
60
49
|
>
|
|
61
50
|
{children}
|
|
62
51
|
</div>
|
|
@@ -33,20 +33,18 @@ Array [
|
|
|
33
33
|
</div>
|
|
34
34
|
}
|
|
35
35
|
autoPlay={false}
|
|
36
|
-
endIndexVisible={1}
|
|
37
36
|
groupBy={1}
|
|
38
37
|
id="slideshow1"
|
|
39
38
|
interval={1000}
|
|
40
39
|
isAutoPlaying={false}
|
|
41
|
-
setIsAutoPlaying={[Function]}
|
|
42
40
|
slidesId="slideshow-slides2"
|
|
43
|
-
startIndexVisible={0}
|
|
44
41
|
style={
|
|
45
42
|
Object {
|
|
46
43
|
"width": "50%",
|
|
47
44
|
}
|
|
48
45
|
}
|
|
49
46
|
theme="light"
|
|
47
|
+
toggleAutoPlay={[Function]}
|
|
50
48
|
>
|
|
51
49
|
<SlideshowItem
|
|
52
50
|
key="/demo-assets/landscape1.jpg-0"
|
|
@@ -52,10 +52,10 @@ export interface UseSlideshowControls {
|
|
|
52
52
|
isAutoPlaying: boolean;
|
|
53
53
|
/** whether the slideshow was force paused or not */
|
|
54
54
|
isForcePaused: boolean;
|
|
55
|
-
/** callback to enable/disable the force pause feature */
|
|
56
|
-
setIsForcePaused: (isForcePaused: boolean) => void;
|
|
57
55
|
/** callback to change whether the slideshow is autoplaying or not */
|
|
58
|
-
|
|
56
|
+
toggleAutoPlay: () => void;
|
|
57
|
+
/** calback to change whether the slideshow should be force paused or not */
|
|
58
|
+
toggleForcePause: () => void;
|
|
59
59
|
/** current active slide index */
|
|
60
60
|
activeIndex: number;
|
|
61
61
|
/** set the current index as the active one */
|
|
@@ -141,10 +141,19 @@ export const useSlideshowControls = ({
|
|
|
141
141
|
}
|
|
142
142
|
}, [currentIndex, slidesCount, defaultActiveIndex]);
|
|
143
143
|
|
|
144
|
+
const startAutoPlay = () => {
|
|
145
|
+
setIsAutoPlaying(Boolean(autoPlay));
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
const stopAutoPlay = () => {
|
|
149
|
+
setIsAutoPlaying(false);
|
|
150
|
+
};
|
|
151
|
+
|
|
144
152
|
// Handle click on a bullet to go to a specific slide.
|
|
145
153
|
const onPaginationClick = useCallback(
|
|
146
154
|
(index: number) => {
|
|
147
|
-
|
|
155
|
+
stopAutoPlay();
|
|
156
|
+
setIsForcePaused(true);
|
|
148
157
|
|
|
149
158
|
if (index >= 0 && index < slidesCount) {
|
|
150
159
|
setCurrentIndex(index);
|
|
@@ -156,7 +165,8 @@ export const useSlideshowControls = ({
|
|
|
156
165
|
// Handle click or keyboard event to go to next slide.
|
|
157
166
|
const onNextClick = useCallback(
|
|
158
167
|
(loopback = true) => {
|
|
159
|
-
|
|
168
|
+
stopAutoPlay();
|
|
169
|
+
setIsForcePaused(true);
|
|
160
170
|
goToNextSlide(loopback);
|
|
161
171
|
},
|
|
162
172
|
[goToNextSlide],
|
|
@@ -165,7 +175,8 @@ export const useSlideshowControls = ({
|
|
|
165
175
|
// Handle click or keyboard event to go to previous slide.
|
|
166
176
|
const onPreviousClick = useCallback(
|
|
167
177
|
(loopback = true) => {
|
|
168
|
-
|
|
178
|
+
stopAutoPlay();
|
|
179
|
+
setIsForcePaused(true);
|
|
169
180
|
goToPreviousSlide(loopback);
|
|
170
181
|
},
|
|
171
182
|
[goToPreviousSlide],
|
|
@@ -185,21 +196,23 @@ export const useSlideshowControls = ({
|
|
|
185
196
|
const slideshowId = useMemo(() => id || uniqueId('slideshow'), [id]);
|
|
186
197
|
const slideshowSlidesId = useMemo(() => slidesId || uniqueId('slideshow-slides'), [slidesId]);
|
|
187
198
|
|
|
188
|
-
const
|
|
189
|
-
|
|
199
|
+
const toggleAutoPlay = () => {
|
|
200
|
+
if (isSlideshowAutoPlaying) {
|
|
201
|
+
stopAutoPlay();
|
|
202
|
+
} else {
|
|
203
|
+
startAutoPlay();
|
|
204
|
+
}
|
|
190
205
|
};
|
|
191
206
|
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
};
|
|
207
|
+
const toggleForcePause = () => {
|
|
208
|
+
const shouldBePaused = !isForcePaused;
|
|
195
209
|
|
|
196
|
-
|
|
197
|
-
setIsForcePaused(isPaused);
|
|
210
|
+
setIsForcePaused(shouldBePaused);
|
|
198
211
|
|
|
199
|
-
if (
|
|
200
|
-
stopAutoPlay();
|
|
201
|
-
} else {
|
|
212
|
+
if (!shouldBePaused) {
|
|
202
213
|
startAutoPlay();
|
|
214
|
+
} else {
|
|
215
|
+
stopAutoPlay();
|
|
203
216
|
}
|
|
204
217
|
};
|
|
205
218
|
|
|
@@ -218,13 +231,13 @@ export const useSlideshowControls = ({
|
|
|
218
231
|
onNextClick,
|
|
219
232
|
onPaginationClick,
|
|
220
233
|
isAutoPlaying: isSlideshowAutoPlaying,
|
|
221
|
-
|
|
234
|
+
toggleAutoPlay,
|
|
222
235
|
activeIndex: currentIndex,
|
|
223
236
|
slidesCount,
|
|
224
237
|
setActiveIndex: setCurrentIndex,
|
|
225
238
|
startAutoPlay,
|
|
226
239
|
stopAutoPlay,
|
|
227
240
|
isForcePaused,
|
|
228
|
-
|
|
241
|
+
toggleForcePause,
|
|
229
242
|
};
|
|
230
243
|
};
|
package/types.d.ts
CHANGED
|
@@ -2164,10 +2164,10 @@ export interface UseSlideshowControls {
|
|
|
2164
2164
|
isAutoPlaying: boolean;
|
|
2165
2165
|
/** whether the slideshow was force paused or not */
|
|
2166
2166
|
isForcePaused: boolean;
|
|
2167
|
-
/** callback to enable/disable the force pause feature */
|
|
2168
|
-
setIsForcePaused: (isForcePaused: boolean) => void;
|
|
2169
2167
|
/** callback to change whether the slideshow is autoplaying or not */
|
|
2170
|
-
|
|
2168
|
+
toggleAutoPlay: () => void;
|
|
2169
|
+
/** calback to change whether the slideshow should be force paused or not */
|
|
2170
|
+
toggleForcePause: () => void;
|
|
2171
2171
|
/** current active slide index */
|
|
2172
2172
|
activeIndex: number;
|
|
2173
2173
|
/** set the current index as the active one */
|
|
@@ -2230,11 +2230,7 @@ export interface SlidesProps extends GenericProps {
|
|
|
2230
2230
|
/** id to be passed in into the slides */
|
|
2231
2231
|
slidesId?: string;
|
|
2232
2232
|
/** callback to change whether the slideshow is playing or not */
|
|
2233
|
-
|
|
2234
|
-
/** starting visible index */
|
|
2235
|
-
startIndexVisible: number;
|
|
2236
|
-
/** ending visible index */
|
|
2237
|
-
endIndexVisible: number;
|
|
2233
|
+
toggleAutoPlay: () => void;
|
|
2238
2234
|
/** component to be rendered after the slides */
|
|
2239
2235
|
afterSlides?: React.ReactNode;
|
|
2240
2236
|
}
|