@gravity-ui/blog-constructor 1.0.0-aplha.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +231 -0
- package/LICENSE +21 -0
- package/README.md +14 -0
- package/build/cjs/blocks/Author/Author.css +31 -0
- package/build/cjs/blocks/Author/Author.d.ts +3 -0
- package/build/cjs/blocks/Author/Author.js +60 -0
- package/build/cjs/blocks/Banner/Banner.css +58 -0
- package/build/cjs/blocks/Banner/Banner.d.ts +3 -0
- package/build/cjs/blocks/Banner/Banner.js +51 -0
- package/build/cjs/blocks/CTA/CTA.css +56 -0
- package/build/cjs/blocks/CTA/CTA.d.ts +3 -0
- package/build/cjs/blocks/CTA/CTA.js +44 -0
- package/build/cjs/blocks/ColoredText/ColoredText.css +28 -0
- package/build/cjs/blocks/ColoredText/ColoredText.d.ts +3 -0
- package/build/cjs/blocks/ColoredText/ColoredText.js +37 -0
- package/build/cjs/blocks/Feed/Feed.d.ts +3 -0
- package/build/cjs/blocks/Feed/Feed.js +183 -0
- package/build/cjs/blocks/Feed/reducer.d.ts +65 -0
- package/build/cjs/blocks/Feed/reducer.js +40 -0
- package/build/cjs/blocks/Header/Header.d.ts +3 -0
- package/build/cjs/blocks/Header/Header.js +63 -0
- package/build/cjs/blocks/Layout/Layout.css +22 -0
- package/build/cjs/blocks/Layout/Layout.d.ts +3 -0
- package/build/cjs/blocks/Layout/Layout.js +78 -0
- package/build/cjs/blocks/Media/Media.css +41 -0
- package/build/cjs/blocks/Media/Media.d.ts +3 -0
- package/build/cjs/blocks/Media/Media.js +38 -0
- package/build/cjs/blocks/Meta/Meta.css +7 -0
- package/build/cjs/blocks/Meta/Meta.d.ts +3 -0
- package/build/cjs/blocks/Meta/Meta.js +66 -0
- package/build/cjs/blocks/Suggest/Suggest.d.ts +12 -0
- package/build/cjs/blocks/Suggest/Suggest.js +61 -0
- package/build/cjs/blocks/YFM/YFM.d.ts +3 -0
- package/build/cjs/blocks/YFM/YFM.js +24 -0
- package/build/cjs/blocks/constants.d.ts +8 -0
- package/build/cjs/blocks/constants.js +8 -0
- package/build/cjs/components/ButtonWithIcon/ButtonWithIcon.css +76 -0
- package/build/cjs/components/ButtonWithIcon/ButtonWithIcon.d.ts +12 -0
- package/build/cjs/components/ButtonWithIcon/ButtonWithIcon.js +13 -0
- package/build/cjs/components/FeedHeader/FeedHeader.css +54 -0
- package/build/cjs/components/FeedHeader/FeedHeader.d.ts +8 -0
- package/build/cjs/components/FeedHeader/FeedHeader.js +24 -0
- package/build/cjs/components/FeedHeader/components/Controls/Controls.css +107 -0
- package/build/cjs/components/FeedHeader/components/Controls/Controls.d.ts +16 -0
- package/build/cjs/components/FeedHeader/components/Controls/Controls.js +106 -0
- package/build/cjs/components/FeedHeader/components/Controls/customRenders.d.ts +11 -0
- package/build/cjs/components/FeedHeader/components/Controls/customRenders.js +22 -0
- package/build/cjs/components/FeedHeader/components/CustomSelectOption/CustomSelectOption.css +14 -0
- package/build/cjs/components/FeedHeader/components/CustomSelectOption/CustomSelectOption.d.ts +8 -0
- package/build/cjs/components/FeedHeader/components/CustomSelectOption/CustomSelectOption.js +13 -0
- package/build/cjs/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.css +53 -0
- package/build/cjs/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.d.ts +11 -0
- package/build/cjs/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js +47 -0
- package/build/cjs/components/MetaWrapper/MetaWrapper.d.ts +10 -0
- package/build/cjs/components/MetaWrapper/MetaWrapper.js +18 -0
- package/build/cjs/components/Paginator/Paginator.css +54 -0
- package/build/cjs/components/Paginator/Paginator.d.ts +2 -0
- package/build/cjs/components/Paginator/Paginator.js +118 -0
- package/build/cjs/components/Paginator/components/NavigationButton.d.ts +6 -0
- package/build/cjs/components/Paginator/components/NavigationButton.js +13 -0
- package/build/cjs/components/Paginator/components/PaginatorItem.d.ts +2 -0
- package/build/cjs/components/Paginator/components/PaginatorItem.js +15 -0
- package/build/cjs/components/Paginator/types.d.ts +29 -0
- package/build/cjs/components/Paginator/types.js +8 -0
- package/build/cjs/components/Paginator/utils.d.ts +3 -0
- package/build/cjs/components/Paginator/utils.js +32 -0
- package/build/cjs/components/PostCard/PostCard.css +85 -0
- package/build/cjs/components/PostCard/PostCard.d.ts +12 -0
- package/build/cjs/components/PostCard/PostCard.js +60 -0
- package/build/cjs/components/PostInfo/PostInfo.css +88 -0
- package/build/cjs/components/PostInfo/PostInfo.d.ts +28 -0
- package/build/cjs/components/PostInfo/PostInfo.js +55 -0
- package/build/cjs/components/PostInfo/SuggestPostInfo.d.ts +27 -0
- package/build/cjs/components/PostInfo/SuggestPostInfo.js +41 -0
- package/build/cjs/components/PostInfo/components/Date.d.ts +7 -0
- package/build/cjs/components/PostInfo/components/Date.js +36 -0
- package/build/cjs/components/PostInfo/components/ReadingTime.d.ts +7 -0
- package/build/cjs/components/PostInfo/components/ReadingTime.js +18 -0
- package/build/cjs/components/PostInfo/components/Save.d.ts +25 -0
- package/build/cjs/components/PostInfo/components/Save.js +73 -0
- package/build/cjs/components/PostInfo/components/Sharing.d.ts +7 -0
- package/build/cjs/components/PostInfo/components/Sharing.js +54 -0
- package/build/cjs/components/Posts/Posts.css +28 -0
- package/build/cjs/components/Posts/Posts.d.ts +19 -0
- package/build/cjs/components/Posts/Posts.js +32 -0
- package/build/cjs/components/PostsEmpty/PostsEmpty.css +25 -0
- package/build/cjs/components/PostsEmpty/PostsEmpty.d.ts +2 -0
- package/build/cjs/components/PostsEmpty/PostsEmpty.js +14 -0
- package/build/cjs/components/PostsError/PostError.css +30 -0
- package/build/cjs/components/PostsError/PostsError.d.ts +6 -0
- package/build/cjs/components/PostsError/PostsError.js +20 -0
- package/build/cjs/components/Search/Search.css +33 -0
- package/build/cjs/components/Search/Search.d.ts +15 -0
- package/build/cjs/components/Search/Search.js +67 -0
- package/build/cjs/components/Wrapper/Wrapper.css +32 -0
- package/build/cjs/components/Wrapper/Wrapper.d.ts +10 -0
- package/build/cjs/components/Wrapper/Wrapper.js +17 -0
- package/build/cjs/configure.d.ts +5 -0
- package/build/cjs/configure.js +8 -0
- package/build/cjs/constants.d.ts +27 -0
- package/build/cjs/constants.js +34 -0
- package/build/cjs/constructor/BlogConstructorProvider.d.ts +16 -0
- package/build/cjs/constructor/BlogConstructorProvider.js +46 -0
- package/build/cjs/constructor/blocksMap.d.ts +18 -0
- package/build/cjs/constructor/blocksMap.js +30 -0
- package/build/cjs/containers/BlogPage/BlogPage.css +21 -0
- package/build/cjs/containers/BlogPage/BlogPage.d.ts +15 -0
- package/build/cjs/containers/BlogPage/BlogPage.js +30 -0
- package/build/cjs/containers/BlogPostPage/BlogPostPage.css +251 -0
- package/build/cjs/containers/BlogPostPage/BlogPostPage.d.ts +18 -0
- package/build/cjs/containers/BlogPostPage/BlogPostPage.js +42 -0
- package/build/cjs/contexts/DeviceContext.d.ts +4 -0
- package/build/cjs/contexts/DeviceContext.js +8 -0
- package/build/cjs/contexts/FeedContext.d.ts +13 -0
- package/build/cjs/contexts/FeedContext.js +8 -0
- package/build/cjs/contexts/LikesContext.d.ts +7 -0
- package/build/cjs/contexts/LikesContext.js +8 -0
- package/build/cjs/contexts/LocaleContext.d.ts +6 -0
- package/build/cjs/contexts/LocaleContext.js +16 -0
- package/build/cjs/contexts/MobileContext.d.ts +2 -0
- package/build/cjs/contexts/MobileContext.js +8 -0
- package/build/cjs/contexts/PostPageContext.d.ts +14 -0
- package/build/cjs/contexts/PostPageContext.js +8 -0
- package/build/cjs/contexts/RouterContext.d.ts +9 -0
- package/build/cjs/contexts/RouterContext.js +8 -0
- package/build/cjs/contexts/UserContext.d.ts +18 -0
- package/build/cjs/contexts/UserContext.js +8 -0
- package/build/cjs/contexts/theme/ThemeContext.d.ts +8 -0
- package/build/cjs/contexts/theme/ThemeContext.js +13 -0
- package/build/cjs/contexts/theme/ThemeProvider.d.ts +23 -0
- package/build/cjs/contexts/theme/ThemeProvider.js +51 -0
- package/build/cjs/contexts/theme/ThemeValueContext.d.ts +7 -0
- package/build/cjs/contexts/theme/ThemeValueContext.js +11 -0
- package/build/cjs/contexts/theme/index.d.ts +6 -0
- package/build/cjs/contexts/theme/index.js +22 -0
- package/build/cjs/contexts/theme/useTheme.d.ts +2 -0
- package/build/cjs/contexts/theme/useTheme.js +13 -0
- package/build/cjs/contexts/theme/useThemeValue.d.ts +2 -0
- package/build/cjs/contexts/theme/useThemeValue.js +13 -0
- package/build/cjs/contexts/theme/withTheme.d.ts +6 -0
- package/build/cjs/contexts/theme/withTheme.js +21 -0
- package/build/cjs/contexts/theme/withThemeValue.d.ts +6 -0
- package/build/cjs/contexts/theme/withThemeValue.js +21 -0
- package/build/cjs/counters/metrika.d.ts +59 -0
- package/build/cjs/counters/metrika.js +170 -0
- package/build/cjs/counters/utils.d.ts +5 -0
- package/build/cjs/counters/utils.js +9 -0
- package/build/cjs/hooks/useIsIPhone.d.ts +1 -0
- package/build/cjs/hooks/useIsIPhone.js +10 -0
- package/build/cjs/hooks/useLikes.d.ts +15 -0
- package/build/cjs/hooks/useLikes.js +35 -0
- package/build/cjs/i18n/index.d.ts +22 -0
- package/build/cjs/i18n/index.js +74 -0
- package/build/cjs/icons/Close.d.ts +2 -0
- package/build/cjs/icons/Close.js +11 -0
- package/build/cjs/icons/DropdownArrow.d.ts +2 -0
- package/build/cjs/icons/DropdownArrow.js +11 -0
- package/build/cjs/icons/Save.d.ts +2 -0
- package/build/cjs/icons/Save.js +11 -0
- package/build/cjs/icons/SaveFilled.d.ts +2 -0
- package/build/cjs/icons/SaveFilled.js +11 -0
- package/build/cjs/icons/SearchIcon.d.ts +2 -0
- package/build/cjs/icons/SearchIcon.js +11 -0
- package/build/cjs/icons/ShareArrowUp.d.ts +2 -0
- package/build/cjs/icons/ShareArrowUp.js +11 -0
- package/build/cjs/icons/Time.d.ts +2 -0
- package/build/cjs/icons/Time.js +11 -0
- package/build/cjs/index.d.ts +7 -0
- package/build/cjs/index.js +29 -0
- package/build/cjs/internal-typings/bem-cn-lite.d.ts +17 -0
- package/build/cjs/internal-typings/global.d.ts +5 -0
- package/build/cjs/models/blocks.d.ts +84 -0
- package/build/cjs/models/blocks.js +2 -0
- package/build/cjs/models/common.d.ts +151 -0
- package/build/cjs/models/common.js +22 -0
- package/build/cjs/models/locale.d.ts +29 -0
- package/build/cjs/models/locale.js +14 -0
- package/build/cjs/models/paddings.d.ts +16 -0
- package/build/cjs/models/paddings.js +10 -0
- package/build/cjs/utils/cn.d.ts +4 -0
- package/build/cjs/utils/cn.js +12 -0
- package/build/cjs/utils/common.d.ts +42 -0
- package/build/cjs/utils/common.js +120 -0
- package/build/cjs/utils/date.d.ts +13 -0
- package/build/cjs/utils/date.js +59 -0
- package/build/cjs/utils/svg.d.ts +3 -0
- package/build/cjs/utils/svg.js +7 -0
- package/build/esm/blocks/Author/Author.css +31 -0
- package/build/esm/blocks/Author/Author.d.ts +4 -0
- package/build/esm/blocks/Author/Author.js +34 -0
- package/build/esm/blocks/Banner/Banner.css +58 -0
- package/build/esm/blocks/Banner/Banner.d.ts +4 -0
- package/build/esm/blocks/Banner/Banner.js +45 -0
- package/build/esm/blocks/CTA/CTA.css +56 -0
- package/build/esm/blocks/CTA/CTA.d.ts +4 -0
- package/build/esm/blocks/CTA/CTA.js +38 -0
- package/build/esm/blocks/ColoredText/ColoredText.css +28 -0
- package/build/esm/blocks/ColoredText/ColoredText.d.ts +4 -0
- package/build/esm/blocks/ColoredText/ColoredText.js +31 -0
- package/build/esm/blocks/Feed/Feed.d.ts +3 -0
- package/build/esm/blocks/Feed/Feed.js +153 -0
- package/build/esm/blocks/Feed/reducer.d.ts +65 -0
- package/build/esm/blocks/Feed/reducer.js +36 -0
- package/build/esm/blocks/Header/Header.d.ts +3 -0
- package/build/esm/blocks/Header/Header.js +36 -0
- package/build/esm/blocks/Layout/Layout.css +22 -0
- package/build/esm/blocks/Layout/Layout.d.ts +4 -0
- package/build/esm/blocks/Layout/Layout.js +52 -0
- package/build/esm/blocks/Media/Media.css +41 -0
- package/build/esm/blocks/Media/Media.d.ts +4 -0
- package/build/esm/blocks/Media/Media.js +32 -0
- package/build/esm/blocks/Meta/Meta.css +7 -0
- package/build/esm/blocks/Meta/Meta.d.ts +4 -0
- package/build/esm/blocks/Meta/Meta.js +40 -0
- package/build/esm/blocks/Suggest/Suggest.d.ts +12 -0
- package/build/esm/blocks/Suggest/Suggest.js +34 -0
- package/build/esm/blocks/YFM/YFM.d.ts +3 -0
- package/build/esm/blocks/YFM/YFM.js +17 -0
- package/build/esm/blocks/constants.d.ts +8 -0
- package/build/esm/blocks/constants.js +5 -0
- package/build/esm/components/ButtonWithIcon/ButtonWithIcon.css +76 -0
- package/build/esm/components/ButtonWithIcon/ButtonWithIcon.d.ts +13 -0
- package/build/esm/components/ButtonWithIcon/ButtonWithIcon.js +7 -0
- package/build/esm/components/FeedHeader/FeedHeader.css +54 -0
- package/build/esm/components/FeedHeader/FeedHeader.d.ts +9 -0
- package/build/esm/components/FeedHeader/FeedHeader.js +18 -0
- package/build/esm/components/FeedHeader/components/Controls/Controls.css +107 -0
- package/build/esm/components/FeedHeader/components/Controls/Controls.d.ts +17 -0
- package/build/esm/components/FeedHeader/components/Controls/Controls.js +77 -0
- package/build/esm/components/FeedHeader/components/Controls/customRenders.d.ts +12 -0
- package/build/esm/components/FeedHeader/components/Controls/customRenders.js +14 -0
- package/build/esm/components/FeedHeader/components/CustomSelectOption/CustomSelectOption.css +14 -0
- package/build/esm/components/FeedHeader/components/CustomSelectOption/CustomSelectOption.d.ts +9 -0
- package/build/esm/components/FeedHeader/components/CustomSelectOption/CustomSelectOption.js +7 -0
- package/build/esm/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.css +53 -0
- package/build/esm/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.d.ts +12 -0
- package/build/esm/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js +21 -0
- package/build/esm/components/MetaWrapper/MetaWrapper.d.ts +10 -0
- package/build/esm/components/MetaWrapper/MetaWrapper.js +11 -0
- package/build/esm/components/Paginator/Paginator.css +54 -0
- package/build/esm/components/Paginator/Paginator.d.ts +3 -0
- package/build/esm/components/Paginator/Paginator.js +89 -0
- package/build/esm/components/Paginator/components/NavigationButton.d.ts +7 -0
- package/build/esm/components/Paginator/components/NavigationButton.js +7 -0
- package/build/esm/components/Paginator/components/PaginatorItem.d.ts +3 -0
- package/build/esm/components/Paginator/components/PaginatorItem.js +9 -0
- package/build/esm/components/Paginator/types.d.ts +29 -0
- package/build/esm/components/Paginator/types.js +5 -0
- package/build/esm/components/Paginator/utils.d.ts +3 -0
- package/build/esm/components/Paginator/utils.js +27 -0
- package/build/esm/components/PostCard/PostCard.css +85 -0
- package/build/esm/components/PostCard/PostCard.d.ts +13 -0
- package/build/esm/components/PostCard/PostCard.js +34 -0
- package/build/esm/components/PostInfo/PostInfo.css +88 -0
- package/build/esm/components/PostInfo/PostInfo.d.ts +29 -0
- package/build/esm/components/PostInfo/PostInfo.js +29 -0
- package/build/esm/components/PostInfo/SuggestPostInfo.d.ts +28 -0
- package/build/esm/components/PostInfo/SuggestPostInfo.js +35 -0
- package/build/esm/components/PostInfo/components/Date.d.ts +8 -0
- package/build/esm/components/PostInfo/components/Date.js +10 -0
- package/build/esm/components/PostInfo/components/ReadingTime.d.ts +8 -0
- package/build/esm/components/PostInfo/components/ReadingTime.js +12 -0
- package/build/esm/components/PostInfo/components/Save.d.ts +26 -0
- package/build/esm/components/PostInfo/components/Save.js +44 -0
- package/build/esm/components/PostInfo/components/Sharing.d.ts +8 -0
- package/build/esm/components/PostInfo/components/Sharing.js +25 -0
- package/build/esm/components/Posts/Posts.css +28 -0
- package/build/esm/components/Posts/Posts.d.ts +20 -0
- package/build/esm/components/Posts/Posts.js +26 -0
- package/build/esm/components/PostsEmpty/PostsEmpty.css +25 -0
- package/build/esm/components/PostsEmpty/PostsEmpty.d.ts +3 -0
- package/build/esm/components/PostsEmpty/PostsEmpty.js +8 -0
- package/build/esm/components/PostsError/PostError.css +30 -0
- package/build/esm/components/PostsError/PostsError.d.ts +7 -0
- package/build/esm/components/PostsError/PostsError.js +14 -0
- package/build/esm/components/Search/Search.css +33 -0
- package/build/esm/components/Search/Search.d.ts +16 -0
- package/build/esm/components/Search/Search.js +41 -0
- package/build/esm/components/Wrapper/Wrapper.css +32 -0
- package/build/esm/components/Wrapper/Wrapper.d.ts +11 -0
- package/build/esm/components/Wrapper/Wrapper.js +11 -0
- package/build/esm/configure.d.ts +5 -0
- package/build/esm/configure.js +4 -0
- package/build/esm/constants.d.ts +27 -0
- package/build/esm/constants.js +31 -0
- package/build/esm/constructor/BlogConstructorProvider.d.ts +16 -0
- package/build/esm/constructor/BlogConstructorProvider.js +19 -0
- package/build/esm/constructor/blocksMap.d.ts +18 -0
- package/build/esm/constructor/blocksMap.js +28 -0
- package/build/esm/containers/BlogPage/BlogPage.css +21 -0
- package/build/esm/containers/BlogPage/BlogPage.d.ts +16 -0
- package/build/esm/containers/BlogPage/BlogPage.js +24 -0
- package/build/esm/containers/BlogPostPage/BlogPostPage.css +251 -0
- package/build/esm/containers/BlogPostPage/BlogPostPage.d.ts +19 -0
- package/build/esm/containers/BlogPostPage/BlogPostPage.js +36 -0
- package/build/esm/contexts/DeviceContext.d.ts +4 -0
- package/build/esm/contexts/DeviceContext.js +2 -0
- package/build/esm/contexts/FeedContext.d.ts +13 -0
- package/build/esm/contexts/FeedContext.js +2 -0
- package/build/esm/contexts/LikesContext.d.ts +7 -0
- package/build/esm/contexts/LikesContext.js +2 -0
- package/build/esm/contexts/LocaleContext.d.ts +6 -0
- package/build/esm/contexts/LocaleContext.js +10 -0
- package/build/esm/contexts/MobileContext.d.ts +2 -0
- package/build/esm/contexts/MobileContext.js +2 -0
- package/build/esm/contexts/PostPageContext.d.ts +14 -0
- package/build/esm/contexts/PostPageContext.js +2 -0
- package/build/esm/contexts/RouterContext.d.ts +9 -0
- package/build/esm/contexts/RouterContext.js +2 -0
- package/build/esm/contexts/UserContext.d.ts +18 -0
- package/build/esm/contexts/UserContext.js +2 -0
- package/build/esm/contexts/theme/ThemeContext.d.ts +8 -0
- package/build/esm/contexts/theme/ThemeContext.js +7 -0
- package/build/esm/contexts/theme/ThemeProvider.d.ts +23 -0
- package/build/esm/contexts/theme/ThemeProvider.js +44 -0
- package/build/esm/contexts/theme/ThemeValueContext.d.ts +7 -0
- package/build/esm/contexts/theme/ThemeValueContext.js +5 -0
- package/build/esm/contexts/theme/index.d.ts +6 -0
- package/build/esm/contexts/theme/index.js +6 -0
- package/build/esm/contexts/theme/useTheme.d.ts +2 -0
- package/build/esm/contexts/theme/useTheme.js +6 -0
- package/build/esm/contexts/theme/useThemeValue.d.ts +2 -0
- package/build/esm/contexts/theme/useThemeValue.js +6 -0
- package/build/esm/contexts/theme/withTheme.d.ts +6 -0
- package/build/esm/contexts/theme/withTheme.js +14 -0
- package/build/esm/contexts/theme/withThemeValue.d.ts +6 -0
- package/build/esm/contexts/theme/withThemeValue.js +14 -0
- package/build/esm/counters/metrika.d.ts +59 -0
- package/build/esm/counters/metrika.js +166 -0
- package/build/esm/counters/utils.d.ts +5 -0
- package/build/esm/counters/utils.js +6 -0
- package/build/esm/hooks/useIsIPhone.d.ts +1 -0
- package/build/esm/hooks/useIsIPhone.js +6 -0
- package/build/esm/hooks/useLikes.d.ts +15 -0
- package/build/esm/hooks/useLikes.js +31 -0
- package/build/esm/i18n/index.d.ts +22 -0
- package/build/esm/i18n/index.js +71 -0
- package/build/esm/icons/Close.d.ts +2 -0
- package/build/esm/icons/Close.js +4 -0
- package/build/esm/icons/DropdownArrow.d.ts +2 -0
- package/build/esm/icons/DropdownArrow.js +4 -0
- package/build/esm/icons/Save.d.ts +2 -0
- package/build/esm/icons/Save.js +4 -0
- package/build/esm/icons/SaveFilled.d.ts +2 -0
- package/build/esm/icons/SaveFilled.js +4 -0
- package/build/esm/icons/SearchIcon.d.ts +2 -0
- package/build/esm/icons/SearchIcon.js +4 -0
- package/build/esm/icons/ShareArrowUp.d.ts +2 -0
- package/build/esm/icons/ShareArrowUp.js +4 -0
- package/build/esm/icons/Time.d.ts +2 -0
- package/build/esm/icons/Time.js +4 -0
- package/build/esm/index.d.ts +7 -0
- package/build/esm/index.js +7 -0
- package/build/esm/internal-typings/bem-cn-lite.d.ts +17 -0
- package/build/esm/internal-typings/global.d.ts +5 -0
- package/build/esm/models/blocks.d.ts +84 -0
- package/build/esm/models/blocks.js +1 -0
- package/build/esm/models/common.d.ts +151 -0
- package/build/esm/models/common.js +19 -0
- package/build/esm/models/locale.d.ts +29 -0
- package/build/esm/models/locale.js +11 -0
- package/build/esm/models/paddings.d.ts +16 -0
- package/build/esm/models/paddings.js +7 -0
- package/build/esm/utils/cn.d.ts +4 -0
- package/build/esm/utils/cn.js +5 -0
- package/build/esm/utils/common.d.ts +42 -0
- package/build/esm/utils/common.js +107 -0
- package/build/esm/utils/date.d.ts +13 -0
- package/build/esm/utils/date.js +55 -0
- package/build/esm/utils/svg.d.ts +3 -0
- package/build/esm/utils/svg.js +4 -0
- package/package.json +140 -0
- package/server/data/config.d.ts +32 -0
- package/server/data/config.js +39 -0
- package/server/data/contentFilter.d.ts +27 -0
- package/server/data/contentFilter.js +61 -0
- package/server/data/createReadableContent.d.ts +17 -0
- package/server/data/createReadableContent.js +47 -0
- package/server/data/sanitizeMeta.d.ts +24 -0
- package/server/data/sanitizeMeta.js +18 -0
- package/server/data/transformPageContent.d.ts +21 -0
- package/server/data/transformPageContent.js +35 -0
- package/server/data/transformPost.d.ts +11 -0
- package/server/data/transformPost.js +34 -0
- package/server/index.d.ts +4 -0
- package/server/index.js +11 -0
- package/server/models/blocks.d.ts +84 -0
- package/server/models/blocks.js +2 -0
- package/server/models/common.d.ts +151 -0
- package/server/models/common.js +22 -0
- package/server/models/locale.d.ts +29 -0
- package/server/models/locale.js +14 -0
- package/server/models/paddings.d.ts +16 -0
- package/server/models/paddings.js +10 -0
- package/styles/fonts.css +195 -0
- package/styles/fonts.scss +223 -0
- package/styles/mixins.css +2 -0
- package/styles/mixins.scss +59 -0
- package/styles/root.css +21 -0
- package/styles/root.scss +25 -0
- package/styles/storybook/common.scss +29 -0
- package/styles/storybook/index.scss +21 -0
- package/styles/storybook/palette.scss +75 -0
- package/styles/storybook/typography.scss +139 -0
- package/styles/styles.css +196 -0
- package/styles/styles.scss +2 -0
- package/styles/variables.css +0 -0
- package/styles/variables.scss +7 -0
- package/styles/yfm.css +103 -0
- package/styles/yfm.scss +123 -0
@@ -0,0 +1,61 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
+
exports.Suggest = void 0;
|
27
|
+
const react_1 = __importStar(require("react"));
|
28
|
+
const page_constructor_1 = require("@gravity-ui/page-constructor");
|
29
|
+
const i18n_1 = require("../../i18n");
|
30
|
+
const Wrapper_1 = require("../../components/Wrapper/Wrapper");
|
31
|
+
const PostCard_1 = require("../../components/PostCard/PostCard");
|
32
|
+
const paddings_1 = require("../../models/paddings");
|
33
|
+
const PostPageContext_1 = require("../../contexts/PostPageContext");
|
34
|
+
const constants_1 = require("../../constants");
|
35
|
+
const metrikaGoals = [
|
36
|
+
{
|
37
|
+
name: constants_1.BlogMetrikaGoalIds.suggest,
|
38
|
+
isCrossSite: true,
|
39
|
+
},
|
40
|
+
];
|
41
|
+
/**
|
42
|
+
* Suggested posts block
|
43
|
+
*
|
44
|
+
* @param posts - suggested posts list
|
45
|
+
* @param paddingTop - padding top code
|
46
|
+
* @param paddingBottom - padding bottom code
|
47
|
+
*
|
48
|
+
* @returns -jsx
|
49
|
+
*/
|
50
|
+
const Suggest = ({ paddingTop = 'l', paddingBottom = 'l' }) => {
|
51
|
+
const { suggestedPosts } = (0, react_1.useContext)(PostPageContext_1.PostPageContext);
|
52
|
+
if (suggestedPosts.length === 0) {
|
53
|
+
return null;
|
54
|
+
}
|
55
|
+
return (react_1.default.createElement(Wrapper_1.Wrapper, { paddings: {
|
56
|
+
[paddings_1.PaddingsDirections.top]: paddingTop,
|
57
|
+
[paddings_1.PaddingsDirections.bottom]: paddingBottom,
|
58
|
+
} },
|
59
|
+
react_1.default.createElement(page_constructor_1.SliderBlock, { slidesToShow: { xl: 3, lg: 2, sm: 1 }, title: { text: (0, i18n_1.i18)(i18n_1.Keyset.TitleSuggest) } }, suggestedPosts.map((post) => (react_1.default.createElement(PostCard_1.PostCard, { key: post.id, metrikaGoals: metrikaGoals, post: post }))))));
|
60
|
+
};
|
61
|
+
exports.Suggest = Suggest;
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.YFM = void 0;
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
const page_constructor_1 = require("@gravity-ui/page-constructor");
|
9
|
+
const bem_cn_lite_1 = __importDefault(require("bem-cn-lite"));
|
10
|
+
const Wrapper_1 = require("../../components/Wrapper/Wrapper");
|
11
|
+
const paddings_1 = require("../../models/paddings");
|
12
|
+
const b = (0, bem_cn_lite_1.default)('yfm');
|
13
|
+
const YFM = (props) => {
|
14
|
+
const { text, paddingTop, paddingBottom } = props;
|
15
|
+
return (react_1.default.createElement(Wrapper_1.Wrapper, { paddings: {
|
16
|
+
[paddings_1.PaddingsDirections.top]: paddingTop,
|
17
|
+
[paddings_1.PaddingsDirections.bottom]: paddingBottom,
|
18
|
+
} },
|
19
|
+
react_1.default.createElement(page_constructor_1.YFMWrapper, { content: text, modifiers: {
|
20
|
+
blog: true,
|
21
|
+
resetPaddings: true,
|
22
|
+
}, className: b({ 'no-list-reset': true }) })));
|
23
|
+
};
|
24
|
+
exports.YFM = YFM;
|
@@ -0,0 +1,8 @@
|
|
1
|
+
export declare const CONTENT_DEFAULT_SIZE = "s";
|
2
|
+
export declare const CONTENT_DEFAULT_COL_SIZES: {
|
3
|
+
all: number;
|
4
|
+
md: number;
|
5
|
+
};
|
6
|
+
export declare const CONTENT_DEFAULT_THEME = "default";
|
7
|
+
export declare const DEFAULT_PAGE = 1;
|
8
|
+
export declare const DEFAULT_ROWS_PER_PAGE = 12;
|
@@ -0,0 +1,8 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.DEFAULT_ROWS_PER_PAGE = exports.DEFAULT_PAGE = exports.CONTENT_DEFAULT_THEME = exports.CONTENT_DEFAULT_COL_SIZES = exports.CONTENT_DEFAULT_SIZE = void 0;
|
4
|
+
exports.CONTENT_DEFAULT_SIZE = 's';
|
5
|
+
exports.CONTENT_DEFAULT_COL_SIZES = { all: 12, md: 12 };
|
6
|
+
exports.CONTENT_DEFAULT_THEME = 'default';
|
7
|
+
exports.DEFAULT_PAGE = 1;
|
8
|
+
exports.DEFAULT_ROWS_PER_PAGE = 12;
|
@@ -0,0 +1,76 @@
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
2
|
+
unpredictable css rules order in build */
|
3
|
+
.bc-button-with-icon {
|
4
|
+
display: inline-block;
|
5
|
+
margin: 0;
|
6
|
+
padding: 0;
|
7
|
+
font: inherit;
|
8
|
+
border: none;
|
9
|
+
outline: none;
|
10
|
+
color: inherit;
|
11
|
+
background: none;
|
12
|
+
cursor: pointer;
|
13
|
+
outline: none;
|
14
|
+
display: flex;
|
15
|
+
align-items: center;
|
16
|
+
justify-content: center;
|
17
|
+
transition: color 0.2s;
|
18
|
+
}
|
19
|
+
.utilityfocus .bc-button-with-icon:focus {
|
20
|
+
outline: 2px solid #ffdb4d;
|
21
|
+
}
|
22
|
+
.bc-button-with-icon_size_xs {
|
23
|
+
height: 24px;
|
24
|
+
width: 24px;
|
25
|
+
}
|
26
|
+
.bc-button-with-icon_size_s {
|
27
|
+
height: 28px;
|
28
|
+
width: 28px;
|
29
|
+
}
|
30
|
+
.bc-button-with-icon_size_m {
|
31
|
+
height: 32px;
|
32
|
+
width: 32px;
|
33
|
+
}
|
34
|
+
.bc-button-with-icon_size_n {
|
35
|
+
height: 36px;
|
36
|
+
width: 36px;
|
37
|
+
}
|
38
|
+
.bc-button-with-icon_theme_primary {
|
39
|
+
color: var(--www-text-content-color);
|
40
|
+
transition: color 0.2s;
|
41
|
+
}
|
42
|
+
.bc-button-with-icon_theme_primary:hover {
|
43
|
+
color: var(--yc-color-text-primary);
|
44
|
+
}
|
45
|
+
.bc-button-with-icon_theme_secondary {
|
46
|
+
color: var(--yc-color-text-secondary);
|
47
|
+
transition: color 0.2s;
|
48
|
+
}
|
49
|
+
.bc-button-with-icon_theme_secondary:hover {
|
50
|
+
color: var(--www-text-content-color);
|
51
|
+
}
|
52
|
+
.bc-button-with-icon_theme_link {
|
53
|
+
color: var(--www-text-content-color);
|
54
|
+
transition: color 0.2s;
|
55
|
+
}
|
56
|
+
.bc-button-with-icon_theme_link:hover {
|
57
|
+
color: var(--yc-color-text-link-hover);
|
58
|
+
}
|
59
|
+
.bc-button-with-icon_theme_accent {
|
60
|
+
color: var(--yc-color-text-yandex-red);
|
61
|
+
transition: opacity 0.2s;
|
62
|
+
opacity: 0.7;
|
63
|
+
}
|
64
|
+
.bc-button-with-icon_theme_accent:hover {
|
65
|
+
opacity: 1;
|
66
|
+
}
|
67
|
+
.bc-button-with-icon_disabled {
|
68
|
+
cursor: default;
|
69
|
+
color: var(--yc-color-text-secondary);
|
70
|
+
}
|
71
|
+
.bc-button-with-icon_disabled:hover {
|
72
|
+
color: var(--yc-color-text-secondary);
|
73
|
+
}
|
74
|
+
.mobile .bc-button-with-icon:hover {
|
75
|
+
color: inherit;
|
76
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { SVGIconData } from '@gravity-ui/uikit/build/esm/components/Icon/types';
|
3
|
+
import { ClassNameProps } from '../../models/common';
|
4
|
+
export interface ButtonWithIconProps extends ClassNameProps {
|
5
|
+
icon: SVGIconData;
|
6
|
+
theme?: 'primary' | 'secondary' | 'link' | 'accent';
|
7
|
+
size?: 'xs' | 's' | 'm' | 'n';
|
8
|
+
iconSize?: number;
|
9
|
+
disabled?: boolean;
|
10
|
+
onClick?: (event: React.MouseEvent) => void;
|
11
|
+
}
|
12
|
+
export declare const ButtonWithIcon: React.FC<ButtonWithIconProps>;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.ButtonWithIcon = void 0;
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
9
|
+
const cn_1 = require("../../utils/cn");
|
10
|
+
const b = (0, cn_1.block)('button-with-icon');
|
11
|
+
const ButtonWithIcon = ({ icon, theme = 'primary', size = 's', iconSize = 16, disabled = false, onClick, className, }) => (react_1.default.createElement("button", { type: "button", className: b({ size, theme, disabled }, className), onClick: disabled ? undefined : onClick, disabled: disabled },
|
12
|
+
react_1.default.createElement(uikit_1.Icon, { data: icon, size: iconSize })));
|
13
|
+
exports.ButtonWithIcon = ButtonWithIcon;
|
@@ -0,0 +1,54 @@
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
2
|
+
unpredictable css rules order in build */
|
3
|
+
.bc-feed-header {
|
4
|
+
margin-top: 16px;
|
5
|
+
}
|
6
|
+
.bc-feed-header__header {
|
7
|
+
padding: 16px 0;
|
8
|
+
}
|
9
|
+
.bc-feed-header__content {
|
10
|
+
position: relative;
|
11
|
+
height: 100%;
|
12
|
+
padding-bottom: 0;
|
13
|
+
}
|
14
|
+
.bc-feed-header__content_offset_large {
|
15
|
+
padding: calc(128px - 96px) 0 16px;
|
16
|
+
margin-bottom: -48px;
|
17
|
+
}
|
18
|
+
.bc-feed-header__content_theme_dark.bc-feed-header__content_theme_dark .bc-feed-header__title,
|
19
|
+
.bc-feed-header__content_theme_dark.bc-feed-header__content_theme_dark .bc-feed-header__description * {
|
20
|
+
color: var(--yc-color-text-light-primary);
|
21
|
+
}
|
22
|
+
|
23
|
+
.bc-feed-header_has-background {
|
24
|
+
height: calc(100% + 96px);
|
25
|
+
}
|
26
|
+
.bc-feed-header__content {
|
27
|
+
position: relative;
|
28
|
+
z-index: 10;
|
29
|
+
}
|
30
|
+
.bc-feed-header__background, .bc-feed-header__background-media {
|
31
|
+
z-index: 5;
|
32
|
+
}
|
33
|
+
.bc-feed-header__background {
|
34
|
+
position: absolute;
|
35
|
+
top: 0;
|
36
|
+
left: 50%;
|
37
|
+
width: 1440px;
|
38
|
+
transform: translateX(-50%);
|
39
|
+
max-width: 100vw;
|
40
|
+
height: 100%;
|
41
|
+
border-radius: var(--bc-border-radius);
|
42
|
+
}
|
43
|
+
@media (max-width: 769px) {
|
44
|
+
.bc-feed-header_has-background .bc-feed-header__background-img {
|
45
|
+
display: none;
|
46
|
+
}
|
47
|
+
.bc-feed-header_has-background .bc-feed-header__content_vertical-offset_s, .bc-feed-header_has-background .bc-feed-header__content_vertical-offset_m, .bc-feed-header_has-background .bc-feed-header__content_vertical-offset_l, .bc-feed-header_has-background .bc-feed-header__content_vertical-offset_xl {
|
48
|
+
padding: calc(96px - 16px) 0;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
.mobile .bc-feed-header_has-background .bc-feed-header__title {
|
52
|
+
font-size: var(--yc-text-display-2-font-size);
|
53
|
+
line-height: var(--yc-text-display-2-line-height);
|
54
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { HeaderBlockProps, ClassNameProps } from '../../models/common';
|
3
|
+
import { ControlsProps } from './components/Controls/Controls';
|
4
|
+
type HeaderProps = Pick<HeaderBlockProps, 'background' | 'offset' | 'theme' | 'verticalOffset'>;
|
5
|
+
type FeedHeaderProps = HeaderProps & ControlsProps;
|
6
|
+
type FeedHeaderContainerProps = FeedHeaderProps & ClassNameProps;
|
7
|
+
export declare const FeedHeader: React.FC<FeedHeaderContainerProps>;
|
8
|
+
export {};
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.FeedHeader = void 0;
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
const page_constructor_1 = require("@gravity-ui/page-constructor");
|
9
|
+
const Controls_1 = require("./components/Controls/Controls");
|
10
|
+
const cn_1 = require("../../utils/cn");
|
11
|
+
const b = (0, cn_1.block)('feed-header');
|
12
|
+
const FeedHeader = ({ tags, services, setIsFetching, offset = 'default', background, theme = 'default', verticalOffset = 'l', className, handleChangeQuery, queryParams, }) => {
|
13
|
+
const backgroundThemed = background && (0, page_constructor_1.getThemedValue)(background, theme);
|
14
|
+
return (react_1.default.createElement("header", { className: b('header', { ['has-background']: Boolean(background) }, className) },
|
15
|
+
(backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.color) ? (react_1.default.createElement(page_constructor_1.FullWidthBackground, { style: { backgroundColor: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.color }, theme: "rounded" })) : null,
|
16
|
+
react_1.default.createElement(page_constructor_1.Grid, { className: b('content', { offset, theme, 'vertical-offset': verticalOffset }) },
|
17
|
+
backgroundThemed ? (react_1.default.createElement(page_constructor_1.BackgroundImage, { src: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.url, className: b('background'), imageClassName: b('background-img'), style: {
|
18
|
+
backgroundColor: backgroundThemed.fullWidth
|
19
|
+
? ''
|
20
|
+
: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.color,
|
21
|
+
}, disableCompress: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.disableCompress })) : null,
|
22
|
+
react_1.default.createElement(Controls_1.Controls, { tags: tags, services: services, setIsFetching: setIsFetching, handleChangeQuery: handleChangeQuery, queryParams: queryParams }))));
|
23
|
+
};
|
24
|
+
exports.FeedHeader = FeedHeader;
|
@@ -0,0 +1,107 @@
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
2
|
+
unpredictable css rules order in build */
|
3
|
+
.bc-feed-controls__header {
|
4
|
+
position: relative;
|
5
|
+
display: flex;
|
6
|
+
flex-direction: column;
|
7
|
+
border-radius: var(--bc-border-radius);
|
8
|
+
padding-bottom: 20px;
|
9
|
+
z-index: 10;
|
10
|
+
}
|
11
|
+
.bc-feed-controls__header-item {
|
12
|
+
display: flex;
|
13
|
+
justify-content: center;
|
14
|
+
flex-wrap: wrap;
|
15
|
+
}
|
16
|
+
.bc-feed-controls__header-item_title {
|
17
|
+
font-size: var(--yc-text-display-4-font-size);
|
18
|
+
line-height: var(--yc-text-display-4-line-height);
|
19
|
+
padding-top: 112px;
|
20
|
+
padding-bottom: 96px;
|
21
|
+
}
|
22
|
+
.bc-feed-controls__search {
|
23
|
+
background-color: var(--yc-color-base-background);
|
24
|
+
border-radius: 10px;
|
25
|
+
width: 100%;
|
26
|
+
max-width: 100%;
|
27
|
+
}
|
28
|
+
.bc-feed-controls__search .yc-text-input_view_normal .yc-text-input__control {
|
29
|
+
border-color: var(--yc-color-base-background);
|
30
|
+
}
|
31
|
+
.bc-feed-controls__select {
|
32
|
+
background-color: var(--yc-color-base-background);
|
33
|
+
border-radius: 10px;
|
34
|
+
width: 100%;
|
35
|
+
}
|
36
|
+
.bc-feed-controls__popup.bc-feed-controls__popup {
|
37
|
+
border-radius: 12px;
|
38
|
+
}
|
39
|
+
.bc-feed-controls__popup.bc-feed-controls__popup .g-select-filter + .g-select-list {
|
40
|
+
max-height: 350px !important;
|
41
|
+
margin-top: 0;
|
42
|
+
}
|
43
|
+
.bc-feed-controls__popup.bc-feed-controls__popup .g-select-filter + .g-select-list::-webkit-scrollbar {
|
44
|
+
display: none;
|
45
|
+
}
|
46
|
+
.bc-feed-controls__popup.bc-feed-controls__popup .yc-list__item {
|
47
|
+
margin: 4px;
|
48
|
+
border-radius: 8px;
|
49
|
+
}
|
50
|
+
.bc-feed-controls__popup.bc-feed-controls__popup .g-select-filter {
|
51
|
+
margin-top: 4px;
|
52
|
+
padding: 4px;
|
53
|
+
border-bottom: 1px solid var(--yc-color-line-generic);
|
54
|
+
}
|
55
|
+
.bc-feed-controls__popup.bc-feed-controls__popup .g-select-filter .yc-text-input__control.yc-text-input__control_type_input {
|
56
|
+
border: none;
|
57
|
+
}
|
58
|
+
|
59
|
+
.bc-feed-controls__popup-filter .yc-text-input__control {
|
60
|
+
font-size: var(--yc-text-body-2-font-size);
|
61
|
+
line-height: var(--yc-text-body-2-line-height);
|
62
|
+
border: none;
|
63
|
+
}
|
64
|
+
.bc-feed-controls__popup-filter .yc-text-input__control:hover, .bc-feed-controls__popup-filter .yc-text-input__control:focus {
|
65
|
+
border: none;
|
66
|
+
}
|
67
|
+
.bc-feed-controls__select:hover {
|
68
|
+
background-color: var(--yc-color-base-background);
|
69
|
+
width: 100%;
|
70
|
+
}
|
71
|
+
.bc-feed-controls__saved-only-button {
|
72
|
+
border-radius: 10px;
|
73
|
+
}
|
74
|
+
.bc-feed-controls__saved-only-button_savedOnly {
|
75
|
+
--yc-button-background-color: var(--pc-monochrome-button);
|
76
|
+
--yc-button-background-color-hover: var(--pc-monochrome-button-hover);
|
77
|
+
color: var(--yc-color-text-light-primary);
|
78
|
+
}
|
79
|
+
.bc-feed-controls__saved-only-button_savedOnly:hover {
|
80
|
+
color: var(--yc-color-text-light-primary);
|
81
|
+
}
|
82
|
+
.bc-feed-controls__saved-only-button_savedOnly:focus {
|
83
|
+
color: var(--yc-color-base-background);
|
84
|
+
}
|
85
|
+
.bc-feed-controls__filter-item {
|
86
|
+
margin-right: 8px;
|
87
|
+
margin-left: 8px;
|
88
|
+
margin-bottom: 12px;
|
89
|
+
min-width: 230px;
|
90
|
+
flex-grow: 1;
|
91
|
+
}
|
92
|
+
@media (min-width: 577px) {
|
93
|
+
.bc-feed-controls__filter-item {
|
94
|
+
max-width: 240px;
|
95
|
+
}
|
96
|
+
}
|
97
|
+
.bc-feed-controls__filter-item_width-auto {
|
98
|
+
width: auto;
|
99
|
+
min-width: auto;
|
100
|
+
flex-grow: 0;
|
101
|
+
}
|
102
|
+
.bc-feed-controls__icon {
|
103
|
+
color: var(--yc-my-color-brand-normal);
|
104
|
+
}
|
105
|
+
.bc-feed-controls__icon_savedOnly {
|
106
|
+
color: var(--yc-color-base-background);
|
107
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import React, { ReactNode } from 'react';
|
2
|
+
import { HandleChangeQueryParams, SetQueryType, Query } from '../../../../models/common';
|
3
|
+
export type SelectItem = {
|
4
|
+
content: string;
|
5
|
+
value: string;
|
6
|
+
icon?: ReactNode;
|
7
|
+
};
|
8
|
+
export type ControlsProps = {
|
9
|
+
setIsFetching: (value: boolean) => void;
|
10
|
+
tags?: SelectItem[];
|
11
|
+
services?: SelectItem[];
|
12
|
+
handleChangeQuery: HandleChangeQueryParams;
|
13
|
+
queryParams: Query;
|
14
|
+
setQuery?: SetQueryType;
|
15
|
+
};
|
16
|
+
export declare const Controls: React.FC<ControlsProps>;
|
@@ -0,0 +1,106 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
27
|
+
};
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
29
|
+
exports.Controls = void 0;
|
30
|
+
const react_1 = __importStar(require("react"));
|
31
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
32
|
+
const Search_1 = require("../../../Search/Search");
|
33
|
+
const customRenders_1 = require("./customRenders");
|
34
|
+
const LikesContext_1 = require("../../../../contexts/LikesContext");
|
35
|
+
const constants_1 = require("../../../../constants");
|
36
|
+
const metrika_js_1 = __importDefault(require("../../../../counters/metrika.js"));
|
37
|
+
const utils_1 = require("../../../../counters/utils");
|
38
|
+
const Save_1 = require("../../../../icons/Save");
|
39
|
+
const i18n_1 = require("../../../../i18n");
|
40
|
+
const cn_1 = require("../../../../utils/cn");
|
41
|
+
const b = (0, cn_1.block)('feed-controls');
|
42
|
+
const ICON_SIZE = 16;
|
43
|
+
const DEFAULT_PAGE = 1;
|
44
|
+
const Controls = ({ setIsFetching, tags = [], services = [], handleChangeQuery, queryParams, }) => {
|
45
|
+
const { hasLikes } = (0, react_1.useContext)(LikesContext_1.LikesContext);
|
46
|
+
const { savedOnly: savedOnlyInitial, search: searchInitial, tags: tagInitial, services: servicesInitial, } = queryParams || {};
|
47
|
+
const [savedOnly, setSavedOnly] = (0, react_1.useState)(savedOnlyInitial === 'true');
|
48
|
+
const [search, setSearch] = (0, react_1.useState)(searchInitial);
|
49
|
+
const handleSavedOnly = () => {
|
50
|
+
handleChangeQuery({ savedOnly: savedOnly ? '' : 'true' });
|
51
|
+
setSavedOnly(!savedOnly);
|
52
|
+
setIsFetching(true);
|
53
|
+
};
|
54
|
+
const handleSearch = (searchValue) => {
|
55
|
+
handleChangeQuery({ search: searchValue, page: DEFAULT_PAGE });
|
56
|
+
setSearch(searchValue);
|
57
|
+
setIsFetching(true);
|
58
|
+
};
|
59
|
+
const handleTagSelect = (selectedTags) => {
|
60
|
+
metrika_js_1.default.reachGoal(utils_1.MetrikaCounter.CrossSite, constants_1.BlogMetrikaGoalIds.tag, {
|
61
|
+
theme: selectedTags[0],
|
62
|
+
});
|
63
|
+
const isEmptyTag = selectedTags.some((tag) => tag === 'empty');
|
64
|
+
handleChangeQuery({
|
65
|
+
tags: isEmptyTag ? '' : selectedTags[0],
|
66
|
+
page: DEFAULT_PAGE,
|
67
|
+
});
|
68
|
+
setIsFetching(true);
|
69
|
+
};
|
70
|
+
const handleServicesSelect = (selectedServices) => {
|
71
|
+
const forMetrikaServices = services.filter((service) => {
|
72
|
+
return selectedServices.includes(service.value);
|
73
|
+
});
|
74
|
+
const metrikaAsString = forMetrikaServices.map((service) => service.content).join(',');
|
75
|
+
metrika_js_1.default.reachGoal(utils_1.MetrikaCounter.CrossSite, constants_1.BlogMetrikaGoalIds.service, {
|
76
|
+
service: metrikaAsString,
|
77
|
+
});
|
78
|
+
const servicesAsString = selectedServices.join(',');
|
79
|
+
handleChangeQuery({ services: servicesAsString, page: DEFAULT_PAGE });
|
80
|
+
setIsFetching(true);
|
81
|
+
};
|
82
|
+
const tagsItems = (0, react_1.useMemo)(() => [{ value: 'empty', content: (0, i18n_1.i18)(i18n_1.Keyset.AllTags) }, ...tags], [tags]);
|
83
|
+
const servicesItems = (0, react_1.useMemo)(() => (servicesInitial ? [...servicesInitial.split(',')] : []), [servicesInitial]);
|
84
|
+
return (react_1.default.createElement("div", { className: b('header') },
|
85
|
+
react_1.default.createElement("h1", { className: b('header-item', { title: true }) }, (0, i18n_1.i18)(i18n_1.Keyset.Title)),
|
86
|
+
react_1.default.createElement("div", { className: b('header-item', { filters: true }) },
|
87
|
+
react_1.default.createElement("div", { className: b('filter-item') },
|
88
|
+
react_1.default.createElement(Search_1.Search, { className: b('search'), placeholder: (0, i18n_1.i18)(i18n_1.Keyset.Search), initialValue: search && typeof search === 'string' ? search : '', onSubmit: handleSearch })),
|
89
|
+
react_1.default.createElement("div", { className: b('filter-item') },
|
90
|
+
react_1.default.createElement(uikit_1.Select, { className: b('select'), size: "xl", options: tagsItems, defaultValue: [tagInitial], onUpdate: handleTagSelect, placeholder: (0, i18n_1.i18)(i18n_1.Keyset.AllTags), popupClassName: b('popup'), renderControl: (0, customRenders_1.renderSwitcher)({
|
91
|
+
initial: [tagInitial],
|
92
|
+
list: tagsItems,
|
93
|
+
defaultLabel: (0, i18n_1.i18)(i18n_1.Keyset.AllTags),
|
94
|
+
}), renderOption: customRenders_1.renderOption })),
|
95
|
+
services.length > 0 ? (react_1.default.createElement("div", { className: b('filter-item') },
|
96
|
+
react_1.default.createElement(uikit_1.Select, { className: b('select'), size: "xl", multiple: true, filterable: true, options: services, defaultValue: servicesItems, popupClassName: b('popup'), onUpdate: handleServicesSelect, placeholder: (0, i18n_1.i18)(i18n_1.Keyset.AllServices), renderControl: (0, customRenders_1.renderSwitcher)({
|
97
|
+
initial: servicesItems,
|
98
|
+
list: services,
|
99
|
+
defaultLabel: (0, i18n_1.i18)(i18n_1.Keyset.AllServices),
|
100
|
+
}), disablePortal: true, renderOption: customRenders_1.renderOption, renderFilter: customRenders_1.renderFilter }))) : null,
|
101
|
+
hasLikes ? (react_1.default.createElement("div", { className: b('filter-item', { 'width-auto': true }) },
|
102
|
+
react_1.default.createElement(uikit_1.Button, { view: 'outlined', className: b('saved-only-button', { savedOnly }), size: "xl", onClick: handleSavedOnly },
|
103
|
+
react_1.default.createElement(uikit_1.Icon, { data: Save_1.Save, size: ICON_SIZE, className: b('icon', { savedOnly }) }),
|
104
|
+
(0, i18n_1.i18)(i18n_1.Keyset.ActionSavedOnly)))) : null)));
|
105
|
+
};
|
106
|
+
exports.Controls = Controls;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { SelectProps, SelectOption } from '@gravity-ui/uikit';
|
2
|
+
import { CustomSwitcherProps } from '../CustomSwitcher/CustomSwitcher';
|
3
|
+
type RenderSwitcherType = ({ initial, list, defaultLabel, }: {
|
4
|
+
initial: CustomSwitcherProps['initial'];
|
5
|
+
list: CustomSwitcherProps['list'];
|
6
|
+
defaultLabel: string;
|
7
|
+
}) => SelectProps['renderControl'];
|
8
|
+
export declare const renderSwitcher: RenderSwitcherType;
|
9
|
+
export declare const renderFilter: SelectProps['renderFilter'];
|
10
|
+
export declare const renderOption: (option: SelectOption) => JSX.Element;
|
11
|
+
export {};
|
@@ -0,0 +1,22 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.renderOption = exports.renderFilter = exports.renderSwitcher = void 0;
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
9
|
+
const i18n_1 = require("../../../../i18n");
|
10
|
+
const cn_1 = require("../../../../utils/cn");
|
11
|
+
const CustomSwitcher_1 = require("../CustomSwitcher/CustomSwitcher");
|
12
|
+
const CustomSelectOption_1 = require("../CustomSelectOption/CustomSelectOption");
|
13
|
+
const b = (0, cn_1.block)('feed-controls');
|
14
|
+
const renderSwitcher = ({ initial, list, defaultLabel }) =>
|
15
|
+
// eslint-disable-next-line react/display-name
|
16
|
+
({ onClick, ref }) => (react_1.default.createElement(CustomSwitcher_1.CustomSwitcher, { initial: initial, defaultLabel: defaultLabel, list: list, controlRef: ref, onClick: onClick }));
|
17
|
+
exports.renderSwitcher = renderSwitcher;
|
18
|
+
const renderFilter = ({ value, ref, onChange, onKeyDown }) => (react_1.default.createElement("div", { className: b('popup-filter') },
|
19
|
+
react_1.default.createElement(uikit_1.TextInput, { controlRef: ref, controlProps: { size: 1 }, value: value, placeholder: (0, i18n_1.i18)(i18n_1.Keyset.Search), onUpdate: onChange, onKeyDown: onKeyDown })));
|
20
|
+
exports.renderFilter = renderFilter;
|
21
|
+
const renderOption = (option) => (react_1.default.createElement(CustomSelectOption_1.CustomSelectOption, { data: option }));
|
22
|
+
exports.renderOption = renderOption;
|
@@ -0,0 +1,14 @@
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
2
|
+
unpredictable css rules order in build */
|
3
|
+
.bc-feed-custom-select-option {
|
4
|
+
font-size: var(--yc-text-body-2-font-size);
|
5
|
+
line-height: var(--yc-text-body-2-line-height);
|
6
|
+
display: flex;
|
7
|
+
}
|
8
|
+
.bc-feed-custom-select-option__icon {
|
9
|
+
margin-right: 6px;
|
10
|
+
}
|
11
|
+
.bc-feed-custom-select-option__icon > svg {
|
12
|
+
width: 20px;
|
13
|
+
height: 20px;
|
14
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { SelectOption as SelectOptionType } from '@gravity-ui/uikit';
|
3
|
+
export type CustomSelectOptionProps = {
|
4
|
+
data: {
|
5
|
+
icon?: React.ReactElement;
|
6
|
+
} & SelectOptionType;
|
7
|
+
};
|
8
|
+
export declare const CustomSelectOption: ({ data }: CustomSelectOptionProps) => JSX.Element;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.CustomSelectOption = void 0;
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
const cn_1 = require("../../../../utils/cn");
|
9
|
+
const b = (0, cn_1.block)('feed-custom-select-option');
|
10
|
+
const CustomSelectOption = ({ data }) => (react_1.default.createElement("div", { className: b() },
|
11
|
+
react_1.default.createElement("span", { className: b('icon') }, data.icon),
|
12
|
+
react_1.default.createElement("span", null, data.content)));
|
13
|
+
exports.CustomSelectOption = CustomSelectOption;
|