@visactor/vtable 0.16.3 → 0.16.4-alpha.1
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/core/BaseTable.js +1 -1
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/data/DataSource.js +2 -1
- package/cjs/data/DataSource.js.map +1 -1
- package/cjs/event/scroll.js +0 -1
- package/cjs/event/util.js +1 -0
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/scenegraph/layout/compute-row-height.js +1 -1
- package/cjs/scenegraph/layout/compute-row-height.js.map +1 -1
- package/cjs/state/hover/is-cell-hover.d.ts +1 -1
- package/cjs/state/hover/is-cell-hover.js +8 -5
- package/cjs/state/hover/is-cell-hover.js.map +1 -1
- package/cjs/tools/diff-cell.d.ts +1 -1
- package/cjs/tools/diff-cell.js +32 -2
- package/cjs/tools/diff-cell.js.map +1 -1
- package/cjs/ts-types/base-table.d.ts +1 -0
- package/cjs/ts-types/base-table.js.map +1 -1
- package/dist/vtable.js +51 -41
- package/dist/vtable.min.js +2 -2
- package/es/core/BaseTable.js +1 -1
- package/es/core/BaseTable.js.map +1 -1
- package/es/data/DataSource.js +3 -2
- package/es/data/DataSource.js.map +1 -1
- package/es/event/scroll.js +1 -2
- package/es/event/util.js +2 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/scenegraph/layout/compute-row-height.js +1 -1
- package/es/scenegraph/layout/compute-row-height.js.map +1 -1
- package/es/state/hover/is-cell-hover.d.ts +1 -1
- package/es/state/hover/is-cell-hover.js +8 -5
- package/es/state/hover/is-cell-hover.js.map +1 -1
- package/es/tools/diff-cell.d.ts +1 -1
- package/es/tools/diff-cell.js +31 -1
- package/es/tools/diff-cell.js.map +1 -1
- package/es/ts-types/base-table.d.ts +1 -0
- package/es/ts-types/base-table.js.map +1 -1
- package/package.json +4 -4
|
@@ -12,16 +12,17 @@ function getCellHoverColor(cellGroup, table) {
|
|
|
12
12
|
if ("cell" === cellGroup.role && (0, vutils_1.isValid)(cellGroup.mergeStartCol) && (0,
|
|
13
13
|
vutils_1.isValid)(cellGroup.mergeStartRow) && (0, vutils_1.isValid)(cellGroup.mergeEndCol) && (0,
|
|
14
14
|
vutils_1.isValid)(cellGroup.mergeEndRow)) for (let col = cellGroup.mergeStartCol; col <= cellGroup.mergeEndCol; col++) for (let row = cellGroup.mergeStartRow; row <= cellGroup.mergeEndRow; row++) {
|
|
15
|
-
const key = isCellHover(table.stateManager, col, row);
|
|
15
|
+
const key = isCellHover(table.stateManager, col, row, cellGroup);
|
|
16
16
|
!key || colorKey && "cellBgColor" !== key || (colorKey = key);
|
|
17
|
-
} else "cell" === cellGroup.role && (colorKey = isCellHover(table.stateManager, cellGroup.col, cellGroup.row));
|
|
17
|
+
} else "cell" === cellGroup.role && (colorKey = isCellHover(table.stateManager, cellGroup.col, cellGroup.row, cellGroup));
|
|
18
18
|
if (!colorKey) return;
|
|
19
19
|
const layout = table.internalProps.layoutMap;
|
|
20
20
|
layout.isCornerHeader(cellGroup.col, cellGroup.row) ? hoverStyle = (null === (_a = table.theme.cornerHeaderStyle) || void 0 === _a ? void 0 : _a.hover) || (null === (_b = table.theme.headerStyle) || void 0 === _b ? void 0 : _b.hover) : layout.isColumnHeader(cellGroup.col, cellGroup.row) ? hoverStyle = null === (_c = table.theme.headerStyle) || void 0 === _c ? void 0 : _c.hover : layout.isRowHeader(cellGroup.col, cellGroup.row) ? hoverStyle = null === (_d = table.theme.rowHeaderStyle) || void 0 === _d ? void 0 : _d.hover : layout.isBottomFrozenRow(cellGroup.col, cellGroup.row) ? hoverStyle = (null === (_e = table.theme.bottomFrozenStyle) || void 0 === _e ? void 0 : _e.hover) || (table.isListTable() ? null === (_f = table.theme.bodyStyle) || void 0 === _f ? void 0 : _f.hover : null === (_g = table.theme.headerStyle) || void 0 === _g ? void 0 : _g.hover) : layout.isRightFrozenColumn(cellGroup.col, cellGroup.row) ? hoverStyle = (null === (_h = table.theme.rightFrozenStyle) || void 0 === _h ? void 0 : _h.hover) || (table.isListTable() ? null === (_j = table.theme.bodyStyle) || void 0 === _j ? void 0 : _j.hover : null === (_k = table.theme.rowHeaderStyle) || void 0 === _k ? void 0 : _k.hover) : table.isHeader(cellGroup.col, cellGroup.row) || (hoverStyle = null === (_l = table.theme.bodyStyle) || void 0 === _l ? void 0 : _l.hover);
|
|
21
21
|
return (0, get_prop_1.getProp)(colorKey, hoverStyle, cellGroup.col, cellGroup.row, table);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
function isCellHover(state, col, row) {
|
|
24
|
+
function isCellHover(state, col, row, cellGroup) {
|
|
25
|
+
var _a;
|
|
25
26
|
const {highlightScope: highlightScope, disableHeader: disableHeader, cellPos: cellPos} = state.hover, table = state.table, isHeader = table.isHeader(col, row);
|
|
26
27
|
if (isHeader && disableHeader) return;
|
|
27
28
|
let hoverMode;
|
|
@@ -29,9 +30,11 @@ function isCellHover(state, col, row) {
|
|
|
29
30
|
hoverMode) {
|
|
30
31
|
let cellDisable;
|
|
31
32
|
if (isHeader) {
|
|
32
|
-
|
|
33
|
+
const define = table.getHeaderDefine(col, row);
|
|
34
|
+
cellDisable = null == define ? void 0 : define.disableHeaderHover, cellGroup.firstChild && "axis" === cellGroup.firstChild.name && (null === (_a = table.options.hover) || void 0 === _a ? void 0 : _a.disableAxisHover) && (cellDisable = !0);
|
|
33
35
|
} else {
|
|
34
|
-
|
|
36
|
+
const define = table.getBodyColumnDefine(col, row);
|
|
37
|
+
cellDisable = null == define ? void 0 : define.disableHover;
|
|
35
38
|
}
|
|
36
39
|
cellDisable && (hoverMode = void 0);
|
|
37
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/state/hover/is-cell-hover.ts"],"names":[],"mappings":";;;AAEA,8DAA0D;AAE1D,6CAAgD;AAChD,6CAA2C;AAE3C,SAAgB,iBAAiB,CAAC,SAAgB,EAAE,KAAmB;;IACrE,IAAI,QAAQ,CAAC;IACb,IACE,SAAS,CAAC,IAAI,KAAK,MAAM;QACzB,IAAA,gBAAO,EAAC,SAAS,CAAC,aAAa,CAAC;QAChC,IAAA,gBAAO,EAAC,SAAS,CAAC,aAAa,CAAC;QAChC,IAAA,gBAAO,EAAC,SAAS,CAAC,WAAW,CAAC;QAC9B,IAAA,gBAAO,EAAC,SAAS,CAAC,WAAW,CAAC,EAC9B;QACA,KAAK,IAAI,GAAG,GAAG,SAAS,CAAC,aAAa,EAAE,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE;YAC3E,KAAK,IAAI,GAAG,GAAG,SAAS,CAAC,aAAa,EAAE,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE;gBAC3E,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/state/hover/is-cell-hover.ts"],"names":[],"mappings":";;;AAEA,8DAA0D;AAE1D,6CAAgD;AAChD,6CAA2C;AAE3C,SAAgB,iBAAiB,CAAC,SAAgB,EAAE,KAAmB;;IACrE,IAAI,QAAQ,CAAC;IACb,IACE,SAAS,CAAC,IAAI,KAAK,MAAM;QACzB,IAAA,gBAAO,EAAC,SAAS,CAAC,aAAa,CAAC;QAChC,IAAA,gBAAO,EAAC,SAAS,CAAC,aAAa,CAAC;QAChC,IAAA,gBAAO,EAAC,SAAS,CAAC,WAAW,CAAC;QAC9B,IAAA,gBAAO,EAAC,SAAS,CAAC,WAAW,CAAC,EAC9B;QACA,KAAK,IAAI,GAAG,GAAG,SAAS,CAAC,aAAa,EAAE,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE;YAC3E,KAAK,IAAI,GAAG,GAAG,SAAS,CAAC,aAAa,EAAE,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE;gBAC3E,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBACjE,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ,IAAI,GAAG,KAAK,aAAa,CAAC,EAAE;oBAC/C,QAAQ,GAAG,GAAG,CAAC;iBAChB;aACF;SACF;KACF;SAAM,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE;QACpC,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;KACrF;IAED,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,UAAU,CAAC;IACf,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC;IAC7C,IAAI,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE;QACvD,UAAU,GAAG,CAAA,MAAA,KAAK,CAAC,KAAK,CAAC,iBAAiB,0CAAE,KAAK,MAAI,MAAA,KAAK,CAAC,KAAK,CAAC,WAAW,0CAAE,KAAK,CAAA,CAAC;KACrF;SAAM,IAAI,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE;QAC9D,UAAU,GAAG,MAAA,KAAK,CAAC,KAAK,CAAC,WAAW,0CAAE,KAAK,CAAC;KAC7C;SAAM,IAAI,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE;QAC3D,UAAU,GAAG,MAAA,KAAK,CAAC,KAAK,CAAC,cAAc,0CAAE,KAAK,CAAC;KAChD;SAAM,IAAI,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE;QACjE,UAAU;YACR,CAAA,MAAA,KAAK,CAAC,KAAK,CAAC,iBAAiB,0CAAE,KAAK;gBACpC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAA,KAAK,CAAC,KAAK,CAAC,SAAS,0CAAE,KAAK,CAAC,CAAC,CAAC,MAAA,KAAK,CAAC,KAAK,CAAC,WAAW,0CAAE,KAAK,CAAC,CAAC;KACzF;SAAM,IAAI,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE;QACnE,UAAU;YACR,CAAA,MAAA,KAAK,CAAC,KAAK,CAAC,gBAAgB,0CAAE,KAAK;gBACnC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAA,KAAK,CAAC,KAAK,CAAC,SAAS,0CAAE,KAAK,CAAC,CAAC,CAAC,MAAA,KAAK,CAAC,KAAK,CAAC,cAAc,0CAAE,KAAK,CAAC,CAAC;KAC5F;SAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE;QACxD,UAAU,GAAG,MAAA,KAAK,CAAC,KAAK,CAAC,SAAS,0CAAE,KAAK,CAAC;KAC3C;IACD,MAAM,SAAS,GAAG,IAAA,kBAAO,EAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrF,OAAO,SAAS,CAAC;AACnB,CAAC;AA9CD,8CA8CC;AAED,SAAgB,WAAW,CAAC,KAAmB,EAAE,GAAW,EAAE,GAAW,EAAE,SAAgB;;IACzF,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;IAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,QAAQ,IAAI,aAAa,EAAE;QAC7B,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,SAAS,CAAC;IACd,IAAI,cAAc,KAAK,yBAAc,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,EAAE;QAC1F,SAAS,GAAG,aAAa,CAAC;KAC3B;SAAM,IAAI,cAAc,KAAK,yBAAc,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,EAAE;QAC1E,SAAS,GAAG,qBAAqB,CAAC;KACnC;SAAM,IAAI,cAAc,KAAK,yBAAc,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,EAAE;QACvE,SAAS,GAAG,kBAAkB,CAAC;KAChC;SAAM,IAAI,cAAc,KAAK,yBAAc,CAAC,KAAK,EAAE;QAClD,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,EAAE;YAC9C,SAAS,GAAG,aAAa,CAAC;SAC3B;aAAM,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,EAAE;YAC9B,SAAS,GAAG,qBAAqB,CAAC;SACnC;aAAM,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,EAAE;YAC9B,SAAS,GAAG,kBAAkB,CAAC;SAChC;KACF;IAED,IAAI,SAAS,EAAE;QACb,IAAI,WAAW,CAAC;QAChB,IAAI,QAAQ,EAAE;YACZ,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/C,WAAW,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,kBAAkB,CAAC;YAEzC,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,KAAI,MAAA,KAAK,CAAC,OAAO,CAAC,KAAK,0CAAE,gBAAgB,CAAA,EAAE;gBACzG,WAAW,GAAG,IAAI,CAAC;aACpB;SACF;aAAM;YACL,MAAM,MAAM,GAAG,KAAK,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACnD,WAAW,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAC;SACpC;QAED,IAAI,WAAW,EAAE;YACf,SAAS,GAAG,SAAS,CAAC;SACvB;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AA9CD,kCA8CC","file":"is-cell-hover.js","sourcesContent":["import type { StateManager } from '../state';\nimport type { Group } from '../../scenegraph/graphic/group';\nimport { getProp } from '../../scenegraph/utils/get-prop';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { HighlightScope } from '../../ts-types';\nimport { isValid } from '@visactor/vutils';\n\nexport function getCellHoverColor(cellGroup: Group, table: BaseTableAPI): string | undefined {\n let colorKey;\n if (\n cellGroup.role === 'cell' &&\n isValid(cellGroup.mergeStartCol) &&\n isValid(cellGroup.mergeStartRow) &&\n isValid(cellGroup.mergeEndCol) &&\n isValid(cellGroup.mergeEndRow)\n ) {\n for (let col = cellGroup.mergeStartCol; col <= cellGroup.mergeEndCol; col++) {\n for (let row = cellGroup.mergeStartRow; row <= cellGroup.mergeEndRow; row++) {\n const key = isCellHover(table.stateManager, col, row, cellGroup);\n if (key && (!colorKey || key === 'cellBgColor')) {\n colorKey = key;\n }\n }\n }\n } else if (cellGroup.role === 'cell') {\n colorKey = isCellHover(table.stateManager, cellGroup.col, cellGroup.row, cellGroup);\n }\n\n if (!colorKey) {\n return undefined;\n }\n\n let hoverStyle;\n const layout = table.internalProps.layoutMap;\n if (layout.isCornerHeader(cellGroup.col, cellGroup.row)) {\n hoverStyle = table.theme.cornerHeaderStyle?.hover || table.theme.headerStyle?.hover;\n } else if (layout.isColumnHeader(cellGroup.col, cellGroup.row)) {\n hoverStyle = table.theme.headerStyle?.hover;\n } else if (layout.isRowHeader(cellGroup.col, cellGroup.row)) {\n hoverStyle = table.theme.rowHeaderStyle?.hover;\n } else if (layout.isBottomFrozenRow(cellGroup.col, cellGroup.row)) {\n hoverStyle =\n table.theme.bottomFrozenStyle?.hover ||\n (table.isListTable() ? table.theme.bodyStyle?.hover : table.theme.headerStyle?.hover);\n } else if (layout.isRightFrozenColumn(cellGroup.col, cellGroup.row)) {\n hoverStyle =\n table.theme.rightFrozenStyle?.hover ||\n (table.isListTable() ? table.theme.bodyStyle?.hover : table.theme.rowHeaderStyle?.hover);\n } else if (!table.isHeader(cellGroup.col, cellGroup.row)) {\n hoverStyle = table.theme.bodyStyle?.hover;\n }\n const fillColor = getProp(colorKey, hoverStyle, cellGroup.col, cellGroup.row, table);\n return fillColor;\n}\n\nexport function isCellHover(state: StateManager, col: number, row: number, cellGroup: Group): string | undefined {\n const { highlightScope, disableHeader, cellPos } = state.hover;\n const table = state.table;\n\n const isHeader = table.isHeader(col, row);\n if (isHeader && disableHeader) {\n return undefined;\n }\n\n let hoverMode;\n if (highlightScope === HighlightScope.single && cellPos.col === col && cellPos.row === row) {\n hoverMode = 'cellBgColor';\n } else if (highlightScope === HighlightScope.column && cellPos.col === col) {\n hoverMode = 'inlineColumnBgColor';\n } else if (highlightScope === HighlightScope.row && cellPos.row === row) {\n hoverMode = 'inlineRowBgColor';\n } else if (highlightScope === HighlightScope.cross) {\n if (cellPos.col === col && cellPos.row === row) {\n hoverMode = 'cellBgColor';\n } else if (cellPos.col === col) {\n hoverMode = 'inlineColumnBgColor';\n } else if (cellPos.row === row) {\n hoverMode = 'inlineRowBgColor';\n }\n }\n\n if (hoverMode) {\n let cellDisable;\n if (isHeader) {\n const define = table.getHeaderDefine(col, row);\n cellDisable = define?.disableHeaderHover;\n\n if (cellGroup.firstChild && cellGroup.firstChild.name === 'axis' && table.options.hover?.disableAxisHover) {\n cellDisable = true;\n }\n } else {\n const define = table.getBodyColumnDefine(col, row);\n cellDisable = define?.disableHover;\n }\n\n if (cellDisable) {\n hoverMode = undefined;\n }\n }\n\n return hoverMode;\n}\n"]}
|
package/cjs/tools/diff-cell.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export declare function diffCellAddress(col: number, row: number, oldCellIds: nu
|
|
|
11
11
|
row: number;
|
|
12
12
|
}[];
|
|
13
13
|
};
|
|
14
|
-
export declare function
|
|
14
|
+
export declare function calculateArrayDiff(originalArray: (number | number[])[], targetArray: (number | number[])[]): {
|
|
15
15
|
add: number[];
|
|
16
16
|
remove: number[];
|
|
17
17
|
};
|
package/cjs/tools/diff-cell.js
CHANGED
|
@@ -54,8 +54,38 @@ function checkIndex(oldIndex, newIndex) {
|
|
|
54
54
|
return !0;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
function calculateArrayDiff(originalArray, targetArray) {
|
|
58
|
+
const add = [], remove = [], originalMap = new Map;
|
|
59
|
+
for (let i = 0; i < originalArray.length; i++) {
|
|
60
|
+
const element = originalArray[i], key = JSON.stringify(element);
|
|
61
|
+
originalMap.has(key) ? originalMap.get(key).push(i) : originalMap.set(key, [ i ]);
|
|
62
|
+
}
|
|
63
|
+
for (let i = 0; i < targetArray.length; i++) {
|
|
64
|
+
const element = targetArray[i], key = JSON.stringify(element);
|
|
65
|
+
if (originalMap.has(key)) {
|
|
66
|
+
const indices = originalMap.get(key);
|
|
67
|
+
indices.shift(), 0 === indices.length && originalMap.delete(key);
|
|
68
|
+
} else add.push(i);
|
|
69
|
+
}
|
|
70
|
+
for (let i = 0; i < originalArray.length; i++) {
|
|
71
|
+
const element = originalArray[i];
|
|
72
|
+
targetArray.some((item => isEqual(item, element))) || remove.push(i);
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
add: add,
|
|
76
|
+
remove: remove
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function isEqual(arr1, arr2) {
|
|
81
|
+
if (arr1 === arr2) return !0;
|
|
82
|
+
if (arr1.length !== arr2.length) return !1;
|
|
83
|
+
for (let i = 0; i < arr1.length; i++) if (arr1[i] !== arr2[i]) return !1;
|
|
84
|
+
return !0;
|
|
85
|
+
}
|
|
86
|
+
|
|
57
87
|
Object.defineProperty(exports, "__esModule", {
|
|
58
88
|
value: !0
|
|
59
|
-
}), exports.
|
|
60
|
-
exports.
|
|
89
|
+
}), exports.calculateArrayDiff = exports.diffCellAddress = void 0, exports.diffCellAddress = diffCellAddress,
|
|
90
|
+
exports.calculateArrayDiff = calculateArrayDiff;
|
|
61
91
|
//# sourceMappingURL=diff-cell.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/diff-cell.ts"],"names":[],"mappings":";;;AAIA,SAAgB,eAAe,CAC7B,GAAW,EACX,GAAW,EACX,UAAoB,EACpB,UAAoB,EACpB,wBAAuC,EACvC,MAA4B;IAE5B,MAAM,iBAAiB,GAAG,MAAM,CAAC,sBAAsB,CAAC;IAGxD,MAAM,gBAAgB,GAAG,EAAE,CAAC;IAC5B,MAAM,mBAAmB,GAAG,EAAE,CAAC;IAG/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;YAEvC,mBAAmB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;SACvD;KACF;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;YACvC,MAAM,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,iBAAiB,GAAG,CAAC,EAAE,CAAC;YAExD,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACpC;KACF;IACD,IAAI,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChD,IAAI,iBAAiB,GAAG,MAAM,CAAC,+BAA+B,CAAC,QAAQ,CAAC,CAAC;IACzE,MAAM,mBAAmB,GAAG,EAAE,CAAC;IAC/B,iBAAiB,IAAI,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACjE,OAAO,QAAQ,EAAE;QACf,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAChF,IAAI,QAAQ,EAAE;YACZ,iBAAiB,GAAG,MAAM,CAAC,+BAA+B,CAAC,QAAQ,CAAC,CAAC;YACrE,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC7C;KACF;IACD,OAAO;QACL,gBAAgB;QAChB,mBAAmB;QACnB,mBAAmB;KACpB,CAAC;AACJ,CAAC;AA5CD,0CA4CC;AAGD,
|
|
1
|
+
{"version":3,"sources":["../src/tools/diff-cell.ts"],"names":[],"mappings":"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","file":"diff-cell.js","sourcesContent":["import type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport type { CellAddress } from '../ts-types';\nimport type { LayoutObjectId } from '../ts-types/base-table';\n\nexport function diffCellAddress(\n col: number,\n row: number,\n oldCellIds: number[],\n newCellIds: number[],\n oldRowHeaderCellPositons: CellAddress[],\n layout: PivotHeaderLayoutMap\n) {\n const columnHeaderStart = layout.columnHeaderLevelCount;\n // const oldCellIds = oldCellIdsArr.map(oldCellId => oldCellId[0]);\n // const newCellIds = newCellIdsArr.map(oldCellId => oldCellId[0]);\n const addCellPositions = [];\n const removeCellPositions = [];\n // const updateCellIds: Set<LayoutObjectId> = new Set();\n // diff two array elements\n for (let i = 0; i < oldCellIds.length; i++) {\n if (!newCellIds.includes(oldCellIds[i])) {\n // updateCellIds.add(layout.getParentCellId(oldRowHeaderCellPositons[i].col, oldRowHeaderCellPositons[i].row));\n removeCellPositions.push(oldRowHeaderCellPositons[i]);\n }\n }\n for (let i = 0; i < newCellIds.length; i++) {\n if (!oldCellIds.includes(newCellIds[i])) {\n const newCellAddr = { col, row: columnHeaderStart + i }; // layout.getHeaderCellAdressById(newCellIds[i]);\n // updateCellIds.add(layout.getParentCellId(newCellAddr.col, newCellAddr.row));\n addCellPositions.push(newCellAddr);\n }\n }\n let parentId = layout.getParentCellId(col, row);\n let parentCellAddress = layout.getRowHeaderCellAddressByCellId(parentId);\n const updateCellPositions = [];\n parentCellAddress && updateCellPositions.push(parentCellAddress);\n while (parentId) {\n parentId = layout.getParentCellId(parentCellAddress.col, parentCellAddress.row);\n if (parentId) {\n parentCellAddress = layout.getRowHeaderCellAddressByCellId(parentId);\n updateCellPositions.push(parentCellAddress);\n }\n }\n return {\n addCellPositions,\n removeCellPositions,\n updateCellPositions\n };\n}\n\n// find diff between two arrays\nfunction diffCellIndices(oldIndexedData: (number | number[])[], currentIndexedData: (number | number[])[]) {\n const add = [];\n const remove = [];\n // find removed indices\n for (let i = 0; i < oldIndexedData.length; i++) {\n let removed = true;\n for (let j = 0; j < currentIndexedData.length; j++) {\n if (checkIndex(oldIndexedData[i], currentIndexedData[j])) {\n removed = false;\n break;\n }\n }\n if (removed) {\n remove.push(i);\n }\n }\n\n // find added indices\n for (let i = 0; i < currentIndexedData.length; i++) {\n let added = true;\n for (let j = 0; j < oldIndexedData.length; j++) {\n if (checkIndex(oldIndexedData[j], currentIndexedData[i])) {\n added = false;\n break;\n }\n }\n if (added) {\n add.push(i);\n }\n }\n return { add, remove };\n}\n\nfunction checkIndex(oldIndex: number | number[], newIndex: number | number[]): boolean {\n if (typeof oldIndex !== typeof newIndex) {\n return false;\n }\n if (typeof oldIndex === 'number' && typeof newIndex === 'number' && oldIndex !== newIndex) {\n return false;\n }\n if ((oldIndex as number[]).length !== (newIndex as number[]).length) {\n return false;\n }\n for (let i = 0; i < (oldIndex as number[]).length; i++) {\n if (oldIndex[i] !== newIndex[i]) {\n return false;\n }\n }\n return true;\n}\n\nexport function calculateArrayDiff(originalArray: (number | number[])[], targetArray: (number | number[])[]) {\n const add = [];\n const remove = [];\n\n const originalMap = new Map();\n for (let i = 0; i < originalArray.length; i++) {\n const element = originalArray[i];\n const key = JSON.stringify(element);\n if (originalMap.has(key)) {\n originalMap.get(key).push(i);\n } else {\n originalMap.set(key, [i]);\n }\n }\n\n for (let i = 0; i < targetArray.length; i++) {\n const element = targetArray[i];\n const key = JSON.stringify(element);\n if (!originalMap.has(key)) {\n add.push(i);\n } else {\n const indices = originalMap.get(key);\n indices.shift(); // Remove the first index\n if (indices.length === 0) {\n originalMap.delete(key);\n }\n }\n }\n\n for (let i = 0; i < originalArray.length; i++) {\n const element = originalArray[i];\n if (!targetArray.some(item => isEqual(item, element))) {\n remove.push(i);\n }\n }\n\n return { add, remove };\n}\n\nfunction isEqual(arr1: any, arr2: any) {\n if (arr1 === arr2) {\n return true;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n"]}
|
|
@@ -141,6 +141,7 @@ export interface BaseTableConstructorOptions {
|
|
|
141
141
|
highlightMode: 'cross' | 'column' | 'row' | 'cell';
|
|
142
142
|
disableHover?: boolean;
|
|
143
143
|
disableHeaderHover?: boolean;
|
|
144
|
+
disableAxisHover?: boolean;
|
|
144
145
|
};
|
|
145
146
|
select?: {
|
|
146
147
|
headerSelectMode?: 'inline' | 'cell';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ts-types/base-table.ts"],"names":[],"mappings":"","file":"base-table.js","sourcesContent":["import type { ITextSize } from '@visactor/vutils';\nimport type { RectProps, MaybePromiseOrUndefined, ICellHeaderPaths, CellInfo } 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 { ColumnData, ColumnDefine, ColumnsDefine, HeaderData, IndicatorData } from './list-table/layout-map/api';\nexport type { HeaderData } from './list-table/layout-map/api';\nimport type { TableTheme } from '../themes/theme';\nimport type { ICustomRender } from './customElement';\nexport type LayoutObjectId = number | string;\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 IDataConfig,\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} 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';\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 allowFrozenColCount: number;\n\n frozenRowCount: number;\n rightFrozenColCount: number;\n bottomFrozenRowCount: number;\n defaultRowHeight: number;\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\n // disableRowHeaderColumnResize?: boolean;\n // 列宽调整模式(全列调整;全列不可调整;仅表头单元格可调整;仅内容单元格可调整)\n columnResizeMode?: 'all' | 'none' | 'header' | 'body';\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n /** 控制拖拽表头移动位置顺序开关 */\n dragHeaderMode?: 'all' | 'none' | 'column' | 'row';\n\n cachedRecordsRowHeightMap: NumberMap<string | number>; //存储每一条记录对应行的行高,只有当设置为自动换行随内容撑开才会起作用\n // headerRowHeightsMap: NumberMap<number>; //目前是用来存储了表头各行的高度,从headerRowHeight计算而来,headerRowHeight可以设置为数组的形式\n _rowHeightsMap: NumberMap<number>; //存储数据条目每行高度\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\n bodyHelper: BodyHelper;\n headerHelper: HeaderHelper;\n\n cellTextOverflows: { [at: string]: string };\n // headerDescriptions: { [at: string]: string };\n focusedTable: boolean;\n\n config:\n | {\n [name: string]: any;\n }\n | undefined;\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?: MenuListItem[];\n /** 右键菜单。代替原来的option.contextmenu */\n contextMenuItems?: MenuListItem[] | ((field: FieldDef, row: number) => MenuListItem[]);\n /** 设置选中状态的菜单。代替原来的option.dropDownMenuHighlight */\n dropDownMenuHighlight?: DropDownMenuHighlightInfo[];\n };\n /** 提示弹框的相关配置。消失时机:显示后鼠标移动到指定区域外或者进入新的单元格后自动消失*/\n tooltip: {\n renderMode: 'html' | 'canvas';\n /** 代替原来hover:isShowTooltip配置 */\n isShowOverflowTextTooltip: boolean;\n /** 弹框是否需要限定在表格区域内 */\n confine: boolean;\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\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\n menuHandler: MenuHandler;\n\n /**\n * 计算列宽时 指定最大列宽 可设置boolean或者具体的值 默认为450\n */\n limitMaxAutoWidth?: boolean | number;\n\n /**\n * 限制列宽最小值。\n */\n limitMinWidth?: number;\n\n title?: Title;\n legends?: DiscreteTableLegend | ContinueTableLegend;\n\n //是否开启图表异步渲染\n renderChartAsync?: boolean;\n // // 开启图表异步渲染 每批次渐进渲染图表个数\n // renderChartAsyncBatchCount?: number;\n\n stick: { changedCells: StickCell[] };\n\n customMergeCell?: CustomMergeCell;\n /**\n * 'auto':和浏览器滚动行为一致 表格滚动到顶部/底部时 触发浏览器默认行为;\n * 设置为 'none' 时, 表格滚动到顶部/底部时, 不再触发父容器滚动\n * */\n overscrollBehavior?: 'auto' | 'none';\n}\nexport interface BaseTableConstructorOptions {\n // /** 指定表格的行数 */\n // rowCount?: number;\n\n // /** 指定表格的列数 */\n // colCount?: number;\n /**\n * 当前需要冻结的列数 基本表格生效\n */\n frozenColCount?: number;\n rightFrozenColCount?: number;\n bottomFrozenRowCount?: number;\n\n // /** 待实现 TODO */\n // frozenRowCount?: number;\n /** 可冻结列数,表示前多少列会出现冻结操作按钮 基本表格生效 */\n allowFrozenColCount?: number;\n /**\n * 默认行高. 默认 40\n */\n defaultRowHeight?: number;\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 /**\n * Canvas container\n */\n container?: HTMLElement | null;\n\n /**\n * 调整列宽 可操作范围。'all' | 'none' | 'header' | 'body'; 整列间隔线|禁止调整|只能在表头处间隔线|只能在body间隔线\n */\n columnResizeMode?: 'all' | 'none' | 'header' | 'body';\n /** 控制拖拽表头移动位置顺序开关 */\n dragHeaderMode?: 'all' | 'none' | 'column' | 'row';\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 };\n /** 选择单元格交互配置 */\n select?: {\n /** 点击表头单元格时连带body整行或整列选中 或仅选中当前单元格,默认或整行或整列选中*/\n headerSelectMode?: 'inline' | 'cell';\n /** 不响应鼠标select交互 */\n disableSelect?: boolean;\n /** 单独设置表头不响应鼠标select交互 */\n disableHeaderSelect?: boolean;\n };\n /** 下拉菜单的相关配置。消失时机:显示后点击菜单区域外自动消失*/\n menu?: {\n /** 代替原来的option.menuType html目前实现较完整 先默认html渲染方式*/\n renderMode?: 'canvas' | 'html';\n /** 内置下拉菜单的全局设置项 目前只针对基本表格有效 会对每个表头单元格开启默认的下拉菜单功能。代替原来的option.dropDownMenu*/\n defaultHeaderMenuItems?: MenuListItem[];\n /** 右键菜单。代替原来的option.contextmenu */\n contextMenuItems?: MenuListItem[] | ((field: string, row: number) => MenuListItem[]);\n /** 设置选中状态的菜单。代替原来的option.dropDownMenuHighlight */\n dropDownMenuHighlight?: DropDownMenuHighlightInfo[];\n };\n /** tooltip相关配置 */\n tooltip?: {\n /** html目前实现较完整 先默认html渲染方式 */\n renderMode?: 'html'; // 目前暂不支持canvas方案\n /** 代替原来hover:isShowTooltip配置 暂时需要将renderMode配置为html才能显示,canvas的还未开发*/\n isShowOverflowTextTooltip?: boolean;\n /** 是否将 tooltip 框限制在画布区域内,默认开启。针对renderMode:\"html\"有效 */\n confine?: boolean;\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 // /** 行高是否根据内容来计算 */\n // autoRowHeight?: boolean;\n /** 设备的像素比 不配的话默认获取window.devicePixelRatio */\n pixelRatio?: number;\n /** 自定义渲染 函数形式*/\n customRender?: ICustomRender;\n /** 开启自动换行 默认false */\n autoWrapText?: 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\n // maximum number of data items maintained in table instance\n maintainedDataCount?: number;\n\n legends?: ITableLegendOption;\n title?: ITitle;\n\n /** 是否开启图表异步渲染 */\n renderChartAsync?: boolean;\n /** 开启图表异步渲染 每批次渐进渲染图表个数 默认是5个 */\n renderChartAsyncBatchCount?: number;\n\n customMergeCell?: CustomMergeCell;\n\n // for nodejs\n mode?: 'node' | 'broswer';\n modeParams?: any;\n canvasWidth?: number;\n canvasHeight?: number;\n /**\n * 'auto':和浏览器滚动行为一致 表格滚动到顶部/底部时 触发浏览器默认行为;\n * 设置为 'none' 时, 表格滚动到顶部/底部时, 不再触发父容器滚动\n * */\n overscrollBehavior?: 'auto' | 'none';\n}\nexport interface BaseTableAPI {\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 * 是否显示图钉\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[];\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\n isReleased: boolean;\n\n rowHeightsMap: NumberMap<number>;\n colWidthsMap: NumberMap<string | number>;\n\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 rowHeaderLevelCount: number;\n /** 列表头的层数 */\n columnHeaderLevelCount: number;\n\n canvasWidth?: number;\n canvasHeight?: number;\n\n /** 获取表格绘制的范围 不包括frame的宽度 */\n getDrawRange: () => Rect;\n /** 将鼠标坐标值 转换成表格坐标系中的坐标位置 */\n _getMouseAbstractPoint: (\n evt: TouchEvent | MouseEvent | undefined,\n isAddScroll?: boolean\n ) => { 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 _setRowHeight: (row: number, height: number, clearCache?: boolean) => 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 _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) => RectProps;\n getCellRelativeRect: (col: number, row: number) => RectProps;\n getCellsRect: (startCol: number, startRow: number, endCol: number, endRow: number) => RectProps;\n getCellRangeRect: (cellRange: CellRange | CellAddress) => RectProps;\n getCellRangeRelativeRect: (cellRange: CellRange | CellAddress) => RectProps;\n getVisibleCellRangeRelativeRect: (cellRange: CellRange | CellAddress) => RectProps;\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) => CellAddress;\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 getRowsHeight: (startRow: number, endRow: number) => 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: (col: number, row: number) => 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 getHeaderFieldKey: (col: number, row: number) => any | undefined;\n\n _getHeaderCellBySortState: (sortState: SortState) => CellAddress | undefined;\n getHeaderDefine: (col: number, row: number) => ColumnDefine;\n _getHeaderLayoutMap: (col: number, row: number) => HeaderData;\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;\n getBodyColumnDefine: (col: number, row: number) => ColumnDefine;\n getBodyColumnType: (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) => 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 _hasHierarchyTreeHeader: () => boolean;\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: () => string;\n\n getSelectedCellInfos: () => CellInfo[][];\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\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\n getMergeCellRect: (col: number, row: number) => Rect;\n\n getTargetColAt: (absoluteX: number) => { col: number; left: number; right: number; width: number } | null;\n getTargetRowAt: (absoluteY: number) => { row: number; top: number; bottom: number; height: number } | null;\n\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 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: () => { colStart: number; colEnd: number };\n /** 获取表格body部分的显示行号范围 */\n getBodyVisibleRowRange: () => { rowStart: number; rowEnd: number };\n}\nexport interface ListTableProtected extends IBaseTableProtected {\n /** 表格数据 */\n records: any[] | null;\n columns: ColumnsDefine;\n layoutMap: SimpleHeaderLayoutMap;\n}\n\nexport interface PivotTableProtected extends IBaseTableProtected {\n /** 表格数据 */\n records: any[] | null;\n layoutMap: PivotHeaderLayoutMap;\n dataConfig?: IDataConfig;\n /**\n * 透视表是否开启数据分析\n * 如果传入数据是明细数据需要聚合分析则开启\n * 如传入数据是经过聚合好的为了提升性能这里设置为false,同时需要传入columnTree和rowTree\n */\n enableDataAnalysis?: boolean;\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}\nexport interface PivotChartProtected extends IBaseTableProtected {\n /** 表格数据 */\n records: any[] | Record<string, any[]>;\n layoutMap: PivotHeaderLayoutMap;\n dataConfig?: IDataConfig;\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/ts-types/base-table.ts"],"names":[],"mappings":"","file":"base-table.js","sourcesContent":["import type { ITextSize } from '@visactor/vutils';\nimport type { RectProps, MaybePromiseOrUndefined, ICellHeaderPaths, CellInfo } 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 { ColumnData, ColumnDefine, ColumnsDefine, HeaderData, IndicatorData } from './list-table/layout-map/api';\nexport type { HeaderData } from './list-table/layout-map/api';\nimport type { TableTheme } from '../themes/theme';\nimport type { ICustomRender } from './customElement';\nexport type LayoutObjectId = number | string;\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 IDataConfig,\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} 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';\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 allowFrozenColCount: number;\n\n frozenRowCount: number;\n rightFrozenColCount: number;\n bottomFrozenRowCount: number;\n defaultRowHeight: number;\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\n // disableRowHeaderColumnResize?: boolean;\n // 列宽调整模式(全列调整;全列不可调整;仅表头单元格可调整;仅内容单元格可调整)\n columnResizeMode?: 'all' | 'none' | 'header' | 'body';\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n /** 控制拖拽表头移动位置顺序开关 */\n dragHeaderMode?: 'all' | 'none' | 'column' | 'row';\n\n cachedRecordsRowHeightMap: NumberMap<string | number>; //存储每一条记录对应行的行高,只有当设置为自动换行随内容撑开才会起作用\n // headerRowHeightsMap: NumberMap<number>; //目前是用来存储了表头各行的高度,从headerRowHeight计算而来,headerRowHeight可以设置为数组的形式\n _rowHeightsMap: NumberMap<number>; //存储数据条目每行高度\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\n bodyHelper: BodyHelper;\n headerHelper: HeaderHelper;\n\n cellTextOverflows: { [at: string]: string };\n // headerDescriptions: { [at: string]: string };\n focusedTable: boolean;\n\n config:\n | {\n [name: string]: any;\n }\n | undefined;\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?: MenuListItem[];\n /** 右键菜单。代替原来的option.contextmenu */\n contextMenuItems?: MenuListItem[] | ((field: FieldDef, row: number) => MenuListItem[]);\n /** 设置选中状态的菜单。代替原来的option.dropDownMenuHighlight */\n dropDownMenuHighlight?: DropDownMenuHighlightInfo[];\n };\n /** 提示弹框的相关配置。消失时机:显示后鼠标移动到指定区域外或者进入新的单元格后自动消失*/\n tooltip: {\n renderMode: 'html' | 'canvas';\n /** 代替原来hover:isShowTooltip配置 */\n isShowOverflowTextTooltip: boolean;\n /** 弹框是否需要限定在表格区域内 */\n confine: boolean;\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\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\n menuHandler: MenuHandler;\n\n /**\n * 计算列宽时 指定最大列宽 可设置boolean或者具体的值 默认为450\n */\n limitMaxAutoWidth?: boolean | number;\n\n /**\n * 限制列宽最小值。\n */\n limitMinWidth?: number;\n\n title?: Title;\n legends?: DiscreteTableLegend | ContinueTableLegend;\n\n //是否开启图表异步渲染\n renderChartAsync?: boolean;\n // // 开启图表异步渲染 每批次渐进渲染图表个数\n // renderChartAsyncBatchCount?: number;\n\n stick: { changedCells: StickCell[] };\n\n customMergeCell?: CustomMergeCell;\n /**\n * 'auto':和浏览器滚动行为一致 表格滚动到顶部/底部时 触发浏览器默认行为;\n * 设置为 'none' 时, 表格滚动到顶部/底部时, 不再触发父容器滚动\n * */\n overscrollBehavior?: 'auto' | 'none';\n}\nexport interface BaseTableConstructorOptions {\n // /** 指定表格的行数 */\n // rowCount?: number;\n\n // /** 指定表格的列数 */\n // colCount?: number;\n /**\n * 当前需要冻结的列数 基本表格生效\n */\n frozenColCount?: number;\n rightFrozenColCount?: number;\n bottomFrozenRowCount?: number;\n\n // /** 待实现 TODO */\n // frozenRowCount?: number;\n /** 可冻结列数,表示前多少列会出现冻结操作按钮 基本表格生效 */\n allowFrozenColCount?: number;\n /**\n * 默认行高. 默认 40\n */\n defaultRowHeight?: number;\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 /**\n * Canvas container\n */\n container?: HTMLElement | null;\n\n /**\n * 调整列宽 可操作范围。'all' | 'none' | 'header' | 'body'; 整列间隔线|禁止调整|只能在表头处间隔线|只能在body间隔线\n */\n columnResizeMode?: 'all' | 'none' | 'header' | 'body';\n /** 控制拖拽表头移动位置顺序开关 */\n dragHeaderMode?: 'all' | 'none' | 'column' | 'row';\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 /** 点击表头单元格时连带body整行或整列选中 或仅选中当前单元格,默认或整行或整列选中*/\n headerSelectMode?: 'inline' | 'cell';\n /** 不响应鼠标select交互 */\n disableSelect?: boolean;\n /** 单独设置表头不响应鼠标select交互 */\n disableHeaderSelect?: boolean;\n };\n /** 下拉菜单的相关配置。消失时机:显示后点击菜单区域外自动消失*/\n menu?: {\n /** 代替原来的option.menuType html目前实现较完整 先默认html渲染方式*/\n renderMode?: 'canvas' | 'html';\n /** 内置下拉菜单的全局设置项 目前只针对基本表格有效 会对每个表头单元格开启默认的下拉菜单功能。代替原来的option.dropDownMenu*/\n defaultHeaderMenuItems?: MenuListItem[];\n /** 右键菜单。代替原来的option.contextmenu */\n contextMenuItems?: MenuListItem[] | ((field: string, row: number) => MenuListItem[]);\n /** 设置选中状态的菜单。代替原来的option.dropDownMenuHighlight */\n dropDownMenuHighlight?: DropDownMenuHighlightInfo[];\n };\n /** tooltip相关配置 */\n tooltip?: {\n /** html目前实现较完整 先默认html渲染方式 */\n renderMode?: 'html'; // 目前暂不支持canvas方案\n /** 代替原来hover:isShowTooltip配置 暂时需要将renderMode配置为html才能显示,canvas的还未开发*/\n isShowOverflowTextTooltip?: boolean;\n /** 是否将 tooltip 框限制在画布区域内,默认开启。针对renderMode:\"html\"有效 */\n confine?: boolean;\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 // /** 行高是否根据内容来计算 */\n // autoRowHeight?: boolean;\n /** 设备的像素比 不配的话默认获取window.devicePixelRatio */\n pixelRatio?: number;\n /** 自定义渲染 函数形式*/\n customRender?: ICustomRender;\n /** 开启自动换行 默认false */\n autoWrapText?: 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\n // maximum number of data items maintained in table instance\n maintainedDataCount?: number;\n\n legends?: ITableLegendOption;\n title?: ITitle;\n\n /** 是否开启图表异步渲染 */\n renderChartAsync?: boolean;\n /** 开启图表异步渲染 每批次渐进渲染图表个数 默认是5个 */\n renderChartAsyncBatchCount?: number;\n\n customMergeCell?: CustomMergeCell;\n\n // for nodejs\n mode?: 'node' | 'broswer';\n modeParams?: any;\n canvasWidth?: number;\n canvasHeight?: number;\n /**\n * 'auto':和浏览器滚动行为一致 表格滚动到顶部/底部时 触发浏览器默认行为;\n * 设置为 'none' 时, 表格滚动到顶部/底部时, 不再触发父容器滚动\n * */\n overscrollBehavior?: 'auto' | 'none';\n}\nexport interface BaseTableAPI {\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 * 是否显示图钉\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[];\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\n isReleased: boolean;\n\n rowHeightsMap: NumberMap<number>;\n colWidthsMap: NumberMap<string | number>;\n\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 rowHeaderLevelCount: number;\n /** 列表头的层数 */\n columnHeaderLevelCount: number;\n\n canvasWidth?: number;\n canvasHeight?: number;\n\n /** 获取表格绘制的范围 不包括frame的宽度 */\n getDrawRange: () => Rect;\n /** 将鼠标坐标值 转换成表格坐标系中的坐标位置 */\n _getMouseAbstractPoint: (\n evt: TouchEvent | MouseEvent | undefined,\n isAddScroll?: boolean\n ) => { 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 _setRowHeight: (row: number, height: number, clearCache?: boolean) => 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 _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) => RectProps;\n getCellRelativeRect: (col: number, row: number) => RectProps;\n getCellsRect: (startCol: number, startRow: number, endCol: number, endRow: number) => RectProps;\n getCellRangeRect: (cellRange: CellRange | CellAddress) => RectProps;\n getCellRangeRelativeRect: (cellRange: CellRange | CellAddress) => RectProps;\n getVisibleCellRangeRelativeRect: (cellRange: CellRange | CellAddress) => RectProps;\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) => CellAddress;\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 getRowsHeight: (startRow: number, endRow: number) => 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: (col: number, row: number) => 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 getHeaderFieldKey: (col: number, row: number) => any | undefined;\n\n _getHeaderCellBySortState: (sortState: SortState) => CellAddress | undefined;\n getHeaderDefine: (col: number, row: number) => ColumnDefine;\n _getHeaderLayoutMap: (col: number, row: number) => HeaderData;\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;\n getBodyColumnDefine: (col: number, row: number) => ColumnDefine;\n getBodyColumnType: (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) => 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 _hasHierarchyTreeHeader: () => boolean;\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: () => string;\n\n getSelectedCellInfos: () => CellInfo[][];\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\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\n getMergeCellRect: (col: number, row: number) => Rect;\n\n getTargetColAt: (absoluteX: number) => { col: number; left: number; right: number; width: number } | null;\n getTargetRowAt: (absoluteY: number) => { row: number; top: number; bottom: number; height: number } | null;\n\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 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: () => { colStart: number; colEnd: number };\n /** 获取表格body部分的显示行号范围 */\n getBodyVisibleRowRange: () => { rowStart: number; rowEnd: number };\n}\nexport interface ListTableProtected extends IBaseTableProtected {\n /** 表格数据 */\n records: any[] | null;\n columns: ColumnsDefine;\n layoutMap: SimpleHeaderLayoutMap;\n}\n\nexport interface PivotTableProtected extends IBaseTableProtected {\n /** 表格数据 */\n records: any[] | null;\n layoutMap: PivotHeaderLayoutMap;\n dataConfig?: IDataConfig;\n /**\n * 透视表是否开启数据分析\n * 如果传入数据是明细数据需要聚合分析则开启\n * 如传入数据是经过聚合好的为了提升性能这里设置为false,同时需要传入columnTree和rowTree\n */\n enableDataAnalysis?: boolean;\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}\nexport interface PivotChartProtected extends IBaseTableProtected {\n /** 表格数据 */\n records: any[] | Record<string, any[]>;\n layoutMap: PivotHeaderLayoutMap;\n dataConfig?: IDataConfig;\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"]}
|
package/dist/vtable.js
CHANGED
|
@@ -637,7 +637,7 @@
|
|
|
637
637
|
function objectKeys(obj) {
|
|
638
638
|
return Object.keys(obj);
|
|
639
639
|
}
|
|
640
|
-
function isEqual(a, b, options) {
|
|
640
|
+
function isEqual$1(a, b, options) {
|
|
641
641
|
if (a === b) return !0;
|
|
642
642
|
if (typeof a != typeof b) return !1;
|
|
643
643
|
if (null == a || null == b) return !1;
|
|
@@ -647,7 +647,7 @@
|
|
|
647
647
|
if ("object" != typeof a) return !1;
|
|
648
648
|
if (isArray$5(a)) {
|
|
649
649
|
if (a.length !== b.length) return !1;
|
|
650
|
-
for (let i = a.length - 1; i >= 0; i--) if (!isEqual(a[i], b[i], options)) return !1;
|
|
650
|
+
for (let i = a.length - 1; i >= 0; i--) if (!isEqual$1(a[i], b[i], options)) return !1;
|
|
651
651
|
return !0;
|
|
652
652
|
}
|
|
653
653
|
if (!isPlainObject$3(a)) return !1;
|
|
@@ -658,7 +658,7 @@
|
|
|
658
658
|
for (let i = ka.length - 1; i >= 0; i--) if (ka[i] != kb[i]) return !1;
|
|
659
659
|
for (let i = ka.length - 1; i >= 0; i--) {
|
|
660
660
|
const key = ka[i];
|
|
661
|
-
if (!isEqual(a[key], b[key], options)) return !1;
|
|
661
|
+
if (!isEqual$1(a[key], b[key], options)) return !1;
|
|
662
662
|
}
|
|
663
663
|
return !0;
|
|
664
664
|
}
|
|
@@ -49282,47 +49282,51 @@
|
|
|
49282
49282
|
updateCellPositions
|
|
49283
49283
|
};
|
|
49284
49284
|
}
|
|
49285
|
-
function
|
|
49285
|
+
function calculateArrayDiff(originalArray, targetArray) {
|
|
49286
49286
|
const add = [];
|
|
49287
49287
|
const remove = [];
|
|
49288
|
-
|
|
49289
|
-
|
|
49290
|
-
|
|
49291
|
-
|
|
49292
|
-
|
|
49293
|
-
|
|
49294
|
-
}
|
|
49288
|
+
const originalMap = new Map();
|
|
49289
|
+
for (let i = 0; i < originalArray.length; i++) {
|
|
49290
|
+
const element = originalArray[i];
|
|
49291
|
+
const key = JSON.stringify(element);
|
|
49292
|
+
if (originalMap.has(key)) {
|
|
49293
|
+
originalMap.get(key).push(i);
|
|
49295
49294
|
}
|
|
49296
|
-
|
|
49297
|
-
|
|
49295
|
+
else {
|
|
49296
|
+
originalMap.set(key, [i]);
|
|
49298
49297
|
}
|
|
49299
49298
|
}
|
|
49300
|
-
for (let i = 0; i <
|
|
49301
|
-
|
|
49302
|
-
|
|
49303
|
-
|
|
49304
|
-
|
|
49305
|
-
|
|
49299
|
+
for (let i = 0; i < targetArray.length; i++) {
|
|
49300
|
+
const element = targetArray[i];
|
|
49301
|
+
const key = JSON.stringify(element);
|
|
49302
|
+
if (!originalMap.has(key)) {
|
|
49303
|
+
add.push(i);
|
|
49304
|
+
}
|
|
49305
|
+
else {
|
|
49306
|
+
const indices = originalMap.get(key);
|
|
49307
|
+
indices.shift();
|
|
49308
|
+
if (indices.length === 0) {
|
|
49309
|
+
originalMap.delete(key);
|
|
49306
49310
|
}
|
|
49307
49311
|
}
|
|
49308
|
-
|
|
49309
|
-
|
|
49312
|
+
}
|
|
49313
|
+
for (let i = 0; i < originalArray.length; i++) {
|
|
49314
|
+
const element = originalArray[i];
|
|
49315
|
+
if (!targetArray.some(item => isEqual(item, element))) {
|
|
49316
|
+
remove.push(i);
|
|
49310
49317
|
}
|
|
49311
49318
|
}
|
|
49312
49319
|
return { add, remove };
|
|
49313
49320
|
}
|
|
49314
|
-
function
|
|
49315
|
-
if (
|
|
49316
|
-
return
|
|
49317
|
-
}
|
|
49318
|
-
if (typeof oldIndex === 'number' && typeof newIndex === 'number' && oldIndex !== newIndex) {
|
|
49319
|
-
return false;
|
|
49321
|
+
function isEqual(arr1, arr2) {
|
|
49322
|
+
if (arr1 === arr2) {
|
|
49323
|
+
return true;
|
|
49320
49324
|
}
|
|
49321
|
-
if (
|
|
49325
|
+
if (arr1.length !== arr2.length) {
|
|
49322
49326
|
return false;
|
|
49323
49327
|
}
|
|
49324
|
-
for (let i = 0; i <
|
|
49325
|
-
if (
|
|
49328
|
+
for (let i = 0; i < arr1.length; i++) {
|
|
49329
|
+
if (arr1[i] !== arr2[i]) {
|
|
49326
49330
|
return false;
|
|
49327
49331
|
}
|
|
49328
49332
|
}
|
|
@@ -49558,7 +49562,8 @@
|
|
|
49558
49562
|
this.treeDataHierarchyState.set(Array.isArray(indexed) ? indexed.join(',') : indexed, HierarchyState.collapse);
|
|
49559
49563
|
}
|
|
49560
49564
|
this.updatePagerData();
|
|
49561
|
-
|
|
49565
|
+
const newDiff = calculateArrayDiff(oldIndexedData, this.currentIndexedData);
|
|
49566
|
+
return newDiff;
|
|
49562
49567
|
}
|
|
49563
49568
|
pushChildrenNode(indexKey, hierarchyState, nodeData) {
|
|
49564
49569
|
if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {
|
|
@@ -54917,7 +54922,9 @@
|
|
|
54917
54922
|
for (let row = rowStart; row < table.columnHeaderLevelCount; row++) {
|
|
54918
54923
|
let startCol = 0;
|
|
54919
54924
|
let endCol = table.colCount - 1;
|
|
54920
|
-
if ((table.isPivotTable()
|
|
54925
|
+
if (((table.isPivotTable() && !table.isPivotChart()) ||
|
|
54926
|
+
(table.isPivotChart() && !table.internalProps.layoutMap.indicatorsAsCol)) &&
|
|
54927
|
+
checkPivotFixedStyleAndNoWrap(table, row)) {
|
|
54921
54928
|
startCol = 0;
|
|
54922
54929
|
endCol = table.rowHeaderLevelCount;
|
|
54923
54930
|
}
|
|
@@ -57130,7 +57137,7 @@
|
|
|
57130
57137
|
isValid$5(cellGroup.mergeEndRow)) {
|
|
57131
57138
|
for (let col = cellGroup.mergeStartCol; col <= cellGroup.mergeEndCol; col++) {
|
|
57132
57139
|
for (let row = cellGroup.mergeStartRow; row <= cellGroup.mergeEndRow; row++) {
|
|
57133
|
-
const key = isCellHover(table.stateManager, col, row);
|
|
57140
|
+
const key = isCellHover(table.stateManager, col, row, cellGroup);
|
|
57134
57141
|
if (key && (!colorKey || key === 'cellBgColor')) {
|
|
57135
57142
|
colorKey = key;
|
|
57136
57143
|
}
|
|
@@ -57138,7 +57145,7 @@
|
|
|
57138
57145
|
}
|
|
57139
57146
|
}
|
|
57140
57147
|
else if (cellGroup.role === 'cell') {
|
|
57141
|
-
colorKey = isCellHover(table.stateManager, cellGroup.col, cellGroup.row);
|
|
57148
|
+
colorKey = isCellHover(table.stateManager, cellGroup.col, cellGroup.row, cellGroup);
|
|
57142
57149
|
}
|
|
57143
57150
|
if (!colorKey) {
|
|
57144
57151
|
return undefined;
|
|
@@ -57170,7 +57177,7 @@
|
|
|
57170
57177
|
const fillColor = getProp(colorKey, hoverStyle, cellGroup.col, cellGroup.row, table);
|
|
57171
57178
|
return fillColor;
|
|
57172
57179
|
}
|
|
57173
|
-
function isCellHover(state, col, row) {
|
|
57180
|
+
function isCellHover(state, col, row, cellGroup) {
|
|
57174
57181
|
const { highlightScope, disableHeader, cellPos } = state.hover;
|
|
57175
57182
|
const table = state.table;
|
|
57176
57183
|
const isHeader = table.isHeader(col, row);
|
|
@@ -57202,11 +57209,14 @@
|
|
|
57202
57209
|
let cellDisable;
|
|
57203
57210
|
if (isHeader) {
|
|
57204
57211
|
const define = table.getHeaderDefine(col, row);
|
|
57205
|
-
cellDisable = define
|
|
57212
|
+
cellDisable = define?.disableHeaderHover;
|
|
57213
|
+
if (cellGroup.firstChild && cellGroup.firstChild.name === 'axis' && table.options.hover?.disableAxisHover) {
|
|
57214
|
+
cellDisable = true;
|
|
57215
|
+
}
|
|
57206
57216
|
}
|
|
57207
57217
|
else {
|
|
57208
57218
|
const define = table.getBodyColumnDefine(col, row);
|
|
57209
|
-
cellDisable = define
|
|
57219
|
+
cellDisable = define?.disableHover;
|
|
57210
57220
|
}
|
|
57211
57221
|
if (cellDisable) {
|
|
57212
57222
|
hoverMode = undefined;
|
|
@@ -60620,7 +60630,7 @@
|
|
|
60620
60630
|
}
|
|
60621
60631
|
newSelectedDataItemsInChart.push(selectedState);
|
|
60622
60632
|
}
|
|
60623
|
-
if (!isEqual(table._selectedDataItemsInChart, newSelectedDataItemsInChart)) {
|
|
60633
|
+
if (!isEqual$1(table._selectedDataItemsInChart, newSelectedDataItemsInChart)) {
|
|
60624
60634
|
table._selectedDataItemsInChart = newSelectedDataItemsInChart;
|
|
60625
60635
|
table.internalProps.layoutMap.updateDataStateToChartInstance();
|
|
60626
60636
|
clearChartCacheImage(scenegraph);
|
|
@@ -68550,7 +68560,7 @@
|
|
|
68550
68560
|
return TABLE_EVENT_TYPE;
|
|
68551
68561
|
}
|
|
68552
68562
|
options;
|
|
68553
|
-
version = "0.16.
|
|
68563
|
+
version = "0.16.4-alpha.1";
|
|
68554
68564
|
pagination;
|
|
68555
68565
|
id = `VTable${Date.now()}`;
|
|
68556
68566
|
headerStyleCache;
|
|
@@ -71883,7 +71893,7 @@
|
|
|
71883
71893
|
}
|
|
71884
71894
|
_createOrUpdateTitleComponent(attrs) {
|
|
71885
71895
|
if (this._titleComponent) {
|
|
71886
|
-
if (!isEqual(attrs, this._cacheAttrs)) {
|
|
71896
|
+
if (!isEqual$1(attrs, this._cacheAttrs)) {
|
|
71887
71897
|
this._titleComponent.setAttributes(attrs);
|
|
71888
71898
|
}
|
|
71889
71899
|
}
|
|
@@ -79027,7 +79037,7 @@
|
|
|
79027
79037
|
return new Tag$1(params ? params.attribute : {});
|
|
79028
79038
|
}
|
|
79029
79039
|
|
|
79030
|
-
const version = "0.16.
|
|
79040
|
+
const version = "0.16.4-alpha.1";
|
|
79031
79041
|
function getIcons() {
|
|
79032
79042
|
return get$2();
|
|
79033
79043
|
}
|