@meduza/ui-kit-2 0.4.15 → 0.5.2

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 (166) hide show
  1. package/package.json +12 -7
  2. package/src/Cover/index.tsx +2 -10
  3. package/src/DocumentItemsCount/DocumentItemsCount.module.css +12 -1
  4. package/src/DocumentItemsCount/DocumentItemsCount.test.tsx +9 -2
  5. package/src/DocumentItemsCount/index.tsx +3 -3
  6. package/src/Footnote/Footnote.module.css +6 -46
  7. package/src/Footnote/Footnote.stories.tsx +9 -26
  8. package/src/Image/Image.module.css +0 -11
  9. package/src/Meta/Meta.module.css +0 -5
  10. package/src/Meta/Meta.stories.module.css +0 -16
  11. package/src/Meta/Meta.stories.tsx +4 -51
  12. package/src/Meta/MetaContainer.tsx +0 -8
  13. package/src/Popover/Popover.module.css +29 -47
  14. package/src/Popover/Popover.stories.tsx +1 -25
  15. package/src/Popover/index.tsx +21 -1
  16. package/src/RawHtmlBlock/index.tsx +5 -0
  17. package/src/RelatedRichBlock/RelatedRichBlock.module.css +1 -11
  18. package/src/RenderBlocks/index.tsx +1 -5
  19. package/src/RichTitle/RichTitle.module.css +6 -16
  20. package/src/ShopRelatedBlock/ShopRelatedBlock.module.css +210 -0
  21. package/src/ShopRelatedBlock/ShopRelatedBlock.stories.module.css +12 -0
  22. package/src/ShopRelatedBlock/ShopRelatedBlock.stories.tsx +52 -0
  23. package/src/ShopRelatedBlock/ShopRelatedBlock.test.tsx +20 -0
  24. package/src/ShopRelatedBlock/ShopRelatedBlock.types.ts +4 -0
  25. package/src/ShopRelatedBlock/index.tsx +120 -0
  26. package/src/ShopRelatedBlock/mock.json +153 -0
  27. package/src/SimpleBlock/SimpleBlock.types.ts +1 -0
  28. package/src/SimpleBlock/index.tsx +3 -1
  29. package/src/Tag/Tag.module.css +3 -8
  30. package/src/Tag/Tag.stories.tsx +3 -16
  31. package/src/Tag/Tag.types.ts +1 -7
  32. package/src/index.tsx +1 -1
  33. package/dist/AnnouncementInText/AnnouncementInText.types.d.ts +0 -4
  34. package/dist/AnnouncementInText/index.d.ts +0 -3
  35. package/dist/BookmarkButton/BookmarkButton.types.d.ts +0 -6
  36. package/dist/BookmarkButton/index.d.ts +0 -3
  37. package/dist/Button/Button.d.ts +0 -3
  38. package/dist/Button/Button.types.d.ts +0 -16
  39. package/dist/Button/ButtonLoader.d.ts +0 -2
  40. package/dist/Button/index.d.ts +0 -2
  41. package/dist/CardTitle/CardTitle.types.d.ts +0 -10
  42. package/dist/CardTitle/index.d.ts +0 -3
  43. package/dist/ChapterBlock/ChapterBlock.types.d.ts +0 -7
  44. package/dist/ChapterBlock/index.d.ts +0 -3
  45. package/dist/Cover/Cover.types.d.ts +0 -24
  46. package/dist/Cover/index.d.ts +0 -3
  47. package/dist/DocumentItemsCount/DocumentItemsCount.types.d.ts +0 -7
  48. package/dist/DocumentItemsCount/index.d.ts +0 -3
  49. package/dist/DonatesTeaser/DonatesTeaser.types.d.ts +0 -4
  50. package/dist/DonatesTeaser/index.d.ts +0 -3
  51. package/dist/DotsOnImage/DotsOnImage.types.d.ts +0 -46
  52. package/dist/DotsOnImage/index.d.ts +0 -3
  53. package/dist/Dropdown/Dropdown.types.d.ts +0 -6
  54. package/dist/Dropdown/index.d.ts +0 -4
  55. package/dist/EmbedBlock/EmbedBlock.d.ts +0 -3
  56. package/dist/EmbedBlock/EmbedBlock.types.d.ts +0 -12
  57. package/dist/EmbedBlock/EmbedGif.d.ts +0 -3
  58. package/dist/EmbedBlock/IframeBlock.d.ts +0 -3
  59. package/dist/EmbedBlock/index.d.ts +0 -3
  60. package/dist/Footnote/Footnote.types.d.ts +0 -5
  61. package/dist/Footnote/index.d.ts +0 -3
  62. package/dist/GroupedBlock/GroupedBlock.types.d.ts +0 -4
  63. package/dist/GroupedBlock/index.d.ts +0 -3
  64. package/dist/HalfBlock/HalfBlock.types.d.ts +0 -4
  65. package/dist/HalfBlock/index.d.ts +0 -3
  66. package/dist/Image/Image.types.d.ts +0 -35
  67. package/dist/Image/RenderPicture.d.ts +0 -4
  68. package/dist/Image/index.d.ts +0 -3
  69. package/dist/ImportantLead/ImportantLead.types.d.ts +0 -4
  70. package/dist/ImportantLead/index.d.ts +0 -3
  71. package/dist/Lazy/Lazy.types.d.ts +0 -5
  72. package/dist/Lazy/index.d.ts +0 -3
  73. package/dist/ListBlock/ListBlock.types.d.ts +0 -10
  74. package/dist/ListBlock/index.d.ts +0 -3
  75. package/dist/MaterialNote/MaterialNote.types.d.ts +0 -13
  76. package/dist/MaterialNote/index.d.ts +0 -3
  77. package/dist/MaterialTitle/MaterialTitle.types.d.ts +0 -4
  78. package/dist/MaterialTitle/index.d.ts +0 -5
  79. package/dist/MediaCaption/MediaCaption.types.d.ts +0 -5
  80. package/dist/MediaCaption/index.d.ts +0 -3
  81. package/dist/Meta/Meta.mock.d.ts +0 -12
  82. package/dist/Meta/Meta.types.d.ts +0 -19
  83. package/dist/Meta/MetaContainer.d.ts +0 -3
  84. package/dist/Meta/index.d.ts +0 -3
  85. package/dist/MetaItem/MetaItem.types.d.ts +0 -7
  86. package/dist/MetaItem/index.d.ts +0 -3
  87. package/dist/MetaItemLive/MetaItemLive.types.d.ts +0 -3
  88. package/dist/MetaItemLive/index.d.ts +0 -3
  89. package/dist/Popover/Popover.types.d.ts +0 -5
  90. package/dist/Popover/index.d.ts +0 -3
  91. package/dist/QuoteBlock/QuoteBlock.types.d.ts +0 -6
  92. package/dist/QuoteBlock/index.d.ts +0 -3
  93. package/dist/RawHtmlBlock/RawHtmlBlock.types.d.ts +0 -17
  94. package/dist/RawHtmlBlock/index.d.ts +0 -3
  95. package/dist/RelatedBlock/RelatedBlock.types.d.ts +0 -17
  96. package/dist/RelatedBlock/index.d.ts +0 -3
  97. package/dist/RelatedBook/RelatedBook.mock.d.ts +0 -65
  98. package/dist/RelatedBook/RelatedBook.types.d.ts +0 -4
  99. package/dist/RelatedBook/index.d.ts +0 -3
  100. package/dist/RelatedRichBlock/RelatedRichBlock.types.d.ts +0 -4
  101. package/dist/RelatedRichBlock/index.d.ts +0 -3
  102. package/dist/RenderBlocks/RenderBlocks.types.d.ts +0 -11
  103. package/dist/RenderBlocks/index.d.ts +0 -3
  104. package/dist/RichTitle/RichTitle.types.d.ts +0 -13
  105. package/dist/RichTitle/index.d.ts +0 -3
  106. package/dist/SensitiveBlock/SensitiveBlock.types.d.ts +0 -15
  107. package/dist/SensitiveBlock/index.d.ts +0 -3
  108. package/dist/SimpleBlock/SimpleBlock.types.d.ts +0 -4
  109. package/dist/SimpleBlock/index.d.ts +0 -3
  110. package/dist/SimpleTitle/SimpleTitle.types.d.ts +0 -9
  111. package/dist/SimpleTitle/index.d.ts +0 -3
  112. package/dist/SourceBlock/SourceBlock.types.d.ts +0 -15
  113. package/dist/SourceBlock/index.d.ts +0 -3
  114. package/dist/Spoiler/Spoiler.types.d.ts +0 -4
  115. package/dist/Spoiler/index.d.ts +0 -3
  116. package/dist/SvgSymbol/SvgSymbol.types.d.ts +0 -8
  117. package/dist/SvgSymbol/icons.d.ts +0 -167
  118. package/dist/SvgSymbol/index.d.ts +0 -3
  119. package/dist/Switcher/Switcher.types.d.ts +0 -12
  120. package/dist/Switcher/index.d.ts +0 -3
  121. package/dist/Table/Table.types.d.ts +0 -25
  122. package/dist/Table/index.d.ts +0 -3
  123. package/dist/Tag/Tag.types.d.ts +0 -12
  124. package/dist/Tag/index.d.ts +0 -3
  125. package/dist/Timestamp/Timestamp.types.d.ts +0 -5
  126. package/dist/Timestamp/index.d.ts +0 -4
  127. package/dist/Toolbar/Toolbar.d.ts +0 -3
  128. package/dist/Toolbar/Toolbar.types.d.ts +0 -8
  129. package/dist/Toolbar/ToolbarItem.d.ts +0 -3
  130. package/dist/Toolbar/index.d.ts +0 -2
  131. package/dist/ToolbarButton/ToolbarButton.types.d.ts +0 -10
  132. package/dist/ToolbarButton/index.d.ts +0 -3
  133. package/dist/Tooltip/Tooltip.d.ts +0 -3
  134. package/dist/Tooltip/Tooltip.types.d.ts +0 -8
  135. package/dist/Tooltip/TooltipFooter.d.ts +0 -3
  136. package/dist/Tooltip/index.d.ts +0 -2
  137. package/dist/constants.d.ts +0 -41
  138. package/dist/index.d.ts +0 -45
  139. package/dist/types.d.ts +0 -20
  140. package/dist/ui-kit-2.cjs.development.js +0 -2639
  141. package/dist/ui-kit-2.cjs.development.js.map +0 -1
  142. package/dist/ui-kit-2.cjs.production.min.js +0 -2
  143. package/dist/ui-kit-2.cjs.production.min.js.map +0 -1
  144. package/dist/ui-kit-2.esm.js +0 -2585
  145. package/dist/ui-kit-2.esm.js.map +0 -1
  146. package/dist/ui-kit.css +0 -6068
  147. package/dist/utils/BlockContext.d.ts +0 -8
  148. package/dist/utils/DangerousHtml.d.ts +0 -8
  149. package/dist/utils/capitalizeFirstLetter.d.ts +0 -1
  150. package/dist/utils/converCase.d.ts +0 -2
  151. package/dist/utils/generateGradient.d.ts +0 -2
  152. package/dist/utils/getElementPositionRelativeToViewport.d.ts +0 -2
  153. package/dist/utils/makeClassName.d.ts +0 -3
  154. package/dist/utils/makeStyleContext.d.ts +0 -3
  155. package/dist/utils/pluralize.d.ts +0 -2
  156. package/dist/utils/postMessage.d.ts +0 -2
  157. package/dist/utils/viewportSize.d.ts +0 -6
  158. package/src/.DS_Store +0 -0
  159. package/src/Meta/Meta.mock.ts +0 -19
  160. package/src/RelatedBook/RelatedBook.mock.ts +0 -68
  161. package/src/RelatedBook/RelatedBook.module.css +0 -210
  162. package/src/RelatedBook/RelatedBook.stories.module.css +0 -5
  163. package/src/RelatedBook/RelatedBook.stories.tsx +0 -35
  164. package/src/RelatedBook/RelatedBook.test.tsx +0 -20
  165. package/src/RelatedBook/RelatedBook.types.ts +0 -4
  166. package/src/RelatedBook/index.tsx +0 -68
@@ -3,9 +3,10 @@
3
3
  .root {
4
4
  margin: 0 0 20px;
5
5
 
6
- font-family: $secondaryFont;
7
- font-size: 19px;
8
6
  font-weight: 700;
7
+ font-size: 19px;
8
+
9
+ font-family: $secondaryFont;
9
10
  line-height: 23px;
10
11
 
11
12
  @media $portraitTablet {
@@ -21,9 +22,9 @@
21
22
  }
22
23
 
23
24
  .root span {
24
- font-family: $primaryFont;
25
- font-size: 20px;
26
25
  font-weight: normal;
26
+ font-size: 20px;
27
+ font-family: $primaryFont;
27
28
 
28
29
  @media $portraitTablet {
29
30
  font-size: 38px;
@@ -60,10 +61,10 @@
60
61
 
61
62
  .featured {
62
63
  @media $landscapeTabletMax {
63
- letter-spacing: 0.3px;
64
64
 
65
65
  font-size: 28px;
66
66
  line-height: 30px;
67
+ letter-spacing: 0.3px;
67
68
  }
68
69
  }
69
70
 
@@ -104,17 +105,6 @@
104
105
  }
105
106
  }
106
107
 
107
- .isInPodcastPlayer {
108
- margin-bottom: 20px;
109
-
110
- font-size: 19px;
111
- line-height: 23px;
112
- }
113
-
114
- .isInPodcastPlayer span {
115
- font-size: 20px;
116
- }
117
-
118
108
  .mobile {
119
109
  @media $mobile {
120
110
  display: none;
@@ -0,0 +1,210 @@
1
+ @import '../vars.css';
2
+
3
+ .root {
4
+ position: relative;
5
+ z-index: 10;
6
+
7
+ display: block;
8
+ overflow: hidden;
9
+
10
+ color: #000;
11
+
12
+ text-decoration: none;
13
+
14
+ border-radius: 8px;
15
+ outline-width: 0;
16
+
17
+ @media $mobile {
18
+ color: #fff;
19
+ }
20
+ }
21
+
22
+ .root:hover {
23
+ @media $mobile {
24
+ opacity: 0.95;
25
+ }
26
+ }
27
+
28
+ .root::after {
29
+ position: absolute;
30
+ top: 0;
31
+ right: 0;
32
+ bottom: 0;
33
+ left: 0;
34
+ z-index: 20;
35
+
36
+ border-radius: 8px;
37
+
38
+ content: '';
39
+ }
40
+
41
+ .root::before {
42
+ display: block;
43
+
44
+ width: 100%;
45
+ }
46
+
47
+ .root::after {
48
+ box-shadow: inset 0 4px #b88b59, inset 0 5px rgba(0, 0, 0, 0.2),
49
+ inset 0 0 0 1px rgba(0, 0, 0, 0.1);
50
+ }
51
+
52
+ .root,
53
+ .wrapper {
54
+ margin: 16px 0;
55
+
56
+ @media $portraitTablet {
57
+ margin: 25px 0;
58
+ }
59
+ }
60
+
61
+ .overlay,
62
+ .overlayHeader {
63
+ position: absolute;
64
+ right: 0;
65
+ left: 0;
66
+ z-index: 10;
67
+ }
68
+
69
+ .overlay {
70
+ bottom: 0;
71
+
72
+ height: 295px;
73
+ }
74
+
75
+ .overlayHeader {
76
+ top: 0;
77
+
78
+ height: 150px;
79
+ }
80
+
81
+ .body {
82
+ display: flex;
83
+ flex-flow: column nowrap;
84
+ justify-content: flex-end;
85
+
86
+ padding: 12px 15px;
87
+
88
+ background-color: #f7f7f7;
89
+
90
+ @media $mobile {
91
+ position: absolute;
92
+ right: 0;
93
+ bottom: 0;
94
+ left: 0;
95
+ z-index: 10;
96
+
97
+ min-height: 295px;
98
+ padding: 20px;
99
+
100
+ background-color: transparent;
101
+ }
102
+ }
103
+
104
+ .hasGradient .body {
105
+ @media $mobile {
106
+ position: absolute;
107
+ right: 0;
108
+ bottom: 0;
109
+ left: 0;
110
+ z-index: 10;
111
+
112
+ min-height: 295px;
113
+
114
+ background-color: transparent;
115
+ }
116
+ }
117
+
118
+ .picture {
119
+ position: relative;
120
+ }
121
+
122
+ .picture::after {
123
+ position: absolute;
124
+ right: 1px;
125
+ bottom: 0;
126
+ left: 1px;
127
+ z-index: 10;
128
+
129
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
130
+
131
+ content: '';
132
+
133
+ @media $mobile {
134
+ content: '';
135
+ }
136
+ }
137
+
138
+ .tag {
139
+ position: absolute;
140
+ top: 14px;
141
+ right: 15px;
142
+ left: 15px;
143
+ z-index: 10;
144
+
145
+ color: rgba(255, 255, 255, 0.7);
146
+
147
+ font-size: 12px;
148
+
149
+ @media $landscapeTablet {
150
+ top: 16px;
151
+ right: 20px;
152
+ left: 20px;
153
+ }
154
+ }
155
+
156
+ .center {
157
+ width: 100%;
158
+ max-width: 650px;
159
+ margin-right: auto;
160
+ margin-left: auto;
161
+ }
162
+
163
+ .title {
164
+ font-weight: 700;
165
+ font-size: 19px;
166
+ font-family: $secondaryFont;
167
+ line-height: 23px;
168
+
169
+ @media $landscapeTablet {
170
+ font-size: 1.3rem;
171
+ line-height: 1.6rem;
172
+ }
173
+ }
174
+
175
+ .price {
176
+ display: block;
177
+ }
178
+
179
+ /* Themes */
180
+
181
+ .dark {
182
+ color: #000;
183
+ }
184
+
185
+ .dark .tag {
186
+ color: rgba(0, 0, 0, 0.7);
187
+ }
188
+
189
+ .light {
190
+ @media $mobile {
191
+ color: #fff;
192
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
193
+ }
194
+ }
195
+
196
+ /* Display */
197
+
198
+ .mobile {
199
+ @media $mobile {
200
+ display: none;
201
+ }
202
+ }
203
+
204
+ .desktop {
205
+ display: none;
206
+
207
+ @media $mobile {
208
+ display: block;
209
+ }
210
+ }
@@ -0,0 +1,12 @@
1
+ @import '../vars.css';
2
+
3
+ .root {
4
+ display: block;
5
+
6
+ max-width: 650px;
7
+ margin: 0 auto;
8
+ }
9
+
10
+ .card + .card {
11
+ margin-top: 40px;
12
+ }
@@ -0,0 +1,52 @@
1
+ import React from 'react'
2
+ import { ShopRelatedBlock } from '.'
3
+ import { PreviewWrapper } from '../_storybook/PreviewWrapper'
4
+
5
+ import styles from './ShopRelatedBlock.stories.module.css'
6
+ import mock from './mock.json'
7
+
8
+ export default {
9
+ title: 'Main / ShopRelatedBlock',
10
+ component: ShopRelatedBlock,
11
+ parameters: {
12
+ themeWrapperSideBySide: true
13
+ }
14
+ }
15
+
16
+ const Example: React.FC = () => {
17
+ return (
18
+ <>
19
+ <div className={styles.root}>
20
+ <div className={styles.card}>
21
+ <ShopRelatedBlock block={mock.rich} styleContext={['no_mods']} />
22
+ </div>
23
+ <div className={styles.card}>
24
+ <ShopRelatedBlock block={mock.rich_dark} styleContext={['no_mods']} />
25
+ </div>
26
+ <div className={styles.card}>
27
+ <ShopRelatedBlock
28
+ block={mock.rich_and_featured_mobile}
29
+ styleContext={['no_mods']}
30
+ />
31
+ </div>
32
+ <div className={styles.card}>
33
+ <ShopRelatedBlock
34
+ block={mock.rich_and_featured_desktop}
35
+ styleContext={['no_mods']}
36
+ />
37
+ </div>
38
+ </div>
39
+ </>
40
+ )
41
+ }
42
+
43
+ export const Default: React.FC = () => (
44
+ <>
45
+ <PreviewWrapper theme="light">
46
+ <Example />
47
+ </PreviewWrapper>
48
+ {/* <PreviewWrapper theme="dark">
49
+ <Example />
50
+ </PreviewWrapper> */}
51
+ </>
52
+ )
@@ -0,0 +1,20 @@
1
+ import React from 'react'
2
+ import { render } from '@testing-library/react'
3
+ import { ShopRelatedBlock } from '.'
4
+ import { ShopRelatedBlockProps } from './ShopRelatedBlock.types'
5
+
6
+ import styles from './ShopRelatedBlock.module.css'
7
+
8
+ describe('Related Rich Block', () => {
9
+ let props: ShopRelatedBlockProps
10
+
11
+ const renderComponent = () => render(<ShopRelatedBlock {...props} />)
12
+
13
+ it('should have root style', () => {
14
+ const { getByTestId } = renderComponent()
15
+
16
+ const ShopRelatedBlock = getByTestId('realated-rich-block')
17
+
18
+ expect(ShopRelatedBlock).toHaveClass(styles.root)
19
+ })
20
+ })
@@ -0,0 +1,4 @@
1
+ export interface ShopRelatedBlockProps {
2
+ block?: any
3
+ styleContext?: any
4
+ }
@@ -0,0 +1,120 @@
1
+ /* eslint-disable react/jsx-no-target-blank */
2
+ import React, { useEffect } from 'react'
3
+
4
+ import { useInView } from 'react-intersection-observer'
5
+ import { ShopRelatedBlockProps } from './ShopRelatedBlock.types'
6
+
7
+ import postMessage from '../utils/postMessage'
8
+ import { makeClassName, ClassNames } from '../utils/makeClassName'
9
+ import makeStyleContext from '../utils/makeStyleContext'
10
+ import generateGradient from '../utils/generateGradient'
11
+
12
+ import { Tag } from '../Tag'
13
+ import { Image } from '../Image'
14
+
15
+ import styles from './ShopRelatedBlock.module.css'
16
+
17
+ export const ShopRelatedBlock: React.FC<ShopRelatedBlockProps> = ({
18
+ block: {
19
+ only_on: onlyOn,
20
+ data: {
21
+ url,
22
+ cover: {
23
+ urls,
24
+ gradients,
25
+ tag,
26
+ layout,
27
+ ratio,
28
+ first_title: firstTitle,
29
+ second_title: secondTitle
30
+ }
31
+ }
32
+ },
33
+ styleContext
34
+ }) => {
35
+ const style: React.CSSProperties = {}
36
+ const styleHeader: React.CSSProperties = {}
37
+
38
+ const [ref, inView] = useInView({
39
+ threshold: 0,
40
+ triggerOnce: true
41
+ })
42
+
43
+ useEffect(() => {
44
+ if (inView) {
45
+ if (
46
+ (onlyOn === 'mobile' && window.innerWidth <= 511) ||
47
+ (onlyOn === 'desktop' && window.innerWidth >= 512) ||
48
+ !onlyOn
49
+ ) {
50
+ postMessage('productRelated', url, 'view')
51
+ }
52
+ }
53
+ }, [inView])
54
+
55
+ const handleClick = () => {
56
+ postMessage('productRelated', url, 'click')
57
+ }
58
+
59
+ let classNames: ClassNames = [
60
+ [styles.root, true],
61
+ [styles.hasGradient, !!gradients],
62
+ [styles[onlyOn], !!onlyOn && !!styles[onlyOn]]
63
+ ]
64
+
65
+ if (styleContext) {
66
+ classNames = makeStyleContext(classNames, styleContext, styles)
67
+ }
68
+
69
+ if (gradients) {
70
+ styleHeader.backgroundImage = generateGradient(
71
+ gradients.bg_rgb,
72
+ 'mediaBlockTop'
73
+ )
74
+
75
+ const theme = [gradients.text_rgb === '0,0,0' ? 'dark' : 'light']
76
+ classNames = makeStyleContext(classNames, theme, styles)
77
+
78
+ if (onlyOn === 'desktop') {
79
+ style.backgroundImage = generateGradient(
80
+ gradients.bg_rgb,
81
+ 'mediaBlockBottom'
82
+ )
83
+ }
84
+ }
85
+
86
+ return (
87
+ <a
88
+ data-testid="related-rich-block"
89
+ className={makeClassName(classNames)}
90
+ href={url}
91
+ target="_blank"
92
+ onClick={(): void => handleClick()}
93
+ ref={ref}
94
+ >
95
+ {layout === 'rich' && (
96
+ <>
97
+ <div className={styles.overlay} style={style} />
98
+ <div className={styles.overlayHeader} style={styleHeader} />
99
+ </>
100
+ )}
101
+
102
+ <div className={styles.tag}>
103
+ <Tag size="small" theme="inherit" styleContext="richRelated">
104
+ {tag}
105
+ </Tag>
106
+ </div>
107
+ <div className={styles.cover}>
108
+ <div className={styles.picture}>
109
+ <Image optimized={urls} ratio={ratio} display="narrow" />
110
+ </div>
111
+ </div>
112
+ <div className={styles.body}>
113
+ <h2 className={styles.title}>
114
+ {firstTitle}
115
+ <span className={styles.price}>{secondTitle}</span>
116
+ </h2>
117
+ </div>
118
+ </a>
119
+ )
120
+ }
@@ -0,0 +1,153 @@
1
+ {
2
+ "rich": {
3
+ "type": "related_shop",
4
+ "data": {
5
+ "url": "https://meduza.io/",
6
+
7
+ "cover": {
8
+ "ratio": 1.5,
9
+ "layout": "rich",
10
+ "urls": {
11
+ "w325": {
12
+ "1x": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
13
+ "2x": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
14
+ "1x_webp": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
15
+ "2x_webp": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg"
16
+ },
17
+ "w600": {
18
+ "1x": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
19
+ "2x": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
20
+ "1x_webp": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
21
+ "2x_webp": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg"
22
+ }
23
+ },
24
+ "gradients": {
25
+ "text_rgb": "0,0,0",
26
+ "bg_rgb": "214, 216, 207"
27
+ },
28
+ "tag": "Можно купить",
29
+ "first_title": "Шторка для камеры",
30
+ "second_title": "500р."
31
+ }
32
+ },
33
+ "only_on": "mobile"
34
+ },
35
+
36
+ "rich_dark": {
37
+ "type": "related_rich",
38
+ "data": {
39
+ "url": "https://meduza.io/",
40
+ "fallback": {
41
+ "data": {
42
+ "title": "Не богато вышло",
43
+ "related": [
44
+ {
45
+ "title": "«Если кто-нибудь видит меня и слышит, пожалуйста, распространите это видео любым способом! Чтобы я существовал!»",
46
+ "second": "Автор фильма «Котлован» — о том, как сделал его из обращений россиян к Путину",
47
+ "layout": "rich",
48
+ "url": "feature/2018/09/18/na-rossiyskuyu-bolnitsu-pervye-podali-v-sud-za-otkaz-v-poseschenii-umirayuschego-v-reanimatsii-rodstvennika-sud-vstal-na-storonu-medikov",
49
+ "id": "0-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
50
+ }
51
+ ]
52
+ },
53
+ "only_on": "desktop"
54
+ },
55
+ "cover": {
56
+ "ratio": 1.5,
57
+ "layout": "rich",
58
+ "urls": {
59
+ "w325": {
60
+ "1x": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
61
+ "2x": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
62
+ "1x_webp": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
63
+ "2x_webp": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg"
64
+ },
65
+ "w600": {
66
+ "1x": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
67
+ "2x": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
68
+ "1x_webp": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
69
+ "2x_webp": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg"
70
+ }
71
+ },
72
+ "first_title": "Шторка для камеры",
73
+ "second_title": "500р.",
74
+
75
+ "tag": "Можно купить",
76
+ "gradients": {
77
+ "text_rgb": "255,255,255",
78
+ "bg_rgb": "0,0,0"
79
+ }
80
+ }
81
+ },
82
+ "only_on": "desktop"
83
+ },
84
+
85
+ "rich_and_featured_desktop": {
86
+ "type": "related_rich",
87
+ "data": {
88
+ "url": "https://meduza.io/",
89
+
90
+ "cover": {
91
+ "ratio": 1.5,
92
+ "layout": "rich",
93
+ "urls": {
94
+ "w325": {
95
+ "1x": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
96
+ "2x": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
97
+ "1x_webp": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
98
+ "2x_webp": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg"
99
+ },
100
+ "w600": {
101
+ "1x": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
102
+ "2x": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
103
+ "1x_webp": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg",
104
+ "2x_webp": "//meduza.io/image/attachments/images/006/942/207/original/SvVDNHQAimcm6VGxS21y1A.jpg"
105
+ }
106
+ },
107
+ "first_title": "Шторка для камеры",
108
+ "second_title": "500р.",
109
+
110
+ "tag": "Можно купить",
111
+ "gradients": {
112
+ "text_rgb": "0,0,0",
113
+ "bg_rgb": "214, 216, 207"
114
+ }
115
+ }
116
+ },
117
+ "only_on": "desktop"
118
+ },
119
+
120
+ "rich_and_featured_mobile": {
121
+ "type": "related_rich",
122
+ "data": {
123
+ "url": "https://meduza.io/",
124
+
125
+ "cover": {
126
+ "ratio": 0.63,
127
+ "layout": "rich",
128
+ "urls": {
129
+ "w325": {
130
+ "1x": "http://meduza.io/impro/YW9jtqBkQc7dgyPKdgtvS8JlSvPyIgY7p-7-9C49csw/fill/325/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNC81/NDMvOTE4L29yaWdp/bmFsLzRDeHQwdFR5/YWhlUGhnZHd4YVBz/R1EuanBn.jpg",
131
+ "2x": "http://meduza.io/impro/jQf0sx4Df9y23YQ0HKyGauLGYB6kMxQ_jR2QExB4_Q0/fill/650/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNC81/NDMvOTE4L29yaWdp/bmFsLzRDeHQwdFR5/YWhlUGhnZHd4YVBz/R1EuanBn.jpg",
132
+ "1x_webp": "http://meduza.io/impro/dROSpimx8lYjBAbaWxhjPzPggOoz_RxV8useloSPgbQ/fill/325/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNC81/NDMvOTE4L29yaWdp/bmFsLzRDeHQwdFR5/YWhlUGhnZHd4YVBz/R1EuanBn.webp",
133
+ "2x_webp": "http://meduza.io/impro/dgkov3ooEbjTSe1sUvY-NLVUr6y56Dbmtpke_g-i65c/fill/650/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNC81/NDMvOTE4L29yaWdp/bmFsLzRDeHQwdFR5/YWhlUGhnZHd4YVBz/R1EuanBn.webp"
134
+ },
135
+ "w600": {
136
+ "1x": "http://meduza.io/impro/03bNGjN3Exb5vIT4jm4-VouBTahiFgH9gF8MhGd5hdw/fill/600/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNC81/NDMvOTE4L29yaWdp/bmFsLzRDeHQwdFR5/YWhlUGhnZHd4YVBz/R1EuanBn.jpg",
137
+ "2x": "http://meduza.io/impro/k7qCc2LDxE-qv6L2P5LBGo-Qmdlm68WxC2OIi6yg_SY/fill/1200/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNC81/NDMvOTE4L29yaWdp/bmFsLzRDeHQwdFR5/YWhlUGhnZHd4YVBz/R1EuanBn.jpg",
138
+ "1x_webp": "http://meduza.io/impro/4So4ZS9GWd3WTs4fUY7Lbk4CiKkoPhUQiigwXxZVGo0/fill/600/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNC81/NDMvOTE4L29yaWdp/bmFsLzRDeHQwdFR5/YWhlUGhnZHd4YVBz/R1EuanBn.webp",
139
+ "2x_webp": "http://meduza.io/impro/VZ5TtAH8GN9hENkyuoPhG7TvCLemOhHf1fgJKG9i5T4/fill/1200/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNC81/NDMvOTE4L29yaWdp/bmFsLzRDeHQwdFR5/YWhlUGhnZHd4YVBz/R1EuanBn.webp"
140
+ }
141
+ },
142
+ "tag": "Можно купить",
143
+ "gradients": {
144
+ "text_rgb": "255,255,255",
145
+ "bg_rgb": "0,0,0"
146
+ },
147
+ "first_title": "Шторка для камеры",
148
+ "second_title": "500р."
149
+ }
150
+ },
151
+ "only_on": "mobile"
152
+ }
153
+ }
@@ -1,4 +1,5 @@
1
1
  export interface SimpleBlockProps {
2
2
  block: any
3
3
  styleContext?: string[] | string
4
+ id?: string
4
5
  }
@@ -7,7 +7,8 @@ import styles from './SimpleBlock.module.css'
7
7
 
8
8
  export const SimpleBlock: React.FC<SimpleBlockProps> = ({
9
9
  block: { data, type, only_on: onlyOn },
10
- styleContext
10
+ styleContext,
11
+ id
11
12
  }) => {
12
13
  let TagName
13
14
 
@@ -42,6 +43,7 @@ export const SimpleBlock: React.FC<SimpleBlockProps> = ({
42
43
  <TagName
43
44
  className={makeClassName(classNames)}
44
45
  dangerouslySetInnerHTML={{ __html: data }}
46
+ id={id}
45
47
  />
46
48
  )
47
49
  }
@@ -28,6 +28,7 @@
28
28
 
29
29
  .large {
30
30
  @media $landscapeTablet {
31
+
31
32
  font-size: 14px;
32
33
  line-height: 16px;
33
34
  letter-spacing: 1px;
@@ -54,14 +55,11 @@
54
55
  color: inherit;
55
56
  }
56
57
 
57
- .custom {
58
- color: var(--tagColor);
59
- }
60
-
61
58
  .is1to1,
62
59
  .is1to2,
63
60
  .isInSuperBlock {
64
61
  @media $landscapeTablet {
62
+
65
63
  font-size: 12px;
66
64
  line-height: 20px;
67
65
  letter-spacing: 1px;
@@ -71,6 +69,7 @@
71
69
  .is1to3,
72
70
  .is1to4 {
73
71
  @media $landscapeTablet {
72
+
74
73
  font-size: 10px;
75
74
  line-height: 15px;
76
75
  letter-spacing: 0.5px;
@@ -132,7 +131,3 @@
132
131
  display: block;
133
132
  }
134
133
  }
135
-
136
- .isInBookRelated {
137
- margin-bottom: 6px;
138
- }