@alfalab/core-components-gallery 5.3.17 → 5.4.0

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 (82) hide show
  1. package/Component.d.ts +8 -0
  2. package/Component.js +21 -10
  3. package/{buttons-e4505fc7.js → buttons-aee8961b.js} +1 -1
  4. package/components/header/Component.js +1 -1
  5. package/components/header/buttons.js +1 -1
  6. package/components/header/index.css +6 -6
  7. package/components/header/index.js +1 -1
  8. package/components/header-info-block/Component.js +1 -1
  9. package/components/header-info-block/index.css +5 -5
  10. package/components/image-preview/Component.js +1 -1
  11. package/components/image-preview/index.css +13 -13
  12. package/components/image-viewer/component.js +2 -2
  13. package/components/image-viewer/index.css +19 -19
  14. package/components/image-viewer/index.js +1 -1
  15. package/components/image-viewer/slide.js +1 -1
  16. package/components/index.js +2 -2
  17. package/components/navigation-bar/Component.js +2 -2
  18. package/components/navigation-bar/index.css +6 -6
  19. package/context.d.ts +1 -1
  20. package/cssm/Component.d.ts +8 -0
  21. package/cssm/Component.js +18 -7
  22. package/cssm/components/image-viewer/component.js +1 -1
  23. package/cssm/components/navigation-bar/Component.js +1 -1
  24. package/cssm/context.d.ts +1 -1
  25. package/esm/Component.d.ts +8 -0
  26. package/esm/Component.js +21 -10
  27. package/esm/{buttons-0503d21b.js → buttons-3fe223c3.js} +1 -1
  28. package/esm/components/header/Component.js +1 -1
  29. package/esm/components/header/buttons.js +1 -1
  30. package/esm/components/header/index.css +6 -6
  31. package/esm/components/header/index.js +1 -1
  32. package/esm/components/header-info-block/Component.js +1 -1
  33. package/esm/components/header-info-block/index.css +5 -5
  34. package/esm/components/image-preview/Component.js +1 -1
  35. package/esm/components/image-preview/index.css +13 -13
  36. package/esm/components/image-viewer/component.js +2 -2
  37. package/esm/components/image-viewer/index.css +19 -19
  38. package/esm/components/image-viewer/index.js +1 -1
  39. package/esm/components/image-viewer/slide.js +1 -1
  40. package/esm/components/index.js +2 -2
  41. package/esm/components/navigation-bar/Component.js +2 -2
  42. package/esm/components/navigation-bar/index.css +6 -6
  43. package/esm/context.d.ts +1 -1
  44. package/esm/index.css +3 -3
  45. package/esm/index.js +2 -2
  46. package/esm/{slide-3647c0d1.js → slide-dae17d46.js} +1 -1
  47. package/index.css +3 -3
  48. package/index.js +2 -2
  49. package/modern/Component.d.ts +8 -0
  50. package/modern/Component.js +21 -10
  51. package/modern/{buttons-a525d5a2.js → buttons-80612f2b.js} +1 -1
  52. package/modern/components/header/Component.js +1 -1
  53. package/modern/components/header/buttons.js +1 -1
  54. package/modern/components/header/index.css +6 -6
  55. package/modern/components/header/index.js +1 -1
  56. package/modern/components/header-info-block/Component.js +1 -1
  57. package/modern/components/header-info-block/index.css +5 -5
  58. package/modern/components/image-preview/Component.js +1 -1
  59. package/modern/components/image-preview/index.css +13 -13
  60. package/modern/components/image-viewer/component.js +2 -2
  61. package/modern/components/image-viewer/index.css +19 -19
  62. package/modern/components/image-viewer/index.js +1 -1
  63. package/modern/components/image-viewer/slide.js +1 -1
  64. package/modern/components/index.js +2 -2
  65. package/modern/components/navigation-bar/Component.js +2 -2
  66. package/modern/components/navigation-bar/index.css +6 -6
  67. package/modern/context.d.ts +1 -1
  68. package/modern/index.css +3 -3
  69. package/modern/index.js +2 -2
  70. package/modern/{slide-f6146c12.js → slide-060d55ad.js} +1 -1
  71. package/package.json +3 -3
  72. package/{slide-b406aa2c.js → slide-2267d541.js} +1 -1
  73. package/src/Component.tsx +32 -6
  74. package/src/components/image-viewer/component.tsx +1 -1
  75. package/src/components/navigation-bar/Component.tsx +1 -1
  76. package/src/context.ts +1 -1
  77. /package/{buttons-e4505fc7.d.ts → buttons-aee8961b.d.ts} +0 -0
  78. /package/esm/{buttons-0503d21b.d.ts → buttons-3fe223c3.d.ts} +0 -0
  79. /package/esm/{slide-3647c0d1.d.ts → slide-dae17d46.d.ts} +0 -0
  80. /package/modern/{buttons-a525d5a2.d.ts → buttons-80612f2b.d.ts} +0 -0
  81. /package/modern/{slide-f6146c12.d.ts → slide-060d55ad.d.ts} +0 -0
  82. /package/{slide-b406aa2c.d.ts → slide-2267d541.d.ts} +0 -0
package/Component.d.ts CHANGED
@@ -23,6 +23,14 @@ type GalleryProps = {
23
23
  * Обработчик закрытия
24
24
  */
25
25
  onClose: () => void;
26
+ /**
27
+ * Индекс текущего изображения
28
+ */
29
+ slideIndex?: number;
30
+ /**
31
+ * Обработчик изменения текущего изображения
32
+ */
33
+ onSlideIndexChange?: (index: number) => void;
26
34
  };
27
35
  declare const Gallery: FC<GalleryProps>;
28
36
  export { GalleryProps, Gallery };
package/Component.js CHANGED
@@ -17,7 +17,7 @@ require('./components/image-preview/paths.js');
17
17
  require('./components/header-info-block/Component.js');
18
18
  require('@alfalab/core-components-typography');
19
19
  require('./utils/split-filename.js');
20
- require('./buttons-e4505fc7.js');
20
+ require('./buttons-aee8961b.js');
21
21
  require('tslib');
22
22
  require('@alfalab/core-components-icon-button');
23
23
  require('@alfalab/core-components-tooltip/desktop');
@@ -30,7 +30,7 @@ require('swiper');
30
30
  require('swiper/react');
31
31
  require('@alfalab/icons-glyph/ChevronBackHeavyMIcon');
32
32
  require('@alfalab/icons-glyph/ChevronForwardHeavyMIcon');
33
- require('./slide-b406aa2c.js');
33
+ require('./slide-2267d541.js');
34
34
  require('./components/image-viewer/paths.js');
35
35
  require('swiper/swiper.min.css');
36
36
 
@@ -38,24 +38,28 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
38
38
 
39
39
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
40
40
 
41
- var styles = {"container":"gallery__container_db9kz","modal":"gallery__modal_db9kz"};
41
+ var styles = {"container":"gallery__container_1hfaf","modal":"gallery__modal_1hfaf"};
42
42
  require('./index.css')
43
43
 
44
44
  var Backdrop = function () { return null; };
45
45
  var Gallery = function (_a) {
46
- var open = _a.open, images = _a.images, _b = _a.initialSlide, initialSlide = _b === void 0 ? 0 : _b, _c = _a.loop, loop = _c === void 0 ? true : _c, onClose = _a.onClose;
47
- var _d = React.useState(initialSlide), currentSlideIndex = _d[0], setCurrentSlideIndex = _d[1];
46
+ var open = _a.open, images = _a.images, slideIndex = _a.slideIndex, _b = _a.initialSlide, initialSlide = _b === void 0 ? 0 : _b, _c = _a.loop, loop = _c === void 0 ? true : _c, onClose = _a.onClose, onSlideIndexChange = _a.onSlideIndexChange;
47
+ var currentSlideIndexState = React.useState(initialSlide);
48
+ var uncontrolled = slideIndex === undefined;
49
+ var _d = uncontrolled
50
+ ? currentSlideIndexState
51
+ : [slideIndex, onSlideIndexChange], currentSlideIndex = _d[0], setCurrentSlideIndex = _d[1];
48
52
  var _e = React.useState(), swiper = _e[0], setSwiper = _e[1];
49
53
  var _f = React.useState([]), imagesMeta = _f[0], setImagesMeta = _f[1];
50
54
  var _g = React.useState(false), fullScreen = _g[0], setFullScreen = _g[1];
51
55
  var slideTo = React.useCallback(function (index) {
52
56
  if (images[index]) {
53
- setCurrentSlideIndex(index);
57
+ setCurrentSlideIndex === null || setCurrentSlideIndex === void 0 ? void 0 : setCurrentSlideIndex(index);
54
58
  if (swiper) {
55
59
  swiper.slideTo(index);
56
60
  }
57
61
  }
58
- }, [images, swiper]);
62
+ }, [images, setCurrentSlideIndex, swiper]);
59
63
  var slideNext = React.useCallback(function () {
60
64
  var lastIndex = images.length - 1;
61
65
  var nextIndex = currentSlideIndex + 1;
@@ -78,9 +82,11 @@ var Gallery = function (_a) {
78
82
  }, [imagesMeta]);
79
83
  var handleClose = React.useCallback(function () {
80
84
  onClose();
81
- setCurrentSlideIndex(initialSlide);
85
+ if (uncontrolled) {
86
+ setCurrentSlideIndex === null || setCurrentSlideIndex === void 0 ? void 0 : setCurrentSlideIndex(initialSlide);
87
+ }
82
88
  setFullScreen(false);
83
- }, [initialSlide, onClose]);
89
+ }, [initialSlide, onClose, setCurrentSlideIndex, uncontrolled]);
84
90
  var handleEscapeKeyDown = function () {
85
91
  if (fullScreen) {
86
92
  setFullScreen(false);
@@ -102,6 +108,11 @@ var Gallery = function (_a) {
102
108
  break;
103
109
  }
104
110
  }, [fullScreen, open, slideNext, slidePrev]);
111
+ React.useEffect(function () {
112
+ if (!uncontrolled && !(swiper === null || swiper === void 0 ? void 0 : swiper.destroyed)) {
113
+ swiper === null || swiper === void 0 ? void 0 : swiper.slideTo(currentSlideIndex);
114
+ }
115
+ }, [uncontrolled, currentSlideIndex, swiper]);
105
116
  React.useEffect(function () {
106
117
  document.addEventListener('keydown', handleKeyDown);
107
118
  return function () {
@@ -117,7 +128,7 @@ var Gallery = function (_a) {
117
128
  images: images,
118
129
  imagesMeta: imagesMeta,
119
130
  fullScreen: fullScreen,
120
- initialSlide: initialSlide,
131
+ initialSlide: uncontrolled ? initialSlide : currentSlideIndex,
121
132
  setFullScreen: setFullScreen,
122
133
  setImageMeta: setImageMeta,
123
134
  slideNext: slideNext,
@@ -13,7 +13,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
13
13
 
14
14
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
15
15
 
16
- var styles = {"header":"gallery__header_18koy","buttons":"gallery__buttons_18koy","iconButton":"gallery__iconButton_18koy"};
16
+ var styles = {"header":"gallery__header_wjlmy","buttons":"gallery__buttons_wjlmy","iconButton":"gallery__iconButton_wjlmy"};
17
17
  require('./components/header/index.css')
18
18
 
19
19
  var Fullscreen = function (_a) {
@@ -7,7 +7,7 @@ var context = require('../../context.js');
7
7
  var utils_utils = require('../../utils/utils.js');
8
8
  var utils_constants = require('../../utils/constants.js');
9
9
  var components_headerInfoBlock_Component = require('../header-info-block/Component.js');
10
- var components_header_buttons = require('../../buttons-e4505fc7.js');
10
+ var components_header_buttons = require('../../buttons-aee8961b.js');
11
11
  require('@alfalab/core-components-typography');
12
12
  require('../../utils/split-filename.js');
13
13
  require('tslib');
@@ -10,7 +10,7 @@ require('@alfalab/icons-glyph/ArrowsInwardMIcon');
10
10
  require('@alfalab/icons-glyph/ArrowsOutwardMIcon');
11
11
  require('@alfalab/icons-glyph/CrossMIcon');
12
12
  require('@alfalab/icons-glyph/PointerDownMIcon');
13
- var components_header_buttons = require('../../buttons-e4505fc7.js');
13
+ var components_header_buttons = require('../../buttons-aee8961b.js');
14
14
 
15
15
 
16
16
 
@@ -1,4 +1,4 @@
1
- /* hash: bjvta */
1
+ /* hash: 3lcw5 */
2
2
  :root {
3
3
  } /* deprecated */ :root {
4
4
  --color-static-graphic-light: #fff; /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
@@ -20,20 +20,20 @@
20
20
  --gap-2xl: 32px;
21
21
  } :root {
22
22
  } :root {
23
- } .gallery__header_18koy {
23
+ } .gallery__header_wjlmy {
24
24
  display: flex;
25
25
  justify-content: space-between;
26
26
  flex-shrink: 0;
27
27
  width: 100%;
28
28
  padding: var(--gap-m) var(--gap-xl);
29
29
  box-sizing: border-box;
30
- } .gallery__buttons_18koy {
30
+ } .gallery__buttons_wjlmy {
31
31
  display: flex;
32
32
  padding-left: var(--gap-2xl)
33
- } .gallery__buttons_18koy path {
33
+ } .gallery__buttons_wjlmy path {
34
34
  color: var(--color-static-graphic-light);
35
- } /* TODO: применять static цвет через prop IconButton'а */ .gallery__iconButton_18koy:hover path {
35
+ } /* TODO: применять static цвет через prop IconButton'а */ .gallery__iconButton_wjlmy:hover path {
36
36
  color: var(--color-static-graphic-light-shade-7);
37
- } .gallery__iconButton_18koy:active path {
37
+ } .gallery__iconButton_wjlmy:active path {
38
38
  color: var(--color-static-graphic-light-shade-15);
39
39
  }
@@ -10,7 +10,7 @@ require('../../utils/constants.js');
10
10
  require('../header-info-block/Component.js');
11
11
  require('@alfalab/core-components-typography');
12
12
  require('../../utils/split-filename.js');
13
- require('../../buttons-e4505fc7.js');
13
+ require('../../buttons-aee8961b.js');
14
14
  require('tslib');
15
15
  require('@alfalab/core-components-icon-button');
16
16
  require('@alfalab/core-components-tooltip/desktop');
@@ -10,7 +10,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
10
10
 
11
11
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
12
12
 
13
- var styles = {"info":"gallery__info_11eyr","filenameHead":"gallery__filenameHead_11eyr","filenameContainer":"gallery__filenameContainer_11eyr","description":"gallery__description_11eyr"};
13
+ var styles = {"info":"gallery__info_1062w","filenameHead":"gallery__filenameHead_1062w","filenameContainer":"gallery__filenameContainer_1062w","description":"gallery__description_1062w"};
14
14
  require('./index.css')
15
15
 
16
16
  var HeaderInfoBlock = function (_a) {
@@ -1,4 +1,4 @@
1
- /* hash: 12wtd */
1
+ /* hash: fimry */
2
2
  :root {
3
3
  } /* deprecated */ :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 */
4
4
  } :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 */
@@ -15,21 +15,21 @@
15
15
  --gap-2xs: 4px;
16
16
  } :root {
17
17
  } :root {
18
- } .gallery__info_11eyr {
18
+ } .gallery__info_1062w {
19
19
  height: 100%;
20
20
  display: flex;
21
21
  flex-direction: column;
22
22
  justify-content: center;
23
23
  overflow: hidden;
24
- } .gallery__filenameHead_11eyr {
24
+ } .gallery__filenameHead_1062w {
25
25
  display: inline;
26
26
  text-overflow: ellipsis;
27
27
  overflow: hidden;
28
28
  white-space: nowrap;
29
- } .gallery__filenameContainer_11eyr {
29
+ } .gallery__filenameContainer_1062w {
30
30
  overflow: hidden;
31
31
  display: inline-flex;
32
- } .gallery__description_11eyr {
32
+ } .gallery__description_1062w {
33
33
  display: inline;
34
34
  text-overflow: ellipsis;
35
35
  overflow: hidden;
@@ -13,7 +13,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
13
13
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
14
14
  var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
15
15
 
16
- var styles = {"component":"gallery__component_1w4x4","active":"gallery__active_1w4x4","image":"gallery__image_1w4x4","preview":"gallery__preview_1w4x4","loading":"gallery__loading_1w4x4","brokenImageWrapper":"gallery__brokenImageWrapper_1w4x4","brokenIcon":"gallery__brokenIcon_1w4x4","focused":"gallery__focused_1w4x4"};
16
+ var styles = {"component":"gallery__component_1fk9r","active":"gallery__active_1fk9r","image":"gallery__image_1fk9r","preview":"gallery__preview_1fk9r","loading":"gallery__loading_1fk9r","brokenImageWrapper":"gallery__brokenImageWrapper_1fk9r","brokenIcon":"gallery__brokenIcon_1fk9r","focused":"gallery__focused_1fk9r"};
17
17
  require('./index.css')
18
18
 
19
19
  var ImagePreview = function (_a) {
@@ -1,4 +1,4 @@
1
- /* hash: tdlnk */
1
+ /* hash: 1pxez */
2
2
  :root {
3
3
  } /* deprecated */ :root {
4
4
  --color-light-bg-primary: #fff;
@@ -23,7 +23,7 @@
23
23
  } :root {
24
24
  } :root {
25
25
  --focus-color: var(--color-light-border-link);
26
- } .gallery__component_1w4x4 {
26
+ } .gallery__component_1fk9r {
27
27
  display: flex;
28
28
  padding: var(--gap-2xs);
29
29
  border: 2px solid rgba(0, 0, 0, 0);
@@ -31,11 +31,11 @@
31
31
  overflow: hidden;
32
32
  transition: border 0.15s ease-in-out;
33
33
  outline: none;
34
- } .gallery__active_1w4x4 {
34
+ } .gallery__active_1fk9r {
35
35
  border-color: var(--color-static-overlay-white-xhigh)
36
- } .gallery__active_1w4x4 > .gallery__image_1w4x4 {
36
+ } .gallery__active_1fk9r > .gallery__image_1fk9r {
37
37
  opacity: 0.7;
38
- } .gallery__preview_1w4x4 {
38
+ } .gallery__preview_1fk9r {
39
39
  width: 56px;
40
40
  height: 56px;
41
41
  flex-shrink: 0;
@@ -43,29 +43,29 @@
43
43
  cursor: pointer;
44
44
  -webkit-user-select: none;
45
45
  user-select: none;
46
- } .gallery__image_1w4x4 {
46
+ } .gallery__image_1fk9r {
47
47
  background-color: var(--color-light-bg-primary);
48
48
  background-size: cover;
49
49
  background-repeat: no-repeat;
50
50
  background-position: center;
51
51
  transition: opacity 0.15s ease-in-out
52
- } .gallery__image_1w4x4:hover {
52
+ } .gallery__image_1fk9r:hover {
53
53
  opacity: 0.7;
54
- } .gallery__loading_1w4x4 {
54
+ } .gallery__loading_1fk9r {
55
55
  background-color: var(--color-static-bg-secondary-dark)
56
- } .gallery__loading_1w4x4 .gallery__active_1w4x4 {
56
+ } .gallery__loading_1fk9r .gallery__active_1fk9r {
57
57
  background-color: var(--color-static-bg-quaternary-dark);
58
- } .gallery__brokenImageWrapper_1w4x4 {
58
+ } .gallery__brokenImageWrapper_1fk9r {
59
59
  display: flex;
60
60
  justify-content: center;
61
61
  align-items: center;
62
62
  background-color: var(--color-static-bg-quaternary-dark)
63
- } .gallery__brokenImageWrapper_1w4x4:hover {
63
+ } .gallery__brokenImageWrapper_1fk9r:hover {
64
64
  opacity: 0.7;
65
- } .gallery__brokenIcon_1w4x4 {
65
+ } .gallery__brokenIcon_1fk9r {
66
66
  width: 40px;
67
67
  height: 40px;
68
- } .gallery__focused_1w4x4 {
68
+ } .gallery__focused_1fk9r {
69
69
  outline: 2px solid var(--focus-color);
70
70
  outline-offset: 2px;
71
71
  }
@@ -14,7 +14,7 @@ var ChevronForwardHeavyMIcon = require('@alfalab/icons-glyph/ChevronForwardHeavy
14
14
  var context = require('../../context.js');
15
15
  var utils_utils = require('../../utils/utils.js');
16
16
  var utils_constants = require('../../utils/constants.js');
17
- var components_imageViewer_slide = require('../../slide-b406aa2c.js');
17
+ var components_imageViewer_slide = require('../../slide-2267d541.js');
18
18
  require('swiper/swiper.min.css');
19
19
  require('@alfalab/core-components-typography');
20
20
  require('./paths.js');
@@ -37,7 +37,7 @@ var ImageViewer = function () {
37
37
  var swiper = getSwiper();
38
38
  var handleSlideChange = React.useCallback(function () {
39
39
  var _a;
40
- setCurrentSlideIndex((_a = swiper === null || swiper === void 0 ? void 0 : swiper.activeIndex) !== null && _a !== void 0 ? _a : initialSlide);
40
+ setCurrentSlideIndex === null || setCurrentSlideIndex === void 0 ? void 0 : setCurrentSlideIndex((_a = swiper === null || swiper === void 0 ? void 0 : swiper.activeIndex) !== null && _a !== void 0 ? _a : initialSlide);
41
41
  }, [setCurrentSlideIndex, swiper, initialSlide]);
42
42
  var handlePrevClick = function () {
43
43
  slidePrev();
@@ -1,4 +1,4 @@
1
- /* hash: 1440e */
1
+ /* hash: 1g54s */
2
2
  :root {
3
3
  } /* deprecated */ :root {
4
4
  --color-light-bg-primary: #fff;
@@ -27,13 +27,13 @@
27
27
  } :root {
28
28
  } :root {
29
29
  --focus-color: var(--color-light-border-link);
30
- } .gallery__component_4giv9 {
30
+ } .gallery__component_tcbv9 {
31
31
  display: flex;
32
32
  flex-grow: 1;
33
33
  justify-content: center;
34
34
  align-items: center;
35
35
  background-color: var(--color-static-bg-primary-dark);
36
- } .gallery__swiper_4giv9 {
36
+ } .gallery__swiper_tcbv9 {
37
37
  display: flex;
38
38
  width: 100%;
39
39
  height: 100%;
@@ -42,42 +42,42 @@
42
42
  max-height: calc(100vh - 168px);
43
43
  padding: var(--gap-2xl) var(--gap-m);
44
44
  box-sizing: border-box;
45
- } .gallery__singleSlide_4giv9 .gallery__swiper_4giv9 {
45
+ } .gallery__singleSlide_tcbv9 .gallery__swiper_tcbv9 {
46
46
  max-height: calc(100vh - 80px);
47
47
  padding: var(--gap-2xl);
48
- } .gallery__hidden_4giv9 {
48
+ } .gallery__hidden_tcbv9 {
49
49
  display: none;
50
- } .gallery__slide_4giv9 {
50
+ } .gallery__slide_tcbv9 {
51
51
  position: relative;
52
52
  display: flex;
53
53
  justify-content: center;
54
54
  align-items: center;
55
55
  width: 100%;
56
56
  height: 100%;
57
- } .gallery__slideLoading_4giv9 {
57
+ } .gallery__slideLoading_tcbv9 {
58
58
  background-color: var(--color-static-bg-secondary-dark);
59
59
  border-radius: var(--border-radius-m);
60
- } .gallery__image_4giv9 {
60
+ } .gallery__image_tcbv9 {
61
61
  width: 0;
62
62
  height: 0;
63
63
  -webkit-user-select: none;
64
64
  user-select: none;
65
65
  background-color: var(--color-light-bg-primary);
66
66
  border-radius: var(--border-radius-m);
67
- } .gallery__smallImage_4giv9 {
67
+ } .gallery__smallImage_tcbv9 {
68
68
  position: relative;
69
69
  width: auto;
70
70
  height: auto;
71
71
  -webkit-user-select: none;
72
72
  user-select: none;
73
73
  background-color: var(--color-light-bg-primary);
74
- } .gallery__verticalImageFit_4giv9 {
74
+ } .gallery__verticalImageFit_tcbv9 {
75
75
  width: auto;
76
76
  height: 100%;
77
- } .gallery__horizontalImageFit_4giv9 {
77
+ } .gallery__horizontalImageFit_tcbv9 {
78
78
  width: 100%;
79
79
  height: auto;
80
- } .gallery__arrow_4giv9 {
80
+ } .gallery__arrow_tcbv9 {
81
81
  display: flex;
82
82
  flex-direction: column;
83
83
  justify-content: center;
@@ -89,14 +89,14 @@
89
89
  color: var(--color-static-graphic-light);
90
90
  transition: background-color 0.15s ease-in-out;
91
91
  outline: none
92
- } .gallery__arrow_4giv9:hover {
92
+ } .gallery__arrow_tcbv9:hover {
93
93
  background-color: var(--color-static-bg-primary-dark-tint-15);
94
- } .gallery__arrow_4giv9:active {
94
+ } .gallery__arrow_tcbv9:active {
95
95
  background-color: var(--color-static-bg-primary-dark-tint-20);
96
- } .gallery__focused_4giv9 {
96
+ } .gallery__focused_tcbv9 {
97
97
  outline: 2px solid var(--focus-color);
98
98
  outline-offset: 2px;
99
- } .gallery__placeholder_4giv9 {
99
+ } .gallery__placeholder_tcbv9 {
100
100
  display: flex;
101
101
  justify-content: center;
102
102
  align-items: center;
@@ -104,18 +104,18 @@
104
104
  height: 300px;
105
105
  border-radius: var(--border-radius-m);
106
106
  background-color: var(--color-static-bg-quaternary-dark);
107
- } .gallery__brokenImgWrapper_4giv9 {
107
+ } .gallery__brokenImgWrapper_tcbv9 {
108
108
  position: relative;
109
109
  display: flex;
110
110
  flex-direction: column;
111
111
  align-items: center;
112
112
  width: 150px;
113
113
  text-align: center;
114
- } .gallery__brokenImgIcon_4giv9 {
114
+ } .gallery__brokenImgIcon_tcbv9 {
115
115
  width: 80px;
116
116
  height: 80px;
117
117
  margin-bottom: var(--gap-2xs);
118
- } .gallery__fullScreenImage_4giv9 {
118
+ } .gallery__fullScreenImage_tcbv9 {
119
119
  width: 100%;
120
120
  height: auto;
121
121
  background-color: var(--color-light-bg-primary);
@@ -15,7 +15,7 @@ require('@alfalab/icons-glyph/ChevronForwardHeavyMIcon');
15
15
  require('../../context.js');
16
16
  require('../../utils/utils.js');
17
17
  require('../../utils/constants.js');
18
- require('../../slide-b406aa2c.js');
18
+ require('../../slide-2267d541.js');
19
19
  require('@alfalab/core-components-typography');
20
20
  require('./paths.js');
21
21
  require('swiper/swiper.min.css');
@@ -8,7 +8,7 @@ require('@alfalab/core-components-typography');
8
8
  require('../../utils/utils.js');
9
9
  require('../../utils/constants.js');
10
10
  require('./paths.js');
11
- var components_imageViewer_slide = require('../../slide-b406aa2c.js');
11
+ var components_imageViewer_slide = require('../../slide-2267d541.js');
12
12
 
13
13
 
14
14
 
@@ -13,7 +13,7 @@ require('../utils/constants.js');
13
13
  require('./header-info-block/Component.js');
14
14
  require('@alfalab/core-components-typography');
15
15
  require('../utils/split-filename.js');
16
- require('../buttons-e4505fc7.js');
16
+ require('../buttons-aee8961b.js');
17
17
  require('tslib');
18
18
  require('@alfalab/core-components-icon-button');
19
19
  require('@alfalab/core-components-tooltip/desktop');
@@ -29,7 +29,7 @@ require('swiper');
29
29
  require('swiper/react');
30
30
  require('@alfalab/icons-glyph/ChevronBackHeavyMIcon');
31
31
  require('@alfalab/icons-glyph/ChevronForwardHeavyMIcon');
32
- require('../slide-b406aa2c.js');
32
+ require('../slide-2267d541.js');
33
33
  require('./image-viewer/paths.js');
34
34
  require('swiper/swiper.min.css');
35
35
 
@@ -15,7 +15,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
15
15
 
16
16
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
17
17
 
18
- var styles = {"component":"gallery__component_1yf8d","preview":"gallery__preview_1yf8d"};
18
+ var styles = {"component":"gallery__component_1amje","preview":"gallery__preview_1amje"};
19
19
  require('./index.css')
20
20
 
21
21
  var MIN_SCROLL_STEP = 24;
@@ -24,7 +24,7 @@ var NavigationBar = function () {
24
24
  var _a = React.useContext(context.GalleryContext), images = _a.images, currentSlideIndex = _a.currentSlideIndex, setCurrentSlideIndex = _a.setCurrentSlideIndex, getSwiper = _a.getSwiper;
25
25
  var swiper = getSwiper();
26
26
  var handlePreviewSelect = function (index) {
27
- setCurrentSlideIndex(index);
27
+ setCurrentSlideIndex === null || setCurrentSlideIndex === void 0 ? void 0 : setCurrentSlideIndex(index);
28
28
  if (swiper) {
29
29
  swiper.slideTo(index);
30
30
  }
@@ -1,4 +1,4 @@
1
- /* hash: dd0k5 */
1
+ /* hash: 19wtv */
2
2
  :root {
3
3
  } /* deprecated */ :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 */
4
4
  } :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 */
@@ -16,7 +16,7 @@
16
16
  --gap-xl: 24px;
17
17
  } :root {
18
18
  } :root {
19
- } .gallery__component_1yf8d {
19
+ } .gallery__component_1amje {
20
20
  display: flex;
21
21
  flex-wrap: nowrap;
22
22
  align-content: center;
@@ -27,13 +27,13 @@
27
27
  padding: 10px var(--gap-xl);
28
28
  -ms-overflow-style: none;
29
29
  scrollbar-width: none
30
- } .gallery__component_1yf8d::-webkit-scrollbar {
30
+ } .gallery__component_1amje::-webkit-scrollbar {
31
31
  display: none;
32
- } .gallery__preview_1yf8d {
32
+ } .gallery__preview_1amje {
33
33
  flex-shrink: 0;
34
34
  margin: 0 var(--gap-3xs)
35
- } .gallery__preview_1yf8d:first-child {
35
+ } .gallery__preview_1amje:first-child {
36
36
  margin-left: auto;
37
- } .gallery__preview_1yf8d:last-child {
37
+ } .gallery__preview_1amje:last-child {
38
38
  margin-right: auto;
39
39
  }
package/context.d.ts CHANGED
@@ -16,7 +16,7 @@ type GalleryContext = {
16
16
  getSwiper: () => SwiperCore | undefined;
17
17
  setSwiper: (swiper: SwiperCore) => void;
18
18
  onClose: () => void;
19
- setCurrentSlideIndex: (index: number) => void;
19
+ setCurrentSlideIndex?: (index: number) => void;
20
20
  getCurrentImage: () => GalleryImage | undefined;
21
21
  getCurrentImageMeta: () => ImageMeta | undefined;
22
22
  };
@@ -23,6 +23,14 @@ type GalleryProps = {
23
23
  * Обработчик закрытия
24
24
  */
25
25
  onClose: () => void;
26
+ /**
27
+ * Индекс текущего изображения
28
+ */
29
+ slideIndex?: number;
30
+ /**
31
+ * Обработчик изменения текущего изображения
32
+ */
33
+ onSlideIndexChange?: (index: number) => void;
26
34
  };
27
35
  declare const Gallery: FC<GalleryProps>;
28
36
  export { GalleryProps, Gallery };
package/cssm/Component.js CHANGED
@@ -47,19 +47,23 @@ var styles__default = /*#__PURE__*/_interopDefaultCompat(styles);
47
47
 
48
48
  var Backdrop = function () { return null; };
49
49
  var Gallery = function (_a) {
50
- var open = _a.open, images = _a.images, _b = _a.initialSlide, initialSlide = _b === void 0 ? 0 : _b, _c = _a.loop, loop = _c === void 0 ? true : _c, onClose = _a.onClose;
51
- var _d = React.useState(initialSlide), currentSlideIndex = _d[0], setCurrentSlideIndex = _d[1];
50
+ var open = _a.open, images = _a.images, slideIndex = _a.slideIndex, _b = _a.initialSlide, initialSlide = _b === void 0 ? 0 : _b, _c = _a.loop, loop = _c === void 0 ? true : _c, onClose = _a.onClose, onSlideIndexChange = _a.onSlideIndexChange;
51
+ var currentSlideIndexState = React.useState(initialSlide);
52
+ var uncontrolled = slideIndex === undefined;
53
+ var _d = uncontrolled
54
+ ? currentSlideIndexState
55
+ : [slideIndex, onSlideIndexChange], currentSlideIndex = _d[0], setCurrentSlideIndex = _d[1];
52
56
  var _e = React.useState(), swiper = _e[0], setSwiper = _e[1];
53
57
  var _f = React.useState([]), imagesMeta = _f[0], setImagesMeta = _f[1];
54
58
  var _g = React.useState(false), fullScreen = _g[0], setFullScreen = _g[1];
55
59
  var slideTo = React.useCallback(function (index) {
56
60
  if (images[index]) {
57
- setCurrentSlideIndex(index);
61
+ setCurrentSlideIndex === null || setCurrentSlideIndex === void 0 ? void 0 : setCurrentSlideIndex(index);
58
62
  if (swiper) {
59
63
  swiper.slideTo(index);
60
64
  }
61
65
  }
62
- }, [images, swiper]);
66
+ }, [images, setCurrentSlideIndex, swiper]);
63
67
  var slideNext = React.useCallback(function () {
64
68
  var lastIndex = images.length - 1;
65
69
  var nextIndex = currentSlideIndex + 1;
@@ -82,9 +86,11 @@ var Gallery = function (_a) {
82
86
  }, [imagesMeta]);
83
87
  var handleClose = React.useCallback(function () {
84
88
  onClose();
85
- setCurrentSlideIndex(initialSlide);
89
+ if (uncontrolled) {
90
+ setCurrentSlideIndex === null || setCurrentSlideIndex === void 0 ? void 0 : setCurrentSlideIndex(initialSlide);
91
+ }
86
92
  setFullScreen(false);
87
- }, [initialSlide, onClose]);
93
+ }, [initialSlide, onClose, setCurrentSlideIndex, uncontrolled]);
88
94
  var handleEscapeKeyDown = function () {
89
95
  if (fullScreen) {
90
96
  setFullScreen(false);
@@ -106,6 +112,11 @@ var Gallery = function (_a) {
106
112
  break;
107
113
  }
108
114
  }, [fullScreen, open, slideNext, slidePrev]);
115
+ React.useEffect(function () {
116
+ if (!uncontrolled && !(swiper === null || swiper === void 0 ? void 0 : swiper.destroyed)) {
117
+ swiper === null || swiper === void 0 ? void 0 : swiper.slideTo(currentSlideIndex);
118
+ }
119
+ }, [uncontrolled, currentSlideIndex, swiper]);
109
120
  React.useEffect(function () {
110
121
  document.addEventListener('keydown', handleKeyDown);
111
122
  return function () {
@@ -121,7 +132,7 @@ var Gallery = function (_a) {
121
132
  images: images,
122
133
  imagesMeta: imagesMeta,
123
134
  fullScreen: fullScreen,
124
- initialSlide: initialSlide,
135
+ initialSlide: uncontrolled ? initialSlide : currentSlideIndex,
125
136
  setFullScreen: setFullScreen,
126
137
  setImageMeta: setImageMeta,
127
138
  slideNext: slideNext,
@@ -39,7 +39,7 @@ var ImageViewer = function () {
39
39
  var swiper = getSwiper();
40
40
  var handleSlideChange = React.useCallback(function () {
41
41
  var _a;
42
- setCurrentSlideIndex((_a = swiper === null || swiper === void 0 ? void 0 : swiper.activeIndex) !== null && _a !== void 0 ? _a : initialSlide);
42
+ setCurrentSlideIndex === null || setCurrentSlideIndex === void 0 ? void 0 : setCurrentSlideIndex((_a = swiper === null || swiper === void 0 ? void 0 : swiper.activeIndex) !== null && _a !== void 0 ? _a : initialSlide);
43
43
  }, [setCurrentSlideIndex, swiper, initialSlide]);
44
44
  var handlePrevClick = function () {
45
45
  slidePrev();
@@ -24,7 +24,7 @@ var NavigationBar = function () {
24
24
  var _a = React.useContext(context.GalleryContext), images = _a.images, currentSlideIndex = _a.currentSlideIndex, setCurrentSlideIndex = _a.setCurrentSlideIndex, getSwiper = _a.getSwiper;
25
25
  var swiper = getSwiper();
26
26
  var handlePreviewSelect = function (index) {
27
- setCurrentSlideIndex(index);
27
+ setCurrentSlideIndex === null || setCurrentSlideIndex === void 0 ? void 0 : setCurrentSlideIndex(index);
28
28
  if (swiper) {
29
29
  swiper.slideTo(index);
30
30
  }
package/cssm/context.d.ts CHANGED
@@ -16,7 +16,7 @@ type GalleryContext = {
16
16
  getSwiper: () => SwiperCore | undefined;
17
17
  setSwiper: (swiper: SwiperCore) => void;
18
18
  onClose: () => void;
19
- setCurrentSlideIndex: (index: number) => void;
19
+ setCurrentSlideIndex?: (index: number) => void;
20
20
  getCurrentImage: () => GalleryImage | undefined;
21
21
  getCurrentImageMeta: () => ImageMeta | undefined;
22
22
  };