@visactor/vtable-plugins 1.22.2 → 1.22.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/cjs/filter/filter-engine.js +3 -1
  2. package/cjs/filter/filter-engine.js.map +1 -1
  3. package/cjs/filter/filter-state-manager.d.ts +0 -1
  4. package/cjs/filter/filter-state-manager.js +1 -12
  5. package/cjs/filter/filter-state-manager.js.map +1 -1
  6. package/cjs/filter/filter.js +16 -3
  7. package/cjs/filter/filter.js.map +1 -1
  8. package/cjs/master-detail-plugin/config.d.ts +6 -1
  9. package/cjs/master-detail-plugin/config.js +54 -7
  10. package/cjs/master-detail-plugin/config.js.map +1 -1
  11. package/cjs/master-detail-plugin/core.d.ts +2 -1
  12. package/cjs/master-detail-plugin/core.js +31 -12
  13. package/cjs/master-detail-plugin/core.js.map +1 -1
  14. package/cjs/master-detail-plugin/events.js +1 -1
  15. package/cjs/master-detail-plugin/events.js.map +1 -1
  16. package/cjs/master-detail-plugin/subtable.d.ts +4 -0
  17. package/cjs/master-detail-plugin/subtable.js +42 -4
  18. package/cjs/master-detail-plugin/subtable.js.map +1 -1
  19. package/cjs/master-detail-plugin/types.d.ts +1 -1
  20. package/cjs/master-detail-plugin/types.js.map +1 -1
  21. package/cjs/table-carousel-animation.js +3 -3
  22. package/cjs/table-carousel-animation.js.map +1 -1
  23. package/cjs/table-series-number.d.ts +4 -0
  24. package/cjs/table-series-number.js +12 -4
  25. package/cjs/table-series-number.js.map +1 -1
  26. package/dist/vtable-plugins.js +240 -69
  27. package/dist/vtable-plugins.min.js +3 -3
  28. package/es/filter/filter-engine.js +3 -1
  29. package/es/filter/filter-engine.js.map +1 -1
  30. package/es/filter/filter-state-manager.d.ts +0 -1
  31. package/es/filter/filter-state-manager.js +1 -12
  32. package/es/filter/filter-state-manager.js.map +1 -1
  33. package/es/filter/filter.js +15 -3
  34. package/es/filter/filter.js.map +1 -1
  35. package/es/master-detail-plugin/config.d.ts +6 -1
  36. package/es/master-detail-plugin/config.js +54 -7
  37. package/es/master-detail-plugin/config.js.map +1 -1
  38. package/es/master-detail-plugin/core.d.ts +2 -1
  39. package/es/master-detail-plugin/core.js +30 -12
  40. package/es/master-detail-plugin/core.js.map +1 -1
  41. package/es/master-detail-plugin/events.js +1 -1
  42. package/es/master-detail-plugin/events.js.map +1 -1
  43. package/es/master-detail-plugin/subtable.d.ts +4 -0
  44. package/es/master-detail-plugin/subtable.js +41 -4
  45. package/es/master-detail-plugin/subtable.js.map +1 -1
  46. package/es/master-detail-plugin/types.d.ts +1 -1
  47. package/es/master-detail-plugin/types.js.map +1 -1
  48. package/es/table-carousel-animation.js +3 -3
  49. package/es/table-carousel-animation.js.map +1 -1
  50. package/es/table-series-number.d.ts +4 -0
  51. package/es/table-series-number.js +12 -4
  52. package/es/table-series-number.js.map +1 -1
  53. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/master-detail-plugin/core.ts"],"names":[],"mappings":"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","file":"core.js","sourcesContent":["import * as VTable from '@visactor/vtable';\r\nimport type { Group } from '@visactor/vtable/es/scenegraph/graphic/group';\r\nimport type { MasterDetailPluginOptions } from './types';\r\nimport { includesRecordIndex, findRecordIndexPosition } from './types';\r\nimport { getInternalProps, getRecordByRowIndex, getOriginalRowHeight } from './utils';\r\nimport { ConfigManager } from './config';\r\nimport { EventManager } from './events';\r\nimport { SubTableManager } from './subtable';\r\nimport { TableAPIExtensions } from './table-api-extensions';\r\nimport { bindMasterDetailCheckboxChange } from './checkbox';\r\n\r\n/**\r\n * 主从表插件核心类\r\n */\r\nexport class MasterDetailPlugin implements VTable.plugins.IVTablePlugin {\r\n id = `Master Detail Plugin`;\r\n name = 'Master Detail Plugin';\r\n runTime = [\r\n VTable.TABLE_EVENT_TYPE.BEFORE_INIT,\r\n VTable.TABLE_EVENT_TYPE.INITIALIZED,\r\n VTable.TABLE_EVENT_TYPE.SORT_CLICK,\r\n VTable.TABLE_EVENT_TYPE.AFTER_SORT,\r\n VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_CELL_CONTENT_WIDTH,\r\n VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_SELECT_BORDER_HEIGHT\r\n ];\r\n\r\n pluginOptions: MasterDetailPluginOptions;\r\n table: VTable.ListTable;\r\n private configManager: ConfigManager;\r\n private eventManager: EventManager;\r\n private subTableManager: SubTableManager;\r\n private tableAPIExtensions: TableAPIExtensions;\r\n private resizeObserver?: ResizeObserver;\r\n private checkboxCascadeCleanup: () => void;\r\n\r\n constructor(pluginOptions: MasterDetailPluginOptions = {}) {\r\n this.pluginOptions = pluginOptions;\r\n }\r\n run(...args: unknown[]): boolean | void {\r\n const eventArgs = args[0];\r\n const runTime = args[1];\r\n const table = args[2] as VTable.ListTable;\r\n\r\n if (runTime === VTable.TABLE_EVENT_TYPE.BEFORE_INIT) {\r\n this.table = table;\r\n this.initializeManagers();\r\n this.configManager.injectMasterDetailOptions(\r\n (eventArgs as { options: VTable.ListTableConstructorOptions }).options\r\n );\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.INITIALIZED) {\r\n this.setupMasterDetailFeatures();\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.SORT_CLICK) {\r\n // 排序前处理:保存展开状态并收起所有行\r\n this.eventManager.executeMasterDetailBeforeSort();\r\n return true;\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.AFTER_SORT) {\r\n // 排序后处理:恢复展开状态\r\n this.eventManager.executeMasterDetailAfterSort();\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_CELL_CONTENT_WIDTH) {\r\n // 单元格内容处理\r\n this.eventManager.handleAfterUpdateCellContentWidth(eventArgs as any);\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_SELECT_BORDER_HEIGHT) {\r\n // 高亮处理\r\n this.eventManager.handleAfterUpdateSelectBorderHeight(eventArgs as any);\r\n }\r\n }\r\n\r\n /**\r\n * 初始化管理器\r\n */\r\n private initializeManagers(): void {\r\n this.configManager = new ConfigManager(this.pluginOptions, this.table);\r\n this.eventManager = new EventManager(this.table);\r\n const enableCheckboxCascade = this.pluginOptions.enableCheckboxCascade ?? true;\r\n this.subTableManager = new SubTableManager(this.table, enableCheckboxCascade);\r\n\r\n // 设置配置管理器的行展开状态检查函数\r\n this.configManager.setRowExpandedChecker((row: number) => this.eventManager.isRowExpanded(row));\r\n\r\n // 设置事件管理器的回调函数\r\n this.eventManager.setCallbacks({\r\n onUpdateSubTablePositions: () => this.subTableManager.recalculateAllSubTablePositions(),\r\n onUpdateSubTablePositionsForRow: () => this.subTableManager.updateSubTablePositionsForRowResize(),\r\n onExpandRow: (rowIndex: number, colIndex?: number) => this.expandRow(rowIndex, colIndex),\r\n onCollapseRow: (rowIndex: number, colIndex?: number) => this.collapseRow(rowIndex, colIndex),\r\n onCollapseRowToNoRealRecordIndex: (rowIndex: number) => this.collapseRowToNoRealRecordIndex(rowIndex),\r\n onToggleRowExpand: (rowIndex: number, colIndex?: number) => this.toggleRowExpand(rowIndex, colIndex),\r\n getOriginalRowHeight: (bodyRowIndex: number) => getOriginalRowHeight(this.table, bodyRowIndex)\r\n });\r\n\r\n // 设置子表管理器的回调函数\r\n this.subTableManager.setCallbacks({\r\n getDetailConfigForRecord: (record, bodyRowIndex) =>\r\n this.configManager.getDetailConfigForRecord(record, bodyRowIndex)\r\n });\r\n }\r\n\r\n /**\r\n * 设置主从表功能\r\n */\r\n private setupMasterDetailFeatures(): void {\r\n // 初始化内部属性\r\n this.initInternalProps();\r\n // 绑定事件处理器\r\n this.eventManager.bindEventHandlers();\r\n // 设置统一选择状态管理\r\n this.setupUnifiedSelectionManagement();\r\n // 扩展表格 API\r\n this.extendTableAPI();\r\n // 初始化checkbox联动功能\r\n this.initCheckboxCascade();\r\n }\r\n\r\n // 主表点击事件处理器引用\r\n private mainTableClickHandler?: () => void;\r\n\r\n /**\r\n * 设置统一选中状态管理\r\n */\r\n private setupUnifiedSelectionManagement(): void {\r\n // 绑定主表的点击事件,清除所有子表选中状态\r\n this.mainTableClickHandler = () => {\r\n this.clearAllSubTableVisibleSelections();\r\n };\r\n this.table.on('click_cell', this.mainTableClickHandler);\r\n }\r\n\r\n /**\r\n * 初始化checkbox联动功能\r\n * 设置主从表之间的复选框状态同步,并保存清理函数以便后续释放资源\r\n */\r\n private initCheckboxCascade(): void {\r\n // 检查是否启用checkbox级联功能,默认为 true\r\n const enableCheckboxCascade = this.pluginOptions.enableCheckboxCascade ?? true;\r\n if (enableCheckboxCascade) {\r\n // 设置checkbox联动并保存清理函数\r\n this.checkboxCascadeCleanup = bindMasterDetailCheckboxChange(this.table, this.eventManager);\r\n }\r\n }\r\n\r\n /**\r\n * 初始化内部属性\r\n */\r\n private initInternalProps(): void {\r\n const internalProps = getInternalProps(this.table);\r\n internalProps.expandedRecordIndices = [];\r\n internalProps.subTableInstances = new Map();\r\n internalProps.originalRowHeights = new Map();\r\n internalProps.subTableCheckboxStates = new Map();\r\n }\r\n\r\n /**\r\n * 扩展表格 API\r\n */\r\n private extendTableAPI(): void {\r\n // 创建 TableAPIExtensions 实例\r\n this.tableAPIExtensions = new TableAPIExtensions(this.table, this.configManager, this.eventManager, {\r\n addUnderlineToCell: (cellGroup: Group) => this.addUnderlineToCell(cellGroup),\r\n updateOriginalHeightsAfterAdaptive: (\r\n expandedRowsInfo: Map<number, { baseHeight: number; detailHeight: number }>\r\n ) => this.updateOriginalHeightsAfterAdaptive(expandedRowsInfo),\r\n collapseRowToNoRealRecordIndex: (rowIndex: number) => this.collapseRowToNoRealRecordIndex(rowIndex),\r\n expandRow: (rowIndex: number) => this.expandRow(rowIndex),\r\n restoreExpandedStatesAfter: () => this.restoreExpandedStatesAfter(),\r\n collapseRow: (rowIndex: number) => this.collapseRow(rowIndex),\r\n updateSubTablePositions: () => this.subTableManager.recalculateAllSubTablePositions(),\r\n updateRowHeightForExpand: (rowIndex: number, deltaHeight: number) =>\r\n this.updateRowHeightForExpand(rowIndex, deltaHeight)\r\n });\r\n\r\n // 执行API扩展\r\n this.tableAPIExtensions.extendTableAPI();\r\n }\r\n\r\n /**\r\n * 在 adaptive 处理后更新原始高度缓存\r\n */\r\n private updateOriginalHeightsAfterAdaptive(\r\n expandedRowsInfo: Map<number, { baseHeight: number; detailHeight: number }>\r\n ): void {\r\n const internalProps = getInternalProps(this.table);\r\n // 更新展开行的原始高度缓存\r\n for (const [rowIndex, info] of expandedRowsInfo) {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n if (internalProps.originalRowHeights) {\r\n // 将新的基础高度设置为原始高度\r\n internalProps.originalRowHeights.set(bodyRowIndex, info.baseHeight);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 分页后恢复展开状态\r\n */\r\n private restoreExpandedStatesAfter(): void {\r\n const internalProps = getInternalProps(this.table);\r\n if (!internalProps.expandedRecordIndices || internalProps.expandedRecordIndices.length === 0) {\r\n return;\r\n }\r\n const currentPagerData = this.table.dataSource._currentPagerIndexedData;\r\n if (!currentPagerData) {\r\n return;\r\n }\r\n internalProps.expandedRecordIndices.forEach(recordIndex => {\r\n try {\r\n const bodyRowIndex = this.table.getBodyRowIndexByRecordIndex(recordIndex);\r\n if (bodyRowIndex >= 0) {\r\n const targetRowIndex = bodyRowIndex + this.table.columnHeaderLevelCount;\r\n this.expandRow(targetRowIndex);\r\n }\r\n } catch (error) {\r\n console.warn(`处理记录索引 ${recordIndex} 时出错:`, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 展开行\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n expandRow(rowIndex: number, colIndex?: number): void {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n const internalProps = getInternalProps(this.table);\r\n if (this.eventManager.isRowExpanded(rowIndex)) {\r\n return;\r\n }\r\n\r\n const realRecordIndex = this.table.getRecordIndexByCell(0, rowIndex);\r\n if (realRecordIndex === undefined || realRecordIndex === null) {\r\n return;\r\n }\r\n // 更新展开行的数据源\r\n if (internalProps.expandedRecordIndices) {\r\n if (!includesRecordIndex(internalProps.expandedRecordIndices, realRecordIndex)) {\r\n internalProps.expandedRecordIndices.push(realRecordIndex);\r\n }\r\n }\r\n // 更新展开状态数组\r\n this.eventManager.addExpandedRow(rowIndex);\r\n\r\n const originalHeight = this.table.getRowHeight(rowIndex);\r\n if (internalProps.originalRowHeights) {\r\n internalProps.originalRowHeights.set(bodyRowIndex, originalHeight);\r\n }\r\n const record = getRecordByRowIndex(this.table, bodyRowIndex);\r\n const detailConfig = this.configManager.getDetailConfigForRecord(record, bodyRowIndex);\r\n const height = detailConfig?.style?.height || 300;\r\n\r\n const childrenData = Array.isArray(record.children) ? record.children : [];\r\n\r\n const deltaHeight = height;\r\n this.updateRowHeightForExpand(rowIndex, deltaHeight);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, deltaHeight);\r\n internalProps._heightResizedRowMap.add(rowIndex);\r\n this.subTableManager.renderSubTable(bodyRowIndex, childrenData, (record, bodyRowIndex) =>\r\n this.configManager.getDetailConfigForRecord(record, bodyRowIndex)\r\n );\r\n this.subTableManager.recalculateAllSubTablePositions(\r\n bodyRowIndex + 1,\r\n undefined,\r\n (record: unknown, bodyRowIndex: number) => this.configManager.getDetailConfigForRecord(record, bodyRowIndex)\r\n );\r\n if (rowIndex !== this.table.rowCount - 1) {\r\n this.drawUnderlineForRow(rowIndex);\r\n }\r\n this.refreshRowIcon(rowIndex, colIndex);\r\n if (this.table.heightMode === 'adaptive') {\r\n this.table.scenegraph.dealHeightMode();\r\n }\r\n }\r\n\r\n /**\r\n * 收起行\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n collapseRow(rowIndex: number, colIndex?: number): void {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n const internalProps = getInternalProps(this.table);\r\n\r\n if (!this.eventManager.isRowExpanded(rowIndex)) {\r\n return;\r\n }\r\n\r\n const realRecordIndex = this.table.getRecordIndexByCell(0, rowIndex);\r\n if (realRecordIndex === undefined || realRecordIndex === null) {\r\n return;\r\n }\r\n // 更新展开行的数据源\r\n this.subTableManager.removeSubTable(bodyRowIndex);\r\n if (internalProps.expandedRecordIndices) {\r\n const index = findRecordIndexPosition(internalProps.expandedRecordIndices, realRecordIndex);\r\n if (index > -1) {\r\n internalProps.expandedRecordIndices.splice(index, 1);\r\n }\r\n }\r\n\r\n // 更新展开状态数组\r\n this.eventManager.removeExpandedRow(rowIndex);\r\n\r\n const currentHeight = this.table.getRowHeight(rowIndex);\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n const deltaHeight = currentHeight - originalHeight;\r\n this.updateRowHeightForExpand(rowIndex, -deltaHeight);\r\n internalProps._heightResizedRowMap.delete(rowIndex);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, -deltaHeight);\r\n if (internalProps.originalRowHeights) {\r\n internalProps.originalRowHeights.delete(bodyRowIndex);\r\n }\r\n if (rowIndex !== this.table.rowCount - 1) {\r\n this.removeUnderlineFromRow(rowIndex);\r\n }\r\n this.subTableManager.recalculateAllSubTablePositions(\r\n bodyRowIndex + 1,\r\n undefined,\r\n (record: unknown, bodyRowIndex: number) => this.configManager.getDetailConfigForRecord(record, bodyRowIndex)\r\n );\r\n this.refreshRowIcon(rowIndex, colIndex);\r\n if (this.table.heightMode === 'adaptive') {\r\n this.table.scenegraph.dealHeightMode();\r\n }\r\n }\r\n\r\n /**\r\n * 收起行(不修改expandedRecordIndices)\r\n */\r\n private collapseRowToNoRealRecordIndex(rowIndex: number): void {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n const internalProps = getInternalProps(this.table);\r\n\r\n if (!this.eventManager.isRowExpanded(rowIndex)) {\r\n return;\r\n }\r\n this.subTableManager.removeSubTable(bodyRowIndex);\r\n this.eventManager.removeExpandedRow(rowIndex);\r\n const currentHeight = this.table.getRowHeight(rowIndex);\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n const deltaHeight = currentHeight - originalHeight;\r\n this.updateRowHeightForExpand(rowIndex, -deltaHeight);\r\n internalProps._heightResizedRowMap.delete(rowIndex);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, -deltaHeight);\r\n if (internalProps.originalRowHeights) {\r\n internalProps.originalRowHeights.delete(bodyRowIndex);\r\n }\r\n\r\n if (rowIndex !== this.table.rowCount - 1) {\r\n this.removeUnderlineFromRow(rowIndex);\r\n }\r\n this.subTableManager.recalculateAllSubTablePositions(\r\n bodyRowIndex + 1,\r\n undefined,\r\n (record: unknown, bodyRowIndex: number) => this.configManager.getDetailConfigForRecord(record, bodyRowIndex)\r\n );\r\n this.refreshRowIcon(rowIndex);\r\n if (this.table.heightMode === 'adaptive') {\r\n this.table.scenegraph.dealHeightMode();\r\n }\r\n }\r\n\r\n /**\r\n * 切换行展开状态\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n toggleRowExpand(rowIndex: number, colIndex?: number): void {\r\n if (this.eventManager.isRowExpanded(rowIndex)) {\r\n this.collapseRow(rowIndex, colIndex);\r\n } else {\r\n this.expandRow(rowIndex, colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * 更新行高用于展开\r\n */\r\n private updateRowHeightForExpand(rowIndex: number, deltaHeight: number): void {\r\n this.table._setRowHeight(rowIndex, this.table.getRowHeight(rowIndex) + deltaHeight, true);\r\n\r\n // 更新以下行的位置\r\n const rowStart = rowIndex + 1;\r\n let rowEnd = 0;\r\n\r\n if (rowIndex < this.table.frozenRowCount) {\r\n rowEnd = this.table.frozenRowCount - 1;\r\n } else if (rowIndex >= this.table.rowCount - this.table.bottomFrozenRowCount) {\r\n rowEnd = this.table.rowCount - 1;\r\n } else {\r\n rowEnd = Math.min(\r\n (this.table.scenegraph as { proxy: { rowEnd: number } }).proxy.rowEnd,\r\n this.table.rowCount - this.table.bottomFrozenRowCount - 1\r\n );\r\n }\r\n\r\n for (let colIndex = 0; colIndex < this.table.colCount; colIndex++) {\r\n for (let rowIdx = rowStart; rowIdx <= rowEnd; rowIdx++) {\r\n const cellGroup = this.table.scenegraph.highPerformanceGetCell(colIndex, rowIdx);\r\n if (cellGroup.role === 'cell') {\r\n cellGroup.setAttribute('y', cellGroup.attribute.y + deltaHeight);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 为指定行绘制下划线\r\n */\r\n private drawUnderlineForRow(rowIndex: number): void {\r\n const sceneGraph = this.table.scenegraph;\r\n if (!sceneGraph) {\r\n return;\r\n }\r\n // 获取指定行的所有cell\r\n const rowCells = this.getRowCells(rowIndex);\r\n if (rowCells.length === 0) {\r\n return;\r\n }\r\n rowCells.forEach((cellGroup: Group, index: number) => {\r\n if (cellGroup && cellGroup.attribute) {\r\n this.addUnderlineToCell(cellGroup);\r\n }\r\n });\r\n // 触发重新渲染\r\n this.table.scenegraph.updateNextFrame();\r\n }\r\n\r\n /**\r\n * 获取指定行的所有cell元素\r\n */\r\n private getRowCells(rowIndex: number): Group[] {\r\n const cells: Group[] = [];\r\n for (let col = 0; col < this.table.colCount; col++) {\r\n const cellGroup = this.table.scenegraph.getCell(col, rowIndex);\r\n if (cellGroup && cellGroup.role === 'cell') {\r\n cells.push(cellGroup);\r\n }\r\n }\r\n return cells;\r\n }\r\n\r\n /**\r\n * 为cell添加下划线\r\n */\r\n private addUnderlineToCell(cellGroup: any): void {\r\n const currentAttr = cellGroup.attribute;\r\n const currentStrokeArrayWidth =\r\n currentAttr.strokeArrayWidth ||\r\n (currentAttr.lineWidth\r\n ? [currentAttr.lineWidth, currentAttr.lineWidth, currentAttr.lineWidth, currentAttr.lineWidth]\r\n : [1, 1, 1, 1]);\r\n const currentStrokeArrayColor =\r\n currentAttr.strokeArrayColor ||\r\n (currentAttr.stroke\r\n ? [currentAttr.stroke, currentAttr.stroke, currentAttr.stroke, currentAttr.stroke]\r\n : ['transparent', 'transparent', 'transparent', 'transparent']);\r\n const isAlreadyEnhanced = cellGroup._hasUnderline;\r\n if (!isAlreadyEnhanced) {\r\n cellGroup._originalStrokeArrayWidth = [...currentStrokeArrayWidth];\r\n cellGroup._originalStrokeArrayColor = [...currentStrokeArrayColor];\r\n cellGroup._hasUnderline = true;\r\n }\r\n const originalStrokeArrayWidth = cellGroup._originalStrokeArrayWidth || currentStrokeArrayWidth;\r\n const originalStrokeArrayColor = cellGroup._originalStrokeArrayColor || currentStrokeArrayColor;\r\n const enhancedStrokeArrayWidth = [...originalStrokeArrayWidth];\r\n const enhancedStrokeArrayColor = [...originalStrokeArrayColor];\r\n const enhancedWidth = ((originalStrokeArrayWidth[2] || 1) * 0.75 + (originalStrokeArrayWidth[0] || 1) * 0.75) * 2;\r\n enhancedStrokeArrayWidth[2] = enhancedWidth;\r\n if (originalStrokeArrayColor[2] === 'transparent' || !originalStrokeArrayColor[2]) {\r\n const theme = this.table.theme;\r\n enhancedStrokeArrayColor[2] = theme?.bodyStyle?.borderColor || '#e1e4e8';\r\n } else {\r\n enhancedStrokeArrayColor[2] = originalStrokeArrayColor[2];\r\n }\r\n cellGroup.setAttributes({\r\n strokeArrayWidth: enhancedStrokeArrayWidth,\r\n strokeArrayColor: enhancedStrokeArrayColor,\r\n stroke: true\r\n });\r\n }\r\n\r\n /**\r\n * 删除展开行的下划线\r\n */\r\n private removeUnderlineFromRow(rowIndex: number): void {\r\n const rowCells = this.getRowCells(rowIndex);\r\n rowCells.forEach((cellGroup: any, index: number) => {\r\n if (cellGroup && cellGroup._hasUnderline) {\r\n this.removeUnderlineFromCell(cellGroup);\r\n }\r\n });\r\n this.table.scenegraph.updateNextFrame();\r\n }\r\n\r\n /**\r\n * 从cell中删除下划线\r\n */\r\n private removeUnderlineFromCell(cellGroup: any): void {\r\n if (cellGroup._hasUnderline) {\r\n // 恢复原始的strokeArray样式\r\n if (cellGroup._originalStrokeArrayWidth && cellGroup._originalStrokeArrayColor) {\r\n cellGroup.setAttributes({\r\n strokeArrayWidth: cellGroup._originalStrokeArrayWidth,\r\n strokeArrayColor: cellGroup._originalStrokeArrayColor\r\n });\r\n delete cellGroup._originalStrokeArrayWidth;\r\n delete cellGroup._originalStrokeArrayColor;\r\n }\r\n // 清除下划线标记\r\n cellGroup._hasUnderline = false;\r\n }\r\n }\r\n\r\n /**\r\n * 刷新行图标\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n private refreshRowIcon(rowIndex: number, colIndex?: number): void {\r\n let targetColumnIndex: number;\r\n if (typeof colIndex === 'number') {\r\n targetColumnIndex = colIndex;\r\n } else {\r\n const hasRowSeriesNumber = !!this.table.options.rowSeriesNumber;\r\n targetColumnIndex = hasRowSeriesNumber ? 1 : 0;\r\n }\r\n\r\n const record = this.table.getCellOriginRecord(targetColumnIndex, rowIndex);\r\n if (record && typeof record === 'object') {\r\n const recordObj = record as Record<string, unknown>;\r\n const HierarchyState = VTable.TYPES.HierarchyState;\r\n const isExpanded = this.eventManager.isRowExpanded(rowIndex);\r\n recordObj.hierarchyState = isExpanded ? HierarchyState.expand : HierarchyState.collapse;\r\n this.table.scenegraph.updateHierarchyIcon(targetColumnIndex, rowIndex);\r\n }\r\n }\r\n\r\n update(): void {\r\n if (this.table) {\r\n this.subTableManager.recalculateAllSubTablePositions(0, undefined, (record: unknown, bodyRowIndex: number) =>\r\n this.configManager.getDetailConfigForRecord(record, bodyRowIndex)\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 设置记录的子数据并展开\r\n */\r\n setRecordChildren(children: unknown[], col: number, row: number): void {\r\n // 获取原始记录数据\r\n const recordIndex = this.table.getRecordIndexByCell(col, row);\r\n if (recordIndex === undefined || recordIndex === null) {\r\n console.warn('Invalid row, cannot get record index');\r\n return;\r\n }\r\n\r\n const realRecordIndex = typeof recordIndex === 'number' ? recordIndex : recordIndex[0];\r\n const record = this.table.dataSource.get(realRecordIndex);\r\n if (!record) {\r\n console.warn('Cannot find record for index:', realRecordIndex);\r\n return;\r\n }\r\n\r\n // 直接修改原始记录的 children 属性\r\n (record as Record<string, unknown>).children = children;\r\n this.expandRow(row, col);\r\n this.table.scenegraph.updateCellContent(col, row);\r\n }\r\n\r\n release(): void {\r\n // 设置释放标志\r\n const internalProps = getInternalProps(this.table);\r\n if (internalProps) {\r\n (internalProps as { _isReleasing?: boolean })._isReleasing = true;\r\n }\r\n\r\n try {\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n this.resizeObserver = undefined;\r\n }\r\n\r\n // 清理checkbox联动功能\r\n if (this.checkboxCascadeCleanup) {\r\n try {\r\n this.checkboxCascadeCleanup();\r\n } catch (error) {\r\n console.warn('Error during checkbox cascade cleanup:', error);\r\n }\r\n this.checkboxCascadeCleanup = undefined;\r\n }\r\n\r\n // 清理事件管理器\r\n if (this.eventManager) {\r\n try {\r\n this.eventManager.cleanup();\r\n } catch (error) {\r\n console.warn('Error during event manager cleanup:', error);\r\n }\r\n }\r\n\r\n // 清理子表管理器\r\n if (this.subTableManager) {\r\n try {\r\n this.subTableManager.cleanup();\r\n } catch (error) {\r\n console.warn('Error during sub table manager cleanup:', error);\r\n }\r\n }\r\n\r\n // 清理配置管理器\r\n if (this.configManager) {\r\n try {\r\n this.configManager.release();\r\n } catch (error) {\r\n console.warn('Error during config manager cleanup:', error);\r\n }\r\n }\r\n\r\n // 清理主从表功能\r\n this.cleanupMasterDetailFeatures();\r\n\r\n // 清理内部属性\r\n if (this.table && internalProps) {\r\n try {\r\n // 清理Map和Set,防止内存泄露\r\n internalProps.expandedRecordIndices?.splice(0);\r\n internalProps.subTableInstances?.clear();\r\n internalProps.originalRowHeights?.clear();\r\n internalProps.subTableCheckboxStates?.clear();\r\n internalProps._heightResizedRowMap?.clear();\r\n } catch (error) {\r\n console.warn('Error clearing internal props:', error);\r\n }\r\n }\r\n } catch (error) {\r\n console.warn('Error during release:', error);\r\n } finally {\r\n // 避免循环引用\r\n try {\r\n (this as unknown as { configManager: unknown }).configManager = null;\r\n (this as unknown as { eventManager: unknown }).eventManager = null;\r\n (this as unknown as { subTableManager: unknown }).subTableManager = null;\r\n (this as unknown as { tableAPIExtensions: unknown }).tableAPIExtensions = null;\r\n (this as unknown as { table: unknown }).table = null;\r\n (this as unknown as { pluginOptions: unknown }).pluginOptions = null;\r\n } catch (error) {\r\n console.warn('Error clearing references:', error);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 清除所有子表的可见选中状态\r\n */\r\n private clearAllSubTableVisibleSelections(): void {\r\n const internalProps = getInternalProps(this.table);\r\n internalProps.subTableInstances?.forEach(subTable => {\r\n if (subTable && typeof (subTable as { clearSelected?: () => void }).clearSelected === 'function') {\r\n (subTable as { clearSelected: () => void }).clearSelected();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 获取所有子表实例\r\n * @returns 子表实例的Map,键为bodyRowIndex,值为VTable实例\r\n */\r\n getAllSubTableInstances(): Map<number, VTable.ListTable> | null {\r\n return this.subTableManager.getAllSubTableInstances();\r\n }\r\n\r\n /**\r\n * 根据主表行号获取子表实例\r\n * @param rowIndex 主表行索引(包含表头)\r\n * @returns 子表实例,如果不存在则返回null\r\n */\r\n getSubTableByRowIndex(rowIndex: number): VTable.ListTable | null {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n return this.subTableManager.getSubTableInstance(bodyRowIndex);\r\n }\r\n\r\n /**\r\n * 根据主表body行号获取子表实例\r\n * @param bodyRowIndex 主表body行索引(不包含表头)\r\n * @returns 子表实例,如果不存在则返回null\r\n */\r\n getSubTableByBodyRowIndex(bodyRowIndex: number): VTable.ListTable | null {\r\n return this.subTableManager.getSubTableInstance(bodyRowIndex);\r\n }\r\n\r\n /**\r\n * 根据条件筛选子表实例\r\n * @param predicate 筛选条件函数\r\n * @returns 符合条件的子表实例数组\r\n */\r\n filterSubTables(\r\n predicate: (bodyRowIndex: number, subTable: VTable.ListTable, record?: unknown) => boolean\r\n ): Array<{ bodyRowIndex: number; subTable: VTable.ListTable; record?: unknown }> {\r\n const result: Array<{ bodyRowIndex: number; subTable: VTable.ListTable }> = [];\r\n const allSubTables = this.subTableManager.getAllSubTableInstances();\r\n if (!allSubTables) {\r\n return result;\r\n }\r\n\r\n for (const [bodyRowIndex, subTable] of allSubTables) {\r\n try {\r\n const record = getRecordByRowIndex(this.table, bodyRowIndex);\r\n if (predicate(bodyRowIndex, subTable, record)) {\r\n result.push({ bodyRowIndex, subTable });\r\n }\r\n } catch (error) {\r\n console.warn(`筛选子表时出错:`, error);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 清理主从表功能\r\n */\r\n private cleanupMasterDetailFeatures(): void {\r\n // 清理主表事件处理器\r\n if (this.mainTableClickHandler) {\r\n this.table.off('click_cell', this.mainTableClickHandler);\r\n this.mainTableClickHandler = undefined;\r\n }\r\n // 清理表格 API 扩展\r\n if (this.tableAPIExtensions) {\r\n this.tableAPIExtensions.cleanup();\r\n this.tableAPIExtensions = undefined;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/master-detail-plugin/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAG3C,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAK5D,MAAM,OAAO,kBAAkB;IAqB7B,YAAY,gBAA2C,EAAE;QApBzD,OAAE,GAAG,sBAAsB,CAAC;QAC5B,SAAI,GAAG,sBAAsB,CAAC;QAC9B,YAAO,GAAG;YACR,MAAM,CAAC,gBAAgB,CAAC,WAAW;YACnC,MAAM,CAAC,gBAAgB,CAAC,WAAW;YACnC,MAAM,CAAC,gBAAgB,CAAC,UAAU;YAClC,MAAM,CAAC,gBAAgB,CAAC,UAAU;YAClC,MAAM,CAAC,gBAAgB,CAAC,+BAA+B;YACvD,MAAM,CAAC,gBAAgB,CAAC,iCAAiC;SAC1D,CAAC;QAYA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IACD,GAAG,CAAC,GAAG,IAAe;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAqB,CAAC;QAE1C,IAAI,OAAO,KAAK,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE;YACnD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,yBAAyB,CACzC,SAA6D,CAAC,OAAO,CACvE,CAAC;SACH;aAAM,IAAI,OAAO,KAAK,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE;YAC1D,IAAI,CAAC,yBAAyB,EAAE,CAAC;SAClC;aAAM,IAAI,OAAO,KAAK,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE;YAEzD,IAAI,CAAC,YAAY,CAAC,6BAA6B,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,OAAO,KAAK,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE;YAEzD,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,CAAC;SAClD;aAAM,IAAI,OAAO,KAAK,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,EAAE;YAE9E,IAAI,CAAC,YAAY,CAAC,iCAAiC,CAAC,SAAgB,CAAC,CAAC;SACvE;aAAM,IAAI,OAAO,KAAK,MAAM,CAAC,gBAAgB,CAAC,iCAAiC,EAAE;YAEhF,IAAI,CAAC,YAAY,CAAC,mCAAmC,CAAC,SAAgB,CAAC,CAAC;SACzE;IACH,CAAC;IAIO,kBAAkB;;QACxB,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,qBAAqB,GAAG,MAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,mCAAI,IAAI,CAAC;QAC/E,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;QAG9E,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;QAEhG,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAGxF,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAC7B,yBAAyB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,+BAA+B,EAAE;YACvF,+BAA+B,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,mCAAmC,EAAE;YACjG,WAAW,EAAE,CAAC,QAAgB,EAAE,QAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACxF,aAAa,EAAE,CAAC,QAAgB,EAAE,QAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAC5F,gCAAgC,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CAAC;YACrG,iBAAiB,EAAE,CAAC,QAAgB,EAAE,QAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACpG,oBAAoB,EAAE,CAAC,YAAoB,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC;SAC/F,CAAC,CAAC;QAGH,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;YAChC,wBAAwB,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,CACjD,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC;SACpE,CAAC,CAAC;QAGH,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,YAAoB,EAAE,cAAsB,EAAE,EAAE;YAC1F,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC;IAKO,yBAAyB;QAE/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;QAEtC,IAAI,CAAC,+BAA+B,EAAE,CAAC;QAEvC,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAQO,+BAA+B;QAErC,IAAI,CAAC,qBAAqB,GAAG,GAAG,EAAE;YAChC,IAAI,CAAC,iCAAiC,EAAE,CAAC;QAC3C,CAAC,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC1D,CAAC;IAMO,mBAAmB;;QAEzB,MAAM,qBAAqB,GAAG,MAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,mCAAI,IAAI,CAAC;QAC/E,IAAI,qBAAqB,EAAE;YAEzB,IAAI,CAAC,sBAAsB,GAAG,8BAA8B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SAC7F;IACH,CAAC;IAKO,iBAAiB;QACvB,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,aAAa,CAAC,qBAAqB,GAAG,EAAE,CAAC;QACzC,aAAa,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5C,aAAa,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;QAC7C,aAAa,CAAC,sBAAsB,GAAG,IAAI,GAAG,EAAE,CAAC;IACnD,CAAC;IAKO,cAAc;QAEpB,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE;YAClG,kBAAkB,EAAE,CAAC,SAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;YAC5E,kCAAkC,EAAE,CAClC,gBAA2E,EAC3E,EAAE,CAAC,IAAI,CAAC,kCAAkC,CAAC,gBAAgB,CAAC;YAC9D,8BAA8B,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CAAC;YACnG,SAAS,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YACzD,0BAA0B,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE;YACnE,WAAW,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;YAC7D,uBAAuB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,+BAA+B,EAAE;YACrF,wBAAwB,EAAE,CAAC,QAAgB,EAAE,WAAmB,EAAE,EAAE,CAClE,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,WAAW,CAAC;SACvD,CAAC,CAAC;QAGH,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,CAAC;IAC3C,CAAC;IAKO,kCAAkC,CACxC,gBAA2E;QAE3E,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnD,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,gBAAgB,EAAE;YAC/C,MAAM,YAAY,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;YAClE,IAAI,aAAa,CAAC,kBAAkB,EAAE;gBAEpC,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;aACrE;SACF;IACH,CAAC;IAKO,0BAA0B;QAChC,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,CAAC,qBAAqB,IAAI,aAAa,CAAC,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5F,OAAO;SACR;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC;QACxE,IAAI,CAAC,gBAAgB,EAAE;YACrB,OAAO;SACR;QACD,aAAa,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACxD,IAAI;gBACF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC;gBAC1E,IAAI,YAAY,IAAI,CAAC,EAAE;oBACrB,MAAM,cAAc,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;oBACxE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;iBAChC;aACF;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,IAAI,CAAC,UAAU,WAAW,OAAO,EAAE,KAAK,CAAC,CAAC;aACnD;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAOD,SAAS,CAAC,QAAgB,EAAE,QAAiB;;QAC3C,MAAM,YAAY,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;QAClE,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;YAC7C,OAAO;SACR;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACrE,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,KAAK,IAAI,EAAE;YAC7D,OAAO;SACR;QAED,IAAI,aAAa,CAAC,qBAAqB,EAAE;YACvC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,qBAAqB,EAAE,eAAe,CAAC,EAAE;gBAC9E,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;aAC3D;SACF;QAED,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE3C,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,aAAa,CAAC,kBAAkB,EAAE;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEvE,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;SACpE;QACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,CAAA,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,KAAK,0CAAE,MAAM,KAAI,GAAG,CAAC;QAElD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAG3E,MAAM,YAAY,GAAG,MAAM,KAAK,MAAM,CAAC;QACvC,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QACnF,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACnE,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,QAAQ,KAAK,EAAE,EAAE;YACnB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;SACrB;QACD,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,CACvF,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,CAClE,CAAC;QAEF,IAAI,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE;YACxC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;SACpC;QACD,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE;YACxC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;SACxC;QAED,IAAI,CAAC,8BAA8B,EAAE,CAAC;IACxC,CAAC;IAMO,sBAAsB,CAAC,YAAoB,EAAE,cAAsB;;QACzE,IAAI;YACF,MAAM,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;YAElE,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC3D,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,cAAc,GAAG,CAAA,MAAA,aAAa,CAAC,kBAAkB,0CAAE,GAAG,CAAC,YAAY,CAAC,KAAI,CAAC,CAAC;YAChF,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,cAAc,CAAC;YAE9D,MAAM,gBAAgB,GAAG,cAAc,GAAG,mBAAmB,CAAC;YAC9D,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YAC1D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;SACzE;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;SACrD;IACH,CAAC;IAOD,WAAW,CAAC,QAAgB,EAAE,QAAiB;QAC7C,MAAM,YAAY,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;QAClE,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;YAC9C,OAAO;SACR;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACrE,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,KAAK,IAAI,EAAE;YAC7D,OAAO;SACR;QAED,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,aAAa,CAAC,qBAAqB,EAAE;YACvC,MAAM,KAAK,GAAG,uBAAuB,CAAC,aAAa,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAAC;YAC5F,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;gBACd,aAAa,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aACtD;SACF;QAGD,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAE9C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,aAAa,GAAG,cAAc,CAAC;QACnD,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC;QACtD,aAAa,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC;QACpE,IAAI,aAAa,CAAC,kBAAkB,EAAE;YACpC,aAAa,CAAC,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SACvD;QACD,IAAI,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE;YACxC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;SACvC;QACD,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE;YACxC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;SACxC;QAED,IAAI,CAAC,8BAA8B,EAAE,CAAC;IACxC,CAAC;IAKO,8BAA8B,CAAC,QAAgB;QACrD,MAAM,YAAY,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;QAClE,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;YAC9C,OAAO;SACR;QACD,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,aAAa,GAAG,cAAc,CAAC;QACnD,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC;QACtD,aAAa,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC;QACpE,IAAI,aAAa,CAAC,kBAAkB,EAAE;YACpC,aAAa,CAAC,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SACvD;QAED,IAAI,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE;YACxC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;SACvC;QACD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE;YACxC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;SACxC;QAED,IAAI,CAAC,8BAA8B,EAAE,CAAC;IACxC,CAAC;IAOD,eAAe,CAAC,QAAgB,EAAE,QAAiB;QACjD,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;YAC7C,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SACtC;aAAM;YACL,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SACpC;IACH,CAAC;IAKO,wBAAwB,CAAC,QAAgB,EAAE,WAAmB;QACpE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAG1F,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC;QAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;YACxC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;SACxC;aAAM,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE;YAC5E,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;SAClC;aAAM;YACL,MAAM,GAAG,IAAI,CAAC,GAAG,CACd,IAAI,CAAC,KAAK,CAAC,UAA4C,CAAC,KAAK,CAAC,MAAM,EACrE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,CAC1D,CAAC;SACH;QAED,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;YACjE,KAAK,IAAI,MAAM,GAAG,QAAQ,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,EAAE,EAAE;gBACtD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACjF,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE;oBAC7B,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;iBAClE;aACF;SACF;IACH,CAAC;IAKO,mBAAmB,CAAC,QAAgB;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;SACR;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,OAAO;SACR;QACD,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAgB,EAAE,KAAa,EAAE,EAAE;YACnD,IAAI,SAAS,IAAI,SAAS,CAAC,SAAS,EAAE;gBACpC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;aACpC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;IAC1C,CAAC;IAKO,WAAW,CAAC,QAAgB;QAClC,MAAM,KAAK,GAAY,EAAE,CAAC;QAC1B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC/D,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE;gBAC1C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACvB;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAKO,kBAAkB,CAAC,SAAc;;QACvC,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC;QACxC,MAAM,uBAAuB,GAC3B,WAAW,CAAC,gBAAgB;YAC5B,CAAC,WAAW,CAAC,SAAS;gBACpB,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC;gBAC9F,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,uBAAuB,GAC3B,WAAW,CAAC,gBAAgB;YAC5B,CAAC,WAAW,CAAC,MAAM;gBACjB,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;gBAClF,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;QACpE,MAAM,iBAAiB,GAAG,SAAS,CAAC,aAAa,CAAC;QAClD,IAAI,CAAC,iBAAiB,EAAE;YACtB,SAAS,CAAC,yBAAyB,GAAG,CAAC,GAAG,uBAAuB,CAAC,CAAC;YACnE,SAAS,CAAC,yBAAyB,GAAG,CAAC,GAAG,uBAAuB,CAAC,CAAC;YACnE,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;SAChC;QACD,MAAM,wBAAwB,GAAG,SAAS,CAAC,yBAAyB,IAAI,uBAAuB,CAAC;QAChG,MAAM,wBAAwB,GAAG,SAAS,CAAC,yBAAyB,IAAI,uBAAuB,CAAC;QAChG,MAAM,wBAAwB,GAAG,CAAC,GAAG,wBAAwB,CAAC,CAAC;QAC/D,MAAM,wBAAwB,GAAG,CAAC,GAAG,wBAAwB,CAAC,CAAC;QAC/D,MAAM,aAAa,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAClH,wBAAwB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;QAC5C,IAAI,wBAAwB,CAAC,CAAC,CAAC,KAAK,aAAa,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE;YACjF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC/B,wBAAwB,CAAC,CAAC,CAAC,GAAG,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,0CAAE,WAAW,KAAI,SAAS,CAAC;SAC1E;aAAM;YACL,wBAAwB,CAAC,CAAC,CAAC,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC;SAC3D;QACD,SAAS,CAAC,aAAa,CAAC;YACtB,gBAAgB,EAAE,wBAAwB;YAC1C,gBAAgB,EAAE,wBAAwB;YAC1C,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;IACL,CAAC;IAKO,sBAAsB,CAAC,QAAgB;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5C,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAc,EAAE,KAAa,EAAE,EAAE;YACjD,IAAI,SAAS,IAAI,SAAS,CAAC,aAAa,EAAE;gBACxC,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;aACzC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;IAC1C,CAAC;IAKO,uBAAuB,CAAC,SAAc;QAC5C,IAAI,SAAS,CAAC,aAAa,EAAE;YAE3B,IAAI,SAAS,CAAC,yBAAyB,IAAI,SAAS,CAAC,yBAAyB,EAAE;gBAC9E,SAAS,CAAC,aAAa,CAAC;oBACtB,gBAAgB,EAAE,SAAS,CAAC,yBAAyB;oBACrD,gBAAgB,EAAE,SAAS,CAAC,yBAAyB;iBACtD,CAAC,CAAC;gBACH,OAAO,SAAS,CAAC,yBAAyB,CAAC;gBAC3C,OAAO,SAAS,CAAC,yBAAyB,CAAC;aAC5C;YAED,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC;SACjC;IACH,CAAC;IAOO,cAAc,CAAC,QAAgB,EAAE,QAAiB;QACxD,IAAI,iBAAyB,CAAC;QAC9B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YAChC,iBAAiB,GAAG,QAAQ,CAAC;SAC9B;aAAM;YACL,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;YAChE,iBAAiB,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAChD;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAC3E,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YACxC,MAAM,SAAS,GAAG,MAAiC,CAAC;YACpD,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC7D,SAAS,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC;YACxF,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;SACxE;IACH,CAAC;IAKD,iBAAiB,CAAC,QAAmB,EAAE,GAAW,EAAE,GAAW;QAE7D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9D,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,EAAE;YACrD,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACrD,OAAO;SACR;QAED,MAAM,eAAe,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,eAAe,CAAC,CAAC;YAC/D,OAAO;SACR;QAGA,MAAkC,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACxD,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,OAAO;;QAEL,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,aAAa,EAAE;YAChB,aAA4C,CAAC,YAAY,GAAG,IAAI,CAAC;SACnE;QAED,IAAI;YACF,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;gBACjC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;aACjC;YAGD,IAAI,IAAI,CAAC,sBAAsB,EAAE;gBAC/B,IAAI;oBACF,IAAI,CAAC,sBAAsB,EAAE,CAAC;iBAC/B;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;iBAC/D;gBACD,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;aACzC;YAGD,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,IAAI;oBACF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;iBAC7B;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;iBAC5D;aACF;YAGD,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,IAAI;oBACF,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;iBAChC;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;iBAChE;aACF;YAGD,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI;oBACF,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;iBAC9B;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;iBAC7D;aACF;YAGD,IAAI,CAAC,2BAA2B,EAAE,CAAC;YAGnC,IAAI,IAAI,CAAC,KAAK,IAAI,aAAa,EAAE;gBAC/B,IAAI;oBAEF,MAAA,aAAa,CAAC,qBAAqB,0CAAE,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC/C,MAAA,aAAa,CAAC,iBAAiB,0CAAE,KAAK,EAAE,CAAC;oBACzC,MAAA,aAAa,CAAC,kBAAkB,0CAAE,KAAK,EAAE,CAAC;oBAC1C,MAAA,aAAa,CAAC,sBAAsB,0CAAE,KAAK,EAAE,CAAC;oBAC9C,MAAA,aAAa,CAAC,oBAAoB,0CAAE,KAAK,EAAE,CAAC;iBAC7C;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;iBACvD;aACF;SACF;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;SAC9C;gBAAS;YAER,IAAI;gBACD,IAA8C,CAAC,aAAa,GAAG,IAAI,CAAC;gBACpE,IAA6C,CAAC,YAAY,GAAG,IAAI,CAAC;gBAClE,IAAgD,CAAC,eAAe,GAAG,IAAI,CAAC;gBACxE,IAAmD,CAAC,kBAAkB,GAAG,IAAI,CAAC;gBAC9E,IAAsC,CAAC,KAAK,GAAG,IAAI,CAAC;gBACpD,IAA8C,CAAC,aAAa,GAAG,IAAI,CAAC;aACtE;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;aACnD;SACF;IACH,CAAC;IAKO,iCAAiC;;QACvC,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,MAAA,aAAa,CAAC,iBAAiB,0CAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;YAClD,IAAI,QAAQ,IAAI,OAAQ,QAA2C,CAAC,aAAa,KAAK,UAAU,EAAE;gBAC/F,QAA0C,CAAC,aAAa,EAAE,CAAC;aAC7D;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAMD,uBAAuB;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE,CAAC;IACxD,CAAC;IAOD,qBAAqB,CAAC,QAAgB;QACpC,MAAM,YAAY,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;QAClE,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAChE,CAAC;IAOD,yBAAyB,CAAC,YAAoB;QAC5C,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAChE,CAAC;IAOD,eAAe,CACb,SAA0F;QAE1F,MAAM,MAAM,GAAgE,EAAE,CAAC;QAC/E,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE,CAAC;QACpE,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO,MAAM,CAAC;SACf;QAED,KAAK,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,YAAY,EAAE;YACnD,IAAI;gBACF,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;gBAC7D,IAAI,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE;oBAC7C,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;iBACzC;aACF;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;aACjC;SACF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAMO,8BAA8B;QACpC,IAAI;YAEF,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YACjD,IAAI,cAAc,GAAG,CAAC,EAAE;gBACtB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,qBAAqB,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;aAC3E;SACF;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;SACrC;IACH,CAAC;IAKO,2BAA2B;QAEjC,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACzD,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;SACxC;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;SACrC;IACH,CAAC;CACF","file":"core.js","sourcesContent":["import * as VTable from '@visactor/vtable';\r\nimport type { Group } from '@visactor/vtable/es/scenegraph/graphic/group';\r\nimport type { MasterDetailPluginOptions } from './types';\r\nimport { includesRecordIndex, findRecordIndexPosition } from './types';\r\nimport { getInternalProps, getRecordByRowIndex, getOriginalRowHeight } from './utils';\r\nimport { ConfigManager } from './config';\r\nimport { EventManager } from './events';\r\nimport { SubTableManager } from './subtable';\r\nimport { TableAPIExtensions } from './table-api-extensions';\r\nimport { bindMasterDetailCheckboxChange } from './checkbox';\r\n\r\n/**\r\n * 主从表插件核心类\r\n */\r\nexport class MasterDetailPlugin implements VTable.plugins.IVTablePlugin {\r\n id = `Master Detail Plugin`;\r\n name = 'Master Detail Plugin';\r\n runTime = [\r\n VTable.TABLE_EVENT_TYPE.BEFORE_INIT,\r\n VTable.TABLE_EVENT_TYPE.INITIALIZED,\r\n VTable.TABLE_EVENT_TYPE.SORT_CLICK,\r\n VTable.TABLE_EVENT_TYPE.AFTER_SORT,\r\n VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_CELL_CONTENT_WIDTH,\r\n VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_SELECT_BORDER_HEIGHT\r\n ];\r\n\r\n pluginOptions: MasterDetailPluginOptions;\r\n table: VTable.ListTable;\r\n private configManager: ConfigManager;\r\n private eventManager: EventManager;\r\n private subTableManager: SubTableManager;\r\n private tableAPIExtensions: TableAPIExtensions;\r\n private resizeObserver?: ResizeObserver;\r\n private checkboxCascadeCleanup: () => void;\r\n\r\n constructor(pluginOptions: MasterDetailPluginOptions = {}) {\r\n this.pluginOptions = pluginOptions;\r\n }\r\n run(...args: unknown[]): boolean | void {\r\n const eventArgs = args[0];\r\n const runTime = args[1];\r\n const table = args[2] as VTable.ListTable;\r\n\r\n if (runTime === VTable.TABLE_EVENT_TYPE.BEFORE_INIT) {\r\n this.table = table;\r\n this.initializeManagers();\r\n this.configManager.injectMasterDetailOptions(\r\n (eventArgs as { options: VTable.ListTableConstructorOptions }).options\r\n );\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.INITIALIZED) {\r\n this.setupMasterDetailFeatures();\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.SORT_CLICK) {\r\n // 排序前处理:保存展开状态并收起所有行\r\n this.eventManager.executeMasterDetailBeforeSort();\r\n return true;\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.AFTER_SORT) {\r\n // 排序后处理:恢复展开状态\r\n this.eventManager.executeMasterDetailAfterSort();\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_CELL_CONTENT_WIDTH) {\r\n // 单元格内容处理\r\n this.eventManager.handleAfterUpdateCellContentWidth(eventArgs as any);\r\n } else if (runTime === VTable.TABLE_EVENT_TYPE.AFTER_UPDATE_SELECT_BORDER_HEIGHT) {\r\n // 高亮处理\r\n this.eventManager.handleAfterUpdateSelectBorderHeight(eventArgs as any);\r\n }\r\n }\r\n /**\r\n * 初始化管理器\r\n */\r\n private initializeManagers(): void {\r\n this.configManager = new ConfigManager(this.pluginOptions, this.table);\r\n this.eventManager = new EventManager(this.table);\r\n const enableCheckboxCascade = this.pluginOptions.enableCheckboxCascade ?? true;\r\n this.subTableManager = new SubTableManager(this.table, enableCheckboxCascade);\r\n\r\n // 设置配置管理器的行展开状态检查函数\r\n this.configManager.setRowExpandedChecker((row: number) => this.eventManager.isRowExpanded(row));\r\n // 设置配置管理器的展开行回调函数\r\n this.configManager.setExpandRowCallback((rowIndex: number) => this.expandRow(rowIndex));\r\n\r\n // 设置事件管理器的回调函数\r\n this.eventManager.setCallbacks({\r\n onUpdateSubTablePositions: () => this.subTableManager.recalculateAllSubTablePositions(),\r\n onUpdateSubTablePositionsForRow: () => this.subTableManager.updateSubTablePositionsForRowResize(),\r\n onExpandRow: (rowIndex: number, colIndex?: number) => this.expandRow(rowIndex, colIndex),\r\n onCollapseRow: (rowIndex: number, colIndex?: number) => this.collapseRow(rowIndex, colIndex),\r\n onCollapseRowToNoRealRecordIndex: (rowIndex: number) => this.collapseRowToNoRealRecordIndex(rowIndex),\r\n onToggleRowExpand: (rowIndex: number, colIndex?: number) => this.toggleRowExpand(rowIndex, colIndex),\r\n getOriginalRowHeight: (bodyRowIndex: number) => getOriginalRowHeight(this.table, bodyRowIndex)\r\n });\r\n\r\n // 设置子表管理器的回调函数\r\n this.subTableManager.setCallbacks({\r\n getDetailConfigForRecord: (record, bodyRowIndex) =>\r\n this.configManager.getDetailConfigForRecord(record, bodyRowIndex)\r\n });\r\n\r\n // 设置auto高度计算完成的回调\r\n this.subTableManager.setAutoHeightCallback((bodyRowIndex: number, newTotalHeight: number) => {\r\n this.handleAutoHeightUpdate(bodyRowIndex, newTotalHeight);\r\n });\r\n }\r\n\r\n /**\r\n * 设置主从表功能\r\n */\r\n private setupMasterDetailFeatures(): void {\r\n // 初始化内部属性\r\n this.initInternalProps();\r\n // 绑定事件处理器\r\n this.eventManager.bindEventHandlers();\r\n // 设置统一选择状态管理\r\n this.setupUnifiedSelectionManagement();\r\n // 扩展表格 API\r\n this.extendTableAPI();\r\n // 初始化checkbox联动功能\r\n this.initCheckboxCascade();\r\n }\r\n\r\n // 主表点击事件处理器引用\r\n private mainTableClickHandler?: () => void;\r\n\r\n /**\r\n * 设置统一选中状态管理\r\n */\r\n private setupUnifiedSelectionManagement(): void {\r\n // 绑定主表的点击事件,清除所有子表选中状态\r\n this.mainTableClickHandler = () => {\r\n this.clearAllSubTableVisibleSelections();\r\n };\r\n this.table.on('click_cell', this.mainTableClickHandler);\r\n }\r\n\r\n /**\r\n * 初始化checkbox联动功能\r\n * 设置主从表之间的复选框状态同步,并保存清理函数以便后续释放资源\r\n */\r\n private initCheckboxCascade(): void {\r\n // 检查是否启用checkbox级联功能,默认为 true\r\n const enableCheckboxCascade = this.pluginOptions.enableCheckboxCascade ?? true;\r\n if (enableCheckboxCascade) {\r\n // 设置checkbox联动并保存清理函数\r\n this.checkboxCascadeCleanup = bindMasterDetailCheckboxChange(this.table, this.eventManager);\r\n }\r\n }\r\n\r\n /**\r\n * 初始化内部属性\r\n */\r\n private initInternalProps(): void {\r\n const internalProps = getInternalProps(this.table);\r\n internalProps.expandedRecordIndices = [];\r\n internalProps.subTableInstances = new Map();\r\n internalProps.originalRowHeights = new Map();\r\n internalProps.subTableCheckboxStates = new Map();\r\n }\r\n\r\n /**\r\n * 扩展表格 API\r\n */\r\n private extendTableAPI(): void {\r\n // 创建 TableAPIExtensions 实例\r\n this.tableAPIExtensions = new TableAPIExtensions(this.table, this.configManager, this.eventManager, {\r\n addUnderlineToCell: (cellGroup: Group) => this.addUnderlineToCell(cellGroup),\r\n updateOriginalHeightsAfterAdaptive: (\r\n expandedRowsInfo: Map<number, { baseHeight: number; detailHeight: number }>\r\n ) => this.updateOriginalHeightsAfterAdaptive(expandedRowsInfo),\r\n collapseRowToNoRealRecordIndex: (rowIndex: number) => this.collapseRowToNoRealRecordIndex(rowIndex),\r\n expandRow: (rowIndex: number) => this.expandRow(rowIndex),\r\n restoreExpandedStatesAfter: () => this.restoreExpandedStatesAfter(),\r\n collapseRow: (rowIndex: number) => this.collapseRow(rowIndex),\r\n updateSubTablePositions: () => this.subTableManager.recalculateAllSubTablePositions(),\r\n updateRowHeightForExpand: (rowIndex: number, deltaHeight: number) =>\r\n this.updateRowHeightForExpand(rowIndex, deltaHeight)\r\n });\r\n\r\n // 执行API扩展\r\n this.tableAPIExtensions.extendTableAPI();\r\n }\r\n\r\n /**\r\n * 在 adaptive 处理后更新原始高度缓存\r\n */\r\n private updateOriginalHeightsAfterAdaptive(\r\n expandedRowsInfo: Map<number, { baseHeight: number; detailHeight: number }>\r\n ): void {\r\n const internalProps = getInternalProps(this.table);\r\n // 更新展开行的原始高度缓存\r\n for (const [rowIndex, info] of expandedRowsInfo) {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n if (internalProps.originalRowHeights) {\r\n // 将新的基础高度设置为原始高度\r\n internalProps.originalRowHeights.set(bodyRowIndex, info.baseHeight);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 分页后恢复展开状态\r\n */\r\n private restoreExpandedStatesAfter(): void {\r\n const internalProps = getInternalProps(this.table);\r\n if (!internalProps.expandedRecordIndices || internalProps.expandedRecordIndices.length === 0) {\r\n return;\r\n }\r\n const currentPagerData = this.table.dataSource._currentPagerIndexedData;\r\n if (!currentPagerData) {\r\n return;\r\n }\r\n internalProps.expandedRecordIndices.forEach(recordIndex => {\r\n try {\r\n const bodyRowIndex = this.table.getBodyRowIndexByRecordIndex(recordIndex);\r\n if (bodyRowIndex >= 0) {\r\n const targetRowIndex = bodyRowIndex + this.table.columnHeaderLevelCount;\r\n this.expandRow(targetRowIndex);\r\n }\r\n } catch (error) {\r\n console.warn(`处理记录索引 ${recordIndex} 时出错:`, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 展开行\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n expandRow(rowIndex: number, colIndex?: number): void {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n const internalProps = getInternalProps(this.table);\r\n if (this.eventManager.isRowExpanded(rowIndex)) {\r\n return;\r\n }\r\n\r\n const realRecordIndex = this.table.getRecordIndexByCell(0, rowIndex);\r\n if (realRecordIndex === undefined || realRecordIndex === null) {\r\n return;\r\n }\r\n // 更新展开行的数据源\r\n if (internalProps.expandedRecordIndices) {\r\n if (!includesRecordIndex(internalProps.expandedRecordIndices, realRecordIndex)) {\r\n internalProps.expandedRecordIndices.push(realRecordIndex);\r\n }\r\n }\r\n // 更新展开状态数组\r\n this.eventManager.addExpandedRow(rowIndex);\r\n\r\n const originalHeight = this.table.getRowHeight(rowIndex);\r\n if (internalProps.originalRowHeights) {\r\n const oldCellGroup = this.table.scenegraph.getCell(colIndex, rowIndex);\r\n // console.log(bodyRowIndex,oldCellGroup)\r\n internalProps.originalRowHeights.set(bodyRowIndex, originalHeight);\r\n }\r\n const record = getRecordByRowIndex(this.table, bodyRowIndex);\r\n const detailConfig = this.configManager.getDetailConfigForRecord(record, bodyRowIndex);\r\n const height = detailConfig?.style?.height || 300;\r\n\r\n const childrenData = Array.isArray(record.children) ? record.children : [];\r\n\r\n // 处理初始高度:如果是auto,先用默认值300展开\r\n const isAutoHeight = height === 'auto';\r\n const deltaHeight = isAutoHeight ? 300 : typeof height === 'number' ? height : 300;\r\n this.updateRowHeightForExpand(rowIndex, deltaHeight);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, deltaHeight);\r\n internalProps._heightResizedRowMap.add(rowIndex);\r\n if (rowIndex === 96) {\r\n console.log('wokk');\r\n }\r\n this.subTableManager.renderSubTable(bodyRowIndex, childrenData, (record, bodyRowIndex) =>\r\n this.configManager.getDetailConfigForRecord(record, bodyRowIndex)\r\n );\r\n\r\n if (rowIndex !== this.table.rowCount - 1) {\r\n this.drawUnderlineForRow(rowIndex);\r\n }\r\n this.refreshRowIcon(rowIndex, colIndex);\r\n if (this.table.heightMode === 'adaptive') {\r\n this.table.scenegraph.dealHeightMode();\r\n }\r\n // 更新冻结线高度\r\n this.updateFrozenColumnShadowHeight();\r\n }\r\n\r\n /**\r\n * 处理auto高度更新\r\n * 当子表计算出实际内容高度后,更新主表行高\r\n */\r\n private handleAutoHeightUpdate(bodyRowIndex: number, newTotalHeight: number): void {\r\n try {\r\n const rowIndex = bodyRowIndex + this.table.columnHeaderLevelCount;\r\n // 获取当前行高\r\n const currentRowHeight = this.table.getRowHeight(rowIndex);\r\n const internalProps = getInternalProps(this.table);\r\n const originalHeight = internalProps.originalRowHeights?.get(bodyRowIndex) || 0;\r\n const currentDetailHeight = currentRowHeight - originalHeight;\r\n // 计算需要调整的高度差\r\n const heightDifference = newTotalHeight - currentDetailHeight;\r\n this.updateRowHeightForExpand(rowIndex, heightDifference);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, heightDifference);\r\n } catch (error) {\r\n console.warn('Error in auto height update:', error);\r\n }\r\n }\r\n\r\n /**\r\n * 收起行\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n collapseRow(rowIndex: number, colIndex?: number): void {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n const internalProps = getInternalProps(this.table);\r\n\r\n if (!this.eventManager.isRowExpanded(rowIndex)) {\r\n return;\r\n }\r\n\r\n const realRecordIndex = this.table.getRecordIndexByCell(0, rowIndex);\r\n if (realRecordIndex === undefined || realRecordIndex === null) {\r\n return;\r\n }\r\n // 更新展开行的数据源\r\n this.subTableManager.removeSubTable(bodyRowIndex);\r\n if (internalProps.expandedRecordIndices) {\r\n const index = findRecordIndexPosition(internalProps.expandedRecordIndices, realRecordIndex);\r\n if (index > -1) {\r\n internalProps.expandedRecordIndices.splice(index, 1);\r\n }\r\n }\r\n\r\n // 更新展开状态数组\r\n this.eventManager.removeExpandedRow(rowIndex);\r\n\r\n const currentHeight = this.table.getRowHeight(rowIndex);\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n const deltaHeight = currentHeight - originalHeight;\r\n this.updateRowHeightForExpand(rowIndex, -deltaHeight);\r\n internalProps._heightResizedRowMap.delete(rowIndex);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, -deltaHeight);\r\n if (internalProps.originalRowHeights) {\r\n internalProps.originalRowHeights.delete(bodyRowIndex);\r\n }\r\n if (rowIndex !== this.table.rowCount - 1) {\r\n this.removeUnderlineFromRow(rowIndex);\r\n }\r\n this.refreshRowIcon(rowIndex, colIndex);\r\n if (this.table.heightMode === 'adaptive') {\r\n this.table.scenegraph.dealHeightMode();\r\n }\r\n // 更新冻结线高度\r\n this.updateFrozenColumnShadowHeight();\r\n }\r\n\r\n /**\r\n * 收起行(不修改expandedRecordIndices)\r\n */\r\n private collapseRowToNoRealRecordIndex(rowIndex: number): void {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n const internalProps = getInternalProps(this.table);\r\n\r\n if (!this.eventManager.isRowExpanded(rowIndex)) {\r\n return;\r\n }\r\n this.subTableManager.removeSubTable(bodyRowIndex);\r\n this.eventManager.removeExpandedRow(rowIndex);\r\n const currentHeight = this.table.getRowHeight(rowIndex);\r\n const originalHeight = getOriginalRowHeight(this.table, bodyRowIndex);\r\n const deltaHeight = currentHeight - originalHeight;\r\n this.updateRowHeightForExpand(rowIndex, -deltaHeight);\r\n internalProps._heightResizedRowMap.delete(rowIndex);\r\n this.table.scenegraph.updateContainerHeight(rowIndex, -deltaHeight);\r\n if (internalProps.originalRowHeights) {\r\n internalProps.originalRowHeights.delete(bodyRowIndex);\r\n }\r\n\r\n if (rowIndex !== this.table.rowCount - 1) {\r\n this.removeUnderlineFromRow(rowIndex);\r\n }\r\n this.refreshRowIcon(rowIndex);\r\n if (this.table.heightMode === 'adaptive') {\r\n this.table.scenegraph.dealHeightMode();\r\n }\r\n // 更新冻结线高度\r\n this.updateFrozenColumnShadowHeight();\r\n }\r\n\r\n /**\r\n * 切换行展开状态\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n toggleRowExpand(rowIndex: number, colIndex?: number): void {\r\n if (this.eventManager.isRowExpanded(rowIndex)) {\r\n this.collapseRow(rowIndex, colIndex);\r\n } else {\r\n this.expandRow(rowIndex, colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * 更新行高用于展开\r\n */\r\n private updateRowHeightForExpand(rowIndex: number, deltaHeight: number): void {\r\n this.table._setRowHeight(rowIndex, this.table.getRowHeight(rowIndex) + deltaHeight, true);\r\n\r\n // 更新以下行的位置\r\n const rowStart = rowIndex + 1;\r\n let rowEnd = 0;\r\n\r\n if (rowIndex < this.table.frozenRowCount) {\r\n rowEnd = this.table.frozenRowCount - 1;\r\n } else if (rowIndex >= this.table.rowCount - this.table.bottomFrozenRowCount) {\r\n rowEnd = this.table.rowCount - 1;\r\n } else {\r\n rowEnd = Math.min(\r\n (this.table.scenegraph as { proxy: { rowEnd: number } }).proxy.rowEnd,\r\n this.table.rowCount - this.table.bottomFrozenRowCount - 1\r\n );\r\n }\r\n\r\n for (let colIndex = 0; colIndex < this.table.colCount; colIndex++) {\r\n for (let rowIdx = rowStart; rowIdx <= rowEnd; rowIdx++) {\r\n const cellGroup = this.table.scenegraph.highPerformanceGetCell(colIndex, rowIdx);\r\n if (cellGroup.role === 'cell') {\r\n cellGroup.setAttribute('y', cellGroup.attribute.y + deltaHeight);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 为指定行绘制下划线\r\n */\r\n private drawUnderlineForRow(rowIndex: number): void {\r\n const sceneGraph = this.table.scenegraph;\r\n if (!sceneGraph) {\r\n return;\r\n }\r\n // 获取指定行的所有cell\r\n const rowCells = this.getRowCells(rowIndex);\r\n if (rowCells.length === 0) {\r\n return;\r\n }\r\n rowCells.forEach((cellGroup: Group, index: number) => {\r\n if (cellGroup && cellGroup.attribute) {\r\n this.addUnderlineToCell(cellGroup);\r\n }\r\n });\r\n // 触发重新渲染\r\n this.table.scenegraph.updateNextFrame();\r\n }\r\n\r\n /**\r\n * 获取指定行的所有cell元素\r\n */\r\n private getRowCells(rowIndex: number): Group[] {\r\n const cells: Group[] = [];\r\n for (let col = 0; col < this.table.colCount; col++) {\r\n const cellGroup = this.table.scenegraph.getCell(col, rowIndex);\r\n if (cellGroup && cellGroup.role === 'cell') {\r\n cells.push(cellGroup);\r\n }\r\n }\r\n return cells;\r\n }\r\n\r\n /**\r\n * 为cell添加下划线\r\n */\r\n private addUnderlineToCell(cellGroup: any): void {\r\n const currentAttr = cellGroup.attribute;\r\n const currentStrokeArrayWidth =\r\n currentAttr.strokeArrayWidth ||\r\n (currentAttr.lineWidth\r\n ? [currentAttr.lineWidth, currentAttr.lineWidth, currentAttr.lineWidth, currentAttr.lineWidth]\r\n : [1, 1, 1, 1]);\r\n const currentStrokeArrayColor =\r\n currentAttr.strokeArrayColor ||\r\n (currentAttr.stroke\r\n ? [currentAttr.stroke, currentAttr.stroke, currentAttr.stroke, currentAttr.stroke]\r\n : ['transparent', 'transparent', 'transparent', 'transparent']);\r\n const isAlreadyEnhanced = cellGroup._hasUnderline;\r\n if (!isAlreadyEnhanced) {\r\n cellGroup._originalStrokeArrayWidth = [...currentStrokeArrayWidth];\r\n cellGroup._originalStrokeArrayColor = [...currentStrokeArrayColor];\r\n cellGroup._hasUnderline = true;\r\n }\r\n const originalStrokeArrayWidth = cellGroup._originalStrokeArrayWidth || currentStrokeArrayWidth;\r\n const originalStrokeArrayColor = cellGroup._originalStrokeArrayColor || currentStrokeArrayColor;\r\n const enhancedStrokeArrayWidth = [...originalStrokeArrayWidth];\r\n const enhancedStrokeArrayColor = [...originalStrokeArrayColor];\r\n const enhancedWidth = ((originalStrokeArrayWidth[2] || 1) * 0.75 + (originalStrokeArrayWidth[0] || 1) * 0.75) * 2;\r\n enhancedStrokeArrayWidth[2] = enhancedWidth;\r\n if (originalStrokeArrayColor[2] === 'transparent' || !originalStrokeArrayColor[2]) {\r\n const theme = this.table.theme;\r\n enhancedStrokeArrayColor[2] = theme?.bodyStyle?.borderColor || '#e1e4e8';\r\n } else {\r\n enhancedStrokeArrayColor[2] = originalStrokeArrayColor[2];\r\n }\r\n cellGroup.setAttributes({\r\n strokeArrayWidth: enhancedStrokeArrayWidth,\r\n strokeArrayColor: enhancedStrokeArrayColor,\r\n stroke: true\r\n });\r\n }\r\n\r\n /**\r\n * 删除展开行的下划线\r\n */\r\n private removeUnderlineFromRow(rowIndex: number): void {\r\n const rowCells = this.getRowCells(rowIndex);\r\n rowCells.forEach((cellGroup: any, index: number) => {\r\n if (cellGroup && cellGroup._hasUnderline) {\r\n this.removeUnderlineFromCell(cellGroup);\r\n }\r\n });\r\n this.table.scenegraph.updateNextFrame();\r\n }\r\n\r\n /**\r\n * 从cell中删除下划线\r\n */\r\n private removeUnderlineFromCell(cellGroup: any): void {\r\n if (cellGroup._hasUnderline) {\r\n // 恢复原始的strokeArray样式\r\n if (cellGroup._originalStrokeArrayWidth && cellGroup._originalStrokeArrayColor) {\r\n cellGroup.setAttributes({\r\n strokeArrayWidth: cellGroup._originalStrokeArrayWidth,\r\n strokeArrayColor: cellGroup._originalStrokeArrayColor\r\n });\r\n delete cellGroup._originalStrokeArrayWidth;\r\n delete cellGroup._originalStrokeArrayColor;\r\n }\r\n // 清除下划线标记\r\n cellGroup._hasUnderline = false;\r\n }\r\n }\r\n\r\n /**\r\n * 刷新行图标\r\n * @param rowIndex 行索引\r\n * @param colIndex 列索引\r\n */\r\n private refreshRowIcon(rowIndex: number, colIndex?: number): void {\r\n let targetColumnIndex: number;\r\n if (typeof colIndex === 'number') {\r\n targetColumnIndex = colIndex;\r\n } else {\r\n const hasRowSeriesNumber = !!this.table.options.rowSeriesNumber;\r\n targetColumnIndex = hasRowSeriesNumber ? 1 : 0;\r\n }\r\n\r\n const record = this.table.getCellOriginRecord(targetColumnIndex, rowIndex);\r\n if (record && typeof record === 'object') {\r\n const recordObj = record as Record<string, unknown>;\r\n const HierarchyState = VTable.TYPES.HierarchyState;\r\n const isExpanded = this.eventManager.isRowExpanded(rowIndex);\r\n recordObj.hierarchyState = isExpanded ? HierarchyState.expand : HierarchyState.collapse;\r\n this.table.scenegraph.updateHierarchyIcon(targetColumnIndex, rowIndex);\r\n }\r\n }\r\n\r\n /**\r\n * 设置记录的子数据并展开\r\n */\r\n setRecordChildren(children: unknown[], col: number, row: number): void {\r\n // 获取原始记录数据\r\n const recordIndex = this.table.getRecordIndexByCell(col, row);\r\n if (recordIndex === undefined || recordIndex === null) {\r\n console.warn('Invalid row, cannot get record index');\r\n return;\r\n }\r\n\r\n const realRecordIndex = typeof recordIndex === 'number' ? recordIndex : recordIndex[0];\r\n const record = this.table.dataSource.get(realRecordIndex);\r\n if (!record) {\r\n console.warn('Cannot find record for index:', realRecordIndex);\r\n return;\r\n }\r\n\r\n // 直接修改原始记录的 children 属性\r\n (record as Record<string, unknown>).children = children;\r\n this.expandRow(row, col);\r\n this.table.scenegraph.updateCellContent(col, row);\r\n }\r\n\r\n release(): void {\r\n // 设置释放标志\r\n const internalProps = getInternalProps(this.table);\r\n if (internalProps) {\r\n (internalProps as { _isReleasing?: boolean })._isReleasing = true;\r\n }\r\n\r\n try {\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n this.resizeObserver = undefined;\r\n }\r\n\r\n // 清理checkbox联动功能\r\n if (this.checkboxCascadeCleanup) {\r\n try {\r\n this.checkboxCascadeCleanup();\r\n } catch (error) {\r\n console.warn('Error during checkbox cascade cleanup:', error);\r\n }\r\n this.checkboxCascadeCleanup = undefined;\r\n }\r\n\r\n // 清理事件管理器\r\n if (this.eventManager) {\r\n try {\r\n this.eventManager.cleanup();\r\n } catch (error) {\r\n console.warn('Error during event manager cleanup:', error);\r\n }\r\n }\r\n\r\n // 清理子表管理器\r\n if (this.subTableManager) {\r\n try {\r\n this.subTableManager.cleanup();\r\n } catch (error) {\r\n console.warn('Error during sub table manager cleanup:', error);\r\n }\r\n }\r\n\r\n // 清理配置管理器\r\n if (this.configManager) {\r\n try {\r\n this.configManager.release();\r\n } catch (error) {\r\n console.warn('Error during config manager cleanup:', error);\r\n }\r\n }\r\n\r\n // 清理主从表功能\r\n this.cleanupMasterDetailFeatures();\r\n\r\n // 清理内部属性\r\n if (this.table && internalProps) {\r\n try {\r\n // 清理Map和Set,防止内存泄露\r\n internalProps.expandedRecordIndices?.splice(0);\r\n internalProps.subTableInstances?.clear();\r\n internalProps.originalRowHeights?.clear();\r\n internalProps.subTableCheckboxStates?.clear();\r\n internalProps._heightResizedRowMap?.clear();\r\n } catch (error) {\r\n console.warn('Error clearing internal props:', error);\r\n }\r\n }\r\n } catch (error) {\r\n console.warn('Error during release:', error);\r\n } finally {\r\n // 避免循环引用\r\n try {\r\n (this as unknown as { configManager: unknown }).configManager = null;\r\n (this as unknown as { eventManager: unknown }).eventManager = null;\r\n (this as unknown as { subTableManager: unknown }).subTableManager = null;\r\n (this as unknown as { tableAPIExtensions: unknown }).tableAPIExtensions = null;\r\n (this as unknown as { table: unknown }).table = null;\r\n (this as unknown as { pluginOptions: unknown }).pluginOptions = null;\r\n } catch (error) {\r\n console.warn('Error clearing references:', error);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 清除所有子表的可见选中状态\r\n */\r\n private clearAllSubTableVisibleSelections(): void {\r\n const internalProps = getInternalProps(this.table);\r\n internalProps.subTableInstances?.forEach(subTable => {\r\n if (subTable && typeof (subTable as { clearSelected?: () => void }).clearSelected === 'function') {\r\n (subTable as { clearSelected: () => void }).clearSelected();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 获取所有子表实例\r\n * @returns 子表实例的Map,键为bodyRowIndex,值为VTable实例\r\n */\r\n getAllSubTableInstances(): Map<number, VTable.ListTable> | null {\r\n return this.subTableManager.getAllSubTableInstances();\r\n }\r\n\r\n /**\r\n * 根据主表行号获取子表实例\r\n * @param rowIndex 主表行索引(包含表头)\r\n * @returns 子表实例,如果不存在则返回null\r\n */\r\n getSubTableByRowIndex(rowIndex: number): VTable.ListTable | null {\r\n const bodyRowIndex = rowIndex - this.table.columnHeaderLevelCount;\r\n return this.subTableManager.getSubTableInstance(bodyRowIndex);\r\n }\r\n\r\n /**\r\n * 根据主表body行号获取子表实例\r\n * @param bodyRowIndex 主表body行索引(不包含表头)\r\n * @returns 子表实例,如果不存在则返回null\r\n */\r\n getSubTableByBodyRowIndex(bodyRowIndex: number): VTable.ListTable | null {\r\n return this.subTableManager.getSubTableInstance(bodyRowIndex);\r\n }\r\n\r\n /**\r\n * 根据条件筛选子表实例\r\n * @param predicate 筛选条件函数\r\n * @returns 符合条件的子表实例数组\r\n */\r\n filterSubTables(\r\n predicate: (bodyRowIndex: number, subTable: VTable.ListTable, record?: unknown) => boolean\r\n ): Array<{ bodyRowIndex: number; subTable: VTable.ListTable; record?: unknown }> {\r\n const result: Array<{ bodyRowIndex: number; subTable: VTable.ListTable }> = [];\r\n const allSubTables = this.subTableManager.getAllSubTableInstances();\r\n if (!allSubTables) {\r\n return result;\r\n }\r\n\r\n for (const [bodyRowIndex, subTable] of allSubTables) {\r\n try {\r\n const record = getRecordByRowIndex(this.table, bodyRowIndex);\r\n if (predicate(bodyRowIndex, subTable, record)) {\r\n result.push({ bodyRowIndex, subTable });\r\n }\r\n } catch (error) {\r\n console.warn(`筛选子表时出错:`, error);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新冻结列阴影高度\r\n * 当行展开/收起导致表格总高度变化时,需要更新冻结列的阴影高度\r\n */\r\n private updateFrozenColumnShadowHeight(): void {\r\n try {\r\n // 获取当前冻结列数量\r\n const frozenColCount = this.table.frozenColCount;\r\n if (frozenColCount > 0) {\r\n this.table.scenegraph.component.setFrozenColumnShadow(frozenColCount - 1);\r\n }\r\n } catch (error) {\r\n console.warn('更新冻结列阴影高度失败:', error);\r\n }\r\n }\r\n\r\n /**\r\n * 清理主从表功能\r\n */\r\n private cleanupMasterDetailFeatures(): void {\r\n // 清理主表事件处理器\r\n if (this.mainTableClickHandler) {\r\n this.table.off('click_cell', this.mainTableClickHandler);\r\n this.mainTableClickHandler = undefined;\r\n }\r\n // 清理表格 API 扩展\r\n if (this.tableAPIExtensions) {\r\n this.tableAPIExtensions.cleanup();\r\n this.tableAPIExtensions = undefined;\r\n }\r\n }\r\n}\r\n"]}
@@ -35,7 +35,7 @@ export class EventManager {
35
35
  effectiveCellHeight = originalHeight;
36
36
  const newHeight = effectiveCellHeight - (padding[0] + padding[2]);
37
37
  cellGroup.forEachChildren((child => {
38
- "rect" !== child.type && "chart" !== child.type && "custom-container" !== child.name && ("mark" === child.name ? child.setAttribute("y", 0) : "middle" === textBaseline ? child.setAttribute("y", padding[0] + (newHeight - child.AABBBounds.height()) / 2) : "bottom" === textBaseline ? child.setAttribute("y", padding[0] + newHeight - child.AABBBounds.height()) : child.setAttribute("y", padding[0]));
38
+ "rect" !== child.type && "chart" !== child.type && child.name !== VTable.CUSTOM_CONTAINER_NAME && ("mark" === child.name ? child.setAttribute("y", 0) : "middle" === textBaseline ? child.setAttribute("y", padding[0] + (newHeight - child.AABBBounds.height()) / 2) : "bottom" === textBaseline ? child.setAttribute("y", padding[0] + newHeight - child.AABBBounds.height()) : child.setAttribute("y", padding[0]));
39
39
  }));
40
40
  }
41
41
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/master-detail-plugin/events.ts"],"names":[],"mappings":"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","file":"events.js","sourcesContent":["import * as VTable from '@visactor/vtable';\r\n\r\n/**\r\n * 事件处理相关功能\r\n */\r\nexport class EventManager {\r\n private expandedRows: number[] = [];\r\n private originalResize: (() => void) | undefined;\r\n private eventHandlers: Array<{ type: string; handler: (...args: unknown[]) => unknown }> = [];\r\n private allExpandedRowsBeforeMove: Set<number> = new Set();\r\n private isCleanedUp = false;\r\n\r\n constructor(private table: VTable.ListTable) {}\r\n\r\n /**\r\n * 绑定事件处理器\r\n */\r\n bindEventHandlers(): void {\r\n const scrollHandler = () => this.onUpdateSubTablePositions();\r\n const resizeRowHandler = () => this.onUpdateSubTablePositionsForRow();\r\n this.table.on(VTable.TABLE_EVENT_TYPE.SCROLL, scrollHandler);\r\n this.table.on(VTable.TABLE_EVENT_TYPE.RESIZE_ROW, resizeRowHandler);\r\n this.eventHandlers.push(\r\n { type: VTable.TABLE_EVENT_TYPE.SCROLL, handler: scrollHandler },\r\n { type: VTable.TABLE_EVENT_TYPE.RESIZE_ROW, handler: resizeRowHandler }\r\n );\r\n this.wrapTableResizeMethod();\r\n this.bindTreeHierarchyStateChange();\r\n this.bindRowMoveEvents();\r\n }\r\n\r\n /**\r\n * 包装表格resize方法\r\n */\r\n private wrapTableResizeMethod(): void {\r\n const originalResize = this.table.resize.bind(this.table);\r\n this.originalResize = originalResize;\r\n this.table.resize = () => {\r\n originalResize();\r\n this.onUpdateSubTablePositions();\r\n };\r\n }\r\n\r\n /**\r\n * 处理单元格内容宽度更新后的事件\r\n */\r\n handleAfterUpdateCellContentWidth(eventData: {\r\n col: number;\r\n row: number;\r\n cellHeight: number;\r\n cellGroup: any;\r\n padding: [number, number, number, number];\r\n textBaseline: CanvasTextBaseline;\r\n }): void {\r\n const { col, row, cellGroup, cellHeight, padding, textBaseline } = eventData;\r\n // 检查是否为 customMergeCell,如果是则修正文字位置\r\n if (this.isCustomMergeCell(col, row)) {\r\n this.fixCustomMergeCellTextPosition(cellGroup, padding);\r\n return;\r\n }\r\n let effectiveCellHeight = cellHeight;\r\n if (cellGroup.col !== undefined && cellGroup.row !== undefined) {\r\n try {\r\n const recordIndex = this.table.getRecordShowIndexByCell(cellGroup.col, cellGroup.row);\r\n if (recordIndex !== undefined) {\r\n const originalHeight = this.getOriginalRowHeight?.(recordIndex) || 0;\r\n if (originalHeight > 0) {\r\n effectiveCellHeight = originalHeight;\r\n // 重新调整单元格内容的纵向位置,使用原始高度\r\n const newHeight = effectiveCellHeight - (padding[0] + padding[2]);\r\n cellGroup.forEachChildren((child: any) => {\r\n if (child.type === 'rect' || child.type === 'chart' || child.name === 'custom-container') {\r\n return;\r\n }\r\n if (child.name === 'mark') {\r\n child.setAttribute('y', 0);\r\n } else if (textBaseline === 'middle') {\r\n child.setAttribute('y', padding[0] + (newHeight - child.AABBBounds.height()) / 2);\r\n } else if (textBaseline === 'bottom') {\r\n child.setAttribute('y', padding[0] + newHeight - child.AABBBounds.height());\r\n } else {\r\n child.setAttribute('y', padding[0]);\r\n }\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n console.warn(\r\n 'Failed to get original row height in masterDetail mode (handleAfterUpdateCellContentWidth):',\r\n error\r\n );\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 修正 customMergeCell 的文字位置\r\n */\r\n private fixCustomMergeCellTextPosition(cellGroup: any, padding: [number, number, number, number]): void {\r\n const { col, row } = cellGroup;\r\n const table = this.table as any;\r\n const customMerge = table.getCustomMerge(col, row);\r\n if (!customMerge || !customMerge.style || !customMerge.range) {\r\n return;\r\n }\r\n // 获取配置的 textAlign,默认为 'left'\r\n const configuredTextAlign = customMerge.style.textAlign || 'left';\r\n const { start, end } = customMerge.range;\r\n let totalMergeWidth = 0;\r\n let mergeStartX = 0;\r\n for (let c = start.col; c <= end.col; c++) {\r\n totalMergeWidth += table.getColWidth(c);\r\n }\r\n for (let c = 0; c < start.col; c++) {\r\n mergeStartX += table.getColWidth(c);\r\n }\r\n cellGroup.forEachChildren((child: any) => {\r\n if (child.name === 'text' || child.name === 'content') {\r\n let xPosition: number;\r\n if (configuredTextAlign === 'center') {\r\n // 居中对齐:合并区域起始位置 + padding + 合并区域宽度的一半\r\n xPosition = mergeStartX + padding[3] + (totalMergeWidth - padding[1] - padding[3]) / 2;\r\n } else if (configuredTextAlign === 'right') {\r\n // 右对齐:合并区域起始位置 + 合并区域总宽度 - 右padding\r\n xPosition = mergeStartX + totalMergeWidth - padding[1];\r\n } else {\r\n // 左对齐:合并区域起始位置 + 左padding\r\n xPosition = mergeStartX + padding[3];\r\n }\r\n child.setAttribute('x', xPosition);\r\n child.setAttribute('textAlign', configuredTextAlign);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 检查是否为 customMergeCell\r\n */\r\n private isCustomMergeCell(col: number, row: number): boolean {\r\n try {\r\n const table = this.table;\r\n if (table && table.getCustomMerge) {\r\n const customMerge = table.getCustomMerge(col, row);\r\n return !!customMerge;\r\n }\r\n } catch (error) {\r\n console.warn('Error checking custom merge cell:', error);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * 处理选择边框高度更新后的事件\r\n */\r\n handleAfterUpdateSelectBorderHeight(eventData: {\r\n startRow: number;\r\n endRow: number;\r\n currentHeight: number;\r\n selectComp: { rect: any; fillhandle?: any; role: string };\r\n }): void {\r\n const { startRow, endRow, selectComp } = eventData;\r\n // 判断是否为单选一个单元格\r\n const isSingleCellSelection = startRow === endRow;\r\n // 判断选中区域的最后一行是否为展开行\r\n const isLastRowExpanded = this.expandedRows.includes(endRow);\r\n if (isSingleCellSelection) {\r\n // 单选一个CellGroup,使用原始高度\r\n const headerCount = this.table.columnHeaderLevelCount || 0;\r\n const bodyRowIndex = startRow - headerCount;\r\n const originalHeight = this.getOriginalRowHeight?.(bodyRowIndex) || 0;\r\n if (originalHeight > 0 && originalHeight !== eventData.currentHeight) {\r\n selectComp.rect.setAttributes({\r\n height: originalHeight\r\n });\r\n if (selectComp.fillhandle) {\r\n const currentY = selectComp.rect.attribute.y;\r\n selectComp.fillhandle.setAttributes({\r\n y: currentY + originalHeight\r\n });\r\n }\r\n }\r\n } else if (isLastRowExpanded) {\r\n // 多行选中且最后一行是展开行,需要调整总高度\r\n const headerCount = this.table.columnHeaderLevelCount || 0;\r\n const lastRowBodyIndex = endRow - headerCount;\r\n const lastRowOriginalHeight = this.getOriginalRowHeight?.(lastRowBodyIndex) || 0;\r\n if (lastRowOriginalHeight > 0) {\r\n // 获取最后一行的当前逻辑高度\r\n const lastRowCurrentHeight = this.table.getRowHeight(endRow);\r\n // 计算调整后的总高度:当前总高度 - 最后一行当前高度 + 最后一行原始高度\r\n const adjustedTotalHeight = eventData.currentHeight - lastRowCurrentHeight + lastRowOriginalHeight;\r\n selectComp.rect.setAttributes({\r\n height: adjustedTotalHeight\r\n });\r\n if (selectComp.fillhandle) {\r\n const currentY = selectComp.rect.attribute.y;\r\n selectComp.fillhandle.setAttributes({\r\n y: currentY + adjustedTotalHeight\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 排序前的操作\r\n */\r\n executeMasterDetailBeforeSort(): void {\r\n const table = this.table as any;\r\n if (table.internalProps.expandedRecordIndices && table.internalProps.expandedRecordIndices.length > 0) {\r\n table.internalProps._tempExpandedRecordIndices = [...table.internalProps.expandedRecordIndices];\r\n }\r\n if (this.expandedRows.length > 0) {\r\n const expandedRowIndices = [...this.expandedRows];\r\n expandedRowIndices.forEach(rowIndex => {\r\n try {\r\n const tableOptions = (table as any).options;\r\n if (tableOptions && tableOptions.pagination) {\r\n this.onCollapseRowToNoRealRecordIndex?.(rowIndex);\r\n } else {\r\n this.onCollapseRow?.(rowIndex);\r\n }\r\n } catch (e) {\r\n // 收起失败\r\n console.warn(`Failed to collapse row ${rowIndex} before sort:`, e);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * 排序后的操作\r\n */\r\n executeMasterDetailAfterSort(): void {\r\n const table = this.table as any;\r\n const tempExpandedRecordIndices = table.internalProps._tempExpandedRecordIndices;\r\n if (tempExpandedRecordIndices && tempExpandedRecordIndices.length > 0) {\r\n const recordIndicesArray = [...tempExpandedRecordIndices];\r\n recordIndicesArray.forEach(recordIndex => {\r\n const bodyRowIndex = table.getBodyRowIndexByRecordIndex(recordIndex);\r\n if (bodyRowIndex >= 0) {\r\n try {\r\n const targetRowIndex = bodyRowIndex + table.columnHeaderLevelCount;\r\n this.onExpandRow?.(targetRowIndex);\r\n } catch (e) {\r\n console.warn(`Failed to expand row ${bodyRowIndex + table.columnHeaderLevelCount} after sort:`, e);\r\n }\r\n }\r\n });\r\n // 清理临时变量\r\n delete table.internalProps._tempExpandedRecordIndices;\r\n }\r\n }\r\n /**\r\n * 获取展开的行数组\r\n */\r\n getExpandedRows(): number[] {\r\n return this.expandedRows;\r\n }\r\n\r\n /**\r\n * 设置展开的行数组\r\n */\r\n setExpandedRows(rows: number[]): void {\r\n this.expandedRows = rows;\r\n }\r\n\r\n /**\r\n * 添加展开行\r\n */\r\n addExpandedRow(rowIndex: number): void {\r\n if (!this.expandedRows.includes(rowIndex)) {\r\n this.expandedRows.push(rowIndex);\r\n }\r\n }\r\n\r\n /**\r\n * 移除展开行\r\n */\r\n removeExpandedRow(rowIndex: number): void {\r\n const index = this.expandedRows.indexOf(rowIndex);\r\n if (index > -1) {\r\n this.expandedRows.splice(index, 1);\r\n }\r\n }\r\n\r\n /**\r\n * 检查行是否展开\r\n */\r\n isRowExpanded(rowIndex: number): boolean {\r\n return this.expandedRows.includes(rowIndex);\r\n }\r\n\r\n /**\r\n * 绑定树状态变化事件\r\n */\r\n private bindTreeHierarchyStateChange(): void {\r\n const hierarchyStateChangeHandler = (args: unknown) => {\r\n const { col, row } = args as {\r\n col: number;\r\n row: number;\r\n };\r\n const record = this.getRecordByRowIndex(row - this.table.columnHeaderLevelCount);\r\n if (record && typeof record === 'object' && 'children' in record && record.children === true) {\r\n return;\r\n }\r\n this.onToggleRowExpand?.(row, col);\r\n };\r\n this.table.on(VTable.TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, hierarchyStateChangeHandler);\r\n this.eventHandlers.push({\r\n type: VTable.TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE,\r\n handler: hierarchyStateChangeHandler\r\n });\r\n }\r\n\r\n /**\r\n * 获取指定行的记录数据\r\n */\r\n private getRecordByRowIndex(bodyRowIndex: number): unknown {\r\n try {\r\n const table = this.table;\r\n const recordIndex = table.getRecordShowIndexByCell(0, bodyRowIndex + table.columnHeaderLevelCount);\r\n return table.dataSource.get(recordIndex);\r\n } catch (error) {\r\n console.warn('Error getting record by row index:', error);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * 绑定行移动事件处理\r\n */\r\n private bindRowMoveEvents(): void {\r\n const moveStartHandler = (args: any) => {\r\n if (!args || typeof args.col !== 'number' || typeof args.row !== 'number') {\r\n return;\r\n }\r\n const { col, row } = args;\r\n const cellLocation = this.table.getCellLocation(col, row);\r\n const isRowMove =\r\n cellLocation === 'rowHeader' || (this.table.internalProps.layoutMap as any).isSeriesNumberInBody?.(col, row);\r\n if (!isRowMove) {\r\n return;\r\n }\r\n this.allExpandedRowsBeforeMove.clear();\r\n const currentExpandedRows = [...this.expandedRows];\r\n currentExpandedRows.forEach(rowIndex => {\r\n this.allExpandedRowsBeforeMove.add(rowIndex);\r\n });\r\n currentExpandedRows.forEach(rowIndex => {\r\n this.onCollapseRow?.(rowIndex);\r\n });\r\n };\r\n\r\n const moveSuccessHandler = (args: any) => {\r\n // 如果没有记录的展开状态,说明不是行移动或没有展开的行\r\n if (this.allExpandedRowsBeforeMove.size === 0) {\r\n return;\r\n }\r\n\r\n // 直接从columnMove状态获取原始的移动参数\r\n const columnMoveState = this.table.stateManager?.columnMove;\r\n const { colSource, rowSource, colTarget, rowTarget } = columnMoveState;\r\n // 移动成功后,恢复所有之前展开的行\r\n setTimeout(() => {\r\n const sourceRowIndex = rowSource;\r\n const targetRowIndex = rowTarget;\r\n const moveDirection = targetRowIndex > sourceRowIndex ? 'down' : 'up';\r\n // 计算移动后各行的新位置并重新展开\r\n this.allExpandedRowsBeforeMove.forEach(originalRowIndex => {\r\n let newRowIndex = originalRowIndex;\r\n\r\n if (sourceRowIndex === originalRowIndex) {\r\n newRowIndex = targetRowIndex;\r\n } else if (moveDirection === 'down') {\r\n if (originalRowIndex <= targetRowIndex && originalRowIndex > sourceRowIndex) {\r\n newRowIndex = originalRowIndex - 1;\r\n }\r\n } else if (moveDirection === 'up') {\r\n if (originalRowIndex >= targetRowIndex && originalRowIndex < sourceRowIndex) {\r\n newRowIndex = originalRowIndex + 1;\r\n }\r\n }\r\n this.onExpandRow?.(newRowIndex);\r\n });\r\n // 清空状态记录\r\n this.allExpandedRowsBeforeMove.clear();\r\n }, 0);\r\n };\r\n\r\n const moveFailHandler = (args: any) => {\r\n // 如果没有记录的展开状态,说明不是行移动或没有展开的行\r\n if (this.allExpandedRowsBeforeMove.size === 0) {\r\n return;\r\n }\r\n\r\n // 移动失败时,在原位置恢复所有展开的行\r\n setTimeout(() => {\r\n this.allExpandedRowsBeforeMove.forEach(originalRowIndex => {\r\n this.onExpandRow?.(originalRowIndex);\r\n });\r\n this.allExpandedRowsBeforeMove.clear();\r\n }, 0);\r\n };\r\n\r\n this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START, moveStartHandler);\r\n this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, moveSuccessHandler);\r\n this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL, moveFailHandler);\r\n this.eventHandlers.push(\r\n { type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START, handler: moveStartHandler },\r\n { type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, handler: moveSuccessHandler },\r\n { type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL, handler: moveFailHandler }\r\n );\r\n }\r\n\r\n /**\r\n * 清理事件处理器\r\n */\r\n cleanup(): void {\r\n if (this.isCleanedUp) {\r\n return; // 防止重复清理\r\n }\r\n this.isCleanedUp = true;\r\n // 清理展开状态数组\r\n this.expandedRows.length = 0;\r\n // 清理行移动状态\r\n this.allExpandedRowsBeforeMove.clear();\r\n // 恢复原始的resize方法\r\n if (this.originalResize && this.table) {\r\n try {\r\n this.table.resize = this.originalResize;\r\n this.originalResize = undefined;\r\n } catch (error) {\r\n console.warn('Error restoring original resize method:', error);\r\n }\r\n }\r\n // 移除所有事件监听器\r\n try {\r\n if (this.table) {\r\n this.eventHandlers.forEach(({ type, handler }) => {\r\n try {\r\n (this.table.off as (type: string, handler: unknown) => void)(type, handler);\r\n } catch (error) {\r\n console.warn(`Error removing event listener ${type}:`, error);\r\n }\r\n });\r\n this.eventHandlers.length = 0;\r\n }\r\n } catch (error) {\r\n console.warn('Error removing event listeners:', error);\r\n }\r\n // 清理回调函数引用\r\n this.onUpdateSubTablePositions = undefined;\r\n this.onUpdateSubTablePositionsForRow = undefined;\r\n this.onExpandRow = undefined;\r\n this.onCollapseRow = undefined;\r\n this.onCollapseRowToNoRealRecordIndex = undefined;\r\n this.onToggleRowExpand = undefined;\r\n this.getOriginalRowHeight = undefined;\r\n // 清理表格引用,避免循环引用\r\n (this as unknown as { table: unknown }).table = null;\r\n }\r\n\r\n // 回调函数,需要从外部注入\r\n private onUpdateSubTablePositions?: () => void;\r\n private onUpdateSubTablePositionsForRow?: () => void;\r\n private onExpandRow?: (rowIndex: number, colIndex?: number) => void;\r\n private onCollapseRow?: (rowIndex: number, colIndex?: number) => void;\r\n private onCollapseRowToNoRealRecordIndex?: (rowIndex: number) => void;\r\n private onToggleRowExpand?: (rowIndex: number, colIndex?: number) => void;\r\n private getOriginalRowHeight?: (bodyRowIndex: number) => number;\r\n\r\n /**\r\n * 设置回调函数\r\n */\r\n setCallbacks(callbacks: {\r\n onUpdateSubTablePositions?: () => void;\r\n onUpdateSubTablePositionsForRow?: () => void;\r\n onExpandRow?: (rowIndex: number, colIndex?: number) => void;\r\n onCollapseRow?: (rowIndex: number, colIndex?: number) => void;\r\n onCollapseRowToNoRealRecordIndex?: (rowIndex: number) => void;\r\n onToggleRowExpand?: (rowIndex: number, colIndex?: number) => void;\r\n getOriginalRowHeight?: (bodyRowIndex: number) => number;\r\n }): void {\r\n this.onUpdateSubTablePositions = callbacks.onUpdateSubTablePositions;\r\n this.onUpdateSubTablePositionsForRow = callbacks.onUpdateSubTablePositionsForRow;\r\n this.onExpandRow = callbacks.onExpandRow;\r\n this.onCollapseRow = callbacks.onCollapseRow;\r\n this.onCollapseRowToNoRealRecordIndex = callbacks.onCollapseRowToNoRealRecordIndex;\r\n this.onToggleRowExpand = callbacks.onToggleRowExpand;\r\n this.getOriginalRowHeight = callbacks.getOriginalRowHeight;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/master-detail-plugin/events.ts"],"names":[],"mappings":"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","file":"events.js","sourcesContent":["import * as VTable from '@visactor/vtable';\r\n\r\n/**\r\n * 事件处理相关功能\r\n */\r\nexport class EventManager {\r\n private expandedRows: number[] = [];\r\n private originalResize: (() => void) | undefined;\r\n private eventHandlers: Array<{ type: string; handler: (...args: unknown[]) => unknown }> = [];\r\n private allExpandedRowsBeforeMove: Set<number> = new Set();\r\n private isCleanedUp = false;\r\n\r\n constructor(private table: VTable.ListTable) {}\r\n\r\n /**\r\n * 绑定事件处理器\r\n */\r\n bindEventHandlers(): void {\r\n const scrollHandler = () => this.onUpdateSubTablePositions();\r\n const resizeRowHandler = () => this.onUpdateSubTablePositionsForRow();\r\n this.table.on(VTable.TABLE_EVENT_TYPE.SCROLL, scrollHandler);\r\n this.table.on(VTable.TABLE_EVENT_TYPE.RESIZE_ROW, resizeRowHandler);\r\n this.eventHandlers.push(\r\n { type: VTable.TABLE_EVENT_TYPE.SCROLL, handler: scrollHandler },\r\n { type: VTable.TABLE_EVENT_TYPE.RESIZE_ROW, handler: resizeRowHandler }\r\n );\r\n this.wrapTableResizeMethod();\r\n this.bindTreeHierarchyStateChange();\r\n this.bindRowMoveEvents();\r\n }\r\n\r\n /**\r\n * 包装表格resize方法\r\n */\r\n private wrapTableResizeMethod(): void {\r\n const originalResize = this.table.resize.bind(this.table);\r\n this.originalResize = originalResize;\r\n this.table.resize = () => {\r\n originalResize();\r\n this.onUpdateSubTablePositions();\r\n };\r\n }\r\n\r\n /**\r\n * 处理单元格内容宽度更新后的事件\r\n */\r\n handleAfterUpdateCellContentWidth(eventData: {\r\n col: number;\r\n row: number;\r\n cellHeight: number;\r\n cellGroup: any;\r\n padding: [number, number, number, number];\r\n textBaseline: CanvasTextBaseline;\r\n }): void {\r\n const { col, row, cellGroup, cellHeight, padding, textBaseline } = eventData;\r\n // 检查是否为 customMergeCell,如果是则修正文字位置\r\n if (this.isCustomMergeCell(col, row)) {\r\n this.fixCustomMergeCellTextPosition(cellGroup, padding);\r\n return;\r\n }\r\n let effectiveCellHeight = cellHeight;\r\n if (cellGroup.col !== undefined && cellGroup.row !== undefined) {\r\n try {\r\n const recordIndex = this.table.getRecordShowIndexByCell(cellGroup.col, cellGroup.row);\r\n if (recordIndex !== undefined) {\r\n const originalHeight = this.getOriginalRowHeight?.(recordIndex) || 0;\r\n if (originalHeight > 0) {\r\n effectiveCellHeight = originalHeight;\r\n // 重新调整单元格内容的纵向位置,使用原始高度\r\n const newHeight = effectiveCellHeight - (padding[0] + padding[2]);\r\n cellGroup.forEachChildren((child: any) => {\r\n if (child.type === 'rect' || child.type === 'chart' || child.name === VTable.CUSTOM_CONTAINER_NAME) {\r\n return;\r\n }\r\n if (child.name === 'mark') {\r\n child.setAttribute('y', 0);\r\n } else if (textBaseline === 'middle') {\r\n child.setAttribute('y', padding[0] + (newHeight - child.AABBBounds.height()) / 2);\r\n } else if (textBaseline === 'bottom') {\r\n child.setAttribute('y', padding[0] + newHeight - child.AABBBounds.height());\r\n } else {\r\n child.setAttribute('y', padding[0]);\r\n }\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n console.warn(\r\n 'Failed to get original row height in masterDetail mode (handleAfterUpdateCellContentWidth):',\r\n error\r\n );\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 修正 customMergeCell 的文字位置\r\n */\r\n private fixCustomMergeCellTextPosition(cellGroup: any, padding: [number, number, number, number]): void {\r\n const { col, row } = cellGroup;\r\n const table = this.table as any;\r\n const customMerge = table.getCustomMerge(col, row);\r\n if (!customMerge || !customMerge.style || !customMerge.range) {\r\n return;\r\n }\r\n // 获取配置的 textAlign,默认为 'left'\r\n const configuredTextAlign = customMerge.style.textAlign || 'left';\r\n const { start, end } = customMerge.range;\r\n let totalMergeWidth = 0;\r\n let mergeStartX = 0;\r\n for (let c = start.col; c <= end.col; c++) {\r\n totalMergeWidth += table.getColWidth(c);\r\n }\r\n for (let c = 0; c < start.col; c++) {\r\n mergeStartX += table.getColWidth(c);\r\n }\r\n cellGroup.forEachChildren((child: any) => {\r\n if (child.name === 'text' || child.name === 'content') {\r\n let xPosition: number;\r\n if (configuredTextAlign === 'center') {\r\n // 居中对齐:合并区域起始位置 + padding + 合并区域宽度的一半\r\n xPosition = mergeStartX + padding[3] + (totalMergeWidth - padding[1] - padding[3]) / 2;\r\n } else if (configuredTextAlign === 'right') {\r\n // 右对齐:合并区域起始位置 + 合并区域总宽度 - 右padding\r\n xPosition = mergeStartX + totalMergeWidth - padding[1];\r\n } else {\r\n // 左对齐:合并区域起始位置 + 左padding\r\n xPosition = mergeStartX + padding[3];\r\n }\r\n child.setAttribute('x', xPosition);\r\n child.setAttribute('textAlign', configuredTextAlign);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 检查是否为 customMergeCell\r\n */\r\n private isCustomMergeCell(col: number, row: number): boolean {\r\n try {\r\n const table = this.table;\r\n if (table && table.getCustomMerge) {\r\n const customMerge = table.getCustomMerge(col, row);\r\n return !!customMerge;\r\n }\r\n } catch (error) {\r\n console.warn('Error checking custom merge cell:', error);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * 处理选择边框高度更新后的事件\r\n */\r\n handleAfterUpdateSelectBorderHeight(eventData: {\r\n startRow: number;\r\n endRow: number;\r\n currentHeight: number;\r\n selectComp: { rect: any; fillhandle?: any; role: string };\r\n }): void {\r\n const { startRow, endRow, selectComp } = eventData;\r\n // 判断是否为单选一个单元格\r\n const isSingleCellSelection = startRow === endRow;\r\n // 判断选中区域的最后一行是否为展开行\r\n const isLastRowExpanded = this.expandedRows.includes(endRow);\r\n if (isSingleCellSelection) {\r\n // 单选一个CellGroup,使用原始高度\r\n const headerCount = this.table.columnHeaderLevelCount || 0;\r\n const bodyRowIndex = startRow - headerCount;\r\n const originalHeight = this.getOriginalRowHeight?.(bodyRowIndex) || 0;\r\n if (originalHeight > 0 && originalHeight !== eventData.currentHeight) {\r\n selectComp.rect.setAttributes({\r\n height: originalHeight\r\n });\r\n if (selectComp.fillhandle) {\r\n const currentY = selectComp.rect.attribute.y;\r\n selectComp.fillhandle.setAttributes({\r\n y: currentY + originalHeight\r\n });\r\n }\r\n }\r\n } else if (isLastRowExpanded) {\r\n // 多行选中且最后一行是展开行,需要调整总高度\r\n const headerCount = this.table.columnHeaderLevelCount || 0;\r\n const lastRowBodyIndex = endRow - headerCount;\r\n const lastRowOriginalHeight = this.getOriginalRowHeight?.(lastRowBodyIndex) || 0;\r\n if (lastRowOriginalHeight > 0) {\r\n // 获取最后一行的当前逻辑高度\r\n const lastRowCurrentHeight = this.table.getRowHeight(endRow);\r\n // 计算调整后的总高度:当前总高度 - 最后一行当前高度 + 最后一行原始高度\r\n const adjustedTotalHeight = eventData.currentHeight - lastRowCurrentHeight + lastRowOriginalHeight;\r\n selectComp.rect.setAttributes({\r\n height: adjustedTotalHeight\r\n });\r\n if (selectComp.fillhandle) {\r\n const currentY = selectComp.rect.attribute.y;\r\n selectComp.fillhandle.setAttributes({\r\n y: currentY + adjustedTotalHeight\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 排序前的操作\r\n */\r\n executeMasterDetailBeforeSort(): void {\r\n const table = this.table as any;\r\n if (table.internalProps.expandedRecordIndices && table.internalProps.expandedRecordIndices.length > 0) {\r\n table.internalProps._tempExpandedRecordIndices = [...table.internalProps.expandedRecordIndices];\r\n }\r\n if (this.expandedRows.length > 0) {\r\n const expandedRowIndices = [...this.expandedRows];\r\n expandedRowIndices.forEach(rowIndex => {\r\n try {\r\n const tableOptions = (table as any).options;\r\n if (tableOptions && tableOptions.pagination) {\r\n this.onCollapseRowToNoRealRecordIndex?.(rowIndex);\r\n } else {\r\n this.onCollapseRow?.(rowIndex);\r\n }\r\n } catch (e) {\r\n // 收起失败\r\n console.warn(`Failed to collapse row ${rowIndex} before sort:`, e);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * 排序后的操作\r\n */\r\n executeMasterDetailAfterSort(): void {\r\n const table = this.table as any;\r\n const tempExpandedRecordIndices = table.internalProps._tempExpandedRecordIndices;\r\n if (tempExpandedRecordIndices && tempExpandedRecordIndices.length > 0) {\r\n const recordIndicesArray = [...tempExpandedRecordIndices];\r\n recordIndicesArray.forEach(recordIndex => {\r\n const bodyRowIndex = table.getBodyRowIndexByRecordIndex(recordIndex);\r\n if (bodyRowIndex >= 0) {\r\n try {\r\n const targetRowIndex = bodyRowIndex + table.columnHeaderLevelCount;\r\n this.onExpandRow?.(targetRowIndex);\r\n } catch (e) {\r\n console.warn(`Failed to expand row ${bodyRowIndex + table.columnHeaderLevelCount} after sort:`, e);\r\n }\r\n }\r\n });\r\n // 清理临时变量\r\n delete table.internalProps._tempExpandedRecordIndices;\r\n }\r\n }\r\n /**\r\n * 获取展开的行数组\r\n */\r\n getExpandedRows(): number[] {\r\n return this.expandedRows;\r\n }\r\n\r\n /**\r\n * 设置展开的行数组\r\n */\r\n setExpandedRows(rows: number[]): void {\r\n this.expandedRows = rows;\r\n }\r\n\r\n /**\r\n * 添加展开行\r\n */\r\n addExpandedRow(rowIndex: number): void {\r\n if (!this.expandedRows.includes(rowIndex)) {\r\n this.expandedRows.push(rowIndex);\r\n }\r\n }\r\n\r\n /**\r\n * 移除展开行\r\n */\r\n removeExpandedRow(rowIndex: number): void {\r\n const index = this.expandedRows.indexOf(rowIndex);\r\n if (index > -1) {\r\n this.expandedRows.splice(index, 1);\r\n }\r\n }\r\n\r\n /**\r\n * 检查行是否展开\r\n */\r\n isRowExpanded(rowIndex: number): boolean {\r\n return this.expandedRows.includes(rowIndex);\r\n }\r\n\r\n /**\r\n * 绑定树状态变化事件\r\n */\r\n private bindTreeHierarchyStateChange(): void {\r\n const hierarchyStateChangeHandler = (args: unknown) => {\r\n const { col, row } = args as {\r\n col: number;\r\n row: number;\r\n };\r\n const record = this.getRecordByRowIndex(row - this.table.columnHeaderLevelCount);\r\n if (record && typeof record === 'object' && 'children' in record && record.children === true) {\r\n return;\r\n }\r\n this.onToggleRowExpand?.(row, col);\r\n };\r\n this.table.on(VTable.TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, hierarchyStateChangeHandler);\r\n this.eventHandlers.push({\r\n type: VTable.TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE,\r\n handler: hierarchyStateChangeHandler\r\n });\r\n }\r\n\r\n /**\r\n * 获取指定行的记录数据\r\n */\r\n private getRecordByRowIndex(bodyRowIndex: number): unknown {\r\n try {\r\n const table = this.table;\r\n const recordIndex = table.getRecordShowIndexByCell(0, bodyRowIndex + table.columnHeaderLevelCount);\r\n return table.dataSource.get(recordIndex);\r\n } catch (error) {\r\n console.warn('Error getting record by row index:', error);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * 绑定行移动事件处理\r\n */\r\n private bindRowMoveEvents(): void {\r\n const moveStartHandler = (args: any) => {\r\n if (!args || typeof args.col !== 'number' || typeof args.row !== 'number') {\r\n return;\r\n }\r\n const { col, row } = args;\r\n const cellLocation = this.table.getCellLocation(col, row);\r\n const isRowMove =\r\n cellLocation === 'rowHeader' || (this.table.internalProps.layoutMap as any).isSeriesNumberInBody?.(col, row);\r\n if (!isRowMove) {\r\n return;\r\n }\r\n this.allExpandedRowsBeforeMove.clear();\r\n const currentExpandedRows = [...this.expandedRows];\r\n currentExpandedRows.forEach(rowIndex => {\r\n this.allExpandedRowsBeforeMove.add(rowIndex);\r\n });\r\n currentExpandedRows.forEach(rowIndex => {\r\n this.onCollapseRow?.(rowIndex);\r\n });\r\n };\r\n\r\n const moveSuccessHandler = (args: any) => {\r\n // 如果没有记录的展开状态,说明不是行移动或没有展开的行\r\n if (this.allExpandedRowsBeforeMove.size === 0) {\r\n return;\r\n }\r\n\r\n // 直接从columnMove状态获取原始的移动参数\r\n const columnMoveState = this.table.stateManager?.columnMove;\r\n const { colSource, rowSource, colTarget, rowTarget } = columnMoveState;\r\n // 移动成功后,恢复所有之前展开的行\r\n setTimeout(() => {\r\n const sourceRowIndex = rowSource;\r\n const targetRowIndex = rowTarget;\r\n const moveDirection = targetRowIndex > sourceRowIndex ? 'down' : 'up';\r\n // 计算移动后各行的新位置并重新展开\r\n this.allExpandedRowsBeforeMove.forEach(originalRowIndex => {\r\n let newRowIndex = originalRowIndex;\r\n\r\n if (sourceRowIndex === originalRowIndex) {\r\n newRowIndex = targetRowIndex;\r\n } else if (moveDirection === 'down') {\r\n if (originalRowIndex <= targetRowIndex && originalRowIndex > sourceRowIndex) {\r\n newRowIndex = originalRowIndex - 1;\r\n }\r\n } else if (moveDirection === 'up') {\r\n if (originalRowIndex >= targetRowIndex && originalRowIndex < sourceRowIndex) {\r\n newRowIndex = originalRowIndex + 1;\r\n }\r\n }\r\n this.onExpandRow?.(newRowIndex);\r\n });\r\n // 清空状态记录\r\n this.allExpandedRowsBeforeMove.clear();\r\n }, 0);\r\n };\r\n\r\n const moveFailHandler = (args: any) => {\r\n // 如果没有记录的展开状态,说明不是行移动或没有展开的行\r\n if (this.allExpandedRowsBeforeMove.size === 0) {\r\n return;\r\n }\r\n\r\n // 移动失败时,在原位置恢复所有展开的行\r\n setTimeout(() => {\r\n this.allExpandedRowsBeforeMove.forEach(originalRowIndex => {\r\n this.onExpandRow?.(originalRowIndex);\r\n });\r\n this.allExpandedRowsBeforeMove.clear();\r\n }, 0);\r\n };\r\n\r\n this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START, moveStartHandler);\r\n this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, moveSuccessHandler);\r\n this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL, moveFailHandler);\r\n this.eventHandlers.push(\r\n { type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START, handler: moveStartHandler },\r\n { type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, handler: moveSuccessHandler },\r\n { type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL, handler: moveFailHandler }\r\n );\r\n }\r\n\r\n /**\r\n * 清理事件处理器\r\n */\r\n cleanup(): void {\r\n if (this.isCleanedUp) {\r\n return; // 防止重复清理\r\n }\r\n this.isCleanedUp = true;\r\n // 清理展开状态数组\r\n this.expandedRows.length = 0;\r\n // 清理行移动状态\r\n this.allExpandedRowsBeforeMove.clear();\r\n // 恢复原始的resize方法\r\n if (this.originalResize && this.table) {\r\n try {\r\n this.table.resize = this.originalResize;\r\n this.originalResize = undefined;\r\n } catch (error) {\r\n console.warn('Error restoring original resize method:', error);\r\n }\r\n }\r\n // 移除所有事件监听器\r\n try {\r\n if (this.table) {\r\n this.eventHandlers.forEach(({ type, handler }) => {\r\n try {\r\n (this.table.off as (type: string, handler: unknown) => void)(type, handler);\r\n } catch (error) {\r\n console.warn(`Error removing event listener ${type}:`, error);\r\n }\r\n });\r\n this.eventHandlers.length = 0;\r\n }\r\n } catch (error) {\r\n console.warn('Error removing event listeners:', error);\r\n }\r\n // 清理回调函数引用\r\n this.onUpdateSubTablePositions = undefined;\r\n this.onUpdateSubTablePositionsForRow = undefined;\r\n this.onExpandRow = undefined;\r\n this.onCollapseRow = undefined;\r\n this.onCollapseRowToNoRealRecordIndex = undefined;\r\n this.onToggleRowExpand = undefined;\r\n this.getOriginalRowHeight = undefined;\r\n // 清理表格引用,避免循环引用\r\n (this as unknown as { table: unknown }).table = null;\r\n }\r\n\r\n // 回调函数,需要从外部注入\r\n private onUpdateSubTablePositions?: () => void;\r\n private onUpdateSubTablePositionsForRow?: () => void;\r\n private onExpandRow?: (rowIndex: number, colIndex?: number) => void;\r\n private onCollapseRow?: (rowIndex: number, colIndex?: number) => void;\r\n private onCollapseRowToNoRealRecordIndex?: (rowIndex: number) => void;\r\n private onToggleRowExpand?: (rowIndex: number, colIndex?: number) => void;\r\n private getOriginalRowHeight?: (bodyRowIndex: number) => number;\r\n\r\n /**\r\n * 设置回调函数\r\n */\r\n setCallbacks(callbacks: {\r\n onUpdateSubTablePositions?: () => void;\r\n onUpdateSubTablePositionsForRow?: () => void;\r\n onExpandRow?: (rowIndex: number, colIndex?: number) => void;\r\n onCollapseRow?: (rowIndex: number, colIndex?: number) => void;\r\n onCollapseRowToNoRealRecordIndex?: (rowIndex: number) => void;\r\n onToggleRowExpand?: (rowIndex: number, colIndex?: number) => void;\r\n getOriginalRowHeight?: (bodyRowIndex: number) => number;\r\n }): void {\r\n this.onUpdateSubTablePositions = callbacks.onUpdateSubTablePositions;\r\n this.onUpdateSubTablePositionsForRow = callbacks.onUpdateSubTablePositionsForRow;\r\n this.onExpandRow = callbacks.onExpandRow;\r\n this.onCollapseRow = callbacks.onCollapseRow;\r\n this.onCollapseRowToNoRealRecordIndex = callbacks.onCollapseRowToNoRealRecordIndex;\r\n this.onToggleRowExpand = callbacks.onToggleRowExpand;\r\n this.getOriginalRowHeight = callbacks.getOriginalRowHeight;\r\n }\r\n}\r\n"]}
@@ -11,6 +11,10 @@ export declare class SubTableManager {
11
11
  private cleanupAllTimers;
12
12
  private updateSubTableCheckboxVisualState;
13
13
  renderSubTable(bodyRowIndex: number, childrenData: unknown[], getDetailConfig: (record: unknown, bodyRowIndex: number) => DetailTableOptions | null): void;
14
+ private handleAutoHeightAfterRender;
15
+ private calculateSubTableContentHeight;
16
+ private onAutoHeightCalculated?;
17
+ setAutoHeightCallback(callback: (bodyRowIndex: number, newTotalHeight: number) => void): void;
14
18
  private columnRangeCache;
15
19
  private getColumnRange;
16
20
  private calculateSubTableViewBox;
@@ -111,6 +111,7 @@ export class SubTableManager {
111
111
  }));
112
112
  }
113
113
  renderSubTable(bodyRowIndex, childrenData, getDetailConfig) {
114
+ var _a;
114
115
  const internalProps = getInternalProps(this.table), record = getRecordByRowIndex(this.table, bodyRowIndex);
115
116
  if (!record) return;
116
117
  if (!childrenData || 0 === childrenData.length) return;
@@ -126,7 +127,7 @@ export class SubTableManager {
126
127
  canvasWidth: containerWidth,
127
128
  canvasHeight: containerHeight,
128
129
  theme: parentOptions.theme
129
- }, _a = detailConfig || {}, {style: _style} = _a, userDetailConfig = __rest(_a, [ "style" ]), subTableOptions = Object.assign(Object.assign({}, baseSubTableOptions), userDetailConfig), subTable = new VTable.ListTable(this.table.container, subTableOptions);
130
+ }, _b = detailConfig || {}, {style: _style} = _b, userDetailConfig = __rest(_b, [ "style" ]), subTableOptions = Object.assign(Object.assign({}, baseSubTableOptions), userDetailConfig), subTable = new VTable.ListTable(this.table.container, subTableOptions);
130
131
  internalProps.subTableInstances.set(bodyRowIndex, subTable), this.restoreSubTableCheckboxState(bodyRowIndex, subTable);
131
132
  const afterRenderHandler = () => {
132
133
  internalProps.subTableInstances && internalProps.subTableInstances.has(bodyRowIndex) && subTable.render();
@@ -134,7 +135,41 @@ export class SubTableManager {
134
135
  this.table.on("after_render", afterRenderHandler), subTable.__afterRenderHandler = afterRenderHandler,
135
136
  this.setupScrollEventIsolation(subTable), this.setupUnifiedSelectionManagement(bodyRowIndex, subTable),
136
137
  this.setupSubTableCanvasClipping(subTable, bodyRowIndex), this.setupAntiFlickerMechanism(subTable),
137
- this.setupSubTableEventForwarding(bodyRowIndex, subTable), subTable.render();
138
+ this.setupSubTableEventForwarding(bodyRowIndex, subTable), subTable.render(), "auto" === (null === (_a = null == detailConfig ? void 0 : detailConfig.style) || void 0 === _a ? void 0 : _a.height) && this.handleAutoHeightAfterRender(bodyRowIndex, subTable, detailConfig);
139
+ }
140
+ handleAutoHeightAfterRender(bodyRowIndex, subTable, detailConfig) {
141
+ var _a;
142
+ try {
143
+ const actualContentHeight = this.calculateSubTableContentHeight(subTable), [marginTop, , marginBottom] = parseMargin(null === (_a = null == detailConfig ? void 0 : detailConfig.style) || void 0 === _a ? void 0 : _a.margin), totalRequiredHeight = actualContentHeight + marginTop + marginBottom;
144
+ this.onAutoHeightCalculated && this.onAutoHeightCalculated(bodyRowIndex, totalRequiredHeight);
145
+ } catch (error) {}
146
+ }
147
+ calculateSubTableContentHeight(subTable) {
148
+ try {
149
+ const contentHeight = subTable.getAllRowsHeight();
150
+ let frameExtraHeight = 0;
151
+ const theme = subTable.theme;
152
+ if (null == theme ? void 0 : theme.frameStyle) {
153
+ const frameStyle = theme.frameStyle;
154
+ let borderTopWidth = 0, borderBottomWidth = 0;
155
+ if (frameStyle.borderLineWidth) if ("number" == typeof frameStyle.borderLineWidth) borderTopWidth = borderBottomWidth = frameStyle.borderLineWidth; else if (Array.isArray(frameStyle.borderLineWidth)) {
156
+ const borders = frameStyle.borderLineWidth;
157
+ borderTopWidth = borders[0] || 0, borderBottomWidth = borders[2] || 0;
158
+ }
159
+ let shadowTopHeight = 0, shadowBottomHeight = 0;
160
+ if (frameStyle.shadowBlur) if ("number" == typeof frameStyle.shadowBlur) shadowTopHeight = shadowBottomHeight = frameStyle.shadowBlur; else if (Array.isArray(frameStyle.shadowBlur)) {
161
+ const shadows = frameStyle.shadowBlur;
162
+ shadowTopHeight = shadows[0] || 0, shadowBottomHeight = shadows[2] || 0;
163
+ }
164
+ frameStyle.innerBorder || (frameExtraHeight = borderTopWidth + borderBottomWidth + shadowTopHeight + shadowBottomHeight);
165
+ }
166
+ return contentHeight + frameExtraHeight;
167
+ } catch (error) {
168
+ return 300;
169
+ }
170
+ }
171
+ setAutoHeightCallback(callback) {
172
+ this.onAutoHeightCalculated = callback;
138
173
  }
139
174
  getColumnRange() {
140
175
  if (this.columnRangeCache) return this.columnRangeCache;
@@ -164,7 +199,9 @@ export class SubTableManager {
164
199
  });
165
200
  if (!firstColRect || !lastColRect) return null;
166
201
  const [marginTop, marginRight, marginBottom, marginLeft] = parseMargin(null === (_b = null == detailConfig ? void 0 : detailConfig.style) || void 0 === _b ? void 0 : _b.margin), configHeight = height || ((null === (_c = null == detailConfig ? void 0 : detailConfig.style) || void 0 === _c ? void 0 : _c.height) || 300);
167
- if (configHeight <= marginTop + marginBottom) return {
202
+ let actualHeight;
203
+ if (actualHeight = "auto" === configHeight ? 300 : "number" == typeof configHeight ? configHeight : 300,
204
+ actualHeight <= marginTop + marginBottom) return {
168
205
  x1: firstColRect.left + marginLeft,
169
206
  y1: detailRowRect.top + originalHeight,
170
207
  x2: lastColRect.right - marginRight,
@@ -174,7 +211,7 @@ export class SubTableManager {
174
211
  x1: firstColRect.left + marginLeft,
175
212
  y1: detailRowRect.top + originalHeight + marginTop,
176
213
  x2: lastColRect.right - marginRight,
177
- y2: detailRowRect.top + originalHeight - marginBottom + configHeight
214
+ y2: detailRowRect.top + originalHeight - marginBottom + actualHeight
178
215
  };
179
216
  return viewBox.x2 <= viewBox.x1 || viewBox.y2 <= viewBox.y1 ? null : viewBox;
180
217
  }