@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.
Files changed (43) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/build/cjs/blocks/Tabs/Tabs.css +64 -24
  3. package/build/cjs/blocks/Tabs/Tabs.d.ts +1 -1
  4. package/build/cjs/blocks/Tabs/Tabs.js +34 -27
  5. package/build/cjs/blocks/Tabs/schema.d.ts +68 -17
  6. package/build/cjs/blocks/Tabs/schema.js +14 -19
  7. package/build/cjs/components/ButtonTabs/ButtonTabs.css +12 -0
  8. package/build/cjs/components/ButtonTabs/ButtonTabs.d.ts +13 -0
  9. package/build/cjs/components/ButtonTabs/ButtonTabs.js +26 -0
  10. package/build/cjs/components/Image/Image.css +4 -0
  11. package/build/cjs/components/Image/Image.js +3 -1
  12. package/build/cjs/components/Media/Media.js +1 -1
  13. package/build/cjs/components/Media/Video/Video.js +4 -3
  14. package/build/cjs/components/ReactPlayer/ReactPlayer.d.ts +1 -0
  15. package/build/cjs/components/ReactPlayer/ReactPlayer.js +5 -5
  16. package/build/cjs/components/VideoBlock/VideoBlock.d.ts +2 -0
  17. package/build/cjs/components/VideoBlock/VideoBlock.js +7 -6
  18. package/build/cjs/constructor-items.d.ts +1 -1
  19. package/build/cjs/models/constructor-items/blocks.d.ts +7 -5
  20. package/build/cjs/text-transform/blocks.js +11 -4
  21. package/build/esm/blocks/Tabs/Tabs.css +64 -24
  22. package/build/esm/blocks/Tabs/Tabs.d.ts +1 -1
  23. package/build/esm/blocks/Tabs/Tabs.js +35 -28
  24. package/build/esm/blocks/Tabs/schema.d.ts +68 -17
  25. package/build/esm/blocks/Tabs/schema.js +14 -20
  26. package/build/esm/components/ButtonTabs/ButtonTabs.css +12 -0
  27. package/build/esm/components/ButtonTabs/ButtonTabs.d.ts +14 -0
  28. package/build/esm/components/ButtonTabs/ButtonTabs.js +24 -0
  29. package/build/esm/components/Image/Image.css +4 -0
  30. package/build/esm/components/Image/Image.d.ts +1 -0
  31. package/build/esm/components/Image/Image.js +4 -1
  32. package/build/esm/components/Media/Media.js +1 -1
  33. package/build/esm/components/Media/Video/Video.js +4 -3
  34. package/build/esm/components/ReactPlayer/ReactPlayer.d.ts +1 -0
  35. package/build/esm/components/ReactPlayer/ReactPlayer.js +5 -5
  36. package/build/esm/components/VideoBlock/VideoBlock.d.ts +2 -0
  37. package/build/esm/components/VideoBlock/VideoBlock.js +6 -6
  38. package/build/esm/constructor-items.d.ts +1 -1
  39. package/build/esm/models/constructor-items/blocks.d.ts +7 -5
  40. package/build/esm/text-transform/blocks.js +11 -4
  41. package/package.json +4 -1
  42. package/server/models/constructor-items/blocks.d.ts +7 -5
  43. 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 [height, setHeight] = useState();
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
- setHeight(ref.current ? Math.round(getHeight(ref.current.offsetWidth)) : undefined);
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
- title: string;
225
- text: string;
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
- const transformedBlockItems = block.items.map((item) => {
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: parseItems,
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
- title: string;
225
- text: string;
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
- const transformedBlockItems = block.items.map((item) => {
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: parseItems,
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]: [