@agile-team/mach-table-vue 0.28.0 → 0.29.2

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.
@@ -3,7 +3,7 @@
3
3
  "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
4
4
  --mach-font-size: 13px;
5
5
  --mach-font-size-sm: 12px;
6
- --mach-header-font-weight: 600;
6
+ --mach-header-font-weight: 650;
7
7
  --mach-cell-padding: 9px;
8
8
  --mach-row-h: 36px;
9
9
  --mach-header-h: 40px;
@@ -21,10 +21,10 @@
21
21
  --mach-cell-border-color: transparent;
22
22
  --mach-border-width: 1px;
23
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;
24
+ --mach-header-accent-color: #d9e1eb;
25
+ --mach-header-bg: #f4f7fb;
26
+ --mach-header-group-bg: #edf2f8;
27
+ --mach-header-fg: #344054;
28
28
  --mach-body-bg: #ffffff;
29
29
  --mach-body-fg: #26303f;
30
30
 
@@ -133,7 +133,7 @@
133
133
  }
134
134
 
135
135
  .mach-toolbar__button,
136
- .mach-toolbar__select,
136
+ .mach-toolbar__select-host,
137
137
  .mach-toolbar__selection {
138
138
  height: 32px;
139
139
  padding: 0 10px;
@@ -152,7 +152,7 @@
152
152
  }
153
153
 
154
154
  .mach-toolbar__button:hover:not(:disabled),
155
- .mach-toolbar__select:hover {
155
+ .mach-toolbar__select-host:hover {
156
156
  color: var(--mach-primary, #2563eb);
157
157
  border-color: var(--mach-primary, #2563eb);
158
158
  }
@@ -169,6 +169,24 @@
169
169
  font-size: 12px;
170
170
  }
171
171
 
172
+ .mach-toolbar__select-host {
173
+ width: 82px;
174
+ padding: 0;
175
+ }
176
+
177
+ .mach-toolbar__select-control,
178
+ .mach-toolbar__select-control .mach-select-trigger {
179
+ width: 100%;
180
+ height: 100%;
181
+ }
182
+
183
+ .mach-toolbar__select-control .mach-select-trigger {
184
+ border: 0;
185
+ border-radius: 5px;
186
+ background: transparent;
187
+ box-shadow: none;
188
+ }
189
+
172
190
  @media (max-width: 640px) {
173
191
  .mach-toolbar { align-items: stretch; flex-direction: column; }
174
192
  .mach-toolbar__main, .mach-toolbar__aside { flex-wrap: wrap; }
@@ -200,9 +218,10 @@
200
218
  .mach-root.mach-theme-dark.mach-size--large {
201
219
  --mach-border-color: #26324a;
202
220
  --mach-row-border-color: #1c2740;
221
+ --mach-header-accent-color: #33415e;
203
222
  --mach-header-bg: #101a2e;
204
223
  --mach-header-group-bg: #16213a;
205
- --mach-header-fg: #9fb0c7;
224
+ --mach-header-fg: #c3cee0;
206
225
  --mach-body-bg: #0d1526;
207
226
  --mach-body-fg: #dbe4f0;
208
227
  --mach-row-hover-bg: #142138;
@@ -227,6 +246,13 @@
227
246
  box-sizing: border-box;
228
247
  }
229
248
 
249
+ .mach-portal,
250
+ .mach-portal *,
251
+ .mach-portal *::before,
252
+ .mach-portal *::after {
253
+ box-sizing: border-box;
254
+ }
255
+
230
256
  .mach-root:focus-visible {
231
257
  outline: 2px solid var(--mach-primary);
232
258
  outline-offset: -2px;
@@ -239,6 +265,7 @@
239
265
  height: var(--mach-header-h);
240
266
  background: var(--mach-header-bg);
241
267
  border-bottom: var(--mach-header-border-width) solid var(--mach-header-accent-color);
268
+ box-shadow: 0 1px 2px color-mix(in srgb, var(--mach-header-fg) 8%, transparent);
242
269
  overflow: hidden;
243
270
  position: relative;
244
271
  z-index: 3;
@@ -298,10 +325,6 @@
298
325
  background: var(--mach-header-group-bg);
299
326
  }
300
327
 
301
- .mach-header-cell--sorted {
302
- color: var(--mach-primary);
303
- }
304
-
305
328
  .mach-header-label--custom {
306
329
  display: inline-flex;
307
330
  align-items: center;
@@ -317,13 +340,22 @@
317
340
  border-right: var(--mach-border-width) solid transparent;
318
341
  color: var(--mach-header-fg);
319
342
  font-weight: var(--mach-header-font-weight);
320
- font-size: calc(var(--mach-font-size) - 1px);
321
- letter-spacing: 0.2px;
343
+ font-size: var(--mach-font-size);
344
+ letter-spacing: 0.15px;
322
345
  cursor: default;
323
346
  overflow: hidden;
324
347
  white-space: nowrap;
325
348
  background: var(--mach-header-bg);
326
- transition: color var(--mach-transition);
349
+ transition: color var(--mach-transition), background-color var(--mach-transition);
350
+ }
351
+
352
+ .mach-header-cell--leaf:hover {
353
+ background: color-mix(in srgb, var(--mach-primary) 4%, var(--mach-header-bg));
354
+ }
355
+
356
+ .mach-header-cell.mach-header-cell--sorted {
357
+ color: var(--mach-primary);
358
+ background: color-mix(in srgb, var(--mach-primary) 5%, var(--mach-header-bg));
327
359
  }
328
360
 
329
361
  .mach-root.mach-cell-borders .mach-header-cell {
@@ -338,6 +370,16 @@
338
370
  cursor: pointer;
339
371
  }
340
372
 
373
+ .mach-header-cell--selection {
374
+ justify-content: center;
375
+ gap: 0;
376
+ padding: 0;
377
+ }
378
+
379
+ .mach-header-cell--selection .mach-header-label:empty {
380
+ display: none;
381
+ }
382
+
341
383
  .mach-sort-indicator {
342
384
  display: inline-flex;
343
385
  align-items: center;
@@ -346,6 +388,11 @@
346
388
  flex-shrink: 0;
347
389
  }
348
390
 
391
+ .mach-sort-indicator svg {
392
+ width: 10px;
393
+ height: 10px;
394
+ }
395
+
349
396
  .mach-sort-indicator:empty {
350
397
  display: none;
351
398
  }
@@ -364,20 +411,32 @@
364
411
  display: inline-flex;
365
412
  align-items: center;
366
413
  justify-content: center;
367
- width: 18px;
368
- height: 18px;
414
+ width: 22px;
415
+ height: 22px;
369
416
  padding: 0;
370
417
  border: none;
371
418
  border-radius: var(--mach-radius-sm);
372
419
  background: transparent;
373
420
  color: inherit;
374
- opacity: 0.3;
421
+ opacity: 0.36;
375
422
  cursor: pointer;
376
423
  flex-shrink: 0;
424
+ transition: opacity var(--mach-transition), color var(--mach-transition), background-color var(--mach-transition);
425
+ }
426
+
427
+ .mach-filter-btn svg {
428
+ width: 12px;
429
+ height: 12px;
430
+ pointer-events: none;
431
+ }
432
+
433
+ .mach-header-cell:hover .mach-filter-btn,
434
+ .mach-header-cell:hover .mach-menu-btn {
435
+ opacity: 0.62;
377
436
  }
378
437
 
379
438
  .mach-filter-btn:hover {
380
- opacity: 0.85;
439
+ opacity: 1;
381
440
  background: var(--mach-row-hover-bg);
382
441
  }
383
442
 
@@ -408,25 +467,32 @@
408
467
  display: inline-flex;
409
468
  align-items: center;
410
469
  justify-content: center;
411
- width: 18px;
412
- height: 18px;
470
+ width: 22px;
471
+ height: 22px;
413
472
  padding: 0;
414
473
  border: none;
415
474
  border-radius: var(--mach-radius-sm);
416
475
  background: transparent;
417
476
  color: inherit;
418
- opacity: 0.3;
477
+ opacity: 0.36;
419
478
  cursor: pointer;
420
479
  flex-shrink: 0;
421
480
  font-size: 12px;
422
481
  line-height: 1;
482
+ transition: opacity var(--mach-transition), color var(--mach-transition), background-color var(--mach-transition);
423
483
  }
424
484
 
425
485
  .mach-menu-btn:hover {
426
- opacity: 0.85;
486
+ opacity: 1;
427
487
  background: var(--mach-row-hover-bg);
428
488
  }
429
489
 
490
+ .mach-menu-btn svg {
491
+ width: 12px;
492
+ height: 12px;
493
+ pointer-events: none;
494
+ }
495
+
430
496
  .mach-header-resize {
431
497
  position: absolute;
432
498
  top: 0;
@@ -449,18 +515,44 @@
449
515
  }
450
516
 
451
517
  .mach-header-cell--dragging {
452
- opacity: 0.4;
518
+ opacity: 0.22;
519
+ }
520
+
521
+ .mach-column-drag-ghost {
522
+ position: fixed;
523
+ top: 0;
524
+ left: 0;
525
+ z-index: calc(var(--mach-z-menu) + 1);
526
+ display: flex;
527
+ align-items: center;
528
+ height: var(--mach-header-h);
529
+ max-width: calc(100vw - 16px);
530
+ padding: 0 var(--mach-cell-padding);
531
+ overflow: hidden;
532
+ color: var(--mach-body-fg);
533
+ font: var(--mach-header-font-weight) var(--mach-font-size)/1.3 var(--mach-font-family);
534
+ text-overflow: ellipsis;
535
+ white-space: nowrap;
536
+ pointer-events: none;
537
+ background: var(--mach-body-bg);
538
+ border: 1px solid var(--mach-primary);
539
+ border-radius: var(--mach-radius);
540
+ box-shadow: var(--mach-shadow);
541
+ opacity: 0.96;
542
+ will-change: transform;
453
543
  }
454
544
 
455
545
  .mach-drop-indicator {
456
546
  position: absolute;
457
547
  top: 3px;
548
+ left: 0;
458
549
  width: 2px;
459
550
  height: calc(100% - 6px);
460
551
  border-radius: 2px;
461
552
  background: var(--mach-primary);
462
553
  z-index: 4;
463
554
  pointer-events: none;
555
+ will-change: transform;
464
556
  }
465
557
 
466
558
  .mach-root--dragging {
@@ -552,8 +644,10 @@
552
644
 
553
645
  .mach-cell {
554
646
  position: absolute;
647
+ top: 0;
555
648
  display: flex;
556
649
  align-items: center;
650
+ height: 100%;
557
651
  padding: 0 var(--mach-cell-padding);
558
652
  border-right: 1px solid var(--mach-cell-border-color);
559
653
  overflow: hidden;
@@ -605,6 +699,12 @@
605
699
  z-index: 1;
606
700
  }
607
701
 
702
+ .mach-cell--selection.mach-cell--focus {
703
+ box-shadow: none;
704
+ border-radius: 0;
705
+ z-index: auto;
706
+ }
707
+
608
708
  .mach-row--hover,
609
709
  .mach-row--hover .mach-cell {
610
710
  background: var(--mach-row-hover-bg);
@@ -755,12 +855,14 @@ input.mach-select-all {
755
855
 
756
856
  .mach-row-drop-indicator {
757
857
  position: absolute;
858
+ top: 0;
758
859
  left: 0;
759
860
  width: 100%;
760
861
  height: 2px;
761
862
  background: var(--mach-primary);
762
863
  z-index: 5;
763
864
  pointer-events: none;
865
+ will-change: transform;
764
866
  }
765
867
 
766
868
  .mach-root--row-dragging {
@@ -778,9 +880,9 @@ input.mach-select-all {
778
880
 
779
881
  .mach-editor-input.mach-editor-invalid,
780
882
  .mach-editor-invalid .mach-editor-input,
781
- .mach-editor-invalid.mach-editor-select,
883
+ .mach-editor-invalid .mach-select-trigger,
782
884
  .mach-editor-invalid input,
783
- .mach-editor-invalid select {
885
+ .mach-editor-invalid select:not([hidden]) {
784
886
  border-color: #ef4444 !important;
785
887
  box-shadow: 0 0 0 1px rgba(239, 68, 68, 0.35);
786
888
  }
@@ -836,42 +938,39 @@ input.mach-select-all {
836
938
  background: color-mix(in srgb, var(--mach-primary) 7%, transparent) !important;
837
939
  }
838
940
 
839
- .mach-cell--range.mach-cell--range-top {
840
- box-shadow: inset 0 1.5px 0 var(--mach-primary);
841
- }
842
-
843
- .mach-cell--range.mach-cell--range-bottom {
844
- box-shadow: inset 0 -1.5px 0 var(--mach-primary);
845
- }
846
-
847
- .mach-cell--range.mach-cell--range-left {
848
- box-shadow: inset 1.5px 0 0 var(--mach-primary);
849
- }
850
-
851
- .mach-cell--range.mach-cell--range-right {
852
- box-shadow: inset -1.5px 0 0 var(--mach-primary);
941
+ .mach-cell--range::after {
942
+ content: "";
943
+ position: absolute;
944
+ inset: 0;
945
+ z-index: 2;
946
+ border: 0 solid var(--mach-primary);
947
+ pointer-events: none;
853
948
  }
854
949
 
855
- .mach-cell--range.mach-cell--range-top.mach-cell--range-left {
856
- box-shadow: inset 1.5px 1.5px 0 var(--mach-primary);
950
+ .mach-cell--range.mach-cell--range-top::after {
951
+ border-top-width: 1.5px;
857
952
  }
858
953
 
859
- .mach-cell--range.mach-cell--range-top.mach-cell--range-right {
860
- box-shadow: inset -1.5px 1.5px 0 var(--mach-primary);
954
+ .mach-cell--range.mach-cell--range-bottom::after {
955
+ border-bottom-width: 1.5px;
861
956
  }
862
957
 
863
- .mach-cell--range.mach-cell--range-bottom.mach-cell--range-left {
864
- box-shadow: inset 1.5px -1.5px 0 var(--mach-primary);
958
+ .mach-cell--range.mach-cell--range-left::after {
959
+ border-left-width: 1.5px;
865
960
  }
866
961
 
867
- .mach-cell--range.mach-cell--range-bottom.mach-cell--range-right {
868
- box-shadow: inset -1.5px -1.5px 0 var(--mach-primary);
962
+ .mach-cell--range.mach-cell--range-right::after {
963
+ border-right-width: 1.5px;
869
964
  }
870
965
 
871
966
  .mach-cell--range.mach-cell--focus {
872
967
  box-shadow: inset 0 0 0 var(--mach-focus-width) var(--mach-cell-focus-color);
873
968
  }
874
969
 
970
+ .mach-cell--range.mach-cell--focus::after {
971
+ display: none;
972
+ }
973
+
875
974
  .mach-context-menu {
876
975
  position: fixed;
877
976
  z-index: var(--mach-z-menu);
@@ -1025,7 +1124,7 @@ input.mach-select-all {
1025
1124
  }
1026
1125
 
1027
1126
  .mach-editor-input,
1028
- .mach-editor-select {
1127
+ .mach-editor-select-control .mach-select-trigger {
1029
1128
  width: 100%;
1030
1129
  height: calc(var(--mach-row-h) - 8px);
1031
1130
  padding: 0 6px;
@@ -1038,6 +1137,167 @@ input.mach-select-all {
1038
1137
  outline: none;
1039
1138
  }
1040
1139
 
1140
+ .mach-select-control {
1141
+ position: relative;
1142
+ display: inline-flex;
1143
+ min-width: 0;
1144
+ font-family: var(--mach-font-family, inherit);
1145
+ font-size: var(--mach-font-size, 14px);
1146
+ }
1147
+
1148
+ .mach-select-native[hidden] {
1149
+ display: none !important;
1150
+ }
1151
+
1152
+ .mach-select-trigger {
1153
+ display: flex;
1154
+ align-items: center;
1155
+ justify-content: space-between;
1156
+ gap: 10px;
1157
+ min-width: 0;
1158
+ height: 34px;
1159
+ padding: 0 10px;
1160
+ border: 1px solid var(--mach-border-color, #e6eaf0);
1161
+ border-radius: var(--mach-radius, 6px);
1162
+ outline: none;
1163
+ color: var(--mach-body-fg, #1f2937);
1164
+ background: var(--mach-body-bg, #fff);
1165
+ font: inherit;
1166
+ line-height: 1;
1167
+ text-align: left;
1168
+ cursor: pointer;
1169
+ transition: border-color var(--mach-transition, .15s ease),
1170
+ box-shadow var(--mach-transition, .15s ease),
1171
+ background-color var(--mach-transition, .15s ease);
1172
+ }
1173
+
1174
+ .mach-select-trigger:hover {
1175
+ border-color: color-mix(in srgb, var(--mach-primary, #2563eb) 44%, var(--mach-border-color, #e6eaf0));
1176
+ background: color-mix(in srgb, var(--mach-primary, #2563eb) 3%, var(--mach-body-bg, #fff));
1177
+ }
1178
+
1179
+ .mach-select-trigger:focus-visible,
1180
+ .mach-select-trigger[aria-expanded="true"] {
1181
+ border-color: var(--mach-primary, #2563eb);
1182
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--mach-primary, #2563eb) 12%, transparent);
1183
+ }
1184
+
1185
+ .mach-select-value {
1186
+ min-width: 0;
1187
+ overflow: hidden;
1188
+ text-overflow: ellipsis;
1189
+ white-space: nowrap;
1190
+ }
1191
+
1192
+ .mach-select-caret {
1193
+ width: 8px;
1194
+ height: 8px;
1195
+ flex: 0 0 auto;
1196
+ border-right: 1.5px solid currentColor;
1197
+ border-bottom: 1.5px solid currentColor;
1198
+ transform: translateY(-2px) rotate(45deg);
1199
+ transition: transform var(--mach-transition, .15s ease);
1200
+ }
1201
+
1202
+ .mach-select-trigger[aria-expanded="true"] .mach-select-caret {
1203
+ transform: translateY(2px) rotate(225deg);
1204
+ }
1205
+
1206
+ .mach-select-listbox {
1207
+ position: fixed;
1208
+ z-index: var(--mach-z-menu, 1200);
1209
+ display: none;
1210
+ flex-direction: column;
1211
+ gap: 2px;
1212
+ min-width: 112px;
1213
+ max-width: min(320px, calc(100vw - 16px));
1214
+ max-height: min(244px, calc(100vh - 16px));
1215
+ padding: 5px;
1216
+ overflow: auto;
1217
+ overscroll-behavior: contain;
1218
+ border: 1px solid color-mix(in srgb, var(--mach-border-color, #e6eaf0) 88%, var(--mach-primary, #2563eb));
1219
+ border-radius: calc(var(--mach-radius-lg, 8px) + 1px);
1220
+ color: var(--mach-body-fg, #1f2937);
1221
+ background: var(--mach-body-bg, #fff);
1222
+ box-shadow: 0 14px 36px color-mix(in srgb, var(--mach-body-fg, #1f2937) 18%, transparent),
1223
+ var(--mach-shadow-sm, 0 1px 3px rgba(15, 23, 42, .12));
1224
+ font-family: var(--mach-font-family, inherit);
1225
+ font-size: var(--mach-font-size, 14px);
1226
+ isolation: isolate;
1227
+ }
1228
+
1229
+ .mach-select-listbox--open {
1230
+ display: flex;
1231
+ animation: mach-select-listbox-in .12s ease-out;
1232
+ }
1233
+
1234
+ .mach-select-option {
1235
+ position: relative;
1236
+ display: flex;
1237
+ align-items: center;
1238
+ flex: 0 0 auto;
1239
+ width: 100%;
1240
+ min-height: 32px;
1241
+ padding: 0 30px 0 10px;
1242
+ border: 0;
1243
+ border-radius: var(--mach-radius, 6px);
1244
+ outline: none;
1245
+ color: inherit;
1246
+ background: transparent;
1247
+ font: inherit;
1248
+ text-align: left;
1249
+ cursor: pointer;
1250
+ transition: color var(--mach-transition, .15s ease), background-color var(--mach-transition, .15s ease);
1251
+ }
1252
+
1253
+ .mach-select-option:hover,
1254
+ .mach-select-option:focus-visible,
1255
+ .mach-select-option--active {
1256
+ color: var(--mach-primary, #2563eb);
1257
+ background: color-mix(in srgb, var(--mach-primary, #2563eb) 9%, var(--mach-body-bg, #fff));
1258
+ }
1259
+
1260
+ .mach-select-option[aria-selected="true"] {
1261
+ color: var(--mach-primary, #2563eb);
1262
+ background: color-mix(in srgb, var(--mach-primary, #2563eb) 13%, var(--mach-body-bg, #fff));
1263
+ font-weight: 600;
1264
+ }
1265
+
1266
+ .mach-select-option[aria-selected="true"]::after {
1267
+ content: "✓";
1268
+ position: absolute;
1269
+ right: 10px;
1270
+ font-size: 12px;
1271
+ font-weight: 700;
1272
+ }
1273
+
1274
+ .mach-select-option:disabled {
1275
+ opacity: .42;
1276
+ cursor: not-allowed;
1277
+ }
1278
+
1279
+ @keyframes mach-select-listbox-in {
1280
+ from { transform: translateY(-3px) scale(.99); }
1281
+ to { transform: translateY(0) scale(1); }
1282
+ }
1283
+
1284
+ .mach-select-listbox--above {
1285
+ transform-origin: bottom;
1286
+ }
1287
+
1288
+ .mach-filter-select-control {
1289
+ width: 100%;
1290
+ }
1291
+
1292
+ .mach-filter-select-trigger {
1293
+ width: 100%;
1294
+ background: color-mix(in srgb, var(--mach-header-bg) 62%, var(--mach-body-bg));
1295
+ }
1296
+
1297
+ .mach-filter-listbox {
1298
+ width: auto;
1299
+ }
1300
+
1041
1301
  .mach-overlay {
1042
1302
  position: absolute;
1043
1303
  inset: 0;
@@ -1053,6 +1313,72 @@ input.mach-select-all {
1053
1313
  font-size: var(--mach-font-size);
1054
1314
  }
1055
1315
 
1316
+ .mach-overlay-content {
1317
+ max-width: min(100%, 320px);
1318
+ }
1319
+
1320
+ .mach-loading {
1321
+ display: grid;
1322
+ justify-items: center;
1323
+ gap: 14px;
1324
+ min-width: 172px;
1325
+ padding: 20px 24px;
1326
+ }
1327
+
1328
+ .mach-loading__visual {
1329
+ position: relative;
1330
+ display: grid;
1331
+ gap: 8px;
1332
+ width: 132px;
1333
+ padding: 14px 16px;
1334
+ overflow: hidden;
1335
+ background: color-mix(in srgb, var(--mach-header-bg) 82%, var(--mach-body-bg));
1336
+ border: 1px solid var(--mach-border-color);
1337
+ border-radius: var(--mach-radius-lg);
1338
+ box-shadow: var(--mach-shadow-sm);
1339
+ }
1340
+
1341
+ .mach-loading__visual::before {
1342
+ content: "";
1343
+ position: absolute;
1344
+ inset: 0;
1345
+ transform: translateX(-100%);
1346
+ background: linear-gradient(
1347
+ 100deg,
1348
+ transparent 20%,
1349
+ color-mix(in srgb, var(--mach-primary) 11%, transparent) 50%,
1350
+ transparent 80%
1351
+ );
1352
+ animation: mach-loading-sweep 1.35s ease-in-out infinite;
1353
+ }
1354
+
1355
+ .mach-loading__row {
1356
+ height: 7px;
1357
+ border-radius: 999px;
1358
+ background: color-mix(in srgb, var(--mach-primary) 13%, var(--mach-border-color));
1359
+ }
1360
+
1361
+ .mach-loading__row:nth-child(2) { width: 82%; }
1362
+ .mach-loading__row:nth-child(3) { width: 92%; }
1363
+ .mach-loading__row:nth-child(4) { width: 66%; }
1364
+
1365
+ .mach-loading__status {
1366
+ display: inline-flex;
1367
+ align-items: center;
1368
+ gap: 8px;
1369
+ color: var(--mach-header-fg);
1370
+ font-size: var(--mach-font-size-sm);
1371
+ }
1372
+
1373
+ .mach-loading__spinner {
1374
+ width: 14px;
1375
+ height: 14px;
1376
+ }
1377
+
1378
+ .mach-loading__label {
1379
+ line-height: 1;
1380
+ }
1381
+
1056
1382
  .mach-spinner {
1057
1383
  width: 22px;
1058
1384
  height: 22px;
@@ -1068,34 +1394,41 @@ input.mach-select-all {
1068
1394
  }
1069
1395
  }
1070
1396
 
1397
+ @keyframes mach-loading-sweep {
1398
+ to {
1399
+ transform: translateX(100%);
1400
+ }
1401
+ }
1402
+
1071
1403
  .mach-filter-panel {
1072
1404
  position: fixed;
1073
1405
  z-index: var(--mach-z-popup);
1074
1406
  display: flex;
1075
1407
  flex-direction: column;
1076
- gap: 8px;
1077
- min-width: 190px;
1078
- padding: 10px;
1408
+ gap: 10px;
1409
+ width: 224px;
1410
+ max-width: calc(100vw - 16px);
1411
+ padding: 12px;
1079
1412
  background: var(--mach-body-bg);
1080
1413
  color: var(--mach-body-fg);
1081
- border: 1px solid var(--mach-border-color);
1082
- border-radius: var(--mach-radius-lg);
1083
- box-shadow: var(--mach-shadow);
1414
+ border: 1px solid color-mix(in srgb, var(--mach-border-color) 88%, var(--mach-primary));
1415
+ border-radius: calc(var(--mach-radius-lg) + 2px);
1416
+ box-shadow: 0 14px 36px color-mix(in srgb, var(--mach-body-fg) 16%, transparent), var(--mach-shadow-sm);
1084
1417
  font-family: var(--mach-font-family);
1085
1418
  font-size: var(--mach-font-size);
1419
+ animation: mach-filter-panel-in 0.14s ease-out;
1086
1420
  }
1087
1421
 
1088
1422
  .mach-filter-body {
1089
1423
  display: flex;
1090
1424
  flex-direction: column;
1091
- gap: 6px;
1425
+ gap: 8px;
1092
1426
  }
1093
1427
 
1094
- .mach-filter-select,
1095
1428
  .mach-filter-input {
1096
1429
  width: 100%;
1097
- height: 27px;
1098
- padding: 0 7px;
1430
+ height: 34px;
1431
+ padding: 0 10px;
1099
1432
  border: 1px solid var(--mach-border-color);
1100
1433
  border-radius: var(--mach-radius);
1101
1434
  font-family: inherit;
@@ -1103,11 +1436,19 @@ input.mach-select-all {
1103
1436
  color: inherit;
1104
1437
  background: var(--mach-body-bg);
1105
1438
  outline: none;
1439
+ transition: border-color var(--mach-transition), box-shadow var(--mach-transition);
1106
1440
  }
1107
1441
 
1108
- .mach-filter-select:focus,
1109
1442
  .mach-filter-input:focus {
1110
1443
  border-color: var(--mach-primary);
1444
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--mach-primary) 12%, transparent);
1445
+ }
1446
+
1447
+ @keyframes mach-filter-panel-in {
1448
+ from {
1449
+ opacity: 0;
1450
+ transform: translateY(-3px) scale(0.99);
1451
+ }
1111
1452
  }
1112
1453
 
1113
1454
  .mach-filter-set-list {
@@ -1289,7 +1630,7 @@ input.mach-select-all {
1289
1630
  white-space: nowrap;
1290
1631
  }
1291
1632
 
1292
- .mach-column-workbench-pin,
1633
+ .mach-column-workbench-pin-control,
1293
1634
  .mach-column-workbench-move {
1294
1635
  height: 26px;
1295
1636
  border: 1px solid var(--mach-border-color);
@@ -1299,6 +1640,20 @@ input.mach-select-all {
1299
1640
  font: inherit;
1300
1641
  }
1301
1642
 
1643
+ .mach-column-workbench-pin-control {
1644
+ width: 108px;
1645
+ border: 0;
1646
+ }
1647
+
1648
+ .mach-column-workbench-pin-control .mach-select-trigger {
1649
+ width: 100%;
1650
+ height: 26px;
1651
+ padding: 0 7px;
1652
+ border-radius: var(--mach-radius);
1653
+ font-size: 12px;
1654
+ box-shadow: none;
1655
+ }
1656
+
1302
1657
  .mach-column-workbench-move {
1303
1658
  padding: 0;
1304
1659
  cursor: pointer;
@@ -1427,6 +1782,7 @@ input.mach-select-all {
1427
1782
  line-height: 1;
1428
1783
  cursor: pointer;
1429
1784
  white-space: nowrap;
1785
+ transition: color var(--mach-transition), background-color var(--mach-transition), transform var(--mach-transition);
1430
1786
  }
1431
1787
 
1432
1788
  .mach-action-btn:hover {
@@ -1435,7 +1791,15 @@ input.mach-select-all {
1435
1791
  }
1436
1792
 
1437
1793
  .mach-action-btn--danger:hover {
1794
+ background: color-mix(in srgb, var(--mach-danger) 10%, transparent);
1438
1795
  color: var(--mach-danger);
1796
+ transform: scale(1.06);
1797
+ }
1798
+
1799
+ .mach-action-btn--success:hover {
1800
+ background: color-mix(in srgb, var(--mach-success) 12%, transparent);
1801
+ color: var(--mach-success);
1802
+ transform: scale(1.06);
1439
1803
  }
1440
1804
 
1441
1805
  .mach-action-btn--primary {
@@ -1679,7 +2043,7 @@ input.mach-select-all {
1679
2043
  }
1680
2044
 
1681
2045
  .mach-cell-editor-shell > .mach-editor-input,
1682
- .mach-cell-editor-shell > .mach-editor-select,
2046
+ .mach-cell-editor-shell > .mach-editor-select-control,
1683
2047
  .mach-cell-editor-shell > :not(.mach-cell-editor-controls),
1684
2048
  .mach-row-editor-shell > * {
1685
2049
  flex: 1 1 auto;
@@ -1690,6 +2054,7 @@ input.mach-select-all {
1690
2054
  display: inline-flex;
1691
2055
  flex: 0 0 auto;
1692
2056
  align-items: center;
2057
+ gap: 2px;
1693
2058
  padding: 2px;
1694
2059
  border: 1px solid var(--mach-border-color);
1695
2060
  border-radius: var(--mach-radius);
@@ -1701,14 +2066,15 @@ input.mach-select-all {
1701
2066
  display: inline-flex;
1702
2067
  align-items: center;
1703
2068
  justify-content: center;
1704
- width: 23px;
1705
- height: 23px;
2069
+ width: 22px;
2070
+ height: 22px;
1706
2071
  padding: 0;
1707
2072
  border: 0;
1708
2073
  border-radius: var(--mach-radius-sm);
1709
2074
  background: transparent;
1710
2075
  color: var(--mach-header-fg);
1711
2076
  cursor: pointer;
2077
+ transition: color var(--mach-transition), background-color var(--mach-transition), transform var(--mach-transition);
1712
2078
  }
1713
2079
 
1714
2080
  .mach-edit-control svg {
@@ -1717,11 +2083,21 @@ input.mach-select-all {
1717
2083
  }
1718
2084
 
1719
2085
  .mach-edit-control--confirm {
1720
- color: var(--mach-primary);
2086
+ color: var(--mach-success);
1721
2087
  }
1722
2088
 
1723
- .mach-edit-control:hover {
1724
- background: var(--mach-row-hover-bg);
2089
+ .mach-edit-control--confirm:hover {
2090
+ background: color-mix(in srgb, var(--mach-success) 12%, transparent);
2091
+ transform: scale(1.06);
2092
+ }
2093
+
2094
+ .mach-edit-control--cancel {
2095
+ color: var(--mach-danger);
2096
+ }
2097
+
2098
+ .mach-edit-control--cancel:hover {
2099
+ background: color-mix(in srgb, var(--mach-danger) 10%, transparent);
2100
+ transform: scale(1.06);
1725
2101
  }
1726
2102
 
1727
2103
  .mach-edit-control:disabled {
@@ -1735,13 +2111,14 @@ input.mach-select-all {
1735
2111
  }
1736
2112
 
1737
2113
  .mach-cell--row-editing .mach-editor-input,
1738
- .mach-cell--row-editing .mach-editor-select {
2114
+ .mach-cell--row-editing .mach-editor-select-control .mach-select-trigger {
1739
2115
  border-color: color-mix(in srgb, var(--mach-primary) 45%, var(--mach-border-color));
1740
2116
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
1741
2117
  }
1742
2118
 
1743
2119
  .mach-cell--row-editing .mach-editor-input:focus,
1744
- .mach-cell--row-editing .mach-editor-select:focus {
2120
+ .mach-cell--row-editing .mach-editor-select-control .mach-select-trigger:focus-visible,
2121
+ .mach-cell--row-editing .mach-editor-select-control .mach-select-trigger[aria-expanded="true"] {
1745
2122
  border-color: var(--mach-primary);
1746
2123
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--mach-primary) 12%, transparent);
1747
2124
  }
@@ -1840,21 +2217,21 @@ input.mach-select-all {
1840
2217
  cursor: not-allowed;
1841
2218
  }
1842
2219
 
1843
- .mach-pagination-size {
2220
+ .mach-pagination-size-control {
1844
2221
  height: 24px;
1845
2222
  margin-left: 6px;
1846
- padding: 0 4px;
1847
- border: var(--mach-border-width) solid var(--mach-border-color);
1848
- border-radius: var(--mach-radius-sm);
1849
- background: var(--mach-body-bg);
1850
- color: var(--mach-header-fg);
2223
+ width: 92px;
1851
2224
  font-size: var(--mach-font-size-sm);
1852
- outline: none;
1853
- cursor: pointer;
1854
2225
  }
1855
2226
 
1856
- .mach-pagination-size:focus-visible {
1857
- border-color: var(--mach-primary);
2227
+ .mach-pagination-size-control .mach-select-trigger {
2228
+ width: 100%;
2229
+ height: 24px;
2230
+ padding: 0 6px;
2231
+ border-width: var(--mach-border-width);
2232
+ border-radius: var(--mach-radius-sm);
2233
+ color: var(--mach-header-fg);
2234
+ box-shadow: none;
1858
2235
  }
1859
2236
 
1860
2237
  .mach-watermark {
@@ -1888,7 +2265,14 @@ input.mach-select-all {
1888
2265
  .mach-empty__hint {
1889
2266
  font-size: var(--mach-font-size-sm);
1890
2267
  color: var(--mach-header-fg);
1891
- }
2268
+ }
2269
+
2270
+ @media (prefers-reduced-motion: reduce) {
2271
+ .mach-spinner,
2272
+ .mach-loading__visual::before {
2273
+ animation-duration: 2.4s;
2274
+ }
2275
+ }
1892
2276
 
1893
2277
  .mach-cell--center {
1894
2278
  justify-content: center;