x-sccba 0.2.4 → 0.2.5
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/umd/index.js +2 -2
- package/dist/vue2/index211.cjs +1 -1
- package/dist/vue2/index211.cjs.map +1 -1
- package/dist/vue2/index211.mjs +5 -35
- package/dist/vue2/index211.mjs.map +1 -1
- package/dist/vue3/index212.cjs +1 -1
- package/dist/vue3/index212.cjs.map +1 -1
- package/dist/vue3/index212.mjs +5 -34
- package/dist/vue3/index212.mjs.map +1 -1
- package/package.json +5 -2
- package/style.css +4 -0
- package/types/components/XTable/useVirtualScroll.d.ts +3 -4
- package/vue2/style.css +4 -0
package/dist/vue2/index211.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=(e,l,r)=>new Promise((t,u)=>{var a=e=>{try{n(r.next(e))}catch(l){u(l)}},o=e=>{try{n(r.throw(e))}catch(l){u(l)}},n=e=>e.done?t(e.value):Promise.resolve(e.value).then(a,o);n((r=r.apply(e,l)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("@vue/composition-api"),r=require("./index145.cjs"),t=require("./index234.cjs");function u(){return e(this,null,function*(){return r.warnOnce("XTable:virtualScroll:disabled","[XTable] 虚拟滚动能力暂未开放,useVirtual 将被忽略"),null})}exports.loadVirtualScroller=u,exports.useVirtualScroll=function(a,o,n,c){const i=l.shallowRef(null),s=l.ref(!1),p=l.computed(()=>a.value&&!!i.value),d=l.computed(()=>n.value||t.DEFAULT_VIRTUAL_ITEM_HEIGHT),v=l.computed(()=>o.value||t.DEFAULT_VIRTUAL_SHOW_SIZE);return{shouldVirtualize:p,RecycleScroller:i,loadFailed:s,itemSize:d,bufferSize:v,ensureLoaded:()=>e(null,null,function*(){if(!a.value)return;if(i.value||s.value)return;const e=yield u();e?i.value=e.RecycleScroller:s.value=!0}),checkCompat:()=>{if(!a.value)return;const e=c()||{};(e["span-method"]||e.spanMethod)&&r.warnOnce("XTable:virtualScroll:spanMethod","[XTable] 虚拟滚动模式下 span-method 不可用,合并行/列将被忽略"),(e["tree-props"]||e.treeProps)&&r.warnOnce("XTable:virtualScroll:treeProps","[XTable] 虚拟滚动模式下 tree-props 不可用,请使用平铺数据")}}};
|
|
2
2
|
//# sourceMappingURL=index211.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index211.cjs","sources":["../../src/components/XTable/useVirtualScroll.ts"],"sourcesContent":["// packages/core/src/components/XTable/useVirtualScroll.ts\n//\n// useVirtualScroll —— 虚拟滚动接入 vue-virtual-scroller
|
|
1
|
+
{"version":3,"file":"index211.cjs","sources":["../../src/components/XTable/useVirtualScroll.ts"],"sourcesContent":["// packages/core/src/components/XTable/useVirtualScroll.ts\n//\n// useVirtualScroll —— 虚拟滚动接入 vue-virtual-scroller(当前已禁用)\n//\n// 当前状态:虚拟滚动能力暂未开放,loadVirtualScroller() 直接返回 null。\n// 原因:CJS 构建产物中 import('vue-virtual-scroller') 会被 Rollup 转为 require(),\n// 导致宿主项目在未安装该包时编译失败。待能力正式开放时恢复动态加载逻辑。\n//\n// 设计目标(恢复后):\n// - 用户安装 vue-virtual-scroller 时,useVirtual=true 启用大数据量虚拟滚动\n// - 用户未安装时,给出友好 warn 并回退到普通 ElTable 渲染(不崩溃)\n// - 检测到不兼容场景(fixed columns / span-method / tree-props)时 dev warn\n//\n// 与 ElTable 的协作:\n// - ElTable 自身不暴露虚拟滚动 API(TableV2 是独立组件,且 Vue2 端不可用)\n// - 本 hook 在 useVirtual=true 时旁路 ElTable,改用 RecycleScroller 渲染行\n// - 表头仍由 ElTable 渲染(仅渲染表头部分,不渲染 tbody),保持样式一致\n//\n// 性能要点:\n// - vue-virtual-scroller 的 RecycleScroller 自带 itemSize + buffer 优化\n// - 避免在循环内创建闭包(render 函数引用稳定)\n\nimport type { Component, ComputedRef, Ref } from 'vue-demi';\nimport { computed, ref, shallowRef } from 'vue-demi';\nimport { warnOnce } from '../../utils/warnOnce';\nimport {\n DEFAULT_VIRTUAL_ITEM_HEIGHT,\n DEFAULT_VIRTUAL_SHOW_SIZE\n} from './src/constants';\n// vue-virtual-scroller 类型桩在 ./vue-virtual-scroller.types.d.ts 中声明(optional peer)\n\n// 虚拟滚动能力暂未开放:loadVirtualScroller 直接返回 null,不执行任何动态 import。\n// 原因:CJS 构建产物中 import() 会被 Rollup 转为 require(),导致宿主项目\n// 在未安装 vue-virtual-scroller 时编译失败。待虚拟滚动能力正式开放时恢复。\n\n/**\n * 运行时动态加载 vue-virtual-scroller(当前已禁用,直接返回 null)。\n *\n * 返回值:\n * - 成功:{ RecycleScroller }(当前始终为 null)\n * - 失败:null(虚拟滚动能力暂未开放)\n */\nexport async function loadVirtualScroller(): Promise<{\n RecycleScroller: Component;\n} | null> {\n warnOnce(\n 'XTable:virtualScroll:disabled',\n '[XTable] 虚拟滚动能力暂未开放,useVirtual 将被忽略'\n );\n return null;\n}\n\n/**\n * useVirtualScroll —— 虚拟滚动状态与异步加载控制。\n *\n * @param useVirtual - 是否启用虚拟滚动(响应式)\n * @param virtualShowSize - 可视区域渲染行数(响应式,默认 30)\n * @param virtualItemHeight - 预估行高 px(响应式,默认 50)\n * @param attrsRef - 用户透传给 ElTable 的 attrs(用于检测不兼容场景)\n *\n * 返回:\n * - shouldVirtualize:最终是否启用虚拟模式(useVirtual + 加载成功)\n * - RecycleScroller:vue-virtual-scroller 组件(响应式,加载完成后填充)\n * - itemSize:合并后的行高\n * - bufferSize:合并后的可视区行数\n */\nexport interface UseVirtualScrollReturn {\n shouldVirtualize: ComputedRef<boolean>;\n RecycleScroller: Ref<Component | null>;\n loadFailed: Ref<boolean>;\n itemSize: ComputedRef<number>;\n bufferSize: ComputedRef<number>;\n ensureLoaded: () => Promise<void>;\n checkCompat: () => void;\n}\n\nexport function useVirtualScroll(\n useVirtual: Ref<boolean>,\n virtualShowSize: Ref<number>,\n virtualItemHeight: Ref<number>,\n attrsRef: () => Record<string, any>\n): UseVirtualScrollReturn {\n // 使用 shallowRef 存储组件定义,避免 Vue3 将组件对象深度 reactive 化\n // 导致 \"Component that was made a reactive object\" 警告\n const RecycleScroller = shallowRef(null) as Ref<Component | null>;\n const loadFailed = ref(false);\n\n const shouldVirtualize = computed(\n () => useVirtual.value && !!RecycleScroller.value\n );\n\n // 不兼容场景检测(dev only)—— 仅在 useVirtual=true 时触发\n const checkCompat = () => {\n if (!useVirtual.value) {\n return;\n }\n const a = attrsRef() || {};\n if (a['span-method'] || a.spanMethod) {\n warnOnce(\n 'XTable:virtualScroll:spanMethod',\n '[XTable] 虚拟滚动模式下 span-method 不可用,合并行/列将被忽略'\n );\n }\n if (a['tree-props'] || a.treeProps) {\n warnOnce(\n 'XTable:virtualScroll:treeProps',\n '[XTable] 虚拟滚动模式下 tree-props 不可用,请使用平铺数据'\n );\n }\n // 检测固定列:通过判断列配置中是否含 fixed(由主组件在调用时传入)\n // 此处仅检测 attrs 上的 default-sort 等无关属性即可,固定列在 columns 渲染处再 warn\n };\n\n // 启动加载(异步,不阻塞渲染)\n const ensureLoaded = async () => {\n if (!useVirtual.value) {\n return;\n }\n if (RecycleScroller.value || loadFailed.value) {\n return;\n }\n const mod = await loadVirtualScroller();\n if (mod) {\n RecycleScroller.value = mod.RecycleScroller as Component;\n } else {\n loadFailed.value = true;\n }\n };\n\n const itemSize = computed(\n () => virtualItemHeight.value || DEFAULT_VIRTUAL_ITEM_HEIGHT\n );\n const bufferSize = computed(\n () => virtualShowSize.value || DEFAULT_VIRTUAL_SHOW_SIZE\n );\n\n return {\n shouldVirtualize,\n RecycleScroller,\n loadFailed,\n itemSize,\n bufferSize,\n ensureLoaded,\n checkCompat\n };\n}\n\n// @internal 测试用:重置模块级缓存(虚拟滚动已禁用,此函数当前为空操作)\nexport function _resetVirtualScrollerCache(): void {\n // no-op: 虚拟滚动禁用期间无需重置任何缓存\n}\n"],"names":["loadVirtualScroller","__async","this","warnOnce","useVirtual","virtualShowSize","virtualItemHeight","attrsRef","RecycleScroller","shallowRef","loadFailed","ref","shouldVirtualize","computed","value","itemSize","DEFAULT_VIRTUAL_ITEM_HEIGHT","bufferSize","DEFAULT_VIRTUAL_SHOW_SIZE","ensureLoaded","mod","checkCompat","a","spanMethod","treeProps"],"mappings":"6XA0CA,SAAsBA,IAEZ,OAAAC,EAAAC,KAAA,KAAA,YAKR,OAJAC,EAAAA,SACE,gCACA,uCAEK,IACT,EAAA,wDA0BO,SACLC,EACAC,EACAC,EACAC,GAIA,MAAMC,EAAkBC,EAAAA,WAAW,MAC7BC,EAAaC,EAAAA,KAAI,GAEjBC,EAAmBC,EAAAA,SACvB,IAAMT,EAAWU,SAAWN,EAAgBM,OAyCxCC,EAAWF,EAAAA,SACf,IAAMP,EAAkBQ,OAASE,EAAAA,6BAE7BC,EAAaJ,EAAAA,SACjB,IAAMR,EAAgBS,OAASI,EAAAA,2BAGjC,MAAO,CACLN,mBACAJ,kBACAE,aACAK,WACAE,aACAE,aA5BmB,IAAYlB,EAAA,KAAA,KAAA,YAC/B,IAAKG,EAAWU,MACd,OAEF,GAAIN,EAAgBM,OAASJ,EAAWI,MACtC,OAEF,MAAMM,QAAYpB,IACdoB,EACFZ,EAAgBM,MAAQM,EAAIZ,gBAE5BE,EAAWI,OAAQ,CAEvB,GAgBEO,YAnDkB,KAClB,IAAKjB,EAAWU,MACd,OAEF,MAAMQ,EAAIf,KAAc,CAAA,GACpBe,EAAE,gBAAkBA,EAAEC,aACxBpB,EAAAA,SACE,kCACA,+CAGAmB,EAAE,eAAiBA,EAAEE,YACvBrB,EAAAA,SACE,iCACA,4CAuCR"}
|
package/dist/vue2/index211.mjs
CHANGED
|
@@ -21,43 +21,13 @@ var __async = (__this, __arguments, generator) => {
|
|
|
21
21
|
import { shallowRef, ref, computed } from "@vue/composition-api";
|
|
22
22
|
import { warnOnce } from "./index145.mjs";
|
|
23
23
|
import { DEFAULT_VIRTUAL_ITEM_HEIGHT, DEFAULT_VIRTUAL_SHOW_SIZE } from "./index234.mjs";
|
|
24
|
-
let _scrollerCache = null;
|
|
25
|
-
let _scrollerLoaded = false;
|
|
26
|
-
let _scrollerFailed = false;
|
|
27
24
|
function loadVirtualScroller() {
|
|
28
25
|
return __async(this, null, function* () {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
try {
|
|
37
|
-
const mod = yield import(
|
|
38
|
-
/* @vite-ignore */
|
|
39
|
-
"vue-virtual-scroller"
|
|
40
|
-
);
|
|
41
|
-
const RecycleScroller = mod.RecycleScroller || ((_a = mod.default) == null ? void 0 : _a.RecycleScroller);
|
|
42
|
-
if (!RecycleScroller) {
|
|
43
|
-
_scrollerFailed = true;
|
|
44
|
-
warnOnce(
|
|
45
|
-
"XTable:virtualScroll:noExport",
|
|
46
|
-
"[XTable] vue-virtual-scroller 已加载但未导出 RecycleScroller,虚拟滚动已禁用"
|
|
47
|
-
);
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
_scrollerCache = { RecycleScroller };
|
|
51
|
-
_scrollerLoaded = true;
|
|
52
|
-
return _scrollerCache;
|
|
53
|
-
} catch (e) {
|
|
54
|
-
_scrollerFailed = true;
|
|
55
|
-
warnOnce(
|
|
56
|
-
"XTable:virtualScroll:notInstalled",
|
|
57
|
-
"[XTable] useVirtual=true 需要安装 vue-virtual-scroller,请运行: pnpm add vue-virtual-scroller"
|
|
58
|
-
);
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
26
|
+
warnOnce(
|
|
27
|
+
"XTable:virtualScroll:disabled",
|
|
28
|
+
"[XTable] 虚拟滚动能力暂未开放,useVirtual 将被忽略"
|
|
29
|
+
);
|
|
30
|
+
return null;
|
|
61
31
|
});
|
|
62
32
|
}
|
|
63
33
|
function useVirtualScroll(useVirtual, virtualShowSize, virtualItemHeight, attrsRef) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index211.mjs","sources":["../../src/components/XTable/useVirtualScroll.ts"],"sourcesContent":["// packages/core/src/components/XTable/useVirtualScroll.ts\n//\n// useVirtualScroll —— 虚拟滚动接入 vue-virtual-scroller
|
|
1
|
+
{"version":3,"file":"index211.mjs","sources":["../../src/components/XTable/useVirtualScroll.ts"],"sourcesContent":["// packages/core/src/components/XTable/useVirtualScroll.ts\n//\n// useVirtualScroll —— 虚拟滚动接入 vue-virtual-scroller(当前已禁用)\n//\n// 当前状态:虚拟滚动能力暂未开放,loadVirtualScroller() 直接返回 null。\n// 原因:CJS 构建产物中 import('vue-virtual-scroller') 会被 Rollup 转为 require(),\n// 导致宿主项目在未安装该包时编译失败。待能力正式开放时恢复动态加载逻辑。\n//\n// 设计目标(恢复后):\n// - 用户安装 vue-virtual-scroller 时,useVirtual=true 启用大数据量虚拟滚动\n// - 用户未安装时,给出友好 warn 并回退到普通 ElTable 渲染(不崩溃)\n// - 检测到不兼容场景(fixed columns / span-method / tree-props)时 dev warn\n//\n// 与 ElTable 的协作:\n// - ElTable 自身不暴露虚拟滚动 API(TableV2 是独立组件,且 Vue2 端不可用)\n// - 本 hook 在 useVirtual=true 时旁路 ElTable,改用 RecycleScroller 渲染行\n// - 表头仍由 ElTable 渲染(仅渲染表头部分,不渲染 tbody),保持样式一致\n//\n// 性能要点:\n// - vue-virtual-scroller 的 RecycleScroller 自带 itemSize + buffer 优化\n// - 避免在循环内创建闭包(render 函数引用稳定)\n\nimport type { Component, ComputedRef, Ref } from 'vue-demi';\nimport { computed, ref, shallowRef } from 'vue-demi';\nimport { warnOnce } from '../../utils/warnOnce';\nimport {\n DEFAULT_VIRTUAL_ITEM_HEIGHT,\n DEFAULT_VIRTUAL_SHOW_SIZE\n} from './src/constants';\n// vue-virtual-scroller 类型桩在 ./vue-virtual-scroller.types.d.ts 中声明(optional peer)\n\n// 虚拟滚动能力暂未开放:loadVirtualScroller 直接返回 null,不执行任何动态 import。\n// 原因:CJS 构建产物中 import() 会被 Rollup 转为 require(),导致宿主项目\n// 在未安装 vue-virtual-scroller 时编译失败。待虚拟滚动能力正式开放时恢复。\n\n/**\n * 运行时动态加载 vue-virtual-scroller(当前已禁用,直接返回 null)。\n *\n * 返回值:\n * - 成功:{ RecycleScroller }(当前始终为 null)\n * - 失败:null(虚拟滚动能力暂未开放)\n */\nexport async function loadVirtualScroller(): Promise<{\n RecycleScroller: Component;\n} | null> {\n warnOnce(\n 'XTable:virtualScroll:disabled',\n '[XTable] 虚拟滚动能力暂未开放,useVirtual 将被忽略'\n );\n return null;\n}\n\n/**\n * useVirtualScroll —— 虚拟滚动状态与异步加载控制。\n *\n * @param useVirtual - 是否启用虚拟滚动(响应式)\n * @param virtualShowSize - 可视区域渲染行数(响应式,默认 30)\n * @param virtualItemHeight - 预估行高 px(响应式,默认 50)\n * @param attrsRef - 用户透传给 ElTable 的 attrs(用于检测不兼容场景)\n *\n * 返回:\n * - shouldVirtualize:最终是否启用虚拟模式(useVirtual + 加载成功)\n * - RecycleScroller:vue-virtual-scroller 组件(响应式,加载完成后填充)\n * - itemSize:合并后的行高\n * - bufferSize:合并后的可视区行数\n */\nexport interface UseVirtualScrollReturn {\n shouldVirtualize: ComputedRef<boolean>;\n RecycleScroller: Ref<Component | null>;\n loadFailed: Ref<boolean>;\n itemSize: ComputedRef<number>;\n bufferSize: ComputedRef<number>;\n ensureLoaded: () => Promise<void>;\n checkCompat: () => void;\n}\n\nexport function useVirtualScroll(\n useVirtual: Ref<boolean>,\n virtualShowSize: Ref<number>,\n virtualItemHeight: Ref<number>,\n attrsRef: () => Record<string, any>\n): UseVirtualScrollReturn {\n // 使用 shallowRef 存储组件定义,避免 Vue3 将组件对象深度 reactive 化\n // 导致 \"Component that was made a reactive object\" 警告\n const RecycleScroller = shallowRef(null) as Ref<Component | null>;\n const loadFailed = ref(false);\n\n const shouldVirtualize = computed(\n () => useVirtual.value && !!RecycleScroller.value\n );\n\n // 不兼容场景检测(dev only)—— 仅在 useVirtual=true 时触发\n const checkCompat = () => {\n if (!useVirtual.value) {\n return;\n }\n const a = attrsRef() || {};\n if (a['span-method'] || a.spanMethod) {\n warnOnce(\n 'XTable:virtualScroll:spanMethod',\n '[XTable] 虚拟滚动模式下 span-method 不可用,合并行/列将被忽略'\n );\n }\n if (a['tree-props'] || a.treeProps) {\n warnOnce(\n 'XTable:virtualScroll:treeProps',\n '[XTable] 虚拟滚动模式下 tree-props 不可用,请使用平铺数据'\n );\n }\n // 检测固定列:通过判断列配置中是否含 fixed(由主组件在调用时传入)\n // 此处仅检测 attrs 上的 default-sort 等无关属性即可,固定列在 columns 渲染处再 warn\n };\n\n // 启动加载(异步,不阻塞渲染)\n const ensureLoaded = async () => {\n if (!useVirtual.value) {\n return;\n }\n if (RecycleScroller.value || loadFailed.value) {\n return;\n }\n const mod = await loadVirtualScroller();\n if (mod) {\n RecycleScroller.value = mod.RecycleScroller as Component;\n } else {\n loadFailed.value = true;\n }\n };\n\n const itemSize = computed(\n () => virtualItemHeight.value || DEFAULT_VIRTUAL_ITEM_HEIGHT\n );\n const bufferSize = computed(\n () => virtualShowSize.value || DEFAULT_VIRTUAL_SHOW_SIZE\n );\n\n return {\n shouldVirtualize,\n RecycleScroller,\n loadFailed,\n itemSize,\n bufferSize,\n ensureLoaded,\n checkCompat\n };\n}\n\n// @internal 测试用:重置模块级缓存(虚拟滚动已禁用,此函数当前为空操作)\nexport function _resetVirtualScrollerCache(): void {\n // no-op: 虚拟滚动禁用期间无需重置任何缓存\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA0CA,SAAsB,sBAEZ;AAAA;AACR;AAAA,MACE;AAAA,MACA;AAAA,IAAA;AAEF,WAAO;AAAA,EACT;AAAA;AA0BO,SAAS,iBACd,YACA,iBACA,mBACA,UACwB;AAGxB,QAAM,kBAAkB,WAAW,IAAI;AACvC,QAAM,aAAa,IAAI,KAAK;AAE5B,QAAM,mBAAmB;AAAA,IACvB,MAAM,WAAW,SAAS,CAAC,CAAC,gBAAgB;AAAA,EAAA;AAI9C,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,WAAW,OAAO;AACrB;AAAA,IACF;AACA,UAAM,IAAI,SAAA,KAAc,CAAA;AACxB,QAAI,EAAE,aAAa,KAAK,EAAE,YAAY;AACpC;AAAA,QACE;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,QAAI,EAAE,YAAY,KAAK,EAAE,WAAW;AAClC;AAAA,QACE;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAAA,EAGF;AAGA,QAAM,eAAe,MAAY;AAC/B,QAAI,CAAC,WAAW,OAAO;AACrB;AAAA,IACF;AACA,QAAI,gBAAgB,SAAS,WAAW,OAAO;AAC7C;AAAA,IACF;AACA,UAAM,MAAM,MAAM,oBAAA;AAClB,QAAI,KAAK;AACP,sBAAgB,QAAQ,IAAI;AAAA,IAC9B,OAAO;AACL,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF;AAEA,QAAM,WAAW;AAAA,IACf,MAAM,kBAAkB,SAAS;AAAA,EAAA;AAEnC,QAAM,aAAa;AAAA,IACjB,MAAM,gBAAgB,SAAS;AAAA,EAAA;AAGjC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
|
package/dist/vue3/index212.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue-demi"),r=require("./index147.cjs"),l=require("./index234.cjs");async function a(){return r.warnOnce("XTable:virtualScroll:disabled","[XTable] 虚拟滚动能力暂未开放,useVirtual 将被忽略"),null}exports.loadVirtualScroller=a,exports.useVirtualScroll=function(t,u,o,n){const c=e.shallowRef(null),i=e.ref(!1),s=e.computed(()=>t.value&&!!c.value),d=e.computed(()=>o.value||l.DEFAULT_VIRTUAL_ITEM_HEIGHT),p=e.computed(()=>u.value||l.DEFAULT_VIRTUAL_SHOW_SIZE);return{shouldVirtualize:s,RecycleScroller:c,loadFailed:i,itemSize:d,bufferSize:p,ensureLoaded:async()=>{if(!t.value)return;if(c.value||i.value)return;const e=await a();e?c.value=e.RecycleScroller:i.value=!0},checkCompat:()=>{if(!t.value)return;const e=n()||{};(e["span-method"]||e.spanMethod)&&r.warnOnce("XTable:virtualScroll:spanMethod","[XTable] 虚拟滚动模式下 span-method 不可用,合并行/列将被忽略"),(e["tree-props"]||e.treeProps)&&r.warnOnce("XTable:virtualScroll:treeProps","[XTable] 虚拟滚动模式下 tree-props 不可用,请使用平铺数据")}}};
|
|
2
2
|
//# sourceMappingURL=index212.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index212.cjs","sources":["../../src/components/XTable/useVirtualScroll.ts"],"sourcesContent":["// packages/core/src/components/XTable/useVirtualScroll.ts\n//\n// useVirtualScroll —— 虚拟滚动接入 vue-virtual-scroller
|
|
1
|
+
{"version":3,"file":"index212.cjs","sources":["../../src/components/XTable/useVirtualScroll.ts"],"sourcesContent":["// packages/core/src/components/XTable/useVirtualScroll.ts\n//\n// useVirtualScroll —— 虚拟滚动接入 vue-virtual-scroller(当前已禁用)\n//\n// 当前状态:虚拟滚动能力暂未开放,loadVirtualScroller() 直接返回 null。\n// 原因:CJS 构建产物中 import('vue-virtual-scroller') 会被 Rollup 转为 require(),\n// 导致宿主项目在未安装该包时编译失败。待能力正式开放时恢复动态加载逻辑。\n//\n// 设计目标(恢复后):\n// - 用户安装 vue-virtual-scroller 时,useVirtual=true 启用大数据量虚拟滚动\n// - 用户未安装时,给出友好 warn 并回退到普通 ElTable 渲染(不崩溃)\n// - 检测到不兼容场景(fixed columns / span-method / tree-props)时 dev warn\n//\n// 与 ElTable 的协作:\n// - ElTable 自身不暴露虚拟滚动 API(TableV2 是独立组件,且 Vue2 端不可用)\n// - 本 hook 在 useVirtual=true 时旁路 ElTable,改用 RecycleScroller 渲染行\n// - 表头仍由 ElTable 渲染(仅渲染表头部分,不渲染 tbody),保持样式一致\n//\n// 性能要点:\n// - vue-virtual-scroller 的 RecycleScroller 自带 itemSize + buffer 优化\n// - 避免在循环内创建闭包(render 函数引用稳定)\n\nimport type { Component, ComputedRef, Ref } from 'vue-demi';\nimport { computed, ref, shallowRef } from 'vue-demi';\nimport { warnOnce } from '../../utils/warnOnce';\nimport {\n DEFAULT_VIRTUAL_ITEM_HEIGHT,\n DEFAULT_VIRTUAL_SHOW_SIZE\n} from './src/constants';\n// vue-virtual-scroller 类型桩在 ./vue-virtual-scroller.types.d.ts 中声明(optional peer)\n\n// 虚拟滚动能力暂未开放:loadVirtualScroller 直接返回 null,不执行任何动态 import。\n// 原因:CJS 构建产物中 import() 会被 Rollup 转为 require(),导致宿主项目\n// 在未安装 vue-virtual-scroller 时编译失败。待虚拟滚动能力正式开放时恢复。\n\n/**\n * 运行时动态加载 vue-virtual-scroller(当前已禁用,直接返回 null)。\n *\n * 返回值:\n * - 成功:{ RecycleScroller }(当前始终为 null)\n * - 失败:null(虚拟滚动能力暂未开放)\n */\nexport async function loadVirtualScroller(): Promise<{\n RecycleScroller: Component;\n} | null> {\n warnOnce(\n 'XTable:virtualScroll:disabled',\n '[XTable] 虚拟滚动能力暂未开放,useVirtual 将被忽略'\n );\n return null;\n}\n\n/**\n * useVirtualScroll —— 虚拟滚动状态与异步加载控制。\n *\n * @param useVirtual - 是否启用虚拟滚动(响应式)\n * @param virtualShowSize - 可视区域渲染行数(响应式,默认 30)\n * @param virtualItemHeight - 预估行高 px(响应式,默认 50)\n * @param attrsRef - 用户透传给 ElTable 的 attrs(用于检测不兼容场景)\n *\n * 返回:\n * - shouldVirtualize:最终是否启用虚拟模式(useVirtual + 加载成功)\n * - RecycleScroller:vue-virtual-scroller 组件(响应式,加载完成后填充)\n * - itemSize:合并后的行高\n * - bufferSize:合并后的可视区行数\n */\nexport interface UseVirtualScrollReturn {\n shouldVirtualize: ComputedRef<boolean>;\n RecycleScroller: Ref<Component | null>;\n loadFailed: Ref<boolean>;\n itemSize: ComputedRef<number>;\n bufferSize: ComputedRef<number>;\n ensureLoaded: () => Promise<void>;\n checkCompat: () => void;\n}\n\nexport function useVirtualScroll(\n useVirtual: Ref<boolean>,\n virtualShowSize: Ref<number>,\n virtualItemHeight: Ref<number>,\n attrsRef: () => Record<string, any>\n): UseVirtualScrollReturn {\n // 使用 shallowRef 存储组件定义,避免 Vue3 将组件对象深度 reactive 化\n // 导致 \"Component that was made a reactive object\" 警告\n const RecycleScroller = shallowRef(null) as Ref<Component | null>;\n const loadFailed = ref(false);\n\n const shouldVirtualize = computed(\n () => useVirtual.value && !!RecycleScroller.value\n );\n\n // 不兼容场景检测(dev only)—— 仅在 useVirtual=true 时触发\n const checkCompat = () => {\n if (!useVirtual.value) {\n return;\n }\n const a = attrsRef() || {};\n if (a['span-method'] || a.spanMethod) {\n warnOnce(\n 'XTable:virtualScroll:spanMethod',\n '[XTable] 虚拟滚动模式下 span-method 不可用,合并行/列将被忽略'\n );\n }\n if (a['tree-props'] || a.treeProps) {\n warnOnce(\n 'XTable:virtualScroll:treeProps',\n '[XTable] 虚拟滚动模式下 tree-props 不可用,请使用平铺数据'\n );\n }\n // 检测固定列:通过判断列配置中是否含 fixed(由主组件在调用时传入)\n // 此处仅检测 attrs 上的 default-sort 等无关属性即可,固定列在 columns 渲染处再 warn\n };\n\n // 启动加载(异步,不阻塞渲染)\n const ensureLoaded = async () => {\n if (!useVirtual.value) {\n return;\n }\n if (RecycleScroller.value || loadFailed.value) {\n return;\n }\n const mod = await loadVirtualScroller();\n if (mod) {\n RecycleScroller.value = mod.RecycleScroller as Component;\n } else {\n loadFailed.value = true;\n }\n };\n\n const itemSize = computed(\n () => virtualItemHeight.value || DEFAULT_VIRTUAL_ITEM_HEIGHT\n );\n const bufferSize = computed(\n () => virtualShowSize.value || DEFAULT_VIRTUAL_SHOW_SIZE\n );\n\n return {\n shouldVirtualize,\n RecycleScroller,\n loadFailed,\n itemSize,\n bufferSize,\n ensureLoaded,\n checkCompat\n };\n}\n\n// @internal 测试用:重置模块级缓存(虚拟滚动已禁用,此函数当前为空操作)\nexport function _resetVirtualScrollerCache(): void {\n // no-op: 虚拟滚动禁用期间无需重置任何缓存\n}\n"],"names":["async","loadVirtualScroller","warnOnce","useVirtual","virtualShowSize","virtualItemHeight","attrsRef","RecycleScroller","shallowRef","loadFailed","ref","shouldVirtualize","computed","value","itemSize","DEFAULT_VIRTUAL_ITEM_HEIGHT","bufferSize","DEFAULT_VIRTUAL_SHOW_SIZE","ensureLoaded","mod","checkCompat","a","spanMethod","treeProps"],"mappings":"oKA0CAA,eAAsBC,IAOpB,OAJAC,EAAAA,SACE,gCACA,uCAEK,IACT,wDA0BO,SACLC,EACAC,EACAC,EACAC,GAIA,MAAMC,EAAkBC,EAAAA,WAAW,MAC7BC,EAAaC,EAAAA,KAAI,GAEjBC,EAAmBC,EAAAA,SACvB,IAAMT,EAAWU,SAAWN,EAAgBM,OAyCxCC,EAAWF,EAAAA,SACf,IAAMP,EAAkBQ,OAASE,EAAAA,6BAE7BC,EAAaJ,EAAAA,SACjB,IAAMR,EAAgBS,OAASI,EAAAA,2BAGjC,MAAO,CACLN,mBACAJ,kBACAE,aACAK,WACAE,aACAE,aA5BmBlB,UACnB,IAAKG,EAAWU,MACd,OAEF,GAAIN,EAAgBM,OAASJ,EAAWI,MACtC,OAEF,MAAMM,QAAYlB,IACdkB,EACFZ,EAAgBM,MAAQM,EAAIZ,gBAE5BE,EAAWI,OAAQ,GAkBrBO,YAnDkB,KAClB,IAAKjB,EAAWU,MACd,OAEF,MAAMQ,EAAIf,KAAc,CAAA,GACpBe,EAAE,gBAAkBA,EAAEC,aACxBpB,EAAAA,SACE,kCACA,+CAGAmB,EAAE,eAAiBA,EAAEE,YACvBrB,EAAAA,SACE,iCACA,4CAuCR"}
|
package/dist/vue3/index212.mjs
CHANGED
|
@@ -1,41 +1,12 @@
|
|
|
1
1
|
import { shallowRef, ref, computed } from "vue-demi";
|
|
2
2
|
import { warnOnce } from "./index147.mjs";
|
|
3
3
|
import { DEFAULT_VIRTUAL_ITEM_HEIGHT, DEFAULT_VIRTUAL_SHOW_SIZE } from "./index234.mjs";
|
|
4
|
-
let _scrollerCache = null;
|
|
5
|
-
let _scrollerLoaded = false;
|
|
6
|
-
let _scrollerFailed = false;
|
|
7
4
|
async function loadVirtualScroller() {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
try {
|
|
15
|
-
const mod = await import(
|
|
16
|
-
/* @vite-ignore */
|
|
17
|
-
"vue-virtual-scroller"
|
|
18
|
-
);
|
|
19
|
-
const RecycleScroller = mod.RecycleScroller || mod.default?.RecycleScroller;
|
|
20
|
-
if (!RecycleScroller) {
|
|
21
|
-
_scrollerFailed = true;
|
|
22
|
-
warnOnce(
|
|
23
|
-
"XTable:virtualScroll:noExport",
|
|
24
|
-
"[XTable] vue-virtual-scroller 已加载但未导出 RecycleScroller,虚拟滚动已禁用"
|
|
25
|
-
);
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
_scrollerCache = { RecycleScroller };
|
|
29
|
-
_scrollerLoaded = true;
|
|
30
|
-
return _scrollerCache;
|
|
31
|
-
} catch {
|
|
32
|
-
_scrollerFailed = true;
|
|
33
|
-
warnOnce(
|
|
34
|
-
"XTable:virtualScroll:notInstalled",
|
|
35
|
-
"[XTable] useVirtual=true 需要安装 vue-virtual-scroller,请运行: pnpm add vue-virtual-scroller"
|
|
36
|
-
);
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
5
|
+
warnOnce(
|
|
6
|
+
"XTable:virtualScroll:disabled",
|
|
7
|
+
"[XTable] 虚拟滚动能力暂未开放,useVirtual 将被忽略"
|
|
8
|
+
);
|
|
9
|
+
return null;
|
|
39
10
|
}
|
|
40
11
|
function useVirtualScroll(useVirtual, virtualShowSize, virtualItemHeight, attrsRef) {
|
|
41
12
|
const RecycleScroller = shallowRef(null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index212.mjs","sources":["../../src/components/XTable/useVirtualScroll.ts"],"sourcesContent":["// packages/core/src/components/XTable/useVirtualScroll.ts\n//\n// useVirtualScroll —— 虚拟滚动接入 vue-virtual-scroller
|
|
1
|
+
{"version":3,"file":"index212.mjs","sources":["../../src/components/XTable/useVirtualScroll.ts"],"sourcesContent":["// packages/core/src/components/XTable/useVirtualScroll.ts\n//\n// useVirtualScroll —— 虚拟滚动接入 vue-virtual-scroller(当前已禁用)\n//\n// 当前状态:虚拟滚动能力暂未开放,loadVirtualScroller() 直接返回 null。\n// 原因:CJS 构建产物中 import('vue-virtual-scroller') 会被 Rollup 转为 require(),\n// 导致宿主项目在未安装该包时编译失败。待能力正式开放时恢复动态加载逻辑。\n//\n// 设计目标(恢复后):\n// - 用户安装 vue-virtual-scroller 时,useVirtual=true 启用大数据量虚拟滚动\n// - 用户未安装时,给出友好 warn 并回退到普通 ElTable 渲染(不崩溃)\n// - 检测到不兼容场景(fixed columns / span-method / tree-props)时 dev warn\n//\n// 与 ElTable 的协作:\n// - ElTable 自身不暴露虚拟滚动 API(TableV2 是独立组件,且 Vue2 端不可用)\n// - 本 hook 在 useVirtual=true 时旁路 ElTable,改用 RecycleScroller 渲染行\n// - 表头仍由 ElTable 渲染(仅渲染表头部分,不渲染 tbody),保持样式一致\n//\n// 性能要点:\n// - vue-virtual-scroller 的 RecycleScroller 自带 itemSize + buffer 优化\n// - 避免在循环内创建闭包(render 函数引用稳定)\n\nimport type { Component, ComputedRef, Ref } from 'vue-demi';\nimport { computed, ref, shallowRef } from 'vue-demi';\nimport { warnOnce } from '../../utils/warnOnce';\nimport {\n DEFAULT_VIRTUAL_ITEM_HEIGHT,\n DEFAULT_VIRTUAL_SHOW_SIZE\n} from './src/constants';\n// vue-virtual-scroller 类型桩在 ./vue-virtual-scroller.types.d.ts 中声明(optional peer)\n\n// 虚拟滚动能力暂未开放:loadVirtualScroller 直接返回 null,不执行任何动态 import。\n// 原因:CJS 构建产物中 import() 会被 Rollup 转为 require(),导致宿主项目\n// 在未安装 vue-virtual-scroller 时编译失败。待虚拟滚动能力正式开放时恢复。\n\n/**\n * 运行时动态加载 vue-virtual-scroller(当前已禁用,直接返回 null)。\n *\n * 返回值:\n * - 成功:{ RecycleScroller }(当前始终为 null)\n * - 失败:null(虚拟滚动能力暂未开放)\n */\nexport async function loadVirtualScroller(): Promise<{\n RecycleScroller: Component;\n} | null> {\n warnOnce(\n 'XTable:virtualScroll:disabled',\n '[XTable] 虚拟滚动能力暂未开放,useVirtual 将被忽略'\n );\n return null;\n}\n\n/**\n * useVirtualScroll —— 虚拟滚动状态与异步加载控制。\n *\n * @param useVirtual - 是否启用虚拟滚动(响应式)\n * @param virtualShowSize - 可视区域渲染行数(响应式,默认 30)\n * @param virtualItemHeight - 预估行高 px(响应式,默认 50)\n * @param attrsRef - 用户透传给 ElTable 的 attrs(用于检测不兼容场景)\n *\n * 返回:\n * - shouldVirtualize:最终是否启用虚拟模式(useVirtual + 加载成功)\n * - RecycleScroller:vue-virtual-scroller 组件(响应式,加载完成后填充)\n * - itemSize:合并后的行高\n * - bufferSize:合并后的可视区行数\n */\nexport interface UseVirtualScrollReturn {\n shouldVirtualize: ComputedRef<boolean>;\n RecycleScroller: Ref<Component | null>;\n loadFailed: Ref<boolean>;\n itemSize: ComputedRef<number>;\n bufferSize: ComputedRef<number>;\n ensureLoaded: () => Promise<void>;\n checkCompat: () => void;\n}\n\nexport function useVirtualScroll(\n useVirtual: Ref<boolean>,\n virtualShowSize: Ref<number>,\n virtualItemHeight: Ref<number>,\n attrsRef: () => Record<string, any>\n): UseVirtualScrollReturn {\n // 使用 shallowRef 存储组件定义,避免 Vue3 将组件对象深度 reactive 化\n // 导致 \"Component that was made a reactive object\" 警告\n const RecycleScroller = shallowRef(null) as Ref<Component | null>;\n const loadFailed = ref(false);\n\n const shouldVirtualize = computed(\n () => useVirtual.value && !!RecycleScroller.value\n );\n\n // 不兼容场景检测(dev only)—— 仅在 useVirtual=true 时触发\n const checkCompat = () => {\n if (!useVirtual.value) {\n return;\n }\n const a = attrsRef() || {};\n if (a['span-method'] || a.spanMethod) {\n warnOnce(\n 'XTable:virtualScroll:spanMethod',\n '[XTable] 虚拟滚动模式下 span-method 不可用,合并行/列将被忽略'\n );\n }\n if (a['tree-props'] || a.treeProps) {\n warnOnce(\n 'XTable:virtualScroll:treeProps',\n '[XTable] 虚拟滚动模式下 tree-props 不可用,请使用平铺数据'\n );\n }\n // 检测固定列:通过判断列配置中是否含 fixed(由主组件在调用时传入)\n // 此处仅检测 attrs 上的 default-sort 等无关属性即可,固定列在 columns 渲染处再 warn\n };\n\n // 启动加载(异步,不阻塞渲染)\n const ensureLoaded = async () => {\n if (!useVirtual.value) {\n return;\n }\n if (RecycleScroller.value || loadFailed.value) {\n return;\n }\n const mod = await loadVirtualScroller();\n if (mod) {\n RecycleScroller.value = mod.RecycleScroller as Component;\n } else {\n loadFailed.value = true;\n }\n };\n\n const itemSize = computed(\n () => virtualItemHeight.value || DEFAULT_VIRTUAL_ITEM_HEIGHT\n );\n const bufferSize = computed(\n () => virtualShowSize.value || DEFAULT_VIRTUAL_SHOW_SIZE\n );\n\n return {\n shouldVirtualize,\n RecycleScroller,\n loadFailed,\n itemSize,\n bufferSize,\n ensureLoaded,\n checkCompat\n };\n}\n\n// @internal 测试用:重置模块级缓存(虚拟滚动已禁用,此函数当前为空操作)\nexport function _resetVirtualScrollerCache(): void {\n // no-op: 虚拟滚动禁用期间无需重置任何缓存\n}\n"],"names":[],"mappings":";;;AA0CA,eAAsB,sBAEZ;AACR;AAAA,IACE;AAAA,IACA;AAAA,EAAA;AAEF,SAAO;AACT;AA0BO,SAAS,iBACd,YACA,iBACA,mBACA,UACwB;AAGxB,QAAM,kBAAkB,WAAW,IAAI;AACvC,QAAM,aAAa,IAAI,KAAK;AAE5B,QAAM,mBAAmB;AAAA,IACvB,MAAM,WAAW,SAAS,CAAC,CAAC,gBAAgB;AAAA,EAAA;AAI9C,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,WAAW,OAAO;AACrB;AAAA,IACF;AACA,UAAM,IAAI,SAAA,KAAc,CAAA;AACxB,QAAI,EAAE,aAAa,KAAK,EAAE,YAAY;AACpC;AAAA,QACE;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,QAAI,EAAE,YAAY,KAAK,EAAE,WAAW;AAClC;AAAA,QACE;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAAA,EAGF;AAGA,QAAM,eAAe,YAAY;AAC/B,QAAI,CAAC,WAAW,OAAO;AACrB;AAAA,IACF;AACA,QAAI,gBAAgB,SAAS,WAAW,OAAO;AAC7C;AAAA,IACF;AACA,UAAM,MAAM,MAAM,oBAAA;AAClB,QAAI,KAAK;AACP,sBAAgB,QAAQ,IAAI;AAAA,IAC9B,OAAO;AACL,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF;AAEA,QAAM,WAAW;AAAA,IACf,MAAM,kBAAkB,SAAS;AAAA,EAAA;AAEnC,QAAM,aAAa;AAAA,IACjB,MAAM,gBAAgB,SAAS;AAAA,EAAA;AAGjC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "x-sccba",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.5",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://x-sccba.com",
|
|
7
7
|
"repository": {
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
"main": "dist/vue3/index.cjs",
|
|
56
56
|
"module": "dist/vue3/index.mjs",
|
|
57
57
|
"browser": "dist/vue3/index.mjs",
|
|
58
|
+
"style": "dist/vue3/style.css",
|
|
58
59
|
"unpkg": "dist/umd/index.js",
|
|
59
60
|
"jsdelivr": "dist/umd/index.js",
|
|
60
61
|
"types": "dist/vue3/index.d.ts",
|
|
@@ -74,7 +75,9 @@
|
|
|
74
75
|
"types/dom-speech-recognition-env.d.ts",
|
|
75
76
|
"types/index.d.ts",
|
|
76
77
|
"vue2.js",
|
|
77
|
-
"vue3.js"
|
|
78
|
+
"vue3.js",
|
|
79
|
+
"style.css",
|
|
80
|
+
"vue2/style.css"
|
|
78
81
|
],
|
|
79
82
|
"scripts": {
|
|
80
83
|
"build:es": "set NODE_OPTIONS=\"--max-old-space-size=4096\" && pnpm run generate-types && vue-tsc -b --noEmit && vite build",
|
package/style.css
ADDED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { Component, ComputedRef, Ref } from 'vue-demi';
|
|
2
2
|
/**
|
|
3
|
-
* 运行时动态加载 vue-virtual-scroller
|
|
4
|
-
* 失败一次后不再重试,避免反复触发网络请求或抛错。
|
|
3
|
+
* 运行时动态加载 vue-virtual-scroller(当前已禁用,直接返回 null)。
|
|
5
4
|
*
|
|
6
5
|
* 返回值:
|
|
7
|
-
* - 成功:{ RecycleScroller }
|
|
8
|
-
* - 失败:null
|
|
6
|
+
* - 成功:{ RecycleScroller }(当前始终为 null)
|
|
7
|
+
* - 失败:null(虚拟滚动能力暂未开放)
|
|
9
8
|
*/
|
|
10
9
|
export declare function loadVirtualScroller(): Promise<{
|
|
11
10
|
RecycleScroller: Component;
|
package/vue2/style.css
ADDED