@alfalab/core-components-gallery 5.10.0 → 5.10.2

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.
Files changed (113) hide show
  1. package/@alfalab/icons-glyph/package.json +14 -0
  2. package/Component.js +11 -13
  3. package/components/buttons/index.css +5 -5
  4. package/components/buttons/index.js +1 -1
  5. package/components/header/Component.js +1 -1
  6. package/components/header/index.css +2 -2
  7. package/components/header-info-block/Component.js +1 -1
  8. package/components/header-info-block/index.css +5 -5
  9. package/components/header-mobile/Component.js +1 -1
  10. package/components/header-mobile/index.css +7 -7
  11. package/components/image-preview/Component.js +1 -1
  12. package/components/image-preview/index.css +18 -18
  13. package/components/image-viewer/component.js +20 -46
  14. package/components/image-viewer/hooks.d.ts +11 -0
  15. package/components/image-viewer/hooks.js +51 -0
  16. package/components/image-viewer/index.css +31 -26
  17. package/components/image-viewer/single.d.ts +3 -0
  18. package/components/image-viewer/single.js +42 -0
  19. package/components/image-viewer/slide.d.ts +16 -0
  20. package/components/image-viewer/slide.js +51 -10
  21. package/components/image-viewer/video/index.css +7 -7
  22. package/components/image-viewer/video/index.js +1 -1
  23. package/components/info-bar/Component.js +1 -1
  24. package/components/info-bar/index.css +5 -5
  25. package/components/navigation-bar/Component.js +1 -1
  26. package/components/navigation-bar/index.css +7 -7
  27. package/cssm/Component.js +10 -12
  28. package/cssm/components/image-viewer/component.js +6 -33
  29. package/cssm/components/image-viewer/hooks.d.ts +11 -0
  30. package/cssm/components/image-viewer/hooks.js +52 -0
  31. package/cssm/components/image-viewer/index.module.css +9 -4
  32. package/cssm/components/image-viewer/single.d.ts +3 -0
  33. package/cssm/components/image-viewer/single.js +43 -0
  34. package/cssm/components/image-viewer/slide.d.ts +2 -2
  35. package/cssm/components/image-viewer/slide.js +4 -4
  36. package/esm/Component.js +11 -13
  37. package/esm/components/buttons/index.css +5 -5
  38. package/esm/components/buttons/index.js +1 -1
  39. package/esm/components/header/Component.js +1 -1
  40. package/esm/components/header/index.css +2 -2
  41. package/esm/components/header-info-block/Component.js +1 -1
  42. package/esm/components/header-info-block/index.css +5 -5
  43. package/esm/components/header-mobile/Component.js +1 -1
  44. package/esm/components/header-mobile/index.css +7 -7
  45. package/esm/components/image-preview/Component.js +1 -1
  46. package/esm/components/image-preview/index.css +18 -18
  47. package/esm/components/image-viewer/component.js +9 -34
  48. package/esm/components/image-viewer/hooks.d.ts +11 -0
  49. package/esm/components/image-viewer/hooks.js +43 -0
  50. package/esm/components/image-viewer/index.css +31 -26
  51. package/esm/components/image-viewer/single.d.ts +3 -0
  52. package/esm/components/image-viewer/single.js +33 -0
  53. package/esm/components/image-viewer/slide.d.ts +16 -0
  54. package/esm/components/image-viewer/slide.js +49 -9
  55. package/esm/components/image-viewer/video/index.css +7 -7
  56. package/esm/components/image-viewer/video/index.js +1 -1
  57. package/esm/components/info-bar/Component.js +1 -1
  58. package/esm/components/info-bar/index.css +5 -5
  59. package/esm/components/navigation-bar/Component.js +1 -1
  60. package/esm/components/navigation-bar/index.css +7 -7
  61. package/esm/index.css +5 -5
  62. package/esm/index.module-affca7da.js +4 -0
  63. package/index.css +5 -5
  64. package/index.module-a1b6ce1e.js +6 -0
  65. package/modern/Component.js +11 -13
  66. package/modern/components/buttons/index.css +5 -5
  67. package/modern/components/buttons/index.js +1 -1
  68. package/modern/components/header/Component.js +1 -1
  69. package/modern/components/header/index.css +2 -2
  70. package/modern/components/header-info-block/Component.js +1 -1
  71. package/modern/components/header-info-block/index.css +5 -5
  72. package/modern/components/header-mobile/Component.js +1 -1
  73. package/modern/components/header-mobile/index.css +7 -7
  74. package/modern/components/image-preview/Component.js +1 -1
  75. package/modern/components/image-preview/index.css +18 -18
  76. package/modern/components/image-viewer/component.js +9 -33
  77. package/modern/components/image-viewer/hooks.d.ts +11 -0
  78. package/modern/components/image-viewer/hooks.js +42 -0
  79. package/modern/components/image-viewer/index.css +31 -26
  80. package/modern/components/image-viewer/single.d.ts +3 -0
  81. package/modern/components/image-viewer/single.js +31 -0
  82. package/modern/components/image-viewer/slide.d.ts +16 -0
  83. package/modern/components/image-viewer/slide.js +45 -9
  84. package/modern/components/image-viewer/video/index.css +7 -7
  85. package/modern/components/image-viewer/video/index.js +1 -1
  86. package/modern/components/info-bar/Component.js +1 -1
  87. package/modern/components/info-bar/index.css +5 -5
  88. package/modern/components/navigation-bar/Component.js +1 -1
  89. package/modern/components/navigation-bar/index.css +7 -7
  90. package/modern/index.css +5 -5
  91. package/modern/index.module-74d34a11.js +4 -0
  92. package/moderncssm/Component.js +10 -12
  93. package/moderncssm/components/image-viewer/component.js +7 -32
  94. package/moderncssm/components/image-viewer/hooks.d.ts +11 -0
  95. package/moderncssm/components/image-viewer/hooks.js +42 -0
  96. package/moderncssm/components/image-viewer/index.module.css +9 -4
  97. package/moderncssm/components/image-viewer/single.d.ts +3 -0
  98. package/moderncssm/components/image-viewer/single.js +31 -0
  99. package/moderncssm/components/image-viewer/slide.d.ts +2 -2
  100. package/moderncssm/components/image-viewer/slide.js +4 -4
  101. package/package.json +5 -4
  102. package/src/Component.tsx +9 -16
  103. package/src/components/image-viewer/component.tsx +14 -61
  104. package/src/components/image-viewer/hooks.ts +66 -0
  105. package/src/components/image-viewer/index.module.css +6 -1
  106. package/src/components/image-viewer/single.tsx +67 -0
  107. package/src/components/image-viewer/slide.tsx +7 -7
  108. package/esm/slide-c10cd710.d.ts +0 -16
  109. package/esm/slide-c10cd710.js +0 -51
  110. package/modern/slide-618331a8.d.ts +0 -16
  111. package/modern/slide-618331a8.js +0 -47
  112. package/slide-0cca0f85.d.ts +0 -16
  113. package/slide-0cca0f85.js +0 -59
@@ -6,7 +6,7 @@ import { isVideo, getImageAlt } from '../../utils/utils.js';
6
6
  import { PREVIEW_VIDEO_MULTIPLIER, PREVIEW_WIDTH_MOBILE, PREVIEW_WIDTH_DESKTOP, PREVIEW_HEIGHT_MOBILE, PREVIEW_HEIGHT_DESKTOP } from '../../utils/constants.js';
7
7
  import { NoImagePaths } from './paths.js';
8
8
 
9
- var styles = {"component":"gallery__component_1px02","image":"gallery__image_1px02","mobile":"gallery__mobile_1px02","active":"gallery__active_1px02","preview":"gallery__preview_1px02","loading":"gallery__loading_1px02","brokenImageWrapper":"gallery__brokenImageWrapper_1px02","brokenIcon":"gallery__brokenIcon_1px02","focused":"gallery__focused_1px02","canvasPreview":"gallery__canvasPreview_1px02"};
9
+ var styles = {"component":"gallery__component_iyumg","image":"gallery__image_iyumg","mobile":"gallery__mobile_iyumg","active":"gallery__active_iyumg","preview":"gallery__preview_iyumg","loading":"gallery__loading_iyumg","brokenImageWrapper":"gallery__brokenImageWrapper_iyumg","brokenIcon":"gallery__brokenIcon_iyumg","focused":"gallery__focused_iyumg","canvasPreview":"gallery__canvasPreview_iyumg"};
10
10
  require('./index.css')
11
11
 
12
12
  var ImagePreview = function (_a) {
@@ -1,4 +1,4 @@
1
- /* hash: 1uugz */
1
+ /* hash: 1j6dx */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-status-info: #2288fa;
@@ -28,20 +28,20 @@
28
28
  } :root {
29
29
  } :root {
30
30
  --focus-color: var(--color-light-status-info);
31
- } /* сбрасывает синюю подсветку при нажатии */ .gallery__component_1px02 {
31
+ } /* сбрасывает синюю подсветку при нажатии */ .gallery__component_iyumg {
32
32
  display: flex;
33
33
  padding: var(--gap-4);
34
34
  z-index: 3;
35
35
  overflow: hidden;
36
36
  transition: border 0.15s ease-in-out;
37
37
  outline: none
38
- } .gallery__component_1px02 .gallery__image_1px02 {
38
+ } .gallery__component_iyumg .gallery__image_iyumg {
39
39
  opacity: 0.3;
40
- } .gallery__component_1px02.gallery__mobile_1px02 {
40
+ } .gallery__component_iyumg.gallery__mobile_iyumg {
41
41
  padding: 0;
42
- } .gallery__active_1px02 > .gallery__image_1px02 {
42
+ } .gallery__active_iyumg > .gallery__image_iyumg {
43
43
  opacity: 1;
44
- } .gallery__preview_1px02 {
44
+ } .gallery__preview_iyumg {
45
45
  width: 56px;
46
46
  height: 56px;
47
47
  flex-shrink: 0;
@@ -49,13 +49,13 @@
49
49
  cursor: pointer;
50
50
  -webkit-user-select: none;
51
51
  user-select: none
52
- } .gallery__preview_1px02.gallery__mobile_1px02 {
52
+ } .gallery__preview_iyumg.gallery__mobile_iyumg {
53
53
  width: 36px;
54
54
  height: 46px;
55
55
  border-radius: var(--border-radius-8);
56
- } .gallery__image_1px02 {
56
+ } .gallery__image_iyumg {
57
57
  transition: opacity 0.15s ease-in-out
58
- } .gallery__image_1px02 > img {
58
+ } .gallery__image_iyumg > img {
59
59
  display: block;
60
60
  width: 100%;
61
61
  height: 100%;
@@ -63,28 +63,28 @@
63
63
  object-fit: cover;
64
64
  overflow: clip;
65
65
  overflow-clip-margin: border-box;
66
- } .gallery__image_1px02:hover {
66
+ } .gallery__image_iyumg:hover {
67
67
  opacity: 0.7;
68
- } .gallery__loading_1px02 {
68
+ } .gallery__loading_iyumg {
69
69
  background-color: var(--color-static-neutral-100-inverted)
70
- } .gallery__loading_1px02 .gallery__active_1px02 {
70
+ } .gallery__loading_iyumg .gallery__active_iyumg {
71
71
  background-color: var(--color-static-neutral-300-inverted);
72
- } .gallery__brokenImageWrapper_1px02 {
72
+ } .gallery__brokenImageWrapper_iyumg {
73
73
  display: flex;
74
74
  justify-content: center;
75
75
  align-items: center;
76
76
  background-color: var(--color-static-neutral-300-inverted);
77
77
  opacity: 0.3
78
- } .gallery__brokenImageWrapper_1px02.gallery__active_1px02 {
78
+ } .gallery__brokenImageWrapper_iyumg.gallery__active_iyumg {
79
79
  opacity: 1;
80
- } .gallery__brokenIcon_1px02 {
80
+ } .gallery__brokenIcon_iyumg {
81
81
  width: 40px;
82
82
  height: 40px;
83
- } .gallery__focused_1px02 {
83
+ } .gallery__focused_iyumg {
84
84
  outline: 2px solid var(--focus-color);
85
85
  outline-offset: 2px;
86
- } .gallery__canvasPreview_1px02 {
86
+ } .gallery__canvasPreview_iyumg {
87
87
  border-radius: var(--border-radius-12)
88
- } .gallery__canvasPreview_1px02.gallery__mobile_1px02 {
88
+ } .gallery__canvasPreview_iyumg.gallery__mobile_iyumg {
89
89
  border-radius: var(--border-radius-8);
90
90
  }
@@ -1,7 +1,6 @@
1
1
  import { __assign } from 'tslib';
2
- import React, { useContext, useRef, useCallback, useEffect, useMemo } from 'react';
2
+ import React, { useContext, useCallback, useMemo } from 'react';
3
3
  import cn from 'classnames';
4
- import elementClosest from 'element-closest';
5
4
  import SwiperCore, { EffectFade, A11y, Controller } from 'swiper';
6
5
  import { Swiper, SwiperSlide } from 'swiper/react';
7
6
  import { useFocus } from '@alfalab/hooks';
@@ -10,16 +9,16 @@ import { ChevronForwardHeavyMIcon } from '@alfalab/icons-glyph/ChevronForwardHea
10
9
  import { GalleryContext } from '../../context.js';
11
10
  import { isVideo, getImageAlt, getImageKey } from '../../utils/utils.js';
12
11
  import { TestIds } from '../../utils/constants.js';
13
- import { s as styles, S as Slide } from '../../slide-c10cd710.js';
12
+ import { useHandleImageViewer } from './hooks.js';
13
+ import { Slide } from './slide.js';
14
14
  import 'swiper/swiper.min.css';
15
+ import { s as styles } from '../../index.module-affca7da.js';
15
16
 
16
17
  SwiperCore.use([EffectFade, A11y, Controller]);
17
18
  var ImageViewer = function () {
18
19
  var _a, _b, _c;
19
- var _d = useContext(GalleryContext), singleSlide = _d.singleSlide, images = _d.images, imagesMeta = _d.imagesMeta, fullScreen = _d.fullScreen, currentSlideIndex = _d.currentSlideIndex, initialSlide = _d.initialSlide, onClose = _d.onClose, setImageMeta = _d.setImageMeta, setCurrentSlideIndex = _d.setCurrentSlideIndex, getSwiper = _d.getSwiper, setSwiper = _d.setSwiper, slidePrev = _d.slidePrev, slideNext = _d.slideNext, getCurrentImage = _d.getCurrentImage, view = _d.view;
20
- var isMobile = view === 'mobile';
21
- var leftArrowRef = useRef(null);
22
- var rightArrowRef = useRef(null);
20
+ var _d = useContext(GalleryContext), images = _d.images, imagesMeta = _d.imagesMeta, fullScreen = _d.fullScreen, currentSlideIndex = _d.currentSlideIndex, initialSlide = _d.initialSlide, setCurrentSlideIndex = _d.setCurrentSlideIndex, getSwiper = _d.getSwiper, setSwiper = _d.setSwiper, slidePrev = _d.slidePrev, slideNext = _d.slideNext, getCurrentImage = _d.getCurrentImage;
21
+ var _e = useHandleImageViewer(), handleLoad = _e.handleLoad, handleLoadError = _e.handleLoadError, handleWrapperClick = _e.handleWrapperClick, isMobile = _e.isMobile, rightArrowRef = _e.rightArrowRef, leftArrowRef = _e.leftArrowRef;
23
22
  var leftArrowFocused = useFocus(leftArrowRef, 'keyboard')[0];
24
23
  var rightArrowFocused = useFocus(rightArrowRef, 'keyboard')[0];
25
24
  var swiper = getSwiper();
@@ -44,28 +43,6 @@ var ImageViewer = function () {
44
43
  slideNext();
45
44
  }
46
45
  };
47
- var handleLoad = function (event, index) {
48
- var target = event.currentTarget;
49
- var naturalWidth = target.naturalWidth, naturalHeight = target.naturalHeight;
50
- setImageMeta({ width: naturalWidth, height: naturalHeight }, index);
51
- };
52
- var handleLoadError = function (index) {
53
- setImageMeta({ width: 0, height: 0, broken: true }, index);
54
- };
55
- var handleWrapperClick = useCallback(function (event) {
56
- var _a, _b;
57
- var eventTarget = event.target;
58
- var isArrow = ((_a = leftArrowRef.current) === null || _a === void 0 ? void 0 : _a.contains(eventTarget)) ||
59
- ((_b = rightArrowRef.current) === null || _b === void 0 ? void 0 : _b.contains(eventTarget));
60
- var isPlaceholder = Boolean(eventTarget.closest(".".concat(styles.placeholder)));
61
- var isImg = eventTarget.tagName === 'IMG';
62
- if (!isImg && !isPlaceholder && !isArrow && !isMobile) {
63
- onClose();
64
- }
65
- }, [isMobile, onClose]);
66
- useEffect(function () {
67
- elementClosest(window);
68
- }, []);
69
46
  var swiperProps = useMemo(function () {
70
47
  var _a;
71
48
  return ({
@@ -76,7 +53,7 @@ var ImageViewer = function () {
76
53
  },
77
54
  className: cn(styles.swiper, (_a = {},
78
55
  _a[styles.hidden] = fullScreen && !isVideo(currentImage === null || currentImage === void 0 ? void 0 : currentImage.src),
79
- _a[styles.fullScreenVideo] = fullScreen && !singleSlide && isVideo(currentImage === null || currentImage === void 0 ? void 0 : currentImage.src),
56
+ _a[styles.fullScreenVideo] = fullScreen && isVideo(currentImage === null || currentImage === void 0 ? void 0 : currentImage.src),
80
57
  _a[styles.mobile] = isMobile,
81
58
  _a[styles.mobileVideo] = isMobile && isVideo(currentImage === null || currentImage === void 0 ? void 0 : currentImage.src),
82
59
  _a)),
@@ -93,21 +70,19 @@ var ImageViewer = function () {
93
70
  }, [
94
71
  fullScreen,
95
72
  currentImage === null || currentImage === void 0 ? void 0 : currentImage.src,
96
- singleSlide,
97
73
  isMobile,
98
74
  swiper,
99
75
  initialSlide,
100
76
  setSwiper,
101
77
  handleSlideChange,
102
78
  ]);
103
- var showControls = !singleSlide && !fullScreen && !isMobile && !!images.length;
79
+ var showControls = !fullScreen && !isMobile && !!images.length;
104
80
  var swiperWidth = (swiper === null || swiper === void 0 ? void 0 : swiper.width) || 1;
105
81
  var swiperHeight = (swiper === null || swiper === void 0 ? void 0 : swiper.height) || (swiper === null || swiper === void 0 ? void 0 : swiper.width) || 1;
106
82
  var swiperAspectRatio = swiperWidth / swiperHeight;
107
83
  return (
108
84
  /* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */
109
85
  React.createElement("div", { className: cn(styles.component, (_a = {},
110
- _a[styles.singleSlide] = singleSlide,
111
86
  _a[styles.mobile] = isMobile,
112
87
  _a[styles.mobileVideo] = isMobile && isVideo(currentImage === null || currentImage === void 0 ? void 0 : currentImage.src),
113
88
  _a)), onClick: handleWrapperClick },
@@ -127,7 +102,7 @@ var ImageViewer = function () {
127
102
  transitionProperty: 'opacity',
128
103
  } }, function (_a) {
129
104
  var isActive = _a.isActive;
130
- return (React.createElement(Slide, { isActive: isActive, swiperAspectRatio: swiperAspectRatio, image: image, swiperHeight: swiperHeight, meta: meta, index: index, imageAspectRatio: imageAspectRatio, slideVisible: slideVisible, handleLoad: handleLoad, handleLoadError: handleLoadError }));
105
+ return (React.createElement(Slide, { isActive: isActive, containerAspectRatio: swiperAspectRatio, image: image, containerHeight: swiperHeight, meta: meta, index: index, imageAspectRatio: imageAspectRatio, slideVisible: slideVisible, handleLoad: handleLoad, handleLoadError: handleLoadError }));
131
106
  }));
132
107
  })),
133
108
  showControls && (React.createElement("div", { className: cn(styles.arrow, (_c = {},
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ import { MouseEventHandler, SyntheticEvent } from 'react';
3
+ declare const useHandleImageViewer: () => {
4
+ handleLoad: (event: SyntheticEvent<HTMLImageElement>, index: number) => void;
5
+ handleLoadError: (index: number) => void;
6
+ handleWrapperClick: MouseEventHandler<Element>;
7
+ isMobile: boolean;
8
+ leftArrowRef: import("react").RefObject<HTMLDivElement>;
9
+ rightArrowRef: import("react").RefObject<HTMLDivElement>;
10
+ };
11
+ export { useHandleImageViewer };
@@ -0,0 +1,43 @@
1
+ import { useContext, useRef, useCallback, useEffect } from 'react';
2
+ import elementClosest from 'element-closest';
3
+ import { GalleryContext } from '../../context.js';
4
+ import { s as styles } from '../../index.module-affca7da.js';
5
+
6
+ var useHandleImageViewer = function () {
7
+ var _a = useContext(GalleryContext), view = _a.view, onClose = _a.onClose, setImageMeta = _a.setImageMeta;
8
+ var leftArrowRef = useRef(null);
9
+ var rightArrowRef = useRef(null);
10
+ var isMobile = view === 'mobile';
11
+ var handleLoad = function (event, index) {
12
+ var target = event.currentTarget;
13
+ var naturalWidth = target.naturalWidth, naturalHeight = target.naturalHeight;
14
+ setImageMeta({ width: naturalWidth, height: naturalHeight }, index);
15
+ };
16
+ var handleLoadError = function (index) {
17
+ setImageMeta({ width: 0, height: 0, broken: true }, index);
18
+ };
19
+ var handleWrapperClick = useCallback(function (event) {
20
+ var _a, _b;
21
+ var eventTarget = event.target;
22
+ var isArrow = ((_a = leftArrowRef.current) === null || _a === void 0 ? void 0 : _a.contains(eventTarget)) ||
23
+ ((_b = rightArrowRef.current) === null || _b === void 0 ? void 0 : _b.contains(eventTarget));
24
+ var isPlaceholder = Boolean(eventTarget.closest(".".concat(styles.placeholder)));
25
+ var isImg = eventTarget.tagName === 'IMG';
26
+ if (!isImg && !isPlaceholder && !isArrow && !isMobile) {
27
+ onClose();
28
+ }
29
+ }, [isMobile, onClose]);
30
+ useEffect(function () {
31
+ elementClosest(window);
32
+ }, []);
33
+ return {
34
+ handleLoad: handleLoad,
35
+ handleLoadError: handleLoadError,
36
+ handleWrapperClick: handleWrapperClick,
37
+ isMobile: isMobile,
38
+ leftArrowRef: leftArrowRef,
39
+ rightArrowRef: rightArrowRef,
40
+ };
41
+ };
42
+
43
+ export { useHandleImageViewer };
@@ -1,4 +1,4 @@
1
- /* hash: mllgr */
1
+ /* hash: 1983m */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-base-bg-primary: #fff;
@@ -35,12 +35,12 @@
35
35
  } :root {
36
36
  } :root {
37
37
  --focus-color: var(--color-light-status-info);
38
- } /* сбрасывает синюю подсветку при нажатии */ .gallery__component_p2hnc {
38
+ } /* сбрасывает синюю подсветку при нажатии */ .gallery__component_52rek {
39
39
  display: flex;
40
40
  flex-grow: 1;
41
41
  justify-content: center;
42
42
  background-color: var(--color-static-neutral-0-inverted);
43
- } .gallery__swiper_p2hnc {
43
+ } .gallery__swiper_52rek {
44
44
  display: flex;
45
45
  width: 100%;
46
46
  height: 100%;
@@ -49,51 +49,56 @@
49
49
  max-height: calc(100vh - 168px);
50
50
  padding: var(--gap-32) var(--gap-16);
51
51
  box-sizing: border-box
52
- } .gallery__swiper_p2hnc.gallery__mobile_p2hnc {
52
+ } .gallery__swiper_52rek.gallery__mobile_52rek {
53
53
  max-height: calc(100vh - 210px);
54
- } .gallery__swiper_p2hnc.gallery__mobileVideo_p2hnc {
54
+ } .gallery__swiper_52rek.gallery__mobileVideo_52rek {
55
55
  max-height: 100vh;
56
- } .gallery__singleSlide_p2hnc .gallery__swiper_p2hnc {
56
+ } .gallery__singleSlideContainer_52rek {
57
+ display: flex;
58
+ width: 100%;
59
+ height: 100%;
60
+
57
61
  max-height: calc(100vh - 80px);
58
- padding: var(--gap-32)
59
- } .gallery__singleSlide_p2hnc .gallery__swiper_p2hnc.gallery__mobile_p2hnc {
62
+ padding: var(--gap-32);
63
+ box-sizing: border-box
64
+ } .gallery__singleSlideContainer_52rek.gallery__mobile_52rek {
60
65
  max-height: calc(100vh - 174px);
61
66
  padding: 0;
62
- } .gallery__singleSlide_p2hnc .gallery__swiper_p2hnc.gallery__mobileVideo_p2hnc {
67
+ } .gallery__singleSlideContainer_52rek.gallery__mobileVideo_52rek {
63
68
  max-height: 100vh;
64
- } .gallery__hidden_p2hnc {
69
+ } .gallery__hidden_52rek {
65
70
  display: none;
66
- } .gallery__slide_p2hnc {
71
+ } .gallery__slide_52rek {
67
72
  position: relative;
68
73
  display: flex;
69
74
  justify-content: center;
70
75
  align-items: center;
71
76
  width: 100%;
72
77
  height: 100%;
73
- } .gallery__slideLoading_p2hnc {
78
+ } .gallery__slideLoading_52rek {
74
79
  background-color: var(--color-static-neutral-100-inverted);
75
80
  border-radius: var(--border-radius-8);
76
- } .gallery__image_p2hnc {
81
+ } .gallery__image_52rek {
77
82
  width: 0;
78
83
  height: 0;
79
84
  -webkit-user-select: none;
80
85
  user-select: none;
81
86
  border-radius: var(--border-radius-8)
82
- } .gallery__image_p2hnc.gallery__mobile_p2hnc {
87
+ } .gallery__image_52rek.gallery__mobile_52rek {
83
88
  border-radius: var(--border-radius-0);
84
- } .gallery__smallImage_p2hnc {
89
+ } .gallery__smallImage_52rek {
85
90
  position: relative;
86
91
  width: auto;
87
92
  height: auto;
88
93
  -webkit-user-select: none;
89
94
  user-select: none;
90
- } .gallery__verticalImageFit_p2hnc {
95
+ } .gallery__verticalImageFit_52rek {
91
96
  width: auto;
92
97
  height: 100%;
93
- } .gallery__horizontalImageFit_p2hnc {
98
+ } .gallery__horizontalImageFit_52rek {
94
99
  width: 100%;
95
100
  height: auto;
96
- } .gallery__arrow_p2hnc {
101
+ } .gallery__arrow_52rek {
97
102
  display: flex;
98
103
  flex-direction: column;
99
104
  justify-content: center;
@@ -105,14 +110,14 @@
105
110
  color: var(--color-static-neutral-translucent-1300-inverted);
106
111
  transition: background-color 0.15s ease-in-out;
107
112
  outline: none
108
- } .gallery__arrow_p2hnc:hover {
113
+ } .gallery__arrow_52rek:hover {
109
114
  background-color: var(--color-static-neutral-0-inverted-hover);
110
- } .gallery__arrow_p2hnc:active {
115
+ } .gallery__arrow_52rek:active {
111
116
  background-color: var(--color-static-neutral-0-inverted-press);
112
- } .gallery__focused_p2hnc {
117
+ } .gallery__focused_52rek {
113
118
  outline: 2px solid var(--focus-color);
114
119
  outline-offset: 2px;
115
- } .gallery__placeholder_p2hnc {
120
+ } .gallery__placeholder_52rek {
116
121
  display: flex;
117
122
  justify-content: center;
118
123
  align-items: center;
@@ -120,22 +125,22 @@
120
125
  height: 300px;
121
126
  border-radius: var(--border-radius-8);
122
127
  background-color: var(--color-static-neutral-300-inverted);
123
- } .gallery__brokenImgWrapper_p2hnc {
128
+ } .gallery__brokenImgWrapper_52rek {
124
129
  position: relative;
125
130
  display: flex;
126
131
  flex-direction: column;
127
132
  align-items: center;
128
133
  width: 150px;
129
134
  text-align: center;
130
- } .gallery__brokenImgIcon_p2hnc {
135
+ } .gallery__brokenImgIcon_52rek {
131
136
  width: 80px;
132
137
  height: 80px;
133
138
  margin-bottom: var(--gap-2xs);
134
- } .gallery__fullScreenImage_p2hnc {
139
+ } .gallery__fullScreenImage_52rek {
135
140
  width: 100%;
136
141
  height: auto;
137
142
  background-color: var(--color-light-base-bg-primary);
138
- } .gallery__fullScreenVideo_p2hnc {
143
+ } .gallery__fullScreenVideo_52rek {
139
144
  width: calc(100% - 192px);
140
145
  max-height: calc(100vh - 82px);
141
146
  }
@@ -0,0 +1,3 @@
1
+ import { FC } from 'react';
2
+ declare const Single: FC;
3
+ export { Single };
@@ -0,0 +1,33 @@
1
+ import React, { useContext, useRef } from 'react';
2
+ import cn from 'classnames';
3
+ import { GalleryContext } from '../../context.js';
4
+ import { isVideo, getImageAlt } from '../../utils/utils.js';
5
+ import { useHandleImageViewer } from './hooks.js';
6
+ import { Slide } from './slide.js';
7
+ import { s as styles } from '../../index.module-affca7da.js';
8
+
9
+ var Single = function () {
10
+ var _a;
11
+ var _b;
12
+ var _c = useContext(GalleryContext), fullScreen = _c.fullScreen, currentSlideIndex = _c.currentSlideIndex, getCurrentImage = _c.getCurrentImage, getCurrentImageMeta = _c.getCurrentImageMeta;
13
+ var _d = useHandleImageViewer(), handleLoad = _d.handleLoad, handleLoadError = _d.handleLoadError, handleWrapperClick = _d.handleWrapperClick, isMobile = _d.isMobile;
14
+ var wrapperRef = useRef(null);
15
+ var currentImage = getCurrentImage();
16
+ var currentImageMeta = getCurrentImageMeta();
17
+ if (!currentImage)
18
+ return null;
19
+ var imageWidth = (currentImageMeta === null || currentImageMeta === void 0 ? void 0 : currentImageMeta.width) || 1;
20
+ var imageHeight = (currentImageMeta === null || currentImageMeta === void 0 ? void 0 : currentImageMeta.height) || 1;
21
+ var imageAspectRatio = imageWidth / imageHeight;
22
+ var wrapperRect = (_b = wrapperRef.current) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect();
23
+ var wrapperAspectRatio = ((wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.width) || 1) / ((wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.height) || 1);
24
+ return (
25
+ /* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */
26
+ React.createElement("div", { className: styles.component, onClick: handleWrapperClick }, fullScreen && !isVideo(currentImage === null || currentImage === void 0 ? void 0 : currentImage.src) ? (React.createElement("img", { src: currentImage === null || currentImage === void 0 ? void 0 : currentImage.src, alt: currentImage ? getImageAlt(currentImage, currentSlideIndex) : '', className: styles.fullScreenImage })) : (React.createElement("div", { className: cn(styles.singleSlideContainer, (_a = {},
27
+ _a[styles.mobile] = isMobile,
28
+ _a[styles.mobileVideo] = isMobile && isVideo(currentImage === null || currentImage === void 0 ? void 0 : currentImage.src),
29
+ _a)), ref: wrapperRef },
30
+ React.createElement(Slide, { isActive: true, containerAspectRatio: wrapperAspectRatio, image: currentImage, containerHeight: (wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.height) || 0, meta: currentImageMeta, index: 0, imageAspectRatio: imageAspectRatio, slideVisible: true, handleLoad: handleLoad, handleLoadError: handleLoadError })))));
31
+ };
32
+
33
+ export { Single };
@@ -0,0 +1,16 @@
1
+ import { FC, SyntheticEvent } from 'react';
2
+ import { GalleryImage, ImageMeta } from "../../types";
3
+ type SlideProps = {
4
+ isActive: boolean;
5
+ image: GalleryImage;
6
+ meta?: ImageMeta;
7
+ containerAspectRatio: number;
8
+ imageAspectRatio: number;
9
+ index: number;
10
+ containerHeight: number;
11
+ slideVisible: boolean;
12
+ handleLoad: (event: SyntheticEvent<HTMLImageElement>, index: number) => void;
13
+ handleLoadError: (index: number) => void;
14
+ };
15
+ declare const Slide: FC<SlideProps>;
16
+ export { Slide };
@@ -1,9 +1,49 @@
1
- import 'react';
2
- import 'classnames';
3
- import '@alfalab/core-components-typography/esm';
4
- import '../../context.js';
5
- import '../../utils/utils.js';
6
- import '../../utils/constants.js';
7
- import './paths.js';
8
- import './video/index.js';
9
- export { S as Slide } from '../../slide-c10cd710.js';
1
+ import React, { useContext } from 'react';
2
+ import cn from 'classnames';
3
+ import { Typography } from '@alfalab/core-components-typography/esm';
4
+ import { GalleryContext } from '../../context.js';
5
+ import { isSmallImage, isVideo, getImageAlt } from '../../utils/utils.js';
6
+ import { TestIds } from '../../utils/constants.js';
7
+ import { NoImagePaths } from './paths.js';
8
+ import { Video } from './video/index.js';
9
+ import { s as styles } from '../../index.module-affca7da.js';
10
+
11
+ var SlideInner = function (_a) {
12
+ var _b;
13
+ var children = _a.children, broken = _a.broken, loading = _a.loading, withPlaceholder = _a.withPlaceholder, isVideoView = _a.isVideoView;
14
+ var content = broken ? (React.createElement("div", { className: styles.brokenImgWrapper },
15
+ React.createElement("div", { className: styles.brokenImgIcon },
16
+ React.createElement("svg", { xmlns: 'http://www.w3.org/2000/svg', width: '80', height: '80', viewBox: '0 0 80 80', fill: 'none' },
17
+ React.createElement("rect", { width: '80', height: '80', fill: 'none' }),
18
+ React.createElement("path", { fillRule: 'evenodd', clipRule: 'evenodd', d: NoImagePaths.baseImage, fill: '#89898A' }),
19
+ React.createElement("path", { d: NoImagePaths.triangleImage, fill: '#89898A' }))),
20
+ React.createElement(Typography.Text, { view: 'primary-small', color: 'static-secondary-light' },
21
+ "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C ",
22
+ isVideoView ? 'видео' : 'изображение'))) : (children);
23
+ return (React.createElement("div", { className: cn(styles.slide, (_b = {}, _b[styles.slideLoading] = loading, _b)) }, withPlaceholder ? React.createElement("div", { className: styles.placeholder }, content) : content));
24
+ };
25
+ var Slide = function (_a) {
26
+ var _b;
27
+ var isActive = _a.isActive, meta = _a.meta, containerAspectRatio = _a.containerAspectRatio, imageAspectRatio = _a.imageAspectRatio, image = _a.image, index = _a.index, containerHeight = _a.containerHeight, slideVisible = _a.slideVisible, handleLoad = _a.handleLoad, handleLoadError = _a.handleLoadError;
28
+ var view = useContext(GalleryContext).view;
29
+ var broken = Boolean(meta === null || meta === void 0 ? void 0 : meta.broken);
30
+ var small = isSmallImage(meta);
31
+ var verticalImageFit = !small && containerAspectRatio > imageAspectRatio;
32
+ var horizontalImageFit = !small && containerAspectRatio <= imageAspectRatio;
33
+ if (isVideo(image.src)) {
34
+ return (React.createElement(SlideInner, { isVideoView: true, active: isActive, broken: broken, withPlaceholder: broken, loading: !meta },
35
+ React.createElement(Video, { url: image.src, index: index, isActive: isActive })));
36
+ }
37
+ return (React.createElement(SlideInner, { active: isActive, broken: broken, loading: !meta, withPlaceholder: small || broken },
38
+ React.createElement("img", { src: image.src, alt: getImageAlt(image, index), className: cn((_b = {},
39
+ _b[styles.smallImage] = small,
40
+ _b[styles.image] = !small && meta,
41
+ _b[styles.mobile] = view === 'mobile',
42
+ _b[styles.verticalImageFit] = verticalImageFit,
43
+ _b[styles.horizontalImageFit] = horizontalImageFit,
44
+ _b)), onLoad: function (event) { return handleLoad(event, index); }, onError: function () { return handleLoadError(index); }, style: {
45
+ maxHeight: "".concat(containerHeight, "px"),
46
+ }, "data-test-id": slideVisible ? TestIds.ACTIVE_IMAGE : undefined })));
47
+ };
48
+
49
+ export { Slide };
@@ -1,4 +1,4 @@
1
- /* hash: skzz5 */
1
+ /* hash: 1urpy */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-static-neutral-0: #fff;
@@ -22,27 +22,27 @@
22
22
  /* новые значения, используйте их */
23
23
  } :root {
24
24
  } :root {
25
- } /* сбрасывает синюю подсветку при нажатии */ .gallery__videoWrapper_1imzz {
25
+ } /* сбрасывает синюю подсветку при нажатии */ .gallery__videoWrapper_b6ni5 {
26
26
  display: flex;
27
27
  justify-content: center;
28
28
  height: 100%;
29
29
  width: 100%;
30
30
  position: relative;
31
- } .gallery__video_1imzz {
31
+ } .gallery__video_b6ni5 {
32
32
  max-width: 100%;
33
33
  max-height: 100%;
34
34
  border-radius: var(--border-radius-24);
35
- } .gallery__mobile_1imzz {
35
+ } .gallery__mobile_b6ni5 {
36
36
  border-radius: 0;
37
- } .gallery__videoButton_1imzz {
37
+ } .gallery__videoButton_b6ni5 {
38
38
  position: absolute;
39
39
  top: 50%;
40
40
  left: 50%;
41
41
  transform: translate(-50%, -50%);
42
42
  z-index: 1;
43
43
  color: green;
44
- } .gallery__icon_1imzz {
44
+ } .gallery__icon_b6ni5 {
45
45
  color: var(--color-static-neutral-0);
46
- } .gallery__iconShape_1imzz {
46
+ } .gallery__iconShape_b6ni5 {
47
47
  fill: var(--color-static-neutral-translucent-700);
48
48
  }
@@ -6,7 +6,7 @@ import PlayCompactMIcon from '@alfalab/icons-glyph/PlayCompactMIcon';
6
6
  import { GalleryContext } from '../../../context.js';
7
7
  import { GALLERY_EVENTS } from '../../../utils/constants.js';
8
8
 
9
- var styles = {"videoWrapper":"gallery__videoWrapper_1imzz","video":"gallery__video_1imzz","mobile":"gallery__mobile_1imzz","videoButton":"gallery__videoButton_1imzz","icon":"gallery__icon_1imzz","iconShape":"gallery__iconShape_1imzz"};
9
+ var styles = {"videoWrapper":"gallery__videoWrapper_b6ni5","video":"gallery__video_b6ni5","mobile":"gallery__mobile_b6ni5","videoButton":"gallery__videoButton_b6ni5","icon":"gallery__icon_b6ni5","iconShape":"gallery__iconShape_b6ni5"};
10
10
  require('./index.css')
11
11
 
12
12
  var Video = function (_a) {
@@ -5,7 +5,7 @@ import { isVideo } from '../../utils/utils.js';
5
5
  import { GALLERY_EVENTS } from '../../utils/constants.js';
6
6
  import { Pause, Play, UnmuteVideo, MuteVideo } from '../buttons/index.js';
7
7
 
8
- var styles = {"description":"gallery__description_y2txk","videoButtons":"gallery__videoButtons_y2txk","center":"gallery__center_y2txk","right":"gallery__right_y2txk"};
8
+ var styles = {"description":"gallery__description_wnn0j","videoButtons":"gallery__videoButtons_wnn0j","center":"gallery__center_wnn0j","right":"gallery__right_wnn0j"};
9
9
  require('./index.css')
10
10
 
11
11
  var InfoBar = function () {