@gravity-ui/page-constructor 3.0.0-alpha.1 → 3.0.0-alpha.2
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.
- package/build/cjs/blocks/ExtendedFeatures/ExtendedFeatures.js +1 -1
- package/build/cjs/blocks/PromoFeaturesBlock/PromoFeaturesBlock.js +2 -2
- package/build/cjs/blocks/Slider/Slider.js +2 -2
- package/build/cjs/blocks/Tabs/Tabs.js +2 -2
- package/build/cjs/components/MediaBase/MediaBase.js +2 -2
- package/build/cjs/components/Title/Title.css +8 -103
- package/build/cjs/components/Title/Title.d.ts +5 -8
- package/build/cjs/components/Title/Title.js +15 -50
- package/build/cjs/components/Title/TitleItem.css +111 -0
- package/build/cjs/components/Title/TitleItem.d.ts +10 -0
- package/build/cjs/components/Title/TitleItem.js +57 -0
- package/build/cjs/components/index.d.ts +1 -1
- package/build/cjs/components/index.js +4 -4
- package/build/cjs/models/constructor-items/blocks.d.ts +8 -8
- package/build/cjs/models/constructor-items/common.d.ts +4 -4
- package/build/cjs/sub-blocks/Content/Content.js +3 -3
- package/build/cjs/text-transform/config.d.ts +2 -2
- package/build/esm/blocks/ExtendedFeatures/ExtendedFeatures.js +2 -2
- package/build/esm/blocks/PromoFeaturesBlock/PromoFeaturesBlock.js +2 -2
- package/build/esm/blocks/Slider/Slider.js +2 -2
- package/build/esm/blocks/Tabs/Tabs.js +2 -2
- package/build/esm/components/MediaBase/MediaBase.js +2 -2
- package/build/esm/components/Title/Title.css +8 -103
- package/build/esm/components/Title/Title.d.ts +5 -8
- package/build/esm/components/Title/Title.js +17 -49
- package/build/esm/components/Title/TitleItem.css +111 -0
- package/build/esm/components/Title/TitleItem.d.ts +11 -0
- package/build/esm/components/Title/TitleItem.js +53 -0
- package/build/esm/components/index.d.ts +1 -1
- package/build/esm/components/index.js +1 -1
- package/build/esm/models/constructor-items/blocks.d.ts +8 -8
- package/build/esm/models/constructor-items/common.d.ts +4 -4
- package/build/esm/sub-blocks/Content/Content.js +3 -3
- package/build/esm/text-transform/config.d.ts +2 -2
- package/package.json +1 -1
- package/server/models/constructor-items/blocks.d.ts +8 -8
- package/server/models/constructor-items/common.d.ts +4 -4
- package/server/text-transform/config.d.ts +2 -2
- package/build/cjs/components/BlockHeader/BlockHeader.css +0 -16
- package/build/cjs/components/BlockHeader/BlockHeader.d.ts +0 -7
- package/build/cjs/components/BlockHeader/BlockHeader.js +0 -22
- package/build/esm/components/BlockHeader/BlockHeader.css +0 -16
- package/build/esm/components/BlockHeader/BlockHeader.d.ts +0 -8
- package/build/esm/components/BlockHeader/BlockHeader.js +0 -21
|
@@ -19,7 +19,7 @@ const DEFAULT_SIZES = {
|
|
|
19
19
|
const ExtendedFeaturesBlock = ({ title, description, items, colSizes = DEFAULT_SIZES, animated, }) => {
|
|
20
20
|
const { themeValue: theme } = (0, react_1.useContext)(ThemeValueContext_1.ThemeValueContext);
|
|
21
21
|
return (react_1.default.createElement(components_1.AnimateBlock, { className: b(), animate: animated },
|
|
22
|
-
react_1.default.createElement(components_1.
|
|
22
|
+
react_1.default.createElement(components_1.Title, { title: title, description: description, className: b('header') }),
|
|
23
23
|
react_1.default.createElement("div", { className: b('items') },
|
|
24
24
|
react_1.default.createElement(grid_1.Row, null, items.map(({ title: itemTitle, text, link, links, label, icon, buttons, additionalInfo, }) => {
|
|
25
25
|
const itemLinks = links || [];
|
|
@@ -4,9 +4,9 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
const react_1 = tslib_1.__importDefault(require("react"));
|
|
5
5
|
const AnimateBlock_1 = tslib_1.__importDefault(require("../../components/AnimateBlock/AnimateBlock"));
|
|
6
6
|
const BalancedMasonry_1 = tslib_1.__importDefault(require("../../components/BalancedMasonry/BalancedMasonry"));
|
|
7
|
-
const BlockHeader_1 = tslib_1.__importDefault(require("../../components/BlockHeader/BlockHeader"));
|
|
8
7
|
const FullWidthBackground_1 = tslib_1.__importDefault(require("../../components/FullWidthBackground/FullWidthBackground"));
|
|
9
8
|
const Media_1 = tslib_1.__importDefault(require("../../components/Media/Media"));
|
|
9
|
+
const Title_1 = tslib_1.__importDefault(require("../../components/Title/Title"));
|
|
10
10
|
const YFMWrapper_1 = tslib_1.__importDefault(require("../../components/YFMWrapper/YFMWrapper"));
|
|
11
11
|
const constants_1 = require("../../constants");
|
|
12
12
|
const utils_1 = require("../../utils");
|
|
@@ -21,7 +21,7 @@ const PromoFeaturesBlock = (props) => {
|
|
|
21
21
|
const backgroundTheme = theme || 'default';
|
|
22
22
|
return (react_1.default.createElement(AnimateBlock_1.default, { className: b({ [backgroundTheme]: true }), animate: animated },
|
|
23
23
|
react_1.default.createElement(FullWidthBackground_1.default, { className: b('background', { [backgroundTheme]: true }) }),
|
|
24
|
-
react_1.default.createElement(
|
|
24
|
+
react_1.default.createElement(Title_1.default, { title: title, description: description, className: b('header') }),
|
|
25
25
|
react_1.default.createElement(BalancedMasonry_1.default, { breakpointCols: breakpointColumns, className: b('card-container'), columnClassName: b('card-container-column') }, items.map(({ title: cardTitle, text, media, theme: cardTheme }, index) => {
|
|
26
26
|
const blockModifier = backgroundTheme === 'default' ? 'default' : 'light';
|
|
27
27
|
const themeMod = cardTheme || blockModifier || '';
|
|
@@ -7,8 +7,8 @@ const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
|
7
7
|
const react_slick_1 = tslib_1.__importDefault(require("react-slick"));
|
|
8
8
|
const Anchor_1 = tslib_1.__importDefault(require("../../components/Anchor/Anchor"));
|
|
9
9
|
const AnimateBlock_1 = tslib_1.__importDefault(require("../../components/AnimateBlock/AnimateBlock"));
|
|
10
|
-
const BlockHeader_1 = tslib_1.__importDefault(require("../../components/BlockHeader/BlockHeader"));
|
|
11
10
|
const OutsideClick_1 = tslib_1.__importDefault(require("../../components/OutsideClick/OutsideClick"));
|
|
11
|
+
const Title_1 = tslib_1.__importDefault(require("../../components/Title/Title"));
|
|
12
12
|
const constants_1 = require("../../constants");
|
|
13
13
|
const mobileContext_1 = require("../../context/mobileContext");
|
|
14
14
|
const ssrContext_1 = require("../../context/ssrContext");
|
|
@@ -185,7 +185,7 @@ const SliderBlock = (props) => {
|
|
|
185
185
|
type,
|
|
186
186
|
}, blockClassName) },
|
|
187
187
|
anchorId && react_1.default.createElement(Anchor_1.default, { id: anchorId }),
|
|
188
|
-
react_1.default.createElement(
|
|
188
|
+
react_1.default.createElement(Title_1.default, { title: title, description: description, className: b('header', { 'no-description': !description }) }),
|
|
189
189
|
react_1.default.createElement(AnimateBlock_1.default, { className: b('animate-slides'), animate: animated }, renderSlider()))));
|
|
190
190
|
};
|
|
191
191
|
exports.SliderBlock = SliderBlock;
|
|
@@ -4,11 +4,11 @@ exports.TabsBlock = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
6
|
const AnimateBlock_1 = tslib_1.__importDefault(require("../../components/AnimateBlock/AnimateBlock"));
|
|
7
|
-
const BlockHeader_1 = tslib_1.__importDefault(require("../../components/BlockHeader/BlockHeader"));
|
|
8
7
|
const ButtonTabs_1 = tslib_1.__importDefault(require("../../components/ButtonTabs/ButtonTabs"));
|
|
9
8
|
const FullscreenImage_1 = tslib_1.__importDefault(require("../../components/FullscreenImage/FullscreenImage"));
|
|
10
9
|
const utils_1 = require("../../components/Media/Image/utils");
|
|
11
10
|
const Media_1 = tslib_1.__importDefault(require("../../components/Media/Media"));
|
|
11
|
+
const Title_1 = tslib_1.__importDefault(require("../../components/Title/Title"));
|
|
12
12
|
const VideoBlock_1 = require("../../components/VideoBlock/VideoBlock");
|
|
13
13
|
const ThemeValueContext_1 = require("../../context/theme/ThemeValueContext");
|
|
14
14
|
const grid_1 = require("../../grid");
|
|
@@ -54,7 +54,7 @@ const TabsBlock = ({ items, title, description, animated, tabsColSizes, centered
|
|
|
54
54
|
e.currentTarget.scrollIntoView({ inline: 'center', behavior: 'smooth', block: 'nearest' });
|
|
55
55
|
};
|
|
56
56
|
return (react_1.default.createElement(AnimateBlock_1.default, { className: b(), onScroll: () => setPlay(true), animate: animated },
|
|
57
|
-
react_1.default.createElement(
|
|
57
|
+
react_1.default.createElement(Title_1.default, { title: title, description: description, className: b('block-title', { centered: centered }) }),
|
|
58
58
|
react_1.default.createElement(grid_1.Row, null,
|
|
59
59
|
react_1.default.createElement(grid_1.Col, { sizes: tabsColSizes },
|
|
60
60
|
react_1.default.createElement(ButtonTabs_1.default, { items: tabs, onSelectTab: onSelectTab, activeTab: activeTab, className: b('tabs', { centered: centered }) }))),
|
|
@@ -4,9 +4,9 @@ exports.MediaBase = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
6
|
const AnimateBlock_1 = tslib_1.__importDefault(require("../../components/AnimateBlock/AnimateBlock"));
|
|
7
|
-
const BlockHeader_1 = tslib_1.__importDefault(require("../../components/BlockHeader/BlockHeader"));
|
|
8
7
|
const grid_1 = require("../../grid");
|
|
9
8
|
const utils_1 = require("../../utils");
|
|
9
|
+
const Title_1 = tslib_1.__importDefault(require("../Title/Title"));
|
|
10
10
|
const MediaBaseContent_1 = tslib_1.__importDefault(require("./MediaBaseContent"));
|
|
11
11
|
const b = (0, utils_1.block)('media-base');
|
|
12
12
|
const Card = () => null;
|
|
@@ -24,7 +24,7 @@ const MediaBase = (props) => {
|
|
|
24
24
|
const mediaContent = !mediaOnly && react_1.default.createElement(MediaBaseContent_1.default, Object.assign({}, mediaContentProps));
|
|
25
25
|
const card = children.type === Card ? children === null || children === void 0 ? void 0 : children.props.children : null;
|
|
26
26
|
return (react_1.default.createElement(AnimateBlock_1.default, { className: b(), onScroll: onScroll, animate: animated },
|
|
27
|
-
mediaOnly &&
|
|
27
|
+
mediaOnly && react_1.default.createElement(Title_1.default, { className: b('header'), title: title, description: description }),
|
|
28
28
|
react_1.default.createElement(grid_1.Grid, null,
|
|
29
29
|
react_1.default.createElement(grid_1.Row, { className: b('row', {
|
|
30
30
|
reverse: direction === 'media-content',
|
|
@@ -1,111 +1,16 @@
|
|
|
1
|
-
.pc-title-block_size_l, .pc-title-block_size_m, .pc-title-block_size_s, .pc-title-block_size_xs {
|
|
2
|
-
margin: 0;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
1
|
/* use this for style redefinitions to awoid problems with
|
|
6
2
|
unpredictable css rules order in build */
|
|
7
|
-
.pc-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
.pc-title-block_justify_end {
|
|
11
|
-
text-align: right;
|
|
3
|
+
.pc-title__description {
|
|
4
|
+
margin-top: 12px;
|
|
12
5
|
}
|
|
13
|
-
.pc-
|
|
6
|
+
.pc-title__description .yfm {
|
|
14
7
|
font-size: var(--yc-text-body-3-font-size);
|
|
15
8
|
line-height: var(--yc-text-body-3-line-height);
|
|
16
|
-
color: var(--pc-text-header-color);
|
|
17
|
-
font-weight: var(--yc-text-accent-font-weight);
|
|
18
|
-
}
|
|
19
|
-
.pc-title-block_size_s {
|
|
20
|
-
font-size: var(--yc-text-header-1-font-size);
|
|
21
|
-
line-height: var(--yc-text-header-1-line-height);
|
|
22
|
-
color: var(--pc-text-header-color);
|
|
23
|
-
font-weight: var(--yc-text-accent-font-weight);
|
|
24
|
-
margin-top: 32px;
|
|
25
|
-
}
|
|
26
|
-
.pc-title-block_size_m {
|
|
27
|
-
font-size: var(--yc-text-display-2-font-size);
|
|
28
|
-
line-height: var(--yc-text-display-2-line-height);
|
|
29
|
-
color: var(--pc-text-header-color);
|
|
30
|
-
font-weight: var(--yc-text-accent-font-weight);
|
|
31
|
-
margin-top: 48px;
|
|
32
|
-
}
|
|
33
|
-
@media (max-width: 576px) {
|
|
34
|
-
.pc-title-block_size_m {
|
|
35
|
-
font-size: var(--yc-text-display-1-font-size);
|
|
36
|
-
line-height: var(--yc-text-display-1-line-height);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
.pc-title-block_size_l {
|
|
40
|
-
font-size: var(--yc-text-display-4-font-size);
|
|
41
|
-
line-height: var(--yc-text-display-4-line-height);
|
|
42
|
-
color: var(--pc-text-header-color);
|
|
43
|
-
font-weight: var(--yc-text-accent-font-weight);
|
|
44
|
-
margin-top: 96px;
|
|
45
|
-
}
|
|
46
|
-
@media (max-width: 577px) {
|
|
47
|
-
.pc-title-block_size_l {
|
|
48
|
-
font-size: var(--yc-text-display-2-font-size);
|
|
49
|
-
line-height: var(--yc-text-display-2-line-height);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
.pc-title-block__arrow {
|
|
53
|
-
margin-top: 10px;
|
|
54
|
-
}
|
|
55
|
-
.pc-title-block__arrow_size_xs {
|
|
56
|
-
margin-top: 7px;
|
|
57
|
-
}
|
|
58
|
-
.pc-title-block__arrow_size_s {
|
|
59
|
-
margin-top: 5px;
|
|
60
|
-
}
|
|
61
|
-
.pc-title-block__link {
|
|
62
|
-
color: inherit;
|
|
63
|
-
text-decoration: none;
|
|
64
|
-
padding-right: 8px;
|
|
65
|
-
}
|
|
66
|
-
.pc-title-block__link:hover, .pc-title-block__link:active {
|
|
67
|
-
--pc-text-header-color: inherit;
|
|
68
|
-
color: inherit;
|
|
69
|
-
}
|
|
70
|
-
.pc-title-block__link:hover {
|
|
71
|
-
cursor: pointer;
|
|
72
|
-
}
|
|
73
|
-
.pc-title-block__link:hover .pc-title-block__arrow {
|
|
74
|
-
margin-left: 10px;
|
|
75
|
-
}
|
|
76
|
-
.pc-title-block__link:hover .pc-title-block__arrow_size_xs {
|
|
77
|
-
margin-left: 6px;
|
|
78
|
-
}
|
|
79
|
-
.pc-title-block__link:hover .pc-title-block__arrow_size_s {
|
|
80
|
-
margin-left: 8px;
|
|
81
|
-
}
|
|
82
|
-
.pc-title-block__text {
|
|
83
|
-
white-space: normal;
|
|
84
|
-
}
|
|
85
|
-
.pc-title-block__text a {
|
|
86
|
-
outline: none;
|
|
87
|
-
color: var(--yc-color-text-link);
|
|
88
|
-
text-decoration: none;
|
|
89
|
-
cursor: pointer;
|
|
90
|
-
}
|
|
91
|
-
.utilityfocus .pc-title-block__text a:focus {
|
|
92
|
-
outline: 2px solid #ffdb4d;
|
|
93
|
-
}
|
|
94
|
-
.pc-title-block__text a:hover, .pc-title-block__text a:active {
|
|
95
|
-
--pc-text-header-color: var(--yc-color-text-link-hover);
|
|
96
|
-
color: var(--yc-color-text-link-hover);
|
|
97
|
-
}
|
|
98
|
-
.pc-title-block__wrapper {
|
|
99
|
-
white-space: nowrap;
|
|
100
9
|
}
|
|
101
|
-
.pc-
|
|
102
|
-
margin-top:
|
|
10
|
+
.pc-title__description_titleSize_s, .pc-title__description_titleSize_xs {
|
|
11
|
+
margin-top: 8px;
|
|
103
12
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
.pc-title-block__arrow_size_m, .pc-title-block__arrow_size_l {
|
|
109
|
-
margin-top: 9px;
|
|
110
|
-
}
|
|
13
|
+
.pc-title__description_titleSize_s .yfm, .pc-title__description_titleSize_xs .yfm {
|
|
14
|
+
font-size: var(--yc-text-body-2-font-size);
|
|
15
|
+
line-height: var(--yc-text-body-2-line-height);
|
|
111
16
|
}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export interface
|
|
4
|
-
|
|
5
|
-
onClick?: () => void;
|
|
6
|
-
dataQa?: string;
|
|
7
|
-
resetMargin?: boolean;
|
|
1
|
+
import { GridColumnSizesType } from '../../grid';
|
|
2
|
+
import { ClassNameProps, TitleProps as TitleParams } from '../../models';
|
|
3
|
+
export interface TitleProps extends TitleParams {
|
|
4
|
+
colSizes?: GridColumnSizesType;
|
|
8
5
|
}
|
|
9
|
-
declare const Title: (
|
|
6
|
+
declare const Title: ({ title, description, className, colSizes, }: TitleProps & ClassNameProps) => JSX.Element | null;
|
|
10
7
|
export default Title;
|
|
@@ -1,57 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getArrowSize = void 0;
|
|
4
3
|
const tslib_1 = require("tslib");
|
|
5
|
-
const react_1 = tslib_1.
|
|
6
|
-
const
|
|
7
|
-
const locationContext_1 = require("../../context/locationContext");
|
|
8
|
-
const mobileContext_1 = require("../../context/mobileContext");
|
|
4
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
5
|
+
const grid_1 = require("../../grid");
|
|
9
6
|
const utils_1 = require("../../utils");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
case 's':
|
|
17
|
-
return 16;
|
|
18
|
-
case 'm':
|
|
19
|
-
return isMobile ? 22 : 24;
|
|
20
|
-
case 'l':
|
|
21
|
-
return isMobile ? 26 : 38;
|
|
22
|
-
default:
|
|
23
|
-
return 20;
|
|
7
|
+
const YFMWrapper_1 = tslib_1.__importDefault(require("../YFMWrapper/YFMWrapper"));
|
|
8
|
+
const TitleItem_1 = tslib_1.__importDefault(require("./TitleItem"));
|
|
9
|
+
const b = (0, utils_1.block)('title');
|
|
10
|
+
const Title = ({ title, description, className, colSizes = { all: 12, sm: 8 }, }) => {
|
|
11
|
+
if (!title && !description) {
|
|
12
|
+
return null;
|
|
24
13
|
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
react_1.default.createElement(__1.HTML, { className: b('text') }, text),
|
|
33
|
-
custom && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
34
|
-
"\u00A0",
|
|
35
|
-
react_1.default.createElement("span", { className: b('custom') }, custom)))));
|
|
36
|
-
let content;
|
|
37
|
-
const insideClickableContent = (react_1.default.createElement("span", { className: b('wrapper') },
|
|
38
|
-
textMarkup,
|
|
39
|
-
"\u00A0",
|
|
40
|
-
react_1.default.createElement(__1.ToggleArrow, { className: b('arrow', { size: textSize }), size: getArrowSize(textSize, isMobile), type: 'horizontal', iconType: "navigation", open: false })));
|
|
41
|
-
if (!url && !onClick) {
|
|
42
|
-
content = textMarkup;
|
|
43
|
-
}
|
|
44
|
-
else if (url) {
|
|
45
|
-
content = (react_1.default.createElement("a", Object.assign({ className: b('link'), href: url }, (0, utils_1.getLinkProps)(url, hostname), { onClick: onClick }), insideClickableContent));
|
|
46
|
-
}
|
|
47
|
-
else if (onClick) {
|
|
48
|
-
content = (react_1.default.createElement("span", { className: b('link'), onClick: onClick }, insideClickableContent));
|
|
49
|
-
}
|
|
50
|
-
return (react_1.default.createElement(react_1.Fragment, null,
|
|
51
|
-
anchor && react_1.default.createElement(Anchor_1.default, { id: anchor, className: b('anchor') }),
|
|
52
|
-
react_1.default.createElement((0, utils_1.getHeaderTag)(textSize), {
|
|
53
|
-
className: b({ size: textSize, justify, 'reset-margin': resetMargin }, className),
|
|
54
|
-
'data-qa': `${dataQa}-header`,
|
|
55
|
-
}, content)));
|
|
14
|
+
const _a = !title || typeof title === 'string' ? { text: title } : title, { text } = _a, titleProps = tslib_1.__rest(_a, ["text"]);
|
|
15
|
+
return (react_1.default.createElement("div", { className: b(null, className) },
|
|
16
|
+
text && (react_1.default.createElement(grid_1.Col, { reset: true, sizes: colSizes },
|
|
17
|
+
react_1.default.createElement(TitleItem_1.default, Object.assign({ text: text }, titleProps)))),
|
|
18
|
+
description && (react_1.default.createElement(grid_1.Col, { reset: true, sizes: colSizes },
|
|
19
|
+
react_1.default.createElement("div", { className: b('description', { titleSize: titleProps === null || titleProps === void 0 ? void 0 : titleProps.textSize }) },
|
|
20
|
+
react_1.default.createElement(YFMWrapper_1.default, { content: description, modifiers: { constructor: true } }))))));
|
|
56
21
|
};
|
|
57
22
|
exports.default = Title;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
.pc-title-item_size_l, .pc-title-item_size_m, .pc-title-item_size_s, .pc-title-item_size_xs {
|
|
2
|
+
margin: 0;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
/* use this for style redefinitions to awoid problems with
|
|
6
|
+
unpredictable css rules order in build */
|
|
7
|
+
.pc-title-item_justify_center {
|
|
8
|
+
text-align: center;
|
|
9
|
+
}
|
|
10
|
+
.pc-title-item_justify_end {
|
|
11
|
+
text-align: right;
|
|
12
|
+
}
|
|
13
|
+
.pc-title-item_size_xs {
|
|
14
|
+
font-size: var(--yc-text-body-3-font-size);
|
|
15
|
+
line-height: var(--yc-text-body-3-line-height);
|
|
16
|
+
color: var(--pc-text-header-color);
|
|
17
|
+
font-weight: var(--yc-text-accent-font-weight);
|
|
18
|
+
}
|
|
19
|
+
.pc-title-item_size_s {
|
|
20
|
+
font-size: var(--yc-text-header-1-font-size);
|
|
21
|
+
line-height: var(--yc-text-header-1-line-height);
|
|
22
|
+
color: var(--pc-text-header-color);
|
|
23
|
+
font-weight: var(--yc-text-accent-font-weight);
|
|
24
|
+
margin-top: 32px;
|
|
25
|
+
}
|
|
26
|
+
.pc-title-item_size_m {
|
|
27
|
+
font-size: var(--yc-text-display-2-font-size);
|
|
28
|
+
line-height: var(--yc-text-display-2-line-height);
|
|
29
|
+
color: var(--pc-text-header-color);
|
|
30
|
+
font-weight: var(--yc-text-accent-font-weight);
|
|
31
|
+
margin-top: 48px;
|
|
32
|
+
}
|
|
33
|
+
@media (max-width: 576px) {
|
|
34
|
+
.pc-title-item_size_m {
|
|
35
|
+
font-size: var(--yc-text-display-1-font-size);
|
|
36
|
+
line-height: var(--yc-text-display-1-line-height);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
.pc-title-item_size_l {
|
|
40
|
+
font-size: var(--yc-text-display-4-font-size);
|
|
41
|
+
line-height: var(--yc-text-display-4-line-height);
|
|
42
|
+
color: var(--pc-text-header-color);
|
|
43
|
+
font-weight: var(--yc-text-accent-font-weight);
|
|
44
|
+
margin-top: 96px;
|
|
45
|
+
}
|
|
46
|
+
@media (max-width: 577px) {
|
|
47
|
+
.pc-title-item_size_l {
|
|
48
|
+
font-size: var(--yc-text-display-2-font-size);
|
|
49
|
+
line-height: var(--yc-text-display-2-line-height);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
.pc-title-item__arrow {
|
|
53
|
+
margin-top: 10px;
|
|
54
|
+
}
|
|
55
|
+
.pc-title-item__arrow_size_xs {
|
|
56
|
+
margin-top: 7px;
|
|
57
|
+
}
|
|
58
|
+
.pc-title-item__arrow_size_s {
|
|
59
|
+
margin-top: 5px;
|
|
60
|
+
}
|
|
61
|
+
.pc-title-item__link {
|
|
62
|
+
color: inherit;
|
|
63
|
+
text-decoration: none;
|
|
64
|
+
padding-right: 8px;
|
|
65
|
+
}
|
|
66
|
+
.pc-title-item__link:hover, .pc-title-item__link:active {
|
|
67
|
+
--pc-text-header-color: inherit;
|
|
68
|
+
color: inherit;
|
|
69
|
+
}
|
|
70
|
+
.pc-title-item__link:hover {
|
|
71
|
+
cursor: pointer;
|
|
72
|
+
}
|
|
73
|
+
.pc-title-item__link:hover .pc-title-item__arrow {
|
|
74
|
+
margin-left: 10px;
|
|
75
|
+
}
|
|
76
|
+
.pc-title-item__link:hover .pc-title-item__arrow_size_xs {
|
|
77
|
+
margin-left: 6px;
|
|
78
|
+
}
|
|
79
|
+
.pc-title-item__link:hover .pc-title-item__arrow_size_s {
|
|
80
|
+
margin-left: 8px;
|
|
81
|
+
}
|
|
82
|
+
.pc-title-item__text {
|
|
83
|
+
white-space: normal;
|
|
84
|
+
}
|
|
85
|
+
.pc-title-item__text a {
|
|
86
|
+
outline: none;
|
|
87
|
+
color: var(--yc-color-text-link);
|
|
88
|
+
text-decoration: none;
|
|
89
|
+
cursor: pointer;
|
|
90
|
+
}
|
|
91
|
+
.utilityfocus .pc-title-item__text a:focus {
|
|
92
|
+
outline: 2px solid #ffdb4d;
|
|
93
|
+
}
|
|
94
|
+
.pc-title-item__text a:hover, .pc-title-item__text a:active {
|
|
95
|
+
--pc-text-header-color: var(--yc-color-text-link-hover);
|
|
96
|
+
color: var(--yc-color-text-link-hover);
|
|
97
|
+
}
|
|
98
|
+
.pc-title-item__wrapper {
|
|
99
|
+
white-space: nowrap;
|
|
100
|
+
}
|
|
101
|
+
.pc-title-item_reset-margin {
|
|
102
|
+
margin-top: 0;
|
|
103
|
+
}
|
|
104
|
+
@media (max-width: 577px) {
|
|
105
|
+
.pc-title-item_size_l:not(.pc-title-item_reset-margin) {
|
|
106
|
+
margin-top: 48px;
|
|
107
|
+
}
|
|
108
|
+
.pc-title-item__arrow_size_m, .pc-title-item__arrow_size_l {
|
|
109
|
+
margin-top: 9px;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TextSize, TitleItemProps } from '../../models';
|
|
2
|
+
export declare function getArrowSize(size: TextSize, isMobile: boolean): 16 | 24 | 13 | 22 | 26 | 38 | 20;
|
|
3
|
+
export interface TitleItemFullProps extends TitleItemProps {
|
|
4
|
+
className?: string;
|
|
5
|
+
onClick?: () => void;
|
|
6
|
+
dataQa?: string;
|
|
7
|
+
resetMargin?: boolean;
|
|
8
|
+
}
|
|
9
|
+
declare const Title: (props: TitleItemFullProps) => JSX.Element;
|
|
10
|
+
export default Title;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getArrowSize = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
const __1 = require("../");
|
|
7
|
+
const locationContext_1 = require("../../context/locationContext");
|
|
8
|
+
const mobileContext_1 = require("../../context/mobileContext");
|
|
9
|
+
const utils_1 = require("../../utils");
|
|
10
|
+
const Anchor_1 = tslib_1.__importDefault(require("../Anchor/Anchor"));
|
|
11
|
+
const b = (0, utils_1.block)('title-item');
|
|
12
|
+
function getArrowSize(size, isMobile) {
|
|
13
|
+
switch (size) {
|
|
14
|
+
case 'xs':
|
|
15
|
+
return 13;
|
|
16
|
+
case 's':
|
|
17
|
+
return 16;
|
|
18
|
+
case 'm':
|
|
19
|
+
return isMobile ? 22 : 24;
|
|
20
|
+
case 'l':
|
|
21
|
+
return isMobile ? 26 : 38;
|
|
22
|
+
default:
|
|
23
|
+
return 20;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.getArrowSize = getArrowSize;
|
|
27
|
+
const Title = (props) => {
|
|
28
|
+
const isMobile = (0, react_1.useContext)(mobileContext_1.MobileContext);
|
|
29
|
+
const { textSize = 'm', text, anchor, justify, url, onClick, custom, className, dataQa, resetMargin = true, } = props;
|
|
30
|
+
const { hostname } = (0, react_1.useContext)(locationContext_1.LocationContext);
|
|
31
|
+
const textMarkup = (react_1.default.createElement(react_1.default.Fragment, null,
|
|
32
|
+
react_1.default.createElement(__1.HTML, { className: b('text') }, text),
|
|
33
|
+
custom && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
34
|
+
"\u00A0",
|
|
35
|
+
react_1.default.createElement("span", { className: b('custom') }, custom)))));
|
|
36
|
+
let content;
|
|
37
|
+
const insideClickableContent = (react_1.default.createElement("span", { className: b('wrapper') },
|
|
38
|
+
textMarkup,
|
|
39
|
+
"\u00A0",
|
|
40
|
+
react_1.default.createElement(__1.ToggleArrow, { className: b('arrow', { size: textSize }), size: getArrowSize(textSize, isMobile), type: 'horizontal', iconType: "navigation", open: false })));
|
|
41
|
+
if (!url && !onClick) {
|
|
42
|
+
content = textMarkup;
|
|
43
|
+
}
|
|
44
|
+
else if (url) {
|
|
45
|
+
content = (react_1.default.createElement("a", Object.assign({ className: b('link'), href: url }, (0, utils_1.getLinkProps)(url, hostname), { onClick: onClick }), insideClickableContent));
|
|
46
|
+
}
|
|
47
|
+
else if (onClick) {
|
|
48
|
+
content = (react_1.default.createElement("span", { className: b('link'), onClick: onClick }, insideClickableContent));
|
|
49
|
+
}
|
|
50
|
+
return (react_1.default.createElement(react_1.Fragment, null,
|
|
51
|
+
anchor && react_1.default.createElement(Anchor_1.default, { id: anchor, className: b('anchor') }),
|
|
52
|
+
react_1.default.createElement((0, utils_1.getHeaderTag)(textSize), {
|
|
53
|
+
className: b({ size: textSize, justify, 'reset-margin': resetMargin }, className),
|
|
54
|
+
'data-qa': `${dataQa}-header`,
|
|
55
|
+
}, content)));
|
|
56
|
+
};
|
|
57
|
+
exports.default = Title;
|
|
@@ -5,7 +5,7 @@ export { default as BackgroundMedia } from './BackgroundMedia/BackgroundMedia';
|
|
|
5
5
|
export { default as BackLink } from './BackLink/BackLink';
|
|
6
6
|
export { default as BalancedMasonry } from './BalancedMasonry/BalancedMasonry';
|
|
7
7
|
export { default as BlockBase } from './BlockBase/BlockBase';
|
|
8
|
-
export { default as BlockHeader } from './
|
|
8
|
+
export { default as BlockHeader } from './Title/Title';
|
|
9
9
|
export { default as Button } from './Button/Button';
|
|
10
10
|
export { default as CardBase } from './CardBase/CardBase';
|
|
11
11
|
export { default as ErrorWrapper } from './ErrorWrapper/ErrorWrapper';
|
|
@@ -18,8 +18,8 @@ var BalancedMasonry_1 = require("./BalancedMasonry/BalancedMasonry");
|
|
|
18
18
|
Object.defineProperty(exports, "BalancedMasonry", { enumerable: true, get: function () { return __importDefault(BalancedMasonry_1).default; } });
|
|
19
19
|
var BlockBase_1 = require("./BlockBase/BlockBase");
|
|
20
20
|
Object.defineProperty(exports, "BlockBase", { enumerable: true, get: function () { return __importDefault(BlockBase_1).default; } });
|
|
21
|
-
var
|
|
22
|
-
Object.defineProperty(exports, "BlockHeader", { enumerable: true, get: function () { return __importDefault(
|
|
21
|
+
var Title_1 = require("./Title/Title");
|
|
22
|
+
Object.defineProperty(exports, "BlockHeader", { enumerable: true, get: function () { return __importDefault(Title_1).default; } });
|
|
23
23
|
var Button_1 = require("./Button/Button");
|
|
24
24
|
Object.defineProperty(exports, "Button", { enumerable: true, get: function () { return __importDefault(Button_1).default; } });
|
|
25
25
|
var CardBase_1 = require("./CardBase/CardBase");
|
|
@@ -52,8 +52,8 @@ var ReactPlayer_1 = require("./ReactPlayer/ReactPlayer");
|
|
|
52
52
|
Object.defineProperty(exports, "ReactPlayer", { enumerable: true, get: function () { return __importDefault(ReactPlayer_1).default; } });
|
|
53
53
|
var Table_1 = require("./Table/Table");
|
|
54
54
|
Object.defineProperty(exports, "Table", { enumerable: true, get: function () { return __importDefault(Table_1).default; } });
|
|
55
|
-
var
|
|
56
|
-
Object.defineProperty(exports, "Title", { enumerable: true, get: function () { return __importDefault(
|
|
55
|
+
var Title_2 = require("./Title/Title");
|
|
56
|
+
Object.defineProperty(exports, "Title", { enumerable: true, get: function () { return __importDefault(Title_2).default; } });
|
|
57
57
|
var ToggleArrow_1 = require("./ToggleArrow/ToggleArrow");
|
|
58
58
|
Object.defineProperty(exports, "ToggleArrow", { enumerable: true, get: function () { return __importDefault(ToggleArrow_1).default; } });
|
|
59
59
|
var UnpublishedLabel_1 = require("./UnpublishedLabel/UnpublishedLabel");
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { ButtonSize } from '@gravity-ui/uikit';
|
|
3
3
|
import { GridColumnSize, GridColumnSizesType } from '../../grid/types';
|
|
4
4
|
import { ThemeSupporting } from '../../utils';
|
|
5
|
-
import { AnchorProps, Animatable, BackgroundImageProps,
|
|
5
|
+
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, TitleProps } from './common';
|
|
6
6
|
import { BannerCardProps, SubBlock, SubBlockModels } from './sub-blocks';
|
|
7
7
|
export declare enum BlockType {
|
|
8
8
|
PromoFeaturesBlock = "promo-features-block",
|
|
@@ -69,7 +69,7 @@ export interface SliderProps extends Childable, Animatable, LoadableChildren {
|
|
|
69
69
|
text: string;
|
|
70
70
|
size?: TextSize;
|
|
71
71
|
};
|
|
72
|
-
title?:
|
|
72
|
+
title?: TitleItemBaseProps;
|
|
73
73
|
description?: string;
|
|
74
74
|
autoplay?: number;
|
|
75
75
|
randomOrder?: boolean;
|
|
@@ -120,7 +120,7 @@ export interface ExtendedFeaturesItem extends Omit<ContentBlockProps, 'theme' |
|
|
|
120
120
|
}
|
|
121
121
|
export interface ExtendedFeaturesProps extends Animatable {
|
|
122
122
|
items: ExtendedFeaturesItem[];
|
|
123
|
-
title?:
|
|
123
|
+
title?: TitleItemProps | string;
|
|
124
124
|
description?: string;
|
|
125
125
|
colSizes?: GridColumnSizesType;
|
|
126
126
|
}
|
|
@@ -132,7 +132,7 @@ export interface PromoFeaturesItem {
|
|
|
132
132
|
}
|
|
133
133
|
export interface PromoFeaturesProps extends Animatable {
|
|
134
134
|
items: PromoFeaturesItem[];
|
|
135
|
-
title?:
|
|
135
|
+
title?: TitleItemProps | string;
|
|
136
136
|
description?: string;
|
|
137
137
|
theme?: 'grey' | 'default';
|
|
138
138
|
}
|
|
@@ -207,14 +207,14 @@ export interface TabsBlockItem extends Omit<ContentBlockProps, 'size' | 'colSize
|
|
|
207
207
|
caption?: string;
|
|
208
208
|
media?: ThemedMediaProps;
|
|
209
209
|
}
|
|
210
|
-
export interface TabsBlockProps extends
|
|
210
|
+
export interface TabsBlockProps extends TitleProps, Animatable {
|
|
211
211
|
tabsColSizes?: GridColumnSizesType;
|
|
212
212
|
centered?: boolean;
|
|
213
213
|
direction?: MediaDirection;
|
|
214
214
|
items: TabsBlockItem[];
|
|
215
215
|
}
|
|
216
216
|
export interface CardLayoutBlockProps extends Childable, Animatable, LoadableChildren {
|
|
217
|
-
title:
|
|
217
|
+
title: TitleItemProps | string;
|
|
218
218
|
description?: string;
|
|
219
219
|
colSizes?: GridColumnSizesType;
|
|
220
220
|
}
|
|
@@ -227,7 +227,7 @@ export type FilterItem = {
|
|
|
227
227
|
card: SubBlockModels;
|
|
228
228
|
};
|
|
229
229
|
export interface FilterBlockProps extends Animatable, LoadableChildren {
|
|
230
|
-
title?:
|
|
230
|
+
title?: TitleItemProps | string;
|
|
231
231
|
description?: string;
|
|
232
232
|
tags: FilterTag[];
|
|
233
233
|
items: FilterItem[];
|
|
@@ -257,7 +257,7 @@ export interface ContentLayoutBlockProps {
|
|
|
257
257
|
fileContent?: FileLinkProps[];
|
|
258
258
|
}
|
|
259
259
|
export interface ContentBlockProps {
|
|
260
|
-
title?:
|
|
260
|
+
title?: TitleItemBaseProps | string;
|
|
261
261
|
text?: string;
|
|
262
262
|
additionalInfo?: string;
|
|
263
263
|
links?: LinkProps[];
|
|
@@ -249,11 +249,11 @@ export interface HeaderBreadCrumbsProps extends ClassNameProps {
|
|
|
249
249
|
metrikaGoals?: MetrikaGoal;
|
|
250
250
|
pixelEvents?: ButtonPixel;
|
|
251
251
|
}
|
|
252
|
-
export interface
|
|
252
|
+
export interface TitleItemProps extends Justifyable, TitleItemBaseProps {
|
|
253
253
|
navTitle?: string;
|
|
254
254
|
anchor?: string;
|
|
255
255
|
}
|
|
256
|
-
export interface
|
|
256
|
+
export interface TitleItemBaseProps {
|
|
257
257
|
text: string;
|
|
258
258
|
textSize?: TextSize;
|
|
259
259
|
url?: string;
|
|
@@ -334,8 +334,8 @@ export interface AuthorProps {
|
|
|
334
334
|
type?: AuthorType;
|
|
335
335
|
dataQa?: string;
|
|
336
336
|
}
|
|
337
|
-
export interface
|
|
338
|
-
title?:
|
|
337
|
+
export interface TitleProps {
|
|
338
|
+
title?: TitleItemProps | string;
|
|
339
339
|
description?: string;
|
|
340
340
|
}
|
|
341
341
|
export {};
|
|
@@ -37,11 +37,11 @@ function getButtonSize(size) {
|
|
|
37
37
|
const Content = (props) => {
|
|
38
38
|
const { title, text, additionalInfo, size = 'l', links, buttons, colSizes = { all: 12, sm: 8 }, centered, theme, className, } = props;
|
|
39
39
|
const titleProps = tslib_1.__rest(!title || typeof title === 'string'
|
|
40
|
-
? { text: title, textSize: getTextSize(size) }
|
|
41
|
-
: title, []);
|
|
40
|
+
? { text: title, textSize: getTextSize(size), resetMargin: true }
|
|
41
|
+
: Object.assign(Object.assign({}, title), { resetMargin: true }), []);
|
|
42
42
|
const hasTitle = Boolean(title);
|
|
43
43
|
return (react_1.default.createElement(grid_1.Col, { className: b({ size, centered, theme }, className), reset: true, sizes: colSizes },
|
|
44
|
-
title && react_1.default.createElement(components_1.Title,
|
|
44
|
+
title && react_1.default.createElement(components_1.Title, { title: titleProps }),
|
|
45
45
|
text && (react_1.default.createElement("div", { className: b('text', { ['without-title']: !hasTitle }) },
|
|
46
46
|
react_1.default.createElement(components_1.YFMWrapper, { content: text, modifiers: { constructor: true, [`constructor-size-${size}`]: true } }))),
|
|
47
47
|
additionalInfo && (react_1.default.createElement("div", { className: b('notice') },
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TitleItemProps } from '../models';
|
|
2
2
|
import { Parser, Transformer, TransformerRaw, typografTransformer, yfmTransformer } from './common';
|
|
3
3
|
export declare const blockHeaderTransformer: ({
|
|
4
4
|
fields: string[];
|
|
5
5
|
transformer: typeof typografTransformer;
|
|
6
|
-
parser: (transformer: Transformer, title:
|
|
6
|
+
parser: (transformer: Transformer, title: TitleItemProps | string) => string | {
|
|
7
7
|
text: string;
|
|
8
8
|
navTitle?: string | undefined;
|
|
9
9
|
anchor?: string | undefined;
|