@visactor/vtable 0.17.9-alpha.7 → 0.17.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/PivotChart.d.ts +1 -0
- package/cjs/PivotChart.js +24 -0
- package/cjs/PivotChart.js.map +1 -1
- package/cjs/components/tooltip/TooltipHandler.js +1 -2
- package/cjs/components/tooltip/TooltipHandler.js.map +1 -1
- package/cjs/core/BaseTable.d.ts +2 -2
- package/cjs/core/BaseTable.js +1 -1
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/core/FouseInput.js +2 -1
- package/cjs/core/tableHelper.d.ts +1 -0
- package/cjs/core/tableHelper.js +13 -3
- package/cjs/core/tableHelper.js.map +1 -1
- package/cjs/dataset/dataset.js +5 -5
- package/cjs/dataset/dataset.js.map +1 -1
- package/cjs/event/listener/table-group.js +3 -3
- package/cjs/event/listener/table-group.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/layout/pivot-header-layout.js +2 -2
- package/cjs/layout/pivot-header-layout.js.map +1 -1
- package/cjs/layout/pivot-layout-helper.js +9 -3
- package/cjs/layout/pivot-layout-helper.js.map +1 -1
- package/cjs/render/jsx/index.d.ts +1 -2
- package/cjs/render/jsx/index.js.map +1 -1
- package/cjs/scenegraph/graphic/contributions/group-contribution-render.js +3 -2
- package/cjs/scenegraph/graphic/contributions/group-contribution-render.js.map +1 -1
- package/cjs/scenegraph/graphic/contributions/rect-contribution-render.js +1 -1
- package/cjs/scenegraph/graphic/contributions/rect-contribution-render.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-helper.js +9 -6
- package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-type/chart-cell.js +2 -1
- package/cjs/scenegraph/group-creater/cell-type/chart-cell.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-type/checkbox-cell.js +2 -1
- package/cjs/scenegraph/group-creater/cell-type/checkbox-cell.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-type/image-cell.js +2 -1
- package/cjs/scenegraph/group-creater/cell-type/image-cell.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-type/spark-line-cell.js +2 -1
- package/cjs/scenegraph/group-creater/cell-type/spark-line-cell.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-type/text-cell.js +2 -1
- package/cjs/scenegraph/group-creater/cell-type/text-cell.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-type/video-cell.js +2 -1
- package/cjs/scenegraph/group-creater/cell-type/video-cell.js.map +1 -1
- package/cjs/scenegraph/group-creater/column-helper.js +1 -0
- package/cjs/scenegraph/group-creater/column-helper.js.map +1 -1
- package/cjs/scenegraph/group-creater/progress/proxy.js +1 -1
- package/cjs/scenegraph/group-creater/progress/proxy.js.map +1 -1
- package/cjs/scenegraph/scenegraph.js +5 -7
- package/cjs/scenegraph/scenegraph.js.map +1 -1
- package/cjs/scenegraph/style/frame-border.d.ts +3 -1
- package/cjs/scenegraph/style/frame-border.js +20 -2
- package/cjs/scenegraph/style/frame-border.js.map +1 -1
- package/cjs/themes/BRIGHT.js +1 -2
- package/cjs/themes/DARK.js +2 -1
- package/cjs/ts-types/events.d.ts +2 -3
- package/cjs/ts-types/events.js.map +1 -1
- package/cjs/ts-types/table-engine.d.ts +4 -0
- package/cjs/ts-types/table-engine.js.map +1 -1
- package/dist/vtable.js +225 -65
- package/dist/vtable.min.js +2 -2
- package/es/PivotChart.d.ts +1 -0
- package/es/PivotChart.js +24 -0
- package/es/PivotChart.js.map +1 -1
- package/es/components/tooltip/TooltipHandler.js +1 -2
- package/es/components/tooltip/TooltipHandler.js.map +1 -1
- package/es/core/BaseTable.d.ts +2 -2
- package/es/core/BaseTable.js +1 -1
- package/es/core/BaseTable.js.map +1 -1
- package/es/core/FouseInput.js +2 -1
- package/es/core/tableHelper.d.ts +1 -0
- package/es/core/tableHelper.js +11 -1
- package/es/core/tableHelper.js.map +1 -1
- package/es/dataset/dataset.js +5 -5
- package/es/dataset/dataset.js.map +1 -1
- package/es/event/listener/table-group.js +3 -3
- package/es/event/listener/table-group.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/layout/pivot-header-layout.js +1 -1
- package/es/layout/pivot-header-layout.js.map +1 -1
- package/es/layout/pivot-layout-helper.js +9 -3
- package/es/layout/pivot-layout-helper.js.map +1 -1
- package/es/render/jsx/index.d.ts +1 -2
- package/es/render/jsx/index.js.map +1 -1
- package/es/scenegraph/graphic/contributions/group-contribution-render.js +3 -3
- package/es/scenegraph/graphic/contributions/group-contribution-render.js.map +1 -1
- package/es/scenegraph/graphic/contributions/rect-contribution-render.js +1 -1
- package/es/scenegraph/graphic/contributions/rect-contribution-render.js.map +1 -1
- package/es/scenegraph/group-creater/cell-helper.js +8 -6
- package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
- package/es/scenegraph/group-creater/cell-type/chart-cell.js +2 -1
- package/es/scenegraph/group-creater/cell-type/chart-cell.js.map +1 -1
- package/es/scenegraph/group-creater/cell-type/checkbox-cell.js +2 -1
- package/es/scenegraph/group-creater/cell-type/checkbox-cell.js.map +1 -1
- package/es/scenegraph/group-creater/cell-type/image-cell.js +2 -1
- package/es/scenegraph/group-creater/cell-type/image-cell.js.map +1 -1
- package/es/scenegraph/group-creater/cell-type/spark-line-cell.js +2 -1
- package/es/scenegraph/group-creater/cell-type/spark-line-cell.js.map +1 -1
- package/es/scenegraph/group-creater/cell-type/text-cell.js +2 -1
- package/es/scenegraph/group-creater/cell-type/text-cell.js.map +1 -1
- package/es/scenegraph/group-creater/cell-type/video-cell.js +2 -1
- package/es/scenegraph/group-creater/cell-type/video-cell.js.map +1 -1
- package/es/scenegraph/group-creater/column-helper.js +3 -2
- package/es/scenegraph/group-creater/column-helper.js.map +1 -1
- package/es/scenegraph/group-creater/progress/proxy.js +1 -1
- package/es/scenegraph/group-creater/progress/proxy.js.map +1 -1
- package/es/scenegraph/scenegraph.js +5 -4
- package/es/scenegraph/scenegraph.js.map +1 -1
- package/es/scenegraph/style/frame-border.d.ts +3 -1
- package/es/scenegraph/style/frame-border.js +17 -0
- package/es/scenegraph/style/frame-border.js.map +1 -1
- package/es/themes/BRIGHT.js +1 -2
- package/es/themes/DARK.js +2 -1
- package/es/ts-types/events.d.ts +2 -3
- package/es/ts-types/events.js.map +1 -1
- package/es/ts-types/table-engine.d.ts +4 -0
- package/es/ts-types/table-engine.js.map +1 -1
- package/package.json +5 -5
|
@@ -24,8 +24,8 @@ export class DimensionTree {
|
|
|
24
24
|
this.hierarchyType = hierarchyType, this.sharedVar = sharedVar, this.reset(tree);
|
|
25
25
|
}
|
|
26
26
|
reset(tree, updateTreeNode = !1) {
|
|
27
|
-
this.dimensionKeys = new NumberMap, this.tree.children = tree,
|
|
28
|
-
this.totalLevel = this.dimensionKeys.count();
|
|
27
|
+
this.cache.clear(), this.dimensionKeys = new NumberMap, this.tree.children = tree,
|
|
28
|
+
this.setTreeNode(this.tree, 0, this.tree), this.totalLevel = this.dimensionKeys.count();
|
|
29
29
|
}
|
|
30
30
|
setTreeNode(node, startIndex, parent) {
|
|
31
31
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
@@ -83,7 +83,13 @@ export class DimensionTree {
|
|
|
83
83
|
for (;left <= right; ) {
|
|
84
84
|
const middle = Math.floor((left + right) / 2), element = node.children[middle];
|
|
85
85
|
if (cIndex >= element.startIndex && cIndex < element.startIndex + element.size) {
|
|
86
|
-
this.cache.set(element.level, element)
|
|
86
|
+
this.cache.set(element.level, element);
|
|
87
|
+
const deleteLevels = [];
|
|
88
|
+
this.cache.forEach(((node, key) => {
|
|
89
|
+
key > element.level && deleteLevels.push(key);
|
|
90
|
+
})), deleteLevels.forEach((key => {
|
|
91
|
+
this.cache.delete(key);
|
|
92
|
+
})), this.searchPath(cIndex, element, path, maxDeep);
|
|
87
93
|
break;
|
|
88
94
|
}
|
|
89
95
|
cIndex < element.startIndex ? right = middle - 1 : left = middle + 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/layout/pivot-layout-helper.ts"],"names":[],"mappings":"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","file":"pivot-layout-helper.js","sourcesContent":["import { 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 IPivotLayoutBaseHeadNode {\n id: number;\n // dimensionKey: string;\n // // title: string;\n // indicatorKey?: string;\n value: string;\n children: IPivotLayoutHeadNode[] | undefined;\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 IPivotLayoutDimensionHeadNode extends IPivotLayoutBaseHeadNode {\n dimensionKey: string;\n}\ninterface IPivotLayoutIndicatorHeadNode extends IPivotLayoutBaseHeadNode {\n indicatorKey: string;\n}\nexport type IPivotLayoutHeadNode = Either<IPivotLayoutDimensionHeadNode, IPivotLayoutIndicatorHeadNode>;\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: IPivotLayoutHeadNode = {\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: IPivotLayoutHeadNode[],\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: IPivotLayoutHeadNode[], updateTreeNode = false) {\n // 清空缓存的计算\n // this.cache = {};\n // this.dimensions = dimensions;\n this.dimensionKeys = new NumberMap<string>();\n this.tree.children = tree as IPivotLayoutHeadNode[];\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: IPivotLayoutHeadNode, startIndex: number, parent: IPivotLayoutHeadNode): 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 //平铺展示 分析所有层级\n if (this.hierarchyType === 'grid') {\n if (node.children?.length >= 1) {\n node.children.forEach(n => {\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 && node.children?.length >= 1) {\n //树形展示 有子节点 且下一层需要展开\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (node.hierarchyState === HierarchyState.collapse && node.children?.length >= 1) {\n //树形展示 有子节点 且下一层不需要展开\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n this.setTreeNode(n, size, node);\n });\n } else if (!node.hierarchyState && node.level + 1 < this.rowExpandLevel && node.children?.length >= 1) {\n //树形展示 有子节点 且下一层需要展开\n node.hierarchyState = HierarchyState.expand;\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (node.children?.length >= 1) {\n //树形展示 有子节点 且下一层不需要展开\n node.hierarchyState = HierarchyState.collapse;\n node.children.forEach(n => {\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<IPivotLayoutHeadNode> {\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<IPivotLayoutHeadNode> {\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: IPivotLayoutHeadNode[], id: LayoutObjectId) {\n return nodes.find(node => {\n return node.id === id;\n });\n }\n searchPath(index: number, node: IPivotLayoutHeadNode, path: Array<IPivotLayoutHeadNode>, 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 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: IPivotLayoutHeadNode;\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: IPivotLayoutHeadNode, 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\n if (node.children && node.level < level) {\n parNode = node;\n for (let i = 0; i < node.children.length; i++) {\n if (\n (sourceIndex >= node.children[i].startInTotal &&\n sourceIndex <= node.children[i].startInTotal + node.children[i].size) ||\n (targetIndex >= node.children[i].startInTotal &&\n targetIndex <= node.children[i].startInTotal + node.children[i].size)\n ) {\n findTargetNode(node.children[i], i);\n }\n }\n }\n };\n findTargetNode(this.tree, 0);\n\n //对parNode子节点位置进行移位【根据sourceSubIndex和targetSubIndex】\n const sourceColumns = parNode.children.splice(sourceSubIndex, 1);\n sourceColumns.unshift(targetSubIndex as any, 0 as any);\n Array.prototype.splice.apply(parNode.children, sourceColumns);\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: IPivotLayoutHeadNode[]) {\n children?.forEach((node: IPivotLayoutHeadNode) => {\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: IPivotLayoutHeadNode) => {\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: IPivotLayoutHeadNode,\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 IPivotLayoutHeadNode).children?.length >= 1) {\n layoutMap\n ._addHeaders(_headerCellIds, row + ((hd as any).levelSpan ?? 1), (hd as IPivotLayoutHeadNode).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: IPivotLayoutHeadNode,\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 IPivotLayoutHeadNode).children?.length >= 1) {\n //row传值 colIndex++和_addHeaders有区别\n show && layoutMap.colIndex++;\n layoutMap\n ._addHeadersForTreeMode(\n _headerCellIds,\n row,\n (hd as IPivotLayoutHeadNode).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"]}
|
|
1
|
+
{"version":3,"sources":["../src/layout/pivot-layout-helper.ts"],"names":[],"mappings":"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","file":"pivot-layout-helper.js","sourcesContent":["import { 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 IPivotLayoutBaseHeadNode {\n id: number;\n // dimensionKey: string;\n // // title: string;\n // indicatorKey?: string;\n value: string;\n children: IPivotLayoutHeadNode[] | undefined;\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 IPivotLayoutDimensionHeadNode extends IPivotLayoutBaseHeadNode {\n dimensionKey: string;\n}\ninterface IPivotLayoutIndicatorHeadNode extends IPivotLayoutBaseHeadNode {\n indicatorKey: string;\n}\nexport type IPivotLayoutHeadNode = Either<IPivotLayoutDimensionHeadNode, IPivotLayoutIndicatorHeadNode>;\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: IPivotLayoutHeadNode = {\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: IPivotLayoutHeadNode[],\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: IPivotLayoutHeadNode[], 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 IPivotLayoutHeadNode[];\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: IPivotLayoutHeadNode, startIndex: number, parent: IPivotLayoutHeadNode): 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 //平铺展示 分析所有层级\n if (this.hierarchyType === 'grid') {\n if (node.children?.length >= 1) {\n node.children.forEach(n => {\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 && node.children?.length >= 1) {\n //树形展示 有子节点 且下一层需要展开\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (node.hierarchyState === HierarchyState.collapse && node.children?.length >= 1) {\n //树形展示 有子节点 且下一层不需要展开\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n this.setTreeNode(n, size, node);\n });\n } else if (!node.hierarchyState && node.level + 1 < this.rowExpandLevel && node.children?.length >= 1) {\n //树形展示 有子节点 且下一层需要展开\n node.hierarchyState = HierarchyState.expand;\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (node.children?.length >= 1) {\n //树形展示 有子节点 且下一层不需要展开\n node.hierarchyState = HierarchyState.collapse;\n node.children.forEach(n => {\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<IPivotLayoutHeadNode> {\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<IPivotLayoutHeadNode> {\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: IPivotLayoutHeadNode[], id: LayoutObjectId) {\n return nodes.find(node => {\n return node.id === id;\n });\n }\n searchPath(index: number, node: IPivotLayoutHeadNode, path: Array<IPivotLayoutHeadNode>, 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: IPivotLayoutHeadNode;\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: IPivotLayoutHeadNode, 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\n if (node.children && node.level < level) {\n parNode = node;\n for (let i = 0; i < node.children.length; i++) {\n if (\n (sourceIndex >= node.children[i].startInTotal &&\n sourceIndex <= node.children[i].startInTotal + node.children[i].size) ||\n (targetIndex >= node.children[i].startInTotal &&\n targetIndex <= node.children[i].startInTotal + node.children[i].size)\n ) {\n findTargetNode(node.children[i], i);\n }\n }\n }\n };\n findTargetNode(this.tree, 0);\n\n //对parNode子节点位置进行移位【根据sourceSubIndex和targetSubIndex】\n const sourceColumns = parNode.children.splice(sourceSubIndex, 1);\n sourceColumns.unshift(targetSubIndex as any, 0 as any);\n Array.prototype.splice.apply(parNode.children, sourceColumns);\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: IPivotLayoutHeadNode[]) {\n children?.forEach((node: IPivotLayoutHeadNode) => {\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: IPivotLayoutHeadNode) => {\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: IPivotLayoutHeadNode,\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 IPivotLayoutHeadNode).children?.length >= 1) {\n layoutMap\n ._addHeaders(_headerCellIds, row + ((hd as any).levelSpan ?? 1), (hd as IPivotLayoutHeadNode).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: IPivotLayoutHeadNode,\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 IPivotLayoutHeadNode).children?.length >= 1) {\n //row传值 colIndex++和_addHeaders有区别\n show && layoutMap.colIndex++;\n layoutMap\n ._addHeadersForTreeMode(\n _headerCellIds,\n row,\n (hd as IPivotLayoutHeadNode).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"]}
|
package/es/render/jsx/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export { VGroup, VSymbol, VRect, VArc, VArea, VCircle, VGlyph, VImage, VLine, VPath, VPolygon, VText, jsx } from '@visactor/vrender';
|
|
2
2
|
import type { TagAttributes } from '@visactor/vrender-components';
|
|
3
|
-
import { Tag } from '@visactor/vrender-components';
|
|
4
3
|
type IDefaultGraphicParamsType<T> = {
|
|
5
4
|
attribute?: T;
|
|
6
5
|
};
|
|
7
|
-
export declare function VTag(params: IDefaultGraphicParamsType<TagAttributes>):
|
|
6
|
+
export declare function VTag(params: IDefaultGraphicParamsType<TagAttributes>): any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/render/jsx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,GAAG,EACJ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAMnD,MAAM,UAAU,IAAI,CAAC,MAAgD;IACnE,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,
|
|
1
|
+
{"version":3,"sources":["../src/render/jsx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,GAAG,EACJ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAMnD,MAAM,UAAU,IAAI,CAAC,MAAgD;IACnE,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAQ,CAAC;AACxD,CAAC","file":"index.js","sourcesContent":["export {\n VGroup,\n VSymbol,\n VRect,\n VArc,\n VArea,\n VCircle,\n VGlyph,\n VImage,\n VLine,\n VPath,\n VPolygon,\n VText,\n jsx\n} from '@visactor/vrender';\nimport type { TagAttributes } from '@visactor/vrender-components';\nimport { Tag } from '@visactor/vrender-components';\n\ntype IDefaultGraphicParamsType<T> = {\n attribute?: T;\n};\n\nexport function VTag(params: IDefaultGraphicParamsType<TagAttributes>) {\n return new Tag(params ? params.attribute : {}) as any;\n}\n"]}
|
|
@@ -4,7 +4,7 @@ var __decorate = this && this.__decorate || function(decorators, target, key, de
|
|
|
4
4
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
5
5
|
};
|
|
6
6
|
|
|
7
|
-
import { BaseRenderContributionTime, injectable } from "@visactor/vrender";
|
|
7
|
+
import { BaseRenderContributionTime, createRectPath, injectable } from "@visactor/vrender";
|
|
8
8
|
|
|
9
9
|
import { getCellHoverColor } from "../../../state/hover/is-cell-hover";
|
|
10
10
|
|
|
@@ -159,10 +159,10 @@ let AdjustPosGroupAfterRenderContribution = class {
|
|
|
159
159
|
this.time = BaseRenderContributionTime.afterFillStroke, this.useStyle = !0, this.order = 0;
|
|
160
160
|
}
|
|
161
161
|
drawShape(group, context, x, y, doFill, doStroke, fVisible, sVisible, groupAttribute, drawContext, fillCb, strokeCb) {
|
|
162
|
-
const {lineWidth: lineWidth = groupAttribute.lineWidth, stroke: stroke = groupAttribute.stroke, lineDash: lineDash = groupAttribute.lineDash, strokeArrayWidth: strokeArrayWidth = groupAttribute.strokeArrayWidth, strokeArrayColor: strokeArrayColor = groupAttribute.strokeArrayColor, notAdjustPos: notAdjustPos} = group.attribute, {width: width = groupAttribute.width, height: height = groupAttribute.height} = group.attribute;
|
|
162
|
+
const {lineWidth: lineWidth = groupAttribute.lineWidth, stroke: stroke = groupAttribute.stroke, lineDash: lineDash = groupAttribute.lineDash, strokeArrayWidth: strokeArrayWidth = groupAttribute.strokeArrayWidth, strokeArrayColor: strokeArrayColor = groupAttribute.strokeArrayColor, notAdjustPos: notAdjustPos, cornerRadius: cornerRadius = groupAttribute.cornerRadius} = group.attribute, {width: width = groupAttribute.width, height: height = groupAttribute.height} = group.attribute;
|
|
163
163
|
if (!0 !== notAdjustPos && stroke && Array.isArray(lineDash) && !lineDash.length && !Array.isArray(strokeArrayColor) && !Array.isArray(strokeArrayWidth) && 1 & lineWidth) {
|
|
164
164
|
const {width: widthFroDraw, height: heightFroDraw} = getCellSizeForDraw(group, Math.ceil(width), Math.ceil(height));
|
|
165
|
-
context.beginPath(), x = Math.floor(x) + .5, y = Math.floor(y) + .5, context.rect(x, y, widthFroDraw, heightFroDraw),
|
|
165
|
+
context.beginPath(), x = Math.floor(x) + .5, y = Math.floor(y) + .5, cornerRadius ? createRectPath(context, x, y, widthFroDraw, heightFroDraw, cornerRadius) : context.rect(x, y, widthFroDraw, heightFroDraw),
|
|
166
166
|
context.setStrokeStyle(group, group.attribute, x, y, groupAttribute), context.stroke();
|
|
167
167
|
}
|
|
168
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/scenegraph/graphic/contributions/group-contribution-render.ts"],"names":[],"mappings":";;;;;;AAWA,OAAO,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAGvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAO9C,IAAM,kCAAkC,GAAxC,MAAM,kCAAkC;IAAxC;QACL,SAAI,GAA+B,0BAA0B,CAAC,gBAAgB,CAAC;QAC/E,aAAQ,GAAG,IAAI,CAAC;QAChB,UAAK,GAAG,CAAC,CAAC;IAmEZ,CAAC;IAlEC,SAAS,CACP,KAAa,EACb,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,MAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,QAAiB,EACjB,cAAgD,EAChD,WAAyB,EACzB,MAIY,EACZ,QAIY,EACZ,cAAuD;QAEvD,MAAM,EACJ,MAAM,GAAG,cAAc,CAAC,MAAM,EAC9B,gBAAgB,GAAI,cAAsB,CAAC,gBAAgB,EAC3D,gBAAgB,GAAI,cAAsB,CAAC,gBAAgB,EAK5D,GAAG,KAAK,CAAC,SAAgB,CAAC;QAE3B,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE;YAClF,cAAc,CAAC,QAAQ,GAAG,KAAK,CAAC;SACjC;IA8BH,CAAC;CACF,CAAA;AAtEY,kCAAkC;IAD9C,UAAU,EAAE;GACA,kCAAkC,CAsE9C;SAtEY,kCAAkC;AAwExC,IAAM,iCAAiC,GAAvC,MAAM,iCAAiC;IAAvC;QACL,SAAI,GAA+B,0BAA0B,CAAC,eAAe,CAAC;QAC9E,aAAQ,GAAG,IAAI,CAAC;QAChB,UAAK,GAAG,CAAC,CAAC;IAkFZ,CAAC;IAjFC,SAAS,CACP,KAAa,EACb,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,MAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,QAAiB,EACjB,cAAgD,EAChD,WAAyB,EACzB,MAIY,EACZ,QAIY;QAEZ,MAAM,EACJ,KAAK,GAAG,cAAc,CAAC,KAAK,EAC5B,MAAM,GAAG,cAAc,CAAC,MAAM,EAE9B,MAAM,GAAG,cAAc,CAAC,MAAM,EAC9B,gBAAgB,GAAI,cAAsB,CAAC,gBAAgB,EAC3D,gBAAgB,GAAI,cAAsB,CAAC,gBAAgB,EAE3D,SAAS,GAAG,cAAc,CAAC,SAAS,EACpC,WAAW,GAAG,cAAc,CAAC,MAAM,EAMpC,GAAG,KAAK,CAAC,SAAgB,CAAC;QAG3B,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;YACpE,OAAO;SACR;QAED,IAAI,cAAc,CAAC;QACnB,IAAI,eAAe,CAAC;QACpB,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;YACtE,IACE,CAAC,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,GAAG,CAAC,CAAC;gBAChD,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAC9E;gBACA,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACxB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAExB,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,CACvE,KAAK,EACL,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAClB,CAAC;gBACF,cAAc,GAAG,YAAY,CAAC;gBAC9B,eAAe,GAAG,aAAa,CAAC;aACjC;iBAAM;gBACL,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACrC;YACD,YAAY,CACV,KAAK,EACL,OAAO,EACP,CAAC,EACD,CAAC,EACD,cAAc,EACd,MAAM,EACN,gBAAgB,IAAI,SAAS,EAC7B,gBAAgB,IAAI,WAAW,EAG/B,cAAc,EACd,eAAe,CAChB,CAAC;SACH;IACH,CAAC;CACF,CAAA;AArFY,iCAAiC;IAD7C,UAAU,EAAE;GACA,iCAAiC,CAqF7C;SArFY,iCAAiC;AA4F9C,MAAM,UAAU,YAAY,CAAC,UAA6B;IACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QAC9B,OAAO;YACL,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,UAAU;SAClB,CAAC;KACH;IAED,IAAI,IAAI,CAAC;IACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,IAAI,EAAE;gBACT,IAAI,GAAG,KAAK,CAAC;aACd;iBAAM,IAAI,KAAK,KAAK,IAAI,EAAE;gBACzB,OAAO;oBACL,WAAW,EAAE,IAAI;iBAClB,CAAC;aACH;SACF;KACF;IAED,OAAO;QACL,WAAW,EAAE,KAAK;QAClB,KAAK,EAAE,IAAI;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,cAAkF,EAClF,MAAsD,EACtD,gBAA8D,EAC9D,gBAA8D,EAC9D,KAAa,EACb,MAAc,EACd,WAAqB,EACrB,IAAuC;IAEvC,MAAM,SAAS,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAG5C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,SAAS,CAAC,WAAW,CAAC;IAE7E,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;IAKrE,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,QAAQ,CAAC,MAAM,EAAE;QACnB,MAAM,GAAG,IAAI,CAAC;KACf;IAED,OAAO,CAAC,SAAS,EAAE,CAAC;IACpB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAGrB,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;QAEzE,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YACpC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;SAC9B;aAAM;YACL,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;SAC9B;QACD,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;YACzE,IAAI,gBAAgB,EAAE;gBACpB,OAAO,CAAC,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;aAC3C;YACD,IAAI,CAAC,aAAa,EAAE;gBAClB,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;aACzC;YACD,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;SAC9B;KACF;SAAM;QACL,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;KAC9B;IAED,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;QAEzE,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YACpC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;SACvC;aAAM;YACL,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;SACvC;QACD,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;YACzE,IAAI,gBAAgB,EAAE;gBACpB,OAAO,CAAC,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;aAC3C;YACD,IAAI,CAAC,aAAa,EAAE;gBAClB,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;aACzC;YACD,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;SACvC;KACF;SAAM;QACL,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;KACvC;IAED,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;QAEzE,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YACpC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;YACnD,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;YAClE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;SAC/B;aAAM;YACL,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;SACvC;QACD,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;YACzE,IAAI,gBAAgB,EAAE;gBACpB,OAAO,CAAC,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;aAC3C;YACD,IAAI,CAAC,aAAa,EAAE;gBAClB,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;aACzC;YACD,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;SAC/B;KACF;SAAM;QACL,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;KAC/B;IAED,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;QAEzE,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YACpC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACtB;aAAM;YACL,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;SAC/B;QACD,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;YACzE,IAAI,gBAAgB,EAAE;gBACpB,OAAO,CAAC,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;aAC3C;YACD,IAAI,CAAC,aAAa,EAAE;gBAClB,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;aACzC;YACD,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACtB;KACF;SAAM;QACL,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACtB;IAED,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE;QAE3B,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,KAAK,EAAE;YACrC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC;SACrC;QACD,OAAO,CAAC,MAAM,EAAE,CAAC;KAClB;AACH,CAAC;AAKM,IAAM,iCAAiC,GAAvC,MAAM,iCAAiC;IAAvC;QACL,SAAI,GAA+B,0BAA0B,CAAC,gBAAgB,CAAC;QAC/E,aAAQ,GAAG,IAAI,CAAC;QAChB,UAAK,GAAG,CAAC,CAAC;IAyCZ,CAAC;IAxCC,SAAS,CACP,KAAa,EACb,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,MAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,QAAiB,EACjB,cAAgD,EAChD,WAAyB,EACzB,MAIY,EACZ,QAIY,EACZ,cAAuD;QAEvD,MAAM,EACJ,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAClC,MAAM,GAAG,cAAc,CAAC,MAAM,EAC9B,gBAAgB,GAAI,cAAsB,CAAC,gBAAgB,EAC3D,gBAAgB,GAAI,cAAsB,CAAC,gBAAgB,EAC5D,GAAG,KAAK,CAAC,SAAgB,CAAC;QAE3B,IACE,MAAM;YACN,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YACvB,QAAQ,CAAC,MAAM;YACf,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAChC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAChC;YACA,cAAc,CAAC,QAAQ,GAAG,KAAK,CAAC;SACjC;IACH,CAAC;CACF,CAAA;AA5CY,iCAAiC;IAD7C,UAAU,EAAE;GACA,iCAAiC,CA4C7C;SA5CY,iCAAiC;AA8CvC,IAAM,gCAAgC,GAAtC,MAAM,gCAAgC;IAAtC;QACL,SAAI,GAA+B,0BAA0B,CAAC,eAAe,CAAC;QAC9E,aAAQ,GAAG,IAAI,CAAC;QAChB,UAAK,GAAG,CAAC,CAAC;IA4FZ,CAAC;IA3FC,SAAS,CACP,KAAa,EACb,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,MAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,QAAiB,EACjB,cAAgD,EAChD,WAAyB,EACzB,MAIY,EACZ,QAIY;QAEZ,MAAM,EACJ,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAClC,MAAM,GAAG,cAAc,CAAC,MAAM,EAC9B,gBAAgB,GAAI,cAAsB,CAAC,gBAAgB,EAC3D,gBAAgB,GAAI,cAAsB,CAAC,gBAAgB,EAC3D,SAAS,GAAG,cAAc,CAAC,SAAS,EACrC,GAAG,KAAK,CAAC,SAAgB,CAAC;QAE3B,IACE,CAAC,MAAM;YACP,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC;YAC7C,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAC/B,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAC/B;YACA,OAAO;SACR;QAGD,IAAI,EAAE,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;QACvF,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3B,IAAI,cAAc,CAAC;QACnB,IAAI,eAAe,CAAC;QACpB,IAAI,SAAS,GAAG,CAAC,EAAE;YACjB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACxB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAExB,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,CACvE,KAAK,EACL,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAClB,CAAC;YACF,cAAc,GAAG,YAAY,CAAC;YAC9B,eAAe,GAAG,aAAa,CAAC;SACjC;aAAM;YACL,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACrC;QACD,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;QAGrE,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,MAAM,EAAE,CAAC;QAGjB,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,cAAc,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC;QACxD,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,MAAM,EAAE,CAAC;QAGjB,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC;QACvC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,cAAc,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC;QACxD,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,MAAM,EAAE,CAAC;QAGjB,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC;QACvC,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,MAAM,EAAE,CAAC;IACnB,CAAC;CACF,CAAA;AA/FY,gCAAgC;IAD5C,UAAU,EAAE;GACA,gCAAgC,CA+F5C;SA/FY,gCAAgC;AAoGtC,IAAM,sCAAsC,GAA5C,MAAM,sCAAsC;IAA5C;QACL,SAAI,GAA+B,0BAA0B,CAAC,gBAAgB,CAAC;QAC/E,aAAQ,GAAG,IAAI,CAAC;QAChB,UAAK,GAAG,CAAC,CAAC;IA+CZ,CAAC;IA9CC,SAAS,CACP,KAAa,EACb,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,MAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,QAAiB,EACjB,cAAgD,EAChD,WAAyB,EACzB,MAIY,EACZ,QAIY,EACZ,cAAuD;QAEvD,MAAM,EACJ,SAAS,GAAG,cAAc,CAAC,SAAS,EACpC,MAAM,GAAG,cAAc,CAAC,MAAM,EAC9B,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAGlC,gBAAgB,GAAI,cAAsB,CAAC,gBAAgB,EAC3D,gBAAgB,GAAI,cAAsB,CAAC,gBAAgB,EAC3D,YAAY,EACb,GAAG,KAAK,CAAC,SAAgB,CAAC;QAE3B,IACE,YAAY,KAAK,IAAI;YACrB,MAAM;YACN,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YACvB,CAAC,QAAQ,CAAC,MAAM;YAChB,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAChC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAChC,SAAS,GAAG,CAAC,EACb;YACA,cAAc,CAAC,QAAQ,GAAG,KAAK,CAAC;SACjC;IACH,CAAC;CACF,CAAA;AAlDY,sCAAsC;IADlD,UAAU,EAAE;GACA,sCAAsC,CAkDlD;SAlDY,sCAAsC;AAqD5C,IAAM,qCAAqC,GAA3C,MAAM,qCAAqC;IAA3C;QACL,SAAI,GAA+B,0BAA0B,CAAC,eAAe,CAAC;QAC9E,aAAQ,GAAG,IAAI,CAAC;QAChB,UAAK,GAAG,CAAC,CAAC;IA+EZ,CAAC;IA9EC,SAAS,CACP,KAAa,EACb,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,MAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,QAAiB,EACjB,cAAgD,EAChD,WAAyB,EACzB,MAIY,EACZ,QAIY;QAEZ,MAAM,EACJ,SAAS,GAAG,cAAc,CAAC,SAAS,EACpC,MAAM,GAAG,cAAc,CAAC,MAAM,EAC9B,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAClC,gBAAgB,GAAI,cAAsB,CAAC,gBAAgB,EAC3D,gBAAgB,GAAI,cAAsB,CAAC,gBAAgB,EAC3D,YAAY,EACb,GAAG,KAAK,CAAC,SAAgB,CAAC;QAE3B,MAAM,EAAE,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;QAIzF,IACE,YAAY,KAAK,IAAI;YACrB,MAAM;YACN,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YACvB,CAAC,QAAQ,CAAC,MAAM;YAChB,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAChC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAChC,SAAS,GAAG,CAAC,EACb;YAsBA,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,CACvE,KAAK,EACL,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAClB,CAAC;YACF,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACxB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;YAChD,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;YACrE,OAAO,CAAC,MAAM,EAAE,CAAC;SAClB;IACH,CAAC;CACF,CAAA;AAlFY,qCAAqC;IADjD,UAAU,EAAE;GACA,qCAAqC,CAkFjD;SAlFY,qCAAqC;AAqF3C,IAAM,wCAAwC,GAA9C,MAAM,wCAAwC;IAA9C;QACL,SAAI,GAA+B,0BAA0B,CAAC,gBAAgB,CAAC;QAC/E,aAAQ,GAAG,IAAI,CAAC;QAChB,UAAK,GAAG,CAAC,CAAC;IAmCZ,CAAC;IAlCC,SAAS,CACP,KAAa,EACb,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,MAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,QAAiB,EACjB,cAAgD,EAChD,WAAyB,EACzB,MAIY,EACZ,QAIY,EACZ,cAAuD;QAGvD,IAAK,KAAe,CAAC,IAAI,KAAK,MAAM,EAAE;YACpC,MAAM,KAAK,GAAI,KAAK,CAAC,KAAa,CAAC,KAAqB,CAAC;YACzD,IAAI,KAAK,CAAC,YAAY,CAAC,gBAAgB,KAAK,gBAAgB,CAAC,SAAS,EAAE;gBACtE,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAc,EAAE,KAAK,CAAC,CAAC;gBAC5D,IAAI,UAAU,EAAE;oBACb,KAAK,CAAC,SAAiB,CAAC,gBAAgB,GAAG,UAAU,CAAC;iBACxD;aACF;SACF;IACH,CAAC;CACF,CAAA;AAtCY,wCAAwC;IADpD,UAAU,EAAE;GACA,wCAAwC,CAsCpD;SAtCY,wCAAwC;AAyC9C,IAAM,uCAAuC,GAA7C,MAAM,uCAAuC;IAA7C;QACL,SAAI,GAA+B,0BAA0B,CAAC,eAAe,CAAC;QAC9E,aAAQ,GAAG,IAAI,CAAC;QAChB,UAAK,GAAG,CAAC,CAAC;IAuCZ,CAAC;IAtCC,SAAS,CACP,KAAa,EACb,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,MAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,QAAiB,EACjB,cAAgD,EAChD,WAAyB,EACzB,MAIY,EACZ,QAIY;QAGZ,IAAK,KAAK,CAAC,SAAiB,CAAC,gBAAgB,EAAE;YAC7C,IAAI,MAAM,EAAE;aAGX;iBAAM,IAAI,QAAQ,EAAE;gBACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;gBAEtC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAI,KAAK,CAAC,SAAiB,CAAC,gBAAuB,CAAC;gBACxE,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;gBACrE,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC;gBAC/B,KAAK,CAAC,SAAiB,CAAC,gBAAgB,GAAG,SAAS,CAAC;aACvD;SACF;IACH,CAAC;CACF,CAAA;AA1CY,uCAAuC;IADnD,UAAU,EAAE;GACA,uCAAuC,CA0CnD;SA1CY,uCAAuC;AA6C7C,IAAM,qCAAqC,GAA3C,MAAM,qCAAqC;IAA3C;QACL,SAAI,GAA+B,0BAA0B,CAAC,gBAAgB,CAAC;QAC/E,aAAQ,GAAG,IAAI,CAAC;QAChB,UAAK,GAAG,CAAC,CAAC;IA0FZ,CAAC;IAzFC,SAAS,CACP,KAAa,EACb,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,MAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,QAAiB,EACjB,cAAgD,EAChD,WAAyB,EACzB,MAIY,EACZ,QAIY,EACZ,cAAuD;;QAEvD,MAAM,KAAK,GAAI,KAAK,CAAC,KAAa,CAAC,KAAqB,CAAC;QACzD,IAAK,KAAe,CAAC,IAAI,KAAK,MAAM,EAAE;YACpC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAA,KAAK,CAAC,SAAS,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC;YACjE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAA,KAAK,CAAC,SAAS,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAClE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,kBAAkB,EAAE,GAAG,KAAK,CAAC,uBAAuB,EAAE,CAAC;YAC1G,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,mBAAmB,EAAE,GAAG,KAAK,CAAC,yBAAyB,EAAE,CAAC;YAC/G,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SACnC;aAAM,IAAK,KAAe,CAAC,IAAI,KAAK,YAAY,EAAE;YACjD,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC,MAAA,KAAK,CAAC,SAAS,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAClE,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,mBAAmB,EAAE,GAAG,KAAK,CAAC,yBAAyB,EAAE,CAAC;YAC/G,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SACnC;aAAM,IAAK,KAAe,CAAC,IAAI,KAAK,YAAY,EAAE;YACjD,MAAM,CAAC,GAAG,CAAC,CAAC,MAAA,KAAK,CAAC,SAAS,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC;YACjE,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,kBAAkB,EAAE,GAAG,KAAK,CAAC,uBAAuB,EAAE,CAAC;YAC1G,MAAM,MAAM,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAC3C,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SACnC;aAAM,IAAK,KAAe,CAAC,IAAI,KAAK,cAAc,EAAE;YACnD,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC,MAAA,KAAK,CAAC,SAAS,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAClE,MAAM,KAAK,GAAG,KAAK,CAAC,uBAAuB,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,mBAAmB,EAAE,GAAG,KAAK,CAAC,yBAAyB,EAAE,CAAC;YAC/G,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SACnC;aAAM,IAAK,KAAe,CAAC,IAAI,KAAK,eAAe,EAAE;YACpD,MAAM,CAAC,GAAG,CAAC,CAAC,MAAA,KAAK,CAAC,SAAS,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC;YACjE,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,kBAAkB,EAAE,GAAG,KAAK,CAAC,uBAAuB,EAAE,CAAC;YAC1G,MAAM,MAAM,GAAG,KAAK,CAAC,yBAAyB,EAAE,CAAC;YACjD,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SACnC;aAAM,IAAK,KAAe,CAAC,IAAI,KAAK,eAAe,EAAE;YACpD,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAC3C,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SACnC;aAAM,IAAK,KAAe,CAAC,IAAI,KAAK,yBAAyB,EAAE;YAC9D,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,KAAK,CAAC,uBAAuB,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAC3C,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SACnC;aAAM,IAAK,KAAe,CAAC,IAAI,KAAK,4BAA4B,EAAE;YACjE,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,KAAK,CAAC,uBAAuB,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,yBAAyB,EAAE,CAAC;YACjD,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SACnC;aAAM,IAAK,KAAe,CAAC,IAAI,KAAK,2BAA2B,EAAE;YAChE,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,KAAK,CAAC,yBAAyB,EAAE,CAAC;YACjD,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SACnC;IACH,CAAC;CACF,CAAA;AA7FY,qCAAqC;IADjD,UAAU,EAAE;GACA,qCAAqC,CA6FjD;SA7FY,qCAAqC;AA+F3C,IAAM,oCAAoC,GAA1C,MAAM,oCAAoC;IAA1C;QACL,SAAI,GAA+B,0BAA0B,CAAC,eAAe,CAAC;QAC9E,aAAQ,GAAG,IAAI,CAAC;QAChB,UAAK,GAAG,CAAC,CAAC;IA2BZ,CAAC;IA1BC,SAAS,CACP,KAAa,EACb,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,MAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,QAAiB,EACjB,cAAgD,EAChD,WAAyB,EACzB,MAIY,EACZ,QAIY;QAGZ,IAAK,KAAe,CAAC,IAAI,KAAK,MAAM,EAAE;SACrC;IACH,CAAC;CACF,CAAA;AA9BY,oCAAoC;IADhD,UAAU,EAAE;GACA,oCAAoC,CA8BhD;SA9BY,oCAAoC;AAgCjD,SAAS,kBAAkB,CAAC,KAAU,EAAE,KAAa,EAAE,MAAc;IACnE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAqB,CAAC;IAChD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;QACzB,IAAI,GAAG,GAAG,KAAK,CAAC,GAAa,CAAC;QAC9B,IAAI,GAAG,GAAG,KAAK,CAAC,GAAa,CAAC;QAC9B,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACpD,IAAI,SAAS,EAAE;YACb,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YACxB,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;SACzB;QAED,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE;YACvC,KAAK,IAAI,CAAC,CAAC;SACZ;aAAM,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK,CAAC,cAAc,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE;YACxE,KAAK,IAAI,CAAC,CAAC;SACZ;QACD,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE;YACvC,MAAM,IAAI,CAAC,CAAC;SACb;aAAM,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK,CAAC,cAAc,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE;YACvE,MAAM,IAAI,CAAC,CAAC;SACb;KACF;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE;QACzC,IAAI,KAAK,CAAC,UAAU,EAAE;YACpB,KAAK,IAAI,CAAC,CAAC;SACZ;QACD,IAAI,KAAK,CAAC,SAAS,EAAE;YACnB,MAAM,IAAI,CAAC,CAAC;SACb;KACF;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC","file":"group-contribution-render.js","sourcesContent":["import type {\n IGroup,\n IContext2d,\n IGroupGraphicAttribute,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IGroupRenderContribution,\n IDrawContext,\n IRectGraphicAttribute\n} from '@visactor/vrender';\nimport { BaseRenderContributionTime, injectable } from '@visactor/vrender';\nimport type { Group } from '../group';\nimport { getCellHoverColor } from '../../../state/hover/is-cell-hover';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { getQuadProps } from '../../utils/padding';\nimport { getCellMergeInfo } from '../../utils/get-cell-merge';\nimport { InteractionState } from '../../../ts-types';\n\n// const highlightDash: number[] = [];\n\n// SplitGroupContribution处理分段渲染stroke\n// stroke/strokeArrayWidth/strokeArrayColor 为数组时调用\n@injectable()\nexport class SplitGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n stroke = groupAttribute.stroke,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor\n // highlightStroke = (groupAttribute as any).highlightStroke,\n // highlightStrokeArrayWidth = (groupAttribute as any).highlightStrokeArrayWidth,\n // width = groupAttribute.width,\n // height = groupAttribute.height,\n } = group.attribute as any;\n\n if (stroke && (Array.isArray(strokeArrayWidth) || Array.isArray(strokeArrayColor))) {\n doFillOrStroke.doStroke = false;\n }\n\n // if (highlightStroke) {\n // // 依据highlightStroke信息调整clip范围,以实现在单个单元格显示highlight border\n // let xDist = x;\n // let yDist = y;\n // let widthDist = width;\n // let heightDist = height;\n // if (highlightStroke[0] && highlightStrokeArrayWidth[0]) {\n // // top\n // yDist -= highlightStrokeArrayWidth[0] / 2;\n // heightDist += highlightStrokeArrayWidth[0] / 2;\n // }\n // if (highlightStroke[1] && highlightStrokeArrayWidth[1]) {\n // // right\n // widthDist += highlightStrokeArrayWidth[1] / 2;\n // }\n // if (highlightStroke[2] && highlightStrokeArrayWidth[2]) {\n // // bottom\n // heightDist += highlightStrokeArrayWidth[2] / 2;\n // }\n // if (highlightStroke[3] && highlightStrokeArrayWidth[3]) {\n // // left\n // xDist -= highlightStrokeArrayWidth[3] / 2;\n // widthDist += highlightStrokeArrayWidth[3] / 2;\n // }\n\n // context.beginPath();\n // context.rect(xDist, yDist, widthDist, heightDist);\n // }\n }\n}\n@injectable()\nexport class SplitGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const {\n width = groupAttribute.width,\n height = groupAttribute.height,\n // 基础border\n stroke = groupAttribute.stroke,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n\n lineWidth = groupAttribute.lineWidth,\n strokeColor = groupAttribute.stroke\n // // select & hover border\n // highlightStroke = (groupAttribute as any).highlightStroke,\n // highlightStrokeArrayColor = (groupAttribute as any).highlightStrokeArrayColor,\n // highlightStrokeArrayWidth = (groupAttribute as any).highlightStrokeArrayWidth,\n // highlightStrokeArrayPart = (groupAttribute as any).highlightStrokeArrayPart,\n } = group.attribute as any;\n\n // lineWidth === 0 不绘制\n if (!stroke || (!Array.isArray(strokeArrayWidth) && lineWidth === 0)) {\n return;\n }\n\n let widthForStroke;\n let heightForStroke;\n if (Array.isArray(strokeArrayColor) || Array.isArray(strokeArrayWidth)) {\n if (\n (typeof lineWidth === 'number' && lineWidth & 1) ||\n (Array.isArray(strokeArrayWidth) && strokeArrayWidth.some(width => width & 1))\n ) {\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n\n const { width: widthFroDraw, height: heightFroDraw } = getCellSizeForDraw(\n group,\n Math.ceil(width),\n Math.ceil(height)\n );\n widthForStroke = widthFroDraw;\n heightForStroke = heightFroDraw;\n } else {\n widthForStroke = Math.ceil(width);\n heightForStroke = Math.ceil(height);\n }\n renderStroke(\n group,\n context,\n x,\n y,\n groupAttribute,\n stroke,\n strokeArrayWidth || lineWidth,\n strokeArrayColor || strokeColor,\n // Math.ceil(width),\n // Math.ceil(height)\n widthForStroke,\n heightForStroke\n );\n }\n }\n}\n\n/**\n * @description: 判断线宽是否需要分别渲染(线宽不同)\n * @param {number} widthArray\n * @return {*}\n */\nexport function getWidthInfo(widthArray: number[] | number) {\n if (!Array.isArray(widthArray)) {\n return {\n isSplitDraw: false,\n width: widthArray\n };\n }\n\n let temp;\n for (let i = 0; i < widthArray.length; i++) {\n const width = widthArray[i];\n if (width) {\n if (!temp) {\n temp = width;\n } else if (width !== temp) {\n return {\n isSplitDraw: true\n };\n }\n }\n }\n\n return {\n isSplitDraw: false,\n width: temp\n };\n}\n\nexport function renderStroke(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n groupAttribute: Required<IGroupGraphicAttribute> | Required<IRectGraphicAttribute>,\n stroke: boolean | [boolean, boolean, boolean, boolean],\n strokeArrayWidth: [number, number, number, number] | undefined,\n strokeArrayColor: [string, string, string, string] | undefined,\n width: number,\n height: number,\n isHighlight?: boolean,\n part?: ([number, number] | undefined)[]\n) {\n const widthInfo = getWidthInfo(strokeArrayWidth);\n const isWidthNumber = !Array.isArray(strokeArrayWidth);\n const isStrokeTrue = !Array.isArray(stroke);\n // 渲染部分线段,part: [[0, 0.5], undifined, undifined, undifined]\n // 同样上右下左,范围0-1,[0, 0.5]即只渲染前一半\n const isPart = Array.isArray(part);\n const isSplitDraw = Array.isArray(strokeArrayColor) || widthInfo.isSplitDraw;\n\n context.setStrokeStyle(group, group.attribute, x, y, groupAttribute);\n // if (isHighlight) {\n // context.setLineDash(highlightDash);\n // context.lineCap = 'square';\n // }\n const lineDash = context.getLineDash();\n let isDash = false;\n if (lineDash.length) {\n isDash = true;\n }\n // 单独处理每条边界,目前不考虑圆角\n context.beginPath();\n context.moveTo(x, y);\n\n // top\n if ((isStrokeTrue || stroke[0]) && (isWidthNumber || strokeArrayWidth[0])) {\n // context.lineTo(x + width, y);\n if (isPart && Array.isArray(part[0])) {\n context.moveTo(x + width * part[0][0], y);\n context.lineTo(x + width * (part[0][1] - part[0][0]), y);\n context.moveTo(x + width, y);\n } else {\n context.moveTo(x, y);\n context.lineTo(x + width, y);\n }\n if ((isSplitDraw || isDash) && (!strokeArrayColor || strokeArrayColor[0])) {\n if (strokeArrayColor) {\n context.strokeStyle = strokeArrayColor[0];\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[0];\n }\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n context.stroke();\n context.beginPath();\n context.moveTo(x + width, y);\n }\n } else {\n context.moveTo(x + width, y);\n }\n // right\n if ((isStrokeTrue || stroke[1]) && (isWidthNumber || strokeArrayWidth[1])) {\n // context.lineTo(x + width, y + height);\n if (isPart && Array.isArray(part[1])) {\n context.moveTo(x + width, y + height * part[1][0]);\n context.lineTo(x + width, y + height * (part[1][1] - part[1][0]));\n context.moveTo(x + width, y + height);\n } else {\n context.moveTo(x + width, y);\n context.lineTo(x + width, y + height);\n }\n if ((isSplitDraw || isDash) && (!strokeArrayColor || strokeArrayColor[1])) {\n if (strokeArrayColor) {\n context.strokeStyle = strokeArrayColor[1];\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[1];\n }\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n context.stroke();\n context.beginPath();\n context.moveTo(x + width, y + height);\n }\n } else {\n context.moveTo(x + width, y + height);\n }\n // bottom\n if ((isStrokeTrue || stroke[2]) && (isWidthNumber || strokeArrayWidth[2])) {\n // context.lineTo(x, y + height);\n if (isPart && Array.isArray(part[2])) {\n context.moveTo(x + width * part[2][0], y + height);\n context.lineTo(x + width * (part[2][1] - part[2][0]), y + height);\n context.moveTo(x, y + height);\n } else {\n context.moveTo(x, y + height);\n context.lineTo(x + width, y + height);\n }\n if ((isSplitDraw || isDash) && (!strokeArrayColor || strokeArrayColor[2])) {\n if (strokeArrayColor) {\n context.strokeStyle = strokeArrayColor[2];\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[2];\n }\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n context.stroke();\n context.beginPath();\n context.moveTo(x, y + height);\n }\n } else {\n context.moveTo(x, y + height);\n }\n // left\n if ((isStrokeTrue || stroke[3]) && (isWidthNumber || strokeArrayWidth[3])) {\n // context.lineTo(x, y);\n if (isPart && Array.isArray(part[3])) {\n context.moveTo(x, y + height * part[3][0]);\n context.lineTo(x, y + height * (part[3][1] - part[3][0]));\n context.moveTo(x, y);\n } else {\n context.moveTo(x, y);\n context.lineTo(x, y + height);\n }\n if ((isSplitDraw || isDash) && (!strokeArrayColor || strokeArrayColor[3])) {\n if (strokeArrayColor) {\n context.strokeStyle = strokeArrayColor[3];\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[3];\n }\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n context.stroke();\n context.beginPath();\n context.moveTo(x, y);\n }\n } else {\n context.moveTo(x, y);\n }\n\n if (!isSplitDraw && !isDash) {\n // context.strokeStyle = strokeArrayColor;\n if (!isWidthNumber && widthInfo.width) {\n context.lineWidth = widthInfo.width;\n }\n context.stroke();\n }\n}\n\n// DashGroupContribution处理虚线边框对齐\n// lineDash 为非空数组时调用\n@injectable()\nexport class DashGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n lineDash = groupAttribute.lineDash,\n stroke = groupAttribute.stroke,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth\n } = group.attribute as any;\n\n if (\n stroke &&\n Array.isArray(lineDash) &&\n lineDash.length &&\n !Array.isArray(strokeArrayColor) &&\n !Array.isArray(strokeArrayWidth)\n ) {\n doFillOrStroke.doStroke = false;\n }\n }\n}\n@injectable()\nexport class DashGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const {\n lineDash = groupAttribute.lineDash,\n stroke = groupAttribute.stroke,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n lineWidth = groupAttribute.lineWidth\n } = group.attribute as any;\n\n if (\n !stroke ||\n !(Array.isArray(lineDash) && lineDash.length) ||\n Array.isArray(strokeArrayColor) ||\n Array.isArray(strokeArrayWidth)\n ) {\n return;\n }\n\n // const { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n let { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n width = Math.ceil(width);\n height = Math.ceil(height);\n\n let widthForStroke;\n let heightForStroke;\n if (lineWidth & 1) {\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n\n const { width: widthFroDraw, height: heightFroDraw } = getCellSizeForDraw(\n group,\n Math.ceil(width),\n Math.ceil(height)\n );\n widthForStroke = widthFroDraw;\n heightForStroke = heightFroDraw;\n } else {\n widthForStroke = Math.ceil(width);\n heightForStroke = Math.ceil(height);\n }\n context.setStrokeStyle(group, group.attribute, x, y, groupAttribute);\n // 分段设置lineDashOffset,实现虚线边框对齐\n // top\n context.beginPath();\n context.moveTo(x, y);\n context.lineTo(x + widthForStroke, y);\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n context.stroke();\n\n // right\n context.beginPath();\n context.moveTo(x + widthForStroke, y);\n context.lineTo(x + widthForStroke, y + heightForStroke);\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n context.stroke();\n\n // bottom\n context.beginPath();\n context.moveTo(x, y + heightForStroke);\n context.lineTo(x + widthForStroke, y + heightForStroke);\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n context.stroke();\n\n // left\n context.beginPath();\n context.moveTo(x, y);\n context.lineTo(x, y + heightForStroke);\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n context.stroke();\n }\n}\n\n// AdjustPosGroupContribution处理线宽为奇数时stroke位置偏移0.5px\n// lineWidth 为奇数时调用\n@injectable()\nexport class AdjustPosGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n lineWidth = groupAttribute.lineWidth,\n stroke = groupAttribute.stroke,\n lineDash = groupAttribute.lineDash,\n // width = groupAttribute.width,\n // height = groupAttribute.height,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n notAdjustPos\n } = group.attribute as any;\n\n if (\n notAdjustPos !== true && // 不需要调整位置\n stroke &&\n Array.isArray(lineDash) &&\n !lineDash.length && // 非虚线\n !Array.isArray(strokeArrayColor) &&\n !Array.isArray(strokeArrayWidth) &&\n lineWidth & 1 // 奇数线宽\n ) {\n doFillOrStroke.doStroke = false;\n }\n }\n}\n\n@injectable()\nexport class AdjustPosGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const {\n lineWidth = groupAttribute.lineWidth,\n stroke = groupAttribute.stroke,\n lineDash = groupAttribute.lineDash,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n notAdjustPos\n } = group.attribute as any;\n\n const { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n // width = Math.ceil(width);\n // height = Math.ceil(height);\n\n if (\n notAdjustPos !== true && // 不需要调整位置\n stroke &&\n Array.isArray(lineDash) &&\n !lineDash.length && // 非虚线\n !Array.isArray(strokeArrayColor) &&\n !Array.isArray(strokeArrayWidth) &&\n lineWidth & 1 // 奇数线宽\n ) {\n // if (group.role === 'cell') {\n // const table = (group.stage as any).table as BaseTableAPI;\n // let col = (group as any).col as number;\n // let row = (group as any).row as number;\n // const mergeInfo = getCellMergeInfo(table, col, row);\n // if (mergeInfo) {\n // col = mergeInfo.end.col;\n // row = mergeInfo.end.row;\n // }\n\n // if (table && col === table.colCount - 1) {\n // width -= 1;\n // } else if (table && col === table.frozenColCount - 1 && table.scrollLeft) {\n // width -= 1;\n // }\n // if (table && row === table.rowCount - 1) {\n // height -= 1;\n // } else if (table && row === table.frozenRowCount - 1 && table.scrollTop) {\n // height -= 1;\n // }\n // }\n const { width: widthFroDraw, height: heightFroDraw } = getCellSizeForDraw(\n group,\n Math.ceil(width),\n Math.ceil(height)\n );\n context.beginPath();\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n context.rect(x, y, widthFroDraw, heightFroDraw);\n context.setStrokeStyle(group, group.attribute, x, y, groupAttribute);\n context.stroke();\n }\n }\n}\n\n@injectable()\nexport class AdjustColorGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n // 处理hover颜色\n if ((group as Group).role === 'cell') {\n const table = (group.stage as any).table as BaseTableAPI;\n if (table.stateManager.interactionState !== InteractionState.scrolling) {\n const hoverColor = getCellHoverColor(group as Group, table);\n if (hoverColor) {\n (group.attribute as any)._vtableHoverFill = hoverColor;\n }\n }\n }\n }\n}\n\n@injectable()\nexport class AdjustColorGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // 处理hover颜色\n if ((group.attribute as any)._vtableHoverFill) {\n if (fillCb) {\n // do nothing\n // fillCb(context, group.attribute, groupAttribute);\n } else if (fVisible) {\n const oldColor = group.attribute.fill;\n // draw hover fill\n group.attribute.fill = (group.attribute as any)._vtableHoverFill as any;\n context.setCommonStyle(group, group.attribute, x, y, groupAttribute);\n context.fill();\n group.attribute.fill = oldColor;\n (group.attribute as any)._vtableHoverFill = undefined;\n }\n }\n }\n}\n\n@injectable()\nexport class ClipBodyGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const table = (group.stage as any).table as BaseTableAPI;\n if ((group as Group).role === 'body') {\n const x = -(group.attribute.x ?? 0) + table.getFrozenColsWidth();\n const y = -(group.attribute.y ?? 0) + table.getFrozenRowsHeight();\n const width = group.parent.attribute.width - table.getFrozenColsWidth() - table.getRightFrozenColsWidth();\n const height = group.parent.attribute.height - table.getFrozenRowsHeight() - table.getBottomFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'row-header') {\n const x = 0;\n const y = -(group.attribute.y ?? 0) + table.getFrozenRowsHeight();\n const width = table.getFrozenColsWidth();\n const height = group.parent.attribute.height - table.getFrozenRowsHeight() - table.getBottomFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'col-header') {\n const x = -(group.attribute.x ?? 0) + table.getFrozenColsWidth();\n const y = 0;\n const width = group.parent.attribute.width - table.getFrozenColsWidth() - table.getRightFrozenColsWidth();\n const height = table.getFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'right-frozen') {\n const x = 0;\n const y = -(group.attribute.y ?? 0) + table.getFrozenRowsHeight();\n const width = table.getRightFrozenColsWidth();\n const height = group.parent.attribute.height - table.getFrozenRowsHeight() - table.getBottomFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'bottom-frozen') {\n const x = -(group.attribute.x ?? 0) + table.getFrozenColsWidth();\n const y = 0;\n const width = group.parent.attribute.width - table.getFrozenColsWidth() - table.getRightFrozenColsWidth();\n const height = table.getBottomFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'corner-header') {\n const x = 0;\n const y = 0;\n const width = table.getFrozenColsWidth();\n const height = table.getFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'corner-right-top-header') {\n const x = 0;\n const y = 0;\n const width = table.getRightFrozenColsWidth();\n const height = table.getFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'corner-right-bottom-header') {\n const x = 0;\n const y = 0;\n const width = table.getRightFrozenColsWidth();\n const height = table.getBottomFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'corner-left-bottom-header') {\n const x = 0;\n const y = 0;\n const width = table.getFrozenColsWidth();\n const height = table.getBottomFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n }\n }\n}\n@injectable()\nexport class ClipBodyGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // 处理hover颜色\n if ((group as Group).role === 'body') {\n }\n }\n}\n\nfunction getCellSizeForDraw(group: any, width: number, height: number) {\n const table = group.stage.table as BaseTableAPI;\n if (group.role === 'cell') {\n let col = group.col as number;\n let row = group.row as number;\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo) {\n col = mergeInfo.end.col;\n row = mergeInfo.end.row;\n }\n\n if (table && col === table.colCount - 1) {\n width -= 1;\n } else if (table && col === table.frozenColCount - 1 && table.scrollLeft) {\n width -= 1;\n }\n if (table && row === table.rowCount - 1) {\n height -= 1;\n } else if (table && row === table.frozenRowCount - 1 && table.scrollTop) {\n height -= 1;\n }\n } else if (group.role === 'corner-frozen') {\n if (table.scrollLeft) {\n width -= 1;\n }\n if (table.scrollTop) {\n height -= 1;\n }\n }\n return { width, height };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/scenegraph/graphic/contributions/group-contribution-render.ts"],"names":[],"mappings":"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","file":"group-contribution-render.js","sourcesContent":["import type {\n IGroup,\n IContext2d,\n IGroupGraphicAttribute,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IGroupRenderContribution,\n IDrawContext,\n IRectGraphicAttribute\n} from '@visactor/vrender';\nimport { BaseRenderContributionTime, createRectPath, injectable } from '@visactor/vrender';\nimport type { Group } from '../group';\nimport { getCellHoverColor } from '../../../state/hover/is-cell-hover';\nimport type { BaseTableAPI } from '../../../ts-types/base-table';\nimport { getQuadProps } from '../../utils/padding';\nimport { getCellMergeInfo } from '../../utils/get-cell-merge';\nimport { InteractionState } from '../../../ts-types';\n\n// const highlightDash: number[] = [];\n\n// SplitGroupContribution处理分段渲染stroke\n// stroke/strokeArrayWidth/strokeArrayColor 为数组时调用\n@injectable()\nexport class SplitGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n stroke = groupAttribute.stroke,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor\n // highlightStroke = (groupAttribute as any).highlightStroke,\n // highlightStrokeArrayWidth = (groupAttribute as any).highlightStrokeArrayWidth,\n // width = groupAttribute.width,\n // height = groupAttribute.height,\n } = group.attribute as any;\n\n if (stroke && (Array.isArray(strokeArrayWidth) || Array.isArray(strokeArrayColor))) {\n doFillOrStroke.doStroke = false;\n }\n\n // if (highlightStroke) {\n // // 依据highlightStroke信息调整clip范围,以实现在单个单元格显示highlight border\n // let xDist = x;\n // let yDist = y;\n // let widthDist = width;\n // let heightDist = height;\n // if (highlightStroke[0] && highlightStrokeArrayWidth[0]) {\n // // top\n // yDist -= highlightStrokeArrayWidth[0] / 2;\n // heightDist += highlightStrokeArrayWidth[0] / 2;\n // }\n // if (highlightStroke[1] && highlightStrokeArrayWidth[1]) {\n // // right\n // widthDist += highlightStrokeArrayWidth[1] / 2;\n // }\n // if (highlightStroke[2] && highlightStrokeArrayWidth[2]) {\n // // bottom\n // heightDist += highlightStrokeArrayWidth[2] / 2;\n // }\n // if (highlightStroke[3] && highlightStrokeArrayWidth[3]) {\n // // left\n // xDist -= highlightStrokeArrayWidth[3] / 2;\n // widthDist += highlightStrokeArrayWidth[3] / 2;\n // }\n\n // context.beginPath();\n // context.rect(xDist, yDist, widthDist, heightDist);\n // }\n }\n}\n@injectable()\nexport class SplitGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const {\n width = groupAttribute.width,\n height = groupAttribute.height,\n // 基础border\n stroke = groupAttribute.stroke,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n\n lineWidth = groupAttribute.lineWidth,\n strokeColor = groupAttribute.stroke\n // // select & hover border\n // highlightStroke = (groupAttribute as any).highlightStroke,\n // highlightStrokeArrayColor = (groupAttribute as any).highlightStrokeArrayColor,\n // highlightStrokeArrayWidth = (groupAttribute as any).highlightStrokeArrayWidth,\n // highlightStrokeArrayPart = (groupAttribute as any).highlightStrokeArrayPart,\n } = group.attribute as any;\n\n // lineWidth === 0 不绘制\n if (!stroke || (!Array.isArray(strokeArrayWidth) && lineWidth === 0)) {\n return;\n }\n\n let widthForStroke;\n let heightForStroke;\n if (Array.isArray(strokeArrayColor) || Array.isArray(strokeArrayWidth)) {\n if (\n (typeof lineWidth === 'number' && lineWidth & 1) ||\n (Array.isArray(strokeArrayWidth) && strokeArrayWidth.some(width => width & 1))\n ) {\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n\n const { width: widthFroDraw, height: heightFroDraw } = getCellSizeForDraw(\n group,\n Math.ceil(width),\n Math.ceil(height)\n );\n widthForStroke = widthFroDraw;\n heightForStroke = heightFroDraw;\n } else {\n widthForStroke = Math.ceil(width);\n heightForStroke = Math.ceil(height);\n }\n renderStroke(\n group,\n context,\n x,\n y,\n groupAttribute,\n stroke,\n strokeArrayWidth || lineWidth,\n strokeArrayColor || strokeColor,\n // Math.ceil(width),\n // Math.ceil(height)\n widthForStroke,\n heightForStroke\n );\n }\n }\n}\n\n/**\n * @description: 判断线宽是否需要分别渲染(线宽不同)\n * @param {number} widthArray\n * @return {*}\n */\nexport function getWidthInfo(widthArray: number[] | number) {\n if (!Array.isArray(widthArray)) {\n return {\n isSplitDraw: false,\n width: widthArray\n };\n }\n\n let temp;\n for (let i = 0; i < widthArray.length; i++) {\n const width = widthArray[i];\n if (width) {\n if (!temp) {\n temp = width;\n } else if (width !== temp) {\n return {\n isSplitDraw: true\n };\n }\n }\n }\n\n return {\n isSplitDraw: false,\n width: temp\n };\n}\n\nexport function renderStroke(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n groupAttribute: Required<IGroupGraphicAttribute> | Required<IRectGraphicAttribute>,\n stroke: boolean | [boolean, boolean, boolean, boolean],\n strokeArrayWidth: [number, number, number, number] | undefined,\n strokeArrayColor: [string, string, string, string] | undefined,\n width: number,\n height: number,\n isHighlight?: boolean,\n part?: ([number, number] | undefined)[]\n) {\n const widthInfo = getWidthInfo(strokeArrayWidth);\n const isWidthNumber = !Array.isArray(strokeArrayWidth);\n const isStrokeTrue = !Array.isArray(stroke);\n // 渲染部分线段,part: [[0, 0.5], undifined, undifined, undifined]\n // 同样上右下左,范围0-1,[0, 0.5]即只渲染前一半\n const isPart = Array.isArray(part);\n const isSplitDraw = Array.isArray(strokeArrayColor) || widthInfo.isSplitDraw;\n\n context.setStrokeStyle(group, group.attribute, x, y, groupAttribute);\n // if (isHighlight) {\n // context.setLineDash(highlightDash);\n // context.lineCap = 'square';\n // }\n const lineDash = context.getLineDash();\n let isDash = false;\n if (lineDash.length) {\n isDash = true;\n }\n // 单独处理每条边界,目前不考虑圆角\n context.beginPath();\n context.moveTo(x, y);\n\n // top\n if ((isStrokeTrue || stroke[0]) && (isWidthNumber || strokeArrayWidth[0])) {\n // context.lineTo(x + width, y);\n if (isPart && Array.isArray(part[0])) {\n context.moveTo(x + width * part[0][0], y);\n context.lineTo(x + width * (part[0][1] - part[0][0]), y);\n context.moveTo(x + width, y);\n } else {\n context.moveTo(x, y);\n context.lineTo(x + width, y);\n }\n if ((isSplitDraw || isDash) && (!strokeArrayColor || strokeArrayColor[0])) {\n if (strokeArrayColor) {\n context.strokeStyle = strokeArrayColor[0];\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[0];\n }\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n context.stroke();\n context.beginPath();\n context.moveTo(x + width, y);\n }\n } else {\n context.moveTo(x + width, y);\n }\n // right\n if ((isStrokeTrue || stroke[1]) && (isWidthNumber || strokeArrayWidth[1])) {\n // context.lineTo(x + width, y + height);\n if (isPart && Array.isArray(part[1])) {\n context.moveTo(x + width, y + height * part[1][0]);\n context.lineTo(x + width, y + height * (part[1][1] - part[1][0]));\n context.moveTo(x + width, y + height);\n } else {\n context.moveTo(x + width, y);\n context.lineTo(x + width, y + height);\n }\n if ((isSplitDraw || isDash) && (!strokeArrayColor || strokeArrayColor[1])) {\n if (strokeArrayColor) {\n context.strokeStyle = strokeArrayColor[1];\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[1];\n }\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n context.stroke();\n context.beginPath();\n context.moveTo(x + width, y + height);\n }\n } else {\n context.moveTo(x + width, y + height);\n }\n // bottom\n if ((isStrokeTrue || stroke[2]) && (isWidthNumber || strokeArrayWidth[2])) {\n // context.lineTo(x, y + height);\n if (isPart && Array.isArray(part[2])) {\n context.moveTo(x + width * part[2][0], y + height);\n context.lineTo(x + width * (part[2][1] - part[2][0]), y + height);\n context.moveTo(x, y + height);\n } else {\n context.moveTo(x, y + height);\n context.lineTo(x + width, y + height);\n }\n if ((isSplitDraw || isDash) && (!strokeArrayColor || strokeArrayColor[2])) {\n if (strokeArrayColor) {\n context.strokeStyle = strokeArrayColor[2];\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[2];\n }\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n context.stroke();\n context.beginPath();\n context.moveTo(x, y + height);\n }\n } else {\n context.moveTo(x, y + height);\n }\n // left\n if ((isStrokeTrue || stroke[3]) && (isWidthNumber || strokeArrayWidth[3])) {\n // context.lineTo(x, y);\n if (isPart && Array.isArray(part[3])) {\n context.moveTo(x, y + height * part[3][0]);\n context.lineTo(x, y + height * (part[3][1] - part[3][0]));\n context.moveTo(x, y);\n } else {\n context.moveTo(x, y);\n context.lineTo(x, y + height);\n }\n if ((isSplitDraw || isDash) && (!strokeArrayColor || strokeArrayColor[3])) {\n if (strokeArrayColor) {\n context.strokeStyle = strokeArrayColor[3];\n }\n if (!isWidthNumber) {\n context.lineWidth = strokeArrayWidth[3];\n }\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n context.stroke();\n context.beginPath();\n context.moveTo(x, y);\n }\n } else {\n context.moveTo(x, y);\n }\n\n if (!isSplitDraw && !isDash) {\n // context.strokeStyle = strokeArrayColor;\n if (!isWidthNumber && widthInfo.width) {\n context.lineWidth = widthInfo.width;\n }\n context.stroke();\n }\n}\n\n// DashGroupContribution处理虚线边框对齐\n// lineDash 为非空数组时调用\n@injectable()\nexport class DashGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n lineDash = groupAttribute.lineDash,\n stroke = groupAttribute.stroke,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth\n } = group.attribute as any;\n\n if (\n stroke &&\n Array.isArray(lineDash) &&\n lineDash.length &&\n !Array.isArray(strokeArrayColor) &&\n !Array.isArray(strokeArrayWidth)\n ) {\n doFillOrStroke.doStroke = false;\n }\n }\n}\n@injectable()\nexport class DashGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const {\n lineDash = groupAttribute.lineDash,\n stroke = groupAttribute.stroke,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n lineWidth = groupAttribute.lineWidth\n } = group.attribute as any;\n\n if (\n !stroke ||\n !(Array.isArray(lineDash) && lineDash.length) ||\n Array.isArray(strokeArrayColor) ||\n Array.isArray(strokeArrayWidth)\n ) {\n return;\n }\n\n // const { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n let { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n width = Math.ceil(width);\n height = Math.ceil(height);\n\n let widthForStroke;\n let heightForStroke;\n if (lineWidth & 1) {\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n\n const { width: widthFroDraw, height: heightFroDraw } = getCellSizeForDraw(\n group,\n Math.ceil(width),\n Math.ceil(height)\n );\n widthForStroke = widthFroDraw;\n heightForStroke = heightFroDraw;\n } else {\n widthForStroke = Math.ceil(width);\n heightForStroke = Math.ceil(height);\n }\n context.setStrokeStyle(group, group.attribute, x, y, groupAttribute);\n // 分段设置lineDashOffset,实现虚线边框对齐\n // top\n context.beginPath();\n context.moveTo(x, y);\n context.lineTo(x + widthForStroke, y);\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n context.stroke();\n\n // right\n context.beginPath();\n context.moveTo(x + widthForStroke, y);\n context.lineTo(x + widthForStroke, y + heightForStroke);\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n context.stroke();\n\n // bottom\n context.beginPath();\n context.moveTo(x, y + heightForStroke);\n context.lineTo(x + widthForStroke, y + heightForStroke);\n context.lineDashOffset = context.currentMatrix.e / context.currentMatrix.a;\n context.stroke();\n\n // left\n context.beginPath();\n context.moveTo(x, y);\n context.lineTo(x, y + heightForStroke);\n context.lineDashOffset = context.currentMatrix.f / context.currentMatrix.d;\n context.stroke();\n }\n}\n\n// AdjustPosGroupContribution处理线宽为奇数时stroke位置偏移0.5px\n// lineWidth 为奇数时调用\n@injectable()\nexport class AdjustPosGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const {\n lineWidth = groupAttribute.lineWidth,\n stroke = groupAttribute.stroke,\n lineDash = groupAttribute.lineDash,\n // width = groupAttribute.width,\n // height = groupAttribute.height,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n notAdjustPos\n } = group.attribute as any;\n\n if (\n notAdjustPos !== true && // 不需要调整位置\n stroke &&\n Array.isArray(lineDash) &&\n !lineDash.length && // 非虚线\n !Array.isArray(strokeArrayColor) &&\n !Array.isArray(strokeArrayWidth) &&\n lineWidth & 1 // 奇数线宽\n ) {\n doFillOrStroke.doStroke = false;\n }\n }\n}\n\n@injectable()\nexport class AdjustPosGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const {\n lineWidth = groupAttribute.lineWidth,\n stroke = groupAttribute.stroke,\n lineDash = groupAttribute.lineDash,\n strokeArrayWidth = (groupAttribute as any).strokeArrayWidth,\n strokeArrayColor = (groupAttribute as any).strokeArrayColor,\n notAdjustPos,\n cornerRadius = groupAttribute.cornerRadius\n } = group.attribute as any;\n\n const { width = groupAttribute.width, height = groupAttribute.height } = group.attribute;\n // width = Math.ceil(width);\n // height = Math.ceil(height);\n\n if (\n notAdjustPos !== true && // 不需要调整位置\n stroke &&\n Array.isArray(lineDash) &&\n !lineDash.length && // 非虚线\n !Array.isArray(strokeArrayColor) &&\n !Array.isArray(strokeArrayWidth) &&\n lineWidth & 1 // 奇数线宽\n ) {\n // if (group.role === 'cell') {\n // const table = (group.stage as any).table as BaseTableAPI;\n // let col = (group as any).col as number;\n // let row = (group as any).row as number;\n // const mergeInfo = getCellMergeInfo(table, col, row);\n // if (mergeInfo) {\n // col = mergeInfo.end.col;\n // row = mergeInfo.end.row;\n // }\n\n // if (table && col === table.colCount - 1) {\n // width -= 1;\n // } else if (table && col === table.frozenColCount - 1 && table.scrollLeft) {\n // width -= 1;\n // }\n // if (table && row === table.rowCount - 1) {\n // height -= 1;\n // } else if (table && row === table.frozenRowCount - 1 && table.scrollTop) {\n // height -= 1;\n // }\n // }\n const { width: widthFroDraw, height: heightFroDraw } = getCellSizeForDraw(\n group,\n Math.ceil(width),\n Math.ceil(height)\n );\n context.beginPath();\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n if (cornerRadius) {\n // 测试后,cache对于重绘性能提升不大,但是在首屏有一定性能损耗,因此rect不再使用cache\n createRectPath(context, x, y, widthFroDraw, heightFroDraw, cornerRadius);\n } else {\n context.rect(x, y, widthFroDraw, heightFroDraw);\n }\n context.setStrokeStyle(group, group.attribute, x, y, groupAttribute);\n context.stroke();\n }\n }\n}\n\n@injectable()\nexport class AdjustColorGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n // 处理hover颜色\n if ((group as Group).role === 'cell') {\n const table = (group.stage as any).table as BaseTableAPI;\n if (table.stateManager.interactionState !== InteractionState.scrolling) {\n const hoverColor = getCellHoverColor(group as Group, table);\n if (hoverColor) {\n (group.attribute as any)._vtableHoverFill = hoverColor;\n }\n }\n }\n }\n}\n\n@injectable()\nexport class AdjustColorGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // 处理hover颜色\n if ((group.attribute as any)._vtableHoverFill) {\n if (fillCb) {\n // do nothing\n // fillCb(context, group.attribute, groupAttribute);\n } else if (fVisible) {\n const oldColor = group.attribute.fill;\n // draw hover fill\n group.attribute.fill = (group.attribute as any)._vtableHoverFill as any;\n context.setCommonStyle(group, group.attribute, x, y, groupAttribute);\n context.fill();\n group.attribute.fill = oldColor;\n (group.attribute as any)._vtableHoverFill = undefined;\n }\n }\n }\n}\n\n@injectable()\nexport class ClipBodyGroupBeforeRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n const table = (group.stage as any).table as BaseTableAPI;\n if ((group as Group).role === 'body') {\n const x = -(group.attribute.x ?? 0) + table.getFrozenColsWidth();\n const y = -(group.attribute.y ?? 0) + table.getFrozenRowsHeight();\n const width = group.parent.attribute.width - table.getFrozenColsWidth() - table.getRightFrozenColsWidth();\n const height = group.parent.attribute.height - table.getFrozenRowsHeight() - table.getBottomFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'row-header') {\n const x = 0;\n const y = -(group.attribute.y ?? 0) + table.getFrozenRowsHeight();\n const width = table.getFrozenColsWidth();\n const height = group.parent.attribute.height - table.getFrozenRowsHeight() - table.getBottomFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'col-header') {\n const x = -(group.attribute.x ?? 0) + table.getFrozenColsWidth();\n const y = 0;\n const width = group.parent.attribute.width - table.getFrozenColsWidth() - table.getRightFrozenColsWidth();\n const height = table.getFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'right-frozen') {\n const x = 0;\n const y = -(group.attribute.y ?? 0) + table.getFrozenRowsHeight();\n const width = table.getRightFrozenColsWidth();\n const height = group.parent.attribute.height - table.getFrozenRowsHeight() - table.getBottomFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'bottom-frozen') {\n const x = -(group.attribute.x ?? 0) + table.getFrozenColsWidth();\n const y = 0;\n const width = group.parent.attribute.width - table.getFrozenColsWidth() - table.getRightFrozenColsWidth();\n const height = table.getBottomFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'corner-header') {\n const x = 0;\n const y = 0;\n const width = table.getFrozenColsWidth();\n const height = table.getFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'corner-right-top-header') {\n const x = 0;\n const y = 0;\n const width = table.getRightFrozenColsWidth();\n const height = table.getFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'corner-right-bottom-header') {\n const x = 0;\n const y = 0;\n const width = table.getRightFrozenColsWidth();\n const height = table.getBottomFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n } else if ((group as Group).role === 'corner-left-bottom-header') {\n const x = 0;\n const y = 0;\n const width = table.getFrozenColsWidth();\n const height = table.getBottomFrozenRowsHeight();\n context.beginPath();\n context.rect(x, y, width, height);\n }\n }\n}\n@injectable()\nexport class ClipBodyGroupAfterRenderContribution implements IGroupRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle = true;\n order = 0;\n drawShape(\n group: IGroup,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n groupAttribute: Required<IGroupGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // 处理hover颜色\n if ((group as Group).role === 'body') {\n }\n }\n}\n\nfunction getCellSizeForDraw(group: any, width: number, height: number) {\n const table = group.stage.table as BaseTableAPI;\n if (group.role === 'cell') {\n let col = group.col as number;\n let row = group.row as number;\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo) {\n col = mergeInfo.end.col;\n row = mergeInfo.end.row;\n }\n\n if (table && col === table.colCount - 1) {\n width -= 1;\n } else if (table && col === table.frozenColCount - 1 && table.scrollLeft) {\n width -= 1;\n }\n if (table && row === table.rowCount - 1) {\n height -= 1;\n } else if (table && row === table.frozenRowCount - 1 && table.scrollTop) {\n height -= 1;\n }\n } else if (group.role === 'corner-frozen') {\n if (table.scrollLeft) {\n width -= 1;\n }\n if (table.scrollTop) {\n height -= 1;\n }\n }\n return { width, height };\n}\n"]}
|
|
@@ -28,7 +28,7 @@ let SplitRectAfterRenderContribution = class {
|
|
|
28
28
|
}
|
|
29
29
|
drawShape(rect, context, x, y, doFill, doStroke, fVisible, sVisible, rectAttribute, drawContext, fillCb, strokeCb) {
|
|
30
30
|
const {width: width = rectAttribute.width, height: height = rectAttribute.height, stroke: stroke = rectAttribute.stroke, strokeArrayColor: strokeArrayColor = rectAttribute.strokeArrayColor, strokeArrayWidth: strokeArrayWidth = rectAttribute.strokeArrayWidth, lineWidth: lineWidth = rectAttribute.lineWidth, strokeColor: strokeColor = rectAttribute.stroke} = rect.attribute;
|
|
31
|
-
stroke && (Array.isArray(strokeArrayWidth) || 0 !== lineWidth) && (Array.isArray(stroke) || Array.isArray(strokeArrayColor) || Array.isArray(strokeArrayWidth)) && (("number" == typeof lineWidth && 1 & lineWidth || Array.isArray(strokeArrayWidth) && strokeArrayWidth.some((width => 1 & width))) && (x = Math.floor(x) + .5,
|
|
31
|
+
stroke && (Array.isArray(strokeArrayWidth) || 0 !== lineWidth) && (Array.isArray(stroke) || Array.isArray(strokeArrayColor) || Array.isArray(strokeArrayWidth)) && ("border-rect" !== rect.name && "table-border-rect" !== rect.name && ("number" == typeof lineWidth && 1 & lineWidth || Array.isArray(strokeArrayWidth) && strokeArrayWidth.some((width => 1 & width))) && (x = Math.floor(x) + .5,
|
|
32
32
|
y = Math.floor(y) + .5), renderStroke(rect, context, x, y, rectAttribute, stroke, strokeArrayWidth || lineWidth, strokeArrayColor || strokeColor, Math.ceil(width), Math.ceil(height)));
|
|
33
33
|
}
|
|
34
34
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/scenegraph/graphic/contributions/rect-contribution-render.ts"],"names":[],"mappings":";;;;;;AAYA,OAAO,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGpD,IAAM,iCAAiC,GAAvC,MAAM,iCAAiC;IAAvC;QACL,SAAI,GAA+B,0BAA0B,CAAC,gBAAgB,CAAC;QAC/E,aAAQ,GAAY,IAAI,CAAC;QACzB,UAAK,GAAW,CAAC,CAAC;IAwCpB,CAAC;IAvCC,SAAS,CACP,IAAW,EACX,OAAmB,EACnB,CAAS,EACT,CAAS,EACT,MAAe,EACf,QAAiB,EACjB,QAAiB,EACjB,QAAiB,EACjB,aAA8C,EAC9C,WAAyB,EACzB,MAIY,EACZ,QAIY,EACZ,cAAuD;QAQvD,MAAM,EACJ,MAAM,GAAG,aAAa,CAAC,MAAM,EAC7B,gBAAgB,GAAI,aAAqB,CAAC,gBAAgB,EAC1D,gBAAgB,GAAI,aAAqB,CAAC,gBAAgB,EAC3D,GAAG,IAAI,CAAC,SAAgB,CAAC;QAE1B,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE;YAC3G,cAAc,CAAC,QAAQ,GAAG,KAAK,CAAC;SACjC;IACH,CAAC;CACF,CAAA;AA3CY,iCAAiC;IAD7C,UAAU,EAAE;GACA,iCAAiC,CA2C7C;SA3CY,iCAAiC;AA8CvC,IAAM,gCAAgC,GAAtC,MAAM,gCAAgC;IAAtC;QACL,SAAI,GAA+B,0BAA0B,CAAC,eAAe,CAAC;QAC9E,aAAQ,GAAY,IAAI,CAAC;QACzB,UAAK,GAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/scenegraph/graphic/contributions/rect-contribution-render.ts"],"names":[],"mappings":"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","file":"rect-contribution-render.js","sourcesContent":["import type {\n IRect,\n IContext2d,\n IRectGraphicAttribute,\n IMarkAttribute,\n IGraphicAttribute,\n IThemeAttribute,\n IRectRenderContribution,\n IGroup,\n IGroupGraphicAttribute,\n IDrawContext\n} from '@visactor/vrender';\nimport { BaseRenderContributionTime, injectable } from '@visactor/vrender';\nimport { renderStroke } from './group-contribution-render';\n\n@injectable()\nexport class SplitRectBeforeRenderContribution implements IRectRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.beforeFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n rectAttribute: Required<IRectGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n doFillOrStroke?: { doFill: boolean; doStroke: boolean }\n ) {\n // const { stroke = rectAttribute.stroke } = group.attribute as any;\n\n // if (Array.isArray(stroke)) {\n // doFillOrStroke.doStroke = false;\n // }\n\n const {\n stroke = rectAttribute.stroke,\n strokeArrayWidth = (rectAttribute as any).strokeArrayWidth,\n strokeArrayColor = (rectAttribute as any).strokeArrayColor\n } = rect.attribute as any;\n\n if (stroke && (Array.isArray(stroke) || Array.isArray(strokeArrayWidth) || Array.isArray(strokeArrayColor))) {\n doFillOrStroke.doStroke = false;\n }\n }\n}\n\n@injectable()\nexport class SplitRectAfterRenderContribution implements IRectRenderContribution {\n time: BaseRenderContributionTime = BaseRenderContributionTime.afterFillStroke;\n useStyle: boolean = true;\n order: number = 0;\n drawShape(\n rect: IRect,\n context: IContext2d,\n x: number,\n y: number,\n doFill: boolean,\n doStroke: boolean,\n fVisible: boolean,\n sVisible: boolean,\n rectAttribute: Required<IRectGraphicAttribute>,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n // const {\n // width = rectAttribute.width,\n // height = rectAttribute.height,\n // stroke = rectAttribute.stroke\n // } = group.attribute as any;\n\n // if (!Array.isArray(stroke)) {\n // return;\n // }\n\n // context.setStrokeStyle(group, group.attribute, x, y, rectAttribute);\n // // 单独处理每条边界,目前不考虑圆角\n // context.beginPath();\n // context.moveTo(x, y);\n // // top\n // if (stroke[0]) {\n // context.lineTo(x + width, y);\n // } else {\n // context.moveTo(x + width, y);\n // }\n // // right\n // if (stroke[1]) {\n // context.lineTo(x + width, y + height);\n // } else {\n // context.moveTo(x + width, y + height);\n // }\n // // bottom\n // if (stroke[2]) {\n // context.lineTo(x, y + height);\n // } else {\n // context.moveTo(x, y + height);\n // }\n // // left\n // if (stroke[3]) {\n // // 没有close path是,起点和终点不连续,需要调整y保证不出现缺口\n // const adjustY = stroke[0] ? y - context.lineWidth / 2 : y;\n // context.lineTo(x, adjustY);\n // } else {\n // context.moveTo(x, y);\n // }\n\n // context.stroke();\n\n const {\n width = rectAttribute.width,\n height = rectAttribute.height,\n // 基础border\n stroke = rectAttribute.stroke,\n strokeArrayColor = (rectAttribute as any).strokeArrayColor,\n strokeArrayWidth = (rectAttribute as any).strokeArrayWidth,\n\n lineWidth = rectAttribute.lineWidth,\n strokeColor = rectAttribute.stroke\n // // select & hover border\n // highlightStroke = (rectAttribute as any).highlightStroke,\n // highlightStrokeArrayColor = (rectAttribute as any).highlightStrokeArrayColor,\n // highlightStrokeArrayWidth = (rectAttribute as any).highlightStrokeArrayWidth,\n // highlightStrokeArrayPart = (rectAttribute as any).highlightStrokeArrayPart,\n } = rect.attribute as any;\n\n if (!stroke || (!Array.isArray(strokeArrayWidth) && lineWidth === 0)) {\n return;\n }\n\n if (Array.isArray(stroke) || Array.isArray(strokeArrayColor) || Array.isArray(strokeArrayWidth)) {\n // let dx = 0;\n // let dy = 0;\n if (\n rect.name !== 'border-rect' && // border-rect not need offset\n rect.name !== 'table-border-rect' && // table-border-rect not need offset\n ((typeof lineWidth === 'number' && lineWidth & 1) ||\n (Array.isArray(strokeArrayWidth) && strokeArrayWidth.some(width => width & 1)))\n ) {\n x = Math.floor(x) + 0.5;\n y = Math.floor(y) + 0.5;\n }\n renderStroke(\n rect as IGroup,\n context,\n x,\n y,\n rectAttribute,\n stroke,\n strokeArrayWidth || lineWidth,\n strokeArrayColor || strokeColor,\n Math.ceil(width),\n Math.ceil(height)\n );\n }\n }\n}\n\n// 判断是否为整数,如果是整数,需要偏移0.5px\nfunction isInteger(num: number) {\n return num % 1 === 0;\n}\n"]}
|