@vtable-guild/vtable-guild 2.4.0 → 2.5.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.
Files changed (78) hide show
  1. package/css/style.css +9 -0
  2. package/css/tailwind3-utilities.css +9 -0
  3. package/dist/core/src/components/VirtualList/VirtualList.d.ts +21 -0
  4. package/dist/core/src/components/VirtualList/VirtualList.d.ts.map +1 -1
  5. package/dist/core/src/components/VirtualList/VirtualList.mjs +201 -216
  6. package/dist/core/src/components/VirtualList/hooks/useHeights.d.ts +7 -1
  7. package/dist/core/src/components/VirtualList/hooks/useHeights.d.ts.map +1 -1
  8. package/dist/core/src/components/VirtualList/hooks/useHeights.mjs +29 -27
  9. package/dist/core/src/components/VirtualList/hooks/useScrollTo.d.ts +3 -1
  10. package/dist/core/src/components/VirtualList/hooks/useScrollTo.d.ts.map +1 -1
  11. package/dist/core/src/components/VirtualList/hooks/useScrollTo.mjs +57 -50
  12. package/dist/core/src/components/VirtualList/index.d.ts +1 -0
  13. package/dist/core/src/components/VirtualList/index.d.ts.map +1 -1
  14. package/dist/core/src/components/VirtualList/utils/PrefixSums.d.ts +50 -0
  15. package/dist/core/src/components/VirtualList/utils/PrefixSums.d.ts.map +1 -0
  16. package/dist/core/src/components/VirtualList/utils/PrefixSums.mjs +54 -0
  17. package/dist/core/src/components/VirtualList/utils/PrefixSums.test.d.ts +2 -0
  18. package/dist/core/src/components/VirtualList/utils/PrefixSums.test.d.ts.map +1 -0
  19. package/dist/core/src/composables/useTheme.d.ts +1 -1
  20. package/dist/core/src/composables/useTheme.mjs +5 -5
  21. package/dist/core/src/index.d.ts +5 -0
  22. package/dist/core/src/index.d.ts.map +1 -1
  23. package/dist/core/src/plugin/index.d.ts +1 -1
  24. package/dist/core/src/utils/props.d.ts +1 -1
  25. package/dist/core/src/utils/tv.d.ts +2 -2
  26. package/dist/core/src/utils/types.d.ts +2 -2
  27. package/dist/css/style.css +9 -0
  28. package/dist/css/tailwind3-utilities.css +9 -0
  29. package/dist/index.full.mjs +3614 -3292
  30. package/dist/index.mjs +32 -30
  31. package/dist/table/src/components/ColGroup.d.ts.map +1 -1
  32. package/dist/table/src/components/ColGroup.mjs +11 -8
  33. package/dist/table/src/components/Table.d.ts +62 -0
  34. package/dist/table/src/components/Table.d.ts.map +1 -1
  35. package/dist/table/src/components/Table.mjs +353 -298
  36. package/dist/table/src/components/TableBody.d.ts.map +1 -1
  37. package/dist/table/src/components/TableBody.mjs +22 -22
  38. package/dist/table/src/components/TableCell.d.ts +23 -0
  39. package/dist/table/src/components/TableCell.d.ts.map +1 -1
  40. package/dist/table/src/components/TableCell.mjs +50 -39
  41. package/dist/table/src/components/TableHeaderCell.d.ts.map +1 -1
  42. package/dist/table/src/components/TableHeaderCell.mjs +172 -169
  43. package/dist/table/src/components/VTable.vue.mjs +10 -8
  44. package/dist/table/src/components/VirtualTableBody.d.ts +40 -0
  45. package/dist/table/src/components/VirtualTableBody.d.ts.map +1 -1
  46. package/dist/table/src/components/VirtualTableBody.mjs +157 -67
  47. package/dist/table/src/composables/index.d.ts +4 -0
  48. package/dist/table/src/composables/index.d.ts.map +1 -1
  49. package/dist/table/src/composables/useColumnMetrics.d.ts +39 -0
  50. package/dist/table/src/composables/useColumnMetrics.d.ts.map +1 -0
  51. package/dist/table/src/composables/useColumnMetrics.mjs +88 -0
  52. package/dist/table/src/composables/useColumnWindow.d.ts +90 -0
  53. package/dist/table/src/composables/useColumnWindow.d.ts.map +1 -0
  54. package/dist/table/src/composables/useColumnWindow.mjs +62 -0
  55. package/dist/table/src/composables/useColumnWindow.test.d.ts +2 -0
  56. package/dist/table/src/composables/useColumnWindow.test.d.ts.map +1 -0
  57. package/dist/table/src/composables/useColumns.d.ts +8 -0
  58. package/dist/table/src/composables/useColumns.d.ts.map +1 -1
  59. package/dist/table/src/composables/useColumns.mjs +46 -43
  60. package/dist/table/src/composables/useSelection.d.ts.map +1 -1
  61. package/dist/table/src/composables/useSelection.mjs +93 -94
  62. package/dist/table/src/composables/useVirtual.d.ts +10 -0
  63. package/dist/table/src/composables/useVirtual.d.ts.map +1 -1
  64. package/dist/table/src/composables/useVirtual.mjs +15 -11
  65. package/dist/table/src/index.d.ts +2 -0
  66. package/dist/table/src/index.d.ts.map +1 -1
  67. package/dist/table/src/types/table.d.ts +25 -0
  68. package/dist/table/src/types/table.d.ts.map +1 -1
  69. package/dist/theme/src/presets/antdv/table.d.ts +3 -0
  70. package/dist/theme/src/presets/antdv/table.d.ts.map +1 -1
  71. package/dist/theme/src/presets/antdv/table.mjs +4 -1
  72. package/package.json +10 -3
  73. package/dist/core/src/components/VirtualList/hooks/useDiffItem.d.ts +0 -4
  74. package/dist/core/src/components/VirtualList/hooks/useDiffItem.d.ts.map +0 -1
  75. package/dist/core/src/components/VirtualList/hooks/useDiffItem.mjs +0 -16
  76. package/dist/core/src/components/VirtualList/utils/algorithmUtil.d.ts +0 -7
  77. package/dist/core/src/components/VirtualList/utils/algorithmUtil.d.ts.map +0 -1
  78. package/dist/core/src/components/VirtualList/utils/algorithmUtil.mjs +0 -22
@@ -1,7 +1,13 @@
1
1
  import { default as CacheMap } from '../utils/CacheMap';
2
2
  import { Key } from '../interface';
3
3
  import { ref } from 'vue';
4
- export default function useHeights(getKey: (item: any) => Key, onItemAdd?: (item: any) => void, onItemRemove?: (item: any) => void): [
4
+ /**
5
+ * @param disabled 定高快路径开关。返回 true 时**完全不测量**:
6
+ * 不注册 ResizeObserver、不读 offsetHeight/getComputedStyle、不写 CacheMap。
7
+ * 于是 `heights.id` 恒为 0,VirtualList 的可视区计算永远走 O(1) 的估算分支,
8
+ * 不再每次滚动重建整表前缀和。代价是行高必须真的等于声明值(调用方负责校验)。
9
+ */
10
+ export default function useHeights(getKey: (item: any) => Key, onItemAdd?: (item: any) => void, onItemRemove?: (item: any) => void, disabled?: () => boolean): [
5
11
  setInstanceRef: (item: any, instance: HTMLElement | null) => void,
6
12
  collectHeight: (sync?: boolean) => void,
7
13
  heights: CacheMap,
@@ -1 +1 @@
1
- {"version":3,"file":"useHeights.d.ts","sourceRoot":"","sources":["../../../../../../../core/src/components/VirtualList/hooks/useHeights.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,mBAAmB,CAAA;AACxC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAwB,GAAG,EAAE,MAAM,KAAK,CAAA;AAa/C,MAAM,CAAC,OAAO,UAAU,UAAU,CAChC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,EAC1B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAC/B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GACjC;IACD,cAAc,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI;IACjE,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI;IACvC,OAAO,EAAE,QAAQ;IACjB,WAAW,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5C,CA0FA"}
1
+ {"version":3,"file":"useHeights.d.ts","sourceRoot":"","sources":["../../../../../../../core/src/components/VirtualList/hooks/useHeights.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,mBAAmB,CAAA;AACxC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAwB,GAAG,EAAE,MAAM,KAAK,CAAA;AAa/C;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAChC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,EAC1B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAC/B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAClC,QAAQ,CAAC,EAAE,MAAM,OAAO,GACvB;IACD,cAAc,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI;IACjE,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI;IACvC,OAAO,EAAE,QAAQ;IACjB,WAAW,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5C,CA8FA"}
@@ -1,32 +1,33 @@
1
- import I from "../utils/CacheMap.mjs";
2
- import { ref as d, markRaw as O, onUnmounted as y } from "vue";
3
- function h(n) {
4
- const c = parseFloat(n);
5
- return isNaN(c) ? 0 : c;
1
+ import y from "../utils/CacheMap.mjs";
2
+ import { ref as v, markRaw as z, onUnmounted as C } from "vue";
3
+ function b(n) {
4
+ const a = parseFloat(n);
5
+ return isNaN(a) ? 0 : a;
6
6
  }
7
7
  function R(n) {
8
8
  return n instanceof HTMLElement ? n : n?.$el instanceof HTMLElement ? n.$el : null;
9
9
  }
10
- function B(n, c, z) {
11
- const v = d(0), i = d(/* @__PURE__ */ new Map()), f = O(new I()), l = d(0), a = /* @__PURE__ */ new Map(), s = typeof window < "u" && "ResizeObserver" in window ? new window.ResizeObserver(() => {
12
- u();
10
+ function P(n, a, k, H) {
11
+ const g = v(0), i = v(/* @__PURE__ */ new Map()), c = z(new y()), l = v(0), f = /* @__PURE__ */ new Map(), u = () => H?.() === !0, s = !u() && typeof window < "u" && "ResizeObserver" in window ? new window.ResizeObserver(() => {
12
+ m();
13
13
  }) : null;
14
- function g() {
14
+ function p() {
15
15
  l.value += 1;
16
16
  }
17
- function u(m = !1) {
18
- g();
17
+ function m(d = !1) {
18
+ if (u()) return;
19
+ p();
19
20
  const o = () => {
20
21
  let e = !1;
21
- i.value.forEach((p, r) => {
22
- const t = R(p);
22
+ i.value.forEach((w, r) => {
23
+ const t = R(w);
23
24
  if (t && t.offsetParent) {
24
- const { offsetHeight: H } = t, { marginTop: M, marginBottom: E } = getComputedStyle(t), N = h(M), T = h(E), w = H + N + T;
25
- f.get(r) !== w && (f.set(r, w), e = !0);
25
+ const { offsetHeight: E } = t, { marginTop: N, marginBottom: T } = getComputedStyle(t), I = b(N), O = b(T), h = E + I + O;
26
+ c.get(r) !== h && (c.set(r, h), e = !0);
26
27
  }
27
- }), e && (v.value += 1);
28
+ }), e && (g.value += 1);
28
29
  };
29
- if (m)
30
+ if (d)
30
31
  o();
31
32
  else {
32
33
  l.value += 1;
@@ -36,21 +37,22 @@ function B(n, c, z) {
36
37
  });
37
38
  }
38
39
  }
39
- function b(m, o) {
40
- const e = n(m);
40
+ function M(d, o) {
41
+ if (u()) return;
42
+ const e = n(d);
41
43
  if (i.value.get(e) === o) return;
42
- const r = a.get(e);
43
- if (r && s && (s.unobserve(r), a.delete(e)), o) {
44
- i.value.set(e, o), u();
44
+ const r = f.get(e);
45
+ if (r && s && (s.unobserve(r), f.delete(e)), o) {
46
+ i.value.set(e, o), m();
45
47
  const t = R(o);
46
- t && t.nodeType === 1 && s && (s.observe(t), a.set(e, t));
48
+ t && t.nodeType === 1 && s && (s.observe(t), f.set(e, t));
47
49
  } else
48
50
  i.value.delete(e);
49
51
  }
50
- return y(() => {
51
- g(), s?.disconnect?.(), a.clear();
52
- }), [b, u, f, v];
52
+ return C(() => {
53
+ p(), s?.disconnect?.(), f.clear();
54
+ }), [M, m, c, g];
53
55
  }
54
56
  export {
55
- B as default
57
+ P as default
56
58
  };
@@ -1,7 +1,9 @@
1
1
  import { ComputedRef, Ref } from 'vue';
2
2
  import { default as CacheMap } from '../utils/CacheMap';
3
3
  import { Key } from '../interface';
4
- export default function useScrollTo(containerRef: Ref<HTMLElement | undefined>, data: Ref<any[]>, heights: CacheMap, itemHeight: ComputedRef<number | undefined>, getKey: (item: any) => Key, collectHeight: () => void, syncScrollTop: (top: number) => void, triggerFlash: () => void): [scrollTo: (arg?: number | ScrollConfig | null) => void, getTotalHeight: () => number];
4
+ export default function useScrollTo(containerRef: Ref<HTMLElement | undefined>, data: Ref<any[]>, heights: CacheMap, itemHeight: ComputedRef<number | undefined>, getKey: (item: any) => Key, collectHeight: () => void, syncScrollTop: (top: number) => void, triggerFlash: () => void,
5
+ /** 定高快路径:高度不测量,总高与任意行的位置都可以直接算出来,无需逐行累加。 */
6
+ fixedHeight?: () => boolean): [scrollTo: (arg?: number | ScrollConfig | null) => void, getTotalHeight: () => number];
5
7
  export interface ScrollConfig {
6
8
  index?: number;
7
9
  key?: Key;
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollTo.d.ts","sourceRoot":"","sources":["../../../../../../../core/src/components/VirtualList/hooks/useScrollTo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAIvC,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,YAAY,EAAE,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,EAC1C,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,EAChB,OAAO,EAAE,QAAQ,EACjB,UAAU,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,EAC3C,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,EAC1B,aAAa,EAAE,MAAM,IAAI,EACzB,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EACpC,YAAY,EAAE,MAAM,IAAI,GACvB,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,KAAK,IAAI,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAiIxF;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACb"}
1
+ {"version":3,"file":"useScrollTo.d.ts","sourceRoot":"","sources":["../../../../../../../core/src/components/VirtualList/hooks/useScrollTo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAIvC,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,YAAY,EAAE,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,EAC1C,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,EAChB,OAAO,EAAE,QAAQ,EACjB,UAAU,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,EAC3C,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,EAC1B,aAAa,EAAE,MAAM,IAAI,EACzB,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EACpC,YAAY,EAAE,MAAM,IAAI;AACxB,4CAA4C;AAC5C,WAAW,CAAC,EAAE,MAAM,OAAO,GAC1B,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,KAAK,IAAI,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CA2IxF;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACb"}
@@ -1,88 +1,95 @@
1
- import { shallowRef as B, watch as I } from "vue";
2
- const S = 10;
3
- function E(h, n, g, d, v, w, k, y) {
4
- const t = B(null), M = () => {
1
+ import { shallowRef as S, watch as j } from "vue";
2
+ const C = 10;
3
+ function L(g, n, T, h, m, y, A, M, B) {
4
+ const t = S(null), H = () => B?.() === !0, I = () => {
5
+ if (H()) return n.value.length * (h.value ?? 0);
5
6
  let e = 0;
6
- for (let o = 0; o < n.value.length; o += 1) {
7
- const c = v(n.value[o]), i = g.get(c);
8
- e += i === void 0 ? d.value ?? 0 : i;
7
+ for (let l = 0; l < n.value.length; l += 1) {
8
+ const a = m(n.value[l]), o = T.get(a);
9
+ e += o === void 0 ? h.value ?? 0 : o;
9
10
  }
10
11
  return e;
11
12
  };
12
- return I(
13
+ return j(
13
14
  t,
14
15
  () => {
15
- if (t.value && t.value.times < S) {
16
- if (!h.value) {
16
+ if (t.value && t.value.times < C) {
17
+ if (!g.value) {
17
18
  t.value = { ...t.value };
18
19
  return;
19
20
  }
20
- w();
21
- const { targetAlign: e, originAlign: o, index: c, offset: i } = t.value, s = h.value.clientHeight;
22
- let p = !1, T = e ?? null, u = null;
23
- if (s) {
24
- const b = e || o;
25
- let x = 0, r = 0, m = 0;
26
- const A = Math.min(n.value.length - 1, c);
27
- for (let l = 0; l <= A; l += 1) {
28
- const f = v(n.value[l]);
29
- r = x;
30
- const a = g.get(f);
31
- m = r + (a === void 0 ? d.value ?? 0 : a), x = m;
32
- }
33
- let H = b === "top" ? i : s - i;
34
- for (let l = A; l >= 0; l -= 1) {
35
- const f = v(n.value[l]), a = g.get(f);
36
- if (a === void 0) {
37
- p = !0;
38
- break;
21
+ y();
22
+ const { targetAlign: e, originAlign: l, index: a, offset: o } = t.value, u = g.value.clientHeight;
23
+ let d = !1, k = e ?? null, c = null;
24
+ if (u) {
25
+ const w = e || l;
26
+ let f = 0, v = 0;
27
+ const b = Math.min(n.value.length - 1, a);
28
+ if (H()) {
29
+ const i = h.value ?? 0;
30
+ f = b * i, v = f + i;
31
+ } else {
32
+ let i = 0;
33
+ for (let s = 0; s <= b; s += 1) {
34
+ const x = m(n.value[s]);
35
+ f = i;
36
+ const r = T.get(x);
37
+ v = f + (r === void 0 ? h.value ?? 0 : r), i = v;
38
+ }
39
+ let p = w === "top" ? o : u - o;
40
+ for (let s = b; s >= 0; s -= 1) {
41
+ const x = m(n.value[s]), r = T.get(x);
42
+ if (r === void 0) {
43
+ d = !0;
44
+ break;
45
+ }
46
+ if (p -= r, p <= 0) break;
39
47
  }
40
- if (H -= a, H <= 0) break;
41
48
  }
42
- switch (b) {
49
+ switch (w) {
43
50
  case "top":
44
- u = r - i;
51
+ c = f - o;
45
52
  break;
46
53
  case "bottom":
47
- u = m - s + i;
54
+ c = v - u + o;
48
55
  break;
49
56
  default: {
50
- const { scrollTop: l } = h.value, f = l + s;
51
- r < l ? T = "top" : m > f && (T = "bottom");
57
+ const { scrollTop: i } = g.value, p = i + u;
58
+ f < i ? k = "top" : v > p && (k = "bottom");
52
59
  }
53
60
  }
54
- u !== null && k(u), u !== t.value.lastTop && (p = !0);
61
+ c !== null && A(c), c !== t.value.lastTop && (d = !0);
55
62
  }
56
- p && (t.value = {
63
+ d && (t.value = {
57
64
  ...t.value,
58
65
  times: t.value.times + 1,
59
- targetAlign: T,
60
- lastTop: u
66
+ targetAlign: k,
67
+ lastTop: c
61
68
  });
62
69
  }
63
70
  },
64
71
  { immediate: !0, flush: "post" }
65
72
  ), [(e) => {
66
73
  if (e == null) {
67
- y();
74
+ M();
68
75
  return;
69
76
  }
70
77
  if (typeof e == "number")
71
- k(e);
78
+ A(e);
72
79
  else if (e && typeof e == "object") {
73
- let o;
74
- const { align: c } = e;
75
- "index" in e ? o = e.index : o = n.value.findIndex((s) => v(s) === e.key);
76
- const { offset: i = 0 } = e;
80
+ let l;
81
+ const { align: a } = e;
82
+ "index" in e ? l = e.index : l = n.value.findIndex((u) => m(u) === e.key);
83
+ const { offset: o = 0 } = e;
77
84
  t.value = {
78
85
  times: 0,
79
- index: o,
80
- offset: i,
81
- originAlign: c
86
+ index: l,
87
+ offset: o,
88
+ originAlign: a
82
89
  };
83
90
  }
84
- }, M];
91
+ }, I];
85
92
  }
86
93
  export {
87
- E as default
94
+ L as default
88
95
  };
@@ -1,4 +1,5 @@
1
1
  export { default as VirtualList } from './VirtualList';
2
+ export { PrefixSums } from './utils/PrefixSums';
2
3
  export type { ListProps, ListRef, ScrollInfo, ScrollTo } from './VirtualList';
3
4
  export type { ScrollConfig } from './hooks/useScrollTo';
4
5
  export type { ExtraRenderInfo, GetKey, GetSize, Key, RenderFunc, SharedConfig } from './interface';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../core/src/components/VirtualList/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAA;AACtD,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7E,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAClG,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../core/src/components/VirtualList/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7E,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAClG,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * 可视区定位用的位置表:前缀和 + 二分查找,增量维护。
3
+ *
4
+ * 取代原先「每次可视区计算都 `new Array(dataLength)` 重建整表前缀和」的写法。
5
+ * 那个写法的 watch 依赖里含 `offsetTop`,也就是**每个滚动事件**都要
6
+ * 走一遍 O(总行数) 的循环加分配;10 万行时这是每帧几毫秒的固定开销,
7
+ * 且随数据量线性增长——正是「行数越多滚动越贵」的来源。
8
+ *
9
+ * 这里的模型与 TanStack Virtual 一致:位置表是**持久化**的数据结构,
10
+ * 只在真正失效时按「最早脏下标」增量重建;滚动本身只做二分查找。
11
+ *
12
+ * - 滚动(offsetTop 变化):O(log n),不重建
13
+ * - 尺寸实测变化:O(n − dirtyFrom),且只波及脏点之后的部分
14
+ * - 数据变化:O(n),整表重建(语义要求)
15
+ *
16
+ * 存储用 `Float64Array` 而非普通数组:避免 10 万个装箱数字与随之而来的 GC 压力。
17
+ *
18
+ * 命名刻意与「高度」解耦:纵向虚拟化用它存行高,横向虚拟化(`virtualColumn`)
19
+ * 用同一个类存列宽,两条轴的算法完全一致,只是尺寸的含义不同。
20
+ */
21
+ export declare class PrefixSums {
22
+ /** prefix[i] = 第 0..i 项尺寸之和(即第 i 项的结束偏移)。 */
23
+ private prefix;
24
+ /** 已经算好的项数。 */
25
+ private length;
26
+ /** 需要从这个下标开始重算;等于 length 表示整表干净。 */
27
+ private dirtyFrom;
28
+ /** 数据本身变了(顺序/长度/内容),整表作废。 */
29
+ markAllDirty(): void;
30
+ /**
31
+ * 某个下标起的尺寸可能变了。
32
+ *
33
+ * 调用方传当前渲染窗口的起点即可:只有渲染出来的项才会被 ResizeObserver 测量,
34
+ * 因此任何尺寸变更都发生在窗口内,`[0, start)` 的前缀必然仍然有效。
35
+ */
36
+ markDirtyFrom(index: number): void;
37
+ /** 惰性同步到最新状态。count 变化会自动触发整表重建。 */
38
+ sync(count: number, getItemSize: (index: number) => number | undefined, fallbackSize: number): void;
39
+ /** 全部项的尺寸之和。 */
40
+ get total(): number;
41
+ /** 第 index 项的起始偏移。 */
42
+ offsetOf(index: number): number;
43
+ /**
44
+ * 首个结束偏移 >= target 的项下标;不存在时返回 length。
45
+ *
46
+ * 前缀和单调不减(尺寸非负),所以可以二分。
47
+ */
48
+ findIndex(target: number): number;
49
+ }
50
+ //# sourceMappingURL=PrefixSums.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrefixSums.d.ts","sourceRoot":"","sources":["../../../../../../../core/src/components/VirtualList/utils/PrefixSums.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,UAAU;IACrB,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAsB;IACpC,eAAe;IACf,OAAO,CAAC,MAAM,CAAI;IAClB,oCAAoC;IACpC,OAAO,CAAC,SAAS,CAAI;IAErB,6BAA6B;IAC7B,YAAY,IAAI,IAAI;IAIpB;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlC,mCAAmC;IACnC,IAAI,CACF,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EAClD,YAAY,EAAE,MAAM,GACnB,IAAI;IAqBP,gBAAgB;IAChB,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,sBAAsB;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAK/B;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAiBlC"}
@@ -0,0 +1,54 @@
1
+ class n {
2
+ /** prefix[i] = 第 0..i 项尺寸之和(即第 i 项的结束偏移)。 */
3
+ prefix = new Float64Array(0);
4
+ /** 已经算好的项数。 */
5
+ length = 0;
6
+ /** 需要从这个下标开始重算;等于 length 表示整表干净。 */
7
+ dirtyFrom = 0;
8
+ /** 数据本身变了(顺序/长度/内容),整表作废。 */
9
+ markAllDirty() {
10
+ this.dirtyFrom = 0;
11
+ }
12
+ /**
13
+ * 某个下标起的尺寸可能变了。
14
+ *
15
+ * 调用方传当前渲染窗口的起点即可:只有渲染出来的项才会被 ResizeObserver 测量,
16
+ * 因此任何尺寸变更都发生在窗口内,`[0, start)` 的前缀必然仍然有效。
17
+ */
18
+ markDirtyFrom(t) {
19
+ t < this.dirtyFrom && (this.dirtyFrom = Math.max(0, t));
20
+ }
21
+ /** 惰性同步到最新状态。count 变化会自动触发整表重建。 */
22
+ sync(t, h, e) {
23
+ if (t !== this.length && (t > this.prefix.length && (this.prefix = new Float64Array(Math.max(t, this.prefix.length * 2))), this.length = t, this.dirtyFrom = 0), this.dirtyFrom >= this.length) return;
24
+ const r = this.dirtyFrom;
25
+ let i = r === 0 ? 0 : this.prefix[r - 1];
26
+ for (let s = r; s < this.length; s += 1)
27
+ i += h(s) ?? e, this.prefix[s] = i;
28
+ this.dirtyFrom = this.length;
29
+ }
30
+ /** 全部项的尺寸之和。 */
31
+ get total() {
32
+ return this.length === 0 ? 0 : this.prefix[this.length - 1];
33
+ }
34
+ /** 第 index 项的起始偏移。 */
35
+ offsetOf(t) {
36
+ return t <= 0 ? 0 : this.prefix[Math.min(t, this.length) - 1];
37
+ }
38
+ /**
39
+ * 首个结束偏移 >= target 的项下标;不存在时返回 length。
40
+ *
41
+ * 前缀和单调不减(尺寸非负),所以可以二分。
42
+ */
43
+ findIndex(t) {
44
+ let h = 0, e = this.length - 1, r = this.length;
45
+ for (; h <= e; ) {
46
+ const i = h + e >>> 1;
47
+ this.prefix[i] >= t ? (r = i, e = i - 1) : h = i + 1;
48
+ }
49
+ return r;
50
+ }
51
+ }
52
+ export {
53
+ n as PrefixSums
54
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PrefixSums.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrefixSums.test.d.ts","sourceRoot":"","sources":["../../../../../../../core/src/components/VirtualList/utils/PrefixSums.test.ts"],"names":[],"mappings":""}
@@ -20,7 +20,7 @@ import { ThemeConfig } from '../index';
20
20
  * import { tableTheme } from '@vtable-guild/theme'
21
21
  *
22
22
  * const props = defineProps<{
23
- * size?: 'sm' | 'md' | 'lg'
23
+ * size?: 'small' | 'middle' | 'large'
24
24
  * bordered?: boolean
25
25
  * ui?: Partial<Record<string, string>>
26
26
  * class?: string
@@ -31,14 +31,14 @@ function x(t, o) {
31
31
  // → cn('px-4 text-left', 'px-6') → 'text-left px-6'
32
32
  slots: S(t.slots ?? {}, o.slots),
33
33
  // ---- variants: 深合并 ----
34
- // 示例:base.variants.size.sm = { th: 'px-2' },
35
- // override.variants.size.sm = { th: 'px-3' }
34
+ // 示例:base.variants.size.small = { th: 'px-2' },
35
+ // override.variants.size.small = { th: 'px-3' }
36
36
  // → { th: cn('px-2', 'px-3') } → { th: 'px-3' }
37
37
  variants: T(t.variants, o.variants),
38
38
  // ---- defaultVariants: 浅合并 ----
39
- // 示例:base = { size: 'md', bordered: false },
40
- // override = { size: 'sm' }
41
- // → { size: 'sm', bordered: false }
39
+ // 示例:base = { size: 'large', bordered: false },
40
+ // override = { size: 'small' }
41
+ // → { size: 'small', bordered: false }
42
42
  defaultVariants: {
43
43
  ...t.defaultVariants,
44
44
  ...o.defaultVariants
@@ -37,6 +37,11 @@ export { default as Input } from './components/Input';
37
37
  export { default as Scrollbar } from './components/Scrollbar';
38
38
  export { default as VTableGuildConfigProvider } from './components/VTableGuildConfigProvider';
39
39
  export { VirtualList } from './components/VirtualList';
40
+ /**
41
+ * 前缀和 + 二分的位置表。纵向虚拟化用它存行高,横向虚拟化用它存列宽——
42
+ * 两条轴共用同一份实现,见 @vtable-guild/table 的 useColumnWindow。
43
+ */
44
+ export { PrefixSums } from './components/VirtualList';
40
45
  export type { ListProps, ListRef, ScrollConfig as VirtualScrollConfig, ScrollInfo as VirtualScrollInfo, ExtraRenderInfo, ScrollBarDirectionType, } from './components/VirtualList';
41
46
  export { createVTableGuild, VTABLE_GUILD_INJECTION_KEY, syncDocumentPresetAttr, } from './plugin/index';
42
47
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,EACnB,WAAW,GACZ,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAChG,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,eAAe,CAAA;AAGtB,YAAY,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,4BAA4B,EAC5B,oCAAoC,EACpC,2BAA2B,EAC3B,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,eAAe,CAAA;AAItB,MAAM,WAAW,4BAA4B;CAAG;AAEhD,MAAM,MAAM,yBAAyB,GAAG;KACrC,CAAC,IAAI,MAAM,4BAA4B,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC,CAAC;CAC5E,CAAA;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,yBAAyB,CAAA;IACjC,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,eAAe,CAAC,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAA;CACjD;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,eAAe,CAAA;IAC5B,OAAO,EAAE,kBAAkB,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,yBAAyB,CAAA;IAChC,MAAM,EAAE,UAAU,CAAA;IAClB,OAAO,EAAE,cAAc,CAAA;IACvB,eAAe,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAA;CAChD;AAGD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAG7C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,wCAAwC,CAAA;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,YAAY,EACV,SAAS,EACT,OAAO,EACP,YAAY,IAAI,mBAAmB,EACnC,UAAU,IAAI,iBAAiB,EAC/B,eAAe,EACf,sBAAsB,GACvB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,EACnB,WAAW,GACZ,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAChG,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,eAAe,CAAA;AAGtB,YAAY,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,4BAA4B,EAC5B,oCAAoC,EACpC,2BAA2B,EAC3B,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,eAAe,CAAA;AAItB,MAAM,WAAW,4BAA4B;CAAG;AAEhD,MAAM,MAAM,yBAAyB,GAAG;KACrC,CAAC,IAAI,MAAM,4BAA4B,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC,CAAC;CAC5E,CAAA;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,yBAAyB,CAAA;IACjC,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,eAAe,CAAC,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAA;CACjD;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,eAAe,CAAA;IAC5B,OAAO,EAAE,kBAAkB,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,yBAAyB,CAAA;IAChC,MAAM,EAAE,UAAU,CAAA;IAClB,OAAO,EAAE,cAAc,CAAA;IACvB,eAAe,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAA;CAChD;AAGD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAG7C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,wCAAwC,CAAA;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,YAAY,EACV,SAAS,EACT,OAAO,EACP,YAAY,IAAI,mBAAmB,EACnC,UAAU,IAAI,iBAAiB,EAC/B,eAAe,EACf,sBAAsB,GACvB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,gBAAgB,CAAA"}
@@ -23,7 +23,7 @@ export declare function syncDocumentPresetAttr(themePreset: VTableGuildContext['
23
23
  * theme: {
24
24
  * table: {
25
25
  * slots: { th: 'bg-blue-50 font-bold' },
26
- * defaultVariants: { size: 'sm' },
26
+ * defaultVariants: { size: 'small' },
27
27
  * },
28
28
  * },
29
29
  * })
@@ -5,7 +5,7 @@ import { PropType } from 'vue';
5
5
  * @example
6
6
  * ```ts
7
7
  * export const tableProps = {
8
- * size: optionalProp<'sm' | 'md' | 'lg'>('md'),
8
+ * size: optionalProp<'small' | 'middle' | 'large'>('large'),
9
9
  * bordered: optionalBoolProp(false),
10
10
  * }
11
11
  * ```
@@ -14,8 +14,8 @@ import { cn as cnBase, TV } from 'tailwind-variants';
14
14
  * },
15
15
  * variants: {
16
16
  * size: {
17
- * sm: { cell: 'px-2 py-1.5 text-xs' },
18
- * md: { cell: 'px-4 py-3 text-sm' },
17
+ * small: { cell: 'px-2 py-1.5 text-xs' },
18
+ * large: { cell: 'px-4 py-3 text-sm' },
19
19
  * },
20
20
  * },
21
21
  * })
@@ -5,8 +5,8 @@
5
5
  * ```ts
6
6
  * export const tableTheme = {
7
7
  * slots: { root: '...', table: '...' },
8
- * variants: { size: { sm: {...}, md: {...} } },
9
- * defaultVariants: { size: 'md' },
8
+ * variants: { size: { small: {...}, large: {...} } },
9
+ * defaultVariants: { size: 'large' },
10
10
  * } as const satisfies ThemeConfig
11
11
  * ```
12
12
  */
@@ -2020,6 +2020,15 @@
2020
2020
  .disabled\:vtg-text-\[color\:var\(--color-text-disabled\2c \#a8abb2\)\]:disabled {
2021
2021
  color: var(--color-text-disabled,#a8abb2)
2022
2022
  }
2023
+ .vtg-group\/row:nth-child(even) .group-even\/row\:vtg-bg-\[color\:var\(--vtg-table-row-hover-bg\)\] {
2024
+ background-color: var(--vtg-table-row-hover-bg)
2025
+ }
2026
+ .vtg-group\/row:nth-child(even) .group-even\/row\:vtg-bg-\[color\:var\(--vtg-table-row-selected-bg\)\] {
2027
+ background-color: var(--vtg-table-row-selected-bg)
2028
+ }
2029
+ .vtg-group\/row:nth-child(even) .group-even\/row\:vtg-bg-\[color\:var\(--vtg-table-row-selected-hover-bg\)\] {
2030
+ background-color: var(--vtg-table-row-selected-hover-bg)
2031
+ }
2023
2032
  .vtg-group\/row:nth-child(even) .group-even\/row\:vtg-bg-\[color\:var\(--vtg-table-row-striped-bg\)\] {
2024
2033
  background-color: var(--vtg-table-row-striped-bg)
2025
2034
  }
@@ -1519,6 +1519,15 @@
1519
1519
  .disabled\:vtg-text-\[color\:var\(--color-text-disabled\2c \#a8abb2\)\]:disabled {
1520
1520
  color: var(--color-text-disabled,#a8abb2)
1521
1521
  }
1522
+ .vtg-group\/row:nth-child(even) .group-even\/row\:vtg-bg-\[color\:var\(--vtg-table-row-hover-bg\)\] {
1523
+ background-color: var(--vtg-table-row-hover-bg)
1524
+ }
1525
+ .vtg-group\/row:nth-child(even) .group-even\/row\:vtg-bg-\[color\:var\(--vtg-table-row-selected-bg\)\] {
1526
+ background-color: var(--vtg-table-row-selected-bg)
1527
+ }
1528
+ .vtg-group\/row:nth-child(even) .group-even\/row\:vtg-bg-\[color\:var\(--vtg-table-row-selected-hover-bg\)\] {
1529
+ background-color: var(--vtg-table-row-selected-hover-bg)
1530
+ }
1522
1531
  .vtg-group\/row:nth-child(even) .group-even\/row\:vtg-bg-\[color\:var\(--vtg-table-row-striped-bg\)\] {
1523
1532
  background-color: var(--vtg-table-row-striped-bg)
1524
1533
  }