@doyourjob/gravity-ui-page-constructor 5.31.109 → 5.31.110-background-effect-for-header-1

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 (78) hide show
  1. package/build/cjs/blocks/Header/BackgroundEffect/BackgroundEffect.css +30 -0
  2. package/build/cjs/blocks/Header/BackgroundEffect/BackgroundEffect.d.ts +6 -0
  3. package/build/cjs/blocks/Header/BackgroundEffect/BackgroundEffect.js +76 -0
  4. package/build/cjs/blocks/Header/Header.css +0 -8
  5. package/build/cjs/blocks/Header/Header.js +13 -18
  6. package/build/cjs/blocks/Header/HeaderButtons/HeaderButtons.css +9 -0
  7. package/build/cjs/blocks/Header/HeaderButtons/HeaderButtons.d.ts +6 -0
  8. package/build/cjs/blocks/Header/HeaderButtons/HeaderButtons.js +20 -0
  9. package/build/cjs/blocks/Header/HeaderDescription/HeaderDescription.d.ts +3 -0
  10. package/build/cjs/blocks/Header/HeaderDescription/HeaderDescription.js +19 -0
  11. package/build/cjs/blocks/Header/schema.d.ts +26 -0
  12. package/build/cjs/blocks/Header/schema.js +9 -0
  13. package/build/cjs/blocks/HeaderSlider/schema.d.ts +13 -0
  14. package/build/cjs/blocks/MiniCase/MiniCase.d.ts +3 -0
  15. package/build/cjs/blocks/MiniCase/MiniCase.js +16 -0
  16. package/build/cjs/blocks/MiniCase/schema.d.ts +170 -0
  17. package/build/cjs/blocks/MiniCase/schema.js +16 -0
  18. package/build/cjs/blocks/index.d.ts +1 -0
  19. package/build/cjs/blocks/index.js +3 -1
  20. package/build/cjs/components/Media/Video/utils.d.ts +1 -0
  21. package/build/cjs/components/Media/Video/utils.js +2 -1
  22. package/build/cjs/constructor-items.d.ts +1 -0
  23. package/build/cjs/constructor-items.js +1 -0
  24. package/build/cjs/context/miniCaseContext/MiniCaseContext.d.ts +4 -0
  25. package/build/cjs/context/miniCaseContext/MiniCaseContext.js +6 -0
  26. package/build/cjs/context/miniCaseContext/index.d.ts +1 -0
  27. package/build/cjs/context/miniCaseContext/index.js +4 -0
  28. package/build/cjs/index.d.ts +1 -0
  29. package/build/cjs/index.js +1 -0
  30. package/build/cjs/models/constructor-items/blocks.d.ts +15 -3
  31. package/build/cjs/models/constructor-items/blocks.js +1 -0
  32. package/build/cjs/schema/constants.d.ts +2 -2
  33. package/build/cjs/schema/constants.js +2 -1
  34. package/build/cjs/schema/validators/blocks.d.ts +1 -0
  35. package/build/cjs/schema/validators/blocks.js +1 -0
  36. package/build/cjs/text-transform/config.js +1 -0
  37. package/build/esm/blocks/Header/BackgroundEffect/BackgroundEffect.css +30 -0
  38. package/build/esm/blocks/Header/BackgroundEffect/BackgroundEffect.d.ts +7 -0
  39. package/build/esm/blocks/Header/BackgroundEffect/BackgroundEffect.js +72 -0
  40. package/build/esm/blocks/Header/Header.css +0 -8
  41. package/build/esm/blocks/Header/Header.js +15 -20
  42. package/build/esm/blocks/Header/HeaderButtons/HeaderButtons.css +9 -0
  43. package/build/esm/blocks/Header/HeaderButtons/HeaderButtons.d.ts +7 -0
  44. package/build/esm/blocks/Header/HeaderButtons/HeaderButtons.js +16 -0
  45. package/build/esm/blocks/Header/HeaderDescription/HeaderDescription.d.ts +3 -0
  46. package/build/esm/blocks/Header/HeaderDescription/HeaderDescription.js +14 -0
  47. package/build/esm/blocks/Header/schema.d.ts +26 -0
  48. package/build/esm/blocks/Header/schema.js +9 -0
  49. package/build/esm/blocks/HeaderSlider/schema.d.ts +13 -0
  50. package/build/esm/blocks/MiniCase/MiniCase.d.ts +3 -0
  51. package/build/esm/blocks/MiniCase/MiniCase.js +14 -0
  52. package/build/esm/blocks/MiniCase/schema.d.ts +170 -0
  53. package/build/esm/blocks/MiniCase/schema.js +13 -0
  54. package/build/esm/blocks/index.d.ts +1 -0
  55. package/build/esm/blocks/index.js +1 -0
  56. package/build/esm/components/Media/Video/utils.d.ts +1 -0
  57. package/build/esm/components/Media/Video/utils.js +1 -1
  58. package/build/esm/constructor-items.d.ts +1 -0
  59. package/build/esm/constructor-items.js +2 -1
  60. package/build/esm/context/miniCaseContext/MiniCaseContext.d.ts +4 -0
  61. package/build/esm/context/miniCaseContext/MiniCaseContext.js +2 -0
  62. package/build/esm/context/miniCaseContext/index.d.ts +1 -0
  63. package/build/esm/context/miniCaseContext/index.js +1 -0
  64. package/build/esm/index.d.ts +1 -0
  65. package/build/esm/index.js +1 -0
  66. package/build/esm/models/constructor-items/blocks.d.ts +15 -3
  67. package/build/esm/models/constructor-items/blocks.js +1 -0
  68. package/build/esm/schema/constants.d.ts +2 -2
  69. package/build/esm/schema/constants.js +3 -2
  70. package/build/esm/schema/validators/blocks.d.ts +1 -0
  71. package/build/esm/schema/validators/blocks.js +1 -0
  72. package/build/esm/text-transform/config.js +1 -0
  73. package/package.json +1 -1
  74. package/schema/index.js +1 -1
  75. package/server/models/constructor-items/blocks.d.ts +15 -3
  76. package/server/models/constructor-items/blocks.js +1 -0
  77. package/server/text-transform/config.js +1 -0
  78. package/widget/index.js +1 -1
@@ -0,0 +1,30 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .pc-background-effect {
4
+ position: absolute;
5
+ inset: 0;
6
+ display: flex;
7
+ }
8
+ .pc-background-effect__left {
9
+ position: absolute;
10
+ inset: 0;
11
+ clip-path: inset(0 0.01% 0 0);
12
+ transition: clip-path 1.5s ease;
13
+ }
14
+ .pc-background-effect__right {
15
+ position: absolute;
16
+ inset: 0;
17
+ clip-path: inset(0 0 0 99.99%);
18
+ transition: clip-path 1.5s ease;
19
+ }
20
+ .pc-header-block:hover .pc-background-effect__left {
21
+ clip-path: inset(0 99.99% 0 0);
22
+ }
23
+ .pc-header-block:hover .pc-background-effect__right {
24
+ clip-path: inset(0 0 0 0.01%);
25
+ }
26
+ .pc-background-effect__video {
27
+ width: 100%;
28
+ height: 100%;
29
+ object-fit: cover;
30
+ }
@@ -0,0 +1,6 @@
1
+ type BackgroundEffectProps = {
2
+ firstSrc?: string;
3
+ secondSrc?: string;
4
+ };
5
+ export declare const BackgroundEffect: ({ firstSrc, secondSrc }: BackgroundEffectProps) => JSX.Element | null;
6
+ export default BackgroundEffect;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BackgroundEffect = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importStar(require("react"));
6
+ const utils_1 = require("../../../components/Media/Video/utils");
7
+ const utils_2 = require("../../../utils");
8
+ const b = (0, utils_2.block)('background-effect');
9
+ const SYNC_THRESHOLD = 0.03;
10
+ const MAX_DESYNC = 0.5;
11
+ const FAST_RATE = 1.05;
12
+ const SLOW_RATE = 0.95;
13
+ const BackgroundEffect = ({ firstSrc, secondSrc }) => {
14
+ const master = (0, react_1.useRef)(null);
15
+ const slave = (0, react_1.useRef)(null);
16
+ (0, react_1.useEffect)(() => {
17
+ const m = master.current;
18
+ const s = slave.current;
19
+ let rafId;
20
+ if (m && s) {
21
+ const syncMaster = (_, metadata) => {
22
+ if (m.paused) {
23
+ m.play().catch(() => { });
24
+ }
25
+ const targetTime = metadata.mediaTime;
26
+ const delta = targetTime - s.currentTime;
27
+ if (s.paused) {
28
+ s.play().catch(() => { });
29
+ }
30
+ if (Math.abs(delta) > MAX_DESYNC) {
31
+ s.currentTime = targetTime;
32
+ }
33
+ else if (Math.abs(delta) > SYNC_THRESHOLD) {
34
+ s.playbackRate = delta > 0 ? FAST_RATE : SLOW_RATE;
35
+ }
36
+ else {
37
+ s.playbackRate = 1;
38
+ }
39
+ rafId = m.requestVideoFrameCallback(syncMaster);
40
+ };
41
+ rafId = m.requestVideoFrameCallback(syncMaster);
42
+ }
43
+ const handleVisibility = () => {
44
+ if (!document.hidden && m && s) {
45
+ m.play().catch(() => { });
46
+ s.play().catch(() => { });
47
+ }
48
+ };
49
+ document.addEventListener('visibilitychange', handleVisibility);
50
+ return () => {
51
+ var _a;
52
+ document.removeEventListener('visibilitychange', handleVisibility);
53
+ if (rafId && m) {
54
+ (_a = m.cancelVideoFrameCallback) === null || _a === void 0 ? void 0 : _a.call(m, rafId);
55
+ }
56
+ };
57
+ }, []);
58
+ if (!firstSrc || !secondSrc) {
59
+ return null;
60
+ }
61
+ return (react_1.default.createElement("div", { className: b() },
62
+ react_1.default.createElement("div", { className: b('left') },
63
+ react_1.default.createElement("video", { ref: master, disablePictureInPicture: true, playsInline: true,
64
+ // @ts-ignore
65
+ // eslint-disable-next-line react/no-unknown-property
66
+ pip: "false", autoPlay: true, loop: true, preload: "auto", muted: true, className: b('video') },
67
+ react_1.default.createElement("source", { src: firstSrc, type: (0, utils_1.parseVideoType)(firstSrc) }))),
68
+ react_1.default.createElement("div", { className: b('right') },
69
+ react_1.default.createElement("video", { ref: slave, disablePictureInPicture: true, playsInline: true,
70
+ // @ts-ignore
71
+ // eslint-disable-next-line react/no-unknown-property
72
+ pip: "false", autoPlay: true, loop: true, preload: "auto", muted: true, className: b('video') },
73
+ react_1.default.createElement("source", { src: secondSrc, type: (0, utils_1.parseVideoType)(secondSrc) })))));
74
+ };
75
+ exports.BackgroundEffect = BackgroundEffect;
76
+ exports.default = exports.BackgroundEffect;
@@ -105,14 +105,6 @@ unpredictable css rules order in build */
105
105
  line-height: var(--g-text-body-3-line-height, var(--pc-text-body-3-line-height));
106
106
  color: var(--g-color-text-primary);
107
107
  }
108
- .pc-header-block__buttons {
109
- margin-top: 16px;
110
- }
111
- .pc-header-block__button.pc-header-block__button {
112
- margin-top: 16px;
113
- margin-right: 16px;
114
- }
115
-
116
108
  .pc-header-block__media {
117
109
  position: absolute;
118
110
  display: none;
@@ -6,14 +6,16 @@ const react_1 = tslib_1.__importStar(require("react"));
6
6
  const uikit_1 = require("@gravity-ui/uikit");
7
7
  const components_1 = require("../../components");
8
8
  const utils_1 = require("../../components/Media/Image/utils");
9
- const YFMWrapper_1 = tslib_1.__importDefault(require("../../components/YFMWrapper/YFMWrapper"));
10
9
  const headerContext_1 = require("../../context/headerContext");
11
10
  const mobileContext_1 = require("../../context/mobileContext");
12
11
  const theme_1 = require("../../context/theme");
13
12
  const grid_1 = require("../../grid");
14
13
  const utils_2 = require("../../utils");
15
14
  const BackButton_1 = tslib_1.__importDefault(require("./BackButton/BackButton"));
15
+ const BackgroundEffect_1 = tslib_1.__importDefault(require("./BackgroundEffect/BackgroundEffect"));
16
16
  const Breadcrumbs_1 = tslib_1.__importDefault(require("./Breadcrumbs/Breadcrumbs"));
17
+ const HeaderButtons_1 = tslib_1.__importDefault(require("./HeaderButtons/HeaderButtons"));
18
+ const HeaderDescription_1 = tslib_1.__importDefault(require("./HeaderDescription/HeaderDescription"));
17
19
  const HeaderStock_1 = tslib_1.__importDefault(require("./HeaderStock/HeaderStock"));
18
20
  const HeaderTag_1 = tslib_1.__importDefault(require("./HeaderTag/HeaderTag"));
19
21
  const HeaderTags_1 = tslib_1.__importDefault(require("./HeaderTags/HeaderTags"));
@@ -29,20 +31,17 @@ const Background = ({ background, isMobile }) => {
29
31
  const FullWidthBackground = ({ background }) => (react_1.default.createElement("div", { className: b('background', { ['full-width']: true }), style: { backgroundColor: background === null || background === void 0 ? void 0 : background.color } }));
30
32
  // eslint-disable-next-line complexity
31
33
  const HeaderBlock = (props) => {
32
- const { title, switchingTitle, topTags, bottomTags, overtitle, description, buttons, stock, stockPrice, stockShares, image, video, width = 's', imageSize, offset = 'default', background, theme: textTheme = 'light', verticalOffset = 'm', className, breadcrumbs, status, renderTitle, children, mediaView = 'full', } = props;
34
+ const { title, switchingTitle, topTags, bottomTags, overtitle, description, buttons, stock, stockPrice, stockShares, image, video, width = 's', imageSize, offset = 'default', background, theme: textTheme = 'light', verticalOffset = 'm', className, breadcrumbs, status, renderTitle, children, mediaView = 'full', backgroundEffect = {}, } = props;
33
35
  const isMobile = (0, react_1.useContext)(mobileContext_1.MobileContext);
34
36
  const { backButton, blockTag } = (0, react_1.useContext)(headerContext_1.HeaderContext);
35
37
  const theme = (0, theme_1.useTheme)();
36
38
  const hasRightSideImage = Boolean(image || video);
37
- const curImageSize = imageSize || (0, utils_3.getImageSize)(width);
38
- const titleSizes = hasRightSideImage ? (0, utils_3.titleWithImageSizes)(curImageSize) : (0, utils_3.getTitleSizes)(width);
39
- let curVerticalOffset = verticalOffset;
40
- if (hasRightSideImage && !verticalOffset) {
41
- curVerticalOffset = 'm';
42
- }
43
- const backgroundThemed = background && (0, utils_2.getThemedValue)(background, theme);
44
- const imageThemed = image && (0, utils_2.getThemedValue)(image, theme);
45
- const videoThemed = video && (0, utils_2.getThemedValue)(video, theme);
39
+ const curImageSize = (0, react_1.useMemo)(() => imageSize || (0, utils_3.getImageSize)(width), [imageSize, width]);
40
+ const titleSizes = (0, react_1.useMemo)(() => (hasRightSideImage ? (0, utils_3.titleWithImageSizes)(curImageSize) : (0, utils_3.getTitleSizes)(width)), [curImageSize, hasRightSideImage, width]);
41
+ const curVerticalOffset = (0, react_1.useMemo)(() => verticalOffset !== null && verticalOffset !== void 0 ? verticalOffset : (hasRightSideImage ? 'm' : verticalOffset), [hasRightSideImage, verticalOffset]);
42
+ const backgroundThemed = (0, react_1.useMemo)(() => background && (0, utils_2.getThemedValue)(background, theme), [background, theme]);
43
+ const imageThemed = (0, react_1.useMemo)(() => image && (0, utils_2.getThemedValue)(image, theme), [image, theme]);
44
+ const videoThemed = (0, react_1.useMemo)(() => video && (0, utils_2.getThemedValue)(video, theme), [theme, video]);
46
45
  const fullWidth = (backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.fullWidth) || (backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.fullWidthMedia);
47
46
  const titleId = (0, uikit_1.useUniqId)();
48
47
  return (react_1.default.createElement("header", { className: b({
@@ -53,6 +52,7 @@ const HeaderBlock = (props) => {
53
52
  }, className) },
54
53
  backgroundThemed && fullWidth && react_1.default.createElement(FullWidthBackground, { background: backgroundThemed }),
55
54
  backgroundThemed && react_1.default.createElement(Background, { background: backgroundThemed, isMobile: isMobile }),
55
+ react_1.default.createElement(BackgroundEffect_1.default, Object.assign({}, backgroundEffect)),
56
56
  react_1.default.createElement(grid_1.Grid, { containerClass: b('container-fluid') },
57
57
  react_1.default.createElement(Breadcrumbs_1.default, { breadcrumbs: breadcrumbs, theme: textTheme }),
58
58
  react_1.default.createElement(BackButton_1.default, { backButton: verticalOffset !== '0' && !breadcrumbs ? backButton : undefined, theme: textTheme }),
@@ -75,13 +75,8 @@ const HeaderBlock = (props) => {
75
75
  react_1.default.createElement(HeaderTag_1.default, { tag: blockTag }),
76
76
  status,
77
77
  switchingTitle ? (react_1.default.createElement(SwitchingTtitle_1.default, Object.assign({}, switchingTitle))) : (react_1.default.createElement(react_1.default.Fragment, null, renderTitle ? (renderTitle(title)) : (react_1.default.createElement(components_1.HTML, null, title))))),
78
- description && (react_1.default.createElement("div", { className: b('description', { theme: textTheme }) },
79
- react_1.default.createElement(YFMWrapper_1.default, { content: description, modifiers: {
80
- constructor: true,
81
- constructorTheme: textTheme,
82
- } }))),
83
- buttons && (react_1.default.createElement("div", { className: b('buttons'), "data-qa": "header-buttons" }, buttons.map((button, index) => (react_1.default.createElement(components_1.RouterLink, { href: button.url, key: index },
84
- react_1.default.createElement(components_1.Button, Object.assign({ key: index, className: b('button'), size: "xl", extraProps: Object.assign({ 'aria-describedby': titleId }, button.extraProps) }, button))))))),
78
+ react_1.default.createElement(HeaderDescription_1.default, { className: b('description', { theme: textTheme }), description: description, theme: textTheme }),
79
+ react_1.default.createElement(HeaderButtons_1.default, { buttons: buttons, titleId: titleId }),
85
80
  children),
86
81
  stock && (react_1.default.createElement(HeaderStock_1.default, { type: stock, stockPrice: stockPrice, stockShares: stockShares, theme: textTheme }))),
87
82
  react_1.default.createElement(HeaderTags_1.default, { theme: textTheme, tags: bottomTags, className: b('tags', { bottom: true }), sizes: titleSizes }))),
@@ -0,0 +1,9 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .pc-header-buttons {
4
+ margin-top: 16px;
5
+ }
6
+ .pc-header-buttons__button.pc-header-buttons__button {
7
+ margin-top: 16px;
8
+ margin-right: 16px;
9
+ }
@@ -0,0 +1,6 @@
1
+ import { HeaderBlockProps } from '../../../models';
2
+ type HeaderButtonsProps = Pick<HeaderBlockProps, 'buttons'> & {
3
+ titleId?: string;
4
+ };
5
+ export declare const HeaderButtons: ({ buttons, titleId }: HeaderButtonsProps) => JSX.Element | null;
6
+ export default HeaderButtons;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HeaderButtons = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importStar(require("react"));
6
+ const components_1 = require("../../../components");
7
+ const utils_1 = require("../../../utils");
8
+ const b = (0, utils_1.block)('header-buttons');
9
+ const HeaderButton = (props) => {
10
+ const extraProps = (0, react_1.useMemo)(() => (Object.assign({ 'aria-describedby': props.titleId }, props.extraProps)), [props.extraProps, props.titleId]);
11
+ return (react_1.default.createElement(components_1.RouterLink, { href: props.url },
12
+ react_1.default.createElement(components_1.Button, Object.assign({ className: b('button'), size: "xl", extraProps: extraProps }, props))));
13
+ };
14
+ const HeaderButtons = ({ buttons, titleId }) => {
15
+ if (!buttons)
16
+ return null;
17
+ return (react_1.default.createElement("div", { className: b(), "data-qa": "header-buttons" }, buttons.map((button, index) => (react_1.default.createElement(HeaderButton, Object.assign({ key: index }, button, { titleId: titleId }))))));
18
+ };
19
+ exports.HeaderButtons = HeaderButtons;
20
+ exports.default = exports.HeaderButtons;
@@ -0,0 +1,3 @@
1
+ import { ClassNameProps, HeaderBlockProps } from '../../../models';
2
+ export declare const HeaderDescription: (props: Pick<HeaderBlockProps, 'description' | 'theme'> & ClassNameProps) => JSX.Element | null;
3
+ export default HeaderDescription;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HeaderDescription = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importStar(require("react"));
6
+ const YFMWrapper_1 = tslib_1.__importDefault(require("../../../components/YFMWrapper/YFMWrapper"));
7
+ const HeaderDescription = (props) => {
8
+ const { description, theme, className } = props;
9
+ const modifiers = (0, react_1.useMemo)(() => ({
10
+ constructor: true,
11
+ constructorTheme: theme,
12
+ }), [theme]);
13
+ if (!description)
14
+ return null;
15
+ return (react_1.default.createElement("div", { className: className },
16
+ react_1.default.createElement(YFMWrapper_1.default, { content: description, modifiers: modifiers })));
17
+ };
18
+ exports.HeaderDescription = HeaderDescription;
19
+ exports.default = exports.HeaderDescription;
@@ -979,6 +979,19 @@ export declare const HeaderProperties: {
979
979
  };
980
980
  };
981
981
  };
982
+ backgroundEffect: {
983
+ type: string;
984
+ additionalProperties: boolean;
985
+ required: boolean;
986
+ properties: {
987
+ firstSrc: {
988
+ type: string;
989
+ };
990
+ secondSrc: {
991
+ type: string;
992
+ };
993
+ };
994
+ };
982
995
  };
983
996
  export declare const HeaderBlock: {
984
997
  'header-block': {
@@ -1648,6 +1661,19 @@ export declare const HeaderBlock: {
1648
1661
  };
1649
1662
  };
1650
1663
  };
1664
+ backgroundEffect: {
1665
+ type: string;
1666
+ additionalProperties: boolean;
1667
+ required: boolean;
1668
+ properties: {
1669
+ firstSrc: {
1670
+ type: string;
1671
+ };
1672
+ secondSrc: {
1673
+ type: string;
1674
+ };
1675
+ };
1676
+ };
1651
1677
  anchor: {
1652
1678
  type: string;
1653
1679
  additionalProperties: boolean;
@@ -190,6 +190,15 @@ exports.HeaderProperties = {
190
190
  },
191
191
  },
192
192
  },
193
+ backgroundEffect: {
194
+ type: 'object',
195
+ additionalProperties: false,
196
+ required: true,
197
+ properties: {
198
+ firstSrc: { type: 'string' },
199
+ secondSrc: { type: 'string' },
200
+ },
201
+ },
193
202
  };
194
203
  exports.HeaderBlock = {
195
204
  'header-block': {
@@ -673,6 +673,19 @@ export declare const HeaderSliderBlock: {
673
673
  };
674
674
  };
675
675
  };
676
+ backgroundEffect: {
677
+ type: string;
678
+ additionalProperties: boolean;
679
+ required: boolean;
680
+ properties: {
681
+ firstSrc: {
682
+ type: string;
683
+ };
684
+ secondSrc: {
685
+ type: string;
686
+ };
687
+ };
688
+ };
676
689
  };
677
690
  };
678
691
  };
@@ -0,0 +1,3 @@
1
+ import { MiniCaseBlockProps } from '../../models';
2
+ declare const MiniCaseBlock: (props: MiniCaseBlockProps) => JSX.Element;
3
+ export default MiniCaseBlock;
@@ -0,0 +1,16 @@
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 miniCaseContext_1 = require("../../context/miniCaseContext");
6
+ const sub_blocks_1 = require("../../sub-blocks");
7
+ const Slider_1 = tslib_1.__importDefault(require("../SliderNew/Slider"));
8
+ const MiniCaseBlock = (props) => {
9
+ const { items } = props, sliderProps = tslib_1.__rest(props, ["items"]);
10
+ const data = (0, react_1.useContext)(miniCaseContext_1.MiniCaseContext);
11
+ const fullItems = (0, react_1.useMemo)(() => items
12
+ .map((item) => (data || {})[item])
13
+ .filter((el) => Boolean(el)), [data, items]);
14
+ return (react_1.default.createElement(Slider_1.default, Object.assign({}, sliderProps, { slidesToShow: 1 }), fullItems.map((args, index) => (react_1.default.createElement(sub_blocks_1.CaseStudyCard, Object.assign({ key: index }, args))))));
15
+ };
16
+ exports.default = MiniCaseBlock;
@@ -0,0 +1,170 @@
1
+ export declare const MiniCaseBlock: {
2
+ 'mini-case-block': {
3
+ additionalProperties: boolean;
4
+ required: string[];
5
+ properties: {
6
+ items: {
7
+ type: string;
8
+ items: {
9
+ type: string;
10
+ };
11
+ };
12
+ title: {
13
+ oneOf: ({
14
+ type: string;
15
+ optionName: string;
16
+ } | {
17
+ optionName: string;
18
+ type: string;
19
+ additionalProperties: boolean;
20
+ required: string[];
21
+ properties: {
22
+ text: {
23
+ type: string;
24
+ contentType: string;
25
+ };
26
+ link: {
27
+ type: string;
28
+ additionalProperties: boolean;
29
+ required: string[];
30
+ properties: {
31
+ text: {
32
+ type: string;
33
+ contentType: string;
34
+ };
35
+ url: {
36
+ type: string;
37
+ };
38
+ urlTitle: {
39
+ type: string;
40
+ };
41
+ arrow: {
42
+ type: string;
43
+ };
44
+ theme: {
45
+ type: string;
46
+ enum: string[];
47
+ };
48
+ textSize: {
49
+ type: string;
50
+ enum: string[];
51
+ };
52
+ target: {
53
+ type: string;
54
+ enum: string[];
55
+ };
56
+ analyticsEvents: {
57
+ oneOf: ({
58
+ optionName: string;
59
+ type: string;
60
+ additionalProperties: {
61
+ type: string;
62
+ };
63
+ required: string[];
64
+ properties: {
65
+ name: {
66
+ type: string;
67
+ };
68
+ type: {
69
+ type: string;
70
+ };
71
+ counters: {
72
+ type: string;
73
+ additionalProperties: boolean;
74
+ required: never[];
75
+ properties: {
76
+ include: {
77
+ type: string;
78
+ items: {
79
+ type: string;
80
+ };
81
+ };
82
+ exclude: {
83
+ type: string;
84
+ items: {
85
+ type: string;
86
+ };
87
+ };
88
+ };
89
+ };
90
+ context: {
91
+ type: string;
92
+ };
93
+ };
94
+ items?: undefined;
95
+ } | {
96
+ type: string;
97
+ items: {
98
+ type: string;
99
+ additionalProperties: {
100
+ type: string;
101
+ };
102
+ required: string[];
103
+ properties: {
104
+ name: {
105
+ type: string;
106
+ };
107
+ type: {
108
+ type: string;
109
+ };
110
+ counters: {
111
+ type: string;
112
+ additionalProperties: boolean;
113
+ required: never[];
114
+ properties: {
115
+ include: {
116
+ type: string;
117
+ items: {
118
+ type: string;
119
+ };
120
+ };
121
+ exclude: {
122
+ type: string;
123
+ items: {
124
+ type: string;
125
+ };
126
+ };
127
+ };
128
+ };
129
+ context: {
130
+ type: string;
131
+ };
132
+ };
133
+ };
134
+ optionName: string;
135
+ })[];
136
+ };
137
+ type: {};
138
+ when: {
139
+ type: string;
140
+ };
141
+ };
142
+ };
143
+ textSize: {
144
+ type: string;
145
+ enum: string[];
146
+ };
147
+ url: {
148
+ type: string;
149
+ };
150
+ urlTitle: {
151
+ type: string;
152
+ };
153
+ resetMargin: {
154
+ type: string;
155
+ };
156
+ };
157
+ })[];
158
+ };
159
+ description: {
160
+ type: string;
161
+ contentType: string;
162
+ inputType: string;
163
+ };
164
+ type: {};
165
+ when: {
166
+ type: string;
167
+ };
168
+ };
169
+ };
170
+ };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MiniCaseBlock = void 0;
4
+ const common_1 = require("../../schema/validators/common");
5
+ exports.MiniCaseBlock = {
6
+ 'mini-case-block': {
7
+ additionalProperties: false,
8
+ required: ['items'],
9
+ properties: Object.assign(Object.assign(Object.assign({}, common_1.BaseProps), common_1.BlockHeaderProps), { items: {
10
+ type: 'array',
11
+ items: {
12
+ type: 'string',
13
+ },
14
+ } }),
15
+ },
16
+ };
@@ -37,3 +37,4 @@ export { default as RelevantReportsCardsBlock } from './RelevantReportsCards/Rel
37
37
  export { default as RelevantReportsBlock } from './RelevantReports/RelevantReports';
38
38
  export { default as PressReleasesBlock } from './PressReleases/PressReleases';
39
39
  export { default as HighlightTableBlock } from './HighlightTable/HighlightTable';
40
+ export { default as MiniCaseBlock } from './MiniCase/MiniCase';
@@ -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.HighlightTableBlock = exports.PressReleasesBlock = exports.RelevantReportsBlock = exports.RelevantReportsCardsBlock = exports.RelevantPostsBlock = exports.BlogFeedBlock = exports.EventsSectionBlock = exports.EventsFeedBlock = exports.LinkTableBlock = exports.FormWallBlock = exports.ReportsSectionsBlock = exports.ReportsCardsBlock = exports.ReportsBlock = exports.QuotesBlock = exports.ServicesBlock = exports.SolutionsBlock = exports.MarqueeLinksBlock = exports.FormBlock = exports.FilterBlock = exports.ShareBlock = exports.ContentLayoutBlock = exports.CardLayoutBlock = exports.HeaderSliderBlock = exports.IconsBlock = exports.HeaderBlock = exports.TabLinksBlock = exports.TabsHighlightTableBlock = exports.TabsBlock = exports.TableBlock = exports.QuestionsBlock = exports.PromoFeaturesBlock = exports.ExtendedFeaturesBlock = exports.SliderNewBlock = exports.SliderBlock = exports.MapBlock = exports.MediaBlock = exports.InfoBlock = exports.CompaniesBlock = exports.BannerBlock = void 0;
6
+ exports.MiniCaseBlock = exports.HighlightTableBlock = exports.PressReleasesBlock = exports.RelevantReportsBlock = exports.RelevantReportsCardsBlock = exports.RelevantPostsBlock = exports.BlogFeedBlock = exports.EventsSectionBlock = exports.EventsFeedBlock = exports.LinkTableBlock = exports.FormWallBlock = exports.ReportsSectionsBlock = exports.ReportsCardsBlock = exports.ReportsBlock = exports.QuotesBlock = exports.ServicesBlock = exports.SolutionsBlock = exports.MarqueeLinksBlock = exports.FormBlock = exports.FilterBlock = exports.ShareBlock = exports.ContentLayoutBlock = exports.CardLayoutBlock = exports.HeaderSliderBlock = exports.IconsBlock = exports.HeaderBlock = exports.TabLinksBlock = exports.TabsHighlightTableBlock = exports.TabsBlock = exports.TableBlock = exports.QuestionsBlock = exports.PromoFeaturesBlock = exports.ExtendedFeaturesBlock = exports.SliderNewBlock = exports.SliderBlock = exports.MapBlock = exports.MediaBlock = exports.InfoBlock = exports.CompaniesBlock = exports.BannerBlock = void 0;
7
7
  var Banner_1 = require("./Banner/Banner");
8
8
  Object.defineProperty(exports, "BannerBlock", { enumerable: true, get: function () { return __importDefault(Banner_1).default; } });
9
9
  var Companies_1 = require("./Companies/Companies");
@@ -82,3 +82,5 @@ var PressReleases_1 = require("./PressReleases/PressReleases");
82
82
  Object.defineProperty(exports, "PressReleasesBlock", { enumerable: true, get: function () { return __importDefault(PressReleases_1).default; } });
83
83
  var HighlightTable_1 = require("./HighlightTable/HighlightTable");
84
84
  Object.defineProperty(exports, "HighlightTableBlock", { enumerable: true, get: function () { return __importDefault(HighlightTable_1).default; } });
85
+ var MiniCase_1 = require("./MiniCase/MiniCase");
86
+ Object.defineProperty(exports, "MiniCaseBlock", { enumerable: true, get: function () { return __importDefault(MiniCase_1).default; } });
@@ -13,4 +13,5 @@ export interface ParsedVideo {
13
13
  src: string;
14
14
  type: VideoType | undefined;
15
15
  }
16
+ export declare function parseVideoType(src: string): VideoType | undefined;
16
17
  export declare const getVideoTypesWithPriority: (sources: string[]) => ParsedVideo[];
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getVideoTypesWithPriority = exports.VideoType = exports.VideoExt = void 0;
3
+ exports.getVideoTypesWithPriority = exports.parseVideoType = exports.VideoType = exports.VideoExt = void 0;
4
4
  var VideoExt;
5
5
  (function (VideoExt) {
6
6
  VideoExt["Mp4"] = "mp4";
@@ -34,6 +34,7 @@ function parseVideoType(src) {
34
34
  return undefined;
35
35
  }
36
36
  }
37
+ exports.parseVideoType = parseVideoType;
37
38
  const getVideoTypesWithPriority = (sources) => sources
38
39
  .map((src) => ({ src, type: parseVideoType(src) }))
39
40
  .sort(({ type: typeA }, { type: typeB }) => {
@@ -30,6 +30,7 @@ export declare const blockMap: {
30
30
  "relevant-reports-block": ({ typeKey, link, title, description, slider, date, dateStart, dateEnd, }: import("./models").RelevantReportsBlockProps) => JSX.Element;
31
31
  "press-releases-block": ({ title }: import("./models").PressReleasesBlockProps) => JSX.Element;
32
32
  "highlight-table-block": ({ title, description, table, legend, contentSize, legendPosition, legendAlign, }: import("./models").HighlightTableBlockProps) => JSX.Element;
33
+ "mini-case-block": (props: import("./models").MiniCaseBlockProps) => JSX.Element;
33
34
  "link-table-block": ({ title, items }: import("./models").LinkTableBlockProps) => JSX.Element;
34
35
  "services-block": ({ title, serviceLinkType }: import("./models").ServicesBlockProps) => JSX.Element;
35
36
  "quotes-block": ({ theme: localTheme, items, background, backgroundColor, }: import("./models").QuotesBlockProps) => JSX.Element;
@@ -39,6 +39,7 @@ exports.blockMap = {
39
39
  [models_1.BlockType.RelevantReportsBlock]: blocks_1.RelevantReportsBlock,
40
40
  [models_1.BlockType.PressReleasesBlock]: blocks_1.PressReleasesBlock,
41
41
  [models_1.BlockType.HighlightTableBlock]: blocks_1.HighlightTableBlock,
42
+ [models_1.BlockType.MiniCaseBlock]: blocks_1.MiniCaseBlock,
42
43
  [models_1.BlockType.LinkTableBlock]: blocks_1.LinkTableBlock,
43
44
  [models_1.BlockType.ServicesBlock]: blocks_1.ServicesBlock,
44
45
  [models_1.BlockType.QuotesBlock]: blocks_1.QuotesBlock,
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { CaseStudyCardProps } from '../../models';
3
+ export type MiniCaseContextProps = Record<string, CaseStudyCardProps>;
4
+ export declare const MiniCaseContext: React.Context<MiniCaseContextProps>;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MiniCaseContext = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
6
+ exports.MiniCaseContext = react_1.default.createContext({});
@@ -0,0 +1 @@
1
+ export * from './MiniCaseContext';