@lumx/react 2.2.9-alpha-exported-hooks2 → 2.2.9
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/{alertdialog.1.js → AlertDialog.js} +8 -8
- package/esm/_internal/AlertDialog.js.map +1 -0
- package/esm/_internal/{autocompletemultiple.2.js → AutocompleteMultiple.js} +9 -9
- package/esm/_internal/AutocompleteMultiple.js.map +1 -0
- package/esm/_internal/{avatar.3.js → Avatar2.js} +4 -4
- package/esm/_internal/Avatar2.js.map +1 -0
- package/esm/_internal/{badge.4.js → Badge2.js} +3 -3
- package/esm/_internal/Badge2.js.map +1 -0
- package/esm/_internal/{button.5.js → Button2.js} +5 -5
- package/esm/_internal/Button2.js.map +1 -0
- package/esm/_internal/{buttongroup.7.js → ButtonGroup.js} +3 -3
- package/esm/_internal/ButtonGroup.js.map +1 -0
- package/esm/_internal/{buttonroot.57.js → ButtonRoot.js} +4 -4
- package/esm/_internal/ButtonRoot.js.map +1 -0
- package/esm/_internal/{checkbox.8.js → Checkbox2.js} +7 -7
- package/esm/_internal/Checkbox2.js.map +1 -0
- package/esm/_internal/{chip.9.js → Chip2.js} +3 -3
- package/esm/_internal/Chip2.js.map +1 -0
- package/esm/_internal/{chipgroup.10.js → ChipGroup.js} +3 -3
- package/esm/_internal/ChipGroup.js.map +1 -0
- package/esm/_internal/{clickawayprovider.60.js → ClickAwayProvider.js} +4 -4
- package/esm/_internal/ClickAwayProvider.js.map +1 -0
- package/esm/_internal/{commentblock.11.js → CommentBlock.js} +4 -4
- package/esm/_internal/CommentBlock.js.map +1 -0
- package/esm/_internal/{datepickerfield.12.js → DatePickerField.js} +9 -9
- package/esm/_internal/DatePickerField.js.map +1 -0
- package/esm/_internal/{dialog.13.js → Dialog2.js} +12 -12
- package/esm/_internal/Dialog2.js.map +1 -0
- package/esm/_internal/{divider.14.js → Divider2.js} +3 -3
- package/esm/_internal/Divider2.js.map +1 -0
- package/esm/_internal/{draghandle.15.js → DragHandle.js} +4 -4
- package/esm/_internal/DragHandle.js.map +1 -0
- package/esm/_internal/{dropdown.16.js → Dropdown2.js} +6 -6
- package/esm/_internal/Dropdown2.js.map +1 -0
- package/esm/_internal/{expansionpanel.17.js → ExpansionPanel.js} +8 -8
- package/esm/_internal/ExpansionPanel.js.map +1 -0
- package/esm/_internal/{flag.18.js → Flag2.js} +4 -4
- package/esm/_internal/Flag2.js.map +1 -0
- package/esm/_internal/{flexbox.19.js → FlexBox.js} +3 -3
- package/esm/_internal/FlexBox.js.map +1 -0
- package/esm/_internal/{griditem.20.js → GridItem.js} +3 -3
- package/esm/_internal/GridItem.js.map +1 -0
- package/esm/_internal/{icon.21.js → Icon2.js} +6 -4
- package/esm/_internal/Icon2.js.map +1 -0
- package/esm/_internal/{iconbutton.6.js → IconButton.js} +6 -6
- package/esm/_internal/IconButton.js.map +1 -0
- package/esm/_internal/{imageblock.22.js → ImageBlock.js} +4 -4
- package/esm/_internal/ImageBlock.js.map +1 -0
- package/esm/_internal/{inputhelper.23.js → InputHelper.js} +3 -3
- package/esm/_internal/InputHelper.js.map +1 -0
- package/esm/_internal/{inputlabel.24.js → InputLabel.js} +3 -3
- package/esm/_internal/InputLabel.js.map +1 -0
- package/esm/_internal/{lightbox.25.js → Lightbox2.js} +11 -11
- package/esm/_internal/Lightbox2.js.map +1 -0
- package/esm/_internal/{link.26.js → Link2.js} +5 -5
- package/esm/_internal/Link2.js.map +1 -0
- package/esm/_internal/{linkpreview.27.js → LinkPreview.js} +5 -5
- package/esm/_internal/LinkPreview.js.map +1 -0
- package/esm/_internal/{list.28.js → List2.js} +6 -6
- package/esm/_internal/List2.js.map +1 -0
- package/esm/_internal/{listsubheader.29.js → ListSubheader.js} +3 -3
- package/esm/_internal/ListSubheader.js.map +1 -0
- package/esm/_internal/{message.30.js → Message2.js} +4 -4
- package/esm/_internal/Message2.js.map +1 -0
- package/esm/_internal/{mosaic.31.js → Mosaic2.js} +4 -4
- package/esm/_internal/Mosaic2.js.map +1 -0
- package/esm/_internal/{notification.32.js → Notification2.js} +7 -7
- package/esm/_internal/Notification2.js.map +1 -0
- package/esm/_internal/{popover.33.js → Popover2.js} +6 -6
- package/esm/_internal/Popover2.js.map +1 -0
- package/esm/_internal/{postblock.34.js → PostBlock.js} +5 -5
- package/esm/_internal/PostBlock.js.map +1 -0
- package/esm/_internal/{progress.35.js → Progress2.js} +3 -3
- package/esm/_internal/Progress2.js.map +1 -0
- package/esm/_internal/{progresstrackersteppanel.36.js → ProgressTrackerStepPanel.js} +8 -8
- package/esm/_internal/ProgressTrackerStepPanel.js.map +1 -0
- package/esm/_internal/{radiogroup.37.js → RadioGroup.js} +6 -6
- package/esm/_internal/RadioGroup.js.map +1 -0
- package/esm/_internal/{selectmultiple.38.js → SelectMultiple.js} +12 -12
- package/esm/_internal/SelectMultiple.js.map +1 -0
- package/esm/_internal/{sidenavigationitem.39.js → SideNavigationItem.js} +7 -7
- package/esm/_internal/SideNavigationItem.js.map +1 -0
- package/esm/_internal/{skeletontypography.40.js → SkeletonTypography.js} +3 -3
- package/esm/_internal/SkeletonTypography.js.map +1 -0
- package/esm/_internal/{slider.41.js → Slider2.js} +6 -6
- package/esm/_internal/Slider2.js.map +1 -0
- package/esm/_internal/{slideshowcontrols.42.js → Slides.js} +238 -120
- package/esm/_internal/Slides.js.map +1 -0
- package/esm/_internal/{switch.43.js → Switch2.js} +6 -6
- package/esm/_internal/Switch2.js.map +1 -0
- package/esm/_internal/{tabpanel.45.js → TabPanel.js} +6 -6
- package/esm/_internal/TabPanel.js.map +1 -0
- package/esm/_internal/{tablerow.44.js → TableRow.js} +4 -4
- package/esm/_internal/TableRow.js.map +1 -0
- package/esm/_internal/{textfield.46.js → TextField.js} +9 -9
- package/esm/_internal/TextField.js.map +1 -0
- package/esm/_internal/{thumbnail.47.js → Thumbnail2.js} +6 -6
- package/esm/_internal/Thumbnail2.js.map +1 -0
- package/esm/_internal/{toolbar.49.js → Toolbar2.js} +3 -3
- package/esm/_internal/Toolbar2.js.map +1 -0
- package/esm/_internal/{tooltip.50.js → Tooltip2.js} +7 -7
- package/esm/_internal/Tooltip2.js.map +1 -0
- package/esm/_internal/{uploader.51.js → Uploader2.js} +4 -4
- package/esm/_internal/Uploader2.js.map +1 -0
- package/esm/_internal/{userblock.52.js → UserBlock.js} +5 -5
- package/esm/_internal/UserBlock.js.map +1 -0
- package/esm/_internal/{_rolluppluginbabelhelpers.53.js → _rollupPluginBabelHelpers.js} +1 -1
- package/esm/_internal/_rollupPluginBabelHelpers.js.map +1 -0
- package/esm/_internal/alert-dialog.js +19 -19
- package/esm/_internal/autocomplete.js +20 -20
- package/esm/_internal/avatar.js +6 -6
- package/esm/_internal/badge.js +3 -3
- package/esm/_internal/button.js +14 -14
- package/esm/_internal/checkbox.js +7 -7
- package/esm/_internal/chip.js +4 -4
- package/esm/_internal/comment-block.js +7 -7
- package/esm/_internal/components.js +1 -1
- package/esm/_internal/{constants.59.js → constants.js} +1 -1
- package/esm/_internal/constants.js.map +1 -0
- package/esm/_internal/date-picker.js +18 -18
- package/esm/_internal/dialog.js +12 -12
- package/esm/_internal/divider.js +3 -3
- package/esm/_internal/drag-handle.js +4 -4
- package/esm/_internal/dropdown.js +10 -10
- package/esm/_internal/expansion-panel.js +16 -16
- package/esm/_internal/flag.js +4 -4
- package/esm/_internal/flex-box.js +3 -3
- package/esm/_internal/{getrootclassname.54.js → getRootClassName.js} +4 -3
- package/esm/_internal/getRootClassName.js.map +1 -0
- package/esm/_internal/grid.js +3 -3
- package/esm/_internal/icon.js +3 -3
- package/esm/_internal/image-block.js +6 -6
- package/esm/_internal/input-helper.js +3 -3
- package/esm/_internal/input-label.js +3 -3
- package/esm/_internal/lightbox.js +16 -16
- package/esm/_internal/link-preview.js +8 -8
- package/esm/_internal/link.js +5 -5
- package/esm/_internal/list.js +7 -7
- package/esm/_internal/{mergerefs.56.js → mergeRefs.js} +1 -1
- package/esm/_internal/mergeRefs.js.map +1 -0
- package/esm/_internal/message.js +4 -4
- package/esm/_internal/mosaic.js +6 -6
- package/esm/_internal/notification.js +9 -9
- package/esm/_internal/{partitionmulti.62.js → partitionMulti.js} +1 -1
- package/esm/_internal/partitionMulti.js.map +1 -0
- package/esm/_internal/popover.js +6 -6
- package/esm/_internal/post-block.js +7 -7
- package/esm/_internal/progress-tracker.js +9 -9
- package/esm/_internal/progress.js +3 -3
- package/esm/_internal/radio-button.js +6 -6
- package/esm/_internal/{renderlink.65.js → renderLink.js} +2 -2
- package/esm/_internal/renderLink.js.map +1 -0
- package/esm/_internal/select.js +19 -19
- package/esm/_internal/side-navigation.js +14 -14
- package/esm/_internal/skeleton.js +3 -3
- package/esm/_internal/slider.js +6 -6
- package/esm/_internal/slideshow.js +14 -14
- package/esm/_internal/switch.js +6 -6
- package/esm/_internal/table.js +4 -4
- package/esm/_internal/tabs.js +7 -7
- package/esm/_internal/text-field.js +15 -15
- package/esm/_internal/thumbnail.js +6 -6
- package/esm/_internal/toolbar.js +3 -3
- package/esm/_internal/tooltip.js +8 -8
- package/esm/_internal/{type.64.js → type.js} +1 -1
- package/esm/_internal/type.js.map +1 -0
- package/esm/_internal/{types.48.js → types.js} +3 -2
- package/esm/_internal/types.js.map +1 -0
- package/esm/_internal/uploader.js +4 -4
- package/esm/_internal/{usedelayedvisibility.63.js → useDelayedVisibility.js} +2 -2
- package/esm/_internal/useDelayedVisibility.js.map +1 -0
- package/esm/_internal/{usedisablebodyscroll.61.js → useDisableBodyScroll.js} +1 -1
- package/esm/_internal/useDisableBodyScroll.js.map +1 -0
- package/esm/_internal/{usefocustrap.58.js → useFocusTrap.js} +2 -2
- package/esm/_internal/useFocusTrap.js.map +1 -0
- package/esm/_internal/{userovingtabindex.66.js → useRovingTabIndex.js} +3 -3
- package/esm/_internal/useRovingTabIndex.js.map +1 -0
- package/esm/_internal/user-block.js +9 -9
- package/esm/index.js +89 -0
- package/{index.js.map → esm/index.js.map} +1 -1
- package/esm/{_internal/index.55.js → index2.js} +1 -1
- package/esm/index2.js.map +1 -0
- package/package.json +10 -11
- package/src/components/slideshow/Slides.tsx +115 -0
- package/src/components/slideshow/Slideshow.stories.tsx +34 -0
- package/src/components/slideshow/Slideshow.test.tsx +1 -1
- package/src/components/slideshow/Slideshow.tsx +69 -90
- package/src/components/slideshow/SlideshowControls.stories.tsx +76 -40
- package/src/components/slideshow/SlideshowControls.tsx +35 -3
- package/src/components/slideshow/SlideshowItem.tsx +19 -3
- package/src/components/slideshow/__snapshots__/Slideshow.test.tsx.snap +124 -232
- package/src/components/slideshow/index.ts +1 -0
- package/src/components/thumbnail/index.ts +1 -0
- package/src/hooks/useFocusWithin.ts +1 -1
- package/src/hooks/useSlideshowControls.ts +26 -9
- package/src/stories/generated/Thumbnail/Demos.stories.tsx +3 -1
- package/types.d.ts +2670 -0
- package/esm/_internal/_rolluppluginbabelhelpers.53.js.map +0 -1
- package/esm/_internal/alertdialog.1.js.map +0 -1
- package/esm/_internal/autocompletemultiple.2.js.map +0 -1
- package/esm/_internal/avatar.3.js.map +0 -1
- package/esm/_internal/badge.4.js.map +0 -1
- package/esm/_internal/button.5.js.map +0 -1
- package/esm/_internal/buttongroup.7.js.map +0 -1
- package/esm/_internal/buttonroot.57.js.map +0 -1
- package/esm/_internal/checkbox.8.js.map +0 -1
- package/esm/_internal/chip.9.js.map +0 -1
- package/esm/_internal/chipgroup.10.js.map +0 -1
- package/esm/_internal/clickawayprovider.60.js.map +0 -1
- package/esm/_internal/commentblock.11.js.map +0 -1
- package/esm/_internal/constants.59.js.map +0 -1
- package/esm/_internal/datepickerfield.12.js.map +0 -1
- package/esm/_internal/dialog.13.js.map +0 -1
- package/esm/_internal/divider.14.js.map +0 -1
- package/esm/_internal/draghandle.15.js.map +0 -1
- package/esm/_internal/dropdown.16.js.map +0 -1
- package/esm/_internal/expansionpanel.17.js.map +0 -1
- package/esm/_internal/flag.18.js.map +0 -1
- package/esm/_internal/flexbox.19.js.map +0 -1
- package/esm/_internal/getrootclassname.54.js.map +0 -1
- package/esm/_internal/griditem.20.js.map +0 -1
- package/esm/_internal/icon.21.js.map +0 -1
- package/esm/_internal/iconbutton.6.js.map +0 -1
- package/esm/_internal/imageblock.22.js.map +0 -1
- package/esm/_internal/index.55.js.map +0 -1
- package/esm/_internal/inputhelper.23.js.map +0 -1
- package/esm/_internal/inputlabel.24.js.map +0 -1
- package/esm/_internal/lightbox.25.js.map +0 -1
- package/esm/_internal/link.26.js.map +0 -1
- package/esm/_internal/linkpreview.27.js.map +0 -1
- package/esm/_internal/list.28.js.map +0 -1
- package/esm/_internal/listsubheader.29.js.map +0 -1
- package/esm/_internal/mergerefs.56.js.map +0 -1
- package/esm/_internal/message.30.js.map +0 -1
- package/esm/_internal/mosaic.31.js.map +0 -1
- package/esm/_internal/notification.32.js.map +0 -1
- package/esm/_internal/partitionmulti.62.js.map +0 -1
- package/esm/_internal/popover.33.js.map +0 -1
- package/esm/_internal/postblock.34.js.map +0 -1
- package/esm/_internal/progress.35.js.map +0 -1
- package/esm/_internal/progresstrackersteppanel.36.js.map +0 -1
- package/esm/_internal/radiogroup.37.js.map +0 -1
- package/esm/_internal/renderlink.65.js.map +0 -1
- package/esm/_internal/selectmultiple.38.js.map +0 -1
- package/esm/_internal/sidenavigationitem.39.js.map +0 -1
- package/esm/_internal/skeletontypography.40.js.map +0 -1
- package/esm/_internal/slider.41.js.map +0 -1
- package/esm/_internal/slideshowcontrols.42.js.map +0 -1
- package/esm/_internal/switch.43.js.map +0 -1
- package/esm/_internal/tablerow.44.js.map +0 -1
- package/esm/_internal/tabpanel.45.js.map +0 -1
- package/esm/_internal/textfield.46.js.map +0 -1
- package/esm/_internal/thumbnail.47.js.map +0 -1
- package/esm/_internal/toolbar.49.js.map +0 -1
- package/esm/_internal/tooltip.50.js.map +0 -1
- package/esm/_internal/type.64.js.map +0 -1
- package/esm/_internal/types.48.js.map +0 -1
- package/esm/_internal/uploader.51.js.map +0 -1
- package/esm/_internal/usedelayedvisibility.63.js.map +0 -1
- package/esm/_internal/usedisablebodyscroll.61.js.map +0 -1
- package/esm/_internal/usefocustrap.58.js.map +0 -1
- package/esm/_internal/userblock.52.js.map +0 -1
- package/esm/_internal/userovingtabindex.66.js.map +0 -1
- package/hooks/useFocusWithin.d.ts +0 -16
- package/hooks/useFocusWithin.js +0 -28
- package/hooks/useFocusWithin.js.map +0 -1
- package/index.d.ts +0 -2723
- package/index.js +0 -90
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { d as _slicedToArray, _ as _objectSpread2, b as _objectWithoutProperties, c as _extends, a as _defineProperty } from './
|
|
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, e as detectHorizontalSwipe } from './
|
|
5
|
-
import { g as mdiChevronLeft, f as mdiChevronRight } from './
|
|
6
|
-
import { W as WINDOW } from './constants.
|
|
7
|
-
import { m as mergeRefs } from './
|
|
8
|
-
import { I as IconButton } from './
|
|
4
|
+
import { g as getRootClassName, c as classnames, h as handleBasicClasses, S as SLIDESHOW_TRANSITION_DURATION, e as detectHorizontalSwipe } from './getRootClassName.js';
|
|
5
|
+
import { g as mdiChevronLeft, p as mdiPauseCircleOutline, q as mdiPlayCircleOutline, f as mdiChevronRight } from './Icon2.js';
|
|
6
|
+
import { W as WINDOW } from './constants.js';
|
|
7
|
+
import { m as mergeRefs } from './mergeRefs.js';
|
|
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';
|
|
11
12
|
import uniqueId from 'lodash/uniqueId';
|
|
12
|
-
import { useFocusWithin } from '../../hooks/useFocusWithin.js';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Making setInterval Declarative with React Hooks.
|
|
@@ -134,10 +134,16 @@ var useSlideshowControls = function useSlideshowControls(_ref) {
|
|
|
134
134
|
var _useState5 = useState(Boolean(autoPlay)),
|
|
135
135
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
136
136
|
isAutoPlaying = _useState6[0],
|
|
137
|
-
setIsAutoPlaying = _useState6[1];
|
|
137
|
+
setIsAutoPlaying = _useState6[1];
|
|
138
138
|
|
|
139
|
+
var _useState7 = useState(false),
|
|
140
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
141
|
+
isForcePaused = _useState8[0],
|
|
142
|
+
setIsForcePaused = _useState8[1];
|
|
139
143
|
|
|
140
|
-
|
|
144
|
+
var isSlideshowAutoPlaying = isForcePaused ? false : isAutoPlaying; // Start
|
|
145
|
+
|
|
146
|
+
useInterval(goToNextSlide, isSlideshowAutoPlaying && slidesCount > 1 ? interval : null); // Reset current index if it become invalid.
|
|
141
147
|
|
|
142
148
|
useEffect(function () {
|
|
143
149
|
if (currentIndex > slidesCount - 1) {
|
|
@@ -188,11 +194,16 @@ var useSlideshowControls = function useSlideshowControls(_ref) {
|
|
|
188
194
|
setIsAutoPlaying(false);
|
|
189
195
|
};
|
|
190
196
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
197
|
+
var forcePause = function forcePause(isPaused) {
|
|
198
|
+
setIsForcePaused(isPaused);
|
|
199
|
+
|
|
200
|
+
if (isPaused) {
|
|
201
|
+
stopAutoPlay();
|
|
202
|
+
} else {
|
|
203
|
+
startAutoPlay();
|
|
204
|
+
}
|
|
205
|
+
}; // Start index and end index of visible slides.
|
|
206
|
+
|
|
196
207
|
|
|
197
208
|
var startIndexVisible = currentIndex * groupBy;
|
|
198
209
|
var endIndexVisible = startIndexVisible + groupBy;
|
|
@@ -206,31 +217,49 @@ var useSlideshowControls = function useSlideshowControls(_ref) {
|
|
|
206
217
|
onPreviousClick: onPreviousClick,
|
|
207
218
|
onNextClick: onNextClick,
|
|
208
219
|
onPaginationClick: onPaginationClick,
|
|
209
|
-
isAutoPlaying:
|
|
220
|
+
isAutoPlaying: isSlideshowAutoPlaying,
|
|
210
221
|
setIsAutoPlaying: setIsAutoPlaying,
|
|
211
222
|
activeIndex: currentIndex,
|
|
212
223
|
slidesCount: slidesCount,
|
|
213
|
-
setActiveIndex: setCurrentIndex
|
|
224
|
+
setActiveIndex: setCurrentIndex,
|
|
225
|
+
startAutoPlay: startAutoPlay,
|
|
226
|
+
stopAutoPlay: stopAutoPlay,
|
|
227
|
+
isForcePaused: isForcePaused,
|
|
228
|
+
setIsForcePaused: forcePause
|
|
214
229
|
};
|
|
215
230
|
};
|
|
216
231
|
|
|
217
232
|
/**
|
|
218
|
-
*
|
|
233
|
+
* Hook that allows to control when there is a focus event within a given element, meaning
|
|
234
|
+
* that any element within the given target will trigger the focus in and focus out events.
|
|
235
|
+
* @param options - UseFocusWithinOptions
|
|
219
236
|
*/
|
|
237
|
+
var useFocusWithin = function useFocusWithin(_ref) {
|
|
238
|
+
var element = _ref.element,
|
|
239
|
+
onFocusIn = _ref.onFocusIn,
|
|
240
|
+
onFocusOut = _ref.onFocusOut;
|
|
241
|
+
useEffect(function () {
|
|
242
|
+
if (element) {
|
|
243
|
+
element.addEventListener('focusin', onFocusIn);
|
|
244
|
+
element.addEventListener('focusout', onFocusOut);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return function () {
|
|
248
|
+
if (element) {
|
|
249
|
+
element.removeEventListener('focusin', onFocusIn);
|
|
250
|
+
element.removeEventListener('focusout', onFocusOut);
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
}, [onFocusIn, element, onFocusOut]);
|
|
254
|
+
};
|
|
220
255
|
|
|
221
256
|
/**
|
|
222
|
-
*
|
|
223
|
-
*/
|
|
224
|
-
var COMPONENT_NAME = 'Slideshow';
|
|
225
|
-
/**
|
|
226
|
-
* Component default class name and class prefix.
|
|
257
|
+
* Defines the props of the component.
|
|
227
258
|
*/
|
|
228
259
|
|
|
229
|
-
var CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
230
260
|
/**
|
|
231
261
|
* Component default props.
|
|
232
262
|
*/
|
|
233
|
-
|
|
234
263
|
var DEFAULT_PROPS = _objectSpread2({}, DEFAULT_OPTIONS, {
|
|
235
264
|
theme: Theme.light
|
|
236
265
|
});
|
|
@@ -244,8 +273,6 @@ var DEFAULT_PROPS = _objectSpread2({}, DEFAULT_OPTIONS, {
|
|
|
244
273
|
|
|
245
274
|
|
|
246
275
|
var Slideshow = forwardRef(function (props, ref) {
|
|
247
|
-
var _classNames;
|
|
248
|
-
|
|
249
276
|
var activeIndex = props.activeIndex,
|
|
250
277
|
autoPlay = props.autoPlay,
|
|
251
278
|
children = props.children,
|
|
@@ -286,68 +313,59 @@ var Slideshow = forwardRef(function (props, ref) {
|
|
|
286
313
|
onNextClick = _SlideshowControls$us.onNextClick,
|
|
287
314
|
onPaginationClick = _SlideshowControls$us.onPaginationClick,
|
|
288
315
|
onPreviousClick = _SlideshowControls$us.onPreviousClick,
|
|
289
|
-
slideshow = _SlideshowControls$us.slideshow
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
};
|
|
295
|
-
/* eslint-disable jsx-a11y/no-noninteractive-tabindex */
|
|
296
|
-
|
|
297
|
-
return React.createElement("section", _extends({
|
|
298
|
-
id: slideshowId,
|
|
299
|
-
ref: mergeRefs(ref, setSlideshow)
|
|
300
|
-
}, forwardedProps, {
|
|
301
|
-
className: classnames(className, handleBasicClasses({
|
|
302
|
-
prefix: CLASSNAME,
|
|
303
|
-
theme: theme
|
|
304
|
-
}), (_classNames = {}, _defineProperty(_classNames, "".concat(CLASSNAME, "--fill-height"), fillHeight), _defineProperty(_classNames, "".concat(CLASSNAME, "--group-by-").concat(groupBy), Boolean(groupBy)), _classNames)),
|
|
305
|
-
"aria-roledescription": "carousel",
|
|
306
|
-
"aria-live": isAutoPlaying ? 'off' : 'polite'
|
|
307
|
-
}), React.createElement("div", {
|
|
308
|
-
id: slideshowSlidesId,
|
|
309
|
-
className: "".concat(CLASSNAME, "__slides"),
|
|
310
|
-
onMouseEnter: function onMouseEnter() {
|
|
311
|
-
return setIsAutoPlaying(false);
|
|
312
|
-
},
|
|
313
|
-
onMouseLeave: function onMouseLeave() {
|
|
314
|
-
return setIsAutoPlaying(Boolean(autoPlay));
|
|
315
|
-
}
|
|
316
|
-
}, React.createElement("div", {
|
|
317
|
-
className: "".concat(CLASSNAME, "__wrapper"),
|
|
318
|
-
style: wrapperStyle
|
|
319
|
-
}, React.Children.map(children, function (child, index) {
|
|
320
|
-
if (React.isValidElement(child)) {
|
|
321
|
-
var isCurrentlyVisible = index >= startIndexVisible && index <= endIndexVisible;
|
|
322
|
-
return React.cloneElement(child, {
|
|
323
|
-
style: !isCurrentlyVisible ? _objectSpread2({
|
|
324
|
-
visibility: 'hidden'
|
|
325
|
-
}, child.props.style || {}) : child.props.style || {},
|
|
326
|
-
'aria-hidden': !isCurrentlyVisible
|
|
327
|
-
});
|
|
328
|
-
}
|
|
316
|
+
slideshow = _SlideshowControls$us.slideshow,
|
|
317
|
+
stopAutoPlay = _SlideshowControls$us.stopAutoPlay,
|
|
318
|
+
startAutoPlay = _SlideshowControls$us.startAutoPlay,
|
|
319
|
+
isForcePaused = _SlideshowControls$us.isForcePaused,
|
|
320
|
+
setIsForcePaused = _SlideshowControls$us.setIsForcePaused;
|
|
329
321
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
322
|
+
useFocusWithin({
|
|
323
|
+
element: slideshow,
|
|
324
|
+
onFocusIn: stopAutoPlay,
|
|
325
|
+
onFocusOut: startAutoPlay
|
|
326
|
+
});
|
|
327
|
+
return React.createElement(Slides, _extends({
|
|
334
328
|
activeIndex: currentIndex,
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
onPreviousClick: onPreviousClick,
|
|
338
|
-
slidesCount: slidesCount,
|
|
339
|
-
parentRef: slideshow,
|
|
329
|
+
id: slideshowId,
|
|
330
|
+
className: className,
|
|
340
331
|
theme: theme,
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
332
|
+
fillHeight: fillHeight,
|
|
333
|
+
groupBy: groupBy,
|
|
334
|
+
isAutoPlaying: isAutoPlaying,
|
|
335
|
+
autoPlay: autoPlay,
|
|
336
|
+
slidesId: slideshowSlidesId,
|
|
337
|
+
setIsAutoPlaying: setIsAutoPlaying,
|
|
338
|
+
startIndexVisible: startIndexVisible,
|
|
339
|
+
endIndexVisible: endIndexVisible,
|
|
340
|
+
interval: interval,
|
|
341
|
+
ref: mergeRefs(ref, setSlideshow),
|
|
342
|
+
afterSlides: slideshowControlsProps && slidesCount > 1 ? React.createElement("div", {
|
|
343
|
+
className: "".concat(Slides.className, "__controls")
|
|
344
|
+
}, React.createElement(SlideshowControls, _extends({}, slideshowControlsProps, {
|
|
345
|
+
activeIndex: currentIndex,
|
|
346
|
+
onPaginationClick: onPaginationClick,
|
|
347
|
+
onNextClick: onNextClick,
|
|
348
|
+
onPreviousClick: onPreviousClick,
|
|
349
|
+
slidesCount: slidesCount,
|
|
350
|
+
parentRef: slideshow,
|
|
351
|
+
theme: theme,
|
|
352
|
+
isAutoPlaying: isAutoPlaying,
|
|
353
|
+
nextButtonProps: _objectSpread2({
|
|
354
|
+
'aria-controls': slideshowSlidesId
|
|
355
|
+
}, slideshowControlsProps.nextButtonProps),
|
|
356
|
+
previousButtonProps: _objectSpread2({
|
|
357
|
+
'aria-controls': slideshowSlidesId
|
|
358
|
+
}, slideshowControlsProps.previousButtonProps),
|
|
359
|
+
playButtonProps: autoPlay ? _objectSpread2({
|
|
360
|
+
'aria-controls': slideshowSlidesId,
|
|
361
|
+
onClick: function onClick() {
|
|
362
|
+
return setIsForcePaused(!isForcePaused);
|
|
363
|
+
}
|
|
364
|
+
}, slideshowControlsProps.playButtonProps) : undefined
|
|
365
|
+
}))) : undefined
|
|
366
|
+
}, forwardedProps), children);
|
|
348
367
|
});
|
|
349
|
-
Slideshow.displayName =
|
|
350
|
-
Slideshow.className = CLASSNAME;
|
|
368
|
+
Slideshow.displayName = 'Slideshow';
|
|
351
369
|
Slideshow.defaultProps = DEFAULT_PROPS;
|
|
352
370
|
|
|
353
371
|
/**
|
|
@@ -357,12 +375,12 @@ Slideshow.defaultProps = DEFAULT_PROPS;
|
|
|
357
375
|
/**
|
|
358
376
|
* Component display name.
|
|
359
377
|
*/
|
|
360
|
-
var COMPONENT_NAME
|
|
378
|
+
var COMPONENT_NAME = 'SlideshowItem';
|
|
361
379
|
/**
|
|
362
380
|
* Component default class name and class prefix.
|
|
363
381
|
*/
|
|
364
382
|
|
|
365
|
-
var CLASSNAME
|
|
383
|
+
var CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
366
384
|
/**
|
|
367
385
|
* SlideshowItem component.
|
|
368
386
|
*
|
|
@@ -374,19 +392,34 @@ var CLASSNAME$1 = getRootClassName(COMPONENT_NAME$1);
|
|
|
374
392
|
var SlideshowItem = forwardRef(function (props, ref) {
|
|
375
393
|
var className = props.className,
|
|
376
394
|
children = props.children,
|
|
377
|
-
|
|
395
|
+
_props$isCurrentlyVis = props.isCurrentlyVisible,
|
|
396
|
+
isCurrentlyVisible = _props$isCurrentlyVis === void 0 ? false : _props$isCurrentlyVis,
|
|
397
|
+
forwardedProps = _objectWithoutProperties(props, ["className", "children", "isCurrentlyVisible"]);
|
|
378
398
|
|
|
399
|
+
var _useState = useState(isCurrentlyVisible),
|
|
400
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
401
|
+
isVisible = _useState2[0],
|
|
402
|
+
setIsVisible = _useState2[1];
|
|
403
|
+
|
|
404
|
+
useDelayedVisibility(isCurrentlyVisible, SLIDESHOW_TRANSITION_DURATION, function (isNowVisible) {
|
|
405
|
+
setIsVisible(isNowVisible);
|
|
406
|
+
});
|
|
379
407
|
return React.createElement("div", _extends({
|
|
380
408
|
ref: ref,
|
|
381
409
|
className: classnames(className, handleBasicClasses({
|
|
382
|
-
prefix: CLASSNAME
|
|
410
|
+
prefix: CLASSNAME
|
|
383
411
|
})),
|
|
384
412
|
"aria-roledescription": "slide",
|
|
385
413
|
role: "group"
|
|
386
|
-
}, forwardedProps
|
|
414
|
+
}, forwardedProps, {
|
|
415
|
+
style: !isVisible ? _objectSpread2({
|
|
416
|
+
visibility: 'hidden'
|
|
417
|
+
}, forwardedProps.style || {}) : forwardedProps.style || {},
|
|
418
|
+
"aria-hidden": !isVisible
|
|
419
|
+
}), children);
|
|
387
420
|
});
|
|
388
|
-
SlideshowItem.displayName = COMPONENT_NAME
|
|
389
|
-
SlideshowItem.className = CLASSNAME
|
|
421
|
+
SlideshowItem.displayName = COMPONENT_NAME;
|
|
422
|
+
SlideshowItem.className = CLASSNAME;
|
|
390
423
|
|
|
391
424
|
var isTouchDevice = function isTouchDevice() {
|
|
392
425
|
return 'ontouchstart' in window;
|
|
@@ -487,12 +520,12 @@ function usePaginationVisibleRange(activeIndex, slideCount) {
|
|
|
487
520
|
/**
|
|
488
521
|
* Component display name.
|
|
489
522
|
*/
|
|
490
|
-
var COMPONENT_NAME$
|
|
523
|
+
var COMPONENT_NAME$1 = 'SlideshowControls';
|
|
491
524
|
/**
|
|
492
525
|
* Component default class name and class prefix.
|
|
493
526
|
*/
|
|
494
527
|
|
|
495
|
-
var CLASSNAME$
|
|
528
|
+
var CLASSNAME$1 = getRootClassName(COMPONENT_NAME$1);
|
|
496
529
|
/**
|
|
497
530
|
* Component default props.
|
|
498
531
|
*/
|
|
@@ -520,7 +553,11 @@ var InternalSlideshowControls = forwardRef(function (props, ref) {
|
|
|
520
553
|
previousButtonProps = props.previousButtonProps,
|
|
521
554
|
slidesCount = props.slidesCount,
|
|
522
555
|
theme = props.theme,
|
|
523
|
-
|
|
556
|
+
_props$isAutoPlaying = props.isAutoPlaying,
|
|
557
|
+
isAutoPlaying = _props$isAutoPlaying === void 0 ? false : _props$isAutoPlaying,
|
|
558
|
+
playButtonProps = props.playButtonProps,
|
|
559
|
+
paginationItemLabel = props.paginationItemLabel,
|
|
560
|
+
forwardedProps = _objectWithoutProperties(props, ["activeIndex", "className", "nextButtonProps", "onNextClick", "onPaginationClick", "onPreviousClick", "parentRef", "previousButtonProps", "slidesCount", "theme", "isAutoPlaying", "playButtonProps", "paginationItemLabel"]);
|
|
524
561
|
|
|
525
562
|
var parent;
|
|
526
563
|
|
|
@@ -549,56 +586,137 @@ var InternalSlideshowControls = forwardRef(function (props, ref) {
|
|
|
549
586
|
ref: ref
|
|
550
587
|
}, forwardedProps, {
|
|
551
588
|
className: classnames(className, handleBasicClasses({
|
|
552
|
-
prefix: CLASSNAME$
|
|
589
|
+
prefix: CLASSNAME$1,
|
|
553
590
|
theme: theme
|
|
554
|
-
}), _defineProperty({}, "".concat(CLASSNAME$
|
|
591
|
+
}), _defineProperty({}, "".concat(CLASSNAME$1, "--has-infinite-pagination"), slidesCount > PAGINATION_ITEMS_MAX))
|
|
555
592
|
}), React.createElement(IconButton, _extends({}, previousButtonProps, {
|
|
556
593
|
icon: mdiChevronLeft,
|
|
557
|
-
className: "".concat(CLASSNAME$
|
|
594
|
+
className: "".concat(CLASSNAME$1, "__navigation"),
|
|
558
595
|
color: theme === Theme.dark ? 'light' : 'dark',
|
|
559
596
|
emphasis: Emphasis.low,
|
|
560
597
|
onClick: onPreviousClick
|
|
561
598
|
})), React.createElement("div", {
|
|
562
|
-
className: "".concat(CLASSNAME$
|
|
599
|
+
className: "".concat(CLASSNAME$1, "__pagination")
|
|
563
600
|
}, React.createElement("div", {
|
|
564
|
-
className: "".concat(CLASSNAME$
|
|
601
|
+
className: "".concat(CLASSNAME$1, "__pagination-items"),
|
|
565
602
|
style: wrapperStyle
|
|
566
603
|
}, useMemo(function () {
|
|
567
604
|
return range(slidesCount).map(function (index) {
|
|
568
605
|
var isOnEdge = index !== 0 && index !== slidesCount - 1 && (index === visibleRange.min || index === visibleRange.max);
|
|
569
606
|
var isActive = activeIndex === index;
|
|
570
607
|
var isOutRange = index < visibleRange.min || index > visibleRange.max;
|
|
571
|
-
return (
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
);
|
|
608
|
+
return React.createElement("button", _extends({
|
|
609
|
+
className: classnames(handleBasicClasses({
|
|
610
|
+
prefix: "".concat(CLASSNAME$1, "__pagination-item"),
|
|
611
|
+
isActive: isActive,
|
|
612
|
+
isOnEdge: isOnEdge,
|
|
613
|
+
isOutRange: isOutRange
|
|
614
|
+
})),
|
|
615
|
+
key: index,
|
|
616
|
+
type: "button",
|
|
617
|
+
onClick: function onClick() {
|
|
618
|
+
return onPaginationClick === null || onPaginationClick === void 0 ? void 0 : onPaginationClick(index);
|
|
619
|
+
}
|
|
620
|
+
}, {
|
|
621
|
+
'aria-label': paginationItemLabel ? paginationItemLabel(index) : "".concat(index + 1, " / ").concat(slidesCount)
|
|
622
|
+
}));
|
|
586
623
|
});
|
|
587
|
-
}, [slidesCount, visibleRange.min, visibleRange.max, activeIndex, onPaginationClick]))), React.createElement(IconButton, _extends({},
|
|
624
|
+
}, [slidesCount, visibleRange.min, visibleRange.max, activeIndex, paginationItemLabel, onPaginationClick]))), playButtonProps ? React.createElement(IconButton, _extends({}, playButtonProps, {
|
|
625
|
+
icon: isAutoPlaying ? mdiPauseCircleOutline : mdiPlayCircleOutline,
|
|
626
|
+
className: "".concat(CLASSNAME$1, "__play"),
|
|
627
|
+
color: theme === Theme.dark ? 'light' : 'dark',
|
|
628
|
+
emphasis: Emphasis.low
|
|
629
|
+
})) : null, React.createElement(IconButton, _extends({}, nextButtonProps, {
|
|
588
630
|
icon: mdiChevronRight,
|
|
589
|
-
className: "".concat(CLASSNAME$
|
|
631
|
+
className: "".concat(CLASSNAME$1, "__navigation"),
|
|
590
632
|
color: theme === Theme.dark ? 'light' : 'dark',
|
|
591
633
|
emphasis: Emphasis.low,
|
|
592
634
|
onClick: onNextClick
|
|
593
635
|
})));
|
|
594
636
|
});
|
|
595
|
-
InternalSlideshowControls.displayName = COMPONENT_NAME$
|
|
596
|
-
InternalSlideshowControls.className = CLASSNAME$
|
|
637
|
+
InternalSlideshowControls.displayName = COMPONENT_NAME$1;
|
|
638
|
+
InternalSlideshowControls.className = CLASSNAME$1;
|
|
597
639
|
InternalSlideshowControls.defaultProps = DEFAULT_PROPS$1;
|
|
598
640
|
var SlideshowControls = Object.assign(InternalSlideshowControls, {
|
|
599
641
|
useSlideshowControls: useSlideshowControls,
|
|
600
642
|
useSlideshowControlsDefaultOptions: DEFAULT_OPTIONS
|
|
601
643
|
});
|
|
602
644
|
|
|
603
|
-
|
|
604
|
-
|
|
645
|
+
/**
|
|
646
|
+
* Component display name.
|
|
647
|
+
*/
|
|
648
|
+
var COMPONENT_NAME$2 = 'Slideshow';
|
|
649
|
+
/**
|
|
650
|
+
* Component default class name and class prefix.
|
|
651
|
+
*/
|
|
652
|
+
|
|
653
|
+
var CLASSNAME$2 = getRootClassName(COMPONENT_NAME$2);
|
|
654
|
+
/**
|
|
655
|
+
* Slides component.
|
|
656
|
+
*
|
|
657
|
+
* @param props Component props.
|
|
658
|
+
* @param ref Component ref.
|
|
659
|
+
* @return React element.
|
|
660
|
+
*/
|
|
661
|
+
|
|
662
|
+
var Slides = forwardRef(function (props, ref) {
|
|
663
|
+
var _classNames;
|
|
664
|
+
|
|
665
|
+
var activeIndex = props.activeIndex,
|
|
666
|
+
id = props.id,
|
|
667
|
+
className = props.className,
|
|
668
|
+
theme = props.theme,
|
|
669
|
+
fillHeight = props.fillHeight,
|
|
670
|
+
groupBy = props.groupBy,
|
|
671
|
+
isAutoPlaying = props.isAutoPlaying,
|
|
672
|
+
autoPlay = props.autoPlay,
|
|
673
|
+
slidesId = props.slidesId,
|
|
674
|
+
setIsAutoPlaying = props.setIsAutoPlaying,
|
|
675
|
+
startIndexVisible = props.startIndexVisible,
|
|
676
|
+
endIndexVisible = props.endIndexVisible,
|
|
677
|
+
children = props.children,
|
|
678
|
+
afterSlides = props.afterSlides,
|
|
679
|
+
forwardedProps = _objectWithoutProperties(props, ["activeIndex", "id", "className", "theme", "fillHeight", "groupBy", "isAutoPlaying", "autoPlay", "slidesId", "setIsAutoPlaying", "startIndexVisible", "endIndexVisible", "children", "afterSlides"]); // Inline style of wrapper element.
|
|
680
|
+
|
|
681
|
+
|
|
682
|
+
var wrapperStyle = {
|
|
683
|
+
transform: "translateX(-".concat(FULL_WIDTH_PERCENT * activeIndex, "%)")
|
|
684
|
+
};
|
|
685
|
+
return React.createElement("section", _extends({
|
|
686
|
+
id: id,
|
|
687
|
+
ref: ref
|
|
688
|
+
}, forwardedProps, {
|
|
689
|
+
className: classnames(className, handleBasicClasses({
|
|
690
|
+
prefix: CLASSNAME$2,
|
|
691
|
+
theme: theme
|
|
692
|
+
}), (_classNames = {}, _defineProperty(_classNames, "".concat(CLASSNAME$2, "--fill-height"), fillHeight), _defineProperty(_classNames, "".concat(CLASSNAME$2, "--group-by-").concat(groupBy), Boolean(groupBy)), _classNames)),
|
|
693
|
+
"aria-roledescription": "carousel"
|
|
694
|
+
}), React.createElement("div", {
|
|
695
|
+
id: slidesId,
|
|
696
|
+
className: "".concat(CLASSNAME$2, "__slides"),
|
|
697
|
+
onMouseEnter: function onMouseEnter() {
|
|
698
|
+
return setIsAutoPlaying(false);
|
|
699
|
+
},
|
|
700
|
+
onMouseLeave: function onMouseLeave() {
|
|
701
|
+
return setIsAutoPlaying(Boolean(autoPlay));
|
|
702
|
+
},
|
|
703
|
+
"aria-live": isAutoPlaying ? 'off' : 'polite'
|
|
704
|
+
}, React.createElement("div", {
|
|
705
|
+
className: "".concat(CLASSNAME$2, "__wrapper"),
|
|
706
|
+
style: wrapperStyle
|
|
707
|
+
}, React.Children.map(children, function (child, index) {
|
|
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);
|
|
717
|
+
});
|
|
718
|
+
Slides.displayName = COMPONENT_NAME$2;
|
|
719
|
+
Slides.className = CLASSNAME$2;
|
|
720
|
+
|
|
721
|
+
export { Slideshow as S, SlideshowItem as a, SlideshowControls as b, Slides as c };
|
|
722
|
+
//# sourceMappingURL=Slides.js.map
|
|
@@ -0,0 +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 | undefined) => void;\n /** reference to the slideshow element */\n slideshow: HTMLDivElement | undefined;\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>();\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 | undefined;\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<\n SlidesProps,\n 'activeIndex' | 'autoPlay' | 'fillHeight' | 'slidesId' | 'id' | 'theme' | 'fillHeight' | 'groupBy'\n > {\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;\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<any, 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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"}
|