@gravity-ui/page-constructor 3.1.2 → 3.3.0

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 (241) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +2 -0
  3. package/build/cjs/blocks/Banner/schema.d.ts +63 -21
  4. package/build/cjs/blocks/CardLayout/schema.d.ts +10 -4
  5. package/build/cjs/blocks/Companies/schema.d.ts +5 -2
  6. package/build/cjs/blocks/ContentLayout/ContentLayout.js +3 -2
  7. package/build/cjs/blocks/ContentLayout/schema.d.ts +107 -61
  8. package/build/cjs/blocks/ContentLayout/schema.js +23 -18
  9. package/build/cjs/blocks/ExtendedFeatures/schema.d.ts +31 -4
  10. package/build/cjs/blocks/ExtendedFeatures/schema.js +2 -3
  11. package/build/cjs/blocks/FilterBlock/schema.d.ts +13 -5
  12. package/build/cjs/blocks/FilterBlock/schema.js +13 -2
  13. package/build/cjs/blocks/Header/Header.css +6 -7
  14. package/build/cjs/blocks/Header/schema.d.ts +92 -36
  15. package/build/cjs/blocks/Header/schema.js +1 -0
  16. package/build/cjs/blocks/HeaderSlider/schema.d.ts +48 -53
  17. package/build/cjs/blocks/HeaderSlider/schema.js +3 -1
  18. package/build/cjs/blocks/Icons/schema.d.ts +3 -1
  19. package/build/cjs/blocks/Icons/schema.js +2 -1
  20. package/build/cjs/blocks/Info/schema.d.ts +19 -8
  21. package/build/cjs/blocks/Map/schema.d.ts +17 -6
  22. package/build/cjs/blocks/Media/schema.d.ts +204 -152
  23. package/build/cjs/blocks/Media/schema.js +1 -1
  24. package/build/cjs/blocks/PromoFeaturesBlock/schema.d.ts +22 -8
  25. package/build/cjs/blocks/PromoFeaturesBlock/schema.js +1 -0
  26. package/build/cjs/blocks/Questions/schema.d.ts +7 -3
  27. package/build/cjs/blocks/Slider/schema.d.ts +13 -18
  28. package/build/cjs/blocks/Slider/schema.js +4 -5
  29. package/build/cjs/blocks/Table/schema.d.ts +5 -2
  30. package/build/cjs/blocks/Table/schema.js +12 -2
  31. package/build/cjs/blocks/Tabs/schema.d.ts +43 -16
  32. package/build/cjs/components/BlockBase/BlockBase.js +2 -2
  33. package/build/cjs/components/HeaderBreadcrumbs/HeaderBreadcrumbs.js +1 -1
  34. package/build/cjs/components/Image/schema.d.ts +1 -0
  35. package/build/cjs/components/Image/schema.js +3 -2
  36. package/build/cjs/containers/PageConstructor/components/ConstructorBlock/ConstructorBlock.js +1 -1
  37. package/build/cjs/containers/PageConstructor/components/ConstructorItem/ConstructorItem.js +1 -1
  38. package/build/cjs/customization/BlockDecoration.d.ts +1 -1
  39. package/build/cjs/customization/BlockDecoration.js +5 -6
  40. package/build/cjs/editor/{Components → components}/AddBlock/AddBlock.css +0 -7
  41. package/build/cjs/editor/components/AddBlock/AddBlock.d.ts +7 -0
  42. package/build/cjs/editor/{Components → components}/AddBlock/AddBlock.js +2 -2
  43. package/build/cjs/editor/components/BlockForm/BlockForm.d.ts +12 -0
  44. package/build/cjs/editor/components/BlockForm/BlockForm.js +26 -0
  45. package/build/cjs/editor/components/EditBlock/EditBlock.d.ts +13 -0
  46. package/build/cjs/editor/components/EditBlock/EditBlock.js +44 -0
  47. package/build/cjs/editor/components/ErrorBoundary/ErrorBoundary.css +27 -0
  48. package/build/cjs/editor/components/ErrorBoundary/ErrorBoundary.d.ts +13 -0
  49. package/build/cjs/editor/components/ErrorBoundary/ErrorBoundary.js +35 -0
  50. package/build/cjs/editor/components/ErrorBoundary/i18n/en.json +4 -0
  51. package/build/cjs/editor/components/ErrorBoundary/i18n/index.d.ts +2 -0
  52. package/build/cjs/editor/components/ErrorBoundary/i18n/index.js +8 -0
  53. package/build/cjs/editor/components/ErrorBoundary/i18n/ru.json +4 -0
  54. package/build/cjs/editor/components/PagePropsForm/PagePropsForm.d.ts +10 -0
  55. package/build/cjs/editor/components/PagePropsForm/PagePropsForm.js +17 -0
  56. package/build/cjs/editor/containers/Editor/Editor.css +28 -0
  57. package/build/cjs/editor/containers/Editor/Editor.d.ts +2 -0
  58. package/build/cjs/editor/containers/Editor/Editor.js +37 -0
  59. package/build/cjs/editor/containers/Form/Form.css +94 -0
  60. package/build/cjs/editor/containers/Form/Form.d.ts +11 -0
  61. package/build/cjs/editor/containers/Form/Form.js +47 -0
  62. package/build/cjs/editor/containers/Form/dynamic-form-custom.css +0 -0
  63. package/build/cjs/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.css +27 -0
  64. package/build/cjs/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.d.ts +19 -0
  65. package/build/cjs/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.js +72 -0
  66. package/build/cjs/editor/dynamic-forms-custom/config.d.ts +2 -0
  67. package/build/cjs/editor/dynamic-forms-custom/config.js +13 -0
  68. package/build/cjs/editor/dynamic-forms-custom/hooks/useOneOf.d.ts +12 -0
  69. package/build/cjs/editor/dynamic-forms-custom/hooks/useOneOf.js +75 -0
  70. package/build/cjs/editor/dynamic-forms-custom/parser/detect.d.ts +9 -0
  71. package/build/cjs/editor/dynamic-forms-custom/parser/detect.js +36 -0
  72. package/build/cjs/editor/dynamic-forms-custom/parser/index.d.ts +28 -0
  73. package/build/cjs/editor/dynamic-forms-custom/parser/index.js +188 -0
  74. package/build/cjs/editor/dynamic-forms-custom/parser/types.d.ts +29 -0
  75. package/build/cjs/editor/dynamic-forms-custom/parser/types.js +2 -0
  76. package/build/cjs/editor/dynamic-forms-custom/parser/views.d.ts +37 -0
  77. package/build/cjs/editor/dynamic-forms-custom/parser/views.js +46 -0
  78. package/build/cjs/editor/hooks/useFormSpec.d.ts +2 -0
  79. package/build/cjs/editor/hooks/useFormSpec.js +13 -0
  80. package/build/cjs/editor/index.d.ts +1 -1
  81. package/build/cjs/editor/index.js +1 -1
  82. package/build/cjs/editor/store/index.d.ts +8 -11
  83. package/build/cjs/editor/store/index.js +61 -15
  84. package/build/cjs/editor/store/reducer.d.ts +17 -9
  85. package/build/cjs/editor/store/reducer.js +14 -31
  86. package/build/cjs/editor/store/utils.d.ts +1 -0
  87. package/build/cjs/editor/store/utils.js +3 -1
  88. package/build/cjs/editor/types/index.d.ts +11 -9
  89. package/build/cjs/editor/utils/index.d.ts +4 -3
  90. package/build/cjs/editor/utils/index.js +6 -4
  91. package/build/cjs/grid/Col/Col.d.ts +1 -1
  92. package/build/cjs/models/constructor-items/blocks.d.ts +13 -8
  93. package/build/cjs/models/constructor.d.ts +2 -2
  94. package/build/cjs/models/customization.d.ts +3 -8
  95. package/build/cjs/models/navigation.d.ts +1 -0
  96. package/build/cjs/navigation/components/Header/Header.css +2 -0
  97. package/build/cjs/navigation/components/Header/Header.js +15 -4
  98. package/build/cjs/navigation/schema.d.ts +1 -0
  99. package/build/cjs/schema/constants.d.ts +908 -0
  100. package/build/cjs/schema/constants.js +42 -0
  101. package/build/cjs/schema/index.d.ts +9 -228
  102. package/build/cjs/schema/index.js +8 -46
  103. package/build/cjs/schema/validators/common.d.ts +71 -27
  104. package/build/cjs/schema/validators/common.js +50 -17
  105. package/build/cjs/sub-blocks/BackgroundCard/schema.d.ts +12 -5
  106. package/build/cjs/sub-blocks/BasicCard/schema.d.ts +8 -3
  107. package/build/cjs/sub-blocks/Content/schema.d.ts +14 -6
  108. package/build/cjs/sub-blocks/Content/schema.js +9 -1
  109. package/build/cjs/sub-blocks/LayoutItem/schema.d.ts +23 -9
  110. package/build/cjs/sub-blocks/MediaCard/schema.d.ts +16 -6
  111. package/build/cjs/sub-blocks/PriceDetailed/schema.d.ts +1 -0
  112. package/build/cjs/sub-blocks/PriceDetailed/schema.js +5 -1
  113. package/build/cjs/sub-blocks/Quote/schema.d.ts +6 -2
  114. package/build/esm/blocks/Banner/schema.d.ts +63 -21
  115. package/build/esm/blocks/CardLayout/schema.d.ts +10 -4
  116. package/build/esm/blocks/Companies/schema.d.ts +5 -2
  117. package/build/esm/blocks/ContentLayout/ContentLayout.js +3 -2
  118. package/build/esm/blocks/ContentLayout/schema.d.ts +107 -61
  119. package/build/esm/blocks/ContentLayout/schema.js +23 -18
  120. package/build/esm/blocks/ExtendedFeatures/schema.d.ts +31 -4
  121. package/build/esm/blocks/ExtendedFeatures/schema.js +3 -4
  122. package/build/esm/blocks/FilterBlock/schema.d.ts +13 -5
  123. package/build/esm/blocks/FilterBlock/schema.js +13 -2
  124. package/build/esm/blocks/Header/Header.css +6 -7
  125. package/build/esm/blocks/Header/schema.d.ts +92 -36
  126. package/build/esm/blocks/Header/schema.js +1 -0
  127. package/build/esm/blocks/HeaderSlider/schema.d.ts +48 -53
  128. package/build/esm/blocks/HeaderSlider/schema.js +2 -1
  129. package/build/esm/blocks/Icons/schema.d.ts +3 -1
  130. package/build/esm/blocks/Icons/schema.js +2 -1
  131. package/build/esm/blocks/Info/schema.d.ts +19 -8
  132. package/build/esm/blocks/Map/schema.d.ts +17 -6
  133. package/build/esm/blocks/Media/schema.d.ts +204 -152
  134. package/build/esm/blocks/Media/schema.js +2 -2
  135. package/build/esm/blocks/PromoFeaturesBlock/schema.d.ts +22 -8
  136. package/build/esm/blocks/PromoFeaturesBlock/schema.js +1 -0
  137. package/build/esm/blocks/Questions/schema.d.ts +7 -3
  138. package/build/esm/blocks/Slider/schema.d.ts +13 -18
  139. package/build/esm/blocks/Slider/schema.js +4 -5
  140. package/build/esm/blocks/Table/schema.d.ts +5 -2
  141. package/build/esm/blocks/Table/schema.js +12 -2
  142. package/build/esm/blocks/Tabs/schema.d.ts +43 -16
  143. package/build/esm/components/BlockBase/BlockBase.js +2 -2
  144. package/build/esm/components/HeaderBreadcrumbs/HeaderBreadcrumbs.js +1 -1
  145. package/build/esm/components/Image/schema.d.ts +1 -0
  146. package/build/esm/components/Image/schema.js +3 -2
  147. package/build/esm/containers/PageConstructor/components/ConstructorBlock/ConstructorBlock.js +1 -1
  148. package/build/esm/containers/PageConstructor/components/ConstructorItem/ConstructorItem.js +1 -1
  149. package/build/esm/customization/BlockDecoration.d.ts +1 -1
  150. package/build/esm/customization/BlockDecoration.js +6 -6
  151. package/build/esm/editor/{Components → components}/AddBlock/AddBlock.css +0 -7
  152. package/build/esm/editor/components/AddBlock/AddBlock.d.ts +8 -0
  153. package/build/esm/editor/{Components → components}/AddBlock/AddBlock.js +2 -2
  154. package/build/esm/editor/components/BlockForm/BlockForm.d.ts +12 -0
  155. package/build/esm/editor/components/BlockForm/BlockForm.js +23 -0
  156. package/build/esm/editor/components/EditBlock/EditBlock.d.ts +14 -0
  157. package/build/esm/editor/components/EditBlock/EditBlock.js +41 -0
  158. package/build/esm/editor/components/ErrorBoundary/ErrorBoundary.css +27 -0
  159. package/build/esm/editor/components/ErrorBoundary/ErrorBoundary.d.ts +14 -0
  160. package/build/esm/editor/components/ErrorBoundary/ErrorBoundary.js +31 -0
  161. package/build/esm/editor/components/ErrorBoundary/i18n/en.json +4 -0
  162. package/build/esm/editor/components/ErrorBoundary/i18n/index.d.ts +2 -0
  163. package/build/esm/editor/components/ErrorBoundary/i18n/index.js +5 -0
  164. package/build/esm/editor/components/ErrorBoundary/i18n/ru.json +4 -0
  165. package/build/esm/editor/components/PagePropsForm/PagePropsForm.d.ts +10 -0
  166. package/build/esm/editor/components/PagePropsForm/PagePropsForm.js +13 -0
  167. package/build/esm/editor/containers/Editor/Editor.css +28 -0
  168. package/build/esm/editor/containers/Editor/Editor.d.ts +3 -0
  169. package/build/esm/editor/containers/Editor/Editor.js +34 -0
  170. package/build/esm/editor/containers/Form/Form.css +94 -0
  171. package/build/esm/editor/containers/Form/Form.d.ts +12 -0
  172. package/build/esm/editor/containers/Form/Form.js +45 -0
  173. package/build/esm/editor/containers/Form/dynamic-form-custom.css +0 -0
  174. package/build/esm/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.css +27 -0
  175. package/build/esm/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.d.ts +20 -0
  176. package/build/esm/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.js +68 -0
  177. package/build/esm/editor/dynamic-forms-custom/config.d.ts +2 -0
  178. package/build/esm/editor/dynamic-forms-custom/config.js +9 -0
  179. package/build/esm/editor/dynamic-forms-custom/hooks/useOneOf.d.ts +12 -0
  180. package/build/esm/editor/dynamic-forms-custom/hooks/useOneOf.js +69 -0
  181. package/build/esm/editor/dynamic-forms-custom/parser/detect.d.ts +9 -0
  182. package/build/esm/editor/dynamic-forms-custom/parser/detect.js +32 -0
  183. package/build/esm/editor/dynamic-forms-custom/parser/index.d.ts +28 -0
  184. package/build/esm/editor/dynamic-forms-custom/parser/index.js +186 -0
  185. package/build/esm/editor/dynamic-forms-custom/parser/types.d.ts +29 -0
  186. package/build/esm/editor/dynamic-forms-custom/parser/types.js +1 -0
  187. package/build/esm/editor/dynamic-forms-custom/parser/views.d.ts +37 -0
  188. package/build/esm/editor/dynamic-forms-custom/parser/views.js +39 -0
  189. package/build/esm/editor/hooks/useFormSpec.d.ts +2 -0
  190. package/build/esm/editor/hooks/useFormSpec.js +9 -0
  191. package/build/esm/editor/index.d.ts +1 -1
  192. package/build/esm/editor/index.js +1 -1
  193. package/build/esm/editor/store/index.d.ts +8 -11
  194. package/build/esm/editor/store/index.js +63 -17
  195. package/build/esm/editor/store/reducer.d.ts +17 -9
  196. package/build/esm/editor/store/reducer.js +12 -29
  197. package/build/esm/editor/store/utils.d.ts +1 -0
  198. package/build/esm/editor/store/utils.js +1 -0
  199. package/build/esm/editor/types/index.d.ts +11 -9
  200. package/build/esm/editor/utils/index.d.ts +4 -3
  201. package/build/esm/editor/utils/index.js +4 -3
  202. package/build/esm/grid/Col/Col.d.ts +1 -1
  203. package/build/esm/models/constructor-items/blocks.d.ts +13 -8
  204. package/build/esm/models/constructor.d.ts +2 -2
  205. package/build/esm/models/customization.d.ts +3 -8
  206. package/build/esm/models/navigation.d.ts +1 -0
  207. package/build/esm/navigation/components/Header/Header.css +2 -0
  208. package/build/esm/navigation/components/Header/Header.js +16 -5
  209. package/build/esm/navigation/schema.d.ts +1 -0
  210. package/build/esm/schema/constants.d.ts +908 -0
  211. package/build/esm/schema/constants.js +39 -0
  212. package/build/esm/schema/index.d.ts +9 -228
  213. package/build/esm/schema/index.js +4 -42
  214. package/build/esm/schema/validators/common.d.ts +71 -27
  215. package/build/esm/schema/validators/common.js +49 -16
  216. package/build/esm/sub-blocks/BackgroundCard/schema.d.ts +12 -5
  217. package/build/esm/sub-blocks/BasicCard/schema.d.ts +8 -3
  218. package/build/esm/sub-blocks/Content/schema.d.ts +14 -6
  219. package/build/esm/sub-blocks/Content/schema.js +9 -1
  220. package/build/esm/sub-blocks/LayoutItem/schema.d.ts +23 -9
  221. package/build/esm/sub-blocks/MediaCard/schema.d.ts +16 -6
  222. package/build/esm/sub-blocks/PriceDetailed/schema.d.ts +1 -0
  223. package/build/esm/sub-blocks/PriceDetailed/schema.js +5 -1
  224. package/build/esm/sub-blocks/Quote/schema.d.ts +6 -2
  225. package/package.json +5 -1
  226. package/server/models/constructor-items/blocks.d.ts +13 -8
  227. package/server/models/constructor.d.ts +2 -2
  228. package/server/models/customization.d.ts +3 -8
  229. package/server/models/navigation.d.ts +1 -0
  230. package/build/cjs/editor/Components/AddBlock/AddBlock.d.ts +0 -7
  231. package/build/cjs/editor/Components/EditBlock/EditBlock.d.ts +0 -4
  232. package/build/cjs/editor/Components/EditBlock/EditBlock.js +0 -32
  233. package/build/cjs/editor/Containers/Editor.d.ts +0 -2
  234. package/build/cjs/editor/Containers/Editor.js +0 -24
  235. package/build/esm/editor/Components/AddBlock/AddBlock.d.ts +0 -8
  236. package/build/esm/editor/Components/EditBlock/EditBlock.d.ts +0 -5
  237. package/build/esm/editor/Components/EditBlock/EditBlock.js +0 -30
  238. package/build/esm/editor/Containers/Editor.d.ts +0 -2
  239. package/build/esm/editor/Containers/Editor.js +0 -20
  240. /package/build/cjs/editor/{Components → components}/EditBlock/EditBlock.css +0 -0
  241. /package/build/esm/editor/{Components → components}/EditBlock/EditBlock.css +0 -0
@@ -1,5 +1,4 @@
1
- import { getHeaderBlock, getOrderedBlocks } from '../../utils';
2
- import { addBlock, changeBlocksOrder, duplicateBlock, getNewBlockIndex } from './utils';
1
+ import { addBlock, changeBlocksOrder, duplicateBlock, getErrorBoundaryState } from './utils';
3
2
  // actions
4
3
  export const SELECT_BLOCK = 'SELECT_BLOCK';
5
4
  export const DELETE_BLOCK = 'DELETE_BLOCK';
@@ -7,47 +6,31 @@ export const COPY_BLOCK = 'COPY_BLOCK';
7
6
  export const ADD_BLOCK = 'ADD_BLOCK';
8
7
  export const SET_REGION = 'SET_REGION';
9
8
  export const ORDER_BLOCK = 'ORDER_BLOCK';
9
+ export const UPDATE_CONTENT = 'UPDATE_CONTENT';
10
10
  // reducer
11
- export const getReducer = (headerBlockTypes) => (state, action) => {
11
+ export const reducer = (state, action) => {
12
12
  const { content } = state;
13
- const header = getHeaderBlock(content.blocks, headerBlockTypes);
14
- const orderedBlocks = getOrderedBlocks(content.blocks, headerBlockTypes);
15
- const withHeader = (blocks) => [header, ...blocks].filter(Boolean);
16
- const getNewState = (blocks, activeBlockId) => (Object.assign(Object.assign({}, state), { content: Object.assign(Object.assign({}, content), { blocks }), activeBlockId, orderedBlocksCount: orderedBlocks.length }));
13
+ const getNewState = (blocks, activeBlockIndex) => (Object.assign(Object.assign({}, state), { content: Object.assign(Object.assign({}, content), { blocks }), activeBlockIndex }));
17
14
  switch (action.type) {
15
+ case UPDATE_CONTENT:
16
+ return Object.assign(Object.assign({}, state), { content: action.payload, errorBoundaryState: getErrorBoundaryState(state.errorBoundaryState) });
18
17
  case SELECT_BLOCK:
19
- return getNewState(content.blocks, action.payload);
18
+ return Object.assign(Object.assign({}, state), { activeBlockIndex: action.payload });
20
19
  case DELETE_BLOCK: {
21
20
  const blockId = action.payload;
22
- return getNewState(typeof blockId === 'string'
23
- ? content.blocks.filter(({ type }) => type !== blockId)
24
- : withHeader(orderedBlocks.filter((_block, index) => index !== blockId)), -1);
21
+ return getNewState(content.blocks.filter((_block, index) => index !== blockId), -1);
25
22
  }
26
23
  case COPY_BLOCK: {
27
24
  const index = action.payload;
28
- return getNewState(withHeader(duplicateBlock(orderedBlocks, index)), index + 1);
25
+ return getNewState(duplicateBlock(content.blocks, index), index + 1);
29
26
  }
30
27
  case ADD_BLOCK: {
31
- let blocks;
32
- let activeBlockId;
33
- const block = action.payload;
34
- if (headerBlockTypes.includes(block.type)) {
35
- blocks = header ? blocks : [block, ...orderedBlocks];
36
- activeBlockId = block.type;
37
- }
38
- else {
39
- const newBlockIndex = getNewBlockIndex(state.activeBlockId, orderedBlocks.length);
40
- blocks = withHeader(addBlock(orderedBlocks, block, newBlockIndex));
41
- activeBlockId = newBlockIndex;
42
- }
43
- if (blocks) {
44
- return getNewState(blocks, activeBlockId);
45
- }
46
- return state;
28
+ const { block, index } = action.payload;
29
+ return getNewState(addBlock(content.blocks, block, index), index);
47
30
  }
48
31
  case ORDER_BLOCK: {
49
32
  const { oldIndex, newIndex } = action.payload;
50
- return getNewState(withHeader(changeBlocksOrder(orderedBlocks, oldIndex, newIndex)), newIndex);
33
+ return getNewState(changeBlocksOrder(content.blocks, oldIndex, newIndex), newIndex);
51
34
  }
52
35
  default:
53
36
  return state;
@@ -10,3 +10,4 @@ export declare const addEditorProps: (content: PageContent) => {
10
10
  menu?: import("../../models").Menu | undefined;
11
11
  background?: import("../../models").ThemedMediaProps | undefined;
12
12
  };
13
+ export declare const getErrorBoundaryState: (prevState: number) => number;
@@ -24,3 +24,4 @@ export const addBlock = (array, block, index) => {
24
24
  export const addEditorProps = (content) => {
25
25
  return Object.assign(Object.assign({}, content), { animated: false });
26
26
  };
27
+ export const getErrorBoundaryState = (prevState) => prevState === Number.MAX_SAFE_INTEGER ? 0 : prevState + 1;
@@ -1,17 +1,19 @@
1
1
  /// <reference types="react" />
2
2
  import { PageConstructorProps } from '../../containers/PageConstructor';
3
- import { BlockDecoratorProps, PageData } from '../../models';
3
+ import { BlockDecorationProps, PageContent } from '../../models';
4
+ import { SchemaCustomConfig } from '../../schema';
5
+ import { EditBlockActions } from '../components/EditBlock/EditBlock';
4
6
  export type EditorBlockId = number | string;
5
7
  export interface EditorProps extends Required<Pick<PageConstructorProps, 'content'>>, Partial<Omit<PageConstructorProps, 'content'>> {
6
8
  children: (props: Partial<PageConstructorProps>) => React.ReactNode;
7
- onChange?: (data: PageData) => void;
9
+ onChange?: (data: PageContent) => void;
10
+ customSchema?: SchemaCustomConfig;
8
11
  }
9
12
  export interface EditBlockEditorProps {
10
- activeBlockId: EditorBlockId;
11
- orderedBlocksCount: number;
12
- onSelect: (index: EditorBlockId) => void;
13
- onDelete: (index: EditorBlockId) => void;
14
- onCopy: (index: number) => void;
15
- onOrderChange: (index: number, newIndex: number) => void;
13
+ isActive?: boolean;
14
+ onSelect: () => void;
15
+ actions: EditBlockActions;
16
+ }
17
+ export interface EditBlockProps extends EditBlockEditorProps, BlockDecorationProps {
18
+ isHeader?: boolean;
16
19
  }
17
- export type EditBlockProps = EditBlockEditorProps & BlockDecoratorProps;
@@ -1,11 +1,12 @@
1
- import { BlockDecorator, CustomConfig } from '../../models';
1
+ import { BlockDecorationProps, BlockDecorator, CustomConfig } from '../../models';
2
2
  export declare const formatBlockName: (name: string) => string;
3
- export declare const addCustomDecorator: (decorator: BlockDecorator, custom?: CustomConfig) => {
3
+ export declare const addCustomDecorator: (decorators: BlockDecorator[], custom?: CustomConfig) => {
4
4
  decorators: {
5
- block: ((props: import("../../models").BlockDecoratorProps) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>)[];
5
+ block: ((props: BlockDecorationProps) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>)[];
6
6
  };
7
7
  blocks?: import("../../models").CustomItems | undefined;
8
8
  subBlocks?: import("../../models").CustomItems | undefined;
9
9
  headers?: import("../../models").CustomItems | undefined;
10
10
  loadable?: import("../../models").LoadableConfig | undefined;
11
11
  };
12
+ export declare const getBlockId: ({ index, type }: BlockDecorationProps) => string;
@@ -1,6 +1,7 @@
1
1
  import _ from 'lodash';
2
2
  export const formatBlockName = (name) => _.capitalize(name).replace(/(block|-)/g, ' ');
3
- export const addCustomDecorator = (decorator, custom = {}) => {
4
- const decorators = custom.decorators || {};
5
- return Object.assign(Object.assign({}, custom), { decorators: Object.assign(Object.assign({}, decorators), { block: [...(decorators.block || []), decorator] }) });
3
+ export const addCustomDecorator = (decorators, custom = {}) => {
4
+ const customDecorators = custom.decorators || {};
5
+ return Object.assign(Object.assign({}, custom), { decorators: Object.assign(Object.assign({}, customDecorators), { block: [...(customDecorators.block || []), ...decorators] }) });
6
6
  };
7
+ export const getBlockId = ({ index, type }) => `${type}${index === undefined ? '' : `-${index}`}`;
@@ -7,4 +7,4 @@ export interface GridColumnProps extends GridColumnClassParams, Refable<HTMLDivE
7
7
  dataQa?: string;
8
8
  children?: React.ReactNode;
9
9
  }
10
- export declare const Col: React.ForwardRefExoticComponent<Pick<WithChildren<GridColumnProps>, "style" | "children" | "className" | "reset" | "visible" | "sizes" | "offsets" | "orders" | "hidden" | "alignSelf" | "justifyContent" | "dataQa"> & React.RefAttributes<HTMLDivElement>>;
10
+ export declare const Col: React.ForwardRefExoticComponent<Pick<WithChildren<GridColumnProps>, "style" | "children" | "className" | "visible" | "reset" | "sizes" | "offsets" | "orders" | "hidden" | "alignSelf" | "justifyContent" | "dataQa"> & React.RefAttributes<HTMLDivElement>>;
@@ -30,6 +30,7 @@ export interface Childable {
30
30
  children?: SubBlock[];
31
31
  }
32
32
  export interface BlockBaseProps {
33
+ type: BlockType;
33
34
  index?: number;
34
35
  anchor?: AnchorProps;
35
36
  visible?: GridColumnSize;
@@ -244,14 +245,18 @@ export interface IconsBlockProps {
244
245
  src: string;
245
246
  }[];
246
247
  }
247
- export interface ContentLayoutBlockProps {
248
- properties?: {
249
- size?: ContentSize;
250
- background?: BackgroundImageProps;
251
- centered?: boolean;
252
- theme?: ContentTheme;
253
- textWidth?: ContentTextSize;
254
- };
248
+ interface ContentLayoutBlockParams {
249
+ size?: ContentSize;
250
+ background?: BackgroundImageProps;
251
+ centered?: boolean;
252
+ theme?: ContentTheme;
253
+ textWidth?: ContentTextSize;
254
+ }
255
+ export interface ContentLayoutBlockProps extends ContentLayoutBlockParams {
256
+ /**
257
+ * @deprecated Use params on top level instead
258
+ */
259
+ properties?: ContentLayoutBlockParams;
255
260
  textContent: ContentBlockProps;
256
261
  fileContent?: FileLinkProps[];
257
262
  }
@@ -1,5 +1,5 @@
1
1
  import React, { PropsWithChildren } from 'react';
2
- import { Animatable, Block, BlockDecoratorProps, ConstructorItem, ThemedMediaProps, WithChildren } from './';
2
+ import { Animatable, Block, BlockDecorationProps, ConstructorItem, ThemedMediaProps, WithChildren } from './';
3
3
  export interface PageData {
4
4
  content: PageContent;
5
5
  }
@@ -41,7 +41,7 @@ export interface CustomConfig {
41
41
  headers?: CustomItems;
42
42
  loadable?: LoadableConfig;
43
43
  decorators?: {
44
- block?: ((props: BlockDecoratorProps) => React.ReactElement)[];
44
+ block?: ((props: BlockDecorationProps) => React.ReactElement)[];
45
45
  };
46
46
  }
47
47
  export {};
@@ -1,9 +1,4 @@
1
1
  import { PropsWithChildren } from 'react';
2
- export interface BlockDecorationProps extends PropsWithChildren {
3
- id: string | number;
4
- }
5
- export interface BlockDecoratorProps extends PropsWithChildren {
6
- id: string | number;
7
- isHeader?: boolean;
8
- }
9
- export type BlockDecorator = (props: BlockDecoratorProps) => React.ReactElement;
2
+ import { BlockBaseProps } from './constructor-items';
3
+ export type BlockDecorationProps = Pick<BlockBaseProps, 'index' | 'type'> & PropsWithChildren;
4
+ export type BlockDecorator = (props: BlockDecorationProps) => React.ReactElement;
@@ -63,6 +63,7 @@ export interface HeaderData {
63
63
  leftItems: NavigationItemModel[];
64
64
  rightItems?: NavigationItemModel[];
65
65
  iconSize?: number;
66
+ withBorder?: boolean;
66
67
  }
67
68
  export interface FooterColumn {
68
69
  title: string;
@@ -9,6 +9,8 @@ unpredictable css rules order in build */
9
9
  align-items: center;
10
10
  height: var(--header-height);
11
11
  background-color: var(--yc-color-base-background);
12
+ }
13
+ .pc-header_with-border {
12
14
  box-shadow: inset 0 -1px 0 var(--yc-color-line-generic);
13
15
  }
14
16
  .pc-header__wrapper {
@@ -1,4 +1,5 @@
1
- import React, { useCallback, useMemo, useState } from 'react';
1
+ import React, { useCallback, useEffect, useMemo, useState } from 'react';
2
+ import _ from 'lodash';
2
3
  import Control from '../../../components/Control/Control';
3
4
  import OutsideClick from '../../../components/OutsideClick/OutsideClick';
4
5
  import { Col, Grid, Row } from '../../../grid';
@@ -27,9 +28,10 @@ const iconSizeKey = 'iconSize';
27
28
  const isButtonItem = (item) => item.type === NavigationItemType.Button;
28
29
  const isDropdownItem = (item) => item.type === NavigationItemType.Dropdown;
29
30
  export const Header = ({ data, logo }) => {
30
- const { leftItems, rightItems, iconSize = 20 } = data;
31
+ const { leftItems, rightItems, iconSize = 20, withBorder = false } = data;
31
32
  const [isSidebarOpened, setIsSidebarOpened] = useState(false);
32
- const [activeItemId, setactiveItemId] = useState(undefined);
33
+ const [activeItemId, setActiveItemId] = useState(undefined);
34
+ const [showBorder, setShowBorder] = useState(withBorder);
33
35
  const getNavigationItemWithIconSize = useCallback((item) => {
34
36
  const newItem = Object.assign({}, item);
35
37
  if ('items' in newItem && isDropdownItem(newItem)) {
@@ -43,7 +45,7 @@ export const Header = ({ data, logo }) => {
43
45
  const leftItemsWithIconSize = useMemo(() => leftItems.map(getNavigationItemWithIconSize), [getNavigationItemWithIconSize, leftItems]);
44
46
  const rightItemsWithIconSize = useMemo(() => rightItems === null || rightItems === void 0 ? void 0 : rightItems.map(getNavigationItemWithIconSize), [getNavigationItemWithIconSize, rightItems]);
45
47
  const onActiveItemChange = useCallback((id) => {
46
- setactiveItemId(id);
48
+ setActiveItemId(id);
47
49
  }, []);
48
50
  const hidePopup = useCallback(() => {
49
51
  onActiveItemChange();
@@ -54,7 +56,16 @@ export const Header = ({ data, logo }) => {
54
56
  const hideSidebar = useCallback(() => {
55
57
  setIsSidebarOpened(false);
56
58
  }, []);
57
- return (React.createElement(Grid, { className: b() },
59
+ useEffect(() => {
60
+ const showBorderOnScroll = () => {
61
+ if (!showBorder) {
62
+ setShowBorder(window.scrollY > 0);
63
+ }
64
+ };
65
+ window.addEventListener('scroll', _.debounce(showBorderOnScroll, 20), { passive: true });
66
+ return () => window.removeEventListener('scroll', _.debounce(showBorderOnScroll, 20));
67
+ });
68
+ return (React.createElement(Grid, { className: b({ 'with-border': showBorder }) },
58
69
  React.createElement(Row, null,
59
70
  React.createElement(Col, null,
60
71
  React.createElement("header", { className: b('wrapper') },
@@ -14,6 +14,7 @@ export declare const LogoProps: {
14
14
  } | {
15
15
  type: string;
16
16
  pattern: string;
17
+ optionName: string;
17
18
  })[];
18
19
  };
19
20
  text: {