@visactor/vtable 0.23.3 → 0.24.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/cjs/PivotChart.js.map +1 -1
  2. package/cjs/PivotTable.d.ts +3 -0
  3. package/cjs/PivotTable.js +26 -11
  4. package/cjs/PivotTable.js.map +1 -1
  5. package/cjs/core/BaseTable.js +1 -1
  6. package/cjs/core/BaseTable.js.map +1 -1
  7. package/cjs/dataset/dataset.js +1 -1
  8. package/cjs/dataset/dataset.js.map +1 -1
  9. package/cjs/dataset/flatDataToObject.d.ts +1 -0
  10. package/cjs/dataset/flatDataToObject.js +7 -1
  11. package/cjs/dataset/flatDataToObject.js.map +1 -1
  12. package/cjs/index.d.ts +1 -1
  13. package/cjs/index.js +1 -1
  14. package/cjs/index.js.map +1 -1
  15. package/cjs/layout/pivot-header-layout.js +2 -1
  16. package/cjs/layout/pivot-header-layout.js.map +1 -1
  17. package/cjs/layout/tree-helper.js +4 -4
  18. package/cjs/layout/tree-helper.js.map +1 -1
  19. package/cjs/ts-types/table-engine.d.ts +1 -1
  20. package/cjs/ts-types/table-engine.js.map +1 -1
  21. package/cjs/vrender.js.map +1 -1
  22. package/dist/vtable.js +66 -29
  23. package/dist/vtable.min.js +1 -1
  24. package/es/PivotChart.js.map +1 -1
  25. package/es/PivotTable.d.ts +3 -0
  26. package/es/PivotTable.js +26 -11
  27. package/es/PivotTable.js.map +1 -1
  28. package/es/core/BaseTable.js +1 -1
  29. package/es/core/BaseTable.js.map +1 -1
  30. package/es/dataset/dataset.js +1 -1
  31. package/es/dataset/dataset.js.map +1 -1
  32. package/es/dataset/flatDataToObject.d.ts +1 -0
  33. package/es/dataset/flatDataToObject.js +7 -1
  34. package/es/dataset/flatDataToObject.js.map +1 -1
  35. package/es/index.d.ts +1 -1
  36. package/es/index.js +1 -1
  37. package/es/index.js.map +1 -1
  38. package/es/layout/pivot-header-layout.js +2 -1
  39. package/es/layout/pivot-header-layout.js.map +1 -1
  40. package/es/layout/tree-helper.js +4 -4
  41. package/es/layout/tree-helper.js.map +1 -1
  42. package/es/ts-types/table-engine.d.ts +1 -1
  43. package/es/ts-types/table-engine.js.map +1 -1
  44. package/es/vrender.js.map +1 -1
  45. package/package.json +3 -3
@@ -43,12 +43,12 @@ class DimensionTree {
43
43
  })) : node.hierarchyState === ts_types_1.HierarchyState.collapse && (null == children ? void 0 : children.length) >= 1 ? children.forEach((n => {
44
44
  var _a;
45
45
  n.level = (null !== (_a = node.level) && void 0 !== _a ? _a : 0) + 1, this.setTreeNode(n, size, node);
46
- })) : !node.hierarchyState && node.level + 1 < this.rowExpandLevel && (null == children ? void 0 : children.length) >= 1 ? (node.hierarchyState = ts_types_1.HierarchyState.expand,
47
- children.forEach((n => {
46
+ })) : !node.hierarchyState && node.level + 1 < this.rowExpandLevel && ((null == children ? void 0 : children.length) >= 1 || !0 === children) ? (node.hierarchyState = ts_types_1.HierarchyState.expand,
47
+ (null == children ? void 0 : children.length) >= 1 && children.forEach((n => {
48
48
  var _a;
49
49
  n.level = (null !== (_a = node.level) && void 0 !== _a ? _a : 0) + 1, size += this.setTreeNode(n, size, node);
50
- }))) : (null == children ? void 0 : children.length) >= 1 ? (node.hierarchyState = ts_types_1.HierarchyState.collapse,
51
- children.forEach((n => {
50
+ }))) : (null == children ? void 0 : children.length) >= 1 || !0 === children ? (node.hierarchyState = ts_types_1.HierarchyState.collapse,
51
+ (null == children ? void 0 : children.length) >= 1 && children.forEach((n => {
52
52
  var _a;
53
53
  n.level = (null !== (_a = node.level) && void 0 !== _a ? _a : 0) + 1, this.setTreeNode(n, size, node);
54
54
  }))) : (node.hierarchyState = ts_types_1.HierarchyState.none, size = 1), node.size = size,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/layout/tree-helper.ts"],"names":[],"mappings":"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","file":"tree-helper.js","sourcesContent":["import { cloneDeep, isValid } from '@visactor/vutils';\nimport { NumberMap } from '../tools/NumberMap';\nimport { IndicatorDimensionKeyPlaceholder } from '../tools/global';\nimport type { Either } from '../tools/helper';\nimport type {\n CellInfo,\n ColumnIconOption,\n FieldData,\n HeaderData,\n ICustomRender,\n IDimension,\n IIndicator,\n IRowDimension,\n LayoutObjectId\n} from '../ts-types';\nimport { HierarchyState } from '../ts-types';\nimport type { PivotHeaderLayoutMap } from './pivot-header-layout';\nimport type { ILinkDimension } from '../ts-types/pivot-table/dimension/link-dimension';\nimport type { IImageDimension } from '../ts-types/pivot-table/dimension/image-dimension';\n// import { sharedVar } from './pivot-header-layout';\n\ninterface ITreeLayoutBaseHeadNode {\n id: number;\n // dimensionKey: string;\n // // title: string;\n // indicatorKey?: string;\n value: string;\n children: ITreeLayoutHeadNode[] | undefined;\n columns?: any; //兼容ListTable情况 simple-header-layout中增加了columnTree\n level: number;\n /** 节点跨占层数 如汇总节点跨几层维度 */\n levelSpan: number;\n startIndex: number;\n size: number; //对应到colSpan或者rowSpan\n // parsing?: 'img' | 'link' | 'video' | 'templateLink';\n startInTotal: number;\n // headerStyle:HeaderStyleOption| null;\n customRender?: ICustomRender;\n\n hierarchyState: HierarchyState;\n headerIcon?: (string | ColumnIconOption)[] | ((args: CellInfo) => (string | ColumnIconOption)[]);\n}\n\ninterface ITreeLayoutDimensionHeadNode extends ITreeLayoutBaseHeadNode {\n dimensionKey: string;\n}\ninterface ITreeLayoutIndicatorHeadNode extends ITreeLayoutBaseHeadNode {\n indicatorKey: string;\n}\nexport type ITreeLayoutHeadNode = Either<ITreeLayoutDimensionHeadNode, ITreeLayoutIndicatorHeadNode>;\nexport class DimensionTree {\n sharedVar: { seqId: number };\n // 每一个值对应的序号 结果缓存\n // cache: {\n // [propName: string]: any;\n // };\n //树形展示 会将非叶子节点单独展示一行 所以size会增加非叶子节点的个数\n sizeIncludeParent = false;\n rowExpandLevel: number;\n hierarchyType: 'grid' | 'tree';\n tree: ITreeLayoutHeadNode = {\n id: 0,\n dimensionKey: '',\n // title: '',\n value: '',\n children: [],\n level: -1,\n levelSpan: 1,\n startIndex: 0,\n size: 0,\n startInTotal: 0,\n hierarchyState: undefined\n };\n\n totalLevel = 0;\n\n // blockLevel: number = 0;\n\n // blockStartIndexMap: Map<number, boolean> = new Map();\n // blockEndIndexMap: Map<number, boolean> = new Map();\n dimensionKeys: NumberMap<string> = new NumberMap<string>();\n // dimensions: IDimension[] | undefined;//目前用不到这个\n\n cache: Map<number, any> = new Map();\n constructor(\n tree: ITreeLayoutHeadNode[],\n sharedVar: { seqId: number },\n hierarchyType: 'grid' | 'tree' = 'grid',\n rowExpandLevel: number = undefined\n ) {\n this.sizeIncludeParent = rowExpandLevel !== null && rowExpandLevel !== undefined;\n this.rowExpandLevel = rowExpandLevel;\n this.hierarchyType = hierarchyType;\n this.sharedVar = sharedVar;\n this.reset(tree);\n }\n\n reset(tree: ITreeLayoutHeadNode[], updateTreeNode = false) {\n // 清空缓存的计算\n // this.cache = {};\n // this.dimensions = dimensions;\n this.cache.clear();\n this.dimensionKeys = new NumberMap<string>();\n this.tree.children = tree as ITreeLayoutHeadNode[];\n // const re = { totalLevel: 0 };\n // if (updateTreeNode) this.updateTreeNode(this.tree, 0, re, this.tree);\n // else\n this.setTreeNode(this.tree, 0, this.tree);\n this.totalLevel = this.dimensionKeys.count();\n }\n setTreeNode(node: ITreeLayoutHeadNode, startIndex: number, parent: ITreeLayoutHeadNode): number {\n node.startIndex = startIndex;\n node.startInTotal = (parent.startInTotal ?? 0) + node.startIndex;\n // if (node.dimensionKey) {\n // !this.dimensionKeys.contain(node.dimensionKey) &&\n // this.dimensionKeys.put(node.level, node.dimensionKey);\n // if (!node.id) node.id = ++seqId;\n // }\n if (node.dimensionKey ?? node.indicatorKey) {\n !this.dimensionKeys.contain(node.indicatorKey ? IndicatorDimensionKeyPlaceholder : node.dimensionKey) &&\n this.dimensionKeys.put(node.level, node.indicatorKey ? IndicatorDimensionKeyPlaceholder : node.dimensionKey);\n if (!node.id) {\n node.id = ++this.sharedVar.seqId;\n }\n }\n let size = node.dimensionKey ? (this.sizeIncludeParent ? 1 : 0) : 0;\n const children = node.children || node.columns;\n //平铺展示 分析所有层级\n if (this.hierarchyType === 'grid') {\n if (children?.length >= 1) {\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else {\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n } else if (node.hierarchyState === HierarchyState.expand && children?.length >= 1) {\n //树形展示 有子节点 且下一层需要展开\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (node.hierarchyState === HierarchyState.collapse && children?.length >= 1) {\n //树形展示 有子节点 且下一层不需要展开\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.setTreeNode(n, size, node);\n });\n } else if (!node.hierarchyState && node.level + 1 < this.rowExpandLevel && children?.length >= 1) {\n //树形展示 有子节点 且下一层需要展开\n node.hierarchyState = HierarchyState.expand;\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (children?.length >= 1) {\n //树形展示 有子节点 且下一层不需要展开\n node.hierarchyState = HierarchyState.collapse;\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.setTreeNode(n, size, node);\n });\n } else {\n //树形展示 无children子节点。但不能确定是最后一层的叶子节点 totalLevel还不能确定是计算完整棵树的整体深度\n node.hierarchyState = HierarchyState.none;\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n\n node.size = size;\n // startInTotal = parent.startIndex + prevStartIndex\n return size;\n }\n getTreePath(index: number, maxDeep = 30): Array<ITreeLayoutHeadNode> {\n const path: any[] = [];\n this.searchPath(index, this.tree, path, maxDeep);\n path.shift();\n return path;\n }\n\n getTreePathByCellIds(ids: LayoutObjectId[]): Array<ITreeLayoutHeadNode> {\n const path: any[] = [];\n let nodes = this.tree.children;\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const pathNode = this.findNodeById(nodes, id);\n if (pathNode) {\n path.push(pathNode);\n nodes = pathNode.children;\n } else {\n break;\n }\n }\n // path.shift();\n return path;\n }\n findNodeById(nodes: ITreeLayoutHeadNode[], id: LayoutObjectId) {\n return nodes.find(node => {\n return node.id === id;\n });\n }\n searchPath(index: number, node: ITreeLayoutHeadNode, path: Array<ITreeLayoutHeadNode>, maxDeep: number) {\n if (!node) {\n return;\n }\n if (index < node.startIndex || index >= node.startIndex + node.size) {\n return;\n }\n path.push(node);\n if (!node.children || node.children.length === 0 || node.level >= maxDeep) {\n return;\n }\n\n // const cIndex = index - node.startIndex;\n // for (let i = 0; i < node.children.length; i++) {\n // const element = node.children[i];\n // if (cIndex >= element.startIndex && cIndex < element.startIndex + element.size) {\n // this.searchPath(cIndex, element, path, maxDeep);\n // break;\n // }\n // }\n\n // use dichotomy to optimize search performance\n const cIndex = index - node.startIndex;\n\n if (this.cache.has(node.level + 1)) {\n const cacheNode = this.cache.get(node.level + 1);\n if (cIndex >= cacheNode.startIndex && cIndex < cacheNode.startIndex + cacheNode.size) {\n this.searchPath(cIndex, cacheNode, path, maxDeep);\n return;\n }\n }\n\n let left = 0;\n let right = node.children.length - 1;\n\n while (left <= right) {\n const middle = Math.floor((left + right) / 2);\n const element = node.children[middle];\n\n if (cIndex >= element.startIndex && cIndex < element.startIndex + element.size) {\n this.cache.set(element.level, element);\n const deleteLevels: number[] = [];\n this.cache.forEach((node, key) => {\n if (key > element.level) {\n deleteLevels.push(key);\n }\n });\n deleteLevels.forEach(key => {\n this.cache.delete(key);\n });\n this.searchPath(cIndex, element, path, maxDeep);\n break;\n } else if (cIndex < element.startIndex) {\n right = middle - 1;\n } else {\n left = middle + 1;\n }\n }\n return;\n }\n /**\n * 将该树中 层级为level 的sourceIndex处的节点移动到targetIndex位置\n * @param level\n * @param sourceIndex\n * @param targetIndex\n */\n movePosition(level: number, sourceIndex: number, targetIndex: number) {\n // let sourceNode: IPivotLayoutHeadNode;\n let parNode: ITreeLayoutHeadNode;\n let sourceSubIndex: number;\n let targetSubIndex: number;\n /**\n * 对parNode的子节点第subIndex处的node节点 进行判断是否为sourceIndex或者targetIndex\n * 如果是 则记录下subIndex 以对parNode中个节点位置进行移位\n * @param node\n * @param subIndex\n * @returns\n */\n const findTargetNode = (node: ITreeLayoutHeadNode, subIndex: number) => {\n if (sourceSubIndex !== undefined && targetSubIndex !== undefined) {\n return;\n }\n if (node.level === level) {\n if (node.startInTotal === sourceIndex) {\n // sourceNode = node;\n sourceSubIndex = subIndex;\n }\n // if (node.startInTotal === targetIndex) targetSubIndex = subIndex;\n // 判断targetIndex是否在node的范围内 将当前node的subIndex记为targetSubIndex\n if (node.startInTotal <= targetIndex && targetIndex <= node.startInTotal + node.size - 1) {\n targetSubIndex = subIndex;\n }\n }\n const children = node.children || node.columns;\n if (children && node.level < level) {\n parNode = node;\n for (let i = 0; i < children.length; i++) {\n if (\n (sourceIndex >= children[i].startInTotal && sourceIndex <= children[i].startInTotal + children[i].size) ||\n (targetIndex >= children[i].startInTotal && targetIndex <= children[i].startInTotal + children[i].size)\n ) {\n findTargetNode(children[i], i);\n }\n }\n }\n };\n findTargetNode(this.tree, 0);\n\n //对parNode子节点位置进行移位【根据sourceSubIndex和targetSubIndex】\n const children = parNode.children || parNode.columns;\n const sourceColumns = children.splice(sourceSubIndex, 1);\n sourceColumns.unshift(targetSubIndex as any, 0 as any);\n Array.prototype.splice.apply(children, sourceColumns);\n }\n /** 获取纯净树结构 没有level size index这些属性 */\n getCopiedTree() {\n const children = cloneDeep(this.tree.children);\n clearNode(children);\n return children;\n }\n}\n\n//#region 为方法getLayoutRowTree提供的类型和工具方法\nexport type LayouTreeNode = {\n dimensionKey?: string;\n indicatorKey?: string;\n value: string;\n hierarchyState: HierarchyState;\n children?: LayouTreeNode[];\n};\n\nexport function generateLayoutTree(tree: LayouTreeNode[], children: ITreeLayoutHeadNode[]) {\n children?.forEach((node: ITreeLayoutHeadNode) => {\n const diemnsonNode: {\n dimensionKey?: string;\n indicatorKey?: string;\n value: string;\n hierarchyState: HierarchyState;\n children: any;\n } = {\n dimensionKey: node.dimensionKey,\n indicatorKey: node.indicatorKey,\n value: node.value,\n hierarchyState: node.hierarchyState,\n children: undefined\n };\n tree.push(diemnsonNode);\n if (node.children) {\n diemnsonNode.children = [];\n generateLayoutTree(diemnsonNode.children, node.children);\n }\n });\n}\n//#endregion\n\n//#region 为方法getLayoutRowTreeCount提的工具方法\nexport function countLayoutTree(children: { children?: any }[], countParentNode: boolean) {\n let count = 0;\n children?.forEach((node: ITreeLayoutHeadNode) => {\n if (countParentNode) {\n count++;\n } else {\n if (!node.children || node.children.length === 0) {\n count++;\n }\n }\n if (node.children) {\n count += countLayoutTree(node.children, countParentNode);\n }\n });\n return count;\n}\n//#endregion\n\nexport function dealHeader(\n hd: ITreeLayoutHeadNode,\n _headerCellIds: number[][],\n results: HeaderData[],\n roots: number[],\n row: number,\n layoutMap: PivotHeaderLayoutMap\n) {\n // const col = this._columns.length;\n const id = hd.id;\n const dimensionInfo: IDimension =\n (layoutMap.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension) ??\n (layoutMap.columnsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension);\n const indicatorInfo = layoutMap.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (hd.indicatorKey) {\n return indicator.indicatorKey === hd.indicatorKey;\n }\n return indicator.title === hd.value;\n }) as IIndicator;\n const cell: HeaderData = {\n id,\n title: hd.value ?? indicatorInfo?.title,\n field: hd.dimensionKey,\n style:\n typeof (indicatorInfo ?? dimensionInfo)?.headerStyle === 'function'\n ? (indicatorInfo ?? dimensionInfo)?.headerStyle\n : Object.assign({}, (indicatorInfo ?? dimensionInfo)?.headerStyle),\n headerType: indicatorInfo?.headerType ?? dimensionInfo?.headerType ?? 'text',\n headerIcon: indicatorInfo?.headerIcon ?? dimensionInfo?.headerIcon,\n // define: <any>hd,\n define: Object.assign({}, <any>hd, indicatorInfo ?? dimensionInfo),\n fieldFormat: indicatorInfo?.headerFormat ?? dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: indicatorInfo?.dropDownMenu ?? dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n width: (dimensionInfo as IRowDimension)?.width,\n minWidth: (dimensionInfo as IRowDimension)?.minWidth,\n maxWidth: (dimensionInfo as IRowDimension)?.maxWidth,\n showSort: indicatorInfo?.showSort ?? dimensionInfo?.showSort,\n description: dimensionInfo?.description\n };\n\n if (indicatorInfo) {\n //收集indicatorDimensionKey 提到了构造函数中\n // this.indicatorDimensionKey = dimensionInfo.dimensionKey;\n if (indicatorInfo.customRender) {\n hd.customRender = indicatorInfo.customRender;\n }\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === indicatorInfo.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: indicatorInfo.indicatorKey,\n field: indicatorInfo.indicatorKey,\n fieldFormat: indicatorInfo?.format,\n cellType: indicatorInfo?.cellType ?? (indicatorInfo as any)?.columnType ?? 'text',\n chartModule: 'chartModule' in indicatorInfo ? indicatorInfo.chartModule : null,\n chartSpec: 'chartSpec' in indicatorInfo ? indicatorInfo.chartSpec : null,\n sparklineSpec: 'sparklineSpec' in indicatorInfo ? indicatorInfo.sparklineSpec : null,\n style: indicatorInfo?.style,\n icon: indicatorInfo?.icon,\n define: Object.assign({}, <any>hd, indicatorInfo, {\n dragHeader: dimensionInfo?.dragHeader\n }),\n width: indicatorInfo?.width,\n minWidth: indicatorInfo?.minWidth,\n maxWidth: indicatorInfo?.maxWidth,\n disableColumnResize: indicatorInfo?.disableColumnResize\n });\n }\n } else if (hd.indicatorKey) {\n //兼容当某个指标没有设置在dimension.indicators中\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === hd.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: hd.indicatorKey,\n field: hd.indicatorKey,\n cellType: 'text',\n define: Object.assign({}, <any>hd)\n });\n }\n }\n // if (dimensionInfo.indicators) {\n // layoutMap.hideIndicatorName = dimensionInfo.hideIndicatorName ?? false;\n // layoutMap.indicatorsAsCol = dimensionInfo.indicatorsAsCol ?? true;\n // }\n results[id] = cell;\n layoutMap._headerObjects[id] = cell;\n _headerCellIds[row][layoutMap.colIndex] = id;\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][layoutMap.colIndex] = roots[r];\n }\n\n // 处理汇总小计跨维度层级的情况\n if ((hd as any).levelSpan > 1) {\n for (let i = 1; i < (hd as any).levelSpan; i++) {\n if (!_headerCellIds[row + i]) {\n _headerCellIds[row + i] = [];\n }\n _headerCellIds[row + i][layoutMap.colIndex] = id;\n }\n }\n\n if ((hd as ITreeLayoutHeadNode).children?.length >= 1) {\n layoutMap\n ._addHeaders(_headerCellIds, row + ((hd as any).levelSpan ?? 1), (hd as ITreeLayoutHeadNode).children ?? [], [\n ...roots,\n ...Array((hd as any).levelSpan ?? 1).fill(id)\n ])\n .forEach(c => results.push(c));\n } else {\n // columns.push([\"\"])//代码一个路径\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][layoutMap.colIndex] = id;\n\n // if ((hd as any).levelSpan > 1) {\n // for (let i = 1; i < (hd as any).levelSpan; i++) {\n // _headerCellIds[r + i][layoutMap.colIndex] = id;\n // }\n // }\n }\n layoutMap.colIndex++;\n }\n}\n\nexport function dealHeaderForTreeMode(\n hd: ITreeLayoutHeadNode,\n _headerCellIds: number[][],\n results: HeaderData[],\n roots: number[],\n row: number,\n totalLevel: number,\n show: boolean,\n dimensions: (IDimension | string)[],\n layoutMap: PivotHeaderLayoutMap\n) {\n const id = hd.id;\n // const dimensionInfo: IDimension =\n // (this.rowsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n // ) as IDimension) ??\n // (this.columnsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n // ) as IDimension);\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension;\n\n const cell: HeaderData = {\n id,\n title: hd.value,\n field: hd.dimensionKey as FieldData,\n //如果不是整棵树的叶子节点,都靠左显示\n style:\n hd.level + 1 === totalLevel || typeof dimensionInfo?.headerStyle === 'function'\n ? dimensionInfo?.headerStyle\n : Object.assign({}, dimensionInfo?.headerStyle, { textAlign: 'left' }),\n headerType: dimensionInfo?.headerType ?? 'text',\n headerIcon: dimensionInfo?.headerIcon,\n define: Object.assign(<any>hd, {\n linkJump: (dimensionInfo as ILinkDimension)?.linkJump,\n linkDetect: (dimensionInfo as ILinkDimension)?.linkDetect,\n templateLink: (dimensionInfo as ILinkDimension)?.templateLink,\n\n // image相关 to be fixed\n keepAspectRatio: (dimensionInfo as IImageDimension)?.keepAspectRatio ?? false,\n imageAutoSizing: (dimensionInfo as IImageDimension)?.imageAutoSizing,\n\n headerCustomRender: dimensionInfo?.headerCustomRender,\n headerCustomLayout: dimensionInfo?.headerCustomLayout,\n dragHeader: dimensionInfo?.dragHeader,\n disableHeaderHover: !!dimensionInfo?.disableHeaderHover,\n disableHeaderSelect: !!dimensionInfo?.disableHeaderSelect\n }), //这里不能新建对象,要用hd保持引用关系\n fieldFormat: dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey as string,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n hierarchyLevel: hd.level,\n dimensionTotalLevel: totalLevel,\n hierarchyState: hd.level + 1 === totalLevel ? undefined : hd.hierarchyState,\n width: (dimensionInfo as IRowDimension)?.width,\n minWidth: (dimensionInfo as IRowDimension)?.minWidth,\n maxWidth: (dimensionInfo as IRowDimension)?.maxWidth,\n parentCellId: roots[roots.length - 1]\n };\n\n results[id] = cell;\n // this._cellIdDiemnsionMap.set(id, {\n // dimensionKey: hd.dimensionKey,\n // value: hd.value\n // });\n layoutMap._headerObjects[id] = cell;\n _headerCellIds[row][layoutMap.colIndex] = id;\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][layoutMap.colIndex] = roots[r];\n }\n if (hd.hierarchyState === HierarchyState.expand && (hd as ITreeLayoutHeadNode).children?.length >= 1) {\n //row传值 colIndex++和_addHeaders有区别\n show && layoutMap.colIndex++;\n layoutMap\n ._addHeadersForTreeMode(\n _headerCellIds,\n row,\n (hd as ITreeLayoutHeadNode).children ?? [],\n [...roots, id],\n totalLevel,\n show && hd.hierarchyState === HierarchyState.expand, //当前节点show 且当前节点状态为展开 则传给子节点为show:true\n dimensions\n )\n .forEach(c => results.push(c));\n } else {\n // columns.push([\"\"])//代码一个路径\n show && layoutMap.colIndex++;\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][layoutMap.colIndex] = id;\n }\n }\n}\n\nfunction clearNode(children: any) {\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n delete node.level;\n delete node.startIndex;\n delete node.id;\n delete node.levelSpan;\n delete node.size;\n delete node.startInTotal;\n const childrenNew = node.children || node.columns;\n if (childrenNew) {\n clearNode(childrenNew);\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/layout/tree-helper.ts"],"names":[],"mappings":";;;AAAA,6CAAsD;AACtD,kDAA+C;AAC/C,4CAAmE;AAanE,0CAA6C;AAmC7C,MAAa,aAAa;IAkCxB,YACE,IAA2B,EAC3B,SAA4B,EAC5B,gBAAiC,MAAM,EACvC,iBAAyB,SAAS;QA/BpC,sBAAiB,GAAG,KAAK,CAAC;QAG1B,SAAI,GAAwB;YAC1B,EAAE,EAAE,CAAC;YACL,YAAY,EAAE,EAAE;YAEhB,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,CAAC,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,IAAI,EAAE,CAAC;YACP,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,SAAS;SAC1B,CAAC;QAEF,eAAU,GAAG,CAAC,CAAC;QAMf,kBAAa,GAAsB,IAAI,qBAAS,EAAU,CAAC;QAG3D,UAAK,GAAqB,IAAI,GAAG,EAAE,CAAC;QAOlC,IAAI,CAAC,iBAAiB,GAAG,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAS,CAAC;QACjF,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,IAA2B,EAAE,cAAc,GAAG,KAAK;QAIvD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,aAAa,GAAG,IAAI,qBAAS,EAAU,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAA6B,CAAC;QAInD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC/C,CAAC;IACD,WAAW,CAAC,IAAyB,EAAE,UAAkB,EAAE,MAA2B;;QACpF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,CAAC,MAAA,MAAM,CAAC,YAAY,mCAAI,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QAMjE,IAAI,MAAA,IAAI,CAAC,YAAY,mCAAI,IAAI,CAAC,YAAY,EAAE;YAC1C,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,yCAAgC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;gBACnG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,yCAAgC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/G,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;gBACZ,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;aAClC;SACF;QACD,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC;QAE/C,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;YACjC,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,KAAI,CAAC,EAAE;gBACzB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;;oBAC1B,CAAC,CAAC,KAAK,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBAChC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC;aACJ;iBAAM;gBACL,IAAI,GAAG,CAAC,CAAC;aAEV;SACF;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,yBAAc,CAAC,MAAM,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,KAAI,CAAC,EAAE;YAEjF,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;;gBAC1B,CAAC,CAAC,KAAK,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;SACJ;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,yBAAc,CAAC,QAAQ,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,KAAI,CAAC,EAAE;YAEnF,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;;gBAC1B,CAAC,CAAC,KAAK,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;SACJ;aAAM,IACL,CAAC,IAAI,CAAC,cAAc;YACpB,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc;YACpC,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,KAAI,CAAC,IAAI,QAAQ,KAAK,IAAI,CAAC,EAC5C;YAEA,IAAI,CAAC,cAAc,GAAG,yBAAc,CAAC,MAAM,CAAC;YAC5C,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,KAAI,CAAC;gBACnB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;;oBAC1B,CAAC,CAAC,KAAK,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBAChC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC;SACN;aAAM,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,KAAI,CAAC,IAAI,QAAQ,KAAK,IAAI,EAAE;YAErD,IAAI,CAAC,cAAc,GAAG,yBAAc,CAAC,QAAQ,CAAC;YAC9C,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,KAAI,CAAC;gBACnB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;;oBAC1B,CAAC,CAAC,KAAK,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBAChC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;SACN;aAAM;YAEL,IAAI,CAAC,cAAc,GAAG,yBAAc,CAAC,IAAI,CAAC;YAC1C,IAAI,GAAG,CAAC,CAAC;SAEV;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,WAAW,CAAC,KAAa,EAAE,OAAO,GAAG,EAAE;QACrC,MAAM,IAAI,GAAU,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB,CAAC,GAAqB;QACxC,MAAM,IAAI,GAAU,EAAE,CAAC;QACvB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9C,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpB,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC;aAC3B;iBAAM;gBACL,MAAM;aACP;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IACD,YAAY,CAAC,KAA4B,EAAE,EAAkB;QAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,UAAU,CAAC,KAAa,EAAE,IAAyB,EAAE,IAAgC,EAAE,OAAe;QACpG,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE;YACnE,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE;YACzE,OAAO;SACR;QAYD,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;QAEvC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACjD,IAAI,MAAM,IAAI,SAAS,CAAC,UAAU,IAAI,MAAM,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE;gBACpF,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBAClD,OAAO;aACR;SACF;QAED,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAErC,OAAO,IAAI,IAAI,KAAK,EAAE;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEtC,IAAI,MAAM,IAAI,OAAO,CAAC,UAAU,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE;gBAC9E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACvC,MAAM,YAAY,GAAa,EAAE,CAAC;gBAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;oBAC/B,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE;wBACvB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBACxB;gBACH,CAAC,CAAC,CAAC;gBACH,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBAChD,MAAM;aACP;iBAAM,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE;gBACtC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;aACpB;iBAAM;gBACL,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;aACnB;SACF;QACD,OAAO;IACT,CAAC;IAOD,YAAY,CAAC,KAAa,EAAE,WAAmB,EAAE,WAAmB;QAElE,IAAI,OAA4B,CAAC;QACjC,IAAI,cAAsB,CAAC;QAC3B,IAAI,cAAsB,CAAC;QAQ3B,MAAM,cAAc,GAAG,CAAC,IAAyB,EAAE,QAAgB,EAAE,EAAE;YACrE,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS,EAAE;gBAChE,OAAO;aACR;YACD,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;gBACxB,IAAI,IAAI,CAAC,YAAY,KAAK,WAAW,EAAE;oBAErC,cAAc,GAAG,QAAQ,CAAC;iBAC3B;gBAGD,IAAI,IAAI,CAAC,YAAY,IAAI,WAAW,IAAI,WAAW,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;oBACxF,cAAc,GAAG,QAAQ,CAAC;iBAC3B;aACF;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC;YAC/C,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE;gBAClC,OAAO,GAAG,IAAI,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACxC,IACE,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBACvG,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EACvG;wBACA,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBAChC;iBACF;aACF;QACH,CAAC,CAAC;QACF,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAG7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;QACrD,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACzD,aAAa,CAAC,OAAO,CAAC,cAAqB,EAAE,CAAQ,CAAC,CAAC;QACvD,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACxD,CAAC;IAED,aAAa;QACX,MAAM,QAAQ,GAAG,IAAA,kBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpB,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAvRD,sCAuRC;AAWD,SAAgB,kBAAkB,CAAC,IAAqB,EAAE,QAA+B;IACvF,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,CAAC,CAAC,IAAyB,EAAE,EAAE;QAC9C,MAAM,YAAY,GAMd;YACF,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,QAAQ,EAAE,SAAS;SACpB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,YAAY,CAAC,QAAQ,GAAG,EAAE,CAAC;YAC3B,kBAAkB,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC1D;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AArBD,gDAqBC;AAID,SAAgB,eAAe,CAAC,QAA8B,EAAE,eAAwB;IACtF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,CAAC,CAAC,IAAyB,EAAE,EAAE;QAC9C,IAAI,eAAe,EAAE;YACnB,KAAK,EAAE,CAAC;SACT;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBAChD,KAAK,EAAE,CAAC;aACT;SACF;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;SAC1D;IACH,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAfD,0CAeC;AAGD,SAAgB,UAAU,CACxB,EAAuB,EACvB,cAA0B,EAC1B,OAAqB,EACrB,KAAe,EACf,GAAW,EACX,SAA+B;;IAG/B,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IACjB,MAAM,aAAa,GACjB,MAAC,MAAA,SAAS,CAAC,UAAU,0CAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CACtC,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,KAAK,EAAE,CAAC,YAAY,CACpE,mCACf,MAAA,SAAS,CAAC,aAAa,0CAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CACzC,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,KAAK,EAAE,CAAC,YAAY,CACpE,CAAC;IACnB,MAAM,aAAa,GAAG,MAAA,SAAS,CAAC,gBAAgB,0CAAE,IAAI,CAAC,SAAS,CAAC,EAAE;QACjE,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;YACjC,OAAO,KAAK,CAAC;SACd;QACD,IAAI,EAAE,CAAC,YAAY,EAAE;YACnB,OAAO,SAAS,CAAC,YAAY,KAAK,EAAE,CAAC,YAAY,CAAC;SACnD;QACD,OAAO,SAAS,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC;IACtC,CAAC,CAAe,CAAC;IACjB,MAAM,IAAI,GAAe;QACvB,EAAE;QACF,KAAK,EAAE,MAAA,EAAE,CAAC,KAAK,mCAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK;QACvC,KAAK,EAAE,EAAE,CAAC,YAAY;QACtB,KAAK,EACH,OAAO,CAAA,MAAA,CAAC,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,aAAa,CAAC,0CAAE,WAAW,CAAA,KAAK,UAAU;YACjE,CAAC,CAAC,MAAA,CAAC,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,aAAa,CAAC,0CAAE,WAAW;YAC/C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAA,CAAC,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,aAAa,CAAC,0CAAE,WAAW,CAAC;QACtE,UAAU,EAAE,MAAA,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU,mCAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU,mCAAI,MAAM;QAC5E,UAAU,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU,mCAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU;QAElE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAO,EAAE,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,aAAa,CAAC;QAClE,WAAW,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,YAAY,mCAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,YAAY;QAEvE,YAAY,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,YAAY,mCAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,YAAY;QACxE,SAAS,EAAE;YACT,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,YAAY,EAAE,EAAE,CAAC,YAAY;YAC7B,aAAa,EAAE,KAAK;SAErB;QACD,KAAK,EAAG,aAA+B,aAA/B,aAAa,uBAAb,aAAa,CAAoB,KAAK;QAC9C,QAAQ,EAAG,aAA+B,aAA/B,aAAa,uBAAb,aAAa,CAAoB,QAAQ;QACpD,QAAQ,EAAG,aAA+B,aAA/B,aAAa,uBAAb,aAAa,CAAoB,QAAQ;QACpD,QAAQ,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ,mCAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ;QAC5D,WAAW,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW;KACxC,CAAC;IAEF,IAAI,aAAa,EAAE;QAGjB,IAAI,aAAa,CAAC,YAAY,EAAE;YAC9B,EAAE,CAAC,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC;SAC9C;QACD,IAAI,CAAC,IAAA,gBAAO,EAAC,MAAA,SAAS,CAAC,WAAW,0CAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,KAAK,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE;YAC7G,MAAA,SAAS,CAAC,WAAW,0CAAE,IAAI,CAAC;gBAC1B,EAAE,EAAE,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK;gBAC/B,YAAY,EAAE,aAAa,CAAC,YAAY;gBACxC,KAAK,EAAE,aAAa,CAAC,YAAY;gBACjC,WAAW,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM;gBAClC,QAAQ,EAAE,MAAA,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ,mCAAK,aAAqB,aAArB,aAAa,uBAAb,aAAa,CAAU,UAAU,mCAAI,MAAM;gBACjF,WAAW,EAAE,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;gBAC9E,SAAS,EAAE,WAAW,IAAI,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;gBACxE,aAAa,EAAE,eAAe,IAAI,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;gBACpF,KAAK,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK;gBAC3B,IAAI,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAO,EAAE,EAAE,aAAa,EAAE;oBAChD,UAAU,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU;iBACtC,CAAC;gBACF,KAAK,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK;gBAC3B,QAAQ,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ;gBACjC,QAAQ,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ;gBACjC,mBAAmB,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,mBAAmB;aACxD,CAAC,CAAC;SACJ;KACF;SAAM,IAAI,EAAE,CAAC,YAAY,EAAE;QAE1B,IAAI,CAAC,IAAA,gBAAO,EAAC,MAAA,SAAS,CAAC,WAAW,0CAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,KAAK,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE;YAClG,MAAA,SAAS,CAAC,WAAW,0CAAE,IAAI,CAAC;gBAC1B,EAAE,EAAE,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK;gBAC/B,YAAY,EAAE,EAAE,CAAC,YAAY;gBAC7B,KAAK,EAAE,EAAE,CAAC,YAAY;gBACtB,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAO,EAAE,CAAC;aACnC,CAAC,CAAC;SACJ;KACF;IAKD,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACnB,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACpC,cAAc,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACjC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;KAClD;IAGD,IAAK,EAAU,CAAC,SAAS,GAAG,CAAC,EAAE;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAI,EAAU,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE;gBAC5B,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;aAC9B;YACD,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;SAClD;KACF;IAED,IAAI,CAAA,MAAC,EAA0B,CAAC,QAAQ,0CAAE,MAAM,KAAI,CAAC,EAAE;QACrD,SAAS;aACN,WAAW,CAAC,cAAc,EAAE,GAAG,GAAG,CAAC,MAAC,EAAU,CAAC,SAAS,mCAAI,CAAC,CAAC,EAAE,MAAC,EAA0B,CAAC,QAAQ,mCAAI,EAAE,EAAE;YAC3G,GAAG,KAAK;YACR,GAAG,KAAK,CAAC,MAAC,EAAU,CAAC,SAAS,mCAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;SAC9C,CAAC;aACD,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAClC;SAAM;QAEL,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpD,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;SAO5C;QACD,SAAS,CAAC,QAAQ,EAAE,CAAC;KACtB;AACH,CAAC;AAtID,gCAsIC;AAED,SAAgB,qBAAqB,CACnC,EAAuB,EACvB,cAA0B,EAC1B,OAAqB,EACrB,KAAe,EACf,GAAW,EACX,UAAkB,EAClB,IAAa,EACb,UAAmC,EACnC,SAA+B;;IAE/B,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAQjB,MAAM,aAAa,GAAe,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAC5D,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,KAAK,EAAE,CAAC,YAAY,CACrE,CAAC;IAEhB,MAAM,IAAI,GAAe;QACvB,EAAE;QACF,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,KAAK,EAAE,EAAE,CAAC,YAAyB;QAEnC,KAAK,EACH,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,UAAU,IAAI,OAAO,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW,CAAA,KAAK,UAAU;YAC7E,CAAC,CAAC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW;YAC5B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAC1E,UAAU,EAAE,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU,mCAAI,MAAM;QAC/C,UAAU,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAM,EAAE,EAAE;YAC7B,QAAQ,EAAG,aAAgC,aAAhC,aAAa,uBAAb,aAAa,CAAqB,QAAQ;YACrD,UAAU,EAAG,aAAgC,aAAhC,aAAa,uBAAb,aAAa,CAAqB,UAAU;YACzD,YAAY,EAAG,aAAgC,aAAhC,aAAa,uBAAb,aAAa,CAAqB,YAAY;YAG7D,eAAe,EAAE,MAAC,aAAiC,aAAjC,aAAa,uBAAb,aAAa,CAAsB,eAAe,mCAAI,KAAK;YAC7E,eAAe,EAAG,aAAiC,aAAjC,aAAa,uBAAb,aAAa,CAAsB,eAAe;YAEpE,kBAAkB,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,kBAAkB;YACrD,kBAAkB,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,kBAAkB;YACrD,UAAU,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU;YACrC,kBAAkB,EAAE,CAAC,CAAC,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,kBAAkB,CAAA;YACvD,mBAAmB,EAAE,CAAC,CAAC,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,mBAAmB,CAAA;SAC1D,CAAC;QACF,WAAW,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,YAAY;QAExC,YAAY,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,YAAY;QACzC,SAAS,EAAE;YACT,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,YAAY,EAAE,EAAE,CAAC,YAAsB;YACvC,aAAa,EAAE,KAAK;SAErB;QACD,cAAc,EAAE,EAAE,CAAC,KAAK;QACxB,mBAAmB,EAAE,UAAU;QAC/B,cAAc,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc;QAC3E,KAAK,EAAG,aAA+B,aAA/B,aAAa,uBAAb,aAAa,CAAoB,KAAK;QAC9C,QAAQ,EAAG,aAA+B,aAA/B,aAAa,uBAAb,aAAa,CAAoB,QAAQ;QACpD,QAAQ,EAAG,aAA+B,aAA/B,aAAa,uBAAb,aAAa,CAAoB,QAAQ;QACpD,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;KACtC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IAKnB,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACpC,cAAc,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACjC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;KAClD;IACD,IAAI,EAAE,CAAC,cAAc,KAAK,yBAAc,CAAC,MAAM,IAAI,CAAA,MAAC,EAA0B,CAAC,QAAQ,0CAAE,MAAM,KAAI,CAAC,EAAE;QAEpG,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC7B,SAAS;aACN,sBAAsB,CACrB,cAAc,EACd,GAAG,EACH,MAAC,EAA0B,CAAC,QAAQ,mCAAI,EAAE,EAC1C,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,EACd,UAAU,EACV,IAAI,IAAI,EAAE,CAAC,cAAc,KAAK,yBAAc,CAAC,MAAM,EACnD,UAAU,CACX;aACA,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAClC;SAAM;QAEL,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpD,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;SAC5C;KACF;AACH,CAAC;AAlGD,sDAkGC;AAED,SAAS,SAAS,CAAC,QAAa;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;QACvB,OAAO,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC;QAClD,IAAI,WAAW,EAAE;YACf,SAAS,CAAC,WAAW,CAAC,CAAC;SACxB;KACF;AACH,CAAC","file":"tree-helper.js","sourcesContent":["import { cloneDeep, isValid } from '@visactor/vutils';\nimport { NumberMap } from '../tools/NumberMap';\nimport { IndicatorDimensionKeyPlaceholder } from '../tools/global';\nimport type { Either } from '../tools/helper';\nimport type {\n CellInfo,\n ColumnIconOption,\n FieldData,\n HeaderData,\n ICustomRender,\n IDimension,\n IIndicator,\n IRowDimension,\n LayoutObjectId\n} from '../ts-types';\nimport { HierarchyState } from '../ts-types';\nimport type { PivotHeaderLayoutMap } from './pivot-header-layout';\nimport type { ILinkDimension } from '../ts-types/pivot-table/dimension/link-dimension';\nimport type { IImageDimension } from '../ts-types/pivot-table/dimension/image-dimension';\n// import { sharedVar } from './pivot-header-layout';\n\ninterface ITreeLayoutBaseHeadNode {\n id: number;\n // dimensionKey: string;\n // // title: string;\n // indicatorKey?: string;\n value: string;\n children: ITreeLayoutHeadNode[] | undefined;\n columns?: any; //兼容ListTable情况 simple-header-layout中增加了columnTree\n level: number;\n /** 节点跨占层数 如汇总节点跨几层维度 */\n levelSpan: number;\n startIndex: number;\n size: number; //对应到colSpan或者rowSpan\n // parsing?: 'img' | 'link' | 'video' | 'templateLink';\n startInTotal: number;\n // headerStyle:HeaderStyleOption| null;\n customRender?: ICustomRender;\n\n hierarchyState: HierarchyState;\n headerIcon?: (string | ColumnIconOption)[] | ((args: CellInfo) => (string | ColumnIconOption)[]);\n}\n\ninterface ITreeLayoutDimensionHeadNode extends ITreeLayoutBaseHeadNode {\n dimensionKey: string;\n}\ninterface ITreeLayoutIndicatorHeadNode extends ITreeLayoutBaseHeadNode {\n indicatorKey: string;\n}\nexport type ITreeLayoutHeadNode = Either<ITreeLayoutDimensionHeadNode, ITreeLayoutIndicatorHeadNode>;\nexport class DimensionTree {\n sharedVar: { seqId: number };\n // 每一个值对应的序号 结果缓存\n // cache: {\n // [propName: string]: any;\n // };\n //树形展示 会将非叶子节点单独展示一行 所以size会增加非叶子节点的个数\n sizeIncludeParent = false;\n rowExpandLevel: number;\n hierarchyType: 'grid' | 'tree';\n tree: ITreeLayoutHeadNode = {\n id: 0,\n dimensionKey: '',\n // title: '',\n value: '',\n children: [],\n level: -1,\n levelSpan: 1,\n startIndex: 0,\n size: 0,\n startInTotal: 0,\n hierarchyState: undefined\n };\n\n totalLevel = 0;\n\n // blockLevel: number = 0;\n\n // blockStartIndexMap: Map<number, boolean> = new Map();\n // blockEndIndexMap: Map<number, boolean> = new Map();\n dimensionKeys: NumberMap<string> = new NumberMap<string>();\n // dimensions: IDimension[] | undefined;//目前用不到这个\n\n cache: Map<number, any> = new Map();\n constructor(\n tree: ITreeLayoutHeadNode[],\n sharedVar: { seqId: number },\n hierarchyType: 'grid' | 'tree' = 'grid',\n rowExpandLevel: number = undefined\n ) {\n this.sizeIncludeParent = rowExpandLevel !== null && rowExpandLevel !== undefined;\n this.rowExpandLevel = rowExpandLevel;\n this.hierarchyType = hierarchyType;\n this.sharedVar = sharedVar;\n this.reset(tree);\n }\n\n reset(tree: ITreeLayoutHeadNode[], updateTreeNode = false) {\n // 清空缓存的计算\n // this.cache = {};\n // this.dimensions = dimensions;\n this.cache.clear();\n this.dimensionKeys = new NumberMap<string>();\n this.tree.children = tree as ITreeLayoutHeadNode[];\n // const re = { totalLevel: 0 };\n // if (updateTreeNode) this.updateTreeNode(this.tree, 0, re, this.tree);\n // else\n this.setTreeNode(this.tree, 0, this.tree);\n this.totalLevel = this.dimensionKeys.count();\n }\n setTreeNode(node: ITreeLayoutHeadNode, startIndex: number, parent: ITreeLayoutHeadNode): number {\n node.startIndex = startIndex;\n node.startInTotal = (parent.startInTotal ?? 0) + node.startIndex;\n // if (node.dimensionKey) {\n // !this.dimensionKeys.contain(node.dimensionKey) &&\n // this.dimensionKeys.put(node.level, node.dimensionKey);\n // if (!node.id) node.id = ++seqId;\n // }\n if (node.dimensionKey ?? node.indicatorKey) {\n !this.dimensionKeys.contain(node.indicatorKey ? IndicatorDimensionKeyPlaceholder : node.dimensionKey) &&\n this.dimensionKeys.put(node.level, node.indicatorKey ? IndicatorDimensionKeyPlaceholder : node.dimensionKey);\n if (!node.id) {\n node.id = ++this.sharedVar.seqId;\n }\n }\n let size = node.dimensionKey ? (this.sizeIncludeParent ? 1 : 0) : 0;\n const children = node.children || node.columns;\n //平铺展示 分析所有层级\n if (this.hierarchyType === 'grid') {\n if (children?.length >= 1) {\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else {\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n } else if (node.hierarchyState === HierarchyState.expand && children?.length >= 1) {\n //树形展示 有子节点 且下一层需要展开\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (node.hierarchyState === HierarchyState.collapse && children?.length >= 1) {\n //树形展示 有子节点 且下一层不需要展开\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.setTreeNode(n, size, node);\n });\n } else if (\n !node.hierarchyState &&\n node.level + 1 < this.rowExpandLevel &&\n (children?.length >= 1 || children === true)\n ) {\n //树形展示 有子节点 且下一层需要展开\n node.hierarchyState = HierarchyState.expand;\n children?.length >= 1 &&\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (children?.length >= 1 || children === true) {\n //树形展示 有子节点 且下一层不需要展开\n node.hierarchyState = HierarchyState.collapse;\n children?.length >= 1 &&\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.setTreeNode(n, size, node);\n });\n } else {\n //树形展示 无children子节点。但不能确定是最后一层的叶子节点 totalLevel还不能确定是计算完整棵树的整体深度\n node.hierarchyState = HierarchyState.none;\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n\n node.size = size;\n // startInTotal = parent.startIndex + prevStartIndex\n return size;\n }\n getTreePath(index: number, maxDeep = 30): Array<ITreeLayoutHeadNode> {\n const path: any[] = [];\n this.searchPath(index, this.tree, path, maxDeep);\n path.shift();\n return path;\n }\n\n getTreePathByCellIds(ids: LayoutObjectId[]): Array<ITreeLayoutHeadNode> {\n const path: any[] = [];\n let nodes = this.tree.children;\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const pathNode = this.findNodeById(nodes, id);\n if (pathNode) {\n path.push(pathNode);\n nodes = pathNode.children;\n } else {\n break;\n }\n }\n // path.shift();\n return path;\n }\n findNodeById(nodes: ITreeLayoutHeadNode[], id: LayoutObjectId) {\n return nodes.find(node => {\n return node.id === id;\n });\n }\n searchPath(index: number, node: ITreeLayoutHeadNode, path: Array<ITreeLayoutHeadNode>, maxDeep: number) {\n if (!node) {\n return;\n }\n if (index < node.startIndex || index >= node.startIndex + node.size) {\n return;\n }\n path.push(node);\n if (!node.children || node.children.length === 0 || node.level >= maxDeep) {\n return;\n }\n\n // const cIndex = index - node.startIndex;\n // for (let i = 0; i < node.children.length; i++) {\n // const element = node.children[i];\n // if (cIndex >= element.startIndex && cIndex < element.startIndex + element.size) {\n // this.searchPath(cIndex, element, path, maxDeep);\n // break;\n // }\n // }\n\n // use dichotomy to optimize search performance\n const cIndex = index - node.startIndex;\n\n if (this.cache.has(node.level + 1)) {\n const cacheNode = this.cache.get(node.level + 1);\n if (cIndex >= cacheNode.startIndex && cIndex < cacheNode.startIndex + cacheNode.size) {\n this.searchPath(cIndex, cacheNode, path, maxDeep);\n return;\n }\n }\n\n let left = 0;\n let right = node.children.length - 1;\n\n while (left <= right) {\n const middle = Math.floor((left + right) / 2);\n const element = node.children[middle];\n\n if (cIndex >= element.startIndex && cIndex < element.startIndex + element.size) {\n this.cache.set(element.level, element);\n const deleteLevels: number[] = [];\n this.cache.forEach((node, key) => {\n if (key > element.level) {\n deleteLevels.push(key);\n }\n });\n deleteLevels.forEach(key => {\n this.cache.delete(key);\n });\n this.searchPath(cIndex, element, path, maxDeep);\n break;\n } else if (cIndex < element.startIndex) {\n right = middle - 1;\n } else {\n left = middle + 1;\n }\n }\n return;\n }\n /**\n * 将该树中 层级为level 的sourceIndex处的节点移动到targetIndex位置\n * @param level\n * @param sourceIndex\n * @param targetIndex\n */\n movePosition(level: number, sourceIndex: number, targetIndex: number) {\n // let sourceNode: IPivotLayoutHeadNode;\n let parNode: ITreeLayoutHeadNode;\n let sourceSubIndex: number;\n let targetSubIndex: number;\n /**\n * 对parNode的子节点第subIndex处的node节点 进行判断是否为sourceIndex或者targetIndex\n * 如果是 则记录下subIndex 以对parNode中个节点位置进行移位\n * @param node\n * @param subIndex\n * @returns\n */\n const findTargetNode = (node: ITreeLayoutHeadNode, subIndex: number) => {\n if (sourceSubIndex !== undefined && targetSubIndex !== undefined) {\n return;\n }\n if (node.level === level) {\n if (node.startInTotal === sourceIndex) {\n // sourceNode = node;\n sourceSubIndex = subIndex;\n }\n // if (node.startInTotal === targetIndex) targetSubIndex = subIndex;\n // 判断targetIndex是否在node的范围内 将当前node的subIndex记为targetSubIndex\n if (node.startInTotal <= targetIndex && targetIndex <= node.startInTotal + node.size - 1) {\n targetSubIndex = subIndex;\n }\n }\n const children = node.children || node.columns;\n if (children && node.level < level) {\n parNode = node;\n for (let i = 0; i < children.length; i++) {\n if (\n (sourceIndex >= children[i].startInTotal && sourceIndex <= children[i].startInTotal + children[i].size) ||\n (targetIndex >= children[i].startInTotal && targetIndex <= children[i].startInTotal + children[i].size)\n ) {\n findTargetNode(children[i], i);\n }\n }\n }\n };\n findTargetNode(this.tree, 0);\n\n //对parNode子节点位置进行移位【根据sourceSubIndex和targetSubIndex】\n const children = parNode.children || parNode.columns;\n const sourceColumns = children.splice(sourceSubIndex, 1);\n sourceColumns.unshift(targetSubIndex as any, 0 as any);\n Array.prototype.splice.apply(children, sourceColumns);\n }\n /** 获取纯净树结构 没有level size index这些属性 */\n getCopiedTree() {\n const children = cloneDeep(this.tree.children);\n clearNode(children);\n return children;\n }\n}\n\n//#region 为方法getLayoutRowTree提供的类型和工具方法\nexport type LayouTreeNode = {\n dimensionKey?: string;\n indicatorKey?: string;\n value: string;\n hierarchyState: HierarchyState;\n children?: LayouTreeNode[];\n};\n\nexport function generateLayoutTree(tree: LayouTreeNode[], children: ITreeLayoutHeadNode[]) {\n children?.forEach((node: ITreeLayoutHeadNode) => {\n const diemnsonNode: {\n dimensionKey?: string;\n indicatorKey?: string;\n value: string;\n hierarchyState: HierarchyState;\n children: any;\n } = {\n dimensionKey: node.dimensionKey,\n indicatorKey: node.indicatorKey,\n value: node.value,\n hierarchyState: node.hierarchyState,\n children: undefined\n };\n tree.push(diemnsonNode);\n if (node.children) {\n diemnsonNode.children = [];\n generateLayoutTree(diemnsonNode.children, node.children);\n }\n });\n}\n//#endregion\n\n//#region 为方法getLayoutRowTreeCount提的工具方法\nexport function countLayoutTree(children: { children?: any }[], countParentNode: boolean) {\n let count = 0;\n children?.forEach((node: ITreeLayoutHeadNode) => {\n if (countParentNode) {\n count++;\n } else {\n if (!node.children || node.children.length === 0) {\n count++;\n }\n }\n if (node.children) {\n count += countLayoutTree(node.children, countParentNode);\n }\n });\n return count;\n}\n//#endregion\n\nexport function dealHeader(\n hd: ITreeLayoutHeadNode,\n _headerCellIds: number[][],\n results: HeaderData[],\n roots: number[],\n row: number,\n layoutMap: PivotHeaderLayoutMap\n) {\n // const col = this._columns.length;\n const id = hd.id;\n const dimensionInfo: IDimension =\n (layoutMap.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension) ??\n (layoutMap.columnsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension);\n const indicatorInfo = layoutMap.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (hd.indicatorKey) {\n return indicator.indicatorKey === hd.indicatorKey;\n }\n return indicator.title === hd.value;\n }) as IIndicator;\n const cell: HeaderData = {\n id,\n title: hd.value ?? indicatorInfo?.title,\n field: hd.dimensionKey,\n style:\n typeof (indicatorInfo ?? dimensionInfo)?.headerStyle === 'function'\n ? (indicatorInfo ?? dimensionInfo)?.headerStyle\n : Object.assign({}, (indicatorInfo ?? dimensionInfo)?.headerStyle),\n headerType: indicatorInfo?.headerType ?? dimensionInfo?.headerType ?? 'text',\n headerIcon: indicatorInfo?.headerIcon ?? dimensionInfo?.headerIcon,\n // define: <any>hd,\n define: Object.assign({}, <any>hd, indicatorInfo ?? dimensionInfo),\n fieldFormat: indicatorInfo?.headerFormat ?? dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: indicatorInfo?.dropDownMenu ?? dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n width: (dimensionInfo as IRowDimension)?.width,\n minWidth: (dimensionInfo as IRowDimension)?.minWidth,\n maxWidth: (dimensionInfo as IRowDimension)?.maxWidth,\n showSort: indicatorInfo?.showSort ?? dimensionInfo?.showSort,\n description: dimensionInfo?.description\n };\n\n if (indicatorInfo) {\n //收集indicatorDimensionKey 提到了构造函数中\n // this.indicatorDimensionKey = dimensionInfo.dimensionKey;\n if (indicatorInfo.customRender) {\n hd.customRender = indicatorInfo.customRender;\n }\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === indicatorInfo.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: indicatorInfo.indicatorKey,\n field: indicatorInfo.indicatorKey,\n fieldFormat: indicatorInfo?.format,\n cellType: indicatorInfo?.cellType ?? (indicatorInfo as any)?.columnType ?? 'text',\n chartModule: 'chartModule' in indicatorInfo ? indicatorInfo.chartModule : null,\n chartSpec: 'chartSpec' in indicatorInfo ? indicatorInfo.chartSpec : null,\n sparklineSpec: 'sparklineSpec' in indicatorInfo ? indicatorInfo.sparklineSpec : null,\n style: indicatorInfo?.style,\n icon: indicatorInfo?.icon,\n define: Object.assign({}, <any>hd, indicatorInfo, {\n dragHeader: dimensionInfo?.dragHeader\n }),\n width: indicatorInfo?.width,\n minWidth: indicatorInfo?.minWidth,\n maxWidth: indicatorInfo?.maxWidth,\n disableColumnResize: indicatorInfo?.disableColumnResize\n });\n }\n } else if (hd.indicatorKey) {\n //兼容当某个指标没有设置在dimension.indicators中\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === hd.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: hd.indicatorKey,\n field: hd.indicatorKey,\n cellType: 'text',\n define: Object.assign({}, <any>hd)\n });\n }\n }\n // if (dimensionInfo.indicators) {\n // layoutMap.hideIndicatorName = dimensionInfo.hideIndicatorName ?? false;\n // layoutMap.indicatorsAsCol = dimensionInfo.indicatorsAsCol ?? true;\n // }\n results[id] = cell;\n layoutMap._headerObjects[id] = cell;\n _headerCellIds[row][layoutMap.colIndex] = id;\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][layoutMap.colIndex] = roots[r];\n }\n\n // 处理汇总小计跨维度层级的情况\n if ((hd as any).levelSpan > 1) {\n for (let i = 1; i < (hd as any).levelSpan; i++) {\n if (!_headerCellIds[row + i]) {\n _headerCellIds[row + i] = [];\n }\n _headerCellIds[row + i][layoutMap.colIndex] = id;\n }\n }\n\n if ((hd as ITreeLayoutHeadNode).children?.length >= 1) {\n layoutMap\n ._addHeaders(_headerCellIds, row + ((hd as any).levelSpan ?? 1), (hd as ITreeLayoutHeadNode).children ?? [], [\n ...roots,\n ...Array((hd as any).levelSpan ?? 1).fill(id)\n ])\n .forEach(c => results.push(c));\n } else {\n // columns.push([\"\"])//代码一个路径\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][layoutMap.colIndex] = id;\n\n // if ((hd as any).levelSpan > 1) {\n // for (let i = 1; i < (hd as any).levelSpan; i++) {\n // _headerCellIds[r + i][layoutMap.colIndex] = id;\n // }\n // }\n }\n layoutMap.colIndex++;\n }\n}\n\nexport function dealHeaderForTreeMode(\n hd: ITreeLayoutHeadNode,\n _headerCellIds: number[][],\n results: HeaderData[],\n roots: number[],\n row: number,\n totalLevel: number,\n show: boolean,\n dimensions: (IDimension | string)[],\n layoutMap: PivotHeaderLayoutMap\n) {\n const id = hd.id;\n // const dimensionInfo: IDimension =\n // (this.rowsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n // ) as IDimension) ??\n // (this.columnsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n // ) as IDimension);\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension;\n\n const cell: HeaderData = {\n id,\n title: hd.value,\n field: hd.dimensionKey as FieldData,\n //如果不是整棵树的叶子节点,都靠左显示\n style:\n hd.level + 1 === totalLevel || typeof dimensionInfo?.headerStyle === 'function'\n ? dimensionInfo?.headerStyle\n : Object.assign({}, dimensionInfo?.headerStyle, { textAlign: 'left' }),\n headerType: dimensionInfo?.headerType ?? 'text',\n headerIcon: dimensionInfo?.headerIcon,\n define: Object.assign(<any>hd, {\n linkJump: (dimensionInfo as ILinkDimension)?.linkJump,\n linkDetect: (dimensionInfo as ILinkDimension)?.linkDetect,\n templateLink: (dimensionInfo as ILinkDimension)?.templateLink,\n\n // image相关 to be fixed\n keepAspectRatio: (dimensionInfo as IImageDimension)?.keepAspectRatio ?? false,\n imageAutoSizing: (dimensionInfo as IImageDimension)?.imageAutoSizing,\n\n headerCustomRender: dimensionInfo?.headerCustomRender,\n headerCustomLayout: dimensionInfo?.headerCustomLayout,\n dragHeader: dimensionInfo?.dragHeader,\n disableHeaderHover: !!dimensionInfo?.disableHeaderHover,\n disableHeaderSelect: !!dimensionInfo?.disableHeaderSelect\n }), //这里不能新建对象,要用hd保持引用关系\n fieldFormat: dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey as string,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n hierarchyLevel: hd.level,\n dimensionTotalLevel: totalLevel,\n hierarchyState: hd.level + 1 === totalLevel ? undefined : hd.hierarchyState,\n width: (dimensionInfo as IRowDimension)?.width,\n minWidth: (dimensionInfo as IRowDimension)?.minWidth,\n maxWidth: (dimensionInfo as IRowDimension)?.maxWidth,\n parentCellId: roots[roots.length - 1]\n };\n\n results[id] = cell;\n // this._cellIdDiemnsionMap.set(id, {\n // dimensionKey: hd.dimensionKey,\n // value: hd.value\n // });\n layoutMap._headerObjects[id] = cell;\n _headerCellIds[row][layoutMap.colIndex] = id;\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][layoutMap.colIndex] = roots[r];\n }\n if (hd.hierarchyState === HierarchyState.expand && (hd as ITreeLayoutHeadNode).children?.length >= 1) {\n //row传值 colIndex++和_addHeaders有区别\n show && layoutMap.colIndex++;\n layoutMap\n ._addHeadersForTreeMode(\n _headerCellIds,\n row,\n (hd as ITreeLayoutHeadNode).children ?? [],\n [...roots, id],\n totalLevel,\n show && hd.hierarchyState === HierarchyState.expand, //当前节点show 且当前节点状态为展开 则传给子节点为show:true\n dimensions\n )\n .forEach(c => results.push(c));\n } else {\n // columns.push([\"\"])//代码一个路径\n show && layoutMap.colIndex++;\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][layoutMap.colIndex] = id;\n }\n }\n}\n\nfunction clearNode(children: any) {\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n delete node.level;\n delete node.startIndex;\n delete node.id;\n delete node.levelSpan;\n delete node.size;\n delete node.startInTotal;\n const childrenNew = node.children || node.columns;\n if (childrenNew) {\n clearNode(childrenNew);\n }\n }\n}\n"]}
@@ -282,7 +282,7 @@ export interface IIndicatorHeaderNode {
282
282
  export interface IDimensionHeaderNode {
283
283
  dimensionKey: string | number;
284
284
  value: string;
285
- children?: IHeaderTreeDefine[] | null;
285
+ children?: IHeaderTreeDefine[] | true;
286
286
  hierarchyState?: HierarchyState;
287
287
  }
288
288
  export interface IExtensionRowDefine {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ts-types/table-engine.ts"],"names":[],"mappings":";;;AAwdA,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,8BAAiB,CAAA;IACjB,0BAAa,CAAA;IACb,4BAAe,CAAA;AACjB,CAAC,EALW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAKpB;AAED,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,uCAAqB,CAAA;IACrB,+BAAa,CAAA;AACf,CAAC,EAJW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAIzB","file":"table-engine.js","sourcesContent":["import type { RectProps, MaybePromiseOrUndefined, IDimensionInfo, SortOrder, BaseCellInfo, CellInfo } from './common';\nimport type { ColumnIconOption, SvgIcon } from './icon';\nexport type { HeaderData } from './list-table/layout-map/api';\nexport type LayoutObjectId = number | string;\nimport type { Rect } from '../tools/Rect';\nimport type { BaseTableAPI, BaseTableConstructorOptions, ListTableProtected } from './base-table';\nimport type {\n Aggregation,\n AggregationType,\n CustomAggregation,\n FilterRules,\n IPivotTableDataConfig\n} from './new-data-set';\nimport type { Either } from '../tools/helper';\nimport type {\n IChartIndicator,\n IColumnDimension,\n ICornerDefine,\n IDimension,\n IIndicator,\n IRowDimension,\n ITitleDefine\n} from './pivot-table';\nimport type { ColumnsDefine } from './list-table';\nimport type { ICellAxisOption, ITableAxisOption } from './component/axis';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { ITextStyleOption } from '../body-helper/style';\nimport type { DataSource } from '../data';\nimport type { EditManeger } from '../edit/edit-manager';\nimport type { ICustomRender } from './customElement';\nimport type { ICustomLayout } from './customLayout';\nimport type { StylePropertyFunctionArg } from './style-define';\n\nexport interface CellAddress {\n col: number;\n row: number;\n}\nexport interface CellAddressWithBound {\n col: number;\n row: number;\n rect?: RectProps;\n x?: number;\n y?: number;\n}\nexport interface CellRange {\n start: CellAddress;\n end: CellAddress;\n}\n\nexport type FieldGetter = (record: any, col?: number, row?: number, table?: BaseTableAPI) => any;\nexport type FieldSetter = (record: any, value: any) => void;\nexport interface FieldAssessor {\n get: FieldGetter;\n set: FieldSetter;\n}\n\nexport type FieldDef = string | number | string[];\nexport type FieldKeyDef = string | number;\nexport type FieldFormat = FieldGetter | FieldAssessor;\n\nexport type FieldData = MaybePromiseOrUndefined;\n\nexport type WidthModeDef = 'standard' | 'adaptive' | 'autoWidth';\nexport type HeightModeDef = 'standard' | 'adaptive' | 'autoHeight';\nexport type WidthAdaptiveModeDef = 'only-body' | 'all';\nexport type HeightAdaptiveModeDef = 'only-body' | 'all';\nexport type ShowColumnRowType = 'column' | 'row' | 'none';\n/** 单元格所处表格哪部分 */\nexport type CellLocation = 'body' | 'rowHeader' | 'columnHeader' | 'cornerHeader';\nexport type CellSubLocation =\n | 'body'\n | 'rowHeader'\n | 'columnHeader'\n | 'cornerHeader'\n | 'bottomFrozen'\n | 'rightFrozen'\n | 'rightTopCorner'\n | 'leftBottomCorner'\n | 'rightBottomCorner'\n | 'rowSeriesNumber'\n | 'colSeriesNumber';\n\nexport interface TableKeyboardOptions {\n /** tab键 默认为true。开启tab键移动选中单元格,如果当前是在编辑单元格 则移动到下一个单元格也是编辑状态 */\n moveFocusCellOnTab?: boolean;\n /** enter键 默认true 如果选中单元格可编辑则进入单元格编辑*/\n editCellOnEnter?: boolean;\n /** 默认不开启即false。开启这个配置的话,如果当前是在编辑中的单元格,方向键可以移动到下个单元格并进入编辑状态,而不是编辑文本内字符串的光标移动。上下左右方向键切换选中单元格不受该配置影响,*/\n moveEditCellOnArrowKeys?: boolean;\n /** 开启快捷键全选 默认:false */\n selectAllOnCtrlA?: boolean;\n /** 快捷键复制 默认:false*/\n copySelected?: boolean; //这个copy是和浏览器的快捷键一致的\n /** 快捷键粘贴,默认:false 。粘贴内容到指定位置(即粘贴前要有选中的单元格);支持批量粘贴;粘贴生效仅针对配置了编辑 editor 的单元格;*/\n pasteValueToCell?: boolean; //paste是和浏览器的快捷键一致的\n}\nexport interface TableEventOptions {\n /** 是否阻止右键的默认行为, 默认为true。*/\n preventDefaultContextMenu?: boolean;\n}\n\nexport interface IRowSeriesNumber {\n width?: number | 'auto';\n // align?: 'left' | 'right';\n // span?: number | 'dependOnNear';\n title?: string;\n // field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerIcon?: string | ColumnIconOption | (string | ColumnIconOption)[];\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n // /** 选中整行或者全选时 是否包括序号部分 */\n // selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n}\n\nexport interface ColumnSeriesNumber {\n enable: boolean;\n align?: 'top' | 'bottom';\n span?: number | 'dependOnNear';\n title?: string;\n field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n /** 选中整行或者全选时 是否包括序号部分 */\n selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否显示调换顺序的图标 */\n showDragOrderIcon?: boolean;\n}\nexport interface DataSourceAPI {\n clearCurrentIndexedData: () => void;\n length: number;\n get: (index: number) => MaybePromiseOrUndefined;\n getField: <F extends FieldDef>(index: number, field: F, col: number, row: number, table: BaseTableAPI) => FieldData;\n hasField: (index: number, field: FieldDef) => boolean;\n sort: (field: FieldDef, order: SortOrder, orderFn: (v1: any, v2: any, order: SortOrder) => -1 | 0 | 1) => void;\n clearSortedMap: () => void;\n updatePagination: (pagination: IPagination) => void;\n getIndexKey: (index: number) => number | number[];\n /** 数据是否为树形结构 且可以展开收起 */\n hierarchyExpandLevel: number;\n}\n\nexport interface SortState {\n /** 排序依据字段 */\n field: FieldDef;\n /** 排序规则 */\n order: SortOrder;\n}\nexport interface PivotSortState {\n col: number;\n row: number;\n order: SortOrder;\n}\n\n/**\n * 分页配置\n */\nexport interface IPagination {\n /** 数据总条数 透视表中这个数据会自动加上 不需用户传入*/\n totalCount?: number;\n /** 每页显示数据条数 */\n perPageCount: number;\n /** 每页显示条数 */\n currentPage?: number;\n}\nexport type HeaderValues = Map<any, any>;\nexport interface ListTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * 传入用户实例化的数据对象 目前不完善\n */\n dataSource?: DataSource;\n /**\n * 是否显示表头\n */\n showHeader?: boolean;\n /**\n * Simple header property\n */\n columns?: ColumnsDefine; //请不要再这个上面修改配置,这里相当于是一个原始值备份,有一个内部专用的protectspace.columns\n /**\n *@deprecated 已废弃 请使用columns\n */\n header?: ColumnsDefine;\n\n transpose?: boolean; //是否转置\n /**\n * 展示为tree的列 层级缩进值\n */\n hierarchyIndent?: number;\n /** 展开层数 默认为1只显示根节点*/\n hierarchyExpandLevel?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n hierarchyTextStartAlignment?: boolean;\n /** 分页配置 */\n pagination?: IPagination;\n\n /**\n * 排序状态\n */\n sortState?: SortState | SortState[];\n /** 数据分析相关配置 enableDataAnalysis开启后该配置才会有效 */\n // dataConfig?: IListTableDataConfig;\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置编辑器 */\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api';\n /** 拖拽表头移动位置 针对冻结部分的规则 默认为fixedFrozenCount\n * \"disabled\"(禁止调整冻结列位置):不允许其他列的表头移入冻结列,也不允许冻结列移出,冻结列保持不变。\n * \"adjustFrozenCount\"(根据交互结果调整冻结数量):允许其他列的表头移入冻结列,及冻结列移出,并根据拖拽的动作调整冻结列的数量。当其他列的表头被拖拽进入冻结列位置时,冻结列数量增加;当其他列的表头被拖拽移出冻结列位置时,冻结列数量减少。\n * \"fixedFrozenCount\"(可调整冻结列,并维持冻结数量不变):允许自由拖拽其他列的表头移入或移出冻结列位置,同时保持冻结列的数量不变。\n */\n frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';\n aggregation?:\n | Aggregation\n | CustomAggregation\n | (Aggregation | CustomAggregation)[]\n | ((args: {\n col: number;\n field: string;\n }) => Aggregation | CustomAggregation | (Aggregation | CustomAggregation)[] | null);\n}\n\nexport interface ListTableAPI extends BaseTableAPI {\n options: ListTableConstructorOptions;\n editorManager: EditManeger;\n sortState: SortState[] | SortState | null;\n // /** 数据分析相关配置 */\n // dataConfig?: IListTableDataConfig;\n internalProps: ListTableProtected;\n isListTable: () => true;\n isPivotTable: () => false;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell?: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell?: boolean) => void;\n getFieldData: (field: FieldDef | FieldFormat | undefined, col: number, row: number) => FieldData;\n //#region 编辑器相关demo\n /** 获取单元格配置的编辑器 */\n getEditor: (col: number, row: number) => IEditor;\n /** 开启单元格编辑 */\n startEditCell: (col?: number, row?: number) => void;\n /** 结束编辑 */\n completeEditCell: () => void;\n //#endregion\n addRecord: (record: any, recordIndex?: number) => void;\n addRecords: (records: any[], recordIndex?: number) => void;\n deleteRecords: (recordIndexs: number[]) => void;\n updateRecords: (records: any[], recordIndexs: number[]) => void;\n updateFilterRules: (filterRules: FilterRules) => void;\n getAggregateValuesByField: (field: string | number) => {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[];\n}\nexport interface PivotTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n /** 设置排序状态,只对应按钮展示效果 无数据排序逻辑 */\n pivotSortState?: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n\n //#region layout中挪到外层的属性\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree';\n /**展开层数 */\n rowExpandLevel?: number;\n /**子层级维度缩进距离 */\n rowHierarchyIndent?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n rowHierarchyTextStartAlignment?: boolean;\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\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 /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 指标在具体维度展示的层级顺序,从0开始 ———有数据分析的透视表才需要配置这个 */\n indicatorIndex?: number;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 指标维度key 注意非具体指标key 数据分析的透视表才需要配置这个 */\n // indicatorDimensionKey?: string;\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n //#endregion\n /** 数据分析相关配置 enableDataAnalysis开启后该配置才会有效 */\n dataConfig?: IPivotTableDataConfig;\n\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n /** 分页配置 */\n pagination?: IPagination;\n\n extensionRows?: IExtensionRowDefine[];\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n}\nexport interface PivotChartConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合, 平坦数据集合。另外一种特殊方式是传入分组后的数据,分组依据为指标\n */\n records?: any[] | Record<string, any[]>;\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IChartIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n\n axes?: ITableAxisOption[];\n}\nexport interface PivotTableAPI extends BaseTableAPI {\n records?: any;\n options: PivotTableConstructorOptions;\n editorManager: EditManeger;\n // internalProps: PivotTableProtected;\n pivotSortState: PivotSortState[];\n isListTable: () => false;\n isPivotTable: () => true;\n getPivotSortState: (col: number, row: number) => SortOrder;\n toggleHierarchyState: (col: number, row: number) => void;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell: boolean) => void;\n}\nexport interface PivotChartAPI extends BaseTableAPI {\n records?: any | Record<string, any[]>;\n options: PivotChartConstructorOptions;\n // internalProps: PivotTableProtected;\n isListTable: () => false;\n isPivotTable: () => true;\n}\nexport type SetPasteValueTestData = CellAddress & {\n table: BaseTableAPI;\n record: any;\n value: string;\n\n oldValue: any;\n};\n\nexport interface InlineAPI {\n width: (arg: { ctx: CanvasRenderingContext2D }) => number;\n font: () => string | null;\n color: () => string | null;\n canDraw: () => boolean;\n onReady: (callback: Function) => void;\n\n draw: (opt: any) => void;\n canBreak: () => boolean;\n}\n\nexport interface CellContext {\n readonly col: number;\n readonly row: number;\n /**format之后的值 */\n readonly value: FieldData;\n /**原始值 */\n readonly dataValue: FieldData;\n showIcon?: SvgIcon;\n getContext: () => CanvasRenderingContext2D;\n toCurrentContext: () => CellContext;\n getDrawRect: () => RectProps | null;\n getRect: () => RectProps;\n setRectFilter: (rectFilter: (base: RectProps) => RectProps) => void;\n updateRect: (rect: Rect | RectProps) => void;\n updateDrawRect: (rect: Rect | RectProps) => void;\n}\n\nexport enum Placement {\n top = 'top',\n bottom = 'bottom',\n left = 'left',\n right = 'right'\n}\n\nexport enum HierarchyState {\n expand = 'expand',\n collapse = 'collapse',\n none = 'none'\n}\nexport type IHeaderTreeDefine = Either<IDimensionHeaderNode, IIndicatorHeaderNode>;\nexport interface IIndicatorHeaderNode {\n /**\n * 指标的key值 对应数据集的字段名\n */\n indicatorKey: string | number;\n /**\n * 指标名称 如:“销售额”,“例如”, 对应到单元格显示的值。可不填,不填的话 从indicators的对应配置中取值显示\n */\n value?: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | null;\n}\nexport interface IDimensionHeaderNode {\n /**\n * 维度的唯一标识,对应数据集的字段名称\n */\n dimensionKey: string | number;\n /** 维度成员值 */\n value: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | null;\n /** 折叠状态 TODO */\n hierarchyState?: HierarchyState;\n}\n\nexport interface IExtensionRowDefine {\n rows: (IRowDimension | string)[];\n rowTree: IHeaderTreeDefine[] | ((args: { dimensionKey: string | number; value: string }[]) => IHeaderTreeDefine[]);\n}\n\nexport type StickCell = { col: number; row: number; dx: number; dy: number };\n\nexport type CustomMergeCell = (col: number, row: number, table: BaseTableAPI) => undefined | CustomMerge;\nexport type CustomMerge = {\n range: CellRange;\n text?: string;\n style?: ITextStyleOption;\n customLayout?: ICustomLayout;\n customRender?: ICustomRender;\n};\n"]}
1
+ {"version":3,"sources":["../src/ts-types/table-engine.ts"],"names":[],"mappings":";;;AAwdA,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,8BAAiB,CAAA;IACjB,0BAAa,CAAA;IACb,4BAAe,CAAA;AACjB,CAAC,EALW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAKpB;AAED,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,uCAAqB,CAAA;IACrB,+BAAa,CAAA;AACf,CAAC,EAJW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAIzB","file":"table-engine.js","sourcesContent":["import type { RectProps, MaybePromiseOrUndefined, IDimensionInfo, SortOrder, BaseCellInfo, CellInfo } from './common';\nimport type { ColumnIconOption, SvgIcon } from './icon';\nexport type { HeaderData } from './list-table/layout-map/api';\nexport type LayoutObjectId = number | string;\nimport type { Rect } from '../tools/Rect';\nimport type { BaseTableAPI, BaseTableConstructorOptions, ListTableProtected } from './base-table';\nimport type {\n Aggregation,\n AggregationType,\n CustomAggregation,\n FilterRules,\n IPivotTableDataConfig\n} from './new-data-set';\nimport type { Either } from '../tools/helper';\nimport type {\n IChartIndicator,\n IColumnDimension,\n ICornerDefine,\n IDimension,\n IIndicator,\n IRowDimension,\n ITitleDefine\n} from './pivot-table';\nimport type { ColumnsDefine } from './list-table';\nimport type { ICellAxisOption, ITableAxisOption } from './component/axis';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { ITextStyleOption } from '../body-helper/style';\nimport type { DataSource } from '../data';\nimport type { EditManeger } from '../edit/edit-manager';\nimport type { ICustomRender } from './customElement';\nimport type { ICustomLayout } from './customLayout';\nimport type { StylePropertyFunctionArg } from './style-define';\n\nexport interface CellAddress {\n col: number;\n row: number;\n}\nexport interface CellAddressWithBound {\n col: number;\n row: number;\n rect?: RectProps;\n x?: number;\n y?: number;\n}\nexport interface CellRange {\n start: CellAddress;\n end: CellAddress;\n}\n\nexport type FieldGetter = (record: any, col?: number, row?: number, table?: BaseTableAPI) => any;\nexport type FieldSetter = (record: any, value: any) => void;\nexport interface FieldAssessor {\n get: FieldGetter;\n set: FieldSetter;\n}\n\nexport type FieldDef = string | number | string[];\nexport type FieldKeyDef = string | number;\nexport type FieldFormat = FieldGetter | FieldAssessor;\n\nexport type FieldData = MaybePromiseOrUndefined;\n\nexport type WidthModeDef = 'standard' | 'adaptive' | 'autoWidth';\nexport type HeightModeDef = 'standard' | 'adaptive' | 'autoHeight';\nexport type WidthAdaptiveModeDef = 'only-body' | 'all';\nexport type HeightAdaptiveModeDef = 'only-body' | 'all';\nexport type ShowColumnRowType = 'column' | 'row' | 'none';\n/** 单元格所处表格哪部分 */\nexport type CellLocation = 'body' | 'rowHeader' | 'columnHeader' | 'cornerHeader';\nexport type CellSubLocation =\n | 'body'\n | 'rowHeader'\n | 'columnHeader'\n | 'cornerHeader'\n | 'bottomFrozen'\n | 'rightFrozen'\n | 'rightTopCorner'\n | 'leftBottomCorner'\n | 'rightBottomCorner'\n | 'rowSeriesNumber'\n | 'colSeriesNumber';\n\nexport interface TableKeyboardOptions {\n /** tab键 默认为true。开启tab键移动选中单元格,如果当前是在编辑单元格 则移动到下一个单元格也是编辑状态 */\n moveFocusCellOnTab?: boolean;\n /** enter键 默认true 如果选中单元格可编辑则进入单元格编辑*/\n editCellOnEnter?: boolean;\n /** 默认不开启即false。开启这个配置的话,如果当前是在编辑中的单元格,方向键可以移动到下个单元格并进入编辑状态,而不是编辑文本内字符串的光标移动。上下左右方向键切换选中单元格不受该配置影响,*/\n moveEditCellOnArrowKeys?: boolean;\n /** 开启快捷键全选 默认:false */\n selectAllOnCtrlA?: boolean;\n /** 快捷键复制 默认:false*/\n copySelected?: boolean; //这个copy是和浏览器的快捷键一致的\n /** 快捷键粘贴,默认:false 。粘贴内容到指定位置(即粘贴前要有选中的单元格);支持批量粘贴;粘贴生效仅针对配置了编辑 editor 的单元格;*/\n pasteValueToCell?: boolean; //paste是和浏览器的快捷键一致的\n}\nexport interface TableEventOptions {\n /** 是否阻止右键的默认行为, 默认为true。*/\n preventDefaultContextMenu?: boolean;\n}\n\nexport interface IRowSeriesNumber {\n width?: number | 'auto';\n // align?: 'left' | 'right';\n // span?: number | 'dependOnNear';\n title?: string;\n // field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerIcon?: string | ColumnIconOption | (string | ColumnIconOption)[];\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n // /** 选中整行或者全选时 是否包括序号部分 */\n // selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n}\n\nexport interface ColumnSeriesNumber {\n enable: boolean;\n align?: 'top' | 'bottom';\n span?: number | 'dependOnNear';\n title?: string;\n field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n /** 选中整行或者全选时 是否包括序号部分 */\n selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否显示调换顺序的图标 */\n showDragOrderIcon?: boolean;\n}\nexport interface DataSourceAPI {\n clearCurrentIndexedData: () => void;\n length: number;\n get: (index: number) => MaybePromiseOrUndefined;\n getField: <F extends FieldDef>(index: number, field: F, col: number, row: number, table: BaseTableAPI) => FieldData;\n hasField: (index: number, field: FieldDef) => boolean;\n sort: (field: FieldDef, order: SortOrder, orderFn: (v1: any, v2: any, order: SortOrder) => -1 | 0 | 1) => void;\n clearSortedMap: () => void;\n updatePagination: (pagination: IPagination) => void;\n getIndexKey: (index: number) => number | number[];\n /** 数据是否为树形结构 且可以展开收起 */\n hierarchyExpandLevel: number;\n}\n\nexport interface SortState {\n /** 排序依据字段 */\n field: FieldDef;\n /** 排序规则 */\n order: SortOrder;\n}\nexport interface PivotSortState {\n col: number;\n row: number;\n order: SortOrder;\n}\n\n/**\n * 分页配置\n */\nexport interface IPagination {\n /** 数据总条数 透视表中这个数据会自动加上 不需用户传入*/\n totalCount?: number;\n /** 每页显示数据条数 */\n perPageCount: number;\n /** 每页显示条数 */\n currentPage?: number;\n}\nexport type HeaderValues = Map<any, any>;\nexport interface ListTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * 传入用户实例化的数据对象 目前不完善\n */\n dataSource?: DataSource;\n /**\n * 是否显示表头\n */\n showHeader?: boolean;\n /**\n * Simple header property\n */\n columns?: ColumnsDefine; //请不要再这个上面修改配置,这里相当于是一个原始值备份,有一个内部专用的protectspace.columns\n /**\n *@deprecated 已废弃 请使用columns\n */\n header?: ColumnsDefine;\n\n transpose?: boolean; //是否转置\n /**\n * 展示为tree的列 层级缩进值\n */\n hierarchyIndent?: number;\n /** 展开层数 默认为1只显示根节点*/\n hierarchyExpandLevel?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n hierarchyTextStartAlignment?: boolean;\n /** 分页配置 */\n pagination?: IPagination;\n\n /**\n * 排序状态\n */\n sortState?: SortState | SortState[];\n /** 数据分析相关配置 enableDataAnalysis开启后该配置才会有效 */\n // dataConfig?: IListTableDataConfig;\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置编辑器 */\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api';\n /** 拖拽表头移动位置 针对冻结部分的规则 默认为fixedFrozenCount\n * \"disabled\"(禁止调整冻结列位置):不允许其他列的表头移入冻结列,也不允许冻结列移出,冻结列保持不变。\n * \"adjustFrozenCount\"(根据交互结果调整冻结数量):允许其他列的表头移入冻结列,及冻结列移出,并根据拖拽的动作调整冻结列的数量。当其他列的表头被拖拽进入冻结列位置时,冻结列数量增加;当其他列的表头被拖拽移出冻结列位置时,冻结列数量减少。\n * \"fixedFrozenCount\"(可调整冻结列,并维持冻结数量不变):允许自由拖拽其他列的表头移入或移出冻结列位置,同时保持冻结列的数量不变。\n */\n frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';\n aggregation?:\n | Aggregation\n | CustomAggregation\n | (Aggregation | CustomAggregation)[]\n | ((args: {\n col: number;\n field: string;\n }) => Aggregation | CustomAggregation | (Aggregation | CustomAggregation)[] | null);\n}\n\nexport interface ListTableAPI extends BaseTableAPI {\n options: ListTableConstructorOptions;\n editorManager: EditManeger;\n sortState: SortState[] | SortState | null;\n // /** 数据分析相关配置 */\n // dataConfig?: IListTableDataConfig;\n internalProps: ListTableProtected;\n isListTable: () => true;\n isPivotTable: () => false;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell?: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell?: boolean) => void;\n getFieldData: (field: FieldDef | FieldFormat | undefined, col: number, row: number) => FieldData;\n //#region 编辑器相关demo\n /** 获取单元格配置的编辑器 */\n getEditor: (col: number, row: number) => IEditor;\n /** 开启单元格编辑 */\n startEditCell: (col?: number, row?: number) => void;\n /** 结束编辑 */\n completeEditCell: () => void;\n //#endregion\n addRecord: (record: any, recordIndex?: number) => void;\n addRecords: (records: any[], recordIndex?: number) => void;\n deleteRecords: (recordIndexs: number[]) => void;\n updateRecords: (records: any[], recordIndexs: number[]) => void;\n updateFilterRules: (filterRules: FilterRules) => void;\n getAggregateValuesByField: (field: string | number) => {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[];\n}\nexport interface PivotTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n /** 设置排序状态,只对应按钮展示效果 无数据排序逻辑 */\n pivotSortState?: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n\n //#region layout中挪到外层的属性\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree';\n /**展开层数 */\n rowExpandLevel?: number;\n /**子层级维度缩进距离 */\n rowHierarchyIndent?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n rowHierarchyTextStartAlignment?: boolean;\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\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 /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 指标在具体维度展示的层级顺序,从0开始 ———有数据分析的透视表才需要配置这个 */\n indicatorIndex?: number;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 指标维度key 注意非具体指标key 数据分析的透视表才需要配置这个 */\n // indicatorDimensionKey?: string;\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n //#endregion\n /** 数据分析相关配置 enableDataAnalysis开启后该配置才会有效 */\n dataConfig?: IPivotTableDataConfig;\n\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n /** 分页配置 */\n pagination?: IPagination;\n\n extensionRows?: IExtensionRowDefine[];\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n}\nexport interface PivotChartConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合, 平坦数据集合。另外一种特殊方式是传入分组后的数据,分组依据为指标\n */\n records?: any[] | Record<string, any[]>;\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IChartIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n\n axes?: ITableAxisOption[];\n}\nexport interface PivotTableAPI extends BaseTableAPI {\n records?: any;\n options: PivotTableConstructorOptions;\n editorManager: EditManeger;\n // internalProps: PivotTableProtected;\n pivotSortState: PivotSortState[];\n isListTable: () => false;\n isPivotTable: () => true;\n getPivotSortState: (col: number, row: number) => SortOrder;\n toggleHierarchyState: (col: number, row: number) => void;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell: boolean) => void;\n}\nexport interface PivotChartAPI extends BaseTableAPI {\n records?: any | Record<string, any[]>;\n options: PivotChartConstructorOptions;\n // internalProps: PivotTableProtected;\n isListTable: () => false;\n isPivotTable: () => true;\n}\nexport type SetPasteValueTestData = CellAddress & {\n table: BaseTableAPI;\n record: any;\n value: string;\n\n oldValue: any;\n};\n\nexport interface InlineAPI {\n width: (arg: { ctx: CanvasRenderingContext2D }) => number;\n font: () => string | null;\n color: () => string | null;\n canDraw: () => boolean;\n onReady: (callback: Function) => void;\n\n draw: (opt: any) => void;\n canBreak: () => boolean;\n}\n\nexport interface CellContext {\n readonly col: number;\n readonly row: number;\n /**format之后的值 */\n readonly value: FieldData;\n /**原始值 */\n readonly dataValue: FieldData;\n showIcon?: SvgIcon;\n getContext: () => CanvasRenderingContext2D;\n toCurrentContext: () => CellContext;\n getDrawRect: () => RectProps | null;\n getRect: () => RectProps;\n setRectFilter: (rectFilter: (base: RectProps) => RectProps) => void;\n updateRect: (rect: Rect | RectProps) => void;\n updateDrawRect: (rect: Rect | RectProps) => void;\n}\n\nexport enum Placement {\n top = 'top',\n bottom = 'bottom',\n left = 'left',\n right = 'right'\n}\n\nexport enum HierarchyState {\n expand = 'expand',\n collapse = 'collapse',\n none = 'none'\n}\nexport type IHeaderTreeDefine = Either<IDimensionHeaderNode, IIndicatorHeaderNode>;\nexport interface IIndicatorHeaderNode {\n /**\n * 指标的key值 对应数据集的字段名\n */\n indicatorKey: string | number;\n /**\n * 指标名称 如:“销售额”,“例如”, 对应到单元格显示的值。可不填,不填的话 从indicators的对应配置中取值显示\n */\n value?: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | null;\n}\nexport interface IDimensionHeaderNode {\n /**\n * 维度的唯一标识,对应数据集的字段名称\n */\n dimensionKey: string | number;\n /** 维度成员值 */\n value: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | true;\n /** 折叠状态 TODO */\n hierarchyState?: HierarchyState;\n}\n\nexport interface IExtensionRowDefine {\n rows: (IRowDimension | string)[];\n rowTree: IHeaderTreeDefine[] | ((args: { dimensionKey: string | number; value: string }[]) => IHeaderTreeDefine[]);\n}\n\nexport type StickCell = { col: number; row: number; dx: number; dy: number };\n\nexport type CustomMergeCell = (col: number, row: number, table: BaseTableAPI) => undefined | CustomMerge;\nexport type CustomMerge = {\n range: CellRange;\n text?: string;\n style?: ITextStyleOption;\n customLayout?: ICustomLayout;\n customRender?: ICustomRender;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/vrender.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kCAAgC;AAChC,yDAA8F;AAC9F,yDAAqE;AACrE,yDAmBgC;AAIhC,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,SAAgB,kBAAkB;IAChC,IAAI,QAAQ,EAAE;QACZ,OAAO;KACR;IACD,QAAQ,GAAG,IAAI,CAAC;IAEhB,IAAA,+BAAgB,GAAE,CAAC;IAEnB,IAAI,IAAA,2BAAY,GAAE,EAAE;QAClB,IAAA,6BAAc,EAAC,wBAAS,CAAC,CAAC;KAC3B;SAAM,IAAI,IAAA,wBAAS,GAAE,EAAE;QACtB,IAAA,0BAAW,EAAC,wBAAS,CAAC,CAAC;KACxB;IACD,IAAA,0BAAW,GAAE,CAAC;IACd,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,6BAAc,GAAE,CAAC;IACjB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,8BAAe,GAAE,CAAC;IAClB,IAAA,gCAAiB,GAAE,CAAC;IACpB,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,6BAAc,GAAE,CAAC;IACjB,IAAA,+BAAgB,GAAE,CAAC;IACnB,IAAA,iCAAkB,GAAE,CAAC;IACrB,IAAA,6BAAc,GAAE,CAAC;IACjB,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,+BAAgB,GAAE,CAAC;AACrB,CAAC;AA/BD,gDA+BC;AAED,yDAAuC;AACvC,yDAAuC","file":"vrender.js","sourcesContent":["import '@visactor/vrender-core';\nimport { container, isBrowserEnv, isNodeEnv, preLoadAllModule } from '@visactor/vrender-core';\nimport { loadBrowserEnv, loadNodeEnv } from '@visactor/vrender-kits';\nimport {\n registerArc,\n registerArc3d,\n registerArea,\n registerCircle,\n registerGlyph,\n registerGroup,\n registerImage,\n registerLine,\n registerPath,\n registerPolygon,\n registerPyramid3d,\n registerRect,\n registerRect3d,\n registerRichtext,\n registerShadowRoot,\n registerSymbol,\n registerText,\n registerWrapText\n} from '@visactor/vrender-kits';\n// 导出版本号\n// export const version = \"0.23.3\";\n\nlet registed = false;\nexport function registerForVrender() {\n if (registed) {\n return;\n }\n registed = true;\n // 注册内置组件\n preLoadAllModule();\n\n if (isBrowserEnv()) {\n loadBrowserEnv(container);\n } else if (isNodeEnv()) {\n loadNodeEnv(container);\n }\n registerArc();\n registerArc3d();\n registerArea();\n registerCircle();\n registerGlyph();\n registerGroup();\n registerImage();\n registerLine();\n registerPath();\n registerPolygon();\n registerPyramid3d();\n registerRect();\n registerRect3d();\n registerRichtext();\n registerShadowRoot();\n registerSymbol();\n registerText();\n registerWrapText();\n}\n\nexport * from '@visactor/vrender-core';\nexport * from '@visactor/vrender-kits';\n"]}
1
+ {"version":3,"sources":["../src/vrender.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kCAAgC;AAChC,yDAA8F;AAC9F,yDAAqE;AACrE,yDAmBgC;AAIhC,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,SAAgB,kBAAkB;IAChC,IAAI,QAAQ,EAAE;QACZ,OAAO;KACR;IACD,QAAQ,GAAG,IAAI,CAAC;IAEhB,IAAA,+BAAgB,GAAE,CAAC;IAEnB,IAAI,IAAA,2BAAY,GAAE,EAAE;QAClB,IAAA,6BAAc,EAAC,wBAAS,CAAC,CAAC;KAC3B;SAAM,IAAI,IAAA,wBAAS,GAAE,EAAE;QACtB,IAAA,0BAAW,EAAC,wBAAS,CAAC,CAAC;KACxB;IACD,IAAA,0BAAW,GAAE,CAAC;IACd,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,6BAAc,GAAE,CAAC;IACjB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,8BAAe,GAAE,CAAC;IAClB,IAAA,gCAAiB,GAAE,CAAC;IACpB,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,6BAAc,GAAE,CAAC;IACjB,IAAA,+BAAgB,GAAE,CAAC;IACnB,IAAA,iCAAkB,GAAE,CAAC;IACrB,IAAA,6BAAc,GAAE,CAAC;IACjB,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,+BAAgB,GAAE,CAAC;AACrB,CAAC;AA/BD,gDA+BC;AAED,yDAAuC;AACvC,yDAAuC","file":"vrender.js","sourcesContent":["import '@visactor/vrender-core';\nimport { container, isBrowserEnv, isNodeEnv, preLoadAllModule } from '@visactor/vrender-core';\nimport { loadBrowserEnv, loadNodeEnv } from '@visactor/vrender-kits';\nimport {\n registerArc,\n registerArc3d,\n registerArea,\n registerCircle,\n registerGlyph,\n registerGroup,\n registerImage,\n registerLine,\n registerPath,\n registerPolygon,\n registerPyramid3d,\n registerRect,\n registerRect3d,\n registerRichtext,\n registerShadowRoot,\n registerSymbol,\n registerText,\n registerWrapText\n} from '@visactor/vrender-kits';\n// 导出版本号\n// export const version = \"0.24.0-alpha.0\";\n\nlet registed = false;\nexport function registerForVrender() {\n if (registed) {\n return;\n }\n registed = true;\n // 注册内置组件\n preLoadAllModule();\n\n if (isBrowserEnv()) {\n loadBrowserEnv(container);\n } else if (isNodeEnv()) {\n loadNodeEnv(container);\n }\n registerArc();\n registerArc3d();\n registerArea();\n registerCircle();\n registerGlyph();\n registerGroup();\n registerImage();\n registerLine();\n registerPath();\n registerPolygon();\n registerPyramid3d();\n registerRect();\n registerRect3d();\n registerRichtext();\n registerShadowRoot();\n registerSymbol();\n registerText();\n registerWrapText();\n}\n\nexport * from '@visactor/vrender-core';\nexport * from '@visactor/vrender-kits';\n"]}
package/dist/vtable.js CHANGED
@@ -56166,7 +56166,7 @@
56166
56166
  return TABLE_EVENT_TYPE;
56167
56167
  }
56168
56168
  options;
56169
- version = "0.23.3";
56169
+ version = "0.24.0-alpha.0";
56170
56170
  pagination;
56171
56171
  id = `VTable${Date.now()}`;
56172
56172
  headerStyleCache;
@@ -59272,19 +59272,23 @@
59272
59272
  this.setTreeNode(n, size, node);
59273
59273
  });
59274
59274
  }
59275
- else if (!node.hierarchyState && node.level + 1 < this.rowExpandLevel && children?.length >= 1) {
59275
+ else if (!node.hierarchyState &&
59276
+ node.level + 1 < this.rowExpandLevel &&
59277
+ (children?.length >= 1 || children === true)) {
59276
59278
  node.hierarchyState = HierarchyState.expand;
59277
- children.forEach((n) => {
59278
- n.level = (node.level ?? 0) + 1;
59279
- size += this.setTreeNode(n, size, node);
59280
- });
59279
+ children?.length >= 1 &&
59280
+ children.forEach((n) => {
59281
+ n.level = (node.level ?? 0) + 1;
59282
+ size += this.setTreeNode(n, size, node);
59283
+ });
59281
59284
  }
59282
- else if (children?.length >= 1) {
59285
+ else if (children?.length >= 1 || children === true) {
59283
59286
  node.hierarchyState = HierarchyState.collapse;
59284
- children.forEach((n) => {
59285
- n.level = (node.level ?? 0) + 1;
59286
- this.setTreeNode(n, size, node);
59287
- });
59287
+ children?.length >= 1 &&
59288
+ children.forEach((n) => {
59289
+ n.level = (node.level ?? 0) + 1;
59290
+ this.setTreeNode(n, size, node);
59291
+ });
59288
59292
  }
59289
59293
  else {
59290
59294
  node.hierarchyState = HierarchyState.none;
@@ -62650,6 +62654,13 @@
62650
62654
  this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(rowKeys);
62651
62655
  });
62652
62656
  }
62657
+ if (this.rowsDefine.length > this.fullRowDimensionKeys.length) {
62658
+ for (let i = this.fullRowDimensionKeys.length; i <= this.rowsDefine.length - 1; i++) {
62659
+ this.fullRowDimensionKeys.push(typeof this.rowsDefine[i] === 'string'
62660
+ ? this.rowsDefine[i]
62661
+ : this.rowsDefine[i].dimensionKey);
62662
+ }
62663
+ }
62653
62664
  this.sharedVar.seqId = Math.max(this.sharedVar.seqId, this._headerObjects.length);
62654
62665
  if (this.cornerSetting.titleOnDimension === 'column') {
62655
62666
  this.cornerHeaderObjs = this._addCornerHeaders(this.columnHeaderTitle ? [''].concat(this.colDimensionKeys) : this.colDimensionKeys, this.columnsDefine);
@@ -64893,8 +64904,6 @@
64893
64904
  this.setRecords(records);
64894
64905
  typeof window !== 'undefined' ? window.performance.now() : 0;
64895
64906
  }
64896
- delete this.rowFlatKeys;
64897
- delete this.colFlatKeys;
64898
64907
  }
64899
64908
  setRecords(records) {
64900
64909
  this.processRecords();
@@ -65035,6 +65044,13 @@
65035
65044
  this.changedTree[flatRowKey][flatColKey] = newValue;
65036
65045
  }
65037
65046
  }
65047
+ addRecords(records) {
65048
+ for (let i = 0, len = records.length; i < len; i++) {
65049
+ const record = records[i];
65050
+ this.processRecord(record);
65051
+ }
65052
+ this.records.push(records);
65053
+ }
65038
65054
  }
65039
65055
 
65040
65056
  class Dataset {
@@ -66049,12 +66065,14 @@
66049
66065
  _adjustCustomTree(customTree) {
66050
66066
  const checkNode = (nodes, isHasIndicator) => {
66051
66067
  nodes.forEach((node) => {
66052
- if (!node.indicatorKey && !isHasIndicator && !node.children?.length) {
66068
+ if (!node.indicatorKey &&
66069
+ !isHasIndicator &&
66070
+ (!node.children?.length || !node.children)) {
66053
66071
  node.children = this.indicators?.map((indicator) => {
66054
66072
  return { indicatorKey: indicator.indicatorKey, value: indicator.title ?? indicator.indicatorKey };
66055
66073
  });
66056
66074
  }
66057
- else if (node.children) {
66075
+ else if (node.children && Array.isArray(node.children)) {
66058
66076
  checkNode(node.children, isHasIndicator || !!node.indicatorKey);
66059
66077
  }
66060
66078
  });
@@ -66718,20 +66736,9 @@
66718
66736
  return null;
66719
66737
  }
66720
66738
  toggleHierarchyState(col, row) {
66721
- let notFillWidth = false;
66722
- let notFillHeight = false;
66723
- this.stateManager.updateHoverIcon(col, row, undefined, undefined);
66724
- const checkHasChart = this.internalProps.layoutMap.checkHasChart();
66725
- if (checkHasChart) {
66726
- if (this.autoFillWidth) {
66727
- notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;
66728
- }
66729
- if (this.autoFillHeight) {
66730
- notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;
66731
- }
66732
- }
66733
66739
  const hierarchyState = this.getHierarchyState(col, row);
66734
66740
  if (hierarchyState === HierarchyState.expand) {
66741
+ this._refreshHierarchyState(col, row);
66735
66742
  this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {
66736
66743
  col: col,
66737
66744
  row: row,
@@ -66739,13 +66746,32 @@
66739
66746
  });
66740
66747
  }
66741
66748
  else if (hierarchyState === HierarchyState.collapse) {
66749
+ const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);
66750
+ const headerTreeNode = this.internalProps.layoutMap.getHeadNode(headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length));
66751
+ if (Array.isArray(headerTreeNode.children)) {
66752
+ this._refreshHierarchyState(col, row);
66753
+ }
66742
66754
  this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {
66743
66755
  col: col,
66744
66756
  row: row,
66745
66757
  hierarchyState: HierarchyState.expand,
66746
- originData: this.getCellOriginRecord(col, row)
66758
+ originData: headerTreeNode
66747
66759
  });
66748
66760
  }
66761
+ }
66762
+ _refreshHierarchyState(col, row) {
66763
+ let notFillWidth = false;
66764
+ let notFillHeight = false;
66765
+ this.stateManager.updateHoverIcon(col, row, undefined, undefined);
66766
+ const checkHasChart = this.internalProps.layoutMap.checkHasChart();
66767
+ if (checkHasChart) {
66768
+ if (this.autoFillWidth) {
66769
+ notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;
66770
+ }
66771
+ if (this.autoFillHeight) {
66772
+ notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;
66773
+ }
66774
+ }
66749
66775
  const result = this.internalProps.layoutMap.toggleHierarchyState(col, row);
66750
66776
  this.refreshRowColCount();
66751
66777
  this.clearCellStyleCache();
@@ -67064,6 +67090,17 @@
67064
67090
  }
67065
67091
  changeRecordOrder(source, target) {
67066
67092
  }
67093
+ setTreeNodeChildren(records, col, row) {
67094
+ const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);
67095
+ const headerTreeNode = this.internalProps.layoutMap.getHeadNode(headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length));
67096
+ headerTreeNode.children = records;
67097
+ this._refreshHierarchyState(col, row);
67098
+ }
67099
+ addRecords(records) {
67100
+ if (this.flatDataToObjects) {
67101
+ this.flatDataToObjects.addRecords(records);
67102
+ }
67103
+ }
67067
67104
  }
67068
67105
 
67069
67106
  class PivotChart extends BaseTable {
@@ -68447,7 +68484,7 @@
68447
68484
  }
68448
68485
 
68449
68486
  registerForVrender();
68450
- const version = "0.23.3";
68487
+ const version = "0.24.0-alpha.0";
68451
68488
  function getIcons() {
68452
68489
  return get$2();
68453
68490
  }