@gravity-ui/blog-constructor 7.0.0-beta.3 → 7.0.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  .bc-cta__card {
2
2
  display: flex;
3
- background-color: var(--g-color-base-float);
3
+ background-color: var(--bc-cta-card-bg, var(--pc-color-base-silver));
4
4
  border-radius: var(--bc-border-radius);
5
5
  min-height: 80px;
6
6
  align-content: center;
@@ -561,6 +561,9 @@ export declare const Header: {
561
561
  status: {
562
562
  type: string;
563
563
  };
564
+ centered: {
565
+ type: string;
566
+ };
564
567
  paddingTop: {
565
568
  type: string;
566
569
  enum: string[];
@@ -5,7 +5,7 @@ const tslib_1 = require("tslib");
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const React = tslib_1.__importStar(require("react"));
7
7
  const uikit_1 = require("@gravity-ui/uikit");
8
- const debounce_1 = tslib_1.__importDefault(require("lodash/debounce"));
8
+ const debounce_1 = tslib_1.__importDefault(require("lodash/debounce.js"));
9
9
  const useIsIPhone_1 = require("../../hooks/useIsIPhone.js");
10
10
  const i18n_1 = require("../../i18n/index.js");
11
11
  const Close_1 = require("../../icons/Close.js");
@@ -1 +1 @@
1
- {"version":3,"file":"Search.js","sourceRoot":"../../../../src","sources":["components/Search/Search.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {Icon, TextInput} from '@gravity-ui/uikit';\nimport lodashDebounce from 'lodash/debounce';\n\nimport {useIsIPhone} from '../../hooks/useIsIPhone';\nimport {Keyset, i18n} from '../../i18n';\nimport {Close} from '../../icons/Close';\nimport {SearchIcon} from '../../icons/SearchIcon';\nimport {ClassNameProps} from '../../models/common';\nimport {block} from '../../utils/cn';\n\nimport './Search.scss';\n\nconst b = block('search');\n\nexport type SearchSize = 's' | 'm';\n\ninterface SearchProps extends ClassNameProps {\n value?: string;\n initialValue: string;\n onSubmit: (value: string) => void;\n debounce?: number;\n placeholder?: string;\n size?: SearchSize;\n autoFocus?: boolean;\n className?: string;\n}\n\nconst SEARCH_ICON_SIZE = 16;\nconst CLOSE_ICON_SIZE = 12;\nconst AUTOFOCUS_TIMEOUT = 0;\n\n/**\n * Search component, placed on blog main page,\n * based on TextInput from uikit\n *\n * @returns {JSX|null}\n */\nexport const Search = ({\n className,\n initialValue,\n onSubmit,\n debounce = 300,\n placeholder = i18n(Keyset.Search),\n size = 'm',\n autoFocus = false,\n value: externalValue,\n}: SearchProps) => {\n const handleChange = lodashDebounce(onSubmit, debounce);\n\n const [value, setValue] = React.useState<string>(initialValue);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const isIPhone = useIsIPhone();\n\n React.useEffect(() => {\n if (externalValue !== undefined) {\n setValue(externalValue);\n }\n }, [externalValue]);\n\n React.useEffect(() => {\n if (autoFocus && !isIPhone) {\n setTimeout(() => inputRef?.current?.focus({preventScroll: true}), AUTOFOCUS_TIMEOUT);\n }\n }, [autoFocus, inputRef, isIPhone]);\n\n const rightContent = React.useMemo(() => {\n const iconData = value ? Close : SearchIcon;\n const iconSize = value ? CLOSE_ICON_SIZE : SEARCH_ICON_SIZE;\n\n const handleClick = () => {\n if (value) {\n handleChange.cancel();\n setValue('');\n onSubmit('');\n inputRef.current?.focus();\n }\n };\n\n return (\n <button\n className={b('input-icon')}\n onClick={handleClick}\n aria-label={value ? i18n(Keyset.ClearAction) : undefined}\n aria-hidden={!value}\n >\n <Icon size={iconSize} data={iconData} />\n </button>\n );\n }, [handleChange, onSubmit, value]);\n\n return (\n <div className={b({size}, className)}>\n <TextInput\n className={b('search-suggest')}\n value={value}\n onUpdate={(query) => {\n setValue(query);\n handleChange(query);\n }}\n placeholder={placeholder}\n size={size === 'm' ? 'xl' : 'l'}\n controlRef={inputRef}\n view=\"clear\"\n controlProps={{\n className: b('search-suggest-control'),\n }}\n endContent={rightContent}\n />\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"Search.js","sourceRoot":"../../../../src","sources":["components/Search/Search.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {Icon, TextInput} from '@gravity-ui/uikit';\nimport lodashDebounce from 'lodash/debounce';\n\nimport {useIsIPhone} from '../../hooks/useIsIPhone';\nimport {Keyset, i18n} from '../../i18n';\nimport {Close} from '../../icons/Close';\nimport {SearchIcon} from '../../icons/SearchIcon';\nimport {ClassNameProps} from '../../models/common';\nimport {block} from '../../utils/cn';\n\nimport './Search.scss';\n\nconst b = block('search');\n\nexport type SearchSize = 's' | 'm';\n\ninterface SearchProps extends ClassNameProps {\n value?: string;\n initialValue: string;\n onSubmit: (value: string) => void;\n debounce?: number;\n placeholder?: string;\n size?: SearchSize;\n autoFocus?: boolean;\n className?: string;\n}\n\nconst SEARCH_ICON_SIZE = 16;\nconst CLOSE_ICON_SIZE = 12;\nconst AUTOFOCUS_TIMEOUT = 0;\n\n/**\n * Search component, placed on blog main page,\n * based on TextInput from uikit\n *\n * @returns {JSX|null}\n */\nexport const Search = ({\n className,\n initialValue,\n onSubmit,\n debounce = 300,\n placeholder = i18n(Keyset.Search),\n size = 'm',\n autoFocus = false,\n value: externalValue,\n}: SearchProps) => {\n const handleChange = lodashDebounce(onSubmit, debounce);\n\n const [value, setValue] = React.useState<string>(initialValue);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const isIPhone = useIsIPhone();\n\n React.useEffect(() => {\n if (externalValue !== undefined) {\n setValue(externalValue);\n }\n }, [externalValue]);\n\n React.useEffect(() => {\n if (autoFocus && !isIPhone) {\n setTimeout(() => inputRef?.current?.focus({preventScroll: true}), AUTOFOCUS_TIMEOUT);\n }\n }, [autoFocus, inputRef, isIPhone]);\n\n const rightContent = React.useMemo(() => {\n const iconData = value ? Close : SearchIcon;\n const iconSize = value ? CLOSE_ICON_SIZE : SEARCH_ICON_SIZE;\n\n const handleClick = () => {\n if (value) {\n handleChange.cancel();\n setValue('');\n onSubmit('');\n inputRef.current?.focus();\n }\n };\n\n return (\n <button\n className={b('input-icon')}\n onClick={handleClick}\n aria-label={value ? i18n(Keyset.ClearAction) : undefined}\n aria-hidden={!value}\n >\n <Icon size={iconSize} data={iconData} />\n </button>\n );\n }, [handleChange, onSubmit, value]);\n\n return (\n <div className={b({size}, className)}>\n <TextInput\n className={b('search-suggest')}\n value={value}\n onUpdate={(query) => {\n setValue(query);\n handleChange(query);\n }}\n placeholder={placeholder}\n size={size === 'm' ? 'xl' : 'l'}\n controlRef={inputRef}\n view=\"clear\"\n controlProps={{\n className: b('search-suggest-control'),\n }}\n endContent={rightContent}\n />\n </div>\n );\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { ShareOptions } from '@gravity-ui/components';
3
- import { CustomConfig, HeaderBreadCrumbsProps, NavigationData, PageConstructorProviderProps, PageContent } from '@gravity-ui/page-constructor';
3
+ import { CustomConfig, HeaderBreadCrumbsProps, NavigationData, PageConstructorProps, PageConstructorProviderProps, PageContent } from '@gravity-ui/page-constructor';
4
4
  import { MetaProps, PostData, ToggleLikeCallbackType } from "../../models/common.js";
5
5
  export interface BlogPostPageProps {
6
6
  suggestedPosts: PostData[];
@@ -14,10 +14,11 @@ export interface BlogPostPageProps {
14
14
  post: PostData;
15
15
  settings?: PageConstructorProviderProps;
16
16
  navigation?: NavigationData;
17
+ microdata?: PageConstructorProps['microdata'];
17
18
  custom?: CustomConfig;
18
19
  shareOptions?: ShareOptions[];
19
20
  isSignedInUser?: boolean;
20
21
  onClickSignIn?: React.EventHandler<React.SyntheticEvent>;
21
22
  breadcrumbs?: HeaderBreadCrumbsProps;
22
23
  }
23
- export declare const BlogPostPage: ({ metaData, suggestedPosts, likes, content, post, settings, navigation, custom, shareOptions, isSignedInUser, onClickSignIn, breadcrumbs, }: BlogPostPageProps) => import("react/jsx-runtime").JSX.Element;
24
+ export declare const BlogPostPage: ({ metaData, suggestedPosts, likes, content, post, settings, microdata, navigation, custom, shareOptions, isSignedInUser, onClickSignIn, breadcrumbs, }: BlogPostPageProps) => import("react/jsx-runtime").JSX.Element;
@@ -13,7 +13,7 @@ const PostPageContext_1 = require("../../contexts/PostPageContext.js");
13
13
  const useExtendedComponentMap_1 = require("../../hooks/useExtendedComponentMap.js");
14
14
  const useLikes_1 = require("../../hooks/useLikes.js");
15
15
  const SettingsContext_1 = require("../../contexts/SettingsContext.js");
16
- const BlogPostPage = ({ metaData, suggestedPosts, likes, content, post, settings, navigation, custom, shareOptions, isSignedInUser = false, onClickSignIn, breadcrumbs, }) => {
16
+ const BlogPostPage = ({ metaData, suggestedPosts, likes, content, post, settings, microdata, navigation, custom, shareOptions, isSignedInUser = false, onClickSignIn, breadcrumbs, }) => {
17
17
  const { isAnimationEnabled } = React.useContext(SettingsContext_1.SettingsContext);
18
18
  const { hasUserLike, likesCount, handleLike } = (0, useLikes_1.useLikes)({
19
19
  hasLike: likes === null || likes === void 0 ? void 0 : likes.hasUserLike,
@@ -41,7 +41,7 @@ const BlogPostPage = ({ metaData, suggestedPosts, likes, content, post, settings
41
41
  : undefined,
42
42
  shareOptions,
43
43
  breadcrumbs,
44
- }, children: (0, jsx_runtime_1.jsxs)(page_constructor_1.PageConstructorProvider, Object.assign({}, settings, { projectSettings: Object.assign(Object.assign({}, ((settings === null || settings === void 0 ? void 0 : settings.projectSettings) || {})), { isAnimationEnabled }), children: [metaData ? (0, jsx_runtime_1.jsx)(MetaWrapper_1.MetaWrapper, Object.assign({}, metaData)) : null, (0, jsx_runtime_1.jsx)(page_constructor_1.PageConstructor, { content: content, custom: actualComponentMap, navigation: navigation })] })) }), (0, jsx_runtime_1.jsx)(PromptSignIn_1.PromptSignIn, Object.assign({}, promptSignInProps))] }));
44
+ }, children: (0, jsx_runtime_1.jsxs)(page_constructor_1.PageConstructorProvider, Object.assign({}, settings, { projectSettings: Object.assign(Object.assign({}, ((settings === null || settings === void 0 ? void 0 : settings.projectSettings) || {})), { isAnimationEnabled }), children: [metaData ? (0, jsx_runtime_1.jsx)(MetaWrapper_1.MetaWrapper, Object.assign({}, metaData)) : null, (0, jsx_runtime_1.jsx)(page_constructor_1.PageConstructor, { content: content, custom: actualComponentMap, navigation: navigation, microdata: microdata })] })) }), (0, jsx_runtime_1.jsx)(PromptSignIn_1.PromptSignIn, Object.assign({}, promptSignInProps))] }));
45
45
  };
46
46
  exports.BlogPostPage = BlogPostPage;
47
47
  //# sourceMappingURL=BlogPostPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlogPostPage.js","sourceRoot":"../../../../src","sources":["containers/BlogPostPage/BlogPostPage.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAG/B,mEAQsC;AAEtC,6EAAqE;AACrE,gFAAwE;AACxE,sGAA8F;AAC9F,iEAAyD;AACzD,uEAA+D;AAC/D,oFAA4E;AAC5E,sDAA8C;AAE9C,uEAA+D;AAwBxD,MAAM,YAAY,GAAG,CAAC,EACzB,QAAQ,EACR,cAAc,EACd,KAAK,EACL,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,MAAM,EACN,YAAY,EACZ,cAAc,GAAG,KAAK,EACtB,aAAa,EACb,WAAW,GACK,EAAE,EAAE;IACpB,MAAM,EAAC,kBAAkB,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,iCAAe,CAAC,CAAC;IAC/D,MAAM,EAAC,WAAW,EAAE,UAAU,EAAE,UAAU,EAAC,GAAG,IAAA,mBAAQ,EAAC;QACnD,OAAO,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW;QAC3B,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;QACxB,kBAAkB,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;QACrC,MAAM,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,MAAM,KAAwC,IAAA,2CAAoB,EAAC,aAAa,CAAC,EAA3E,EAAC,aAAa,OAA6D,EAAxD,iBAAiB,sBAApC,iBAAqC,CAAsC,CAAC;IAElF,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAClC,GAAG,EAAE,CAAC,CAAC;QACH,UAAU,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;QAC7B,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;QACxB,cAAc;QACd,aAAa;KAChB,CAAC,EACF,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CACzC,CAAC;IAEF,MAAM,kBAAkB,GAAG,IAAA,iDAAuB,EAAC,MAAM,CAAC,CAAC;IAE3D,OAAO,CACH,wBAAC,2BAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,gBAAgB,aAC1C,uBAAC,iCAAe,CAAC,QAAQ,IACrB,KAAK,EAAE;oBACH,IAAI;oBACJ,cAAc;oBACd,KAAK,EAAE,KAAK;wBACR,CAAC,CAAC;4BACI,cAAc,EAAE,UAAU;4BAC1B,WAAW;4BACX,UAAU;yBACb;wBACH,CAAC,CAAC,SAAS;oBACf,YAAY;oBACZ,WAAW;iBACd,YAED,wBAAC,0CAAuB,oBAChB,QAAQ,IACZ,eAAe,kCAAM,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,KAAI,EAAE,CAAC,KAAE,kBAAkB,gBAEzE,QAAQ,CAAC,CAAC,CAAC,uBAAC,yBAAW,oBAAK,QAAQ,EAAI,CAAC,CAAC,CAAC,IAAI,EAChD,uBAAC,kCAAe,IACZ,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,UAAU,GACxB,KACoB,GACH,EAC3B,uBAAC,2BAAY,oBAAK,iBAAiB,EAAI,IACnB,CAC3B,CAAC;AACN,CAAC,CAAC;AApEW,QAAA,YAAY,gBAoEvB","sourcesContent":["import * as React from 'react';\n\nimport {ShareOptions} from '@gravity-ui/components';\nimport {\n CustomConfig,\n HeaderBreadCrumbsProps,\n NavigationData,\n PageConstructor,\n PageConstructorProvider,\n PageConstructorProviderProps,\n PageContent,\n} from '@gravity-ui/page-constructor';\n\nimport {MetaWrapper} from '../../components/MetaWrapper/MetaWrapper';\nimport {PromptSignIn} from '../../components/PromptSignIn/PromptSignIn';\nimport {usePromptSignInProps} from '../../components/PromptSignIn/hooks/usePromptSignInProps';\nimport {LikesContext} from '../../contexts/LikesContext';\nimport {PostPageContext} from '../../contexts/PostPageContext';\nimport {useExtendedComponentMap} from '../../hooks/useExtendedComponentMap';\nimport {useLikes} from '../../hooks/useLikes';\nimport {MetaProps, PostData, ToggleLikeCallbackType} from '../../models/common';\nimport {SettingsContext} from '../../contexts/SettingsContext';\n\nimport './BlogPostPage.scss';\n\nexport interface BlogPostPageProps {\n suggestedPosts: PostData[];\n metaData?: MetaProps;\n likes?: {\n hasUserLike?: boolean;\n likesCount?: number;\n toggleLike?: ToggleLikeCallbackType;\n };\n content: PageContent;\n post: PostData;\n settings?: PageConstructorProviderProps;\n navigation?: NavigationData;\n custom?: CustomConfig;\n shareOptions?: ShareOptions[];\n isSignedInUser?: boolean;\n // Required to enable Sign In on Post like\n onClickSignIn?: React.EventHandler<React.SyntheticEvent>;\n breadcrumbs?: HeaderBreadCrumbsProps;\n}\n\nexport const BlogPostPage = ({\n metaData,\n suggestedPosts,\n likes,\n content,\n post,\n settings,\n navigation,\n custom,\n shareOptions,\n isSignedInUser = false,\n onClickSignIn,\n breadcrumbs,\n}: BlogPostPageProps) => {\n const {isAnimationEnabled} = React.useContext(SettingsContext);\n const {hasUserLike, likesCount, handleLike} = useLikes({\n hasLike: likes?.hasUserLike,\n count: likes?.likesCount,\n toggleLikeCallback: likes?.toggleLike,\n postId: post?.blogPostId,\n });\n\n const {requireSignIn, ...promptSignInProps} = usePromptSignInProps(onClickSignIn);\n\n const likesContextData = React.useMemo(\n () => ({\n toggleLike: likes?.toggleLike,\n hasLikes: Boolean(likes),\n isSignedInUser,\n requireSignIn,\n }),\n [likes, isSignedInUser, requireSignIn],\n );\n\n const actualComponentMap = useExtendedComponentMap(custom);\n\n return (\n <LikesContext.Provider value={likesContextData}>\n <PostPageContext.Provider\n value={{\n post,\n suggestedPosts,\n likes: likes\n ? {\n handleUserLike: handleLike,\n hasUserLike,\n likesCount,\n }\n : undefined,\n shareOptions,\n breadcrumbs,\n }}\n >\n <PageConstructorProvider\n {...settings}\n projectSettings={{...(settings?.projectSettings || {}), isAnimationEnabled}}\n >\n {metaData ? <MetaWrapper {...metaData} /> : null}\n <PageConstructor\n content={content}\n custom={actualComponentMap}\n navigation={navigation}\n />\n </PageConstructorProvider>\n </PostPageContext.Provider>\n <PromptSignIn {...promptSignInProps} />\n </LikesContext.Provider>\n );\n};\n"]}
1
+ {"version":3,"file":"BlogPostPage.js","sourceRoot":"../../../../src","sources":["containers/BlogPostPage/BlogPostPage.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAG/B,mEASsC;AAEtC,6EAAqE;AACrE,gFAAwE;AACxE,sGAA8F;AAC9F,iEAAyD;AACzD,uEAA+D;AAC/D,oFAA4E;AAC5E,sDAA8C;AAE9C,uEAA+D;AAyBxD,MAAM,YAAY,GAAG,CAAC,EACzB,QAAQ,EACR,cAAc,EACd,KAAK,EACL,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,UAAU,EACV,MAAM,EACN,YAAY,EACZ,cAAc,GAAG,KAAK,EACtB,aAAa,EACb,WAAW,GACK,EAAE,EAAE;IACpB,MAAM,EAAC,kBAAkB,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,iCAAe,CAAC,CAAC;IAC/D,MAAM,EAAC,WAAW,EAAE,UAAU,EAAE,UAAU,EAAC,GAAG,IAAA,mBAAQ,EAAC;QACnD,OAAO,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW;QAC3B,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;QACxB,kBAAkB,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;QACrC,MAAM,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,MAAM,KAAwC,IAAA,2CAAoB,EAAC,aAAa,CAAC,EAA3E,EAAC,aAAa,OAA6D,EAAxD,iBAAiB,sBAApC,iBAAqC,CAAsC,CAAC;IAElF,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAClC,GAAG,EAAE,CAAC,CAAC;QACH,UAAU,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;QAC7B,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;QACxB,cAAc;QACd,aAAa;KAChB,CAAC,EACF,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CACzC,CAAC;IAEF,MAAM,kBAAkB,GAAG,IAAA,iDAAuB,EAAC,MAAM,CAAC,CAAC;IAE3D,OAAO,CACH,wBAAC,2BAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,gBAAgB,aAC1C,uBAAC,iCAAe,CAAC,QAAQ,IACrB,KAAK,EAAE;oBACH,IAAI;oBACJ,cAAc;oBACd,KAAK,EAAE,KAAK;wBACR,CAAC,CAAC;4BACI,cAAc,EAAE,UAAU;4BAC1B,WAAW;4BACX,UAAU;yBACb;wBACH,CAAC,CAAC,SAAS;oBACf,YAAY;oBACZ,WAAW;iBACd,YAED,wBAAC,0CAAuB,oBAChB,QAAQ,IACZ,eAAe,kCAAM,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,KAAI,EAAE,CAAC,KAAE,kBAAkB,gBAEzE,QAAQ,CAAC,CAAC,CAAC,uBAAC,yBAAW,oBAAK,QAAQ,EAAI,CAAC,CAAC,CAAC,IAAI,EAChD,uBAAC,kCAAe,IACZ,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,GACtB,KACoB,GACH,EAC3B,uBAAC,2BAAY,oBAAK,iBAAiB,EAAI,IACnB,CAC3B,CAAC;AACN,CAAC,CAAC;AAtEW,QAAA,YAAY,gBAsEvB","sourcesContent":["import * as React from 'react';\n\nimport {ShareOptions} from '@gravity-ui/components';\nimport {\n CustomConfig,\n HeaderBreadCrumbsProps,\n NavigationData,\n PageConstructor,\n PageConstructorProps,\n PageConstructorProvider,\n PageConstructorProviderProps,\n PageContent,\n} from '@gravity-ui/page-constructor';\n\nimport {MetaWrapper} from '../../components/MetaWrapper/MetaWrapper';\nimport {PromptSignIn} from '../../components/PromptSignIn/PromptSignIn';\nimport {usePromptSignInProps} from '../../components/PromptSignIn/hooks/usePromptSignInProps';\nimport {LikesContext} from '../../contexts/LikesContext';\nimport {PostPageContext} from '../../contexts/PostPageContext';\nimport {useExtendedComponentMap} from '../../hooks/useExtendedComponentMap';\nimport {useLikes} from '../../hooks/useLikes';\nimport {MetaProps, PostData, ToggleLikeCallbackType} from '../../models/common';\nimport {SettingsContext} from '../../contexts/SettingsContext';\n\nimport './BlogPostPage.scss';\n\nexport interface BlogPostPageProps {\n suggestedPosts: PostData[];\n metaData?: MetaProps;\n likes?: {\n hasUserLike?: boolean;\n likesCount?: number;\n toggleLike?: ToggleLikeCallbackType;\n };\n content: PageContent;\n post: PostData;\n settings?: PageConstructorProviderProps;\n navigation?: NavigationData;\n microdata?: PageConstructorProps['microdata'];\n custom?: CustomConfig;\n shareOptions?: ShareOptions[];\n isSignedInUser?: boolean;\n // Required to enable Sign In on Post like\n onClickSignIn?: React.EventHandler<React.SyntheticEvent>;\n breadcrumbs?: HeaderBreadCrumbsProps;\n}\n\nexport const BlogPostPage = ({\n metaData,\n suggestedPosts,\n likes,\n content,\n post,\n settings,\n microdata,\n navigation,\n custom,\n shareOptions,\n isSignedInUser = false,\n onClickSignIn,\n breadcrumbs,\n}: BlogPostPageProps) => {\n const {isAnimationEnabled} = React.useContext(SettingsContext);\n const {hasUserLike, likesCount, handleLike} = useLikes({\n hasLike: likes?.hasUserLike,\n count: likes?.likesCount,\n toggleLikeCallback: likes?.toggleLike,\n postId: post?.blogPostId,\n });\n\n const {requireSignIn, ...promptSignInProps} = usePromptSignInProps(onClickSignIn);\n\n const likesContextData = React.useMemo(\n () => ({\n toggleLike: likes?.toggleLike,\n hasLikes: Boolean(likes),\n isSignedInUser,\n requireSignIn,\n }),\n [likes, isSignedInUser, requireSignIn],\n );\n\n const actualComponentMap = useExtendedComponentMap(custom);\n\n return (\n <LikesContext.Provider value={likesContextData}>\n <PostPageContext.Provider\n value={{\n post,\n suggestedPosts,\n likes: likes\n ? {\n handleUserLike: handleLike,\n hasUserLike,\n likesCount,\n }\n : undefined,\n shareOptions,\n breadcrumbs,\n }}\n >\n <PageConstructorProvider\n {...settings}\n projectSettings={{...(settings?.projectSettings || {}), isAnimationEnabled}}\n >\n {metaData ? <MetaWrapper {...metaData} /> : null}\n <PageConstructor\n content={content}\n custom={actualComponentMap}\n navigation={navigation}\n microdata={microdata}\n />\n </PageConstructorProvider>\n </PostPageContext.Provider>\n <PromptSignIn {...promptSignInProps} />\n </LikesContext.Provider>\n );\n};\n"]}
@@ -27,7 +27,7 @@ export type LayoutProps = {
27
27
  mobileOrder?: string;
28
28
  children: React.ReactElement[];
29
29
  } & PaddingsYFMProps;
30
- export type MediaProps = ClassNameProps & PaddingsYFMProps & Partial<Pick<PCMediaProps, 'youtube' | 'previewImg' | 'image' | 'video' | 'dataLens'>> & {
30
+ export type MediaProps = ClassNameProps & PaddingsYFMProps & Partial<Pick<PCMediaProps, 'youtube' | 'previewImg' | 'image' | 'video' | 'dataLens' | 'videoIframe' | 'videoMicrodata'>> & {
31
31
  text?: string;
32
32
  };
33
33
  export type MetaProps = QAProps & {
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.js","sourceRoot":"../../../src","sources":["models/blocks.ts"],"names":[],"mappings":"","sourcesContent":["import * as React from 'react';\n\nimport {\n ContentBlockProps,\n FormBlockData,\n HeaderBlockProps,\n MediaProps as PCMediaProps,\n TextTheme,\n} from '@gravity-ui/page-constructor';\n\nimport {BlockType, ClassNameProps, PostData, QAProps} from './common';\nimport {PaddingsYFMProps} from './paddings';\n\n// blocks props\nexport type AuthorProps = ClassNameProps & {\n authorId: number | string;\n image: string;\n} & PaddingsYFMProps &\n QAProps;\n\nexport type BannerProps = ContentBlockProps &\n QAProps & {\n color?: string;\n image?: string;\n imageSize?: 's' | 'm';\n } & PaddingsYFMProps;\n\nexport type ColoredTextProps = ContentBlockProps &\n QAProps & {\n background?: {\n color?: string;\n image?: string;\n altText?: string;\n };\n } & PaddingsYFMProps;\n\nexport type CTAProps = QAProps & {\n items: Array<ContentBlockProps>;\n} & PaddingsYFMProps;\n\nexport type HeaderProps = HeaderBlockProps & PaddingsYFMProps;\n\nexport type LayoutProps = {\n fullWidth?: boolean;\n mobileOrder?: string;\n children: React.ReactElement[];\n} & PaddingsYFMProps;\n\nexport type MediaProps = ClassNameProps &\n PaddingsYFMProps &\n Partial<Pick<PCMediaProps, 'youtube' | 'previewImg' | 'image' | 'video' | 'dataLens'>> & {\n text?: string;\n };\n\nexport type MetaProps = QAProps & {\n locale: string;\n theme?: TextTheme;\n} & PaddingsYFMProps;\n\nexport type SuggestProps = ClassNameProps & {\n posts: PostData[];\n} & PaddingsYFMProps;\n\nexport type YFMProps = {\n text: string;\n} & PaddingsYFMProps &\n QAProps;\n\nexport type FeedProps = {\n image: string;\n};\n\nexport type FormProps = {\n formData: FormBlockData;\n border?: 'shadow' | 'line' | 'none';\n} & PaddingsYFMProps &\n QAProps;\n\n// blocks models\nexport type AuthorBlockModel = {\n type: BlockType.Author;\n} & AuthorProps;\n\nexport type BannerBlockModel = {\n type: BlockType.Banner;\n} & BannerProps;\n\nexport type ColoredTextBlockModel = {\n type: BlockType.ColoredText;\n} & ColoredTextProps;\n\nexport type CTABlockModel = {\n type: BlockType.CTA;\n} & CTAProps;\n\nexport type HeaderBlockModel = {\n type: BlockType.Header;\n} & HeaderProps;\n\nexport type LayoutBlockModel = {\n type: BlockType.Layout;\n} & LayoutProps;\n\nexport type MediaBlockModel = {\n type: BlockType.Media;\n} & MediaProps;\n\nexport type MetaBlockModel = {\n type: BlockType.Meta;\n} & MetaProps;\n\nexport type SuggestBlockModel = {\n type: BlockType.Suggest;\n} & SuggestProps;\n\nexport type YFMBlockModel = {\n type: BlockType.YFM;\n} & YFMProps;\n\nexport type FeedBlockModel = {\n type: BlockType.Feed;\n} & FeedProps;\n\nexport type FormBlockModel = {\n type: BlockType.Form;\n} & FormProps;\n\nexport type BlockModel =\n | AuthorBlockModel\n | BannerBlockModel\n | ColoredTextBlockModel\n | CTABlockModel\n | HeaderBlockModel\n | LayoutBlockModel\n | MediaBlockModel\n | MetaBlockModel\n | SuggestBlockModel\n | YFMBlockModel\n | FeedBlockModel;\n\nexport type Block = BlockModel & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [x: string]: any;\n};\n"]}
1
+ {"version":3,"file":"blocks.js","sourceRoot":"../../../src","sources":["models/blocks.ts"],"names":[],"mappings":"","sourcesContent":["import * as React from 'react';\n\nimport {\n ContentBlockProps,\n FormBlockData,\n HeaderBlockProps,\n MediaProps as PCMediaProps,\n TextTheme,\n} from '@gravity-ui/page-constructor';\n\nimport {BlockType, ClassNameProps, PostData, QAProps} from './common';\nimport {PaddingsYFMProps} from './paddings';\n\n// blocks props\nexport type AuthorProps = ClassNameProps & {\n authorId: number | string;\n image: string;\n} & PaddingsYFMProps &\n QAProps;\n\nexport type BannerProps = ContentBlockProps &\n QAProps & {\n color?: string;\n image?: string;\n imageSize?: 's' | 'm';\n } & PaddingsYFMProps;\n\nexport type ColoredTextProps = ContentBlockProps &\n QAProps & {\n background?: {\n color?: string;\n image?: string;\n altText?: string;\n };\n } & PaddingsYFMProps;\n\nexport type CTAProps = QAProps & {\n items: Array<ContentBlockProps>;\n} & PaddingsYFMProps;\n\nexport type HeaderProps = HeaderBlockProps & PaddingsYFMProps;\n\nexport type LayoutProps = {\n fullWidth?: boolean;\n mobileOrder?: string;\n children: React.ReactElement[];\n} & PaddingsYFMProps;\n\nexport type MediaProps = ClassNameProps &\n PaddingsYFMProps &\n Partial<\n Pick<\n PCMediaProps,\n | 'youtube'\n | 'previewImg'\n | 'image'\n | 'video'\n | 'dataLens'\n | 'videoIframe'\n | 'videoMicrodata'\n >\n > & {\n text?: string;\n };\n\nexport type MetaProps = QAProps & {\n locale: string;\n theme?: TextTheme;\n} & PaddingsYFMProps;\n\nexport type SuggestProps = ClassNameProps & {\n posts: PostData[];\n} & PaddingsYFMProps;\n\nexport type YFMProps = {\n text: string;\n} & PaddingsYFMProps &\n QAProps;\n\nexport type FeedProps = {\n image: string;\n};\n\nexport type FormProps = {\n formData: FormBlockData;\n border?: 'shadow' | 'line' | 'none';\n} & PaddingsYFMProps &\n QAProps;\n\n// blocks models\nexport type AuthorBlockModel = {\n type: BlockType.Author;\n} & AuthorProps;\n\nexport type BannerBlockModel = {\n type: BlockType.Banner;\n} & BannerProps;\n\nexport type ColoredTextBlockModel = {\n type: BlockType.ColoredText;\n} & ColoredTextProps;\n\nexport type CTABlockModel = {\n type: BlockType.CTA;\n} & CTAProps;\n\nexport type HeaderBlockModel = {\n type: BlockType.Header;\n} & HeaderProps;\n\nexport type LayoutBlockModel = {\n type: BlockType.Layout;\n} & LayoutProps;\n\nexport type MediaBlockModel = {\n type: BlockType.Media;\n} & MediaProps;\n\nexport type MetaBlockModel = {\n type: BlockType.Meta;\n} & MetaProps;\n\nexport type SuggestBlockModel = {\n type: BlockType.Suggest;\n} & SuggestProps;\n\nexport type YFMBlockModel = {\n type: BlockType.YFM;\n} & YFMProps;\n\nexport type FeedBlockModel = {\n type: BlockType.Feed;\n} & FeedProps;\n\nexport type FormBlockModel = {\n type: BlockType.Form;\n} & FormProps;\n\nexport type BlockModel =\n | AuthorBlockModel\n | BannerBlockModel\n | ColoredTextBlockModel\n | CTABlockModel\n | HeaderBlockModel\n | LayoutBlockModel\n | MediaBlockModel\n | MetaBlockModel\n | SuggestBlockModel\n | YFMBlockModel\n | FeedBlockModel;\n\nexport type Block = BlockModel & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [x: string]: any;\n};\n"]}
@@ -569,6 +569,9 @@ export declare const schemasForCustom: {
569
569
  status: {
570
570
  type: string;
571
571
  };
572
+ centered: {
573
+ type: string;
574
+ };
572
575
  paddingTop: {
573
576
  type: string;
574
577
  enum: string[];
@@ -5,10 +5,10 @@ exports.getAbsolutePath = getAbsolutePath;
5
5
  exports.getBreadcrumbs = getBreadcrumbs;
6
6
  const tslib_1 = require("tslib");
7
7
  const url_1 = require("url");
8
- const camelCase_1 = tslib_1.__importDefault(require("lodash/camelCase"));
9
- const debounce_1 = tslib_1.__importDefault(require("lodash/debounce"));
10
- const flatten_1 = tslib_1.__importDefault(require("lodash/flatten"));
11
- const memoize_1 = tslib_1.__importDefault(require("lodash/memoize"));
8
+ const camelCase_1 = tslib_1.__importDefault(require("lodash/camelCase.js"));
9
+ const debounce_1 = tslib_1.__importDefault(require("lodash/debounce.js"));
10
+ const flatten_1 = tslib_1.__importDefault(require("lodash/flatten.js"));
11
+ const memoize_1 = tslib_1.__importDefault(require("lodash/memoize.js"));
12
12
  const constants_1 = require("../blocks/constants.js");
13
13
  const i18n_1 = require("../i18n/index.js");
14
14
  const utils_1 = require("../counters/utils.js");
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"../../../src","sources":["utils/common.ts"],"names":[],"mappings":";;;AAoCA,0CAaC;AAmED,wCAcC;;AAlID,6BAAkC;AAQlC,yEAAyC;AACzC,uEAAuC;AACvC,qEAAqC;AACrC,qEAAqC;AAErC,sDAM6B;AAE7B,2CAAqC;AAErC,gDAAmD;AAEnD,MAAM,kBAAkB,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAWlF,SAAgB,eAAe,CAAC,MAA0B,EAAE,GAAY;IACpE,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC9B,OAAO,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,WAAK,EAAC,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,OAAO,IAAA,YAAM,kCACN,MAAM,KACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,OAAO,EACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAC5C,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAC9C,CAAC;AACP,CAAC;AAEM,MAAM,mBAAmB,GAAG,CAAC,QAAe,EAAE,EAAE,EAAE;IACrD,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;IAE3C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC3C,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACxB,CAAC,CAAC;AARW,QAAA,mBAAmB,uBAQ9B;AAEK,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,OAAgB,EAAE,EAAE;IAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO;IACX,CAAC;IAED,UAAU,CACN,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,EAAC,QAAQ,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,EAClF,CAAC,CACJ,CAAC;AACN,CAAC,CAAC;AAfW,QAAA,YAAY,gBAevB;AAIW,QAAA,OAAO,GAAG,IAAA,iBAAO,EAAC,CAAC,IAAW,EAAE,QAAgB,EAAE,EAAE;IAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAc,EAAE,EAAE;YAAlB,EAAC,IAAI,OAAS,EAAJ,GAAG,sBAAb,QAAc,CAAD;QAC1B,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QAC1C,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE9B,OAAO,gCACA,GAAG,KACN,EAAE,EAAE,IAAI,EACR,GAAG,EAAE,GAAG,QAAQ,IAAI,WAAW,EAAE,GAChB,CAAC;IAC1B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,CAAC,MAAuB,EAAE,EAAE,CAAC,MAAM,CAAC;AAEpC,QAAA,cAAc,GAAG,IAAA,kBAAQ,EAAC,CAAC,MAAuB,EAAE,WAAoB,EAAE,EAAE;IACrF,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC,EAAE,GAAG,CAAC,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,EAA0D,EAAE,EAAE;QAA9D,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,OAAoC,EAA/B,WAAW,sBAAtC,6BAAuC,CAAD;IAAyB,OAAA,iCAC3F,WAAW,KACd,IAAI,EAAE,IAAI,IAAI,gCAAoB,EAClC,QAAQ,EAAE,QAAQ,IAAI,qCAAyB,EAC/C,KAAK,EAAE,KAAK,IAAI,iCAAqB,IACvC,CAAA;CAAA,CAAC;AALU,QAAA,kBAAkB,sBAK5B;AAOI,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAE,EAAE;IAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,OAAO,GAAG,MAAM,OAAO,CAAC;AAC5B,CAAC,CAAC;AAHW,QAAA,WAAW,eAGtB;AAEF,SAAgB,cAAc,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAsB;IAChE,MAAM,WAAW,GAA2B;QACxC,KAAK,EAAE,CAAC,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,aAAM,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAC,CAAC;QAC7D,KAAK,EAAE,OAAO;KACjB,CAAC;IAEF,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE,CAAC;QACf,MAAM,aAAa,GAAG,IAAA,eAAO,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC7B,sBAAsB;QACtB,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,WAAW,CAAC;AACvB,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,MAA4B,EAAE,EAAE;IACtD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC,CAAC;AAEK,MAAM,wBAAwB,GAAG,CACpC,cAAmC,EACnC,eAAqC,EACvC,EAAE;IACA,MAAM,aAAa,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAE1D,OAAO,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACjD,CAAC,CAAC;AARW,QAAA,wBAAwB,4BAQnC;AAEK,MAAM,kBAAkB,GAAG,CAAC,WAAkB,EAAE,UAAmB,EAAmB,EAAE;IAC3F,MAAM,WAAW,GAAG,IAAA,2BAAmB,EAAC,WAAW,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;IAClD,MAAM,IAAI,GAAG,UAAU,IAAI,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,wBAAY,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,iCAAqB,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC;IAC1D,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;IACtD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC;IAE5D,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAC,CAAC;AAC1E,CAAC,CAAC;AAVW,QAAA,kBAAkB,sBAU7B;AAEK,MAAM,kBAAkB,GAAG,CAAC,WAAmB,EAAE,EAAE;;IACtD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,CAAA,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,qBAAqB,EAAE,0CAAE,CAAC,KAAI,CAAC,CAAC;IAE5D,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACR,IAAA,oBAAY,EAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;AACL,CAAC,CAAC;AAPW,QAAA,kBAAkB,sBAO7B;AAEK,MAAM,eAAe,GAAG,CAAC,EAAW,EAAE,GAAG,UAAsC,EAAE,EAAE;IACtF,MAAM,UAAU,GAA2B,EAAE,CAAC;IAE9C,IAAI,EAAE,EAAE,CAAC;QACL,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAA,iBAAO,EAAC,UAAU,CAAC,CAAC,CAAC;QAE5D,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACjB,UAAU,CAAC,IAAA,mBAAS,EAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAdW,QAAA,eAAe,mBAc1B;AAQK,MAAM,qBAAqB,GAAG,CAAC,EAClC,IAAI,EACJ,OAAO,GAAG,wBAAgB,CAAC,IAAI,EAC/B,OAAO,GAAG,EAAE,GACY,EAAkB,EAAE,CAAC,iCAC1C,OAAO,KACV,IAAI,EACJ,QAAQ,EAAE;QACN,OAAO,EAAE,CAAC,OAAO,CAAC;KACrB,IACH,CAAC;AAVU,QAAA,qBAAqB,yBAU/B","sourcesContent":["import {format, parse} from 'url';\n\nimport {\n AnalyticsEvent,\n AnalyticsEventsProp,\n ContentBlockProps,\n HeaderBreadCrumbsProps,\n} from '@gravity-ui/page-constructor';\nimport camelCase from 'lodash/camelCase';\nimport debounce from 'lodash/debounce';\nimport flatten from 'lodash/flatten';\nimport memoize from 'lodash/memoize';\n\nimport {\n CONTENT_DEFAULT_COL_SIZES,\n CONTENT_DEFAULT_SIZE,\n CONTENT_DEFAULT_THEME,\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n} from '../blocks/constants';\nimport {RouterContextProps} from '../contexts/RouterContext';\nimport {Keyset, i18n} from '../i18n';\nimport {GetPostsRequest, Query, Tag} from '../models/common';\nimport {AnalyticsCounter} from '../counters/utils';\n\nconst QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];\n\nexport interface QueryParam {\n name: string;\n value?: string | number | null;\n}\n\nexport interface RouterActionOptions {\n shallow?: boolean;\n}\n\nexport function getAbsolutePath(router: RouterContextProps, url?: string) {\n if (!router || !router.pathname) {\n return url ?? '';\n }\n\n const parsed = parse(url || router.as || '');\n\n return format({\n ...parsed,\n protocol: parsed.protocol || 'https',\n hostname: parsed.hostname || router.hostname,\n pathname: parsed.pathname || router.pathname,\n });\n}\n\nexport const getPageSearchParams = (query: Query = {}) => {\n const searchParams = new URLSearchParams();\n\n Object.entries(query).forEach(([key, value]) => {\n searchParams.set(key, String(value));\n });\n\n return searchParams;\n};\n\nexport const scrollToHash = (hash: string, browser?: string) => {\n if (!hash) {\n return;\n }\n\n const element = document.getElementById(hash);\n\n if (!element) {\n return;\n }\n\n setTimeout(\n () => element.scrollIntoView({behavior: browser === 'Yandex' ? 'auto' : 'smooth'}),\n 0,\n );\n};\n\ntype CloudListTagStub = {};\n\nexport const getTags = memoize((tags: Tag[], blogPath: string) => {\n return tags.map(({slug, ...tag}) => {\n const queryParams = new URLSearchParams();\n queryParams.set('tags', slug);\n\n return {\n ...tag,\n id: slug,\n url: `${blogPath}?${queryParams}`,\n } as CloudListTagStub;\n });\n});\n\nconst stub = (postId: number | string) => postId;\n\nexport const postLikeStatus = debounce((postId: number | string, hasUserLike: boolean) => {\n (hasUserLike ? stub : stub)(postId);\n}, 300);\n\nexport const updateContentSizes = ({size, colSizes, theme, ...contentData}: ContentBlockProps) => ({\n ...contentData,\n size: size || CONTENT_DEFAULT_SIZE,\n colSizes: colSizes || CONTENT_DEFAULT_COL_SIZES,\n theme: theme || CONTENT_DEFAULT_THEME,\n});\n\ntype GetBreadcrumbsProps = {\n tags?: Tag[];\n blogPath: string;\n};\n\nexport const getBlogPath = (pathPrefix: string) => {\n const prefix = pathPrefix ? `/${pathPrefix}` : '';\n return `${prefix}/blog`;\n};\n\nexport function getBreadcrumbs({tags, blogPath}: GetBreadcrumbsProps) {\n const breadcrumbs: HeaderBreadCrumbsProps = {\n items: [{text: i18n(Keyset.TitleBreadcrumbs), url: blogPath}],\n theme: 'light',\n };\n\n if (tags?.length) {\n const localizedTags = getTags(tags, blogPath);\n const tag = localizedTags[0];\n // @ts-ignore todo fix\n breadcrumbs.items.push({text: tag.name, url: tag.url});\n }\n\n return breadcrumbs;\n}\n\nconst getArrayOfEvents = (events?: AnalyticsEventsProp) => {\n if (!events) {\n return [];\n }\n\n if (Array.isArray(events)) {\n return events;\n }\n\n return [events];\n};\n\nexport const getMergedAnalyticsEvents = (\n analyticEvents: AnalyticsEventsProp,\n existringEvents?: AnalyticsEventsProp,\n) => {\n const eventsAsArray = getArrayOfEvents(analyticEvents);\n const existingAsArray = getArrayOfEvents(existringEvents);\n\n return eventsAsArray.concat(existingAsArray);\n};\n\nexport const getFeedQueryParams = (queryString: Query, pageNumber?: number): GetPostsRequest => {\n const queryParams = getPageSearchParams(queryString);\n const tags = queryParams.get('tags') || undefined;\n const page = pageNumber || Number(queryParams.get('page') || DEFAULT_PAGE);\n const perPage = Number(queryParams.get('perPage') || DEFAULT_ROWS_PER_PAGE);\n const savedOnly = queryParams.get('savedOnly') === 'true';\n const search = queryParams.get('search') || undefined;\n const serviceIds = queryParams.get('services') || undefined;\n\n return {tags, page, perPage, savedOnly, search, services: serviceIds};\n};\n\nexport const scrollOnPageChange = (containerId: string) => {\n const cardsContainerEl = document.getElementById(containerId);\n const y = cardsContainerEl?.getBoundingClientRect()?.y || 0;\n\n if (y < 0) {\n scrollToHash(containerId);\n }\n};\n\nexport const getQaAttributes = (qa?: string, ...customKeys: (string | Array<string>)[]) => {\n const attributes: Record<string, string> = {};\n\n if (qa) {\n const keys = QA_ATTRIBUTES_KEYS.concat(flatten(customKeys));\n\n keys.forEach((key) => {\n attributes[camelCase(key)] = `${qa}-${key}`;\n });\n\n attributes.default = qa;\n }\n\n return attributes;\n};\n\ntype PrepareAnalyticsEventArgs = {\n name: string;\n counter?: AnalyticsCounter;\n options?: Record<string, string | number>;\n};\n\nexport const prepareAnalyticsEvent = ({\n name,\n counter = AnalyticsCounter.Main,\n options = {},\n}: PrepareAnalyticsEventArgs): AnalyticsEvent => ({\n ...options,\n name,\n counters: {\n include: [counter],\n },\n});\n"]}
1
+ {"version":3,"file":"common.js","sourceRoot":"../../../src","sources":["utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import {format, parse} from 'url';\n\nimport {\n AnalyticsEvent,\n AnalyticsEventsProp,\n ContentBlockProps,\n HeaderBreadCrumbsProps,\n} from '@gravity-ui/page-constructor';\nimport camelCase from 'lodash/camelCase';\nimport debounce from 'lodash/debounce';\nimport flatten from 'lodash/flatten';\nimport memoize from 'lodash/memoize';\n\nimport {\n CONTENT_DEFAULT_COL_SIZES,\n CONTENT_DEFAULT_SIZE,\n CONTENT_DEFAULT_THEME,\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n} from '../blocks/constants';\nimport {RouterContextProps} from '../contexts/RouterContext';\nimport {Keyset, i18n} from '../i18n';\nimport {GetPostsRequest, Query, Tag} from '../models/common';\nimport {AnalyticsCounter} from '../counters/utils';\n\nconst QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];\n\nexport interface QueryParam {\n name: string;\n value?: string | number | null;\n}\n\nexport interface RouterActionOptions {\n shallow?: boolean;\n}\n\nexport function getAbsolutePath(router: RouterContextProps, url?: string) {\n if (!router || !router.pathname) {\n return url ?? '';\n }\n\n const parsed = parse(url || router.as || '');\n\n return format({\n ...parsed,\n protocol: parsed.protocol || 'https',\n hostname: parsed.hostname || router.hostname,\n pathname: parsed.pathname || router.pathname,\n });\n}\n\nexport const getPageSearchParams = (query: Query = {}) => {\n const searchParams = new URLSearchParams();\n\n Object.entries(query).forEach(([key, value]) => {\n searchParams.set(key, String(value));\n });\n\n return searchParams;\n};\n\nexport const scrollToHash = (hash: string, browser?: string) => {\n if (!hash) {\n return;\n }\n\n const element = document.getElementById(hash);\n\n if (!element) {\n return;\n }\n\n setTimeout(\n () => element.scrollIntoView({behavior: browser === 'Yandex' ? 'auto' : 'smooth'}),\n 0,\n );\n};\n\ntype CloudListTagStub = {};\n\nexport const getTags = memoize((tags: Tag[], blogPath: string) => {\n return tags.map(({slug, ...tag}) => {\n const queryParams = new URLSearchParams();\n queryParams.set('tags', slug);\n\n return {\n ...tag,\n id: slug,\n url: `${blogPath}?${queryParams}`,\n } as CloudListTagStub;\n });\n});\n\nconst stub = (postId: number | string) => postId;\n\nexport const postLikeStatus = debounce((postId: number | string, hasUserLike: boolean) => {\n (hasUserLike ? stub : stub)(postId);\n}, 300);\n\nexport const updateContentSizes = ({size, colSizes, theme, ...contentData}: ContentBlockProps) => ({\n ...contentData,\n size: size || CONTENT_DEFAULT_SIZE,\n colSizes: colSizes || CONTENT_DEFAULT_COL_SIZES,\n theme: theme || CONTENT_DEFAULT_THEME,\n});\n\ntype GetBreadcrumbsProps = {\n tags?: Tag[];\n blogPath: string;\n};\n\nexport const getBlogPath = (pathPrefix: string) => {\n const prefix = pathPrefix ? `/${pathPrefix}` : '';\n return `${prefix}/blog`;\n};\n\nexport function getBreadcrumbs({tags, blogPath}: GetBreadcrumbsProps) {\n const breadcrumbs: HeaderBreadCrumbsProps = {\n items: [{text: i18n(Keyset.TitleBreadcrumbs), url: blogPath}],\n theme: 'light',\n };\n\n if (tags?.length) {\n const localizedTags = getTags(tags, blogPath);\n const tag = localizedTags[0];\n // @ts-ignore todo fix\n breadcrumbs.items.push({text: tag.name, url: tag.url});\n }\n\n return breadcrumbs;\n}\n\nconst getArrayOfEvents = (events?: AnalyticsEventsProp) => {\n if (!events) {\n return [];\n }\n\n if (Array.isArray(events)) {\n return events;\n }\n\n return [events];\n};\n\nexport const getMergedAnalyticsEvents = (\n analyticEvents: AnalyticsEventsProp,\n existringEvents?: AnalyticsEventsProp,\n) => {\n const eventsAsArray = getArrayOfEvents(analyticEvents);\n const existingAsArray = getArrayOfEvents(existringEvents);\n\n return eventsAsArray.concat(existingAsArray);\n};\n\nexport const getFeedQueryParams = (queryString: Query, pageNumber?: number): GetPostsRequest => {\n const queryParams = getPageSearchParams(queryString);\n const tags = queryParams.get('tags') || undefined;\n const page = pageNumber || Number(queryParams.get('page') || DEFAULT_PAGE);\n const perPage = Number(queryParams.get('perPage') || DEFAULT_ROWS_PER_PAGE);\n const savedOnly = queryParams.get('savedOnly') === 'true';\n const search = queryParams.get('search') || undefined;\n const serviceIds = queryParams.get('services') || undefined;\n\n return {tags, page, perPage, savedOnly, search, services: serviceIds};\n};\n\nexport const scrollOnPageChange = (containerId: string) => {\n const cardsContainerEl = document.getElementById(containerId);\n const y = cardsContainerEl?.getBoundingClientRect()?.y || 0;\n\n if (y < 0) {\n scrollToHash(containerId);\n }\n};\n\nexport const getQaAttributes = (qa?: string, ...customKeys: (string | Array<string>)[]) => {\n const attributes: Record<string, string> = {};\n\n if (qa) {\n const keys = QA_ATTRIBUTES_KEYS.concat(flatten(customKeys));\n\n keys.forEach((key) => {\n attributes[camelCase(key)] = `${qa}-${key}`;\n });\n\n attributes.default = qa;\n }\n\n return attributes;\n};\n\ntype PrepareAnalyticsEventArgs = {\n name: string;\n counter?: AnalyticsCounter;\n options?: Record<string, string | number>;\n};\n\nexport const prepareAnalyticsEvent = ({\n name,\n counter = AnalyticsCounter.Main,\n options = {},\n}: PrepareAnalyticsEventArgs): AnalyticsEvent => ({\n ...options,\n name,\n counters: {\n include: [counter],\n },\n});\n"]}
@@ -1,6 +1,6 @@
1
1
  .bc-cta__card {
2
2
  display: flex;
3
- background-color: var(--g-color-base-float);
3
+ background-color: var(--bc-cta-card-bg, var(--pc-color-base-silver));
4
4
  border-radius: var(--bc-border-radius);
5
5
  min-height: 80px;
6
6
  align-content: center;
@@ -561,6 +561,9 @@ export declare const Header: {
561
561
  status: {
562
562
  type: string;
563
563
  };
564
+ centered: {
565
+ type: string;
566
+ };
564
567
  paddingTop: {
565
568
  type: string;
566
569
  enum: string[];
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
3
  import { Icon, TextInput } from '@gravity-ui/uikit';
4
- import lodashDebounce from 'lodash/debounce';
4
+ import lodashDebounce from "lodash/debounce.js";
5
5
  import { useIsIPhone } from "../../hooks/useIsIPhone.js";
6
6
  import { Keyset, i18n } from "../../i18n/index.js";
7
7
  import { Close } from "../../icons/Close.js";
@@ -1 +1 @@
1
- {"version":3,"file":"Search.js","sourceRoot":"../../../../src","sources":["components/Search/Search.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {Icon, TextInput} from '@gravity-ui/uikit';\nimport lodashDebounce from 'lodash/debounce';\n\nimport {useIsIPhone} from '../../hooks/useIsIPhone';\nimport {Keyset, i18n} from '../../i18n';\nimport {Close} from '../../icons/Close';\nimport {SearchIcon} from '../../icons/SearchIcon';\nimport {ClassNameProps} from '../../models/common';\nimport {block} from '../../utils/cn';\n\nimport './Search.scss';\n\nconst b = block('search');\n\nexport type SearchSize = 's' | 'm';\n\ninterface SearchProps extends ClassNameProps {\n value?: string;\n initialValue: string;\n onSubmit: (value: string) => void;\n debounce?: number;\n placeholder?: string;\n size?: SearchSize;\n autoFocus?: boolean;\n className?: string;\n}\n\nconst SEARCH_ICON_SIZE = 16;\nconst CLOSE_ICON_SIZE = 12;\nconst AUTOFOCUS_TIMEOUT = 0;\n\n/**\n * Search component, placed on blog main page,\n * based on TextInput from uikit\n *\n * @returns {JSX|null}\n */\nexport const Search = ({\n className,\n initialValue,\n onSubmit,\n debounce = 300,\n placeholder = i18n(Keyset.Search),\n size = 'm',\n autoFocus = false,\n value: externalValue,\n}: SearchProps) => {\n const handleChange = lodashDebounce(onSubmit, debounce);\n\n const [value, setValue] = React.useState<string>(initialValue);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const isIPhone = useIsIPhone();\n\n React.useEffect(() => {\n if (externalValue !== undefined) {\n setValue(externalValue);\n }\n }, [externalValue]);\n\n React.useEffect(() => {\n if (autoFocus && !isIPhone) {\n setTimeout(() => inputRef?.current?.focus({preventScroll: true}), AUTOFOCUS_TIMEOUT);\n }\n }, [autoFocus, inputRef, isIPhone]);\n\n const rightContent = React.useMemo(() => {\n const iconData = value ? Close : SearchIcon;\n const iconSize = value ? CLOSE_ICON_SIZE : SEARCH_ICON_SIZE;\n\n const handleClick = () => {\n if (value) {\n handleChange.cancel();\n setValue('');\n onSubmit('');\n inputRef.current?.focus();\n }\n };\n\n return (\n <button\n className={b('input-icon')}\n onClick={handleClick}\n aria-label={value ? i18n(Keyset.ClearAction) : undefined}\n aria-hidden={!value}\n >\n <Icon size={iconSize} data={iconData} />\n </button>\n );\n }, [handleChange, onSubmit, value]);\n\n return (\n <div className={b({size}, className)}>\n <TextInput\n className={b('search-suggest')}\n value={value}\n onUpdate={(query) => {\n setValue(query);\n handleChange(query);\n }}\n placeholder={placeholder}\n size={size === 'm' ? 'xl' : 'l'}\n controlRef={inputRef}\n view=\"clear\"\n controlProps={{\n className: b('search-suggest-control'),\n }}\n endContent={rightContent}\n />\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"Search.js","sourceRoot":"../../../../src","sources":["components/Search/Search.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {Icon, TextInput} from '@gravity-ui/uikit';\nimport lodashDebounce from 'lodash/debounce';\n\nimport {useIsIPhone} from '../../hooks/useIsIPhone';\nimport {Keyset, i18n} from '../../i18n';\nimport {Close} from '../../icons/Close';\nimport {SearchIcon} from '../../icons/SearchIcon';\nimport {ClassNameProps} from '../../models/common';\nimport {block} from '../../utils/cn';\n\nimport './Search.scss';\n\nconst b = block('search');\n\nexport type SearchSize = 's' | 'm';\n\ninterface SearchProps extends ClassNameProps {\n value?: string;\n initialValue: string;\n onSubmit: (value: string) => void;\n debounce?: number;\n placeholder?: string;\n size?: SearchSize;\n autoFocus?: boolean;\n className?: string;\n}\n\nconst SEARCH_ICON_SIZE = 16;\nconst CLOSE_ICON_SIZE = 12;\nconst AUTOFOCUS_TIMEOUT = 0;\n\n/**\n * Search component, placed on blog main page,\n * based on TextInput from uikit\n *\n * @returns {JSX|null}\n */\nexport const Search = ({\n className,\n initialValue,\n onSubmit,\n debounce = 300,\n placeholder = i18n(Keyset.Search),\n size = 'm',\n autoFocus = false,\n value: externalValue,\n}: SearchProps) => {\n const handleChange = lodashDebounce(onSubmit, debounce);\n\n const [value, setValue] = React.useState<string>(initialValue);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const isIPhone = useIsIPhone();\n\n React.useEffect(() => {\n if (externalValue !== undefined) {\n setValue(externalValue);\n }\n }, [externalValue]);\n\n React.useEffect(() => {\n if (autoFocus && !isIPhone) {\n setTimeout(() => inputRef?.current?.focus({preventScroll: true}), AUTOFOCUS_TIMEOUT);\n }\n }, [autoFocus, inputRef, isIPhone]);\n\n const rightContent = React.useMemo(() => {\n const iconData = value ? Close : SearchIcon;\n const iconSize = value ? CLOSE_ICON_SIZE : SEARCH_ICON_SIZE;\n\n const handleClick = () => {\n if (value) {\n handleChange.cancel();\n setValue('');\n onSubmit('');\n inputRef.current?.focus();\n }\n };\n\n return (\n <button\n className={b('input-icon')}\n onClick={handleClick}\n aria-label={value ? i18n(Keyset.ClearAction) : undefined}\n aria-hidden={!value}\n >\n <Icon size={iconSize} data={iconData} />\n </button>\n );\n }, [handleChange, onSubmit, value]);\n\n return (\n <div className={b({size}, className)}>\n <TextInput\n className={b('search-suggest')}\n value={value}\n onUpdate={(query) => {\n setValue(query);\n handleChange(query);\n }}\n placeholder={placeholder}\n size={size === 'm' ? 'xl' : 'l'}\n controlRef={inputRef}\n view=\"clear\"\n controlProps={{\n className: b('search-suggest-control'),\n }}\n endContent={rightContent}\n />\n </div>\n );\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { ShareOptions } from '@gravity-ui/components';
3
- import { CustomConfig, HeaderBreadCrumbsProps, NavigationData, PageConstructorProviderProps, PageContent } from '@gravity-ui/page-constructor';
3
+ import { CustomConfig, HeaderBreadCrumbsProps, NavigationData, PageConstructorProps, PageConstructorProviderProps, PageContent } from '@gravity-ui/page-constructor';
4
4
  import { MetaProps, PostData, ToggleLikeCallbackType } from "../../models/common.js";
5
5
  import './BlogPostPage.css';
6
6
  export interface BlogPostPageProps {
@@ -15,10 +15,11 @@ export interface BlogPostPageProps {
15
15
  post: PostData;
16
16
  settings?: PageConstructorProviderProps;
17
17
  navigation?: NavigationData;
18
+ microdata?: PageConstructorProps['microdata'];
18
19
  custom?: CustomConfig;
19
20
  shareOptions?: ShareOptions[];
20
21
  isSignedInUser?: boolean;
21
22
  onClickSignIn?: React.EventHandler<React.SyntheticEvent>;
22
23
  breadcrumbs?: HeaderBreadCrumbsProps;
23
24
  }
24
- export declare const BlogPostPage: ({ metaData, suggestedPosts, likes, content, post, settings, navigation, custom, shareOptions, isSignedInUser, onClickSignIn, breadcrumbs, }: BlogPostPageProps) => import("react/jsx-runtime").JSX.Element;
25
+ export declare const BlogPostPage: ({ metaData, suggestedPosts, likes, content, post, settings, microdata, navigation, custom, shareOptions, isSignedInUser, onClickSignIn, breadcrumbs, }: BlogPostPageProps) => import("react/jsx-runtime").JSX.Element;
@@ -11,7 +11,7 @@ import { useExtendedComponentMap } from "../../hooks/useExtendedComponentMap.js"
11
11
  import { useLikes } from "../../hooks/useLikes.js";
12
12
  import { SettingsContext } from "../../contexts/SettingsContext.js";
13
13
  import './BlogPostPage.css';
14
- export const BlogPostPage = ({ metaData, suggestedPosts, likes, content, post, settings, navigation, custom, shareOptions, isSignedInUser = false, onClickSignIn, breadcrumbs, }) => {
14
+ export const BlogPostPage = ({ metaData, suggestedPosts, likes, content, post, settings, microdata, navigation, custom, shareOptions, isSignedInUser = false, onClickSignIn, breadcrumbs, }) => {
15
15
  const { isAnimationEnabled } = React.useContext(SettingsContext);
16
16
  const { hasUserLike, likesCount, handleLike } = useLikes({
17
17
  hasLike: likes === null || likes === void 0 ? void 0 : likes.hasUserLike,
@@ -39,6 +39,6 @@ export const BlogPostPage = ({ metaData, suggestedPosts, likes, content, post, s
39
39
  : undefined,
40
40
  shareOptions,
41
41
  breadcrumbs,
42
- }, children: _jsxs(PageConstructorProvider, Object.assign({}, settings, { projectSettings: Object.assign(Object.assign({}, ((settings === null || settings === void 0 ? void 0 : settings.projectSettings) || {})), { isAnimationEnabled }), children: [metaData ? _jsx(MetaWrapper, Object.assign({}, metaData)) : null, _jsx(PageConstructor, { content: content, custom: actualComponentMap, navigation: navigation })] })) }), _jsx(PromptSignIn, Object.assign({}, promptSignInProps))] }));
42
+ }, children: _jsxs(PageConstructorProvider, Object.assign({}, settings, { projectSettings: Object.assign(Object.assign({}, ((settings === null || settings === void 0 ? void 0 : settings.projectSettings) || {})), { isAnimationEnabled }), children: [metaData ? _jsx(MetaWrapper, Object.assign({}, metaData)) : null, _jsx(PageConstructor, { content: content, custom: actualComponentMap, navigation: navigation, microdata: microdata })] })) }), _jsx(PromptSignIn, Object.assign({}, promptSignInProps))] }));
43
43
  };
44
44
  //# sourceMappingURL=BlogPostPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlogPostPage.js","sourceRoot":"../../../../src","sources":["containers/BlogPostPage/BlogPostPage.tsx"],"names":[],"mappings":";;AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAIH,eAAe,EACf,uBAAuB,GAG1B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAC,WAAW,EAAC,oDAAiD;AACrE,OAAO,EAAC,YAAY,EAAC,sDAAmD;AACxE,OAAO,EAAC,oBAAoB,EAAC,oEAAiE;AAC9F,OAAO,EAAC,YAAY,EAAC,uCAAoC;AACzD,OAAO,EAAC,eAAe,EAAC,0CAAuC;AAC/D,OAAO,EAAC,uBAAuB,EAAC,+CAA4C;AAC5E,OAAO,EAAC,QAAQ,EAAC,gCAA6B;AAE9C,OAAO,EAAC,eAAe,EAAC,0CAAuC;AAE/D,OAAO,oBAAoB,CAAC;AAsB5B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EACzB,QAAQ,EACR,cAAc,EACd,KAAK,EACL,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,MAAM,EACN,YAAY,EACZ,cAAc,GAAG,KAAK,EACtB,aAAa,EACb,WAAW,GACK,EAAE,EAAE;IACpB,MAAM,EAAC,kBAAkB,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAC/D,MAAM,EAAC,WAAW,EAAE,UAAU,EAAE,UAAU,EAAC,GAAG,QAAQ,CAAC;QACnD,OAAO,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW;QAC3B,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;QACxB,kBAAkB,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;QACrC,MAAM,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,MAAM,KAAwC,oBAAoB,CAAC,aAAa,CAAC,EAA3E,EAAC,aAAa,OAA6D,EAAxD,iBAAiB,cAApC,iBAAqC,CAAsC,CAAC;IAElF,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAClC,GAAG,EAAE,CAAC,CAAC;QACH,UAAU,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;QAC7B,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;QACxB,cAAc;QACd,aAAa;KAChB,CAAC,EACF,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CACzC,CAAC;IAEF,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAE3D,OAAO,CACH,MAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,gBAAgB,aAC1C,KAAC,eAAe,CAAC,QAAQ,IACrB,KAAK,EAAE;oBACH,IAAI;oBACJ,cAAc;oBACd,KAAK,EAAE,KAAK;wBACR,CAAC,CAAC;4BACI,cAAc,EAAE,UAAU;4BAC1B,WAAW;4BACX,UAAU;yBACb;wBACH,CAAC,CAAC,SAAS;oBACf,YAAY;oBACZ,WAAW;iBACd,YAED,MAAC,uBAAuB,oBAChB,QAAQ,IACZ,eAAe,kCAAM,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,KAAI,EAAE,CAAC,KAAE,kBAAkB,gBAEzE,QAAQ,CAAC,CAAC,CAAC,KAAC,WAAW,oBAAK,QAAQ,EAAI,CAAC,CAAC,CAAC,IAAI,EAChD,KAAC,eAAe,IACZ,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,UAAU,GACxB,KACoB,GACH,EAC3B,KAAC,YAAY,oBAAK,iBAAiB,EAAI,IACnB,CAC3B,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {ShareOptions} from '@gravity-ui/components';\nimport {\n CustomConfig,\n HeaderBreadCrumbsProps,\n NavigationData,\n PageConstructor,\n PageConstructorProvider,\n PageConstructorProviderProps,\n PageContent,\n} from '@gravity-ui/page-constructor';\n\nimport {MetaWrapper} from '../../components/MetaWrapper/MetaWrapper';\nimport {PromptSignIn} from '../../components/PromptSignIn/PromptSignIn';\nimport {usePromptSignInProps} from '../../components/PromptSignIn/hooks/usePromptSignInProps';\nimport {LikesContext} from '../../contexts/LikesContext';\nimport {PostPageContext} from '../../contexts/PostPageContext';\nimport {useExtendedComponentMap} from '../../hooks/useExtendedComponentMap';\nimport {useLikes} from '../../hooks/useLikes';\nimport {MetaProps, PostData, ToggleLikeCallbackType} from '../../models/common';\nimport {SettingsContext} from '../../contexts/SettingsContext';\n\nimport './BlogPostPage.scss';\n\nexport interface BlogPostPageProps {\n suggestedPosts: PostData[];\n metaData?: MetaProps;\n likes?: {\n hasUserLike?: boolean;\n likesCount?: number;\n toggleLike?: ToggleLikeCallbackType;\n };\n content: PageContent;\n post: PostData;\n settings?: PageConstructorProviderProps;\n navigation?: NavigationData;\n custom?: CustomConfig;\n shareOptions?: ShareOptions[];\n isSignedInUser?: boolean;\n // Required to enable Sign In on Post like\n onClickSignIn?: React.EventHandler<React.SyntheticEvent>;\n breadcrumbs?: HeaderBreadCrumbsProps;\n}\n\nexport const BlogPostPage = ({\n metaData,\n suggestedPosts,\n likes,\n content,\n post,\n settings,\n navigation,\n custom,\n shareOptions,\n isSignedInUser = false,\n onClickSignIn,\n breadcrumbs,\n}: BlogPostPageProps) => {\n const {isAnimationEnabled} = React.useContext(SettingsContext);\n const {hasUserLike, likesCount, handleLike} = useLikes({\n hasLike: likes?.hasUserLike,\n count: likes?.likesCount,\n toggleLikeCallback: likes?.toggleLike,\n postId: post?.blogPostId,\n });\n\n const {requireSignIn, ...promptSignInProps} = usePromptSignInProps(onClickSignIn);\n\n const likesContextData = React.useMemo(\n () => ({\n toggleLike: likes?.toggleLike,\n hasLikes: Boolean(likes),\n isSignedInUser,\n requireSignIn,\n }),\n [likes, isSignedInUser, requireSignIn],\n );\n\n const actualComponentMap = useExtendedComponentMap(custom);\n\n return (\n <LikesContext.Provider value={likesContextData}>\n <PostPageContext.Provider\n value={{\n post,\n suggestedPosts,\n likes: likes\n ? {\n handleUserLike: handleLike,\n hasUserLike,\n likesCount,\n }\n : undefined,\n shareOptions,\n breadcrumbs,\n }}\n >\n <PageConstructorProvider\n {...settings}\n projectSettings={{...(settings?.projectSettings || {}), isAnimationEnabled}}\n >\n {metaData ? <MetaWrapper {...metaData} /> : null}\n <PageConstructor\n content={content}\n custom={actualComponentMap}\n navigation={navigation}\n />\n </PageConstructorProvider>\n </PostPageContext.Provider>\n <PromptSignIn {...promptSignInProps} />\n </LikesContext.Provider>\n );\n};\n"]}
1
+ {"version":3,"file":"BlogPostPage.js","sourceRoot":"../../../../src","sources":["containers/BlogPostPage/BlogPostPage.tsx"],"names":[],"mappings":";;AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAIH,eAAe,EAEf,uBAAuB,GAG1B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAC,WAAW,EAAC,oDAAiD;AACrE,OAAO,EAAC,YAAY,EAAC,sDAAmD;AACxE,OAAO,EAAC,oBAAoB,EAAC,oEAAiE;AAC9F,OAAO,EAAC,YAAY,EAAC,uCAAoC;AACzD,OAAO,EAAC,eAAe,EAAC,0CAAuC;AAC/D,OAAO,EAAC,uBAAuB,EAAC,+CAA4C;AAC5E,OAAO,EAAC,QAAQ,EAAC,gCAA6B;AAE9C,OAAO,EAAC,eAAe,EAAC,0CAAuC;AAE/D,OAAO,oBAAoB,CAAC;AAuB5B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EACzB,QAAQ,EACR,cAAc,EACd,KAAK,EACL,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,UAAU,EACV,MAAM,EACN,YAAY,EACZ,cAAc,GAAG,KAAK,EACtB,aAAa,EACb,WAAW,GACK,EAAE,EAAE;IACpB,MAAM,EAAC,kBAAkB,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAC/D,MAAM,EAAC,WAAW,EAAE,UAAU,EAAE,UAAU,EAAC,GAAG,QAAQ,CAAC;QACnD,OAAO,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW;QAC3B,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;QACxB,kBAAkB,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;QACrC,MAAM,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,MAAM,KAAwC,oBAAoB,CAAC,aAAa,CAAC,EAA3E,EAAC,aAAa,OAA6D,EAAxD,iBAAiB,cAApC,iBAAqC,CAAsC,CAAC;IAElF,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAClC,GAAG,EAAE,CAAC,CAAC;QACH,UAAU,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;QAC7B,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;QACxB,cAAc;QACd,aAAa;KAChB,CAAC,EACF,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CACzC,CAAC;IAEF,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAE3D,OAAO,CACH,MAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,gBAAgB,aAC1C,KAAC,eAAe,CAAC,QAAQ,IACrB,KAAK,EAAE;oBACH,IAAI;oBACJ,cAAc;oBACd,KAAK,EAAE,KAAK;wBACR,CAAC,CAAC;4BACI,cAAc,EAAE,UAAU;4BAC1B,WAAW;4BACX,UAAU;yBACb;wBACH,CAAC,CAAC,SAAS;oBACf,YAAY;oBACZ,WAAW;iBACd,YAED,MAAC,uBAAuB,oBAChB,QAAQ,IACZ,eAAe,kCAAM,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,KAAI,EAAE,CAAC,KAAE,kBAAkB,gBAEzE,QAAQ,CAAC,CAAC,CAAC,KAAC,WAAW,oBAAK,QAAQ,EAAI,CAAC,CAAC,CAAC,IAAI,EAChD,KAAC,eAAe,IACZ,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,GACtB,KACoB,GACH,EAC3B,KAAC,YAAY,oBAAK,iBAAiB,EAAI,IACnB,CAC3B,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {ShareOptions} from '@gravity-ui/components';\nimport {\n CustomConfig,\n HeaderBreadCrumbsProps,\n NavigationData,\n PageConstructor,\n PageConstructorProps,\n PageConstructorProvider,\n PageConstructorProviderProps,\n PageContent,\n} from '@gravity-ui/page-constructor';\n\nimport {MetaWrapper} from '../../components/MetaWrapper/MetaWrapper';\nimport {PromptSignIn} from '../../components/PromptSignIn/PromptSignIn';\nimport {usePromptSignInProps} from '../../components/PromptSignIn/hooks/usePromptSignInProps';\nimport {LikesContext} from '../../contexts/LikesContext';\nimport {PostPageContext} from '../../contexts/PostPageContext';\nimport {useExtendedComponentMap} from '../../hooks/useExtendedComponentMap';\nimport {useLikes} from '../../hooks/useLikes';\nimport {MetaProps, PostData, ToggleLikeCallbackType} from '../../models/common';\nimport {SettingsContext} from '../../contexts/SettingsContext';\n\nimport './BlogPostPage.scss';\n\nexport interface BlogPostPageProps {\n suggestedPosts: PostData[];\n metaData?: MetaProps;\n likes?: {\n hasUserLike?: boolean;\n likesCount?: number;\n toggleLike?: ToggleLikeCallbackType;\n };\n content: PageContent;\n post: PostData;\n settings?: PageConstructorProviderProps;\n navigation?: NavigationData;\n microdata?: PageConstructorProps['microdata'];\n custom?: CustomConfig;\n shareOptions?: ShareOptions[];\n isSignedInUser?: boolean;\n // Required to enable Sign In on Post like\n onClickSignIn?: React.EventHandler<React.SyntheticEvent>;\n breadcrumbs?: HeaderBreadCrumbsProps;\n}\n\nexport const BlogPostPage = ({\n metaData,\n suggestedPosts,\n likes,\n content,\n post,\n settings,\n microdata,\n navigation,\n custom,\n shareOptions,\n isSignedInUser = false,\n onClickSignIn,\n breadcrumbs,\n}: BlogPostPageProps) => {\n const {isAnimationEnabled} = React.useContext(SettingsContext);\n const {hasUserLike, likesCount, handleLike} = useLikes({\n hasLike: likes?.hasUserLike,\n count: likes?.likesCount,\n toggleLikeCallback: likes?.toggleLike,\n postId: post?.blogPostId,\n });\n\n const {requireSignIn, ...promptSignInProps} = usePromptSignInProps(onClickSignIn);\n\n const likesContextData = React.useMemo(\n () => ({\n toggleLike: likes?.toggleLike,\n hasLikes: Boolean(likes),\n isSignedInUser,\n requireSignIn,\n }),\n [likes, isSignedInUser, requireSignIn],\n );\n\n const actualComponentMap = useExtendedComponentMap(custom);\n\n return (\n <LikesContext.Provider value={likesContextData}>\n <PostPageContext.Provider\n value={{\n post,\n suggestedPosts,\n likes: likes\n ? {\n handleUserLike: handleLike,\n hasUserLike,\n likesCount,\n }\n : undefined,\n shareOptions,\n breadcrumbs,\n }}\n >\n <PageConstructorProvider\n {...settings}\n projectSettings={{...(settings?.projectSettings || {}), isAnimationEnabled}}\n >\n {metaData ? <MetaWrapper {...metaData} /> : null}\n <PageConstructor\n content={content}\n custom={actualComponentMap}\n navigation={navigation}\n microdata={microdata}\n />\n </PageConstructorProvider>\n </PostPageContext.Provider>\n <PromptSignIn {...promptSignInProps} />\n </LikesContext.Provider>\n );\n};\n"]}
@@ -27,7 +27,7 @@ export type LayoutProps = {
27
27
  mobileOrder?: string;
28
28
  children: React.ReactElement[];
29
29
  } & PaddingsYFMProps;
30
- export type MediaProps = ClassNameProps & PaddingsYFMProps & Partial<Pick<PCMediaProps, 'youtube' | 'previewImg' | 'image' | 'video' | 'dataLens'>> & {
30
+ export type MediaProps = ClassNameProps & PaddingsYFMProps & Partial<Pick<PCMediaProps, 'youtube' | 'previewImg' | 'image' | 'video' | 'dataLens' | 'videoIframe' | 'videoMicrodata'>> & {
31
31
  text?: string;
32
32
  };
33
33
  export type MetaProps = QAProps & {
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.js","sourceRoot":"../../../src","sources":["models/blocks.ts"],"names":[],"mappings":"","sourcesContent":["import * as React from 'react';\n\nimport {\n ContentBlockProps,\n FormBlockData,\n HeaderBlockProps,\n MediaProps as PCMediaProps,\n TextTheme,\n} from '@gravity-ui/page-constructor';\n\nimport {BlockType, ClassNameProps, PostData, QAProps} from './common';\nimport {PaddingsYFMProps} from './paddings';\n\n// blocks props\nexport type AuthorProps = ClassNameProps & {\n authorId: number | string;\n image: string;\n} & PaddingsYFMProps &\n QAProps;\n\nexport type BannerProps = ContentBlockProps &\n QAProps & {\n color?: string;\n image?: string;\n imageSize?: 's' | 'm';\n } & PaddingsYFMProps;\n\nexport type ColoredTextProps = ContentBlockProps &\n QAProps & {\n background?: {\n color?: string;\n image?: string;\n altText?: string;\n };\n } & PaddingsYFMProps;\n\nexport type CTAProps = QAProps & {\n items: Array<ContentBlockProps>;\n} & PaddingsYFMProps;\n\nexport type HeaderProps = HeaderBlockProps & PaddingsYFMProps;\n\nexport type LayoutProps = {\n fullWidth?: boolean;\n mobileOrder?: string;\n children: React.ReactElement[];\n} & PaddingsYFMProps;\n\nexport type MediaProps = ClassNameProps &\n PaddingsYFMProps &\n Partial<Pick<PCMediaProps, 'youtube' | 'previewImg' | 'image' | 'video' | 'dataLens'>> & {\n text?: string;\n };\n\nexport type MetaProps = QAProps & {\n locale: string;\n theme?: TextTheme;\n} & PaddingsYFMProps;\n\nexport type SuggestProps = ClassNameProps & {\n posts: PostData[];\n} & PaddingsYFMProps;\n\nexport type YFMProps = {\n text: string;\n} & PaddingsYFMProps &\n QAProps;\n\nexport type FeedProps = {\n image: string;\n};\n\nexport type FormProps = {\n formData: FormBlockData;\n border?: 'shadow' | 'line' | 'none';\n} & PaddingsYFMProps &\n QAProps;\n\n// blocks models\nexport type AuthorBlockModel = {\n type: BlockType.Author;\n} & AuthorProps;\n\nexport type BannerBlockModel = {\n type: BlockType.Banner;\n} & BannerProps;\n\nexport type ColoredTextBlockModel = {\n type: BlockType.ColoredText;\n} & ColoredTextProps;\n\nexport type CTABlockModel = {\n type: BlockType.CTA;\n} & CTAProps;\n\nexport type HeaderBlockModel = {\n type: BlockType.Header;\n} & HeaderProps;\n\nexport type LayoutBlockModel = {\n type: BlockType.Layout;\n} & LayoutProps;\n\nexport type MediaBlockModel = {\n type: BlockType.Media;\n} & MediaProps;\n\nexport type MetaBlockModel = {\n type: BlockType.Meta;\n} & MetaProps;\n\nexport type SuggestBlockModel = {\n type: BlockType.Suggest;\n} & SuggestProps;\n\nexport type YFMBlockModel = {\n type: BlockType.YFM;\n} & YFMProps;\n\nexport type FeedBlockModel = {\n type: BlockType.Feed;\n} & FeedProps;\n\nexport type FormBlockModel = {\n type: BlockType.Form;\n} & FormProps;\n\nexport type BlockModel =\n | AuthorBlockModel\n | BannerBlockModel\n | ColoredTextBlockModel\n | CTABlockModel\n | HeaderBlockModel\n | LayoutBlockModel\n | MediaBlockModel\n | MetaBlockModel\n | SuggestBlockModel\n | YFMBlockModel\n | FeedBlockModel;\n\nexport type Block = BlockModel & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [x: string]: any;\n};\n"]}
1
+ {"version":3,"file":"blocks.js","sourceRoot":"../../../src","sources":["models/blocks.ts"],"names":[],"mappings":"","sourcesContent":["import * as React from 'react';\n\nimport {\n ContentBlockProps,\n FormBlockData,\n HeaderBlockProps,\n MediaProps as PCMediaProps,\n TextTheme,\n} from '@gravity-ui/page-constructor';\n\nimport {BlockType, ClassNameProps, PostData, QAProps} from './common';\nimport {PaddingsYFMProps} from './paddings';\n\n// blocks props\nexport type AuthorProps = ClassNameProps & {\n authorId: number | string;\n image: string;\n} & PaddingsYFMProps &\n QAProps;\n\nexport type BannerProps = ContentBlockProps &\n QAProps & {\n color?: string;\n image?: string;\n imageSize?: 's' | 'm';\n } & PaddingsYFMProps;\n\nexport type ColoredTextProps = ContentBlockProps &\n QAProps & {\n background?: {\n color?: string;\n image?: string;\n altText?: string;\n };\n } & PaddingsYFMProps;\n\nexport type CTAProps = QAProps & {\n items: Array<ContentBlockProps>;\n} & PaddingsYFMProps;\n\nexport type HeaderProps = HeaderBlockProps & PaddingsYFMProps;\n\nexport type LayoutProps = {\n fullWidth?: boolean;\n mobileOrder?: string;\n children: React.ReactElement[];\n} & PaddingsYFMProps;\n\nexport type MediaProps = ClassNameProps &\n PaddingsYFMProps &\n Partial<\n Pick<\n PCMediaProps,\n | 'youtube'\n | 'previewImg'\n | 'image'\n | 'video'\n | 'dataLens'\n | 'videoIframe'\n | 'videoMicrodata'\n >\n > & {\n text?: string;\n };\n\nexport type MetaProps = QAProps & {\n locale: string;\n theme?: TextTheme;\n} & PaddingsYFMProps;\n\nexport type SuggestProps = ClassNameProps & {\n posts: PostData[];\n} & PaddingsYFMProps;\n\nexport type YFMProps = {\n text: string;\n} & PaddingsYFMProps &\n QAProps;\n\nexport type FeedProps = {\n image: string;\n};\n\nexport type FormProps = {\n formData: FormBlockData;\n border?: 'shadow' | 'line' | 'none';\n} & PaddingsYFMProps &\n QAProps;\n\n// blocks models\nexport type AuthorBlockModel = {\n type: BlockType.Author;\n} & AuthorProps;\n\nexport type BannerBlockModel = {\n type: BlockType.Banner;\n} & BannerProps;\n\nexport type ColoredTextBlockModel = {\n type: BlockType.ColoredText;\n} & ColoredTextProps;\n\nexport type CTABlockModel = {\n type: BlockType.CTA;\n} & CTAProps;\n\nexport type HeaderBlockModel = {\n type: BlockType.Header;\n} & HeaderProps;\n\nexport type LayoutBlockModel = {\n type: BlockType.Layout;\n} & LayoutProps;\n\nexport type MediaBlockModel = {\n type: BlockType.Media;\n} & MediaProps;\n\nexport type MetaBlockModel = {\n type: BlockType.Meta;\n} & MetaProps;\n\nexport type SuggestBlockModel = {\n type: BlockType.Suggest;\n} & SuggestProps;\n\nexport type YFMBlockModel = {\n type: BlockType.YFM;\n} & YFMProps;\n\nexport type FeedBlockModel = {\n type: BlockType.Feed;\n} & FeedProps;\n\nexport type FormBlockModel = {\n type: BlockType.Form;\n} & FormProps;\n\nexport type BlockModel =\n | AuthorBlockModel\n | BannerBlockModel\n | ColoredTextBlockModel\n | CTABlockModel\n | HeaderBlockModel\n | LayoutBlockModel\n | MediaBlockModel\n | MetaBlockModel\n | SuggestBlockModel\n | YFMBlockModel\n | FeedBlockModel;\n\nexport type Block = BlockModel & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [x: string]: any;\n};\n"]}
@@ -569,6 +569,9 @@ export declare const schemasForCustom: {
569
569
  status: {
570
570
  type: string;
571
571
  };
572
+ centered: {
573
+ type: string;
574
+ };
572
575
  paddingTop: {
573
576
  type: string;
574
577
  enum: string[];
@@ -1,9 +1,9 @@
1
1
  import { __rest } from "tslib";
2
2
  import { format, parse } from 'url';
3
- import camelCase from 'lodash/camelCase';
4
- import debounce from 'lodash/debounce';
5
- import flatten from 'lodash/flatten';
6
- import memoize from 'lodash/memoize';
3
+ import camelCase from "lodash/camelCase.js";
4
+ import debounce from "lodash/debounce.js";
5
+ import flatten from "lodash/flatten.js";
6
+ import memoize from "lodash/memoize.js";
7
7
  import { CONTENT_DEFAULT_COL_SIZES, CONTENT_DEFAULT_SIZE, CONTENT_DEFAULT_THEME, DEFAULT_PAGE, DEFAULT_ROWS_PER_PAGE, } from "../blocks/constants.js";
8
8
  import { Keyset, i18n } from "../i18n/index.js";
9
9
  import { AnalyticsCounter } from "../counters/utils.js";
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"../../../src","sources":["utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import {format, parse} from 'url';\n\nimport {\n AnalyticsEvent,\n AnalyticsEventsProp,\n ContentBlockProps,\n HeaderBreadCrumbsProps,\n} from '@gravity-ui/page-constructor';\nimport camelCase from 'lodash/camelCase';\nimport debounce from 'lodash/debounce';\nimport flatten from 'lodash/flatten';\nimport memoize from 'lodash/memoize';\n\nimport {\n CONTENT_DEFAULT_COL_SIZES,\n CONTENT_DEFAULT_SIZE,\n CONTENT_DEFAULT_THEME,\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n} from '../blocks/constants';\nimport {RouterContextProps} from '../contexts/RouterContext';\nimport {Keyset, i18n} from '../i18n';\nimport {GetPostsRequest, Query, Tag} from '../models/common';\nimport {AnalyticsCounter} from '../counters/utils';\n\nconst QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];\n\nexport interface QueryParam {\n name: string;\n value?: string | number | null;\n}\n\nexport interface RouterActionOptions {\n shallow?: boolean;\n}\n\nexport function getAbsolutePath(router: RouterContextProps, url?: string) {\n if (!router || !router.pathname) {\n return url ?? '';\n }\n\n const parsed = parse(url || router.as || '');\n\n return format({\n ...parsed,\n protocol: parsed.protocol || 'https',\n hostname: parsed.hostname || router.hostname,\n pathname: parsed.pathname || router.pathname,\n });\n}\n\nexport const getPageSearchParams = (query: Query = {}) => {\n const searchParams = new URLSearchParams();\n\n Object.entries(query).forEach(([key, value]) => {\n searchParams.set(key, String(value));\n });\n\n return searchParams;\n};\n\nexport const scrollToHash = (hash: string, browser?: string) => {\n if (!hash) {\n return;\n }\n\n const element = document.getElementById(hash);\n\n if (!element) {\n return;\n }\n\n setTimeout(\n () => element.scrollIntoView({behavior: browser === 'Yandex' ? 'auto' : 'smooth'}),\n 0,\n );\n};\n\ntype CloudListTagStub = {};\n\nexport const getTags = memoize((tags: Tag[], blogPath: string) => {\n return tags.map(({slug, ...tag}) => {\n const queryParams = new URLSearchParams();\n queryParams.set('tags', slug);\n\n return {\n ...tag,\n id: slug,\n url: `${blogPath}?${queryParams}`,\n } as CloudListTagStub;\n });\n});\n\nconst stub = (postId: number | string) => postId;\n\nexport const postLikeStatus = debounce((postId: number | string, hasUserLike: boolean) => {\n (hasUserLike ? stub : stub)(postId);\n}, 300);\n\nexport const updateContentSizes = ({size, colSizes, theme, ...contentData}: ContentBlockProps) => ({\n ...contentData,\n size: size || CONTENT_DEFAULT_SIZE,\n colSizes: colSizes || CONTENT_DEFAULT_COL_SIZES,\n theme: theme || CONTENT_DEFAULT_THEME,\n});\n\ntype GetBreadcrumbsProps = {\n tags?: Tag[];\n blogPath: string;\n};\n\nexport const getBlogPath = (pathPrefix: string) => {\n const prefix = pathPrefix ? `/${pathPrefix}` : '';\n return `${prefix}/blog`;\n};\n\nexport function getBreadcrumbs({tags, blogPath}: GetBreadcrumbsProps) {\n const breadcrumbs: HeaderBreadCrumbsProps = {\n items: [{text: i18n(Keyset.TitleBreadcrumbs), url: blogPath}],\n theme: 'light',\n };\n\n if (tags?.length) {\n const localizedTags = getTags(tags, blogPath);\n const tag = localizedTags[0];\n // @ts-ignore todo fix\n breadcrumbs.items.push({text: tag.name, url: tag.url});\n }\n\n return breadcrumbs;\n}\n\nconst getArrayOfEvents = (events?: AnalyticsEventsProp) => {\n if (!events) {\n return [];\n }\n\n if (Array.isArray(events)) {\n return events;\n }\n\n return [events];\n};\n\nexport const getMergedAnalyticsEvents = (\n analyticEvents: AnalyticsEventsProp,\n existringEvents?: AnalyticsEventsProp,\n) => {\n const eventsAsArray = getArrayOfEvents(analyticEvents);\n const existingAsArray = getArrayOfEvents(existringEvents);\n\n return eventsAsArray.concat(existingAsArray);\n};\n\nexport const getFeedQueryParams = (queryString: Query, pageNumber?: number): GetPostsRequest => {\n const queryParams = getPageSearchParams(queryString);\n const tags = queryParams.get('tags') || undefined;\n const page = pageNumber || Number(queryParams.get('page') || DEFAULT_PAGE);\n const perPage = Number(queryParams.get('perPage') || DEFAULT_ROWS_PER_PAGE);\n const savedOnly = queryParams.get('savedOnly') === 'true';\n const search = queryParams.get('search') || undefined;\n const serviceIds = queryParams.get('services') || undefined;\n\n return {tags, page, perPage, savedOnly, search, services: serviceIds};\n};\n\nexport const scrollOnPageChange = (containerId: string) => {\n const cardsContainerEl = document.getElementById(containerId);\n const y = cardsContainerEl?.getBoundingClientRect()?.y || 0;\n\n if (y < 0) {\n scrollToHash(containerId);\n }\n};\n\nexport const getQaAttributes = (qa?: string, ...customKeys: (string | Array<string>)[]) => {\n const attributes: Record<string, string> = {};\n\n if (qa) {\n const keys = QA_ATTRIBUTES_KEYS.concat(flatten(customKeys));\n\n keys.forEach((key) => {\n attributes[camelCase(key)] = `${qa}-${key}`;\n });\n\n attributes.default = qa;\n }\n\n return attributes;\n};\n\ntype PrepareAnalyticsEventArgs = {\n name: string;\n counter?: AnalyticsCounter;\n options?: Record<string, string | number>;\n};\n\nexport const prepareAnalyticsEvent = ({\n name,\n counter = AnalyticsCounter.Main,\n options = {},\n}: PrepareAnalyticsEventArgs): AnalyticsEvent => ({\n ...options,\n name,\n counters: {\n include: [counter],\n },\n});\n"]}
1
+ {"version":3,"file":"common.js","sourceRoot":"../../../src","sources":["utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import {format, parse} from 'url';\n\nimport {\n AnalyticsEvent,\n AnalyticsEventsProp,\n ContentBlockProps,\n HeaderBreadCrumbsProps,\n} from '@gravity-ui/page-constructor';\nimport camelCase from 'lodash/camelCase';\nimport debounce from 'lodash/debounce';\nimport flatten from 'lodash/flatten';\nimport memoize from 'lodash/memoize';\n\nimport {\n CONTENT_DEFAULT_COL_SIZES,\n CONTENT_DEFAULT_SIZE,\n CONTENT_DEFAULT_THEME,\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n} from '../blocks/constants';\nimport {RouterContextProps} from '../contexts/RouterContext';\nimport {Keyset, i18n} from '../i18n';\nimport {GetPostsRequest, Query, Tag} from '../models/common';\nimport {AnalyticsCounter} from '../counters/utils';\n\nconst QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];\n\nexport interface QueryParam {\n name: string;\n value?: string | number | null;\n}\n\nexport interface RouterActionOptions {\n shallow?: boolean;\n}\n\nexport function getAbsolutePath(router: RouterContextProps, url?: string) {\n if (!router || !router.pathname) {\n return url ?? '';\n }\n\n const parsed = parse(url || router.as || '');\n\n return format({\n ...parsed,\n protocol: parsed.protocol || 'https',\n hostname: parsed.hostname || router.hostname,\n pathname: parsed.pathname || router.pathname,\n });\n}\n\nexport const getPageSearchParams = (query: Query = {}) => {\n const searchParams = new URLSearchParams();\n\n Object.entries(query).forEach(([key, value]) => {\n searchParams.set(key, String(value));\n });\n\n return searchParams;\n};\n\nexport const scrollToHash = (hash: string, browser?: string) => {\n if (!hash) {\n return;\n }\n\n const element = document.getElementById(hash);\n\n if (!element) {\n return;\n }\n\n setTimeout(\n () => element.scrollIntoView({behavior: browser === 'Yandex' ? 'auto' : 'smooth'}),\n 0,\n );\n};\n\ntype CloudListTagStub = {};\n\nexport const getTags = memoize((tags: Tag[], blogPath: string) => {\n return tags.map(({slug, ...tag}) => {\n const queryParams = new URLSearchParams();\n queryParams.set('tags', slug);\n\n return {\n ...tag,\n id: slug,\n url: `${blogPath}?${queryParams}`,\n } as CloudListTagStub;\n });\n});\n\nconst stub = (postId: number | string) => postId;\n\nexport const postLikeStatus = debounce((postId: number | string, hasUserLike: boolean) => {\n (hasUserLike ? stub : stub)(postId);\n}, 300);\n\nexport const updateContentSizes = ({size, colSizes, theme, ...contentData}: ContentBlockProps) => ({\n ...contentData,\n size: size || CONTENT_DEFAULT_SIZE,\n colSizes: colSizes || CONTENT_DEFAULT_COL_SIZES,\n theme: theme || CONTENT_DEFAULT_THEME,\n});\n\ntype GetBreadcrumbsProps = {\n tags?: Tag[];\n blogPath: string;\n};\n\nexport const getBlogPath = (pathPrefix: string) => {\n const prefix = pathPrefix ? `/${pathPrefix}` : '';\n return `${prefix}/blog`;\n};\n\nexport function getBreadcrumbs({tags, blogPath}: GetBreadcrumbsProps) {\n const breadcrumbs: HeaderBreadCrumbsProps = {\n items: [{text: i18n(Keyset.TitleBreadcrumbs), url: blogPath}],\n theme: 'light',\n };\n\n if (tags?.length) {\n const localizedTags = getTags(tags, blogPath);\n const tag = localizedTags[0];\n // @ts-ignore todo fix\n breadcrumbs.items.push({text: tag.name, url: tag.url});\n }\n\n return breadcrumbs;\n}\n\nconst getArrayOfEvents = (events?: AnalyticsEventsProp) => {\n if (!events) {\n return [];\n }\n\n if (Array.isArray(events)) {\n return events;\n }\n\n return [events];\n};\n\nexport const getMergedAnalyticsEvents = (\n analyticEvents: AnalyticsEventsProp,\n existringEvents?: AnalyticsEventsProp,\n) => {\n const eventsAsArray = getArrayOfEvents(analyticEvents);\n const existingAsArray = getArrayOfEvents(existringEvents);\n\n return eventsAsArray.concat(existingAsArray);\n};\n\nexport const getFeedQueryParams = (queryString: Query, pageNumber?: number): GetPostsRequest => {\n const queryParams = getPageSearchParams(queryString);\n const tags = queryParams.get('tags') || undefined;\n const page = pageNumber || Number(queryParams.get('page') || DEFAULT_PAGE);\n const perPage = Number(queryParams.get('perPage') || DEFAULT_ROWS_PER_PAGE);\n const savedOnly = queryParams.get('savedOnly') === 'true';\n const search = queryParams.get('search') || undefined;\n const serviceIds = queryParams.get('services') || undefined;\n\n return {tags, page, perPage, savedOnly, search, services: serviceIds};\n};\n\nexport const scrollOnPageChange = (containerId: string) => {\n const cardsContainerEl = document.getElementById(containerId);\n const y = cardsContainerEl?.getBoundingClientRect()?.y || 0;\n\n if (y < 0) {\n scrollToHash(containerId);\n }\n};\n\nexport const getQaAttributes = (qa?: string, ...customKeys: (string | Array<string>)[]) => {\n const attributes: Record<string, string> = {};\n\n if (qa) {\n const keys = QA_ATTRIBUTES_KEYS.concat(flatten(customKeys));\n\n keys.forEach((key) => {\n attributes[camelCase(key)] = `${qa}-${key}`;\n });\n\n attributes.default = qa;\n }\n\n return attributes;\n};\n\ntype PrepareAnalyticsEventArgs = {\n name: string;\n counter?: AnalyticsCounter;\n options?: Record<string, string | number>;\n};\n\nexport const prepareAnalyticsEvent = ({\n name,\n counter = AnalyticsCounter.Main,\n options = {},\n}: PrepareAnalyticsEventArgs): AnalyticsEvent => ({\n ...options,\n name,\n counters: {\n include: [counter],\n },\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/blog-constructor",
3
- "version": "7.0.0-beta.3",
3
+ "version": "7.0.0-beta.5",
4
4
  "description": "Gravity UI Blog Constructor",
5
5
  "license": "MIT",
6
6
  "type": "commonjs",
@@ -76,8 +76,8 @@
76
76
  "dependencies": {
77
77
  "@bem-react/classname": "^1.6.0",
78
78
  "@chromatic-com/storybook": "^3.2.4",
79
- "@gravity-ui/components": "^4.0.0-beta.5",
80
- "@gravity-ui/gulp-utils": "^1.0.0",
79
+ "@gravity-ui/components": "^4.0.1",
80
+ "@gravity-ui/gulp-utils": "^1.0.1",
81
81
  "@gravity-ui/i18n": "^1.7.0",
82
82
  "gulp-cli": "^3.0.0",
83
83
  "gulp-sass": "^6.0.0",
@@ -91,9 +91,9 @@
91
91
  },
92
92
  "peerDependencies": {
93
93
  "@diplodoc/transform": "^4.10.7",
94
- "@gravity-ui/page-constructor": "^6.0.0-beta.3",
95
- "@gravity-ui/uikit": "^7.0.0-beta.6",
96
- "react": "^16.0.0 || ^17.0.0 || ^18.0.0"
94
+ "@gravity-ui/page-constructor": "^6.0.0-beta.7",
95
+ "@gravity-ui/uikit": "^7.1.1",
96
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
97
97
  },
98
98
  "devDependencies": {
99
99
  "@babel/preset-env": "^7.26.0",
@@ -102,11 +102,11 @@
102
102
  "@commitlint/config-conventional": "^17.4.3",
103
103
  "@diplodoc/transform": "^4.10.8",
104
104
  "@gravity-ui/eslint-config": "^3.2.0",
105
- "@gravity-ui/page-constructor": "^6.0.0-beta.3",
105
+ "@gravity-ui/page-constructor": "^6.0.0-beta.7",
106
106
  "@gravity-ui/prettier-config": "^1.1.0",
107
107
  "@gravity-ui/stylelint-config": "^4.0.1",
108
108
  "@gravity-ui/tsconfig": "^1.0.0",
109
- "@gravity-ui/uikit": "^7.0.0-beta.6",
109
+ "@gravity-ui/uikit": "^7.1.1",
110
110
  "@jest/environment": "^29.7.0",
111
111
  "@playwright/experimental-ct-react": "^1.45.3",
112
112
  "@playwright/test": "^1.45.3",
@@ -27,7 +27,7 @@ export type LayoutProps = {
27
27
  mobileOrder?: string;
28
28
  children: React.ReactElement[];
29
29
  } & PaddingsYFMProps;
30
- export type MediaProps = ClassNameProps & PaddingsYFMProps & Partial<Pick<PCMediaProps, 'youtube' | 'previewImg' | 'image' | 'video' | 'dataLens'>> & {
30
+ export type MediaProps = ClassNameProps & PaddingsYFMProps & Partial<Pick<PCMediaProps, 'youtube' | 'previewImg' | 'image' | 'video' | 'dataLens' | 'videoIframe' | 'videoMicrodata'>> & {
31
31
  text?: string;
32
32
  };
33
33
  export type MetaProps = QAProps & {
package/styles/styles.css CHANGED
@@ -1,3 +1,4 @@
1
+ @import '@gravity-ui/uikit/styles/fonts.css';
1
2
  @import '~@gravity-ui/uikit/styles/styles.css';
2
3
  /* use this for style redefinitions to awoid problems with
3
4
  unpredictable css rules order in build */
@@ -1,3 +1,4 @@
1
+ @import '@gravity-ui/uikit/styles/fonts.css';
1
2
  @import '~@gravity-ui/uikit/styles/styles.css';
2
3
  @import './yfm.scss';
3
4
  @import './fonts.scss';