@visactor/vtable 1.22.11-alpha.5 → 1.22.11-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/core/BaseTable.js +1 -1
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/core/record-helper.js +39 -23
- package/cjs/core/record-helper.js.map +1 -1
- package/cjs/data/DataSource.d.ts +9 -4
- package/cjs/data/DataSource.js +131 -54
- package/cjs/data/DataSource.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/themes/theme-define.js +6 -0
- package/cjs/themes/theme-define.js.map +1 -1
- package/cjs/ts-types/table-engine.d.ts +1 -0
- package/cjs/ts-types/table-engine.js.map +1 -1
- package/cjs/vrender.js.map +1 -1
- package/dist/vtable.js +311 -104
- package/dist/vtable.min.js +2 -2
- package/es/core/BaseTable.js +1 -1
- package/es/core/BaseTable.js.map +1 -1
- package/es/core/record-helper.js +39 -23
- package/es/core/record-helper.js.map +1 -1
- package/es/data/DataSource.d.ts +9 -4
- package/es/data/DataSource.js +130 -53
- package/es/data/DataSource.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/themes/theme-define.js +6 -0
- package/es/themes/theme-define.js.map +1 -1
- package/es/ts-types/table-engine.d.ts +1 -0
- package/es/ts-types/table-engine.js.map +1 -1
- package/es/vrender.js.map +1 -1
- package/package.json +4 -4
package/es/core/BaseTable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/BaseTable.ts"],"names":[],"mappings":"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","file":"BaseTable.js","sourcesContent":["import * as columnStyleContents from '../body-helper/style';\nimport * as headerStyleContents from '../header-helper/style';\nimport { importStyle } from './style';\nimport * as style from '../tools/style';\nimport {\n type CellAddress,\n type CellRange,\n type TableEventHandlersEventArgumentMap,\n type TableEventHandlersReturnMap,\n type TableKeyboardOptions,\n type DropDownMenuHighlightInfo,\n type MenuListItem,\n type WidthModeDef,\n type ICustomRender,\n type ICellHeaderPaths,\n type HeaderData,\n type FullExtendStyle,\n type FieldDef,\n type ColumnTypeOption,\n type SortState,\n type IPagination,\n type ICustomLayout,\n type CellInfo,\n type CellStyle,\n type MenuInstanceType,\n type DropDownMenuOptions,\n type FieldFormat,\n type FieldData,\n type MaybePromiseOrUndefined,\n type MousePointerCellEvent,\n type DropDownMenuEventInfo,\n type HierarchyState,\n type FieldKeyDef,\n type CellLocation,\n type LayoutObjectId,\n type HeightModeDef,\n type ITableThemeDefine,\n type ScrollStyle,\n InteractionState,\n Placement\n} from '../ts-types';\nimport type {\n AnyFunction,\n CellAddressWithBound,\n ColorPropertyDefine,\n ColumnIconOption,\n ColumnSeriesNumber,\n IRowSeriesNumber,\n ColumnStyleOption,\n MappingRule,\n TableEventOptions,\n WidthAdaptiveModeDef,\n HeightAdaptiveModeDef,\n ListTableAPI,\n ColumnInfo,\n RowInfo,\n ListTableConstructorOptions\n} from '../ts-types';\nimport { event, style as utilStyle } from '../tools/helper';\n\nimport { TABLE_EVENT_TYPE } from './TABLE_EVENT_TYPE';\nimport { EventHandler } from '../event/EventHandler';\nimport { EventTarget } from '../event/EventTarget';\nimport { NumberMap } from '../tools/NumberMap';\nimport { Rect } from '../tools/Rect';\nimport type { TableTheme } from '../themes/theme-define';\nimport { throttle2 } from '../tools/util';\nimport themes from '../themes';\nimport { Env } from '../tools/env';\nimport { Scenegraph } from '../scenegraph/scenegraph';\nimport { StateManager } from '../state/state';\nimport { EventManager } from '../event/event';\nimport { BodyHelper } from '../body-helper/body-helper';\nimport { HeaderHelper } from '../header-helper/header-helper';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport type { ITooltipHandler } from '../components/tooltip/TooltipHandler';\nimport type { CachedDataSource, DataSource } from '../data';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport {\n AABBBounds,\n isNumber,\n isBoolean,\n isFunction,\n type ITextSize,\n isValid,\n merge,\n cloneDeep\n} from '@visactor/vutils';\nimport { measureTextBounds, textMeasure } from '../scenegraph/utils/text-measure';\nimport { getProp } from '../scenegraph/utils/get-prop';\nimport type {\n ColumnData,\n ColumnDefine,\n ColumnsDefine,\n ImageColumnDefine,\n IndicatorData,\n SeriesNumberColumnData\n} from '../ts-types/list-table/layout-map/api';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport {\n _applyColWidthLimits,\n _getScrollableVisibleRect,\n _setDataSource,\n _setRecords,\n _toPxWidth,\n checkHasColumnAutoWidth,\n createRootElement,\n getStyleTheme,\n updateRootElementPadding\n} from './tableHelper';\nimport type { IMenuHandler } from '../components/menu/dom/MenuHandler';\nimport type {\n BaseTableAPI,\n BaseTableConstructorOptions,\n IBaseTableProtected,\n ListTableProtected\n} from '../ts-types/base-table';\nimport { FocusInput } from './FouseInput';\nimport { defaultPixelRatio } from '../tools/pixel-ratio';\nimport type { CreateLegend } from '../components/legend/create-legend';\nimport type { DataSet } from '@visactor/vdataset';\nimport { Title } from '../components/title/title';\nimport type { Chart } from '../scenegraph/graphic/chart';\nimport {\n chartRenderQueueList,\n clearChartRenderQueue,\n setBatchRenderChartCount\n} from '../scenegraph/graphic/contributions/chart-render-helper';\nimport { isLeftOrRightAxis, isTopOrBottomAxis } from '../layout/chart-helper/get-axis-config';\nimport { NumberRangeMap } from '../layout/row-height-map';\nimport { ListTable } from '../ListTable';\nimport type { SimpleHeaderLayoutMap } from '../layout';\nimport { RowSeriesNumberHelper } from './row-series-number-helper';\nimport { hideCellSelectBorder, restoreCellSelectBorder } from '../scenegraph/select/update-select-border';\nimport type { ITextGraphicAttribute } from './../vrender';\nimport { ReactCustomLayout } from '../components/react/react-custom-layout';\nimport type { ISortedMapItem } from '../data/DataSource';\nimport { hasAutoImageColumn } from '../layout/layout-helper';\nimport { Factory } from './factory';\nimport {\n getCellAt,\n getCellAtRelativePosition,\n getColAtRelativePosition,\n getRowAtRelativePosition,\n getColAt,\n getRowAt,\n getTargetColAt,\n getTargetColAtConsiderRightFrozen,\n getTargetRowAt,\n getTargetRowAtConsiderBottomFrozen\n} from './utils/get-cell-position';\nimport { getCellStyle } from './style-helper';\nimport type { EditManager } from '../edit/edit-manager';\nimport { createReactContainer } from '../scenegraph/layout/frozen-react';\nimport { setIconColor } from '../icons';\nimport { TableAnimationManager } from './animation';\nimport type { ITableAnimationOption } from '../ts-types/animation/appear';\nimport { checkCellInSelect } from '../state/common/check-in-select';\nimport type { CustomCellStylePlugin, ICustomCellStylePlugin } from '../plugins/custom-cell-style';\nimport { isCellDisableSelect } from '../state/select/is-cell-select-highlight';\nimport { getCustomMergeCellFunc } from './utils/get-custom-merge-cell-func';\nimport { vglobal } from './../vrender';\nimport { PluginManager } from '../plugins/plugin-manager';\nimport type { IVTablePlugin } from '../plugins/interface';\n\nconst { toBoxArray } = utilStyle;\nconst { isTouchEvent } = event;\nconst rangeReg = /^\\$(\\d+)\\$(\\d+)$/;\nimportStyle();\n\nexport abstract class BaseTable extends EventTarget implements BaseTableAPI {\n internalProps: IBaseTableProtected;\n showFrozenIcon = true;\n padding: { top: number; left: number; right: number; bottom: number };\n globalDropDownMenu?: MenuListItem[] | ((args: { row: number; col: number; table: BaseTableAPI }) => MenuListItem[]);\n //画布绘制单元格的区域 不包括整体边框frame,所以比canvas的width和height要小一点(canvas的width包括了frame)\n tableNoFrameWidth: number;\n tableNoFrameHeight: number;\n tableX: number;\n tableY: number;\n _widthMode: WidthModeDef;\n _heightMode: HeightModeDef;\n _autoFillWidth: boolean;\n _autoFillHeight: boolean;\n _containerFit: { width: boolean; height: boolean };\n _widthAdaptiveMode: WidthAdaptiveModeDef;\n _heightAdaptiveMode: HeightAdaptiveModeDef;\n customRender?: ICustomRender;\n\n canvasWidth?: number;\n canvasHeight?: number;\n contentOffsetX?: number;\n contentOffsetY?: number;\n\n _vDataSet?: DataSet;\n scenegraph: Scenegraph;\n stateManager: StateManager;\n eventManager: EventManager;\n editorManager: EditManager;\n animationManager: TableAnimationManager;\n _pixelRatio: number;\n\n // bottomFrozenRowCount: number = 0;\n // rightFrozenColCount: number = 0;\n /** 是否设置了canvas的宽高 */\n canvasSizeSeted?: boolean;\n static get EVENT_TYPE(): typeof TABLE_EVENT_TYPE {\n return TABLE_EVENT_TYPE;\n }\n /**\n * 用户配置的options 只读 勿直接修改\n */\n readonly options: BaseTableConstructorOptions;\n\n version = \"1.22.11-alpha.5\";\n\n pagination?: IPagination | undefined;\n\n /**\n * constructor\n *\n * @constructor\n * @param options Constructor options\n */\n // eslint-disable-next-line default-param-last\n id = `VTable${Date.now()}`;\n\n headerStyleCache: Map<string, any>;\n bodyStyleCache: Map<string, any>;\n bodyMergeTitleCache: Map<string, any>;\n bodyBottomStyleCache: Map<string, any>;\n container: HTMLElement;\n isReleased: boolean = false;\n _chartEventMap: Record<string, { query?: any; callback: AnyFunction }[]> = {};\n\n customCellStylePlugin?: CustomCellStylePlugin;\n\n columnWidthComputeMode?: 'normal' | 'only-header' | 'only-body';\n\n reactCustomLayout?: ReactCustomLayout;\n _hasAutoImageColumn?: boolean;\n\n pluginManager: PluginManager;\n rotateDegree?: number;\n constructor(container: HTMLElement, options: BaseTableConstructorOptions = {}) {\n super();\n\n if (Env.mode === 'node') {\n options = container as BaseTableConstructorOptions;\n container = null;\n } else if (!(container instanceof HTMLElement)) {\n options = container as BaseTableConstructorOptions;\n if ((container as BaseTableConstructorOptions).container) {\n container = (container as BaseTableConstructorOptions).container;\n } else {\n container = null;\n }\n }\n if (!container && options.mode !== 'node' && !options.canvas) {\n throw new Error(\"vtable's container is undefined\");\n }\n\n this.pluginManager = new PluginManager(this, options);\n this.fireListeners(TABLE_EVENT_TYPE.BEFORE_INIT, { options, container });\n container = options.container && options.container instanceof HTMLElement ? options.container : container;\n // for image anonymous\n if (options.customConfig?.imageAnonymous === false) {\n vglobal.isImageAnonymous = false;\n }\n\n const {\n // rowCount = 0,\n // colCount = 0,\n frozenColCount = 0,\n unfreezeAllOnExceedsMaxWidth,\n frozenRowCount,\n defaultRowHeight = 40,\n defaultHeaderRowHeight,\n defaultColWidth = 80,\n defaultHeaderColWidth,\n widthMode = 'standard',\n heightMode = 'standard',\n autoFillWidth = false,\n autoFillHeight = false,\n containerFit = { width: false, height: false },\n widthAdaptiveMode = 'only-body',\n heightAdaptiveMode = 'only-body',\n keyboardOptions,\n eventOptions,\n rowSeriesNumber,\n enableCheckboxCascade,\n enableHeaderCheckboxCascade,\n // columnSeriesNumber,\n // disableRowHeaderColumnResize,\n columnResizeMode,\n rowResizeMode = 'none',\n resize,\n dragHeaderMode,\n dragOrder,\n // showHeader,\n // scrollBar,\n showFrozenIcon,\n allowFrozenColCount,\n padding,\n hover,\n menu,\n select: click,\n customRender,\n pixelRatio = defaultPixelRatio,\n renderChartAsync,\n renderChartAsyncBatchCount,\n\n mode,\n modeParams,\n canvasWidth,\n canvasHeight,\n contentOffsetX: translateX,\n contentOffsetY: translateY,\n overscrollBehavior,\n limitMinWidth,\n limitMinHeight,\n clearDOM = true\n } = options;\n\n const { groupConfig, groupBy, groupTitleFieldFormat, groupTitleCustomLayout, enableTreeStickCell } =\n options as ListTableConstructorOptions;\n this.container = container;\n this.options = options;\n this._widthMode = widthMode;\n this._heightMode = heightMode;\n this._widthAdaptiveMode = widthAdaptiveMode;\n this._heightAdaptiveMode = heightAdaptiveMode;\n this._autoFillWidth = autoFillWidth;\n this._autoFillHeight = autoFillHeight;\n // 处理containerFit配置\n if (containerFit !== undefined) {\n if (typeof containerFit === 'boolean') {\n this._containerFit = { width: containerFit, height: containerFit };\n } else if (containerFit && typeof containerFit === 'object') {\n this._containerFit = {\n width: containerFit.width ?? true,\n height: containerFit.height ?? true\n };\n } else {\n this._containerFit = { width: false, height: false };\n }\n }\n this.customRender = customRender;\n this.padding = { top: 0, right: 0, left: 0, bottom: 0 };\n if (padding) {\n if (typeof padding === 'number') {\n this.padding.top = padding;\n this.padding.left = padding;\n this.padding.bottom = padding;\n this.padding.right = padding;\n } else {\n padding.top && (this.padding.top = padding.top);\n padding.bottom && (this.padding.bottom = padding.bottom);\n padding.left && (this.padding.left = padding.left);\n padding.right && (this.padding.right = padding.right);\n }\n }\n if (isValid(canvasHeight) || isValid(canvasWidth)) {\n this.canvasSizeSeted = true;\n }\n this.tableNoFrameWidth = 0;\n this.tableNoFrameHeight = 0;\n this.contentOffsetX = translateX ?? 0;\n this.contentOffsetY = translateY ?? 0;\n this.canvasWidth = isNumber(canvasWidth) ? canvasWidth : undefined;\n this.canvasHeight = isNumber(canvasHeight) ? canvasHeight : undefined;\n\n this.columnWidthComputeMode = options.columnWidthComputeMode ?? 'normal';\n\n const internalProps = (this.internalProps = {} as IBaseTableProtected);\n // style.initDocument(scrollBar);\n // showHeader !== undefined && (this.showHeader = showHeader);\n // scrollBar !== undefined && (this.scrollBar = scrollBar);\n showFrozenIcon !== undefined && (this.showFrozenIcon = showFrozenIcon);\n if (typeof allowFrozenColCount === 'number' && allowFrozenColCount <= 0) {\n this.showFrozenIcon = false;\n }\n //设置是否自动撑开的配置\n // internalProps.autoRowHeight = options.autoRowHeight ?? false;\n\n if (this.options.canvas) {\n if (Env.mode !== 'node') {\n internalProps.element = this.options.canvas.parentElement;\n internalProps.element.style.position = 'relative';\n }\n internalProps.focusControl = new FocusInput(this, internalProps.element);\n internalProps.canvas = this.options.canvas;\n internalProps.context = internalProps.canvas.getContext('2d')!;\n } else if (Env.mode !== 'node') {\n internalProps.element = createRootElement(this.padding);\n internalProps.focusControl = new FocusInput(this, internalProps.element);\n internalProps.canvas = document.createElement('canvas');\n internalProps.element.appendChild(internalProps.canvas);\n internalProps.context = internalProps.canvas.getContext('2d')!;\n\n if (options.customConfig?.createReactContainer) {\n createReactContainer(this);\n }\n }\n\n internalProps.handler = new EventHandler();\n if (isNumber(this.options.resizeTime)) {\n internalProps.handler.resizeTime = this.options.resizeTime;\n }\n\n internalProps.pixelRatio = pixelRatio;\n internalProps.frozenColCount = frozenColCount;\n internalProps.frozenRowCount = frozenRowCount;\n internalProps.unfreezeAllOnExceedsMaxWidth = unfreezeAllOnExceedsMaxWidth ?? true;\n\n internalProps.defaultRowHeight = defaultRowHeight;\n internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight ?? defaultRowHeight; // defaultHeaderRowHeight没有设置取defaultRowHeight\n\n internalProps.defaultColWidth = defaultColWidth;\n internalProps.defaultHeaderColWidth = defaultHeaderColWidth ?? defaultColWidth;\n\n internalProps.keyboardOptions = keyboardOptions;\n internalProps.eventOptions = eventOptions;\n internalProps.rowSeriesNumber = rowSeriesNumber;\n internalProps.enableCheckboxCascade = enableCheckboxCascade ?? rowSeriesNumber?.enableTreeCheckbox ?? true;\n internalProps.enableHeaderCheckboxCascade = enableCheckboxCascade || (enableHeaderCheckboxCascade ?? true);\n // internalProps.columnSeriesNumber = columnSeriesNumber;\n\n internalProps.columnResizeMode = resize?.columnResizeMode ?? columnResizeMode;\n internalProps.canResizeColumn = resize?.canResizeColumn;\n internalProps.rowResizeMode = resize?.rowResizeMode ?? rowResizeMode;\n internalProps.dragHeaderMode = dragOrder?.dragHeaderMode ?? dragHeaderMode ?? 'none';\n internalProps.renderChartAsync = renderChartAsync;\n setBatchRenderChartCount(renderChartAsyncBatchCount);\n internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';\n\n (internalProps as ListTableProtected).groupBy = groupConfig?.groupBy ?? groupBy;\n (internalProps as ListTableProtected).groupTitleCheckbox =\n groupConfig?.titleCheckbox ?? !!rowSeriesNumber?.enableTreeCheckbox;\n (internalProps as ListTableProtected).groupTitleFieldFormat =\n groupConfig?.titleFieldFormat ?? groupTitleFieldFormat;\n (internalProps as ListTableProtected).groupTitleCustomLayout =\n groupConfig?.titleCustomLayout ?? groupTitleCustomLayout;\n (internalProps as ListTableProtected).enableTreeStickCell = groupConfig?.enableTreeStickCell ?? enableTreeStickCell;\n\n internalProps._rowHeightsMap = new NumberRangeMap(this);\n internalProps._rowRangeHeightsMap = new Map();\n internalProps._colRangeWidthsMap = new Map();\n internalProps._widthResizedColMap = new Set();\n internalProps._heightResizedRowMap = new Set();\n\n this.colWidthsMap = new NumberMap();\n this.colContentWidthsMap = new NumberMap();\n this.colWidthsLimit = {};\n\n const that = this;\n internalProps.calcWidthContext = {\n _: internalProps,\n get full(): number {\n if (Env.mode === 'node') {\n return that.canvasWidth / (pixelRatio ?? 1);\n }\n return (\n this._.canvas.width /\n ((this._.context as any).pixelRatio ?? that.internalProps.pixelRatio ?? window.devicePixelRatio)\n );\n }\n // get em(): number {\n // return getFontSize(this._.context, this._.theme.font).width;\n // }\n };\n\n internalProps.cellTextOverflows = {};\n internalProps.focusedTable = false;\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT); //原来在listTable文件中\n internalProps.theme.isPivot = this.isPivotTable();\n setIconColor(internalProps.theme.functionalIconsStyle);\n if (container) {\n // 先清空\n if (clearDOM) {\n container.innerHTML = '';\n }\n container.appendChild(internalProps.element);\n this._updateSize();\n } else {\n this._updateSize();\n }\n\n // this.options = options;\n // internalProps.theme = themes.of(options.theme ?? themes.DEFAULT);\n // internalProps.theme.isPivot = this.isPivotTable();\n internalProps.bodyHelper = new BodyHelper(this);\n internalProps.headerHelper = new HeaderHelper(this);\n internalProps.rowSeriesNumberHelper = new RowSeriesNumberHelper(this);\n\n internalProps.autoWrapText = options.autoWrapText;\n internalProps.enableLineBreak = options.enableLineBreak;\n\n internalProps.allowFrozenColCount = options.allowFrozenColCount ?? 0;\n internalProps.limitMaxAutoWidth = options.limitMaxAutoWidth ?? 450;\n internalProps.limitMinWidth =\n limitMinWidth !== null && limitMinWidth !== undefined\n ? typeof limitMinWidth === 'number'\n ? limitMinWidth\n : limitMinWidth\n ? 10\n : 0\n : 10;\n internalProps.limitMinHeight =\n limitMinHeight !== null && limitMinHeight !== undefined\n ? typeof limitMinHeight === 'number'\n ? limitMinHeight\n : limitMinHeight\n ? 10\n : 0\n : 10;\n // 生成scenegraph\n // this._vDataSet = new DataSet();\n this.scenegraph = new Scenegraph(this);\n this.stateManager = new StateManager(this);\n this.eventManager = new EventManager(this);\n this.animationManager = new TableAnimationManager(this);\n\n if (options.legends) {\n internalProps.legends = [];\n const createLegend = Factory.getFunction('createLegend') as CreateLegend;\n if (Array.isArray(options.legends)) {\n for (let i = 0; i < options.legends.length; i++) {\n internalProps.legends.push(createLegend(options.legends[i], this));\n }\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n } else {\n internalProps.legends.push(createLegend(options.legends, this));\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n }\n }\n\n //原有的toolTip提示框处理,主要在文字绘制不全的时候 出来全文本提示信息 需要加个字段设置是否有效\n internalProps.tooltip = Object.assign(\n {\n parentElement: this.getElement(),\n renderMode: 'html',\n isShowOverflowTextTooltip: false,\n confine: true,\n position: Placement.bottom\n },\n options.tooltip\n );\n if (internalProps.tooltip.renderMode === 'html') {\n const TooltipHandler = Factory.getComponent('tooltipHandler') as ITooltipHandler;\n TooltipHandler && (internalProps.tooltipHandler = new TooltipHandler(this, internalProps.tooltip.confine));\n }\n internalProps.menu = Object.assign(\n {\n renderMode: 'html'\n },\n options.menu\n );\n Array.isArray(options.menu?.dropDownMenuHighlight) &&\n this.setDropDownMenuHighlight(options.menu?.dropDownMenuHighlight);\n\n // 全局下拉菜单\n (Array.isArray(options.menu?.defaultHeaderMenuItems) ||\n typeof options.menu?.defaultHeaderMenuItems === 'function') &&\n (this.globalDropDownMenu = options.menu.defaultHeaderMenuItems);\n\n if (internalProps.menu.renderMode === 'html') {\n const MenuHandler = Factory.getComponent('menuHandler') as IMenuHandler;\n internalProps.menuHandler = new MenuHandler(this);\n }\n\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.bodyMergeTitleCache = new Map();\n this.bodyBottomStyleCache = new Map();\n\n internalProps.stick = { changedCells: new Map() };\n\n internalProps.customMergeCell = getCustomMergeCellFunc(options.customMergeCell);\n\n const CustomCellStylePlugin = Factory.getComponent('customCellStylePlugin') as ICustomCellStylePlugin;\n if (CustomCellStylePlugin) {\n this.customCellStylePlugin = new CustomCellStylePlugin(\n this,\n options.customCellStyle ?? [],\n options.customCellStyleArrangement ?? []\n );\n }\n this._adjustCanvasSizeByOption();\n }\n _adjustCanvasSizeByOption() {\n // 等宽高都进行了内部计算,判断如果配置了内容自动撑开表格,需要在这里赋值canvasWidth 和 canvasHeight\n if (this.options.canvasHeight === 'auto' || this.options.canvasWidth === 'auto') {\n setTimeout(() => {\n let canvasWidth;\n let canvasHeight;\n if (this.options.canvasHeight === 'auto') {\n let borderWidth = 0;\n if (this.theme.frameStyle?.innerBorder) {\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n borderWidth += shadowWidths[1] ?? 0;\n } else if (this.theme.frameStyle) {\n const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n borderWidth +=\n (lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0) + ((lineWidths[2] ?? 0) + (shadowWidths[2] ?? 0));\n }\n canvasHeight =\n Math.min(\n this.options.maxCanvasHeight ? this.options.maxCanvasHeight - borderWidth : 20000,\n this.getAllRowsHeight()\n ) + borderWidth;\n } else {\n canvasHeight = this.canvasHeight;\n }\n if (this.options.canvasWidth === 'auto') {\n let borderWidth = 0;\n if (this.theme.frameStyle?.innerBorder) {\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n borderWidth += shadowWidths[2] ?? 0;\n } else if (this.theme.frameStyle) {\n const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n borderWidth +=\n (lineWidths[1] ?? 0) + (shadowWidths[1] ?? 0) + ((lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0));\n }\n canvasWidth =\n Math.min(\n this.options.maxCanvasWidth ? this.options.maxCanvasWidth - borderWidth : 20000,\n this.getAllColsWidth()\n ) + borderWidth;\n } else {\n canvasWidth = this.canvasWidth;\n }\n\n this.setCanvasSize(canvasWidth, canvasHeight);\n }, 0);\n }\n }\n /** 节流绘制 */\n throttleInvalidate = throttle2(this.render.bind(this), 200);\n /**\n * Get table container.\n * @returns {HTMLElement} table container\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n /**\n * 获取表格创建的DOM根节点\n */\n getElement(): HTMLElement {\n return this.internalProps.element;\n }\n /**\n * 获取canvas\n */\n get canvas(): HTMLCanvasElement {\n return this.internalProps.canvas;\n }\n setCanvasSize(canvasWidth: number, canvasHeight: number) {\n this.canvasWidth = canvasWidth;\n this.canvasHeight = canvasHeight;\n this.options.canvasHeight = canvasHeight;\n this.options.canvasWidth = canvasWidth;\n this.resize();\n }\n setContentInsetXY(contentOffsetX: number, contentOffsetY: number) {\n this.contentOffsetX = contentOffsetX;\n this.contentOffsetY = contentOffsetY;\n this.options.contentOffsetX = contentOffsetX;\n this.options.contentOffsetY = contentOffsetY;\n this.resize();\n }\n resize() {\n this._updateSize();\n this.internalProps.legends?.forEach(legend => {\n legend?.resize();\n });\n if (this.internalProps.title) {\n this.internalProps.title.resize();\n }\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip.resize();\n }\n // this.stateManager.checkFrozen();\n this.scenegraph.resize();\n }\n\n /**\n * Get the number of rows.\n */\n get rowCount(): number {\n return this.internalProps.rowCount;\n }\n /**\n * Set the number of rows.\n */\n set rowCount(rowCount: number) {\n this.internalProps.rowCount = rowCount;\n }\n /**\n * Get the number of columns.\n */\n get colCount(): number {\n return this.internalProps.colCount ?? 0;\n }\n /**\n * Set the number of columns.\n */\n set colCount(colCount: number) {\n this.internalProps.colCount = colCount;\n }\n /**\n * 注意 这个值和options.frozenColCount 不一样!options.frozenColCount是用户实际设置的; 这里获取的值是调整过:frozen的列过宽时 frozeCount为0\n */\n get frozenColCount(): number {\n return this.internalProps?.layoutMap?.frozenColCount ?? this.internalProps?.frozenColCount ?? 0;\n }\n /**\n * Set the number of frozen columns.\n * 设置冻结列数 会自动刷新渲染节点\n */\n set frozenColCount(frozenColCount: number) {\n // 此情况将frozenColCount设为0(显示效果一致)\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n // const oldFrozenColCount = this.internalProps.frozenColCount;\n this.internalProps.frozenColCount = frozenColCount;\n this.options.frozenColCount = frozenColCount;\n\n // 纠正frozenColCount的值;\n const maxFrozenWidth = this._getMaxFrozenWidth();\n // if (this.tableNoFrameWidth - this.getColsWidth(0, frozenColCount - 1) <= 120) {\n if (this.getColsWidth(0, frozenColCount - 1) > maxFrozenWidth) {\n if (this.internalProps.unfreezeAllOnExceedsMaxWidth) {\n this.internalProps.frozenColCount = 0;\n } else {\n const computedFrozenColCount = this._getComputedFrozenColCount(frozenColCount);\n this.internalProps.frozenColCount = computedFrozenColCount;\n }\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n /** 设置冻结的行数 */\n setFrozenColCount(frozenColCount: number) {\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n // const oldFrozenColCount = this.internalProps.frozenColCount;\n this.internalProps.frozenColCount = frozenColCount;\n this.options.frozenColCount = frozenColCount;\n //纠正frozenColCount的值\n const maxFrozenWidth = this._getMaxFrozenWidth();\n // if (this.tableNoFrameWidth - this.getColsWidth(0, frozenColCount - 1) <= 120) {\n if (this.getColsWidth(0, frozenColCount - 1) > maxFrozenWidth) {\n if (this.internalProps.unfreezeAllOnExceedsMaxWidth) {\n this.internalProps.frozenColCount = 0;\n } else {\n const computedFrozenColCount = this._getComputedFrozenColCount(frozenColCount);\n this.internalProps.frozenColCount = computedFrozenColCount;\n }\n }\n\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n /**\n * 和setFrozenColCount一样的逻辑 但保留options.frozenColCount不赋新值\n * 当冻结列的宽度过宽时调用该函数\n */\n _setFrozenColCount(frozenColCount: number) {\n // 此情况将frozenColCount设为0(显示效果一致)\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n this.internalProps.frozenColCount = frozenColCount;\n }\n /**\n * 计算完前置状态后 重新计算判断列宽是否过大\n */\n _resetFrozenColCount() {\n if (this.options.frozenColCount) {\n if (this.tableNoFrameWidth - this.getColsWidth(0, this.options.frozenColCount - 1) <= 120) {\n this._setFrozenColCount(0);\n } else if (this.frozenColCount !== this.options.frozenColCount) {\n this._setFrozenColCount(this.options.frozenColCount); //frozenColCount从0恢复到原有的frozenColCount\n }\n }\n }\n /**\n * Get the number of frozen rows.\n */\n get frozenRowCount(): number {\n return this.internalProps?.layoutMap?.frozenRowCount ?? this.internalProps?.frozenRowCount ?? 0;\n }\n /**\n * Set the number of frozen rows.\n * 设置冻结行数 会自动刷新渲染节点\n */\n set frozenRowCount(frozenRowCount: number) {\n this.internalProps.frozenRowCount = frozenRowCount;\n this.options.frozenRowCount = frozenRowCount;\n this.stateManager.setFrozenRow(this.internalProps.frozenRowCount);\n }\n /**\n * 设置冻结行数 不赋值options.frozenRowCount。供内部逻辑调用\n */\n _setFrozenRowCount(frozenRowCount: number) {\n this.internalProps.frozenRowCount = frozenRowCount;\n this.stateManager.setFrozenRow(this.internalProps.frozenRowCount);\n }\n get rightFrozenColCount(): number {\n return this.internalProps?.layoutMap?.rightFrozenColCount ?? this.internalProps?.rightFrozenColCount ?? 0;\n }\n\n set rightFrozenColCount(rightFrozenColCount: number) {\n this.scenegraph.dealWidthRightFrozen(rightFrozenColCount);\n }\n\n get bottomFrozenRowCount(): number {\n return this.internalProps?.layoutMap?.bottomFrozenRowCount ?? this.internalProps?.bottomFrozenRowCount ?? 0;\n }\n\n set bottomFrozenRowCount(bottomFrozenRowCount: number) {\n this.scenegraph.dealWidthBottomFrozen(bottomFrozenRowCount);\n }\n\n /**\n * Get the default row height.\n *\n */\n get defaultRowHeight(): number {\n if (isNumber(this.internalProps.defaultRowHeight)) {\n return this.internalProps.defaultRowHeight as number;\n }\n return 40;\n }\n /**\n * Set the default row height.\n */\n set defaultRowHeight(defaultRowHeight: number | 'auto') {\n this.internalProps.defaultRowHeight = defaultRowHeight;\n this.options.defaultRowHeight = defaultRowHeight;\n }\n /**\n * Get the default row height.\n *\n */\n get defaultHeaderRowHeight(): (number | 'auto') | (number | 'auto')[] {\n return this.internalProps.defaultHeaderRowHeight;\n }\n /**\n * Set the default row height.\n */\n set defaultHeaderRowHeight(defaultHeaderRowHeight: (number | 'auto') | (number | 'auto')[]) {\n this.internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight;\n this.options.defaultHeaderRowHeight = defaultHeaderRowHeight;\n }\n /**\n * Get the default column width.\n */\n get defaultColWidth(): number {\n return this.internalProps.defaultColWidth;\n }\n /**\n * Set the default column width.\n */\n set defaultColWidth(defaultColWidth: number) {\n this.internalProps.defaultColWidth = defaultColWidth;\n this.options.defaultColWidth = defaultColWidth;\n }\n /**\n * Get the default column width.\n */\n get defaultHeaderColWidth(): (number | 'auto') | (number | 'auto')[] {\n return this.internalProps.defaultHeaderColWidth;\n }\n /**\n * Set the default column width.\n */\n set defaultHeaderColWidth(defaultHeaderColWidth: (number | 'auto') | (number | 'auto')[]) {\n this.internalProps.defaultHeaderColWidth = defaultHeaderColWidth;\n this.options.defaultHeaderColWidth = defaultHeaderColWidth;\n }\n /**\n * Get the columns width. 但这个可能和看到的宽度不一致 获取某一列的宽度请使用接口 getColWidth(1) 这个接口会根据maxWidth minWidth进行调整\n */\n get colWidthsMap(): NumberMap<string | number> {\n return this.internalProps._colWidthsMap;\n }\n /**\n * Set the columns width.\n */\n set colWidthsMap(colWidthsMap: NumberMap<string | number>) {\n this.internalProps._colWidthsMap = colWidthsMap;\n }\n /**\n * Get every colomn's content width. not care actual column width\n */\n get colContentWidthsMap(): NumberMap<string | number> {\n return this.internalProps._colContentWidthsMap;\n }\n /**\n * Set every colomn's content width.\n */\n set colContentWidthsMap(colContentWidthsMap: NumberMap<string | number>) {\n this.internalProps._colContentWidthsMap = colContentWidthsMap;\n }\n /**\n * Get the range columns width.\n */\n get _colRangeWidthsMap(): Map<string, number> {\n return this.internalProps._colRangeWidthsMap;\n }\n /**\n * Set the range columns width.\n */\n set _colRangeWidthsMap(_colRangeWidthsMap: Map<string, number>) {\n this.internalProps._colRangeWidthsMap = _colRangeWidthsMap;\n }\n /**\n * Get the range rows height.\n */\n get _rowRangeHeightsMap(): Map<string, number> {\n return this.internalProps._rowRangeHeightsMap;\n }\n /**\n * Set the range rows height.\n */\n set _rowRangeHeightsMap(_rowRangeHeightsMap: Map<string, number>) {\n this.internalProps._rowRangeHeightsMap = _rowRangeHeightsMap;\n }\n /**\n * Get the columns width.\n */\n get rowHeightsMap(): NumberRangeMap {\n return this.internalProps._rowHeightsMap;\n }\n /**\n * Set the columns width.\n */\n set rowHeightsMap(rowHeightsMap: NumberRangeMap) {\n this.internalProps._rowHeightsMap = rowHeightsMap;\n }\n /**\n * Get the columns width limit.\n */\n get colWidthsLimit(): {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n } {\n return this.internalProps._colWidthsLimit;\n }\n /**\n * Set the columns width limit.\n */\n set colWidthsLimit(colWidthsLimit: {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n }) {\n this.internalProps._colWidthsLimit = colWidthsLimit;\n }\n get keyboardOptions(): TableKeyboardOptions | null {\n return this.internalProps.keyboardOptions ?? null;\n }\n set keyboardOptions(keyboardOptions: TableKeyboardOptions | null) {\n this.internalProps.keyboardOptions = keyboardOptions ?? undefined;\n }\n get eventOptions(): TableEventOptions | null {\n return this.internalProps.eventOptions ?? null;\n }\n set eventOptions(eventOptions: TableEventOptions | null) {\n this.internalProps.eventOptions = eventOptions ?? undefined;\n }\n\n get widthMode(): WidthModeDef {\n return this._widthMode;\n }\n set widthMode(widthMode: WidthModeDef) {\n if (widthMode !== this._widthMode) {\n this._widthMode = widthMode;\n this.options.widthMode = widthMode;\n }\n }\n get heightMode(): HeightModeDef {\n return this._heightMode;\n }\n set heightMode(heightMode: HeightModeDef) {\n if (heightMode !== this._heightMode) {\n this._heightMode = heightMode;\n this.options.heightMode = heightMode;\n }\n }\n get autoFillWidth(): boolean {\n return this._autoFillWidth;\n }\n set autoFillWidth(autoFillWidth: boolean) {\n if (autoFillWidth !== this._autoFillWidth) {\n this._autoFillWidth = autoFillWidth;\n }\n }\n get autoFillHeight(): boolean {\n return this._autoFillHeight;\n }\n set autoFillHeight(autoFillHeight: boolean) {\n if (autoFillHeight !== this._autoFillHeight) {\n this._autoFillHeight = autoFillHeight;\n }\n }\n get widthAdaptiveMode(): WidthAdaptiveModeDef {\n return this._widthAdaptiveMode;\n }\n set widthAdaptiveMode(widthAdaptiveMode: WidthAdaptiveModeDef) {\n if (widthAdaptiveMode !== this._widthAdaptiveMode) {\n this._widthAdaptiveMode = widthAdaptiveMode;\n }\n }\n get heightAdaptiveMode(): HeightAdaptiveModeDef {\n return this._heightAdaptiveMode;\n }\n set heightAdaptiveMode(heightAdaptiveMode: HeightAdaptiveModeDef) {\n if (heightAdaptiveMode !== this._heightAdaptiveMode) {\n this._heightAdaptiveMode = heightAdaptiveMode;\n }\n }\n /**\n * 根据设置的列宽配置 计算列宽值\n * @param {string|number} width width definition\n * @returns {number} the pixels of width\n */\n _colWidthDefineToPxWidth(width: string | number): number {\n if (width === 'auto') {\n // hack for defaultWidht support 'auto'\n return 0;\n }\n return _toPxWidth(this, width);\n }\n\n _getMaxFrozenWidth(): number {\n const maxFrozenWidth = this.options.maxFrozenWidth ?? '80%';\n return _toPxWidth(this, maxFrozenWidth);\n }\n _getComputedFrozenColCount(frozenColCount: number): number {\n const maxFrozenWidth = this._getMaxFrozenWidth();\n let computedfrozenColCount = frozenColCount;\n while (this.getColsWidth(0, computedfrozenColCount - 1) > maxFrozenWidth) {\n computedfrozenColCount--;\n if (computedfrozenColCount <= 0) {\n break;\n }\n }\n return computedfrozenColCount;\n }\n /**\n * 获取列宽的最大最小限制\n * @param {number} col number of column\n * @returns {object|null} the column width limits\n * @private\n */\n private _getColWidthLimits(col: number): {\n min?: undefined;\n minDef?: undefined;\n max?: undefined;\n maxDef?: undefined;\n } | null {\n const limit = this.colWidthsLimit[col];\n if (!limit) {\n return null;\n }\n\n const result: {\n min?: number;\n max?: number;\n minDef?: string | number;\n maxDef?: string | number;\n } = {};\n\n if (limit.min) {\n result.min = _toPxWidth(this, limit.min);\n result.minDef = limit.min;\n }\n if (limit.max) {\n result.max = _toPxWidth(this, limit.max);\n result.maxDef = limit.max;\n }\n return result as never;\n }\n\n _adjustColWidth(col: number, orgWidth: number): number {\n const limits = this._getColWidthLimits(col);\n return Math.max(_applyColWidthLimits(limits, orgWidth), 0);\n }\n get pixelRatio(): number {\n return this.internalProps.pixelRatio;\n }\n /**\n * 设置像数比\n * @param pixelRatio\n */\n setPixelRatio(pixelRatio: number) {\n if (pixelRatio !== this.internalProps?.pixelRatio) {\n this.internalProps.pixelRatio = pixelRatio;\n const that = this;\n const canvasWidth = this.canvasWidth;\n this.internalProps.calcWidthContext = {\n _: this.internalProps,\n get full(): number {\n if (Env.mode === 'node') {\n return canvasWidth / (pixelRatio ?? 1);\n }\n return (\n this._.canvas.width /\n ((this._.context as any).pixelRatio ?? that.internalProps.pixelRatio ?? window.devicePixelRatio)\n );\n }\n };\n this.scenegraph.setPixelRatio(pixelRatio);\n }\n }\n\n /**\n * 窗口尺寸发生变化 或者像数比变化\n * @return {void}\n */\n _updateSize(): void {\n //清除样式并获取大小\n const { padding } = this;\n\n let widthP = 0;\n let heightP = 0;\n this.tableX = this.contentOffsetX;\n this.tableY = this.contentOffsetY;\n\n if (this.options.canvas && this.options.viewBox) {\n widthP = this.options.viewBox.x2 - this.options.viewBox.x1;\n heightP = this.options.viewBox.y2 - this.options.viewBox.y1;\n // this.tableX = this.options.viewBox.x1;\n // this.tableY = this.options.viewBox.y1;\n if (this?.scenegraph?.stage) {\n if (this.options.viewBox) {\n (this.scenegraph.stage as any).setViewBox(this.options.viewBox, false);\n } else {\n this.scenegraph.stage.resize(widthP, heightP);\n }\n }\n } else if (Env.mode === 'browser') {\n const element = this.getElement();\n let widthWithoutPadding = 0;\n let heightWithoutPadding = 0;\n const isDefWidth = isValid(this.canvasWidth);\n const isDefHeight = isValid(this.canvasHeight);\n if (this.canvasSizeSeted) {\n if (isDefWidth) {\n widthWithoutPadding = this.canvasWidth;\n }\n if (isDefHeight) {\n heightWithoutPadding = this.canvasHeight;\n }\n }\n const unDefSize = (!isDefWidth || !isDefHeight) && element.parentElement;\n if (unDefSize) {\n const computedStyle = element.parentElement.style || window.getComputedStyle(element.parentElement); // 兼容性处理\n if (!isDefWidth) {\n widthWithoutPadding =\n element.parentElement.offsetWidth -\n (parseInt(computedStyle.paddingLeft, 10) || 0) -\n (parseInt(computedStyle.paddingRight, 10) || 0);\n }\n if (!isDefHeight) {\n heightWithoutPadding =\n element.parentElement.offsetHeight -\n parseInt(computedStyle.paddingTop || '0px', 10) -\n parseInt(computedStyle.paddingBottom || '0px', 20);\n }\n\n widthWithoutPadding = (widthWithoutPadding ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n heightWithoutPadding = (heightWithoutPadding ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n }\n\n element.style.width = (widthWithoutPadding && `${widthWithoutPadding - padding.left - padding.right}px`) || '0px';\n element.style.height =\n (heightWithoutPadding && `${heightWithoutPadding - padding.top - padding.bottom}px`) || '0px';\n\n const { canvas } = this.internalProps;\n widthP = (canvas.parentElement?.offsetWidth ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n heightP = (canvas.parentElement?.offsetHeight ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n\n if (!this?.scenegraph?.stage) {\n canvas.style.width = '';\n canvas.style.height = '';\n canvas.width = widthP;\n canvas.height = heightP;\n\n canvas.style.width = `${widthP}px`;\n canvas.style.height = `${heightP}px`;\n } else if (this.options?.viewBox && !this.options?.canvas) {\n this.scenegraph.stage.resize(widthP, heightP);\n }\n\n if (this.options?.viewBox) {\n widthP = this.options.viewBox.x2 - this.options.viewBox.x1;\n heightP = this.options.viewBox.y2 - this.options.viewBox.y1;\n }\n\n //style 与 width,height相同\n if (this?.scenegraph?.stage) {\n // this.scenegraph.stage.resize(widthP, heightP);\n if (this.options.viewBox) {\n (this.scenegraph.stage as any).setViewBox(this.options.viewBox, false);\n } else {\n this.scenegraph.stage.resize(widthP, heightP);\n }\n }\n } else if (Env.mode === 'node') {\n widthP = this.canvasWidth - 1;\n heightP = this.canvasHeight - 1;\n }\n\n const scrollStyle = this.getTheme().scrollStyle;\n\n let vScrollBarWidth = 0;\n let hScrollBarWidth = 0;\n\n vScrollBarWidth = this.shouldVScrollBarWidthShow(widthP, heightP, scrollStyle)\n ? style.getVerticalScrollBarSize(scrollStyle)\n : 0;\n hScrollBarWidth = this.shouldHScrollBarWidthShow(widthP, heightP, scrollStyle)\n ? style.getHorizontalScrollBarSize(scrollStyle)\n : 0;\n\n const width = Math.floor(widthP - vScrollBarWidth);\n const height = Math.floor(heightP - hScrollBarWidth);\n\n // const width = Math.floor(widthP - style.getVerticalScrollBarSize(scrollStyle));\n // const height = Math.floor(heightP - style.getHorizontalScrollBarSize(scrollStyle));\n\n if (this.internalProps.theme?.frameStyle) {\n //考虑表格整体边框的问题\n const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n if (this.theme.frameStyle?.innerBorder) {\n this.tableX += this.contentOffsetX;\n this.tableY += this.contentOffsetY;\n this.tableNoFrameWidth = width - (shadowWidths[1] ?? 0) - this.contentOffsetX;\n this.tableNoFrameHeight = height - (shadowWidths[2] ?? 0) - this.contentOffsetY;\n } else {\n this.tableX += (lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0);\n this.tableY += (lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0);\n const rightBorder = (lineWidths[1] ?? 0) + (shadowWidths[1] ?? 0);\n this.tableNoFrameWidth =\n width -\n (rightBorder > vScrollBarWidth ? rightBorder - vScrollBarWidth : 0) -\n ((lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0)) -\n this.contentOffsetX;\n const bottomBorder = (lineWidths[2] ?? 0) + (shadowWidths[2] ?? 0);\n this.tableNoFrameHeight =\n height -\n (bottomBorder > hScrollBarWidth ? bottomBorder - hScrollBarWidth : 0) -\n ((lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0)) -\n this.contentOffsetY;\n }\n }\n\n this._clearColRangeWidthsMap();\n this._clearRowRangeHeightsMap();\n }\n\n shouldVScrollBarWidthShow(tableWidth: number, tableHeight: number, scrollStyle: ScrollStyle): boolean {\n if (scrollStyle.hoverOn || scrollStyle.visible === 'none') {\n return false;\n }\n const totalHeight = this.getAllRowsHeight();\n //判断横向滚动条的存在是否影响纵向滚动条的显示\n const sizeTolerance = scrollStyle.visible ? style.getHorizontalScrollBarSize(scrollStyle) : 0;\n const isHScrollBarDecideVScrollBar = totalHeight > tableHeight - sizeTolerance && totalHeight <= tableHeight;\n //如果横向滚动条的存在决定了纵向滚动条是否显示,这里再对纵向滚动条判断,因为有相互依赖的问题\n if (isHScrollBarDecideVScrollBar) {\n const totalWidth = this.getAllColsWidth();\n const sizeTolerance = scrollStyle.visible ? style.getVerticalScrollBarSize(scrollStyle) : 0;\n const isVScrollBarDecideHScrollBar = totalWidth > tableWidth - sizeTolerance && totalWidth <= tableWidth;\n //出现了相互依赖的情况,则不显示纵向滚动条(横向也不显示)\n if (isVScrollBarDecideHScrollBar) {\n return false;\n }\n // 一定显示横向滚动条,则也一定显示纵向滚动条\n if (totalWidth > tableWidth) {\n return true;\n }\n // 横向滚动条不存在,则纵向滚动条也不存在\n if (totalWidth <= tableWidth - sizeTolerance) {\n return false;\n }\n }\n return !(totalHeight <= tableHeight - sizeTolerance);\n }\n\n shouldHScrollBarWidthShow(tableWidth: number, tableHeight: number, scrollStyle: ScrollStyle): boolean {\n if (scrollStyle.hoverOn || scrollStyle.visible === 'none') {\n return false;\n }\n const totalWidth = this.getAllColsWidth();\n //判断纵向滚动条的存在是否影响横向滚动条的显示\n const sizeTolerance = scrollStyle.visible ? style.getVerticalScrollBarSize(scrollStyle) : 0;\n const isVScrollBarDecideHScrollBar = totalWidth > tableWidth - sizeTolerance && totalWidth <= tableWidth;\n //如果纵向滚动条的存在决定了横向滚动条是否显示,这里再对横向滚动条判断,因为有相互依赖的问题\n if (isVScrollBarDecideHScrollBar) {\n const totalHeight = this.getAllRowsHeight();\n const sizeTolerance = scrollStyle.visible ? style.getHorizontalScrollBarSize(scrollStyle) : 0;\n const isHScrollBarDecideVScrollBar = totalHeight > tableHeight - sizeTolerance && totalHeight <= tableHeight;\n //出现了相互依赖的情况,则不显示横向滚动条(纵向也不显示)\n if (isHScrollBarDecideVScrollBar) {\n return false;\n }\n // 一定显示纵向滚动条,则也一定显示横向滚动条\n if (totalHeight > tableHeight) {\n return true;\n }\n // 纵向滚动条不存在,则横向滚动条也不存在\n if (totalHeight <= tableHeight - sizeTolerance) {\n return false;\n }\n }\n return !(totalWidth <= tableWidth - sizeTolerance);\n }\n\n updateViewBox(newViewBox: IBoundsLike) {\n const oldWidth = (this.options?.viewBox?.x2 ?? 0) - (this.options?.viewBox?.x1 ?? 0);\n const oldHeight = (this.options?.viewBox?.y2 ?? 0) - (this.options?.viewBox?.y1 ?? 0);\n const newWidth = newViewBox.x2 - newViewBox.x1;\n const newHeight = newViewBox.y2 - newViewBox.y1;\n this.options.viewBox = newViewBox;\n if (oldWidth !== newWidth || oldHeight !== newHeight) {\n this.resize();\n } else {\n (this.scenegraph.stage as any).setViewBox(this.options.viewBox, true);\n }\n }\n\n setViewBoxTransform(a: number, b: number, c: number, d: number, e: number, f: number) {\n this.internalProps.modifiedViewBoxTransform = true;\n this.scenegraph.stage.window.setViewBoxTransform(a, b, c, d, e, f);\n }\n\n get rowHierarchyType(): 'grid' | 'tree' | 'grid-tree' {\n return this.dataSource.rowHierarchyType;\n }\n\n // /**\n // * Set all column width.\n // * @param {number[]} widths The column widths\n // * @return {void}\n // */\n // setColWidths(widths: number[]): void {\n // widths.forEach((value, index) => this.setColWidth(index, value));\n // }\n /**\n * 获取指定列范围的总宽度\n * @param startCol\n * @param endCol\n * @returns\n */\n getColsWidth(startCol: number, endCol: number): number {\n if (startCol > endCol) {\n return 0;\n }\n startCol = Math.max(startCol, 0);\n endCol = Math.min(endCol, (this.colCount ?? Infinity) - 1); // endCol最大为this.colCount - 1,超过会导致width计算为NaN\n //通过缓存获取指定范围列宽\n const cachedColWidth = this._colRangeWidthsMap.get(`$${startCol}$${endCol}`);\n if (cachedColWidth !== null && cachedColWidth !== undefined) {\n return cachedColWidth;\n }\n\n //特殊处理 先尝试获取startCol->endCol-1的行高\n const cachedLowerColWidth = this._colRangeWidthsMap.get(`$${startCol}$${endCol - 1}`);\n if (cachedLowerColWidth !== null && cachedLowerColWidth !== undefined) {\n // const width = this.colWidthsMap.get(endCol);\n // let adjustW;\n // if (width) {\n // adjustW =\n // this.widthMode === 'adaptive' || (this as any).transpose\n // ? Number(width)\n // : this._adjustColWidth(endCol, this._colWidthDefineToPxWidth(width));\n // } else {\n // use default column width if no width in colWidthsMap\n const adjustW = this.getColWidth(endCol);\n // }\n let addWidth = cachedLowerColWidth + adjustW;\n if (this.rightFrozenColCount > 0 && endCol === this.colCount - this.rightFrozenColCount) {\n // 当结束列大于右侧冻结起始列,说明带差值的列已经计入了缓存,不用计算,此处只需计算传入列正好在右侧起始冻结列的情况\n addWidth = this._getRangeSizeForContainerFit(startCol, endCol, addWidth, 'col');\n }\n // 合法地址存入缓存\n if (startCol >= 0 && endCol >= 0 && !Number.isNaN(addWidth)) {\n this._colRangeWidthsMap.set(`$${startCol}$${endCol}`, Math.round(addWidth));\n }\n return Math.round(addWidth);\n }\n\n let w = 0;\n for (let col = startCol; col <= endCol; col++) {\n w += this.getColWidth(col);\n }\n w = this._getRangeSizeForContainerFit(startCol, endCol, w, 'col');\n\n // this.colWidthsMap.each(startCol, endCol, (width, col) => {\n // // adaptive模式下,不受max min配置影响,直接使用width\n // w +=\n // (this.widthMode === 'adaptive' || (this as any).transpose\n // ? Number(width)\n // : this._adjustColWidth(col, this._colWidthDefineToPxWidth(width))) - this.getColWidth(col);\n // });\n // for (let col = startCol; col <= endCol; col++) {\n // if (this.colWidthsMap.has(col)) {\n // continue;\n // }\n // const adj = this._adjustColWidth(col, this.internalProps.defaultColWidth as number);\n // if (adj !== this.internalProps.defaultColWidth) {\n // w += adj - (this.internalProps.defaultColWidth as number);\n // }\n // }\n\n // 合法地址存入缓存\n if (startCol >= 0 && endCol >= 0) {\n this._colRangeWidthsMap.set(`$${startCol}$${endCol}`, Math.round(w));\n }\n return Math.round(w);\n }\n /**\n * 获取某一行的高度\n * @param row\n * @returns\n */\n getRowHeight(row: number): number {\n // return (\n // this.rowHeightsMap.get(row) ||\n // (this.isColumnHeader(0, row) || this.isCornerHeader(0, row)\n // ? Array.isArray(this.defaultHeaderRowHeight)\n // ? this.defaultHeaderRowHeight[row] ?? this.internalProps.defaultRowHeight\n // : this.defaultHeaderRowHeight\n // : this.internalProps.defaultRowHeight)\n // );\n if (isValid(this.rowHeightsMap.get(row))) {\n if (this.options.customConfig?._disableColumnAndRowSizeRound) {\n const height = this.rowHeightsMap.get(row);\n let heightRange;\n if (row < this.frozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(0, row);\n } else if (row >= this.rowCount - this.bottomFrozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(row, this.rowCount - 1);\n } else {\n heightRange = this.rowHeightsMap.getSumInRange(this.frozenRowCount, row);\n }\n heightRange = Number(heightRange.toFixed(2)); // avoid precision problem\n // if heightRange number is int\n if (Number.isInteger(heightRange)) {\n return Math.ceil(height);\n }\n return Math.floor(height);\n }\n return this.rowHeightsMap.get(row);\n }\n const defaultHeight = this.getDefaultRowHeight(row);\n if (isNumber(defaultHeight)) {\n return defaultHeight;\n }\n return this.defaultRowHeight;\n }\n\n getDefaultColumnWidth(col: number) {\n // return col < this.rowHeaderLevelCount\n // ? Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth\n // : this.defaultColWidth;\n if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n return Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n : this.defaultHeaderColWidth;\n } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n if (this.isPivotTable()) {\n return Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n : this.defaultHeaderColWidth;\n }\n return this.defaultColWidth;\n }\n return this.defaultColWidth;\n }\n\n getDefaultRowHeight(row: number) {\n if (this.isColumnHeader(0, row) || this.isCornerHeader(0, row) || this.isSeriesNumberInHeader(0, row)) {\n return Array.isArray(this.defaultHeaderRowHeight)\n ? this.defaultHeaderRowHeight[row] ?? this.internalProps.defaultRowHeight\n : this.defaultHeaderRowHeight;\n }\n if (this.isBottomFrozenRow(row)) {\n //底部冻结行默认取用了表头的行高 但针对非表头数据冻结的情况这里可能不妥\n return Array.isArray(this.defaultHeaderRowHeight)\n ? this.defaultHeaderRowHeight[\n this.columnHeaderLevelCount > 0 ? this.columnHeaderLevelCount - this.bottomFrozenRowCount : 0\n ] ?? this.internalProps.defaultRowHeight\n : this.defaultHeaderRowHeight;\n }\n return this.internalProps.defaultRowHeight;\n }\n /**\n * 设置某一行的高度\n * @param row\n * @returns\n */\n _setRowHeight(row: number, height: number, clearCache?: boolean): void {\n // this.rowHeightsMap.put(row, Math.round(height));\n this.rowHeightsMap.put(row, this.options.customConfig?._disableColumnAndRowSizeRound ? height : Math.round(height));\n // 清楚影响缓存\n if (clearCache) {\n this._clearRowRangeHeightsMap(row);\n }\n }\n\n setRowHeight(row: number, height: number) {\n this.scenegraph.setRowHeight(row, height);\n this.scenegraph.updateChartSizeForResizeRowHeight(row);\n this.internalProps._heightResizedRowMap.add(row); // add resize tag\n }\n\n /**\n * 获取指定行范围的总高度\n * @param startCol\n * @param endCol\n * @returns\n */\n getRowsHeight(startRow: number, endRow: number): number {\n if (startRow > endRow || this.rowCount === 0) {\n return 0;\n }\n startRow = Math.max(startRow, 0);\n endRow = Math.min(endRow, (this.rowCount ?? Infinity) - 1);\n\n let h = 0;\n const isDefaultRowHeightIsAuto = this.options.defaultRowHeight === 'auto';\n // autoRowHeight || all rows in header, use accumulation\n if (\n this.heightMode === 'standard' &&\n !this.options.customComputeRowHeight &&\n !this.autoFillHeight &&\n this.internalProps.layoutMap &&\n // endRow >= this.columnHeaderLevelCount &&\n // !this.bottomFrozenRowCount &&\n !this.hasAutoImageColumn() &&\n !isDefaultRowHeightIsAuto &&\n this.internalProps._heightResizedRowMap.size === 0\n ) {\n /** 底部冻结开始行 */\n const bottomFrozenStartRow = this.rowCount - this.bottomFrozenRowCount;\n // part in header\n for (let i = startRow; i < Math.min(endRow + 1, this.columnHeaderLevelCount); i++) {\n h += this.getRowHeight(i);\n }\n // part in body\n if (endRow >= this.columnHeaderLevelCount) {\n h +=\n this.defaultRowHeight *\n (Math.min(endRow, bottomFrozenStartRow - 1) - Math.max(this.columnHeaderLevelCount, startRow) + 1);\n }\n /** 当前底部冻结的行高 */\n let currentBottomFrozenRowsHeight = 0;\n // part in bottom frozen\n // last axis row height is default header row height in pivot chart\n for (let i = bottomFrozenStartRow; i < endRow + 1; i++) {\n currentBottomFrozenRowsHeight += this.getRowHeight(i);\n }\n h = this._getRangeSizeForContainerFit(startRow, endRow, h + currentBottomFrozenRowsHeight, 'row');\n } else {\n if (this.options.customConfig?._disableColumnAndRowSizeRound) {\n // for (let i = startRow; i <= endRow; i++) {\n // h += this.getRowHeight(i);\n // }\n const tempH = this.rowHeightsMap.getSumInRange(startRow, endRow);\n let heightRange;\n if (endRow < this.frozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(0, endRow);\n } else if (endRow >= this.rowCount - this.bottomFrozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(endRow, this.rowCount - 1);\n } else {\n heightRange = this.rowHeightsMap.getSumInRange(this.frozenRowCount, endRow);\n }\n heightRange = Number(heightRange.toFixed(2)); // avoid precision problem\n // if heightRange number is int\n if (Number.isInteger(heightRange)) {\n return Math.ceil(tempH);\n }\n return Math.floor(tempH);\n }\n h = this.rowHeightsMap.getSumInRange(startRow, endRow);\n }\n if (this.options.customConfig?._disableColumnAndRowSizeRound) {\n // console.log(startRow, endRow, Number(h.toFixed(2)));\n // return Number(h.toFixed(2));\n return h;\n }\n return Math.round(h);\n }\n /**\n * @description: 获取 containerFit 模式下的指定范围的总列宽/行高\n * @param {number} start\n * @param {number} end\n * @param {number} totalSize 总列宽/行高\n * @return {*}\n */\n _getRangeSizeForContainerFit(start: number, end: number, totalSize: number, type: 'col' | 'row' = 'col') {\n if (!isFinite(start) || !isFinite(end)) {\n return totalSize;\n }\n const keyMap: {\n /** 目标范围总数量 */\n totalCount: 'colCount' | 'rowCount';\n /** 冻结数量 */\n frozenCount: 'rightFrozenColCount' | 'bottomFrozenRowCount';\n /** 自适应类型 */\n fitType: 'width' | 'height';\n /** 表格尺寸 */\n tableSize: 'tableNoFrameWidth' | 'tableNoFrameHeight';\n /** 获取单个行/列尺寸的方法 */\n getSize: 'getColWidth' | 'getRowHeight';\n } =\n type === 'col'\n ? {\n totalCount: 'colCount',\n frozenCount: 'rightFrozenColCount',\n fitType: 'width',\n tableSize: 'tableNoFrameWidth',\n getSize: 'getColWidth'\n }\n : {\n totalCount: 'rowCount',\n frozenCount: 'bottomFrozenRowCount',\n fitType: 'height',\n tableSize: 'tableNoFrameHeight',\n getSize: 'getRowHeight'\n };\n const tableSize = this[keyMap.tableSize];\n if (totalSize >= tableSize) {\n // 总尺寸已经大于表格尺寸,直接返回\n return totalSize;\n }\n /** 目标冻结开始位置 */\n const frozenStart = this[keyMap.totalCount] - this[keyMap.frozenCount];\n if (!isFinite(this[keyMap.totalCount]) || this[keyMap.frozenCount] <= 0 || frozenStart < 0) {\n // 无效冻结区域跳过\n return totalSize;\n }\n const noIntersecting = start > frozenStart || end < frozenStart || start === end;\n if (noIntersecting || !this.containerFit?.[keyMap.fitType]) {\n // 传入范围不包含 body 和冻结区的交叉区域 或 当前未开启 containerFit,无需处理\n return totalSize;\n }\n\n const first = 0;\n const last = this[keyMap.totalCount] - 1;\n let size = tableSize;\n // 使用表格尺寸减去边缘尺寸\n if (start > first) {\n // 减去传入开始位置以前的尺寸\n for (let i = 0; i < start; i++) {\n size -= this[keyMap.getSize](i);\n if (size <= 0) {\n // 已超出表格尺寸,返回原始尺寸\n return totalSize;\n }\n }\n }\n if (end !== last) {\n // 减去传入结束位置之后的尺寸\n for (let i = end + 1; i <= last; i++) {\n size -= this[keyMap.getSize](i);\n if (size <= 0) {\n // 已超出表格尺寸,返回原始尺寸\n return totalSize;\n }\n }\n }\n return size;\n }\n /**\n * 根据列号获取列宽定义\n * @param {number} col column number\n * @returns {string|number} width definition\n * @private\n */\n getColWidthDefined(col: number): string | number {\n const { layoutMap } = this.internalProps;\n // const ctx = _getInitContext.call(table);\n if (this.widthMode === 'autoWidth') {\n return 'auto';\n }\n const { width } = layoutMap?.getColumnWidthDefined(col) ?? {};\n if (typeof width === 'number' && width <= 0) {\n // adaptive模式下,宽度可能为0\n return 0;\n } else if (width) {\n return width;\n }\n return this.getDefaultColumnWidth(col);\n // } else if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n // if (this.isPivotTable()) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // }\n // return this.defaultColWidth;\n // }\n // return this.defaultColWidth;\n }\n\n // setColWidthDefined(col: number, width: number) {\n // const { layoutMap } = this.internalProps;\n // const widthData = layoutMap?.getColumnWidthDefined(col) ?? {};\n // widthData.width = width;\n // }\n\n getColWidthDefinedNumber(col: number): number {\n const width = this.getColWidthDefined(col);\n return this._adjustColWidth(col, this._colWidthDefineToPxWidth(width));\n }\n /** 判断某行是否应该计算行高 */\n isAutoRowHeight(row?: number): boolean {\n if (this.heightMode === 'autoHeight') {\n return true;\n } else if (this.options.customComputeRowHeight) {\n return true;\n } else if (this.internalProps.rowHeightConfig) {\n return true;\n } else if (row >= 0 && row < this.columnHeaderLevelCount) {\n return this.getDefaultRowHeight(row) === 'auto';\n }\n // return false;\n return this.internalProps.defaultRowHeight === 'auto';\n }\n /**\n * 根据列号获取列宽定义\n * @param {number} col column number\n * @returns {string|number} width definition\n * @private\n */\n // getColWidthDefine(col: number): string | number {\n // const width = this.colWidthsMap.get(col);\n // if (typeof width === 'number' && width <= 0) {\n // // adaptive模式下,宽度可能为0\n // return 0;\n // } else if (width) {\n // return width;\n // } else if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // }\n // return this.defaultColWidth;\n // }\n\n /**\n * 根据列号 获取该列宽度\n * @param {number} col column index\n * @return {number} column width\n */\n getColWidth(col: number): number {\n // const width = this.getColWidthDefine(col);\n const width = this.colWidthsMap.get(col) ?? this.getDefaultColumnWidth(col);\n if (\n (this.widthMode === 'adaptive' && typeof width === 'number') ||\n ((this as any).transpose && typeof width === 'number')\n ) {\n // adaptive模式下,colWidthsMap存储的都是像素数值,此时max min配置失效,直接返回像素值\n // transpose模式下,不受原有列max min配置影响,直接返回像素值\n return this._colWidthDefineToPxWidth(width);\n }\n return this._adjustColWidth(col, this._colWidthDefineToPxWidth(width));\n }\n /**\n * 设置某一行的高度\n * @param row\n * @returns\n */\n _setColWidth(col: number, width: string | number, clearCache?: boolean, skipCheckFrozen?: boolean): void {\n this.colWidthsMap.put(\n col,\n // typeof width === 'number' ? (this.options.customConfig?._disableColumnAndRowSizeRound ? width : Math.round(width)) : width\n typeof width === 'number' ? Math.round(width) : width\n );\n // 清楚影响缓存\n if (clearCache) {\n this._clearColRangeWidthsMap(col);\n }\n\n // 检查冻结情况\n if (!skipCheckFrozen) {\n this.stateManager.checkFrozen();\n }\n }\n\n setColWidth(col: number, width: number) {\n this.scenegraph.setColWidth(col, width);\n this.scenegraph.updateChartSizeForResizeColWidth(col);\n this.internalProps._widthResizedColMap.add(col); // add resize tag\n }\n\n /**\n * 清空含有指定col的缓存\n * @param col\n */\n _clearColRangeWidthsMap(col?: number): void {\n if (typeof col !== 'number') {\n this._colRangeWidthsMap.clear();\n } else {\n const keys = this._colRangeWidthsMap.keys();\n for (const key of keys) {\n const reg = rangeReg.exec(key);\n if (reg) {\n const start = Number(reg[1]);\n const end = Number(reg[2]);\n if (col >= start && col <= end) {\n this._colRangeWidthsMap.delete(key);\n }\n }\n }\n }\n }\n /**\n * 清空含有指定row的缓存\n * @param row\n */\n _clearRowRangeHeightsMap(row?: number): void {\n this.rowHeightsMap.clearRange();\n // if (typeof row !== 'number') {\n // this._rowRangeHeightsMap.clear();\n // } else {\n // const keys = this._rowRangeHeightsMap.keys();\n // for (const key of keys) {\n // const reg = rangeReg.exec(key);\n // if (reg) {\n // const start = Number(reg[1]);\n // const end = Number(reg[2]);\n // if (row >= start && row <= end) {\n // this._rowRangeHeightsMap.delete(key);\n // }\n // }\n // }\n // }\n }\n /**\n * 获取某一列内容的宽度 不关乎该列列宽值有多少\n * @param col\n * @returns\n */\n _getColContentWidth(col: number): number {\n return Number(this.colContentWidthsMap.get(col));\n }\n _setColContentWidth(col: number, width: string | number): void {\n this.colContentWidthsMap.put(col, width);\n }\n /**\n * 获取所有列的总高度\n * @returns\n */\n getAllRowsHeight(): number {\n if (!this.internalProps?.rowCount || this.internalProps.rowCount <= 0) {\n return 0;\n }\n const h = this.getRowsHeight(0, this.internalProps.rowCount - 1);\n return h;\n }\n /**\n * 获取所有行的总宽度\n * @returns\n */\n getAllColsWidth(): number {\n if (!this.internalProps?.colCount || this.internalProps.colCount <= 0) {\n return 0;\n }\n const w = this.getColsWidth(0, this.internalProps.colCount - 1);\n return w;\n }\n\n /**\n * 获取所有表列的宽度的数组\n * @returns {number[]} 宽度列表\n */\n getColsWidths(): number[] {\n const maxCount = this.colCount;\n const widths: number[] = [];\n\n for (let col = 0; col < maxCount; col++) {\n widths.push(this.getColWidth(col));\n }\n\n return widths;\n }\n\n /**\n * 根据列号 获取列宽最大值\n * @param {number} col column index\n * @return {number} column max width\n */\n getMaxColWidth(col: number): number {\n const obj = this.colWidthsLimit[col];\n let max = (obj && obj.max) ?? Infinity;\n if (typeof max === 'string') {\n max = _toPxWidth(this, max);\n }\n return max;\n }\n /**\n * 根据列号 设置列宽最大值\n * @param {number} col column index\n * @param {number} maxwidth column max width\n * @return {void}\n */\n setMaxColWidth(col: number, maxwidth: string | number): void {\n const obj = this.colWidthsLimit[col] || (this.colWidthsLimit[col] = {});\n obj.max = maxwidth;\n }\n /**\n * 根据列号 获取列宽最小值\n * @param {number} col column index\n * @return {number} column min width\n */\n getMinColWidth(col: number): number {\n const obj = this.colWidthsLimit[col];\n let min = (obj && obj.min) ?? 0;\n if (typeof min === 'string') {\n min = _toPxWidth(this, min);\n }\n return min;\n }\n /**\n * 根据列号 设置列宽最小值\n * @param {number} col column index\n * @param {number} minwidth column min width\n * @return {void}\n */\n setMinColWidth(col: number, minwidth: string | number): void {\n const obj = this.colWidthsLimit[col] || (this.colWidthsLimit[col] = {});\n obj.min = minwidth;\n }\n /**\n * 获取单元格的范围 返回值为Rect类型。不考虑是否为合并单元格的情况,坐标从0开始\n * @param {number} col column index\n * @param {number} row row index\n * @returns {Rect}\n */\n getCellRect(col: number, row: number): Rect {\n const isFrozenCell = this.isFrozenCell(col, row);\n\n let absoluteLeft;\n const width = this.getColWidth(col);\n if (isFrozenCell && isFrozenCell.col) {\n if (this.isRightFrozenColumn(col, row)) {\n if (this.getAllColsWidth() <= this.tableNoFrameWidth) {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n } else {\n absoluteLeft = this.tableNoFrameWidth - (this.getColsWidth(col, this.colCount - 1) ?? 0);\n }\n } else {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n // absoluteLeft += this.scrollLeft;\n }\n } else {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n }\n\n let absoluteTop;\n const height = this.getRowHeight(row);\n if (isFrozenCell && isFrozenCell.row) {\n if (this.isBottomFrozenRow(col, row)) {\n if (this.getAllRowsHeight() <= this.tableNoFrameHeight) {\n absoluteTop = this.getRowsHeight(0, row - 1);\n } else {\n absoluteTop = this.tableNoFrameHeight - (this.getRowsHeight(row, this.rowCount - 1) ?? 0);\n }\n } else {\n absoluteTop = this.getRowsHeight(0, row - 1);\n // absoluteTop += this.scrollTop;\n }\n } else {\n absoluteTop = this.getRowsHeight(0, row - 1);\n }\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取指定单元格【按合并后的区域】的rect 整表坐标系中(即相对于单元格[0,0]左上角来算的)\n * @param col\n * @param row\n * @returns\n */\n getMergeCellRect(col: number, row: number): Rect {\n const cellRange = this.getCellRange(col, row);\n const absoluteLeft = this.getColsWidth(0, cellRange.start.col - 1) || 0; // startCol为0时,absoluteLeft计算为Nan\n const width = this.getColsWidth(cellRange.start.col, cellRange.end.col);\n const absoluteTop = this.getRowsHeight(0, cellRange.start.row - 1) || 0;\n const height = this.getRowsHeight(cellRange.start.row, cellRange.end.row);\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取的位置是相对表格显示界面的左上角 情况滚动情况 如单元格已经滚出表格上方 则这个单元格的y将为负值\n * @param {number} col index of column, of the cell\n * @param {number} row index of row, of the cell\n * @returns {Rect} the rect of the cell.\n */\n getCellRelativeRect(col: number, row: number): Rect {\n const isFrozenCell = this.isFrozenCell(col, row);\n let relativeX = true;\n let relativeY = true;\n if (isFrozenCell?.col && isFrozenCell?.row) {\n relativeX = false;\n relativeY = false;\n } else if (isFrozenCell?.col) {\n relativeX = false;\n } else if (isFrozenCell?.row) {\n relativeY = false;\n }\n const cellRect = this.getCellRect(col, row);\n return this._toRelativeRect(cellRect, relativeX, relativeY);\n }\n /**\n * 获取的位置是相对表格显示界面的左上角\n * @param {number} range :CellRange | CellAddress 类型 可以传入单元格范围或者具体某个单元格 返回值是包括合并单元格的较大区域\n * @returns {Rect}\n */\n getCellRangeRelativeRect(range: CellRange | CellAddress): Rect {\n if ((<CellRange>range).start) {\n const isFrozenCell = this.isFrozenCell((<CellRange>range).start.col, (<CellRange>range).start.row);\n let relativeX = true;\n let relativeY = true;\n if (isFrozenCell?.col && isFrozenCell?.row) {\n relativeX = false;\n relativeY = false;\n } else if (isFrozenCell?.col) {\n relativeX = false;\n } else if (isFrozenCell?.row) {\n relativeY = false;\n }\n return this._toRelativeRect(\n this.getCellsRect(\n (<CellRange>range).start.col,\n (<CellRange>range).start.row,\n (<CellRange>range).end.col,\n (<CellRange>range).end.row\n ),\n relativeX,\n relativeY\n );\n }\n const cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n const isFrozenCell = this.isFrozenCell((<CellAddress>range).col, (<CellAddress>range).row);\n let relativeX = true;\n let relativeY = true;\n if (isFrozenCell?.col && isFrozenCell?.row) {\n relativeX = false;\n relativeY = false;\n } else if (isFrozenCell?.col) {\n relativeX = false;\n } else if (isFrozenCell?.row) {\n relativeY = false;\n }\n return this._toRelativeRect(\n this.getCellsRect(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row),\n relativeX,\n relativeY\n );\n }\n /**\n * 即仅视觉看到的位置 获取的位置是相对表格显示界面的左上角\n * @param {number} range :CellRange | CellAddress 类型\n * @returns {Rect} the visiable rect of the cell.可见矩形部分\n */\n getVisibleCellRangeRelativeRect(range: CellRange | CellAddress): Rect {\n let cellRange: CellRange;\n if ((<CellRange>range).start) {\n cellRange = <CellRange>range;\n } else {\n cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n }\n return this._getVisiableRect(this.getCellRangeRelativeRect(range), cellRange);\n }\n /**\n * 调整relativeRectObj 计算可见部分的rect\n * @param relativeRectObj\n * @returns\n */\n _getVisiableRect(relativeRectObj: Rect, cellRange: CellRange): Rect {\n const targetLeft =\n cellRange.start.col >= this.frozenColCount\n ? Math.max(relativeRectObj.left, this.frozenColCount >= 1 ? this.getColsWidth(0, this.frozenColCount - 1) : 0)\n : relativeRectObj.left;\n const targetRight = Math.min(relativeRectObj.right, this.tableNoFrameWidth);\n const rect = relativeRectObj.copy();\n rect.left = targetLeft;\n rect.right = targetRight;\n\n const targetTop =\n cellRange.start.row >= this.frozenRowCount\n ? Math.max(relativeRectObj.top, this.frozenRowCount >= 1 ? this.getRowsHeight(0, this.frozenRowCount - 1) : 0)\n : relativeRectObj.top;\n const targetBottom = Math.min(relativeRectObj.bottom, this.tableNoFrameHeight);\n rect.top = targetTop;\n rect.bottom = targetBottom;\n return rect;\n }\n /**\n * 获取指定行列区域的Rect\n * @param {number} startCol\n * @param {number} startRow\n * @param {number} endCol\n * @param {number} endRow\n * @returns {Rect}\n */\n getCellsRect(startCol: number, startRow: number, endCol: number, endRow: number): Rect {\n let absoluteLeft = this.getColsWidth(0, startCol - 1) || 0; // startCol为0时,absoluteLeft计算为Nan\n let width = this.getColsWidth(startCol, endCol);\n const scrollLeft = this.scrollLeft;\n\n const tableWidth = Math.min(this.tableNoFrameWidth, this.getAllColsWidth());\n const tableHeight = Math.min(this.tableNoFrameHeight, this.getAllRowsHeight());\n if (this.isLeftFrozenColumn(startCol) && this.isRightFrozenColumn(endCol)) {\n width = this.tableNoFrameWidth - (this.getColsWidth(startCol + 1, this.colCount - 1) ?? 0) - absoluteLeft;\n // width =\n // this.tableNoFrameWidth -\n // (this.getColsWidth(0, startCol - 1) ?? 0) -\n // (this.getColsWidth(endCol + 1, this.colCount - 1) ?? 0);\n } else if (this.isLeftFrozenColumn(startCol) && !this.isLeftFrozenColumn(endCol)) {\n width = Math.max(width - scrollLeft, this.getColsWidth(startCol, this.frozenColCount - 1));\n } else if (!this.isRightFrozenColumn(startCol) && this.isRightFrozenColumn(endCol)) {\n absoluteLeft = Math.min(absoluteLeft - scrollLeft, tableWidth - this.getRightFrozenColsWidth());\n width = tableWidth - (this.getColsWidth(startCol + 1, this.colCount - 1) ?? 0) - absoluteLeft;\n } else if (this.isRightFrozenColumn(startCol)) {\n absoluteLeft = tableWidth - (this.getColsWidth(startCol, this.colCount - 1) ?? 0);\n } else {\n // 范围全部在整体一块区域 如都在右侧冻结区域 都可以走这块逻辑\n // do nothing\n }\n\n let absoluteTop = this.getRowsHeight(0, startRow - 1);\n let height = this.getRowsHeight(startRow, endRow);\n const scrollTop = this.scrollTop;\n if (this.isTopFrozenRow(startRow) && this.isBottomFrozenRow(endRow)) {\n height = this.tableNoFrameHeight - (this.getRowsHeight(startRow + 1, this.rowCount - 1) ?? 0) - absoluteTop;\n // height =\n // this.tableNoFrameHeight -\n // (this.getRowsHeight(0, startRow - 1) ?? 0) -\n // (this.getRowsHeight(endRow + 1, this.rowCount - 1) ?? 0);\n } else if (this.isTopFrozenRow(startRow) && !this.isTopFrozenRow(endRow)) {\n height = Math.max(height - scrollTop, this.getRowsHeight(startRow, this.frozenRowCount - 1));\n } else if (!this.isBottomFrozenRow(startRow) && this.isBottomFrozenRow(endRow)) {\n absoluteTop = Math.min(absoluteTop - scrollTop, tableHeight - this.getBottomFrozenRowsHeight());\n height = tableHeight - (this.getRowsHeight(startRow + 1, this.rowCount - 1) ?? 0) - absoluteTop;\n } else if (this.isBottomFrozenRow(startRow)) {\n absoluteTop = tableHeight - (this.getRowsHeight(startRow, this.rowCount - 1) ?? 0);\n } else {\n // 范围全部在整体一块区域 如都在右侧冻结区域 都可以走这块逻辑\n // do nothing\n }\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取指定区域的宽度\n * @param startCol\n * @param startRow\n * @param endCol\n * @param endRow\n * @returns\n */\n getCellsRectWidth(startCol: number, startRow: number, endCol: number, endRow: number): number {\n const isFrozenStartCell = this.isFrozenCell(startCol, startRow);\n const isFrozenEndCell = this.isFrozenCell(endCol, endRow);\n let width = this.getColsWidth(startCol, endCol);\n if (isFrozenStartCell && isFrozenStartCell.col) {\n const scrollLeft = this.scrollLeft;\n if (!isFrozenEndCell || !isFrozenEndCell.col) {\n width -= scrollLeft;\n width = Math.max(width, this.getColsWidth(startCol, this.frozenColCount - 1));\n }\n }\n return width;\n }\n /**\n * 获取行列范围range或者某个单元格所做合并大的范围range的rect范围\n * @param range\n * @returns\n */\n getCellRangeRect(range: CellRange | CellAddress): Rect {\n if ((<CellRange>range).start) {\n return this.getCellsRect(\n (<CellRange>range).start.col,\n (<CellRange>range).start.row,\n (<CellRange>range).end.col,\n (<CellRange>range).end.row\n );\n }\n const cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n return this.getCellsRect(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row);\n }\n /**\n * 获取行列范围range或者某个单元格所做合并大的范围range的宽度\n * @param range\n * @returns\n */\n getCellRangeRectWidth(range: CellRange | CellAddress): number {\n if ((<CellRange>range).start) {\n return this.getCellsRectWidth(\n (<CellRange>range).start.col,\n (<CellRange>range).start.row,\n (<CellRange>range).end.col,\n (<CellRange>range).end.row\n );\n }\n const cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n return this.getCellsRectWidth(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row);\n }\n /** 判断某个单元格个是否在冻结行或冻结列中 */\n isFrozenCell(\n col: number,\n row: number\n ): {\n row: boolean;\n col: boolean;\n } | null {\n const isFrozenRow = this.isFrozenRow(row);\n const isFrozenCol = this.isFrozenColumn(col);\n if (isFrozenRow || isFrozenCol) {\n return {\n row: isFrozenRow,\n col: isFrozenCol\n };\n }\n return null;\n }\n /**\n * 根据y值计算所在行\n * @param absoluteY\n * @returns\n */\n getRowAt(absoluteY: number): { top: number; row: number; bottom: number; height: number } {\n return getRowAt(absoluteY, this);\n }\n /**\n * 根据x值计算所在列\n * @param absoluteX\n * @returns\n */\n getColAt(absoluteX: number): { left: number; col: number; right: number; width: number } {\n return getColAt(absoluteX, this);\n }\n /**\n * 根据坐标值获取行列位置,index和rect范围\n * @param absoluteX\n * @param absoluteY\n * @returns\n */\n getCellAt(absoluteX: number, absoluteY: number): CellAddressWithBound {\n return getCellAt(absoluteX, absoluteY, this);\n }\n\n /**\n * 获取屏幕坐标对应的单元格信息,考虑滚动\n * @param this\n * @param relativeX 左边x值,相对于容器左上角,已考虑格滚动情况\n * @param relativeY 左边y值,相对于容器左上角,已考虑格滚动情况\n * @returns\n */\n getCellAtRelativePosition(relativeX: number, relativeY: number): CellAddressWithBound {\n return getCellAtRelativePosition(relativeX, relativeY, this);\n }\n getColAtRelativePosition(relativeX: number): number {\n return getColAtRelativePosition(relativeX, this);\n }\n getRowAtRelativePosition(relativeY: number): number {\n return getRowAtRelativePosition(relativeY, this);\n }\n /**\n * 检查行列号是否正确\n * @param col\n * @param row\n * @returns\n */\n _checkRowCol(col: number, row: number) {\n if (col >= 0 && col < this.colCount && row >= 0 && row < this.rowCount) {\n return true;\n }\n return false;\n }\n /**\n * 指定的行列如果在可视范围内,则不进行逻辑处理;如果不在可视范围需要滚动一定距离能将其显示出来\n * @param {number} col The column index.\n * @param {number} row The row index\n * @return {void}\n */\n _makeVisibleCell(col: number, row: number): void {\n if (this._checkRowCol(col, row)) {\n const isFrozenCell = this.isFrozenCell(col, row);\n if (isFrozenCell && isFrozenCell.col && isFrozenCell.row) {\n return;\n }\n const rect = this.getCellRect(col, row);\n const visibleRect = _getScrollableVisibleRect(this);\n if (visibleRect.contains(rect)) {\n return;\n }\n if (!isFrozenCell || !isFrozenCell.col) {\n if (this.getColsWidth(0, this.frozenColCount - 1) + rect.width > this.canvas.width) {\n // do nothing\n // 防止点击左右跳动\n } else if (rect.left < visibleRect.left) {\n this.scrollLeft -= visibleRect.left - rect.left;\n } else if (visibleRect.right < rect.right) {\n this.scrollLeft -= visibleRect.right - rect.right;\n }\n }\n if (!isFrozenCell || !isFrozenCell.row) {\n if (this.getRowsHeight(0, this.frozenRowCount - 1) + rect.height > this.canvas.height) {\n // do nothing\n } else if (rect.top < visibleRect.top) {\n this.scrollTop -= visibleRect.top - rect.top;\n } else if (visibleRect.bottom < rect.bottom) {\n this.scrollTop -= visibleRect.bottom - rect.bottom;\n }\n }\n }\n }\n\n /**\n * 重绘表格(同步绘制)\n */\n render(): void {\n this.scenegraph.renderSceneGraph();\n }\n /**\n * 异步重绘表格\n */\n renderAsync(): Promise<void> {\n this.scenegraph.updateNextFrame();\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve();\n }, 0);\n });\n }\n /**\n * 转换成视觉相对table左上角的坐标 如滚动超出表格上方 y将为负值\n * @param absoluteRect\n * @returns\n */\n _toRelativeRect(absoluteRect: Rect, relativeX: boolean = true, relativeY: boolean = true): Rect {\n const rect = absoluteRect.copy();\n const visibleRect = this.getVisibleRect();\n rect.offsetLeft(this.tableX - (relativeX ? visibleRect.left : 0));\n rect.offsetTop(this.tableY - (relativeY ? visibleRect.top : 0));\n rect.offsetLeft(this.options.viewBox?.x1 ?? 0);\n rect.offsetTop(this.options.viewBox?.y1 ?? 0);\n return rect;\n }\n\n /**\n * 想象一张可以任意大的表格,呈现在我们眼前的只是其中一部分,那这个部分怎么来描述。\n * 如有滚动情况 scrollLeft为100,也就是往右滚动了100(左侧隐藏100)。_getVisibleRect获取到的Rect{_left: 100, _top: 0, _width: 1460, _height: 685}\n * @param table\n * @returns\n */\n getVisibleRect(): Rect {\n const { scrollTop, scrollLeft } = this;\n const width = this.tableNoFrameWidth;\n const height = this.tableNoFrameHeight;\n return new Rect(scrollLeft, scrollTop, width, height);\n }\n /**\n * 获取网格中完全可见的可滚动行数。不包括表头及冻结的行\n * @returns {number}\n */\n get visibleRowCount(): number {\n const { frozenRowCount } = this;\n const visibleRect = this.getVisibleRect();\n const visibleTop =\n frozenRowCount > 0 ? visibleRect.top + this.getRowsHeight(0, frozenRowCount - 1) : visibleRect.top;\n\n const initRow = this.getTargetRowAt(visibleTop);\n if (!initRow) {\n return 0;\n }\n const startRow = Math.max(initRow.top >= visibleTop ? initRow.row : initRow.row + 1, frozenRowCount);\n let absoluteTop = this.getRowsHeight(0, startRow - 1);\n let count = 0;\n const { rowCount } = this;\n for (let row = startRow; row < rowCount; row++) {\n const height = this.getRowHeight(row);\n const bottom = absoluteTop + height;\n if (visibleRect.bottom < bottom) {\n break;\n }\n count++;\n absoluteTop = bottom;\n }\n return count;\n }\n /** 获取表格body部分的显示单元格范围 */\n getBodyVisibleCellRange() {\n const { scrollTop, scrollLeft } = this;\n const frozenRowsHeight = this.getFrozenRowsHeight();\n const frozenColsWidth = this.getFrozenColsWidth();\n const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();\n const rightFrozenColsWidth = this.getRightFrozenColsWidth();\n // 计算非冻结\n const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1);\n const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1);\n const rowEnd =\n this.getAllRowsHeight() > this.tableNoFrameHeight\n ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight).row\n : this.rowCount - 1;\n const colEnd =\n this.getAllColsWidth() > this.tableNoFrameWidth\n ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth).col\n : this.colCount - 1;\n if (colEnd < 0 || rowEnd < 0) {\n return null;\n }\n return { rowStart, colStart, rowEnd, colEnd };\n }\n /**\n * 获取表格body部分的显示行号范围\n * @param start_deltaY 相对于表格body部分的顶部偏移量(不设置默认是可视区域的最边缘)\n * @param end_deltaY 相对于表格body部分的底部偏移量(不设置默认是可视区域的最边缘)\n * @returns { rowStart: number; rowEnd: number }\n */\n getBodyVisibleRowRange(start_deltaY: number = 0, end_deltaY: number = 0) {\n const { scrollTop } = this;\n const frozenRowsHeight = this.getFrozenRowsHeight();\n const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();\n // 计算非冻结\n const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1 + start_deltaY);\n const rowEnd =\n this.getAllRowsHeight() > this.tableNoFrameHeight\n ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight + end_deltaY).row\n : this.rowCount - 1;\n if (rowEnd < 0) {\n return null;\n }\n return { rowStart, rowEnd };\n }\n /**\n * 获取表格body部分的显示列号范围\n * @param start_deltaX 相对于表格body部分的左侧偏移量(不设置默认是可视区域的最边缘)\n * @param end_deltaX 相对于表格body部分的右侧偏移量(不设置默认是可视区域的最边缘)\n * @returns { colStart: number; colEnd: number }\n */\n getBodyVisibleColRange(start_deltaX: number = 0, end_deltaX: number = 0) {\n const { scrollLeft } = this;\n const frozenColsWidth = this.getFrozenColsWidth();\n const rightFrozenColsWidth = this.getRightFrozenColsWidth();\n // 计算非冻结\n const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1 + start_deltaX);\n\n const colEnd =\n this.getAllColsWidth() > this.tableNoFrameWidth\n ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth + end_deltaX).col\n : this.colCount - 1;\n if (colEnd < 0) {\n return null;\n }\n return { colStart, colEnd };\n }\n /**\n * 获取表格中完全可见的可滚动列数。不包括表头及冻结的列\n * @returns {number}\n */\n get visibleColCount(): number {\n const { frozenColCount } = this;\n const visibleRect = this.getVisibleRect();\n const visibleLeft =\n frozenColCount > 0 ? visibleRect.left + this.getColsWidth(0, frozenColCount - 1) : visibleRect.left;\n\n const initCol = this.getTargetColAt(visibleLeft);\n if (!initCol) {\n return 0;\n }\n const startCol = Math.max(initCol.left >= visibleLeft ? initCol.col : initCol.col + 1, frozenColCount);\n let absoluteLeft = this.getColsWidth(0, startCol - 1);\n let count = 0;\n const { colCount } = this;\n for (let col = startCol; col < colCount; col++) {\n const width = this.getColWidth(col);\n const right = absoluteLeft + width;\n if (visibleRect.right < right) {\n break;\n }\n count++;\n absoluteLeft = right;\n }\n return count;\n }\n\n get scrollTop(): number {\n return this.stateManager.scroll.verticalBarPos;\n }\n set scrollTop(scrollTop: number) {\n this.stateManager.setScrollTop(scrollTop);\n }\n\n get scrollLeft(): number {\n return this.stateManager.scroll.horizontalBarPos;\n }\n set scrollLeft(scrollLeft: number) {\n this.stateManager.setScrollLeft(scrollLeft);\n }\n\n getScrollLeft() {\n return this.scrollLeft;\n }\n getScrollTop() {\n return this.scrollTop;\n }\n setScrollLeft(num: number) {\n this.scrollLeft = Math.ceil(num);\n }\n setScrollTop(num: number) {\n this.scrollTop = Math.ceil(num);\n }\n /**\n * 获取有省略文字的的单元格文本内容\n * cellTextOverflows存储了无法显示全文本的value,供toolTip使用\n * @param {number} col column index.\n * @param {number} row row index\n * @return {string | null}\n */\n getCellOverflowText(col: number, row: number): string | null {\n return this.scenegraph.getCellOverflowText(col, row);\n }\n /**\n * 添加析构逻辑\n * @param releaseObj\n */\n addReleaseObj(releaseObj: { release: () => void }): void {\n if (!releaseObj || !releaseObj.release || typeof releaseObj.release !== 'function') {\n throw new Error('not releaseObj!');\n }\n const releaseList = (this.internalProps.releaseList = this.internalProps.releaseList || []);\n releaseList.push(releaseObj);\n }\n private dispose() {\n this.release();\n }\n /**\n * Dispose the table instance.\n * @returns {void}\n */\n release(): void {\n const internalProps = this.internalProps;\n if (this.isReleased) {\n return;\n }\n internalProps.tooltipHandler?.release?.();\n internalProps.menuHandler?.release?.();\n\n super.release?.();\n this.pluginManager.release();\n internalProps.handler?.release?.();\n // internalProps.scrollable?.release?.();\n this.eventManager.release();\n internalProps.focusControl?.release?.();\n internalProps.legends?.forEach(legend => {\n legend?.release();\n });\n internalProps.title?.release();\n internalProps.title = null;\n internalProps.emptyTip?.release();\n internalProps.emptyTip = null;\n internalProps.layoutMap.release();\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n\n this.scenegraph.stage.release();\n this.scenegraph.proxy.release();\n\n const parentElement = internalProps.element?.parentElement;\n if (parentElement && !this.options.canvas) {\n parentElement.removeChild(internalProps.element);\n }\n (this as any).editorManager?.editingEditor?.onEnd?.();\n this.isReleased = true;\n this.scenegraph = null;\n this.internalProps = null;\n\n this.reactCustomLayout?.clearCache();\n\n clearChartRenderQueue();\n }\n\n fireListeners<TYPE extends keyof TableEventHandlersEventArgumentMap>(\n type: TYPE,\n event: TableEventHandlersEventArgumentMap[TYPE]\n ): TableEventHandlersReturnMap[TYPE][] {\n return super.fireListeners(type, event);\n }\n\n /**\n * 更新options 目前只支持全量更新\n * @param options\n */\n updateOption(\n options: BaseTableConstructorOptions,\n updateConfig: { clearColWidthCache?: boolean; clearRowHeightCache?: boolean } = {\n clearColWidthCache: true,\n clearRowHeightCache: true\n }\n ) {\n this.fireListeners(TABLE_EVENT_TYPE.BEFORE_UPDATE_OPTION, { options, container: this.container });\n this.editorManager?.cancelEdit();\n (this.options as BaseTable['options']) = options;\n this._hasAutoImageColumn = undefined;\n const {\n // rowCount = 0,\n // colCount = 0,\n frozenColCount = 0,\n unfreezeAllOnExceedsMaxWidth,\n // frozenRowCount = 0,\n defaultRowHeight = 40,\n defaultHeaderRowHeight,\n defaultColWidth = 80,\n defaultHeaderColWidth = 80,\n keyboardOptions,\n eventOptions,\n rowSeriesNumber,\n enableCheckboxCascade,\n enableHeaderCheckboxCascade,\n // columnSeriesNumber,\n // disableRowHeaderColumnResize,\n columnResizeMode,\n rowResizeMode = 'none',\n resize,\n dragHeaderMode,\n dragOrder,\n // scrollBar,\n showFrozenIcon,\n allowFrozenColCount,\n padding,\n hover,\n menu,\n select: click,\n pixelRatio,\n widthMode,\n heightMode,\n autoFillWidth,\n autoFillHeight,\n containerFit,\n widthAdaptiveMode,\n heightAdaptiveMode,\n customRender,\n renderChartAsync,\n renderChartAsyncBatchCount,\n canvasWidth,\n canvasHeight,\n contentOffsetX: translateX = 0,\n contentOffsetY: translateY = 0,\n overscrollBehavior,\n limitMinWidth,\n limitMinHeight\n } = options;\n const { groupConfig, groupBy, groupTitleFieldFormat, groupTitleCustomLayout, enableTreeStickCell } =\n options as ListTableConstructorOptions;\n if (pixelRatio && pixelRatio !== this.internalProps.pixelRatio) {\n this.internalProps.pixelRatio = pixelRatio;\n }\n // 更新padding\n if (padding) {\n if (typeof padding === 'number') {\n this.padding.top = padding;\n this.padding.left = padding;\n this.padding.bottom = padding;\n this.padding.right = padding;\n } else {\n padding.top && (this.padding.top = padding.top);\n padding.bottom && (this.padding.bottom = padding.bottom);\n padding.left && (this.padding.left = padding.left);\n padding.right && (this.padding.right = padding.right);\n }\n }\n this.showFrozenIcon = typeof showFrozenIcon === 'boolean' ? showFrozenIcon : true;\n if (typeof allowFrozenColCount === 'number' && allowFrozenColCount <= 0) {\n this.showFrozenIcon = false;\n }\n\n this.widthMode = widthMode ?? 'standard';\n this.heightMode = heightMode ?? 'standard';\n this._widthAdaptiveMode = widthAdaptiveMode ?? 'only-body';\n this._heightAdaptiveMode = heightAdaptiveMode ?? 'only-body';\n this.autoFillWidth = autoFillWidth ?? false;\n this.autoFillHeight = autoFillHeight ?? false;\n // 处理containerFit配置\n if (containerFit !== undefined) {\n if (typeof containerFit === 'boolean') {\n this._containerFit = { width: containerFit, height: containerFit };\n } else if (containerFit && typeof containerFit === 'object') {\n this._containerFit = {\n width: containerFit.width ?? true,\n height: containerFit.height ?? true\n };\n } else {\n this._containerFit = { width: false, height: false };\n }\n }\n this.customRender = customRender;\n this.contentOffsetX = translateX ?? 0;\n this.contentOffsetY = translateY ?? 0;\n this.canvasWidth = isNumber(canvasWidth) ? canvasWidth : undefined;\n this.canvasHeight = isNumber(canvasHeight) ? canvasHeight : undefined;\n // 更新protectedSpace\n const internalProps: IBaseTableProtected = this.internalProps;\n if (Env.mode !== 'node' && !options.canvas) {\n updateRootElementPadding(internalProps.element, this.padding);\n }\n\n this.columnWidthComputeMode = options.columnWidthComputeMode ?? 'normal';\n\n // internalProps.rowCount = rowCount;\n // internalProps.colCount = colCount;\n internalProps.frozenColCount = frozenColCount;\n internalProps.unfreezeAllOnExceedsMaxWidth = unfreezeAllOnExceedsMaxWidth ?? true;\n // internalProps.frozenRowCount = frozenRowCount;\n internalProps.defaultRowHeight = defaultRowHeight;\n internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight ?? defaultRowHeight;\n internalProps.defaultColWidth = defaultColWidth;\n internalProps.defaultHeaderColWidth = defaultHeaderColWidth ?? defaultColWidth;\n internalProps.keyboardOptions = keyboardOptions;\n internalProps.eventOptions = eventOptions;\n internalProps.rowSeriesNumber = rowSeriesNumber;\n internalProps.enableCheckboxCascade = enableCheckboxCascade ?? rowSeriesNumber?.enableTreeCheckbox ?? true;\n internalProps.enableHeaderCheckboxCascade = enableCheckboxCascade || (enableHeaderCheckboxCascade ?? true);\n // internalProps.columnSeriesNumber = columnSeriesNumber;\n\n internalProps.columnResizeMode = resize?.columnResizeMode ?? columnResizeMode;\n internalProps.canResizeColumn = resize?.canResizeColumn;\n internalProps.rowResizeMode = resize?.rowResizeMode ?? rowResizeMode;\n internalProps.dragHeaderMode = dragOrder?.dragHeaderMode ?? dragHeaderMode ?? 'none';\n internalProps.renderChartAsync = renderChartAsync;\n setBatchRenderChartCount(renderChartAsyncBatchCount);\n internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';\n internalProps.cellTextOverflows = {};\n\n (internalProps as ListTableProtected).groupBy = groupConfig?.groupBy ?? groupBy;\n (internalProps as ListTableProtected).groupTitleCheckbox = groupConfig?.titleCheckbox;\n (internalProps as ListTableProtected).groupTitleFieldFormat =\n groupConfig?.titleFieldFormat ?? groupTitleFieldFormat;\n (internalProps as ListTableProtected).groupTitleCustomLayout =\n groupConfig?.titleCustomLayout ?? groupTitleCustomLayout;\n (internalProps as ListTableProtected).enableTreeStickCell = groupConfig?.enableTreeStickCell ?? enableTreeStickCell;\n\n if (updateConfig?.clearColWidthCache) {\n internalProps._widthResizedColMap.clear();\n this.colWidthsMap = new NumberMap();\n this.colContentWidthsMap = new NumberMap();\n this.colWidthsLimit = {};\n }\n\n if (updateConfig?.clearRowHeightCache) {\n internalProps._heightResizedRowMap.clear();\n internalProps._rowHeightsMap = new NumberRangeMap(this);\n internalProps._rowRangeHeightsMap = new Map();\n internalProps._colRangeWidthsMap = new Map();\n }\n\n internalProps.stick.changedCells.clear();\n\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT);\n internalProps.theme.isPivot = this.isPivotTable();\n setIconColor(internalProps.theme.functionalIconsStyle);\n this.scenegraph.updateStageBackground();\n // this._updateSize();\n //设置是否自动撑开的配置\n // internalProps.autoRowHeight = options.autoRowHeight ?? false;\n //是否统一设置为多行文本\n internalProps.autoWrapText = options.autoWrapText;\n internalProps.enableLineBreak = options.enableLineBreak;\n internalProps.allowFrozenColCount = options.allowFrozenColCount ?? 0;\n internalProps.limitMaxAutoWidth = options.limitMaxAutoWidth ?? 450;\n internalProps.limitMinWidth =\n limitMinWidth !== null && limitMinWidth !== undefined\n ? typeof limitMinWidth === 'number'\n ? limitMinWidth\n : limitMinWidth\n ? 10\n : 0\n : 10;\n internalProps.limitMinHeight =\n limitMinHeight !== null && limitMinHeight !== undefined\n ? typeof limitMinHeight === 'number'\n ? limitMinHeight\n : limitMinHeight\n ? 10\n : 0\n : 10;\n // 生成scenegraph\n // this._vDataSet = new DataSet();\n internalProps.legends?.forEach(legend => {\n legend?.release();\n });\n internalProps.title?.release();\n internalProps.title = null;\n internalProps.emptyTip?.release();\n internalProps.emptyTip = null;\n internalProps.layoutMap.release();\n clearChartRenderQueue();\n this.scenegraph.clearCells();\n this.scenegraph.updateComponent();\n this.stateManager.updateOptionSetState();\n\n this._updateSize();\n // this.stateManager = new StateManager(this);\n // this.eventManager = new EventManager(this);\n this.eventManager.updateEventBinder();\n if (options.legends) {\n internalProps.legends = [];\n const createLegend = Factory.getFunction('createLegend') as CreateLegend;\n if (Array.isArray(options.legends)) {\n for (let i = 0; i < options.legends.length; i++) {\n internalProps.legends.push(createLegend(options.legends[i], this));\n }\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n } else {\n internalProps.legends.push(createLegend(options.legends, this));\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n }\n }\n // if (options.title) {\n // internalProps.title = new Title(options.title, this);\n // this.scenegraph.tableGroup.setAttributes({\n // x: this.tableX,\n // y: this.tableY\n // });\n // }\n internalProps.tooltip = Object.assign(\n {\n parentElement: this.getElement(),\n renderMode: 'html',\n isShowOverflowTextTooltip: false,\n confine: true,\n position: Placement.bottom\n },\n options.tooltip\n );\n if (internalProps.tooltip.renderMode === 'html' && !internalProps.tooltipHandler) {\n const TooltipHandler = Factory.getComponent('tooltipHandler') as ITooltipHandler;\n internalProps.tooltipHandler = new TooltipHandler(this, internalProps.tooltip.confine);\n }\n\n internalProps.menu = Object.assign(\n {\n renderMode: 'html'\n },\n options.menu\n );\n\n Array.isArray(options.menu?.dropDownMenuHighlight) &&\n this.setDropDownMenuHighlight(options.menu?.dropDownMenuHighlight);\n\n // 全局下拉菜单\n (Array.isArray(options.menu?.defaultHeaderMenuItems) ||\n typeof options.menu?.defaultHeaderMenuItems === 'function') &&\n (this.globalDropDownMenu = options.menu.defaultHeaderMenuItems);\n\n if (internalProps.menu.renderMode === 'html' && !internalProps.menuHandler) {\n const MenuHandler = Factory.getComponent('menuHandler') as IMenuHandler;\n internalProps.menuHandler = new MenuHandler(this);\n }\n this.clearCellStyleCache();\n if (updateConfig?.clearColWidthCache) {\n this.clearColWidthCache();\n }\n if (updateConfig?.clearRowHeightCache) {\n this.clearRowHeightCache();\n }\n\n internalProps.customMergeCell = getCustomMergeCellFunc(options.customMergeCell);\n\n this.customCellStylePlugin?.updateCustomCell(\n options.customCellStyle ?? [],\n options.customCellStyleArrangement ?? []\n );\n this._adjustCanvasSizeByOption();\n }\n /**\n * 重新创建场景树并重新渲染\n */\n renderWithRecreateCells() {\n this.internalProps.stick.changedCells.clear();\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.render();\n }\n /**\n * 获取固定行总高\n * @returns\n */\n getFrozenRowsHeight(): number {\n const height = this.getRowsHeight(0, this.frozenRowCount - 1);\n return height;\n }\n /**\n * 获取固定列总宽\n * @returns\n */\n getFrozenColsWidth(): number {\n const w = this.getColsWidth(0, this.frozenColCount - 1);\n return w;\n }\n /**\n * 获取底部冻结固定列总宽\n * @returns\n */\n getBottomFrozenRowsHeight(): number {\n if (this.bottomFrozenRowCount > 0) {\n // const height = this.getRowsHeight(this.rowCount - this.bottomFrozenRowCount, this.rowCount - 1);//替换成下面遍历获取高度,鉴于冻结数量有限。否则这里在初始化的时候ClipBodyGroupBeforeRenderContribution.drawShap就先走了这个计算,导致初始化时间加长,而后续计算行高列宽会清除这个计算结果,浪费了性能\n let height = 0;\n for (let row = this.rowCount - this.bottomFrozenRowCount; row <= this.rowCount - 1; row++) {\n height += this.getRowHeight(row);\n }\n return height;\n }\n return 0;\n }\n /**\n * 获取右侧冻结固定列总宽\n * @returns\n */\n getRightFrozenColsWidth(): number {\n if (this.rightFrozenColCount > 0) {\n // const width = this.getColsWidth(this.colCount - this.rightFrozenColCount, this.colCount - 1); // 同getBottomFrozenRowsHeight的原因\n let width = 0;\n for (let col = this.colCount - this.rightFrozenColCount; col <= this.colCount - 1; col++) {\n width += this.getColWidth(col);\n }\n return width;\n }\n return 0;\n }\n /**\n * 获取实际绘制范围的宽高,而非可绘制画布大小\n * @param table\n * @returns\n */\n getDrawRange(): Rect {\n //考虑表格整体边框的问题\n // const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n // const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n const width = this.containerFit?.width\n ? this.tableNoFrameWidth\n : Math.min(this.tableNoFrameWidth, this.getAllColsWidth());\n const height = this.containerFit?.height\n ? this.tableNoFrameHeight\n : Math.min(this.tableNoFrameHeight, this.getAllRowsHeight());\n // Math.max(lineWidths[3] ?? 0, shadowWidths[3] ?? 0),\n // Math.max(lineWidths[1] ?? 0, shadowWidths[1] ?? 0),\n return new Rect(this.tableX, this.tableY, width, height);\n }\n\n /** @private 将鼠标坐标值 转换成表格坐标系中的坐标位置\n * isAddScroll默认为true 返回的xy 加上了scrollX和scrollY。如滚动后通过该方法计算出的坐标值是未滚动时的坐标\n */\n _getMouseAbstractPoint(evt: TouchEvent | MouseEvent | undefined): { x: number; y: number; inTable: boolean } {\n const table = this;\n let e: MouseEvent | Touch;\n if (!evt) {\n return { inTable: false, x: undefined, y: undefined };\n }\n if (isTouchEvent(evt)) {\n e = evt.changedTouches[0];\n } else {\n e = evt;\n }\n const clientX = e.clientX || e.pageX + window.scrollX;\n const clientY = e.clientY || e.pageY + window.scrollY;\n const rect = table.internalProps.canvas.getBoundingClientRect();\n let inTable = true;\n if (rect.right <= clientX) {\n inTable = false;\n }\n if (rect.bottom <= clientY) {\n inTable = false;\n }\n\n const currentWidth = rect.width;\n // 考虑旋转情况下宽高值和rect的宽高是相反的\n const originWidth = (this.rotateDegree === 90 ? this.canvas.offsetHeight : this.canvas.offsetWidth) || currentWidth;\n const widthRatio = currentWidth / originWidth;\n\n const currentHeight = rect.height;\n // 考虑旋转情况下宽高值和rect的宽高是相反的\n const originHeight =\n (this.rotateDegree === 90 ? this.canvas.offsetWidth : this.canvas.offsetHeight) || currentHeight;\n const heightRatio = currentHeight / originHeight;\n //接下来和rotateTablePlugin插件逻辑有点耦合了 需要借助旋转插件的矩阵来计算相对于表格的坐标\n const rotateTablePlugin = this.pluginManager.getPluginByName('Rotate Table');\n if (rotateTablePlugin && this.rotateDegree === 90) {\n const x = clientX / widthRatio - (this.options.viewBox?.x1 ?? 0);\n const y = clientY / heightRatio - (this.options.viewBox?.y1 ?? 0);\n const point = { x, y, inTable };\n const matrix = (rotateTablePlugin as any).matrix;\n matrix.transformPoint(point, point);\n return point;\n }\n const x = (clientX - rect.left) / widthRatio - (this.options.viewBox?.x1 ?? 0);\n const y = (clientY - rect.top) / heightRatio - (this.options.viewBox?.y1 ?? 0);\n const point = { x, y, inTable };\n if (this.internalProps.modifiedViewBoxTransform && this.scenegraph.stage.window.getViewBoxTransform()) {\n const transform = this.scenegraph.stage.window.getViewBoxTransform();\n transform.transformPoint(point, point);\n return point;\n }\n return point;\n }\n getTheme() {\n return this.internalProps.theme;\n }\n\n /**\n * 根据x获取该位置所处列值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetColAt(absoluteX: number): ColumnInfo | null {\n return getTargetColAt(absoluteX, this);\n }\n /**\n * 根据y获取该位置所处行值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetRowAt(absoluteY: number): RowInfo | null {\n const targetRow = getTargetRowAt(absoluteY, this);\n if (targetRow) {\n targetRow.row = Math.min(targetRow.row, this.rowCount - 1);\n }\n return targetRow;\n }\n\n /**\n * 根据x获取该位置所处列值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetColAtConsiderRightFrozen(absoluteX: number, isConsider: boolean): ColumnInfo | null {\n return getTargetColAtConsiderRightFrozen(absoluteX, isConsider, this);\n }\n\n /**\n * 根据y获取该位置所处行值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetRowAtConsiderBottomFrozen(absoluteY: number, isConsider: boolean): RowInfo | null {\n return getTargetRowAtConsiderBottomFrozen(absoluteY, isConsider, this);\n }\n\n /**\n * 清除选中单元格\n */\n clearSelected() {\n this.stateManager.updateSelectPos(-1, -1);\n }\n /**\n * 选中单元格 和鼠标选中单元格效果一致\n * @param col\n * @param row\n * @param enableShiftSelectMode 是否按住 shift 键\n * @param enableCtrlSelectMode 是否按住 ctrl 键\n * @param makeSelectCellVisible 是否让选中的单元格可见\n * @param skipBodyMerge 是否忽略合并单元格,默认 false针对合并单元自动扩大选取范围\n */\n selectCell(\n col: number,\n row: number,\n enableShiftSelectMode?: boolean,\n enableCtrlSelectMode?: boolean,\n makeSelectCellVisible?: boolean,\n skipBodyMerge: boolean = false\n ) {\n const isHasSelected = !!this.stateManager.select.ranges?.length;\n this.stateManager.updateSelectPos(\n col,\n row,\n enableShiftSelectMode,\n enableCtrlSelectMode,\n false,\n makeSelectCellVisible ?? this.options.select?.makeSelectCellVisible ?? true,\n skipBodyMerge\n );\n this.stateManager.endSelectCells(true, isHasSelected);\n }\n /**\n * 选中单元格区域,可设置多个区域同时选中\n * @param cellRanges: CellRange[]\n */\n selectCells(cellRanges: CellRange[]) {\n const { scrollLeft, scrollTop } = this;\n cellRanges.forEach((cellRange: CellRange, index: number) => {\n const startRow = cellRange.start.row;\n const startCol = cellRange.start.col;\n const endRow = cellRange.end.row;\n const endCol = cellRange.end.col;\n if (startCol === endCol && startRow === endRow) {\n this.stateManager.updateSelectPos(\n startCol,\n startRow,\n false,\n index >= 1,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n } else {\n this.stateManager.updateSelectPos(\n startCol,\n startRow,\n false,\n index >= 1,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n this.stateManager.updateInteractionState(InteractionState.grabing);\n this.stateManager.updateSelectPos(\n endCol,\n endRow,\n false,\n index >= 1,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n }\n this.stateManager.endSelectCells(false, false);\n this.stateManager.updateInteractionState(InteractionState.default);\n });\n // 选择后 会自动滚动到所选区域最后一行一列的位置 这里再设置回滚动前位置\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n selectRow(rowIndex: number, isCtrl?: boolean, isShift?: boolean) {\n const currentSelectRanges = this.stateManager.select.ranges;\n if (isCtrl) {\n currentSelectRanges.push({\n start: { col: 0, row: rowIndex },\n end: { col: this.colCount - 1, row: rowIndex }\n });\n this.selectCells(currentSelectRanges);\n } else if (isShift) {\n const lastSelectRange = currentSelectRanges[currentSelectRanges.length - 1];\n if (lastSelectRange) {\n lastSelectRange.end.row = rowIndex;\n }\n this.selectCells(currentSelectRanges);\n } else {\n this.selectCells([\n {\n start: { col: 0, row: rowIndex },\n end: { col: this.colCount - 1, row: rowIndex }\n }\n ]);\n }\n }\n selectCol(colIndex: number, isCtrl?: boolean, isShift?: boolean) {\n const currentSelectRanges = this.stateManager.select.ranges;\n if (isCtrl) {\n currentSelectRanges.push({\n start: { col: colIndex, row: 0 },\n end: { col: colIndex, row: this.rowCount - 1 }\n });\n this.selectCells(currentSelectRanges);\n } else if (isShift) {\n const lastSelectRange = currentSelectRanges[currentSelectRanges.length - 1];\n if (lastSelectRange) {\n lastSelectRange.end.col = colIndex;\n }\n this.selectCells(currentSelectRanges);\n } else {\n this.selectCells([\n {\n start: { col: colIndex, row: 0 },\n end: { col: colIndex, row: this.rowCount - 1 }\n }\n ]);\n }\n }\n /**\n * 开始拖拽选择列. 当结合插件table-series-number使用时,需要使用这个方法来开始拖拽选择整列\n * @param colIndex 列索引\n * @param enableCtrlSelectMode 是否按住 ctrl 键\n * @param enableShiftSelectMode 是否按住 shift 键\n */\n startDragSelectCol(colIndex: number, enableCtrlSelectMode?: boolean, enableShiftSelectMode?: boolean) {\n const lastSelectRange = this.stateManager.select.ranges[this.stateManager.select.ranges.length - 1];\n const startCol = enableShiftSelectMode && lastSelectRange?.start?.col ? lastSelectRange?.start?.col : colIndex;\n const startRow = 0;\n const endCol = colIndex;\n const endRow = this.rowCount - 1;\n this.stateManager.updateSelectPos(\n startCol,\n startRow,\n enableShiftSelectMode,\n enableCtrlSelectMode,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n this.stateManager.updateInteractionState(InteractionState.grabing);\n this.stateManager.updateSelectPos(\n endCol,\n endRow,\n enableShiftSelectMode,\n enableCtrlSelectMode,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n }\n /**\n * 拖拽选择列. 当结合插件table-series-number使用时,需要使用这个方法来拖拽选择整列\n * @param colIndex 列索引\n * @param enableCtrlSelectMode 是否按住 ctrl 键\n */\n dragSelectCol(colIndex: number, enableCtrlSelectMode?: boolean) {\n const currentSelectRanges = this.stateManager.select.ranges;\n const lastSelectRange = currentSelectRanges[currentSelectRanges.length - 1];\n if (lastSelectRange) {\n lastSelectRange.end.col = colIndex;\n }\n this.stateManager.updateSelectPos(\n colIndex,\n this.rowCount - 1,\n false,\n enableCtrlSelectMode,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n }\n /**\n * 结束拖拽选择列. 当结合插件table-series-number使用时,需要使用这个方法来结束拖拽选择整列或者整行\n */\n endDragSelect() {\n this.stateManager.updateInteractionState(InteractionState.default);\n this.stateManager.endSelectCells(false, false);\n }\n\n /**\n * 开始拖拽选择行. 当结合插件table-series-number使用时,需要使用这个方法来开始拖拽选择整行\n * @param rowIndex 行索引\n * @param enableCtrlSelectMode 是否按住 ctrl 键\n * @param isShift 是否按住 shift 键\n */\n startDragSelectRow(rowIndex: number, enableCtrlSelectMode?: boolean, isShift?: boolean) {\n const lastSelectRange = this.stateManager.select.ranges[this.stateManager.select.ranges.length - 1];\n const startCol = 0;\n const startRow = isShift && lastSelectRange?.start?.row ? lastSelectRange?.start?.row : rowIndex;\n const endCol = this.colCount - 1;\n const endRow = rowIndex;\n this.stateManager.updateSelectPos(\n startCol,\n startRow,\n isShift,\n enableCtrlSelectMode,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n this.stateManager.updateInteractionState(InteractionState.grabing);\n this.stateManager.updateSelectPos(\n endCol,\n endRow,\n isShift,\n enableCtrlSelectMode,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n }\n /**\n * 拖拽选择行. 当结合插件table-series-number使用时,需要使用这个方法来拖拽选择整行\n * @param rowIndex 行索引\n * @param isCtrl 是否按住 ctrl 键\n */\n dragSelectRow(rowIndex: number, isCtrl?: boolean) {\n const currentSelectRanges = this.stateManager.select.ranges;\n const lastSelectRange = currentSelectRanges[currentSelectRanges.length - 1];\n if (lastSelectRange) {\n lastSelectRange.end.row = rowIndex;\n }\n this.stateManager.updateSelectPos(\n this.colCount - 1,\n rowIndex,\n false,\n isCtrl,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n }\n\n abstract isListTable(): boolean;\n abstract isPivotTable(): boolean;\n abstract isPivotChart(): boolean;\n\n protected abstract _getSortFuncFromHeaderOption(\n columns: ColumnsDefine | undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): ((v1: any, v2: any, order: string) => 0 | 1 | -1) | undefined;\n abstract setRecords(records: Array<any>, option?: { sortState?: SortState | SortState[] }): void;\n abstract refreshHeader(): void;\n abstract refreshRowColCount(): void;\n abstract getHierarchyState(col: number, row: number): HierarchyState | null;\n abstract toggleHierarchyState(col: number, row: number, recalculateColWidths?: boolean): void;\n\n abstract getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo;\n abstract _moveHeaderPosition(\n source: CellAddress,\n target: CellAddress\n ): {\n sourceIndex: number;\n targetIndex: any;\n sourceSize: any;\n targetSize: any;\n moveType: 'column' | 'row';\n };\n /** @private */\n // abstract getFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData;\n abstract getRecordShowIndexByCell(col: number, row: number): number;\n abstract getCellOriginRecord(col: number, row: number): MaybePromiseOrUndefined;\n abstract getCellRawRecord(col: number, row: number): MaybePromiseOrUndefined;\n abstract getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData;\n abstract getCellOriginValue(col: number, row: number): FieldData;\n abstract getCellRawValue(col: number, row: number): FieldData;\n\n abstract getTableIndexByRecordIndex(recordIndex: number): number;\n abstract getTableIndexByField(field: FieldDef): number;\n abstract getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress;\n /**\n * 更新页码\n * @param pagination 要修改页码的信息\n */\n abstract updatePagination(pagination: IPagination): void;\n\n abstract _hasCustomRenderOrLayout(): boolean;\n\n get recordsCount() {\n return this.records?.length;\n }\n get allowFrozenColCount(): number {\n return this.internalProps.allowFrozenColCount;\n }\n\n /**\n * Get the number of cols that are row header.\n */\n get rowHeaderLevelCount(): number {\n return this.internalProps.layoutMap.rowHeaderLevelCount;\n }\n /**\n * Get the number of rows that are col header.\n */\n get columnHeaderLevelCount(): number {\n return this.internalProps.layoutMap.columnHeaderLevelCount;\n }\n /**\n * Get the records.\n */\n get records(): any {\n return this.internalProps.records;\n }\n /**\n * Get the data source.\n */\n get dataSource(): CachedDataSource | DataSource {\n return this.internalProps.dataSource;\n }\n /**\n * Set the data source from given\n */\n set dataSource(dataSource: CachedDataSource | DataSource) {\n // 清空单元格内容\n this.scenegraph.clearCells();\n _setDataSource(this, dataSource);\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n /**\n * Get the autoWrapText.\n */\n get autoWrapText(): boolean {\n return this.internalProps.autoWrapText;\n }\n /**\n * Set the autoWrapText\n */\n set autoWrapText(autoWrapText: boolean) {\n this.internalProps.autoWrapText = autoWrapText;\n this.options.autoWrapText = autoWrapText;\n }\n /**\n * Get the enableLineBreak.\n */\n get enableLineBreak(): boolean {\n return this.internalProps.enableLineBreak;\n }\n /**\n * Set the enableLineBreak\n */\n set enableLineBreak(enableLineBreak: boolean) {\n this.internalProps.enableLineBreak = enableLineBreak;\n this.options.enableLineBreak = enableLineBreak;\n }\n updateAutoWrapText(autoWrapText: boolean) {\n if (this.internalProps.autoWrapText === autoWrapText) {\n return;\n }\n this.internalProps.autoWrapText = autoWrapText;\n this.options.autoWrapText = autoWrapText;\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.render();\n // }\n }\n\n /**\n * 获取当前使用的主题\n */\n get theme(): TableTheme {\n return this.internalProps.theme;\n }\n set theme(theme: TableTheme) {\n this.internalProps.theme = themes.of(theme ?? themes.DEFAULT);\n this.internalProps.theme.isPivot = this.isPivotTable();\n this.options.theme = theme;\n setIconColor(this.internalProps.theme.functionalIconsStyle);\n }\n /**\n * 设置主题\n */\n updateTheme(theme: ITableThemeDefine) {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.internalProps.theme = themes.of(theme ?? themes.DEFAULT);\n this.internalProps.theme.isPivot = this.isPivotTable();\n setIconColor(this.internalProps.theme.functionalIconsStyle);\n this.options.theme = theme;\n this.scenegraph.updateComponent();\n this.scenegraph.updateStageBackground();\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.render();\n }\n\n /**\n * 根据行列号获取对应的字段名\n * @param {number} col column index.\n * @param {number} row row index.\n */\n getBodyField(col: number, row: number): FieldDef | undefined {\n return this.internalProps.layoutMap.getBody(col, row).field;\n }\n /**\n * 根据行列号获取配置\n * @param {number} col column index.\n * @param {number} row row index.\n * @return {ColumnDefine} The column define object.\n */\n getBodyColumnDefine(col: number, row: number): ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber {\n // TODO: 暂时修复透视表报错\n const body = this.internalProps.layoutMap.getBody(col, row);\n return body?.define;\n }\n\n getBodyColumnType(col: number, row: number): ColumnTypeOption {\n const cellType = this.internalProps.layoutMap.getBody(col, row)?.cellType ?? 'text';\n return getProp('cellType', { cellType }, col, row, this);\n }\n\n getCellType(col: number, row: number): ColumnTypeOption {\n let cellType;\n if (this.isSeriesNumberInHeader(col, row)) {\n return (this.internalProps.layoutMap as SimpleHeaderLayoutMap).getSeriesNumberHeader(col, row).cellType;\n } else if (this.isHeader(col, row)) {\n cellType = (this.internalProps.layoutMap.getHeader(col, row) as HeaderData).headerType;\n } else {\n cellType = this.internalProps.layoutMap.getBody(col, row).cellType;\n }\n return getProp('cellType', { cellType }, col, row, this);\n }\n\n /**\n * 根据行列号获取对应的字段名\n * @param {number} col column index.\n * @param {number} row row index.\n */\n getHeaderField(col: number, row: number): FieldDef {\n return this.internalProps.layoutMap.getHeaderField(col, row);\n }\n /**\n * 根据行列号获取配置\n * @param {number} col column index.\n * @param {number} row row index.\n * @return {ColumnDefine} The column define object.\n */\n getHeaderDefine(col: number, row: number): ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber {\n const hd = this.internalProps.layoutMap.getHeader(col, row);\n return hd?.define;\n }\n getCellLocation(col: number, row: number): CellLocation {\n const hdType = this.internalProps.layoutMap.getCellLocation(col, row);\n return hdType;\n }\n /**\n * 获取行列表头的路径\n * @param col\n * @param row\n * @returns 返回结构{\n colHeaderPaths?: any[];\n rowHeaderPaths?: any[];\n}\n */\n getCellHeaderPaths(col: number, row: number): ICellHeaderPaths {\n const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n return cellHeaderPaths;\n }\n /**\n * Get the headers define of the given column.\n * @param {number} col The column index.\n * @return {*} The array of header define object.\n */\n getHeadersDefine(col: number, row: number): (ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber)[] {\n const headers = [];\n while (true) {\n const header = this.getHeaderDefine(col, row) as ColumnDefine;\n if (header && (header.field || (header as ColumnDefine).columns)) {\n headers.push(header);\n } else {\n break;\n }\n\n row++;\n }\n\n return headers;\n }\n _getHeaderLayoutMap(col: number, row: number): HeaderData | SeriesNumberColumnData {\n return this.internalProps.layoutMap.getHeader(col, row);\n }\n _getBodyLayoutMap(col: number, row: number): ColumnData | IndicatorData | SeriesNumberColumnData {\n return this.internalProps.layoutMap.getBody(col, row);\n }\n /** 获取绘制画布的canvas上下文 */\n getContext(): CanvasRenderingContext2D {\n return this.internalProps.context;\n }\n /**\n * 根据行列号获取整条数据记录\n * @param {number} col col index.\n * @param {number} row row index.\n * @return {object} record.\n */\n getRecordByCell(col: number, row: number): MaybePromiseOrUndefined {\n if (this.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n return this.getCellOriginRecord(col, row);\n }\n /** @deprecated 请使用getRecordByCell */\n getRecordByRowCol(col: number, row: number) {\n return this.getRecordByCell(col, row);\n }\n\n /**\n * 根据数据的索引获取应该显示在body的第几行\n * @param {number} index The record index.\n */\n getRecordStartRowByRecordIndex(index: number): number {\n return this.internalProps.layoutMap.getRecordStartRowByRecordIndex(index);\n }\n /**\n * 根据给定的排序状态 获取对应的表格单元格信息\n * @param sortState\n * @returns\n */\n _getHeaderCellBySortState(sortState: SortState): CellAddress | undefined {\n const { layoutMap } = this.internalProps;\n const hd = layoutMap.headerObjects.find((col: any) => col && col.field === sortState.field);\n if (hd) {\n const headercell = layoutMap.getHeaderCellAdressById(hd.id as number);\n return headercell;\n }\n return undefined;\n }\n\n /**\n * 获取给定单元格的范围 如果是合并单元格,则返回合并单元格的范围\n */\n getCellRange(col: number, row: number): CellRange {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.internalProps.customMergeCell(col, row, this);\n if (\n customMerge &&\n customMerge.range &&\n (isValid(customMerge.text) || customMerge.customLayout || customMerge.customRender)\n ) {\n // return customMerge.range;\n // trim range\n const range = {\n start: {\n col: Math.max(customMerge.range.start.col, 0),\n row: Math.max(customMerge.range.start.row, 0)\n },\n end: {\n col: Math.min(customMerge.range.end.col, this.colCount - 1),\n row: Math.min(customMerge.range.end.row, this.rowCount - 1)\n },\n isCustom: true\n };\n return range;\n }\n }\n return this.internalProps.layoutMap?.getCellRange(col, row);\n }\n\n hasCustomMerge() {\n return !!this.internalProps.customMergeCell;\n }\n\n getCustomMerge(col: number, row: number) {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.internalProps.customMergeCell(col, row, this);\n if (\n customMerge &&\n customMerge.range &&\n (isValid(customMerge.text) || customMerge.customLayout || this.customRender)\n ) {\n if (customMerge.style) {\n const styleClass = this.internalProps.bodyHelper.getStyleClass('text');\n const style = customMerge.style;\n const fullStyle = <FullExtendStyle>columnStyleContents.of(\n style,\n this.theme.bodyStyle,\n {\n col,\n row,\n table: this,\n value: customMerge.text,\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText,\n this.theme\n );\n customMerge.style = fullStyle;\n }\n customMerge.range = {\n start: {\n col: Math.max(customMerge.range.start.col, 0),\n row: Math.max(customMerge.range.start.row, 0)\n },\n end: {\n col: Math.min(customMerge.range.end.col, this.colCount - 1),\n row: Math.min(customMerge.range.end.row, this.rowCount - 1)\n },\n isCustom: true\n };\n return customMerge;\n }\n }\n return undefined;\n }\n\n /**\n * 判断两个单元格是否是属于同一个合并区域\n * @param col\n * @param row\n * @param targetCol\n * @param targetRow\n * @returns\n */\n isCellRangeEqual(col: number, row: number, targetCol: number, targetRow: number): boolean {\n return this.internalProps.layoutMap.isCellRangeEqual(col, row, targetCol, targetRow);\n }\n /**\n * 根据行列号获取布局id\n * @param col\n * @param row\n * @returns\n */\n _getLayoutCellId(col: number, row: number): LayoutObjectId {\n return this.internalProps.layoutMap.getCellId(col, row);\n }\n /**\n * 获取表头的描述信息\n * @param col\n * @param row\n * @returns\n */\n getHeaderDescription(col: number, row: number): string | undefined {\n const field = this._getHeaderLayoutMap(col, row);\n const fieldDef = field?.define;\n const description = (fieldDef as ColumnDefine)?.description ?? (field as HeaderData)?.description;\n if (typeof description === 'function') {\n const arg: CellInfo = {\n col,\n row,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row)\n };\n return description(arg);\n }\n return description;\n }\n\n setDropDownMenuHighlight(cells: DropDownMenuHighlightInfo[]): void {\n this.stateManager.setDropDownMenuHighlight(cells);\n }\n _dropDownMenuIsHighlight(colNow: number, rowNow: number, index: number): boolean {\n return this.stateManager.dropDownMenuIsHighlight(colNow, rowNow, index);\n }\n /** 判断单元格是否属于序号body部分 */\n isSeriesNumberInBody(col: number, row: number): boolean {\n return (\n this.internalProps.layoutMap &&\n (this.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)\n );\n }\n /** 判断单元格是否属于序号表头部分 */\n isSeriesNumberInHeader(col: number, row: number): boolean {\n return (\n this.internalProps.layoutMap &&\n (this.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInHeader(col, row)\n );\n }\n /** 判断单元格是否属于表头部分 */\n isHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap && this.internalProps.layoutMap.isHeader(col, row);\n }\n /** 判断单元格是否属于列表头部分 */\n isColumnHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isColumnHeader(col, row);\n }\n /** 判断单元格是否属于行表头部分 */\n isRowHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isRowHeader(col, row);\n }\n /** 判断单元格是否属于角表头部分 */\n isCornerHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isCornerHeader(col, row);\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenColumn(col: number, row?: number): boolean {\n return this.isLeftFrozenColumn(col, row) || this.isRightFrozenColumn(col, row);\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isLeftFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenColumn(col, row);\n }\n /**\n * 是否属于右侧冻结列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isRightFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isRightFrozenColumn(col, row);\n }\n\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenRow(col: number, row?: number): boolean {\n return this.isTopFrozenRow(col, row) || this.isBottomFrozenRow(col, row);\n }\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isTopFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenRow(col, row);\n }\n /**\n * 是否属于冻结底部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isBottomFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isBottomFrozenRow(col, row);\n }\n /** 获取单元格的基本信息 目前主要组织单元格信息给事件传递给用户的参数使用 */\n getCellInfo(col: number, row: number): Omit<MousePointerCellEvent, 'target'> {\n if (col >= 0 && row >= 0) {\n const colDef = this.isHeader(col, row) ? this.getHeaderDefine(col, row) : this.getBodyColumnDefine(col, row);\n return {\n col,\n row,\n field: this.getHeaderField(col, row),\n cellHeaderPaths: this.internalProps.layoutMap.getCellHeaderPaths(col, row),\n title: colDef?.title,\n cellType: this.getCellType(col, row),\n originData: this.getCellOriginRecord(col, row),\n cellRange: this.getCellRangeRelativeRect({ col, row }),\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n scaleRatio: this.canvas.getBoundingClientRect().width / this.canvas.offsetWidth\n };\n }\n return undefined;\n }\n /** @private */\n _hasField(field: FieldDef, col: number, row: number): boolean {\n if (field === null) {\n return false;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return false;\n }\n const index = table.getRecordShowIndexByCell(col, row);\n return table.internalProps.dataSource?.hasField(index, field);\n }\n /**\n * 获取单元格的样式 内部逻辑使用 获取到的样式并不是计算后的\n * @param col\n * @param row\n * @returns\n */\n _getCellStyle(col: number, row: number): FullExtendStyle {\n return getCellStyle(col, row, this);\n }\n clearCellStyleCache() {\n this.headerStyleCache.clear();\n this.bodyStyleCache.clear();\n this.bodyMergeTitleCache.clear();\n this.bodyBottomStyleCache.clear();\n\n // this._newRowHeightsMap.clear();\n }\n /**\n * 清除行高度缓存对象\n */\n clearRowHeightCache() {\n this.internalProps._rowHeightsMap.clear();\n this._clearRowRangeHeightsMap();\n }\n /**\n * 清除列宽度缓存对象\n */\n clearColWidthCache() {\n this.internalProps._colWidthsMap.clear();\n this._clearColRangeWidthsMap();\n }\n /**\n * 该列是否可调整列宽\n * @param col\n * @param row\n * @returns\n */\n _canResizeColumn(col: number, row: number): boolean {\n if (!(col >= 0 && row >= 0)) {\n return false;\n }\n if (this.isCellRangeEqual(col, row, col + 1, row)) {\n return false;\n }\n\n if (this.internalProps.columnResizeMode === 'none') {\n return false;\n } else if (this.internalProps.columnResizeMode === 'header') {\n // 判断表头\n if (!this.isHeader(col, row)) {\n return false;\n }\n } else if (this.internalProps.columnResizeMode === 'body') {\n // 判断内容\n if (this.isHeader(col, row)) {\n return false;\n }\n }\n\n // if (this.rightFrozenColCount && col >= this.colCount - this.rightFrozenColCount - 1) {\n // // right frozen columns can not resize temply\n // return false;\n // }\n\n const limit = this.colWidthsLimit[col];\n if (!limit || !limit.min || !limit.max) {\n return true;\n }\n return limit.max !== limit.min;\n }\n\n /**\n * 该列是否可调整列宽\n * @param col\n * @param row\n * @returns\n */\n _canResizeRow(col: number, row: number): boolean {\n if (!(col >= 0 && row >= 0)) {\n return false;\n }\n if (this.isCellRangeEqual(col, row, col, row + 1)) {\n return false;\n }\n\n if (this.internalProps.rowResizeMode === 'none') {\n return false;\n } else if (this.internalProps.rowResizeMode === 'header') {\n // 判断表头\n if (!this.isHeader(col, row)) {\n return false;\n }\n } else if (this.internalProps.rowResizeMode === 'body') {\n // 判断内容\n if (this.isHeader(col, row)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * 选中位置是否可拖拽调整位置\n * @param col\n * @returns\n */\n _canDragHeaderPosition(col: number, row: number): boolean {\n if (\n this.isHeader(col, row) &&\n (this.stateManager.isSelected(col, row) ||\n (this.options.select?.headerSelectMode === 'body' &&\n checkCellInSelect(col, row, [\n this.getCellRange(this.stateManager.select.cellPos.col, this.stateManager.select.cellPos.row)\n ])) ||\n isCellDisableSelect(this, col, row))\n ) {\n if (this.internalProps.frozenColDragHeaderMode === 'disabled' && this.isFrozenColumn(col)) {\n return false;\n }\n if (this.stateManager.isSelected(col, row)) {\n const selectRange = this.stateManager.select.ranges[0];\n //判断是否整行或者整列选中\n if (this.isColumnHeader(col, row)) {\n if (selectRange.end.row !== this.rowCount - 1) {\n return false;\n }\n } else if (this.isRowHeader(col, row)) {\n if (selectRange.end.col !== this.colCount - 1) {\n return false;\n }\n } else {\n return false;\n }\n }\n const define = this.getHeaderDefine(col, row);\n if (!define) {\n return false;\n }\n if ((define as ColumnDefine).dragHeader === undefined) {\n if (this.internalProps.dragHeaderMode === 'all') {\n return true;\n } else if (this.internalProps.dragHeaderMode === 'column') {\n if (this.isColumnHeader(col, row)) {\n return true;\n }\n } else if (this.internalProps.dragHeaderMode === 'row') {\n if (this.isRowHeader(col, row)) {\n return true;\n }\n }\n return false;\n }\n return (define as ColumnDefine).dragHeader;\n }\n return false;\n }\n\n /**\n * 获取某个单元格所配置的所有图标\n */\n getCellIcons(col: number, row: number): ColumnIconOption[] {\n let icons;\n if (this.isHeader(col, row)) {\n icons = this.internalProps.headerHelper.getIcons(col, row);\n } else if ((this.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumber(col, row)) {\n if (!(this.internalProps as ListTableProtected).groupBy || !this.getCellRawRecord(col, row)?.vtableMerge) {\n const dragOrder = (this.internalProps.layoutMap as SimpleHeaderLayoutMap).getSeriesNumberBody(col, row)?.define\n ?.dragOrder;\n if (dragOrder) {\n icons = this.internalProps.rowSeriesNumberHelper.getIcons(col, row);\n }\n }\n const cellValue = this.getCellValue(col, row);\n const dataValue = this.getCellOriginValue(col, row);\n\n const ctx = this.internalProps.context;\n const cellIcon = this.internalProps.bodyHelper.getIcons(col, row, cellValue, dataValue, ctx);\n if (icons?.length > 0) {\n icons = icons.concat(cellIcon);\n } else if (cellIcon?.length > 0) {\n icons = cellIcon;\n }\n } else {\n const cellValue = this.getCellValue(col, row);\n const dataValue = this.getCellOriginValue(col, row);\n const ctx = this.internalProps.context;\n icons = this.internalProps.bodyHelper.getIcons(col, row, cellValue, dataValue, ctx);\n }\n return icons;\n }\n\n /** 指定某个单元格显示下拉菜单【内容可以自定义为menu数组或者dom】 */\n showDropDownMenu(col: number, row: number, dropDownMenuOptions?: DropDownMenuOptions) {\n let menuType: MenuInstanceType = 'dropdown-menu';\n if (dropDownMenuOptions) {\n menuType = Array.isArray(dropDownMenuOptions.content) ? 'dropdown-menu' : 'container';\n }\n if (this.internalProps.menu.renderMode === 'html') {\n this.stateManager.menu.isShow = true;\n this.internalProps.menuHandler._bindToCell(col, row, menuType, dropDownMenuOptions);\n }\n // this.stateManager.showDropDownMenu(col,row,) //最好和这个保持一致\n }\n /** 暂时只支持全局设置了tooltip.renderMode='html',调用该接口才有效 */\n showTooltip(col: number, row: number, tooltipOptions?: TooltipOptions) {\n // this.drawHoverIconTooltip();\n if (this.internalProps.tooltip.renderMode === 'html') {\n this.internalProps.tooltipHandler._bindToCell(col, row, tooltipOptions);\n }\n }\n /**\n * 获取某个单元格的样式 供业务方调用\n * @param col\n * @param row\n */\n getCellStyle(col: number, row: number): CellStyle {\n const actStyle = this._getCellStyle(col, row);\n\n const theme = getStyleTheme(actStyle, this, col, row, getProp).theme;\n\n const { autoWrapText, lineClamp, textOverflow } = actStyle;\n\n return {\n textAlign: theme.text.textAlign,\n textBaseline: theme.text.textBaseline,\n bgColor: isBoolean(theme.group.fill)\n ? getProp('bgColor', actStyle, col, row, this)\n : (theme.group.fill as string),\n color: isBoolean(theme.text.fill) ? getProp('color', actStyle, col, row, this) : (theme.text.fill as string),\n strokeColor: isBoolean(theme.text.stroke)\n ? getProp('strokeColor', actStyle, col, row, this)\n : (theme.text.stroke as string),\n fontFamily: theme.text.fontFamily,\n fontSize: theme.text.fontSize,\n fontWeight: theme.text.fontWeight,\n fontVariant: theme.text.fontVariant,\n fontStyle: theme.text.fontStyle,\n lineHeight: theme.text.lineHeight as number,\n autoWrapText: autoWrapText ?? false,\n lineClamp: lineClamp ?? 'auto',\n textOverflow,\n borderColor: isBoolean(theme.group.stroke)\n ? getProp('borderColor', actStyle, col, row, this)\n : (theme.group.stroke as string | string[]),\n borderLineWidth: theme.group.lineWidth,\n borderLineDash: theme.group.lineDash,\n underline: !!theme.text.underline,\n // underlineColor: theme.text.underlineColor,\n underlineDash: theme.text.underlineDash,\n underlineOffset: theme.text.underlineOffset,\n lineThrough: !!theme.text.lineThrough,\n // lineThroughColor: theme.text.lineThroughColor,\n // lineThroughDash: (theme.text as any).lineThroughDash\n padding: theme._vtable.padding,\n underlineWidth: theme.text.underline,\n lineThroughLineWidth: theme.text.lineThrough,\n _strokeArrayWidth: (theme.group as any).strokeArrayWidth,\n _strokeArrayColor: (theme.group as any).strokeArrayColor,\n _linkColor: getProp('linkColor', actStyle, col, row, this)\n };\n }\n /**\n * 获取所有body单元格数据信息\n * @param colMaxCount 限制获取最多列数\n * @param rowMaxCount 限制获取最多行数\n * @returns CellInfo[][]\n */\n getAllBodyCells(colMaxCount?: number, rowMaxCount?: number): CellInfo[][] {\n const start = { col: this.rowHeaderLevelCount, row: this.columnHeaderLevelCount };\n const end = { col: this.colCount - 1, row: this.rowCount - 1 };\n return Array(Math.min(rowMaxCount ?? 2000, end.row - start.row + 1, this.rowCount))\n .fill(0)\n .map((_, i) =>\n Array(Math.min(colMaxCount ?? 2000, end.col - start.col + 1, this.colCount))\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有单元格数据信息\n * @param colMaxCount 限制获取最多列数\n * @param rowMaxCount 限制获取最多行数\n * @returns CellInfo[][]\n */\n getAllCells(colMaxCount?: number, rowMaxCount?: number): CellInfo[][] {\n const start = { col: 0, row: 0 };\n const end = { col: this.colCount - 1, row: this.rowCount - 1 };\n return Array(Math.min(rowMaxCount ?? 2000, end.row - start.row + 1, this.rowCount))\n .fill(0)\n .map((_, i) =>\n Array(Math.min(colMaxCount ?? 2000, end.col - start.col + 1, this.colCount))\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有列表头单元格数据信息\n * @returns CellInfo[][]\n */\n getAllColumnHeaderCells(): CellInfo[][] {\n const start = { col: this.rowHeaderLevelCount, row: 0 };\n const end = { col: this.colCount - 1, row: this.columnHeaderLevelCount - 1 };\n return Array(end.row - start.row + 1)\n .fill(0)\n .map((_, i) =>\n Array(end.col - start.col + 1)\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有行表头单元格数据信息\n * @returns CellInfo[][]\n */\n getAllRowHeaderCells(): CellInfo[][] {\n const start = { col: 0, row: this.columnHeaderLevelCount };\n const end = { col: this.rowHeaderLevelCount - 1, row: this.rowCount - 1 };\n return Array(end.row - start.row + 1)\n .fill(0)\n .map((_, i) =>\n Array(end.col - start.col + 1)\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n\n /**获取选中区域的内容 作为复制内容 */\n getCopyValue(getCellValueFunction?: (col: number, row: number) => string | number): string | null {\n if (this.stateManager.select?.ranges?.length > 0) {\n const ranges = this.stateManager.select.ranges;\n let minCol = Math.min(ranges[0].start.col, ranges[0].end.col);\n let maxCol = Math.max(ranges[0].start.col, ranges[0].end.col);\n let minRow = Math.min(ranges[0].start.row, ranges[0].end.row);\n let maxRow = Math.max(ranges[0].start.row, ranges[0].end.row);\n ranges.forEach((a: CellRange) => {\n minCol = Math.min(minCol, a.start.col, a.end.col);\n maxCol = Math.max(maxCol, a.start.col, a.end.col);\n minRow = Math.min(minRow, a.start.row, a.end.row);\n maxRow = Math.max(maxRow, a.start.row, a.end.row);\n // return a.start.row - b.start.row || a.start.col - b.start.col\n });\n const isExistDataInRow = (r: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n if (minRow <= r && maxRow >= r) {\n isExist = true;\n }\n });\n return isExist;\n };\n const isExistDataInCol = (c: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c) {\n isExist = true;\n }\n });\n return isExist;\n };\n\n const getRangeExistDataInCell = (c: number, r: number) => {\n let isExistRange;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c && minRow <= r && maxRow >= r) {\n isExistRange = range;\n }\n });\n return isExistRange;\n };\n const getCopyCellValue = (col: number, row: number, range?: CellRange): string | Promise<string> | void => {\n const cellRange = this.getCellRange(col, row);\n let copyStartCol = cellRange.start.col;\n let copyStartRow = cellRange.start.row;\n if (range) {\n const rangeMinCol = Math.min(range.start.col, range.end.col);\n const rangeMinRow = Math.min(range.start.row, range.end.row);\n copyStartCol = Math.max(rangeMinCol, cellRange.start.col);\n copyStartRow = Math.max(rangeMinRow, cellRange.start.row);\n }\n\n if (copyStartCol !== col || copyStartRow !== row) {\n return '';\n }\n\n const value = getCellValueFunction ? getCellValueFunction(col, row) : this.getCellValue(col, row);\n return value;\n };\n let copyValue = '';\n\n for (let r = minRow; r <= maxRow; r++) {\n const isExistData = isExistDataInRow(r);\n if (isExistData) {\n for (let c = minCol; c <= maxCol; c++) {\n const isExistDataCol = isExistDataInCol(c);\n if (isExistDataCol) {\n const range: CellRange | undefined = getRangeExistDataInCell(c, r);\n if (range) {\n const copyCellValue = getCopyCellValue(c, r, range);\n if (typeof Promise !== 'undefined' && copyCellValue instanceof Promise) {\n //无法获取异步数据\n } else {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const strCellValue = isValid(copyCellValue) ? `${copyCellValue}` : '';\n if (/^\\[object .*\\]$/.exec(strCellValue)) {\n //object 对象忽略掉\n } else {\n copyValue += strCellValue;\n }\n }\n if (c < range.end.col || c < maxCol) {\n copyValue += '\\t';\n }\n } else {\n copyValue += '\\t';\n }\n }\n }\n if (r < maxRow) {\n copyValue += '\\r\\n';\n }\n }\n }\n\n if (this.options?.formatCopyValue) {\n copyValue = this.options.formatCopyValue(copyValue);\n }\n return copyValue;\n }\n return '';\n }\n\n /**获取选中区域的每个单元格详情 */\n getSelectedCellInfos(): CellInfo[][] | null {\n if (!this.stateManager.select?.ranges) {\n return null;\n }\n\n const ranges = this.stateManager.select.ranges;\n if (!ranges.length) {\n return [];\n }\n let minCol = Math.min(ranges[0].start.col, ranges[0].end.col);\n let maxCol = Math.max(ranges[0].start.col, ranges[0].end.col);\n let minRow = Math.min(ranges[0].start.row, ranges[0].end.row);\n let maxRow = Math.max(ranges[0].start.row, ranges[0].end.row);\n ranges.forEach((a: CellRange) => {\n minCol = Math.min(minCol, a.start.col, a.end.col);\n maxCol = Math.max(maxCol, a.start.col, a.end.col);\n minRow = Math.min(minRow, a.start.row, a.end.row);\n maxRow = Math.max(maxRow, a.start.row, a.end.row);\n // return a.start.row - b.start.row || a.start.col - b.start.col\n });\n const isExistDataInRow = (r: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n if (minRow <= r && maxRow >= r) {\n isExist = true;\n }\n });\n return isExist;\n };\n const isExistDataInCol = (c: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c) {\n isExist = true;\n }\n });\n return isExist;\n };\n\n const getRangeExistDataInCell = (c: number, r: number) => {\n let isExistRange;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c && minRow <= r && maxRow >= r) {\n isExistRange = range;\n }\n });\n return isExistRange;\n };\n\n const cellInfoArray: CellInfo[][] = [];\n\n for (let r = minRow; r <= maxRow; r++) {\n const isExistData = isExistDataInRow(r);\n if (isExistData) {\n const cellInfoRow: CellInfo[] = [];\n for (let c = minCol; c <= maxCol; c++) {\n const isExistDataCol = isExistDataInCol(c);\n if (isExistDataCol) {\n const range: CellRange | undefined = getRangeExistDataInCell(c, r);\n if (range) {\n const cellInfo = this.getCellInfo(c, r);\n cellInfoRow.push(cellInfo);\n }\n }\n }\n cellInfoArray.push(cellInfoRow);\n }\n }\n return cellInfoArray;\n }\n getSelectedCellRanges(): CellRange[] {\n const ranges = this.stateManager.select.ranges;\n if (!ranges.length) {\n return [];\n }\n return cloneDeep(ranges);\n }\n\n /** 计算字体的宽度接口 */\n measureText(text: string, font: { fontSize: number; fontWeight: string | number; fontFamily: string }): ITextSize {\n return textMeasure.measureText(text, font);\n }\n\n measureTextBounds(attribute: ITextGraphicAttribute): AABBBounds {\n return measureTextBounds(attribute) as AABBBounds;\n }\n\n /** 获取单元格上定义的自定义渲染配置 */\n getCustomRender(col: number, row: number): ICustomRender {\n let customRender;\n if (this.getCellLocation(col, row) !== 'body') {\n const define = this.getHeaderDefine(col, row);\n customRender = (define as ColumnDefine)?.headerCustomRender;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n customRender = (define as ColumnDefine)?.customRender || this.customRender;\n }\n return customRender;\n }\n /** 获取单元格上定义的自定义布局元素配置 */\n getCustomLayout(col: number, row: number): ICustomLayout {\n let customLayout;\n if (this.getCellLocation(col, row) !== 'body') {\n const define = this.getHeaderDefine(col, row);\n customLayout = (define as ColumnDefine)?.headerCustomLayout;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n customLayout = (define as ColumnDefine)?.customLayout;\n }\n return customLayout;\n }\n\n hasAutoImageColumn() {\n if (this._hasAutoImageColumn === undefined) {\n this._hasAutoImageColumn = hasAutoImageColumn(this);\n }\n return this._hasAutoImageColumn;\n }\n\n /** 获取当前hover单元格的图表实例。这个方法hover实时获取有点缺陷:鼠标hover到单元格上触发了 chart.ts中的activate方法 但此时this.stateManager.hover?.cellPos?.col还是-1 */\n _getActiveChartInstance() {\n // 根据hover的单元格位置 获取单元格实例 拿到chart图元\n const cellGroup = this.scenegraph.getCell(\n this.stateManager.hover?.cellPos?.col,\n this.stateManager.hover?.cellPos?.row\n );\n return cellGroup?.getChildren()?.[0]?.type === 'chart'\n ? (cellGroup.getChildren()[0] as Chart).activeChartInstance\n : null;\n }\n\n /**\n * 判断单元格是否在显示区域\n * @param col\n * @param row\n */\n cellIsInVisualView(col: number, row: number) {\n const drawRange = this.getDrawRange();\n const rect = this.getCellRelativeRect(col, row);\n\n if (col < this.frozenColCount && row < this.frozenRowCount) {\n return true;\n }\n let colHeaderRangeRect;\n if (this.frozenRowCount >= 1) {\n colHeaderRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: 0,\n row: 0\n },\n end: {\n col: this.colCount - 1,\n row: this.frozenRowCount - 1\n }\n });\n }\n let rowHeaderRangeRect;\n if (this.frozenColCount >= 1) {\n rowHeaderRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: 0,\n row: 0\n },\n end: {\n col: this.frozenColCount - 1,\n row: this.rowCount - 1\n }\n });\n }\n let bottomFrozenRangeRect;\n if (this.bottomFrozenRowCount >= 1) {\n bottomFrozenRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: 0,\n row: this.rowCount - this.bottomFrozenRowCount\n },\n end: {\n col: this.colCount - 1,\n row: this.rowCount - 1\n }\n });\n }\n let rightFrozenRangeRect;\n if (this.rightFrozenColCount >= 1) {\n rightFrozenRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: this.colCount - this.rightFrozenColCount,\n row: 0\n },\n end: {\n col: this.colCount - 1,\n row: this.rowCount - 1\n }\n });\n }\n if (\n rect.top >= drawRange.top &&\n rect.bottom <= drawRange.bottom &&\n rect.left >= drawRange.left &&\n rect.right <= drawRange.right\n ) {\n // return true;\n if (this.isFrozenCell(col, row)) {\n return true;\n } else if (\n // body cell drawRange do not intersect colHeaderRangeRect&rowHeaderRangeRect\n rect.top >= (colHeaderRangeRect?.bottom ?? rect.top) &&\n rect.left >= (rowHeaderRangeRect?.right ?? rect.left) &&\n rect.bottom <= (bottomFrozenRangeRect?.top ?? rect.bottom) &&\n rect.right <= (rightFrozenRangeRect?.left ?? rect.right)\n ) {\n return true;\n }\n }\n return false;\n }\n\n getCustomMergeValue(col: number, row: number): string | undefined {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.getCustomMerge(col, row);\n if (customMerge) {\n const { text } = customMerge;\n return text;\n }\n }\n return undefined;\n }\n\n /**\n * 导出表格中当前可视区域的图片\n * @returns base64图片\n */\n exportImg() {\n const c = this.scenegraph.stage.toCanvas();\n return c.toDataURL();\n }\n\n /**\n * 导出某个单元格图片\n * @returns base64图片\n */\n exportCellImg(col: number, row: number, options?: { disableBackground?: boolean; disableBorder?: boolean }) {\n const isInView = this.cellIsInVisualView(col, row);\n const { scrollTop, scrollLeft } = this;\n if (!isInView) {\n this.scrollToCell({ col, row });\n }\n const cellRect = this.getCellRelativeRect(col, row);\n\n // disable hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n hideCellSelectBorder(this.scenegraph);\n }\n const { col: hoverCol, row: hoverRow } = this.stateManager.hover.cellPos;\n this.stateManager.updateHoverPos(-1, -1);\n // hide scroll bar\n this.scenegraph.component.hideVerticalScrollBar();\n this.scenegraph.component.hideHorizontalScrollBar();\n\n // hide border\n this.scenegraph.tableGroup.border.setAttribute('visible', false);\n\n // deal with options\n let oldFill;\n if (options?.disableBackground) {\n const cellGroup = this.scenegraph.getCell(col, row);\n oldFill = cellGroup.attribute.fill;\n cellGroup.setAttribute('fill', 'transparent');\n }\n let oldStroke;\n if (options?.disableBorder) {\n const cellGroup = this.scenegraph.getCell(col, row);\n oldStroke = cellGroup.attribute.stroke;\n cellGroup.setAttribute('stroke', false);\n }\n\n this.scenegraph.renderSceneGraph();\n let sizeOffset = 0;\n if (this.theme.cellBorderClipDirection === 'bottom-right') {\n sizeOffset = 1;\n }\n const c = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(\n cellRect.left + this.tableX + 1,\n cellRect.top + this.tableY + 1,\n cellRect.right + this.tableX - sizeOffset,\n cellRect.bottom + this.tableY - sizeOffset\n )\n );\n if (!isInView) {\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n // return c.toDataURL('image/jpeg', 0.5);\n\n // restore border\n this.scenegraph.tableGroup.border.setAttribute('visible', true);\n\n // restore options\n if (oldFill) {\n const cellGroup = this.scenegraph.getCell(col, row);\n cellGroup.setAttribute('fill', oldFill);\n }\n if (oldStroke) {\n const cellGroup = this.scenegraph.getCell(col, row);\n cellGroup.setAttribute('stroke', oldStroke);\n }\n\n // restore hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n restoreCellSelectBorder(this.scenegraph);\n }\n this.stateManager.updateHoverPos(hoverCol, hoverRow);\n\n this.scenegraph.updateNextFrame();\n\n return c.toDataURL();\n }\n\n /**\n * 导出某一片区域的图片\n * @returns base64图片\n */\n exportCellRangeImg(cellRange: CellRange) {\n const { scrollTop, scrollLeft } = this;\n const minCol = Math.min(cellRange.start.col, cellRange.end.col);\n const minRow = Math.min(cellRange.start.row, cellRange.end.row);\n const maxCol = Math.max(cellRange.start.col, cellRange.end.col);\n const maxRow = Math.max(cellRange.start.row, cellRange.end.row);\n const isInView = this.cellIsInVisualView(minCol, minRow);\n const isMaxCellInView = this.cellIsInVisualView(maxCol, maxRow);\n // 判断如果超出可视区域 做移动\n if (!isInView || !isMaxCellInView) {\n this.scrollToCell({ col: minCol, row: minRow });\n }\n\n const cellRect = this.getCellRangeRelativeRect({\n start: { col: minCol, row: minRow },\n end: { col: maxCol, row: maxRow }\n });\n\n // disable hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n hideCellSelectBorder(this.scenegraph);\n }\n const { col: hoverCol, row: hoverRow } = this.stateManager.hover.cellPos;\n this.stateManager.updateHoverPos(-1, -1);\n // hide scroll bar\n this.scenegraph.component.hideVerticalScrollBar();\n this.scenegraph.component.hideHorizontalScrollBar();\n this.scenegraph.renderSceneGraph();\n\n const c = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(\n cellRect.left + this.tableX + 1,\n cellRect.top + this.tableY + 1,\n cellRect.right + this.tableX,\n cellRect.bottom + this.tableY\n )\n );\n const base64Image = c.toDataURL();\n // 前面做的移动需要再复原\n if (!isInView || !isMaxCellInView) {\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n\n // restore hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n restoreCellSelectBorder(this.scenegraph);\n }\n this.stateManager.updateHoverPos(hoverCol, hoverRow);\n\n return base64Image;\n }\n\n exportCanvas() {\n const c = this.scenegraph.stage.toCanvas();\n return c;\n }\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer(type: string = 'image/png') {\n if (this.options.mode !== 'node') {\n console.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n this.render();\n const stage = this.scenegraph.stage;\n if (stage) {\n let contentWidth = this.tableX + this.getAllColsWidth();\n let contentHeight = this.tableY + this.getAllRowsHeight();\n if (this.internalProps.legends) {\n this.internalProps.legends.forEach(legend => {\n if (legend.orient === 'right') {\n contentWidth = Math.max(contentWidth, legend.legendComponent.globalAABBBounds.x2);\n } else if (legend.orient === 'bottom') {\n contentHeight = Math.max(contentHeight, legend.legendComponent.globalAABBBounds.y2);\n }\n });\n }\n if (this.internalProps.title) {\n if (this.internalProps.title._titleOption.orient === 'right') {\n contentWidth = Math.max(contentWidth, this.internalProps.title.getComponentGraphic().globalAABBBounds.x2);\n } else if (this.internalProps.title._titleOption.orient === 'bottom') {\n contentHeight = Math.max(contentHeight, this.internalProps.title.getComponentGraphic().globalAABBBounds.y2);\n }\n }\n if (contentWidth >= this.canvasWidth && contentHeight >= this.canvasHeight) {\n stage.render();\n const buffer = stage.window.getImageBuffer(type);\n return buffer;\n }\n const newCanvas = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(0, 0, Math.min(this.canvasWidth, contentWidth), Math.min(this.canvasHeight, contentHeight))\n );\n const buffer = (newCanvas as any).toBuffer(type);\n return buffer;\n }\n console.error(new ReferenceError(`stage is not defined`));\n\n return null;\n }\n /** 根据表格单元格的行列号 获取在body部分的列索引及行索引 */\n getBodyIndexByTableIndex(col: number, row: number) {\n return {\n col: col - this.rowHeaderLevelCount - this.leftRowSeriesNumberCount,\n row: row - this.columnHeaderLevelCount\n };\n }\n /** 根据body部分的列索引及行索引,获取单元格的行列号 */\n getTableIndexByBodyIndex(col: number, row: number) {\n return {\n col: col + this.rowHeaderLevelCount + this.leftRowSeriesNumberCount,\n row: row + this.columnHeaderLevelCount\n };\n }\n\n /**\n * 监听vchart事件\n * @param type vchart事件类型\n * @param listener vchart事件监听器\n * @returns 事件监听器id\n */\n onVChartEvent(type: string, callback: AnyFunction): void;\n onVChartEvent(type: string, query: any, callback: AnyFunction): void;\n onVChartEvent(type: string, query?: any, callback?: AnyFunction): void {\n if (!this._chartEventMap[type]) {\n this._chartEventMap[type] = [];\n }\n if (typeof query === 'function') {\n this._chartEventMap[type].push({ callback: query });\n } else {\n this._chartEventMap[type].push({ callback, query });\n }\n }\n\n offVChartEvent(type: string, callback?: AnyFunction): void {\n // delete this._chartEventMap[type];\n if (!this._chartEventMap[type]) {\n return;\n }\n if (callback) {\n this._chartEventMap[type] = this._chartEventMap[type].filter(e => e.callback !== callback);\n } else {\n this._chartEventMap[type] = [];\n }\n }\n /** 给activeChartInstance逐个绑定chart用户监听事件 */\n _bindChartEvent(activeChartInstance: any) {\n if (activeChartInstance) {\n for (const key in this._chartEventMap) {\n (this._chartEventMap[key] || []).forEach(e => {\n if (e.query) {\n activeChartInstance.on(key, e.query, e.callback);\n } else {\n activeChartInstance.on(key, e.callback);\n }\n });\n }\n }\n }\n changeRecordOrder(source: number, target: number) {\n //\n }\n hasCustomCellStyle(customStyleId: string): boolean {\n return this.customCellStylePlugin?.hasCustomCellStyle(customStyleId);\n }\n registerCustomCellStyle(customStyleId: string, customStyle: ColumnStyleOption | undefined | null) {\n this.customCellStylePlugin?.registerCustomCellStyle(customStyleId, customStyle);\n }\n\n arrangeCustomCellStyle(\n cellPos: { col?: number; row?: number; range?: CellRange },\n customStyleId: string,\n forceFastUpdate?: boolean\n ) {\n this.customCellStylePlugin?.arrangeCustomCellStyle(cellPos, customStyleId, forceFastUpdate);\n }\n isSeriesNumber(col: number, row: number): boolean {\n return this.internalProps.layoutMap.isSeriesNumber(col, row);\n }\n isHasSeriesNumber(): boolean {\n return this.internalProps.layoutMap?.leftRowSeriesNumberColumnCount > 0;\n }\n get leftRowSeriesNumberCount(): number {\n return this.internalProps.layoutMap?.leftRowSeriesNumberColumnCount ?? 0;\n }\n setMinMaxLimitWidth(setWidth: boolean = false) {\n const internalProps = this.internalProps;\n //设置列宽\n for (let col = 0; col < internalProps.layoutMap.columnWidths.length; col++) {\n if (this.internalProps._widthResizedColMap.has(col)) {\n continue;\n }\n const { width, minWidth, maxWidth } = internalProps.layoutMap.columnWidths?.[col] ?? {};\n // width 为 \"auto\" 时先不存储ColWidth\n if (\n setWidth &&\n width &&\n ((typeof width === 'string' && width !== 'auto') || (typeof width === 'number' && width > 0))\n ) {\n this._setColWidth(col, width);\n }\n if (minWidth && ((typeof minWidth === 'number' && minWidth > 0) || typeof minWidth === 'string')) {\n this.setMinColWidth(col, minWidth);\n }\n if (maxWidth && ((typeof maxWidth === 'number' && maxWidth > 0) || typeof maxWidth === 'string')) {\n this.setMaxColWidth(col, maxWidth);\n }\n }\n }\n setSortedIndexMap(field: FieldDef, filedMap: ISortedMapItem) {\n this.dataSource?.setSortedIndexMap(field, filedMap);\n }\n // startInertia() {\n // startInertia(0, -1, 1, this.stateManager);\n // }\n\n checkReactCustomLayout() {\n if (!this.reactCustomLayout) {\n this.reactCustomLayout = new ReactCustomLayout(this);\n }\n }\n\n get bodyDomContainer() {\n return this.internalProps.bodyDomContainer;\n }\n get headerDomContainer() {\n return this.internalProps.headerDomContainer;\n }\n get frozenBodyDomContainer() {\n return this.internalProps.frozenBodyDomContainer;\n }\n get frozenHeaderDomContainer() {\n return this.internalProps.frozenHeaderDomContainer;\n }\n get rightFrozenBodyDomContainer() {\n return this.internalProps.rightFrozenBodyDomContainer;\n }\n get rightFrozenHeaderDomContainer() {\n return this.internalProps.rightFrozenHeaderDomContainer;\n }\n get frozenBottomDomContainer() {\n return this.internalProps.frozenBottomDomContainer;\n }\n get bottomDomContainer() {\n return this.internalProps.bottomDomContainer;\n }\n get rightFrozenBottomDomContainer() {\n return this.internalProps.rightFrozenBottomDomContainer;\n }\n /**\n * 显示移动列或移动行的高亮线 如果(col,row)单元格是列头 则显示高亮列线; 如果(col,row)单元格是行头 则显示高亮行线\n * @param col 在表头哪一列后显示高亮线\n * @param row 在表头哪一行后显示高亮线\n */\n showMoverLine(col: number, row: number) {\n this.scenegraph.component.showMoveCol(col, row, 0);\n this.scenegraph.renderSceneGraph();\n }\n /**\n * 隐藏掉移动列或移动行的高亮线\n * @param col\n * @param row\n */\n hideMoverLine(col: number, row: number) {\n this.scenegraph.component.hideMoveCol();\n this.scenegraph.renderSceneGraph();\n }\n /** 关闭表格的滚动 */\n disableScroll() {\n this.eventManager.disableScroll();\n }\n /** 开启表格的滚动 */\n enableScroll() {\n this.eventManager.enableScroll();\n }\n\n getGroupTitleLevel(col: number, row: number): number | undefined {\n return undefined;\n }\n\n // anmiation\n scrollToRow(row: number, animationOption?: ITableAnimationOption | boolean) {\n if (!animationOption) {\n this.scrollToCell({ row });\n return;\n }\n this.animationManager.scrollTo({ row }, animationOption);\n }\n scrollToCol(col: number, animationOption?: ITableAnimationOption | boolean) {\n if (!animationOption) {\n this.scrollToCell({ col });\n return;\n }\n this.animationManager.scrollTo({ col }, animationOption);\n }\n /**\n * 滚动到具体某个单元格位置\n * @param cellAddr 要滚动到的单元格位置\n * @param animationOption 动画配置\n */\n scrollToCell(cellAddr: { col?: number; row?: number }, animationOption?: ITableAnimationOption | boolean) {\n if (animationOption) {\n this.animationManager.scrollTo(cellAddr, animationOption);\n return;\n }\n const drawRange = this.getDrawRange();\n if (isValid(cellAddr.col) && cellAddr.col >= this.frozenColCount) {\n const frozenWidth = this.getFrozenColsWidth();\n const left = this.getColsWidth(0, cellAddr.col - 1);\n this.scrollLeft = Math.min(left - frozenWidth, this.getAllColsWidth() - drawRange.width);\n }\n if (isValid(cellAddr.row) && cellAddr.row >= this.frozenRowCount) {\n const frozenHeight = this.getFrozenRowsHeight();\n const top = this.getRowsHeight(0, cellAddr.row - 1);\n this.scrollTop = Math.min(top - frozenHeight, this.getAllRowsHeight() - drawRange.height);\n }\n this.render();\n }\n checkHasColumnAutoWidth(): boolean {\n return checkHasColumnAutoWidth(this);\n }\n get containerFit(): { width: boolean; height: boolean } {\n return this._containerFit;\n }\n set containerFit(containerFit: boolean | { width?: boolean; height?: boolean }) {\n if (typeof containerFit === 'boolean') {\n this._containerFit = { width: containerFit, height: containerFit };\n } else if (containerFit && typeof containerFit === 'object') {\n this._containerFit = {\n width: containerFit.width ?? true,\n height: containerFit.height ?? true\n };\n } else {\n this._containerFit = { width: false, height: false };\n }\n }\n /** 是否选中了指定列 整列单元格被选中*/\n isColumnSelected(col: number): boolean {\n const selectRange = this.stateManager.select.ranges;\n for (let i = 0; i <= selectRange.length - 1; i++) {\n const range = selectRange[i];\n if (\n range.start.col <= col &&\n range.end.col >= col &&\n range.start.row === 0 &&\n range.end.row === this.rowCount - 1\n ) {\n return true;\n }\n }\n return false;\n }\n /** 是否选中了指定行 */\n isRowSelected(row: number): boolean {\n const selectRange = this.stateManager.select.ranges;\n for (let i = 0; i <= selectRange.length - 1; i++) {\n const range = selectRange[i];\n if (\n range.start.row <= row &&\n range.end.row >= row &&\n range.start.col === 0 &&\n range.end.col === this.colCount - 1\n ) {\n return true;\n }\n }\n return false;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/BaseTable.ts"],"names":[],"mappings":"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","file":"BaseTable.js","sourcesContent":["import * as columnStyleContents from '../body-helper/style';\nimport * as headerStyleContents from '../header-helper/style';\nimport { importStyle } from './style';\nimport * as style from '../tools/style';\nimport {\n type CellAddress,\n type CellRange,\n type TableEventHandlersEventArgumentMap,\n type TableEventHandlersReturnMap,\n type TableKeyboardOptions,\n type DropDownMenuHighlightInfo,\n type MenuListItem,\n type WidthModeDef,\n type ICustomRender,\n type ICellHeaderPaths,\n type HeaderData,\n type FullExtendStyle,\n type FieldDef,\n type ColumnTypeOption,\n type SortState,\n type IPagination,\n type ICustomLayout,\n type CellInfo,\n type CellStyle,\n type MenuInstanceType,\n type DropDownMenuOptions,\n type FieldFormat,\n type FieldData,\n type MaybePromiseOrUndefined,\n type MousePointerCellEvent,\n type DropDownMenuEventInfo,\n type HierarchyState,\n type FieldKeyDef,\n type CellLocation,\n type LayoutObjectId,\n type HeightModeDef,\n type ITableThemeDefine,\n type ScrollStyle,\n InteractionState,\n Placement\n} from '../ts-types';\nimport type {\n AnyFunction,\n CellAddressWithBound,\n ColorPropertyDefine,\n ColumnIconOption,\n ColumnSeriesNumber,\n IRowSeriesNumber,\n ColumnStyleOption,\n MappingRule,\n TableEventOptions,\n WidthAdaptiveModeDef,\n HeightAdaptiveModeDef,\n ListTableAPI,\n ColumnInfo,\n RowInfo,\n ListTableConstructorOptions\n} from '../ts-types';\nimport { event, style as utilStyle } from '../tools/helper';\n\nimport { TABLE_EVENT_TYPE } from './TABLE_EVENT_TYPE';\nimport { EventHandler } from '../event/EventHandler';\nimport { EventTarget } from '../event/EventTarget';\nimport { NumberMap } from '../tools/NumberMap';\nimport { Rect } from '../tools/Rect';\nimport type { TableTheme } from '../themes/theme-define';\nimport { throttle2 } from '../tools/util';\nimport themes from '../themes';\nimport { Env } from '../tools/env';\nimport { Scenegraph } from '../scenegraph/scenegraph';\nimport { StateManager } from '../state/state';\nimport { EventManager } from '../event/event';\nimport { BodyHelper } from '../body-helper/body-helper';\nimport { HeaderHelper } from '../header-helper/header-helper';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport type { ITooltipHandler } from '../components/tooltip/TooltipHandler';\nimport type { CachedDataSource, DataSource } from '../data';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport {\n AABBBounds,\n isNumber,\n isBoolean,\n isFunction,\n type ITextSize,\n isValid,\n merge,\n cloneDeep\n} from '@visactor/vutils';\nimport { measureTextBounds, textMeasure } from '../scenegraph/utils/text-measure';\nimport { getProp } from '../scenegraph/utils/get-prop';\nimport type {\n ColumnData,\n ColumnDefine,\n ColumnsDefine,\n ImageColumnDefine,\n IndicatorData,\n SeriesNumberColumnData\n} from '../ts-types/list-table/layout-map/api';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport {\n _applyColWidthLimits,\n _getScrollableVisibleRect,\n _setDataSource,\n _setRecords,\n _toPxWidth,\n checkHasColumnAutoWidth,\n createRootElement,\n getStyleTheme,\n updateRootElementPadding\n} from './tableHelper';\nimport type { IMenuHandler } from '../components/menu/dom/MenuHandler';\nimport type {\n BaseTableAPI,\n BaseTableConstructorOptions,\n IBaseTableProtected,\n ListTableProtected\n} from '../ts-types/base-table';\nimport { FocusInput } from './FouseInput';\nimport { defaultPixelRatio } from '../tools/pixel-ratio';\nimport type { CreateLegend } from '../components/legend/create-legend';\nimport type { DataSet } from '@visactor/vdataset';\nimport { Title } from '../components/title/title';\nimport type { Chart } from '../scenegraph/graphic/chart';\nimport {\n chartRenderQueueList,\n clearChartRenderQueue,\n setBatchRenderChartCount\n} from '../scenegraph/graphic/contributions/chart-render-helper';\nimport { isLeftOrRightAxis, isTopOrBottomAxis } from '../layout/chart-helper/get-axis-config';\nimport { NumberRangeMap } from '../layout/row-height-map';\nimport { ListTable } from '../ListTable';\nimport type { SimpleHeaderLayoutMap } from '../layout';\nimport { RowSeriesNumberHelper } from './row-series-number-helper';\nimport { hideCellSelectBorder, restoreCellSelectBorder } from '../scenegraph/select/update-select-border';\nimport type { ITextGraphicAttribute } from './../vrender';\nimport { ReactCustomLayout } from '../components/react/react-custom-layout';\nimport type { ISortedMapItem } from '../data/DataSource';\nimport { hasAutoImageColumn } from '../layout/layout-helper';\nimport { Factory } from './factory';\nimport {\n getCellAt,\n getCellAtRelativePosition,\n getColAtRelativePosition,\n getRowAtRelativePosition,\n getColAt,\n getRowAt,\n getTargetColAt,\n getTargetColAtConsiderRightFrozen,\n getTargetRowAt,\n getTargetRowAtConsiderBottomFrozen\n} from './utils/get-cell-position';\nimport { getCellStyle } from './style-helper';\nimport type { EditManager } from '../edit/edit-manager';\nimport { createReactContainer } from '../scenegraph/layout/frozen-react';\nimport { setIconColor } from '../icons';\nimport { TableAnimationManager } from './animation';\nimport type { ITableAnimationOption } from '../ts-types/animation/appear';\nimport { checkCellInSelect } from '../state/common/check-in-select';\nimport type { CustomCellStylePlugin, ICustomCellStylePlugin } from '../plugins/custom-cell-style';\nimport { isCellDisableSelect } from '../state/select/is-cell-select-highlight';\nimport { getCustomMergeCellFunc } from './utils/get-custom-merge-cell-func';\nimport { vglobal } from './../vrender';\nimport { PluginManager } from '../plugins/plugin-manager';\nimport type { IVTablePlugin } from '../plugins/interface';\n\nconst { toBoxArray } = utilStyle;\nconst { isTouchEvent } = event;\nconst rangeReg = /^\\$(\\d+)\\$(\\d+)$/;\nimportStyle();\n\nexport abstract class BaseTable extends EventTarget implements BaseTableAPI {\n internalProps: IBaseTableProtected;\n showFrozenIcon = true;\n padding: { top: number; left: number; right: number; bottom: number };\n globalDropDownMenu?: MenuListItem[] | ((args: { row: number; col: number; table: BaseTableAPI }) => MenuListItem[]);\n //画布绘制单元格的区域 不包括整体边框frame,所以比canvas的width和height要小一点(canvas的width包括了frame)\n tableNoFrameWidth: number;\n tableNoFrameHeight: number;\n tableX: number;\n tableY: number;\n _widthMode: WidthModeDef;\n _heightMode: HeightModeDef;\n _autoFillWidth: boolean;\n _autoFillHeight: boolean;\n _containerFit: { width: boolean; height: boolean };\n _widthAdaptiveMode: WidthAdaptiveModeDef;\n _heightAdaptiveMode: HeightAdaptiveModeDef;\n customRender?: ICustomRender;\n\n canvasWidth?: number;\n canvasHeight?: number;\n contentOffsetX?: number;\n contentOffsetY?: number;\n\n _vDataSet?: DataSet;\n scenegraph: Scenegraph;\n stateManager: StateManager;\n eventManager: EventManager;\n editorManager: EditManager;\n animationManager: TableAnimationManager;\n _pixelRatio: number;\n\n // bottomFrozenRowCount: number = 0;\n // rightFrozenColCount: number = 0;\n /** 是否设置了canvas的宽高 */\n canvasSizeSeted?: boolean;\n static get EVENT_TYPE(): typeof TABLE_EVENT_TYPE {\n return TABLE_EVENT_TYPE;\n }\n /**\n * 用户配置的options 只读 勿直接修改\n */\n readonly options: BaseTableConstructorOptions;\n\n version = \"1.22.11-alpha.7\";\n\n pagination?: IPagination | undefined;\n\n /**\n * constructor\n *\n * @constructor\n * @param options Constructor options\n */\n // eslint-disable-next-line default-param-last\n id = `VTable${Date.now()}`;\n\n headerStyleCache: Map<string, any>;\n bodyStyleCache: Map<string, any>;\n bodyMergeTitleCache: Map<string, any>;\n bodyBottomStyleCache: Map<string, any>;\n container: HTMLElement;\n isReleased: boolean = false;\n _chartEventMap: Record<string, { query?: any; callback: AnyFunction }[]> = {};\n\n customCellStylePlugin?: CustomCellStylePlugin;\n\n columnWidthComputeMode?: 'normal' | 'only-header' | 'only-body';\n\n reactCustomLayout?: ReactCustomLayout;\n _hasAutoImageColumn?: boolean;\n\n pluginManager: PluginManager;\n rotateDegree?: number;\n constructor(container: HTMLElement, options: BaseTableConstructorOptions = {}) {\n super();\n\n if (Env.mode === 'node') {\n options = container as BaseTableConstructorOptions;\n container = null;\n } else if (!(container instanceof HTMLElement)) {\n options = container as BaseTableConstructorOptions;\n if ((container as BaseTableConstructorOptions).container) {\n container = (container as BaseTableConstructorOptions).container;\n } else {\n container = null;\n }\n }\n if (!container && options.mode !== 'node' && !options.canvas) {\n throw new Error(\"vtable's container is undefined\");\n }\n\n this.pluginManager = new PluginManager(this, options);\n this.fireListeners(TABLE_EVENT_TYPE.BEFORE_INIT, { options, container });\n container = options.container && options.container instanceof HTMLElement ? options.container : container;\n // for image anonymous\n if (options.customConfig?.imageAnonymous === false) {\n vglobal.isImageAnonymous = false;\n }\n\n const {\n // rowCount = 0,\n // colCount = 0,\n frozenColCount = 0,\n unfreezeAllOnExceedsMaxWidth,\n frozenRowCount,\n defaultRowHeight = 40,\n defaultHeaderRowHeight,\n defaultColWidth = 80,\n defaultHeaderColWidth,\n widthMode = 'standard',\n heightMode = 'standard',\n autoFillWidth = false,\n autoFillHeight = false,\n containerFit = { width: false, height: false },\n widthAdaptiveMode = 'only-body',\n heightAdaptiveMode = 'only-body',\n keyboardOptions,\n eventOptions,\n rowSeriesNumber,\n enableCheckboxCascade,\n enableHeaderCheckboxCascade,\n // columnSeriesNumber,\n // disableRowHeaderColumnResize,\n columnResizeMode,\n rowResizeMode = 'none',\n resize,\n dragHeaderMode,\n dragOrder,\n // showHeader,\n // scrollBar,\n showFrozenIcon,\n allowFrozenColCount,\n padding,\n hover,\n menu,\n select: click,\n customRender,\n pixelRatio = defaultPixelRatio,\n renderChartAsync,\n renderChartAsyncBatchCount,\n\n mode,\n modeParams,\n canvasWidth,\n canvasHeight,\n contentOffsetX: translateX,\n contentOffsetY: translateY,\n overscrollBehavior,\n limitMinWidth,\n limitMinHeight,\n clearDOM = true\n } = options;\n\n const { groupConfig, groupBy, groupTitleFieldFormat, groupTitleCustomLayout, enableTreeStickCell } =\n options as ListTableConstructorOptions;\n this.container = container;\n this.options = options;\n this._widthMode = widthMode;\n this._heightMode = heightMode;\n this._widthAdaptiveMode = widthAdaptiveMode;\n this._heightAdaptiveMode = heightAdaptiveMode;\n this._autoFillWidth = autoFillWidth;\n this._autoFillHeight = autoFillHeight;\n // 处理containerFit配置\n if (containerFit !== undefined) {\n if (typeof containerFit === 'boolean') {\n this._containerFit = { width: containerFit, height: containerFit };\n } else if (containerFit && typeof containerFit === 'object') {\n this._containerFit = {\n width: containerFit.width ?? true,\n height: containerFit.height ?? true\n };\n } else {\n this._containerFit = { width: false, height: false };\n }\n }\n this.customRender = customRender;\n this.padding = { top: 0, right: 0, left: 0, bottom: 0 };\n if (padding) {\n if (typeof padding === 'number') {\n this.padding.top = padding;\n this.padding.left = padding;\n this.padding.bottom = padding;\n this.padding.right = padding;\n } else {\n padding.top && (this.padding.top = padding.top);\n padding.bottom && (this.padding.bottom = padding.bottom);\n padding.left && (this.padding.left = padding.left);\n padding.right && (this.padding.right = padding.right);\n }\n }\n if (isValid(canvasHeight) || isValid(canvasWidth)) {\n this.canvasSizeSeted = true;\n }\n this.tableNoFrameWidth = 0;\n this.tableNoFrameHeight = 0;\n this.contentOffsetX = translateX ?? 0;\n this.contentOffsetY = translateY ?? 0;\n this.canvasWidth = isNumber(canvasWidth) ? canvasWidth : undefined;\n this.canvasHeight = isNumber(canvasHeight) ? canvasHeight : undefined;\n\n this.columnWidthComputeMode = options.columnWidthComputeMode ?? 'normal';\n\n const internalProps = (this.internalProps = {} as IBaseTableProtected);\n // style.initDocument(scrollBar);\n // showHeader !== undefined && (this.showHeader = showHeader);\n // scrollBar !== undefined && (this.scrollBar = scrollBar);\n showFrozenIcon !== undefined && (this.showFrozenIcon = showFrozenIcon);\n if (typeof allowFrozenColCount === 'number' && allowFrozenColCount <= 0) {\n this.showFrozenIcon = false;\n }\n //设置是否自动撑开的配置\n // internalProps.autoRowHeight = options.autoRowHeight ?? false;\n\n if (this.options.canvas) {\n if (Env.mode !== 'node') {\n internalProps.element = this.options.canvas.parentElement;\n internalProps.element.style.position = 'relative';\n }\n internalProps.focusControl = new FocusInput(this, internalProps.element);\n internalProps.canvas = this.options.canvas;\n internalProps.context = internalProps.canvas.getContext('2d')!;\n } else if (Env.mode !== 'node') {\n internalProps.element = createRootElement(this.padding);\n internalProps.focusControl = new FocusInput(this, internalProps.element);\n internalProps.canvas = document.createElement('canvas');\n internalProps.element.appendChild(internalProps.canvas);\n internalProps.context = internalProps.canvas.getContext('2d')!;\n\n if (options.customConfig?.createReactContainer) {\n createReactContainer(this);\n }\n }\n\n internalProps.handler = new EventHandler();\n if (isNumber(this.options.resizeTime)) {\n internalProps.handler.resizeTime = this.options.resizeTime;\n }\n\n internalProps.pixelRatio = pixelRatio;\n internalProps.frozenColCount = frozenColCount;\n internalProps.frozenRowCount = frozenRowCount;\n internalProps.unfreezeAllOnExceedsMaxWidth = unfreezeAllOnExceedsMaxWidth ?? true;\n\n internalProps.defaultRowHeight = defaultRowHeight;\n internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight ?? defaultRowHeight; // defaultHeaderRowHeight没有设置取defaultRowHeight\n\n internalProps.defaultColWidth = defaultColWidth;\n internalProps.defaultHeaderColWidth = defaultHeaderColWidth ?? defaultColWidth;\n\n internalProps.keyboardOptions = keyboardOptions;\n internalProps.eventOptions = eventOptions;\n internalProps.rowSeriesNumber = rowSeriesNumber;\n internalProps.enableCheckboxCascade = enableCheckboxCascade ?? rowSeriesNumber?.enableTreeCheckbox ?? true;\n internalProps.enableHeaderCheckboxCascade = enableCheckboxCascade || (enableHeaderCheckboxCascade ?? true);\n // internalProps.columnSeriesNumber = columnSeriesNumber;\n\n internalProps.columnResizeMode = resize?.columnResizeMode ?? columnResizeMode;\n internalProps.canResizeColumn = resize?.canResizeColumn;\n internalProps.rowResizeMode = resize?.rowResizeMode ?? rowResizeMode;\n internalProps.dragHeaderMode = dragOrder?.dragHeaderMode ?? dragHeaderMode ?? 'none';\n internalProps.renderChartAsync = renderChartAsync;\n setBatchRenderChartCount(renderChartAsyncBatchCount);\n internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';\n\n (internalProps as ListTableProtected).groupBy = groupConfig?.groupBy ?? groupBy;\n (internalProps as ListTableProtected).groupTitleCheckbox =\n groupConfig?.titleCheckbox ?? !!rowSeriesNumber?.enableTreeCheckbox;\n (internalProps as ListTableProtected).groupTitleFieldFormat =\n groupConfig?.titleFieldFormat ?? groupTitleFieldFormat;\n (internalProps as ListTableProtected).groupTitleCustomLayout =\n groupConfig?.titleCustomLayout ?? groupTitleCustomLayout;\n (internalProps as ListTableProtected).enableTreeStickCell = groupConfig?.enableTreeStickCell ?? enableTreeStickCell;\n\n internalProps._rowHeightsMap = new NumberRangeMap(this);\n internalProps._rowRangeHeightsMap = new Map();\n internalProps._colRangeWidthsMap = new Map();\n internalProps._widthResizedColMap = new Set();\n internalProps._heightResizedRowMap = new Set();\n\n this.colWidthsMap = new NumberMap();\n this.colContentWidthsMap = new NumberMap();\n this.colWidthsLimit = {};\n\n const that = this;\n internalProps.calcWidthContext = {\n _: internalProps,\n get full(): number {\n if (Env.mode === 'node') {\n return that.canvasWidth / (pixelRatio ?? 1);\n }\n return (\n this._.canvas.width /\n ((this._.context as any).pixelRatio ?? that.internalProps.pixelRatio ?? window.devicePixelRatio)\n );\n }\n // get em(): number {\n // return getFontSize(this._.context, this._.theme.font).width;\n // }\n };\n\n internalProps.cellTextOverflows = {};\n internalProps.focusedTable = false;\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT); //原来在listTable文件中\n internalProps.theme.isPivot = this.isPivotTable();\n setIconColor(internalProps.theme.functionalIconsStyle);\n if (container) {\n // 先清空\n if (clearDOM) {\n container.innerHTML = '';\n }\n container.appendChild(internalProps.element);\n this._updateSize();\n } else {\n this._updateSize();\n }\n\n // this.options = options;\n // internalProps.theme = themes.of(options.theme ?? themes.DEFAULT);\n // internalProps.theme.isPivot = this.isPivotTable();\n internalProps.bodyHelper = new BodyHelper(this);\n internalProps.headerHelper = new HeaderHelper(this);\n internalProps.rowSeriesNumberHelper = new RowSeriesNumberHelper(this);\n\n internalProps.autoWrapText = options.autoWrapText;\n internalProps.enableLineBreak = options.enableLineBreak;\n\n internalProps.allowFrozenColCount = options.allowFrozenColCount ?? 0;\n internalProps.limitMaxAutoWidth = options.limitMaxAutoWidth ?? 450;\n internalProps.limitMinWidth =\n limitMinWidth !== null && limitMinWidth !== undefined\n ? typeof limitMinWidth === 'number'\n ? limitMinWidth\n : limitMinWidth\n ? 10\n : 0\n : 10;\n internalProps.limitMinHeight =\n limitMinHeight !== null && limitMinHeight !== undefined\n ? typeof limitMinHeight === 'number'\n ? limitMinHeight\n : limitMinHeight\n ? 10\n : 0\n : 10;\n // 生成scenegraph\n // this._vDataSet = new DataSet();\n this.scenegraph = new Scenegraph(this);\n this.stateManager = new StateManager(this);\n this.eventManager = new EventManager(this);\n this.animationManager = new TableAnimationManager(this);\n\n if (options.legends) {\n internalProps.legends = [];\n const createLegend = Factory.getFunction('createLegend') as CreateLegend;\n if (Array.isArray(options.legends)) {\n for (let i = 0; i < options.legends.length; i++) {\n internalProps.legends.push(createLegend(options.legends[i], this));\n }\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n } else {\n internalProps.legends.push(createLegend(options.legends, this));\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n }\n }\n\n //原有的toolTip提示框处理,主要在文字绘制不全的时候 出来全文本提示信息 需要加个字段设置是否有效\n internalProps.tooltip = Object.assign(\n {\n parentElement: this.getElement(),\n renderMode: 'html',\n isShowOverflowTextTooltip: false,\n confine: true,\n position: Placement.bottom\n },\n options.tooltip\n );\n if (internalProps.tooltip.renderMode === 'html') {\n const TooltipHandler = Factory.getComponent('tooltipHandler') as ITooltipHandler;\n TooltipHandler && (internalProps.tooltipHandler = new TooltipHandler(this, internalProps.tooltip.confine));\n }\n internalProps.menu = Object.assign(\n {\n renderMode: 'html'\n },\n options.menu\n );\n Array.isArray(options.menu?.dropDownMenuHighlight) &&\n this.setDropDownMenuHighlight(options.menu?.dropDownMenuHighlight);\n\n // 全局下拉菜单\n (Array.isArray(options.menu?.defaultHeaderMenuItems) ||\n typeof options.menu?.defaultHeaderMenuItems === 'function') &&\n (this.globalDropDownMenu = options.menu.defaultHeaderMenuItems);\n\n if (internalProps.menu.renderMode === 'html') {\n const MenuHandler = Factory.getComponent('menuHandler') as IMenuHandler;\n internalProps.menuHandler = new MenuHandler(this);\n }\n\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.bodyMergeTitleCache = new Map();\n this.bodyBottomStyleCache = new Map();\n\n internalProps.stick = { changedCells: new Map() };\n\n internalProps.customMergeCell = getCustomMergeCellFunc(options.customMergeCell);\n\n const CustomCellStylePlugin = Factory.getComponent('customCellStylePlugin') as ICustomCellStylePlugin;\n if (CustomCellStylePlugin) {\n this.customCellStylePlugin = new CustomCellStylePlugin(\n this,\n options.customCellStyle ?? [],\n options.customCellStyleArrangement ?? []\n );\n }\n this._adjustCanvasSizeByOption();\n }\n _adjustCanvasSizeByOption() {\n // 等宽高都进行了内部计算,判断如果配置了内容自动撑开表格,需要在这里赋值canvasWidth 和 canvasHeight\n if (this.options.canvasHeight === 'auto' || this.options.canvasWidth === 'auto') {\n setTimeout(() => {\n let canvasWidth;\n let canvasHeight;\n if (this.options.canvasHeight === 'auto') {\n let borderWidth = 0;\n if (this.theme.frameStyle?.innerBorder) {\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n borderWidth += shadowWidths[1] ?? 0;\n } else if (this.theme.frameStyle) {\n const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n borderWidth +=\n (lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0) + ((lineWidths[2] ?? 0) + (shadowWidths[2] ?? 0));\n }\n canvasHeight =\n Math.min(\n this.options.maxCanvasHeight ? this.options.maxCanvasHeight - borderWidth : 20000,\n this.getAllRowsHeight()\n ) + borderWidth;\n } else {\n canvasHeight = this.canvasHeight;\n }\n if (this.options.canvasWidth === 'auto') {\n let borderWidth = 0;\n if (this.theme.frameStyle?.innerBorder) {\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n borderWidth += shadowWidths[2] ?? 0;\n } else if (this.theme.frameStyle) {\n const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n borderWidth +=\n (lineWidths[1] ?? 0) + (shadowWidths[1] ?? 0) + ((lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0));\n }\n canvasWidth =\n Math.min(\n this.options.maxCanvasWidth ? this.options.maxCanvasWidth - borderWidth : 20000,\n this.getAllColsWidth()\n ) + borderWidth;\n } else {\n canvasWidth = this.canvasWidth;\n }\n\n this.setCanvasSize(canvasWidth, canvasHeight);\n }, 0);\n }\n }\n /** 节流绘制 */\n throttleInvalidate = throttle2(this.render.bind(this), 200);\n /**\n * Get table container.\n * @returns {HTMLElement} table container\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n /**\n * 获取表格创建的DOM根节点\n */\n getElement(): HTMLElement {\n return this.internalProps.element;\n }\n /**\n * 获取canvas\n */\n get canvas(): HTMLCanvasElement {\n return this.internalProps.canvas;\n }\n setCanvasSize(canvasWidth: number, canvasHeight: number) {\n this.canvasWidth = canvasWidth;\n this.canvasHeight = canvasHeight;\n this.options.canvasHeight = canvasHeight;\n this.options.canvasWidth = canvasWidth;\n this.resize();\n }\n setContentInsetXY(contentOffsetX: number, contentOffsetY: number) {\n this.contentOffsetX = contentOffsetX;\n this.contentOffsetY = contentOffsetY;\n this.options.contentOffsetX = contentOffsetX;\n this.options.contentOffsetY = contentOffsetY;\n this.resize();\n }\n resize() {\n this._updateSize();\n this.internalProps.legends?.forEach(legend => {\n legend?.resize();\n });\n if (this.internalProps.title) {\n this.internalProps.title.resize();\n }\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip.resize();\n }\n // this.stateManager.checkFrozen();\n this.scenegraph.resize();\n }\n\n /**\n * Get the number of rows.\n */\n get rowCount(): number {\n return this.internalProps.rowCount;\n }\n /**\n * Set the number of rows.\n */\n set rowCount(rowCount: number) {\n this.internalProps.rowCount = rowCount;\n }\n /**\n * Get the number of columns.\n */\n get colCount(): number {\n return this.internalProps.colCount ?? 0;\n }\n /**\n * Set the number of columns.\n */\n set colCount(colCount: number) {\n this.internalProps.colCount = colCount;\n }\n /**\n * 注意 这个值和options.frozenColCount 不一样!options.frozenColCount是用户实际设置的; 这里获取的值是调整过:frozen的列过宽时 frozeCount为0\n */\n get frozenColCount(): number {\n return this.internalProps?.layoutMap?.frozenColCount ?? this.internalProps?.frozenColCount ?? 0;\n }\n /**\n * Set the number of frozen columns.\n * 设置冻结列数 会自动刷新渲染节点\n */\n set frozenColCount(frozenColCount: number) {\n // 此情况将frozenColCount设为0(显示效果一致)\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n // const oldFrozenColCount = this.internalProps.frozenColCount;\n this.internalProps.frozenColCount = frozenColCount;\n this.options.frozenColCount = frozenColCount;\n\n // 纠正frozenColCount的值;\n const maxFrozenWidth = this._getMaxFrozenWidth();\n // if (this.tableNoFrameWidth - this.getColsWidth(0, frozenColCount - 1) <= 120) {\n if (this.getColsWidth(0, frozenColCount - 1) > maxFrozenWidth) {\n if (this.internalProps.unfreezeAllOnExceedsMaxWidth) {\n this.internalProps.frozenColCount = 0;\n } else {\n const computedFrozenColCount = this._getComputedFrozenColCount(frozenColCount);\n this.internalProps.frozenColCount = computedFrozenColCount;\n }\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n /** 设置冻结的行数 */\n setFrozenColCount(frozenColCount: number) {\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n // const oldFrozenColCount = this.internalProps.frozenColCount;\n this.internalProps.frozenColCount = frozenColCount;\n this.options.frozenColCount = frozenColCount;\n //纠正frozenColCount的值\n const maxFrozenWidth = this._getMaxFrozenWidth();\n // if (this.tableNoFrameWidth - this.getColsWidth(0, frozenColCount - 1) <= 120) {\n if (this.getColsWidth(0, frozenColCount - 1) > maxFrozenWidth) {\n if (this.internalProps.unfreezeAllOnExceedsMaxWidth) {\n this.internalProps.frozenColCount = 0;\n } else {\n const computedFrozenColCount = this._getComputedFrozenColCount(frozenColCount);\n this.internalProps.frozenColCount = computedFrozenColCount;\n }\n }\n\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n /**\n * 和setFrozenColCount一样的逻辑 但保留options.frozenColCount不赋新值\n * 当冻结列的宽度过宽时调用该函数\n */\n _setFrozenColCount(frozenColCount: number) {\n // 此情况将frozenColCount设为0(显示效果一致)\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n this.internalProps.frozenColCount = frozenColCount;\n }\n /**\n * 计算完前置状态后 重新计算判断列宽是否过大\n */\n _resetFrozenColCount() {\n if (this.options.frozenColCount) {\n if (this.tableNoFrameWidth - this.getColsWidth(0, this.options.frozenColCount - 1) <= 120) {\n this._setFrozenColCount(0);\n } else if (this.frozenColCount !== this.options.frozenColCount) {\n this._setFrozenColCount(this.options.frozenColCount); //frozenColCount从0恢复到原有的frozenColCount\n }\n }\n }\n /**\n * Get the number of frozen rows.\n */\n get frozenRowCount(): number {\n return this.internalProps?.layoutMap?.frozenRowCount ?? this.internalProps?.frozenRowCount ?? 0;\n }\n /**\n * Set the number of frozen rows.\n * 设置冻结行数 会自动刷新渲染节点\n */\n set frozenRowCount(frozenRowCount: number) {\n this.internalProps.frozenRowCount = frozenRowCount;\n this.options.frozenRowCount = frozenRowCount;\n this.stateManager.setFrozenRow(this.internalProps.frozenRowCount);\n }\n /**\n * 设置冻结行数 不赋值options.frozenRowCount。供内部逻辑调用\n */\n _setFrozenRowCount(frozenRowCount: number) {\n this.internalProps.frozenRowCount = frozenRowCount;\n this.stateManager.setFrozenRow(this.internalProps.frozenRowCount);\n }\n get rightFrozenColCount(): number {\n return this.internalProps?.layoutMap?.rightFrozenColCount ?? this.internalProps?.rightFrozenColCount ?? 0;\n }\n\n set rightFrozenColCount(rightFrozenColCount: number) {\n this.scenegraph.dealWidthRightFrozen(rightFrozenColCount);\n }\n\n get bottomFrozenRowCount(): number {\n return this.internalProps?.layoutMap?.bottomFrozenRowCount ?? this.internalProps?.bottomFrozenRowCount ?? 0;\n }\n\n set bottomFrozenRowCount(bottomFrozenRowCount: number) {\n this.scenegraph.dealWidthBottomFrozen(bottomFrozenRowCount);\n }\n\n /**\n * Get the default row height.\n *\n */\n get defaultRowHeight(): number {\n if (isNumber(this.internalProps.defaultRowHeight)) {\n return this.internalProps.defaultRowHeight as number;\n }\n return 40;\n }\n /**\n * Set the default row height.\n */\n set defaultRowHeight(defaultRowHeight: number | 'auto') {\n this.internalProps.defaultRowHeight = defaultRowHeight;\n this.options.defaultRowHeight = defaultRowHeight;\n }\n /**\n * Get the default row height.\n *\n */\n get defaultHeaderRowHeight(): (number | 'auto') | (number | 'auto')[] {\n return this.internalProps.defaultHeaderRowHeight;\n }\n /**\n * Set the default row height.\n */\n set defaultHeaderRowHeight(defaultHeaderRowHeight: (number | 'auto') | (number | 'auto')[]) {\n this.internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight;\n this.options.defaultHeaderRowHeight = defaultHeaderRowHeight;\n }\n /**\n * Get the default column width.\n */\n get defaultColWidth(): number {\n return this.internalProps.defaultColWidth;\n }\n /**\n * Set the default column width.\n */\n set defaultColWidth(defaultColWidth: number) {\n this.internalProps.defaultColWidth = defaultColWidth;\n this.options.defaultColWidth = defaultColWidth;\n }\n /**\n * Get the default column width.\n */\n get defaultHeaderColWidth(): (number | 'auto') | (number | 'auto')[] {\n return this.internalProps.defaultHeaderColWidth;\n }\n /**\n * Set the default column width.\n */\n set defaultHeaderColWidth(defaultHeaderColWidth: (number | 'auto') | (number | 'auto')[]) {\n this.internalProps.defaultHeaderColWidth = defaultHeaderColWidth;\n this.options.defaultHeaderColWidth = defaultHeaderColWidth;\n }\n /**\n * Get the columns width. 但这个可能和看到的宽度不一致 获取某一列的宽度请使用接口 getColWidth(1) 这个接口会根据maxWidth minWidth进行调整\n */\n get colWidthsMap(): NumberMap<string | number> {\n return this.internalProps._colWidthsMap;\n }\n /**\n * Set the columns width.\n */\n set colWidthsMap(colWidthsMap: NumberMap<string | number>) {\n this.internalProps._colWidthsMap = colWidthsMap;\n }\n /**\n * Get every colomn's content width. not care actual column width\n */\n get colContentWidthsMap(): NumberMap<string | number> {\n return this.internalProps._colContentWidthsMap;\n }\n /**\n * Set every colomn's content width.\n */\n set colContentWidthsMap(colContentWidthsMap: NumberMap<string | number>) {\n this.internalProps._colContentWidthsMap = colContentWidthsMap;\n }\n /**\n * Get the range columns width.\n */\n get _colRangeWidthsMap(): Map<string, number> {\n return this.internalProps._colRangeWidthsMap;\n }\n /**\n * Set the range columns width.\n */\n set _colRangeWidthsMap(_colRangeWidthsMap: Map<string, number>) {\n this.internalProps._colRangeWidthsMap = _colRangeWidthsMap;\n }\n /**\n * Get the range rows height.\n */\n get _rowRangeHeightsMap(): Map<string, number> {\n return this.internalProps._rowRangeHeightsMap;\n }\n /**\n * Set the range rows height.\n */\n set _rowRangeHeightsMap(_rowRangeHeightsMap: Map<string, number>) {\n this.internalProps._rowRangeHeightsMap = _rowRangeHeightsMap;\n }\n /**\n * Get the columns width.\n */\n get rowHeightsMap(): NumberRangeMap {\n return this.internalProps._rowHeightsMap;\n }\n /**\n * Set the columns width.\n */\n set rowHeightsMap(rowHeightsMap: NumberRangeMap) {\n this.internalProps._rowHeightsMap = rowHeightsMap;\n }\n /**\n * Get the columns width limit.\n */\n get colWidthsLimit(): {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n } {\n return this.internalProps._colWidthsLimit;\n }\n /**\n * Set the columns width limit.\n */\n set colWidthsLimit(colWidthsLimit: {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n }) {\n this.internalProps._colWidthsLimit = colWidthsLimit;\n }\n get keyboardOptions(): TableKeyboardOptions | null {\n return this.internalProps.keyboardOptions ?? null;\n }\n set keyboardOptions(keyboardOptions: TableKeyboardOptions | null) {\n this.internalProps.keyboardOptions = keyboardOptions ?? undefined;\n }\n get eventOptions(): TableEventOptions | null {\n return this.internalProps.eventOptions ?? null;\n }\n set eventOptions(eventOptions: TableEventOptions | null) {\n this.internalProps.eventOptions = eventOptions ?? undefined;\n }\n\n get widthMode(): WidthModeDef {\n return this._widthMode;\n }\n set widthMode(widthMode: WidthModeDef) {\n if (widthMode !== this._widthMode) {\n this._widthMode = widthMode;\n this.options.widthMode = widthMode;\n }\n }\n get heightMode(): HeightModeDef {\n return this._heightMode;\n }\n set heightMode(heightMode: HeightModeDef) {\n if (heightMode !== this._heightMode) {\n this._heightMode = heightMode;\n this.options.heightMode = heightMode;\n }\n }\n get autoFillWidth(): boolean {\n return this._autoFillWidth;\n }\n set autoFillWidth(autoFillWidth: boolean) {\n if (autoFillWidth !== this._autoFillWidth) {\n this._autoFillWidth = autoFillWidth;\n }\n }\n get autoFillHeight(): boolean {\n return this._autoFillHeight;\n }\n set autoFillHeight(autoFillHeight: boolean) {\n if (autoFillHeight !== this._autoFillHeight) {\n this._autoFillHeight = autoFillHeight;\n }\n }\n get widthAdaptiveMode(): WidthAdaptiveModeDef {\n return this._widthAdaptiveMode;\n }\n set widthAdaptiveMode(widthAdaptiveMode: WidthAdaptiveModeDef) {\n if (widthAdaptiveMode !== this._widthAdaptiveMode) {\n this._widthAdaptiveMode = widthAdaptiveMode;\n }\n }\n get heightAdaptiveMode(): HeightAdaptiveModeDef {\n return this._heightAdaptiveMode;\n }\n set heightAdaptiveMode(heightAdaptiveMode: HeightAdaptiveModeDef) {\n if (heightAdaptiveMode !== this._heightAdaptiveMode) {\n this._heightAdaptiveMode = heightAdaptiveMode;\n }\n }\n /**\n * 根据设置的列宽配置 计算列宽值\n * @param {string|number} width width definition\n * @returns {number} the pixels of width\n */\n _colWidthDefineToPxWidth(width: string | number): number {\n if (width === 'auto') {\n // hack for defaultWidht support 'auto'\n return 0;\n }\n return _toPxWidth(this, width);\n }\n\n _getMaxFrozenWidth(): number {\n const maxFrozenWidth = this.options.maxFrozenWidth ?? '80%';\n return _toPxWidth(this, maxFrozenWidth);\n }\n _getComputedFrozenColCount(frozenColCount: number): number {\n const maxFrozenWidth = this._getMaxFrozenWidth();\n let computedfrozenColCount = frozenColCount;\n while (this.getColsWidth(0, computedfrozenColCount - 1) > maxFrozenWidth) {\n computedfrozenColCount--;\n if (computedfrozenColCount <= 0) {\n break;\n }\n }\n return computedfrozenColCount;\n }\n /**\n * 获取列宽的最大最小限制\n * @param {number} col number of column\n * @returns {object|null} the column width limits\n * @private\n */\n private _getColWidthLimits(col: number): {\n min?: undefined;\n minDef?: undefined;\n max?: undefined;\n maxDef?: undefined;\n } | null {\n const limit = this.colWidthsLimit[col];\n if (!limit) {\n return null;\n }\n\n const result: {\n min?: number;\n max?: number;\n minDef?: string | number;\n maxDef?: string | number;\n } = {};\n\n if (limit.min) {\n result.min = _toPxWidth(this, limit.min);\n result.minDef = limit.min;\n }\n if (limit.max) {\n result.max = _toPxWidth(this, limit.max);\n result.maxDef = limit.max;\n }\n return result as never;\n }\n\n _adjustColWidth(col: number, orgWidth: number): number {\n const limits = this._getColWidthLimits(col);\n return Math.max(_applyColWidthLimits(limits, orgWidth), 0);\n }\n get pixelRatio(): number {\n return this.internalProps.pixelRatio;\n }\n /**\n * 设置像数比\n * @param pixelRatio\n */\n setPixelRatio(pixelRatio: number) {\n if (pixelRatio !== this.internalProps?.pixelRatio) {\n this.internalProps.pixelRatio = pixelRatio;\n const that = this;\n const canvasWidth = this.canvasWidth;\n this.internalProps.calcWidthContext = {\n _: this.internalProps,\n get full(): number {\n if (Env.mode === 'node') {\n return canvasWidth / (pixelRatio ?? 1);\n }\n return (\n this._.canvas.width /\n ((this._.context as any).pixelRatio ?? that.internalProps.pixelRatio ?? window.devicePixelRatio)\n );\n }\n };\n this.scenegraph.setPixelRatio(pixelRatio);\n }\n }\n\n /**\n * 窗口尺寸发生变化 或者像数比变化\n * @return {void}\n */\n _updateSize(): void {\n //清除样式并获取大小\n const { padding } = this;\n\n let widthP = 0;\n let heightP = 0;\n this.tableX = this.contentOffsetX;\n this.tableY = this.contentOffsetY;\n\n if (this.options.canvas && this.options.viewBox) {\n widthP = this.options.viewBox.x2 - this.options.viewBox.x1;\n heightP = this.options.viewBox.y2 - this.options.viewBox.y1;\n // this.tableX = this.options.viewBox.x1;\n // this.tableY = this.options.viewBox.y1;\n if (this?.scenegraph?.stage) {\n if (this.options.viewBox) {\n (this.scenegraph.stage as any).setViewBox(this.options.viewBox, false);\n } else {\n this.scenegraph.stage.resize(widthP, heightP);\n }\n }\n } else if (Env.mode === 'browser') {\n const element = this.getElement();\n let widthWithoutPadding = 0;\n let heightWithoutPadding = 0;\n const isDefWidth = isValid(this.canvasWidth);\n const isDefHeight = isValid(this.canvasHeight);\n if (this.canvasSizeSeted) {\n if (isDefWidth) {\n widthWithoutPadding = this.canvasWidth;\n }\n if (isDefHeight) {\n heightWithoutPadding = this.canvasHeight;\n }\n }\n const unDefSize = (!isDefWidth || !isDefHeight) && element.parentElement;\n if (unDefSize) {\n const computedStyle = element.parentElement.style || window.getComputedStyle(element.parentElement); // 兼容性处理\n if (!isDefWidth) {\n widthWithoutPadding =\n element.parentElement.offsetWidth -\n (parseInt(computedStyle.paddingLeft, 10) || 0) -\n (parseInt(computedStyle.paddingRight, 10) || 0);\n }\n if (!isDefHeight) {\n heightWithoutPadding =\n element.parentElement.offsetHeight -\n parseInt(computedStyle.paddingTop || '0px', 10) -\n parseInt(computedStyle.paddingBottom || '0px', 20);\n }\n\n widthWithoutPadding = (widthWithoutPadding ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n heightWithoutPadding = (heightWithoutPadding ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n }\n\n element.style.width = (widthWithoutPadding && `${widthWithoutPadding - padding.left - padding.right}px`) || '0px';\n element.style.height =\n (heightWithoutPadding && `${heightWithoutPadding - padding.top - padding.bottom}px`) || '0px';\n\n const { canvas } = this.internalProps;\n widthP = (canvas.parentElement?.offsetWidth ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n heightP = (canvas.parentElement?.offsetHeight ?? 1) - (this.options.tableSizeAntiJitter ? 1 : 0);\n\n if (!this?.scenegraph?.stage) {\n canvas.style.width = '';\n canvas.style.height = '';\n canvas.width = widthP;\n canvas.height = heightP;\n\n canvas.style.width = `${widthP}px`;\n canvas.style.height = `${heightP}px`;\n } else if (this.options?.viewBox && !this.options?.canvas) {\n this.scenegraph.stage.resize(widthP, heightP);\n }\n\n if (this.options?.viewBox) {\n widthP = this.options.viewBox.x2 - this.options.viewBox.x1;\n heightP = this.options.viewBox.y2 - this.options.viewBox.y1;\n }\n\n //style 与 width,height相同\n if (this?.scenegraph?.stage) {\n // this.scenegraph.stage.resize(widthP, heightP);\n if (this.options.viewBox) {\n (this.scenegraph.stage as any).setViewBox(this.options.viewBox, false);\n } else {\n this.scenegraph.stage.resize(widthP, heightP);\n }\n }\n } else if (Env.mode === 'node') {\n widthP = this.canvasWidth - 1;\n heightP = this.canvasHeight - 1;\n }\n\n const scrollStyle = this.getTheme().scrollStyle;\n\n let vScrollBarWidth = 0;\n let hScrollBarWidth = 0;\n\n vScrollBarWidth = this.shouldVScrollBarWidthShow(widthP, heightP, scrollStyle)\n ? style.getVerticalScrollBarSize(scrollStyle)\n : 0;\n hScrollBarWidth = this.shouldHScrollBarWidthShow(widthP, heightP, scrollStyle)\n ? style.getHorizontalScrollBarSize(scrollStyle)\n : 0;\n\n const width = Math.floor(widthP - vScrollBarWidth);\n const height = Math.floor(heightP - hScrollBarWidth);\n\n // const width = Math.floor(widthP - style.getVerticalScrollBarSize(scrollStyle));\n // const height = Math.floor(heightP - style.getHorizontalScrollBarSize(scrollStyle));\n\n if (this.internalProps.theme?.frameStyle) {\n //考虑表格整体边框的问题\n const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n if (this.theme.frameStyle?.innerBorder) {\n this.tableX += this.contentOffsetX;\n this.tableY += this.contentOffsetY;\n this.tableNoFrameWidth = width - (shadowWidths[1] ?? 0) - this.contentOffsetX;\n this.tableNoFrameHeight = height - (shadowWidths[2] ?? 0) - this.contentOffsetY;\n } else {\n this.tableX += (lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0);\n this.tableY += (lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0);\n const rightBorder = (lineWidths[1] ?? 0) + (shadowWidths[1] ?? 0);\n this.tableNoFrameWidth =\n width -\n (rightBorder > vScrollBarWidth ? rightBorder - vScrollBarWidth : 0) -\n ((lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0)) -\n this.contentOffsetX;\n const bottomBorder = (lineWidths[2] ?? 0) + (shadowWidths[2] ?? 0);\n this.tableNoFrameHeight =\n height -\n (bottomBorder > hScrollBarWidth ? bottomBorder - hScrollBarWidth : 0) -\n ((lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0)) -\n this.contentOffsetY;\n }\n }\n\n this._clearColRangeWidthsMap();\n this._clearRowRangeHeightsMap();\n }\n\n shouldVScrollBarWidthShow(tableWidth: number, tableHeight: number, scrollStyle: ScrollStyle): boolean {\n if (scrollStyle.hoverOn || scrollStyle.visible === 'none') {\n return false;\n }\n const totalHeight = this.getAllRowsHeight();\n //判断横向滚动条的存在是否影响纵向滚动条的显示\n const sizeTolerance = scrollStyle.visible ? style.getHorizontalScrollBarSize(scrollStyle) : 0;\n const isHScrollBarDecideVScrollBar = totalHeight > tableHeight - sizeTolerance && totalHeight <= tableHeight;\n //如果横向滚动条的存在决定了纵向滚动条是否显示,这里再对纵向滚动条判断,因为有相互依赖的问题\n if (isHScrollBarDecideVScrollBar) {\n const totalWidth = this.getAllColsWidth();\n const sizeTolerance = scrollStyle.visible ? style.getVerticalScrollBarSize(scrollStyle) : 0;\n const isVScrollBarDecideHScrollBar = totalWidth > tableWidth - sizeTolerance && totalWidth <= tableWidth;\n //出现了相互依赖的情况,则不显示纵向滚动条(横向也不显示)\n if (isVScrollBarDecideHScrollBar) {\n return false;\n }\n // 一定显示横向滚动条,则也一定显示纵向滚动条\n if (totalWidth > tableWidth) {\n return true;\n }\n // 横向滚动条不存在,则纵向滚动条也不存在\n if (totalWidth <= tableWidth - sizeTolerance) {\n return false;\n }\n }\n return !(totalHeight <= tableHeight - sizeTolerance);\n }\n\n shouldHScrollBarWidthShow(tableWidth: number, tableHeight: number, scrollStyle: ScrollStyle): boolean {\n if (scrollStyle.hoverOn || scrollStyle.visible === 'none') {\n return false;\n }\n const totalWidth = this.getAllColsWidth();\n //判断纵向滚动条的存在是否影响横向滚动条的显示\n const sizeTolerance = scrollStyle.visible ? style.getVerticalScrollBarSize(scrollStyle) : 0;\n const isVScrollBarDecideHScrollBar = totalWidth > tableWidth - sizeTolerance && totalWidth <= tableWidth;\n //如果纵向滚动条的存在决定了横向滚动条是否显示,这里再对横向滚动条判断,因为有相互依赖的问题\n if (isVScrollBarDecideHScrollBar) {\n const totalHeight = this.getAllRowsHeight();\n const sizeTolerance = scrollStyle.visible ? style.getHorizontalScrollBarSize(scrollStyle) : 0;\n const isHScrollBarDecideVScrollBar = totalHeight > tableHeight - sizeTolerance && totalHeight <= tableHeight;\n //出现了相互依赖的情况,则不显示横向滚动条(纵向也不显示)\n if (isHScrollBarDecideVScrollBar) {\n return false;\n }\n // 一定显示纵向滚动条,则也一定显示横向滚动条\n if (totalHeight > tableHeight) {\n return true;\n }\n // 纵向滚动条不存在,则横向滚动条也不存在\n if (totalHeight <= tableHeight - sizeTolerance) {\n return false;\n }\n }\n return !(totalWidth <= tableWidth - sizeTolerance);\n }\n\n updateViewBox(newViewBox: IBoundsLike) {\n const oldWidth = (this.options?.viewBox?.x2 ?? 0) - (this.options?.viewBox?.x1 ?? 0);\n const oldHeight = (this.options?.viewBox?.y2 ?? 0) - (this.options?.viewBox?.y1 ?? 0);\n const newWidth = newViewBox.x2 - newViewBox.x1;\n const newHeight = newViewBox.y2 - newViewBox.y1;\n this.options.viewBox = newViewBox;\n if (oldWidth !== newWidth || oldHeight !== newHeight) {\n this.resize();\n } else {\n (this.scenegraph.stage as any).setViewBox(this.options.viewBox, true);\n }\n }\n\n setViewBoxTransform(a: number, b: number, c: number, d: number, e: number, f: number) {\n this.internalProps.modifiedViewBoxTransform = true;\n this.scenegraph.stage.window.setViewBoxTransform(a, b, c, d, e, f);\n }\n\n get rowHierarchyType(): 'grid' | 'tree' | 'grid-tree' {\n return this.dataSource.rowHierarchyType;\n }\n\n // /**\n // * Set all column width.\n // * @param {number[]} widths The column widths\n // * @return {void}\n // */\n // setColWidths(widths: number[]): void {\n // widths.forEach((value, index) => this.setColWidth(index, value));\n // }\n /**\n * 获取指定列范围的总宽度\n * @param startCol\n * @param endCol\n * @returns\n */\n getColsWidth(startCol: number, endCol: number): number {\n if (startCol > endCol) {\n return 0;\n }\n startCol = Math.max(startCol, 0);\n endCol = Math.min(endCol, (this.colCount ?? Infinity) - 1); // endCol最大为this.colCount - 1,超过会导致width计算为NaN\n //通过缓存获取指定范围列宽\n const cachedColWidth = this._colRangeWidthsMap.get(`$${startCol}$${endCol}`);\n if (cachedColWidth !== null && cachedColWidth !== undefined) {\n return cachedColWidth;\n }\n\n //特殊处理 先尝试获取startCol->endCol-1的行高\n const cachedLowerColWidth = this._colRangeWidthsMap.get(`$${startCol}$${endCol - 1}`);\n if (cachedLowerColWidth !== null && cachedLowerColWidth !== undefined) {\n // const width = this.colWidthsMap.get(endCol);\n // let adjustW;\n // if (width) {\n // adjustW =\n // this.widthMode === 'adaptive' || (this as any).transpose\n // ? Number(width)\n // : this._adjustColWidth(endCol, this._colWidthDefineToPxWidth(width));\n // } else {\n // use default column width if no width in colWidthsMap\n const adjustW = this.getColWidth(endCol);\n // }\n let addWidth = cachedLowerColWidth + adjustW;\n if (this.rightFrozenColCount > 0 && endCol === this.colCount - this.rightFrozenColCount) {\n // 当结束列大于右侧冻结起始列,说明带差值的列已经计入了缓存,不用计算,此处只需计算传入列正好在右侧起始冻结列的情况\n addWidth = this._getRangeSizeForContainerFit(startCol, endCol, addWidth, 'col');\n }\n // 合法地址存入缓存\n if (startCol >= 0 && endCol >= 0 && !Number.isNaN(addWidth)) {\n this._colRangeWidthsMap.set(`$${startCol}$${endCol}`, Math.round(addWidth));\n }\n return Math.round(addWidth);\n }\n\n let w = 0;\n for (let col = startCol; col <= endCol; col++) {\n w += this.getColWidth(col);\n }\n w = this._getRangeSizeForContainerFit(startCol, endCol, w, 'col');\n\n // this.colWidthsMap.each(startCol, endCol, (width, col) => {\n // // adaptive模式下,不受max min配置影响,直接使用width\n // w +=\n // (this.widthMode === 'adaptive' || (this as any).transpose\n // ? Number(width)\n // : this._adjustColWidth(col, this._colWidthDefineToPxWidth(width))) - this.getColWidth(col);\n // });\n // for (let col = startCol; col <= endCol; col++) {\n // if (this.colWidthsMap.has(col)) {\n // continue;\n // }\n // const adj = this._adjustColWidth(col, this.internalProps.defaultColWidth as number);\n // if (adj !== this.internalProps.defaultColWidth) {\n // w += adj - (this.internalProps.defaultColWidth as number);\n // }\n // }\n\n // 合法地址存入缓存\n if (startCol >= 0 && endCol >= 0) {\n this._colRangeWidthsMap.set(`$${startCol}$${endCol}`, Math.round(w));\n }\n return Math.round(w);\n }\n /**\n * 获取某一行的高度\n * @param row\n * @returns\n */\n getRowHeight(row: number): number {\n // return (\n // this.rowHeightsMap.get(row) ||\n // (this.isColumnHeader(0, row) || this.isCornerHeader(0, row)\n // ? Array.isArray(this.defaultHeaderRowHeight)\n // ? this.defaultHeaderRowHeight[row] ?? this.internalProps.defaultRowHeight\n // : this.defaultHeaderRowHeight\n // : this.internalProps.defaultRowHeight)\n // );\n if (isValid(this.rowHeightsMap.get(row))) {\n if (this.options.customConfig?._disableColumnAndRowSizeRound) {\n const height = this.rowHeightsMap.get(row);\n let heightRange;\n if (row < this.frozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(0, row);\n } else if (row >= this.rowCount - this.bottomFrozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(row, this.rowCount - 1);\n } else {\n heightRange = this.rowHeightsMap.getSumInRange(this.frozenRowCount, row);\n }\n heightRange = Number(heightRange.toFixed(2)); // avoid precision problem\n // if heightRange number is int\n if (Number.isInteger(heightRange)) {\n return Math.ceil(height);\n }\n return Math.floor(height);\n }\n return this.rowHeightsMap.get(row);\n }\n const defaultHeight = this.getDefaultRowHeight(row);\n if (isNumber(defaultHeight)) {\n return defaultHeight;\n }\n return this.defaultRowHeight;\n }\n\n getDefaultColumnWidth(col: number) {\n // return col < this.rowHeaderLevelCount\n // ? Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth\n // : this.defaultColWidth;\n if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n return Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n : this.defaultHeaderColWidth;\n } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n if (this.isPivotTable()) {\n return Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n : this.defaultHeaderColWidth;\n }\n return this.defaultColWidth;\n }\n return this.defaultColWidth;\n }\n\n getDefaultRowHeight(row: number) {\n if (this.isColumnHeader(0, row) || this.isCornerHeader(0, row) || this.isSeriesNumberInHeader(0, row)) {\n return Array.isArray(this.defaultHeaderRowHeight)\n ? this.defaultHeaderRowHeight[row] ?? this.internalProps.defaultRowHeight\n : this.defaultHeaderRowHeight;\n }\n if (this.isBottomFrozenRow(row)) {\n //底部冻结行默认取用了表头的行高 但针对非表头数据冻结的情况这里可能不妥\n return Array.isArray(this.defaultHeaderRowHeight)\n ? this.defaultHeaderRowHeight[\n this.columnHeaderLevelCount > 0 ? this.columnHeaderLevelCount - this.bottomFrozenRowCount : 0\n ] ?? this.internalProps.defaultRowHeight\n : this.defaultHeaderRowHeight;\n }\n return this.internalProps.defaultRowHeight;\n }\n /**\n * 设置某一行的高度\n * @param row\n * @returns\n */\n _setRowHeight(row: number, height: number, clearCache?: boolean): void {\n // this.rowHeightsMap.put(row, Math.round(height));\n this.rowHeightsMap.put(row, this.options.customConfig?._disableColumnAndRowSizeRound ? height : Math.round(height));\n // 清楚影响缓存\n if (clearCache) {\n this._clearRowRangeHeightsMap(row);\n }\n }\n\n setRowHeight(row: number, height: number) {\n this.scenegraph.setRowHeight(row, height);\n this.scenegraph.updateChartSizeForResizeRowHeight(row);\n this.internalProps._heightResizedRowMap.add(row); // add resize tag\n }\n\n /**\n * 获取指定行范围的总高度\n * @param startCol\n * @param endCol\n * @returns\n */\n getRowsHeight(startRow: number, endRow: number): number {\n if (startRow > endRow || this.rowCount === 0) {\n return 0;\n }\n startRow = Math.max(startRow, 0);\n endRow = Math.min(endRow, (this.rowCount ?? Infinity) - 1);\n\n let h = 0;\n const isDefaultRowHeightIsAuto = this.options.defaultRowHeight === 'auto';\n // autoRowHeight || all rows in header, use accumulation\n if (\n this.heightMode === 'standard' &&\n !this.options.customComputeRowHeight &&\n !this.autoFillHeight &&\n this.internalProps.layoutMap &&\n // endRow >= this.columnHeaderLevelCount &&\n // !this.bottomFrozenRowCount &&\n !this.hasAutoImageColumn() &&\n !isDefaultRowHeightIsAuto &&\n this.internalProps._heightResizedRowMap.size === 0\n ) {\n /** 底部冻结开始行 */\n const bottomFrozenStartRow = this.rowCount - this.bottomFrozenRowCount;\n // part in header\n for (let i = startRow; i < Math.min(endRow + 1, this.columnHeaderLevelCount); i++) {\n h += this.getRowHeight(i);\n }\n // part in body\n if (endRow >= this.columnHeaderLevelCount) {\n h +=\n this.defaultRowHeight *\n (Math.min(endRow, bottomFrozenStartRow - 1) - Math.max(this.columnHeaderLevelCount, startRow) + 1);\n }\n /** 当前底部冻结的行高 */\n let currentBottomFrozenRowsHeight = 0;\n // part in bottom frozen\n // last axis row height is default header row height in pivot chart\n for (let i = bottomFrozenStartRow; i < endRow + 1; i++) {\n currentBottomFrozenRowsHeight += this.getRowHeight(i);\n }\n h = this._getRangeSizeForContainerFit(startRow, endRow, h + currentBottomFrozenRowsHeight, 'row');\n } else {\n if (this.options.customConfig?._disableColumnAndRowSizeRound) {\n // for (let i = startRow; i <= endRow; i++) {\n // h += this.getRowHeight(i);\n // }\n const tempH = this.rowHeightsMap.getSumInRange(startRow, endRow);\n let heightRange;\n if (endRow < this.frozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(0, endRow);\n } else if (endRow >= this.rowCount - this.bottomFrozenRowCount) {\n heightRange = this.rowHeightsMap.getSumInRange(endRow, this.rowCount - 1);\n } else {\n heightRange = this.rowHeightsMap.getSumInRange(this.frozenRowCount, endRow);\n }\n heightRange = Number(heightRange.toFixed(2)); // avoid precision problem\n // if heightRange number is int\n if (Number.isInteger(heightRange)) {\n return Math.ceil(tempH);\n }\n return Math.floor(tempH);\n }\n h = this.rowHeightsMap.getSumInRange(startRow, endRow);\n }\n if (this.options.customConfig?._disableColumnAndRowSizeRound) {\n // console.log(startRow, endRow, Number(h.toFixed(2)));\n // return Number(h.toFixed(2));\n return h;\n }\n return Math.round(h);\n }\n /**\n * @description: 获取 containerFit 模式下的指定范围的总列宽/行高\n * @param {number} start\n * @param {number} end\n * @param {number} totalSize 总列宽/行高\n * @return {*}\n */\n _getRangeSizeForContainerFit(start: number, end: number, totalSize: number, type: 'col' | 'row' = 'col') {\n if (!isFinite(start) || !isFinite(end)) {\n return totalSize;\n }\n const keyMap: {\n /** 目标范围总数量 */\n totalCount: 'colCount' | 'rowCount';\n /** 冻结数量 */\n frozenCount: 'rightFrozenColCount' | 'bottomFrozenRowCount';\n /** 自适应类型 */\n fitType: 'width' | 'height';\n /** 表格尺寸 */\n tableSize: 'tableNoFrameWidth' | 'tableNoFrameHeight';\n /** 获取单个行/列尺寸的方法 */\n getSize: 'getColWidth' | 'getRowHeight';\n } =\n type === 'col'\n ? {\n totalCount: 'colCount',\n frozenCount: 'rightFrozenColCount',\n fitType: 'width',\n tableSize: 'tableNoFrameWidth',\n getSize: 'getColWidth'\n }\n : {\n totalCount: 'rowCount',\n frozenCount: 'bottomFrozenRowCount',\n fitType: 'height',\n tableSize: 'tableNoFrameHeight',\n getSize: 'getRowHeight'\n };\n const tableSize = this[keyMap.tableSize];\n if (totalSize >= tableSize) {\n // 总尺寸已经大于表格尺寸,直接返回\n return totalSize;\n }\n /** 目标冻结开始位置 */\n const frozenStart = this[keyMap.totalCount] - this[keyMap.frozenCount];\n if (!isFinite(this[keyMap.totalCount]) || this[keyMap.frozenCount] <= 0 || frozenStart < 0) {\n // 无效冻结区域跳过\n return totalSize;\n }\n const noIntersecting = start > frozenStart || end < frozenStart || start === end;\n if (noIntersecting || !this.containerFit?.[keyMap.fitType]) {\n // 传入范围不包含 body 和冻结区的交叉区域 或 当前未开启 containerFit,无需处理\n return totalSize;\n }\n\n const first = 0;\n const last = this[keyMap.totalCount] - 1;\n let size = tableSize;\n // 使用表格尺寸减去边缘尺寸\n if (start > first) {\n // 减去传入开始位置以前的尺寸\n for (let i = 0; i < start; i++) {\n size -= this[keyMap.getSize](i);\n if (size <= 0) {\n // 已超出表格尺寸,返回原始尺寸\n return totalSize;\n }\n }\n }\n if (end !== last) {\n // 减去传入结束位置之后的尺寸\n for (let i = end + 1; i <= last; i++) {\n size -= this[keyMap.getSize](i);\n if (size <= 0) {\n // 已超出表格尺寸,返回原始尺寸\n return totalSize;\n }\n }\n }\n return size;\n }\n /**\n * 根据列号获取列宽定义\n * @param {number} col column number\n * @returns {string|number} width definition\n * @private\n */\n getColWidthDefined(col: number): string | number {\n const { layoutMap } = this.internalProps;\n // const ctx = _getInitContext.call(table);\n if (this.widthMode === 'autoWidth') {\n return 'auto';\n }\n const { width } = layoutMap?.getColumnWidthDefined(col) ?? {};\n if (typeof width === 'number' && width <= 0) {\n // adaptive模式下,宽度可能为0\n return 0;\n } else if (width) {\n return width;\n }\n return this.getDefaultColumnWidth(col);\n // } else if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n // if (this.isPivotTable()) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // }\n // return this.defaultColWidth;\n // }\n // return this.defaultColWidth;\n }\n\n // setColWidthDefined(col: number, width: number) {\n // const { layoutMap } = this.internalProps;\n // const widthData = layoutMap?.getColumnWidthDefined(col) ?? {};\n // widthData.width = width;\n // }\n\n getColWidthDefinedNumber(col: number): number {\n const width = this.getColWidthDefined(col);\n return this._adjustColWidth(col, this._colWidthDefineToPxWidth(width));\n }\n /** 判断某行是否应该计算行高 */\n isAutoRowHeight(row?: number): boolean {\n if (this.heightMode === 'autoHeight') {\n return true;\n } else if (this.options.customComputeRowHeight) {\n return true;\n } else if (this.internalProps.rowHeightConfig) {\n return true;\n } else if (row >= 0 && row < this.columnHeaderLevelCount) {\n return this.getDefaultRowHeight(row) === 'auto';\n }\n // return false;\n return this.internalProps.defaultRowHeight === 'auto';\n }\n /**\n * 根据列号获取列宽定义\n * @param {number} col column number\n * @returns {string|number} width definition\n * @private\n */\n // getColWidthDefine(col: number): string | number {\n // const width = this.colWidthsMap.get(col);\n // if (typeof width === 'number' && width <= 0) {\n // // adaptive模式下,宽度可能为0\n // return 0;\n // } else if (width) {\n // return width;\n // } else if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // }\n // return this.defaultColWidth;\n // }\n\n /**\n * 根据列号 获取该列宽度\n * @param {number} col column index\n * @return {number} column width\n */\n getColWidth(col: number): number {\n // const width = this.getColWidthDefine(col);\n const width = this.colWidthsMap.get(col) ?? this.getDefaultColumnWidth(col);\n if (\n (this.widthMode === 'adaptive' && typeof width === 'number') ||\n ((this as any).transpose && typeof width === 'number')\n ) {\n // adaptive模式下,colWidthsMap存储的都是像素数值,此时max min配置失效,直接返回像素值\n // transpose模式下,不受原有列max min配置影响,直接返回像素值\n return this._colWidthDefineToPxWidth(width);\n }\n return this._adjustColWidth(col, this._colWidthDefineToPxWidth(width));\n }\n /**\n * 设置某一行的高度\n * @param row\n * @returns\n */\n _setColWidth(col: number, width: string | number, clearCache?: boolean, skipCheckFrozen?: boolean): void {\n this.colWidthsMap.put(\n col,\n // typeof width === 'number' ? (this.options.customConfig?._disableColumnAndRowSizeRound ? width : Math.round(width)) : width\n typeof width === 'number' ? Math.round(width) : width\n );\n // 清楚影响缓存\n if (clearCache) {\n this._clearColRangeWidthsMap(col);\n }\n\n // 检查冻结情况\n if (!skipCheckFrozen) {\n this.stateManager.checkFrozen();\n }\n }\n\n setColWidth(col: number, width: number) {\n this.scenegraph.setColWidth(col, width);\n this.scenegraph.updateChartSizeForResizeColWidth(col);\n this.internalProps._widthResizedColMap.add(col); // add resize tag\n }\n\n /**\n * 清空含有指定col的缓存\n * @param col\n */\n _clearColRangeWidthsMap(col?: number): void {\n if (typeof col !== 'number') {\n this._colRangeWidthsMap.clear();\n } else {\n const keys = this._colRangeWidthsMap.keys();\n for (const key of keys) {\n const reg = rangeReg.exec(key);\n if (reg) {\n const start = Number(reg[1]);\n const end = Number(reg[2]);\n if (col >= start && col <= end) {\n this._colRangeWidthsMap.delete(key);\n }\n }\n }\n }\n }\n /**\n * 清空含有指定row的缓存\n * @param row\n */\n _clearRowRangeHeightsMap(row?: number): void {\n this.rowHeightsMap.clearRange();\n // if (typeof row !== 'number') {\n // this._rowRangeHeightsMap.clear();\n // } else {\n // const keys = this._rowRangeHeightsMap.keys();\n // for (const key of keys) {\n // const reg = rangeReg.exec(key);\n // if (reg) {\n // const start = Number(reg[1]);\n // const end = Number(reg[2]);\n // if (row >= start && row <= end) {\n // this._rowRangeHeightsMap.delete(key);\n // }\n // }\n // }\n // }\n }\n /**\n * 获取某一列内容的宽度 不关乎该列列宽值有多少\n * @param col\n * @returns\n */\n _getColContentWidth(col: number): number {\n return Number(this.colContentWidthsMap.get(col));\n }\n _setColContentWidth(col: number, width: string | number): void {\n this.colContentWidthsMap.put(col, width);\n }\n /**\n * 获取所有列的总高度\n * @returns\n */\n getAllRowsHeight(): number {\n if (!this.internalProps?.rowCount || this.internalProps.rowCount <= 0) {\n return 0;\n }\n const h = this.getRowsHeight(0, this.internalProps.rowCount - 1);\n return h;\n }\n /**\n * 获取所有行的总宽度\n * @returns\n */\n getAllColsWidth(): number {\n if (!this.internalProps?.colCount || this.internalProps.colCount <= 0) {\n return 0;\n }\n const w = this.getColsWidth(0, this.internalProps.colCount - 1);\n return w;\n }\n\n /**\n * 获取所有表列的宽度的数组\n * @returns {number[]} 宽度列表\n */\n getColsWidths(): number[] {\n const maxCount = this.colCount;\n const widths: number[] = [];\n\n for (let col = 0; col < maxCount; col++) {\n widths.push(this.getColWidth(col));\n }\n\n return widths;\n }\n\n /**\n * 根据列号 获取列宽最大值\n * @param {number} col column index\n * @return {number} column max width\n */\n getMaxColWidth(col: number): number {\n const obj = this.colWidthsLimit[col];\n let max = (obj && obj.max) ?? Infinity;\n if (typeof max === 'string') {\n max = _toPxWidth(this, max);\n }\n return max;\n }\n /**\n * 根据列号 设置列宽最大值\n * @param {number} col column index\n * @param {number} maxwidth column max width\n * @return {void}\n */\n setMaxColWidth(col: number, maxwidth: string | number): void {\n const obj = this.colWidthsLimit[col] || (this.colWidthsLimit[col] = {});\n obj.max = maxwidth;\n }\n /**\n * 根据列号 获取列宽最小值\n * @param {number} col column index\n * @return {number} column min width\n */\n getMinColWidth(col: number): number {\n const obj = this.colWidthsLimit[col];\n let min = (obj && obj.min) ?? 0;\n if (typeof min === 'string') {\n min = _toPxWidth(this, min);\n }\n return min;\n }\n /**\n * 根据列号 设置列宽最小值\n * @param {number} col column index\n * @param {number} minwidth column min width\n * @return {void}\n */\n setMinColWidth(col: number, minwidth: string | number): void {\n const obj = this.colWidthsLimit[col] || (this.colWidthsLimit[col] = {});\n obj.min = minwidth;\n }\n /**\n * 获取单元格的范围 返回值为Rect类型。不考虑是否为合并单元格的情况,坐标从0开始\n * @param {number} col column index\n * @param {number} row row index\n * @returns {Rect}\n */\n getCellRect(col: number, row: number): Rect {\n const isFrozenCell = this.isFrozenCell(col, row);\n\n let absoluteLeft;\n const width = this.getColWidth(col);\n if (isFrozenCell && isFrozenCell.col) {\n if (this.isRightFrozenColumn(col, row)) {\n if (this.getAllColsWidth() <= this.tableNoFrameWidth) {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n } else {\n absoluteLeft = this.tableNoFrameWidth - (this.getColsWidth(col, this.colCount - 1) ?? 0);\n }\n } else {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n // absoluteLeft += this.scrollLeft;\n }\n } else {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n }\n\n let absoluteTop;\n const height = this.getRowHeight(row);\n if (isFrozenCell && isFrozenCell.row) {\n if (this.isBottomFrozenRow(col, row)) {\n if (this.getAllRowsHeight() <= this.tableNoFrameHeight) {\n absoluteTop = this.getRowsHeight(0, row - 1);\n } else {\n absoluteTop = this.tableNoFrameHeight - (this.getRowsHeight(row, this.rowCount - 1) ?? 0);\n }\n } else {\n absoluteTop = this.getRowsHeight(0, row - 1);\n // absoluteTop += this.scrollTop;\n }\n } else {\n absoluteTop = this.getRowsHeight(0, row - 1);\n }\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取指定单元格【按合并后的区域】的rect 整表坐标系中(即相对于单元格[0,0]左上角来算的)\n * @param col\n * @param row\n * @returns\n */\n getMergeCellRect(col: number, row: number): Rect {\n const cellRange = this.getCellRange(col, row);\n const absoluteLeft = this.getColsWidth(0, cellRange.start.col - 1) || 0; // startCol为0时,absoluteLeft计算为Nan\n const width = this.getColsWidth(cellRange.start.col, cellRange.end.col);\n const absoluteTop = this.getRowsHeight(0, cellRange.start.row - 1) || 0;\n const height = this.getRowsHeight(cellRange.start.row, cellRange.end.row);\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取的位置是相对表格显示界面的左上角 情况滚动情况 如单元格已经滚出表格上方 则这个单元格的y将为负值\n * @param {number} col index of column, of the cell\n * @param {number} row index of row, of the cell\n * @returns {Rect} the rect of the cell.\n */\n getCellRelativeRect(col: number, row: number): Rect {\n const isFrozenCell = this.isFrozenCell(col, row);\n let relativeX = true;\n let relativeY = true;\n if (isFrozenCell?.col && isFrozenCell?.row) {\n relativeX = false;\n relativeY = false;\n } else if (isFrozenCell?.col) {\n relativeX = false;\n } else if (isFrozenCell?.row) {\n relativeY = false;\n }\n const cellRect = this.getCellRect(col, row);\n return this._toRelativeRect(cellRect, relativeX, relativeY);\n }\n /**\n * 获取的位置是相对表格显示界面的左上角\n * @param {number} range :CellRange | CellAddress 类型 可以传入单元格范围或者具体某个单元格 返回值是包括合并单元格的较大区域\n * @returns {Rect}\n */\n getCellRangeRelativeRect(range: CellRange | CellAddress): Rect {\n if ((<CellRange>range).start) {\n const isFrozenCell = this.isFrozenCell((<CellRange>range).start.col, (<CellRange>range).start.row);\n let relativeX = true;\n let relativeY = true;\n if (isFrozenCell?.col && isFrozenCell?.row) {\n relativeX = false;\n relativeY = false;\n } else if (isFrozenCell?.col) {\n relativeX = false;\n } else if (isFrozenCell?.row) {\n relativeY = false;\n }\n return this._toRelativeRect(\n this.getCellsRect(\n (<CellRange>range).start.col,\n (<CellRange>range).start.row,\n (<CellRange>range).end.col,\n (<CellRange>range).end.row\n ),\n relativeX,\n relativeY\n );\n }\n const cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n const isFrozenCell = this.isFrozenCell((<CellAddress>range).col, (<CellAddress>range).row);\n let relativeX = true;\n let relativeY = true;\n if (isFrozenCell?.col && isFrozenCell?.row) {\n relativeX = false;\n relativeY = false;\n } else if (isFrozenCell?.col) {\n relativeX = false;\n } else if (isFrozenCell?.row) {\n relativeY = false;\n }\n return this._toRelativeRect(\n this.getCellsRect(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row),\n relativeX,\n relativeY\n );\n }\n /**\n * 即仅视觉看到的位置 获取的位置是相对表格显示界面的左上角\n * @param {number} range :CellRange | CellAddress 类型\n * @returns {Rect} the visiable rect of the cell.可见矩形部分\n */\n getVisibleCellRangeRelativeRect(range: CellRange | CellAddress): Rect {\n let cellRange: CellRange;\n if ((<CellRange>range).start) {\n cellRange = <CellRange>range;\n } else {\n cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n }\n return this._getVisiableRect(this.getCellRangeRelativeRect(range), cellRange);\n }\n /**\n * 调整relativeRectObj 计算可见部分的rect\n * @param relativeRectObj\n * @returns\n */\n _getVisiableRect(relativeRectObj: Rect, cellRange: CellRange): Rect {\n const targetLeft =\n cellRange.start.col >= this.frozenColCount\n ? Math.max(relativeRectObj.left, this.frozenColCount >= 1 ? this.getColsWidth(0, this.frozenColCount - 1) : 0)\n : relativeRectObj.left;\n const targetRight = Math.min(relativeRectObj.right, this.tableNoFrameWidth);\n const rect = relativeRectObj.copy();\n rect.left = targetLeft;\n rect.right = targetRight;\n\n const targetTop =\n cellRange.start.row >= this.frozenRowCount\n ? Math.max(relativeRectObj.top, this.frozenRowCount >= 1 ? this.getRowsHeight(0, this.frozenRowCount - 1) : 0)\n : relativeRectObj.top;\n const targetBottom = Math.min(relativeRectObj.bottom, this.tableNoFrameHeight);\n rect.top = targetTop;\n rect.bottom = targetBottom;\n return rect;\n }\n /**\n * 获取指定行列区域的Rect\n * @param {number} startCol\n * @param {number} startRow\n * @param {number} endCol\n * @param {number} endRow\n * @returns {Rect}\n */\n getCellsRect(startCol: number, startRow: number, endCol: number, endRow: number): Rect {\n let absoluteLeft = this.getColsWidth(0, startCol - 1) || 0; // startCol为0时,absoluteLeft计算为Nan\n let width = this.getColsWidth(startCol, endCol);\n const scrollLeft = this.scrollLeft;\n\n const tableWidth = Math.min(this.tableNoFrameWidth, this.getAllColsWidth());\n const tableHeight = Math.min(this.tableNoFrameHeight, this.getAllRowsHeight());\n if (this.isLeftFrozenColumn(startCol) && this.isRightFrozenColumn(endCol)) {\n width = this.tableNoFrameWidth - (this.getColsWidth(startCol + 1, this.colCount - 1) ?? 0) - absoluteLeft;\n // width =\n // this.tableNoFrameWidth -\n // (this.getColsWidth(0, startCol - 1) ?? 0) -\n // (this.getColsWidth(endCol + 1, this.colCount - 1) ?? 0);\n } else if (this.isLeftFrozenColumn(startCol) && !this.isLeftFrozenColumn(endCol)) {\n width = Math.max(width - scrollLeft, this.getColsWidth(startCol, this.frozenColCount - 1));\n } else if (!this.isRightFrozenColumn(startCol) && this.isRightFrozenColumn(endCol)) {\n absoluteLeft = Math.min(absoluteLeft - scrollLeft, tableWidth - this.getRightFrozenColsWidth());\n width = tableWidth - (this.getColsWidth(startCol + 1, this.colCount - 1) ?? 0) - absoluteLeft;\n } else if (this.isRightFrozenColumn(startCol)) {\n absoluteLeft = tableWidth - (this.getColsWidth(startCol, this.colCount - 1) ?? 0);\n } else {\n // 范围全部在整体一块区域 如都在右侧冻结区域 都可以走这块逻辑\n // do nothing\n }\n\n let absoluteTop = this.getRowsHeight(0, startRow - 1);\n let height = this.getRowsHeight(startRow, endRow);\n const scrollTop = this.scrollTop;\n if (this.isTopFrozenRow(startRow) && this.isBottomFrozenRow(endRow)) {\n height = this.tableNoFrameHeight - (this.getRowsHeight(startRow + 1, this.rowCount - 1) ?? 0) - absoluteTop;\n // height =\n // this.tableNoFrameHeight -\n // (this.getRowsHeight(0, startRow - 1) ?? 0) -\n // (this.getRowsHeight(endRow + 1, this.rowCount - 1) ?? 0);\n } else if (this.isTopFrozenRow(startRow) && !this.isTopFrozenRow(endRow)) {\n height = Math.max(height - scrollTop, this.getRowsHeight(startRow, this.frozenRowCount - 1));\n } else if (!this.isBottomFrozenRow(startRow) && this.isBottomFrozenRow(endRow)) {\n absoluteTop = Math.min(absoluteTop - scrollTop, tableHeight - this.getBottomFrozenRowsHeight());\n height = tableHeight - (this.getRowsHeight(startRow + 1, this.rowCount - 1) ?? 0) - absoluteTop;\n } else if (this.isBottomFrozenRow(startRow)) {\n absoluteTop = tableHeight - (this.getRowsHeight(startRow, this.rowCount - 1) ?? 0);\n } else {\n // 范围全部在整体一块区域 如都在右侧冻结区域 都可以走这块逻辑\n // do nothing\n }\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取指定区域的宽度\n * @param startCol\n * @param startRow\n * @param endCol\n * @param endRow\n * @returns\n */\n getCellsRectWidth(startCol: number, startRow: number, endCol: number, endRow: number): number {\n const isFrozenStartCell = this.isFrozenCell(startCol, startRow);\n const isFrozenEndCell = this.isFrozenCell(endCol, endRow);\n let width = this.getColsWidth(startCol, endCol);\n if (isFrozenStartCell && isFrozenStartCell.col) {\n const scrollLeft = this.scrollLeft;\n if (!isFrozenEndCell || !isFrozenEndCell.col) {\n width -= scrollLeft;\n width = Math.max(width, this.getColsWidth(startCol, this.frozenColCount - 1));\n }\n }\n return width;\n }\n /**\n * 获取行列范围range或者某个单元格所做合并大的范围range的rect范围\n * @param range\n * @returns\n */\n getCellRangeRect(range: CellRange | CellAddress): Rect {\n if ((<CellRange>range).start) {\n return this.getCellsRect(\n (<CellRange>range).start.col,\n (<CellRange>range).start.row,\n (<CellRange>range).end.col,\n (<CellRange>range).end.row\n );\n }\n const cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n return this.getCellsRect(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row);\n }\n /**\n * 获取行列范围range或者某个单元格所做合并大的范围range的宽度\n * @param range\n * @returns\n */\n getCellRangeRectWidth(range: CellRange | CellAddress): number {\n if ((<CellRange>range).start) {\n return this.getCellsRectWidth(\n (<CellRange>range).start.col,\n (<CellRange>range).start.row,\n (<CellRange>range).end.col,\n (<CellRange>range).end.row\n );\n }\n const cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n return this.getCellsRectWidth(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row);\n }\n /** 判断某个单元格个是否在冻结行或冻结列中 */\n isFrozenCell(\n col: number,\n row: number\n ): {\n row: boolean;\n col: boolean;\n } | null {\n const isFrozenRow = this.isFrozenRow(row);\n const isFrozenCol = this.isFrozenColumn(col);\n if (isFrozenRow || isFrozenCol) {\n return {\n row: isFrozenRow,\n col: isFrozenCol\n };\n }\n return null;\n }\n /**\n * 根据y值计算所在行\n * @param absoluteY\n * @returns\n */\n getRowAt(absoluteY: number): { top: number; row: number; bottom: number; height: number } {\n return getRowAt(absoluteY, this);\n }\n /**\n * 根据x值计算所在列\n * @param absoluteX\n * @returns\n */\n getColAt(absoluteX: number): { left: number; col: number; right: number; width: number } {\n return getColAt(absoluteX, this);\n }\n /**\n * 根据坐标值获取行列位置,index和rect范围\n * @param absoluteX\n * @param absoluteY\n * @returns\n */\n getCellAt(absoluteX: number, absoluteY: number): CellAddressWithBound {\n return getCellAt(absoluteX, absoluteY, this);\n }\n\n /**\n * 获取屏幕坐标对应的单元格信息,考虑滚动\n * @param this\n * @param relativeX 左边x值,相对于容器左上角,已考虑格滚动情况\n * @param relativeY 左边y值,相对于容器左上角,已考虑格滚动情况\n * @returns\n */\n getCellAtRelativePosition(relativeX: number, relativeY: number): CellAddressWithBound {\n return getCellAtRelativePosition(relativeX, relativeY, this);\n }\n getColAtRelativePosition(relativeX: number): number {\n return getColAtRelativePosition(relativeX, this);\n }\n getRowAtRelativePosition(relativeY: number): number {\n return getRowAtRelativePosition(relativeY, this);\n }\n /**\n * 检查行列号是否正确\n * @param col\n * @param row\n * @returns\n */\n _checkRowCol(col: number, row: number) {\n if (col >= 0 && col < this.colCount && row >= 0 && row < this.rowCount) {\n return true;\n }\n return false;\n }\n /**\n * 指定的行列如果在可视范围内,则不进行逻辑处理;如果不在可视范围需要滚动一定距离能将其显示出来\n * @param {number} col The column index.\n * @param {number} row The row index\n * @return {void}\n */\n _makeVisibleCell(col: number, row: number): void {\n if (this._checkRowCol(col, row)) {\n const isFrozenCell = this.isFrozenCell(col, row);\n if (isFrozenCell && isFrozenCell.col && isFrozenCell.row) {\n return;\n }\n const rect = this.getCellRect(col, row);\n const visibleRect = _getScrollableVisibleRect(this);\n if (visibleRect.contains(rect)) {\n return;\n }\n if (!isFrozenCell || !isFrozenCell.col) {\n if (this.getColsWidth(0, this.frozenColCount - 1) + rect.width > this.canvas.width) {\n // do nothing\n // 防止点击左右跳动\n } else if (rect.left < visibleRect.left) {\n this.scrollLeft -= visibleRect.left - rect.left;\n } else if (visibleRect.right < rect.right) {\n this.scrollLeft -= visibleRect.right - rect.right;\n }\n }\n if (!isFrozenCell || !isFrozenCell.row) {\n if (this.getRowsHeight(0, this.frozenRowCount - 1) + rect.height > this.canvas.height) {\n // do nothing\n } else if (rect.top < visibleRect.top) {\n this.scrollTop -= visibleRect.top - rect.top;\n } else if (visibleRect.bottom < rect.bottom) {\n this.scrollTop -= visibleRect.bottom - rect.bottom;\n }\n }\n }\n }\n\n /**\n * 重绘表格(同步绘制)\n */\n render(): void {\n this.scenegraph.renderSceneGraph();\n }\n /**\n * 异步重绘表格\n */\n renderAsync(): Promise<void> {\n this.scenegraph.updateNextFrame();\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve();\n }, 0);\n });\n }\n /**\n * 转换成视觉相对table左上角的坐标 如滚动超出表格上方 y将为负值\n * @param absoluteRect\n * @returns\n */\n _toRelativeRect(absoluteRect: Rect, relativeX: boolean = true, relativeY: boolean = true): Rect {\n const rect = absoluteRect.copy();\n const visibleRect = this.getVisibleRect();\n rect.offsetLeft(this.tableX - (relativeX ? visibleRect.left : 0));\n rect.offsetTop(this.tableY - (relativeY ? visibleRect.top : 0));\n rect.offsetLeft(this.options.viewBox?.x1 ?? 0);\n rect.offsetTop(this.options.viewBox?.y1 ?? 0);\n return rect;\n }\n\n /**\n * 想象一张可以任意大的表格,呈现在我们眼前的只是其中一部分,那这个部分怎么来描述。\n * 如有滚动情况 scrollLeft为100,也就是往右滚动了100(左侧隐藏100)。_getVisibleRect获取到的Rect{_left: 100, _top: 0, _width: 1460, _height: 685}\n * @param table\n * @returns\n */\n getVisibleRect(): Rect {\n const { scrollTop, scrollLeft } = this;\n const width = this.tableNoFrameWidth;\n const height = this.tableNoFrameHeight;\n return new Rect(scrollLeft, scrollTop, width, height);\n }\n /**\n * 获取网格中完全可见的可滚动行数。不包括表头及冻结的行\n * @returns {number}\n */\n get visibleRowCount(): number {\n const { frozenRowCount } = this;\n const visibleRect = this.getVisibleRect();\n const visibleTop =\n frozenRowCount > 0 ? visibleRect.top + this.getRowsHeight(0, frozenRowCount - 1) : visibleRect.top;\n\n const initRow = this.getTargetRowAt(visibleTop);\n if (!initRow) {\n return 0;\n }\n const startRow = Math.max(initRow.top >= visibleTop ? initRow.row : initRow.row + 1, frozenRowCount);\n let absoluteTop = this.getRowsHeight(0, startRow - 1);\n let count = 0;\n const { rowCount } = this;\n for (let row = startRow; row < rowCount; row++) {\n const height = this.getRowHeight(row);\n const bottom = absoluteTop + height;\n if (visibleRect.bottom < bottom) {\n break;\n }\n count++;\n absoluteTop = bottom;\n }\n return count;\n }\n /** 获取表格body部分的显示单元格范围 */\n getBodyVisibleCellRange() {\n const { scrollTop, scrollLeft } = this;\n const frozenRowsHeight = this.getFrozenRowsHeight();\n const frozenColsWidth = this.getFrozenColsWidth();\n const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();\n const rightFrozenColsWidth = this.getRightFrozenColsWidth();\n // 计算非冻结\n const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1);\n const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1);\n const rowEnd =\n this.getAllRowsHeight() > this.tableNoFrameHeight\n ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight).row\n : this.rowCount - 1;\n const colEnd =\n this.getAllColsWidth() > this.tableNoFrameWidth\n ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth).col\n : this.colCount - 1;\n if (colEnd < 0 || rowEnd < 0) {\n return null;\n }\n return { rowStart, colStart, rowEnd, colEnd };\n }\n /**\n * 获取表格body部分的显示行号范围\n * @param start_deltaY 相对于表格body部分的顶部偏移量(不设置默认是可视区域的最边缘)\n * @param end_deltaY 相对于表格body部分的底部偏移量(不设置默认是可视区域的最边缘)\n * @returns { rowStart: number; rowEnd: number }\n */\n getBodyVisibleRowRange(start_deltaY: number = 0, end_deltaY: number = 0) {\n const { scrollTop } = this;\n const frozenRowsHeight = this.getFrozenRowsHeight();\n const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();\n // 计算非冻结\n const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1 + start_deltaY);\n const rowEnd =\n this.getAllRowsHeight() > this.tableNoFrameHeight\n ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight + end_deltaY).row\n : this.rowCount - 1;\n if (rowEnd < 0) {\n return null;\n }\n return { rowStart, rowEnd };\n }\n /**\n * 获取表格body部分的显示列号范围\n * @param start_deltaX 相对于表格body部分的左侧偏移量(不设置默认是可视区域的最边缘)\n * @param end_deltaX 相对于表格body部分的右侧偏移量(不设置默认是可视区域的最边缘)\n * @returns { colStart: number; colEnd: number }\n */\n getBodyVisibleColRange(start_deltaX: number = 0, end_deltaX: number = 0) {\n const { scrollLeft } = this;\n const frozenColsWidth = this.getFrozenColsWidth();\n const rightFrozenColsWidth = this.getRightFrozenColsWidth();\n // 计算非冻结\n const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1 + start_deltaX);\n\n const colEnd =\n this.getAllColsWidth() > this.tableNoFrameWidth\n ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth + end_deltaX).col\n : this.colCount - 1;\n if (colEnd < 0) {\n return null;\n }\n return { colStart, colEnd };\n }\n /**\n * 获取表格中完全可见的可滚动列数。不包括表头及冻结的列\n * @returns {number}\n */\n get visibleColCount(): number {\n const { frozenColCount } = this;\n const visibleRect = this.getVisibleRect();\n const visibleLeft =\n frozenColCount > 0 ? visibleRect.left + this.getColsWidth(0, frozenColCount - 1) : visibleRect.left;\n\n const initCol = this.getTargetColAt(visibleLeft);\n if (!initCol) {\n return 0;\n }\n const startCol = Math.max(initCol.left >= visibleLeft ? initCol.col : initCol.col + 1, frozenColCount);\n let absoluteLeft = this.getColsWidth(0, startCol - 1);\n let count = 0;\n const { colCount } = this;\n for (let col = startCol; col < colCount; col++) {\n const width = this.getColWidth(col);\n const right = absoluteLeft + width;\n if (visibleRect.right < right) {\n break;\n }\n count++;\n absoluteLeft = right;\n }\n return count;\n }\n\n get scrollTop(): number {\n return this.stateManager.scroll.verticalBarPos;\n }\n set scrollTop(scrollTop: number) {\n this.stateManager.setScrollTop(scrollTop);\n }\n\n get scrollLeft(): number {\n return this.stateManager.scroll.horizontalBarPos;\n }\n set scrollLeft(scrollLeft: number) {\n this.stateManager.setScrollLeft(scrollLeft);\n }\n\n getScrollLeft() {\n return this.scrollLeft;\n }\n getScrollTop() {\n return this.scrollTop;\n }\n setScrollLeft(num: number) {\n this.scrollLeft = Math.ceil(num);\n }\n setScrollTop(num: number) {\n this.scrollTop = Math.ceil(num);\n }\n /**\n * 获取有省略文字的的单元格文本内容\n * cellTextOverflows存储了无法显示全文本的value,供toolTip使用\n * @param {number} col column index.\n * @param {number} row row index\n * @return {string | null}\n */\n getCellOverflowText(col: number, row: number): string | null {\n return this.scenegraph.getCellOverflowText(col, row);\n }\n /**\n * 添加析构逻辑\n * @param releaseObj\n */\n addReleaseObj(releaseObj: { release: () => void }): void {\n if (!releaseObj || !releaseObj.release || typeof releaseObj.release !== 'function') {\n throw new Error('not releaseObj!');\n }\n const releaseList = (this.internalProps.releaseList = this.internalProps.releaseList || []);\n releaseList.push(releaseObj);\n }\n private dispose() {\n this.release();\n }\n /**\n * Dispose the table instance.\n * @returns {void}\n */\n release(): void {\n const internalProps = this.internalProps;\n if (this.isReleased) {\n return;\n }\n internalProps.tooltipHandler?.release?.();\n internalProps.menuHandler?.release?.();\n\n super.release?.();\n this.pluginManager.release();\n internalProps.handler?.release?.();\n // internalProps.scrollable?.release?.();\n this.eventManager.release();\n internalProps.focusControl?.release?.();\n internalProps.legends?.forEach(legend => {\n legend?.release();\n });\n internalProps.title?.release();\n internalProps.title = null;\n internalProps.emptyTip?.release();\n internalProps.emptyTip = null;\n internalProps.layoutMap.release();\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n\n this.scenegraph.stage.release();\n this.scenegraph.proxy.release();\n\n const parentElement = internalProps.element?.parentElement;\n if (parentElement && !this.options.canvas) {\n parentElement.removeChild(internalProps.element);\n }\n (this as any).editorManager?.editingEditor?.onEnd?.();\n this.isReleased = true;\n this.scenegraph = null;\n this.internalProps = null;\n\n this.reactCustomLayout?.clearCache();\n\n clearChartRenderQueue();\n }\n\n fireListeners<TYPE extends keyof TableEventHandlersEventArgumentMap>(\n type: TYPE,\n event: TableEventHandlersEventArgumentMap[TYPE]\n ): TableEventHandlersReturnMap[TYPE][] {\n return super.fireListeners(type, event);\n }\n\n /**\n * 更新options 目前只支持全量更新\n * @param options\n */\n updateOption(\n options: BaseTableConstructorOptions,\n updateConfig: { clearColWidthCache?: boolean; clearRowHeightCache?: boolean } = {\n clearColWidthCache: true,\n clearRowHeightCache: true\n }\n ) {\n this.fireListeners(TABLE_EVENT_TYPE.BEFORE_UPDATE_OPTION, { options, container: this.container });\n this.editorManager?.cancelEdit();\n (this.options as BaseTable['options']) = options;\n this._hasAutoImageColumn = undefined;\n const {\n // rowCount = 0,\n // colCount = 0,\n frozenColCount = 0,\n unfreezeAllOnExceedsMaxWidth,\n // frozenRowCount = 0,\n defaultRowHeight = 40,\n defaultHeaderRowHeight,\n defaultColWidth = 80,\n defaultHeaderColWidth = 80,\n keyboardOptions,\n eventOptions,\n rowSeriesNumber,\n enableCheckboxCascade,\n enableHeaderCheckboxCascade,\n // columnSeriesNumber,\n // disableRowHeaderColumnResize,\n columnResizeMode,\n rowResizeMode = 'none',\n resize,\n dragHeaderMode,\n dragOrder,\n // scrollBar,\n showFrozenIcon,\n allowFrozenColCount,\n padding,\n hover,\n menu,\n select: click,\n pixelRatio,\n widthMode,\n heightMode,\n autoFillWidth,\n autoFillHeight,\n containerFit,\n widthAdaptiveMode,\n heightAdaptiveMode,\n customRender,\n renderChartAsync,\n renderChartAsyncBatchCount,\n canvasWidth,\n canvasHeight,\n contentOffsetX: translateX = 0,\n contentOffsetY: translateY = 0,\n overscrollBehavior,\n limitMinWidth,\n limitMinHeight\n } = options;\n const { groupConfig, groupBy, groupTitleFieldFormat, groupTitleCustomLayout, enableTreeStickCell } =\n options as ListTableConstructorOptions;\n if (pixelRatio && pixelRatio !== this.internalProps.pixelRatio) {\n this.internalProps.pixelRatio = pixelRatio;\n }\n // 更新padding\n if (padding) {\n if (typeof padding === 'number') {\n this.padding.top = padding;\n this.padding.left = padding;\n this.padding.bottom = padding;\n this.padding.right = padding;\n } else {\n padding.top && (this.padding.top = padding.top);\n padding.bottom && (this.padding.bottom = padding.bottom);\n padding.left && (this.padding.left = padding.left);\n padding.right && (this.padding.right = padding.right);\n }\n }\n this.showFrozenIcon = typeof showFrozenIcon === 'boolean' ? showFrozenIcon : true;\n if (typeof allowFrozenColCount === 'number' && allowFrozenColCount <= 0) {\n this.showFrozenIcon = false;\n }\n\n this.widthMode = widthMode ?? 'standard';\n this.heightMode = heightMode ?? 'standard';\n this._widthAdaptiveMode = widthAdaptiveMode ?? 'only-body';\n this._heightAdaptiveMode = heightAdaptiveMode ?? 'only-body';\n this.autoFillWidth = autoFillWidth ?? false;\n this.autoFillHeight = autoFillHeight ?? false;\n // 处理containerFit配置\n if (containerFit !== undefined) {\n if (typeof containerFit === 'boolean') {\n this._containerFit = { width: containerFit, height: containerFit };\n } else if (containerFit && typeof containerFit === 'object') {\n this._containerFit = {\n width: containerFit.width ?? true,\n height: containerFit.height ?? true\n };\n } else {\n this._containerFit = { width: false, height: false };\n }\n }\n this.customRender = customRender;\n this.contentOffsetX = translateX ?? 0;\n this.contentOffsetY = translateY ?? 0;\n this.canvasWidth = isNumber(canvasWidth) ? canvasWidth : undefined;\n this.canvasHeight = isNumber(canvasHeight) ? canvasHeight : undefined;\n // 更新protectedSpace\n const internalProps: IBaseTableProtected = this.internalProps;\n if (Env.mode !== 'node' && !options.canvas) {\n updateRootElementPadding(internalProps.element, this.padding);\n }\n\n this.columnWidthComputeMode = options.columnWidthComputeMode ?? 'normal';\n\n // internalProps.rowCount = rowCount;\n // internalProps.colCount = colCount;\n internalProps.frozenColCount = frozenColCount;\n internalProps.unfreezeAllOnExceedsMaxWidth = unfreezeAllOnExceedsMaxWidth ?? true;\n // internalProps.frozenRowCount = frozenRowCount;\n internalProps.defaultRowHeight = defaultRowHeight;\n internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight ?? defaultRowHeight;\n internalProps.defaultColWidth = defaultColWidth;\n internalProps.defaultHeaderColWidth = defaultHeaderColWidth ?? defaultColWidth;\n internalProps.keyboardOptions = keyboardOptions;\n internalProps.eventOptions = eventOptions;\n internalProps.rowSeriesNumber = rowSeriesNumber;\n internalProps.enableCheckboxCascade = enableCheckboxCascade ?? rowSeriesNumber?.enableTreeCheckbox ?? true;\n internalProps.enableHeaderCheckboxCascade = enableCheckboxCascade || (enableHeaderCheckboxCascade ?? true);\n // internalProps.columnSeriesNumber = columnSeriesNumber;\n\n internalProps.columnResizeMode = resize?.columnResizeMode ?? columnResizeMode;\n internalProps.canResizeColumn = resize?.canResizeColumn;\n internalProps.rowResizeMode = resize?.rowResizeMode ?? rowResizeMode;\n internalProps.dragHeaderMode = dragOrder?.dragHeaderMode ?? dragHeaderMode ?? 'none';\n internalProps.renderChartAsync = renderChartAsync;\n setBatchRenderChartCount(renderChartAsyncBatchCount);\n internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';\n internalProps.cellTextOverflows = {};\n\n (internalProps as ListTableProtected).groupBy = groupConfig?.groupBy ?? groupBy;\n (internalProps as ListTableProtected).groupTitleCheckbox = groupConfig?.titleCheckbox;\n (internalProps as ListTableProtected).groupTitleFieldFormat =\n groupConfig?.titleFieldFormat ?? groupTitleFieldFormat;\n (internalProps as ListTableProtected).groupTitleCustomLayout =\n groupConfig?.titleCustomLayout ?? groupTitleCustomLayout;\n (internalProps as ListTableProtected).enableTreeStickCell = groupConfig?.enableTreeStickCell ?? enableTreeStickCell;\n\n if (updateConfig?.clearColWidthCache) {\n internalProps._widthResizedColMap.clear();\n this.colWidthsMap = new NumberMap();\n this.colContentWidthsMap = new NumberMap();\n this.colWidthsLimit = {};\n }\n\n if (updateConfig?.clearRowHeightCache) {\n internalProps._heightResizedRowMap.clear();\n internalProps._rowHeightsMap = new NumberRangeMap(this);\n internalProps._rowRangeHeightsMap = new Map();\n internalProps._colRangeWidthsMap = new Map();\n }\n\n internalProps.stick.changedCells.clear();\n\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT);\n internalProps.theme.isPivot = this.isPivotTable();\n setIconColor(internalProps.theme.functionalIconsStyle);\n this.scenegraph.updateStageBackground();\n // this._updateSize();\n //设置是否自动撑开的配置\n // internalProps.autoRowHeight = options.autoRowHeight ?? false;\n //是否统一设置为多行文本\n internalProps.autoWrapText = options.autoWrapText;\n internalProps.enableLineBreak = options.enableLineBreak;\n internalProps.allowFrozenColCount = options.allowFrozenColCount ?? 0;\n internalProps.limitMaxAutoWidth = options.limitMaxAutoWidth ?? 450;\n internalProps.limitMinWidth =\n limitMinWidth !== null && limitMinWidth !== undefined\n ? typeof limitMinWidth === 'number'\n ? limitMinWidth\n : limitMinWidth\n ? 10\n : 0\n : 10;\n internalProps.limitMinHeight =\n limitMinHeight !== null && limitMinHeight !== undefined\n ? typeof limitMinHeight === 'number'\n ? limitMinHeight\n : limitMinHeight\n ? 10\n : 0\n : 10;\n // 生成scenegraph\n // this._vDataSet = new DataSet();\n internalProps.legends?.forEach(legend => {\n legend?.release();\n });\n internalProps.title?.release();\n internalProps.title = null;\n internalProps.emptyTip?.release();\n internalProps.emptyTip = null;\n internalProps.layoutMap.release();\n clearChartRenderQueue();\n this.scenegraph.clearCells();\n this.scenegraph.updateComponent();\n this.stateManager.updateOptionSetState();\n\n this._updateSize();\n // this.stateManager = new StateManager(this);\n // this.eventManager = new EventManager(this);\n this.eventManager.updateEventBinder();\n if (options.legends) {\n internalProps.legends = [];\n const createLegend = Factory.getFunction('createLegend') as CreateLegend;\n if (Array.isArray(options.legends)) {\n for (let i = 0; i < options.legends.length; i++) {\n internalProps.legends.push(createLegend(options.legends[i], this));\n }\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n } else {\n internalProps.legends.push(createLegend(options.legends, this));\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n }\n }\n // if (options.title) {\n // internalProps.title = new Title(options.title, this);\n // this.scenegraph.tableGroup.setAttributes({\n // x: this.tableX,\n // y: this.tableY\n // });\n // }\n internalProps.tooltip = Object.assign(\n {\n parentElement: this.getElement(),\n renderMode: 'html',\n isShowOverflowTextTooltip: false,\n confine: true,\n position: Placement.bottom\n },\n options.tooltip\n );\n if (internalProps.tooltip.renderMode === 'html' && !internalProps.tooltipHandler) {\n const TooltipHandler = Factory.getComponent('tooltipHandler') as ITooltipHandler;\n internalProps.tooltipHandler = new TooltipHandler(this, internalProps.tooltip.confine);\n }\n\n internalProps.menu = Object.assign(\n {\n renderMode: 'html'\n },\n options.menu\n );\n\n Array.isArray(options.menu?.dropDownMenuHighlight) &&\n this.setDropDownMenuHighlight(options.menu?.dropDownMenuHighlight);\n\n // 全局下拉菜单\n (Array.isArray(options.menu?.defaultHeaderMenuItems) ||\n typeof options.menu?.defaultHeaderMenuItems === 'function') &&\n (this.globalDropDownMenu = options.menu.defaultHeaderMenuItems);\n\n if (internalProps.menu.renderMode === 'html' && !internalProps.menuHandler) {\n const MenuHandler = Factory.getComponent('menuHandler') as IMenuHandler;\n internalProps.menuHandler = new MenuHandler(this);\n }\n this.clearCellStyleCache();\n if (updateConfig?.clearColWidthCache) {\n this.clearColWidthCache();\n }\n if (updateConfig?.clearRowHeightCache) {\n this.clearRowHeightCache();\n }\n\n internalProps.customMergeCell = getCustomMergeCellFunc(options.customMergeCell);\n\n this.customCellStylePlugin?.updateCustomCell(\n options.customCellStyle ?? [],\n options.customCellStyleArrangement ?? []\n );\n this._adjustCanvasSizeByOption();\n }\n /**\n * 重新创建场景树并重新渲染\n */\n renderWithRecreateCells() {\n this.internalProps.stick.changedCells.clear();\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.render();\n }\n /**\n * 获取固定行总高\n * @returns\n */\n getFrozenRowsHeight(): number {\n const height = this.getRowsHeight(0, this.frozenRowCount - 1);\n return height;\n }\n /**\n * 获取固定列总宽\n * @returns\n */\n getFrozenColsWidth(): number {\n const w = this.getColsWidth(0, this.frozenColCount - 1);\n return w;\n }\n /**\n * 获取底部冻结固定列总宽\n * @returns\n */\n getBottomFrozenRowsHeight(): number {\n if (this.bottomFrozenRowCount > 0) {\n // const height = this.getRowsHeight(this.rowCount - this.bottomFrozenRowCount, this.rowCount - 1);//替换成下面遍历获取高度,鉴于冻结数量有限。否则这里在初始化的时候ClipBodyGroupBeforeRenderContribution.drawShap就先走了这个计算,导致初始化时间加长,而后续计算行高列宽会清除这个计算结果,浪费了性能\n let height = 0;\n for (let row = this.rowCount - this.bottomFrozenRowCount; row <= this.rowCount - 1; row++) {\n height += this.getRowHeight(row);\n }\n return height;\n }\n return 0;\n }\n /**\n * 获取右侧冻结固定列总宽\n * @returns\n */\n getRightFrozenColsWidth(): number {\n if (this.rightFrozenColCount > 0) {\n // const width = this.getColsWidth(this.colCount - this.rightFrozenColCount, this.colCount - 1); // 同getBottomFrozenRowsHeight的原因\n let width = 0;\n for (let col = this.colCount - this.rightFrozenColCount; col <= this.colCount - 1; col++) {\n width += this.getColWidth(col);\n }\n return width;\n }\n return 0;\n }\n /**\n * 获取实际绘制范围的宽高,而非可绘制画布大小\n * @param table\n * @returns\n */\n getDrawRange(): Rect {\n //考虑表格整体边框的问题\n // const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n // const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n const width = this.containerFit?.width\n ? this.tableNoFrameWidth\n : Math.min(this.tableNoFrameWidth, this.getAllColsWidth());\n const height = this.containerFit?.height\n ? this.tableNoFrameHeight\n : Math.min(this.tableNoFrameHeight, this.getAllRowsHeight());\n // Math.max(lineWidths[3] ?? 0, shadowWidths[3] ?? 0),\n // Math.max(lineWidths[1] ?? 0, shadowWidths[1] ?? 0),\n return new Rect(this.tableX, this.tableY, width, height);\n }\n\n /** @private 将鼠标坐标值 转换成表格坐标系中的坐标位置\n * isAddScroll默认为true 返回的xy 加上了scrollX和scrollY。如滚动后通过该方法计算出的坐标值是未滚动时的坐标\n */\n _getMouseAbstractPoint(evt: TouchEvent | MouseEvent | undefined): { x: number; y: number; inTable: boolean } {\n const table = this;\n let e: MouseEvent | Touch;\n if (!evt) {\n return { inTable: false, x: undefined, y: undefined };\n }\n if (isTouchEvent(evt)) {\n e = evt.changedTouches[0];\n } else {\n e = evt;\n }\n const clientX = e.clientX || e.pageX + window.scrollX;\n const clientY = e.clientY || e.pageY + window.scrollY;\n const rect = table.internalProps.canvas.getBoundingClientRect();\n let inTable = true;\n if (rect.right <= clientX) {\n inTable = false;\n }\n if (rect.bottom <= clientY) {\n inTable = false;\n }\n\n const currentWidth = rect.width;\n // 考虑旋转情况下宽高值和rect的宽高是相反的\n const originWidth = (this.rotateDegree === 90 ? this.canvas.offsetHeight : this.canvas.offsetWidth) || currentWidth;\n const widthRatio = currentWidth / originWidth;\n\n const currentHeight = rect.height;\n // 考虑旋转情况下宽高值和rect的宽高是相反的\n const originHeight =\n (this.rotateDegree === 90 ? this.canvas.offsetWidth : this.canvas.offsetHeight) || currentHeight;\n const heightRatio = currentHeight / originHeight;\n //接下来和rotateTablePlugin插件逻辑有点耦合了 需要借助旋转插件的矩阵来计算相对于表格的坐标\n const rotateTablePlugin = this.pluginManager.getPluginByName('Rotate Table');\n if (rotateTablePlugin && this.rotateDegree === 90) {\n const x = clientX / widthRatio - (this.options.viewBox?.x1 ?? 0);\n const y = clientY / heightRatio - (this.options.viewBox?.y1 ?? 0);\n const point = { x, y, inTable };\n const matrix = (rotateTablePlugin as any).matrix;\n matrix.transformPoint(point, point);\n return point;\n }\n const x = (clientX - rect.left) / widthRatio - (this.options.viewBox?.x1 ?? 0);\n const y = (clientY - rect.top) / heightRatio - (this.options.viewBox?.y1 ?? 0);\n const point = { x, y, inTable };\n if (this.internalProps.modifiedViewBoxTransform && this.scenegraph.stage.window.getViewBoxTransform()) {\n const transform = this.scenegraph.stage.window.getViewBoxTransform();\n transform.transformPoint(point, point);\n return point;\n }\n return point;\n }\n getTheme() {\n return this.internalProps.theme;\n }\n\n /**\n * 根据x获取该位置所处列值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetColAt(absoluteX: number): ColumnInfo | null {\n return getTargetColAt(absoluteX, this);\n }\n /**\n * 根据y获取该位置所处行值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetRowAt(absoluteY: number): RowInfo | null {\n const targetRow = getTargetRowAt(absoluteY, this);\n if (targetRow) {\n targetRow.row = Math.min(targetRow.row, this.rowCount - 1);\n }\n return targetRow;\n }\n\n /**\n * 根据x获取该位置所处列值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetColAtConsiderRightFrozen(absoluteX: number, isConsider: boolean): ColumnInfo | null {\n return getTargetColAtConsiderRightFrozen(absoluteX, isConsider, this);\n }\n\n /**\n * 根据y获取该位置所处行值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetRowAtConsiderBottomFrozen(absoluteY: number, isConsider: boolean): RowInfo | null {\n return getTargetRowAtConsiderBottomFrozen(absoluteY, isConsider, this);\n }\n\n /**\n * 清除选中单元格\n */\n clearSelected() {\n this.stateManager.updateSelectPos(-1, -1);\n }\n /**\n * 选中单元格 和鼠标选中单元格效果一致\n * @param col\n * @param row\n * @param enableShiftSelectMode 是否按住 shift 键\n * @param enableCtrlSelectMode 是否按住 ctrl 键\n * @param makeSelectCellVisible 是否让选中的单元格可见\n * @param skipBodyMerge 是否忽略合并单元格,默认 false针对合并单元自动扩大选取范围\n */\n selectCell(\n col: number,\n row: number,\n enableShiftSelectMode?: boolean,\n enableCtrlSelectMode?: boolean,\n makeSelectCellVisible?: boolean,\n skipBodyMerge: boolean = false\n ) {\n const isHasSelected = !!this.stateManager.select.ranges?.length;\n this.stateManager.updateSelectPos(\n col,\n row,\n enableShiftSelectMode,\n enableCtrlSelectMode,\n false,\n makeSelectCellVisible ?? this.options.select?.makeSelectCellVisible ?? true,\n skipBodyMerge\n );\n this.stateManager.endSelectCells(true, isHasSelected);\n }\n /**\n * 选中单元格区域,可设置多个区域同时选中\n * @param cellRanges: CellRange[]\n */\n selectCells(cellRanges: CellRange[]) {\n const { scrollLeft, scrollTop } = this;\n cellRanges.forEach((cellRange: CellRange, index: number) => {\n const startRow = cellRange.start.row;\n const startCol = cellRange.start.col;\n const endRow = cellRange.end.row;\n const endCol = cellRange.end.col;\n if (startCol === endCol && startRow === endRow) {\n this.stateManager.updateSelectPos(\n startCol,\n startRow,\n false,\n index >= 1,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n } else {\n this.stateManager.updateSelectPos(\n startCol,\n startRow,\n false,\n index >= 1,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n this.stateManager.updateInteractionState(InteractionState.grabing);\n this.stateManager.updateSelectPos(\n endCol,\n endRow,\n false,\n index >= 1,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n }\n this.stateManager.endSelectCells(false, false);\n this.stateManager.updateInteractionState(InteractionState.default);\n });\n // 选择后 会自动滚动到所选区域最后一行一列的位置 这里再设置回滚动前位置\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n selectRow(rowIndex: number, isCtrl?: boolean, isShift?: boolean) {\n const currentSelectRanges = this.stateManager.select.ranges;\n if (isCtrl) {\n currentSelectRanges.push({\n start: { col: 0, row: rowIndex },\n end: { col: this.colCount - 1, row: rowIndex }\n });\n this.selectCells(currentSelectRanges);\n } else if (isShift) {\n const lastSelectRange = currentSelectRanges[currentSelectRanges.length - 1];\n if (lastSelectRange) {\n lastSelectRange.end.row = rowIndex;\n }\n this.selectCells(currentSelectRanges);\n } else {\n this.selectCells([\n {\n start: { col: 0, row: rowIndex },\n end: { col: this.colCount - 1, row: rowIndex }\n }\n ]);\n }\n }\n selectCol(colIndex: number, isCtrl?: boolean, isShift?: boolean) {\n const currentSelectRanges = this.stateManager.select.ranges;\n if (isCtrl) {\n currentSelectRanges.push({\n start: { col: colIndex, row: 0 },\n end: { col: colIndex, row: this.rowCount - 1 }\n });\n this.selectCells(currentSelectRanges);\n } else if (isShift) {\n const lastSelectRange = currentSelectRanges[currentSelectRanges.length - 1];\n if (lastSelectRange) {\n lastSelectRange.end.col = colIndex;\n }\n this.selectCells(currentSelectRanges);\n } else {\n this.selectCells([\n {\n start: { col: colIndex, row: 0 },\n end: { col: colIndex, row: this.rowCount - 1 }\n }\n ]);\n }\n }\n /**\n * 开始拖拽选择列. 当结合插件table-series-number使用时,需要使用这个方法来开始拖拽选择整列\n * @param colIndex 列索引\n * @param enableCtrlSelectMode 是否按住 ctrl 键\n * @param enableShiftSelectMode 是否按住 shift 键\n */\n startDragSelectCol(colIndex: number, enableCtrlSelectMode?: boolean, enableShiftSelectMode?: boolean) {\n const lastSelectRange = this.stateManager.select.ranges[this.stateManager.select.ranges.length - 1];\n const startCol = enableShiftSelectMode && lastSelectRange?.start?.col ? lastSelectRange?.start?.col : colIndex;\n const startRow = 0;\n const endCol = colIndex;\n const endRow = this.rowCount - 1;\n this.stateManager.updateSelectPos(\n startCol,\n startRow,\n enableShiftSelectMode,\n enableCtrlSelectMode,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n this.stateManager.updateInteractionState(InteractionState.grabing);\n this.stateManager.updateSelectPos(\n endCol,\n endRow,\n enableShiftSelectMode,\n enableCtrlSelectMode,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n }\n /**\n * 拖拽选择列. 当结合插件table-series-number使用时,需要使用这个方法来拖拽选择整列\n * @param colIndex 列索引\n * @param enableCtrlSelectMode 是否按住 ctrl 键\n */\n dragSelectCol(colIndex: number, enableCtrlSelectMode?: boolean) {\n const currentSelectRanges = this.stateManager.select.ranges;\n const lastSelectRange = currentSelectRanges[currentSelectRanges.length - 1];\n if (lastSelectRange) {\n lastSelectRange.end.col = colIndex;\n }\n this.stateManager.updateSelectPos(\n colIndex,\n this.rowCount - 1,\n false,\n enableCtrlSelectMode,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n }\n /**\n * 结束拖拽选择列. 当结合插件table-series-number使用时,需要使用这个方法来结束拖拽选择整列或者整行\n */\n endDragSelect() {\n this.stateManager.updateInteractionState(InteractionState.default);\n this.stateManager.endSelectCells(false, false);\n }\n\n /**\n * 开始拖拽选择行. 当结合插件table-series-number使用时,需要使用这个方法来开始拖拽选择整行\n * @param rowIndex 行索引\n * @param enableCtrlSelectMode 是否按住 ctrl 键\n * @param isShift 是否按住 shift 键\n */\n startDragSelectRow(rowIndex: number, enableCtrlSelectMode?: boolean, isShift?: boolean) {\n const lastSelectRange = this.stateManager.select.ranges[this.stateManager.select.ranges.length - 1];\n const startCol = 0;\n const startRow = isShift && lastSelectRange?.start?.row ? lastSelectRange?.start?.row : rowIndex;\n const endCol = this.colCount - 1;\n const endRow = rowIndex;\n this.stateManager.updateSelectPos(\n startCol,\n startRow,\n isShift,\n enableCtrlSelectMode,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n this.stateManager.updateInteractionState(InteractionState.grabing);\n this.stateManager.updateSelectPos(\n endCol,\n endRow,\n isShift,\n enableCtrlSelectMode,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n }\n /**\n * 拖拽选择行. 当结合插件table-series-number使用时,需要使用这个方法来拖拽选择整行\n * @param rowIndex 行索引\n * @param isCtrl 是否按住 ctrl 键\n */\n dragSelectRow(rowIndex: number, isCtrl?: boolean) {\n const currentSelectRanges = this.stateManager.select.ranges;\n const lastSelectRange = currentSelectRanges[currentSelectRanges.length - 1];\n if (lastSelectRange) {\n lastSelectRange.end.row = rowIndex;\n }\n this.stateManager.updateSelectPos(\n this.colCount - 1,\n rowIndex,\n false,\n isCtrl,\n false,\n this.options.select?.makeSelectCellVisible ?? true,\n true\n );\n }\n\n abstract isListTable(): boolean;\n abstract isPivotTable(): boolean;\n abstract isPivotChart(): boolean;\n\n protected abstract _getSortFuncFromHeaderOption(\n columns: ColumnsDefine | undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): ((v1: any, v2: any, order: string) => 0 | 1 | -1) | undefined;\n abstract setRecords(records: Array<any>, option?: { sortState?: SortState | SortState[] }): void;\n abstract refreshHeader(): void;\n abstract refreshRowColCount(): void;\n abstract getHierarchyState(col: number, row: number): HierarchyState | null;\n abstract toggleHierarchyState(col: number, row: number, recalculateColWidths?: boolean): void;\n\n abstract getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo;\n abstract _moveHeaderPosition(\n source: CellAddress,\n target: CellAddress\n ): {\n sourceIndex: number;\n targetIndex: any;\n sourceSize: any;\n targetSize: any;\n moveType: 'column' | 'row';\n };\n /** @private */\n // abstract getFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData;\n abstract getRecordShowIndexByCell(col: number, row: number): number;\n abstract getCellOriginRecord(col: number, row: number): MaybePromiseOrUndefined;\n abstract getCellRawRecord(col: number, row: number): MaybePromiseOrUndefined;\n abstract getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData;\n abstract getCellOriginValue(col: number, row: number): FieldData;\n abstract getCellRawValue(col: number, row: number): FieldData;\n\n abstract getTableIndexByRecordIndex(recordIndex: number): number;\n abstract getTableIndexByField(field: FieldDef): number;\n abstract getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress;\n /**\n * 更新页码\n * @param pagination 要修改页码的信息\n */\n abstract updatePagination(pagination: IPagination): void;\n\n abstract _hasCustomRenderOrLayout(): boolean;\n\n get recordsCount() {\n return this.records?.length;\n }\n get allowFrozenColCount(): number {\n return this.internalProps.allowFrozenColCount;\n }\n\n /**\n * Get the number of cols that are row header.\n */\n get rowHeaderLevelCount(): number {\n return this.internalProps.layoutMap.rowHeaderLevelCount;\n }\n /**\n * Get the number of rows that are col header.\n */\n get columnHeaderLevelCount(): number {\n return this.internalProps.layoutMap.columnHeaderLevelCount;\n }\n /**\n * Get the records.\n */\n get records(): any {\n return this.internalProps.records;\n }\n /**\n * Get the data source.\n */\n get dataSource(): CachedDataSource | DataSource {\n return this.internalProps.dataSource;\n }\n /**\n * Set the data source from given\n */\n set dataSource(dataSource: CachedDataSource | DataSource) {\n // 清空单元格内容\n this.scenegraph.clearCells();\n _setDataSource(this, dataSource);\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n /**\n * Get the autoWrapText.\n */\n get autoWrapText(): boolean {\n return this.internalProps.autoWrapText;\n }\n /**\n * Set the autoWrapText\n */\n set autoWrapText(autoWrapText: boolean) {\n this.internalProps.autoWrapText = autoWrapText;\n this.options.autoWrapText = autoWrapText;\n }\n /**\n * Get the enableLineBreak.\n */\n get enableLineBreak(): boolean {\n return this.internalProps.enableLineBreak;\n }\n /**\n * Set the enableLineBreak\n */\n set enableLineBreak(enableLineBreak: boolean) {\n this.internalProps.enableLineBreak = enableLineBreak;\n this.options.enableLineBreak = enableLineBreak;\n }\n updateAutoWrapText(autoWrapText: boolean) {\n if (this.internalProps.autoWrapText === autoWrapText) {\n return;\n }\n this.internalProps.autoWrapText = autoWrapText;\n this.options.autoWrapText = autoWrapText;\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.render();\n // }\n }\n\n /**\n * 获取当前使用的主题\n */\n get theme(): TableTheme {\n return this.internalProps.theme;\n }\n set theme(theme: TableTheme) {\n this.internalProps.theme = themes.of(theme ?? themes.DEFAULT);\n this.internalProps.theme.isPivot = this.isPivotTable();\n this.options.theme = theme;\n setIconColor(this.internalProps.theme.functionalIconsStyle);\n }\n /**\n * 设置主题\n */\n updateTheme(theme: ITableThemeDefine) {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.internalProps.theme = themes.of(theme ?? themes.DEFAULT);\n this.internalProps.theme.isPivot = this.isPivotTable();\n setIconColor(this.internalProps.theme.functionalIconsStyle);\n this.options.theme = theme;\n this.scenegraph.updateComponent();\n this.scenegraph.updateStageBackground();\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.render();\n }\n\n /**\n * 根据行列号获取对应的字段名\n * @param {number} col column index.\n * @param {number} row row index.\n */\n getBodyField(col: number, row: number): FieldDef | undefined {\n return this.internalProps.layoutMap.getBody(col, row).field;\n }\n /**\n * 根据行列号获取配置\n * @param {number} col column index.\n * @param {number} row row index.\n * @return {ColumnDefine} The column define object.\n */\n getBodyColumnDefine(col: number, row: number): ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber {\n // TODO: 暂时修复透视表报错\n const body = this.internalProps.layoutMap.getBody(col, row);\n return body?.define;\n }\n\n getBodyColumnType(col: number, row: number): ColumnTypeOption {\n const cellType = this.internalProps.layoutMap.getBody(col, row)?.cellType ?? 'text';\n return getProp('cellType', { cellType }, col, row, this);\n }\n\n getCellType(col: number, row: number): ColumnTypeOption {\n let cellType;\n if (this.isSeriesNumberInHeader(col, row)) {\n return (this.internalProps.layoutMap as SimpleHeaderLayoutMap).getSeriesNumberHeader(col, row).cellType;\n } else if (this.isHeader(col, row)) {\n cellType = (this.internalProps.layoutMap.getHeader(col, row) as HeaderData).headerType;\n } else {\n cellType = this.internalProps.layoutMap.getBody(col, row).cellType;\n }\n return getProp('cellType', { cellType }, col, row, this);\n }\n\n /**\n * 根据行列号获取对应的字段名\n * @param {number} col column index.\n * @param {number} row row index.\n */\n getHeaderField(col: number, row: number): FieldDef {\n return this.internalProps.layoutMap.getHeaderField(col, row);\n }\n /**\n * 根据行列号获取配置\n * @param {number} col column index.\n * @param {number} row row index.\n * @return {ColumnDefine} The column define object.\n */\n getHeaderDefine(col: number, row: number): ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber {\n const hd = this.internalProps.layoutMap.getHeader(col, row);\n return hd?.define;\n }\n getCellLocation(col: number, row: number): CellLocation {\n const hdType = this.internalProps.layoutMap.getCellLocation(col, row);\n return hdType;\n }\n /**\n * 获取行列表头的路径\n * @param col\n * @param row\n * @returns 返回结构{\n colHeaderPaths?: any[];\n rowHeaderPaths?: any[];\n}\n */\n getCellHeaderPaths(col: number, row: number): ICellHeaderPaths {\n const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n return cellHeaderPaths;\n }\n /**\n * Get the headers define of the given column.\n * @param {number} col The column index.\n * @return {*} The array of header define object.\n */\n getHeadersDefine(col: number, row: number): (ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber)[] {\n const headers = [];\n while (true) {\n const header = this.getHeaderDefine(col, row) as ColumnDefine;\n if (header && (header.field || (header as ColumnDefine).columns)) {\n headers.push(header);\n } else {\n break;\n }\n\n row++;\n }\n\n return headers;\n }\n _getHeaderLayoutMap(col: number, row: number): HeaderData | SeriesNumberColumnData {\n return this.internalProps.layoutMap.getHeader(col, row);\n }\n _getBodyLayoutMap(col: number, row: number): ColumnData | IndicatorData | SeriesNumberColumnData {\n return this.internalProps.layoutMap.getBody(col, row);\n }\n /** 获取绘制画布的canvas上下文 */\n getContext(): CanvasRenderingContext2D {\n return this.internalProps.context;\n }\n /**\n * 根据行列号获取整条数据记录\n * @param {number} col col index.\n * @param {number} row row index.\n * @return {object} record.\n */\n getRecordByCell(col: number, row: number): MaybePromiseOrUndefined {\n if (this.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n return this.getCellOriginRecord(col, row);\n }\n /** @deprecated 请使用getRecordByCell */\n getRecordByRowCol(col: number, row: number) {\n return this.getRecordByCell(col, row);\n }\n\n /**\n * 根据数据的索引获取应该显示在body的第几行\n * @param {number} index The record index.\n */\n getRecordStartRowByRecordIndex(index: number): number {\n return this.internalProps.layoutMap.getRecordStartRowByRecordIndex(index);\n }\n /**\n * 根据给定的排序状态 获取对应的表格单元格信息\n * @param sortState\n * @returns\n */\n _getHeaderCellBySortState(sortState: SortState): CellAddress | undefined {\n const { layoutMap } = this.internalProps;\n const hd = layoutMap.headerObjects.find((col: any) => col && col.field === sortState.field);\n if (hd) {\n const headercell = layoutMap.getHeaderCellAdressById(hd.id as number);\n return headercell;\n }\n return undefined;\n }\n\n /**\n * 获取给定单元格的范围 如果是合并单元格,则返回合并单元格的范围\n */\n getCellRange(col: number, row: number): CellRange {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.internalProps.customMergeCell(col, row, this);\n if (\n customMerge &&\n customMerge.range &&\n (isValid(customMerge.text) || customMerge.customLayout || customMerge.customRender)\n ) {\n // return customMerge.range;\n // trim range\n const range = {\n start: {\n col: Math.max(customMerge.range.start.col, 0),\n row: Math.max(customMerge.range.start.row, 0)\n },\n end: {\n col: Math.min(customMerge.range.end.col, this.colCount - 1),\n row: Math.min(customMerge.range.end.row, this.rowCount - 1)\n },\n isCustom: true\n };\n return range;\n }\n }\n return this.internalProps.layoutMap?.getCellRange(col, row);\n }\n\n hasCustomMerge() {\n return !!this.internalProps.customMergeCell;\n }\n\n getCustomMerge(col: number, row: number) {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.internalProps.customMergeCell(col, row, this);\n if (\n customMerge &&\n customMerge.range &&\n (isValid(customMerge.text) || customMerge.customLayout || this.customRender)\n ) {\n if (customMerge.style) {\n const styleClass = this.internalProps.bodyHelper.getStyleClass('text');\n const style = customMerge.style;\n const fullStyle = <FullExtendStyle>columnStyleContents.of(\n style,\n this.theme.bodyStyle,\n {\n col,\n row,\n table: this,\n value: customMerge.text,\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText,\n this.theme\n );\n customMerge.style = fullStyle;\n }\n customMerge.range = {\n start: {\n col: Math.max(customMerge.range.start.col, 0),\n row: Math.max(customMerge.range.start.row, 0)\n },\n end: {\n col: Math.min(customMerge.range.end.col, this.colCount - 1),\n row: Math.min(customMerge.range.end.row, this.rowCount - 1)\n },\n isCustom: true\n };\n return customMerge;\n }\n }\n return undefined;\n }\n\n /**\n * 判断两个单元格是否是属于同一个合并区域\n * @param col\n * @param row\n * @param targetCol\n * @param targetRow\n * @returns\n */\n isCellRangeEqual(col: number, row: number, targetCol: number, targetRow: number): boolean {\n return this.internalProps.layoutMap.isCellRangeEqual(col, row, targetCol, targetRow);\n }\n /**\n * 根据行列号获取布局id\n * @param col\n * @param row\n * @returns\n */\n _getLayoutCellId(col: number, row: number): LayoutObjectId {\n return this.internalProps.layoutMap.getCellId(col, row);\n }\n /**\n * 获取表头的描述信息\n * @param col\n * @param row\n * @returns\n */\n getHeaderDescription(col: number, row: number): string | undefined {\n const field = this._getHeaderLayoutMap(col, row);\n const fieldDef = field?.define;\n const description = (fieldDef as ColumnDefine)?.description ?? (field as HeaderData)?.description;\n if (typeof description === 'function') {\n const arg: CellInfo = {\n col,\n row,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row)\n };\n return description(arg);\n }\n return description;\n }\n\n setDropDownMenuHighlight(cells: DropDownMenuHighlightInfo[]): void {\n this.stateManager.setDropDownMenuHighlight(cells);\n }\n _dropDownMenuIsHighlight(colNow: number, rowNow: number, index: number): boolean {\n return this.stateManager.dropDownMenuIsHighlight(colNow, rowNow, index);\n }\n /** 判断单元格是否属于序号body部分 */\n isSeriesNumberInBody(col: number, row: number): boolean {\n return (\n this.internalProps.layoutMap &&\n (this.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInBody(col, row)\n );\n }\n /** 判断单元格是否属于序号表头部分 */\n isSeriesNumberInHeader(col: number, row: number): boolean {\n return (\n this.internalProps.layoutMap &&\n (this.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumberInHeader(col, row)\n );\n }\n /** 判断单元格是否属于表头部分 */\n isHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap && this.internalProps.layoutMap.isHeader(col, row);\n }\n /** 判断单元格是否属于列表头部分 */\n isColumnHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isColumnHeader(col, row);\n }\n /** 判断单元格是否属于行表头部分 */\n isRowHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isRowHeader(col, row);\n }\n /** 判断单元格是否属于角表头部分 */\n isCornerHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isCornerHeader(col, row);\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenColumn(col: number, row?: number): boolean {\n return this.isLeftFrozenColumn(col, row) || this.isRightFrozenColumn(col, row);\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isLeftFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenColumn(col, row);\n }\n /**\n * 是否属于右侧冻结列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isRightFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isRightFrozenColumn(col, row);\n }\n\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenRow(col: number, row?: number): boolean {\n return this.isTopFrozenRow(col, row) || this.isBottomFrozenRow(col, row);\n }\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isTopFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenRow(col, row);\n }\n /**\n * 是否属于冻结底部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isBottomFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isBottomFrozenRow(col, row);\n }\n /** 获取单元格的基本信息 目前主要组织单元格信息给事件传递给用户的参数使用 */\n getCellInfo(col: number, row: number): Omit<MousePointerCellEvent, 'target'> {\n if (col >= 0 && row >= 0) {\n const colDef = this.isHeader(col, row) ? this.getHeaderDefine(col, row) : this.getBodyColumnDefine(col, row);\n return {\n col,\n row,\n field: this.getHeaderField(col, row),\n cellHeaderPaths: this.internalProps.layoutMap.getCellHeaderPaths(col, row),\n title: colDef?.title,\n cellType: this.getCellType(col, row),\n originData: this.getCellOriginRecord(col, row),\n cellRange: this.getCellRangeRelativeRect({ col, row }),\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n scaleRatio: this.canvas.getBoundingClientRect().width / this.canvas.offsetWidth\n };\n }\n return undefined;\n }\n /** @private */\n _hasField(field: FieldDef, col: number, row: number): boolean {\n if (field === null) {\n return false;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return false;\n }\n const index = table.getRecordShowIndexByCell(col, row);\n return table.internalProps.dataSource?.hasField(index, field);\n }\n /**\n * 获取单元格的样式 内部逻辑使用 获取到的样式并不是计算后的\n * @param col\n * @param row\n * @returns\n */\n _getCellStyle(col: number, row: number): FullExtendStyle {\n return getCellStyle(col, row, this);\n }\n clearCellStyleCache() {\n this.headerStyleCache.clear();\n this.bodyStyleCache.clear();\n this.bodyMergeTitleCache.clear();\n this.bodyBottomStyleCache.clear();\n\n // this._newRowHeightsMap.clear();\n }\n /**\n * 清除行高度缓存对象\n */\n clearRowHeightCache() {\n this.internalProps._rowHeightsMap.clear();\n this._clearRowRangeHeightsMap();\n }\n /**\n * 清除列宽度缓存对象\n */\n clearColWidthCache() {\n this.internalProps._colWidthsMap.clear();\n this._clearColRangeWidthsMap();\n }\n /**\n * 该列是否可调整列宽\n * @param col\n * @param row\n * @returns\n */\n _canResizeColumn(col: number, row: number): boolean {\n if (!(col >= 0 && row >= 0)) {\n return false;\n }\n if (this.isCellRangeEqual(col, row, col + 1, row)) {\n return false;\n }\n\n if (this.internalProps.columnResizeMode === 'none') {\n return false;\n } else if (this.internalProps.columnResizeMode === 'header') {\n // 判断表头\n if (!this.isHeader(col, row)) {\n return false;\n }\n } else if (this.internalProps.columnResizeMode === 'body') {\n // 判断内容\n if (this.isHeader(col, row)) {\n return false;\n }\n }\n\n // if (this.rightFrozenColCount && col >= this.colCount - this.rightFrozenColCount - 1) {\n // // right frozen columns can not resize temply\n // return false;\n // }\n\n const limit = this.colWidthsLimit[col];\n if (!limit || !limit.min || !limit.max) {\n return true;\n }\n return limit.max !== limit.min;\n }\n\n /**\n * 该列是否可调整列宽\n * @param col\n * @param row\n * @returns\n */\n _canResizeRow(col: number, row: number): boolean {\n if (!(col >= 0 && row >= 0)) {\n return false;\n }\n if (this.isCellRangeEqual(col, row, col, row + 1)) {\n return false;\n }\n\n if (this.internalProps.rowResizeMode === 'none') {\n return false;\n } else if (this.internalProps.rowResizeMode === 'header') {\n // 判断表头\n if (!this.isHeader(col, row)) {\n return false;\n }\n } else if (this.internalProps.rowResizeMode === 'body') {\n // 判断内容\n if (this.isHeader(col, row)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * 选中位置是否可拖拽调整位置\n * @param col\n * @returns\n */\n _canDragHeaderPosition(col: number, row: number): boolean {\n if (\n this.isHeader(col, row) &&\n (this.stateManager.isSelected(col, row) ||\n (this.options.select?.headerSelectMode === 'body' &&\n checkCellInSelect(col, row, [\n this.getCellRange(this.stateManager.select.cellPos.col, this.stateManager.select.cellPos.row)\n ])) ||\n isCellDisableSelect(this, col, row))\n ) {\n if (this.internalProps.frozenColDragHeaderMode === 'disabled' && this.isFrozenColumn(col)) {\n return false;\n }\n if (this.stateManager.isSelected(col, row)) {\n const selectRange = this.stateManager.select.ranges[0];\n //判断是否整行或者整列选中\n if (this.isColumnHeader(col, row)) {\n if (selectRange.end.row !== this.rowCount - 1) {\n return false;\n }\n } else if (this.isRowHeader(col, row)) {\n if (selectRange.end.col !== this.colCount - 1) {\n return false;\n }\n } else {\n return false;\n }\n }\n const define = this.getHeaderDefine(col, row);\n if (!define) {\n return false;\n }\n if ((define as ColumnDefine).dragHeader === undefined) {\n if (this.internalProps.dragHeaderMode === 'all') {\n return true;\n } else if (this.internalProps.dragHeaderMode === 'column') {\n if (this.isColumnHeader(col, row)) {\n return true;\n }\n } else if (this.internalProps.dragHeaderMode === 'row') {\n if (this.isRowHeader(col, row)) {\n return true;\n }\n }\n return false;\n }\n return (define as ColumnDefine).dragHeader;\n }\n return false;\n }\n\n /**\n * 获取某个单元格所配置的所有图标\n */\n getCellIcons(col: number, row: number): ColumnIconOption[] {\n let icons;\n if (this.isHeader(col, row)) {\n icons = this.internalProps.headerHelper.getIcons(col, row);\n } else if ((this.internalProps.layoutMap as SimpleHeaderLayoutMap).isSeriesNumber(col, row)) {\n if (!(this.internalProps as ListTableProtected).groupBy || !this.getCellRawRecord(col, row)?.vtableMerge) {\n const dragOrder = (this.internalProps.layoutMap as SimpleHeaderLayoutMap).getSeriesNumberBody(col, row)?.define\n ?.dragOrder;\n if (dragOrder) {\n icons = this.internalProps.rowSeriesNumberHelper.getIcons(col, row);\n }\n }\n const cellValue = this.getCellValue(col, row);\n const dataValue = this.getCellOriginValue(col, row);\n\n const ctx = this.internalProps.context;\n const cellIcon = this.internalProps.bodyHelper.getIcons(col, row, cellValue, dataValue, ctx);\n if (icons?.length > 0) {\n icons = icons.concat(cellIcon);\n } else if (cellIcon?.length > 0) {\n icons = cellIcon;\n }\n } else {\n const cellValue = this.getCellValue(col, row);\n const dataValue = this.getCellOriginValue(col, row);\n const ctx = this.internalProps.context;\n icons = this.internalProps.bodyHelper.getIcons(col, row, cellValue, dataValue, ctx);\n }\n return icons;\n }\n\n /** 指定某个单元格显示下拉菜单【内容可以自定义为menu数组或者dom】 */\n showDropDownMenu(col: number, row: number, dropDownMenuOptions?: DropDownMenuOptions) {\n let menuType: MenuInstanceType = 'dropdown-menu';\n if (dropDownMenuOptions) {\n menuType = Array.isArray(dropDownMenuOptions.content) ? 'dropdown-menu' : 'container';\n }\n if (this.internalProps.menu.renderMode === 'html') {\n this.stateManager.menu.isShow = true;\n this.internalProps.menuHandler._bindToCell(col, row, menuType, dropDownMenuOptions);\n }\n // this.stateManager.showDropDownMenu(col,row,) //最好和这个保持一致\n }\n /** 暂时只支持全局设置了tooltip.renderMode='html',调用该接口才有效 */\n showTooltip(col: number, row: number, tooltipOptions?: TooltipOptions) {\n // this.drawHoverIconTooltip();\n if (this.internalProps.tooltip.renderMode === 'html') {\n this.internalProps.tooltipHandler._bindToCell(col, row, tooltipOptions);\n }\n }\n /**\n * 获取某个单元格的样式 供业务方调用\n * @param col\n * @param row\n */\n getCellStyle(col: number, row: number): CellStyle {\n const actStyle = this._getCellStyle(col, row);\n\n const theme = getStyleTheme(actStyle, this, col, row, getProp).theme;\n\n const { autoWrapText, lineClamp, textOverflow } = actStyle;\n\n return {\n textAlign: theme.text.textAlign,\n textBaseline: theme.text.textBaseline,\n bgColor: isBoolean(theme.group.fill)\n ? getProp('bgColor', actStyle, col, row, this)\n : (theme.group.fill as string),\n color: isBoolean(theme.text.fill) ? getProp('color', actStyle, col, row, this) : (theme.text.fill as string),\n strokeColor: isBoolean(theme.text.stroke)\n ? getProp('strokeColor', actStyle, col, row, this)\n : (theme.text.stroke as string),\n fontFamily: theme.text.fontFamily,\n fontSize: theme.text.fontSize,\n fontWeight: theme.text.fontWeight,\n fontVariant: theme.text.fontVariant,\n fontStyle: theme.text.fontStyle,\n lineHeight: theme.text.lineHeight as number,\n autoWrapText: autoWrapText ?? false,\n lineClamp: lineClamp ?? 'auto',\n textOverflow,\n borderColor: isBoolean(theme.group.stroke)\n ? getProp('borderColor', actStyle, col, row, this)\n : (theme.group.stroke as string | string[]),\n borderLineWidth: theme.group.lineWidth,\n borderLineDash: theme.group.lineDash,\n underline: !!theme.text.underline,\n // underlineColor: theme.text.underlineColor,\n underlineDash: theme.text.underlineDash,\n underlineOffset: theme.text.underlineOffset,\n lineThrough: !!theme.text.lineThrough,\n // lineThroughColor: theme.text.lineThroughColor,\n // lineThroughDash: (theme.text as any).lineThroughDash\n padding: theme._vtable.padding,\n underlineWidth: theme.text.underline,\n lineThroughLineWidth: theme.text.lineThrough,\n _strokeArrayWidth: (theme.group as any).strokeArrayWidth,\n _strokeArrayColor: (theme.group as any).strokeArrayColor,\n _linkColor: getProp('linkColor', actStyle, col, row, this)\n };\n }\n /**\n * 获取所有body单元格数据信息\n * @param colMaxCount 限制获取最多列数\n * @param rowMaxCount 限制获取最多行数\n * @returns CellInfo[][]\n */\n getAllBodyCells(colMaxCount?: number, rowMaxCount?: number): CellInfo[][] {\n const start = { col: this.rowHeaderLevelCount, row: this.columnHeaderLevelCount };\n const end = { col: this.colCount - 1, row: this.rowCount - 1 };\n return Array(Math.min(rowMaxCount ?? 2000, end.row - start.row + 1, this.rowCount))\n .fill(0)\n .map((_, i) =>\n Array(Math.min(colMaxCount ?? 2000, end.col - start.col + 1, this.colCount))\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有单元格数据信息\n * @param colMaxCount 限制获取最多列数\n * @param rowMaxCount 限制获取最多行数\n * @returns CellInfo[][]\n */\n getAllCells(colMaxCount?: number, rowMaxCount?: number): CellInfo[][] {\n const start = { col: 0, row: 0 };\n const end = { col: this.colCount - 1, row: this.rowCount - 1 };\n return Array(Math.min(rowMaxCount ?? 2000, end.row - start.row + 1, this.rowCount))\n .fill(0)\n .map((_, i) =>\n Array(Math.min(colMaxCount ?? 2000, end.col - start.col + 1, this.colCount))\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有列表头单元格数据信息\n * @returns CellInfo[][]\n */\n getAllColumnHeaderCells(): CellInfo[][] {\n const start = { col: this.rowHeaderLevelCount, row: 0 };\n const end = { col: this.colCount - 1, row: this.columnHeaderLevelCount - 1 };\n return Array(end.row - start.row + 1)\n .fill(0)\n .map((_, i) =>\n Array(end.col - start.col + 1)\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有行表头单元格数据信息\n * @returns CellInfo[][]\n */\n getAllRowHeaderCells(): CellInfo[][] {\n const start = { col: 0, row: this.columnHeaderLevelCount };\n const end = { col: this.rowHeaderLevelCount - 1, row: this.rowCount - 1 };\n return Array(end.row - start.row + 1)\n .fill(0)\n .map((_, i) =>\n Array(end.col - start.col + 1)\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n\n /**获取选中区域的内容 作为复制内容 */\n getCopyValue(getCellValueFunction?: (col: number, row: number) => string | number): string | null {\n if (this.stateManager.select?.ranges?.length > 0) {\n const ranges = this.stateManager.select.ranges;\n let minCol = Math.min(ranges[0].start.col, ranges[0].end.col);\n let maxCol = Math.max(ranges[0].start.col, ranges[0].end.col);\n let minRow = Math.min(ranges[0].start.row, ranges[0].end.row);\n let maxRow = Math.max(ranges[0].start.row, ranges[0].end.row);\n ranges.forEach((a: CellRange) => {\n minCol = Math.min(minCol, a.start.col, a.end.col);\n maxCol = Math.max(maxCol, a.start.col, a.end.col);\n minRow = Math.min(minRow, a.start.row, a.end.row);\n maxRow = Math.max(maxRow, a.start.row, a.end.row);\n // return a.start.row - b.start.row || a.start.col - b.start.col\n });\n const isExistDataInRow = (r: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n if (minRow <= r && maxRow >= r) {\n isExist = true;\n }\n });\n return isExist;\n };\n const isExistDataInCol = (c: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c) {\n isExist = true;\n }\n });\n return isExist;\n };\n\n const getRangeExistDataInCell = (c: number, r: number) => {\n let isExistRange;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c && minRow <= r && maxRow >= r) {\n isExistRange = range;\n }\n });\n return isExistRange;\n };\n const getCopyCellValue = (col: number, row: number, range?: CellRange): string | Promise<string> | void => {\n const cellRange = this.getCellRange(col, row);\n let copyStartCol = cellRange.start.col;\n let copyStartRow = cellRange.start.row;\n if (range) {\n const rangeMinCol = Math.min(range.start.col, range.end.col);\n const rangeMinRow = Math.min(range.start.row, range.end.row);\n copyStartCol = Math.max(rangeMinCol, cellRange.start.col);\n copyStartRow = Math.max(rangeMinRow, cellRange.start.row);\n }\n\n if (copyStartCol !== col || copyStartRow !== row) {\n return '';\n }\n\n const value = getCellValueFunction ? getCellValueFunction(col, row) : this.getCellValue(col, row);\n return value;\n };\n let copyValue = '';\n\n for (let r = minRow; r <= maxRow; r++) {\n const isExistData = isExistDataInRow(r);\n if (isExistData) {\n for (let c = minCol; c <= maxCol; c++) {\n const isExistDataCol = isExistDataInCol(c);\n if (isExistDataCol) {\n const range: CellRange | undefined = getRangeExistDataInCell(c, r);\n if (range) {\n const copyCellValue = getCopyCellValue(c, r, range);\n if (typeof Promise !== 'undefined' && copyCellValue instanceof Promise) {\n //无法获取异步数据\n } else {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const strCellValue = isValid(copyCellValue) ? `${copyCellValue}` : '';\n if (/^\\[object .*\\]$/.exec(strCellValue)) {\n //object 对象忽略掉\n } else {\n copyValue += strCellValue;\n }\n }\n if (c < range.end.col || c < maxCol) {\n copyValue += '\\t';\n }\n } else {\n copyValue += '\\t';\n }\n }\n }\n if (r < maxRow) {\n copyValue += '\\r\\n';\n }\n }\n }\n\n if (this.options?.formatCopyValue) {\n copyValue = this.options.formatCopyValue(copyValue);\n }\n return copyValue;\n }\n return '';\n }\n\n /**获取选中区域的每个单元格详情 */\n getSelectedCellInfos(): CellInfo[][] | null {\n if (!this.stateManager.select?.ranges) {\n return null;\n }\n\n const ranges = this.stateManager.select.ranges;\n if (!ranges.length) {\n return [];\n }\n let minCol = Math.min(ranges[0].start.col, ranges[0].end.col);\n let maxCol = Math.max(ranges[0].start.col, ranges[0].end.col);\n let minRow = Math.min(ranges[0].start.row, ranges[0].end.row);\n let maxRow = Math.max(ranges[0].start.row, ranges[0].end.row);\n ranges.forEach((a: CellRange) => {\n minCol = Math.min(minCol, a.start.col, a.end.col);\n maxCol = Math.max(maxCol, a.start.col, a.end.col);\n minRow = Math.min(minRow, a.start.row, a.end.row);\n maxRow = Math.max(maxRow, a.start.row, a.end.row);\n // return a.start.row - b.start.row || a.start.col - b.start.col\n });\n const isExistDataInRow = (r: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n if (minRow <= r && maxRow >= r) {\n isExist = true;\n }\n });\n return isExist;\n };\n const isExistDataInCol = (c: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c) {\n isExist = true;\n }\n });\n return isExist;\n };\n\n const getRangeExistDataInCell = (c: number, r: number) => {\n let isExistRange;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c && minRow <= r && maxRow >= r) {\n isExistRange = range;\n }\n });\n return isExistRange;\n };\n\n const cellInfoArray: CellInfo[][] = [];\n\n for (let r = minRow; r <= maxRow; r++) {\n const isExistData = isExistDataInRow(r);\n if (isExistData) {\n const cellInfoRow: CellInfo[] = [];\n for (let c = minCol; c <= maxCol; c++) {\n const isExistDataCol = isExistDataInCol(c);\n if (isExistDataCol) {\n const range: CellRange | undefined = getRangeExistDataInCell(c, r);\n if (range) {\n const cellInfo = this.getCellInfo(c, r);\n cellInfoRow.push(cellInfo);\n }\n }\n }\n cellInfoArray.push(cellInfoRow);\n }\n }\n return cellInfoArray;\n }\n getSelectedCellRanges(): CellRange[] {\n const ranges = this.stateManager.select.ranges;\n if (!ranges.length) {\n return [];\n }\n return cloneDeep(ranges);\n }\n\n /** 计算字体的宽度接口 */\n measureText(text: string, font: { fontSize: number; fontWeight: string | number; fontFamily: string }): ITextSize {\n return textMeasure.measureText(text, font);\n }\n\n measureTextBounds(attribute: ITextGraphicAttribute): AABBBounds {\n return measureTextBounds(attribute) as AABBBounds;\n }\n\n /** 获取单元格上定义的自定义渲染配置 */\n getCustomRender(col: number, row: number): ICustomRender {\n let customRender;\n if (this.getCellLocation(col, row) !== 'body') {\n const define = this.getHeaderDefine(col, row);\n customRender = (define as ColumnDefine)?.headerCustomRender;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n customRender = (define as ColumnDefine)?.customRender || this.customRender;\n }\n return customRender;\n }\n /** 获取单元格上定义的自定义布局元素配置 */\n getCustomLayout(col: number, row: number): ICustomLayout {\n let customLayout;\n if (this.getCellLocation(col, row) !== 'body') {\n const define = this.getHeaderDefine(col, row);\n customLayout = (define as ColumnDefine)?.headerCustomLayout;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n customLayout = (define as ColumnDefine)?.customLayout;\n }\n return customLayout;\n }\n\n hasAutoImageColumn() {\n if (this._hasAutoImageColumn === undefined) {\n this._hasAutoImageColumn = hasAutoImageColumn(this);\n }\n return this._hasAutoImageColumn;\n }\n\n /** 获取当前hover单元格的图表实例。这个方法hover实时获取有点缺陷:鼠标hover到单元格上触发了 chart.ts中的activate方法 但此时this.stateManager.hover?.cellPos?.col还是-1 */\n _getActiveChartInstance() {\n // 根据hover的单元格位置 获取单元格实例 拿到chart图元\n const cellGroup = this.scenegraph.getCell(\n this.stateManager.hover?.cellPos?.col,\n this.stateManager.hover?.cellPos?.row\n );\n return cellGroup?.getChildren()?.[0]?.type === 'chart'\n ? (cellGroup.getChildren()[0] as Chart).activeChartInstance\n : null;\n }\n\n /**\n * 判断单元格是否在显示区域\n * @param col\n * @param row\n */\n cellIsInVisualView(col: number, row: number) {\n const drawRange = this.getDrawRange();\n const rect = this.getCellRelativeRect(col, row);\n\n if (col < this.frozenColCount && row < this.frozenRowCount) {\n return true;\n }\n let colHeaderRangeRect;\n if (this.frozenRowCount >= 1) {\n colHeaderRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: 0,\n row: 0\n },\n end: {\n col: this.colCount - 1,\n row: this.frozenRowCount - 1\n }\n });\n }\n let rowHeaderRangeRect;\n if (this.frozenColCount >= 1) {\n rowHeaderRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: 0,\n row: 0\n },\n end: {\n col: this.frozenColCount - 1,\n row: this.rowCount - 1\n }\n });\n }\n let bottomFrozenRangeRect;\n if (this.bottomFrozenRowCount >= 1) {\n bottomFrozenRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: 0,\n row: this.rowCount - this.bottomFrozenRowCount\n },\n end: {\n col: this.colCount - 1,\n row: this.rowCount - 1\n }\n });\n }\n let rightFrozenRangeRect;\n if (this.rightFrozenColCount >= 1) {\n rightFrozenRangeRect = this.getCellRangeRelativeRect({\n start: {\n col: this.colCount - this.rightFrozenColCount,\n row: 0\n },\n end: {\n col: this.colCount - 1,\n row: this.rowCount - 1\n }\n });\n }\n if (\n rect.top >= drawRange.top &&\n rect.bottom <= drawRange.bottom &&\n rect.left >= drawRange.left &&\n rect.right <= drawRange.right\n ) {\n // return true;\n if (this.isFrozenCell(col, row)) {\n return true;\n } else if (\n // body cell drawRange do not intersect colHeaderRangeRect&rowHeaderRangeRect\n rect.top >= (colHeaderRangeRect?.bottom ?? rect.top) &&\n rect.left >= (rowHeaderRangeRect?.right ?? rect.left) &&\n rect.bottom <= (bottomFrozenRangeRect?.top ?? rect.bottom) &&\n rect.right <= (rightFrozenRangeRect?.left ?? rect.right)\n ) {\n return true;\n }\n }\n return false;\n }\n\n getCustomMergeValue(col: number, row: number): string | undefined {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.getCustomMerge(col, row);\n if (customMerge) {\n const { text } = customMerge;\n return text;\n }\n }\n return undefined;\n }\n\n /**\n * 导出表格中当前可视区域的图片\n * @returns base64图片\n */\n exportImg() {\n const c = this.scenegraph.stage.toCanvas();\n return c.toDataURL();\n }\n\n /**\n * 导出某个单元格图片\n * @returns base64图片\n */\n exportCellImg(col: number, row: number, options?: { disableBackground?: boolean; disableBorder?: boolean }) {\n const isInView = this.cellIsInVisualView(col, row);\n const { scrollTop, scrollLeft } = this;\n if (!isInView) {\n this.scrollToCell({ col, row });\n }\n const cellRect = this.getCellRelativeRect(col, row);\n\n // disable hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n hideCellSelectBorder(this.scenegraph);\n }\n const { col: hoverCol, row: hoverRow } = this.stateManager.hover.cellPos;\n this.stateManager.updateHoverPos(-1, -1);\n // hide scroll bar\n this.scenegraph.component.hideVerticalScrollBar();\n this.scenegraph.component.hideHorizontalScrollBar();\n\n // hide border\n this.scenegraph.tableGroup.border.setAttribute('visible', false);\n\n // deal with options\n let oldFill;\n if (options?.disableBackground) {\n const cellGroup = this.scenegraph.getCell(col, row);\n oldFill = cellGroup.attribute.fill;\n cellGroup.setAttribute('fill', 'transparent');\n }\n let oldStroke;\n if (options?.disableBorder) {\n const cellGroup = this.scenegraph.getCell(col, row);\n oldStroke = cellGroup.attribute.stroke;\n cellGroup.setAttribute('stroke', false);\n }\n\n this.scenegraph.renderSceneGraph();\n let sizeOffset = 0;\n if (this.theme.cellBorderClipDirection === 'bottom-right') {\n sizeOffset = 1;\n }\n const c = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(\n cellRect.left + this.tableX + 1,\n cellRect.top + this.tableY + 1,\n cellRect.right + this.tableX - sizeOffset,\n cellRect.bottom + this.tableY - sizeOffset\n )\n );\n if (!isInView) {\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n // return c.toDataURL('image/jpeg', 0.5);\n\n // restore border\n this.scenegraph.tableGroup.border.setAttribute('visible', true);\n\n // restore options\n if (oldFill) {\n const cellGroup = this.scenegraph.getCell(col, row);\n cellGroup.setAttribute('fill', oldFill);\n }\n if (oldStroke) {\n const cellGroup = this.scenegraph.getCell(col, row);\n cellGroup.setAttribute('stroke', oldStroke);\n }\n\n // restore hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n restoreCellSelectBorder(this.scenegraph);\n }\n this.stateManager.updateHoverPos(hoverCol, hoverRow);\n\n this.scenegraph.updateNextFrame();\n\n return c.toDataURL();\n }\n\n /**\n * 导出某一片区域的图片\n * @returns base64图片\n */\n exportCellRangeImg(cellRange: CellRange) {\n const { scrollTop, scrollLeft } = this;\n const minCol = Math.min(cellRange.start.col, cellRange.end.col);\n const minRow = Math.min(cellRange.start.row, cellRange.end.row);\n const maxCol = Math.max(cellRange.start.col, cellRange.end.col);\n const maxRow = Math.max(cellRange.start.row, cellRange.end.row);\n const isInView = this.cellIsInVisualView(minCol, minRow);\n const isMaxCellInView = this.cellIsInVisualView(maxCol, maxRow);\n // 判断如果超出可视区域 做移动\n if (!isInView || !isMaxCellInView) {\n this.scrollToCell({ col: minCol, row: minRow });\n }\n\n const cellRect = this.getCellRangeRelativeRect({\n start: { col: minCol, row: minRow },\n end: { col: maxCol, row: maxRow }\n });\n\n // disable hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n hideCellSelectBorder(this.scenegraph);\n }\n const { col: hoverCol, row: hoverRow } = this.stateManager.hover.cellPos;\n this.stateManager.updateHoverPos(-1, -1);\n // hide scroll bar\n this.scenegraph.component.hideVerticalScrollBar();\n this.scenegraph.component.hideHorizontalScrollBar();\n this.scenegraph.renderSceneGraph();\n\n const c = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(\n cellRect.left + this.tableX + 1,\n cellRect.top + this.tableY + 1,\n cellRect.right + this.tableX,\n cellRect.bottom + this.tableY\n )\n );\n const base64Image = c.toDataURL();\n // 前面做的移动需要再复原\n if (!isInView || !isMaxCellInView) {\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n\n // restore hover&select style\n if (this.stateManager.select?.ranges?.length > 0) {\n restoreCellSelectBorder(this.scenegraph);\n }\n this.stateManager.updateHoverPos(hoverCol, hoverRow);\n\n return base64Image;\n }\n\n exportCanvas() {\n const c = this.scenegraph.stage.toCanvas();\n return c;\n }\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer(type: string = 'image/png') {\n if (this.options.mode !== 'node') {\n console.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n this.render();\n const stage = this.scenegraph.stage;\n if (stage) {\n let contentWidth = this.tableX + this.getAllColsWidth();\n let contentHeight = this.tableY + this.getAllRowsHeight();\n if (this.internalProps.legends) {\n this.internalProps.legends.forEach(legend => {\n if (legend.orient === 'right') {\n contentWidth = Math.max(contentWidth, legend.legendComponent.globalAABBBounds.x2);\n } else if (legend.orient === 'bottom') {\n contentHeight = Math.max(contentHeight, legend.legendComponent.globalAABBBounds.y2);\n }\n });\n }\n if (this.internalProps.title) {\n if (this.internalProps.title._titleOption.orient === 'right') {\n contentWidth = Math.max(contentWidth, this.internalProps.title.getComponentGraphic().globalAABBBounds.x2);\n } else if (this.internalProps.title._titleOption.orient === 'bottom') {\n contentHeight = Math.max(contentHeight, this.internalProps.title.getComponentGraphic().globalAABBBounds.y2);\n }\n }\n if (contentWidth >= this.canvasWidth && contentHeight >= this.canvasHeight) {\n stage.render();\n const buffer = stage.window.getImageBuffer(type);\n return buffer;\n }\n const newCanvas = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(0, 0, Math.min(this.canvasWidth, contentWidth), Math.min(this.canvasHeight, contentHeight))\n );\n const buffer = (newCanvas as any).toBuffer(type);\n return buffer;\n }\n console.error(new ReferenceError(`stage is not defined`));\n\n return null;\n }\n /** 根据表格单元格的行列号 获取在body部分的列索引及行索引 */\n getBodyIndexByTableIndex(col: number, row: number) {\n return {\n col: col - this.rowHeaderLevelCount - this.leftRowSeriesNumberCount,\n row: row - this.columnHeaderLevelCount\n };\n }\n /** 根据body部分的列索引及行索引,获取单元格的行列号 */\n getTableIndexByBodyIndex(col: number, row: number) {\n return {\n col: col + this.rowHeaderLevelCount + this.leftRowSeriesNumberCount,\n row: row + this.columnHeaderLevelCount\n };\n }\n\n /**\n * 监听vchart事件\n * @param type vchart事件类型\n * @param listener vchart事件监听器\n * @returns 事件监听器id\n */\n onVChartEvent(type: string, callback: AnyFunction): void;\n onVChartEvent(type: string, query: any, callback: AnyFunction): void;\n onVChartEvent(type: string, query?: any, callback?: AnyFunction): void {\n if (!this._chartEventMap[type]) {\n this._chartEventMap[type] = [];\n }\n if (typeof query === 'function') {\n this._chartEventMap[type].push({ callback: query });\n } else {\n this._chartEventMap[type].push({ callback, query });\n }\n }\n\n offVChartEvent(type: string, callback?: AnyFunction): void {\n // delete this._chartEventMap[type];\n if (!this._chartEventMap[type]) {\n return;\n }\n if (callback) {\n this._chartEventMap[type] = this._chartEventMap[type].filter(e => e.callback !== callback);\n } else {\n this._chartEventMap[type] = [];\n }\n }\n /** 给activeChartInstance逐个绑定chart用户监听事件 */\n _bindChartEvent(activeChartInstance: any) {\n if (activeChartInstance) {\n for (const key in this._chartEventMap) {\n (this._chartEventMap[key] || []).forEach(e => {\n if (e.query) {\n activeChartInstance.on(key, e.query, e.callback);\n } else {\n activeChartInstance.on(key, e.callback);\n }\n });\n }\n }\n }\n changeRecordOrder(source: number, target: number) {\n //\n }\n hasCustomCellStyle(customStyleId: string): boolean {\n return this.customCellStylePlugin?.hasCustomCellStyle(customStyleId);\n }\n registerCustomCellStyle(customStyleId: string, customStyle: ColumnStyleOption | undefined | null) {\n this.customCellStylePlugin?.registerCustomCellStyle(customStyleId, customStyle);\n }\n\n arrangeCustomCellStyle(\n cellPos: { col?: number; row?: number; range?: CellRange },\n customStyleId: string,\n forceFastUpdate?: boolean\n ) {\n this.customCellStylePlugin?.arrangeCustomCellStyle(cellPos, customStyleId, forceFastUpdate);\n }\n isSeriesNumber(col: number, row: number): boolean {\n return this.internalProps.layoutMap.isSeriesNumber(col, row);\n }\n isHasSeriesNumber(): boolean {\n return this.internalProps.layoutMap?.leftRowSeriesNumberColumnCount > 0;\n }\n get leftRowSeriesNumberCount(): number {\n return this.internalProps.layoutMap?.leftRowSeriesNumberColumnCount ?? 0;\n }\n setMinMaxLimitWidth(setWidth: boolean = false) {\n const internalProps = this.internalProps;\n //设置列宽\n for (let col = 0; col < internalProps.layoutMap.columnWidths.length; col++) {\n if (this.internalProps._widthResizedColMap.has(col)) {\n continue;\n }\n const { width, minWidth, maxWidth } = internalProps.layoutMap.columnWidths?.[col] ?? {};\n // width 为 \"auto\" 时先不存储ColWidth\n if (\n setWidth &&\n width &&\n ((typeof width === 'string' && width !== 'auto') || (typeof width === 'number' && width > 0))\n ) {\n this._setColWidth(col, width);\n }\n if (minWidth && ((typeof minWidth === 'number' && minWidth > 0) || typeof minWidth === 'string')) {\n this.setMinColWidth(col, minWidth);\n }\n if (maxWidth && ((typeof maxWidth === 'number' && maxWidth > 0) || typeof maxWidth === 'string')) {\n this.setMaxColWidth(col, maxWidth);\n }\n }\n }\n setSortedIndexMap(field: FieldDef, filedMap: ISortedMapItem) {\n this.dataSource?.setSortedIndexMap(field, filedMap);\n }\n // startInertia() {\n // startInertia(0, -1, 1, this.stateManager);\n // }\n\n checkReactCustomLayout() {\n if (!this.reactCustomLayout) {\n this.reactCustomLayout = new ReactCustomLayout(this);\n }\n }\n\n get bodyDomContainer() {\n return this.internalProps.bodyDomContainer;\n }\n get headerDomContainer() {\n return this.internalProps.headerDomContainer;\n }\n get frozenBodyDomContainer() {\n return this.internalProps.frozenBodyDomContainer;\n }\n get frozenHeaderDomContainer() {\n return this.internalProps.frozenHeaderDomContainer;\n }\n get rightFrozenBodyDomContainer() {\n return this.internalProps.rightFrozenBodyDomContainer;\n }\n get rightFrozenHeaderDomContainer() {\n return this.internalProps.rightFrozenHeaderDomContainer;\n }\n get frozenBottomDomContainer() {\n return this.internalProps.frozenBottomDomContainer;\n }\n get bottomDomContainer() {\n return this.internalProps.bottomDomContainer;\n }\n get rightFrozenBottomDomContainer() {\n return this.internalProps.rightFrozenBottomDomContainer;\n }\n /**\n * 显示移动列或移动行的高亮线 如果(col,row)单元格是列头 则显示高亮列线; 如果(col,row)单元格是行头 则显示高亮行线\n * @param col 在表头哪一列后显示高亮线\n * @param row 在表头哪一行后显示高亮线\n */\n showMoverLine(col: number, row: number) {\n this.scenegraph.component.showMoveCol(col, row, 0);\n this.scenegraph.renderSceneGraph();\n }\n /**\n * 隐藏掉移动列或移动行的高亮线\n * @param col\n * @param row\n */\n hideMoverLine(col: number, row: number) {\n this.scenegraph.component.hideMoveCol();\n this.scenegraph.renderSceneGraph();\n }\n /** 关闭表格的滚动 */\n disableScroll() {\n this.eventManager.disableScroll();\n }\n /** 开启表格的滚动 */\n enableScroll() {\n this.eventManager.enableScroll();\n }\n\n getGroupTitleLevel(col: number, row: number): number | undefined {\n return undefined;\n }\n\n // anmiation\n scrollToRow(row: number, animationOption?: ITableAnimationOption | boolean) {\n if (!animationOption) {\n this.scrollToCell({ row });\n return;\n }\n this.animationManager.scrollTo({ row }, animationOption);\n }\n scrollToCol(col: number, animationOption?: ITableAnimationOption | boolean) {\n if (!animationOption) {\n this.scrollToCell({ col });\n return;\n }\n this.animationManager.scrollTo({ col }, animationOption);\n }\n /**\n * 滚动到具体某个单元格位置\n * @param cellAddr 要滚动到的单元格位置\n * @param animationOption 动画配置\n */\n scrollToCell(cellAddr: { col?: number; row?: number }, animationOption?: ITableAnimationOption | boolean) {\n if (animationOption) {\n this.animationManager.scrollTo(cellAddr, animationOption);\n return;\n }\n const drawRange = this.getDrawRange();\n if (isValid(cellAddr.col) && cellAddr.col >= this.frozenColCount) {\n const frozenWidth = this.getFrozenColsWidth();\n const left = this.getColsWidth(0, cellAddr.col - 1);\n this.scrollLeft = Math.min(left - frozenWidth, this.getAllColsWidth() - drawRange.width);\n }\n if (isValid(cellAddr.row) && cellAddr.row >= this.frozenRowCount) {\n const frozenHeight = this.getFrozenRowsHeight();\n const top = this.getRowsHeight(0, cellAddr.row - 1);\n this.scrollTop = Math.min(top - frozenHeight, this.getAllRowsHeight() - drawRange.height);\n }\n this.render();\n }\n checkHasColumnAutoWidth(): boolean {\n return checkHasColumnAutoWidth(this);\n }\n get containerFit(): { width: boolean; height: boolean } {\n return this._containerFit;\n }\n set containerFit(containerFit: boolean | { width?: boolean; height?: boolean }) {\n if (typeof containerFit === 'boolean') {\n this._containerFit = { width: containerFit, height: containerFit };\n } else if (containerFit && typeof containerFit === 'object') {\n this._containerFit = {\n width: containerFit.width ?? true,\n height: containerFit.height ?? true\n };\n } else {\n this._containerFit = { width: false, height: false };\n }\n }\n /** 是否选中了指定列 整列单元格被选中*/\n isColumnSelected(col: number): boolean {\n const selectRange = this.stateManager.select.ranges;\n for (let i = 0; i <= selectRange.length - 1; i++) {\n const range = selectRange[i];\n if (\n range.start.col <= col &&\n range.end.col >= col &&\n range.start.row === 0 &&\n range.end.row === this.rowCount - 1\n ) {\n return true;\n }\n }\n return false;\n }\n /** 是否选中了指定行 */\n isRowSelected(row: number): boolean {\n const selectRange = this.stateManager.select.ranges;\n for (let i = 0; i <= selectRange.length - 1; i++) {\n const range = selectRange[i];\n if (\n range.start.row <= row &&\n range.end.row >= row &&\n range.start.col === 0 &&\n range.end.col === this.colCount - 1\n ) {\n return true;\n }\n }\n return false;\n }\n}\n"]}
|