@gravity-ui/page-constructor 4.31.0 → 4.31.1-alpha.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 (63) hide show
  1. package/build/cjs/blocks/Form/Form.css +136 -0
  2. package/build/cjs/blocks/Form/Form.d.ts +4 -0
  3. package/build/cjs/blocks/Form/Form.js +61 -0
  4. package/build/cjs/blocks/Form/HubspotInlineForm.d.ts +7 -0
  5. package/build/cjs/blocks/Form/HubspotInlineForm.js +14 -0
  6. package/build/cjs/blocks/Form/InnerForm/InnerForm.d.ts +9 -0
  7. package/build/cjs/blocks/Form/InnerForm/InnerForm.js +28 -0
  8. package/build/cjs/blocks/Form/schema.d.ts +202 -0
  9. package/build/cjs/blocks/Form/schema.js +44 -0
  10. package/build/cjs/blocks/index.d.ts +1 -0
  11. package/build/cjs/blocks/index.js +3 -1
  12. package/build/cjs/components/YandexForm/YandexForm.d.ts +2 -17
  13. package/build/cjs/components/YandexForm/YandexForm.js +6 -4
  14. package/build/cjs/components/YandexForm/schema.d.ts +16 -0
  15. package/build/cjs/components/YandexForm/schema.js +13 -0
  16. package/build/cjs/constructor-items.d.ts +1 -0
  17. package/build/cjs/constructor-items.js +1 -0
  18. package/build/cjs/editor/data/templates/form-block.json +20 -0
  19. package/build/cjs/models/constructor-items/blocks.d.ts +31 -4
  20. package/build/cjs/models/constructor-items/blocks.js +13 -1
  21. package/build/cjs/models/constructor-items/common.d.ts +17 -1
  22. package/build/cjs/models/guards.d.ts +3 -1
  23. package/build/cjs/models/guards.js +9 -1
  24. package/build/cjs/schema/constants.js +2 -1
  25. package/build/cjs/schema/validators/blocks.d.ts +1 -0
  26. package/build/cjs/schema/validators/blocks.js +1 -0
  27. package/build/cjs/sub-blocks/HubspotForm/schema.d.ts +22 -0
  28. package/build/cjs/sub-blocks/HubspotForm/schema.js +17 -0
  29. package/build/esm/blocks/Form/Form.css +136 -0
  30. package/build/esm/blocks/Form/Form.d.ts +5 -0
  31. package/build/esm/blocks/Form/Form.js +59 -0
  32. package/build/esm/blocks/Form/HubspotInlineForm.d.ts +7 -0
  33. package/build/esm/blocks/Form/HubspotInlineForm.js +12 -0
  34. package/build/esm/blocks/Form/InnerForm/InnerForm.d.ts +9 -0
  35. package/build/esm/blocks/Form/InnerForm/InnerForm.js +26 -0
  36. package/build/esm/blocks/Form/schema.d.ts +202 -0
  37. package/build/esm/blocks/Form/schema.js +40 -0
  38. package/build/esm/blocks/index.d.ts +1 -0
  39. package/build/esm/blocks/index.js +1 -0
  40. package/build/esm/components/YandexForm/YandexForm.d.ts +2 -17
  41. package/build/esm/components/YandexForm/YandexForm.js +5 -3
  42. package/build/esm/components/YandexForm/schema.d.ts +16 -0
  43. package/build/esm/components/YandexForm/schema.js +10 -0
  44. package/build/esm/constructor-items.d.ts +1 -0
  45. package/build/esm/constructor-items.js +2 -1
  46. package/build/esm/editor/data/templates/form-block.json +20 -0
  47. package/build/esm/models/constructor-items/blocks.d.ts +31 -4
  48. package/build/esm/models/constructor-items/blocks.js +12 -0
  49. package/build/esm/models/constructor-items/common.d.ts +17 -1
  50. package/build/esm/models/guards.d.ts +3 -1
  51. package/build/esm/models/guards.js +7 -1
  52. package/build/esm/schema/constants.js +3 -2
  53. package/build/esm/schema/validators/blocks.d.ts +1 -0
  54. package/build/esm/schema/validators/blocks.js +1 -0
  55. package/build/esm/sub-blocks/HubspotForm/schema.d.ts +22 -0
  56. package/build/esm/sub-blocks/HubspotForm/schema.js +14 -0
  57. package/package.json +1 -1
  58. package/server/models/constructor-items/blocks.d.ts +31 -4
  59. package/server/models/constructor-items/blocks.js +13 -1
  60. package/server/models/constructor-items/common.d.ts +17 -1
  61. package/server/models/guards.d.ts +3 -1
  62. package/server/models/guards.js +9 -1
  63. package/widget/index.js +1 -1
@@ -0,0 +1,20 @@
1
+ {
2
+ "template": {
3
+ "type": "form-block",
4
+ "formData": {
5
+ "yandex": {
6
+ "hash": "hashString",
7
+ "title": ""
8
+ }
9
+ },
10
+ "direction": "center",
11
+ "textContent": {
12
+ "title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
13
+ "text": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
14
+ },
15
+ "image": {
16
+ "src": "https://storage.yandexcloud.net/cloud-www-assets/constructor/storybook/images/img-mini_4-12_light.png"
17
+ },
18
+ "backgroundColor": "#262626"
19
+ }
20
+ }
@@ -3,8 +3,8 @@ import { ButtonSize } from '@gravity-ui/uikit';
3
3
  import { GridColumnSize, GridColumnSizesType } from '../../grid/types';
4
4
  import { ThemeSupporting } from '../../utils';
5
5
  import { AnalyticsEventsBase } from '../common';
6
- import { AnchorProps, Animatable, BackgroundImageProps, ButtonProps, ContentSize, ContentTextSize, ContentTheme, FileLinkProps, HeaderBreadCrumbsProps, HeaderImageSize, HeaderOffset, HeaderWidth, ImageDeviceProps, Justify, LegendTableMarkerType, LinkProps, MapProps, MediaDirection, MediaProps, TextSize, TextTheme, ThemedImage, ThemedMediaProps, ThemedMediaVideoProps, TitleItemBaseProps, TitleItemProps } from './common';
7
- import { BannerCardProps, SubBlock, SubBlockModels } from './sub-blocks';
6
+ import { AnchorProps, Animatable, BackgroundImageProps, ButtonProps, ContentSize, ContentTextSize, ContentTheme, FileLinkProps, HeaderBreadCrumbsProps, HeaderImageSize, HeaderOffset, HeaderWidth, ImageDeviceProps, Justify, LegendTableMarkerType, LinkProps, MapProps, MediaDirection, MediaProps, TextSize, TextTheme, ThemedImage, ThemedMediaProps, ThemedMediaVideoProps, TitleItemBaseProps, TitleItemProps, YandexFormProps } from './common';
7
+ import { BannerCardProps, HubspotFormProps, SubBlock, SubBlockModels } from './sub-blocks';
8
8
  export declare enum BlockType {
9
9
  PromoFeaturesBlock = "promo-features-block",
10
10
  ExtendedFeaturesBlock = "extended-features-block",
@@ -23,7 +23,8 @@ export declare enum BlockType {
23
23
  ContentLayoutBlock = "content-layout-block",
24
24
  ShareBlock = "share-block",
25
25
  MapBlock = "map-block",
26
- FilterBlock = "filter-block"
26
+ FilterBlock = "filter-block",
27
+ FormBlock = "form-block"
27
28
  }
28
29
  export declare const BlockTypes: BlockType[];
29
30
  export declare const HeaderBlockTypes: BlockType[];
@@ -295,6 +296,29 @@ export interface ShareBlockProps {
295
296
  items: PCShareSocialNetwork[];
296
297
  title?: string;
297
298
  }
299
+ export declare enum FormBlockDataTypes {
300
+ YANDEX = "yandex",
301
+ HUBSPOT_INLINE = "hubspot-inline"
302
+ }
303
+ export declare enum FormBlockDirection {
304
+ FormContent = "form-content",
305
+ ContentForm = "content-form",
306
+ Center = "center"
307
+ }
308
+ export interface FormBlockYandexData {
309
+ yandex: YandexFormProps;
310
+ }
311
+ export interface FormBlockHubspotData {
312
+ hubspot: HubspotFormProps;
313
+ }
314
+ export type FormBlockData = FormBlockYandexData | FormBlockHubspotData;
315
+ export interface FormBlockProps {
316
+ formData: FormBlockData;
317
+ title?: string;
318
+ textContent?: Omit<ContentBlockProps, 'centered' | 'colSizes' | 'size'>;
319
+ direction?: FormBlockDirection;
320
+ background?: BackgroundImageProps;
321
+ }
298
322
  export type HeaderBlockModel = {
299
323
  type: BlockType.HeaderBlock;
300
324
  } & HeaderBlockProps;
@@ -349,6 +373,9 @@ export type ContentLayoutBlockModel = {
349
373
  export type ShareBLockModel = {
350
374
  type: BlockType.ShareBlock;
351
375
  } & ShareBlockProps;
352
- type BlockModels = SliderBlockModel | ExtendedFeaturesBlockModel | PromoFeaturesBlockModel | QuestionsBlockModel | BannerBlockModel | CompaniesBlockModel | MediaBlockModel | MapBlockModel | InfoBlockModel | TableBlockModel | TabsBlockModel | HeaderBlockModel | IconsBlockModel | HeaderSliderBlockModel | CardLayoutBlockModel | ContentLayoutBlockModel | ShareBLockModel | FilterBlockModel;
376
+ export type FormBlockModel = {
377
+ type: BlockType.FormBlock;
378
+ } & FormBlockProps;
379
+ type BlockModels = SliderBlockModel | ExtendedFeaturesBlockModel | PromoFeaturesBlockModel | QuestionsBlockModel | BannerBlockModel | CompaniesBlockModel | MediaBlockModel | MapBlockModel | InfoBlockModel | TableBlockModel | TabsBlockModel | HeaderBlockModel | IconsBlockModel | HeaderSliderBlockModel | CardLayoutBlockModel | ContentLayoutBlockModel | ShareBLockModel | FilterBlockModel | FormBlockModel;
353
380
  export type Block = BlockModels & BlockBaseProps;
354
381
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PCShareSocialNetwork = exports.SliderType = exports.SliderBreakpointNames = exports.HeaderBlockTypes = exports.BlockTypes = exports.BlockType = void 0;
3
+ exports.FormBlockDirection = exports.FormBlockDataTypes = exports.PCShareSocialNetwork = exports.SliderType = exports.SliderBreakpointNames = exports.HeaderBlockTypes = exports.BlockTypes = exports.BlockType = void 0;
4
4
  var BlockType;
5
5
  (function (BlockType) {
6
6
  BlockType["PromoFeaturesBlock"] = "promo-features-block";
@@ -21,6 +21,7 @@ var BlockType;
21
21
  BlockType["ShareBlock"] = "share-block";
22
22
  BlockType["MapBlock"] = "map-block";
23
23
  BlockType["FilterBlock"] = "filter-block";
24
+ BlockType["FormBlock"] = "form-block";
24
25
  })(BlockType = exports.BlockType || (exports.BlockType = {}));
25
26
  exports.BlockTypes = Object.values(BlockType);
26
27
  exports.HeaderBlockTypes = [BlockType.HeaderBlock, BlockType.HeaderSliderBlock];
@@ -44,3 +45,14 @@ var PCShareSocialNetwork;
44
45
  PCShareSocialNetwork["Facebook"] = "facebook";
45
46
  PCShareSocialNetwork["LinkedIn"] = "linkedin";
46
47
  })(PCShareSocialNetwork = exports.PCShareSocialNetwork || (exports.PCShareSocialNetwork = {}));
48
+ var FormBlockDataTypes;
49
+ (function (FormBlockDataTypes) {
50
+ FormBlockDataTypes["YANDEX"] = "yandex";
51
+ FormBlockDataTypes["HUBSPOT_INLINE"] = "hubspot-inline";
52
+ })(FormBlockDataTypes = exports.FormBlockDataTypes || (exports.FormBlockDataTypes = {}));
53
+ var FormBlockDirection;
54
+ (function (FormBlockDirection) {
55
+ FormBlockDirection["FormContent"] = "form-content";
56
+ FormBlockDirection["ContentForm"] = "content-form";
57
+ FormBlockDirection["Center"] = "center";
58
+ })(FormBlockDirection = exports.FormBlockDirection || (exports.FormBlockDirection = {}));
@@ -1,7 +1,7 @@
1
1
  import React, { CSSProperties, ReactNode } from 'react';
2
2
  import { ButtonView, ButtonProps as UikitButtonProps } from '@gravity-ui/uikit';
3
3
  import { ThemeSupporting } from '../../utils';
4
- import { AnalyticsEventsBase, ClassNameProps, PixelEventType, QAProps } from '../common';
4
+ import { AnalyticsEventsBase, ClassNameProps, PixelEvent, PixelEventType, QAProps } from '../common';
5
5
  export declare enum AuthorType {
6
6
  Column = "column",
7
7
  Line = "line"
@@ -337,4 +337,20 @@ export interface TitleProps {
337
337
  title?: TitleItemProps | string;
338
338
  subtitle?: string;
339
339
  }
340
+ export interface YandexFormProps extends AnalyticsEventsBase {
341
+ id: number | string;
342
+ containerId?: string;
343
+ theme?: string;
344
+ className?: string;
345
+ headerHeight?: number;
346
+ customFormOrigin?: string;
347
+ customFormSection?: string;
348
+ params?: {
349
+ [key: string]: string;
350
+ };
351
+ onSubmit?: () => void;
352
+ onLoad?: () => void;
353
+ metrikaGoals?: string | string[];
354
+ pixelEvents?: string | string[] | PixelEvent | PixelEvent[];
355
+ }
340
356
  export {};
@@ -1,4 +1,6 @@
1
- import { Block, ConstructorItem } from './';
1
+ import { Block, ConstructorItem, FormBlockData, FormBlockHubspotData, FormBlockYandexData } from './';
2
2
  import { MetrikaGoal, NewMetrikaGoal } from './index';
3
3
  export declare function isBlock(block: ConstructorItem): block is Block;
4
4
  export declare function isNewMetrikaFormat(metrika: MetrikaGoal): metrika is NewMetrikaGoal[];
5
+ export declare function isYandexDataForm(data: FormBlockData): data is FormBlockYandexData;
6
+ export declare function isHubspotDataForm(data: FormBlockData): data is FormBlockHubspotData;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isNewMetrikaFormat = exports.isBlock = void 0;
3
+ exports.isHubspotDataForm = exports.isYandexDataForm = exports.isNewMetrikaFormat = exports.isBlock = void 0;
4
4
  const _1 = require("./");
5
5
  function isBlock(block) {
6
6
  return block.type in _1.BlockTypes;
@@ -10,3 +10,11 @@ function isNewMetrikaFormat(metrika) {
10
10
  return Boolean(Array.isArray(metrika) && metrika.length && typeof metrika[0] === 'object');
11
11
  }
12
12
  exports.isNewMetrikaFormat = isNewMetrikaFormat;
13
+ function isYandexDataForm(data) {
14
+ return Boolean(data.yandex);
15
+ }
16
+ exports.isYandexDataForm = isYandexDataForm;
17
+ function isHubspotDataForm(data) {
18
+ return Boolean(data.hubspot);
19
+ }
20
+ exports.isHubspotDataForm = isHubspotDataForm;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.constructorCardSchemaNames = exports.constructorBlockSchemaNames = exports.cardSchemas = exports.blockSchemas = void 0;
4
4
  const blocks_1 = require("./validators/blocks");
5
5
  const sub_blocks_1 = require("./validators/sub-blocks");
6
- exports.blockSchemas = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, sub_blocks_1.Divider), blocks_1.ExtendedFeaturesBlock), blocks_1.PromoFeaturesBlock), blocks_1.SliderBlock), blocks_1.QuestionsBlock), blocks_1.HeaderBlock), blocks_1.BannerBlock), blocks_1.CompaniesBlock), blocks_1.MediaBlock), blocks_1.MapBlock), blocks_1.InfoBlock), blocks_1.TableBlock), blocks_1.TabsBlock), blocks_1.HeaderSliderBlock), blocks_1.IconsBlock), blocks_1.CardLayoutBlock), blocks_1.ContentLayoutBlock), blocks_1.ShareBlock), blocks_1.FilterBlock);
6
+ exports.blockSchemas = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, sub_blocks_1.Divider), blocks_1.ExtendedFeaturesBlock), blocks_1.PromoFeaturesBlock), blocks_1.SliderBlock), blocks_1.QuestionsBlock), blocks_1.HeaderBlock), blocks_1.BannerBlock), blocks_1.CompaniesBlock), blocks_1.MediaBlock), blocks_1.MapBlock), blocks_1.InfoBlock), blocks_1.TableBlock), blocks_1.TabsBlock), blocks_1.HeaderSliderBlock), blocks_1.IconsBlock), blocks_1.CardLayoutBlock), blocks_1.ContentLayoutBlock), blocks_1.ShareBlock), blocks_1.FilterBlock), blocks_1.FormBlock);
7
7
  exports.cardSchemas = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, sub_blocks_1.MediaCardBlock), blocks_1.BannerCard), sub_blocks_1.PriceDetailedBlock), sub_blocks_1.BackgroundCard), sub_blocks_1.Quote), sub_blocks_1.BasicCard);
8
8
  exports.constructorBlockSchemaNames = [
9
9
  'divider',
@@ -30,6 +30,7 @@ exports.constructorBlockSchemaNames = [
30
30
  'content-layout-block',
31
31
  'share-block',
32
32
  'filter-block',
33
+ 'form-block',
33
34
  ];
34
35
  exports.constructorCardSchemaNames = [
35
36
  'media-card',
@@ -16,3 +16,4 @@ export * from '../../blocks/CardLayout/schema';
16
16
  export * from '../../blocks/ContentLayout/schema';
17
17
  export * from '../../blocks/Share/schema';
18
18
  export * from '../../blocks/FilterBlock/schema';
19
+ export * from '../../blocks/Form/schema';
@@ -19,3 +19,4 @@ tslib_1.__exportStar(require("../../blocks/CardLayout/schema"), exports);
19
19
  tslib_1.__exportStar(require("../../blocks/ContentLayout/schema"), exports);
20
20
  tslib_1.__exportStar(require("../../blocks/Share/schema"), exports);
21
21
  tslib_1.__exportStar(require("../../blocks/FilterBlock/schema"), exports);
22
+ tslib_1.__exportStar(require("../../blocks/Form/schema"), exports);
@@ -0,0 +1,22 @@
1
+ export declare const HubspotFormProps: {
2
+ type: string;
3
+ required: string[];
4
+ properties: {
5
+ region: {
6
+ type: string;
7
+ };
8
+ portalId: {
9
+ type: string;
10
+ };
11
+ formId: {
12
+ type: string;
13
+ };
14
+ formInstanceId: {
15
+ type: string;
16
+ };
17
+ type: {};
18
+ when: {
19
+ type: string;
20
+ };
21
+ };
22
+ };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HubspotFormProps = void 0;
4
+ const common_1 = require("../../schema/validators/common");
5
+ exports.HubspotFormProps = {
6
+ type: 'object',
7
+ required: ['portalId', 'formId'],
8
+ properties: Object.assign(Object.assign({}, common_1.BaseProps), { region: {
9
+ type: 'string',
10
+ }, portalId: {
11
+ type: 'string',
12
+ }, formId: {
13
+ type: 'string',
14
+ }, formInstanceId: {
15
+ type: 'string',
16
+ } }),
17
+ };
@@ -0,0 +1,136 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .pc-form-block {
4
+ border-radius: 32px;
5
+ position: relative;
6
+ }
7
+ .pc-form-block__title {
8
+ margin: 0 0 24px 10px;
9
+ }
10
+ .pc-form-block__title_mobile {
11
+ margin-left: 4px;
12
+ }
13
+ .pc-form-block__full-form {
14
+ background-color: var(--g-color-base-background);
15
+ padding: 48px 64px 48px calc(64px - 10px);
16
+ border-radius: var(--pc-border-radius);
17
+ }
18
+ .pc-form-block__media {
19
+ position: absolute;
20
+ top: 0;
21
+ left: 0;
22
+ bottom: 0;
23
+ right: 0;
24
+ border-radius: 32px;
25
+ }
26
+ .pc-form-block__image {
27
+ height: 100%;
28
+ width: 100%;
29
+ object-fit: cover;
30
+ }
31
+ .pc-form-block__row_direction_form-content {
32
+ flex-direction: row-reverse;
33
+ }
34
+ .pc-form-block__row_direction_center {
35
+ padding-top: 64px;
36
+ padding-bottom: 48px;
37
+ flex-direction: column;
38
+ }
39
+ .pc-form-block__row_direction_center .pc-form-block__content-wrapper {
40
+ margin-bottom: 32px;
41
+ }
42
+ .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__full-form {
43
+ box-shadow: 0 4px 24px var(--pc-color-sfx-shadow), 0 2px 8px var(--pc-color-sfx-shadow);
44
+ }
45
+ .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row_direction_form-content .pc-form-block__content-wrapper {
46
+ padding: 48px 0 64px 64px;
47
+ }
48
+ .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row_direction_content-form .pc-form-block__content-wrapper {
49
+ padding: 48px 64px 64px 0;
50
+ }
51
+ .pc-form-block_with-background .pc-form-block__row_direction_form-content .pc-form-block__form-wrapper {
52
+ padding: 16px 0 24px 16px;
53
+ }
54
+ .pc-form-block_with-background .pc-form-block__row_direction_content-form .pc-form-block__form-wrapper {
55
+ padding: 16px 16px 24px 0;
56
+ }
57
+ .pc-form-block_with-background .pc-form-block__row_direction_form-content .pc-form-block__content-wrapper, .pc-form-block_with-background .pc-form-block__row_direction_content-form .pc-form-block__content-wrapper {
58
+ padding: 64px;
59
+ }
60
+ @media (min-width: 1081px) {
61
+ .pc-form-block_form-type_yandex .pc-form-block__row_direction_form-content .pc-form-block__content-col, .pc-form-block_form-type_yandex .pc-form-block__row_direction_content-form .pc-form-block__content-col {
62
+ flex: 1 0 0;
63
+ }
64
+ .pc-form-block_form-type_yandex .pc-form-block__row_direction_form-content .pc-form-block__form, .pc-form-block_form-type_yandex .pc-form-block__row_direction_content-form .pc-form-block__form, .pc-form-block_form-type_yandex .pc-form-block__row_direction_center .pc-form-block__form {
65
+ min-width: 475px;
66
+ }
67
+ .pc-form-block_form-type_yandex .pc-form-block__row_direction_form-content .pc-form-block__form-col, .pc-form-block_form-type_yandex .pc-form-block__row_direction_content-form .pc-form-block__form-col, .pc-form-block_form-type_yandex .pc-form-block__row_direction_center .pc-form-block__form-col {
68
+ max-width: initial;
69
+ width: fit-content;
70
+ }
71
+ }
72
+ @media (max-width: 1081px) and (min-width: 769px) {
73
+ .pc-form-block__row {
74
+ flex-direction: column;
75
+ }
76
+ .pc-form-block_with-background .pc-form-block__row .pc-form-block__form-wrapper,
77
+ .pc-form-block_with-background .pc-form-block__row .pc-form-block__content-wrapper, .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row .pc-form-block__form-wrapper,
78
+ .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row .pc-form-block__content-wrapper {
79
+ max-width: 609px;
80
+ }
81
+ .pc-form-block_with-background .pc-form-block__row .pc-form-block__center,
82
+ .pc-form-block_with-background .pc-form-block__row .pc-form-block__form-wrapper,
83
+ .pc-form-block_with-background .pc-form-block__row .pc-form-block__content-wrapper, .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row .pc-form-block__center,
84
+ .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row .pc-form-block__form-wrapper,
85
+ .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row .pc-form-block__content-wrapper {
86
+ margin: 0 auto;
87
+ padding-right: 0;
88
+ padding-left: 0;
89
+ }
90
+ .pc-form-block_with-background .pc-form-block__row .pc-form-block__form-wrapper, .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row .pc-form-block__form-wrapper {
91
+ padding-top: 0;
92
+ }
93
+ .pc-form-block_with-background .pc-form-block__row .pc-form-block__content-wrapper, .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row .pc-form-block__content-wrapper {
94
+ text-align: center;
95
+ padding-bottom: 32px;
96
+ }
97
+ .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row .pc-form-block__content-wrapper {
98
+ padding: 0 0 32px 0;
99
+ }
100
+ }
101
+ @media (max-width: 769px) {
102
+ .pc-form-block__full-form {
103
+ padding: 32px;
104
+ }
105
+ .pc-form-block_with-background .pc-form-block__row, .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row {
106
+ padding: 0;
107
+ }
108
+ .pc-form-block_with-background .pc-form-block__row .pc-form-block__form-wrapper,
109
+ .pc-form-block_with-background .pc-form-block__row .pc-form-block__content-wrapper, .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row .pc-form-block__form-wrapper,
110
+ .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row .pc-form-block__content-wrapper {
111
+ padding: 0;
112
+ }
113
+ .pc-form-block_with-background .pc-form-block__row .pc-form-block__content-wrapper, .pc-form-block:not(.pc-form-block_with-background) .pc-form-block__row .pc-form-block__content-wrapper {
114
+ padding-bottom: 32px;
115
+ margin-bottom: 0;
116
+ }
117
+ .pc-form-block_with-background {
118
+ padding: 0 8px;
119
+ }
120
+ .pc-form-block_with-background .pc-form-block__row {
121
+ padding-top: 48px;
122
+ }
123
+ .pc-form-block_with-background .pc-form-block__row_padding-bottom_m {
124
+ padding-bottom: 32px;
125
+ }
126
+ .pc-form-block_with-background .pc-form-block__row_padding-bottom_l {
127
+ padding-bottom: 48px;
128
+ }
129
+ .pc-form-block_with-background .pc-form-block__row_direction_form-content .pc-form-block__content-wrapper, .pc-form-block_with-background .pc-form-block__row_direction_content-form .pc-form-block__content-wrapper, .pc-form-block_with-background .pc-form-block__row_direction_center .pc-form-block__content-wrapper {
130
+ padding-right: 16px;
131
+ padding-left: 16px;
132
+ }
133
+ .pc-form-block_with-background .pc-form-block__row_direction_form-content, .pc-form-block_with-background .pc-form-block__row_direction_content-form {
134
+ padding-top: 32px;
135
+ }
136
+ }
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { FormBlockProps } from '../../models';
3
+ import './Form.css';
4
+ declare const FormBlock: React.FC<FormBlockProps>;
5
+ export default FormBlock;
@@ -0,0 +1,59 @@
1
+ import React, { useCallback, useContext, useMemo, useState } from 'react';
2
+ import { BackgroundImage, Title } from '../../components';
3
+ import { MobileContext } from '../../context/mobileContext';
4
+ import { Col, Grid, GridAlignItems, GridColumnSize, Row } from '../../grid';
5
+ import { FormBlockDataTypes, FormBlockDirection, isHubspotDataForm, isYandexDataForm, } from '../../models';
6
+ import { Content } from '../../sub-blocks';
7
+ import { block } from '../../utils';
8
+ import InnerForm from './InnerForm/InnerForm';
9
+ import './Form.css';
10
+ const b = block('form-block');
11
+ const colSizes = { [GridColumnSize.Lg]: 6, [GridColumnSize.All]: 12 };
12
+ const FormBlock = (props) => {
13
+ var _a;
14
+ const { formData, title, textContent, direction = FormBlockDirection.Center, background } = props;
15
+ const [contentLoaded, setContentLoaded] = useState(false);
16
+ const isMobile = useContext(MobileContext);
17
+ const hasImage = background && (background.src || background.desktop);
18
+ const paddingBottom = background && ((_a = background.style) === null || _a === void 0 ? void 0 : _a.backgroundColor) && !hasImage ? 'l' : 'm'; // bigger padding for case with background color and no image
19
+ const onContentLoad = useCallback(() => {
20
+ setContentLoaded(true);
21
+ }, []);
22
+ const formType = useMemo(() => {
23
+ if (isYandexDataForm(formData)) {
24
+ return FormBlockDataTypes.YANDEX;
25
+ }
26
+ if (isHubspotDataForm(formData)) {
27
+ return FormBlockDataTypes.HUBSPOT_INLINE;
28
+ }
29
+ return undefined;
30
+ }, [formData]);
31
+ if (!formData) {
32
+ return null;
33
+ }
34
+ return (React.createElement("div", { className: b({
35
+ 'with-background': Boolean(background),
36
+ 'form-type': formType,
37
+ }) },
38
+ background && (React.createElement(BackgroundImage, Object.assign({}, background, { className: b('media'), imageClassName: b('image') }))),
39
+ React.createElement(Grid, null,
40
+ React.createElement(Row, { alignItems: direction === FormBlockDirection.Center
41
+ ? GridAlignItems.Center
42
+ : GridAlignItems.Start, className: b('row', {
43
+ direction,
44
+ 'padding-bottom': paddingBottom,
45
+ }) },
46
+ React.createElement(Col, { sizes: colSizes, className: b('content-col') }, textContent && (React.createElement("div", { className: b('content-wrapper') },
47
+ React.createElement(Content, Object.assign({ theme: "default" }, textContent, { centered: direction === FormBlockDirection.Center, colSizes: { all: 12 }, className: b('content') }))))),
48
+ React.createElement(Col, { sizes: colSizes, className: b('form-col') },
49
+ React.createElement("div", { className: b('form-wrapper') },
50
+ React.createElement("div", { className: b('full-form', {
51
+ hidden: !contentLoaded,
52
+ }) },
53
+ title && (React.createElement(Title, { title: {
54
+ text: title,
55
+ textSize: 's',
56
+ }, className: b('title', { mobile: isMobile }), colSizes: { all: 12 } })),
57
+ React.createElement(InnerForm, { className: b('form'), formData: formData, onContentLoad: onContentLoad }))))))));
58
+ };
59
+ export default FormBlock;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import type { HubspotFormProps } from '../../models';
3
+ type Props = HubspotFormProps & {
4
+ onReady?: () => void;
5
+ };
6
+ declare const HubspotInlineForm: React.FC<Props>;
7
+ export default HubspotInlineForm;
@@ -0,0 +1,12 @@
1
+ import { __rest } from "tslib";
2
+ import React from 'react';
3
+ import useMount from '../../hooks/useMount';
4
+ import { HubspotForm } from '../../sub-blocks';
5
+ const HubspotInlineForm = (props) => {
6
+ const { onReady } = props, rest = __rest(props, ["onReady"]);
7
+ useMount(() => {
8
+ onReady === null || onReady === void 0 ? void 0 : onReady();
9
+ });
10
+ return React.createElement(HubspotForm, Object.assign({}, rest, { createDOMElement: true }));
11
+ };
12
+ export default HubspotInlineForm;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { FormBlockData } from '../../../models';
3
+ interface InnerFormProps {
4
+ formData: FormBlockData;
5
+ onContentLoad: () => void;
6
+ className?: string;
7
+ }
8
+ declare const InnerForm: React.FC<InnerFormProps>;
9
+ export default InnerForm;
@@ -0,0 +1,26 @@
1
+ import { __rest } from "tslib";
2
+ import React, { useEffect } from 'react';
3
+ import { YandexForm } from '../../../components';
4
+ import { isHubspotDataForm, isYandexDataForm } from '../../../models';
5
+ import { HubspotForm } from '../../../sub-blocks';
6
+ const InnerForm = (props) => {
7
+ const { formData, onContentLoad, className } = props;
8
+ useEffect(() => {
9
+ if (isHubspotDataForm(formData)) {
10
+ onContentLoad();
11
+ }
12
+ }, [onContentLoad, formData]);
13
+ if (isYandexDataForm(formData)) {
14
+ const _a = formData.yandex, { onLoad } = _a, rest = __rest(_a, ["onLoad"]);
15
+ return (React.createElement("div", { className: className },
16
+ React.createElement(YandexForm, Object.assign({}, rest, { onLoad: () => {
17
+ onContentLoad();
18
+ onLoad === null || onLoad === void 0 ? void 0 : onLoad();
19
+ } }))));
20
+ }
21
+ if (isHubspotDataForm(formData)) {
22
+ return React.createElement(HubspotForm, Object.assign({}, formData.hubspot));
23
+ }
24
+ return null;
25
+ };
26
+ export default InnerForm;