@meduza/ui-kit-2 0.1.3 → 0.1.5

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 (32) hide show
  1. package/dist/DotsOnImage/DotsOnImage.types.d.ts +8 -8
  2. package/dist/EmbedBlock/EmbedBlock.types.d.ts +6 -0
  3. package/dist/EmbedBlock/EmbedGif.d.ts +3 -0
  4. package/dist/Image/Image.types.d.ts +5 -5
  5. package/dist/RawHtmlBlock/RawHtmlBlock.types.d.ts +1 -1
  6. package/dist/ui-kit-2.cjs.development.js +114 -85
  7. package/dist/ui-kit-2.cjs.development.js.map +1 -1
  8. package/dist/ui-kit-2.cjs.production.min.js +1 -1
  9. package/dist/ui-kit-2.cjs.production.min.js.map +1 -1
  10. package/dist/ui-kit-2.esm.js +114 -85
  11. package/dist/ui-kit-2.esm.js.map +1 -1
  12. package/dist/ui-kit.css +787 -789
  13. package/package.json +1 -1
  14. package/src/DotsOnImage/DotsOnImage.module.css +25 -1
  15. package/src/DotsOnImage/DotsOnImage.types.ts +8 -8
  16. package/src/DotsOnImage/index.tsx +12 -8
  17. package/src/EmbedBlock/EmbedBlock.module.css +3 -15
  18. package/src/EmbedBlock/EmbedBlock.stories.tsx +0 -1
  19. package/src/EmbedBlock/EmbedBlock.tsx +41 -95
  20. package/src/EmbedBlock/EmbedBlock.types.ts +7 -0
  21. package/src/EmbedBlock/EmbedGif.tsx +73 -0
  22. package/src/EmbedBlock/mock.json +75 -0
  23. package/src/Image/Image.types.ts +5 -5
  24. package/src/RawHtmlBlock/RawHtmlBlock.stories.tsx +1 -1
  25. package/src/RawHtmlBlock/RawHtmlBlock.types.ts +1 -1
  26. package/src/RenderBlocks/RenderBlocks.stories.tsx +1 -1
  27. package/src/RenderBlocks/index.tsx +1 -0
  28. package/src/RichTitle/RichTitle.types.ts +1 -1
  29. package/src/SimpleBlock/SimpleBlock.types.ts +1 -1
  30. package/src/SimpleTitle/SimpleTitle.types.ts +1 -1
  31. package/src/SourceBlock/SourceBlock.types.ts +1 -1
  32. package/src/Spoiler/Spoiler.types.ts +1 -1
@@ -1,8 +1,8 @@
1
1
  import { OptimizedImageItem } from '../Image/Image.types';
2
2
  export interface PopoverData {
3
- title: string;
4
- body: string;
5
- id: string;
3
+ title?: string;
4
+ body?: string;
5
+ id?: string;
6
6
  show: boolean;
7
7
  }
8
8
  export interface SingleDot {
@@ -27,12 +27,12 @@ export interface DotsOnImageProps {
27
27
  cc?: string;
28
28
  display?: string;
29
29
  optimized?: {
30
- original: string;
30
+ original?: string;
31
31
  w325: OptimizedImageItem;
32
- w520: OptimizedImageItem;
33
- w650: OptimizedImageItem;
34
- w980: OptimizedImageItem;
35
- w1335: OptimizedImageItem;
32
+ w520?: OptimizedImageItem;
33
+ w650?: OptimizedImageItem;
34
+ w980?: OptimizedImageItem;
35
+ w1335?: OptimizedImageItem;
36
36
  };
37
37
  width?: number;
38
38
  height?: number;
@@ -1,3 +1,9 @@
1
+ import React from 'react';
2
+ export interface EmbedGifProps {
3
+ gif: string;
4
+ mp4Url: string;
5
+ style: React.CSSProperties;
6
+ }
1
7
  export interface EmbedBlockProps {
2
8
  block: any;
3
9
  styleContext?: string[] | string;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import { EmbedGifProps } from './EmbedBlock.types';
3
+ export declare const EmbedGif: React.FC<EmbedGifProps>;
@@ -25,12 +25,12 @@ export interface ImageProps {
25
25
  export interface PictureProps {
26
26
  source?: object;
27
27
  optimized?: {
28
- original: string;
28
+ original?: string;
29
29
  w325: OptimizedImageItem;
30
- w520: OptimizedImageItem;
31
- w650: OptimizedImageItem;
32
- w980: OptimizedImageItem;
33
- w1335: OptimizedImageItem;
30
+ w520?: OptimizedImageItem;
31
+ w650?: OptimizedImageItem;
32
+ w980?: OptimizedImageItem;
33
+ w1335?: OptimizedImageItem;
34
34
  };
35
35
  alt?: string;
36
36
  fallbackSource: string;
@@ -6,7 +6,7 @@ export declare type lightBox = {
6
6
  };
7
7
  export interface RawHtmlBlockProps {
8
8
  block: any;
9
- styleContext: string[] | string;
9
+ styleContext?: string[] | string;
10
10
  isRead?: boolean | undefined;
11
11
  isListened?: boolean | undefined;
12
12
  isInBookmarks?: boolean | undefined;
@@ -481,16 +481,16 @@ var Image = function Image(_ref) {
481
481
  })));
482
482
  };
483
483
 
484
- var styles$5 = {"root":"DotsOnImage-module_root__2XP3Q","dot":"DotsOnImage-module_dot__H1wua","popover":"DotsOnImage-module_popover__35Cpj","popoverTitle":"DotsOnImage-module_popoverTitle__343d8"};
484
+ var styles$5 = {"root":"DotsOnImage-module_root__2XP3Q","dot":"DotsOnImage-module_dot__H1wua","popover":"DotsOnImage-module_popover__35Cpj","popoverTitle":"DotsOnImage-module_popoverTitle__343d8","dismiss":"DotsOnImage-module_dismiss__1EWXd"};
485
485
 
486
486
  var DotsOnImage = function DotsOnImage(_ref) {
487
- var block = _ref.block;
488
- var optimized = block.optimized,
489
- width = block.width,
490
- height = block.height,
491
- credit = block.credit,
492
- display = block.display,
493
- dots = block.dots;
487
+ var _ref$block = _ref.block,
488
+ optimized = _ref$block.optimized,
489
+ width = _ref$block.width,
490
+ height = _ref$block.height,
491
+ credit = _ref$block.credit,
492
+ display = _ref$block.display,
493
+ dots = _ref$block.dots;
494
494
 
495
495
  var _useState = React.useState({
496
496
  title: null,
@@ -513,7 +513,7 @@ var DotsOnImage = function DotsOnImage(_ref) {
513
513
 
514
514
  return React__default.createElement("div", {
515
515
  "data-testid": "dots-on-image",
516
- className: makeClassName([[styles$5.root, true]])
516
+ className: styles$5.root
517
517
  }, React__default.createElement("div", {
518
518
  className: styles$5.dots
519
519
  }, dots.map(function (dot) {
@@ -545,7 +545,18 @@ var DotsOnImage = function DotsOnImage(_ref) {
545
545
  display: display
546
546
  })), popover.show && React__default.createElement("div", {
547
547
  className: styles$5.popover
548
- }, React__default.createElement("div", {
548
+ }, React__default.createElement("button", {
549
+ className: styles$5.dismiss,
550
+ type: "button",
551
+ onClick: function onClick() {
552
+ return setPopover({
553
+ show: false
554
+ });
555
+ }
556
+ }, React__default.createElement(SvgSymbol, {
557
+ icon: "cross",
558
+ size: "unset"
559
+ })), React__default.createElement("div", {
549
560
  className: styles$5.popoverTitle
550
561
  }, popover.title), React__default.createElement("div", {
551
562
  className: styles$5.popoverBody,
@@ -995,33 +1006,18 @@ var DangerousHTML = function DangerousHTML(_ref) {
995
1006
  });
996
1007
  };
997
1008
 
998
- var styles$h = {"root":"EmbedBlock-module_root__28k9U","object":"EmbedBlock-module_object__2_UZ7","objectWrap":"EmbedBlock-module_objectWrap__1aDVd","proportional":"EmbedBlock-module_proportional__3lAv4","attachment":"EmbedBlock-module_attachment__2pE0t","default":"EmbedBlock-module_default__LSDny","xs":"EmbedBlock-module_xs__1hFgW","full":"EmbedBlock-module_full__1TEjx","super_full":"EmbedBlock-module_super_full__1Fn9A","figure":"EmbedBlock-module_figure__vAvcN","dark":"EmbedBlock-module_dark__1be2G","isInGroupedBlock":"EmbedBlock-module_isInGroupedBlock__3r_i-","gameEmbed":"EmbedBlock-module_gameEmbed__AZQSo","mobile":"EmbedBlock-module_mobile__1P-eo","desktop":"EmbedBlock-module_desktop__SF5a_","control":"EmbedBlock-module_control__xr8dZ","raw_html":"EmbedBlock-module_raw_html__MQoAA","youtube":"EmbedBlock-module_youtube__3gGQ5","vimeo":"EmbedBlock-module_vimeo__kpH1s","onetv":"EmbedBlock-module_onetv__3o33d","coub":"EmbedBlock-module_coub__38Mva","facebook_video":"EmbedBlock-module_facebook_video__1_M05","card":"EmbedBlock-module_card__KTbvp","slide":"EmbedBlock-module_slide__3cL3M","cc":"EmbedBlock-module_cc__1BQ5g","isInAnswer":"EmbedBlock-module_isInAnswer__tLlgs","picture":"EmbedBlock-module_picture__186q0","wrapper":"EmbedBlock-module_wrapper__33XvX"};
1009
+ var styles$h = {"root":"EmbedBlock-module_root__28k9U","object":"EmbedBlock-module_object__2_UZ7","objectWrap":"EmbedBlock-module_objectWrap__1aDVd","proportional":"EmbedBlock-module_proportional__3lAv4","attachment":"EmbedBlock-module_attachment__2pE0t","default":"EmbedBlock-module_default__LSDny","xs":"EmbedBlock-module_xs__1hFgW","full":"EmbedBlock-module_full__1TEjx","super_full":"EmbedBlock-module_super_full__1Fn9A","figure":"EmbedBlock-module_figure__vAvcN","dark":"EmbedBlock-module_dark__1be2G","isInGroupedBlock":"EmbedBlock-module_isInGroupedBlock__3r_i-","gameEmbed":"EmbedBlock-module_gameEmbed__AZQSo","mobile":"EmbedBlock-module_mobile__1P-eo","desktop":"EmbedBlock-module_desktop__SF5a_","control":"EmbedBlock-module_control__xr8dZ","raw_html":"EmbedBlock-module_raw_html__MQoAA","mobileFullwidth":"EmbedBlock-module_mobileFullwidth__QFFLH","card":"EmbedBlock-module_card__KTbvp","slide":"EmbedBlock-module_slide__3cL3M","cc":"EmbedBlock-module_cc__1BQ5g","isInAnswer":"EmbedBlock-module_isInAnswer__tLlgs","picture":"EmbedBlock-module_picture__186q0","wrapper":"EmbedBlock-module_wrapper__33XvX"};
999
1010
 
1000
- var EmbedBlock = function EmbedBlock(_ref) {
1001
- var block = _ref.block,
1002
- _ref$block = _ref.block,
1003
- data = _ref$block.data,
1004
- _ref$block$data = _ref$block.data,
1005
- display = _ref$block$data.display,
1006
- onlyOn = _ref$block$data.only_on,
1007
- provider = _ref$block$data.provider,
1008
- cc = _ref$block$data.cc,
1009
- optimized = _ref$block$data.optimized,
1010
- small = _ref$block$data.small_url,
1011
- large = _ref$block$data.large_url,
1012
- styleContext = _ref.styleContext,
1013
- children = _ref.children;
1011
+ var EmbedGif = function EmbedGif(_ref) {
1012
+ var gif = _ref.gif,
1013
+ mp4Url = _ref.mp4Url,
1014
+ style = _ref.style;
1014
1015
 
1015
1016
  var _useState = React.useState(false),
1016
- isPopoverShown = _useState[0],
1017
- setIsPopoverShown = _useState[1];
1018
-
1019
- var _useState2 = React.useState(false),
1020
- videoFrozen = _useState2[0],
1021
- setVideoFrozen = _useState2[1];
1017
+ videoFrozen = _useState[0],
1018
+ setVideoFrozen = _useState[1];
1022
1019
 
1023
1020
  var videoElem = React.useRef(null);
1024
- var wrapperElem = React.useRef(null);
1025
1021
 
1026
1022
  var handleVideoTouch = function handleVideoTouch() {
1027
1023
  videoElem.current.play();
@@ -1037,31 +1033,72 @@ var EmbedBlock = function EmbedBlock(_ref) {
1037
1033
  React.useEffect(function () {
1038
1034
  var video = videoElem.current;
1039
1035
 
1040
- if (block.type === 'gif' && video) {
1041
- var _viewportSize = viewportSize(),
1042
- viewportWidth = _viewportSize.width;
1036
+ var _viewportSize = viewportSize(),
1037
+ viewportWidth = _viewportSize.width;
1043
1038
 
1044
- enableInlineVideo(video);
1039
+ enableInlineVideo(video);
1045
1040
 
1046
- if (viewportWidth >= MediaQuerySizes.MOBILE) {
1047
- video.setAttribute('autoplay', true);
1048
- video.play();
1049
- } else {
1050
- setVideoFrozen(true);
1051
- video.pause();
1052
- video.addEventListener('touchstart', handleVideoTouch);
1053
- }
1054
-
1055
- video.addEventListener('error', handleVideoError);
1041
+ if (viewportWidth >= MediaQuerySizes.MOBILE) {
1042
+ video.setAttribute('autoplay', true);
1043
+ video.play();
1044
+ } else {
1045
+ setVideoFrozen(true);
1046
+ video.pause();
1047
+ video.addEventListener('touchstart', handleVideoTouch);
1056
1048
  }
1057
1049
 
1050
+ video.addEventListener('error', handleVideoError);
1058
1051
  return function () {
1059
- if (video) {
1060
- video.removeEventListener('touchstart', handleVideoTouch);
1061
- video.removeEventListener('error', handleVideoError);
1062
- }
1052
+ video.removeEventListener('touchstart', handleVideoTouch);
1053
+ video.removeEventListener('error', handleVideoError);
1063
1054
  };
1064
1055
  }, []);
1056
+ return React__default.createElement("div", {
1057
+ className: styles$h.figure
1058
+ }, React__default.createElement("div", {
1059
+ className: styles$h.objectWrap,
1060
+ style: style,
1061
+ "data-frozen": videoFrozen
1062
+ }, React__default.createElement("video", {
1063
+ playsInline: true,
1064
+ muted: true,
1065
+ loop: true,
1066
+ autoPlay: true,
1067
+ preload: "metadata",
1068
+ "data-gif": gif,
1069
+ ref: videoElem
1070
+ }, React__default.createElement("source", {
1071
+ src: "https://meduza.io" + mp4Url,
1072
+ type: "video/mp4"
1073
+ }))));
1074
+ };
1075
+
1076
+ var EmbedBlock = function EmbedBlock(_ref) {
1077
+ var block = _ref.block,
1078
+ _ref$block = _ref.block,
1079
+ data = _ref$block.data,
1080
+ _ref$block$data = _ref$block.data,
1081
+ html = _ref$block$data.html,
1082
+ display = _ref$block$data.display,
1083
+ onlyOn = _ref$block$data.only_on,
1084
+ provider = _ref$block$data.provider,
1085
+ cc = _ref$block$data.cc,
1086
+ optimized = _ref$block$data.optimized,
1087
+ small = _ref$block$data.small_url,
1088
+ large = _ref$block$data.large_url,
1089
+ gifUrl = _ref$block$data.gif_url,
1090
+ mp4Url = _ref$block$data.mp4_url,
1091
+ styleContext = _ref.styleContext,
1092
+ children = _ref.children;
1093
+
1094
+ var _useState = React.useState(false),
1095
+ isPopoverShown = _useState[0],
1096
+ setIsPopoverShown = _useState[1];
1097
+
1098
+ var style = {};
1099
+ var isProportional = block.data.height && block.data.width;
1100
+ var fullWidthProviders = ['youtube', 'vimeo', 'onetv', 'coub', 'facebook_video'];
1101
+ var mobileFullwidth = fullWidthProviders.indexOf(provider) || block.type === 'dots_on_image';
1065
1102
 
1066
1103
  var renderCC = function renderCC(context) {
1067
1104
  return React__default.createElement(MediaCaption, {
@@ -1072,30 +1109,14 @@ var EmbedBlock = function EmbedBlock(_ref) {
1072
1109
  };
1073
1110
 
1074
1111
  var renderEmbed = function renderEmbed(style) {
1075
- var html = block.data.html;
1076
-
1077
1112
  switch (block.type) {
1078
1113
  case 'gif':
1079
1114
  {
1080
- return React__default.createElement("div", {
1081
- className: styles$h.figure
1082
- }, React__default.createElement("div", {
1083
- className: styles$h.objectWrap,
1084
- style: style,
1085
- ref: wrapperElem,
1086
- "data-frozen": videoFrozen
1087
- }, React__default.createElement("video", {
1088
- playsInline: true,
1089
- muted: true,
1090
- loop: true,
1091
- autoPlay: true,
1092
- preload: "metadata",
1093
- "data-gif": block.data.gif_url,
1094
- ref: videoElem
1095
- }, React__default.createElement("source", {
1096
- src: "https://meduza.io" + block.data.mp4_url,
1097
- type: "video/mp4"
1098
- }))));
1115
+ return React__default.createElement(EmbedGif, {
1116
+ gif: gifUrl,
1117
+ mp4Url: mp4Url,
1118
+ style: style
1119
+ });
1099
1120
  }
1100
1121
 
1101
1122
  case 'image':
@@ -1125,6 +1146,15 @@ var EmbedBlock = function EmbedBlock(_ref) {
1125
1146
  }));
1126
1147
  }
1127
1148
 
1149
+ case 'dots_on_image':
1150
+ {
1151
+ return React__default.createElement("div", {
1152
+ className: styles$h.figure
1153
+ }, React__default.createElement(DotsOnImage, {
1154
+ block: data
1155
+ }));
1156
+ }
1157
+
1128
1158
  default:
1129
1159
  {
1130
1160
  return React__default.createElement("div", {
@@ -1138,29 +1168,27 @@ var EmbedBlock = function EmbedBlock(_ref) {
1138
1168
  })));
1139
1169
  }
1140
1170
  }
1141
- };
1171
+ }; // Убираем из контекста все, что не начинается с приставки isIn,
1172
+ // чтобы не применились лишние модификаторы
1173
+ // TODO: в w6 модификаторы должны передаваться явно
1142
1174
 
1143
- var style = {};
1144
- var isProportional; // @TODO: Разобраться зачем это было нужно
1145
- // const className = Object.keys(styleContext)
1146
- // .filter(key => key.startsWith('isIn') && styles[key])
1147
- // .reduce((acc, key) => {
1148
- // acc.push([styles[key], true])
1149
- // return acc
1150
- // }, [])
1151
1175
 
1152
- /* eslint-disable react/no-array-index-key, no-mixed-operators */
1176
+ var filteredContext = Object.keys(styleContext).filter(function (key) {
1177
+ return key.startsWith('isIn') && styles$h[key];
1178
+ }).reduce(function (acc, key) {
1179
+ acc.push([styles$h[key], true]);
1180
+ return acc;
1181
+ }, []);
1153
1182
 
1154
- if (block.data.height && block.data.width) {
1183
+ if (isProportional) {
1155
1184
  style.paddingBottom = block.data.height / block.data.width * 100 + "%";
1156
1185
  style.height = 0;
1157
- isProportional = true;
1158
1186
  }
1159
1187
 
1160
- var classNames = [[styles$h.root, true], [styles$h.cc, cc], [styles$h[display], !!display && styles$h[display]], [styles$h[provider], !!provider && !!styles$h[provider]], [styles$h[onlyOn], !!onlyOn && styles$h[onlyOn]], [styles$h.proportional, !!styles$h.proportional && isProportional]];
1188
+ var classNames = [[styles$h.root, true], [styles$h.cc, cc], [styles$h[display], !!display && styles$h[display]], [styles$h[provider], !!provider && !!styles$h[provider]], [styles$h[onlyOn], !!onlyOn && styles$h[onlyOn]], [styles$h.mobileFullwidth, mobileFullwidth], [styles$h.proportional, isProportional]];
1161
1189
 
1162
1190
  if (styleContext) {
1163
- classNames = makeStyleContext(classNames, styleContext, styles$h);
1191
+ classNames = makeStyleContext(classNames, filteredContext, styles$h);
1164
1192
  }
1165
1193
 
1166
1194
  return React__default.createElement("figure", {
@@ -1872,6 +1900,7 @@ var RenderBlocks = function RenderBlocks(_ref) {
1872
1900
  case 'embed_code':
1873
1901
  case 'game_embed':
1874
1902
  case 'image':
1903
+ case 'dots_on_image':
1875
1904
  case 'gif':
1876
1905
  return React__default.createElement(EmbedBlockContainer, {
1877
1906
  block: block,