@gp-grid/react 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/styles.css +1 -1137
  2. package/package.json +2 -2
package/dist/styles.css CHANGED
@@ -1,1137 +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
- white-space: nowrap;
395
- user-select: none;
396
- -webkit-user-select: none;
397
- }
398
-
399
- /* Default cell content wrapper - the framework adapters wrap plain-text values
400
- in this element so text-overflow can apply (it has no effect on the flex
401
- container itself, which previously caused long text to hard-clip). */
402
- .gp-grid-cell-content {
403
- min-width: 0;
404
- flex: 1 1 auto;
405
- overflow: hidden;
406
- text-overflow: ellipsis;
407
- white-space: nowrap;
408
- }
409
-
410
- /* Wrapped cell content - ColumnDefinition.wrapText: true.
411
- Text flows onto additional lines and is clipped to the fixed row height. */
412
- .gp-grid-cell--wrap {
413
- align-items: flex-start;
414
- }
415
-
416
- .gp-grid-cell--wrap .gp-grid-cell-content {
417
- white-space: normal;
418
- overflow-wrap: anywhere;
419
- text-overflow: clip;
420
- }
421
-
422
- /* Visual properties - :where() for zero specificity, so user highlight classes always win */
423
- :where(.gp-grid-cell) {
424
- align-items: center;
425
- padding: 0 12px;
426
- cursor: cell;
427
- color: var(--gp-grid-text);
428
- border-right: 1px solid var(--gp-grid-border-light);
429
- border-bottom: 1px solid var(--gp-grid-border-light);
430
- background-color: transparent;
431
- }
432
-
433
- /* Active cell (focused) - structural properties stay, visual use :where() */
434
- .gp-grid-cell--active {
435
- outline: none;
436
- z-index: 5;
437
- }
438
- :where(.gp-grid-cell--active) {
439
- background-color: var(--gp-grid-primary-light);
440
- border: 2px solid var(--gp-grid-primary);
441
- padding: 0 11px;
442
- }
443
-
444
- /* Selected cells (range selection) */
445
- :where(.gp-grid-cell--selected) {
446
- background-color: var(--gp-grid-primary-light);
447
- }
448
-
449
- /* Editing cell - structural properties stay, visual use :where() */
450
- .gp-grid-cell--editing {
451
- z-index: 10;
452
- }
453
- :where(.gp-grid-cell--editing) {
454
- background-color: var(--gp-grid-bg);
455
- border: 2px solid var(--gp-grid-primary);
456
- padding: 0;
457
- }
458
-
459
- /* =============================================================================
460
- Fill Handle (drag to fill)
461
- ============================================================================= */
462
-
463
- .gp-grid-fill-handle {
464
- position: absolute;
465
- width: 8px;
466
- height: 8px;
467
- z-index: 11;
468
- pointer-events: auto;
469
- box-sizing: border-box;
470
- touch-action: none;
471
- }
472
-
473
- :where(.gp-grid-fill-handle) {
474
- background-color: var(--gp-grid-primary);
475
- border: 2px solid var(--gp-grid-bg);
476
- cursor: crosshair;
477
- border-radius: 1px;
478
- }
479
-
480
- :where(.gp-grid-fill-handle:hover) {
481
- transform: scale(1.2);
482
- }
483
-
484
- @media (pointer: coarse) and (hover: none) and (max-width: 768px) {
485
- .gp-grid-fill-handle {
486
- width: 24px;
487
- height: 24px;
488
- }
489
- :where(.gp-grid-fill-handle) {
490
- border-width: 3px;
491
- border-radius: 3px;
492
- }
493
- }
494
-
495
- /* Fill preview (cells being filled) */
496
- :where(.gp-grid-cell.gp-grid-cell--fill-preview) {
497
- background-color: var(--gp-grid-primary-light);
498
- border: 1px dashed var(--gp-grid-primary);
499
- }
500
-
501
- /* =============================================================================
502
- Edit Input
503
- ============================================================================= */
504
-
505
- .gp-grid-edit-input {
506
- width: 100%;
507
- height: 100%;
508
- }
509
-
510
- :where(.gp-grid-edit-input) {
511
- padding: 0 11px;
512
- font-family: inherit;
513
- font-size: inherit;
514
- color: var(--gp-grid-text);
515
- border: none;
516
- background-color: transparent;
517
- }
518
-
519
- .gp-grid-edit-input:focus {
520
- outline: none;
521
- }
522
-
523
- /* =============================================================================
524
- Cell Peek (read-only multi-line overlay on dblclick of non-editable cell)
525
- ============================================================================= */
526
-
527
- /* Structural: positioned absolutely by the framework wrapper; must sit above
528
- selection (z:5), editing (z:10), fill handle (z:11). */
529
- .gp-grid-cell-peek {
530
- position: absolute;
531
- z-index: 20;
532
- box-sizing: border-box;
533
- overflow: auto;
534
- max-height: 320px;
535
- }
536
-
537
- :where(.gp-grid-cell-peek) {
538
- padding: 8px 11px;
539
- background-color: var(--gp-grid-bg);
540
- color: var(--gp-grid-text);
541
- border: 2px solid var(--gp-grid-primary);
542
- border-radius: 3px;
543
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
544
- font-family: inherit;
545
- font-size: inherit;
546
- line-height: 1.4;
547
- white-space: pre-wrap;
548
- overflow-wrap: anywhere;
549
- cursor: text;
550
- user-select: text;
551
- -webkit-user-select: text;
552
- }
553
-
554
-
555
-
556
- /* =============================================================================
557
- Loading & Error States
558
- ============================================================================= */
559
-
560
- /* Sticky wrapper: stays pinned at viewport top, takes no layout space */
561
- .gp-grid-loading-anchor {
562
- position: sticky;
563
- top: 0;
564
- left: 0;
565
- height: 0;
566
- z-index: 900;
567
- overflow: visible;
568
- pointer-events: none;
569
- }
570
-
571
- /* Semi-transparent overlay covering the visible viewport area */
572
- .gp-grid-loading-overlay {
573
- position: absolute;
574
- top: 0;
575
- left: 0;
576
- width: 100%;
577
- height: 100%;
578
- pointer-events: none;
579
- }
580
-
581
- :where(.gp-grid-loading-overlay) {
582
- background-color: var(--gp-grid-loading-overlay-bg, rgba(255, 255, 255, 0.4));
583
- }
584
-
585
- :where(.gp-grid-container--dark .gp-grid-loading-overlay) {
586
- background-color: var(--gp-grid-loading-overlay-bg, rgba(0, 0, 0, 0.3));
587
- }
588
-
589
- /* Loading indicator centered in the visible viewport */
590
- .gp-grid-loading {
591
- position: absolute;
592
- top: 50%;
593
- left: 50%;
594
- transform: translate(-50%, -50%);
595
- z-index: 1000;
596
- display: flex;
597
- pointer-events: auto;
598
- }
599
-
600
- :where(.gp-grid-loading) {
601
- align-items: center;
602
- padding: 12px 20px;
603
- background-color: var(--gp-grid-loading-bg);
604
- color: var(--gp-grid-loading-text);
605
- border-radius: 6px;
606
- border: 1px solid var(--gp-grid-border);
607
- font-weight: 500;
608
- font-size: 13px;
609
- gap: 10px;
610
- }
611
-
612
- .gp-grid-loading-spinner {
613
- width: 16px;
614
- height: 16px;
615
- animation: gp-grid-spin 0.7s linear infinite;
616
- }
617
-
618
- :where(.gp-grid-loading-spinner) {
619
- border: 2px solid var(--gp-grid-border);
620
- border-top-color: var(--gp-grid-primary);
621
- border-radius: 50%;
622
- }
623
-
624
- @keyframes gp-grid-spin {
625
- to {
626
- transform: rotate(360deg);
627
- }
628
- }
629
-
630
- .gp-grid-error {
631
- position: absolute;
632
- top: 50%;
633
- left: 50%;
634
- transform: translate(-50%, -50%);
635
- z-index: 1000;
636
- user-select: text;
637
- -webkit-user-select: text;
638
- }
639
-
640
- :where(.gp-grid-error) {
641
- padding: 12px 20px;
642
- background-color: var(--gp-grid-error-bg);
643
- color: var(--gp-grid-error-text);
644
- border-radius: 6px;
645
- border: 1px solid var(--gp-grid-error-text);
646
- font-weight: 500;
647
- font-size: 13px;
648
- max-width: 80%;
649
- text-align: center;
650
- cursor: text;
651
- }
652
-
653
- /* =============================================================================
654
- Empty State
655
- ============================================================================= */
656
-
657
- .gp-grid-empty {
658
- position: absolute;
659
- top: 50%;
660
- left: 50%;
661
- transform: translate(-50%, -50%);
662
- }
663
-
664
- :where(.gp-grid-empty) {
665
- color: var(--gp-grid-text-muted);
666
- font-size: 14px;
667
- text-align: center;
668
- }
669
-
670
-
671
- /* =============================================================================
672
- Scrollbar Styling
673
- ============================================================================= */
674
-
675
- .gp-grid-container::-webkit-scrollbar {
676
- width: 8px;
677
- height: 8px;
678
- }
679
-
680
- :where(.gp-grid-container)::-webkit-scrollbar-track {
681
- background-color: var(--gp-grid-scrollbar-track);
682
- }
683
-
684
- :where(.gp-grid-container)::-webkit-scrollbar-thumb {
685
- background-color: var(--gp-grid-scrollbar-thumb);
686
- border-radius: 4px;
687
- }
688
-
689
- :where(.gp-grid-container)::-webkit-scrollbar-thumb:hover {
690
- background-color: var(--gp-grid-scrollbar-thumb-hover);
691
- }
692
-
693
- :where(.gp-grid-container)::-webkit-scrollbar-corner {
694
- background-color: var(--gp-grid-scrollbar-track);
695
- }
696
-
697
-
698
- /* =============================================================================
699
- Filter Popup
700
- ============================================================================= */
701
-
702
- .gp-grid-filter-popup {
703
- max-height: 400px;
704
- max-width: min(360px, calc(100vw - 16px));
705
- display: flex;
706
- flex-direction: column;
707
- }
708
-
709
- :where(.gp-grid-filter-popup) {
710
- background-color: var(--gp-grid-bg);
711
- border: 1px solid var(--gp-grid-border);
712
- border-radius: 6px;
713
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
714
- font-size: 13px;
715
- }
716
-
717
- :where(.gp-grid-filter-header) {
718
- padding: 10px 12px;
719
- font-weight: 600;
720
- border-bottom: 1px solid var(--gp-grid-border-light);
721
- color: var(--gp-grid-header-text);
722
- }
723
-
724
- .gp-grid-filter-content {
725
- display: flex;
726
- flex-direction: column;
727
- overflow-y: auto;
728
- min-height: 0;
729
- }
730
-
731
- :where(.gp-grid-filter-content) {
732
- padding: 10px 12px;
733
- gap: 10px;
734
- }
735
-
736
- /* Mode toggle (Values / Condition) */
737
- .gp-grid-filter-mode-toggle {
738
- display: flex;
739
- }
740
-
741
- :where(.gp-grid-filter-mode-toggle) {
742
- gap: 4px;
743
- background-color: var(--gp-grid-bg-alt);
744
- border-radius: 4px;
745
- padding: 2px;
746
- }
747
-
748
- .gp-grid-filter-mode-toggle button {
749
- flex: 1;
750
- }
751
-
752
- :where(.gp-grid-filter-mode-toggle button) {
753
- padding: 6px 10px;
754
- font-size: 11px;
755
- font-family: inherit;
756
- border: none;
757
- border-radius: 3px;
758
- background-color: transparent;
759
- color: var(--gp-grid-text-secondary);
760
- cursor: pointer;
761
- transition: background-color 0.15s ease, color 0.15s ease;
762
- }
763
-
764
- :where(.gp-grid-filter-mode-toggle button:hover) {
765
- color: var(--gp-grid-text);
766
- }
767
-
768
- :where(.gp-grid-filter-mode-toggle button.active) {
769
- background-color: var(--gp-grid-bg);
770
- color: var(--gp-grid-text);
771
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
772
- }
773
-
774
- /* Info message for too many values */
775
- :where(.gp-grid-filter-info) {
776
- font-size: 11px;
777
- color: var(--gp-grid-text-secondary);
778
- padding: 6px 8px;
779
- background-color: var(--gp-grid-bg-alt);
780
- border-radius: 4px;
781
- }
782
-
783
- /* Search input in filter */
784
- .gp-grid-filter-search {
785
- width: 100%;
786
- height: 30px;
787
- box-sizing: border-box;
788
- }
789
-
790
- :where(.gp-grid-filter-search) {
791
- padding: 0 10px;
792
- font-family: inherit;
793
- font-size: 12px;
794
- border: 1px solid var(--gp-grid-input-border);
795
- border-radius: 4px;
796
- background-color: var(--gp-grid-input-bg);
797
- color: var(--gp-grid-text);
798
- }
799
-
800
- :where(.gp-grid-filter-search:focus) {
801
- outline: none;
802
- border-color: var(--gp-grid-primary);
803
- }
804
-
805
- /* Select All / Deselect All actions */
806
- .gp-grid-filter-actions {
807
- display: flex;
808
- }
809
-
810
- :where(.gp-grid-filter-actions) {
811
- gap: 8px;
812
- }
813
-
814
- .gp-grid-filter-actions button {
815
- flex: 1;
816
- }
817
-
818
- :where(.gp-grid-filter-actions button) {
819
- padding: 4px 8px;
820
- font-size: 11px;
821
- font-family: inherit;
822
- border: 1px solid var(--gp-grid-input-border);
823
- border-radius: 3px;
824
- background-color: var(--gp-grid-bg);
825
- color: var(--gp-grid-text);
826
- cursor: pointer;
827
- }
828
-
829
- :where(.gp-grid-filter-actions button:hover:not(:disabled)) {
830
- background-color: var(--gp-grid-hover);
831
- }
832
-
833
- :where(.gp-grid-filter-actions button:disabled) {
834
- opacity: 0.5;
835
- cursor: not-allowed;
836
- }
837
-
838
- /* Checkbox list */
839
- .gp-grid-filter-list {
840
- max-height: 200px;
841
- overflow-y: auto;
842
- display: flex;
843
- flex-direction: column;
844
- }
845
-
846
- :where(.gp-grid-filter-list) {
847
- gap: 4px;
848
- border: 1px solid var(--gp-grid-border-light);
849
- border-radius: 4px;
850
- padding: 6px;
851
- }
852
-
853
- .gp-grid-filter-option {
854
- display: flex;
855
- align-items: center;
856
- }
857
-
858
- :where(.gp-grid-filter-option) {
859
- gap: 8px;
860
- padding: 4px 6px;
861
- border-radius: 3px;
862
- cursor: pointer;
863
- }
864
-
865
- :where(.gp-grid-filter-option:hover) {
866
- background-color: var(--gp-grid-hover);
867
- }
868
-
869
- .gp-grid-filter-option input[type="checkbox"] {
870
- margin: 0;
871
- }
872
-
873
- :where(.gp-grid-filter-option input[type="checkbox"]) {
874
- cursor: pointer;
875
- }
876
-
877
- .gp-grid-filter-option span {
878
- flex: 1;
879
- overflow: hidden;
880
- text-overflow: ellipsis;
881
- white-space: nowrap;
882
- }
883
-
884
- :where(.gp-grid-filter-blank) {
885
- font-style: italic;
886
- color: var(--gp-grid-text-muted);
887
- }
888
-
889
- /* Filter condition row (for number/date filters) */
890
- .gp-grid-filter-condition {
891
- display: flex;
892
- flex-direction: column;
893
- }
894
-
895
- :where(.gp-grid-filter-condition) {
896
- gap: 6px;
897
- }
898
-
899
- .gp-grid-filter-row {
900
- display: flex;
901
- align-items: center;
902
- }
903
-
904
- :where(.gp-grid-filter-row) {
905
- gap: 6px;
906
- }
907
-
908
- .gp-grid-filter-row select {
909
- height: 30px;
910
- }
911
-
912
- :where(.gp-grid-filter-row select) {
913
- padding: 0 6px;
914
- font-family: inherit;
915
- font-size: 12px;
916
- border: 1px solid var(--gp-grid-input-border);
917
- border-radius: 4px;
918
- background-color: var(--gp-grid-input-bg);
919
- color: var(--gp-grid-text);
920
- cursor: pointer;
921
- }
922
-
923
- .gp-grid-filter-row input[type="number"],
924
- .gp-grid-filter-row input[type="date"],
925
- .gp-grid-filter-row input[type="text"],
926
- .gp-grid-filter-text-input {
927
- flex: 1;
928
- height: 30px;
929
- min-width: 0;
930
- box-sizing: border-box;
931
- }
932
-
933
- :where(.gp-grid-filter-row input[type="number"]),
934
- :where(.gp-grid-filter-row input[type="date"]),
935
- :where(.gp-grid-filter-row input[type="text"]),
936
- :where(.gp-grid-filter-text-input) {
937
- padding: 0 8px;
938
- font-family: inherit;
939
- font-size: 12px;
940
- border: 1px solid var(--gp-grid-input-border);
941
- border-radius: 4px;
942
- background-color: var(--gp-grid-input-bg);
943
- color: var(--gp-grid-text);
944
- }
945
-
946
- :where(.gp-grid-filter-row input:focus) {
947
- outline: none;
948
- border-color: var(--gp-grid-primary);
949
- }
950
-
951
- :where(.gp-grid-filter-to) {
952
- font-size: 11px;
953
- color: var(--gp-grid-text-secondary);
954
- }
955
-
956
- .gp-grid-filter-remove {
957
- width: 24px;
958
- height: 24px;
959
- }
960
-
961
- :where(.gp-grid-filter-remove) {
962
- padding: 0;
963
- font-size: 16px;
964
- line-height: 1;
965
- border: none;
966
- border-radius: 3px;
967
- background-color: transparent;
968
- color: var(--gp-grid-text-muted);
969
- cursor: pointer;
970
- }
971
-
972
- :where(.gp-grid-filter-remove:hover) {
973
- background-color: var(--gp-grid-error-bg);
974
- color: var(--gp-grid-error-text);
975
- }
976
-
977
- /* AND/OR combination toggle */
978
- .gp-grid-filter-combination {
979
- display: flex;
980
- }
981
-
982
- :where(.gp-grid-filter-combination) {
983
- gap: 4px;
984
- margin-bottom: 4px;
985
- }
986
-
987
- .gp-grid-filter-combination button {
988
- flex: 1;
989
- }
990
-
991
- :where(.gp-grid-filter-combination button) {
992
- padding: 4px 8px;
993
- font-size: 10px;
994
- font-family: inherit;
995
- border: 1px solid var(--gp-grid-input-border);
996
- border-radius: 3px;
997
- background-color: var(--gp-grid-bg);
998
- color: var(--gp-grid-text-secondary);
999
- cursor: pointer;
1000
- }
1001
-
1002
- :where(.gp-grid-filter-combination button.active) {
1003
- background-color: var(--gp-grid-primary);
1004
- border-color: var(--gp-grid-primary);
1005
- color: #fff;
1006
- }
1007
-
1008
- /* Add condition button */
1009
- .gp-grid-filter-add {
1010
- width: 100%;
1011
- }
1012
-
1013
- :where(.gp-grid-filter-add) {
1014
- padding: 6px;
1015
- font-size: 11px;
1016
- font-family: inherit;
1017
- border: 1px dashed var(--gp-grid-border);
1018
- border-radius: 4px;
1019
- background-color: transparent;
1020
- color: var(--gp-grid-text-secondary);
1021
- cursor: pointer;
1022
- }
1023
-
1024
- :where(.gp-grid-filter-add:hover) {
1025
- background-color: var(--gp-grid-hover);
1026
- border-color: var(--gp-grid-primary);
1027
- color: var(--gp-grid-primary);
1028
- }
1029
-
1030
- /* Apply / Clear buttons */
1031
- .gp-grid-filter-buttons {
1032
- display: flex;
1033
- }
1034
-
1035
- :where(.gp-grid-filter-buttons) {
1036
- gap: 8px;
1037
- padding-top: 8px;
1038
- border-top: 1px solid var(--gp-grid-border-light);
1039
- }
1040
-
1041
- .gp-grid-filter-btn-clear,
1042
- .gp-grid-filter-btn-apply {
1043
- flex: 1;
1044
- }
1045
-
1046
- :where(.gp-grid-filter-btn-clear),
1047
- :where(.gp-grid-filter-btn-apply) {
1048
- padding: 8px 12px;
1049
- font-size: 12px;
1050
- font-family: inherit;
1051
- border-radius: 4px;
1052
- cursor: pointer;
1053
- }
1054
-
1055
- :where(.gp-grid-filter-btn-clear) {
1056
- border: 1px solid var(--gp-grid-input-border);
1057
- background-color: var(--gp-grid-bg);
1058
- color: var(--gp-grid-text);
1059
- }
1060
-
1061
- :where(.gp-grid-filter-btn-clear:hover) {
1062
- background-color: var(--gp-grid-hover);
1063
- }
1064
-
1065
- :where(.gp-grid-filter-btn-apply) {
1066
- border: 1px solid var(--gp-grid-primary);
1067
- background-color: var(--gp-grid-primary);
1068
- color: #fff;
1069
- }
1070
-
1071
- :where(.gp-grid-filter-btn-apply:hover) {
1072
- opacity: 0.9;
1073
- }
1074
-
1075
-
1076
- /* =============================================================================
1077
- Row Drag
1078
- ============================================================================= */
1079
-
1080
- .gp-grid-cell--row-drag-handle {
1081
- touch-action: none;
1082
- }
1083
-
1084
- :where(.gp-grid-cell--row-drag-handle) {
1085
- cursor: grab;
1086
- }
1087
-
1088
- :where(.gp-grid-cell--row-drag-handle:active) {
1089
- cursor: grabbing;
1090
- }
1091
-
1092
- .gp-grid-row-drag-icon {
1093
- display: flex;
1094
- align-items: center;
1095
- justify-content: center;
1096
- width: 100%;
1097
- height: 100%;
1098
- }
1099
-
1100
- :where(.gp-grid-row-drag-icon) {
1101
- color: var(--gp-grid-text-secondary);
1102
- }
1103
-
1104
- .gp-grid-row-drag-icon svg {
1105
- width: 16px;
1106
- height: 16px;
1107
- }
1108
-
1109
- .gp-grid-row-drag-ghost {
1110
- position: fixed;
1111
- pointer-events: none;
1112
- z-index: 2000;
1113
- overflow: hidden;
1114
- box-sizing: border-box;
1115
- }
1116
-
1117
- :where(.gp-grid-row-drag-ghost) {
1118
- opacity: 0.8;
1119
- background-color: var(--gp-grid-bg, #fff);
1120
- border: 2px solid var(--gp-grid-primary);
1121
- border-radius: 4px;
1122
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1123
- }
1124
-
1125
- .gp-grid-row-drop-indicator {
1126
- position: absolute;
1127
- left: 0;
1128
- width: 100%;
1129
- height: 3px;
1130
- z-index: 1000;
1131
- pointer-events: none;
1132
- }
1133
-
1134
- :where(.gp-grid-row-drop-indicator) {
1135
- background-color: var(--gp-grid-primary);
1136
- border-radius: 2px;
1137
- }
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}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gp-grid/react",
3
3
  "description": "A high-performance React data grid component with virtual scrolling, cell selection, sorting, filtering, and Excel-like editing",
4
- "version": "0.21.0",
4
+ "version": "0.23.0",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
@@ -52,7 +52,7 @@
52
52
  "link-workspace-packages": false
53
53
  },
54
54
  "dependencies": {
55
- "@gp-grid/core": "0.21.0"
55
+ "@gp-grid/core": "0.23.0"
56
56
  },
57
57
  "peerDependencies": {
58
58
  "react": "^18.0.0 || ^19.0.0",