@gravity-ui/page-constructor 3.0.0-alpha.5 → 4.0.0-beta.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 (217) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +1 -1
  3. package/build/cjs/blocks/CardLayout/CardLayout.js +1 -1
  4. package/build/cjs/blocks/CardLayout/schema.d.ts +2 -2
  5. package/build/cjs/blocks/CardLayout/schema.js +1 -1
  6. package/build/cjs/blocks/FilterBlock/FilterBlock.js +9 -13
  7. package/build/cjs/blocks/Header/schema.d.ts +9 -0
  8. package/build/cjs/blocks/HeaderSlider/schema.d.ts +3 -0
  9. package/build/cjs/blocks/Media/schema.d.ts +6 -0
  10. package/build/cjs/blocks/PromoFeaturesBlock/schema.d.ts +3 -0
  11. package/build/cjs/blocks/Tabs/schema.d.ts +3 -0
  12. package/build/cjs/components/BackgroundImage/BackgroundImage.js +2 -2
  13. package/build/cjs/components/BlockBase/BlockBase.d.ts +3 -2
  14. package/build/cjs/components/BlockBase/BlockBase.js +4 -2
  15. package/build/cjs/components/FullscreenImage/{FullScreenImage.css → FullscreenImage.css} +13 -13
  16. package/build/cjs/components/FullscreenImage/FullscreenImage.d.ts +3 -3
  17. package/build/cjs/components/FullscreenImage/FullscreenImage.js +7 -7
  18. package/build/cjs/components/FullscreenImage/i18n/index.js +1 -1
  19. package/build/cjs/components/FullscreenMedia/FullscreenMedia.d.ts +9 -0
  20. package/build/cjs/components/FullscreenMedia/{FullScreenMedia.js → FullscreenMedia.js} +5 -5
  21. package/build/cjs/components/Image/Image.d.ts +1 -0
  22. package/build/cjs/components/Image/Image.js +2 -2
  23. package/build/cjs/components/Media/FullscreenVideo/FullscreenVideo.d.ts +4 -0
  24. package/build/cjs/components/Media/FullscreenVideo/FullscreenVideo.js +10 -0
  25. package/build/cjs/components/Media/Image/Image.d.ts +1 -0
  26. package/build/cjs/components/Media/Image/Image.js +10 -3
  27. package/build/cjs/components/Media/Media.js +25 -5
  28. package/build/cjs/components/Media/Video/Video.d.ts +1 -1
  29. package/build/cjs/components/VideoBlock/VideoBlock.d.ts +1 -1
  30. package/build/cjs/components/VideoBlock/VideoBlock.js +3 -3
  31. package/build/cjs/components/index.d.ts +1 -1
  32. package/build/cjs/components/index.js +3 -3
  33. package/build/cjs/constructor-items.d.ts +1 -1
  34. package/build/cjs/containers/Loadable/Loadable.d.ts +2 -2
  35. package/build/cjs/containers/PageConstructor/PageConstructor.js +5 -3
  36. package/build/cjs/containers/PageConstructor/components/ConstructorBlocks/ConstructorBlocks.js +3 -2
  37. package/build/cjs/containers/PageConstructor/components/ConstructorItem/ConstructorItem.d.ts +1 -1
  38. package/build/cjs/containers/PageConstructor/components/ConstructorItem/ConstructorItem.js +5 -5
  39. package/build/cjs/context/innerContext/InnerContext.d.ts +2 -1
  40. package/build/cjs/customization/BlockDecoration.d.ts +3 -0
  41. package/build/cjs/customization/BlockDecoration.js +22 -0
  42. package/build/cjs/editor/Components/AddBlock/AddBlock.css +82 -0
  43. package/build/cjs/editor/Components/AddBlock/AddBlock.d.ts +7 -0
  44. package/build/cjs/editor/Components/AddBlock/AddBlock.js +43 -0
  45. package/build/cjs/editor/Components/EditBlock/EditBlock.css +47 -0
  46. package/build/cjs/editor/Components/EditBlock/EditBlock.d.ts +4 -0
  47. package/build/cjs/editor/Components/EditBlock/EditBlock.js +32 -0
  48. package/build/cjs/editor/Containers/Editor.d.ts +2 -0
  49. package/build/cjs/editor/Containers/Editor.js +24 -0
  50. package/build/cjs/editor/data/index.d.ts +13 -0
  51. package/build/cjs/editor/data/index.js +27 -0
  52. package/build/cjs/editor/data/previews/default-preview.d.ts +3 -0
  53. package/build/cjs/editor/data/previews/default-preview.js +18 -0
  54. package/build/cjs/editor/data/previews/header-block.d.ts +3 -0
  55. package/build/cjs/editor/data/previews/header-block.js +19 -0
  56. package/build/cjs/editor/index.d.ts +2 -0
  57. package/build/cjs/editor/index.js +7 -0
  58. package/build/cjs/editor/store/index.d.ts +15 -0
  59. package/build/cjs/editor/store/index.js +32 -0
  60. package/build/cjs/editor/store/reducer.d.ts +41 -0
  61. package/build/cjs/editor/store/reducer.js +59 -0
  62. package/build/cjs/editor/store/utils.d.ts +12 -0
  63. package/build/cjs/editor/store/utils.js +34 -0
  64. package/build/cjs/editor/styles/mixins.css +0 -0
  65. package/build/cjs/editor/styles/variables.css +0 -0
  66. package/build/cjs/editor/types/index.d.ts +17 -0
  67. package/build/cjs/editor/types/index.js +2 -0
  68. package/build/cjs/editor/utils/index.d.ts +11 -0
  69. package/build/cjs/editor/utils/index.js +12 -0
  70. package/build/cjs/grid/Col/Col.d.ts +1 -1
  71. package/build/cjs/hooks/useMetrika.js +0 -7
  72. package/build/cjs/icons/Fullscreen.d.ts +2 -0
  73. package/build/cjs/icons/{FullScreen.js → Fullscreen.js} +3 -3
  74. package/build/cjs/icons/index.d.ts +1 -1
  75. package/build/cjs/icons/index.js +1 -1
  76. package/build/cjs/models/constructor-items/blocks.d.ts +2 -12
  77. package/build/cjs/models/constructor-items/blocks.js +0 -2
  78. package/build/cjs/models/constructor-items/common.d.ts +2 -1
  79. package/build/cjs/models/constructor-items/sub-blocks.d.ts +1 -1
  80. package/build/cjs/models/constructor.d.ts +4 -1
  81. package/build/cjs/models/customization.d.ts +9 -0
  82. package/build/cjs/models/customization.js +2 -0
  83. package/build/cjs/models/index.d.ts +1 -0
  84. package/build/cjs/models/index.js +1 -0
  85. package/build/cjs/schema/index.js +0 -1
  86. package/build/cjs/schema/validators/common.d.ts +3 -0
  87. package/build/cjs/schema/validators/common.js +3 -0
  88. package/build/cjs/sub-blocks/Content/Content.js +2 -2
  89. package/build/cjs/sub-blocks/LayoutItem/LayoutItem.d.ts +1 -1
  90. package/build/cjs/sub-blocks/LayoutItem/LayoutItem.js +4 -4
  91. package/build/cjs/sub-blocks/LayoutItem/schema.d.ts +4 -1
  92. package/build/cjs/sub-blocks/LayoutItem/schema.js +1 -1
  93. package/build/cjs/sub-blocks/LayoutItem/utils.d.ts +2 -2
  94. package/build/cjs/sub-blocks/LayoutItem/utils.js +6 -6
  95. package/build/cjs/sub-blocks/MediaCard/schema.d.ts +3 -0
  96. package/build/cjs/text-transform/transformers.js +2 -4
  97. package/build/cjs/utils/blocks.d.ts +4 -1
  98. package/build/cjs/utils/blocks.js +11 -1
  99. package/build/esm/blocks/CardLayout/CardLayout.js +1 -1
  100. package/build/esm/blocks/CardLayout/schema.d.ts +2 -2
  101. package/build/esm/blocks/CardLayout/schema.js +1 -1
  102. package/build/esm/blocks/FilterBlock/FilterBlock.js +10 -14
  103. package/build/esm/blocks/Header/schema.d.ts +9 -0
  104. package/build/esm/blocks/HeaderSlider/schema.d.ts +3 -0
  105. package/build/esm/blocks/Media/schema.d.ts +6 -0
  106. package/build/esm/blocks/PromoFeaturesBlock/schema.d.ts +3 -0
  107. package/build/esm/blocks/Tabs/Tabs.js +2 -2
  108. package/build/esm/blocks/Tabs/schema.d.ts +3 -0
  109. package/build/esm/components/BackgroundImage/BackgroundImage.js +2 -2
  110. package/build/esm/components/BlockBase/BlockBase.d.ts +3 -2
  111. package/build/esm/components/BlockBase/BlockBase.js +4 -2
  112. package/build/esm/components/FullscreenImage/{FullScreenImage.css → FullscreenImage.css} +13 -13
  113. package/build/esm/components/FullscreenImage/FullscreenImage.d.ts +4 -4
  114. package/build/esm/components/FullscreenImage/FullscreenImage.js +9 -9
  115. package/build/esm/components/FullscreenImage/i18n/index.js +1 -1
  116. package/build/esm/components/FullscreenMedia/FullscreenMedia.d.ts +10 -0
  117. package/build/esm/components/FullscreenMedia/{FullScreenMedia.js → FullscreenMedia.js} +7 -7
  118. package/build/esm/components/Image/Image.d.ts +1 -0
  119. package/build/esm/components/Image/Image.js +2 -2
  120. package/build/esm/components/Media/FullscreenVideo/FullscreenVideo.d.ts +4 -0
  121. package/build/esm/components/Media/FullscreenVideo/FullscreenVideo.js +7 -0
  122. package/build/esm/components/Media/Image/Image.d.ts +1 -0
  123. package/build/esm/components/Media/Image/Image.js +12 -5
  124. package/build/esm/components/Media/Media.js +25 -5
  125. package/build/esm/components/Media/Video/Video.d.ts +1 -1
  126. package/build/esm/components/VideoBlock/VideoBlock.d.ts +1 -1
  127. package/build/esm/components/VideoBlock/VideoBlock.js +3 -3
  128. package/build/esm/components/index.d.ts +1 -1
  129. package/build/esm/components/index.js +1 -1
  130. package/build/esm/constructor-items.d.ts +1 -1
  131. package/build/esm/containers/Loadable/Loadable.d.ts +2 -2
  132. package/build/esm/containers/PageConstructor/PageConstructor.js +6 -4
  133. package/build/esm/containers/PageConstructor/components/ConstructorBlocks/ConstructorBlocks.js +3 -2
  134. package/build/esm/containers/PageConstructor/components/ConstructorItem/ConstructorItem.d.ts +1 -1
  135. package/build/esm/containers/PageConstructor/components/ConstructorItem/ConstructorItem.js +5 -5
  136. package/build/esm/context/innerContext/InnerContext.d.ts +2 -1
  137. package/build/esm/customization/BlockDecoration.d.ts +3 -0
  138. package/build/esm/customization/BlockDecoration.js +17 -0
  139. package/build/esm/editor/Components/AddBlock/AddBlock.css +82 -0
  140. package/build/esm/editor/Components/AddBlock/AddBlock.d.ts +8 -0
  141. package/build/esm/editor/Components/AddBlock/AddBlock.js +41 -0
  142. package/build/esm/editor/Components/EditBlock/EditBlock.css +47 -0
  143. package/build/esm/editor/Components/EditBlock/EditBlock.d.ts +5 -0
  144. package/build/esm/editor/Components/EditBlock/EditBlock.js +30 -0
  145. package/build/esm/editor/Containers/Editor.d.ts +2 -0
  146. package/build/esm/editor/Containers/Editor.js +20 -0
  147. package/build/esm/editor/data/index.d.ts +13 -0
  148. package/build/esm/editor/data/index.js +24 -0
  149. package/build/esm/editor/data/previews/default-preview.d.ts +3 -0
  150. package/build/esm/editor/data/previews/default-preview.js +15 -0
  151. package/build/esm/editor/data/previews/header-block.d.ts +3 -0
  152. package/build/esm/editor/data/previews/header-block.js +16 -0
  153. package/build/esm/editor/index.d.ts +2 -0
  154. package/build/esm/editor/index.js +2 -0
  155. package/build/esm/editor/store/index.d.ts +15 -0
  156. package/build/esm/editor/store/index.js +28 -0
  157. package/build/esm/editor/store/reducer.d.ts +41 -0
  158. package/build/esm/editor/store/reducer.js +55 -0
  159. package/build/esm/editor/store/utils.d.ts +12 -0
  160. package/build/esm/editor/store/utils.js +26 -0
  161. package/build/esm/editor/styles/mixins.css +0 -0
  162. package/build/esm/editor/styles/variables.css +0 -0
  163. package/build/esm/editor/types/index.d.ts +17 -0
  164. package/build/esm/editor/types/index.js +1 -0
  165. package/build/esm/editor/utils/index.d.ts +11 -0
  166. package/build/esm/editor/utils/index.js +6 -0
  167. package/build/esm/grid/Col/Col.d.ts +1 -1
  168. package/build/esm/hooks/useMetrika.js +0 -7
  169. package/build/esm/icons/Fullscreen.d.ts +2 -0
  170. package/build/esm/icons/{FullScreen.js → Fullscreen.js} +1 -1
  171. package/build/esm/icons/index.d.ts +1 -1
  172. package/build/esm/icons/index.js +1 -1
  173. package/build/esm/models/constructor-items/blocks.d.ts +2 -12
  174. package/build/esm/models/constructor-items/blocks.js +0 -2
  175. package/build/esm/models/constructor-items/common.d.ts +2 -1
  176. package/build/esm/models/constructor-items/sub-blocks.d.ts +1 -1
  177. package/build/esm/models/constructor.d.ts +4 -1
  178. package/build/esm/models/customization.d.ts +9 -0
  179. package/build/esm/models/customization.js +1 -0
  180. package/build/esm/models/index.d.ts +1 -0
  181. package/build/esm/models/index.js +1 -0
  182. package/build/esm/schema/index.js +0 -1
  183. package/build/esm/schema/validators/common.d.ts +3 -0
  184. package/build/esm/schema/validators/common.js +3 -0
  185. package/build/esm/sub-blocks/Content/Content.js +2 -3
  186. package/build/esm/sub-blocks/LayoutItem/LayoutItem.d.ts +1 -1
  187. package/build/esm/sub-blocks/LayoutItem/LayoutItem.js +6 -6
  188. package/build/esm/sub-blocks/LayoutItem/schema.d.ts +4 -1
  189. package/build/esm/sub-blocks/LayoutItem/schema.js +1 -1
  190. package/build/esm/sub-blocks/LayoutItem/utils.d.ts +2 -2
  191. package/build/esm/sub-blocks/LayoutItem/utils.js +3 -3
  192. package/build/esm/sub-blocks/MediaCard/schema.d.ts +3 -0
  193. package/build/esm/text-transform/transformers.js +2 -4
  194. package/build/esm/utils/blocks.d.ts +4 -1
  195. package/build/esm/utils/blocks.js +7 -0
  196. package/package.json +4 -6
  197. package/server/models/constructor-items/blocks.d.ts +2 -12
  198. package/server/models/constructor-items/blocks.js +0 -2
  199. package/server/models/constructor-items/common.d.ts +2 -1
  200. package/server/models/constructor-items/sub-blocks.d.ts +1 -1
  201. package/server/models/constructor.d.ts +4 -1
  202. package/server/models/customization.d.ts +9 -0
  203. package/server/models/customization.js +2 -0
  204. package/server/models/index.d.ts +1 -0
  205. package/server/models/index.js +1 -0
  206. package/server/text-transform/transformers.js +2 -4
  207. package/server/utils/blocks.d.ts +4 -1
  208. package/server/utils/blocks.js +11 -1
  209. package/styles/styles.css +0 -196
  210. package/styles/styles.scss +0 -1
  211. package/build/cjs/components/FullscreenMedia/FullScreenMedia.d.ts +0 -9
  212. package/build/cjs/icons/FullScreen.d.ts +0 -2
  213. package/build/esm/components/FullscreenMedia/FullScreenMedia.d.ts +0 -10
  214. package/build/esm/icons/FullScreen.d.ts +0 -2
  215. package/styles/fonts.scss +0 -223
  216. /package/build/cjs/components/FullscreenMedia/{FullScreenMedia.css → FullscreenMedia.css} +0 -0
  217. /package/build/esm/components/FullscreenMedia/{FullScreenMedia.css → FullscreenMedia.css} +0 -0
@@ -39,7 +39,7 @@ function getHeight(width) {
39
39
  }
40
40
  exports.getHeight = getHeight;
41
41
  const VideoBlock = (props) => {
42
- const { stream, record, attributes, className, id, previewImg, playButton, height, fullScreen } = props;
42
+ const { stream, record, attributes, className, id, previewImg, playButton, height, fullscreen } = props;
43
43
  const src = getVideoSrc(stream, record);
44
44
  const ref = (0, react_1.useRef)(null);
45
45
  const iframeRef = (0, react_1.useRef)();
@@ -82,14 +82,14 @@ const VideoBlock = (props) => {
82
82
  ref.current.appendChild(iframe);
83
83
  iframeRef.current = iframe;
84
84
  }
85
- }, [stream, record, norender, src, fullId, attributes, iframeRef, fullScreen]);
85
+ }, [stream, record, norender, src, fullId, attributes, iframeRef, fullscreen]);
86
86
  (0, react_1.useEffect)(() => {
87
87
  setHidePreview(false);
88
88
  }, [src, setHidePreview]);
89
89
  if (norender) {
90
90
  return null;
91
91
  }
92
- 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 },
92
+ 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 },
93
93
  react_1.default.createElement(Image_1.default, { src: previewImg, className: b('image'), containerClassName: b('image-wrapper') }),
94
94
  playButton || (react_1.default.createElement("button", { className: b('button') },
95
95
  react_1.default.createElement(uikit_1.Icon, { className: b('icon'), data: icons_1.PlayVideo, size: 24 })))))));
@@ -33,6 +33,6 @@ export { default as Author } from './Author/Author';
33
33
  export { default as RouterLink } from './RouterLink/RouterLink';
34
34
  export { default as HTML } from './HTML/HTML';
35
35
  export { default as MetaInfo } from './MetaInfo/MetaInfo';
36
- export { default as FullScreenMedia } from './FullscreenMedia/FullScreenMedia';
36
+ export { default as FullscreenMedia } from './FullscreenMedia/FullscreenMedia';
37
37
  export type { RouterLinkProps } from './RouterLink/RouterLink';
38
38
  export type { ImageBaseProps } from './ImageBase/ImageBase';
@@ -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.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.ImageBase = exports.Image = exports.HeaderBreadcrumbs = exports.FullWidthBackground = exports.FullscreenImage = exports.Foldable = exports.FileLink = exports.ErrorWrapper = exports.CardBase = exports.Button = 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.ImageBase = exports.Image = exports.HeaderBreadcrumbs = exports.FullWidthBackground = exports.FullscreenImage = exports.Foldable = exports.FileLink = exports.ErrorWrapper = exports.CardBase = exports.Button = 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,5 +74,5 @@ var HTML_1 = require("./HTML/HTML");
74
74
  Object.defineProperty(exports, "HTML", { enumerable: true, get: function () { return __importDefault(HTML_1).default; } });
75
75
  var MetaInfo_1 = require("./MetaInfo/MetaInfo");
76
76
  Object.defineProperty(exports, "MetaInfo", { enumerable: true, get: function () { return __importDefault(MetaInfo_1).default; } });
77
- var FullScreenMedia_1 = require("./FullscreenMedia/FullScreenMedia");
78
- Object.defineProperty(exports, "FullScreenMedia", { enumerable: true, get: function () { return __importDefault(FullScreenMedia_1).default; } });
77
+ var FullscreenMedia_1 = require("./FullscreenMedia/FullscreenMedia");
78
+ Object.defineProperty(exports, "FullscreenMedia", { enumerable: true, get: function () { return __importDefault(FullscreenMedia_1).default; } });
@@ -23,7 +23,7 @@ export declare const subBlockMap: {
23
23
  "price-detailed": (props: import("./models").PriceDetailedProps) => JSX.Element;
24
24
  "media-card": ({ border, ...mediaProps }: import("./models").MediaCardProps) => JSX.Element;
25
25
  "banner-card": (props: import("./models").BannerCardProps) => JSX.Element;
26
- "layout-item": ({ content: { links, ...content }, metaInfo, media, border, fullScreen, className, }: import("./models").LayoutItemProps) => JSX.Element;
26
+ "layout-item": ({ content: { links, ...content }, metaInfo, media, border, fullscreen, className, }: import("./models").LayoutItemProps) => JSX.Element;
27
27
  "background-card": (props: import("./models").BackgroundCardProps) => JSX.Element;
28
28
  "basic-card": (props: import("./models").BasicCardProps) => JSX.Element;
29
29
  content: (props: import("./models").ContentBlockProps & import("./models").ClassNameProps) => JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import { PropsWithChildren } from 'react';
2
- import { Block, CustomItem, FetchLoadableData, LoadableData, LoadableProps } from '../../models';
2
+ import { ConstructorItem, CustomItem, FetchLoadableData, LoadableData, LoadableProps } from '../../models';
3
3
  export interface LoadableState {
4
4
  loading: boolean;
5
5
  error: boolean;
@@ -8,7 +8,7 @@ export interface LoadableState {
8
8
  export interface LoadableComponentsProps extends Omit<PropsWithChildren<LoadableProps>, 'source'> {
9
9
  Component: CustomItem;
10
10
  ChildComponent: CustomItem;
11
- block: Block;
11
+ block: ConstructorItem;
12
12
  blockKey: string;
13
13
  fetch: FetchLoadableData;
14
14
  }
@@ -27,12 +27,14 @@ const Constructor = (props) => {
27
27
  itemMap: Object.assign(Object.assign(Object.assign({}, constructor_items_1.blockMap), constructor_items_1.subBlockMap), (0, utils_1.getCustomItems)(custom)),
28
28
  loadables: custom === null || custom === void 0 ? void 0 : custom.loadable,
29
29
  shouldRenderBlock,
30
+ customization: {
31
+ decorators: custom === null || custom === void 0 ? void 0 : custom.decorators,
32
+ },
30
33
  },
31
34
  }), [custom, shouldRenderBlock]);
32
35
  const { themeValue: theme } = (0, react_1.useContext)(ThemeValueContext_1.ThemeValueContext);
33
- const isHeaderBlock = (block) => context.headerBlockTypes.includes(block.type);
34
- const header = blocks === null || blocks === void 0 ? void 0 : blocks.find(isHeaderBlock);
35
- const restBlocks = blocks === null || blocks === void 0 ? void 0 : blocks.filter((block) => !isHeaderBlock(block));
36
+ const header = (0, utils_1.getHeaderBlock)(blocks, context.headerBlockTypes);
37
+ const restBlocks = (0, utils_1.getOrderedBlocks)(blocks, context.headerBlockTypes);
36
38
  const themedBackground = (0, utils_1.getThemedValue)(background, theme);
37
39
  return (react_1.default.createElement(innerContext_1.InnerContext.Provider, { value: context },
38
40
  react_1.default.createElement("div", { className: b() },
@@ -4,6 +4,7 @@ exports.ConstructorBlocks = 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 blockIdContext_1 = require("../../../../context/blockIdContext");
7
8
  const innerContext_1 = require("../../../../context/innerContext");
8
9
  const utils_1 = require("../../../../utils");
9
10
  const ConstructorBlock_1 = require("../ConstructorBlock/ConstructorBlock");
@@ -34,9 +35,9 @@ const ConstructorBlocks = ({ items }) => {
34
35
  if ('children' in item && item.children) {
35
36
  children = item.children.map(renderer.bind(null, blockId));
36
37
  }
37
- itemElement = (react_1.default.createElement(ConstructorItem_1.ConstructorItem, { data: item, key: blockId, blockKey: blockId }, children));
38
+ itemElement = (react_1.default.createElement(ConstructorItem_1.ConstructorItem, { data: item, blockKey: blockId }, children));
38
39
  }
39
- return blockTypes.includes(item.type) ? (react_1.default.createElement(ConstructorBlock_1.ConstructorBlock, { data: item, key: blockId }, itemElement)) : (itemElement);
40
+ return (react_1.default.createElement(blockIdContext_1.BlockIdContext.Provider, { value: blockId, key: blockId }, blockTypes.includes(item.type) ? (react_1.default.createElement(ConstructorBlock_1.ConstructorBlock, { data: item }, itemElement)) : (itemElement)));
40
41
  };
41
42
  return react_1.default.createElement(react_1.Fragment, null, items.map(renderer.bind(null, '')));
42
43
  };
@@ -3,5 +3,5 @@ export interface ConstructorItemProps {
3
3
  data: ConstructorItemType;
4
4
  blockKey: string;
5
5
  }
6
- export declare const ConstructorItem: ({ data, blockKey, children }: WithChildren<ConstructorItemProps>) => JSX.Element;
6
+ export declare const ConstructorItem: ({ data, children }: WithChildren<ConstructorItemProps>) => JSX.Element;
7
7
  export declare const ConstructorHeader: ({ data, blockKey, }: Pick<ConstructorItemProps, 'data' | 'blockKey'>) => JSX.Element;
@@ -3,15 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConstructorHeader = exports.ConstructorItem = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importStar(require("react"));
6
- const blockIdContext_1 = require("../../../../context/blockIdContext");
7
6
  const innerContext_1 = require("../../../../context/innerContext");
8
- const ConstructorItem = ({ data, blockKey, children }) => {
7
+ const BlockDecoration_1 = require("../../../../customization/BlockDecoration");
8
+ const ConstructorItem = ({ data, children }) => {
9
9
  const { itemMap } = (0, react_1.useContext)(innerContext_1.InnerContext);
10
10
  const { type } = data, rest = tslib_1.__rest(data, ["type"]);
11
11
  const Component = itemMap[type];
12
- return (react_1.default.createElement(blockIdContext_1.BlockIdContext.Provider, { value: blockKey },
13
- react_1.default.createElement(Component, Object.assign({}, rest), children)));
12
+ return react_1.default.createElement(Component, Object.assign({}, rest), children);
14
13
  };
15
14
  exports.ConstructorItem = ConstructorItem;
16
- const ConstructorHeader = ({ data, blockKey, }) => (react_1.default.createElement(exports.ConstructorItem, { data: data, key: data.type, blockKey: blockKey }));
15
+ const ConstructorHeader = ({ data, blockKey, }) => (react_1.default.createElement(BlockDecoration_1.BlockDecoration, { id: data.type },
16
+ react_1.default.createElement(exports.ConstructorItem, { data: data, key: data.type, blockKey: blockKey })));
17
17
  exports.ConstructorHeader = ConstructorHeader;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { ItemMap } from '../../containers/PageConstructor/PageConstructor';
3
- import { LoadableConfig, ShouldRenderBlock } from '../../models';
3
+ import { CustomConfig, LoadableConfig, ShouldRenderBlock } from '../../models';
4
4
  export interface InnerContextType {
5
5
  blockTypes: string[];
6
6
  subBlockTypes: string[];
@@ -8,5 +8,6 @@ export interface InnerContextType {
8
8
  itemMap: ItemMap;
9
9
  loadables?: LoadableConfig;
10
10
  shouldRenderBlock?: ShouldRenderBlock;
11
+ customization?: Pick<CustomConfig, 'decorators'>;
11
12
  }
12
13
  export declare const InnerContext: React.Context<InnerContextType>;
@@ -0,0 +1,3 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { BlockDecorationProps } from '../models';
3
+ export declare const BlockDecoration: (props: PropsWithChildren<BlockDecorationProps>) => JSX.Element;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BlockDecoration = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importStar(require("react"));
6
+ const blockIdContext_1 = require("../context/blockIdContext");
7
+ const innerContext_1 = require("../context/innerContext");
8
+ const utils_1 = require("../utils");
9
+ const BlockDecoration = (props) => {
10
+ var _a, _b;
11
+ const blockContenxtId = (0, utils_1.getBlockIndexFromId)((0, react_1.useContext)(blockIdContext_1.BlockIdContext));
12
+ const { headerBlockTypes } = (0, react_1.useContext)(innerContext_1.InnerContext);
13
+ const blockId = props.id || blockContenxtId;
14
+ const isHeader = Boolean(props.id && headerBlockTypes.includes(props.id));
15
+ const block = react_1.default.createElement(react_1.Fragment, null, props.children);
16
+ const blockDecorators = (_b = (_a = (0, react_1.useContext)(innerContext_1.InnerContext).customization) === null || _a === void 0 ? void 0 : _a.decorators) === null || _b === void 0 ? void 0 : _b.block;
17
+ if (!blockDecorators) {
18
+ return block;
19
+ }
20
+ return blockDecorators.reduce((children, decorator) => (react_1.default.createElement(react_1.Fragment, null, decorator({ children, id: blockId, isHeader }))), block);
21
+ };
22
+ exports.BlockDecoration = BlockDecoration;
@@ -0,0 +1,82 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .pc-add-block {
4
+ position: fixed;
5
+ bottom: 32px;
6
+ left: 50%;
7
+ transform: translateX(-50%);
8
+ z-index: 110;
9
+ }
10
+ .pc-add-block__button {
11
+ display: inline-block;
12
+ margin: 0;
13
+ padding: 0;
14
+ font: inherit;
15
+ border: none;
16
+ outline: none;
17
+ color: inherit;
18
+ background: none;
19
+ cursor: pointer;
20
+ display: flex;
21
+ justify-content: center;
22
+ align-items: center;
23
+ transition: transform 0.2s;
24
+ width: 76px;
25
+ height: 40px;
26
+ color: var(--yc-color-text-inverted-primary);
27
+ background-color: var(--yc-color-promo-base-neon);
28
+ border-radius: 8px;
29
+ }
30
+ .pc-add-block__button:hover {
31
+ transform: scale(1.05);
32
+ }
33
+ .pc-add-block__icon {
34
+ width: 16px;
35
+ height: 16px;
36
+ }
37
+
38
+ .pc-add-block__popup {
39
+ min-width: 420px;
40
+ border-radius: var(--pc-border-radius);
41
+ box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.06), 0px 4px 24px rgba(0, 0, 0, 0.06);
42
+ }
43
+ .pc-add-block__popup .pc-add-block__search {
44
+ padding: 20px 20px 0;
45
+ }
46
+ .pc-add-block__popup .pc-add-block__blocks {
47
+ display: flex;
48
+ flex-direction: column;
49
+ padding: 20px;
50
+ height: 296px;
51
+ max-height: 296px;
52
+ overflow-y: auto;
53
+ }
54
+ .pc-add-block__popup .pc-add-block__block {
55
+ display: flex;
56
+ justify-content: center;
57
+ align-items: center;
58
+ transition: transform 0.2s;
59
+ margin-top: 20px;
60
+ justify-content: flex-start;
61
+ cursor: pointer;
62
+ }
63
+ .pc-add-block__popup .pc-add-block__block:hover {
64
+ transform: scale(1.05);
65
+ }
66
+ .pc-add-block__popup .pc-add-block__block:first-child {
67
+ margin-top: 0;
68
+ }
69
+ .pc-add-block__popup .pc-add-block__preview {
70
+ width: 148px;
71
+ height: 74px;
72
+ border-radius: var(--pc-border-radius);
73
+ margin-right: 16px;
74
+ }
75
+ .pc-add-block__popup .pc-add-block__title {
76
+ font-size: var(--yc-text-body-2-font-size);
77
+ line-height: var(--yc-text-body-2-line-height);
78
+ }
79
+ .pc-add-block__popup .pc-add-block__title,
80
+ .pc-add-block__popup .pc-add-block__description {
81
+ margin: 0;
82
+ }
@@ -0,0 +1,7 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { Block } from '../../../models';
3
+ export interface AddBlockProps {
4
+ onAdd: (data: Block) => void;
5
+ }
6
+ declare const AddBlock: ({ onAdd }: PropsWithChildren<AddBlockProps>) => JSX.Element;
7
+ export default AddBlock;
@@ -0,0 +1,43 @@
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 icons_1 = require("@gravity-ui/icons");
6
+ const uikit_1 = require("@gravity-ui/uikit");
7
+ const constructor_items_1 = require("../../../constructor-items");
8
+ const utils_1 = require("../../../utils");
9
+ const data_1 = tslib_1.__importDefault(require("../../data"));
10
+ const b = (0, utils_1.block)('add-block');
11
+ const sortedBlockNames = Object.keys(constructor_items_1.blockMap).sort();
12
+ const AddBlock = ({ onAdd }) => {
13
+ const [isOpened, setIsOpened] = (0, react_1.useState)(false);
14
+ const [search, setSearch] = (0, react_1.useState)('');
15
+ const ref = (0, react_1.useRef)(null);
16
+ const blocks = (0, react_1.useMemo)(() => sortedBlockNames.filter((blockName) => data_1.default[blockName].meta.title
17
+ .toLocaleLowerCase()
18
+ .startsWith(search.toLocaleLowerCase())), [search]);
19
+ return (react_1.default.createElement("div", { className: b(), ref: ref },
20
+ react_1.default.createElement("button", { className: b('button'), onClick: () => {
21
+ setIsOpened(!isOpened);
22
+ setSearch('');
23
+ } },
24
+ react_1.default.createElement(icons_1.Plus, { className: b('icon') })),
25
+ isOpened && (react_1.default.createElement(uikit_1.Popup, { anchorRef: ref, open: isOpened, className: b('popup'), placement: "top", offset: [0, 24], onOutsideClick: () => setIsOpened(false) },
26
+ react_1.default.createElement("div", { className: b('search') },
27
+ react_1.default.createElement(uikit_1.TextInput, { placeholder: "search", type: "text", value: search, size: "l", onUpdate: (value) => setSearch(value) })),
28
+ react_1.default.createElement("div", { className: b('blocks') }, blocks.map((blockName) => {
29
+ var _a;
30
+ const blockData = data_1.default[blockName];
31
+ const Preview = blockData === null || blockData === void 0 ? void 0 : blockData.preview;
32
+ return (react_1.default.createElement("div", { key: blockName, className: b('block'), onClick: () => {
33
+ onAdd(blockData === null || blockData === void 0 ? void 0 : blockData.template);
34
+ setIsOpened(false);
35
+ } },
36
+ react_1.default.createElement("div", { className: b('preview') },
37
+ react_1.default.createElement(Preview, null)),
38
+ react_1.default.createElement("div", { className: b('info') },
39
+ react_1.default.createElement("h4", { className: b('title') }, blockData.meta.title),
40
+ ((_a = blockData === null || blockData === void 0 ? void 0 : blockData.meta) === null || _a === void 0 ? void 0 : _a.description) && (react_1.default.createElement("p", { className: b('description') }, blockData.meta.description)))));
41
+ }))))));
42
+ };
43
+ exports.default = AddBlock;
@@ -0,0 +1,47 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .pc-edit-block {
4
+ cursor: pointer;
5
+ position: relative;
6
+ }
7
+ .pc-edit-block__controls {
8
+ position: absolute;
9
+ width: calc(100% + 40px);
10
+ height: calc(100% + 40px);
11
+ top: -20px;
12
+ left: -20px;
13
+ border-radius: 8px;
14
+ z-index: 100;
15
+ }
16
+ .pc-edit-block__controls_isHeader {
17
+ width: 100%;
18
+ height: 100%;
19
+ top: 0;
20
+ left: 0;
21
+ }
22
+ .pc-edit-block__controls_active {
23
+ border: 4px solid var(--yc-color-promo-base-neon);
24
+ }
25
+ .pc-edit-block__controls-content {
26
+ display: flex;
27
+ position: absolute;
28
+ bottom: -44px;
29
+ left: 50%;
30
+ transform: translateX(-50%);
31
+ }
32
+ .pc-edit-block__control {
33
+ display: flex;
34
+ justify-content: center;
35
+ align-items: center;
36
+ transition: transform 0.2s;
37
+ width: 24px;
38
+ height: 24px;
39
+ border-radius: calc(8px / 2);
40
+ background-color: var(--yc-color-promo-highlight-neon);
41
+ }
42
+ .pc-edit-block__control:hover {
43
+ transform: scale(1.1);
44
+ }
45
+ .pc-edit-block__control:not(:first-child) {
46
+ margin-left: 12px;
47
+ }
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { EditBlockProps } from '../../../editor/types';
3
+ declare const _default: React.MemoExoticComponent<({ id, isHeader, activeBlockId, onDelete, onSelect, onCopy, onOrderChange, children, orderedBlocksCount, }: EditBlockProps) => JSX.Element>;
4
+ export default _default;
@@ -0,0 +1,32 @@
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 icons_1 = require("@gravity-ui/icons");
6
+ const utils_1 = require("../../../utils");
7
+ const b = (0, utils_1.block)('edit-block');
8
+ const EditBlock = ({ id, isHeader, activeBlockId, onDelete, onSelect, onCopy, onOrderChange, children, orderedBlocksCount, }) => {
9
+ const ref = (0, react_1.useRef)(null);
10
+ const controlsActive = activeBlockId === id;
11
+ (0, react_1.useEffect)(() => {
12
+ var _a;
13
+ if (controlsActive && ref.current) {
14
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ behavior: 'smooth', block: 'center' });
15
+ }
16
+ }, [controlsActive]);
17
+ return (react_1.default.createElement("div", { className: b(), onClick: () => {
18
+ onSelect(id);
19
+ }, ref: ref },
20
+ react_1.default.createElement("div", { className: b('controls', { active: controlsActive, isHeader }) }, controlsActive && (react_1.default.createElement("div", { className: b('controls-content'), onClick: (e) => e.stopPropagation() },
21
+ typeof id === 'number' && (react_1.default.createElement(react_1.Fragment, null,
22
+ id > 0 && (react_1.default.createElement("div", { className: b('control'), onClick: () => onOrderChange(id, id - 1) },
23
+ react_1.default.createElement(icons_1.ChevronUp, null))),
24
+ id < orderedBlocksCount - 1 && (react_1.default.createElement("div", { className: b('control'), onClick: () => onOrderChange(id, id + 1) },
25
+ react_1.default.createElement(icons_1.ChevronDown, null))),
26
+ react_1.default.createElement("div", { className: b('control'), onClick: () => onCopy(id) },
27
+ react_1.default.createElement(icons_1.Copy, null)))),
28
+ react_1.default.createElement("div", { className: b('control'), onClick: () => onDelete(id) },
29
+ react_1.default.createElement(icons_1.TrashBin, null))))),
30
+ children));
31
+ };
32
+ exports.default = react_1.default.memo(EditBlock);
@@ -0,0 +1,2 @@
1
+ import { EditorProps } from '../types';
2
+ export declare const Editor: ({ children, ...rest }: EditorProps) => JSX.Element;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Editor = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importStar(require("react"));
6
+ const AddBlock_1 = tslib_1.__importDefault(require("../Components/AddBlock/AddBlock"));
7
+ const EditBlock_1 = tslib_1.__importDefault(require("../Components/EditBlock/EditBlock"));
8
+ const store_1 = require("../store");
9
+ const utils_1 = require("../utils");
10
+ const Editor = (_a) => {
11
+ var { children } = _a, rest = tslib_1.__rest(_a, ["children"]);
12
+ const { content, onAdd, editControlsProps } = (0, store_1.useEditorState)(rest);
13
+ const constructorProps = (0, react_1.useMemo)(() => {
14
+ const editControlsDecorator = (props) => (react_1.default.createElement(EditBlock_1.default, Object.assign({}, props, editControlsProps)));
15
+ return {
16
+ content,
17
+ custom: (0, utils_1.addCustomDecorator)(editControlsDecorator, rest.custom),
18
+ };
19
+ }, [editControlsProps, content, rest.custom]);
20
+ return (react_1.default.createElement("div", null,
21
+ children(constructorProps),
22
+ react_1.default.createElement(AddBlock_1.default, { onAdd: onAdd })));
23
+ };
24
+ exports.Editor = Editor;
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ import { Block, BlockType } from '../../models';
3
+ export type PreviewComponent = React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
4
+ export interface EdiorBlockData {
5
+ template: Block;
6
+ preview: PreviewComponent;
7
+ meta: {
8
+ title: string;
9
+ description?: string;
10
+ };
11
+ }
12
+ declare const EditorBlocksData: Record<BlockType, EdiorBlockData>;
13
+ export default EditorBlocksData;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const models_1 = require("../../models");
5
+ const utils_1 = require("../utils");
6
+ const default_preview_1 = tslib_1.__importDefault(require("./previews/default-preview"));
7
+ const getBlockTemplate = (blockType) => require(`./templates/${blockType}.json`);
8
+ const getBlockPreview = (blockType) => {
9
+ try {
10
+ return require(`./previews/${blockType}.tsx`).default;
11
+ }
12
+ catch (err) {
13
+ /*eslint-disable no-console */
14
+ console.warn(`Preview image for ${blockType} not found`);
15
+ return default_preview_1.default;
16
+ }
17
+ };
18
+ const EditorBlocksData = Object.values(models_1.BlockType).reduce((previewData, blockType) => {
19
+ const template = getBlockTemplate(blockType);
20
+ const preview = getBlockPreview(blockType);
21
+ template.meta = template.meta || {};
22
+ template.meta.title = template.meta.title || (0, utils_1.formatBlockName)(blockType);
23
+ /* eslint-disable no-param-reassign */
24
+ previewData[blockType] = Object.assign(Object.assign({}, template), { preview });
25
+ return previewData;
26
+ }, {});
27
+ exports.default = EditorBlocksData;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const DefaultPreview: React.FC<React.SVGProps<SVGSVGElement>>;
3
+ export default DefaultPreview;
@@ -0,0 +1,18 @@
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 svg_1 = require("../../../utils/svg");
6
+ const DefaultPreview = (props) => (react_1.default.createElement("svg", Object.assign({ width: "150", height: "76", viewBox: "0 0 150 76", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, svg_1.a11yHiddenSvgProps, props),
7
+ react_1.default.createElement("rect", { x: "1", y: "1", width: "148", height: "74", rx: "8", fill: "white" }),
8
+ react_1.default.createElement("rect", { x: "14.7674", y: "21.6512", width: "28.3953", height: "6.88372", rx: "0.860465", fill: "#E7E7E7" }),
9
+ react_1.default.createElement("rect", { x: "43.1628", y: "21.6512", width: "28.3953", height: "6.88372", rx: "0.860465", fill: "white" }),
10
+ react_1.default.createElement("rect", { x: "14.7674", y: "31.9767", width: "56.7907", height: "3.44186", rx: "0.860465", fill: "#E7E7E7" }),
11
+ react_1.default.createElement("rect", { x: "14.7675", y: "37.1395", width: "56.7907", height: "3.44186", rx: "0.860465", fill: "#E7E7E7" }),
12
+ react_1.default.createElement("rect", { x: "14.7675", y: "42.3023", width: "56.7907", height: "3.44186", rx: "0.860465", fill: "#E7E7E7" }),
13
+ react_1.default.createElement("rect", { x: "14.7674", y: "49.186", width: "18.9302", height: "5.16279", rx: "0.860465", fill: "#E7E7E7" }),
14
+ react_1.default.createElement("rect", { x: "33.6977", y: "49.186", width: "18.9302", height: "5.16279", rx: "0.860465", fill: "white" }),
15
+ react_1.default.createElement("rect", { x: "52.6279", y: "49.186", width: "18.9302", height: "5.16279", rx: "0.860465", fill: "white" }),
16
+ react_1.default.createElement("rect", { x: "78.4418", y: "9.60464", width: "56.7907", height: "56.7907", rx: "5.16279", fill: "#A967FF" }),
17
+ react_1.default.createElement("rect", { x: "0.5", y: "0.5", width: "149", height: "75", rx: "8.5", stroke: "black", strokeOpacity: "0.1" })));
18
+ exports.default = DefaultPreview;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const Header: React.FC<React.SVGProps<SVGSVGElement>>;
3
+ export default Header;
@@ -0,0 +1,19 @@
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 svg_1 = require("../../../utils/svg");
6
+ const Header = (props) => (react_1.default.createElement("svg", Object.assign({ width: "150", height: "76", viewBox: "0 0 150 76", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, svg_1.a11yHiddenSvgProps, props),
7
+ react_1.default.createElement("rect", { x: "1", y: "1", width: "148", height: "74", rx: "8", fill: "white" }),
8
+ react_1.default.createElement("rect", { x: "4.44174", y: "9.60464", width: "141.116", height: "56.7907", rx: "5.16279", fill: "#A967FF" }),
9
+ react_1.default.createElement("rect", { x: "14.7674", y: "21.6512", width: "28.3953", height: "6.88372", rx: "0.860465", fill: "white" }),
10
+ react_1.default.createElement("rect", { x: "43.1628", y: "21.6512", width: "28.3953", height: "6.88372", rx: "0.860465", fill: "#A967FF" }),
11
+ react_1.default.createElement("rect", { x: "14.7674", y: "31.9767", width: "56.7907", height: "3.44186", rx: "0.860465", fill: "white" }),
12
+ react_1.default.createElement("rect", { x: "14.7674", y: "37.1395", width: "56.7907", height: "3.44186", rx: "0.860465", fill: "white" }),
13
+ react_1.default.createElement("rect", { x: "14.7674", y: "42.3023", width: "56.7907", height: "3.44186", rx: "0.860465", fill: "white" }),
14
+ react_1.default.createElement("rect", { x: "14.7674", y: "49.186", width: "18.9302", height: "5.16279", rx: "0.860465", fill: "white" }),
15
+ react_1.default.createElement("rect", { x: "33.6976", y: "49.186", width: "18.9302", height: "5.16279", rx: "0.860465", fill: "#A967FF" }),
16
+ react_1.default.createElement("rect", { x: "52.6279", y: "49.186", width: "18.9302", height: "5.16279", rx: "0.860465", fill: "#A967FF" }),
17
+ react_1.default.createElement("rect", { x: "78.4418", y: "9.60464", width: "56.7907", height: "56.7907", rx: "5.16279", fill: "#A967FF" }),
18
+ react_1.default.createElement("rect", { x: "0.5", y: "0.5", width: "149", height: "75", rx: "8.5", stroke: "black", strokeOpacity: "0.1" })));
19
+ exports.default = Header;
@@ -0,0 +1,2 @@
1
+ export { Editor } from './Containers/Editor';
2
+ export * from './types';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Editor = void 0;
4
+ const tslib_1 = require("tslib");
5
+ var Editor_1 = require("./Containers/Editor");
6
+ Object.defineProperty(exports, "Editor", { enumerable: true, get: function () { return Editor_1.Editor; } });
7
+ tslib_1.__exportStar(require("./types"), exports);
@@ -0,0 +1,15 @@
1
+ import { Block } from '../../models';
2
+ import { EditorProps } from '../types';
3
+ export type EditorBlockId = number | string;
4
+ export declare function useEditorState({ content: intialContent, custom }: Omit<EditorProps, 'children'>): {
5
+ content: import("../../models").PageContent;
6
+ editControlsProps: {
7
+ activeBlockId: import("./reducer").EditorBlockId;
8
+ orderedBlocksCount: number;
9
+ onDelete: (id: EditorBlockId) => void;
10
+ onSelect: (id: EditorBlockId) => void;
11
+ onCopy: (index: number) => void;
12
+ onOrderChange: (oldIndex: number, newIndex: number) => void;
13
+ };
14
+ onAdd: (block: Block) => void;
15
+ };
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useEditorState = void 0;
4
+ const react_1 = require("react");
5
+ const models_1 = require("../../models");
6
+ const utils_1 = require("../../utils");
7
+ const reducer_1 = require("./reducer");
8
+ const utils_2 = require("./utils");
9
+ function useEditorState({ content: intialContent, custom }) {
10
+ const headerBlockTypes = (0, react_1.useMemo)(() => [...models_1.HeaderBlockTypes, ...(0, utils_1.getCustomHeaderTypes)(custom)], [custom]);
11
+ const reducer = (0, react_1.useMemo)(() => (0, reducer_1.getReducer)(headerBlockTypes), [headerBlockTypes]);
12
+ const [{ activeBlockId, content, orderedBlocksCount }, dispatch] = (0, react_1.useReducer)(reducer, {
13
+ activeBlockId: 0,
14
+ orderedBlocksCount: (0, utils_1.getOrderedBlocks)(intialContent.blocks, headerBlockTypes).length,
15
+ content: (0, utils_2.addEditorProps)(intialContent),
16
+ });
17
+ return (0, react_1.useMemo)(() => {
18
+ return {
19
+ content,
20
+ editControlsProps: {
21
+ activeBlockId,
22
+ orderedBlocksCount,
23
+ onDelete: (id) => dispatch({ type: reducer_1.DELETE_BLOCK, payload: id }),
24
+ onSelect: (id) => dispatch({ type: reducer_1.SELECT_BLOCK, payload: id }),
25
+ onCopy: (index) => dispatch({ type: reducer_1.COPY_BLOCK, payload: index }),
26
+ onOrderChange: (oldIndex, newIndex) => dispatch({ type: reducer_1.ORDER_BLOCK, payload: { oldIndex, newIndex } }),
27
+ },
28
+ onAdd: (block) => dispatch({ type: reducer_1.ADD_BLOCK, payload: block }),
29
+ };
30
+ }, [content, activeBlockId, orderedBlocksCount]);
31
+ }
32
+ exports.useEditorState = useEditorState;