@agile-team/mach-table 0.5.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agile-team/mach-table",
3
- "version": "0.5.0",
3
+ "version": "0.14.0",
4
4
  "description": "Enterprise-grade, framework-agnostic TypeScript data grid with virtualization, editing, grouping and extensibility",
5
5
  "keywords": [
6
6
  "data-grid",
@@ -11,8 +11,8 @@
11
11
  "vue",
12
12
  "react"
13
13
  ],
14
- "author": "Agile Team",
15
- "license": "MIT",
14
+ "author": "ChenyCHENYU (Agile Team)",
15
+ "license": "SEE LICENSE IN LICENSE",
16
16
  "homepage": "https://github.com/ChenyCHENYU/MachTable#readme",
17
17
  "bugs": {
18
18
  "url": "https://github.com/ChenyCHENYU/MachTable/issues"
@@ -67,6 +67,113 @@
67
67
  font-variant-numeric: tabular-nums;
68
68
  }
69
69
 
70
+ .mach-root.mach-dom-layout--auto-height {
71
+ height: auto;
72
+ min-height: 0;
73
+ }
74
+
75
+ .mach-root.mach-dom-layout--auto-height .mach-body {
76
+ flex: none;
77
+ }
78
+
79
+ .mach-root.mach-dom-layout--auto-height .mach-body-viewport--scroll {
80
+ overflow-y: hidden;
81
+ }
82
+
83
+ .mach-toolbar {
84
+ display: flex;
85
+ align-items: center;
86
+ justify-content: space-between;
87
+ gap: 10px;
88
+ min-height: 44px;
89
+ padding: 6px 8px;
90
+ font: 13px/1.4 var(--mach-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
91
+ color: var(--mach-body-fg, #26303f);
92
+ background: var(--mach-body-bg, #fff);
93
+ border: 1px solid var(--mach-border-color, #e6eaf0);
94
+ border-bottom: 0;
95
+ border-radius: var(--mach-radius-lg, 8px) var(--mach-radius-lg, 8px) 0 0;
96
+ }
97
+
98
+ .mach-toolbar__main,
99
+ .mach-toolbar__aside {
100
+ display: flex;
101
+ align-items: center;
102
+ gap: 6px;
103
+ min-width: 0;
104
+ }
105
+
106
+ .mach-toolbar__search {
107
+ display: flex;
108
+ align-items: center;
109
+ gap: 6px;
110
+ width: min(240px, 32vw);
111
+ height: 32px;
112
+ padding: 0 9px;
113
+ color: #64748b;
114
+ background: var(--mach-header-bg, #fafbfd);
115
+ border: 1px solid var(--mach-border-color, #e6eaf0);
116
+ border-radius: 6px;
117
+ transition: border-color var(--mach-transition, .15s ease), box-shadow var(--mach-transition, .15s ease);
118
+ }
119
+
120
+ .mach-toolbar__search:focus-within {
121
+ border-color: var(--mach-primary, #2563eb);
122
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--mach-primary, #2563eb) 12%, transparent);
123
+ }
124
+
125
+ .mach-toolbar__search input {
126
+ min-width: 0;
127
+ width: 100%;
128
+ color: inherit;
129
+ background: transparent;
130
+ border: 0;
131
+ outline: 0;
132
+ }
133
+
134
+ .mach-toolbar__button,
135
+ .mach-toolbar__select,
136
+ .mach-toolbar__selection {
137
+ height: 32px;
138
+ padding: 0 10px;
139
+ color: inherit;
140
+ background: var(--mach-body-bg, #fff);
141
+ border: 1px solid var(--mach-border-color, #e6eaf0);
142
+ border-radius: 6px;
143
+ cursor: pointer;
144
+ transition: color var(--mach-transition, .15s ease), border-color var(--mach-transition, .15s ease), background var(--mach-transition, .15s ease);
145
+ }
146
+
147
+ .mach-toolbar__button {
148
+ min-width: 32px;
149
+ padding: 0 8px;
150
+ font-size: 16px;
151
+ }
152
+
153
+ .mach-toolbar__button:hover:not(:disabled),
154
+ .mach-toolbar__select:hover {
155
+ color: var(--mach-primary, #2563eb);
156
+ border-color: var(--mach-primary, #2563eb);
157
+ }
158
+
159
+ .mach-toolbar__button:disabled {
160
+ cursor: not-allowed;
161
+ opacity: .45;
162
+ }
163
+
164
+ .mach-toolbar__selection {
165
+ color: var(--mach-primary, #2563eb);
166
+ background: var(--mach-primary-weak, #dbeafe);
167
+ border-color: transparent;
168
+ font-size: 12px;
169
+ }
170
+
171
+ @media (max-width: 640px) {
172
+ .mach-toolbar { align-items: stretch; flex-direction: column; }
173
+ .mach-toolbar__main, .mach-toolbar__aside { flex-wrap: wrap; }
174
+ .mach-toolbar__search { flex: 1; width: auto; }
175
+ }
176
+
70
177
  .mach-size--compact {
71
178
  --mach-font-size: 12px;
72
179
  --mach-cell-padding: 6px;
@@ -531,6 +638,23 @@ input.mach-select-all {
531
638
  transform: rotate(90deg);
532
639
  }
533
640
 
641
+ .mach-detail-toggle--loading {
642
+ animation: mach-tree-spin 0.8s linear infinite;
643
+ color: var(--mach-primary);
644
+ }
645
+
646
+ .mach-detail-toggle--error {
647
+ color: #dc2626;
648
+ }
649
+
650
+ @keyframes mach-tree-spin {
651
+ to { transform: rotate(360deg); }
652
+ }
653
+
654
+ @media (prefers-reduced-motion: reduce) {
655
+ .mach-detail-toggle--loading { animation: none; }
656
+ }
657
+
534
658
  .mach-cell--group {
535
659
  cursor: pointer;
536
660
  background: var(--mach-header-bg);
@@ -637,6 +761,11 @@ input.mach-select-all {
637
761
  box-shadow: 0 0 0 1px rgba(239, 68, 68, 0.35);
638
762
  }
639
763
 
764
+ .mach-editor-validating {
765
+ cursor: progress;
766
+ opacity: 0.72;
767
+ }
768
+
640
769
  .mach-footer {
641
770
  display: flex;
642
771
  flex-shrink: 0;
@@ -1025,11 +1154,33 @@ input.mach-select-all {
1025
1154
  }
1026
1155
 
1027
1156
  .mach-column-panel {
1028
- min-width: 200px;
1157
+ min-width: 220px;
1029
1158
  max-height: 70vh;
1030
1159
  overflow: auto;
1031
1160
  }
1032
1161
 
1162
+ .mach-column-panel[role="dialog"] {
1163
+ width: min(440px, calc(100vw - 16px));
1164
+ }
1165
+
1166
+ .mach-column-workbench-search {
1167
+ box-sizing: border-box;
1168
+ width: 100%;
1169
+ height: 30px;
1170
+ padding: 0 9px;
1171
+ border: 1px solid var(--mach-border-color);
1172
+ border-radius: var(--mach-radius);
1173
+ background: var(--mach-body-bg);
1174
+ color: var(--mach-body-fg);
1175
+ font: inherit;
1176
+ outline: none;
1177
+ }
1178
+
1179
+ .mach-column-workbench-search:focus {
1180
+ border-color: var(--mach-primary);
1181
+ box-shadow: 0 0 0 2px var(--mach-primary-weak);
1182
+ }
1183
+
1033
1184
  .mach-column-panel-title {
1034
1185
  font-weight: 600;
1035
1186
  color: var(--mach-header-fg);
@@ -1076,7 +1227,7 @@ input.mach-select-all {
1076
1227
  }
1077
1228
 
1078
1229
  .mach-column-panel-list {
1079
- max-height: 180px;
1230
+ max-height: 280px;
1080
1231
  overflow: auto;
1081
1232
  display: flex;
1082
1233
  flex-direction: column;
@@ -1086,6 +1237,54 @@ input.mach-select-all {
1086
1237
  padding: 4px;
1087
1238
  }
1088
1239
 
1240
+ .mach-column-workbench-item {
1241
+ display: grid;
1242
+ grid-template-columns: minmax(120px, 1fr) 108px 26px 26px;
1243
+ align-items: center;
1244
+ gap: 4px;
1245
+ min-height: 32px;
1246
+ padding: 2px 3px;
1247
+ border-radius: var(--mach-radius);
1248
+ }
1249
+
1250
+ .mach-column-workbench-item:hover {
1251
+ background: var(--mach-row-hover-bg);
1252
+ }
1253
+
1254
+ .mach-column-workbench-label {
1255
+ display: flex;
1256
+ min-width: 0;
1257
+ align-items: center;
1258
+ gap: 7px;
1259
+ cursor: pointer;
1260
+ }
1261
+
1262
+ .mach-column-workbench-name {
1263
+ overflow: hidden;
1264
+ text-overflow: ellipsis;
1265
+ white-space: nowrap;
1266
+ }
1267
+
1268
+ .mach-column-workbench-pin,
1269
+ .mach-column-workbench-move {
1270
+ height: 26px;
1271
+ border: 1px solid var(--mach-border-color);
1272
+ border-radius: var(--mach-radius);
1273
+ background: var(--mach-body-bg);
1274
+ color: inherit;
1275
+ font: inherit;
1276
+ }
1277
+
1278
+ .mach-column-workbench-move {
1279
+ padding: 0;
1280
+ cursor: pointer;
1281
+ }
1282
+
1283
+ .mach-column-workbench-move:disabled {
1284
+ cursor: not-allowed;
1285
+ opacity: 0.35;
1286
+ }
1287
+
1089
1288
  .mach-tag {
1090
1289
  display: inline-flex;
1091
1290
  align-items: center;
@@ -1177,6 +1376,18 @@ input.mach-select-all {
1177
1376
  gap: 2px;
1178
1377
  }
1179
1378
 
1379
+ .mach-sr-only {
1380
+ position: absolute !important;
1381
+ width: 1px !important;
1382
+ height: 1px !important;
1383
+ padding: 0 !important;
1384
+ margin: -1px !important;
1385
+ overflow: hidden !important;
1386
+ clip: rect(0, 0, 0, 0) !important;
1387
+ white-space: nowrap !important;
1388
+ border: 0 !important;
1389
+ }
1390
+
1180
1391
  .mach-action-btn {
1181
1392
  display: inline-flex;
1182
1393
  align-items: center;
@@ -1203,6 +1414,50 @@ input.mach-select-all {
1203
1414
  color: var(--mach-danger);
1204
1415
  }
1205
1416
 
1417
+ .mach-action-btn--primary {
1418
+ color: var(--mach-primary);
1419
+ }
1420
+
1421
+ .mach-action-btn--warning {
1422
+ color: var(--mach-warning);
1423
+ }
1424
+
1425
+ .mach-action-btn--success,
1426
+ .mach-edit-control--confirm {
1427
+ color: var(--mach-success);
1428
+ }
1429
+
1430
+ .mach-action-btn--danger {
1431
+ color: var(--mach-danger);
1432
+ }
1433
+
1434
+ .mach-action-btn:focus-visible,
1435
+ .mach-edit-control:focus-visible,
1436
+ .mach-cell-edit-trigger:focus-visible,
1437
+ .mach-action-drawer__close:focus-visible {
1438
+ outline: 2px solid color-mix(in srgb, var(--mach-primary) 65%, transparent);
1439
+ outline-offset: 1px;
1440
+ }
1441
+
1442
+ .mach-action-btn:disabled {
1443
+ cursor: not-allowed;
1444
+ opacity: 0.4;
1445
+ }
1446
+
1447
+ .mach-action-btn--loading svg {
1448
+ animation: mach-spin 0.8s linear infinite;
1449
+ }
1450
+
1451
+ .mach-dictionary-value--loading {
1452
+ color: var(--mach-header-fg);
1453
+ opacity: 0.72;
1454
+ }
1455
+
1456
+ .mach-dictionary-value--error {
1457
+ text-decoration: underline dotted;
1458
+ text-underline-offset: 3px;
1459
+ }
1460
+
1206
1461
  .mach-action-btn--icon {
1207
1462
  padding: 0;
1208
1463
  width: 24px;
@@ -1210,7 +1465,262 @@ input.mach-select-all {
1210
1465
 
1211
1466
  .mach-context-menu-item--danger {
1212
1467
  color: var(--mach-danger);
1213
- }
1468
+ }
1469
+
1470
+ .mach-context-menu-item,
1471
+ .mach-action-drawer__item {
1472
+ display: flex;
1473
+ align-items: center;
1474
+ gap: 9px;
1475
+ }
1476
+
1477
+ .mach-context-menu-item--primary,
1478
+ .mach-action-drawer__item--primary {
1479
+ color: var(--mach-primary);
1480
+ }
1481
+
1482
+ .mach-context-menu-item--warning,
1483
+ .mach-action-drawer__item--warning {
1484
+ color: var(--mach-warning);
1485
+ }
1486
+
1487
+ .mach-context-menu-item--success,
1488
+ .mach-action-drawer__item--success {
1489
+ color: var(--mach-success);
1490
+ }
1491
+
1492
+ .mach-context-menu-item--danger,
1493
+ .mach-action-drawer__item--danger {
1494
+ color: var(--mach-danger);
1495
+ }
1496
+
1497
+ .mach-action-drawer-backdrop {
1498
+ position: fixed;
1499
+ inset: 0;
1500
+ z-index: calc(var(--mach-z-menu) + 2);
1501
+ background: rgba(15, 23, 42, 0.2);
1502
+ backdrop-filter: blur(1px);
1503
+ }
1504
+
1505
+ .mach-action-drawer {
1506
+ position: absolute;
1507
+ top: 0;
1508
+ right: 0;
1509
+ display: flex;
1510
+ flex-direction: column;
1511
+ width: min(340px, calc(100vw - 24px));
1512
+ height: 100%;
1513
+ background: var(--mach-body-bg);
1514
+ color: var(--mach-body-fg);
1515
+ border-left: 1px solid var(--mach-border-color);
1516
+ box-shadow: -16px 0 40px rgba(15, 23, 42, 0.14);
1517
+ font-family: var(--mach-font-family);
1518
+ animation: mach-drawer-in 0.18s ease-out;
1519
+ }
1520
+
1521
+ .mach-action-drawer__header {
1522
+ display: flex;
1523
+ align-items: center;
1524
+ justify-content: space-between;
1525
+ min-height: 56px;
1526
+ padding: 0 16px 0 20px;
1527
+ border-bottom: 1px solid var(--mach-border-color);
1528
+ }
1529
+
1530
+ .mach-action-drawer__close {
1531
+ display: inline-flex;
1532
+ align-items: center;
1533
+ justify-content: center;
1534
+ width: 30px;
1535
+ height: 30px;
1536
+ padding: 0;
1537
+ border: 0;
1538
+ border-radius: var(--mach-radius);
1539
+ background: transparent;
1540
+ color: var(--mach-header-fg);
1541
+ cursor: pointer;
1542
+ }
1543
+
1544
+ .mach-action-drawer__close:hover {
1545
+ color: var(--mach-primary);
1546
+ background: var(--mach-row-hover-bg);
1547
+ }
1548
+
1549
+ .mach-action-drawer__body {
1550
+ display: flex;
1551
+ flex-direction: column;
1552
+ gap: 4px;
1553
+ padding: 12px;
1554
+ overflow: auto;
1555
+ }
1556
+
1557
+ .mach-action-drawer__item {
1558
+ width: 100%;
1559
+ min-height: 40px;
1560
+ padding: 0 12px;
1561
+ border: 0;
1562
+ border-radius: var(--mach-radius);
1563
+ background: transparent;
1564
+ font: inherit;
1565
+ text-align: left;
1566
+ cursor: pointer;
1567
+ }
1568
+
1569
+ .mach-action-drawer__item:hover:not(:disabled) {
1570
+ background: var(--mach-row-hover-bg);
1571
+ }
1572
+
1573
+ .mach-action-drawer__item:disabled {
1574
+ opacity: 0.4;
1575
+ cursor: not-allowed;
1576
+ }
1577
+
1578
+ @keyframes mach-drawer-in {
1579
+ from { transform: translateX(18px); opacity: 0; }
1580
+ to { transform: translateX(0); opacity: 1; }
1581
+ }
1582
+
1583
+ @media (max-width: 640px) {
1584
+ .mach-action-drawer {
1585
+ top: auto;
1586
+ bottom: 0;
1587
+ width: 100%;
1588
+ height: auto;
1589
+ max-height: min(70vh, 520px);
1590
+ border-top: 1px solid var(--mach-border-color);
1591
+ border-left: 0;
1592
+ border-radius: var(--mach-radius-lg) var(--mach-radius-lg) 0 0;
1593
+ animation-name: mach-drawer-up;
1594
+ }
1595
+ }
1596
+
1597
+ @keyframes mach-drawer-up {
1598
+ from { transform: translateY(18px); opacity: 0; }
1599
+ to { transform: translateY(0); opacity: 1; }
1600
+ }
1601
+
1602
+ .mach-cell:has(.mach-cell-edit-trigger) {
1603
+ padding-right: 29px;
1604
+ }
1605
+
1606
+ .mach-cell-edit-trigger {
1607
+ position: absolute;
1608
+ right: 5px;
1609
+ top: 50%;
1610
+ display: inline-flex;
1611
+ align-items: center;
1612
+ justify-content: center;
1613
+ width: 20px;
1614
+ height: 20px;
1615
+ padding: 0;
1616
+ transform: translateY(-50%);
1617
+ border: 0;
1618
+ border-radius: var(--mach-radius-sm);
1619
+ background: transparent;
1620
+ color: var(--mach-header-fg);
1621
+ cursor: pointer;
1622
+ opacity: 0;
1623
+ transition: opacity var(--mach-transition), color var(--mach-transition), background-color var(--mach-transition);
1624
+ }
1625
+
1626
+ .mach-cell-edit-trigger svg {
1627
+ width: 13px;
1628
+ height: 13px;
1629
+ }
1630
+
1631
+ .mach-cell:hover .mach-cell-edit-trigger--hover,
1632
+ .mach-cell:focus-within .mach-cell-edit-trigger--hover,
1633
+ .mach-cell-edit-trigger--always {
1634
+ opacity: 0.72;
1635
+ }
1636
+
1637
+ .mach-cell-edit-trigger:hover {
1638
+ opacity: 1;
1639
+ color: var(--mach-primary);
1640
+ background: color-mix(in srgb, var(--mach-primary) 9%, transparent);
1641
+ }
1642
+
1643
+ .mach-cell--editing {
1644
+ overflow: visible;
1645
+ z-index: 4;
1646
+ }
1647
+
1648
+ .mach-cell-editor-shell,
1649
+ .mach-row-editor-shell {
1650
+ display: flex;
1651
+ align-items: center;
1652
+ width: 100%;
1653
+ min-width: 0;
1654
+ gap: 5px;
1655
+ }
1656
+
1657
+ .mach-cell-editor-shell > .mach-editor-input,
1658
+ .mach-cell-editor-shell > .mach-editor-select,
1659
+ .mach-cell-editor-shell > :not(.mach-cell-editor-controls),
1660
+ .mach-row-editor-shell > * {
1661
+ flex: 1 1 auto;
1662
+ min-width: 0;
1663
+ }
1664
+
1665
+ .mach-cell-editor-controls {
1666
+ display: inline-flex;
1667
+ flex: 0 0 auto;
1668
+ align-items: center;
1669
+ padding: 2px;
1670
+ border: 1px solid var(--mach-border-color);
1671
+ border-radius: var(--mach-radius);
1672
+ background: var(--mach-body-bg);
1673
+ box-shadow: var(--mach-shadow-sm);
1674
+ }
1675
+
1676
+ .mach-edit-control {
1677
+ display: inline-flex;
1678
+ align-items: center;
1679
+ justify-content: center;
1680
+ width: 23px;
1681
+ height: 23px;
1682
+ padding: 0;
1683
+ border: 0;
1684
+ border-radius: var(--mach-radius-sm);
1685
+ background: transparent;
1686
+ color: var(--mach-header-fg);
1687
+ cursor: pointer;
1688
+ }
1689
+
1690
+ .mach-edit-control svg {
1691
+ width: 14px;
1692
+ height: 14px;
1693
+ }
1694
+
1695
+ .mach-edit-control--confirm {
1696
+ color: var(--mach-primary);
1697
+ }
1698
+
1699
+ .mach-edit-control:hover {
1700
+ background: var(--mach-row-hover-bg);
1701
+ }
1702
+
1703
+ .mach-edit-control:disabled {
1704
+ opacity: 0.35;
1705
+ cursor: wait;
1706
+ }
1707
+
1708
+ .mach-row--editing,
1709
+ .mach-row--editing .mach-cell {
1710
+ background: color-mix(in srgb, var(--mach-primary) 3%, var(--mach-body-bg));
1711
+ }
1712
+
1713
+ .mach-cell--row-editing .mach-editor-input,
1714
+ .mach-cell--row-editing .mach-editor-select {
1715
+ border-color: color-mix(in srgb, var(--mach-primary) 45%, var(--mach-border-color));
1716
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
1717
+ }
1718
+
1719
+ .mach-cell--row-editing .mach-editor-input:focus,
1720
+ .mach-cell--row-editing .mach-editor-select:focus {
1721
+ border-color: var(--mach-primary);
1722
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--mach-primary) 12%, transparent);
1723
+ }
1214
1724
 
1215
1725
  .mach-tooltip {
1216
1726
  position: fixed;
@@ -1381,4 +1891,8 @@ input.mach-select-all {
1381
1891
  animation-iteration-count: 1 !important;
1382
1892
  transition-duration: 0.01ms !important;
1383
1893
  }
1894
+
1895
+ .mach-action-drawer {
1896
+ animation: none !important;
1897
+ }
1384
1898
  }