@visactor/vtable 1.22.11-alpha.8 → 1.22.11-alpha.9
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/cjs/ListTable.d.ts +34 -7
- package/cjs/ListTable.js +138 -18
- package/cjs/ListTable.js.map +1 -1
- package/cjs/PivotChart.d.ts +0 -3
- package/cjs/PivotChart.js +5 -12
- package/cjs/PivotChart.js.map +1 -1
- package/cjs/components/index.js +1 -1
- package/cjs/core/BaseTable.js +1 -1
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/core/TABLE_EVENT_TYPE.d.ts +1 -0
- package/cjs/core/TABLE_EVENT_TYPE.js +1 -0
- package/cjs/core/TABLE_EVENT_TYPE.js.map +1 -1
- package/cjs/core/index.d.ts +1 -0
- package/cjs/core/index.js +30 -0
- package/cjs/core/index.js.map +1 -0
- package/cjs/core/record-helper.d.ts +4 -2
- package/cjs/core/record-helper.js +120 -47
- package/cjs/core/record-helper.js.map +1 -1
- package/cjs/data/DataSource.d.ts +13 -4
- package/cjs/data/DataSource.js +174 -60
- package/cjs/data/DataSource.js.map +1 -1
- package/cjs/event/event.d.ts +2 -1
- package/cjs/event/event.js +20 -9
- package/cjs/event/event.js.map +1 -1
- package/cjs/event/listener/container-dom.js +1 -1
- package/cjs/event/listener/container-dom.js.map +1 -1
- package/cjs/event/listener/scroll-bar.js +2 -8
- package/cjs/event/listener/scroll-bar.js.map +1 -1
- package/cjs/event/listener/table-group.js +8 -14
- package/cjs/event/listener/table-group.js.map +1 -1
- package/cjs/event/media-click.js +1 -1
- package/cjs/event/scroll.js +1 -1
- package/cjs/event/sparkline-event.js +1 -1
- package/cjs/event/util.js +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/layout/index.js +1 -2
- package/cjs/layout/pivot-header-layout.d.ts +0 -6
- package/cjs/layout/pivot-header-layout.js +20 -39
- package/cjs/layout/pivot-header-layout.js.map +1 -1
- package/cjs/plugins/custom-cell-style.d.ts +5 -0
- package/cjs/plugins/custom-cell-style.js +9 -0
- package/cjs/plugins/custom-cell-style.js.map +1 -1
- package/cjs/plugins/interface.js +1 -1
- package/cjs/plugins/invert-highlight.js +2 -1
- package/cjs/plugins/list-tree-stick-cell.js +1 -1
- package/cjs/plugins/plugin-manager.js +1 -1
- package/cjs/scenegraph/graphic/active-cell-chart-list.d.ts +2 -15
- package/cjs/scenegraph/graphic/active-cell-chart-list.js +75 -198
- package/cjs/scenegraph/graphic/active-cell-chart-list.js.map +1 -1
- package/cjs/scenegraph/graphic/chart.d.ts +1 -10
- package/cjs/scenegraph/graphic/chart.js +27 -61
- package/cjs/scenegraph/graphic/chart.js.map +1 -1
- package/cjs/scenegraph/graphic/contributions/chart-render.js +4 -3
- package/cjs/scenegraph/graphic/contributions/chart-render.js.map +1 -1
- package/cjs/scenegraph/refresh-node/update-chart.d.ts +1 -1
- package/cjs/scenegraph/refresh-node/update-chart.js +1 -2
- package/cjs/scenegraph/refresh-node/update-chart.js.map +1 -1
- package/cjs/scenegraph/scenegraph.d.ts +2 -2
- package/cjs/scenegraph/scenegraph.js +11 -44
- package/cjs/scenegraph/scenegraph.js.map +1 -1
- package/cjs/tools/util.d.ts +0 -5
- package/cjs/tools/util.js +4 -22
- package/cjs/tools/util.js.map +1 -1
- package/cjs/ts-types/base-table.d.ts +2 -2
- package/cjs/ts-types/base-table.js.map +1 -1
- package/cjs/ts-types/events.d.ts +15 -0
- package/cjs/ts-types/events.js.map +1 -1
- package/cjs/ts-types/table-engine.d.ts +33 -13
- package/cjs/ts-types/table-engine.js.map +1 -1
- package/cjs/vrender.js.map +1 -1
- package/dist/vtable.js +898 -711
- package/dist/vtable.min.js +2 -2
- package/es/ListTable.d.ts +34 -7
- package/es/ListTable.js +134 -18
- package/es/ListTable.js.map +1 -1
- package/es/PivotChart.d.ts +0 -3
- package/es/PivotChart.js +4 -13
- package/es/PivotChart.js.map +1 -1
- package/es/components/index.js +1 -1
- package/es/core/BaseTable.js +1 -1
- package/es/core/BaseTable.js.map +1 -1
- package/es/core/TABLE_EVENT_TYPE.d.ts +1 -0
- package/es/core/TABLE_EVENT_TYPE.js +1 -0
- package/es/core/TABLE_EVENT_TYPE.js.map +1 -1
- package/es/core/index.d.ts +1 -0
- package/es/core/index.js +2 -0
- package/es/core/index.js.map +1 -0
- package/es/core/record-helper.d.ts +4 -2
- package/es/core/record-helper.js +114 -43
- package/es/core/record-helper.js.map +1 -1
- package/es/data/DataSource.d.ts +13 -4
- package/es/data/DataSource.js +174 -60
- package/es/data/DataSource.js.map +1 -1
- package/es/event/event.d.ts +2 -1
- package/es/event/event.js +20 -9
- package/es/event/event.js.map +1 -1
- package/es/event/listener/container-dom.js +1 -1
- package/es/event/listener/container-dom.js.map +1 -1
- package/es/event/listener/scroll-bar.js +2 -8
- package/es/event/listener/scroll-bar.js.map +1 -1
- package/es/event/listener/table-group.js +8 -13
- package/es/event/listener/table-group.js.map +1 -1
- package/es/event/media-click.js +1 -1
- package/es/event/scroll.js +1 -1
- package/es/event/sparkline-event.js +1 -1
- package/es/event/util.js +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/layout/index.js +1 -2
- package/es/layout/pivot-header-layout.d.ts +0 -6
- package/es/layout/pivot-header-layout.js +20 -39
- package/es/layout/pivot-header-layout.js.map +1 -1
- package/es/plugins/custom-cell-style.d.ts +5 -0
- package/es/plugins/custom-cell-style.js +9 -0
- package/es/plugins/custom-cell-style.js.map +1 -1
- package/es/plugins/interface.js +1 -1
- package/es/plugins/invert-highlight.js +2 -1
- package/es/plugins/list-tree-stick-cell.js +1 -1
- package/es/plugins/plugin-manager.js +1 -1
- package/es/scenegraph/graphic/active-cell-chart-list.d.ts +2 -15
- package/es/scenegraph/graphic/active-cell-chart-list.js +68 -186
- package/es/scenegraph/graphic/active-cell-chart-list.js.map +1 -1
- package/es/scenegraph/graphic/chart.d.ts +1 -10
- package/es/scenegraph/graphic/chart.js +25 -58
- package/es/scenegraph/graphic/chart.js.map +1 -1
- package/es/scenegraph/graphic/contributions/chart-render.js +4 -3
- package/es/scenegraph/graphic/contributions/chart-render.js.map +1 -1
- package/es/scenegraph/refresh-node/update-chart.d.ts +1 -1
- package/es/scenegraph/refresh-node/update-chart.js +1 -2
- package/es/scenegraph/refresh-node/update-chart.js.map +1 -1
- package/es/scenegraph/scenegraph.d.ts +2 -2
- package/es/scenegraph/scenegraph.js +10 -43
- package/es/scenegraph/scenegraph.js.map +1 -1
- package/es/tools/util.d.ts +0 -5
- package/es/tools/util.js +0 -18
- package/es/tools/util.js.map +1 -1
- package/es/ts-types/base-table.d.ts +2 -2
- package/es/ts-types/base-table.js.map +1 -1
- package/es/ts-types/events.d.ts +15 -0
- package/es/ts-types/events.js.map +1 -1
- package/es/ts-types/table-engine.d.ts +33 -13
- package/es/ts-types/table-engine.js.map +1 -1
- package/es/vrender.js.map +1 -1
- package/package.json +4 -4
package/cjs/tools/util.d.ts
CHANGED
|
@@ -22,11 +22,6 @@ export declare function transpose(matrix: Array<Array<any>>): any[];
|
|
|
22
22
|
export declare function debounce(fn: Function, delay: number, immediate?: boolean): (this: any, ...args: any[]) => any;
|
|
23
23
|
export declare function throttle(func: Function, delay: number): (this: any, ...args: any[]) => void;
|
|
24
24
|
export declare function throttle2(func: Function, delay: number): (this: any, ...args: any[]) => void;
|
|
25
|
-
export declare function cancellableThrottle(func: Function, delay: number): {
|
|
26
|
-
throttled: (this: any, ...args: any[]) => void;
|
|
27
|
-
cancel: () => void;
|
|
28
|
-
flush: () => void;
|
|
29
|
-
};
|
|
30
25
|
export declare function changeColor(color: string, ratio: number, isDarker: boolean): string;
|
|
31
26
|
export declare function toFixed(n: number, fixed?: number): number;
|
|
32
27
|
export declare function validToString(v: any): any;
|
package/cjs/tools/util.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: !0
|
|
5
|
-
}), exports.computeChildrenNodeLength = exports.traverseObject = exports.isDivSelected = exports.deduplication = exports.isAllDigits = exports.toBoolean = exports.hashCode = exports.isArrEqual = exports.inBound = exports.getValueByPath = exports.defaultOrderFn = exports.isMobile = exports.validToString = exports.toFixed = exports.changeColor = exports.
|
|
5
|
+
}), exports.computeChildrenNodeLength = exports.traverseObject = exports.isDivSelected = exports.deduplication = exports.isAllDigits = exports.toBoolean = exports.hashCode = exports.isArrEqual = exports.inBound = exports.getValueByPath = exports.defaultOrderFn = exports.isMobile = exports.validToString = exports.toFixed = exports.changeColor = exports.throttle2 = exports.throttle = exports.debounce = exports.transpose = exports.convertInternal = exports.ingoreNoneValueMerge = exports.merge = exports.isGlobal = exports.isDocument = exports.isError = exports.isNull = exports.isUndefined = exports.isDate = exports.isSymbol = exports.isBoolean = exports.isRegExp = exports.isNumber = exports.isString = exports.isArray = exports.isFunction = exports.isObject = exports.isIt = exports.judgeType = void 0;
|
|
6
6
|
|
|
7
7
|
const vutils_1 = require("@visactor/vutils"), ts_types_1 = require("../ts-types"), judgeType = value => {
|
|
8
8
|
switch (Object.prototype.toString.call(value)) {
|
|
@@ -181,24 +181,6 @@ function throttle2(func, delay) {
|
|
|
181
181
|
};
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
-
function cancellableThrottle(func, delay) {
|
|
185
|
-
let timer = null, lastArgs = null, context = null;
|
|
186
|
-
return {
|
|
187
|
-
throttled: function(...args) {
|
|
188
|
-
lastArgs = args, context = this, timer || (timer = setTimeout((() => {
|
|
189
|
-
lastArgs && func.apply(context, lastArgs), timer = null, lastArgs = null, context = null;
|
|
190
|
-
}), delay));
|
|
191
|
-
},
|
|
192
|
-
cancel: () => {
|
|
193
|
-
timer && (clearTimeout(timer), timer = null, lastArgs = null, context = null);
|
|
194
|
-
},
|
|
195
|
-
flush: () => {
|
|
196
|
-
timer && lastArgs && (clearTimeout(timer), func.apply(context, lastArgs), timer = null,
|
|
197
|
-
lastArgs = null, context = null);
|
|
198
|
-
}
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
|
|
202
184
|
function pad(num, totalChars) {
|
|
203
185
|
for (num = `${num}`; num.length < totalChars; ) num = "0" + num;
|
|
204
186
|
return num;
|
|
@@ -241,9 +223,9 @@ function inBound({x: x, y: y}, {left: left, top: top, width: width, height: heig
|
|
|
241
223
|
|
|
242
224
|
exports.isGlobal = isGlobal, exports.merge = merge, exports.ingoreNoneValueMerge = ingoreNoneValueMerge,
|
|
243
225
|
exports.convertInternal = convertInternal, exports.transpose = transpose, exports.debounce = debounce,
|
|
244
|
-
exports.throttle = throttle, exports.throttle2 = throttle2, exports.
|
|
245
|
-
exports.
|
|
246
|
-
exports.
|
|
226
|
+
exports.throttle = throttle, exports.throttle2 = throttle2, exports.changeColor = changeColor,
|
|
227
|
+
exports.toFixed = toFixed, exports.validToString = validToString, exports.isMobile = isMobile,
|
|
228
|
+
exports.defaultOrderFn = defaultOrderFn, exports.getValueByPath = getValueByPath,
|
|
247
229
|
exports.inBound = inBound;
|
|
248
230
|
|
|
249
231
|
const isArrEqual = (arr1, arr2) => arr1.length === arr2.length && arr1.every(((ele, index) => Object.is(ele, arr2[index])));
|
package/cjs/tools/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport { HierarchyState, type SortOrder } from '../ts-types';\n\nexport const judgeType = (value: any) => {\n switch (Object.prototype.toString.call(value)) {\n case '[object Object]':\n return 'object';\n case '[object Function]':\n return 'function';\n case '[object Array]':\n return 'array';\n case '[object String]':\n return 'string';\n case '[object Number]':\n return 'number';\n case '[object RegExp]':\n return 'regExp';\n case '[object Boolean]':\n return 'boolean';\n case '[object Symbol]':\n return 'symbol';\n case '[object Date]':\n return 'date';\n case '[object Undefined]':\n return 'undefined';\n case '[object Null]':\n return 'null';\n case '[object Error]':\n return 'error';\n case '[object HTMLDocument]':\n return 'document';\n case '[object global]':\n return 'global'; // window 是全局对象 global 的引用\n default:\n return null;\n }\n};\n\nexport const isIt = (v: any, type: string): boolean => judgeType(v) === type;\n\nexport const isObject = (v: any): boolean => isIt(v, 'object');\nexport const isFunction = (v: any): boolean => isIt(v, 'function');\nexport const isArray = (v: any): boolean => isIt(v, 'array');\nexport const isString = (v: any): boolean => isIt(v, 'string');\nexport const isNumber = (v: any): boolean => isIt(v, 'number');\nexport const isRegExp = (v: any): boolean => isIt(v, 'regExp');\nexport const isBoolean = (v: any): boolean => isIt(v, 'boolean');\nexport const isSymbol = (v: any): boolean => isIt(v, 'symbol');\nexport const isDate = (v: any): boolean => isIt(v, 'date');\nexport const isUndefined = (v: any): boolean => isIt(v, 'undefined');\nexport const isNull = (v: any): boolean => isIt(v, 'null');\nexport const isError = (v: any): boolean => isIt(v, 'error');\nexport const isDocument = (v: any): boolean => isIt(v, 'document');\nexport const isGlobal = (v: any): boolean => isIt(v, 'global');\n\nexport function merge(target: any, ...sources: any[]): any {\n if (!sources.length) {\n return target || {};\n }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n if (!isObject(target[key])) {\n Object.assign(target, { [key]: source[key] });\n }\n merge(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return merge(target, ...sources);\n}\nexport function ingoreNoneValueMerge(target: any, ...sources: any[]): any {\n if (!sources.length) {\n return target || {};\n }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n if (!isObject(target[key])) {\n Object.assign(target, { [key]: source[key] });\n }\n ingoreNoneValueMerge(target[key], source[key]);\n } else if (source[key] !== null && source[key] !== undefined) {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return ingoreNoneValueMerge(target, ...sources);\n}\n\n// 使用vutils库中的cloneDeep\n// export function cloneDeep(item: any) {\n// if (!item) {\n// return item;\n// } // null, undefined values check\n\n// const types = [Number, String, Boolean];\n// let result: any;\n\n// // normalizing primitives if someone did new String('aaa'), or new Number('444');\n// types.forEach(function (type) {\n// if (item instanceof type) {\n// result = type(item);\n// }\n// });\n\n// if (typeof result === 'undefined') {\n// if (Object.prototype.toString.call(item) === '[object Array]') {\n// result = [];\n// item.forEach(function (child: any, index: number) {\n// result[index] = cloneDeep(child);\n// });\n// } else if (typeof item === 'object') {\n// // testing that this is DOM\n// if (item.nodeType && typeof item.cloneNode === 'function') {\n// result = item.cloneNode(true);\n// } else if (!item.prototype) {\n// // check that this is a literal\n// if (item instanceof Date) {\n// result = new Date(item);\n// } else if (item.clone) {\n// result = item.clone();\n// } else {\n// // it is an object literal\n// result = {};\n// for (const i in item) {\n// result[i] = cloneDeep(item[i]);\n// }\n// }\n// } else {\n// // depending what you would like here,\n// // just keep the reference, or create new object\n// if (item.constructor) {\n// // would not advice to do that, reason? Read below\n// result = new item.constructor();\n// } else {\n// result = item;\n// }\n// }\n// } else {\n// result = item;\n// }\n// }\n\n// return result;\n// }\n\nexport function convertInternal(value: unknown): string {\n if (typeof value === 'function') {\n value = value();\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return isValid(value) ? `${value}` : '';\n}\n/**\n * 返回 matrix 的 转置矩阵\n * @param matrix\n * @returns\n */\nexport function transpose(matrix: Array<Array<any>>) {\n if (matrix?.length <= 0) {\n return matrix;\n }\n const m = matrix.length;\n const n = matrix[0].length;\n const transposed = new Array(n);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < n; j++) {\n if (!transposed[j]) {\n transposed[j] = new Array(m);\n }\n transposed[j][i] = matrix[i][j];\n }\n }\n return transposed;\n}\n\nexport function debounce(fn: Function, delay: number, immediate = false) {\n let timer: any;\n let result: any;\n return function (this: any, ...args: any[]) {\n if (timer) {\n clearTimeout(timer);\n }\n if (immediate) {\n // 如果timer存在,说明第二次调用的时候还没到delay时间,因为如果超过delay时间\n // timer会被赋值为0,所以这个时候我们不应该执行fn,应该重新设置一个定时器\n // 但如果是一次的时候,因为还没有设过定时器,所以这里timer会是undefined\n if (timer) {\n timer = setTimeout(() => (timer = 0), delay);\n } else {\n result = fn.apply(this, args);\n return result;\n }\n } else {\n timer = setTimeout(() => fn.apply(this, args), delay);\n }\n };\n}\n/**\n * throttle 保障了首次立即执行 后续触发的回调执行间隔delay时间 区别于throttle2 最后执行时机会提前\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n func.apply(this, args); //先执行函数,保证第一次立即执行\n timer = setTimeout(() => {\n timer = null;\n }, delay);\n }\n // console.log('throttle');\n // 当我们第一次触发事件,定时器不存在时就执行函数,当我们再次点击时,因为定时器存在,\n // 所以无法再进入函数调用(无论事件如何执行),那么只能等定时器事件结束,\n // 我们让timer=null,回到第一次的状态,就又重新开始新的一轮\n };\n}\n/**\n * throttle节流 间隔delay时间后执行 保障了最后执行时机是在delay之后\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle2(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n timer = setTimeout(() => {\n func.apply(this, args);\n timer = null;\n }, delay);\n }\n };\n}\n\n/**\n * 可取消的节流函数,返回包含执行函数和取消函数的对象\n * @param { Function } func 执行函数\n * @param { Integer } delay 多长时间内不能第二次执行\n * @returns { Object } 返回包含 throttled 执行函数和 cancel 取消函数的对象\n */\nexport function cancellableThrottle(func: Function, delay: number) {\n let timer: any = null;\n let lastArgs: any[] | null = null;\n let context: any = null;\n\n const throttled = function (this: any, ...args: any[]) {\n lastArgs = args;\n context = this;\n if (!timer) {\n timer = setTimeout(() => {\n if (lastArgs) {\n func.apply(context, lastArgs);\n }\n timer = null;\n lastArgs = null;\n context = null;\n }, delay);\n }\n };\n\n const cancel = () => {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n lastArgs = null;\n context = null;\n }\n };\n\n const flush = () => {\n if (timer && lastArgs) {\n clearTimeout(timer);\n func.apply(context, lastArgs);\n timer = null;\n lastArgs = null;\n context = null;\n }\n };\n\n return {\n throttled,\n cancel,\n flush\n };\n}\n\nfunction pad(num: string, totalChars: number) {\n const pad = '0';\n num = `${num}`;\n while (num.length < totalChars) {\n num = pad + num;\n }\n return num;\n}\n/**\n * 在某个颜色的基础上 获取变暗或者变亮的颜色\n * @param color 基础颜色值\n * @param ratio Ratio is between 0 and 1\n * @param isDarker 是否获取变暗的颜色\n * @returns\n */\nexport function changeColor(color: string, ratio: number, isDarker: boolean) {\n // Trim trailing/leading whitespace\n color = color.replace(/^\\s*|\\s*$/, '');\n\n // Expand three-digit hex\n color = color.replace(/^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i, '#$1$1$2$2$3$3');\n\n // Calculate ratio\n const difference = Math.round(ratio * 256) * (isDarker ? -1 : 1);\n // Determine if input is RGB(A)\n const rgb = color.match(\n new RegExp(\n '^rgba?\\\\(\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '\\\\s*,\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '\\\\s*,\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '(?:\\\\s*,\\\\s*' +\n '(0|1|0?\\\\.\\\\d+))?' +\n '\\\\s*\\\\)$',\n 'i'\n )\n );\n const alpha = !!rgb && isValid(rgb[4]) ? rgb[4] : null;\n // Convert hex to decimal\n const decimal = rgb\n ? [rgb[1], rgb[2], rgb[3]]\n : color\n .replace(/^#?([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])/i, function () {\n return `${parseInt(arguments[1], 16)},${parseInt(arguments[2], 16)},${parseInt(arguments[3], 16)}`;\n })\n .split(/,/);\n\n // Return RGB(A)\n return rgb\n ? `rgb${alpha !== null ? 'a' : ''}(${Math[isDarker ? 'max' : 'min'](\n parseInt(decimal[0], 10) + difference,\n isDarker ? 0 : 255\n )}, ${Math[isDarker ? 'max' : 'min'](parseInt(decimal[1], 10) + difference, isDarker ? 0 : 255)}, ${Math[\n isDarker ? 'max' : 'min'\n ](parseInt(decimal[2], 10) + difference, isDarker ? 0 : 255)}${alpha !== null ? `, ${alpha}` : ''})`\n : // Return hex\n [\n '#',\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[0], 10) + difference, isDarker ? 0 : 255).toString(16), 2),\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[1], 10) + difference, isDarker ? 0 : 255).toString(16), 2),\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[2], 10) + difference, isDarker ? 0 : 255).toString(16), 2)\n ].join('');\n}\n/**\n * 解决加减出现很多小数位的问题\n * @param n\n * @param fixed\n * @returns\n */\nexport function toFixed(n: number, fixed = 0) {\n return parseFloat(n.toFixed(fixed));\n}\n\nexport function validToString(v: any) {\n if (isString(v) || isNumber(v) || isBoolean(v)) {\n return v.toString();\n }\n return '';\n}\nexport function isMobile() {\n return navigator.userAgent.match(\n // eslint-disable-next-line max-len\n /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i\n );\n}\nexport function defaultOrderFn(v1: any, v2: any, order: SortOrder): -1 | 0 | 1 {\n if (order !== 'desc') {\n return v1 === v2 ? 0 : v1 > v2 ? 1 : -1;\n }\n return v1 === v2 ? 0 : v1 < v2 ? 1 : -1;\n}\n/**\n * 针对一个具有多级结构的对象,根据层级路径获取到具体值\n * @param obj\n * @param paths\n * @returns\n */\nexport function getValueByPath(obj: any, paths: string[]) {\n let res = obj;\n let prop;\n while ((prop = paths.shift())) {\n res = res[prop];\n if (!res) {\n break;\n }\n }\n return res;\n}\nexport function inBound(\n { x, y }: { x: number; y: number },\n { left, top, width, height }: { left: number; top: number; width: number; height: number }\n) {\n if (x > left && x < left + width && y > top && y < top + height) {\n return true;\n }\n return false;\n}\n\nexport const isArrEqual = (arr1: Array<any>, arr2: Array<any>) => {\n return arr1.length === arr2.length && arr1.every((ele, index) => Object.is(ele, arr2[index]));\n};\n/**\n * 根据string生成hash值\n * @param input\n * @returns\n */\nexport function hashCode(input: string) {\n const I64BIT_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'.split('');\n let hash = 5381;\n let i = input.length - 1;\n\n for (; i > -1; i--) {\n hash += (hash << 5) + input.charCodeAt(i);\n }\n\n let value = hash & 0x7fffffff;\n\n let retValue = '';\n do {\n retValue += I64BIT_TABLE[value & 0x3f];\n } while ((value >>= 6));\n return retValue;\n}\n\nexport function toBoolean(val: unknown): boolean {\n if (typeof val === 'string') {\n if (val === 'false') {\n return false;\n } else if (val === 'off') {\n return false;\n } else if (/^0+$/.exec(val)) {\n return false;\n }\n }\n return Boolean(val);\n}\n\nexport function isAllDigits(str: string) {\n const pattern = /^-?\\d+(\\.\\d+)?$/;\n return pattern.test(str);\n}\n// array deduplication\nexport function deduplication(array: number[]) {\n const result = [];\n for (let i = 0; i < array.length; i++) {\n if (result.indexOf(array[i]) === -1) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** 判断div中的文本是否有被选中 */\nexport function isDivSelected(div: HTMLDivElement) {\n const selection = window.getSelection();\n if (selection.rangeCount) {\n const range = selection.getRangeAt(0);\n return range.endOffset > range.startOffset && div.contains(range.commonAncestorContainer);\n }\n return false;\n}\n\nexport function traverseObject(obj: any, childrenProperty: string, callback: Function) {\n callback(obj);\n\n if (obj?.[childrenProperty] && Array.isArray(obj?.[childrenProperty])) {\n obj[childrenProperty].forEach((child: any) => traverseObject(child, childrenProperty, callback));\n }\n}\n\n/**\n * 当某个节点由展开变为折叠,需要计算出影响的节点数量 使用childrenLength来标记。同样需递归(不包含自身)\n * @param indexKey\n * @param hierarchyState\n * @param nodeData\n * @returns\n */\nexport function computeChildrenNodeLength(indexKey: number | number[], hierarchyState: HierarchyState, nodeData: any) {\n let size = 0;\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return size;\n }\n const children = nodeData.filteredChildren ? nodeData.filteredChildren : nodeData.children;\n if (children) {\n for (let i = 0; i < children.length; i++) {\n size += 1;\n const childIndex = Array.isArray(indexKey) ? indexKey.concat([i]) : [indexKey, i];\n\n size += computeChildrenNodeLength(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n children[i].hierarchyState,\n children[i]\n );\n }\n }\n return size;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/tools/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport { HierarchyState, type SortOrder } from '../ts-types';\n\nexport const judgeType = (value: any) => {\n switch (Object.prototype.toString.call(value)) {\n case '[object Object]':\n return 'object';\n case '[object Function]':\n return 'function';\n case '[object Array]':\n return 'array';\n case '[object String]':\n return 'string';\n case '[object Number]':\n return 'number';\n case '[object RegExp]':\n return 'regExp';\n case '[object Boolean]':\n return 'boolean';\n case '[object Symbol]':\n return 'symbol';\n case '[object Date]':\n return 'date';\n case '[object Undefined]':\n return 'undefined';\n case '[object Null]':\n return 'null';\n case '[object Error]':\n return 'error';\n case '[object HTMLDocument]':\n return 'document';\n case '[object global]':\n return 'global'; // window 是全局对象 global 的引用\n default:\n return null;\n }\n};\n\nexport const isIt = (v: any, type: string): boolean => judgeType(v) === type;\n\nexport const isObject = (v: any): boolean => isIt(v, 'object');\nexport const isFunction = (v: any): boolean => isIt(v, 'function');\nexport const isArray = (v: any): boolean => isIt(v, 'array');\nexport const isString = (v: any): boolean => isIt(v, 'string');\nexport const isNumber = (v: any): boolean => isIt(v, 'number');\nexport const isRegExp = (v: any): boolean => isIt(v, 'regExp');\nexport const isBoolean = (v: any): boolean => isIt(v, 'boolean');\nexport const isSymbol = (v: any): boolean => isIt(v, 'symbol');\nexport const isDate = (v: any): boolean => isIt(v, 'date');\nexport const isUndefined = (v: any): boolean => isIt(v, 'undefined');\nexport const isNull = (v: any): boolean => isIt(v, 'null');\nexport const isError = (v: any): boolean => isIt(v, 'error');\nexport const isDocument = (v: any): boolean => isIt(v, 'document');\nexport const isGlobal = (v: any): boolean => isIt(v, 'global');\n\nexport function merge(target: any, ...sources: any[]): any {\n if (!sources.length) {\n return target || {};\n }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n if (!isObject(target[key])) {\n Object.assign(target, { [key]: source[key] });\n }\n merge(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return merge(target, ...sources);\n}\nexport function ingoreNoneValueMerge(target: any, ...sources: any[]): any {\n if (!sources.length) {\n return target || {};\n }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n if (!isObject(target[key])) {\n Object.assign(target, { [key]: source[key] });\n }\n ingoreNoneValueMerge(target[key], source[key]);\n } else if (source[key] !== null && source[key] !== undefined) {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return ingoreNoneValueMerge(target, ...sources);\n}\n\n// 使用vutils库中的cloneDeep\n// export function cloneDeep(item: any) {\n// if (!item) {\n// return item;\n// } // null, undefined values check\n\n// const types = [Number, String, Boolean];\n// let result: any;\n\n// // normalizing primitives if someone did new String('aaa'), or new Number('444');\n// types.forEach(function (type) {\n// if (item instanceof type) {\n// result = type(item);\n// }\n// });\n\n// if (typeof result === 'undefined') {\n// if (Object.prototype.toString.call(item) === '[object Array]') {\n// result = [];\n// item.forEach(function (child: any, index: number) {\n// result[index] = cloneDeep(child);\n// });\n// } else if (typeof item === 'object') {\n// // testing that this is DOM\n// if (item.nodeType && typeof item.cloneNode === 'function') {\n// result = item.cloneNode(true);\n// } else if (!item.prototype) {\n// // check that this is a literal\n// if (item instanceof Date) {\n// result = new Date(item);\n// } else if (item.clone) {\n// result = item.clone();\n// } else {\n// // it is an object literal\n// result = {};\n// for (const i in item) {\n// result[i] = cloneDeep(item[i]);\n// }\n// }\n// } else {\n// // depending what you would like here,\n// // just keep the reference, or create new object\n// if (item.constructor) {\n// // would not advice to do that, reason? Read below\n// result = new item.constructor();\n// } else {\n// result = item;\n// }\n// }\n// } else {\n// result = item;\n// }\n// }\n\n// return result;\n// }\n\nexport function convertInternal(value: unknown): string {\n if (typeof value === 'function') {\n value = value();\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return isValid(value) ? `${value}` : '';\n}\n/**\n * 返回 matrix 的 转置矩阵\n * @param matrix\n * @returns\n */\nexport function transpose(matrix: Array<Array<any>>) {\n if (matrix?.length <= 0) {\n return matrix;\n }\n const m = matrix.length;\n const n = matrix[0].length;\n const transposed = new Array(n);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < n; j++) {\n if (!transposed[j]) {\n transposed[j] = new Array(m);\n }\n transposed[j][i] = matrix[i][j];\n }\n }\n return transposed;\n}\n\nexport function debounce(fn: Function, delay: number, immediate = false) {\n let timer: any;\n let result: any;\n return function (this: any, ...args: any[]) {\n if (timer) {\n clearTimeout(timer);\n }\n if (immediate) {\n // 如果timer存在,说明第二次调用的时候还没到delay时间,因为如果超过delay时间\n // timer会被赋值为0,所以这个时候我们不应该执行fn,应该重新设置一个定时器\n // 但如果是一次的时候,因为还没有设过定时器,所以这里timer会是undefined\n if (timer) {\n timer = setTimeout(() => (timer = 0), delay);\n } else {\n result = fn.apply(this, args);\n return result;\n }\n } else {\n timer = setTimeout(() => fn.apply(this, args), delay);\n }\n };\n}\n/**\n * throttle 保障了首次立即执行 后续触发的回调执行间隔delay时间 区别于throttle2 最后执行时机会提前\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n func.apply(this, args); //先执行函数,保证第一次立即执行\n timer = setTimeout(() => {\n timer = null;\n }, delay);\n }\n // console.log('throttle');\n // 当我们第一次触发事件,定时器不存在时就执行函数,当我们再次点击时,因为定时器存在,\n // 所以无法再进入函数调用(无论事件如何执行),那么只能等定时器事件结束,\n // 我们让timer=null,回到第一次的状态,就又重新开始新的一轮\n };\n}\n/**\n * throttle节流 间隔delay时间后执行 保障了最后执行时机是在delay之后\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle2(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n timer = setTimeout(() => {\n func.apply(this, args);\n timer = null;\n }, delay);\n }\n };\n}\n\nfunction pad(num: string, totalChars: number) {\n const pad = '0';\n num = `${num}`;\n while (num.length < totalChars) {\n num = pad + num;\n }\n return num;\n}\n/**\n * 在某个颜色的基础上 获取变暗或者变亮的颜色\n * @param color 基础颜色值\n * @param ratio Ratio is between 0 and 1\n * @param isDarker 是否获取变暗的颜色\n * @returns\n */\nexport function changeColor(color: string, ratio: number, isDarker: boolean) {\n // Trim trailing/leading whitespace\n color = color.replace(/^\\s*|\\s*$/, '');\n\n // Expand three-digit hex\n color = color.replace(/^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i, '#$1$1$2$2$3$3');\n\n // Calculate ratio\n const difference = Math.round(ratio * 256) * (isDarker ? -1 : 1);\n // Determine if input is RGB(A)\n const rgb = color.match(\n new RegExp(\n '^rgba?\\\\(\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '\\\\s*,\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '\\\\s*,\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '(?:\\\\s*,\\\\s*' +\n '(0|1|0?\\\\.\\\\d+))?' +\n '\\\\s*\\\\)$',\n 'i'\n )\n );\n const alpha = !!rgb && isValid(rgb[4]) ? rgb[4] : null;\n // Convert hex to decimal\n const decimal = rgb\n ? [rgb[1], rgb[2], rgb[3]]\n : color\n .replace(/^#?([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])/i, function () {\n return `${parseInt(arguments[1], 16)},${parseInt(arguments[2], 16)},${parseInt(arguments[3], 16)}`;\n })\n .split(/,/);\n\n // Return RGB(A)\n return rgb\n ? `rgb${alpha !== null ? 'a' : ''}(${Math[isDarker ? 'max' : 'min'](\n parseInt(decimal[0], 10) + difference,\n isDarker ? 0 : 255\n )}, ${Math[isDarker ? 'max' : 'min'](parseInt(decimal[1], 10) + difference, isDarker ? 0 : 255)}, ${Math[\n isDarker ? 'max' : 'min'\n ](parseInt(decimal[2], 10) + difference, isDarker ? 0 : 255)}${alpha !== null ? `, ${alpha}` : ''})`\n : // Return hex\n [\n '#',\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[0], 10) + difference, isDarker ? 0 : 255).toString(16), 2),\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[1], 10) + difference, isDarker ? 0 : 255).toString(16), 2),\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[2], 10) + difference, isDarker ? 0 : 255).toString(16), 2)\n ].join('');\n}\n/**\n * 解决加减出现很多小数位的问题\n * @param n\n * @param fixed\n * @returns\n */\nexport function toFixed(n: number, fixed = 0) {\n return parseFloat(n.toFixed(fixed));\n}\n\nexport function validToString(v: any) {\n if (isString(v) || isNumber(v) || isBoolean(v)) {\n return v.toString();\n }\n return '';\n}\nexport function isMobile() {\n return navigator.userAgent.match(\n // eslint-disable-next-line max-len\n /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i\n );\n}\nexport function defaultOrderFn(v1: any, v2: any, order: SortOrder): -1 | 0 | 1 {\n if (order !== 'desc') {\n return v1 === v2 ? 0 : v1 > v2 ? 1 : -1;\n }\n return v1 === v2 ? 0 : v1 < v2 ? 1 : -1;\n}\n/**\n * 针对一个具有多级结构的对象,根据层级路径获取到具体值\n * @param obj\n * @param paths\n * @returns\n */\nexport function getValueByPath(obj: any, paths: string[]) {\n let res = obj;\n let prop;\n while ((prop = paths.shift())) {\n res = res[prop];\n if (!res) {\n break;\n }\n }\n return res;\n}\nexport function inBound(\n { x, y }: { x: number; y: number },\n { left, top, width, height }: { left: number; top: number; width: number; height: number }\n) {\n if (x > left && x < left + width && y > top && y < top + height) {\n return true;\n }\n return false;\n}\n\nexport const isArrEqual = (arr1: Array<any>, arr2: Array<any>) => {\n return arr1.length === arr2.length && arr1.every((ele, index) => Object.is(ele, arr2[index]));\n};\n/**\n * 根据string生成hash值\n * @param input\n * @returns\n */\nexport function hashCode(input: string) {\n const I64BIT_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'.split('');\n let hash = 5381;\n let i = input.length - 1;\n\n for (; i > -1; i--) {\n hash += (hash << 5) + input.charCodeAt(i);\n }\n\n let value = hash & 0x7fffffff;\n\n let retValue = '';\n do {\n retValue += I64BIT_TABLE[value & 0x3f];\n } while ((value >>= 6));\n return retValue;\n}\n\nexport function toBoolean(val: unknown): boolean {\n if (typeof val === 'string') {\n if (val === 'false') {\n return false;\n } else if (val === 'off') {\n return false;\n } else if (/^0+$/.exec(val)) {\n return false;\n }\n }\n return Boolean(val);\n}\n\nexport function isAllDigits(str: string) {\n const pattern = /^-?\\d+(\\.\\d+)?$/;\n return pattern.test(str);\n}\n// array deduplication\nexport function deduplication(array: number[]) {\n const result = [];\n for (let i = 0; i < array.length; i++) {\n if (result.indexOf(array[i]) === -1) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** 判断div中的文本是否有被选中 */\nexport function isDivSelected(div: HTMLDivElement) {\n const selection = window.getSelection();\n if (selection.rangeCount) {\n const range = selection.getRangeAt(0);\n return range.endOffset > range.startOffset && div.contains(range.commonAncestorContainer);\n }\n return false;\n}\n\nexport function traverseObject(obj: any, childrenProperty: string, callback: Function) {\n callback(obj);\n\n if (obj?.[childrenProperty] && Array.isArray(obj?.[childrenProperty])) {\n obj[childrenProperty].forEach((child: any) => traverseObject(child, childrenProperty, callback));\n }\n}\n\n/**\n * 当某个节点由展开变为折叠,需要计算出影响的节点数量 使用childrenLength来标记。同样需递归(不包含自身)\n * @param indexKey\n * @param hierarchyState\n * @param nodeData\n * @returns\n */\nexport function computeChildrenNodeLength(indexKey: number | number[], hierarchyState: HierarchyState, nodeData: any) {\n let size = 0;\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return size;\n }\n const children = nodeData.filteredChildren ? nodeData.filteredChildren : nodeData.children;\n if (children) {\n for (let i = 0; i < children.length; i++) {\n size += 1;\n const childIndex = Array.isArray(indexKey) ? indexKey.concat([i]) : [indexKey, i];\n\n size += computeChildrenNodeLength(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n children[i].hierarchyState,\n children[i]\n );\n }\n }\n return size;\n}\n"]}
|
|
@@ -480,9 +480,9 @@ export interface BaseTableAPI {
|
|
|
480
480
|
off: (id: EventListenerId) => void;
|
|
481
481
|
getBodyField: (col: number, row: number) => FieldDef | undefined;
|
|
482
482
|
getRecordByCell: (col: number, row: number) => MaybePromiseOrUndefined;
|
|
483
|
-
getTableIndexByRecordIndex: (recordIndex: number) => number;
|
|
483
|
+
getTableIndexByRecordIndex: (recordIndex: number | number[]) => number;
|
|
484
484
|
getTableIndexByField: (field: FieldDef) => number;
|
|
485
|
-
getCellAddrByFieldRecord: (field: FieldDef, recordIndex: number) => CellAddress;
|
|
485
|
+
getCellAddrByFieldRecord: (field: FieldDef, recordIndex: number | number[]) => CellAddress;
|
|
486
486
|
getRecordShowIndexByCell: (col: number, row: number) => number;
|
|
487
487
|
getRecordStartRowByRecordIndex: (index: number) => number;
|
|
488
488
|
getHeaderField: (col: number, row: number) => any | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ts-types/base-table.ts"],"names":[],"mappings":"","file":"base-table.js","sourcesContent":["import type { IBoundsLike, ITextSize } from '@visactor/vutils';\nimport type {\n RectProps,\n MaybePromiseOrUndefined,\n ICellHeaderPaths,\n CellInfo,\n CustomCellStyle,\n CustomCellStyleArrangement,\n IDimensionInfo\n} from './common';\nimport type {\n TableEventListener,\n TableEventHandlersEventArgumentMap,\n TableEventHandlersReturnMap,\n EventListenerId,\n MousePointerCellEvent\n} from './events';\nimport type { MenuListItem, DropDownMenuEventInfo, DropDownMenuHighlightInfo } from './menu';\nimport type { CellStyle } from './style-define';\nimport type { ColumnIconOption } from './icon';\nimport type {\n ColumnData,\n ColumnDefine,\n ColumnsDefine,\n HeaderData,\n IndicatorData,\n SeriesNumberColumnData\n} from './list-table/layout-map/api';\nexport type { HeaderData } from './list-table/layout-map/api';\nimport type { TableTheme } from '../themes/theme-define';\nimport type { ICustomRender } from './customElement';\nimport type { GroupByOption, LayoutObjectId } from './table-engine';\nimport type { Rect } from '../tools/Rect';\nimport type { Scenegraph } from '../scenegraph/scenegraph';\nimport type { StateManager } from '../state/state';\nimport type { EventManager } from '../event/event';\nimport type {\n CellAddress,\n CellRange,\n CellLocation,\n ColumnTypeOption,\n DataSourceAPI,\n FieldData,\n FieldDef,\n FieldFormat,\n FullExtendStyle,\n HeaderValues,\n HeightModeDef,\n HierarchyState,\n IPivotTableDataConfig,\n IPagination,\n ITableThemeDefine,\n SortState,\n TableKeyboardOptions,\n WidthModeDef,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n StickCell,\n CustomMergeCell,\n CustomMerge,\n IColumnDimension,\n IRowDimension,\n TableEventOptions,\n IPivotChartDataConfig,\n IListTableDataConfig,\n IRowSeriesNumber,\n ColumnSeriesNumber,\n ColumnStyleOption,\n WidthAdaptiveModeDef,\n HeightAdaptiveModeDef,\n ColumnInfo,\n RowInfo,\n CellAddressWithBound,\n Placement,\n CustomMergeCellFunc\n} from '.';\nimport type { TooltipOptions } from './tooltip';\nimport type { IWrapTextGraphicAttribute } from '../scenegraph/graphic/text';\nimport type { ICustomLayout } from './customLayout';\nimport type { CachedDataSource, DataSource } from '../data';\nimport type { MenuHandler } from '../components/menu/dom/MenuHandler';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport type { SimpleHeaderLayoutMap } from '../layout';\nimport type { TooltipHandler } from '../components/tooltip/TooltipHandler';\nimport type { BodyHelper } from '../body-helper/body-helper';\nimport type { HeaderHelper } from '../header-helper/header-helper';\nimport type { EventHandler } from '../event/EventHandler';\nimport type { NumberMap } from '../tools/NumberMap';\nimport type { FocusInput } from '../core/FouseInput';\nimport type { ITableLegendOption } from './component/legend';\nimport type { DataSet } from '@visactor/vdataset';\nimport type { Title } from '../components/title/title';\nimport type { ITitle } from './component/title';\nimport type { DiscreteTableLegend } from '../components/legend/discrete-legend/discrete-legend';\nimport type { ContinueTableLegend } from '../components/legend/continue-legend/continue-legend';\nimport type { NumberRangeMap } from '../layout/row-height-map';\nimport type { RowSeriesNumberHelper } from '../core/row-series-number-helper';\nimport type { ReactCustomLayout } from '../components/react/react-custom-layout';\nimport type { ISortedMapItem } from '../data/DataSource';\nimport type { IAnimationAppear, ITableAnimationOption } from './animation/appear';\nimport type { IEmptyTip } from './component/empty-tip';\nimport type { EmptyTip } from '../components/empty-tip/empty-tip';\nimport type { EditManager } from '../edit/edit-manager';\nimport type { TableAnimationManager } from '../core/animation';\nimport type { CustomCellStylePlugin } from '../plugins/custom-cell-style';\nimport type { IVTablePlugin } from '../plugins/interface';\nimport type { FederatedPointerEvent } from './../vrender';\n\nexport interface IBaseTableProtected {\n element: HTMLElement;\n // scrollable: Scrollable;\n handler: EventHandler;\n focusControl: FocusInput;\n canvas: HTMLCanvasElement;\n context: CanvasRenderingContext2D;\n rowCount: number;\n colCount: number;\n frozenColCount: number;\n unfreezeAllOnExceedsMaxWidth: boolean;\n allowFrozenColCount: number;\n\n frozenRowCount: number;\n rightFrozenColCount: number;\n bottomFrozenRowCount: number;\n defaultRowHeight: number | 'auto';\n /**表头默认行高 可以按逐行设置 如果没有就取defaultRowHeight */\n defaultHeaderRowHeight: (number | 'auto') | (number | 'auto')[];\n defaultColWidth: number;\n defaultHeaderColWidth: (number | 'auto') | (number | 'auto')[];\n // font?: string;\n // underlayBackgroundColor?: string;\n keyboardOptions?: TableKeyboardOptions;\n eventOptions?: TableEventOptions;\n rowSeriesNumber?: IRowSeriesNumber;\n /** 启动复选框级联 */\n enableCheckboxCascade?: boolean;\n /** 表头复选框是否级联整列状态 */\n enableHeaderCheckboxCascade?: boolean;\n columnSeriesNumber?: ColumnSeriesNumber[];\n // disableRowHeaderColumnResize?: boolean;\n\n columnResizeMode?: 'all' | 'none' | 'header' | 'body';\n canResizeColumn?: (col: number, row: number, table: BaseTableAPI) => boolean;\n\n rowResizeMode?: 'all' | 'none' | 'header' | 'body';\n\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 控制拖拽表头移动位置顺序开关 */\n dragHeaderMode?: 'all' | 'none' | 'column' | 'row';\n /** 拖拽表头移动位置 针对冻结部分的规则\n * \"disabled\"(禁止调整冻结列位置):不允许其他列的表头移入冻结列,也不允许冻结列移出,冻结列保持不变。\n * \"adjustFrozenCount\"(根据交互结果调整冻结数量):允许其他列的表头移入冻结列,及冻结列移出,并根据拖拽的动作调整冻结列的数量。当其他列的表头被拖拽进入冻结列位置时,冻结列数量增加;当其他列的表头被拖拽移出冻结列位置时,冻结列数量减少。\n * \"fixedFrozenCount\"(可调整冻结列,并维持冻结数量不变):允许自由拖拽其他列的表头移入或移出冻结列位置,同时保持冻结列的数量不变。\n */\n frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';\n cachedRecordsRowHeightMap: NumberMap<string | number>; //存储每一条记录对应行的行高,只有当设置为自动换行随内容撑开才会起作用\n // headerRowHeightsMap: NumberMap<number>; //目前是用来存储了表头各行的高度,从headerRowHeight计算而来,headerRowHeight可以设置为数组的形式\n _rowHeightsMap: NumberRangeMap; //存储数据条目每行高度\n _colWidthsMap: NumberMap<string | number>; //存储各列的宽度\n _colContentWidthsMap: NumberMap<string | number>; //存储各列的内容宽度\n _colWidthsLimit: {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n };\n calcWidthContext: {\n _: IBaseTableProtected;\n full: number;\n // em: number;\n };\n\n _rowRangeHeightsMap: Map<string, number>; //存储指定行范围的总高度\n _colRangeWidthsMap: Map<string, number>; //存储指定列范围的总宽度\n\n _widthResizedColMap: Set<number>; //记录下被手动调整过列宽的列号\n _heightResizedRowMap: Set<number>; //记录下被手动调整过行高的行号\n\n bodyHelper: BodyHelper;\n headerHelper: HeaderHelper;\n rowSeriesNumberHelper: RowSeriesNumberHelper;\n\n cellTextOverflows: { [at: string]: string };\n // headerDescriptions: { [at: string]: string };\n focusedTable: boolean;\n\n // scroll: {\n // left: number;\n // top: number;\n // };\n releaseList?: { release: () => void }[] | null;\n theme: TableTheme;\n transpose?: boolean; //是否转置\n // autoRowHeight?: boolean; //是否自动撑开高度 对于设置了autoWrapText的multilineText的列生效\n pixelRatio?: number;\n /** 下拉菜单的相关配置。消失时机:显示后点击菜单区域外自动消失*/\n menu: {\n /** 代替原来的option.menuType */\n renderMode?: 'canvas' | 'html';\n /** 内置下拉菜单的全局设置项 目前只针对基本表格有效 会对每个表头单元格开启默认的下拉菜单功能。代替原来的option.dropDownMenu*/\n defaultHeaderMenuItems?:\n | MenuListItem[]\n | ((args: { row: number; col: number; table: BaseTableAPI }) => MenuListItem[]);\n /** 右键菜单。代替原来的option.contextmenu */\n contextMenuItems?:\n | MenuListItem[]\n | ((field: FieldDef, row: number, col: number, table?: BaseTableAPI) => MenuListItem[]);\n /** 设置选中状态的菜单。代替原来的option.dropDownMenuHighlight */\n dropDownMenuHighlight?: DropDownMenuHighlightInfo[];\n /** 右键菜单是否只工作在单元格上。默认true只在单元格上显示右键菜单, 配置false在空白处也弹出右键菜单 */\n contextMenuWorkOnlyCell?: boolean;\n parentElement?: HTMLElement;\n };\n /** 提示弹框的相关配置。消失时机:显示后鼠标移动到指定区域外或者进入新的单元格后自动消失*/\n tooltip: {\n parentElement: HTMLElement;\n renderMode: 'html' | 'canvas';\n /** 代替原来hover:isShowTooltip配置 */\n isShowOverflowTextTooltip: boolean | ((col: number, row: number, table: BaseTableAPI) => boolean);\n /** 缩略文字提示框 延迟消失时间 */\n overflowTextTooltipDisappearDelay?: number;\n /** 弹框是否需要限定在表格区域内 */\n confine: boolean;\n position: Placement;\n };\n\n dataSourceEventIds?: EventListenerId[];\n // headerEvents?: EventListenerId[];\n layoutMap: SimpleHeaderLayoutMap | PivotHeaderLayoutMap;\n headerValues?: HeaderValues;\n tooltipHandler: TooltipHandler;\n\n // headerRowHeight: number[] | number;//移到了BaseTable\n sortState: SortState | SortState[];\n multipleSort?: boolean;\n\n dataSource: DataSource | CachedDataSource;\n records?: any;\n allowRangePaste: boolean;\n //重新思考逻辑:如果为false,行高按设置的rowHeight;如果设置为true,则按lineHeight及是否自动换行综合计算行高 2021.11.19 by:lff\n\n autoWrapText?: boolean;\n enableLineBreak?: boolean;\n\n menuHandler: MenuHandler;\n\n /**\n * 计算列宽时 指定最大列宽 可设置boolean或者具体的值 默认为450\n */\n limitMaxAutoWidth?: boolean | number;\n\n /**\n * 限制列宽最小值。\n */\n limitMinWidth?: number;\n\n limitMinHeight?: number;\n\n title?: Title;\n legends?: (DiscreteTableLegend | ContinueTableLegend)[];\n\n emptyTip?: EmptyTip;\n //是否开启图表异步渲染\n renderChartAsync?: boolean;\n // // 开启图表异步渲染 每批次渐进渲染图表个数\n // renderChartAsyncBatchCount?: number;\n\n stick: { changedCells: Map<string, StickCell> };\n\n customMergeCell?: CustomMergeCellFunc;\n /**\n * 'auto':和浏览器滚动行为一致 表格滚动到顶部/底部时 触发浏览器默认行为;\n * 设置为 'none' 时, 表格滚动到顶部/底部时, 不再触发父容器滚动\n * */\n overscrollBehavior?: 'auto' | 'none';\n\n modifiedViewBoxTransform?: boolean;\n // react component container\n bodyDomContainer?: HTMLElement;\n headerDomContainer?: HTMLElement;\n frozenBodyDomContainer?: HTMLElement;\n frozenHeaderDomContainer?: HTMLElement;\n rightFrozenBodyDomContainer?: HTMLElement;\n rightFrozenHeaderDomContainer?: HTMLElement;\n frozenBottomDomContainer?: HTMLElement;\n bottomDomContainer?: HTMLElement;\n rightFrozenBottomDomContainer?: HTMLElement;\n\n // 已使用一行的高度填充所有行\n useOneRowHeightFillAll?: boolean;\n\n // 启用树形结构数据内的merge配置\n enableTreeNodeMerge?: boolean;\n\n _oldRowCount?: number;\n _oldColCount?: number;\n\n columnWidthConfig?: any;\n rowHeightConfig?: any;\n}\nexport interface BaseTableConstructorOptions {\n // /** 指定表格的行数 */\n // rowCount?: number;\n\n // /** 指定表格的列数 */\n // colCount?: number;\n /**\n * 当前需要冻结的列数 基本表格生效\n */\n frozenColCount?: number;\n frozenRowCount?: number;\n rightFrozenColCount?: number;\n bottomFrozenRowCount?: number;\n /** 最大冻结宽度,固定值 or 百分比。默认为'80%' */\n maxFrozenWidth?: number | string;\n /** 超过最大冻结宽度后是否全部解冻,默认true */\n unfreezeAllOnExceedsMaxWidth?: boolean;\n\n // /** 待实现 TODO */\n // frozenRowCount?: number;\n /** 可冻结列数,表示前多少列会出现冻结操作按钮 基本表格生效 */\n allowFrozenColCount?: number;\n /**\n * 默认行高. 默认 40\n */\n defaultRowHeight?: number | 'auto';\n /** 列表头默认行高 可以按逐行设置 如果没有就取defaultRowHeight */\n defaultHeaderRowHeight?: (number | 'auto') | (number | 'auto')[];\n /**\n * 默认列宽. 默认 80\n */\n defaultColWidth?: number;\n /** 行表头默认列宽 可以按逐列设置 如果没有就取defaultColWidth */\n defaultHeaderColWidth?: (number | 'auto') | (number | 'auto')[];\n /** 快捷键功能设置 */\n keyboardOptions?: TableKeyboardOptions;\n excelOptions?: {\n fillHandle?: boolean | ((args: { selectRanges: CellRange[]; table: BaseTableAPI }) => boolean);\n };\n /** 事件触发相关设置 */\n eventOptions?: TableEventOptions;\n /**\n * Canvas container\n */\n container?: HTMLElement | null;\n\n /**\n * @deprecated\n * 请使用resize.columnResizeMode\n * 调整列宽 可操作范围。'all' | 'none' | 'header' | 'body'; 整列间隔线|禁止调整|只能在表头处间隔线|只能在body间隔线\n */\n columnResizeMode?: 'all' | 'none' | 'header' | 'body';\n /**\n * @deprecated\n * 请使用resize.rowResizeMode\n */\n rowResizeMode?: 'all' | 'none' | 'header' | 'body';\n\n /**\n * @deprecated\n * dragOrder.dragHeaderMode\n * 控制拖拽表头移动位置顺序开关\n */\n dragHeaderMode?: 'all' | 'none' | 'column' | 'row';\n\n /**\n * 是否显示固定列图钉 基本表格生效\n */\n showFrozenIcon?: boolean;\n\n padding?:\n | {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n }\n | number;\n /** hover交互配置 */\n hover?: {\n /** hover交互响应模式:十字交叉 整列 整行 或者单个单元格 */\n highlightMode?: 'cross' | 'column' | 'row' | 'cell';\n /** 不响应鼠标hover交互 */\n disableHover?: boolean;\n /** 单独设置表头不响应鼠标hover交互 */\n disableHeaderHover?: boolean;\n /** 单独设置坐标轴不响应鼠标hover交互 */\n disableAxisHover?: boolean;\n };\n /** 选择单元格交互配置 */\n select?: {\n /** 高亮范围模式:十字交叉 整列 整行 或者单个单元格。默认`cell` */\n highlightMode?: 'cross' | 'column' | 'row' | 'cell';\n /** 点击表头单元格效果\n * 'inline': 点击行表头则整行选中,选择列表头则整列选中;\n * 'cell': 仅仅选择当前点击的表头单元格;\n * 'body': 不选择表头,点击行表头则选择该行所有 body 单元格,点击列表头则选择该列所有 body 单元格。\n */\n headerSelectMode?: 'inline' | 'cell' | 'body';\n /** 点击表头corner单元格效果\n * 'inline': 点击corner选择列表头则整列选中;\n * 'cell': 仅仅选择当前点击的corner表头单元格;\n * 'body': 点击corner列表头则选择该列所有 body 单元格;\n * 'all': 点击corner选择整个图表。\n */\n cornerHeaderSelectMode?: 'inline' | 'cell' | 'body' | 'all';\n /** 不响应鼠标select交互 */\n disableSelect?: boolean | ((col: number, row: number, table: BaseTableAPI) => boolean);\n /** 单独设置表头不响应鼠标select交互 */\n disableHeaderSelect?: boolean;\n /** 点击空白区域是否取消选中 */\n blankAreaClickDeselect?: boolean;\n /** 点击外部区域是否取消选中 */\n outsideClickDeselect?: boolean; //\n /** 禁止拖拽框选 */\n disableDragSelect?: boolean;\n /** 是否在选择多行或多列时高亮范围 */\n highlightInRange?: boolean;\n /** 是否将选中的单元格自动滚动到视口内 默认为true */\n makeSelectCellVisible?: boolean;\n /** 右键点击单元格是否禁用选择单元格 */\n disableSelectOnContextMenu?: boolean;\n };\n /** 下拉菜单的相关配置。消失时机:显示后点击菜单区域外自动消失*/\n menu?: {\n /** 代替原来的option.menuType html目前实现较完整 先默认html渲染方式*/\n renderMode?: 'canvas' | 'html';\n /** 内置下拉菜单的全局设置项 目前只针对基本表格有效 会对每个表头单元格开启默认的下拉菜单功能。代替原来的option.dropDownMenu*/\n defaultHeaderMenuItems?:\n | MenuListItem[]\n | ((args: { row: number; col: number; table: BaseTableAPI }) => MenuListItem[]);\n /** 右键菜单。代替原来的option.contextmenu */\n contextMenuItems?:\n | MenuListItem[]\n | ((field: string, row: number, col: number, table?: BaseTableAPI) => MenuListItem[]);\n /** 设置选中状态的菜单。代替原来的option.dropDownMenuHighlight */\n dropDownMenuHighlight?: DropDownMenuHighlightInfo[];\n /** 右键菜单是否只工作在单元格上。默认true只在单元格上显示右键菜单, 配置false在空白处也弹出右键菜单 */\n contextMenuWorkOnlyCell?: boolean;\n parentElement?: HTMLElement;\n };\n /** tooltip相关配置 */\n tooltip?: {\n parentElement?: HTMLElement;\n /** html目前实现较完整 先默认html渲染方式 */\n renderMode?: 'html'; // 目前暂不支持canvas方案\n /** 是否显示缩略文字提示框。 代替原来hover:isShowTooltip配置 暂时需要将renderMode配置为html才能显示,canvas的还未开发*/\n isShowOverflowTextTooltip?: boolean | ((col: number, row: number, table: BaseTableAPI) => boolean);\n /** 缩略文字提示框 延迟消失时间 */\n overflowTextTooltipDisappearDelay?: number;\n /** 是否将 tooltip 框限制在画布区域内,默认开启。针对renderMode:\"html\"有效 */\n confine?: boolean;\n position?: Placement;\n };\n /**\n * Theme\n */\n theme?: ITableThemeDefine;\n /** 宽度模式 */\n widthMode?: 'standard' | 'adaptive' | 'autoWidth';\n /** 高度模式 */\n heightMode?: 'standard' | 'adaptive' | 'autoHeight';\n /** 当列宽度不能占满容器时,是否需要自动拉宽来填充容器的宽度。默认false */\n autoFillWidth?: boolean;\n /** 当行高度不能占满容器时,是否需要自动拉高来填充容器的高度。默认false */\n autoFillHeight?: boolean;\n /** 内容自适应模式,确保表格大小始终等于容器大小,保持原有的列宽/行高不变。默认false */\n containerFit?: {\n width?: boolean; // 是否自适应宽度,默认true\n height?: boolean; // 是否自适应高度,默认true\n };\n\n /** adaptive 模式下宽度的适应策略 **/\n widthAdaptiveMode?: WidthAdaptiveModeDef;\n /** adaptive 模式下高度的适应策略 **/\n heightAdaptiveMode?: HeightAdaptiveModeDef;\n /** 当配置adaptive模式时,默认true,即在计算每行行高的基础上去等比拉伸行高撑满容器宽度的。如果不需要计算行高用默认行高撑满的话请配置为false */\n autoHeightInAdaptiveMode?: boolean;\n\n // /** 行高是否根据内容来计算 */\n // autoRowHeight?: boolean;\n /** 设备的像素比 不配的话默认获取window.devicePixelRatio */\n pixelRatio?: number;\n /** 自定义渲染 函数形式*/\n customRender?: ICustomRender;\n /** 开启自动换行 默认false */\n autoWrapText?: boolean;\n /** 是否处理换行符 */\n enableLineBreak?: boolean;\n /** 单元格中可显示最大字符数 默认200 */\n maxCharactersNumber?: number; //\n // /** toolip最大字符数 */\n // maxTooltipCharactersNumber?: number;\n /** 最大可操作条目数 如copy操作可复制出最大数据条目数 */\n maxOperatableRecordCount?: number;\n /**\n * 计算列宽时 指定最大列宽 可设置boolean或者具体的值 默认为450。手动拖拽列宽的话不收这个限制\n */\n limitMaxAutoWidth?: boolean | number;\n /**\n * 限制列宽最小值。如设置为true 则拖拽改变列宽时限制列宽最小为10px,设置为false则不进行限制。默认为10px\n */\n limitMinWidth?: boolean | number;\n limitMinHeight?: boolean | number;\n\n // maximum number of data items maintained in table instance\n maintainedDataCount?: number;\n // maximum number of columns maintained in table instance\n maintainedColumnCount?: number;\n\n legends?: ITableLegendOption | ITableLegendOption[];\n title?: ITitle;\n emptyTip?: true | IEmptyTip;\n /** 是否开启图表异步渲染 */\n renderChartAsync?: boolean;\n /** 开启图表异步渲染 每批次渐进渲染图表个数 默认是5个 */\n renderChartAsyncBatchCount?: number;\n\n customMergeCell?: CustomMergeCell;\n\n // #region for nodejs\n mode?: 'node' | 'browser';\n modeParams?: any;\n canvasWidth?: number | 'auto';\n canvasHeight?: number | 'auto';\n maxCanvasWidth?: number;\n maxCanvasHeight?: number;\n /** 表格的x偏移量(会影响width), 内部适配的表格边框或者title等组件的占位不算在内 */\n contentOffsetX?: number;\n /** 表格的y偏移量(会影响height), 内部适配的表格边框或者title等组件的占位不算在内 */\n contentOffsetY?: number;\n\n // #endregion\n /**\n * 'auto':和浏览器滚动行为一致 表格滚动到顶部/底部时 触发浏览器默认行为;\n * 设置为 'none' 时, 表格滚动到顶部/底部时, 不再触发父容器滚动\n * */\n overscrollBehavior?: 'auto' | 'none';\n\n // resize response time\n resizeTime?: number;\n\n canvas?: HTMLCanvasElement;\n viewBox?: IBoundsLike;\n chartOption?: any;\n disableInteraction?: boolean;\n\n // 渲染时的 spec 改变\n specFormat?: (\n spec: any,\n chartInstance: any,\n chart: any\n ) => { needFormatSpec: boolean; spec?: any; updateSpec?: boolean };\n // chart 单元格 的 spec 生成时的转换\n specTransformInCell?: (spec: any, col: number, row: number) => any;\n\n beforeRender?: (stage: any) => void;\n afterRender?: (stage: any) => void;\n rowSeriesNumber?: IRowSeriesNumber;\n /** 启用复选框级联 */\n enableCheckboxCascade?: boolean;\n /** 表头复选框是否级联整列状态 */\n enableHeaderCheckboxCascade?: boolean;\n // columnSeriesNumber?: ColumnSeriesNumber[];\n customCellStyle?: CustomCellStyle[];\n customCellStyleArrangement?: CustomCellStyleArrangement[];\n\n columnWidthComputeMode?: 'normal' | 'only-header' | 'only-body';\n clearDOM?: boolean;\n customConfig?: {\n /** xTable对于没有配置autoWrapText并且有'\\n'的文本,在计算行高是会当做一行处理,但是在渲染时会解析'\\n';显示效果就是单元格高度为一行文本高度,只显示第一个'\\n'前的文字,后面显示'...';multilinesForXTable配置实现和该功能对齐的样式 */\n multilinesForXTable?: boolean;\n /** 这里可以配置为false 来走flatDataToObject的数据处理逻辑 而不走dataset的分析 */\n enableDataAnalysis?: boolean;\n /** 禁用行高列宽计算取整数逻辑 对齐xTable */\n _disableColumnAndRowSizeRound?: boolean;\n imageMargin?: number;\n // 是否创建react custom container\n createReactContainer?: boolean;\n // adaptive 模式下优先缩小迷你图\n shrinkSparklineFirst?: boolean;\n\n // 行列移动不更新表格\n notUpdateInColumnRowMove?: boolean;\n\n // 表格是否限制内容高度\n limitContentHeight?: boolean;\n\n // 图片资源请求时是否使用anonymous模式\n imageAnonymous?: boolean;\n\n // 滚动到边界是否继续触发滚动事件\n scrollEventAlwaysTrigger?: boolean;\n\n // 开启透视结构缓存\n enablePivotPathCache?: boolean;\n\n // 是否禁用内置图表激活\n disableBuildInChartActive?: boolean;\n\n /** 是否检测图表内具体元素的点击事件,用于 chart-render-helper.ts中 contains方法判断是否选中图表(图表助手需求),默认false */\n detectPickChartItem?: boolean;\n /** 强制计算所有行高,用于某些场景下,如vtable-gantt中,需要一次性计算所有行高 */\n forceComputeAllRowHeight?: boolean;\n\n /** 是否取消当前单元格选中状态的判断钩子,用在table-group文件的pointertap事件中,当点击空白区域时,取消选中状态 */\n cancelSelectCellHook?: (e: FederatedPointerEvent) => boolean;\n\n /** 当编辑器没有退出情况时,可继续选中其他单元格,比如在vtable-sheet中,当编辑器没有退出情况时,可继续选中其他单元格 */\n selectCellWhenCellEditorNotExists?: boolean;\n }; // 部分特殊配置,兼容xTable等作用\n\n animationAppear?: boolean | IAnimationAppear;\n\n renderOption?: any;\n\n formatCopyValue?: (value: string) => string;\n customComputeRowHeight?: (computeArgs: { row: number; table: BaseTableAPI }) => number | 'auto' | undefined;\n /** 当表格出现抖动情况,请排查是否上层dom容器的宽高是小数引起的。如果不能保证是整数,请配置这个配置项为true */\n tableSizeAntiJitter?: boolean;\n\n /**\n * @deprecated 请使用resize.disableDblclickAutoResizeColWidth\n */\n disableDblclickAutoResizeColWidth?: boolean;\n\n /** resize交互配置 **/\n resize?: {\n /**\n * 调整列宽 可操作范围。'all' | 'none' | 'header' | 'body'; 整列间隔线|禁止调整|只能在表头处间隔线|只能在body间隔线\n */\n columnResizeMode?: 'all' | 'none' | 'header' | 'body';\n canResizeColumn?: (col: number, row: number, table: BaseTableAPI) => boolean;\n rowResizeMode?: 'all' | 'none' | 'header' | 'body';\n /** 是否禁用双击列边框自动调整列宽 **/\n disableDblclickAutoResizeColWidth?: boolean;\n };\n dragOrder?: {\n /** 控制拖拽表头移动位置顺序开关 */\n dragHeaderMode?: 'all' | 'none' | 'column' | 'row';\n /** 拖拽移动位置结束时进行验证 */\n validateDragOrderOnEnd?: (source: CellAddress, target: CellAddress) => boolean;\n };\n /** 插件配置 */\n plugins?: IVTablePlugin[];\n /** 默认的鼠标样式 */\n defaultCursor?: string;\n}\nexport interface BaseTableAPI {\n id: string;\n /** 数据总条目数 */\n recordsCount: number;\n /** 表格的行数 */\n rowCount: number;\n /** 表格的列数 */\n colCount: number;\n /** 表格除去外层frame后的宽度 */\n tableNoFrameWidth: number;\n /** 表格除去外层frame后的高度 */\n tableNoFrameHeight: number;\n /** 表格的冻结行数 包括表头在内 */\n frozenRowCount: number;\n /** 表格的冻结列数 包括表头在内 */\n frozenColCount: number;\n\n bottomFrozenRowCount: number;\n rightFrozenColCount: number;\n /** 当前表格默认表头行高 */\n defaultHeaderRowHeight: (number | 'auto') | (number | 'auto')[];\n /** 当前表格默认行高 */\n defaultRowHeight: number;\n /** 当前表格默认列宽 */\n defaultColWidth: number;\n /** 当前表格默认表头列宽 */\n defaultHeaderColWidth: (number | 'auto') | (number | 'auto')[];\n /** 当前表格快捷键设置 */\n keyboardOptions: TableKeyboardOptions | null;\n /** 当前表格事件相关设置 */\n eventOptions: TableEventOptions | null;\n /**\n * 是否显示图钉\n */\n showFrozenIcon: boolean;\n readonly canvas: HTMLCanvasElement;\n /** 表格可视区域的行数 */\n readonly visibleRowCount: number;\n /** 表格可视区域的列数 */\n readonly visibleColCount: number;\n /** 表格滚动值left */\n scrollLeft: number;\n /** 表格滚动值top */\n scrollTop: number;\n /** 用户设置的options 不要修改这个这个 */\n options: BaseTableConstructorOptions;\n /** 设置的全局下拉菜单列表项配置 */\n globalDropDownMenu?: MenuListItem[] | ((args: { row: number; col: number; table: BaseTableAPI }) => MenuListItem[]);\n /** 设置的全局自定义渲染函数 */\n customRender?: ICustomRender;\n\n /** 表格数据管理对象 */\n dataSource: DataSourceAPI;\n /** 设置的表格主题 */\n theme: TableTheme;\n /** 可允许设置冻结的最大列数 */\n allowFrozenColCount: number;\n\n /** 存储内部用到的属性 变量等 */\n internalProps: IBaseTableProtected;\n /** 分页信息 */\n pagination?: IPagination;\n\n /** 表格偏移像素值 水平方向 */\n tableX: number;\n /** 表格偏移像素值 垂直方向 */\n tableY: number;\n /** 表格宽度模式 */\n widthMode: WidthModeDef;\n /** 表格宽度模式 */\n heightMode: HeightModeDef;\n /** 当列宽度不能占满容器时,是否需要自动拉宽来填充容器的宽度。默认false */\n autoFillWidth: boolean;\n /** 当行高度不能占满容器时,是否需要自动拉高来填充容器的高度。默认false */\n autoFillHeight?: boolean;\n /** 内容自适应模式,确保表格大小始终等于容器大小,保持原有的列宽/行高不变。默认false */\n containerFit?: { width: boolean; height: boolean };\n\n /** adaptive 模式下宽度的适应策略 **/\n widthAdaptiveMode: WidthAdaptiveModeDef;\n /** adaptive 模式下高度的适应策略 **/\n heightAdaptiveMode: HeightAdaptiveModeDef;\n\n isReleased: boolean;\n\n // rowHeightsMap: NumberMap<number>;\n rowHeightsMap: NumberRangeMap;\n colWidthsMap: NumberMap<string | number>;\n hasListeners: (type: string) => boolean;\n on: <TYPE extends keyof TableEventHandlersEventArgumentMap>(\n type: TYPE,\n listener: TableEventListener<TYPE> //(event: TableEventHandlersEventArgumentMap[TYPE]) => TableEventHandlersReturnMap[TYPE]\n ) => EventListenerId;\n // &(<T extends keyof TableEventHandlersEventArgumentMap>(type: string, listener: AnyListener<T>) => EventListenerId);\n\n _vDataSet?: DataSet;\n /** 场景树对象 */\n scenegraph: Scenegraph;\n /** 状态管理模块 */\n stateManager: StateManager;\n /** 事件管理模块 */\n eventManager: EventManager;\n /** 动画管理模块 */\n animationManager: TableAnimationManager;\n\n editorManager: EditManager;\n /** 行表头的层数 */\n rowHeaderLevelCount: number;\n /** 列表头的层数 */\n columnHeaderLevelCount: number;\n\n canvasWidth?: number;\n canvasHeight?: number;\n\n columnWidthComputeMode?: 'normal' | 'only-header' | 'only-body';\n\n _rowRangeHeightsMap: Map<string, number>;\n _colRangeWidthsMap: Map<string, number>;\n canvasSizeSeted?: boolean;\n\n pixelRatio: number;\n rotateDegree?: number;\n /** 获取表格绘制的范围 不包括frame的宽度 */\n getDrawRange: () => Rect;\n /** 将鼠标坐标值 转换成表格坐标系中的坐标位置 */\n _getMouseAbstractPoint: (evt: TouchEvent | MouseEvent | undefined) => { x: number; y: number; inTable: boolean };\n getElement: () => HTMLElement;\n getContainer: () => HTMLElement;\n\n setFrozenColCount: (count: number) => void;\n _setFrozenColCount: (count: number) => void;\n _updateSize: () => void;\n\n render: () => void;\n throttleInvalidate: () => void;\n getRowHeight: (row: number) => number;\n getDefaultRowHeight: (row: number) => number | 'auto';\n getDefaultColumnWidth: (col: number) => number | 'auto';\n _setRowHeight: (row: number, height: number, clearCache?: boolean) => void;\n setRowHeight: (row: number, height: number) => void;\n getColWidth: (col: number) => number;\n getColWidthDefined: (col: number) => string | number;\n // setColWidthDefined: (col: number, width: number) => void;\n getColWidthDefinedNumber: (col: number) => number;\n // getColWidthDefine: (col: number) => string | number;\n _setColWidth: (col: number, width: number | string, clearCache?: boolean, skipCheckFrozen?: boolean) => void;\n setColWidth: (col: number, width: number) => void;\n _getColContentWidth: (col: number) => number;\n _setColContentWidth: (col: number, width: number | string, clearCache?: boolean) => void;\n getMaxColWidth: (col: number) => number;\n setMaxColWidth: (col: number, maxwidth: string | number) => void;\n getMinColWidth: (col: number) => number;\n setMinColWidth: (col: number, minwidth: string | number) => void;\n getCellRect: (col: number, row: number) => Rect;\n getCellRelativeRect: (col: number, row: number) => Rect;\n getCellsRect: (startCol: number, startRow: number, endCol: number, endRow: number) => Rect;\n getCellRangeRect: (cellRange: CellRange | CellAddress) => Rect;\n getCellRangeRelativeRect: (cellRange: CellRange | CellAddress) => Rect;\n getVisibleCellRangeRelativeRect: (cellRange: CellRange | CellAddress) => Rect;\n isFrozenCell: (col: number, row: number) => { row: boolean; col: boolean } | null;\n getRowAt: (absoluteY: number) => { top: number; row: number; bottom: number };\n getColAt: (absoluteX: number) => { left: number; col: number; right: number };\n getCellAt: (absoluteX: number, absoluteY: number) => CellAddressWithBound;\n getCellAtRelativePosition: (absoluteX: number, absoluteY: number) => CellAddressWithBound;\n getColAtRelativePosition: (absoluteX: number) => number;\n getRowAtRelativePosition: (absoluteY: number) => number;\n _makeVisibleCell: (col: number, row: number) => void;\n // setFocusCursor(col: number, row: number): void;\n // focusCell(col: number, row: number): void;\n getCellOverflowText: (col: number, row: number) => string | null;\n getColsWidth: (startCol: number, endCol: number) => number;\n getColsWidths: () => number[];\n getRowsHeight: (startRow: number, endRow: number) => number;\n _getRangeSizeForContainerFit: (start: number, end: number, totalSize: number, type: 'col' | 'row') => number;\n\n release: () => void;\n addReleaseObj: (releaseObj: { release: () => void }) => void;\n _getCellStyle: (col: number, row: number) => FullExtendStyle;\n clearCellStyleCache: () => void;\n\n getFrozenRowsHeight: () => number;\n getFrozenColsWidth: () => number;\n getBottomFrozenRowsHeight: () => number;\n getRightFrozenColsWidth: () => number;\n selectCell: (\n col: number,\n row: number,\n isShift?: boolean,\n isCtrl?: boolean,\n makeSelectCellVisible?: boolean,\n skipBodyMerge?: boolean\n ) => void;\n clearSelected: () => void;\n selectCells: (cellRanges: CellRange[]) => void;\n getAllRowsHeight: () => number;\n getAllColsWidth: () => number;\n\n off: (id: EventListenerId) => void;\n getBodyField: (col: number, row: number) => FieldDef | undefined;\n /**\n * 根据单元格获取对应的源数据\n * @param col\n * @param row\n * @returns\n */\n getRecordByCell: (col: number, row: number) => MaybePromiseOrUndefined;\n /**\n * 根据数据源的index 获取显示到表格中的index 行号或者列号(与转置相关)。注:ListTable特有接口\n * @param recordIndex\n */\n getTableIndexByRecordIndex: (recordIndex: number) => number;\n /**\n * 根据数据源的field 获取显示到表格中的index 行号或者列号(与转置相关)。注:ListTable特有接口\n * @param recordIndex\n */\n getTableIndexByField: (field: FieldDef) => number;\n /**\n * 根据数据源中的index和field获取单元格行列号。注:ListTable特有接口\n * @param field\n * @param recordIndex\n * @returns\n */\n getCellAddrByFieldRecord: (field: FieldDef, recordIndex: number) => CellAddress;\n getRecordShowIndexByCell: (col: number, row: number) => number;\n getRecordStartRowByRecordIndex: (index: number) => number;\n\n getHeaderField: (col: number, row: number) => any | undefined;\n\n _getHeaderCellBySortState: (sortState: SortState) => CellAddress | undefined;\n getHeaderDefine: (col: number, row: number) => ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber;\n _getHeaderLayoutMap: (col: number, row: number) => HeaderData | SeriesNumberColumnData;\n getContext: () => CanvasRenderingContext2D;\n getCellRange: (col: number, row: number) => CellRange;\n _resetFrozenColCount: () => void;\n isCellRangeEqual: (col: number, row: number, targetCol: number, targetRow: number) => boolean;\n _getLayoutCellId: (col: number, row: number) => LayoutObjectId;\n _getBodyLayoutMap: (col: number, row: number) => ColumnData | IndicatorData | SeriesNumberColumnData;\n getBodyColumnDefine: (col: number, row: number) => ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber;\n getBodyColumnType: (col: number, row: number) => ColumnTypeOption;\n getCellType: (col: number, row: number) => ColumnTypeOption;\n fireListeners: <TYPE extends keyof TableEventHandlersEventArgumentMap>(\n type: TYPE,\n event: TableEventHandlersEventArgumentMap[TYPE]\n ) => TableEventHandlersReturnMap[TYPE][];\n\n //更新分页\n updatePagination: (cof: IPagination) => void;\n //hover\n\n getHeaderDescription: (col: number, row: number) => string | undefined;\n /** 获取单元格展示值 */\n getCellValue: (col: number, row: number, skipCustomMerge?: boolean) => string | null;\n /** 获取单元格展示数据的format前的值 */\n getCellOriginValue: (col: number, row: number) => any;\n /** 获取单元格展示数据源最原始值 */\n getCellRawValue: (col: number, row: number) => FieldData;\n /** 获取单元格展示数据的format前的record源数据 */\n getCellOriginRecord: (col: number, row: number) => MaybePromiseOrUndefined;\n /** 获取单元格展示源数据 */\n getCellRawRecord: (col: number, row: number) => MaybePromiseOrUndefined;\n\n _dropDownMenuIsHighlight: (col: number, row: number, index: number) => boolean;\n // bindEvents(): void;\n refreshRowColCount: () => void;\n // getFieldData: (field: FieldDef | FieldFormat | undefined, col: number, row: number) => FieldData;\n _hasField: (field: FieldDef, col: number, row: number) => boolean;\n getCellHeaderPaths: (col: number, row: number) => ICellHeaderPaths;\n getCellLocation: (col: number, row: number) => CellLocation;\n // isHitIcon(col: number, row: number, x: number, y: number, iconType: IconFuncTypeEnum): boolean;\n getCellIcons: (col: number, row: number) => ColumnIconOption[];\n\n getMenuInfo: (col: number, row: number, type: string) => DropDownMenuEventInfo;\n /**\n * 获取某个单元格的样式 共业务方调用\n * @param col\n * @param row\n */\n getCellStyle: (col: number, row: number) => CellStyle; // 计算后style\n\n getHierarchyState: (col: number, row: number) => HierarchyState | null;\n\n _canDragHeaderPosition: (col: number, row: number) => boolean;\n\n isHeader: (col: number, row: number) => boolean;\n\n isColumnHeader: (col: number, row: number) => boolean;\n\n isCornerHeader: (col: number, row: number) => boolean;\n\n isRowHeader: (col: number, row: number) => boolean;\n\n getCopyValue: (getCellValueFunction?: (col: number, row: number) => string | number) => string;\n\n getSelectedCellInfos: () => CellInfo[][];\n getSelectedCellRanges: () => CellRange[];\n getCellInfo: (col: number, row: number) => Omit<MousePointerCellEvent, 'target'>;\n\n showTooltip: (col: number, row: number, tooltipOptions?: TooltipOptions) => void;\n\n measureText: (\n text: string,\n font: { fontSize: number; fontWeight?: string | number; fontFamily: string }\n ) => ITextSize;\n\n _canResizeColumn: (col: number, row: number) => boolean;\n _canResizeRow: (col: number, row: number) => boolean;\n\n getCustomRender: (col: number, row: number) => ICustomRender;\n getCustomLayout: (col: number, row: number) => ICustomLayout;\n isListTable: () => boolean;\n isPivotTable: (() => boolean) & (() => boolean);\n isPivotChart: (() => boolean) & (() => boolean);\n _clearColRangeWidthsMap: (col?: number) => void;\n _clearRowRangeHeightsMap: (row?: number) => void;\n clearRowHeightCache: () => void;\n clearColWidthCache: () => void;\n toggleHierarchyState: (col: number, row: number) => void;\n\n resize: () => void;\n /** 直接设置canvas的宽高 不根据容器宽高来决定表格的尺寸 */\n setCanvasSize: (width: number, height: number) => void;\n getMergeCellRect: (col: number, row: number) => Rect;\n\n getTargetColAt: (absoluteX: number) => ColumnInfo | null;\n getTargetRowAt: (absoluteY: number) => RowInfo | null;\n getTargetColAtConsiderRightFrozen: (absoluteX: number, isConsider: boolean) => ColumnInfo | null;\n getTargetRowAtConsiderBottomFrozen: (absoluteY: number, isConsider: boolean) => RowInfo | null;\n renderWithRecreateCells: () => void;\n //#endregion tableAPI\n\n _adjustColWidth: (col: number, orgWidth: number) => number;\n _colWidthDefineToPxWidth: (width: string | number) => number;\n isFrozenColumn: (col: number, row?: number) => boolean;\n isLeftFrozenColumn: (col: number, row?: number) => boolean;\n isRightFrozenColumn: (col: number, row?: number) => boolean;\n isFrozenRow: (col: number, row?: number) => boolean;\n isTopFrozenRow: (col: number, row?: number) => boolean;\n isBottomFrozenRow: (col: number, row?: number) => boolean;\n\n hasCustomMerge: () => boolean;\n getCustomMerge: (col: number, row: number) => undefined | (Omit<CustomMerge, 'style'> & { style?: FullExtendStyle });\n /** 获取表格body部分的显示单元格范围 */\n getBodyVisibleCellRange: () => { rowStart: number; colStart: number; rowEnd: number; colEnd: number };\n /** 获取表格body部分的显示列号范围 */\n getBodyVisibleColRange: (start_deltaX?: number, end_deltaX?: number) => { colStart: number; colEnd: number };\n /** 获取表格body部分的显示行号范围 */\n getBodyVisibleRowRange: (start_deltaY?: number, end_deltaY?: number) => { rowStart: number; rowEnd: number };\n\n _hasCustomRenderOrLayout: () => boolean;\n /** 根据表格单元格的行列号 获取在body部分的列索引及行索引 */\n getBodyIndexByTableIndex: (col: number, row: number) => CellAddress;\n /** 根据body部分的列索引及行索引,获取单元格的行列号 */\n getTableIndexByBodyIndex: (col: number, row: number) => CellAddress;\n /**\n * 滚动到具体某个单元格位置\n * @param cellAddr 要滚动到的单元格位置\n */\n scrollToCell: (cellAddr: { col?: number; row?: number }, animationOption?: ITableAnimationOption | boolean) => void;\n scrollToRow: (row: number, animationOption?: ITableAnimationOption | boolean) => void;\n scrollToCol: (col: number, animationOption?: ITableAnimationOption | boolean) => void;\n registerCustomCellStyle: (customStyleId: string, customStyle: ColumnStyleOption | undefined | null) => void;\n arrangeCustomCellStyle: (cellPos: { col?: number; row?: number; range?: CellRange }, customStyleId: string) => void;\n /** 是否有列是自动计算列宽 */\n checkHasColumnAutoWidth: () => boolean;\n _moveHeaderPosition: (\n source: CellAddress,\n target: CellAddress\n ) => {\n sourceIndex: number;\n targetIndex: any;\n sourceSize: any;\n targetSize: any;\n moveType: 'column' | 'row';\n };\n changeRecordOrder: (source: number, target: number) => void;\n isSeriesNumber: (col: number, row?: number) => boolean;\n isHasSeriesNumber: () => boolean;\n leftRowSeriesNumberCount: number;\n isAutoRowHeight: (row?: number) => boolean;\n\n reactCustomLayout?: ReactCustomLayout;\n checkReactCustomLayout: (removeAllContainer: () => void) => void;\n setSortedIndexMap: (field: FieldDef, filedMap: ISortedMapItem) => void;\n\n exportImg: () => string;\n exportCellImg: (\n col: number,\n row: number,\n options?: { disableBackground?: boolean; disableBorder?: boolean }\n ) => string;\n exportCellRangeImg: (cellRange: CellRange) => string;\n exportCanvas: () => HTMLCanvasElement;\n setPixelRatio: (pixelRatio: number) => void;\n\n bodyDomContainer?: HTMLElement;\n headerDomContainer?: HTMLElement;\n frozenBodyDomContainer?: HTMLElement;\n frozenHeaderDomContainer?: HTMLElement;\n rightFrozenBodyDomContainer?: HTMLElement;\n rightFrozenHeaderDomContainer?: HTMLElement;\n frozenBottomDomContainer?: HTMLElement;\n bottomDomContainer?: HTMLElement;\n rightFrozenBottomDomContainer?: HTMLElement;\n\n showMoverLine: (col: number, row: number) => void;\n hideMoverLine: (col: number, row: number) => void;\n /** 关闭表格的滚动 */\n disableScroll: () => void;\n /** 开启表格的滚动 */\n enableScroll: () => void;\n\n customCellStylePlugin?: CustomCellStylePlugin;\n headerStyleCache: Map<string, any>;\n bodyBottomStyleCache: Map<string, any>;\n bodyStyleCache: Map<string, any>;\n bodyMergeTitleCache: Map<string, any>;\n isSeriesNumberInBody: (col: number, row: number) => boolean;\n getGroupTitleLevel: (col: number, row: number) => number | undefined;\n _getMaxFrozenWidth: () => number;\n _getComputedFrozenColCount: (frozenColCount: number) => number;\n isColumnSelected: (col: number) => boolean;\n isRowSelected: (row: number) => boolean;\n}\nexport interface ListTableProtected extends IBaseTableProtected {\n /** 表格数据 */\n records: any[] | null;\n dataConfig?: IListTableDataConfig;\n columns: ColumnsDefine;\n layoutMap: SimpleHeaderLayoutMap;\n columnWidthConfig?: {\n key: string | number;\n width: number;\n }[];\n rowHeightConfig?: {\n key: number;\n height: number;\n }[];\n\n groupBy: GroupByOption;\n groupTitleFieldFormat?: (record: any, col?: number, row?: number, table?: BaseTableAPI) => string;\n groupTitleCustomLayout?: ICustomLayout;\n enableTreeStickCell?: boolean;\n groupTitleCheckbox?: boolean;\n}\n\nexport interface PivotTableProtected extends IBaseTableProtected {\n /** 表格数据 */\n records: any[] | undefined;\n recordsIsTwoDimensionalArray?: boolean;\n layoutMap: PivotHeaderLayoutMap;\n dataConfig?: IPivotTableDataConfig;\n\n /** 列表头树型结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头树型结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IIndicator | string)[]; // (string | IIndicator)[];\n\n columnWidthConfig?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n columnWidthConfigForRowHeader?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n}\nexport interface PivotChartProtected extends IBaseTableProtected {\n /** 表格数据 */\n records: any[] | Record<string, any[]>;\n layoutMap: PivotHeaderLayoutMap;\n dataConfig?: IPivotChartDataConfig;\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IIndicator | string)[]; // (string | IIndicator)[];\n columnWidthConfig?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n columnWidthConfigForRowHeader?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ts-types/base-table.ts"],"names":[],"mappings":"","file":"base-table.js","sourcesContent":["import type { IBoundsLike, ITextSize } from '@visactor/vutils';\nimport type {\n RectProps,\n MaybePromiseOrUndefined,\n ICellHeaderPaths,\n CellInfo,\n CustomCellStyle,\n CustomCellStyleArrangement,\n IDimensionInfo\n} from './common';\nimport type {\n TableEventListener,\n TableEventHandlersEventArgumentMap,\n TableEventHandlersReturnMap,\n EventListenerId,\n MousePointerCellEvent\n} from './events';\nimport type { MenuListItem, DropDownMenuEventInfo, DropDownMenuHighlightInfo } from './menu';\nimport type { CellStyle } from './style-define';\nimport type { ColumnIconOption } from './icon';\nimport type {\n ColumnData,\n ColumnDefine,\n ColumnsDefine,\n HeaderData,\n IndicatorData,\n SeriesNumberColumnData\n} from './list-table/layout-map/api';\nexport type { HeaderData } from './list-table/layout-map/api';\nimport type { TableTheme } from '../themes/theme-define';\nimport type { ICustomRender } from './customElement';\nimport type { GroupByOption, LayoutObjectId } from './table-engine';\nimport type { Rect } from '../tools/Rect';\nimport type { Scenegraph } from '../scenegraph/scenegraph';\nimport type { StateManager } from '../state/state';\nimport type { EventManager } from '../event/event';\nimport type {\n CellAddress,\n CellRange,\n CellLocation,\n ColumnTypeOption,\n DataSourceAPI,\n FieldData,\n FieldDef,\n FieldFormat,\n FullExtendStyle,\n HeaderValues,\n HeightModeDef,\n HierarchyState,\n IPivotTableDataConfig,\n IPagination,\n ITableThemeDefine,\n SortState,\n TableKeyboardOptions,\n WidthModeDef,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n StickCell,\n CustomMergeCell,\n CustomMerge,\n IColumnDimension,\n IRowDimension,\n TableEventOptions,\n IPivotChartDataConfig,\n IListTableDataConfig,\n IRowSeriesNumber,\n ColumnSeriesNumber,\n ColumnStyleOption,\n WidthAdaptiveModeDef,\n HeightAdaptiveModeDef,\n ColumnInfo,\n RowInfo,\n CellAddressWithBound,\n Placement,\n CustomMergeCellFunc\n} from '.';\nimport type { TooltipOptions } from './tooltip';\nimport type { IWrapTextGraphicAttribute } from '../scenegraph/graphic/text';\nimport type { ICustomLayout } from './customLayout';\nimport type { CachedDataSource, DataSource } from '../data';\nimport type { MenuHandler } from '../components/menu/dom/MenuHandler';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport type { SimpleHeaderLayoutMap } from '../layout';\nimport type { TooltipHandler } from '../components/tooltip/TooltipHandler';\nimport type { BodyHelper } from '../body-helper/body-helper';\nimport type { HeaderHelper } from '../header-helper/header-helper';\nimport type { EventHandler } from '../event/EventHandler';\nimport type { NumberMap } from '../tools/NumberMap';\nimport type { FocusInput } from '../core/FouseInput';\nimport type { ITableLegendOption } from './component/legend';\nimport type { DataSet } from '@visactor/vdataset';\nimport type { Title } from '../components/title/title';\nimport type { ITitle } from './component/title';\nimport type { DiscreteTableLegend } from '../components/legend/discrete-legend/discrete-legend';\nimport type { ContinueTableLegend } from '../components/legend/continue-legend/continue-legend';\nimport type { NumberRangeMap } from '../layout/row-height-map';\nimport type { RowSeriesNumberHelper } from '../core/row-series-number-helper';\nimport type { ReactCustomLayout } from '../components/react/react-custom-layout';\nimport type { ISortedMapItem } from '../data/DataSource';\nimport type { IAnimationAppear, ITableAnimationOption } from './animation/appear';\nimport type { IEmptyTip } from './component/empty-tip';\nimport type { EmptyTip } from '../components/empty-tip/empty-tip';\nimport type { EditManager } from '../edit/edit-manager';\nimport type { TableAnimationManager } from '../core/animation';\nimport type { CustomCellStylePlugin } from '../plugins/custom-cell-style';\nimport type { IVTablePlugin } from '../plugins/interface';\nimport type { FederatedPointerEvent } from './../vrender';\n\nexport interface IBaseTableProtected {\n element: HTMLElement;\n // scrollable: Scrollable;\n handler: EventHandler;\n focusControl: FocusInput;\n canvas: HTMLCanvasElement;\n context: CanvasRenderingContext2D;\n rowCount: number;\n colCount: number;\n frozenColCount: number;\n unfreezeAllOnExceedsMaxWidth: boolean;\n allowFrozenColCount: number;\n\n frozenRowCount: number;\n rightFrozenColCount: number;\n bottomFrozenRowCount: number;\n defaultRowHeight: number | 'auto';\n /**表头默认行高 可以按逐行设置 如果没有就取defaultRowHeight */\n defaultHeaderRowHeight: (number | 'auto') | (number | 'auto')[];\n defaultColWidth: number;\n defaultHeaderColWidth: (number | 'auto') | (number | 'auto')[];\n // font?: string;\n // underlayBackgroundColor?: string;\n keyboardOptions?: TableKeyboardOptions;\n eventOptions?: TableEventOptions;\n rowSeriesNumber?: IRowSeriesNumber;\n /** 启动复选框级联 */\n enableCheckboxCascade?: boolean;\n /** 表头复选框是否级联整列状态 */\n enableHeaderCheckboxCascade?: boolean;\n columnSeriesNumber?: ColumnSeriesNumber[];\n // disableRowHeaderColumnResize?: boolean;\n\n columnResizeMode?: 'all' | 'none' | 'header' | 'body';\n canResizeColumn?: (col: number, row: number, table: BaseTableAPI) => boolean;\n\n rowResizeMode?: 'all' | 'none' | 'header' | 'body';\n\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 控制拖拽表头移动位置顺序开关 */\n dragHeaderMode?: 'all' | 'none' | 'column' | 'row';\n /** 拖拽表头移动位置 针对冻结部分的规则\n * \"disabled\"(禁止调整冻结列位置):不允许其他列的表头移入冻结列,也不允许冻结列移出,冻结列保持不变。\n * \"adjustFrozenCount\"(根据交互结果调整冻结数量):允许其他列的表头移入冻结列,及冻结列移出,并根据拖拽的动作调整冻结列的数量。当其他列的表头被拖拽进入冻结列位置时,冻结列数量增加;当其他列的表头被拖拽移出冻结列位置时,冻结列数量减少。\n * \"fixedFrozenCount\"(可调整冻结列,并维持冻结数量不变):允许自由拖拽其他列的表头移入或移出冻结列位置,同时保持冻结列的数量不变。\n */\n frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';\n cachedRecordsRowHeightMap: NumberMap<string | number>; //存储每一条记录对应行的行高,只有当设置为自动换行随内容撑开才会起作用\n // headerRowHeightsMap: NumberMap<number>; //目前是用来存储了表头各行的高度,从headerRowHeight计算而来,headerRowHeight可以设置为数组的形式\n _rowHeightsMap: NumberRangeMap; //存储数据条目每行高度\n _colWidthsMap: NumberMap<string | number>; //存储各列的宽度\n _colContentWidthsMap: NumberMap<string | number>; //存储各列的内容宽度\n _colWidthsLimit: {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n };\n calcWidthContext: {\n _: IBaseTableProtected;\n full: number;\n // em: number;\n };\n\n _rowRangeHeightsMap: Map<string, number>; //存储指定行范围的总高度\n _colRangeWidthsMap: Map<string, number>; //存储指定列范围的总宽度\n\n _widthResizedColMap: Set<number>; //记录下被手动调整过列宽的列号\n _heightResizedRowMap: Set<number>; //记录下被手动调整过行高的行号\n\n bodyHelper: BodyHelper;\n headerHelper: HeaderHelper;\n rowSeriesNumberHelper: RowSeriesNumberHelper;\n\n cellTextOverflows: { [at: string]: string };\n // headerDescriptions: { [at: string]: string };\n focusedTable: boolean;\n\n // scroll: {\n // left: number;\n // top: number;\n // };\n releaseList?: { release: () => void }[] | null;\n theme: TableTheme;\n transpose?: boolean; //是否转置\n // autoRowHeight?: boolean; //是否自动撑开高度 对于设置了autoWrapText的multilineText的列生效\n pixelRatio?: number;\n /** 下拉菜单的相关配置。消失时机:显示后点击菜单区域外自动消失*/\n menu: {\n /** 代替原来的option.menuType */\n renderMode?: 'canvas' | 'html';\n /** 内置下拉菜单的全局设置项 目前只针对基本表格有效 会对每个表头单元格开启默认的下拉菜单功能。代替原来的option.dropDownMenu*/\n defaultHeaderMenuItems?:\n | MenuListItem[]\n | ((args: { row: number; col: number; table: BaseTableAPI }) => MenuListItem[]);\n /** 右键菜单。代替原来的option.contextmenu */\n contextMenuItems?:\n | MenuListItem[]\n | ((field: FieldDef, row: number, col: number, table?: BaseTableAPI) => MenuListItem[]);\n /** 设置选中状态的菜单。代替原来的option.dropDownMenuHighlight */\n dropDownMenuHighlight?: DropDownMenuHighlightInfo[];\n /** 右键菜单是否只工作在单元格上。默认true只在单元格上显示右键菜单, 配置false在空白处也弹出右键菜单 */\n contextMenuWorkOnlyCell?: boolean;\n parentElement?: HTMLElement;\n };\n /** 提示弹框的相关配置。消失时机:显示后鼠标移动到指定区域外或者进入新的单元格后自动消失*/\n tooltip: {\n parentElement: HTMLElement;\n renderMode: 'html' | 'canvas';\n /** 代替原来hover:isShowTooltip配置 */\n isShowOverflowTextTooltip: boolean | ((col: number, row: number, table: BaseTableAPI) => boolean);\n /** 缩略文字提示框 延迟消失时间 */\n overflowTextTooltipDisappearDelay?: number;\n /** 弹框是否需要限定在表格区域内 */\n confine: boolean;\n position: Placement;\n };\n\n dataSourceEventIds?: EventListenerId[];\n // headerEvents?: EventListenerId[];\n layoutMap: SimpleHeaderLayoutMap | PivotHeaderLayoutMap;\n headerValues?: HeaderValues;\n tooltipHandler: TooltipHandler;\n\n // headerRowHeight: number[] | number;//移到了BaseTable\n sortState: SortState | SortState[];\n multipleSort?: boolean;\n\n dataSource: DataSource | CachedDataSource;\n records?: any;\n allowRangePaste: boolean;\n //重新思考逻辑:如果为false,行高按设置的rowHeight;如果设置为true,则按lineHeight及是否自动换行综合计算行高 2021.11.19 by:lff\n\n autoWrapText?: boolean;\n enableLineBreak?: boolean;\n\n menuHandler: MenuHandler;\n\n /**\n * 计算列宽时 指定最大列宽 可设置boolean或者具体的值 默认为450\n */\n limitMaxAutoWidth?: boolean | number;\n\n /**\n * 限制列宽最小值。\n */\n limitMinWidth?: number;\n\n limitMinHeight?: number;\n\n title?: Title;\n legends?: (DiscreteTableLegend | ContinueTableLegend)[];\n\n emptyTip?: EmptyTip;\n //是否开启图表异步渲染\n renderChartAsync?: boolean;\n // // 开启图表异步渲染 每批次渐进渲染图表个数\n // renderChartAsyncBatchCount?: number;\n\n stick: { changedCells: Map<string, StickCell> };\n\n customMergeCell?: CustomMergeCellFunc;\n /**\n * 'auto':和浏览器滚动行为一致 表格滚动到顶部/底部时 触发浏览器默认行为;\n * 设置为 'none' 时, 表格滚动到顶部/底部时, 不再触发父容器滚动\n * */\n overscrollBehavior?: 'auto' | 'none';\n\n modifiedViewBoxTransform?: boolean;\n // react component container\n bodyDomContainer?: HTMLElement;\n headerDomContainer?: HTMLElement;\n frozenBodyDomContainer?: HTMLElement;\n frozenHeaderDomContainer?: HTMLElement;\n rightFrozenBodyDomContainer?: HTMLElement;\n rightFrozenHeaderDomContainer?: HTMLElement;\n frozenBottomDomContainer?: HTMLElement;\n bottomDomContainer?: HTMLElement;\n rightFrozenBottomDomContainer?: HTMLElement;\n\n // 已使用一行的高度填充所有行\n useOneRowHeightFillAll?: boolean;\n\n // 启用树形结构数据内的merge配置\n enableTreeNodeMerge?: boolean;\n\n _oldRowCount?: number;\n _oldColCount?: number;\n\n columnWidthConfig?: any;\n rowHeightConfig?: any;\n}\nexport interface BaseTableConstructorOptions {\n // /** 指定表格的行数 */\n // rowCount?: number;\n\n // /** 指定表格的列数 */\n // colCount?: number;\n /**\n * 当前需要冻结的列数 基本表格生效\n */\n frozenColCount?: number;\n frozenRowCount?: number;\n rightFrozenColCount?: number;\n bottomFrozenRowCount?: number;\n /** 最大冻结宽度,固定值 or 百分比。默认为'80%' */\n maxFrozenWidth?: number | string;\n /** 超过最大冻结宽度后是否全部解冻,默认true */\n unfreezeAllOnExceedsMaxWidth?: boolean;\n\n // /** 待实现 TODO */\n // frozenRowCount?: number;\n /** 可冻结列数,表示前多少列会出现冻结操作按钮 基本表格生效 */\n allowFrozenColCount?: number;\n /**\n * 默认行高. 默认 40\n */\n defaultRowHeight?: number | 'auto';\n /** 列表头默认行高 可以按逐行设置 如果没有就取defaultRowHeight */\n defaultHeaderRowHeight?: (number | 'auto') | (number | 'auto')[];\n /**\n * 默认列宽. 默认 80\n */\n defaultColWidth?: number;\n /** 行表头默认列宽 可以按逐列设置 如果没有就取defaultColWidth */\n defaultHeaderColWidth?: (number | 'auto') | (number | 'auto')[];\n /** 快捷键功能设置 */\n keyboardOptions?: TableKeyboardOptions;\n excelOptions?: {\n fillHandle?: boolean | ((args: { selectRanges: CellRange[]; table: BaseTableAPI }) => boolean);\n };\n /** 事件触发相关设置 */\n eventOptions?: TableEventOptions;\n /**\n * Canvas container\n */\n container?: HTMLElement | null;\n\n /**\n * @deprecated\n * 请使用resize.columnResizeMode\n * 调整列宽 可操作范围。'all' | 'none' | 'header' | 'body'; 整列间隔线|禁止调整|只能在表头处间隔线|只能在body间隔线\n */\n columnResizeMode?: 'all' | 'none' | 'header' | 'body';\n /**\n * @deprecated\n * 请使用resize.rowResizeMode\n */\n rowResizeMode?: 'all' | 'none' | 'header' | 'body';\n\n /**\n * @deprecated\n * dragOrder.dragHeaderMode\n * 控制拖拽表头移动位置顺序开关\n */\n dragHeaderMode?: 'all' | 'none' | 'column' | 'row';\n\n /**\n * 是否显示固定列图钉 基本表格生效\n */\n showFrozenIcon?: boolean;\n\n padding?:\n | {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n }\n | number;\n /** hover交互配置 */\n hover?: {\n /** hover交互响应模式:十字交叉 整列 整行 或者单个单元格 */\n highlightMode?: 'cross' | 'column' | 'row' | 'cell';\n /** 不响应鼠标hover交互 */\n disableHover?: boolean;\n /** 单独设置表头不响应鼠标hover交互 */\n disableHeaderHover?: boolean;\n /** 单独设置坐标轴不响应鼠标hover交互 */\n disableAxisHover?: boolean;\n };\n /** 选择单元格交互配置 */\n select?: {\n /** 高亮范围模式:十字交叉 整列 整行 或者单个单元格。默认`cell` */\n highlightMode?: 'cross' | 'column' | 'row' | 'cell';\n /** 点击表头单元格效果\n * 'inline': 点击行表头则整行选中,选择列表头则整列选中;\n * 'cell': 仅仅选择当前点击的表头单元格;\n * 'body': 不选择表头,点击行表头则选择该行所有 body 单元格,点击列表头则选择该列所有 body 单元格。\n */\n headerSelectMode?: 'inline' | 'cell' | 'body';\n /** 点击表头corner单元格效果\n * 'inline': 点击corner选择列表头则整列选中;\n * 'cell': 仅仅选择当前点击的corner表头单元格;\n * 'body': 点击corner列表头则选择该列所有 body 单元格;\n * 'all': 点击corner选择整个图表。\n */\n cornerHeaderSelectMode?: 'inline' | 'cell' | 'body' | 'all';\n /** 不响应鼠标select交互 */\n disableSelect?: boolean | ((col: number, row: number, table: BaseTableAPI) => boolean);\n /** 单独设置表头不响应鼠标select交互 */\n disableHeaderSelect?: boolean;\n /** 点击空白区域是否取消选中 */\n blankAreaClickDeselect?: boolean;\n /** 点击外部区域是否取消选中 */\n outsideClickDeselect?: boolean; //\n /** 禁止拖拽框选 */\n disableDragSelect?: boolean;\n /** 是否在选择多行或多列时高亮范围 */\n highlightInRange?: boolean;\n /** 是否将选中的单元格自动滚动到视口内 默认为true */\n makeSelectCellVisible?: boolean;\n /** 右键点击单元格是否禁用选择单元格 */\n disableSelectOnContextMenu?: boolean;\n };\n /** 下拉菜单的相关配置。消失时机:显示后点击菜单区域外自动消失*/\n menu?: {\n /** 代替原来的option.menuType html目前实现较完整 先默认html渲染方式*/\n renderMode?: 'canvas' | 'html';\n /** 内置下拉菜单的全局设置项 目前只针对基本表格有效 会对每个表头单元格开启默认的下拉菜单功能。代替原来的option.dropDownMenu*/\n defaultHeaderMenuItems?:\n | MenuListItem[]\n | ((args: { row: number; col: number; table: BaseTableAPI }) => MenuListItem[]);\n /** 右键菜单。代替原来的option.contextmenu */\n contextMenuItems?:\n | MenuListItem[]\n | ((field: string, row: number, col: number, table?: BaseTableAPI) => MenuListItem[]);\n /** 设置选中状态的菜单。代替原来的option.dropDownMenuHighlight */\n dropDownMenuHighlight?: DropDownMenuHighlightInfo[];\n /** 右键菜单是否只工作在单元格上。默认true只在单元格上显示右键菜单, 配置false在空白处也弹出右键菜单 */\n contextMenuWorkOnlyCell?: boolean;\n parentElement?: HTMLElement;\n };\n /** tooltip相关配置 */\n tooltip?: {\n parentElement?: HTMLElement;\n /** html目前实现较完整 先默认html渲染方式 */\n renderMode?: 'html'; // 目前暂不支持canvas方案\n /** 是否显示缩略文字提示框。 代替原来hover:isShowTooltip配置 暂时需要将renderMode配置为html才能显示,canvas的还未开发*/\n isShowOverflowTextTooltip?: boolean | ((col: number, row: number, table: BaseTableAPI) => boolean);\n /** 缩略文字提示框 延迟消失时间 */\n overflowTextTooltipDisappearDelay?: number;\n /** 是否将 tooltip 框限制在画布区域内,默认开启。针对renderMode:\"html\"有效 */\n confine?: boolean;\n position?: Placement;\n };\n /**\n * Theme\n */\n theme?: ITableThemeDefine;\n /** 宽度模式 */\n widthMode?: 'standard' | 'adaptive' | 'autoWidth';\n /** 高度模式 */\n heightMode?: 'standard' | 'adaptive' | 'autoHeight';\n /** 当列宽度不能占满容器时,是否需要自动拉宽来填充容器的宽度。默认false */\n autoFillWidth?: boolean;\n /** 当行高度不能占满容器时,是否需要自动拉高来填充容器的高度。默认false */\n autoFillHeight?: boolean;\n /** 内容自适应模式,确保表格大小始终等于容器大小,保持原有的列宽/行高不变。默认false */\n containerFit?: {\n width?: boolean; // 是否自适应宽度,默认true\n height?: boolean; // 是否自适应高度,默认true\n };\n\n /** adaptive 模式下宽度的适应策略 **/\n widthAdaptiveMode?: WidthAdaptiveModeDef;\n /** adaptive 模式下高度的适应策略 **/\n heightAdaptiveMode?: HeightAdaptiveModeDef;\n /** 当配置adaptive模式时,默认true,即在计算每行行高的基础上去等比拉伸行高撑满容器宽度的。如果不需要计算行高用默认行高撑满的话请配置为false */\n autoHeightInAdaptiveMode?: boolean;\n\n // /** 行高是否根据内容来计算 */\n // autoRowHeight?: boolean;\n /** 设备的像素比 不配的话默认获取window.devicePixelRatio */\n pixelRatio?: number;\n /** 自定义渲染 函数形式*/\n customRender?: ICustomRender;\n /** 开启自动换行 默认false */\n autoWrapText?: boolean;\n /** 是否处理换行符 */\n enableLineBreak?: boolean;\n /** 单元格中可显示最大字符数 默认200 */\n maxCharactersNumber?: number; //\n // /** toolip最大字符数 */\n // maxTooltipCharactersNumber?: number;\n /** 最大可操作条目数 如copy操作可复制出最大数据条目数 */\n maxOperatableRecordCount?: number;\n /**\n * 计算列宽时 指定最大列宽 可设置boolean或者具体的值 默认为450。手动拖拽列宽的话不收这个限制\n */\n limitMaxAutoWidth?: boolean | number;\n /**\n * 限制列宽最小值。如设置为true 则拖拽改变列宽时限制列宽最小为10px,设置为false则不进行限制。默认为10px\n */\n limitMinWidth?: boolean | number;\n limitMinHeight?: boolean | number;\n\n // maximum number of data items maintained in table instance\n maintainedDataCount?: number;\n // maximum number of columns maintained in table instance\n maintainedColumnCount?: number;\n\n legends?: ITableLegendOption | ITableLegendOption[];\n title?: ITitle;\n emptyTip?: true | IEmptyTip;\n /** 是否开启图表异步渲染 */\n renderChartAsync?: boolean;\n /** 开启图表异步渲染 每批次渐进渲染图表个数 默认是5个 */\n renderChartAsyncBatchCount?: number;\n\n customMergeCell?: CustomMergeCell;\n\n // #region for nodejs\n mode?: 'node' | 'browser';\n modeParams?: any;\n canvasWidth?: number | 'auto';\n canvasHeight?: number | 'auto';\n maxCanvasWidth?: number;\n maxCanvasHeight?: number;\n /** 表格的x偏移量(会影响width), 内部适配的表格边框或者title等组件的占位不算在内 */\n contentOffsetX?: number;\n /** 表格的y偏移量(会影响height), 内部适配的表格边框或者title等组件的占位不算在内 */\n contentOffsetY?: number;\n\n // #endregion\n /**\n * 'auto':和浏览器滚动行为一致 表格滚动到顶部/底部时 触发浏览器默认行为;\n * 设置为 'none' 时, 表格滚动到顶部/底部时, 不再触发父容器滚动\n * */\n overscrollBehavior?: 'auto' | 'none';\n\n // resize response time\n resizeTime?: number;\n\n canvas?: HTMLCanvasElement;\n viewBox?: IBoundsLike;\n chartOption?: any;\n disableInteraction?: boolean;\n\n // 渲染时的 spec 改变\n specFormat?: (\n spec: any,\n chartInstance: any,\n chart: any\n ) => { needFormatSpec: boolean; spec?: any; updateSpec?: boolean };\n // chart 单元格 的 spec 生成时的转换\n specTransformInCell?: (spec: any, col: number, row: number) => any;\n\n beforeRender?: (stage: any) => void;\n afterRender?: (stage: any) => void;\n rowSeriesNumber?: IRowSeriesNumber;\n /** 启用复选框级联 */\n enableCheckboxCascade?: boolean;\n /** 表头复选框是否级联整列状态 */\n enableHeaderCheckboxCascade?: boolean;\n // columnSeriesNumber?: ColumnSeriesNumber[];\n customCellStyle?: CustomCellStyle[];\n customCellStyleArrangement?: CustomCellStyleArrangement[];\n\n columnWidthComputeMode?: 'normal' | 'only-header' | 'only-body';\n clearDOM?: boolean;\n customConfig?: {\n /** xTable对于没有配置autoWrapText并且有'\\n'的文本,在计算行高是会当做一行处理,但是在渲染时会解析'\\n';显示效果就是单元格高度为一行文本高度,只显示第一个'\\n'前的文字,后面显示'...';multilinesForXTable配置实现和该功能对齐的样式 */\n multilinesForXTable?: boolean;\n /** 这里可以配置为false 来走flatDataToObject的数据处理逻辑 而不走dataset的分析 */\n enableDataAnalysis?: boolean;\n /** 禁用行高列宽计算取整数逻辑 对齐xTable */\n _disableColumnAndRowSizeRound?: boolean;\n imageMargin?: number;\n // 是否创建react custom container\n createReactContainer?: boolean;\n // adaptive 模式下优先缩小迷你图\n shrinkSparklineFirst?: boolean;\n\n // 行列移动不更新表格\n notUpdateInColumnRowMove?: boolean;\n\n // 表格是否限制内容高度\n limitContentHeight?: boolean;\n\n // 图片资源请求时是否使用anonymous模式\n imageAnonymous?: boolean;\n\n // 滚动到边界是否继续触发滚动事件\n scrollEventAlwaysTrigger?: boolean;\n\n // 开启透视结构缓存\n enablePivotPathCache?: boolean;\n\n // 是否禁用内置图表激活\n disableBuildInChartActive?: boolean;\n\n /** 是否检测图表内具体元素的点击事件,用于 chart-render-helper.ts中 contains方法判断是否选中图表(图表助手需求),默认false */\n detectPickChartItem?: boolean;\n /** 强制计算所有行高,用于某些场景下,如vtable-gantt中,需要一次性计算所有行高 */\n forceComputeAllRowHeight?: boolean;\n\n /** 是否取消当前单元格选中状态的判断钩子,用在table-group文件的pointertap事件中,当点击空白区域时,取消选中状态 */\n cancelSelectCellHook?: (e: FederatedPointerEvent) => boolean;\n\n /** 当编辑器没有退出情况时,可继续选中其他单元格,比如在vtable-sheet中,当编辑器没有退出情况时,可继续选中其他单元格 */\n selectCellWhenCellEditorNotExists?: boolean;\n }; // 部分特殊配置,兼容xTable等作用\n\n animationAppear?: boolean | IAnimationAppear;\n\n renderOption?: any;\n\n formatCopyValue?: (value: string) => string;\n customComputeRowHeight?: (computeArgs: { row: number; table: BaseTableAPI }) => number | 'auto' | undefined;\n /** 当表格出现抖动情况,请排查是否上层dom容器的宽高是小数引起的。如果不能保证是整数,请配置这个配置项为true */\n tableSizeAntiJitter?: boolean;\n\n /**\n * @deprecated 请使用resize.disableDblclickAutoResizeColWidth\n */\n disableDblclickAutoResizeColWidth?: boolean;\n\n /** resize交互配置 **/\n resize?: {\n /**\n * 调整列宽 可操作范围。'all' | 'none' | 'header' | 'body'; 整列间隔线|禁止调整|只能在表头处间隔线|只能在body间隔线\n */\n columnResizeMode?: 'all' | 'none' | 'header' | 'body';\n canResizeColumn?: (col: number, row: number, table: BaseTableAPI) => boolean;\n rowResizeMode?: 'all' | 'none' | 'header' | 'body';\n /** 是否禁用双击列边框自动调整列宽 **/\n disableDblclickAutoResizeColWidth?: boolean;\n };\n dragOrder?: {\n /** 控制拖拽表头移动位置顺序开关 */\n dragHeaderMode?: 'all' | 'none' | 'column' | 'row';\n /** 拖拽移动位置结束时进行验证 */\n validateDragOrderOnEnd?: (source: CellAddress, target: CellAddress) => boolean;\n };\n /** 插件配置 */\n plugins?: IVTablePlugin[];\n /** 默认的鼠标样式 */\n defaultCursor?: string;\n}\nexport interface BaseTableAPI {\n id: string;\n /** 数据总条目数 */\n recordsCount: number;\n /** 表格的行数 */\n rowCount: number;\n /** 表格的列数 */\n colCount: number;\n /** 表格除去外层frame后的宽度 */\n tableNoFrameWidth: number;\n /** 表格除去外层frame后的高度 */\n tableNoFrameHeight: number;\n /** 表格的冻结行数 包括表头在内 */\n frozenRowCount: number;\n /** 表格的冻结列数 包括表头在内 */\n frozenColCount: number;\n\n bottomFrozenRowCount: number;\n rightFrozenColCount: number;\n /** 当前表格默认表头行高 */\n defaultHeaderRowHeight: (number | 'auto') | (number | 'auto')[];\n /** 当前表格默认行高 */\n defaultRowHeight: number;\n /** 当前表格默认列宽 */\n defaultColWidth: number;\n /** 当前表格默认表头列宽 */\n defaultHeaderColWidth: (number | 'auto') | (number | 'auto')[];\n /** 当前表格快捷键设置 */\n keyboardOptions: TableKeyboardOptions | null;\n /** 当前表格事件相关设置 */\n eventOptions: TableEventOptions | null;\n /**\n * 是否显示图钉\n */\n showFrozenIcon: boolean;\n readonly canvas: HTMLCanvasElement;\n /** 表格可视区域的行数 */\n readonly visibleRowCount: number;\n /** 表格可视区域的列数 */\n readonly visibleColCount: number;\n /** 表格滚动值left */\n scrollLeft: number;\n /** 表格滚动值top */\n scrollTop: number;\n /** 用户设置的options 不要修改这个这个 */\n options: BaseTableConstructorOptions;\n /** 设置的全局下拉菜单列表项配置 */\n globalDropDownMenu?: MenuListItem[] | ((args: { row: number; col: number; table: BaseTableAPI }) => MenuListItem[]);\n /** 设置的全局自定义渲染函数 */\n customRender?: ICustomRender;\n\n /** 表格数据管理对象 */\n dataSource: DataSourceAPI;\n /** 设置的表格主题 */\n theme: TableTheme;\n /** 可允许设置冻结的最大列数 */\n allowFrozenColCount: number;\n\n /** 存储内部用到的属性 变量等 */\n internalProps: IBaseTableProtected;\n /** 分页信息 */\n pagination?: IPagination;\n\n /** 表格偏移像素值 水平方向 */\n tableX: number;\n /** 表格偏移像素值 垂直方向 */\n tableY: number;\n /** 表格宽度模式 */\n widthMode: WidthModeDef;\n /** 表格宽度模式 */\n heightMode: HeightModeDef;\n /** 当列宽度不能占满容器时,是否需要自动拉宽来填充容器的宽度。默认false */\n autoFillWidth: boolean;\n /** 当行高度不能占满容器时,是否需要自动拉高来填充容器的高度。默认false */\n autoFillHeight?: boolean;\n /** 内容自适应模式,确保表格大小始终等于容器大小,保持原有的列宽/行高不变。默认false */\n containerFit?: { width: boolean; height: boolean };\n\n /** adaptive 模式下宽度的适应策略 **/\n widthAdaptiveMode: WidthAdaptiveModeDef;\n /** adaptive 模式下高度的适应策略 **/\n heightAdaptiveMode: HeightAdaptiveModeDef;\n\n isReleased: boolean;\n\n // rowHeightsMap: NumberMap<number>;\n rowHeightsMap: NumberRangeMap;\n colWidthsMap: NumberMap<string | number>;\n hasListeners: (type: string) => boolean;\n on: <TYPE extends keyof TableEventHandlersEventArgumentMap>(\n type: TYPE,\n listener: TableEventListener<TYPE> //(event: TableEventHandlersEventArgumentMap[TYPE]) => TableEventHandlersReturnMap[TYPE]\n ) => EventListenerId;\n // &(<T extends keyof TableEventHandlersEventArgumentMap>(type: string, listener: AnyListener<T>) => EventListenerId);\n\n _vDataSet?: DataSet;\n /** 场景树对象 */\n scenegraph: Scenegraph;\n /** 状态管理模块 */\n stateManager: StateManager;\n /** 事件管理模块 */\n eventManager: EventManager;\n /** 动画管理模块 */\n animationManager: TableAnimationManager;\n\n editorManager: EditManager;\n /** 行表头的层数 */\n rowHeaderLevelCount: number;\n /** 列表头的层数 */\n columnHeaderLevelCount: number;\n\n canvasWidth?: number;\n canvasHeight?: number;\n\n columnWidthComputeMode?: 'normal' | 'only-header' | 'only-body';\n\n _rowRangeHeightsMap: Map<string, number>;\n _colRangeWidthsMap: Map<string, number>;\n canvasSizeSeted?: boolean;\n\n pixelRatio: number;\n rotateDegree?: number;\n /** 获取表格绘制的范围 不包括frame的宽度 */\n getDrawRange: () => Rect;\n /** 将鼠标坐标值 转换成表格坐标系中的坐标位置 */\n _getMouseAbstractPoint: (evt: TouchEvent | MouseEvent | undefined) => { x: number; y: number; inTable: boolean };\n getElement: () => HTMLElement;\n getContainer: () => HTMLElement;\n\n setFrozenColCount: (count: number) => void;\n _setFrozenColCount: (count: number) => void;\n _updateSize: () => void;\n\n render: () => void;\n throttleInvalidate: () => void;\n getRowHeight: (row: number) => number;\n getDefaultRowHeight: (row: number) => number | 'auto';\n getDefaultColumnWidth: (col: number) => number | 'auto';\n _setRowHeight: (row: number, height: number, clearCache?: boolean) => void;\n setRowHeight: (row: number, height: number) => void;\n getColWidth: (col: number) => number;\n getColWidthDefined: (col: number) => string | number;\n // setColWidthDefined: (col: number, width: number) => void;\n getColWidthDefinedNumber: (col: number) => number;\n // getColWidthDefine: (col: number) => string | number;\n _setColWidth: (col: number, width: number | string, clearCache?: boolean, skipCheckFrozen?: boolean) => void;\n setColWidth: (col: number, width: number) => void;\n _getColContentWidth: (col: number) => number;\n _setColContentWidth: (col: number, width: number | string, clearCache?: boolean) => void;\n getMaxColWidth: (col: number) => number;\n setMaxColWidth: (col: number, maxwidth: string | number) => void;\n getMinColWidth: (col: number) => number;\n setMinColWidth: (col: number, minwidth: string | number) => void;\n getCellRect: (col: number, row: number) => Rect;\n getCellRelativeRect: (col: number, row: number) => Rect;\n getCellsRect: (startCol: number, startRow: number, endCol: number, endRow: number) => Rect;\n getCellRangeRect: (cellRange: CellRange | CellAddress) => Rect;\n getCellRangeRelativeRect: (cellRange: CellRange | CellAddress) => Rect;\n getVisibleCellRangeRelativeRect: (cellRange: CellRange | CellAddress) => Rect;\n isFrozenCell: (col: number, row: number) => { row: boolean; col: boolean } | null;\n getRowAt: (absoluteY: number) => { top: number; row: number; bottom: number };\n getColAt: (absoluteX: number) => { left: number; col: number; right: number };\n getCellAt: (absoluteX: number, absoluteY: number) => CellAddressWithBound;\n getCellAtRelativePosition: (absoluteX: number, absoluteY: number) => CellAddressWithBound;\n getColAtRelativePosition: (absoluteX: number) => number;\n getRowAtRelativePosition: (absoluteY: number) => number;\n _makeVisibleCell: (col: number, row: number) => void;\n // setFocusCursor(col: number, row: number): void;\n // focusCell(col: number, row: number): void;\n getCellOverflowText: (col: number, row: number) => string | null;\n getColsWidth: (startCol: number, endCol: number) => number;\n getColsWidths: () => number[];\n getRowsHeight: (startRow: number, endRow: number) => number;\n _getRangeSizeForContainerFit: (start: number, end: number, totalSize: number, type: 'col' | 'row') => number;\n\n release: () => void;\n addReleaseObj: (releaseObj: { release: () => void }) => void;\n _getCellStyle: (col: number, row: number) => FullExtendStyle;\n clearCellStyleCache: () => void;\n\n getFrozenRowsHeight: () => number;\n getFrozenColsWidth: () => number;\n getBottomFrozenRowsHeight: () => number;\n getRightFrozenColsWidth: () => number;\n selectCell: (\n col: number,\n row: number,\n isShift?: boolean,\n isCtrl?: boolean,\n makeSelectCellVisible?: boolean,\n skipBodyMerge?: boolean\n ) => void;\n clearSelected: () => void;\n selectCells: (cellRanges: CellRange[]) => void;\n getAllRowsHeight: () => number;\n getAllColsWidth: () => number;\n\n off: (id: EventListenerId) => void;\n getBodyField: (col: number, row: number) => FieldDef | undefined;\n /**\n * 根据单元格获取对应的源数据\n * @param col\n * @param row\n * @returns\n */\n getRecordByCell: (col: number, row: number) => MaybePromiseOrUndefined;\n /**\n * 根据数据源的index 获取显示到表格中的index 行号或者列号(与转置相关)。注:ListTable特有接口\n * @param recordIndex\n */\n getTableIndexByRecordIndex: (recordIndex: number | number[]) => number;\n /**\n * 根据数据源的field 获取显示到表格中的index 行号或者列号(与转置相关)。注:ListTable特有接口\n * @param recordIndex\n */\n getTableIndexByField: (field: FieldDef) => number;\n /**\n * 根据数据源中的index和field获取单元格行列号。注:ListTable特有接口\n * @param field\n * @param recordIndex\n * @returns\n */\n getCellAddrByFieldRecord: (field: FieldDef, recordIndex: number | number[]) => CellAddress;\n getRecordShowIndexByCell: (col: number, row: number) => number;\n getRecordStartRowByRecordIndex: (index: number) => number;\n\n getHeaderField: (col: number, row: number) => any | undefined;\n\n _getHeaderCellBySortState: (sortState: SortState) => CellAddress | undefined;\n getHeaderDefine: (col: number, row: number) => ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber;\n _getHeaderLayoutMap: (col: number, row: number) => HeaderData | SeriesNumberColumnData;\n getContext: () => CanvasRenderingContext2D;\n getCellRange: (col: number, row: number) => CellRange;\n _resetFrozenColCount: () => void;\n isCellRangeEqual: (col: number, row: number, targetCol: number, targetRow: number) => boolean;\n _getLayoutCellId: (col: number, row: number) => LayoutObjectId;\n _getBodyLayoutMap: (col: number, row: number) => ColumnData | IndicatorData | SeriesNumberColumnData;\n getBodyColumnDefine: (col: number, row: number) => ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber;\n getBodyColumnType: (col: number, row: number) => ColumnTypeOption;\n getCellType: (col: number, row: number) => ColumnTypeOption;\n fireListeners: <TYPE extends keyof TableEventHandlersEventArgumentMap>(\n type: TYPE,\n event: TableEventHandlersEventArgumentMap[TYPE]\n ) => TableEventHandlersReturnMap[TYPE][];\n\n //更新分页\n updatePagination: (cof: IPagination) => void;\n //hover\n\n getHeaderDescription: (col: number, row: number) => string | undefined;\n /** 获取单元格展示值 */\n getCellValue: (col: number, row: number, skipCustomMerge?: boolean) => string | null;\n /** 获取单元格展示数据的format前的值 */\n getCellOriginValue: (col: number, row: number) => any;\n /** 获取单元格展示数据源最原始值 */\n getCellRawValue: (col: number, row: number) => FieldData;\n /** 获取单元格展示数据的format前的record源数据 */\n getCellOriginRecord: (col: number, row: number) => MaybePromiseOrUndefined;\n /** 获取单元格展示源数据 */\n getCellRawRecord: (col: number, row: number) => MaybePromiseOrUndefined;\n\n _dropDownMenuIsHighlight: (col: number, row: number, index: number) => boolean;\n // bindEvents(): void;\n refreshRowColCount: () => void;\n // getFieldData: (field: FieldDef | FieldFormat | undefined, col: number, row: number) => FieldData;\n _hasField: (field: FieldDef, col: number, row: number) => boolean;\n getCellHeaderPaths: (col: number, row: number) => ICellHeaderPaths;\n getCellLocation: (col: number, row: number) => CellLocation;\n // isHitIcon(col: number, row: number, x: number, y: number, iconType: IconFuncTypeEnum): boolean;\n getCellIcons: (col: number, row: number) => ColumnIconOption[];\n\n getMenuInfo: (col: number, row: number, type: string) => DropDownMenuEventInfo;\n /**\n * 获取某个单元格的样式 共业务方调用\n * @param col\n * @param row\n */\n getCellStyle: (col: number, row: number) => CellStyle; // 计算后style\n\n getHierarchyState: (col: number, row: number) => HierarchyState | null;\n\n _canDragHeaderPosition: (col: number, row: number) => boolean;\n\n isHeader: (col: number, row: number) => boolean;\n\n isColumnHeader: (col: number, row: number) => boolean;\n\n isCornerHeader: (col: number, row: number) => boolean;\n\n isRowHeader: (col: number, row: number) => boolean;\n\n getCopyValue: (getCellValueFunction?: (col: number, row: number) => string | number) => string;\n\n getSelectedCellInfos: () => CellInfo[][];\n getSelectedCellRanges: () => CellRange[];\n getCellInfo: (col: number, row: number) => Omit<MousePointerCellEvent, 'target'>;\n\n showTooltip: (col: number, row: number, tooltipOptions?: TooltipOptions) => void;\n\n measureText: (\n text: string,\n font: { fontSize: number; fontWeight?: string | number; fontFamily: string }\n ) => ITextSize;\n\n _canResizeColumn: (col: number, row: number) => boolean;\n _canResizeRow: (col: number, row: number) => boolean;\n\n getCustomRender: (col: number, row: number) => ICustomRender;\n getCustomLayout: (col: number, row: number) => ICustomLayout;\n isListTable: () => boolean;\n isPivotTable: (() => boolean) & (() => boolean);\n isPivotChart: (() => boolean) & (() => boolean);\n _clearColRangeWidthsMap: (col?: number) => void;\n _clearRowRangeHeightsMap: (row?: number) => void;\n clearRowHeightCache: () => void;\n clearColWidthCache: () => void;\n toggleHierarchyState: (col: number, row: number) => void;\n\n resize: () => void;\n /** 直接设置canvas的宽高 不根据容器宽高来决定表格的尺寸 */\n setCanvasSize: (width: number, height: number) => void;\n getMergeCellRect: (col: number, row: number) => Rect;\n\n getTargetColAt: (absoluteX: number) => ColumnInfo | null;\n getTargetRowAt: (absoluteY: number) => RowInfo | null;\n getTargetColAtConsiderRightFrozen: (absoluteX: number, isConsider: boolean) => ColumnInfo | null;\n getTargetRowAtConsiderBottomFrozen: (absoluteY: number, isConsider: boolean) => RowInfo | null;\n renderWithRecreateCells: () => void;\n //#endregion tableAPI\n\n _adjustColWidth: (col: number, orgWidth: number) => number;\n _colWidthDefineToPxWidth: (width: string | number) => number;\n isFrozenColumn: (col: number, row?: number) => boolean;\n isLeftFrozenColumn: (col: number, row?: number) => boolean;\n isRightFrozenColumn: (col: number, row?: number) => boolean;\n isFrozenRow: (col: number, row?: number) => boolean;\n isTopFrozenRow: (col: number, row?: number) => boolean;\n isBottomFrozenRow: (col: number, row?: number) => boolean;\n\n hasCustomMerge: () => boolean;\n getCustomMerge: (col: number, row: number) => undefined | (Omit<CustomMerge, 'style'> & { style?: FullExtendStyle });\n /** 获取表格body部分的显示单元格范围 */\n getBodyVisibleCellRange: () => { rowStart: number; colStart: number; rowEnd: number; colEnd: number };\n /** 获取表格body部分的显示列号范围 */\n getBodyVisibleColRange: (start_deltaX?: number, end_deltaX?: number) => { colStart: number; colEnd: number };\n /** 获取表格body部分的显示行号范围 */\n getBodyVisibleRowRange: (start_deltaY?: number, end_deltaY?: number) => { rowStart: number; rowEnd: number };\n\n _hasCustomRenderOrLayout: () => boolean;\n /** 根据表格单元格的行列号 获取在body部分的列索引及行索引 */\n getBodyIndexByTableIndex: (col: number, row: number) => CellAddress;\n /** 根据body部分的列索引及行索引,获取单元格的行列号 */\n getTableIndexByBodyIndex: (col: number, row: number) => CellAddress;\n /**\n * 滚动到具体某个单元格位置\n * @param cellAddr 要滚动到的单元格位置\n */\n scrollToCell: (cellAddr: { col?: number; row?: number }, animationOption?: ITableAnimationOption | boolean) => void;\n scrollToRow: (row: number, animationOption?: ITableAnimationOption | boolean) => void;\n scrollToCol: (col: number, animationOption?: ITableAnimationOption | boolean) => void;\n registerCustomCellStyle: (customStyleId: string, customStyle: ColumnStyleOption | undefined | null) => void;\n arrangeCustomCellStyle: (cellPos: { col?: number; row?: number; range?: CellRange }, customStyleId: string) => void;\n /** 是否有列是自动计算列宽 */\n checkHasColumnAutoWidth: () => boolean;\n _moveHeaderPosition: (\n source: CellAddress,\n target: CellAddress\n ) => {\n sourceIndex: number;\n targetIndex: any;\n sourceSize: any;\n targetSize: any;\n moveType: 'column' | 'row';\n };\n changeRecordOrder: (source: number, target: number) => void;\n isSeriesNumber: (col: number, row?: number) => boolean;\n isHasSeriesNumber: () => boolean;\n leftRowSeriesNumberCount: number;\n isAutoRowHeight: (row?: number) => boolean;\n\n reactCustomLayout?: ReactCustomLayout;\n checkReactCustomLayout: (removeAllContainer: () => void) => void;\n setSortedIndexMap: (field: FieldDef, filedMap: ISortedMapItem) => void;\n\n exportImg: () => string;\n exportCellImg: (\n col: number,\n row: number,\n options?: { disableBackground?: boolean; disableBorder?: boolean }\n ) => string;\n exportCellRangeImg: (cellRange: CellRange) => string;\n exportCanvas: () => HTMLCanvasElement;\n setPixelRatio: (pixelRatio: number) => void;\n\n bodyDomContainer?: HTMLElement;\n headerDomContainer?: HTMLElement;\n frozenBodyDomContainer?: HTMLElement;\n frozenHeaderDomContainer?: HTMLElement;\n rightFrozenBodyDomContainer?: HTMLElement;\n rightFrozenHeaderDomContainer?: HTMLElement;\n frozenBottomDomContainer?: HTMLElement;\n bottomDomContainer?: HTMLElement;\n rightFrozenBottomDomContainer?: HTMLElement;\n\n showMoverLine: (col: number, row: number) => void;\n hideMoverLine: (col: number, row: number) => void;\n /** 关闭表格的滚动 */\n disableScroll: () => void;\n /** 开启表格的滚动 */\n enableScroll: () => void;\n\n customCellStylePlugin?: CustomCellStylePlugin;\n headerStyleCache: Map<string, any>;\n bodyBottomStyleCache: Map<string, any>;\n bodyStyleCache: Map<string, any>;\n bodyMergeTitleCache: Map<string, any>;\n isSeriesNumberInBody: (col: number, row: number) => boolean;\n getGroupTitleLevel: (col: number, row: number) => number | undefined;\n _getMaxFrozenWidth: () => number;\n _getComputedFrozenColCount: (frozenColCount: number) => number;\n isColumnSelected: (col: number) => boolean;\n isRowSelected: (row: number) => boolean;\n}\nexport interface ListTableProtected extends IBaseTableProtected {\n /** 表格数据 */\n records: any[] | null;\n dataConfig?: IListTableDataConfig;\n columns: ColumnsDefine;\n layoutMap: SimpleHeaderLayoutMap;\n columnWidthConfig?: {\n key: string | number;\n width: number;\n }[];\n rowHeightConfig?: {\n key: number;\n height: number;\n }[];\n\n groupBy: GroupByOption;\n groupTitleFieldFormat?: (record: any, col?: number, row?: number, table?: BaseTableAPI) => string;\n groupTitleCustomLayout?: ICustomLayout;\n enableTreeStickCell?: boolean;\n groupTitleCheckbox?: boolean;\n}\n\nexport interface PivotTableProtected extends IBaseTableProtected {\n /** 表格数据 */\n records: any[] | undefined;\n recordsIsTwoDimensionalArray?: boolean;\n layoutMap: PivotHeaderLayoutMap;\n dataConfig?: IPivotTableDataConfig;\n\n /** 列表头树型结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头树型结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IIndicator | string)[]; // (string | IIndicator)[];\n\n columnWidthConfig?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n columnWidthConfigForRowHeader?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n}\nexport interface PivotChartProtected extends IBaseTableProtected {\n /** 表格数据 */\n records: any[] | Record<string, any[]>;\n layoutMap: PivotHeaderLayoutMap;\n dataConfig?: IPivotChartDataConfig;\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IIndicator | string)[]; // (string | IIndicator)[];\n columnWidthConfig?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n columnWidthConfigForRowHeader?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n}\n"]}
|
package/cjs/ts-types/events.d.ts
CHANGED
|
@@ -313,10 +313,23 @@ export interface TableEventHandlersEventArgumentMap {
|
|
|
313
313
|
change_cell_value: {
|
|
314
314
|
col: number;
|
|
315
315
|
row: number;
|
|
316
|
+
recordIndex?: number | number[];
|
|
317
|
+
field?: FieldDef;
|
|
316
318
|
rawValue: string | number;
|
|
317
319
|
currentValue: string | number;
|
|
318
320
|
changedValue: string | number;
|
|
319
321
|
};
|
|
322
|
+
change_cell_values: {
|
|
323
|
+
values: {
|
|
324
|
+
col: number;
|
|
325
|
+
row: number;
|
|
326
|
+
recordIndex?: number | number[];
|
|
327
|
+
field?: FieldDef;
|
|
328
|
+
rawValue: string | number;
|
|
329
|
+
currentValue: string | number;
|
|
330
|
+
changedValue: string | number;
|
|
331
|
+
}[];
|
|
332
|
+
};
|
|
320
333
|
mousedown_fill_handle: {};
|
|
321
334
|
drag_fill_handle_end: {
|
|
322
335
|
direction?: 'top' | 'bottom' | 'left' | 'right';
|
|
@@ -350,6 +363,7 @@ export interface TableEventHandlersEventArgumentMap {
|
|
|
350
363
|
};
|
|
351
364
|
delete_record: {
|
|
352
365
|
recordIndexs: number[] | number[][];
|
|
366
|
+
records: any[];
|
|
353
367
|
rowIndexs: number[];
|
|
354
368
|
deletedCount: number;
|
|
355
369
|
};
|
|
@@ -445,6 +459,7 @@ export interface TableEventHandlersReturnMap {
|
|
|
445
459
|
after_update_cell_content_width: void;
|
|
446
460
|
after_update_select_border_height: void;
|
|
447
461
|
change_cell_value: void;
|
|
462
|
+
change_cell_values: void;
|
|
448
463
|
mousedown_fill_handle: void;
|
|
449
464
|
drag_fill_handle_end: void;
|
|
450
465
|
dblclick_fill_handle: void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ts-types/events.ts"],"names":[],"mappings":"","file":"events.js","sourcesContent":["import type {\n CellAddress,\n CellRange,\n CellLocation,\n FieldDef,\n CellAddressWithBound,\n ListTableConstructorOptions,\n PivotTableConstructorOptions\n} from './table-engine';\nimport type { DropDownMenuEventArgs, MenuListItem, PivotInfo } from './menu';\n\nimport type { IDimensionInfo, MergeCellInfo, RectProps, SortOrder } from './common';\nimport type { IconFuncTypeEnum, CellInfo, HierarchyState, ColumnsDefine } from '.';\nimport type { Icon } from '../scenegraph/graphic/icon';\nimport type { FederatedPointerEvent, Group, IEventTarget } from './../vrender';\nimport type { BaseTableConstructorOptions, BaseTableAPI } from './base-table';\n\nexport type KeyboardEventListener = (e: KeyboardEvent) => void;\nexport type TableEventListener<TYPE extends keyof TableEventHandlersEventArgumentMap> = (\n args: TableEventHandlersEventArgumentMap[TYPE]\n) => TableEventHandlersReturnMap[TYPE]; //AnyFunction;\nexport type EventListenerId = number;\n\nexport type SelectedCellEvent = CellAddress & {\n ranges: CellRange[];\n};\n\n// export type MouseCellEvent = CellAddress & {\n// event: MouseEvent | PointerEvent | TouchEvent;\n// };\n\nexport type MenuEvent = CellAddress & {\n dropDownMenu: MenuListItem[];\n pivotInfo: PivotInfo;\n};\n\nexport type TouchCellEvent = CellAddress & {\n event: TouchEvent;\n};\n\nexport type KeydownEvent = {\n keyCode: number;\n code: string;\n event: KeyboardEvent;\n stopCellMoving?: () => void;\n scaleRatio?: number;\n};\n\nexport type MousePointerCellEvent = CellAddressWithBound &\n CellInfo & {\n scaleRatio?: number;\n targetIcon?: { name: string; position: RectProps; funcType: string };\n event?: MouseEvent | PointerEvent | TouchEvent;\n federatedEvent?: FederatedPointerEvent;\n target: IEventTarget | undefined;\n\n mergeCellInfo?: MergeCellInfo;\n };\n// 多单元格的事件传出参数 需要将当前鼠标处的单元格的信息FocusedCellInfo也带着\nexport type MousePointerMultiCellEvent = MousePointerCellEvent & {\n cells: CellInfo[][];\n // menuKey?: string;\n};\n\nexport type MousePointerSparklineEvent = MousePointerCellEvent & {\n sparkline: {\n pointData: any;\n };\n};\n\nexport interface TableEventHandlersEventArgumentMap {\n selected_cell: SelectedCellEvent;\n selected_clear: {};\n click_cell: MousePointerCellEvent;\n dblclick_cell: MousePointerCellEvent;\n mouseenter_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mouseleave_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mousedown_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mousemove_table: MousePointerCellEvent;\n mouseenter_cell: MousePointerCellEvent;\n mouseleave_cell: MousePointerCellEvent;\n mousemove_cell: MousePointerCellEvent;\n mousedown_cell: MousePointerCellEvent;\n mouseup_cell: MousePointerCellEvent;\n contextmenu_cell: MousePointerMultiCellEvent;\n contextmenu_canvas: MousePointerCellEvent;\n before_keydown: KeydownEvent;\n keydown: KeydownEvent;\n scroll: {\n event: WheelEvent;\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n scrollDirection: 'horizontal' | 'vertical';\n scrollRatioX?: number;\n scrollRatioY?: number;\n dx?: number;\n dy?: number;\n };\n can_scroll: {\n event: WheelEvent;\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n scrollDirection: 'horizontal' | 'vertical';\n scrollRatioX?: number;\n scrollRatioY?: number;\n dx?: number;\n dy?: number;\n };\n scroll_vertical_end: {\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n };\n scroll_horizontal_end: {\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n };\n resize_column: { col: number; colWidth: number };\n resize_column_end: { col: number; colWidths: number[] };\n resize_row: { row: number; rowHeight: number };\n resize_row_end: { row: number; rowHeight: number };\n change_header_position: {\n source: CellAddress;\n target: CellAddress;\n movingColumnOrRow?: 'column' | 'row';\n event: Event;\n };\n change_header_position_start: {\n col: number;\n row: number;\n x: number;\n y: number;\n backX: number;\n lineX: number;\n backY: number;\n lineY: number;\n event: Event;\n movingColumnOrRow?: 'column' | 'row';\n };\n changing_header_position: {\n col: number;\n row: number;\n x: number;\n y: number;\n backX: number;\n lineX: number;\n backY: number;\n lineY: number;\n event: Event;\n movingColumnOrRow?: 'column' | 'row';\n };\n change_header_position_fail: {\n source: CellAddress;\n target: CellAddress;\n movingColumnOrRow?: 'column' | 'row';\n event: Event;\n };\n sort_click: {\n field: FieldDef;\n order: SortOrder;\n event: Event;\n };\n after_sort: {\n field: FieldDef;\n order: SortOrder;\n event: Event;\n };\n freeze_click: { col: number; row: number; fields: FieldDef[]; colCount: number };\n dropdown_menu_click: DropDownMenuEventArgs;\n\n mouseover_chart_symbol: MousePointerSparklineEvent;\n\n drag_select_end: MousePointerMultiCellEvent;\n selected_changed: {\n col: number;\n row: number;\n ranges: CellRange[];\n };\n copy_data: { cellRange: CellRange[]; copyData: string; isCut: boolean };\n drillmenu_click: DrillMenuEventInfo;\n\n dropdown_icon_click: CellAddress & { event: Event };\n dropdown_menu_clear: CellAddress;\n\n show_menu: {\n x: number;\n y: number;\n col: number;\n row: number;\n type: 'dropDown' | 'contextmenu' | 'custom';\n };\n hide_menu: [];\n icon_click: {\n name: string;\n col: number;\n row: number;\n x: number;\n y: number;\n funcType?: IconFuncTypeEnum | string;\n icon: Icon;\n event: Event;\n };\n\n pivot_sort_click: {\n col: number;\n row: number;\n order: SortOrder;\n dimensionInfo: IDimensionInfo[];\n cellLocation: CellLocation;\n event: Event;\n };\n tree_hierarchy_state_change: {\n col: number;\n row: number;\n changeAll?: boolean;\n hierarchyState: HierarchyState;\n dimensionInfo?: IDimensionInfo[];\n /**整条数据-原始数据 */\n originData?: any;\n cellLocation?: CellLocation;\n };\n vchart_event_type: {\n eventName: string;\n col: number;\n row: number;\n chartEventArguments: any;\n };\n //datasource部分的事件\n change_order: [];\n source_length_update: number;\n\n legend_item_click: { model: any; value: any; event: PointerEvent };\n legend_item_hover: { model: any; value: any; event: PointerEvent };\n legend_item_unHover: { model: any; value: any; event: PointerEvent };\n legend_change: { model: any; value: any; event: PointerEvent };\n\n mouseenter_axis: MousePointerCellEvent & { axisPosition: 'left' | 'right' | 'top' | 'bottom' };\n mouseleave_axis: MousePointerCellEvent & { axisPosition: 'left' | 'right' | 'top' | 'bottom' };\n\n checkbox_state_change: MousePointerCellEvent & { checked: boolean };\n radio_state_change: MousePointerCellEvent & { radioIndexInCell: number | undefined };\n switch_state_change: MousePointerCellEvent & { checked: boolean };\n before_init: { options: BaseTableConstructorOptions; container: HTMLElement | null };\n before_update_option: { options: BaseTableConstructorOptions; container: HTMLElement | null };\n before_set_size: { width: number; height: number };\n after_render: null;\n initialized: null;\n updated: null;\n after_update_cell_content_width: {\n col: number;\n row: number;\n cellHeight: number;\n cellGroup: Group;\n padding: [number, number, number, number];\n textBaseline: CanvasTextBaseline;\n };\n\n after_update_select_border_height: {\n startRow: number;\n endRow: number;\n currentHeight: number;\n selectComp: { rect: any; fillhandle?: any; role: string };\n };\n\n change_cell_value: {\n col: number;\n row: number;\n rawValue: string | number;\n currentValue: string | number;\n changedValue: string | number;\n };\n\n mousedown_fill_handle: {};\n drag_fill_handle_end: { direction?: 'top' | 'bottom' | 'left' | 'right' };\n dblclick_fill_handle: {};\n\n empty_tip_click: {};\n empty_tip_dblclick: {};\n\n button_click: {\n col: number;\n row: number;\n event: Event;\n };\n before_cache_chart_image: { chartInstance: any };\n pasted_data: {\n col: number;\n row: number;\n pasteData: (string | number)[][];\n changedCellResults: boolean[][];\n };\n plugin_event: {\n event: any;\n plugin: any;\n pluginEventInfo: any;\n };\n\n add_record: {\n records: any[];\n recordIndex?: number | number[];\n recordCount: number;\n };\n\n delete_record: {\n recordIndexs: number[] | number[][];\n rowIndexs: number[];\n deletedCount: number;\n };\n\n update_record: {\n records: any[];\n recordIndexs: (number | number[])[];\n updateCount: number;\n };\n add_column: {\n columnIndex: number;\n columnCount: number;\n columns: ColumnsDefine;\n };\n delete_column: {\n // deleteBeforeColumns: ColumnsDefine;\n deleteColIndexs: number[];\n columns: ColumnsDefine;\n };\n}\nexport interface DrillMenuEventInfo {\n dimensionKey: string | number;\n title: string;\n drillDown: boolean;\n drillUp: boolean;\n col: number;\n row: number;\n event: Event;\n}\nexport interface TableEventHandlersReturnMap {\n selected_cell: void;\n selected_clear: void;\n click_cell: void;\n dblclick_cell: void;\n mouseenter_table: void;\n mouseleave_table: void;\n mousedown_table: void;\n mousemove_table: void;\n mouseenter_cell: void;\n mouseleave_cell: void;\n // mouseover_cell: void;\n mouseout_cell: void;\n mousemove_cell: void;\n mousedown_cell: void;\n mouseup_cell: void;\n contextmenu_cell: void;\n contextmenu_canvas: void;\n before_keydown: void;\n keydown: void;\n scroll: void;\n can_scroll: void | boolean;\n focus_table: void;\n blur_table: void;\n resize_column: void;\n resize_column_end: void;\n resize_row: void;\n resize_row_end: void;\n change_header_position: void;\n change_header_position_start: void;\n changing_header_position: void;\n change_header_position_fail: void;\n sort_click: boolean;\n after_sort: void;\n freeze_click: void;\n dropdown_menu_click: void;\n\n mouseover_chart_symbol: void;\n drag_select_end: void;\n selected_changed: void;\n copy_data: void;\n drillmenu_click: void;\n\n dropdown_icon_click: void;\n dropdown_menu_clear: void;\n\n show_menu: void;\n hide_menu: void;\n icon_click: void;\n\n pivot_sort_click: void;\n\n tree_hierarchy_state_change: void;\n\n vchart_event_type: void;\n //datasource部分的事件\n change_order: void;\n source_length_update: void;\n legend_item_click: void;\n legend_item_hover: void;\n legend_item_unHover: void;\n legend_change: void;\n\n mouseenter_axis: void;\n mouseleave_axis: void;\n\n checkbox_state_change: void;\n radio_state_change: void;\n switch_state_change: void;\n before_init: void;\n before_update_option: void;\n before_set_size: void;\n after_render: void;\n initialized: void;\n updated: void;\n after_update_cell_content_width: void;\n\n after_update_select_border_height: void;\n change_cell_value: void;\n mousedown_fill_handle: void;\n drag_fill_handle_end: void;\n dblclick_fill_handle: void;\n\n scroll_vertical_end: void;\n\n scroll_horizontal_end: void;\n\n empty_tip_click: void;\n empty_tip_dblclick: void;\n\n button_click: void;\n before_cache_chart_image: void;\n pasted_data: void;\n plugin_event: void;\n\n add_record: void;\n delete_record: void;\n update_record: void;\n add_column: void;\n delete_column: void;\n\n filter_menu_show: { col: number; row: number };\n filter_menu_hide: { col: number; row: number };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ts-types/events.ts"],"names":[],"mappings":"","file":"events.js","sourcesContent":["import type {\n CellAddress,\n CellRange,\n CellLocation,\n FieldDef,\n CellAddressWithBound,\n ListTableConstructorOptions,\n PivotTableConstructorOptions\n} from './table-engine';\nimport type { DropDownMenuEventArgs, MenuListItem, PivotInfo } from './menu';\n\nimport type { IDimensionInfo, MergeCellInfo, RectProps, SortOrder } from './common';\nimport type { IconFuncTypeEnum, CellInfo, HierarchyState, ColumnsDefine } from '.';\nimport type { Icon } from '../scenegraph/graphic/icon';\nimport type { FederatedPointerEvent, Group, IEventTarget } from './../vrender';\nimport type { BaseTableConstructorOptions, BaseTableAPI } from './base-table';\n\nexport type KeyboardEventListener = (e: KeyboardEvent) => void;\nexport type TableEventListener<TYPE extends keyof TableEventHandlersEventArgumentMap> = (\n args: TableEventHandlersEventArgumentMap[TYPE]\n) => TableEventHandlersReturnMap[TYPE]; //AnyFunction;\nexport type EventListenerId = number;\n\nexport type SelectedCellEvent = CellAddress & {\n ranges: CellRange[];\n};\n\n// export type MouseCellEvent = CellAddress & {\n// event: MouseEvent | PointerEvent | TouchEvent;\n// };\n\nexport type MenuEvent = CellAddress & {\n dropDownMenu: MenuListItem[];\n pivotInfo: PivotInfo;\n};\n\nexport type TouchCellEvent = CellAddress & {\n event: TouchEvent;\n};\n\nexport type KeydownEvent = {\n keyCode: number;\n code: string;\n event: KeyboardEvent;\n stopCellMoving?: () => void;\n scaleRatio?: number;\n};\n\nexport type MousePointerCellEvent = CellAddressWithBound &\n CellInfo & {\n scaleRatio?: number;\n targetIcon?: { name: string; position: RectProps; funcType: string };\n event?: MouseEvent | PointerEvent | TouchEvent;\n federatedEvent?: FederatedPointerEvent;\n target: IEventTarget | undefined;\n\n mergeCellInfo?: MergeCellInfo;\n };\n// 多单元格的事件传出参数 需要将当前鼠标处的单元格的信息FocusedCellInfo也带着\nexport type MousePointerMultiCellEvent = MousePointerCellEvent & {\n cells: CellInfo[][];\n // menuKey?: string;\n};\n\nexport type MousePointerSparklineEvent = MousePointerCellEvent & {\n sparkline: {\n pointData: any;\n };\n};\n\nexport interface TableEventHandlersEventArgumentMap {\n selected_cell: SelectedCellEvent;\n selected_clear: {};\n click_cell: MousePointerCellEvent;\n dblclick_cell: MousePointerCellEvent;\n mouseenter_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mouseleave_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mousedown_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mousemove_table: MousePointerCellEvent;\n mouseenter_cell: MousePointerCellEvent;\n mouseleave_cell: MousePointerCellEvent;\n mousemove_cell: MousePointerCellEvent;\n mousedown_cell: MousePointerCellEvent;\n mouseup_cell: MousePointerCellEvent;\n contextmenu_cell: MousePointerMultiCellEvent;\n contextmenu_canvas: MousePointerCellEvent;\n before_keydown: KeydownEvent;\n keydown: KeydownEvent;\n scroll: {\n event: WheelEvent;\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n scrollDirection: 'horizontal' | 'vertical';\n scrollRatioX?: number;\n scrollRatioY?: number;\n dx?: number;\n dy?: number;\n };\n can_scroll: {\n event: WheelEvent;\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n scrollDirection: 'horizontal' | 'vertical';\n scrollRatioX?: number;\n scrollRatioY?: number;\n dx?: number;\n dy?: number;\n };\n scroll_vertical_end: {\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n };\n scroll_horizontal_end: {\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n };\n resize_column: { col: number; colWidth: number };\n resize_column_end: { col: number; colWidths: number[] };\n resize_row: { row: number; rowHeight: number };\n resize_row_end: { row: number; rowHeight: number };\n change_header_position: {\n source: CellAddress;\n target: CellAddress;\n movingColumnOrRow?: 'column' | 'row';\n event: Event;\n };\n change_header_position_start: {\n col: number;\n row: number;\n x: number;\n y: number;\n backX: number;\n lineX: number;\n backY: number;\n lineY: number;\n event: Event;\n movingColumnOrRow?: 'column' | 'row';\n };\n changing_header_position: {\n col: number;\n row: number;\n x: number;\n y: number;\n backX: number;\n lineX: number;\n backY: number;\n lineY: number;\n event: Event;\n movingColumnOrRow?: 'column' | 'row';\n };\n change_header_position_fail: {\n source: CellAddress;\n target: CellAddress;\n movingColumnOrRow?: 'column' | 'row';\n event: Event;\n };\n sort_click: {\n field: FieldDef;\n order: SortOrder;\n event: Event;\n };\n after_sort: {\n field: FieldDef;\n order: SortOrder;\n event: Event;\n };\n freeze_click: { col: number; row: number; fields: FieldDef[]; colCount: number };\n dropdown_menu_click: DropDownMenuEventArgs;\n\n mouseover_chart_symbol: MousePointerSparklineEvent;\n\n drag_select_end: MousePointerMultiCellEvent;\n selected_changed: {\n col: number;\n row: number;\n ranges: CellRange[];\n };\n copy_data: { cellRange: CellRange[]; copyData: string; isCut: boolean };\n drillmenu_click: DrillMenuEventInfo;\n\n dropdown_icon_click: CellAddress & { event: Event };\n dropdown_menu_clear: CellAddress;\n\n show_menu: {\n x: number;\n y: number;\n col: number;\n row: number;\n type: 'dropDown' | 'contextmenu' | 'custom';\n };\n hide_menu: [];\n icon_click: {\n name: string;\n col: number;\n row: number;\n x: number;\n y: number;\n funcType?: IconFuncTypeEnum | string;\n icon: Icon;\n event: Event;\n };\n\n pivot_sort_click: {\n col: number;\n row: number;\n order: SortOrder;\n dimensionInfo: IDimensionInfo[];\n cellLocation: CellLocation;\n event: Event;\n };\n tree_hierarchy_state_change: {\n col: number;\n row: number;\n changeAll?: boolean;\n hierarchyState: HierarchyState;\n dimensionInfo?: IDimensionInfo[];\n /**整条数据-原始数据 */\n originData?: any;\n cellLocation?: CellLocation;\n };\n vchart_event_type: {\n eventName: string;\n col: number;\n row: number;\n chartEventArguments: any;\n };\n //datasource部分的事件\n change_order: [];\n source_length_update: number;\n\n legend_item_click: { model: any; value: any; event: PointerEvent };\n legend_item_hover: { model: any; value: any; event: PointerEvent };\n legend_item_unHover: { model: any; value: any; event: PointerEvent };\n legend_change: { model: any; value: any; event: PointerEvent };\n\n mouseenter_axis: MousePointerCellEvent & { axisPosition: 'left' | 'right' | 'top' | 'bottom' };\n mouseleave_axis: MousePointerCellEvent & { axisPosition: 'left' | 'right' | 'top' | 'bottom' };\n\n checkbox_state_change: MousePointerCellEvent & { checked: boolean };\n radio_state_change: MousePointerCellEvent & { radioIndexInCell: number | undefined };\n switch_state_change: MousePointerCellEvent & { checked: boolean };\n before_init: { options: BaseTableConstructorOptions; container: HTMLElement | null };\n before_update_option: { options: BaseTableConstructorOptions; container: HTMLElement | null };\n before_set_size: { width: number; height: number };\n after_render: null;\n initialized: null;\n updated: null;\n after_update_cell_content_width: {\n col: number;\n row: number;\n cellHeight: number;\n cellGroup: Group;\n padding: [number, number, number, number];\n textBaseline: CanvasTextBaseline;\n };\n\n after_update_select_border_height: {\n startRow: number;\n endRow: number;\n currentHeight: number;\n selectComp: { rect: any; fillhandle?: any; role: string };\n };\n\n change_cell_value: {\n col: number;\n row: number;\n recordIndex?: number | number[];\n field?: FieldDef;\n rawValue: string | number;\n currentValue: string | number;\n changedValue: string | number;\n };\n change_cell_values: {\n values: {\n col: number;\n row: number;\n recordIndex?: number | number[];\n field?: FieldDef;\n rawValue: string | number;\n currentValue: string | number;\n changedValue: string | number;\n }[];\n };\n\n mousedown_fill_handle: {};\n drag_fill_handle_end: { direction?: 'top' | 'bottom' | 'left' | 'right' };\n dblclick_fill_handle: {};\n\n empty_tip_click: {};\n empty_tip_dblclick: {};\n\n button_click: {\n col: number;\n row: number;\n event: Event;\n };\n before_cache_chart_image: { chartInstance: any };\n pasted_data: {\n col: number;\n row: number;\n pasteData: (string | number)[][];\n changedCellResults: boolean[][];\n };\n plugin_event: {\n event: any;\n plugin: any;\n pluginEventInfo: any;\n };\n\n add_record: {\n records: any[];\n recordIndex?: number | number[];\n recordCount: number;\n };\n\n delete_record: {\n recordIndexs: number[] | number[][];\n records: any[];\n rowIndexs: number[];\n deletedCount: number;\n };\n\n update_record: {\n records: any[];\n recordIndexs: (number | number[])[];\n updateCount: number;\n };\n add_column: {\n columnIndex: number;\n columnCount: number;\n columns: ColumnsDefine;\n };\n delete_column: {\n // deleteBeforeColumns: ColumnsDefine;\n deleteColIndexs: number[];\n columns: ColumnsDefine;\n };\n}\nexport interface DrillMenuEventInfo {\n dimensionKey: string | number;\n title: string;\n drillDown: boolean;\n drillUp: boolean;\n col: number;\n row: number;\n event: Event;\n}\nexport interface TableEventHandlersReturnMap {\n selected_cell: void;\n selected_clear: void;\n click_cell: void;\n dblclick_cell: void;\n mouseenter_table: void;\n mouseleave_table: void;\n mousedown_table: void;\n mousemove_table: void;\n mouseenter_cell: void;\n mouseleave_cell: void;\n // mouseover_cell: void;\n mouseout_cell: void;\n mousemove_cell: void;\n mousedown_cell: void;\n mouseup_cell: void;\n contextmenu_cell: void;\n contextmenu_canvas: void;\n before_keydown: void;\n keydown: void;\n scroll: void;\n can_scroll: void | boolean;\n focus_table: void;\n blur_table: void;\n resize_column: void;\n resize_column_end: void;\n resize_row: void;\n resize_row_end: void;\n change_header_position: void;\n change_header_position_start: void;\n changing_header_position: void;\n change_header_position_fail: void;\n sort_click: boolean;\n after_sort: void;\n freeze_click: void;\n dropdown_menu_click: void;\n\n mouseover_chart_symbol: void;\n drag_select_end: void;\n selected_changed: void;\n copy_data: void;\n drillmenu_click: void;\n\n dropdown_icon_click: void;\n dropdown_menu_clear: void;\n\n show_menu: void;\n hide_menu: void;\n icon_click: void;\n\n pivot_sort_click: void;\n\n tree_hierarchy_state_change: void;\n\n vchart_event_type: void;\n //datasource部分的事件\n change_order: void;\n source_length_update: void;\n legend_item_click: void;\n legend_item_hover: void;\n legend_item_unHover: void;\n legend_change: void;\n\n mouseenter_axis: void;\n mouseleave_axis: void;\n\n checkbox_state_change: void;\n radio_state_change: void;\n switch_state_change: void;\n before_init: void;\n before_update_option: void;\n before_set_size: void;\n after_render: void;\n initialized: void;\n updated: void;\n after_update_cell_content_width: void;\n\n after_update_select_border_height: void;\n change_cell_value: void;\n change_cell_values: void;\n mousedown_fill_handle: void;\n drag_fill_handle_end: void;\n dblclick_fill_handle: void;\n\n scroll_vertical_end: void;\n\n scroll_horizontal_end: void;\n\n empty_tip_click: void;\n empty_tip_dblclick: void;\n\n button_click: void;\n before_cache_chart_image: void;\n pasted_data: void;\n plugin_event: void;\n\n add_record: void;\n delete_record: void;\n update_record: void;\n add_column: void;\n delete_column: void;\n\n filter_menu_show: { col: number; row: number };\n filter_menu_hide: { col: number; row: number };\n}\n"]}
|