@gravity-ui/blog-constructor 8.1.0 → 8.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/build/cjs/blocks/Banner/Banner.js +2 -2
  2. package/build/cjs/blocks/Banner/Banner.js.map +1 -1
  3. package/build/cjs/blocks/CTA/CTA.js +2 -2
  4. package/build/cjs/blocks/CTA/CTA.js.map +1 -1
  5. package/build/cjs/blocks/CompactMedia/CompactMedia.css +27 -0
  6. package/build/cjs/blocks/CompactMedia/CompactMedia.d.ts +2 -0
  7. package/build/cjs/blocks/CompactMedia/CompactMedia.js +22 -0
  8. package/build/cjs/blocks/CompactMedia/CompactMedia.js.map +1 -0
  9. package/build/cjs/blocks/CompactMedia/schema.d.ts +135 -0
  10. package/build/cjs/blocks/CompactMedia/schema.js +18 -0
  11. package/build/cjs/blocks/CompactMedia/schema.js.map +1 -0
  12. package/build/cjs/blocks/Header/Header.css +54 -0
  13. package/build/cjs/blocks/Header/Header.js +6 -4
  14. package/build/cjs/blocks/Header/Header.js.map +1 -1
  15. package/build/cjs/blocks/Meta/Meta.js +2 -2
  16. package/build/cjs/blocks/Meta/Meta.js.map +1 -1
  17. package/build/cjs/blocks/Suggest/Suggest.js +2 -2
  18. package/build/cjs/blocks/Suggest/Suggest.js.map +1 -1
  19. package/build/cjs/components/FeedHeader/components/Controls/Controls.js +2 -2
  20. package/build/cjs/components/FeedHeader/components/Controls/Controls.js.map +1 -1
  21. package/build/cjs/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js +1 -1
  22. package/build/cjs/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js.map +1 -1
  23. package/build/cjs/components/Paginator/Paginator.js +2 -2
  24. package/build/cjs/components/Paginator/Paginator.js.map +1 -1
  25. package/build/cjs/components/PostCard/PostCard.js +1 -1
  26. package/build/cjs/components/PostCard/PostCard.js.map +1 -1
  27. package/build/cjs/components/PostInfo/PostInfo.js +2 -2
  28. package/build/cjs/components/PostInfo/PostInfo.js.map +1 -1
  29. package/build/cjs/components/PostInfo/SuggestPostInfo.js +2 -2
  30. package/build/cjs/components/PostInfo/SuggestPostInfo.js.map +1 -1
  31. package/build/cjs/components/PostInfo/components/ReadingTime.js +1 -1
  32. package/build/cjs/components/PostInfo/components/ReadingTime.js.map +1 -1
  33. package/build/cjs/components/PostInfo/components/Save.js +2 -2
  34. package/build/cjs/components/PostInfo/components/Save.js.map +1 -1
  35. package/build/cjs/components/PostInfo/components/Sharing.js +1 -1
  36. package/build/cjs/components/PostInfo/components/Sharing.js.map +1 -1
  37. package/build/cjs/components/Search/Search.js +1 -1
  38. package/build/cjs/components/Search/Search.js.map +1 -1
  39. package/build/cjs/constructor/blocksMap.d.ts +1 -0
  40. package/build/cjs/constructor/blocksMap.js +2 -0
  41. package/build/cjs/constructor/blocksMap.js.map +1 -1
  42. package/build/cjs/containers/BlogPage/BlogPage.js +1 -1
  43. package/build/cjs/containers/BlogPage/BlogPage.js.map +1 -1
  44. package/build/cjs/containers/BlogPostPage/BlogPostPage.js +1 -1
  45. package/build/cjs/containers/BlogPostPage/BlogPostPage.js.map +1 -1
  46. package/build/cjs/contexts/LocaleContext.js.map +1 -1
  47. package/build/cjs/contexts/PostPageContext.d.ts +1 -1
  48. package/build/cjs/contexts/PostPageContext.js.map +1 -1
  49. package/build/cjs/contexts/SettingsContext.js.map +1 -1
  50. package/build/cjs/hooks/useExtendedComponentMap.d.ts +1 -0
  51. package/build/cjs/models/blocks.d.ts +12 -2
  52. package/build/cjs/models/blocks.js.map +1 -1
  53. package/build/cjs/models/common.d.ts +2 -1
  54. package/build/cjs/models/common.js +1 -0
  55. package/build/cjs/models/common.js.map +1 -1
  56. package/build/cjs/schema/blocks.d.ts +1 -0
  57. package/build/cjs/schema/blocks.js +1 -0
  58. package/build/cjs/schema/blocks.js.map +1 -1
  59. package/build/cjs/schema/index.d.ts +135 -0
  60. package/build/cjs/schema/index.js +2 -1
  61. package/build/cjs/schema/index.js.map +1 -1
  62. package/build/cjs/utils/common.d.ts +1 -1
  63. package/build/cjs/utils/common.js +1 -1
  64. package/build/cjs/utils/common.js.map +1 -1
  65. package/build/esm/blocks/Banner/Banner.js +2 -2
  66. package/build/esm/blocks/Banner/Banner.js.map +1 -1
  67. package/build/esm/blocks/CTA/CTA.js +2 -2
  68. package/build/esm/blocks/CTA/CTA.js.map +1 -1
  69. package/build/esm/blocks/CompactMedia/CompactMedia.css +27 -0
  70. package/build/esm/blocks/CompactMedia/CompactMedia.d.ts +3 -0
  71. package/build/esm/blocks/CompactMedia/CompactMedia.js +19 -0
  72. package/build/esm/blocks/CompactMedia/CompactMedia.js.map +1 -0
  73. package/build/esm/blocks/CompactMedia/schema.d.ts +135 -0
  74. package/build/esm/blocks/CompactMedia/schema.js +15 -0
  75. package/build/esm/blocks/CompactMedia/schema.js.map +1 -0
  76. package/build/esm/blocks/Header/Header.css +54 -0
  77. package/build/esm/blocks/Header/Header.d.ts +1 -0
  78. package/build/esm/blocks/Header/Header.js +7 -4
  79. package/build/esm/blocks/Header/Header.js.map +1 -1
  80. package/build/esm/blocks/Meta/Meta.js +2 -2
  81. package/build/esm/blocks/Meta/Meta.js.map +1 -1
  82. package/build/esm/blocks/Suggest/Suggest.js +2 -2
  83. package/build/esm/blocks/Suggest/Suggest.js.map +1 -1
  84. package/build/esm/components/FeedHeader/components/Controls/Controls.js +2 -2
  85. package/build/esm/components/FeedHeader/components/Controls/Controls.js.map +1 -1
  86. package/build/esm/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js +1 -1
  87. package/build/esm/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js.map +1 -1
  88. package/build/esm/components/Paginator/Paginator.js +2 -2
  89. package/build/esm/components/Paginator/Paginator.js.map +1 -1
  90. package/build/esm/components/PostCard/PostCard.js +1 -1
  91. package/build/esm/components/PostCard/PostCard.js.map +1 -1
  92. package/build/esm/components/PostInfo/PostInfo.js +2 -2
  93. package/build/esm/components/PostInfo/PostInfo.js.map +1 -1
  94. package/build/esm/components/PostInfo/SuggestPostInfo.js +2 -2
  95. package/build/esm/components/PostInfo/SuggestPostInfo.js.map +1 -1
  96. package/build/esm/components/PostInfo/components/ReadingTime.js +1 -1
  97. package/build/esm/components/PostInfo/components/ReadingTime.js.map +1 -1
  98. package/build/esm/components/PostInfo/components/Save.js +2 -2
  99. package/build/esm/components/PostInfo/components/Save.js.map +1 -1
  100. package/build/esm/components/PostInfo/components/Sharing.js +1 -1
  101. package/build/esm/components/PostInfo/components/Sharing.js.map +1 -1
  102. package/build/esm/components/Search/Search.js +1 -1
  103. package/build/esm/components/Search/Search.js.map +1 -1
  104. package/build/esm/constructor/blocksMap.d.ts +1 -0
  105. package/build/esm/constructor/blocksMap.js +2 -0
  106. package/build/esm/constructor/blocksMap.js.map +1 -1
  107. package/build/esm/containers/BlogPage/BlogPage.js +1 -1
  108. package/build/esm/containers/BlogPage/BlogPage.js.map +1 -1
  109. package/build/esm/containers/BlogPostPage/BlogPostPage.js +1 -1
  110. package/build/esm/containers/BlogPostPage/BlogPostPage.js.map +1 -1
  111. package/build/esm/contexts/LocaleContext.js.map +1 -1
  112. package/build/esm/contexts/PostPageContext.d.ts +1 -1
  113. package/build/esm/contexts/PostPageContext.js.map +1 -1
  114. package/build/esm/contexts/SettingsContext.js.map +1 -1
  115. package/build/esm/hooks/useExtendedComponentMap.d.ts +1 -0
  116. package/build/esm/models/blocks.d.ts +12 -2
  117. package/build/esm/models/blocks.js.map +1 -1
  118. package/build/esm/models/common.d.ts +2 -1
  119. package/build/esm/models/common.js +1 -0
  120. package/build/esm/models/common.js.map +1 -1
  121. package/build/esm/schema/blocks.d.ts +1 -0
  122. package/build/esm/schema/blocks.js +1 -0
  123. package/build/esm/schema/blocks.js.map +1 -1
  124. package/build/esm/schema/index.d.ts +135 -0
  125. package/build/esm/schema/index.js +2 -1
  126. package/build/esm/schema/index.js.map +1 -1
  127. package/build/esm/utils/common.d.ts +1 -1
  128. package/build/esm/utils/common.js +1 -1
  129. package/build/esm/utils/common.js.map +1 -1
  130. package/package.json +2 -2
  131. package/server/data/transformPost.d.ts +1 -1
  132. package/server/models/blocks.d.ts +12 -2
  133. package/server/models/common.d.ts +2 -1
  134. package/server/models/common.js +1 -0
  135. package/styles/storybook/index.scss +4 -0
@@ -2001,5 +2001,140 @@ export declare const schemasForCustom: {
2001
2001
  };
2002
2002
  };
2003
2003
  };
2004
+ "blog-compact-media-block": {
2005
+ "blog-compact-media-block": {
2006
+ type: string;
2007
+ additionalProperties: boolean;
2008
+ properties: {
2009
+ image: {
2010
+ oneOf: ({
2011
+ optionName: string;
2012
+ oneOf: ({
2013
+ type: string;
2014
+ properties: {
2015
+ when: {
2016
+ type: string;
2017
+ };
2018
+ };
2019
+ } | {
2020
+ type: string;
2021
+ pattern: string;
2022
+ optionName: string;
2023
+ items?: undefined;
2024
+ } | {
2025
+ type: string;
2026
+ items: {
2027
+ type: string;
2028
+ properties: {
2029
+ when: {
2030
+ type: string;
2031
+ };
2032
+ };
2033
+ };
2034
+ optionName: string;
2035
+ pattern?: undefined;
2036
+ })[];
2037
+ type?: undefined;
2038
+ items?: undefined;
2039
+ } | {
2040
+ type: string;
2041
+ items: {
2042
+ oneOf: ({
2043
+ type: string;
2044
+ properties: {
2045
+ when: {
2046
+ type: string;
2047
+ };
2048
+ };
2049
+ } | {
2050
+ type: string;
2051
+ pattern: string;
2052
+ optionName: string;
2053
+ items?: undefined;
2054
+ } | {
2055
+ type: string;
2056
+ items: {
2057
+ type: string;
2058
+ properties: {
2059
+ when: {
2060
+ type: string;
2061
+ };
2062
+ };
2063
+ };
2064
+ optionName: string;
2065
+ pattern?: undefined;
2066
+ })[];
2067
+ };
2068
+ optionName: string;
2069
+ })[];
2070
+ };
2071
+ description: {
2072
+ type: string;
2073
+ contentType: string;
2074
+ };
2075
+ paddingTop: {
2076
+ type: string;
2077
+ enum: string[];
2078
+ };
2079
+ paddingBottom: {
2080
+ type: string;
2081
+ enum: string[];
2082
+ };
2083
+ fullWidth: {
2084
+ type: string;
2085
+ };
2086
+ column: {
2087
+ type: string;
2088
+ enum: string[];
2089
+ };
2090
+ qa: {
2091
+ type: string;
2092
+ };
2093
+ anchor: {
2094
+ type: string;
2095
+ additionalProperties: boolean;
2096
+ required: string[];
2097
+ properties: {
2098
+ text: {
2099
+ type: string;
2100
+ contentType: string;
2101
+ };
2102
+ url: {
2103
+ type: string;
2104
+ };
2105
+ urlTitle: {
2106
+ type: string;
2107
+ };
2108
+ };
2109
+ };
2110
+ visible: {
2111
+ type: string;
2112
+ enum: string[];
2113
+ };
2114
+ resetPaddings: {
2115
+ type: string;
2116
+ };
2117
+ context: {
2118
+ type: string;
2119
+ };
2120
+ indent: {
2121
+ type: string;
2122
+ additionalProperties: boolean;
2123
+ properties: {
2124
+ top: {
2125
+ enum: string[];
2126
+ };
2127
+ bottom: {
2128
+ enum: string[];
2129
+ };
2130
+ };
2131
+ };
2132
+ type: {};
2133
+ when: {
2134
+ type: string;
2135
+ };
2136
+ };
2137
+ };
2138
+ };
2004
2139
  };
2005
2140
  };
@@ -1,7 +1,7 @@
1
1
  import { BlockType } from "../models/common.js";
2
2
  import * as blocks from "./blocks.js";
3
3
  import * as headers from "./headers.js";
4
- const { Author, Banner, ColoredText, CTA, Feed, Layout, Media, Meta, Suggest, YFM } = blocks;
4
+ const { Author, Banner, ColoredText, CTA, Feed, Layout, Media, Meta, Suggest, YFM, CompactMedia } = blocks;
5
5
  const { Header } = headers;
6
6
  export const validators = {
7
7
  blocks,
@@ -22,6 +22,7 @@ export const schemasForCustom = {
22
22
  [BlockType.Meta]: Meta,
23
23
  [BlockType.Suggest]: Suggest,
24
24
  [BlockType.YFM]: YFM,
25
+ [BlockType.CompactMedia]: CompactMedia,
25
26
  },
26
27
  };
27
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../src","sources":["schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,4BAAyB;AAE3C,OAAO,KAAK,MAAM,oBAAiB;AACnC,OAAO,KAAK,OAAO,qBAAkB;AAErC,MAAM,EAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAC,GAAG,MAAM,CAAC;AAC3F,MAAM,EAAC,MAAM,EAAC,GAAG,OAAO,CAAC;AAEzB,MAAM,CAAC,MAAM,UAAU,GAAG;IACtB,MAAM;IACN,OAAO;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,OAAO,EAAE;QACL,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;KAC7B;IACD,MAAM,EAAE;QACJ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;QAC1B,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;QAC1B,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW;QACpC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG;QACpB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI;QACtB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;QAC1B,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK;QACxB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI;QACtB,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO;QAC5B,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG;KACvB;CACJ,CAAC","sourcesContent":["import {BlockType} from '../models/common';\n\nimport * as blocks from './blocks';\nimport * as headers from './headers';\n\nconst {Author, Banner, ColoredText, CTA, Feed, Layout, Media, Meta, Suggest, YFM} = blocks;\nconst {Header} = headers;\n\nexport const validators = {\n blocks,\n headers,\n};\n\nexport const schemasForCustom = {\n headers: {\n [BlockType.Header]: Header,\n },\n blocks: {\n [BlockType.Author]: Author,\n [BlockType.Banner]: Banner,\n [BlockType.ColoredText]: ColoredText,\n [BlockType.CTA]: CTA,\n [BlockType.Feed]: Feed,\n [BlockType.Layout]: Layout,\n [BlockType.Media]: Media,\n [BlockType.Meta]: Meta,\n [BlockType.Suggest]: Suggest,\n [BlockType.YFM]: YFM,\n },\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../src","sources":["schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,4BAAyB;AAE3C,OAAO,KAAK,MAAM,oBAAiB;AACnC,OAAO,KAAK,OAAO,qBAAkB;AAErC,MAAM,EAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAC,GAC3F,MAAM,CAAC;AACX,MAAM,EAAC,MAAM,EAAC,GAAG,OAAO,CAAC;AAEzB,MAAM,CAAC,MAAM,UAAU,GAAG;IACtB,MAAM;IACN,OAAO;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,OAAO,EAAE;QACL,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;KAC7B;IACD,MAAM,EAAE;QACJ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;QAC1B,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;QAC1B,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW;QACpC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG;QACpB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI;QACtB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;QAC1B,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK;QACxB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI;QACtB,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO;QAC5B,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG;QACpB,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,YAAY;KACzC;CACJ,CAAC","sourcesContent":["import {BlockType} from '../models/common';\n\nimport * as blocks from './blocks';\nimport * as headers from './headers';\n\nconst {Author, Banner, ColoredText, CTA, Feed, Layout, Media, Meta, Suggest, YFM, CompactMedia} =\n blocks;\nconst {Header} = headers;\n\nexport const validators = {\n blocks,\n headers,\n};\n\nexport const schemasForCustom = {\n headers: {\n [BlockType.Header]: Header,\n },\n blocks: {\n [BlockType.Author]: Author,\n [BlockType.Banner]: Banner,\n [BlockType.ColoredText]: ColoredText,\n [BlockType.CTA]: CTA,\n [BlockType.Feed]: Feed,\n [BlockType.Layout]: Layout,\n [BlockType.Media]: Media,\n [BlockType.Meta]: Meta,\n [BlockType.Suggest]: Suggest,\n [BlockType.YFM]: YFM,\n [BlockType.CompactMedia]: CompactMedia,\n },\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  import { AnalyticsEvent, AnalyticsEventsProp, ContentBlockProps, HeaderBreadCrumbsProps } from '@gravity-ui/page-constructor';
2
2
  import { RouterContextProps } from "../contexts/RouterContext.js";
3
- import { GetPostsRequest, Query, Tag } from "../models/common.js";
4
3
  import { AnalyticsCounter } from "../counters/utils.js";
4
+ import { GetPostsRequest, Query, Tag } from "../models/common.js";
5
5
  export interface QueryParam {
6
6
  name: string;
7
7
  value?: string | number | null;
@@ -5,8 +5,8 @@ import debounce from "lodash/debounce.js";
5
5
  import flatten from "lodash/flatten.js";
6
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
- import { Keyset, i18n } from "../i18n/index.js";
9
8
  import { AnalyticsCounter } from "../counters/utils.js";
9
+ import { Keyset, i18n } from "../i18n/index.js";
10
10
  const QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];
11
11
  export function getAbsolutePath(router, url) {
12
12
  if (!router || !router.pathname) {
@@ -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 {AnalyticsCounter} from '../counters/utils';\nimport {Keyset, i18n} from '../i18n';\nimport {GetPostsRequest, Query, Tag} from '../models/common';\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": "8.1.0",
3
+ "version": "8.3.0",
4
4
  "description": "Gravity UI Blog Constructor",
5
5
  "license": "MIT",
6
6
  "type": "commonjs",
@@ -99,7 +99,7 @@
99
99
  "@diplodoc/transform": "^4.10.8",
100
100
  "@gravity-ui/eslint-config": "^3.2.0",
101
101
  "@gravity-ui/icons": "^2.13.0",
102
- "@gravity-ui/page-constructor": "^7.0.0",
102
+ "@gravity-ui/page-constructor": "^7.7.0",
103
103
  "@gravity-ui/prettier-config": "^1.1.0",
104
104
  "@gravity-ui/stylelint-config": "^4.0.1",
105
105
  "@gravity-ui/tsconfig": "^1.0.0",
@@ -1,5 +1,5 @@
1
- import { PostData, TransformPostOptions } from '../models/common';
2
1
  import { Lang } from '@gravity-ui/uikit';
2
+ import { PostData, TransformPostOptions } from '../models/common';
3
3
  export type TransformPostType = {
4
4
  postData: PostData;
5
5
  lang: Lang;
@@ -21,7 +21,10 @@ export type ColoredTextProps = ContentBlockProps & QAProps & {
21
21
  export type CTAProps = QAProps & {
22
22
  items: Array<ContentBlockProps>;
23
23
  } & PaddingsYFMProps;
24
- export type HeaderProps = HeaderBlockProps & PaddingsYFMProps;
24
+ type HeaderBlogProps = {
25
+ imageInGrid?: boolean;
26
+ };
27
+ export type HeaderProps = HeaderBlockProps & PaddingsYFMProps & HeaderBlogProps;
25
28
  export type LayoutProps = {
26
29
  fullWidth?: boolean;
27
30
  mobileOrder?: string;
@@ -47,6 +50,9 @@ export type FormProps = {
47
50
  formData: FormBlockData;
48
51
  border?: 'shadow' | 'line' | 'none';
49
52
  } & PaddingsYFMProps & QAProps;
53
+ export type CompactMediaProps = {
54
+ description?: string;
55
+ } & PaddingsYFMProps & Partial<Pick<PCMediaProps, 'image'>>;
50
56
  export type AuthorBlockModel = {
51
57
  type: BlockType.Author;
52
58
  } & AuthorProps;
@@ -83,7 +89,11 @@ export type FeedBlockModel = {
83
89
  export type FormBlockModel = {
84
90
  type: BlockType.Form;
85
91
  } & FormProps;
86
- export type BlockModel = AuthorBlockModel | BannerBlockModel | ColoredTextBlockModel | CTABlockModel | HeaderBlockModel | LayoutBlockModel | MediaBlockModel | MetaBlockModel | SuggestBlockModel | YFMBlockModel | FeedBlockModel;
92
+ export type CompactMediaBlockModel = {
93
+ type: BlockType.CompactMedia;
94
+ } & CompactMediaProps;
95
+ export type BlockModel = AuthorBlockModel | BannerBlockModel | ColoredTextBlockModel | CTABlockModel | HeaderBlockModel | LayoutBlockModel | MediaBlockModel | MetaBlockModel | SuggestBlockModel | YFMBlockModel | FeedBlockModel | CompactMediaBlockModel;
87
96
  export type Block = BlockModel & {
88
97
  [x: string]: any;
89
98
  };
99
+ export {};
@@ -97,7 +97,8 @@ export declare enum BlockType {
97
97
  Suggest = "blog-suggest-block",
98
98
  Meta = "blog-meta-block",
99
99
  Feed = "blog-feed-block",
100
- Form = "blog-form-block"
100
+ Form = "blog-form-block",
101
+ CompactMedia = "blog-compact-media-block"
101
102
  }
102
103
  export type MetaProps = {
103
104
  metaComponent: JSX.Element;
@@ -20,6 +20,7 @@ var BlockType;
20
20
  BlockType["Meta"] = "blog-meta-block";
21
21
  BlockType["Feed"] = "blog-feed-block";
22
22
  BlockType["Form"] = "blog-form-block";
23
+ BlockType["CompactMedia"] = "blog-compact-media-block";
23
24
  })(BlockType || (exports.BlockType = BlockType = {}));
24
25
  var DefaultEventNames;
25
26
  (function (DefaultEventNames) {
@@ -19,3 +19,7 @@
19
19
  // without this in docs objects with z-index < 0 dissapear
20
20
  z-index: 0 !important;
21
21
  }
22
+
23
+ .sb-show-main.sb-main-padded {
24
+ padding: 0;
25
+ }