@cloud-ru/ds-uikit-product-modal-predefined 1.0.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.
- package/CHANGELOG.md +8 -0
- package/LICENSE +201 -0
- package/README.md +359 -0
- package/dist/cjs/components/DeleteModal/DeleteModal.d.ts +2 -0
- package/dist/cjs/components/DeleteModal/DeleteModal.js +39 -0
- package/dist/cjs/components/DeleteModal/index.d.ts +1 -0
- package/dist/cjs/components/DeleteModal/index.js +17 -0
- package/dist/cjs/components/DeleteModal/styles.module.css +33 -0
- package/dist/cjs/components/RecallModal/RecallModal.d.ts +2 -0
- package/dist/cjs/components/RecallModal/RecallModal.js +37 -0
- package/dist/cjs/components/RecallModal/index.d.ts +1 -0
- package/dist/cjs/components/RecallModal/index.js +17 -0
- package/dist/cjs/components/RecallModal/styles.module.css +33 -0
- package/dist/cjs/components/ReleaseNotes/ReleaseNotes.d.ts +7 -0
- package/dist/cjs/components/ReleaseNotes/ReleaseNotes.js +15 -0
- package/dist/cjs/components/ReleaseNotes/index.d.ts +1 -0
- package/dist/cjs/components/ReleaseNotes/index.js +17 -0
- package/dist/cjs/components/index.d.ts +3 -0
- package/dist/cjs/components/index.js +19 -0
- package/dist/cjs/constants.d.ts +27 -0
- package/dist/cjs/constants.js +30 -0
- package/dist/cjs/helperComponents/DesktopReleaseNotes/DesktopReleaseNotes.d.ts +2 -0
- package/dist/cjs/helperComponents/DesktopReleaseNotes/DesktopReleaseNotes.js +21 -0
- package/dist/cjs/helperComponents/DesktopReleaseNotes/index.d.ts +1 -0
- package/dist/cjs/helperComponents/DesktopReleaseNotes/index.js +17 -0
- package/dist/cjs/helperComponents/DesktopReleaseNotes/styles.module.css +19 -0
- package/dist/cjs/helperComponents/InputConfirm/InputConfirm.d.ts +48 -0
- package/dist/cjs/helperComponents/InputConfirm/InputConfirm.js +15 -0
- package/dist/cjs/helperComponents/InputConfirm/index.d.ts +1 -0
- package/dist/cjs/helperComponents/InputConfirm/index.js +17 -0
- package/dist/cjs/helperComponents/InputConfirm/styles.module.css +38 -0
- package/dist/cjs/helperComponents/MobileReleaseNotes/MobileReleaseNotes.d.ts +2 -0
- package/dist/cjs/helperComponents/MobileReleaseNotes/MobileReleaseNotes.js +26 -0
- package/dist/cjs/helperComponents/MobileReleaseNotes/index.d.ts +1 -0
- package/dist/cjs/helperComponents/MobileReleaseNotes/index.js +17 -0
- package/dist/cjs/helperComponents/NoteItem/NoteItem.d.ts +6 -0
- package/dist/cjs/helperComponents/NoteItem/NoteItem.js +20 -0
- package/dist/cjs/helperComponents/NoteItem/index.d.ts +1 -0
- package/dist/cjs/helperComponents/NoteItem/index.js +17 -0
- package/dist/cjs/helperComponents/NoteItem/styles.module.css +53 -0
- package/dist/cjs/helperComponents/ReleaseNotesContent/ReleaseNotesContent.d.ts +28 -0
- package/dist/cjs/helperComponents/ReleaseNotesContent/ReleaseNotesContent.js +30 -0
- package/dist/cjs/helperComponents/ReleaseNotesContent/index.d.ts +1 -0
- package/dist/cjs/helperComponents/ReleaseNotesContent/index.js +17 -0
- package/dist/cjs/helperComponents/ReleaseNotesContent/styles.module.css +40 -0
- package/dist/cjs/helperComponents/ReleaseNotesFooter/ReleaseNotesFooter.d.ts +25 -0
- package/dist/cjs/helperComponents/ReleaseNotesFooter/ReleaseNotesFooter.js +17 -0
- package/dist/cjs/helperComponents/ReleaseNotesFooter/index.d.ts +1 -0
- package/dist/cjs/helperComponents/ReleaseNotesFooter/index.js +17 -0
- package/dist/cjs/helperComponents/ReleaseNotesFooter/styles.module.css +27 -0
- package/dist/cjs/helperComponents/index.d.ts +6 -0
- package/dist/cjs/helperComponents/index.js +22 -0
- package/dist/cjs/hooks.d.ts +26 -0
- package/dist/cjs/hooks.js +59 -0
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/locale/index.d.ts +143 -0
- package/dist/cjs/locale/index.js +76 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/style.css +243 -0
- package/dist/cjs/types.d.ts +67 -0
- package/dist/cjs/types.js +2 -0
- package/dist/esm/components/DeleteModal/DeleteModal.d.ts +2 -0
- package/dist/esm/components/DeleteModal/DeleteModal.js +33 -0
- package/dist/esm/components/DeleteModal/index.d.ts +1 -0
- package/dist/esm/components/DeleteModal/index.js +1 -0
- package/dist/esm/components/DeleteModal/styles.module.css +33 -0
- package/dist/esm/components/RecallModal/RecallModal.d.ts +2 -0
- package/dist/esm/components/RecallModal/RecallModal.js +31 -0
- package/dist/esm/components/RecallModal/index.d.ts +1 -0
- package/dist/esm/components/RecallModal/index.js +1 -0
- package/dist/esm/components/RecallModal/styles.module.css +33 -0
- package/dist/esm/components/ReleaseNotes/ReleaseNotes.d.ts +7 -0
- package/dist/esm/components/ReleaseNotes/ReleaseNotes.js +12 -0
- package/dist/esm/components/ReleaseNotes/index.d.ts +1 -0
- package/dist/esm/components/ReleaseNotes/index.js +1 -0
- package/dist/esm/components/index.d.ts +3 -0
- package/dist/esm/components/index.js +3 -0
- package/dist/esm/constants.d.ts +27 -0
- package/dist/esm/constants.js +27 -0
- package/dist/esm/helperComponents/DesktopReleaseNotes/DesktopReleaseNotes.d.ts +2 -0
- package/dist/esm/helperComponents/DesktopReleaseNotes/DesktopReleaseNotes.js +15 -0
- package/dist/esm/helperComponents/DesktopReleaseNotes/index.d.ts +1 -0
- package/dist/esm/helperComponents/DesktopReleaseNotes/index.js +1 -0
- package/dist/esm/helperComponents/DesktopReleaseNotes/styles.module.css +19 -0
- package/dist/esm/helperComponents/InputConfirm/InputConfirm.d.ts +48 -0
- package/dist/esm/helperComponents/InputConfirm/InputConfirm.js +9 -0
- package/dist/esm/helperComponents/InputConfirm/index.d.ts +1 -0
- package/dist/esm/helperComponents/InputConfirm/index.js +1 -0
- package/dist/esm/helperComponents/InputConfirm/styles.module.css +38 -0
- package/dist/esm/helperComponents/MobileReleaseNotes/MobileReleaseNotes.d.ts +2 -0
- package/dist/esm/helperComponents/MobileReleaseNotes/MobileReleaseNotes.js +23 -0
- package/dist/esm/helperComponents/MobileReleaseNotes/index.d.ts +1 -0
- package/dist/esm/helperComponents/MobileReleaseNotes/index.js +1 -0
- package/dist/esm/helperComponents/NoteItem/NoteItem.d.ts +6 -0
- package/dist/esm/helperComponents/NoteItem/NoteItem.js +14 -0
- package/dist/esm/helperComponents/NoteItem/index.d.ts +1 -0
- package/dist/esm/helperComponents/NoteItem/index.js +1 -0
- package/dist/esm/helperComponents/NoteItem/styles.module.css +53 -0
- package/dist/esm/helperComponents/ReleaseNotesContent/ReleaseNotesContent.d.ts +28 -0
- package/dist/esm/helperComponents/ReleaseNotesContent/ReleaseNotesContent.js +24 -0
- package/dist/esm/helperComponents/ReleaseNotesContent/index.d.ts +1 -0
- package/dist/esm/helperComponents/ReleaseNotesContent/index.js +1 -0
- package/dist/esm/helperComponents/ReleaseNotesContent/styles.module.css +40 -0
- package/dist/esm/helperComponents/ReleaseNotesFooter/ReleaseNotesFooter.d.ts +25 -0
- package/dist/esm/helperComponents/ReleaseNotesFooter/ReleaseNotesFooter.js +11 -0
- package/dist/esm/helperComponents/ReleaseNotesFooter/index.d.ts +1 -0
- package/dist/esm/helperComponents/ReleaseNotesFooter/index.js +1 -0
- package/dist/esm/helperComponents/ReleaseNotesFooter/styles.module.css +27 -0
- package/dist/esm/helperComponents/index.d.ts +6 -0
- package/dist/esm/helperComponents/index.js +6 -0
- package/dist/esm/hooks.d.ts +26 -0
- package/dist/esm/hooks.js +55 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/locale/index.d.ts +143 -0
- package/dist/esm/locale/index.js +73 -0
- package/dist/esm/style.css +243 -0
- package/dist/esm/types.d.ts +67 -0
- package/dist/esm/types.js +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +63 -0
- package/src/components/DeleteModal/DeleteModal.tsx +116 -0
- package/src/components/DeleteModal/index.ts +1 -0
- package/src/components/DeleteModal/styles.module.scss +37 -0
- package/src/components/RecallModal/RecallModal.tsx +111 -0
- package/src/components/RecallModal/index.ts +1 -0
- package/src/components/RecallModal/styles.module.scss +37 -0
- package/src/components/ReleaseNotes/ReleaseNotes.tsx +15 -0
- package/src/components/ReleaseNotes/index.ts +1 -0
- package/src/components/index.ts +3 -0
- package/src/constants.ts +29 -0
- package/src/helperComponents/DesktopReleaseNotes/DesktopReleaseNotes.tsx +85 -0
- package/src/helperComponents/DesktopReleaseNotes/index.ts +1 -0
- package/src/helperComponents/DesktopReleaseNotes/styles.module.scss +24 -0
- package/src/helperComponents/InputConfirm/InputConfirm.tsx +72 -0
- package/src/helperComponents/InputConfirm/index.ts +1 -0
- package/src/helperComponents/InputConfirm/styles.module.scss +30 -0
- package/src/helperComponents/MobileReleaseNotes/MobileReleaseNotes.tsx +88 -0
- package/src/helperComponents/MobileReleaseNotes/index.ts +1 -0
- package/src/helperComponents/NoteItem/NoteItem.tsx +58 -0
- package/src/helperComponents/NoteItem/index.ts +1 -0
- package/src/helperComponents/NoteItem/styles.module.scss +54 -0
- package/src/helperComponents/ReleaseNotesContent/ReleaseNotesContent.tsx +119 -0
- package/src/helperComponents/ReleaseNotesContent/index.ts +1 -0
- package/src/helperComponents/ReleaseNotesContent/styles.module.scss +45 -0
- package/src/helperComponents/ReleaseNotesFooter/ReleaseNotesFooter.tsx +84 -0
- package/src/helperComponents/ReleaseNotesFooter/index.ts +1 -0
- package/src/helperComponents/ReleaseNotesFooter/styles.module.scss +25 -0
- package/src/helperComponents/index.ts +6 -0
- package/src/hooks.ts +89 -0
- package/src/index.ts +4 -0
- package/src/locale/index.ts +77 -0
- package/src/types.ts +80 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
.safeAreaTop{
|
|
2
|
+
display:flex;
|
|
3
|
+
flex-direction:column;
|
|
4
|
+
align-items:flex-start;
|
|
5
|
+
align-self:stretch;
|
|
6
|
+
padding-top:var(--sn-modal-anatomy-container-safeArea-paddingTop, var(--sn-density-spacing-interval-l, var(--sn-primitive-dimension-24, 24px)));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.safeAreaBottom{
|
|
10
|
+
display:flex;
|
|
11
|
+
flex-direction:column;
|
|
12
|
+
align-items:flex-start;
|
|
13
|
+
align-self:stretch;
|
|
14
|
+
padding-bottom:var(--sn-modal-anatomy-container-safeArea-paddingBottom, var(--sn-density-spacing-interval-s, var(--sn-primitive-dimension-8, 8px)));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.body{
|
|
18
|
+
min-height:auto;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.content{
|
|
22
|
+
display:flex;
|
|
23
|
+
flex-direction:column;
|
|
24
|
+
row-gap:var(--sn-primitive-dimension-16, 16px);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.footer{
|
|
28
|
+
display:flex;
|
|
29
|
+
-moz-column-gap:var(--sn-primitive-dimension-8, 8px);
|
|
30
|
+
column-gap:var(--sn-primitive-dimension-8, 8px);
|
|
31
|
+
justify-content:flex-end;
|
|
32
|
+
width:100%;
|
|
33
|
+
}
|
|
34
|
+
.safeAreaTop{
|
|
35
|
+
display:flex;
|
|
36
|
+
flex-direction:column;
|
|
37
|
+
align-items:flex-start;
|
|
38
|
+
align-self:stretch;
|
|
39
|
+
padding-top:var(--sn-modal-anatomy-container-safeArea-paddingTop, var(--sn-density-spacing-interval-l, var(--sn-primitive-dimension-24, 24px)));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.safeAreaBottom{
|
|
43
|
+
display:flex;
|
|
44
|
+
flex-direction:column;
|
|
45
|
+
align-items:flex-start;
|
|
46
|
+
align-self:stretch;
|
|
47
|
+
padding-bottom:var(--sn-modal-anatomy-container-safeArea-paddingBottom, var(--sn-density-spacing-interval-s, var(--sn-primitive-dimension-8, 8px)));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.body{
|
|
51
|
+
min-height:auto;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.content{
|
|
55
|
+
display:flex;
|
|
56
|
+
flex-direction:column;
|
|
57
|
+
row-gap:var(--sn-primitive-dimension-16, 16px);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.footer{
|
|
61
|
+
display:flex;
|
|
62
|
+
-moz-column-gap:var(--sn-primitive-dimension-8, 8px);
|
|
63
|
+
column-gap:var(--sn-primitive-dimension-8, 8px);
|
|
64
|
+
justify-content:flex-end;
|
|
65
|
+
width:100%;
|
|
66
|
+
}
|
|
67
|
+
.safeAreaTop{
|
|
68
|
+
display:flex;
|
|
69
|
+
flex-direction:column;
|
|
70
|
+
align-items:flex-start;
|
|
71
|
+
align-self:stretch;
|
|
72
|
+
padding-top:var(--sn-modal-anatomy-container-safeArea-paddingTop, var(--sn-density-spacing-interval-l, var(--sn-primitive-dimension-24, 24px)));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.safeAreaBottom{
|
|
76
|
+
display:flex;
|
|
77
|
+
flex-direction:column;
|
|
78
|
+
align-items:flex-start;
|
|
79
|
+
align-self:stretch;
|
|
80
|
+
padding-bottom:var(--sn-modal-anatomy-container-safeArea-paddingBottom, var(--sn-density-spacing-interval-s, var(--sn-primitive-dimension-8, 8px)));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.body{
|
|
84
|
+
min-height:calc(6 * var(--sn-primitive-dimension-64, 64px));
|
|
85
|
+
}
|
|
86
|
+
.root{
|
|
87
|
+
display:flex;
|
|
88
|
+
flex-direction:column;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.confirmText{
|
|
92
|
+
display:flex;
|
|
93
|
+
-moz-column-gap:var(--sn-primitive-dimension-8, 8px);
|
|
94
|
+
column-gap:var(--sn-primitive-dimension-8, 8px);
|
|
95
|
+
align-items:center;
|
|
96
|
+
justify-content:space-between;
|
|
97
|
+
margin-bottom:var(--sn-primitive-dimension-8, 8px);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.confirmText[data-align=start]{
|
|
101
|
+
-moz-column-gap:var(--sn-primitive-dimension-4, 4px);
|
|
102
|
+
column-gap:var(--sn-primitive-dimension-4, 4px);
|
|
103
|
+
justify-content:flex-start;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.confirmLabel{
|
|
107
|
+
font-family:var(--sn-regular-body-m-fontFamily, var(--sn-brand-font-fontFamily-regular-body, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
|
|
108
|
+
font-weight:var(--sn-regular-body-m-fontWeight, var(--sn-theme-typography-fontWeight-regular-body-m, var(--sn-brand-font-fontWeight-light-regular-body-m, var(--sn-primitive-font-fontWeightValue-400, 400))));
|
|
109
|
+
line-height:var(--sn-regular-body-m-lineHeight, var(--sn-density-typography-roleBody-lineHeightM, var(--sn-primitive-font-lineHeight-by16, 24px)));
|
|
110
|
+
font-size:var(--sn-regular-body-m-fontSize, var(--sn-density-typography-roleBody-fontSizeM, var(--sn-primitive-font-fontSize-16, 16px)));
|
|
111
|
+
letter-spacing:var(--sn-regular-body-m-letterSpacing, var(--sn-primitive-font-letterSpacing-m, 0.1px));
|
|
112
|
+
paragraph-spacing:var(--sn-regular-body-m-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize14, 7px));
|
|
113
|
+
color:var(--sn-theme-color-available-version-textSecondary, var(--sn-brand-color-text-version-secondary, rgba(65, 66, 78, 0.8)));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.confirmValue{
|
|
117
|
+
font-family:var(--sn-regular-body-m-fontFamily, var(--sn-brand-font-fontFamily-regular-body, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
|
|
118
|
+
font-weight:var(--sn-regular-body-m-fontWeight, var(--sn-theme-typography-fontWeight-regular-body-m, var(--sn-brand-font-fontWeight-light-regular-body-m, var(--sn-primitive-font-fontWeightValue-400, 400))));
|
|
119
|
+
line-height:var(--sn-regular-body-m-lineHeight, var(--sn-density-typography-roleBody-lineHeightM, var(--sn-primitive-font-lineHeight-by16, 24px)));
|
|
120
|
+
font-size:var(--sn-regular-body-m-fontSize, var(--sn-density-typography-roleBody-fontSizeM, var(--sn-primitive-font-fontSize-16, 16px)));
|
|
121
|
+
letter-spacing:var(--sn-regular-body-m-letterSpacing, var(--sn-primitive-font-letterSpacing-m, 0.1px));
|
|
122
|
+
paragraph-spacing:var(--sn-regular-body-m-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize14, 7px));
|
|
123
|
+
}
|
|
124
|
+
.root{
|
|
125
|
+
display:grid;
|
|
126
|
+
grid-template-columns:minmax(0, 1fr) minmax(0, 1fr);
|
|
127
|
+
-moz-column-gap:var(--sn-primitive-dimension-24, 24px);
|
|
128
|
+
column-gap:var(--sn-primitive-dimension-24, 24px);
|
|
129
|
+
min-height:calc(5 * var(--sn-primitive-dimension-64, 64px));
|
|
130
|
+
}
|
|
131
|
+
.root[data-surface=bottomSheet]{
|
|
132
|
+
grid-template-columns:minmax(0, 1fr);
|
|
133
|
+
row-gap:var(--sn-primitive-dimension-16, 16px);
|
|
134
|
+
min-height:0;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.media{
|
|
138
|
+
position:relative;
|
|
139
|
+
overflow:hidden;
|
|
140
|
+
min-width:0;
|
|
141
|
+
border-radius:var(--sn-primitive-dimension-16, 16px);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.image,
|
|
145
|
+
.video{
|
|
146
|
+
display:block;
|
|
147
|
+
width:100%;
|
|
148
|
+
height:100%;
|
|
149
|
+
-o-object-fit:cover;
|
|
150
|
+
object-fit:cover;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.videoSkeleton{
|
|
154
|
+
position:absolute;
|
|
155
|
+
inset:0;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.content{
|
|
159
|
+
display:flex;
|
|
160
|
+
flex-direction:column;
|
|
161
|
+
row-gap:var(--sn-primitive-dimension-12, 12px);
|
|
162
|
+
min-width:0;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.description{
|
|
166
|
+
min-height:0;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.root[data-surface=modal] .content{
|
|
170
|
+
row-gap:var(--sn-primitive-dimension-16, 16px);
|
|
171
|
+
order:1;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.root[data-surface=modal] .media{
|
|
175
|
+
order:2;
|
|
176
|
+
}
|
|
177
|
+
.root{
|
|
178
|
+
display:flex;
|
|
179
|
+
flex-direction:column;
|
|
180
|
+
row-gap:var(--sn-primitive-dimension-16, 16px);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.modal{
|
|
184
|
+
min-width:calc(11 * var(--sn-primitive-dimension-64, 64px));
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.bottomSheet{
|
|
188
|
+
min-width:0;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.carousel{
|
|
192
|
+
min-width:0;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.stateWrapper{
|
|
196
|
+
display:flex;
|
|
197
|
+
flex-direction:column;
|
|
198
|
+
align-items:center;
|
|
199
|
+
justify-content:center;
|
|
200
|
+
width:100%;
|
|
201
|
+
}
|
|
202
|
+
.stateWrapper[data-surface=modal]{
|
|
203
|
+
height:calc(7 * var(--sn-primitive-dimension-64, 64px) - var(--sn-primitive-dimension-4, 4px));
|
|
204
|
+
}
|
|
205
|
+
.stateWrapper[data-surface=bottomSheet]{
|
|
206
|
+
min-height:calc(7 * var(--sn-primitive-dimension-64, 64px));
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.state{
|
|
210
|
+
width:100%;
|
|
211
|
+
max-width:calc(9 * var(--sn-primitive-dimension-64, 64px) + 3 * var(--sn-primitive-dimension-16, 16px));
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.loading{
|
|
215
|
+
height:calc(5 * var(--sn-primitive-dimension-64, 64px));
|
|
216
|
+
}
|
|
217
|
+
.root{
|
|
218
|
+
position:relative;
|
|
219
|
+
display:flex;
|
|
220
|
+
-moz-column-gap:var(--sn-primitive-dimension-16, 16px);
|
|
221
|
+
column-gap:var(--sn-primitive-dimension-16, 16px);
|
|
222
|
+
align-items:center;
|
|
223
|
+
justify-content:space-between;
|
|
224
|
+
width:100%;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.controls{
|
|
228
|
+
display:flex;
|
|
229
|
+
-moz-column-gap:var(--sn-primitive-dimension-8, 8px);
|
|
230
|
+
column-gap:var(--sn-primitive-dimension-8, 8px);
|
|
231
|
+
align-items:center;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.counter{
|
|
235
|
+
font-family:var(--sn-regular-body-m-fontFamily, var(--sn-brand-font-fontFamily-regular-body, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
|
|
236
|
+
font-weight:var(--sn-regular-body-m-fontWeight, var(--sn-theme-typography-fontWeight-regular-body-m, var(--sn-brand-font-fontWeight-light-regular-body-m, var(--sn-primitive-font-fontWeightValue-400, 400))));
|
|
237
|
+
line-height:var(--sn-regular-body-m-lineHeight, var(--sn-density-typography-roleBody-lineHeightM, var(--sn-primitive-font-lineHeight-by16, 24px)));
|
|
238
|
+
font-size:var(--sn-regular-body-m-fontSize, var(--sn-density-typography-roleBody-fontSizeM, var(--sn-primitive-font-fontSize-16, 16px)));
|
|
239
|
+
letter-spacing:var(--sn-regular-body-m-letterSpacing, var(--sn-primitive-font-letterSpacing-m, 0.1px));
|
|
240
|
+
paragraph-spacing:var(--sn-regular-body-m-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize14, 7px));
|
|
241
|
+
color:var(--sn-theme-color-available-version-textTertiary, var(--sn-brand-color-text-version-tertiary, rgba(65, 66, 78, 0.5490196078)));
|
|
242
|
+
white-space:nowrap;
|
|
243
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ButtonProps } from '@cloud-ru/ds-button';
|
|
2
|
+
import { ModalCustomProps } from '@cloud-ru/ds-modal';
|
|
3
|
+
import { ValueOf, WithSupportProps } from '@cloud-ru/ds-utils';
|
|
4
|
+
import { ReactNode } from 'react';
|
|
5
|
+
import { CONFIRM_TEXT_VARIANT, CONTENT_STATE } from './constants';
|
|
6
|
+
export type ReleaseNotesContentState = ValueOf<typeof CONTENT_STATE>;
|
|
7
|
+
export type ConfirmTextVariant = ValueOf<typeof CONFIRM_TEXT_VARIANT>;
|
|
8
|
+
export type NoteItemProps = {
|
|
9
|
+
/** Заголовок новости */
|
|
10
|
+
title: string;
|
|
11
|
+
/** Описание новости в markdown */
|
|
12
|
+
description: string;
|
|
13
|
+
/** Иллюстрация */
|
|
14
|
+
image: {
|
|
15
|
+
src: string;
|
|
16
|
+
alt: string;
|
|
17
|
+
};
|
|
18
|
+
/** Видео вместо статичной иллюстрации */
|
|
19
|
+
video?: string;
|
|
20
|
+
};
|
|
21
|
+
type BaseActionModalProps = Pick<ModalCustomProps, 'open' | 'onClose' | 'mode' | 'closeOnPopstate'> & {
|
|
22
|
+
/** Подсказка рядом с заголовком */
|
|
23
|
+
titleTooltip?: ReactNode;
|
|
24
|
+
/** Состояние с подтверждением через ввод текста */
|
|
25
|
+
confirmable?: boolean;
|
|
26
|
+
/** Текст, который нужно ввести для подтверждения */
|
|
27
|
+
confirmText?: string;
|
|
28
|
+
/** Скрыть кнопку копирования текста подтверждения */
|
|
29
|
+
hideConfirmCopyButton?: boolean;
|
|
30
|
+
/** Основной текст модалки */
|
|
31
|
+
content?: ReactNode;
|
|
32
|
+
/** Подзаголовок */
|
|
33
|
+
subtitle?: ReactNode;
|
|
34
|
+
};
|
|
35
|
+
export type DeleteModalProps = WithSupportProps<BaseActionModalProps & {
|
|
36
|
+
/** Тип удаляемого объекта, отображается в заголовке */
|
|
37
|
+
objectType?: string;
|
|
38
|
+
/** Колбэк подтверждения удаления */
|
|
39
|
+
onDelete(onClose: () => void): void;
|
|
40
|
+
/** Состояние загрузки кнопки удаления */
|
|
41
|
+
deleting?: boolean;
|
|
42
|
+
/** Тип текста подтверждения */
|
|
43
|
+
confirmTextVariant?: ConfirmTextVariant;
|
|
44
|
+
}>;
|
|
45
|
+
export type RecallModalProps = WithSupportProps<BaseActionModalProps & {
|
|
46
|
+
/** Колбэк подтверждения отзыва */
|
|
47
|
+
onRecall(onClose: () => void): void;
|
|
48
|
+
/** Состояние загрузки кнопки отзыва */
|
|
49
|
+
loading?: boolean;
|
|
50
|
+
}>;
|
|
51
|
+
export type ReleaseNotesProps = WithSupportProps<Pick<ModalCustomProps, 'open' | 'onClose' | 'closeOnPopstate'> & {
|
|
52
|
+
/** Визуальное состояние контента по Figma */
|
|
53
|
+
contentState?: ReleaseNotesContentState;
|
|
54
|
+
/** Массив новостей */
|
|
55
|
+
items: NoteItemProps[];
|
|
56
|
+
/** Состояние загрузки контента */
|
|
57
|
+
loading?: boolean;
|
|
58
|
+
/** Действие "Ознакомиться позже" */
|
|
59
|
+
onReadLaterClick?(): void;
|
|
60
|
+
/** Действие перезагрузки на экране ошибки */
|
|
61
|
+
onDataErrorRetryClick?(): void;
|
|
62
|
+
/** Действие при смене слайда */
|
|
63
|
+
onSlideChange?(slide: number): void;
|
|
64
|
+
/** Только mobile: дополнительные пропсы action-кнопки "Ознакомиться позже" (на desktop игнорируется). */
|
|
65
|
+
readLaterButtonProps?: Partial<ButtonProps>;
|
|
66
|
+
}>;
|
|
67
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { DeleteModalProps } from '../../types.js';
|
|
2
|
+
export declare function DeleteModal({ open, onClose, mode, closeOnPopstate, objectType, titleTooltip, onDelete, deleting, content, confirmable, confirmText, hideConfirmCopyButton, subtitle, confirmTextVariant, ...rest }: DeleteModalProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { APPEARANCE, Button, VIEW } from '@cloud-ru/ds-button';
|
|
3
|
+
import { ModalCustom, WIDTH } from '@cloud-ru/ds-modal';
|
|
4
|
+
import { QuestionTooltip } from '@cloud-ru/ds-tooltip';
|
|
5
|
+
import { useRef } from 'react';
|
|
6
|
+
import { CONFIRM_TEXT_VARIANT, TEST_IDS } from '../../constants.js';
|
|
7
|
+
import { InputConfirm } from '../../helperComponents/index.js';
|
|
8
|
+
import { useTextFieldValidation } from '../../hooks.js';
|
|
9
|
+
import { modalPredefinedLocale } from '../../locale/index.js';
|
|
10
|
+
import styles from './styles.module.css';
|
|
11
|
+
export function DeleteModal({ open, onClose, mode, closeOnPopstate, objectType, titleTooltip, onDelete, deleting, content, confirmable = false, confirmText, hideConfirmCopyButton, subtitle, confirmTextVariant = CONFIRM_TEXT_VARIANT.Name, ...rest }) {
|
|
12
|
+
const { t } = modalPredefinedLocale.useTranslations();
|
|
13
|
+
const inputRef = useRef(null);
|
|
14
|
+
const { value, error, handleChange, reset, validate } = useTextFieldValidation({
|
|
15
|
+
target: confirmable ? confirmText : undefined,
|
|
16
|
+
errorText: t('confirm.error'),
|
|
17
|
+
});
|
|
18
|
+
const shouldShowConfirm = Boolean(confirmable && confirmText);
|
|
19
|
+
const title = objectType ? t('deleteModal.title', { objectType }) : t('deleteModal.fallbackTitle');
|
|
20
|
+
const confirmPlaceholder = confirmTextVariant === CONFIRM_TEXT_VARIANT.Text ? t('confirm.textPlaceholder') : t('confirm.namePlaceholder');
|
|
21
|
+
const handleClose = () => {
|
|
22
|
+
reset();
|
|
23
|
+
onClose();
|
|
24
|
+
};
|
|
25
|
+
const handleApproveClick = () => {
|
|
26
|
+
if (!validate()) {
|
|
27
|
+
inputRef.current?.focus();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
onDelete(handleClose);
|
|
31
|
+
};
|
|
32
|
+
return (_jsxs(ModalCustom, { open: open, onClose: handleClose, mode: mode, closeOnPopstate: closeOnPopstate, width: WIDTH.S, "data-test-id": TEST_IDS.deleteModal, "data-confirmable": confirmable || undefined, ...rest, children: [_jsx("div", { className: styles.safeAreaTop }), _jsx(ModalCustom.Header, { title: title, subtitle: subtitle, slotAfterTitle: titleTooltip ? _jsx(QuestionTooltip, { size: 's', tip: titleTooltip }) : undefined }), _jsx(ModalCustom.Body, { className: styles.body, content: _jsxs("div", { className: styles.content, children: [content ?? t('deleteModal.content'), shouldShowConfirm && (_jsx(InputConfirm, { ref: inputRef, confirmText: confirmText ?? '', hideConfirmCopyButton: hideConfirmCopyButton, value: value, error: error, size: 'l', copyLineAlign: 'start', confirmLabel: t('deleteModal.confirmLabel'), placeholder: confirmPlaceholder, onChange: handleChange }))] }) }), _jsx("div", { className: styles.safeAreaBottom }), _jsx(ModalCustom.Footer, { children: _jsxs("div", { className: styles.footer, children: [_jsx(Button, { view: VIEW.Outline, appearance: APPEARANCE.Neutral, label: t('deleteModal.cancel'), onClick: handleClose, "data-test-id": TEST_IDS.cancelButton }), _jsx(Button, { view: VIEW.Filled, appearance: APPEARANCE.Critical, label: t('deleteModal.approve'), loading: deleting, onClick: handleApproveClick, "data-test-id": TEST_IDS.approveButton })] }) })] }));
|
|
33
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DeleteModal.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DeleteModal.js';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
.safeAreaTop{
|
|
2
|
+
display:flex;
|
|
3
|
+
flex-direction:column;
|
|
4
|
+
align-items:flex-start;
|
|
5
|
+
align-self:stretch;
|
|
6
|
+
padding-top:var(--sn-modal-anatomy-container-safeArea-paddingTop, var(--sn-density-spacing-interval-l, var(--sn-primitive-dimension-24, 24px)));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.safeAreaBottom{
|
|
10
|
+
display:flex;
|
|
11
|
+
flex-direction:column;
|
|
12
|
+
align-items:flex-start;
|
|
13
|
+
align-self:stretch;
|
|
14
|
+
padding-bottom:var(--sn-modal-anatomy-container-safeArea-paddingBottom, var(--sn-density-spacing-interval-s, var(--sn-primitive-dimension-8, 8px)));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.body{
|
|
18
|
+
min-height:auto;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.content{
|
|
22
|
+
display:flex;
|
|
23
|
+
flex-direction:column;
|
|
24
|
+
row-gap:var(--sn-primitive-dimension-16, 16px);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.footer{
|
|
28
|
+
display:flex;
|
|
29
|
+
-moz-column-gap:var(--sn-primitive-dimension-8, 8px);
|
|
30
|
+
column-gap:var(--sn-primitive-dimension-8, 8px);
|
|
31
|
+
justify-content:flex-end;
|
|
32
|
+
width:100%;
|
|
33
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { RecallModalProps } from '../../types.js';
|
|
2
|
+
export declare function RecallModal({ open, onClose, mode, closeOnPopstate, titleTooltip, onRecall, loading, content, confirmable, confirmText, hideConfirmCopyButton, subtitle, ...rest }: RecallModalProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { APPEARANCE, Button, VIEW } from '@cloud-ru/ds-button';
|
|
3
|
+
import { ModalCustom, WIDTH } from '@cloud-ru/ds-modal';
|
|
4
|
+
import { QuestionTooltip } from '@cloud-ru/ds-tooltip';
|
|
5
|
+
import { useRef } from 'react';
|
|
6
|
+
import { TEST_IDS } from '../../constants.js';
|
|
7
|
+
import { InputConfirm } from '../../helperComponents/index.js';
|
|
8
|
+
import { useTextFieldValidation } from '../../hooks.js';
|
|
9
|
+
import { modalPredefinedLocale } from '../../locale/index.js';
|
|
10
|
+
import styles from './styles.module.css';
|
|
11
|
+
export function RecallModal({ open, onClose, mode, closeOnPopstate, titleTooltip, onRecall, loading, content, confirmable = false, confirmText, hideConfirmCopyButton, subtitle, ...rest }) {
|
|
12
|
+
const { t } = modalPredefinedLocale.useTranslations();
|
|
13
|
+
const inputRef = useRef(null);
|
|
14
|
+
const { value, error, handleChange, reset, validate } = useTextFieldValidation({
|
|
15
|
+
target: confirmable ? confirmText : undefined,
|
|
16
|
+
errorText: t('confirm.error'),
|
|
17
|
+
});
|
|
18
|
+
const shouldShowConfirm = Boolean(confirmable && confirmText);
|
|
19
|
+
const handleClose = () => {
|
|
20
|
+
reset();
|
|
21
|
+
onClose();
|
|
22
|
+
};
|
|
23
|
+
const handleApproveClick = () => {
|
|
24
|
+
if (!validate()) {
|
|
25
|
+
inputRef.current?.focus();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
onRecall(handleClose);
|
|
29
|
+
};
|
|
30
|
+
return (_jsxs(ModalCustom, { open: open, onClose: handleClose, mode: mode, closeOnPopstate: closeOnPopstate, width: WIDTH.S, "data-test-id": TEST_IDS.recallModal, "data-confirmable": confirmable || undefined, ...rest, children: [_jsx("div", { className: styles.safeAreaTop }), _jsx(ModalCustom.Header, { title: t('recallModal.title'), subtitle: subtitle, slotAfterTitle: titleTooltip ? _jsx(QuestionTooltip, { size: 's', tip: titleTooltip }) : undefined }), _jsx(ModalCustom.Body, { className: styles.body, content: _jsxs("div", { className: styles.content, children: [content ?? t('recallModal.content'), shouldShowConfirm && (_jsx(InputConfirm, { ref: inputRef, confirmText: confirmText ?? '', confirmLabel: t('recallModal.confirmLabel'), hideConfirmCopyButton: hideConfirmCopyButton, value: value, error: error, size: 'l', copyLineAlign: 'start', placeholder: t('confirm.namePlaceholder'), onChange: handleChange }))] }) }), _jsx("div", { className: styles.safeAreaBottom }), _jsx(ModalCustom.Footer, { children: _jsxs("div", { className: styles.footer, children: [_jsx(Button, { view: VIEW.Outline, appearance: APPEARANCE.Neutral, label: t('recallModal.cancel'), onClick: handleClose, "data-test-id": TEST_IDS.cancelButton }), _jsx(Button, { view: VIEW.Filled, appearance: APPEARANCE.Critical, label: t('recallModal.approve'), loading: loading, onClick: handleApproveClick, "data-test-id": TEST_IDS.approveButton })] }) })] }));
|
|
31
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './RecallModal.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './RecallModal.js';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
.safeAreaTop{
|
|
2
|
+
display:flex;
|
|
3
|
+
flex-direction:column;
|
|
4
|
+
align-items:flex-start;
|
|
5
|
+
align-self:stretch;
|
|
6
|
+
padding-top:var(--sn-modal-anatomy-container-safeArea-paddingTop, var(--sn-density-spacing-interval-l, var(--sn-primitive-dimension-24, 24px)));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.safeAreaBottom{
|
|
10
|
+
display:flex;
|
|
11
|
+
flex-direction:column;
|
|
12
|
+
align-items:flex-start;
|
|
13
|
+
align-self:stretch;
|
|
14
|
+
padding-bottom:var(--sn-modal-anatomy-container-safeArea-paddingBottom, var(--sn-density-spacing-interval-s, var(--sn-primitive-dimension-8, 8px)));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.body{
|
|
18
|
+
min-height:auto;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.content{
|
|
22
|
+
display:flex;
|
|
23
|
+
flex-direction:column;
|
|
24
|
+
row-gap:var(--sn-primitive-dimension-16, 16px);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.footer{
|
|
28
|
+
display:flex;
|
|
29
|
+
-moz-column-gap:var(--sn-primitive-dimension-8, 8px);
|
|
30
|
+
column-gap:var(--sn-primitive-dimension-8, 8px);
|
|
31
|
+
justify-content:flex-end;
|
|
32
|
+
width:100%;
|
|
33
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ReleaseNotesProps } from '../../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Адаптивный release-notes: на `mobile` — bottom sheet, иначе — модальное окно. Поверхность выбирается
|
|
4
|
+
* по `useAdaptiveLayout()` из `@cloud-ru/ds-adaptive` и пропом не задаётся. Форс раскладки — через
|
|
5
|
+
* `withLayoutType(ReleaseNotes, 'mobile')` либо `AdaptiveProvider` в поддереве.
|
|
6
|
+
*/
|
|
7
|
+
export declare function ReleaseNotes(props: ReleaseNotesProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { isMobileLayout, useAdaptiveLayout } from '@cloud-ru/ds-adaptive';
|
|
3
|
+
import { DesktopReleaseNotes, MobileReleaseNotes } from '../../helperComponents/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Адаптивный release-notes: на `mobile` — bottom sheet, иначе — модальное окно. Поверхность выбирается
|
|
6
|
+
* по `useAdaptiveLayout()` из `@cloud-ru/ds-adaptive` и пропом не задаётся. Форс раскладки — через
|
|
7
|
+
* `withLayoutType(ReleaseNotes, 'mobile')` либо `AdaptiveProvider` в поддереве.
|
|
8
|
+
*/
|
|
9
|
+
export function ReleaseNotes(props) {
|
|
10
|
+
const { layoutType } = useAdaptiveLayout();
|
|
11
|
+
return isMobileLayout(layoutType) ? _jsx(MobileReleaseNotes, { ...props }) : _jsx(DesktopReleaseNotes, { ...props });
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ReleaseNotes.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ReleaseNotes.js';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare const CONTENT_STATE: {
|
|
2
|
+
readonly Data: "data";
|
|
3
|
+
readonly NoData: "noData";
|
|
4
|
+
readonly Error: "error";
|
|
5
|
+
};
|
|
6
|
+
export declare const CONFIRM_TEXT_VARIANT: {
|
|
7
|
+
readonly Name: "name";
|
|
8
|
+
readonly Text: "text";
|
|
9
|
+
};
|
|
10
|
+
export declare const TEST_IDS: {
|
|
11
|
+
readonly deleteModal: "delete-modal";
|
|
12
|
+
readonly recallModal: "recall-modal";
|
|
13
|
+
readonly releaseNotes: "release-notes";
|
|
14
|
+
readonly approveButton: "modal-predefined__approve-button";
|
|
15
|
+
readonly cancelButton: "modal-predefined__cancel-button";
|
|
16
|
+
readonly confirmInput: "modal-predefined__confirm-input";
|
|
17
|
+
readonly confirmCopyButton: "modal-predefined__confirm-copy-button";
|
|
18
|
+
readonly releaseNotesItem: "modal-predefined__release-notes-item";
|
|
19
|
+
readonly releaseNotesMedia: "modal-predefined__release-notes-media";
|
|
20
|
+
readonly releaseNotesVideo: "modal-predefined__release-notes-video";
|
|
21
|
+
readonly releaseNotesError: "modal-predefined__release-notes-error";
|
|
22
|
+
readonly releaseNotesNoData: "modal-predefined__release-notes-no-data";
|
|
23
|
+
readonly releaseNotesRetryButton: "modal-predefined__release-notes-retry-button";
|
|
24
|
+
readonly releaseNotesReadLaterButton: "modal-predefined__release-notes-read-later-button";
|
|
25
|
+
readonly releaseNotesPrevButton: "modal-predefined__release-notes-prev-button";
|
|
26
|
+
readonly releaseNotesNextButton: "modal-predefined__release-notes-next-button";
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const CONTENT_STATE = {
|
|
2
|
+
Data: 'data',
|
|
3
|
+
NoData: 'noData',
|
|
4
|
+
Error: 'error',
|
|
5
|
+
};
|
|
6
|
+
export const CONFIRM_TEXT_VARIANT = {
|
|
7
|
+
Name: 'name',
|
|
8
|
+
Text: 'text',
|
|
9
|
+
};
|
|
10
|
+
export const TEST_IDS = {
|
|
11
|
+
deleteModal: 'delete-modal',
|
|
12
|
+
recallModal: 'recall-modal',
|
|
13
|
+
releaseNotes: 'release-notes',
|
|
14
|
+
approveButton: 'modal-predefined__approve-button',
|
|
15
|
+
cancelButton: 'modal-predefined__cancel-button',
|
|
16
|
+
confirmInput: 'modal-predefined__confirm-input',
|
|
17
|
+
confirmCopyButton: 'modal-predefined__confirm-copy-button',
|
|
18
|
+
releaseNotesItem: 'modal-predefined__release-notes-item',
|
|
19
|
+
releaseNotesMedia: 'modal-predefined__release-notes-media',
|
|
20
|
+
releaseNotesVideo: 'modal-predefined__release-notes-video',
|
|
21
|
+
releaseNotesError: 'modal-predefined__release-notes-error',
|
|
22
|
+
releaseNotesNoData: 'modal-predefined__release-notes-no-data',
|
|
23
|
+
releaseNotesRetryButton: 'modal-predefined__release-notes-retry-button',
|
|
24
|
+
releaseNotesReadLaterButton: 'modal-predefined__release-notes-read-later-button',
|
|
25
|
+
releaseNotesPrevButton: 'modal-predefined__release-notes-prev-button',
|
|
26
|
+
releaseNotesNextButton: 'modal-predefined__release-notes-next-button',
|
|
27
|
+
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { ReleaseNotesProps } from '../../types.js';
|
|
2
|
+
export declare function DesktopReleaseNotes({ open, onClose, closeOnPopstate, contentState, items, loading, onReadLaterClick, onDataErrorRetryClick, onSlideChange, ...rest }: ReleaseNotesProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ModalCustom, WIDTH } from '@cloud-ru/ds-modal';
|
|
3
|
+
import { extractSupportProps } from '@cloud-ru/ds-utils';
|
|
4
|
+
import { CONTENT_STATE } from '../../constants.js';
|
|
5
|
+
import { useReleaseNotesNavigation } from '../../hooks.js';
|
|
6
|
+
import { modalPredefinedLocale } from '../../locale/index.js';
|
|
7
|
+
import { ReleaseNotesContent } from '../ReleaseNotesContent/index.js';
|
|
8
|
+
import { ReleaseNotesFooter } from '../ReleaseNotesFooter/index.js';
|
|
9
|
+
import styles from './styles.module.css';
|
|
10
|
+
export function DesktopReleaseNotes({ open, onClose, closeOnPopstate, contentState = CONTENT_STATE.Data, items, loading, onReadLaterClick, onDataErrorRetryClick, onSlideChange, ...rest }) {
|
|
11
|
+
const { t } = modalPredefinedLocale.useTranslations();
|
|
12
|
+
const { pageIndex, readablePageNumber, setPage, handleClose, handleReadLaterClick, handleNextPageClick, handlePrevPageClick, } = useReleaseNotesNavigation({ onClose, onReadLaterClick, onSlideChange });
|
|
13
|
+
const shouldShowFooter = contentState === CONTENT_STATE.Data && (loading || items.length > 0);
|
|
14
|
+
return (_jsxs(ModalCustom, { open: open, onClose: handleClose, closeOnPopstate: closeOnPopstate, width: WIDTH.M, "data-content-state": contentState, "data-surface": 'modal', ...extractSupportProps(rest), children: [_jsx("div", { className: styles.safeAreaTop }), _jsx(ModalCustom.Header, { title: t('releaseNotes.title') }), _jsx(ModalCustom.Body, { className: styles.body, content: _jsx(ReleaseNotesContent, { contentState: contentState, items: items, loading: loading, pageIndex: pageIndex, surface: 'modal', noDataTitle: t('releaseNotes.noDataTitle'), noDataDescription: t('releaseNotes.noDataDescription'), errorTitle: t('releaseNotes.errorTitle'), errorDescription: t('releaseNotes.errorDescription'), retryLabel: t('releaseNotes.retry'), onPageChange: setPage, onDataErrorRetryClick: onDataErrorRetryClick }) }), _jsx("div", { className: styles.safeAreaBottom }), shouldShowFooter && (_jsx(ModalCustom.Footer, { children: _jsx(ReleaseNotesFooter, { surface: 'modal', total: items.length, pageIndex: pageIndex, readablePageNumber: readablePageNumber, counterLabel: t('releaseNotes.counter', { page: readablePageNumber, total: items.length }), readLaterLabel: t('releaseNotes.readLater'), onReadLaterClick: handleReadLaterClick, onPrevPageClick: handlePrevPageClick, onNextPageClick: () => handleNextPageClick(items.length) }) }))] }));
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DesktopReleaseNotes.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DesktopReleaseNotes.js';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
.safeAreaTop{
|
|
2
|
+
display:flex;
|
|
3
|
+
flex-direction:column;
|
|
4
|
+
align-items:flex-start;
|
|
5
|
+
align-self:stretch;
|
|
6
|
+
padding-top:var(--sn-modal-anatomy-container-safeArea-paddingTop, var(--sn-density-spacing-interval-l, var(--sn-primitive-dimension-24, 24px)));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.safeAreaBottom{
|
|
10
|
+
display:flex;
|
|
11
|
+
flex-direction:column;
|
|
12
|
+
align-items:flex-start;
|
|
13
|
+
align-self:stretch;
|
|
14
|
+
padding-bottom:var(--sn-modal-anatomy-container-safeArea-paddingBottom, var(--sn-density-spacing-interval-s, var(--sn-primitive-dimension-8, 8px)));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.body{
|
|
18
|
+
min-height:calc(6 * var(--sn-primitive-dimension-64, 64px));
|
|
19
|
+
}
|