@lumx/react 3.20.1-alpha.15 → 3.20.1-alpha.17
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/_internal/{Button-f19e18df.js → Button-1f227024.js} +30 -28
- package/_internal/{Button-f19e18df.js.map → Button-1f227024.js.map} +1 -1
- package/_internal/{ButtonRoot-ab633b1d.js → ButtonRoot-823f3e9c.js} +18 -16
- package/_internal/{ButtonRoot-ab633b1d.js.map → ButtonRoot-823f3e9c.js.map} +1 -1
- package/_internal/{Chip-4c572eec.js → Chip-a34f6905.js} +31 -34
- package/_internal/{Chip-4c572eec.js.map → Chip-a34f6905.js.map} +1 -1
- package/_internal/{ClickAwayProvider-bcce6ceb.js → ClickAwayProvider-7093ba23.js} +6 -4
- package/_internal/{ClickAwayProvider-bcce6ceb.js.map → ClickAwayProvider-7093ba23.js.map} +1 -1
- package/_internal/{DisabledStateContext-077b7bef.js → DisabledStateContext-ea04260d.js} +6 -6
- package/_internal/{DisabledStateContext-077b7bef.js.map → DisabledStateContext-ea04260d.js.map} +1 -1
- package/_internal/{HeadingLevelProvider-e4817816.js → HeadingLevelProvider-ebdcb0c7.js} +6 -4
- package/_internal/{HeadingLevelProvider-e4817816.js.map → HeadingLevelProvider-ebdcb0c7.js.map} +1 -1
- package/_internal/{IconButton-10585058.js → IconButton-f4df224c.js} +29 -24
- package/_internal/{IconButton-10585058.js.map → IconButton-f4df224c.js.map} +1 -1
- package/_internal/ImageCaption-8134a3aa.js +75 -0
- package/_internal/{ImageCaption-4279b2b6.js.map → ImageCaption-8134a3aa.js.map} +1 -1
- package/_internal/{List-d5f5d465.js → List-54237e0e.js} +52 -50
- package/_internal/{List-d5f5d465.js.map → List-54237e0e.js.map} +1 -1
- package/_internal/{PopoverDialog-21e5c9dd.js → PopoverDialog-e0967e5f.js} +166 -158
- package/_internal/{PopoverDialog-21e5c9dd.js.map → PopoverDialog-e0967e5f.js.map} +1 -1
- package/_internal/{Portal-c43d098b.js → Portal-3f86608e.js} +5 -2
- package/_internal/{Portal-c43d098b.js.map → Portal-3f86608e.js.map} +1 -1
- package/_internal/{RawClickable-c76bbc4c.js → RawClickable-2c2b6a89.js} +9 -7
- package/_internal/{RawClickable-c76bbc4c.js.map → RawClickable-2c2b6a89.js.map} +1 -1
- package/_internal/{Slides-01f513ce.js → Slides-b7a67f32.js} +99 -96
- package/_internal/{Slides-01f513ce.js.map → Slides-b7a67f32.js.map} +1 -1
- package/_internal/{Thumbnail-30d2a781.js → Thumbnail-b5dea0af.js} +46 -45
- package/_internal/{Thumbnail-30d2a781.js.map → Thumbnail-b5dea0af.js.map} +1 -1
- package/_internal/components/{alert-dialog-8f1c163c.js → alert-dialog-b284b191.js} +50 -35
- package/_internal/components/{alert-dialog-8f1c163c.js.map → alert-dialog-b284b191.js.map} +1 -1
- package/_internal/components/{autocomplete-bfbdeb3c.js → autocomplete-8d3f37ea.js} +64 -67
- package/_internal/components/{autocomplete-bfbdeb3c.js.map → autocomplete-8d3f37ea.js.map} +1 -1
- package/_internal/components/{avatar-6990e3e9.js → avatar-5fc70e00.js} +28 -32
- package/_internal/components/{avatar-6990e3e9.js.map → avatar-5fc70e00.js.map} +1 -1
- package/_internal/components/{badge-81543bc7.js → badge-8390e590.js} +18 -18
- package/_internal/components/{badge-81543bc7.js.map → badge-8390e590.js.map} +1 -1
- package/_internal/components/{button-927abe71.js → button-e3c7f2eb.js} +11 -13
- package/_internal/components/{button-927abe71.js.map → button-e3c7f2eb.js.map} +1 -1
- package/_internal/components/{checkbox-dc4caec8.js → checkbox-d1ca9748.js} +53 -44
- package/_internal/components/{checkbox-dc4caec8.js.map → checkbox-d1ca9748.js.map} +1 -1
- package/_internal/components/{chip-fb3d0c76.js → chip-e40c5521.js} +10 -12
- package/_internal/components/{chip-fb3d0c76.js.map → chip-e40c5521.js.map} +1 -1
- package/_internal/components/comment-block-a3cf7b9b.js +138 -0
- package/_internal/components/{comment-block-b84c4694.js.map → comment-block-a3cf7b9b.js.map} +1 -1
- package/_internal/components/date-picker-6c1b14e4.js +2 -0
- package/_internal/components/date-picker-6c1b14e4.js.map +1 -0
- package/_internal/components/{dialog-7dbcb485.js → dialog-ebdb9500.js} +70 -58
- package/_internal/components/{dialog-7dbcb485.js.map → dialog-ebdb9500.js.map} +1 -1
- package/_internal/components/{divider-12e9b6a0.js → divider-116af6b9.js} +7 -10
- package/_internal/components/{divider-12e9b6a0.js.map → divider-116af6b9.js.map} +1 -1
- package/_internal/components/{drag-handle-a38ff757.js → drag-handle-5215cd21.js} +14 -16
- package/_internal/components/{drag-handle-a38ff757.js.map → drag-handle-5215cd21.js.map} +1 -1
- package/_internal/components/{dropdown-38b0b6a0.js → dropdown-0baed51b.js} +15 -16
- package/_internal/components/{dropdown-38b0b6a0.js.map → dropdown-0baed51b.js.map} +1 -1
- package/_internal/components/{expansion-panel-c4b93653.js → expansion-panel-5533a680.js} +48 -39
- package/_internal/components/{expansion-panel-c4b93653.js.map → expansion-panel-5533a680.js.map} +1 -1
- package/_internal/components/{flag-c5e2f5f0.js → flag-8d4a7e72.js} +20 -16
- package/_internal/components/{flag-c5e2f5f0.js.map → flag-8d4a7e72.js.map} +1 -1
- package/_internal/components/{flex-box-c8701a85.js → flex-box-55144e5f.js} +9 -11
- package/_internal/components/{flex-box-c8701a85.js.map → flex-box-55144e5f.js.map} +1 -1
- package/_internal/components/{generic-block-0d6ad5a6.js → generic-block-ff0509ee.js} +35 -26
- package/_internal/components/{generic-block-0d6ad5a6.js.map → generic-block-ff0509ee.js.map} +1 -1
- package/_internal/components/{grid-3b194fe8.js → grid-6f1b5a41.js} +15 -20
- package/_internal/components/{grid-3b194fe8.js.map → grid-6f1b5a41.js.map} +1 -1
- package/_internal/components/{grid-column-985b9327.js → grid-column-f01df853.js} +8 -9
- package/_internal/components/{grid-column-985b9327.js.map → grid-column-f01df853.js.map} +1 -1
- package/_internal/components/{heading-5e954dfc.js → heading-89239843.js} +11 -12
- package/_internal/components/{heading-5e954dfc.js.map → heading-89239843.js.map} +1 -1
- package/_internal/components/{icon-2e7345ad.js → icon-b708cca4.js} +24 -25
- package/_internal/components/{icon-2e7345ad.js.map → icon-b708cca4.js.map} +1 -1
- package/_internal/components/{image-block-8d21dd7e.js → image-block-7938422d.js} +35 -34
- package/_internal/components/{image-block-8d21dd7e.js.map → image-block-7938422d.js.map} +1 -1
- package/_internal/components/{image-lightbox-4a5ab962.js → image-lightbox-58331704.js} +113 -100
- package/_internal/components/{image-lightbox-4a5ab962.js.map → image-lightbox-58331704.js.map} +1 -1
- package/_internal/components/{inline-list-4884f004.js → inline-list-e6f19a98.js} +24 -24
- package/_internal/components/{inline-list-4884f004.js.map → inline-list-e6f19a98.js.map} +1 -1
- package/_internal/components/{input-helper-e644e05e.js → input-helper-64153099.js} +9 -11
- package/_internal/components/{input-helper-e644e05e.js.map → input-helper-64153099.js.map} +1 -1
- package/_internal/components/{input-label-5e509a1b.js → input-label-2feb0bb0.js} +9 -11
- package/_internal/components/{input-label-5e509a1b.js.map → input-label-2feb0bb0.js.map} +1 -1
- package/_internal/components/{lightbox-bec1b95f.js → lightbox-570ad9e5.js} +55 -49
- package/_internal/components/{lightbox-bec1b95f.js.map → lightbox-570ad9e5.js.map} +1 -1
- package/_internal/components/{link-9637b9e4.js → link-91f76477.js} +25 -23
- package/_internal/components/{link-9637b9e4.js.map → link-91f76477.js.map} +1 -1
- package/_internal/components/link-preview-fdd8d738.js +117 -0
- package/_internal/components/{link-preview-7a4a6e4b.js.map → link-preview-fdd8d738.js.map} +1 -1
- package/_internal/components/{list-5c8f7122.js → list-b08d8423.js} +14 -20
- package/_internal/components/{list-5c8f7122.js.map → list-b08d8423.js.map} +1 -1
- package/_internal/components/{message-a67067d9.js → message-29cb9181.js} +24 -24
- package/_internal/components/{message-a67067d9.js.map → message-29cb9181.js.map} +1 -1
- package/_internal/components/{mosaic-92b66c80.js → mosaic-cdb9f563.js} +36 -33
- package/_internal/components/{mosaic-92b66c80.js.map → mosaic-cdb9f563.js.map} +1 -1
- package/_internal/components/navigation-8b7d9bd8.js +225 -0
- package/_internal/components/{navigation-4fd3917d.js.map → navigation-8b7d9bd8.js.map} +1 -1
- package/_internal/components/{notification-9063c963.js → notification-a45fda96.js} +45 -40
- package/_internal/components/{notification-9063c963.js.map → notification-a45fda96.js.map} +1 -1
- package/_internal/components/popover-65bfbc57.js +3 -0
- package/_internal/components/popover-65bfbc57.js.map +1 -0
- package/_internal/components/post-block-52e58dd5.js +109 -0
- package/_internal/components/{post-block-0cfc2206.js.map → post-block-52e58dd5.js.map} +1 -1
- package/_internal/components/{progress-eaf5b33d.js → progress-f39c3fa2.js} +44 -50
- package/_internal/components/{progress-eaf5b33d.js.map → progress-f39c3fa2.js.map} +1 -1
- package/_internal/components/{progress-tracker-4a65718d.js → progress-tracker-512d7a08.js} +59 -63
- package/_internal/components/{progress-tracker-4a65718d.js.map → progress-tracker-512d7a08.js.map} +1 -1
- package/_internal/components/{radio-button-3ef8a325.js → radio-button-559a4863.js} +54 -53
- package/_internal/components/{radio-button-3ef8a325.js.map → radio-button-559a4863.js.map} +1 -1
- package/_internal/components/select-48d4fa8c.js +454 -0
- package/_internal/components/{select-d46cfe35.js.map → select-48d4fa8c.js.map} +1 -1
- package/_internal/components/{side-navigation-75b22f19.js → side-navigation-f9bc5b4e.js} +62 -56
- package/_internal/components/{side-navigation-75b22f19.js.map → side-navigation-f9bc5b4e.js.map} +1 -1
- package/_internal/components/{skeleton-361ce335.js → skeleton-c66516ee.js} +23 -31
- package/_internal/components/{skeleton-361ce335.js.map → skeleton-c66516ee.js.map} +1 -1
- package/_internal/components/{slider-8094cb5c.js → slider-efbfbc45.js} +62 -56
- package/_internal/components/{slider-8094cb5c.js.map → slider-efbfbc45.js.map} +1 -1
- package/_internal/components/{slideshow-2e8cd372.js → slideshow-dd312470.js} +39 -38
- package/_internal/components/{slideshow-2e8cd372.js.map → slideshow-dd312470.js.map} +1 -1
- package/_internal/components/{switch-5516949b.js → switch-769a2a04.js} +49 -45
- package/_internal/components/{switch-5516949b.js.map → switch-769a2a04.js.map} +1 -1
- package/_internal/components/{table-fa198ee6.js → table-8617b1ba.js} +68 -73
- package/_internal/components/{table-fa198ee6.js.map → table-8617b1ba.js.map} +1 -1
- package/_internal/components/{tabs-bb9bc2a5.js → tabs-884c57b6.js} +41 -41
- package/_internal/components/{tabs-bb9bc2a5.js.map → tabs-884c57b6.js.map} +1 -1
- package/_internal/components/text-c7b1e079.js +2 -0
- package/_internal/components/text-c7b1e079.js.map +1 -0
- package/_internal/components/{text-field-82733568.js → text-field-478acd86.js} +116 -103
- package/_internal/components/{text-field-82733568.js.map → text-field-478acd86.js.map} +1 -1
- package/_internal/components/{thumbnail-e3acff82.js → thumbnail-310a4c4b.js} +2 -2
- package/_internal/components/{thumbnail-e3acff82.js.map → thumbnail-310a4c4b.js.map} +1 -1
- package/_internal/components/{toolbar-155562be.js → toolbar-a43533a2.js} +18 -17
- package/_internal/components/{toolbar-155562be.js.map → toolbar-a43533a2.js.map} +1 -1
- package/_internal/components/{tooltip-84ffb4f9.js → tooltip-2885ab2e.js} +44 -35
- package/_internal/components/{tooltip-84ffb4f9.js.map → tooltip-2885ab2e.js.map} +1 -1
- package/_internal/components/{uploader-896a1d89.js → uploader-1e7f5bbb.js} +35 -32
- package/_internal/components/{uploader-896a1d89.js.map → uploader-1e7f5bbb.js.map} +1 -1
- package/_internal/components/{user-block-8fd15895.js → user-block-68a51ed0.js} +43 -41
- package/_internal/components/{user-block-8fd15895.js.map → user-block-68a51ed0.js.map} +1 -1
- package/_internal/{context-21aeb1c7.js → context-9d1336a1.js} +6 -6
- package/_internal/{context-21aeb1c7.js.map → context-9d1336a1.js.map} +1 -1
- package/_internal/{forwardRef-49d2bb84.js → forwardRef-15f62847.js} +2 -12
- package/_internal/{forwardRef-49d2bb84.js.map → forwardRef-15f62847.js.map} +1 -1
- package/_internal/{index-f415b08e.js → index-9df37c0d.js} +45 -39
- package/_internal/{index-f415b08e.js.map → index-9df37c0d.js.map} +1 -1
- package/_internal/{index-b4d256e7.js → index-a9c5cd69.js} +10 -11
- package/_internal/{index-b4d256e7.js.map → index-a9c5cd69.js.map} +1 -1
- package/_internal/{useDisableStateProps-fffc365f.js → useDisableStateProps-69e16b7c.js} +2 -2
- package/_internal/{useDisableStateProps-fffc365f.js.map → useDisableStateProps-69e16b7c.js.map} +1 -1
- package/_internal/{wrapChildrenIconWithSpaces-f86106ce.js → wrapChildrenIconWithSpaces-c1faaae4.js} +2 -2
- package/_internal/{wrapChildrenIconWithSpaces-f86106ce.js.map → wrapChildrenIconWithSpaces-c1faaae4.js.map} +1 -1
- package/index.js +61 -61
- package/package.json +4 -3
- package/utils/index.js +3 -3
- package/_internal/ImageCaption-4279b2b6.js +0 -65
- package/_internal/components/comment-block-b84c4694.js +0 -121
- package/_internal/components/date-picker-a425534c.js +0 -2
- package/_internal/components/date-picker-a425534c.js.map +0 -1
- package/_internal/components/link-preview-7a4a6e4b.js +0 -108
- package/_internal/components/navigation-4fd3917d.js +0 -210
- package/_internal/components/popover-3c4c54bd.js +0 -3
- package/_internal/components/popover-3c4c54bd.js.map +0 -1
- package/_internal/components/post-block-0cfc2206.js +0 -99
- package/_internal/components/select-d46cfe35.js +0 -404
- package/_internal/components/text-289c0526.js +0 -2
- package/_internal/components/text-289c0526.js.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { f as forwardRef,
|
|
1
|
+
import { f as forwardRef, c as classNames } from './forwardRef-15f62847.js';
|
|
2
2
|
import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
4
|
import React__default, { useRef, useEffect, useState, useCallback, useMemo, Children } from 'react';
|
|
4
5
|
import range from 'lodash/range';
|
|
5
6
|
import { mdiChevronLeft, mdiPauseCircleOutline, mdiPlayCircleOutline, mdiChevronRight } from '@lumx/icons';
|
|
@@ -10,7 +11,7 @@ import { u as useRovingTabIndex } from './useRovingTabIndex-7daf0f24.js';
|
|
|
10
11
|
import { u as useTheme } from './ThemeContext-3181f000.js';
|
|
11
12
|
import { detectHorizontalSwipe } from '@lumx/core/js/utils';
|
|
12
13
|
import { Theme, Emphasis } from '@lumx/core/js/constants';
|
|
13
|
-
import { I as IconButton } from './IconButton-
|
|
14
|
+
import { I as IconButton } from './IconButton-f4df224c.js';
|
|
14
15
|
import chunk from 'lodash/chunk';
|
|
15
16
|
import { m as mergeRefs } from './mergeRefs-f0d7d6ea.js';
|
|
16
17
|
import { g as getFocusableElements } from './getFocusableElements-230173a8.js';
|
|
@@ -304,10 +305,6 @@ const useSlideFocusManagement = ({
|
|
|
304
305
|
}, [isSlideDisplayed, slideRef]);
|
|
305
306
|
};
|
|
306
307
|
|
|
307
|
-
/**
|
|
308
|
-
* Defines the props of the component.
|
|
309
|
-
*/
|
|
310
|
-
|
|
311
308
|
/**
|
|
312
309
|
* Component display name.
|
|
313
310
|
*/
|
|
@@ -340,21 +337,19 @@ const SlideshowItemGroup = forwardRef((props, ref) => {
|
|
|
340
337
|
isSlideDisplayed: isDisplayed,
|
|
341
338
|
slideRef: groupRef
|
|
342
339
|
});
|
|
343
|
-
return /*#__PURE__*/
|
|
340
|
+
return /*#__PURE__*/jsx("div", {
|
|
344
341
|
ref: mergeRefs(groupRef, ref),
|
|
345
342
|
role: role,
|
|
346
343
|
className: classNames(className, CLASSNAME$3),
|
|
347
344
|
"aria-roledescription": "slide",
|
|
348
|
-
"aria-label": label
|
|
349
|
-
|
|
345
|
+
"aria-label": label,
|
|
346
|
+
...forwardedProps,
|
|
347
|
+
children: children
|
|
348
|
+
});
|
|
350
349
|
});
|
|
351
350
|
SlideshowItemGroup.displayName = COMPONENT_NAME$3;
|
|
352
351
|
SlideshowItemGroup.className = CLASSNAME$3;
|
|
353
352
|
|
|
354
|
-
/**
|
|
355
|
-
* Defines the props of the component.
|
|
356
|
-
*/
|
|
357
|
-
|
|
358
353
|
/**
|
|
359
354
|
* Component display name.
|
|
360
355
|
*/
|
|
@@ -378,10 +373,12 @@ const SlideshowItem = forwardRef((props, ref) => {
|
|
|
378
373
|
children,
|
|
379
374
|
...forwardedProps
|
|
380
375
|
} = props;
|
|
381
|
-
return /*#__PURE__*/
|
|
376
|
+
return /*#__PURE__*/jsx("div", {
|
|
382
377
|
ref: ref,
|
|
383
|
-
className: classNames(className, CLASSNAME$2)
|
|
384
|
-
|
|
378
|
+
className: classNames(className, CLASSNAME$2),
|
|
379
|
+
...forwardedProps,
|
|
380
|
+
children: children
|
|
381
|
+
});
|
|
385
382
|
});
|
|
386
383
|
SlideshowItem.displayName = COMPONENT_NAME$2;
|
|
387
384
|
SlideshowItem.className = CLASSNAME$2;
|
|
@@ -443,10 +440,6 @@ function usePaginationVisibleRange(activeIndex, slideCount) {
|
|
|
443
440
|
}, [activeIndex, slideCount]);
|
|
444
441
|
}
|
|
445
442
|
|
|
446
|
-
/**
|
|
447
|
-
* Defines the props of the component.
|
|
448
|
-
*/
|
|
449
|
-
|
|
450
443
|
/**
|
|
451
444
|
* Component display name.
|
|
452
445
|
*/
|
|
@@ -523,65 +516,72 @@ const InternalSlideshowControls = forwardRef((props, ref) => {
|
|
|
523
516
|
const wrapperStyle = {
|
|
524
517
|
transform: `translateX(-${PAGINATION_ITEM_SIZE * visibleRange.min}px)`
|
|
525
518
|
};
|
|
526
|
-
return /*#__PURE__*/
|
|
527
|
-
ref: ref
|
|
528
|
-
|
|
519
|
+
return /*#__PURE__*/jsxs("div", {
|
|
520
|
+
ref: ref,
|
|
521
|
+
...forwardedProps,
|
|
529
522
|
className: classNames(className, handleBasicClasses({
|
|
530
523
|
prefix: CLASSNAME$1,
|
|
531
524
|
theme
|
|
532
525
|
}), {
|
|
533
526
|
[`${CLASSNAME$1}--has-infinite-pagination`]: slidesCount > PAGINATION_ITEMS_MAX
|
|
534
|
-
})
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
527
|
+
}),
|
|
528
|
+
children: [/*#__PURE__*/jsx(IconButton, {
|
|
529
|
+
...previousButtonProps,
|
|
530
|
+
icon: mdiChevronLeft,
|
|
531
|
+
className: `${CLASSNAME$1}__navigation`,
|
|
532
|
+
color: theme === Theme.dark ? 'light' : 'dark',
|
|
533
|
+
emphasis: Emphasis.low,
|
|
534
|
+
onClick: onPreviousClick
|
|
535
|
+
}), /*#__PURE__*/jsx("div", {
|
|
536
|
+
ref: paginationRef,
|
|
537
|
+
className: `${CLASSNAME$1}__pagination`,
|
|
538
|
+
children: /*#__PURE__*/jsx("div", {
|
|
539
|
+
className: `${CLASSNAME$1}__pagination-items`,
|
|
540
|
+
style: wrapperStyle,
|
|
541
|
+
role: "tablist",
|
|
542
|
+
...paginationProps,
|
|
543
|
+
children: useMemo(() => range(slidesCount).map(index => {
|
|
544
|
+
const isOnEdge = index !== 0 && index !== slidesCount - 1 && (index === visibleRange.min || index === visibleRange.max);
|
|
545
|
+
const isActive = activeIndex === index;
|
|
546
|
+
const isOutRange = index < visibleRange.min || index > visibleRange.max;
|
|
547
|
+
const {
|
|
548
|
+
className: itemClassName = undefined,
|
|
549
|
+
label = undefined,
|
|
550
|
+
...itemProps
|
|
551
|
+
} = paginationItemProps ? paginationItemProps(index) : {};
|
|
552
|
+
const ariaLabel = label || paginationItemLabel?.(index) || `${index + 1} / ${slidesCount}`;
|
|
553
|
+
return /*#__PURE__*/jsx("button", {
|
|
554
|
+
className: classNames(handleBasicClasses({
|
|
555
|
+
prefix: `${CLASSNAME$1}__pagination-item`,
|
|
556
|
+
isActive,
|
|
557
|
+
isOnEdge,
|
|
558
|
+
isOutRange
|
|
559
|
+
}), itemClassName),
|
|
560
|
+
type: "button",
|
|
561
|
+
tabIndex: isActive ? undefined : -1,
|
|
562
|
+
role: "tab",
|
|
563
|
+
"aria-selected": isActive,
|
|
564
|
+
onClick: () => onPaginationClick?.(index),
|
|
565
|
+
"aria-label": ariaLabel,
|
|
566
|
+
...itemProps
|
|
567
|
+
}, index);
|
|
568
|
+
}), [slidesCount, visibleRange.min, visibleRange.max, activeIndex, paginationItemProps, paginationItemLabel, onPaginationClick])
|
|
569
|
+
})
|
|
570
|
+
}), playButtonProps ? /*#__PURE__*/jsx(IconButton, {
|
|
571
|
+
...playButtonProps,
|
|
572
|
+
icon: isAutoPlaying ? mdiPauseCircleOutline : mdiPlayCircleOutline,
|
|
573
|
+
className: `${CLASSNAME$1}__play`,
|
|
574
|
+
color: theme === Theme.dark ? 'light' : 'dark',
|
|
575
|
+
emphasis: Emphasis.low
|
|
576
|
+
}) : null, /*#__PURE__*/jsx(IconButton, {
|
|
577
|
+
...nextButtonProps,
|
|
578
|
+
icon: mdiChevronRight,
|
|
579
|
+
className: `${CLASSNAME$1}__navigation`,
|
|
580
|
+
color: theme === Theme.dark ? 'light' : 'dark',
|
|
581
|
+
emphasis: Emphasis.low,
|
|
582
|
+
onClick: onNextClick
|
|
583
|
+
})]
|
|
584
|
+
});
|
|
585
585
|
});
|
|
586
586
|
InternalSlideshowControls.displayName = COMPONENT_NAME$1;
|
|
587
587
|
InternalSlideshowControls.className = CLASSNAME$1;
|
|
@@ -638,10 +638,10 @@ const Slides = forwardRef((props, ref) => {
|
|
|
638
638
|
const childrenArray = Children.toArray(children);
|
|
639
639
|
return groupBy && groupBy > 1 ? chunk(childrenArray, groupBy) : childrenArray;
|
|
640
640
|
}, [children, groupBy]);
|
|
641
|
-
return /*#__PURE__*/
|
|
641
|
+
return /*#__PURE__*/jsxs("section", {
|
|
642
642
|
id: id,
|
|
643
|
-
ref: ref
|
|
644
|
-
|
|
643
|
+
ref: ref,
|
|
644
|
+
...forwardedProps,
|
|
645
645
|
className: classNames(className, handleBasicClasses({
|
|
646
646
|
prefix: CLASSNAME,
|
|
647
647
|
theme
|
|
@@ -649,27 +649,30 @@ const Slides = forwardRef((props, ref) => {
|
|
|
649
649
|
[`${CLASSNAME}--fill-height`]: fillHeight,
|
|
650
650
|
[`${CLASSNAME}--group-by-${groupBy}`]: Boolean(groupBy)
|
|
651
651
|
}),
|
|
652
|
-
"aria-roledescription": "carousel"
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
652
|
+
"aria-roledescription": "carousel",
|
|
653
|
+
children: [/*#__PURE__*/jsx("div", {
|
|
654
|
+
id: slidesId,
|
|
655
|
+
className: `${CLASSNAME}__slides`,
|
|
656
|
+
onMouseEnter: toggleAutoPlay,
|
|
657
|
+
onMouseLeave: toggleAutoPlay,
|
|
658
|
+
"aria-live": isAutoPlaying ? 'off' : 'polite',
|
|
659
|
+
children: /*#__PURE__*/jsx("div", {
|
|
660
|
+
ref: wrapperRef,
|
|
661
|
+
className: `${CLASSNAME}__wrapper`,
|
|
662
|
+
style: wrapperStyle,
|
|
663
|
+
children: groups.map((group, index) => /*#__PURE__*/jsx(SlideshowItemGroup, {
|
|
664
|
+
id: slidesId && buildSlideShowGroupId(slidesId, index),
|
|
665
|
+
role: hasControls ? 'tabpanel' : 'group',
|
|
666
|
+
label: slideGroupLabel ? slideGroupLabel(index + 1, groups.length) : undefined,
|
|
667
|
+
isDisplayed: index >= startIndexVisible && index < endIndexVisible,
|
|
668
|
+
children: group
|
|
669
|
+
}, index))
|
|
670
|
+
})
|
|
671
|
+
}), afterSlides]
|
|
672
|
+
});
|
|
670
673
|
});
|
|
671
674
|
Slides.displayName = COMPONENT_NAME;
|
|
672
675
|
Slides.className = CLASSNAME;
|
|
673
676
|
|
|
674
677
|
export { DEFAULT_OPTIONS as D, SlideshowItem as S, SlideshowControls as a, Slides as b, buildSlideShowGroupId as c };
|
|
675
|
-
//# sourceMappingURL=Slides-
|
|
678
|
+
//# sourceMappingURL=Slides-b7a67f32.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slides-01f513ce.js","sources":["../../src/hooks/useInterval.tsx","../../src/components/slideshow/constants.ts","../../src/hooks/useSlideshowControls.ts","../../src/components/slideshow/useSlideFocusManagement.tsx","../../src/components/slideshow/SlideshowItemGroup.tsx","../../src/components/slideshow/SlideshowItem.tsx","../../src/components/slideshow/useSwipeNavigate.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 '@lumx/react/utils/type';\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 } from 'react';\n\nimport { useInterval } from '@lumx/react/hooks/useInterval';\nimport { AUTOPLAY_DEFAULT_INTERVAL } from '@lumx/react/components/slideshow/constants';\nimport { useId } from '@lumx/react/hooks/useId';\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 = {\n activeIndex: 0,\n groupBy: 1,\n interval: AUTOPLAY_DEFAULT_INTERVAL,\n} as const;\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 generatedSlideshowId = useId();\n const slideshowId = id || generatedSlideshowId;\n\n const generatedSlidesId = useId();\n const slideshowSlidesId = slidesId || generatedSlidesId;\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';\nimport { getFocusableElements } from '@lumx/react/utils/browser/focus/getFocusableElements';\n\nexport interface UseSlideFocusManagementProps {\n isSlideDisplayed?: boolean;\n slideRef: React.RefObject<HTMLDivElement>;\n}\n\n/**\n * Classname set on elements whose focus was blocked.\n * This is to easily find elements that have been tempered with,\n * and not elements whose focus was already initially blocked.\n * */\nconst BLOCKED_FOCUS_CLASSNAME = 'focus-blocked';\n\n/**\n * Manage how slides must behave when visible or not.\n * When not visible, they should be hidden from screen readers and not focusable.\n */\nexport const useSlideFocusManagement = ({ isSlideDisplayed, slideRef }: UseSlideFocusManagementProps) => {\n useEffect(() => {\n const element = slideRef?.current;\n\n if (!element) {\n return undefined;\n }\n\n /**\n * Display given slide to screen readers and, if focus was blocked, restore focus on elements.\n */\n const enableSlide = () => {\n // Hide from screen readers\n element.setAttribute('aria-hidden', 'false');\n // Find elements we have blocked focus on\n element.querySelectorAll(`.${BLOCKED_FOCUS_CLASSNAME}`).forEach((focusableElement) => {\n focusableElement.removeAttribute('tabindex');\n focusableElement.classList.remove(BLOCKED_FOCUS_CLASSNAME);\n });\n };\n\n /**\n * Hide given slide from screen readers and block focus on all focusable elements within.\n */\n const blockSlide = () => {\n element.setAttribute('aria-hidden', 'true');\n getFocusableElements(element).forEach((focusableElement) => {\n focusableElement.setAttribute('tabindex', '-1');\n focusableElement.classList.add(BLOCKED_FOCUS_CLASSNAME);\n });\n };\n\n const handleDisplay = () => {\n if (!element) {\n return;\n }\n if (isSlideDisplayed) {\n enableSlide();\n } else {\n blockSlide();\n }\n };\n\n // Callback function to execute when mutations are observed\n const callback: MutationCallback = (mutationsList) => {\n if (element) {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n handleDisplay();\n }\n }\n }\n };\n\n // Create an observer instance linked to the callback function\n const observer = new MutationObserver(callback);\n\n if (element) {\n handleDisplay();\n\n /** If slide is hidden, start observing for elements to block focus */\n if (!isSlideDisplayed) {\n observer.observe(element, { attributes: true, childList: true, subtree: true });\n }\n }\n\n return () => {\n if (!isSlideDisplayed) {\n observer.disconnect();\n }\n };\n }, [isSlideDisplayed, slideRef]);\n};\n","import React from 'react';\n\nimport classNames from 'classnames';\nimport { mergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { GenericProps } from '@lumx/react/utils/type';\nimport { getRootClassName } from '@lumx/core/js/utils/className';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\nimport { useSlideFocusManagement } from './useSlideFocusManagement';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowItemGroupProps extends GenericProps {\n role?: 'tabpanel' | 'group';\n label?: string;\n isDisplayed?: boolean;\n children?: React.ReactNode;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowItemGroup';\n\n/**\n * Component default class name and class prefix.\n */\nexport const CLASSNAME = getRootClassName(COMPONENT_NAME);\n\nexport const buildSlideShowGroupId = (slidesId: string, index: number) => `${slidesId}-slide-${index}`;\n\n/**\n * SlideshowItemGroup component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowItemGroup = forwardRef<SlideshowItemGroupProps, HTMLDivElement>((props, ref) => {\n const { className, children, role = 'group', label, isDisplayed, ...forwardedProps } = props;\n const groupRef = React.useRef<HTMLDivElement>(null);\n\n useSlideFocusManagement({ isSlideDisplayed: isDisplayed, slideRef: groupRef });\n\n return (\n <div\n ref={mergeRefs(groupRef, ref)}\n role={role}\n className={classNames(className, CLASSNAME)}\n aria-roledescription=\"slide\"\n aria-label={label}\n {...forwardedProps}\n >\n {children}\n </div>\n );\n});\n\nSlideshowItemGroup.displayName = COMPONENT_NAME;\nSlideshowItemGroup.className = CLASSNAME;\n","import classNames from 'classnames';\n\nimport { GenericProps } from '@lumx/react/utils/type';\nimport { getRootClassName } from '@lumx/core/js/utils/className';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowItemProps extends GenericProps {\n /** interval in which slides are automatically shown */\n interval?: number;\n /** Children */\n children?: React.ReactNode;\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 = forwardRef<SlideshowItemProps, HTMLDivElement>((props, ref) => {\n const { className, children, ...forwardedProps } = props;\n return (\n <div ref={ref} className={classNames(className, CLASSNAME)} {...forwardedProps}>\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 { 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, { 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 { GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { WINDOW } from '@lumx/react/constants';\nimport { useSlideshowControls, DEFAULT_OPTIONS } from '@lumx/react/hooks/useSlideshowControls';\nimport { useRovingTabIndex } from '@lumx/react/hooks/useRovingTabIndex';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { useSwipeNavigate } from './useSwipeNavigate';\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, HasTheme {\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 /** Props to pass to the pagination wrapper */\n paginationProps?: Omit<React.HTMLAttributes<HTMLDivElement>, 'className' | 'style' | 'role'>;\n /** Number of slides. */\n slidesCount: number;\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 /**\n * function to be executed in order to retrieve the label for the pagination item\n * @deprecated Use paginationItemProps instead.\n * */\n paginationItemLabel?: (index: number) => string;\n /**\n * function to be executed in order to retrieve the props for a pagination item.\n */\n paginationItemProps?: (itemIndex: number) => React.HTMLAttributes<HTMLButtonElement> & { label?: 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};\n\n/**\n * SlideshowControls component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nconst InternalSlideshowControls = forwardRef<SlideshowControlsProps, HTMLDivElement>((props, ref) => {\n const defaultTheme = useTheme() || Theme.light;\n const {\n activeIndex = DEFAULT_PROPS.activeIndex,\n className,\n nextButtonProps,\n onNextClick,\n onPaginationClick,\n onPreviousClick,\n parentRef,\n previousButtonProps,\n paginationProps,\n slidesCount,\n theme = defaultTheme,\n isAutoPlaying = false,\n playButtonProps,\n paginationItemLabel,\n paginationItemProps,\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 const paginationRef = React.useRef(null);\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 /**\n * Add roving tab index pattern to pagination items and activate slide on focus.\n */\n useRovingTabIndex({\n parentRef: paginationRef,\n elementSelector: 'button',\n keepTabIndex: true,\n onElementFocus: (element) => {\n element.click();\n },\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 ref={paginationRef} className={`${CLASSNAME}__pagination`}>\n <div\n className={`${CLASSNAME}__pagination-items`}\n style={wrapperStyle}\n role=\"tablist\"\n {...paginationProps}\n >\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 const {\n className: itemClassName = undefined,\n label = undefined,\n ...itemProps\n } = paginationItemProps ? paginationItemProps(index) : {};\n\n const ariaLabel =\n label || paginationItemLabel?.(index) || `${index + 1} / ${slidesCount}`;\n\n return (\n <button\n className={classNames(\n handleBasicClasses({\n prefix: `${CLASSNAME}__pagination-item`,\n isActive,\n isOnEdge,\n isOutRange,\n }),\n itemClassName,\n )}\n key={index}\n type=\"button\"\n tabIndex={isActive ? undefined : -1}\n role=\"tab\"\n aria-selected={isActive}\n onClick={() => onPaginationClick?.(index)}\n aria-label={ariaLabel}\n {...itemProps}\n />\n );\n }),\n [\n slidesCount,\n visibleRange.min,\n visibleRange.max,\n activeIndex,\n paginationItemProps,\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, { Children, CSSProperties } from 'react';\n\nimport chunk from 'lodash/chunk';\nimport classNames from 'classnames';\n\nimport { FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';\nimport { GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { buildSlideShowGroupId, SlideshowItemGroup } from './SlideshowItemGroup';\n\nexport interface SlidesProps extends GenericProps, HasTheme {\n /** current slide active */\n activeIndex: number;\n /** slides id to be added to the wrapper */\n id?: string;\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 /** Whether the slides have controls linked */\n hasControls?: boolean;\n /**\n * Accessible label to set on a slide group.\n * Receives the group position starting from 1 and the total number of groups.\n * */\n slideGroupLabel?: (groupPosition: number, groupTotal: number) => string;\n /** Children */\n children?: 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 = forwardRef<SlidesProps, HTMLDivElement>((props, ref) => {\n const defaultTheme = useTheme();\n const {\n activeIndex,\n id,\n className,\n theme = defaultTheme,\n fillHeight,\n groupBy,\n isAutoPlaying,\n toggleAutoPlay,\n slidesId,\n children,\n afterSlides,\n hasControls,\n slideGroupLabel,\n ...forwardedProps\n } = props;\n const wrapperRef = React.useRef<HTMLDivElement>(null);\n const startIndexVisible = activeIndex;\n const endIndexVisible = startIndexVisible + 1;\n\n // Inline style of wrapper element.\n const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * activeIndex}%)` };\n\n const groups = React.useMemo(() => {\n const childrenArray = Children.toArray(children);\n return groupBy && groupBy > 1 ? chunk(childrenArray, groupBy) : childrenArray;\n }, [children, groupBy]);\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 ref={wrapperRef} className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>\n {groups.map((group, index) => (\n <SlideshowItemGroup\n key={index}\n id={slidesId && buildSlideShowGroupId(slidesId, index)}\n role={hasControls ? 'tabpanel' : 'group'}\n label={slideGroupLabel ? slideGroupLabel(index + 1, groups.length) : undefined}\n isDisplayed={index >= startIndexVisible && index < endIndexVisible}\n >\n {group}\n </SlideshowItemGroup>\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","currentIndex","setCurrentIndex","useState","element","setElement","slidesCount","Math","ceil","min","goToNextSlide","useCallback","loopback","index","goToPreviousSlide","isAutoPlaying","setIsAutoPlaying","Boolean","isForcePaused","setIsForcePaused","isSlideshowAutoPlaying","startAutoPlay","stopAutoPlay","onPaginationClick","onNextClick","onPreviousClick","generatedSlideshowId","useId","slideshowId","generatedSlidesId","slideshowSlidesId","toggleAutoPlay","toggleForcePause","shouldBePaused","startIndexVisible","endIndexVisible","setSlideshow","slideshow","setActiveIndex","BLOCKED_FOCUS_CLASSNAME","useSlideFocusManagement","isSlideDisplayed","slideRef","enableSlide","setAttribute","querySelectorAll","forEach","focusableElement","removeAttribute","classList","remove","blockSlide","getFocusableElements","add","handleDisplay","mutationsList","mutation","type","observer","MutationObserver","observe","attributes","childList","subtree","disconnect","COMPONENT_NAME","CLASSNAME","getRootClassName","buildSlideShowGroupId","SlideshowItemGroup","forwardRef","props","ref","className","children","role","label","isDisplayed","forwardedProps","groupRef","React","createElement","_extends","mergeRefs","classNames","displayName","SlideshowItem","isTouchDevice","window","useSwipeNavigate","onNext","onPrevious","detectHorizontalSwipe","swipe","usePaginationVisibleRange","slideCount","previousVisibleRangeRef","useMemo","lastSlide","previousVisibleRange","newVisibleRange","max","deltaItems","DEFAULT_PROPS","InternalSlideshowControls","defaultTheme","useTheme","Theme","light","nextButtonProps","parentRef","previousButtonProps","paginationProps","theme","playButtonProps","paginationItemLabel","paginationItemProps","parent","WINDOW","HTMLElement","paginationRef","useRovingTabIndex","elementSelector","keepTabIndex","onElementFocus","click","visibleRange","wrapperStyle","transform","handleBasicClasses","prefix","IconButton","icon","mdiChevronLeft","color","dark","emphasis","Emphasis","low","onClick","style","range","map","isOnEdge","isActive","isOutRange","itemClassName","itemProps","ariaLabel","key","tabIndex","mdiPauseCircleOutline","mdiPlayCircleOutline","mdiChevronRight","defaultProps","SlideshowControls","Object","assign","useSlideshowControlsDefaultOptions","Slides","fillHeight","afterSlides","hasControls","slideGroupLabel","wrapperRef","groups","childrenArray","Children","toArray","chunk","onMouseEnter","onMouseLeave","group","length"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Slides-b7a67f32.js","sources":["../../src/hooks/useInterval.tsx","../../src/components/slideshow/constants.ts","../../src/hooks/useSlideshowControls.ts","../../src/components/slideshow/useSlideFocusManagement.tsx","../../src/components/slideshow/SlideshowItemGroup.tsx","../../src/components/slideshow/SlideshowItem.tsx","../../src/components/slideshow/useSwipeNavigate.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 '@lumx/react/utils/type';\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 } from 'react';\n\nimport { useInterval } from '@lumx/react/hooks/useInterval';\nimport { AUTOPLAY_DEFAULT_INTERVAL } from '@lumx/react/components/slideshow/constants';\nimport { useId } from '@lumx/react/hooks/useId';\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 = {\n activeIndex: 0,\n groupBy: 1,\n interval: AUTOPLAY_DEFAULT_INTERVAL,\n} as const;\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 generatedSlideshowId = useId();\n const slideshowId = id || generatedSlideshowId;\n\n const generatedSlidesId = useId();\n const slideshowSlidesId = slidesId || generatedSlidesId;\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';\nimport { getFocusableElements } from '@lumx/react/utils/browser/focus/getFocusableElements';\n\nexport interface UseSlideFocusManagementProps {\n isSlideDisplayed?: boolean;\n slideRef: React.RefObject<HTMLDivElement>;\n}\n\n/**\n * Classname set on elements whose focus was blocked.\n * This is to easily find elements that have been tempered with,\n * and not elements whose focus was already initially blocked.\n * */\nconst BLOCKED_FOCUS_CLASSNAME = 'focus-blocked';\n\n/**\n * Manage how slides must behave when visible or not.\n * When not visible, they should be hidden from screen readers and not focusable.\n */\nexport const useSlideFocusManagement = ({ isSlideDisplayed, slideRef }: UseSlideFocusManagementProps) => {\n useEffect(() => {\n const element = slideRef?.current;\n\n if (!element) {\n return undefined;\n }\n\n /**\n * Display given slide to screen readers and, if focus was blocked, restore focus on elements.\n */\n const enableSlide = () => {\n // Hide from screen readers\n element.setAttribute('aria-hidden', 'false');\n // Find elements we have blocked focus on\n element.querySelectorAll(`.${BLOCKED_FOCUS_CLASSNAME}`).forEach((focusableElement) => {\n focusableElement.removeAttribute('tabindex');\n focusableElement.classList.remove(BLOCKED_FOCUS_CLASSNAME);\n });\n };\n\n /**\n * Hide given slide from screen readers and block focus on all focusable elements within.\n */\n const blockSlide = () => {\n element.setAttribute('aria-hidden', 'true');\n getFocusableElements(element).forEach((focusableElement) => {\n focusableElement.setAttribute('tabindex', '-1');\n focusableElement.classList.add(BLOCKED_FOCUS_CLASSNAME);\n });\n };\n\n const handleDisplay = () => {\n if (!element) {\n return;\n }\n if (isSlideDisplayed) {\n enableSlide();\n } else {\n blockSlide();\n }\n };\n\n // Callback function to execute when mutations are observed\n const callback: MutationCallback = (mutationsList) => {\n if (element) {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n handleDisplay();\n }\n }\n }\n };\n\n // Create an observer instance linked to the callback function\n const observer = new MutationObserver(callback);\n\n if (element) {\n handleDisplay();\n\n /** If slide is hidden, start observing for elements to block focus */\n if (!isSlideDisplayed) {\n observer.observe(element, { attributes: true, childList: true, subtree: true });\n }\n }\n\n return () => {\n if (!isSlideDisplayed) {\n observer.disconnect();\n }\n };\n }, [isSlideDisplayed, slideRef]);\n};\n","import React from 'react';\n\nimport classNames from 'classnames';\nimport { mergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { GenericProps } from '@lumx/react/utils/type';\nimport { getRootClassName } from '@lumx/core/js/utils/className';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\nimport { useSlideFocusManagement } from './useSlideFocusManagement';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowItemGroupProps extends GenericProps {\n role?: 'tabpanel' | 'group';\n label?: string;\n isDisplayed?: boolean;\n children?: React.ReactNode;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowItemGroup';\n\n/**\n * Component default class name and class prefix.\n */\nexport const CLASSNAME = getRootClassName(COMPONENT_NAME);\n\nexport const buildSlideShowGroupId = (slidesId: string, index: number) => `${slidesId}-slide-${index}`;\n\n/**\n * SlideshowItemGroup component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowItemGroup = forwardRef<SlideshowItemGroupProps, HTMLDivElement>((props, ref) => {\n const { className, children, role = 'group', label, isDisplayed, ...forwardedProps } = props;\n const groupRef = React.useRef<HTMLDivElement>(null);\n\n useSlideFocusManagement({ isSlideDisplayed: isDisplayed, slideRef: groupRef });\n\n return (\n <div\n ref={mergeRefs(groupRef, ref)}\n role={role}\n className={classNames(className, CLASSNAME)}\n aria-roledescription=\"slide\"\n aria-label={label}\n {...forwardedProps}\n >\n {children}\n </div>\n );\n});\n\nSlideshowItemGroup.displayName = COMPONENT_NAME;\nSlideshowItemGroup.className = CLASSNAME;\n","import classNames from 'classnames';\n\nimport { GenericProps } from '@lumx/react/utils/type';\nimport { getRootClassName } from '@lumx/core/js/utils/className';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowItemProps extends GenericProps {\n /** interval in which slides are automatically shown */\n interval?: number;\n /** Children */\n children?: React.ReactNode;\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 = forwardRef<SlideshowItemProps, HTMLDivElement>((props, ref) => {\n const { className, children, ...forwardedProps } = props;\n return (\n <div ref={ref} className={classNames(className, CLASSNAME)} {...forwardedProps}>\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 { 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, { 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 { GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { WINDOW } from '@lumx/react/constants';\nimport { useSlideshowControls, DEFAULT_OPTIONS } from '@lumx/react/hooks/useSlideshowControls';\nimport { useRovingTabIndex } from '@lumx/react/hooks/useRovingTabIndex';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { useSwipeNavigate } from './useSwipeNavigate';\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, HasTheme {\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 /** Props to pass to the pagination wrapper */\n paginationProps?: Omit<React.HTMLAttributes<HTMLDivElement>, 'className' | 'style' | 'role'>;\n /** Number of slides. */\n slidesCount: number;\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 /**\n * function to be executed in order to retrieve the label for the pagination item\n * @deprecated Use paginationItemProps instead.\n * */\n paginationItemLabel?: (index: number) => string;\n /**\n * function to be executed in order to retrieve the props for a pagination item.\n */\n paginationItemProps?: (itemIndex: number) => React.HTMLAttributes<HTMLButtonElement> & { label?: 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};\n\n/**\n * SlideshowControls component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nconst InternalSlideshowControls = forwardRef<SlideshowControlsProps, HTMLDivElement>((props, ref) => {\n const defaultTheme = useTheme() || Theme.light;\n const {\n activeIndex = DEFAULT_PROPS.activeIndex,\n className,\n nextButtonProps,\n onNextClick,\n onPaginationClick,\n onPreviousClick,\n parentRef,\n previousButtonProps,\n paginationProps,\n slidesCount,\n theme = defaultTheme,\n isAutoPlaying = false,\n playButtonProps,\n paginationItemLabel,\n paginationItemProps,\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 const paginationRef = React.useRef(null);\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 /**\n * Add roving tab index pattern to pagination items and activate slide on focus.\n */\n useRovingTabIndex({\n parentRef: paginationRef,\n elementSelector: 'button',\n keepTabIndex: true,\n onElementFocus: (element) => {\n element.click();\n },\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 ref={paginationRef} className={`${CLASSNAME}__pagination`}>\n <div\n className={`${CLASSNAME}__pagination-items`}\n style={wrapperStyle}\n role=\"tablist\"\n {...paginationProps}\n >\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 const {\n className: itemClassName = undefined,\n label = undefined,\n ...itemProps\n } = paginationItemProps ? paginationItemProps(index) : {};\n\n const ariaLabel =\n label || paginationItemLabel?.(index) || `${index + 1} / ${slidesCount}`;\n\n return (\n <button\n className={classNames(\n handleBasicClasses({\n prefix: `${CLASSNAME}__pagination-item`,\n isActive,\n isOnEdge,\n isOutRange,\n }),\n itemClassName,\n )}\n key={index}\n type=\"button\"\n tabIndex={isActive ? undefined : -1}\n role=\"tab\"\n aria-selected={isActive}\n onClick={() => onPaginationClick?.(index)}\n aria-label={ariaLabel}\n {...itemProps}\n />\n );\n }),\n [\n slidesCount,\n visibleRange.min,\n visibleRange.max,\n activeIndex,\n paginationItemProps,\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, { Children, CSSProperties } from 'react';\n\nimport chunk from 'lodash/chunk';\nimport classNames from 'classnames';\n\nimport { FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';\nimport { GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { buildSlideShowGroupId, SlideshowItemGroup } from './SlideshowItemGroup';\n\nexport interface SlidesProps extends GenericProps, HasTheme {\n /** current slide active */\n activeIndex: number;\n /** slides id to be added to the wrapper */\n id?: string;\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 /** Whether the slides have controls linked */\n hasControls?: boolean;\n /**\n * Accessible label to set on a slide group.\n * Receives the group position starting from 1 and the total number of groups.\n * */\n slideGroupLabel?: (groupPosition: number, groupTotal: number) => string;\n /** Children */\n children?: 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 = forwardRef<SlidesProps, HTMLDivElement>((props, ref) => {\n const defaultTheme = useTheme();\n const {\n activeIndex,\n id,\n className,\n theme = defaultTheme,\n fillHeight,\n groupBy,\n isAutoPlaying,\n toggleAutoPlay,\n slidesId,\n children,\n afterSlides,\n hasControls,\n slideGroupLabel,\n ...forwardedProps\n } = props;\n const wrapperRef = React.useRef<HTMLDivElement>(null);\n const startIndexVisible = activeIndex;\n const endIndexVisible = startIndexVisible + 1;\n\n // Inline style of wrapper element.\n const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * activeIndex}%)` };\n\n const groups = React.useMemo(() => {\n const childrenArray = Children.toArray(children);\n return groupBy && groupBy > 1 ? chunk(childrenArray, groupBy) : childrenArray;\n }, [children, groupBy]);\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 ref={wrapperRef} className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>\n {groups.map((group, index) => (\n <SlideshowItemGroup\n key={index}\n id={slidesId && buildSlideShowGroupId(slidesId, index)}\n role={hasControls ? 'tabpanel' : 'group'}\n label={slideGroupLabel ? slideGroupLabel(index + 1, groups.length) : undefined}\n isDisplayed={index >= startIndexVisible && index < endIndexVisible}\n >\n {group}\n </SlideshowItemGroup>\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","currentIndex","setCurrentIndex","useState","element","setElement","slidesCount","Math","ceil","min","goToNextSlide","useCallback","loopback","index","goToPreviousSlide","isAutoPlaying","setIsAutoPlaying","Boolean","isForcePaused","setIsForcePaused","isSlideshowAutoPlaying","startAutoPlay","stopAutoPlay","onPaginationClick","onNextClick","onPreviousClick","generatedSlideshowId","useId","slideshowId","generatedSlidesId","slideshowSlidesId","toggleAutoPlay","toggleForcePause","shouldBePaused","startIndexVisible","endIndexVisible","setSlideshow","slideshow","setActiveIndex","BLOCKED_FOCUS_CLASSNAME","useSlideFocusManagement","isSlideDisplayed","slideRef","enableSlide","setAttribute","querySelectorAll","forEach","focusableElement","removeAttribute","classList","remove","blockSlide","getFocusableElements","add","handleDisplay","mutationsList","mutation","type","observer","MutationObserver","observe","attributes","childList","subtree","disconnect","COMPONENT_NAME","CLASSNAME","getRootClassName","buildSlideShowGroupId","SlideshowItemGroup","forwardRef","props","ref","className","children","role","label","isDisplayed","forwardedProps","groupRef","React","_jsx","mergeRefs","classNames","displayName","SlideshowItem","isTouchDevice","window","useSwipeNavigate","onNext","onPrevious","detectHorizontalSwipe","swipe","usePaginationVisibleRange","slideCount","previousVisibleRangeRef","useMemo","lastSlide","previousVisibleRange","newVisibleRange","max","deltaItems","DEFAULT_PROPS","InternalSlideshowControls","defaultTheme","useTheme","Theme","light","nextButtonProps","parentRef","previousButtonProps","paginationProps","theme","playButtonProps","paginationItemLabel","paginationItemProps","parent","WINDOW","HTMLElement","paginationRef","useRovingTabIndex","elementSelector","keepTabIndex","onElementFocus","click","visibleRange","wrapperStyle","transform","_jsxs","handleBasicClasses","prefix","IconButton","icon","mdiChevronLeft","color","dark","emphasis","Emphasis","low","onClick","style","range","map","isOnEdge","isActive","isOutRange","itemClassName","itemProps","ariaLabel","tabIndex","mdiPauseCircleOutline","mdiPlayCircleOutline","mdiChevronRight","defaultProps","SlideshowControls","Object","assign","useSlideshowControlsDefaultOptions","Slides","fillHeight","afterSlides","hasControls","slideGroupLabel","wrapperRef","groups","childrenArray","Children","toArray","chunk","onMouseEnter","onMouseLeave","group","length"],"mappings":";;;;;;;;;;;;;;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,WAAWA,CAACC,QAAkB,EAAEC,KAAoB,EAAQ;AACxE,EAAA,MAAMC,aAAa,GAAGC,MAAM,EAAY,CAAA;AAExCC,EAAAA,SAAS,CAAC,MAAM;IACZF,aAAa,CAACG,OAAO,GAAGL,QAAQ,CAAA;AACpC,GAAC,CAAC,CAAA;AAEFI,EAAAA,SAAS,CAAC,MAAM;AACZ,IAAA,IAAIH,KAAK,KAAK,IAAI,EAAE,OAAOK,SAAS,CAAA;IAEpC,SAASC,IAAIA,GAAG;AACZ,MAAA,IAAIC,UAAU,CAACN,aAAa,CAACG,OAAO,CAAC,EAAE;QACnCH,aAAa,CAACG,OAAO,EAAE,CAAA;AAC3B,OAAA;AACJ,KAAA;AACA,IAAA,MAAMI,EAAE,GAAGC,WAAW,CAACH,IAAI,EAAEN,KAAK,CAAC,CAAA;AACnC,IAAA,OAAO,MAAMU,aAAa,CAACF,EAAE,CAAC,CAAA;AAClC,GAAC,EAAE,CAACR,KAAK,CAAC,CAAC,CAAA;AACf;;AC9BA;AACA;AACA;AACO,MAAMW,yBAAyB,GAAG,IAAI,CAAA;;AAE7C;AACA;AACA;AACO,MAAMC,kBAAkB,GAAG,GAAG,CAAA;;AAErC;AACA;AACA;AACO,MAAMC,sBAAsB,GAAG,CAAC,CAAA;;AAEvC;AACA;AACA;AACO,MAAMC,oBAAoB,GAAG,CAAC,CAAA;;AAErC;AACA;AACA;AACO,MAAMC,oBAAoB,GAAG,EAAE;;AC6C/B,MAAMC,eAAe,GAAG;AAC3BC,EAAAA,WAAW,EAAE,CAAC;AACdC,EAAAA,OAAO,EAAE,CAAC;AACVC,EAAAA,QAAQ,EAAER,yBAAAA;AACd,EAAU;AAEH,MAAMS,oBAAoB,GAAGA,CAAC;EACjCH,WAAW,GAAGD,eAAe,CAACC,WAAW;EACzCC,OAAO,GAAGF,eAAe,CAACE,OAAO;EACjCC,QAAQ,GAAGH,eAAe,CAACG,QAAQ;EACnCE,QAAQ;EACRC,kBAAkB;EAClBC,QAAQ;EACRC,UAAU;EACVhB,EAAE;AACFiB,EAAAA,QAAAA;AACyB,CAAC,KAA2B;EACrD,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGC,QAAQ,CAACX,WAAqB,CAAC,CAAA;AACvE;EACA,MAAM,CAACY,OAAO,EAAEC,UAAU,CAAC,GAAGF,QAAQ,CAAwB,IAAI,CAAC,CAAA;;AAEnE;AACA,EAAA,MAAMG,WAAW,GAAGC,IAAI,CAACC,IAAI,CAACT,UAAU,GAAGQ,IAAI,CAACE,GAAG,CAAChB,OAAO,EAAYM,UAAU,CAAC,CAAC,CAAA;;AAEnF;EACA,MAAMW,aAAa,GAAGC,WAAW,CAC7B,CAACC,QAAQ,GAAG,IAAI,KAAK;IACjBV,eAAe,CAAEW,KAAK,IAAK;AACvB,MAAA,IAAID,QAAQ,IAAIC,KAAK,KAAKP,WAAW,GAAG,CAAC,EAAE;AACvC;AACA,QAAA,OAAO,CAAC,CAAA;AACZ,OAAA;AACA,MAAA,IAAIO,KAAK,GAAGP,WAAW,GAAG,CAAC,EAAE;AACzB;QACA,OAAOO,KAAK,GAAG,CAAC,CAAA;AACpB,OAAA;AACA,MAAA,OAAOA,KAAK,CAAA;AAChB,KAAC,CAAC,CAAA;AACN,GAAC,EACD,CAACP,WAAW,EAAEJ,eAAe,CACjC,CAAC,CAAA;;AAED;EACA,MAAMY,iBAAiB,GAAGH,WAAW,CACjC,CAACC,QAAQ,GAAG,IAAI,KAAK;IACjBV,eAAe,CAAEW,KAAK,IAAK;AACvB,MAAA,IAAID,QAAQ,IAAIC,KAAK,KAAK,CAAC,EAAE;AACzB;QACA,OAAOP,WAAW,GAAG,CAAC,CAAA;AAC1B,OAAA;MACA,IAAIO,KAAK,GAAG,CAAC,EAAE;AACX;QACA,OAAOA,KAAK,GAAG,CAAC,CAAA;AACpB,OAAA;AACA,MAAA,OAAOA,KAAK,CAAA;AAChB,KAAC,CAAC,CAAA;AACN,GAAC,EACD,CAACP,WAAW,EAAEJ,eAAe,CACjC,CAAC,CAAA;;AAED;AACA,EAAA,MAAM,CAACa,aAAa,EAAEC,gBAAgB,CAAC,GAAGb,QAAQ,CAACc,OAAO,CAACrB,QAAQ,CAAC,CAAC,CAAA;EACrE,MAAM,CAACsB,aAAa,EAAEC,gBAAgB,CAAC,GAAGhB,QAAQ,CAAC,KAAK,CAAC,CAAA;AAEzD,EAAA,MAAMiB,sBAAsB,GAAGF,aAAa,GAAG,KAAK,GAAGH,aAAa,CAAA;AACpE;AACA1C,EAAAA,WAAW,CAACqC,aAAa,EAAEU,sBAAsB,IAAId,WAAW,GAAG,CAAC,GAAIZ,QAAQ,GAAc,IAAI,CAAC,CAAA;;AAEnG;AACAhB,EAAAA,SAAS,CAAC,MAAM;AACZ,IAAA,IAAIuB,YAAY,GAAGK,WAAW,GAAG,CAAC,EAAE;MAChCJ,eAAe,CAACL,kBAA4B,CAAC,CAAA;AACjD,KAAA;GACH,EAAE,CAACI,YAAY,EAAEK,WAAW,EAAET,kBAAkB,CAAC,CAAC,CAAA;EAEnD,MAAMwB,aAAa,GAAGA,MAAM;AACxBL,IAAAA,gBAAgB,CAACC,OAAO,CAACrB,QAAQ,CAAC,CAAC,CAAA;GACtC,CAAA;EAED,MAAM0B,YAAY,GAAGA,MAAM;IACvBN,gBAAgB,CAAC,KAAK,CAAC,CAAA;GAC1B,CAAA;;AAED;AACA,EAAA,MAAMO,iBAAiB,GAAGZ,WAAW,CAChCE,KAAa,IAAK;AACfS,IAAAA,YAAY,EAAE,CAAA;IACdH,gBAAgB,CAAC,IAAI,CAAC,CAAA;AAEtB,IAAA,IAAIN,KAAK,IAAI,CAAC,IAAIA,KAAK,GAAGP,WAAW,EAAE;MACnCJ,eAAe,CAACW,KAAK,CAAC,CAAA;AAC1B,KAAA;AACJ,GAAC,EACD,CAACP,WAAW,EAAEJ,eAAe,CACjC,CAAC,CAAA;;AAED;EACA,MAAMsB,WAAW,GAAGb,WAAW,CAC3B,CAACC,QAAQ,GAAG,IAAI,KAAK;AACjBU,IAAAA,YAAY,EAAE,CAAA;IACdH,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACtBT,aAAa,CAACE,QAAQ,CAAC,CAAA;AAC3B,GAAC,EACD,CAACF,aAAa,CAClB,CAAC,CAAA;;AAED;EACA,MAAMe,eAAe,GAAGd,WAAW,CAC/B,CAACC,QAAQ,GAAG,IAAI,KAAK;AACjBU,IAAAA,YAAY,EAAE,CAAA;IACdH,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACtBL,iBAAiB,CAACF,QAAQ,CAAC,CAAA;AAC/B,GAAC,EACD,CAACE,iBAAiB,CACtB,CAAC,CAAA;;AAED;AACApC,EAAAA,SAAS,CAAC,MAAM;IACZwB,eAAe,CAACV,WAAqB,CAAC,CAAA;AAC1C,GAAC,EAAE,CAACA,WAAW,CAAC,CAAC,CAAA;;AAEjB;AACAd,EAAAA,SAAS,CAAC,MAAM;IACZ,IAAI,CAACoB,QAAQ,EAAE,OAAA;IACfA,QAAQ,CAACG,YAAY,CAAC,CAAA;AAC1B,GAAC,EAAE,CAACA,YAAY,EAAEH,QAAQ,CAAC,CAAC,CAAA;AAE5B,EAAA,MAAM4B,oBAAoB,GAAGC,KAAK,EAAE,CAAA;AACpC,EAAA,MAAMC,WAAW,GAAG7C,EAAE,IAAI2C,oBAAoB,CAAA;AAE9C,EAAA,MAAMG,iBAAiB,GAAGF,KAAK,EAAE,CAAA;AACjC,EAAA,MAAMG,iBAAiB,GAAG9B,QAAQ,IAAI6B,iBAAiB,CAAA;EAEvD,MAAME,cAAc,GAAGA,MAAM;AACzB,IAAA,IAAIX,sBAAsB,EAAE;AACxBE,MAAAA,YAAY,EAAE,CAAA;AAClB,KAAC,MAAM;AACHD,MAAAA,aAAa,EAAE,CAAA;AACnB,KAAA;GACH,CAAA;EAED,MAAMW,gBAAgB,GAAGA,MAAM;IAC3B,MAAMC,cAAc,GAAG,CAACf,aAAa,CAAA;IAErCC,gBAAgB,CAACc,cAAc,CAAC,CAAA;IAEhC,IAAI,CAACA,cAAc,EAAE;AACjBZ,MAAAA,aAAa,EAAE,CAAA;AACnB,KAAC,MAAM;AACHC,MAAAA,YAAY,EAAE,CAAA;AAClB,KAAA;GACH,CAAA;;AAED;AACA,EAAA,MAAMY,iBAAiB,GAAGjC,YAAY,GAAIR,OAAkB,CAAA;AAC5D,EAAA,MAAM0C,eAAe,GAAGD,iBAAiB,GAAIzC,OAAkB,CAAA;EAE/D,OAAO;IACHyC,iBAAiB;IACjBC,eAAe;AACfC,IAAAA,YAAY,EAAE/B,UAAU;AACxBgC,IAAAA,SAAS,EAAEjC,OAAO;IAClBwB,WAAW;IACXE,iBAAiB;IACjBL,eAAe;IACfD,WAAW;IACXD,iBAAiB;AACjBR,IAAAA,aAAa,EAAEK,sBAAsB;IACrCW,cAAc;AACdvC,IAAAA,WAAW,EAAES,YAAY;IACzBK,WAAW;AACXgC,IAAAA,cAAc,EAAEpC,eAAe;IAC/BmB,aAAa;IACbC,YAAY;IACZJ,aAAa;AACbc,IAAAA,gBAAAA;GACH,CAAA;AACL,CAAC;;AC7OD;AACA;AACA;AACA;AACA;AACA,MAAMO,uBAAuB,GAAG,eAAe,CAAA;;AAE/C;AACA;AACA;AACA;AACO,MAAMC,uBAAuB,GAAGA,CAAC;EAAEC,gBAAgB;AAAEC,EAAAA,QAAAA;AAAuC,CAAC,KAAK;AACrGhE,EAAAA,SAAS,CAAC,MAAM;AACZ,IAAA,MAAM0B,OAAO,GAAGsC,QAAQ,EAAE/D,OAAO,CAAA;IAEjC,IAAI,CAACyB,OAAO,EAAE;AACV,MAAA,OAAOxB,SAAS,CAAA;AACpB,KAAA;;AAEA;AACR;AACA;IACQ,MAAM+D,WAAW,GAAGA,MAAM;AACtB;AACAvC,MAAAA,OAAO,CAACwC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;AAC5C;MACAxC,OAAO,CAACyC,gBAAgB,CAAC,CAAIN,CAAAA,EAAAA,uBAAuB,CAAE,CAAA,CAAC,CAACO,OAAO,CAAEC,gBAAgB,IAAK;AAClFA,QAAAA,gBAAgB,CAACC,eAAe,CAAC,UAAU,CAAC,CAAA;AAC5CD,QAAAA,gBAAgB,CAACE,SAAS,CAACC,MAAM,CAACX,uBAAuB,CAAC,CAAA;AAC9D,OAAC,CAAC,CAAA;KACL,CAAA;;AAED;AACR;AACA;IACQ,MAAMY,UAAU,GAAGA,MAAM;AACrB/C,MAAAA,OAAO,CAACwC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;AAC3CQ,MAAAA,oBAAoB,CAAChD,OAAO,CAAC,CAAC0C,OAAO,CAAEC,gBAAgB,IAAK;AACxDA,QAAAA,gBAAgB,CAACH,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AAC/CG,QAAAA,gBAAgB,CAACE,SAAS,CAACI,GAAG,CAACd,uBAAuB,CAAC,CAAA;AAC3D,OAAC,CAAC,CAAA;KACL,CAAA;IAED,MAAMe,aAAa,GAAGA,MAAM;MACxB,IAAI,CAAClD,OAAO,EAAE;AACV,QAAA,OAAA;AACJ,OAAA;AACA,MAAA,IAAIqC,gBAAgB,EAAE;AAClBE,QAAAA,WAAW,EAAE,CAAA;AACjB,OAAC,MAAM;AACHQ,QAAAA,UAAU,EAAE,CAAA;AAChB,OAAA;KACH,CAAA;;AAED;IACA,MAAM7E,QAA0B,GAAIiF,aAAa,IAAK;AAClD,MAAA,IAAInD,OAAO,EAAE;AACT,QAAA,KAAK,MAAMoD,QAAQ,IAAID,aAAa,EAAE;AAClC,UAAA,IAAIC,QAAQ,CAACC,IAAI,KAAK,WAAW,EAAE;AAC/BH,YAAAA,aAAa,EAAE,CAAA;AACnB,WAAA;AACJ,SAAA;AACJ,OAAA;KACH,CAAA;;AAED;AACA,IAAA,MAAMI,QAAQ,GAAG,IAAIC,gBAAgB,CAACrF,QAAQ,CAAC,CAAA;AAE/C,IAAA,IAAI8B,OAAO,EAAE;AACTkD,MAAAA,aAAa,EAAE,CAAA;;AAEf;MACA,IAAI,CAACb,gBAAgB,EAAE;AACnBiB,QAAAA,QAAQ,CAACE,OAAO,CAACxD,OAAO,EAAE;AAAEyD,UAAAA,UAAU,EAAE,IAAI;AAAEC,UAAAA,SAAS,EAAE,IAAI;AAAEC,UAAAA,OAAO,EAAE,IAAA;AAAK,SAAC,CAAC,CAAA;AACnF,OAAA;AACJ,KAAA;AAEA,IAAA,OAAO,MAAM;MACT,IAAI,CAACtB,gBAAgB,EAAE;QACnBiB,QAAQ,CAACM,UAAU,EAAE,CAAA;AACzB,OAAA;KACH,CAAA;AACL,GAAC,EAAE,CAACvB,gBAAgB,EAAEC,QAAQ,CAAC,CAAC,CAAA;AACpC,CAAC;;ACxED;AACA;AACA;AACA,MAAMuB,gBAAc,GAAG,oBAAoB,CAAA;;AAE3C;AACA;AACA;AACO,MAAMC,WAAS,GAAGC,gBAAgB,CAACF,gBAAc,CAAC,CAAA;AAE5CG,MAAAA,qBAAqB,GAAGA,CAACpE,QAAgB,EAAEa,KAAa,KAAK,CAAGb,EAAAA,QAAQ,CAAUa,OAAAA,EAAAA,KAAK,CAAE,EAAA;;AAEtG;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMwD,kBAAkB,GAAGC,UAAU,CAA0C,CAACC,KAAK,EAAEC,GAAG,KAAK;EAClG,MAAM;IAAEC,SAAS;IAAEC,QAAQ;AAAEC,IAAAA,IAAI,GAAG,OAAO;IAAEC,KAAK;IAAEC,WAAW;IAAE,GAAGC,cAAAA;AAAe,GAAC,GAAGP,KAAK,CAAA;AAC5F,EAAA,MAAMQ,QAAQ,GAAGC,cAAK,CAACvG,MAAM,CAAiB,IAAI,CAAC,CAAA;AAEnD+D,EAAAA,uBAAuB,CAAC;AAAEC,IAAAA,gBAAgB,EAAEoC,WAAW;AAAEnC,IAAAA,QAAQ,EAAEqC,QAAAA;AAAS,GAAC,CAAC,CAAA;AAE9E,EAAA,oBACIE,GAAA,CAAA,KAAA,EAAA;AACIT,IAAAA,GAAG,EAAEU,SAAS,CAACH,QAAQ,EAAEP,GAAG,CAAE;AAC9BG,IAAAA,IAAI,EAAEA,IAAK;AACXF,IAAAA,SAAS,EAAEU,UAAU,CAACV,SAAS,EAAEP,WAAS,CAAE;AAC5C,IAAA,sBAAA,EAAqB,OAAO;AAC5B,IAAA,YAAA,EAAYU,KAAM;AAAA,IAAA,GACdE,cAAc;AAAAJ,IAAAA,QAAA,EAEjBA,QAAAA;AAAQ,GACR,CAAC,CAAA;AAEd,CAAC,CAAC,CAAA;AAEFL,kBAAkB,CAACe,WAAW,GAAGnB,gBAAc,CAAA;AAC/CI,kBAAkB,CAACI,SAAS,GAAGP,WAAS;;AC3CxC;AACA;AACA;AACA,MAAMD,gBAAc,GAAG,eAAe,CAAA;;AAEtC;AACA;AACA;AACA,MAAMC,WAAS,GAAGC,gBAAgB,CAACF,gBAAc,CAAC,CAAA;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMoB,aAAa,GAAGf,UAAU,CAAqC,CAACC,KAAK,EAAEC,GAAG,KAAK;EACxF,MAAM;IAAEC,SAAS;IAAEC,QAAQ;IAAE,GAAGI,cAAAA;AAAe,GAAC,GAAGP,KAAK,CAAA;AACxD,EAAA,oBACIU,GAAA,CAAA,KAAA,EAAA;AAAKT,IAAAA,GAAG,EAAEA,GAAI;AAACC,IAAAA,SAAS,EAAEU,UAAU,CAACV,SAAS,EAAEP,WAAS,CAAE;AAAA,IAAA,GAAKY,cAAc;AAAAJ,IAAAA,QAAA,EACzEA,QAAAA;AAAQ,GACR,CAAC,CAAA;AAEd,CAAC,EAAC;AAEFW,aAAa,CAACD,WAAW,GAAGnB,gBAAc,CAAA;AAC1CoB,aAAa,CAACZ,SAAS,GAAGP,WAAS;;ACxCnC,MAAMoB,aAAa,GAAGA,MAAM,cAAc,IAAIC,MAAM,CAAA;;AAEpD;AACA;AACA;AACO,SAASC,gBAAgBA,CAACpF,OAA4B,EAAEqF,MAAmB,EAAEC,UAAuB,EAAQ;AAC/GhH,EAAAA,SAAS,CAAC,MAAM;IACZ,IAAI,CAAC0B,OAAO,IAAI,CAACkF,aAAa,EAAE,EAAE,OAAO1G,SAAS,CAAA;AAElD,IAAA,OAAO+G,qBAAqB,CAACvF,OAAO,EAAGwF,KAAK,IAAK;MAC7C,MAAMtH,QAAQ,GAAGsH,KAAK,KAAK,OAAO,GAAGF,UAAU,GAAGD,MAAM,CAAA;AACxDnH,MAAAA,QAAQ,IAAI,CAAA;AAChB,KAAC,CAAC,CAAA;GACL,EAAE,CAACoH,UAAU,EAAED,MAAM,EAAErF,OAAO,CAAC,CAAC,CAAA;AACrC;;ACZA;AACA;AACA;AACO,SAASyF,yBAAyBA,CAACrG,WAAmB,EAAEsG,UAAkB,EAAS;AACtF,EAAA,MAAMC,uBAAuB,GAAGtH,MAAM,EAAS,CAAA;EAC/C,OAAOuH,OAAO,CAAC,MAAM;AACjB,IAAA,MAAMC,SAAS,GAAGH,UAAU,GAAG,CAAC,CAAA;IAChC,MAAM;AAAEnH,MAAAA,OAAO,EAAEuH,oBAAAA;AAAqB,KAAC,GAAGH,uBAAuB,CAAA;AACjE,IAAA,IAAII,eAAsB,CAAA;IAC1B,IAAI3G,WAAW,KAAK0G,oBAAoB,EAAEE,GAAG,IAAI5G,WAAW,GAAGyG,SAAS,EAAE;AACtEE,MAAAA,eAAe,GAAG;AAAE1F,QAAAA,GAAG,EAAEyF,oBAAoB,CAACzF,GAAG,GAAG,CAAC;AAAE2F,QAAAA,GAAG,EAAEF,oBAAoB,CAACE,GAAG,GAAG,CAAA;OAAG,CAAA;KAC7F,MAAM,IAAI5G,WAAW,KAAK0G,oBAAoB,EAAEzF,GAAG,IAAIjB,WAAW,GAAG,CAAC,EAAE;AACrE2G,MAAAA,eAAe,GAAG;AAAE1F,QAAAA,GAAG,EAAEyF,oBAAoB,CAACzF,GAAG,GAAG,CAAC;AAAE2F,QAAAA,GAAG,EAAEF,oBAAoB,CAACE,GAAG,GAAG,CAAA;OAAG,CAAA;AAC9F,KAAC,MAAM;AACH,MAAA,MAAMC,UAAU,GAAGhH,oBAAoB,GAAG,CAAC,CAAA;AAC3C,MAAA,IAAIoB,GAAG,GAAGjB,WAAW,GAAGJ,sBAAsB,CAAA;AAC9C,MAAA,IAAIgH,GAAG,GAAG5G,WAAW,GAAGJ,sBAAsB,CAAA;AAE9C,MAAA,IAAII,WAAW,GAAGyG,SAAS,GAAG7G,sBAAsB,EAAE;QAClDqB,GAAG,GAAGwF,SAAS,GAAGI,UAAU,CAAA;AAC5BD,QAAAA,GAAG,GAAGH,SAAS,CAAA;AACnB,OAAC,MAAM,IAAIzG,WAAW,GAAG6G,UAAU,EAAE;AACjC5F,QAAAA,GAAG,GAAG,CAAC,CAAA;AACP2F,QAAAA,GAAG,GAAGC,UAAU,CAAA;AACpB,OAAA;AAEAF,MAAAA,eAAe,GAAG;QAAE1F,GAAG;AAAE2F,QAAAA,GAAAA;OAAK,CAAA;AAClC,KAAA;IACAL,uBAAuB,CAACpH,OAAO,GAAGwH,eAAe,CAAA;AACjD,IAAA,OAAOA,eAAe,CAAA;AAC1B,GAAC,EAAE,CAAC3G,WAAW,EAAEsG,UAAU,CAAC,CAAC,CAAA;AACjC;;ACuBA;AACA;AACA;AACA,MAAM7B,gBAAc,GAAG,mBAAmB,CAAA;;AAE1C;AACA;AACA;AACA,MAAMC,WAAS,GAAGC,gBAAgB,CAACF,gBAAc,CAAC,CAAA;;AAElD;AACA;AACA;AACA,MAAMqC,aAA8C,GAAG;AACnD9G,EAAAA,WAAW,EAAE,CAAA;AACjB,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM+G,yBAAyB,GAAGjC,UAAU,CAAyC,CAACC,KAAK,EAAEC,GAAG,KAAK;EACjG,MAAMgC,YAAY,GAAGC,QAAQ,EAAE,IAAIC,KAAK,CAACC,KAAK,CAAA;EAC9C,MAAM;IACFnH,WAAW,GAAG8G,aAAa,CAAC9G,WAAW;IACvCiF,SAAS;IACTmC,eAAe;IACfpF,WAAW;IACXD,iBAAiB;IACjBE,eAAe;IACfoF,SAAS;IACTC,mBAAmB;IACnBC,eAAe;IACfzG,WAAW;AACX0G,IAAAA,KAAK,GAAGR,YAAY;AACpBzF,IAAAA,aAAa,GAAG,KAAK;IACrBkG,eAAe;IACfC,mBAAmB;IACnBC,mBAAmB;IACnB,GAAGrC,cAAAA;AACP,GAAC,GAAGP,KAAK,CAAA;AAET,EAAA,IAAI6C,MAAM,CAAA;AACV,EAAA,IAAIC,MAAM,EAAE;AACR;IACAD,MAAM,GAAGP,SAAS,YAAYS,WAAW,GAAGT,SAAS,GAAGA,SAAS,EAAElI,OAAO,CAAA;AAC9E,GAAA;AACA,EAAA,MAAM4I,aAAa,GAAGvC,cAAK,CAACvG,MAAM,CAAC,IAAI,CAAC,CAAA;AACxC;AACA+G,EAAAA,gBAAgB,CACZ4B,MAAM;AACN;EACAzG,WAAW,CAAC,MAAMa,WAAW,GAAG,KAAK,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;AACtD;EACAb,WAAW,CAAC,MAAMc,eAAe,GAAG,KAAK,CAAC,EAAE,CAACA,eAAe,CAAC,CACjE,CAAC,CAAA;;AAED;AACJ;AACA;AACI+F,EAAAA,iBAAiB,CAAC;AACdX,IAAAA,SAAS,EAAEU,aAAa;AACxBE,IAAAA,eAAe,EAAE,QAAQ;AACzBC,IAAAA,YAAY,EAAE,IAAI;IAClBC,cAAc,EAAGvH,OAAO,IAAK;MACzBA,OAAO,CAACwH,KAAK,EAAE,CAAA;AACnB,KAAA;AACJ,GAAC,CAAC,CAAA;;AAEF;AACA,EAAA,MAAMC,YAAY,GAAGhC,yBAAyB,CAACrG,WAAW,EAAYc,WAAW,CAAC,CAAA;;AAElF;AACA,EAAA,MAAMwH,YAAY,GAAG;AAAEC,IAAAA,SAAS,EAAE,CAAezI,YAAAA,EAAAA,oBAAoB,GAAGuI,YAAY,CAACpH,GAAG,CAAA,GAAA,CAAA;GAAO,CAAA;AAE/F,EAAA,oBACIuH,IAAA,CAAA,KAAA,EAAA;AACIxD,IAAAA,GAAG,EAAEA,GAAI;AAAA,IAAA,GACLM,cAAc;AAClBL,IAAAA,SAAS,EAAEU,UAAU,CAACV,SAAS,EAAEwD,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAEhE,WAAS;AAAE8C,MAAAA,KAAAA;AAAM,KAAC,CAAC,EAAE;AAC/E,MAAA,CAAC,CAAG9C,EAAAA,WAAS,CAA2B,yBAAA,CAAA,GAAG5D,WAAW,GAAGjB,oBAAAA;AAC7D,KAAC,CAAE;IAAAqF,QAAA,EAAA,cAEHO,GAAA,CAACkD,UAAU,EAAA;AAAA,MAAA,GACHrB,mBAAmB;AACvBsB,MAAAA,IAAI,EAAEC,cAAe;MACrB5D,SAAS,EAAE,CAAGP,EAAAA,WAAS,CAAe,YAAA,CAAA;MACtCoE,KAAK,EAAEtB,KAAK,KAAKN,KAAK,CAAC6B,IAAI,GAAG,OAAO,GAAG,MAAO;MAC/CC,QAAQ,EAAEC,QAAQ,CAACC,GAAI;AACvBC,MAAAA,OAAO,EAAElH,eAAAA;KACZ,CAAC,eACFwD,GAAA,CAAA,KAAA,EAAA;AAAKT,MAAAA,GAAG,EAAE+C,aAAc;MAAC9C,SAAS,EAAE,CAAGP,EAAAA,WAAS,CAAe,YAAA,CAAA;AAAAQ,MAAAA,QAAA,eAC3DO,GAAA,CAAA,KAAA,EAAA;QACIR,SAAS,EAAE,CAAGP,EAAAA,WAAS,CAAqB,kBAAA,CAAA;AAC5C0E,QAAAA,KAAK,EAAEd,YAAa;AACpBnD,QAAAA,IAAI,EAAC,SAAS;AAAA,QAAA,GACVoC,eAAe;AAAArC,QAAAA,QAAA,EAElBsB,OAAO,CACJ,MACI6C,KAAK,CAACvI,WAAW,CAAC,CAACwI,GAAG,CAAEjI,KAAK,IAAK;UAC9B,MAAMkI,QAAQ,GACVlI,KAAK,KAAK,CAAC,IACXA,KAAK,KAAKP,WAAW,GAAG,CAAC,KACxBO,KAAK,KAAKgH,YAAY,CAACpH,GAAG,IAAII,KAAK,KAAKgH,YAAY,CAACzB,GAAG,CAAC,CAAA;AAC9D,UAAA,MAAM4C,QAAQ,GAAGxJ,WAAW,KAAKqB,KAAK,CAAA;AACtC,UAAA,MAAMoI,UAAU,GAAGpI,KAAK,GAAGgH,YAAY,CAACpH,GAAG,IAAII,KAAK,GAAGgH,YAAY,CAACzB,GAAG,CAAA;UACvE,MAAM;YACF3B,SAAS,EAAEyE,aAAa,GAAGtK,SAAS;AACpCgG,YAAAA,KAAK,GAAGhG,SAAS;YACjB,GAAGuK,SAAAA;WACN,GAAGhC,mBAAmB,GAAGA,mBAAmB,CAACtG,KAAK,CAAC,GAAG,EAAE,CAAA;AAEzD,UAAA,MAAMuI,SAAS,GACXxE,KAAK,IAAIsC,mBAAmB,GAAGrG,KAAK,CAAC,IAAI,GAAGA,KAAK,GAAG,CAAC,CAAA,GAAA,EAAMP,WAAW,CAAE,CAAA,CAAA;AAE5E,UAAA,oBACI2E,GAAA,CAAA,QAAA,EAAA;AACIR,YAAAA,SAAS,EAAEU,UAAU,CACjB8C,kBAAkB,CAAC;cACfC,MAAM,EAAE,CAAGhE,EAAAA,WAAS,CAAmB,iBAAA,CAAA;cACvC8E,QAAQ;cACRD,QAAQ;AACRE,cAAAA,UAAAA;aACH,CAAC,EACFC,aACJ,CAAE;AAEFzF,YAAAA,IAAI,EAAC,QAAQ;AACb4F,YAAAA,QAAQ,EAAEL,QAAQ,GAAGpK,SAAS,GAAG,CAAC,CAAE;AACpC+F,YAAAA,IAAI,EAAC,KAAK;AACV,YAAA,eAAA,EAAeqE,QAAS;AACxBL,YAAAA,OAAO,EAAEA,MAAMpH,iBAAiB,GAAGV,KAAK,CAAE;AAC1C,YAAA,YAAA,EAAYuI,SAAU;YAAA,GAClBD,SAAAA;AAAS,WAAA,EAPRtI,KAQR,CAAC,CAAA;SAET,CAAC,EACN,CACIP,WAAW,EACXuH,YAAY,CAACpH,GAAG,EAChBoH,YAAY,CAACzB,GAAG,EAChB5G,WAAW,EACX2H,mBAAmB,EACnBD,mBAAmB,EACnB3F,iBAAiB,CAEzB,CAAA;OACC,CAAA;AAAC,KACL,CAAC,EAEL0F,eAAe,gBACZhC,GAAA,CAACkD,UAAU,EAAA;AAAA,MAAA,GACHlB,eAAe;AACnBmB,MAAAA,IAAI,EAAErH,aAAa,GAAGuI,qBAAqB,GAAGC,oBAAqB;MACnE9E,SAAS,EAAE,CAAGP,EAAAA,WAAS,CAAS,MAAA,CAAA;MAChCoE,KAAK,EAAEtB,KAAK,KAAKN,KAAK,CAAC6B,IAAI,GAAG,OAAO,GAAG,MAAO;MAC/CC,QAAQ,EAAEC,QAAQ,CAACC,GAAAA;AAAI,KAC1B,CAAC,GACF,IAAI,eAERzD,GAAA,CAACkD,UAAU,EAAA;AAAA,MAAA,GACHvB,eAAe;AACnBwB,MAAAA,IAAI,EAAEoB,eAAgB;MACtB/E,SAAS,EAAE,CAAGP,EAAAA,WAAS,CAAe,YAAA,CAAA;MACtCoE,KAAK,EAAEtB,KAAK,KAAKN,KAAK,CAAC6B,IAAI,GAAG,OAAO,GAAG,MAAO;MAC/CC,QAAQ,EAAEC,QAAQ,CAACC,GAAI;AACvBC,MAAAA,OAAO,EAAEnH,WAAAA;AAAY,KACxB,CAAC,CAAA;AAAA,GACD,CAAC,CAAA;AAEd,CAAC,CAAC,CAAA;AAEF+E,yBAAyB,CAACnB,WAAW,GAAGnB,gBAAc,CAAA;AACtDsC,yBAAyB,CAAC9B,SAAS,GAAGP,WAAS,CAAA;AAC/CqC,yBAAyB,CAACkD,YAAY,GAAGnD,aAAa,CAAA;AAE/C,MAAMoD,iBAAiB,GAAGC,MAAM,CAACC,MAAM,CAACrD,yBAAyB,EAAE;EACtE5G,oBAAoB;AACpBkK,EAAAA,kCAAkC,EAAEtK,eAAAA;AACxC,CAAC;;ACvMD;AACA;AACA;AACA,MAAM0E,cAAc,GAAG,WAAW,CAAA;;AAElC;AACA;AACA;AACA,MAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAc,CAAC,CAAA;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM6F,MAAM,GAAGxF,UAAU,CAA8B,CAACC,KAAK,EAAEC,GAAG,KAAK;AAC1E,EAAA,MAAMgC,YAAY,GAAGC,QAAQ,EAAE,CAAA;EAC/B,MAAM;IACFjH,WAAW;IACXT,EAAE;IACF0F,SAAS;AACTuC,IAAAA,KAAK,GAAGR,YAAY;IACpBuD,UAAU;IACVtK,OAAO;IACPsB,aAAa;IACbgB,cAAc;IACd/B,QAAQ;IACR0E,QAAQ;IACRsF,WAAW;IACXC,WAAW;IACXC,eAAe;IACf,GAAGpF,cAAAA;AACP,GAAC,GAAGP,KAAK,CAAA;AACT,EAAA,MAAM4F,UAAU,GAAGnF,cAAK,CAACvG,MAAM,CAAiB,IAAI,CAAC,CAAA;EACrD,MAAMyD,iBAAiB,GAAG1C,WAAW,CAAA;AACrC,EAAA,MAAM2C,eAAe,GAAGD,iBAAiB,GAAG,CAAC,CAAA;;AAE7C;AACA,EAAA,MAAM4F,YAA2B,GAAG;AAAEC,IAAAA,SAAS,EAAE,CAAA,YAAA,EAAe5I,kBAAkB,GAAGK,WAAW,CAAA,EAAA,CAAA;GAAM,CAAA;AAEtG,EAAA,MAAM4K,MAAM,GAAGpF,cAAK,CAACgB,OAAO,CAAC,MAAM;AAC/B,IAAA,MAAMqE,aAAa,GAAGC,QAAQ,CAACC,OAAO,CAAC7F,QAAQ,CAAC,CAAA;AAChD,IAAA,OAAOjF,OAAO,IAAIA,OAAO,GAAG,CAAC,GAAG+K,KAAK,CAACH,aAAa,EAAE5K,OAAO,CAAC,GAAG4K,aAAa,CAAA;AACjF,GAAC,EAAE,CAAC3F,QAAQ,EAAEjF,OAAO,CAAC,CAAC,CAAA;AAEvB,EAAA,oBACIuI,IAAA,CAAA,SAAA,EAAA;AACIjJ,IAAAA,EAAE,EAAEA,EAAG;AACPyF,IAAAA,GAAG,EAAEA,GAAI;AAAA,IAAA,GACLM,cAAc;AAClBL,IAAAA,SAAS,EAAEU,UAAU,CAACV,SAAS,EAAEwD,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAEhE,SAAS;AAAE8C,MAAAA,KAAAA;AAAM,KAAC,CAAC,EAAE;AAC/E,MAAA,CAAC,CAAG9C,EAAAA,SAAS,CAAe,aAAA,CAAA,GAAG6F,UAAU;MACzC,CAAC,CAAA,EAAG7F,SAAS,CAAczE,WAAAA,EAAAA,OAAO,EAAE,GAAGwB,OAAO,CAACxB,OAAO,CAAA;AAC1D,KAAC,CAAE;AACH,IAAA,sBAAA,EAAqB,UAAU;AAAAiF,IAAAA,QAAA,gBAE/BO,GAAA,CAAA,KAAA,EAAA;AACIlG,MAAAA,EAAE,EAAEiB,QAAS;MACbyE,SAAS,EAAE,CAAGP,EAAAA,SAAS,CAAW,QAAA,CAAA;AAClCuG,MAAAA,YAAY,EAAE1I,cAAe;AAC7B2I,MAAAA,YAAY,EAAE3I,cAAe;AAC7B,MAAA,WAAA,EAAWhB,aAAa,GAAG,KAAK,GAAG,QAAS;AAAA2D,MAAAA,QAAA,eAE5CO,GAAA,CAAA,KAAA,EAAA;AAAKT,QAAAA,GAAG,EAAE2F,UAAW;QAAC1F,SAAS,EAAE,CAAGP,EAAAA,SAAS,CAAY,SAAA,CAAA;AAAC0E,QAAAA,KAAK,EAAEd,YAAa;AAAApD,QAAAA,QAAA,EACzE0F,MAAM,CAACtB,GAAG,CAAC,CAAC6B,KAAK,EAAE9J,KAAK,kBACrBoE,GAAA,CAACZ,kBAAkB,EAAA;UAEftF,EAAE,EAAEiB,QAAQ,IAAIoE,qBAAqB,CAACpE,QAAQ,EAAEa,KAAK,CAAE;AACvD8D,UAAAA,IAAI,EAAEsF,WAAW,GAAG,UAAU,GAAG,OAAQ;AACzCrF,UAAAA,KAAK,EAAEsF,eAAe,GAAGA,eAAe,CAACrJ,KAAK,GAAG,CAAC,EAAEuJ,MAAM,CAACQ,MAAM,CAAC,GAAGhM,SAAU;AAC/EiG,UAAAA,WAAW,EAAEhE,KAAK,IAAIqB,iBAAiB,IAAIrB,KAAK,GAAGsB,eAAgB;AAAAuC,UAAAA,QAAA,EAElEiG,KAAAA;AAAK,SAAA,EAND9J,KAOW,CACvB,CAAA;OACA,CAAA;KACJ,CAAC,EAELmJ,WAAW,CAAA;AAAA,GACP,CAAC,CAAA;AAElB,CAAC,EAAC;AAEFF,MAAM,CAAC1E,WAAW,GAAGnB,cAAc,CAAA;AACnC6F,MAAM,CAACrF,SAAS,GAAGP,SAAS;;;;"}
|