@meduza/ui-kit-2 0.1.37 → 0.1.38
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.
- package/dist/SensitiveBlock/SensitiveBlock.stories.d.ts +10 -0
- package/dist/SensitiveBlock/SensitiveBlock.types.d.ts +15 -0
- package/dist/SensitiveBlock/index.d.ts +3 -0
- package/dist/index.d.ts +1 -0
- package/dist/ui-kit-2.cjs.development.js +195 -126
- package/dist/ui-kit-2.cjs.development.js.map +1 -1
- package/dist/ui-kit-2.cjs.production.min.js +1 -1
- package/dist/ui-kit-2.cjs.production.min.js.map +1 -1
- package/dist/ui-kit-2.esm.js +195 -127
- package/dist/ui-kit-2.esm.js.map +1 -1
- package/dist/ui-kit.css +1282 -1162
- package/package.json +6 -6
- package/src/.DS_Store +0 -0
- package/src/EmbedBlock/EmbedBlock.module.css +20 -60
- package/src/EmbedBlock/EmbedBlock.tsx +10 -12
- package/src/GroupedBlock/index.tsx +22 -8
- package/src/GroupedBlock/mock.json +54 -47
- package/src/RawHtmlBlock/RawHtmlBlock.stories.module.css +3 -0
- package/src/RawHtmlBlock/RawHtmlBlock.stories.tsx +6 -1
- package/src/RawHtmlBlock/index.tsx +5 -0
- package/src/RawHtmlBlock/mock.json +113 -24
- package/src/RelatedRichBlock/RelatedRichBlock.module.css +19 -12
- package/src/RenderBlocks/index.tsx +4 -5
- package/src/RenderBlocks/mock.json +0 -73
- package/src/SensitiveBlock/SensitiveBlock.module.css +143 -0
- package/src/SensitiveBlock/SensitiveBlock.stories.module.css +8 -0
- package/src/SensitiveBlock/SensitiveBlock.stories.tsx +40 -0
- package/src/SensitiveBlock/SensitiveBlock.test.tsx +20 -0
- package/src/SensitiveBlock/SensitiveBlock.types.ts +15 -0
- package/src/SensitiveBlock/index.tsx +70 -0
- package/src/SensitiveBlock/mock.json +61 -0
- package/src/Spoiler/index.tsx +2 -1
- package/src/SvgSymbol/SvgSymbol.module.css +1 -1
- package/src/index.tsx +1 -0
- package/src/vars.css +8 -8
|
@@ -13,17 +13,23 @@
|
|
|
13
13
|
outline-width: 0;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
.root:hover {
|
|
17
|
+
@media $mobile {
|
|
18
|
+
opacity: 0.95;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
16
22
|
.root::after {
|
|
17
23
|
position: absolute;
|
|
18
|
-
z-index: 20;
|
|
19
24
|
top: 0;
|
|
20
25
|
right: 0;
|
|
21
26
|
bottom: 0;
|
|
22
27
|
left: 0;
|
|
23
|
-
|
|
24
|
-
content: '';
|
|
28
|
+
z-index: 20;
|
|
25
29
|
|
|
26
30
|
border-radius: 8px;
|
|
31
|
+
|
|
32
|
+
content: '';
|
|
27
33
|
}
|
|
28
34
|
|
|
29
35
|
.root::before {
|
|
@@ -49,9 +55,9 @@
|
|
|
49
55
|
.overlay,
|
|
50
56
|
.overlayHeader {
|
|
51
57
|
position: absolute;
|
|
52
|
-
z-index: 10;
|
|
53
58
|
right: 0;
|
|
54
59
|
left: 0;
|
|
60
|
+
z-index: 10;
|
|
55
61
|
}
|
|
56
62
|
|
|
57
63
|
.overlay {
|
|
@@ -71,16 +77,16 @@
|
|
|
71
77
|
flex-flow: column nowrap;
|
|
72
78
|
justify-content: flex-end;
|
|
73
79
|
|
|
74
|
-
padding: 12px 15px
|
|
80
|
+
padding: 12px 15px;
|
|
75
81
|
|
|
76
82
|
background-color: #f7f7f7;
|
|
77
83
|
|
|
78
84
|
@media $mobile {
|
|
79
85
|
position: absolute;
|
|
80
|
-
z-index: 10;
|
|
81
86
|
right: 0;
|
|
82
87
|
bottom: 0;
|
|
83
88
|
left: 0;
|
|
89
|
+
z-index: 10;
|
|
84
90
|
|
|
85
91
|
min-height: 295px;
|
|
86
92
|
padding: 20px;
|
|
@@ -100,10 +106,10 @@
|
|
|
100
106
|
.isRich.hasGradient .body {
|
|
101
107
|
@media $mobile {
|
|
102
108
|
position: absolute;
|
|
103
|
-
z-index: 10;
|
|
104
109
|
right: 0;
|
|
105
110
|
bottom: 0;
|
|
106
111
|
left: 0;
|
|
112
|
+
z-index: 10;
|
|
107
113
|
|
|
108
114
|
min-height: 295px;
|
|
109
115
|
|
|
@@ -117,15 +123,15 @@
|
|
|
117
123
|
|
|
118
124
|
.isRich .picture::after {
|
|
119
125
|
position: absolute;
|
|
120
|
-
z-index: 10;
|
|
121
126
|
right: 1px;
|
|
122
127
|
bottom: 0;
|
|
123
128
|
left: 1px;
|
|
124
|
-
|
|
125
|
-
content: '';
|
|
129
|
+
z-index: 10;
|
|
126
130
|
|
|
127
131
|
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
|
128
132
|
|
|
133
|
+
content: '';
|
|
134
|
+
|
|
129
135
|
@media $mobile {
|
|
130
136
|
content: '';
|
|
131
137
|
}
|
|
@@ -133,6 +139,7 @@
|
|
|
133
139
|
|
|
134
140
|
.isCard {
|
|
135
141
|
color: #fff;
|
|
142
|
+
|
|
136
143
|
background-color: #191919;
|
|
137
144
|
|
|
138
145
|
@media $mobile {
|
|
@@ -145,10 +152,10 @@
|
|
|
145
152
|
|
|
146
153
|
@media $mobile {
|
|
147
154
|
position: absolute;
|
|
148
|
-
z-index: 10;
|
|
149
155
|
right: 0;
|
|
150
156
|
bottom: 0;
|
|
151
157
|
left: 0;
|
|
158
|
+
z-index: 10;
|
|
152
159
|
|
|
153
160
|
min-height: 295px;
|
|
154
161
|
}
|
|
@@ -205,10 +212,10 @@
|
|
|
205
212
|
|
|
206
213
|
.tag {
|
|
207
214
|
position: absolute;
|
|
208
|
-
z-index: 10;
|
|
209
215
|
top: 14px;
|
|
210
216
|
right: 15px;
|
|
211
217
|
left: 15px;
|
|
218
|
+
z-index: 10;
|
|
212
219
|
|
|
213
220
|
color: rgba(255, 255, 255, 0.7);
|
|
214
221
|
|
|
@@ -11,11 +11,11 @@ import { CardTitle } from '../CardTitle'
|
|
|
11
11
|
import { RelatedBlock } from '../RelatedBlock'
|
|
12
12
|
import { SourceBlock } from '../SourceBlock'
|
|
13
13
|
import { EmbedBlockContainer } from '../EmbedBlock'
|
|
14
|
-
import { RelatedRichBlock } from '../RelatedRichBlock'
|
|
15
14
|
import { GroupedBlock } from '../GroupedBlock'
|
|
16
15
|
import { MetaContainer } from '../Meta/MetaContainer'
|
|
17
16
|
import { Table } from '../Table'
|
|
18
17
|
import { MaterialNote } from '../MaterialNote'
|
|
18
|
+
import { SensitiveBlock } from '../SensitiveBlock'
|
|
19
19
|
|
|
20
20
|
export const RenderBlocks: React.FC<RenderBlocksProps> = ({
|
|
21
21
|
block,
|
|
@@ -82,10 +82,6 @@ export const RenderBlocks: React.FC<RenderBlocksProps> = ({
|
|
|
82
82
|
return <ListBlock block={block} styleContext={styleContext} />
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
case 'related_rich': {
|
|
86
|
-
return <RelatedRichBlock block={block} styleContext={styleContext} />
|
|
87
|
-
}
|
|
88
|
-
|
|
89
85
|
case 'chapter-subtitle': {
|
|
90
86
|
return <ChapterBlock block={block} styleContext={styleContext} />
|
|
91
87
|
}
|
|
@@ -104,6 +100,9 @@ export const RenderBlocks: React.FC<RenderBlocksProps> = ({
|
|
|
104
100
|
case 'table':
|
|
105
101
|
return <Table block={block} styleContext={styleContext} />
|
|
106
102
|
|
|
103
|
+
case 'sensitive':
|
|
104
|
+
return <SensitiveBlock block={block} styleContext={styleContext} />
|
|
105
|
+
|
|
107
106
|
case 'embed':
|
|
108
107
|
case 'embed_code':
|
|
109
108
|
case 'game_embed':
|
|
@@ -5,79 +5,6 @@
|
|
|
5
5
|
"data": "Hello Component",
|
|
6
6
|
"length": 9,
|
|
7
7
|
"id": "11-1ff7b114f405e532387ad41ebfc3c794c3baaa413180d495c00a60273f0d2eb400d"
|
|
8
|
-
},
|
|
9
|
-
{
|
|
10
|
-
"type": "related_rich",
|
|
11
|
-
"data": {
|
|
12
|
-
"url": "https://meduza.io/",
|
|
13
|
-
"fallback": {
|
|
14
|
-
"data": {
|
|
15
|
-
"title": "Не богато вышло",
|
|
16
|
-
"related": [
|
|
17
|
-
{
|
|
18
|
-
"title": "«Если кто-нибудь видит меня и слышит, пожалуйста, распространите это видео любым способом! Чтобы я существовал!»",
|
|
19
|
-
"second": "Автор фильма «Котлован» — о том, как сделал его из обращений россиян к Путину",
|
|
20
|
-
"layout": "rich",
|
|
21
|
-
"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",
|
|
22
|
-
"id": "0-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
|
23
|
-
}
|
|
24
|
-
]
|
|
25
|
-
},
|
|
26
|
-
"only_on": "desktop"
|
|
27
|
-
},
|
|
28
|
-
"cover": {
|
|
29
|
-
"ratio": 1.4976958525,
|
|
30
|
-
"layout": "rich",
|
|
31
|
-
"urls": {
|
|
32
|
-
"w325": {
|
|
33
|
-
"1x": "http://meduza.io/image/attachments/images/006/087/556/elarge/E_3uGWnvssXzgtJ05-_Rfw.jpg",
|
|
34
|
-
"2x": "http://meduza.io/image/attachments/images/006/087/556/elarge/E_3uGWnvssXzgtJ05-_Rfw.jpg",
|
|
35
|
-
"1x_webp": "http://meduza.io/impro/MbBIK4vj9YMr8INLi6GMIYF4muqHFCWV0b1rxhhM6aI/fill/0/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8w/ODcvNTU2L2VsYXJn/ZS9FXzN1R1dudnNz/WHpndEowNS1fUmZ3/LmpwZw.webp",
|
|
36
|
-
"2x_webp": "http://meduza.io/impro/MbBIK4vj9YMr8INLi6GMIYF4muqHFCWV0b1rxhhM6aI/fill/0/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8w/ODcvNTU2L2VsYXJn/ZS9FXzN1R1dudnNz/WHpndEowNS1fUmZ3/LmpwZw.webp"
|
|
37
|
-
},
|
|
38
|
-
"w600": {
|
|
39
|
-
"1x": "http://meduza.io/image/attachments/images/006/087/556/elarge/E_3uGWnvssXzgtJ05-_Rfw.jpg",
|
|
40
|
-
"2x": "http://meduza.io/image/attachments/images/006/087/556/elarge/E_3uGWnvssXzgtJ05-_Rfw.jpg",
|
|
41
|
-
"1x_webp": "http://meduza.io/impro/MbBIK4vj9YMr8INLi6GMIYF4muqHFCWV0b1rxhhM6aI/fill/0/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8w/ODcvNTU2L2VsYXJn/ZS9FXzN1R1dudnNz/WHpndEowNS1fUmZ3/LmpwZw.webp",
|
|
42
|
-
"2x_webp": "http://meduza.io/impro/MbBIK4vj9YMr8INLi6GMIYF4muqHFCWV0b1rxhhM6aI/fill/0/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8w/ODcvNTU2L2VsYXJn/ZS9FXzN1R1dudnNz/WHpndEowNS1fUmZ3/LmpwZw.webp"
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
"tag": "Читайте также",
|
|
46
|
-
"gradients": {
|
|
47
|
-
"text_rgb": "255,255,255",
|
|
48
|
-
"bg_rgb": "0,0,0"
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
"blocks": [
|
|
52
|
-
{
|
|
53
|
-
"type": "rich_title",
|
|
54
|
-
"data": {
|
|
55
|
-
"first": "«Если кто-нибудь видит меня и слышит, пожалуйста, распространите это видео любым способом! Чтобы я существовал!»",
|
|
56
|
-
"second": "Автор фильма «Котлован» — о том, как сделал его из обращений россиян к Путину",
|
|
57
|
-
"as": "h3",
|
|
58
|
-
"featured": false
|
|
59
|
-
},
|
|
60
|
-
"id": "1-7b53ea24bd8ae1cfa59f45e4e4027bdabb5bf9667b97f0a6ed45d6b464c47356"
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"type": "meta",
|
|
64
|
-
"data": {
|
|
65
|
-
"lang": "ru",
|
|
66
|
-
"components": [
|
|
67
|
-
{
|
|
68
|
-
"type": "datetime",
|
|
69
|
-
"datetime": 1600593764,
|
|
70
|
-
"id": "7639a7d1455a1ca907de0fc98a22b017e23f30e7df15b0739c78418848d674b5"
|
|
71
|
-
}
|
|
72
|
-
],
|
|
73
|
-
"theme": "light"
|
|
74
|
-
},
|
|
75
|
-
"id": "2-e09585bd2b15e886b22728975010295dae47dd7ace948bc8aa012080f713290d"
|
|
76
|
-
}
|
|
77
|
-
]
|
|
78
|
-
},
|
|
79
|
-
"only_on": "desktop",
|
|
80
|
-
"id": "11-1ff7b114f405e532387ad41ebfc3c7941313c3baaa413180d495c00a60273f0d2eb400d"
|
|
81
8
|
}
|
|
82
9
|
]
|
|
83
10
|
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
@import '../vars.css';
|
|
2
|
+
|
|
3
|
+
.root {
|
|
4
|
+
position: relative;
|
|
5
|
+
|
|
6
|
+
margin: 15px 0;
|
|
7
|
+
|
|
8
|
+
@media $mobile {
|
|
9
|
+
margin: 25px 0 20px;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.root:first-child {
|
|
14
|
+
margin-top: 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.root:last-child {
|
|
18
|
+
margin-bottom: 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.root figcaption {
|
|
22
|
+
width: 100%;
|
|
23
|
+
max-width: 650px;
|
|
24
|
+
margin-right: auto;
|
|
25
|
+
margin-left: auto;
|
|
26
|
+
|
|
27
|
+
font-family: $secondaryFont;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.container {
|
|
31
|
+
position: relative;
|
|
32
|
+
transition: min-height 350ms ease;
|
|
33
|
+
min-height: 170px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.overlay {
|
|
37
|
+
position: absolute;
|
|
38
|
+
z-index: 10;
|
|
39
|
+
top: 0;
|
|
40
|
+
right: -20px;
|
|
41
|
+
bottom: 0;
|
|
42
|
+
left: -20px;
|
|
43
|
+
|
|
44
|
+
display: flex;
|
|
45
|
+
align-items: center;
|
|
46
|
+
flex-flow: column nowrap;
|
|
47
|
+
justify-content: center;
|
|
48
|
+
|
|
49
|
+
padding: 30px 20px;
|
|
50
|
+
|
|
51
|
+
transition: opacity 500ms ease, visibility 500ms ease;
|
|
52
|
+
|
|
53
|
+
background-color: rgba(255, 255, 255, 1);
|
|
54
|
+
background-repeat: no-repeat;
|
|
55
|
+
background-position: center top;
|
|
56
|
+
background-size: cover;
|
|
57
|
+
|
|
58
|
+
@media $mobile {
|
|
59
|
+
right: 0;
|
|
60
|
+
left: 0;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.content {
|
|
65
|
+
user-select: none;
|
|
66
|
+
|
|
67
|
+
color: #fff;
|
|
68
|
+
|
|
69
|
+
font-family: $secondaryFont;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.content p {
|
|
73
|
+
display: block;
|
|
74
|
+
|
|
75
|
+
width: 100%;
|
|
76
|
+
max-width: 368px;
|
|
77
|
+
margin-top: 0;
|
|
78
|
+
margin-bottom: 24px;
|
|
79
|
+
|
|
80
|
+
text-align: center;
|
|
81
|
+
|
|
82
|
+
font-size: 16px;
|
|
83
|
+
line-height: 22px;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.button {
|
|
87
|
+
width: 100%;
|
|
88
|
+
max-width: 348px;
|
|
89
|
+
margin: 0 auto;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.default {
|
|
93
|
+
max-width: 650px;
|
|
94
|
+
|
|
95
|
+
@media $mobile {
|
|
96
|
+
margin-right: auto;
|
|
97
|
+
margin-left: auto;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.full {
|
|
102
|
+
max-width: 980px;
|
|
103
|
+
|
|
104
|
+
@media $mobile {
|
|
105
|
+
margin-right: auto;
|
|
106
|
+
margin-left: auto;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.full .container {
|
|
111
|
+
margin-right: -20px;
|
|
112
|
+
margin-left: -20px;
|
|
113
|
+
|
|
114
|
+
@media $mobile {
|
|
115
|
+
margin-right: 0;
|
|
116
|
+
margin-left: 0;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.super_full {
|
|
121
|
+
max-width: 100%;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.super_full .container {
|
|
125
|
+
@media $mobile {
|
|
126
|
+
margin-right: -15px;
|
|
127
|
+
margin-left: -15px;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
/* STATE */
|
|
133
|
+
.visible .overlay {
|
|
134
|
+
visibility: hidden;
|
|
135
|
+
|
|
136
|
+
pointer-events: none;
|
|
137
|
+
|
|
138
|
+
opacity: 0;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.visible .container {
|
|
142
|
+
min-height: 0;
|
|
143
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { SensitiveBlock } from './'
|
|
3
|
+
import { PreviewWrapper } from '../_storybook/PreviewWrapper'
|
|
4
|
+
|
|
5
|
+
import styles from './SensitiveBlock.stories.module.css'
|
|
6
|
+
|
|
7
|
+
import mock from './mock.json'
|
|
8
|
+
|
|
9
|
+
export default {
|
|
10
|
+
title: 'Main / SensitiveBlock',
|
|
11
|
+
component: SensitiveBlock,
|
|
12
|
+
parameters: {
|
|
13
|
+
themeWrapperSideBySide: true
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const Example: React.FC = () => {
|
|
18
|
+
const { blocks } = mock
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<>
|
|
22
|
+
<div className={styles.root}>
|
|
23
|
+
{blocks.map((item) => (
|
|
24
|
+
<SensitiveBlock block={item} key={item.id} styleContext={[]} />
|
|
25
|
+
))}
|
|
26
|
+
</div>
|
|
27
|
+
</>
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const Default: React.FC = () => (
|
|
32
|
+
<>
|
|
33
|
+
<PreviewWrapper theme="light">
|
|
34
|
+
<Example />
|
|
35
|
+
</PreviewWrapper>
|
|
36
|
+
{/* <PreviewWrapper theme="dark">
|
|
37
|
+
<Example />
|
|
38
|
+
</PreviewWrapper> */}
|
|
39
|
+
</>
|
|
40
|
+
)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { render } from '@testing-library/react'
|
|
3
|
+
import { SensitiveBlock } from './'
|
|
4
|
+
import { SensitiveBlockProps } from './SensitiveBlock.types'
|
|
5
|
+
|
|
6
|
+
import styles from './SensitiveBlock.module.css'
|
|
7
|
+
|
|
8
|
+
describe('Sensitive Block', () => {
|
|
9
|
+
let props: SensitiveBlockProps
|
|
10
|
+
|
|
11
|
+
const renderComponent = () => render(<SensitiveBlock {...props} />)
|
|
12
|
+
|
|
13
|
+
it('should have root style', () => {
|
|
14
|
+
const { getByTestId } = renderComponent()
|
|
15
|
+
|
|
16
|
+
const sensitiveBlock = getByTestId('sensitive-block')
|
|
17
|
+
|
|
18
|
+
expect(sensitiveBlock).toHaveClass(styles.root)
|
|
19
|
+
})
|
|
20
|
+
})
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import React, { useState } from 'react'
|
|
2
|
+
import { SensitiveBlockProps } from './SensitiveBlock.types'
|
|
3
|
+
import makeClassName from '../utils/makeClassName'
|
|
4
|
+
|
|
5
|
+
import { EmbedBlockContainer } from '../EmbedBlock'
|
|
6
|
+
import { MediaCaption } from '../MediaCaption'
|
|
7
|
+
import { Button } from '../Button'
|
|
8
|
+
|
|
9
|
+
import styles from './SensitiveBlock.module.css'
|
|
10
|
+
|
|
11
|
+
export const SensitiveBlock: React.FC<SensitiveBlockProps> = ({
|
|
12
|
+
block,
|
|
13
|
+
block: { cc, caption, credit, blurred_image: blurredImage },
|
|
14
|
+
block: {
|
|
15
|
+
item: {
|
|
16
|
+
data: { display }
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
styleContext
|
|
20
|
+
}) => {
|
|
21
|
+
const [visible, isVisible] = useState(false)
|
|
22
|
+
|
|
23
|
+
const handleClick = () => {
|
|
24
|
+
isVisible(true)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<div
|
|
29
|
+
data-testid="sensitive-block"
|
|
30
|
+
className={makeClassName([
|
|
31
|
+
[styles.root, true],
|
|
32
|
+
[styles.visible, visible],
|
|
33
|
+
[styles[display], display && styles[display]]
|
|
34
|
+
])}
|
|
35
|
+
>
|
|
36
|
+
<div className={styles.container}>
|
|
37
|
+
<div
|
|
38
|
+
className={styles.overlay}
|
|
39
|
+
style={{ backgroundImage: `url(${blurredImage})` }}
|
|
40
|
+
>
|
|
41
|
+
<div className={styles.content}>
|
|
42
|
+
<p dangerouslySetInnerHTML={{ __html: block.title }} />
|
|
43
|
+
|
|
44
|
+
<div className={styles.button}>
|
|
45
|
+
<Button onClick={() => handleClick()} theme="light">
|
|
46
|
+
{block.button.text}
|
|
47
|
+
</Button>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
<div className={styles.media}>
|
|
52
|
+
<EmbedBlockContainer
|
|
53
|
+
block={block.item}
|
|
54
|
+
styleContext={['isInSensitiveBlock']}
|
|
55
|
+
/>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
{cc && (
|
|
60
|
+
<figcaption className={styles.figcaption}>
|
|
61
|
+
<MediaCaption
|
|
62
|
+
credit={credit}
|
|
63
|
+
caption={caption}
|
|
64
|
+
styleContext={styleContext}
|
|
65
|
+
/>
|
|
66
|
+
</figcaption>
|
|
67
|
+
)}
|
|
68
|
+
</div>
|
|
69
|
+
)
|
|
70
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"blocks": [
|
|
3
|
+
{
|
|
4
|
+
"type": "sensitive",
|
|
5
|
+
"title": "18 ноября несколько тысяч человек устроили возле Бранденбургских ворот в Берлине акцию против антикоронавирусных мер",
|
|
6
|
+
"caption": "18 ноября несколько тысяч человек устроили возле Бранденбургских ворот в Берлине акцию против антикоронавирусных мер, введенных правительством Германии. <a href=\"https://www.zeit.de/politik/deutschland/2020-11/bevoelkerungsschutzgesetz-berlin-corona-proteste-abstimmung-corona-politik-regierungsviertel-infektionsschutzgesetz\" target=\"_blank\">Как сообщает Die Zeit</a>, протестующие не соблюдали дистанцию и не носили защитных масок. В полиции <a href=\"https://twitter.com/PolizeiBerlin_E/status/1329033384409116679\" target=\"_blank\">заявили</a>, что участники протестов бросали в полицейских бутылки, камни и петарды, а также использовали перцовый спрей. Полиция применила против демонстрантов водометы, что «очень необычно для Берлина», <a href=\"https://www.bild.de/regional/berlin/berlin-aktuell/gegner-der-corona-massnahmen-demonstrieren-wieder-in-berlin-74003922.bild.html\" target=\"_blank\">пишет Bild</a>. В полиции <a href=\"https://twitter.com/PolizeiBerlin_E/status/1329063341776642053\" target=\"_blank\">сообщили</a> о 190 задержанных.",
|
|
7
|
+
"credit": "Odd Andersen / AFP / Scanpix / LETA",
|
|
8
|
+
"cc": "default",
|
|
9
|
+
"button": {
|
|
10
|
+
"text": "Трогни чтобы увидеть"
|
|
11
|
+
},
|
|
12
|
+
"blurred_image": "https://meduza.io/image/attachments/images/006/179/198/original/7E08Oyt5qSKpRywhXLwrLg.webp",
|
|
13
|
+
"item": {
|
|
14
|
+
"type": "image",
|
|
15
|
+
"data": {
|
|
16
|
+
"small_url": "https://meduza.io/image/attachments/images/006/177/130/small/5Ei7odv4IYiUaPJIicJDLQ.jpg",
|
|
17
|
+
"large_url": "https://meduza.io/image/attachments/images/006/177/130/large/5Ei7odv4IYiUaPJIicJDLQ.jpg",
|
|
18
|
+
"elarge_url": "https://meduza.io/image/attachments/images/006/177/130/elarge/5Ei7odv4IYiUaPJIicJDLQ.jpg",
|
|
19
|
+
"height": 1328,
|
|
20
|
+
"width": 1960,
|
|
21
|
+
"display": "full",
|
|
22
|
+
"optimized": {
|
|
23
|
+
"original": "https://meduza.io/impro/anHT0Vh2OPD2xtF9H8CcIZcYPwMfg1Xs3luucAMANCs/fill/2670/0/ce/0/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.jpg",
|
|
24
|
+
"w325": {
|
|
25
|
+
"1x": "https://meduza.io/impro/Pppv1xRwyEPWgTYcWdDtLTyMfKk1yiSWYWbSocZaPX4/fill/325/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.jpg",
|
|
26
|
+
"2x": "https://meduza.io/impro/K2boyZjzctKBpp6eEndOswVplmSviEntVMF7sS-HfGM/fill/650/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.jpg",
|
|
27
|
+
"1x_webp": "https://meduza.io/impro/ju9g9g9NRCZRhAiGXQ28_tUQciVtLPtfGEq4QwzXF6o/fill/325/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.webp",
|
|
28
|
+
"2x_webp": "https://meduza.io/impro/mAkn7bkT3SAKd-eYYPXBuzXl-947G0Z-2OiSYWLYOG8/fill/650/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.webp"
|
|
29
|
+
},
|
|
30
|
+
"w520": {
|
|
31
|
+
"1x": "https://meduza.io/impro/wq7cnaFcyfi4BwlJCPntDAqBPevcWzJplOq66sWFhNE/fill/520/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.jpg",
|
|
32
|
+
"2x": "https://meduza.io/impro/KQypYyxEx7jf8rdM8AY-6C1UKsY7F8VsaWfqbwbR95k/fill/1040/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.jpg",
|
|
33
|
+
"1x_webp": "https://meduza.io/impro/X4geRHzOaIiljNaZlD1_0kP8G_OoWcdKFVKlCrKdHds/fill/520/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.webp",
|
|
34
|
+
"2x_webp": "https://meduza.io/impro/p0-QkEHBdVvxXX052mvP7XXSDav12VvsQ-drzO47VlI/fill/1040/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.webp"
|
|
35
|
+
},
|
|
36
|
+
"w650": {
|
|
37
|
+
"1x": "https://meduza.io/impro/K2boyZjzctKBpp6eEndOswVplmSviEntVMF7sS-HfGM/fill/650/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.jpg",
|
|
38
|
+
"2x": "https://meduza.io/impro/IsiZ5kDEhsWzIds0csL_oz5ml2HHOQU_JIksf1CKlkk/fill/1300/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.jpg",
|
|
39
|
+
"1x_webp": "https://meduza.io/impro/mAkn7bkT3SAKd-eYYPXBuzXl-947G0Z-2OiSYWLYOG8/fill/650/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.webp",
|
|
40
|
+
"2x_webp": "https://meduza.io/impro/tglX8IWWkUPexJezwDfoQg6xDrenUpWaMAgAwHckg7M/fill/1300/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.webp"
|
|
41
|
+
},
|
|
42
|
+
"w980": {
|
|
43
|
+
"1x": "https://meduza.io/impro/XLntahPDRv2sWhqa6zmvKeXIBC_rJe-Gm-QzZidE_v4/fill/980/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.jpg",
|
|
44
|
+
"2x": "https://meduza.io/impro/B3JjZn3hHC6k_evpEmUept2DLnPb3NjuiVKORxlQe8E/fill/1960/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.jpg",
|
|
45
|
+
"1x_webp": "https://meduza.io/impro/XneTbp8xG5tiRfLqkrQR93VBh2bjvsnXsW9TSKVIHu0/fill/980/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.webp",
|
|
46
|
+
"2x_webp": "https://meduza.io/impro/phgrh-EpPeXDBZ1ypW0Z_ZttXFISniLFICLoePQHCas/fill/1960/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.webp"
|
|
47
|
+
},
|
|
48
|
+
"w1335": {
|
|
49
|
+
"1x": "https://meduza.io/impro/GLUfXXJOrHhkW6IcxUfkZ9-ezIJJ7Pcj2ozTVuc-O9c/fill/1335/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.jpg",
|
|
50
|
+
"2x": "https://meduza.io/impro/EEPDi9TRZbxf6P4bDKMKMy_X-rNnZv28Aze1GuTWgS4/fill/2670/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.jpg",
|
|
51
|
+
"1x_webp": "https://meduza.io/impro/kr_f7-7yvpCWTM5VGPq1ydB_wwo6s4AChrbae9S6yDc/fill/1335/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.webp",
|
|
52
|
+
"2x_webp": "https://meduza.io/impro/wJ26MavDdFbHCQ3kzRuEpmfKwZS05Z-8FtM8HkBc3nQ/fill/2670/0/ce/1/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi8x/NzcvMTMwL29yaWdp/bmFsLzVFaTdvZHY0/SVlpVWFQSklpY0pE/TFEuanBn.webp"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"id": "0-55ff26409b089e78cd332f7125eb6efd2bc2522fb3f0742332ff6b3480916ab0"
|
|
57
|
+
},
|
|
58
|
+
"id": "0-55ff26409b089e78cd332f7125eb6efdere2bc2522fb3f0742332ff6b3480916ab0"
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
}
|
package/src/Spoiler/index.tsx
CHANGED
|
@@ -45,9 +45,10 @@ export const Spoiler: React.FC<SpoilerProps> = ({
|
|
|
45
45
|
[[styles.spoiled], !!spoiled]
|
|
46
46
|
]
|
|
47
47
|
|
|
48
|
-
const context = ['center']
|
|
48
|
+
const context = ['center']
|
|
49
49
|
|
|
50
50
|
if (styleContext) {
|
|
51
|
+
context.concat(styleContext)
|
|
51
52
|
classNames = makeStyleContext(classNames, styleContext, styles)
|
|
52
53
|
}
|
|
53
54
|
|
package/src/index.tsx
CHANGED
package/src/vars.css
CHANGED
|
@@ -27,15 +27,15 @@ $gapMedium: 15px;
|
|
|
27
27
|
$gapSmall: 12px;
|
|
28
28
|
|
|
29
29
|
/* Media */
|
|
30
|
-
$mobile: only screen and (min-
|
|
31
|
-
$contentWidth: only screen and (min-
|
|
32
|
-
$portraitTablet: only screen and (min-
|
|
33
|
-
$landscapeTablet: only screen and (min-
|
|
34
|
-
$desktop: only screen and (min-
|
|
35
|
-
$wideDesktop: only screen and (min-
|
|
30
|
+
$mobile: only screen and (min-width: 32em); /* 512 */
|
|
31
|
+
$contentWidth: only screen and (min-width: 40.625em); /* 650 */
|
|
32
|
+
$portraitTablet: only screen and (min-width: 48em); /* 768 */
|
|
33
|
+
$landscapeTablet: only screen and (min-width: 64em); /* 1024 */
|
|
34
|
+
$desktop: only screen and (min-width: 63.125em); /* 1010 */
|
|
35
|
+
$wideDesktop: only screen and (min-width: 75em); /* 1200 */
|
|
36
36
|
|
|
37
|
-
$mobileMax: only screen and (max-
|
|
38
|
-
$landscapeTabletMax: only screen and (max-
|
|
37
|
+
$mobileMax: only screen and (max-width: 32.1875em); /* 511 */
|
|
38
|
+
$landscapeTabletMax: only screen and (max-width: 63.9375em); /* 1023 */
|
|
39
39
|
|
|
40
40
|
/* Zindex */
|
|
41
41
|
$zIndex-1: 100;
|