@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.
- package/@alfalab/icons-glyph/package.json +14 -0
- package/Component.js +11 -13
- package/components/buttons/index.css +5 -5
- package/components/buttons/index.js +1 -1
- package/components/header/Component.js +1 -1
- package/components/header/index.css +2 -2
- package/components/header-info-block/Component.js +1 -1
- package/components/header-info-block/index.css +5 -5
- package/components/header-mobile/Component.js +1 -1
- package/components/header-mobile/index.css +7 -7
- package/components/image-preview/Component.js +1 -1
- package/components/image-preview/index.css +18 -18
- package/components/image-viewer/component.js +20 -46
- package/components/image-viewer/hooks.d.ts +11 -0
- package/components/image-viewer/hooks.js +51 -0
- package/components/image-viewer/index.css +31 -26
- package/components/image-viewer/single.d.ts +3 -0
- package/components/image-viewer/single.js +42 -0
- package/components/image-viewer/slide.d.ts +16 -0
- package/components/image-viewer/slide.js +51 -10
- package/components/image-viewer/video/index.css +7 -7
- package/components/image-viewer/video/index.js +1 -1
- package/components/info-bar/Component.js +1 -1
- package/components/info-bar/index.css +5 -5
- package/components/navigation-bar/Component.js +1 -1
- package/components/navigation-bar/index.css +7 -7
- package/cssm/Component.js +10 -12
- package/cssm/components/image-viewer/component.js +6 -33
- package/cssm/components/image-viewer/hooks.d.ts +11 -0
- package/cssm/components/image-viewer/hooks.js +52 -0
- package/cssm/components/image-viewer/index.module.css +9 -4
- package/cssm/components/image-viewer/single.d.ts +3 -0
- package/cssm/components/image-viewer/single.js +43 -0
- package/cssm/components/image-viewer/slide.d.ts +2 -2
- package/cssm/components/image-viewer/slide.js +4 -4
- package/esm/Component.js +11 -13
- package/esm/components/buttons/index.css +5 -5
- package/esm/components/buttons/index.js +1 -1
- package/esm/components/header/Component.js +1 -1
- package/esm/components/header/index.css +2 -2
- package/esm/components/header-info-block/Component.js +1 -1
- package/esm/components/header-info-block/index.css +5 -5
- package/esm/components/header-mobile/Component.js +1 -1
- package/esm/components/header-mobile/index.css +7 -7
- package/esm/components/image-preview/Component.js +1 -1
- package/esm/components/image-preview/index.css +18 -18
- package/esm/components/image-viewer/component.js +9 -34
- package/esm/components/image-viewer/hooks.d.ts +11 -0
- package/esm/components/image-viewer/hooks.js +43 -0
- package/esm/components/image-viewer/index.css +31 -26
- package/esm/components/image-viewer/single.d.ts +3 -0
- package/esm/components/image-viewer/single.js +33 -0
- package/esm/components/image-viewer/slide.d.ts +16 -0
- package/esm/components/image-viewer/slide.js +49 -9
- package/esm/components/image-viewer/video/index.css +7 -7
- package/esm/components/image-viewer/video/index.js +1 -1
- package/esm/components/info-bar/Component.js +1 -1
- package/esm/components/info-bar/index.css +5 -5
- package/esm/components/navigation-bar/Component.js +1 -1
- package/esm/components/navigation-bar/index.css +7 -7
- package/esm/index.css +5 -5
- package/esm/index.module-affca7da.js +4 -0
- package/index.css +5 -5
- package/index.module-a1b6ce1e.js +6 -0
- package/modern/Component.js +11 -13
- package/modern/components/buttons/index.css +5 -5
- package/modern/components/buttons/index.js +1 -1
- package/modern/components/header/Component.js +1 -1
- package/modern/components/header/index.css +2 -2
- package/modern/components/header-info-block/Component.js +1 -1
- package/modern/components/header-info-block/index.css +5 -5
- package/modern/components/header-mobile/Component.js +1 -1
- package/modern/components/header-mobile/index.css +7 -7
- package/modern/components/image-preview/Component.js +1 -1
- package/modern/components/image-preview/index.css +18 -18
- package/modern/components/image-viewer/component.js +9 -33
- package/modern/components/image-viewer/hooks.d.ts +11 -0
- package/modern/components/image-viewer/hooks.js +42 -0
- package/modern/components/image-viewer/index.css +31 -26
- package/modern/components/image-viewer/single.d.ts +3 -0
- package/modern/components/image-viewer/single.js +31 -0
- package/modern/components/image-viewer/slide.d.ts +16 -0
- package/modern/components/image-viewer/slide.js +45 -9
- package/modern/components/image-viewer/video/index.css +7 -7
- package/modern/components/image-viewer/video/index.js +1 -1
- package/modern/components/info-bar/Component.js +1 -1
- package/modern/components/info-bar/index.css +5 -5
- package/modern/components/navigation-bar/Component.js +1 -1
- package/modern/components/navigation-bar/index.css +7 -7
- package/modern/index.css +5 -5
- package/modern/index.module-74d34a11.js +4 -0
- package/moderncssm/Component.js +10 -12
- package/moderncssm/components/image-viewer/component.js +7 -32
- package/moderncssm/components/image-viewer/hooks.d.ts +11 -0
- package/moderncssm/components/image-viewer/hooks.js +42 -0
- package/moderncssm/components/image-viewer/index.module.css +9 -4
- package/moderncssm/components/image-viewer/single.d.ts +3 -0
- package/moderncssm/components/image-viewer/single.js +31 -0
- package/moderncssm/components/image-viewer/slide.d.ts +2 -2
- package/moderncssm/components/image-viewer/slide.js +4 -4
- package/package.json +5 -4
- package/src/Component.tsx +9 -16
- package/src/components/image-viewer/component.tsx +14 -61
- package/src/components/image-viewer/hooks.ts +66 -0
- package/src/components/image-viewer/index.module.css +6 -1
- package/src/components/image-viewer/single.tsx +67 -0
- package/src/components/image-viewer/slide.tsx +7 -7
- package/esm/slide-c10cd710.d.ts +0 -16
- package/esm/slide-c10cd710.js +0 -51
- package/modern/slide-618331a8.d.ts +0 -16
- package/modern/slide-618331a8.js +0 -47
- package/slide-0cca0f85.d.ts +0 -16
- 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":"
|
|
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:
|
|
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
|
-
} /* сбрасывает синюю подсветку при нажатии */ .
|
|
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
|
-
} .
|
|
38
|
+
} .gallery__component_iyumg .gallery__image_iyumg {
|
|
39
39
|
opacity: 0.3;
|
|
40
|
-
} .
|
|
40
|
+
} .gallery__component_iyumg.gallery__mobile_iyumg {
|
|
41
41
|
padding: 0;
|
|
42
|
-
} .
|
|
42
|
+
} .gallery__active_iyumg > .gallery__image_iyumg {
|
|
43
43
|
opacity: 1;
|
|
44
|
-
} .
|
|
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
|
-
} .
|
|
52
|
+
} .gallery__preview_iyumg.gallery__mobile_iyumg {
|
|
53
53
|
width: 36px;
|
|
54
54
|
height: 46px;
|
|
55
55
|
border-radius: var(--border-radius-8);
|
|
56
|
-
} .
|
|
56
|
+
} .gallery__image_iyumg {
|
|
57
57
|
transition: opacity 0.15s ease-in-out
|
|
58
|
-
} .
|
|
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
|
-
} .
|
|
66
|
+
} .gallery__image_iyumg:hover {
|
|
67
67
|
opacity: 0.7;
|
|
68
|
-
} .
|
|
68
|
+
} .gallery__loading_iyumg {
|
|
69
69
|
background-color: var(--color-static-neutral-100-inverted)
|
|
70
|
-
} .
|
|
70
|
+
} .gallery__loading_iyumg .gallery__active_iyumg {
|
|
71
71
|
background-color: var(--color-static-neutral-300-inverted);
|
|
72
|
-
} .
|
|
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
|
-
} .
|
|
78
|
+
} .gallery__brokenImageWrapper_iyumg.gallery__active_iyumg {
|
|
79
79
|
opacity: 1;
|
|
80
|
-
} .
|
|
80
|
+
} .gallery__brokenIcon_iyumg {
|
|
81
81
|
width: 40px;
|
|
82
82
|
height: 40px;
|
|
83
|
-
} .
|
|
83
|
+
} .gallery__focused_iyumg {
|
|
84
84
|
outline: 2px solid var(--focus-color);
|
|
85
85
|
outline-offset: 2px;
|
|
86
|
-
} .
|
|
86
|
+
} .gallery__canvasPreview_iyumg {
|
|
87
87
|
border-radius: var(--border-radius-12)
|
|
88
|
-
} .
|
|
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,
|
|
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 {
|
|
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),
|
|
20
|
-
var isMobile =
|
|
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 &&
|
|
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 = !
|
|
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,
|
|
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:
|
|
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
|
-
} /* сбрасывает синюю подсветку при нажатии */ .
|
|
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
|
-
} .
|
|
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
|
-
} .
|
|
52
|
+
} .gallery__swiper_52rek.gallery__mobile_52rek {
|
|
53
53
|
max-height: calc(100vh - 210px);
|
|
54
|
-
} .
|
|
54
|
+
} .gallery__swiper_52rek.gallery__mobileVideo_52rek {
|
|
55
55
|
max-height: 100vh;
|
|
56
|
-
} .
|
|
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
|
-
|
|
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
|
-
} .
|
|
67
|
+
} .gallery__singleSlideContainer_52rek.gallery__mobileVideo_52rek {
|
|
63
68
|
max-height: 100vh;
|
|
64
|
-
} .
|
|
69
|
+
} .gallery__hidden_52rek {
|
|
65
70
|
display: none;
|
|
66
|
-
} .
|
|
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
|
-
} .
|
|
78
|
+
} .gallery__slideLoading_52rek {
|
|
74
79
|
background-color: var(--color-static-neutral-100-inverted);
|
|
75
80
|
border-radius: var(--border-radius-8);
|
|
76
|
-
} .
|
|
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
|
-
} .
|
|
87
|
+
} .gallery__image_52rek.gallery__mobile_52rek {
|
|
83
88
|
border-radius: var(--border-radius-0);
|
|
84
|
-
} .
|
|
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
|
-
} .
|
|
95
|
+
} .gallery__verticalImageFit_52rek {
|
|
91
96
|
width: auto;
|
|
92
97
|
height: 100%;
|
|
93
|
-
} .
|
|
98
|
+
} .gallery__horizontalImageFit_52rek {
|
|
94
99
|
width: 100%;
|
|
95
100
|
height: auto;
|
|
96
|
-
} .
|
|
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
|
-
} .
|
|
113
|
+
} .gallery__arrow_52rek:hover {
|
|
109
114
|
background-color: var(--color-static-neutral-0-inverted-hover);
|
|
110
|
-
} .
|
|
115
|
+
} .gallery__arrow_52rek:active {
|
|
111
116
|
background-color: var(--color-static-neutral-0-inverted-press);
|
|
112
|
-
} .
|
|
117
|
+
} .gallery__focused_52rek {
|
|
113
118
|
outline: 2px solid var(--focus-color);
|
|
114
119
|
outline-offset: 2px;
|
|
115
|
-
} .
|
|
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
|
-
} .
|
|
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
|
-
} .
|
|
135
|
+
} .gallery__brokenImgIcon_52rek {
|
|
131
136
|
width: 80px;
|
|
132
137
|
height: 80px;
|
|
133
138
|
margin-bottom: var(--gap-2xs);
|
|
134
|
-
} .
|
|
139
|
+
} .gallery__fullScreenImage_52rek {
|
|
135
140
|
width: 100%;
|
|
136
141
|
height: auto;
|
|
137
142
|
background-color: var(--color-light-base-bg-primary);
|
|
138
|
-
} .
|
|
143
|
+
} .gallery__fullScreenVideo_52rek {
|
|
139
144
|
width: calc(100% - 192px);
|
|
140
145
|
max-height: calc(100vh - 82px);
|
|
141
146
|
}
|
|
@@ -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
|
-
|
|
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:
|
|
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
|
-
} /* сбрасывает синюю подсветку при нажатии */ .
|
|
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
|
-
} .
|
|
31
|
+
} .gallery__video_b6ni5 {
|
|
32
32
|
max-width: 100%;
|
|
33
33
|
max-height: 100%;
|
|
34
34
|
border-radius: var(--border-radius-24);
|
|
35
|
-
} .
|
|
35
|
+
} .gallery__mobile_b6ni5 {
|
|
36
36
|
border-radius: 0;
|
|
37
|
-
} .
|
|
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
|
-
} .
|
|
44
|
+
} .gallery__icon_b6ni5 {
|
|
45
45
|
color: var(--color-static-neutral-0);
|
|
46
|
-
} .
|
|
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":"
|
|
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":"
|
|
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 () {
|