@vii7/div-table-widget 1.0.1
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 +190 -0
- package/README.md +431 -0
- package/dist/divtable.min.js +1 -0
- package/dist/editor.worker.js +1 -0
- package/dist/json.worker.js +1 -0
- package/dist/ts.worker.js +6 -0
- package/package.json +66 -0
- package/src/div-table.css +1331 -0
- package/src/div-table.js +5186 -0
- package/src/query.js +2107 -0
|
@@ -0,0 +1,1331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DivTable Widget Component Styles
|
|
3
|
+
* All styles for the .div-table-widget component and its children
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/* Table widget container */
|
|
7
|
+
.div-table-widget {
|
|
8
|
+
width: 100%;
|
|
9
|
+
box-sizing: border-box;
|
|
10
|
+
background: white;
|
|
11
|
+
border-radius: 8px;
|
|
12
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
13
|
+
overflow: hidden;
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* Toolbar */
|
|
19
|
+
.div-table-toolbar {
|
|
20
|
+
display: flex;
|
|
21
|
+
gap: 10px;
|
|
22
|
+
align-items: center;
|
|
23
|
+
padding: 16px;
|
|
24
|
+
background: #f9f9f7;
|
|
25
|
+
border-bottom: 1px solid #e9ecef;
|
|
26
|
+
flex-shrink: 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* Query input field */
|
|
30
|
+
.query-inputfield {
|
|
31
|
+
padding: 10px 5px 4px 10px;
|
|
32
|
+
border: 2px solid #e1e5e9;
|
|
33
|
+
border-radius: 8px;
|
|
34
|
+
background: #ffffff;
|
|
35
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
36
|
+
transition: all 0.2s ease-in-out;
|
|
37
|
+
flex: 1;
|
|
38
|
+
min-width: 50%;
|
|
39
|
+
overflow: hidden;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.query-inputfield:hover {
|
|
43
|
+
border-color: #b0b8c1;
|
|
44
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.query-inputfield.focused {
|
|
48
|
+
border-color: #123a67;
|
|
49
|
+
box-shadow: 0 0 0 3px rgba(3, 102, 214, 0.1), 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
50
|
+
outline: none;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.query-inputfield.error {
|
|
54
|
+
border-color: rgba(220, 53, 69, 0.6);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.query-inputfield.error:hover {
|
|
58
|
+
border-color: rgba(200, 35, 51, 0.6);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.query-inputfield.error.focused {
|
|
62
|
+
border-color: rgba(220, 53, 69, 0.6);
|
|
63
|
+
box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.25), 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.query-inputfield .monaco-editor {
|
|
67
|
+
height: 22px !important;
|
|
68
|
+
--vscode-focusBorder: rgba(0, 0, 0, 0);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* Toolbar elements */
|
|
72
|
+
.div-table-toolbar select {
|
|
73
|
+
padding: 10px 12px;
|
|
74
|
+
border: 2px solid #e1e5e9;
|
|
75
|
+
border-radius: 8px;
|
|
76
|
+
background: #ffffff;
|
|
77
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
78
|
+
transition: all 0.2s ease-in-out;
|
|
79
|
+
min-width: 150px;
|
|
80
|
+
cursor: pointer;
|
|
81
|
+
font-size: 14px;
|
|
82
|
+
color: #495057;
|
|
83
|
+
appearance: none;
|
|
84
|
+
-webkit-appearance: none;
|
|
85
|
+
-moz-appearance: none;
|
|
86
|
+
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
|
|
87
|
+
background-position: right 8px center;
|
|
88
|
+
background-repeat: no-repeat;
|
|
89
|
+
background-size: 16px;
|
|
90
|
+
padding-right: 32px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.div-table-toolbar select:hover {
|
|
94
|
+
border-color: #b0b8c1;
|
|
95
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.div-table-toolbar select:focus {
|
|
99
|
+
border-color: #123a67;
|
|
100
|
+
box-shadow: 0 0 0 3px rgba(3, 102, 214, 0.1), 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
101
|
+
outline: none;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.div-table-toolbar select:disabled {
|
|
105
|
+
background-color: #f9f9f7;
|
|
106
|
+
border-color: #e9ecef;
|
|
107
|
+
color: #6c757d;
|
|
108
|
+
cursor: not-allowed;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* Info section */
|
|
112
|
+
.info-section {
|
|
113
|
+
margin-left: auto;
|
|
114
|
+
text-align: right;
|
|
115
|
+
font-size: 0.9em;
|
|
116
|
+
color: #666;
|
|
117
|
+
padding: 0;
|
|
118
|
+
min-width: 200px;
|
|
119
|
+
display: flex;
|
|
120
|
+
flex-direction: column;
|
|
121
|
+
gap: 0;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.info-line-container {
|
|
125
|
+
display: flex;
|
|
126
|
+
justify-content: flex-end;
|
|
127
|
+
align-items: center;
|
|
128
|
+
gap: 8px;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.info-line {
|
|
132
|
+
display: flex;
|
|
133
|
+
justify-content: flex-end;
|
|
134
|
+
align-items: center;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.info-line.secondary {
|
|
138
|
+
font-size: 0.8em;
|
|
139
|
+
color: #888;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/* Refresh button in info section */
|
|
143
|
+
.refresh-button {
|
|
144
|
+
background: none;
|
|
145
|
+
border: none;
|
|
146
|
+
color: #666;
|
|
147
|
+
cursor: pointer;
|
|
148
|
+
padding: 4px;
|
|
149
|
+
border-radius: 3px;
|
|
150
|
+
display: flex;
|
|
151
|
+
align-items: center;
|
|
152
|
+
justify-content: center;
|
|
153
|
+
transition: all 0.2s ease;
|
|
154
|
+
flex-shrink: 0;
|
|
155
|
+
width: 22px;
|
|
156
|
+
height: 22px;
|
|
157
|
+
min-width: 22px;
|
|
158
|
+
min-height: 22px;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.refresh-button:hover {
|
|
162
|
+
background-color: #f0f0f0;
|
|
163
|
+
color: #333;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.refresh-button:active {
|
|
167
|
+
background-color: #e0e0e0;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.refresh-button.refreshing {
|
|
171
|
+
color: #007ACC;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.refresh-button.refreshing svg {
|
|
175
|
+
animation: spin 1s linear infinite;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.refresh-button svg {
|
|
179
|
+
width: 14px;
|
|
180
|
+
height: 14px;
|
|
181
|
+
transition: transform 0.2s ease;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/* Auto-fetch button in info section */
|
|
185
|
+
.auto-fetch-button {
|
|
186
|
+
background: none;
|
|
187
|
+
border: none;
|
|
188
|
+
color: #666;
|
|
189
|
+
cursor: pointer;
|
|
190
|
+
padding: 4px;
|
|
191
|
+
border-radius: 3px;
|
|
192
|
+
display: flex;
|
|
193
|
+
align-items: center;
|
|
194
|
+
justify-content: center;
|
|
195
|
+
transition: all 0.2s ease;
|
|
196
|
+
flex-shrink: 0;
|
|
197
|
+
margin-left: 4px;
|
|
198
|
+
width: 22px;
|
|
199
|
+
height: 22px;
|
|
200
|
+
min-width: 22px;
|
|
201
|
+
min-height: 22px;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.auto-fetch-button:hover {
|
|
205
|
+
background-color: #f0f0f0;
|
|
206
|
+
color: #333;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.auto-fetch-button:active {
|
|
210
|
+
background-color: #e0e0e0;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.auto-fetch-button.active {
|
|
214
|
+
color: #28a745;
|
|
215
|
+
background-color: #e8f5e9;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.auto-fetch-button.active:hover {
|
|
219
|
+
background-color: #c8e6c9;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.auto-fetch-button.paused {
|
|
223
|
+
color: #ffc107;
|
|
224
|
+
background-color: #fff8e1;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.auto-fetch-button.paused:hover {
|
|
228
|
+
background-color: #ffecb3;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.auto-fetch-button:disabled {
|
|
232
|
+
opacity: 0.5;
|
|
233
|
+
cursor: not-allowed;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.auto-fetch-button svg {
|
|
237
|
+
width: 14px;
|
|
238
|
+
height: 14px;
|
|
239
|
+
transition: transform 0.2s ease;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/* Filter selected only toggle button for showing only selected rows */
|
|
243
|
+
.filter-selected-only-toggle-button {
|
|
244
|
+
background: none;
|
|
245
|
+
border: none;
|
|
246
|
+
color: #666;
|
|
247
|
+
cursor: pointer;
|
|
248
|
+
padding: 4px;
|
|
249
|
+
border-radius: 3px;
|
|
250
|
+
display: flex;
|
|
251
|
+
align-items: center;
|
|
252
|
+
justify-content: center;
|
|
253
|
+
transition: all 0.2s ease;
|
|
254
|
+
flex-shrink: 0;
|
|
255
|
+
margin-right: 6px;
|
|
256
|
+
width: 22px;
|
|
257
|
+
height: 22px;
|
|
258
|
+
min-width: 22px;
|
|
259
|
+
min-height: 22px;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.filter-selected-only-toggle-button:hover {
|
|
263
|
+
background-color: #f0f0f0;
|
|
264
|
+
color: #333;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.filter-selected-only-toggle-button:active {
|
|
268
|
+
background-color: #e0e0e0;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.filter-selected-only-toggle-button.active {
|
|
272
|
+
color: #0ea5e9;
|
|
273
|
+
background-color: #e0f2fe;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.filter-selected-only-toggle-button.active:hover {
|
|
277
|
+
background-color: #bae6fd;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.filter-selected-only-toggle-button svg {
|
|
281
|
+
width: 14px;
|
|
282
|
+
height: 14px;
|
|
283
|
+
transition: transform 0.2s ease;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.info-selection {
|
|
287
|
+
font-weight: 600;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.info-stats {
|
|
291
|
+
color: #666;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
.progress-line {
|
|
295
|
+
display: flex;
|
|
296
|
+
justify-content: flex-end;
|
|
297
|
+
align-items: center;
|
|
298
|
+
margin-top: 2px;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
.loading-progress {
|
|
302
|
+
width: 120px;
|
|
303
|
+
height: 4px;
|
|
304
|
+
background: #e9ecef;
|
|
305
|
+
border-radius: 2px;
|
|
306
|
+
overflow: hidden;
|
|
307
|
+
position: relative;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.loading-progress-bar {
|
|
311
|
+
height: 100%;
|
|
312
|
+
background: #495057;
|
|
313
|
+
border-radius: 2px;
|
|
314
|
+
transition: width 0.3s ease;
|
|
315
|
+
position: relative;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/* Only animate shimmer when actually loading */
|
|
319
|
+
.loading-progress-bar.loading::after {
|
|
320
|
+
content: '';
|
|
321
|
+
position: absolute;
|
|
322
|
+
top: 0;
|
|
323
|
+
left: 0;
|
|
324
|
+
bottom: 0;
|
|
325
|
+
right: 0;
|
|
326
|
+
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.8), transparent);
|
|
327
|
+
animation: loading-shimmer 1.5s infinite;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/* Sequential loading progress segments */
|
|
331
|
+
.progress-segment {
|
|
332
|
+
height: 100%;
|
|
333
|
+
border-radius: 2px;
|
|
334
|
+
position: absolute;
|
|
335
|
+
top: 0;
|
|
336
|
+
transition: width 0.3s ease, left 0.3s ease;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.filtered-segment {
|
|
340
|
+
background: #dc3545;
|
|
341
|
+
z-index: 3;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
.loaded-segment {
|
|
345
|
+
background: #495057;
|
|
346
|
+
z-index: 2;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.loading-segment {
|
|
350
|
+
background: #007bff;
|
|
351
|
+
z-index: 1;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.loading-segment::after {
|
|
355
|
+
content: '';
|
|
356
|
+
position: absolute;
|
|
357
|
+
top: 0;
|
|
358
|
+
left: 0;
|
|
359
|
+
bottom: 0;
|
|
360
|
+
right: 0;
|
|
361
|
+
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.8), transparent);
|
|
362
|
+
animation: loading-shimmer 1.5s infinite;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/* Different states for sequential progress bar */
|
|
366
|
+
.loading-progress[data-state="sequential-loading"] {
|
|
367
|
+
position: relative;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
.loading-progress[data-state="filtered-loading"] {
|
|
371
|
+
position: relative;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
.loading-progress[data-state="filtered"] .loaded-segment {
|
|
375
|
+
background: #666;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/* Legacy support for old progress bars */
|
|
379
|
+
.loading-progress-bar {
|
|
380
|
+
height: 100%;
|
|
381
|
+
background: #495057;
|
|
382
|
+
border-radius: 2px;
|
|
383
|
+
transition: width 0.3s ease;
|
|
384
|
+
position: relative;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/* Only animate shimmer when actually loading */
|
|
388
|
+
.loading-progress-bar.loading::after {
|
|
389
|
+
content: '';
|
|
390
|
+
position: absolute;
|
|
391
|
+
top: 0;
|
|
392
|
+
left: 0;
|
|
393
|
+
bottom: 0;
|
|
394
|
+
right: 0;
|
|
395
|
+
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.8), transparent);
|
|
396
|
+
animation: loading-shimmer 1.5s infinite;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/* Different states for progress bar */
|
|
400
|
+
.loading-progress[data-state="filtered"] .loading-progress-bar {
|
|
401
|
+
background: #666;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
.loading-progress[data-state="filtered"] .loading-progress-bar.loading::after {
|
|
405
|
+
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
|
|
406
|
+
animation: filtered-shimmer 2s infinite;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
.loading-progress[data-state="loading"] .loading-progress-bar {
|
|
410
|
+
background: #495057;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
@keyframes loading-shimmer {
|
|
414
|
+
0% {
|
|
415
|
+
transform: translateX(-100%);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
100% {
|
|
419
|
+
transform: translateX(100%);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
@keyframes filtered-shimmer {
|
|
424
|
+
0% {
|
|
425
|
+
transform: translateX(-100%);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
100% {
|
|
429
|
+
transform: translateX(100%);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/* Table container using CSS Grid */
|
|
434
|
+
.div-table-container {
|
|
435
|
+
width: 100%;
|
|
436
|
+
background: white;
|
|
437
|
+
flex: 1;
|
|
438
|
+
min-height: 0;
|
|
439
|
+
display: flex;
|
|
440
|
+
flex-direction: column;
|
|
441
|
+
overflow: hidden;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/* Header container - sticky */
|
|
445
|
+
.div-table-header {
|
|
446
|
+
position: sticky;
|
|
447
|
+
top: 0;
|
|
448
|
+
z-index: 10;
|
|
449
|
+
background: #f9f9f7;
|
|
450
|
+
backdrop-filter: blur(10px);
|
|
451
|
+
-webkit-backdrop-filter: blur(10px);
|
|
452
|
+
border-bottom: 1px solid #e9ecef;
|
|
453
|
+
display: grid;
|
|
454
|
+
min-height: 48px;
|
|
455
|
+
align-items: auto;
|
|
456
|
+
color: #374151;
|
|
457
|
+
transition: box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
458
|
+
flex-shrink: 0;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
/* Scrollbar spacer to align header with body when scrollbar is present */
|
|
462
|
+
.scrollbar-spacer {
|
|
463
|
+
background: transparent;
|
|
464
|
+
pointer-events: none;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/* Add shadow when scrolling */
|
|
468
|
+
.div-table-header.scrolled {
|
|
469
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/* Body container - scrollable */
|
|
473
|
+
.div-table-body {
|
|
474
|
+
flex: 1;
|
|
475
|
+
min-height: 0;
|
|
476
|
+
overflow-y: auto;
|
|
477
|
+
background: white;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
/* Row styling - CSS Grid based */
|
|
481
|
+
.div-table-row {
|
|
482
|
+
display: grid;
|
|
483
|
+
min-height: 44px;
|
|
484
|
+
align-items: stretch;
|
|
485
|
+
border-bottom: 1px solid #f1f3f4;
|
|
486
|
+
transition: all 0.2s ease;
|
|
487
|
+
cursor: pointer;
|
|
488
|
+
gap: 0;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
.div-table-row:hover {
|
|
492
|
+
background-color: rgb(240, 247, 255);
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
.div-table-row:last-child {
|
|
496
|
+
border-bottom: none;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
/* Cell styling */
|
|
500
|
+
.div-table-cell {
|
|
501
|
+
padding: 8px 12px;
|
|
502
|
+
overflow: hidden;
|
|
503
|
+
text-overflow: ellipsis;
|
|
504
|
+
white-space: nowrap;
|
|
505
|
+
display: flex;
|
|
506
|
+
align-items: flex-start;
|
|
507
|
+
min-height: 28px;
|
|
508
|
+
min-width: 0;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
/* Header cell styling */
|
|
512
|
+
.div-table-header-cell {
|
|
513
|
+
padding: 8px 12px;
|
|
514
|
+
color: #374151;
|
|
515
|
+
cursor: pointer;
|
|
516
|
+
user-select: none;
|
|
517
|
+
display: flex;
|
|
518
|
+
align-items: flex-start;
|
|
519
|
+
justify-content: space-between;
|
|
520
|
+
transition: background-color 0.2s ease;
|
|
521
|
+
overflow: hidden;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
.header-left-content {
|
|
525
|
+
display: flex;
|
|
526
|
+
align-items: center;
|
|
527
|
+
gap: 0;
|
|
528
|
+
flex: 1 1 auto;
|
|
529
|
+
min-width: 0;
|
|
530
|
+
overflow: hidden;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
.header-left-content > span {
|
|
534
|
+
overflow: hidden;
|
|
535
|
+
text-overflow: ellipsis;
|
|
536
|
+
white-space: nowrap;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
.header-right-content {
|
|
540
|
+
display: flex;
|
|
541
|
+
align-items: center;
|
|
542
|
+
gap: 4px;
|
|
543
|
+
flex: 0 0 auto;
|
|
544
|
+
margin-left: 8px;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
.div-table-header-cell:hover {
|
|
548
|
+
background-color: rgba(0, 0, 0, 0.05);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/* Group indicator styling - hidden by default */
|
|
552
|
+
.group-indicator {
|
|
553
|
+
font-size: 12px;
|
|
554
|
+
width: 14px;
|
|
555
|
+
height: 20px;
|
|
556
|
+
display: inline-flex;
|
|
557
|
+
align-items: center;
|
|
558
|
+
justify-content: center;
|
|
559
|
+
opacity: 0;
|
|
560
|
+
transition: opacity 0.2s ease;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
/* Show group indicator on hover of header cell */
|
|
564
|
+
.div-table-header-cell:hover .group-indicator {
|
|
565
|
+
opacity: 0.5;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
.group-indicator:hover {
|
|
569
|
+
opacity: 1 !important;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
/* When column is grouped, always show indicator at full opacity */
|
|
573
|
+
.group-indicator.grouped {
|
|
574
|
+
opacity: 1 !important;
|
|
575
|
+
color: inherit;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
/* Sort indicator styling - hidden by default */
|
|
579
|
+
.sort-indicator {
|
|
580
|
+
width: 14px;
|
|
581
|
+
height: 20px;
|
|
582
|
+
display: inline-flex;
|
|
583
|
+
align-items: center;
|
|
584
|
+
justify-content: center;
|
|
585
|
+
opacity: 0;
|
|
586
|
+
transition: opacity 0.2s ease;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
/* Show sort indicator on hover of header cell */
|
|
590
|
+
.div-table-header-cell:hover .sort-indicator {
|
|
591
|
+
opacity: 0.5;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
/* Always show active sort indicator */
|
|
595
|
+
.sort-indicator.active {
|
|
596
|
+
opacity: 1 !important;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
/* Legacy: Sort indicator in header-right-content - hidden by default */
|
|
600
|
+
.header-right-content > span:last-child:not(.group-indicator):not(.sort-indicator) {
|
|
601
|
+
opacity: 0;
|
|
602
|
+
transition: opacity 0.2s ease;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
/* Show sort indicator on hover */
|
|
606
|
+
.div-table-header-cell:hover .header-right-content > span:last-child:not(.group-indicator):not(.sort-indicator) {
|
|
607
|
+
opacity: 0.5;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
/* Always show active sort indicator */
|
|
611
|
+
.div-table-header-cell.sorted .header-right-content > span:last-child:not(.sort-indicator) {
|
|
612
|
+
opacity: 1 !important;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
/* Composite header sub-sort indicator - hidden by default */
|
|
616
|
+
.sub-sort-indicator {
|
|
617
|
+
width: 14px;
|
|
618
|
+
height: 20px;
|
|
619
|
+
display: inline-flex;
|
|
620
|
+
align-items: center;
|
|
621
|
+
justify-content: center;
|
|
622
|
+
opacity: 0;
|
|
623
|
+
transition: opacity 0.2s ease;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/* Show sub-sort indicator on hover of the composite header cell */
|
|
627
|
+
.composite-header:hover .sub-sort-indicator {
|
|
628
|
+
opacity: 0.5;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/* Show sub-sort indicator on hover of the sub-header itself */
|
|
632
|
+
.composite-sub-header:hover .sub-sort-indicator {
|
|
633
|
+
opacity: 0.5;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
/* Always show active sub-sort indicator */
|
|
637
|
+
.sub-sort-indicator.active {
|
|
638
|
+
opacity: 1 !important;
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
/* Checkbox column */
|
|
642
|
+
.div-table-cell.checkbox-column,
|
|
643
|
+
.div-table-header-cell.checkbox-column {
|
|
644
|
+
width: 40px;
|
|
645
|
+
min-width: 40px;
|
|
646
|
+
max-width: 40px;
|
|
647
|
+
justify-content: center;
|
|
648
|
+
padding: 8px 4px;
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
.div-table-cell.checkbox-column input[type="checkbox"],
|
|
652
|
+
.div-table-header-cell.checkbox-column input[type="checkbox"] {
|
|
653
|
+
margin: 0;
|
|
654
|
+
cursor: pointer;
|
|
655
|
+
accent-color: #007bff;
|
|
656
|
+
width: 15px;
|
|
657
|
+
height: 15px;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
/* Three-state checkbox styling */
|
|
661
|
+
input[type="checkbox"]:indeterminate {
|
|
662
|
+
background-color: #007bff;
|
|
663
|
+
border-color: #007bff;
|
|
664
|
+
position: relative;
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
input[type="checkbox"]:indeterminate::after {
|
|
668
|
+
content: '━';
|
|
669
|
+
position: absolute;
|
|
670
|
+
top: 50%;
|
|
671
|
+
left: 50%;
|
|
672
|
+
transform: translate(-50%, -50%);
|
|
673
|
+
color: white;
|
|
674
|
+
font-size: 10px;
|
|
675
|
+
font-weight: bold;
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
.div-table-header-cell.checkbox-column input[type="checkbox"]:indeterminate {
|
|
679
|
+
background-color: #007bff;
|
|
680
|
+
border-color: #007bff;
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
/* Row states */
|
|
684
|
+
.div-table-row.selected {
|
|
685
|
+
background-color: rgba(0, 123, 255, 0.1) !important;
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
.div-table-row.focused {
|
|
689
|
+
background-color: white;
|
|
690
|
+
box-shadow: inset 3px 0 0 #007bff;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
.div-table-row.focused:hover {
|
|
694
|
+
background-color: rgba(0, 123, 255, 0.05) !important;
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
/* Ensure group headers also get proper focus styling */
|
|
698
|
+
.div-table-row.group-header.focused {
|
|
699
|
+
background-color: white !important;
|
|
700
|
+
box-shadow: inset 3px 0 0 #007bff !important;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
.div-table-row.group-header.focused:hover {
|
|
704
|
+
background-color: rgb(240, 247, 255) !important;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
/* Group header styling */
|
|
708
|
+
.div-table-row.group-header {
|
|
709
|
+
background: white;
|
|
710
|
+
font-weight: normal;
|
|
711
|
+
color: #495057;
|
|
712
|
+
border-bottom: 1px solid #f1f3f4;
|
|
713
|
+
border-top: 1px solid #f1f3f4;
|
|
714
|
+
position: sticky;
|
|
715
|
+
top: 0px;
|
|
716
|
+
z-index: 9;
|
|
717
|
+
box-shadow: none;
|
|
718
|
+
isolation: isolate;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
/* First group header doesn't need top border */
|
|
722
|
+
.div-table-row.group-header:first-of-type {
|
|
723
|
+
border-top: none;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
.div-table-row.group-header:hover {
|
|
727
|
+
background-color: rgb(240, 247, 255);
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
/* Add shadow only to the first group header (when sticky) */
|
|
731
|
+
.div-table-row.group-header:first-of-type {
|
|
732
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/* Make only the group name text bold */
|
|
736
|
+
.div-table-row.group-header .div-table-cell span {
|
|
737
|
+
font-weight: 600;
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
/* Group header checkbox styling */
|
|
741
|
+
.div-table-row.group-header .checkbox-column {
|
|
742
|
+
display: flex;
|
|
743
|
+
align-items: center;
|
|
744
|
+
justify-content: center;
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
.div-table-row.group-header .checkbox-column input[type="checkbox"] {
|
|
748
|
+
width: 15px;
|
|
749
|
+
height: 15px;
|
|
750
|
+
cursor: pointer;
|
|
751
|
+
accent-color: #007bff;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
.div-table-row.group-header .checkbox-column input[type="checkbox"]:indeterminate {
|
|
755
|
+
background-color: #007bff;
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
/* Group toggle button styling */
|
|
759
|
+
.group-toggle,
|
|
760
|
+
.group-toggle-all {
|
|
761
|
+
display: inline-block;
|
|
762
|
+
cursor: pointer;
|
|
763
|
+
font-size: 0.9em;
|
|
764
|
+
transition: transform 0.2s ease;
|
|
765
|
+
transform: rotate(90deg);
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
.group-toggle.collapsed,
|
|
769
|
+
.group-toggle-all.collapsed {
|
|
770
|
+
transform: rotate(0deg);
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
.group-toggle-all {
|
|
774
|
+
font-size: 1em;
|
|
775
|
+
font-weight: bold;
|
|
776
|
+
margin-right: 6px;
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
.group-toggle:hover,
|
|
780
|
+
.group-toggle-all:hover {
|
|
781
|
+
opacity: 0.7;
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
/* Grouped column styling */
|
|
785
|
+
.div-table-cell.grouped-column {
|
|
786
|
+
color: #999;
|
|
787
|
+
font-style: italic;
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
/* Composite column styling - for stacked fields in one column (subField) */
|
|
791
|
+
.div-table-cell.composite-column {
|
|
792
|
+
display: flex;
|
|
793
|
+
flex-direction: column;
|
|
794
|
+
align-items: flex-start;
|
|
795
|
+
gap: 2px;
|
|
796
|
+
padding: 6px 12px;
|
|
797
|
+
white-space: normal;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
/* First child (.composite-main) renders like normal cell - no special styling */
|
|
801
|
+
|
|
802
|
+
.composite-sub {
|
|
803
|
+
color: #6b7280;
|
|
804
|
+
line-height: 1.2;
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
/* Composite cell styling - for stacked rows (fieldCompositeName) */
|
|
808
|
+
.div-table-cell.composite-cell {
|
|
809
|
+
padding: 8px 12px;
|
|
810
|
+
display: flex;
|
|
811
|
+
flex-direction: column;
|
|
812
|
+
gap: 0;
|
|
813
|
+
align-items: stretch;
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
.composite-sub-cell {
|
|
817
|
+
min-width: 0;
|
|
818
|
+
overflow: hidden;
|
|
819
|
+
display: flex;
|
|
820
|
+
align-items: center;
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
.composite-sub-cell:first-child {
|
|
824
|
+
margin-bottom: 4px;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
.composite-sub-cell:not(:first-child) {
|
|
828
|
+
color: #6b7280;
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
/* Composite header styling */
|
|
832
|
+
.div-table-header-cell.composite-header {
|
|
833
|
+
padding: 8px 12px;
|
|
834
|
+
flex-direction: column;
|
|
835
|
+
justify-content: flex-start;
|
|
836
|
+
gap: 4px;
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
.composite-sub-header {
|
|
840
|
+
cursor: pointer;
|
|
841
|
+
user-select: none;
|
|
842
|
+
padding: 0;
|
|
843
|
+
border-radius: 4px;
|
|
844
|
+
transition: background-color 0.2s ease;
|
|
845
|
+
min-width: 0;
|
|
846
|
+
width: 100%;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
.composite-sub-header:first-child {
|
|
850
|
+
font-weight: 600;
|
|
851
|
+
color: #374151;
|
|
852
|
+
margin-bottom: 4px;
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
.composite-sub-header:hover {
|
|
856
|
+
background-color: #f3f4f6;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
/* Composite toggle button styling */
|
|
860
|
+
.composite-toggle {
|
|
861
|
+
display: inline-block;
|
|
862
|
+
cursor: pointer;
|
|
863
|
+
font-size: 0.9em;
|
|
864
|
+
transition: transform 0.2s ease;
|
|
865
|
+
user-select: none;
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
.composite-toggle:hover {
|
|
869
|
+
opacity: 0.7;
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
/* Hide collapsed group rows */
|
|
873
|
+
.div-table-row.group-collapsed {
|
|
874
|
+
display: none;
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
/* Responsive column sizes */
|
|
878
|
+
.col-fixed-narrow {
|
|
879
|
+
grid-column: span 1;
|
|
880
|
+
min-width: 60px;
|
|
881
|
+
max-width: 80px;
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
.col-fixed-medium {
|
|
885
|
+
grid-column: span 1;
|
|
886
|
+
min-width: 100px;
|
|
887
|
+
max-width: 140px;
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
.col-flexible-small {
|
|
891
|
+
grid-column: span 1;
|
|
892
|
+
min-width: 120px;
|
|
893
|
+
flex: 1;
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
.col-flexible-medium {
|
|
897
|
+
grid-column: span 2;
|
|
898
|
+
min-width: 150px;
|
|
899
|
+
flex: 2;
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
.col-flexible-large {
|
|
903
|
+
grid-column: span 3;
|
|
904
|
+
min-width: 200px;
|
|
905
|
+
flex: 3;
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
/* Dynamic grid template - will be set by JavaScript */
|
|
909
|
+
.div-table-header.grid-5-cols,
|
|
910
|
+
.div-table-row.grid-5-cols {
|
|
911
|
+
grid-template-columns: 40px 1fr 100px 200px 100px;
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
.div-table-header.grid-4-cols,
|
|
915
|
+
.div-table-row.grid-4-cols {
|
|
916
|
+
grid-template-columns: 40px 2fr 200px 100px;
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
/* Default grid when no specific column count */
|
|
920
|
+
.div-table-header,
|
|
921
|
+
.div-table-row {
|
|
922
|
+
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
/* Hide columns on mobile */
|
|
926
|
+
@media (max-width: 768px) {
|
|
927
|
+
.div-table-toolbar {
|
|
928
|
+
flex-direction: column;
|
|
929
|
+
gap: 8px;
|
|
930
|
+
align-items: stretch;
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
.query-inputfield {
|
|
934
|
+
width: 100%;
|
|
935
|
+
max-width: 100%;
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
.div-table-cell.hidden-mobile,
|
|
939
|
+
.div-table-header-cell.hidden-mobile {
|
|
940
|
+
display: none;
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
/* Adjust grid for mobile */
|
|
944
|
+
.div-table-header.grid-5-cols,
|
|
945
|
+
.div-table-row.grid-5-cols {
|
|
946
|
+
grid-template-columns: 40px 2fr 1fr;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
.div-table-header.grid-4-cols,
|
|
950
|
+
.div-table-row.grid-4-cols {
|
|
951
|
+
grid-template-columns: 40px 2fr 1fr;
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
@media (max-width: 480px) {
|
|
956
|
+
|
|
957
|
+
.div-table-cell.hidden-small,
|
|
958
|
+
.div-table-header-cell.hidden-small {
|
|
959
|
+
display: none;
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
/* Further reduce columns on small screens */
|
|
963
|
+
.div-table-header.grid-5-cols,
|
|
964
|
+
.div-table-row.grid-5-cols,
|
|
965
|
+
.div-table-header.grid-4-cols,
|
|
966
|
+
.div-table-row.grid-4-cols {
|
|
967
|
+
grid-template-columns: 40px 1fr;
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
/* Conditional checkbox styles */
|
|
972
|
+
.div-table-widget.no-checkboxes .checkbox-column {
|
|
973
|
+
display: none;
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
.div-table-widget.no-checkboxes .div-table-header.grid-5-cols,
|
|
977
|
+
.div-table-widget.no-checkboxes .div-table-row.grid-5-cols {
|
|
978
|
+
grid-template-columns: 1fr 2fr 2fr 1fr;
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
.div-table-widget.no-checkboxes .div-table-header.grid-4-cols,
|
|
982
|
+
.div-table-widget.no-checkboxes .div-table-row.grid-4-cols {
|
|
983
|
+
grid-template-columns: 2fr 2fr 1fr;
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
/* Scrollbar styling */
|
|
987
|
+
.div-table-body::-webkit-scrollbar {
|
|
988
|
+
width: 8px;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
.div-table-body::-webkit-scrollbar-track {
|
|
992
|
+
background: #f1f1f1;
|
|
993
|
+
border-radius: 4px;
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
.div-table-body::-webkit-scrollbar-thumb {
|
|
997
|
+
background: #c1c1c1;
|
|
998
|
+
border-radius: 4px;
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
.div-table-body::-webkit-scrollbar-thumb:hover {
|
|
1002
|
+
background: #a8a8a8;
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
/* Loading state */
|
|
1006
|
+
.div-table-loading {
|
|
1007
|
+
display: flex;
|
|
1008
|
+
align-items: center;
|
|
1009
|
+
justify-content: center;
|
|
1010
|
+
min-height: 200px;
|
|
1011
|
+
color: #666;
|
|
1012
|
+
font-style: italic;
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
/* Empty state */
|
|
1016
|
+
.div-table-empty {
|
|
1017
|
+
display: flex;
|
|
1018
|
+
align-items: center;
|
|
1019
|
+
justify-content: center;
|
|
1020
|
+
min-height: 200px;
|
|
1021
|
+
color: #999;
|
|
1022
|
+
font-style: italic;
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
/* Loading placeholder state */
|
|
1026
|
+
.div-table-loading {
|
|
1027
|
+
display: flex;
|
|
1028
|
+
align-items: center;
|
|
1029
|
+
justify-content: center;
|
|
1030
|
+
min-height: 200px;
|
|
1031
|
+
color: #666;
|
|
1032
|
+
font-style: italic;
|
|
1033
|
+
position: relative;
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
.div-table-loading::before {
|
|
1037
|
+
content: '';
|
|
1038
|
+
width: 20px;
|
|
1039
|
+
height: 20px;
|
|
1040
|
+
border: 2px solid #e3e3e3;
|
|
1041
|
+
border-top: 2px solid #666;
|
|
1042
|
+
border-radius: 50%;
|
|
1043
|
+
animation: spin 1s linear infinite;
|
|
1044
|
+
margin-right: 10px;
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
@keyframes spin {
|
|
1048
|
+
0% {
|
|
1049
|
+
transform: rotate(0deg);
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
100% {
|
|
1053
|
+
transform: rotate(360deg);
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
/* Virtual Scrolling Indicators */
|
|
1058
|
+
.error-indicator {
|
|
1059
|
+
display: none;
|
|
1060
|
+
align-items: center;
|
|
1061
|
+
justify-content: center;
|
|
1062
|
+
gap: 10px;
|
|
1063
|
+
padding: 15px;
|
|
1064
|
+
margin: 10px 0;
|
|
1065
|
+
border-radius: 3px;
|
|
1066
|
+
font-size: 14px;
|
|
1067
|
+
background: #fff5f5;
|
|
1068
|
+
border: 1px solid #fed7d7;
|
|
1069
|
+
color: #c53030;
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
/* Loading Placeholder Rows */
|
|
1073
|
+
.div-table-row.loading-placeholder {
|
|
1074
|
+
background: rgba(249, 249, 247, 0.5);
|
|
1075
|
+
border-bottom: 1px solid #f1f3f4;
|
|
1076
|
+
pointer-events: none;
|
|
1077
|
+
cursor: default;
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
.div-table-row.loading-placeholder:hover {
|
|
1081
|
+
background: rgba(249, 249, 247, 0.5) !important;
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
.div-table-cell.loading-cell {
|
|
1085
|
+
padding: 8px 12px;
|
|
1086
|
+
display: flex;
|
|
1087
|
+
align-items: center;
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
.loading-shimmer-content {
|
|
1091
|
+
height: 16px;
|
|
1092
|
+
background: linear-gradient(90deg, #e9ecef 25%, #f8f9fa 50%, #e9ecef 75%);
|
|
1093
|
+
background-size: 200% 100%;
|
|
1094
|
+
border-radius: 4px;
|
|
1095
|
+
animation: loading-shimmer 1.5s infinite;
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
.retry-button {
|
|
1099
|
+
background: #dc3545;
|
|
1100
|
+
color: white;
|
|
1101
|
+
border: none;
|
|
1102
|
+
border-radius: 4px;
|
|
1103
|
+
padding: 8px 12px;
|
|
1104
|
+
flex-direction: column;
|
|
1105
|
+
gap: 0;
|
|
1106
|
+
align-items: stretch;
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
/* Top-align composite-sub-cell only within composite-cell */
|
|
1110
|
+
.div-table-cell.composite-cell .composite-sub-cell {
|
|
1111
|
+
align-items: flex-start;
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
.retry-button:hover {
|
|
1115
|
+
background: #c82333;
|
|
1116
|
+
}
|
|
1117
|
+
|
|
1118
|
+
.retry-button:active {
|
|
1119
|
+
background: #bd2130;
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
/* ============================================
|
|
1123
|
+
Fixed Columns Layout
|
|
1124
|
+
============================================ */
|
|
1125
|
+
|
|
1126
|
+
/* Container with fixed columns enabled */
|
|
1127
|
+
.div-table-container.has-fixed-columns {
|
|
1128
|
+
display: flex;
|
|
1129
|
+
flex-direction: column;
|
|
1130
|
+
overflow: hidden;
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
/* Wrapper for the two column sections */
|
|
1134
|
+
.div-table-columns-wrapper {
|
|
1135
|
+
display: flex;
|
|
1136
|
+
flex: 1;
|
|
1137
|
+
min-height: 0;
|
|
1138
|
+
overflow: hidden;
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
/* Fixed (frozen) section */
|
|
1142
|
+
.div-table-fixed-section {
|
|
1143
|
+
flex: 0 0 auto;
|
|
1144
|
+
display: flex;
|
|
1145
|
+
flex-direction: column;
|
|
1146
|
+
border-right: 1px solid #e9ecef;
|
|
1147
|
+
z-index: 5;
|
|
1148
|
+
background: white;
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
/* Shadow only when horizontal scrolling is needed */
|
|
1152
|
+
.div-table-fixed-section.has-scroll-shadow {
|
|
1153
|
+
box-shadow: 2px 0 8px rgba(0, 0, 0, 0.1);
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1156
|
+
/* Scrollable section */
|
|
1157
|
+
.div-table-scroll-section {
|
|
1158
|
+
flex: 1 1 auto;
|
|
1159
|
+
display: flex;
|
|
1160
|
+
flex-direction: column;
|
|
1161
|
+
min-width: 0;
|
|
1162
|
+
overflow: hidden;
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
/* Fixed header */
|
|
1166
|
+
.div-table-fixed-header {
|
|
1167
|
+
position: relative;
|
|
1168
|
+
z-index: 11;
|
|
1169
|
+
flex-shrink: 0;
|
|
1170
|
+
display: grid;
|
|
1171
|
+
box-sizing: border-box;
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1174
|
+
/* Scrollable header - synced horizontally with body via JS */
|
|
1175
|
+
.div-table-scroll-header {
|
|
1176
|
+
position: relative;
|
|
1177
|
+
z-index: 10;
|
|
1178
|
+
flex-shrink: 0;
|
|
1179
|
+
overflow-x: scroll;
|
|
1180
|
+
overflow-y: hidden;
|
|
1181
|
+
box-sizing: border-box;
|
|
1182
|
+
/* Hide scrollbar but allow scrolling */
|
|
1183
|
+
scrollbar-width: none; /* Firefox */
|
|
1184
|
+
-ms-overflow-style: none; /* IE/Edge */
|
|
1185
|
+
}
|
|
1186
|
+
|
|
1187
|
+
.div-table-scroll-header::-webkit-scrollbar {
|
|
1188
|
+
display: none; /* Chrome/Safari/Opera */
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
/* Inner wrapper for scroll header grid content */
|
|
1192
|
+
.div-table-scroll-header-inner {
|
|
1193
|
+
display: grid;
|
|
1194
|
+
width: max-content;
|
|
1195
|
+
min-width: 100%;
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
/* Fixed body - vertical scroll only */
|
|
1199
|
+
.div-table-fixed-body {
|
|
1200
|
+
flex: 1;
|
|
1201
|
+
min-height: 0;
|
|
1202
|
+
overflow-y: auto;
|
|
1203
|
+
overflow-x: hidden;
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1206
|
+
/* Hide scrollbar on fixed body (synced with scroll body) */
|
|
1207
|
+
.div-table-fixed-body::-webkit-scrollbar {
|
|
1208
|
+
display: none;
|
|
1209
|
+
}
|
|
1210
|
+
.div-table-fixed-body {
|
|
1211
|
+
-ms-overflow-style: none;
|
|
1212
|
+
scrollbar-width: none;
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
/* Scrollable body - both scrolls */
|
|
1216
|
+
.div-table-scroll-body {
|
|
1217
|
+
flex: 1;
|
|
1218
|
+
min-height: 0;
|
|
1219
|
+
overflow: auto;
|
|
1220
|
+
}
|
|
1221
|
+
|
|
1222
|
+
/* Row parts in fixed columns layout */
|
|
1223
|
+
.div-table-fixed-row,
|
|
1224
|
+
.div-table-scroll-row {
|
|
1225
|
+
min-height: 44px;
|
|
1226
|
+
box-sizing: border-box;
|
|
1227
|
+
align-items: flex-start;
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
/* Ensure consistent row height between fixed and scroll sections */
|
|
1231
|
+
.div-table-fixed-row {
|
|
1232
|
+
background: white;
|
|
1233
|
+
display: grid;
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
.div-table-scroll-row {
|
|
1237
|
+
background: white;
|
|
1238
|
+
display: grid;
|
|
1239
|
+
}
|
|
1240
|
+
|
|
1241
|
+
/* Hover state for split rows */
|
|
1242
|
+
.div-table-row.hover,
|
|
1243
|
+
.div-table-row:hover {
|
|
1244
|
+
background-color: rgb(240, 247, 255);
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1247
|
+
/* Selected state for split rows */
|
|
1248
|
+
.div-table-fixed-row.selected,
|
|
1249
|
+
.div-table-scroll-row.selected {
|
|
1250
|
+
background-color: rgba(0, 123, 255, 0.1) !important;
|
|
1251
|
+
}
|
|
1252
|
+
|
|
1253
|
+
/* Focused state for split rows */
|
|
1254
|
+
.div-table-fixed-row.focused,
|
|
1255
|
+
.div-table-scroll-row.focused {
|
|
1256
|
+
background-color: white;
|
|
1257
|
+
box-shadow: inset 3px 0 0 #007bff;
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
.div-table-fixed-row.focused:hover,
|
|
1261
|
+
.div-table-scroll-row.focused:hover,
|
|
1262
|
+
.div-table-fixed-row.focused.hover,
|
|
1263
|
+
.div-table-scroll-row.focused.hover {
|
|
1264
|
+
background-color: rgba(0, 123, 255, 0.05) !important;
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
/* Group header in fixed columns layout */
|
|
1268
|
+
.div-table-fixed-row.group-header,
|
|
1269
|
+
.div-table-scroll-row.group-header {
|
|
1270
|
+
background: white;
|
|
1271
|
+
border-bottom: 1px solid #f1f3f4;
|
|
1272
|
+
border-top: 1px solid #f1f3f4;
|
|
1273
|
+
position: sticky;
|
|
1274
|
+
top: 0;
|
|
1275
|
+
z-index: 4;
|
|
1276
|
+
}
|
|
1277
|
+
|
|
1278
|
+
.div-table-fixed-row.group-header.focused,
|
|
1279
|
+
.div-table-scroll-row.group-header.focused {
|
|
1280
|
+
background-color: white !important;
|
|
1281
|
+
box-shadow: inset 3px 0 0 #007bff !important;
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
/* Scroll section: allow full content width since we can scroll horizontally */
|
|
1285
|
+
.div-table-scroll-section .div-table-cell {
|
|
1286
|
+
overflow: visible;
|
|
1287
|
+
text-overflow: clip;
|
|
1288
|
+
white-space: nowrap;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
.div-table-scroll-section .div-table-header-cell {
|
|
1292
|
+
overflow: visible;
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
.div-table-scroll-section .header-left-content {
|
|
1296
|
+
overflow: visible;
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1299
|
+
.div-table-scroll-section .header-left-content > span {
|
|
1300
|
+
overflow: visible;
|
|
1301
|
+
text-overflow: clip;
|
|
1302
|
+
white-space: nowrap;
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
/* Ensure scroll section rows don't constrain content */
|
|
1306
|
+
.div-table-scroll-row {
|
|
1307
|
+
min-width: 100%;
|
|
1308
|
+
width: max-content;
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
/* Mobile: disable fixed columns on small screens */
|
|
1312
|
+
@media (max-width: 768px) {
|
|
1313
|
+
.div-table-container.has-fixed-columns {
|
|
1314
|
+
/* Fallback to standard layout */
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
.div-table-columns-wrapper {
|
|
1318
|
+
flex-direction: column;
|
|
1319
|
+
}
|
|
1320
|
+
|
|
1321
|
+
.div-table-fixed-section {
|
|
1322
|
+
flex: 0 0 auto;
|
|
1323
|
+
border-right: none;
|
|
1324
|
+
border-bottom: 1px solid #e9ecef;
|
|
1325
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
.div-table-scroll-section {
|
|
1329
|
+
flex: 1 1 auto;
|
|
1330
|
+
}
|
|
1331
|
+
}
|