@alfalab/core-components-gallery 7.2.3 → 7.3.0-alfasans

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 (285) hide show
  1. package/Component.js +51 -7
  2. package/Component.js.map +1 -1
  3. package/components/bottom-button/index.css +5 -5
  4. package/components/bottom-button/index.module.css.js +1 -1
  5. package/components/buttons/index.css +5 -5
  6. package/components/buttons/index.d.ts +3 -1
  7. package/components/buttons/index.js +49 -12
  8. package/components/buttons/index.js.map +1 -1
  9. package/components/buttons/index.module.css.js +1 -1
  10. package/components/header/Component.js +1 -0
  11. package/components/header/Component.js.map +1 -1
  12. package/components/header/index.css +3 -2
  13. package/components/header/index.module.css.js +1 -1
  14. package/components/header/index.module.css.js.map +1 -1
  15. package/components/header-info-block/Component.js +2 -1
  16. package/components/header-info-block/Component.js.map +1 -1
  17. package/components/header-info-block/index.css +4 -4
  18. package/components/header-info-block/index.module.css.js +1 -1
  19. package/components/header-mobile/index.css +6 -6
  20. package/components/header-mobile/index.module.css.js +1 -1
  21. package/components/image-preview/Component.js +2 -1
  22. package/components/image-preview/Component.js.map +1 -1
  23. package/components/image-preview/index.css +20 -20
  24. package/components/image-preview/index.module.css.js +1 -1
  25. package/components/image-preview/index.module.css.js.map +1 -1
  26. package/components/image-viewer/hooks.js +3 -2
  27. package/components/image-viewer/hooks.js.map +1 -1
  28. package/components/image-viewer/index.css +30 -31
  29. package/components/image-viewer/index.module.css.js +1 -1
  30. package/components/image-viewer/index.module.css.js.map +1 -1
  31. package/components/image-viewer/single.js +1 -0
  32. package/components/image-viewer/single.js.map +1 -1
  33. package/components/image-viewer/slide.js +3 -2
  34. package/components/image-viewer/slide.js.map +1 -1
  35. package/components/image-viewer/video/index.css +22 -10
  36. package/components/image-viewer/video/index.js +50 -15
  37. package/components/image-viewer/video/index.js.map +1 -1
  38. package/components/image-viewer/video/index.module.css.js +1 -1
  39. package/components/image-viewer/video/index.module.css.js.map +1 -1
  40. package/components/info-bar/Component.js +1 -0
  41. package/components/info-bar/Component.js.map +1 -1
  42. package/components/info-bar/index.css +3 -3
  43. package/components/info-bar/index.module.css.js +1 -1
  44. package/components/navigation-bar/Component.js +56 -26
  45. package/components/navigation-bar/Component.js.map +1 -1
  46. package/components/navigation-bar/index.css +21 -11
  47. package/components/navigation-bar/index.module.css.js +1 -1
  48. package/components/navigation-bar/index.module.css.js.map +1 -1
  49. package/components/subtitles/index.css +3 -3
  50. package/components/subtitles/index.module.css.js +1 -1
  51. package/constants.d.ts +1 -1
  52. package/constants.js +1 -1
  53. package/constants.js.map +1 -1
  54. package/cssm/Component.js +51 -7
  55. package/cssm/Component.js.map +1 -1
  56. package/cssm/components/buttons/index.d.ts +3 -1
  57. package/cssm/components/buttons/index.js +54 -17
  58. package/cssm/components/buttons/index.js.map +1 -1
  59. package/cssm/components/header/Component.js +1 -0
  60. package/cssm/components/header/Component.js.map +1 -1
  61. package/cssm/components/header/index.module.css +2 -1
  62. package/cssm/components/header-info-block/Component.js +2 -1
  63. package/cssm/components/header-info-block/Component.js.map +1 -1
  64. package/cssm/components/image-preview/Component.js +2 -1
  65. package/cssm/components/image-preview/Component.js.map +1 -1
  66. package/cssm/components/image-preview/index.module.css +3 -3
  67. package/cssm/components/image-viewer/hooks.js +3 -2
  68. package/cssm/components/image-viewer/hooks.js.map +1 -1
  69. package/cssm/components/image-viewer/index.module.css +2 -3
  70. package/cssm/components/image-viewer/single.js +1 -0
  71. package/cssm/components/image-viewer/single.js.map +1 -1
  72. package/cssm/components/image-viewer/slide.js +3 -2
  73. package/cssm/components/image-viewer/slide.js.map +1 -1
  74. package/cssm/components/image-viewer/video/index.js +50 -15
  75. package/cssm/components/image-viewer/video/index.js.map +1 -1
  76. package/cssm/components/image-viewer/video/index.module.css +15 -3
  77. package/cssm/components/info-bar/Component.js +1 -0
  78. package/cssm/components/info-bar/Component.js.map +1 -1
  79. package/cssm/components/navigation-bar/Component.js +56 -26
  80. package/cssm/components/navigation-bar/Component.js.map +1 -1
  81. package/cssm/components/navigation-bar/index.module.css +13 -3
  82. package/cssm/constants.d.ts +1 -1
  83. package/cssm/constants.js +1 -1
  84. package/cssm/constants.js.map +1 -1
  85. package/cssm/hooks/use-custom-subtitles.js +57 -11
  86. package/cssm/hooks/use-custom-subtitles.js.map +1 -1
  87. package/cssm/index.js +1 -0
  88. package/cssm/index.js.map +1 -1
  89. package/cssm/types.d.ts +4 -2
  90. package/cssm/utils/index.d.ts +1 -0
  91. package/cssm/utils/index.js +2 -0
  92. package/cssm/utils/index.js.map +1 -1
  93. package/cssm/utils/modern-download.d.ts +6 -0
  94. package/cssm/utils/modern-download.js +113 -0
  95. package/cssm/utils/modern-download.js.map +1 -0
  96. package/esm/Component.js +51 -7
  97. package/esm/Component.js.map +1 -1
  98. package/esm/components/bottom-button/index.css +5 -5
  99. package/esm/components/bottom-button/index.module.css.js +1 -1
  100. package/esm/components/buttons/index.css +5 -5
  101. package/esm/components/buttons/index.d.ts +3 -1
  102. package/esm/components/buttons/index.js +50 -13
  103. package/esm/components/buttons/index.js.map +1 -1
  104. package/esm/components/buttons/index.module.css.js +1 -1
  105. package/esm/components/header/Component.js +1 -0
  106. package/esm/components/header/Component.js.map +1 -1
  107. package/esm/components/header/index.css +3 -2
  108. package/esm/components/header/index.module.css.js +1 -1
  109. package/esm/components/header/index.module.css.js.map +1 -1
  110. package/esm/components/header-info-block/Component.js +2 -1
  111. package/esm/components/header-info-block/Component.js.map +1 -1
  112. package/esm/components/header-info-block/index.css +4 -4
  113. package/esm/components/header-info-block/index.module.css.js +1 -1
  114. package/esm/components/header-mobile/index.css +6 -6
  115. package/esm/components/header-mobile/index.module.css.js +1 -1
  116. package/esm/components/image-preview/Component.js +2 -1
  117. package/esm/components/image-preview/Component.js.map +1 -1
  118. package/esm/components/image-preview/index.css +20 -20
  119. package/esm/components/image-preview/index.module.css.js +1 -1
  120. package/esm/components/image-preview/index.module.css.js.map +1 -1
  121. package/esm/components/image-viewer/hooks.js +3 -2
  122. package/esm/components/image-viewer/hooks.js.map +1 -1
  123. package/esm/components/image-viewer/index.css +30 -31
  124. package/esm/components/image-viewer/index.module.css.js +1 -1
  125. package/esm/components/image-viewer/index.module.css.js.map +1 -1
  126. package/esm/components/image-viewer/single.js +1 -0
  127. package/esm/components/image-viewer/single.js.map +1 -1
  128. package/esm/components/image-viewer/slide.js +3 -2
  129. package/esm/components/image-viewer/slide.js.map +1 -1
  130. package/esm/components/image-viewer/video/index.css +22 -10
  131. package/esm/components/image-viewer/video/index.js +51 -16
  132. package/esm/components/image-viewer/video/index.js.map +1 -1
  133. package/esm/components/image-viewer/video/index.module.css.js +1 -1
  134. package/esm/components/image-viewer/video/index.module.css.js.map +1 -1
  135. package/esm/components/info-bar/Component.js +1 -0
  136. package/esm/components/info-bar/Component.js.map +1 -1
  137. package/esm/components/info-bar/index.css +3 -3
  138. package/esm/components/info-bar/index.module.css.js +1 -1
  139. package/esm/components/navigation-bar/Component.js +56 -25
  140. package/esm/components/navigation-bar/Component.js.map +1 -1
  141. package/esm/components/navigation-bar/index.css +21 -11
  142. package/esm/components/navigation-bar/index.module.css.js +1 -1
  143. package/esm/components/navigation-bar/index.module.css.js.map +1 -1
  144. package/esm/components/subtitles/index.css +3 -3
  145. package/esm/components/subtitles/index.module.css.js +1 -1
  146. package/esm/constants.d.ts +1 -1
  147. package/esm/constants.js +1 -1
  148. package/esm/constants.js.map +1 -1
  149. package/esm/hooks/use-custom-subtitles.js +57 -11
  150. package/esm/hooks/use-custom-subtitles.js.map +1 -1
  151. package/esm/index.css +9 -9
  152. package/esm/index.js +1 -0
  153. package/esm/index.js.map +1 -1
  154. package/esm/index.module.css.js +1 -1
  155. package/esm/types.d.ts +4 -2
  156. package/esm/utils/index.d.ts +1 -0
  157. package/esm/utils/index.js +1 -0
  158. package/esm/utils/index.js.map +1 -1
  159. package/esm/utils/modern-download.d.ts +6 -0
  160. package/esm/utils/modern-download.js +109 -0
  161. package/esm/utils/modern-download.js.map +1 -0
  162. package/hooks/use-custom-subtitles.js +57 -11
  163. package/hooks/use-custom-subtitles.js.map +1 -1
  164. package/index.css +9 -9
  165. package/index.js +1 -0
  166. package/index.js.map +1 -1
  167. package/index.module.css.js +1 -1
  168. package/modern/Component.js +50 -7
  169. package/modern/Component.js.map +1 -1
  170. package/modern/components/bottom-button/index.css +5 -5
  171. package/modern/components/bottom-button/index.module.css.js +1 -1
  172. package/modern/components/buttons/index.css +5 -5
  173. package/modern/components/buttons/index.d.ts +3 -1
  174. package/modern/components/buttons/index.js +51 -12
  175. package/modern/components/buttons/index.js.map +1 -1
  176. package/modern/components/buttons/index.module.css.js +1 -1
  177. package/modern/components/header/index.css +3 -2
  178. package/modern/components/header/index.module.css.js +1 -1
  179. package/modern/components/header/index.module.css.js.map +1 -1
  180. package/modern/components/header-info-block/Component.js +1 -1
  181. package/modern/components/header-info-block/Component.js.map +1 -1
  182. package/modern/components/header-info-block/index.css +4 -4
  183. package/modern/components/header-info-block/index.module.css.js +1 -1
  184. package/modern/components/header-mobile/index.css +6 -6
  185. package/modern/components/header-mobile/index.module.css.js +1 -1
  186. package/modern/components/image-preview/Component.js +1 -1
  187. package/modern/components/image-preview/Component.js.map +1 -1
  188. package/modern/components/image-preview/index.css +20 -20
  189. package/modern/components/image-preview/index.module.css.js +1 -1
  190. package/modern/components/image-preview/index.module.css.js.map +1 -1
  191. package/modern/components/image-viewer/hooks.js +3 -2
  192. package/modern/components/image-viewer/hooks.js.map +1 -1
  193. package/modern/components/image-viewer/index.css +30 -31
  194. package/modern/components/image-viewer/index.module.css.js +1 -1
  195. package/modern/components/image-viewer/index.module.css.js.map +1 -1
  196. package/modern/components/image-viewer/slide.js +2 -2
  197. package/modern/components/image-viewer/slide.js.map +1 -1
  198. package/modern/components/image-viewer/video/index.css +22 -10
  199. package/modern/components/image-viewer/video/index.js +47 -12
  200. package/modern/components/image-viewer/video/index.js.map +1 -1
  201. package/modern/components/image-viewer/video/index.module.css.js +1 -1
  202. package/modern/components/image-viewer/video/index.module.css.js.map +1 -1
  203. package/modern/components/info-bar/index.css +3 -3
  204. package/modern/components/info-bar/index.module.css.js +1 -1
  205. package/modern/components/navigation-bar/Component.js +55 -25
  206. package/modern/components/navigation-bar/Component.js.map +1 -1
  207. package/modern/components/navigation-bar/index.css +21 -11
  208. package/modern/components/navigation-bar/index.module.css.js +1 -1
  209. package/modern/components/navigation-bar/index.module.css.js.map +1 -1
  210. package/modern/components/subtitles/index.css +3 -3
  211. package/modern/components/subtitles/index.module.css.js +1 -1
  212. package/modern/constants.d.ts +1 -1
  213. package/modern/constants.js +1 -1
  214. package/modern/constants.js.map +1 -1
  215. package/modern/hooks/use-custom-subtitles.js +56 -9
  216. package/modern/hooks/use-custom-subtitles.js.map +1 -1
  217. package/modern/index.css +9 -9
  218. package/modern/index.module.css.js +1 -1
  219. package/modern/types.d.ts +4 -2
  220. package/modern/utils/index.d.ts +1 -0
  221. package/modern/utils/index.js +1 -0
  222. package/modern/utils/index.js.map +1 -1
  223. package/modern/utils/modern-download.d.ts +6 -0
  224. package/modern/utils/modern-download.js +76 -0
  225. package/modern/utils/modern-download.js.map +1 -0
  226. package/moderncssm/Component.js +50 -7
  227. package/moderncssm/Component.js.map +1 -1
  228. package/moderncssm/components/buttons/index.d.ts +3 -1
  229. package/moderncssm/components/buttons/index.js +51 -12
  230. package/moderncssm/components/buttons/index.js.map +1 -1
  231. package/moderncssm/components/header/index.module.css +1 -1
  232. package/moderncssm/components/header-info-block/Component.js +1 -1
  233. package/moderncssm/components/header-info-block/Component.js.map +1 -1
  234. package/moderncssm/components/image-preview/Component.js +1 -1
  235. package/moderncssm/components/image-preview/Component.js.map +1 -1
  236. package/moderncssm/components/image-preview/index.module.css +2 -2
  237. package/moderncssm/components/image-viewer/hooks.js +3 -2
  238. package/moderncssm/components/image-viewer/hooks.js.map +1 -1
  239. package/moderncssm/components/image-viewer/index.module.css +2 -2
  240. package/moderncssm/components/image-viewer/slide.js +2 -2
  241. package/moderncssm/components/image-viewer/slide.js.map +1 -1
  242. package/moderncssm/components/image-viewer/video/index.js +47 -12
  243. package/moderncssm/components/image-viewer/video/index.js.map +1 -1
  244. package/moderncssm/components/image-viewer/video/index.module.css +16 -3
  245. package/moderncssm/components/navigation-bar/Component.js +55 -25
  246. package/moderncssm/components/navigation-bar/Component.js.map +1 -1
  247. package/moderncssm/components/navigation-bar/index.module.css +14 -2
  248. package/moderncssm/constants.d.ts +1 -1
  249. package/moderncssm/constants.js +1 -1
  250. package/moderncssm/constants.js.map +1 -1
  251. package/moderncssm/hooks/use-custom-subtitles.js +56 -9
  252. package/moderncssm/hooks/use-custom-subtitles.js.map +1 -1
  253. package/moderncssm/types.d.ts +4 -2
  254. package/moderncssm/utils/index.d.ts +1 -0
  255. package/moderncssm/utils/index.js +1 -0
  256. package/moderncssm/utils/index.js.map +1 -1
  257. package/moderncssm/utils/modern-download.d.ts +6 -0
  258. package/moderncssm/utils/modern-download.js +76 -0
  259. package/moderncssm/utils/modern-download.js.map +1 -0
  260. package/package.json +12 -12
  261. package/src/Component.tsx +63 -6
  262. package/src/components/buttons/index.tsx +157 -62
  263. package/src/components/header/index.module.css +1 -1
  264. package/src/components/header-info-block/Component.tsx +2 -2
  265. package/src/components/image-preview/Component.tsx +1 -1
  266. package/src/components/image-preview/index.module.css +2 -2
  267. package/src/components/image-viewer/hooks.ts +3 -2
  268. package/src/components/image-viewer/index.module.css +2 -2
  269. package/src/components/image-viewer/slide.tsx +2 -1
  270. package/src/components/image-viewer/video/index.module.css +16 -3
  271. package/src/components/image-viewer/video/index.tsx +62 -13
  272. package/src/components/navigation-bar/Component.tsx +68 -27
  273. package/src/components/navigation-bar/index.module.css +12 -2
  274. package/src/constants.ts +1 -1
  275. package/src/hooks/use-custom-subtitles.ts +72 -12
  276. package/src/types.ts +4 -2
  277. package/src/utils/index.ts +1 -0
  278. package/src/utils/modern-download.ts +107 -0
  279. package/types.d.ts +4 -2
  280. package/utils/index.d.ts +1 -0
  281. package/utils/index.js +2 -0
  282. package/utils/index.js.map +1 -1
  283. package/utils/modern-download.d.ts +6 -0
  284. package/utils/modern-download.js +113 -0
  285. package/utils/modern-download.js.map +1 -0
package/Component.js CHANGED
@@ -14,6 +14,7 @@ var Component = require('./components/header/Component.js');
14
14
  require('@alfalab/hooks');
15
15
  var constants = require('./constants.js');
16
16
  var context = require('./context.js');
17
+ require('tslib');
17
18
  require('./components/image-preview/index.css');
18
19
  var component = require('./components/image-viewer/component.js');
19
20
  var Component$4 = require('./components/info-bar/Component.js');
@@ -45,6 +46,7 @@ var Gallery = function (_a) {
45
46
  var _o = React.useState(DEFAULT_MUTED_VIDEO), mutedVideo = _o[0], setMutedVideo = _o[1];
46
47
  var _p = React.useState(DEFAULT_PLAYING_VIDEO), playingVideo = _p[0], setPlayingVideo = _p[1];
47
48
  var _q = React.useState(DEFAULT_HIDE_NAVIGATION), hideNavigation = _q[0], setHideNavigation = _q[1];
49
+ var _r = React.useState(0), swipeY = _r[0], setSwipeY = _r[1];
48
50
  var isDesktop = coreComponentsMq.useIsDesktop();
49
51
  var isCurrentVideo = !!((_e = (_d = imagesMeta[currentSlideIndex]) === null || _d === void 0 ? void 0 : _d.player) === null || _e === void 0 ? void 0 : _e.current);
50
52
  var bottomButton = (_f = images[currentSlideIndex]) === null || _f === void 0 ? void 0 : _f.bottomButton;
@@ -123,6 +125,11 @@ var Gallery = function (_a) {
123
125
  swiper === null || swiper === void 0 ? void 0 : swiper.slideTo(currentSlideIndex);
124
126
  }
125
127
  }, [uncontrolled, currentSlideIndex, swiper]);
128
+ React.useEffect(function () {
129
+ if (!open) {
130
+ setSwipeY(0);
131
+ }
132
+ }, [open]);
126
133
  React.useEffect(function () {
127
134
  document.addEventListener('keydown', handleKeyDown);
128
135
  return function () {
@@ -130,24 +137,59 @@ var Gallery = function (_a) {
130
137
  };
131
138
  }, [handleKeyDown]);
132
139
  React.useEffect(function () {
133
- var startY;
140
+ if (!open) {
141
+ return undefined;
142
+ }
143
+ var startX = 0;
144
+ var startY = 0;
145
+ var lockedDirection = null;
146
+ var directionLockThreshold = 10;
134
147
  var abortController = new AbortController();
135
148
  var signal = abortController.signal;
136
149
  document.addEventListener('touchstart', function (e) {
150
+ startX = e.touches[0].clientX;
137
151
  startY = e.touches[0].clientY;
152
+ lockedDirection = null;
138
153
  }, { signal: signal });
139
154
  document.addEventListener('touchmove', function (e) {
140
- var endY = e.changedTouches[0].clientY;
141
- var deltaY = startY - endY;
142
- // Если свайп вниз, закрываем галерею
143
- if (deltaY < constants.SWIPE_THRESHOLD) {
155
+ var currentX = e.touches[0].clientX;
156
+ var currentY = e.touches[0].clientY;
157
+ var deltaX = currentX - startX;
158
+ var deltaY = currentY - startY;
159
+ if (!lockedDirection) {
160
+ var absX = Math.abs(deltaX);
161
+ var absY = Math.abs(deltaY);
162
+ if (absX > absY && absX > directionLockThreshold) {
163
+ lockedDirection = 'horizontal';
164
+ }
165
+ else if (absY > absX && absY > directionLockThreshold) {
166
+ lockedDirection = 'vertical';
167
+ }
168
+ else {
169
+ return;
170
+ }
171
+ }
172
+ if (lockedDirection === 'horizontal') {
173
+ return;
174
+ }
175
+ if (deltaY <= 0) {
176
+ setSwipeY(0);
177
+ return;
178
+ }
179
+ setSwipeY(deltaY);
180
+ if (deltaY > constants.SWIPE_THRESHOLD) {
181
+ setSwipeY(0);
144
182
  onClose();
145
183
  }
146
184
  }, { signal: signal });
185
+ document.addEventListener('touchend', function () {
186
+ lockedDirection = null;
187
+ setSwipeY(0);
188
+ }, { signal: signal });
147
189
  return function () {
148
190
  abortController.abort();
149
191
  };
150
- }, [onClose]);
192
+ }, [onClose, open]);
151
193
  var singleSlide = images.length === 1;
152
194
  var showNavigationBar = !singleSlide && !fullScreen;
153
195
  // eslint-disable-next-line react/jsx-no-constructed-context-values
@@ -179,7 +221,9 @@ var Gallery = function (_a) {
179
221
  };
180
222
  return (React__default.default.createElement(context.GalleryContext.Provider, { value: galleryContext },
181
223
  React__default.default.createElement(coreComponentsBaseModal.BaseModal, { open: open, className: cn__default.default(index_module.modal, popupClassName), onEscapeKeyDown: handleEscapeKeyDown, Backdrop: Backdrop, onUnmount: onUnmount },
182
- React__default.default.createElement("div", { className: cn__default.default(index_module.container, (_b = {},
224
+ React__default.default.createElement("div", { "data-content-area": true, style: {
225
+ transform: "translateY(".concat(swipeY, "px)"),
226
+ }, className: cn__default.default(index_module.container, (_b = {},
183
227
  _b[index_module.mobile] = !isDesktop,
184
228
  _b)) },
185
229
  isDesktop ? React__default.default.createElement(Component.Header, null) : React__default.default.createElement(Component$1.HeaderMobile, null),
package/Component.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["src/Component.tsx"],"sourcesContent":["import React, { type FC, type MouseEvent, useCallback, useEffect, useState } from 'react';\nimport cn from 'classnames';\nimport type SwiperCore from 'swiper';\n\nimport { BaseModal } from '@alfalab/core-components-base-modal';\nimport { useIsDesktop } from '@alfalab/core-components-mq';\n\nimport { BottomButton } from './components/bottom-button';\nimport { Single } from './components/image-viewer/single';\nimport { Subtitles } from './components/subtitles';\nimport { Header, HeaderMobile, ImageViewer, InfoBar, NavigationBar } from './components';\nimport { SWIPE_THRESHOLD } from './constants';\nimport { GalleryContext } from './context';\nimport { type GalleryImage, type ImageMeta } from './types';\n\nimport styles from './index.module.css';\n\nexport type GalleryProps = {\n /**\n * Управление видимостью\n */\n open: boolean;\n\n /**\n * Массив изображений\n */\n images: GalleryImage[];\n\n /**\n * Зациклить галерею\n * @default true\n */\n loop?: boolean;\n\n /**\n * Индекс открытого изображение\n * @default 0\n */\n initialSlide?: number;\n\n /**\n * Обработчик закрытия\n */\n onClose: () => void;\n\n /**\n * Индекс текущего изображения\n */\n slideIndex?: number;\n\n /**\n * Обработчик изменения текущего изображения\n */\n onSlideIndexChange?: (index: number) => void;\n\n /**\n * Дополнительный класс для попапа\n */\n popupClassName?: string;\n};\n\nconst DEFAULT_FULL_SCREEN = false;\nconst DEFAULT_MUTED_VIDEO = true;\nconst DEFAULT_PLAYING_VIDEO = true;\nconst DEFAULT_HIDE_NAVIGATION = false;\n\nconst Backdrop = () => null;\n\nexport const Gallery: FC<GalleryProps> = ({\n open,\n images,\n slideIndex,\n initialSlide = 0,\n loop = true,\n onClose,\n onSlideIndexChange,\n popupClassName,\n}) => {\n const currentSlideIndexState = useState(initialSlide);\n const uncontrolled = slideIndex === undefined;\n const [currentSlideIndex, setCurrentSlideIndex] = uncontrolled\n ? currentSlideIndexState\n : [slideIndex, onSlideIndexChange];\n\n const [swiper, setSwiper] = useState<SwiperCore>();\n const [imagesMeta, setImagesMeta] = useState<ImageMeta[]>([]);\n const [fullScreen, setFullScreen] = useState<boolean>(DEFAULT_FULL_SCREEN);\n const [mutedVideo, setMutedVideo] = useState<boolean>(DEFAULT_MUTED_VIDEO);\n const [playingVideo, setPlayingVideo] = useState<boolean>(DEFAULT_PLAYING_VIDEO);\n const [hideNavigation, setHideNavigation] = useState<boolean>(DEFAULT_HIDE_NAVIGATION);\n\n const isDesktop = useIsDesktop();\n\n const isCurrentVideo = !!imagesMeta[currentSlideIndex]?.player?.current;\n\n const bottomButton = images[currentSlideIndex]?.bottomButton;\n\n const slideTo = useCallback(\n (index: number) => {\n if (images[index]) {\n setCurrentSlideIndex?.(index);\n\n if (swiper) {\n setPlayingVideo(true);\n swiper.slideTo(index);\n }\n }\n },\n [images, setCurrentSlideIndex, swiper],\n );\n\n const slideNext = useCallback(() => {\n const lastIndex = images.length - 1;\n\n let nextIndex = currentSlideIndex + 1;\n\n if (nextIndex >= images.length) {\n nextIndex = loop ? 0 : lastIndex;\n }\n\n slideTo(nextIndex);\n }, [images.length, loop, currentSlideIndex, slideTo]);\n\n const slidePrev = useCallback(() => {\n const lastIndex = images.length - 1;\n\n let nextIndex = currentSlideIndex - 1;\n\n if (nextIndex < 0) {\n nextIndex = loop ? lastIndex : 0;\n }\n\n slideTo(nextIndex);\n }, [images.length, loop, currentSlideIndex, slideTo]);\n\n const setImageMeta = useCallback((meta: ImageMeta, index: number) => {\n setImagesMeta((prevImagesMeta) => {\n const nextImagesMeta = prevImagesMeta.slice();\n\n nextImagesMeta[index] = meta;\n\n return nextImagesMeta;\n });\n }, []);\n\n const handleBottomButtonClick = useCallback(\n (e: MouseEvent) => {\n e.stopPropagation();\n if (bottomButton?.onClick) {\n bottomButton.onClick(e);\n }\n },\n [bottomButton],\n );\n\n const handleClose = useCallback(() => {\n onClose();\n\n if (uncontrolled) {\n setCurrentSlideIndex?.(initialSlide);\n }\n\n setFullScreen(false);\n }, [initialSlide, onClose, setCurrentSlideIndex, uncontrolled]);\n\n const handleEscapeKeyDown = () => {\n if (fullScreen) {\n setFullScreen(false);\n } else {\n handleClose();\n }\n };\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!open || fullScreen) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowLeft':\n slidePrev();\n break;\n case 'ArrowRight':\n slideNext();\n break;\n }\n },\n [fullScreen, open, slideNext, slidePrev],\n );\n\n const onUnmount = useCallback(() => {\n setPlayingVideo(DEFAULT_PLAYING_VIDEO);\n setMutedVideo(DEFAULT_MUTED_VIDEO);\n }, [setPlayingVideo]);\n\n useEffect(() => {\n if (!uncontrolled && !swiper?.destroyed) {\n swiper?.slideTo(currentSlideIndex);\n }\n }, [uncontrolled, currentSlideIndex, swiper]);\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleKeyDown]);\n\n useEffect(() => {\n let startY: number;\n const abortController = new AbortController();\n const { signal } = abortController;\n\n document.addEventListener(\n 'touchstart',\n (e) => {\n startY = e.touches[0].clientY;\n },\n { signal },\n );\n\n document.addEventListener(\n 'touchmove',\n (e) => {\n const endY = e.changedTouches[0].clientY;\n const deltaY = startY - endY;\n\n // Если свайп вниз, закрываем галерею\n if (deltaY < SWIPE_THRESHOLD) {\n onClose();\n }\n },\n { signal },\n );\n\n return () => {\n abortController.abort();\n };\n }, [onClose]);\n\n const singleSlide = images.length === 1;\n\n const showNavigationBar = !singleSlide && !fullScreen;\n\n // eslint-disable-next-line react/jsx-no-constructed-context-values\n const galleryContext: GalleryContext = {\n view: isDesktop ? 'desktop' : 'mobile',\n singleSlide,\n currentSlideIndex,\n images,\n imagesMeta,\n fullScreen,\n initialSlide: uncontrolled ? initialSlide : currentSlideIndex,\n setFullScreen,\n playingVideo,\n setPlayingVideo,\n mutedVideo,\n setMutedVideo,\n hideNavigation,\n setHideNavigation,\n setImageMeta,\n slideNext,\n slidePrev,\n slideTo,\n getSwiper: () => swiper,\n setSwiper,\n onClose: handleClose,\n setCurrentSlideIndex,\n getCurrentImage: () => images[currentSlideIndex],\n getCurrentImageMeta: () => imagesMeta[currentSlideIndex],\n };\n\n return (\n <GalleryContext.Provider value={galleryContext}>\n <BaseModal\n open={open}\n className={cn(styles.modal, popupClassName)}\n onEscapeKeyDown={handleEscapeKeyDown}\n Backdrop={Backdrop}\n onUnmount={onUnmount}\n >\n <div\n className={cn(styles.container, {\n [styles.mobile]: !isDesktop,\n })}\n >\n {isDesktop ? <Header /> : <HeaderMobile />}\n {images.length === 1 ? <Single /> : <ImageViewer />}\n <nav\n className={cn({\n [styles.navigationVideo]: isCurrentVideo && !isDesktop,\n [styles.hide]: showNavigationBar && hideNavigation && !isDesktop,\n [styles.hideInfo]: !showNavigationBar && hideNavigation && !isDesktop,\n })}\n >\n {!isDesktop && <Subtitles />}\n {isCurrentVideo && !isDesktop && bottomButton && (\n <BottomButton\n bottomButton={bottomButton}\n onClick={handleBottomButtonClick}\n className={styles.bottomButton}\n />\n )}\n\n {showNavigationBar && <NavigationBar />}\n {!isDesktop && <InfoBar />}\n </nav>\n </div>\n </BaseModal>\n </GalleryContext.Provider>\n );\n};\n"],"names":["useState","useIsDesktop","useCallback","useEffect","SWIPE_THRESHOLD","React","GalleryContext","BaseModal","cn","styles","Header","HeaderMobile","Single","ImageViewer","Subtitles","BottomButton","NavigationBar","InfoBar"],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["src/Component.tsx"],"sourcesContent":["import React, { type FC, type MouseEvent, useCallback, useEffect, useState } from 'react';\nimport cn from 'classnames';\nimport type SwiperCore from 'swiper';\n\nimport { BaseModal } from '@alfalab/core-components-base-modal';\nimport { useIsDesktop } from '@alfalab/core-components-mq';\n\nimport { BottomButton } from './components/bottom-button';\nimport { Single } from './components/image-viewer/single';\nimport { Subtitles } from './components/subtitles';\nimport { Header, HeaderMobile, ImageViewer, InfoBar, NavigationBar } from './components';\nimport { SWIPE_THRESHOLD } from './constants';\nimport { GalleryContext } from './context';\nimport { type GalleryImage, type ImageMeta } from './types';\n\nimport styles from './index.module.css';\n\nexport type GalleryProps = {\n /**\n * Управление видимостью\n */\n open: boolean;\n\n /**\n * Массив изображений\n */\n images: GalleryImage[];\n\n /**\n * Зациклить галерею\n * @default true\n */\n loop?: boolean;\n\n /**\n * Индекс открытого изображение\n * @default 0\n */\n initialSlide?: number;\n\n /**\n * Обработчик закрытия\n */\n onClose: () => void;\n\n /**\n * Индекс текущего изображения\n */\n slideIndex?: number;\n\n /**\n * Обработчик изменения текущего изображения\n */\n onSlideIndexChange?: (index: number) => void;\n\n /**\n * Дополнительный класс для попапа\n */\n popupClassName?: string;\n};\n\nconst DEFAULT_FULL_SCREEN = false;\nconst DEFAULT_MUTED_VIDEO = true;\nconst DEFAULT_PLAYING_VIDEO = true;\nconst DEFAULT_HIDE_NAVIGATION = false;\n\nconst Backdrop = () => null;\n\nexport const Gallery: FC<GalleryProps> = ({\n open,\n images,\n slideIndex,\n initialSlide = 0,\n loop = true,\n onClose,\n onSlideIndexChange,\n popupClassName,\n}) => {\n const currentSlideIndexState = useState(initialSlide);\n const uncontrolled = slideIndex === undefined;\n const [currentSlideIndex, setCurrentSlideIndex] = uncontrolled\n ? currentSlideIndexState\n : [slideIndex, onSlideIndexChange];\n\n const [swiper, setSwiper] = useState<SwiperCore>();\n const [imagesMeta, setImagesMeta] = useState<ImageMeta[]>([]);\n const [fullScreen, setFullScreen] = useState<boolean>(DEFAULT_FULL_SCREEN);\n const [mutedVideo, setMutedVideo] = useState<boolean>(DEFAULT_MUTED_VIDEO);\n const [playingVideo, setPlayingVideo] = useState<boolean>(DEFAULT_PLAYING_VIDEO);\n const [hideNavigation, setHideNavigation] = useState<boolean>(DEFAULT_HIDE_NAVIGATION);\n const [swipeY, setSwipeY] = useState<number>(0);\n\n const isDesktop = useIsDesktop();\n\n const isCurrentVideo = !!imagesMeta[currentSlideIndex]?.player?.current;\n\n const bottomButton = images[currentSlideIndex]?.bottomButton;\n\n const slideTo = useCallback(\n (index: number) => {\n if (images[index]) {\n setCurrentSlideIndex?.(index);\n\n if (swiper) {\n setPlayingVideo(true);\n swiper.slideTo(index);\n }\n }\n },\n [images, setCurrentSlideIndex, swiper],\n );\n\n const slideNext = useCallback(() => {\n const lastIndex = images.length - 1;\n\n let nextIndex = currentSlideIndex + 1;\n\n if (nextIndex >= images.length) {\n nextIndex = loop ? 0 : lastIndex;\n }\n\n slideTo(nextIndex);\n }, [images.length, loop, currentSlideIndex, slideTo]);\n\n const slidePrev = useCallback(() => {\n const lastIndex = images.length - 1;\n\n let nextIndex = currentSlideIndex - 1;\n\n if (nextIndex < 0) {\n nextIndex = loop ? lastIndex : 0;\n }\n\n slideTo(nextIndex);\n }, [images.length, loop, currentSlideIndex, slideTo]);\n\n const setImageMeta = useCallback((meta: ImageMeta, index: number) => {\n setImagesMeta((prevImagesMeta) => {\n const nextImagesMeta = prevImagesMeta.slice();\n\n nextImagesMeta[index] = meta;\n\n return nextImagesMeta;\n });\n }, []);\n\n const handleBottomButtonClick = useCallback(\n (e: MouseEvent) => {\n e.stopPropagation();\n if (bottomButton?.onClick) {\n bottomButton.onClick(e);\n }\n },\n [bottomButton],\n );\n\n const handleClose = useCallback(() => {\n onClose();\n\n if (uncontrolled) {\n setCurrentSlideIndex?.(initialSlide);\n }\n\n setFullScreen(false);\n }, [initialSlide, onClose, setCurrentSlideIndex, uncontrolled]);\n\n const handleEscapeKeyDown = () => {\n if (fullScreen) {\n setFullScreen(false);\n } else {\n handleClose();\n }\n };\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!open || fullScreen) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowLeft':\n slidePrev();\n break;\n case 'ArrowRight':\n slideNext();\n break;\n }\n },\n [fullScreen, open, slideNext, slidePrev],\n );\n\n const onUnmount = useCallback(() => {\n setPlayingVideo(DEFAULT_PLAYING_VIDEO);\n setMutedVideo(DEFAULT_MUTED_VIDEO);\n }, [setPlayingVideo]);\n\n useEffect(() => {\n if (!uncontrolled && !swiper?.destroyed) {\n swiper?.slideTo(currentSlideIndex);\n }\n }, [uncontrolled, currentSlideIndex, swiper]);\n\n useEffect(() => {\n if (!open) {\n setSwipeY(0);\n }\n }, [open]);\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleKeyDown]);\n\n useEffect(() => {\n if (!open) {\n return undefined;\n }\n\n let startX = 0;\n let startY = 0;\n let lockedDirection: 'horizontal' | 'vertical' | null = null;\n const directionLockThreshold = 10;\n\n const abortController = new AbortController();\n const { signal } = abortController;\n\n document.addEventListener(\n 'touchstart',\n (e) => {\n startX = e.touches[0].clientX;\n startY = e.touches[0].clientY;\n lockedDirection = null;\n },\n { signal },\n );\n\n document.addEventListener(\n 'touchmove',\n (e) => {\n const currentX = e.touches[0].clientX;\n const currentY = e.touches[0].clientY;\n const deltaX = currentX - startX;\n const deltaY = currentY - startY;\n\n if (!lockedDirection) {\n const absX = Math.abs(deltaX);\n const absY = Math.abs(deltaY);\n\n if (absX > absY && absX > directionLockThreshold) {\n lockedDirection = 'horizontal';\n } else if (absY > absX && absY > directionLockThreshold) {\n lockedDirection = 'vertical';\n } else {\n return;\n }\n }\n\n if (lockedDirection === 'horizontal') {\n return;\n }\n\n if (deltaY <= 0) {\n setSwipeY(0);\n\n return;\n }\n\n setSwipeY(deltaY);\n\n if (deltaY > SWIPE_THRESHOLD) {\n setSwipeY(0);\n onClose();\n }\n },\n { signal },\n );\n\n document.addEventListener(\n 'touchend',\n () => {\n lockedDirection = null;\n setSwipeY(0);\n },\n { signal },\n );\n\n return () => {\n abortController.abort();\n };\n }, [onClose, open]);\n\n const singleSlide = images.length === 1;\n\n const showNavigationBar = !singleSlide && !fullScreen;\n\n // eslint-disable-next-line react/jsx-no-constructed-context-values\n const galleryContext: GalleryContext = {\n view: isDesktop ? 'desktop' : 'mobile',\n singleSlide,\n currentSlideIndex,\n images,\n imagesMeta,\n fullScreen,\n initialSlide: uncontrolled ? initialSlide : currentSlideIndex,\n setFullScreen,\n playingVideo,\n setPlayingVideo,\n mutedVideo,\n setMutedVideo,\n hideNavigation,\n setHideNavigation,\n setImageMeta,\n slideNext,\n slidePrev,\n slideTo,\n getSwiper: () => swiper,\n setSwiper,\n onClose: handleClose,\n setCurrentSlideIndex,\n getCurrentImage: () => images[currentSlideIndex],\n getCurrentImageMeta: () => imagesMeta[currentSlideIndex],\n };\n\n return (\n <GalleryContext.Provider value={galleryContext}>\n <BaseModal\n open={open}\n className={cn(styles.modal, popupClassName)}\n onEscapeKeyDown={handleEscapeKeyDown}\n Backdrop={Backdrop}\n onUnmount={onUnmount}\n >\n <div\n data-content-area={true}\n style={{\n transform: `translateY(${swipeY}px)`,\n }}\n className={cn(styles.container, {\n [styles.mobile]: !isDesktop,\n })}\n >\n {isDesktop ? <Header /> : <HeaderMobile />}\n {images.length === 1 ? <Single /> : <ImageViewer />}\n <nav\n className={cn({\n [styles.navigationVideo]: isCurrentVideo && !isDesktop,\n [styles.hide]: showNavigationBar && hideNavigation && !isDesktop,\n [styles.hideInfo]: !showNavigationBar && hideNavigation && !isDesktop,\n })}\n >\n {!isDesktop && <Subtitles />}\n {isCurrentVideo && !isDesktop && bottomButton && (\n <BottomButton\n bottomButton={bottomButton}\n onClick={handleBottomButtonClick}\n className={styles.bottomButton}\n />\n )}\n\n {showNavigationBar && <NavigationBar />}\n {!isDesktop && <InfoBar />}\n </nav>\n </div>\n </BaseModal>\n </GalleryContext.Provider>\n );\n};\n"],"names":["useState","useIsDesktop","useCallback","useEffect","SWIPE_THRESHOLD","React","GalleryContext","BaseModal","cn","styles","Header","HeaderMobile","Single","ImageViewer","Subtitles","BottomButton","NavigationBar","InfoBar"],"mappings":"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"}
@@ -3,20 +3,20 @@
3
3
  --color-static-neutral-translucent-500-inverted-hover: rgba(233, 233, 250, 0.37);
4
4
  --color-static-neutral-translucent-500-inverted-press: rgba(238, 238, 254, 0.46);
5
5
  }
6
- .gallery__component_roi6h {
6
+ .gallery__component_ir7b6 {
7
7
  background-color: var(--color-static-neutral-translucent-500-inverted);
8
8
  }
9
- .gallery__component_roi6h:hover {
9
+ .gallery__component_ir7b6:hover {
10
10
  background-color: var(--color-static-neutral-translucent-500-inverted-hover);
11
11
  }
12
- .gallery__component_roi6h:active {
12
+ .gallery__component_ir7b6:active {
13
13
  background-color: var(--color-static-neutral-translucent-500-inverted-press);
14
14
  }
15
- .gallery__component_roi6h {
15
+ .gallery__component_ir7b6 {
16
16
 
17
17
  transition: transform 1s ease-in-out;
18
18
  will-change: transform;
19
19
  }
20
- .gallery__notVisible_roi6h {
20
+ .gallery__notVisible_ir7b6 {
21
21
  transform: translateY(250%);
22
22
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"component":"gallery__component_roi6h","notVisible":"gallery__notVisible_roi6h"};
5
+ var styles = {"component":"gallery__component_ir7b6","notVisible":"gallery__notVisible_ir7b6"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -7,19 +7,19 @@
7
7
  :root {
8
8
  --gap-32: 32px;
9
9
  }
10
- .gallery__buttons_5mkzr {
10
+ .gallery__buttons_1rrmx {
11
11
  display: flex;
12
12
  padding-left: var(--gap-32);
13
13
  }
14
- .gallery__buttons_5mkzr path {
14
+ .gallery__buttons_1rrmx path {
15
15
  color: var(--color-static-neutral-translucent-1300-inverted);
16
16
  }
17
- .gallery__iconButton_5mkzr path {
17
+ .gallery__iconButton_1rrmx path {
18
18
  color: var(--color-static-neutral-100);
19
19
  }
20
- .gallery__iconButton_5mkzr:hover path {
20
+ .gallery__iconButton_1rrmx:hover path {
21
21
  color: var(--color-static-neutral-100-hover);
22
22
  }
23
- .gallery__iconButton_5mkzr:active path {
23
+ .gallery__iconButton_1rrmx:active path {
24
24
  color: var(--color-static-neutral-100-press);
25
25
  }
@@ -11,7 +11,9 @@ export declare const Pause: FC<Props>;
11
11
  export declare const ExitFullscreen: FC<Props>;
12
12
  export declare const MuteVideo: FC<Props>;
13
13
  export declare const UnmuteVideo: FC<Props>;
14
- export declare const Download: FC<Props>;
14
+ export declare const Download: FC<Props & {
15
+ href?: string;
16
+ }>;
15
17
  export declare const Share: FC<Props>;
16
18
  export declare const Exit: FC<Props>;
17
19
  export {};
@@ -6,6 +6,7 @@ var tslib = require('tslib');
6
6
  var React = require('react');
7
7
  var cn = require('classnames');
8
8
  var coreComponentsIconButton = require('@alfalab/core-components-icon-button');
9
+ var coreComponentsMq = require('@alfalab/core-components-mq');
9
10
  var desktop = require('@alfalab/core-components-tooltip/desktop');
10
11
  var ArrowLeftMIcon = require('@alfalab/icons-glyph/ArrowLeftMIcon');
11
12
  var ArrowsInwardMIcon = require('@alfalab/icons-glyph/ArrowsInwardMIcon');
@@ -17,6 +18,8 @@ var PointerDownMIcon = require('@alfalab/icons-glyph/PointerDownMIcon');
17
18
  var ShareMIcon = require('@alfalab/icons-glyph/ShareMIcon');
18
19
  var SoundCrossMIcon = require('@alfalab/icons-glyph/SoundCrossMIcon');
19
20
  var SoundMIcon = require('@alfalab/icons-glyph/SoundMIcon');
21
+ var utils = require('../../utils/utils.js');
22
+ var modernDownload = require('../../utils/modern-download.js');
20
23
  var index_module = require('./index.module.css.js');
21
24
 
22
25
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
@@ -26,8 +29,9 @@ var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
26
29
 
27
30
  var Fullscreen = function (_a) {
28
31
  var buttonRef = _a.buttonRef, restProps = tslib.__rest(_a, ["buttonRef"]);
29
- return (React__default.default.createElement(desktop.TooltipDesktop, { trigger: 'hover', position: 'bottom', content: '\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u043F\u043E\u043B\u043D\u043E\u044D\u043A\u0440\u0430\u043D\u043D\u043E\u043C \u0440\u0435\u0436\u0438\u043C\u0435', fallbackPlacements: ['bottom-end'] },
30
- React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, restProps, { ref: buttonRef, icon: ArrowsOutwardMIcon.ArrowsOutwardMIcon, "aria-label": '\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u043F\u043E\u043B\u043D\u043E\u044D\u043A\u0440\u0430\u043D\u043D\u043E\u043C \u0440\u0435\u0436\u0438\u043C\u0435', className: index_module.iconButton }))));
32
+ var isDesktop = coreComponentsMq.useIsDesktop();
33
+ var iconButton = (React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, restProps, { ref: buttonRef, icon: ArrowsOutwardMIcon.ArrowsOutwardMIcon, "aria-label": '\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u043F\u043E\u043B\u043D\u043E\u044D\u043A\u0440\u0430\u043D\u043D\u043E\u043C \u0440\u0435\u0436\u0438\u043C\u0435', className: index_module.iconButton })));
34
+ return isDesktop ? (React__default.default.createElement(desktop.TooltipDesktop, { view: 'hint', colors: 'inverted', trigger: 'hover', position: 'bottom', content: '\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u043F\u043E\u043B\u043D\u043E\u044D\u043A\u0440\u0430\u043D\u043D\u043E\u043C \u0440\u0435\u0436\u0438\u043C\u0435', fallbackPlacements: ['bottom-end'] }, iconButton)) : (iconButton);
31
35
  };
32
36
  var BackArrow = function (_a) {
33
37
  var buttonRef = _a.buttonRef, restProps = tslib.__rest(_a, ["buttonRef"]);
@@ -43,23 +47,56 @@ var Pause = function (_a) {
43
47
  };
44
48
  var ExitFullscreen = function (_a) {
45
49
  var buttonRef = _a.buttonRef, restProps = tslib.__rest(_a, ["buttonRef"]);
46
- return (React__default.default.createElement(desktop.TooltipDesktop, { trigger: 'hover', position: 'bottom', content: '\u0412\u044B\u0439\u0442\u0438 \u0438\u0437 \u043F\u043E\u043B\u043D\u043E\u044D\u043A\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0440\u0435\u0436\u0438\u043C\u0430', fallbackPlacements: ['bottom-end'] },
47
- React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, restProps, { ref: buttonRef, icon: ArrowsInwardMIcon.ArrowsInwardMIcon, "aria-label": '\u0412\u044B\u0439\u0442\u0438 \u0438\u0437 \u043F\u043E\u043B\u043D\u043E\u044D\u043A\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0440\u0435\u0436\u0438\u043C\u0430', className: index_module.iconButton }))));
50
+ var isDesktop = coreComponentsMq.useIsDesktop();
51
+ var iconButton = (React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, restProps, { ref: buttonRef, icon: ArrowsInwardMIcon.ArrowsInwardMIcon, "aria-label": '\u0412\u044B\u0439\u0442\u0438 \u0438\u0437 \u043F\u043E\u043B\u043D\u043E\u044D\u043A\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0440\u0435\u0436\u0438\u043C\u0430', className: index_module.iconButton })));
52
+ return isDesktop ? (React__default.default.createElement(desktop.TooltipDesktop, { view: 'hint', colors: 'inverted', trigger: 'hover', position: 'bottom', content: '\u0412\u044B\u0439\u0442\u0438 \u0438\u0437 \u043F\u043E\u043B\u043D\u043E\u044D\u043A\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0440\u0435\u0436\u0438\u043C\u0430', fallbackPlacements: ['bottom-end'] }, iconButton)) : (iconButton);
48
53
  };
49
54
  var MuteVideo = function (_a) {
50
55
  var buttonRef = _a.buttonRef, className = _a.className, restProps = tslib.__rest(_a, ["buttonRef", "className"]);
51
- return (React__default.default.createElement(desktop.TooltipDesktop, { trigger: 'hover', position: 'bottom', content: '\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0437\u0432\u0443\u043A', fallbackPlacements: ['bottom-end'], targetClassName: className },
52
- React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, restProps, { ref: buttonRef, icon: SoundMIcon.SoundMIcon, "aria-label": '\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0437\u0432\u0443\u043A', className: index_module.iconButton }))));
56
+ var isDesktop = coreComponentsMq.useIsDesktop();
57
+ var iconButton = (React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, restProps, { ref: buttonRef, icon: SoundMIcon.SoundMIcon, "aria-label": '\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0437\u0432\u0443\u043A', className: index_module.iconButton })));
58
+ return isDesktop ? (React__default.default.createElement(desktop.TooltipDesktop, { view: 'hint', colors: 'inverted', trigger: 'hover', position: 'bottom', content: '\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0437\u0432\u0443\u043A', fallbackPlacements: ['bottom-end'], targetClassName: className }, iconButton)) : (iconButton);
53
59
  };
54
60
  var UnmuteVideo = function (_a) {
55
61
  var buttonRef = _a.buttonRef, className = _a.className, restProps = tslib.__rest(_a, ["buttonRef", "className"]);
56
- return (React__default.default.createElement(desktop.TooltipDesktop, { trigger: 'hover', position: 'bottom', content: '\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0437\u0432\u0443\u043A', fallbackPlacements: ['bottom-end'], targetClassName: className },
57
- React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, restProps, { ref: buttonRef, icon: SoundCrossMIcon.SoundCrossMIcon, "aria-label": '\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0437\u0432\u0443\u043A', className: index_module.iconButton }))));
62
+ var isDesktop = coreComponentsMq.useIsDesktop();
63
+ var iconButton = (React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, restProps, { ref: buttonRef, icon: SoundCrossMIcon.SoundCrossMIcon, "aria-label": '\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0437\u0432\u0443\u043A', className: index_module.iconButton })));
64
+ return isDesktop ? (React__default.default.createElement(desktop.TooltipDesktop, { view: 'hint', colors: 'inverted', trigger: 'hover', position: 'bottom', content: '\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0437\u0432\u0443\u043A', fallbackPlacements: ['bottom-end'], targetClassName: className }, iconButton)) : (iconButton);
65
+ };
66
+ var Download = function (_a) {
67
+ var href = _a.href, props = tslib.__rest(_a, ["href"]);
68
+ var isDesktop = coreComponentsMq.useIsDesktop();
69
+ var handleMobileVideoDownload = function (e) { return tslib.__awaiter(void 0, void 0, void 0, function () {
70
+ var fileName, fileType;
71
+ var _a;
72
+ return tslib.__generator(this, function (_b) {
73
+ switch (_b.label) {
74
+ case 0:
75
+ e.preventDefault();
76
+ if (!href)
77
+ return [2 /*return*/];
78
+ fileName = ((_a = props.download) === null || _a === void 0 ? void 0 : _a.toString()) || 'video';
79
+ fileType = utils.isVideo(href) ? 'video/*' : undefined;
80
+ return [4 /*yield*/, modernDownload.downloadFile({
81
+ url: href,
82
+ fileName: fileName,
83
+ fileType: fileType,
84
+ })];
85
+ case 1:
86
+ _b.sent();
87
+ return [2 /*return*/];
88
+ }
89
+ });
90
+ }); };
91
+ var iconButtonProps = tslib.__assign(tslib.__assign({}, props), { icon: PointerDownMIcon.PointerDownMIcon, 'aria-label': 'Скачать', className: index_module.iconButton });
92
+ var iconButton = !isDesktop && utils.isVideo(href) ? (React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, iconButtonProps, { onClick: handleMobileVideoDownload }))) : (React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, iconButtonProps, { href: href })));
93
+ return isDesktop ? (React__default.default.createElement(desktop.TooltipDesktop, { view: 'hint', colors: 'inverted', trigger: 'hover', position: 'bottom', content: '\u0421\u043A\u0430\u0447\u0430\u0442\u044C', fallbackPlacements: ['bottom-end'] }, iconButton)) : (iconButton);
94
+ };
95
+ var Share = function (props) {
96
+ var isDesktop = coreComponentsMq.useIsDesktop();
97
+ var iconButton = (React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, props, { icon: ShareMIcon.ShareMIcon, "aria-label": '\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F', className: index_module.iconButton })));
98
+ return isDesktop ? (React__default.default.createElement(desktop.TooltipDesktop, { view: 'hint', colors: 'inverted', trigger: 'hover', position: 'bottom', content: '\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F', fallbackPlacements: ['bottom-end'] }, iconButton)) : (iconButton);
58
99
  };
59
- var Download = function (props) { return (React__default.default.createElement(desktop.TooltipDesktop, { trigger: 'hover', position: 'bottom', content: '\u0421\u043A\u0430\u0447\u0430\u0442\u044C', fallbackPlacements: ['bottom-end'] },
60
- React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, props, { icon: PointerDownMIcon.PointerDownMIcon, "aria-label": '\u0421\u043A\u0430\u0447\u0430\u0442\u044C', className: index_module.iconButton })))); };
61
- var Share = function (props) { return (React__default.default.createElement(desktop.TooltipDesktop, { trigger: 'hover', position: 'bottom', content: '\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F', fallbackPlacements: ['bottom-end'] },
62
- React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, props, { icon: ShareMIcon.ShareMIcon, "aria-label": '\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F', className: index_module.iconButton })))); };
63
100
  var Exit = function (props) { return (React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({}, props, { icon: CrossMIcon.CrossMIcon, "aria-label": '\u0417\u0430\u043A\u0440\u044B\u0442\u044C', className: index_module.iconButton }))); };
64
101
 
65
102
  exports.BackArrow = BackArrow;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/components/buttons/index.tsx"],"sourcesContent":["import React, { type FC, type MutableRefObject } from 'react';\nimport cn from 'classnames';\n\nimport { IconButton, type IconButtonProps } from '@alfalab/core-components-icon-button';\nimport { TooltipDesktop } from '@alfalab/core-components-tooltip/desktop';\nimport { ArrowLeftMIcon } from '@alfalab/icons-glyph/ArrowLeftMIcon';\nimport { ArrowsInwardMIcon } from '@alfalab/icons-glyph/ArrowsInwardMIcon';\nimport { ArrowsOutwardMIcon } from '@alfalab/icons-glyph/ArrowsOutwardMIcon';\nimport { CrossMIcon } from '@alfalab/icons-glyph/CrossMIcon';\nimport { PauseCompactMIcon } from '@alfalab/icons-glyph/PauseCompactMIcon';\nimport { PlayCompactMIcon } from '@alfalab/icons-glyph/PlayCompactMIcon';\nimport { PointerDownMIcon } from '@alfalab/icons-glyph/PointerDownMIcon';\nimport { ShareMIcon } from '@alfalab/icons-glyph/ShareMIcon';\nimport { SoundCrossMIcon } from '@alfalab/icons-glyph/SoundCrossMIcon';\nimport { SoundMIcon } from '@alfalab/icons-glyph/SoundMIcon';\n\nimport styles from './index.module.css';\n\ntype Props = Omit<IconButtonProps, 'icon' | 'colors'> & {\n buttonRef?: MutableRefObject<HTMLButtonElement | null>;\n download?: string | boolean;\n};\n\nexport const Fullscreen: FC<Props> = ({ buttonRef, ...restProps }) => (\n <TooltipDesktop\n trigger='hover'\n position='bottom'\n content='Открыть в полноэкранном режиме'\n fallbackPlacements={['bottom-end']}\n >\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={ArrowsOutwardMIcon}\n aria-label='Открыть в полноэкранном режиме'\n className={styles.iconButton}\n />\n </TooltipDesktop>\n);\n\nexport const BackArrow: FC<Props> = ({ buttonRef, ...restProps }) => (\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={ArrowLeftMIcon}\n aria-label='Вернуться назад'\n className={styles.iconButton}\n />\n);\n\nexport const Play: FC<Props> = ({ buttonRef, className, ...restProps }) => (\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={PlayCompactMIcon}\n aria-label='Проиграть видео'\n className={cn(styles.iconButton, className)}\n />\n);\n\nexport const Pause: FC<Props> = ({ buttonRef, className, ...restProps }) => (\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={PauseCompactMIcon}\n aria-label='Поставить паузу на видео'\n className={cn(styles.iconButton, className)}\n />\n);\n\nexport const ExitFullscreen: FC<Props> = ({ buttonRef, ...restProps }) => (\n <TooltipDesktop\n trigger='hover'\n position='bottom'\n content='Выйти из полноэкранного режима'\n fallbackPlacements={['bottom-end']}\n >\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={ArrowsInwardMIcon}\n aria-label='Выйти из полноэкранного режима'\n className={styles.iconButton}\n />\n </TooltipDesktop>\n);\n\nexport const MuteVideo: FC<Props> = ({ buttonRef, className, ...restProps }) => (\n <TooltipDesktop\n trigger='hover'\n position='bottom'\n content='Выключить звук'\n fallbackPlacements={['bottom-end']}\n targetClassName={className}\n >\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={SoundMIcon}\n aria-label='Выключить звук'\n className={styles.iconButton}\n />\n </TooltipDesktop>\n);\n\nexport const UnmuteVideo: FC<Props> = ({ buttonRef, className, ...restProps }) => (\n <TooltipDesktop\n trigger='hover'\n position='bottom'\n content='Включить звук'\n fallbackPlacements={['bottom-end']}\n targetClassName={className}\n >\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={SoundCrossMIcon}\n aria-label='Включить звук'\n className={styles.iconButton}\n />\n </TooltipDesktop>\n);\n\nexport const Download: FC<Props> = (props) => (\n <TooltipDesktop\n trigger='hover'\n position='bottom'\n content='Скачать'\n fallbackPlacements={['bottom-end']}\n >\n <IconButton\n {...props}\n icon={PointerDownMIcon}\n aria-label='Скачать'\n className={styles.iconButton}\n />\n </TooltipDesktop>\n);\n\nexport const Share: FC<Props> = (props) => (\n <TooltipDesktop\n trigger='hover'\n position='bottom'\n content='Поделиться'\n fallbackPlacements={['bottom-end']}\n >\n <IconButton\n {...props}\n icon={ShareMIcon}\n aria-label='Поделиться'\n className={styles.iconButton}\n />\n </TooltipDesktop>\n);\n\nexport const Exit: FC<Props> = (props) => (\n <IconButton {...props} icon={CrossMIcon} aria-label='Закрыть' className={styles.iconButton} />\n);\n"],"names":["__rest","React","TooltipDesktop","IconButton","ArrowsOutwardMIcon","styles","__assign","ArrowLeftMIcon","PlayCompactMIcon","cn","PauseCompactMIcon","ArrowsInwardMIcon","SoundMIcon","SoundCrossMIcon","PointerDownMIcon","ShareMIcon","CrossMIcon"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/components/buttons/index.tsx"],"sourcesContent":["import React, { type FC, type MutableRefObject } from 'react';\nimport cn from 'classnames';\n\nimport { IconButton, type IconButtonProps } from '@alfalab/core-components-icon-button';\nimport { useIsDesktop } from '@alfalab/core-components-mq';\nimport { TooltipDesktop } from '@alfalab/core-components-tooltip/desktop';\nimport { ArrowLeftMIcon } from '@alfalab/icons-glyph/ArrowLeftMIcon';\nimport { ArrowsInwardMIcon } from '@alfalab/icons-glyph/ArrowsInwardMIcon';\nimport { ArrowsOutwardMIcon } from '@alfalab/icons-glyph/ArrowsOutwardMIcon';\nimport { CrossMIcon } from '@alfalab/icons-glyph/CrossMIcon';\nimport { PauseCompactMIcon } from '@alfalab/icons-glyph/PauseCompactMIcon';\nimport { PlayCompactMIcon } from '@alfalab/icons-glyph/PlayCompactMIcon';\nimport { PointerDownMIcon } from '@alfalab/icons-glyph/PointerDownMIcon';\nimport { ShareMIcon } from '@alfalab/icons-glyph/ShareMIcon';\nimport { SoundCrossMIcon } from '@alfalab/icons-glyph/SoundCrossMIcon';\nimport { SoundMIcon } from '@alfalab/icons-glyph/SoundMIcon';\n\nimport { downloadFile, isVideo } from '../../utils';\n\nimport styles from './index.module.css';\n\ntype Props = Omit<IconButtonProps, 'icon' | 'colors'> & {\n buttonRef?: MutableRefObject<HTMLButtonElement | null>;\n download?: string | boolean;\n};\n\nexport const Fullscreen: FC<Props> = ({ buttonRef, ...restProps }) => {\n const isDesktop = useIsDesktop();\n\n const iconButton = (\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={ArrowsOutwardMIcon}\n aria-label='Открыть в полноэкранном режиме'\n className={styles.iconButton}\n />\n );\n\n return isDesktop ? (\n <TooltipDesktop\n view='hint'\n colors='inverted'\n trigger='hover'\n position='bottom'\n content='Открыть в полноэкранном режиме'\n fallbackPlacements={['bottom-end']}\n >\n {iconButton}\n </TooltipDesktop>\n ) : (\n iconButton\n );\n};\n\nexport const BackArrow: FC<Props> = ({ buttonRef, ...restProps }) => (\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={ArrowLeftMIcon}\n aria-label='Вернуться назад'\n className={styles.iconButton}\n />\n);\n\nexport const Play: FC<Props> = ({ buttonRef, className, ...restProps }) => (\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={PlayCompactMIcon}\n aria-label='Проиграть видео'\n className={cn(styles.iconButton, className)}\n />\n);\n\nexport const Pause: FC<Props> = ({ buttonRef, className, ...restProps }) => (\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={PauseCompactMIcon}\n aria-label='Поставить паузу на видео'\n className={cn(styles.iconButton, className)}\n />\n);\n\nexport const ExitFullscreen: FC<Props> = ({ buttonRef, ...restProps }) => {\n const isDesktop = useIsDesktop();\n\n const iconButton = (\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={ArrowsInwardMIcon}\n aria-label='Выйти из полноэкранного режима'\n className={styles.iconButton}\n />\n );\n\n return isDesktop ? (\n <TooltipDesktop\n view='hint'\n colors='inverted'\n trigger='hover'\n position='bottom'\n content='Выйти из полноэкранного режима'\n fallbackPlacements={['bottom-end']}\n >\n {iconButton}\n </TooltipDesktop>\n ) : (\n iconButton\n );\n};\n\nexport const MuteVideo: FC<Props> = ({ buttonRef, className, ...restProps }) => {\n const isDesktop = useIsDesktop();\n\n const iconButton = (\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={SoundMIcon}\n aria-label='Выключить звук'\n className={styles.iconButton}\n />\n );\n\n return isDesktop ? (\n <TooltipDesktop\n view='hint'\n colors='inverted'\n trigger='hover'\n position='bottom'\n content='Выключить звук'\n fallbackPlacements={['bottom-end']}\n targetClassName={className}\n >\n {iconButton}\n </TooltipDesktop>\n ) : (\n iconButton\n );\n};\n\nexport const UnmuteVideo: FC<Props> = ({ buttonRef, className, ...restProps }) => {\n const isDesktop = useIsDesktop();\n\n const iconButton = (\n <IconButton\n {...restProps}\n ref={buttonRef}\n icon={SoundCrossMIcon}\n aria-label='Включить звук'\n className={styles.iconButton}\n />\n );\n\n return isDesktop ? (\n <TooltipDesktop\n view='hint'\n colors='inverted'\n trigger='hover'\n position='bottom'\n content='Включить звук'\n fallbackPlacements={['bottom-end']}\n targetClassName={className}\n >\n {iconButton}\n </TooltipDesktop>\n ) : (\n iconButton\n );\n};\n\nexport const Download: FC<Props & { href?: string }> = ({ href, ...props }) => {\n const isDesktop = useIsDesktop();\n\n const handleMobileVideoDownload = async (e: React.MouseEvent) => {\n e.preventDefault();\n\n if (!href) return;\n\n const fileName = props.download?.toString() || 'video';\n const fileType = isVideo(href) ? 'video/*' : undefined;\n\n await downloadFile({\n url: href,\n fileName,\n fileType,\n });\n };\n\n const iconButtonProps = {\n ...props,\n icon: PointerDownMIcon,\n 'aria-label': 'Скачать' as const,\n className: styles.iconButton,\n };\n\n const iconButton =\n !isDesktop && isVideo(href) ? (\n <IconButton {...iconButtonProps} onClick={handleMobileVideoDownload} />\n ) : (\n <IconButton {...iconButtonProps} href={href} />\n );\n\n return isDesktop ? (\n <TooltipDesktop\n view='hint'\n colors='inverted'\n trigger='hover'\n position='bottom'\n content='Скачать'\n fallbackPlacements={['bottom-end']}\n >\n {iconButton}\n </TooltipDesktop>\n ) : (\n iconButton\n );\n};\n\nexport const Share: FC<Props> = (props) => {\n const isDesktop = useIsDesktop();\n\n const iconButton = (\n <IconButton\n {...props}\n icon={ShareMIcon}\n aria-label='Поделиться'\n className={styles.iconButton}\n />\n );\n\n return isDesktop ? (\n <TooltipDesktop\n view='hint'\n colors='inverted'\n trigger='hover'\n position='bottom'\n content='Поделиться'\n fallbackPlacements={['bottom-end']}\n >\n {iconButton}\n </TooltipDesktop>\n ) : (\n iconButton\n );\n};\n\nexport const Exit: FC<Props> = (props) => (\n <IconButton {...props} icon={CrossMIcon} aria-label='Закрыть' className={styles.iconButton} />\n);\n"],"names":["__rest","useIsDesktop","React","IconButton","ArrowsOutwardMIcon","styles","TooltipDesktop","__assign","ArrowLeftMIcon","PlayCompactMIcon","cn","PauseCompactMIcon","ArrowsInwardMIcon","SoundMIcon","SoundCrossMIcon","__awaiter","isVideo","downloadFile","PointerDownMIcon","ShareMIcon","CrossMIcon"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"iconButton":"gallery__iconButton_5mkzr"};
5
+ var styles = {"iconButton":"gallery__iconButton_1rrmx"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -6,6 +6,7 @@ var React = require('react');
6
6
  var context = require('../../context.js');
7
7
  var utils = require('../../utils/utils.js');
8
8
  var constants = require('../../utils/constants.js');
9
+ require('tslib');
9
10
  var index = require('../buttons/index.js');
10
11
  var Component = require('../header-info-block/Component.js');
11
12
  var index_module = require('./index.module.css.js');
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../src/components/header/Component.tsx"],"sourcesContent":["import React, { type FC, useContext, useEffect, useRef } from 'react';\n\nimport { GalleryContext } from '../../context';\nimport { isSmallImage, isVideo, TestIds } from '../../utils';\nimport * as Buttons from '../buttons';\nimport { HeaderInfoBlock } from '../header-info-block';\n\nimport styles from './index.module.css';\n\nexport const Header: FC = () => {\n const {\n currentSlideIndex,\n singleSlide,\n images,\n fullScreen,\n getCurrentImageMeta,\n getCurrentImage,\n setFullScreen,\n onClose,\n mutedVideo,\n setMutedVideo,\n } = useContext(GalleryContext);\n\n const currentImage = getCurrentImage();\n const meta = getCurrentImageMeta();\n\n const toggleFullScreenButton = useRef<HTMLButtonElement>(null);\n\n const onMuteButtonClick = () => {\n if (currentImage) {\n if (mutedVideo && currentImage.onUnmute) {\n currentImage.onUnmute();\n } else if (currentImage.onMute) {\n currentImage.onMute();\n }\n }\n setMutedVideo(!mutedVideo);\n };\n\n const closeFullScreen = () => {\n setFullScreen(false);\n };\n\n const openFullScreen = () => {\n setFullScreen(true);\n };\n\n useEffect(() => {\n if (toggleFullScreenButton.current) {\n toggleFullScreenButton.current.focus();\n }\n }, [fullScreen]);\n\n const canDownload = currentImage?.canDownload ?? true;\n const filename = currentImage?.name || '';\n const description =\n singleSlide || !images.length ? '' : `${currentSlideIndex + 1} из ${images.length}`;\n\n const showFullScreenButton = !isSmallImage(meta) && !meta?.broken;\n const showDownloadButton = !meta?.broken && canDownload;\n\n const renderToggleFullScreenButton = () =>\n fullScreen ? (\n <Buttons.ExitFullscreen\n onClick={closeFullScreen}\n buttonRef={toggleFullScreenButton}\n dataTestId={TestIds.EXIT_FULLSCREEN_BUTTON}\n />\n ) : (\n <Buttons.Fullscreen\n onClick={openFullScreen}\n buttonRef={toggleFullScreenButton}\n dataTestId={TestIds.FULLSCREEN_BUTTON}\n />\n );\n\n const renderToggleMuteVideo = () =>\n mutedVideo ? (\n <Buttons.UnmuteVideo onClick={onMuteButtonClick} dataTestId={TestIds.UNMUTE_BUTTON} />\n ) : (\n <Buttons.MuteVideo onClick={onMuteButtonClick} dataTestId={TestIds.MUTE_BUTTON} />\n );\n\n return (\n <div className={styles.header}>\n <HeaderInfoBlock filename={filename} description={description} />\n\n <div className={styles.buttons}>\n {isVideo(currentImage?.src) && renderToggleMuteVideo()}\n {showFullScreenButton && renderToggleFullScreenButton()}\n\n {showDownloadButton && (\n <Buttons.Download\n href={currentImage?.src}\n download={currentImage?.name}\n dataTestId={TestIds.DOWNLOAD_BUTTON}\n />\n )}\n\n <Buttons.Exit onClick={onClose} dataTestId={TestIds.CLOSE_BUTTON} />\n </div>\n </div>\n );\n};\n"],"names":["useContext","GalleryContext","useRef","useEffect","isSmallImage","React","Buttons.ExitFullscreen","TestIds","Buttons.Fullscreen","Buttons.UnmuteVideo","Buttons.MuteVideo","styles","HeaderInfoBlock","isVideo","Buttons.Download","Buttons.Exit"],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["../../src/components/header/Component.tsx"],"sourcesContent":["import React, { type FC, useContext, useEffect, useRef } from 'react';\n\nimport { GalleryContext } from '../../context';\nimport { isSmallImage, isVideo, TestIds } from '../../utils';\nimport * as Buttons from '../buttons';\nimport { HeaderInfoBlock } from '../header-info-block';\n\nimport styles from './index.module.css';\n\nexport const Header: FC = () => {\n const {\n currentSlideIndex,\n singleSlide,\n images,\n fullScreen,\n getCurrentImageMeta,\n getCurrentImage,\n setFullScreen,\n onClose,\n mutedVideo,\n setMutedVideo,\n } = useContext(GalleryContext);\n\n const currentImage = getCurrentImage();\n const meta = getCurrentImageMeta();\n\n const toggleFullScreenButton = useRef<HTMLButtonElement>(null);\n\n const onMuteButtonClick = () => {\n if (currentImage) {\n if (mutedVideo && currentImage.onUnmute) {\n currentImage.onUnmute();\n } else if (currentImage.onMute) {\n currentImage.onMute();\n }\n }\n setMutedVideo(!mutedVideo);\n };\n\n const closeFullScreen = () => {\n setFullScreen(false);\n };\n\n const openFullScreen = () => {\n setFullScreen(true);\n };\n\n useEffect(() => {\n if (toggleFullScreenButton.current) {\n toggleFullScreenButton.current.focus();\n }\n }, [fullScreen]);\n\n const canDownload = currentImage?.canDownload ?? true;\n const filename = currentImage?.name || '';\n const description =\n singleSlide || !images.length ? '' : `${currentSlideIndex + 1} из ${images.length}`;\n\n const showFullScreenButton = !isSmallImage(meta) && !meta?.broken;\n const showDownloadButton = !meta?.broken && canDownload;\n\n const renderToggleFullScreenButton = () =>\n fullScreen ? (\n <Buttons.ExitFullscreen\n onClick={closeFullScreen}\n buttonRef={toggleFullScreenButton}\n dataTestId={TestIds.EXIT_FULLSCREEN_BUTTON}\n />\n ) : (\n <Buttons.Fullscreen\n onClick={openFullScreen}\n buttonRef={toggleFullScreenButton}\n dataTestId={TestIds.FULLSCREEN_BUTTON}\n />\n );\n\n const renderToggleMuteVideo = () =>\n mutedVideo ? (\n <Buttons.UnmuteVideo onClick={onMuteButtonClick} dataTestId={TestIds.UNMUTE_BUTTON} />\n ) : (\n <Buttons.MuteVideo onClick={onMuteButtonClick} dataTestId={TestIds.MUTE_BUTTON} />\n );\n\n return (\n <div className={styles.header}>\n <HeaderInfoBlock filename={filename} description={description} />\n\n <div className={styles.buttons}>\n {isVideo(currentImage?.src) && renderToggleMuteVideo()}\n {showFullScreenButton && renderToggleFullScreenButton()}\n\n {showDownloadButton && (\n <Buttons.Download\n href={currentImage?.src}\n download={currentImage?.name}\n dataTestId={TestIds.DOWNLOAD_BUTTON}\n />\n )}\n\n <Buttons.Exit onClick={onClose} dataTestId={TestIds.CLOSE_BUTTON} />\n </div>\n </div>\n );\n};\n"],"names":["useContext","GalleryContext","useRef","useEffect","isSmallImage","React","Buttons.ExitFullscreen","TestIds","Buttons.Fullscreen","Buttons.UnmuteVideo","Buttons.MuteVideo","styles","HeaderInfoBlock","isVideo","Buttons.Download","Buttons.Exit"],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  :root {
2
2
  --gap-16: 16px;
3
+ --gap-24: 24px;
3
4
  --gap-32: 32px;
4
5
  }
5
- .gallery__header_n4k0i {
6
+ .gallery__header_vw9ek {
6
7
  display: flex;
7
8
  justify-content: space-between;
8
9
  flex-shrink: 0;
9
10
  width: 100%;
10
- padding: var(--gap-16) var(--gap-32);
11
+ padding: var(--gap-16) var(--gap-24) var(--gap-16) var(--gap-32);
11
12
  box-sizing: border-box;
12
13
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"header":"gallery__header_n4k0i"};
5
+ var styles = {"header":"gallery__header_vw9ek"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.module.css.js","sources":["../../src/components/header/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/index.css';\n\n.header {\n display: flex;\n justify-content: space-between;\n flex-shrink: 0;\n width: 100%;\n padding: var(--gap-16) var(--gap-32);\n box-sizing: border-box;\n}\n"],"names":[],"mappings":";;;;AAEgB,aAAe,CAAC,QAAQ,CAAC,uBAAuB,CAAC;;;;"}
1
+ {"version":3,"file":"index.module.css.js","sources":["../../src/components/header/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/index.css';\n\n.header {\n display: flex;\n justify-content: space-between;\n flex-shrink: 0;\n width: 100%;\n padding: var(--gap-16) var(--gap-24) var(--gap-16) var(--gap-32);\n box-sizing: border-box;\n}\n"],"names":[],"mappings":";;;;AAEgB,aAAe,CAAC,QAAQ,CAAC,uBAAuB,CAAC;;;;"}
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var React = require('react');
6
6
  var coreComponentsTypography = require('@alfalab/core-components-typography');
7
7
  var splitFilename = require('../../utils/split-filename.js');
8
+ require('tslib');
8
9
  var index_module = require('./index.module.css.js');
9
10
 
10
11
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
@@ -16,7 +17,7 @@ var HeaderInfoBlock = function (_a) {
16
17
  var _b = splitFilename.splitFilename(filename), head = _b[0], tail = _b[1];
17
18
  return (React__default.default.createElement("div", { className: index_module.info },
18
19
  React__default.default.createElement("div", { className: index_module.filenameContainer },
19
- React__default.default.createElement(coreComponentsTypography.TypographyTitle, { tag: 'h1', className: index_module.filenameHead, view: 'xsmall', font: 'system', color: 'static-primary-light' }, head),
20
+ React__default.default.createElement(coreComponentsTypography.TypographyTitle, { tag: 'h2', className: index_module.filenameHead, view: 'small', font: 'system', color: 'static-primary-light' }, head),
20
21
  React__default.default.createElement(coreComponentsTypography.TypographyTitle, { tag: 'h1', view: 'xsmall', font: 'system', color: 'static-primary-light' }, tail)),
21
22
  description ? (React__default.default.createElement(coreComponentsTypography.TypographyText, { className: index_module.description, tag: 'div', view: 'primary-medium', color: 'static-secondary-light' }, description)) : null));
22
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../src/components/header-info-block/Component.tsx"],"sourcesContent":["import React, { type FC } from 'react';\n\nimport { TypographyText, TypographyTitle } from '@alfalab/core-components-typography';\n\nimport { splitFilename } from '../../utils';\n\nimport styles from './index.module.css';\n\nexport type HeaderInfoBlockProps = {\n filename: string;\n description?: string;\n};\n\nexport const HeaderInfoBlock: FC<HeaderInfoBlockProps> = ({ filename, description }) => {\n const [head, tail] = splitFilename(filename);\n\n return (\n <div className={styles.info}>\n <div className={styles.filenameContainer}>\n <TypographyTitle\n tag='h1'\n className={styles.filenameHead}\n view='xsmall'\n font='system'\n color='static-primary-light'\n >\n {head}\n </TypographyTitle>\n\n <TypographyTitle tag='h1' view='xsmall' font='system' color='static-primary-light'>\n {tail}\n </TypographyTitle>\n </div>\n\n {description ? (\n <TypographyText\n className={styles.description}\n tag='div'\n view='primary-medium'\n color='static-secondary-light'\n >\n {description}\n </TypographyText>\n ) : null}\n </div>\n );\n};\n"],"names":["splitFilename","React","styles","TypographyTitle","TypographyText"],"mappings":";;;;;;;;;;;;;AAaO,IAAM,eAAe,GAA6B,UAAC,EAAyB,EAAA;QAAvB,QAAQ,GAAA,EAAA,CAAA,QAAA,EAAE,WAAW,GAAA,EAAA,CAAA,WAAA;IACvE,IAAA,EAAA,GAAeA,2BAAa,CAAC,QAAQ,CAAC,EAArC,IAAI,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,IAAI,GAAA,EAAA,CAAA,CAAA,CAA2B;AAE5C,IAAA,QACIC,sBAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAEC,YAAM,CAAC,IAAI,EAAA;AACvB,QAAAD,sBAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEC,YAAM,CAAC,iBAAiB,EAAA;YACpCD,sBAAC,CAAA,aAAA,CAAAE,wCAAe,EACZ,EAAA,GAAG,EAAC,IAAI,EACR,SAAS,EAAED,YAAM,CAAC,YAAY,EAC9B,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,sBAAsB,EAE3B,EAAA,IAAI,CACS;YAElBD,sBAAC,CAAA,aAAA,CAAAE,wCAAe,IAAC,GAAG,EAAC,IAAI,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,sBAAsB,EAC7E,EAAA,IAAI,CACS,CAChB;AAEL,QAAA,WAAW,IACRF,qCAACG,uCAAc,EAAA,EACX,SAAS,EAAEF,YAAM,CAAC,WAAW,EAC7B,GAAG,EAAC,KAAK,EACT,IAAI,EAAC,gBAAgB,EACrB,KAAK,EAAC,wBAAwB,EAE7B,EAAA,WAAW,CACC,IACjB,IAAI,CACN;AAEd;;;;"}
1
+ {"version":3,"file":"Component.js","sources":["../../src/components/header-info-block/Component.tsx"],"sourcesContent":["import React, { type FC } from 'react';\n\nimport { TypographyText, TypographyTitle } from '@alfalab/core-components-typography';\n\nimport { splitFilename } from '../../utils';\n\nimport styles from './index.module.css';\n\nexport type HeaderInfoBlockProps = {\n filename: string;\n description?: string;\n};\n\nexport const HeaderInfoBlock: FC<HeaderInfoBlockProps> = ({ filename, description }) => {\n const [head, tail] = splitFilename(filename);\n\n return (\n <div className={styles.info}>\n <div className={styles.filenameContainer}>\n <TypographyTitle\n tag='h2'\n className={styles.filenameHead}\n view='small'\n font='system'\n color='static-primary-light'\n >\n {head}\n </TypographyTitle>\n\n <TypographyTitle tag='h1' view='xsmall' font='system' color='static-primary-light'>\n {tail}\n </TypographyTitle>\n </div>\n\n {description ? (\n <TypographyText\n className={styles.description}\n tag='div'\n view='primary-medium'\n color='static-secondary-light'\n >\n {description}\n </TypographyText>\n ) : null}\n </div>\n );\n};\n"],"names":["splitFilename","React","styles","TypographyTitle","TypographyText"],"mappings":";;;;;;;;;;;;;;AAaO,IAAM,eAAe,GAA6B,UAAC,EAAyB,EAAA;QAAvB,QAAQ,GAAA,EAAA,CAAA,QAAA,EAAE,WAAW,GAAA,EAAA,CAAA,WAAA;IACvE,IAAA,EAAA,GAAeA,2BAAa,CAAC,QAAQ,CAAC,EAArC,IAAI,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,IAAI,GAAA,EAAA,CAAA,CAAA,CAA2B;AAE5C,IAAA,QACIC,sBAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAEC,YAAM,CAAC,IAAI,EAAA;AACvB,QAAAD,sBAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEC,YAAM,CAAC,iBAAiB,EAAA;YACpCD,sBAAC,CAAA,aAAA,CAAAE,wCAAe,EACZ,EAAA,GAAG,EAAC,IAAI,EACR,SAAS,EAAED,YAAM,CAAC,YAAY,EAC9B,IAAI,EAAC,OAAO,EACZ,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,sBAAsB,EAE3B,EAAA,IAAI,CACS;YAElBD,sBAAC,CAAA,aAAA,CAAAE,wCAAe,IAAC,GAAG,EAAC,IAAI,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,sBAAsB,EAC7E,EAAA,IAAI,CACS,CAChB;AAEL,QAAA,WAAW,IACRF,qCAACG,uCAAc,EAAA,EACX,SAAS,EAAEF,YAAM,CAAC,WAAW,EAC7B,GAAG,EAAC,KAAK,EACT,IAAI,EAAC,gBAAgB,EACrB,KAAK,EAAC,wBAAwB,EAE7B,EAAA,WAAW,CACC,IACjB,IAAI,CACN;AAEd;;;;"}
@@ -1,24 +1,24 @@
1
1
  :root {
2
2
  --gap-4: 4px;
3
3
  }
4
- .gallery__info_1936g {
4
+ .gallery__info_11ql4 {
5
5
  height: 100%;
6
6
  display: flex;
7
7
  flex-direction: column;
8
8
  justify-content: center;
9
9
  overflow: hidden;
10
10
  }
11
- .gallery__filenameHead_1936g {
11
+ .gallery__filenameHead_11ql4 {
12
12
  display: inline;
13
13
  text-overflow: ellipsis;
14
14
  overflow: hidden;
15
15
  white-space: nowrap;
16
16
  }
17
- .gallery__filenameContainer_1936g {
17
+ .gallery__filenameContainer_11ql4 {
18
18
  overflow: hidden;
19
19
  display: inline-flex;
20
20
  }
21
- .gallery__description_1936g {
21
+ .gallery__description_11ql4 {
22
22
  display: inline;
23
23
  text-overflow: ellipsis;
24
24
  overflow: hidden;
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"info":"gallery__info_1936g","filenameHead":"gallery__filenameHead_1936g","filenameContainer":"gallery__filenameContainer_1936g","description":"gallery__description_1936g"};
5
+ var styles = {"info":"gallery__info_11ql4","filenameHead":"gallery__filenameHead_11ql4","filenameContainer":"gallery__filenameContainer_11ql4","description":"gallery__description_11ql4"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map