@visactor/vtable 1.22.11-alpha.10 → 1.22.11-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/cjs/PivotChart.js.map +1 -1
  2. package/cjs/core/BaseTable.js +1 -1
  3. package/cjs/core/BaseTable.js.map +1 -1
  4. package/cjs/core/style-helper.js +1 -2
  5. package/cjs/dataset/dataset-pivot-table.js +2 -1
  6. package/cjs/event/listener/table-group.js.map +1 -1
  7. package/cjs/index.d.ts +1 -1
  8. package/cjs/index.js +1 -1
  9. package/cjs/index.js.map +1 -1
  10. package/cjs/layout/index.js +1 -2
  11. package/cjs/layout/layout-helper.js +1 -1
  12. package/cjs/layout/pivot-header-layout.js +4 -3
  13. package/cjs/layout/pivot-header-layout.js.map +1 -1
  14. package/cjs/layout/row-height-map.js +1 -1
  15. package/cjs/layout/simple-header-layout.js +1 -1
  16. package/cjs/layout/tree-helper.js +1 -1
  17. package/cjs/plugins/custom-cell-style.js +2 -1
  18. package/cjs/plugins/interface.js +1 -1
  19. package/cjs/plugins/invert-highlight.js +1 -1
  20. package/cjs/plugins/list-tree-stick-cell.js +1 -1
  21. package/cjs/plugins/plugin-manager.js +1 -1
  22. package/cjs/scenegraph/graphic/active-cell-chart-list.d.ts +5 -1
  23. package/cjs/scenegraph/graphic/active-cell-chart-list.js +45 -12
  24. package/cjs/scenegraph/graphic/active-cell-chart-list.js.map +1 -1
  25. package/cjs/scenegraph/graphic/chart.js +4 -3
  26. package/cjs/scenegraph/graphic/chart.js.map +1 -1
  27. package/cjs/scenegraph/scenegraph.js +7 -16
  28. package/cjs/scenegraph/scenegraph.js.map +1 -1
  29. package/cjs/state/state.js +1 -1
  30. package/cjs/vrender.js.map +1 -1
  31. package/dist/vtable.js +62 -24
  32. package/dist/vtable.min.js +1 -1
  33. package/es/PivotChart.js.map +1 -1
  34. package/es/core/BaseTable.js +1 -1
  35. package/es/core/BaseTable.js.map +1 -1
  36. package/es/core/style-helper.js +1 -2
  37. package/es/dataset/dataset-pivot-table.js +2 -1
  38. package/es/event/listener/table-group.js.map +1 -1
  39. package/es/index.d.ts +1 -1
  40. package/es/index.js +1 -1
  41. package/es/index.js.map +1 -1
  42. package/es/layout/index.js +1 -2
  43. package/es/layout/layout-helper.js +1 -1
  44. package/es/layout/pivot-header-layout.js +4 -2
  45. package/es/layout/pivot-header-layout.js.map +1 -1
  46. package/es/layout/row-height-map.js +1 -1
  47. package/es/layout/simple-header-layout.js +1 -1
  48. package/es/layout/tree-helper.js +1 -1
  49. package/es/plugins/custom-cell-style.js +2 -1
  50. package/es/plugins/interface.js +1 -1
  51. package/es/plugins/invert-highlight.js +1 -1
  52. package/es/plugins/list-tree-stick-cell.js +1 -1
  53. package/es/plugins/plugin-manager.js +1 -1
  54. package/es/scenegraph/graphic/active-cell-chart-list.d.ts +5 -1
  55. package/es/scenegraph/graphic/active-cell-chart-list.js +40 -10
  56. package/es/scenegraph/graphic/active-cell-chart-list.js.map +1 -1
  57. package/es/scenegraph/graphic/chart.js +4 -4
  58. package/es/scenegraph/graphic/chart.js.map +1 -1
  59. package/es/scenegraph/scenegraph.js +8 -17
  60. package/es/scenegraph/scenegraph.js.map +1 -1
  61. package/es/state/state.js +1 -1
  62. package/es/vrender.js.map +1 -1
  63. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scenegraph/scenegraph.ts"],"names":[],"mappings":"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","file":"scenegraph.js","sourcesContent":["import type { IStage, IRect, ITextCache, INode, Text, RichText, Stage, IRectGraphicAttribute } from './../vrender';\nimport { createStage, createRect, IContainPointMode, container, vglobal, registerForVrender } from './../vrender';\nimport type { CellRange, CellSubLocation, PivotChartConstructorOptions } from '../ts-types';\nimport {\n type CellAddress,\n type CellLocation,\n type ColumnIconOption,\n type SortOrder,\n IconFuncTypeEnum,\n InternalIconName\n} from '../ts-types';\nimport { isArray, isString, isValid } from '@visactor/vutils';\nimport type { Group } from './graphic/group';\nimport type { Icon } from './graphic/icon';\nimport { getCellMergeInfo } from './utils/get-cell-merge';\nimport { updateColWidth } from './layout/update-width';\nimport { TableComponent } from './component/table-component';\nimport { updateRowHeight } from './layout/update-height';\nimport { updateImageCellContentWhileResize } from './group-creater/cell-type/image-cell';\nimport { getQuadProps } from './utils/padding';\nimport { createFrameBorder, updateCornerRadius, updateFrameBorder, updateFrameBorderSize } from './style/frame-border';\nimport splitModule from './graphic/contributions';\nimport { getFunctionalProp, getProp } from './utils/get-prop';\nimport { dealWithIcon } from './utils/text-icon-layout';\nimport { SceneProxy } from './group-creater/progress/proxy';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport { computeColWidth, computeColsWidth, getAdaptiveWidth } from './layout/compute-col-width';\nimport { moveHeaderPosition } from './layout/move-cell';\nimport { updateCell } from './group-creater/cell-helper';\nimport type { BaseTableAPI, HeaderData } from '../ts-types/base-table';\nimport { updateAllSelectComponent, updateCellSelectBorder } from './select/update-select-border';\nimport { createCellSelectBorder } from './select/create-select-border';\nimport { moveSelectingRangeComponentsToSelectedRangeComponents } from './select/move-select-border';\nimport {\n deleteAllSelectBorder,\n deleteAllSelectingBorder,\n deleteLastSelectedRangeComponents,\n removeFillHandleFromSelectComponents\n} from './select/delete-select-border';\nimport { updateRow } from './layout/update-row';\nimport { handleTextStick } from './stick-text';\nimport { computeRowHeight, computeRowsHeight } from './layout/compute-row-height';\nimport { emptyGroup } from './utils/empty-group';\nimport { dealBottomFrozen, dealFrozen, dealRightFrozen, resetFrozen, resetRowFrozen } from './layout/frozen';\nimport {\n clearCellChartCacheImage,\n updateChartSizeForResizeColWidth,\n updateChartSizeForResizeRowHeight,\n updateChartState\n} from './refresh-node/update-chart';\nimport { initSceneGraph } from './group-creater/init-scenegraph';\nimport { updateContainerChildrenX, updateContainerChildrenY } from './utils/update-container';\nimport type { CheckBox } from './../vrender';\nimport { loadPoptip, setPoptipTheme } from './../vrender';\nimport textMeasureModule from './utils/text-measure';\nimport {\n getIconByXY,\n hideClickIcon,\n hideHoverIcon,\n resetResidentHoverIcon,\n residentHoverIcon,\n setIconHoverStyle,\n setIconNormalStyle,\n showClickIcon,\n showHoverIcon,\n updateFrozenIcon,\n updateHierarchyIcon,\n updateSortIcon\n} from './icon/icon-update';\nimport { Env } from '../tools/env';\nimport { createCornerCell } from './style/corner-cell';\nimport { updateCol } from './layout/update-col';\nimport { deduplication } from '../tools/util';\nimport { getDefaultHeight, getDefaultWidth } from './group-creater/progress/default-width-height';\nimport { dealWithAnimationAppear } from './animation/appear';\nimport { updateReactContainer } from './layout/frozen-react';\n\nimport * as registerIcons from '../icons';\nimport { temporarilyUpdateSelectRectStyle } from './select/update-select-style';\nimport type { CheckboxContent } from './component/checkbox-content';\n// import { contextModule } from './context/module';\n\nimport type { FederatedPointerEvent } from './../vrender';\nimport { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport { getCellEventArgsSet } from '../event/util';\nimport type { SceneEvent } from '../event/util';\nimport type { Chart } from './graphic/chart';\nimport {\n clearBrushingChartInstance,\n getBrushingChartInstance,\n getBrushingChartInstanceCellPos\n} from './graphic/active-cell-chart-list';\n\nregisterForVrender();\n\n// VChart poptip theme\n// loadPoptip();\ncontainer.load(splitModule);\ncontainer.load(textMeasureModule);\n// container.load(renderServiceModule);\n// container.load(contextModule);\n// console.log(container);\n\nexport type MergeMap = Map<\n string,\n {\n cellWidth: number;\n cellHeight: number;\n }\n>;\n\n/**\n * @description: 表格场景树,存储和管理表格全部的场景图元\n * @return {*}\n */\nexport class Scenegraph {\n proxy: SceneProxy;\n tableGroup: Group; // 表格全局Group\n colHeaderGroup: Group; // 列表头Group\n cornerHeaderGroup: Group; // 列表头冻结列Group\n rowHeaderGroup: Group; // 行表头Group\n bodyGroup: Group; // 内容Group\n rightFrozenGroup: Group; // 右侧冻结列Group\n bottomFrozenGroup: Group; // 下侧冻结行Group\n rightTopCornerGroup: Group; // 右上角占位单元格Group,只在有右侧冻结列时使用\n leftBottomCornerGroup: Group; // 左下角占位单元格Group,只在有下侧冻结行时使用\n rightBottomCornerGroup: Group; // 右下角占位单元格Group,只在有右侧下侧都有冻结行时使用\n componentGroup: Group; // 表格外组件Group\n /** 所有选中区域对应的选框组件 */\n selectedRangeComponents: Map<string, { rect: IRect; fillhandle?: IRect; role: CellSubLocation }>;\n /** 当前正在选择区域对应的选框组件 为什么是map 以为可能一个选中区域会被拆分为多个rect组件 三块表头和body都分别对应不同组件*/\n selectingRangeComponents: Map<string, { rect: IRect; fillhandle?: IRect; role: CellSubLocation }>;\n customSelectedRangeComponents: Map<string, { rect: IRect; role: CellSubLocation }>;\n lastSelectId: string;\n component: TableComponent;\n stage: IStage;\n table: BaseTableAPI;\n isPivot: boolean;\n // transpose: boolean;\n hasFrozen: boolean; // 是否已经处理冻结列,用在getCell判断是否从cornerHeaderGroup获取cellGroup\n frozenColCount: number; // 冻结列数\n frozenRowCount: number; // 冻结行数\n clear: boolean;\n\n mergeMap: MergeMap;\n _dealAutoFillHeightOriginRowsHeight: number; // hack 缓存一个值 用于处理autoFillHeight的逻辑判断 在某些情况下是需要更新此值的 如增删数据 但目前没有做这个\n\n _needUpdateContainer: boolean = false;\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.hasFrozen = false;\n this.clear = true;\n this.mergeMap = new Map();\n\n setPoptipTheme(this.table.theme.textPopTipStyle);\n let width;\n let height;\n if (Env.mode === 'node') {\n vglobal.setEnv('node', table.options.modeParams);\n width = table.canvasWidth;\n height = table.canvasHeight;\n } else if (table.options.canvas && table.options.viewBox) {\n vglobal.setEnv('browser');\n width = table.options.viewBox.x2 - table.options.viewBox.x1;\n height = table.options.viewBox.y2 - table.options.viewBox.y1;\n } else {\n vglobal.setEnv('browser');\n width = table.canvas.width;\n height = table.canvas.height;\n }\n this.stage = createStage({\n canvas: table.canvas,\n width,\n height,\n disableDirtyBounds: false,\n background: table.theme.underlayBackgroundColor,\n dpr: table.internalProps.pixelRatio,\n enableLayout: true,\n // enableHtmlAttribute: true,\n // pluginList: table.isPivotChart() ? ['poptipForText'] : undefined,\n beforeRender: (stage: Stage) => {\n this.table.options.beforeRender && this.table.options.beforeRender(stage);\n this.table.animationManager.ticker.start();\n },\n afterRender: (stage: Stage) => {\n this.table.options.afterRender && this.table.options.afterRender(stage);\n this.table.fireListeners('after_render', null);\n // console.trace('after_render');\n },\n // event: { clickInterval: 400 }\n // autoRender: true\n\n canvasControled: !table.options.canvas,\n viewBox: table.options.viewBox,\n ...table.options.renderOption\n });\n\n this.stage.defaultLayer.setTheme({\n group: {\n boundsPadding: 0,\n strokeBoundsBuffer: 0,\n lineJoin: 'round'\n },\n text: {\n ignoreBuf: true\n }\n });\n this.initSceneGraph();\n this.stage.defaultLayer.add(this.tableGroup);\n\n (this.stage as any).table = this.table;\n\n this.createComponent();\n }\n\n get width(): number {\n return this.tableGroup.attribute?.width ?? 0;\n }\n\n get height(): number {\n return this.tableGroup.attribute?.height ?? 0;\n }\n\n get x(): number {\n return this.tableGroup.attribute?.x ?? 0;\n }\n\n get y(): number {\n return this.tableGroup.attribute?.y ?? 0;\n }\n\n get bodyRowStart(): number {\n return this.proxy.rowStart ?? 0;\n }\n\n get bodyRowEnd(): number {\n return this.proxy.rowEnd ?? this.table.rowCount - 1;\n }\n\n get bodyColStart(): number {\n return this.proxy.colStart ?? 0;\n }\n\n get bodyColEnd(): number {\n return this.proxy.colEnd ?? this.table.colCount - 1;\n }\n\n /**\n * @description: 初始化场景树结构\n * @return {*}\n */\n initSceneGraph() {\n this.isPivot = this.table.isPivotTable();\n // (this.table as any).transpose = (this.table.options as any).transpose; // 初始化时this.table.transpose还未赋值\n initSceneGraph(this);\n }\n\n /**\n * @description: 表格空数据或者少数据,在画布右键显示menu。col/row = -1 表示没有选中表格中的单元格\n * @return {*}\n */\n canvasShowMenu() {\n this.stage.addEventListener('rightdown', (e: FederatedPointerEvent) => {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (!eventArgsSet.eventArgs) {\n this.table.stateManager.triggerContextMenu(-1, -1, eventArgsSet.abstractPos.x, eventArgsSet.abstractPos.y);\n this.table.fireListeners(TABLE_EVENT_TYPE.CONTEXTMENU_CANVAS, {\n event: e,\n x: eventArgsSet.abstractPos.x,\n y: eventArgsSet.abstractPos.y,\n col: -1,\n row: -1,\n target: undefined\n });\n }\n });\n }\n\n /**\n * @description: 清空全部单元格内容,用于setRecord\n * @return {*}\n */\n clearCells() {\n this.table.animationManager.clear();\n // unbind AutoPoptip\n if (this.table.isPivotChart() || this.table._hasCustomRenderOrLayout()) {\n // bind for axis label in pivotChart\n this.stage.pluginService.findPluginsByName('poptipForText').forEach(plugin => {\n plugin.deactivate(this.stage.pluginService);\n });\n }\n\n this.clear = true;\n this.hasFrozen = false;\n this.mergeMap.clear();\n\n this.colHeaderGroup.clear();\n delete this.colHeaderGroup.border;\n this.rowHeaderGroup.clear();\n delete this.rowHeaderGroup.border;\n this.cornerHeaderGroup.clear();\n delete this.cornerHeaderGroup.border;\n this.bodyGroup.clear();\n delete this.bodyGroup.border;\n\n this.bottomFrozenGroup.clear();\n delete this.bottomFrozenGroup.border;\n this.rightFrozenGroup.clear();\n delete this.rightFrozenGroup.border;\n this.rightTopCornerGroup.clear();\n delete this.rightTopCornerGroup.border;\n this.rightBottomCornerGroup.clear();\n delete this.rightBottomCornerGroup.border;\n this.leftBottomCornerGroup.clear();\n delete this.leftBottomCornerGroup.border;\n\n this.colHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rowHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.cornerHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.bodyGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rightFrozenGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.bottomFrozenGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rightTopCornerGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false\n });\n this.leftBottomCornerGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false\n });\n this.rightBottomCornerGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false\n });\n\n this.tableGroup.setAttributes({\n x: this.table.tableX,\n y: this.table.tableY,\n width: 0,\n height: 0\n } as any);\n\n if ((this.tableGroup as any).border) {\n (this.tableGroup.parent as Group).removeChild((this.tableGroup as any).border);\n delete (this.tableGroup as any).border;\n }\n this.proxy?.release();\n\n this.table.reactCustomLayout?.clearCache();\n }\n\n updateStageBackground() {\n this.stage.background = this.table.theme.underlayBackgroundColor;\n this.stage.renderNextFrame();\n }\n\n /**\n * @description: 初始化表格外组件\n * @return {*}\n */\n createComponent() {\n this.component = new TableComponent(this.table);\n this.component.addToGroup(this.componentGroup);\n this.selectedRangeComponents = new Map();\n this.selectingRangeComponents = new Map();\n this.customSelectedRangeComponents = new Map();\n }\n\n updateComponent() {\n this.component.updateStyle();\n }\n\n /**\n * @description: 依据数据创建表格场景树\n * @return {*}\n */\n createSceneGraph(skipRowHeightClear = false) {\n if (!skipRowHeightClear) {\n this.table.rowHeightsMap.clear();\n this.table.internalProps.layoutMap.clearCellRangeMap();\n }\n\n // bind AutoPoptip\n if (this.table.isPivotChart() || this.table._hasCustomRenderOrLayout()) {\n // bind for axis label in pivotChart\n (this.stage.pluginService as any).autoEnablePlugins.getContributions().forEach((p: any) => {\n if (p.name === 'poptipForText') {\n this.stage.pluginService.register(p);\n }\n });\n }\n\n this.clear = false;\n // this.frozenColCount = this.table.rowHeaderLevelCount;\n this.frozenColCount = this.table.frozenColCount;\n this.frozenRowCount = this.table.frozenRowCount;\n\n this.proxy = new SceneProxy(this.table);\n\n // update table group position for cell group global position, not create border yet.\n createFrameBorder(this.tableGroup, this.table.theme.frameStyle, this.tableGroup.role, undefined, true);\n\n if (this.table.isPivotChart()) {\n createCornerCell(\n this.rightTopCornerGroup,\n this.table.theme.cornerRightTopCellStyle || this.table.theme.cornerHeaderStyle || {}\n );\n createCornerCell(\n this.leftBottomCornerGroup,\n this.table.theme.cornerLeftBottomCellStyle || this.table.theme.cornerHeaderStyle || {}\n );\n createCornerCell(\n this.rightBottomCornerGroup,\n this.table.theme.cornerRightBottomCellStyle || this.table.theme.cornerHeaderStyle || {}\n );\n }\n\n this.proxy.createGroupForFirstScreen(\n this.cornerHeaderGroup,\n this.colHeaderGroup,\n this.rowHeaderGroup,\n this.rightFrozenGroup,\n this.bottomFrozenGroup,\n this.bodyGroup,\n 0,\n 0\n );\n this.afterScenegraphCreated();\n }\n\n /**\n * @description: 绘制场景树\n * @param {any} element\n * @param {CellRange} visibleCoord\n * @return {*}\n */\n renderSceneGraph() {\n this.stage.render();\n }\n\n /**\n * @description: 获取指定行列位置的cell group\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCell(col: number, row: number, getShadow?: boolean): Group {\n // hasFrozen处理前,列表头的冻结部分在colHeaderGroup中\n // hasFrozen处理后,列表头的冻结部分在cornerHeaderGroup中\n // 因此在获取cell时需要区别hasFrozen时机\n // const colGroup = row < this.frozenRowCount ? this.colHeaderGroup : this.cornerHeaderGroup;\n let cell;\n if (\n this.table.rightFrozenColCount > 0 &&\n col >= this.table.colCount - this.table.rightFrozenColCount &&\n row < this.table.frozenRowCount\n ) {\n cell = this.rightTopCornerGroup.getColGroup(col)?.getRowGroup(row);\n } else if (\n this.table.bottomFrozenRowCount > 0 &&\n row >= this.table.rowCount - this.table.bottomFrozenRowCount &&\n col < this.table.frozenColCount\n ) {\n cell = this.leftBottomCornerGroup.getColGroup(col)?.getRowGroup(row);\n } else if (\n this.table.rightFrozenColCount > 0 &&\n this.table.bottomFrozenRowCount > 0 &&\n col >= this.table.colCount - this.table.rightFrozenColCount &&\n row >= this.table.rowCount - this.table.bottomFrozenRowCount\n ) {\n cell = this.rightBottomCornerGroup.getColGroup(col)?.getRowGroup(row);\n } else if (this.table.rightFrozenColCount > 0 && col > this.table.colCount - 1 - this.table.rightFrozenColCount) {\n cell = this.rightFrozenGroup.getColGroup(col)?.getRowGroup(row);\n } else if (this.table.bottomFrozenRowCount > 0 && row > this.table.rowCount - 1 - this.table.bottomFrozenRowCount) {\n cell = this.bottomFrozenGroup.getColGroup(col)?.getRowGroup(row);\n } else {\n cell = this.getColGroup(col, row < this.frozenRowCount)?.getRowGroup(row);\n }\n\n if (cell && cell.role === 'shadow-cell' && !getShadow) {\n const range = this.table.getCellRange(col, row);\n if (range.start.col === col && range.start.row === row) {\n // 理论上不会出现这种情况,但是在PivotChart会偶先,这里处理避免进入死循环\n // do nothing\n } else {\n cell = this.getCell(range.start.col, range.start.row);\n }\n }\n\n return cell || emptyGroup;\n }\n\n highPerformanceGetCell(col: number, row: number, getShadow?: boolean): Group {\n // if (!this.table.isHeader(col, row)) {\n return this.proxy.highPerformanceGetCell(col, row, getShadow);\n // }\n // return this.getCell(col, row, getShadow);\n }\n\n getColGroup(col: number, isCornerOrColHeader = false): Group {\n let element: Group;\n if (col < this.frozenColCount && isCornerOrColHeader) {\n element = this.cornerHeaderGroup.getColGroup(col) as Group;\n } else if (col < this.frozenColCount) {\n element = this.rowHeaderGroup.getColGroup(col) as Group;\n } else if (\n isCornerOrColHeader &&\n this.table.rightFrozenColCount > 0 &&\n col > this.table.colCount - 1 - this.table.rightFrozenColCount\n ) {\n element = this.rightTopCornerGroup.getColGroup(col) as Group;\n } else if (\n !isCornerOrColHeader &&\n this.table.rightFrozenColCount > 0 &&\n col > this.table.colCount - 1 - this.table.rightFrozenColCount\n ) {\n element = this.rightFrozenGroup.getColGroup(col) as Group;\n } else if (isCornerOrColHeader) {\n element = this.colHeaderGroup.getColGroup(col) as Group;\n } else {\n element = this.bodyGroup.getColGroup(col) as Group;\n }\n return element || undefined;\n }\n\n getColGroupInBottom(col: number, isCornerOrColHeader = false): Group | undefined {\n if (isCornerOrColHeader) {\n const element = this.getColGroupInLeftBottomCorner(col) ?? this.getColGroupInRightBottomCorner(col);\n if (element) {\n return element;\n }\n }\n if (this.table.bottomFrozenRowCount > 0) {\n return this.bottomFrozenGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n getColGroupInLeftBottomCorner(col: number): Group | undefined {\n if (this.table.bottomFrozenRowCount > 0) {\n return this.leftBottomCornerGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n getColGroupInRightTopCorner(col: number): Group | undefined {\n if (this.table.rightFrozenColCount > 0) {\n return this.rightTopCornerGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n getColGroupInRightBottomCorner(col: number): Group | undefined {\n if (this.table.rightFrozenColCount > 0 && this.table.bottomFrozenRowCount > 0) {\n return this.rightBottomCornerGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n /**\n * @description: 获取指定行列位置的cell的宽高,主要处理merge情况\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCellSize(col: number, row: number): { width: number; height: number } {\n const cell = this.getCell(col, row);\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n let width = cell.attribute.width;\n let height = cell.attribute.height;\n if (mergeInfo) {\n width = width / (mergeInfo.end.col - mergeInfo.start.col + 1);\n height = height / (mergeInfo.end.row - mergeInfo.start.row + 1);\n }\n return { width, height };\n }\n\n /**\n * @description: 触发下一帧渲染\n * @return {*}\n */\n updateNextFrame() {\n this.updateContainerSync();\n this.resetAllSelectComponent();\n\n this.stage.renderNextFrame();\n }\n resetAllSelectComponent() {\n if (\n this.table.stateManager.select?.ranges?.length > 0 ||\n this.table.stateManager.select?.customSelectRanges?.length > 0\n ) {\n updateAllSelectComponent(this);\n }\n }\n\n hideHoverIcon(col: number, row: number) {\n hideHoverIcon(col, row, this);\n }\n\n showHoverIcon(col: number, row: number) {\n showHoverIcon(col, row, this);\n }\n\n hideClickIcon(col: number, row: number) {\n hideClickIcon(col, row, this);\n }\n\n showClickIcon(col: number, row: number) {\n showClickIcon(col, row, this);\n }\n\n /**\n * @description: 获取指定单元格指定位置的icon mark\n * @param {number} col\n * @param {number} row\n * @param {number} x\n * @param {number} y\n * @return {*}\n */\n getIcon(col: number, row: number, x: number, y: number): Icon | undefined {\n return getIconByXY(col, row, x, y, this);\n }\n\n /**\n * @description: 将指定icon mark设置为Hover样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\n setIconHoverStyle(icon: Icon, col: number, row: number, cellGroup: Group) {\n setIconHoverStyle(icon, col, row, cellGroup, this);\n }\n\n updateSortIcon(options: {\n col: number;\n row: number;\n iconMark: Icon;\n order: SortOrder;\n oldSortCol: number;\n oldSortRow: number;\n oldIconMark: Icon | undefined;\n }) {\n const { col, row, iconMark, order, oldSortCol, oldSortRow, oldIconMark } = options;\n updateSortIcon({ col, row, iconMark, order, oldSortCol, oldSortRow, oldIconMark, scene: this });\n }\n\n updateFrozenIcon(col: number, oldFrozenCol: number) {\n updateFrozenIcon(this);\n }\n updateHierarchyIcon(col: number, row: number) {\n updateHierarchyIcon(col, row, this);\n }\n\n /**\n * @description: 将指定icon mark设置为Normal样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\n setIconNormalStyle(icon: Icon, col: number, row: number) {\n setIconNormalStyle(icon, col, row, this);\n }\n\n residentHoverIcon(col: number, row: number) {\n residentHoverIcon(col, row, this);\n }\n resetResidentHoverIcon(col: number, row: number) {\n resetResidentHoverIcon(col, row, this);\n }\n\n /**\n * 单元格失焦 失效该单元格对应的图表实例\n * @param col\n * @param row\n * @returns\n */\n deactivateChart(col: number, row: number, forceRelease: boolean = false) {\n if (forceRelease) {\n // 处理场景:brush操作后,鼠标直接移动到空白区域进行滚动,希望释放掉brush操作的图表实例\n const brushingChartInstanceCellPos = getBrushingChartInstanceCellPos();\n const brushingChartInstance = getBrushingChartInstance();\n if (brushingChartInstanceCellPos && brushingChartInstance) {\n const cellGroup = this.getCell(brushingChartInstanceCellPos.col, brushingChartInstanceCellPos.row);\n if ((cellGroup?.firstChild as any)?.deactivate) {\n (cellGroup?.firstChild as any)?.deactivate?.(this.table, {\n forceRelease: true,\n releaseChartInstance: true,\n releaseColumnChartInstance: true,\n releaseRowChartInstance: true,\n releaseAllChartInstance: true\n });\n }\n\n //单独清理brush操作的单元格的chart缓存图片 因为updateChartState逻辑走到的clearChartCacheImage方法清理时排除了brushing cell的chart缓存图片(有绘制图片的那个共享图表实例覆盖到activechart实例上问题)\n clearCellChartCacheImage(brushingChartInstanceCellPos.col, brushingChartInstanceCellPos.row, this);\n clearBrushingChartInstance();\n }\n }\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n if ((cellGroup?.firstChild as any)?.deactivate) {\n if (forceRelease) {\n (cellGroup?.firstChild as any)?.deactivate?.(this.table, {\n forceRelease: true,\n releaseChartInstance: true,\n releaseColumnChartInstance: true,\n releaseRowChartInstance: true,\n releaseAllChartInstance: true\n });\n return;\n }\n const chartNode = cellGroup?.firstChild as Chart;\n const chartType = chartNode.attribute.spec.type;\n\n (cellGroup?.firstChild as any)?.deactivate?.(\n this.table,\n (this.table.options as PivotChartConstructorOptions).chartDimensionLinkage?.showTooltip\n ? {\n releaseChartInstance:\n chartType === 'pie'\n ? false\n : chartType === 'scatter' // 散点图一般是横纵crosshair 所以需要判断是否是hover的单元格 是否是超出图表显示区域到了边界表头或者轴单元格\n ? (col !== this.table.stateManager.hover.cellPos.col &&\n row !== this.table.stateManager.hover.cellPos.row) ||\n this.table.stateManager.hover.cellPos.row < this.table.frozenRowCount ||\n this.table.stateManager.hover.cellPos.row >\n this.table.rowCount - 1 - this.table.bottomFrozenRowCount ||\n this.table.stateManager.hover.cellPos.col < this.table.frozenColCount ||\n this.table.stateManager.hover.cellPos.col > this.table.colCount - 1 - this.table.rightFrozenColCount\n : (this.table.options as PivotChartConstructorOptions).indicatorsAsCol //非散点图的话判断是显示横向crosshair还是纵向crosshair\n ? row !== this.table.stateManager.hover.cellPos.row ||\n this.table.stateManager.hover.cellPos.col < this.table.frozenColCount ||\n this.table.stateManager.hover.cellPos.col > this.table.colCount - 1 - this.table.rightFrozenColCount\n : col !== this.table.stateManager.hover.cellPos.col ||\n this.table.stateManager.hover.cellPos.row < this.table.frozenRowCount ||\n this.table.stateManager.hover.cellPos.row >\n this.table.rowCount - 1 - this.table.bottomFrozenRowCount,\n releaseColumnChartInstance:\n chartType === 'pie'\n ? false\n : col !== this.table.stateManager.hover.cellPos.col ||\n this.table.stateManager.hover.cellPos.row < this.table.frozenRowCount ||\n this.table.stateManager.hover.cellPos.row >\n this.table.rowCount - 1 - this.table.bottomFrozenRowCount,\n releaseRowChartInstance:\n chartType === 'pie'\n ? false\n : row !== this.table.stateManager.hover.cellPos.row ||\n this.table.stateManager.hover.cellPos.col < this.table.frozenColCount ||\n this.table.stateManager.hover.cellPos.col > this.table.colCount - 1 - this.table.rightFrozenColCount\n }\n : undefined\n );\n }\n }\n /**\n * hover 到单元格上 激活该单元格对应的图表实例\n * @param col\n * @param row\n * @returns\n */\n activateChart(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n (cellGroup?.firstChild as any)?.activate?.(this.table);\n return (cellGroup?.firstChild as any)?.activeChartInstance;\n }\n\n removeInteractionBorder(col: number, row: number) {\n const cellGroup = this.getCell(col, row);\n cellGroup.setAttribute('highlightStroke', undefined);\n cellGroup.setAttribute('highlightStrokeArrayWidth', undefined);\n cellGroup.setAttribute('highlightStrokeArrayColor', undefined);\n }\n\n createCellSelectBorder(\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n selectRangeType: CellSubLocation,\n selectId: string, //整体区域${endRow}-${startCol}${startRow}${endCol}${endRow}作为其编号\n strokes?: boolean[]\n ) {\n createCellSelectBorder(this, start_Col, start_Row, end_Col, end_Row, selectRangeType, selectId, strokes);\n }\n moveSelectingRangeComponentsToSelectedRangeComponents() {\n moveSelectingRangeComponentsToSelectedRangeComponents(this);\n }\n /** 按住shift 则继续上次选中范围 需要将现有的删除掉 */\n deleteLastSelectedRangeComponents() {\n deleteLastSelectedRangeComponents(this);\n }\n deleteAllSelectBorder() {\n deleteAllSelectBorder(this);\n deleteAllSelectingBorder(this);\n }\n\n updateCellSelectBorder(selectRange: CellRange & { skipBodyMerge?: boolean }, extendSelectRange: boolean = true) {\n updateCellSelectBorder(this, selectRange, extendSelectRange);\n }\n\n removeFillHandleFromSelectComponents() {\n removeFillHandleFromSelectComponents(this);\n }\n /** 根据select状态重新创建选中range节点 */\n recreateAllSelectRangeComponents() {\n deleteAllSelectBorder(this);\n this.table.stateManager.select.ranges.forEach((cellRange: CellRange) => {\n updateCellSelectBorder(this, cellRange);\n moveSelectingRangeComponentsToSelectedRangeComponents(this);\n });\n }\n /**\n * @description: 列宽调整结果更新列宽\n * @param {number} col\n * @param {number} detaX 改变的宽度值\n * @return {*}\n */\n updateColWidth(col: number, detaX: number, skipUpdateContainer?: boolean, skipTableWidthMap?: boolean) {\n updateColWidth(this, col, Math.round(detaX), skipTableWidthMap);\n // this.updateContainerWidth(col, detaX);\n if (!skipUpdateContainer) {\n // this.updateContainerAttrWidthAndX();\n this.updateContainer({ async: true });\n }\n }\n\n /**\n * @description: 列宽调整需要修改Chart的尺寸\n * @param {number} col\n * @return {*}\n */\n updateChartSizeForResizeColWidth(col: number) {\n updateChartSizeForResizeColWidth(this, col);\n }\n\n /**\n * @description: 行高调整需要修改Chart的尺寸\n * @param {number} col\n * @return {*}\n */\n updateChartSizeForResizeRowHeight(row: number) {\n updateChartSizeForResizeRowHeight(this, row);\n }\n /** 更新图表的高亮状态 点击图元或者框选brush选中图元 一般有高亮状态*/\n updateChartState(datum: any, selectedDataMode: 'click' | 'brush') {\n if (this.table.isPivotChart()) {\n if (datum === null || datum === undefined || datum?.length === 0 || Object.keys(datum).length === 0) {\n const brushingChartInstance = getBrushingChartInstance();\n if (brushingChartInstance) {\n brushingChartInstance.getChart()?.getComponentsByKey('brush')[0].clearBrushStateAndMask();\n }\n (this.table.options as PivotChartConstructorOptions).chartDimensionLinkage?.clearChartState?.();\n }\n updateChartState(this, datum, selectedDataMode);\n }\n }\n\n updateCheckboxCellState(col: number, row: number, checked: boolean | 'indeterminate') {\n if ((this.table as any).transpose) {\n this.bodyGroup.children?.forEach((columnGroup: INode) => {\n columnGroup\n .getChildAt(row)\n ?.getChildren()\n .forEach((node: INode) => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n // 适配cellType: 'checkbox'与tree: true,并且开启enableTreeCheckbox: true的情况\n if (node.name === 'checkbox-content') {\n if (checked === 'indeterminate') {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n true\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n undefined\n );\n } else {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n undefined\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n checked\n );\n }\n }\n });\n });\n } else {\n const columnGroup = this.getColGroup(col);\n columnGroup?.children?.forEach((cellNode: INode) => {\n cellNode.getChildren().find(node => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n // 适配cellType: 'checkbox'与tree: true,并且开启enableTreeCheckbox: true的情况\n if (node.name === 'checkbox-content') {\n if (checked === 'indeterminate') {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n true\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n undefined\n );\n } else {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n undefined\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n checked\n );\n }\n }\n });\n });\n }\n }\n updateHeaderCheckboxCellState(col: number, row: number, checked: boolean | 'indeterminate') {\n if ((this.table as any).transpose) {\n this.rowHeaderGroup.children?.forEach((columnGroup: INode) => {\n columnGroup\n .getChildAt(row)\n .getChildren()\n .forEach((node: INode) => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n // 适配cellType: 'checkbox'与tree: true,并且开启enableTreeCheckbox: true的情况\n if (node.name === 'checkbox-content') {\n if (checked === 'indeterminate') {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n true\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n undefined\n );\n } else {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n undefined\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n checked\n );\n }\n }\n });\n });\n } else {\n const columnGroup = this.getColGroup(col, true);\n columnGroup.children?.forEach((cellNode: INode) => {\n cellNode.getChildren().find(node => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n // 适配cellType: 'checkbox'与tree: true,并且开启enableTreeCheckbox: true的情况\n if (node.name === 'checkbox-content') {\n if (checked === 'indeterminate') {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n true\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n undefined\n );\n } else {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n undefined\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n checked\n );\n }\n }\n });\n });\n }\n }\n updateAutoColWidth(col: number) {\n this.table.internalProps._widthResizedColMap.delete(col);\n const oldWidth = this.table.getColWidth(col);\n const newWidth = computeColWidth(col, 0, this.table.rowCount - 1, this.table, true);\n if (newWidth !== oldWidth) {\n this.updateColWidth(col, newWidth - oldWidth);\n }\n }\n\n /*\n * recalculates column width in all autowidth columns\n */\n recalculateColWidths() {\n const table = this.table;\n\n if (table.widthMode === 'adaptive' || table.autoFillWidth || table.internalProps.transpose) {\n computeColsWidth(this.table, 0, this.table.colCount - 1, true);\n } else {\n table._clearColRangeWidthsMap();\n // left frozen\n if (table.frozenColCount > 0) {\n computeColsWidth(this.table, 0, table.frozenColCount - 1, true);\n }\n // right frozen\n if (table.rightFrozenColCount > 0) {\n computeColsWidth(this.table, table.rightFrozenColCount, table.colCount - 1, true);\n }\n // body\n computeColsWidth(table, this.proxy.colStart, this.proxy.colEnd, true);\n }\n }\n\n recalculateRowHeights() {\n const table = this.table;\n table.internalProps.useOneRowHeightFillAll = false;\n if (table.heightMode === 'adaptive' || table.autoFillHeight) {\n computeRowsHeight(this.table, 0, this.table.rowCount - 1, true, true);\n } else {\n // top frozen\n if (table.frozenRowCount > 0) {\n computeRowsHeight(this.table, 0, table.frozenRowCount - 1, true, true);\n }\n // bottom frozen\n if (table.bottomFrozenRowCount > 0) {\n computeRowsHeight(this.table, table.bottomFrozenRowCount, table.rowCount - 1, true, true);\n }\n computeRowsHeight(table, this.proxy.rowStart, this.proxy.rowEnd, true, true);\n }\n }\n\n resize() {\n // reset proxy config\n this.proxy.resize();\n\n if (this.table.widthMode === 'adaptive' || this.table.autoFillWidth) {\n if (this.table.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n this.recalculateColWidths();\n } else {\n this.dealWidthMode();\n }\n }\n\n if (this.table.heightMode === 'adaptive') {\n // perf to be optimized:\n // reason to use recalculateRowHeights();\n // 1. error amplification(误差放大) in dealHeightMode when multiple resize\n // 2. width update caused height update dose not have enlarge/reduce number,\n // will cause scale error in dealHeightMode()\n if (this.table.internalProps._heightResizedRowMap.size === 0) {\n this.recalculateRowHeights();\n } else {\n this.dealHeightMode();\n }\n // this.dealHeightMode();\n } else if (this.table.autoFillHeight) {\n this.dealHeightMode();\n }\n\n // this.dealWidthMode();\n // this.dealHeightMode();\n this.resetFrozen();\n // this.dealFrozen();\n this.updateTableSize();\n this.updateBorderSizeAndPosition();\n this.component.updateScrollBar();\n if (\n this.table.widthMode === 'adaptive' ||\n this.table.heightMode === 'adaptive' ||\n this.table.autoFillWidth ||\n this.table.autoFillHeight ||\n this.table.containerFit?.width ||\n this.table.containerFit?.height\n ) {\n this.updateChartSizeForResizeColWidth(-1);\n }\n\n this.proxy.progress();\n // this.stage.window.resize(width, height);\n this.updateNextFrame();\n }\n\n updateTableSize() {\n // 计算内容的实际尺寸\n const contentWidth =\n Math.max(\n this.colHeaderGroup.attribute.width,\n this.bodyGroup.attribute.width,\n this.bottomFrozenGroup.attribute.width,\n 0\n ) +\n Math.max(\n this.cornerHeaderGroup.attribute.width,\n this.rowHeaderGroup.attribute.width,\n this.leftBottomCornerGroup.attribute.width,\n 0\n ) +\n Math.max(\n this.rightTopCornerGroup.attribute.width,\n this.rightFrozenGroup.attribute.width,\n this.rightBottomCornerGroup.attribute.width,\n 0\n );\n\n const contentHeight =\n Math.max(\n this.colHeaderGroup.attribute.height,\n this.cornerHeaderGroup.attribute.height,\n this.rightTopCornerGroup.attribute.height,\n 0\n ) +\n Math.max(\n this.rowHeaderGroup.attribute.height,\n this.bodyGroup.attribute.height,\n this.rightFrozenGroup.attribute.height,\n 0\n ) +\n Math.max(\n this.leftBottomCornerGroup.attribute.height,\n this.bottomFrozenGroup.attribute.height,\n this.rightBottomCornerGroup.attribute.height,\n 0\n );\n\n // 处理containerFit模式\n let tableWidth = contentWidth;\n let tableHeight = contentHeight;\n\n if (this.table.containerFit?.width) {\n // containerFit.width: 表格宽度等于容器宽度\n tableWidth = this.table.tableNoFrameWidth;\n } else {\n // 普通模式:表格宽度不超过容器宽度\n tableWidth = Math.min(this.table.tableNoFrameWidth, contentWidth);\n }\n\n if (this.table.containerFit?.height) {\n // containerFit.height: 表格高度等于容器高度\n tableHeight = this.table.tableNoFrameHeight;\n } else {\n // 普通模式:表格高度不超过容器高度\n tableHeight = Math.min(this.table.tableNoFrameHeight, contentHeight);\n }\n\n this.tableGroup.setAttributes({\n x: this.table.tableX,\n y: this.table.tableY,\n width: tableWidth,\n height: tableHeight\n } as any);\n\n if (this.tableGroup.border) {\n const rectAttributes = this.tableGroup.border?.attribute;\n let borderTop;\n let borderRight;\n let borderBottom;\n let borderLeft;\n if ((rectAttributes as any)?.strokeArrayWidth) {\n borderTop = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[0]\n : (rectAttributes.lineWidth as number) ?? 0;\n borderRight = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[1]\n : (rectAttributes.lineWidth as number) ?? 0;\n borderBottom = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[2]\n : (rectAttributes.lineWidth as number) ?? 0;\n borderLeft = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[3]\n : (rectAttributes.lineWidth as number) ?? 0;\n } else {\n borderTop = (rectAttributes?.lineWidth as number) ?? 0;\n borderRight = (rectAttributes?.lineWidth as number) ?? 0;\n borderBottom = (rectAttributes?.lineWidth as number) ?? 0;\n borderLeft = (rectAttributes?.lineWidth as number) ?? 0;\n }\n if (this.tableGroup.border.type === 'rect') {\n if (this.table.theme.frameStyle?.innerBorder) {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX + borderLeft / 2,\n y: this.table.tableY + borderTop / 2,\n width: this.tableGroup.attribute.width - borderLeft / 2 - borderRight / 2,\n height: this.tableGroup.attribute.height - borderTop / 2 - borderBottom / 2\n });\n } else {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX - borderLeft / 2,\n y: this.table.tableY - borderTop / 2,\n width: this.tableGroup.attribute.width + borderLeft / 2 + borderRight / 2,\n height: this.tableGroup.attribute.height + borderTop / 2 + borderBottom / 2\n });\n }\n } else if (this.tableGroup.border.type === 'group') {\n if (this.table.theme.frameStyle?.innerBorder) {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX + borderLeft / 2,\n y: this.table.tableY + borderTop / 2,\n width: this.tableGroup.attribute.width - borderLeft / 2 - borderRight / 2,\n height: this.tableGroup.attribute.height - borderTop / 2 - borderBottom / 2\n });\n (this.tableGroup.border.firstChild as IRect)?.setAttributes({\n x: 0,\n y: 0,\n width: this.tableGroup.attribute.width - borderLeft / 2 - borderRight / 2,\n height: this.tableGroup.attribute.height - borderTop / 2 - borderBottom / 2\n });\n } else {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX - borderLeft / 2,\n y: this.table.tableY - borderTop / 2,\n width: this.tableGroup.attribute.width + borderLeft / 2 + borderRight / 2,\n height: this.tableGroup.attribute.height + borderTop / 2 + borderBottom / 2\n });\n (this.tableGroup.border.firstChild as IRect)?.setAttributes({\n x: borderLeft / 2,\n y: borderTop / 2,\n width: this.tableGroup.attribute.width,\n height: this.tableGroup.attribute.height\n });\n }\n }\n }\n\n if (this.table.bottomFrozenRowCount > 0) {\n this.bottomFrozenGroup.setAttribute(\n 'y',\n this.tableGroup.attribute.height - this.table.getBottomFrozenRowsHeight()\n );\n this.leftBottomCornerGroup.setAttributes({\n visible: true,\n y: this.tableGroup.attribute.height - this.table.getBottomFrozenRowsHeight(),\n height: this.table.getBottomFrozenRowsHeight(),\n width: this.table.getFrozenColsWidth()\n });\n this.rightBottomCornerGroup.setAttributes({\n visible: true,\n y: this.tableGroup.attribute.height - this.table.getBottomFrozenRowsHeight(),\n height: this.table.getBottomFrozenRowsHeight()\n });\n }\n\n if (this.table.rightFrozenColCount > 0) {\n this.rightFrozenGroup.setAttribute('x', this.tableGroup.attribute.width - this.table.getRightFrozenColsWidth());\n this.rightTopCornerGroup.setAttributes({\n visible: true,\n x: this.tableGroup.attribute.width - this.table.getRightFrozenColsWidth(),\n width: this.table.getRightFrozenColsWidth(),\n height: this.table.getFrozenRowsHeight()\n });\n this.rightBottomCornerGroup.setAttributes({\n visible: true,\n x: this.tableGroup.attribute.width - this.table.getRightFrozenColsWidth(),\n width: this.table.getRightFrozenColsWidth()\n });\n }\n\n // update dom container size\n this.updateDomContainer();\n }\n\n updateRowHeight(row: number, detaY: number, skipTableHeightMap?: boolean) {\n detaY = Math.round(detaY);\n updateRowHeight(this, row, detaY, skipTableHeightMap);\n this.updateContainerHeight(row, detaY);\n }\n updateRowsHeight(rows: number[], detaYs: number[], skipTableHeightMap?: boolean) {\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (row >= this.proxy.rowStart && row <= this.proxy.rowEnd) {\n const detaY = detaYs[i];\n updateRowHeight(this, row, Math.round(detaY), skipTableHeightMap);\n this._updateContainerHeight(row, detaY);\n }\n }\n // 更新table/header/border高度\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n /**\n * @description: 更新table&header&body高度\n * @return {*}\n */\n updateContainerWidth(col: number, detaX: number) {\n // 更新table/header/border宽度\n if (col < this.frozenColCount) {\n this.rowHeaderGroup.setDeltaWidth(detaX);\n this.cornerHeaderGroup.setDeltaWidth(detaX);\n this.colHeaderGroup.setDeltaX(detaX);\n this.bodyGroup.setDeltaX(detaX);\n } else {\n this.colHeaderGroup.setDeltaWidth(detaX);\n this.bodyGroup.setDeltaWidth(detaX);\n }\n\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n _updateContainerHeight(row: number, detaY: number) {\n if (row < this.table.frozenRowCount) {\n this.colHeaderGroup.setDeltaHeight(detaY);\n this.cornerHeaderGroup.setDeltaHeight(detaY);\n this.rowHeaderGroup.setDeltaY(detaY);\n this.bodyGroup.setDeltaY(detaY);\n this.table.rightFrozenColCount && this.rightFrozenGroup.setDeltaY(detaY);\n } else if (row >= this.table.rowCount - this.table.bottomFrozenRowCount) {\n this.leftBottomCornerGroup.setDeltaHeight(detaY);\n this.bottomFrozenGroup.setDeltaHeight(detaY);\n this.table.rightFrozenColCount && this.rightBottomCornerGroup.setDeltaHeight(detaY);\n } else {\n this.rowHeaderGroup.setDeltaHeight(detaY);\n this.bodyGroup.setDeltaHeight(detaY);\n this.table.rightFrozenColCount && this.rightFrozenGroup.setDeltaHeight(detaY);\n }\n }\n /**\n * @description: 更新table&header&body高度\n * @return {*}\n */\n updateContainerHeight(row: number, detaY: number) {\n this._updateContainerHeight(row, detaY);\n // 更新table/header/border高度\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n setColWidth(col: number, width: number) {\n const oldWidth = this.table.getColWidth(col);\n if (oldWidth === width) {\n return;\n }\n this.updateColWidth(col, width - oldWidth);\n this.table._clearColRangeWidthsMap(col);\n }\n\n setRowHeight(row: number, height: number) {\n const oldHeight = this.table.getRowHeight(row);\n if (oldHeight === height) {\n return;\n }\n if (\n (row >= this.proxy.rowStart && row <= this.proxy.rowEnd) || // body\n (row >= this.table.rowCount - this.table.bottomFrozenRowCount && row <= this.table.rowCount - 1) || // bottom\n row < this.table.frozenRowCount\n ) {\n this.updateRowHeight(row, height - oldHeight);\n }\n this.table._clearRowRangeHeightsMap(row);\n }\n\n /**\n * @description: 设置表格的x位置,滚动中使用\n * @param {number} x\n * @return {*}\n */\n setX(x: number, isEnd = false) {\n this.table.scenegraph.proxy.setX(-x, isEnd);\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setY(y: number, isEnd = false) {\n this.table.scenegraph.proxy.setY(-y, isEnd);\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setBodyAndRowHeaderY(y: number) {\n // correct y, avoid scroll out of range\n const firstBodyCell =\n (this.bodyGroup.firstChild?.firstChild as Group) ?? (this.rowHeaderGroup.firstChild?.firstChild as Group);\n const lastBodyCell =\n (this.bodyGroup.firstChild?.lastChild as Group) ?? (this.rowHeaderGroup.firstChild?.lastChild as Group);\n if (\n y === 0 &&\n firstBodyCell &&\n firstBodyCell.row === this.table.frozenRowCount &&\n firstBodyCell.attribute.y + y < 0\n ) {\n y = -firstBodyCell.attribute.y;\n } else if (\n lastBodyCell &&\n this.table.tableNoFrameHeight < this.table.getAllRowsHeight() &&\n lastBodyCell.row === this.table.rowCount - this.table.bottomFrozenRowCount - 1 &&\n lastBodyCell.attribute.y + this.table.getRowHeight(lastBodyCell.row) + y <\n this.table.tableNoFrameHeight - this.table.getFrozenRowsHeight() - this.table.getBottomFrozenRowsHeight()\n ) {\n y =\n this.table.tableNoFrameHeight -\n this.table.getFrozenRowsHeight() -\n this.table.getBottomFrozenRowsHeight() -\n lastBodyCell.attribute.y -\n this.table.getRowHeight(lastBodyCell.row);\n }\n if (this.colHeaderGroup.attribute.height + y === this.bodyGroup.attribute.y) {\n return;\n }\n this.bodyGroup.setAttribute('y', this.colHeaderGroup.attribute.height + y);\n this.rowHeaderGroup.setAttribute('y', this.cornerHeaderGroup.attribute.height + y);\n if (this.table.rightFrozenColCount > 0) {\n this.rightFrozenGroup.setAttribute('y', this.rightTopCornerGroup.attribute.height + y);\n }\n // this.tableGroup.setAttribute('height', this.table.tableNoFrameHeight - y);\n // (this.tableGroup.lastChild as any).setAttribute('width', this.table.tableNoFrameWidth - x);\n this.updateNextFrame();\n }\n\n /**\n * @description: 更新表格的x位置,滚动中使用\n * @param {number} x\n * @return {*}\n */\n setBodyAndColHeaderX(x: number) {\n // correct x, avoid scroll out of range\n const firstBodyCol = this.bodyGroup.firstChild as Group;\n const lastBodyCol = this.bodyGroup.lastChild as Group;\n if (x === 0 && firstBodyCol && firstBodyCol.col === this.table.frozenColCount && firstBodyCol.attribute.x + x < 0) {\n x = -firstBodyCol.attribute.x;\n } else if (\n lastBodyCol &&\n this.table.tableNoFrameWidth < this.table.getAllColsWidth() &&\n lastBodyCol.col === this.table.colCount - this.table.rightFrozenColCount - 1 &&\n lastBodyCol.attribute.x + lastBodyCol.attribute.width + x <\n this.table.tableNoFrameWidth - this.table.getFrozenColsWidth() - this.table.getRightFrozenColsWidth()\n ) {\n x =\n this.table.tableNoFrameWidth -\n this.table.getFrozenColsWidth() -\n this.table.getRightFrozenColsWidth() -\n lastBodyCol.attribute.x -\n lastBodyCol.attribute.width;\n }\n if (this.table.getFrozenColsWidth() + x === this.bodyGroup.attribute.x) {\n return;\n }\n this.bodyGroup.setAttribute('x', this.table.getFrozenColsWidth() + x);\n this.colHeaderGroup.setAttribute('x', this.table.getFrozenColsWidth() + x);\n if (this.table.bottomFrozenRowCount > 0) {\n this.bottomFrozenGroup.setAttribute('x', this.table.getFrozenColsWidth() + x);\n }\n this.updateNextFrame();\n }\n\n /**\n * @description: 完成创建场景树节点后,处理自动行高列宽\n * @return {*}\n */\n afterScenegraphCreated() {\n // this.dealWidthMode();\n // this.dealHeightMode();\n // 处理冻结\n // this.resetFrozen();\n // this.dealFrozen();\n\n if (!this.isPivot && !(this.table as any).transpose) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else if (this.table.options.frozenColCount) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n } else if (this.table.options.rightFrozenColCount) {\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else {\n this.component.setFrozenColumnShadow(-1);\n }\n this.table.stateManager.checkFrozen();\n // this.updateContainerAttrWidthAndX();\n this.updateContainer();\n\n // 处理frame border\n this.createFrameBorder();\n this.updateBorderSizeAndPosition();\n\n // 更新滚动条状态\n this.component.updateScrollBar();\n\n // 处理单元格内容需要textStick的情况 入股这里不处理 只依赖异步proxy progress中处理 会有闪烁问题\n\n handleTextStick(this.table);\n\n // // temp add rect\n // const rect = createRect({\n // x: 200,\n // y: 200,\n // width: 100,\n // height: 100,\n // fill: 'red',\n // stroke: 'blue',\n // lineWidth: 1\n // });\n // this.tableGroup.addChild(rect);\n // deal with animation\n\n if (this.table.options.animationAppear) {\n dealWithAnimationAppear(this.table);\n }\n if (this.table.options.menu?.contextMenuWorkOnlyCell === false) {\n this.canvasShowMenu();\n }\n this.updateNextFrame();\n }\n\n /**\n * @description: 处理宽度模式\n * @return {*}\n */\n dealWidthMode() {\n const table = this.table;\n if (table.widthMode === 'adaptive') {\n table._clearColRangeWidthsMap();\n const canvasWidth = table.tableNoFrameWidth;\n let actualHeaderWidth = 0;\n let startCol = 0;\n let endCol = table.colCount;\n if (table.widthAdaptiveMode === 'only-body') {\n for (let col = 0; col < table.colCount; col++) {\n if (\n col < table.rowHeaderLevelCount ||\n (table.isPivotChart() && col >= table.colCount - table.rightFrozenColCount)\n ) {\n const colWidth = table.getColWidth(col);\n actualHeaderWidth += colWidth;\n }\n }\n startCol = table.rowHeaderLevelCount;\n endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n }\n\n getAdaptiveWidth(canvasWidth - actualHeaderWidth, startCol, endCol, false, [], table, true);\n } else if (table.autoFillWidth) {\n table._clearColRangeWidthsMap();\n const canvasWidth = table.tableNoFrameWidth;\n let actualHeaderWidth = 0;\n let actualWidth = 0;\n for (let col = 0; col < table.colCount; col++) {\n const colWidth = table.getColWidth(col);\n if (\n table.widthAdaptiveMode === 'only-body' &&\n (col < table.rowHeaderLevelCount ||\n (table.isPivotChart() && col >= table.colCount - table.rightFrozenColCount))\n ) {\n actualHeaderWidth += colWidth;\n }\n actualWidth += colWidth;\n }\n // 如果内容宽度小于canvas宽度,执行adaptive放大\n if (actualWidth < canvasWidth && actualWidth > actualHeaderWidth) {\n let startCol = 0;\n let endCol = table.colCount;\n if (table.widthAdaptiveMode === 'only-body') {\n startCol = table.rowHeaderLevelCount;\n endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n }\n getAdaptiveWidth(canvasWidth - actualHeaderWidth, startCol, endCol, false, [], table, true);\n }\n }\n\n // 更新容器宽度\n let bodyWidth = 0;\n this.bodyGroup.forEachChildrenSkipChild((column: Group) => {\n bodyWidth += column.attribute.width;\n });\n this.bodyGroup.setAttribute('width', bodyWidth);\n let colHeaderWidth = 0;\n this.colHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n colHeaderWidth += column.attribute.width;\n });\n this.colHeaderGroup.setAttribute('width', colHeaderWidth);\n let rowHeaderWidth = 0;\n this.rowHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n rowHeaderWidth += column.attribute.width;\n });\n this.rowHeaderGroup.setAttribute('width', rowHeaderWidth);\n let cornerHeaderWidth = 0;\n this.cornerHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n cornerHeaderWidth += column.attribute.width;\n });\n this.cornerHeaderGroup.setAttribute('width', cornerHeaderWidth);\n this.colHeaderGroup.setAttribute('x', this.cornerHeaderGroup.attribute.width);\n this.rowHeaderGroup.setAttribute('y', this.cornerHeaderGroup.attribute.height);\n this.bodyGroup.setAttributes({\n x: this.rowHeaderGroup.attribute.width,\n y: this.colHeaderGroup.attribute.height\n });\n }\n\n /**\n * @description: 处理高度模式\n * @return {*}\n */\n dealHeightMode() {\n const table = this.table;\n // 处理adaptive高度\n if (table.heightMode === 'adaptive') {\n table._clearRowRangeHeightsMap();\n // const canvasWidth = table.internalProps.canvas.width;\n const columnHeaderHeight = table.getRowsHeight(0, table.columnHeaderLevelCount - 1);\n const bottomHeaderHeight = table.isPivotChart() ? table.getBottomFrozenRowsHeight() : 0;\n const totalDrawHeight = table.tableNoFrameHeight - columnHeaderHeight - bottomHeaderHeight;\n const startRow = table.columnHeaderLevelCount;\n const endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;\n let actualHeight = 0;\n for (let row = startRow; row < endRow; row++) {\n actualHeight += table.getRowHeight(row);\n }\n const factor = totalDrawHeight / actualHeight;\n for (let row = startRow; row < endRow; row++) {\n let rowHeight;\n if (row === endRow - 1) {\n rowHeight = totalDrawHeight - table.getRowsHeight(startRow, endRow - 2);\n } else {\n rowHeight = Math.round(table.getRowHeight(row) * factor);\n }\n\n this.setRowHeight(row, rowHeight);\n }\n } else if (table.autoFillHeight) {\n table._clearRowRangeHeightsMap();\n const canvasHeight = table.tableNoFrameHeight;\n let actualHeight = 0;\n let actualHeaderHeight = 0;\n for (let row = 0; row < table.rowCount; row++) {\n const rowHeight = table.getRowHeight(row);\n if (\n row < table.columnHeaderLevelCount ||\n (table.isPivotChart() && row >= table.rowCount - table.bottomFrozenRowCount)\n ) {\n actualHeaderHeight += rowHeight;\n }\n\n actualHeight += rowHeight;\n }\n // table.scenegraph._dealAutoFillHeightOriginRowsHeight = actualHeight;\n // 如果内容高度小于canvas高度,执行adaptive放大\n if (\n (this._dealAutoFillHeightOriginRowsHeight ?? actualHeight) < canvasHeight &&\n actualHeight - actualHeaderHeight > 0\n ) {\n const startRow = table.columnHeaderLevelCount;\n const endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;\n const factor = (canvasHeight - actualHeaderHeight) / (actualHeight - actualHeaderHeight);\n for (let row = startRow; row < endRow; row++) {\n let rowHeight;\n if (row === endRow - 1) {\n rowHeight = canvasHeight - actualHeaderHeight - table.getRowsHeight(startRow, endRow - 2);\n } else {\n rowHeight = Math.round(table.getRowHeight(row) * factor);\n }\n this.setRowHeight(row, rowHeight);\n }\n }\n }\n }\n\n /**\n * @description: 处理冻结\n * @return {*}\n */\n dealFrozen() {\n dealFrozen(this);\n }\n\n /**\n * @description: 还原冻结\n * @return {*}\n */\n resetFrozen() {\n resetFrozen(this);\n }\n\n resetRowFrozen() {\n resetRowFrozen(this);\n }\n\n /**\n * @description: 判断指定列更新宽度时,其中单元格是否会更新宽度;如果更新宽度,返回true\n * @param {Group} columnGroup\n * @param {number} detaRow columnGroup内的index与row的差值,列表头为0;行表头和内容为table.frozenRowCount\n * @param {number} col\n * @return {*}\n */\n updateCellLayoutWidthCertainWidth(columnGroup: Group, detaRow: number, col: number) {\n const width = columnGroup.attribute.width;\n let isUpdate = false;\n columnGroup.forEachChildren((cellGroup: Group, row: number) => {\n row += detaRow;\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n if (mergeInfo) {\n cellGroup = this.getCell(mergeInfo.start.col, mergeInfo.start.row);\n // cellGroup.setAttribute('width', width);\n } else {\n cellGroup.setAttribute('width', width);\n }\n const headerStyle = this.table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', headerStyle, col, row, this.table));\n\n // const text = cellGroup.getChildAt(1) as Text;\n const text = cellGroup.getChildByName('text') as Text;\n let oldCellHeight = 0;\n let newCellHeight = 0;\n if (text) {\n oldCellHeight = text.AABBBounds.height() + (padding[0] + padding[2]);\n text.setAttribute('maxLineWidth', width - (padding[1] + padding[3]));\n newCellHeight = text.AABBBounds.height() + (padding[0] + padding[2]);\n } else {\n const group = cellGroup.getChildAt(1) as any;\n oldCellHeight = group.AABBBounds.height() + (padding[0] + padding[2]);\n group._cellWidth = width - (padding[1] + padding[3]);\n group.layout();\n newCellHeight = group.AABBBounds.height() + (padding[0] + padding[2]);\n }\n const rowHeight = this.table.getRowHeight(row);\n\n if (cellGroup.attribute.height !== newCellHeight) {\n cellGroup.setAttribute('height', newCellHeight);\n if (rowHeight === oldCellHeight) {\n // 当前行由本单元格高度撑起,更新本行行高\n isUpdate = true;\n } else if (newCellHeight > rowHeight) {\n // 当前行不由本单元格高度撑起,只在本单元格高度高于当前行高度时更新本行行高\n isUpdate = true;\n }\n }\n });\n return isUpdate;\n }\n\n /**\n * @description: 更新某列到其他列位置\n * @param {number} colSource 原始列col\n * @param {number} colTarget 目标列col\n * @return {*}\n */\n updateHeaderPosition(\n updateColStart: number,\n updateColEnd: number,\n updateRowStart: number,\n updateRowEnd: number,\n moveType: 'column' | 'row'\n // sourceMergeInfo: false | CellRange,\n // targetMergeInfo: false | CellRange\n ) {\n moveHeaderPosition(updateColStart, updateColEnd, updateRowStart, updateRowEnd, moveType, this.table);\n }\n\n updateContainerAttrWidthAndX() {\n // 更新各列x&col\n const cornerX = updateContainerChildrenX(this.cornerHeaderGroup, 0);\n const rowHeaderX = updateContainerChildrenX(this.rowHeaderGroup, 0);\n const colHeaderX =\n this.colHeaderGroup.hasChildNodes() && this.colHeaderGroup.firstChild\n ? updateContainerChildrenX(\n this.colHeaderGroup,\n (this.colHeaderGroup.firstChild as any).col > 0\n ? this.table.getColsWidth(this.table.frozenColCount ?? 0, (this.colHeaderGroup.firstChild as any).col - 1)\n : 0\n )\n : 0;\n const bodyX =\n this.bodyGroup.hasChildNodes() && this.bodyGroup.firstChild\n ? updateContainerChildrenX(\n this.bodyGroup,\n (this.bodyGroup.firstChild as any).col > 0\n ? this.table.getColsWidth(this.table.frozenColCount ?? 0, (this.bodyGroup.firstChild as any).col - 1)\n : 0\n )\n : 0;\n const rightX = updateContainerChildrenX(\n this.rightFrozenGroup.childrenCount > 0 ? this.rightFrozenGroup : this.rightTopCornerGroup,\n 0\n );\n\n this.bottomFrozenGroup.hasChildNodes() &&\n this.bottomFrozenGroup.firstChild &&\n updateContainerChildrenX(\n this.bottomFrozenGroup,\n (this.bottomFrozenGroup.firstChild as any).col > 0\n ? this.table.getColsWidth(this.table.frozenColCount ?? 0, (this.bottomFrozenGroup.firstChild as any).col - 1)\n : 0\n );\n updateContainerChildrenX(this.leftBottomCornerGroup, 0);\n updateContainerChildrenX(this.rightTopCornerGroup, 0);\n updateContainerChildrenX(this.rightBottomCornerGroup, 0);\n\n // 更新容器\n this.cornerHeaderGroup.setDeltaWidth(cornerX - this.cornerHeaderGroup.attribute.width);\n this.leftBottomCornerGroup.setDeltaWidth(cornerX - this.leftBottomCornerGroup.attribute.width);\n //TODO 可能有影响\n this.colHeaderGroup.setDeltaWidth(colHeaderX - this.colHeaderGroup.attribute.width);\n // this.rightFrozenGroup.setDeltaWidth(colHeaderX - this.table.getRightFrozenColsWidth());\n this.rowHeaderGroup.setDeltaWidth(rowHeaderX - this.rowHeaderGroup.attribute.width);\n this.bottomFrozenGroup.setDeltaWidth(colHeaderX - this.bottomFrozenGroup.attribute.width);\n this.rightFrozenGroup.setDeltaWidth(rightX - this.rightFrozenGroup.attribute.width);\n this.rightTopCornerGroup.setDeltaWidth(rightX - this.rightTopCornerGroup.attribute.width);\n this.rightBottomCornerGroup.setDeltaWidth(rightX - this.rightBottomCornerGroup.attribute.width);\n this.bodyGroup.setDeltaWidth(bodyX - this.bodyGroup.attribute.width);\n this.colHeaderGroup.setAttribute('x', this.cornerHeaderGroup.attribute.width);\n this.bottomFrozenGroup.setAttribute('x', this.table.getFrozenColsWidth());\n this.bodyGroup.setAttribute('x', this.rowHeaderGroup.attribute.width);\n }\n\n updateContainerAttrHeightAndY() {\n for (let i = 0; i < this.cornerHeaderGroup.children.length; i++) {\n updateContainerChildrenY(this.cornerHeaderGroup.children[i] as Group, 0);\n }\n for (let i = 0; i < this.colHeaderGroup.children.length; i++) {\n updateContainerChildrenY(this.colHeaderGroup.children[i] as Group, 0);\n }\n for (let i = 0; i < this.rightTopCornerGroup.children.length; i++) {\n updateContainerChildrenY(this.rightTopCornerGroup.children[i] as Group, 0);\n }\n for (let i = 0; i < this.rowHeaderGroup.children.length; i++) {\n this.rowHeaderGroup.children[i].firstChild &&\n updateContainerChildrenY(\n this.rowHeaderGroup.children[i] as Group,\n (this.rowHeaderGroup.children[i].firstChild as Group).row > 0\n ? this.table.getRowsHeight(\n this.table.frozenRowCount ?? 0,\n (this.rowHeaderGroup.children[i].firstChild as Group).row - 1\n )\n : 0\n );\n }\n for (let i = 0; i < this.bodyGroup.children.length; i++) {\n this.bodyGroup.children[i].firstChild &&\n updateContainerChildrenY(\n this.bodyGroup.children[i] as Group,\n (this.bodyGroup.children[i].firstChild as Group).row > 0\n ? this.table.getRowsHeight(\n this.table.frozenRowCount ?? 0,\n (this.bodyGroup.children[i].firstChild as Group).row - 1\n )\n : 0\n );\n }\n for (let i = 0; i < this.rightFrozenGroup.children.length; i++) {\n this.rightFrozenGroup.children[i].firstChild &&\n updateContainerChildrenY(\n this.rightFrozenGroup.children[i] as Group,\n (this.rightFrozenGroup.children[i].firstChild as Group).row > 0\n ? this.table.getRowsHeight(\n this.table.frozenRowCount ?? 0,\n (this.rightFrozenGroup.children[i].firstChild as Group).row - 1\n )\n : 0\n );\n }\n for (let i = 0; i < this.leftBottomCornerGroup.children.length; i++) {\n updateContainerChildrenY(this.leftBottomCornerGroup.children[i] as Group, 0);\n }\n for (let i = 0; i < this.bottomFrozenGroup.children.length; i++) {\n updateContainerChildrenY(this.bottomFrozenGroup.children[i] as Group, 0);\n }\n for (let i = 0; i < this.rightBottomCornerGroup.children.length; i++) {\n updateContainerChildrenY(this.rightBottomCornerGroup.children[i] as Group, 0);\n }\n }\n updateContainer(\n updateConfig: { async?: boolean; needUpdateCellY?: boolean } = { async: false, needUpdateCellY: false }\n ) {\n if (updateConfig.async) {\n if (!this._needUpdateContainer) {\n this._needUpdateContainer = true;\n setTimeout(() => {\n this.updateContainerSync(updateConfig.needUpdateCellY ?? false);\n }, 0);\n }\n } else {\n this._needUpdateContainer = true;\n this.updateContainerSync(updateConfig.needUpdateCellY ?? false);\n }\n }\n\n updateContainerSync(needUpdateCellY: boolean = false) {\n if (!this._needUpdateContainer) {\n return;\n }\n this._needUpdateContainer = false;\n this.updateContainerAttrWidthAndX();\n if (needUpdateCellY) {\n this.updateContainerAttrHeightAndY();\n }\n this.updateTableSize();\n this.component.updateScrollBar();\n\n // this.updateDomContainer();\n\n this.updateNextFrame();\n }\n\n updateCellContentWhileResize(col: number, row: number) {\n const isVtableMerge = this.table.getCellRawRecord(col, row)?.vtableMerge;\n const type = isVtableMerge\n ? 'text'\n : this.table.isHeader(col, row)\n ? (this.table._getHeaderLayoutMap(col, row) as HeaderData).headerType\n : this.table.getBodyColumnType(col, row);\n const cellGroup = this.getCell(col, row);\n if (type === 'image' || type === 'video') {\n updateImageCellContentWhileResize(cellGroup, col, row, 0, 0, this.table);\n }\n }\n\n /**\n * @description: 创建table&header&body的border\n * @return {*}\n */\n createFrameBorder() {\n // 更新宽高\n this.updateTableSize();\n // this.tableGroup.setAttributes({\n // width: Math.min(\n // this.table.tableNoFrameWidth,\n // (this.colHeaderGroup.attribute.width ?? 0) + (this.cornerHeaderGroup.attribute.width ?? 0)\n // ),\n // height: Math.min(\n // this.table.tableNoFrameHeight,\n // (this.colHeaderGroup.attribute.height ?? 0) + (this.bodyGroup.attribute.height ?? 0)\n // ),\n // } as any);\n\n const isListTableWithFrozen = !this.isPivot && !this.table.internalProps.transpose;\n\n // 设置border\n createFrameBorder(\n this.bodyGroup,\n this.table.theme.bodyStyle.frameStyle,\n this.bodyGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n createFrameBorder(\n this.rowHeaderGroup,\n this.isPivot\n ? this.table.theme.rowHeaderStyle.frameStyle\n : this.table.internalProps.transpose\n ? this.table.theme.rowHeaderStyle.frameStyle\n : this.table.theme.bodyStyle.frameStyle,\n this.rowHeaderGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n createFrameBorder(\n this.colHeaderGroup,\n this.table.theme.headerStyle.frameStyle, // 透视表的主题中没有colHeaderStyle,直接使用headerStyle\n this.colHeaderGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n createFrameBorder(\n this.cornerHeaderGroup,\n this.isPivot ? this.table.theme.cornerHeaderStyle.frameStyle : this.table.theme.headerStyle.frameStyle,\n this.cornerHeaderGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n this.table.theme.cornerLeftBottomCellStyle?.frameStyle &&\n createFrameBorder(\n this.leftBottomCornerGroup,\n this.table.theme.cornerLeftBottomCellStyle.frameStyle,\n this.leftBottomCornerGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n this.table.theme.bottomFrozenStyle?.frameStyle &&\n createFrameBorder(\n this.bottomFrozenGroup,\n this.table.theme.bottomFrozenStyle.frameStyle,\n this.bottomFrozenGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n this.table.theme.rightFrozenStyle?.frameStyle &&\n createFrameBorder(\n this.rightFrozenGroup,\n this.table.theme.rightFrozenStyle.frameStyle,\n this.rightFrozenGroup.role,\n undefined\n );\n this.table.theme.cornerRightTopCellStyle?.frameStyle &&\n createFrameBorder(\n this.rightTopCornerGroup,\n this.table.theme.cornerRightTopCellStyle.frameStyle,\n this.rightTopCornerGroup.role,\n undefined\n );\n this.table.theme.cornerRightBottomCellStyle?.frameStyle &&\n createFrameBorder(\n this.rightBottomCornerGroup,\n this.table.theme.cornerRightBottomCellStyle.frameStyle,\n this.rightBottomCornerGroup.role,\n undefined\n );\n\n createFrameBorder(this.tableGroup, this.table.theme.frameStyle, this.tableGroup.role, undefined);\n }\n\n /**\n * @description: 获取当前位置的列宽调整信息\n * @param {number} abstractX\n * @param {number} abstractY\n * @param {Group} cellGroup\n * @param {*} offset\n * @return {*}\n */\n getResizeColAt(\n abstractX: number,\n abstractY: number,\n cellGroup?: Group\n ): { col: number; row: number; x?: number; rightFrozen?: boolean } {\n const offset = this.table.theme.columnResize.resizeHotSpotSize / 2;\n let cell: { col: number; row: number; x?: number; rightFrozen?: boolean };\n if (!cellGroup) {\n const drawRange = this.table.getDrawRange();\n if (abstractY >= drawRange.top && abstractY <= drawRange.bottom) {\n // to do: 处理最后一列外调整列宽\n cell = this.table.getCellAtRelativePosition(abstractX - offset, abstractY);\n if (cell.col === this.table.colCount - 1) {\n return cell;\n }\n }\n return { col: -1, row: -1 };\n }\n\n if (!cellGroup.stage) {\n return { col: -1, row: -1 };\n }\n\n if (abstractX < cellGroup.globalAABBBounds.x1 + offset) {\n cell = { col: cellGroup.col - 1, row: cellGroup.row, x: cellGroup.globalAABBBounds.x1 };\n } else if (cellGroup.globalAABBBounds.x2 - offset < abstractX) {\n cell = { col: cellGroup.col, row: cellGroup.row, x: cellGroup.globalAABBBounds.x2 };\n }\n if (\n cell &&\n this.table.rightFrozenColCount > 0 &&\n // cell.col === this.table.colCount - this.table.rightFrozenColCount - 1 &&\n cell.col >= this.table.colCount - this.table.rightFrozenColCount - 1 &&\n this.table.tableNoFrameWidth -\n this.table.getFrozenColsWidth() -\n this.table.getRightFrozenColsWidth() +\n this.table.scrollLeft <\n this.bodyGroup.attribute.width\n ) {\n // 有右侧冻结列,并且横向没有滚动到最右侧时,右侧冻结列左侧调整对只对右侧冻结列生效\n cell.col = cell.col + 1;\n cell.rightFrozen = true;\n }\n\n if (cell) {\n return cell;\n }\n // }\n return { col: -1, row: -1 };\n }\n\n getResizeRowAt(abstractX: number, abstractY: number, cellGroup?: Group) {\n const offset = this.table.theme.columnResize.resizeHotSpotSize / 2;\n if (!cellGroup) {\n // to do: 处理最后一列外调整列宽\n } else {\n let cell: { col: number; row: number; y?: number; bottomFrozen?: boolean };\n if (abstractY < cellGroup.globalAABBBounds.y1 + offset) {\n cell = { col: cellGroup.col, row: cellGroup.row - 1, y: cellGroup.globalAABBBounds.y1 };\n } else if (cellGroup.globalAABBBounds.y2 - offset < abstractY) {\n cell = { col: cellGroup.col, row: cellGroup.row, y: cellGroup.globalAABBBounds.y2 };\n }\n if (\n cell &&\n this.table.bottomFrozenRowCount > 0 &&\n // cell.row === this.table.rowCount - this.table.bottomFrozenRowCount - 1 &&\n cell.row >= this.table.rowCount - this.table.bottomFrozenRowCount - 1 &&\n this.table.tableNoFrameHeight -\n this.table.getFrozenRowsHeight() -\n this.table.getBottomFrozenRowsHeight() +\n this.table.scrollTop <\n this.bodyGroup.attribute.height\n ) {\n // 有下侧冻结行,并且纵向没有滚动到最下侧时,下侧冻结行左侧调整对只对下侧冻结行生效\n cell.row = cell.row + 1;\n cell.bottomFrozen = true;\n }\n if (cell) {\n return cell;\n }\n }\n return { col: -1, row: -1 };\n }\n\n updateFrozen() {\n if (this.clear) {\n return;\n }\n this.resetFrozen();\n // this.dealFrozen();\n this.component.updateScrollBar();\n }\n\n updateRowFrozen() {\n if (this.clear) {\n return;\n }\n this.resetRowFrozen();\n // this.dealFrozen();\n this.component.updateScrollBar();\n }\n\n dealWidthRightFrozen(rightFrozenColCount: number) {\n if (this.clear) {\n this.table.internalProps.rightFrozenColCount = rightFrozenColCount;\n return;\n }\n dealRightFrozen(rightFrozenColCount, this);\n }\n dealWidthBottomFrozen(bottomFrozenRowCount: number) {\n if (this.clear) {\n this.table.internalProps.bottomFrozenRowCount = bottomFrozenRowCount;\n return;\n }\n dealBottomFrozen(bottomFrozenRowCount, this);\n }\n\n updateBorderSizeAndPosition() {\n if (this.bodyGroup.border) {\n this.bodyGroup.appendChild(this.bodyGroup.border);\n updateFrameBorderSize(this.bodyGroup);\n if (this.rowHeaderGroup.attribute.width === 0) {\n updateFrameBorder(this.bodyGroup, this.table.theme.bodyStyle.frameStyle);\n } else {\n updateFrameBorder(this.bodyGroup, this.table.theme.bodyStyle.frameStyle);\n }\n }\n if (this.colHeaderGroup.border) {\n this.colHeaderGroup.appendChild(this.colHeaderGroup.border);\n updateFrameBorderSize(this.colHeaderGroup);\n if (this.cornerHeaderGroup.attribute.width === 0) {\n updateFrameBorder(this.colHeaderGroup, this.table.theme.headerStyle.frameStyle);\n } else {\n updateFrameBorder(this.colHeaderGroup, this.table.theme.headerStyle.frameStyle);\n }\n }\n if (this.rowHeaderGroup.border) {\n this.rowHeaderGroup.appendChild(this.rowHeaderGroup.border);\n updateFrameBorderSize(this.rowHeaderGroup);\n }\n if (this.cornerHeaderGroup.border) {\n this.cornerHeaderGroup.appendChild(this.cornerHeaderGroup.border);\n updateFrameBorderSize(this.cornerHeaderGroup);\n }\n if (this.leftBottomCornerGroup.border) {\n this.leftBottomCornerGroup.appendChild(this.leftBottomCornerGroup.border);\n updateFrameBorderSize(this.leftBottomCornerGroup);\n }\n if (this.bottomFrozenGroup.border) {\n this.bottomFrozenGroup.appendChild(this.bottomFrozenGroup.border);\n updateFrameBorderSize(this.bottomFrozenGroup);\n }\n if (this.rightFrozenGroup.border) {\n this.rightFrozenGroup.appendChild(this.rightFrozenGroup.border);\n updateFrameBorderSize(this.rightFrozenGroup);\n }\n if (this.rightTopCornerGroup.border) {\n this.rightTopCornerGroup.appendChild(this.rightTopCornerGroup.border);\n updateFrameBorderSize(this.rightTopCornerGroup);\n }\n if (this.rightBottomCornerGroup.border) {\n this.rightBottomCornerGroup.appendChild(this.rightBottomCornerGroup.border);\n updateFrameBorderSize(this.rightBottomCornerGroup);\n }\n\n updateCornerRadius(this.table);\n }\n\n sortCell() {\n if (this.isPivot) {\n // 透视表外部处理排序\n } else if ((this.table as any).transpose) {\n this.proxy.sortCellHorizontal();\n } else {\n this.proxy.sortCellVertical();\n }\n }\n\n getCellOverflowText(col: number, row: number): string | null {\n const cellGroup = this.getCell(col, row);\n const text = cellGroup.getChildByName('text', true) as unknown as Text | RichText;\n\n if (text && text.type === 'text') {\n if ((text.attribute as any).moreThanMaxCharacters) {\n return this.table.getCellValue(col, row);\n }\n // const textAttributeStr = isArray(text.attribute.text)\n // ? text.attribute.text.join('')\n // : (text.attribute.text as string);\n // let cacheStr = '';\n // if (isString(text.cache.clipedText)) {\n // cacheStr = text.cache.clipedText;\n // } else {\n // (text.cache as ITextCache).layoutData?.lines?.forEach((line: any) => {\n // cacheStr += line.str;\n // });\n // }\n // if (cacheStr !== textAttributeStr) {\n // // return textAttributeStr;\n // return this.table.getCellValue(col, row);\n // }\n\n if (text.cliped) {\n return this.table.getCellValue(col, row);\n }\n } else if (text && text.type === 'richtext') {\n const richtext = text;\n if (\n richtext.attribute.ellipsis &&\n richtext._frameCache &&\n richtext.attribute.height < richtext._frameCache.actualHeight\n ) {\n const textConfig = richtext.attribute.textConfig.find((item: any) => item.text);\n // return (textConfig as any).text as string;\n return this.table.getCellValue(col, row);\n }\n }\n return null;\n }\n\n updateDrill(visible: boolean, x: number, y: number, drillDown: boolean, drillUp: boolean) {\n this.component.drillIcon.update(visible, x, y, drillDown, drillUp, this);\n }\n\n updateCellContent(col: number, row: number, forceFastUpdate: boolean = false) {\n if (this.clear) {\n return undefined;\n }\n return updateCell(col, row, this.table, undefined, undefined, forceFastUpdate);\n }\n\n setPixelRatio(pixelRatio: number) {\n // this.stage.setDpr(pixelRatio);\n // 这里因为本时刻部分节点有更新bounds标记,直接render回导致开启DirtyBounds,无法完整重绘画布;\n // 所以这里先关闭DirtyBounds,等待下一帧再开启\n this.stage.disableDirtyBounds();\n this.stage.window.setDpr(pixelRatio);\n this.stage.render();\n this.stage.enableDirtyBounds();\n }\n\n updateRow(\n removeCells: CellAddress[],\n addCells: CellAddress[],\n updateCells: CellAddress[] = [],\n recalculateColWidths: boolean = true,\n skipUpdateProxy?: boolean\n ) {\n this.table.internalProps.layoutMap.clearCellRangeMap();\n this.table.internalProps.useOneRowHeightFillAll = false;\n const addRows = deduplication(addCells.map(cell => cell.row)).sort((a, b) => a - b);\n const updateRows = deduplication(updateCells.map(cell => cell.row)).sort((a, b) => a - b);\n //这个值是后续为了autoFillHeight判断逻辑中用到的 判断是否更新前是未填满的情况\n const isNotFillHeight =\n this.table.getAllRowsHeight() -\n [...addRows, ...updateRows].reduce((tolHeight, rowNumber) => {\n return tolHeight + this.table.getRowHeight(rowNumber);\n }, 0) <=\n this.table.tableNoFrameHeight;\n\n // add or move rows\n updateRow(removeCells, addCells, updateCells, this.table, skipUpdateProxy);\n\n // update column width and row height\n\n recalculateColWidths && this.recalculateColWidths();\n\n // this.recalculateRowHeights();\n\n if (\n this.table.heightMode === 'adaptive' ||\n (this.table.autoFillHeight && (this.table.getAllRowsHeight() <= this.table.tableNoFrameHeight || isNotFillHeight))\n ) {\n this.table.scenegraph.recalculateRowHeights();\n } else if (this.table.isAutoRowHeight(this.table.columnHeaderLevelCount)) {\n // if (updateCells.length > 0) {\n // this.table.scenegraph.recalculateRowHeights();\n // }\n for (let i = 0; i < updateRows.length; i++) {\n const row = updateRows[i];\n // const oldHeight = this.table.getRowHeight(row);\n const oldHeight = this.table.rowHeightsMap.get(row); // 避免在小数情况下的自动取整\n const newHeight = computeRowHeight(row, 0, this.table.colCount - 1, this.table);\n if (\n (row >= this.proxy.rowStart && row <= this.proxy.rowEnd) ||\n (row >= this.table.rowCount - this.table.bottomFrozenRowCount && row <= this.table.rowCount - 1)\n ) {\n this.table.scenegraph.updateRowHeight(row, newHeight - oldHeight);\n }\n }\n }\n // check frozen status\n this.table.stateManager.checkFrozen();\n\n // update frozen shadow\n if (!this.isPivot && !(this.table as any).transpose) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else if (this.table.options.frozenColCount) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n } else if (this.table.options.rightFrozenColCount) {\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n }\n\n this.component.updateScrollBar();\n\n // rerender\n this.updateNextFrame();\n }\n updateCol(removeCells: CellAddress[], addCells: CellAddress[], updateCells: CellAddress[] = []) {\n // add or move rows\n updateCol(removeCells, addCells, updateCells, this.table);\n\n // update column width and row height\n\n this.recalculateColWidths();\n\n this.recalculateRowHeights();\n\n // check frozen status\n this.table.stateManager.checkFrozen();\n\n // update frozen shadow\n if (!this.isPivot && !(this.table as any).transpose) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else if (this.table.options.frozenColCount) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n } else if (this.table.options.rightFrozenColCount) {\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n }\n\n this.component.updateScrollBar();\n\n // rerender\n this.updateNextFrame();\n }\n\n updateCornerHeaderCells() {\n for (let col = 0; col < this.table.frozenColCount; col++) {\n for (let row = 0; row < this.table.frozenRowCount; row++) {\n // const cellGroup = this.highPerformanceGetCell(col, row);\n // cellGroup && (cellGroup.needUpdate = true);\n updateCell(col, row, this.table, false);\n }\n }\n }\n updateRowHeaderCells() {\n for (let col = 0; col < this.table.frozenColCount; col++) {\n for (let row = this.table.frozenRowCount; row < this.table.rowCount; row++) {\n // const cellGroup = this.highPerformanceGetCell(col, row);\n // cellGroup && (cellGroup.needUpdate = true);\n updateCell(col, row, this.table, false);\n }\n }\n }\n updateColumnHeaderCells() {\n for (let row = 0; row < this.table.frozenRowCount; row++) {\n for (let col = this.table.frozenColCount; col < this.table.colCount; col++) {\n updateCell(col, row, this.table, false);\n }\n }\n }\n getColumnGroupX(col: number) {\n if (col < this.table.rowHeaderLevelCount) {\n // row header\n return this.table.getColsWidth(0, col - 1);\n } else if (col < this.table.colCount - this.table.rightFrozenColCount) {\n // body\n return this.table.getColsWidth(this.table.rowHeaderLevelCount, col - 1);\n } else if (col < this.table.colCount) {\n // right frozen\n return this.table.getColsWidth(this.table.colCount - this.table.bottomFrozenRowCount, col - 1);\n }\n return 0;\n }\n\n getCellGroupY(row: number) {\n if (row < this.table.frozenRowCount) {\n // column header\n return this.table.getRowsHeight(0, row - 1);\n } else if (row < this.table.rowCount - this.table.bottomFrozenRowCount) {\n // body\n return this.table.getRowsHeight(this.table.columnHeaderLevelCount, row - 1);\n } else if (row < this.table.rowCount) {\n // bottom frozen\n return this.table.getRowsHeight(this.table.rowCount - this.table.bottomFrozenRowCount, row - 1);\n }\n return 0;\n }\n getCellGroupX(col: number) {\n if (col < this.table.rowHeaderLevelCount) {\n // column header\n return this.table.getColsWidth(0, col - 1);\n } else if (col < this.table.colCount - this.table.rightFrozenColCount) {\n // body\n return this.table.getColsWidth(this.table.rowHeaderLevelCount, col - 1);\n } else if (col < this.table.colCount) {\n // bottom frozen\n return this.table.getColsWidth(this.table.colCount - this.table.rightFrozenColCount, col - 1);\n }\n return 0;\n }\n // /** 更新场景树某个单元格的值 */\n // updateCellValue(col: number, row: number) {\n // updateCell(col, row, this.table);\n // }\n updateDomContainer() {\n updateReactContainer(this.table);\n }\n\n setLoadingHierarchyState(col: number, row: number) {\n const cellGroup = this.getCell(col, row);\n const iconGraphic = cellGroup.getChildByName('collapse', true) || cellGroup.getChildByName('expand', true);\n if (iconGraphic) {\n const regedIcons = registerIcons.get();\n const loadingIcon = regedIcons[InternalIconName.loadingIconName];\n if (loadingIcon) {\n dealWithIcon(loadingIcon, iconGraphic, col, row);\n }\n }\n }\n\n temporarilyUpdateSelectRectStyle(rectAttribute: IRectGraphicAttribute) {\n temporarilyUpdateSelectRectStyle(rectAttribute, this);\n }\n\n resetSelectRectStyle() {\n this.recreateAllSelectRangeComponents();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/scenegraph/scenegraph.ts"],"names":[],"mappings":"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","file":"scenegraph.js","sourcesContent":["import type { IStage, IRect, ITextCache, INode, Text, RichText, Stage, IRectGraphicAttribute } from './../vrender';\nimport { createStage, createRect, IContainPointMode, container, vglobal, registerForVrender } from './../vrender';\nimport type { CellRange, CellSubLocation, PivotChartConstructorOptions } from '../ts-types';\nimport {\n type CellAddress,\n type CellLocation,\n type ColumnIconOption,\n type SortOrder,\n IconFuncTypeEnum,\n InternalIconName\n} from '../ts-types';\nimport { isArray, isString, isValid } from '@visactor/vutils';\nimport type { Group } from './graphic/group';\nimport type { Icon } from './graphic/icon';\nimport { getCellMergeInfo } from './utils/get-cell-merge';\nimport { updateColWidth } from './layout/update-width';\nimport { TableComponent } from './component/table-component';\nimport { updateRowHeight } from './layout/update-height';\nimport { updateImageCellContentWhileResize } from './group-creater/cell-type/image-cell';\nimport { getQuadProps } from './utils/padding';\nimport { createFrameBorder, updateCornerRadius, updateFrameBorder, updateFrameBorderSize } from './style/frame-border';\nimport splitModule from './graphic/contributions';\nimport { getFunctionalProp, getProp } from './utils/get-prop';\nimport { dealWithIcon } from './utils/text-icon-layout';\nimport { SceneProxy } from './group-creater/progress/proxy';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport { computeColWidth, computeColsWidth, getAdaptiveWidth } from './layout/compute-col-width';\nimport { moveHeaderPosition } from './layout/move-cell';\nimport { updateCell } from './group-creater/cell-helper';\nimport type { BaseTableAPI, HeaderData } from '../ts-types/base-table';\nimport { updateAllSelectComponent, updateCellSelectBorder } from './select/update-select-border';\nimport { createCellSelectBorder } from './select/create-select-border';\nimport { moveSelectingRangeComponentsToSelectedRangeComponents } from './select/move-select-border';\nimport {\n deleteAllSelectBorder,\n deleteAllSelectingBorder,\n deleteLastSelectedRangeComponents,\n removeFillHandleFromSelectComponents\n} from './select/delete-select-border';\nimport { updateRow } from './layout/update-row';\nimport { handleTextStick } from './stick-text';\nimport { computeRowHeight, computeRowsHeight } from './layout/compute-row-height';\nimport { emptyGroup } from './utils/empty-group';\nimport { dealBottomFrozen, dealFrozen, dealRightFrozen, resetFrozen, resetRowFrozen } from './layout/frozen';\nimport {\n clearCellChartCacheImage,\n updateChartSizeForResizeColWidth,\n updateChartSizeForResizeRowHeight,\n updateChartState\n} from './refresh-node/update-chart';\nimport { initSceneGraph } from './group-creater/init-scenegraph';\nimport { updateContainerChildrenX, updateContainerChildrenY } from './utils/update-container';\nimport type { CheckBox } from './../vrender';\nimport { loadPoptip, setPoptipTheme } from './../vrender';\nimport textMeasureModule from './utils/text-measure';\nimport {\n getIconByXY,\n hideClickIcon,\n hideHoverIcon,\n resetResidentHoverIcon,\n residentHoverIcon,\n setIconHoverStyle,\n setIconNormalStyle,\n showClickIcon,\n showHoverIcon,\n updateFrozenIcon,\n updateHierarchyIcon,\n updateSortIcon\n} from './icon/icon-update';\nimport { Env } from '../tools/env';\nimport { createCornerCell } from './style/corner-cell';\nimport { updateCol } from './layout/update-col';\nimport { deduplication } from '../tools/util';\nimport { getDefaultHeight, getDefaultWidth } from './group-creater/progress/default-width-height';\nimport { dealWithAnimationAppear } from './animation/appear';\nimport { updateReactContainer } from './layout/frozen-react';\n\nimport * as registerIcons from '../icons';\nimport { temporarilyUpdateSelectRectStyle } from './select/update-select-style';\nimport type { CheckboxContent } from './component/checkbox-content';\n// import { contextModule } from './context/module';\n\nimport type { FederatedPointerEvent } from './../vrender';\nimport { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport { getCellEventArgsSet } from '../event/util';\nimport type { SceneEvent } from '../event/util';\nimport type { Chart } from './graphic/chart';\nimport {\n clearAndReleaseBrushingChartInstance,\n getBrushingChartInstance,\n getBrushingChartInstanceCellPos\n} from './graphic/active-cell-chart-list';\n\nregisterForVrender();\n\n// VChart poptip theme\n// loadPoptip();\ncontainer.load(splitModule);\ncontainer.load(textMeasureModule);\n// container.load(renderServiceModule);\n// container.load(contextModule);\n// console.log(container);\n\nexport type MergeMap = Map<\n string,\n {\n cellWidth: number;\n cellHeight: number;\n }\n>;\n\n/**\n * @description: 表格场景树,存储和管理表格全部的场景图元\n * @return {*}\n */\nexport class Scenegraph {\n proxy: SceneProxy;\n tableGroup: Group; // 表格全局Group\n colHeaderGroup: Group; // 列表头Group\n cornerHeaderGroup: Group; // 列表头冻结列Group\n rowHeaderGroup: Group; // 行表头Group\n bodyGroup: Group; // 内容Group\n rightFrozenGroup: Group; // 右侧冻结列Group\n bottomFrozenGroup: Group; // 下侧冻结行Group\n rightTopCornerGroup: Group; // 右上角占位单元格Group,只在有右侧冻结列时使用\n leftBottomCornerGroup: Group; // 左下角占位单元格Group,只在有下侧冻结行时使用\n rightBottomCornerGroup: Group; // 右下角占位单元格Group,只在有右侧下侧都有冻结行时使用\n componentGroup: Group; // 表格外组件Group\n /** 所有选中区域对应的选框组件 */\n selectedRangeComponents: Map<string, { rect: IRect; fillhandle?: IRect; role: CellSubLocation }>;\n /** 当前正在选择区域对应的选框组件 为什么是map 以为可能一个选中区域会被拆分为多个rect组件 三块表头和body都分别对应不同组件*/\n selectingRangeComponents: Map<string, { rect: IRect; fillhandle?: IRect; role: CellSubLocation }>;\n customSelectedRangeComponents: Map<string, { rect: IRect; role: CellSubLocation }>;\n lastSelectId: string;\n component: TableComponent;\n stage: IStage;\n table: BaseTableAPI;\n isPivot: boolean;\n // transpose: boolean;\n hasFrozen: boolean; // 是否已经处理冻结列,用在getCell判断是否从cornerHeaderGroup获取cellGroup\n frozenColCount: number; // 冻结列数\n frozenRowCount: number; // 冻结行数\n clear: boolean;\n\n mergeMap: MergeMap;\n _dealAutoFillHeightOriginRowsHeight: number; // hack 缓存一个值 用于处理autoFillHeight的逻辑判断 在某些情况下是需要更新此值的 如增删数据 但目前没有做这个\n\n _needUpdateContainer: boolean = false;\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.hasFrozen = false;\n this.clear = true;\n this.mergeMap = new Map();\n\n setPoptipTheme(this.table.theme.textPopTipStyle);\n let width;\n let height;\n if (Env.mode === 'node') {\n vglobal.setEnv('node', table.options.modeParams);\n width = table.canvasWidth;\n height = table.canvasHeight;\n } else if (table.options.canvas && table.options.viewBox) {\n vglobal.setEnv('browser');\n width = table.options.viewBox.x2 - table.options.viewBox.x1;\n height = table.options.viewBox.y2 - table.options.viewBox.y1;\n } else {\n vglobal.setEnv('browser');\n width = table.canvas.width;\n height = table.canvas.height;\n }\n this.stage = createStage({\n canvas: table.canvas,\n width,\n height,\n disableDirtyBounds: false,\n background: table.theme.underlayBackgroundColor,\n dpr: table.internalProps.pixelRatio,\n enableLayout: true,\n // enableHtmlAttribute: true,\n // pluginList: table.isPivotChart() ? ['poptipForText'] : undefined,\n beforeRender: (stage: Stage) => {\n this.table.options.beforeRender && this.table.options.beforeRender(stage);\n this.table.animationManager.ticker.start();\n },\n afterRender: (stage: Stage) => {\n this.table.options.afterRender && this.table.options.afterRender(stage);\n this.table.fireListeners('after_render', null);\n // console.trace('after_render');\n },\n // event: { clickInterval: 400 }\n // autoRender: true\n\n canvasControled: !table.options.canvas,\n viewBox: table.options.viewBox,\n ...table.options.renderOption\n });\n\n this.stage.defaultLayer.setTheme({\n group: {\n boundsPadding: 0,\n strokeBoundsBuffer: 0,\n lineJoin: 'round'\n },\n text: {\n ignoreBuf: true\n }\n });\n this.initSceneGraph();\n this.stage.defaultLayer.add(this.tableGroup);\n\n (this.stage as any).table = this.table;\n\n this.createComponent();\n }\n\n get width(): number {\n return this.tableGroup.attribute?.width ?? 0;\n }\n\n get height(): number {\n return this.tableGroup.attribute?.height ?? 0;\n }\n\n get x(): number {\n return this.tableGroup.attribute?.x ?? 0;\n }\n\n get y(): number {\n return this.tableGroup.attribute?.y ?? 0;\n }\n\n get bodyRowStart(): number {\n return this.proxy.rowStart ?? 0;\n }\n\n get bodyRowEnd(): number {\n return this.proxy.rowEnd ?? this.table.rowCount - 1;\n }\n\n get bodyColStart(): number {\n return this.proxy.colStart ?? 0;\n }\n\n get bodyColEnd(): number {\n return this.proxy.colEnd ?? this.table.colCount - 1;\n }\n\n /**\n * @description: 初始化场景树结构\n * @return {*}\n */\n initSceneGraph() {\n this.isPivot = this.table.isPivotTable();\n // (this.table as any).transpose = (this.table.options as any).transpose; // 初始化时this.table.transpose还未赋值\n initSceneGraph(this);\n }\n\n /**\n * @description: 表格空数据或者少数据,在画布右键显示menu。col/row = -1 表示没有选中表格中的单元格\n * @return {*}\n */\n canvasShowMenu() {\n this.stage.addEventListener('rightdown', (e: FederatedPointerEvent) => {\n const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (!eventArgsSet.eventArgs) {\n this.table.stateManager.triggerContextMenu(-1, -1, eventArgsSet.abstractPos.x, eventArgsSet.abstractPos.y);\n this.table.fireListeners(TABLE_EVENT_TYPE.CONTEXTMENU_CANVAS, {\n event: e,\n x: eventArgsSet.abstractPos.x,\n y: eventArgsSet.abstractPos.y,\n col: -1,\n row: -1,\n target: undefined\n });\n }\n });\n }\n\n /**\n * @description: 清空全部单元格内容,用于setRecord\n * @return {*}\n */\n clearCells() {\n this.table.animationManager.clear();\n // unbind AutoPoptip\n if (this.table.isPivotChart() || this.table._hasCustomRenderOrLayout()) {\n // bind for axis label in pivotChart\n this.stage.pluginService.findPluginsByName('poptipForText').forEach(plugin => {\n plugin.deactivate(this.stage.pluginService);\n });\n }\n\n this.clear = true;\n this.hasFrozen = false;\n this.mergeMap.clear();\n\n this.colHeaderGroup.clear();\n delete this.colHeaderGroup.border;\n this.rowHeaderGroup.clear();\n delete this.rowHeaderGroup.border;\n this.cornerHeaderGroup.clear();\n delete this.cornerHeaderGroup.border;\n this.bodyGroup.clear();\n delete this.bodyGroup.border;\n\n this.bottomFrozenGroup.clear();\n delete this.bottomFrozenGroup.border;\n this.rightFrozenGroup.clear();\n delete this.rightFrozenGroup.border;\n this.rightTopCornerGroup.clear();\n delete this.rightTopCornerGroup.border;\n this.rightBottomCornerGroup.clear();\n delete this.rightBottomCornerGroup.border;\n this.leftBottomCornerGroup.clear();\n delete this.leftBottomCornerGroup.border;\n\n this.colHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rowHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.cornerHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.bodyGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rightFrozenGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.bottomFrozenGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rightTopCornerGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false\n });\n this.leftBottomCornerGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false\n });\n this.rightBottomCornerGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n visible: false\n });\n\n this.tableGroup.setAttributes({\n x: this.table.tableX,\n y: this.table.tableY,\n width: 0,\n height: 0\n } as any);\n\n if ((this.tableGroup as any).border) {\n (this.tableGroup.parent as Group).removeChild((this.tableGroup as any).border);\n delete (this.tableGroup as any).border;\n }\n this.proxy?.release();\n\n this.table.reactCustomLayout?.clearCache();\n }\n\n updateStageBackground() {\n this.stage.background = this.table.theme.underlayBackgroundColor;\n this.stage.renderNextFrame();\n }\n\n /**\n * @description: 初始化表格外组件\n * @return {*}\n */\n createComponent() {\n this.component = new TableComponent(this.table);\n this.component.addToGroup(this.componentGroup);\n this.selectedRangeComponents = new Map();\n this.selectingRangeComponents = new Map();\n this.customSelectedRangeComponents = new Map();\n }\n\n updateComponent() {\n this.component.updateStyle();\n }\n\n /**\n * @description: 依据数据创建表格场景树\n * @return {*}\n */\n createSceneGraph(skipRowHeightClear = false) {\n if (!skipRowHeightClear) {\n this.table.rowHeightsMap.clear();\n this.table.internalProps.layoutMap.clearCellRangeMap();\n }\n\n // bind AutoPoptip\n if (this.table.isPivotChart() || this.table._hasCustomRenderOrLayout()) {\n // bind for axis label in pivotChart\n (this.stage.pluginService as any).autoEnablePlugins.getContributions().forEach((p: any) => {\n if (p.name === 'poptipForText') {\n this.stage.pluginService.register(p);\n }\n });\n }\n\n this.clear = false;\n // this.frozenColCount = this.table.rowHeaderLevelCount;\n this.frozenColCount = this.table.frozenColCount;\n this.frozenRowCount = this.table.frozenRowCount;\n\n this.proxy = new SceneProxy(this.table);\n\n // update table group position for cell group global position, not create border yet.\n createFrameBorder(this.tableGroup, this.table.theme.frameStyle, this.tableGroup.role, undefined, true);\n\n if (this.table.isPivotChart()) {\n createCornerCell(\n this.rightTopCornerGroup,\n this.table.theme.cornerRightTopCellStyle || this.table.theme.cornerHeaderStyle || {}\n );\n createCornerCell(\n this.leftBottomCornerGroup,\n this.table.theme.cornerLeftBottomCellStyle || this.table.theme.cornerHeaderStyle || {}\n );\n createCornerCell(\n this.rightBottomCornerGroup,\n this.table.theme.cornerRightBottomCellStyle || this.table.theme.cornerHeaderStyle || {}\n );\n }\n\n this.proxy.createGroupForFirstScreen(\n this.cornerHeaderGroup,\n this.colHeaderGroup,\n this.rowHeaderGroup,\n this.rightFrozenGroup,\n this.bottomFrozenGroup,\n this.bodyGroup,\n 0,\n 0\n );\n this.afterScenegraphCreated();\n }\n\n /**\n * @description: 绘制场景树\n * @param {any} element\n * @param {CellRange} visibleCoord\n * @return {*}\n */\n renderSceneGraph() {\n this.stage.render();\n }\n\n /**\n * @description: 获取指定行列位置的cell group\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCell(col: number, row: number, getShadow?: boolean): Group {\n // hasFrozen处理前,列表头的冻结部分在colHeaderGroup中\n // hasFrozen处理后,列表头的冻结部分在cornerHeaderGroup中\n // 因此在获取cell时需要区别hasFrozen时机\n // const colGroup = row < this.frozenRowCount ? this.colHeaderGroup : this.cornerHeaderGroup;\n let cell;\n if (\n this.table.rightFrozenColCount > 0 &&\n col >= this.table.colCount - this.table.rightFrozenColCount &&\n row < this.table.frozenRowCount\n ) {\n cell = this.rightTopCornerGroup.getColGroup(col)?.getRowGroup(row);\n } else if (\n this.table.bottomFrozenRowCount > 0 &&\n row >= this.table.rowCount - this.table.bottomFrozenRowCount &&\n col < this.table.frozenColCount\n ) {\n cell = this.leftBottomCornerGroup.getColGroup(col)?.getRowGroup(row);\n } else if (\n this.table.rightFrozenColCount > 0 &&\n this.table.bottomFrozenRowCount > 0 &&\n col >= this.table.colCount - this.table.rightFrozenColCount &&\n row >= this.table.rowCount - this.table.bottomFrozenRowCount\n ) {\n cell = this.rightBottomCornerGroup.getColGroup(col)?.getRowGroup(row);\n } else if (this.table.rightFrozenColCount > 0 && col > this.table.colCount - 1 - this.table.rightFrozenColCount) {\n cell = this.rightFrozenGroup.getColGroup(col)?.getRowGroup(row);\n } else if (this.table.bottomFrozenRowCount > 0 && row > this.table.rowCount - 1 - this.table.bottomFrozenRowCount) {\n cell = this.bottomFrozenGroup.getColGroup(col)?.getRowGroup(row);\n } else {\n cell = this.getColGroup(col, row < this.frozenRowCount)?.getRowGroup(row);\n }\n\n if (cell && cell.role === 'shadow-cell' && !getShadow) {\n const range = this.table.getCellRange(col, row);\n if (range.start.col === col && range.start.row === row) {\n // 理论上不会出现这种情况,但是在PivotChart会偶先,这里处理避免进入死循环\n // do nothing\n } else {\n cell = this.getCell(range.start.col, range.start.row);\n }\n }\n\n return cell || emptyGroup;\n }\n\n highPerformanceGetCell(col: number, row: number, getShadow?: boolean): Group {\n // if (!this.table.isHeader(col, row)) {\n return this.proxy.highPerformanceGetCell(col, row, getShadow);\n // }\n // return this.getCell(col, row, getShadow);\n }\n\n getColGroup(col: number, isCornerOrColHeader = false): Group {\n let element: Group;\n if (col < this.frozenColCount && isCornerOrColHeader) {\n element = this.cornerHeaderGroup.getColGroup(col) as Group;\n } else if (col < this.frozenColCount) {\n element = this.rowHeaderGroup.getColGroup(col) as Group;\n } else if (\n isCornerOrColHeader &&\n this.table.rightFrozenColCount > 0 &&\n col > this.table.colCount - 1 - this.table.rightFrozenColCount\n ) {\n element = this.rightTopCornerGroup.getColGroup(col) as Group;\n } else if (\n !isCornerOrColHeader &&\n this.table.rightFrozenColCount > 0 &&\n col > this.table.colCount - 1 - this.table.rightFrozenColCount\n ) {\n element = this.rightFrozenGroup.getColGroup(col) as Group;\n } else if (isCornerOrColHeader) {\n element = this.colHeaderGroup.getColGroup(col) as Group;\n } else {\n element = this.bodyGroup.getColGroup(col) as Group;\n }\n return element || undefined;\n }\n\n getColGroupInBottom(col: number, isCornerOrColHeader = false): Group | undefined {\n if (isCornerOrColHeader) {\n const element = this.getColGroupInLeftBottomCorner(col) ?? this.getColGroupInRightBottomCorner(col);\n if (element) {\n return element;\n }\n }\n if (this.table.bottomFrozenRowCount > 0) {\n return this.bottomFrozenGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n getColGroupInLeftBottomCorner(col: number): Group | undefined {\n if (this.table.bottomFrozenRowCount > 0) {\n return this.leftBottomCornerGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n getColGroupInRightTopCorner(col: number): Group | undefined {\n if (this.table.rightFrozenColCount > 0) {\n return this.rightTopCornerGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n getColGroupInRightBottomCorner(col: number): Group | undefined {\n if (this.table.rightFrozenColCount > 0 && this.table.bottomFrozenRowCount > 0) {\n return this.rightBottomCornerGroup.getColGroup(col) as Group;\n }\n return undefined;\n }\n\n /**\n * @description: 获取指定行列位置的cell的宽高,主要处理merge情况\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCellSize(col: number, row: number): { width: number; height: number } {\n const cell = this.getCell(col, row);\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n let width = cell.attribute.width;\n let height = cell.attribute.height;\n if (mergeInfo) {\n width = width / (mergeInfo.end.col - mergeInfo.start.col + 1);\n height = height / (mergeInfo.end.row - mergeInfo.start.row + 1);\n }\n return { width, height };\n }\n\n /**\n * @description: 触发下一帧渲染\n * @return {*}\n */\n updateNextFrame() {\n this.updateContainerSync();\n this.resetAllSelectComponent();\n\n this.stage.renderNextFrame();\n }\n resetAllSelectComponent() {\n if (\n this.table.stateManager.select?.ranges?.length > 0 ||\n this.table.stateManager.select?.customSelectRanges?.length > 0\n ) {\n updateAllSelectComponent(this);\n }\n }\n\n hideHoverIcon(col: number, row: number) {\n hideHoverIcon(col, row, this);\n }\n\n showHoverIcon(col: number, row: number) {\n showHoverIcon(col, row, this);\n }\n\n hideClickIcon(col: number, row: number) {\n hideClickIcon(col, row, this);\n }\n\n showClickIcon(col: number, row: number) {\n showClickIcon(col, row, this);\n }\n\n /**\n * @description: 获取指定单元格指定位置的icon mark\n * @param {number} col\n * @param {number} row\n * @param {number} x\n * @param {number} y\n * @return {*}\n */\n getIcon(col: number, row: number, x: number, y: number): Icon | undefined {\n return getIconByXY(col, row, x, y, this);\n }\n\n /**\n * @description: 将指定icon mark设置为Hover样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\n setIconHoverStyle(icon: Icon, col: number, row: number, cellGroup: Group) {\n setIconHoverStyle(icon, col, row, cellGroup, this);\n }\n\n updateSortIcon(options: {\n col: number;\n row: number;\n iconMark: Icon;\n order: SortOrder;\n oldSortCol: number;\n oldSortRow: number;\n oldIconMark: Icon | undefined;\n }) {\n const { col, row, iconMark, order, oldSortCol, oldSortRow, oldIconMark } = options;\n updateSortIcon({ col, row, iconMark, order, oldSortCol, oldSortRow, oldIconMark, scene: this });\n }\n\n updateFrozenIcon(col: number, oldFrozenCol: number) {\n updateFrozenIcon(this);\n }\n updateHierarchyIcon(col: number, row: number) {\n updateHierarchyIcon(col, row, this);\n }\n\n /**\n * @description: 将指定icon mark设置为Normal样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\n setIconNormalStyle(icon: Icon, col: number, row: number) {\n setIconNormalStyle(icon, col, row, this);\n }\n\n residentHoverIcon(col: number, row: number) {\n residentHoverIcon(col, row, this);\n }\n resetResidentHoverIcon(col: number, row: number) {\n resetResidentHoverIcon(col, row, this);\n }\n\n /**\n * 单元格失焦 失效该单元格对应的图表实例\n * @param col\n * @param row\n * @returns\n */\n deactivateChart(col: number, row: number, forceRelease: boolean = false) {\n if (forceRelease) {\n // 处理场景:brush操作后,鼠标直接移动到空白区域进行滚动,希望释放掉brush操作的图表实例\n const brushingChartInstanceCellPos = getBrushingChartInstanceCellPos();\n const brushingChartInstance = getBrushingChartInstance();\n if (brushingChartInstanceCellPos && brushingChartInstance) {\n clearAndReleaseBrushingChartInstance(this);\n //单独清理brush操作的单元格的chart缓存图片 因为updateChartState逻辑走到的clearChartCacheImage方法清理时排除了brushing cell的chart缓存图片(有绘制图片的那个共享图表实例覆盖到activechart实例上问题)\n clearCellChartCacheImage(brushingChartInstanceCellPos.col, brushingChartInstanceCellPos.row, this);\n }\n }\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n if ((cellGroup?.firstChild as any)?.deactivate) {\n if (forceRelease) {\n (cellGroup?.firstChild as any)?.deactivate?.(this.table, {\n forceRelease: true,\n releaseChartInstance: true,\n releaseColumnChartInstance: true,\n releaseRowChartInstance: true,\n releaseAllChartInstance: true\n });\n return;\n }\n const chartNode = cellGroup?.firstChild as Chart;\n const chartType = chartNode.attribute.spec.type;\n\n (cellGroup?.firstChild as any)?.deactivate?.(\n this.table,\n (this.table.options as PivotChartConstructorOptions).chartDimensionLinkage?.showTooltip\n ? {\n releaseChartInstance:\n chartType === 'pie'\n ? false\n : chartType === 'scatter' // 散点图一般是横纵crosshair 所以需要判断是否是hover的单元格 是否是超出图表显示区域到了边界表头或者轴单元格\n ? (col !== this.table.stateManager.hover.cellPos.col &&\n row !== this.table.stateManager.hover.cellPos.row) ||\n this.table.stateManager.hover.cellPos.row < this.table.frozenRowCount ||\n this.table.stateManager.hover.cellPos.row >\n this.table.rowCount - 1 - this.table.bottomFrozenRowCount ||\n this.table.stateManager.hover.cellPos.col < this.table.frozenColCount ||\n this.table.stateManager.hover.cellPos.col > this.table.colCount - 1 - this.table.rightFrozenColCount\n : (this.table.options as PivotChartConstructorOptions).indicatorsAsCol //非散点图的话判断是显示横向crosshair还是纵向crosshair\n ? row !== this.table.stateManager.hover.cellPos.row ||\n this.table.stateManager.hover.cellPos.col < this.table.frozenColCount ||\n this.table.stateManager.hover.cellPos.col > this.table.colCount - 1 - this.table.rightFrozenColCount\n : col !== this.table.stateManager.hover.cellPos.col ||\n this.table.stateManager.hover.cellPos.row < this.table.frozenRowCount ||\n this.table.stateManager.hover.cellPos.row >\n this.table.rowCount - 1 - this.table.bottomFrozenRowCount,\n releaseColumnChartInstance:\n chartType === 'pie'\n ? false\n : col !== this.table.stateManager.hover.cellPos.col ||\n this.table.stateManager.hover.cellPos.row < this.table.frozenRowCount ||\n this.table.stateManager.hover.cellPos.row >\n this.table.rowCount - 1 - this.table.bottomFrozenRowCount,\n releaseRowChartInstance:\n chartType === 'pie'\n ? false\n : row !== this.table.stateManager.hover.cellPos.row ||\n this.table.stateManager.hover.cellPos.col < this.table.frozenColCount ||\n this.table.stateManager.hover.cellPos.col > this.table.colCount - 1 - this.table.rightFrozenColCount\n }\n : undefined\n );\n }\n }\n /**\n * hover 到单元格上 激活该单元格对应的图表实例\n * @param col\n * @param row\n * @returns\n */\n activateChart(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n (cellGroup?.firstChild as any)?.activate?.(this.table);\n return (cellGroup?.firstChild as any)?.activeChartInstance;\n }\n\n removeInteractionBorder(col: number, row: number) {\n const cellGroup = this.getCell(col, row);\n cellGroup.setAttribute('highlightStroke', undefined);\n cellGroup.setAttribute('highlightStrokeArrayWidth', undefined);\n cellGroup.setAttribute('highlightStrokeArrayColor', undefined);\n }\n\n createCellSelectBorder(\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n selectRangeType: CellSubLocation,\n selectId: string, //整体区域${endRow}-${startCol}${startRow}${endCol}${endRow}作为其编号\n strokes?: boolean[]\n ) {\n createCellSelectBorder(this, start_Col, start_Row, end_Col, end_Row, selectRangeType, selectId, strokes);\n }\n moveSelectingRangeComponentsToSelectedRangeComponents() {\n moveSelectingRangeComponentsToSelectedRangeComponents(this);\n }\n /** 按住shift 则继续上次选中范围 需要将现有的删除掉 */\n deleteLastSelectedRangeComponents() {\n deleteLastSelectedRangeComponents(this);\n }\n deleteAllSelectBorder() {\n deleteAllSelectBorder(this);\n deleteAllSelectingBorder(this);\n }\n\n updateCellSelectBorder(selectRange: CellRange & { skipBodyMerge?: boolean }, extendSelectRange: boolean = true) {\n updateCellSelectBorder(this, selectRange, extendSelectRange);\n }\n\n removeFillHandleFromSelectComponents() {\n removeFillHandleFromSelectComponents(this);\n }\n /** 根据select状态重新创建选中range节点 */\n recreateAllSelectRangeComponents() {\n deleteAllSelectBorder(this);\n this.table.stateManager.select.ranges.forEach((cellRange: CellRange) => {\n updateCellSelectBorder(this, cellRange);\n moveSelectingRangeComponentsToSelectedRangeComponents(this);\n });\n }\n /**\n * @description: 列宽调整结果更新列宽\n * @param {number} col\n * @param {number} detaX 改变的宽度值\n * @return {*}\n */\n updateColWidth(col: number, detaX: number, skipUpdateContainer?: boolean, skipTableWidthMap?: boolean) {\n updateColWidth(this, col, Math.round(detaX), skipTableWidthMap);\n // this.updateContainerWidth(col, detaX);\n if (!skipUpdateContainer) {\n // this.updateContainerAttrWidthAndX();\n this.updateContainer({ async: true });\n }\n }\n\n /**\n * @description: 列宽调整需要修改Chart的尺寸\n * @param {number} col\n * @return {*}\n */\n updateChartSizeForResizeColWidth(col: number) {\n updateChartSizeForResizeColWidth(this, col);\n }\n\n /**\n * @description: 行高调整需要修改Chart的尺寸\n * @param {number} col\n * @return {*}\n */\n updateChartSizeForResizeRowHeight(row: number) {\n updateChartSizeForResizeRowHeight(this, row);\n }\n /** 更新图表的高亮状态 点击图元或者框选brush选中图元 一般有高亮状态*/\n updateChartState(datum: any, selectedDataMode: 'click' | 'brush') {\n if (this.table.isPivotChart()) {\n if (datum === null || datum === undefined || datum?.length === 0 || Object.keys(datum).length === 0) {\n const brushingChartInstance = getBrushingChartInstance();\n if (brushingChartInstance) {\n brushingChartInstance.getChart()?.getComponentsByKey('brush')[0].clearBrushStateAndMask();\n }\n (this.table.options as PivotChartConstructorOptions).chartDimensionLinkage?.clearChartState?.();\n }\n updateChartState(this, datum, selectedDataMode);\n }\n }\n\n updateCheckboxCellState(col: number, row: number, checked: boolean | 'indeterminate') {\n if ((this.table as any).transpose) {\n this.bodyGroup.children?.forEach((columnGroup: INode) => {\n columnGroup\n .getChildAt(row)\n ?.getChildren()\n .forEach((node: INode) => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n // 适配cellType: 'checkbox'与tree: true,并且开启enableTreeCheckbox: true的情况\n if (node.name === 'checkbox-content') {\n if (checked === 'indeterminate') {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n true\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n undefined\n );\n } else {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n undefined\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n checked\n );\n }\n }\n });\n });\n } else {\n const columnGroup = this.getColGroup(col);\n columnGroup?.children?.forEach((cellNode: INode) => {\n cellNode.getChildren().find(node => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n // 适配cellType: 'checkbox'与tree: true,并且开启enableTreeCheckbox: true的情况\n if (node.name === 'checkbox-content') {\n if (checked === 'indeterminate') {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n true\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n undefined\n );\n } else {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n undefined\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n checked\n );\n }\n }\n });\n });\n }\n }\n updateHeaderCheckboxCellState(col: number, row: number, checked: boolean | 'indeterminate') {\n if ((this.table as any).transpose) {\n this.rowHeaderGroup.children?.forEach((columnGroup: INode) => {\n columnGroup\n .getChildAt(row)\n .getChildren()\n .forEach((node: INode) => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n // 适配cellType: 'checkbox'与tree: true,并且开启enableTreeCheckbox: true的情况\n if (node.name === 'checkbox-content') {\n if (checked === 'indeterminate') {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n true\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n undefined\n );\n } else {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n undefined\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n checked\n );\n }\n }\n });\n });\n } else {\n const columnGroup = this.getColGroup(col, true);\n columnGroup.children?.forEach((cellNode: INode) => {\n cellNode.getChildren().find(node => {\n if (node.name === 'checkbox') {\n if (checked === 'indeterminate') {\n (node as CheckBox).setAttribute('indeterminate', true);\n (node as CheckBox).setAttribute('checked', undefined);\n } else {\n (node as CheckBox).setAttribute('indeterminate', undefined);\n (node as CheckBox).setAttribute('checked', checked);\n }\n }\n // 适配cellType: 'checkbox'与tree: true,并且开启enableTreeCheckbox: true的情况\n if (node.name === 'checkbox-content') {\n if (checked === 'indeterminate') {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n true\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n undefined\n );\n } else {\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'indeterminate',\n undefined\n );\n ((node as CheckboxContent)._checkboxGroup.getChildByName('checkbox') as CheckBox).setAttribute(\n 'checked',\n checked\n );\n }\n }\n });\n });\n }\n }\n updateAutoColWidth(col: number) {\n this.table.internalProps._widthResizedColMap.delete(col);\n const oldWidth = this.table.getColWidth(col);\n const newWidth = computeColWidth(col, 0, this.table.rowCount - 1, this.table, true);\n if (newWidth !== oldWidth) {\n this.updateColWidth(col, newWidth - oldWidth);\n }\n }\n\n /*\n * recalculates column width in all autowidth columns\n */\n recalculateColWidths() {\n const table = this.table;\n\n if (table.widthMode === 'adaptive' || table.autoFillWidth || table.internalProps.transpose) {\n computeColsWidth(this.table, 0, this.table.colCount - 1, true);\n } else {\n table._clearColRangeWidthsMap();\n // left frozen\n if (table.frozenColCount > 0) {\n computeColsWidth(this.table, 0, table.frozenColCount - 1, true);\n }\n // right frozen\n if (table.rightFrozenColCount > 0) {\n computeColsWidth(this.table, table.rightFrozenColCount, table.colCount - 1, true);\n }\n // body\n computeColsWidth(table, this.proxy.colStart, this.proxy.colEnd, true);\n }\n }\n\n recalculateRowHeights() {\n const table = this.table;\n table.internalProps.useOneRowHeightFillAll = false;\n if (table.heightMode === 'adaptive' || table.autoFillHeight) {\n computeRowsHeight(this.table, 0, this.table.rowCount - 1, true, true);\n } else {\n // top frozen\n if (table.frozenRowCount > 0) {\n computeRowsHeight(this.table, 0, table.frozenRowCount - 1, true, true);\n }\n // bottom frozen\n if (table.bottomFrozenRowCount > 0) {\n computeRowsHeight(this.table, table.bottomFrozenRowCount, table.rowCount - 1, true, true);\n }\n computeRowsHeight(table, this.proxy.rowStart, this.proxy.rowEnd, true, true);\n }\n }\n\n resize() {\n // reset proxy config\n this.proxy.resize();\n\n if (this.table.widthMode === 'adaptive' || this.table.autoFillWidth) {\n if (this.table.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n this.recalculateColWidths();\n } else {\n this.dealWidthMode();\n }\n }\n\n if (this.table.heightMode === 'adaptive') {\n // perf to be optimized:\n // reason to use recalculateRowHeights();\n // 1. error amplification(误差放大) in dealHeightMode when multiple resize\n // 2. width update caused height update dose not have enlarge/reduce number,\n // will cause scale error in dealHeightMode()\n if (this.table.internalProps._heightResizedRowMap.size === 0) {\n this.recalculateRowHeights();\n } else {\n this.dealHeightMode();\n }\n // this.dealHeightMode();\n } else if (this.table.autoFillHeight) {\n this.dealHeightMode();\n }\n\n // this.dealWidthMode();\n // this.dealHeightMode();\n this.resetFrozen();\n // this.dealFrozen();\n this.updateTableSize();\n this.updateBorderSizeAndPosition();\n this.component.updateScrollBar();\n if (\n this.table.widthMode === 'adaptive' ||\n this.table.heightMode === 'adaptive' ||\n this.table.autoFillWidth ||\n this.table.autoFillHeight ||\n this.table.containerFit?.width ||\n this.table.containerFit?.height\n ) {\n this.updateChartSizeForResizeColWidth(-1);\n }\n\n this.proxy.progress();\n // this.stage.window.resize(width, height);\n this.updateNextFrame();\n }\n\n updateTableSize() {\n // 计算内容的实际尺寸\n const contentWidth =\n Math.max(\n this.colHeaderGroup.attribute.width,\n this.bodyGroup.attribute.width,\n this.bottomFrozenGroup.attribute.width,\n 0\n ) +\n Math.max(\n this.cornerHeaderGroup.attribute.width,\n this.rowHeaderGroup.attribute.width,\n this.leftBottomCornerGroup.attribute.width,\n 0\n ) +\n Math.max(\n this.rightTopCornerGroup.attribute.width,\n this.rightFrozenGroup.attribute.width,\n this.rightBottomCornerGroup.attribute.width,\n 0\n );\n\n const contentHeight =\n Math.max(\n this.colHeaderGroup.attribute.height,\n this.cornerHeaderGroup.attribute.height,\n this.rightTopCornerGroup.attribute.height,\n 0\n ) +\n Math.max(\n this.rowHeaderGroup.attribute.height,\n this.bodyGroup.attribute.height,\n this.rightFrozenGroup.attribute.height,\n 0\n ) +\n Math.max(\n this.leftBottomCornerGroup.attribute.height,\n this.bottomFrozenGroup.attribute.height,\n this.rightBottomCornerGroup.attribute.height,\n 0\n );\n\n // 处理containerFit模式\n let tableWidth = contentWidth;\n let tableHeight = contentHeight;\n\n if (this.table.containerFit?.width) {\n // containerFit.width: 表格宽度等于容器宽度\n tableWidth = this.table.tableNoFrameWidth;\n } else {\n // 普通模式:表格宽度不超过容器宽度\n tableWidth = Math.min(this.table.tableNoFrameWidth, contentWidth);\n }\n\n if (this.table.containerFit?.height) {\n // containerFit.height: 表格高度等于容器高度\n tableHeight = this.table.tableNoFrameHeight;\n } else {\n // 普通模式:表格高度不超过容器高度\n tableHeight = Math.min(this.table.tableNoFrameHeight, contentHeight);\n }\n\n this.tableGroup.setAttributes({\n x: this.table.tableX,\n y: this.table.tableY,\n width: tableWidth,\n height: tableHeight\n } as any);\n\n if (this.tableGroup.border) {\n const rectAttributes = this.tableGroup.border?.attribute;\n let borderTop;\n let borderRight;\n let borderBottom;\n let borderLeft;\n if ((rectAttributes as any)?.strokeArrayWidth) {\n borderTop = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[0]\n : (rectAttributes.lineWidth as number) ?? 0;\n borderRight = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[1]\n : (rectAttributes.lineWidth as number) ?? 0;\n borderBottom = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[2]\n : (rectAttributes.lineWidth as number) ?? 0;\n borderLeft = (rectAttributes as any).strokeArrayWidth\n ? (rectAttributes as any).strokeArrayWidth[3]\n : (rectAttributes.lineWidth as number) ?? 0;\n } else {\n borderTop = (rectAttributes?.lineWidth as number) ?? 0;\n borderRight = (rectAttributes?.lineWidth as number) ?? 0;\n borderBottom = (rectAttributes?.lineWidth as number) ?? 0;\n borderLeft = (rectAttributes?.lineWidth as number) ?? 0;\n }\n if (this.tableGroup.border.type === 'rect') {\n if (this.table.theme.frameStyle?.innerBorder) {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX + borderLeft / 2,\n y: this.table.tableY + borderTop / 2,\n width: this.tableGroup.attribute.width - borderLeft / 2 - borderRight / 2,\n height: this.tableGroup.attribute.height - borderTop / 2 - borderBottom / 2\n });\n } else {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX - borderLeft / 2,\n y: this.table.tableY - borderTop / 2,\n width: this.tableGroup.attribute.width + borderLeft / 2 + borderRight / 2,\n height: this.tableGroup.attribute.height + borderTop / 2 + borderBottom / 2\n });\n }\n } else if (this.tableGroup.border.type === 'group') {\n if (this.table.theme.frameStyle?.innerBorder) {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX + borderLeft / 2,\n y: this.table.tableY + borderTop / 2,\n width: this.tableGroup.attribute.width - borderLeft / 2 - borderRight / 2,\n height: this.tableGroup.attribute.height - borderTop / 2 - borderBottom / 2\n });\n (this.tableGroup.border.firstChild as IRect)?.setAttributes({\n x: 0,\n y: 0,\n width: this.tableGroup.attribute.width - borderLeft / 2 - borderRight / 2,\n height: this.tableGroup.attribute.height - borderTop / 2 - borderBottom / 2\n });\n } else {\n this.tableGroup.border.setAttributes({\n x: this.table.tableX - borderLeft / 2,\n y: this.table.tableY - borderTop / 2,\n width: this.tableGroup.attribute.width + borderLeft / 2 + borderRight / 2,\n height: this.tableGroup.attribute.height + borderTop / 2 + borderBottom / 2\n });\n (this.tableGroup.border.firstChild as IRect)?.setAttributes({\n x: borderLeft / 2,\n y: borderTop / 2,\n width: this.tableGroup.attribute.width,\n height: this.tableGroup.attribute.height\n });\n }\n }\n }\n\n if (this.table.bottomFrozenRowCount > 0) {\n this.bottomFrozenGroup.setAttribute(\n 'y',\n this.tableGroup.attribute.height - this.table.getBottomFrozenRowsHeight()\n );\n this.leftBottomCornerGroup.setAttributes({\n visible: true,\n y: this.tableGroup.attribute.height - this.table.getBottomFrozenRowsHeight(),\n height: this.table.getBottomFrozenRowsHeight(),\n width: this.table.getFrozenColsWidth()\n });\n this.rightBottomCornerGroup.setAttributes({\n visible: true,\n y: this.tableGroup.attribute.height - this.table.getBottomFrozenRowsHeight(),\n height: this.table.getBottomFrozenRowsHeight()\n });\n }\n\n if (this.table.rightFrozenColCount > 0) {\n this.rightFrozenGroup.setAttribute('x', this.tableGroup.attribute.width - this.table.getRightFrozenColsWidth());\n this.rightTopCornerGroup.setAttributes({\n visible: true,\n x: this.tableGroup.attribute.width - this.table.getRightFrozenColsWidth(),\n width: this.table.getRightFrozenColsWidth(),\n height: this.table.getFrozenRowsHeight()\n });\n this.rightBottomCornerGroup.setAttributes({\n visible: true,\n x: this.tableGroup.attribute.width - this.table.getRightFrozenColsWidth(),\n width: this.table.getRightFrozenColsWidth()\n });\n }\n\n // update dom container size\n this.updateDomContainer();\n }\n\n updateRowHeight(row: number, detaY: number, skipTableHeightMap?: boolean) {\n detaY = Math.round(detaY);\n updateRowHeight(this, row, detaY, skipTableHeightMap);\n this.updateContainerHeight(row, detaY);\n }\n updateRowsHeight(rows: number[], detaYs: number[], skipTableHeightMap?: boolean) {\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (row >= this.proxy.rowStart && row <= this.proxy.rowEnd) {\n const detaY = detaYs[i];\n updateRowHeight(this, row, Math.round(detaY), skipTableHeightMap);\n this._updateContainerHeight(row, detaY);\n }\n }\n // 更新table/header/border高度\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n /**\n * @description: 更新table&header&body高度\n * @return {*}\n */\n updateContainerWidth(col: number, detaX: number) {\n // 更新table/header/border宽度\n if (col < this.frozenColCount) {\n this.rowHeaderGroup.setDeltaWidth(detaX);\n this.cornerHeaderGroup.setDeltaWidth(detaX);\n this.colHeaderGroup.setDeltaX(detaX);\n this.bodyGroup.setDeltaX(detaX);\n } else {\n this.colHeaderGroup.setDeltaWidth(detaX);\n this.bodyGroup.setDeltaWidth(detaX);\n }\n\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n _updateContainerHeight(row: number, detaY: number) {\n if (row < this.table.frozenRowCount) {\n this.colHeaderGroup.setDeltaHeight(detaY);\n this.cornerHeaderGroup.setDeltaHeight(detaY);\n this.rowHeaderGroup.setDeltaY(detaY);\n this.bodyGroup.setDeltaY(detaY);\n this.table.rightFrozenColCount && this.rightFrozenGroup.setDeltaY(detaY);\n } else if (row >= this.table.rowCount - this.table.bottomFrozenRowCount) {\n this.leftBottomCornerGroup.setDeltaHeight(detaY);\n this.bottomFrozenGroup.setDeltaHeight(detaY);\n this.table.rightFrozenColCount && this.rightBottomCornerGroup.setDeltaHeight(detaY);\n } else {\n this.rowHeaderGroup.setDeltaHeight(detaY);\n this.bodyGroup.setDeltaHeight(detaY);\n this.table.rightFrozenColCount && this.rightFrozenGroup.setDeltaHeight(detaY);\n }\n }\n /**\n * @description: 更新table&header&body高度\n * @return {*}\n */\n updateContainerHeight(row: number, detaY: number) {\n this._updateContainerHeight(row, detaY);\n // 更新table/header/border高度\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n setColWidth(col: number, width: number) {\n const oldWidth = this.table.getColWidth(col);\n if (oldWidth === width) {\n return;\n }\n this.updateColWidth(col, width - oldWidth);\n this.table._clearColRangeWidthsMap(col);\n }\n\n setRowHeight(row: number, height: number) {\n const oldHeight = this.table.getRowHeight(row);\n if (oldHeight === height) {\n return;\n }\n if (\n (row >= this.proxy.rowStart && row <= this.proxy.rowEnd) || // body\n (row >= this.table.rowCount - this.table.bottomFrozenRowCount && row <= this.table.rowCount - 1) || // bottom\n row < this.table.frozenRowCount\n ) {\n this.updateRowHeight(row, height - oldHeight);\n }\n this.table._clearRowRangeHeightsMap(row);\n }\n\n /**\n * @description: 设置表格的x位置,滚动中使用\n * @param {number} x\n * @return {*}\n */\n setX(x: number, isEnd = false) {\n this.table.scenegraph.proxy.setX(-x, isEnd);\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setY(y: number, isEnd = false) {\n this.table.scenegraph.proxy.setY(-y, isEnd);\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setBodyAndRowHeaderY(y: number) {\n // correct y, avoid scroll out of range\n const firstBodyCell =\n (this.bodyGroup.firstChild?.firstChild as Group) ?? (this.rowHeaderGroup.firstChild?.firstChild as Group);\n const lastBodyCell =\n (this.bodyGroup.firstChild?.lastChild as Group) ?? (this.rowHeaderGroup.firstChild?.lastChild as Group);\n if (\n y === 0 &&\n firstBodyCell &&\n firstBodyCell.row === this.table.frozenRowCount &&\n firstBodyCell.attribute.y + y < 0\n ) {\n y = -firstBodyCell.attribute.y;\n } else if (\n lastBodyCell &&\n this.table.tableNoFrameHeight < this.table.getAllRowsHeight() &&\n lastBodyCell.row === this.table.rowCount - this.table.bottomFrozenRowCount - 1 &&\n lastBodyCell.attribute.y + this.table.getRowHeight(lastBodyCell.row) + y <\n this.table.tableNoFrameHeight - this.table.getFrozenRowsHeight() - this.table.getBottomFrozenRowsHeight()\n ) {\n y =\n this.table.tableNoFrameHeight -\n this.table.getFrozenRowsHeight() -\n this.table.getBottomFrozenRowsHeight() -\n lastBodyCell.attribute.y -\n this.table.getRowHeight(lastBodyCell.row);\n }\n if (this.colHeaderGroup.attribute.height + y === this.bodyGroup.attribute.y) {\n return;\n }\n this.bodyGroup.setAttribute('y', this.colHeaderGroup.attribute.height + y);\n this.rowHeaderGroup.setAttribute('y', this.cornerHeaderGroup.attribute.height + y);\n if (this.table.rightFrozenColCount > 0) {\n this.rightFrozenGroup.setAttribute('y', this.rightTopCornerGroup.attribute.height + y);\n }\n // this.tableGroup.setAttribute('height', this.table.tableNoFrameHeight - y);\n // (this.tableGroup.lastChild as any).setAttribute('width', this.table.tableNoFrameWidth - x);\n this.updateNextFrame();\n }\n\n /**\n * @description: 更新表格的x位置,滚动中使用\n * @param {number} x\n * @return {*}\n */\n setBodyAndColHeaderX(x: number) {\n // correct x, avoid scroll out of range\n const firstBodyCol = this.bodyGroup.firstChild as Group;\n const lastBodyCol = this.bodyGroup.lastChild as Group;\n if (x === 0 && firstBodyCol && firstBodyCol.col === this.table.frozenColCount && firstBodyCol.attribute.x + x < 0) {\n x = -firstBodyCol.attribute.x;\n } else if (\n lastBodyCol &&\n this.table.tableNoFrameWidth < this.table.getAllColsWidth() &&\n lastBodyCol.col === this.table.colCount - this.table.rightFrozenColCount - 1 &&\n lastBodyCol.attribute.x + lastBodyCol.attribute.width + x <\n this.table.tableNoFrameWidth - this.table.getFrozenColsWidth() - this.table.getRightFrozenColsWidth()\n ) {\n x =\n this.table.tableNoFrameWidth -\n this.table.getFrozenColsWidth() -\n this.table.getRightFrozenColsWidth() -\n lastBodyCol.attribute.x -\n lastBodyCol.attribute.width;\n }\n if (this.table.getFrozenColsWidth() + x === this.bodyGroup.attribute.x) {\n return;\n }\n this.bodyGroup.setAttribute('x', this.table.getFrozenColsWidth() + x);\n this.colHeaderGroup.setAttribute('x', this.table.getFrozenColsWidth() + x);\n if (this.table.bottomFrozenRowCount > 0) {\n this.bottomFrozenGroup.setAttribute('x', this.table.getFrozenColsWidth() + x);\n }\n this.updateNextFrame();\n }\n\n /**\n * @description: 完成创建场景树节点后,处理自动行高列宽\n * @return {*}\n */\n afterScenegraphCreated() {\n // this.dealWidthMode();\n // this.dealHeightMode();\n // 处理冻结\n // this.resetFrozen();\n // this.dealFrozen();\n\n if (!this.isPivot && !(this.table as any).transpose) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else if (this.table.options.frozenColCount) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n } else if (this.table.options.rightFrozenColCount) {\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else {\n this.component.setFrozenColumnShadow(-1);\n }\n this.table.stateManager.checkFrozen();\n // this.updateContainerAttrWidthAndX();\n this.updateContainer();\n\n // 处理frame border\n this.createFrameBorder();\n this.updateBorderSizeAndPosition();\n\n // 更新滚动条状态\n this.component.updateScrollBar();\n\n // 处理单元格内容需要textStick的情况 入股这里不处理 只依赖异步proxy progress中处理 会有闪烁问题\n\n handleTextStick(this.table);\n\n // // temp add rect\n // const rect = createRect({\n // x: 200,\n // y: 200,\n // width: 100,\n // height: 100,\n // fill: 'red',\n // stroke: 'blue',\n // lineWidth: 1\n // });\n // this.tableGroup.addChild(rect);\n // deal with animation\n\n if (this.table.options.animationAppear) {\n dealWithAnimationAppear(this.table);\n }\n if (this.table.options.menu?.contextMenuWorkOnlyCell === false) {\n this.canvasShowMenu();\n }\n this.updateNextFrame();\n }\n\n /**\n * @description: 处理宽度模式\n * @return {*}\n */\n dealWidthMode() {\n const table = this.table;\n if (table.widthMode === 'adaptive') {\n table._clearColRangeWidthsMap();\n const canvasWidth = table.tableNoFrameWidth;\n let actualHeaderWidth = 0;\n let startCol = 0;\n let endCol = table.colCount;\n if (table.widthAdaptiveMode === 'only-body') {\n for (let col = 0; col < table.colCount; col++) {\n if (\n col < table.rowHeaderLevelCount ||\n (table.isPivotChart() && col >= table.colCount - table.rightFrozenColCount)\n ) {\n const colWidth = table.getColWidth(col);\n actualHeaderWidth += colWidth;\n }\n }\n startCol = table.rowHeaderLevelCount;\n endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n }\n\n getAdaptiveWidth(canvasWidth - actualHeaderWidth, startCol, endCol, false, [], table, true);\n } else if (table.autoFillWidth) {\n table._clearColRangeWidthsMap();\n const canvasWidth = table.tableNoFrameWidth;\n let actualHeaderWidth = 0;\n let actualWidth = 0;\n for (let col = 0; col < table.colCount; col++) {\n const colWidth = table.getColWidth(col);\n if (\n table.widthAdaptiveMode === 'only-body' &&\n (col < table.rowHeaderLevelCount ||\n (table.isPivotChart() && col >= table.colCount - table.rightFrozenColCount))\n ) {\n actualHeaderWidth += colWidth;\n }\n actualWidth += colWidth;\n }\n // 如果内容宽度小于canvas宽度,执行adaptive放大\n if (actualWidth < canvasWidth && actualWidth > actualHeaderWidth) {\n let startCol = 0;\n let endCol = table.colCount;\n if (table.widthAdaptiveMode === 'only-body') {\n startCol = table.rowHeaderLevelCount;\n endCol = table.isPivotChart() ? table.colCount - table.rightFrozenColCount : table.colCount;\n }\n getAdaptiveWidth(canvasWidth - actualHeaderWidth, startCol, endCol, false, [], table, true);\n }\n }\n\n // 更新容器宽度\n let bodyWidth = 0;\n this.bodyGroup.forEachChildrenSkipChild((column: Group) => {\n bodyWidth += column.attribute.width;\n });\n this.bodyGroup.setAttribute('width', bodyWidth);\n let colHeaderWidth = 0;\n this.colHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n colHeaderWidth += column.attribute.width;\n });\n this.colHeaderGroup.setAttribute('width', colHeaderWidth);\n let rowHeaderWidth = 0;\n this.rowHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n rowHeaderWidth += column.attribute.width;\n });\n this.rowHeaderGroup.setAttribute('width', rowHeaderWidth);\n let cornerHeaderWidth = 0;\n this.cornerHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n cornerHeaderWidth += column.attribute.width;\n });\n this.cornerHeaderGroup.setAttribute('width', cornerHeaderWidth);\n this.colHeaderGroup.setAttribute('x', this.cornerHeaderGroup.attribute.width);\n this.rowHeaderGroup.setAttribute('y', this.cornerHeaderGroup.attribute.height);\n this.bodyGroup.setAttributes({\n x: this.rowHeaderGroup.attribute.width,\n y: this.colHeaderGroup.attribute.height\n });\n }\n\n /**\n * @description: 处理高度模式\n * @return {*}\n */\n dealHeightMode() {\n const table = this.table;\n // 处理adaptive高度\n if (table.heightMode === 'adaptive') {\n table._clearRowRangeHeightsMap();\n // const canvasWidth = table.internalProps.canvas.width;\n const columnHeaderHeight = table.getRowsHeight(0, table.columnHeaderLevelCount - 1);\n const bottomHeaderHeight = table.isPivotChart() ? table.getBottomFrozenRowsHeight() : 0;\n const totalDrawHeight = table.tableNoFrameHeight - columnHeaderHeight - bottomHeaderHeight;\n const startRow = table.columnHeaderLevelCount;\n const endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;\n let actualHeight = 0;\n for (let row = startRow; row < endRow; row++) {\n actualHeight += table.getRowHeight(row);\n }\n const factor = totalDrawHeight / actualHeight;\n for (let row = startRow; row < endRow; row++) {\n let rowHeight;\n if (row === endRow - 1) {\n rowHeight = totalDrawHeight - table.getRowsHeight(startRow, endRow - 2);\n } else {\n rowHeight = Math.round(table.getRowHeight(row) * factor);\n }\n\n this.setRowHeight(row, rowHeight);\n }\n } else if (table.autoFillHeight) {\n table._clearRowRangeHeightsMap();\n const canvasHeight = table.tableNoFrameHeight;\n let actualHeight = 0;\n let actualHeaderHeight = 0;\n for (let row = 0; row < table.rowCount; row++) {\n const rowHeight = table.getRowHeight(row);\n if (\n row < table.columnHeaderLevelCount ||\n (table.isPivotChart() && row >= table.rowCount - table.bottomFrozenRowCount)\n ) {\n actualHeaderHeight += rowHeight;\n }\n\n actualHeight += rowHeight;\n }\n // table.scenegraph._dealAutoFillHeightOriginRowsHeight = actualHeight;\n // 如果内容高度小于canvas高度,执行adaptive放大\n if (\n (this._dealAutoFillHeightOriginRowsHeight ?? actualHeight) < canvasHeight &&\n actualHeight - actualHeaderHeight > 0\n ) {\n const startRow = table.columnHeaderLevelCount;\n const endRow = table.isPivotChart() ? table.rowCount - table.bottomFrozenRowCount : table.rowCount;\n const factor = (canvasHeight - actualHeaderHeight) / (actualHeight - actualHeaderHeight);\n for (let row = startRow; row < endRow; row++) {\n let rowHeight;\n if (row === endRow - 1) {\n rowHeight = canvasHeight - actualHeaderHeight - table.getRowsHeight(startRow, endRow - 2);\n } else {\n rowHeight = Math.round(table.getRowHeight(row) * factor);\n }\n this.setRowHeight(row, rowHeight);\n }\n }\n }\n }\n\n /**\n * @description: 处理冻结\n * @return {*}\n */\n dealFrozen() {\n dealFrozen(this);\n }\n\n /**\n * @description: 还原冻结\n * @return {*}\n */\n resetFrozen() {\n resetFrozen(this);\n }\n\n resetRowFrozen() {\n resetRowFrozen(this);\n }\n\n /**\n * @description: 判断指定列更新宽度时,其中单元格是否会更新宽度;如果更新宽度,返回true\n * @param {Group} columnGroup\n * @param {number} detaRow columnGroup内的index与row的差值,列表头为0;行表头和内容为table.frozenRowCount\n * @param {number} col\n * @return {*}\n */\n updateCellLayoutWidthCertainWidth(columnGroup: Group, detaRow: number, col: number) {\n const width = columnGroup.attribute.width;\n let isUpdate = false;\n columnGroup.forEachChildren((cellGroup: Group, row: number) => {\n row += detaRow;\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n if (mergeInfo) {\n cellGroup = this.getCell(mergeInfo.start.col, mergeInfo.start.row);\n // cellGroup.setAttribute('width', width);\n } else {\n cellGroup.setAttribute('width', width);\n }\n const headerStyle = this.table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', headerStyle, col, row, this.table));\n\n // const text = cellGroup.getChildAt(1) as Text;\n const text = cellGroup.getChildByName('text') as Text;\n let oldCellHeight = 0;\n let newCellHeight = 0;\n if (text) {\n oldCellHeight = text.AABBBounds.height() + (padding[0] + padding[2]);\n text.setAttribute('maxLineWidth', width - (padding[1] + padding[3]));\n newCellHeight = text.AABBBounds.height() + (padding[0] + padding[2]);\n } else {\n const group = cellGroup.getChildAt(1) as any;\n oldCellHeight = group.AABBBounds.height() + (padding[0] + padding[2]);\n group._cellWidth = width - (padding[1] + padding[3]);\n group.layout();\n newCellHeight = group.AABBBounds.height() + (padding[0] + padding[2]);\n }\n const rowHeight = this.table.getRowHeight(row);\n\n if (cellGroup.attribute.height !== newCellHeight) {\n cellGroup.setAttribute('height', newCellHeight);\n if (rowHeight === oldCellHeight) {\n // 当前行由本单元格高度撑起,更新本行行高\n isUpdate = true;\n } else if (newCellHeight > rowHeight) {\n // 当前行不由本单元格高度撑起,只在本单元格高度高于当前行高度时更新本行行高\n isUpdate = true;\n }\n }\n });\n return isUpdate;\n }\n\n /**\n * @description: 更新某列到其他列位置\n * @param {number} colSource 原始列col\n * @param {number} colTarget 目标列col\n * @return {*}\n */\n updateHeaderPosition(\n updateColStart: number,\n updateColEnd: number,\n updateRowStart: number,\n updateRowEnd: number,\n moveType: 'column' | 'row'\n // sourceMergeInfo: false | CellRange,\n // targetMergeInfo: false | CellRange\n ) {\n moveHeaderPosition(updateColStart, updateColEnd, updateRowStart, updateRowEnd, moveType, this.table);\n }\n\n updateContainerAttrWidthAndX() {\n // 更新各列x&col\n const cornerX = updateContainerChildrenX(this.cornerHeaderGroup, 0);\n const rowHeaderX = updateContainerChildrenX(this.rowHeaderGroup, 0);\n const colHeaderX =\n this.colHeaderGroup.hasChildNodes() && this.colHeaderGroup.firstChild\n ? updateContainerChildrenX(\n this.colHeaderGroup,\n (this.colHeaderGroup.firstChild as any).col > 0\n ? this.table.getColsWidth(this.table.frozenColCount ?? 0, (this.colHeaderGroup.firstChild as any).col - 1)\n : 0\n )\n : 0;\n const bodyX =\n this.bodyGroup.hasChildNodes() && this.bodyGroup.firstChild\n ? updateContainerChildrenX(\n this.bodyGroup,\n (this.bodyGroup.firstChild as any).col > 0\n ? this.table.getColsWidth(this.table.frozenColCount ?? 0, (this.bodyGroup.firstChild as any).col - 1)\n : 0\n )\n : 0;\n const rightX = updateContainerChildrenX(\n this.rightFrozenGroup.childrenCount > 0 ? this.rightFrozenGroup : this.rightTopCornerGroup,\n 0\n );\n\n this.bottomFrozenGroup.hasChildNodes() &&\n this.bottomFrozenGroup.firstChild &&\n updateContainerChildrenX(\n this.bottomFrozenGroup,\n (this.bottomFrozenGroup.firstChild as any).col > 0\n ? this.table.getColsWidth(this.table.frozenColCount ?? 0, (this.bottomFrozenGroup.firstChild as any).col - 1)\n : 0\n );\n updateContainerChildrenX(this.leftBottomCornerGroup, 0);\n updateContainerChildrenX(this.rightTopCornerGroup, 0);\n updateContainerChildrenX(this.rightBottomCornerGroup, 0);\n\n // 更新容器\n this.cornerHeaderGroup.setDeltaWidth(cornerX - this.cornerHeaderGroup.attribute.width);\n this.leftBottomCornerGroup.setDeltaWidth(cornerX - this.leftBottomCornerGroup.attribute.width);\n //TODO 可能有影响\n this.colHeaderGroup.setDeltaWidth(colHeaderX - this.colHeaderGroup.attribute.width);\n // this.rightFrozenGroup.setDeltaWidth(colHeaderX - this.table.getRightFrozenColsWidth());\n this.rowHeaderGroup.setDeltaWidth(rowHeaderX - this.rowHeaderGroup.attribute.width);\n this.bottomFrozenGroup.setDeltaWidth(colHeaderX - this.bottomFrozenGroup.attribute.width);\n this.rightFrozenGroup.setDeltaWidth(rightX - this.rightFrozenGroup.attribute.width);\n this.rightTopCornerGroup.setDeltaWidth(rightX - this.rightTopCornerGroup.attribute.width);\n this.rightBottomCornerGroup.setDeltaWidth(rightX - this.rightBottomCornerGroup.attribute.width);\n this.bodyGroup.setDeltaWidth(bodyX - this.bodyGroup.attribute.width);\n this.colHeaderGroup.setAttribute('x', this.cornerHeaderGroup.attribute.width);\n this.bottomFrozenGroup.setAttribute('x', this.table.getFrozenColsWidth());\n this.bodyGroup.setAttribute('x', this.rowHeaderGroup.attribute.width);\n }\n\n updateContainerAttrHeightAndY() {\n for (let i = 0; i < this.cornerHeaderGroup.children.length; i++) {\n updateContainerChildrenY(this.cornerHeaderGroup.children[i] as Group, 0);\n }\n for (let i = 0; i < this.colHeaderGroup.children.length; i++) {\n updateContainerChildrenY(this.colHeaderGroup.children[i] as Group, 0);\n }\n for (let i = 0; i < this.rightTopCornerGroup.children.length; i++) {\n updateContainerChildrenY(this.rightTopCornerGroup.children[i] as Group, 0);\n }\n for (let i = 0; i < this.rowHeaderGroup.children.length; i++) {\n this.rowHeaderGroup.children[i].firstChild &&\n updateContainerChildrenY(\n this.rowHeaderGroup.children[i] as Group,\n (this.rowHeaderGroup.children[i].firstChild as Group).row > 0\n ? this.table.getRowsHeight(\n this.table.frozenRowCount ?? 0,\n (this.rowHeaderGroup.children[i].firstChild as Group).row - 1\n )\n : 0\n );\n }\n for (let i = 0; i < this.bodyGroup.children.length; i++) {\n this.bodyGroup.children[i].firstChild &&\n updateContainerChildrenY(\n this.bodyGroup.children[i] as Group,\n (this.bodyGroup.children[i].firstChild as Group).row > 0\n ? this.table.getRowsHeight(\n this.table.frozenRowCount ?? 0,\n (this.bodyGroup.children[i].firstChild as Group).row - 1\n )\n : 0\n );\n }\n for (let i = 0; i < this.rightFrozenGroup.children.length; i++) {\n this.rightFrozenGroup.children[i].firstChild &&\n updateContainerChildrenY(\n this.rightFrozenGroup.children[i] as Group,\n (this.rightFrozenGroup.children[i].firstChild as Group).row > 0\n ? this.table.getRowsHeight(\n this.table.frozenRowCount ?? 0,\n (this.rightFrozenGroup.children[i].firstChild as Group).row - 1\n )\n : 0\n );\n }\n for (let i = 0; i < this.leftBottomCornerGroup.children.length; i++) {\n updateContainerChildrenY(this.leftBottomCornerGroup.children[i] as Group, 0);\n }\n for (let i = 0; i < this.bottomFrozenGroup.children.length; i++) {\n updateContainerChildrenY(this.bottomFrozenGroup.children[i] as Group, 0);\n }\n for (let i = 0; i < this.rightBottomCornerGroup.children.length; i++) {\n updateContainerChildrenY(this.rightBottomCornerGroup.children[i] as Group, 0);\n }\n }\n updateContainer(\n updateConfig: { async?: boolean; needUpdateCellY?: boolean } = { async: false, needUpdateCellY: false }\n ) {\n if (updateConfig.async) {\n if (!this._needUpdateContainer) {\n this._needUpdateContainer = true;\n setTimeout(() => {\n this.updateContainerSync(updateConfig.needUpdateCellY ?? false);\n }, 0);\n }\n } else {\n this._needUpdateContainer = true;\n this.updateContainerSync(updateConfig.needUpdateCellY ?? false);\n }\n }\n\n updateContainerSync(needUpdateCellY: boolean = false) {\n if (!this._needUpdateContainer) {\n return;\n }\n this._needUpdateContainer = false;\n this.updateContainerAttrWidthAndX();\n if (needUpdateCellY) {\n this.updateContainerAttrHeightAndY();\n }\n this.updateTableSize();\n this.component.updateScrollBar();\n\n // this.updateDomContainer();\n\n this.updateNextFrame();\n }\n\n updateCellContentWhileResize(col: number, row: number) {\n const isVtableMerge = this.table.getCellRawRecord(col, row)?.vtableMerge;\n const type = isVtableMerge\n ? 'text'\n : this.table.isHeader(col, row)\n ? (this.table._getHeaderLayoutMap(col, row) as HeaderData).headerType\n : this.table.getBodyColumnType(col, row);\n const cellGroup = this.getCell(col, row);\n if (type === 'image' || type === 'video') {\n updateImageCellContentWhileResize(cellGroup, col, row, 0, 0, this.table);\n }\n }\n\n /**\n * @description: 创建table&header&body的border\n * @return {*}\n */\n createFrameBorder() {\n // 更新宽高\n this.updateTableSize();\n // this.tableGroup.setAttributes({\n // width: Math.min(\n // this.table.tableNoFrameWidth,\n // (this.colHeaderGroup.attribute.width ?? 0) + (this.cornerHeaderGroup.attribute.width ?? 0)\n // ),\n // height: Math.min(\n // this.table.tableNoFrameHeight,\n // (this.colHeaderGroup.attribute.height ?? 0) + (this.bodyGroup.attribute.height ?? 0)\n // ),\n // } as any);\n\n const isListTableWithFrozen = !this.isPivot && !this.table.internalProps.transpose;\n\n // 设置border\n createFrameBorder(\n this.bodyGroup,\n this.table.theme.bodyStyle.frameStyle,\n this.bodyGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n createFrameBorder(\n this.rowHeaderGroup,\n this.isPivot\n ? this.table.theme.rowHeaderStyle.frameStyle\n : this.table.internalProps.transpose\n ? this.table.theme.rowHeaderStyle.frameStyle\n : this.table.theme.bodyStyle.frameStyle,\n this.rowHeaderGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n createFrameBorder(\n this.colHeaderGroup,\n this.table.theme.headerStyle.frameStyle, // 透视表的主题中没有colHeaderStyle,直接使用headerStyle\n this.colHeaderGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n createFrameBorder(\n this.cornerHeaderGroup,\n this.isPivot ? this.table.theme.cornerHeaderStyle.frameStyle : this.table.theme.headerStyle.frameStyle,\n this.cornerHeaderGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n this.table.theme.cornerLeftBottomCellStyle?.frameStyle &&\n createFrameBorder(\n this.leftBottomCornerGroup,\n this.table.theme.cornerLeftBottomCellStyle.frameStyle,\n this.leftBottomCornerGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n this.table.theme.bottomFrozenStyle?.frameStyle &&\n createFrameBorder(\n this.bottomFrozenGroup,\n this.table.theme.bottomFrozenStyle.frameStyle,\n this.bottomFrozenGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n this.table.theme.rightFrozenStyle?.frameStyle &&\n createFrameBorder(\n this.rightFrozenGroup,\n this.table.theme.rightFrozenStyle.frameStyle,\n this.rightFrozenGroup.role,\n undefined\n );\n this.table.theme.cornerRightTopCellStyle?.frameStyle &&\n createFrameBorder(\n this.rightTopCornerGroup,\n this.table.theme.cornerRightTopCellStyle.frameStyle,\n this.rightTopCornerGroup.role,\n undefined\n );\n this.table.theme.cornerRightBottomCellStyle?.frameStyle &&\n createFrameBorder(\n this.rightBottomCornerGroup,\n this.table.theme.cornerRightBottomCellStyle.frameStyle,\n this.rightBottomCornerGroup.role,\n undefined\n );\n\n createFrameBorder(this.tableGroup, this.table.theme.frameStyle, this.tableGroup.role, undefined);\n }\n\n /**\n * @description: 获取当前位置的列宽调整信息\n * @param {number} abstractX\n * @param {number} abstractY\n * @param {Group} cellGroup\n * @param {*} offset\n * @return {*}\n */\n getResizeColAt(\n abstractX: number,\n abstractY: number,\n cellGroup?: Group\n ): { col: number; row: number; x?: number; rightFrozen?: boolean } {\n const offset = this.table.theme.columnResize.resizeHotSpotSize / 2;\n let cell: { col: number; row: number; x?: number; rightFrozen?: boolean };\n if (!cellGroup) {\n const drawRange = this.table.getDrawRange();\n if (abstractY >= drawRange.top && abstractY <= drawRange.bottom) {\n // to do: 处理最后一列外调整列宽\n cell = this.table.getCellAtRelativePosition(abstractX - offset, abstractY);\n if (cell.col === this.table.colCount - 1) {\n return cell;\n }\n }\n return { col: -1, row: -1 };\n }\n\n if (!cellGroup.stage) {\n return { col: -1, row: -1 };\n }\n\n if (abstractX < cellGroup.globalAABBBounds.x1 + offset) {\n cell = { col: cellGroup.col - 1, row: cellGroup.row, x: cellGroup.globalAABBBounds.x1 };\n } else if (cellGroup.globalAABBBounds.x2 - offset < abstractX) {\n cell = { col: cellGroup.col, row: cellGroup.row, x: cellGroup.globalAABBBounds.x2 };\n }\n if (\n cell &&\n this.table.rightFrozenColCount > 0 &&\n // cell.col === this.table.colCount - this.table.rightFrozenColCount - 1 &&\n cell.col >= this.table.colCount - this.table.rightFrozenColCount - 1 &&\n this.table.tableNoFrameWidth -\n this.table.getFrozenColsWidth() -\n this.table.getRightFrozenColsWidth() +\n this.table.scrollLeft <\n this.bodyGroup.attribute.width\n ) {\n // 有右侧冻结列,并且横向没有滚动到最右侧时,右侧冻结列左侧调整对只对右侧冻结列生效\n cell.col = cell.col + 1;\n cell.rightFrozen = true;\n }\n\n if (cell) {\n return cell;\n }\n // }\n return { col: -1, row: -1 };\n }\n\n getResizeRowAt(abstractX: number, abstractY: number, cellGroup?: Group) {\n const offset = this.table.theme.columnResize.resizeHotSpotSize / 2;\n if (!cellGroup) {\n // to do: 处理最后一列外调整列宽\n } else {\n let cell: { col: number; row: number; y?: number; bottomFrozen?: boolean };\n if (abstractY < cellGroup.globalAABBBounds.y1 + offset) {\n cell = { col: cellGroup.col, row: cellGroup.row - 1, y: cellGroup.globalAABBBounds.y1 };\n } else if (cellGroup.globalAABBBounds.y2 - offset < abstractY) {\n cell = { col: cellGroup.col, row: cellGroup.row, y: cellGroup.globalAABBBounds.y2 };\n }\n if (\n cell &&\n this.table.bottomFrozenRowCount > 0 &&\n // cell.row === this.table.rowCount - this.table.bottomFrozenRowCount - 1 &&\n cell.row >= this.table.rowCount - this.table.bottomFrozenRowCount - 1 &&\n this.table.tableNoFrameHeight -\n this.table.getFrozenRowsHeight() -\n this.table.getBottomFrozenRowsHeight() +\n this.table.scrollTop <\n this.bodyGroup.attribute.height\n ) {\n // 有下侧冻结行,并且纵向没有滚动到最下侧时,下侧冻结行左侧调整对只对下侧冻结行生效\n cell.row = cell.row + 1;\n cell.bottomFrozen = true;\n }\n if (cell) {\n return cell;\n }\n }\n return { col: -1, row: -1 };\n }\n\n updateFrozen() {\n if (this.clear) {\n return;\n }\n this.resetFrozen();\n // this.dealFrozen();\n this.component.updateScrollBar();\n }\n\n updateRowFrozen() {\n if (this.clear) {\n return;\n }\n this.resetRowFrozen();\n // this.dealFrozen();\n this.component.updateScrollBar();\n }\n\n dealWidthRightFrozen(rightFrozenColCount: number) {\n if (this.clear) {\n this.table.internalProps.rightFrozenColCount = rightFrozenColCount;\n return;\n }\n dealRightFrozen(rightFrozenColCount, this);\n }\n dealWidthBottomFrozen(bottomFrozenRowCount: number) {\n if (this.clear) {\n this.table.internalProps.bottomFrozenRowCount = bottomFrozenRowCount;\n return;\n }\n dealBottomFrozen(bottomFrozenRowCount, this);\n }\n\n updateBorderSizeAndPosition() {\n if (this.bodyGroup.border) {\n this.bodyGroup.appendChild(this.bodyGroup.border);\n updateFrameBorderSize(this.bodyGroup);\n if (this.rowHeaderGroup.attribute.width === 0) {\n updateFrameBorder(this.bodyGroup, this.table.theme.bodyStyle.frameStyle);\n } else {\n updateFrameBorder(this.bodyGroup, this.table.theme.bodyStyle.frameStyle);\n }\n }\n if (this.colHeaderGroup.border) {\n this.colHeaderGroup.appendChild(this.colHeaderGroup.border);\n updateFrameBorderSize(this.colHeaderGroup);\n if (this.cornerHeaderGroup.attribute.width === 0) {\n updateFrameBorder(this.colHeaderGroup, this.table.theme.headerStyle.frameStyle);\n } else {\n updateFrameBorder(this.colHeaderGroup, this.table.theme.headerStyle.frameStyle);\n }\n }\n if (this.rowHeaderGroup.border) {\n this.rowHeaderGroup.appendChild(this.rowHeaderGroup.border);\n updateFrameBorderSize(this.rowHeaderGroup);\n }\n if (this.cornerHeaderGroup.border) {\n this.cornerHeaderGroup.appendChild(this.cornerHeaderGroup.border);\n updateFrameBorderSize(this.cornerHeaderGroup);\n }\n if (this.leftBottomCornerGroup.border) {\n this.leftBottomCornerGroup.appendChild(this.leftBottomCornerGroup.border);\n updateFrameBorderSize(this.leftBottomCornerGroup);\n }\n if (this.bottomFrozenGroup.border) {\n this.bottomFrozenGroup.appendChild(this.bottomFrozenGroup.border);\n updateFrameBorderSize(this.bottomFrozenGroup);\n }\n if (this.rightFrozenGroup.border) {\n this.rightFrozenGroup.appendChild(this.rightFrozenGroup.border);\n updateFrameBorderSize(this.rightFrozenGroup);\n }\n if (this.rightTopCornerGroup.border) {\n this.rightTopCornerGroup.appendChild(this.rightTopCornerGroup.border);\n updateFrameBorderSize(this.rightTopCornerGroup);\n }\n if (this.rightBottomCornerGroup.border) {\n this.rightBottomCornerGroup.appendChild(this.rightBottomCornerGroup.border);\n updateFrameBorderSize(this.rightBottomCornerGroup);\n }\n\n updateCornerRadius(this.table);\n }\n\n sortCell() {\n if (this.isPivot) {\n // 透视表外部处理排序\n } else if ((this.table as any).transpose) {\n this.proxy.sortCellHorizontal();\n } else {\n this.proxy.sortCellVertical();\n }\n }\n\n getCellOverflowText(col: number, row: number): string | null {\n const cellGroup = this.getCell(col, row);\n const text = cellGroup.getChildByName('text', true) as unknown as Text | RichText;\n\n if (text && text.type === 'text') {\n if ((text.attribute as any).moreThanMaxCharacters) {\n return this.table.getCellValue(col, row);\n }\n // const textAttributeStr = isArray(text.attribute.text)\n // ? text.attribute.text.join('')\n // : (text.attribute.text as string);\n // let cacheStr = '';\n // if (isString(text.cache.clipedText)) {\n // cacheStr = text.cache.clipedText;\n // } else {\n // (text.cache as ITextCache).layoutData?.lines?.forEach((line: any) => {\n // cacheStr += line.str;\n // });\n // }\n // if (cacheStr !== textAttributeStr) {\n // // return textAttributeStr;\n // return this.table.getCellValue(col, row);\n // }\n\n if (text.cliped) {\n return this.table.getCellValue(col, row);\n }\n } else if (text && text.type === 'richtext') {\n const richtext = text;\n if (\n richtext.attribute.ellipsis &&\n richtext._frameCache &&\n richtext.attribute.height < richtext._frameCache.actualHeight\n ) {\n const textConfig = richtext.attribute.textConfig.find((item: any) => item.text);\n // return (textConfig as any).text as string;\n return this.table.getCellValue(col, row);\n }\n }\n return null;\n }\n\n updateDrill(visible: boolean, x: number, y: number, drillDown: boolean, drillUp: boolean) {\n this.component.drillIcon.update(visible, x, y, drillDown, drillUp, this);\n }\n\n updateCellContent(col: number, row: number, forceFastUpdate: boolean = false) {\n if (this.clear) {\n return undefined;\n }\n return updateCell(col, row, this.table, undefined, undefined, forceFastUpdate);\n }\n\n setPixelRatio(pixelRatio: number) {\n // this.stage.setDpr(pixelRatio);\n // 这里因为本时刻部分节点有更新bounds标记,直接render回导致开启DirtyBounds,无法完整重绘画布;\n // 所以这里先关闭DirtyBounds,等待下一帧再开启\n this.stage.disableDirtyBounds();\n this.stage.window.setDpr(pixelRatio);\n this.stage.render();\n this.stage.enableDirtyBounds();\n }\n\n updateRow(\n removeCells: CellAddress[],\n addCells: CellAddress[],\n updateCells: CellAddress[] = [],\n recalculateColWidths: boolean = true,\n skipUpdateProxy?: boolean\n ) {\n this.table.internalProps.layoutMap.clearCellRangeMap();\n this.table.internalProps.useOneRowHeightFillAll = false;\n const addRows = deduplication(addCells.map(cell => cell.row)).sort((a, b) => a - b);\n const updateRows = deduplication(updateCells.map(cell => cell.row)).sort((a, b) => a - b);\n //这个值是后续为了autoFillHeight判断逻辑中用到的 判断是否更新前是未填满的情况\n const isNotFillHeight =\n this.table.getAllRowsHeight() -\n [...addRows, ...updateRows].reduce((tolHeight, rowNumber) => {\n return tolHeight + this.table.getRowHeight(rowNumber);\n }, 0) <=\n this.table.tableNoFrameHeight;\n\n // add or move rows\n updateRow(removeCells, addCells, updateCells, this.table, skipUpdateProxy);\n\n // update column width and row height\n\n recalculateColWidths && this.recalculateColWidths();\n\n // this.recalculateRowHeights();\n\n if (\n this.table.heightMode === 'adaptive' ||\n (this.table.autoFillHeight && (this.table.getAllRowsHeight() <= this.table.tableNoFrameHeight || isNotFillHeight))\n ) {\n this.table.scenegraph.recalculateRowHeights();\n } else if (this.table.isAutoRowHeight(this.table.columnHeaderLevelCount)) {\n // if (updateCells.length > 0) {\n // this.table.scenegraph.recalculateRowHeights();\n // }\n for (let i = 0; i < updateRows.length; i++) {\n const row = updateRows[i];\n // const oldHeight = this.table.getRowHeight(row);\n const oldHeight = this.table.rowHeightsMap.get(row); // 避免在小数情况下的自动取整\n const newHeight = computeRowHeight(row, 0, this.table.colCount - 1, this.table);\n if (\n (row >= this.proxy.rowStart && row <= this.proxy.rowEnd) ||\n (row >= this.table.rowCount - this.table.bottomFrozenRowCount && row <= this.table.rowCount - 1)\n ) {\n this.table.scenegraph.updateRowHeight(row, newHeight - oldHeight);\n }\n }\n }\n // check frozen status\n this.table.stateManager.checkFrozen();\n\n // update frozen shadow\n if (!this.isPivot && !(this.table as any).transpose) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else if (this.table.options.frozenColCount) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n } else if (this.table.options.rightFrozenColCount) {\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n }\n\n this.component.updateScrollBar();\n\n // rerender\n this.updateNextFrame();\n }\n updateCol(removeCells: CellAddress[], addCells: CellAddress[], updateCells: CellAddress[] = []) {\n // add or move rows\n updateCol(removeCells, addCells, updateCells, this.table);\n\n // update column width and row height\n\n this.recalculateColWidths();\n\n this.recalculateRowHeights();\n\n // check frozen status\n this.table.stateManager.checkFrozen();\n\n // update frozen shadow\n if (!this.isPivot && !(this.table as any).transpose) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n } else if (this.table.options.frozenColCount) {\n this.component.setFrozenColumnShadow(this.table.frozenColCount - 1);\n } else if (this.table.options.rightFrozenColCount) {\n this.component.setRightFrozenColumnShadow(this.table.colCount - this.table.rightFrozenColCount);\n }\n\n this.component.updateScrollBar();\n\n // rerender\n this.updateNextFrame();\n }\n\n updateCornerHeaderCells() {\n for (let col = 0; col < this.table.frozenColCount; col++) {\n for (let row = 0; row < this.table.frozenRowCount; row++) {\n // const cellGroup = this.highPerformanceGetCell(col, row);\n // cellGroup && (cellGroup.needUpdate = true);\n updateCell(col, row, this.table, false);\n }\n }\n }\n updateRowHeaderCells() {\n for (let col = 0; col < this.table.frozenColCount; col++) {\n for (let row = this.table.frozenRowCount; row < this.table.rowCount; row++) {\n // const cellGroup = this.highPerformanceGetCell(col, row);\n // cellGroup && (cellGroup.needUpdate = true);\n updateCell(col, row, this.table, false);\n }\n }\n }\n updateColumnHeaderCells() {\n for (let row = 0; row < this.table.frozenRowCount; row++) {\n for (let col = this.table.frozenColCount; col < this.table.colCount; col++) {\n updateCell(col, row, this.table, false);\n }\n }\n }\n getColumnGroupX(col: number) {\n if (col < this.table.rowHeaderLevelCount) {\n // row header\n return this.table.getColsWidth(0, col - 1);\n } else if (col < this.table.colCount - this.table.rightFrozenColCount) {\n // body\n return this.table.getColsWidth(this.table.rowHeaderLevelCount, col - 1);\n } else if (col < this.table.colCount) {\n // right frozen\n return this.table.getColsWidth(this.table.colCount - this.table.bottomFrozenRowCount, col - 1);\n }\n return 0;\n }\n\n getCellGroupY(row: number) {\n if (row < this.table.frozenRowCount) {\n // column header\n return this.table.getRowsHeight(0, row - 1);\n } else if (row < this.table.rowCount - this.table.bottomFrozenRowCount) {\n // body\n return this.table.getRowsHeight(this.table.columnHeaderLevelCount, row - 1);\n } else if (row < this.table.rowCount) {\n // bottom frozen\n return this.table.getRowsHeight(this.table.rowCount - this.table.bottomFrozenRowCount, row - 1);\n }\n return 0;\n }\n getCellGroupX(col: number) {\n if (col < this.table.rowHeaderLevelCount) {\n // column header\n return this.table.getColsWidth(0, col - 1);\n } else if (col < this.table.colCount - this.table.rightFrozenColCount) {\n // body\n return this.table.getColsWidth(this.table.rowHeaderLevelCount, col - 1);\n } else if (col < this.table.colCount) {\n // bottom frozen\n return this.table.getColsWidth(this.table.colCount - this.table.rightFrozenColCount, col - 1);\n }\n return 0;\n }\n // /** 更新场景树某个单元格的值 */\n // updateCellValue(col: number, row: number) {\n // updateCell(col, row, this.table);\n // }\n updateDomContainer() {\n updateReactContainer(this.table);\n }\n\n setLoadingHierarchyState(col: number, row: number) {\n const cellGroup = this.getCell(col, row);\n const iconGraphic = cellGroup.getChildByName('collapse', true) || cellGroup.getChildByName('expand', true);\n if (iconGraphic) {\n const regedIcons = registerIcons.get();\n const loadingIcon = regedIcons[InternalIconName.loadingIconName];\n if (loadingIcon) {\n dealWithIcon(loadingIcon, iconGraphic, col, row);\n }\n }\n }\n\n temporarilyUpdateSelectRectStyle(rectAttribute: IRectGraphicAttribute) {\n temporarilyUpdateSelectRectStyle(rectAttribute, this);\n }\n\n resetSelectRectStyle() {\n this.recreateAllSelectRangeComponents();\n }\n}\n"]}