@gravity-ui/page-constructor 1.18.0 → 1.19.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 (139) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +8 -0
  3. package/build/cjs/blocks/Map/Map.d.ts +3 -0
  4. package/build/cjs/blocks/Map/Map.js +15 -0
  5. package/build/cjs/blocks/Map/schema.d.ts +370 -0
  6. package/build/cjs/blocks/Map/schema.js +18 -0
  7. package/build/cjs/blocks/Media/Media.js +5 -27
  8. package/build/cjs/blocks/Media/schema.d.ts +265 -9
  9. package/build/cjs/blocks/Media/schema.js +18 -17
  10. package/build/cjs/blocks/index.d.ts +1 -0
  11. package/build/cjs/blocks/index.js +3 -1
  12. package/build/cjs/components/Map/GoogleMap.d.ts +4 -0
  13. package/build/cjs/components/Map/GoogleMap.js +42 -0
  14. package/build/cjs/components/Map/Map.css +20 -0
  15. package/build/cjs/components/Map/Map.d.ts +3 -0
  16. package/build/cjs/components/Map/Map.js +21 -0
  17. package/build/cjs/components/Map/YMap/YMap.d.ts +13 -0
  18. package/build/cjs/components/Map/YMap/YMap.js +97 -0
  19. package/build/cjs/components/Map/YMap/YandexMap.d.ts +4 -0
  20. package/build/cjs/components/Map/YMap/YandexMap.js +72 -0
  21. package/build/cjs/components/Map/YMap/YandexMapApiLoader.d.ts +11 -0
  22. package/build/cjs/components/Map/YMap/YandexMapApiLoader.js +37 -0
  23. package/build/cjs/components/Map/YMap/i18n/en.json +4 -0
  24. package/build/cjs/components/Map/YMap/i18n/index.d.ts +2 -0
  25. package/build/cjs/components/Map/YMap/i18n/index.js +8 -0
  26. package/build/cjs/components/Map/YMap/i18n/ru.json +4 -0
  27. package/build/cjs/components/Map/helpers.d.ts +1 -0
  28. package/build/cjs/components/Map/helpers.js +7 -0
  29. package/build/cjs/{blocks/Media/Media.css → components/MediaBase/MediaBase.css} +15 -14
  30. package/build/cjs/components/MediaBase/MediaBase.d.ts +13 -0
  31. package/build/cjs/components/MediaBase/MediaBase.js +39 -0
  32. package/build/cjs/{blocks/Media/MediaContent.css → components/MediaBase/MediaBaseContent.css} +2 -2
  33. package/build/cjs/{blocks/Media/MediaContent.js → components/MediaBase/MediaBaseContent.js} +1 -1
  34. package/build/cjs/constructor-items.d.ts +1 -0
  35. package/build/cjs/constructor-items.js +1 -0
  36. package/build/cjs/containers/PageConstructor/Provider.d.ts +2 -0
  37. package/build/cjs/containers/PageConstructor/Provider.js +3 -1
  38. package/build/cjs/context/mapsContext/mapsContext.d.ts +22 -0
  39. package/build/cjs/context/mapsContext/mapsContext.js +20 -0
  40. package/build/cjs/context/mapsContext/mapsProvider.d.ts +10 -0
  41. package/build/cjs/context/mapsContext/mapsProvider.js +15 -0
  42. package/build/cjs/context/mapsContext/useMap.d.ts +2 -0
  43. package/build/cjs/context/mapsContext/useMap.js +11 -0
  44. package/build/cjs/internal-typings/global.d.ts +36 -0
  45. package/build/cjs/models/constructor-items/blocks.d.ts +18 -9
  46. package/build/cjs/models/constructor-items/blocks.js +1 -0
  47. package/build/cjs/models/constructor-items/common.d.ts +25 -0
  48. package/build/cjs/navigation/components/NavigationItem/NavigationItem.js +1 -3
  49. package/build/cjs/navigation/components/NavigationItem/components/GithubStars/GithubStars.css +4 -0
  50. package/build/cjs/navigation/components/NavigationItem/components/NavigationDropdown/NavigationDropdown.css +6 -0
  51. package/build/cjs/navigation/components/NavigationItem/components/NavigationDropdown/NavigationDropdown.js +3 -3
  52. package/build/cjs/navigation/components/NavigationItem/components/NavigationLink/NavigationLink.css +4 -0
  53. package/build/cjs/navigation/components/NavigationItem/mixins.css +0 -0
  54. package/build/cjs/schema/index.js +1 -1
  55. package/build/cjs/schema/validators/blocks.d.ts +1 -0
  56. package/build/cjs/schema/validators/blocks.js +1 -0
  57. package/build/cjs/schema/validators/common.d.ts +91 -0
  58. package/build/cjs/schema/validators/common.js +46 -1
  59. package/build/cjs/utils/blocks.d.ts +1 -1
  60. package/build/cjs/utils/common.d.ts +6 -0
  61. package/build/cjs/utils/common.js +24 -0
  62. package/build/cjs/utils/index.d.ts +1 -0
  63. package/build/cjs/utils/index.js +1 -0
  64. package/build/esm/blocks/Map/Map.d.ts +3 -0
  65. package/build/esm/blocks/Map/Map.js +11 -0
  66. package/build/esm/blocks/Map/schema.d.ts +370 -0
  67. package/build/esm/blocks/Map/schema.js +15 -0
  68. package/build/esm/blocks/Media/Media.d.ts +0 -1
  69. package/build/esm/blocks/Media/Media.js +7 -31
  70. package/build/esm/blocks/Media/schema.d.ts +265 -9
  71. package/build/esm/blocks/Media/schema.js +17 -16
  72. package/build/esm/blocks/index.d.ts +1 -0
  73. package/build/esm/blocks/index.js +1 -0
  74. package/build/esm/components/Map/GoogleMap.d.ts +4 -0
  75. package/build/esm/components/Map/GoogleMap.js +39 -0
  76. package/build/esm/components/Map/Map.css +20 -0
  77. package/build/esm/components/Map/Map.d.ts +4 -0
  78. package/build/esm/components/Map/Map.js +17 -0
  79. package/build/esm/components/Map/YMap/YMap.d.ts +13 -0
  80. package/build/esm/components/Map/YMap/YMap.js +93 -0
  81. package/build/esm/components/Map/YMap/YandexMap.d.ts +4 -0
  82. package/build/esm/components/Map/YMap/YandexMap.js +69 -0
  83. package/build/esm/components/Map/YMap/YandexMapApiLoader.d.ts +11 -0
  84. package/build/esm/components/Map/YMap/YandexMapApiLoader.js +33 -0
  85. package/build/esm/components/Map/YMap/i18n/en.json +4 -0
  86. package/build/esm/components/Map/YMap/i18n/index.d.ts +2 -0
  87. package/build/esm/components/Map/YMap/i18n/index.js +5 -0
  88. package/build/esm/components/Map/YMap/i18n/ru.json +4 -0
  89. package/build/esm/components/Map/helpers.d.ts +1 -0
  90. package/build/esm/components/Map/helpers.js +3 -0
  91. package/build/esm/{blocks/Media/Media.css → components/MediaBase/MediaBase.css} +15 -14
  92. package/build/esm/components/MediaBase/MediaBase.d.ts +14 -0
  93. package/build/esm/components/MediaBase/MediaBase.js +36 -0
  94. package/build/esm/{blocks/Media/MediaContent.css → components/MediaBase/MediaBaseContent.css} +2 -2
  95. package/build/esm/{blocks/Media/MediaContent.d.ts → components/MediaBase/MediaBaseContent.d.ts} +1 -1
  96. package/build/esm/{blocks/Media/MediaContent.js → components/MediaBase/MediaBaseContent.js} +2 -2
  97. package/build/esm/constructor-items.d.ts +1 -0
  98. package/build/esm/constructor-items.js +2 -1
  99. package/build/esm/containers/PageConstructor/Provider.d.ts +2 -0
  100. package/build/esm/containers/PageConstructor/Provider.js +3 -1
  101. package/build/esm/context/mapsContext/mapsContext.d.ts +22 -0
  102. package/build/esm/context/mapsContext/mapsContext.js +16 -0
  103. package/build/esm/context/mapsContext/mapsProvider.d.ts +10 -0
  104. package/build/esm/context/mapsContext/mapsProvider.js +10 -0
  105. package/build/esm/context/mapsContext/useMap.d.ts +2 -0
  106. package/build/esm/context/mapsContext/useMap.js +6 -0
  107. package/build/esm/internal-typings/global.d.ts +36 -0
  108. package/build/esm/models/constructor-items/blocks.d.ts +18 -9
  109. package/build/esm/models/constructor-items/blocks.js +1 -0
  110. package/build/esm/models/constructor-items/common.d.ts +25 -0
  111. package/build/esm/navigation/components/NavigationItem/NavigationItem.d.ts +0 -1
  112. package/build/esm/navigation/components/NavigationItem/NavigationItem.js +1 -4
  113. package/build/esm/navigation/components/NavigationItem/components/GithubStars/GithubStars.css +4 -0
  114. package/build/esm/navigation/components/NavigationItem/components/NavigationDropdown/NavigationDropdown.css +6 -0
  115. package/build/esm/navigation/components/NavigationItem/components/NavigationDropdown/NavigationDropdown.js +3 -3
  116. package/build/esm/navigation/components/NavigationItem/components/NavigationLink/NavigationLink.css +4 -0
  117. package/build/esm/navigation/components/NavigationItem/mixins.css +0 -0
  118. package/build/esm/schema/index.js +2 -2
  119. package/build/esm/schema/validators/blocks.d.ts +1 -0
  120. package/build/esm/schema/validators/blocks.js +1 -0
  121. package/build/esm/schema/validators/common.d.ts +91 -0
  122. package/build/esm/schema/validators/common.js +45 -0
  123. package/build/esm/utils/blocks.d.ts +1 -1
  124. package/build/esm/utils/common.d.ts +6 -0
  125. package/build/esm/utils/common.js +20 -0
  126. package/build/esm/utils/index.d.ts +1 -0
  127. package/build/esm/utils/index.js +1 -0
  128. package/package.json +1 -1
  129. package/server/models/constructor-items/blocks.d.ts +18 -9
  130. package/server/models/constructor-items/blocks.js +1 -0
  131. package/server/models/constructor-items/common.d.ts +25 -0
  132. package/server/utils/blocks.d.ts +1 -1
  133. package/server/utils/common.d.ts +6 -0
  134. package/server/utils/common.js +24 -0
  135. package/server/utils/index.d.ts +1 -0
  136. package/server/utils/index.js +1 -0
  137. package/build/cjs/navigation/components/NavigationItem/NavigationItem.css +0 -6
  138. package/build/esm/navigation/components/NavigationItem/NavigationItem.css +0 -6
  139. /package/build/cjs/{blocks/Media/MediaContent.d.ts → components/MediaBase/MediaBaseContent.d.ts} +0 -0
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.YMapsApiLoader = exports.MapApiStatus = void 0;
4
+ const utils_1 = require("../../../utils");
5
+ const mapsContext_1 = require("../../../context/mapsContext/mapsContext");
6
+ var MapApiStatus;
7
+ (function (MapApiStatus) {
8
+ MapApiStatus["NotStarted"] = "not_started";
9
+ MapApiStatus["Loading"] = "loading";
10
+ MapApiStatus["Loaded"] = "loaded";
11
+ MapApiStatus["Error"] = "error";
12
+ })(MapApiStatus = exports.MapApiStatus || (exports.MapApiStatus = {}));
13
+ const SCRIPT_ID = 'ymaps-script';
14
+ class YMapsApiLoader {
15
+ static async loadApi(apiKey, scriptSrc, lang, nonce) {
16
+ if (YMapsApiLoader.status === MapApiStatus.Loaded) {
17
+ return Promise.resolve();
18
+ }
19
+ if (YMapsApiLoader.status === MapApiStatus.Loading) {
20
+ await YMapsApiLoader.loader;
21
+ return Promise.resolve();
22
+ }
23
+ YMapsApiLoader.status = MapApiStatus.Loading;
24
+ const csp = nonce ? `csp[style_nonce]=${nonce}` : 'csp=true';
25
+ const src = `${scriptSrc}?apikey=${apiKey}&lang=${mapsContext_1.Maplangs[lang]}&${csp}`;
26
+ YMapsApiLoader.loader = (0, utils_1.loadScript)(src, { id: SCRIPT_ID })
27
+ .then(() => {
28
+ YMapsApiLoader.status = MapApiStatus.Loaded;
29
+ })
30
+ .catch(() => {
31
+ YMapsApiLoader.status = MapApiStatus.Error;
32
+ });
33
+ return this.loader;
34
+ }
35
+ }
36
+ exports.YMapsApiLoader = YMapsApiLoader;
37
+ YMapsApiLoader.status = MapApiStatus.NotStarted;
@@ -0,0 +1,4 @@
1
+ {
2
+ "map-load-error": "Error occured while loading the map",
3
+ "map-try-again": "Try again"
4
+ }
@@ -0,0 +1,2 @@
1
+ declare const _default: (key: string, params?: import("@gravity-ui/i18n").Params | undefined) => string;
2
+ export default _default;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const registerKeyset_1 = require("../../../../utils/registerKeyset");
5
+ const en_json_1 = tslib_1.__importDefault(require("./en.json"));
6
+ const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
7
+ const COMPONENT = 'Map';
8
+ exports.default = (0, registerKeyset_1.registerKeyset)({ en: en_json_1.default, ru: ru_json_1.default }, COMPONENT);
@@ -0,0 +1,4 @@
1
+ {
2
+ "map-load-error": "При загрузке карты произошла ошибка",
3
+ "map-try-again": "Повторить"
4
+ }
@@ -0,0 +1 @@
1
+ export declare function getMapHeight(width: number, isMobile: boolean): number;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMapHeight = void 0;
4
+ function getMapHeight(width, isMobile) {
5
+ return isMobile ? (width / 4) * 3 : (width / 16) * 9;
6
+ }
7
+ exports.getMapHeight = getMapHeight;
@@ -1,50 +1,51 @@
1
1
  /* use this for style redefinitions to awoid problems with
2
2
  unpredictable css rules order in build */
3
- .pc-media-block__card img {
3
+ .pc-media-base__card img {
4
4
  width: 100%;
5
5
  }
6
- .pc-media-block__card img,
7
- .pc-media-block__card video,
8
- .pc-media-block__card iframe {
6
+ .pc-media-base__card img,
7
+ .pc-media-base__card video,
8
+ .pc-media-base__card iframe,
9
+ .pc-media-base__card .pc-map {
9
10
  border-radius: var(--pc-border-radius);
10
11
  }
11
- .pc-media-block__card_shadow {
12
+ .pc-media-base__card_shadow {
12
13
  box-shadow: 0 2px 8px var(--pc-color-sfx-shadow), 0 4px 24px var(--pc-color-sfx-shadow);
13
14
  overflow-x: hidden;
14
15
  border-radius: var(--pc-border-radius);
15
16
  }
16
- .pc-media-block__row_reverse {
17
+ .pc-media-base__row_reverse {
17
18
  flex-direction: row-reverse;
18
19
  }
19
- .pc-media-block__row_reverse .pc-media-block__content > * {
20
+ .pc-media-base__row_reverse .pc-media-base__content > * {
20
21
  margin-right: 0;
21
22
  margin-left: 64px;
22
23
  }
23
- .pc-media-block__header {
24
+ .pc-media-base__header {
24
25
  margin-bottom: 24px;
25
26
  }
26
27
  @media (max-width: 769px) {
27
- .pc-media-block__row_reverse {
28
+ .pc-media-base__row_reverse {
28
29
  flex-direction: row;
29
30
  }
30
- .pc-media-block__row_reverse .pc-media-block__content > * {
31
+ .pc-media-base__row_reverse .pc-media-base__content > * {
31
32
  margin-left: 0;
32
33
  }
33
- .pc-media-block__row_mobile-reverse {
34
+ .pc-media-base__row_mobile-reverse {
34
35
  flex-direction: column-reverse;
35
36
  }
36
- .pc-media-block__row_mobile-reverse .pc-media-block__content > * {
37
+ .pc-media-base__row_mobile-reverse .pc-media-base__content > * {
37
38
  margin-top: 32px;
38
39
  padding-bottom: 0;
39
40
  }
40
41
  }
41
42
  @media (min-width: 769px) {
42
- .pc-media-block.pc-AnimateBlock .pc-media-block__card, .pc-AnimateBlock .pc-media-block .pc-media-block__card {
43
+ .pc-media-base.pc-AnimateBlock .pc-media-base__card, .pc-AnimateBlock .pc-media-base .pc-media-base__card {
43
44
  position: relative;
44
45
  top: 100px;
45
46
  opacity: 0;
46
47
  }
47
- .pc-media-block.pc-AnimateBlock.animate .pc-media-block__card, .pc-AnimateBlock .pc-media-block.animate .pc-media-block__card {
48
+ .pc-media-base.pc-AnimateBlock.animate .pc-media-base__card, .pc-AnimateBlock .pc-media-base.animate .pc-media-base__card {
48
49
  top: 0;
49
50
  opacity: 1;
50
51
  transition: top 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94), opacity 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
@@ -0,0 +1,13 @@
1
+ import React, { ReactElement } from 'react';
2
+ import { MediaBaseBlockProps } from '../../models';
3
+ interface MediaBaseProps extends MediaBaseBlockProps {
4
+ children: ReactElement;
5
+ onScroll?: () => void;
6
+ }
7
+ export declare const MediaBase: {
8
+ (props: MediaBaseProps): JSX.Element;
9
+ Card: React.FC<{
10
+ children?: React.ReactNode;
11
+ }>;
12
+ };
13
+ export default MediaBase;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MediaBase = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importStar(require("react"));
6
+ const utils_1 = require("../../utils");
7
+ const grid_1 = require("../../grid");
8
+ const AnimateBlock_1 = tslib_1.__importDefault(require("../../components/AnimateBlock/AnimateBlock"));
9
+ const BlockHeader_1 = tslib_1.__importDefault(require("../../components/BlockHeader/BlockHeader"));
10
+ const MediaBaseContent_1 = tslib_1.__importDefault(require("./MediaBaseContent"));
11
+ const b = (0, utils_1.block)('media-base');
12
+ const Card = () => null;
13
+ const MediaBase = (props) => {
14
+ const { children, largeMedia, direction = 'content-media', mobileDirection = 'content-media', animated, mediaOnly, disableShadow = false, onScroll } = props, mediaContentProps = tslib_1.__rest(props, ["children", "largeMedia", "direction", "mobileDirection", "animated", "mediaOnly", "disableShadow", "onScroll"]);
15
+ const { title, description } = mediaContentProps;
16
+ const mediaSizes = (0, react_1.useMemo)(() => {
17
+ return mediaOnly
18
+ ? { [grid_1.GridColumnSize.All]: 12 }
19
+ : { [grid_1.GridColumnSize.Md]: largeMedia ? 8 : 6, [grid_1.GridColumnSize.All]: 12 };
20
+ }, [mediaOnly, largeMedia]);
21
+ const contentSizes = (0, react_1.useMemo)(() => {
22
+ return { [grid_1.GridColumnSize.Md]: largeMedia ? 4 : 6, [grid_1.GridColumnSize.All]: 12 };
23
+ }, [largeMedia]);
24
+ const mediaContent = !mediaOnly && react_1.default.createElement(MediaBaseContent_1.default, Object.assign({}, mediaContentProps));
25
+ const card = children.type === Card ? children === null || children === void 0 ? void 0 : children.props.children : null;
26
+ return (react_1.default.createElement(AnimateBlock_1.default, { className: b(), onScroll: onScroll, animate: animated },
27
+ mediaOnly && (react_1.default.createElement(BlockHeader_1.default, { className: b('header'), title: title, description: description })),
28
+ react_1.default.createElement(grid_1.Grid, null,
29
+ react_1.default.createElement(grid_1.Row, { className: b('row', {
30
+ reverse: direction === 'media-content',
31
+ 'mobile-reverse': mobileDirection === 'media-content',
32
+ }) },
33
+ react_1.default.createElement(grid_1.Col, { className: b('content'), sizes: contentSizes }, mediaContent),
34
+ card ? (react_1.default.createElement(grid_1.Col, { sizes: mediaSizes },
35
+ react_1.default.createElement("div", { className: b('card', { shadow: !disableShadow }) }, card))) : null))));
36
+ };
37
+ exports.MediaBase = MediaBase;
38
+ exports.MediaBase.Card = Card;
39
+ exports.default = exports.MediaBase;
@@ -1,11 +1,11 @@
1
- .pc-media-content {
1
+ .pc-media-base-content {
2
2
  margin-right: 64px;
3
3
  height: 100%;
4
4
  align-items: center;
5
5
  display: flex;
6
6
  }
7
7
  @media (max-width: 769px) {
8
- .pc-media-content {
8
+ .pc-media-base-content {
9
9
  margin-right: 0;
10
10
  padding-bottom: 32px;
11
11
  }
@@ -4,7 +4,7 @@ const tslib_1 = require("tslib");
4
4
  const react_1 = tslib_1.__importDefault(require("react"));
5
5
  const utils_1 = require("../../utils");
6
6
  const sub_blocks_1 = require("../../sub-blocks");
7
- const b = (0, utils_1.block)('media-content');
7
+ const b = (0, utils_1.block)('media-base-content');
8
8
  const MediaContent = (props) => {
9
9
  const { title, description, button, links, buttons = [], additionalInfo, size = 'l' } = props;
10
10
  const allButtons = button ? [Object.assign(Object.assign({}, button), { size: 'xl' }), ...buttons] : buttons;
@@ -19,6 +19,7 @@ export declare const blockMap: {
19
19
  "card-layout-block": ({ title, description, animated, colSizes, children, }: import("./blocks/CardLayout/CardLayout").CardLayoutBlockProps) => JSX.Element;
20
20
  "content-layout-block": (props: import("./models").ContentLayoutBlockProps) => JSX.Element;
21
21
  "share-block": ({ items, title }: import("./models").ShareBlockProps) => JSX.Element;
22
+ "map-block": ({ map, ...props }: import("./models").MapBlockProps) => JSX.Element;
22
23
  };
23
24
  export declare const subBlockMap: {
24
25
  divider: ({ size, border }: import("./models").DividerProps) => JSX.Element;
@@ -25,6 +25,7 @@ exports.blockMap = {
25
25
  [models_1.BlockType.CardLayoutBlock]: blocks_1.CardLayoutBlock,
26
26
  [models_1.BlockType.ContentLayoutBlock]: blocks_1.ContentLayoutBlock,
27
27
  [models_1.BlockType.ShareBlock]: blocks_1.ShareBlock,
28
+ [models_1.BlockType.MapBlock]: blocks_1.MapBlock,
28
29
  };
29
30
  exports.subBlockMap = {
30
31
  [models_1.SubBlockType.Divider]: sub_blocks_1.Divider,
@@ -1,4 +1,5 @@
1
1
  import { MetrikaContextProps } from '../../context/metrikaContext';
2
+ import { MapsContextType } from '../../context/mapsContext/mapsContext';
2
3
  import { ProjectSettingsContextProps } from '../../context/projectSettingsContext';
3
4
  import { SSRContextProps } from '../../context/ssrContext';
4
5
  import { LocaleContextProps } from '../../context/localeContext';
@@ -12,6 +13,7 @@ export interface PageConstructorProviderProps {
12
13
  metrika?: MetrikaContextProps;
13
14
  ssrConfig?: SSRContextProps;
14
15
  theme?: ConstructorTheme;
16
+ mapsContext?: MapsContextType;
15
17
  projectSettings?: ProjectSettingsContextProps;
16
18
  }
17
19
  export declare const PageConstructorProvider: (props: WithChildren<PageConstructorProviderProps>) => JSX.Element;
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importStar(require("react"));
6
6
  const metrikaContext_1 = require("../../context/metrikaContext");
7
7
  const mobileContext_1 = require("../../context/mobileContext");
8
+ const mapsContext_1 = require("../../context/mapsContext/mapsContext");
8
9
  const projectSettingsContext_1 = require("../../context/projectSettingsContext");
9
10
  const ssrContext_1 = require("../../context/ssrContext");
10
11
  const localeContext_1 = require("../../context/localeContext");
@@ -12,7 +13,7 @@ const locationContext_1 = require("../../context/locationContext");
12
13
  const ThemeValueContext_1 = require("../../context/theme/ThemeValueContext");
13
14
  const constants_1 = require("../../components/constants");
14
15
  const PageConstructorProvider = (props) => {
15
- const { isMobile, locale = {}, location = {}, metrika = {}, ssrConfig = {}, projectSettings = {}, theme = constants_1.DEFAULT_THEME, children, } = props;
16
+ const { isMobile, mapsContext = mapsContext_1.initialMapValue, locale = {}, location = {}, metrika = {}, ssrConfig = {}, projectSettings = {}, theme = constants_1.DEFAULT_THEME, children, } = props;
16
17
  /* eslint-disable react/jsx-key */
17
18
  const context = [
18
19
  react_1.default.createElement(ThemeValueContext_1.ThemeValueContext.Provider, { value: { themeValue: theme } }),
@@ -20,6 +21,7 @@ const PageConstructorProvider = (props) => {
20
21
  react_1.default.createElement(localeContext_1.LocaleContext.Provider, { value: locale }),
21
22
  react_1.default.createElement(locationContext_1.LocationContext.Provider, { value: location }),
22
23
  react_1.default.createElement(mobileContext_1.MobileContext.Provider, { value: Boolean(isMobile) }),
24
+ react_1.default.createElement(mapsContext_1.MapsContext.Provider, { value: mapsContext }),
23
25
  react_1.default.createElement(metrikaContext_1.MetrikaContext.Provider, { value: metrika }),
24
26
  react_1.default.createElement(ssrContext_1.SSRContext.Provider, { value: { isServer: ssrConfig === null || ssrConfig === void 0 ? void 0 : ssrConfig.isServer } }),
25
27
  ].reduceRight((prev, provider) => react_1.default.cloneElement(provider, {}, prev), children);
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ export declare enum MapType {
3
+ Yandex = "yandex",
4
+ Google = "google"
5
+ }
6
+ export declare const Maplangs: {
7
+ ru: string;
8
+ en: string;
9
+ };
10
+ export interface MapsContextType {
11
+ apiKey: string;
12
+ type: MapType;
13
+ scriptSrc: string;
14
+ nonce?: string;
15
+ setKey?: (newKey: string) => void;
16
+ }
17
+ export declare const initialMapValue: {
18
+ apiKey: string;
19
+ scriptSrc: string;
20
+ type: MapType;
21
+ };
22
+ export declare const MapsContext: React.Context<MapsContextType>;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MapsContext = exports.initialMapValue = exports.Maplangs = exports.MapType = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
6
+ var MapType;
7
+ (function (MapType) {
8
+ MapType["Yandex"] = "yandex";
9
+ MapType["Google"] = "google";
10
+ })(MapType = exports.MapType || (exports.MapType = {}));
11
+ exports.Maplangs = {
12
+ ru: 'ru_RU',
13
+ en: 'en_US',
14
+ };
15
+ exports.initialMapValue = {
16
+ apiKey: '',
17
+ scriptSrc: '',
18
+ type: MapType.Yandex,
19
+ };
20
+ exports.MapsContext = react_1.default.createContext(exports.initialMapValue);
@@ -0,0 +1,10 @@
1
+ import React, { PropsWithChildren } from 'react';
2
+ import { MapType } from './mapsContext';
3
+ interface MapProviderProps {
4
+ type: MapType;
5
+ scriptSrc: string;
6
+ apiKey?: string;
7
+ }
8
+ export declare const gmapApiKeyIdInLS = "gmap-api-key";
9
+ export declare const MapProvider: React.FC<PropsWithChildren<MapProviderProps>>;
10
+ export {};
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MapProvider = exports.gmapApiKeyIdInLS = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importStar(require("react"));
6
+ const mapsContext_1 = require("./mapsContext");
7
+ exports.gmapApiKeyIdInLS = 'gmap-api-key';
8
+ const MapProvider = ({ type = mapsContext_1.MapType.Yandex, scriptSrc, apiKey, children, }) => {
9
+ const initialKeyValue = type === mapsContext_1.MapType.Google
10
+ ? apiKey || localStorage.getItem(exports.gmapApiKeyIdInLS) || ''
11
+ : apiKey || '';
12
+ const [currentApiKey, setKey] = (0, react_1.useState)(initialKeyValue);
13
+ return (react_1.default.createElement(mapsContext_1.MapsContext.Provider, { value: { apiKey: currentApiKey, setKey, scriptSrc, type } }, children));
14
+ };
15
+ exports.MapProvider = MapProvider;
@@ -0,0 +1,2 @@
1
+ import { MapsContextType } from './mapsContext';
2
+ export declare function useMapApiKey(): [MapsContextType['apiKey'], MapsContextType['setKey']];
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useMapApiKey = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
6
+ const mapsContext_1 = require("./mapsContext");
7
+ function useMapApiKey() {
8
+ const { apiKey, setKey } = react_1.default.useContext(mapsContext_1.MapsContext);
9
+ return [apiKey, setKey];
10
+ }
11
+ exports.useMapApiKey = useMapApiKey;
@@ -25,6 +25,42 @@ interface Window {
25
25
  create: (args: CreateFormProps) => unknown;
26
26
  };
27
27
  };
28
+ ymaps: Ymaps;
29
+ }
30
+
31
+ declare namespace Ymaps {
32
+ export function ready(): Promise;
33
+
34
+ class Promise {
35
+ then(onFulfilled?: Function, onRejected?: Function, onProgress?: Function): Promise;
36
+ }
37
+
38
+ export class Map {
39
+ setCenter: (center: number[]) => void;
40
+ setZoom: (zoom: number) => void;
41
+ geoObjects: {
42
+ add: (object) => void;
43
+ removeAll: () => void;
44
+ get: () => void;
45
+ };
46
+ constructor(element: string, state: MapState);
47
+ destroy(): Promise;
48
+ }
49
+
50
+ export class GeoObject {
51
+ properties: {
52
+ set: (objectName: string, value: string) => void;
53
+ };
54
+ options: {
55
+ set: (objectName: string, value: string) => void;
56
+ };
57
+ }
58
+
59
+ export class MapState {
60
+ center: number[];
61
+ controls: string[];
62
+ zoom: number;
63
+ }
28
64
  }
29
65
 
30
66
  declare module '*.md';
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { BackgroundImageProps, ButtonProps, ContentSize, ContentTextSize, ContentTheme, FileLinkProps, HeaderBreadCrumbsProps, HeaderImageSize, HeaderOffset, HeaderWidth, Justify, LinkProps, LinkTheme, MediaDirection, MediaProps, PreviewItemProps, PreviewRatioMediaContent, TextSize, TextTheme, ThemedImage, ThemedMediaProps, ThemedMediaVideoProps, TitleProps, LegendTableMarkerType, AnchorProps, TitleBaseProps, Animatable, BlockHeaderProps, ImageDeviceProps } from './common';
2
+ import { BackgroundImageProps, ButtonProps, ContentSize, ContentTextSize, ContentTheme, FileLinkProps, HeaderBreadCrumbsProps, HeaderImageSize, HeaderOffset, HeaderWidth, Justify, LinkProps, LinkTheme, MediaDirection, MediaProps, MapProps, PreviewItemProps, PreviewRatioMediaContent, TextSize, TextTheme, ThemedImage, ThemedMediaProps, ThemedMediaVideoProps, TitleProps, LegendTableMarkerType, AnchorProps, TitleBaseProps, Animatable, BlockHeaderProps, ImageDeviceProps } from './common';
3
3
  import { ThemeSupporting } from '../../utils';
4
4
  import { GridColumnSize, GridColumnSizesType } from '../../grid/types';
5
5
  import { BannerCardProps, SubBlock } from './sub-blocks';
@@ -25,7 +25,8 @@ export declare enum BlockType {
25
25
  IconsBlock = "icons-block",
26
26
  CardLayoutBlock = "card-layout-block",
27
27
  ContentLayoutBlock = "content-layout-block",
28
- ShareBlock = "share-block"
28
+ ShareBlock = "share-block",
29
+ MapBlock = "map-block"
29
30
  }
30
31
  export declare const BlockTypes: BlockType[];
31
32
  export declare const HeaderBlockTypes: BlockType[];
@@ -155,6 +156,13 @@ export interface CompaniesBlockProps extends Animatable {
155
156
  title: string;
156
157
  images: ThemeSupporting<ImageDeviceProps>;
157
158
  }
159
+ export interface MediaBaseBlockProps extends Animatable, MediaContentProps {
160
+ direction?: MediaDirection;
161
+ mobileDirection?: MediaDirection;
162
+ largeMedia?: boolean;
163
+ mediaOnly?: boolean;
164
+ disableShadow?: boolean;
165
+ }
158
166
  export interface MediaContentProps {
159
167
  title: string;
160
168
  description?: string;
@@ -164,13 +172,11 @@ export interface MediaContentProps {
164
172
  buttons?: ButtonProps[];
165
173
  size?: ContentSize;
166
174
  }
167
- export interface MediaBlockProps extends Animatable, MediaContentProps {
175
+ export interface MediaBlockProps extends MediaBaseBlockProps {
168
176
  media: ThemeSupporting<MediaProps>;
169
- direction?: MediaDirection;
170
- mobileDirection?: MediaDirection;
171
- largeMedia?: boolean;
172
- mediaOnly?: boolean;
173
- disableShadow?: boolean;
177
+ }
178
+ export interface MapBlockProps extends MediaBaseBlockProps {
179
+ map: MapProps;
174
180
  }
175
181
  export interface PreviewBlockProps extends Animatable {
176
182
  title: string;
@@ -317,6 +323,9 @@ export type CompaniesBlockModel = {
317
323
  export type MediaBlockModel = {
318
324
  type: BlockType.MediaBlock;
319
325
  } & MediaBlockProps;
326
+ export type MapBlockModel = {
327
+ type: BlockType.MapBlock;
328
+ } & MapBlockProps;
320
329
  export type PreviewBlockModel = {
321
330
  type: BlockType.PreviewBlock;
322
331
  } & PreviewBlockProps;
@@ -353,6 +362,6 @@ export type ContentLayoutBlockModel = {
353
362
  export type ShareBLockModel = {
354
363
  type: BlockType.ShareBlock;
355
364
  } & ShareBlockProps;
356
- type BlockModels = SliderBlockModel | ServiceDemoBlockModel | ExtendedFeaturesBlockModel | PromoFeaturesBlockModel | QuestionsBlockModel | CalculatorBlockModel | BannerBlockModel | CompaniesBlockModel | MediaBlockModel | InfoBlockModel | SecurityBlockModel | TableBlockModel | TabsBlockModel | SimpleBlockModel | LinkTableBlockModel | HeaderBlockModel | PreviewBlockModel | IconsBlockModel | HeaderSliderBlockModel | CardLayoutBlockModel | ContentLayoutBlockModel | ShareBLockModel;
365
+ type BlockModels = SliderBlockModel | ServiceDemoBlockModel | ExtendedFeaturesBlockModel | PromoFeaturesBlockModel | QuestionsBlockModel | CalculatorBlockModel | BannerBlockModel | CompaniesBlockModel | MediaBlockModel | MapBlockModel | InfoBlockModel | SecurityBlockModel | TableBlockModel | TabsBlockModel | SimpleBlockModel | LinkTableBlockModel | HeaderBlockModel | PreviewBlockModel | IconsBlockModel | HeaderSliderBlockModel | CardLayoutBlockModel | ContentLayoutBlockModel | ShareBLockModel;
357
366
  export type Block = BlockModels & BlockBaseProps;
358
367
  export {};
@@ -25,6 +25,7 @@ var BlockType;
25
25
  BlockType["CardLayoutBlock"] = "card-layout-block";
26
26
  BlockType["ContentLayoutBlock"] = "content-layout-block";
27
27
  BlockType["ShareBlock"] = "share-block";
28
+ BlockType["MapBlock"] = "map-block";
28
29
  })(BlockType = exports.BlockType || (exports.BlockType = {}));
29
30
  exports.BlockTypes = Object.values(BlockType);
30
31
  exports.HeaderBlockTypes = [BlockType.HeaderBlock, BlockType.HeaderSliderBlock];
@@ -186,6 +186,31 @@ export interface MediaComponentDataLensProps {
186
186
  export interface MediaProps extends Animatable, Partial<MediaComponentDataLensProps>, Partial<MediaComponentYoutubeProps>, Partial<MediaComponentImageProps>, Partial<MediaComponentVideoProps> {
187
187
  color?: string;
188
188
  }
189
+ export type Coordinate = number[];
190
+ export interface MapBaseProps {
191
+ zoom?: number;
192
+ center?: Coordinate;
193
+ }
194
+ export interface GMapProps extends MapBaseProps {
195
+ address: string;
196
+ }
197
+ export interface YMapProps extends MapBaseProps {
198
+ markers: YMapMarker[];
199
+ id: string;
200
+ center: Coordinate;
201
+ }
202
+ export interface YMapMarker {
203
+ address?: string;
204
+ coordinate?: Coordinate;
205
+ label?: YMapMarkerLabel;
206
+ }
207
+ export interface YMapMarkerLabel {
208
+ iconCaption?: string;
209
+ iconContent?: string;
210
+ iconColor?: string;
211
+ preset?: string;
212
+ }
213
+ export type MapProps = GMapProps | YMapProps;
189
214
  export type ThemedMediaProps = ThemeSupporting<MediaProps>;
190
215
  export interface NewMetrikaGoal {
191
216
  name: string;
@@ -2,14 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const react_1 = tslib_1.__importStar(require("react"));
5
- const utils_1 = require("../../../utils");
6
5
  const models_1 = require("../../../models");
7
6
  const SocialIcon_1 = tslib_1.__importDefault(require("../SocialIcon/SocialIcon"));
8
7
  const NavigationButton_1 = require("./components/NavigationButton/NavigationButton");
9
8
  const NavigationDropdown_1 = require("./components/NavigationDropdown/NavigationDropdown");
10
9
  const NavigationLink_1 = require("./components/NavigationLink/NavigationLink");
11
10
  const GithubStars_1 = require("./components/GithubStars/GithubStars");
12
- const b = (0, utils_1.block)('navigation-item');
13
11
  //todo: add types support form component in map
14
12
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
13
  const NavigationItemsMap = {
@@ -23,7 +21,7 @@ const NavigationItem = (_a) => {
23
21
  var { data, className } = _a, props = tslib_1.__rest(_a, ["data", "className"]);
24
22
  const { type = models_1.NavigationItemType.Link } = data;
25
23
  const Component = NavigationItemsMap[type];
26
- const componentProps = (0, react_1.useMemo)(() => (Object.assign(Object.assign({ className: b(null, className) }, data), props)), [className, data, props]);
24
+ const componentProps = (0, react_1.useMemo)(() => (Object.assign(Object.assign({ className }, data), props)), [className, data, props]);
27
25
  return react_1.default.createElement(Component, Object.assign({}, componentProps));
28
26
  };
29
27
  exports.default = NavigationItem;
@@ -1,4 +1,8 @@
1
1
  .pc-github-stars {
2
+ position: relative;
3
+ display: flex;
4
+ align-items: center;
5
+ white-space: nowrap;
2
6
  display: flex;
3
7
  align-items: center;
4
8
  height: 100%;
@@ -1,4 +1,10 @@
1
1
  .pc-navigation-dropdown {
2
+ position: relative;
3
+ display: flex;
4
+ align-items: center;
5
+ white-space: nowrap;
6
+ }
7
+ .pc-navigation-dropdown__arrow {
2
8
  margin-left: 7px;
3
9
  color: var(--yc-color-text-secondary);
4
10
  }
@@ -10,10 +10,10 @@ const utils_2 = require("../../../../../components/Media/Image/utils");
10
10
  const b = (0, utils_1.block)('navigation-dropdown');
11
11
  const TOGGLE_ARROW_SIZE = 12;
12
12
  const NavigationDropdown = (_a) => {
13
- var { text, icon, isOpened } = _a, props = tslib_1.__rest(_a, ["text", "icon", "isOpened"]);
13
+ var { text, icon, isOpened, className } = _a, props = tslib_1.__rest(_a, ["text", "icon", "isOpened", "className"]);
14
14
  const iconData = icon && (0, utils_2.getMediaImage)(icon);
15
- return (react_1.default.createElement("span", Object.assign({}, props),
15
+ return (react_1.default.createElement("span", Object.assign({}, props, { className: b(null, className) }),
16
16
  react_1.default.createElement(ContentWrapper_1.ContentWrapper, { text: text, icon: iconData }),
17
- react_1.default.createElement(components_1.ToggleArrow, { className: b(), size: TOGGLE_ARROW_SIZE, type: 'vertical', iconType: "navigation", open: isOpened })));
17
+ react_1.default.createElement(components_1.ToggleArrow, { className: b('arrow'), size: TOGGLE_ARROW_SIZE, type: 'vertical', iconType: "navigation", open: isOpened })));
18
18
  };
19
19
  exports.NavigationDropdown = NavigationDropdown;
@@ -5,6 +5,10 @@ unpredictable css rules order in build */
5
5
  color: inherit;
6
6
  text-decoration: none;
7
7
  outline: none;
8
+ position: relative;
9
+ display: flex;
10
+ align-items: center;
11
+ white-space: nowrap;
8
12
  }
9
13
  .utilityfocus .pc-navigation-link:focus {
10
14
  outline: 2px solid #ffdb4d;
@@ -14,7 +14,7 @@ const getBlocksCases = (blocks) => {
14
14
  exports.getBlocksCases = getBlocksCases;
15
15
  function generateDefaultSchema(config) {
16
16
  const { cards = {}, blocks = {}, extensions = {} } = config !== null && config !== void 0 ? config : {};
17
- const blockValidators = 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(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.InfoBlock), blocks_1.SecurityBlock), blocks_1.TableBlock), blocks_1.TabsBlock), blocks_1.SimpleBlock), blocks_1.LinkTableBlock), blocks_1.PreviewBlock), blocks_1.HeaderSliderBlock), blocks_1.IconsBlock), blocks_1.CardLayoutBlock), blocks_1.ContentLayoutBlock), blocks_1.ShareBlock);
17
+ const blockValidators = 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(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.SecurityBlock), blocks_1.TableBlock), blocks_1.TabsBlock), blocks_1.SimpleBlock), blocks_1.LinkTableBlock), blocks_1.PreviewBlock), blocks_1.HeaderSliderBlock), blocks_1.IconsBlock), blocks_1.CardLayoutBlock), blocks_1.ContentLayoutBlock), blocks_1.ShareBlock);
18
18
  const cardValidators = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, sub_blocks_1.PartnerBlock), sub_blocks_1.MediaCardBlock), blocks_1.BannerCard), sub_blocks_1.PriceDetailedBlock), sub_blocks_1.TutorialCard), sub_blocks_1.BackgroundCard), sub_blocks_1.NewsCard), sub_blocks_1.CardWithImage), sub_blocks_1.Quote), sub_blocks_1.BasicCard);
19
19
  const constructorBlockSchemaNames = [
20
20
  'divider',
@@ -6,6 +6,7 @@ export * from '../../blocks/Simple/schema';
6
6
  export * from '../../blocks/Header/schema';
7
7
  export * from '../../blocks/Info/schema';
8
8
  export * from '../../blocks/Media/schema';
9
+ export * from '../../blocks/Map/schema';
9
10
  export * from '../../blocks/Questions/schema';
10
11
  export * from '../../blocks/Security/schema';
11
12
  export * from '../../blocks/Slider/schema';
@@ -9,6 +9,7 @@ tslib_1.__exportStar(require("../../blocks/Simple/schema"), exports);
9
9
  tslib_1.__exportStar(require("../../blocks/Header/schema"), exports);
10
10
  tslib_1.__exportStar(require("../../blocks/Info/schema"), exports);
11
11
  tslib_1.__exportStar(require("../../blocks/Media/schema"), exports);
12
+ tslib_1.__exportStar(require("../../blocks/Map/schema"), exports);
12
13
  tslib_1.__exportStar(require("../../blocks/Questions/schema"), exports);
13
14
  tslib_1.__exportStar(require("../../blocks/Security/schema"), exports);
14
15
  tslib_1.__exportStar(require("../../blocks/Slider/schema"), exports);