@skygraph/styles 0.2.4 → 0.6.6
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/README.md +98 -98
- package/components/autocomplete.css +35 -35
- package/components/autofield.css +67 -67
- package/components/avatar.css +37 -37
- package/components/badge.css +102 -102
- package/components/breadcrumb.css +29 -29
- package/components/button.css +181 -181
- package/components/calendar.css +408 -408
- package/components/carousel.css +102 -102
- package/components/cascader.css +380 -380
- package/components/charts.css +408 -408
- package/components/checkbox.css +114 -114
- package/components/collapse.css +166 -166
- package/components/colorpicker.css +252 -252
- package/components/context-menu.css +95 -95
- package/components/descriptions.css +82 -82
- package/components/diagram.css +435 -435
- package/components/drawer.css +124 -124
- package/components/dropdown.css +110 -110
- package/components/empty.css +25 -25
- package/components/event-timeline.css +134 -134
- package/components/field.css +35 -35
- package/components/form.css +115 -115
- package/components/gantt.css +166 -166
- package/components/input-number.css +76 -76
- package/components/input-password.css +104 -104
- package/components/input.css +211 -211
- package/components/list.css +366 -366
- package/components/mentions.css +54 -54
- package/components/menu.css +326 -326
- package/components/modal.css +1 -0
- package/components/notification.css +128 -128
- package/components/pagination.css +162 -162
- package/components/popconfirm.css +95 -95
- package/components/progress.css +116 -116
- package/components/radio.css +95 -95
- package/components/rate.css +48 -48
- package/components/resource-calendar.css +224 -224
- package/components/result.css +45 -45
- package/components/schema-form-editor.css +433 -433
- package/components/search-input.css +112 -112
- package/components/segmented.css +76 -76
- package/components/select.css +181 -181
- package/components/skeleton.css +72 -72
- package/components/slider.css +51 -51
- package/components/spin.css +102 -102
- package/components/steps.css +194 -194
- package/components/switch.css +75 -75
- package/components/table.css +9 -1
- package/components/tabs.css +137 -137
- package/components/tag.css +61 -61
- package/components/textarea.css +22 -22
- package/components/timeline.css +169 -169
- package/components/timepicker.css +224 -224
- package/components/tooltip.css +91 -91
- package/components/transfer.css +140 -140
- package/components/tree.css +601 -601
- package/components/treeselect.css +221 -221
- package/components/upload.css +124 -124
- package/index.css +70 -70
- package/index.d.ts +9 -9
- package/package.json +1 -1
- package/print.css +88 -88
- package/reset.css +17 -17
- package/themes/dark.css +17 -17
- package/themes/default.css +14 -14
- package/tokens.css +310 -310
- package/transitions.css +158 -158
package/components/list.css
CHANGED
|
@@ -1,366 +1,366 @@
|
|
|
1
|
-
/* ---- List ---- */
|
|
2
|
-
.sg-list {
|
|
3
|
-
font-size: var(--sg-font-size);
|
|
4
|
-
color: var(--sg-color-text);
|
|
5
|
-
line-height: var(--sg-line-height);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
.sg-list-bordered {
|
|
9
|
-
border: 1px solid var(--sg-color-border);
|
|
10
|
-
border-radius: var(--sg-border-radius);
|
|
11
|
-
/* Clip header / footer / first-last item backgrounds (which have square
|
|
12
|
-
* corners) to the rounded border. Without this the tinted header and the
|
|
13
|
-
* hover/selected row backgrounds bleed past the radius, so the corners
|
|
14
|
-
* appear to be a different colour than the rest of the outline. */
|
|
15
|
-
overflow: hidden;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.sg-list-loading {
|
|
19
|
-
position: relative;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/* ---- Header / Footer ---- */
|
|
23
|
-
.sg-list-header,
|
|
24
|
-
.sg-list-footer {
|
|
25
|
-
padding: var(--sg-padding-md) var(--sg-padding-lg);
|
|
26
|
-
background: var(--sg-color-bg-secondary);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.sg-list-bordered .sg-list-header {
|
|
30
|
-
border-bottom: 1px solid var(--sg-color-border);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.sg-list-bordered .sg-list-footer {
|
|
34
|
-
border-top: 1px solid var(--sg-color-border);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/* ---- Items container ---- */
|
|
38
|
-
.sg-list-items {
|
|
39
|
-
min-height: 0;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.sg-list-grid .sg-list-items {
|
|
43
|
-
--sg-list-grid-base-columns: 1fr;
|
|
44
|
-
display: grid;
|
|
45
|
-
/*
|
|
46
|
-
* Колонки определяются двумя переменными:
|
|
47
|
-
* --sg-list-grid-columns — наследуется от корня `.sg-list` при срабатывании media;
|
|
48
|
-
* --sg-list-grid-base-columns — ставится инлайн на этом элементе (grid.column);
|
|
49
|
-
* media побеждает за счёт наследования, инлайн не блокирует его.
|
|
50
|
-
*/
|
|
51
|
-
grid-template-columns: var(--sg-list-grid-columns, var(--sg-list-grid-base-columns));
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/* ---- Empty ---- */
|
|
55
|
-
.sg-list-empty {
|
|
56
|
-
padding: var(--sg-padding-xl);
|
|
57
|
-
text-align: center;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/* ---- Single item ---- */
|
|
61
|
-
.sg-list-item {
|
|
62
|
-
display: flex;
|
|
63
|
-
/* Center main / actions / extra blocks on a single baseline so rows with a
|
|
64
|
-
* multi-line Meta block (avatar + title + description) stay visually even.
|
|
65
|
-
* The Meta block keeps its own `align-items: flex-start` internally so the
|
|
66
|
-
* avatar still tops out with the title. */
|
|
67
|
-
align-items: center;
|
|
68
|
-
padding: var(--sg-padding-md) var(--sg-padding-lg);
|
|
69
|
-
transition: background var(--sg-transition-duration);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
.sg-list-split .sg-list-item + .sg-list-item {
|
|
73
|
-
border-top: 1px solid var(--sg-color-border-secondary);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
.sg-list-bordered .sg-list-item:first-child {
|
|
77
|
-
border-top: none;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
.sg-list-item:hover {
|
|
81
|
-
background: var(--sg-color-bg-hover);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/*
|
|
85
|
-
* Когда пользователь использует `<List.Item>` (или `<sg-list-item>`),
|
|
86
|
-
* у него уже есть класс `.sg-list-item`. Снаружи обёртка из `renderItemWrapper`
|
|
87
|
-
* тоже получает `.sg-list-item` (нужен для голых `<div>`-renderItem'ов в Basic/
|
|
88
|
-
* Sizes/Slots demo). Чтобы при двойной обёртке не удваивались padding/border/
|
|
89
|
-
* hover, сбрасываем стили внутреннего `.sg-list-item` и растягиваем его на
|
|
90
|
-
* ширину flex-родителя.
|
|
91
|
-
*/
|
|
92
|
-
.sg-list-item .sg-list-item {
|
|
93
|
-
padding: 0;
|
|
94
|
-
border: none;
|
|
95
|
-
background: transparent;
|
|
96
|
-
flex: 1;
|
|
97
|
-
min-width: 0;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.sg-list-item .sg-list-item:hover {
|
|
101
|
-
background: transparent;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/* ---- Item modifiers ---- */
|
|
105
|
-
.sg-list-item-hoverable {
|
|
106
|
-
cursor: pointer;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
.sg-list-item-selectable {
|
|
110
|
-
cursor: pointer;
|
|
111
|
-
user-select: none;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
.sg-list-item-selected,
|
|
115
|
-
.sg-list-item-selected:hover {
|
|
116
|
-
background: var(--sg-color-primary-bg, rgba(22, 119, 255, 0.08));
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
.sg-list-item-dragging {
|
|
120
|
-
opacity: 0.5;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.sg-list-item-drop-target {
|
|
124
|
-
box-shadow: inset 0 2px 0 0 var(--sg-color-primary);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/* ---- Virtual scroll ----
|
|
128
|
-
*
|
|
129
|
-
* Внутренний контент virtual-режима полностью `position: absolute` (каждая
|
|
130
|
-
* строка — на своём `top = index * itemHeight`). В flex-контексте (например,
|
|
131
|
-
* `.demo-box-preview { display: flex }`) и `.sg-list`, и
|
|
132
|
-
* `.sg-list-virtual-container` без контента в потоке схлопываются до 0 ширины.
|
|
133
|
-
* Явный `width: 100%` на корне (через модификатор `.sg-list-virtual`) и на
|
|
134
|
-
* самом scroll-контейнере гарантирует, что они растянутся на всю доступную
|
|
135
|
-
* ширину родителя.
|
|
136
|
-
*/
|
|
137
|
-
.sg-list-virtual {
|
|
138
|
-
width: 100%;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
.sg-list-virtual-container {
|
|
142
|
-
width: 100%;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/* ---- Drag handle ---- */
|
|
146
|
-
.sg-list-drag-handle {
|
|
147
|
-
display: inline-flex;
|
|
148
|
-
align-items: center;
|
|
149
|
-
margin-right: var(--sg-padding-sm);
|
|
150
|
-
color: var(--sg-color-text-secondary);
|
|
151
|
-
cursor: grab;
|
|
152
|
-
user-select: none;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
.sg-list-drag-handle:active {
|
|
156
|
-
cursor: grabbing;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
.sg-list-item-main {
|
|
160
|
-
flex: 1;
|
|
161
|
-
min-width: 0;
|
|
162
|
-
display: flex;
|
|
163
|
-
align-items: center;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
.sg-list-item-content {
|
|
167
|
-
flex: 1;
|
|
168
|
-
min-width: 0;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/* ---- Actions ---- */
|
|
172
|
-
.sg-list-item-actions {
|
|
173
|
-
display: flex;
|
|
174
|
-
align-items: center;
|
|
175
|
-
gap: var(--sg-padding-sm);
|
|
176
|
-
list-style: none;
|
|
177
|
-
margin: 0;
|
|
178
|
-
padding: 0;
|
|
179
|
-
margin-left: var(--sg-padding-lg);
|
|
180
|
-
flex-shrink: 0;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
.sg-list-item-action {
|
|
184
|
-
color: var(--sg-color-text-secondary);
|
|
185
|
-
cursor: pointer;
|
|
186
|
-
transition: color var(--sg-transition-duration);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
.sg-list-item-action:hover {
|
|
190
|
-
color: var(--sg-color-primary);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
.sg-list-item-actions li + li::before {
|
|
194
|
-
content: '';
|
|
195
|
-
display: inline-block;
|
|
196
|
-
width: 1px;
|
|
197
|
-
height: 14px;
|
|
198
|
-
background: var(--sg-color-border);
|
|
199
|
-
margin-right: var(--sg-padding-sm);
|
|
200
|
-
vertical-align: middle;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/* ---- Extra ---- */
|
|
204
|
-
.sg-list-item-extra {
|
|
205
|
-
margin-left: var(--sg-padding-xl);
|
|
206
|
-
flex-shrink: 0;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/* ---- Meta ---- */
|
|
210
|
-
.sg-list-item-meta {
|
|
211
|
-
display: flex;
|
|
212
|
-
align-items: flex-start;
|
|
213
|
-
gap: var(--sg-padding-md);
|
|
214
|
-
flex: 1;
|
|
215
|
-
min-width: 0;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
.sg-list-item-meta-avatar {
|
|
219
|
-
flex-shrink: 0;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
.sg-list-item-meta-content {
|
|
223
|
-
flex: 1;
|
|
224
|
-
min-width: 0;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
.sg-list-item-meta-title {
|
|
228
|
-
margin: 0 0 var(--sg-margin-xs) 0;
|
|
229
|
-
font-size: var(--sg-font-size);
|
|
230
|
-
font-weight: 600;
|
|
231
|
-
color: var(--sg-color-text);
|
|
232
|
-
line-height: var(--sg-line-height);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
.sg-list-item-meta-description {
|
|
236
|
-
font-size: var(--sg-font-size-sm);
|
|
237
|
-
color: var(--sg-color-text-secondary);
|
|
238
|
-
line-height: var(--sg-line-height);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/* ---- Sizes ---- */
|
|
242
|
-
.sg-list-small .sg-list-item {
|
|
243
|
-
padding: var(--sg-padding-sm) var(--sg-padding-md);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
.sg-list-small .sg-list-header,
|
|
247
|
-
.sg-list-small .sg-list-footer {
|
|
248
|
-
padding: var(--sg-padding-sm) var(--sg-padding-md);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
.sg-list-small .sg-list-item-meta-title {
|
|
252
|
-
font-size: var(--sg-font-size-sm);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
.sg-list-large .sg-list-item {
|
|
256
|
-
padding: var(--sg-padding-lg) var(--sg-padding-xl);
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
.sg-list-large .sg-list-header,
|
|
260
|
-
.sg-list-large .sg-list-footer {
|
|
261
|
-
padding: var(--sg-padding-lg) var(--sg-padding-xl);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
.sg-list-large .sg-list-item-meta-title {
|
|
265
|
-
font-size: var(--sg-font-size-lg);
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
/* ---- Grid mode ---- */
|
|
269
|
-
.sg-list-grid .sg-list-item {
|
|
270
|
-
border: none;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
.sg-list-grid.sg-list-bordered .sg-list-items {
|
|
274
|
-
padding: var(--sg-padding-md);
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
.sg-list-grid .sg-list-item {
|
|
278
|
-
border-radius: var(--sg-border-radius);
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
/*
|
|
282
|
-
* Responsive grid breakpoints.
|
|
283
|
-
*
|
|
284
|
-
* Переопределяем `--sg-list-grid-columns` на КОРНЕ `.sg-list` (не на .sg-list-items),
|
|
285
|
-
* чтобы инлайновый `style` на `.sg-list-items` (который задаёт base columns) не перебивал
|
|
286
|
-
* media-override. Так мы обходимся без `!important`.
|
|
287
|
-
*/
|
|
288
|
-
@media (max-width: 575px) {
|
|
289
|
-
.sg-list-grid-xs-1 {
|
|
290
|
-
--sg-list-grid-columns: repeat(1, 1fr);
|
|
291
|
-
}
|
|
292
|
-
.sg-list-grid-xs-2 {
|
|
293
|
-
--sg-list-grid-columns: repeat(2, 1fr);
|
|
294
|
-
}
|
|
295
|
-
.sg-list-grid-xs-3 {
|
|
296
|
-
--sg-list-grid-columns: repeat(3, 1fr);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
@media (min-width: 576px) and (max-width: 767px) {
|
|
301
|
-
.sg-list-grid-sm-1 {
|
|
302
|
-
--sg-list-grid-columns: repeat(1, 1fr);
|
|
303
|
-
}
|
|
304
|
-
.sg-list-grid-sm-2 {
|
|
305
|
-
--sg-list-grid-columns: repeat(2, 1fr);
|
|
306
|
-
}
|
|
307
|
-
.sg-list-grid-sm-3 {
|
|
308
|
-
--sg-list-grid-columns: repeat(3, 1fr);
|
|
309
|
-
}
|
|
310
|
-
.sg-list-grid-sm-4 {
|
|
311
|
-
--sg-list-grid-columns: repeat(4, 1fr);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
@media (min-width: 768px) and (max-width: 991px) {
|
|
316
|
-
.sg-list-grid-md-1 {
|
|
317
|
-
--sg-list-grid-columns: repeat(1, 1fr);
|
|
318
|
-
}
|
|
319
|
-
.sg-list-grid-md-2 {
|
|
320
|
-
--sg-list-grid-columns: repeat(2, 1fr);
|
|
321
|
-
}
|
|
322
|
-
.sg-list-grid-md-3 {
|
|
323
|
-
--sg-list-grid-columns: repeat(3, 1fr);
|
|
324
|
-
}
|
|
325
|
-
.sg-list-grid-md-4 {
|
|
326
|
-
--sg-list-grid-columns: repeat(4, 1fr);
|
|
327
|
-
}
|
|
328
|
-
.sg-list-grid-md-6 {
|
|
329
|
-
--sg-list-grid-columns: repeat(6, 1fr);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
@media (min-width: 992px) {
|
|
334
|
-
.sg-list-grid-lg-1 {
|
|
335
|
-
--sg-list-grid-columns: repeat(1, 1fr);
|
|
336
|
-
}
|
|
337
|
-
.sg-list-grid-lg-2 {
|
|
338
|
-
--sg-list-grid-columns: repeat(2, 1fr);
|
|
339
|
-
}
|
|
340
|
-
.sg-list-grid-lg-3 {
|
|
341
|
-
--sg-list-grid-columns: repeat(3, 1fr);
|
|
342
|
-
}
|
|
343
|
-
.sg-list-grid-lg-4 {
|
|
344
|
-
--sg-list-grid-columns: repeat(4, 1fr);
|
|
345
|
-
}
|
|
346
|
-
.sg-list-grid-lg-6 {
|
|
347
|
-
--sg-list-grid-columns: repeat(6, 1fr);
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
/* ---- Load more ---- */
|
|
352
|
-
.sg-list-load-more {
|
|
353
|
-
text-align: center;
|
|
354
|
-
padding: var(--sg-padding-md) 0;
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
/* ---- Pagination ---- */
|
|
358
|
-
.sg-list-pagination {
|
|
359
|
-
display: flex;
|
|
360
|
-
justify-content: flex-end;
|
|
361
|
-
padding: var(--sg-padding-md) var(--sg-padding-lg);
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
.sg-list-bordered .sg-list-pagination {
|
|
365
|
-
border-top: 1px solid var(--sg-color-border-secondary);
|
|
366
|
-
}
|
|
1
|
+
/* ---- List ---- */
|
|
2
|
+
.sg-list {
|
|
3
|
+
font-size: var(--sg-font-size);
|
|
4
|
+
color: var(--sg-color-text);
|
|
5
|
+
line-height: var(--sg-line-height);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.sg-list-bordered {
|
|
9
|
+
border: 1px solid var(--sg-color-border);
|
|
10
|
+
border-radius: var(--sg-border-radius);
|
|
11
|
+
/* Clip header / footer / first-last item backgrounds (which have square
|
|
12
|
+
* corners) to the rounded border. Without this the tinted header and the
|
|
13
|
+
* hover/selected row backgrounds bleed past the radius, so the corners
|
|
14
|
+
* appear to be a different colour than the rest of the outline. */
|
|
15
|
+
overflow: hidden;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.sg-list-loading {
|
|
19
|
+
position: relative;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* ---- Header / Footer ---- */
|
|
23
|
+
.sg-list-header,
|
|
24
|
+
.sg-list-footer {
|
|
25
|
+
padding: var(--sg-padding-md) var(--sg-padding-lg);
|
|
26
|
+
background: var(--sg-color-bg-secondary);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.sg-list-bordered .sg-list-header {
|
|
30
|
+
border-bottom: 1px solid var(--sg-color-border);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.sg-list-bordered .sg-list-footer {
|
|
34
|
+
border-top: 1px solid var(--sg-color-border);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* ---- Items container ---- */
|
|
38
|
+
.sg-list-items {
|
|
39
|
+
min-height: 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.sg-list-grid .sg-list-items {
|
|
43
|
+
--sg-list-grid-base-columns: 1fr;
|
|
44
|
+
display: grid;
|
|
45
|
+
/*
|
|
46
|
+
* Колонки определяются двумя переменными:
|
|
47
|
+
* --sg-list-grid-columns — наследуется от корня `.sg-list` при срабатывании media;
|
|
48
|
+
* --sg-list-grid-base-columns — ставится инлайн на этом элементе (grid.column);
|
|
49
|
+
* media побеждает за счёт наследования, инлайн не блокирует его.
|
|
50
|
+
*/
|
|
51
|
+
grid-template-columns: var(--sg-list-grid-columns, var(--sg-list-grid-base-columns));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* ---- Empty ---- */
|
|
55
|
+
.sg-list-empty {
|
|
56
|
+
padding: var(--sg-padding-xl);
|
|
57
|
+
text-align: center;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* ---- Single item ---- */
|
|
61
|
+
.sg-list-item {
|
|
62
|
+
display: flex;
|
|
63
|
+
/* Center main / actions / extra blocks on a single baseline so rows with a
|
|
64
|
+
* multi-line Meta block (avatar + title + description) stay visually even.
|
|
65
|
+
* The Meta block keeps its own `align-items: flex-start` internally so the
|
|
66
|
+
* avatar still tops out with the title. */
|
|
67
|
+
align-items: center;
|
|
68
|
+
padding: var(--sg-padding-md) var(--sg-padding-lg);
|
|
69
|
+
transition: background var(--sg-transition-duration);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.sg-list-split .sg-list-item + .sg-list-item {
|
|
73
|
+
border-top: 1px solid var(--sg-color-border-secondary);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.sg-list-bordered .sg-list-item:first-child {
|
|
77
|
+
border-top: none;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.sg-list-item:hover {
|
|
81
|
+
background: var(--sg-color-bg-hover);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/*
|
|
85
|
+
* Когда пользователь использует `<List.Item>` (или `<sg-list-item>`),
|
|
86
|
+
* у него уже есть класс `.sg-list-item`. Снаружи обёртка из `renderItemWrapper`
|
|
87
|
+
* тоже получает `.sg-list-item` (нужен для голых `<div>`-renderItem'ов в Basic/
|
|
88
|
+
* Sizes/Slots demo). Чтобы при двойной обёртке не удваивались padding/border/
|
|
89
|
+
* hover, сбрасываем стили внутреннего `.sg-list-item` и растягиваем его на
|
|
90
|
+
* ширину flex-родителя.
|
|
91
|
+
*/
|
|
92
|
+
.sg-list-item .sg-list-item {
|
|
93
|
+
padding: 0;
|
|
94
|
+
border: none;
|
|
95
|
+
background: transparent;
|
|
96
|
+
flex: 1;
|
|
97
|
+
min-width: 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.sg-list-item .sg-list-item:hover {
|
|
101
|
+
background: transparent;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* ---- Item modifiers ---- */
|
|
105
|
+
.sg-list-item-hoverable {
|
|
106
|
+
cursor: pointer;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.sg-list-item-selectable {
|
|
110
|
+
cursor: pointer;
|
|
111
|
+
user-select: none;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.sg-list-item-selected,
|
|
115
|
+
.sg-list-item-selected:hover {
|
|
116
|
+
background: var(--sg-color-primary-bg, rgba(22, 119, 255, 0.08));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.sg-list-item-dragging {
|
|
120
|
+
opacity: 0.5;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.sg-list-item-drop-target {
|
|
124
|
+
box-shadow: inset 0 2px 0 0 var(--sg-color-primary);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* ---- Virtual scroll ----
|
|
128
|
+
*
|
|
129
|
+
* Внутренний контент virtual-режима полностью `position: absolute` (каждая
|
|
130
|
+
* строка — на своём `top = index * itemHeight`). В flex-контексте (например,
|
|
131
|
+
* `.demo-box-preview { display: flex }`) и `.sg-list`, и
|
|
132
|
+
* `.sg-list-virtual-container` без контента в потоке схлопываются до 0 ширины.
|
|
133
|
+
* Явный `width: 100%` на корне (через модификатор `.sg-list-virtual`) и на
|
|
134
|
+
* самом scroll-контейнере гарантирует, что они растянутся на всю доступную
|
|
135
|
+
* ширину родителя.
|
|
136
|
+
*/
|
|
137
|
+
.sg-list-virtual {
|
|
138
|
+
width: 100%;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.sg-list-virtual-container {
|
|
142
|
+
width: 100%;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* ---- Drag handle ---- */
|
|
146
|
+
.sg-list-drag-handle {
|
|
147
|
+
display: inline-flex;
|
|
148
|
+
align-items: center;
|
|
149
|
+
margin-right: var(--sg-padding-sm);
|
|
150
|
+
color: var(--sg-color-text-secondary);
|
|
151
|
+
cursor: grab;
|
|
152
|
+
user-select: none;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.sg-list-drag-handle:active {
|
|
156
|
+
cursor: grabbing;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.sg-list-item-main {
|
|
160
|
+
flex: 1;
|
|
161
|
+
min-width: 0;
|
|
162
|
+
display: flex;
|
|
163
|
+
align-items: center;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.sg-list-item-content {
|
|
167
|
+
flex: 1;
|
|
168
|
+
min-width: 0;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/* ---- Actions ---- */
|
|
172
|
+
.sg-list-item-actions {
|
|
173
|
+
display: flex;
|
|
174
|
+
align-items: center;
|
|
175
|
+
gap: var(--sg-padding-sm);
|
|
176
|
+
list-style: none;
|
|
177
|
+
margin: 0;
|
|
178
|
+
padding: 0;
|
|
179
|
+
margin-left: var(--sg-padding-lg);
|
|
180
|
+
flex-shrink: 0;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.sg-list-item-action {
|
|
184
|
+
color: var(--sg-color-text-secondary);
|
|
185
|
+
cursor: pointer;
|
|
186
|
+
transition: color var(--sg-transition-duration);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.sg-list-item-action:hover {
|
|
190
|
+
color: var(--sg-color-primary);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.sg-list-item-actions li + li::before {
|
|
194
|
+
content: '';
|
|
195
|
+
display: inline-block;
|
|
196
|
+
width: 1px;
|
|
197
|
+
height: 14px;
|
|
198
|
+
background: var(--sg-color-border);
|
|
199
|
+
margin-right: var(--sg-padding-sm);
|
|
200
|
+
vertical-align: middle;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/* ---- Extra ---- */
|
|
204
|
+
.sg-list-item-extra {
|
|
205
|
+
margin-left: var(--sg-padding-xl);
|
|
206
|
+
flex-shrink: 0;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/* ---- Meta ---- */
|
|
210
|
+
.sg-list-item-meta {
|
|
211
|
+
display: flex;
|
|
212
|
+
align-items: flex-start;
|
|
213
|
+
gap: var(--sg-padding-md);
|
|
214
|
+
flex: 1;
|
|
215
|
+
min-width: 0;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.sg-list-item-meta-avatar {
|
|
219
|
+
flex-shrink: 0;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.sg-list-item-meta-content {
|
|
223
|
+
flex: 1;
|
|
224
|
+
min-width: 0;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.sg-list-item-meta-title {
|
|
228
|
+
margin: 0 0 var(--sg-margin-xs) 0;
|
|
229
|
+
font-size: var(--sg-font-size);
|
|
230
|
+
font-weight: 600;
|
|
231
|
+
color: var(--sg-color-text);
|
|
232
|
+
line-height: var(--sg-line-height);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
.sg-list-item-meta-description {
|
|
236
|
+
font-size: var(--sg-font-size-sm);
|
|
237
|
+
color: var(--sg-color-text-secondary);
|
|
238
|
+
line-height: var(--sg-line-height);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/* ---- Sizes ---- */
|
|
242
|
+
.sg-list-small .sg-list-item {
|
|
243
|
+
padding: var(--sg-padding-sm) var(--sg-padding-md);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.sg-list-small .sg-list-header,
|
|
247
|
+
.sg-list-small .sg-list-footer {
|
|
248
|
+
padding: var(--sg-padding-sm) var(--sg-padding-md);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.sg-list-small .sg-list-item-meta-title {
|
|
252
|
+
font-size: var(--sg-font-size-sm);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.sg-list-large .sg-list-item {
|
|
256
|
+
padding: var(--sg-padding-lg) var(--sg-padding-xl);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.sg-list-large .sg-list-header,
|
|
260
|
+
.sg-list-large .sg-list-footer {
|
|
261
|
+
padding: var(--sg-padding-lg) var(--sg-padding-xl);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.sg-list-large .sg-list-item-meta-title {
|
|
265
|
+
font-size: var(--sg-font-size-lg);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/* ---- Grid mode ---- */
|
|
269
|
+
.sg-list-grid .sg-list-item {
|
|
270
|
+
border: none;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.sg-list-grid.sg-list-bordered .sg-list-items {
|
|
274
|
+
padding: var(--sg-padding-md);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.sg-list-grid .sg-list-item {
|
|
278
|
+
border-radius: var(--sg-border-radius);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/*
|
|
282
|
+
* Responsive grid breakpoints.
|
|
283
|
+
*
|
|
284
|
+
* Переопределяем `--sg-list-grid-columns` на КОРНЕ `.sg-list` (не на .sg-list-items),
|
|
285
|
+
* чтобы инлайновый `style` на `.sg-list-items` (который задаёт base columns) не перебивал
|
|
286
|
+
* media-override. Так мы обходимся без `!important`.
|
|
287
|
+
*/
|
|
288
|
+
@media (max-width: 575px) {
|
|
289
|
+
.sg-list-grid-xs-1 {
|
|
290
|
+
--sg-list-grid-columns: repeat(1, 1fr);
|
|
291
|
+
}
|
|
292
|
+
.sg-list-grid-xs-2 {
|
|
293
|
+
--sg-list-grid-columns: repeat(2, 1fr);
|
|
294
|
+
}
|
|
295
|
+
.sg-list-grid-xs-3 {
|
|
296
|
+
--sg-list-grid-columns: repeat(3, 1fr);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
@media (min-width: 576px) and (max-width: 767px) {
|
|
301
|
+
.sg-list-grid-sm-1 {
|
|
302
|
+
--sg-list-grid-columns: repeat(1, 1fr);
|
|
303
|
+
}
|
|
304
|
+
.sg-list-grid-sm-2 {
|
|
305
|
+
--sg-list-grid-columns: repeat(2, 1fr);
|
|
306
|
+
}
|
|
307
|
+
.sg-list-grid-sm-3 {
|
|
308
|
+
--sg-list-grid-columns: repeat(3, 1fr);
|
|
309
|
+
}
|
|
310
|
+
.sg-list-grid-sm-4 {
|
|
311
|
+
--sg-list-grid-columns: repeat(4, 1fr);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
@media (min-width: 768px) and (max-width: 991px) {
|
|
316
|
+
.sg-list-grid-md-1 {
|
|
317
|
+
--sg-list-grid-columns: repeat(1, 1fr);
|
|
318
|
+
}
|
|
319
|
+
.sg-list-grid-md-2 {
|
|
320
|
+
--sg-list-grid-columns: repeat(2, 1fr);
|
|
321
|
+
}
|
|
322
|
+
.sg-list-grid-md-3 {
|
|
323
|
+
--sg-list-grid-columns: repeat(3, 1fr);
|
|
324
|
+
}
|
|
325
|
+
.sg-list-grid-md-4 {
|
|
326
|
+
--sg-list-grid-columns: repeat(4, 1fr);
|
|
327
|
+
}
|
|
328
|
+
.sg-list-grid-md-6 {
|
|
329
|
+
--sg-list-grid-columns: repeat(6, 1fr);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
@media (min-width: 992px) {
|
|
334
|
+
.sg-list-grid-lg-1 {
|
|
335
|
+
--sg-list-grid-columns: repeat(1, 1fr);
|
|
336
|
+
}
|
|
337
|
+
.sg-list-grid-lg-2 {
|
|
338
|
+
--sg-list-grid-columns: repeat(2, 1fr);
|
|
339
|
+
}
|
|
340
|
+
.sg-list-grid-lg-3 {
|
|
341
|
+
--sg-list-grid-columns: repeat(3, 1fr);
|
|
342
|
+
}
|
|
343
|
+
.sg-list-grid-lg-4 {
|
|
344
|
+
--sg-list-grid-columns: repeat(4, 1fr);
|
|
345
|
+
}
|
|
346
|
+
.sg-list-grid-lg-6 {
|
|
347
|
+
--sg-list-grid-columns: repeat(6, 1fr);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/* ---- Load more ---- */
|
|
352
|
+
.sg-list-load-more {
|
|
353
|
+
text-align: center;
|
|
354
|
+
padding: var(--sg-padding-md) 0;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/* ---- Pagination ---- */
|
|
358
|
+
.sg-list-pagination {
|
|
359
|
+
display: flex;
|
|
360
|
+
justify-content: flex-end;
|
|
361
|
+
padding: var(--sg-padding-md) var(--sg-padding-lg);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
.sg-list-bordered .sg-list-pagination {
|
|
365
|
+
border-top: 1px solid var(--sg-color-border-secondary);
|
|
366
|
+
}
|