comins-table 0.1.6 → 0.1.8

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/styles.css CHANGED
@@ -21,6 +21,8 @@
21
21
  --comins-table-drop-valid-background: rgba(37, 99, 235, 0.22);
22
22
  --comins-table-focus: rgba(16, 185, 129, 0.28);
23
23
  --comins-table-foreground: #111827;
24
+ --comins-table-group-row-background: #d1d5db;
25
+ --comins-table-group-row-color: var(--comins-table-foreground);
24
26
  --comins-table-header-background: var(--comins-table-accent);
25
27
  --comins-table-header-border: var(--comins-table-row-border);
26
28
  --comins-table-header-color: var(--comins-table-accent-foreground);
@@ -48,6 +50,11 @@
48
50
  --comins-table-scrollbar-track: var(--comins-table-surface-muted);
49
51
  --comins-table-surface: #ffffff;
50
52
  --comins-table-surface-muted: #f6fcfa;
53
+ --comins-table-tooltip-danger-background: #7f1d1d;
54
+ --comins-table-tooltip-danger-border: rgba(254, 202, 202, 0.28);
55
+ --comins-table-tooltip-danger-color: #ffffff;
56
+ --comins-table-tooltip-danger-muted: #fecaca;
57
+ --comins-table-tooltip-shadow: 0 12px 30px rgba(69, 10, 10, 0.28);
51
58
  --comins-table-component-accent: var(--comins-table-accent);
52
59
  --comins-table-component-accent-foreground: var(--comins-table-accent-foreground);
53
60
  --comins-table-component-accent-strong: var(--comins-table-accent-strong);
@@ -116,6 +123,8 @@
116
123
  --comins-table-drop-marker: #34d399;
117
124
  --comins-table-focus: rgba(45, 212, 191, 0.26);
118
125
  --comins-table-foreground: #effcf7;
126
+ --comins-table-group-row-background: #334155;
127
+ --comins-table-group-row-color: #f8fafc;
119
128
  --comins-table-header-background: #064e3b;
120
129
  --comins-table-header-border: var(--comins-table-row-border);
121
130
  --comins-table-header-color: #ecfdf5;
@@ -308,6 +317,115 @@
308
317
  min-width: 0;
309
318
  }
310
319
 
320
+ .comins-table__group-row {
321
+ background: var(--comins-table-group-row-background);
322
+ color: var(--comins-table-group-row-color);
323
+ }
324
+
325
+ .comins-table__group-row > .comins-table__group-cell {
326
+ background: inherit;
327
+ color: inherit;
328
+ font-weight: 600;
329
+ text-align: left;
330
+ }
331
+
332
+ .comins-row-group-cell-content {
333
+ align-items: center;
334
+ display: flex;
335
+ gap: 4px;
336
+ min-width: 0;
337
+ }
338
+
339
+ .comins-row-group-content {
340
+ align-items: center;
341
+ display: flex;
342
+ gap: 10px;
343
+ min-width: 0;
344
+ }
345
+
346
+ .comins-row-group-count,
347
+ .comins-row-group-aggregate {
348
+ color: var(--comins-table-muted);
349
+ flex: 0 0 auto;
350
+ font-size: 0.875em;
351
+ font-weight: 500;
352
+ }
353
+
354
+ .comins-row-group-drag-handle {
355
+ color: var(--comins-table-accent-strong);
356
+ cursor: grab;
357
+ flex: 0 0 24px;
358
+ }
359
+
360
+ .comins-row-group-drag-handle:active {
361
+ cursor: grabbing;
362
+ }
363
+
364
+ .comins-row-group-expander {
365
+ color: var(--comins-table-accent-strong);
366
+ flex: 0 0 24px;
367
+ }
368
+
369
+ .comins-row-group-expander .comins-table-icon {
370
+ transform: rotate(0deg);
371
+ transition: transform 160ms ease;
372
+ }
373
+
374
+ .comins-row-group-expander[aria-expanded="true"] .comins-table-icon {
375
+ transform: rotate(90deg);
376
+ }
377
+
378
+ .comins-row-group-label {
379
+ min-width: 0;
380
+ overflow: hidden;
381
+ text-overflow: ellipsis;
382
+ white-space: nowrap;
383
+ }
384
+
385
+ .comins-table__group-row[data-comins-group-drag-source="true"] > .comins-table__group-cell {
386
+ opacity: 0.68;
387
+ }
388
+
389
+ .comins-table__group-row[data-comins-group-drop-position="before"] > .comins-table__group-cell {
390
+ box-shadow: inset 0 3px var(--comins-table-drop-marker);
391
+ }
392
+
393
+ .comins-table__group-row[data-comins-group-drop-position="after"] > .comins-table__group-cell {
394
+ box-shadow: inset 0 -3px var(--comins-table-drop-marker);
395
+ }
396
+
397
+ .comins-table__group-row[data-comins-group-drop-valid="false"] > .comins-table__group-cell {
398
+ background: var(--comins-table-drop-invalid-background);
399
+ }
400
+
401
+ .comins-table__body-viewport[data-comins-group-drop-valid="true"],
402
+ .comins-table__body-viewport[data-comins-row-drop-valid="true"] {
403
+ box-shadow: inset 0 0 0 3px var(--comins-table-drop-marker);
404
+ }
405
+
406
+ .comins-table__body-viewport[data-comins-group-drop-valid="false"],
407
+ .comins-table__body-viewport[data-comins-row-drop-valid="false"] {
408
+ box-shadow: inset 0 0 0 3px var(--comins-table-drop-invalid);
409
+ }
410
+
411
+ .comins-table[data-comins-transfer-rejected="true"] {
412
+ outline: 1px solid var(--comins-table-drop-invalid);
413
+ outline-offset: -1px;
414
+ }
415
+
416
+ .comins-table__group-row[data-comins-row-drop-valid="true"] > .comins-table__group-cell {
417
+ background: var(--comins-table-drop-valid-background);
418
+ }
419
+
420
+ .comins-table__group-row[data-comins-row-drop-valid="false"] > .comins-table__group-cell {
421
+ background: var(--comins-table-drop-invalid-background);
422
+ }
423
+
424
+ .comins-row-group-column-label {
425
+ font-weight: 500;
426
+ opacity: 0.72;
427
+ }
428
+
311
429
  .comins-row-detail-expander {
312
430
  color: var(--comins-table-accent-strong);
313
431
  }
@@ -369,31 +487,57 @@
369
487
  }
370
488
 
371
489
  .comins-table__body-viewport[data-horizontal-overflow="true"] {
372
- overflow-x: scroll;
490
+ overflow-x: hidden;
373
491
  overflow-y: scroll;
374
492
  scrollbar-gutter: stable;
375
493
  }
376
494
 
377
- .comins-table__body-viewport::-webkit-scrollbar {
495
+ .comins-table__horizontal-scrollbar {
496
+ border-top: 1px solid var(--comins-table-row-border);
497
+ box-sizing: border-box;
498
+ flex: 0 0 12px;
499
+ max-width: 100%;
500
+ min-height: 12px;
501
+ overflow-x: scroll;
502
+ overflow-y: hidden;
503
+ scrollbar-color: var(--comins-table-scrollbar-thumb) var(--comins-table-scrollbar-track);
504
+ }
505
+
506
+ .comins-table__horizontal-scrollbar-content {
507
+ height: 1px;
508
+ pointer-events: none;
509
+ }
510
+
511
+ .comins-table__horizontal-range-spacer {
512
+ height: 0;
513
+ pointer-events: none;
514
+ }
515
+
516
+ .comins-table__body-viewport::-webkit-scrollbar,
517
+ .comins-table__horizontal-scrollbar::-webkit-scrollbar {
378
518
  height: 12px;
379
519
  width: 12px;
380
520
  }
381
521
 
382
- .comins-table__body-viewport::-webkit-scrollbar-track {
522
+ .comins-table__body-viewport::-webkit-scrollbar-track,
523
+ .comins-table__horizontal-scrollbar::-webkit-scrollbar-track {
383
524
  background: var(--comins-table-scrollbar-track);
384
525
  }
385
526
 
386
- .comins-table__body-viewport::-webkit-scrollbar-thumb {
527
+ .comins-table__body-viewport::-webkit-scrollbar-thumb,
528
+ .comins-table__horizontal-scrollbar::-webkit-scrollbar-thumb {
387
529
  background: var(--comins-table-scrollbar-thumb);
388
530
  border: 3px solid var(--comins-table-scrollbar-track);
389
531
  border-radius: 999px;
390
532
  }
391
533
 
392
- .comins-table__body-viewport::-webkit-scrollbar-thumb:hover {
534
+ .comins-table__body-viewport::-webkit-scrollbar-thumb:hover,
535
+ .comins-table__horizontal-scrollbar::-webkit-scrollbar-thumb:hover {
393
536
  background: var(--comins-table-accent-strong);
394
537
  }
395
538
 
396
- .comins-table__body-viewport::-webkit-scrollbar-corner {
539
+ .comins-table__body-viewport::-webkit-scrollbar-corner,
540
+ .comins-table__horizontal-scrollbar::-webkit-scrollbar-corner {
397
541
  background: var(--comins-table-scrollbar-corner);
398
542
  }
399
543
 
@@ -692,6 +836,94 @@
692
836
  margin-left: 6px;
693
837
  }
694
838
 
839
+ .comins-column-filter {
840
+ display: inline-flex;
841
+ flex: 0 0 24px;
842
+ overflow: visible;
843
+ position: relative;
844
+ }
845
+
846
+ .comins-column-filter__trigger {
847
+ border-radius: 4px;
848
+ color: var(--comins-table-header-color);
849
+ opacity: 0.72;
850
+ }
851
+
852
+ .comins-column-filter__trigger:hover,
853
+ .comins-column-filter__trigger:focus-visible,
854
+ .comins-column-filter__trigger[data-active="true"] {
855
+ background: color-mix(in srgb, var(--comins-table-header-color) 18%, transparent);
856
+ opacity: 1;
857
+ }
858
+
859
+ .comins-column-filter__popover {
860
+ background: var(--comins-table-component-surface);
861
+ border: 1px solid var(--comins-table-component-border);
862
+ border-radius: 6px;
863
+ box-shadow: 0 12px 28px rgba(15, 23, 42, 0.18);
864
+ color: var(--comins-table-component-foreground);
865
+ display: grid;
866
+ font-size: 12px;
867
+ font-weight: 400;
868
+ gap: 10px;
869
+ min-width: 260px;
870
+ padding: 12px;
871
+ position: fixed;
872
+ text-align: left;
873
+ z-index: 9999;
874
+ }
875
+
876
+ .comins-column-filter__title {
877
+ font-size: 13px;
878
+ font-weight: 700;
879
+ }
880
+
881
+ .comins-column-filter__field {
882
+ color: var(--comins-table-component-muted);
883
+ display: grid;
884
+ gap: 4px;
885
+ }
886
+
887
+ .comins-column-filter__field > input,
888
+ .comins-column-filter__field > select {
889
+ background: var(--comins-table-component-surface);
890
+ border: 1px solid var(--comins-table-component-border);
891
+ border-radius: 4px;
892
+ color: var(--comins-table-component-foreground);
893
+ font: inherit;
894
+ min-height: 30px;
895
+ padding: 4px 8px;
896
+ width: 100%;
897
+ }
898
+
899
+ .comins-column-filter__field > input:focus-visible,
900
+ .comins-column-filter__field > select:focus-visible {
901
+ box-shadow: 0 0 0 3px var(--comins-table-component-focus);
902
+ outline: none;
903
+ }
904
+
905
+ .comins-column-filter__clear {
906
+ background: var(--comins-table-component-surface-muted);
907
+ border: 1px solid var(--comins-table-component-border);
908
+ border-radius: 4px;
909
+ color: var(--comins-table-component-button-foreground);
910
+ cursor: pointer;
911
+ font: inherit;
912
+ min-height: 30px;
913
+ padding: 4px 10px;
914
+ }
915
+
916
+ .comins-column-filter__clear:hover,
917
+ .comins-column-filter__clear:focus-visible {
918
+ background: var(--comins-table-component-accent-soft);
919
+ outline: none;
920
+ }
921
+
922
+ .comins-column-filter__clear:disabled {
923
+ cursor: not-allowed;
924
+ opacity: 0.55;
925
+ }
926
+
695
927
  .comins-table__header-components {
696
928
  align-items: center;
697
929
  display: inline-flex;
@@ -831,6 +1063,99 @@
831
1063
  text-overflow: ellipsis;
832
1064
  }
833
1065
 
1066
+ .comins-pointer-tooltip {
1067
+ max-width: min(320px, calc(100vw - 16px));
1068
+ pointer-events: none;
1069
+ position: fixed;
1070
+ z-index: 80;
1071
+ }
1072
+
1073
+ .comins-tooltip-surface {
1074
+ align-items: flex-start;
1075
+ border: 1px solid transparent;
1076
+ border-radius: 8px;
1077
+ box-shadow: var(--comins-table-tooltip-shadow);
1078
+ display: inline-flex;
1079
+ font-size: 12px;
1080
+ gap: 8px;
1081
+ line-height: 1.4;
1082
+ max-width: 100%;
1083
+ padding: 9px 11px;
1084
+ position: relative;
1085
+ }
1086
+
1087
+ .comins-tooltip-surface::before {
1088
+ background: inherit;
1089
+ border-left: inherit;
1090
+ border-top: inherit;
1091
+ content: "";
1092
+ height: 8px;
1093
+ left: 14px;
1094
+ position: absolute;
1095
+ transform: rotate(45deg);
1096
+ width: 8px;
1097
+ }
1098
+
1099
+ .comins-pointer-tooltip[data-placement="below"] .comins-tooltip-surface::before {
1100
+ top: -5px;
1101
+ }
1102
+
1103
+ .comins-pointer-tooltip[data-placement="above"] .comins-tooltip-surface::before {
1104
+ bottom: -5px;
1105
+ transform: rotate(225deg);
1106
+ }
1107
+
1108
+ .comins-tooltip-surface--neutral {
1109
+ background: var(--comins-table-foreground);
1110
+ border-color: color-mix(in srgb, var(--comins-table-foreground) 72%, #ffffff);
1111
+ color: var(--comins-table-background);
1112
+ }
1113
+
1114
+ .comins-tooltip-surface--danger {
1115
+ background: var(--comins-table-tooltip-danger-background);
1116
+ border-color: var(--comins-table-tooltip-danger-border);
1117
+ color: var(--comins-table-tooltip-danger-color);
1118
+ }
1119
+
1120
+ .comins-tooltip-surface__icon {
1121
+ align-items: center;
1122
+ color: var(--comins-table-tooltip-danger-muted);
1123
+ display: inline-flex;
1124
+ flex: 0 0 auto;
1125
+ height: 18px;
1126
+ justify-content: center;
1127
+ width: 18px;
1128
+ }
1129
+
1130
+ .comins-tooltip-surface__warning {
1131
+ align-items: center;
1132
+ border: 1.5px solid currentColor;
1133
+ border-radius: 999px;
1134
+ display: inline-flex;
1135
+ font-size: 11px;
1136
+ font-weight: 900;
1137
+ height: 15px;
1138
+ justify-content: center;
1139
+ line-height: 1;
1140
+ width: 15px;
1141
+ }
1142
+
1143
+ .comins-tooltip-surface__content {
1144
+ display: grid;
1145
+ gap: 2px;
1146
+ min-width: 0;
1147
+ }
1148
+
1149
+ .comins-tooltip-surface__content > strong {
1150
+ font-size: 13px;
1151
+ font-weight: 800;
1152
+ }
1153
+
1154
+ .comins-tooltip-surface__content > span {
1155
+ color: var(--comins-table-tooltip-danger-muted);
1156
+ overflow-wrap: anywhere;
1157
+ }
1158
+
834
1159
  .comins-sort-meta {
835
1160
  align-items: center;
836
1161
  display: inline-flex;
@@ -932,6 +1257,20 @@
932
1257
  text-align: center;
933
1258
  }
934
1259
 
1260
+ .comins-row-move-placeholder[data-comins-row-drop-valid="false"] td {
1261
+ background: var(--comins-table-drop-invalid-background);
1262
+ color: var(--comins-table-drop-invalid);
1263
+ }
1264
+
1265
+ .comins-table__tr[data-comins-cross-row-drop-position="before"] > .comins-table__td {
1266
+ box-shadow: inset 0 3px var(--comins-table-drop-marker);
1267
+ }
1268
+
1269
+ .comins-table__tr[data-comins-cross-row-drop-position="before"][data-comins-row-drop-valid="false"] > .comins-table__td {
1270
+ background: var(--comins-table-drop-invalid-background);
1271
+ box-shadow: inset 0 3px var(--comins-table-drop-invalid);
1272
+ }
1273
+
935
1274
  .comins-table-empty-filler td {
936
1275
  border-bottom: 0;
937
1276
  border-right: 1px solid var(--comins-table-cell-border);
@@ -956,6 +1295,53 @@
956
1295
  background: var(--comins-table-row-custom-background);
957
1296
  }
958
1297
 
1298
+ .comins-table__th[data-comins-pinned] {
1299
+ background: var(--comins-table-header-background);
1300
+ z-index: 5;
1301
+ }
1302
+
1303
+ .comins-table__td[data-comins-pinned] {
1304
+ background: var(--comins-table-surface);
1305
+ z-index: 2;
1306
+ }
1307
+
1308
+ .comins-table__tr[data-comins-row-parity="even"] > .comins-table__td[data-comins-pinned] {
1309
+ background: var(--comins-table-row-even-background);
1310
+ }
1311
+
1312
+ .comins-table__tr[data-comins-row-parity="odd"] > .comins-table__td[data-comins-pinned] {
1313
+ background: var(--comins-table-row-odd-background);
1314
+ }
1315
+
1316
+ .comins-table__tr[data-comins-row-custom-background="true"] > .comins-table__td[data-comins-pinned] {
1317
+ background: var(--comins-table-row-custom-background);
1318
+ }
1319
+
1320
+ .comins-table__tr.comins-row-selected > .comins-table__td[data-comins-pinned] {
1321
+ background: var(--comins-table-row-selected-background);
1322
+ }
1323
+
1324
+ .comins-table__tr[data-disabled="true"] > .comins-table__td[data-comins-pinned] {
1325
+ background: var(--comins-table-row-disabled-background);
1326
+ }
1327
+
1328
+ .comins-table__td.comins-table__skeleton-cell[data-comins-pinned] {
1329
+ background: var(--comins-table-skeleton-background);
1330
+ }
1331
+
1332
+ .comins-table__summary-cell[data-comins-pinned] {
1333
+ background: var(--comins-table-surface-muted);
1334
+ z-index: 2;
1335
+ }
1336
+
1337
+ [data-comins-pinned="left"][data-comins-pin-boundary="true"] {
1338
+ border-right: 2px solid var(--comins-table-border);
1339
+ }
1340
+
1341
+ [data-comins-pinned="right"][data-comins-pin-boundary="true"] {
1342
+ border-left: 2px solid var(--comins-table-border);
1343
+ }
1344
+
959
1345
  .comins-table__component-layout {
960
1346
  align-items: center;
961
1347
  display: inline-flex;