@gravity-ui/page-constructor 4.23.0 → 4.24.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/blocks/ContentLayout/ContentLayout.css +3 -0
- package/build/cjs/blocks/ContentLayout/ContentLayout.js +1 -1
- package/build/cjs/blocks/Icons/Icons.css +10 -0
- package/build/cjs/blocks/Questions/QuestionBlockItem/QuestionBlockItem.css +15 -0
- package/build/cjs/blocks/Slider/Arrow/Arrow.css +7 -0
- package/build/cjs/blocks/Slider/Slider.js +12 -6
- package/build/cjs/components/Button/Button.css +6 -0
- package/build/cjs/components/ButtonTabs/ButtonTabs.css +3 -0
- package/build/cjs/components/ButtonTabs/ButtonTabs.js +1 -1
- package/build/cjs/components/CardBase/CardBase.d.ts +1 -2
- package/build/cjs/components/CardBase/CardBase.js +7 -3
- package/build/cjs/components/Control/Control.css +8 -0
- package/build/cjs/components/FileLink/FileLink.css +8 -0
- package/build/cjs/components/FullscreenImage/FullscreenImage.css +16 -0
- package/build/cjs/components/FullscreenImage/FullscreenImage.js +2 -2
- package/build/cjs/components/FullscreenMedia/FullscreenMedia.css +1 -1
- package/build/cjs/components/FullscreenMedia/FullscreenMedia.js +10 -3
- package/build/cjs/components/Link/Link.css +8 -0
- package/build/cjs/components/Media/Image/Image.js +1 -1
- package/build/cjs/components/OverflowScroller/OverflowScroller.css +19 -0
- package/build/cjs/components/OverflowScroller/OverflowScroller.js +2 -1
- package/build/cjs/components/OverflowScroller/i18n/en.json +4 -0
- package/build/cjs/components/OverflowScroller/i18n/index.d.ts +2 -0
- package/build/cjs/components/OverflowScroller/i18n/index.js +8 -0
- package/build/cjs/components/OverflowScroller/i18n/ru.json +4 -0
- package/build/cjs/components/ReactPlayer/CustomBarControls.css +6 -4
- package/build/cjs/components/ReactPlayer/ReactPlayer.css +7 -0
- package/build/cjs/components/ReactPlayer/ReactPlayer.js +1 -1
- package/build/cjs/components/Title/TitleItem.css +8 -0
- package/build/cjs/components/VideoBlock/VideoBlock.css +7 -0
- package/build/cjs/containers/PageConstructor/PageConstructor.css +9 -0
- package/build/cjs/sub-blocks/BannerCard/BannerCard.css +3 -0
- package/build/cjs/sub-blocks/Content/Content.css +3 -0
- package/build/cjs/sub-blocks/HubspotForm/HubspotForm.css +7 -0
- package/build/cjs/sub-blocks/PriceDetailed/PriceDetails/PriceDetails.css +20 -2
- package/build/cjs/sub-blocks/PriceDetailed/PriceDetails/PriceDetails.js +1 -1
- package/build/esm/blocks/ContentLayout/ContentLayout.css +3 -0
- package/build/esm/blocks/ContentLayout/ContentLayout.js +1 -1
- package/build/esm/blocks/Icons/Icons.css +10 -0
- package/build/esm/blocks/Questions/QuestionBlockItem/QuestionBlockItem.css +15 -0
- package/build/esm/blocks/Slider/Arrow/Arrow.css +7 -0
- package/build/esm/blocks/Slider/Slider.js +12 -6
- package/build/esm/components/Button/Button.css +6 -0
- package/build/esm/components/ButtonTabs/ButtonTabs.css +3 -0
- package/build/esm/components/ButtonTabs/ButtonTabs.js +1 -1
- package/build/esm/components/CardBase/CardBase.d.ts +1 -2
- package/build/esm/components/CardBase/CardBase.js +6 -2
- package/build/esm/components/Control/Control.css +8 -0
- package/build/esm/components/FileLink/FileLink.css +8 -0
- package/build/esm/components/FullscreenImage/FullscreenImage.css +16 -0
- package/build/esm/components/FullscreenImage/FullscreenImage.js +2 -2
- package/build/esm/components/FullscreenMedia/FullscreenMedia.css +1 -1
- package/build/esm/components/FullscreenMedia/FullscreenMedia.js +12 -5
- package/build/esm/components/Link/Link.css +8 -0
- package/build/esm/components/Media/Image/Image.js +2 -2
- package/build/esm/components/OverflowScroller/OverflowScroller.css +19 -0
- package/build/esm/components/OverflowScroller/OverflowScroller.js +2 -1
- package/build/esm/components/OverflowScroller/i18n/en.json +4 -0
- package/build/esm/components/OverflowScroller/i18n/index.d.ts +2 -0
- package/build/esm/components/OverflowScroller/i18n/index.js +5 -0
- package/build/esm/components/OverflowScroller/i18n/ru.json +4 -0
- package/build/esm/components/ReactPlayer/CustomBarControls.css +6 -4
- package/build/esm/components/ReactPlayer/ReactPlayer.css +7 -0
- package/build/esm/components/ReactPlayer/ReactPlayer.js +1 -1
- package/build/esm/components/Title/TitleItem.css +8 -0
- package/build/esm/components/VideoBlock/VideoBlock.css +7 -0
- package/build/esm/containers/PageConstructor/PageConstructor.css +9 -0
- package/build/esm/sub-blocks/BannerCard/BannerCard.css +3 -0
- package/build/esm/sub-blocks/Content/Content.css +3 -0
- package/build/esm/sub-blocks/HubspotForm/HubspotForm.css +7 -0
- package/build/esm/sub-blocks/PriceDetailed/PriceDetails/PriceDetails.css +20 -2
- package/build/esm/sub-blocks/PriceDetailed/PriceDetails/PriceDetails.js +1 -1
- package/package.json +1 -1
- package/styles/mixins.scss +20 -0
- package/styles/root.scss +2 -0
- package/styles/styles.css +7 -0
- package/styles/yfm.scss +2 -0
- package/widget/index.js +1 -1
|
@@ -49,6 +49,9 @@ unpredictable css rules order in build */
|
|
|
49
49
|
.pc-content-layout-block_background {
|
|
50
50
|
padding: 64px;
|
|
51
51
|
}
|
|
52
|
+
.pc-content-layout-block_theme_dark {
|
|
53
|
+
--g-color-line-focus: var(--g-color-text-light-primary);
|
|
54
|
+
}
|
|
52
55
|
@media (max-width: 577px) {
|
|
53
56
|
.pc-content-layout-block_background {
|
|
54
57
|
padding: 32px;
|
|
@@ -33,7 +33,7 @@ const ContentLayoutBlock = (props) => {
|
|
|
33
33
|
const isMobile = (0, react_1.useContext)(mobileContext_1.MobileContext);
|
|
34
34
|
const { textContent, fileContent, size = 'l', background, centered, theme = 'default', textWidth = 'm', } = props;
|
|
35
35
|
const colSizes = (0, react_1.useMemo)(() => getTextWidth(textWidth), [textWidth]);
|
|
36
|
-
return (react_1.default.createElement("div", { className: b({ size, background: Boolean(background) }) },
|
|
36
|
+
return (react_1.default.createElement("div", { className: b({ size, theme, background: Boolean(background) }) },
|
|
37
37
|
react_1.default.createElement(sub_blocks_1.Content, Object.assign({ className: b('content') }, textContent, { size: size, centered: centered, colSizes: colSizes, theme: theme })),
|
|
38
38
|
fileContent && (react_1.default.createElement(grid_1.Col, { className: b('files', { size, centered }), reset: true, sizes: colSizes }, fileContent.map((file) => (react_1.default.createElement(components_1.FileLink, Object.assign({ className: b('file') }, file, { key: file.href, type: "horizontal", textSize: getFileTextSize(size), theme: theme })))))),
|
|
39
39
|
background && (react_1.default.createElement("div", { className: b('background') },
|
|
@@ -30,6 +30,16 @@ unpredictable css rules order in build */
|
|
|
30
30
|
text-decoration: none;
|
|
31
31
|
margin: 0 8px 24px;
|
|
32
32
|
}
|
|
33
|
+
.pc-icons-block a.pc-icons-block__item {
|
|
34
|
+
border-radius: var(--g-focus-border-radius);
|
|
35
|
+
}
|
|
36
|
+
.pc-icons-block a.pc-icons-block__item:focus {
|
|
37
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
38
|
+
outline-offset: 0;
|
|
39
|
+
}
|
|
40
|
+
.pc-icons-block a.pc-icons-block__item:focus:not(:focus-visible) {
|
|
41
|
+
outline: 0;
|
|
42
|
+
}
|
|
33
43
|
.pc-icons-block__image {
|
|
34
44
|
max-width: 100%;
|
|
35
45
|
margin: 0 auto;
|
|
@@ -19,6 +19,14 @@ unpredictable css rules order in build */
|
|
|
19
19
|
position: relative;
|
|
20
20
|
padding-right: 24px;
|
|
21
21
|
cursor: pointer;
|
|
22
|
+
border-radius: var(--g-focus-border-radius);
|
|
23
|
+
}
|
|
24
|
+
.pc-QuestionsBlockItem__title:focus {
|
|
25
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
26
|
+
outline-offset: 0;
|
|
27
|
+
}
|
|
28
|
+
.pc-QuestionsBlockItem__title:focus:not(:focus-visible) {
|
|
29
|
+
outline: 0;
|
|
22
30
|
}
|
|
23
31
|
.pc-QuestionsBlockItem__title a {
|
|
24
32
|
outline: none;
|
|
@@ -37,12 +45,19 @@ unpredictable css rules order in build */
|
|
|
37
45
|
position: absolute;
|
|
38
46
|
right: 0;
|
|
39
47
|
top: 0;
|
|
48
|
+
bottom: 0;
|
|
49
|
+
margin: auto;
|
|
40
50
|
color: var(--g-color-text-primary);
|
|
41
51
|
}
|
|
42
52
|
.pc-QuestionsBlockItem__link {
|
|
43
53
|
font-size: var(--g-text-body-2-font-size);
|
|
44
54
|
line-height: var(--g-text-body-2-line-height);
|
|
45
55
|
}
|
|
56
|
+
.pc-QuestionsBlockItem__link.pc-QuestionsBlockItem__link a {
|
|
57
|
+
outline-offset: -2px;
|
|
58
|
+
border-radius: calc(var(--g-focus-border-radius) + 2px);
|
|
59
|
+
}
|
|
60
|
+
|
|
46
61
|
.pc-QuestionsBlockItem__text {
|
|
47
62
|
font-size: var(--g-text-body-2-font-size);
|
|
48
63
|
line-height: var(--g-text-body-2-line-height);
|
|
@@ -49,6 +49,13 @@ unpredictable css rules order in build */
|
|
|
49
49
|
box-shadow: 0 4px 24px var(--pc-color-sfx-shadow), 0 2px 8px var(--pc-color-sfx-shadow);
|
|
50
50
|
transition: box-shadow 0.3s cubic-bezier(0.22, 0.61, 0.36, 1), color 0.3s cubic-bezier(0.22, 0.61, 0.36, 1);
|
|
51
51
|
}
|
|
52
|
+
.pc-slider-block-arrow__button:focus {
|
|
53
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
54
|
+
outline-offset: 0;
|
|
55
|
+
}
|
|
56
|
+
.pc-slider-block-arrow__button:focus:not(:focus-visible) {
|
|
57
|
+
outline: 0;
|
|
58
|
+
}
|
|
52
59
|
.pc-slider-block-arrow:hover .pc-slider-block-arrow__button {
|
|
53
60
|
color: var(--g-color-text-primary);
|
|
54
61
|
box-shadow: 0 2px 12px var(--pc-color-sfx-shadow), 0 4px 24px var(--pc-color-sfx-shadow);
|
|
@@ -136,12 +136,12 @@ const SliderBlock = (props) => {
|
|
|
136
136
|
const renderAccessibleBar = (index) => {
|
|
137
137
|
return (
|
|
138
138
|
// To have this key differ from keys used in renderDot function, added `-accessible-bar` part
|
|
139
|
-
react_1.default.createElement(react_1.Fragment, { key: `${index}-accessible-bar` }, slidesCountByBreakpoint >
|
|
139
|
+
react_1.default.createElement(react_1.Fragment, { key: `${index}-accessible-bar` }, slidesCountByBreakpoint > 0 && (react_1.default.createElement("li", { className: b('accessible-bar'), "aria-current": true, "aria-label": `Slide ${currentIndex + 1} of ${barSlidesCount}`, style: {
|
|
140
140
|
left: barPosition,
|
|
141
141
|
width: barWidth,
|
|
142
142
|
} }))));
|
|
143
143
|
};
|
|
144
|
-
const
|
|
144
|
+
const getCurrentSlideNumber = (index) => {
|
|
145
145
|
const currentIndexDiff = index - currentIndex;
|
|
146
146
|
let currentSlideNumber;
|
|
147
147
|
if (0 <= currentIndexDiff && currentIndexDiff < slidesToShowCount) {
|
|
@@ -153,10 +153,16 @@ const SliderBlock = (props) => {
|
|
|
153
153
|
else {
|
|
154
154
|
currentSlideNumber = index + 1;
|
|
155
155
|
}
|
|
156
|
-
return
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
156
|
+
return currentSlideNumber;
|
|
157
|
+
};
|
|
158
|
+
const isVisibleSlide = (index) => {
|
|
159
|
+
const currentIndexDiff = index - currentIndex;
|
|
160
|
+
return (slidesCountByBreakpoint > 0 &&
|
|
161
|
+
0 <= currentIndexDiff &&
|
|
162
|
+
currentIndexDiff < slidesToShowCount);
|
|
163
|
+
};
|
|
164
|
+
const renderDot = (index) => {
|
|
165
|
+
return (react_1.default.createElement("li", { key: index, className: b('dot', { active: index === currentIndex }), onClick: () => handleDotClick(index), "aria-hidden": isVisibleSlide(index) ? true : undefined, "aria-label": `Slide ${getCurrentSlideNumber(index)} of ${barSlidesCount}` }));
|
|
160
166
|
};
|
|
161
167
|
const renderNavigation = () => {
|
|
162
168
|
if (childrenCount <= slidesCountByBreakpoint || !dots || childrenCount === 1) {
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
/* use this for style redefinitions to awoid problems with
|
|
2
2
|
unpredictable css rules order in build */
|
|
3
|
+
.pc-button-block {
|
|
4
|
+
--yc-button-outline-color: var(--g-color-line-focus);
|
|
5
|
+
}
|
|
3
6
|
.pc-button-block__content {
|
|
4
7
|
display: flex;
|
|
5
8
|
align-items: center;
|
|
@@ -40,6 +43,9 @@ unpredictable css rules order in build */
|
|
|
40
43
|
color: var(--pc-monochrome-button-color);
|
|
41
44
|
}
|
|
42
45
|
|
|
46
|
+
.pc-button-block_theme_normal-contrast:focus::before, .pc-button-block_theme_raised:focus::before {
|
|
47
|
+
outline-offset: 1px;
|
|
48
|
+
}
|
|
43
49
|
.pc-button-block_size_s {
|
|
44
50
|
--btn-image-margin: 10px;
|
|
45
51
|
}
|
|
@@ -20,7 +20,7 @@ const ButtonTabs = ({ className, items, activeTab, onSelectTab, tabSize = 'l', q
|
|
|
20
20
|
return (react_1.default.createElement("div", { className: b(null, className), "data-qa": qa }, items.map(({ id, title }) => {
|
|
21
21
|
const isActive = id === activeTabId;
|
|
22
22
|
return (react_1.default.createElement(index_1.Button, { text: title, className: b('item', { active: isActive }), key: title, size: tabSize, onClick: handleClick(id), extraProps: {
|
|
23
|
-
'aria-current': isActive,
|
|
23
|
+
'aria-current': isActive || undefined,
|
|
24
24
|
} }));
|
|
25
25
|
})));
|
|
26
26
|
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React, { HTMLAttributeAnchorTarget, ReactElement } from 'react';
|
|
2
|
-
import { ButtonPixel, CardBaseProps as CardBaseParams, ImageProps, MetrikaGoal, WithChildren } from '../../models';
|
|
3
|
-
import { AnalyticsEventsBase } from '../../models/common';
|
|
2
|
+
import { AnalyticsEventsBase, ButtonPixel, CardBaseProps as CardBaseParams, ImageProps, MetrikaGoal, WithChildren } from '../../models';
|
|
4
3
|
export interface CardBaseProps extends AnalyticsEventsBase, CardBaseParams {
|
|
5
4
|
className?: string;
|
|
6
5
|
bodyClassName?: string;
|
|
@@ -3,9 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Layout = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
|
6
7
|
const hooks_1 = require("../../hooks");
|
|
7
8
|
const useMetrika_1 = require("../../hooks/useMetrika");
|
|
8
|
-
const
|
|
9
|
+
const models_1 = require("../../models");
|
|
9
10
|
const utils_1 = require("../../utils");
|
|
10
11
|
const BackgroundImage_1 = tslib_1.__importDefault(require("../BackgroundImage/BackgroundImage"));
|
|
11
12
|
const RouterLink_1 = tslib_1.__importDefault(require("../RouterLink/RouterLink"));
|
|
@@ -16,7 +17,7 @@ const Footer = () => null;
|
|
|
16
17
|
const Layout = (props) => {
|
|
17
18
|
const { className, bodyClassName, metrikaGoals, pixelEvents, analyticsEvents, contentClassName, children, url, target, border = 'shadow', urlTitle, qa, } = props;
|
|
18
19
|
const handleMetrika = (0, useMetrika_1.useMetrika)();
|
|
19
|
-
const handleAnalytics = (0, hooks_1.useAnalytics)(
|
|
20
|
+
const handleAnalytics = (0, hooks_1.useAnalytics)(models_1.DefaultEventNames.CardBase, url);
|
|
20
21
|
let header, content, footer, image, headerClass, footerClass;
|
|
21
22
|
const qaAttributes = (0, utils_1.getQaAttrubutes)(qa, 'header', 'footer', 'body', 'content');
|
|
22
23
|
function handleChild(child) {
|
|
@@ -53,7 +54,10 @@ const Layout = (props) => {
|
|
|
53
54
|
handleAnalytics(analyticsEvents);
|
|
54
55
|
};
|
|
55
56
|
return url ? (react_1.default.createElement(RouterLink_1.default, { href: url },
|
|
56
|
-
react_1.default.createElement(
|
|
57
|
+
react_1.default.createElement(uikit_1.Link, { href: url, target: target, rel: target === '_blank' ? 'noopener noreferrer' : undefined, className: fullClassName, onClick: onClick, title: urlTitle, extraProps: {
|
|
58
|
+
draggable: false,
|
|
59
|
+
onDragStart: (e) => e.preventDefault(),
|
|
60
|
+
}, qa: qa }, cardContent))) : (react_1.default.createElement("div", { className: fullClassName, "data-qa": qa }, cardContent));
|
|
57
61
|
};
|
|
58
62
|
exports.Layout = Layout;
|
|
59
63
|
exports.Layout.Header = Header;
|
|
@@ -4,6 +4,7 @@ unpredictable css rules order in build */
|
|
|
4
4
|
display: flex;
|
|
5
5
|
justify-content: center;
|
|
6
6
|
align-items: center;
|
|
7
|
+
border-radius: var(--g-focus-border-radius);
|
|
7
8
|
transition: color 0.2s;
|
|
8
9
|
display: inline-block;
|
|
9
10
|
margin: 0;
|
|
@@ -25,6 +26,13 @@ unpredictable css rules order in build */
|
|
|
25
26
|
.utilityfocus .pc-control:focus {
|
|
26
27
|
outline: 2px solid #ffdb4d;
|
|
27
28
|
}
|
|
29
|
+
.pc-control:focus {
|
|
30
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
31
|
+
outline-offset: 0;
|
|
32
|
+
}
|
|
33
|
+
.pc-control:focus:not(:focus-visible) {
|
|
34
|
+
outline: 0;
|
|
35
|
+
}
|
|
28
36
|
.pc-control_size_xs {
|
|
29
37
|
width: 24px;
|
|
30
38
|
height: 24px;
|
|
@@ -19,6 +19,14 @@ unpredictable css rules order in build */
|
|
|
19
19
|
}
|
|
20
20
|
.pc-file-link__link > a {
|
|
21
21
|
color: var(--g-color-text-primary);
|
|
22
|
+
border-radius: var(--g-focus-border-radius);
|
|
23
|
+
}
|
|
24
|
+
.pc-file-link__link > a:focus {
|
|
25
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
26
|
+
outline-offset: 0;
|
|
27
|
+
}
|
|
28
|
+
.pc-file-link__link > a:focus:not(:focus-visible) {
|
|
29
|
+
outline: 0;
|
|
22
30
|
}
|
|
23
31
|
.pc-file-link__link > a:hover {
|
|
24
32
|
color: var(--g-color-text-secondary);
|
|
@@ -19,6 +19,15 @@ unpredictable css rules order in build */
|
|
|
19
19
|
border-radius: var(--pc-border-radius);
|
|
20
20
|
}
|
|
21
21
|
.pc-fullscreen-image__icon-wrapper {
|
|
22
|
+
display: inline-block;
|
|
23
|
+
margin: 0;
|
|
24
|
+
padding: 0;
|
|
25
|
+
font: inherit;
|
|
26
|
+
border: none;
|
|
27
|
+
outline: none;
|
|
28
|
+
color: inherit;
|
|
29
|
+
background: none;
|
|
30
|
+
cursor: pointer;
|
|
22
31
|
display: flex;
|
|
23
32
|
align-items: center;
|
|
24
33
|
justify-content: center;
|
|
@@ -33,6 +42,13 @@ unpredictable css rules order in build */
|
|
|
33
42
|
opacity: 0;
|
|
34
43
|
transition: 0.3s;
|
|
35
44
|
}
|
|
45
|
+
.pc-fullscreen-image__icon-wrapper:focus {
|
|
46
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
47
|
+
outline-offset: 0;
|
|
48
|
+
}
|
|
49
|
+
.pc-fullscreen-image__icon-wrapper:focus:not(:focus-visible) {
|
|
50
|
+
outline: 0;
|
|
51
|
+
}
|
|
36
52
|
.pc-fullscreen-image__icon-wrapper_visible {
|
|
37
53
|
opacity: 1;
|
|
38
54
|
}
|
|
@@ -21,11 +21,11 @@ const FullscreenImage = (props) => {
|
|
|
21
21
|
return (react_1.default.createElement("div", { className: b() },
|
|
22
22
|
react_1.default.createElement("div", { className: b('image-wrapper'), onMouseEnter: showFullscreenIcon, onMouseLeave: hideFullscreenIcon },
|
|
23
23
|
react_1.default.createElement(Image_1.default, Object.assign({}, props, { alt: alt, className: b('image', imageClassName), onClick: openModal, style: imageStyle })),
|
|
24
|
-
react_1.default.createElement("
|
|
24
|
+
react_1.default.createElement("button", { className: b('icon-wrapper', { visible: isMouseEnter }), onClick: openModal, onFocus: showFullscreenIcon, onBlur: hideFullscreenIcon },
|
|
25
25
|
react_1.default.createElement(uikit_1.Icon, { data: icons_1.Fullscreen, width: FULL_SCREEN_ICON_SIZE, height: FULL_SCREEN_ICON_SIZE, className: b('icon') }))),
|
|
26
26
|
isOpened && (react_1.default.createElement(uikit_1.Modal, { open: isOpened, onClose: closeModal, className: b('modal') },
|
|
27
27
|
react_1.default.createElement("div", { className: b('modal-content') },
|
|
28
|
-
react_1.default.createElement("
|
|
28
|
+
react_1.default.createElement("button", { className: b('icon-wrapper', { visible: true }), onClick: closeModal, "aria-label": (0, i18n_1.default)('close') },
|
|
29
29
|
react_1.default.createElement(uikit_1.Icon, { data: icons_1.PreviewClose, width: CLOSE_ICON_SIZE, height: CLOSE_ICON_SIZE, className: b('icon', { hover: true }) })),
|
|
30
30
|
react_1.default.createElement(Image_1.default, Object.assign({}, props, { className: b('modal-image', modalImageClass) })))))));
|
|
31
31
|
};
|
|
@@ -50,7 +50,7 @@ unpredictable css rules order in build */
|
|
|
50
50
|
transition: opacity 0.3s;
|
|
51
51
|
pointer-events: none;
|
|
52
52
|
}
|
|
53
|
-
.pc-full-screen-media__modal-content
|
|
53
|
+
.pc-full-screen-media__modal-content .pc-full-screen-media__icon-wrapper_visible, .pc-full-screen-media__media-wrapper .pc-full-screen-media__icon-wrapper_visible {
|
|
54
54
|
opacity: 1;
|
|
55
55
|
pointer-events: inherit;
|
|
56
56
|
}
|
|
@@ -13,22 +13,29 @@ const getMediaClass = (type) => b('modal-media', { type });
|
|
|
13
13
|
const FullscreenMedia = ({ children, showFullscreenIcon = true }) => {
|
|
14
14
|
const [isOpened, setIsOpened] = (0, react_1.useState)(false);
|
|
15
15
|
const isMobile = (0, react_1.useContext)(mobileContext_1.MobileContext);
|
|
16
|
+
const [isFullscreenButtonFocused, setIsFullscreenButtonFocused] = (0, react_1.useState)(false);
|
|
16
17
|
const openModal = (e) => {
|
|
17
18
|
e.stopPropagation();
|
|
18
19
|
setIsOpened(true);
|
|
19
20
|
};
|
|
20
21
|
const closeModal = () => setIsOpened(false);
|
|
22
|
+
const onShowFullScreenButton = (0, react_1.useCallback)(() => {
|
|
23
|
+
setIsFullscreenButtonFocused(true);
|
|
24
|
+
}, []);
|
|
25
|
+
const onHideFullScreenButton = (0, react_1.useCallback)(() => {
|
|
26
|
+
setIsFullscreenButtonFocused(false);
|
|
27
|
+
}, []);
|
|
21
28
|
if (isMobile) {
|
|
22
29
|
return children();
|
|
23
30
|
}
|
|
24
31
|
return (react_1.default.createElement("div", { className: b() },
|
|
25
|
-
react_1.default.createElement("div", { className: b('media-wrapper'), onClickCapture: openModal },
|
|
32
|
+
react_1.default.createElement("div", { className: b('media-wrapper'), onClickCapture: openModal, onMouseOver: onShowFullScreenButton, onMouseOut: onHideFullScreenButton },
|
|
26
33
|
children({ className: b('inline-media') }),
|
|
27
|
-
showFullscreenIcon && (react_1.default.createElement(
|
|
34
|
+
showFullscreenIcon && (react_1.default.createElement(uikit_1.Button, { className: b('icon-wrapper', { visible: isFullscreenButtonFocused }), extraProps: { onClickCapture: openModal }, size: 'l', onFocus: onShowFullScreenButton, onBlur: onHideFullScreenButton },
|
|
28
35
|
react_1.default.createElement(uikit_1.Icon, { data: icons_1.Fullscreen, width: FULL_SCREEN_ICON_SIZE, height: FULL_SCREEN_ICON_SIZE, className: b('icon') })))),
|
|
29
36
|
isOpened && (react_1.default.createElement(uikit_1.Modal, { open: isOpened, onClose: closeModal, className: b('modal') },
|
|
30
37
|
react_1.default.createElement("div", { className: b('modal-content') },
|
|
31
|
-
react_1.default.createElement(
|
|
38
|
+
react_1.default.createElement(uikit_1.Button, { className: b('icon-wrapper', { visible: true }), onClick: closeModal, size: 'l' },
|
|
32
39
|
react_1.default.createElement(uikit_1.Icon, { data: icons_1.PreviewClose, width: CLOSE_ICON_SIZE, height: CLOSE_ICON_SIZE, className: b('icon', { hover: true }) })),
|
|
33
40
|
children({
|
|
34
41
|
imageClassName: getMediaClass('image'),
|
|
@@ -10,6 +10,7 @@ unpredictable css rules order in build */
|
|
|
10
10
|
cursor: pointer;
|
|
11
11
|
display: flex;
|
|
12
12
|
align-items: center;
|
|
13
|
+
border-radius: var(--g-focus-border-radius);
|
|
13
14
|
}
|
|
14
15
|
.utilityfocus .pc-link-block__link:focus {
|
|
15
16
|
outline: 2px solid #ffdb4d;
|
|
@@ -18,6 +19,13 @@ unpredictable css rules order in build */
|
|
|
18
19
|
--pc-text-header-color: var(--g-color-text-link-hover);
|
|
19
20
|
color: var(--g-color-text-link-hover);
|
|
20
21
|
}
|
|
22
|
+
.pc-link-block__link:focus {
|
|
23
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
24
|
+
outline-offset: 0;
|
|
25
|
+
}
|
|
26
|
+
.pc-link-block__link:focus:not(:focus-visible) {
|
|
27
|
+
outline: 0;
|
|
28
|
+
}
|
|
21
29
|
.pc-link-block__link_theme_dark {
|
|
22
30
|
color: var(--g-color-text-light-primary);
|
|
23
31
|
}
|
|
@@ -53,7 +53,7 @@ const Image = (props) => {
|
|
|
53
53
|
};
|
|
54
54
|
const imageSlider = (imageArray) => {
|
|
55
55
|
const fullscreenItem = fullscreen === undefined || fullscreen;
|
|
56
|
-
return (react_1.default.createElement(Slider_1.default, { slidesToShow: 1, type: models_1.SliderType.MediaCard }, imageArray.map((item) => fullscreenItem ? renderFullscreenImage(item) : imageOnly(item))));
|
|
56
|
+
return (react_1.default.createElement(Slider_1.default, { slidesToShow: 1, type: models_1.SliderType.MediaCard }, imageArray.map((item, index) => (react_1.default.createElement(react_1.Fragment, { key: index }, fullscreenItem ? renderFullscreenImage(item) : imageOnly(item))))));
|
|
57
57
|
};
|
|
58
58
|
if (Array.isArray(image)) {
|
|
59
59
|
return imageSlider(image);
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
|
2
|
+
unpredictable css rules order in build */
|
|
1
3
|
.pc-overflow-scroller {
|
|
2
4
|
display: flex;
|
|
3
5
|
align-items: center;
|
|
@@ -19,6 +21,15 @@
|
|
|
19
21
|
transition: left 0.6s;
|
|
20
22
|
}
|
|
21
23
|
.pc-overflow-scroller__arrow {
|
|
24
|
+
display: inline-block;
|
|
25
|
+
margin: 0;
|
|
26
|
+
padding: 0;
|
|
27
|
+
font: inherit;
|
|
28
|
+
border: none;
|
|
29
|
+
outline: none;
|
|
30
|
+
color: inherit;
|
|
31
|
+
background: none;
|
|
32
|
+
cursor: pointer;
|
|
22
33
|
position: absolute;
|
|
23
34
|
z-index: 10;
|
|
24
35
|
top: 0;
|
|
@@ -29,6 +40,14 @@
|
|
|
29
40
|
height: calc(100% - 1px);
|
|
30
41
|
cursor: pointer;
|
|
31
42
|
color: var(--g-color-text-secondary);
|
|
43
|
+
border-radius: var(--g-focus-border-radius);
|
|
44
|
+
}
|
|
45
|
+
.pc-overflow-scroller__arrow:focus {
|
|
46
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
47
|
+
outline-offset: 0;
|
|
48
|
+
}
|
|
49
|
+
.pc-overflow-scroller__arrow:focus:not(:focus-visible) {
|
|
50
|
+
outline: 0;
|
|
32
51
|
}
|
|
33
52
|
.pc-overflow-scroller__arrow_type_left {
|
|
34
53
|
left: 0;
|
|
@@ -5,6 +5,7 @@ const react_1 = tslib_1.__importStar(require("react"));
|
|
|
5
5
|
const debounce_1 = tslib_1.__importDefault(require("lodash/debounce"));
|
|
6
6
|
const __1 = require("..");
|
|
7
7
|
const utils_1 = require("../../utils");
|
|
8
|
+
const i18n_1 = tslib_1.__importDefault(require("./i18n"));
|
|
8
9
|
const b = (0, utils_1.block)('overflow-scroller');
|
|
9
10
|
const TRANSITION_TIME = 300;
|
|
10
11
|
const PADDING_SIZE = 24;
|
|
@@ -84,7 +85,7 @@ class OverflowScroller extends react_1.default.Component {
|
|
|
84
85
|
}) },
|
|
85
86
|
react_1.default.createElement("div", { className: b(null, className), ref: this.containerRef },
|
|
86
87
|
react_1.default.createElement("div", { className: b('wrapper'), style: wrapperStyle, ref: this.wrapperRef }, children)),
|
|
87
|
-
arrows.map((direction) => (react_1.default.createElement("
|
|
88
|
+
arrows.map((direction) => (react_1.default.createElement("button", { key: direction, className: b('arrow', { type: direction }, arrowClassName), onClick: (e) => this.handleScrollClick(e, direction), "aria-label": (0, i18n_1.default)(direction) },
|
|
88
89
|
react_1.default.createElement(__1.ToggleArrow, { size: arrowSize, type: 'horizontal', iconType: "navigation" }))))));
|
|
89
90
|
}
|
|
90
91
|
}
|
|
@@ -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 = 'OverflowScroller';
|
|
8
|
+
exports.default = (0, registerKeyset_1.registerKeyset)({ en: en_json_1.default, ru: ru_json_1.default }, COMPONENT);
|
|
@@ -55,10 +55,11 @@ unpredictable css rules order in build */
|
|
|
55
55
|
background: #eff2f8;
|
|
56
56
|
}
|
|
57
57
|
.pc-CustomBarControls__button_type_with-mute-button:focus {
|
|
58
|
-
outline: 2px solid var(--g-color-line-
|
|
58
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
59
|
+
outline-offset: 0;
|
|
59
60
|
}
|
|
60
61
|
.pc-CustomBarControls__button_type_with-mute-button:focus:not(:focus-visible) {
|
|
61
|
-
outline:
|
|
62
|
+
outline: 0;
|
|
62
63
|
}
|
|
63
64
|
.pc-CustomBarControls__button_type_with-play-pause-button {
|
|
64
65
|
width: 42px;
|
|
@@ -67,10 +68,11 @@ unpredictable css rules order in build */
|
|
|
67
68
|
background: var(--g-color-base-background);
|
|
68
69
|
}
|
|
69
70
|
.pc-CustomBarControls__button_type_with-play-pause-button:focus {
|
|
70
|
-
outline: 2px solid var(--g-color-line-
|
|
71
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
72
|
+
outline-offset: 0;
|
|
71
73
|
}
|
|
72
74
|
.pc-CustomBarControls__button_type_with-play-pause-button:focus:not(:focus-visible) {
|
|
73
|
-
outline:
|
|
75
|
+
outline: 0;
|
|
74
76
|
}
|
|
75
77
|
.pc-CustomBarControls__play-icon_type_with-play-pause-button {
|
|
76
78
|
height: 16px;
|
|
@@ -27,6 +27,13 @@ unpredictable css rules order in build */
|
|
|
27
27
|
height: 64px;
|
|
28
28
|
border-radius: 166px;
|
|
29
29
|
}
|
|
30
|
+
.pc-ReactPlayer__button:focus {
|
|
31
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
32
|
+
outline-offset: 0;
|
|
33
|
+
}
|
|
34
|
+
.pc-ReactPlayer__button:focus:not(:focus-visible) {
|
|
35
|
+
outline: 0;
|
|
36
|
+
}
|
|
30
37
|
.pc-ReactPlayer__button_theme_blue {
|
|
31
38
|
color: var(--g-color-base-background);
|
|
32
39
|
background-color: var(--g-color-base-brand);
|
|
@@ -219,7 +219,7 @@ exports.ReactPlayerBlock = react_1.default.forwardRef((props, originRef) => {
|
|
|
219
219
|
}, className), ref: ref, onClick: handleClick, onMouseEnter: onFocusIn, onMouseLeave: onFocusOut, onFocus: onFocusIn, onBlur: onFocusOut }, isMounted ? (react_1.default.createElement(react_1.Fragment, null,
|
|
220
220
|
react_1.default.createElement(react_player_1.default, { className: b('player'), url: videoSrc, muted: muted, controls: controls === models_1.MediaVideoControlsType.Default, height: currentHeight || '100%', width: width || '100%', light: previewImgUrl, playing: isPlaying, playIcon: playIcon, progressInterval: FPS, onClickPreview: handleClickPreview, onStart: onStart, onReady: setPlayerRef, onPlay: onPlay, onPause: autoPlay && customControlsType !== models_1.CustomControlsType.WithMuteButton
|
|
221
221
|
? undefined
|
|
222
|
-
: onPause, onProgress: onProgress, onEnded: onEnded, "aria-label": ariaLabel }),
|
|
222
|
+
: onPause, onProgress: onProgress, onEnded: onEnded, "aria-label": ariaLabel, previewTabIndex: -1 }),
|
|
223
223
|
controls === models_1.MediaVideoControlsType.Custom && (react_1.default.createElement(CustomBarControls_1.default, { className: customBarControlsClassName, mute: {
|
|
224
224
|
isMuted: muted,
|
|
225
225
|
changeMute: (event) => {
|
|
@@ -62,11 +62,19 @@ unpredictable css rules order in build */
|
|
|
62
62
|
color: inherit;
|
|
63
63
|
text-decoration: none;
|
|
64
64
|
padding-right: 8px;
|
|
65
|
+
border-radius: var(--g-focus-border-radius);
|
|
65
66
|
}
|
|
66
67
|
.pc-title-item__link:hover, .pc-title-item__link:active {
|
|
67
68
|
--pc-text-header-color: inherit;
|
|
68
69
|
color: inherit;
|
|
69
70
|
}
|
|
71
|
+
.pc-title-item__link:focus {
|
|
72
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
73
|
+
outline-offset: 0;
|
|
74
|
+
}
|
|
75
|
+
.pc-title-item__link:focus:not(:focus-visible) {
|
|
76
|
+
outline: 0;
|
|
77
|
+
}
|
|
70
78
|
.pc-title-item__link:hover {
|
|
71
79
|
cursor: pointer;
|
|
72
80
|
}
|
|
@@ -43,6 +43,13 @@ unpredictable css rules order in build */
|
|
|
43
43
|
background-color: var(--g-color-base-brand);
|
|
44
44
|
border-radius: 50%;
|
|
45
45
|
}
|
|
46
|
+
.pc-VideoBlock__button:focus {
|
|
47
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
48
|
+
outline-offset: 0;
|
|
49
|
+
}
|
|
50
|
+
.pc-VideoBlock__button:focus:not(:focus-visible) {
|
|
51
|
+
outline: 0;
|
|
52
|
+
}
|
|
46
53
|
.pc-VideoBlock__icon {
|
|
47
54
|
margin-left: 6px;
|
|
48
55
|
}
|
|
@@ -41,12 +41,14 @@ unpredictable css rules order in build */
|
|
|
41
41
|
--pc-color-base-gold: #ffdb4d;
|
|
42
42
|
--pc-color-base-asphalt: #313538;
|
|
43
43
|
--pc-color-base-copper: #ffe6c4;
|
|
44
|
+
--g-color-line-focus: var(--g-color-text-brand);
|
|
44
45
|
}
|
|
45
46
|
.g-root_theme_dark {
|
|
46
47
|
--pc-color-base-silver: #bcc0c4;
|
|
47
48
|
--pc-color-base-gold: #ffde5d;
|
|
48
49
|
--pc-color-base-asphalt: #474d52;
|
|
49
50
|
--pc-color-base-copper: #7f7262;
|
|
51
|
+
--g-color-line-focus: var(--g-color-text-light-primary);
|
|
50
52
|
}
|
|
51
53
|
.g-root.g-root_theme_dark {
|
|
52
54
|
--pc-color-sfx-shadow: var(--g-color-sfx-shadow);
|
|
@@ -124,6 +126,7 @@ unpredictable css rules order in build */
|
|
|
124
126
|
color: var(--g-color-text-link);
|
|
125
127
|
text-decoration: none;
|
|
126
128
|
cursor: pointer;
|
|
129
|
+
border-radius: var(--g-focus-border-radius);
|
|
127
130
|
}
|
|
128
131
|
.utilityfocus .yfm_constructor a:focus {
|
|
129
132
|
outline: 2px solid #ffdb4d;
|
|
@@ -132,6 +135,12 @@ unpredictable css rules order in build */
|
|
|
132
135
|
--pc-text-header-color: var(--g-color-text-link-hover);
|
|
133
136
|
color: var(--g-color-text-link-hover);
|
|
134
137
|
}
|
|
138
|
+
.yfm_constructor a:focus {
|
|
139
|
+
box-shadow: 0 0 0 2px var(--g-color-line-focus);
|
|
140
|
+
}
|
|
141
|
+
.yfm_constructor a:focus:not(:focus-visible) {
|
|
142
|
+
box-shadow: none;
|
|
143
|
+
}
|
|
135
144
|
.yfm_constructor table {
|
|
136
145
|
color: var(--g-color-text-primary);
|
|
137
146
|
border: 1px solid var(--g-color-line-generic);
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
/* use this for style redefinitions to awoid problems with
|
|
6
6
|
unpredictable css rules order in build */
|
|
7
|
+
.pc-banner-card_theme_dark {
|
|
8
|
+
--g-color-line-focus: var(--g-color-text-light-primary);
|
|
9
|
+
}
|
|
7
10
|
.pc-banner-card_theme_dark.pc-banner-card_theme_dark .pc-banner-card__title,
|
|
8
11
|
.pc-banner-card_theme_dark.pc-banner-card_theme_dark .pc-banner-card__subtitle {
|
|
9
12
|
color: var(--g-color-text-light-primary);
|
|
@@ -91,6 +91,9 @@ unpredictable css rules order in build */
|
|
|
91
91
|
.pc-content_size_l .pc-content__button {
|
|
92
92
|
margin-top: 12px;
|
|
93
93
|
}
|
|
94
|
+
.pc-content_theme_dark {
|
|
95
|
+
--g-color-line-focus: var(--g-color-text-light-primary);
|
|
96
|
+
}
|
|
94
97
|
.pc-content_theme_dark .pc-content__title *,
|
|
95
98
|
.pc-content_theme_dark .pc-content__text .yfm,
|
|
96
99
|
.pc-content_theme_dark .pc-content__text .yfm *,
|
|
@@ -301,6 +301,13 @@ unpredictable css rules order in build */
|
|
|
301
301
|
white-space: nowrap;
|
|
302
302
|
appearance: none;
|
|
303
303
|
}
|
|
304
|
+
.pc-hubspot-form .hs-button.primary:focus {
|
|
305
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
306
|
+
outline-offset: 1px;
|
|
307
|
+
}
|
|
308
|
+
.pc-hubspot-form .hs-button.primary:focus:not(:focus-visible) {
|
|
309
|
+
outline: 0;
|
|
310
|
+
}
|
|
304
311
|
.pc-hubspot-form .hs-button.primary:hover {
|
|
305
312
|
background-color: var(--g-color-base-brand-hover);
|
|
306
313
|
}
|