@gp-grid/angular 0.20.0 → 0.22.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/dist/styles.css CHANGED
@@ -1,1115 +1 @@
1
-
2
- /* =============================================================================
3
- GP Grid - CSS Variables for Theming
4
- ============================================================================= */
5
-
6
- .gp-grid-container {
7
- /* Colors - Light Mode (default) */
8
- --gp-grid-bg: #ffffff;
9
- --gp-grid-bg-alt: #f8f9fa;
10
- --gp-grid-text: #212529;
11
- --gp-grid-text-secondary: #6c757d;
12
- --gp-grid-text-muted: #adb5bd;
13
- --gp-grid-border: #dee2e6;
14
- --gp-grid-border-light: #e9ecef;
15
-
16
- /* Header */
17
- --gp-grid-header-bg: #f1f3f5;
18
- --gp-grid-header-text: #212529;
19
- --gp-grid-header-z-index: 10;
20
-
21
- /* Selection */
22
- --gp-grid-primary: #228be6;
23
- --gp-grid-primary-light: #e7f5ff;
24
- --gp-grid-primary-border: #74c0fc;
25
- --gp-grid-hover: #f1f3f5;
26
-
27
- /* Filter */
28
- --gp-grid-filter-bg: #f8f9fa;
29
- --gp-grid-input-bg: #ffffff;
30
- --gp-grid-input-border: #ced4da;
31
-
32
- /* Error */
33
- --gp-grid-error-bg: #fff5f5;
34
- --gp-grid-error-text: #c92a2a;
35
-
36
- /* Loading */
37
- --gp-grid-loading-bg: rgba(255, 255, 255, 0.95);
38
- --gp-grid-loading-text: #495057;
39
-
40
- /* Scrollbar */
41
- --gp-grid-scrollbar-track: #f1f3f5;
42
- --gp-grid-scrollbar-thumb: #ced4da;
43
- --gp-grid-scrollbar-thumb-hover: #adb5bd;
44
- }
45
-
46
- /* Dark Mode */
47
- .gp-grid-container--dark {
48
- --gp-grid-bg: #1a1b1e;
49
- --gp-grid-bg-alt: #25262b;
50
- --gp-grid-text: #c1c2c5;
51
- --gp-grid-text-secondary: #909296;
52
- --gp-grid-text-muted: #5c5f66;
53
- --gp-grid-border: #373a40;
54
- --gp-grid-border-light: #2c2e33;
55
-
56
- /* Header */
57
- --gp-grid-header-bg: #25262b;
58
- --gp-grid-header-text: #c1c2c5;
59
- --gp-grid-header-z-index: 10;
60
-
61
- /* Selection */
62
- --gp-grid-primary: #339af0;
63
- --gp-grid-primary-light: #1c3d5a;
64
- --gp-grid-primary-border: #1c7ed6;
65
- --gp-grid-hover: #2c2e33;
66
-
67
- /* Filter */
68
- --gp-grid-filter-bg: #25262b;
69
- --gp-grid-input-bg: #1a1b1e;
70
- --gp-grid-input-border: #373a40;
71
-
72
- /* Error */
73
- --gp-grid-error-bg: #2c1a1a;
74
- --gp-grid-error-text: #ff6b6b;
75
-
76
- /* Loading */
77
- --gp-grid-loading-bg: rgba(26, 27, 30, 0.95);
78
- --gp-grid-loading-text: #c1c2c5;
79
-
80
- /* Scrollbar */
81
- --gp-grid-scrollbar-track: #25262b;
82
- --gp-grid-scrollbar-thumb: #373a40;
83
- --gp-grid-scrollbar-thumb-hover: #4a4d52;
84
- }
85
-
86
-
87
- /* =============================================================================
88
- GP Grid - Clean Flat Design
89
- ============================================================================= */
90
-
91
- /* Grid Container - structural */
92
- .gp-grid-container {
93
- outline: none;
94
- user-select: none;
95
- -webkit-user-select: none;
96
- }
97
-
98
- /* Visual properties - :where() for zero specificity, consumers can override with a single class */
99
- :where(.gp-grid-container) {
100
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
101
- font-size: 13px;
102
- line-height: 1.5;
103
- color: var(--gp-grid-text);
104
- background-color: var(--gp-grid-bg);
105
- border: 1px solid var(--gp-grid-border);
106
- border-radius: 6px;
107
- }
108
-
109
- .gp-grid-container:focus {
110
- outline: none;
111
- }
112
-
113
- :where(.gp-grid-container:focus) {
114
- border-color: var(--gp-grid-primary);
115
- }
116
-
117
-
118
- /* =============================================================================
119
- Header
120
- ============================================================================= */
121
-
122
- .gp-grid-header {
123
- position: sticky;
124
- top: 0;
125
- left: 0;
126
- flex-shrink: 0;
127
- z-index: 11;
128
- overflow: hidden;
129
- }
130
-
131
- :where(.gp-grid-header) {
132
- background-color: var(--gp-grid-header-bg);
133
- border-bottom: 1px solid var(--gp-grid-border);
134
- }
135
-
136
- .gp-grid-container .gp-grid-header-cell {
137
- position: absolute;
138
- box-sizing: border-box;
139
- user-select: none;
140
- display: flex;
141
- top: 0;
142
- touch-action: none;
143
- }
144
-
145
- :where(.gp-grid-header-cell) {
146
- align-items: center;
147
- padding: 0 12px;
148
- border-right: 1px solid var(--gp-grid-border);
149
- font-weight: 600;
150
- font-size: 12px;
151
- letter-spacing: 0.5px;
152
- color: var(--gp-grid-header-text);
153
- cursor: pointer;
154
- background-color: transparent;
155
- transition: background-color 0.1s ease;
156
- }
157
-
158
- :where(.gp-grid-header-cell:hover) {
159
- background-color: var(--gp-grid-hover);
160
- }
161
-
162
- :where(.gp-grid-header-cell:active) {
163
- background-color: var(--gp-grid-border-light);
164
- }
165
-
166
- .gp-grid-container .gp-grid-header-text {
167
- flex: 1;
168
- overflow: hidden;
169
- text-overflow: ellipsis;
170
- white-space: nowrap;
171
- }
172
-
173
- :where(.gp-grid-header-text) {
174
- color: var(--gp-grid-header-text);
175
- }
176
-
177
- /* Header icons container */
178
- .gp-grid-header-icons {
179
- display: flex;
180
- align-items: center;
181
- gap: 4px;
182
- margin-left: auto;
183
- }
184
-
185
- /* Stacked sort arrows */
186
- .gp-grid-sort-arrows {
187
- display: flex;
188
- flex-direction: row;
189
- align-items: center;
190
- gap: 2px;
191
- margin-left: 6px;
192
- }
193
-
194
- .gp-grid-sort-arrows-stack {
195
- display: flex;
196
- flex-direction: column;
197
- align-items: center;
198
- gap: 2px;
199
- }
200
-
201
- :where(.gp-grid-sort-arrow-up),
202
- :where(.gp-grid-sort-arrow-down) {
203
- opacity: 0.35;
204
- transition: opacity 0.15s ease, color 0.15s ease;
205
- color: var(--gp-grid-text);
206
- }
207
-
208
- :where(.gp-grid-sort-arrow-up.active),
209
- :where(.gp-grid-sort-arrow-down.active) {
210
- opacity: 1;
211
- color: var(--gp-grid-primary);
212
- }
213
-
214
- :where(.gp-grid-sort-index) {
215
- font-size: 9px;
216
- color: var(--gp-grid-primary);
217
- font-weight: 600;
218
- }
219
-
220
- /* Filter icon */
221
- .gp-grid-filter-icon {
222
- display: flex;
223
- align-items: center;
224
- justify-content: center;
225
- width: 20px;
226
- height: 20px;
227
- }
228
-
229
- :where(.gp-grid-filter-icon) {
230
- border-radius: 4px;
231
- cursor: pointer;
232
- color: var(--gp-grid-text-secondary);
233
- transition: background-color 0.15s ease, color 0.15s ease;
234
- margin-left: 2px;
235
- }
236
-
237
- :where(.gp-grid-filter-icon:hover) {
238
- background-color: var(--gp-grid-hover);
239
- color: var(--gp-grid-primary);
240
- }
241
-
242
- :where(.gp-grid-filter-icon.active) {
243
- color: var(--gp-grid-primary);
244
- background-color: var(--gp-grid-primary-light);
245
- }
246
-
247
- /* Touch device: larger tap target for filter icon */
248
- @media (pointer: coarse) and (hover: none) and (max-width: 768px) {
249
- .gp-grid-filter-icon {
250
- min-width: 44px;
251
- min-height: 44px;
252
- width: 44px;
253
- height: 44px;
254
- }
255
- :where(.gp-grid-filter-icon) {
256
- margin-left: 0;
257
- }
258
-
259
- .gp-grid-filter-icon svg {
260
- width: 20px;
261
- height: 20px;
262
- }
263
- }
264
-
265
- /* Disabled header state during data loading */
266
- .gp-grid-header--loading .gp-grid-header-cell {
267
- pointer-events: none;
268
- }
269
-
270
- :where(.gp-grid-header--loading .gp-grid-header-cell) {
271
- opacity: 0.6;
272
- cursor: default;
273
- }
274
-
275
- /* =============================================================================
276
- Column Resize
277
- ============================================================================= */
278
-
279
- .gp-grid-header-resize-handle {
280
- position: absolute;
281
- right: -3px;
282
- top: 0;
283
- width: 6px;
284
- height: 100%;
285
- cursor: col-resize;
286
- z-index: 10;
287
- touch-action: none;
288
- }
289
-
290
- :where(.gp-grid-header-resize-handle:hover),
291
- :where(.gp-grid-header-resize-handle--active) {
292
- background-color: var(--gp-grid-primary);
293
- opacity: 0.4;
294
- }
295
-
296
- /* Touch device: wider resize handle hit area */
297
- @media (pointer: coarse) and (hover: none) and (max-width: 768px) {
298
- .gp-grid-header-resize-handle {
299
- width: 24px;
300
- right: -12px;
301
- }
302
- }
303
-
304
- .gp-grid-column-resize-line {
305
- position: absolute;
306
- top: 0;
307
- width: 2px;
308
- height: 100%;
309
- z-index: 1000;
310
- pointer-events: none;
311
- }
312
-
313
- :where(.gp-grid-column-resize-line) {
314
- background-color: var(--gp-grid-primary);
315
- }
316
-
317
- /* =============================================================================
318
- Column Move
319
- ============================================================================= */
320
-
321
- .gp-grid-column-move-ghost {
322
- position: fixed;
323
- pointer-events: none;
324
- z-index: 2000;
325
- display: flex;
326
- align-items: center;
327
- box-sizing: border-box;
328
- overflow: hidden;
329
- white-space: nowrap;
330
- text-overflow: ellipsis;
331
- }
332
-
333
- :where(.gp-grid-column-move-ghost) {
334
- opacity: 0.7;
335
- background-color: var(--gp-grid-header-bg);
336
- border: 2px solid var(--gp-grid-primary);
337
- border-radius: 4px;
338
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
339
- padding: 0 12px;
340
- font-weight: 600;
341
- font-size: 12px;
342
- letter-spacing: 0.5px;
343
- color: var(--gp-grid-header-text);
344
- }
345
-
346
- .gp-grid-column-drop-indicator {
347
- position: absolute;
348
- top: 0;
349
- left: 0;
350
- width: 3px;
351
- height: 100%;
352
- z-index: 1000;
353
- pointer-events: none;
354
- }
355
-
356
- :where(.gp-grid-column-drop-indicator) {
357
- background-color: var(--gp-grid-primary);
358
- border-radius: 2px;
359
- }
360
-
361
-
362
- /* =============================================================================
363
- Data Cells
364
- ============================================================================= */
365
-
366
- /* Rows wrapper - positions rows with small translateY values for large datasets */
367
- .gp-grid-rows-wrapper {
368
- position: absolute;
369
- top: 0;
370
- left: 0;
371
- /* Keep wrapper below the sticky header (z-index: 10) */
372
- z-index: 1;
373
- will-change: transform;
374
- }
375
-
376
- .gp-grid-row {
377
- position: absolute;
378
- top: 0;
379
- left: 0;
380
- }
381
-
382
- /* Row background - :where() for zero specificity, so user highlight classes always win */
383
- :where(.gp-grid-row) {
384
- background-color: var(--gp-grid-bg);
385
- }
386
-
387
- /* Structural properties - required for grid layout */
388
- .gp-grid-cell {
389
- position: absolute;
390
- top: 0;
391
- box-sizing: border-box;
392
- display: flex;
393
- overflow: hidden;
394
- text-overflow: ellipsis;
395
- white-space: nowrap;
396
- user-select: none;
397
- -webkit-user-select: none;
398
- }
399
-
400
- /* Visual properties - :where() for zero specificity, so user highlight classes always win */
401
- :where(.gp-grid-cell) {
402
- align-items: center;
403
- padding: 0 12px;
404
- cursor: cell;
405
- color: var(--gp-grid-text);
406
- border-right: 1px solid var(--gp-grid-border-light);
407
- border-bottom: 1px solid var(--gp-grid-border-light);
408
- background-color: transparent;
409
- }
410
-
411
- /* Active cell (focused) - structural properties stay, visual use :where() */
412
- .gp-grid-cell--active {
413
- outline: none;
414
- z-index: 5;
415
- }
416
- :where(.gp-grid-cell--active) {
417
- background-color: var(--gp-grid-primary-light);
418
- border: 2px solid var(--gp-grid-primary);
419
- padding: 0 11px;
420
- }
421
-
422
- /* Selected cells (range selection) */
423
- :where(.gp-grid-cell--selected) {
424
- background-color: var(--gp-grid-primary-light);
425
- }
426
-
427
- /* Editing cell - structural properties stay, visual use :where() */
428
- .gp-grid-cell--editing {
429
- z-index: 10;
430
- }
431
- :where(.gp-grid-cell--editing) {
432
- background-color: var(--gp-grid-bg);
433
- border: 2px solid var(--gp-grid-primary);
434
- padding: 0;
435
- }
436
-
437
- /* =============================================================================
438
- Fill Handle (drag to fill)
439
- ============================================================================= */
440
-
441
- .gp-grid-fill-handle {
442
- position: absolute;
443
- width: 8px;
444
- height: 8px;
445
- z-index: 11;
446
- pointer-events: auto;
447
- box-sizing: border-box;
448
- touch-action: none;
449
- }
450
-
451
- :where(.gp-grid-fill-handle) {
452
- background-color: var(--gp-grid-primary);
453
- border: 2px solid var(--gp-grid-bg);
454
- cursor: crosshair;
455
- border-radius: 1px;
456
- }
457
-
458
- :where(.gp-grid-fill-handle:hover) {
459
- transform: scale(1.2);
460
- }
461
-
462
- @media (pointer: coarse) and (hover: none) and (max-width: 768px) {
463
- .gp-grid-fill-handle {
464
- width: 24px;
465
- height: 24px;
466
- }
467
- :where(.gp-grid-fill-handle) {
468
- border-width: 3px;
469
- border-radius: 3px;
470
- }
471
- }
472
-
473
- /* Fill preview (cells being filled) */
474
- :where(.gp-grid-cell.gp-grid-cell--fill-preview) {
475
- background-color: var(--gp-grid-primary-light);
476
- border: 1px dashed var(--gp-grid-primary);
477
- }
478
-
479
- /* =============================================================================
480
- Edit Input
481
- ============================================================================= */
482
-
483
- .gp-grid-edit-input {
484
- width: 100%;
485
- height: 100%;
486
- }
487
-
488
- :where(.gp-grid-edit-input) {
489
- padding: 0 11px;
490
- font-family: inherit;
491
- font-size: inherit;
492
- color: var(--gp-grid-text);
493
- border: none;
494
- background-color: transparent;
495
- }
496
-
497
- .gp-grid-edit-input:focus {
498
- outline: none;
499
- }
500
-
501
- /* =============================================================================
502
- Cell Peek (read-only multi-line overlay on dblclick of non-editable cell)
503
- ============================================================================= */
504
-
505
- /* Structural: positioned absolutely by the framework wrapper; must sit above
506
- selection (z:5), editing (z:10), fill handle (z:11). */
507
- .gp-grid-cell-peek {
508
- position: absolute;
509
- z-index: 20;
510
- box-sizing: border-box;
511
- overflow: auto;
512
- max-height: 320px;
513
- }
514
-
515
- :where(.gp-grid-cell-peek) {
516
- padding: 8px 11px;
517
- background-color: var(--gp-grid-bg);
518
- color: var(--gp-grid-text);
519
- border: 2px solid var(--gp-grid-primary);
520
- border-radius: 3px;
521
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
522
- font-family: inherit;
523
- font-size: inherit;
524
- line-height: 1.4;
525
- white-space: pre-wrap;
526
- overflow-wrap: anywhere;
527
- cursor: text;
528
- user-select: text;
529
- -webkit-user-select: text;
530
- }
531
-
532
-
533
-
534
- /* =============================================================================
535
- Loading & Error States
536
- ============================================================================= */
537
-
538
- /* Sticky wrapper: stays pinned at viewport top, takes no layout space */
539
- .gp-grid-loading-anchor {
540
- position: sticky;
541
- top: 0;
542
- left: 0;
543
- height: 0;
544
- z-index: 900;
545
- overflow: visible;
546
- pointer-events: none;
547
- }
548
-
549
- /* Semi-transparent overlay covering the visible viewport area */
550
- .gp-grid-loading-overlay {
551
- position: absolute;
552
- top: 0;
553
- left: 0;
554
- width: 100%;
555
- height: 100%;
556
- pointer-events: none;
557
- }
558
-
559
- :where(.gp-grid-loading-overlay) {
560
- background-color: var(--gp-grid-loading-overlay-bg, rgba(255, 255, 255, 0.4));
561
- }
562
-
563
- :where(.gp-grid-container--dark .gp-grid-loading-overlay) {
564
- background-color: var(--gp-grid-loading-overlay-bg, rgba(0, 0, 0, 0.3));
565
- }
566
-
567
- /* Loading indicator centered in the visible viewport */
568
- .gp-grid-loading {
569
- position: absolute;
570
- top: 50%;
571
- left: 50%;
572
- transform: translate(-50%, -50%);
573
- z-index: 1000;
574
- display: flex;
575
- pointer-events: auto;
576
- }
577
-
578
- :where(.gp-grid-loading) {
579
- align-items: center;
580
- padding: 12px 20px;
581
- background-color: var(--gp-grid-loading-bg);
582
- color: var(--gp-grid-loading-text);
583
- border-radius: 6px;
584
- border: 1px solid var(--gp-grid-border);
585
- font-weight: 500;
586
- font-size: 13px;
587
- gap: 10px;
588
- }
589
-
590
- .gp-grid-loading-spinner {
591
- width: 16px;
592
- height: 16px;
593
- animation: gp-grid-spin 0.7s linear infinite;
594
- }
595
-
596
- :where(.gp-grid-loading-spinner) {
597
- border: 2px solid var(--gp-grid-border);
598
- border-top-color: var(--gp-grid-primary);
599
- border-radius: 50%;
600
- }
601
-
602
- @keyframes gp-grid-spin {
603
- to {
604
- transform: rotate(360deg);
605
- }
606
- }
607
-
608
- .gp-grid-error {
609
- position: absolute;
610
- top: 50%;
611
- left: 50%;
612
- transform: translate(-50%, -50%);
613
- z-index: 1000;
614
- user-select: text;
615
- -webkit-user-select: text;
616
- }
617
-
618
- :where(.gp-grid-error) {
619
- padding: 12px 20px;
620
- background-color: var(--gp-grid-error-bg);
621
- color: var(--gp-grid-error-text);
622
- border-radius: 6px;
623
- border: 1px solid var(--gp-grid-error-text);
624
- font-weight: 500;
625
- font-size: 13px;
626
- max-width: 80%;
627
- text-align: center;
628
- cursor: text;
629
- }
630
-
631
- /* =============================================================================
632
- Empty State
633
- ============================================================================= */
634
-
635
- .gp-grid-empty {
636
- position: absolute;
637
- top: 50%;
638
- left: 50%;
639
- transform: translate(-50%, -50%);
640
- }
641
-
642
- :where(.gp-grid-empty) {
643
- color: var(--gp-grid-text-muted);
644
- font-size: 14px;
645
- text-align: center;
646
- }
647
-
648
-
649
- /* =============================================================================
650
- Scrollbar Styling
651
- ============================================================================= */
652
-
653
- .gp-grid-container::-webkit-scrollbar {
654
- width: 8px;
655
- height: 8px;
656
- }
657
-
658
- :where(.gp-grid-container)::-webkit-scrollbar-track {
659
- background-color: var(--gp-grid-scrollbar-track);
660
- }
661
-
662
- :where(.gp-grid-container)::-webkit-scrollbar-thumb {
663
- background-color: var(--gp-grid-scrollbar-thumb);
664
- border-radius: 4px;
665
- }
666
-
667
- :where(.gp-grid-container)::-webkit-scrollbar-thumb:hover {
668
- background-color: var(--gp-grid-scrollbar-thumb-hover);
669
- }
670
-
671
- :where(.gp-grid-container)::-webkit-scrollbar-corner {
672
- background-color: var(--gp-grid-scrollbar-track);
673
- }
674
-
675
-
676
- /* =============================================================================
677
- Filter Popup
678
- ============================================================================= */
679
-
680
- .gp-grid-filter-popup {
681
- max-height: 400px;
682
- max-width: min(360px, calc(100vw - 16px));
683
- display: flex;
684
- flex-direction: column;
685
- }
686
-
687
- :where(.gp-grid-filter-popup) {
688
- background-color: var(--gp-grid-bg);
689
- border: 1px solid var(--gp-grid-border);
690
- border-radius: 6px;
691
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
692
- font-size: 13px;
693
- }
694
-
695
- :where(.gp-grid-filter-header) {
696
- padding: 10px 12px;
697
- font-weight: 600;
698
- border-bottom: 1px solid var(--gp-grid-border-light);
699
- color: var(--gp-grid-header-text);
700
- }
701
-
702
- .gp-grid-filter-content {
703
- display: flex;
704
- flex-direction: column;
705
- overflow-y: auto;
706
- min-height: 0;
707
- }
708
-
709
- :where(.gp-grid-filter-content) {
710
- padding: 10px 12px;
711
- gap: 10px;
712
- }
713
-
714
- /* Mode toggle (Values / Condition) */
715
- .gp-grid-filter-mode-toggle {
716
- display: flex;
717
- }
718
-
719
- :where(.gp-grid-filter-mode-toggle) {
720
- gap: 4px;
721
- background-color: var(--gp-grid-bg-alt);
722
- border-radius: 4px;
723
- padding: 2px;
724
- }
725
-
726
- .gp-grid-filter-mode-toggle button {
727
- flex: 1;
728
- }
729
-
730
- :where(.gp-grid-filter-mode-toggle button) {
731
- padding: 6px 10px;
732
- font-size: 11px;
733
- font-family: inherit;
734
- border: none;
735
- border-radius: 3px;
736
- background-color: transparent;
737
- color: var(--gp-grid-text-secondary);
738
- cursor: pointer;
739
- transition: background-color 0.15s ease, color 0.15s ease;
740
- }
741
-
742
- :where(.gp-grid-filter-mode-toggle button:hover) {
743
- color: var(--gp-grid-text);
744
- }
745
-
746
- :where(.gp-grid-filter-mode-toggle button.active) {
747
- background-color: var(--gp-grid-bg);
748
- color: var(--gp-grid-text);
749
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
750
- }
751
-
752
- /* Info message for too many values */
753
- :where(.gp-grid-filter-info) {
754
- font-size: 11px;
755
- color: var(--gp-grid-text-secondary);
756
- padding: 6px 8px;
757
- background-color: var(--gp-grid-bg-alt);
758
- border-radius: 4px;
759
- }
760
-
761
- /* Search input in filter */
762
- .gp-grid-filter-search {
763
- width: 100%;
764
- height: 30px;
765
- box-sizing: border-box;
766
- }
767
-
768
- :where(.gp-grid-filter-search) {
769
- padding: 0 10px;
770
- font-family: inherit;
771
- font-size: 12px;
772
- border: 1px solid var(--gp-grid-input-border);
773
- border-radius: 4px;
774
- background-color: var(--gp-grid-input-bg);
775
- color: var(--gp-grid-text);
776
- }
777
-
778
- :where(.gp-grid-filter-search:focus) {
779
- outline: none;
780
- border-color: var(--gp-grid-primary);
781
- }
782
-
783
- /* Select All / Deselect All actions */
784
- .gp-grid-filter-actions {
785
- display: flex;
786
- }
787
-
788
- :where(.gp-grid-filter-actions) {
789
- gap: 8px;
790
- }
791
-
792
- .gp-grid-filter-actions button {
793
- flex: 1;
794
- }
795
-
796
- :where(.gp-grid-filter-actions button) {
797
- padding: 4px 8px;
798
- font-size: 11px;
799
- font-family: inherit;
800
- border: 1px solid var(--gp-grid-input-border);
801
- border-radius: 3px;
802
- background-color: var(--gp-grid-bg);
803
- color: var(--gp-grid-text);
804
- cursor: pointer;
805
- }
806
-
807
- :where(.gp-grid-filter-actions button:hover:not(:disabled)) {
808
- background-color: var(--gp-grid-hover);
809
- }
810
-
811
- :where(.gp-grid-filter-actions button:disabled) {
812
- opacity: 0.5;
813
- cursor: not-allowed;
814
- }
815
-
816
- /* Checkbox list */
817
- .gp-grid-filter-list {
818
- max-height: 200px;
819
- overflow-y: auto;
820
- display: flex;
821
- flex-direction: column;
822
- }
823
-
824
- :where(.gp-grid-filter-list) {
825
- gap: 4px;
826
- border: 1px solid var(--gp-grid-border-light);
827
- border-radius: 4px;
828
- padding: 6px;
829
- }
830
-
831
- .gp-grid-filter-option {
832
- display: flex;
833
- align-items: center;
834
- }
835
-
836
- :where(.gp-grid-filter-option) {
837
- gap: 8px;
838
- padding: 4px 6px;
839
- border-radius: 3px;
840
- cursor: pointer;
841
- }
842
-
843
- :where(.gp-grid-filter-option:hover) {
844
- background-color: var(--gp-grid-hover);
845
- }
846
-
847
- .gp-grid-filter-option input[type="checkbox"] {
848
- margin: 0;
849
- }
850
-
851
- :where(.gp-grid-filter-option input[type="checkbox"]) {
852
- cursor: pointer;
853
- }
854
-
855
- .gp-grid-filter-option span {
856
- flex: 1;
857
- overflow: hidden;
858
- text-overflow: ellipsis;
859
- white-space: nowrap;
860
- }
861
-
862
- :where(.gp-grid-filter-blank) {
863
- font-style: italic;
864
- color: var(--gp-grid-text-muted);
865
- }
866
-
867
- /* Filter condition row (for number/date filters) */
868
- .gp-grid-filter-condition {
869
- display: flex;
870
- flex-direction: column;
871
- }
872
-
873
- :where(.gp-grid-filter-condition) {
874
- gap: 6px;
875
- }
876
-
877
- .gp-grid-filter-row {
878
- display: flex;
879
- align-items: center;
880
- }
881
-
882
- :where(.gp-grid-filter-row) {
883
- gap: 6px;
884
- }
885
-
886
- .gp-grid-filter-row select {
887
- height: 30px;
888
- }
889
-
890
- :where(.gp-grid-filter-row select) {
891
- padding: 0 6px;
892
- font-family: inherit;
893
- font-size: 12px;
894
- border: 1px solid var(--gp-grid-input-border);
895
- border-radius: 4px;
896
- background-color: var(--gp-grid-input-bg);
897
- color: var(--gp-grid-text);
898
- cursor: pointer;
899
- }
900
-
901
- .gp-grid-filter-row input[type="number"],
902
- .gp-grid-filter-row input[type="date"],
903
- .gp-grid-filter-row input[type="text"],
904
- .gp-grid-filter-text-input {
905
- flex: 1;
906
- height: 30px;
907
- min-width: 0;
908
- box-sizing: border-box;
909
- }
910
-
911
- :where(.gp-grid-filter-row input[type="number"]),
912
- :where(.gp-grid-filter-row input[type="date"]),
913
- :where(.gp-grid-filter-row input[type="text"]),
914
- :where(.gp-grid-filter-text-input) {
915
- padding: 0 8px;
916
- font-family: inherit;
917
- font-size: 12px;
918
- border: 1px solid var(--gp-grid-input-border);
919
- border-radius: 4px;
920
- background-color: var(--gp-grid-input-bg);
921
- color: var(--gp-grid-text);
922
- }
923
-
924
- :where(.gp-grid-filter-row input:focus) {
925
- outline: none;
926
- border-color: var(--gp-grid-primary);
927
- }
928
-
929
- :where(.gp-grid-filter-to) {
930
- font-size: 11px;
931
- color: var(--gp-grid-text-secondary);
932
- }
933
-
934
- .gp-grid-filter-remove {
935
- width: 24px;
936
- height: 24px;
937
- }
938
-
939
- :where(.gp-grid-filter-remove) {
940
- padding: 0;
941
- font-size: 16px;
942
- line-height: 1;
943
- border: none;
944
- border-radius: 3px;
945
- background-color: transparent;
946
- color: var(--gp-grid-text-muted);
947
- cursor: pointer;
948
- }
949
-
950
- :where(.gp-grid-filter-remove:hover) {
951
- background-color: var(--gp-grid-error-bg);
952
- color: var(--gp-grid-error-text);
953
- }
954
-
955
- /* AND/OR combination toggle */
956
- .gp-grid-filter-combination {
957
- display: flex;
958
- }
959
-
960
- :where(.gp-grid-filter-combination) {
961
- gap: 4px;
962
- margin-bottom: 4px;
963
- }
964
-
965
- .gp-grid-filter-combination button {
966
- flex: 1;
967
- }
968
-
969
- :where(.gp-grid-filter-combination button) {
970
- padding: 4px 8px;
971
- font-size: 10px;
972
- font-family: inherit;
973
- border: 1px solid var(--gp-grid-input-border);
974
- border-radius: 3px;
975
- background-color: var(--gp-grid-bg);
976
- color: var(--gp-grid-text-secondary);
977
- cursor: pointer;
978
- }
979
-
980
- :where(.gp-grid-filter-combination button.active) {
981
- background-color: var(--gp-grid-primary);
982
- border-color: var(--gp-grid-primary);
983
- color: #fff;
984
- }
985
-
986
- /* Add condition button */
987
- .gp-grid-filter-add {
988
- width: 100%;
989
- }
990
-
991
- :where(.gp-grid-filter-add) {
992
- padding: 6px;
993
- font-size: 11px;
994
- font-family: inherit;
995
- border: 1px dashed var(--gp-grid-border);
996
- border-radius: 4px;
997
- background-color: transparent;
998
- color: var(--gp-grid-text-secondary);
999
- cursor: pointer;
1000
- }
1001
-
1002
- :where(.gp-grid-filter-add:hover) {
1003
- background-color: var(--gp-grid-hover);
1004
- border-color: var(--gp-grid-primary);
1005
- color: var(--gp-grid-primary);
1006
- }
1007
-
1008
- /* Apply / Clear buttons */
1009
- .gp-grid-filter-buttons {
1010
- display: flex;
1011
- }
1012
-
1013
- :where(.gp-grid-filter-buttons) {
1014
- gap: 8px;
1015
- padding-top: 8px;
1016
- border-top: 1px solid var(--gp-grid-border-light);
1017
- }
1018
-
1019
- .gp-grid-filter-btn-clear,
1020
- .gp-grid-filter-btn-apply {
1021
- flex: 1;
1022
- }
1023
-
1024
- :where(.gp-grid-filter-btn-clear),
1025
- :where(.gp-grid-filter-btn-apply) {
1026
- padding: 8px 12px;
1027
- font-size: 12px;
1028
- font-family: inherit;
1029
- border-radius: 4px;
1030
- cursor: pointer;
1031
- }
1032
-
1033
- :where(.gp-grid-filter-btn-clear) {
1034
- border: 1px solid var(--gp-grid-input-border);
1035
- background-color: var(--gp-grid-bg);
1036
- color: var(--gp-grid-text);
1037
- }
1038
-
1039
- :where(.gp-grid-filter-btn-clear:hover) {
1040
- background-color: var(--gp-grid-hover);
1041
- }
1042
-
1043
- :where(.gp-grid-filter-btn-apply) {
1044
- border: 1px solid var(--gp-grid-primary);
1045
- background-color: var(--gp-grid-primary);
1046
- color: #fff;
1047
- }
1048
-
1049
- :where(.gp-grid-filter-btn-apply:hover) {
1050
- opacity: 0.9;
1051
- }
1052
-
1053
-
1054
- /* =============================================================================
1055
- Row Drag
1056
- ============================================================================= */
1057
-
1058
- .gp-grid-cell--row-drag-handle {
1059
- touch-action: none;
1060
- }
1061
-
1062
- :where(.gp-grid-cell--row-drag-handle) {
1063
- cursor: grab;
1064
- }
1065
-
1066
- :where(.gp-grid-cell--row-drag-handle:active) {
1067
- cursor: grabbing;
1068
- }
1069
-
1070
- .gp-grid-row-drag-icon {
1071
- display: flex;
1072
- align-items: center;
1073
- justify-content: center;
1074
- width: 100%;
1075
- height: 100%;
1076
- }
1077
-
1078
- :where(.gp-grid-row-drag-icon) {
1079
- color: var(--gp-grid-text-secondary);
1080
- }
1081
-
1082
- .gp-grid-row-drag-icon svg {
1083
- width: 16px;
1084
- height: 16px;
1085
- }
1086
-
1087
- .gp-grid-row-drag-ghost {
1088
- position: fixed;
1089
- pointer-events: none;
1090
- z-index: 2000;
1091
- overflow: hidden;
1092
- box-sizing: border-box;
1093
- }
1094
-
1095
- :where(.gp-grid-row-drag-ghost) {
1096
- opacity: 0.8;
1097
- background-color: var(--gp-grid-bg, #fff);
1098
- border: 2px solid var(--gp-grid-primary);
1099
- border-radius: 4px;
1100
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1101
- }
1102
-
1103
- .gp-grid-row-drop-indicator {
1104
- position: absolute;
1105
- left: 0;
1106
- width: 100%;
1107
- height: 3px;
1108
- z-index: 1000;
1109
- pointer-events: none;
1110
- }
1111
-
1112
- :where(.gp-grid-row-drop-indicator) {
1113
- background-color: var(--gp-grid-primary);
1114
- border-radius: 2px;
1115
- }
1
+ .gp-grid-container{--gp-grid-bg:#fff;--gp-grid-bg-alt:#f8f9fa;--gp-grid-text:#212529;--gp-grid-text-secondary:#6c757d;--gp-grid-text-muted:#adb5bd;--gp-grid-border:#dee2e6;--gp-grid-border-light:#e9ecef;--gp-grid-header-bg:#f1f3f5;--gp-grid-header-text:#212529;--gp-grid-header-z-index:10;--gp-grid-primary:#228be6;--gp-grid-primary-light:#e7f5ff;--gp-grid-primary-border:#74c0fc;--gp-grid-hover:#f1f3f5;--gp-grid-filter-bg:#f8f9fa;--gp-grid-input-bg:#fff;--gp-grid-input-border:#ced4da;--gp-grid-error-bg:#fff5f5;--gp-grid-error-text:#c92a2a;--gp-grid-loading-bg:#fffffff2;--gp-grid-loading-text:#495057;--gp-grid-scrollbar-track:#f1f3f5;--gp-grid-scrollbar-thumb:#ced4da;--gp-grid-scrollbar-thumb-hover:#adb5bd}.gp-grid-container--dark{--gp-grid-bg:#1a1b1e;--gp-grid-bg-alt:#25262b;--gp-grid-text:#c1c2c5;--gp-grid-text-secondary:#909296;--gp-grid-text-muted:#5c5f66;--gp-grid-border:#373a40;--gp-grid-border-light:#2c2e33;--gp-grid-header-bg:#25262b;--gp-grid-header-text:#c1c2c5;--gp-grid-header-z-index:10;--gp-grid-primary:#339af0;--gp-grid-primary-light:#1c3d5a;--gp-grid-primary-border:#1c7ed6;--gp-grid-hover:#2c2e33;--gp-grid-filter-bg:#25262b;--gp-grid-input-bg:#1a1b1e;--gp-grid-input-border:#373a40;--gp-grid-error-bg:#2c1a1a;--gp-grid-error-text:#ff6b6b;--gp-grid-loading-bg:#1a1b1ef2;--gp-grid-loading-text:#c1c2c5;--gp-grid-scrollbar-track:#25262b;--gp-grid-scrollbar-thumb:#373a40;--gp-grid-scrollbar-thumb-hover:#4a4d52}.gp-grid-container{-webkit-user-select:none;user-select:none;outline:none}:where(.gp-grid-container){color:var(--gp-grid-text);background-color:var(--gp-grid-bg);border:1px solid var(--gp-grid-border);border-radius:6px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:13px;line-height:1.5}.gp-grid-container:focus{outline:none}:where(.gp-grid-container:focus){border-color:var(--gp-grid-primary)}.gp-grid-header{z-index:11;flex-shrink:0;position:sticky;top:0;left:0;overflow:hidden}:where(.gp-grid-header){background-color:var(--gp-grid-header-bg);border-bottom:1px solid var(--gp-grid-border)}.gp-grid-container .gp-grid-header-cell{box-sizing:border-box;user-select:none;touch-action:none;display:flex;position:absolute;top:0}:where(.gp-grid-header-cell){border-right:1px solid var(--gp-grid-border);letter-spacing:.5px;color:var(--gp-grid-header-text);cursor:pointer;background-color:#0000;align-items:center;padding:0 12px;font-size:12px;font-weight:600;transition:background-color .1s}:where(.gp-grid-header-cell:hover){background-color:var(--gp-grid-hover)}:where(.gp-grid-header-cell:active){background-color:var(--gp-grid-border-light)}.gp-grid-container .gp-grid-header-text{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}:where(.gp-grid-header-text){color:var(--gp-grid-header-text)}.gp-grid-header-icons{align-items:center;gap:4px;margin-left:auto;display:flex}.gp-grid-sort-arrows{flex-direction:row;align-items:center;gap:2px;margin-left:6px;display:flex}.gp-grid-sort-arrows-stack{flex-direction:column;align-items:center;gap:2px;display:flex}:where(.gp-grid-sort-arrow-up),:where(.gp-grid-sort-arrow-down){opacity:.35;color:var(--gp-grid-text);transition:opacity .15s,color .15s}:where(.gp-grid-sort-arrow-up.active),:where(.gp-grid-sort-arrow-down.active){opacity:1;color:var(--gp-grid-primary)}:where(.gp-grid-sort-index){color:var(--gp-grid-primary);font-size:9px;font-weight:600}.gp-grid-filter-icon{justify-content:center;align-items:center;width:20px;height:20px;display:flex}:where(.gp-grid-filter-icon){cursor:pointer;color:var(--gp-grid-text-secondary);border-radius:4px;margin-left:2px;transition:background-color .15s,color .15s}:where(.gp-grid-filter-icon:hover){background-color:var(--gp-grid-hover);color:var(--gp-grid-primary)}:where(.gp-grid-filter-icon.active){color:var(--gp-grid-primary);background-color:var(--gp-grid-primary-light)}@media (pointer:coarse) and (hover:none) and (width<=768px){.gp-grid-filter-icon{width:44px;min-width:44px;height:44px;min-height:44px}:where(.gp-grid-filter-icon){margin-left:0}.gp-grid-filter-icon svg{width:20px;height:20px}}.gp-grid-header--loading .gp-grid-header-cell{pointer-events:none}:where(.gp-grid-header--loading .gp-grid-header-cell){opacity:.6;cursor:default}.gp-grid-header-resize-handle{cursor:col-resize;z-index:10;touch-action:none;width:6px;height:100%;position:absolute;top:0;right:-3px}:where(.gp-grid-header-resize-handle:hover),:where(.gp-grid-header-resize-handle--active){background-color:var(--gp-grid-primary);opacity:.4}@media (pointer:coarse) and (hover:none) and (width<=768px){.gp-grid-header-resize-handle{width:24px;right:-12px}}.gp-grid-column-resize-line{z-index:1000;pointer-events:none;width:2px;height:100%;position:absolute;top:0}:where(.gp-grid-column-resize-line){background-color:var(--gp-grid-primary)}.gp-grid-column-move-ghost{pointer-events:none;z-index:2000;box-sizing:border-box;white-space:nowrap;text-overflow:ellipsis;align-items:center;display:flex;position:fixed;overflow:hidden}:where(.gp-grid-column-move-ghost){opacity:.7;background-color:var(--gp-grid-header-bg);border:2px solid var(--gp-grid-primary);letter-spacing:.5px;color:var(--gp-grid-header-text);border-radius:4px;padding:0 12px;font-size:12px;font-weight:600;box-shadow:0 4px 12px #00000026}.gp-grid-column-drop-indicator{z-index:1000;pointer-events:none;width:3px;height:100%;position:absolute;top:0;left:0}:where(.gp-grid-column-drop-indicator){background-color:var(--gp-grid-primary);border-radius:2px}.gp-grid-rows-wrapper{z-index:1;will-change:transform;position:absolute;top:0;left:0}.gp-grid-row{position:absolute;top:0;left:0}:where(.gp-grid-row){background-color:var(--gp-grid-bg)}.gp-grid-cell{box-sizing:border-box;white-space:nowrap;-webkit-user-select:none;user-select:none;display:flex;position:absolute;top:0;overflow:hidden}.gp-grid-cell-content{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.gp-grid-cell--wrap{align-items:flex-start}.gp-grid-cell--wrap .gp-grid-cell-content{white-space:normal;overflow-wrap:anywhere;text-overflow:clip}:where(.gp-grid-cell){cursor:cell;color:var(--gp-grid-text);border-right:1px solid var(--gp-grid-border-light);border-bottom:1px solid var(--gp-grid-border-light);background-color:#0000;align-items:center;padding:0 12px}.gp-grid-cell--active{z-index:5;outline:none}:where(.gp-grid-cell--active){background-color:var(--gp-grid-primary-light);border:2px solid var(--gp-grid-primary);padding:0 11px}:where(.gp-grid-cell--selected){background-color:var(--gp-grid-primary-light)}.gp-grid-cell--editing{z-index:10}:where(.gp-grid-cell--editing){background-color:var(--gp-grid-bg);border:2px solid var(--gp-grid-primary);padding:0}.gp-grid-fill-handle{z-index:11;pointer-events:auto;box-sizing:border-box;touch-action:none;width:8px;height:8px;position:absolute}:where(.gp-grid-fill-handle){background-color:var(--gp-grid-primary);border:2px solid var(--gp-grid-bg);cursor:crosshair;border-radius:1px}:where(.gp-grid-fill-handle:hover){transform:scale(1.2)}@media (pointer:coarse) and (hover:none) and (width<=768px){.gp-grid-fill-handle{width:24px;height:24px}:where(.gp-grid-fill-handle){border-width:3px;border-radius:3px}}:where(.gp-grid-cell.gp-grid-cell--fill-preview){background-color:var(--gp-grid-primary-light);border:1px dashed var(--gp-grid-primary)}.gp-grid-edit-input{width:100%;height:100%}:where(.gp-grid-edit-input){font-family:inherit;font-size:inherit;color:var(--gp-grid-text);background-color:#0000;border:none;padding:0 11px}.gp-grid-edit-input:focus{outline:none}.gp-grid-cell-peek{z-index:20;box-sizing:border-box;max-height:320px;position:absolute;overflow:auto}:where(.gp-grid-cell-peek){background-color:var(--gp-grid-bg);color:var(--gp-grid-text);border:2px solid var(--gp-grid-primary);font-family:inherit;font-size:inherit;white-space:pre-wrap;overflow-wrap:anywhere;cursor:text;-webkit-user-select:text;user-select:text;border-radius:3px;padding:8px 11px;line-height:1.4;box-shadow:0 4px 12px #00000026}.gp-grid-cell-peek .gp-grid-cell-content{white-space:inherit;text-overflow:clip;overflow:visible}.gp-grid-loading-anchor{z-index:900;pointer-events:none;height:0;position:sticky;top:0;left:0;overflow:visible}.gp-grid-loading-overlay{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}:where(.gp-grid-loading-overlay){background-color:var(--gp-grid-loading-overlay-bg,#fff6)}:where(.gp-grid-container--dark .gp-grid-loading-overlay){background-color:var(--gp-grid-loading-overlay-bg,#0000004d)}.gp-grid-loading{z-index:1000;pointer-events:auto;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}:where(.gp-grid-loading){background-color:var(--gp-grid-loading-bg);color:var(--gp-grid-loading-text);border:1px solid var(--gp-grid-border);border-radius:6px;align-items:center;gap:10px;padding:12px 20px;font-size:13px;font-weight:500}.gp-grid-loading-spinner{width:16px;height:16px;animation:.7s linear infinite gp-grid-spin}:where(.gp-grid-loading-spinner){border:2px solid var(--gp-grid-border);border-top-color:var(--gp-grid-primary);border-radius:50%}@keyframes gp-grid-spin{to{transform:rotate(360deg)}}.gp-grid-error{z-index:1000;-webkit-user-select:text;user-select:text;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}:where(.gp-grid-error){background-color:var(--gp-grid-error-bg);color:var(--gp-grid-error-text);border:1px solid var(--gp-grid-error-text);text-align:center;cursor:text;border-radius:6px;max-width:80%;padding:12px 20px;font-size:13px;font-weight:500}.gp-grid-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}:where(.gp-grid-empty){color:var(--gp-grid-text-muted);text-align:center;font-size:14px}.gp-grid-container::-webkit-scrollbar{width:8px;height:8px}:where(.gp-grid-container)::-webkit-scrollbar-track{background-color:var(--gp-grid-scrollbar-track)}:where(.gp-grid-container)::-webkit-scrollbar-thumb{background-color:var(--gp-grid-scrollbar-thumb);border-radius:4px}:where(.gp-grid-container)::-webkit-scrollbar-thumb:hover{background-color:var(--gp-grid-scrollbar-thumb-hover)}:where(.gp-grid-container)::-webkit-scrollbar-corner{background-color:var(--gp-grid-scrollbar-track)}.gp-grid-filter-popup{flex-direction:column;max-width:min(360px,100vw - 16px);max-height:400px;display:flex}:where(.gp-grid-filter-popup){background-color:var(--gp-grid-bg);border:1px solid var(--gp-grid-border);border-radius:6px;font-size:13px;box-shadow:0 4px 12px #00000026}:where(.gp-grid-filter-header){border-bottom:1px solid var(--gp-grid-border-light);color:var(--gp-grid-header-text);padding:10px 12px;font-weight:600}.gp-grid-filter-content{flex-direction:column;min-height:0;display:flex;overflow-y:auto}:where(.gp-grid-filter-content){gap:10px;padding:10px 12px}.gp-grid-filter-mode-toggle{display:flex}:where(.gp-grid-filter-mode-toggle){background-color:var(--gp-grid-bg-alt);border-radius:4px;gap:4px;padding:2px}.gp-grid-filter-mode-toggle button{flex:1}:where(.gp-grid-filter-mode-toggle button){color:var(--gp-grid-text-secondary);cursor:pointer;background-color:#0000;border:none;border-radius:3px;padding:6px 10px;font-family:inherit;font-size:11px;transition:background-color .15s,color .15s}:where(.gp-grid-filter-mode-toggle button:hover){color:var(--gp-grid-text)}:where(.gp-grid-filter-mode-toggle button.active){background-color:var(--gp-grid-bg);color:var(--gp-grid-text);box-shadow:0 1px 2px #0000001a}:where(.gp-grid-filter-info){color:var(--gp-grid-text-secondary);background-color:var(--gp-grid-bg-alt);border-radius:4px;padding:6px 8px;font-size:11px}.gp-grid-filter-search{box-sizing:border-box;width:100%;height:30px}:where(.gp-grid-filter-search){border:1px solid var(--gp-grid-input-border);background-color:var(--gp-grid-input-bg);color:var(--gp-grid-text);border-radius:4px;padding:0 10px;font-family:inherit;font-size:12px}:where(.gp-grid-filter-search:focus){border-color:var(--gp-grid-primary);outline:none}.gp-grid-filter-actions{display:flex}:where(.gp-grid-filter-actions){gap:8px}.gp-grid-filter-actions button{flex:1}:where(.gp-grid-filter-actions button){border:1px solid var(--gp-grid-input-border);background-color:var(--gp-grid-bg);color:var(--gp-grid-text);cursor:pointer;border-radius:3px;padding:4px 8px;font-family:inherit;font-size:11px}:where(.gp-grid-filter-actions button:hover:not(:disabled)){background-color:var(--gp-grid-hover)}:where(.gp-grid-filter-actions button:disabled){opacity:.5;cursor:not-allowed}.gp-grid-filter-list{flex-direction:column;max-height:200px;display:flex;overflow-y:auto}:where(.gp-grid-filter-list){border:1px solid var(--gp-grid-border-light);border-radius:4px;gap:4px;padding:6px}.gp-grid-filter-option{align-items:center;display:flex}:where(.gp-grid-filter-option){cursor:pointer;border-radius:3px;gap:8px;padding:4px 6px}:where(.gp-grid-filter-option:hover){background-color:var(--gp-grid-hover)}.gp-grid-filter-option input[type=checkbox]{margin:0}:where(.gp-grid-filter-option input[type=checkbox]){cursor:pointer}.gp-grid-filter-option span{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}:where(.gp-grid-filter-blank){color:var(--gp-grid-text-muted);font-style:italic}.gp-grid-filter-condition{flex-direction:column;display:flex}:where(.gp-grid-filter-condition){gap:6px}.gp-grid-filter-row{align-items:center;display:flex}:where(.gp-grid-filter-row){gap:6px}.gp-grid-filter-row select{height:30px}:where(.gp-grid-filter-row select){border:1px solid var(--gp-grid-input-border);background-color:var(--gp-grid-input-bg);color:var(--gp-grid-text);cursor:pointer;border-radius:4px;padding:0 6px;font-family:inherit;font-size:12px}.gp-grid-filter-row input[type=number],.gp-grid-filter-row input[type=date],.gp-grid-filter-row input[type=text],.gp-grid-filter-text-input{box-sizing:border-box;flex:1;min-width:0;height:30px}:where(.gp-grid-filter-row input[type=number]),:where(.gp-grid-filter-row input[type=date]),:where(.gp-grid-filter-row input[type=text]),:where(.gp-grid-filter-text-input){border:1px solid var(--gp-grid-input-border);background-color:var(--gp-grid-input-bg);color:var(--gp-grid-text);border-radius:4px;padding:0 8px;font-family:inherit;font-size:12px}:where(.gp-grid-filter-row input:focus){border-color:var(--gp-grid-primary);outline:none}:where(.gp-grid-filter-to){color:var(--gp-grid-text-secondary);font-size:11px}.gp-grid-filter-remove{width:24px;height:24px}:where(.gp-grid-filter-remove){color:var(--gp-grid-text-muted);cursor:pointer;background-color:#0000;border:none;border-radius:3px;padding:0;font-size:16px;line-height:1}:where(.gp-grid-filter-remove:hover){background-color:var(--gp-grid-error-bg);color:var(--gp-grid-error-text)}.gp-grid-filter-combination{display:flex}:where(.gp-grid-filter-combination){gap:4px;margin-bottom:4px}.gp-grid-filter-combination button{flex:1}:where(.gp-grid-filter-combination button){border:1px solid var(--gp-grid-input-border);background-color:var(--gp-grid-bg);color:var(--gp-grid-text-secondary);cursor:pointer;border-radius:3px;padding:4px 8px;font-family:inherit;font-size:10px}:where(.gp-grid-filter-combination button.active){background-color:var(--gp-grid-primary);border-color:var(--gp-grid-primary);color:#fff}.gp-grid-filter-add{width:100%}:where(.gp-grid-filter-add){border:1px dashed var(--gp-grid-border);color:var(--gp-grid-text-secondary);cursor:pointer;background-color:#0000;border-radius:4px;padding:6px;font-family:inherit;font-size:11px}:where(.gp-grid-filter-add:hover){background-color:var(--gp-grid-hover);border-color:var(--gp-grid-primary);color:var(--gp-grid-primary)}.gp-grid-filter-buttons{display:flex}:where(.gp-grid-filter-buttons){border-top:1px solid var(--gp-grid-border-light);gap:8px;padding-top:8px}.gp-grid-filter-btn-clear,.gp-grid-filter-btn-apply{flex:1}:where(.gp-grid-filter-btn-clear),:where(.gp-grid-filter-btn-apply){cursor:pointer;border-radius:4px;padding:8px 12px;font-family:inherit;font-size:12px}:where(.gp-grid-filter-btn-clear){border:1px solid var(--gp-grid-input-border);background-color:var(--gp-grid-bg);color:var(--gp-grid-text)}:where(.gp-grid-filter-btn-clear:hover){background-color:var(--gp-grid-hover)}:where(.gp-grid-filter-btn-apply){border:1px solid var(--gp-grid-primary);background-color:var(--gp-grid-primary);color:#fff}:where(.gp-grid-filter-btn-apply:hover){opacity:.9}.gp-grid-cell--row-drag-handle{touch-action:none}:where(.gp-grid-cell--row-drag-handle){cursor:grab}:where(.gp-grid-cell--row-drag-handle:active){cursor:grabbing}.gp-grid-row-drag-icon{justify-content:center;align-items:center;width:100%;height:100%;display:flex}:where(.gp-grid-row-drag-icon){color:var(--gp-grid-text-secondary)}.gp-grid-row-drag-icon svg{width:16px;height:16px}.gp-grid-row-drag-ghost{pointer-events:none;z-index:2000;box-sizing:border-box;position:fixed;overflow:hidden}:where(.gp-grid-row-drag-ghost){opacity:.8;background-color:var(--gp-grid-bg,#fff);border:2px solid var(--gp-grid-primary);border-radius:4px;box-shadow:0 4px 12px #00000026}.gp-grid-row-drop-indicator{z-index:1000;pointer-events:none;width:100%;height:3px;position:absolute;left:0}:where(.gp-grid-row-drop-indicator){background-color:var(--gp-grid-primary);border-radius:2px}