comins-table 0.1.10 → 0.1.11

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/dist/selection.js CHANGED
@@ -1,2 +1,2 @@
1
- import { D as e, E as t, L as n, R as r, T as i, b as a, i as o, r as s, z as c } from "./core-D01wEe-7.js";
2
- export { s as clearCominsCellRange, o as clearCominsSelection, a as getCominsSelectedCellRange, i as isCominsCellInSelectedRange, t as isCominsCellSelected, e as isCominsRowSelected, n as selectCell, r as selectCellRange, c as selectRow };
1
+ import { B as e, D as t, E as n, R as r, T as i, b as a, i as o, r as s, z as c } from "./core-C1tlvY8Q.js";
2
+ export { s as clearCominsCellRange, o as clearCominsSelection, a as getCominsSelectedCellRange, i as isCominsCellInSelectedRange, n as isCominsCellSelected, t as isCominsRowSelected, r as selectCell, c as selectCellRange, e as selectRow };
@@ -1 +1 @@
1
- {"version":3,"file":"table-icons.d.ts","sourceRoot":"","sources":["../src/table-icons.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,mBAAmB,GAC3B,YAAY,GACZ,qBAAqB,GACrB,oBAAoB,GACpB,QAAQ,GACR,eAAe,GACf,gBAAgB,GAChB,cAAc,CAAC;AAYnB,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,qBAWrG;AAED,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC3C,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,YAAY,GAAG,UAAU,CAC1B,GAAG;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,mBAAmB,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,qBAAqB;kBAJlB,MAAM;UACd,mBAAmB;2CAgB1B,CAAC"}
1
+ {"version":3,"file":"table-icons.d.ts","sourceRoot":"","sources":["../src/table-icons.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,mBAAmB,GAC3B,YAAY,GACZ,qBAAqB,GACrB,oBAAoB,GACpB,QAAQ,GACR,eAAe,GACf,gBAAgB,GAChB,cAAc,CAAC;AAYnB,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,qBAWrG;AAED,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC3C,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,YAAY,GAAG,UAAU,CAC1B,GAAG;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,mBAAmB,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,qBAAqB;kBAJlB,MAAM;UACd,mBAAmB;2CAgB1B,CAAC"}
@@ -37,6 +37,7 @@ type Preview<T> = {
37
37
  export declare function useCominsTreeDrag<T>(options: Options<T>): {
38
38
  announcement: string;
39
39
  navigateRef: React.RefObject<((id: CominsRowId) => void) | null>;
40
+ pendingScrollTop: React.RefObject<number | null>;
40
41
  restoreFocus: () => void;
41
42
  onPointerDown: (event: React.PointerEvent<HTMLElement>, row: CominsEventRow<T>) => void;
42
43
  onKeyDown: (event: React.KeyboardEvent<HTMLElement>, row: CominsEventRow<T>) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"tree-drag.d.ts","sourceRoot":"","sources":["../src/tree-drag.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAElI,OAAO,EAAsB,KAAK,qBAAqB,EAA+B,KAAK,cAAc,EAAE,KAAK,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAEnL,MAAM,MAAM,8BAA8B,CAAC,CAAC,IAAI;IAC9C,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1E,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;CACxB,CAAC;AACF,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI;IACxC,KAAK,EAAE,YAAY,GAAG,aAAa,CAAC;IACpC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AACF,MAAM,MAAM,6BAA6B,CAAC,CAAC,IAAI;IAC7C,KAAK,EAAE,YAAY,GAAG,aAAa,GAAG,IAAI,CAAC;IAC3C,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAEF,KAAK,OAAO,CAAC,CAAC,IAAI;IAChB,IAAI,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,OAAO,EAAE,SAAS,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC;IACjD,MAAM,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;IACnD,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC;IACjF,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC3D,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACtE,CAAC;AACF,KAAK,OAAO,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAUxE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;;uCAGrB,WAAW,KAAK,IAAI;;2BAyFvB,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC;uBA4E3D,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC;;EAcnF"}
1
+ {"version":3,"file":"tree-drag.d.ts","sourceRoot":"","sources":["../src/tree-drag.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAElI,OAAO,EAAsB,KAAK,qBAAqB,EAA+B,KAAK,cAAc,EAAE,KAAK,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAEnL,MAAM,MAAM,8BAA8B,CAAC,CAAC,IAAI;IAC9C,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1E,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;CACxB,CAAC;AACF,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI;IACxC,KAAK,EAAE,YAAY,GAAG,aAAa,CAAC;IACpC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AACF,MAAM,MAAM,6BAA6B,CAAC,CAAC,IAAI;IAC7C,KAAK,EAAE,YAAY,GAAG,aAAa,GAAG,IAAI,CAAC;IAC3C,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAEF,KAAK,OAAO,CAAC,CAAC,IAAI;IAChB,IAAI,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,OAAO,EAAE,SAAS,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC;IACjD,MAAM,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;IACnD,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC;IACjF,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC3D,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACtE,CAAC;AACF,KAAK,OAAO,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAUxE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;;uCAGrB,WAAW,KAAK,IAAI;;;2BA6FvB,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC;uBA6E3D,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC;;EAcnF"}
package/package.json CHANGED
@@ -1,6 +1,20 @@
1
1
  {
2
2
  "name": "comins-table",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
4
+ "keywords": [
5
+ "react",
6
+ "typescript",
7
+ "data-table",
8
+ "data-grid",
9
+ "react-table",
10
+ "virtualization",
11
+ "tree-grid",
12
+ "row-grouping",
13
+ "column-pinning",
14
+ "editable-table",
15
+ "clipboard",
16
+ "viewport-datasource"
17
+ ],
4
18
  "license": "MIT",
5
19
  "type": "module",
6
20
  "repository": {
package/styles.css CHANGED
@@ -17,8 +17,8 @@
17
17
  --comins-table-drop-invalid: #dc2626;
18
18
  --comins-table-drop-invalid-background: rgba(220, 38, 38, 0.22);
19
19
  --comins-table-drop-marker: #064e3b;
20
- --comins-table-drop-valid: #2563eb;
21
- --comins-table-drop-valid-background: rgba(37, 99, 235, 0.22);
20
+ --comins-table-drop-valid: var(--comins-table-accent-strong);
21
+ --comins-table-drop-valid-background: var(--comins-table-accent-soft);
22
22
  --comins-table-focus: rgba(16, 185, 129, 0.28);
23
23
  --comins-table-foreground: #111827;
24
24
  --comins-table-group-row-background: #d1d5db;
@@ -72,6 +72,7 @@
72
72
  border-left: 1px solid var(--comins-table-border);
73
73
  border-radius: 2px;
74
74
  border-right: 1px solid var(--comins-table-border);
75
+ border-top: 1px solid var(--comins-table-border);
75
76
  color: var(--comins-table-foreground);
76
77
  display: flex;
77
78
  flex-direction: column;
@@ -302,10 +303,11 @@
302
303
  padding-left: calc(var(--comins-tree-depth) * 16px);
303
304
  }
304
305
 
305
- .comins-table__tr[data-comins-tree-drop="before"] > td { box-shadow: inset 0 2px var(--comins-table-accent-strong); }
306
- .comins-table__tr[data-comins-tree-drop="after"] > td { box-shadow: inset 0 -2px var(--comins-table-accent-strong); }
307
- .comins-table__tr[data-comins-tree-drop="inside"] > td { box-shadow: inset 0 0 0 2px var(--comins-table-accent-strong); }
308
- .comins-table__tr[data-comins-tree-drop-valid="false"] > td { box-shadow: inset 0 0 0 2px #dc2626; }
306
+ .comins-table__tr[data-comins-tree-drop="before"] > td { box-shadow: inset 0 2px var(--comins-table-drop-valid); }
307
+ .comins-table__tr[data-comins-tree-drop="after"] > td { box-shadow: inset 0 -2px var(--comins-table-drop-valid); }
308
+ .comins-table__tr[data-comins-tree-drop="inside"] { outline: 2px solid var(--comins-table-drop-valid); outline-offset: -2px; }
309
+ .comins-table__tr[data-comins-tree-drop-valid="false"] { outline: 2px solid var(--comins-table-drop-invalid); outline-offset: -2px; }
310
+ .comins-table__tr[data-comins-tree-drop-valid="false"] > td { box-shadow: none; }
309
311
  .comins-table__sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
310
312
 
311
313
  .comins-tree-expander,
@@ -393,15 +395,18 @@
393
395
  }
394
396
 
395
397
  .comins-table__group-row[data-comins-group-drag-source="true"] > .comins-table__group-cell {
396
- opacity: 0.68;
398
+ background: var(--comins-table-surface-muted);
399
+ color: var(--comins-table-muted);
400
+ outline: 1px dashed var(--comins-table-drop-marker);
401
+ outline-offset: -2px;
397
402
  }
398
403
 
399
404
  .comins-table__group-row[data-comins-group-drop-position="before"] > .comins-table__group-cell {
400
- box-shadow: inset 0 3px var(--comins-table-drop-marker);
405
+ box-shadow: inset 0 2px var(--comins-table-drop-valid);
401
406
  }
402
407
 
403
408
  .comins-table__group-row[data-comins-group-drop-position="after"] > .comins-table__group-cell {
404
- box-shadow: inset 0 -3px var(--comins-table-drop-marker);
409
+ box-shadow: inset 0 -2px var(--comins-table-drop-valid);
405
410
  }
406
411
 
407
412
  .comins-table__group-row[data-comins-group-drop-valid="false"] > .comins-table__group-cell {
@@ -410,17 +415,17 @@
410
415
 
411
416
  .comins-table__body-viewport[data-comins-group-drop-valid="true"],
412
417
  .comins-table__body-viewport[data-comins-row-drop-valid="true"] {
413
- box-shadow: inset 0 0 0 3px var(--comins-table-drop-marker);
418
+ box-shadow: inset 0 0 0 2px var(--comins-table-drop-valid);
414
419
  }
415
420
 
416
421
  .comins-table__body-viewport[data-comins-group-drop-valid="false"],
417
422
  .comins-table__body-viewport[data-comins-row-drop-valid="false"] {
418
- box-shadow: inset 0 0 0 3px var(--comins-table-drop-invalid);
423
+ box-shadow: inset 0 0 0 2px var(--comins-table-drop-invalid);
419
424
  }
420
425
 
421
426
  .comins-table[data-comins-transfer-rejected="true"] {
422
- outline: 1px solid var(--comins-table-drop-invalid);
423
- outline-offset: -1px;
427
+ outline: 2px solid var(--comins-table-drop-invalid);
428
+ outline-offset: -2px;
424
429
  }
425
430
 
426
431
  .comins-table__group-row[data-comins-row-drop-valid="true"] > .comins-table__group-cell {
@@ -633,7 +638,9 @@
633
638
  }
634
639
 
635
640
  .comins-row-detail-expander .comins-table-icon,
636
- .comins-tree-expander .comins-table-icon {
641
+ .comins-tree-expander .comins-table-icon,
642
+ .comins-group-expander .comins-table-icon,
643
+ .comins-sort-indicator[data-sort-state] {
637
644
  transition: none;
638
645
  }
639
646
  }
@@ -660,10 +667,6 @@
660
667
  z-index: 1;
661
668
  }
662
669
 
663
- .comins-table:not([data-show-header="true"]) .comins-table__body-table {
664
- border-top: 1px solid var(--comins-table-border);
665
- }
666
-
667
670
  .comins-table__thead .comins-table__th {
668
671
  background: var(--comins-table-header-background);
669
672
  border-bottom: 1px solid var(--comins-table-header-border);
@@ -732,6 +735,18 @@
732
735
  border-bottom: 0;
733
736
  }
734
737
 
738
+ /* The frame owns the perimeter; keep only internal Cell separators. */
739
+ .comins-table__thead > tr:first-child > .comins-table__th {
740
+ border-top: 0;
741
+ }
742
+
743
+ .comins-table__thead .comins-table__th[data-comins-column-end="true"],
744
+ .comins-table__td:last-child,
745
+ .comins-table__summary-cell:last-child,
746
+ .comins-table__detail-content {
747
+ border-right: 0;
748
+ }
749
+
735
750
  .comins-table__tr {
736
751
  height: var(--comins-table-row-height);
737
752
  }
@@ -768,7 +783,8 @@
768
783
  }
769
784
 
770
785
  .comins-table__th[data-column-placeholder="true"] {
771
- background: color-mix(in srgb, var(--comins-table-header-background) 82%, #000000);
786
+ background: var(--comins-table-surface-muted);
787
+ color: var(--comins-table-muted);
772
788
  outline: 1px dashed var(--comins-table-drop-marker);
773
789
  outline-offset: -2px;
774
790
  }
@@ -1013,6 +1029,7 @@
1013
1029
 
1014
1030
  .comins-table__th[data-column-drop-target="true"][data-column-drop-valid="true"] {
1015
1031
  background: var(--comins-table-drop-valid-background);
1032
+ color: var(--comins-table-foreground);
1016
1033
  outline: 2px solid var(--comins-table-drop-valid);
1017
1034
  outline-offset: -2px;
1018
1035
  }
@@ -1022,10 +1039,12 @@
1022
1039
  }
1023
1040
 
1024
1041
  .comins-table__th[data-column-placeholder="true"][data-column-drop-target="true"] {
1025
- background: color-mix(in srgb, var(--comins-table-header-background) 82%, #000000);
1042
+ background: var(--comins-table-surface-muted);
1043
+ color: var(--comins-table-muted);
1026
1044
  }
1027
1045
 
1028
1046
  .comins-table__th[data-column-drop-target="true"][data-column-drop-valid="false"] {
1047
+ color: var(--comins-table-foreground);
1029
1048
  background: var(--comins-table-drop-invalid-background);
1030
1049
  cursor: not-allowed;
1031
1050
  outline: 2px solid var(--comins-table-drop-invalid);
@@ -1056,11 +1075,11 @@
1056
1075
 
1057
1076
  .comins-column-move-ghost {
1058
1077
  align-items: center;
1059
- background: var(--comins-table-drop-marker);
1060
- border: 1px solid rgba(255, 255, 255, 0.58);
1061
- border-radius: 6px;
1062
- box-shadow: 0 10px 28px rgba(15, 23, 42, 0.22);
1063
- color: #ffffff;
1078
+ background: var(--comins-table-surface);
1079
+ border: 1px solid var(--comins-table-drop-marker);
1080
+ border-radius: 2px;
1081
+ box-shadow: 0 4px 12px color-mix(in srgb, var(--comins-table-foreground) 18%, transparent);
1082
+ color: var(--comins-table-foreground);
1064
1083
  display: inline-flex;
1065
1084
  font-size: 13px;
1066
1085
  font-weight: 800;
@@ -1203,6 +1222,9 @@
1203
1222
  transform: scale(1) rotate(0deg);
1204
1223
  }
1205
1224
 
1225
+ .comins-sort-indicator[data-sort-state="asc"] .comins-table-icon { transform: rotate(-90deg); }
1226
+ .comins-sort-indicator[data-sort-state="desc"] .comins-table-icon { transform: rotate(90deg); }
1227
+
1206
1228
  .comins-sort-priority {
1207
1229
  align-items: center;
1208
1230
  background: color-mix(in srgb, var(--comins-table-accent) 18%, transparent);
@@ -1264,33 +1286,80 @@
1264
1286
  cursor: grabbing;
1265
1287
  }
1266
1288
 
1289
+ .comins-row-move-placeholder,
1267
1290
  .comins-row-move-placeholder td {
1268
- background: var(--comins-table-row-selected-background);
1269
- border-bottom: 1px solid var(--comins-table-row-border);
1270
- border-right: 1px solid var(--comins-table-cell-border);
1271
- color: var(--comins-table-accent-strong);
1291
+ border: 0;
1292
+ height: 0;
1293
+ padding: 0;
1294
+ position: relative;
1295
+ }
1296
+
1297
+ .comins-row-move-placeholder td > div {
1298
+ background: var(--comins-table-drop-valid-background);
1299
+ color: var(--comins-table-foreground);
1272
1300
  font-weight: 700;
1273
- height: 32px;
1301
+ height: var(--comins-table-row-height);
1302
+ align-items: center;
1303
+ box-sizing: border-box;
1304
+ display: flex;
1305
+ justify-content: center;
1306
+ left: 0;
1307
+ pointer-events: none;
1308
+ position: absolute;
1309
+ right: 0;
1310
+ top: 0;
1311
+ z-index: 4;
1312
+ outline: 2px solid var(--comins-table-drop-valid);
1313
+ outline-offset: -2px;
1274
1314
  text-align: center;
1275
1315
  }
1276
1316
 
1277
- .comins-row-move-placeholder[data-comins-row-drop-valid="false"] td {
1317
+ .comins-row-move-placeholder[data-comins-row-drop-valid="false"] td > div {
1278
1318
  background: var(--comins-table-drop-invalid-background);
1279
- color: var(--comins-table-drop-invalid);
1319
+ outline-color: var(--comins-table-drop-invalid);
1320
+ }
1321
+
1322
+ .comins-table__tr[data-comins-tree-drop-valid="true"] > .comins-table__td,
1323
+ .comins-table__group-row[data-comins-group-drop-position] > .comins-table__group-cell,
1324
+ .comins-table__group-row[data-comins-row-drop-valid="true"] > .comins-table__group-cell,
1325
+ .comins-table__tr[data-comins-row-drop-valid="true"] > .comins-table__td {
1326
+ background: var(--comins-table-drop-valid-background);
1327
+ color: var(--comins-table-foreground);
1328
+ }
1329
+
1330
+ .comins-table__tr[data-comins-tree-drop-valid="false"] > .comins-table__td,
1331
+ .comins-table__group-row[data-comins-group-drop-valid="false"] > .comins-table__group-cell {
1332
+ background: var(--comins-table-drop-invalid-background);
1333
+ color: var(--comins-table-foreground);
1334
+ }
1335
+
1336
+ .comins-table__group-row[data-comins-row-drop-valid="true"] {
1337
+ outline: 2px solid var(--comins-table-drop-valid);
1338
+ outline-offset: -2px;
1339
+ }
1340
+
1341
+ .comins-table__group-row[data-comins-group-drop-valid="false"],
1342
+ .comins-table__group-row[data-comins-row-drop-valid="false"] {
1343
+ outline: 2px solid var(--comins-table-drop-invalid);
1344
+ outline-offset: -2px;
1345
+ }
1346
+
1347
+ .comins-table__group-row[data-comins-group-drop-valid="false"] > .comins-table__group-cell {
1348
+ box-shadow: none;
1280
1349
  }
1281
1350
 
1282
1351
  .comins-table__tr[data-comins-cross-row-drop-position="before"] > .comins-table__td {
1283
- box-shadow: inset 0 3px var(--comins-table-drop-marker);
1352
+ box-shadow: inset 0 2px var(--comins-table-drop-valid);
1284
1353
  }
1285
1354
 
1286
1355
  .comins-table__tr[data-comins-cross-row-drop-position="before"][data-comins-row-drop-valid="false"] > .comins-table__td {
1287
1356
  background: var(--comins-table-drop-invalid-background);
1288
- box-shadow: inset 0 3px var(--comins-table-drop-invalid);
1357
+ box-shadow: inset 0 2px var(--comins-table-drop-invalid);
1289
1358
  }
1290
1359
 
1291
1360
  .comins-table-empty-filler td {
1292
1361
  border-bottom: 0;
1293
- border-right: 1px solid var(--comins-table-cell-border);
1362
+ border-right: 0;
1294
1363
  min-height: 1px;
1295
1364
  }
1296
1365
 
@@ -1580,7 +1649,7 @@
1580
1649
  }
1581
1650
 
1582
1651
  .comins-table__component-menu-item:disabled {
1583
- color: #94a3b8;
1652
+ color: var(--comins-table-component-muted);
1584
1653
  cursor: not-allowed;
1585
1654
  }
1586
1655
 
@@ -1623,7 +1692,7 @@
1623
1692
  .comins-table__component-virtual-list-item {
1624
1693
  align-items: center;
1625
1694
  background: var(--comins-table-component-surface-muted);
1626
- border: 1px solid rgba(57, 99, 88, 0.18);
1695
+ border: 1px solid var(--comins-table-component-border);
1627
1696
  border-radius: 4px;
1628
1697
  box-sizing: border-box;
1629
1698
  color: var(--comins-table-component-foreground);
@@ -1666,7 +1735,7 @@
1666
1735
  .comins-table__component-virtual-list-item:disabled,
1667
1736
  .comins-table__component-virtual-list-more:disabled,
1668
1737
  .comins-table__component-virtual-list-search:disabled {
1669
- color: #94a3b8;
1738
+ color: var(--comins-table-component-muted);
1670
1739
  cursor: not-allowed;
1671
1740
  opacity: 0.72;
1672
1741
  }
@@ -1699,3 +1768,63 @@
1699
1768
  text-overflow: ellipsis;
1700
1769
  white-space: nowrap;
1701
1770
  }
1771
+
1772
+ /* Group targets and clipboard controls share the Table's semantic state tokens. */
1773
+ .comins-table__group-row[data-comins-group-drop-position]:not([data-comins-group-drop-valid="false"]) > .comins-table__group-cell {
1774
+ background: var(--comins-table-drop-valid-background);
1775
+ color: var(--comins-table-foreground);
1776
+ }
1777
+
1778
+ .comins-sort-indicator:hover { background: color-mix(in srgb, currentColor 12%, transparent); }
1779
+ .comins-table__component-menu-item:focus-visible,
1780
+ .comins-table__component-virtual-list-item:focus-visible {
1781
+ outline: 2px solid var(--comins-table-component-accent-strong);
1782
+ outline-offset: -2px;
1783
+ }
1784
+ .comins-table__td { position: relative; }
1785
+ .comins-cell-fill-preview {
1786
+ box-shadow: inset 0 0 0 1px var(--comins-table-drop-valid);
1787
+ background: var(--comins-table-drop-valid-background);
1788
+ }
1789
+ .comins-fill-handle {
1790
+ align-items: flex-end;
1791
+ background: transparent;
1792
+ border: 0;
1793
+ bottom: 0;
1794
+ cursor: crosshair;
1795
+ display: flex;
1796
+ height: 24px;
1797
+ justify-content: flex-end;
1798
+ padding: 2px;
1799
+ position: absolute;
1800
+ right: 0;
1801
+ touch-action: none;
1802
+ width: 24px;
1803
+ z-index: 2;
1804
+ }
1805
+ .comins-fill-handle > span {
1806
+ background: var(--comins-table-accent-strong);
1807
+ border: 1px solid var(--comins-table-background);
1808
+ height: 8px;
1809
+ width: 8px;
1810
+ }
1811
+ .comins-fill-handle:focus-visible { outline: 2px solid var(--comins-table-accent-strong); outline-offset: -2px; }
1812
+ .comins-fill-menu {
1813
+ background: var(--comins-table-surface);
1814
+ border: 1px solid var(--comins-table-border);
1815
+ border-radius: 2px;
1816
+ color: var(--comins-table-foreground);
1817
+ display: grid;
1818
+ gap: 2px;
1819
+ padding: 4px;
1820
+ position: fixed;
1821
+ width: 180px;
1822
+ z-index: 80;
1823
+ }
1824
+ .comins-fill-menu button {
1825
+ background: transparent; border: 0; color: inherit; cursor: pointer;
1826
+ font: inherit; padding: 6px 8px; text-align: left;
1827
+ }
1828
+ .comins-fill-menu button:hover { background: var(--comins-table-accent-soft); }
1829
+ .comins-fill-menu button:focus-visible { outline: 2px solid var(--comins-table-accent-strong); outline-offset: -2px; }
1830
+ .comins-fill-menu button:disabled { color: var(--comins-table-muted); cursor: not-allowed; }