@gravity-ui/page-constructor 1.14.2 → 1.14.3
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/CHANGELOG.md +7 -0
- package/build/cjs/components/FullscreenImage/FullscreenImage.js +8 -6
- package/build/cjs/components/FullscreenMedia/FullScreenMedia.css +70 -0
- package/build/cjs/components/FullscreenMedia/FullScreenMedia.d.ts +9 -0
- package/build/cjs/components/FullscreenMedia/FullScreenMedia.js +40 -0
- package/build/cjs/components/Media/Media.js +3 -2
- package/build/cjs/components/MetaInfo/MetaInfo.css +13 -0
- package/build/cjs/components/MetaInfo/MetaInfo.d.ts +6 -0
- package/build/cjs/components/MetaInfo/MetaInfo.js +8 -0
- package/build/cjs/components/MetaInfo/schema.d.ts +8 -0
- package/build/cjs/components/MetaInfo/schema.js +10 -0
- package/build/cjs/components/VideoBlock/VideoBlock.d.ts +1 -0
- package/build/cjs/components/VideoBlock/VideoBlock.js +6 -10
- package/build/cjs/components/index.d.ts +2 -0
- package/build/cjs/components/index.js +5 -1
- package/build/cjs/constructor-items.d.ts +4 -0
- package/build/cjs/constructor-items.js +4 -0
- package/build/cjs/containers/PageConstructor/PageConstructor.css +1 -0
- package/build/cjs/models/constructor-items/common.d.ts +1 -17
- package/build/cjs/models/constructor-items/sub-blocks.d.ts +14 -0
- package/build/cjs/models/constructor-items/sub-blocks.js +4 -0
- package/build/cjs/schema/index.js +1 -0
- package/build/cjs/schema/validators/sub-blocks.d.ts +1 -0
- package/build/cjs/schema/validators/sub-blocks.js +1 -0
- package/build/cjs/sub-blocks/LayoutItem/LayoutItem.css +16 -0
- package/build/cjs/sub-blocks/LayoutItem/LayoutItem.d.ts +3 -0
- package/build/cjs/sub-blocks/LayoutItem/LayoutItem.js +21 -0
- package/build/cjs/sub-blocks/LayoutItem/schema.d.ts +218 -0
- package/build/cjs/sub-blocks/LayoutItem/schema.js +18 -0
- package/build/cjs/sub-blocks/LayoutItem/utils.d.ts +15 -0
- package/build/cjs/sub-blocks/LayoutItem/utils.js +12 -0
- package/build/cjs/sub-blocks/index.d.ts +1 -0
- package/build/cjs/sub-blocks/index.js +3 -1
- package/build/cjs/text-transform/blocks.js +17 -0
- package/build/esm/components/FullscreenImage/FullscreenImage.js +9 -7
- package/build/esm/components/FullscreenMedia/FullScreenMedia.css +70 -0
- package/build/esm/components/FullscreenMedia/FullScreenMedia.d.ts +10 -0
- package/build/esm/components/FullscreenMedia/FullScreenMedia.js +38 -0
- package/build/esm/components/Media/Media.js +3 -2
- package/build/esm/components/MetaInfo/MetaInfo.css +13 -0
- package/build/esm/components/MetaInfo/MetaInfo.d.ts +7 -0
- package/build/esm/components/MetaInfo/MetaInfo.js +6 -0
- package/build/esm/components/MetaInfo/schema.d.ts +8 -0
- package/build/esm/components/MetaInfo/schema.js +8 -0
- package/build/esm/components/VideoBlock/VideoBlock.d.ts +1 -0
- package/build/esm/components/VideoBlock/VideoBlock.js +6 -10
- package/build/esm/components/index.d.ts +2 -0
- package/build/esm/components/index.js +2 -0
- package/build/esm/constructor-items.d.ts +4 -0
- package/build/esm/constructor-items.js +5 -1
- package/build/esm/containers/PageConstructor/PageConstructor.css +1 -0
- package/build/esm/models/constructor-items/common.d.ts +1 -17
- package/build/esm/models/constructor-items/sub-blocks.d.ts +14 -0
- package/build/esm/models/constructor-items/sub-blocks.js +4 -0
- package/build/esm/schema/index.js +1 -0
- package/build/esm/schema/validators/sub-blocks.d.ts +1 -0
- package/build/esm/schema/validators/sub-blocks.js +1 -0
- package/build/esm/sub-blocks/LayoutItem/LayoutItem.css +16 -0
- package/build/esm/sub-blocks/LayoutItem/LayoutItem.d.ts +4 -0
- package/build/esm/sub-blocks/LayoutItem/LayoutItem.js +20 -0
- package/build/esm/sub-blocks/LayoutItem/schema.d.ts +218 -0
- package/build/esm/sub-blocks/LayoutItem/schema.js +14 -0
- package/build/esm/sub-blocks/LayoutItem/utils.d.ts +15 -0
- package/build/esm/sub-blocks/LayoutItem/utils.js +6 -0
- package/build/esm/sub-blocks/index.d.ts +1 -0
- package/build/esm/sub-blocks/index.js +1 -0
- package/build/esm/text-transform/blocks.js +17 -0
- package/package.json +4 -2
- package/server/models/constructor-items/common.d.ts +1 -17
- package/server/models/constructor-items/sub-blocks.d.ts +14 -0
- package/server/models/constructor-items/sub-blocks.js +4 -0
- package/server/text-transform/blocks.js +17 -0
- package/styles/root.scss +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.14.3](https://github.com/gravity-ui/page-constructor/compare/v1.14.2...v1.14.3) (2023-02-10)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* remove unused card types ([#130](https://github.com/gravity-ui/page-constructor/issues/130)) ([22da2fa](https://github.com/gravity-ui/page-constructor/commit/22da2fadd433e12e84cf8afd238c369cff5f2c24))
|
|
9
|
+
|
|
3
10
|
## [1.14.2](https://github.com/gravity-ui/page-constructor/compare/v1.14.1...v1.14.2) (2023-02-02)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -7,23 +7,25 @@ const utils_1 = require("../../utils");
|
|
|
7
7
|
const Image_1 = tslib_1.__importDefault(require("../Image/Image"));
|
|
8
8
|
const icons_1 = require("../../icons");
|
|
9
9
|
const b = (0, utils_1.block)('FullScreenImage');
|
|
10
|
+
const FULL_SCREEN_ICON_SIZE = 18;
|
|
11
|
+
const CLOSE_ICON_SIZE = 30;
|
|
10
12
|
const FullScreenImage = (props) => {
|
|
11
13
|
const { imageClassName, modalImageClass, imageStyle } = props;
|
|
12
14
|
const [isOpened, setIsOpened] = (0, react_1.useState)(false);
|
|
13
15
|
const [isMouseEnter, setIsMouseEnter] = (0, react_1.useState)(false);
|
|
14
|
-
const openModal = (
|
|
15
|
-
const closeModal = (
|
|
16
|
-
const showFullScreenIcon = (
|
|
17
|
-
const hideFullScreenIcon = (
|
|
16
|
+
const openModal = () => setIsOpened(true);
|
|
17
|
+
const closeModal = () => setIsOpened(false);
|
|
18
|
+
const showFullScreenIcon = () => setIsMouseEnter(true);
|
|
19
|
+
const hideFullScreenIcon = () => setIsMouseEnter(false);
|
|
18
20
|
return (react_1.default.createElement("div", { className: b() },
|
|
19
21
|
react_1.default.createElement("div", { className: b('image-wrapper'), onMouseEnter: showFullScreenIcon, onMouseLeave: hideFullScreenIcon },
|
|
20
22
|
react_1.default.createElement(Image_1.default, Object.assign({}, props, { className: b('image', imageClassName), onClick: openModal, style: imageStyle })),
|
|
21
23
|
react_1.default.createElement("div", { className: b('icon-wrapper', { visible: isMouseEnter }), onClick: openModal },
|
|
22
|
-
react_1.default.createElement(uikit_1.Icon, { data: icons_1.FullScreen, width:
|
|
24
|
+
react_1.default.createElement(uikit_1.Icon, { data: icons_1.FullScreen, width: FULL_SCREEN_ICON_SIZE, height: FULL_SCREEN_ICON_SIZE, className: b('icon') }))),
|
|
23
25
|
isOpened && (react_1.default.createElement(uikit_1.Modal, { open: isOpened, onClose: closeModal, className: b('modal') },
|
|
24
26
|
react_1.default.createElement("div", { className: b('modal-content') },
|
|
25
27
|
react_1.default.createElement("div", { className: b('icon-wrapper', { visible: true }), onClick: closeModal },
|
|
26
|
-
react_1.default.createElement(uikit_1.Icon, { data: icons_1.PreviewClose, width:
|
|
28
|
+
react_1.default.createElement(uikit_1.Icon, { data: icons_1.PreviewClose, width: CLOSE_ICON_SIZE, height: CLOSE_ICON_SIZE, className: b('icon', { hover: true }) })),
|
|
27
29
|
react_1.default.createElement(Image_1.default, Object.assign({}, props, { className: b('modal-image', modalImageClass) })))))));
|
|
28
30
|
};
|
|
29
31
|
exports.default = FullScreenImage;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
|
2
|
+
unpredictable css rules order in build */
|
|
3
|
+
.pc-full-screen-media__modal-media_type_youtube, .pc-full-screen-media__modal-media_type_video video, .pc-full-screen-media__modal-media_type_image {
|
|
4
|
+
display: block;
|
|
5
|
+
position: relative;
|
|
6
|
+
width: 100%;
|
|
7
|
+
max-width: 1232px;
|
|
8
|
+
max-height: 70vh;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.pc-full-screen-media__media {
|
|
12
|
+
cursor: pointer;
|
|
13
|
+
}
|
|
14
|
+
.pc-full-screen-media__media-wrapper {
|
|
15
|
+
cursor: pointer;
|
|
16
|
+
position: relative;
|
|
17
|
+
}
|
|
18
|
+
.pc-full-screen-media__modal-content {
|
|
19
|
+
position: relative;
|
|
20
|
+
}
|
|
21
|
+
.pc-full-screen-media__inline-media {
|
|
22
|
+
transform: translateZ(0);
|
|
23
|
+
}
|
|
24
|
+
.pc-full-screen-media__modal-media {
|
|
25
|
+
border-radius: var(--pc-border-radius);
|
|
26
|
+
}
|
|
27
|
+
.pc-full-screen-media__modal-media_type_youtube {
|
|
28
|
+
width: 70vw;
|
|
29
|
+
height: calc(70vw * 9 / 16);
|
|
30
|
+
}
|
|
31
|
+
.pc-full-screen-media__modal .yc-modal__content, .pc-full-screen-media__modal-image {
|
|
32
|
+
border-radius: var(--pc-border-radius);
|
|
33
|
+
}
|
|
34
|
+
.pc-full-screen-media__icon-wrapper {
|
|
35
|
+
display: flex;
|
|
36
|
+
align-items: center;
|
|
37
|
+
justify-content: center;
|
|
38
|
+
position: absolute;
|
|
39
|
+
right: 16px;
|
|
40
|
+
top: 16px;
|
|
41
|
+
width: 36px;
|
|
42
|
+
height: 36px;
|
|
43
|
+
border-radius: 8px;
|
|
44
|
+
background-color: var(--yc-color-base-simple-hover-solid);
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
z-index: 10;
|
|
47
|
+
}
|
|
48
|
+
.pc-full-screen-media__modal-content .pc-full-screen-media__icon-wrapper, .pc-full-screen-media__media-wrapper .pc-full-screen-media__icon-wrapper {
|
|
49
|
+
opacity: 0;
|
|
50
|
+
transition: opacity 0.3s;
|
|
51
|
+
pointer-events: none;
|
|
52
|
+
}
|
|
53
|
+
.pc-full-screen-media__modal-content:hover .pc-full-screen-media__icon-wrapper, .pc-full-screen-media__media-wrapper:hover .pc-full-screen-media__icon-wrapper {
|
|
54
|
+
opacity: 1;
|
|
55
|
+
pointer-events: inherit;
|
|
56
|
+
}
|
|
57
|
+
.pc-full-screen-media__icon {
|
|
58
|
+
color: var(--yc-color-text-hint);
|
|
59
|
+
}
|
|
60
|
+
.pc-full-screen-media__icon_hover:hover {
|
|
61
|
+
color: var(--yc-color-text-secondary);
|
|
62
|
+
}
|
|
63
|
+
@media (max-width: 577px) {
|
|
64
|
+
.pc-full-screen-media__icon-wrapper {
|
|
65
|
+
display: none;
|
|
66
|
+
}
|
|
67
|
+
.pc-full-screen-media__modal {
|
|
68
|
+
display: none !important; /* stylelint-disable-line declaration-no-important */
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { MediaAllProps } from '../Media/Media';
|
|
3
|
+
export type ChildMediaRenderProps = Pick<MediaAllProps, 'fullScreen' | 'imageClassName' | 'videoClassName' | 'youtubeClassName' | 'className'>;
|
|
4
|
+
export interface FullScreenMediaProps {
|
|
5
|
+
showFullScreenIcon?: boolean;
|
|
6
|
+
children: (props?: ChildMediaRenderProps) => JSX.Element;
|
|
7
|
+
}
|
|
8
|
+
declare const FullScreenMedia: ({ children, showFullScreenIcon }: FullScreenMediaProps) => JSX.Element;
|
|
9
|
+
export default FullScreenMedia;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
5
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
|
6
|
+
const utils_1 = require("../../utils");
|
|
7
|
+
const icons_1 = require("../../icons");
|
|
8
|
+
const mobileContext_1 = require("../../context/mobileContext");
|
|
9
|
+
const b = (0, utils_1.block)('full-screen-media');
|
|
10
|
+
const FULL_SCREEN_ICON_SIZE = 18;
|
|
11
|
+
const CLOSE_ICON_SIZE = 30;
|
|
12
|
+
const getMediaClass = (type) => b('modal-media', { type });
|
|
13
|
+
const FullScreenMedia = ({ children, showFullScreenIcon = true }) => {
|
|
14
|
+
const [isOpened, setIsOpened] = (0, react_1.useState)(false);
|
|
15
|
+
const isMobile = (0, react_1.useContext)(mobileContext_1.MobileContext);
|
|
16
|
+
const openModal = (e) => {
|
|
17
|
+
e.stopPropagation();
|
|
18
|
+
setIsOpened(true);
|
|
19
|
+
};
|
|
20
|
+
const closeModal = () => setIsOpened(false);
|
|
21
|
+
if (isMobile) {
|
|
22
|
+
return children();
|
|
23
|
+
}
|
|
24
|
+
return (react_1.default.createElement("div", { className: b() },
|
|
25
|
+
react_1.default.createElement("div", { className: b('media-wrapper'), onClickCapture: openModal },
|
|
26
|
+
children({ className: b('inline-media') }),
|
|
27
|
+
showFullScreenIcon && (react_1.default.createElement("div", { className: b('icon-wrapper'), onClickCapture: openModal },
|
|
28
|
+
react_1.default.createElement(uikit_1.Icon, { data: icons_1.FullScreen, width: FULL_SCREEN_ICON_SIZE, height: FULL_SCREEN_ICON_SIZE, className: b('icon') })))),
|
|
29
|
+
isOpened && (react_1.default.createElement(uikit_1.Modal, { open: isOpened, onClose: closeModal, className: b('modal') },
|
|
30
|
+
react_1.default.createElement("div", { className: b('modal-content') },
|
|
31
|
+
react_1.default.createElement("div", { className: b('icon-wrapper', { visible: true }), onClick: closeModal },
|
|
32
|
+
react_1.default.createElement(uikit_1.Icon, { data: icons_1.PreviewClose, width: CLOSE_ICON_SIZE, height: CLOSE_ICON_SIZE, className: b('icon', { hover: true }) })),
|
|
33
|
+
children({
|
|
34
|
+
imageClassName: getMediaClass('image'),
|
|
35
|
+
videoClassName: getMediaClass('video'),
|
|
36
|
+
youtubeClassName: getMediaClass('youtube'),
|
|
37
|
+
fullScreen: true,
|
|
38
|
+
}))))));
|
|
39
|
+
};
|
|
40
|
+
exports.default = FullScreenMedia;
|
|
@@ -10,7 +10,7 @@ const Video_1 = tslib_1.__importDefault(require("./Video/Video"));
|
|
|
10
10
|
const VideoBlock_1 = tslib_1.__importDefault(require("../VideoBlock/VideoBlock"));
|
|
11
11
|
const b = (0, utils_1.block)('Media');
|
|
12
12
|
const Media = (props) => {
|
|
13
|
-
const { image, video, youtube, dataLens, color, height, previewImg, parallax = false, metrika, } = props;
|
|
13
|
+
const { image, video, youtube, dataLens, color, height, previewImg, parallax = false, metrika, fullScreen, } = props;
|
|
14
14
|
const { className, imageClassName, videoClassName, youtubeClassName, playVideo = true, isBackground, playButton, customBarControlsClassName, } = props;
|
|
15
15
|
const [hasVideoFallback, setHasVideoFallback] = (0, react_1.useState)(false);
|
|
16
16
|
const content = (0, react_1.useMemo)(() => {
|
|
@@ -22,7 +22,7 @@ const Media = (props) => {
|
|
|
22
22
|
result.push(react_1.default.createElement(Video_1.default, { key: "video", video: video, videoClassName: videoClassName, height: height, metrika: metrika, playVideo: playVideo, previewImg: previewImg, playButton: playButton, customBarControlsClassName: customBarControlsClassName, hasVideoFallback: hasVideoFallback, setHasVideoFallback: setHasVideoFallback }));
|
|
23
23
|
}
|
|
24
24
|
if (youtube) {
|
|
25
|
-
result = (react_1.default.createElement(VideoBlock_1.default, { className: b('youtube', youtubeClassName), record: youtube, attributes: { color: 'white', rel: '0' }, previewImg: previewImg, height: height }));
|
|
25
|
+
result = (react_1.default.createElement(VideoBlock_1.default, { className: b('youtube', youtubeClassName), record: youtube, attributes: { color: 'white', rel: '0' }, previewImg: previewImg, height: height, fullScreen: fullScreen }));
|
|
26
26
|
}
|
|
27
27
|
if (dataLens) {
|
|
28
28
|
result = react_1.default.createElement(DataLens_1.default, { dataLens: dataLens });
|
|
@@ -45,6 +45,7 @@ const Media = (props) => {
|
|
|
45
45
|
playButton,
|
|
46
46
|
customBarControlsClassName,
|
|
47
47
|
youtubeClassName,
|
|
48
|
+
fullScreen,
|
|
48
49
|
]);
|
|
49
50
|
return (react_1.default.createElement("div", { className: b(null, className), style: { backgroundColor: color } }, content));
|
|
50
51
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
|
2
|
+
unpredictable css rules order in build */
|
|
3
|
+
.pc-meta-info {
|
|
4
|
+
font-size: var(--yc-text-body-2-font-size);
|
|
5
|
+
line-height: var(--yc-text-body-2-line-height);
|
|
6
|
+
display: flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
font-weight: 500;
|
|
9
|
+
color: var(--pc-media-card-meta-info-color);
|
|
10
|
+
}
|
|
11
|
+
.pc-meta-info__item:not(:first-child) {
|
|
12
|
+
margin-left: 16px;
|
|
13
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
5
|
+
const utils_1 = require("../../utils");
|
|
6
|
+
const b = (0, utils_1.block)('meta-info');
|
|
7
|
+
const MetaInfo = ({ items, className }) => (react_1.default.createElement("div", { className: b(null, className) }, items.map((metaInfoItem) => (react_1.default.createElement("div", { key: metaInfoItem, className: b('item') }, metaInfoItem)))));
|
|
8
|
+
exports.default = MetaInfo;
|
|
@@ -4,6 +4,7 @@ exports.getHeight = exports.AUTOPLAY_ATTRIBUTES = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
6
|
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
7
|
+
const uuid_1 = require("uuid");
|
|
7
8
|
const uikit_1 = require("@gravity-ui/uikit");
|
|
8
9
|
const utils_1 = require("../../utils");
|
|
9
10
|
const Image_1 = tslib_1.__importDefault(require("../Image/Image"));
|
|
@@ -18,7 +19,6 @@ exports.AUTOPLAY_ATTRIBUTES = {
|
|
|
18
19
|
mute: 1,
|
|
19
20
|
};
|
|
20
21
|
const b = (0, utils_1.block)('VideoBlock');
|
|
21
|
-
const iframeId = 'video-block';
|
|
22
22
|
function getVideoSrc(stream, record) {
|
|
23
23
|
if (!stream && !record) {
|
|
24
24
|
return null;
|
|
@@ -38,14 +38,14 @@ function getHeight(width) {
|
|
|
38
38
|
}
|
|
39
39
|
exports.getHeight = getHeight;
|
|
40
40
|
const VideoBlock = (props) => {
|
|
41
|
-
const { stream, record, attributes, className, id, previewImg, playButton, height } = props;
|
|
41
|
+
const { stream, record, attributes, className, id, previewImg, playButton, height, fullScreen } = props;
|
|
42
42
|
const src = getVideoSrc(stream, record);
|
|
43
43
|
const ref = (0, react_1.useRef)(null);
|
|
44
44
|
const iframeRef = (0, react_1.useRef)();
|
|
45
45
|
const [hidePreview, setHidePreview] = (0, react_1.useState)(false);
|
|
46
46
|
const norender = (!stream && !record) || !src;
|
|
47
47
|
const [currentHeight, setCurrentHeight] = (0, react_1.useState)(height || undefined);
|
|
48
|
-
const fullId =
|
|
48
|
+
const fullId = id || (0, uuid_1.v4)();
|
|
49
49
|
const onPreviewClick = (0, react_1.useCallback)(() => {
|
|
50
50
|
if (iframeRef.current) {
|
|
51
51
|
iframeRef.current.src = `${src}?${(0, utils_1.getPageSearchParams)(Object.assign(Object.assign({}, exports.AUTOPLAY_ATTRIBUTES), (attributes || {})))}`;
|
|
@@ -66,12 +66,8 @@ const VideoBlock = (props) => {
|
|
|
66
66
|
if (norender) {
|
|
67
67
|
return;
|
|
68
68
|
}
|
|
69
|
-
const prevPageVideo = document.getElementById(fullId);
|
|
70
69
|
const fullSrc = `${src}?${(0, utils_1.getPageSearchParams)(attributes || {})}`;
|
|
71
|
-
if (
|
|
72
|
-
prevPageVideo.src = fullSrc;
|
|
73
|
-
}
|
|
74
|
-
else if (ref.current) {
|
|
70
|
+
if (ref.current && !iframeRef.current) {
|
|
75
71
|
const iframe = document.createElement('iframe');
|
|
76
72
|
iframe.id = fullId;
|
|
77
73
|
iframe.src = fullSrc;
|
|
@@ -83,14 +79,14 @@ const VideoBlock = (props) => {
|
|
|
83
79
|
ref.current.appendChild(iframe);
|
|
84
80
|
iframeRef.current = iframe;
|
|
85
81
|
}
|
|
86
|
-
}, [stream, record, norender, src, fullId, attributes, iframeRef]);
|
|
82
|
+
}, [stream, record, norender, src, fullId, attributes, iframeRef, fullScreen]);
|
|
87
83
|
(0, react_1.useEffect)(() => {
|
|
88
84
|
setHidePreview(false);
|
|
89
85
|
}, [src, setHidePreview]);
|
|
90
86
|
if (norender) {
|
|
91
87
|
return null;
|
|
92
88
|
}
|
|
93
|
-
return (react_1.default.createElement("div", { className: b(null, className), ref: ref, style: { height: currentHeight } }, previewImg && !hidePreview && (react_1.default.createElement("div", { className: b('preview'), onClick: onPreviewClick },
|
|
89
|
+
return (react_1.default.createElement("div", { className: b(null, className), ref: ref, style: { height: currentHeight } }, previewImg && !hidePreview && !fullScreen && (react_1.default.createElement("div", { className: b('preview'), onClick: onPreviewClick },
|
|
94
90
|
react_1.default.createElement(Image_1.default, { src: previewImg, className: b('image'), containerClassName: b('image-wrapper') }),
|
|
95
91
|
playButton || (react_1.default.createElement("button", { className: b('button') },
|
|
96
92
|
react_1.default.createElement(uikit_1.Icon, { className: b('icon'), data: icons_1.PlayVideo, size: 24 })))))));
|
|
@@ -33,4 +33,6 @@ export { default as OverflowScroller } from './OverflowScroller/OverflowScroller
|
|
|
33
33
|
export { default as Author } from './Author/Author';
|
|
34
34
|
export { default as RouterLink } from './RouterLink/RouterLink';
|
|
35
35
|
export { default as HTML } from './HTML/HTML';
|
|
36
|
+
export { default as MetaInfo } from './MetaInfo/MetaInfo';
|
|
37
|
+
export { default as FullScreenMedia } from './FullscreenMedia/FullScreenMedia';
|
|
36
38
|
export type { RouterLinkProps } from './RouterLink/RouterLink';
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.HTML = exports.RouterLink = exports.Author = exports.OverflowScroller = exports.Control = exports.YandexForm = exports.YFMWrapper = exports.VideoBlock = exports.UnpublishedLabel = exports.ToggleArrow = exports.Title = exports.Table = exports.ReactPlayer = exports.OutsideClick = exports.Media = exports.Links = exports.Link = exports.Image = exports.HeightCalculator = exports.HeaderBreadcrumbs = exports.FullWidthBackground = exports.FullscreenImage = exports.Foldable = exports.FileLink = exports.ErrorWrapper = exports.CardBase = exports.Button = exports.BlockHeader = exports.BlockBase = exports.BalancedMasonry = exports.BackLink = exports.BackgroundMedia = exports.BackgroundImage = exports.AnimateBlock = exports.Anchor = void 0;
|
|
6
|
+
exports.FullScreenMedia = exports.MetaInfo = exports.HTML = exports.RouterLink = exports.Author = exports.OverflowScroller = exports.Control = exports.YandexForm = exports.YFMWrapper = exports.VideoBlock = exports.UnpublishedLabel = exports.ToggleArrow = exports.Title = exports.Table = exports.ReactPlayer = exports.OutsideClick = exports.Media = exports.Links = exports.Link = exports.Image = exports.HeightCalculator = exports.HeaderBreadcrumbs = exports.FullWidthBackground = exports.FullscreenImage = exports.Foldable = exports.FileLink = exports.ErrorWrapper = exports.CardBase = exports.Button = exports.BlockHeader = exports.BlockBase = exports.BalancedMasonry = exports.BackLink = exports.BackgroundMedia = exports.BackgroundImage = exports.AnimateBlock = exports.Anchor = void 0;
|
|
7
7
|
var Anchor_1 = require("./Anchor/Anchor");
|
|
8
8
|
Object.defineProperty(exports, "Anchor", { enumerable: true, get: function () { return __importDefault(Anchor_1).default; } });
|
|
9
9
|
var AnimateBlock_1 = require("./AnimateBlock/AnimateBlock");
|
|
@@ -74,3 +74,7 @@ var RouterLink_1 = require("./RouterLink/RouterLink");
|
|
|
74
74
|
Object.defineProperty(exports, "RouterLink", { enumerable: true, get: function () { return __importDefault(RouterLink_1).default; } });
|
|
75
75
|
var HTML_1 = require("./HTML/HTML");
|
|
76
76
|
Object.defineProperty(exports, "HTML", { enumerable: true, get: function () { return __importDefault(HTML_1).default; } });
|
|
77
|
+
var MetaInfo_1 = require("./MetaInfo/MetaInfo");
|
|
78
|
+
Object.defineProperty(exports, "MetaInfo", { enumerable: true, get: function () { return __importDefault(MetaInfo_1).default; } });
|
|
79
|
+
var FullScreenMedia_1 = require("./FullscreenMedia/FullScreenMedia");
|
|
80
|
+
Object.defineProperty(exports, "FullScreenMedia", { enumerable: true, get: function () { return __importDefault(FullScreenMedia_1).default; } });
|
|
@@ -34,6 +34,10 @@ export declare const subBlockMap: {
|
|
|
34
34
|
"media-card": ({ border, ...mediaProps }: import("./models").MediaCardProps) => JSX.Element;
|
|
35
35
|
"banner-card": (props: import("./models").BannerCardProps) => JSX.Element;
|
|
36
36
|
"news-card": (props: import("./models").NewsCardProps) => JSX.Element;
|
|
37
|
+
"layout-item": ({ content: { links, ...content }, metaInfo, media, border, fullScreen, className, }: import("./models").LayoutItemProps) => JSX.Element;
|
|
38
|
+
/**
|
|
39
|
+
* @deprecated Use LayoutItem
|
|
40
|
+
*/
|
|
37
41
|
"card-with-image": ({ title, description, image, disableCompress, links, border, fullScreen, className, additionalInfo, buttons, }: import("./models").CardWithImageProps) => JSX.Element;
|
|
38
42
|
"background-card": (props: import("./models").BackgroundCardProps) => JSX.Element;
|
|
39
43
|
"basic-card": (props: import("./models").BasicCardProps) => JSX.Element;
|
|
@@ -40,6 +40,10 @@ exports.subBlockMap = {
|
|
|
40
40
|
[models_1.SubBlockType.MediaCard]: sub_blocks_1.MediaCard,
|
|
41
41
|
[models_1.SubBlockType.BannerCard]: sub_blocks_1.BannerCard,
|
|
42
42
|
[models_1.SubBlockType.NewsCard]: sub_blocks_1.NewsCard,
|
|
43
|
+
[models_1.SubBlockType.LayoutItem]: sub_blocks_1.LayoutItem,
|
|
44
|
+
/**
|
|
45
|
+
* @deprecated Use LayoutItem
|
|
46
|
+
*/
|
|
43
47
|
[models_1.SubBlockType.CardWithImage]: sub_blocks_1.CardWithImage,
|
|
44
48
|
[models_1.SubBlockType.BackgroundCard]: sub_blocks_1.BackgroundCard,
|
|
45
49
|
[models_1.SubBlockType.BasicCard]: sub_blocks_1.BasicCard,
|
|
@@ -18,6 +18,7 @@ unpredictable css rules order in build */
|
|
|
18
18
|
--pc-monochrome-button-background-color-hover: #393939;
|
|
19
19
|
--pc-monochrome-button-color: var(--yc-color-text-light-primary);
|
|
20
20
|
--pc-text-header-color: var(--yc-color-text-primary);
|
|
21
|
+
--pc-media-card-meta-info-color: var(--yc-color-text-secondary);
|
|
21
22
|
}
|
|
22
23
|
.yc-root.yc-root_theme_dark {
|
|
23
24
|
--pc-color-sfx-shadow: var(--yc-color-sfx-shadow);
|
|
@@ -172,6 +172,7 @@ export interface MediaComponentVideoProps {
|
|
|
172
172
|
export interface MediaComponentYoutubeProps {
|
|
173
173
|
youtube: string;
|
|
174
174
|
previewImg?: string;
|
|
175
|
+
fullScreen?: boolean;
|
|
175
176
|
}
|
|
176
177
|
export interface MediaComponentImageProps {
|
|
177
178
|
image: ImageProps | ImageProps[] | ImageDeviceProps;
|
|
@@ -243,27 +244,10 @@ export interface TitleBaseProps {
|
|
|
243
244
|
custom?: string | ReactNode;
|
|
244
245
|
onClick?: () => void;
|
|
245
246
|
}
|
|
246
|
-
export interface CardData {
|
|
247
|
-
header?: CardHeader;
|
|
248
|
-
text?: string;
|
|
249
|
-
title?: string;
|
|
250
|
-
link?: LinkProps;
|
|
251
|
-
footer?: string;
|
|
252
|
-
url?: string;
|
|
253
|
-
service?: {
|
|
254
|
-
slug: string;
|
|
255
|
-
name: string;
|
|
256
|
-
};
|
|
257
|
-
links?: LinkProps[];
|
|
258
|
-
}
|
|
259
247
|
export type CardBorder = 'shadow' | 'line' | 'none';
|
|
260
248
|
export interface CardBaseProps {
|
|
261
249
|
border?: CardBorder;
|
|
262
250
|
}
|
|
263
|
-
export interface CardHeader {
|
|
264
|
-
title?: string;
|
|
265
|
-
image?: ImageProps;
|
|
266
|
-
}
|
|
267
251
|
export interface PriceDescriptionProps {
|
|
268
252
|
title: string;
|
|
269
253
|
detailedTitle?: string;
|
|
@@ -19,7 +19,11 @@ export declare enum SubBlockType {
|
|
|
19
19
|
* @deprecated Will be moved to params use BasicCard instead
|
|
20
20
|
*/
|
|
21
21
|
TutorialCard = "tutoral-card",
|
|
22
|
+
/**
|
|
23
|
+
* @deprecated Use LayoutItem
|
|
24
|
+
*/
|
|
22
25
|
CardWithImage = "card-with-image",
|
|
26
|
+
LayoutItem = "layout-item",
|
|
23
27
|
BackgroundCard = "background-card",
|
|
24
28
|
BasicCard = "basic-card",
|
|
25
29
|
Content = "content",
|
|
@@ -125,6 +129,13 @@ export interface CardWithImageProps extends ClassNameProps, Pick<ContentBlockPro
|
|
|
125
129
|
fullScreen?: boolean;
|
|
126
130
|
links?: CardWithImageLinkProps[];
|
|
127
131
|
}
|
|
132
|
+
export interface LayoutItemProps extends ClassNameProps {
|
|
133
|
+
content: Omit<ContentBlockProps, 'colSizes' | 'centered' | 'size'>;
|
|
134
|
+
media: MediaProps;
|
|
135
|
+
metaInfo?: string[];
|
|
136
|
+
border?: boolean;
|
|
137
|
+
fullScreen?: boolean;
|
|
138
|
+
}
|
|
128
139
|
export type DividerModel = {
|
|
129
140
|
type: SubBlockType.Divider;
|
|
130
141
|
} & DividerProps;
|
|
@@ -137,6 +148,9 @@ export type NewsCardModel = {
|
|
|
137
148
|
export type CardWithImageModel = {
|
|
138
149
|
type: SubBlockType.CardWithImage;
|
|
139
150
|
} & CardWithImageProps;
|
|
151
|
+
export type LayoutItemModel = {
|
|
152
|
+
type: SubBlockType.CardWithImage;
|
|
153
|
+
} & LayoutItemProps;
|
|
140
154
|
export type TutorialCardModel = {
|
|
141
155
|
type: SubBlockType.TutorialCard;
|
|
142
156
|
} & TutorialCardProps;
|
|
@@ -17,7 +17,11 @@ var SubBlockType;
|
|
|
17
17
|
* @deprecated Will be moved to params use BasicCard instead
|
|
18
18
|
*/
|
|
19
19
|
SubBlockType["TutorialCard"] = "tutoral-card";
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated Use LayoutItem
|
|
22
|
+
*/
|
|
20
23
|
SubBlockType["CardWithImage"] = "card-with-image";
|
|
24
|
+
SubBlockType["LayoutItem"] = "layout-item";
|
|
21
25
|
SubBlockType["BackgroundCard"] = "background-card";
|
|
22
26
|
SubBlockType["BasicCard"] = "basic-card";
|
|
23
27
|
SubBlockType["Content"] = "content";
|
|
@@ -55,6 +55,7 @@ function generateDefaultSchema(config) {
|
|
|
55
55
|
'card-with-image',
|
|
56
56
|
'quote',
|
|
57
57
|
'basic-card',
|
|
58
|
+
'layout-item',
|
|
58
59
|
];
|
|
59
60
|
const configBlockSchemaNames = Object.keys(blocks).filter((item) => !constructorBlockSchemaNames.includes(item));
|
|
60
61
|
const configCardSchemaNames = Object.keys(cards).filter((item) => !constructorCardSchemaNames.includes(item));
|
|
@@ -6,6 +6,7 @@ export * from '../../sub-blocks/NewsCard/schema';
|
|
|
6
6
|
export * from '../../sub-blocks/Partner/schema';
|
|
7
7
|
export * from '../../sub-blocks/TutorialCard/schema';
|
|
8
8
|
export * from '../../sub-blocks/CardWithImage/schema';
|
|
9
|
+
export * from '../../sub-blocks/LayoutItem/schema';
|
|
9
10
|
export * from '../../sub-blocks/Quote/schema';
|
|
10
11
|
export * from '../../sub-blocks/Divider/schema';
|
|
11
12
|
export * from '../../sub-blocks/BasicCard/schema';
|
|
@@ -9,6 +9,7 @@ tslib_1.__exportStar(require("../../sub-blocks/NewsCard/schema"), exports);
|
|
|
9
9
|
tslib_1.__exportStar(require("../../sub-blocks/Partner/schema"), exports);
|
|
10
10
|
tslib_1.__exportStar(require("../../sub-blocks/TutorialCard/schema"), exports);
|
|
11
11
|
tslib_1.__exportStar(require("../../sub-blocks/CardWithImage/schema"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("../../sub-blocks/LayoutItem/schema"), exports);
|
|
12
13
|
tslib_1.__exportStar(require("../../sub-blocks/Quote/schema"), exports);
|
|
13
14
|
tslib_1.__exportStar(require("../../sub-blocks/Divider/schema"), exports);
|
|
14
15
|
tslib_1.__exportStar(require("../../sub-blocks/BasicCard/schema"), exports);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
|
2
|
+
unpredictable css rules order in build */
|
|
3
|
+
.pc-layout-item__media {
|
|
4
|
+
width: 100%;
|
|
5
|
+
display: block;
|
|
6
|
+
border-radius: var(--pc-border-radius);
|
|
7
|
+
}
|
|
8
|
+
.pc-layout-item__media_border {
|
|
9
|
+
border: 1px solid var(--yc-color-line-generic);
|
|
10
|
+
}
|
|
11
|
+
.pc-layout-item__meta-info {
|
|
12
|
+
margin: 16px 0 -8px 0;
|
|
13
|
+
}
|
|
14
|
+
.pc-layout-item__content {
|
|
15
|
+
margin: 16px 16px 0 0;
|
|
16
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
5
|
+
const utils_1 = require("../../utils");
|
|
6
|
+
const components_1 = require("../../components");
|
|
7
|
+
const utils_2 = require("./utils");
|
|
8
|
+
const __1 = require("..");
|
|
9
|
+
const b = (0, utils_1.block)('layout-item');
|
|
10
|
+
const LayoutItem = (_a) => {
|
|
11
|
+
var _b = _a.content, { links } = _b, content = tslib_1.__rest(_b, ["links"]), { metaInfo, media, border, fullScreen, className } = _a;
|
|
12
|
+
return (react_1.default.createElement("div", { className: b(null, className) },
|
|
13
|
+
fullScreen && (0, utils_2.hasFullScreen)(media) ? (react_1.default.createElement(components_1.FullScreenMedia, { showFullScreenIcon: (0, utils_2.showFullScreenIcon)(media) }, (_a = {}) => {
|
|
14
|
+
var { className: mediaClassName } = _a, fullScreenMediaProps = tslib_1.__rest(_a, ["className"]);
|
|
15
|
+
return (react_1.default.createElement(components_1.Media, Object.assign({}, media, fullScreenMediaProps, { className: b('media', { border }, mediaClassName) })));
|
|
16
|
+
})) : (react_1.default.createElement(components_1.Media, Object.assign({}, media, { className: b('media', { border }) }))),
|
|
17
|
+
metaInfo && react_1.default.createElement(components_1.MetaInfo, { items: metaInfo, className: b('meta-info') }),
|
|
18
|
+
react_1.default.createElement("div", { className: b('content') },
|
|
19
|
+
react_1.default.createElement(__1.Content, Object.assign({}, content, { links: (0, utils_2.getLayoutItemLinks)(links), size: "s", colSizes: { all: 12, md: 12 } })))));
|
|
20
|
+
};
|
|
21
|
+
exports.default = LayoutItem;
|