@alfalab/core-components-gallery 5.3.16 → 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 (85) hide show
  1. package/Component.d.ts +8 -0
  2. package/Component.js +21 -10
  3. package/{buttons-774a8876.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 +16 -16
  12. package/components/image-viewer/component.js +2 -2
  13. package/components/image-viewer/index.css +25 -25
  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-preview/index.module.css +3 -3
  23. package/cssm/components/image-viewer/component.js +1 -1
  24. package/cssm/components/image-viewer/index.module.css +6 -6
  25. package/cssm/components/navigation-bar/Component.js +1 -1
  26. package/cssm/context.d.ts +1 -1
  27. package/cssm/index.module.css +1 -1
  28. package/esm/Component.d.ts +8 -0
  29. package/esm/Component.js +21 -10
  30. package/esm/{buttons-19c3e8bb.js → buttons-3fe223c3.js} +1 -1
  31. package/esm/components/header/Component.js +1 -1
  32. package/esm/components/header/buttons.js +1 -1
  33. package/esm/components/header/index.css +6 -6
  34. package/esm/components/header/index.js +1 -1
  35. package/esm/components/header-info-block/Component.js +1 -1
  36. package/esm/components/header-info-block/index.css +5 -5
  37. package/esm/components/image-preview/Component.js +1 -1
  38. package/esm/components/image-preview/index.css +16 -16
  39. package/esm/components/image-viewer/component.js +2 -2
  40. package/esm/components/image-viewer/index.css +25 -25
  41. package/esm/components/image-viewer/index.js +1 -1
  42. package/esm/components/image-viewer/slide.js +1 -1
  43. package/esm/components/index.js +2 -2
  44. package/esm/components/navigation-bar/Component.js +2 -2
  45. package/esm/components/navigation-bar/index.css +6 -6
  46. package/esm/context.d.ts +1 -1
  47. package/esm/index.css +4 -4
  48. package/esm/index.js +2 -2
  49. package/esm/{slide-3dfe6711.js → slide-dae17d46.js} +1 -1
  50. package/index.css +4 -4
  51. package/index.js +2 -2
  52. package/modern/Component.d.ts +8 -0
  53. package/modern/Component.js +21 -10
  54. package/modern/{buttons-843b823a.js → buttons-80612f2b.js} +1 -1
  55. package/modern/components/header/Component.js +1 -1
  56. package/modern/components/header/buttons.js +1 -1
  57. package/modern/components/header/index.css +6 -6
  58. package/modern/components/header/index.js +1 -1
  59. package/modern/components/header-info-block/Component.js +1 -1
  60. package/modern/components/header-info-block/index.css +5 -5
  61. package/modern/components/image-preview/Component.js +1 -1
  62. package/modern/components/image-preview/index.css +16 -16
  63. package/modern/components/image-viewer/component.js +2 -2
  64. package/modern/components/image-viewer/index.css +25 -25
  65. package/modern/components/image-viewer/index.js +1 -1
  66. package/modern/components/image-viewer/slide.js +1 -1
  67. package/modern/components/index.js +2 -2
  68. package/modern/components/navigation-bar/Component.js +2 -2
  69. package/modern/components/navigation-bar/index.css +6 -6
  70. package/modern/context.d.ts +1 -1
  71. package/modern/index.css +4 -4
  72. package/modern/index.js +2 -2
  73. package/modern/{slide-39ef7ba6.js → slide-060d55ad.js} +1 -1
  74. package/package.json +5 -5
  75. package/{slide-9204dd28.js → slide-2267d541.js} +1 -1
  76. package/src/Component.tsx +32 -6
  77. package/src/components/image-viewer/component.tsx +1 -1
  78. package/src/components/navigation-bar/Component.tsx +1 -1
  79. package/src/context.ts +1 -1
  80. /package/{buttons-774a8876.d.ts → buttons-aee8961b.d.ts} +0 -0
  81. /package/esm/{buttons-19c3e8bb.d.ts → buttons-3fe223c3.d.ts} +0 -0
  82. /package/esm/{slide-3dfe6711.d.ts → slide-dae17d46.d.ts} +0 -0
  83. /package/modern/{buttons-843b823a.d.ts → buttons-80612f2b.d.ts} +0 -0
  84. /package/modern/{slide-39ef7ba6.d.ts → slide-060d55ad.d.ts} +0 -0
  85. /package/{slide-9204dd28.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-774a8876.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-9204dd28.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_ljwk8","modal":"gallery__modal_ljwk8"};
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_yt4qn","buttons":"gallery__buttons_yt4qn","iconButton":"gallery__iconButton_yt4qn"};
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-774a8876.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-774a8876.js');
13
+ var components_header_buttons = require('../../buttons-aee8961b.js');
14
14
 
15
15
 
16
16
 
@@ -1,4 +1,4 @@
1
- /* hash: tn3av */
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_yt4qn {
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_yt4qn {
30
+ } .gallery__buttons_wjlmy {
31
31
  display: flex;
32
32
  padding-left: var(--gap-2xl)
33
- } .gallery__buttons_yt4qn path {
33
+ } .gallery__buttons_wjlmy path {
34
34
  color: var(--color-static-graphic-light);
35
- } /* TODO: применять static цвет через prop IconButton'а */ .gallery__iconButton_yt4qn: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_yt4qn: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-774a8876.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_1b6iz","filenameHead":"gallery__filenameHead_1b6iz","filenameContainer":"gallery__filenameContainer_1b6iz","description":"gallery__description_1b6iz"};
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: m3s2q */
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_1b6iz {
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_1b6iz {
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_1b6iz {
29
+ } .gallery__filenameContainer_1062w {
30
30
  overflow: hidden;
31
31
  display: inline-flex;
32
- } .gallery__description_1b6iz {
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_6vdai","active":"gallery__active_6vdai","image":"gallery__image_6vdai","preview":"gallery__preview_6vdai","loading":"gallery__loading_6vdai","brokenImageWrapper":"gallery__brokenImageWrapper_6vdai","brokenIcon":"gallery__brokenIcon_6vdai","focused":"gallery__focused_6vdai"};
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,10 +1,10 @@
1
- /* hash: ckkd0 */
1
+ /* hash: 1pxez */
2
2
  :root {
3
3
  } /* deprecated */ :root {
4
4
  --color-light-bg-primary: #fff;
5
- --color-light-border-link: #0072ef;
6
- --color-static-bg-quaternary-dark: #3a3a3c;
7
- --color-static-bg-secondary-dark: #202022; /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
5
+ --color-light-border-link: #2288fa;
6
+ --color-static-bg-quaternary-dark: #36363a;
7
+ --color-static-bg-secondary-dark: #1c1c1e; /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
8
8
  } :root {
9
9
  --color-static-overlay-white-xhigh: rgba(255, 255, 255, 0.4); /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
10
10
  } :root {
@@ -23,7 +23,7 @@
23
23
  } :root {
24
24
  } :root {
25
25
  --focus-color: var(--color-light-border-link);
26
- } .gallery__component_6vdai {
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_6vdai {
34
+ } .gallery__active_1fk9r {
35
35
  border-color: var(--color-static-overlay-white-xhigh)
36
- } .gallery__active_6vdai > .gallery__image_6vdai {
36
+ } .gallery__active_1fk9r > .gallery__image_1fk9r {
37
37
  opacity: 0.7;
38
- } .gallery__preview_6vdai {
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_6vdai {
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_6vdai:hover {
52
+ } .gallery__image_1fk9r:hover {
53
53
  opacity: 0.7;
54
- } .gallery__loading_6vdai {
54
+ } .gallery__loading_1fk9r {
55
55
  background-color: var(--color-static-bg-secondary-dark)
56
- } .gallery__loading_6vdai .gallery__active_6vdai {
56
+ } .gallery__loading_1fk9r .gallery__active_1fk9r {
57
57
  background-color: var(--color-static-bg-quaternary-dark);
58
- } .gallery__brokenImageWrapper_6vdai {
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_6vdai:hover {
63
+ } .gallery__brokenImageWrapper_1fk9r:hover {
64
64
  opacity: 0.7;
65
- } .gallery__brokenIcon_6vdai {
65
+ } .gallery__brokenIcon_1fk9r {
66
66
  width: 40px;
67
67
  height: 40px;
68
- } .gallery__focused_6vdai {
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-9204dd28.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,14 +1,14 @@
1
- /* hash: ng82a */
1
+ /* hash: 1g54s */
2
2
  :root {
3
3
  } /* deprecated */ :root {
4
4
  --color-light-bg-primary: #fff;
5
- --color-light-border-link: #0072ef;
6
- --color-static-bg-primary-dark: #121212;
7
- --color-static-bg-quaternary-dark: #3a3a3c;
8
- --color-static-bg-secondary-dark: #202022;
5
+ --color-light-border-link: #2288fa;
6
+ --color-static-bg-primary-dark: #0e0e0e;
7
+ --color-static-bg-quaternary-dark: #36363a;
8
+ --color-static-bg-secondary-dark: #1c1c1e;
9
9
  --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 */
10
- --color-static-bg-primary-dark-tint-15: rgb(54, 54, 54);
11
- --color-static-bg-primary-dark-tint-20: rgb(65, 65, 65);
10
+ --color-static-bg-primary-dark-tint-15: rgb(50, 50, 50);
11
+ --color-static-bg-primary-dark-tint-20: rgb(62, 62, 62);
12
12
  } :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 */
13
13
  } :root {
14
14
  } :root {
@@ -27,13 +27,13 @@
27
27
  } :root {
28
28
  } :root {
29
29
  --focus-color: var(--color-light-border-link);
30
- } .gallery__component_cp5ui {
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_cp5ui {
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_cp5ui .gallery__swiper_cp5ui {
45
+ } .gallery__singleSlide_tcbv9 .gallery__swiper_tcbv9 {
46
46
  max-height: calc(100vh - 80px);
47
47
  padding: var(--gap-2xl);
48
- } .gallery__hidden_cp5ui {
48
+ } .gallery__hidden_tcbv9 {
49
49
  display: none;
50
- } .gallery__slide_cp5ui {
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_cp5ui {
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_cp5ui {
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_cp5ui {
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_cp5ui {
74
+ } .gallery__verticalImageFit_tcbv9 {
75
75
  width: auto;
76
76
  height: 100%;
77
- } .gallery__horizontalImageFit_cp5ui {
77
+ } .gallery__horizontalImageFit_tcbv9 {
78
78
  width: 100%;
79
79
  height: auto;
80
- } .gallery__arrow_cp5ui {
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_cp5ui:hover {
92
+ } .gallery__arrow_tcbv9:hover {
93
93
  background-color: var(--color-static-bg-primary-dark-tint-15);
94
- } .gallery__arrow_cp5ui:active {
94
+ } .gallery__arrow_tcbv9:active {
95
95
  background-color: var(--color-static-bg-primary-dark-tint-20);
96
- } .gallery__focused_cp5ui {
96
+ } .gallery__focused_tcbv9 {
97
97
  outline: 2px solid var(--focus-color);
98
98
  outline-offset: 2px;
99
- } .gallery__placeholder_cp5ui {
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_cp5ui {
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_cp5ui {
114
+ } .gallery__brokenImgIcon_tcbv9 {
115
115
  width: 80px;
116
116
  height: 80px;
117
117
  margin-bottom: var(--gap-2xs);
118
- } .gallery__fullScreenImage_cp5ui {
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-9204dd28.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-9204dd28.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-774a8876.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-9204dd28.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_95ojm","preview":"gallery__preview_95ojm"};
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: o8kfn */
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_95ojm {
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_95ojm::-webkit-scrollbar {
30
+ } .gallery__component_1amje::-webkit-scrollbar {
31
31
  display: none;
32
- } .gallery__preview_95ojm {
32
+ } .gallery__preview_1amje {
33
33
  flex-shrink: 0;
34
34
  margin: 0 var(--gap-3xs)
35
- } .gallery__preview_95ojm:first-child {
35
+ } .gallery__preview_1amje:first-child {
36
36
  margin-left: auto;
37
- } .gallery__preview_95ojm: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,