@agile-team/mach-table 0.4.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.
@@ -0,0 +1,1384 @@
1
+ .mach-root {
2
+ --mach-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
3
+ "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
4
+ --mach-font-size: 13px;
5
+ --mach-font-size-sm: 12px;
6
+ --mach-header-font-weight: 600;
7
+ --mach-cell-padding: 9px;
8
+ --mach-row-h: 36px;
9
+ --mach-header-h: 40px;
10
+
11
+ --mach-primary: #2563eb;
12
+ --mach-primary-weak: #dbeafe;
13
+
14
+ --mach-success: #16a34a;
15
+ --mach-warning: #d97706;
16
+ --mach-danger: #dc2626;
17
+ --mach-info: #0284c7;
18
+
19
+ --mach-border-color: #e6eaf0;
20
+ --mach-row-border-color: #eef1f6;
21
+ --mach-cell-border-color: transparent;
22
+ --mach-border-width: 1px;
23
+ --mach-header-border-width: 1px;
24
+ --mach-header-accent-color: var(--mach-border-color);
25
+ --mach-header-bg: #fafbfd;
26
+ --mach-header-group-bg: #f4f6fa;
27
+ --mach-header-fg: #475569;
28
+ --mach-body-bg: #ffffff;
29
+ --mach-body-fg: #26303f;
30
+
31
+ --mach-row-hover-bg: #f6f8fa;
32
+ --mach-row-selected-bg: #eff6ff;
33
+ --mach-zebra-bg: #fafbfd;
34
+ --mach-cell-focus-color: #2563eb;
35
+ --mach-focus-width: 1.5px;
36
+ --mach-scrollbar-thumb: #c9d2dd;
37
+
38
+ --mach-radius-sm: 4px;
39
+ --mach-radius: 6px;
40
+ --mach-radius-lg: 8px;
41
+ --mach-shadow-sm: 0 1px 4px rgba(15, 23, 42, 0.08);
42
+ --mach-shadow: 0 6px 20px rgba(15, 23, 42, 0.12);
43
+ --mach-transition: 0.15s ease;
44
+
45
+ --mach-z-overlay: 10;
46
+ --mach-z-loading: 15;
47
+ --mach-z-popup: 1000;
48
+ --mach-z-menu: 1001;
49
+
50
+ position: relative;
51
+ display: flex;
52
+ flex-direction: column;
53
+ width: 100%;
54
+ height: 100%;
55
+ min-height: 120px;
56
+ overflow: hidden;
57
+ font-family: var(--mach-font-family);
58
+ font-size: var(--mach-font-size);
59
+ color: var(--mach-body-fg);
60
+ background: var(--mach-body-bg);
61
+ outline: none;
62
+ box-sizing: border-box;
63
+ border: 1px solid var(--mach-border-color);
64
+ color-scheme: light;
65
+ -webkit-font-smoothing: antialiased;
66
+ -moz-osx-font-smoothing: grayscale;
67
+ font-variant-numeric: tabular-nums;
68
+ }
69
+
70
+ .mach-size--compact {
71
+ --mach-font-size: 12px;
72
+ --mach-cell-padding: 6px;
73
+ }
74
+
75
+ .mach-size--normal {
76
+ --mach-font-size: 13px;
77
+ --mach-cell-padding: 9px;
78
+ }
79
+
80
+ .mach-size--large {
81
+ --mach-font-size: 14px;
82
+ --mach-cell-padding: 12px;
83
+ }
84
+
85
+ .mach-root.mach-cell-borders {
86
+ --mach-cell-border-color: var(--mach-border-color);
87
+ }
88
+
89
+ .mach-root.mach-theme-dark,
90
+ .mach-root.mach-theme-dark.mach-size--compact,
91
+ .mach-root.mach-theme-dark.mach-size--normal,
92
+ .mach-root.mach-theme-dark.mach-size--large {
93
+ --mach-border-color: #26324a;
94
+ --mach-row-border-color: #1c2740;
95
+ --mach-header-bg: #101a2e;
96
+ --mach-header-group-bg: #16213a;
97
+ --mach-header-fg: #9fb0c7;
98
+ --mach-body-bg: #0d1526;
99
+ --mach-body-fg: #dbe4f0;
100
+ --mach-row-hover-bg: #142138;
101
+ --mach-row-selected-bg: #14304f;
102
+ --mach-zebra-bg: #0f1a2e;
103
+ --mach-cell-focus-color: #60a5fa;
104
+ --mach-primary: #60a5fa;
105
+ --mach-primary-weak: #1e3a5f;
106
+ --mach-scrollbar-thumb: #33415e;
107
+ --mach-success: #4ade80;
108
+ --mach-warning: #fbbf24;
109
+ --mach-danger: #f87171;
110
+ --mach-info: #38bdf8;
111
+ --mach-shadow-sm: 0 1px 4px rgba(0, 0, 0, 0.4);
112
+ --mach-shadow: 0 6px 20px rgba(0, 0, 0, 0.5);
113
+ color-scheme: dark;
114
+ }
115
+
116
+ .mach-root *,
117
+ .mach-root *::before,
118
+ .mach-root *::after {
119
+ box-sizing: border-box;
120
+ }
121
+
122
+ .mach-root:focus-visible {
123
+ outline: 2px solid var(--mach-primary);
124
+ outline-offset: -2px;
125
+ }
126
+
127
+ .mach-header {
128
+ display: flex;
129
+ flex-shrink: 0;
130
+ width: 100%;
131
+ height: var(--mach-header-h);
132
+ background: var(--mach-header-bg);
133
+ border-bottom: var(--mach-header-border-width) solid var(--mach-header-accent-color);
134
+ overflow: hidden;
135
+ position: relative;
136
+ z-index: 3;
137
+ user-select: none;
138
+ }
139
+
140
+ .mach-body {
141
+ display: flex;
142
+ flex: 1;
143
+ min-height: 0;
144
+ width: 100%;
145
+ position: relative;
146
+ overflow: hidden;
147
+ }
148
+
149
+ .mach-pane {
150
+ position: relative;
151
+ overflow: hidden;
152
+ flex-shrink: 0;
153
+ }
154
+
155
+ .mach-pane--center {
156
+ flex: 1 1 auto;
157
+ min-width: 0;
158
+ }
159
+
160
+ .mach-pane--hidden {
161
+ display: none;
162
+ }
163
+
164
+ .mach-header-viewport {
165
+ width: 100%;
166
+ height: 100%;
167
+ overflow: hidden;
168
+ }
169
+
170
+ .mach-header-rows {
171
+ position: relative;
172
+ height: 100%;
173
+ width: 100%;
174
+ }
175
+
176
+ .mach-header-row {
177
+ position: absolute;
178
+ left: 0;
179
+ }
180
+
181
+ .mach-header-row .mach-header-cell {
182
+ position: absolute;
183
+ top: 0;
184
+ }
185
+
186
+ .mach-header-cell--group {
187
+ justify-content: center;
188
+ border-bottom: var(--mach-border-width) solid var(--mach-border-color);
189
+ font-weight: var(--mach-header-font-weight);
190
+ background: var(--mach-header-group-bg);
191
+ }
192
+
193
+ .mach-header-cell--sorted {
194
+ color: var(--mach-primary);
195
+ }
196
+
197
+ .mach-header-label--custom {
198
+ display: inline-flex;
199
+ align-items: center;
200
+ min-width: 0;
201
+ overflow: hidden;
202
+ }
203
+
204
+ .mach-header-cell {
205
+ display: flex;
206
+ align-items: center;
207
+ gap: 4px;
208
+ padding: 0 var(--mach-cell-padding);
209
+ border-right: var(--mach-border-width) solid transparent;
210
+ color: var(--mach-header-fg);
211
+ font-weight: var(--mach-header-font-weight);
212
+ font-size: calc(var(--mach-font-size) - 1px);
213
+ letter-spacing: 0.2px;
214
+ cursor: default;
215
+ overflow: hidden;
216
+ white-space: nowrap;
217
+ background: var(--mach-header-bg);
218
+ transition: color var(--mach-transition);
219
+ }
220
+
221
+ .mach-root.mach-cell-borders .mach-header-cell {
222
+ border-right-color: var(--mach-border-color);
223
+ }
224
+
225
+ .mach-header-label {
226
+ flex: 1;
227
+ min-width: 0;
228
+ overflow: hidden;
229
+ text-overflow: ellipsis;
230
+ cursor: pointer;
231
+ }
232
+
233
+ .mach-sort-indicator {
234
+ display: inline-flex;
235
+ align-items: center;
236
+ gap: 3px;
237
+ color: var(--mach-primary);
238
+ flex-shrink: 0;
239
+ }
240
+
241
+ .mach-sort-indicator:empty {
242
+ display: none;
243
+ }
244
+
245
+ .mach-sort-badge {
246
+ font-size: 9px;
247
+ line-height: 1;
248
+ padding: 1.5px 4px;
249
+ border-radius: 999px;
250
+ background: var(--mach-primary-weak);
251
+ color: var(--mach-primary);
252
+ font-weight: 600;
253
+ }
254
+
255
+ .mach-filter-btn {
256
+ display: inline-flex;
257
+ align-items: center;
258
+ justify-content: center;
259
+ width: 18px;
260
+ height: 18px;
261
+ padding: 0;
262
+ border: none;
263
+ border-radius: var(--mach-radius-sm);
264
+ background: transparent;
265
+ color: inherit;
266
+ opacity: 0.3;
267
+ cursor: pointer;
268
+ flex-shrink: 0;
269
+ }
270
+
271
+ .mach-filter-btn:hover {
272
+ opacity: 0.85;
273
+ background: var(--mach-row-hover-bg);
274
+ }
275
+
276
+ .mach-filter-btn--active {
277
+ opacity: 1;
278
+ color: var(--mach-primary);
279
+ }
280
+
281
+ .mach-filter-tag {
282
+ display: inline-flex;
283
+ align-items: center;
284
+ max-width: 96px;
285
+ overflow: hidden;
286
+ text-overflow: ellipsis;
287
+ white-space: nowrap;
288
+ padding: 0 6px;
289
+ height: 16px;
290
+ line-height: 16px;
291
+ border-radius: 999px;
292
+ background: var(--mach-primary-weak);
293
+ color: var(--mach-primary);
294
+ font-size: 10px;
295
+ font-weight: 500;
296
+ flex-shrink: 0;
297
+ }
298
+
299
+ .mach-menu-btn {
300
+ display: inline-flex;
301
+ align-items: center;
302
+ justify-content: center;
303
+ width: 18px;
304
+ height: 18px;
305
+ padding: 0;
306
+ border: none;
307
+ border-radius: var(--mach-radius-sm);
308
+ background: transparent;
309
+ color: inherit;
310
+ opacity: 0.3;
311
+ cursor: pointer;
312
+ flex-shrink: 0;
313
+ font-size: 12px;
314
+ line-height: 1;
315
+ }
316
+
317
+ .mach-menu-btn:hover {
318
+ opacity: 0.85;
319
+ background: var(--mach-row-hover-bg);
320
+ }
321
+
322
+ .mach-header-resize {
323
+ position: absolute;
324
+ top: 0;
325
+ right: -3px;
326
+ width: 6px;
327
+ height: 100%;
328
+ cursor: col-resize;
329
+ z-index: 2;
330
+ touch-action: none;
331
+ }
332
+
333
+ .mach-header-resize:hover::after,
334
+ .mach-root--resizing .mach-header-resize::after {
335
+ content: "";
336
+ position: absolute;
337
+ inset: 0;
338
+ background: var(--mach-primary);
339
+ opacity: 0.45;
340
+ border-radius: 1px;
341
+ }
342
+
343
+ .mach-header-cell--dragging {
344
+ opacity: 0.4;
345
+ }
346
+
347
+ .mach-drop-indicator {
348
+ position: absolute;
349
+ top: 3px;
350
+ width: 2px;
351
+ height: calc(100% - 6px);
352
+ border-radius: 2px;
353
+ background: var(--mach-primary);
354
+ z-index: 4;
355
+ pointer-events: none;
356
+ }
357
+
358
+ .mach-root--dragging {
359
+ cursor: grabbing;
360
+ }
361
+
362
+ .mach-root--dragging .mach-header-cell,
363
+ .mach-root--resizing .mach-header-cell {
364
+ cursor: default;
365
+ }
366
+
367
+ .mach-root--resizing {
368
+ cursor: col-resize;
369
+ }
370
+
371
+ .mach-body-viewport {
372
+ position: relative;
373
+ width: 100%;
374
+ height: 100%;
375
+ overflow: hidden;
376
+ }
377
+
378
+ .mach-body-viewport--scroll {
379
+ overflow: auto;
380
+ overscroll-behavior: contain;
381
+ }
382
+
383
+ .mach-body-viewport--scroll {
384
+ scrollbar-width: thin;
385
+ scrollbar-color: var(--mach-scrollbar-thumb) transparent;
386
+ }
387
+
388
+ .mach-body-viewport--scroll::-webkit-scrollbar {
389
+ width: 10px;
390
+ height: 10px;
391
+ }
392
+
393
+ .mach-body-viewport--scroll::-webkit-scrollbar-track {
394
+ background: transparent;
395
+ }
396
+
397
+ .mach-body-viewport--scroll::-webkit-scrollbar-thumb {
398
+ background: var(--mach-scrollbar-thumb);
399
+ border-radius: 999px;
400
+ border: 3px solid transparent;
401
+ background-clip: padding-box;
402
+ transition: background-color var(--mach-transition);
403
+ }
404
+
405
+ .mach-body-viewport--scroll::-webkit-scrollbar-thumb:hover {
406
+ background: color-mix(in srgb, var(--mach-scrollbar-thumb) 60%, var(--mach-primary));
407
+ background-clip: padding-box;
408
+ }
409
+
410
+ .mach-body-viewport--scroll::-webkit-scrollbar-thumb:active {
411
+ background: var(--mach-primary);
412
+ background-clip: padding-box;
413
+ }
414
+
415
+ .mach-body-viewport--scroll::-webkit-scrollbar-corner {
416
+ background: transparent;
417
+ }
418
+
419
+ .mach-row-container {
420
+ position: relative;
421
+ width: 100%;
422
+ }
423
+
424
+ .mach-row {
425
+ position: absolute;
426
+ top: 0;
427
+ left: 0;
428
+ display: flex;
429
+ width: 100%;
430
+ background: var(--mach-body-bg);
431
+ border-bottom: var(--mach-border-width) solid var(--mach-row-border-color);
432
+ contain: layout style;
433
+ }
434
+
435
+ .mach-row,
436
+ .mach-row .mach-cell {
437
+ transition: background-color var(--mach-transition);
438
+ }
439
+
440
+ .mach-root.mach-striped .mach-row--odd,
441
+ .mach-root.mach-striped .mach-row--odd .mach-cell {
442
+ background: var(--mach-zebra-bg);
443
+ }
444
+
445
+ .mach-cell {
446
+ position: absolute;
447
+ display: flex;
448
+ align-items: center;
449
+ padding: 0 var(--mach-cell-padding);
450
+ border-right: 1px solid var(--mach-cell-border-color);
451
+ overflow: hidden;
452
+ white-space: nowrap;
453
+ text-overflow: ellipsis;
454
+ cursor: default;
455
+ line-height: calc(var(--mach-row-h) - 2px);
456
+ }
457
+
458
+ .mach-cell--num {
459
+ justify-content: flex-end;
460
+ }
461
+
462
+ .mach-cell--selection {
463
+ justify-content: center;
464
+ padding: 0;
465
+ }
466
+
467
+ .mach-cell--editing {
468
+ padding: 0 3px;
469
+ }
470
+
471
+ .mach-cell--focus {
472
+ box-shadow: inset 0 0 0 var(--mach-focus-width) var(--mach-cell-focus-color);
473
+ border-radius: var(--mach-radius-sm);
474
+ z-index: 1;
475
+ }
476
+
477
+ .mach-row--hover,
478
+ .mach-row--hover .mach-cell {
479
+ background: var(--mach-row-hover-bg);
480
+ }
481
+
482
+ .mach-row--selected,
483
+ .mach-row--selected .mach-cell {
484
+ background: var(--mach-row-selected-bg);
485
+ }
486
+
487
+ .mach-row--selected.mach-row--hover,
488
+ .mach-row--selected.mach-row--hover .mach-cell {
489
+ background: var(--mach-row-selected-bg);
490
+ filter: brightness(0.985);
491
+ }
492
+
493
+ input.mach-row-checkbox,
494
+ input.mach-select-all {
495
+ width: 13px;
496
+ height: 13px;
497
+ margin: 0;
498
+ accent-color: var(--mach-primary);
499
+ cursor: pointer;
500
+ flex-shrink: 0;
501
+ }
502
+
503
+ .mach-detail-row {
504
+ background: var(--mach-zebra-bg);
505
+ z-index: 0;
506
+ }
507
+
508
+ .mach-detail {
509
+ height: 100%;
510
+ overflow: auto;
511
+ padding: 10px 12px;
512
+ }
513
+
514
+ .mach-cell--detail-toggle {
515
+ justify-content: center;
516
+ padding: 0;
517
+ cursor: pointer;
518
+ }
519
+
520
+ .mach-detail-toggle {
521
+ display: inline-flex;
522
+ align-items: center;
523
+ justify-content: center;
524
+ width: 100%;
525
+ font-size: 10px;
526
+ color: var(--mach-header-fg);
527
+ transition: transform 0.15s ease;
528
+ }
529
+
530
+ .mach-detail-toggle--open {
531
+ transform: rotate(90deg);
532
+ }
533
+
534
+ .mach-cell--group {
535
+ cursor: pointer;
536
+ background: var(--mach-header-bg);
537
+ }
538
+
539
+ .mach-row .mach-cell--group,
540
+ .mach-row:has(.mach-cell--group) {
541
+ background: var(--mach-header-bg);
542
+ }
543
+
544
+ .mach-group-label {
545
+ display: inline-flex;
546
+ align-items: center;
547
+ gap: 5px;
548
+ min-width: 0;
549
+ overflow: hidden;
550
+ }
551
+
552
+ .mach-group-text {
553
+ font-weight: 600;
554
+ white-space: nowrap;
555
+ overflow: hidden;
556
+ text-overflow: ellipsis;
557
+ }
558
+
559
+ .mach-group-count {
560
+ color: var(--mach-header-fg);
561
+ font-size: 10px;
562
+ flex-shrink: 0;
563
+ opacity: 0.8;
564
+ }
565
+
566
+ .mach-tree-cell {
567
+ display: inline-flex;
568
+ align-items: center;
569
+ gap: 5px;
570
+ min-width: 0;
571
+ width: 100%;
572
+ }
573
+
574
+ .mach-tree-indent {
575
+ flex-shrink: 0;
576
+ }
577
+
578
+ .mach-tree-toggle-spacer {
579
+ width: 10px;
580
+ flex-shrink: 0;
581
+ }
582
+
583
+ .mach-tree-text {
584
+ overflow: hidden;
585
+ text-overflow: ellipsis;
586
+ white-space: nowrap;
587
+ }
588
+
589
+ .mach-cell--drag {
590
+ justify-content: center;
591
+ padding: 0;
592
+ cursor: grab;
593
+ }
594
+
595
+ .mach-row-drag-handle {
596
+ color: var(--mach-header-fg);
597
+ opacity: 0.5;
598
+ font-size: 12px;
599
+ cursor: grab;
600
+ user-select: none;
601
+ }
602
+
603
+ .mach-row-drag-handle:hover {
604
+ opacity: 1;
605
+ color: var(--mach-primary);
606
+ }
607
+
608
+ .mach-row-drop-indicator {
609
+ position: absolute;
610
+ left: 0;
611
+ width: 100%;
612
+ height: 2px;
613
+ background: var(--mach-primary);
614
+ z-index: 5;
615
+ pointer-events: none;
616
+ }
617
+
618
+ .mach-root--row-dragging {
619
+ cursor: grabbing;
620
+ }
621
+
622
+ .mach-root--row-dragging .mach-row {
623
+ cursor: grabbing;
624
+ }
625
+
626
+ .mach-cell--index {
627
+ color: var(--mach-header-fg);
628
+ font-size: calc(var(--mach-font-size) - 1px);
629
+ }
630
+
631
+ .mach-editor-input.mach-editor-invalid,
632
+ .mach-editor-invalid .mach-editor-input,
633
+ .mach-editor-invalid.mach-editor-select,
634
+ .mach-editor-invalid input,
635
+ .mach-editor-invalid select {
636
+ border-color: #ef4444 !important;
637
+ box-shadow: 0 0 0 1px rgba(239, 68, 68, 0.35);
638
+ }
639
+
640
+ .mach-footer {
641
+ display: flex;
642
+ flex-shrink: 0;
643
+ width: 100%;
644
+ overflow: hidden;
645
+ background: var(--mach-header-bg);
646
+ border-top: 1px solid var(--mach-border-color);
647
+ font-weight: 600;
648
+ color: var(--mach-header-fg);
649
+ position: relative;
650
+ z-index: 3;
651
+ }
652
+
653
+ .mach-footer-row {
654
+ position: relative;
655
+ overflow: hidden;
656
+ flex-shrink: 0;
657
+ }
658
+
659
+ .mach-footer-row--center {
660
+ flex: 1 1 auto;
661
+ min-width: 0;
662
+ }
663
+
664
+ .mach-footer-cell {
665
+ position: absolute;
666
+ top: 0;
667
+ display: flex;
668
+ align-items: center;
669
+ padding: 0 var(--mach-cell-padding);
670
+ border-right: 1px solid transparent;
671
+ overflow: hidden;
672
+ white-space: nowrap;
673
+ text-overflow: ellipsis;
674
+ height: 100%;
675
+ font-variant-numeric: tabular-nums;
676
+ }
677
+
678
+ .mach-root.mach-cell-borders .mach-footer-cell {
679
+ border-right-color: var(--mach-border-color);
680
+ }
681
+
682
+ .mach-cell--range {
683
+ background: color-mix(in srgb, var(--mach-primary) 7%, transparent) !important;
684
+ }
685
+
686
+ .mach-cell--range.mach-cell--range-top {
687
+ box-shadow: inset 0 1.5px 0 var(--mach-primary);
688
+ }
689
+
690
+ .mach-cell--range.mach-cell--range-bottom {
691
+ box-shadow: inset 0 -1.5px 0 var(--mach-primary);
692
+ }
693
+
694
+ .mach-cell--range.mach-cell--range-left {
695
+ box-shadow: inset 1.5px 0 0 var(--mach-primary);
696
+ }
697
+
698
+ .mach-cell--range.mach-cell--range-right {
699
+ box-shadow: inset -1.5px 0 0 var(--mach-primary);
700
+ }
701
+
702
+ .mach-cell--range.mach-cell--range-top.mach-cell--range-left {
703
+ box-shadow: inset 1.5px 1.5px 0 var(--mach-primary);
704
+ }
705
+
706
+ .mach-cell--range.mach-cell--range-top.mach-cell--range-right {
707
+ box-shadow: inset -1.5px 1.5px 0 var(--mach-primary);
708
+ }
709
+
710
+ .mach-cell--range.mach-cell--range-bottom.mach-cell--range-left {
711
+ box-shadow: inset 1.5px -1.5px 0 var(--mach-primary);
712
+ }
713
+
714
+ .mach-cell--range.mach-cell--range-bottom.mach-cell--range-right {
715
+ box-shadow: inset -1.5px -1.5px 0 var(--mach-primary);
716
+ }
717
+
718
+ .mach-cell--range.mach-cell--focus {
719
+ box-shadow: inset 0 0 0 var(--mach-focus-width) var(--mach-cell-focus-color);
720
+ }
721
+
722
+ .mach-context-menu {
723
+ position: fixed;
724
+ z-index: var(--mach-z-menu);
725
+ display: flex;
726
+ flex-direction: column;
727
+ min-width: 140px;
728
+ padding: 5px;
729
+ background: var(--mach-body-bg);
730
+ color: var(--mach-body-fg);
731
+ border: 1px solid var(--mach-border-color);
732
+ border-radius: var(--mach-radius-lg);
733
+ box-shadow: var(--mach-shadow);
734
+ font-family: var(--mach-font-family);
735
+ font-size: var(--mach-font-size);
736
+ }
737
+
738
+ .mach-context-menu-item {
739
+ text-align: left;
740
+ padding: 6px 10px;
741
+ border: none;
742
+ border-radius: var(--mach-radius);
743
+ background: transparent;
744
+ color: inherit;
745
+ font: inherit;
746
+ cursor: pointer;
747
+ white-space: nowrap;
748
+ }
749
+
750
+ .mach-context-menu-item:hover {
751
+ background: var(--mach-row-hover-bg);
752
+ color: var(--mach-primary);
753
+ }
754
+
755
+ .mach-fill-handle {
756
+ position: absolute;
757
+ width: 8px;
758
+ height: 8px;
759
+ border-radius: 2px;
760
+ background: var(--mach-primary);
761
+ border: 1.5px solid var(--mach-body-bg);
762
+ cursor: crosshair;
763
+ z-index: 6;
764
+ box-shadow: 0 0 0 1px rgba(37, 99, 235, 0.35);
765
+ }
766
+
767
+ .mach-root--filling,
768
+ .mach-root--filling * {
769
+ user-select: none !important;
770
+ cursor: crosshair !important;
771
+ }
772
+
773
+ .mach-infinite-loading {
774
+ position: absolute;
775
+ left: 50%;
776
+ bottom: 14px;
777
+ transform: translateX(-50%);
778
+ display: flex;
779
+ align-items: center;
780
+ gap: 8px;
781
+ padding: 5px 14px;
782
+ border-radius: 999px;
783
+ background: var(--mach-body-bg);
784
+ border: 1px solid var(--mach-border-color);
785
+ box-shadow: var(--mach-shadow-sm);
786
+ color: var(--mach-header-fg);
787
+ font-size: 12px;
788
+ z-index: var(--mach-z-loading);
789
+ }
790
+
791
+ .mach-infinite-loading .mach-spinner {
792
+ width: 14px;
793
+ height: 14px;
794
+ border-width: 2px;
795
+ }
796
+
797
+ .mach-statusbar {
798
+ display: flex;
799
+ align-items: center;
800
+ gap: 18px;
801
+ flex-shrink: 0;
802
+ height: 28px;
803
+ padding: 0 12px;
804
+ background: var(--mach-header-bg);
805
+ border-top: 1px solid var(--mach-border-color);
806
+ color: var(--mach-header-fg);
807
+ font-size: 11px;
808
+ overflow: hidden;
809
+ white-space: nowrap;
810
+ font-variant-numeric: tabular-nums;
811
+ }
812
+
813
+ .mach-statusbar-item--rangeAggregate {
814
+ margin-left: auto;
815
+ }
816
+
817
+ .mach-pinned-rows {
818
+ display: flex;
819
+ width: 100%;
820
+ overflow: hidden;
821
+ background: var(--mach-header-bg);
822
+ flex-shrink: 0;
823
+ border-bottom: 1px solid var(--mach-border-color);
824
+ }
825
+
826
+ .mach-pinned-rows--bottom {
827
+ border-bottom: none;
828
+ border-top: 1px solid var(--mach-border-color);
829
+ }
830
+
831
+ .mach-pinned-viewport {
832
+ flex: 1 1 auto;
833
+ min-width: 0;
834
+ overflow: hidden;
835
+ }
836
+
837
+ .mach-pinned-seg {
838
+ position: relative;
839
+ overflow: hidden;
840
+ flex-shrink: 0;
841
+ }
842
+
843
+ .mach-pinned-seg--center {
844
+ position: relative;
845
+ }
846
+
847
+ .mach-pinned-row {
848
+ position: relative;
849
+ width: 100%;
850
+ border-bottom: 1px solid var(--mach-row-border-color);
851
+ }
852
+
853
+ .mach-pinned-row .mach-cell {
854
+ position: absolute;
855
+ top: 0;
856
+ background: var(--mach-header-bg);
857
+ font-weight: 600;
858
+ color: var(--mach-header-fg);
859
+ }
860
+
861
+ .mach-pinned-row:last-child {
862
+ border-bottom: none;
863
+ }
864
+
865
+ .mach-cell--wrap {
866
+ white-space: normal;
867
+ word-break: break-word;
868
+ line-height: 1.45;
869
+ align-items: flex-start;
870
+ padding-top: 5px;
871
+ padding-bottom: 5px;
872
+ }
873
+
874
+ .mach-editor-input,
875
+ .mach-editor-select {
876
+ width: 100%;
877
+ height: calc(var(--mach-row-h) - 8px);
878
+ padding: 0 6px;
879
+ border: 1px solid var(--mach-primary);
880
+ border-radius: var(--mach-radius-sm);
881
+ font-family: inherit;
882
+ font-size: var(--mach-font-size);
883
+ color: inherit;
884
+ background: var(--mach-body-bg);
885
+ outline: none;
886
+ }
887
+
888
+ .mach-overlay {
889
+ position: absolute;
890
+ inset: 0;
891
+ display: flex;
892
+ align-items: center;
893
+ justify-content: center;
894
+ background: var(--mach-body-bg);
895
+ z-index: var(--mach-z-overlay);
896
+ }
897
+
898
+ .mach-overlay-text {
899
+ color: var(--mach-header-fg);
900
+ font-size: var(--mach-font-size);
901
+ }
902
+
903
+ .mach-spinner {
904
+ width: 22px;
905
+ height: 22px;
906
+ border: 2px solid var(--mach-border-color);
907
+ border-top-color: var(--mach-primary);
908
+ border-radius: 50%;
909
+ animation: mach-spin 0.8s linear infinite;
910
+ }
911
+
912
+ @keyframes mach-spin {
913
+ to {
914
+ transform: rotate(360deg);
915
+ }
916
+ }
917
+
918
+ .mach-filter-panel {
919
+ position: fixed;
920
+ z-index: var(--mach-z-popup);
921
+ display: flex;
922
+ flex-direction: column;
923
+ gap: 8px;
924
+ min-width: 190px;
925
+ padding: 10px;
926
+ background: var(--mach-body-bg);
927
+ color: var(--mach-body-fg);
928
+ border: 1px solid var(--mach-border-color);
929
+ border-radius: var(--mach-radius-lg);
930
+ box-shadow: var(--mach-shadow);
931
+ font-family: var(--mach-font-family);
932
+ font-size: var(--mach-font-size);
933
+ }
934
+
935
+ .mach-filter-body {
936
+ display: flex;
937
+ flex-direction: column;
938
+ gap: 6px;
939
+ }
940
+
941
+ .mach-filter-select,
942
+ .mach-filter-input {
943
+ width: 100%;
944
+ height: 27px;
945
+ padding: 0 7px;
946
+ border: 1px solid var(--mach-border-color);
947
+ border-radius: var(--mach-radius);
948
+ font-family: inherit;
949
+ font-size: var(--mach-font-size);
950
+ color: inherit;
951
+ background: var(--mach-body-bg);
952
+ outline: none;
953
+ }
954
+
955
+ .mach-filter-select:focus,
956
+ .mach-filter-input:focus {
957
+ border-color: var(--mach-primary);
958
+ }
959
+
960
+ .mach-filter-set-list {
961
+ max-height: 220px;
962
+ overflow: auto;
963
+ display: flex;
964
+ flex-direction: column;
965
+ gap: 1px;
966
+ border: 1px solid var(--mach-border-color);
967
+ border-radius: var(--mach-radius);
968
+ padding: 4px;
969
+ }
970
+
971
+ .mach-filter-set-item {
972
+ display: flex;
973
+ align-items: center;
974
+ gap: 6px;
975
+ padding: 3px 5px;
976
+ border-radius: var(--mach-radius-sm);
977
+ cursor: pointer;
978
+ white-space: nowrap;
979
+ overflow: hidden;
980
+ text-overflow: ellipsis;
981
+ }
982
+
983
+ .mach-filter-set-item:hover {
984
+ background: var(--mach-row-hover-bg);
985
+ }
986
+
987
+ .mach-filter-set-item input {
988
+ accent-color: var(--mach-primary);
989
+ margin: 0;
990
+ width: 13px;
991
+ height: 13px;
992
+ }
993
+
994
+ .mach-filter-footer {
995
+ display: flex;
996
+ justify-content: flex-end;
997
+ gap: 6px;
998
+ }
999
+
1000
+ .mach-filter-footer button {
1001
+ padding: 4px 12px;
1002
+ border-radius: var(--mach-radius);
1003
+ border: 1px solid var(--mach-border-color);
1004
+ background: var(--mach-body-bg);
1005
+ color: inherit;
1006
+ font-family: inherit;
1007
+ font-size: var(--mach-font-size);
1008
+ cursor: pointer;
1009
+ }
1010
+
1011
+ .mach-filter-footer button:hover {
1012
+ border-color: var(--mach-primary);
1013
+ color: var(--mach-primary);
1014
+ }
1015
+
1016
+ .mach-filter-btn-apply {
1017
+ background: var(--mach-primary) !important;
1018
+ border-color: var(--mach-primary) !important;
1019
+ color: #fff !important;
1020
+ }
1021
+
1022
+ .mach-filter-btn-apply:hover {
1023
+ opacity: 0.9;
1024
+ color: #fff !important;
1025
+ }
1026
+
1027
+ .mach-column-panel {
1028
+ min-width: 200px;
1029
+ max-height: 70vh;
1030
+ overflow: auto;
1031
+ }
1032
+
1033
+ .mach-column-panel-title {
1034
+ font-weight: 600;
1035
+ color: var(--mach-header-fg);
1036
+ white-space: nowrap;
1037
+ overflow: hidden;
1038
+ text-overflow: ellipsis;
1039
+ }
1040
+
1041
+ .mach-column-panel-subtitle {
1042
+ font-size: 11px;
1043
+ color: var(--mach-header-fg);
1044
+ margin-top: 2px;
1045
+ }
1046
+
1047
+ .mach-column-panel-actions {
1048
+ display: flex;
1049
+ gap: 6px;
1050
+ flex-wrap: wrap;
1051
+ }
1052
+
1053
+ .mach-column-panel-btn {
1054
+ flex: 1;
1055
+ min-width: 60px;
1056
+ padding: 4px 8px;
1057
+ border-radius: var(--mach-radius);
1058
+ border: 1px solid var(--mach-border-color);
1059
+ background: var(--mach-body-bg);
1060
+ color: inherit;
1061
+ font-family: inherit;
1062
+ font-size: 12px;
1063
+ cursor: pointer;
1064
+ white-space: nowrap;
1065
+ }
1066
+
1067
+ .mach-column-panel-btn:hover {
1068
+ border-color: var(--mach-primary);
1069
+ color: var(--mach-primary);
1070
+ }
1071
+
1072
+ .mach-column-panel-divider {
1073
+ height: 1px;
1074
+ background: var(--mach-border-color);
1075
+ margin: 4px 0;
1076
+ }
1077
+
1078
+ .mach-column-panel-list {
1079
+ max-height: 180px;
1080
+ overflow: auto;
1081
+ display: flex;
1082
+ flex-direction: column;
1083
+ gap: 1px;
1084
+ border: 1px solid var(--mach-border-color);
1085
+ border-radius: var(--mach-radius);
1086
+ padding: 4px;
1087
+ }
1088
+
1089
+ .mach-tag {
1090
+ display: inline-flex;
1091
+ align-items: center;
1092
+ gap: 4px;
1093
+ padding: 0 8px;
1094
+ height: 20px;
1095
+ line-height: 18px;
1096
+ border-radius: 999px;
1097
+ font-size: var(--mach-font-size-sm);
1098
+ font-weight: 500;
1099
+ white-space: nowrap;
1100
+ }
1101
+
1102
+ .mach-tag::before {
1103
+ content: "";
1104
+ width: 5px;
1105
+ height: 5px;
1106
+ border-radius: 999px;
1107
+ background: currentColor;
1108
+ }
1109
+
1110
+ .mach-tag--success {
1111
+ color: var(--mach-success);
1112
+ background: color-mix(in srgb, var(--mach-success) 10%, transparent);
1113
+ }
1114
+
1115
+ .mach-tag--warning {
1116
+ color: var(--mach-warning);
1117
+ background: color-mix(in srgb, var(--mach-warning) 12%, transparent);
1118
+ }
1119
+
1120
+ .mach-tag--danger {
1121
+ color: var(--mach-danger);
1122
+ background: color-mix(in srgb, var(--mach-danger) 10%, transparent);
1123
+ }
1124
+
1125
+ .mach-tag--info {
1126
+ color: var(--mach-info);
1127
+ background: color-mix(in srgb, var(--mach-info) 10%, transparent);
1128
+ }
1129
+
1130
+ .mach-tag--neutral {
1131
+ color: var(--mach-header-fg);
1132
+ background: color-mix(in srgb, var(--mach-header-fg) 10%, transparent);
1133
+ }
1134
+
1135
+ .mach-progress {
1136
+ display: flex;
1137
+ align-items: center;
1138
+ gap: 6px;
1139
+ width: 100%;
1140
+ }
1141
+
1142
+ .mach-progress__track {
1143
+ flex: 1;
1144
+ min-width: 0;
1145
+ height: 6px;
1146
+ border-radius: 999px;
1147
+ background: color-mix(in srgb, var(--mach-header-fg) 14%, transparent);
1148
+ overflow: hidden;
1149
+ }
1150
+
1151
+ .mach-progress__bar {
1152
+ height: 100%;
1153
+ border-radius: 999px;
1154
+ background: var(--mach-primary);
1155
+ transition: width var(--mach-transition);
1156
+ }
1157
+
1158
+ .mach-progress__label {
1159
+ flex-shrink: 0;
1160
+ font-size: var(--mach-font-size-sm);
1161
+ color: var(--mach-header-fg);
1162
+ font-variant-numeric: tabular-nums;
1163
+ }
1164
+
1165
+ .mach-link {
1166
+ color: var(--mach-primary);
1167
+ cursor: pointer;
1168
+ }
1169
+
1170
+ .mach-link:hover {
1171
+ text-decoration: underline;
1172
+ }
1173
+
1174
+ .mach-actions {
1175
+ display: inline-flex;
1176
+ align-items: center;
1177
+ gap: 2px;
1178
+ }
1179
+
1180
+ .mach-action-btn {
1181
+ display: inline-flex;
1182
+ align-items: center;
1183
+ justify-content: center;
1184
+ min-width: 24px;
1185
+ height: 24px;
1186
+ padding: 0 4px;
1187
+ border: none;
1188
+ border-radius: var(--mach-radius-sm);
1189
+ background: transparent;
1190
+ color: var(--mach-header-fg);
1191
+ font-size: var(--mach-font-size-sm);
1192
+ line-height: 1;
1193
+ cursor: pointer;
1194
+ white-space: nowrap;
1195
+ }
1196
+
1197
+ .mach-action-btn:hover {
1198
+ background: var(--mach-row-hover-bg);
1199
+ color: var(--mach-primary);
1200
+ }
1201
+
1202
+ .mach-action-btn--danger:hover {
1203
+ color: var(--mach-danger);
1204
+ }
1205
+
1206
+ .mach-action-btn--icon {
1207
+ padding: 0;
1208
+ width: 24px;
1209
+ }
1210
+
1211
+ .mach-context-menu-item--danger {
1212
+ color: var(--mach-danger);
1213
+ }
1214
+
1215
+ .mach-tooltip {
1216
+ position: fixed;
1217
+ z-index: var(--mach-z-menu);
1218
+ max-width: 320px;
1219
+ padding: 6px 10px;
1220
+ border-radius: var(--mach-radius);
1221
+ background: var(--mach-body-fg);
1222
+ color: var(--mach-body-bg);
1223
+ font-size: var(--mach-font-size-sm);
1224
+ line-height: 1.5;
1225
+ box-shadow: var(--mach-shadow);
1226
+ pointer-events: none;
1227
+ word-break: break-word;
1228
+ }
1229
+
1230
+ .mach-cell--flash {
1231
+ animation: mach-flash 0.8s ease-out;
1232
+ }
1233
+
1234
+ @keyframes mach-flash {
1235
+ 0% {
1236
+ background-color: color-mix(in srgb, var(--mach-primary) 35%, transparent);
1237
+ }
1238
+ 100% {
1239
+ background-color: transparent;
1240
+ }
1241
+ }
1242
+
1243
+ .mach-context-menu-separator {
1244
+ height: 1px;
1245
+ margin: 4px 6px;
1246
+ background: var(--mach-border-color);
1247
+ }
1248
+
1249
+ .mach-context-menu-item:disabled {
1250
+ opacity: 0.45;
1251
+ cursor: not-allowed;
1252
+ }
1253
+
1254
+ .mach-pagination {
1255
+ display: flex;
1256
+ align-items: center;
1257
+ justify-content: flex-end;
1258
+ gap: 6px;
1259
+ flex-shrink: 0;
1260
+ height: 40px;
1261
+ padding: 0 12px;
1262
+ background: var(--mach-body-bg);
1263
+ border-top: var(--mach-border-width) solid var(--mach-border-color);
1264
+ color: var(--mach-body-fg);
1265
+ font-size: var(--mach-font-size-sm);
1266
+ user-select: none;
1267
+ }
1268
+
1269
+ .mach-pagination-total {
1270
+ color: var(--mach-header-fg);
1271
+ margin-right: 8px;
1272
+ font-variant-numeric: tabular-nums;
1273
+ }
1274
+
1275
+ .mach-pagination-page {
1276
+ min-width: 72px;
1277
+ text-align: center;
1278
+ color: var(--mach-body-fg);
1279
+ font-variant-numeric: tabular-nums;
1280
+ }
1281
+
1282
+ .mach-pagination-btn {
1283
+ display: inline-flex;
1284
+ align-items: center;
1285
+ justify-content: center;
1286
+ width: 24px;
1287
+ height: 24px;
1288
+ border: var(--mach-border-width) solid var(--mach-border-color);
1289
+ border-radius: var(--mach-radius-sm);
1290
+ background: var(--mach-body-bg);
1291
+ color: var(--mach-header-fg);
1292
+ font-size: 13px;
1293
+ line-height: 1;
1294
+ cursor: pointer;
1295
+ transition: border-color var(--mach-transition), color var(--mach-transition),
1296
+ background-color var(--mach-transition);
1297
+ }
1298
+
1299
+ .mach-pagination-btn:hover:not(:disabled) {
1300
+ border-color: var(--mach-primary);
1301
+ color: var(--mach-primary);
1302
+ }
1303
+
1304
+ .mach-pagination-btn:disabled {
1305
+ opacity: 0.35;
1306
+ cursor: not-allowed;
1307
+ }
1308
+
1309
+ .mach-pagination-size {
1310
+ height: 24px;
1311
+ margin-left: 6px;
1312
+ padding: 0 4px;
1313
+ border: var(--mach-border-width) solid var(--mach-border-color);
1314
+ border-radius: var(--mach-radius-sm);
1315
+ background: var(--mach-body-bg);
1316
+ color: var(--mach-header-fg);
1317
+ font-size: var(--mach-font-size-sm);
1318
+ outline: none;
1319
+ cursor: pointer;
1320
+ }
1321
+
1322
+ .mach-pagination-size:focus-visible {
1323
+ border-color: var(--mach-primary);
1324
+ }
1325
+
1326
+ .mach-watermark {
1327
+ position: absolute;
1328
+ inset: 0;
1329
+ z-index: 6;
1330
+ pointer-events: none;
1331
+ background-repeat: repeat;
1332
+ }
1333
+
1334
+ .mach-empty {
1335
+ display: flex;
1336
+ flex-direction: column;
1337
+ align-items: center;
1338
+ justify-content: center;
1339
+ gap: 4px;
1340
+ padding: 32px 16px;
1341
+ min-height: 160px;
1342
+ }
1343
+
1344
+ .mach-empty__icon {
1345
+ margin-bottom: 6px;
1346
+ }
1347
+
1348
+ .mach-empty__title {
1349
+ font-size: var(--mach-font-size);
1350
+ color: var(--mach-body-fg);
1351
+ font-weight: 500;
1352
+ }
1353
+
1354
+ .mach-empty__hint {
1355
+ font-size: var(--mach-font-size-sm);
1356
+ color: var(--mach-header-fg);
1357
+ }
1358
+
1359
+ .mach-cell--center {
1360
+ justify-content: center;
1361
+ }
1362
+
1363
+ .mach-cell--right {
1364
+ justify-content: flex-end;
1365
+ }
1366
+
1367
+ .mach-header-cell--center .mach-header-label {
1368
+ text-align: center;
1369
+ }
1370
+
1371
+ .mach-header-cell--right .mach-header-label {
1372
+ text-align: right;
1373
+ }
1374
+
1375
+ @media (prefers-reduced-motion: reduce) {
1376
+ .mach-root *,
1377
+ .mach-root *::before,
1378
+ .mach-root *::after {
1379
+ scroll-behavior: auto !important;
1380
+ animation-duration: 0.01ms !important;
1381
+ animation-iteration-count: 1 !important;
1382
+ transition-duration: 0.01ms !important;
1383
+ }
1384
+ }