@alfalab/core-components-gallery 6.0.1-snapshot-c2c8d5a → 6.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/components/bottom-button/index.css +5 -5
  2. package/components/bottom-button/index.module.css.js +1 -1
  3. package/components/buttons/index.css +5 -5
  4. package/components/buttons/index.module.css.js +1 -1
  5. package/components/header/index.css +1 -1
  6. package/components/header/index.module.css.js +1 -1
  7. package/components/header-info-block/index.css +4 -4
  8. package/components/header-info-block/index.module.css.js +1 -1
  9. package/components/header-mobile/Component.js +59 -26
  10. package/components/header-mobile/Component.js.map +1 -1
  11. package/components/header-mobile/index.css +6 -6
  12. package/components/header-mobile/index.module.css.js +1 -1
  13. package/components/image-preview/index.css +17 -17
  14. package/components/image-preview/index.module.css.js +1 -1
  15. package/components/image-viewer/component.js +2 -4
  16. package/components/image-viewer/component.js.map +1 -1
  17. package/components/image-viewer/index.css +25 -25
  18. package/components/image-viewer/index.module.css.js +1 -1
  19. package/components/image-viewer/video/index.css +7 -7
  20. package/components/image-viewer/video/index.module.css.js +1 -1
  21. package/components/info-bar/index.css +3 -3
  22. package/components/info-bar/index.module.css.js +1 -1
  23. package/components/navigation-bar/index.css +8 -8
  24. package/components/navigation-bar/index.module.css.js +1 -1
  25. package/components/subtitles/index.css +3 -3
  26. package/components/subtitles/index.module.css.js +1 -1
  27. package/cssm/components/header-mobile/Component.js +59 -26
  28. package/cssm/components/header-mobile/Component.js.map +1 -1
  29. package/cssm/components/image-viewer/component.js +2 -4
  30. package/cssm/components/image-viewer/component.js.map +1 -1
  31. package/esm/components/bottom-button/index.css +5 -5
  32. package/esm/components/bottom-button/index.module.css.js +1 -1
  33. package/esm/components/buttons/index.css +5 -5
  34. package/esm/components/buttons/index.module.css.js +1 -1
  35. package/esm/components/header/index.css +1 -1
  36. package/esm/components/header/index.module.css.js +1 -1
  37. package/esm/components/header-info-block/index.css +4 -4
  38. package/esm/components/header-info-block/index.module.css.js +1 -1
  39. package/esm/components/header-mobile/Component.js +59 -26
  40. package/esm/components/header-mobile/Component.js.map +1 -1
  41. package/esm/components/header-mobile/index.css +6 -6
  42. package/esm/components/header-mobile/index.module.css.js +1 -1
  43. package/esm/components/image-preview/index.css +17 -17
  44. package/esm/components/image-preview/index.module.css.js +1 -1
  45. package/esm/components/image-viewer/component.js +2 -4
  46. package/esm/components/image-viewer/component.js.map +1 -1
  47. package/esm/components/image-viewer/index.css +25 -25
  48. package/esm/components/image-viewer/index.module.css.js +1 -1
  49. package/esm/components/image-viewer/video/index.css +7 -7
  50. package/esm/components/image-viewer/video/index.module.css.js +1 -1
  51. package/esm/components/info-bar/index.css +3 -3
  52. package/esm/components/info-bar/index.module.css.js +1 -1
  53. package/esm/components/navigation-bar/index.css +8 -8
  54. package/esm/components/navigation-bar/index.module.css.js +1 -1
  55. package/esm/components/subtitles/index.css +3 -3
  56. package/esm/components/subtitles/index.module.css.js +1 -1
  57. package/esm/index.css +9 -9
  58. package/esm/index.module.css.js +1 -1
  59. package/index.css +9 -9
  60. package/index.module.css.js +1 -1
  61. package/modern/components/bottom-button/index.css +5 -5
  62. package/modern/components/bottom-button/index.module.css.js +1 -1
  63. package/modern/components/buttons/index.css +5 -5
  64. package/modern/components/buttons/index.module.css.js +1 -1
  65. package/modern/components/header/index.css +1 -1
  66. package/modern/components/header/index.module.css.js +1 -1
  67. package/modern/components/header-info-block/index.css +4 -4
  68. package/modern/components/header-info-block/index.module.css.js +1 -1
  69. package/modern/components/header-mobile/Component.js +41 -15
  70. package/modern/components/header-mobile/Component.js.map +1 -1
  71. package/modern/components/header-mobile/index.css +6 -6
  72. package/modern/components/header-mobile/index.module.css.js +1 -1
  73. package/modern/components/image-preview/index.css +17 -17
  74. package/modern/components/image-preview/index.module.css.js +1 -1
  75. package/modern/components/image-viewer/component.js +2 -4
  76. package/modern/components/image-viewer/component.js.map +1 -1
  77. package/modern/components/image-viewer/index.css +25 -25
  78. package/modern/components/image-viewer/index.module.css.js +1 -1
  79. package/modern/components/image-viewer/video/index.css +7 -7
  80. package/modern/components/image-viewer/video/index.module.css.js +1 -1
  81. package/modern/components/info-bar/index.css +3 -3
  82. package/modern/components/info-bar/index.module.css.js +1 -1
  83. package/modern/components/navigation-bar/index.css +8 -8
  84. package/modern/components/navigation-bar/index.module.css.js +1 -1
  85. package/modern/components/subtitles/index.css +3 -3
  86. package/modern/components/subtitles/index.module.css.js +1 -1
  87. package/modern/index.css +9 -9
  88. package/modern/index.module.css.js +1 -1
  89. package/moderncssm/components/header-mobile/Component.js +41 -15
  90. package/moderncssm/components/header-mobile/Component.js.map +1 -1
  91. package/moderncssm/components/image-viewer/component.js +2 -4
  92. package/moderncssm/components/image-viewer/component.js.map +1 -1
  93. package/package.json +11 -11
  94. package/src/components/header-mobile/Component.tsx +45 -17
  95. package/src/components/image-viewer/component.tsx +1 -1
@@ -4,30 +4,30 @@
4
4
  } :root {
5
5
  --border-radius-3xl: 24px;
6
6
  --border-radius-24: var(--border-radius-3xl);
7
- } .gallery__videoWrapper_1beje {
7
+ } .gallery__videoWrapper_s9vff {
8
8
  display: flex;
9
9
  justify-content: center;
10
10
  height: 100%;
11
11
  width: auto;
12
12
  position: relative;
13
- } .gallery__video_1beje {
13
+ } .gallery__video_s9vff {
14
14
  max-width: 100%;
15
15
  max-height: 100%;
16
16
  border-radius: var(--border-radius-24);
17
- } .gallery__mobile_1beje {
17
+ } .gallery__mobile_s9vff {
18
18
  border-radius: 0;
19
- } .gallery__videoButton_1beje {
19
+ } .gallery__videoButton_s9vff {
20
20
  position: absolute;
21
21
  top: 50%;
22
22
  left: 50%;
23
23
  transform: translate(-50%, -50%);
24
24
  z-index: 1;
25
25
  color: green;
26
- } .gallery__icon_1beje {
26
+ } .gallery__icon_s9vff {
27
27
  color: var(--color-static-neutral-0);
28
- } .gallery__iconShape_1beje {
28
+ } .gallery__iconShape_s9vff {
29
29
  fill: var(--color-static-neutral-translucent-700);
30
- } .gallery__bottomButton_1beje {
30
+ } .gallery__bottomButton_s9vff {
31
31
  position: absolute;
32
32
  bottom: 48px;
33
33
  left: 32px;
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"videoWrapper":"gallery__videoWrapper_1beje","video":"gallery__video_1beje","mobile":"gallery__mobile_1beje","videoButton":"gallery__videoButton_1beje","icon":"gallery__icon_1beje","iconShape":"gallery__iconShape_1beje","bottomButton":"gallery__bottomButton_1beje"};
5
+ var styles = {"videoWrapper":"gallery__videoWrapper_s9vff","video":"gallery__video_s9vff","mobile":"gallery__mobile_s9vff","videoButton":"gallery__videoButton_s9vff","icon":"gallery__icon_s9vff","iconShape":"gallery__iconShape_s9vff","bottomButton":"gallery__bottomButton_s9vff"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -5,9 +5,9 @@
5
5
  --gap-xs: 8px;
6
6
  --gap-4: var(--gap-2xs);
7
7
  --gap-8: var(--gap-xs);
8
- } .gallery__description_1o3h0 {
8
+ } .gallery__description_1wotl {
9
9
  text-align: center;
10
- } .gallery__infoWrapper_1o3h0 {
10
+ } .gallery__infoWrapper_1wotl {
11
11
  background-color: var(--color-static-neutral-0-inverted);
12
12
  display: flex;
13
13
  align-items: center;
@@ -15,7 +15,7 @@
15
15
  padding: 0 var(--gap-8) var(--gap-4);
16
16
  position: relative;
17
17
  height: 48px
18
- } .gallery__infoWrapper_1o3h0.gallery__video_1o3h0 {
18
+ } .gallery__infoWrapper_1wotl.gallery__video_1wotl {
19
19
  padding: 0 var(--gap-4) var(--gap-4);
20
20
  justify-content: space-between;
21
21
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"description":"gallery__description_1o3h0","infoWrapper":"gallery__infoWrapper_1o3h0","video":"gallery__video_1o3h0"};
5
+ var styles = {"description":"gallery__description_1wotl","infoWrapper":"gallery__infoWrapper_1wotl","video":"gallery__video_1wotl"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -11,7 +11,7 @@
11
11
  --gap-8: var(--gap-xs);
12
12
  --gap-12: var(--gap-s);
13
13
  --gap-24: var(--gap-xl);
14
- } .gallery__component_1xzqj {
14
+ } .gallery__component_vhjcl {
15
15
  display: flex;
16
16
  flex-wrap: nowrap;
17
17
  align-content: center;
@@ -22,19 +22,19 @@
22
22
  padding: var(--gap-12) var(--gap-24);
23
23
  scrollbar-width: none;
24
24
  background-color: var(--color-static-neutral-0-inverted)
25
- } .gallery__component_1xzqj.gallery__mobile_1xzqj {
25
+ } .gallery__component_vhjcl.gallery__mobile_vhjcl {
26
26
  padding: var(--gap-8) var(--gap-24);
27
- } .gallery__component_1xzqj::-webkit-scrollbar {
27
+ } .gallery__component_vhjcl::-webkit-scrollbar {
28
28
  display: none;
29
- } .gallery__previews_1xzqj {
29
+ } .gallery__previews_vhjcl {
30
30
  display: flex;
31
- } .gallery__preview_1xzqj {
31
+ } .gallery__preview_vhjcl {
32
32
  flex-shrink: 0;
33
33
  margin-right: var(--gap-4)
34
- } .gallery__preview_1xzqj.gallery__mobile_1xzqj {
34
+ } .gallery__preview_vhjcl.gallery__mobile_vhjcl {
35
35
  margin-right: var(--gap-2);
36
- } .gallery__preview_1xzqj:first-child {
36
+ } .gallery__preview_vhjcl:first-child {
37
37
  margin-left: auto;
38
- } .gallery__preview_1xzqj:last-child {
38
+ } .gallery__preview_vhjcl:last-child {
39
39
  margin-right: auto;
40
40
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"component":"gallery__component_1xzqj","mobile":"gallery__mobile_1xzqj","preview":"gallery__preview_1xzqj"};
5
+ var styles = {"component":"gallery__component_vhjcl","mobile":"gallery__mobile_vhjcl","preview":"gallery__preview_vhjcl"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -4,7 +4,7 @@
4
4
  --gap-0: 0px;
5
5
  --gap-16: var(--gap-m);
6
6
  --gap-32: var(--gap-2xl);
7
- } .gallery__subtitles_19v8x {
7
+ } .gallery__subtitles_17mnq {
8
8
  position: absolute;
9
9
  align-self: flex-end;
10
10
  padding: var(--gap-0) var(--gap-32);
@@ -14,8 +14,8 @@
14
14
  opacity: 1;
15
15
  z-index: 1;
16
16
  transition: opacity 500ms ease-in-out, margin-bottom 270ms ease-in-out
17
- } .gallery__subtitles_19v8x.gallery__mobile_19v8x {
17
+ } .gallery__subtitles_17mnq.gallery__mobile_17mnq {
18
18
  position: unset;
19
- } .gallery__hideSubtitles_19v8x {
19
+ } .gallery__hideSubtitles_17mnq {
20
20
  opacity: 0;
21
21
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"subtitles":"gallery__subtitles_19v8x","mobile":"gallery__mobile_19v8x","hideSubtitles":"gallery__hideSubtitles_19v8x"};
5
+ var styles = {"subtitles":"gallery__subtitles_17mnq","mobile":"gallery__mobile_17mnq","hideSubtitles":"gallery__hideSubtitles_17mnq"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -28,39 +28,72 @@ var HeaderMobile = function () {
28
28
  var canDownload = (_b = currentImage === null || currentImage === void 0 ? void 0 : currentImage.canDownload) !== null && _b !== void 0 ? _b : true;
29
29
  var showDownloadButton = !(meta === null || meta === void 0 ? void 0 : meta.broken) && canDownload;
30
30
  var handleShareClick = function () { return tslib.__awaiter(void 0, void 0, void 0, function () {
31
- var title, image, blob, filesArray, shareData;
32
- var _a;
33
- return tslib.__generator(this, function (_b) {
34
- switch (_b.label) {
31
+ var title, url, response, blob, file, shareData;
32
+ var _b, _c;
33
+ return tslib.__generator(this, function (_d) {
34
+ switch (_d.label) {
35
35
  case 0:
36
- if (!currentImage)
36
+ if (!currentImage || !navigator.share) {
37
37
  return [2 /*return*/];
38
- title = (_a = currentImage.name) !== null && _a !== void 0 ? _a : new Date().toISOString().split('T')[0];
39
- return [4 /*yield*/, fetch(currentImage.src)];
38
+ }
39
+ title = (_b = currentImage.name) !== null && _b !== void 0 ? _b : new Date().toISOString().split('T')[0];
40
+ url = currentImage.src;
41
+ _d.label = 1;
40
42
  case 1:
41
- image = _b.sent();
42
- return [4 /*yield*/, image.blob()];
43
+ _d.trys.push([1, 10, , 12]);
44
+ if (!utils.isVideo(url)) return [3 /*break*/, 3];
45
+ // Если видео — всегда делим ссылку
46
+ return [4 /*yield*/, navigator.share({
47
+ title: title,
48
+ url: url,
49
+ text: 'Видео',
50
+ })];
43
51
  case 2:
44
- blob = _b.sent();
45
- filesArray = [
46
- new File([blob], title, {
47
- type: blob.type,
48
- lastModified: new Date().getTime(),
49
- }),
50
- ];
52
+ // Если видео — всегда делим ссылку
53
+ _d.sent();
54
+ return [2 /*return*/];
55
+ case 3: return [4 /*yield*/, fetch(url, { mode: 'cors' })];
56
+ case 4:
57
+ response = _d.sent();
58
+ return [4 /*yield*/, response.blob()];
59
+ case 5:
60
+ blob = _d.sent();
61
+ file = new File([blob], "".concat(title, ".png"), {
62
+ type: blob.type,
63
+ lastModified: Date.now(),
64
+ });
51
65
  shareData = {
52
- files: filesArray,
66
+ files: [file],
67
+ title: title,
68
+ text: 'Картинка',
53
69
  };
54
- if (!(navigator.canShare(shareData) && !utils.isVideo(currentImage.src))) return [3 /*break*/, 4];
70
+ if (!(((_c = navigator.canShare) === null || _c === void 0 ? void 0 : _c.call(navigator, shareData)) && response.ok)) return [3 /*break*/, 7];
55
71
  return [4 /*yield*/, navigator.share(shareData)];
56
- case 3:
57
- _b.sent();
58
- return [3 /*break*/, 6];
59
- case 4: return [4 /*yield*/, navigator.share({ url: currentImage.src, title: title })];
60
- case 5:
61
- _b.sent();
62
- _b.label = 6;
63
- case 6: return [2 /*return*/];
72
+ case 6:
73
+ _d.sent();
74
+ return [3 /*break*/, 9];
75
+ case 7:
76
+ // Fallback: делимся только ссылкой
77
+ return [4 /*yield*/, navigator.share({
78
+ title: title,
79
+ text: 'Картинка',
80
+ url: url,
81
+ })];
82
+ case 8:
83
+ // Fallback: делимся только ссылкой
84
+ _d.sent();
85
+ _d.label = 9;
86
+ case 9: return [3 /*break*/, 12];
87
+ case 10:
88
+ _d.sent();
89
+ return [4 /*yield*/, navigator.share({
90
+ title: title,
91
+ url: url,
92
+ })];
93
+ case 11:
94
+ _d.sent();
95
+ return [3 /*break*/, 12];
96
+ case 12: return [2 /*return*/];
64
97
  }
65
98
  });
66
99
  }); };
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../../src/components/header-mobile/Component.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport cn from 'classnames';\n\nimport { Text } from '@alfalab/core-components-typography';\n\nimport { GalleryContext } from '../../context';\nimport { isVideo, TestIds } from '../../utils';\nimport * as Buttons from '../buttons';\n\nimport styles from './index.module.css';\n\nexport const HeaderMobile = () => {\n const {\n onClose,\n images,\n currentSlideIndex,\n getCurrentImage,\n getCurrentImageMeta,\n hideNavigation,\n } = useContext(GalleryContext);\n\n const currentImage = getCurrentImage();\n const meta = getCurrentImageMeta();\n\n const description = images.length > 1 && `${currentSlideIndex + 1} из ${images.length}`;\n\n const canDownload = currentImage?.canDownload ?? true;\n const showDownloadButton = !meta?.broken && canDownload;\n\n const handleShareClick = async () => {\n if (!currentImage) return;\n\n const title = currentImage.name ?? new Date().toISOString().split('T')[0];\n\n const image = await fetch(currentImage.src);\n const blob = await image.blob();\n\n const filesArray = [\n new File([blob], title, {\n type: blob.type,\n lastModified: new Date().getTime(),\n }),\n ];\n\n const shareData = {\n files: filesArray,\n };\n\n if (navigator.canShare(shareData) && !isVideo(currentImage.src)) {\n await navigator.share(shareData);\n } else {\n await navigator.share({ url: currentImage.src, title });\n }\n };\n\n return (\n <div\n className={cn(styles.headerMobile, {\n [styles.video]: isVideo(currentImage?.src),\n [styles.hide]: hideNavigation,\n })}\n >\n <Buttons.BackArrow onClick={onClose} />\n <Text\n className={styles.description}\n tag='div'\n view='component-primary'\n color='static-primary-light'\n >\n {description}\n </Text>\n <div className={styles.rightButtons}>\n {showDownloadButton && (\n <Buttons.Download\n href={currentImage?.src}\n download={currentImage?.name}\n dataTestId={TestIds.DOWNLOAD_BUTTON}\n />\n )}\n {!meta?.broken && <Buttons.Share onClick={handleShareClick} />}\n </div>\n </div>\n );\n};\n"],"names":["useContext","GalleryContext","__awaiter","isVideo","React","cn","styles","Buttons.BackArrow","Text","Buttons.Download","TestIds","Buttons.Share"],"mappings":";;;;;;;;;;;;;;;;;;;;AAWa,IAAA,YAAY,GAAG,YAAA;;;IAClB,IAAA,EAAA,GAOFA,gBAAU,CAACC,sBAAc,CAAC,EAN1B,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,iBAAiB,GAAA,EAAA,CAAA,iBAAA,EACjB,eAAe,GAAA,EAAA,CAAA,eAAA,EACf,mBAAmB,GAAA,EAAA,CAAA,mBAAA,EACnB,cAAc,GAAA,EAAA,CAAA,cACY;AAE9B,IAAA,IAAM,YAAY,GAAG,eAAe,EAAE;AACtC,IAAA,IAAM,IAAI,GAAG,mBAAmB,EAAE;AAElC,IAAA,IAAM,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAG,CAAA,MAAA,CAAA,iBAAiB,GAAG,CAAC,EAAA,gBAAA,CAAA,CAAA,MAAA,CAAO,MAAM,CAAC,MAAM,CAAE;AAEvF,IAAA,IAAM,WAAW,GAAG,CAAA,EAAA,GAAA,YAAY,KAAZ,IAAA,IAAA,YAAY,KAAZ,MAAA,GAAA,MAAA,GAAA,YAAY,CAAE,WAAW,MAAI,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAA,IAAI;AACrD,IAAA,IAAM,kBAAkB,GAAG,EAAC,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,MAAA,GAAA,MAAA,GAAA,IAAI,CAAE,MAAM,CAAA,IAAI,WAAW;AAEvD,IAAA,IAAM,gBAAgB,GAAG,YAAA,EAAA,OAAAC,eAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;;;;AACrB,oBAAA,IAAI,CAAC,YAAY;wBAAE,OAAO,CAAA,CAAA,YAAA;oBAEpB,KAAK,GAAG,MAAA,YAAY,CAAC,IAAI,MAAI,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAA,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE3D,oBAAA,OAAA,CAAA,CAAA,YAAM,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;;AAArC,oBAAA,KAAK,GAAG,EAA6B,CAAA,IAAA,EAAA;AAC9B,oBAAA,OAAA,CAAA,CAAA,YAAM,KAAK,CAAC,IAAI,EAAE,CAAA;;AAAzB,oBAAA,IAAI,GAAG,EAAkB,CAAA,IAAA,EAAA;AAEzB,oBAAA,UAAU,GAAG;AACf,wBAAA,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE;4BACpB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,4BAAA,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;yBACrC,CAAC;qBACL;AAEK,oBAAA,SAAS,GAAG;AACd,wBAAA,KAAK,EAAE,UAAU;qBACpB;AAEG,oBAAA,IAAA,EAAA,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAACC,aAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA,EAA3D,OAA2D,CAAA,CAAA,YAAA,CAAA,CAAA;AAC3D,oBAAA,OAAA,CAAA,CAAA,YAAM,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;;AAAhC,oBAAA,EAAA,CAAA,IAAA,EAAgC;;AAEhC,gBAAA,KAAA,CAAA,EAAA,OAAA,CAAA,CAAA,YAAM,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC,CAAA;;AAAvD,oBAAA,EAAA,CAAA,IAAA,EAAuD;;;;;SAE9D;IAED,QACIC,8CACI,SAAS,EAAEC,mBAAE,CAACC,uBAAM,CAAC,YAAY,GAAA,EAAA,GAAA,EAAA;AAC7B,YAAA,EAAA,CAACA,uBAAM,CAAC,KAAK,CAAA,GAAGH,aAAO,CAAC,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZ,YAAY,CAAE,GAAG,CAAC;AAC1C,YAAA,EAAA,CAACG,uBAAM,CAAC,IAAI,CAAA,GAAG,cAAc;AAC/B,YAAA,EAAA,EAAA,EAAA;AAEF,QAAAF,sBAAA,CAAA,aAAA,CAACG,eAAiB,IAAC,OAAO,EAAE,OAAO,EAAI,CAAA;QACvCH,sBAAC,CAAA,aAAA,CAAAI,SAAI,IACD,SAAS,EAAEF,uBAAM,CAAC,WAAW,EAC7B,GAAG,EAAC,KAAK,EACT,IAAI,EAAC,mBAAmB,EACxB,KAAK,EAAC,sBAAsB,EAE3B,EAAA,WAAW,CACT;AACP,QAAAF,sBAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEE,uBAAM,CAAC,YAAY,EAAA;AAC9B,YAAA,kBAAkB,KACfF,sBAAC,CAAA,aAAA,CAAAK,cAAgB,EAAA,EACb,IAAI,EAAE,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZ,YAAY,CAAE,GAAG,EACvB,QAAQ,EAAE,YAAY,KAAZ,IAAA,IAAA,YAAY,uBAAZ,YAAY,CAAE,IAAI,EAC5B,UAAU,EAAEC,iBAAO,CAAC,eAAe,GACrC,CACL;YACA,EAAC,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAA,IAAIN,sBAAA,CAAA,aAAA,CAACO,WAAa,IAAC,OAAO,EAAE,gBAAgB,EAAI,CAAA,CAC5D,CACJ;AAEd;;;;"}
1
+ {"version":3,"file":"Component.js","sources":["../../../src/components/header-mobile/Component.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport cn from 'classnames';\n\nimport { Text } from '@alfalab/core-components-typography';\n\nimport { GalleryContext } from '../../context';\nimport { isVideo, TestIds } from '../../utils';\nimport * as Buttons from '../buttons';\n\nimport styles from './index.module.css';\n\nexport const HeaderMobile = () => {\n const {\n onClose,\n images,\n currentSlideIndex,\n getCurrentImage,\n getCurrentImageMeta,\n hideNavigation,\n } = useContext(GalleryContext);\n\n const currentImage = getCurrentImage();\n const meta = getCurrentImageMeta();\n\n const description = images.length > 1 && `${currentSlideIndex + 1} из ${images.length}`;\n\n const canDownload = currentImage?.canDownload ?? true;\n const showDownloadButton = !meta?.broken && canDownload;\n\n const handleShareClick = async () => {\n if (!currentImage || !navigator.share) {\n return;\n }\n\n const title = currentImage.name ?? new Date().toISOString().split('T')[0];\n const url = currentImage.src;\n\n try {\n if (isVideo(url)) {\n // Если видео — всегда делим ссылку\n await navigator.share({\n title,\n url,\n text: 'Видео',\n });\n\n return;\n }\n\n // Попробуем скачать изображение\n const response = await fetch(url, { mode: 'cors' });\n const blob = await response.blob();\n\n const file = new File([blob], `${title}.png`, {\n type: blob.type,\n lastModified: Date.now(),\n });\n\n const shareData: ShareData = {\n files: [file],\n title,\n text: 'Картинка',\n };\n\n // Попробуем поделиться файлом\n if (navigator.canShare?.(shareData) && response.ok) {\n await navigator.share(shareData);\n } else {\n // Fallback: делимся только ссылкой\n await navigator.share({\n title,\n text: 'Картинка',\n url,\n });\n }\n } catch {\n await navigator.share({\n title,\n url,\n });\n }\n };\n\n return (\n <div\n className={cn(styles.headerMobile, {\n [styles.video]: isVideo(currentImage?.src),\n [styles.hide]: hideNavigation,\n })}\n >\n <Buttons.BackArrow onClick={onClose} />\n <Text\n className={styles.description}\n tag='div'\n view='component-primary'\n color='static-primary-light'\n >\n {description}\n </Text>\n <div className={styles.rightButtons}>\n {showDownloadButton && (\n <Buttons.Download\n href={currentImage?.src}\n download={currentImage?.name}\n dataTestId={TestIds.DOWNLOAD_BUTTON}\n />\n )}\n {!meta?.broken && <Buttons.Share onClick={handleShareClick} />}\n </div>\n </div>\n );\n};\n"],"names":["useContext","GalleryContext","__awaiter","isVideo","React","cn","styles","Buttons.BackArrow","Text","Buttons.Download","TestIds","Buttons.Share"],"mappings":"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"}
@@ -89,12 +89,10 @@ var ImageViewer = function () {
89
89
  var swiperWidth = (swiper === null || swiper === void 0 ? void 0 : swiper.width) || 1;
90
90
  var swiperHeight = (swiper === null || swiper === void 0 ? void 0 : swiper.height) || (swiper === null || swiper === void 0 ? void 0 : swiper.width) || 1;
91
91
  var swiperAspectRatio = swiperWidth / swiperHeight;
92
- return (
93
- /* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */
94
- React__default.default.createElement("div", { className: cn__default.default(styles__default.default.component, (_a = {},
92
+ return (React__default.default.createElement("div", { className: cn__default.default(styles__default.default.component, (_a = {},
95
93
  _a[styles__default.default.mobile] = isMobile,
96
94
  _a[styles__default.default.mobileVideo] = isMobile && utils.isVideo(currentImage === null || currentImage === void 0 ? void 0 : currentImage.src),
97
- _a)), onClick: handleWrapperClick },
95
+ _a)), "aria-hidden": true, onClick: handleWrapperClick },
98
96
  showControls && (React__default.default.createElement("div", { className: cn__default.default(styles__default.default.arrow, (_b = {},
99
97
  _b[styles__default.default.focused] = leftArrowFocused,
100
98
  _b)), onClick: handlePrevClick, role: 'button', onKeyDown: handleArrowLeftKeyDown, tabIndex: 0, ref: leftArrowRef, "aria-label": '\u041F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435', "data-test-id": constants.TestIds.PREV_SLIDE_BUTTON },
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../../src/components/image-viewer/component.tsx"],"sourcesContent":["import React, { FC, KeyboardEventHandler, useCallback, useContext, useMemo } from 'react';\nimport cn from 'classnames';\nimport SwiperCore, { A11y, Controller, EffectFade } from 'swiper';\nimport { Swiper, SwiperSlide } from 'swiper/react';\n\nimport { useFocus } from '@alfalab/hooks';\nimport { ChevronBackHeavyMIcon } from '@alfalab/icons-glyph/ChevronBackHeavyMIcon';\nimport { ChevronForwardHeavyMIcon } from '@alfalab/icons-glyph/ChevronForwardHeavyMIcon';\n\nimport { GalleryContext } from '../../context';\nimport { getImageAlt, getImageKey, isVideo, TestIds } from '../../utils';\n\nimport { useHandleImageViewer } from './hooks';\nimport { Slide } from './slide';\n\nimport 'swiper/swiper.min.css';\nimport styles from './index.module.css';\n\nSwiperCore.use([EffectFade, A11y, Controller]);\n\nexport const ImageViewer: FC = () => {\n const {\n images,\n imagesMeta,\n fullScreen,\n currentSlideIndex,\n initialSlide,\n setCurrentSlideIndex,\n getSwiper,\n setSwiper,\n slidePrev,\n slideNext,\n getCurrentImage,\n } = useContext(GalleryContext);\n\n const { handleWrapperClick, isMobile, rightArrowRef, leftArrowRef } = useHandleImageViewer();\n\n const [leftArrowFocused] = useFocus(leftArrowRef, 'keyboard');\n const [rightArrowFocused] = useFocus(rightArrowRef, 'keyboard');\n\n const swiper = getSwiper();\n const currentImage = getCurrentImage();\n\n const handleSlideChange = useCallback(() => {\n setCurrentSlideIndex?.(swiper?.activeIndex ?? initialSlide);\n }, [setCurrentSlideIndex, swiper, initialSlide]);\n\n const handlePrevClick = () => {\n slidePrev();\n };\n\n const handleNextClick = () => {\n slideNext();\n };\n\n const handleArrowLeftKeyDown: KeyboardEventHandler = (event) => {\n if (event.key === 'Enter') {\n slidePrev();\n }\n };\n\n const handleArrowRightKeyDown: KeyboardEventHandler = (event) => {\n if (event.key === 'Enter') {\n slideNext();\n }\n };\n\n const swiperProps = useMemo<Swiper>(\n () => ({\n slidesPerView: 1,\n effect: 'slide',\n className: cn(styles.swiper, {\n [styles.hidden]: fullScreen && !isVideo(currentImage?.src),\n [styles.fullScreenVideo]: fullScreen && isVideo(currentImage?.src),\n [styles.mobile]: isMobile,\n [styles.mobileVideo]: isMobile && isVideo(currentImage?.src),\n }),\n controller: { control: swiper },\n a11y: {\n slideRole: 'img',\n },\n initialSlide,\n simulateTouch: false,\n zoom: { maxRatio: 4, minRatio: 1, toggle: true },\n onSwiper: setSwiper,\n onSlideChange: handleSlideChange,\n lazy: { loadPrevNext: true },\n }),\n [\n fullScreen,\n currentImage?.src,\n isMobile,\n swiper,\n initialSlide,\n setSwiper,\n handleSlideChange,\n ],\n );\n\n const showControls = !fullScreen && !isMobile && !!images.length;\n\n const swiperWidth = swiper?.width || 1;\n const swiperHeight = swiper?.height || swiper?.width || 1;\n\n const swiperAspectRatio = swiperWidth / swiperHeight;\n\n return (\n /* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */\n <div\n className={cn(styles.component, {\n [styles.mobile]: isMobile,\n [styles.mobileVideo]: isMobile && isVideo(currentImage?.src),\n })}\n onClick={handleWrapperClick}\n >\n {showControls && (\n <div\n className={cn(styles.arrow, {\n [styles.focused]: leftArrowFocused,\n })}\n onClick={handlePrevClick}\n role='button'\n onKeyDown={handleArrowLeftKeyDown}\n tabIndex={0}\n ref={leftArrowRef}\n aria-label='Предыдущее изображение'\n data-test-id={TestIds.PREV_SLIDE_BUTTON}\n >\n <ChevronBackHeavyMIcon />\n </div>\n )}\n\n {fullScreen && !isVideo(currentImage?.src) && (\n <img\n src={currentImage?.src}\n alt={currentImage ? getImageAlt(currentImage, currentSlideIndex) : ''}\n className={styles.fullScreenImage}\n />\n )}\n\n <Swiper {...swiperProps}>\n {images.map((image, index) => {\n const meta = imagesMeta[index];\n\n const imageWidth = meta?.width || 1;\n const imageHeight = meta?.height || 1;\n\n const imageAspectRatio = imageWidth / imageHeight;\n\n const slideVisible = index === currentSlideIndex;\n\n return (\n <SwiperSlide\n key={getImageKey(image, index)}\n style={{\n pointerEvents: slideVisible ? 'auto' : 'none',\n transitionProperty: 'opacity',\n }}\n >\n {({ isActive }) => (\n <Slide\n isActive={isActive}\n containerAspectRatio={swiperAspectRatio}\n image={image}\n containerHeight={swiperHeight}\n meta={meta}\n index={index}\n imageAspectRatio={imageAspectRatio}\n slideVisible={slideVisible}\n />\n )}\n </SwiperSlide>\n );\n })}\n </Swiper>\n\n {showControls && (\n <div\n className={cn(styles.arrow, {\n [styles.focused]: rightArrowFocused,\n })}\n onClick={handleNextClick}\n role='button'\n onKeyDown={handleArrowRightKeyDown}\n tabIndex={0}\n ref={rightArrowRef}\n aria-label='Следующее изображение'\n data-test-id={TestIds.NEXT_SLIDE_BUTTON}\n >\n <ChevronForwardHeavyMIcon />\n </div>\n )}\n </div>\n );\n};\n"],"names":["SwiperCore","EffectFade","A11y","Controller","useContext","GalleryContext","useHandleImageViewer","useFocus","useCallback","useMemo","cn","styles","isVideo","React","TestIds","ChevronBackHeavyMIcon","getImageAlt","Swiper","__assign","SwiperSlide","getImageKey","Slide","ChevronForwardHeavyMIcon"],"mappings":"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"}
1
+ {"version":3,"file":"component.js","sources":["../../../src/components/image-viewer/component.tsx"],"sourcesContent":["import React, { FC, KeyboardEventHandler, useCallback, useContext, useMemo } from 'react';\nimport cn from 'classnames';\nimport SwiperCore, { A11y, Controller, EffectFade } from 'swiper';\nimport { Swiper, SwiperSlide } from 'swiper/react';\n\nimport { useFocus } from '@alfalab/hooks';\nimport { ChevronBackHeavyMIcon } from '@alfalab/icons-glyph/ChevronBackHeavyMIcon';\nimport { ChevronForwardHeavyMIcon } from '@alfalab/icons-glyph/ChevronForwardHeavyMIcon';\n\nimport { GalleryContext } from '../../context';\nimport { getImageAlt, getImageKey, isVideo, TestIds } from '../../utils';\n\nimport { useHandleImageViewer } from './hooks';\nimport { Slide } from './slide';\n\nimport 'swiper/swiper.min.css';\nimport styles from './index.module.css';\n\nSwiperCore.use([EffectFade, A11y, Controller]);\n\nexport const ImageViewer: FC = () => {\n const {\n images,\n imagesMeta,\n fullScreen,\n currentSlideIndex,\n initialSlide,\n setCurrentSlideIndex,\n getSwiper,\n setSwiper,\n slidePrev,\n slideNext,\n getCurrentImage,\n } = useContext(GalleryContext);\n\n const { handleWrapperClick, isMobile, rightArrowRef, leftArrowRef } = useHandleImageViewer();\n\n const [leftArrowFocused] = useFocus(leftArrowRef, 'keyboard');\n const [rightArrowFocused] = useFocus(rightArrowRef, 'keyboard');\n\n const swiper = getSwiper();\n const currentImage = getCurrentImage();\n\n const handleSlideChange = useCallback(() => {\n setCurrentSlideIndex?.(swiper?.activeIndex ?? initialSlide);\n }, [setCurrentSlideIndex, swiper, initialSlide]);\n\n const handlePrevClick = () => {\n slidePrev();\n };\n\n const handleNextClick = () => {\n slideNext();\n };\n\n const handleArrowLeftKeyDown: KeyboardEventHandler = (event) => {\n if (event.key === 'Enter') {\n slidePrev();\n }\n };\n\n const handleArrowRightKeyDown: KeyboardEventHandler = (event) => {\n if (event.key === 'Enter') {\n slideNext();\n }\n };\n\n const swiperProps = useMemo<Swiper>(\n () => ({\n slidesPerView: 1,\n effect: 'slide',\n className: cn(styles.swiper, {\n [styles.hidden]: fullScreen && !isVideo(currentImage?.src),\n [styles.fullScreenVideo]: fullScreen && isVideo(currentImage?.src),\n [styles.mobile]: isMobile,\n [styles.mobileVideo]: isMobile && isVideo(currentImage?.src),\n }),\n controller: { control: swiper },\n a11y: {\n slideRole: 'img',\n },\n initialSlide,\n simulateTouch: false,\n zoom: { maxRatio: 4, minRatio: 1, toggle: true },\n onSwiper: setSwiper,\n onSlideChange: handleSlideChange,\n lazy: { loadPrevNext: true },\n }),\n [\n fullScreen,\n currentImage?.src,\n isMobile,\n swiper,\n initialSlide,\n setSwiper,\n handleSlideChange,\n ],\n );\n\n const showControls = !fullScreen && !isMobile && !!images.length;\n\n const swiperWidth = swiper?.width || 1;\n const swiperHeight = swiper?.height || swiper?.width || 1;\n\n const swiperAspectRatio = swiperWidth / swiperHeight;\n\n return (\n <div\n className={cn(styles.component, {\n [styles.mobile]: isMobile,\n [styles.mobileVideo]: isMobile && isVideo(currentImage?.src),\n })}\n aria-hidden={true}\n onClick={handleWrapperClick}\n >\n {showControls && (\n <div\n className={cn(styles.arrow, {\n [styles.focused]: leftArrowFocused,\n })}\n onClick={handlePrevClick}\n role='button'\n onKeyDown={handleArrowLeftKeyDown}\n tabIndex={0}\n ref={leftArrowRef}\n aria-label='Предыдущее изображение'\n data-test-id={TestIds.PREV_SLIDE_BUTTON}\n >\n <ChevronBackHeavyMIcon />\n </div>\n )}\n\n {fullScreen && !isVideo(currentImage?.src) && (\n <img\n src={currentImage?.src}\n alt={currentImage ? getImageAlt(currentImage, currentSlideIndex) : ''}\n className={styles.fullScreenImage}\n />\n )}\n\n <Swiper {...swiperProps}>\n {images.map((image, index) => {\n const meta = imagesMeta[index];\n\n const imageWidth = meta?.width || 1;\n const imageHeight = meta?.height || 1;\n\n const imageAspectRatio = imageWidth / imageHeight;\n\n const slideVisible = index === currentSlideIndex;\n\n return (\n <SwiperSlide\n key={getImageKey(image, index)}\n style={{\n pointerEvents: slideVisible ? 'auto' : 'none',\n transitionProperty: 'opacity',\n }}\n >\n {({ isActive }) => (\n <Slide\n isActive={isActive}\n containerAspectRatio={swiperAspectRatio}\n image={image}\n containerHeight={swiperHeight}\n meta={meta}\n index={index}\n imageAspectRatio={imageAspectRatio}\n slideVisible={slideVisible}\n />\n )}\n </SwiperSlide>\n );\n })}\n </Swiper>\n\n {showControls && (\n <div\n className={cn(styles.arrow, {\n [styles.focused]: rightArrowFocused,\n })}\n onClick={handleNextClick}\n role='button'\n onKeyDown={handleArrowRightKeyDown}\n tabIndex={0}\n ref={rightArrowRef}\n aria-label='Следующее изображение'\n data-test-id={TestIds.NEXT_SLIDE_BUTTON}\n >\n <ChevronForwardHeavyMIcon />\n </div>\n )}\n </div>\n );\n};\n"],"names":["SwiperCore","EffectFade","A11y","Controller","useContext","GalleryContext","useHandleImageViewer","useFocus","useCallback","useMemo","cn","styles","isVideo","React","TestIds","ChevronBackHeavyMIcon","getImageAlt","Swiper","__assign","SwiperSlide","getImageKey","Slide","ChevronForwardHeavyMIcon"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBAA,2BAAU,CAAC,GAAG,CAAC,CAACC,qBAAU,EAAEC,eAAI,EAAEC,qBAAU,CAAC,CAAC;AAEjC,IAAA,WAAW,GAAO,YAAA;;AACrB,IAAA,IAAA,KAYFC,gBAAU,CAACC,sBAAc,CAAC,EAX1B,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,UAAU,gBAAA,EACV,UAAU,gBAAA,EACV,iBAAiB,uBAAA,EACjB,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,oBAAoB,GAAA,EAAA,CAAA,oBAAA,EACpB,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,SAAS,eAAA,EACT,SAAS,eAAA,EACT,eAAe,qBACW;AAExB,IAAA,IAAA,EAAgE,GAAAC,0BAAoB,EAAE,EAApF,kBAAkB,GAAA,EAAA,CAAA,kBAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,QAAA,EAAE,aAAa,GAAA,EAAA,CAAA,aAAA,EAAE,YAAY,kBAA2B;IAErF,IAAA,gBAAgB,GAAIC,gBAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA,CAAA,CAAtC;IAChB,IAAA,iBAAiB,GAAIA,gBAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA,CAAA,CAAvC;AAExB,IAAA,IAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,IAAM,YAAY,GAAG,eAAe,EAAE;IAEtC,IAAM,iBAAiB,GAAGC,iBAAW,CAAC,YAAA;;AAClC,QAAA,oBAAoB,aAApB,oBAAoB,KAAA,MAAA,GAAA,MAAA,GAApB,oBAAoB,CAAG,MAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,WAAW,MAAI,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAA,YAAY,CAAC;KAC9D,EAAE,CAAC,oBAAoB,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAEhD,IAAA,IAAM,eAAe,GAAG,YAAA;AACpB,QAAA,SAAS,EAAE;AACf,KAAC;AAED,IAAA,IAAM,eAAe,GAAG,YAAA;AACpB,QAAA,SAAS,EAAE;AACf,KAAC;IAED,IAAM,sBAAsB,GAAyB,UAAC,KAAK,EAAA;AACvD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;AACvB,YAAA,SAAS,EAAE;AACd;AACL,KAAC;IAED,IAAM,uBAAuB,GAAyB,UAAC,KAAK,EAAA;AACxD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;AACvB,YAAA,SAAS,EAAE;AACd;AACL,KAAC;IAED,IAAM,WAAW,GAAGC,aAAO,CACvB,YAAA;;AAAM,QAAA,QAAC;AACH,YAAA,aAAa,EAAE,CAAC;AAChB,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,SAAS,EAAEC,mBAAE,CAACC,uBAAM,CAAC,MAAM,GAAA,EAAA,GAAA,EAAA;AACvB,gBAAA,EAAA,CAACA,uBAAM,CAAC,MAAM,CAAG,GAAA,UAAU,IAAI,CAACC,aAAO,CAAC,YAAY,aAAZ,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZ,YAAY,CAAE,GAAG,CAAC;AAC1D,gBAAA,EAAA,CAACD,uBAAM,CAAC,eAAe,CAAA,GAAG,UAAU,IAAIC,aAAO,CAAC,YAAY,aAAZ,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZ,YAAY,CAAE,GAAG,CAAC;AAClE,gBAAA,EAAA,CAACD,uBAAM,CAAC,MAAM,CAAA,GAAG,QAAQ;AACzB,gBAAA,EAAA,CAACA,uBAAM,CAAC,WAAW,CAAA,GAAG,QAAQ,IAAIC,aAAO,CAAC,YAAY,aAAZ,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZ,YAAY,CAAE,GAAG,CAAC;AAC9D,gBAAA,EAAA,EAAA;AACF,YAAA,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;AAC/B,YAAA,IAAI,EAAE;AACF,gBAAA,SAAS,EAAE,KAAK;AACnB,aAAA;AACD,YAAA,YAAY,EAAA,YAAA;AACZ,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;AAChD,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,aAAa,EAAE,iBAAiB;AAChC,YAAA,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;SAC/B;AAnBK,KAmBJ,EACF;QACI,UAAU;AACV,QAAA,YAAY,KAAZ,IAAA,IAAA,YAAY,KAAZ,MAAA,GAAA,MAAA,GAAA,YAAY,CAAE,GAAG;QACjB,QAAQ;QACR,MAAM;QACN,YAAY;QACZ,SAAS;QACT,iBAAiB;AACpB,KAAA,CACJ;AAED,IAAA,IAAM,YAAY,GAAG,CAAC,UAAU,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM;AAEhE,IAAA,IAAM,WAAW,GAAG,CAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,MAAA,GAAA,MAAA,GAAA,MAAM,CAAE,KAAK,KAAI,CAAC;IACtC,IAAM,YAAY,GAAG,CAAA,MAAM,aAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,MAAM,MAAI,MAAM,KAAA,IAAA,IAAN,MAAM,KAAN,MAAA,GAAA,MAAA,GAAA,MAAM,CAAE,KAAK,CAAA,IAAI,CAAC;AAEzD,IAAA,IAAM,iBAAiB,GAAG,WAAW,GAAG,YAAY;IAEpD,QACIC,8CACI,SAAS,EAAEH,mBAAE,CAACC,uBAAM,CAAC,SAAS,GAAA,EAAA,GAAA,EAAA;AAC1B,YAAA,EAAA,CAACA,uBAAM,CAAC,MAAM,CAAA,GAAG,QAAQ;AACzB,YAAA,EAAA,CAACA,uBAAM,CAAC,WAAW,CAAA,GAAG,QAAQ,IAAIC,aAAO,CAAC,YAAY,aAAZ,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZ,YAAY,CAAE,GAAG,CAAC;AAC9D,YAAA,EAAA,EAAA,EAAA,aAAA,EACW,IAAI,EACjB,OAAO,EAAE,kBAAkB,EAAA;QAE1B,YAAY,KACTC,sBACI,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAEH,mBAAE,CAACC,uBAAM,CAAC,KAAK,GAAA,EAAA,GAAA,EAAA;AACtB,gBAAA,EAAA,CAACA,uBAAM,CAAC,OAAO,CAAA,GAAG,gBAAgB;oBACpC,EACF,OAAO,EAAE,eAAe,EACxB,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,sBAAsB,EACjC,QAAQ,EAAE,CAAC,EACX,GAAG,EAAE,YAAY,gBACN,iIAAwB,EAAA,cAAA,EACrBG,iBAAO,CAAC,iBAAiB,EAAA;YAEvCD,sBAAC,CAAA,aAAA,CAAAE,2CAAqB,EAAG,IAAA,CAAA,CACvB,CACT;QAEA,UAAU,IAAI,CAACH,aAAO,CAAC,YAAY,KAAZ,IAAA,IAAA,YAAY,KAAZ,MAAA,GAAA,MAAA,GAAA,YAAY,CAAE,GAAG,CAAC,KACtCC,8CACI,GAAG,EAAE,YAAY,KAAZ,IAAA,IAAA,YAAY,KAAZ,MAAA,GAAA,MAAA,GAAA,YAAY,CAAE,GAAG,EACtB,GAAG,EAAE,YAAY,GAAGG,iBAAW,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,EAAE,EACrE,SAAS,EAAEL,uBAAM,CAAC,eAAe,EAAA,CACnC,CACL;QAEDE,sBAAC,CAAA,aAAA,CAAAI,YAAM,EAAKC,cAAA,CAAA,EAAA,EAAA,WAAW,CAClB,EAAA,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,KAAK,EAAA;AACrB,YAAA,IAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;AAE9B,YAAA,IAAM,UAAU,GAAG,CAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,MAAA,GAAA,MAAA,GAAA,IAAI,CAAE,KAAK,KAAI,CAAC;AACnC,YAAA,IAAM,WAAW,GAAG,CAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,MAAA,GAAA,MAAA,GAAA,IAAI,CAAE,MAAM,KAAI,CAAC;AAErC,YAAA,IAAM,gBAAgB,GAAG,UAAU,GAAG,WAAW;AAEjD,YAAA,IAAM,YAAY,GAAG,KAAK,KAAK,iBAAiB;AAEhD,YAAA,QACIL,sBAAA,CAAA,aAAA,CAACM,iBAAW,EAAA,EACR,GAAG,EAAEC,iBAAW,CAAC,KAAK,EAAE,KAAK,CAAC,EAC9B,KAAK,EAAE;oBACH,aAAa,EAAE,YAAY,GAAG,MAAM,GAAG,MAAM;AAC7C,oBAAA,kBAAkB,EAAE,SAAS;AAChC,iBAAA,EAAA,EAEA,UAAC,EAAY,EAAA;AAAV,gBAAA,IAAA,QAAQ,GAAA,EAAA,CAAA,QAAA;AAAO,gBAAA,QACfP,sBAAC,CAAA,aAAA,CAAAQ,WAAK,EACF,EAAA,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,EAAE,iBAAiB,EACvC,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,YAAY,EAC7B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,YAAY,GAC5B;aACL,CACS;AAEtB,SAAC,CAAC,CACG;QAER,YAAY,KACTR,sBACI,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAEH,mBAAE,CAACC,uBAAM,CAAC,KAAK,GAAA,EAAA,GAAA,EAAA;AACtB,gBAAA,EAAA,CAACA,uBAAM,CAAC,OAAO,CAAA,GAAG,iBAAiB;oBACrC,EACF,OAAO,EAAE,eAAe,EACxB,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,uBAAuB,EAClC,QAAQ,EAAE,CAAC,EACX,GAAG,EAAE,aAAa,gBACP,2HAAuB,EAAA,cAAA,EACpBG,iBAAO,CAAC,iBAAiB,EAAA;AAEvC,YAAAD,sBAAA,CAAA,aAAA,CAACS,iDAAwB,EAAG,IAAA,CAAA,CAC1B,CACT,CACC;AAEd;;;;"}
@@ -2,16 +2,16 @@
2
2
  --color-static-neutral-translucent-500-inverted: rgba(228, 228, 251, 0.28);
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
- } .gallery__component_130sr {
5
+ } .gallery__component_38m55 {
6
6
  background-color: var(--color-static-neutral-translucent-500-inverted);
7
- } .gallery__component_130sr:hover {
7
+ } .gallery__component_38m55:hover {
8
8
  background-color: var(--color-static-neutral-translucent-500-inverted-hover);
9
- } .gallery__component_130sr:active {
9
+ } .gallery__component_38m55:active {
10
10
  background-color: var(--color-static-neutral-translucent-500-inverted-press);
11
- } .gallery__component_130sr {
11
+ } .gallery__component_38m55 {
12
12
 
13
13
  transition: transform 1s ease-in-out;
14
14
  will-change: transform;
15
- } .gallery__notVisible_130sr {
15
+ } .gallery__notVisible_38m55 {
16
16
  transform: translateY(250%);
17
17
  }
@@ -1,6 +1,6 @@
1
1
  import './index.css';
2
2
 
3
- var styles = {"component":"gallery__component_130sr","notVisible":"gallery__notVisible_130sr"};
3
+ var styles = {"component":"gallery__component_38m55","notVisible":"gallery__notVisible_38m55"};
4
4
 
5
5
  export { styles as default };
6
6
  //# sourceMappingURL=index.module.css.js.map
@@ -6,15 +6,15 @@
6
6
  } :root {
7
7
  --gap-2xl: 32px;
8
8
  --gap-32: var(--gap-2xl);
9
- } .gallery__buttons_1jdn6 {
9
+ } .gallery__buttons_imnex {
10
10
  display: flex;
11
11
  padding-left: var(--gap-32)
12
- } .gallery__buttons_1jdn6 path {
12
+ } .gallery__buttons_imnex path {
13
13
  color: var(--color-static-neutral-translucent-1300-inverted);
14
- } .gallery__iconButton_1jdn6 path {
14
+ } .gallery__iconButton_imnex path {
15
15
  color: var(--color-static-neutral-100);
16
- } .gallery__iconButton_1jdn6:hover path {
16
+ } .gallery__iconButton_imnex:hover path {
17
17
  color: var(--color-static-neutral-100-hover);
18
- } .gallery__iconButton_1jdn6:active path {
18
+ } .gallery__iconButton_imnex:active path {
19
19
  color: var(--color-static-neutral-100-press);
20
20
  }
@@ -1,6 +1,6 @@
1
1
  import './index.css';
2
2
 
3
- var styles = {"iconButton":"gallery__iconButton_1jdn6"};
3
+ var styles = {"iconButton":"gallery__iconButton_imnex"};
4
4
 
5
5
  export { styles as default };
6
6
  //# sourceMappingURL=index.module.css.js.map
@@ -3,7 +3,7 @@
3
3
  --gap-2xl: 32px;
4
4
  --gap-16: var(--gap-m);
5
5
  --gap-32: var(--gap-2xl);
6
- } .gallery__header_12b1c {
6
+ } .gallery__header_1jtnj {
7
7
  display: flex;
8
8
  justify-content: space-between;
9
9
  flex-shrink: 0;
@@ -1,6 +1,6 @@
1
1
  import './index.css';
2
2
 
3
- var styles = {"header":"gallery__header_12b1c"};
3
+ var styles = {"header":"gallery__header_1jtnj"};
4
4
 
5
5
  export { styles as default };
6
6
  //# sourceMappingURL=index.module.css.js.map
@@ -1,21 +1,21 @@
1
1
  :root {
2
2
  --gap-2xs: 4px;
3
3
  --gap-4: var(--gap-2xs);
4
- } .gallery__info_1t3gv {
4
+ } .gallery__info_ce2y0 {
5
5
  height: 100%;
6
6
  display: flex;
7
7
  flex-direction: column;
8
8
  justify-content: center;
9
9
  overflow: hidden;
10
- } .gallery__filenameHead_1t3gv {
10
+ } .gallery__filenameHead_ce2y0 {
11
11
  display: inline;
12
12
  text-overflow: ellipsis;
13
13
  overflow: hidden;
14
14
  white-space: nowrap;
15
- } .gallery__filenameContainer_1t3gv {
15
+ } .gallery__filenameContainer_ce2y0 {
16
16
  overflow: hidden;
17
17
  display: inline-flex;
18
- } .gallery__description_1t3gv {
18
+ } .gallery__description_ce2y0 {
19
19
  display: inline;
20
20
  text-overflow: ellipsis;
21
21
  overflow: hidden;
@@ -1,6 +1,6 @@
1
1
  import './index.css';
2
2
 
3
- var styles = {"info":"gallery__info_1t3gv","filenameHead":"gallery__filenameHead_1t3gv","filenameContainer":"gallery__filenameContainer_1t3gv","description":"gallery__description_1t3gv"};
3
+ var styles = {"info":"gallery__info_ce2y0","filenameHead":"gallery__filenameHead_ce2y0","filenameContainer":"gallery__filenameContainer_ce2y0","description":"gallery__description_ce2y0"};
4
4
 
5
5
  export { styles as default };
6
6
  //# sourceMappingURL=index.module.css.js.map
@@ -18,39 +18,72 @@ var HeaderMobile = function () {
18
18
  var canDownload = (_b = currentImage === null || currentImage === void 0 ? void 0 : currentImage.canDownload) !== null && _b !== void 0 ? _b : true;
19
19
  var showDownloadButton = !(meta === null || meta === void 0 ? void 0 : meta.broken) && canDownload;
20
20
  var handleShareClick = function () { return __awaiter(void 0, void 0, void 0, function () {
21
- var title, image, blob, filesArray, shareData;
22
- var _a;
23
- return __generator(this, function (_b) {
24
- switch (_b.label) {
21
+ var title, url, response, blob, file, shareData;
22
+ var _b, _c;
23
+ return __generator(this, function (_d) {
24
+ switch (_d.label) {
25
25
  case 0:
26
- if (!currentImage)
26
+ if (!currentImage || !navigator.share) {
27
27
  return [2 /*return*/];
28
- title = (_a = currentImage.name) !== null && _a !== void 0 ? _a : new Date().toISOString().split('T')[0];
29
- return [4 /*yield*/, fetch(currentImage.src)];
28
+ }
29
+ title = (_b = currentImage.name) !== null && _b !== void 0 ? _b : new Date().toISOString().split('T')[0];
30
+ url = currentImage.src;
31
+ _d.label = 1;
30
32
  case 1:
31
- image = _b.sent();
32
- return [4 /*yield*/, image.blob()];
33
+ _d.trys.push([1, 10, , 12]);
34
+ if (!isVideo(url)) return [3 /*break*/, 3];
35
+ // Если видео — всегда делим ссылку
36
+ return [4 /*yield*/, navigator.share({
37
+ title: title,
38
+ url: url,
39
+ text: 'Видео',
40
+ })];
33
41
  case 2:
34
- blob = _b.sent();
35
- filesArray = [
36
- new File([blob], title, {
37
- type: blob.type,
38
- lastModified: new Date().getTime(),
39
- }),
40
- ];
42
+ // Если видео — всегда делим ссылку
43
+ _d.sent();
44
+ return [2 /*return*/];
45
+ case 3: return [4 /*yield*/, fetch(url, { mode: 'cors' })];
46
+ case 4:
47
+ response = _d.sent();
48
+ return [4 /*yield*/, response.blob()];
49
+ case 5:
50
+ blob = _d.sent();
51
+ file = new File([blob], "".concat(title, ".png"), {
52
+ type: blob.type,
53
+ lastModified: Date.now(),
54
+ });
41
55
  shareData = {
42
- files: filesArray,
56
+ files: [file],
57
+ title: title,
58
+ text: 'Картинка',
43
59
  };
44
- if (!(navigator.canShare(shareData) && !isVideo(currentImage.src))) return [3 /*break*/, 4];
60
+ if (!(((_c = navigator.canShare) === null || _c === void 0 ? void 0 : _c.call(navigator, shareData)) && response.ok)) return [3 /*break*/, 7];
45
61
  return [4 /*yield*/, navigator.share(shareData)];
46
- case 3:
47
- _b.sent();
48
- return [3 /*break*/, 6];
49
- case 4: return [4 /*yield*/, navigator.share({ url: currentImage.src, title: title })];
50
- case 5:
51
- _b.sent();
52
- _b.label = 6;
53
- case 6: return [2 /*return*/];
62
+ case 6:
63
+ _d.sent();
64
+ return [3 /*break*/, 9];
65
+ case 7:
66
+ // Fallback: делимся только ссылкой
67
+ return [4 /*yield*/, navigator.share({
68
+ title: title,
69
+ text: 'Картинка',
70
+ url: url,
71
+ })];
72
+ case 8:
73
+ // Fallback: делимся только ссылкой
74
+ _d.sent();
75
+ _d.label = 9;
76
+ case 9: return [3 /*break*/, 12];
77
+ case 10:
78
+ _d.sent();
79
+ return [4 /*yield*/, navigator.share({
80
+ title: title,
81
+ url: url,
82
+ })];
83
+ case 11:
84
+ _d.sent();
85
+ return [3 /*break*/, 12];
86
+ case 12: return [2 /*return*/];
54
87
  }
55
88
  });
56
89
  }); };