@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.
Files changed (206) hide show
  1. package/README.md +6 -0
  2. package/build/cjs/blocks/ExtendedFeatures/ExtendedFeatures.css +11 -6
  3. package/build/cjs/blocks/ExtendedFeatures/ExtendedFeatures.js +3 -6
  4. package/build/cjs/blocks/Header/Header.css +15 -10
  5. package/build/cjs/blocks/Header/Header.js +8 -4
  6. package/build/cjs/blocks/HeaderSlider/HeaderSlider.css +0 -10
  7. package/build/cjs/blocks/HeaderSlider/HeaderSlider.js +2 -2
  8. package/build/cjs/blocks/HeaderSlider/schema.d.ts +9 -1
  9. package/build/cjs/blocks/Questions/QuestionBlockItem/QuestionBlockItem.css +43 -21
  10. package/build/cjs/blocks/Questions/QuestionBlockItem/QuestionBlockItem.js +5 -3
  11. package/build/cjs/blocks/Slider/Arrow/Arrow.css +22 -21
  12. package/build/cjs/blocks/Slider/Arrow/Arrow.d.ts +5 -2
  13. package/build/cjs/blocks/Slider/Arrow/Arrow.js +5 -4
  14. package/build/cjs/blocks/Slider/Slider.css +549 -329
  15. package/build/cjs/blocks/Slider/Slider.d.ts +6 -6
  16. package/build/cjs/blocks/Slider/Slider.js +40 -282
  17. package/build/cjs/blocks/Slider/i18n/en.json +1 -1
  18. package/build/cjs/blocks/Slider/i18n/ru.json +1 -1
  19. package/build/cjs/blocks/Slider/models.d.ts +2 -2
  20. package/build/cjs/blocks/Slider/models.js +1 -1
  21. package/build/cjs/blocks/Slider/schema.d.ts +18 -1
  22. package/build/cjs/blocks/Slider/schema.js +9 -0
  23. package/build/cjs/blocks/{SliderNew → Slider}/useSlider.d.ts +1 -0
  24. package/build/cjs/blocks/{SliderNew → Slider}/useSlider.js +4 -0
  25. package/build/cjs/blocks/Slider/utils.d.ts +7 -27
  26. package/build/cjs/blocks/Slider/utils.js +26 -108
  27. package/build/cjs/blocks/{SliderNew → SliderOld}/Arrow/Arrow.css +15 -12
  28. package/build/cjs/blocks/SliderOld/Arrow/Arrow.d.ts +9 -0
  29. package/build/cjs/blocks/{SliderNew → SliderOld}/Arrow/Arrow.js +3 -3
  30. package/build/cjs/blocks/SliderOld/SliderOld.css +703 -0
  31. package/build/cjs/blocks/SliderOld/SliderOld.d.ts +17 -0
  32. package/build/cjs/blocks/SliderOld/SliderOld.js +301 -0
  33. package/build/cjs/blocks/{SliderNew → SliderOld}/i18n/en.json +1 -1
  34. package/build/cjs/blocks/{SliderNew → SliderOld}/i18n/index.js +1 -1
  35. package/build/cjs/blocks/{SliderNew → SliderOld}/i18n/ru.json +1 -1
  36. package/build/cjs/blocks/{SliderNew → SliderOld}/models.d.ts +2 -2
  37. package/build/cjs/blocks/{SliderNew → SliderOld}/models.js +1 -1
  38. package/build/cjs/blocks/{SliderNew → SliderOld}/schema.d.ts +5 -21
  39. package/build/cjs/blocks/{SliderNew → SliderOld}/schema.js +6 -14
  40. package/build/cjs/blocks/SliderOld/utils.d.ts +36 -0
  41. package/build/cjs/blocks/SliderOld/utils.js +125 -0
  42. package/build/cjs/blocks/index.d.ts +1 -0
  43. package/build/cjs/blocks/index.js +3 -1
  44. package/build/cjs/blocks/validators.d.ts +1 -0
  45. package/build/cjs/blocks/validators.js +1 -0
  46. package/build/cjs/components/ContentList/ContentList.css +5 -4
  47. package/build/cjs/components/ContentList/ContentList.js +1 -1
  48. package/build/cjs/components/FullscreenImage/FullscreenImage.css +96 -18
  49. package/build/cjs/components/FullscreenImage/FullscreenImage.d.ts +5 -0
  50. package/build/cjs/components/FullscreenImage/FullscreenImage.js +19 -5
  51. package/build/cjs/components/HTML/HTML.d.ts +16 -9
  52. package/build/cjs/components/HTML/HTML.js +16 -11
  53. package/build/cjs/components/Media/Image/Image.d.ts +1 -0
  54. package/build/cjs/components/Media/Image/Image.js +7 -5
  55. package/build/cjs/components/Media/Media.css +4 -0
  56. package/build/cjs/components/Media/Media.d.ts +1 -0
  57. package/build/cjs/components/Media/Media.js +3 -2
  58. package/build/cjs/components/MetaInfo/MetaInfo.css +1 -1
  59. package/build/cjs/components/MetaInfo/MetaInfo.js +1 -1
  60. package/build/cjs/components/Table/Table.css +2 -1
  61. package/build/cjs/components/Table/Table.js +4 -2
  62. package/build/cjs/components/Title/TitleItem.css +6 -4
  63. package/build/cjs/components/Title/TitleItem.js +3 -1
  64. package/build/cjs/components/YFMWrapper/YFMWrapper.d.ts +4 -2
  65. package/build/cjs/components/YFMWrapper/YFMWrapper.js +4 -1
  66. package/build/cjs/constructor-items.d.ts +2 -2
  67. package/build/cjs/constructor-items.js +2 -4
  68. package/build/cjs/editor/data/templates/{slider-new-block.json → slider-old-block.json} +2 -2
  69. package/build/cjs/models/common.d.ts +1 -0
  70. package/build/cjs/models/constructor-items/blocks.d.ts +17 -15
  71. package/build/cjs/models/constructor-items/blocks.js +3 -2
  72. package/build/cjs/schema/constants.d.ts +0 -1
  73. package/build/cjs/schema/constants.js +3 -1
  74. package/build/cjs/schema/validators/blocks.d.ts +2 -2
  75. package/build/cjs/schema/validators/blocks.js +2 -2
  76. package/build/cjs/sub-blocks/BannerCard/BannerCard.css +10 -8
  77. package/build/cjs/sub-blocks/BannerCard/BannerCard.js +4 -3
  78. package/build/cjs/sub-blocks/Content/Content.js +1 -1
  79. package/build/cjs/sub-blocks/PriceCard/PriceCard.css +2 -1
  80. package/build/cjs/sub-blocks/PriceCard/PriceCard.js +1 -1
  81. package/build/cjs/sub-blocks/Quote/Quote.css +8 -4
  82. package/build/cjs/sub-blocks/Quote/Quote.js +2 -4
  83. package/build/cjs/text-transform/config.js +1 -1
  84. package/build/cjs/utils/blocks.d.ts +10 -2
  85. package/build/cjs/utils/blocks.js +10 -4
  86. package/build/esm/blocks/ExtendedFeatures/ExtendedFeatures.css +11 -6
  87. package/build/esm/blocks/ExtendedFeatures/ExtendedFeatures.js +4 -7
  88. package/build/esm/blocks/Header/Header.css +15 -10
  89. package/build/esm/blocks/Header/Header.js +9 -5
  90. package/build/esm/blocks/HeaderSlider/HeaderSlider.css +0 -10
  91. package/build/esm/blocks/HeaderSlider/HeaderSlider.js +1 -1
  92. package/build/esm/blocks/HeaderSlider/schema.d.ts +9 -1
  93. package/build/esm/blocks/Questions/QuestionBlockItem/QuestionBlockItem.css +43 -21
  94. package/build/esm/blocks/Questions/QuestionBlockItem/QuestionBlockItem.js +6 -4
  95. package/build/esm/blocks/Slider/Arrow/Arrow.css +22 -21
  96. package/build/esm/blocks/Slider/Arrow/Arrow.d.ts +5 -2
  97. package/build/esm/blocks/Slider/Arrow/Arrow.js +5 -4
  98. package/build/esm/blocks/Slider/Slider.css +549 -329
  99. package/build/esm/blocks/Slider/Slider.d.ts +6 -6
  100. package/build/esm/blocks/Slider/Slider.js +42 -284
  101. package/build/esm/blocks/Slider/i18n/en.json +1 -1
  102. package/build/esm/blocks/Slider/i18n/ru.json +1 -1
  103. package/build/esm/blocks/Slider/models.d.ts +2 -2
  104. package/build/esm/blocks/Slider/models.js +1 -1
  105. package/build/esm/blocks/Slider/schema.d.ts +18 -1
  106. package/build/esm/blocks/Slider/schema.js +9 -0
  107. package/build/esm/blocks/{SliderNew → Slider}/useSlider.d.ts +1 -0
  108. package/build/esm/blocks/{SliderNew → Slider}/useSlider.js +5 -1
  109. package/build/esm/blocks/Slider/utils.d.ts +7 -27
  110. package/build/esm/blocks/Slider/utils.js +24 -103
  111. package/build/esm/blocks/{SliderNew → SliderOld}/Arrow/Arrow.css +15 -12
  112. package/build/esm/blocks/SliderOld/Arrow/Arrow.d.ts +10 -0
  113. package/build/esm/blocks/{SliderNew → SliderOld}/Arrow/Arrow.js +3 -3
  114. package/build/esm/blocks/SliderOld/SliderOld.css +703 -0
  115. package/build/esm/blocks/SliderOld/SliderOld.d.ts +18 -0
  116. package/build/esm/blocks/SliderOld/SliderOld.js +297 -0
  117. package/build/esm/blocks/{SliderNew → SliderOld}/i18n/en.json +1 -1
  118. package/build/esm/blocks/{SliderNew → SliderOld}/i18n/index.js +1 -1
  119. package/build/esm/blocks/{SliderNew → SliderOld}/i18n/ru.json +1 -1
  120. package/build/esm/blocks/{SliderNew → SliderOld}/models.d.ts +2 -2
  121. package/build/esm/blocks/{SliderNew → SliderOld}/models.js +1 -1
  122. package/build/esm/blocks/{SliderNew → SliderOld}/schema.d.ts +5 -21
  123. package/build/esm/blocks/{SliderNew → SliderOld}/schema.js +5 -13
  124. package/build/esm/blocks/SliderOld/utils.d.ts +36 -0
  125. package/build/esm/blocks/SliderOld/utils.js +115 -0
  126. package/build/esm/blocks/index.d.ts +1 -0
  127. package/build/esm/blocks/index.js +1 -0
  128. package/build/esm/blocks/validators.d.ts +1 -0
  129. package/build/esm/blocks/validators.js +1 -0
  130. package/build/esm/components/ContentList/ContentList.css +5 -4
  131. package/build/esm/components/ContentList/ContentList.js +1 -1
  132. package/build/esm/components/FullscreenImage/FullscreenImage.css +96 -18
  133. package/build/esm/components/FullscreenImage/FullscreenImage.d.ts +5 -0
  134. package/build/esm/components/FullscreenImage/FullscreenImage.js +20 -6
  135. package/build/esm/components/HTML/HTML.d.ts +16 -9
  136. package/build/esm/components/HTML/HTML.js +18 -12
  137. package/build/esm/components/Media/Image/Image.d.ts +1 -0
  138. package/build/esm/components/Media/Image/Image.js +7 -5
  139. package/build/esm/components/Media/Media.css +4 -0
  140. package/build/esm/components/Media/Media.d.ts +1 -0
  141. package/build/esm/components/Media/Media.js +3 -2
  142. package/build/esm/components/MetaInfo/MetaInfo.css +1 -1
  143. package/build/esm/components/MetaInfo/MetaInfo.js +1 -1
  144. package/build/esm/components/Table/Table.css +2 -1
  145. package/build/esm/components/Table/Table.js +5 -3
  146. package/build/esm/components/Title/TitleItem.css +6 -4
  147. package/build/esm/components/Title/TitleItem.js +4 -2
  148. package/build/esm/components/YFMWrapper/YFMWrapper.d.ts +4 -2
  149. package/build/esm/components/YFMWrapper/YFMWrapper.js +5 -1
  150. package/build/esm/constructor-items.d.ts +2 -2
  151. package/build/esm/constructor-items.js +3 -5
  152. package/build/esm/editor/data/templates/{slider-new-block.json → slider-old-block.json} +2 -2
  153. package/build/esm/models/common.d.ts +1 -0
  154. package/build/esm/models/constructor-items/blocks.d.ts +17 -15
  155. package/build/esm/models/constructor-items/blocks.js +3 -2
  156. package/build/esm/schema/constants.d.ts +0 -1
  157. package/build/esm/schema/constants.js +4 -2
  158. package/build/esm/schema/validators/blocks.d.ts +2 -2
  159. package/build/esm/schema/validators/blocks.js +2 -2
  160. package/build/esm/sub-blocks/BannerCard/BannerCard.css +10 -8
  161. package/build/esm/sub-blocks/BannerCard/BannerCard.js +5 -4
  162. package/build/esm/sub-blocks/Content/Content.js +1 -1
  163. package/build/esm/sub-blocks/PriceCard/PriceCard.css +2 -1
  164. package/build/esm/sub-blocks/PriceCard/PriceCard.js +2 -2
  165. package/build/esm/sub-blocks/Quote/Quote.css +8 -4
  166. package/build/esm/sub-blocks/Quote/Quote.js +3 -5
  167. package/build/esm/text-transform/config.js +1 -1
  168. package/build/esm/utils/blocks.d.ts +10 -2
  169. package/build/esm/utils/blocks.js +8 -2
  170. package/package.json +2 -2
  171. package/schema/index.js +1 -1
  172. package/server/models/common.d.ts +1 -0
  173. package/server/models/constructor-items/blocks.d.ts +17 -15
  174. package/server/models/constructor-items/blocks.js +3 -2
  175. package/server/text-transform/config.js +1 -1
  176. package/server/utils/blocks.d.ts +10 -2
  177. package/server/utils/blocks.js +10 -4
  178. package/styles/fonts.scss +1 -0
  179. package/styles/styles.css +0 -1
  180. package/styles/styles.scss +0 -1
  181. package/styles/variables.scss +1 -0
  182. package/widget/index.js +1 -1
  183. package/build/cjs/blocks/SliderNew/Arrow/Arrow.d.ts +0 -11
  184. package/build/cjs/blocks/SliderNew/Slider.css +0 -834
  185. package/build/cjs/blocks/SliderNew/Slider.d.ts +0 -13
  186. package/build/cjs/blocks/SliderNew/Slider.js +0 -56
  187. package/build/cjs/blocks/SliderNew/utils.d.ts +0 -16
  188. package/build/cjs/blocks/SliderNew/utils.js +0 -43
  189. package/build/cjs/blocks/unstable.d.ts +0 -1
  190. package/build/cjs/blocks/unstable.js +0 -8
  191. package/build/esm/blocks/SliderNew/Arrow/Arrow.d.ts +0 -12
  192. package/build/esm/blocks/SliderNew/Slider.css +0 -834
  193. package/build/esm/blocks/SliderNew/Slider.d.ts +0 -14
  194. package/build/esm/blocks/SliderNew/Slider.js +0 -52
  195. package/build/esm/blocks/SliderNew/utils.d.ts +0 -16
  196. package/build/esm/blocks/SliderNew/utils.js +0 -36
  197. package/build/esm/blocks/unstable.d.ts +0 -1
  198. package/build/esm/blocks/unstable.js +0 -1
  199. /package/build/cjs/blocks/{SliderNew → Slider}/useSliderPagination.d.ts +0 -0
  200. /package/build/cjs/blocks/{SliderNew → Slider}/useSliderPagination.js +0 -0
  201. /package/build/cjs/blocks/{SliderNew → SliderOld}/i18n/index.d.ts +0 -0
  202. /package/build/cjs/blocks/{Slider → SliderOld}/slick.css +0 -0
  203. /package/build/esm/blocks/{SliderNew → Slider}/useSliderPagination.d.ts +0 -0
  204. /package/build/esm/blocks/{SliderNew → Slider}/useSliderPagination.js +0 -0
  205. /package/build/esm/blocks/{SliderNew → SliderOld}/i18n/index.d.ts +0 -0
  206. /package/build/esm/blocks/{Slider → SliderOld}/slick.css +0 -0
@@ -1,14 +1,14 @@
1
- import React from 'react';
2
- import { Settings } from 'react-slick';
1
+ import { PropsWithChildren } from 'react';
2
+ import { Swiper } from 'swiper/react';
3
3
  import { ClassNameProps, Refable, SliderProps as SliderParams } from '../../models';
4
- export interface SliderProps extends Omit<SliderParams, 'children'>, Refable<HTMLDivElement>, ClassNameProps, Pick<Settings, 'lazyLoad'> {
4
+ import 'swiper/swiper-bundle.css';
5
+ export interface SliderProps extends Omit<SliderParams, 'children'>, Partial<Pick<Swiper, 'onSlideChange' | 'onSlideChangeTransitionStart' | 'onSlideChangeTransitionEnd' | 'onActiveIndexChange' | 'onBreakpoint'>>, Refable<HTMLDivElement>, ClassNameProps {
5
6
  type?: string;
6
7
  anchorId?: string;
7
- onAfterChange?: (index: number) => void;
8
- onBeforeChange?: (current: number, next: number) => void;
9
8
  dotsClassName?: string;
10
9
  blockClassName?: string;
11
10
  arrowSize?: number;
11
+ initialSlide?: number;
12
12
  }
13
- export declare const SliderBlock: (props: React.PropsWithChildren<SliderProps>) => JSX.Element;
13
+ export declare const SliderBlock: ({ animated, title, description, type, anchorId, arrows, adaptive, autoplay: autoplayMs, dots, initialSlide, className, dotsClassName, disclaimer, children, blockClassName, arrowSize, slidesToShow, onSlideChange, onSlideChangeTransitionStart, onSlideChangeTransitionEnd, onActiveIndexChange, onBreakpoint, }: PropsWithChildren<SliderProps>) => JSX.Element;
14
14
  export default SliderBlock;
@@ -3,297 +3,55 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SliderBlock = 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");
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"));
6
+ const swiper_1 = tslib_1.__importStar(require("swiper"));
7
+ const react_2 = require("swiper/react");
11
8
  const Anchor_1 = tslib_1.__importDefault(require("../../components/Anchor/Anchor"));
12
9
  const AnimateBlock_1 = tslib_1.__importDefault(require("../../components/AnimateBlock/AnimateBlock"));
13
- const OutsideClick_1 = tslib_1.__importDefault(require("../../components/OutsideClick/OutsideClick"));
14
10
  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
11
  const models_1 = require("../../models");
21
12
  const utils_1 = require("../../utils");
22
13
  const Arrow_1 = tslib_1.__importDefault(require("./Arrow/Arrow"));
23
14
  const i18n_1 = require("./i18n");
24
- const utils_2 = require("./utils");
15
+ const useSlider_1 = require("./useSlider");
16
+ const useSliderPagination_1 = require("./useSliderPagination");
17
+ require("swiper/swiper-bundle.css");
25
18
  const b = (0, utils_1.block)('SliderBlock');
26
- const slick = (0, utils_1.block)('slick-origin');
27
- const DOT_WIDTH = 8;
28
- const DOT_GAP = 16;
29
- const SliderBlock = (props) => {
30
- var _a;
31
- const { animated, title, description, type, anchorId, arrows = true, adaptive, autoplay: autoplaySpeed, dots = true, dotsClassName, disclaimer, children, className, blockClassName, lazyLoad, arrowSize, onAfterChange: handleAfterChange, onBeforeChange: handleBeforeChange, } = props;
32
- const { isServer } = (0, react_1.useContext)(ssrContext_1.SSRContext);
33
- const isMobile = (0, react_1.useContext)(mobileContext_1.MobileContext);
34
- const [breakpoint, setBreakpoint] = (0, react_1.useState)(constants_1.BREAKPOINTS.xl);
35
- const sliderId = (0, uikit_1.useUniqId)();
36
- const disclosedChildren = (0, react_1.useMemo)(() => discloseAllNestedChildren(children, sliderId), [children, sliderId]);
37
- const childrenCount = disclosedChildren.length;
38
- const isAutoplayEnabled = autoplaySpeed !== undefined && autoplaySpeed > 0;
39
- const isUserInteractionRef = (0, react_1.useRef)(false);
40
- const [slidesToShow] = (0, react_1.useState)((0, utils_2.getSlidesToShowWithDefaults)({
41
- contentLength: childrenCount,
42
- breakpoints: props.slidesToShow,
43
- mobileFullscreen: Boolean(props.type && Object.values(models_1.SliderType).includes(props.type)),
44
- }));
45
- const slidesToShowCount = (0, utils_2.getSlidesToShowCount)(slidesToShow);
46
- const slidesCountByBreakpoint = (0, utils_2.getSlidesCountByBreakpoint)(breakpoint, slidesToShow);
47
- const [currentIndex, setCurrentIndex] = (0, react_1.useState)(0);
48
- const [childStyles, setChildStyles] = (0, react_1.useState)({});
49
- const [slider, setSlider] = (0, react_1.useState)();
50
- const prevIndexRef = (0, react_1.useRef)(0);
51
- const autoplayTimeId = (0, react_1.useRef)();
52
- 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);
53
- const asUserInteraction = (fn) => (...args) => {
54
- isUserInteractionRef.current = true;
55
- return fn(...args);
56
- };
57
- // eslint-disable-next-line react-hooks/exhaustive-deps
58
- const onResize = (0, react_1.useCallback)((0, debounce_1.default)(() => {
59
- if (!slider) {
60
- return;
61
- }
62
- const newBreakpoint = (0, get_1.default)(slider, 'state.breakpoint') || constants_1.BREAKPOINTS.xl;
63
- if (newBreakpoint !== breakpoint) {
64
- setBreakpoint(newBreakpoint);
65
- setCurrentIndex(0);
66
- slider.slickGoTo(0);
67
- }
68
- }, 100), [slider, breakpoint]);
69
- const scrollLastSlide = (0, react_1.useCallback)((current) => {
70
- const lastSlide = childrenCount - slidesToShowCount;
71
- if (isAutoplayEnabled && lastSlide === current) {
72
- // Slick doesn't support autoplay with no infinity scroll
73
- autoplayTimeId.current = setTimeout(() => {
74
- if (slider) {
75
- slider.slickGoTo(0, false);
76
- slider.slickPause();
77
- }
78
- setTimeout(() => {
79
- if (slider) {
80
- slider.slickPlay();
81
- }
82
- }, 500);
83
- }, autoplaySpeed);
84
- }
85
- }, [autoplaySpeed, childrenCount, isAutoplayEnabled, slider, slidesToShowCount]);
86
- (0, react_1.useEffect)(() => {
87
- if (hasFocus && autoplayTimeId.current) {
88
- clearTimeout(autoplayTimeId.current);
89
- }
90
- else {
91
- scrollLastSlide(currentIndex);
92
- }
93
- }, [currentIndex, hasFocus, scrollLastSlide]);
94
- (0, react_1.useEffect)(() => {
95
- onResize();
96
- window.addEventListener('resize', onResize, { passive: true });
97
- return () => window.removeEventListener('resize', onResize);
98
- }, [onResize]);
99
- const handleArrowClick = (direction) => {
100
- let nextIndex;
101
- if (direction === 'right') {
102
- nextIndex =
103
- currentIndex === childrenCount - slidesCountByBreakpoint ? 0 : currentIndex + 1;
104
- }
105
- else {
106
- nextIndex =
107
- currentIndex === 0 ? childrenCount - slidesCountByBreakpoint : currentIndex - 1;
108
- }
109
- if (slider) {
110
- slider.slickGoTo(nextIndex);
111
- }
112
- };
113
- const onBeforeChange = (0, react_1.useCallback)((current, next) => {
114
- if (handleBeforeChange) {
115
- handleBeforeChange(current, next);
116
- }
117
- prevIndexRef.current = current;
118
- setCurrentIndex(Math.ceil(next));
119
- }, [handleBeforeChange]);
120
- const onAfterChange = (0, react_1.useCallback)((current) => {
121
- if (handleAfterChange) {
122
- handleAfterChange(current);
123
- }
124
- if (autoplayTimeId.current) {
125
- clearTimeout(autoplayTimeId.current);
126
- }
127
- if (!hasFocus) {
128
- scrollLastSlide(current);
129
- }
130
- if (isUserInteractionRef.current) {
131
- const focusIndex = prevIndexRef.current >= current
132
- ? current
133
- : Math.max(current, prevIndexRef.current + slidesCountByBreakpoint);
134
- const firstNewSlide = document.getElementById(getSlideId(sliderId, focusIndex));
135
- if (firstNewSlide) {
136
- const focusableChild = Array.from(firstNewSlide.querySelectorAll('*')).find(utils_2.isFocusable);
137
- focusableChild === null || focusableChild === void 0 ? void 0 : focusableChild.focus();
138
- }
139
- }
140
- isUserInteractionRef.current = false;
141
- }, [handleAfterChange, hasFocus, scrollLastSlide, sliderId, slidesCountByBreakpoint]);
142
- const handleDotClick = (index) => {
143
- const nextIndex = index > currentIndex ? index + 1 - slidesCountByBreakpoint : index;
144
- if (slider) {
145
- slider.slickGoTo(nextIndex);
146
- }
147
- };
148
- const barSlidesCount = childrenCount - slidesCountByBreakpoint + 1;
149
- const barPosition = (DOT_GAP + DOT_WIDTH) * currentIndex;
150
- const barWidth = DOT_WIDTH + (DOT_GAP + DOT_WIDTH) * (slidesCountByBreakpoint - 1);
151
- const { getRovingItemProps, rovingListProps } = (0, utils_2.useRovingTabIndex)({
152
- itemCount: barSlidesCount,
153
- activeIndex: currentIndex + 1,
154
- firstIndex: 1,
155
- uniqId: sliderId,
19
+ swiper_1.default.use([swiper_1.Autoplay, swiper_1.A11y, swiper_1.Pagination]);
20
+ const SliderBlock = ({ animated, title, description, type, anchorId, arrows = true, adaptive, autoplay: autoplayMs, dots = true, initialSlide = 0, className, dotsClassName, disclaimer, children, blockClassName, arrowSize, slidesToShow, onSlideChange, onSlideChangeTransitionStart, onSlideChangeTransitionEnd, onActiveIndexChange, onBreakpoint, }) => {
21
+ const { autoplay, isLocked, childrenCount, breakpoints, onSwiper, onImagesReady, onPrev, onNext, setIsLocked, } = (0, useSlider_1.useSlider)({
22
+ slidesToShow,
23
+ children,
24
+ type,
25
+ autoplayMs,
156
26
  });
157
- const renderBar = () => {
158
- return (slidesCountByBreakpoint > 1 && (react_1.default.createElement("li", { className: b('bar'), style: {
159
- left: barPosition,
160
- width: barWidth,
161
- } })));
162
- };
163
- // renders additional bar, not visible in the layout but visible for screenreaders
164
- const renderAccessibleBar = (index) => {
165
- return (
166
- // To have this key differ from keys used in renderDot function, added `-accessible-bar` part
167
- 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', {
168
- index: currentIndex + 1,
169
- count: barSlidesCount,
170
- }), style: {
171
- left: barPosition,
172
- width: barWidth,
173
- } }, getRovingItemProps(currentIndex + 1))))));
174
- };
175
- const getCurrentSlideNumber = (index) => {
176
- const currentIndexDiff = index - currentIndex;
177
- let currentSlideNumber;
178
- if (0 <= currentIndexDiff && currentIndexDiff < slidesCountByBreakpoint) {
179
- currentSlideNumber = currentIndex + 1;
180
- }
181
- else if (currentIndexDiff >= slidesCountByBreakpoint) {
182
- currentSlideNumber = index - slidesCountByBreakpoint + 2;
183
- }
184
- else {
185
- currentSlideNumber = index + 1;
186
- }
187
- return currentSlideNumber;
188
- };
189
- const isVisibleSlide = (index) => {
190
- const currentIndexDiff = index - currentIndex;
191
- const result = slidesCountByBreakpoint > 0 &&
192
- 0 <= currentIndexDiff &&
193
- currentIndexDiff < slidesCountByBreakpoint;
194
- return result;
195
- };
196
- const renderDot = (index) => {
197
- const isVisible = isVisibleSlide(index);
198
- const currentSlideNumber = getCurrentSlideNumber(index);
199
- const rovingItemProps = isVisible ? undefined : getRovingItemProps(currentSlideNumber);
200
- return (react_1.default.createElement("li", Object.assign({ key: index, className: b('dot', { active: index === currentIndex }), onClick: asUserInteraction(() => handleDotClick(index)), onKeyDown: (e) => {
201
- const key = e.key.toLowerCase();
202
- if (key === 'space' || key === 'enter') {
203
- e.currentTarget.click();
204
- }
205
- }, role: "menuitemradio", "aria-checked": false, tabIndex: -1, "aria-hidden": isVisible, "aria-label": (0, i18n_1.i18n)('dot-label', {
206
- index: currentSlideNumber,
207
- count: barSlidesCount,
208
- }) }, rovingItemProps)));
209
- };
210
- const renderNavigation = () => {
211
- if (childrenCount <= slidesCountByBreakpoint || !dots || childrenCount === 1) {
212
- return null;
213
- }
214
- const dotsList = Array(childrenCount)
215
- .fill(null)
216
- .map((_item, index) => renderDot(index));
217
- dotsList.splice(currentIndex, 0, renderAccessibleBar(currentIndex));
218
- return (react_1.default.createElement("div", { className: b('dots', dotsClassName) },
219
- react_1.default.createElement("ul", Object.assign({ className: b('dots-list'), role: "menu", "aria-label": (0, i18n_1.i18n)('pagination-label') }, rovingListProps),
220
- renderBar(),
221
- dotsList)));
222
- };
223
- const renderDisclaimer = () => {
224
- return disclaimer ? (react_1.default.createElement("div", { className: b('disclaimer', { size: disclaimer.size || 'm' }) }, disclaimer.text)) : null;
225
- };
226
- const renderSlider = () => {
227
- /* Disable adding of width in inline styles when SSR to prevent overriding of default styles */
228
- /* Calculate appropriate breakpoint for mobile devices with user agent */
229
- const variableWidth = isServer && isMobile;
230
- const settings = {
231
- ref: (slickSlider) => setSlider(slickSlider),
232
- className: slick(null, className),
233
- arrows,
234
- variableWidth,
235
- infinite: false,
236
- speed: 1000,
237
- adaptiveHeight: adaptive,
238
- autoplay: isAutoplayEnabled,
239
- autoplaySpeed,
240
- slidesToShow: slidesToShowCount,
241
- slidesToScroll: 1,
242
- responsive: (0, utils_2.getSliderResponsiveParams)(slidesToShow),
243
- beforeChange: onBeforeChange,
244
- afterChange: onAfterChange,
245
- initialSlide: 0,
246
- nextArrow: (react_1.default.createElement(Arrow_1.default, { type: "right", handleClick: asUserInteraction(handleArrowClick), size: arrowSize })),
247
- prevArrow: (react_1.default.createElement(Arrow_1.default, { type: "left", handleClick: asUserInteraction(handleArrowClick), size: arrowSize })),
248
- lazyLoad,
249
- accessibility: false,
250
- };
251
- return (react_1.default.createElement(OutsideClick_1.default, { onOutsideClick: isMobile ? unsetFocus : noop_1.default },
252
- react_1.default.createElement(react_slick_1.default, Object.assign({}, settings), disclosedChildren),
253
- react_1.default.createElement("div", { className: b('footer') },
254
- renderDisclaimer(),
255
- renderNavigation())));
256
- };
257
- return (react_1.default.createElement(StylesContext_1.StylesContext.Provider, { value: Object.assign(Object.assign({}, childStyles), { setStyles: setChildStyles }) },
258
- react_1.default.createElement("div", { className: b({
259
- 'align-left': childrenCount < slidesCountByBreakpoint,
260
- 'one-slide': childrenCount === 1,
261
- 'only-arrows': !(title === null || title === void 0 ? void 0 : title.text) && !description && arrows,
262
- mobile: isMobile,
263
- type,
264
- }, blockClassName) },
265
- anchorId && react_1.default.createElement(Anchor_1.default, { id: anchorId }),
266
- react_1.default.createElement(Title_1.default, { title: title, subtitle: description, className: b('header', { 'no-description': !description }) }),
267
- react_1.default.createElement(AnimateBlock_1.default, { className: b('animate-slides'), animate: animated }, renderSlider()))));
27
+ const isA11yControlHidden = Boolean(autoplay);
28
+ const controlTabIndex = isA11yControlHidden ? -1 : 0;
29
+ const paginationProps = (0, useSliderPagination_1.useSliderPagination)({
30
+ enabled: dots,
31
+ isA11yControlHidden,
32
+ controlTabIndex,
33
+ bulletClass: b('dot', dotsClassName),
34
+ bulletActiveClass: b('dot_active'),
35
+ paginationLabel: (0, i18n_1.i18n)('pagination-label'),
36
+ });
37
+ return (react_1.default.createElement("div", { className: b({
38
+ 'one-slide': childrenCount === 1,
39
+ 'only-arrows': !(title === null || title === void 0 ? void 0 : title.text) && !description && arrows,
40
+ 'without-dots': !dots || isLocked,
41
+ type,
42
+ }, blockClassName) },
43
+ anchorId && react_1.default.createElement(Anchor_1.default, { id: anchorId }),
44
+ react_1.default.createElement(Title_1.default, { title: title, subtitle: description, className: b('header', { 'no-description': !description }) }),
45
+ react_1.default.createElement(AnimateBlock_1.default, { className: b('animate-slides'), animate: animated },
46
+ react_1.default.createElement(react_2.Swiper, Object.assign({ className: b('slider', className), onSwiper: onSwiper, speed: 1000, autoplay: autoplay, autoHeight: adaptive, initialSlide: initialSlide, noSwiping: false, breakpoints: breakpoints, onSlideChange: onSlideChange, onSlideChangeTransitionStart: onSlideChangeTransitionStart, onSlideChangeTransitionEnd: onSlideChangeTransitionEnd, onActiveIndexChange: onActiveIndexChange, onBreakpoint: onBreakpoint, onLock: () => setIsLocked(true), onUnlock: () => setIsLocked(false), onImagesReady: onImagesReady, watchSlidesVisibility: true, watchOverflow: true, a11y: {
47
+ slideLabelMessage: '',
48
+ paginationBulletMessage: (0, i18n_1.i18n)('dot-label', { index: '{{index}}' }),
49
+ } }, paginationProps), react_1.default.Children.map(children, (elem, index) => (react_1.default.createElement(react_2.SwiperSlide, { className: b('slide'), key: index }, ({ isVisible }) => (react_1.default.createElement("div", { className: b('slide-item'), "aria-hidden": !isA11yControlHidden && !isVisible }, elem)))))),
50
+ arrows && !isLocked && (react_1.default.createElement(react_1.Fragment, null,
51
+ react_1.default.createElement("div", { "aria-hidden": isA11yControlHidden },
52
+ react_1.default.createElement(Arrow_1.default, { className: b('arrow', { prev: true }), type: "left", transparent: type === models_1.SliderType.HeaderCard, onClick: onPrev, size: arrowSize, extraProps: { tabIndex: controlTabIndex } }),
53
+ react_1.default.createElement(Arrow_1.default, { className: b('arrow', { next: true }), type: "right", transparent: type === models_1.SliderType.HeaderCard, onClick: onNext, size: arrowSize, extraProps: { tabIndex: controlTabIndex } })))),
54
+ react_1.default.createElement("div", { className: b('footer') }, disclaimer ? (react_1.default.createElement("div", { className: b('disclaimer', { size: (disclaimer === null || disclaimer === void 0 ? void 0 : disclaimer.size) || 'm' }) }, disclaimer === null || disclaimer === void 0 ? void 0 : disclaimer.text)) : null))));
268
55
  };
269
56
  exports.SliderBlock = SliderBlock;
270
- function getSlideId(sliderId, index) {
271
- return `slider-${sliderId}-child-${index}`;
272
- }
273
- // TODO remove this and rework PriceDetailed CLOUDFRONT-12230
274
- function discloseAllNestedChildren(children, sliderId) {
275
- if (!children) {
276
- return [];
277
- }
278
- let childIndex = 0;
279
- const wrapped = (child) => {
280
- const id = getSlideId(sliderId, childIndex++);
281
- return (react_1.default.createElement("div", { key: id, id: id }, child));
282
- };
283
- return react_1.default.Children.map(children, (child) => {
284
- var _a;
285
- if (child) {
286
- // TODO: if child has 'items' then 'items' determinate like nested children for Slider.
287
- const nestedChildren = (_a = child.props.data) === null || _a === void 0 ? void 0 : _a.items;
288
- if (nestedChildren) {
289
- return nestedChildren.map((nestedChild) => {
290
- return wrapped(react_1.default.cloneElement(child, {
291
- data: Object.assign(Object.assign({}, child.props.data), { items: [nestedChild] }),
292
- }));
293
- });
294
- }
295
- }
296
- return child && wrapped(child);
297
- }).filter(Boolean);
298
- }
299
57
  exports.default = exports.SliderBlock;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "arrow-right": "Next",
3
3
  "arrow-left": "Previous",
4
- "dot-label": "Page {{index}} of {{count}}",
4
+ "dot-label": "Page {{index}}",
5
5
  "pagination-label": "Pages"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "arrow-right": "Дальше",
3
3
  "arrow-left": "Назад",
4
- "dot-label": "Страница {{index}} из {{count}}",
4
+ "dot-label": "Страница {{index}}",
5
5
  "pagination-label": "Страницы"
6
6
  }
@@ -1,8 +1,8 @@
1
1
  export declare enum SliderBreakpointNames {
2
+ Xs = "xs",
2
3
  Sm = "sm",
3
4
  Md = "md",
4
- Lg = "lg",
5
- Xl = "xl"
5
+ Lg = "lg"
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";
6
7
  SliderBreakpointNames["Sm"] = "sm";
7
8
  SliderBreakpointNames["Md"] = "md";
8
9
  SliderBreakpointNames["Lg"] = "lg";
9
- SliderBreakpointNames["Xl"] = "xl";
10
10
  })(SliderBreakpointNames = exports.SliderBreakpointNames || (exports.SliderBreakpointNames = {}));
@@ -11,6 +11,15 @@ export declare const SliderProps: {
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
+ };
14
23
  animated: {
15
24
  animated: {
16
25
  type: string;
@@ -126,6 +135,15 @@ export declare const SliderBlock: {
126
135
  autoplay: {
127
136
  type: string;
128
137
  };
138
+ type: {
139
+ type: string;
140
+ };
141
+ adaptive: {
142
+ type: string;
143
+ };
144
+ arrowSize: {
145
+ type: string;
146
+ };
129
147
  animated: {
130
148
  animated: {
131
149
  type: string;
@@ -227,7 +245,6 @@ export declare const SliderBlock: {
227
245
  };
228
246
  };
229
247
  };
230
- type: {};
231
248
  when: {
232
249
  type: string;
233
250
  };
@@ -56,6 +56,15 @@ exports.SliderProps = {
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
+ },
59
68
  animated: common_1.AnimatableProps,
60
69
  slidesToShow: common_1.sliderSizesObject,
61
70
  disclaimer: DisclaimerProps,
@@ -11,6 +11,7 @@ export declare const useSlider: ({ children, autoplayMs, type, ...props }: UseSl
11
11
  onSwiper: React.Dispatch<React.SetStateAction<Swiper | undefined>>;
12
12
  onNext: () => void;
13
13
  onPrev: () => void;
14
+ onImagesReady: (localSlider: Swiper) => void;
14
15
  breakpoints: Record<number, import("swiper").SwiperOptions>;
15
16
  childrenCount: number;
16
17
  isLocked: boolean;
@@ -39,6 +39,9 @@ const useSlider = (_a) => {
39
39
  }
40
40
  slider.slidePrev();
41
41
  };
42
+ const handleImagesReady = (0, react_1.useCallback)((localSlider) => {
43
+ setTimeout(() => localSlider.update(), 100);
44
+ }, []);
42
45
  (0, react_1.useEffect)(() => {
43
46
  if (!slider) {
44
47
  return;
@@ -55,6 +58,7 @@ const useSlider = (_a) => {
55
58
  onSwiper: setSlider,
56
59
  onNext: handleNext,
57
60
  onPrev: handlePrev,
61
+ onImagesReady: handleImagesReady,
58
62
  breakpoints,
59
63
  childrenCount,
60
64
  isLocked,
@@ -1,36 +1,16 @@
1
- import { SliderBreakpointParams, SlidesToShow } from './models';
1
+ import type { SwiperOptions } from 'swiper/types/swiper-options';
2
+ import { SlidesToShow } from './models';
2
3
  export declare const DEFAULT_SLIDE_BREAKPOINTS: {
3
- xl: number;
4
4
  lg: number;
5
5
  md: number;
6
6
  sm: number;
7
+ xs: number;
7
8
  };
8
9
  export interface GetSlidesToShowParams {
9
10
  contentLength: number;
10
- breakpoints?: SlidesToShow;
11
+ slidesToShow?: SlidesToShow;
11
12
  mobileFullscreen?: boolean;
12
13
  }
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
- };
14
+ export declare function getSliderResponsiveParams({ contentLength, slidesToShow, mobileFullscreen, }: GetSlidesToShowParams): Record<number, SwiperOptions>;
15
+ export declare const useMemoized: <T>(value: T) => T;
16
+ export declare const setElementAtrributes: (element: Element, attributes: Record<string, unknown>) => void;