@gravity-ui/page-constructor 5.14.4-alpha.2 → 5.14.4-alpha.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.
Files changed (126) hide show
  1. package/build/cjs/blocks/Banner/index.js +1 -0
  2. package/build/cjs/blocks/CardLayout/index.js +21 -3
  3. package/build/cjs/blocks/Companies/index.js +1 -0
  4. package/build/cjs/blocks/ContentLayout/index.d.ts +31 -1
  5. package/build/cjs/blocks/ContentLayout/index.js +64 -1
  6. package/build/cjs/blocks/ExtendedFeatures/index.d.ts +48 -2
  7. package/build/cjs/blocks/ExtendedFeatures/index.js +60 -2
  8. package/build/cjs/blocks/FilterBlock/index.d.ts +18 -0
  9. package/build/cjs/blocks/FilterBlock/index.js +81 -1
  10. package/build/cjs/blocks/Form/index.d.ts +1 -0
  11. package/build/cjs/blocks/Form/index.js +1 -0
  12. package/build/cjs/blocks/Header/index.d.ts +11 -0
  13. package/build/cjs/blocks/Header/index.js +18 -0
  14. package/build/cjs/blocks/HeaderSlider/index.d.ts +1 -0
  15. package/build/cjs/blocks/HeaderSlider/index.js +1 -0
  16. package/build/cjs/blocks/Icons/Icons.js +2 -2
  17. package/build/cjs/blocks/Icons/index.d.ts +7 -0
  18. package/build/cjs/blocks/Icons/index.js +44 -0
  19. package/build/cjs/blocks/Info/index.d.ts +1 -0
  20. package/build/cjs/blocks/Info/index.js +1 -0
  21. package/build/cjs/blocks/Map/index.d.ts +1 -0
  22. package/build/cjs/blocks/Map/index.js +1 -0
  23. package/build/cjs/blocks/Media/index.d.ts +26 -2
  24. package/build/cjs/blocks/Media/index.js +39 -4
  25. package/build/cjs/blocks/PromoFeaturesBlock/index.d.ts +11 -1
  26. package/build/cjs/blocks/PromoFeaturesBlock/index.js +31 -1
  27. package/build/cjs/blocks/Questions/index.d.ts +1 -0
  28. package/build/cjs/blocks/Questions/index.js +1 -0
  29. package/build/cjs/blocks/Share/index.d.ts +1 -0
  30. package/build/cjs/blocks/Share/index.js +1 -0
  31. package/build/cjs/blocks/Slider/index.d.ts +19 -0
  32. package/build/cjs/blocks/Slider/index.js +31 -0
  33. package/build/cjs/blocks/Table/index.d.ts +10 -0
  34. package/build/cjs/blocks/Table/index.js +17 -0
  35. package/build/cjs/blocks/Tabs/index.d.ts +1 -0
  36. package/build/cjs/blocks/Tabs/index.js +1 -0
  37. package/build/cjs/common/types/forms.d.ts +1 -0
  38. package/build/cjs/constructor-items.d.ts +2 -6
  39. package/build/cjs/constructor-items.js +2 -2
  40. package/build/cjs/editor-v2/components/BlocksList/BlocksList.css +27 -1
  41. package/build/cjs/editor-v2/components/BlocksList/BlocksList.js +34 -2
  42. package/build/cjs/editor-v2/components/Panels/Panels.css +36 -0
  43. package/build/cjs/editor-v2/components/Panels/Panels.d.ts +8 -0
  44. package/build/cjs/editor-v2/components/Panels/Panels.js +41 -0
  45. package/build/cjs/editor-v2/components/Tree/Tree.css +11 -0
  46. package/build/cjs/editor-v2/components/Tree/Tree.js +10 -2
  47. package/build/cjs/editor-v2/containers/Editor/Editor.css +0 -10
  48. package/build/cjs/editor-v2/containers/Editor/Editor.js +2 -13
  49. package/build/cjs/editor-v2/context/contentConfig/store.d.ts +1 -0
  50. package/build/cjs/editor-v2/context/contentConfig/store.js +3 -0
  51. package/build/cjs/sub-blocks/BackgroundCard/index.js +2 -0
  52. package/build/cjs/sub-blocks/BannerCard/index.js +1 -0
  53. package/build/cjs/sub-blocks/BasicCard/index.js +1 -0
  54. package/build/cjs/sub-blocks/Content/index.js +1 -0
  55. package/build/cjs/sub-blocks/ImageCard/index.js +1 -0
  56. package/build/cjs/sub-blocks/LayoutItem/index.js +7 -2
  57. package/build/cjs/sub-blocks/MediaCard/index.js +2 -0
  58. package/build/cjs/sub-blocks/PriceCard/index.js +1 -0
  59. package/build/cjs/sub-blocks/PriceDetailed/index.js +1 -0
  60. package/build/cjs/sub-blocks/Quote/index.js +1 -0
  61. package/build/esm/blocks/Banner/index.js +1 -0
  62. package/build/esm/blocks/CardLayout/index.js +21 -3
  63. package/build/esm/blocks/Companies/index.js +1 -0
  64. package/build/esm/blocks/ContentLayout/index.d.ts +31 -1
  65. package/build/esm/blocks/ContentLayout/index.js +64 -1
  66. package/build/esm/blocks/ExtendedFeatures/index.d.ts +48 -2
  67. package/build/esm/blocks/ExtendedFeatures/index.js +60 -2
  68. package/build/esm/blocks/FilterBlock/index.d.ts +18 -0
  69. package/build/esm/blocks/FilterBlock/index.js +81 -1
  70. package/build/esm/blocks/Form/index.d.ts +1 -0
  71. package/build/esm/blocks/Form/index.js +1 -0
  72. package/build/esm/blocks/Header/index.d.ts +11 -0
  73. package/build/esm/blocks/Header/index.js +18 -0
  74. package/build/esm/blocks/HeaderSlider/index.d.ts +1 -0
  75. package/build/esm/blocks/HeaderSlider/index.js +1 -0
  76. package/build/esm/blocks/Icons/Icons.js +2 -2
  77. package/build/esm/blocks/Icons/index.d.ts +7 -0
  78. package/build/esm/blocks/Icons/index.js +44 -0
  79. package/build/esm/blocks/Info/index.d.ts +1 -0
  80. package/build/esm/blocks/Info/index.js +1 -0
  81. package/build/esm/blocks/Map/index.d.ts +1 -0
  82. package/build/esm/blocks/Map/index.js +1 -0
  83. package/build/esm/blocks/Media/index.d.ts +26 -2
  84. package/build/esm/blocks/Media/index.js +39 -4
  85. package/build/esm/blocks/PromoFeaturesBlock/index.d.ts +11 -1
  86. package/build/esm/blocks/PromoFeaturesBlock/index.js +31 -1
  87. package/build/esm/blocks/Questions/index.d.ts +1 -0
  88. package/build/esm/blocks/Questions/index.js +1 -0
  89. package/build/esm/blocks/Share/index.d.ts +1 -0
  90. package/build/esm/blocks/Share/index.js +1 -0
  91. package/build/esm/blocks/Slider/index.d.ts +19 -0
  92. package/build/esm/blocks/Slider/index.js +31 -0
  93. package/build/esm/blocks/Table/index.d.ts +10 -0
  94. package/build/esm/blocks/Table/index.js +17 -0
  95. package/build/esm/blocks/Tabs/index.d.ts +1 -0
  96. package/build/esm/blocks/Tabs/index.js +1 -0
  97. package/build/esm/common/types/forms.d.ts +1 -0
  98. package/build/esm/constructor-items.d.ts +2 -6
  99. package/build/esm/constructor-items.js +1 -1
  100. package/build/esm/editor-v2/components/BlocksList/BlocksList.css +27 -1
  101. package/build/esm/editor-v2/components/BlocksList/BlocksList.js +35 -3
  102. package/build/esm/editor-v2/components/Panels/Panels.css +36 -0
  103. package/build/esm/editor-v2/components/Panels/Panels.d.ts +9 -0
  104. package/build/esm/editor-v2/components/Panels/Panels.js +37 -0
  105. package/build/esm/editor-v2/components/Tree/Tree.css +11 -0
  106. package/build/esm/editor-v2/components/Tree/Tree.js +11 -3
  107. package/build/esm/editor-v2/containers/Editor/Editor.css +0 -10
  108. package/build/esm/editor-v2/containers/Editor/Editor.js +2 -13
  109. package/build/esm/editor-v2/context/contentConfig/store.d.ts +1 -0
  110. package/build/esm/editor-v2/context/contentConfig/store.js +3 -0
  111. package/build/esm/sub-blocks/BackgroundCard/index.js +2 -0
  112. package/build/esm/sub-blocks/BannerCard/index.js +1 -0
  113. package/build/esm/sub-blocks/BasicCard/index.js +1 -0
  114. package/build/esm/sub-blocks/Content/index.js +1 -0
  115. package/build/esm/sub-blocks/ImageCard/index.js +1 -0
  116. package/build/esm/sub-blocks/LayoutItem/index.js +7 -2
  117. package/build/esm/sub-blocks/MediaCard/index.js +2 -0
  118. package/build/esm/sub-blocks/PriceCard/index.js +1 -0
  119. package/build/esm/sub-blocks/PriceDetailed/index.js +1 -0
  120. package/build/esm/sub-blocks/Quote/index.js +1 -0
  121. package/package.json +1 -1
  122. package/widget/index.js +1 -1
  123. package/build/cjs/sub-blocks/LayoutItem/form.d.ts +0 -8
  124. package/build/cjs/sub-blocks/LayoutItem/form.js +0 -14
  125. package/build/esm/sub-blocks/LayoutItem/form.d.ts +0 -8
  126. package/build/esm/sub-blocks/LayoutItem/form.js +0 -11
@@ -2,12 +2,36 @@ declare const MediaBlockConfig: {
2
2
  component: (props: import("../..").MediaBlockProps) => JSX.Element;
3
3
  schema: {
4
4
  name: string;
5
+ group: string;
5
6
  inputs: import("../../editor-v2").ConfigInput[];
6
7
  default: {
7
- type: string;
8
8
  title: string;
9
- additionalInfo: string;
10
9
  description: string;
10
+ additionalInfo: string;
11
+ links: {
12
+ url: string;
13
+ text: string;
14
+ theme: string;
15
+ arrow: boolean;
16
+ }[];
17
+ buttons: {
18
+ text: string;
19
+ theme: string;
20
+ url: string;
21
+ }[];
22
+ list: ({
23
+ title: string;
24
+ text: string;
25
+ } | {
26
+ text: string;
27
+ title?: undefined;
28
+ } | {
29
+ title: string;
30
+ text?: undefined;
31
+ })[];
32
+ media: {
33
+ image: string;
34
+ };
11
35
  };
12
36
  };
13
37
  };
@@ -8,12 +8,47 @@ const MediaBlockConfig = {
8
8
  component: Media_1.default,
9
9
  schema: {
10
10
  name: 'Media Block',
11
+ group: 'block',
11
12
  inputs: (0, form_generator_1.generateFromAJV)(schema_1.MediaBlock['media-block']),
12
13
  default: {
13
- type: 'media-block',
14
- title: 'Media Block',
15
- additionalInfo: 'Additional info',
16
- description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
14
+ title: 'Lorem ipsum dolor sit',
15
+ description: 'Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.',
16
+ additionalInfo: 'Duis aute irure dolor in reprehenderit n voluptate velit esse cillum dolore eu fugiat nulla pariatur.',
17
+ links: [
18
+ {
19
+ url: '#',
20
+ text: 'Learn more',
21
+ theme: 'normal',
22
+ arrow: true,
23
+ },
24
+ ],
25
+ buttons: [
26
+ {
27
+ text: 'Button',
28
+ theme: 'action',
29
+ url: 'https://example.com',
30
+ },
31
+ {
32
+ text: 'Button',
33
+ theme: 'outlined',
34
+ url: '#',
35
+ },
36
+ ],
37
+ list: [
38
+ {
39
+ title: 'Lorem ipsum',
40
+ text: 'Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
41
+ },
42
+ {
43
+ text: 'Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
44
+ },
45
+ {
46
+ title: 'Lorem ipsum ipsum',
47
+ },
48
+ ],
49
+ media: {
50
+ image: 'https://storage.yandexcloud.net/cloud-www-assets/constructor/main/new/media-01-01.jpg',
51
+ },
17
52
  },
18
53
  },
19
54
  };
@@ -2,10 +2,20 @@ declare const PromoFeaturesBlockConfig: {
2
2
  component: (props: import("../..").PromoFeaturesProps) => JSX.Element;
3
3
  schema: {
4
4
  name: string;
5
+ group: string;
5
6
  inputs: import("../../editor-v2").ConfigInput[];
6
7
  default: {
7
8
  title: string;
8
- items: {}[];
9
+ theme: string;
10
+ items: ({
11
+ title: string;
12
+ text: string;
13
+ theme?: undefined;
14
+ } | {
15
+ title: string;
16
+ text: string;
17
+ theme: string;
18
+ })[];
9
19
  };
10
20
  };
11
21
  };
@@ -8,10 +8,40 @@ const PromoFeaturesBlockConfig = {
8
8
  component: PromoFeaturesBlock_1.default,
9
9
  schema: {
10
10
  name: 'Promo Features Block',
11
+ group: 'block',
11
12
  inputs: (0, form_generator_1.generateFromAJV)(schema_1.PromoFeaturesBlock['promo-features-block']),
12
13
  default: {
13
14
  title: 'Promo Features Block',
14
- items: [{}],
15
+ theme: 'default',
16
+ items: [
17
+ {
18
+ title: 'Lorem ipsum dolor sit amet',
19
+ text: 'Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
20
+ },
21
+ {
22
+ title: 'Lorem ipsum dolor sit amet',
23
+ text: 'Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
24
+ },
25
+ {
26
+ title: 'Lorem ipsum dolor sit amet',
27
+ text: 'Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
28
+ },
29
+ {
30
+ title: 'Lorem ipsum dolor sit amet',
31
+ text: 'Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
32
+ theme: 'accent',
33
+ },
34
+ {
35
+ title: 'Lorem ipsum dolor sit amet',
36
+ text: 'Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
37
+ theme: 'accent-light',
38
+ },
39
+ {
40
+ title: 'Lorem ipsum dolor sit amet',
41
+ text: 'Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
42
+ theme: 'primary',
43
+ },
44
+ ],
15
45
  },
16
46
  },
17
47
  };
@@ -2,6 +2,7 @@ declare const QuestionsBlockConfig: {
2
2
  component: (props: import("../..").QuestionsProps) => JSX.Element;
3
3
  schema: {
4
4
  name: string;
5
+ group: string;
5
6
  inputs: import("../../editor-v2").ConfigInput[];
6
7
  default: {
7
8
  type: string;
@@ -8,6 +8,7 @@ const QuestionsBlockConfig = {
8
8
  component: Questions_1.default,
9
9
  schema: {
10
10
  name: 'Questions Block',
11
+ group: 'block',
11
12
  inputs: (0, form_generator_1.generateFromAJV)(schema_1.QuestionsBlock['questions-block']),
12
13
  default: {
13
14
  type: 'questions-block',
@@ -2,6 +2,7 @@ declare const ShareBlockConfig: {
2
2
  component: ({ items, title }: import("../..").ShareBlockProps) => JSX.Element;
3
3
  schema: {
4
4
  name: string;
5
+ group: string;
5
6
  inputs: import("../../editor-v2").ConfigInput[];
6
7
  default: {
7
8
  items: string[];
@@ -8,6 +8,7 @@ const ShareBlockConfig = {
8
8
  component: Share_1.default,
9
9
  schema: {
10
10
  name: 'Share Block',
11
+ group: 'block',
11
12
  inputs: (0, form_generator_1.generateFromAJV)(schema_1.ShareBlock['share-block']),
12
13
  default: {
13
14
  items: ['vk', 'telegram', 'facebook'],
@@ -2,7 +2,26 @@ declare const SliderBlockConfig: {
2
2
  component: (props: import("../..").WithChildren<import("./Slider").SliderProps>) => JSX.Element;
3
3
  schema: {
4
4
  name: string;
5
+ group: string;
5
6
  inputs: import("../../editor-v2").ConfigInput[];
7
+ default: {
8
+ dots: boolean;
9
+ type: string;
10
+ title: string;
11
+ description: string;
12
+ slidesToShow: number;
13
+ arrows: boolean;
14
+ children: {
15
+ type: string;
16
+ text: string;
17
+ url: string;
18
+ author: {
19
+ firstName: string;
20
+ secondName: string;
21
+ description: string;
22
+ };
23
+ }[];
24
+ };
6
25
  };
7
26
  };
8
27
  export default SliderBlockConfig;
@@ -8,7 +8,38 @@ const SliderBlockConfig = {
8
8
  component: Slider_1.default,
9
9
  schema: {
10
10
  name: 'Slider Block',
11
+ group: 'card-containers',
11
12
  inputs: (0, form_generator_1.generateFromAJV)(schema_1.SliderBlock['slider-block']),
13
+ default: {
14
+ dots: true,
15
+ type: 'slider-block',
16
+ title: 'Slider Block with Quote Cards',
17
+ description: 'You can insert any card inside block',
18
+ slidesToShow: 1,
19
+ arrows: true,
20
+ children: [
21
+ {
22
+ type: 'quote',
23
+ text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
24
+ url: 'https://example.com',
25
+ author: {
26
+ firstName: 'Lorem',
27
+ secondName: 'ipsum',
28
+ description: 'Lorem ipsum',
29
+ },
30
+ },
31
+ {
32
+ type: 'quote',
33
+ text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
34
+ url: 'https://example.com',
35
+ author: {
36
+ firstName: 'Lorem',
37
+ secondName: 'ipsum',
38
+ description: 'Lorem ipsum',
39
+ },
40
+ },
41
+ ],
42
+ },
12
43
  },
13
44
  };
14
45
  exports.default = SliderBlockConfig;
@@ -2,7 +2,17 @@ declare const TableBlockConfig: {
2
2
  component: (props: import("../..").TableBlockProps) => JSX.Element;
3
3
  schema: {
4
4
  name: string;
5
+ group: string;
5
6
  inputs: import("../../editor-v2").ConfigInput[];
7
+ default: {
8
+ type: string;
9
+ title: string;
10
+ table: {
11
+ content: string[][];
12
+ legend: string[];
13
+ justify: string[];
14
+ };
15
+ };
6
16
  };
7
17
  };
8
18
  export default TableBlockConfig;
@@ -8,7 +8,24 @@ const TableBlockConfig = {
8
8
  component: Table_1.default,
9
9
  schema: {
10
10
  name: 'Table Block',
11
+ group: 'block',
11
12
  inputs: (0, form_generator_1.generateFromAJV)(schema_1.TableBlock['table-block']),
13
+ default: {
14
+ type: 'table-block',
15
+ title: 'Lorem ipsum dolor sit amet',
16
+ table: {
17
+ content: [
18
+ ['Lorem', 'ipsum 1', 'dolor 2', 'sit 3'],
19
+ ['Lorem 1', '0', '0', '0'],
20
+ ['Lorem 2', '0', '0', '1'],
21
+ ['Lorem 3', '0', '0', '1'],
22
+ ['Lorem 4', '0', '1', '1'],
23
+ ['Lorem 5', '1', '1', '1'],
24
+ ],
25
+ legend: ['ipsum 1', 'ipsum 2'],
26
+ justify: ['start', 'center', 'center', 'center'],
27
+ },
28
+ },
12
29
  },
13
30
  };
14
31
  exports.default = TableBlockConfig;
@@ -2,6 +2,7 @@ declare const TabsBlockConfig: {
2
2
  component: ({ items, title, description, animated, tabsColSizes, centered, direction, contentSize, }: import("../..").TabsBlockProps) => JSX.Element;
3
3
  schema: {
4
4
  name: string;
5
+ group: string;
5
6
  inputs: import("../../editor-v2").ConfigInput[];
6
7
  default: {
7
8
  title: string;
@@ -8,6 +8,7 @@ const TabsBlockConfig = {
8
8
  component: Tabs_1.default,
9
9
  schema: {
10
10
  name: 'Tabs Block',
11
+ group: 'block',
11
12
  inputs: (0, form_generator_1.generateFromAJV)(schema_1.TabsBlock['tabs-block']),
12
13
  default: {
13
14
  title: 'Tabs Block',
@@ -1,6 +1,7 @@
1
1
  export interface BlockConfig {
2
2
  name: string;
3
3
  inputs: Array<ConfigInput>;
4
+ group?: string;
4
5
  default?: object;
5
6
  }
6
7
  export interface TextInput {
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { ConfigInput } from './common/types';
2
+ import { BlockConfig } from './common/types';
3
3
  /**
4
4
  * @deprecated use blockDataMap
5
5
  **/
@@ -50,10 +50,6 @@ export declare const navItemMap: {
50
50
  };
51
51
  export interface BlockData {
52
52
  component: React.ComponentType<any>;
53
- schema: {
54
- name: string;
55
- inputs: ConfigInput[];
56
- default?: object;
57
- };
53
+ schema: BlockConfig;
58
54
  }
59
55
  export declare const blockDataMap: Record<string, BlockData>;
@@ -34,7 +34,7 @@ const BasicCard_1 = tslib_1.__importDefault(require("./sub-blocks/BasicCard"));
34
34
  const Content_1 = tslib_1.__importDefault(require("./sub-blocks/Content"));
35
35
  const Divider_1 = tslib_1.__importDefault(require("./sub-blocks/Divider"));
36
36
  const ImageCard_1 = tslib_1.__importDefault(require("./sub-blocks/ImageCard"));
37
- const form_1 = tslib_1.__importDefault(require("./sub-blocks/LayoutItem/form"));
37
+ const LayoutItem_1 = tslib_1.__importDefault(require("./sub-blocks/LayoutItem"));
38
38
  const MediaCard_1 = tslib_1.__importDefault(require("./sub-blocks/MediaCard"));
39
39
  const PriceCard_1 = tslib_1.__importDefault(require("./sub-blocks/PriceCard"));
40
40
  const PriceDetailed_1 = tslib_1.__importDefault(require("./sub-blocks/PriceDetailed"));
@@ -112,7 +112,7 @@ exports.blockDataMap = {
112
112
  [models_1.SubBlockType.PriceDetailed]: PriceDetailed_1.default,
113
113
  [models_1.SubBlockType.MediaCard]: MediaCard_1.default,
114
114
  [models_1.SubBlockType.BannerCard]: BannerCard_1.default,
115
- [models_1.SubBlockType.LayoutItem]: form_1.default,
115
+ [models_1.SubBlockType.LayoutItem]: LayoutItem_1.default,
116
116
  [models_1.SubBlockType.BackgroundCard]: BackgroundCard_1.default,
117
117
  [models_1.SubBlockType.BasicCard]: BasicCard_1.default,
118
118
  [models_1.SubBlockType.Content]: Content_1.default,
@@ -18,21 +18,47 @@ body {
18
18
  }
19
19
  .pc-blocks-list__card {
20
20
  padding: 8px;
21
- cursor: pointer;
21
+ cursor: grab;
22
22
  user-select: none;
23
23
  margin-bottom: 8px;
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: space-between;
27
+ gap: 4px;
24
28
  }
25
29
  .pc-blocks-list__card:last-child {
26
30
  margin-bottom: 0;
27
31
  }
28
32
  .pc-blocks-list__card:active {
29
33
  background-color: var(--g-color-base-generic-hover);
34
+ cursor: grabbing;
35
+ }
36
+ .pc-blocks-list__name {
37
+ flex: 1;
30
38
  }
31
39
  .pc-blocks-list__title {
32
40
  font-size: var(--g-text-subheader-3-font-size);
33
41
  line-height: var(--g-text-subheader-3-line-height);
34
42
  font-weight: var(--g-text-subheader-font-weight);
35
43
  margin-bottom: 10px;
44
+ display: flex;
45
+ align-items: center;
46
+ justify-content: flex-start;
47
+ }
48
+ .pc-blocks-list__subtitle {
49
+ font-size: var(--g-text-subheader-2-font-size);
50
+ line-height: var(--g-text-subheader-2-line-height);
51
+ font-weight: var(--g-text-subheader-font-weight);
52
+ margin-bottom: 10px;
53
+ display: flex;
54
+ align-items: center;
55
+ justify-content: flex-start;
56
+ }
57
+ .pc-blocks-list__group {
58
+ margin-bottom: 16px;
59
+ }
60
+ .pc-blocks-list__group:last-child {
61
+ margin-bottom: 0;
36
62
  }
37
63
  .pc-blocks-list__section {
38
64
  margin-bottom: 20px;
@@ -2,21 +2,53 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const react_1 = tslib_1.__importStar(require("react"));
5
+ const icons_1 = require("@gravity-ui/icons");
5
6
  const uikit_1 = require("@gravity-ui/uikit");
7
+ const lodash_1 = tslib_1.__importDefault(require("lodash"));
6
8
  const types_1 = require("../../../common/types");
7
9
  const utils_1 = require("../../../utils");
8
10
  const contentConfig_1 = require("../../context/contentConfig");
11
+ const editorContext_1 = require("../../context/editorContext");
9
12
  const messagesContext_1 = require("../../context/messagesContext");
10
13
  const b = (0, utils_1.block)('blocks-list');
11
14
  const BlocksList = (_p) => {
12
- const { blocks } = (0, contentConfig_1.useContentConfigStore)();
15
+ const { blocks, insertBlock } = (0, contentConfig_1.useContentConfigStore)();
16
+ const { selectedBlock } = (0, editorContext_1.useEditorStore)();
13
17
  const sendMessage = (0, messagesContext_1.useMessageSender)();
14
18
  const onMouseDown = (0, react_1.useCallback)((blockType) => {
15
19
  sendMessage({ type: types_1.ActionTypes.InsertModeEnable, payload: { blockType } });
16
20
  }, [sendMessage]);
21
+ const onAddClick = (0, react_1.useCallback)((type) => {
22
+ const path = selectedBlock ? selectedBlock.path : [0];
23
+ return insertBlock(path, type);
24
+ }, [insertBlock, selectedBlock]);
25
+ const groups = blocks.reduce((acc, currentBlock) => {
26
+ const group = currentBlock.schema.group;
27
+ if (group) {
28
+ if (!acc[group]) {
29
+ /* eslint-disable no-param-reassign */
30
+ acc[group] = [];
31
+ }
32
+ acc[group].push(currentBlock);
33
+ }
34
+ else {
35
+ if (!acc['other']) {
36
+ /* eslint-disable no-param-reassign */
37
+ acc['other'] = [];
38
+ }
39
+ acc['other'].push(currentBlock);
40
+ }
41
+ return acc;
42
+ }, {});
17
43
  return (react_1.default.createElement("div", { className: b() },
18
44
  react_1.default.createElement("div", { className: b('section') },
19
45
  react_1.default.createElement("div", { className: b('title') }, "Blocks"),
20
- blocks.map(({ type, schema: { name } }) => (react_1.default.createElement(uikit_1.Card, { key: type, className: b('card'), onMouseDown: () => onMouseDown(type) }, name))))));
46
+ Object.entries(groups).map(([key, groupBlocks]) => (react_1.default.createElement("div", { className: b('group'), key: key },
47
+ react_1.default.createElement("div", { className: b('subtitle') }, lodash_1.default.capitalize(key)),
48
+ react_1.default.createElement("div", null, groupBlocks.map(({ type, schema: { name } }) => (react_1.default.createElement(uikit_1.Card, { key: type, className: b('card'), onMouseDown: () => onMouseDown(type) },
49
+ react_1.default.createElement(uikit_1.Icon, { data: icons_1.Grip }),
50
+ react_1.default.createElement("div", { className: b('name') }, name),
51
+ react_1.default.createElement(uikit_1.Button, { onClick: () => onAddClick(type) },
52
+ react_1.default.createElement(uikit_1.Icon, { data: icons_1.Plus }))))))))))));
21
53
  };
22
54
  exports.default = BlocksList;
@@ -0,0 +1,36 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ body {
4
+ --pc-editor-header-height: 48px;
5
+ --pc-editor-code-header-height: 36px;
6
+ --pc-editor-divider-width: 12px;
7
+ --pc-editor-left-column-width: calc(400px + var(--pc-editor-divider-width));
8
+ --pc-editor-base-color: var(--g-color-base-brand);
9
+ --pc-editor-control-color: var(--g-color-base-brand);
10
+ --pc-editor-control-icon-color: var(--g-color-text-dark-primary);
11
+ }
12
+
13
+ .pc-panels__button-wrap {
14
+ --pc-editor-panels-button-gap: 8px;
15
+ position: absolute;
16
+ z-index: 1000;
17
+ }
18
+ .pc-panels__button-wrap_left {
19
+ bottom: var(--pc-editor-panels-button-gap);
20
+ left: calc(100% + var(--pc-editor-panels-button-gap));
21
+ }
22
+ .pc-panels__button-wrap_right {
23
+ bottom: var(--pc-editor-panels-button-gap);
24
+ right: calc(100% + var(--pc-editor-panels-button-gap));
25
+ }
26
+ .pc-panels__draggable {
27
+ position: relative;
28
+ width: 12px;
29
+ height: 100%;
30
+ cursor: col-resize;
31
+ background-color: var(--g-color-line-generic);
32
+ display: flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ color: var(--g-color-base-background);
36
+ }
@@ -0,0 +1,8 @@
1
+ import { ReactElement } from 'react';
2
+ interface PanelsProps {
3
+ left: ReactElement;
4
+ middle: ReactElement;
5
+ right: ReactElement;
6
+ }
7
+ export declare const Panels: (props: PanelsProps) => JSX.Element;
8
+ export {};
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Panels = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importStar(require("react"));
6
+ const icons_1 = require("@gravity-ui/icons");
7
+ const uikit_1 = require("@gravity-ui/uikit");
8
+ const react_resizable_panels_1 = require("react-resizable-panels");
9
+ const utils_1 = require("../../../utils");
10
+ const b = (0, utils_1.block)('panels');
11
+ const Panels = (props) => {
12
+ var _a, _b;
13
+ const { left, right, middle } = props;
14
+ const leftPanel = (0, react_1.useRef)(null);
15
+ const rightPanel = (0, react_1.useRef)(null);
16
+ const expandPanel = (reference) => {
17
+ const panel = reference.current;
18
+ if (panel) {
19
+ panel.expand();
20
+ }
21
+ };
22
+ const isCollapsed = {
23
+ left: ((_a = leftPanel.current) === null || _a === void 0 ? void 0 : _a.isCollapsed()) || false,
24
+ right: ((_b = rightPanel.current) === null || _b === void 0 ? void 0 : _b.isCollapsed()) || false,
25
+ };
26
+ return (react_1.default.createElement(react_resizable_panels_1.PanelGroup, { className: b('panel'), autoSaveId: "page-constructor-editor", direction: "horizontal" },
27
+ react_1.default.createElement(react_resizable_panels_1.Panel, { ref: leftPanel, collapsible: true, defaultSize: 25, minSize: 15 }, left),
28
+ react_1.default.createElement(react_resizable_panels_1.PanelResizeHandle, { className: b('draggable') },
29
+ react_1.default.createElement(icons_1.Grip, { className: b('grip') }),
30
+ isCollapsed.left && (react_1.default.createElement("div", { className: b('button-wrap', { left: true }) },
31
+ react_1.default.createElement(uikit_1.Button, { className: b('button'), view: "action", onClick: () => expandPanel(leftPanel) },
32
+ react_1.default.createElement(uikit_1.Icon, { data: icons_1.ArrowRightFromLine }))))),
33
+ react_1.default.createElement(react_resizable_panels_1.Panel, { minSize: 20 }, middle),
34
+ react_1.default.createElement(react_resizable_panels_1.PanelResizeHandle, { className: b('draggable') },
35
+ react_1.default.createElement(icons_1.Grip, { className: b('grip') }),
36
+ isCollapsed.right && (react_1.default.createElement("div", { className: b('button-wrap', { right: true }) },
37
+ react_1.default.createElement(uikit_1.Button, { className: b('button'), view: "action", onClick: () => expandPanel(rightPanel) },
38
+ react_1.default.createElement(uikit_1.Icon, { data: icons_1.ArrowLeftFromLine }))))),
39
+ react_1.default.createElement(react_resizable_panels_1.Panel, { ref: rightPanel, collapsible: true, minSize: 15, defaultSize: 25 }, right)));
40
+ };
41
+ exports.Panels = Panels;
@@ -13,6 +13,17 @@ body {
13
13
  .pc-tree {
14
14
  padding: 12px;
15
15
  }
16
+ .pc-tree__head {
17
+ margin-bottom: 10px;
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: space-between;
21
+ }
22
+ .pc-tree__title {
23
+ font-size: var(--g-text-subheader-3-font-size);
24
+ line-height: var(--g-text-subheader-3-line-height);
25
+ font-weight: var(--g-text-subheader-font-weight);
26
+ }
16
27
  .pc-tree__item {
17
28
  padding: 8px;
18
29
  margin-bottom: 8px;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const react_1 = tslib_1.__importDefault(require("react"));
5
+ const icons_1 = require("@gravity-ui/icons");
5
6
  const uikit_1 = require("@gravity-ui/uikit");
6
7
  const utils_1 = require("../../../utils");
7
8
  const contentConfig_1 = require("../../context/contentConfig");
@@ -20,13 +21,20 @@ const generateTree = (items) => {
20
21
  });
21
22
  };
22
23
  const Tree = (_p) => {
23
- const { config } = (0, contentConfig_1.useContentConfigStore)();
24
+ const { config, resetBlocks } = (0, contentConfig_1.useContentConfigStore)();
24
25
  const blockTree = generateTree(config.blocks);
25
26
  const renderTree = (items, deepLevel = 0) => {
26
27
  return items.map(({ type, children }, index) => (react_1.default.createElement(react_1.default.Fragment, { key: index },
27
28
  react_1.default.createElement(uikit_1.Card, { className: b('item', { deep: deepLevel }) }, type),
28
29
  children && renderTree(children, deepLevel + 1))));
29
30
  };
30
- return react_1.default.createElement("div", { className: b() }, renderTree(blockTree));
31
+ return (react_1.default.createElement("div", { className: b() },
32
+ react_1.default.createElement("div", { className: b('head') },
33
+ react_1.default.createElement("div", { className: b('title') }, "Tree"),
34
+ react_1.default.createElement("div", { className: b('actions') },
35
+ react_1.default.createElement(uikit_1.Button, { view: "outlined-danger", onClick: () => resetBlocks() },
36
+ react_1.default.createElement(uikit_1.Icon, { data: icons_1.TrashBin }),
37
+ "Clear all"))),
38
+ react_1.default.createElement("div", { className: b('cards') }, renderTree(blockTree))));
31
39
  };
32
40
  exports.default = Tree;
@@ -36,16 +36,6 @@ body {
36
36
  .pc-editor__canvas {
37
37
  flex: 1;
38
38
  }
39
- .pc-editor__draggable {
40
- width: 12px;
41
- height: 100%;
42
- cursor: col-resize;
43
- background-color: var(--g-color-line-generic);
44
- display: flex;
45
- align-items: center;
46
- justify-content: center;
47
- color: var(--g-color-base-background);
48
- }
49
39
  .pc-editor__overlay {
50
40
  position: absolute;
51
41
  height: 100%;