@gravity-ui/page-constructor 5.27.0 → 5.27.1-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 (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 +103 -22
  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 +48 -8
  28. package/build/cjs/components/FullscreenImage/FullscreenImage.d.ts +5 -0
  29. package/build/cjs/components/FullscreenImage/FullscreenImage.js +17 -3
  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 +103 -22
  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 +48 -8
  69. package/build/esm/components/FullscreenImage/FullscreenImage.d.ts +5 -0
  70. package/build/esm/components/FullscreenImage/FullscreenImage.js +18 -4
  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
@@ -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.0",
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