@skygraph/styles 0.0.0-placeholder.0 → 0.2.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/LICENSE +21 -0
- package/README.md +92 -6
- package/components/autocomplete.css +33 -0
- package/components/avatar.css +37 -0
- package/components/badge.css +102 -0
- package/components/breadcrumb.css +29 -0
- package/components/button.css +181 -0
- package/components/calendar.css +408 -0
- package/components/carousel.css +102 -0
- package/components/cascader.css +354 -0
- package/components/charts.css +408 -0
- package/components/checkbox.css +114 -0
- package/components/collapse.css +166 -0
- package/components/colorpicker.css +252 -0
- package/components/context-menu.css +95 -0
- package/components/dashboard.css +299 -0
- package/components/datagrid.css +86 -0
- package/components/datepicker.css +601 -0
- package/components/descriptions.css +82 -0
- package/components/diagram.css +435 -0
- package/components/drawer.css +103 -0
- package/components/dropdown.css +93 -0
- package/components/empty.css +25 -0
- package/components/event-timeline.css +100 -0
- package/components/field.css +35 -0
- package/components/form.css +115 -0
- package/components/gantt.css +166 -0
- package/components/inline-edit.css +113 -0
- package/components/input-group.css +79 -0
- package/components/input-number.css +76 -0
- package/components/input-password.css +104 -0
- package/components/input.css +185 -0
- package/components/list.css +357 -0
- package/components/mentions.css +54 -0
- package/components/menu.css +309 -0
- package/components/modal.css +77 -0
- package/components/notification.css +128 -0
- package/components/pagination.css +162 -0
- package/components/pin-input.css +71 -0
- package/components/popconfirm.css +95 -0
- package/components/progress.css +116 -0
- package/components/radio.css +95 -0
- package/components/rate.css +34 -0
- package/components/resource-calendar.css +224 -0
- package/components/result.css +45 -0
- package/components/schema-form-editor.css +433 -0
- package/components/search-input.css +112 -0
- package/components/segmented.css +76 -0
- package/components/select.css +172 -0
- package/components/skeleton.css +68 -0
- package/components/slider.css +51 -0
- package/components/spin.css +86 -0
- package/components/steps.css +185 -0
- package/components/switch.css +75 -0
- package/components/table.css +1023 -0
- package/components/tabs.css +117 -0
- package/components/tag-input.css +94 -0
- package/components/tag.css +61 -0
- package/components/textarea.css +22 -0
- package/components/timeline.css +169 -0
- package/components/timepicker.css +213 -0
- package/components/tooltip.css +91 -0
- package/components/transfer.css +140 -0
- package/components/tree.css +574 -0
- package/components/treeselect.css +219 -0
- package/components/upload.css +124 -0
- package/index.css +69 -3
- package/index.d.ts +9 -0
- package/package.json +102 -18
- package/print.css +88 -0
- package/reset.css +17 -0
- package/themes/dark.css +17 -0
- package/themes/default.css +14 -0
- package/tokens.css +312 -0
- package/transitions.css +158 -0
|
@@ -0,0 +1,1023 @@
|
|
|
1
|
+
.sg-table-wrapper {
|
|
2
|
+
--sg-table-row-height: auto;
|
|
3
|
+
--sg-table-row-bg: transparent;
|
|
4
|
+
--sg-table-row-hover-bg: var(--sg-color-bg-hover);
|
|
5
|
+
--sg-table-header-bg: var(--sg-color-bg-secondary);
|
|
6
|
+
--sg-table-border-color: var(--sg-color-border);
|
|
7
|
+
--sg-table-border-color-secondary: var(--sg-color-border-secondary);
|
|
8
|
+
--sg-table-cell-padding: var(--sg-padding-sm) var(--sg-padding-md);
|
|
9
|
+
/* Opaque fallback used by fixed (sticky) cells so scrolling columns
|
|
10
|
+
don't bleed through. Override per instance for non-default backgrounds. */
|
|
11
|
+
--sg-table-cell-solid-bg: var(--sg-color-bg);
|
|
12
|
+
width: 100%;
|
|
13
|
+
/* Allow shrinking below intrinsic min-content inside flex/grid parents
|
|
14
|
+
* so the inner scroll container can actually overflow (or the table can
|
|
15
|
+
* flex under its natural column widths). */
|
|
16
|
+
min-width: 0;
|
|
17
|
+
font-size: var(--sg-font-size);
|
|
18
|
+
color: var(--sg-color-text);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* Toolbar */
|
|
22
|
+
.sg-table-toolbar {
|
|
23
|
+
display: flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
gap: var(--sg-padding-sm);
|
|
26
|
+
margin-bottom: var(--sg-margin-sm);
|
|
27
|
+
flex-wrap: wrap;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.sg-table-toolbar-right {
|
|
31
|
+
display: flex;
|
|
32
|
+
gap: 8px;
|
|
33
|
+
margin-left: auto;
|
|
34
|
+
align-items: center;
|
|
35
|
+
flex-wrap: wrap;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.sg-table-toolbar-btn {
|
|
39
|
+
display: inline-flex;
|
|
40
|
+
align-items: center;
|
|
41
|
+
gap: 4px;
|
|
42
|
+
padding: 4px 12px;
|
|
43
|
+
font-size: var(--sg-font-size-sm);
|
|
44
|
+
color: var(--sg-color-text-secondary);
|
|
45
|
+
background: var(--sg-color-bg);
|
|
46
|
+
border: 1px solid var(--sg-color-border);
|
|
47
|
+
border-radius: var(--sg-border-radius-sm);
|
|
48
|
+
cursor: pointer;
|
|
49
|
+
white-space: nowrap;
|
|
50
|
+
transition: all var(--sg-transition-duration);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.sg-table-toolbar-btn:hover {
|
|
54
|
+
color: var(--sg-color-primary);
|
|
55
|
+
border-color: var(--sg-color-primary);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.sg-table-toolbar-group {
|
|
59
|
+
display: flex;
|
|
60
|
+
gap: 4px;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* Scroll container.
|
|
64
|
+
* `overflow-x` is set inline by `Table.tsx` only when the author passes
|
|
65
|
+
* `scroll.x` — otherwise the table flexes to fit its container and no
|
|
66
|
+
* scrollbar is needed. `min-width: 0` unblocks horizontal shrinking in
|
|
67
|
+
* nested flex/grid contexts. */
|
|
68
|
+
.sg-table-scroll {
|
|
69
|
+
width: 100%;
|
|
70
|
+
min-width: 0;
|
|
71
|
+
position: relative;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* Mobile fallback — when there's no explicit `scroll.x`, the table tries
|
|
75
|
+
* to flex into the available width which, on narrow viewports, collapses
|
|
76
|
+
* cells into illegible vertical stacks. Forcing horizontal overflow with
|
|
77
|
+
* `width: max-content` on the inner grid restores tabular layout and
|
|
78
|
+
* exposes a native horizontal scrollbar so users can pan instead of
|
|
79
|
+
* losing data. Only applies when `.sg-table-scroll-x` wasn't already set
|
|
80
|
+
* (which means the consumer opted-in to a controlled scroll width). */
|
|
81
|
+
@media (max-width: 640px) {
|
|
82
|
+
.sg-table-scroll:not(.sg-table-scroll-x) {
|
|
83
|
+
overflow-x: auto;
|
|
84
|
+
}
|
|
85
|
+
.sg-table-scroll:not(.sg-table-scroll-x) .sg-table-grid,
|
|
86
|
+
.sg-table-scroll:not(.sg-table-scroll-x) .sg-table-pinned-top,
|
|
87
|
+
.sg-table-scroll:not(.sg-table-scroll-x) .sg-table-pinned-bottom {
|
|
88
|
+
min-width: 100%;
|
|
89
|
+
width: max-content;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* Grid base.
|
|
94
|
+
* The grid carries a solid base background so body cells (transparent by
|
|
95
|
+
* default) and fixed-sticky cells draw over the same colour. Without this,
|
|
96
|
+
* fixed columns look like "floating white rectangles" when the table sits
|
|
97
|
+
* on a coloured surface (e.g. a DemoBox with a tinted fill).
|
|
98
|
+
*/
|
|
99
|
+
.sg-table-grid {
|
|
100
|
+
display: grid;
|
|
101
|
+
/* Fluid mode: stretch to fill the scroll container. Overridden below
|
|
102
|
+
* when the author opts into horizontal scroll via `scroll.x`. */
|
|
103
|
+
min-width: 100%;
|
|
104
|
+
background: var(--sg-table-cell-solid-bg);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* Horizontal-scroll mode: the grid keeps its declared `scroll.x` width
|
|
108
|
+
* (set inline as `min-width`) and does NOT stretch to fill the scroll
|
|
109
|
+
* container. This lets fixed columns sit flush against the right edge
|
|
110
|
+
* of the actual content instead of floating in empty space. */
|
|
111
|
+
.sg-table-scroll-x .sg-table-grid,
|
|
112
|
+
.sg-table-scroll-x .sg-table-pinned-top,
|
|
113
|
+
.sg-table-scroll-x .sg-table-pinned-bottom {
|
|
114
|
+
min-width: 0;
|
|
115
|
+
width: max-content;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* ---- Header ---- */
|
|
119
|
+
.sg-table-th {
|
|
120
|
+
position: relative;
|
|
121
|
+
padding: var(--sg-table-cell-padding);
|
|
122
|
+
font-weight: 600;
|
|
123
|
+
color: var(--sg-color-text);
|
|
124
|
+
background: var(--sg-table-header-bg);
|
|
125
|
+
border-bottom: 1px solid var(--sg-table-border-color);
|
|
126
|
+
user-select: none;
|
|
127
|
+
display: flex;
|
|
128
|
+
align-items: center;
|
|
129
|
+
gap: var(--sg-padding-xs);
|
|
130
|
+
white-space: nowrap;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.sg-table-th-content {
|
|
134
|
+
flex: 1;
|
|
135
|
+
min-width: 0;
|
|
136
|
+
display: flex;
|
|
137
|
+
align-items: center;
|
|
138
|
+
gap: var(--sg-padding-xs);
|
|
139
|
+
/* В узких колонках с одновременно sortable + filters заголовок мог
|
|
140
|
+
* "наезжать" на filter-trigger / resize-handle: длинный title + ▲▼
|
|
141
|
+
* не помещались, sort и filter сливались. Скрываем переполнение и
|
|
142
|
+
* усекаем сам title через .sg-table-th-title — иконки всегда видны. */
|
|
143
|
+
overflow: hidden;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.sg-table-th-title {
|
|
147
|
+
flex: 0 1 auto;
|
|
148
|
+
min-width: 0;
|
|
149
|
+
overflow: hidden;
|
|
150
|
+
text-overflow: ellipsis;
|
|
151
|
+
white-space: nowrap;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.sg-table-th-sortable {
|
|
155
|
+
cursor: pointer;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.sg-table-th-sortable:hover {
|
|
159
|
+
background: var(--sg-color-bg-hover);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/* Sort arrows */
|
|
163
|
+
.sg-table-sort-arrows {
|
|
164
|
+
display: inline-flex;
|
|
165
|
+
flex-direction: column;
|
|
166
|
+
line-height: 1;
|
|
167
|
+
gap: 0;
|
|
168
|
+
margin-left: 2px;
|
|
169
|
+
flex-shrink: 0;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.sg-table-sort-asc,
|
|
173
|
+
.sg-table-sort-desc {
|
|
174
|
+
font-size: 8px;
|
|
175
|
+
line-height: 8px;
|
|
176
|
+
color: var(--sg-color-text-quaternary, var(--sg-color-text-tertiary));
|
|
177
|
+
transition: color var(--sg-transition-duration);
|
|
178
|
+
/* Defensive: keep the sort glyph compact even if the locale ships a long
|
|
179
|
+
* aria-quality label instead of a single ▲/▼ glyph. The cell would
|
|
180
|
+
* otherwise stretch by the full label width and clash with the column
|
|
181
|
+
* title or filter trigger. */
|
|
182
|
+
max-width: 1em;
|
|
183
|
+
overflow: hidden;
|
|
184
|
+
white-space: nowrap;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.sg-table-sort-current {
|
|
188
|
+
color: var(--sg-color-primary);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.sg-table-th-sortable:hover .sg-table-sort-asc,
|
|
192
|
+
.sg-table-th-sortable:hover .sg-table-sort-desc {
|
|
193
|
+
color: var(--sg-color-text-tertiary);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.sg-table-th-sortable:hover .sg-table-sort-current {
|
|
197
|
+
color: var(--sg-color-primary);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.sg-table-sort-index {
|
|
201
|
+
font-size: 9px;
|
|
202
|
+
color: var(--sg-color-primary);
|
|
203
|
+
font-weight: 700;
|
|
204
|
+
margin-left: 1px;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/* Drag over */
|
|
208
|
+
.sg-table-th-drag-over {
|
|
209
|
+
background: var(--sg-color-primary-bg);
|
|
210
|
+
box-shadow: inset 2px 0 0 var(--sg-color-primary);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/* Fixed cell — legacy selector kept for non-td/th elements (group headers etc).
|
|
214
|
+
Opaque body/header overrides live at the end of the file where they can
|
|
215
|
+
win the cascade against .sg-table-td / .sg-table-th. */
|
|
216
|
+
.sg-table-cell-fixed {
|
|
217
|
+
background: var(--sg-table-cell-solid-bg);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/* Sticky header */
|
|
221
|
+
.sg-table-sticky .sg-table-th {
|
|
222
|
+
position: sticky;
|
|
223
|
+
top: 0;
|
|
224
|
+
z-index: var(--sg-z-sticky);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.sg-table-sticky .sg-table-cell-fixed.sg-table-th {
|
|
228
|
+
z-index: var(--sg-z-sticky-fixed);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/* ---- Body cells ---- */
|
|
232
|
+
.sg-table-td {
|
|
233
|
+
padding: var(--sg-table-cell-padding);
|
|
234
|
+
min-height: var(--sg-table-row-height);
|
|
235
|
+
background: var(--sg-table-row-bg);
|
|
236
|
+
border-bottom: 1px solid var(--sg-table-border-color-secondary);
|
|
237
|
+
display: flex;
|
|
238
|
+
align-items: center;
|
|
239
|
+
min-width: 0;
|
|
240
|
+
transition: background var(--sg-transition-duration);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.sg-table-hoverable .sg-table-row:hover .sg-table-td {
|
|
244
|
+
background: var(--sg-table-row-hover-bg);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.sg-table-row-selected .sg-table-td {
|
|
248
|
+
background: var(--sg-color-primary-bg);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.sg-table-row-selected:hover .sg-table-td {
|
|
252
|
+
background: var(--sg-color-primary-bg);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.sg-table-row-clickable .sg-table-td {
|
|
256
|
+
cursor: pointer;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/* Fixed-cell hover/selected overrides live in the dedicated block at the end
|
|
260
|
+
of the file so they can beat `.sg-table-td { background }`. */
|
|
261
|
+
|
|
262
|
+
/* Cell content wrapper */
|
|
263
|
+
.sg-table-cell-content {
|
|
264
|
+
flex: 1;
|
|
265
|
+
min-width: 0;
|
|
266
|
+
overflow: hidden;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/* ---- Selection / Expand cells ---- */
|
|
270
|
+
.sg-table-cell-selection,
|
|
271
|
+
.sg-table-cell-expand {
|
|
272
|
+
justify-content: center;
|
|
273
|
+
flex-shrink: 0;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/* ---- Row number ---- */
|
|
277
|
+
.sg-table-cell-row-number {
|
|
278
|
+
justify-content: center;
|
|
279
|
+
color: var(--sg-color-text-tertiary);
|
|
280
|
+
font-size: var(--sg-font-size-sm);
|
|
281
|
+
font-variant-numeric: tabular-nums;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/* ---- Expand button ---- */
|
|
285
|
+
.sg-table-expand-btn {
|
|
286
|
+
border: none;
|
|
287
|
+
background: none;
|
|
288
|
+
cursor: pointer;
|
|
289
|
+
font-size: 16px;
|
|
290
|
+
color: var(--sg-color-text-secondary);
|
|
291
|
+
padding: 0;
|
|
292
|
+
width: 20px;
|
|
293
|
+
height: 20px;
|
|
294
|
+
display: flex;
|
|
295
|
+
align-items: center;
|
|
296
|
+
justify-content: center;
|
|
297
|
+
transition: transform var(--sg-transition-duration) var(--sg-transition-timing);
|
|
298
|
+
transform: rotate(0deg);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
.sg-table-expand-open {
|
|
302
|
+
transform: rotate(90deg);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.sg-table-expand-btn:hover {
|
|
306
|
+
color: var(--sg-color-primary);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/* ---- Expanded row ---- */
|
|
310
|
+
.sg-table-expanded-row {
|
|
311
|
+
padding: var(--sg-padding-md) var(--sg-padding-lg);
|
|
312
|
+
background: var(--sg-color-bg-secondary);
|
|
313
|
+
border-bottom: 1px solid var(--sg-color-border-secondary);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/* ---- Empty ---- */
|
|
317
|
+
.sg-table-empty {
|
|
318
|
+
padding: var(--sg-padding-xl);
|
|
319
|
+
text-align: center;
|
|
320
|
+
color: var(--sg-color-text-tertiary);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/* ---- Editable ---- */
|
|
324
|
+
.sg-table-td-editable {
|
|
325
|
+
cursor: text;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
.sg-table-edit-input {
|
|
329
|
+
width: 100%;
|
|
330
|
+
border: 1px solid var(--sg-color-primary);
|
|
331
|
+
border-radius: var(--sg-border-radius-sm);
|
|
332
|
+
padding: 2px var(--sg-padding-xs);
|
|
333
|
+
font-size: inherit;
|
|
334
|
+
font-family: inherit;
|
|
335
|
+
color: var(--sg-color-text);
|
|
336
|
+
background: var(--sg-color-bg);
|
|
337
|
+
outline: none;
|
|
338
|
+
box-shadow: 0 0 0 2px var(--sg-color-primary-bg);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/* ---- Resize handle ---- */
|
|
342
|
+
.sg-table-resize-handle {
|
|
343
|
+
position: absolute;
|
|
344
|
+
top: 0;
|
|
345
|
+
right: 0;
|
|
346
|
+
bottom: 0;
|
|
347
|
+
width: 4px;
|
|
348
|
+
cursor: col-resize;
|
|
349
|
+
z-index: var(--sg-z-base);
|
|
350
|
+
transition: background var(--sg-transition-duration);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
.sg-table-resize-handle:hover,
|
|
354
|
+
.sg-table-resize-handle:active {
|
|
355
|
+
background: var(--sg-color-primary);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/* ---- Filter ---- */
|
|
359
|
+
.sg-table-filter-trigger {
|
|
360
|
+
display: inline-flex;
|
|
361
|
+
align-items: center;
|
|
362
|
+
justify-content: center;
|
|
363
|
+
cursor: pointer;
|
|
364
|
+
font-size: var(--sg-font-size-sm);
|
|
365
|
+
color: var(--sg-color-text-tertiary);
|
|
366
|
+
padding: 2px 4px;
|
|
367
|
+
border-radius: var(--sg-border-radius-sm);
|
|
368
|
+
transition:
|
|
369
|
+
color var(--sg-transition-duration),
|
|
370
|
+
background-color var(--sg-transition-duration);
|
|
371
|
+
flex-shrink: 0;
|
|
372
|
+
line-height: 1;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
.sg-table-filter-trigger > svg {
|
|
376
|
+
display: block;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
.sg-table-filter-trigger:hover {
|
|
380
|
+
color: var(--sg-color-primary);
|
|
381
|
+
background: var(--sg-color-bg-hover);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
.sg-table-filter-active {
|
|
385
|
+
color: var(--sg-color-primary);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
.sg-table-filter-portal > .sg-table-filter-dropdown {
|
|
389
|
+
position: static;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
.sg-table-filter-dropdown {
|
|
393
|
+
position: absolute;
|
|
394
|
+
top: 100%;
|
|
395
|
+
left: 0;
|
|
396
|
+
z-index: var(--sg-z-dropdown);
|
|
397
|
+
min-width: 140px;
|
|
398
|
+
background: var(--sg-color-bg-elevated);
|
|
399
|
+
border-radius: var(--sg-border-radius-lg);
|
|
400
|
+
box-shadow: var(--sg-shadow-lg);
|
|
401
|
+
border: 1px solid var(--sg-color-border-secondary);
|
|
402
|
+
padding: var(--sg-padding-sm);
|
|
403
|
+
animation: sg-table-filter-in var(--sg-transition-duration) var(--sg-transition-timing);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
@keyframes sg-table-filter-in {
|
|
407
|
+
from {
|
|
408
|
+
opacity: 0;
|
|
409
|
+
transform: scaleY(0.8);
|
|
410
|
+
}
|
|
411
|
+
to {
|
|
412
|
+
opacity: 1;
|
|
413
|
+
transform: scaleY(1);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
.sg-table-filter-list {
|
|
418
|
+
display: flex;
|
|
419
|
+
flex-direction: column;
|
|
420
|
+
gap: var(--sg-padding-xs);
|
|
421
|
+
max-height: 200px;
|
|
422
|
+
overflow-y: auto;
|
|
423
|
+
margin-bottom: var(--sg-padding-sm);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
.sg-table-filter-item {
|
|
427
|
+
display: flex;
|
|
428
|
+
align-items: center;
|
|
429
|
+
gap: var(--sg-padding-xs);
|
|
430
|
+
font-size: var(--sg-font-size-sm);
|
|
431
|
+
font-weight: 400;
|
|
432
|
+
cursor: pointer;
|
|
433
|
+
padding: 2px 0;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
.sg-table-filter-actions {
|
|
437
|
+
display: flex;
|
|
438
|
+
justify-content: space-between;
|
|
439
|
+
gap: var(--sg-padding-xs);
|
|
440
|
+
border-top: 1px solid var(--sg-color-border-secondary);
|
|
441
|
+
padding-top: var(--sg-padding-sm);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
.sg-table-filter-search {
|
|
445
|
+
margin-bottom: var(--sg-padding-sm);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
.sg-table-filter-search-mode {
|
|
449
|
+
display: flex;
|
|
450
|
+
flex-direction: column;
|
|
451
|
+
gap: var(--sg-padding-sm);
|
|
452
|
+
min-width: 180px;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
.sg-table-filter-item input[type='radio'] {
|
|
456
|
+
accent-color: var(--sg-color-primary);
|
|
457
|
+
margin: 0;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
.sg-table-filter-empty {
|
|
461
|
+
padding: var(--sg-padding-sm);
|
|
462
|
+
text-align: center;
|
|
463
|
+
color: var(--sg-color-text-tertiary);
|
|
464
|
+
font-size: var(--sg-font-size-sm);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/* ---- Filter (advanced mode) ---- */
|
|
468
|
+
.sg-table-filter-advanced-mode {
|
|
469
|
+
min-width: 200px;
|
|
470
|
+
display: flex;
|
|
471
|
+
flex-direction: column;
|
|
472
|
+
gap: var(--sg-padding-sm);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
.sg-table-filter-advanced-row {
|
|
476
|
+
display: flex;
|
|
477
|
+
width: 100%;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
.sg-table-filter-advanced-row > * {
|
|
481
|
+
flex: 1 1 auto;
|
|
482
|
+
min-width: 0;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
/* Базовый вид нативного <select> внутри любого filter-dropdown
|
|
486
|
+
(advanced-режим + пользовательские filterDropdown). :where() даёт нулевую
|
|
487
|
+
specificity, поэтому кастомный класс/inline-style легко перебивает. */
|
|
488
|
+
:where(.sg-table-filter-dropdown select) {
|
|
489
|
+
width: 100%;
|
|
490
|
+
height: 28px;
|
|
491
|
+
padding: 0 28px 0 var(--sg-padding-sm);
|
|
492
|
+
font-family: inherit;
|
|
493
|
+
font-size: var(--sg-font-size-sm);
|
|
494
|
+
color: var(--sg-color-text);
|
|
495
|
+
background-color: var(--sg-color-bg);
|
|
496
|
+
border: 1px solid var(--sg-color-border);
|
|
497
|
+
border-radius: var(--sg-border-radius-sm);
|
|
498
|
+
cursor: pointer;
|
|
499
|
+
appearance: none;
|
|
500
|
+
-webkit-appearance: none;
|
|
501
|
+
-moz-appearance: none;
|
|
502
|
+
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 16 16' fill='none' stroke='%238c8c8c' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E");
|
|
503
|
+
background-repeat: no-repeat;
|
|
504
|
+
background-position: right 8px center;
|
|
505
|
+
background-size: 10px 10px;
|
|
506
|
+
transition:
|
|
507
|
+
border-color var(--sg-transition-duration),
|
|
508
|
+
box-shadow var(--sg-transition-duration);
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
:where(.sg-table-filter-dropdown select):hover {
|
|
512
|
+
border-color: var(--sg-color-primary);
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
:where(.sg-table-filter-dropdown select):focus,
|
|
516
|
+
:where(.sg-table-filter-dropdown select):focus-visible {
|
|
517
|
+
outline: none;
|
|
518
|
+
border-color: var(--sg-color-primary);
|
|
519
|
+
box-shadow: 0 0 0 2px var(--sg-color-primary-bg, rgba(24, 144, 255, 0.15));
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
/* ---- Summary ---- */
|
|
523
|
+
.sg-table-summary-cell {
|
|
524
|
+
font-weight: 600;
|
|
525
|
+
background: var(--sg-color-bg-secondary);
|
|
526
|
+
border-top: 2px solid var(--sg-color-border);
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
/* ---- Pagination ---- */
|
|
530
|
+
.sg-table-pagination {
|
|
531
|
+
display: flex;
|
|
532
|
+
align-items: center;
|
|
533
|
+
justify-content: space-between;
|
|
534
|
+
padding: var(--sg-padding-md) 0;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
.sg-table-pagination-total {
|
|
538
|
+
font-size: var(--sg-font-size-sm);
|
|
539
|
+
color: var(--sg-color-text-secondary);
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
.sg-table-pagination-controls {
|
|
543
|
+
display: inline-flex;
|
|
544
|
+
align-items: center;
|
|
545
|
+
gap: var(--sg-padding-xs);
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
.sg-table-pagination-page {
|
|
549
|
+
font-size: var(--sg-font-size-sm);
|
|
550
|
+
color: var(--sg-color-text-secondary);
|
|
551
|
+
font-variant-numeric: tabular-nums;
|
|
552
|
+
min-width: 56px;
|
|
553
|
+
text-align: center;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
.sg-table-pagination-prev,
|
|
557
|
+
.sg-table-pagination-next {
|
|
558
|
+
padding: 2px 10px;
|
|
559
|
+
font-size: 14px;
|
|
560
|
+
line-height: 1;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
.sg-table-pagination-prev:disabled,
|
|
564
|
+
.sg-table-pagination-next:disabled {
|
|
565
|
+
opacity: 0.4;
|
|
566
|
+
cursor: not-allowed;
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
/* ---- Sizes ---- */
|
|
570
|
+
.sg-table-small .sg-table-th,
|
|
571
|
+
.sg-table-small .sg-table-td {
|
|
572
|
+
padding: var(--sg-padding-xs) var(--sg-padding-sm);
|
|
573
|
+
font-size: var(--sg-font-size-sm);
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
.sg-table-large .sg-table-th,
|
|
577
|
+
.sg-table-large .sg-table-td {
|
|
578
|
+
padding: var(--sg-padding-md) var(--sg-padding-lg);
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
/* ---- Bordered ---- */
|
|
582
|
+
.sg-table-bordered .sg-table-th,
|
|
583
|
+
.sg-table-bordered .sg-table-td {
|
|
584
|
+
border-right: 1px solid var(--sg-color-border-secondary);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
.sg-table-bordered .sg-table-th:last-child,
|
|
588
|
+
.sg-table-bordered .sg-table-td:last-child {
|
|
589
|
+
border-right: none;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
.sg-table-bordered .sg-table-grid {
|
|
593
|
+
border: 1px solid var(--sg-color-border);
|
|
594
|
+
border-radius: var(--sg-border-radius);
|
|
595
|
+
overflow: hidden;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
/* ---- Loading ---- */
|
|
599
|
+
.sg-table-loading {
|
|
600
|
+
position: relative;
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
.sg-table-loading .sg-table-scroll {
|
|
604
|
+
opacity: 0.4;
|
|
605
|
+
pointer-events: none;
|
|
606
|
+
transition: opacity var(--sg-transition-duration);
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
.sg-table-loading-mask {
|
|
610
|
+
position: absolute;
|
|
611
|
+
inset: 0;
|
|
612
|
+
display: flex;
|
|
613
|
+
align-items: center;
|
|
614
|
+
justify-content: center;
|
|
615
|
+
z-index: var(--sg-z-loading);
|
|
616
|
+
pointer-events: none;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
/* ---- Column group header ---- */
|
|
620
|
+
.sg-table-th-group {
|
|
621
|
+
justify-content: center;
|
|
622
|
+
text-align: center;
|
|
623
|
+
border-bottom: 1px solid var(--sg-color-border);
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/* ---- Tree indent ---- */
|
|
627
|
+
.sg-table-td .sg-table-expand-btn {
|
|
628
|
+
flex-shrink: 0;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/* ---- Scroll Y ---- */
|
|
632
|
+
.sg-table-scroll {
|
|
633
|
+
position: relative;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
/* ---- Virtualization, fixed-height mode ----
|
|
637
|
+
*
|
|
638
|
+
* When the engine has been told `rowHeight: <number>` (no measurement
|
|
639
|
+
* estimate), it computes scroll math assuming each row is exactly that
|
|
640
|
+
* tall. Natural cell height (padding + line-height + border) usually
|
|
641
|
+
* differs by 1–4px per row, which makes the effective DOM `scrollHeight`
|
|
642
|
+
* drift away from the engine's `totalHeight` as the visible window
|
|
643
|
+
* changes — that drift is what shows up as the scrollbar thumb lagging
|
|
644
|
+
* behind the cursor while the user drags it. Locking visible row cells to
|
|
645
|
+
* the configured `rowHeight` removes the mismatch entirely. */
|
|
646
|
+
.sg-table-grid-virtual-fixed .sg-table-row[data-sg-virtual-row-index] > .sg-table-td {
|
|
647
|
+
height: var(--sg-virtual-row-height);
|
|
648
|
+
min-height: 0;
|
|
649
|
+
overflow: hidden;
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
/* ---- Span cells ---- */
|
|
653
|
+
.sg-table-td[style*='grid-row'] {
|
|
654
|
+
align-items: flex-start;
|
|
655
|
+
padding-top: var(--sg-padding-sm);
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
.sg-table-td[style*='grid-column'] {
|
|
659
|
+
border-right: none;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
/* ---- Zebra striping ---- */
|
|
663
|
+
.sg-table-row-striped .sg-table-td {
|
|
664
|
+
background: color-mix(in srgb, var(--sg-color-text) 2%, transparent);
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
.sg-table-hoverable .sg-table-row-striped:hover .sg-table-td {
|
|
668
|
+
background: var(--sg-color-bg-hover);
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
/* ---- Row warning (custom rowClassName example) ---- */
|
|
672
|
+
.sg-table-row-warning .sg-table-td {
|
|
673
|
+
background: color-mix(in srgb, var(--sg-color-warning) 8%, transparent);
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
/* ---- Row drag over ---- */
|
|
677
|
+
.sg-table-row-drag-over .sg-table-td {
|
|
678
|
+
box-shadow: inset 0 -2px 0 var(--sg-color-primary);
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
/* ---- Drag handle ---- */
|
|
682
|
+
.sg-table-cell-drag-handle {
|
|
683
|
+
color: var(--sg-color-text-tertiary);
|
|
684
|
+
font-size: 16px;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
.sg-table-cell-drag-handle:hover {
|
|
688
|
+
color: var(--sg-color-text-secondary);
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
/* ---- Selection bar ---- */
|
|
692
|
+
.sg-table-selection-bar {
|
|
693
|
+
display: flex;
|
|
694
|
+
align-items: center;
|
|
695
|
+
gap: var(--sg-padding-sm);
|
|
696
|
+
padding: var(--sg-padding-sm) var(--sg-padding-md);
|
|
697
|
+
background: var(--sg-color-primary-bg);
|
|
698
|
+
border-radius: var(--sg-border-radius-sm);
|
|
699
|
+
margin-bottom: var(--sg-margin-sm);
|
|
700
|
+
font-size: var(--sg-font-size-sm);
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
.sg-table-selection-count {
|
|
704
|
+
font-weight: 600;
|
|
705
|
+
color: var(--sg-color-primary);
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
.sg-table-selection-action {
|
|
709
|
+
padding: 2px 8px;
|
|
710
|
+
font-size: var(--sg-font-size-sm);
|
|
711
|
+
background: none;
|
|
712
|
+
border: 1px solid var(--sg-color-border);
|
|
713
|
+
border-radius: var(--sg-border-radius-sm);
|
|
714
|
+
cursor: pointer;
|
|
715
|
+
color: var(--sg-color-text);
|
|
716
|
+
transition: all var(--sg-transition-duration);
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
.sg-table-selection-action:hover {
|
|
720
|
+
border-color: var(--sg-color-primary);
|
|
721
|
+
color: var(--sg-color-primary);
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
.sg-table-selection-action-danger {
|
|
725
|
+
color: var(--sg-color-error);
|
|
726
|
+
border-color: var(--sg-color-error);
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
.sg-table-selection-clear {
|
|
730
|
+
margin-left: auto;
|
|
731
|
+
background: none;
|
|
732
|
+
border: none;
|
|
733
|
+
cursor: pointer;
|
|
734
|
+
color: var(--sg-color-text-tertiary);
|
|
735
|
+
font-size: 16px;
|
|
736
|
+
padding: 0 4px;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
.sg-table-selection-clear:hover {
|
|
740
|
+
color: var(--sg-color-text);
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
/* ---- Fullscreen ---- */
|
|
744
|
+
.sg-table-fullscreen {
|
|
745
|
+
position: fixed;
|
|
746
|
+
inset: 0;
|
|
747
|
+
z-index: 1100;
|
|
748
|
+
background: var(--sg-color-bg);
|
|
749
|
+
padding: var(--sg-padding-lg);
|
|
750
|
+
overflow: auto;
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
/* ---- Column visibility dropdown ---- */
|
|
754
|
+
.sg-table-col-visibility-dropdown {
|
|
755
|
+
position: absolute;
|
|
756
|
+
top: 100%;
|
|
757
|
+
right: 0;
|
|
758
|
+
z-index: 1040;
|
|
759
|
+
background: var(--sg-color-bg-elevated, var(--sg-color-bg-container));
|
|
760
|
+
border: 1px solid var(--sg-color-border);
|
|
761
|
+
border-radius: var(--sg-border-radius);
|
|
762
|
+
box-shadow: var(--sg-shadow-lg, 0 6px 16px rgba(0, 0, 0, 0.08));
|
|
763
|
+
padding: 8px 0;
|
|
764
|
+
min-width: 160px;
|
|
765
|
+
max-height: 300px;
|
|
766
|
+
overflow-y: auto;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
.sg-table-col-visibility-item {
|
|
770
|
+
display: flex;
|
|
771
|
+
align-items: center;
|
|
772
|
+
gap: 8px;
|
|
773
|
+
padding: 4px 12px;
|
|
774
|
+
cursor: pointer;
|
|
775
|
+
font-size: var(--sg-font-size-sm);
|
|
776
|
+
transition: background var(--sg-transition-duration);
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
.sg-table-col-visibility-item:hover {
|
|
780
|
+
background: var(--sg-color-bg-hover);
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
/* ---- Density dropdown ---- */
|
|
784
|
+
.sg-table-density-dropdown {
|
|
785
|
+
position: absolute;
|
|
786
|
+
top: 100%;
|
|
787
|
+
right: 0;
|
|
788
|
+
z-index: 1040;
|
|
789
|
+
background: var(--sg-color-bg-elevated, var(--sg-color-bg-container));
|
|
790
|
+
border: 1px solid var(--sg-color-border);
|
|
791
|
+
border-radius: var(--sg-border-radius);
|
|
792
|
+
box-shadow: var(--sg-shadow-lg, 0 6px 16px rgba(0, 0, 0, 0.08));
|
|
793
|
+
padding: 4px 0;
|
|
794
|
+
min-width: 120px;
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
.sg-table-density-option {
|
|
798
|
+
display: block;
|
|
799
|
+
width: 100%;
|
|
800
|
+
padding: 6px 12px;
|
|
801
|
+
font-size: var(--sg-font-size-sm);
|
|
802
|
+
text-align: left;
|
|
803
|
+
background: none;
|
|
804
|
+
border: none;
|
|
805
|
+
cursor: pointer;
|
|
806
|
+
color: var(--sg-color-text);
|
|
807
|
+
transition: background var(--sg-transition-duration);
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
.sg-table-density-option:hover {
|
|
811
|
+
background: var(--sg-color-bg-hover);
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
.sg-table-density-active {
|
|
815
|
+
color: var(--sg-color-primary);
|
|
816
|
+
font-weight: 600;
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
/* ---- Group rows ---- */
|
|
820
|
+
.sg-table-group-cell {
|
|
821
|
+
display: flex;
|
|
822
|
+
align-items: center;
|
|
823
|
+
gap: var(--sg-padding-sm);
|
|
824
|
+
padding: var(--sg-padding-sm) var(--sg-padding-md);
|
|
825
|
+
background: var(--sg-color-bg-secondary);
|
|
826
|
+
border-bottom: 1px solid var(--sg-color-border);
|
|
827
|
+
cursor: pointer;
|
|
828
|
+
font-weight: 500;
|
|
829
|
+
transition: background var(--sg-transition-duration);
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
.sg-table-group-cell:hover {
|
|
833
|
+
background: var(--sg-color-bg-hover);
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
.sg-table-group-title {
|
|
837
|
+
flex-shrink: 0;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
.sg-table-group-count {
|
|
841
|
+
color: var(--sg-color-text-tertiary);
|
|
842
|
+
font-size: var(--sg-font-size-sm);
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
.sg-table-group-aggregates {
|
|
846
|
+
display: flex;
|
|
847
|
+
gap: var(--sg-padding-md);
|
|
848
|
+
margin-left: auto;
|
|
849
|
+
font-size: var(--sg-font-size-sm);
|
|
850
|
+
color: var(--sg-color-text-secondary);
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
.sg-table-group-agg-item {
|
|
854
|
+
white-space: nowrap;
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
/* ---- Aggregation footer ---- */
|
|
858
|
+
.sg-table-footer-cell {
|
|
859
|
+
font-weight: 600;
|
|
860
|
+
background: var(--sg-color-bg-secondary);
|
|
861
|
+
border-top: 2px solid var(--sg-color-border);
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
.sg-table-aggregate-value {
|
|
865
|
+
display: inline-flex;
|
|
866
|
+
gap: 4px;
|
|
867
|
+
align-items: baseline;
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
.sg-table-aggregate-label {
|
|
871
|
+
font-size: var(--sg-font-size-sm);
|
|
872
|
+
color: var(--sg-color-text-tertiary);
|
|
873
|
+
font-weight: 400;
|
|
874
|
+
text-transform: uppercase;
|
|
875
|
+
letter-spacing: 0.5px;
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
/* ---- Keyboard navigation focus ---- */
|
|
879
|
+
.sg-table-cell-focused {
|
|
880
|
+
outline: 2px solid var(--sg-color-primary);
|
|
881
|
+
outline-offset: -2px;
|
|
882
|
+
z-index: 1;
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
/* ---- Cell copy ---- */
|
|
886
|
+
.sg-table-cell-copyable {
|
|
887
|
+
position: relative;
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
.sg-table-copy-btn {
|
|
891
|
+
opacity: 0;
|
|
892
|
+
position: absolute;
|
|
893
|
+
top: 50%;
|
|
894
|
+
right: 4px;
|
|
895
|
+
transform: translateY(-50%);
|
|
896
|
+
border: none;
|
|
897
|
+
background: var(--sg-color-bg-elevated, var(--sg-color-bg-container));
|
|
898
|
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12);
|
|
899
|
+
border-radius: var(--sg-border-radius-sm);
|
|
900
|
+
cursor: pointer;
|
|
901
|
+
font-size: 12px;
|
|
902
|
+
width: 22px;
|
|
903
|
+
height: 22px;
|
|
904
|
+
display: flex;
|
|
905
|
+
align-items: center;
|
|
906
|
+
justify-content: center;
|
|
907
|
+
color: var(--sg-color-text-secondary);
|
|
908
|
+
transition:
|
|
909
|
+
opacity var(--sg-transition-duration),
|
|
910
|
+
color var(--sg-transition-duration);
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
.sg-table-cell-copyable:hover .sg-table-copy-btn {
|
|
914
|
+
opacity: 1;
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
.sg-table-copy-btn:hover {
|
|
918
|
+
color: var(--sg-color-primary);
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
.sg-table-cell-copied .sg-table-copy-btn {
|
|
922
|
+
opacity: 1;
|
|
923
|
+
color: var(--sg-color-success);
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
/* ---- Column header tooltip ---- */
|
|
927
|
+
.sg-table-th-tooltip {
|
|
928
|
+
font-size: 12px;
|
|
929
|
+
color: var(--sg-color-text-tertiary);
|
|
930
|
+
cursor: help;
|
|
931
|
+
flex-shrink: 0;
|
|
932
|
+
margin-left: 2px;
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
.sg-table-th-tooltip:hover {
|
|
936
|
+
color: var(--sg-color-primary);
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
/* ---- Pinned rows ---- */
|
|
940
|
+
.sg-table-pinned-top,
|
|
941
|
+
.sg-table-pinned-bottom {
|
|
942
|
+
display: grid;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
.sg-table-pinned-top {
|
|
946
|
+
border-bottom: 2px solid var(--sg-color-primary);
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
.sg-table-pinned-bottom {
|
|
950
|
+
border-top: 2px solid var(--sg-color-primary);
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
.sg-table-row-pinned .sg-table-td {
|
|
954
|
+
background: color-mix(in srgb, var(--sg-color-primary) 4%, var(--sg-color-bg-container));
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
/* ---- Fixed cells: opaque backgrounds ------------------------------------
|
|
958
|
+
*
|
|
959
|
+
* Fixed (sticky) columns need a solid background, otherwise content from
|
|
960
|
+
* the scrolling columns bleeds through them. These rules are placed last
|
|
961
|
+
* so their specificity (0,2,0) beats the plain `.sg-table-td` /
|
|
962
|
+
* `.sg-table-th` rules (0,1,0) that reset background for stripes / theme.
|
|
963
|
+
*
|
|
964
|
+
* Order: default → hover → selected → striped (least → most specific).
|
|
965
|
+
* Each variant keeps the fixed column visually in sync with the rest of
|
|
966
|
+
* the row, so the "floating" effect disappears entirely.
|
|
967
|
+
*/
|
|
968
|
+
.sg-table-td.sg-table-cell-fixed {
|
|
969
|
+
background: var(--sg-table-cell-solid-bg);
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
.sg-table-th.sg-table-cell-fixed {
|
|
973
|
+
background: var(--sg-table-header-bg);
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
.sg-table-hoverable .sg-table-row:hover .sg-table-td.sg-table-cell-fixed {
|
|
977
|
+
background: var(--sg-table-row-hover-bg);
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
.sg-table-row-selected .sg-table-td.sg-table-cell-fixed,
|
|
981
|
+
.sg-table-row-selected:hover .sg-table-td.sg-table-cell-fixed {
|
|
982
|
+
background: var(--sg-color-primary-bg);
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
.sg-table-row-striped .sg-table-td.sg-table-cell-fixed {
|
|
986
|
+
background: color-mix(in srgb, var(--sg-color-text) 2%, var(--sg-table-cell-solid-bg));
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
.sg-table-hoverable .sg-table-row-striped:hover .sg-table-td.sg-table-cell-fixed {
|
|
990
|
+
background: var(--sg-table-row-hover-bg);
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
/* Subtle shadow on the inner edge so the fixed column visually detaches
|
|
994
|
+
from the scrolling body. Keeps the table readable when columns collide. */
|
|
995
|
+
.sg-table-td.sg-table-cell-fixed-left,
|
|
996
|
+
.sg-table-th.sg-table-cell-fixed-left {
|
|
997
|
+
box-shadow: 2px 0 4px -2px color-mix(in srgb, black 12%, transparent);
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
.sg-table-td.sg-table-cell-fixed-right,
|
|
1001
|
+
.sg-table-th.sg-table-cell-fixed-right {
|
|
1002
|
+
box-shadow: -2px 0 4px -2px color-mix(in srgb, black 12%, transparent);
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
/* ---- Print ---- */
|
|
1006
|
+
@media print {
|
|
1007
|
+
.sg-table-toolbar,
|
|
1008
|
+
.sg-table-pagination,
|
|
1009
|
+
.sg-table-selection-bar {
|
|
1010
|
+
display: none !important;
|
|
1011
|
+
}
|
|
1012
|
+
.sg-table-wrapper {
|
|
1013
|
+
overflow: visible !important;
|
|
1014
|
+
}
|
|
1015
|
+
.sg-table-scroll {
|
|
1016
|
+
overflow: visible !important;
|
|
1017
|
+
max-height: none !important;
|
|
1018
|
+
}
|
|
1019
|
+
.sg-table-fullscreen {
|
|
1020
|
+
position: static !important;
|
|
1021
|
+
padding: 0 !important;
|
|
1022
|
+
}
|
|
1023
|
+
}
|