@gravity-ui/page-constructor 1.26.0-alpha.2 → 1.26.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 (53) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +8 -0
  3. package/build/cjs/blocks/FilterBlock/FilterBlock.css +1 -5
  4. package/build/cjs/blocks/Header/Header.js +2 -5
  5. package/build/cjs/blocks/Icons/Icons.js +1 -1
  6. package/build/cjs/blocks/Share/Share.js +1 -2
  7. package/build/cjs/blocks/Tabs/Tabs.css +1 -5
  8. package/build/cjs/components/BackLink/BackLink.js +1 -2
  9. package/build/cjs/components/Button/Button.js +1 -2
  10. package/build/cjs/components/FileLink/FileLink.js +1 -2
  11. package/build/cjs/components/HeaderBreadcrumbs/HeaderBreadcrumbs.js +1 -2
  12. package/build/cjs/components/Link/Link.js +1 -2
  13. package/build/cjs/components/ReactPlayer/ReactPlayer.js +3 -1
  14. package/build/cjs/components/ReactPlayer/utils.d.ts +1 -0
  15. package/build/cjs/components/ReactPlayer/utils.js +23 -0
  16. package/build/cjs/components/Title/Title.js +1 -2
  17. package/build/cjs/components/index.d.ts +0 -1
  18. package/build/cjs/components/index.js +1 -3
  19. package/build/cjs/models/constructor-items/common.d.ts +0 -2
  20. package/build/cjs/navigation/components/NavigationItem/components/GithubButton/GithubButton.js +1 -2
  21. package/build/cjs/navigation/components/SocialIcon/SocialIcon.js +1 -1
  22. package/build/cjs/sub-blocks/Quote/Quote.js +1 -1
  23. package/build/cjs/sub-blocks/Quote/schema.d.ts +3 -0
  24. package/build/cjs/sub-blocks/Quote/schema.js +2 -0
  25. package/build/esm/blocks/FilterBlock/FilterBlock.css +1 -5
  26. package/build/esm/blocks/Header/Header.js +3 -6
  27. package/build/esm/blocks/Icons/Icons.js +2 -2
  28. package/build/esm/blocks/Share/Share.js +1 -2
  29. package/build/esm/blocks/Tabs/Tabs.css +1 -5
  30. package/build/esm/components/BackLink/BackLink.js +1 -2
  31. package/build/esm/components/Button/Button.js +1 -2
  32. package/build/esm/components/FileLink/FileLink.js +1 -2
  33. package/build/esm/components/HeaderBreadcrumbs/HeaderBreadcrumbs.js +1 -2
  34. package/build/esm/components/Link/Link.js +1 -2
  35. package/build/esm/components/ReactPlayer/ReactPlayer.js +3 -1
  36. package/build/esm/components/ReactPlayer/utils.d.ts +1 -0
  37. package/build/esm/components/ReactPlayer/utils.js +19 -0
  38. package/build/esm/components/Title/Title.js +1 -2
  39. package/build/esm/components/index.d.ts +0 -1
  40. package/build/esm/components/index.js +0 -1
  41. package/build/esm/models/constructor-items/common.d.ts +0 -2
  42. package/build/esm/navigation/components/NavigationItem/components/GithubButton/GithubButton.js +1 -2
  43. package/build/esm/navigation/components/SocialIcon/SocialIcon.js +2 -2
  44. package/build/esm/sub-blocks/Quote/Quote.js +2 -2
  45. package/build/esm/sub-blocks/Quote/schema.d.ts +3 -0
  46. package/build/esm/sub-blocks/Quote/schema.js +2 -0
  47. package/package.json +2 -2
  48. package/server/models/constructor-items/common.d.ts +0 -2
  49. package/styles/mixins.scss +1 -5
  50. package/build/cjs/components/LinkBase/LinkBase.d.ts +0 -3
  51. package/build/cjs/components/LinkBase/LinkBase.js +0 -18
  52. package/build/esm/components/LinkBase/LinkBase.d.ts +0 -3
  53. package/build/esm/components/LinkBase/LinkBase.js +0 -16
package/CHANGELOG.md CHANGED
@@ -1,5 +1,40 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.26.1](https://github.com/gravity-ui/page-constructor/compare/v1.26.0...v1.26.1) (2023-03-29)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * add readme about fixes major 1.x.x ([ebcd938](https://github.com/gravity-ui/page-constructor/commit/ebcd9388d3317b2ac8a1fdd97888ca905f66c08e))
9
+
10
+
11
+ ### chore
12
+
13
+ * bump release ([d4fec6b](https://github.com/gravity-ui/page-constructor/commit/d4fec6b6f07b8cb3253979d473cc6503cd87dfdb))
14
+ * bump release ([095fa6c](https://github.com/gravity-ui/page-constructor/commit/095fa6cf8022f9bc2fa6ad555d8d960c16771b29))
15
+
16
+ ## [1.26.0](https://github.com/gravity-ui/page-constructor/compare/v1.25.2...v1.26.0) (2023-03-29)
17
+
18
+
19
+ ### Features
20
+
21
+ * dropdown a ReactPlayer version ([#254](https://github.com/gravity-ui/page-constructor/issues/254)) ([#257](https://github.com/gravity-ui/page-constructor/issues/257)) ([4fffe1b](https://github.com/gravity-ui/page-constructor/commit/4fffe1b6c88f8bd3d8583606d4d2edf1ab18eafb))
22
+
23
+
24
+ ### Bug Fixes
25
+
26
+ * add tag untagged ([ce9efcf](https://github.com/gravity-ui/page-constructor/commit/ce9efcfc74eaad2cbcf3cf79494f577b0eda09b3))
27
+ * **package:** up version ([#241](https://github.com/gravity-ui/page-constructor/issues/241)) ([9b6d3f2](https://github.com/gravity-ui/page-constructor/commit/9b6d3f2ecace4e1e51c52a4c422aa44850bbefec))
28
+ * remove description and inputs ([000a85e](https://github.com/gravity-ui/page-constructor/commit/000a85ee6d1d9fedb0cef74d990be4065a750efb))
29
+ * try to release version ([6fc35f2](https://github.com/gravity-ui/page-constructor/commit/6fc35f2043097f883b9ad87bb348f73cc138be1e))
30
+
31
+ ## [1.25.3](https://github.com/gravity-ui/page-constructor/compare/v1.25.2...v1.25.3) (2023-03-27)
32
+
33
+
34
+ ### Bug Fixes
35
+
36
+ * **Tabs:** wrap tabs on desktop ([#237](https://github.com/gravity-ui/page-constructor/issues/237)) ([ac7dd3d](https://github.com/gravity-ui/page-constructor/commit/ac7dd3d3573c6d633d39f88507e2bfeeb41b4f8c))
37
+
3
38
  ## [1.25.2](https://github.com/gravity-ui/page-constructor/compare/v1.25.1...v1.25.2) (2023-03-21)
4
39
 
5
40
 
package/README.md CHANGED
@@ -316,3 +316,11 @@ When you receive the approval of your pull-request from the code owners and pass
316
316
  3. Wait until robot creates a PR with a new version of the package and information about your changes in CHANGELOG.md. You can see the process on [the Actions tab](https://github.com/gravity-ui/page-constructor/actions).
317
317
  4. Check your changes in CHANGELOG.md and approve robot's PR.
318
318
  5. Squash and merge PR. You can see release process on [the Actions tab](https://github.com/gravity-ui/page-constructor/actions).
319
+
320
+ For now, we have two major version of package. If you want to have your changes in major one (1.x.x) for some reasons, e.g. you aren't ready for major 2.x.x. update, please do the following:
321
+
322
+ 1. Create PR wit your changes as you usually do to the branch main.
323
+ 2. Release package version in major 2.x.x.
324
+ 3. Then you have to fetch a branch `version-1.x.x/fixes` - it is a branch with major 1.x.x and changes which were created after the release version 2.x.x.
325
+ 4. Cherry-pick your commit from major 2.x.x to a branch which was released from the branch `version-1.x.x/fixes` and create a PR.
326
+ 5. After that you have to follow regular flow above.
@@ -16,18 +16,14 @@ unpredictable css rules order in build */
16
16
  .pc-filter-block__tabs {
17
17
  margin-bottom: 0;
18
18
  display: flex;
19
- flex-wrap: nowrap;
19
+ flex-wrap: wrap;
20
20
  justify-content: flex-start;
21
- overflow: auto;
22
21
  }
23
22
  .pc-filter-block__tabs_centered {
24
- display: flex;
25
23
  justify-content: center;
26
- flex-wrap: wrap;
27
24
  }
28
25
  @media (max-width: 769px) {
29
26
  .pc-filter-block__tabs {
30
- display: flex;
31
27
  flex-wrap: nowrap;
32
28
  justify-content: flex-start;
33
29
  overflow: auto;
@@ -59,11 +59,8 @@ const HeaderBlock = (props) => {
59
59
  description && (react_1.default.createElement("h5", { className: b('description') },
60
60
  react_1.default.createElement(YFMWrapper_1.default, { content: description, modifiers: { constructor: true } }))),
61
61
  buttons && (react_1.default.createElement("div", { className: b('buttons'), "data-qa": "header-buttons" }, buttons &&
62
- buttons.map((button, index) => (
63
- // <RouterLink href={button.url} key={index}>
64
- react_1.default.createElement(components_1.Button, Object.assign({ key: index, className: b('button'), size: "xl" }, button))
65
- // </RouterLink>
66
- )))),
62
+ buttons.map((button, index) => (react_1.default.createElement(components_1.RouterLink, { href: button.url, key: index },
63
+ react_1.default.createElement(components_1.Button, Object.assign({ key: index, className: b('button'), size: "xl" }, button))))))),
67
64
  children))),
68
65
  hasRightSideImage && (react_1.default.createElement(components_1.Media, { className: b('media', { [curImageSize]: true }), videoClassName: b('video'), imageClassName: b('image'), video: videoThemed, image: imageThemed })))))));
69
66
  };
@@ -10,7 +10,7 @@ const Icons = ({ title, size = 's', items }) => {
10
10
  const { hostname } = (0, react_1.useContext)(locationContext_1.LocationContext);
11
11
  return (react_1.default.createElement("div", { className: b({ size }) },
12
12
  title && react_1.default.createElement(components_1.BlockHeader, { className: b('header'), title: title, colSizes: { all: 12 } }),
13
- items.map((item) => (react_1.default.createElement(components_1.LinkBase, Object.assign({ className: b('item'), key: item.url, href: item.url }, (0, utils_1.getLinkProps)(item.url, hostname)),
13
+ items.map((item) => (react_1.default.createElement("a", Object.assign({ className: b('item'), key: item.url, href: item.url }, (0, utils_1.getLinkProps)(item.url, hostname)),
14
14
  react_1.default.createElement(components_1.Image, { className: b('image'), src: item.src }),
15
15
  react_1.default.createElement("p", { className: b('text') }, item.text))))));
16
16
  };
@@ -13,7 +13,6 @@ const Twitter_1 = require("../../icons/Twitter");
13
13
  const Linkedin_1 = require("../../icons/Linkedin");
14
14
  const Vk_1 = require("../../icons/Vk");
15
15
  const Telegram_1 = require("../../icons/Telegram");
16
- const components_1 = require("../../components");
17
16
  const icons = {
18
17
  facebook: Facebook_1.Facebook,
19
18
  twitter: Twitter_1.Twitter,
@@ -32,7 +31,7 @@ const Share = ({ items, title }) => {
32
31
  const url = (0, utils_1.getAbsolutePath)(hostname, pathname);
33
32
  const socialUrl = (0, utils_1.getShareLink)(url, type);
34
33
  const icon = icons[type];
35
- return (react_1.default.createElement(uikit_1.Button, { key: type, view: "flat", size: "l", target: "_blank", href: socialUrl, component: components_1.RouterLink, className: b('item', { type: type.toLowerCase() }), onClick: handleButtonClick }, icon && react_1.default.createElement(uikit_1.Icon, { data: icon, size: 24, className: b('icon', { type }) })));
34
+ return (react_1.default.createElement(uikit_1.Button, { key: type, view: "flat", size: "l", target: "_blank", href: socialUrl, className: b('item', { type: type.toLowerCase() }), onClick: handleButtonClick }, icon && react_1.default.createElement(uikit_1.Icon, { data: icon, size: 24, className: b('icon', { type }) })));
36
35
  }))));
37
36
  };
38
37
  exports.default = Share;
@@ -16,18 +16,14 @@ unpredictable css rules order in build */
16
16
  .pc-tabs-block__tabs {
17
17
  margin-bottom: 20px;
18
18
  display: flex;
19
- flex-wrap: nowrap;
19
+ flex-wrap: wrap;
20
20
  justify-content: flex-start;
21
- overflow: auto;
22
21
  }
23
22
  .pc-tabs-block__tabs_centered {
24
- display: flex;
25
23
  justify-content: center;
26
- flex-wrap: wrap;
27
24
  }
28
25
  @media (max-width: 769px) {
29
26
  .pc-tabs-block__tabs {
30
- display: flex;
31
27
  flex-wrap: nowrap;
32
28
  justify-content: flex-start;
33
29
  overflow: auto;
@@ -7,7 +7,6 @@ const icons_1 = require("../../icons");
7
7
  const locationContext_1 = require("../../context/locationContext");
8
8
  const hooks_1 = require("../../hooks");
9
9
  const models_1 = require("../../models");
10
- const RouterLink_1 = tslib_1.__importDefault(require("../RouterLink/RouterLink"));
11
10
  function BackLink(props) {
12
11
  const { history } = (0, react_1.useContext)(locationContext_1.LocationContext);
13
12
  const { url, title, theme = 'default', size = 'l', className, shouldHandleBackAction = false, onClick, } = props;
@@ -27,7 +26,7 @@ function BackLink(props) {
27
26
  history.push({ pathname: url });
28
27
  }
29
28
  }, [handleAnalytics, history, onClick, url]);
30
- return (react_1.default.createElement(uikit_1.Button, { component: RouterLink_1.default, className: className, view: theme === 'special' ? 'flat-contrast' : 'flat-secondary', size: size, href: shouldHandleBackAction ? undefined : url, onClick: shouldHandleBackAction ? backActionHandler : undefined },
29
+ return (react_1.default.createElement(uikit_1.Button, { className: className, view: theme === 'special' ? 'flat-contrast' : 'flat-secondary', size: size, href: shouldHandleBackAction ? undefined : url, onClick: shouldHandleBackAction ? backActionHandler : undefined },
31
30
  react_1.default.createElement(uikit_1.Icon, { data: icons_1.ArrowSidebar, size: 24 }),
32
31
  react_1.default.createElement("span", null, title)));
33
32
  }
@@ -10,7 +10,6 @@ const localeContext_1 = require("../../context/localeContext/localeContext");
10
10
  const useMetrika_1 = require("../../hooks/useMetrika");
11
11
  const hooks_1 = require("../../hooks");
12
12
  const icons_1 = require("../../icons");
13
- const RouterLink_1 = tslib_1.__importDefault(require("../RouterLink/RouterLink"));
14
13
  const b = (0, utils_1.block)('button-block');
15
14
  const Button = (props) => {
16
15
  const handleMetrika = (0, useMetrika_1.useMetrika)();
@@ -43,7 +42,7 @@ const Button = (props) => {
43
42
  image = undefined;
44
43
  }
45
44
  const buttonTheme = theme === 'scale' ? 'accent' : theme;
46
- return (react_1.default.createElement(uikit_1.Button, Object.assign({ className: buttonClass, view: (0, utils_2.toCommonView)(buttonTheme), size: (0, utils_2.toCommonSize)(size), href: url ? (0, utils_1.setUrlTld)(url, tld) : undefined, component: RouterLink_1.default }, buttonProps),
45
+ return (react_1.default.createElement(uikit_1.Button, Object.assign({ className: buttonClass, view: (0, utils_2.toCommonView)(buttonTheme), size: (0, utils_2.toCommonSize)(size), href: url ? (0, utils_1.setUrlTld)(url, tld) : undefined }, buttonProps),
47
46
  icon && buttonImg.position === 'left' ? icon : null,
48
47
  react_1.default.createElement("span", { className: b('content') },
49
48
  image && buttonImg.position === 'left' ? image : null,
@@ -5,7 +5,6 @@ const tslib_1 = require("tslib");
5
5
  const utils_1 = require("../../utils");
6
6
  const react_1 = tslib_1.__importStar(require("react"));
7
7
  const locationContext_1 = require("../../context/locationContext");
8
- const LinkBase_1 = tslib_1.__importDefault(require("../LinkBase/LinkBase"));
9
8
  const b = (0, utils_1.block)('file-link');
10
9
  const FIGMA_URL = 'https://www.figma.com';
11
10
  var FileExtension;
@@ -32,6 +31,6 @@ const FileLink = (props) => {
32
31
  return (react_1.default.createElement("div", { className: b({ ext: fileExt, type, size: textSize, theme }, className) },
33
32
  Object.values(FileExtension).includes(fileExt) && (react_1.default.createElement("div", { className: b('file-label') }, fileExt)),
34
33
  react_1.default.createElement("div", { className: b('link') },
35
- react_1.default.createElement(LinkBase_1.default, Object.assign({ href: href }, (0, utils_1.getLinkProps)(href, hostname), { onClick: onClick }), text))));
34
+ react_1.default.createElement("a", Object.assign({ href: href }, (0, utils_1.getLinkProps)(href, hostname), { onClick: onClick }), text))));
36
35
  };
37
36
  exports.default = FileLink;
@@ -4,7 +4,6 @@ const tslib_1 = require("tslib");
4
4
  const react_1 = tslib_1.__importDefault(require("react"));
5
5
  const utils_1 = require("../../utils");
6
6
  const useMetrika_1 = require("../../hooks/useMetrika");
7
- const LinkBase_1 = tslib_1.__importDefault(require("../LinkBase/LinkBase"));
8
7
  const b = (0, utils_1.block)('header-breadcrumbs');
9
8
  function HeaderBreadcrumbs(props) {
10
9
  const { items, metrikaGoals, pixelEvents, theme = 'light', className } = props;
@@ -13,6 +12,6 @@ function HeaderBreadcrumbs(props) {
13
12
  handleMetrika({ metrikaGoals, pixelEvents });
14
13
  };
15
14
  return (react_1.default.createElement("div", { className: b({ theme }, className) }, items.map((item) => (react_1.default.createElement("div", { className: b('item'), key: item.url },
16
- react_1.default.createElement(LinkBase_1.default, { href: item.url, className: b('text'), onClick: onClick }, item.text))))));
15
+ react_1.default.createElement("a", { href: item.url, className: b('text'), onClick: onClick }, item.text))))));
17
16
  }
18
17
  exports.default = HeaderBreadcrumbs;
@@ -6,7 +6,6 @@ const uikit_1 = require("@gravity-ui/uikit");
6
6
  const utils_1 = require("../../utils");
7
7
  const models_1 = require("../../models");
8
8
  const icons_1 = require("../../icons");
9
- const LinkBase_1 = tslib_1.__importDefault(require("../LinkBase/LinkBase"));
10
9
  const FileLink_1 = tslib_1.__importDefault(require("../FileLink/FileLink"));
11
10
  const BackLink_1 = tslib_1.__importDefault(require("../BackLink/BackLink"));
12
11
  const localeContext_1 = require("../../context/localeContext/localeContext");
@@ -49,7 +48,7 @@ const LinkBlock = (props) => {
49
48
  case 'normal': {
50
49
  const linkProps = (0, utils_1.getLinkProps)(url, hostname, target);
51
50
  const content = children || text;
52
- return (react_1.default.createElement(LinkBase_1.default, Object.assign({ className: b('link', { theme: colorTheme, 'has-arrow': arrow }), href: href, onClick: onClick }, linkProps), arrow ? (react_1.default.createElement(react_1.Fragment, null,
51
+ return (react_1.default.createElement("a", Object.assign({ className: b('link', { theme: colorTheme, 'has-arrow': arrow }), href: href, onClick: onClick }, linkProps), arrow ? (react_1.default.createElement(react_1.Fragment, null,
53
52
  react_1.default.createElement("span", { className: b('content') }, content),
54
53
  WORD_JOINER_SYM,
55
54
  react_1.default.createElement(uikit_1.Icon, { className: b('arrow'), data: icons_1.Chevron, size: getArrowSize(textSize) }))) : (content)));
@@ -14,6 +14,7 @@ const metrikaContext_1 = require("../../context/metrikaContext");
14
14
  const mobileContext_1 = require("../../context/mobileContext");
15
15
  const hooks_1 = require("../../hooks");
16
16
  const icons_1 = require("../../icons");
17
+ const utils_2 = require("./utils");
17
18
  const b = (0, utils_1.block)('ReactPlayer');
18
19
  const FPS = 60;
19
20
  // eslint-disable-next-line react/display-name
@@ -35,6 +36,7 @@ exports.ReactPlayerBlock = react_1.default.forwardRef((props, originRef) => {
35
36
  const [started, setStarted] = (0, react_1.useState)(autoPlay);
36
37
  const [paused, setPaused] = (0, react_1.useState)(false);
37
38
  const [ended, setEnded] = (0, react_1.useState)(false);
39
+ const videoSrc = (0, react_1.useMemo)(() => (0, utils_2.checkYoutubeVideos)(src), [src]);
38
40
  const eventsArray = (0, react_1.useMemo)(() => {
39
41
  if (analyticsEvents) {
40
42
  return Array.isArray(analyticsEvents) ? analyticsEvents : [analyticsEvents];
@@ -193,7 +195,7 @@ exports.ReactPlayerBlock = react_1.default.forwardRef((props, originRef) => {
193
195
  }, elapsedTimePercent: elapsedTimePercent }));
194
196
  }, [controls, isPlaying, customBarControlsClassName, changeMute]);
195
197
  return (react_1.default.createElement("div", { className: b({ wrapper: !currentHeight }, className), ref: ref, onClick: handleClick },
196
- react_1.default.createElement(react_player_1.default, { className: b('player'), url: src, muted: muted, controls: controls === models_1.MediaVideoControlsType.Default, height: currentHeight || '100%', width: width || '100%', light: previewImgUrl, playing: isPlaying, playIcon: playIcon, progressInterval: FPS, onClickPreview: handleClickPreview, onStart: onStart, onReady: setPlayerRef, onPlay: onPlay, onPause: onPause, onProgress: onProgress, onEnded: onEnded }),
198
+ react_1.default.createElement(react_player_1.default, { className: b('player'), url: videoSrc, muted: muted, controls: controls === models_1.MediaVideoControlsType.Default, height: currentHeight || '100%', width: width || '100%', light: previewImgUrl, playing: isPlaying, playIcon: playIcon, progressInterval: FPS, onClickPreview: handleClickPreview, onStart: onStart, onReady: setPlayerRef, onPlay: onPlay, onPause: onPause, onProgress: onProgress, onEnded: onEnded }),
197
199
  renderCustomBarControls(muted, playedPercent)));
198
200
  });
199
201
  function getHeight(width) {
@@ -0,0 +1 @@
1
+ export declare const checkYoutubeVideos: (src: string | string[]) => string | string[];
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkYoutubeVideos = void 0;
4
+ // the file serves to support live video with react-player@2.9
5
+ const LIVE_YUOTUBE_VIDEO_REGEX = /(?:youtu\.be\/live\/|youtube(?:-nocookie)?\.com\/(?:live\/))((\w|-){11})/;
6
+ const YOUTUBE_VIDEO_TEMPLATE = 'https://www.youtube.com/watch?v=';
7
+ const checkYoutubeVideos = (src) => {
8
+ if (Array.isArray(src)) {
9
+ return src.map((videoUrl) => {
10
+ var _a;
11
+ if (LIVE_YUOTUBE_VIDEO_REGEX.test(videoUrl)) {
12
+ const youtubeLiveId = (_a = videoUrl.match(LIVE_YUOTUBE_VIDEO_REGEX)) === null || _a === void 0 ? void 0 : _a[1];
13
+ if (!youtubeLiveId) {
14
+ return videoUrl;
15
+ }
16
+ return `${YOUTUBE_VIDEO_TEMPLATE}${youtubeLiveId}`;
17
+ }
18
+ return videoUrl;
19
+ });
20
+ }
21
+ return src;
22
+ };
23
+ exports.checkYoutubeVideos = checkYoutubeVideos;
@@ -5,7 +5,6 @@ const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importStar(require("react"));
6
6
  const utils_1 = require("../../utils");
7
7
  const Anchor_1 = tslib_1.__importDefault(require("../Anchor/Anchor"));
8
- const LinkBase_1 = tslib_1.__importDefault(require("../LinkBase/LinkBase"));
9
8
  const __1 = require("../");
10
9
  const locationContext_1 = require("../../context/locationContext");
11
10
  const mobileContext_1 = require("../../context/mobileContext");
@@ -41,7 +40,7 @@ const Title = (props) => {
41
40
  content = textMarkup;
42
41
  }
43
42
  else if (url) {
44
- content = (react_1.default.createElement(LinkBase_1.default, Object.assign({ className: b('link'), href: url }, (0, utils_1.getLinkProps)(url, hostname), { onClick: onClick }), insideClickableContent));
43
+ content = (react_1.default.createElement("a", Object.assign({ className: b('link'), href: url }, (0, utils_1.getLinkProps)(url, hostname), { onClick: onClick }), insideClickableContent));
45
44
  }
46
45
  else if (onClick) {
47
46
  content = (react_1.default.createElement("span", { className: b('link'), onClick: onClick }, insideClickableContent));
@@ -17,7 +17,6 @@ export { default as HeaderBreadcrumbs } from './HeaderBreadcrumbs/HeaderBreadcru
17
17
  export { default as HeightCalculator } from './HeightCalculator/HeightCalculator';
18
18
  export { default as Image } from './Image/Image';
19
19
  export { default as Link } from './Link/Link';
20
- export { default as LinkBase } from './LinkBase/LinkBase';
21
20
  export { default as Links } from './Link/Links';
22
21
  export { default as Media } from './Media/Media';
23
22
  export { default as OutsideClick } from './OutsideClick/OutsideClick';
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.FullScreenMedia = exports.MetaInfo = exports.HTML = exports.RouterLink = exports.Author = exports.OverflowScroller = exports.Control = exports.YandexForm = exports.YFMWrapper = exports.VideoBlock = exports.UnpublishedLabel = exports.ToggleArrow = exports.Title = exports.Table = exports.ReactPlayer = exports.OutsideClick = exports.Media = exports.Links = exports.LinkBase = exports.Link = exports.Image = exports.HeightCalculator = exports.HeaderBreadcrumbs = exports.FullWidthBackground = exports.FullscreenImage = exports.Foldable = exports.FileLink = exports.ErrorWrapper = exports.CardBase = exports.Button = exports.BlockHeader = exports.BlockBase = exports.BalancedMasonry = exports.BackLink = exports.BackgroundMedia = exports.BackgroundImage = exports.AnimateBlock = exports.Anchor = void 0;
6
+ exports.FullScreenMedia = exports.MetaInfo = exports.HTML = exports.RouterLink = exports.Author = exports.OverflowScroller = exports.Control = exports.YandexForm = exports.YFMWrapper = exports.VideoBlock = exports.UnpublishedLabel = exports.ToggleArrow = exports.Title = exports.Table = exports.ReactPlayer = exports.OutsideClick = exports.Media = exports.Links = exports.Link = exports.Image = exports.HeightCalculator = exports.HeaderBreadcrumbs = exports.FullWidthBackground = exports.FullscreenImage = exports.Foldable = exports.FileLink = exports.ErrorWrapper = exports.CardBase = exports.Button = exports.BlockHeader = exports.BlockBase = exports.BalancedMasonry = exports.BackLink = exports.BackgroundMedia = exports.BackgroundImage = exports.AnimateBlock = exports.Anchor = void 0;
7
7
  var Anchor_1 = require("./Anchor/Anchor");
8
8
  Object.defineProperty(exports, "Anchor", { enumerable: true, get: function () { return __importDefault(Anchor_1).default; } });
9
9
  var AnimateBlock_1 = require("./AnimateBlock/AnimateBlock");
@@ -42,8 +42,6 @@ var Image_1 = require("./Image/Image");
42
42
  Object.defineProperty(exports, "Image", { enumerable: true, get: function () { return __importDefault(Image_1).default; } });
43
43
  var Link_1 = require("./Link/Link");
44
44
  Object.defineProperty(exports, "Link", { enumerable: true, get: function () { return __importDefault(Link_1).default; } });
45
- var LinkBase_1 = require("./LinkBase/LinkBase");
46
- Object.defineProperty(exports, "LinkBase", { enumerable: true, get: function () { return __importDefault(LinkBase_1).default; } });
47
45
  var Links_1 = require("./Link/Links");
48
46
  Object.defineProperty(exports, "Links", { enumerable: true, get: function () { return __importDefault(Links_1).default; } });
49
47
  var Media_1 = require("./Media/Media");
@@ -111,8 +111,6 @@ export interface MediaVideoProps extends AnalyticsEventsBase {
111
111
  controls?: MediaVideoControlsType;
112
112
  metrika?: MetrikaVideo;
113
113
  }
114
- export interface LinkBaseProps extends React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement> {
115
- }
116
114
  export interface LinkProps extends AnalyticsEventsBase, Stylable {
117
115
  url: string;
118
116
  text?: string;
@@ -5,7 +5,6 @@ const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importStar(require("react"));
6
6
  const utils_1 = require("../../../../../utils");
7
7
  const models_1 = require("../../../../../models");
8
- const components_1 = require("../../../../../components");
9
8
  const b = (0, utils_1.block)('github-button');
10
9
  const DEFAULT_LABEL = 'Stars on GitHub';
11
10
  /* More information about github-buttons in https://buttons.github.io/ */
@@ -43,6 +42,6 @@ const GithubButton = ({ text, url, className, label, size, icon, }) => {
43
42
  }, []);
44
43
  return (react_1.default.createElement("div", { className: b(null, className) },
45
44
  react_1.default.createElement("span", { ref: containerRef },
46
- react_1.default.createElement(components_1.LinkBase, Object.assign({ href: url, ref: linkRef, "data-show-count": "true", "aria-label": label || DEFAULT_LABEL }, (icon && { 'data-icon': models_1.NavigationGithubButtonIcon[icon] }), (size && { 'data-size': size })), text))));
45
+ react_1.default.createElement("a", Object.assign({ href: url, ref: linkRef, "data-show-count": "true", "aria-label": label || DEFAULT_LABEL }, (icon && { 'data-icon': models_1.NavigationGithubButtonIcon[icon] }), (size && { 'data-size': size })), text))));
47
46
  };
48
47
  exports.GithubButton = GithubButton;
@@ -8,7 +8,7 @@ const utils_2 = require("../../../components/Media/Image/utils");
8
8
  const b = (0, utils_1.block)('social-icon');
9
9
  const SocialIcon = ({ icon, url, className }) => {
10
10
  const iconData = (0, utils_2.getMediaImage)(icon);
11
- return (react_1.default.createElement(components_1.LinkBase, { href: url, target: "_blank", rel: "noopener noreferrer", className: b(null, className) },
11
+ return (react_1.default.createElement("a", { href: url, target: "_blank", rel: "noopener noreferrer", className: b(null, className) },
12
12
  react_1.default.createElement(components_1.Image, Object.assign({ className: b('icon') }, iconData))));
13
13
  };
14
14
  exports.default = SocialIcon;
@@ -19,7 +19,7 @@ const Quote = (props) => {
19
19
  const handleButtonClick = (0, react_1.useCallback)(() => handleAnalytics(), [handleAnalytics]);
20
20
  const renderFooter = Boolean(author || url) && (react_1.default.createElement("div", { className: b('author-wrapper') },
21
21
  author && (react_1.default.createElement(components_1.Author, { className: b('author', { theme: textTheme }), author: author, type: models_1.AuthorType.Line })),
22
- url && buttonText && (react_1.default.createElement(uikit_1.Button, { view: "outlined", size: "xl", href: url, component: components_1.RouterLink, className: b('link-button', { theme: textTheme }), onClick: handleButtonClick }, buttonText))));
22
+ url && buttonText && (react_1.default.createElement(uikit_1.Button, { view: "outlined", size: "xl", href: url, className: b('link-button', { theme: textTheme }), onClick: handleButtonClick }, buttonText))));
23
23
  return (react_1.default.createElement("div", { className: b({ theme: textTheme, border }), style: color ? { backgroundColor: color } : {} },
24
24
  react_1.default.createElement("div", { key: text, className: b('content-wrapper') },
25
25
  react_1.default.createElement("div", null,
@@ -38,6 +38,9 @@ export declare const Quote: {
38
38
  type: string;
39
39
  pattern: string;
40
40
  };
41
+ buttonText: {
42
+ type: string;
43
+ };
41
44
  theme: {
42
45
  type: string;
43
46
  enum: string[];
@@ -18,6 +18,8 @@ exports.Quote = {
18
18
  }, url: {
19
19
  type: 'string',
20
20
  pattern: schema_1.urlPattern,
21
+ }, buttonText: {
22
+ type: 'string',
21
23
  }, theme: common_1.ThemeProps, author: common_1.authorItem }),
22
24
  },
23
25
  };
@@ -16,18 +16,14 @@ unpredictable css rules order in build */
16
16
  .pc-filter-block__tabs {
17
17
  margin-bottom: 0;
18
18
  display: flex;
19
- flex-wrap: nowrap;
19
+ flex-wrap: wrap;
20
20
  justify-content: flex-start;
21
- overflow: auto;
22
21
  }
23
22
  .pc-filter-block__tabs_centered {
24
- display: flex;
25
23
  justify-content: center;
26
- flex-wrap: wrap;
27
24
  }
28
25
  @media (max-width: 769px) {
29
26
  .pc-filter-block__tabs {
30
- display: flex;
31
27
  flex-wrap: nowrap;
32
28
  justify-content: flex-start;
33
29
  overflow: auto;
@@ -1,6 +1,6 @@
1
1
  import React, { useContext } from 'react';
2
2
  import { block, getThemedValue } from '../../utils';
3
- import { Button, Media, HTML } from '../../components';
3
+ import { Button, Media, RouterLink, HTML } from '../../components';
4
4
  import { Grid, Row, Col } from '../../grid';
5
5
  import { getImageSize, getTitleSizes, titleWithImageSizes } from './utils';
6
6
  import { MobileContext } from '../../context/mobileContext';
@@ -56,11 +56,8 @@ export const HeaderBlock = (props) => {
56
56
  description && (React.createElement("h5", { className: b('description') },
57
57
  React.createElement(YFMWrapper, { content: description, modifiers: { constructor: true } }))),
58
58
  buttons && (React.createElement("div", { className: b('buttons'), "data-qa": "header-buttons" }, buttons &&
59
- buttons.map((button, index) => (
60
- // <RouterLink href={button.url} key={index}>
61
- React.createElement(Button, Object.assign({ key: index, className: b('button'), size: "xl" }, button))
62
- // </RouterLink>
63
- )))),
59
+ buttons.map((button, index) => (React.createElement(RouterLink, { href: button.url, key: index },
60
+ React.createElement(Button, Object.assign({ key: index, className: b('button'), size: "xl" }, button))))))),
64
61
  children))),
65
62
  hasRightSideImage && (React.createElement(Media, { className: b('media', { [curImageSize]: true }), videoClassName: b('video'), imageClassName: b('image'), video: videoThemed, image: imageThemed })))))));
66
63
  };
@@ -1,6 +1,6 @@
1
1
  import React, { useContext } from 'react';
2
2
  import { block, getLinkProps } from '../../utils';
3
- import { BlockHeader, Image, LinkBase } from '../../components';
3
+ import { BlockHeader, Image } from '../../components';
4
4
  import { LocationContext } from '../../context/locationContext';
5
5
  import './Icons.css';
6
6
  const b = block('icons-block');
@@ -8,7 +8,7 @@ const Icons = ({ title, size = 's', items }) => {
8
8
  const { hostname } = useContext(LocationContext);
9
9
  return (React.createElement("div", { className: b({ size }) },
10
10
  title && React.createElement(BlockHeader, { className: b('header'), title: title, colSizes: { all: 12 } }),
11
- items.map((item) => (React.createElement(LinkBase, Object.assign({ className: b('item'), key: item.url, href: item.url }, getLinkProps(item.url, hostname)),
11
+ items.map((item) => (React.createElement("a", Object.assign({ className: b('item'), key: item.url, href: item.url }, getLinkProps(item.url, hostname)),
12
12
  React.createElement(Image, { className: b('image'), src: item.src }),
13
13
  React.createElement("p", { className: b('text') }, item.text))))));
14
14
  };
@@ -10,7 +10,6 @@ import { Twitter } from '../../icons/Twitter';
10
10
  import { Linkedin } from '../../icons/Linkedin';
11
11
  import { Vk } from '../../icons/Vk';
12
12
  import { Telegram } from '../../icons/Telegram';
13
- import { RouterLink } from '../../components';
14
13
  import './Share.css';
15
14
  const icons = {
16
15
  facebook: Facebook,
@@ -30,7 +29,7 @@ const Share = ({ items, title }) => {
30
29
  const url = getAbsolutePath(hostname, pathname);
31
30
  const socialUrl = getShareLink(url, type);
32
31
  const icon = icons[type];
33
- return (React.createElement(Button, { key: type, view: "flat", size: "l", target: "_blank", href: socialUrl, component: RouterLink, className: b('item', { type: type.toLowerCase() }), onClick: handleButtonClick }, icon && React.createElement(Icon, { data: icon, size: 24, className: b('icon', { type }) })));
32
+ return (React.createElement(Button, { key: type, view: "flat", size: "l", target: "_blank", href: socialUrl, className: b('item', { type: type.toLowerCase() }), onClick: handleButtonClick }, icon && React.createElement(Icon, { data: icon, size: 24, className: b('icon', { type }) })));
34
33
  }))));
35
34
  };
36
35
  export default Share;
@@ -16,18 +16,14 @@ unpredictable css rules order in build */
16
16
  .pc-tabs-block__tabs {
17
17
  margin-bottom: 20px;
18
18
  display: flex;
19
- flex-wrap: nowrap;
19
+ flex-wrap: wrap;
20
20
  justify-content: flex-start;
21
- overflow: auto;
22
21
  }
23
22
  .pc-tabs-block__tabs_centered {
24
- display: flex;
25
23
  justify-content: center;
26
- flex-wrap: wrap;
27
24
  }
28
25
  @media (max-width: 769px) {
29
26
  .pc-tabs-block__tabs {
30
- display: flex;
31
27
  flex-wrap: nowrap;
32
28
  justify-content: flex-start;
33
29
  overflow: auto;
@@ -4,7 +4,6 @@ import { ArrowSidebar } from '../../icons';
4
4
  import { LocationContext } from '../../context/locationContext';
5
5
  import { useAnalytics } from '../../hooks';
6
6
  import { DefaultEventNames } from '../../models';
7
- import RouterLink from '../RouterLink/RouterLink';
8
7
  export default function BackLink(props) {
9
8
  const { history } = useContext(LocationContext);
10
9
  const { url, title, theme = 'default', size = 'l', className, shouldHandleBackAction = false, onClick, } = props;
@@ -24,7 +23,7 @@ export default function BackLink(props) {
24
23
  history.push({ pathname: url });
25
24
  }
26
25
  }, [handleAnalytics, history, onClick, url]);
27
- return (React.createElement(Button, { component: RouterLink, className: className, view: theme === 'special' ? 'flat-contrast' : 'flat-secondary', size: size, href: shouldHandleBackAction ? undefined : url, onClick: shouldHandleBackAction ? backActionHandler : undefined },
26
+ return (React.createElement(Button, { className: className, view: theme === 'special' ? 'flat-contrast' : 'flat-secondary', size: size, href: shouldHandleBackAction ? undefined : url, onClick: shouldHandleBackAction ? backActionHandler : undefined },
28
27
  React.createElement(Icon, { data: ArrowSidebar, size: 24 }),
29
28
  React.createElement("span", null, title)));
30
29
  }
@@ -8,7 +8,6 @@ import { LocaleContext } from '../../context/localeContext/localeContext';
8
8
  import { useMetrika } from '../../hooks/useMetrika';
9
9
  import { useAnalytics } from '../../hooks';
10
10
  import { Github } from '../../icons';
11
- import RouterLink from '../RouterLink/RouterLink';
12
11
  import './Button.css';
13
12
  const b = block('button-block');
14
13
  const Button = (props) => {
@@ -42,7 +41,7 @@ const Button = (props) => {
42
41
  image = undefined;
43
42
  }
44
43
  const buttonTheme = theme === 'scale' ? 'accent' : theme;
45
- return (React.createElement(CommonButton, Object.assign({ className: buttonClass, view: toCommonView(buttonTheme), size: toCommonSize(size), href: url ? setUrlTld(url, tld) : undefined, component: RouterLink }, buttonProps),
44
+ return (React.createElement(CommonButton, Object.assign({ className: buttonClass, view: toCommonView(buttonTheme), size: toCommonSize(size), href: url ? setUrlTld(url, tld) : undefined }, buttonProps),
46
45
  icon && buttonImg.position === 'left' ? icon : null,
47
46
  React.createElement("span", { className: b('content') },
48
47
  image && buttonImg.position === 'left' ? image : null,
@@ -1,7 +1,6 @@
1
1
  import { block, getLinkProps } from '../../utils';
2
2
  import React, { useContext } from 'react';
3
3
  import { LocationContext } from '../../context/locationContext';
4
- import LinkBase from '../LinkBase/LinkBase';
5
4
  import './FileLink.css';
6
5
  const b = block('file-link');
7
6
  const FIGMA_URL = 'https://www.figma.com';
@@ -28,6 +27,6 @@ const FileLink = (props) => {
28
27
  return (React.createElement("div", { className: b({ ext: fileExt, type, size: textSize, theme }, className) },
29
28
  Object.values(FileExtension).includes(fileExt) && (React.createElement("div", { className: b('file-label') }, fileExt)),
30
29
  React.createElement("div", { className: b('link') },
31
- React.createElement(LinkBase, Object.assign({ href: href }, getLinkProps(href, hostname), { onClick: onClick }), text))));
30
+ React.createElement("a", Object.assign({ href: href }, getLinkProps(href, hostname), { onClick: onClick }), text))));
32
31
  };
33
32
  export default FileLink;
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import { block } from '../../utils';
3
3
  import { useMetrika } from '../../hooks/useMetrika';
4
- import LinkBase from '../LinkBase/LinkBase';
5
4
  import './HeaderBreadcrumbs.css';
6
5
  const b = block('header-breadcrumbs');
7
6
  export default function HeaderBreadcrumbs(props) {
@@ -11,5 +10,5 @@ export default function HeaderBreadcrumbs(props) {
11
10
  handleMetrika({ metrikaGoals, pixelEvents });
12
11
  };
13
12
  return (React.createElement("div", { className: b({ theme }, className) }, items.map((item) => (React.createElement("div", { className: b('item'), key: item.url },
14
- React.createElement(LinkBase, { href: item.url, className: b('text'), onClick: onClick }, item.text))))));
13
+ React.createElement("a", { href: item.url, className: b('text'), onClick: onClick }, item.text))))));
15
14
  }
@@ -3,7 +3,6 @@ import { Icon } from '@gravity-ui/uikit';
3
3
  import { block, getLinkProps, setUrlTld } from '../../utils';
4
4
  import { DefaultEventNames } from '../../models';
5
5
  import { Chevron } from '../../icons';
6
- import LinkBase from '../LinkBase/LinkBase';
7
6
  import FileLink from '../FileLink/FileLink';
8
7
  import BackLink from '../BackLink/BackLink';
9
8
  import { LocaleContext } from '../../context/localeContext/localeContext';
@@ -47,7 +46,7 @@ const LinkBlock = (props) => {
47
46
  case 'normal': {
48
47
  const linkProps = getLinkProps(url, hostname, target);
49
48
  const content = children || text;
50
- return (React.createElement(LinkBase, Object.assign({ className: b('link', { theme: colorTheme, 'has-arrow': arrow }), href: href, onClick: onClick }, linkProps), arrow ? (React.createElement(Fragment, null,
49
+ return (React.createElement("a", Object.assign({ className: b('link', { theme: colorTheme, 'has-arrow': arrow }), href: href, onClick: onClick }, linkProps), arrow ? (React.createElement(Fragment, null,
51
50
  React.createElement("span", { className: b('content') }, content),
52
51
  WORD_JOINER_SYM,
53
52
  React.createElement(Icon, { className: b('arrow'), data: Chevron, size: getArrowSize(textSize) }))) : (content)));
@@ -10,6 +10,7 @@ import { MetrikaContext } from '../../context/metrikaContext';
10
10
  import { MobileContext } from '../../context/mobileContext';
11
11
  import { useAnalytics } from '../../hooks';
12
12
  import { PlayVideo } from '../../icons';
13
+ import { checkYoutubeVideos } from './utils';
13
14
  import './ReactPlayer.css';
14
15
  const b = block('ReactPlayer');
15
16
  const FPS = 60;
@@ -32,6 +33,7 @@ export const ReactPlayerBlock = React.forwardRef((props, originRef) => {
32
33
  const [started, setStarted] = useState(autoPlay);
33
34
  const [paused, setPaused] = useState(false);
34
35
  const [ended, setEnded] = useState(false);
36
+ const videoSrc = useMemo(() => checkYoutubeVideos(src), [src]);
35
37
  const eventsArray = useMemo(() => {
36
38
  if (analyticsEvents) {
37
39
  return Array.isArray(analyticsEvents) ? analyticsEvents : [analyticsEvents];
@@ -190,7 +192,7 @@ export const ReactPlayerBlock = React.forwardRef((props, originRef) => {
190
192
  }, elapsedTimePercent: elapsedTimePercent }));
191
193
  }, [controls, isPlaying, customBarControlsClassName, changeMute]);
192
194
  return (React.createElement("div", { className: b({ wrapper: !currentHeight }, className), ref: ref, onClick: handleClick },
193
- React.createElement(ReactPlayer, { className: b('player'), url: src, muted: muted, controls: controls === MediaVideoControlsType.Default, height: currentHeight || '100%', width: width || '100%', light: previewImgUrl, playing: isPlaying, playIcon: playIcon, progressInterval: FPS, onClickPreview: handleClickPreview, onStart: onStart, onReady: setPlayerRef, onPlay: onPlay, onPause: onPause, onProgress: onProgress, onEnded: onEnded }),
195
+ React.createElement(ReactPlayer, { className: b('player'), url: videoSrc, muted: muted, controls: controls === MediaVideoControlsType.Default, height: currentHeight || '100%', width: width || '100%', light: previewImgUrl, playing: isPlaying, playIcon: playIcon, progressInterval: FPS, onClickPreview: handleClickPreview, onStart: onStart, onReady: setPlayerRef, onPlay: onPlay, onPause: onPause, onProgress: onProgress, onEnded: onEnded }),
194
196
  renderCustomBarControls(muted, playedPercent)));
195
197
  });
196
198
  function getHeight(width) {
@@ -0,0 +1 @@
1
+ export declare const checkYoutubeVideos: (src: string | string[]) => string | string[];
@@ -0,0 +1,19 @@
1
+ // the file serves to support live video with react-player@2.9
2
+ const LIVE_YUOTUBE_VIDEO_REGEX = /(?:youtu\.be\/live\/|youtube(?:-nocookie)?\.com\/(?:live\/))((\w|-){11})/;
3
+ const YOUTUBE_VIDEO_TEMPLATE = 'https://www.youtube.com/watch?v=';
4
+ export const checkYoutubeVideos = (src) => {
5
+ if (Array.isArray(src)) {
6
+ return src.map((videoUrl) => {
7
+ var _a;
8
+ if (LIVE_YUOTUBE_VIDEO_REGEX.test(videoUrl)) {
9
+ const youtubeLiveId = (_a = videoUrl.match(LIVE_YUOTUBE_VIDEO_REGEX)) === null || _a === void 0 ? void 0 : _a[1];
10
+ if (!youtubeLiveId) {
11
+ return videoUrl;
12
+ }
13
+ return `${YOUTUBE_VIDEO_TEMPLATE}${youtubeLiveId}`;
14
+ }
15
+ return videoUrl;
16
+ });
17
+ }
18
+ return src;
19
+ };
@@ -1,7 +1,6 @@
1
1
  import React, { Fragment, useContext } from 'react';
2
2
  import { block, getHeaderTag, getLinkProps } from '../../utils';
3
3
  import Anchor from '../Anchor/Anchor';
4
- import LinkBase from '../LinkBase/LinkBase';
5
4
  import { ToggleArrow, HTML } from '../';
6
5
  import { LocationContext } from '../../context/locationContext';
7
6
  import { MobileContext } from '../../context/mobileContext';
@@ -37,7 +36,7 @@ const Title = (props) => {
37
36
  content = textMarkup;
38
37
  }
39
38
  else if (url) {
40
- content = (React.createElement(LinkBase, Object.assign({ className: b('link'), href: url }, getLinkProps(url, hostname), { onClick: onClick }), insideClickableContent));
39
+ content = (React.createElement("a", Object.assign({ className: b('link'), href: url }, getLinkProps(url, hostname), { onClick: onClick }), insideClickableContent));
41
40
  }
42
41
  else if (onClick) {
43
42
  content = (React.createElement("span", { className: b('link'), onClick: onClick }, insideClickableContent));
@@ -17,7 +17,6 @@ export { default as HeaderBreadcrumbs } from './HeaderBreadcrumbs/HeaderBreadcru
17
17
  export { default as HeightCalculator } from './HeightCalculator/HeightCalculator';
18
18
  export { default as Image } from './Image/Image';
19
19
  export { default as Link } from './Link/Link';
20
- export { default as LinkBase } from './LinkBase/LinkBase';
21
20
  export { default as Links } from './Link/Links';
22
21
  export { default as Media } from './Media/Media';
23
22
  export { default as OutsideClick } from './OutsideClick/OutsideClick';
@@ -17,7 +17,6 @@ export { default as HeaderBreadcrumbs } from './HeaderBreadcrumbs/HeaderBreadcru
17
17
  export { default as HeightCalculator } from './HeightCalculator/HeightCalculator';
18
18
  export { default as Image } from './Image/Image';
19
19
  export { default as Link } from './Link/Link';
20
- export { default as LinkBase } from './LinkBase/LinkBase';
21
20
  export { default as Links } from './Link/Links';
22
21
  export { default as Media } from './Media/Media';
23
22
  export { default as OutsideClick } from './OutsideClick/OutsideClick';
@@ -111,8 +111,6 @@ export interface MediaVideoProps extends AnalyticsEventsBase {
111
111
  controls?: MediaVideoControlsType;
112
112
  metrika?: MetrikaVideo;
113
113
  }
114
- export interface LinkBaseProps extends React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement> {
115
- }
116
114
  export interface LinkProps extends AnalyticsEventsBase, Stylable {
117
115
  url: string;
118
116
  text?: string;
@@ -1,7 +1,6 @@
1
1
  import React, { useRef, useEffect } from 'react';
2
2
  import { block } from '../../../../../utils';
3
3
  import { NavigationGithubButtonIcon } from '../../../../../models';
4
- import { LinkBase } from '../../../../../components';
5
4
  import './GithubButton.css';
6
5
  const b = block('github-button');
7
6
  const DEFAULT_LABEL = 'Stars on GitHub';
@@ -40,5 +39,5 @@ export const GithubButton = ({ text, url, className, label, size, icon, }) => {
40
39
  }, []);
41
40
  return (React.createElement("div", { className: b(null, className) },
42
41
  React.createElement("span", { ref: containerRef },
43
- React.createElement(LinkBase, Object.assign({ href: url, ref: linkRef, "data-show-count": "true", "aria-label": label || DEFAULT_LABEL }, (icon && { 'data-icon': NavigationGithubButtonIcon[icon] }), (size && { 'data-size': size })), text))));
42
+ React.createElement("a", Object.assign({ href: url, ref: linkRef, "data-show-count": "true", "aria-label": label || DEFAULT_LABEL }, (icon && { 'data-icon': NavigationGithubButtonIcon[icon] }), (size && { 'data-size': size })), text))));
44
43
  };
@@ -1,12 +1,12 @@
1
1
  import React from 'react';
2
2
  import { block } from '../../../utils';
3
- import { Image, LinkBase } from '../../../components';
3
+ import { Image } from '../../../components';
4
4
  import { getMediaImage } from '../../../components/Media/Image/utils';
5
5
  import './SocialIcon.css';
6
6
  const b = block('social-icon');
7
7
  const SocialIcon = ({ icon, url, className }) => {
8
8
  const iconData = getMediaImage(icon);
9
- return (React.createElement(LinkBase, { href: url, target: "_blank", rel: "noopener noreferrer", className: b(null, className) },
9
+ return (React.createElement("a", { href: url, target: "_blank", rel: "noopener noreferrer", className: b(null, className) },
10
10
  React.createElement(Image, Object.assign({ className: b('icon') }, iconData))));
11
11
  };
12
12
  export default SocialIcon;
@@ -2,7 +2,7 @@ import React, { useCallback, useContext } from 'react';
2
2
  import { Button } from '@gravity-ui/uikit';
3
3
  import { block, getThemedValue } from '../../utils';
4
4
  import { AuthorType, DefaultEventNames } from '../../models';
5
- import { Author, Image, HTML, RouterLink } from '../../components';
5
+ import { Author, Image, HTML } from '../../components';
6
6
  import { ThemeValueContext } from '../../context/theme/ThemeValueContext';
7
7
  import { getMediaImage } from '../../components/Media/Image/utils';
8
8
  import { useAnalytics } from '../../hooks';
@@ -17,7 +17,7 @@ const Quote = (props) => {
17
17
  const handleButtonClick = useCallback(() => handleAnalytics(), [handleAnalytics]);
18
18
  const renderFooter = Boolean(author || url) && (React.createElement("div", { className: b('author-wrapper') },
19
19
  author && (React.createElement(Author, { className: b('author', { theme: textTheme }), author: author, type: AuthorType.Line })),
20
- url && buttonText && (React.createElement(Button, { view: "outlined", size: "xl", href: url, component: RouterLink, className: b('link-button', { theme: textTheme }), onClick: handleButtonClick }, buttonText))));
20
+ url && buttonText && (React.createElement(Button, { view: "outlined", size: "xl", href: url, className: b('link-button', { theme: textTheme }), onClick: handleButtonClick }, buttonText))));
21
21
  return (React.createElement("div", { className: b({ theme: textTheme, border }), style: color ? { backgroundColor: color } : {} },
22
22
  React.createElement("div", { key: text, className: b('content-wrapper') },
23
23
  React.createElement("div", null,
@@ -38,6 +38,9 @@ export declare const Quote: {
38
38
  type: string;
39
39
  pattern: string;
40
40
  };
41
+ buttonText: {
42
+ type: string;
43
+ };
41
44
  theme: {
42
45
  type: string;
43
46
  enum: string[];
@@ -15,6 +15,8 @@ export const Quote = {
15
15
  }, url: {
16
16
  type: 'string',
17
17
  pattern: urlPattern,
18
+ }, buttonText: {
19
+ type: 'string',
18
20
  }, theme: ThemeProps, author: authorItem }),
19
21
  },
20
22
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/page-constructor",
3
- "version": "1.26.0-alpha.2",
3
+ "version": "1.26.1",
4
4
  "description": "Gravity UI Page Constructor",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -50,7 +50,7 @@
50
50
  "bem-cn-lite": "^4.0.0",
51
51
  "github-buttons": "2.23.0",
52
52
  "lodash": "^4.17.21",
53
- "react-player": "^2.12.0",
53
+ "react-player": "^2.9.0",
54
54
  "react-slick": "^0.28.1",
55
55
  "react-spring": "^9.3.0",
56
56
  "react-transition-group": "^4.4.2",
@@ -111,8 +111,6 @@ export interface MediaVideoProps extends AnalyticsEventsBase {
111
111
  controls?: MediaVideoControlsType;
112
112
  metrika?: MetrikaVideo;
113
113
  }
114
- export interface LinkBaseProps extends React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement> {
115
- }
116
114
  export interface LinkProps extends AnalyticsEventsBase, Stylable {
117
115
  url: string;
118
116
  text?: string;
@@ -518,18 +518,14 @@ unpredictable css rules order in build */
518
518
 
519
519
  @mixin tab-panel() {
520
520
  display: flex;
521
- flex-wrap: nowrap;
521
+ flex-wrap: wrap;
522
522
  justify-content: flex-start;
523
- overflow: auto;
524
523
 
525
524
  &_centered {
526
- display: flex;
527
525
  justify-content: center;
528
- flex-wrap: wrap;
529
526
  }
530
527
 
531
528
  @media (max-width: map-get($gridBreakpoints, 'md')) {
532
- display: flex;
533
529
  flex-wrap: nowrap;
534
530
  justify-content: flex-start;
535
531
  overflow: auto;
@@ -1,3 +0,0 @@
1
- import { LinkBaseProps, WithChildren } from '../../models';
2
- declare const LinkBase: (props: WithChildren<LinkBaseProps>) => JSX.Element;
3
- export default LinkBase;
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const react_1 = tslib_1.__importStar(require("react"));
5
- const lodash_1 = require("lodash");
6
- const locationContext_1 = require("../../context/locationContext");
7
- const RouterLink_1 = tslib_1.__importDefault(require("../RouterLink/RouterLink"));
8
- const LinkBase = (props) => {
9
- const { href, children } = props, linkProps = tslib_1.__rest(props, ["href", "children"]);
10
- const { Link } = (0, react_1.useContext)(locationContext_1.LocationContext);
11
- if (Link && href && !(linkProps === null || linkProps === void 0 ? void 0 : linkProps.target)) {
12
- const extractedProps = (0, lodash_1.omit)(linkProps, ['rel', 'ref']);
13
- return (react_1.default.createElement(RouterLink_1.default, { href: href },
14
- react_1.default.createElement("a", Object.assign({}, extractedProps), children)));
15
- }
16
- return (react_1.default.createElement("a", Object.assign({ href: href }, linkProps), children));
17
- };
18
- exports.default = LinkBase;
@@ -1,3 +0,0 @@
1
- import { LinkBaseProps, WithChildren } from '../../models';
2
- declare const LinkBase: (props: WithChildren<LinkBaseProps>) => JSX.Element;
3
- export default LinkBase;
@@ -1,16 +0,0 @@
1
- import { __rest } from "tslib";
2
- import React, { useContext } from 'react';
3
- import { omit } from 'lodash';
4
- import { LocationContext } from '../../context/locationContext';
5
- import RouterLink from '../RouterLink/RouterLink';
6
- const LinkBase = (props) => {
7
- const { href, children } = props, linkProps = __rest(props, ["href", "children"]);
8
- const { Link } = useContext(LocationContext);
9
- if (Link && href && !(linkProps === null || linkProps === void 0 ? void 0 : linkProps.target)) {
10
- const extractedProps = omit(linkProps, ['rel', 'ref']);
11
- return (React.createElement(RouterLink, { href: href },
12
- React.createElement("a", Object.assign({}, extractedProps), children)));
13
- }
14
- return (React.createElement("a", Object.assign({ href: href }, linkProps), children));
15
- };
16
- export default LinkBase;