gbs-add-block 1.2.7 → 1.2.9

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 (57) hide show
  1. package/README.md +3 -3
  2. package/index.cjs +10 -9
  3. package/package.json +1 -1
  4. package/source/components/combobox/README.md +170 -0
  5. package/source/components/combobox/__tests__/core.test.ts +134 -0
  6. package/source/components/combobox/core/filter.ts +155 -0
  7. package/source/components/combobox/core/index.ts +16 -0
  8. package/source/components/combobox/core/types.ts +48 -0
  9. package/source/components/combobox/core/virtual.ts +67 -0
  10. package/source/components/combobox/index.ts +13 -0
  11. package/source/components/combobox/react/Listbox.tsx +302 -0
  12. package/source/components/combobox/react/MultiSelect.tsx +263 -0
  13. package/source/components/combobox/react/Popover.tsx +70 -0
  14. package/source/components/combobox/react/Select.tsx +198 -0
  15. package/source/components/combobox/react/icons.tsx +34 -0
  16. package/source/components/combobox/react/locale.ts +16 -0
  17. package/source/components/combobox/react/props.ts +86 -0
  18. package/source/components/combobox/react/useCombobox.ts +399 -0
  19. package/source/components/combobox/styles.css +417 -0
  20. package/source/components/datagridbeta/README.md +232 -0
  21. package/source/components/datagridbeta/__tests__/core.test.ts +341 -0
  22. package/source/components/datagridbeta/__tests__/export.test.ts +70 -0
  23. package/source/components/datagridbeta/core/columnHelper.ts +21 -0
  24. package/source/components/datagridbeta/core/columns.ts +288 -0
  25. package/source/components/datagridbeta/core/filtering.ts +237 -0
  26. package/source/components/datagridbeta/core/grid.ts +616 -0
  27. package/source/components/datagridbeta/core/index.ts +14 -0
  28. package/source/components/datagridbeta/core/rows.ts +64 -0
  29. package/source/components/datagridbeta/core/sorting.ts +111 -0
  30. package/source/components/datagridbeta/core/state.ts +82 -0
  31. package/source/components/datagridbeta/core/store.ts +52 -0
  32. package/source/components/datagridbeta/core/types.ts +266 -0
  33. package/source/components/datagridbeta/core/values.ts +98 -0
  34. package/source/components/datagridbeta/core/virtual.ts +85 -0
  35. package/source/components/datagridbeta/export/csv.ts +32 -0
  36. package/source/components/datagridbeta/export/download.ts +12 -0
  37. package/source/components/datagridbeta/export/pdf.ts +61 -0
  38. package/source/components/datagridbeta/export/table.ts +73 -0
  39. package/source/components/datagridbeta/export/xlsx.ts +145 -0
  40. package/source/components/datagridbeta/export/zip.ts +87 -0
  41. package/source/components/datagridbeta/index.ts +7 -0
  42. package/source/components/datagridbeta/react/Cell.tsx +282 -0
  43. package/source/components/datagridbeta/react/ColumnMenu.tsx +135 -0
  44. package/source/components/datagridbeta/react/DataGrid.tsx +296 -0
  45. package/source/components/datagridbeta/react/FilterForm.tsx +142 -0
  46. package/source/components/datagridbeta/react/HeaderRow.tsx +306 -0
  47. package/source/components/datagridbeta/react/Pagination.tsx +107 -0
  48. package/source/components/datagridbeta/react/Popover.tsx +79 -0
  49. package/source/components/datagridbeta/react/Row.tsx +85 -0
  50. package/source/components/datagridbeta/react/Toolbar.tsx +266 -0
  51. package/source/components/datagridbeta/react/Viewport.tsx +167 -0
  52. package/source/components/datagridbeta/react/context.ts +57 -0
  53. package/source/components/datagridbeta/react/hooks.ts +80 -0
  54. package/source/components/datagridbeta/react/icons.tsx +72 -0
  55. package/source/components/datagridbeta/react/keyboard.ts +110 -0
  56. package/source/components/datagridbeta/react/locale.ts +128 -0
  57. package/source/components/datagridbeta/styles.css +717 -0
@@ -0,0 +1,717 @@
1
+ /*
2
+ * DataGrid styles. Everything lives in the `components` layer, so utility
3
+ * classes (e.g. Tailwind) passed through `classNames` override it. Declaring
4
+ * the layer order keeps that true whichever stylesheet loads first.
5
+ *
6
+ * Theme: override the --dg-* variables on .dg-root or any ancestor.
7
+ * Colors follow the page's `color-scheme`; `.dark` / `[data-theme]` ancestors
8
+ * or `data-theme` on the grid force a scheme.
9
+ */
10
+ @layer theme, base, components, utilities;
11
+
12
+ @layer components {
13
+ .dg-root {
14
+ --dg-font-size: 13px;
15
+ --dg-bg: light-dark(#ffffff, #0b0b0e);
16
+ --dg-fg: light-dark(#18181b, #f4f4f5);
17
+ --dg-muted: light-dark(#71717a, #a1a1aa);
18
+ --dg-border: light-dark(#e4e4e7, #27272a);
19
+ --dg-border-subtle: light-dark(#f0f0f2, #1c1c20);
20
+ --dg-header-bg: light-dark(#fafafa, #111114);
21
+ --dg-header-fg: light-dark(#3f3f46, #d4d4d8);
22
+ --dg-row-alt: light-dark(#fcfcfd, #0e0e12);
23
+ --dg-row-hover: light-dark(#f4f4f5, #18181c);
24
+ --dg-row-selected: light-dark(#eef4ff, #14213d);
25
+ --dg-row-selected-hover: light-dark(#e2ecff, #1a2a4d);
26
+ --dg-hover: light-dark(#f4f4f5, #1f1f23);
27
+ --dg-input-bg: light-dark(#ffffff, #121216);
28
+ --dg-accent: light-dark(#2563eb, #60a5fa);
29
+ --dg-accent-fg: light-dark(#ffffff, #0b1220);
30
+ --dg-accent-soft: light-dark(#eff6ff, #172554);
31
+ --dg-accent-strong: light-dark(#1d4ed8, #bfdbfe);
32
+ --dg-focus: light-dark(#2563eb, #60a5fa);
33
+ --dg-danger: light-dark(#dc2626, #f87171);
34
+ --dg-pin-shadow: light-dark(rgb(0 0 0 / 0.08), rgb(0 0 0 / 0.5));
35
+ --dg-shadow: 0 10px 30px -8px light-dark(rgb(0 0 0 / 0.18), rgb(0 0 0 / 0.6));
36
+ --dg-radius: 8px;
37
+ --dg-cell-px: 12px;
38
+
39
+ color-scheme: inherit;
40
+ position: relative;
41
+ display: flex;
42
+ flex-direction: column;
43
+ min-width: 0;
44
+ overflow: hidden;
45
+ font-size: var(--dg-font-size);
46
+ line-height: 1.4;
47
+ color: var(--dg-fg);
48
+ background: var(--dg-bg);
49
+ border: 1px solid var(--dg-border);
50
+ border-radius: var(--dg-radius);
51
+ }
52
+
53
+ :where(.dark, [data-theme="dark"]) .dg-root,
54
+ .dg-root[data-theme="dark"] {
55
+ color-scheme: dark;
56
+ }
57
+ :where(.light, [data-theme="light"]) .dg-root,
58
+ .dg-root[data-theme="light"] {
59
+ color-scheme: light;
60
+ }
61
+
62
+ :where(.dg-root) *,
63
+ :where(.dg-root) *::before,
64
+ :where(.dg-root) *::after {
65
+ box-sizing: border-box;
66
+ }
67
+
68
+ .dg-root[data-resizing] {
69
+ cursor: col-resize;
70
+ user-select: none;
71
+ }
72
+
73
+ /* ------------------------------------------------------------ controls */
74
+
75
+ .dg-button {
76
+ display: inline-flex;
77
+ align-items: center;
78
+ gap: 6px;
79
+ height: 32px;
80
+ padding: 0 10px;
81
+ border: 1px solid var(--dg-border);
82
+ border-radius: 6px;
83
+ background: var(--dg-bg);
84
+ color: inherit;
85
+ font: inherit;
86
+ white-space: nowrap;
87
+ cursor: pointer;
88
+ }
89
+ .dg-button:hover {
90
+ background: var(--dg-hover);
91
+ }
92
+ .dg-button[data-variant="primary"] {
93
+ background: var(--dg-accent);
94
+ border-color: var(--dg-accent);
95
+ color: var(--dg-accent-fg);
96
+ }
97
+ .dg-icon-button {
98
+ display: inline-grid;
99
+ place-items: center;
100
+ width: 28px;
101
+ height: 28px;
102
+ padding: 0;
103
+ border: 0;
104
+ border-radius: 6px;
105
+ background: transparent;
106
+ color: inherit;
107
+ cursor: pointer;
108
+ }
109
+ .dg-icon-button:hover:not(:disabled) {
110
+ background: var(--dg-hover);
111
+ }
112
+ .dg-icon-button:disabled {
113
+ opacity: 0.4;
114
+ cursor: default;
115
+ }
116
+ .dg-link-button {
117
+ padding: 2px 4px;
118
+ border: 0;
119
+ background: none;
120
+ color: var(--dg-accent);
121
+ font: inherit;
122
+ cursor: pointer;
123
+ }
124
+ .dg-link-button:hover {
125
+ text-decoration: underline;
126
+ }
127
+ .dg-input,
128
+ .dg-select {
129
+ width: 100%;
130
+ height: 30px;
131
+ padding: 0 8px;
132
+ border: 1px solid var(--dg-border);
133
+ border-radius: 6px;
134
+ background: var(--dg-input-bg);
135
+ color: inherit;
136
+ font: inherit;
137
+ }
138
+ .dg-checkbox {
139
+ width: 16px;
140
+ height: 16px;
141
+ margin: 0;
142
+ accent-color: var(--dg-accent);
143
+ cursor: pointer;
144
+ }
145
+ :is(.dg-button, .dg-icon-button, .dg-link-button, .dg-input, .dg-select, .dg-menu-item, .dg-checkbox):focus-visible {
146
+ outline: 2px solid var(--dg-focus);
147
+ outline-offset: 1px;
148
+ }
149
+
150
+ .dg-sr-only {
151
+ position: absolute;
152
+ width: 1px;
153
+ height: 1px;
154
+ margin: -1px;
155
+ padding: 0;
156
+ overflow: hidden;
157
+ clip-path: inset(50%);
158
+ white-space: nowrap;
159
+ border: 0;
160
+ }
161
+
162
+ .dg-flip-rtl:dir(rtl) {
163
+ transform: scaleX(-1);
164
+ }
165
+
166
+ /* ------------------------------------------------------------- toolbar */
167
+
168
+ .dg-toolbar {
169
+ display: flex;
170
+ flex-wrap: wrap;
171
+ align-items: center;
172
+ gap: 8px;
173
+ padding: 8px 12px;
174
+ border-bottom: 1px solid var(--dg-border);
175
+ container-type: inline-size;
176
+ }
177
+ .dg-toolbar-spacer {
178
+ flex: 1 1 0;
179
+ }
180
+ .dg-search {
181
+ display: flex;
182
+ flex: 0 1 280px;
183
+ align-items: center;
184
+ gap: 6px;
185
+ min-width: 160px;
186
+ height: 32px;
187
+ padding: 0 8px;
188
+ border: 1px solid var(--dg-border);
189
+ border-radius: 6px;
190
+ background: var(--dg-input-bg);
191
+ color: var(--dg-muted);
192
+ }
193
+ .dg-search:focus-within {
194
+ outline: 2px solid var(--dg-focus);
195
+ outline-offset: -1px;
196
+ }
197
+ .dg-search input {
198
+ width: 100%;
199
+ min-width: 0;
200
+ border: 0;
201
+ outline: 0;
202
+ background: transparent;
203
+ color: var(--dg-fg);
204
+ font: inherit;
205
+ }
206
+ .dg-chips,
207
+ .dg-selection {
208
+ display: flex;
209
+ flex-wrap: wrap;
210
+ align-items: center;
211
+ gap: 6px;
212
+ }
213
+ .dg-selection {
214
+ color: var(--dg-muted);
215
+ }
216
+ .dg-chip {
217
+ display: inline-flex;
218
+ align-items: center;
219
+ gap: 2px;
220
+ height: 26px;
221
+ padding-inline: 10px 4px;
222
+ border-radius: 999px;
223
+ background: var(--dg-accent-soft);
224
+ color: var(--dg-accent-strong);
225
+ font-size: 12px;
226
+ white-space: nowrap;
227
+ }
228
+ .dg-chip-remove {
229
+ display: inline-grid;
230
+ place-items: center;
231
+ width: 18px;
232
+ height: 18px;
233
+ padding: 0;
234
+ border: 0;
235
+ border-radius: 50%;
236
+ background: transparent;
237
+ color: inherit;
238
+ cursor: pointer;
239
+ }
240
+ .dg-chip-remove:hover {
241
+ background: rgb(0 0 0 / 0.08);
242
+ }
243
+ @container (max-width: 560px) {
244
+ .dg-button-label {
245
+ display: none;
246
+ }
247
+ }
248
+
249
+ /* ------------------------------------------------------------ viewport */
250
+
251
+ .dg-viewport-wrap {
252
+ position: relative;
253
+ display: flex;
254
+ flex: 1 1 auto;
255
+ flex-direction: column;
256
+ min-height: 0;
257
+ }
258
+ .dg-viewport {
259
+ position: relative;
260
+ overflow: auto;
261
+ overscroll-behavior: contain;
262
+ outline: none;
263
+ }
264
+ .dg-viewport:focus-visible {
265
+ outline: 2px solid var(--dg-focus);
266
+ outline-offset: -2px;
267
+ }
268
+ .dg-header-group {
269
+ position: sticky;
270
+ top: 0;
271
+ z-index: 3;
272
+ width: max(100%, var(--dg-total-width));
273
+ }
274
+ .dg-header,
275
+ .dg-row {
276
+ display: flex;
277
+ width: max(100%, var(--dg-total-width));
278
+ }
279
+ .dg-header {
280
+ height: var(--dg-header-height);
281
+ background: var(--dg-header-bg);
282
+ border-bottom: 1px solid var(--dg-border);
283
+ }
284
+ .dg-body {
285
+ position: relative;
286
+ width: max(100%, var(--dg-total-width));
287
+ }
288
+ .dg-body:empty {
289
+ min-height: calc(var(--dg-row-height) * 4);
290
+ }
291
+ .dg-root[data-stale] .dg-body {
292
+ opacity: 0.72;
293
+ transition: opacity 120ms 80ms;
294
+ }
295
+ .dg-row {
296
+ position: absolute;
297
+ top: 0;
298
+ inset-inline-start: 0;
299
+ height: var(--dg-row-height);
300
+ background: var(--dg-bg);
301
+ border-bottom: 1px solid var(--dg-border-subtle);
302
+ contain: layout style;
303
+ }
304
+ .dg-row[data-odd] {
305
+ background: var(--dg-row-alt);
306
+ }
307
+ .dg-row:hover {
308
+ background: var(--dg-row-hover);
309
+ }
310
+ .dg-row[data-selected] {
311
+ background: var(--dg-row-selected);
312
+ }
313
+ .dg-row[data-selected]:hover {
314
+ background: var(--dg-row-selected-hover);
315
+ }
316
+ .dg-row:has([data-editing], [data-invalid]) {
317
+ z-index: 2;
318
+ }
319
+ .dg-spacer {
320
+ flex: none;
321
+ }
322
+ .dg-spacer-fill {
323
+ flex: 1 1 0;
324
+ }
325
+
326
+ /* --------------------------------------------------------------- cells */
327
+
328
+ .dg-cell,
329
+ .dg-header-cell {
330
+ position: relative;
331
+ display: flex;
332
+ flex: none;
333
+ align-items: center;
334
+ min-width: 0;
335
+ padding: 0 var(--dg-cell-px);
336
+ background: inherit;
337
+ }
338
+ .dg-cell {
339
+ overflow: hidden;
340
+ white-space: nowrap;
341
+ }
342
+ .dg-cell-text,
343
+ .dg-header-label {
344
+ overflow: hidden;
345
+ text-overflow: ellipsis;
346
+ white-space: nowrap;
347
+ }
348
+ :is(.dg-cell, .dg-header-cell)[data-align="center"] {
349
+ justify-content: center;
350
+ }
351
+ :is(.dg-cell, .dg-header-cell)[data-align="end"] {
352
+ justify-content: flex-end;
353
+ }
354
+ .dg-cell[data-align="end"] {
355
+ font-variant-numeric: tabular-nums;
356
+ }
357
+ :is(.dg-cell, .dg-header-cell)[data-pinned] {
358
+ position: sticky;
359
+ z-index: 1;
360
+ }
361
+ :is(.dg-cell, .dg-header-cell)[data-pinned="left"][data-pin-edge] {
362
+ box-shadow: 4px 0 6px -4px var(--dg-pin-shadow);
363
+ }
364
+ :is(.dg-cell, .dg-header-cell)[data-pinned="right"][data-pin-edge] {
365
+ box-shadow: -4px 0 6px -4px var(--dg-pin-shadow);
366
+ }
367
+ :is(.dg-cell, .dg-header-cell):focus {
368
+ outline: none;
369
+ }
370
+ :is(.dg-cell, .dg-header-cell):focus-visible,
371
+ .dg-viewport:focus-within :is(.dg-cell, .dg-header-cell)[data-active]:focus {
372
+ outline: 2px solid var(--dg-focus);
373
+ outline-offset: -2px;
374
+ z-index: 2;
375
+ }
376
+ .dg-cell[data-editable] {
377
+ cursor: cell;
378
+ }
379
+ .dg-cell[data-editing] {
380
+ z-index: 2;
381
+ overflow: visible;
382
+ padding: 0;
383
+ }
384
+ .dg-cell[data-pending] {
385
+ color: var(--dg-muted);
386
+ font-style: italic;
387
+ }
388
+ /* A ring layered above the editor input (which would cover an inset shadow). */
389
+ .dg-cell:is([data-editing], [data-invalid])::after {
390
+ content: "";
391
+ position: absolute;
392
+ inset: 0;
393
+ z-index: 1;
394
+ border: 2px solid var(--dg-focus);
395
+ pointer-events: none;
396
+ }
397
+ .dg-cell[data-invalid]::after,
398
+ .dg-cell[data-editing]:has(.dg-editor-error)::after {
399
+ border-color: var(--dg-danger);
400
+ }
401
+ .dg-bool {
402
+ display: inline-flex;
403
+ color: var(--dg-accent);
404
+ }
405
+
406
+ .dg-editor {
407
+ position: relative;
408
+ display: flex;
409
+ align-items: center;
410
+ width: 100%;
411
+ height: 100%;
412
+ }
413
+ .dg-editor:has(.dg-checkbox) {
414
+ justify-content: center;
415
+ }
416
+ .dg-editor-input {
417
+ width: 100%;
418
+ height: 100%;
419
+ padding: 0 calc(var(--dg-cell-px) - 2px);
420
+ border: 0;
421
+ outline: 0;
422
+ background: var(--dg-input-bg);
423
+ color: inherit;
424
+ font: inherit;
425
+ }
426
+ .dg-editor-error {
427
+ position: absolute;
428
+ top: calc(100% + 2px);
429
+ inset-inline-start: 0;
430
+ z-index: 5;
431
+ padding: 2px 8px;
432
+ border-radius: 4px;
433
+ background: var(--dg-danger);
434
+ color: #fff;
435
+ font-size: 12px;
436
+ white-space: nowrap;
437
+ }
438
+
439
+ /* -------------------------------------------------------------- header */
440
+
441
+ .dg-header-cell {
442
+ gap: 4px;
443
+ font-weight: 600;
444
+ color: var(--dg-header-fg);
445
+ user-select: none;
446
+ }
447
+ .dg-header-cell[data-sortable] {
448
+ cursor: pointer;
449
+ }
450
+ .dg-header-cell[data-align="end"] .dg-header-menu {
451
+ order: -1;
452
+ margin-inline: 0 auto;
453
+ }
454
+ .dg-sort-indicator {
455
+ display: inline-flex;
456
+ flex: none;
457
+ align-items: center;
458
+ color: var(--dg-accent);
459
+ }
460
+ .dg-sort-order {
461
+ font-size: 10px;
462
+ font-weight: 700;
463
+ }
464
+ .dg-filter-dot {
465
+ flex: none;
466
+ width: 6px;
467
+ height: 6px;
468
+ border-radius: 50%;
469
+ background: var(--dg-accent);
470
+ }
471
+ .dg-header-menu {
472
+ flex: none;
473
+ width: 24px;
474
+ height: 24px;
475
+ margin-inline-start: auto;
476
+ color: var(--dg-muted);
477
+ opacity: 0;
478
+ }
479
+ .dg-header-cell:hover .dg-header-menu,
480
+ .dg-header-cell:focus-within .dg-header-menu,
481
+ .dg-header-cell[data-active] .dg-header-menu {
482
+ opacity: 1;
483
+ }
484
+ @media (hover: none) {
485
+ .dg-header-menu {
486
+ opacity: 1;
487
+ }
488
+ }
489
+ .dg-resize-handle {
490
+ position: absolute;
491
+ inset-block: 0;
492
+ inset-inline-end: -4px;
493
+ z-index: 2;
494
+ width: 8px;
495
+ cursor: col-resize;
496
+ touch-action: none;
497
+ }
498
+ .dg-resize-handle::after {
499
+ content: "";
500
+ position: absolute;
501
+ inset-block: 25%;
502
+ inset-inline-start: 3px;
503
+ width: 2px;
504
+ border-radius: 1px;
505
+ background: transparent;
506
+ }
507
+ .dg-header-cell:hover .dg-resize-handle::after {
508
+ background: var(--dg-border);
509
+ }
510
+ .dg-resize-handle:hover::after,
511
+ .dg-root[data-resizing] .dg-resize-handle::after {
512
+ background: var(--dg-accent);
513
+ }
514
+ .dg-header-cell[data-drop]::before {
515
+ content: "";
516
+ position: absolute;
517
+ inset-block: 4px;
518
+ z-index: 3;
519
+ width: 2px;
520
+ background: var(--dg-accent);
521
+ }
522
+ .dg-header-cell[data-drop="before"]::before {
523
+ inset-inline-start: 0;
524
+ }
525
+ .dg-header-cell[data-drop="after"]::before {
526
+ inset-inline-end: 0;
527
+ }
528
+
529
+ /* ------------------------------------------------------------ overlays */
530
+
531
+ .dg-overlay {
532
+ position: absolute;
533
+ inset: var(--dg-header-height) 0 0;
534
+ display: grid;
535
+ place-items: center;
536
+ padding: 24px;
537
+ color: var(--dg-muted);
538
+ pointer-events: none;
539
+ }
540
+ .dg-empty {
541
+ display: flex;
542
+ flex-direction: column;
543
+ align-items: center;
544
+ gap: 10px;
545
+ pointer-events: auto;
546
+ }
547
+ .dg-loading {
548
+ position: absolute;
549
+ inset-inline: 0;
550
+ top: var(--dg-header-height);
551
+ z-index: 4;
552
+ height: 2px;
553
+ overflow: hidden;
554
+ }
555
+ .dg-loading-bar {
556
+ width: 40%;
557
+ height: 100%;
558
+ background: var(--dg-accent);
559
+ animation: dg-loading 1.1s ease-in-out infinite;
560
+ }
561
+ @keyframes dg-loading {
562
+ from {
563
+ transform: translateX(-100%);
564
+ }
565
+ to {
566
+ transform: translateX(250%);
567
+ }
568
+ }
569
+ @media (prefers-reduced-motion: reduce) {
570
+ .dg-loading-bar {
571
+ animation-duration: 3s;
572
+ }
573
+ }
574
+
575
+ /* ---------------------------------------------------------- pagination */
576
+
577
+ .dg-pagination {
578
+ display: flex;
579
+ flex-wrap: wrap;
580
+ align-items: center;
581
+ gap: 8px 16px;
582
+ padding: 8px 12px;
583
+ border-top: 1px solid var(--dg-border);
584
+ color: var(--dg-muted);
585
+ }
586
+ .dg-page-size {
587
+ display: flex;
588
+ align-items: center;
589
+ gap: 8px;
590
+ }
591
+ .dg-page-size .dg-select {
592
+ width: auto;
593
+ }
594
+ .dg-page-range {
595
+ font-variant-numeric: tabular-nums;
596
+ }
597
+ .dg-page-controls {
598
+ display: flex;
599
+ align-items: center;
600
+ gap: 4px;
601
+ margin-inline-start: auto;
602
+ color: var(--dg-fg);
603
+ }
604
+ .dg-page-input .dg-input {
605
+ width: 4.5em;
606
+ height: 28px;
607
+ text-align: center;
608
+ }
609
+ .dg-page-count {
610
+ margin-inline-end: 4px;
611
+ color: var(--dg-muted);
612
+ white-space: nowrap;
613
+ }
614
+
615
+ /* ------------------------------------------------------------ popovers */
616
+
617
+ .dg-popover {
618
+ position: fixed;
619
+ inset: auto;
620
+ margin: 0;
621
+ min-width: 220px;
622
+ max-width: min(340px, calc(100vw - 16px));
623
+ max-height: min(70vh, 560px);
624
+ padding: 6px;
625
+ overflow: auto;
626
+ border: 1px solid var(--dg-border);
627
+ border-radius: var(--dg-radius);
628
+ background: var(--dg-bg);
629
+ color: var(--dg-fg);
630
+ box-shadow: var(--dg-shadow);
631
+ font-size: var(--dg-font-size);
632
+ }
633
+ .dg-menu-section {
634
+ display: flex;
635
+ flex-direction: column;
636
+ gap: 1px;
637
+ padding: 4px 0;
638
+ }
639
+ .dg-menu-section + .dg-menu-section {
640
+ border-top: 1px solid var(--dg-border);
641
+ }
642
+ .dg-menu-label {
643
+ padding: 2px 4px;
644
+ font-size: 11px;
645
+ font-weight: 600;
646
+ letter-spacing: 0.04em;
647
+ text-transform: uppercase;
648
+ color: var(--dg-muted);
649
+ }
650
+ .dg-menu-item {
651
+ display: flex;
652
+ align-items: center;
653
+ gap: 8px;
654
+ width: 100%;
655
+ padding: 6px 8px;
656
+ border: 0;
657
+ border-radius: 4px;
658
+ background: transparent;
659
+ color: inherit;
660
+ font: inherit;
661
+ text-align: start;
662
+ cursor: pointer;
663
+ }
664
+ .dg-menu-item:hover {
665
+ background: var(--dg-hover);
666
+ }
667
+ .dg-menu-item:is([aria-pressed="true"], [aria-checked="true"]) {
668
+ color: var(--dg-accent);
669
+ font-weight: 600;
670
+ }
671
+ .dg-menu-item svg {
672
+ flex: none;
673
+ color: var(--dg-muted);
674
+ }
675
+ .dg-filter-form {
676
+ display: flex;
677
+ flex-direction: column;
678
+ gap: 8px;
679
+ padding: 2px 4px;
680
+ }
681
+ .dg-form-actions {
682
+ display: flex;
683
+ justify-content: flex-end;
684
+ gap: 6px;
685
+ }
686
+ .dg-form-actions .dg-button {
687
+ height: 28px;
688
+ }
689
+ .dg-check-list {
690
+ display: flex;
691
+ flex-direction: column;
692
+ max-height: 240px;
693
+ overflow: auto;
694
+ }
695
+ .dg-check-list label {
696
+ display: flex;
697
+ align-items: center;
698
+ gap: 8px;
699
+ padding: 5px 8px;
700
+ border-radius: 4px;
701
+ cursor: pointer;
702
+ }
703
+ .dg-check-list label:hover {
704
+ background: var(--dg-hover);
705
+ }
706
+
707
+ @media (forced-colors: active) {
708
+ .dg-row[data-selected] {
709
+ outline: 1px solid Highlight;
710
+ outline-offset: -1px;
711
+ }
712
+ .dg-filter-dot,
713
+ .dg-loading-bar {
714
+ background: Highlight;
715
+ }
716
+ }
717
+ }