@gravity-ui/page-constructor 5.27.0 → 5.27.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +54 -0
  2. package/build/cjs/blocks/HeaderSlider/HeaderSlider.css +0 -10
  3. package/build/cjs/blocks/HeaderSlider/HeaderSlider.js +2 -2
  4. package/build/cjs/blocks/Slider/Slider.css +2 -0
  5. package/build/cjs/blocks/Slider/Slider.d.ts +1 -0
  6. package/build/cjs/blocks/Slider/Slider.js +85 -31
  7. package/build/cjs/blocks/Slider/i18n/en.json +3 -1
  8. package/build/cjs/blocks/Slider/i18n/index.d.ts +1 -1
  9. package/build/cjs/blocks/Slider/i18n/ru.json +3 -1
  10. package/build/cjs/blocks/Slider/utils.d.ts +10 -0
  11. package/build/cjs/blocks/Slider/utils.js +85 -1
  12. package/build/cjs/blocks/SliderNew/Arrow/Arrow.css +23 -19
  13. package/build/cjs/blocks/SliderNew/Arrow/Arrow.d.ts +4 -1
  14. package/build/cjs/blocks/SliderNew/Arrow/Arrow.js +5 -4
  15. package/build/cjs/blocks/SliderNew/Slider.css +104 -15
  16. package/build/cjs/blocks/SliderNew/Slider.d.ts +2 -1
  17. package/build/cjs/blocks/SliderNew/Slider.js +22 -9
  18. package/build/cjs/blocks/SliderNew/i18n/en.json +3 -1
  19. package/build/cjs/blocks/SliderNew/i18n/index.d.ts +1 -1
  20. package/build/cjs/blocks/SliderNew/i18n/ru.json +3 -1
  21. package/build/cjs/blocks/SliderNew/useSlider.d.ts +8 -6
  22. package/build/cjs/blocks/SliderNew/useSlider.js +4 -2
  23. package/build/cjs/blocks/SliderNew/useSliderPagination.d.ts +9 -0
  24. package/build/cjs/blocks/SliderNew/useSliderPagination.js +36 -0
  25. package/build/cjs/blocks/SliderNew/utils.d.ts +2 -0
  26. package/build/cjs/blocks/SliderNew/utils.js +13 -1
  27. package/build/cjs/components/FullscreenImage/FullscreenImage.css +91 -16
  28. package/build/cjs/components/FullscreenImage/FullscreenImage.d.ts +5 -0
  29. package/build/cjs/components/FullscreenImage/FullscreenImage.js +19 -5
  30. package/build/cjs/components/Media/Image/Image.d.ts +1 -0
  31. package/build/cjs/components/Media/Image/Image.js +7 -5
  32. package/build/cjs/components/Media/Media.css +4 -0
  33. package/build/cjs/components/Media/Media.d.ts +1 -0
  34. package/build/cjs/components/Media/Media.js +3 -2
  35. package/build/cjs/components/MediaBase/MediaBase.js +1 -1
  36. package/build/cjs/components/ReactPlayer/ReactPlayer.js +1 -1
  37. package/build/cjs/constructor-items.d.ts +1 -1
  38. package/build/cjs/models/constructor-items/blocks.d.ts +2 -1
  39. package/build/cjs/models/constructor-items/blocks.js +1 -0
  40. package/build/cjs/navigation/hooks/useShowBorder.js +3 -2
  41. package/build/cjs/sub-blocks/Content/Content.css +14 -4
  42. package/build/cjs/sub-blocks/ImageCard/ImageCard.css +8 -0
  43. package/build/esm/blocks/HeaderSlider/HeaderSlider.css +0 -10
  44. package/build/esm/blocks/HeaderSlider/HeaderSlider.js +1 -1
  45. package/build/esm/blocks/Slider/Slider.css +2 -0
  46. package/build/esm/blocks/Slider/Slider.d.ts +1 -0
  47. package/build/esm/blocks/Slider/Slider.js +86 -32
  48. package/build/esm/blocks/Slider/i18n/en.json +3 -1
  49. package/build/esm/blocks/Slider/i18n/index.d.ts +1 -1
  50. package/build/esm/blocks/Slider/i18n/ru.json +3 -1
  51. package/build/esm/blocks/Slider/utils.d.ts +10 -0
  52. package/build/esm/blocks/Slider/utils.js +82 -0
  53. package/build/esm/blocks/SliderNew/Arrow/Arrow.css +23 -19
  54. package/build/esm/blocks/SliderNew/Arrow/Arrow.d.ts +4 -1
  55. package/build/esm/blocks/SliderNew/Arrow/Arrow.js +5 -4
  56. package/build/esm/blocks/SliderNew/Slider.css +104 -15
  57. package/build/esm/blocks/SliderNew/Slider.d.ts +2 -1
  58. package/build/esm/blocks/SliderNew/Slider.js +22 -9
  59. package/build/esm/blocks/SliderNew/i18n/en.json +3 -1
  60. package/build/esm/blocks/SliderNew/i18n/index.d.ts +1 -1
  61. package/build/esm/blocks/SliderNew/i18n/ru.json +3 -1
  62. package/build/esm/blocks/SliderNew/useSlider.d.ts +8 -6
  63. package/build/esm/blocks/SliderNew/useSlider.js +6 -3
  64. package/build/esm/blocks/SliderNew/useSliderPagination.d.ts +9 -0
  65. package/build/esm/blocks/SliderNew/useSliderPagination.js +32 -0
  66. package/build/esm/blocks/SliderNew/utils.d.ts +2 -0
  67. package/build/esm/blocks/SliderNew/utils.js +10 -0
  68. package/build/esm/components/FullscreenImage/FullscreenImage.css +91 -16
  69. package/build/esm/components/FullscreenImage/FullscreenImage.d.ts +5 -0
  70. package/build/esm/components/FullscreenImage/FullscreenImage.js +20 -6
  71. package/build/esm/components/Media/Image/Image.d.ts +1 -0
  72. package/build/esm/components/Media/Image/Image.js +7 -5
  73. package/build/esm/components/Media/Media.css +4 -0
  74. package/build/esm/components/Media/Media.d.ts +1 -0
  75. package/build/esm/components/Media/Media.js +3 -2
  76. package/build/esm/components/MediaBase/MediaBase.js +1 -1
  77. package/build/esm/components/ReactPlayer/ReactPlayer.js +1 -1
  78. package/build/esm/constructor-items.d.ts +1 -1
  79. package/build/esm/models/constructor-items/blocks.d.ts +2 -1
  80. package/build/esm/models/constructor-items/blocks.js +1 -0
  81. package/build/esm/navigation/hooks/useShowBorder.js +1 -1
  82. package/build/esm/sub-blocks/Content/Content.css +14 -4
  83. package/build/esm/sub-blocks/ImageCard/ImageCard.css +8 -0
  84. package/package.json +2 -1
  85. package/server/models/constructor-items/blocks.d.ts +2 -1
  86. package/server/models/constructor-items/blocks.js +1 -0
  87. package/styles/mixins.scss +1 -1
  88. package/widget/index.js +1 -1
@@ -6,12 +6,31 @@ unpredictable css rules order in build */
6
6
  .pc-fullscreen-image__image-wrapper {
7
7
  position: relative;
8
8
  }
9
- .pc-fullscreen-image__image-wrapper:hover .pc-fullscreen-image__icon-wrapper {
9
+ .pc-fullscreen-image__image-wrapper:hover .pc-fullscreen-image__expand-icon-wrapper {
10
10
  opacity: 1;
11
11
  }
12
12
  .pc-fullscreen-image__modal-content {
13
13
  position: relative;
14
14
  border-radius: var(--pc-border-radius);
15
+ width: 100%;
16
+ }
17
+ .pc-fullscreen-image__modal-content-wrapper {
18
+ width: 100%;
19
+ }
20
+ .pc-fullscreen-image__modal-content_loaded {
21
+ max-width: fit-content;
22
+ }
23
+ .pc-fullscreen-image__modal_with-slider .g-modal__content-wrapper {
24
+ width: 100%;
25
+ height: 100vh;
26
+ margin: 0;
27
+ justify-content: center;
28
+ }
29
+ .pc-fullscreen-image__modal_with-slider .pc-fullscreen-image__modal-content {
30
+ background-color: transparent;
31
+ }
32
+ .pc-fullscreen-image__modal_with-slider .pc-fullscreen-image__modal-content:hover .pc-fullscreen-image__expand-icon-wrapper, .pc-fullscreen-image__modal_with-slider .pc-fullscreen-image__modal-content:hover .pc-fullscreen-image__close-icon-wrapper {
33
+ opacity: 1;
15
34
  }
16
35
  .pc-fullscreen-image__modal-image {
17
36
  display: block;
@@ -19,10 +38,31 @@ unpredictable css rules order in build */
19
38
  max-height: 70vh;
20
39
  overflow: hidden;
21
40
  }
41
+ .pc-fullscreen-image__modal-slider {
42
+ max-width: 100vw;
43
+ width: 100%;
44
+ height: 100vh;
45
+ }
46
+ .pc-fullscreen-image__modal-slider_item {
47
+ height: 100%;
48
+ display: flex;
49
+ justify-content: center;
50
+ align-items: center;
51
+ }
52
+ .pc-fullscreen-image__modal-slider_item-image {
53
+ display: block;
54
+ margin: auto;
55
+ border-radius: var(--pc-border-radius);
56
+ overflow: hidden;
57
+ max-height: calc(100vh - 80px);
58
+ max-width: 100%;
59
+ object-fit: contain;
60
+ object-position: center;
61
+ }
22
62
  .pc-fullscreen-image__modal .g-modal__content, .pc-fullscreen-image__modal-image {
23
63
  border-radius: var(--pc-border-radius);
24
64
  }
25
- .pc-fullscreen-image__icon-wrapper {
65
+ .pc-fullscreen-image__expand-icon-wrapper {
26
66
  display: inline-block;
27
67
  margin: 0;
28
68
  padding: 0;
@@ -35,9 +75,47 @@ unpredictable css rules order in build */
35
75
  display: flex;
36
76
  align-items: center;
37
77
  justify-content: center;
78
+ z-index: 1001;
79
+ width: 36px;
80
+ height: 36px;
81
+ border-radius: 8px;
82
+ background-color: var(--g-color-base-simple-hover-solid);
83
+ cursor: pointer;
84
+ opacity: 0;
85
+ transition: 0.3s;
38
86
  position: absolute;
39
87
  right: 16px;
40
88
  top: 16px;
89
+ }
90
+ .pc-fullscreen-image__expand-icon-wrapper:focus {
91
+ outline: 2px solid var(--g-color-line-focus);
92
+ outline-offset: 0;
93
+ }
94
+ .pc-fullscreen-image__expand-icon-wrapper:focus:not(:focus-visible) {
95
+ outline: 0;
96
+ }
97
+ .pc-fullscreen-image__expand-icon-wrapper:focus {
98
+ opacity: 1;
99
+ }
100
+ @media (max-width: 769px) {
101
+ .pc-fullscreen-image__expand-icon-wrapper {
102
+ opacity: 1;
103
+ }
104
+ }
105
+ .pc-fullscreen-image__close-icon-wrapper {
106
+ display: inline-block;
107
+ margin: 0;
108
+ padding: 0;
109
+ font: inherit;
110
+ border: none;
111
+ outline: none;
112
+ color: inherit;
113
+ background: none;
114
+ cursor: pointer;
115
+ display: flex;
116
+ align-items: center;
117
+ justify-content: center;
118
+ z-index: 1001;
41
119
  width: 36px;
42
120
  height: 36px;
43
121
  border-radius: 8px;
@@ -45,17 +123,25 @@ unpredictable css rules order in build */
45
123
  cursor: pointer;
46
124
  opacity: 0;
47
125
  transition: 0.3s;
126
+ position: absolute;
127
+ right: 24px;
128
+ top: 24px;
48
129
  }
49
- .pc-fullscreen-image__icon-wrapper:focus {
130
+ .pc-fullscreen-image__close-icon-wrapper:focus {
50
131
  outline: 2px solid var(--g-color-line-focus);
51
132
  outline-offset: 0;
52
133
  }
53
- .pc-fullscreen-image__icon-wrapper:focus:not(:focus-visible) {
134
+ .pc-fullscreen-image__close-icon-wrapper:focus:not(:focus-visible) {
54
135
  outline: 0;
55
136
  }
56
- .pc-fullscreen-image__icon-wrapper:focus {
137
+ .pc-fullscreen-image__close-icon-wrapper:focus {
57
138
  opacity: 1;
58
139
  }
140
+ @media (max-width: 769px) {
141
+ .pc-fullscreen-image__close-icon-wrapper {
142
+ opacity: 1;
143
+ }
144
+ }
59
145
  .pc-fullscreen-image__icon {
60
146
  color: var(--g-color-text-hint);
61
147
  }
@@ -66,15 +152,4 @@ unpredictable css rules order in build */
66
152
  .pc-fullscreen-image__modal-image {
67
153
  width: 100%;
68
154
  }
69
- }
70
- @media (max-width: 1081px) {
71
- .pc-fullscreen-image__image {
72
- pointer-events: none;
73
- }
74
- .pc-fullscreen-image__icon-wrapper {
75
- display: none;
76
- }
77
- .pc-fullscreen-image__modal {
78
- display: none !important; /* stylelint-disable-line declaration-no-important */
79
- }
80
155
  }
@@ -1,4 +1,5 @@
1
1
  import { CSSProperties, HTMLProps } from 'react';
2
+ import { ImageProps as ModelImageProps } from '../../models';
2
3
  import { ImageProps } from '../Image/Image';
3
4
  import './FullscreenImage.css';
4
5
  export interface FullscreenImageProps extends ImageProps {
@@ -6,6 +7,10 @@ export interface FullscreenImageProps extends ImageProps {
6
7
  modalImageClass?: string;
7
8
  imageStyle?: CSSProperties;
8
9
  extraProps?: HTMLProps<HTMLDivElement>;
10
+ sliderData?: {
11
+ items: ModelImageProps[];
12
+ initialIndex: number;
13
+ };
9
14
  }
10
15
  declare const FullscreenImage: (props: FullscreenImageProps) => JSX.Element;
11
16
  export default FullscreenImage;
@@ -1,26 +1,40 @@
1
- import React, { useState } from 'react';
1
+ import React, { useEffect, useState } from 'react';
2
2
  import { ChevronsExpandUpRight, Xmark } from '@gravity-ui/icons';
3
3
  import { Icon, Modal } from '@gravity-ui/uikit';
4
+ import { SliderNewBlock as SliderBlock } from '../../blocks/unstable';
5
+ import { SliderType } from '../../models';
4
6
  import { block } from '../../utils';
5
7
  import Image from '../Image/Image';
8
+ import { getMediaImage } from '../Media/Image/utils';
6
9
  import { i18n } from './i18n';
7
10
  import './FullscreenImage.css';
8
11
  const b = block('fullscreen-image');
9
12
  const FULL_SCREEN_ICON_SIZE = 18;
10
13
  const CLOSE_ICON_SIZE = 24;
11
14
  const FullscreenImage = (props) => {
12
- const { imageClassName, modalImageClass, imageStyle, alt = i18n('img-alt'), extraProps } = props;
15
+ const { imageClassName, sliderData, modalImageClass, imageStyle, alt = i18n('img-alt'), extraProps, } = props;
13
16
  const [isOpened, setIsOpened] = useState(false);
17
+ const [sliderLoaded, setSliderLoaded] = useState(false);
14
18
  const openModal = () => setIsOpened(true);
15
19
  const closeModal = () => setIsOpened(false);
20
+ useEffect(() => {
21
+ if (sliderData && !isOpened) {
22
+ setSliderLoaded(false);
23
+ }
24
+ }, [isOpened, sliderData]);
25
+ const handleSliderImageLoad = () => {
26
+ setSliderLoaded(true);
27
+ };
16
28
  return (React.createElement("div", Object.assign({ className: b() }, extraProps),
17
29
  React.createElement("div", { className: b('image-wrapper') },
18
30
  React.createElement(Image, Object.assign({}, props, { alt: alt, className: b('image', imageClassName), onClick: openModal, style: imageStyle })),
19
- React.createElement("button", { className: b('icon-wrapper'), onClick: openModal },
31
+ React.createElement("button", { className: b('expand-icon-wrapper'), onClick: openModal },
20
32
  React.createElement(Icon, { data: ChevronsExpandUpRight, width: FULL_SCREEN_ICON_SIZE, height: FULL_SCREEN_ICON_SIZE, className: b('icon') }))),
21
- isOpened && (React.createElement(Modal, { open: isOpened, onClose: closeModal, className: b('modal'), contentClassName: b('modal-content') },
22
- React.createElement("button", { className: b('icon-wrapper', { visible: true }), onClick: closeModal, "aria-label": i18n('close') },
33
+ isOpened && (React.createElement(Modal, { open: isOpened, onClose: closeModal, className: b('modal', { 'with-slider': Boolean(sliderData) }), contentClassName: b('modal-content', { loaded: sliderLoaded }) },
34
+ React.createElement("button", { className: b('close-icon-wrapper', { visible: true }), onClick: closeModal, "aria-label": i18n('close') },
23
35
  React.createElement(Icon, { data: Xmark, width: CLOSE_ICON_SIZE, height: CLOSE_ICON_SIZE, className: b('icon', { hover: true }) })),
24
- React.createElement(Image, Object.assign({}, props, { className: b('modal-image', modalImageClass) }))))));
36
+ sliderData ? (React.createElement("div", { className: b('modal-slider') },
37
+ React.createElement(SliderBlock, { initialSlide: sliderData.initialIndex, slidesToShow: 1, type: SliderType.FullscreenCard }, sliderData.items.map((item, index) => (React.createElement("div", { key: index, className: b('modal-slider_item') },
38
+ React.createElement(Image, Object.assign({ onLoad: handleSliderImageLoad, className: b('modal-slider_item-image', modalImageClass), containerClassName: b('modal-slider_item-image-wrapper') }, getMediaImage(item))))))))) : (React.createElement(Image, Object.assign({}, props, { className: b('modal-image', modalImageClass) })))))));
25
39
  };
26
40
  export default FullscreenImage;
@@ -4,6 +4,7 @@ export interface ImageAdditionProps {
4
4
  imageClassName?: string;
5
5
  isBackground?: boolean;
6
6
  fullscreen?: boolean;
7
+ fullscreenClassName?: string;
7
8
  onLoad?: () => void;
8
9
  }
9
10
  interface InnerImageProps {
@@ -1,7 +1,7 @@
1
1
  import React, { Fragment, useEffect, useState } from 'react';
2
2
  import { animated, config, useSpring } from '@react-spring/web';
3
3
  import debounce from 'lodash/debounce';
4
- import SliderBlock from '../../../blocks/Slider/Slider';
4
+ import { SliderNewBlock as SliderBlock } from '../../../blocks/unstable';
5
5
  import { SliderType } from '../../../models';
6
6
  import { block, getQaAttrubutes } from '../../../utils';
7
7
  import BackgroundImage from '../../BackgroundImage/BackgroundImage';
@@ -12,7 +12,7 @@ import './Image.css';
12
12
  const b = block('media-component-image');
13
13
  export const defaultAnimatedDivQa = 'animated-div';
14
14
  const Image = (props) => {
15
- const { parallax, height, imageClassName, isBackground, hasVideoFallback, video, fullscreen, disableImageSliderForArrayInput, qa, onLoad, } = props;
15
+ const { parallax, height, imageClassName, fullscreenClassName, isBackground, hasVideoFallback, video, fullscreen, disableImageSliderForArrayInput, qa, onLoad, } = props;
16
16
  const image = Array.isArray(props.image) && disableImageSliderForArrayInput
17
17
  ? props.image[0]
18
18
  : props.image;
@@ -38,9 +38,9 @@ const Image = (props) => {
38
38
  parallaxInterpolate = springScrollY.to((value) => `translateY(-${Number(value) / parallaxLevel}px)`);
39
39
  }
40
40
  const imageClass = b('item', { withVideo: Boolean(video) && !hasVideoFallback }, imageClassName);
41
- const renderFullscreenImage = (item) => {
41
+ const renderFullscreenImage = (item, sliderData) => {
42
42
  const itemData = getMediaImage(item);
43
- return (React.createElement(FullscreenImage, Object.assign({ key: itemData.alt }, itemData, { imageClassName: imageClass, imageStyle: { height }, qa: qaAttributes.fullscreenImage })));
43
+ return (React.createElement(FullscreenImage, Object.assign({ key: itemData.alt }, itemData, { imageClassName: imageClass, modalImageClass: fullscreenClassName, imageStyle: { height }, qa: qaAttributes.fullscreenImage, sliderData: sliderData })));
44
44
  };
45
45
  const imageBackground = (oneImage) => {
46
46
  const imageData = getMediaImage(oneImage);
@@ -53,7 +53,9 @@ const Image = (props) => {
53
53
  };
54
54
  const imageSlider = (imageArray) => {
55
55
  const fullscreenItem = fullscreen === undefined || fullscreen;
56
- return (React.createElement(SliderBlock, { slidesToShow: 1, type: SliderType.MediaCard }, imageArray.map((item, index) => (React.createElement(Fragment, { key: index }, fullscreenItem ? renderFullscreenImage(item) : imageOnly(item))))));
56
+ return (React.createElement(SliderBlock, { slidesToShow: 1, type: SliderType.MediaCard }, imageArray.map((item, index) => (React.createElement(Fragment, { key: index }, fullscreenItem
57
+ ? renderFullscreenImage(item, { items: imageArray, initialIndex: index })
58
+ : imageOnly(item))))));
57
59
  };
58
60
  if (Array.isArray(image)) {
59
61
  return imageSlider(image);
@@ -8,4 +8,8 @@ unpredictable css rules order in build */
8
8
  overflow: hidden;
9
9
  display: flex;
10
10
  align-items: center;
11
+ }
12
+ .pc-Media__fullscreen-image-cover {
13
+ object-fit: cover;
14
+ object-position: top;
11
15
  }
@@ -4,6 +4,7 @@ import { VideoAdditionProps } from './Video/Video';
4
4
  import './Media.css';
5
5
  export interface MediaAllProps extends MediaProps, VideoAdditionProps, ImageAdditionProps, QAProps {
6
6
  className?: string;
7
+ isFullscreenImageCover?: boolean;
7
8
  youtubeClassName?: string;
8
9
  autoplay?: boolean;
9
10
  onImageLoad?: () => void;
@@ -9,13 +9,13 @@ import Video from './Video/Video';
9
9
  import './Media.css';
10
10
  const b = block('Media');
11
11
  export const Media = (props) => {
12
- const { image, video, youtube, videoIframe, dataLens, color, height, previewImg, parallax = false, fullscreen, analyticsEvents, className, imageClassName, videoClassName, youtubeClassName, disableImageSliderForArrayInput, playVideo = true, isBackground, playButton, customBarControlsClassName, qa, ratio, autoplay, onImageLoad, iframe, margins, } = props;
12
+ const { image, video, youtube, videoIframe, dataLens, color, height, previewImg, parallax = false, fullscreen, isFullscreenImageCover, analyticsEvents, className, imageClassName, videoClassName, youtubeClassName, disableImageSliderForArrayInput, playVideo = true, isBackground, playButton, customBarControlsClassName, qa, ratio, autoplay, onImageLoad, iframe, margins, } = props;
13
13
  const [hasVideoFallback, setHasVideoFallback] = useState(false);
14
14
  const qaAttributes = getQaAttrubutes(qa, 'video');
15
15
  const content = useMemo(() => {
16
16
  let result = [];
17
17
  if (image) {
18
- result.push(React.createElement(Image, { key: "image", parallax: parallax, image: image, disableImageSliderForArrayInput: disableImageSliderForArrayInput, height: height, imageClassName: imageClassName, isBackground: isBackground, video: video, hasVideoFallback: hasVideoFallback, fullscreen: fullscreen, qa: qaAttributes.image, onLoad: onImageLoad }));
18
+ result.push(React.createElement(Image, { key: "image", parallax: parallax, image: image, disableImageSliderForArrayInput: disableImageSliderForArrayInput, height: height, imageClassName: imageClassName, fullscreenClassName: isFullscreenImageCover ? b('fullscreen-image-cover') : undefined, isBackground: isBackground, video: video, hasVideoFallback: hasVideoFallback, fullscreen: fullscreen, qa: qaAttributes.image, onLoad: onImageLoad }));
19
19
  }
20
20
  if (video) {
21
21
  const videoProps = {
@@ -63,6 +63,7 @@ export const Media = (props) => {
63
63
  isBackground,
64
64
  hasVideoFallback,
65
65
  fullscreen,
66
+ isFullscreenImageCover,
66
67
  qaAttributes.image,
67
68
  qaAttributes.video,
68
69
  onImageLoad,
@@ -30,7 +30,7 @@ export const MediaBase = (props) => {
30
30
  }) },
31
31
  React.createElement(Col, { className: b('content'), sizes: contentSizes }, mediaContent),
32
32
  card ? (React.createElement(Col, { sizes: mediaSizes },
33
- React.createElement("div", null, card))) : null))));
33
+ React.createElement("div", { className: b('card') }, card))) : null))));
34
34
  };
35
35
  MediaBase.Card = Card;
36
36
  export default MediaBase;
@@ -21,7 +21,7 @@ const FPS = 60;
21
21
  // eslint-disable-next-line react/display-name
22
22
  export const ReactPlayerBlock = React.forwardRef((props, originRef) => {
23
23
  const isMobile = useContext(MobileContext);
24
- const { src, previewImgUrl, loop = false, controls = MediaVideoControlsType.Default, customControlsOptions = {}, muted: initiallyMuted = false, elapsedTime, playButton, className, customBarControlsClassName, showPreview, onClickPreview, analyticsEvents, height, ariaLabel, ratio, autoRatio, contain, } = props;
24
+ const { src, previewImgUrl, loop = false, controls = MediaVideoControlsType.Default, customControlsOptions = {}, muted: initiallyMuted = false, elapsedTime, playButton, className, customBarControlsClassName, showPreview, onClickPreview, analyticsEvents, height, ariaLabel, ratio, autoRatio, contain = true, } = props;
25
25
  const { type = PlayButtonType.Default, theme = PlayButtonThemes.Blue, text, className: buttonClassName, } = playButton || {};
26
26
  const { type: customControlsType = CustomControlsType.WithMuteButton, muteButtonShown, positioning = CustomControlsButtonPositioning.Center, } = customControlsOptions;
27
27
  const autoPlay = Boolean(!isMobile && !previewImgUrl && props.autoplay);
@@ -18,7 +18,7 @@ export declare const blockMap: {
18
18
  "map-block": ({ map, border, disableShadow, ...props }: import("./models").MapBlockProps) => JSX.Element;
19
19
  "filter-block": import("react").FC<import("./models").FilterBlockProps>;
20
20
  "form-block": import("react").FC<import("./models").FormBlockProps>;
21
- "slider-new-block": ({ animated, title, description, type, anchorId, arrows, adaptive, autoplay: autoplayMs, dots, className, dotsClassName, disclaimer, children, blockClassName, arrowSize, slidesToShow, onSlideChange, onSlideChangeTransitionStart, onSlideChangeTransitionEnd, onActiveIndexChange, onBreakpoint, }: import("react").PropsWithChildren<import("./blocks/SliderNew/Slider").SliderNewProps>) => JSX.Element;
21
+ "slider-new-block": ({ animated, title, description, type, anchorId, arrows, adaptive, autoplay: autoplayMs, dots, initialSlide, className, dotsClassName, disclaimer, children, blockClassName, arrowSize, slidesToShow, onSlideChange, onSlideChangeTransitionStart, onSlideChangeTransitionEnd, onActiveIndexChange, onBreakpoint, }: import("react").PropsWithChildren<import("./blocks/SliderNew/Slider").SliderNewProps>) => JSX.Element;
22
22
  };
23
23
  export declare const subBlockMap: {
24
24
  divider: ({ size, border }: import("./models").DividerProps) => JSX.Element;
@@ -62,7 +62,8 @@ export declare enum SliderBreakpointNames {
62
62
  }
63
63
  export declare enum SliderType {
64
64
  MediaCard = "media-card",
65
- HeaderCard = "header-card"
65
+ HeaderCard = "header-card",
66
+ FullscreenCard = "fullscreen-card"
66
67
  }
67
68
  export type SliderBreakpointParams = Record<SliderBreakpointNames, number>;
68
69
  export type SlidesToShow = Partial<SliderBreakpointParams> | number;
@@ -35,6 +35,7 @@ export var SliderType;
35
35
  (function (SliderType) {
36
36
  SliderType["MediaCard"] = "media-card";
37
37
  SliderType["HeaderCard"] = "header-card";
38
+ SliderType["FullscreenCard"] = "fullscreen-card";
38
39
  })(SliderType || (SliderType = {}));
39
40
  export var PCShareSocialNetwork;
40
41
  (function (PCShareSocialNetwork) {
@@ -1,5 +1,5 @@
1
1
  import { useEffect, useState } from 'react';
2
- import { debounce } from 'lodash';
2
+ import debounce from 'lodash/debounce';
3
3
  const useShowBorder = (withBorder, withBorderOnScroll) => {
4
4
  const [showBorder, setShowBorder] = useState(withBorder);
5
5
  useEffect(() => {
@@ -87,6 +87,9 @@ unpredictable css rules order in build */
87
87
  .pc-content_theme_dark .pc-content__title *,
88
88
  .pc-content_theme_dark .pc-content__text .yfm,
89
89
  .pc-content_theme_dark .pc-content__text .yfm *,
90
+ .pc-content_theme_dark .pc-content__list *,
91
+ .pc-content_theme_dark .pc-content__list .yfm,
92
+ .pc-content_theme_dark .pc-content__list .yfm *,
90
93
  .pc-content_theme_dark .pc-content__links a {
91
94
  color: var(--g-color-text-light-primary);
92
95
  }
@@ -101,11 +104,13 @@ unpredictable css rules order in build */
101
104
  .pc-content_theme_dark .pc-content__notice .yfm a:hover {
102
105
  color: var(--g-color-text-light-primary);
103
106
  }
104
- .pc-content_theme_dark .pc-content__text .yfm a {
107
+ .pc-content_theme_dark .pc-content__text .yfm a,
108
+ .pc-content_theme_dark .pc-content__list .yfm a {
105
109
  color: var(--g-color-text-light-primary);
106
110
  text-decoration: underline;
107
111
  }
108
- .pc-content_theme_dark .pc-content__text .yfm a:hover {
112
+ .pc-content_theme_dark .pc-content__text .yfm a:hover,
113
+ .pc-content_theme_dark .pc-content__list .yfm a:hover {
109
114
  color: var(--g-color-text-light-secondary);
110
115
  }
111
116
  .pc-content_theme_dark .pc-content__title a {
@@ -119,6 +124,9 @@ unpredictable css rules order in build */
119
124
  .pc-content_theme_light .pc-content__title *,
120
125
  .pc-content_theme_light .pc-content__text .yfm,
121
126
  .pc-content_theme_light .pc-content__text .yfm *,
127
+ .pc-content_theme_light .pc-content__list *,
128
+ .pc-content_theme_light .pc-content__list .yfm,
129
+ .pc-content_theme_light .pc-content__list .yfm *,
122
130
  .pc-content_theme_light .pc-content__links a {
123
131
  color: var(--g-color-text-dark-primary);
124
132
  }
@@ -133,11 +141,13 @@ unpredictable css rules order in build */
133
141
  .pc-content_theme_light .pc-content__notice .yfm a:hover {
134
142
  color: var(--g-color-text-dark-primary);
135
143
  }
136
- .pc-content_theme_light .pc-content__text .yfm a {
144
+ .pc-content_theme_light .pc-content__text .yfm a,
145
+ .pc-content_theme_light .pc-content__list .yfm a {
137
146
  color: var(--g-color-text-dark-primary);
138
147
  text-decoration: underline;
139
148
  }
140
- .pc-content_theme_light .pc-content__text .yfm a:hover {
149
+ .pc-content_theme_light .pc-content__text .yfm a:hover,
150
+ .pc-content_theme_light .pc-content__list .yfm a:hover {
141
151
  color: var(--g-color-text-dark-secondary);
142
152
  }
143
153
  .pc-content_theme_light .pc-content__title a {
@@ -16,6 +16,14 @@ unpredictable css rules order in build */
16
16
  .pc-image-card_border_line {
17
17
  border: 1px solid var(--g-color-line-generic);
18
18
  }
19
+ @media (min-width: 577px) {
20
+ .slick-slide:not(.slick-active) .pc-image-card {
21
+ box-shadow: none;
22
+ }
23
+ .swiper-slide:not(.swiper-slide-visible) .pc-image-card {
24
+ box-shadow: none;
25
+ }
26
+ }
19
27
  .pc-image-card .pc-image-card__content {
20
28
  display: flex;
21
29
  padding: 32px;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/page-constructor",
3
- "version": "5.27.0",
3
+ "version": "5.27.1-alpha.1",
4
4
  "description": "Gravity UI Page Constructor",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -80,6 +80,7 @@
80
80
  "test:watch": "jest --watchAll",
81
81
  "playwright": "playwright test --config=playwright/playwright.config.ts",
82
82
  "playwright:update": "npm run playwright -- -u",
83
+ "playwright:clear-cache": "rm -rf ./playwright/.cache",
83
84
  "playwright:docker": "./scripts/playwright-docker.sh 'npm run playwright'",
84
85
  "playwright:docker:update": "./scripts/playwright-docker.sh 'npm run playwright:update'",
85
86
  "playwright:docker:clear-cache": "./scripts/playwright-docker.sh clear-cache",
@@ -62,7 +62,8 @@ export declare enum SliderBreakpointNames {
62
62
  }
63
63
  export declare enum SliderType {
64
64
  MediaCard = "media-card",
65
- HeaderCard = "header-card"
65
+ HeaderCard = "header-card",
66
+ FullscreenCard = "fullscreen-card"
66
67
  }
67
68
  export type SliderBreakpointParams = Record<SliderBreakpointNames, number>;
68
69
  export type SlidesToShow = Partial<SliderBreakpointParams> | number;
@@ -38,6 +38,7 @@ var SliderType;
38
38
  (function (SliderType) {
39
39
  SliderType["MediaCard"] = "media-card";
40
40
  SliderType["HeaderCard"] = "header-card";
41
+ SliderType["FullscreenCard"] = "fullscreen-card";
41
42
  })(SliderType = exports.SliderType || (exports.SliderType = {}));
42
43
  var PCShareSocialNetwork;
43
44
  (function (PCShareSocialNetwork) {
@@ -1,4 +1,4 @@
1
- @import 'node_modules/@gravity-ui/uikit/styles/mixins.scss';
1
+ @import '@gravity-ui/uikit/styles/mixins.scss';
2
2
  @import './variables.scss';
3
3
 
4
4
  //common