@gravity-ui/page-constructor 5.31.2 → 6.0.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/README.md +6 -0
- package/build/cjs/blocks/ExtendedFeatures/ExtendedFeatures.css +11 -6
- package/build/cjs/blocks/ExtendedFeatures/ExtendedFeatures.js +3 -6
- package/build/cjs/blocks/Header/Header.css +15 -10
- package/build/cjs/blocks/Header/Header.js +8 -4
- package/build/cjs/blocks/HeaderSlider/HeaderSlider.css +0 -10
- package/build/cjs/blocks/HeaderSlider/HeaderSlider.js +2 -2
- package/build/cjs/blocks/HeaderSlider/schema.d.ts +9 -1
- package/build/cjs/blocks/Questions/QuestionBlockItem/QuestionBlockItem.css +43 -21
- package/build/cjs/blocks/Questions/QuestionBlockItem/QuestionBlockItem.js +5 -3
- package/build/cjs/blocks/Slider/Arrow/Arrow.css +22 -21
- package/build/cjs/blocks/Slider/Arrow/Arrow.d.ts +5 -2
- package/build/cjs/blocks/Slider/Arrow/Arrow.js +5 -4
- package/build/cjs/blocks/Slider/Slider.css +549 -329
- package/build/cjs/blocks/Slider/Slider.d.ts +6 -6
- package/build/cjs/blocks/Slider/Slider.js +40 -282
- package/build/cjs/blocks/Slider/i18n/en.json +1 -1
- package/build/cjs/blocks/Slider/i18n/ru.json +1 -1
- package/build/cjs/blocks/Slider/models.d.ts +2 -2
- package/build/cjs/blocks/Slider/models.js +1 -1
- package/build/cjs/blocks/Slider/schema.d.ts +18 -1
- package/build/cjs/blocks/Slider/schema.js +9 -0
- package/build/cjs/blocks/{SliderNew → Slider}/useSlider.d.ts +1 -0
- package/build/cjs/blocks/{SliderNew → Slider}/useSlider.js +4 -0
- package/build/cjs/blocks/Slider/utils.d.ts +7 -27
- package/build/cjs/blocks/Slider/utils.js +26 -108
- package/build/cjs/blocks/{SliderNew → SliderOld}/Arrow/Arrow.css +15 -12
- package/build/cjs/blocks/SliderOld/Arrow/Arrow.d.ts +9 -0
- package/build/cjs/blocks/{SliderNew → SliderOld}/Arrow/Arrow.js +3 -3
- package/build/cjs/blocks/SliderOld/SliderOld.css +703 -0
- package/build/cjs/blocks/SliderOld/SliderOld.d.ts +17 -0
- package/build/cjs/blocks/SliderOld/SliderOld.js +301 -0
- package/build/cjs/blocks/{SliderNew → SliderOld}/i18n/en.json +1 -1
- package/build/cjs/blocks/{SliderNew → SliderOld}/i18n/index.js +1 -1
- package/build/cjs/blocks/{SliderNew → SliderOld}/i18n/ru.json +1 -1
- package/build/cjs/blocks/{SliderNew → SliderOld}/models.d.ts +2 -2
- package/build/cjs/blocks/{SliderNew → SliderOld}/models.js +1 -1
- package/build/cjs/blocks/{SliderNew → SliderOld}/schema.d.ts +5 -21
- package/build/cjs/blocks/{SliderNew → SliderOld}/schema.js +6 -14
- package/build/cjs/blocks/SliderOld/utils.d.ts +36 -0
- package/build/cjs/blocks/SliderOld/utils.js +125 -0
- package/build/cjs/blocks/index.d.ts +1 -0
- package/build/cjs/blocks/index.js +3 -1
- package/build/cjs/blocks/validators.d.ts +1 -0
- package/build/cjs/blocks/validators.js +1 -0
- package/build/cjs/components/ContentList/ContentList.css +5 -4
- package/build/cjs/components/ContentList/ContentList.js +1 -1
- package/build/cjs/components/FullscreenImage/FullscreenImage.css +96 -18
- package/build/cjs/components/FullscreenImage/FullscreenImage.d.ts +5 -0
- package/build/cjs/components/FullscreenImage/FullscreenImage.js +19 -5
- package/build/cjs/components/HTML/HTML.d.ts +16 -9
- package/build/cjs/components/HTML/HTML.js +16 -11
- package/build/cjs/components/Media/Image/Image.d.ts +1 -0
- package/build/cjs/components/Media/Image/Image.js +7 -5
- package/build/cjs/components/Media/Media.css +4 -0
- package/build/cjs/components/Media/Media.d.ts +1 -0
- package/build/cjs/components/Media/Media.js +3 -2
- package/build/cjs/components/MetaInfo/MetaInfo.css +1 -1
- package/build/cjs/components/MetaInfo/MetaInfo.js +1 -1
- package/build/cjs/components/Table/Table.css +2 -1
- package/build/cjs/components/Table/Table.js +4 -2
- package/build/cjs/components/Title/TitleItem.css +6 -4
- package/build/cjs/components/Title/TitleItem.js +3 -1
- package/build/cjs/components/YFMWrapper/YFMWrapper.d.ts +4 -2
- package/build/cjs/components/YFMWrapper/YFMWrapper.js +4 -1
- package/build/cjs/constructor-items.d.ts +2 -2
- package/build/cjs/constructor-items.js +2 -4
- package/build/cjs/editor/data/templates/{slider-new-block.json → slider-old-block.json} +2 -2
- package/build/cjs/models/common.d.ts +1 -0
- package/build/cjs/models/constructor-items/blocks.d.ts +17 -15
- package/build/cjs/models/constructor-items/blocks.js +3 -2
- package/build/cjs/schema/constants.d.ts +0 -1
- package/build/cjs/schema/constants.js +3 -1
- package/build/cjs/schema/validators/blocks.d.ts +2 -2
- package/build/cjs/schema/validators/blocks.js +2 -2
- package/build/cjs/sub-blocks/BannerCard/BannerCard.css +10 -8
- package/build/cjs/sub-blocks/BannerCard/BannerCard.js +4 -3
- package/build/cjs/sub-blocks/Content/Content.js +1 -1
- package/build/cjs/sub-blocks/PriceCard/PriceCard.css +2 -1
- package/build/cjs/sub-blocks/PriceCard/PriceCard.js +1 -1
- package/build/cjs/sub-blocks/Quote/Quote.css +8 -4
- package/build/cjs/sub-blocks/Quote/Quote.js +2 -4
- package/build/cjs/text-transform/config.js +1 -1
- package/build/cjs/utils/blocks.d.ts +10 -2
- package/build/cjs/utils/blocks.js +10 -4
- package/build/esm/blocks/ExtendedFeatures/ExtendedFeatures.css +11 -6
- package/build/esm/blocks/ExtendedFeatures/ExtendedFeatures.js +4 -7
- package/build/esm/blocks/Header/Header.css +15 -10
- package/build/esm/blocks/Header/Header.js +9 -5
- package/build/esm/blocks/HeaderSlider/HeaderSlider.css +0 -10
- package/build/esm/blocks/HeaderSlider/HeaderSlider.js +1 -1
- package/build/esm/blocks/HeaderSlider/schema.d.ts +9 -1
- package/build/esm/blocks/Questions/QuestionBlockItem/QuestionBlockItem.css +43 -21
- package/build/esm/blocks/Questions/QuestionBlockItem/QuestionBlockItem.js +6 -4
- package/build/esm/blocks/Slider/Arrow/Arrow.css +22 -21
- package/build/esm/blocks/Slider/Arrow/Arrow.d.ts +5 -2
- package/build/esm/blocks/Slider/Arrow/Arrow.js +5 -4
- package/build/esm/blocks/Slider/Slider.css +549 -329
- package/build/esm/blocks/Slider/Slider.d.ts +6 -6
- package/build/esm/blocks/Slider/Slider.js +42 -284
- package/build/esm/blocks/Slider/i18n/en.json +1 -1
- package/build/esm/blocks/Slider/i18n/ru.json +1 -1
- package/build/esm/blocks/Slider/models.d.ts +2 -2
- package/build/esm/blocks/Slider/models.js +1 -1
- package/build/esm/blocks/Slider/schema.d.ts +18 -1
- package/build/esm/blocks/Slider/schema.js +9 -0
- package/build/esm/blocks/{SliderNew → Slider}/useSlider.d.ts +1 -0
- package/build/esm/blocks/{SliderNew → Slider}/useSlider.js +5 -1
- package/build/esm/blocks/Slider/utils.d.ts +7 -27
- package/build/esm/blocks/Slider/utils.js +24 -103
- package/build/esm/blocks/{SliderNew → SliderOld}/Arrow/Arrow.css +15 -12
- package/build/esm/blocks/SliderOld/Arrow/Arrow.d.ts +10 -0
- package/build/esm/blocks/{SliderNew → SliderOld}/Arrow/Arrow.js +3 -3
- package/build/esm/blocks/SliderOld/SliderOld.css +703 -0
- package/build/esm/blocks/SliderOld/SliderOld.d.ts +18 -0
- package/build/esm/blocks/SliderOld/SliderOld.js +297 -0
- package/build/esm/blocks/{SliderNew → SliderOld}/i18n/en.json +1 -1
- package/build/esm/blocks/{SliderNew → SliderOld}/i18n/index.js +1 -1
- package/build/esm/blocks/{SliderNew → SliderOld}/i18n/ru.json +1 -1
- package/build/esm/blocks/{SliderNew → SliderOld}/models.d.ts +2 -2
- package/build/esm/blocks/{SliderNew → SliderOld}/models.js +1 -1
- package/build/esm/blocks/{SliderNew → SliderOld}/schema.d.ts +5 -21
- package/build/esm/blocks/{SliderNew → SliderOld}/schema.js +5 -13
- package/build/esm/blocks/SliderOld/utils.d.ts +36 -0
- package/build/esm/blocks/SliderOld/utils.js +115 -0
- package/build/esm/blocks/index.d.ts +1 -0
- package/build/esm/blocks/index.js +1 -0
- package/build/esm/blocks/validators.d.ts +1 -0
- package/build/esm/blocks/validators.js +1 -0
- package/build/esm/components/ContentList/ContentList.css +5 -4
- package/build/esm/components/ContentList/ContentList.js +1 -1
- package/build/esm/components/FullscreenImage/FullscreenImage.css +96 -18
- package/build/esm/components/FullscreenImage/FullscreenImage.d.ts +5 -0
- package/build/esm/components/FullscreenImage/FullscreenImage.js +20 -6
- package/build/esm/components/HTML/HTML.d.ts +16 -9
- package/build/esm/components/HTML/HTML.js +18 -12
- package/build/esm/components/Media/Image/Image.d.ts +1 -0
- package/build/esm/components/Media/Image/Image.js +7 -5
- package/build/esm/components/Media/Media.css +4 -0
- package/build/esm/components/Media/Media.d.ts +1 -0
- package/build/esm/components/Media/Media.js +3 -2
- package/build/esm/components/MetaInfo/MetaInfo.css +1 -1
- package/build/esm/components/MetaInfo/MetaInfo.js +1 -1
- package/build/esm/components/Table/Table.css +2 -1
- package/build/esm/components/Table/Table.js +5 -3
- package/build/esm/components/Title/TitleItem.css +6 -4
- package/build/esm/components/Title/TitleItem.js +4 -2
- package/build/esm/components/YFMWrapper/YFMWrapper.d.ts +4 -2
- package/build/esm/components/YFMWrapper/YFMWrapper.js +5 -1
- package/build/esm/constructor-items.d.ts +2 -2
- package/build/esm/constructor-items.js +3 -5
- package/build/esm/editor/data/templates/{slider-new-block.json → slider-old-block.json} +2 -2
- package/build/esm/models/common.d.ts +1 -0
- package/build/esm/models/constructor-items/blocks.d.ts +17 -15
- package/build/esm/models/constructor-items/blocks.js +3 -2
- package/build/esm/schema/constants.d.ts +0 -1
- package/build/esm/schema/constants.js +4 -2
- package/build/esm/schema/validators/blocks.d.ts +2 -2
- package/build/esm/schema/validators/blocks.js +2 -2
- package/build/esm/sub-blocks/BannerCard/BannerCard.css +10 -8
- package/build/esm/sub-blocks/BannerCard/BannerCard.js +5 -4
- package/build/esm/sub-blocks/Content/Content.js +1 -1
- package/build/esm/sub-blocks/PriceCard/PriceCard.css +2 -1
- package/build/esm/sub-blocks/PriceCard/PriceCard.js +2 -2
- package/build/esm/sub-blocks/Quote/Quote.css +8 -4
- package/build/esm/sub-blocks/Quote/Quote.js +3 -5
- package/build/esm/text-transform/config.js +1 -1
- package/build/esm/utils/blocks.d.ts +10 -2
- package/build/esm/utils/blocks.js +8 -2
- package/package.json +2 -2
- package/schema/index.js +1 -1
- package/server/models/common.d.ts +1 -0
- package/server/models/constructor-items/blocks.d.ts +17 -15
- package/server/models/constructor-items/blocks.js +3 -2
- package/server/text-transform/config.js +1 -1
- package/server/utils/blocks.d.ts +10 -2
- package/server/utils/blocks.js +10 -4
- package/styles/fonts.scss +1 -0
- package/styles/styles.css +0 -1
- package/styles/styles.scss +0 -1
- package/styles/variables.scss +1 -0
- package/widget/index.js +1 -1
- package/build/cjs/blocks/SliderNew/Arrow/Arrow.d.ts +0 -11
- package/build/cjs/blocks/SliderNew/Slider.css +0 -834
- package/build/cjs/blocks/SliderNew/Slider.d.ts +0 -13
- package/build/cjs/blocks/SliderNew/Slider.js +0 -56
- package/build/cjs/blocks/SliderNew/utils.d.ts +0 -16
- package/build/cjs/blocks/SliderNew/utils.js +0 -43
- package/build/cjs/blocks/unstable.d.ts +0 -1
- package/build/cjs/blocks/unstable.js +0 -8
- package/build/esm/blocks/SliderNew/Arrow/Arrow.d.ts +0 -12
- package/build/esm/blocks/SliderNew/Slider.css +0 -834
- package/build/esm/blocks/SliderNew/Slider.d.ts +0 -14
- package/build/esm/blocks/SliderNew/Slider.js +0 -52
- package/build/esm/blocks/SliderNew/utils.d.ts +0 -16
- package/build/esm/blocks/SliderNew/utils.js +0 -36
- package/build/esm/blocks/unstable.d.ts +0 -1
- package/build/esm/blocks/unstable.js +0 -1
- /package/build/cjs/blocks/{SliderNew → Slider}/useSliderPagination.d.ts +0 -0
- /package/build/cjs/blocks/{SliderNew → Slider}/useSliderPagination.js +0 -0
- /package/build/cjs/blocks/{SliderNew → SliderOld}/i18n/index.d.ts +0 -0
- /package/build/cjs/blocks/{Slider → SliderOld}/slick.css +0 -0
- /package/build/esm/blocks/{SliderNew → Slider}/useSliderPagination.d.ts +0 -0
- /package/build/esm/blocks/{SliderNew → Slider}/useSliderPagination.js +0 -0
- /package/build/esm/blocks/{SliderNew → SliderOld}/i18n/index.d.ts +0 -0
- /package/build/esm/blocks/{Slider → SliderOld}/slick.css +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Settings } from 'react-slick';
|
|
3
|
+
import { ClassNameProps, Refable, SliderOldProps as SliderParams } from '../../models';
|
|
4
|
+
/** @deprecated */
|
|
5
|
+
export interface SliderOldProps extends Omit<SliderParams, 'children'>, Refable<HTMLDivElement>, ClassNameProps, Pick<Settings, 'lazyLoad'> {
|
|
6
|
+
type?: string;
|
|
7
|
+
anchorId?: string;
|
|
8
|
+
onAfterChange?: (index: number) => void;
|
|
9
|
+
onBeforeChange?: (current: number, next: number) => void;
|
|
10
|
+
dotsClassName?: string;
|
|
11
|
+
blockClassName?: string;
|
|
12
|
+
arrowSize?: number;
|
|
13
|
+
initialIndex?: number;
|
|
14
|
+
}
|
|
15
|
+
/** @deprecated */
|
|
16
|
+
export declare const SliderOldBlock: (props: React.PropsWithChildren<SliderOldProps>) => JSX.Element;
|
|
17
|
+
export default SliderOldBlock;
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SliderOldBlock = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
|
7
|
+
const debounce_1 = tslib_1.__importDefault(require("lodash/debounce"));
|
|
8
|
+
const get_1 = tslib_1.__importDefault(require("lodash/get"));
|
|
9
|
+
const noop_1 = tslib_1.__importDefault(require("lodash/noop"));
|
|
10
|
+
const react_slick_1 = tslib_1.__importDefault(require("react-slick"));
|
|
11
|
+
const Anchor_1 = tslib_1.__importDefault(require("../../components/Anchor/Anchor"));
|
|
12
|
+
const AnimateBlock_1 = tslib_1.__importDefault(require("../../components/AnimateBlock/AnimateBlock"));
|
|
13
|
+
const OutsideClick_1 = tslib_1.__importDefault(require("../../components/OutsideClick/OutsideClick"));
|
|
14
|
+
const Title_1 = tslib_1.__importDefault(require("../../components/Title/Title"));
|
|
15
|
+
const constants_1 = require("../../constants");
|
|
16
|
+
const mobileContext_1 = require("../../context/mobileContext");
|
|
17
|
+
const ssrContext_1 = require("../../context/ssrContext");
|
|
18
|
+
const StylesContext_1 = require("../../context/stylesContext/StylesContext");
|
|
19
|
+
const useFocus_1 = tslib_1.__importDefault(require("../../hooks/useFocus"));
|
|
20
|
+
const models_1 = require("../../models");
|
|
21
|
+
const utils_1 = require("../../utils");
|
|
22
|
+
const Arrow_1 = tslib_1.__importDefault(require("./Arrow/Arrow"));
|
|
23
|
+
const i18n_1 = require("./i18n");
|
|
24
|
+
const utils_2 = require("./utils");
|
|
25
|
+
const b = (0, utils_1.block)('SliderOldBlock');
|
|
26
|
+
const slick = (0, utils_1.block)('slick-origin');
|
|
27
|
+
const DOT_WIDTH = 8;
|
|
28
|
+
const DOT_GAP = 16;
|
|
29
|
+
// eslint-disable-next-line valid-jsdoc
|
|
30
|
+
/** @deprecated */
|
|
31
|
+
const SliderOldBlock = (props) => {
|
|
32
|
+
var _a;
|
|
33
|
+
const { animated, title, description, type, anchorId, arrows = true, adaptive, autoplay: autoplaySpeed, dots = true, dotsClassName, disclaimer, children, className, blockClassName, lazyLoad, arrowSize, onAfterChange: handleAfterChange, onBeforeChange: handleBeforeChange, initialIndex = 0, } = props;
|
|
34
|
+
const { isServer } = (0, react_1.useContext)(ssrContext_1.SSRContext);
|
|
35
|
+
const isMobile = (0, react_1.useContext)(mobileContext_1.MobileContext);
|
|
36
|
+
const [breakpoint, setBreakpoint] = (0, react_1.useState)(constants_1.BREAKPOINTS.xl);
|
|
37
|
+
const sliderId = (0, uikit_1.useUniqId)();
|
|
38
|
+
const disclosedChildren = (0, react_1.useMemo)(() => discloseAllNestedChildren(children, sliderId), [children, sliderId]);
|
|
39
|
+
const childrenCount = disclosedChildren.length;
|
|
40
|
+
const isAutoplayEnabled = autoplaySpeed !== undefined && autoplaySpeed > 0;
|
|
41
|
+
const isUserInteractionRef = (0, react_1.useRef)(false);
|
|
42
|
+
const [slidesToShow] = (0, react_1.useState)((0, utils_2.getSlidesToShowWithDefaults)({
|
|
43
|
+
contentLength: childrenCount,
|
|
44
|
+
breakpoints: props.slidesToShow,
|
|
45
|
+
mobileFullscreen: Boolean(props.type && Object.values(models_1.SliderType).includes(props.type)),
|
|
46
|
+
}));
|
|
47
|
+
const slidesToShowCount = (0, utils_2.getSlidesToShowCount)(slidesToShow);
|
|
48
|
+
const slidesCountByBreakpoint = (0, utils_2.getSlidesCountByBreakpoint)(breakpoint, slidesToShow);
|
|
49
|
+
const [currentIndex, setCurrentIndex] = (0, react_1.useState)(initialIndex);
|
|
50
|
+
const [childStyles, setChildStyles] = (0, react_1.useState)({});
|
|
51
|
+
const [slider, setSlider] = (0, react_1.useState)();
|
|
52
|
+
const prevIndexRef = (0, react_1.useRef)(0);
|
|
53
|
+
const autoplayTimeId = (0, react_1.useRef)();
|
|
54
|
+
const { hasFocus, unsetFocus } = (0, useFocus_1.default)((_a = slider === null || slider === void 0 ? void 0 : slider.innerSlider) === null || _a === void 0 ? void 0 : _a.list);
|
|
55
|
+
const asUserInteraction = (fn) => (...args) => {
|
|
56
|
+
isUserInteractionRef.current = true;
|
|
57
|
+
return fn(...args);
|
|
58
|
+
};
|
|
59
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
60
|
+
const onResize = (0, react_1.useCallback)((0, debounce_1.default)(() => {
|
|
61
|
+
if (!slider) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const newBreakpoint = (0, get_1.default)(slider, 'state.breakpoint') || constants_1.BREAKPOINTS.xl;
|
|
65
|
+
if (newBreakpoint !== breakpoint) {
|
|
66
|
+
setBreakpoint(newBreakpoint);
|
|
67
|
+
setCurrentIndex(0);
|
|
68
|
+
slider.slickGoTo(0);
|
|
69
|
+
}
|
|
70
|
+
}, 100), [slider, breakpoint]);
|
|
71
|
+
const scrollLastSlide = (0, react_1.useCallback)((current) => {
|
|
72
|
+
const lastSlide = childrenCount - slidesToShowCount;
|
|
73
|
+
if (isAutoplayEnabled && lastSlide === current) {
|
|
74
|
+
// Slick doesn't support autoplay with no infinity scroll
|
|
75
|
+
autoplayTimeId.current = setTimeout(() => {
|
|
76
|
+
if (slider) {
|
|
77
|
+
slider.slickGoTo(0, false);
|
|
78
|
+
slider.slickPause();
|
|
79
|
+
}
|
|
80
|
+
setTimeout(() => {
|
|
81
|
+
if (slider) {
|
|
82
|
+
slider.slickPlay();
|
|
83
|
+
}
|
|
84
|
+
}, 500);
|
|
85
|
+
}, autoplaySpeed);
|
|
86
|
+
}
|
|
87
|
+
}, [autoplaySpeed, childrenCount, isAutoplayEnabled, slider, slidesToShowCount]);
|
|
88
|
+
(0, react_1.useEffect)(() => {
|
|
89
|
+
if (hasFocus && autoplayTimeId.current) {
|
|
90
|
+
clearTimeout(autoplayTimeId.current);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
scrollLastSlide(currentIndex);
|
|
94
|
+
}
|
|
95
|
+
}, [currentIndex, hasFocus, scrollLastSlide]);
|
|
96
|
+
(0, react_1.useEffect)(() => {
|
|
97
|
+
onResize();
|
|
98
|
+
window.addEventListener('resize', onResize, { passive: true });
|
|
99
|
+
return () => window.removeEventListener('resize', onResize);
|
|
100
|
+
}, [onResize]);
|
|
101
|
+
const handleArrowClick = (direction) => {
|
|
102
|
+
let nextIndex;
|
|
103
|
+
if (direction === 'right') {
|
|
104
|
+
nextIndex =
|
|
105
|
+
currentIndex === childrenCount - slidesCountByBreakpoint ? 0 : currentIndex + 1;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
nextIndex =
|
|
109
|
+
currentIndex === 0 ? childrenCount - slidesCountByBreakpoint : currentIndex - 1;
|
|
110
|
+
}
|
|
111
|
+
if (slider) {
|
|
112
|
+
slider.slickGoTo(nextIndex);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
const onBeforeChange = (0, react_1.useCallback)((current, next) => {
|
|
116
|
+
if (handleBeforeChange) {
|
|
117
|
+
handleBeforeChange(current, next);
|
|
118
|
+
}
|
|
119
|
+
prevIndexRef.current = current;
|
|
120
|
+
setCurrentIndex(Math.ceil(next));
|
|
121
|
+
}, [handleBeforeChange]);
|
|
122
|
+
const onAfterChange = (0, react_1.useCallback)((current) => {
|
|
123
|
+
if (handleAfterChange) {
|
|
124
|
+
handleAfterChange(current);
|
|
125
|
+
}
|
|
126
|
+
if (autoplayTimeId.current) {
|
|
127
|
+
clearTimeout(autoplayTimeId.current);
|
|
128
|
+
}
|
|
129
|
+
if (!hasFocus) {
|
|
130
|
+
scrollLastSlide(current);
|
|
131
|
+
}
|
|
132
|
+
if (isUserInteractionRef.current) {
|
|
133
|
+
const focusIndex = prevIndexRef.current >= current
|
|
134
|
+
? current
|
|
135
|
+
: Math.max(current, prevIndexRef.current + slidesCountByBreakpoint);
|
|
136
|
+
const firstNewSlide = document.getElementById(getSlideId(sliderId, focusIndex));
|
|
137
|
+
if (firstNewSlide) {
|
|
138
|
+
const focusableChild = Array.from(firstNewSlide.querySelectorAll('*')).find(utils_2.isFocusable);
|
|
139
|
+
focusableChild === null || focusableChild === void 0 ? void 0 : focusableChild.focus();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
isUserInteractionRef.current = false;
|
|
143
|
+
}, [handleAfterChange, hasFocus, scrollLastSlide, sliderId, slidesCountByBreakpoint]);
|
|
144
|
+
const handleDotClick = (index) => {
|
|
145
|
+
const nextIndex = index > currentIndex ? index + 1 - slidesCountByBreakpoint : index;
|
|
146
|
+
if (slider) {
|
|
147
|
+
slider.slickGoTo(nextIndex);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
const barSlidesCount = childrenCount - slidesCountByBreakpoint + 1;
|
|
151
|
+
const barPosition = (DOT_GAP + DOT_WIDTH) * currentIndex;
|
|
152
|
+
const barWidth = DOT_WIDTH + (DOT_GAP + DOT_WIDTH) * (slidesCountByBreakpoint - 1);
|
|
153
|
+
const { getRovingItemProps, rovingListProps } = (0, utils_2.useRovingTabIndex)({
|
|
154
|
+
itemCount: barSlidesCount,
|
|
155
|
+
activeIndex: currentIndex + 1,
|
|
156
|
+
firstIndex: 1,
|
|
157
|
+
uniqId: sliderId,
|
|
158
|
+
});
|
|
159
|
+
const renderBar = () => {
|
|
160
|
+
return (slidesCountByBreakpoint > 1 && (react_1.default.createElement("li", { className: b('bar'), style: {
|
|
161
|
+
left: barPosition,
|
|
162
|
+
width: barWidth,
|
|
163
|
+
} })));
|
|
164
|
+
};
|
|
165
|
+
// renders additional bar, not visible in the layout but visible for screenreaders
|
|
166
|
+
const renderAccessibleBar = (index) => {
|
|
167
|
+
return (
|
|
168
|
+
// To have this key differ from keys used in renderDot function, added `-accessible-bar` part
|
|
169
|
+
react_1.default.createElement(react_1.Fragment, { key: `${index}-accessible-bar` }, slidesCountByBreakpoint > 0 && (react_1.default.createElement("li", Object.assign({ className: b('accessible-bar'), role: "menuitemradio", "aria-checked": true, "aria-label": (0, i18n_1.i18n)('dot-label', {
|
|
170
|
+
index: currentIndex + 1,
|
|
171
|
+
count: barSlidesCount,
|
|
172
|
+
}), style: {
|
|
173
|
+
left: barPosition,
|
|
174
|
+
width: barWidth,
|
|
175
|
+
} }, getRovingItemProps(currentIndex + 1))))));
|
|
176
|
+
};
|
|
177
|
+
const getCurrentSlideNumber = (index) => {
|
|
178
|
+
const currentIndexDiff = index - currentIndex;
|
|
179
|
+
let currentSlideNumber;
|
|
180
|
+
if (0 <= currentIndexDiff && currentIndexDiff < slidesCountByBreakpoint) {
|
|
181
|
+
currentSlideNumber = currentIndex + 1;
|
|
182
|
+
}
|
|
183
|
+
else if (currentIndexDiff >= slidesCountByBreakpoint) {
|
|
184
|
+
currentSlideNumber = index - slidesCountByBreakpoint + 2;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
currentSlideNumber = index + 1;
|
|
188
|
+
}
|
|
189
|
+
return currentSlideNumber;
|
|
190
|
+
};
|
|
191
|
+
const isVisibleSlide = (index) => {
|
|
192
|
+
const currentIndexDiff = index - currentIndex;
|
|
193
|
+
const result = slidesCountByBreakpoint > 0 &&
|
|
194
|
+
0 <= currentIndexDiff &&
|
|
195
|
+
currentIndexDiff < slidesCountByBreakpoint;
|
|
196
|
+
return result;
|
|
197
|
+
};
|
|
198
|
+
const renderDot = (index) => {
|
|
199
|
+
const isVisible = isVisibleSlide(index);
|
|
200
|
+
const currentSlideNumber = getCurrentSlideNumber(index);
|
|
201
|
+
const rovingItemProps = isVisible ? undefined : getRovingItemProps(currentSlideNumber);
|
|
202
|
+
return (react_1.default.createElement("li", Object.assign({ key: index, className: b('dot', { active: index === currentIndex }), onClick: asUserInteraction(() => handleDotClick(index)), onKeyDown: (e) => {
|
|
203
|
+
const key = e.key.toLowerCase();
|
|
204
|
+
if (key === 'space' || key === 'enter') {
|
|
205
|
+
e.currentTarget.click();
|
|
206
|
+
}
|
|
207
|
+
}, role: "menuitemradio", "aria-checked": false, tabIndex: -1, "aria-hidden": isVisible, "aria-label": (0, i18n_1.i18n)('dot-label', {
|
|
208
|
+
index: currentSlideNumber,
|
|
209
|
+
count: barSlidesCount,
|
|
210
|
+
}) }, rovingItemProps)));
|
|
211
|
+
};
|
|
212
|
+
const renderNavigation = () => {
|
|
213
|
+
if (childrenCount <= slidesCountByBreakpoint || !dots || childrenCount === 1) {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
const dotsList = Array(childrenCount)
|
|
217
|
+
.fill(null)
|
|
218
|
+
.map((_item, index) => renderDot(index));
|
|
219
|
+
dotsList.splice(currentIndex, 0, renderAccessibleBar(currentIndex));
|
|
220
|
+
return (react_1.default.createElement("div", { className: b('dots', dotsClassName) },
|
|
221
|
+
react_1.default.createElement("ul", Object.assign({ className: b('dots-list'), role: "menu", "aria-label": (0, i18n_1.i18n)('pagination-label') }, rovingListProps),
|
|
222
|
+
renderBar(),
|
|
223
|
+
dotsList)));
|
|
224
|
+
};
|
|
225
|
+
const renderDisclaimer = () => {
|
|
226
|
+
return disclaimer ? (react_1.default.createElement("div", { className: b('disclaimer', { size: disclaimer.size || 'm' }) }, disclaimer.text)) : null;
|
|
227
|
+
};
|
|
228
|
+
const renderSlider = () => {
|
|
229
|
+
/* Disable adding of width in inline styles when SSR to prevent overriding of default styles */
|
|
230
|
+
/* Calculate appropriate breakpoint for mobile devices with user agent */
|
|
231
|
+
const variableWidth = isServer && isMobile;
|
|
232
|
+
const settings = {
|
|
233
|
+
ref: (slickSlider) => setSlider(slickSlider),
|
|
234
|
+
className: slick(null, className),
|
|
235
|
+
arrows,
|
|
236
|
+
variableWidth,
|
|
237
|
+
infinite: false,
|
|
238
|
+
speed: 1000,
|
|
239
|
+
adaptiveHeight: adaptive,
|
|
240
|
+
autoplay: isAutoplayEnabled,
|
|
241
|
+
autoplaySpeed,
|
|
242
|
+
slidesToShow: slidesToShowCount,
|
|
243
|
+
slidesToScroll: 1,
|
|
244
|
+
responsive: (0, utils_2.getSliderResponsiveParams)(slidesToShow),
|
|
245
|
+
beforeChange: onBeforeChange,
|
|
246
|
+
afterChange: onAfterChange,
|
|
247
|
+
initialSlide: initialIndex,
|
|
248
|
+
nextArrow: (react_1.default.createElement(Arrow_1.default, { type: "right", handleClick: asUserInteraction(handleArrowClick), size: arrowSize })),
|
|
249
|
+
prevArrow: (react_1.default.createElement(Arrow_1.default, { type: "left", handleClick: asUserInteraction(handleArrowClick), size: arrowSize })),
|
|
250
|
+
lazyLoad,
|
|
251
|
+
accessibility: false,
|
|
252
|
+
};
|
|
253
|
+
return (react_1.default.createElement(OutsideClick_1.default, { onOutsideClick: isMobile ? unsetFocus : noop_1.default },
|
|
254
|
+
react_1.default.createElement(react_slick_1.default, Object.assign({}, settings), disclosedChildren),
|
|
255
|
+
react_1.default.createElement("div", { className: b('footer') },
|
|
256
|
+
renderDisclaimer(),
|
|
257
|
+
renderNavigation())));
|
|
258
|
+
};
|
|
259
|
+
return (react_1.default.createElement(StylesContext_1.StylesContext.Provider, { value: Object.assign(Object.assign({}, childStyles), { setStyles: setChildStyles }) },
|
|
260
|
+
react_1.default.createElement("div", { className: b({
|
|
261
|
+
'align-left': childrenCount < slidesCountByBreakpoint,
|
|
262
|
+
'one-slide': childrenCount === 1,
|
|
263
|
+
'only-arrows': !(title === null || title === void 0 ? void 0 : title.text) && !description && arrows,
|
|
264
|
+
mobile: isMobile,
|
|
265
|
+
type,
|
|
266
|
+
}, blockClassName) },
|
|
267
|
+
anchorId && react_1.default.createElement(Anchor_1.default, { id: anchorId }),
|
|
268
|
+
react_1.default.createElement(Title_1.default, { title: title, subtitle: description, className: b('header', { 'no-description': !description }) }),
|
|
269
|
+
react_1.default.createElement(AnimateBlock_1.default, { className: b('animate-slides'), animate: animated }, renderSlider()))));
|
|
270
|
+
};
|
|
271
|
+
exports.SliderOldBlock = SliderOldBlock;
|
|
272
|
+
function getSlideId(sliderId, index) {
|
|
273
|
+
return `slider-${sliderId}-child-${index}`;
|
|
274
|
+
}
|
|
275
|
+
// TODO remove this and rework PriceDetailed CLOUDFRONT-12230
|
|
276
|
+
function discloseAllNestedChildren(children, sliderId) {
|
|
277
|
+
if (!children) {
|
|
278
|
+
return [];
|
|
279
|
+
}
|
|
280
|
+
let childIndex = 0;
|
|
281
|
+
const wrapped = (child) => {
|
|
282
|
+
const id = getSlideId(sliderId, childIndex++);
|
|
283
|
+
return (react_1.default.createElement("div", { key: id, id: id }, child));
|
|
284
|
+
};
|
|
285
|
+
return react_1.default.Children.map(children, (child) => {
|
|
286
|
+
var _a;
|
|
287
|
+
if (child) {
|
|
288
|
+
// TODO: if child has 'items' then 'items' determinate like nested children for Slider.
|
|
289
|
+
const nestedChildren = (_a = child.props.data) === null || _a === void 0 ? void 0 : _a.items;
|
|
290
|
+
if (nestedChildren) {
|
|
291
|
+
return nestedChildren.map((nestedChild) => {
|
|
292
|
+
return wrapped(react_1.default.cloneElement(child, {
|
|
293
|
+
data: Object.assign(Object.assign({}, child.props.data), { items: [nestedChild] }),
|
|
294
|
+
}));
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return child && wrapped(child);
|
|
299
|
+
}).filter(Boolean);
|
|
300
|
+
}
|
|
301
|
+
exports.default = exports.SliderOldBlock;
|
|
@@ -6,4 +6,4 @@ const i18n_1 = require("@gravity-ui/uikit/i18n");
|
|
|
6
6
|
const cn_1 = require("../../../utils/cn");
|
|
7
7
|
const en_json_1 = tslib_1.__importDefault(require("./en.json"));
|
|
8
8
|
const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
|
|
9
|
-
exports.i18n = (0, i18n_1.addComponentKeysets)({ en: en_json_1.default, ru: ru_json_1.default }, `${cn_1.NAMESPACE}
|
|
9
|
+
exports.i18n = (0, i18n_1.addComponentKeysets)({ en: en_json_1.default, ru: ru_json_1.default }, `${cn_1.NAMESPACE}SliderOldBlock`);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export declare enum SliderBreakpointNames {
|
|
2
|
-
Xs = "xs",
|
|
3
2
|
Sm = "sm",
|
|
4
3
|
Md = "md",
|
|
5
|
-
Lg = "lg"
|
|
4
|
+
Lg = "lg",
|
|
5
|
+
Xl = "xl"
|
|
6
6
|
}
|
|
7
7
|
export type SliderBreakpointParams = Record<SliderBreakpointNames, number>;
|
|
8
8
|
export type SlidesToShow = Partial<SliderBreakpointParams> | number;
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SliderBreakpointNames = void 0;
|
|
4
4
|
var SliderBreakpointNames;
|
|
5
5
|
(function (SliderBreakpointNames) {
|
|
6
|
-
SliderBreakpointNames["Xs"] = "xs";
|
|
7
6
|
SliderBreakpointNames["Sm"] = "sm";
|
|
8
7
|
SliderBreakpointNames["Md"] = "md";
|
|
9
8
|
SliderBreakpointNames["Lg"] = "lg";
|
|
9
|
+
SliderBreakpointNames["Xl"] = "xl";
|
|
10
10
|
})(SliderBreakpointNames = exports.SliderBreakpointNames || (exports.SliderBreakpointNames = {}));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const SliderOldProps: {
|
|
2
2
|
dots: {
|
|
3
3
|
type: string;
|
|
4
4
|
};
|
|
@@ -11,15 +11,6 @@ export declare const SliderNewProps: {
|
|
|
11
11
|
autoplay: {
|
|
12
12
|
type: string;
|
|
13
13
|
};
|
|
14
|
-
type: {
|
|
15
|
-
type: string;
|
|
16
|
-
};
|
|
17
|
-
adaptive: {
|
|
18
|
-
type: string;
|
|
19
|
-
};
|
|
20
|
-
arrowSize: {
|
|
21
|
-
type: string;
|
|
22
|
-
};
|
|
23
14
|
animated: {
|
|
24
15
|
animated: {
|
|
25
16
|
type: string;
|
|
@@ -83,8 +74,9 @@ export declare const SliderNewProps: {
|
|
|
83
74
|
};
|
|
84
75
|
};
|
|
85
76
|
};
|
|
86
|
-
|
|
87
|
-
|
|
77
|
+
/** @deprecated */
|
|
78
|
+
export declare const SliderOldBlock: {
|
|
79
|
+
'slider-old-block': {
|
|
88
80
|
additionalProperties: boolean;
|
|
89
81
|
required: never[];
|
|
90
82
|
properties: {
|
|
@@ -135,15 +127,6 @@ export declare const SliderNewBlock: {
|
|
|
135
127
|
autoplay: {
|
|
136
128
|
type: string;
|
|
137
129
|
};
|
|
138
|
-
type: {
|
|
139
|
-
type: string;
|
|
140
|
-
};
|
|
141
|
-
adaptive: {
|
|
142
|
-
type: string;
|
|
143
|
-
};
|
|
144
|
-
arrowSize: {
|
|
145
|
-
type: string;
|
|
146
|
-
};
|
|
147
130
|
animated: {
|
|
148
131
|
animated: {
|
|
149
132
|
type: string;
|
|
@@ -245,6 +228,7 @@ export declare const SliderNewBlock: {
|
|
|
245
228
|
};
|
|
246
229
|
};
|
|
247
230
|
};
|
|
231
|
+
type: {};
|
|
248
232
|
when: {
|
|
249
233
|
type: string;
|
|
250
234
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.SliderOldBlock = exports.SliderOldProps = void 0;
|
|
4
4
|
const common_1 = require("../../schema/validators/common");
|
|
5
5
|
const LoadableProps = {
|
|
6
6
|
additionalProperties: false,
|
|
@@ -43,7 +43,7 @@ const DisclaimerProps = {
|
|
|
43
43
|
},
|
|
44
44
|
},
|
|
45
45
|
};
|
|
46
|
-
exports.
|
|
46
|
+
exports.SliderOldProps = {
|
|
47
47
|
dots: {
|
|
48
48
|
type: 'boolean',
|
|
49
49
|
},
|
|
@@ -56,25 +56,17 @@ exports.SliderNewProps = {
|
|
|
56
56
|
autoplay: {
|
|
57
57
|
type: 'number',
|
|
58
58
|
},
|
|
59
|
-
type: {
|
|
60
|
-
type: 'string',
|
|
61
|
-
},
|
|
62
|
-
adaptive: {
|
|
63
|
-
type: 'boolean',
|
|
64
|
-
},
|
|
65
|
-
arrowSize: {
|
|
66
|
-
type: 'number',
|
|
67
|
-
},
|
|
68
59
|
animated: common_1.AnimatableProps,
|
|
69
60
|
slidesToShow: common_1.sliderSizesObject,
|
|
70
61
|
disclaimer: DisclaimerProps,
|
|
71
62
|
loadable: LoadableProps,
|
|
72
63
|
children: common_1.ChildrenCardsProps,
|
|
73
64
|
};
|
|
74
|
-
|
|
75
|
-
|
|
65
|
+
/** @deprecated */
|
|
66
|
+
exports.SliderOldBlock = {
|
|
67
|
+
'slider-old-block': {
|
|
76
68
|
additionalProperties: false,
|
|
77
69
|
required: [],
|
|
78
|
-
properties: Object.assign(Object.assign(Object.assign(Object.assign({}, common_1.BlockBaseProps), common_1.AnimatableProps), exports.
|
|
70
|
+
properties: Object.assign(Object.assign(Object.assign(Object.assign({}, common_1.BlockBaseProps), common_1.AnimatableProps), exports.SliderOldProps), common_1.BlockHeaderProps),
|
|
79
71
|
},
|
|
80
72
|
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { SliderBreakpointParams, SlidesToShow } from './models';
|
|
2
|
+
export declare const DEFAULT_SLIDE_BREAKPOINTS: {
|
|
3
|
+
xl: number;
|
|
4
|
+
lg: number;
|
|
5
|
+
md: number;
|
|
6
|
+
sm: number;
|
|
7
|
+
};
|
|
8
|
+
export interface GetSlidesToShowParams {
|
|
9
|
+
contentLength: number;
|
|
10
|
+
breakpoints?: SlidesToShow;
|
|
11
|
+
mobileFullscreen?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare const isFocusable: (element: Element) => boolean;
|
|
14
|
+
export declare function getSlidesToShowWithDefaults({ contentLength, breakpoints, mobileFullscreen, }: GetSlidesToShowParams): {
|
|
15
|
+
sm: number;
|
|
16
|
+
xl: number;
|
|
17
|
+
lg: number;
|
|
18
|
+
md: number;
|
|
19
|
+
};
|
|
20
|
+
export declare function getSliderResponsiveParams(breakpoints: SliderBreakpointParams): {
|
|
21
|
+
breakpoint: number;
|
|
22
|
+
settings: {
|
|
23
|
+
slidesToShow: number;
|
|
24
|
+
};
|
|
25
|
+
}[];
|
|
26
|
+
export declare function getSlidesCountByBreakpoint(breakpoint: number, breakpoints: SliderBreakpointParams): number;
|
|
27
|
+
export declare function getSlidesToShowCount(breakpoints: SliderBreakpointParams): number;
|
|
28
|
+
export declare function useRovingTabIndex(props: {
|
|
29
|
+
itemCount: number;
|
|
30
|
+
activeIndex: number;
|
|
31
|
+
firstIndex?: number;
|
|
32
|
+
uniqId: string;
|
|
33
|
+
}): {
|
|
34
|
+
getRovingItemProps: (index: number) => Pick<React.HTMLAttributes<HTMLElement>, 'id' | 'tabIndex' | 'onFocus'>;
|
|
35
|
+
rovingListProps: import("react").HTMLAttributes<HTMLElement>;
|
|
36
|
+
};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useRovingTabIndex = exports.getSlidesToShowCount = exports.getSlidesCountByBreakpoint = exports.getSliderResponsiveParams = exports.getSlidesToShowWithDefaults = exports.isFocusable = exports.DEFAULT_SLIDE_BREAKPOINTS = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const pickBy_1 = tslib_1.__importDefault(require("lodash/pickBy"));
|
|
7
|
+
const constants_1 = require("../../constants");
|
|
8
|
+
const models_1 = require("./models");
|
|
9
|
+
exports.DEFAULT_SLIDE_BREAKPOINTS = {
|
|
10
|
+
[models_1.SliderBreakpointNames.Xl]: 3,
|
|
11
|
+
[models_1.SliderBreakpointNames.Lg]: 2,
|
|
12
|
+
[models_1.SliderBreakpointNames.Md]: 2,
|
|
13
|
+
[models_1.SliderBreakpointNames.Sm]: 1.15,
|
|
14
|
+
};
|
|
15
|
+
const BREAKPOINT_NAMES_BY_VALUES = Object.entries(constants_1.BREAKPOINTS).reduce((acc, [key, value]) => (Object.assign(Object.assign({}, acc), { [value]: key })), {});
|
|
16
|
+
const isFocusable = (element) => {
|
|
17
|
+
if (!(element instanceof HTMLElement)) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const tabIndexAttr = element.getAttribute('tabindex');
|
|
21
|
+
const hasTabIndex = tabIndexAttr !== null;
|
|
22
|
+
const tabIndex = Number(tabIndexAttr);
|
|
23
|
+
if (element.ariaHidden === 'true' || (hasTabIndex && tabIndex < 0)) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if (hasTabIndex && tabIndex >= 0) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
// without this jest fails here for some reason
|
|
30
|
+
let htmlElement;
|
|
31
|
+
switch (true) {
|
|
32
|
+
case element instanceof HTMLAnchorElement:
|
|
33
|
+
htmlElement = element;
|
|
34
|
+
return Boolean(htmlElement.href);
|
|
35
|
+
case element instanceof HTMLInputElement:
|
|
36
|
+
htmlElement = element;
|
|
37
|
+
return htmlElement.type !== 'hidden' && !htmlElement.disabled;
|
|
38
|
+
case element instanceof HTMLSelectElement:
|
|
39
|
+
case element instanceof HTMLTextAreaElement:
|
|
40
|
+
case element instanceof HTMLButtonElement:
|
|
41
|
+
htmlElement = element;
|
|
42
|
+
return !htmlElement.disabled;
|
|
43
|
+
default:
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.isFocusable = isFocusable;
|
|
48
|
+
function getSlidesToShowWithDefaults({ contentLength, breakpoints, mobileFullscreen, }) {
|
|
49
|
+
let result;
|
|
50
|
+
if (typeof breakpoints === 'number') {
|
|
51
|
+
result = Object.keys(exports.DEFAULT_SLIDE_BREAKPOINTS).reduce((acc, breakpointName) => (Object.assign(Object.assign({}, acc), { [breakpointName]: breakpoints })), {});
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
result = breakpoints || exports.DEFAULT_SLIDE_BREAKPOINTS;
|
|
55
|
+
}
|
|
56
|
+
return Object.assign(Object.assign(Object.assign({}, exports.DEFAULT_SLIDE_BREAKPOINTS), (0, pickBy_1.default)(result, (value) => !isNaN(value))), { sm: !mobileFullscreen && contentLength > 1 ? exports.DEFAULT_SLIDE_BREAKPOINTS.sm : 1 });
|
|
57
|
+
}
|
|
58
|
+
exports.getSlidesToShowWithDefaults = getSlidesToShowWithDefaults;
|
|
59
|
+
function getSliderResponsiveParams(breakpoints) {
|
|
60
|
+
return Object.entries(breakpoints).map(([breakpointName, slidesToShow]) => ({
|
|
61
|
+
breakpoint: constants_1.BREAKPOINTS[breakpointName],
|
|
62
|
+
settings: { slidesToShow },
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
exports.getSliderResponsiveParams = getSliderResponsiveParams;
|
|
66
|
+
function getSlidesCountByBreakpoint(breakpoint, breakpoints) {
|
|
67
|
+
const breakpointName = BREAKPOINT_NAMES_BY_VALUES[breakpoint];
|
|
68
|
+
return Math.floor(breakpoints[breakpointName]);
|
|
69
|
+
}
|
|
70
|
+
exports.getSlidesCountByBreakpoint = getSlidesCountByBreakpoint;
|
|
71
|
+
function getSlidesToShowCount(breakpoints) {
|
|
72
|
+
return Math.floor(Math.max(...Object.values(breakpoints)));
|
|
73
|
+
}
|
|
74
|
+
exports.getSlidesToShowCount = getSlidesToShowCount;
|
|
75
|
+
const getRovingListItemId = (uniqId, index) => `${uniqId}-roving-tabindex-item-${index}`;
|
|
76
|
+
function useRovingTabIndex(props) {
|
|
77
|
+
const { itemCount, activeIndex, firstIndex = 0, uniqId } = props;
|
|
78
|
+
const [currentIndex, setCurrentIndex] = (0, react_1.useState)(firstIndex);
|
|
79
|
+
const hasFocusRef = (0, react_1.useRef)(false);
|
|
80
|
+
const lastIndex = itemCount + firstIndex - 1;
|
|
81
|
+
const getRovingItemProps = (index) => {
|
|
82
|
+
return {
|
|
83
|
+
id: getRovingListItemId(uniqId, index),
|
|
84
|
+
tabIndex: index === activeIndex ? 0 : -1,
|
|
85
|
+
onFocus: () => {
|
|
86
|
+
setCurrentIndex(index);
|
|
87
|
+
hasFocusRef.current = true;
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
(0, react_1.useEffect)(() => {
|
|
92
|
+
var _a;
|
|
93
|
+
if (!hasFocusRef.current) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
(_a = document.getElementById(getRovingListItemId(uniqId, currentIndex))) === null || _a === void 0 ? void 0 : _a.focus();
|
|
97
|
+
}, [activeIndex, currentIndex, uniqId]);
|
|
98
|
+
const setNextIndex = () => setCurrentIndex((prev) => (prev >= lastIndex ? firstIndex : prev + 1));
|
|
99
|
+
const setPrevIndex = () => setCurrentIndex((prev) => (prev <= firstIndex ? lastIndex : prev - 1));
|
|
100
|
+
const onRovingListKeyDown = (e) => {
|
|
101
|
+
const key = e.key.toLowerCase();
|
|
102
|
+
if (key !== 'tab' && key !== 'enter') {
|
|
103
|
+
e.preventDefault();
|
|
104
|
+
}
|
|
105
|
+
switch (key) {
|
|
106
|
+
case 'arrowleft':
|
|
107
|
+
case 'arrowup':
|
|
108
|
+
setPrevIndex();
|
|
109
|
+
return;
|
|
110
|
+
case 'arrowright':
|
|
111
|
+
case 'arrowdown':
|
|
112
|
+
setNextIndex();
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const onRovingListBlur = () => {
|
|
117
|
+
hasFocusRef.current = false;
|
|
118
|
+
};
|
|
119
|
+
const rovingListProps = {
|
|
120
|
+
onKeyDown: onRovingListKeyDown,
|
|
121
|
+
onBlur: onRovingListBlur,
|
|
122
|
+
};
|
|
123
|
+
return { getRovingItemProps, rovingListProps };
|
|
124
|
+
}
|
|
125
|
+
exports.useRovingTabIndex = useRovingTabIndex;
|
|
@@ -3,6 +3,7 @@ export { default as CompaniesBlock } from './Companies/Companies';
|
|
|
3
3
|
export { default as InfoBlock } from './Info/Info';
|
|
4
4
|
export { default as MediaBlock } from './Media/Media';
|
|
5
5
|
export { default as MapBlock } from './Map/Map';
|
|
6
|
+
export { default as SliderOldBlock } from './SliderOld/SliderOld';
|
|
6
7
|
export { default as SliderBlock } from './Slider/Slider';
|
|
7
8
|
export { default as ExtendedFeaturesBlock } from './ExtendedFeatures/ExtendedFeatures';
|
|
8
9
|
export { default as PromoFeaturesBlock } from './PromoFeaturesBlock/PromoFeaturesBlock';
|
|
@@ -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.FormBlock = exports.FilterBlock = exports.ShareBlock = exports.ContentLayoutBlock = exports.CardLayoutBlock = exports.HeaderSliderBlock = exports.IconsBlock = exports.HeaderBlock = exports.TabsBlock = exports.TableBlock = exports.QuestionsBlock = exports.PromoFeaturesBlock = exports.ExtendedFeaturesBlock = exports.SliderBlock = exports.MapBlock = exports.MediaBlock = exports.InfoBlock = exports.CompaniesBlock = exports.BannerBlock = void 0;
|
|
6
|
+
exports.FormBlock = exports.FilterBlock = exports.ShareBlock = exports.ContentLayoutBlock = exports.CardLayoutBlock = exports.HeaderSliderBlock = exports.IconsBlock = exports.HeaderBlock = exports.TabsBlock = exports.TableBlock = exports.QuestionsBlock = exports.PromoFeaturesBlock = exports.ExtendedFeaturesBlock = exports.SliderBlock = exports.SliderOldBlock = 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");
|
|
@@ -14,6 +14,8 @@ var Media_1 = require("./Media/Media");
|
|
|
14
14
|
Object.defineProperty(exports, "MediaBlock", { enumerable: true, get: function () { return __importDefault(Media_1).default; } });
|
|
15
15
|
var Map_1 = require("./Map/Map");
|
|
16
16
|
Object.defineProperty(exports, "MapBlock", { enumerable: true, get: function () { return __importDefault(Map_1).default; } });
|
|
17
|
+
var SliderOld_1 = require("./SliderOld/SliderOld");
|
|
18
|
+
Object.defineProperty(exports, "SliderOldBlock", { enumerable: true, get: function () { return __importDefault(SliderOld_1).default; } });
|
|
17
19
|
var Slider_1 = require("./Slider/Slider");
|
|
18
20
|
Object.defineProperty(exports, "SliderBlock", { enumerable: true, get: function () { return __importDefault(Slider_1).default; } });
|
|
19
21
|
var ExtendedFeatures_1 = require("./ExtendedFeatures/ExtendedFeatures");
|