@vtable-guild/vtable-guild 2.6.3 → 2.6.4

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 (40) hide show
  1. package/css/style.css +7 -4
  2. package/css/tailwind3-utilities.css +7 -4
  3. package/dist/core/src/components/VirtualList/VirtualList.d.ts.map +1 -1
  4. package/dist/core/src/components/VirtualList/VirtualList.mjs +97 -91
  5. package/dist/css/style.css +7 -4
  6. package/dist/css/tailwind3-utilities.css +7 -4
  7. package/dist/index.full.mjs +3065 -2930
  8. package/dist/table/src/components/Table.d.ts +1 -1
  9. package/dist/table/src/components/Table.d.ts.map +1 -1
  10. package/dist/table/src/components/Table.mjs +384 -359
  11. package/dist/table/src/components/VirtualTableBody.d.ts.map +1 -1
  12. package/dist/table/src/components/VirtualTableBody.mjs +2 -1
  13. package/dist/table/src/composables/useAutoHeight.d.ts +32 -0
  14. package/dist/table/src/composables/useAutoHeight.d.ts.map +1 -0
  15. package/dist/table/src/composables/useAutoHeight.mjs +66 -0
  16. package/dist/table/src/composables/useAutoHeight.test.d.ts +2 -0
  17. package/dist/table/src/composables/useAutoHeight.test.d.ts.map +1 -0
  18. package/dist/table/src/composables/useColumnMetrics.d.ts.map +1 -1
  19. package/dist/table/src/composables/useColumnMetrics.mjs +49 -49
  20. package/dist/table/src/composables/useColumnMetrics.test.d.ts +2 -0
  21. package/dist/table/src/composables/useColumnMetrics.test.d.ts.map +1 -0
  22. package/dist/table/src/composables/useColumnWindow.mjs +16 -16
  23. package/dist/table/src/composables/useResize.d.ts.map +1 -1
  24. package/dist/table/src/composables/useResize.mjs +37 -31
  25. package/dist/table/src/composables/useScroll.d.ts +8 -0
  26. package/dist/table/src/composables/useScroll.d.ts.map +1 -1
  27. package/dist/table/src/composables/useScroll.mjs +37 -37
  28. package/dist/table/src/composables/useVirtual.d.ts +35 -0
  29. package/dist/table/src/composables/useVirtual.d.ts.map +1 -1
  30. package/dist/table/src/composables/useVirtual.mjs +44 -16
  31. package/dist/table/src/index.d.ts.map +1 -1
  32. package/dist/table/src/types/table.d.ts +9 -1
  33. package/dist/table/src/types/table.d.ts.map +1 -1
  34. package/dist/theme/src/presets/antdv/table.d.ts +3 -1
  35. package/dist/theme/src/presets/antdv/table.d.ts.map +1 -1
  36. package/dist/theme/src/presets/antdv/table.mjs +10 -1
  37. package/dist/theme/src/presets/element-plus/table.d.ts +3 -1
  38. package/dist/theme/src/presets/element-plus/table.d.ts.map +1 -1
  39. package/dist/theme/src/presets/element-plus/table.mjs +4 -1
  40. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualTableBody.d.ts","sourceRoot":"","sources":["../../../../../table/src/components/VirtualTableBody.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,QAAQ,EAAE,MAAM,KAAK,CAAA;AAElD,OAAO,KAAK,EAAW,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAMpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAG/C,KAAK,sBAAsB,GAAG,iBAAiB,GAAG;IAChD,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;;;cAQgC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;;;;cACtC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAO3C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;;;cAEhC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;;;;;;;;;;;IAK3F,wCAAwC;;;;;IAExC;;;OAGG;;;;;IAEH,qCAAqC;;cACJ,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC;;;IAC/D,gEAAgE;;cAE5C,QAAQ,CAAC,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;;;;cAIvC,QAAQ,CAAC,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;;;;;cA9BxC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;;;;cACtC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAO3C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;;;cAEhC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;;;;;;;;;;;IAK3F,wCAAwC;;;;;IAExC;;;OAGG;;;;;IAEH,qCAAqC;;cACJ,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC;;;IAC/D,gEAAgE;;cAE5C,QAAQ,CAAC,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;;;;cAIvC,QAAQ,CAAC,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;;;;;4BAJjC,sBAAsB,KAAK,IAAI;+BAhBT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG;;;;;;AAb7F,wBA+YE"}
1
+ {"version":3,"file":"VirtualTableBody.d.ts","sourceRoot":"","sources":["../../../../../table/src/components/VirtualTableBody.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,QAAQ,EAAE,MAAM,KAAK,CAAA;AAElD,OAAO,KAAK,EAAW,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAMpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAG/C,KAAK,sBAAsB,GAAG,iBAAiB,GAAG;IAChD,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;;;cAQgC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;;;;cACtC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAO3C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;;;cAEhC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;;;;;;;;;;;IAK3F,wCAAwC;;;;;IAExC;;;OAGG;;;;;IAEH,qCAAqC;;cACJ,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC;;;IAC/D,gEAAgE;;cAE5C,QAAQ,CAAC,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;;;;cAIvC,QAAQ,CAAC,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;;;;;cA9BxC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;;;;cACtC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAO3C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;;;cAEhC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;;;;;;;;;;;IAK3F,wCAAwC;;;;;IAExC;;;OAGG;;;;;IAEH,qCAAqC;;cACJ,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC;;;IAC/D,gEAAgE;;cAE5C,QAAQ,CAAC,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;;;;cAIvC,QAAQ,CAAC,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;;;;;4BAJjC,sBAAsB,KAAK,IAAI;+BAhBT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG;;;;;;AAb7F,wBAoZE"}
@@ -218,7 +218,8 @@ const xe = /* @__PURE__ */ X({
218
218
  tableLayout: "fixed"
219
219
  }
220
220
  }, [r("tbody", {
221
- class: e.tbodyClass
221
+ class: e.tbodyClass,
222
+ "data-vtg-preserve-last-border": l < e.dataSource.length - 1 ? "" : void 0
222
223
  }, [r(Y, {
223
224
  key: o,
224
225
  rowClass: x(e.rowClass, F, ne(a, t, n, v)) ?? "",
@@ -0,0 +1,32 @@
1
+ import { ShallowRef } from 'vue';
2
+ export interface UseAutoHeightOptions {
3
+ /** 关闭时不测量、不注册 observer,bodyHeight 恒为 undefined。 */
4
+ enabled: () => boolean;
5
+ /** 内容区 wrapper:表头 / 表体 / 固定 summary 的共同父级。 */
6
+ wrapperEl: () => HTMLElement | null;
7
+ /** 表头块(useScroll 的 headerWrapRef)。缺失(showHeader: false)时不扣减。 */
8
+ headerEl: () => HTMLElement | null;
9
+ /** 固定 summary 块。缺失(无 summary 或不固定)时不扣减。 */
10
+ summaryEl?: () => HTMLElement | null;
11
+ /** 是否有数据。空数据时容器再矮也属正常,不提示配置问题。 */
12
+ hasData: () => boolean;
13
+ }
14
+ export interface UseAutoHeightReturn {
15
+ /**
16
+ * 实测表体最大高度 = wrapper − 表头 − 固定 summary(向下取整,钳制 ≥1px)。
17
+ * undefined 表示尚未测得(未挂载 / ref 异常),调用方此时暂不约束高度。
18
+ */
19
+ bodyHeight: ShallowRef<number | undefined>;
20
+ }
21
+ /**
22
+ * `scroll.y: 'auto'` 的实测表体高度。
23
+ *
24
+ * 观察 wrapper + 表头 + 固定 summary 三个元素(表头高度会随分组表头、size
25
+ * 预设独立变化),任一尺寸变化都重算。**不会震荡**:wrapper 高度由父容器
26
+ * 的 flex 布局决定,表体 maxHeight 只封顶内容,不反过来改变 wrapper 高度。
27
+ *
28
+ * 挂载与 ref 换绑后**立即同步测量一次**再注册 observer:ResizeObserver 的
29
+ * 首次回调要等下一渲染帧,不主动测的话首帧会以未约束高度绘制。
30
+ */
31
+ export declare function useAutoHeight(options: UseAutoHeightOptions): UseAutoHeightReturn;
32
+ //# sourceMappingURL=useAutoHeight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAutoHeight.d.ts","sourceRoot":"","sources":["../../../../../table/src/composables/useAutoHeight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiD,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AAGpF,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;IACnC,gEAAgE;IAChE,QAAQ,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;IAClC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;IACpC,kCAAkC;IAClC,OAAO,EAAE,MAAM,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAC3C;AAqBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB,CAoIhF"}
@@ -0,0 +1,66 @@
1
+ import { shallowRef as b, watch as g, onMounted as E, onBeforeUnmount as w } from "vue";
2
+ const y = 0.5, h = 1;
3
+ function R(e) {
4
+ const r = b(void 0);
5
+ let l = 0, a = null, u = [], i;
6
+ function s(n) {
7
+ const t = e.wrapperEl();
8
+ t && t.getClientRects().length > 0 && e.hasData() && n !== void 0 && n <= h;
9
+ }
10
+ function f() {
11
+ if (l = 0, !e.enabled()) {
12
+ r.value = void 0, i = void 0;
13
+ return;
14
+ }
15
+ const n = e.wrapperEl();
16
+ if (!n) {
17
+ i = void 0, r.value !== void 0 && (r.value = void 0), s(void 0);
18
+ return;
19
+ }
20
+ const t = e.headerEl()?.getBoundingClientRect().height ?? 0, c = e.summaryEl?.()?.getBoundingClientRect().height ?? 0, d = n.getBoundingClientRect().height - t - c;
21
+ if (i !== void 0 && Math.abs(d - i) <= y) {
22
+ s(r.value);
23
+ return;
24
+ }
25
+ i = d;
26
+ const v = Math.max(h, Math.floor(d));
27
+ r.value !== v && (r.value = v), s(v);
28
+ }
29
+ function m() {
30
+ if (typeof requestAnimationFrame > "u") {
31
+ f();
32
+ return;
33
+ }
34
+ l || (l = requestAnimationFrame(f));
35
+ }
36
+ function o() {
37
+ const n = e.enabled() ? [e.wrapperEl(), e.headerEl(), e.summaryEl?.() ?? null].filter(
38
+ (t) => !!t
39
+ ) : [];
40
+ if (!(n.length === u.length && n.every((t, c) => t === u[c])) && (a?.disconnect(), u = n, n.length > 0)) {
41
+ !a && typeof ResizeObserver < "u" && (a = new ResizeObserver(m));
42
+ for (const t of n) a?.observe(t);
43
+ }
44
+ }
45
+ return g(
46
+ [
47
+ () => e.enabled(),
48
+ () => e.wrapperEl(),
49
+ () => e.headerEl(),
50
+ () => e.summaryEl?.() ?? null,
51
+ // 数据后到时重估「测不到高度」的告警条件(空数据不算配置问题)。
52
+ () => e.hasData()
53
+ ],
54
+ () => {
55
+ o(), f();
56
+ },
57
+ { flush: "post" }
58
+ ), E(() => {
59
+ o(), f();
60
+ }), w(() => {
61
+ l && cancelAnimationFrame(l), a?.disconnect(), a = null, u = [];
62
+ }), { bodyHeight: r };
63
+ }
64
+ export {
65
+ R as useAutoHeight
66
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useAutoHeight.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAutoHeight.test.d.ts","sourceRoot":"","sources":["../../../../../table/src/composables/useAutoHeight.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"useColumnMetrics.d.ts","sourceRoot":"","sources":["../../../../../table/src/composables/useColumnMetrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiD,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AACpF,OAAO,KAAK,EAAE,UAAU,EAAO,MAAM,UAAU,CAAA;AAG/C,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,6CAA6C;IAC7C,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;IAClC,OAAO,EAAE,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAA;IACpD,qBAAqB;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,uCAAuC;IACvC,SAAS,EAAE,MAAM,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,OAAO,EAAE,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IACzC,uBAAuB;IACvB,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB;AA0CD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CAgHzF"}
1
+ {"version":3,"file":"useColumnMetrics.d.ts","sourceRoot":"","sources":["../../../../../table/src/composables/useColumnMetrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiD,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AACpF,OAAO,KAAK,EAAE,UAAU,EAAO,MAAM,UAAU,CAAA;AAG/C,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,6CAA6C;IAC7C,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;IAClC,OAAO,EAAE,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAA;IACpD,qBAAqB;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,uCAAuC;IACvC,SAAS,EAAE,MAAM,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,OAAO,EAAE,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IACzC,uBAAuB;IACvB,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB;AA0CD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CAuHzF"}
@@ -1,71 +1,71 @@
1
- import { shallowRef as b, watch as v, onMounted as y, onBeforeUnmount as N } from "vue";
2
- import { getColumnKey as A } from "./useColumns.mjs";
3
- const F = 0.5;
4
- function O(e, n) {
5
- if (e === null || n === null) return e === n;
6
- if (e.widths.length !== n.widths.length) return !1;
7
- for (let t = 0; t < e.widths.length; t += 1)
8
- if (Math.abs(e.widths[t] - n.widths[t]) > F) return !1;
1
+ import { shallowRef as g, watch as y, onMounted as N, onBeforeUnmount as A } from "vue";
2
+ import { getColumnKey as F } from "./useColumns.mjs";
3
+ const O = 0.5;
4
+ function q(e, t) {
5
+ if (e === null || t === null) return e === t;
6
+ if (e.widths.length !== t.widths.length) return !1;
7
+ for (let r = 0; r < e.widths.length; r += 1)
8
+ if (Math.abs(e.widths[r] - t.widths[r]) > O) return !1;
9
9
  return !0;
10
10
  }
11
- function C(e, n) {
12
- return A(e) ?? n;
11
+ function C(e, t) {
12
+ return F(e) ?? t;
13
13
  }
14
- function E(e, n) {
15
- const t = [];
16
- let r = 0;
14
+ function E(e, t) {
15
+ const r = [];
16
+ let n = 0;
17
17
  for (let l = 0; l < e.length; l += 1) {
18
- const f = n[String(C(e[l], l))] ?? e[l].width, i = typeof f == "number" ? f : Number.NaN;
19
- if (!Number.isFinite(i) || i <= 0) return null;
20
- t.push(i), r += i;
18
+ const s = t[String(C(e[l], l))] ?? e[l].width, f = typeof s == "number" ? s : Number.NaN;
19
+ if (!Number.isFinite(f) || f <= 0) return null;
20
+ r.push(f), n += f;
21
21
  }
22
- return r > 0 ? { widths: t, total: r } : null;
22
+ return n > 0 ? { widths: r, total: n } : null;
23
23
  }
24
24
  function M(e) {
25
- const n = b(null);
26
- let t = 0, r = null, l = null;
25
+ const t = g(null);
26
+ let r = 0, n = null, l = null, s = null;
27
27
  function f() {
28
- const u = e.columns(), a = u.length;
29
- if (a === 0) return null;
28
+ const u = e.columns(), i = u.length;
29
+ if (i === 0) return null;
30
30
  if (!e.hasHeader())
31
31
  return E(u, e.columnWidths);
32
32
  const w = e.headerEl();
33
33
  if (!w) return null;
34
- const g = w.querySelectorAll("th[data-vtg-leaf-col]");
35
- if (g.length !== a) return null;
36
- const d = new Array(a).fill(-1);
37
- for (const s of g) {
38
- const o = Number(s.dataset.vtgLeafCol);
39
- if (!Number.isInteger(o) || o < 0 || o >= a) return null;
40
- d[o] = s.getBoundingClientRect().width;
34
+ const v = w.querySelectorAll("th[data-vtg-leaf-col]");
35
+ if (v.length !== i) return null;
36
+ const d = new Array(i).fill(-1);
37
+ for (const c of v) {
38
+ const o = Number(c.dataset.vtgLeafCol);
39
+ if (!Number.isInteger(o) || o < 0 || o >= i) return null;
40
+ d[o] = c.getBoundingClientRect().width;
41
41
  }
42
42
  let h = 0;
43
- for (const s of d) {
44
- if (s < 0) return null;
45
- h += s;
43
+ for (const c of d) {
44
+ if (c < 0) return null;
45
+ h += c;
46
46
  }
47
47
  return h > 0 ? { widths: d, total: h } : null;
48
48
  }
49
- function i() {
50
- if (t = 0, !e.enabled()) {
51
- n.value = null;
49
+ function m() {
50
+ if (r = 0, !e.enabled()) {
51
+ t.value = null;
52
52
  return;
53
53
  }
54
54
  const u = f();
55
- O(n.value, u) || (n.value = u);
55
+ q(t.value, u) || (t.value = u);
56
56
  }
57
- function c() {
57
+ function a() {
58
58
  if (typeof requestAnimationFrame > "u") {
59
- i();
59
+ m();
60
60
  return;
61
61
  }
62
- t || (t = requestAnimationFrame(i));
62
+ r || (r = requestAnimationFrame(m));
63
63
  }
64
- function m() {
65
- const u = e.enabled() && e.hasHeader() ? e.headerEl() : null;
66
- u !== l && (r && l && r.unobserve(l), l = u, u && (!r && typeof ResizeObserver < "u" && (r = new ResizeObserver(c)), r?.observe(u)));
64
+ function b() {
65
+ const u = e.enabled() && e.hasHeader() ? e.headerEl() : null, i = u?.querySelector("table") ?? null;
66
+ u === l && i === s || (n && l && n.unobserve(l), n && s && n.unobserve(s), l = u, s = i, u && (!n && typeof ResizeObserver < "u" && (n = new ResizeObserver(a)), n?.observe(u), i && n?.observe(i)));
67
67
  }
68
- return v(
68
+ return y(
69
69
  [
70
70
  () => e.enabled(),
71
71
  () => e.hasHeader(),
@@ -74,14 +74,14 @@ function M(e) {
74
74
  () => ({ ...e.columnWidths })
75
75
  ],
76
76
  () => {
77
- m(), c();
77
+ b(), a();
78
78
  },
79
- { deep: !1 }
80
- ), y(() => {
81
- m(), c();
82
- }), N(() => {
83
- t && cancelAnimationFrame(t), r?.disconnect(), r = null, l = null;
84
- }), { metrics: n, remeasure: c };
79
+ { deep: !1, flush: "post" }
80
+ ), N(() => {
81
+ b(), a();
82
+ }), A(() => {
83
+ r && cancelAnimationFrame(r), n?.disconnect(), n = null, l = null, s = null;
84
+ }), { metrics: t, remeasure: a };
85
85
  }
86
86
  export {
87
87
  M as useColumnMetrics
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useColumnMetrics.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColumnMetrics.test.d.ts","sourceRoot":"","sources":["../../../../../table/src/composables/useColumnMetrics.test.ts"],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import { computed as l } from "vue";
2
- import { PrefixSums as m } from "../../../core/src/components/VirtualList/utils/PrefixSums.mjs";
2
+ import { PrefixSums as p } from "../../../core/src/components/VirtualList/utils/PrefixSums.mjs";
3
3
  const S = 2;
4
4
  function w(r) {
5
5
  const t = r.length;
@@ -17,34 +17,34 @@ function w(r) {
17
17
  }
18
18
  return { leftFixedCount: n, rightFixedStart: i, contiguous: e };
19
19
  }
20
- function p(r) {
21
- const { prefix: t, columnCount: n, leftFixedCount: i, rightFixedStart: e, offsetX: f, viewportWidth: s, overscan: d } = r, u = i, c = e - 1;
22
- if (u > c)
23
- return { start: u, end: u - 1, leftSpacer: 0, rightSpacer: 0 };
20
+ function m(r) {
21
+ const { prefix: t, columnCount: n, leftFixedCount: i, rightFixedStart: e, offsetX: f, viewportWidth: s, overscan: d } = r, a = i, c = e - 1;
22
+ if (a > c)
23
+ return { start: a, end: a - 1, leftSpacer: 0, rightSpacer: 0 };
24
24
  const h = t.offsetOf(i), x = t.total - t.offsetOf(e), g = f + h, v = f + s - x;
25
- let a = t.findIndex(g) - d, o = t.findIndex(v);
26
- return o >= n && (o = n - 1), o += d, a = Math.min(Math.max(a, u), c), o = Math.min(Math.max(o, u), c), o < a && (o = a), {
27
- start: a,
25
+ let u = t.findIndex(g) - d, o = t.findIndex(v);
26
+ return o >= n && (o = n - 1), o += d, u = Math.min(Math.max(u, a), c), o = Math.min(Math.max(o, a), c), o < u && (o = u), {
27
+ start: u,
28
28
  end: o,
29
- leftSpacer: t.offsetOf(a) - t.offsetOf(u),
29
+ leftSpacer: t.offsetOf(u) - t.offsetOf(a),
30
30
  rightSpacer: t.offsetOf(e) - t.offsetOf(o + 1)
31
31
  };
32
32
  }
33
33
  function O(r) {
34
- const t = new m(), n = l(() => {
34
+ const t = new p(), n = l(() => {
35
35
  const e = r.widths();
36
- return !e || e.length === 0 ? null : (t.markAllDirty(), t.sync(e.length, (f) => e[f], 0), e.length);
36
+ return !e || e.length === 0 ? null : (t.markAllDirty(), t.sync(e.length, (f) => e[f], 0), { count: e.length, prefix: t });
37
37
  }), i = l(() => {
38
38
  const e = n.value;
39
- return e === null ? null : p({
40
- prefix: t,
41
- columnCount: e,
39
+ return e ? m({
40
+ prefix: e.prefix,
41
+ columnCount: e.count,
42
42
  leftFixedCount: r.leftFixedCount(),
43
43
  rightFixedStart: r.rightFixedStart(),
44
44
  offsetX: r.offsetX(),
45
45
  viewportWidth: r.viewportWidth(),
46
46
  overscan: r.overscan?.() ?? S
47
- });
47
+ }) : null;
48
48
  });
49
49
  return {
50
50
  active: l(() => i.value !== null),
@@ -56,7 +56,7 @@ function O(r) {
56
56
  }
57
57
  export {
58
58
  S as DEFAULT_COLUMN_OVERSCAN,
59
- p as computeColumnWindow,
59
+ m as computeColumnWindow,
60
60
  w as resolveFixedColumnRanges,
61
61
  O as useColumnWindow
62
62
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useResize.d.ts","sourceRoot":"","sources":["../../../../../table/src/composables/useResize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAG1C,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,WAAW,EAAE,CACX,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC3C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,KAChB,IAAI,CAAA;IACT,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;CACzB;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE;IACjC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACtF,GAAG,eAAe,CAyElB"}
1
+ {"version":3,"file":"useResize.d.ts","sourceRoot":"","sources":["../../../../../table/src/composables/useResize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAG1C,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,WAAW,EAAE,CACX,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC3C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,KAChB,IAAI,CAAA;IACT,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;CACzB;AAUD,wBAAgB,SAAS,CAAC,OAAO,EAAE;IACjC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACtF,GAAG,eAAe,CA0ElB"}
@@ -1,42 +1,48 @@
1
- import { reactive as h, ref as g, onBeforeUnmount as W } from "vue";
1
+ import { reactive as y, ref as g, onBeforeUnmount as W } from "vue";
2
2
  import { getColumnKey as b } from "./useColumns.mjs";
3
- function S(v) {
4
- const r = h({}), c = g(!1);
5
- let t = null, s = "", m = 0, u = 0;
6
- function a(n) {
7
- if (!t) return;
8
- const o = n.clientX - m;
9
- let e = u + o;
10
- const l = t.minWidth ?? 50, i = t.maxWidth;
11
- e = Math.max(l, e), i !== void 0 && (e = Math.min(i, e)), r[s] = e;
3
+ function w(c) {
4
+ const n = c.currentTarget;
5
+ if (!(n instanceof Element)) return;
6
+ const t = n.closest("th")?.getBoundingClientRect().width;
7
+ return t !== void 0 && Number.isFinite(t) && t > 0 ? t : void 0;
8
+ }
9
+ function E(c) {
10
+ const n = y({}), t = g(!1);
11
+ let o = null, u = "", m = 0, d = 0;
12
+ function f(i) {
13
+ if (!o) return;
14
+ const r = i.clientX - m;
15
+ let e = d + r;
16
+ const l = o.minWidth ?? 50, s = o.maxWidth;
17
+ e = Math.max(l, e), s !== void 0 && (e = Math.min(s, e)), n[u] = e;
12
18
  }
13
- function f(n) {
14
- if (!t) return;
15
- const o = t, e = r[s];
16
- p(), v.onResizeColumn?.(o, e);
19
+ function v(i) {
20
+ if (!o) return;
21
+ const r = o, e = n[u];
22
+ h(), c.onResizeColumn?.(r, e);
17
23
  }
18
- function p() {
19
- document.removeEventListener("pointermove", a), document.removeEventListener("pointerup", f), document.body.style.cursor = "", document.body.style.userSelect = "", c.value = !1, t = null;
24
+ function h() {
25
+ document.removeEventListener("pointermove", f), document.removeEventListener("pointerup", v), document.body.style.cursor = "", document.body.style.userSelect = "", t.value = !1, o = null;
20
26
  }
21
- function y(n, o, e) {
22
- e.preventDefault(), e.stopPropagation(), t = n;
23
- const l = b(n) ?? String(o);
24
- s = String(l), m = e.clientX;
25
- const i = r[s];
26
- if (i)
27
- u = i;
27
+ function p(i, r, e) {
28
+ e.preventDefault(), e.stopPropagation(), o = i;
29
+ const l = b(i) ?? String(r);
30
+ u = String(l), m = e.clientX;
31
+ const s = n[u];
32
+ if (s !== void 0)
33
+ d = s;
28
34
  else {
29
- const d = n.width;
30
- u = typeof d == "number" ? d : parseInt(String(d) || "100", 10);
35
+ const a = i.width;
36
+ d = typeof a == "number" && Number.isFinite(a) ? a : w(e) ?? 100;
31
37
  }
32
- c.value = !0, document.body.style.cursor = "col-resize", document.body.style.userSelect = "none", document.addEventListener("pointermove", a), document.addEventListener("pointerup", f);
38
+ t.value = !0, document.body.style.cursor = "col-resize", document.body.style.userSelect = "none", document.addEventListener("pointermove", f), document.addEventListener("pointerup", v);
33
39
  }
34
- return W(p), {
35
- columnWidths: r,
36
- startResize: y,
37
- isResizing: c
40
+ return W(h), {
41
+ columnWidths: n,
42
+ startResize: p,
43
+ isResizing: t
38
44
  };
39
45
  }
40
46
  export {
41
- S as useResize
47
+ E as useResize
42
48
  };
@@ -2,6 +2,13 @@ import { ComputedRef, Ref } from 'vue';
2
2
  import { ColumnType, Key } from '../types';
3
3
  export interface ScrollConfig {
4
4
  x?: number | string;
5
+ /**
6
+ * 纵向滚动高度(启用固定表头)。
7
+ *
8
+ * 数字表示固定视口;`'auto'` 表示自动适应父容器高度(组件内部扣减表头 /
9
+ * 固定 summary,需父容器有确定高度)。虚拟模式下仅兼容正数 px 字符串,
10
+ * 其余字符串 dev 告警并回落 400px 视口;非虚拟模式下按 CSS max-height 原样生效。
11
+ */
5
12
  y?: number | string;
6
13
  }
7
14
  export interface FixedOffset {
@@ -28,5 +35,6 @@ export interface UseScrollReturn {
28
35
  }
29
36
  export declare function useScroll(options: {
30
37
  displayColumns: () => ColumnType<Record<string, unknown>>[];
38
+ columnWidths?: Record<string, number>;
31
39
  }): UseScrollReturn;
32
40
  //# sourceMappingURL=useScroll.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useScroll.d.ts","sourceRoot":"","sources":["../../../../../table/src/composables/useScroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,WAAW,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAO/C,MAAM,WAAW,YAAY;IAC3B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IAC7B,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACtC,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACpC,WAAW,EAAE,eAAe,CAAA;IAC5B,gBAAgB,EAAE,CAAC,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACxE,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAA;IAChD,iBAAiB,EAAE,MAAM,IAAI,CAAA;IAC7B,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3E;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE;IACjC,cAAc,EAAE,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAA;CAC5D,GAAG,eAAe,CAoGlB"}
1
+ {"version":3,"file":"useScroll.d.ts","sourceRoot":"","sources":["../../../../../table/src/composables/useScroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,WAAW,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAO/C,MAAM,WAAW,YAAY;IAC3B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB;;;;;;OAMG;IACH,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IAC7B,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACtC,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACpC,WAAW,EAAE,eAAe,CAAA;IAC5B,gBAAgB,EAAE,CAAC,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACxE,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAA;IAChD,iBAAiB,EAAE,MAAM,IAAI,CAAA;IAC7B,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3E;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE;IACjC,cAAc,EAAE,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAA;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC,GAAG,eAAe,CAgHlB"}
@@ -1,66 +1,66 @@
1
- import { ref as r, computed as h, watch as W, nextTick as b } from "vue";
2
- import { getColumnKey as k } from "./useColumns.mjs";
3
- function w(f, o) {
4
- return k(f) ?? o;
1
+ import { ref as s, computed as m, watch as L, nextTick as k } from "vue";
2
+ import { getColumnKey as I } from "./useColumns.mjs";
3
+ function S(o, i) {
4
+ return I(o) ?? i;
5
5
  }
6
- function C(f) {
7
- const o = r(null), i = r(null), c = r(0), s = r(0), x = {
8
- atStart: h(() => c.value <= 0),
9
- atEnd: h(() => c.value >= s.value - 1)
6
+ function C(o) {
7
+ const i = s(null), c = s(null), u = s(0), a = s(0), x = {
8
+ atStart: m(() => u.value <= 0),
9
+ atEnd: m(() => u.value >= a.value - 1)
10
10
  };
11
- function a(e, n) {
12
- c.value = e, typeof n == "number" && (s.value = Math.max(0, n)), o.value && (o.value.scrollLeft = e);
11
+ function d(e, n) {
12
+ u.value = e, typeof n == "number" && (a.value = Math.max(0, n)), i.value && (i.value.scrollLeft = e);
13
13
  }
14
- function S(e) {
15
- const n = i.value;
16
- a(e.scrollLeft, n ? n.scrollWidth - n.clientWidth : s.value);
14
+ function W(e) {
15
+ const n = c.value;
16
+ d(e.scrollLeft, n ? n.scrollWidth - n.clientWidth : a.value);
17
17
  }
18
18
  function g() {
19
- const e = i.value;
20
- e && a(e.scrollLeft, e.scrollWidth - e.clientWidth);
19
+ const e = c.value;
20
+ e && d(e.scrollLeft, e.scrollWidth - e.clientWidth);
21
21
  }
22
- W(i, () => {
23
- b(g);
22
+ L(c, () => {
23
+ k(g);
24
24
  });
25
- const L = h(() => {
26
- const e = f.displayColumns(), n = /* @__PURE__ */ new Map();
27
- let p = 0, m = -1;
25
+ const b = m(() => {
26
+ const e = o.displayColumns(), n = /* @__PURE__ */ new Map();
27
+ let p = 0, y = -1;
28
28
  for (let t = 0; t < e.length; t++)
29
- e[t].fixed === "left" && (m = t);
29
+ e[t].fixed === "left" && (y = t);
30
30
  for (let t = 0; t < e.length; t++) {
31
31
  const l = e[t];
32
32
  if (l.fixed !== "left") continue;
33
- const u = w(l, t), d = typeof l.width == "number" ? l.width : parseInt(String(l.width) || "0", 10);
34
- n.set(u, {
33
+ const r = S(l, t), f = o.columnWidths?.[String(r)], h = typeof f == "number" ? f : typeof l.width == "number" ? l.width : parseInt(String(l.width) || "0", 10);
34
+ n.set(r, {
35
35
  left: p,
36
- isLastLeft: t === m
37
- }), p += d;
36
+ isLastLeft: t === y
37
+ }), p += h;
38
38
  }
39
- let y = 0, v = e.length;
39
+ let v = 0, w = e.length;
40
40
  for (let t = 0; t < e.length; t++)
41
41
  if (e[t].fixed === "right") {
42
- v = t;
42
+ w = t;
43
43
  break;
44
44
  }
45
45
  for (let t = e.length - 1; t >= 0; t--) {
46
46
  const l = e[t];
47
47
  if (l.fixed !== "right") continue;
48
- const u = w(l, t), d = typeof l.width == "number" ? l.width : parseInt(String(l.width) || "0", 10);
49
- n.set(u, {
50
- right: y,
51
- isFirstRight: t === v
52
- }), y += d;
48
+ const r = S(l, t), f = o.columnWidths?.[String(r)], h = typeof f == "number" ? f : typeof l.width == "number" ? l.width : parseInt(String(l.width) || "0", 10);
49
+ n.set(r, {
50
+ right: v,
51
+ isFirstRight: t === w
52
+ }), v += h;
53
53
  }
54
54
  return n;
55
55
  });
56
56
  return {
57
- headerWrapRef: o,
58
- bodyWrapRef: i,
57
+ headerWrapRef: i,
58
+ bodyWrapRef: c,
59
59
  scrollState: x,
60
- handleBodyScroll: S,
61
- fixedOffsets: L,
60
+ handleBodyScroll: W,
61
+ fixedOffsets: b,
62
62
  updateScrollState: g,
63
- syncHorizontalScroll: a
63
+ syncHorizontalScroll: d
64
64
  };
65
65
  }
66
66
  export {
@@ -5,6 +5,8 @@ export interface UseVirtualOptions {
5
5
  size: () => 'small' | 'middle' | 'large' | undefined;
6
6
  /** 用户显式声明的固定行高(px)。传了就进定高快路径。 */
7
7
  rowHeight?: () => number | undefined;
8
+ /** scroll.y 为 'auto' 时由 useAutoHeight 提供的实测表体高度(已钳制 ≥1)。 */
9
+ measuredHeight?: () => number | undefined;
8
10
  }
9
11
  export interface UseVirtualReturn {
10
12
  /** Whether virtual scrolling is actually enabled */
@@ -21,6 +23,39 @@ export interface UseVirtualReturn {
21
23
  * 而错误表现为行错位/空隙,用户很难归因。宁可让用户主动声明。
22
24
  */
23
25
  fixedHeight: ComputedRef<boolean>;
26
+ /** scroll.y 分类结果,供 Table 统一驱动告警与非虚拟路径的高度取舍。 */
27
+ resolvedScrollY: ComputedRef<ResolvedScrollY>;
24
28
  }
29
+ /**
30
+ * scroll.y 的高度语义——全库唯一的分类判定点。
31
+ *
32
+ * - `missing`:未传 / null / 空串。虚拟化不启用,也不告警。
33
+ * - `fixed-number`:有限正数,固定数字视口。
34
+ * - `auto`:自动适应父容器高度,由 useAutoHeight 实测驱动。
35
+ * - `compat-px`:trim 后的正数十进制 px 字符串(如 `'480px'`),兼容解析并告警。
36
+ * - `invalid-string`:其余字符串(`'100%'`、`'50vh'`、`calc(...)`、`'480foo'`、裸 `'480'`)。
37
+ * - `invalid-number`:0 / 负数 / NaN / Infinity。
38
+ */
39
+ export type ScrollYKind = 'missing' | 'fixed-number' | 'auto' | 'compat-px' | 'invalid-string' | 'invalid-number';
40
+ export interface ResolvedScrollY {
41
+ kind: ScrollYKind;
42
+ /** fixed-number / compat-px 的数值;其余分类为 undefined。 */
43
+ value?: number;
44
+ }
45
+ export declare function resolveScrollY(scrollY: number | string | undefined | null): ResolvedScrollY;
46
+ /**
47
+ * 实测高度暂不可用(隐藏容器量到 0、尚未挂载)时的最小虚拟视口。
48
+ *
49
+ * core `VirtualList` 用 `height && itemHeight` 判定是否窗口化,0 会被当成
50
+ * falsy 静默关闭虚拟、全量渲染行;所以即使量到 0 也必须钳到 1px 保住虚拟路径。
51
+ */
52
+ export declare const MIN_VIRTUAL_VIEWPORT = 1;
53
+ /**
54
+ * scroll.y 无法可靠解析时的虚拟视口兜底。
55
+ *
56
+ * 刻意**不**回落到全量渲染的普通表体:误配发生在万行宽表上时,普通表体是
57
+ * 秒级冻结;保持虚拟 + 固定视口是「可用但偏短」的良性降级,dev 有告警引导修复。
58
+ */
59
+ export declare const INVALID_SCROLL_Y_FALLBACK = 400;
25
60
  export declare function useVirtual(options: UseVirtualOptions): UseVirtualReturn;
26
61
  //# sourceMappingURL=useVirtual.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useVirtual.d.ts","sourceRoot":"","sources":["../../../../../table/src/composables/useVirtual.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAA;AAEtC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,OAAO,GAAG,SAAS,CAAA;IAClC,OAAO,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC1C,IAAI,EAAE,MAAM,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;IACpD,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IAC7B,uDAAuD;IACvD,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC/B,4CAA4C;IAC5C,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC/B;;;;;;OAMG;IACH,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAClC;AAkBD,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAwBvE"}
1
+ {"version":3,"file":"useVirtual.d.ts","sourceRoot":"","sources":["../../../../../table/src/composables/useVirtual.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAA;AAEtC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,OAAO,GAAG,SAAS,CAAA;IAClC,OAAO,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC1C,IAAI,EAAE,MAAM,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;IACpD,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;IACpC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IAC7B,uDAAuD;IACvD,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC/B,4CAA4C;IAC5C,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC/B;;;;;;OAMG;IACH,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IACjC,+CAA+C;IAC/C,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,CAAA;CAC9C;AAkBD;;;;;;;;;GASG;AACH,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,cAAc,GACd,MAAM,GACN,WAAW,GACX,gBAAgB,GAChB,gBAAgB,CAAA;AAEpB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAA;IACjB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAKD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,eAAe,CAe3F;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAA;AAErC;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,MAAM,CAAA;AAE5C,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAsCvE"}