@meduza/ui-kit-2 0.1.9 → 0.1.10
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/Footnote/Footnote.stories.d.ts +10 -0
- package/dist/Footnote/Footnote.types.d.ts +5 -0
- package/dist/Footnote/index.d.ts +3 -0
- package/dist/index.d.ts +1 -0
- package/dist/ui-kit-2.cjs.development.js +267 -240
- 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 +267 -241
- package/dist/ui-kit-2.esm.js.map +1 -1
- package/dist/ui-kit.css +697 -590
- package/package.json +1 -1
- package/src/DotsOnImage/DotsOnImage.module.css +13 -9
- package/src/DotsOnImage/DotsOnImage.test.tsx +1 -1
- package/src/DotsOnImage/index.tsx +28 -15
- package/src/DotsOnImage/mock.json +4 -4
- package/src/EmbedBlock/EmbedBlock.module.css +1 -1
- package/src/Footnote/Footnote.module.css +70 -0
- package/src/Footnote/Footnote.stories.module.css +5 -0
- package/src/Footnote/Footnote.stories.tsx +43 -0
- package/src/Footnote/Footnote.test.tsx +20 -0
- package/src/Footnote/Footnote.types.ts +5 -0
- package/src/Footnote/index.tsx +26 -0
- package/src/Popover/Popover.module.css +36 -2
- package/src/Popover/index.tsx +1 -1
- package/src/SimpleBlock/FootnoteLink.css +7 -0
- package/src/index.tsx +1 -0
package/package.json
CHANGED
|
@@ -39,23 +39,27 @@
|
|
|
39
39
|
top: 50%;
|
|
40
40
|
left: 50%;
|
|
41
41
|
|
|
42
|
-
width: 340px;
|
|
43
|
-
padding: 25px;
|
|
44
|
-
|
|
45
42
|
transform: translate(-50%, -50%);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.popoverTitle {
|
|
46
|
+
margin-bottom: 16px;
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
background-color: #fff;
|
|
50
|
-
box-shadow: 0px 5px 20px rgba(0, 0, 0, 0.2);
|
|
48
|
+
font-weight: 600;
|
|
49
|
+
}
|
|
51
50
|
|
|
51
|
+
.popoverBody {
|
|
52
52
|
font-family: $secondaryFont;
|
|
53
53
|
font-size: 16px;
|
|
54
54
|
line-height: 22px;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
.
|
|
58
|
-
|
|
57
|
+
.popoverText p {
|
|
58
|
+
margin: 0;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.popoverText a:hover {
|
|
62
|
+
color: $gold;
|
|
59
63
|
}
|
|
60
64
|
|
|
61
65
|
.dismiss {
|
|
@@ -11,7 +11,7 @@ describe('Dots On Image', () => {
|
|
|
11
11
|
const renderComponent = () => render(<DotsOnImage block={data} />)
|
|
12
12
|
|
|
13
13
|
it('should have root style', () => {
|
|
14
|
-
|
|
14
|
+
const { getByTestId } = renderComponent()
|
|
15
15
|
|
|
16
16
|
const dotsOnImage = getByTestId('dots-on-image')
|
|
17
17
|
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import React, { useState } from 'react'
|
|
2
2
|
import { PopoverData, DotsOnImageProps, SingleDot } from './DotsOnImage.types'
|
|
3
3
|
import { Image } from '../Image'
|
|
4
|
-
import {
|
|
4
|
+
import { Popover } from '../Popover'
|
|
5
|
+
import { Footnote } from '../Footnote'
|
|
6
|
+
|
|
7
|
+
import viewportSize from '../utils/viewportSize'
|
|
8
|
+
import { MediaQuerySizes } from '../constants'
|
|
5
9
|
|
|
6
10
|
import styles from './DotsOnImage.module.css'
|
|
7
11
|
|
|
@@ -62,20 +66,29 @@ export const DotsOnImage: React.FC<DotsOnImageProps> = ({
|
|
|
62
66
|
</div>
|
|
63
67
|
|
|
64
68
|
{popover.show && (
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
className={styles.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
69
|
+
<>
|
|
70
|
+
{viewportSize().width >= MediaQuerySizes.LANDSCAPE_TABLET ? (
|
|
71
|
+
<div className={styles.popover}>
|
|
72
|
+
<Footnote
|
|
73
|
+
onClose={(): void => {
|
|
74
|
+
setPopover({ show: false })
|
|
75
|
+
}}
|
|
76
|
+
>
|
|
77
|
+
<h3>{popover.title}</h3>
|
|
78
|
+
<div dangerouslySetInnerHTML={{ __html: popover.body }} />
|
|
79
|
+
</Footnote>
|
|
80
|
+
</div>
|
|
81
|
+
) : (
|
|
82
|
+
<Popover
|
|
83
|
+
onClose={(): void => {
|
|
84
|
+
setPopover({ show: false })
|
|
85
|
+
}}
|
|
86
|
+
>
|
|
87
|
+
<h3>{popover.title}</h3>
|
|
88
|
+
<div dangerouslySetInnerHTML={{ __html: popover.body }} />
|
|
89
|
+
</Popover>
|
|
90
|
+
)}
|
|
91
|
+
</>
|
|
79
92
|
)}
|
|
80
93
|
</div>
|
|
81
94
|
)
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"data": {
|
|
4
4
|
"dots": [
|
|
5
5
|
{
|
|
6
|
-
"title": "
|
|
7
|
-
"body": "<p
|
|
6
|
+
"title": "Мафия и Голливуд",
|
|
7
|
+
"body": "<p>Но Голливуду тех лет далеко за вдохновением ходить было не нужно. Мафия в 20-е подминала под себя профсоюзы по всей стране, и Голливуд не был исключением. Один из таких профсоюзов возглавил Томас Мэлой. Когда в 1931 году уволенный киномеханик пришёл к нему жаловаться, то подручный Мэлоя застрелил его прямо в кабинете. Причём без всяких последствий для себя.</p>",
|
|
8
8
|
"position": {
|
|
9
9
|
"x": 43.86,
|
|
10
10
|
"y": 31.03
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"id": "0-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
|
-
"title": "
|
|
21
|
-
"body": "<p
|
|
20
|
+
"title": "Аль Капоне в кино",
|
|
21
|
+
"body": "<p>Первые гангстерские фильмы начала 30-х своим появлением обязаны «Королю Чикаго» — Аль Капоне. Ещё при жизни он стал знаменитостью мирового масштаба: он получал письма со всех концов света, а журналисты выстраивались в очередь, чтобы задать ему пару вопросов. Отель «Готорн», из которого он привык вести дела, городские экскурсоводы называли «замком Капоне».</p>",
|
|
22
22
|
"position": {
|
|
23
23
|
"x": 16.05,
|
|
24
24
|
"y": 18.83
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
@import '../vars.css';
|
|
2
|
+
|
|
3
|
+
.root {
|
|
4
|
+
position: relative;
|
|
5
|
+
|
|
6
|
+
width: 320px;
|
|
7
|
+
padding: 20px;
|
|
8
|
+
|
|
9
|
+
border-radius: 8px;
|
|
10
|
+
background-color: #fff;
|
|
11
|
+
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0 5px 20px rgba(0, 0, 0, 0.2);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.body {
|
|
15
|
+
font-family: $secondaryFont;
|
|
16
|
+
font-size: 16px;
|
|
17
|
+
line-height: 22px;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.body h3 {
|
|
21
|
+
margin: 0 0 16px;
|
|
22
|
+
|
|
23
|
+
font-size: inherit;
|
|
24
|
+
font-weight: 600;
|
|
25
|
+
line-height: inherit;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.body p {
|
|
29
|
+
margin: 0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.body p + p {
|
|
33
|
+
margin-top: 6px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
.body a {
|
|
38
|
+
color: inherit;
|
|
39
|
+
box-shadow: inset 0 -1px $gold;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.body a:hover {
|
|
43
|
+
color: $gold;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.dismiss {
|
|
47
|
+
position: absolute;
|
|
48
|
+
top: 0;
|
|
49
|
+
right: 0;
|
|
50
|
+
|
|
51
|
+
margin: 0;
|
|
52
|
+
padding: 6px 9px 10px;
|
|
53
|
+
|
|
54
|
+
cursor: pointer;
|
|
55
|
+
|
|
56
|
+
color: #b3b3b3;
|
|
57
|
+
border-width: 0;
|
|
58
|
+
outline: none;
|
|
59
|
+
background-color: transparent;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.dismiss:hover {
|
|
63
|
+
color: #757575;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.dismiss svg {
|
|
67
|
+
width: 12px;
|
|
68
|
+
height: 12px;
|
|
69
|
+
}
|
|
70
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Footnote } from './'
|
|
3
|
+
import { PreviewWrapper } from '../_storybook/PreviewWrapper'
|
|
4
|
+
|
|
5
|
+
import styles from './Footnote.stories.module.css'
|
|
6
|
+
|
|
7
|
+
export default {
|
|
8
|
+
title: 'Main / Footnote',
|
|
9
|
+
component: Footnote,
|
|
10
|
+
parameters: {
|
|
11
|
+
themeWrapperSideBySide: true
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const Example: React.FC = () => {
|
|
16
|
+
return (
|
|
17
|
+
<>
|
|
18
|
+
<div className={styles.root}>
|
|
19
|
+
<Footnote onClose={(): void => alert('Handle Close')}>
|
|
20
|
+
<h3>Заголовок лвлвлдфова выа вовофдывлоа</h3>
|
|
21
|
+
<p>
|
|
22
|
+
«Я видел истинного Дональда Трампа, наблюдал за ним. Это обманщик,
|
|
23
|
+
притворщик и задира. Настоящий паршивец! Все его слова абсурдны
|
|
24
|
+
и направлены на скандал. Рейган когда-то сказал Горбачёву:
|
|
25
|
+
«Мистер Горбачёв, развалите эту стену!», а Трамп собирается
|
|
26
|
+
взводить стену между Америкой и Мексикой.
|
|
27
|
+
</p>
|
|
28
|
+
</Footnote>
|
|
29
|
+
</div>
|
|
30
|
+
</>
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export const Default: React.FC = () => (
|
|
35
|
+
<>
|
|
36
|
+
<PreviewWrapper theme="light">
|
|
37
|
+
<Example />
|
|
38
|
+
</PreviewWrapper>
|
|
39
|
+
<PreviewWrapper theme="dark">
|
|
40
|
+
<Example />
|
|
41
|
+
</PreviewWrapper>
|
|
42
|
+
</>
|
|
43
|
+
)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { render } from '@testing-library/react'
|
|
3
|
+
import { Footnote } from './'
|
|
4
|
+
import { FootnoteProps } from './Footnote.types'
|
|
5
|
+
|
|
6
|
+
import styles from './Footnote.module.css'
|
|
7
|
+
|
|
8
|
+
describe('Footnote', () => {
|
|
9
|
+
let props: FootnoteProps
|
|
10
|
+
|
|
11
|
+
const renderComponent = () => render(<Footnote {...props} />)
|
|
12
|
+
|
|
13
|
+
it('should have root style', () => {
|
|
14
|
+
const { getByTestId } = renderComponent()
|
|
15
|
+
|
|
16
|
+
const footnote = getByTestId('footnote')
|
|
17
|
+
|
|
18
|
+
expect(footnote).toHaveClass(styles.root)
|
|
19
|
+
})
|
|
20
|
+
})
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { FootnoteProps } from './Footnote.types'
|
|
3
|
+
import makeClassName from '../utils/makeClassName'
|
|
4
|
+
|
|
5
|
+
import { SvgSymbol } from '../SvgSymbol'
|
|
6
|
+
|
|
7
|
+
import styles from './Footnote.module.css'
|
|
8
|
+
|
|
9
|
+
export const Footnote: React.FC<FootnoteProps> = ({ children, onClose }) => {
|
|
10
|
+
return (
|
|
11
|
+
<div
|
|
12
|
+
data-testid="footnote"
|
|
13
|
+
className={makeClassName([[styles.root, true]])}
|
|
14
|
+
>
|
|
15
|
+
<button
|
|
16
|
+
className={styles.dismiss}
|
|
17
|
+
type="button"
|
|
18
|
+
onClick={(): void => onClose()}
|
|
19
|
+
>
|
|
20
|
+
<SvgSymbol icon="cross" size="unset" />
|
|
21
|
+
</button>
|
|
22
|
+
|
|
23
|
+
<div className={styles.body}>{children}</div>
|
|
24
|
+
</div>
|
|
25
|
+
)
|
|
26
|
+
}
|
|
@@ -13,11 +13,14 @@
|
|
|
13
13
|
width: 100%;
|
|
14
14
|
height: 100%;
|
|
15
15
|
min-height: 120px;
|
|
16
|
-
padding: 10px
|
|
16
|
+
padding: 10px 0 0;
|
|
17
17
|
|
|
18
18
|
animation: fadeOut 250ms ease both 100ms;
|
|
19
19
|
|
|
20
20
|
opacity: 1;
|
|
21
|
+
|
|
22
|
+
font-size: 16px;
|
|
23
|
+
line-height: 22px;
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
.root.visible {
|
|
@@ -44,7 +47,7 @@
|
|
|
44
47
|
max-width: 420px;
|
|
45
48
|
min-height: 80px;
|
|
46
49
|
margin: 0 auto;
|
|
47
|
-
padding:
|
|
50
|
+
padding: 22px 20px 28px;
|
|
48
51
|
|
|
49
52
|
animation: disappear 350ms ease both;
|
|
50
53
|
}
|
|
@@ -97,6 +100,37 @@
|
|
|
97
100
|
animation: appear 350ms ease both;
|
|
98
101
|
}
|
|
99
102
|
|
|
103
|
+
.body {
|
|
104
|
+
font-family: $secondaryFont;
|
|
105
|
+
font-size: 16px;
|
|
106
|
+
line-height: 22px;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.body h3 {
|
|
110
|
+
margin: 0 0 5px;
|
|
111
|
+
|
|
112
|
+
font-size: inherit;
|
|
113
|
+
font-weight: 600;
|
|
114
|
+
line-height: inherit;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.body p {
|
|
118
|
+
margin: 0;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.body p + p {
|
|
122
|
+
margin-top: 6px;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.body a {
|
|
126
|
+
color: inherit;
|
|
127
|
+
box-shadow: inset 0 -1px $gold;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.body a:hover {
|
|
131
|
+
color: $gold;
|
|
132
|
+
}
|
|
133
|
+
|
|
100
134
|
@keyframes appear {
|
|
101
135
|
0% {
|
|
102
136
|
transform: translateY(100%);
|
package/src/Popover/index.tsx
CHANGED
|
@@ -32,3 +32,10 @@ span[data-body]:hover {
|
|
|
32
32
|
background-color: #5B5B5B;
|
|
33
33
|
box-shadow: inset 1px 0 #747474, inset 0 1px #747474, inset -1px 0 #747474, inset 0 -1px #747474;
|
|
34
34
|
}
|
|
35
|
+
|
|
36
|
+
span[data-highlight='true'],
|
|
37
|
+
span[data-highlight='true']:hover {
|
|
38
|
+
background-color: #f4efe9;
|
|
39
|
+
box-shadow: inset 1px 0 #b88b58, inset 0 1px #b88b58, inset -1px 0 #b88b58,
|
|
40
|
+
inset 0 -1px #b88b58;
|
|
41
|
+
}
|