@gravity-ui/page-constructor 8.3.0 → 8.4.1
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.
- package/build/cjs/blocks/Header/Header.css +6 -0
- package/build/cjs/blocks/Header/schema.js +1 -25
- package/build/cjs/blocks/Header/schema.js.map +1 -1
- package/build/cjs/blocks/Hero/Hero.css +205 -0
- package/build/cjs/blocks/Hero/Hero.d.ts +3 -0
- package/build/cjs/blocks/Hero/Hero.js +49 -0
- package/build/cjs/blocks/Hero/Hero.js.map +1 -0
- package/build/cjs/blocks/Hero/hooks.d.ts +4 -0
- package/build/cjs/blocks/Hero/hooks.js +38 -0
- package/build/cjs/blocks/Hero/hooks.js.map +1 -0
- package/build/cjs/blocks/Hero/schema.d.ts +2076 -0
- package/build/cjs/blocks/Hero/schema.js +66 -0
- package/build/cjs/blocks/Hero/schema.js.map +1 -0
- package/build/cjs/blocks/index.d.ts +1 -0
- package/build/cjs/blocks/index.js +3 -1
- package/build/cjs/blocks/index.js.map +1 -1
- package/build/cjs/components/Buttons/Buttons.d.ts +2 -1
- package/build/cjs/components/Buttons/Buttons.js +6 -3
- package/build/cjs/components/Buttons/Buttons.js.map +1 -1
- package/build/cjs/components/DefaultVideo/DefaultVideo.d.ts +1 -0
- package/build/cjs/components/DefaultVideo/DefaultVideo.js +2 -2
- package/build/cjs/components/DefaultVideo/DefaultVideo.js.map +1 -1
- package/build/cjs/components/Image/Image.d.ts +5 -1
- package/build/cjs/components/Image/Image.js +4 -2
- package/build/cjs/components/Image/Image.js.map +1 -1
- package/build/cjs/components/ImageBase/ImageBase.d.ts +2 -2
- package/build/cjs/components/ImageBase/ImageBase.js +5 -5
- package/build/cjs/components/ImageBase/ImageBase.js.map +1 -1
- package/build/cjs/components/Media/Image/Image.d.ts +4 -0
- package/build/cjs/components/Media/Image/Image.js +3 -3
- package/build/cjs/components/Media/Image/Image.js.map +1 -1
- package/build/cjs/components/Media/Media.js +8 -4
- package/build/cjs/components/Media/Media.js.map +1 -1
- package/build/cjs/components/Media/Video/Video.d.ts +5 -0
- package/build/cjs/components/Media/Video/Video.js +30 -4
- package/build/cjs/components/Media/Video/Video.js.map +1 -1
- package/build/cjs/components/ReactPlayer/ReactPlayer.css +5 -0
- package/build/cjs/components/ReactPlayer/ReactPlayer.d.ts +5 -0
- package/build/cjs/components/ReactPlayer/ReactPlayer.js +12 -4
- package/build/cjs/components/ReactPlayer/ReactPlayer.js.map +1 -1
- package/build/cjs/components/Title/TitleItem.css +6 -0
- package/build/cjs/constructor-items.d.ts +1 -0
- package/build/cjs/constructor-items.js +1 -0
- package/build/cjs/constructor-items.js.map +1 -1
- package/build/cjs/context/imageContext/imageContext.d.ts +1 -1
- package/build/cjs/context/imageContext/imageContext.js.map +1 -1
- package/build/cjs/demo/ComponentsText.stories.js +3 -3
- package/build/cjs/demo/ComponentsText.stories.js.map +1 -1
- package/build/cjs/hooks/index.d.ts +1 -0
- package/build/cjs/hooks/index.js +1 -0
- package/build/cjs/hooks/index.js.map +1 -1
- package/build/cjs/hooks/useImageSize.d.ts +8 -0
- package/build/cjs/hooks/useImageSize.js +52 -0
- package/build/cjs/hooks/useImageSize.js.map +1 -0
- package/build/cjs/models/constructor-items/blocks.d.ts +22 -3
- package/build/cjs/models/constructor-items/blocks.js +6 -1
- package/build/cjs/models/constructor-items/blocks.js.map +1 -1
- package/build/cjs/schema/constants.js +1 -0
- package/build/cjs/schema/constants.js.map +1 -1
- package/build/cjs/schema/validators/blocks.d.ts +1 -0
- package/build/cjs/schema/validators/blocks.js +1 -0
- package/build/cjs/schema/validators/blocks.js.map +1 -1
- package/build/cjs/schema/validators/common.d.ts +28 -0
- package/build/cjs/schema/validators/common.js +26 -1
- package/build/cjs/schema/validators/common.js.map +1 -1
- package/build/cjs/text-transform/config.js +17 -0
- package/build/cjs/text-transform/config.js.map +1 -1
- package/build/esm/blocks/Header/Header.css +6 -0
- package/build/esm/blocks/Header/schema.js +2 -26
- package/build/esm/blocks/Header/schema.js.map +1 -1
- package/build/esm/blocks/Hero/Hero.css +205 -0
- package/build/esm/blocks/Hero/Hero.d.ts +4 -0
- package/build/esm/blocks/Hero/Hero.js +47 -0
- package/build/esm/blocks/Hero/Hero.js.map +1 -0
- package/build/esm/blocks/Hero/hooks.d.ts +4 -0
- package/build/esm/blocks/Hero/hooks.js +33 -0
- package/build/esm/blocks/Hero/hooks.js.map +1 -0
- package/build/esm/blocks/Hero/schema.d.ts +2076 -0
- package/build/esm/blocks/Hero/schema.js +62 -0
- package/build/esm/blocks/Hero/schema.js.map +1 -0
- package/build/esm/blocks/index.d.ts +1 -0
- package/build/esm/blocks/index.js +1 -0
- package/build/esm/blocks/index.js.map +1 -1
- package/build/esm/components/Buttons/Buttons.d.ts +2 -1
- package/build/esm/components/Buttons/Buttons.js +6 -3
- package/build/esm/components/Buttons/Buttons.js.map +1 -1
- package/build/esm/components/DefaultVideo/DefaultVideo.d.ts +1 -0
- package/build/esm/components/DefaultVideo/DefaultVideo.js +2 -2
- package/build/esm/components/DefaultVideo/DefaultVideo.js.map +1 -1
- package/build/esm/components/Image/Image.d.ts +5 -1
- package/build/esm/components/Image/Image.js +4 -2
- package/build/esm/components/Image/Image.js.map +1 -1
- package/build/esm/components/ImageBase/ImageBase.d.ts +2 -2
- package/build/esm/components/ImageBase/ImageBase.js +5 -4
- package/build/esm/components/ImageBase/ImageBase.js.map +1 -1
- package/build/esm/components/Media/Image/Image.d.ts +4 -0
- package/build/esm/components/Media/Image/Image.js +3 -3
- package/build/esm/components/Media/Image/Image.js.map +1 -1
- package/build/esm/components/Media/Media.js +8 -4
- package/build/esm/components/Media/Media.js.map +1 -1
- package/build/esm/components/Media/Video/Video.d.ts +5 -0
- package/build/esm/components/Media/Video/Video.js +30 -4
- package/build/esm/components/Media/Video/Video.js.map +1 -1
- package/build/esm/components/ReactPlayer/ReactPlayer.css +5 -0
- package/build/esm/components/ReactPlayer/ReactPlayer.d.ts +5 -0
- package/build/esm/components/ReactPlayer/ReactPlayer.js +13 -5
- package/build/esm/components/ReactPlayer/ReactPlayer.js.map +1 -1
- package/build/esm/components/Title/TitleItem.css +6 -0
- package/build/esm/constructor-items.d.ts +1 -0
- package/build/esm/constructor-items.js +2 -1
- package/build/esm/constructor-items.js.map +1 -1
- package/build/esm/context/imageContext/imageContext.d.ts +1 -1
- package/build/esm/context/imageContext/imageContext.js.map +1 -1
- package/build/esm/demo/ComponentsText.stories.js +3 -3
- package/build/esm/demo/ComponentsText.stories.js.map +1 -1
- package/build/esm/hooks/index.d.ts +1 -0
- package/build/esm/hooks/index.js +1 -0
- package/build/esm/hooks/index.js.map +1 -1
- package/build/esm/hooks/useImageSize.d.ts +8 -0
- package/build/esm/hooks/useImageSize.js +47 -0
- package/build/esm/hooks/useImageSize.js.map +1 -0
- package/build/esm/models/constructor-items/blocks.d.ts +22 -3
- package/build/esm/models/constructor-items/blocks.js +6 -1
- package/build/esm/models/constructor-items/blocks.js.map +1 -1
- package/build/esm/schema/constants.js +2 -1
- package/build/esm/schema/constants.js.map +1 -1
- package/build/esm/schema/validators/blocks.d.ts +1 -0
- package/build/esm/schema/validators/blocks.js +1 -0
- package/build/esm/schema/validators/blocks.js.map +1 -1
- package/build/esm/schema/validators/common.d.ts +28 -0
- package/build/esm/schema/validators/common.js +25 -0
- package/build/esm/schema/validators/common.js.map +1 -1
- package/build/esm/text-transform/config.js +17 -0
- package/build/esm/text-transform/config.js.map +1 -1
- package/package.json +1 -1
- package/schema/index.js +1 -1
- package/server/models/constructor-items/blocks.d.ts +22 -3
- package/server/models/constructor-items/blocks.js +6 -1
- package/server/text-transform/config.js +17 -0
- package/styles/mixins.scss +4 -0
- package/widget/index.js +1 -1
|
@@ -7,7 +7,7 @@ import ReactPlayerBlock from "../../ReactPlayer/ReactPlayer.js";
|
|
|
7
7
|
import './Video.css';
|
|
8
8
|
const b = block('media-component-video');
|
|
9
9
|
const Video = (props) => {
|
|
10
|
-
const { video, height, analyticsEvents, previewImg, playButton: commonPlayButton, customBarControlsClassName, videoClassName, playVideo, setHasVideoFallback, hasVideoFallback, qa, ratio, } = props;
|
|
10
|
+
const { video, height, analyticsEvents, previewImg, playButton: commonPlayButton, customBarControlsClassName, videoClassName, playVideo, disablePlayerAutoSizing, onIntrinsicSizeChange, setHasVideoFallback, hasVideoFallback, qa, ratio, } = props;
|
|
11
11
|
const qaAttributes = getQaAttrubutes(qa, 'source');
|
|
12
12
|
const ref = React.useRef(null);
|
|
13
13
|
React.useImperativeHandle(video.ref, () => ref.current, []);
|
|
@@ -18,23 +18,49 @@ const Video = (props) => {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
}, [playVideo, video, setHasVideoFallback]);
|
|
21
|
+
// to receive size even if the video has been loaded before hydration
|
|
22
|
+
// applies only to the 'default' video type ('player' does not render on server)
|
|
23
|
+
React.useEffect(() => {
|
|
24
|
+
const videoElement = ref.current;
|
|
25
|
+
if (video.type === MediaVideoType.Player || !videoElement) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (videoElement.readyState >= 1) {
|
|
29
|
+
onIntrinsicSizeChange?.({
|
|
30
|
+
width: videoElement.videoWidth,
|
|
31
|
+
height: videoElement.videoHeight,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35
|
+
}, [video.type]);
|
|
21
36
|
const reactPlayerBlock = React.useMemo(() => {
|
|
22
37
|
const { src, loop, controls, muted, autoplay = true, elapsedTime, playButton, ariaLabel, customControlsOptions, contain, } = video;
|
|
23
|
-
return (_jsx(ReactPlayerBlock, { ref: ref, className: b('react-player', videoClassName), src: src, previewImgUrl: previewImg, loop: loop, controls: controls, muted: muted, autoplay: autoplay && playVideo, elapsedTime: elapsedTime, playButton: playButton || commonPlayButton, customBarControlsClassName: customBarControlsClassName, analyticsEvents: analyticsEvents, height: height, ariaLabel: ariaLabel, customControlsOptions: customControlsOptions, ratio: ratio === 'auto' ? undefined : ratio, autoRatio: ratio === 'auto', contain: contain }));
|
|
38
|
+
return (_jsx(ReactPlayerBlock, { ref: ref, className: b('react-player', videoClassName), src: src, previewImgUrl: previewImg, loop: loop, controls: controls, muted: muted, autoplay: autoplay && playVideo, elapsedTime: elapsedTime, playButton: playButton || commonPlayButton, customBarControlsClassName: customBarControlsClassName, analyticsEvents: analyticsEvents, height: height, ariaLabel: ariaLabel, customControlsOptions: customControlsOptions, ratio: ratio === 'auto' ? undefined : ratio, autoRatio: ratio === 'auto', contain: contain, disableAutoSizing: disablePlayerAutoSizing, onIntrinsicSizeChange: onIntrinsicSizeChange }));
|
|
24
39
|
}, [
|
|
25
40
|
video,
|
|
26
|
-
height,
|
|
27
41
|
videoClassName,
|
|
28
42
|
previewImg,
|
|
29
43
|
playVideo,
|
|
30
44
|
commonPlayButton,
|
|
31
45
|
customBarControlsClassName,
|
|
32
46
|
analyticsEvents,
|
|
47
|
+
height,
|
|
33
48
|
ratio,
|
|
49
|
+
disablePlayerAutoSizing,
|
|
50
|
+
onIntrinsicSizeChange,
|
|
34
51
|
]);
|
|
35
52
|
const defaultVideoBlock = React.useMemo(() => {
|
|
36
|
-
|
|
53
|
+
const onLoadedMetadata = onIntrinsicSizeChange &&
|
|
54
|
+
((e) => {
|
|
55
|
+
const videoElement = e.currentTarget;
|
|
56
|
+
onIntrinsicSizeChange({
|
|
57
|
+
width: videoElement.videoWidth,
|
|
58
|
+
height: videoElement.videoHeight,
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
return video.src.length && !hasVideoFallback ? (_jsx("div", { className: b('wrap', videoClassName), style: { height }, "data-qa": qaAttributes.default, children: _jsx(DefaultVideo, { ref: ref, video: video, qa: qaAttributes.source, onLoadedMetadata: onLoadedMetadata }) })) : null;
|
|
37
62
|
}, [
|
|
63
|
+
onIntrinsicSizeChange,
|
|
38
64
|
video,
|
|
39
65
|
hasVideoFallback,
|
|
40
66
|
videoClassName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Video.js","sourceRoot":"../../../../../src","sources":["components/Media/Video/Video.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAA2B,cAAc,EAA2B,iCAAwB;AACnG,OAAO,EAAC,KAAK,EAAE,eAAe,EAAC,gCAAuB;AACtD,OAAO,EAAC,YAAY,EAAC,2CAAwC;AAC7D,OAAO,gBAAgB,yCAAsC;AAE7D,OAAO,aAAa,CAAC;AAErB,MAAM,CAAC,GAAG,KAAK,CAAC,uBAAuB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Video.js","sourceRoot":"../../../../../src","sources":["components/Media/Video/Video.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {MediaComponentVideoProps, MediaVideoType, PlayButtonProps, QAProps} from '../../../models';\nimport {block, getQaAttrubutes} from '../../../utils';\nimport {DefaultVideo} from '../../DefaultVideo/DefaultVideo';\nimport ReactPlayerBlock from '../../ReactPlayer/ReactPlayer';\n\nimport './Video.scss';\n\nconst b = block('media-component-video');\n\nexport interface VideoAdditionProps {\n playButton?: PlayButtonProps;\n customBarControlsClassName?: string;\n videoClassName?: string;\n playVideo?: boolean;\n disablePlayerAutoSizing?: boolean;\n onIntrinsicSizeChange?: (size: {width: number; height: number}) => void;\n}\n\ninterface InnerVideoProps {\n setHasVideoFallback: React.Dispatch<boolean>;\n hasVideoFallback: boolean;\n}\n\nexport type VideoAllProps = VideoAdditionProps &\n MediaComponentVideoProps &\n InnerVideoProps &\n QAProps;\n\nconst Video = (props: VideoAllProps) => {\n const {\n video,\n height,\n analyticsEvents,\n previewImg,\n playButton: commonPlayButton,\n customBarControlsClassName,\n videoClassName,\n playVideo,\n disablePlayerAutoSizing,\n onIntrinsicSizeChange,\n setHasVideoFallback,\n hasVideoFallback,\n qa,\n ratio,\n } = props;\n\n const qaAttributes = getQaAttrubutes(qa, 'source');\n\n const ref = React.useRef<HTMLVideoElement>(null);\n\n React.useImperativeHandle(video.ref, () => ref.current, []);\n\n React.useEffect(() => {\n if (ref && ref.current) {\n if (playVideo) {\n ref.current.play().catch(() => setHasVideoFallback(true));\n }\n }\n }, [playVideo, video, setHasVideoFallback]);\n\n // to receive size even if the video has been loaded before hydration\n // applies only to the 'default' video type ('player' does not render on server)\n React.useEffect(() => {\n const videoElement = ref.current;\n if (video.type === MediaVideoType.Player || !videoElement) {\n return;\n }\n\n if (videoElement.readyState >= 1) {\n onIntrinsicSizeChange?.({\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [video.type]);\n\n const reactPlayerBlock = React.useMemo(() => {\n const {\n src,\n loop,\n controls,\n muted,\n autoplay = true,\n elapsedTime,\n playButton,\n ariaLabel,\n customControlsOptions,\n contain,\n } = video;\n\n return (\n <ReactPlayerBlock\n ref={ref}\n className={b('react-player', videoClassName)}\n src={src}\n previewImgUrl={previewImg}\n loop={loop}\n controls={controls}\n muted={muted}\n autoplay={autoplay && playVideo}\n elapsedTime={elapsedTime}\n playButton={playButton || commonPlayButton}\n customBarControlsClassName={customBarControlsClassName}\n analyticsEvents={analyticsEvents}\n height={height}\n ariaLabel={ariaLabel}\n customControlsOptions={customControlsOptions}\n ratio={ratio === 'auto' ? undefined : ratio}\n autoRatio={ratio === 'auto'}\n contain={contain}\n disableAutoSizing={disablePlayerAutoSizing}\n onIntrinsicSizeChange={onIntrinsicSizeChange}\n />\n );\n }, [\n video,\n videoClassName,\n previewImg,\n playVideo,\n commonPlayButton,\n customBarControlsClassName,\n analyticsEvents,\n height,\n ratio,\n disablePlayerAutoSizing,\n onIntrinsicSizeChange,\n ]);\n\n const defaultVideoBlock = React.useMemo(() => {\n const onLoadedMetadata: React.ReactEventHandler<HTMLVideoElement> | undefined =\n onIntrinsicSizeChange &&\n ((e) => {\n const videoElement = e.currentTarget;\n\n onIntrinsicSizeChange({\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n });\n });\n\n return video.src.length && !hasVideoFallback ? (\n <div\n className={b('wrap', videoClassName)}\n style={{height}}\n data-qa={qaAttributes.default}\n >\n <DefaultVideo\n ref={ref}\n video={video}\n qa={qaAttributes.source}\n onLoadedMetadata={onLoadedMetadata}\n />\n </div>\n ) : null;\n }, [\n onIntrinsicSizeChange,\n video,\n hasVideoFallback,\n videoClassName,\n height,\n qaAttributes.default,\n qaAttributes.source,\n ]);\n\n switch (video.type) {\n case MediaVideoType.Player:\n return reactPlayerBlock;\n case MediaVideoType.Default:\n default:\n return defaultVideoBlock;\n }\n};\n\nexport default Video;\n"]}
|
|
@@ -4,6 +4,11 @@ unpredictable css rules order in build */
|
|
|
4
4
|
background-color: var(--pc-color-video-player-bg, #000);
|
|
5
5
|
object-fit: cover;
|
|
6
6
|
}
|
|
7
|
+
.pc-ReactPlayer__preview-img {
|
|
8
|
+
width: 100%;
|
|
9
|
+
height: 100%;
|
|
10
|
+
pointer-events: none;
|
|
11
|
+
}
|
|
7
12
|
.pc-ReactPlayer__wrapper {
|
|
8
13
|
position: relative;
|
|
9
14
|
padding-top: 56.25%;
|
|
@@ -10,6 +10,11 @@ export interface ReactPlayerBlockProps extends Omit<MediaVideoProps, 'src' | 're
|
|
|
10
10
|
height?: number;
|
|
11
11
|
ratio?: number;
|
|
12
12
|
autoRatio?: boolean;
|
|
13
|
+
disableAutoSizing?: boolean;
|
|
14
|
+
onIntrinsicSizeChange?: (size: {
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
}) => void;
|
|
13
18
|
children?: React.ReactNode;
|
|
14
19
|
}
|
|
15
20
|
export declare const ReactPlayerBlock: React.ForwardRefExoticComponent<ReactPlayerBlockProps & React.RefAttributes<ReactPlayerBlockHandler>>;
|
|
@@ -6,7 +6,7 @@ import debounce from "lodash/debounce.js";
|
|
|
6
6
|
import _ReactPlayer from 'react-player';
|
|
7
7
|
import { MobileContext } from "../../context/mobileContext/index.js";
|
|
8
8
|
import { VideoContext } from "../../context/videoContext/index.js";
|
|
9
|
-
import { useAnalytics, useMount } from "../../hooks/index.js";
|
|
9
|
+
import { useAnalytics, useImageSize, useMount } from "../../hooks/index.js";
|
|
10
10
|
import { CustomControlsButtonPositioning, CustomControlsType, DefaultEventNames, MediaVideoControlsType, PlayButtonThemes, PlayButtonType, PredefinedEventTypes, } from "../../models/index.js";
|
|
11
11
|
import { block } from "../../utils/index.js";
|
|
12
12
|
import CustomBarControls from "./CustomBarControls.js";
|
|
@@ -22,7 +22,7 @@ const ReactPlayer = 'default' in _ReactPlayer && _ReactPlayer.default
|
|
|
22
22
|
// eslint-disable-next-line react/display-name
|
|
23
23
|
export const ReactPlayerBlock = React.forwardRef((props, originRef) => {
|
|
24
24
|
const isMobile = React.useContext(MobileContext);
|
|
25
|
-
const { src, previewImgUrl, loop = false, controls = MediaVideoControlsType.Default, customControlsOptions = {}, muted: initiallyMuted = false, elapsedTime, playButton, className, customBarControlsClassName, showPreview, onClickPreview, analyticsEvents, height, ariaLabel, ratio, autoRatio, contain = true, } = props;
|
|
25
|
+
const { src, previewImgUrl, loop = false, controls = MediaVideoControlsType.Default, customControlsOptions = {}, muted: initiallyMuted = false, elapsedTime, playButton, className, customBarControlsClassName, showPreview, onClickPreview, onIntrinsicSizeChange, disableAutoSizing, analyticsEvents, height, ariaLabel, ratio, autoRatio, contain = true, } = props;
|
|
26
26
|
const { type = PlayButtonType.Default, theme = PlayButtonThemes.Blue, text, className: buttonClassName, } = playButton || {};
|
|
27
27
|
const { type: customControlsType = CustomControlsType.WithMuteButton, muteButtonShown, positioning = CustomControlsButtonPositioning.Center, } = customControlsOptions;
|
|
28
28
|
const autoPlay = Boolean(!isMobile && !previewImgUrl && props.autoplay);
|
|
@@ -44,6 +44,9 @@ export const ReactPlayerBlock = React.forwardRef((props, originRef) => {
|
|
|
44
44
|
const [hovered, setHovered] = React.useState(isMobile);
|
|
45
45
|
useMount(() => setIsMounted(true));
|
|
46
46
|
const videoSrc = React.useMemo(() => checkYoutubeVideos(src), [src]);
|
|
47
|
+
const { imageRef: previewImgRef, onLoad: onPreviewImgLoad } = useImageSize({
|
|
48
|
+
onIntrinsicSizeChange,
|
|
49
|
+
});
|
|
47
50
|
const eventsArray = React.useMemo(() => {
|
|
48
51
|
if (analyticsEvents) {
|
|
49
52
|
return Array.isArray(analyticsEvents) ? analyticsEvents : [analyticsEvents];
|
|
@@ -98,6 +101,9 @@ export const ReactPlayerBlock = React.forwardRef((props, originRef) => {
|
|
|
98
101
|
}
|
|
99
102
|
}, [elapsedTime, playerRef, started]);
|
|
100
103
|
React.useEffect(() => {
|
|
104
|
+
if (disableAutoSizing) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
101
107
|
const updateSize = debounce(() => {
|
|
102
108
|
if (ref.current) {
|
|
103
109
|
// We need to get parent's width does not equal 0
|
|
@@ -112,10 +118,11 @@ export const ReactPlayerBlock = React.forwardRef((props, originRef) => {
|
|
|
112
118
|
}, 200);
|
|
113
119
|
updateSize();
|
|
114
120
|
window.addEventListener('resize', updateSize, { passive: true });
|
|
121
|
+
// eslint-disable-next-line consistent-return
|
|
115
122
|
return () => {
|
|
116
123
|
window.removeEventListener('resize', updateSize);
|
|
117
124
|
};
|
|
118
|
-
}, [actualRatio, autoRatio, ratio]);
|
|
125
|
+
}, [actualRatio, autoRatio, disableAutoSizing, playerRef, ratio]);
|
|
119
126
|
const playEvents = React.useMemo(() => eventsArray?.filter((e) => e.type === PredefinedEventTypes.Play), [eventsArray]);
|
|
120
127
|
const stopEvents = React.useMemo(() => eventsArray?.filter((e) => e.type === PredefinedEventTypes.Stop), [eventsArray]);
|
|
121
128
|
const playIcon = React.useMemo(() => {
|
|
@@ -192,8 +199,9 @@ export const ReactPlayerBlock = React.forwardRef((props, originRef) => {
|
|
|
192
199
|
const videoHeight = videoElement.videoHeight;
|
|
193
200
|
if (videoWidth && videoHeight) {
|
|
194
201
|
setActualRatio(videoHeight / videoWidth);
|
|
202
|
+
onIntrinsicSizeChange?.({ width: videoWidth, height: videoHeight });
|
|
195
203
|
}
|
|
196
|
-
}, []);
|
|
204
|
+
}, [onIntrinsicSizeChange]);
|
|
197
205
|
const onProgress = React.useCallback(({ played, playedSeconds }) => {
|
|
198
206
|
setPlayedPercent(played);
|
|
199
207
|
if (loop) {
|
|
@@ -248,7 +256,7 @@ export const ReactPlayerBlock = React.forwardRef((props, originRef) => {
|
|
|
248
256
|
controls,
|
|
249
257
|
contain,
|
|
250
258
|
'auto-ratio': autoRatio,
|
|
251
|
-
}, className), ref: ref, onClick: handleClick, onMouseEnter: onFocusIn, onMouseLeave: onFocusOut, onFocus: onFocusIn, onBlur: onFocusOut, onKeyDown: handleKeyDown, role: "button", tabIndex: 0, children: isMounted ? (_jsxs(React.Fragment, { children: [_jsx(ReactPlayer, { className: b('player'), url: videoSrc, muted: muted, controls: controls === MediaVideoControlsType.Default, height: currentHeight || '100%', width: width || '100%', light: previewImgUrl, playing: isPlaying, playIcon: playIcon, progressInterval: FPS, onClickPreview: handleClickPreview, onStart: onStart, onReady: onReady, onPlay: onPlay, onPause: autoPlay && customControlsType !== CustomControlsType.WithMuteButton
|
|
259
|
+
}, className), ref: ref, onClick: handleClick, onMouseEnter: onFocusIn, onMouseLeave: onFocusOut, onFocus: onFocusIn, onBlur: onFocusOut, onKeyDown: handleKeyDown, role: "button", tabIndex: 0, children: isMounted ? (_jsxs(React.Fragment, { children: [_jsx(ReactPlayer, { className: b('player'), url: videoSrc, muted: muted, controls: controls === MediaVideoControlsType.Default, height: currentHeight || '100%', width: width || '100%', light: previewImgUrl && (_jsx("img", { className: b('preview-img'), src: previewImgUrl, onLoad: onPreviewImgLoad, alt: "", "aria-hidden": true, ref: previewImgRef })), playing: isPlaying, playIcon: playIcon, progressInterval: FPS, onClickPreview: handleClickPreview, onStart: onStart, onReady: onReady, onPlay: onPlay, onPause: autoPlay && customControlsType !== CustomControlsType.WithMuteButton
|
|
252
260
|
? undefined
|
|
253
261
|
: onPause, onProgress: onProgress, onEnded: onEnded, onDuration: onDuration, "aria-label": ariaLabel, previewTabIndex: -1, config: {
|
|
254
262
|
file: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactPlayer.js","sourceRoot":"../../../../src","sources":["components/ReactPlayer/ReactPlayer.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAC,IAAI,EAAC,MAAM,mBAAmB,CAAC;AACvC,OAAO,QAAQ,2BAAwB;AACvC,OAAO,YAAY,MAAM,cAAc,CAAC;AAGxC,OAAO,EAAC,aAAa,EAAC,6CAAoC;AAC1D,OAAO,EAAC,YAAY,EAAC,4CAAmC;AACxD,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,6BAAoB;AACnD,OAAO,EAGH,+BAA+B,EAC/B,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EAGtB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,GAEvB,8BAAqB;AACtB,OAAO,EAAC,KAAK,EAAC,6BAAoB;AAElC,OAAO,iBAAiB,+BAA4B;AACpD,OAAO,EAAC,IAAI,EAAC,wBAAe;AAC5B,OAAO,EAAC,kBAAkB,EAAC,mBAAgB;AAC3C,OAAO,EAAC,uBAAuB,EAAC,2BAAwB;AAExD,OAAO,mBAAmB,CAAC;AAE3B,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;AAE/B,MAAM,GAAG,GAAG,EAAE,CAAC;AAEf,MAAM,WAAW,GACb,SAAS,IAAI,YAAY,IAAI,YAAY,CAAC,OAAO;IAC7C,CAAC,CAAE,YAAY,CAAC,OAA+B;IAC/C,CAAC,CAAC,YAAY,CAAC;AAqBvB,8CAA8C;AAC9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAC5C,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;IACjB,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACjD,MAAM,EACF,GAAG,EACH,aAAa,EACb,IAAI,GAAG,KAAK,EACZ,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EACzC,qBAAqB,GAAG,EAAE,EAC1B,KAAK,EAAE,cAAc,GAAG,KAAK,EAC7B,WAAW,EACX,UAAU,EACV,SAAS,EACT,0BAA0B,EAC1B,WAAW,EACX,cAAc,EACd,eAAe,EACf,MAAM,EACN,SAAS,EACT,KAAK,EACL,SAAS,EACT,OAAO,GAAG,IAAI,GACjB,GAAG,KAAK,CAAC;IAEV,MAAM,EACF,IAAI,GAAG,cAAc,CAAC,OAAO,EAC7B,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAC7B,IAAI,EACJ,SAAS,EAAE,eAAe,GAC7B,GAAG,UAAU,IAAK,EAAsB,CAAC;IAC1C,MAAM,EACF,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,CAAC,cAAc,EAC5D,eAAe,EACf,WAAW,GAAG,+BAA+B,CAAC,MAAM,GACvD,GAAG,qBAAqB,CAAC;IAE1B,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,QAAQ,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,cAAc,IAAI,QAAQ,CAAC;IAExC,MAAM,EAAC,eAAe,EAAE,QAAQ,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAEnE,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAoB,IAAI,CAAC,CAAC;IAExD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAgB,CAAC;IACjE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAS,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAS,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAU,CAAC;IAC/D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAU,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,CAAC;IACzD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEvD,QAAQ,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACnC,IAAI,eAAe,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IACtB,MAAM,eAAe,GAAG,YAAY,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IAE5E,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,EAAE;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO;QACX,CAAC;QAED,IAAI,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAAC;QAClC,MAAM,aAAa,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;QACpD,IAAI,uBAAuB,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,CAAC,EAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAC,GAAG,aAAa,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACJ,oEAAoE;YACpE,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAC,GAAG,aAAa,CAAC,CAAC;QACtD,CAAC;QAED,6CAA6C;QAC7C,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;YAC9B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;YAChC,gBAAgB,EAAE,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;SACzD,CAAC;IACN,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACL,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,WAAW,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7B,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAEnC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;YACxB,UAAU,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YAChD,SAAS,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC;IACL,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAEtC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,EAAE;YAC7B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,iDAAiD;gBACjD,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpD,MAAM,EAAC,WAAW,EAAE,YAAY,EAAC,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;gBACpE,MAAM,QAAQ,GACV,aAAa,CAAC,WAAW;oBACzB,UAAU,CAAC,WAAW,CAAC;oBACvB,UAAU,CAAC,YAAY,CAAC,CAAC;gBAE7B,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACnB,gBAAgB,CACZ,IAAI,CAAC,KAAK,CACN,SAAS,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CACtE,CACJ,CAAC;YACN,CAAC;QACL,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,UAAU,EAAE,CAAC;QACb,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;QAC/D,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACrD,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC5B,GAAG,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,IAAI,CAAC,EACtF,CAAC,WAAW,CAAC,CAChB,CAAC;IACF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC5B,GAAG,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,IAAI,CAAC,EACtF,CAAC,WAAW,CAAC,CAChB,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAChC,IAAI,iBAAiB,CAAC;QAEtB,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,cAAc,CAAC,IAAI;gBACpB,iBAAiB,GAAG,IAAI,CAAC;gBACzB,MAAM;YACV,KAAK,cAAc,CAAC,OAAO,CAAC;YAC5B;gBACI,iBAAiB,GAAG,KAAC,IAAI,IAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAI,CAAC;gBAC7E,MAAM;QACd,CAAC;QAED,OAAO,CACH,iBACI,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAC,EAAE,eAAe,CAAC,gBACzD,IAAI,CAAC,MAAM,CAAC,EACxB,GAAG,EAAE,SAAS,YAEb,iBAAiB,GACb,CACZ,CAAC;IACN,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAEzC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAChC,CAAC,OAAgB,EAAE,EAAE;QACjB,IACI,OAAO;YACP,SAAS;YACT,QAAQ,KAAK,sBAAsB,CAAC,MAAM;YAC1C,kBAAkB,KAAK,kBAAkB,CAAC,cAAc,EAC1D,CAAC;YACC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;QACjD,eAAe,CAAC,MAAM,CAAC,CAAC;QAExB,IAAI,OAAO,EAAE,CAAC;YACV,QAAQ,CAAC,EAAC,eAAe,EAAE,GAAG,CAAC,OAAO,EAAC,CAAC,CAAC;QAC7C,CAAC;QAED,sEAAsE;QACtE,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC,EACD;QACI,SAAS;QACT,kBAAkB;QAClB,UAAU;QACV,UAAU;QACV,eAAe;QACf,QAAQ;QACR,QAAQ;KACX,CACJ,CAAC;IAEF,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC9C,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,cAAc,EAAE,EAAE,CAAC;QAEnB,eAAe,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnC,wCAAwC;QACxC,IACI,QAAQ,KAAK,sBAAsB,CAAC,MAAM;YAC1C,kBAAkB,KAAK,kBAAkB,CAAC,cAAc,EAC1D,CAAC;YACC,YAAY,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnC,IAAI,CAAC,QAAQ,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/B,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;IAE/B,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAClC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEnB,IACI,QAAQ,KAAK,sBAAsB,CAAC,MAAM;YAC1C,kBAAkB,KAAK,kBAAkB,CAAC,cAAc,EAC1D,CAAC;YACC,IAAI,KAAK,EAAE,CAAC;gBACR,UAAU,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;iBAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,UAAU,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YACD,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAExE,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAoB,EAAE,EAAE;QACvD,YAAY,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,YAAY,CAAC,UAAgC,CAAC;QACjE,MAAM,WAAW,GAAG,YAAY,CAAC,WAAiC,CAAC;QACnE,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;YAC5B,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAmC,KAAK,CAAC,WAAW,CAChE,CAAC,EAAC,MAAM,EAAE,aAAa,EAAkB,EAAE,EAAE;QACzC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEzB,IAAI,IAAI,EAAE,CAAC;YACP,MAAM,EAAC,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,EAAC,GAAG,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAE1E,oEAAoE;YACpE,sDAAsD;YACtD,8EAA8E;YAC9E,IAAI,GAAG,KAAK,IAAI,IAAI,aAAa,IAAI,GAAG,EAAE,CAAC;gBACvC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACL,CAAC,EACD,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAC9B,CAAC;IAEF,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,eAAuB,EAAE,EAAE;QAC7D,WAAW,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACvC,IAAI,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACd,CAAC;aAAM,CAAC;YACJ,MAAM,EAAE,CAAC;QACb,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEjC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACvC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAE3B,IAAI,QAAQ,KAAK,sBAAsB,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,kBAAkB,KAAK,kBAAkB,CAAC,cAAc,EAAE,CAAC;gBAC3D,UAAU,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACJ,WAAW,EAAE,CAAC;YAClB,CAAC;QACL,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IAEnE,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAsB,EAAE,EAAE;QAC/D,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAEhC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAClB,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC/B,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAElE,OAAO,CACH,cACI,SAAS,EAAE,CAAC,CACR;YACI,OAAO,EAAE,CAAC,aAAa;YACvB,QAAQ;YACR,OAAO;YACP,YAAY,EAAE,SAAS;SAC1B,EACD,SAAS,CACZ,EACD,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,SAAS,EACvB,YAAY,EAAE,UAAU,EACxB,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,YAEV,SAAS,CAAC,CAAC,CAAC,CACT,MAAC,KAAK,CAAC,QAAQ,eACX,KAAC,WAAW,IACR,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,EACtB,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,KAAK,sBAAsB,CAAC,OAAO,EACrD,MAAM,EAAE,aAAa,IAAI,MAAM,EAC/B,KAAK,EAAE,KAAK,IAAI,MAAM,EACtB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,GAAG,EACrB,cAAc,EAAE,kBAAkB,EAClC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EACH,QAAQ,IAAI,kBAAkB,KAAK,kBAAkB,CAAC,cAAc;wBAChE,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,OAAO,EAEjB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,gBACV,SAAS,EACrB,eAAe,EAAE,CAAC,CAAC,EACnB,MAAM,EAAE;wBACJ,IAAI,EAAE;4BACF,UAAU,EAAE;gCACR,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;gCACnC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;gCACtC,uBAAuB,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;6BACrD;yBACJ;qBACJ,GACH,EACD,QAAQ,KAAK,sBAAsB,CAAC,MAAM,IAAI,CAC3C,KAAC,iBAAiB,IACd,SAAS,EAAE,0BAA0B,EACrC,IAAI,EAAE;wBACF,OAAO,EAAE,KAAK;wBACd,UAAU,EAAE,CAAC,KAAuB,EAAE,EAAE;4BACpC,KAAK,CAAC,eAAe,EAAE,CAAC;4BACxB,UAAU,CAAC,KAAK,CAAC,CAAC;wBACtB,CAAC;qBACJ,EACD,kBAAkB,EAAE,aAAa,EACjC,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,CAAC,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,EAC3D,WAAW,EAAE,WAAW,GAC1B,CACL,IACY,CACpB,CAAC,CAAC,CAAC,IAAI,GACN,CACT,CAAC;AACN,CAAC,CACJ,CAAC;AAEF,SAAS,SAAS,CAAC,KAAa,EAAE,QAAgB,CAAC,GAAG,EAAE;IACpD,OAAO,KAAK,GAAG,KAAK,CAAC;AACzB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAoB;IAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAE5C,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;AACvF,CAAC;AAED,eAAe,gBAAgB,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {PlayFill} from '@gravity-ui/icons';\nimport {Icon} from '@gravity-ui/uikit';\nimport debounce from 'lodash/debounce';\nimport _ReactPlayer from 'react-player';\nimport type {ReactPlayerProps} from 'react-player';\n\nimport {MobileContext} from '../../context/mobileContext';\nimport {VideoContext} from '../../context/videoContext';\nimport {useAnalytics, useMount} from '../../hooks';\nimport {\n AnalyticsEvent,\n ClassNameProps,\n CustomControlsButtonPositioning,\n CustomControlsType,\n DefaultEventNames,\n MediaVideoControlsType,\n MediaVideoProps,\n PlayButtonProps,\n PlayButtonThemes,\n PlayButtonType,\n PredefinedEventTypes,\n ReactPlayerBlockHandler,\n} from '../../models';\nimport {block} from '../../utils';\n\nimport CustomBarControls from './CustomBarControls';\nimport {i18n} from './i18n';\nimport {checkYoutubeVideos} from './utils';\nimport {isYoutubePlayerInstance} from './utils/youtube';\n\nimport './ReactPlayer.scss';\n\nconst b = block('ReactPlayer');\n\nconst FPS = 60;\n\nconst ReactPlayer =\n 'default' in _ReactPlayer && _ReactPlayer.default\n ? (_ReactPlayer.default as typeof _ReactPlayer)\n : _ReactPlayer;\n\nexport interface ReactPlayerBlockProps\n extends Omit<MediaVideoProps, 'src' | 'ref'>,\n ClassNameProps {\n src: string | string[];\n previewImgUrl?: string;\n customBarControlsClassName?: string;\n showPreview?: boolean;\n onClickPreview?: () => void;\n height?: number;\n ratio?: number;\n autoRatio?: boolean;\n children?: React.ReactNode;\n}\n\ninterface PlayerPropgress {\n played: number;\n playedSeconds: number;\n}\n\n// eslint-disable-next-line react/display-name\nexport const ReactPlayerBlock = React.forwardRef<ReactPlayerBlockHandler, ReactPlayerBlockProps>(\n (props, originRef) => {\n const isMobile = React.useContext(MobileContext);\n const {\n src,\n previewImgUrl,\n loop = false,\n controls = MediaVideoControlsType.Default,\n customControlsOptions = {},\n muted: initiallyMuted = false,\n elapsedTime,\n playButton,\n className,\n customBarControlsClassName,\n showPreview,\n onClickPreview,\n analyticsEvents,\n height,\n ariaLabel,\n ratio,\n autoRatio,\n contain = true,\n } = props;\n\n const {\n type = PlayButtonType.Default,\n theme = PlayButtonThemes.Blue,\n text,\n className: buttonClassName,\n } = playButton || ({} as PlayButtonProps);\n const {\n type: customControlsType = CustomControlsType.WithMuteButton,\n muteButtonShown,\n positioning = CustomControlsButtonPositioning.Center,\n } = customControlsOptions;\n\n const autoPlay = Boolean(!isMobile && !previewImgUrl && props.autoplay);\n const mute = initiallyMuted || autoPlay;\n\n const {playingVideoRef, setProps} = React.useContext(VideoContext);\n\n const ref = React.useRef<HTMLDivElement>(null);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n const [playerRef, setPlayerRef] = React.useState<_ReactPlayer>();\n const [isPlaying, setIsPlaying] = React.useState(autoPlay);\n const [playedPercent, setPlayedPercent] = React.useState<number>(0);\n const [currentHeight, setCurrentHeight] = React.useState(height);\n const [duration, setDuration] = React.useState<null | number>(null);\n const [width, setWidth] = React.useState<number>(0);\n const [actualRatio, setActualRatio] = React.useState<number>();\n const [muted, setMuted] = React.useState<boolean>(mute);\n const [started, setStarted] = React.useState(autoPlay);\n const [ended, setEnded] = React.useState<boolean>(false);\n const [isMounted, setIsMounted] = React.useState(false);\n const [hovered, setHovered] = React.useState(isMobile);\n\n useMount(() => setIsMounted(true));\n\n const videoSrc = React.useMemo(() => checkYoutubeVideos(src), [src]);\n\n const eventsArray = React.useMemo(() => {\n if (analyticsEvents) {\n return Array.isArray(analyticsEvents) ? analyticsEvents : [analyticsEvents];\n }\n\n return [];\n }, [analyticsEvents]);\n const handleAnalytics = useAnalytics(DefaultEventNames.ReactPlayerControls);\n\n React.useImperativeHandle(originRef, () => {\n if (!playerRef) {\n return;\n }\n\n let play, pause, addEventListener;\n const videoInstance = playerRef.getInternalPlayer();\n if (isYoutubePlayerInstance(videoInstance)) {\n ({pauseVideo: pause, playVideo: play, addEventListener} = videoInstance);\n } else {\n // it is assumed that `videoInstance` is HTMLVideoElement by default\n ({play, pause, addEventListener} = videoInstance);\n }\n\n // eslint-disable-next-line consistent-return\n return {\n play: play.bind(videoInstance),\n pause: pause.bind(videoInstance),\n addEventListener: addEventListener.bind(videoInstance),\n };\n }, [playerRef]);\n\n React.useEffect(() => {\n if (ref.current && !playingVideoRef?.contains(ref.current)) {\n setMuted(true);\n }\n }, [playingVideoRef]);\n\n React.useEffect(() => {\n if (showPreview) {\n playerRef?.showPreview();\n }\n }, [showPreview, playerRef]);\n\n React.useEffect(() => {\n if (playerRef && !started) {\n setIsPlaying(autoPlay);\n }\n }, [autoPlay, playerRef, started]);\n\n React.useEffect(() => setMuted(mute), [mute]);\n\n React.useEffect(() => {\n if (!started && isPlaying) {\n setStarted(true);\n }\n }, [isPlaying, started]);\n\n React.useEffect(() => {\n if (started && !Number.isNaN(Number(elapsedTime))) {\n playerRef?.seekTo(elapsedTime ?? 0, 'seconds');\n }\n }, [elapsedTime, playerRef, started]);\n\n React.useEffect(() => {\n const updateSize = debounce(() => {\n if (ref.current) {\n // We need to get parent's width does not equal 0\n const parentElement = getParentElement(ref.current);\n const {paddingLeft, paddingRight} = getComputedStyle(parentElement);\n const newWidth =\n parentElement.offsetWidth -\n parseFloat(paddingLeft) -\n parseFloat(paddingRight);\n\n setWidth(newWidth);\n setCurrentHeight(\n Math.floor(\n getHeight(newWidth, ratio ?? (autoRatio ? actualRatio : undefined)),\n ),\n );\n }\n }, 200);\n\n updateSize();\n window.addEventListener('resize', updateSize, {passive: true});\n return () => {\n window.removeEventListener('resize', updateSize);\n };\n }, [actualRatio, autoRatio, ratio]);\n\n const playEvents = React.useMemo(\n () => eventsArray?.filter((e: AnalyticsEvent) => e.type === PredefinedEventTypes.Play),\n [eventsArray],\n );\n const stopEvents = React.useMemo(\n () => eventsArray?.filter((e: AnalyticsEvent) => e.type === PredefinedEventTypes.Stop),\n [eventsArray],\n );\n\n const playIcon = React.useMemo(() => {\n let playButtonContent;\n\n switch (type) {\n case PlayButtonType.Text:\n playButtonContent = text;\n break;\n case PlayButtonType.Default:\n default:\n playButtonContent = <Icon className={b('icon')} data={PlayFill} size={24} />;\n break;\n }\n\n return (\n <button\n className={b('button', {theme, text: Boolean(text)}, buttonClassName)}\n aria-label={i18n('play')}\n ref={buttonRef}\n >\n {playButtonContent}\n </button>\n );\n }, [type, theme, text, buttonClassName]);\n\n const changeMute = React.useCallback(\n (isMuted: boolean) => {\n if (\n isMuted &&\n playerRef &&\n controls === MediaVideoControlsType.Custom &&\n customControlsType === CustomControlsType.WithMuteButton\n ) {\n playerRef.seekTo(0);\n setPlayedPercent(0);\n }\n\n const events = isMuted ? playEvents : stopEvents;\n handleAnalytics(events);\n\n if (isMuted) {\n setProps({playingVideoRef: ref.current});\n }\n\n // In order to the progress bar to update (equals 0) before displaying\n setTimeout(() => setMuted(!isMuted), 0);\n },\n [\n playerRef,\n customControlsType,\n playEvents,\n stopEvents,\n handleAnalytics,\n setProps,\n controls,\n ],\n );\n\n const handleClickPreview = React.useCallback(() => {\n setIsPlaying(true);\n onClickPreview?.();\n\n handleAnalytics(playEvents);\n }, [onClickPreview, handleAnalytics, playEvents]);\n\n const onPause = React.useCallback(() => {\n // For support correct state for youtube\n if (\n controls !== MediaVideoControlsType.Custom ||\n customControlsType !== CustomControlsType.WithMuteButton\n ) {\n setIsPlaying(false);\n }\n }, [controls, customControlsType]);\n\n const onStart = React.useCallback(() => {\n if (!autoPlay && !initiallyMuted) {\n setMuted(false);\n }\n }, [autoPlay, initiallyMuted]);\n\n const onPlay = React.useCallback(() => {\n setIsPlaying(true);\n\n if (\n controls === MediaVideoControlsType.Custom &&\n customControlsType === CustomControlsType.WithMuteButton\n ) {\n if (ended) {\n changeMute(false);\n } else if (!isPlaying) {\n changeMute(muted);\n }\n setEnded(false);\n }\n }, [changeMute, controls, customControlsType, ended, isPlaying, muted]);\n\n const onReady = React.useCallback((player: _ReactPlayer) => {\n setPlayerRef(player);\n const videoElement = player.getInternalPlayer();\n const videoWidth = videoElement.videoWidth as number | undefined;\n const videoHeight = videoElement.videoHeight as number | undefined;\n if (videoWidth && videoHeight) {\n setActualRatio(videoHeight / videoWidth);\n }\n }, []);\n\n const onProgress: ReactPlayerProps['onProgress'] = React.useCallback(\n ({played, playedSeconds}: PlayerPropgress) => {\n setPlayedPercent(played);\n\n if (loop) {\n const {start = 0, end = duration} = typeof loop === 'boolean' ? {} : loop;\n\n // Youtube videos not muted after finishing playing and start again.\n // 'onEnded' does not fire when 'loop' is set to true.\n // It is custom loop with muted sound after finishing playing and start again.\n if (end !== null && playedSeconds >= end) {\n setIsPlaying(true);\n playerRef?.seekTo(start);\n }\n }\n\n if (played === 1) {\n setMuted(true);\n }\n },\n [duration, loop, playerRef],\n );\n\n const onDuration = React.useCallback((currentDuration: number) => {\n setDuration(currentDuration);\n }, []);\n\n const onEnded = React.useCallback(() => {\n setEnded(true);\n }, []);\n\n const onPlayClick = React.useCallback(() => {\n if (isPlaying) {\n onPause();\n } else {\n onPlay();\n }\n }, [isPlaying, onPlay, onPause]);\n\n const handleClick = React.useCallback(() => {\n buttonRef.current?.click();\n\n if (controls === MediaVideoControlsType.Custom) {\n if (customControlsType === CustomControlsType.WithMuteButton) {\n changeMute(muted);\n } else {\n onPlayClick();\n }\n }\n }, [controls, customControlsType, changeMute, muted, onPlayClick]);\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n const key = e.key.toLowerCase();\n\n if (key === 'enter') {\n buttonRef.current?.click();\n }\n }, []);\n\n const onFocusIn = React.useCallback(() => setHovered(true), []);\n const onFocusOut = React.useCallback(() => setHovered(false), []);\n\n return (\n <div\n className={b(\n {\n wrapper: !currentHeight,\n controls,\n contain,\n 'auto-ratio': autoRatio,\n },\n className,\n )}\n ref={ref}\n onClick={handleClick}\n onMouseEnter={onFocusIn}\n onMouseLeave={onFocusOut}\n onFocus={onFocusIn}\n onBlur={onFocusOut}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n >\n {isMounted ? (\n <React.Fragment>\n <ReactPlayer\n className={b('player')}\n url={videoSrc}\n muted={muted}\n controls={controls === MediaVideoControlsType.Default}\n height={currentHeight || '100%'}\n width={width || '100%'}\n light={previewImgUrl}\n playing={isPlaying}\n playIcon={playIcon}\n progressInterval={FPS}\n onClickPreview={handleClickPreview}\n onStart={onStart}\n onReady={onReady}\n onPlay={onPlay}\n onPause={\n autoPlay && customControlsType !== CustomControlsType.WithMuteButton\n ? undefined\n : onPause\n } // to prevent pause icon flickering when autoplayed video ends\n onProgress={onProgress}\n onEnded={onEnded}\n onDuration={onDuration}\n aria-label={ariaLabel}\n previewTabIndex={-1}\n config={{\n file: {\n attributes: {\n pip: isMobile ? 'false' : undefined,\n playsinline: isMobile ? '' : undefined,\n disablepictureinpicture: isMobile ? '' : undefined,\n },\n },\n }}\n />\n {controls === MediaVideoControlsType.Custom && (\n <CustomBarControls\n className={customBarControlsClassName}\n mute={{\n isMuted: muted,\n changeMute: (event: React.MouseEvent) => {\n event.stopPropagation();\n changeMute(muted);\n },\n }}\n elapsedTimePercent={playedPercent}\n type={customControlsType}\n isPaused={!isPlaying}\n onPlayClick={onPlayClick}\n muteButtonShown={muteButtonShown}\n shown={hovered && ((!started && !previewImgUrl) || started)}\n positioning={positioning}\n />\n )}\n </React.Fragment>\n ) : null}\n </div>\n );\n },\n);\n\nfunction getHeight(width: number, ratio: number = 9 / 16): number {\n return width * ratio;\n}\n\nfunction getParentElement(element: HTMLElement): HTMLElement {\n const parentElement = element.parentElement;\n\n if (!parentElement) {\n return element;\n }\n\n return parentElement.offsetWidth ? parentElement : getParentElement(parentElement);\n}\n\nexport default ReactPlayerBlock;\n"]}
|
|
1
|
+
{"version":3,"file":"ReactPlayer.js","sourceRoot":"../../../../src","sources":["components/ReactPlayer/ReactPlayer.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {PlayFill} from '@gravity-ui/icons';\nimport {Icon} from '@gravity-ui/uikit';\nimport debounce from 'lodash/debounce';\nimport _ReactPlayer from 'react-player';\nimport type {ReactPlayerProps} from 'react-player';\n\nimport {MobileContext} from '../../context/mobileContext';\nimport {VideoContext} from '../../context/videoContext';\nimport {useAnalytics, useImageSize, useMount} from '../../hooks';\nimport {\n AnalyticsEvent,\n ClassNameProps,\n CustomControlsButtonPositioning,\n CustomControlsType,\n DefaultEventNames,\n MediaVideoControlsType,\n MediaVideoProps,\n PlayButtonProps,\n PlayButtonThemes,\n PlayButtonType,\n PredefinedEventTypes,\n ReactPlayerBlockHandler,\n} from '../../models';\nimport {block} from '../../utils';\n\nimport CustomBarControls from './CustomBarControls';\nimport {i18n} from './i18n';\nimport {checkYoutubeVideos} from './utils';\nimport {isYoutubePlayerInstance} from './utils/youtube';\n\nimport './ReactPlayer.scss';\n\nconst b = block('ReactPlayer');\n\nconst FPS = 60;\n\nconst ReactPlayer =\n 'default' in _ReactPlayer && _ReactPlayer.default\n ? (_ReactPlayer.default as typeof _ReactPlayer)\n : _ReactPlayer;\n\nexport interface ReactPlayerBlockProps\n extends Omit<MediaVideoProps, 'src' | 'ref'>,\n ClassNameProps {\n src: string | string[];\n previewImgUrl?: string;\n customBarControlsClassName?: string;\n showPreview?: boolean;\n onClickPreview?: () => void;\n height?: number;\n ratio?: number;\n autoRatio?: boolean;\n disableAutoSizing?: boolean;\n onIntrinsicSizeChange?: (size: {width: number; height: number}) => void;\n children?: React.ReactNode;\n}\n\ninterface PlayerPropgress {\n played: number;\n playedSeconds: number;\n}\n\n// eslint-disable-next-line react/display-name\nexport const ReactPlayerBlock = React.forwardRef<ReactPlayerBlockHandler, ReactPlayerBlockProps>(\n (props, originRef) => {\n const isMobile = React.useContext(MobileContext);\n const {\n src,\n previewImgUrl,\n loop = false,\n controls = MediaVideoControlsType.Default,\n customControlsOptions = {},\n muted: initiallyMuted = false,\n elapsedTime,\n playButton,\n className,\n customBarControlsClassName,\n showPreview,\n onClickPreview,\n onIntrinsicSizeChange,\n disableAutoSizing,\n analyticsEvents,\n height,\n ariaLabel,\n ratio,\n autoRatio,\n contain = true,\n } = props;\n\n const {\n type = PlayButtonType.Default,\n theme = PlayButtonThemes.Blue,\n text,\n className: buttonClassName,\n } = playButton || ({} as PlayButtonProps);\n const {\n type: customControlsType = CustomControlsType.WithMuteButton,\n muteButtonShown,\n positioning = CustomControlsButtonPositioning.Center,\n } = customControlsOptions;\n\n const autoPlay = Boolean(!isMobile && !previewImgUrl && props.autoplay);\n const mute = initiallyMuted || autoPlay;\n\n const {playingVideoRef, setProps} = React.useContext(VideoContext);\n\n const ref = React.useRef<HTMLDivElement>(null);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n const [playerRef, setPlayerRef] = React.useState<_ReactPlayer>();\n const [isPlaying, setIsPlaying] = React.useState(autoPlay);\n const [playedPercent, setPlayedPercent] = React.useState<number>(0);\n const [currentHeight, setCurrentHeight] = React.useState(height);\n const [duration, setDuration] = React.useState<null | number>(null);\n const [width, setWidth] = React.useState<number>(0);\n const [actualRatio, setActualRatio] = React.useState<number>();\n const [muted, setMuted] = React.useState<boolean>(mute);\n const [started, setStarted] = React.useState(autoPlay);\n const [ended, setEnded] = React.useState<boolean>(false);\n const [isMounted, setIsMounted] = React.useState(false);\n const [hovered, setHovered] = React.useState(isMobile);\n\n useMount(() => setIsMounted(true));\n\n const videoSrc = React.useMemo(() => checkYoutubeVideos(src), [src]);\n\n const {imageRef: previewImgRef, onLoad: onPreviewImgLoad} = useImageSize({\n onIntrinsicSizeChange,\n });\n\n const eventsArray = React.useMemo(() => {\n if (analyticsEvents) {\n return Array.isArray(analyticsEvents) ? analyticsEvents : [analyticsEvents];\n }\n\n return [];\n }, [analyticsEvents]);\n const handleAnalytics = useAnalytics(DefaultEventNames.ReactPlayerControls);\n\n React.useImperativeHandle(originRef, () => {\n if (!playerRef) {\n return;\n }\n\n let play, pause, addEventListener;\n const videoInstance = playerRef.getInternalPlayer();\n if (isYoutubePlayerInstance(videoInstance)) {\n ({pauseVideo: pause, playVideo: play, addEventListener} = videoInstance);\n } else {\n // it is assumed that `videoInstance` is HTMLVideoElement by default\n ({play, pause, addEventListener} = videoInstance);\n }\n\n // eslint-disable-next-line consistent-return\n return {\n play: play.bind(videoInstance),\n pause: pause.bind(videoInstance),\n addEventListener: addEventListener.bind(videoInstance),\n };\n }, [playerRef]);\n\n React.useEffect(() => {\n if (ref.current && !playingVideoRef?.contains(ref.current)) {\n setMuted(true);\n }\n }, [playingVideoRef]);\n\n React.useEffect(() => {\n if (showPreview) {\n playerRef?.showPreview();\n }\n }, [showPreview, playerRef]);\n\n React.useEffect(() => {\n if (playerRef && !started) {\n setIsPlaying(autoPlay);\n }\n }, [autoPlay, playerRef, started]);\n\n React.useEffect(() => setMuted(mute), [mute]);\n\n React.useEffect(() => {\n if (!started && isPlaying) {\n setStarted(true);\n }\n }, [isPlaying, started]);\n\n React.useEffect(() => {\n if (started && !Number.isNaN(Number(elapsedTime))) {\n playerRef?.seekTo(elapsedTime ?? 0, 'seconds');\n }\n }, [elapsedTime, playerRef, started]);\n\n React.useEffect(() => {\n if (disableAutoSizing) {\n return;\n }\n\n const updateSize = debounce(() => {\n if (ref.current) {\n // We need to get parent's width does not equal 0\n const parentElement = getParentElement(ref.current);\n const {paddingLeft, paddingRight} = getComputedStyle(parentElement);\n const newWidth =\n parentElement.offsetWidth -\n parseFloat(paddingLeft) -\n parseFloat(paddingRight);\n\n setWidth(newWidth);\n setCurrentHeight(\n Math.floor(\n getHeight(newWidth, ratio ?? (autoRatio ? actualRatio : undefined)),\n ),\n );\n }\n }, 200);\n\n updateSize();\n window.addEventListener('resize', updateSize, {passive: true});\n // eslint-disable-next-line consistent-return\n return () => {\n window.removeEventListener('resize', updateSize);\n };\n }, [actualRatio, autoRatio, disableAutoSizing, playerRef, ratio]);\n\n const playEvents = React.useMemo(\n () => eventsArray?.filter((e: AnalyticsEvent) => e.type === PredefinedEventTypes.Play),\n [eventsArray],\n );\n const stopEvents = React.useMemo(\n () => eventsArray?.filter((e: AnalyticsEvent) => e.type === PredefinedEventTypes.Stop),\n [eventsArray],\n );\n\n const playIcon = React.useMemo(() => {\n let playButtonContent;\n\n switch (type) {\n case PlayButtonType.Text:\n playButtonContent = text;\n break;\n case PlayButtonType.Default:\n default:\n playButtonContent = <Icon className={b('icon')} data={PlayFill} size={24} />;\n break;\n }\n\n return (\n <button\n className={b('button', {theme, text: Boolean(text)}, buttonClassName)}\n aria-label={i18n('play')}\n ref={buttonRef}\n >\n {playButtonContent}\n </button>\n );\n }, [type, theme, text, buttonClassName]);\n\n const changeMute = React.useCallback(\n (isMuted: boolean) => {\n if (\n isMuted &&\n playerRef &&\n controls === MediaVideoControlsType.Custom &&\n customControlsType === CustomControlsType.WithMuteButton\n ) {\n playerRef.seekTo(0);\n setPlayedPercent(0);\n }\n\n const events = isMuted ? playEvents : stopEvents;\n handleAnalytics(events);\n\n if (isMuted) {\n setProps({playingVideoRef: ref.current});\n }\n\n // In order to the progress bar to update (equals 0) before displaying\n setTimeout(() => setMuted(!isMuted), 0);\n },\n [\n playerRef,\n customControlsType,\n playEvents,\n stopEvents,\n handleAnalytics,\n setProps,\n controls,\n ],\n );\n\n const handleClickPreview = React.useCallback(() => {\n setIsPlaying(true);\n onClickPreview?.();\n\n handleAnalytics(playEvents);\n }, [onClickPreview, handleAnalytics, playEvents]);\n\n const onPause = React.useCallback(() => {\n // For support correct state for youtube\n if (\n controls !== MediaVideoControlsType.Custom ||\n customControlsType !== CustomControlsType.WithMuteButton\n ) {\n setIsPlaying(false);\n }\n }, [controls, customControlsType]);\n\n const onStart = React.useCallback(() => {\n if (!autoPlay && !initiallyMuted) {\n setMuted(false);\n }\n }, [autoPlay, initiallyMuted]);\n\n const onPlay = React.useCallback(() => {\n setIsPlaying(true);\n\n if (\n controls === MediaVideoControlsType.Custom &&\n customControlsType === CustomControlsType.WithMuteButton\n ) {\n if (ended) {\n changeMute(false);\n } else if (!isPlaying) {\n changeMute(muted);\n }\n setEnded(false);\n }\n }, [changeMute, controls, customControlsType, ended, isPlaying, muted]);\n\n const onReady = React.useCallback(\n (player: _ReactPlayer) => {\n setPlayerRef(player);\n const videoElement = player.getInternalPlayer();\n const videoWidth = videoElement.videoWidth as number | undefined;\n const videoHeight = videoElement.videoHeight as number | undefined;\n if (videoWidth && videoHeight) {\n setActualRatio(videoHeight / videoWidth);\n onIntrinsicSizeChange?.({width: videoWidth, height: videoHeight});\n }\n },\n [onIntrinsicSizeChange],\n );\n\n const onProgress: ReactPlayerProps['onProgress'] = React.useCallback(\n ({played, playedSeconds}: PlayerPropgress) => {\n setPlayedPercent(played);\n\n if (loop) {\n const {start = 0, end = duration} = typeof loop === 'boolean' ? {} : loop;\n\n // Youtube videos not muted after finishing playing and start again.\n // 'onEnded' does not fire when 'loop' is set to true.\n // It is custom loop with muted sound after finishing playing and start again.\n if (end !== null && playedSeconds >= end) {\n setIsPlaying(true);\n playerRef?.seekTo(start);\n }\n }\n\n if (played === 1) {\n setMuted(true);\n }\n },\n [duration, loop, playerRef],\n );\n\n const onDuration = React.useCallback((currentDuration: number) => {\n setDuration(currentDuration);\n }, []);\n\n const onEnded = React.useCallback(() => {\n setEnded(true);\n }, []);\n\n const onPlayClick = React.useCallback(() => {\n if (isPlaying) {\n onPause();\n } else {\n onPlay();\n }\n }, [isPlaying, onPlay, onPause]);\n\n const handleClick = React.useCallback(() => {\n buttonRef.current?.click();\n\n if (controls === MediaVideoControlsType.Custom) {\n if (customControlsType === CustomControlsType.WithMuteButton) {\n changeMute(muted);\n } else {\n onPlayClick();\n }\n }\n }, [controls, customControlsType, changeMute, muted, onPlayClick]);\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n const key = e.key.toLowerCase();\n\n if (key === 'enter') {\n buttonRef.current?.click();\n }\n }, []);\n\n const onFocusIn = React.useCallback(() => setHovered(true), []);\n const onFocusOut = React.useCallback(() => setHovered(false), []);\n\n return (\n <div\n className={b(\n {\n wrapper: !currentHeight,\n controls,\n contain,\n 'auto-ratio': autoRatio,\n },\n className,\n )}\n ref={ref}\n onClick={handleClick}\n onMouseEnter={onFocusIn}\n onMouseLeave={onFocusOut}\n onFocus={onFocusIn}\n onBlur={onFocusOut}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n >\n {isMounted ? (\n <React.Fragment>\n <ReactPlayer\n className={b('player')}\n url={videoSrc}\n muted={muted}\n controls={controls === MediaVideoControlsType.Default}\n height={currentHeight || '100%'}\n width={width || '100%'}\n light={\n previewImgUrl && (\n <img\n className={b('preview-img')}\n src={previewImgUrl}\n onLoad={onPreviewImgLoad}\n alt=\"\"\n aria-hidden={true}\n ref={previewImgRef}\n />\n )\n }\n playing={isPlaying}\n playIcon={playIcon}\n progressInterval={FPS}\n onClickPreview={handleClickPreview}\n onStart={onStart}\n onReady={onReady}\n onPlay={onPlay}\n onPause={\n autoPlay && customControlsType !== CustomControlsType.WithMuteButton\n ? undefined\n : onPause\n } // to prevent pause icon flickering when autoplayed video ends\n onProgress={onProgress}\n onEnded={onEnded}\n onDuration={onDuration}\n aria-label={ariaLabel}\n previewTabIndex={-1}\n config={{\n file: {\n attributes: {\n pip: isMobile ? 'false' : undefined,\n playsinline: isMobile ? '' : undefined,\n disablepictureinpicture: isMobile ? '' : undefined,\n },\n },\n }}\n />\n {controls === MediaVideoControlsType.Custom && (\n <CustomBarControls\n className={customBarControlsClassName}\n mute={{\n isMuted: muted,\n changeMute: (event: React.MouseEvent) => {\n event.stopPropagation();\n changeMute(muted);\n },\n }}\n elapsedTimePercent={playedPercent}\n type={customControlsType}\n isPaused={!isPlaying}\n onPlayClick={onPlayClick}\n muteButtonShown={muteButtonShown}\n shown={hovered && ((!started && !previewImgUrl) || started)}\n positioning={positioning}\n />\n )}\n </React.Fragment>\n ) : null}\n </div>\n );\n },\n);\n\nfunction getHeight(width: number, ratio: number = 9 / 16): number {\n return width * ratio;\n}\n\nfunction getParentElement(element: HTMLElement): HTMLElement {\n const parentElement = element.parentElement;\n\n if (!parentElement) {\n return element;\n }\n\n return parentElement.offsetWidth ? parentElement : getParentElement(parentElement);\n}\n\nexport default ReactPlayerBlock;\n"]}
|
|
@@ -50,6 +50,12 @@ unpredictable css rules order in build */
|
|
|
50
50
|
font-weight: var(--g-text-accent-font-weight);
|
|
51
51
|
margin-top: 96px;
|
|
52
52
|
}
|
|
53
|
+
@media (max-width: 769px) {
|
|
54
|
+
.pc-title-item_size_l {
|
|
55
|
+
font-size: var(--g-text-display-3-font-size);
|
|
56
|
+
line-height: var(--g-text-display-3-line-height);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
53
59
|
@media (max-width: 577px) {
|
|
54
60
|
.pc-title-item_size_l {
|
|
55
61
|
font-size: var(--g-text-display-2-font-size);
|
|
@@ -11,6 +11,7 @@ export declare const blockMap: {
|
|
|
11
11
|
"table-block": (props: import("./models/index.js").TableBlockProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
12
|
"tabs-block": ({ items, title, description, animated, tabsColSizes, centered, direction, contentSize, }: import("./models/index.js").TabsBlockProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
13
|
"header-block": (props: React.PropsWithChildren<import("./blocks/Header/Header.js").HeaderBlockFullProps>) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
"hero-block": (props: import("./models/index.js").HeroBlockProps) => import("react/jsx-runtime").JSX.Element;
|
|
14
15
|
"icons-block": ({ title, description, size, colSizes, items }: import("./models/index.js").IconsBlockProps) => import("react/jsx-runtime").JSX.Element;
|
|
15
16
|
"header-slider-block": ({ items, arrows, ...props }: import("./models/index.js").HeaderSliderBlockProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
17
|
"card-layout-block": ({ title, description, animated, colSizes, children, className, titleClassName, background, centered, }: import("./blocks/CardLayout/CardLayout.js").CardLayoutBlockProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BannerBlock, CardLayoutBlock, CompaniesBlock, ContentLayoutBlock, ExtendedFeaturesBlock, FilterBlock, FoldableListBlock, FormBlock, HeaderBlock, HeaderSliderBlock, IconsBlock, InfoBlock, MapBlock, MediaBlock, PromoFeaturesBlock, QuestionsBlock, ShareBlock, SliderBlock, SliderOldBlock, TableBlock, TabsBlock, } from "./blocks/index.js";
|
|
1
|
+
import { BannerBlock, CardLayoutBlock, CompaniesBlock, ContentLayoutBlock, ExtendedFeaturesBlock, FilterBlock, FoldableListBlock, FormBlock, HeaderBlock, HeaderSliderBlock, HeroBlock, IconsBlock, InfoBlock, MapBlock, MediaBlock, PromoFeaturesBlock, QuestionsBlock, ShareBlock, SliderBlock, SliderOldBlock, TableBlock, TabsBlock, } from "./blocks/index.js";
|
|
2
2
|
import { BlockType, NavigationItemType, SubBlockType } from "./models/index.js";
|
|
3
3
|
import { GithubButton, NavigationButton, NavigationDropdown, NavigationLink, } from "./navigation/components/NavigationItem/index.js";
|
|
4
4
|
import SocialIcon from "./navigation/components/SocialIcon/SocialIcon.js";
|
|
@@ -16,6 +16,7 @@ export const blockMap = {
|
|
|
16
16
|
[BlockType.TableBlock]: TableBlock,
|
|
17
17
|
[BlockType.TabsBlock]: TabsBlock,
|
|
18
18
|
[BlockType.HeaderBlock]: HeaderBlock,
|
|
19
|
+
[BlockType.HeroBlock]: HeroBlock,
|
|
19
20
|
[BlockType.IconsBlock]: IconsBlock,
|
|
20
21
|
[BlockType.HeaderSliderBlock]: HeaderSliderBlock,
|
|
21
22
|
[BlockType.CardLayoutBlock]: CardLayoutBlock,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constructor-items.js","sourceRoot":"../../src","sources":["constructor-items.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BannerBlock,\n CardLayoutBlock,\n CompaniesBlock,\n ContentLayoutBlock,\n ExtendedFeaturesBlock,\n FilterBlock,\n FoldableListBlock,\n FormBlock,\n HeaderBlock,\n HeaderSliderBlock,\n IconsBlock,\n InfoBlock,\n MapBlock,\n MediaBlock,\n PromoFeaturesBlock,\n QuestionsBlock,\n ShareBlock,\n SliderBlock,\n SliderOldBlock,\n TableBlock,\n TabsBlock,\n} from './blocks';\nimport {BlockType, NavigationItemType, SubBlockType} from './models';\nimport {\n GithubButton,\n NavigationButton,\n NavigationDropdown,\n NavigationLink,\n} from './navigation/components/NavigationItem';\nimport SocialIcon from './navigation/components/SocialIcon/SocialIcon';\nimport {\n BackgroundCard,\n BannerCard,\n BasicCard,\n Content,\n Divider,\n ImageCard,\n LayoutItem,\n MediaCard,\n PriceCard,\n PriceDetailed,\n Quote,\n} from './sub-blocks';\n\nexport const blockMap = {\n [BlockType.SliderOldBlock]: SliderOldBlock,\n [BlockType.ExtendedFeaturesBlock]: ExtendedFeaturesBlock,\n [BlockType.PromoFeaturesBlock]: PromoFeaturesBlock,\n [BlockType.QuestionsBlock]: QuestionsBlock,\n [BlockType.FoldableListBlock]: FoldableListBlock,\n [BlockType.BannerBlock]: BannerBlock,\n [BlockType.CompaniesBlock]: CompaniesBlock,\n [BlockType.MediaBlock]: MediaBlock,\n [BlockType.InfoBlock]: InfoBlock,\n [BlockType.TableBlock]: TableBlock,\n [BlockType.TabsBlock]: TabsBlock,\n [BlockType.HeaderBlock]: HeaderBlock,\n [BlockType.IconsBlock]: IconsBlock,\n [BlockType.HeaderSliderBlock]: HeaderSliderBlock,\n [BlockType.CardLayoutBlock]: CardLayoutBlock,\n [BlockType.ContentLayoutBlock]: ContentLayoutBlock,\n [BlockType.ShareBlock]: ShareBlock,\n [BlockType.MapBlock]: MapBlock,\n [BlockType.FilterBlock]: FilterBlock,\n [BlockType.FormBlock]: FormBlock,\n [BlockType.SliderBlock]: SliderBlock,\n};\n\nexport const subBlockMap = {\n [SubBlockType.Divider]: Divider,\n [SubBlockType.PriceDetailed]: PriceDetailed,\n [SubBlockType.MediaCard]: MediaCard,\n [SubBlockType.BannerCard]: BannerCard,\n [SubBlockType.LayoutItem]: LayoutItem,\n [SubBlockType.BackgroundCard]: BackgroundCard,\n [SubBlockType.BasicCard]: BasicCard,\n [SubBlockType.Content]: Content,\n [SubBlockType.Quote]: Quote,\n [SubBlockType.PriceCard]: PriceCard,\n [SubBlockType.ImageCard]: ImageCard,\n};\n\nexport const navItemMap = {\n [NavigationItemType.Button]: NavigationButton,\n [NavigationItemType.Social]: SocialIcon,\n [NavigationItemType.Dropdown]: NavigationDropdown,\n [NavigationItemType.Link]: NavigationLink,\n [NavigationItemType.GithubButton]: GithubButton,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"constructor-items.js","sourceRoot":"../../src","sources":["constructor-items.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BannerBlock,\n CardLayoutBlock,\n CompaniesBlock,\n ContentLayoutBlock,\n ExtendedFeaturesBlock,\n FilterBlock,\n FoldableListBlock,\n FormBlock,\n HeaderBlock,\n HeaderSliderBlock,\n HeroBlock,\n IconsBlock,\n InfoBlock,\n MapBlock,\n MediaBlock,\n PromoFeaturesBlock,\n QuestionsBlock,\n ShareBlock,\n SliderBlock,\n SliderOldBlock,\n TableBlock,\n TabsBlock,\n} from './blocks';\nimport {BlockType, NavigationItemType, SubBlockType} from './models';\nimport {\n GithubButton,\n NavigationButton,\n NavigationDropdown,\n NavigationLink,\n} from './navigation/components/NavigationItem';\nimport SocialIcon from './navigation/components/SocialIcon/SocialIcon';\nimport {\n BackgroundCard,\n BannerCard,\n BasicCard,\n Content,\n Divider,\n ImageCard,\n LayoutItem,\n MediaCard,\n PriceCard,\n PriceDetailed,\n Quote,\n} from './sub-blocks';\n\nexport const blockMap = {\n [BlockType.SliderOldBlock]: SliderOldBlock,\n [BlockType.ExtendedFeaturesBlock]: ExtendedFeaturesBlock,\n [BlockType.PromoFeaturesBlock]: PromoFeaturesBlock,\n [BlockType.QuestionsBlock]: QuestionsBlock,\n [BlockType.FoldableListBlock]: FoldableListBlock,\n [BlockType.BannerBlock]: BannerBlock,\n [BlockType.CompaniesBlock]: CompaniesBlock,\n [BlockType.MediaBlock]: MediaBlock,\n [BlockType.InfoBlock]: InfoBlock,\n [BlockType.TableBlock]: TableBlock,\n [BlockType.TabsBlock]: TabsBlock,\n [BlockType.HeaderBlock]: HeaderBlock,\n [BlockType.HeroBlock]: HeroBlock,\n [BlockType.IconsBlock]: IconsBlock,\n [BlockType.HeaderSliderBlock]: HeaderSliderBlock,\n [BlockType.CardLayoutBlock]: CardLayoutBlock,\n [BlockType.ContentLayoutBlock]: ContentLayoutBlock,\n [BlockType.ShareBlock]: ShareBlock,\n [BlockType.MapBlock]: MapBlock,\n [BlockType.FilterBlock]: FilterBlock,\n [BlockType.FormBlock]: FormBlock,\n [BlockType.SliderBlock]: SliderBlock,\n};\n\nexport const subBlockMap = {\n [SubBlockType.Divider]: Divider,\n [SubBlockType.PriceDetailed]: PriceDetailed,\n [SubBlockType.MediaCard]: MediaCard,\n [SubBlockType.BannerCard]: BannerCard,\n [SubBlockType.LayoutItem]: LayoutItem,\n [SubBlockType.BackgroundCard]: BackgroundCard,\n [SubBlockType.BasicCard]: BasicCard,\n [SubBlockType.Content]: Content,\n [SubBlockType.Quote]: Quote,\n [SubBlockType.PriceCard]: PriceCard,\n [SubBlockType.ImageCard]: ImageCard,\n};\n\nexport const navItemMap = {\n [NavigationItemType.Button]: NavigationButton,\n [NavigationItemType.Social]: SocialIcon,\n [NavigationItemType.Dropdown]: NavigationDropdown,\n [NavigationItemType.Link]: NavigationLink,\n [NavigationItemType.GithubButton]: GithubButton,\n};\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import type { ImageBaseProps } from "../../components/index.js";
|
|
3
3
|
export type ImageContextProps = {
|
|
4
|
-
Image?: React.ComponentType<ImageBaseProps
|
|
4
|
+
Image?: React.ComponentType<ImageBaseProps> | React.ForwardRefExoticComponent<ImageBaseProps & React.RefAttributes<HTMLImageElement>>;
|
|
5
5
|
};
|
|
6
6
|
export declare const ImageContext: React.Context<ImageContextProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageContext.js","sourceRoot":"../../../../src","sources":["context/imageContext/imageContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"imageContext.js","sourceRoot":"../../../../src","sources":["context/imageContext/imageContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAoB,EAAE,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport type {ImageBaseProps} from '../../components';\n\nexport type ImageContextProps = {\n Image?:\n | React.ComponentType<ImageBaseProps>\n | React.ForwardRefExoticComponent<ImageBaseProps & React.RefAttributes<HTMLImageElement>>;\n};\n\nexport const ImageContext = React.createContext<ImageContextProps>({});\n"]}
|
|
@@ -13,9 +13,9 @@ import titleData from "../components/Title/__stories__/data.json";
|
|
|
13
13
|
import yfmWrapperData from "../components/YFMWrapper/__stories__/data.json";
|
|
14
14
|
export default { title: 'Lab/Tokenization/Components/Text' };
|
|
15
15
|
const defaultTitleArgs = {
|
|
16
|
-
|
|
17
|
-
subtitle: yfmTransform(titleData.default.
|
|
16
|
+
title: titleData.default.title,
|
|
17
|
+
subtitle: yfmTransform(titleData.default.subtitle),
|
|
18
18
|
};
|
|
19
19
|
const transformContentList = (item) => blockTransform(item);
|
|
20
|
-
export const Default = () => (_jsxs("div", { style: { padding: '40px', display: 'flex', flexDirection: 'column', gap: '48px' }, children: [_jsxs("section", { children: [_jsx("strong", { children: "Title \u2014 default" }), _jsx(Title, { ...defaultTitleArgs })] }), _jsxs("section", { children: [_jsx("strong", { children: "Title \u2014 sizes (l \u2192 xs)" }), _jsx("div", { children: Object.entries(titleData.sizes).map(([size, props]) => (_jsx("div", { style: { paddingBottom: '32px' }, children: _jsx(Title, { ...defaultTitleArgs, title: props }) }, size))) })] }), _jsxs("section", { children: [_jsx("strong", { children: "Title \u2014 with link" }), _jsx(Title, { ...defaultTitleArgs, title: titleData.titleLink.
|
|
20
|
+
export const Default = () => (_jsxs("div", { style: { padding: '40px', display: 'flex', flexDirection: 'column', gap: '48px' }, children: [_jsxs("section", { children: [_jsx("strong", { children: "Title \u2014 default" }), _jsx(Title, { ...defaultTitleArgs })] }), _jsxs("section", { children: [_jsx("strong", { children: "Title \u2014 sizes (l \u2192 xs)" }), _jsx("div", { children: Object.entries(titleData.sizes).map(([size, props]) => (_jsx("div", { style: { paddingBottom: '32px' }, children: _jsx(Title, { ...defaultTitleArgs, title: props }) }, size))) })] }), _jsxs("section", { children: [_jsx("strong", { children: "Title \u2014 with link" }), _jsx(Title, { ...defaultTitleArgs, title: titleData.titleLink.title })] }), _jsxs("section", { children: [_jsx("strong", { children: "YFMWrapper" }), _jsx(YFMWrapper, { ...yfmWrapperData.default.content })] }), _jsxs("section", { children: [_jsx("strong", { children: "Author \u2014 column" }), _jsx(Author, { ...authorData.default.content })] }), _jsxs("section", { children: [_jsx("strong", { children: "Author \u2014 line" }), _jsx(Author, { ...authorData.default.content, type: AuthorType.Line })] }), _jsxs("section", { children: [_jsx("strong", { children: "ContentList \u2014 default" }), _jsx(ContentList, { ...transformContentList(contentListData.default) })] }), _jsxs("section", { children: [_jsx("strong", { children: "ContentList \u2014 without icon" }), _jsx(ContentList, { ...transformContentList(contentListData.withoutIcon) })] }), _jsxs("section", { children: [_jsx("strong", { children: "ContentList \u2014 sizes (s / m / l)" }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: '16px' }, children: contentListData.sizes.map((item, index) => (_jsx(ContentList, { ...transformContentList(item) }, index))) })] }), _jsxs("section", { children: [_jsx("strong", { children: "MetaInfo" }), _jsx(MetaInfo, { ...metaInfoData.default.content })] })] }));
|
|
21
21
|
//# sourceMappingURL=ComponentsText.stories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComponentsText.stories.js","sourceRoot":"../../../src","sources":["demo/ComponentsText.stories.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAC,cAAc,EAAE,YAAY,EAAC,kCAA+B;AACpE,OAAO,MAAM,uCAAoC;AACjD,OAAO,WAAW,iDAA8C;AAChE,OAAO,QAAQ,2CAAwC;AACvD,OAAO,KAAK,qCAAkC;AAC9C,OAAO,UAAU,+CAA4C;AAC7D,OAAO,EAAC,UAAU,EAAgD,2BAAkB;AAEpF,OAAO,UAAU,mDAAmD;AACpE,OAAO,eAAe,wDAAwD;AAC9E,OAAO,YAAY,qDAAqD;AACxE,OAAO,SAAS,kDAAkD;AAClE,OAAO,cAAc,uDAAuD;AAE5E,eAAe,EAAC,KAAK,EAAE,kCAAkC,EAAS,CAAC;AAEnE,MAAM,gBAAgB,GAAG;IACrB,
|
|
1
|
+
{"version":3,"file":"ComponentsText.stories.js","sourceRoot":"../../../src","sources":["demo/ComponentsText.stories.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAC,cAAc,EAAE,YAAY,EAAC,kCAA+B;AACpE,OAAO,MAAM,uCAAoC;AACjD,OAAO,WAAW,iDAA8C;AAChE,OAAO,QAAQ,2CAAwC;AACvD,OAAO,KAAK,qCAAkC;AAC9C,OAAO,UAAU,+CAA4C;AAC7D,OAAO,EAAC,UAAU,EAAgD,2BAAkB;AAEpF,OAAO,UAAU,mDAAmD;AACpE,OAAO,eAAe,wDAAwD;AAC9E,OAAO,YAAY,qDAAqD;AACxE,OAAO,SAAS,kDAAkD;AAClE,OAAO,cAAc,uDAAuD;AAE5E,eAAe,EAAC,KAAK,EAAE,kCAAkC,EAAS,CAAC;AAEnE,MAAM,gBAAgB,GAAG;IACrB,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,KAAuB;IAChD,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;CACrD,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,IAAa,EAAE,EAAE,CAC3C,cAAc,CAAC,IAA8B,CAAqB,CAAC;AAEvE,MAAM,CAAC,MAAM,OAAO,GAAY,GAAG,EAAE,CAAC,CAClC,eAAK,KAAK,EAAE,EAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAC,aAChF,8BACI,oDAAgC,EAChC,KAAC,KAAK,OAAK,gBAAgB,GAAI,IACzB,EACV,8BACI,gEAAuC,EACvC,wBACK,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CACpD,cAAgB,KAAK,EAAE,EAAC,aAAa,EAAE,MAAM,EAAC,YAC1C,KAAC,KAAK,OAAK,gBAAgB,EAAE,KAAK,EAAE,KAAuB,GAAI,IADzD,IAAI,CAER,CACT,CAAC,GACA,IACA,EACV,8BACI,sDAAkC,EAClC,KAAC,KAAK,OAAK,gBAAgB,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,KAAuB,GAAI,IAC7E,EACV,8BACI,0CAA2B,EAC3B,KAAC,UAAU,OAAK,cAAc,CAAC,OAAO,CAAC,OAAO,GAAI,IAC5C,EACV,8BACI,oDAAgC,EAChC,KAAC,MAAM,OAAK,UAAU,CAAC,OAAO,CAAC,OAAO,GAAI,IACpC,EACV,8BACI,kDAA8B,EAC9B,KAAC,MAAM,OAAK,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,GAAI,IAC3D,EACV,8BACI,0DAAsC,EACtC,KAAC,WAAW,OAAK,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,GAAI,IAC5D,EACV,8BACI,+DAA2C,EAC3C,KAAC,WAAW,OAAK,oBAAoB,CAAC,eAAe,CAAC,WAAW,CAAC,GAAI,IAChE,EACV,8BACI,oEAAgD,EAChD,cAAK,KAAK,EAAE,EAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAC,YAC9D,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACxC,KAAC,WAAW,OAAiB,oBAAoB,CAAC,IAAI,CAAC,IAArC,KAAK,CAAoC,CAC9D,CAAC,GACA,IACA,EACV,8BACI,wCAAyB,EACzB,KAAC,QAAQ,OAAK,YAAY,CAAC,OAAO,CAAC,OAAO,GAAI,IACxC,IACR,CACT,CAAC","sourcesContent":["import {Meta, StoryFn} from '@storybook/react';\n\nimport {blockTransform, yfmTransform} from '../../.storybook/utils';\nimport Author from '../components/Author/Author';\nimport ContentList from '../components/ContentList/ContentList';\nimport MetaInfo from '../components/MetaInfo/MetaInfo';\nimport Title from '../components/Title/Title';\nimport YFMWrapper from '../components/YFMWrapper/YFMWrapper';\nimport {AuthorType, ContentListProps, CustomBlock, TitleItemProps} from '../models';\n\nimport authorData from '../components/Author/__stories__/data.json';\nimport contentListData from '../components/ContentList/__stories__/data.json';\nimport metaInfoData from '../components/MetaInfo/__stories__/data.json';\nimport titleData from '../components/Title/__stories__/data.json';\nimport yfmWrapperData from '../components/YFMWrapper/__stories__/data.json';\n\nexport default {title: 'Lab/Tokenization/Components/Text'} as Meta;\n\nconst defaultTitleArgs = {\n title: titleData.default.title as TitleItemProps,\n subtitle: yfmTransform(titleData.default.subtitle),\n};\n\nconst transformContentList = (item: unknown) =>\n blockTransform(item as unknown as CustomBlock) as ContentListProps;\n\nexport const Default: StoryFn = () => (\n <div style={{padding: '40px', display: 'flex', flexDirection: 'column', gap: '48px'}}>\n <section>\n <strong>Title — default</strong>\n <Title {...defaultTitleArgs} />\n </section>\n <section>\n <strong>Title — sizes (l → xs)</strong>\n <div>\n {Object.entries(titleData.sizes).map(([size, props]) => (\n <div key={size} style={{paddingBottom: '32px'}}>\n <Title {...defaultTitleArgs} title={props as TitleItemProps} />\n </div>\n ))}\n </div>\n </section>\n <section>\n <strong>Title — with link</strong>\n <Title {...defaultTitleArgs} title={titleData.titleLink.title as TitleItemProps} />\n </section>\n <section>\n <strong>YFMWrapper</strong>\n <YFMWrapper {...yfmWrapperData.default.content} />\n </section>\n <section>\n <strong>Author — column</strong>\n <Author {...authorData.default.content} />\n </section>\n <section>\n <strong>Author — line</strong>\n <Author {...authorData.default.content} type={AuthorType.Line} />\n </section>\n <section>\n <strong>ContentList — default</strong>\n <ContentList {...transformContentList(contentListData.default)} />\n </section>\n <section>\n <strong>ContentList — without icon</strong>\n <ContentList {...transformContentList(contentListData.withoutIcon)} />\n </section>\n <section>\n <strong>ContentList — sizes (s / m / l)</strong>\n <div style={{display: 'flex', flexDirection: 'column', gap: '16px'}}>\n {contentListData.sizes.map((item, index) => (\n <ContentList key={index} {...transformContentList(item)} />\n ))}\n </div>\n </section>\n <section>\n <strong>MetaInfo</strong>\n <MetaInfo {...metaInfoData.default.content} />\n </section>\n </div>\n);\n"]}
|
|
@@ -2,6 +2,7 @@ export { default as useFocus } from "./useFocus.js";
|
|
|
2
2
|
export { default as useWindowBreakpoint } from "./useWindowBreakpoint.js";
|
|
3
3
|
export { default as useMount } from "./useMount.js";
|
|
4
4
|
export { default as useHeightCalculator } from "./useHeightCalculator.js";
|
|
5
|
+
export * from "./useImageSize.js";
|
|
5
6
|
export * from "./useAnalytics.js";
|
|
6
7
|
export * from "./hubspot.js";
|
|
7
8
|
export * from "./useDeviceValue.js";
|
package/build/esm/hooks/index.js
CHANGED
|
@@ -2,6 +2,7 @@ export { default as useFocus } from "./useFocus.js";
|
|
|
2
2
|
export { default as useWindowBreakpoint } from "./useWindowBreakpoint.js";
|
|
3
3
|
export { default as useMount } from "./useMount.js";
|
|
4
4
|
export { default as useHeightCalculator } from "./useHeightCalculator.js";
|
|
5
|
+
export * from "./useImageSize.js";
|
|
5
6
|
export * from "./useAnalytics.js";
|
|
6
7
|
export * from "./hubspot.js";
|
|
7
8
|
export * from "./useDeviceValue.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../src","sources":["hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,sBAAmB;AAC/C,OAAO,EAAC,OAAO,IAAI,mBAAmB,EAAC,iCAA8B;AACrE,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,sBAAmB;AAC/C,OAAO,EAAC,OAAO,IAAI,mBAAmB,EAAC,iCAA8B;AACrE,kCAA+B;AAC/B,6BAA0B;AAC1B,oCAAiC","sourcesContent":["export {default as useFocus} from './useFocus';\nexport {default as useWindowBreakpoint} from './useWindowBreakpoint';\nexport {default as useMount} from './useMount';\nexport {default as useHeightCalculator} from './useHeightCalculator';\nexport * from './useAnalytics';\nexport * from './hubspot';\nexport * from './useDeviceValue';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../src","sources":["hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,sBAAmB;AAC/C,OAAO,EAAC,OAAO,IAAI,mBAAmB,EAAC,iCAA8B;AACrE,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,sBAAmB;AAC/C,OAAO,EAAC,OAAO,IAAI,mBAAmB,EAAC,iCAA8B;AACrE,kCAA+B;AAC/B,kCAA+B;AAC/B,6BAA0B;AAC1B,oCAAiC","sourcesContent":["export {default as useFocus} from './useFocus';\nexport {default as useWindowBreakpoint} from './useWindowBreakpoint';\nexport {default as useMount} from './useMount';\nexport {default as useHeightCalculator} from './useHeightCalculator';\nexport * from './useImageSize';\nexport * from './useAnalytics';\nexport * from './hubspot';\nexport * from './useDeviceValue';\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { MediaAllProps } from "../components/Media/Media.js";
|
|
3
|
+
export declare const useImageSize: ({ onIntrinsicSizeChange, onLoad: onLoadProps, }: Pick<MediaAllProps, "onIntrinsicSizeChange"> & {
|
|
4
|
+
onLoad?: React.ReactEventHandler<HTMLImageElement>;
|
|
5
|
+
}) => {
|
|
6
|
+
imageRef: React.RefObject<HTMLImageElement>;
|
|
7
|
+
onLoad: React.ReactEventHandler<HTMLImageElement>;
|
|
8
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useWindowWidth } from "../context/windowWidthContext/index.js";
|
|
3
|
+
export const useImageSize = ({ onIntrinsicSizeChange, onLoad: onLoadProps, }) => {
|
|
4
|
+
const windowWidth = useWindowWidth();
|
|
5
|
+
const imageRef = React.useRef(null);
|
|
6
|
+
const [imageLoaded, setImageLoaded] = React.useState(false);
|
|
7
|
+
const [imageSize, setImageSize] = React.useState(undefined);
|
|
8
|
+
const onImageSizeChange = React.useMemo(() => onIntrinsicSizeChange
|
|
9
|
+
? (image) => {
|
|
10
|
+
if (image) {
|
|
11
|
+
setImageSize((prev) => {
|
|
12
|
+
if (prev?.width === image.naturalWidth &&
|
|
13
|
+
prev?.height === image.naturalHeight) {
|
|
14
|
+
return prev;
|
|
15
|
+
}
|
|
16
|
+
return { width: image.naturalWidth, height: image.naturalHeight };
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
: undefined, [onIntrinsicSizeChange]);
|
|
21
|
+
const onLoad = React.useCallback((e) => {
|
|
22
|
+
setImageLoaded(true);
|
|
23
|
+
onImageSizeChange?.(imageRef.current);
|
|
24
|
+
onLoadProps?.(e);
|
|
25
|
+
}, [onImageSizeChange, onLoadProps]);
|
|
26
|
+
// to receive size even if the image has been loaded before hydration
|
|
27
|
+
React.useEffect(() => {
|
|
28
|
+
setImageLoaded(Boolean(imageRef.current?.complete));
|
|
29
|
+
}, []);
|
|
30
|
+
React.useEffect(() => {
|
|
31
|
+
if (imageLoaded) {
|
|
32
|
+
onImageSizeChange?.(imageRef.current);
|
|
33
|
+
}
|
|
34
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35
|
+
}, [windowWidth, imageLoaded]);
|
|
36
|
+
React.useEffect(() => {
|
|
37
|
+
if (imageSize) {
|
|
38
|
+
onIntrinsicSizeChange?.(imageSize);
|
|
39
|
+
}
|
|
40
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
41
|
+
}, [imageSize]);
|
|
42
|
+
return {
|
|
43
|
+
imageRef,
|
|
44
|
+
onLoad,
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=useImageSize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useImageSize.js","sourceRoot":"../../../src","sources":["hooks/useImageSize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAC,cAAc,EAAC,+CAAsC;AAE7D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EACzB,qBAAqB,EACrB,MAAM,EAAE,WAAW,GAGtB,EAAE,EAAE;IACD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAmB,IAAI,CAAC,CAAC;IAEtD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAC5C,SAAS,CACZ,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CACnC,GAAG,EAAE,CACD,qBAAqB;QACjB,CAAC,CAAC,CAAC,KAA8B,EAAE,EAAE;YAC/B,IAAI,KAAK,EAAE,CAAC;gBACR,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;oBAClB,IACI,IAAI,EAAE,KAAK,KAAK,KAAK,CAAC,YAAY;wBAClC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,aAAa,EACtC,CAAC;wBACC,OAAO,IAAI,CAAC;oBAChB,CAAC;oBAED,OAAO,EAAC,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,EAAC,CAAC;gBACpE,CAAC,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QACH,CAAC,CAAC,SAAS,EACnB,CAAC,qBAAqB,CAAC,CAC1B,CAAC;IAEF,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAC5B,CAAC,CAAC,EAAE,EAAE;QACF,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,iBAAiB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACtC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC,EACD,CAAC,iBAAiB,EAAE,WAAW,CAAC,CACnC,CAAC;IAEF,qEAAqE;IACrE,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,WAAW,EAAE,CAAC;YACd,iBAAiB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,uDAAuD;IAC3D,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAE/B,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,SAAS,EAAE,CAAC;YACZ,qBAAqB,EAAE,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,uDAAuD;IAC3D,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO;QACH,QAAQ;QACR,MAAM;KACT,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {MediaAllProps} from '../components/Media/Media';\nimport {useWindowWidth} from '../context/windowWidthContext';\n\nexport const useImageSize = ({\n onIntrinsicSizeChange,\n onLoad: onLoadProps,\n}: Pick<MediaAllProps, 'onIntrinsicSizeChange'> & {\n onLoad?: React.ReactEventHandler<HTMLImageElement>;\n}) => {\n const windowWidth = useWindowWidth();\n\n const imageRef = React.useRef<HTMLImageElement>(null);\n\n const [imageLoaded, setImageLoaded] = React.useState(false);\n const [imageSize, setImageSize] = React.useState<{width: number; height: number} | undefined>(\n undefined,\n );\n\n const onImageSizeChange = React.useMemo(\n () =>\n onIntrinsicSizeChange\n ? (image: HTMLImageElement | null) => {\n if (image) {\n setImageSize((prev) => {\n if (\n prev?.width === image.naturalWidth &&\n prev?.height === image.naturalHeight\n ) {\n return prev;\n }\n\n return {width: image.naturalWidth, height: image.naturalHeight};\n });\n }\n }\n : undefined,\n [onIntrinsicSizeChange],\n );\n\n const onLoad = React.useCallback<React.ReactEventHandler<HTMLImageElement>>(\n (e) => {\n setImageLoaded(true);\n onImageSizeChange?.(imageRef.current);\n onLoadProps?.(e);\n },\n [onImageSizeChange, onLoadProps],\n );\n\n // to receive size even if the image has been loaded before hydration\n React.useEffect(() => {\n setImageLoaded(Boolean(imageRef.current?.complete));\n }, []);\n\n React.useEffect(() => {\n if (imageLoaded) {\n onImageSizeChange?.(imageRef.current);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [windowWidth, imageLoaded]);\n\n React.useEffect(() => {\n if (imageSize) {\n onIntrinsicSizeChange?.(imageSize);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [imageSize]);\n\n return {\n imageRef,\n onLoad,\n };\n};\n"]}
|