@gravity-ui/page-constructor 1.8.1 → 1.8.2-alpha.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/CHANGELOG.md +7 -0
- package/build/cjs/blocks/Tabs/Tabs.css +64 -24
- package/build/cjs/blocks/Tabs/Tabs.d.ts +1 -1
- package/build/cjs/blocks/Tabs/Tabs.js +34 -27
- package/build/cjs/blocks/Tabs/schema.d.ts +68 -17
- package/build/cjs/blocks/Tabs/schema.js +14 -19
- package/build/cjs/components/ButtonTabs/ButtonTabs.css +12 -0
- package/build/cjs/components/ButtonTabs/ButtonTabs.d.ts +13 -0
- package/build/cjs/components/ButtonTabs/ButtonTabs.js +26 -0
- package/build/cjs/components/Image/Image.css +4 -0
- package/build/cjs/components/Image/Image.js +3 -1
- package/build/cjs/components/Media/Media.js +1 -1
- package/build/cjs/components/Media/Video/Video.js +4 -3
- package/build/cjs/components/ReactPlayer/ReactPlayer.d.ts +1 -0
- package/build/cjs/components/ReactPlayer/ReactPlayer.js +5 -5
- package/build/cjs/components/VideoBlock/VideoBlock.d.ts +2 -0
- package/build/cjs/components/VideoBlock/VideoBlock.js +7 -6
- package/build/cjs/constructor-items.d.ts +1 -1
- package/build/cjs/models/constructor-items/blocks.d.ts +7 -5
- package/build/cjs/text-transform/blocks.js +11 -4
- package/build/esm/blocks/Tabs/Tabs.css +64 -24
- package/build/esm/blocks/Tabs/Tabs.d.ts +1 -1
- package/build/esm/blocks/Tabs/Tabs.js +35 -28
- package/build/esm/blocks/Tabs/schema.d.ts +68 -17
- package/build/esm/blocks/Tabs/schema.js +14 -20
- package/build/esm/components/ButtonTabs/ButtonTabs.css +12 -0
- package/build/esm/components/ButtonTabs/ButtonTabs.d.ts +14 -0
- package/build/esm/components/ButtonTabs/ButtonTabs.js +24 -0
- package/build/esm/components/Image/Image.css +4 -0
- package/build/esm/components/Image/Image.d.ts +1 -0
- package/build/esm/components/Image/Image.js +4 -1
- package/build/esm/components/Media/Media.js +1 -1
- package/build/esm/components/Media/Video/Video.js +4 -3
- package/build/esm/components/ReactPlayer/ReactPlayer.d.ts +1 -0
- package/build/esm/components/ReactPlayer/ReactPlayer.js +5 -5
- package/build/esm/components/VideoBlock/VideoBlock.d.ts +2 -0
- package/build/esm/components/VideoBlock/VideoBlock.js +6 -6
- package/build/esm/constructor-items.d.ts +1 -1
- package/build/esm/models/constructor-items/blocks.d.ts +7 -5
- package/build/esm/text-transform/blocks.js +11 -4
- package/package.json +4 -1
- package/server/models/constructor-items/blocks.d.ts +7 -5
- package/server/text-transform/blocks.js +11 -4
|
@@ -4,6 +4,7 @@ export declare const AUTOPLAY_ATTRIBUTES: {
|
|
|
4
4
|
autoplay: number;
|
|
5
5
|
mute: number;
|
|
6
6
|
};
|
|
7
|
+
export declare function getHeight(width: number): number;
|
|
7
8
|
export interface VideoBlockProps {
|
|
8
9
|
id?: string;
|
|
9
10
|
stream?: string;
|
|
@@ -12,6 +13,7 @@ export interface VideoBlockProps {
|
|
|
12
13
|
className?: string;
|
|
13
14
|
previewImg?: string;
|
|
14
15
|
playButton?: React.ReactNode;
|
|
16
|
+
height?: number;
|
|
15
17
|
}
|
|
16
18
|
declare const VideoBlock: (props: VideoBlockProps) => JSX.Element | null;
|
|
17
19
|
export default VideoBlock;
|
|
@@ -30,17 +30,17 @@ function getVideoSrc(stream, record) {
|
|
|
30
30
|
}
|
|
31
31
|
return src;
|
|
32
32
|
}
|
|
33
|
-
function getHeight(width) {
|
|
33
|
+
export function getHeight(width) {
|
|
34
34
|
return (width / 16) * 9;
|
|
35
35
|
}
|
|
36
36
|
const VideoBlock = (props) => {
|
|
37
|
-
const { stream, record, attributes, className, id, previewImg, playButton } = props;
|
|
37
|
+
const { stream, record, attributes, className, id, previewImg, playButton, height } = props;
|
|
38
38
|
const src = getVideoSrc(stream, record);
|
|
39
39
|
const ref = useRef(null);
|
|
40
40
|
const iframeRef = useRef();
|
|
41
41
|
const [hidePreview, setHidePreview] = useState(false);
|
|
42
42
|
const norender = (!stream && !record) || !src;
|
|
43
|
-
const [
|
|
43
|
+
const [currentHeight, setCurrentHeight] = useState(height || undefined);
|
|
44
44
|
const fullId = `${iframeId}-${id || src}`;
|
|
45
45
|
const onPreviewClick = useCallback(() => {
|
|
46
46
|
if (iframeRef.current) {
|
|
@@ -50,14 +50,14 @@ const VideoBlock = (props) => {
|
|
|
50
50
|
}, [src, attributes]);
|
|
51
51
|
useEffect(() => {
|
|
52
52
|
const updateSize = _.debounce(() => {
|
|
53
|
-
|
|
53
|
+
setCurrentHeight(ref.current ? Math.floor(getHeight(ref.current.offsetWidth)) : undefined);
|
|
54
54
|
}, 100);
|
|
55
55
|
updateSize();
|
|
56
56
|
window.addEventListener('resize', updateSize);
|
|
57
57
|
return () => {
|
|
58
58
|
window.removeEventListener('resize', updateSize);
|
|
59
59
|
};
|
|
60
|
-
}, []);
|
|
60
|
+
}, [height]);
|
|
61
61
|
useEffect(() => {
|
|
62
62
|
if (norender) {
|
|
63
63
|
return;
|
|
@@ -86,7 +86,7 @@ const VideoBlock = (props) => {
|
|
|
86
86
|
if (norender) {
|
|
87
87
|
return null;
|
|
88
88
|
}
|
|
89
|
-
return (React.createElement("div", { className: b(null, className), ref: ref, style: { height } }, previewImg && !hidePreview && (React.createElement("div", { className: b('preview'), onClick: onPreviewClick },
|
|
89
|
+
return (React.createElement("div", { className: b(null, className), ref: ref, style: { height: currentHeight } }, previewImg && !hidePreview && (React.createElement("div", { className: b('preview'), onClick: onPreviewClick },
|
|
90
90
|
React.createElement(Image, { src: previewImg, className: b('image') }),
|
|
91
91
|
playButton || (React.createElement("button", { className: b('button') },
|
|
92
92
|
React.createElement(Icon, { className: b('icon'), data: PlayVideo, size: 24 })))))));
|
|
@@ -11,7 +11,7 @@ export declare const blockMap: {
|
|
|
11
11
|
"info-block": (props: import("./models").InfoBlockProps) => JSX.Element;
|
|
12
12
|
"security-block": (props: import("./models").SecurityBlockProps) => JSX.Element;
|
|
13
13
|
"table-block": (props: import("./models").TableBlockProps) => JSX.Element;
|
|
14
|
-
"tabs-block": ({ items, title, description, animated }: import("./models").TabsBlockProps) => JSX.Element;
|
|
14
|
+
"tabs-block": ({ items, title, description, animated, tabsColSizes, centered, direction, }: import("./models").TabsBlockProps) => JSX.Element;
|
|
15
15
|
"link-table-block": ({ items, title, description, linkTheme }: import("./models").LinkTableBlockProps) => JSX.Element;
|
|
16
16
|
"header-block": (props: import("./models").WithChildren<import("./models").HeaderBlockProps & import("./models").ClassNameProps>) => JSX.Element;
|
|
17
17
|
"icons-block": ({ title, size, items }: import("./models").IconsBlockProps) => JSX.Element;
|
|
@@ -219,18 +219,20 @@ export interface TableBlockProps {
|
|
|
219
219
|
title: string;
|
|
220
220
|
table: TableProps;
|
|
221
221
|
}
|
|
222
|
-
export interface TabsBlockItem {
|
|
222
|
+
export interface TabsBlockItem extends Omit<ContentBlockProps, 'size' | 'colSizes' | 'centered' | 'theme'> {
|
|
223
223
|
tabName: string;
|
|
224
|
-
|
|
225
|
-
|
|
224
|
+
/**
|
|
225
|
+
* @deprecated Use array links from ContentBlockProps instead
|
|
226
|
+
*/
|
|
226
227
|
link?: LinkProps;
|
|
227
228
|
image?: ThemedImage;
|
|
228
|
-
disableCompress?: boolean;
|
|
229
229
|
caption?: string;
|
|
230
230
|
media?: ThemedMediaProps;
|
|
231
|
-
links?: LinkProps[];
|
|
232
231
|
}
|
|
233
232
|
export interface TabsBlockProps extends BlockHeaderProps, Animatable {
|
|
233
|
+
tabsColSizes?: GridColumnSizesType;
|
|
234
|
+
centered?: boolean;
|
|
235
|
+
direction?: MediaDirection;
|
|
234
236
|
items: TabsBlockItem[];
|
|
235
237
|
}
|
|
236
238
|
export interface LinkTableBlockProps extends BlockHeaderProps {
|
|
@@ -19,7 +19,6 @@ export const createItemsParser = (fields) => (transformer, items) => items.map((
|
|
|
19
19
|
}, {}));
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
|
-
const parseItems = createItemsParser(['title', 'text']);
|
|
23
22
|
function parseTableBlock(transformer, content) {
|
|
24
23
|
const legend = content === null || content === void 0 ? void 0 : content.legend;
|
|
25
24
|
return Object.assign(Object.assign({}, (content || {})), { legend: legend && legend.map((string) => transformer(string)) });
|
|
@@ -45,9 +44,13 @@ function parseSlider(transformer, block) {
|
|
|
45
44
|
}
|
|
46
45
|
const parseTitle = (transformer, title) => typeof title === 'object' && 'text' in title
|
|
47
46
|
? Object.assign(Object.assign({}, title), { text: transformer(title.text) }) : title && transformer(title);
|
|
47
|
+
const parseItemsTitle = (transformer, items) => items.map((_a) => {
|
|
48
|
+
var { title } = _a, rest = __rest(_a, ["title"]);
|
|
49
|
+
return (Object.assign({ title: title && parseTitle(transformer, title) }, rest));
|
|
50
|
+
});
|
|
48
51
|
function parsePriceDetailedBlock(transformer, block) {
|
|
49
52
|
const { priceType } = block;
|
|
50
|
-
|
|
53
|
+
block.items = block.items.map((item) => {
|
|
51
54
|
const { description, items: details = [] } = item;
|
|
52
55
|
if (priceType === 'marked-list') {
|
|
53
56
|
item.items = details.map((detail) => {
|
|
@@ -64,7 +67,6 @@ function parsePriceDetailedBlock(transformer, block) {
|
|
|
64
67
|
item.description = transformer(description);
|
|
65
68
|
return item;
|
|
66
69
|
});
|
|
67
|
-
block.items = transformedBlockItems;
|
|
68
70
|
return block;
|
|
69
71
|
}
|
|
70
72
|
const parseContentLayout = (transformer, content) => {
|
|
@@ -220,7 +222,12 @@ const config = {
|
|
|
220
222
|
{
|
|
221
223
|
fields: ['items'],
|
|
222
224
|
transformer: yfmTransformer,
|
|
223
|
-
parser:
|
|
225
|
+
parser: createItemsParser(['text', 'additionalInfo']),
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
fields: ['items'],
|
|
229
|
+
transformer: typografTransformer,
|
|
230
|
+
parser: parseItemsTitle,
|
|
224
231
|
},
|
|
225
232
|
],
|
|
226
233
|
[BlockType.TableBlock]: [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gravity-ui/page-constructor",
|
|
3
|
-
"version": "1.8.1",
|
|
3
|
+
"version": "1.8.2-alpha.1",
|
|
4
4
|
"description": "Gravity UI Page Constructor",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -121,5 +121,8 @@
|
|
|
121
121
|
"*.{json,yaml,yml,md}": [
|
|
122
122
|
"prettier --write"
|
|
123
123
|
]
|
|
124
|
+
},
|
|
125
|
+
"publishConfig": {
|
|
126
|
+
"tag": "alpha"
|
|
124
127
|
}
|
|
125
128
|
}
|
|
@@ -219,18 +219,20 @@ export interface TableBlockProps {
|
|
|
219
219
|
title: string;
|
|
220
220
|
table: TableProps;
|
|
221
221
|
}
|
|
222
|
-
export interface TabsBlockItem {
|
|
222
|
+
export interface TabsBlockItem extends Omit<ContentBlockProps, 'size' | 'colSizes' | 'centered' | 'theme'> {
|
|
223
223
|
tabName: string;
|
|
224
|
-
|
|
225
|
-
|
|
224
|
+
/**
|
|
225
|
+
* @deprecated Use array links from ContentBlockProps instead
|
|
226
|
+
*/
|
|
226
227
|
link?: LinkProps;
|
|
227
228
|
image?: ThemedImage;
|
|
228
|
-
disableCompress?: boolean;
|
|
229
229
|
caption?: string;
|
|
230
230
|
media?: ThemedMediaProps;
|
|
231
|
-
links?: LinkProps[];
|
|
232
231
|
}
|
|
233
232
|
export interface TabsBlockProps extends BlockHeaderProps, Animatable {
|
|
233
|
+
tabsColSizes?: GridColumnSizesType;
|
|
234
|
+
centered?: boolean;
|
|
235
|
+
direction?: MediaDirection;
|
|
234
236
|
items: TabsBlockItem[];
|
|
235
237
|
}
|
|
236
238
|
export interface LinkTableBlockProps extends BlockHeaderProps {
|
|
@@ -36,7 +36,6 @@ const createItemsParser = (fields) => (transformer, items) => items.map((item) =
|
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
38
|
exports.createItemsParser = createItemsParser;
|
|
39
|
-
const parseItems = (0, exports.createItemsParser)(['title', 'text']);
|
|
40
39
|
function parseTableBlock(transformer, content) {
|
|
41
40
|
const legend = content === null || content === void 0 ? void 0 : content.legend;
|
|
42
41
|
return Object.assign(Object.assign({}, (content || {})), { legend: legend && legend.map((string) => transformer(string)) });
|
|
@@ -62,9 +61,13 @@ function parseSlider(transformer, block) {
|
|
|
62
61
|
}
|
|
63
62
|
const parseTitle = (transformer, title) => typeof title === 'object' && 'text' in title
|
|
64
63
|
? Object.assign(Object.assign({}, title), { text: transformer(title.text) }) : title && transformer(title);
|
|
64
|
+
const parseItemsTitle = (transformer, items) => items.map((_a) => {
|
|
65
|
+
var { title } = _a, rest = __rest(_a, ["title"]);
|
|
66
|
+
return (Object.assign({ title: title && parseTitle(transformer, title) }, rest));
|
|
67
|
+
});
|
|
65
68
|
function parsePriceDetailedBlock(transformer, block) {
|
|
66
69
|
const { priceType } = block;
|
|
67
|
-
|
|
70
|
+
block.items = block.items.map((item) => {
|
|
68
71
|
const { description, items: details = [] } = item;
|
|
69
72
|
if (priceType === 'marked-list') {
|
|
70
73
|
item.items = details.map((detail) => {
|
|
@@ -81,7 +84,6 @@ function parsePriceDetailedBlock(transformer, block) {
|
|
|
81
84
|
item.description = transformer(description);
|
|
82
85
|
return item;
|
|
83
86
|
});
|
|
84
|
-
block.items = transformedBlockItems;
|
|
85
87
|
return block;
|
|
86
88
|
}
|
|
87
89
|
const parseContentLayout = (transformer, content) => {
|
|
@@ -239,7 +241,12 @@ const config = {
|
|
|
239
241
|
{
|
|
240
242
|
fields: ['items'],
|
|
241
243
|
transformer: yfmTransformer,
|
|
242
|
-
parser:
|
|
244
|
+
parser: (0, exports.createItemsParser)(['text', 'additionalInfo']),
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
fields: ['items'],
|
|
248
|
+
transformer: typografTransformer,
|
|
249
|
+
parser: parseItemsTitle,
|
|
243
250
|
},
|
|
244
251
|
],
|
|
245
252
|
[models_1.BlockType.TableBlock]: [
|