@alfalab/core-components-gallery 7.0.6 → 7.1.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 (222) hide show
  1. package/Component.d.ts +1 -1
  2. package/Component.js.map +1 -1
  3. package/components/bottom-button/Component.d.ts +1 -1
  4. package/components/bottom-button/Component.js.map +1 -1
  5. package/components/bottom-button/index.css +5 -5
  6. package/components/bottom-button/index.module.css.js +1 -1
  7. package/components/buttons/index.css +5 -5
  8. package/components/buttons/index.d.ts +1 -1
  9. package/components/buttons/index.js +1 -1
  10. package/components/buttons/index.js.map +1 -1
  11. package/components/buttons/index.module.css.js +1 -1
  12. package/components/header/Component.js.map +1 -1
  13. package/components/header/index.css +1 -1
  14. package/components/header/index.module.css.js +1 -1
  15. package/components/header-info-block/Component.d.ts +1 -1
  16. package/components/header-info-block/index.css +4 -4
  17. package/components/header-info-block/index.module.css.js +1 -1
  18. package/components/header-mobile/Component.js +5 -3
  19. package/components/header-mobile/Component.js.map +1 -1
  20. package/components/header-mobile/index.css +6 -6
  21. package/components/header-mobile/index.module.css.js +1 -1
  22. package/components/image-preview/Component.d.ts +1 -1
  23. package/components/image-preview/Component.js.map +1 -1
  24. package/components/image-preview/index.css +17 -17
  25. package/components/image-preview/index.module.css.js +1 -1
  26. package/components/image-viewer/component.js.map +1 -1
  27. package/components/image-viewer/hooks.d.ts +1 -1
  28. package/components/image-viewer/hooks.js.map +1 -1
  29. package/components/image-viewer/index.css +25 -25
  30. package/components/image-viewer/index.module.css.js +1 -1
  31. package/components/image-viewer/slide.d.ts +1 -1
  32. package/components/image-viewer/slide.js.map +1 -1
  33. package/components/image-viewer/video/index.css +7 -7
  34. package/components/image-viewer/video/index.d.ts +1 -1
  35. package/components/image-viewer/video/index.js +109 -25
  36. package/components/image-viewer/video/index.js.map +1 -1
  37. package/components/image-viewer/video/index.module.css.js +1 -1
  38. package/components/info-bar/Component.js.map +1 -1
  39. package/components/info-bar/index.css +3 -3
  40. package/components/info-bar/index.module.css.js +1 -1
  41. package/components/navigation-bar/Component.js.map +1 -1
  42. package/components/navigation-bar/index.css +8 -8
  43. package/components/navigation-bar/index.module.css.js +1 -1
  44. package/components/subtitles/index.css +3 -3
  45. package/components/subtitles/index.js.map +1 -1
  46. package/components/subtitles/index.module.css.js +1 -1
  47. package/context.d.ts +1 -2
  48. package/cssm/Component.d.ts +1 -1
  49. package/cssm/Component.js.map +1 -1
  50. package/cssm/components/bottom-button/Component.d.ts +1 -1
  51. package/cssm/components/bottom-button/Component.js.map +1 -1
  52. package/cssm/components/buttons/index.d.ts +1 -1
  53. package/cssm/components/buttons/index.js +1 -1
  54. package/cssm/components/buttons/index.js.map +1 -1
  55. package/cssm/components/header/Component.js.map +1 -1
  56. package/cssm/components/header-info-block/Component.d.ts +1 -1
  57. package/cssm/components/header-mobile/Component.js +5 -3
  58. package/cssm/components/header-mobile/Component.js.map +1 -1
  59. package/cssm/components/image-preview/Component.d.ts +1 -1
  60. package/cssm/components/image-preview/Component.js.map +1 -1
  61. package/cssm/components/image-viewer/component.js.map +1 -1
  62. package/cssm/components/image-viewer/hooks.d.ts +1 -1
  63. package/cssm/components/image-viewer/hooks.js.map +1 -1
  64. package/cssm/components/image-viewer/slide.d.ts +1 -1
  65. package/cssm/components/image-viewer/slide.js.map +1 -1
  66. package/cssm/components/image-viewer/video/index.d.ts +1 -1
  67. package/cssm/components/image-viewer/video/index.js +109 -25
  68. package/cssm/components/image-viewer/video/index.js.map +1 -1
  69. package/cssm/components/info-bar/Component.js.map +1 -1
  70. package/cssm/components/navigation-bar/Component.js.map +1 -1
  71. package/cssm/components/subtitles/index.js.map +1 -1
  72. package/cssm/context.d.ts +1 -2
  73. package/cssm/hooks/use-custom-subtitles.js.map +1 -1
  74. package/cssm/types.d.ts +4 -3
  75. package/cssm/utils/split-filename.js.map +1 -1
  76. package/cssm/utils/utils.js.map +1 -1
  77. package/esm/Component.d.ts +1 -1
  78. package/esm/Component.js.map +1 -1
  79. package/esm/components/bottom-button/Component.d.ts +1 -1
  80. package/esm/components/bottom-button/Component.js.map +1 -1
  81. package/esm/components/bottom-button/index.css +5 -5
  82. package/esm/components/bottom-button/index.module.css.js +1 -1
  83. package/esm/components/buttons/index.css +5 -5
  84. package/esm/components/buttons/index.d.ts +1 -1
  85. package/esm/components/buttons/index.js +1 -1
  86. package/esm/components/buttons/index.js.map +1 -1
  87. package/esm/components/buttons/index.module.css.js +1 -1
  88. package/esm/components/header/Component.js.map +1 -1
  89. package/esm/components/header/index.css +1 -1
  90. package/esm/components/header/index.module.css.js +1 -1
  91. package/esm/components/header-info-block/Component.d.ts +1 -1
  92. package/esm/components/header-info-block/index.css +4 -4
  93. package/esm/components/header-info-block/index.module.css.js +1 -1
  94. package/esm/components/header-mobile/Component.js +5 -3
  95. package/esm/components/header-mobile/Component.js.map +1 -1
  96. package/esm/components/header-mobile/index.css +6 -6
  97. package/esm/components/header-mobile/index.module.css.js +1 -1
  98. package/esm/components/image-preview/Component.d.ts +1 -1
  99. package/esm/components/image-preview/Component.js.map +1 -1
  100. package/esm/components/image-preview/index.css +17 -17
  101. package/esm/components/image-preview/index.module.css.js +1 -1
  102. package/esm/components/image-viewer/component.js.map +1 -1
  103. package/esm/components/image-viewer/hooks.d.ts +1 -1
  104. package/esm/components/image-viewer/hooks.js.map +1 -1
  105. package/esm/components/image-viewer/index.css +25 -25
  106. package/esm/components/image-viewer/index.module.css.js +1 -1
  107. package/esm/components/image-viewer/slide.d.ts +1 -1
  108. package/esm/components/image-viewer/slide.js.map +1 -1
  109. package/esm/components/image-viewer/video/index.css +7 -7
  110. package/esm/components/image-viewer/video/index.d.ts +1 -1
  111. package/esm/components/image-viewer/video/index.js +92 -25
  112. package/esm/components/image-viewer/video/index.js.map +1 -1
  113. package/esm/components/image-viewer/video/index.module.css.js +1 -1
  114. package/esm/components/info-bar/Component.js.map +1 -1
  115. package/esm/components/info-bar/index.css +3 -3
  116. package/esm/components/info-bar/index.module.css.js +1 -1
  117. package/esm/components/navigation-bar/Component.js.map +1 -1
  118. package/esm/components/navigation-bar/index.css +8 -8
  119. package/esm/components/navigation-bar/index.module.css.js +1 -1
  120. package/esm/components/subtitles/index.css +3 -3
  121. package/esm/components/subtitles/index.js.map +1 -1
  122. package/esm/components/subtitles/index.module.css.js +1 -1
  123. package/esm/context.d.ts +1 -2
  124. package/esm/hooks/use-custom-subtitles.js.map +1 -1
  125. package/esm/index.css +9 -9
  126. package/esm/index.module.css.js +1 -1
  127. package/esm/types.d.ts +4 -3
  128. package/esm/utils/split-filename.js.map +1 -1
  129. package/esm/utils/utils.js.map +1 -1
  130. package/hooks/use-custom-subtitles.js.map +1 -1
  131. package/index.css +9 -9
  132. package/index.module.css.js +1 -1
  133. package/modern/Component.d.ts +1 -1
  134. package/modern/Component.js.map +1 -1
  135. package/modern/components/bottom-button/Component.d.ts +1 -1
  136. package/modern/components/bottom-button/Component.js.map +1 -1
  137. package/modern/components/bottom-button/index.css +5 -5
  138. package/modern/components/bottom-button/index.module.css.js +1 -1
  139. package/modern/components/buttons/index.css +5 -5
  140. package/modern/components/buttons/index.d.ts +1 -1
  141. package/modern/components/buttons/index.js +1 -1
  142. package/modern/components/buttons/index.js.map +1 -1
  143. package/modern/components/buttons/index.module.css.js +1 -1
  144. package/modern/components/header/Component.js.map +1 -1
  145. package/modern/components/header/index.css +1 -1
  146. package/modern/components/header/index.module.css.js +1 -1
  147. package/modern/components/header-info-block/Component.d.ts +1 -1
  148. package/modern/components/header-info-block/index.css +4 -4
  149. package/modern/components/header-info-block/index.module.css.js +1 -1
  150. package/modern/components/header-mobile/Component.js +3 -1
  151. package/modern/components/header-mobile/Component.js.map +1 -1
  152. package/modern/components/header-mobile/index.css +6 -6
  153. package/modern/components/header-mobile/index.module.css.js +1 -1
  154. package/modern/components/image-preview/Component.d.ts +1 -1
  155. package/modern/components/image-preview/Component.js.map +1 -1
  156. package/modern/components/image-preview/index.css +17 -17
  157. package/modern/components/image-preview/index.module.css.js +1 -1
  158. package/modern/components/image-viewer/component.js.map +1 -1
  159. package/modern/components/image-viewer/hooks.d.ts +1 -1
  160. package/modern/components/image-viewer/hooks.js.map +1 -1
  161. package/modern/components/image-viewer/index.css +25 -25
  162. package/modern/components/image-viewer/index.module.css.js +1 -1
  163. package/modern/components/image-viewer/slide.d.ts +1 -1
  164. package/modern/components/image-viewer/slide.js.map +1 -1
  165. package/modern/components/image-viewer/video/index.css +7 -7
  166. package/modern/components/image-viewer/video/index.d.ts +1 -1
  167. package/modern/components/image-viewer/video/index.js +60 -23
  168. package/modern/components/image-viewer/video/index.js.map +1 -1
  169. package/modern/components/image-viewer/video/index.module.css.js +1 -1
  170. package/modern/components/info-bar/Component.js.map +1 -1
  171. package/modern/components/info-bar/index.css +3 -3
  172. package/modern/components/info-bar/index.module.css.js +1 -1
  173. package/modern/components/navigation-bar/Component.js.map +1 -1
  174. package/modern/components/navigation-bar/index.css +8 -8
  175. package/modern/components/navigation-bar/index.module.css.js +1 -1
  176. package/modern/components/subtitles/index.css +3 -3
  177. package/modern/components/subtitles/index.js.map +1 -1
  178. package/modern/components/subtitles/index.module.css.js +1 -1
  179. package/modern/context.d.ts +1 -2
  180. package/modern/hooks/use-custom-subtitles.js.map +1 -1
  181. package/modern/index.css +9 -9
  182. package/modern/index.module.css.js +1 -1
  183. package/modern/types.d.ts +4 -3
  184. package/modern/utils/split-filename.js.map +1 -1
  185. package/modern/utils/utils.js.map +1 -1
  186. package/moderncssm/Component.d.ts +1 -1
  187. package/moderncssm/Component.js.map +1 -1
  188. package/moderncssm/components/bottom-button/Component.d.ts +1 -1
  189. package/moderncssm/components/bottom-button/Component.js.map +1 -1
  190. package/moderncssm/components/buttons/index.d.ts +1 -1
  191. package/moderncssm/components/buttons/index.js +1 -1
  192. package/moderncssm/components/buttons/index.js.map +1 -1
  193. package/moderncssm/components/header/Component.js.map +1 -1
  194. package/moderncssm/components/header-info-block/Component.d.ts +1 -1
  195. package/moderncssm/components/header-mobile/Component.js +3 -1
  196. package/moderncssm/components/header-mobile/Component.js.map +1 -1
  197. package/moderncssm/components/image-preview/Component.d.ts +1 -1
  198. package/moderncssm/components/image-preview/Component.js.map +1 -1
  199. package/moderncssm/components/image-viewer/component.js.map +1 -1
  200. package/moderncssm/components/image-viewer/hooks.d.ts +1 -1
  201. package/moderncssm/components/image-viewer/hooks.js.map +1 -1
  202. package/moderncssm/components/image-viewer/slide.d.ts +1 -1
  203. package/moderncssm/components/image-viewer/slide.js.map +1 -1
  204. package/moderncssm/components/image-viewer/video/index.d.ts +1 -1
  205. package/moderncssm/components/image-viewer/video/index.js +60 -23
  206. package/moderncssm/components/image-viewer/video/index.js.map +1 -1
  207. package/moderncssm/components/info-bar/Component.js.map +1 -1
  208. package/moderncssm/components/navigation-bar/Component.js.map +1 -1
  209. package/moderncssm/components/subtitles/index.js.map +1 -1
  210. package/moderncssm/context.d.ts +1 -2
  211. package/moderncssm/hooks/use-custom-subtitles.js.map +1 -1
  212. package/moderncssm/types.d.ts +4 -3
  213. package/moderncssm/utils/split-filename.js.map +1 -1
  214. package/moderncssm/utils/utils.js.map +1 -1
  215. package/package.json +11 -11
  216. package/src/components/buttons/index.tsx +1 -1
  217. package/src/components/header-mobile/Component.tsx +3 -1
  218. package/src/components/image-viewer/video/index.tsx +80 -24
  219. package/src/types.ts +1 -0
  220. package/types.d.ts +4 -3
  221. package/utils/split-filename.js.map +1 -1
  222. package/utils/utils.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/image-viewer/video/index.tsx"],"sourcesContent":["import React, {\n type MouseEvent,\n type ReactEventHandler,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from 'react';\nimport cn from 'classnames';\nimport Hls from 'hls.js';\n\nimport { Circle } from '@alfalab/core-components-icon-view/circle';\nimport PlayCompactMIcon from '@alfalab/icons-glyph/PlayCompactMIcon';\n\nimport { GalleryContext } from '../../../context';\nimport { BottomButton } from '../../bottom-button';\nimport { Subtitles } from '../../subtitles';\n\nimport styles from './index.module.css';\n\ntype Props = {\n url: string;\n index: number;\n isActive: boolean;\n className?: string;\n};\n\nexport const Video = ({ url, index, className, isActive }: Props) => {\n const playerRef = useRef<HTMLVideoElement>(null);\n const timer = useRef<ReturnType<typeof setTimeout>>();\n\n const {\n setImageMeta,\n mutedVideo,\n view,\n playingVideo,\n setPlayingVideo,\n setHideNavigation,\n getCurrentImage,\n } = useContext(GalleryContext);\n\n const isMobile = view === 'mobile';\n const isDesktop = view === 'desktop';\n\n const image = getCurrentImage();\n\n useEffect(() => {\n setImageMeta({ player: playerRef }, index);\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [index]);\n\n useEffect(() => {\n const hls = new Hls();\n\n if (Hls.isSupported()) {\n hls.on(Hls.Events.ERROR, (_, data) => {\n if (data.fatal) {\n switch (data.type) {\n case Hls.ErrorTypes.MEDIA_ERROR:\n hls.recoverMediaError();\n break;\n case Hls.ErrorTypes.NETWORK_ERROR:\n setImageMeta({ player: { current: null }, broken: true }, index);\n break;\n default:\n hls.destroy();\n break;\n }\n }\n });\n\n hls.loadSource(url);\n if (playerRef.current) {\n hls.attachMedia(playerRef.current);\n hls.subtitleDisplay = false;\n }\n }\n\n return () => {\n if (hls) {\n hls.destroy();\n }\n if (timer.current) {\n clearTimeout(timer.current);\n }\n };\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [url, index]);\n\n useEffect(() => {\n if (playerRef.current && isActive) {\n if (playingVideo) {\n playerRef.current.play();\n } else {\n playerRef.current.pause();\n }\n }\n if (playerRef.current && !isActive) {\n playerRef.current.pause();\n playerRef.current.currentTime = 0;\n }\n }, [isActive, playingVideo]);\n\n useEffect(() => {\n const handleSpacePress = (e: KeyboardEvent) => {\n if ((e.key === ' ' || e.code === 'Space') && isActive) {\n if (playingVideo) {\n setPlayingVideo(false);\n } else {\n setPlayingVideo(true);\n }\n }\n };\n\n document.addEventListener('keyup', handleSpacePress);\n\n return () => {\n document.removeEventListener('keyup', handleSpacePress);\n };\n }, [isActive, playingVideo, setPlayingVideo]);\n\n const handleWrapperClick = (e: MouseEvent) => {\n e.stopPropagation();\n\n if (isMobile) {\n setHideNavigation(false);\n\n if (playingVideo) {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n timer.current = setTimeout(() => {\n setHideNavigation(true);\n }, 3000);\n }\n\n return;\n }\n\n setPlayingVideo(!playingVideo);\n };\n\n const handleBottomButtonClick = useCallback(\n (e: MouseEvent) => {\n e.stopPropagation();\n if (image?.bottomButton) {\n image.bottomButton.onClick(e);\n }\n },\n [image?.bottomButton],\n );\n\n const onPlay: ReactEventHandler<HTMLVideoElement> = () => {\n image?.onPlay?.();\n\n if (timer.current) {\n clearTimeout(timer.current);\n }\n\n timer.current = setTimeout(() => {\n setHideNavigation(true);\n }, 3000);\n };\n\n const onPause: ReactEventHandler<HTMLVideoElement> = () => {\n image?.onPause?.();\n\n if (timer.current) {\n clearTimeout(timer.current);\n timer.current = undefined;\n }\n\n setHideNavigation(false);\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n <div onClick={handleWrapperClick} className={styles.videoWrapper}>\n <video\n onPlay={onPlay}\n onPause={onPause}\n ref={playerRef}\n playsInline={true}\n muted={mutedVideo}\n loop={true}\n src={Hls.isSupported() ? undefined : url}\n className={cn(styles.video, { [styles.mobile]: view === 'mobile' }, className)}\n >\n <track kind='captions' />\n </video>\n {isDesktop && !playingVideo && (\n <div className={styles.videoButton}>\n <Circle size={64} shapeClassName={styles.iconShape}>\n <PlayCompactMIcon className={styles.icon} />\n </Circle>\n </div>\n )}\n {isDesktop && <Subtitles />}\n {isDesktop && image?.bottomButton && (\n <BottomButton\n bottomButton={image.bottomButton}\n onClick={handleBottomButtonClick}\n className={styles.bottomButton}\n />\n )}\n </div>\n );\n};\n"],"names":["index","useRef","useContext","GalleryContext","useEffect","Hls","useCallback","React","styles","cn","Circle","PlayCompactMIcon","Subtitles","BottomButton"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/image-viewer/video/index.tsx"],"sourcesContent":["import React, {\n type MouseEvent,\n type ReactEventHandler,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport cn from 'classnames';\nimport type Hls from 'hls.js';\n\nimport { Circle } from '@alfalab/core-components-icon-view/circle';\nimport PlayCompactMIcon from '@alfalab/icons-glyph/PlayCompactMIcon';\n\nimport { GalleryContext } from '../../../context';\nimport { BottomButton } from '../../bottom-button';\nimport { Subtitles } from '../../subtitles';\n\nimport styles from './index.module.css';\n\ntype Props = {\n url: string;\n index: number;\n isActive: boolean;\n className?: string;\n};\n\nexport const Video = ({ url, index, className, isActive }: Props) => {\n const playerRef = useRef<HTMLVideoElement>(null);\n const timer = useRef<ReturnType<typeof setTimeout>>();\n const [hlsSupported, setHlsSupported] = useState<boolean>(true);\n\n const {\n setImageMeta,\n mutedVideo,\n view,\n playingVideo,\n setPlayingVideo,\n setHideNavigation,\n getCurrentImage,\n } = useContext(GalleryContext);\n\n const isMobile = view === 'mobile';\n const isDesktop = view === 'desktop';\n\n const image = getCurrentImage();\n\n useEffect(() => {\n setImageMeta({ player: playerRef }, index);\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [index]);\n\n const loadHlsLibrary = useCallback(\n async (attempt = 1, maxAttempts = 3): Promise<typeof Hls | null> => {\n try {\n const { default: HlsLib } = await import(\n /* webpackChunkName: \"hls-js-gallery\" */ 'hls.js'\n );\n\n return HlsLib;\n } catch {\n if (attempt < maxAttempts) {\n /* Экспоненциальная задержка ретрая: 300ms, 600ms, 1200ms */\n await new Promise<void>((resolve) => {\n setTimeout(\n () => {\n resolve();\n },\n 300 * 2 ** (attempt - 1),\n );\n });\n\n return loadHlsLibrary(attempt + 1, maxAttempts);\n }\n\n setHlsSupported(false);\n setImageMeta({ player: { current: null }, broken: true }, index);\n\n return null;\n }\n },\n [setImageMeta, index],\n );\n\n useEffect(() => {\n let hls: Hls | null = null;\n\n const initHls = async () => {\n try {\n const HlsLib = await loadHlsLibrary();\n\n if (!HlsLib || !playerRef.current) {\n return;\n }\n\n if (!HlsLib.isSupported()) {\n setHlsSupported(false);\n\n return;\n }\n\n hls = new HlsLib();\n\n hls.on(HlsLib.Events.ERROR, (_, data) => {\n if (data.fatal && hls) {\n switch (data.type) {\n case HlsLib.ErrorTypes.MEDIA_ERROR:\n hls.recoverMediaError();\n break;\n case HlsLib.ErrorTypes.NETWORK_ERROR:\n setImageMeta({ player: { current: null }, broken: true }, index);\n break;\n default:\n hls.destroy();\n break;\n }\n }\n });\n\n hls.loadSource(url);\n\n if (playerRef.current) {\n hls.attachMedia(playerRef.current);\n hls.subtitleDisplay = false;\n }\n } catch {\n setHlsSupported(false);\n setImageMeta({ player: { current: null }, broken: true }, index);\n }\n };\n\n initHls();\n\n return () => {\n if (hls) {\n hls.destroy();\n }\n if (timer.current) {\n clearTimeout(timer.current);\n }\n };\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [url, index]);\n\n useEffect(() => {\n if (playerRef.current && isActive) {\n if (playingVideo) {\n playerRef.current.play();\n } else {\n playerRef.current.pause();\n }\n }\n if (playerRef.current && !isActive) {\n playerRef.current.pause();\n playerRef.current.currentTime = 0;\n }\n }, [isActive, playingVideo]);\n\n useEffect(() => {\n const handleSpacePress = (e: KeyboardEvent) => {\n if ((e.key === ' ' || e.code === 'Space') && isActive) {\n if (playingVideo) {\n setPlayingVideo(false);\n } else {\n setPlayingVideo(true);\n }\n }\n };\n\n document.addEventListener('keyup', handleSpacePress);\n\n return () => {\n document.removeEventListener('keyup', handleSpacePress);\n };\n }, [isActive, playingVideo, setPlayingVideo]);\n\n const handleWrapperClick = (e: MouseEvent) => {\n e.stopPropagation();\n\n if (isMobile) {\n setHideNavigation(false);\n\n if (playingVideo) {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n timer.current = setTimeout(() => {\n setHideNavigation(true);\n }, 3000);\n }\n\n return;\n }\n\n setPlayingVideo(!playingVideo);\n };\n\n const handleBottomButtonClick = useCallback(\n (e: MouseEvent) => {\n e.stopPropagation();\n if (image?.bottomButton) {\n image.bottomButton.onClick(e);\n }\n },\n [image?.bottomButton],\n );\n\n const onPlay: ReactEventHandler<HTMLVideoElement> = () => {\n image?.onPlay?.();\n\n if (timer.current) {\n clearTimeout(timer.current);\n }\n\n timer.current = setTimeout(() => {\n setHideNavigation(true);\n }, 3000);\n };\n\n const onPause: ReactEventHandler<HTMLVideoElement> = () => {\n image?.onPause?.();\n\n if (timer.current) {\n clearTimeout(timer.current);\n timer.current = undefined;\n }\n\n setHideNavigation(false);\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n <div onClick={handleWrapperClick} className={styles.videoWrapper}>\n <video\n onPlay={onPlay}\n onPause={onPause}\n ref={playerRef}\n playsInline={true}\n muted={mutedVideo}\n loop={true}\n src={hlsSupported ? undefined : url}\n className={cn(styles.video, { [styles.mobile]: view === 'mobile' }, className)}\n >\n <track kind='captions' />\n </video>\n {isDesktop && !playingVideo && (\n <div className={styles.videoButton}>\n <Circle size={64} shapeClassName={styles.iconShape}>\n <PlayCompactMIcon className={styles.icon} />\n </Circle>\n </div>\n )}\n {isDesktop && <Subtitles />}\n {isDesktop && image?.bottomButton && (\n <BottomButton\n bottomButton={image.bottomButton}\n onClick={handleBottomButtonClick}\n className={styles.bottomButton}\n />\n )}\n </div>\n );\n};\n"],"names":["index","useRef","useState","useContext","GalleryContext","useEffect","useCallback","__awaiter","__spreadArray","React","styles","cn","Circle","PlayCompactMIcon","Subtitles","BottomButton"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"videoWrapper":"gallery__videoWrapper_izbf6","video":"gallery__video_izbf6","mobile":"gallery__mobile_izbf6","videoButton":"gallery__videoButton_izbf6","icon":"gallery__icon_izbf6","iconShape":"gallery__iconShape_izbf6","bottomButton":"gallery__bottomButton_izbf6"};
5
+ var styles = {"videoWrapper":"gallery__videoWrapper_la50x","video":"gallery__video_la50x","mobile":"gallery__mobile_la50x","videoButton":"gallery__videoButton_la50x","icon":"gallery__icon_la50x","iconShape":"gallery__iconShape_la50x","bottomButton":"gallery__bottomButton_la50x"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../src/components/info-bar/Component.tsx"],"sourcesContent":["import React, { useCallback, useContext } from 'react';\nimport cn from 'classnames';\n\nimport { TypographyText } from '@alfalab/core-components-typography';\n\nimport { GalleryContext } from '../../context';\nimport { isVideo } from '../../utils';\nimport * as Buttons from '../buttons';\n\nimport styles from './index.module.css';\n\nexport const InfoBar = () => {\n const { getCurrentImage, mutedVideo, setMutedVideo, playingVideo, setPlayingVideo } =\n useContext(GalleryContext);\n\n const image = getCurrentImage();\n\n const handleMuteVideo = useCallback(() => {\n if (image) {\n if (mutedVideo && image.onUnmute) {\n image.onUnmute();\n } else if (image.onMute) {\n image.onMute();\n }\n }\n setMutedVideo(!mutedVideo);\n }, [image, mutedVideo, setMutedVideo]);\n\n const handlePlayVideo = useCallback(() => {\n setPlayingVideo(!playingVideo);\n }, [playingVideo, setPlayingVideo]);\n\n return isVideo(image?.src) ? (\n <section className={cn(styles.infoWrapper, styles.video)}>\n {playingVideo ? (\n <Buttons.Pause onClick={handlePlayVideo} />\n ) : (\n <Buttons.Play onClick={handlePlayVideo} />\n )}\n <TypographyText\n className={styles.description}\n tag='div'\n view='component-primary'\n color='static-primary-light'\n >\n {image?.name}\n </TypographyText>\n {mutedVideo ? (\n <Buttons.UnmuteVideo onClick={handleMuteVideo} />\n ) : (\n <Buttons.MuteVideo onClick={handleMuteVideo} />\n )}\n </section>\n ) : (\n <section className={styles.infoWrapper}>\n <TypographyText\n className={styles.description}\n tag='div'\n view='component-primary'\n color='static-primary-light'\n >\n {image?.name}\n </TypographyText>\n </section>\n );\n};\n"],"names":["useContext","GalleryContext","useCallback","isVideo","React","cn","styles","Buttons.Pause","Buttons.Play","TypographyText","Buttons.UnmuteVideo","Buttons.MuteVideo"],"mappings":";;;;;;;;;;;;;;;;;AAWa,IAAA,OAAO,GAAG,YAAA;IACb,IAAA,EAAA,GACFA,gBAAU,CAACC,sBAAc,CAAC,EADtB,eAAe,qBAAA,EAAE,UAAU,gBAAA,EAAE,aAAa,mBAAA,EAAE,YAAY,kBAAA,EAAE,eAAe,qBACnD;AAE9B,IAAA,IAAM,KAAK,GAAG,eAAe,EAAE;IAE/B,IAAM,eAAe,GAAGC,iBAAW,CAAC,YAAA;AAChC,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAC9B,KAAK,CAAC,QAAQ,EAAE;AACnB;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE;gBACrB,KAAK,CAAC,MAAM,EAAE;AACjB;AACJ;AACD,QAAA,aAAa,CAAC,CAAC,UAAU,CAAC;KAC7B,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAEtC,IAAM,eAAe,GAAGA,iBAAW,CAAC,YAAA;AAChC,QAAA,eAAe,CAAC,CAAC,YAAY,CAAC;AAClC,KAAC,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAEnC,OAAOC,aAAO,CAAC,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,MAAA,GAAA,MAAA,GAAA,KAAK,CAAE,GAAG,CAAC,IACtBC,sBAAS,CAAA,aAAA,CAAA,SAAA,EAAA,EAAA,SAAS,EAAEC,mBAAE,CAACC,YAAM,CAAC,WAAW,EAAEA,YAAM,CAAC,KAAK,CAAC,EAAA;QACnD,YAAY,IACTF,sBAAA,CAAA,aAAA,CAACG,WAAa,EAAA,EAAC,OAAO,EAAE,eAAe,EAAA,CAAI,KAE3CH,sBAAA,CAAA,aAAA,CAACI,UAAY,EAAA,EAAC,OAAO,EAAE,eAAe,EAAA,CAAI,CAC7C;QACDJ,sBAAC,CAAA,aAAA,CAAAK,uCAAc,EACX,EAAA,SAAS,EAAEH,YAAM,CAAC,WAAW,EAC7B,GAAG,EAAC,KAAK,EACT,IAAI,EAAC,mBAAmB,EACxB,KAAK,EAAC,sBAAsB,EAE3B,EAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,MAAA,GAAA,MAAA,GAAA,KAAK,CAAE,IAAI,CACC;AAChB,QAAA,UAAU,IACPF,sBAAA,CAAA,aAAA,CAACM,iBAAmB,EAAC,EAAA,OAAO,EAAE,eAAe,EAAA,CAAI,KAEjDN,sBAAA,CAAA,aAAA,CAACO,eAAiB,EAAC,EAAA,OAAO,EAAE,eAAe,EAAA,CAAI,CAClD,CACK,KAEVP,sBAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EAAS,SAAS,EAAEE,YAAM,CAAC,WAAW,EAAA;AAClC,QAAAF,sBAAA,CAAA,aAAA,CAACK,uCAAc,EAAA,EACX,SAAS,EAAEH,YAAM,CAAC,WAAW,EAC7B,GAAG,EAAC,KAAK,EACT,IAAI,EAAC,mBAAmB,EACxB,KAAK,EAAC,sBAAsB,EAE3B,EAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,MAAA,GAAA,MAAA,GAAA,KAAK,CAAE,IAAI,CACC,CACX,CACb;AACL;;;;"}
1
+ {"version":3,"file":"Component.js","sources":["../../src/components/info-bar/Component.tsx"],"sourcesContent":["import React, { useCallback, useContext } from 'react';\nimport cn from 'classnames';\n\nimport { TypographyText } from '@alfalab/core-components-typography';\n\nimport { GalleryContext } from '../../context';\nimport { isVideo } from '../../utils';\nimport * as Buttons from '../buttons';\n\nimport styles from './index.module.css';\n\nexport const InfoBar = () => {\n const { getCurrentImage, mutedVideo, setMutedVideo, playingVideo, setPlayingVideo } =\n useContext(GalleryContext);\n\n const image = getCurrentImage();\n\n const handleMuteVideo = useCallback(() => {\n if (image) {\n if (mutedVideo && image.onUnmute) {\n image.onUnmute();\n } else if (image.onMute) {\n image.onMute();\n }\n }\n setMutedVideo(!mutedVideo);\n }, [image, mutedVideo, setMutedVideo]);\n\n const handlePlayVideo = useCallback(() => {\n setPlayingVideo(!playingVideo);\n }, [playingVideo, setPlayingVideo]);\n\n return isVideo(image?.src) ? (\n <section className={cn(styles.infoWrapper, styles.video)}>\n {playingVideo ? (\n <Buttons.Pause onClick={handlePlayVideo} />\n ) : (\n <Buttons.Play onClick={handlePlayVideo} />\n )}\n <TypographyText\n className={styles.description}\n tag='div'\n view='component-primary'\n color='static-primary-light'\n >\n {image?.name}\n </TypographyText>\n {mutedVideo ? (\n <Buttons.UnmuteVideo onClick={handleMuteVideo} />\n ) : (\n <Buttons.MuteVideo onClick={handleMuteVideo} />\n )}\n </section>\n ) : (\n <section className={styles.infoWrapper}>\n <TypographyText\n className={styles.description}\n tag='div'\n view='component-primary'\n color='static-primary-light'\n >\n {image?.name}\n </TypographyText>\n </section>\n );\n};\n"],"names":["useContext","GalleryContext","useCallback","isVideo","React","cn","styles","Buttons.Pause","Buttons.Play","TypographyText","Buttons.UnmuteVideo","Buttons.MuteVideo"],"mappings":";;;;;;;;;;;;;;;;;AAWa,IAAA,OAAO,GAAG,YAAA;IACb,IAAA,EAAA,GACFA,gBAAU,CAACC,sBAAc,CAAC,EADtB,eAAe,qBAAA,EAAE,UAAU,gBAAA,EAAE,aAAa,mBAAA,EAAE,YAAY,kBAAA,EAAE,eAAe,qBACnD;AAE9B,IAAA,IAAM,KAAK,GAAG,eAAe,EAAE;IAE/B,IAAM,eAAe,GAAGC,iBAAW,CAAC,YAAA;QAChC,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAC9B,KAAK,CAAC,QAAQ,EAAE;;AACb,iBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;gBACrB,KAAK,CAAC,MAAM,EAAE;;;AAGtB,QAAA,aAAa,CAAC,CAAC,UAAU,CAAC;KAC7B,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAEtC,IAAM,eAAe,GAAGA,iBAAW,CAAC,YAAA;AAChC,QAAA,eAAe,CAAC,CAAC,YAAY,CAAC;AAClC,KAAC,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAEnC,OAAOC,aAAO,CAAC,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,MAAA,GAAA,MAAA,GAAA,KAAK,CAAE,GAAG,CAAC,IACtBC,sBAAS,CAAA,aAAA,CAAA,SAAA,EAAA,EAAA,SAAS,EAAEC,mBAAE,CAACC,YAAM,CAAC,WAAW,EAAEA,YAAM,CAAC,KAAK,CAAC,EAAA;QACnD,YAAY,IACTF,sBAAA,CAAA,aAAA,CAACG,WAAa,EAAA,EAAC,OAAO,EAAE,eAAe,EAAA,CAAI,KAE3CH,sBAAA,CAAA,aAAA,CAACI,UAAY,EAAA,EAAC,OAAO,EAAE,eAAe,EAAA,CAAI,CAC7C;QACDJ,sBAAC,CAAA,aAAA,CAAAK,uCAAc,EACX,EAAA,SAAS,EAAEH,YAAM,CAAC,WAAW,EAC7B,GAAG,EAAC,KAAK,EACT,IAAI,EAAC,mBAAmB,EACxB,KAAK,EAAC,sBAAsB,EAE3B,EAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,MAAA,GAAA,MAAA,GAAA,KAAK,CAAE,IAAI,CACC;AAChB,QAAA,UAAU,IACPF,sBAAA,CAAA,aAAA,CAACM,iBAAmB,EAAC,EAAA,OAAO,EAAE,eAAe,EAAA,CAAI,KAEjDN,sBAAA,CAAA,aAAA,CAACO,eAAiB,EAAC,EAAA,OAAO,EAAE,eAAe,EAAA,CAAI,CAClD,CACK,KAEVP,sBAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EAAS,SAAS,EAAEE,YAAM,CAAC,WAAW,EAAA;AAClC,QAAAF,sBAAA,CAAA,aAAA,CAACK,uCAAc,EAAA,EACX,SAAS,EAAEH,YAAM,CAAC,WAAW,EAC7B,GAAG,EAAC,KAAK,EACT,IAAI,EAAC,mBAAmB,EACxB,KAAK,EAAC,sBAAsB,EAE3B,EAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,MAAA,GAAA,MAAA,GAAA,KAAK,CAAE,IAAI,CACC,CACX,CACb;AACL;;;;"}
@@ -7,10 +7,10 @@
7
7
  --gap-4: var(--gap-2xs);
8
8
  --gap-8: var(--gap-xs);
9
9
  }
10
- .gallery__description_1yae2 {
10
+ .gallery__description_1xl57 {
11
11
  text-align: center;
12
12
  }
13
- .gallery__infoWrapper_1yae2 {
13
+ .gallery__infoWrapper_1xl57 {
14
14
  background-color: var(--color-static-neutral-0-inverted);
15
15
  display: flex;
16
16
  align-items: center;
@@ -19,7 +19,7 @@
19
19
  position: relative;
20
20
  height: 48px;
21
21
  }
22
- .gallery__infoWrapper_1yae2.gallery__video_1yae2 {
22
+ .gallery__infoWrapper_1xl57.gallery__video_1xl57 {
23
23
  padding: 0 var(--gap-4) var(--gap-4);
24
24
  justify-content: space-between;
25
25
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"description":"gallery__description_1yae2","infoWrapper":"gallery__infoWrapper_1yae2","video":"gallery__video_1yae2"};
5
+ var styles = {"description":"gallery__description_1xl57","infoWrapper":"gallery__infoWrapper_1xl57","video":"gallery__video_1xl57"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../src/components/navigation-bar/Component.tsx"],"sourcesContent":["import React, { type FC, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport cn from 'classnames';\nimport throttle from 'lodash/throttle';\n\nimport { GalleryContext } from '../../context';\nimport { getImageKey, TestIds } from '../../utils';\nimport { ImagePreview } from '../image-preview';\n\nimport styles from './index.module.css';\n\nconst MIN_SCROLL_STEP = 24;\nconst SCROLL_SPEED = 2; // Коэффициент скорости прокрутки (можно настроить)\nconst SCROLL_THRESHOLD = 150; // Расстояние от границы, при котором начинается прокрутка\n\nexport const NavigationBar: FC = () => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [isNavMouseDowned, setIsNavMouseDowned] = useState<boolean>(false);\n\n const { images, currentSlideIndex, setCurrentSlideIndex, getSwiper, setPlayingVideo, view } =\n useContext(GalleryContext);\n\n const swiper = getSwiper();\n\n const handlePreviewSelect = (index: number) => {\n setCurrentSlideIndex?.(index);\n\n if (swiper) {\n setPlayingVideo(true);\n swiper.slideTo(index);\n }\n };\n\n const scroll = useCallback((scrollValue: number) => {\n if (containerRef.current) {\n containerRef.current.scroll({\n top: 0,\n left: containerRef.current.scrollLeft + scrollValue,\n behavior: 'smooth',\n });\n }\n }, []);\n\n const handlePreviewMouseDown = () => {\n setIsNavMouseDowned(true);\n };\n\n const handlePreviewMouseUp = () => {\n setIsNavMouseDowned(false);\n if (containerRef.current) {\n containerRef.current.style.scrollBehavior = 'auto'; // Отключаем плавность для резкой остановки\n }\n };\n\n const handleMouseNavigationMove = throttle((e: React.MouseEvent<HTMLDivElement>) => {\n if (!containerRef.current || !isNavMouseDowned) return;\n\n const container = containerRef.current;\n const { width: containerWidth, left: containerLeft } = container.getBoundingClientRect();\n const mouseX = e.clientX;\n\n // Если курсор близко к правой границе\n if (mouseX > containerWidth + containerLeft - SCROLL_THRESHOLD) {\n const scrollValue =\n (mouseX - (containerWidth + containerLeft - SCROLL_THRESHOLD)) * SCROLL_SPEED;\n\n container.scrollBy({ left: scrollValue, behavior: 'smooth' });\n }\n // Если курсор близко к левой границе\n else if (mouseX < containerLeft + SCROLL_THRESHOLD) {\n const scrollValue = (mouseX - (containerLeft + SCROLL_THRESHOLD)) * SCROLL_SPEED;\n\n container.scrollBy({ left: scrollValue, behavior: 'smooth' });\n }\n }, 150);\n\n const handlePreviewPosition = useCallback(\n (preview: Element, containerWidth: number) => {\n const { right, left, x } = preview.getBoundingClientRect();\n\n if (view === 'mobile') {\n scroll(x - containerWidth / 2 + MIN_SCROLL_STEP); // Передвигаем в центр активное превью\n }\n\n if (right > containerWidth) {\n const scrollValue = right - containerWidth + MIN_SCROLL_STEP;\n\n scroll(scrollValue);\n } else if (left < 0) {\n const scrollValue = left - MIN_SCROLL_STEP;\n\n scroll(scrollValue);\n }\n },\n [scroll, view],\n );\n\n useEffect(() => {\n if (containerRef.current) {\n const { width: containerWidth } = containerRef.current.getBoundingClientRect();\n\n const activePreview = containerRef.current.children[currentSlideIndex];\n\n if (activePreview) {\n handlePreviewPosition(activePreview, containerWidth);\n }\n }\n }, [currentSlideIndex, handlePreviewPosition, scroll]);\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n className={cn(styles.component, { [styles.mobile]: view === 'mobile' })}\n ref={containerRef}\n data-test-id={TestIds.NAVIGATION_BAR}\n onMouseDown={handlePreviewMouseDown}\n onMouseUp={handlePreviewMouseUp}\n onMouseMove={handleMouseNavigationMove}\n >\n {images.map((image, index) => {\n const active = index === currentSlideIndex;\n\n return (\n <ImagePreview\n key={getImageKey(image, index)}\n image={image}\n active={active}\n index={index}\n onSelect={handlePreviewSelect}\n className={cn(styles.preview, { [styles.mobile]: view === 'mobile' })}\n />\n );\n })}\n </div>\n );\n};\n"],"names":["useRef","useState","useContext","GalleryContext","useCallback","throttle","useEffect","React","cn","styles","TestIds","ImagePreview","getImageKey"],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["../../src/components/navigation-bar/Component.tsx"],"sourcesContent":["import React, { type FC, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport cn from 'classnames';\nimport throttle from 'lodash/throttle';\n\nimport { GalleryContext } from '../../context';\nimport { getImageKey, TestIds } from '../../utils';\nimport { ImagePreview } from '../image-preview';\n\nimport styles from './index.module.css';\n\nconst MIN_SCROLL_STEP = 24;\nconst SCROLL_SPEED = 2; // Коэффициент скорости прокрутки (можно настроить)\nconst SCROLL_THRESHOLD = 150; // Расстояние от границы, при котором начинается прокрутка\n\nexport const NavigationBar: FC = () => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [isNavMouseDowned, setIsNavMouseDowned] = useState<boolean>(false);\n\n const { images, currentSlideIndex, setCurrentSlideIndex, getSwiper, setPlayingVideo, view } =\n useContext(GalleryContext);\n\n const swiper = getSwiper();\n\n const handlePreviewSelect = (index: number) => {\n setCurrentSlideIndex?.(index);\n\n if (swiper) {\n setPlayingVideo(true);\n swiper.slideTo(index);\n }\n };\n\n const scroll = useCallback((scrollValue: number) => {\n if (containerRef.current) {\n containerRef.current.scroll({\n top: 0,\n left: containerRef.current.scrollLeft + scrollValue,\n behavior: 'smooth',\n });\n }\n }, []);\n\n const handlePreviewMouseDown = () => {\n setIsNavMouseDowned(true);\n };\n\n const handlePreviewMouseUp = () => {\n setIsNavMouseDowned(false);\n if (containerRef.current) {\n containerRef.current.style.scrollBehavior = 'auto'; // Отключаем плавность для резкой остановки\n }\n };\n\n const handleMouseNavigationMove = throttle((e: React.MouseEvent<HTMLDivElement>) => {\n if (!containerRef.current || !isNavMouseDowned) return;\n\n const container = containerRef.current;\n const { width: containerWidth, left: containerLeft } = container.getBoundingClientRect();\n const mouseX = e.clientX;\n\n // Если курсор близко к правой границе\n if (mouseX > containerWidth + containerLeft - SCROLL_THRESHOLD) {\n const scrollValue =\n (mouseX - (containerWidth + containerLeft - SCROLL_THRESHOLD)) * SCROLL_SPEED;\n\n container.scrollBy({ left: scrollValue, behavior: 'smooth' });\n }\n // Если курсор близко к левой границе\n else if (mouseX < containerLeft + SCROLL_THRESHOLD) {\n const scrollValue = (mouseX - (containerLeft + SCROLL_THRESHOLD)) * SCROLL_SPEED;\n\n container.scrollBy({ left: scrollValue, behavior: 'smooth' });\n }\n }, 150);\n\n const handlePreviewPosition = useCallback(\n (preview: Element, containerWidth: number) => {\n const { right, left, x } = preview.getBoundingClientRect();\n\n if (view === 'mobile') {\n scroll(x - containerWidth / 2 + MIN_SCROLL_STEP); // Передвигаем в центр активное превью\n }\n\n if (right > containerWidth) {\n const scrollValue = right - containerWidth + MIN_SCROLL_STEP;\n\n scroll(scrollValue);\n } else if (left < 0) {\n const scrollValue = left - MIN_SCROLL_STEP;\n\n scroll(scrollValue);\n }\n },\n [scroll, view],\n );\n\n useEffect(() => {\n if (containerRef.current) {\n const { width: containerWidth } = containerRef.current.getBoundingClientRect();\n\n const activePreview = containerRef.current.children[currentSlideIndex];\n\n if (activePreview) {\n handlePreviewPosition(activePreview, containerWidth);\n }\n }\n }, [currentSlideIndex, handlePreviewPosition, scroll]);\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n className={cn(styles.component, { [styles.mobile]: view === 'mobile' })}\n ref={containerRef}\n data-test-id={TestIds.NAVIGATION_BAR}\n onMouseDown={handlePreviewMouseDown}\n onMouseUp={handlePreviewMouseUp}\n onMouseMove={handleMouseNavigationMove}\n >\n {images.map((image, index) => {\n const active = index === currentSlideIndex;\n\n return (\n <ImagePreview\n key={getImageKey(image, index)}\n image={image}\n active={active}\n index={index}\n onSelect={handlePreviewSelect}\n className={cn(styles.preview, { [styles.mobile]: view === 'mobile' })}\n />\n );\n })}\n </div>\n );\n};\n"],"names":["useRef","useState","useContext","GalleryContext","useCallback","throttle","useEffect","React","cn","styles","TestIds","ImagePreview","getImageKey"],"mappings":"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"}
@@ -13,7 +13,7 @@
13
13
  --gap-12: var(--gap-s);
14
14
  --gap-24: var(--gap-xl);
15
15
  }
16
- .gallery__component_m6zcb {
16
+ .gallery__component_bvbtz {
17
17
  display: flex;
18
18
  flex-wrap: nowrap;
19
19
  align-content: center;
@@ -25,25 +25,25 @@
25
25
  scrollbar-width: none;
26
26
  background-color: var(--color-static-neutral-0-inverted);
27
27
  }
28
- .gallery__component_m6zcb.gallery__mobile_m6zcb {
28
+ .gallery__component_bvbtz.gallery__mobile_bvbtz {
29
29
  padding: var(--gap-8) var(--gap-24);
30
30
  }
31
- .gallery__component_m6zcb::-webkit-scrollbar {
31
+ .gallery__component_bvbtz::-webkit-scrollbar {
32
32
  display: none;
33
33
  }
34
- .gallery__previews_m6zcb {
34
+ .gallery__previews_bvbtz {
35
35
  display: flex;
36
36
  }
37
- .gallery__preview_m6zcb {
37
+ .gallery__preview_bvbtz {
38
38
  flex-shrink: 0;
39
39
  margin-right: var(--gap-4);
40
40
  }
41
- .gallery__preview_m6zcb.gallery__mobile_m6zcb {
41
+ .gallery__preview_bvbtz.gallery__mobile_bvbtz {
42
42
  margin-right: var(--gap-2);
43
43
  }
44
- .gallery__preview_m6zcb:first-child {
44
+ .gallery__preview_bvbtz:first-child {
45
45
  margin-left: auto;
46
46
  }
47
- .gallery__preview_m6zcb:last-child {
47
+ .gallery__preview_bvbtz:last-child {
48
48
  margin-right: auto;
49
49
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"component":"gallery__component_m6zcb","mobile":"gallery__mobile_m6zcb","preview":"gallery__preview_m6zcb"};
5
+ var styles = {"component":"gallery__component_bvbtz","mobile":"gallery__mobile_bvbtz","preview":"gallery__preview_bvbtz"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -5,7 +5,7 @@
5
5
  --gap-16: var(--gap-m);
6
6
  --gap-32: var(--gap-2xl);
7
7
  }
8
- .gallery__subtitles_13dww {
8
+ .gallery__subtitles_i2ph2 {
9
9
  position: absolute;
10
10
  align-self: flex-end;
11
11
  padding: var(--gap-0) var(--gap-32);
@@ -18,10 +18,10 @@
18
18
  opacity 500ms ease-in-out,
19
19
  margin-bottom 270ms ease-in-out;
20
20
  }
21
- .gallery__subtitles_13dww.gallery__mobile_13dww {
21
+ .gallery__subtitles_i2ph2.gallery__mobile_i2ph2 {
22
22
  position: static;
23
23
  position: initial;
24
24
  }
25
- .gallery__hideSubtitles_13dww {
25
+ .gallery__hideSubtitles_i2ph2 {
26
26
  opacity: 0;
27
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/components/subtitles/index.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport cn from 'classnames';\n\nimport { Typography } from '@alfalab/core-components-typography';\n\nimport { GalleryContext } from '../../context';\nimport { useCustomSubtitles } from '../../hooks';\n\nimport styles from './index.module.css';\n\nexport const Subtitles = () => {\n const { view } = useContext(GalleryContext);\n\n const { showSub, currentSub } = useCustomSubtitles();\n\n if (showSub) {\n return (\n <Typography.Text\n className={cn(styles.subtitles, {\n [styles.hideSubtitles]: !showSub,\n [styles.mobile]: view === 'mobile',\n })}\n color='static-primary-light'\n >\n {currentSub}\n </Typography.Text>\n );\n }\n\n return null;\n};\n"],"names":["useContext","GalleryContext","useCustomSubtitles","React","Typography","cn","styles"],"mappings":";;;;;;;;;;;;;;;;AAUa,IAAA,SAAS,GAAG,YAAA;;AACb,IAAA,IAAA,IAAI,GAAKA,gBAAU,CAACC,sBAAc,CAAC,KAA/B;IAEN,IAAA,EAAA,GAA0BC,qCAAkB,EAAE,EAA5C,OAAO,GAAA,EAAA,CAAA,OAAA,EAAE,UAAU,GAAA,EAAA,CAAA,UAAyB;AAEpD,IAAA,IAAI,OAAO,EAAE;AACT,QAAA,QACIC,sBAAA,CAAA,aAAA,CAACC,mCAAU,CAAC,IAAI,EAAA,EACZ,SAAS,EAAEC,mBAAE,CAACC,YAAM,CAAC,SAAS,GAAA,EAAA,GAAA,EAAA;AAC1B,gBAAA,EAAA,CAACA,YAAM,CAAC,aAAa,CAAA,GAAG,CAAC,OAAO;AAChC,gBAAA,EAAA,CAACA,YAAM,CAAC,MAAM,CAAG,GAAA,IAAI,KAAK,QAAQ;AACpC,gBAAA,EAAA,EAAA,EACF,KAAK,EAAC,sBAAsB,IAE3B,UAAU,CACG;AAEzB;AAED,IAAA,OAAO,IAAI;AACf;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/components/subtitles/index.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport cn from 'classnames';\n\nimport { Typography } from '@alfalab/core-components-typography';\n\nimport { GalleryContext } from '../../context';\nimport { useCustomSubtitles } from '../../hooks';\n\nimport styles from './index.module.css';\n\nexport const Subtitles = () => {\n const { view } = useContext(GalleryContext);\n\n const { showSub, currentSub } = useCustomSubtitles();\n\n if (showSub) {\n return (\n <Typography.Text\n className={cn(styles.subtitles, {\n [styles.hideSubtitles]: !showSub,\n [styles.mobile]: view === 'mobile',\n })}\n color='static-primary-light'\n >\n {currentSub}\n </Typography.Text>\n );\n }\n\n return null;\n};\n"],"names":["useContext","GalleryContext","useCustomSubtitles","React","Typography","cn","styles"],"mappings":";;;;;;;;;;;;;;;;AAUa,IAAA,SAAS,GAAG,YAAA;;AACb,IAAA,IAAA,IAAI,GAAKA,gBAAU,CAACC,sBAAc,CAAC,KAA/B;IAEN,IAAA,EAAA,GAA0BC,qCAAkB,EAAE,EAA5C,OAAO,GAAA,EAAA,CAAA,OAAA,EAAE,UAAU,GAAA,EAAA,CAAA,UAAyB;IAEpD,IAAI,OAAO,EAAE;AACT,QAAA,QACIC,sBAAA,CAAA,aAAA,CAACC,mCAAU,CAAC,IAAI,EAAA,EACZ,SAAS,EAAEC,mBAAE,CAACC,YAAM,CAAC,SAAS,GAAA,EAAA,GAAA,EAAA;AAC1B,gBAAA,EAAA,CAACA,YAAM,CAAC,aAAa,CAAA,GAAG,CAAC,OAAO;AAChC,gBAAA,EAAA,CAACA,YAAM,CAAC,MAAM,CAAG,GAAA,IAAI,KAAK,QAAQ;AACpC,gBAAA,EAAA,EAAA,EACF,KAAK,EAAC,sBAAsB,IAE3B,UAAU,CACG;;AAI1B,IAAA,OAAO,IAAI;AACf;;;;"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"subtitles":"gallery__subtitles_13dww","mobile":"gallery__mobile_13dww","hideSubtitles":"gallery__hideSubtitles_13dww"};
5
+ var styles = {"subtitles":"gallery__subtitles_i2ph2","mobile":"gallery__mobile_i2ph2","hideSubtitles":"gallery__hideSubtitles_i2ph2"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
package/context.d.ts CHANGED
@@ -1,7 +1,6 @@
1
- /// <reference types="react" />
2
1
  import type SwiperCore from 'swiper';
3
2
  import { type GalleryImage, type ImageMeta } from './types';
4
- export declare type GalleryContext = {
3
+ export type GalleryContext = {
5
4
  view: 'desktop' | 'mobile';
6
5
  singleSlide: boolean;
7
6
  currentSlideIndex: number;
@@ -1,6 +1,6 @@
1
1
  import { type FC } from 'react';
2
2
  import { type GalleryImage } from './types';
3
- export declare type GalleryProps = {
3
+ export type GalleryProps = {
4
4
  /**
5
5
  * Управление видимостью
6
6
  */
@@ -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(\n (meta: ImageMeta, index: number) => {\n imagesMeta[index] = meta;\n\n setImagesMeta(imagesMeta.slice());\n },\n [imagesMeta],\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\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(\n (meta: ImageMeta, index: number) => {\n imagesMeta[index] = meta;\n\n setImagesMeta(imagesMeta.slice());\n },\n [imagesMeta],\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,6 +1,6 @@
1
1
  import React, { type MouseEvent } from 'react';
2
2
  import { type TBottomButton } from '../../types';
3
- declare type Props = {
3
+ type Props = {
4
4
  onClick: (e: MouseEvent) => void;
5
5
  className?: string;
6
6
  bottomButton: TBottomButton;
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../../src/components/bottom-button/Component.tsx"],"sourcesContent":["import React, { type MouseEvent, useContext, useEffect, useRef, useState } from 'react';\nimport cn from 'classnames';\n\nimport { Button } from '@alfalab/core-components-button';\nimport { Typography } from '@alfalab/core-components-typography';\n\nimport { GalleryContext } from '../../context';\nimport { type TBottomButton } from '../../types';\n\nimport styles from './index.module.css';\n\ntype Props = {\n onClick: (e: MouseEvent) => void;\n className?: string;\n bottomButton: TBottomButton;\n};\n\nexport const BottomButton = ({ onClick, className, bottomButton }: Props) => {\n const timer = useRef<ReturnType<typeof setTimeout>>();\n\n const [visible, setVisible] = useState<boolean>(false);\n const { currentSlideIndex, getSwiper, singleSlide } = useContext(GalleryContext);\n\n useEffect(() => {\n const swiper = getSwiper();\n\n if ((currentSlideIndex === swiper?.activeIndex || singleSlide) && bottomButton.timeout) {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n setVisible(false);\n timer.current = setTimeout(() => setVisible(true), bottomButton.timeout * 1000);\n }\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [bottomButton.timeout, currentSlideIndex, singleSlide]);\n\n return (\n <Button\n size={56}\n className={cn(\n styles.component,\n { [styles.notVisible]: !visible && bottomButton.timeout },\n className,\n )}\n onClick={onClick}\n >\n <Typography.Text color='static-primary-light'>{bottomButton.text}</Typography.Text>\n </Button>\n );\n};\n"],"names":["useRef","useState","useContext","GalleryContext","useEffect","React","Button","cn","styles","Typography"],"mappings":";;;;;;;;;;;;;;;;;AAiBO,IAAM,YAAY,GAAG,UAAC,EAA2C,EAAA;;AAAzC,IAAA,IAAA,OAAO,aAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA;AAC3D,IAAA,IAAM,KAAK,GAAGA,YAAM,EAAiC;IAE/C,IAAA,EAAA,GAAwBC,cAAQ,CAAU,KAAK,CAAC,EAA/C,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAA4B;AAChD,IAAA,IAAA,EAAgD,GAAAC,gBAAU,CAACC,sBAAc,CAAC,EAAxE,iBAAiB,GAAA,EAAA,CAAA,iBAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,WAAW,iBAA+B;AAEhF,IAAAC,eAAS,CAAC,YAAA;AACN,QAAA,IAAM,MAAM,GAAG,SAAS,EAAE;AAE1B,QAAA,IAAI,CAAC,iBAAiB,MAAK,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAA,IAAI,WAAW,KAAK,YAAY,CAAC,OAAO,EAAE;YACpF,IAAI,KAAK,CAAC,OAAO,EAAE;AACf,gBAAA,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;AAC9B;YACD,UAAU,CAAC,KAAK,CAAC;YACjB,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,YAAM,EAAA,OAAA,UAAU,CAAC,IAAI,CAAC,CAAhB,EAAgB,EAAE,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;AAClF;;KAEJ,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;AAE1D,IAAA,QACIC,sBAAA,CAAA,aAAA,CAACC,WAAM,EAAA,EACH,IAAI,EAAE,EAAE,EACR,SAAS,EAAEC,mBAAE,CACTC,uBAAM,CAAC,SAAS,GAAA,EAAA,GAAA,EAAA,EACd,EAAC,CAAAA,uBAAM,CAAC,UAAU,CAAG,GAAA,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,OACvD,SAAS,CACZ,EACD,OAAO,EAAE,OAAO,EAAA;AAEhB,QAAAH,sBAAA,CAAA,aAAA,CAACI,iBAAU,CAAC,IAAI,EAAA,EAAC,KAAK,EAAC,sBAAsB,EAAE,EAAA,YAAY,CAAC,IAAI,CAAmB,CAC9E;AAEjB;;;;"}
1
+ {"version":3,"file":"Component.js","sources":["../../../src/components/bottom-button/Component.tsx"],"sourcesContent":["import React, { type MouseEvent, useContext, useEffect, useRef, useState } from 'react';\nimport cn from 'classnames';\n\nimport { Button } from '@alfalab/core-components-button';\nimport { Typography } from '@alfalab/core-components-typography';\n\nimport { GalleryContext } from '../../context';\nimport { type TBottomButton } from '../../types';\n\nimport styles from './index.module.css';\n\ntype Props = {\n onClick: (e: MouseEvent) => void;\n className?: string;\n bottomButton: TBottomButton;\n};\n\nexport const BottomButton = ({ onClick, className, bottomButton }: Props) => {\n const timer = useRef<ReturnType<typeof setTimeout>>();\n\n const [visible, setVisible] = useState<boolean>(false);\n const { currentSlideIndex, getSwiper, singleSlide } = useContext(GalleryContext);\n\n useEffect(() => {\n const swiper = getSwiper();\n\n if ((currentSlideIndex === swiper?.activeIndex || singleSlide) && bottomButton.timeout) {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n setVisible(false);\n timer.current = setTimeout(() => setVisible(true), bottomButton.timeout * 1000);\n }\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [bottomButton.timeout, currentSlideIndex, singleSlide]);\n\n return (\n <Button\n size={56}\n className={cn(\n styles.component,\n { [styles.notVisible]: !visible && bottomButton.timeout },\n className,\n )}\n onClick={onClick}\n >\n <Typography.Text color='static-primary-light'>{bottomButton.text}</Typography.Text>\n </Button>\n );\n};\n"],"names":["useRef","useState","useContext","GalleryContext","useEffect","React","Button","cn","styles","Typography"],"mappings":";;;;;;;;;;;;;;;;;AAiBO,IAAM,YAAY,GAAG,UAAC,EAA2C,EAAA;;AAAzC,IAAA,IAAA,OAAO,aAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA;AAC3D,IAAA,IAAM,KAAK,GAAGA,YAAM,EAAiC;IAE/C,IAAA,EAAA,GAAwBC,cAAQ,CAAU,KAAK,CAAC,EAA/C,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAA4B;AAChD,IAAA,IAAA,EAAgD,GAAAC,gBAAU,CAACC,sBAAc,CAAC,EAAxE,iBAAiB,GAAA,EAAA,CAAA,iBAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,WAAW,iBAA+B;AAEhF,IAAAC,eAAS,CAAC,YAAA;AACN,QAAA,IAAM,MAAM,GAAG,SAAS,EAAE;AAE1B,QAAA,IAAI,CAAC,iBAAiB,MAAK,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAA,IAAI,WAAW,KAAK,YAAY,CAAC,OAAO,EAAE;AACpF,YAAA,IAAI,KAAK,CAAC,OAAO,EAAE;AACf,gBAAA,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;;YAE/B,UAAU,CAAC,KAAK,CAAC;YACjB,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,YAAM,EAAA,OAAA,UAAU,CAAC,IAAI,CAAC,CAAhB,EAAgB,EAAE,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;;;KAGtF,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;AAE1D,IAAA,QACIC,sBAAA,CAAA,aAAA,CAACC,WAAM,EAAA,EACH,IAAI,EAAE,EAAE,EACR,SAAS,EAAEC,mBAAE,CACTC,uBAAM,CAAC,SAAS,GAAA,EAAA,GAAA,EAAA,EACd,EAAC,CAAAA,uBAAM,CAAC,UAAU,CAAG,GAAA,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,OACvD,SAAS,CACZ,EACD,OAAO,EAAE,OAAO,EAAA;AAEhB,QAAAH,sBAAA,CAAA,aAAA,CAACI,iBAAU,CAAC,IAAI,EAAA,EAAC,KAAK,EAAC,sBAAsB,EAAE,EAAA,YAAY,CAAC,IAAI,CAAmB,CAC9E;AAEjB;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { type FC, type MutableRefObject } from 'react';
2
2
  import { type IconButtonProps } from '@alfalab/core-components-icon-button/cssm';
3
- declare type Props = Omit<IconButtonProps, 'icon' | 'colors'> & {
3
+ type Props = Omit<IconButtonProps, 'icon' | 'colors'> & {
4
4
  buttonRef?: MutableRefObject<HTMLButtonElement | null>;
5
5
  download?: string | boolean;
6
6
  };
@@ -60,7 +60,7 @@ var UnmuteVideo = function (_a) {
60
60
  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'] },
61
61
  React__default.default.createElement(cssm.IconButton, tslib.__assign({}, props, { icon: PointerDownMIcon.PointerDownMIcon, "aria-label": '\u0421\u043A\u0430\u0447\u0430\u0442\u044C', className: styles__default.default.iconButton })))); };
62
62
  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'] },
63
- React__default.default.createElement(cssm.IconButton, tslib.__assign({}, props, { icon: ShareMIcon.ShareMIcon, "aria-label": '\u0421\u043A\u0430\u0447\u0430\u0442\u044C', className: styles__default.default.iconButton })))); };
63
+ React__default.default.createElement(cssm.IconButton, tslib.__assign({}, props, { icon: ShareMIcon.ShareMIcon, "aria-label": '\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F', className: styles__default.default.iconButton })))); };
64
64
  var Exit = function (props) { return (React__default.default.createElement(cssm.IconButton, tslib.__assign({}, props, { icon: CrossMIcon.CrossMIcon, "aria-label": '\u0417\u0430\u043A\u0440\u044B\u0442\u044C', className: styles__default.default.iconButton }))); };
65
65
 
66
66
  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":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBO,IAAM,UAAU,GAAc,UAAC,EAA2B,EAAA;AAAzB,IAAA,IAAA,SAAS,GAAA,EAAA,CAAA,SAAA,EAAK,SAAS,GAAAA,YAAA,CAAA,EAAA,EAAzB,aAA2B,CAAF;IAAO,QAClEC,qCAACC,sBAAc,EAAA,EACX,OAAO,EAAC,OAAO,EACf,QAAQ,EAAC,QAAQ,EACjB,OAAO,EAAC,uKAAgC,EACxC,kBAAkB,EAAE,CAAC,YAAY,CAAC,EAAA;QAElCD,sBAAC,CAAA,aAAA,CAAAE,eAAU,qBACH,SAAS,EAAA,EACb,GAAG,EAAE,SAAS,EACd,IAAI,EAAEC,qCAAkB,gBACb,uKAAgC,EAC3C,SAAS,EAAEC,uBAAM,CAAC,UAAU,EAAA,CAAA,CAC9B,CACW;;AAGd,IAAM,SAAS,GAAc,UAAC,EAA2B,EAAA;AAAzB,IAAA,IAAA,SAAS,GAAA,EAAA,CAAA,SAAA,EAAK,SAAS,GAAAL,YAAA,CAAA,EAAA,EAAzB,aAA2B,CAAF;IAAO,QACjEC,qCAACE,eAAU,EAAAG,cAAA,CAAA,EAAA,EACH,SAAS,EACb,EAAA,GAAG,EAAE,SAAS,EACd,IAAI,EAAEC,6BAAc,EAAA,YAAA,EACT,uFAAiB,EAC5B,SAAS,EAAEF,uBAAM,CAAC,UAAU,EAC9B,CAAA,CAAA;;AAGC,IAAM,IAAI,GAAc,UAAC,EAAsC,EAAA;IAApC,IAAA,SAAS,eAAA,EAAE,SAAS,eAAA,EAAK,SAAS,GAApCL,YAAA,CAAA,EAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAsC,CAAF;AAAO,IAAA,QACvEC,sBAAA,CAAA,aAAA,CAACE,eAAU,EAAAG,cAAA,CAAA,EAAA,EACH,SAAS,EAAA,EACb,GAAG,EAAE,SAAS,EACd,IAAI,EAAEE,iCAAgB,EAAA,YAAA,EACX,uFAAiB,EAC5B,SAAS,EAAEC,mBAAE,CAACJ,uBAAM,CAAC,UAAU,EAAE,SAAS,CAAC,EAC7C,CAAA,CAAA;;AAGC,IAAM,KAAK,GAAc,UAAC,EAAsC,EAAA;IAApC,IAAA,SAAS,eAAA,EAAE,SAAS,eAAA,EAAK,SAAS,GAApCL,YAAA,CAAA,EAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAsC,CAAF;AAAO,IAAA,QACxEC,sBAAA,CAAA,aAAA,CAACE,eAAU,EAAAG,cAAA,CAAA,EAAA,EACH,SAAS,EAAA,EACb,GAAG,EAAE,SAAS,EACd,IAAI,EAAEI,mCAAiB,EAAA,YAAA,EACZ,mIAA0B,EACrC,SAAS,EAAED,mBAAE,CAACJ,uBAAM,CAAC,UAAU,EAAE,SAAS,CAAC,EAC7C,CAAA,CAAA;;AAGC,IAAM,cAAc,GAAc,UAAC,EAA2B,EAAA;AAAzB,IAAA,IAAA,SAAS,GAAA,EAAA,CAAA,SAAA,EAAK,SAAS,GAAAL,YAAA,CAAA,EAAA,EAAzB,aAA2B,CAAF;IAAO,QACtEC,qCAACC,sBAAc,EAAA,EACX,OAAO,EAAC,OAAO,EACf,QAAQ,EAAC,QAAQ,EACjB,OAAO,EAAC,uKAAgC,EACxC,kBAAkB,EAAE,CAAC,YAAY,CAAC,EAAA;QAElCD,sBAAC,CAAA,aAAA,CAAAE,eAAU,qBACH,SAAS,EAAA,EACb,GAAG,EAAE,SAAS,EACd,IAAI,EAAEQ,mCAAiB,gBACZ,uKAAgC,EAC3C,SAAS,EAAEN,uBAAM,CAAC,UAAU,EAAA,CAAA,CAC9B,CACW;;AAGd,IAAM,SAAS,GAAc,UAAC,EAAsC,EAAA;IAApC,IAAA,SAAS,eAAA,EAAE,SAAS,eAAA,EAAK,SAAS,GAApCL,YAAA,CAAA,EAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAsC,CAAF;IAAO,QAC5EC,sBAAC,CAAA,aAAA,CAAAC,sBAAc,EACX,EAAA,OAAO,EAAC,OAAO,EACf,QAAQ,EAAC,QAAQ,EACjB,OAAO,EAAC,iFAAgB,EACxB,kBAAkB,EAAE,CAAC,YAAY,CAAC,EAClC,eAAe,EAAE,SAAS,EAAA;QAE1BD,sBAAC,CAAA,aAAA,CAAAE,eAAU,qBACH,SAAS,EAAA,EACb,GAAG,EAAE,SAAS,EACd,IAAI,EAAES,qBAAU,gBACL,iFAAgB,EAC3B,SAAS,EAAEP,uBAAM,CAAC,UAAU,EAAA,CAAA,CAC9B,CACW;;AAGd,IAAM,WAAW,GAAc,UAAC,EAAsC,EAAA;IAApC,IAAA,SAAS,eAAA,EAAE,SAAS,eAAA,EAAK,SAAS,GAApCL,YAAA,CAAA,EAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAsC,CAAF;IAAO,QAC9EC,sBAAC,CAAA,aAAA,CAAAC,sBAAc,EACX,EAAA,OAAO,EAAC,OAAO,EACf,QAAQ,EAAC,QAAQ,EACjB,OAAO,EAAC,2EAAe,EACvB,kBAAkB,EAAE,CAAC,YAAY,CAAC,EAClC,eAAe,EAAE,SAAS,EAAA;QAE1BD,sBAAC,CAAA,aAAA,CAAAE,eAAU,qBACH,SAAS,EAAA,EACb,GAAG,EAAE,SAAS,EACd,IAAI,EAAEU,+BAAe,gBACV,2EAAe,EAC1B,SAAS,EAAER,uBAAM,CAAC,UAAU,EAAA,CAAA,CAC9B,CACW;;AAGd,IAAM,QAAQ,GAAc,UAAC,KAAK,EAAK,EAAA,QAC1CJ,sBAAA,CAAA,aAAA,CAACC,sBAAc,EAAA,EACX,OAAO,EAAC,OAAO,EACf,QAAQ,EAAC,QAAQ,EACjB,OAAO,EAAC,4CAAS,EACjB,kBAAkB,EAAE,CAAC,YAAY,CAAC,EAAA;IAElCD,sBAAC,CAAA,aAAA,CAAAE,eAAU,qBACH,KAAK,EAAA,EACT,IAAI,EAAEW,iCAAgB,gBACX,4CAAS,EACpB,SAAS,EAAET,uBAAM,CAAC,UAAU,EAAA,CAAA,CAC9B,CACW,EACpB;AAEM,IAAM,KAAK,GAAc,UAAC,KAAK,EAAK,EAAA,QACvCJ,sBAAA,CAAA,aAAA,CAACC,sBAAc,EAAA,EACX,OAAO,EAAC,OAAO,EACf,QAAQ,EAAC,QAAQ,EACjB,OAAO,EAAC,8DAAY,EACpB,kBAAkB,EAAE,CAAC,YAAY,CAAC,EAAA;IAElCD,sBAAC,CAAA,aAAA,CAAAE,eAAU,qBACH,KAAK,EAAA,EACT,IAAI,EAAEY,qBAAU,gBACL,4CAAS,EACpB,SAAS,EAAEV,uBAAM,CAAC,UAAU,EAAA,CAAA,CAC9B,CACW,EACpB;AAEM,IAAM,IAAI,GAAc,UAAC,KAAK,EAAK,EAAA,QACtCJ,sBAAA,CAAA,aAAA,CAACE,eAAU,EAAAG,cAAA,CAAA,EAAA,EAAK,KAAK,EAAA,EAAE,IAAI,EAAEU,qBAAU,EAAA,YAAA,EAAa,4CAAS,EAAC,SAAS,EAAEX,uBAAM,CAAC,UAAU,EAAA,CAAA,CAAI,EACjG;;;;;;;;;;;;;"}
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 +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,5 +1,5 @@
1
1
  import { type FC } from 'react';
2
- export declare type HeaderInfoBlockProps = {
2
+ export type HeaderInfoBlockProps = {
3
3
  filename: string;
4
4
  description?: string;
5
5
  };
@@ -20,13 +20,15 @@ var styles__default = /*#__PURE__*/_interopDefaultCompat(styles);
20
20
 
21
21
  var HeaderMobile = function () {
22
22
  var _a;
23
- var _b;
24
- var _c = React.useContext(context.GalleryContext), onClose = _c.onClose, images = _c.images, currentSlideIndex = _c.currentSlideIndex, getCurrentImage = _c.getCurrentImage, getCurrentImageMeta = _c.getCurrentImageMeta, hideNavigation = _c.hideNavigation;
23
+ var _b, _c;
24
+ var _d = React.useContext(context.GalleryContext), onClose = _d.onClose, images = _d.images, currentSlideIndex = _d.currentSlideIndex, getCurrentImage = _d.getCurrentImage, getCurrentImageMeta = _d.getCurrentImageMeta, hideNavigation = _d.hideNavigation;
25
25
  var currentImage = getCurrentImage();
26
26
  var meta = getCurrentImageMeta();
27
27
  var description = images.length > 1 && "".concat(currentSlideIndex + 1, " \u0438\u0437 ").concat(images.length);
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
+ var canShare = (_c = currentImage === null || currentImage === void 0 ? void 0 : currentImage.canShare) !== null && _c !== void 0 ? _c : true;
31
+ var showShareButton = !(meta === null || meta === void 0 ? void 0 : meta.broken) && canShare;
30
32
  var handleShareClick = function () { return tslib.__awaiter(void 0, void 0, void 0, function () {
31
33
  var title, url, response, blob, file, shareData;
32
34
  var _b, _c;
@@ -105,7 +107,7 @@ var HeaderMobile = function () {
105
107
  React__default.default.createElement(cssm.TypographyText, { className: styles__default.default.description, tag: 'div', view: 'component-primary', color: 'static-primary-light' }, description),
106
108
  React__default.default.createElement("div", { className: styles__default.default.rightButtons },
107
109
  showDownloadButton && (React__default.default.createElement(index.Download, { href: currentImage === null || currentImage === void 0 ? void 0 : currentImage.src, download: currentImage === null || currentImage === void 0 ? void 0 : currentImage.name, dataTestId: constants.TestIds.DOWNLOAD_BUTTON })),
108
- !(meta === null || meta === void 0 ? void 0 : meta.broken) && React__default.default.createElement(index.Share, { onClick: handleShareClick }))));
110
+ showShareButton && React__default.default.createElement(index.Share, { onClick: handleShareClick }))));
109
111
  };
110
112
 
111
113
  exports.HeaderMobile = HeaderMobile;