@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.
Files changed (155) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +201 -0
  3. package/README.md +359 -0
  4. package/dist/cjs/components/DeleteModal/DeleteModal.d.ts +2 -0
  5. package/dist/cjs/components/DeleteModal/DeleteModal.js +39 -0
  6. package/dist/cjs/components/DeleteModal/index.d.ts +1 -0
  7. package/dist/cjs/components/DeleteModal/index.js +17 -0
  8. package/dist/cjs/components/DeleteModal/styles.module.css +33 -0
  9. package/dist/cjs/components/RecallModal/RecallModal.d.ts +2 -0
  10. package/dist/cjs/components/RecallModal/RecallModal.js +37 -0
  11. package/dist/cjs/components/RecallModal/index.d.ts +1 -0
  12. package/dist/cjs/components/RecallModal/index.js +17 -0
  13. package/dist/cjs/components/RecallModal/styles.module.css +33 -0
  14. package/dist/cjs/components/ReleaseNotes/ReleaseNotes.d.ts +7 -0
  15. package/dist/cjs/components/ReleaseNotes/ReleaseNotes.js +15 -0
  16. package/dist/cjs/components/ReleaseNotes/index.d.ts +1 -0
  17. package/dist/cjs/components/ReleaseNotes/index.js +17 -0
  18. package/dist/cjs/components/index.d.ts +3 -0
  19. package/dist/cjs/components/index.js +19 -0
  20. package/dist/cjs/constants.d.ts +27 -0
  21. package/dist/cjs/constants.js +30 -0
  22. package/dist/cjs/helperComponents/DesktopReleaseNotes/DesktopReleaseNotes.d.ts +2 -0
  23. package/dist/cjs/helperComponents/DesktopReleaseNotes/DesktopReleaseNotes.js +21 -0
  24. package/dist/cjs/helperComponents/DesktopReleaseNotes/index.d.ts +1 -0
  25. package/dist/cjs/helperComponents/DesktopReleaseNotes/index.js +17 -0
  26. package/dist/cjs/helperComponents/DesktopReleaseNotes/styles.module.css +19 -0
  27. package/dist/cjs/helperComponents/InputConfirm/InputConfirm.d.ts +48 -0
  28. package/dist/cjs/helperComponents/InputConfirm/InputConfirm.js +15 -0
  29. package/dist/cjs/helperComponents/InputConfirm/index.d.ts +1 -0
  30. package/dist/cjs/helperComponents/InputConfirm/index.js +17 -0
  31. package/dist/cjs/helperComponents/InputConfirm/styles.module.css +38 -0
  32. package/dist/cjs/helperComponents/MobileReleaseNotes/MobileReleaseNotes.d.ts +2 -0
  33. package/dist/cjs/helperComponents/MobileReleaseNotes/MobileReleaseNotes.js +26 -0
  34. package/dist/cjs/helperComponents/MobileReleaseNotes/index.d.ts +1 -0
  35. package/dist/cjs/helperComponents/MobileReleaseNotes/index.js +17 -0
  36. package/dist/cjs/helperComponents/NoteItem/NoteItem.d.ts +6 -0
  37. package/dist/cjs/helperComponents/NoteItem/NoteItem.js +20 -0
  38. package/dist/cjs/helperComponents/NoteItem/index.d.ts +1 -0
  39. package/dist/cjs/helperComponents/NoteItem/index.js +17 -0
  40. package/dist/cjs/helperComponents/NoteItem/styles.module.css +53 -0
  41. package/dist/cjs/helperComponents/ReleaseNotesContent/ReleaseNotesContent.d.ts +28 -0
  42. package/dist/cjs/helperComponents/ReleaseNotesContent/ReleaseNotesContent.js +30 -0
  43. package/dist/cjs/helperComponents/ReleaseNotesContent/index.d.ts +1 -0
  44. package/dist/cjs/helperComponents/ReleaseNotesContent/index.js +17 -0
  45. package/dist/cjs/helperComponents/ReleaseNotesContent/styles.module.css +40 -0
  46. package/dist/cjs/helperComponents/ReleaseNotesFooter/ReleaseNotesFooter.d.ts +25 -0
  47. package/dist/cjs/helperComponents/ReleaseNotesFooter/ReleaseNotesFooter.js +17 -0
  48. package/dist/cjs/helperComponents/ReleaseNotesFooter/index.d.ts +1 -0
  49. package/dist/cjs/helperComponents/ReleaseNotesFooter/index.js +17 -0
  50. package/dist/cjs/helperComponents/ReleaseNotesFooter/styles.module.css +27 -0
  51. package/dist/cjs/helperComponents/index.d.ts +6 -0
  52. package/dist/cjs/helperComponents/index.js +22 -0
  53. package/dist/cjs/hooks.d.ts +26 -0
  54. package/dist/cjs/hooks.js +59 -0
  55. package/dist/cjs/index.d.ts +4 -0
  56. package/dist/cjs/index.js +20 -0
  57. package/dist/cjs/locale/index.d.ts +143 -0
  58. package/dist/cjs/locale/index.js +76 -0
  59. package/dist/cjs/package.json +3 -0
  60. package/dist/cjs/style.css +243 -0
  61. package/dist/cjs/types.d.ts +67 -0
  62. package/dist/cjs/types.js +2 -0
  63. package/dist/esm/components/DeleteModal/DeleteModal.d.ts +2 -0
  64. package/dist/esm/components/DeleteModal/DeleteModal.js +33 -0
  65. package/dist/esm/components/DeleteModal/index.d.ts +1 -0
  66. package/dist/esm/components/DeleteModal/index.js +1 -0
  67. package/dist/esm/components/DeleteModal/styles.module.css +33 -0
  68. package/dist/esm/components/RecallModal/RecallModal.d.ts +2 -0
  69. package/dist/esm/components/RecallModal/RecallModal.js +31 -0
  70. package/dist/esm/components/RecallModal/index.d.ts +1 -0
  71. package/dist/esm/components/RecallModal/index.js +1 -0
  72. package/dist/esm/components/RecallModal/styles.module.css +33 -0
  73. package/dist/esm/components/ReleaseNotes/ReleaseNotes.d.ts +7 -0
  74. package/dist/esm/components/ReleaseNotes/ReleaseNotes.js +12 -0
  75. package/dist/esm/components/ReleaseNotes/index.d.ts +1 -0
  76. package/dist/esm/components/ReleaseNotes/index.js +1 -0
  77. package/dist/esm/components/index.d.ts +3 -0
  78. package/dist/esm/components/index.js +3 -0
  79. package/dist/esm/constants.d.ts +27 -0
  80. package/dist/esm/constants.js +27 -0
  81. package/dist/esm/helperComponents/DesktopReleaseNotes/DesktopReleaseNotes.d.ts +2 -0
  82. package/dist/esm/helperComponents/DesktopReleaseNotes/DesktopReleaseNotes.js +15 -0
  83. package/dist/esm/helperComponents/DesktopReleaseNotes/index.d.ts +1 -0
  84. package/dist/esm/helperComponents/DesktopReleaseNotes/index.js +1 -0
  85. package/dist/esm/helperComponents/DesktopReleaseNotes/styles.module.css +19 -0
  86. package/dist/esm/helperComponents/InputConfirm/InputConfirm.d.ts +48 -0
  87. package/dist/esm/helperComponents/InputConfirm/InputConfirm.js +9 -0
  88. package/dist/esm/helperComponents/InputConfirm/index.d.ts +1 -0
  89. package/dist/esm/helperComponents/InputConfirm/index.js +1 -0
  90. package/dist/esm/helperComponents/InputConfirm/styles.module.css +38 -0
  91. package/dist/esm/helperComponents/MobileReleaseNotes/MobileReleaseNotes.d.ts +2 -0
  92. package/dist/esm/helperComponents/MobileReleaseNotes/MobileReleaseNotes.js +23 -0
  93. package/dist/esm/helperComponents/MobileReleaseNotes/index.d.ts +1 -0
  94. package/dist/esm/helperComponents/MobileReleaseNotes/index.js +1 -0
  95. package/dist/esm/helperComponents/NoteItem/NoteItem.d.ts +6 -0
  96. package/dist/esm/helperComponents/NoteItem/NoteItem.js +14 -0
  97. package/dist/esm/helperComponents/NoteItem/index.d.ts +1 -0
  98. package/dist/esm/helperComponents/NoteItem/index.js +1 -0
  99. package/dist/esm/helperComponents/NoteItem/styles.module.css +53 -0
  100. package/dist/esm/helperComponents/ReleaseNotesContent/ReleaseNotesContent.d.ts +28 -0
  101. package/dist/esm/helperComponents/ReleaseNotesContent/ReleaseNotesContent.js +24 -0
  102. package/dist/esm/helperComponents/ReleaseNotesContent/index.d.ts +1 -0
  103. package/dist/esm/helperComponents/ReleaseNotesContent/index.js +1 -0
  104. package/dist/esm/helperComponents/ReleaseNotesContent/styles.module.css +40 -0
  105. package/dist/esm/helperComponents/ReleaseNotesFooter/ReleaseNotesFooter.d.ts +25 -0
  106. package/dist/esm/helperComponents/ReleaseNotesFooter/ReleaseNotesFooter.js +11 -0
  107. package/dist/esm/helperComponents/ReleaseNotesFooter/index.d.ts +1 -0
  108. package/dist/esm/helperComponents/ReleaseNotesFooter/index.js +1 -0
  109. package/dist/esm/helperComponents/ReleaseNotesFooter/styles.module.css +27 -0
  110. package/dist/esm/helperComponents/index.d.ts +6 -0
  111. package/dist/esm/helperComponents/index.js +6 -0
  112. package/dist/esm/hooks.d.ts +26 -0
  113. package/dist/esm/hooks.js +55 -0
  114. package/dist/esm/index.d.ts +4 -0
  115. package/dist/esm/index.js +4 -0
  116. package/dist/esm/locale/index.d.ts +143 -0
  117. package/dist/esm/locale/index.js +73 -0
  118. package/dist/esm/style.css +243 -0
  119. package/dist/esm/types.d.ts +67 -0
  120. package/dist/esm/types.js +1 -0
  121. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  122. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  123. package/package.json +63 -0
  124. package/src/components/DeleteModal/DeleteModal.tsx +116 -0
  125. package/src/components/DeleteModal/index.ts +1 -0
  126. package/src/components/DeleteModal/styles.module.scss +37 -0
  127. package/src/components/RecallModal/RecallModal.tsx +111 -0
  128. package/src/components/RecallModal/index.ts +1 -0
  129. package/src/components/RecallModal/styles.module.scss +37 -0
  130. package/src/components/ReleaseNotes/ReleaseNotes.tsx +15 -0
  131. package/src/components/ReleaseNotes/index.ts +1 -0
  132. package/src/components/index.ts +3 -0
  133. package/src/constants.ts +29 -0
  134. package/src/helperComponents/DesktopReleaseNotes/DesktopReleaseNotes.tsx +85 -0
  135. package/src/helperComponents/DesktopReleaseNotes/index.ts +1 -0
  136. package/src/helperComponents/DesktopReleaseNotes/styles.module.scss +24 -0
  137. package/src/helperComponents/InputConfirm/InputConfirm.tsx +72 -0
  138. package/src/helperComponents/InputConfirm/index.ts +1 -0
  139. package/src/helperComponents/InputConfirm/styles.module.scss +30 -0
  140. package/src/helperComponents/MobileReleaseNotes/MobileReleaseNotes.tsx +88 -0
  141. package/src/helperComponents/MobileReleaseNotes/index.ts +1 -0
  142. package/src/helperComponents/NoteItem/NoteItem.tsx +58 -0
  143. package/src/helperComponents/NoteItem/index.ts +1 -0
  144. package/src/helperComponents/NoteItem/styles.module.scss +54 -0
  145. package/src/helperComponents/ReleaseNotesContent/ReleaseNotesContent.tsx +119 -0
  146. package/src/helperComponents/ReleaseNotesContent/index.ts +1 -0
  147. package/src/helperComponents/ReleaseNotesContent/styles.module.scss +45 -0
  148. package/src/helperComponents/ReleaseNotesFooter/ReleaseNotesFooter.tsx +84 -0
  149. package/src/helperComponents/ReleaseNotesFooter/index.ts +1 -0
  150. package/src/helperComponents/ReleaseNotesFooter/styles.module.scss +25 -0
  151. package/src/helperComponents/index.ts +6 -0
  152. package/src/hooks.ts +89 -0
  153. package/src/index.ts +4 -0
  154. package/src/locale/index.ts +77 -0
  155. 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
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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,3 @@
1
+ export * from './DeleteModal/index.js';
2
+ export * from './RecallModal/index.js';
3
+ export * from './ReleaseNotes/index.js';
@@ -0,0 +1,3 @@
1
+ export * from './DeleteModal/index.js';
2
+ export * from './RecallModal/index.js';
3
+ export * from './ReleaseNotes/index.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
+ }