@gravity-ui/blog-constructor 5.0.2 → 5.2.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 (124) hide show
  1. package/build/cjs/blocks/Author/Author.d.ts +1 -1
  2. package/build/cjs/blocks/Author/Author.js +2 -2
  3. package/build/cjs/blocks/Banner/Banner.d.ts +1 -1
  4. package/build/cjs/blocks/Banner/Banner.js +7 -5
  5. package/build/cjs/blocks/CTA/CTA.d.ts +1 -1
  6. package/build/cjs/blocks/ColoredText/ColoredText.d.ts +1 -1
  7. package/build/cjs/blocks/ColoredText/ColoredText.js +5 -4
  8. package/build/cjs/blocks/Feed/Feed.d.ts +1 -1
  9. package/build/cjs/blocks/Header/Header.d.ts +1 -1
  10. package/build/cjs/blocks/Layout/Layout.d.ts +2 -2
  11. package/build/cjs/blocks/Media/Media.d.ts +1 -1
  12. package/build/cjs/blocks/Meta/Meta.d.ts +1 -1
  13. package/build/cjs/blocks/Suggest/Suggest.d.ts +1 -1
  14. package/build/cjs/blocks/YFM/YFM.d.ts +1 -1
  15. package/build/cjs/blocks/YFM/YFM.js +6 -4
  16. package/build/cjs/components/FeedHeader/FeedHeader.d.ts +1 -1
  17. package/build/cjs/components/FeedHeader/components/Controls/Controls.css +5 -23
  18. package/build/cjs/components/FeedHeader/components/Controls/Controls.d.ts +1 -1
  19. package/build/cjs/components/FeedHeader/components/Controls/Controls.js +1 -1
  20. package/build/cjs/components/FeedHeader/components/Controls/customRenders.js +1 -2
  21. package/build/cjs/components/Paginator/types.d.ts +4 -4
  22. package/build/cjs/components/PostCard/PostCard.d.ts +4 -3
  23. package/build/cjs/components/PostCard/PostCard.js +5 -4
  24. package/build/cjs/components/PostInfo/PostInfo.d.ts +1 -1
  25. package/build/cjs/components/PostInfo/SuggestPostInfo.d.ts +3 -3
  26. package/build/cjs/components/PostInfo/SuggestPostInfo.js +2 -1
  27. package/build/cjs/components/PostInfo/components/Date.d.ts +3 -2
  28. package/build/cjs/components/PostInfo/components/Date.js +2 -1
  29. package/build/cjs/components/PostInfo/components/ReadingTime.d.ts +1 -1
  30. package/build/cjs/components/PostInfo/components/Save.d.ts +1 -1
  31. package/build/cjs/components/PostInfo/components/Sharing.d.ts +1 -1
  32. package/build/cjs/components/Posts/Posts.d.ts +1 -1
  33. package/build/cjs/components/Posts/Posts.js +5 -2
  34. package/build/cjs/components/PostsEmpty/PostsEmpty.d.ts +1 -1
  35. package/build/cjs/components/PostsError/PostsError.d.ts +1 -1
  36. package/build/cjs/components/Search/Search.css +13 -15
  37. package/build/cjs/components/Search/Search.d.ts +7 -1
  38. package/build/cjs/components/Search/Search.js +26 -14
  39. package/build/cjs/constructor/BlogConstructorProvider.d.ts +2 -2
  40. package/build/cjs/constructor/blocksMap.d.ts +11 -11
  41. package/build/cjs/containers/BlogPostPage/BlogPostPage.d.ts +1 -1
  42. package/build/cjs/icons/Close.d.ts +1 -1
  43. package/build/cjs/icons/DropdownArrow.d.ts +1 -1
  44. package/build/cjs/icons/Save.d.ts +1 -1
  45. package/build/cjs/icons/SaveFilled.d.ts +1 -1
  46. package/build/cjs/icons/SearchIcon.d.ts +1 -1
  47. package/build/cjs/icons/ShareArrowUp.d.ts +1 -1
  48. package/build/cjs/icons/Time.d.ts +1 -1
  49. package/build/cjs/models/blocks.d.ts +5 -5
  50. package/build/cjs/models/common.d.ts +8 -0
  51. package/build/cjs/models/common.js +12 -2
  52. package/build/cjs/utils/cn.d.ts +2 -3
  53. package/build/cjs/utils/cn.js +4 -7
  54. package/build/cjs/utils/common.d.ts +1 -0
  55. package/build/cjs/utils/common.js +15 -2
  56. package/build/esm/blocks/Author/Author.d.ts +1 -1
  57. package/build/esm/blocks/Author/Author.js +2 -2
  58. package/build/esm/blocks/Banner/Banner.d.ts +1 -1
  59. package/build/esm/blocks/Banner/Banner.js +8 -6
  60. package/build/esm/blocks/CTA/CTA.d.ts +1 -1
  61. package/build/esm/blocks/ColoredText/ColoredText.d.ts +1 -1
  62. package/build/esm/blocks/ColoredText/ColoredText.js +6 -5
  63. package/build/esm/blocks/Feed/Feed.d.ts +1 -1
  64. package/build/esm/blocks/Header/Header.d.ts +1 -1
  65. package/build/esm/blocks/Layout/Layout.d.ts +2 -2
  66. package/build/esm/blocks/Media/Media.d.ts +1 -1
  67. package/build/esm/blocks/Meta/Meta.d.ts +1 -1
  68. package/build/esm/blocks/Suggest/Suggest.d.ts +1 -1
  69. package/build/esm/blocks/YFM/YFM.d.ts +1 -1
  70. package/build/esm/blocks/YFM/YFM.js +6 -4
  71. package/build/esm/components/FeedHeader/FeedHeader.d.ts +1 -1
  72. package/build/esm/components/FeedHeader/components/Controls/Controls.css +5 -23
  73. package/build/esm/components/FeedHeader/components/Controls/Controls.d.ts +1 -1
  74. package/build/esm/components/FeedHeader/components/Controls/Controls.js +1 -1
  75. package/build/esm/components/FeedHeader/components/Controls/customRenders.js +1 -2
  76. package/build/esm/components/Paginator/types.d.ts +4 -4
  77. package/build/esm/components/PostCard/PostCard.d.ts +4 -3
  78. package/build/esm/components/PostCard/PostCard.js +5 -4
  79. package/build/esm/components/PostInfo/PostInfo.d.ts +1 -1
  80. package/build/esm/components/PostInfo/SuggestPostInfo.d.ts +3 -3
  81. package/build/esm/components/PostInfo/SuggestPostInfo.js +2 -1
  82. package/build/esm/components/PostInfo/components/Date.d.ts +3 -2
  83. package/build/esm/components/PostInfo/components/Date.js +2 -1
  84. package/build/esm/components/PostInfo/components/ReadingTime.d.ts +1 -1
  85. package/build/esm/components/PostInfo/components/Save.d.ts +1 -1
  86. package/build/esm/components/PostInfo/components/Sharing.d.ts +1 -1
  87. package/build/esm/components/Posts/Posts.d.ts +1 -1
  88. package/build/esm/components/Posts/Posts.js +5 -2
  89. package/build/esm/components/PostsEmpty/PostsEmpty.d.ts +1 -1
  90. package/build/esm/components/PostsError/PostsError.d.ts +1 -1
  91. package/build/esm/components/Search/Search.css +13 -15
  92. package/build/esm/components/Search/Search.d.ts +7 -1
  93. package/build/esm/components/Search/Search.js +28 -16
  94. package/build/esm/constructor/BlogConstructorProvider.d.ts +2 -2
  95. package/build/esm/constructor/blocksMap.d.ts +11 -11
  96. package/build/esm/containers/BlogPostPage/BlogPostPage.d.ts +1 -1
  97. package/build/esm/icons/Close.d.ts +1 -1
  98. package/build/esm/icons/DropdownArrow.d.ts +1 -1
  99. package/build/esm/icons/Save.d.ts +1 -1
  100. package/build/esm/icons/SaveFilled.d.ts +1 -1
  101. package/build/esm/icons/SearchIcon.d.ts +1 -1
  102. package/build/esm/icons/ShareArrowUp.d.ts +1 -1
  103. package/build/esm/icons/Time.d.ts +1 -1
  104. package/build/esm/models/blocks.d.ts +5 -5
  105. package/build/esm/models/common.d.ts +8 -0
  106. package/build/esm/models/common.js +11 -1
  107. package/build/esm/utils/cn.d.ts +2 -3
  108. package/build/esm/utils/cn.js +3 -4
  109. package/build/esm/utils/common.d.ts +1 -0
  110. package/build/esm/utils/common.js +13 -1
  111. package/package.json +18 -6
  112. package/server/models/blocks.d.ts +5 -5
  113. package/server/models/common.d.ts +8 -0
  114. package/server/models/common.js +12 -2
  115. package/build/cjs/components/ButtonWithIcon/ButtonWithIcon.css +0 -76
  116. package/build/cjs/components/ButtonWithIcon/ButtonWithIcon.d.ts +0 -12
  117. package/build/cjs/components/ButtonWithIcon/ButtonWithIcon.js +0 -11
  118. package/build/cjs/demo/DocsDecorator/DocsDecorator.css +0 -14
  119. package/build/cjs/internal-typings/bem-cn-lite.d.ts +0 -17
  120. package/build/esm/components/ButtonWithIcon/ButtonWithIcon.css +0 -76
  121. package/build/esm/components/ButtonWithIcon/ButtonWithIcon.d.ts +0 -13
  122. package/build/esm/components/ButtonWithIcon/ButtonWithIcon.js +0 -7
  123. package/build/esm/demo/DocsDecorator/DocsDecorator.css +0 -14
  124. package/build/esm/internal-typings/bem-cn-lite.d.ts +0 -17
@@ -1,18 +1,18 @@
1
1
  declare const _default: {
2
2
  blocks: {
3
- "blog-yfm-block": import("react").FC<import("../models/blocks").YFMProps>;
4
- "blog-layout-block": import("react").FC<import("../models/blocks").LayoutProps>;
5
- "blog-media-block": import("react").FC<import("../models/blocks").MediaProps>;
6
- "blog-banner-block": import("react").FC<import("../models/blocks").BannerProps>;
7
- "blog-cta-block": import("react").FC<import("../models/blocks").CTAProps>;
8
- "blog-colored-text-block": import("react").FC<import("../models/blocks").ColoredTextProps>;
9
- "blog-author-block": import("react").FC<import("../models/blocks").AuthorProps>;
10
- "blog-suggest-block": import("react").FC<import("../models/blocks").SuggestProps>;
11
- "blog-meta-block": import("react").FC<import("../models/blocks").MetaProps>;
12
- "blog-feed-block": import("react").FC<import("../models/blocks").FeedProps>;
3
+ "blog-yfm-block": (props: import("../models/blocks").YFMProps) => import("react").JSX.Element;
4
+ "blog-layout-block": ({ fullWidth, mobileOrder, children, paddingTop, paddingBottom, }: import("react").PropsWithChildren<import("../models/blocks").LayoutProps>) => import("react").JSX.Element;
5
+ "blog-media-block": ({ text, paddingTop, paddingBottom, ...mediaProps }: import("../models/blocks").MediaProps) => import("react").JSX.Element;
6
+ "blog-banner-block": ({ color, imageSize, image, paddingTop, paddingBottom, qa, ...content }: import("../models/blocks").BannerProps) => import("react").JSX.Element;
7
+ "blog-cta-block": ({ items, paddingTop, paddingBottom }: import("../models/blocks").CTAProps) => import("react").JSX.Element;
8
+ "blog-colored-text-block": ({ background, paddingTop, paddingBottom, qa, ...content }: import("../models/blocks").ColoredTextProps) => import("react").JSX.Element;
9
+ "blog-author-block": (props: import("../models/blocks").AuthorProps) => import("react").JSX.Element | null;
10
+ "blog-suggest-block": ({ paddingTop, paddingBottom }: import("../models/blocks").SuggestProps) => import("react").JSX.Element | null;
11
+ "blog-meta-block": (props: import("../models/blocks").MetaProps) => import("react").JSX.Element;
12
+ "blog-feed-block": ({ image }: import("../models/blocks").FeedProps) => import("react").JSX.Element;
13
13
  };
14
14
  headers: {
15
- "blog-header-block": import("react").FC<import("../models/blocks").HeaderProps>;
15
+ "blog-header-block": (props: import("../models/blocks").HeaderProps) => import("react").JSX.Element;
16
16
  };
17
17
  };
18
18
  export default _default;
@@ -18,4 +18,4 @@ export interface BlogPostPageProps {
18
18
  isSignedInUser?: boolean;
19
19
  onClickSignIn?: React.EventHandler<SyntheticEvent>;
20
20
  }
21
- export declare const BlogPostPage: React.FC<BlogPostPageProps>;
21
+ export declare const BlogPostPage: ({ metaData, suggestedPosts, likes, content, post, settings, navigation, shareOptions, isSignedInUser, onClickSignIn, }: BlogPostPageProps) => React.JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import React from 'react';
2
- export declare const Close: React.FC<React.SVGProps<SVGSVGElement>>;
2
+ export declare const Close: (props: React.SVGProps<SVGSVGElement>) => React.JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import React from 'react';
2
- export declare const DropdownArrow: React.FC<React.SVGProps<SVGSVGElement>>;
2
+ export declare const DropdownArrow: (props: React.SVGProps<SVGSVGElement>) => React.JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import React from 'react';
2
- export declare const Save: React.FC<React.SVGProps<SVGSVGElement>>;
2
+ export declare const Save: (props: React.SVGProps<SVGSVGElement>) => React.JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import React from 'react';
2
- export declare const SaveFilled: React.FC<React.SVGProps<SVGSVGElement>>;
2
+ export declare const SaveFilled: (props: React.SVGProps<SVGSVGElement>) => React.JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import React from 'react';
2
- export declare const SearchIcon: React.FC<React.SVGProps<SVGSVGElement>>;
2
+ export declare const SearchIcon: (props: React.SVGProps<SVGSVGElement>) => React.JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import React from 'react';
2
- export declare const ShareArrowUp: React.FC<React.SVGProps<SVGSVGElement>>;
2
+ export declare const ShareArrowUp: (props: React.SVGProps<SVGSVGElement>) => React.JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import React from 'react';
2
- export declare const Time: React.FC<React.SVGProps<SVGSVGElement>>;
2
+ export declare const Time: (props: React.SVGProps<SVGSVGElement>) => React.JSX.Element;
@@ -1,17 +1,17 @@
1
1
  import { ReactElement } from 'react';
2
2
  import { ContentBlockProps, HeaderBlockProps, MediaProps as PCMediaProps, TextTheme } from '@gravity-ui/page-constructor';
3
- import { BlockType, ClassNameProps, PostData } from './common';
3
+ import { BlockType, ClassNameProps, PostData, QAProps } from './common';
4
4
  import { PaddingsYFMProps } from './paddings';
5
5
  export type AuthorProps = ClassNameProps & {
6
6
  authorId: number;
7
7
  image: string;
8
- } & PaddingsYFMProps;
9
- export type BannerProps = ContentBlockProps & {
8
+ } & PaddingsYFMProps & QAProps;
9
+ export type BannerProps = ContentBlockProps & QAProps & {
10
10
  color?: string;
11
11
  image?: string;
12
12
  imageSize?: 's' | 'm';
13
13
  } & PaddingsYFMProps;
14
- export type ColoredTextProps = ContentBlockProps & {
14
+ export type ColoredTextProps = ContentBlockProps & QAProps & {
15
15
  background?: {
16
16
  color?: string;
17
17
  image?: string;
@@ -40,7 +40,7 @@ export type SuggestProps = ClassNameProps & {
40
40
  } & PaddingsYFMProps;
41
41
  export type YFMProps = {
42
42
  text: string;
43
- } & PaddingsYFMProps;
43
+ } & PaddingsYFMProps & QAProps;
44
44
  export type FeedProps = {
45
45
  image: string;
46
46
  };
@@ -168,3 +168,11 @@ export type FetchArgs = {
168
168
  export interface QAProps {
169
169
  qa?: string;
170
170
  }
171
+ export declare enum PostCardSize {
172
+ SMALL = "s",
173
+ MEDIUM = "m"
174
+ }
175
+ export declare enum PostCardTitleHeadingLevel {
176
+ H2 = "h2",
177
+ H3 = "h3"
178
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DefaultEventNames = exports.BlockType = exports.Theme = void 0;
3
+ exports.PostCardTitleHeadingLevel = exports.PostCardSize = exports.DefaultEventNames = exports.BlockType = exports.Theme = void 0;
4
4
  var Theme;
5
5
  (function (Theme) {
6
6
  Theme["Light"] = "light";
@@ -31,4 +31,14 @@ var DefaultEventNames;
31
31
  DefaultEventNames["Tag"] = "selector-tag-click";
32
32
  DefaultEventNames["Service"] = "selector-service-click";
33
33
  DefaultEventNames["SaveOnly"] = "save-only-button-click";
34
- })(DefaultEventNames = exports.DefaultEventNames || (exports.DefaultEventNames = {}));
34
+ })(DefaultEventNames = exports.DefaultEventNames || (exports.DefaultEventNames = {}));
35
+ var PostCardSize;
36
+ (function (PostCardSize) {
37
+ PostCardSize["SMALL"] = "s";
38
+ PostCardSize["MEDIUM"] = "m";
39
+ })(PostCardSize = exports.PostCardSize || (exports.PostCardSize = {}));
40
+ var PostCardTitleHeadingLevel;
41
+ (function (PostCardTitleHeadingLevel) {
42
+ PostCardTitleHeadingLevel["H2"] = "h2";
43
+ PostCardTitleHeadingLevel["H3"] = "h3";
44
+ })(PostCardTitleHeadingLevel = exports.PostCardTitleHeadingLevel || (exports.PostCardTitleHeadingLevel = {}));
@@ -1,4 +1,3 @@
1
- import blockOrigin from 'bem-cn-lite';
2
1
  export declare const NAMESPACE = "bc-";
3
- export type CnBlock = ReturnType<typeof blockOrigin>;
4
- export declare function block(name: string): CnBlock;
2
+ export declare const cn: import("@bem-react/classname").ClassNameInitilizer;
3
+ export declare const block: import("@bem-react/classname").ClassNameInitilizer;
@@ -1,10 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.block = exports.NAMESPACE = void 0;
4
- const tslib_1 = require("tslib");
5
- const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
3
+ exports.block = exports.cn = exports.NAMESPACE = void 0;
4
+ const classname_1 = require("@bem-react/classname");
6
5
  exports.NAMESPACE = 'bc-';
7
- function block(name) {
8
- return (0, bem_cn_lite_1.default)(`${exports.NAMESPACE}${name}`);
9
- }
10
- exports.block = block;
6
+ exports.cn = (0, classname_1.withNaming)({ e: '__', m: '_' });
7
+ exports.block = (0, classname_1.withNaming)({ n: exports.NAMESPACE, e: '__', m: '_' });
@@ -41,4 +41,5 @@ export declare const isMetrikaExist: (goal: NewMetrikaGoal, existGoals: NewMetri
41
41
  export declare const getBlogElementMetrika: (blogCustomGoal: NewMetrikaGoal, existingGoals?: MetrikaGoal) => string | string[] | NewMetrikaGoal[];
42
42
  export declare const getFeedQueryParams: (queryString: Query, pageNumber?: number) => GetPostsRequest;
43
43
  export declare const scrollOnPageChange: (containerId: string) => void;
44
+ export declare const getQaAttributes: (qa?: string, ...customKeys: (string | Array<string>)[]) => Record<string, string>;
44
45
  export {};
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.scrollOnPageChange = exports.getFeedQueryParams = exports.getBlogElementMetrika = exports.isMetrikaExist = exports.getBreadcrumbs = exports.getBlogPath = exports.updateContentSizes = exports.getTagFilterUrl = exports.postLikeStatus = exports.getTags = exports.scrollToHash = exports.getPageSearchParams = exports.getAbsolutePath = void 0;
3
+ exports.getQaAttributes = exports.scrollOnPageChange = exports.getFeedQueryParams = exports.getBlogElementMetrika = exports.isMetrikaExist = exports.getBreadcrumbs = exports.getBlogPath = exports.updateContentSizes = exports.getTagFilterUrl = exports.postLikeStatus = exports.getTags = exports.scrollToHash = exports.getPageSearchParams = exports.getAbsolutePath = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const url_1 = require("url");
6
6
  const page_constructor_1 = require("@gravity-ui/page-constructor");
7
7
  const lodash_1 = require("lodash");
8
8
  const constants_1 = require("../blocks/constants");
9
9
  const i18n_1 = require("../i18n");
10
+ const QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];
10
11
  function getAbsolutePath(router, url) {
11
12
  if (!router || !router.pathname) {
12
13
  return url !== null && url !== void 0 ? url : '';
@@ -112,4 +113,16 @@ const scrollOnPageChange = (containerId) => {
112
113
  (0, exports.scrollToHash)(containerId);
113
114
  }
114
115
  };
115
- exports.scrollOnPageChange = scrollOnPageChange;
116
+ exports.scrollOnPageChange = scrollOnPageChange;
117
+ const getQaAttributes = (qa, ...customKeys) => {
118
+ const attributes = {};
119
+ if (qa) {
120
+ const keys = QA_ATTRIBUTES_KEYS.concat((0, lodash_1.flatten)(customKeys));
121
+ keys.forEach((key) => {
122
+ attributes[(0, lodash_1.camelCase)(key)] = `${qa}-${key}`;
123
+ });
124
+ attributes.default = qa;
125
+ }
126
+ return attributes;
127
+ };
128
+ exports.getQaAttributes = getQaAttributes;
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { AuthorProps } from '../../models/blocks';
3
3
  import './Author.css';
4
- export declare const Author: React.FC<AuthorProps>;
4
+ export declare const Author: (props: AuthorProps) => React.JSX.Element | null;
@@ -8,7 +8,7 @@ import './Author.css';
8
8
  const b = block('author');
9
9
  export const Author = (props) => {
10
10
  var _a;
11
- const { image, paddingTop, paddingBottom, authorId } = props;
11
+ const { image, paddingTop, paddingBottom, authorId, qa } = props;
12
12
  const { post } = useContext(PostPageContext);
13
13
  const author = (_a = post === null || post === void 0 ? void 0 : post.authors) === null || _a === void 0 ? void 0 : _a.find(({ id }) => id === authorId);
14
14
  const authorItem = useMemo(() => {
@@ -28,7 +28,7 @@ export const Author = (props) => {
28
28
  return (React.createElement(Wrapper, { paddings: {
29
29
  [PaddingsDirections.top]: paddingTop,
30
30
  [PaddingsDirections.bottom]: paddingBottom,
31
- }, className: b('content') },
31
+ }, className: b('content'), qa: qa },
32
32
  React.createElement("div", { className: b('layout'), "data-qa": "blog-author-layout" },
33
33
  React.createElement(PCAuthor, { type: AuthorType.Column, author: authorItem, authorContainerClassName: b('container') }))));
34
34
  };
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { BannerProps } from '../../models/blocks';
3
3
  import './Banner.css';
4
- export declare const Banner: React.FC<BannerProps>;
4
+ export declare const Banner: ({ color, imageSize, image, paddingTop, paddingBottom, qa, ...content }: BannerProps) => React.JSX.Element;
@@ -5,13 +5,15 @@ import { Wrapper } from '../../components/Wrapper/Wrapper';
5
5
  import { BlogMetrikaGoalIds } from '../../constants';
6
6
  import { PaddingsDirections } from '../../models/paddings';
7
7
  import { block } from '../../utils/cn';
8
- import { getBlogElementMetrika, updateContentSizes } from '../../utils/common';
8
+ import { getBlogElementMetrika, getQaAttributes, updateContentSizes } from '../../utils/common';
9
9
  import './Banner.css';
10
10
  const b = block('banner');
11
+ const BANNER_CUSTOM_QA_ATTRIBUTES = ['image-container'];
11
12
  export const Banner = (_a) => {
12
13
  var _b;
13
- var { color, imageSize = 's', image, paddingTop, paddingBottom } = _a, content = __rest(_a, ["color", "imageSize", "image", "paddingTop", "paddingBottom"]);
14
+ var { color, imageSize = 's', image, paddingTop, paddingBottom, qa } = _a, content = __rest(_a, ["color", "imageSize", "image", "paddingTop", "paddingBottom", "qa"]);
14
15
  const contentStyle = {};
16
+ const qaAttributes = getQaAttributes(qa, BANNER_CUSTOM_QA_ATTRIBUTES);
15
17
  if (color) {
16
18
  contentStyle.backgroundColor = color;
17
19
  }
@@ -30,10 +32,10 @@ export const Banner = (_a) => {
30
32
  return (React.createElement(Wrapper, { paddings: {
31
33
  [PaddingsDirections.top]: paddingTop,
32
34
  [PaddingsDirections.bottom]: paddingBottom,
33
- }, className: b('container') },
34
- React.createElement("div", { className: b('content'), style: contentStyle, "data-qa": "blog-banner-content" },
35
+ }, qa: qaAttributes.wrapper, className: b('container') },
36
+ React.createElement("div", { className: b('content'), style: contentStyle, "data-qa": qaAttributes.content },
35
37
  React.createElement("div", { className: b('info') },
36
- React.createElement(Content, Object.assign({}, contentData))),
37
- image && (React.createElement("div", { className: b('image-container', { ['image-size']: imageSize }) },
38
+ React.createElement(Content, Object.assign({}, contentData, { qa: qaAttributes.content }))),
39
+ image && (React.createElement("div", { className: b('image-container', { ['image-size']: imageSize }), "data-qa": qaAttributes.imageContainer },
38
40
  React.createElement(Image, { className: b('image'), src: image }))))));
39
41
  };
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { CTAProps } from '../../models/blocks';
3
3
  import './CTA.css';
4
- export declare const CTA: React.FC<CTAProps>;
4
+ export declare const CTA: ({ items, paddingTop, paddingBottom }: CTAProps) => React.JSX.Element;
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { ColoredTextProps } from '../../models/blocks';
3
3
  import './ColoredText.css';
4
- export declare const ColoredText: React.FC<ColoredTextProps>;
4
+ export declare const ColoredText: ({ background, paddingTop, paddingBottom, qa, ...content }: ColoredTextProps) => React.JSX.Element;
@@ -4,18 +4,19 @@ import { BackgroundImage, Content } from '@gravity-ui/page-constructor';
4
4
  import { Wrapper } from '../../components/Wrapper/Wrapper';
5
5
  import { PaddingsDirections } from '../../models/paddings';
6
6
  import { block } from '../../utils/cn';
7
- import { updateContentSizes } from '../../utils/common';
7
+ import { getQaAttributes, updateContentSizes } from '../../utils/common';
8
8
  import './ColoredText.css';
9
9
  const b = block('colored-text');
10
10
  export const ColoredText = (_a) => {
11
- var { background, paddingTop, paddingBottom } = _a, content = __rest(_a, ["background", "paddingTop", "paddingBottom"]);
11
+ var { background, paddingTop, paddingBottom, qa } = _a, content = __rest(_a, ["background", "paddingTop", "paddingBottom", "qa"]);
12
12
  const contentData = updateContentSizes(content);
13
+ const qaAttributes = getQaAttributes(qa);
13
14
  return (React.createElement(Wrapper, { paddings: {
14
15
  [PaddingsDirections.top]: paddingTop,
15
16
  [PaddingsDirections.bottom]: paddingBottom,
16
- } },
17
- React.createElement("div", { className: b('container'), style: { backgroundColor: (background === null || background === void 0 ? void 0 : background.color) || 'none' }, "data-qa": "blog-colored-text-content" },
17
+ }, qa: qaAttributes.wrapper },
18
+ React.createElement("div", { className: b('container'), style: { backgroundColor: (background === null || background === void 0 ? void 0 : background.color) || 'none' }, "data-qa": qaAttributes.container },
18
19
  React.createElement("div", { className: b('picture-container') }, (background === null || background === void 0 ? void 0 : background.image) && (React.createElement(BackgroundImage, { className: b('picture'), alt: background === null || background === void 0 ? void 0 : background.altText, src: background === null || background === void 0 ? void 0 : background.image }))),
19
20
  React.createElement("div", { className: b('text-content') },
20
- React.createElement(Content, Object.assign({}, contentData))))));
21
+ React.createElement(Content, Object.assign({}, contentData, { qa: qaAttributes.content }))))));
21
22
  };
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
2
  import { FeedProps } from '../../models/blocks';
3
- export declare const Feed: React.FC<FeedProps>;
3
+ export declare const Feed: ({ image }: FeedProps) => React.JSX.Element;
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
2
  import { HeaderProps } from '../../models/blocks';
3
- export declare const Header: React.FC<HeaderProps>;
3
+ export declare const Header: (props: HeaderProps) => React.JSX.Element;
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { PropsWithChildren } from 'react';
2
2
  import { LayoutProps } from '../../models/blocks';
3
3
  import './Layout.css';
4
- export declare const Layout: React.FC<LayoutProps>;
4
+ export declare const Layout: ({ fullWidth, mobileOrder, children, paddingTop, paddingBottom, }: PropsWithChildren<LayoutProps>) => React.JSX.Element;
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { MediaProps } from '../../models/blocks';
3
3
  import './Media.css';
4
- export declare const Media: React.FC<MediaProps>;
4
+ export declare const Media: ({ text, paddingTop, paddingBottom, ...mediaProps }: MediaProps) => React.JSX.Element;
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { MetaProps } from '../../models/blocks';
3
3
  import './Meta.css';
4
- export declare const Meta: React.FC<MetaProps>;
4
+ export declare const Meta: (props: MetaProps) => React.JSX.Element;
@@ -9,4 +9,4 @@ import { SuggestProps } from '../../models/blocks';
9
9
  *
10
10
  * @returns -jsx
11
11
  */
12
- export declare const Suggest: React.FC<SuggestProps>;
12
+ export declare const Suggest: ({ paddingTop, paddingBottom }: SuggestProps) => React.JSX.Element | null;
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
2
  import { YFMProps } from '../../models/blocks';
3
- export declare const YFM: React.FC<YFMProps>;
3
+ export declare const YFM: (props: YFMProps) => React.JSX.Element;
@@ -1,15 +1,17 @@
1
1
  import React from 'react';
2
2
  import { YFMWrapper } from '@gravity-ui/page-constructor';
3
- import block from 'bem-cn-lite';
4
3
  import { Wrapper } from '../../components/Wrapper/Wrapper';
5
4
  import { PaddingsDirections } from '../../models/paddings';
6
- const b = block('yfm');
5
+ import { cn } from '../../utils/cn';
6
+ import { getQaAttributes } from '../../utils/common';
7
+ const b = cn('yfm');
7
8
  export const YFM = (props) => {
8
- const { text, paddingTop, paddingBottom } = props;
9
+ const { text, paddingTop, paddingBottom, qa } = props;
10
+ const qaAttributes = getQaAttributes(qa);
9
11
  return (React.createElement(Wrapper, { paddings: {
10
12
  [PaddingsDirections.top]: paddingTop,
11
13
  [PaddingsDirections.bottom]: paddingBottom,
12
- } },
14
+ }, qa: qaAttributes.wrapper },
13
15
  React.createElement(YFMWrapper, { content: text, modifiers: {
14
16
  blog: true,
15
17
  resetPaddings: true,
@@ -5,5 +5,5 @@ import './FeedHeader.css';
5
5
  type HeaderProps = Pick<HeaderBlockProps, 'background' | 'offset' | 'theme' | 'verticalOffset'>;
6
6
  type FeedHeaderProps = HeaderProps & ControlsProps;
7
7
  type FeedHeaderContainerProps = FeedHeaderProps & ClassNameProps;
8
- export declare const FeedHeader: React.FC<FeedHeaderContainerProps>;
8
+ export declare const FeedHeader: ({ tags, services, handleLoadData, offset, background, theme, verticalOffset, className, queryParams, }: FeedHeaderContainerProps) => React.JSX.Element;
9
9
  export {};
@@ -23,9 +23,6 @@ unpredictable css rules order in build */
23
23
  width: 100%;
24
24
  max-width: 100%;
25
25
  }
26
- .bc-feed-controls__search .yc-text-input_view_normal .yc-text-input__control {
27
- border-color: var(--g-color-base-background);
28
- }
29
26
  .bc-feed-controls__select {
30
27
  width: 100%;
31
28
  }
@@ -33,9 +30,6 @@ unpredictable css rules order in build */
33
30
  max-height: 500px;
34
31
  border-radius: 12px;
35
32
  }
36
- .bc-feed-controls__popup.bc-feed-controls__popup .g-select-filter + .g-select-list {
37
- margin-top: 0;
38
- }
39
33
  .bc-feed-controls__popup.bc-feed-controls__popup .g-select-list {
40
34
  overflow: scroll;
41
35
  }
@@ -49,27 +43,15 @@ unpredictable css rules order in build */
49
43
  margin: 4px;
50
44
  border-radius: 8px;
51
45
  }
52
- .bc-feed-controls__popup.bc-feed-controls__popup .yc-text-input__content {
53
- padding: 4px;
54
- border: none;
55
- border-bottom: 1px solid var(--yc-color-line-generic);
56
- border-bottom-right-radius: 0;
57
- border-bottom-left-radius: 0;
58
- }
59
- .bc-feed-controls__popup.bc-feed-controls__popup .yc-text-input__content .yc-text-input__control.yc-text-input__control_type_input {
60
- border: none;
61
- }
62
- .bc-feed-controls__popup.bc-feed-controls__popup .g-select-list_size_xl .g-select-list__option {
63
- padding: 0 16px;
64
- }
65
46
 
66
- .bc-feed-controls__popup-filter .yc-text-input__control {
47
+ .bc-feed-controls__popup-filter {
67
48
  font-size: var(--g-text-body-2-font-size);
68
49
  line-height: var(--g-text-body-2-line-height);
50
+ padding: 4px 12px;
69
51
  border: none;
70
- }
71
- .bc-feed-controls__popup-filter .yc-text-input__control:hover, .bc-feed-controls__popup-filter .yc-text-input__control:focus {
72
- border: none;
52
+ border-bottom: 1px solid var(--yc-color-line-generic);
53
+ border-bottom-right-radius: 0;
54
+ border-bottom-left-radius: 0;
73
55
  }
74
56
  .bc-feed-controls__select:hover {
75
57
  width: 100%;
@@ -13,4 +13,4 @@ export type ControlsProps = {
13
13
  queryParams: Query;
14
14
  setQuery?: SetQueryType;
15
15
  };
16
- export declare const Controls: React.FC<ControlsProps>;
16
+ export declare const Controls: ({ handleLoadData, tags, services, queryParams, }: ControlsProps) => React.JSX.Element;
@@ -101,7 +101,7 @@ export const Controls = ({ handleLoadData, tags = [], services = [], queryParams
101
101
  defaultLabel: i18(Keyset.AllTags),
102
102
  }), disablePortal: true, virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: renderOption })),
103
103
  services.length > 0 ? (React.createElement("div", { className: b('filter-item') },
104
- React.createElement(Select, { className: b('select'), size: "xl", multiple: true, filterable: true, disablePortal: true, options: services, defaultValue: servicesItems, popupClassName: b('popup'), onUpdate: handleServicesSelect, placeholder: i18(Keyset.AllServices), renderControl: renderSwitcher({
104
+ React.createElement(Select, { className: b('select'), size: "xl", multiple: true, filterable: true, hasClear: true, disablePortal: true, options: services, defaultValue: servicesItems, popupClassName: b('popup'), onUpdate: handleServicesSelect, placeholder: i18(Keyset.AllServices), renderControl: renderSwitcher({
105
105
  initial: servicesItems,
106
106
  list: services,
107
107
  defaultLabel: i18(Keyset.AllServices),
@@ -9,6 +9,5 @@ const b = block('feed-controls');
9
9
  export const renderSwitcher = ({ initial, list, defaultLabel }) =>
10
10
  // eslint-disable-next-line react/display-name
11
11
  ({ onClick, ref }) => (React.createElement(CustomSwitcher, { initial: initial, defaultLabel: defaultLabel, list: list, controlRef: ref, onClick: onClick }));
12
- export const renderFilter = ({ value, ref, onChange, onKeyDown }) => (React.createElement("div", { className: b('popup-filter') },
13
- React.createElement(TextInput, { controlRef: ref, controlProps: { size: 1 }, value: value, placeholder: i18(Keyset.Search), onUpdate: onChange, onKeyDown: onKeyDown })));
12
+ export const renderFilter = ({ value, ref, onChange, onKeyDown }) => (React.createElement(TextInput, { controlRef: ref, controlProps: { size: 1 }, value: value, view: "clear", placeholder: i18(Keyset.Search), onUpdate: onChange, onKeyDown: onKeyDown, className: b('popup-filter') }));
14
13
  export const renderOption = (option) => (React.createElement(CustomSelectOption, { data: option }));
@@ -1,10 +1,10 @@
1
- import { ReactNode } from 'react';
2
- import { Modifications } from 'bem-cn-lite';
3
- import { ClassNameProps } from '../../models/common';
1
+ import type { ReactNode } from 'react';
2
+ import type { NoStrictEntityMods } from '@bem-react/classname';
3
+ import type { ClassNameProps } from '../../models/common';
4
4
  export interface PaginatorItemProps {
5
5
  key: string | ArrowType;
6
6
  dataKey: string | ArrowType;
7
- mods: Modifications;
7
+ mods: NoStrictEntityMods;
8
8
  content: ReactNode;
9
9
  onClick?: (key: number | ArrowType) => void;
10
10
  loading?: boolean;
@@ -1,16 +1,17 @@
1
1
  import React from 'react';
2
2
  import { MetrikaGoal } from '@gravity-ui/page-constructor';
3
- import { PostData } from '../../models/common';
3
+ import { PostCardSize, PostCardTitleHeadingLevel, PostData } from '../../models/common';
4
4
  import './PostCard.css';
5
5
  type PostCardProps = {
6
6
  post: PostData;
7
7
  fullWidth?: boolean;
8
8
  showTag?: boolean;
9
- size?: 's' | 'm';
9
+ size?: PostCardSize;
10
+ titleHeadingLevel?: PostCardTitleHeadingLevel;
10
11
  /**
11
12
  * @deprecated Metrika will be deleted after launch of analyticsEvents
12
13
  */
13
14
  metrikaGoals?: MetrikaGoal;
14
15
  };
15
- export declare const PostCard: React.FC<PostCardProps>;
16
+ export declare const PostCard: ({ post, metrikaGoals, fullWidth, size, showTag, titleHeadingLevel, }: PostCardProps) => React.JSX.Element;
16
17
  export {};
@@ -1,11 +1,12 @@
1
1
  import React, { useContext, useMemo } from 'react';
2
2
  import { CardBase, HTML, YFMWrapper } from '@gravity-ui/page-constructor';
3
3
  import { LikesContext } from '../../contexts/LikesContext';
4
+ import { PostCardSize, PostCardTitleHeadingLevel } from '../../models/common';
4
5
  import { block } from '../../utils/cn';
5
6
  import { SuggestPostInfo } from '../PostInfo/SuggestPostInfo';
6
7
  import './PostCard.css';
7
8
  const b = block('post-card');
8
- export const PostCard = ({ post, metrikaGoals, fullWidth = false, size = 's', showTag = false, }) => {
9
+ export const PostCard = ({ post, metrikaGoals, fullWidth = false, size = PostCardSize.SMALL, showTag = false, titleHeadingLevel = PostCardTitleHeadingLevel.H3, }) => {
9
10
  var _a;
10
11
  const { title: postTitle, htmlTitle, textTitle, blogPostId, id, date, readingTime, hasUserLike, likes, image, description, tags, url, } = post;
11
12
  const title = postTitle || textTitle || htmlTitle;
@@ -22,9 +23,9 @@ export const PostCard = ({ post, metrikaGoals, fullWidth = false, size = 's', sh
22
23
  React.createElement("div", { className: b('image-container'), "data-qa": "blog-suggest-header" })),
23
24
  React.createElement(CardBase.Content, null,
24
25
  showTag && ((_a = tags === null || tags === void 0 ? void 0 : tags[0]) === null || _a === void 0 ? void 0 : _a.name) && (React.createElement("div", { className: b('tag', { size }) }, tags[0].name)),
25
- title && (React.createElement("h4", { className: b('title', { size }) },
26
- React.createElement("span", null,
27
- React.createElement(HTML, null, title)))),
26
+ title &&
27
+ React.createElement(titleHeadingLevel, { className: b('title', { size }) }, React.createElement("span", null,
28
+ React.createElement(HTML, null, title))),
28
29
  description && (React.createElement(YFMWrapper, { className: b('description'), content: description, modifiers: {
29
30
  blog: size === 'm',
30
31
  blogCard: true,
@@ -27,5 +27,5 @@ type PostInfoProps = QAProps & {
27
27
  *
28
28
  * @returns jsx
29
29
  */
30
- export declare const PostInfo: React.FC<PostInfoProps>;
30
+ export declare const PostInfo: ({ date, readingTime, postId, theme, metrikaGoals, qa, }: PostInfoProps) => React.JSX.Element;
31
31
  export {};
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
- import { PostData, QAProps, ToggleLikeCallbackType } from '../../models/common';
2
+ import { PostCardSize, PostData, QAProps, ToggleLikeCallbackType } from '../../models/common';
3
3
  import './PostInfo.css';
4
4
  export interface SuggestPostInfoProps extends Pick<PostData, 'date' | 'readingTime' | 'hasUserLike'>, QAProps {
5
5
  postId: PostData['blogPostId'];
6
- size?: 's' | 'm';
6
+ size?: PostCardSize;
7
7
  likes?: {
8
8
  likesCount?: number;
9
9
  hasUserLike?: boolean;
@@ -24,4 +24,4 @@ export interface SuggestPostInfoProps extends Pick<PostData, 'date' | 'readingTi
24
24
  *
25
25
  * @returns jsx
26
26
  */
27
- export declare const SuggestPostInfo: React.FC<SuggestPostInfoProps>;
27
+ export declare const SuggestPostInfo: ({ postId, date, readingTime, likes, size, qa, }: SuggestPostInfoProps) => React.JSX.Element;
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { useLikes } from '../../hooks/useLikes';
3
+ import { PostCardSize } from '../../models/common';
3
4
  import { block } from '../../utils/cn';
4
5
  import { Date } from './components/Date';
5
6
  import { ReadingTime } from './components/ReadingTime';
@@ -20,7 +21,7 @@ const b = block('post-info');
20
21
  *
21
22
  * @returns jsx
22
23
  */
23
- export const SuggestPostInfo = ({ postId, date, readingTime, likes, size = 's', qa, }) => {
24
+ export const SuggestPostInfo = ({ postId, date, readingTime, likes, size = PostCardSize.SMALL, qa, }) => {
24
25
  const { hasUserLike, likesCount, handleLike } = useLikes({
25
26
  hasLike: likes === null || likes === void 0 ? void 0 : likes.hasUserLike,
26
27
  count: likes === null || likes === void 0 ? void 0 : likes.likesCount,
@@ -1,8 +1,9 @@
1
1
  import React from 'react';
2
+ import { PostCardSize } from '../../../models/common';
2
3
  import '../PostInfo.css';
3
4
  type DateProps = {
4
5
  date: string | number;
5
- size?: 's' | 'm';
6
+ size?: PostCardSize;
6
7
  };
7
- export declare const Date: React.FC<DateProps>;
8
+ export declare const Date: ({ date, size }: DateProps) => React.JSX.Element;
8
9
  export {};