@visactor/vtable-plugins 1.21.1 → 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/cjs/add-row-column.js +2 -2
  2. package/cjs/add-row-column.js.map +1 -1
  3. package/cjs/auto-fill/utils/date.js +1 -1
  4. package/cjs/auto-fill/utils/fill.js +1 -1
  5. package/cjs/column-series.js +1 -1
  6. package/cjs/column-series.js.map +1 -1
  7. package/cjs/contextmenu/handle-menu-helper.js +16 -9
  8. package/cjs/contextmenu/handle-menu-helper.js.map +1 -1
  9. package/cjs/contextmenu/menu-manager.js +1 -2
  10. package/cjs/contextmenu/styles.js +2 -1
  11. package/cjs/highlight-header-when-select-cell.js +1 -1
  12. package/cjs/highlight-header-when-select-cell.js.map +1 -1
  13. package/cjs/index.d.ts +1 -0
  14. package/cjs/index.js +4 -4
  15. package/cjs/index.js.map +1 -1
  16. package/cjs/master-detail-plugin/checkbox.d.ts +5 -0
  17. package/cjs/master-detail-plugin/checkbox.js +105 -0
  18. package/cjs/master-detail-plugin/checkbox.js.map +1 -0
  19. package/cjs/master-detail-plugin/config.d.ts +17 -0
  20. package/cjs/master-detail-plugin/config.js +113 -0
  21. package/cjs/master-detail-plugin/config.js.map +1 -0
  22. package/cjs/master-detail-plugin/core.d.ts +50 -0
  23. package/cjs/master-detail-plugin/core.js +310 -0
  24. package/cjs/master-detail-plugin/core.js.map +1 -0
  25. package/cjs/master-detail-plugin/events.d.ts +59 -0
  26. package/cjs/master-detail-plugin/events.js +265 -0
  27. package/cjs/master-detail-plugin/events.js.map +1 -0
  28. package/cjs/master-detail-plugin/index.d.ts +4 -0
  29. package/cjs/master-detail-plugin/index.js +15 -0
  30. package/cjs/master-detail-plugin/index.js.map +1 -0
  31. package/cjs/master-detail-plugin/subtable.d.ts +39 -0
  32. package/cjs/master-detail-plugin/subtable.js +457 -0
  33. package/cjs/master-detail-plugin/subtable.js.map +1 -0
  34. package/cjs/master-detail-plugin/table-api-extensions.d.ts +59 -0
  35. package/cjs/master-detail-plugin/table-api-extensions.js +462 -0
  36. package/cjs/master-detail-plugin/table-api-extensions.js.map +1 -0
  37. package/cjs/master-detail-plugin/types.d.ts +61 -0
  38. package/cjs/master-detail-plugin/types.js +20 -0
  39. package/cjs/master-detail-plugin/types.js.map +1 -0
  40. package/cjs/master-detail-plugin/utils.d.ts +8 -0
  41. package/cjs/master-detail-plugin/utils.js +62 -0
  42. package/cjs/master-detail-plugin/utils.js.map +1 -0
  43. package/cjs/master-detail-plugin.d.ts +1 -0
  44. package/cjs/master-detail-plugin.js +15 -0
  45. package/cjs/master-detail-plugin.js.map +1 -0
  46. package/cjs/paste-add-row-column.js +2 -2
  47. package/cjs/paste-add-row-column.js.map +1 -1
  48. package/cjs/row-series.js +1 -2
  49. package/cjs/table-carousel-animation.js +2 -1
  50. package/cjs/table-export/csv/index.js +1 -1
  51. package/cjs/table-export/util/color.js +2 -1
  52. package/cjs/table-export/util/download.js +1 -1
  53. package/cjs/table-export/util/encode.js +1 -1
  54. package/cjs/table-export/util/indent.js +1 -1
  55. package/cjs/table-export/util/pagination.js +1 -1
  56. package/cjs/table-export/util/promise.js +1 -1
  57. package/cjs/table-export/util/type.js +1 -1
  58. package/dist/vtable-plugins.js +2885 -240
  59. package/dist/vtable-plugins.min.js +3 -3
  60. package/es/add-row-column.js +2 -2
  61. package/es/add-row-column.js.map +1 -1
  62. package/es/auto-fill/utils/date.js +1 -1
  63. package/es/auto-fill/utils/fill.js +1 -1
  64. package/es/column-series.js +1 -1
  65. package/es/column-series.js.map +1 -1
  66. package/es/contextmenu/handle-menu-helper.js +16 -9
  67. package/es/contextmenu/handle-menu-helper.js.map +1 -1
  68. package/es/contextmenu/menu-manager.js +1 -2
  69. package/es/contextmenu/styles.js +2 -1
  70. package/es/highlight-header-when-select-cell.js +1 -1
  71. package/es/highlight-header-when-select-cell.js.map +1 -1
  72. package/es/index.d.ts +1 -0
  73. package/es/index.js +2 -0
  74. package/es/index.js.map +1 -1
  75. package/es/master-detail-plugin/checkbox.d.ts +5 -0
  76. package/es/master-detail-plugin/checkbox.js +94 -0
  77. package/es/master-detail-plugin/checkbox.js.map +1 -0
  78. package/es/master-detail-plugin/config.d.ts +17 -0
  79. package/es/master-detail-plugin/config.js +80 -0
  80. package/es/master-detail-plugin/config.js.map +1 -0
  81. package/es/master-detail-plugin/core.d.ts +50 -0
  82. package/es/master-detail-plugin/core.js +285 -0
  83. package/es/master-detail-plugin/core.js.map +1 -0
  84. package/es/master-detail-plugin/events.d.ts +59 -0
  85. package/es/master-detail-plugin/events.js +232 -0
  86. package/es/master-detail-plugin/events.js.map +1 -0
  87. package/es/master-detail-plugin/index.d.ts +4 -0
  88. package/es/master-detail-plugin/index.js +4 -0
  89. package/es/master-detail-plugin/index.js.map +1 -0
  90. package/es/master-detail-plugin/subtable.d.ts +39 -0
  91. package/es/master-detail-plugin/subtable.js +426 -0
  92. package/es/master-detail-plugin/subtable.js.map +1 -0
  93. package/es/master-detail-plugin/table-api-extensions.d.ts +59 -0
  94. package/es/master-detail-plugin/table-api-extensions.js +445 -0
  95. package/es/master-detail-plugin/table-api-extensions.js.map +1 -0
  96. package/es/master-detail-plugin/types.d.ts +61 -0
  97. package/es/master-detail-plugin/types.js +12 -0
  98. package/es/master-detail-plugin/types.js.map +1 -0
  99. package/es/master-detail-plugin/utils.d.ts +8 -0
  100. package/es/master-detail-plugin/utils.js +52 -0
  101. package/es/master-detail-plugin/utils.js.map +1 -0
  102. package/es/master-detail-plugin.d.ts +1 -0
  103. package/es/master-detail-plugin.js +2 -0
  104. package/es/master-detail-plugin.js.map +1 -0
  105. package/es/paste-add-row-column.js +2 -2
  106. package/es/paste-add-row-column.js.map +1 -1
  107. package/es/row-series.js +1 -2
  108. package/es/table-carousel-animation.js +2 -1
  109. package/es/table-export/csv/index.js +1 -1
  110. package/es/table-export/util/color.js +2 -1
  111. package/es/table-export/util/download.js +1 -1
  112. package/es/table-export/util/encode.js +1 -1
  113. package/es/table-export/util/indent.js +1 -1
  114. package/es/table-export/util/pagination.js +1 -1
  115. package/es/table-export/util/promise.js +1 -1
  116. package/es/table-export/util/type.js +1 -1
  117. package/package.json +6 -6
@@ -0,0 +1,59 @@
1
+ import * as VTable from '@visactor/vtable';
2
+ export declare class EventManager {
3
+ private table;
4
+ private expandedRows;
5
+ private originalResize;
6
+ private eventHandlers;
7
+ private allExpandedRowsBeforeMove;
8
+ private isCleanedUp;
9
+ constructor(table: VTable.ListTable);
10
+ bindEventHandlers(): void;
11
+ private wrapTableResizeMethod;
12
+ handleAfterUpdateCellContentWidth(eventData: {
13
+ col: number;
14
+ row: number;
15
+ cellHeight: number;
16
+ cellGroup: any;
17
+ padding: [number, number, number, number];
18
+ textBaseline: CanvasTextBaseline;
19
+ }): void;
20
+ private fixCustomMergeCellTextPosition;
21
+ private isCustomMergeCell;
22
+ handleAfterUpdateSelectBorderHeight(eventData: {
23
+ startRow: number;
24
+ endRow: number;
25
+ currentHeight: number;
26
+ selectComp: {
27
+ rect: any;
28
+ fillhandle?: any;
29
+ role: string;
30
+ };
31
+ }): void;
32
+ executeMasterDetailBeforeSort(): void;
33
+ executeMasterDetailAfterSort(): void;
34
+ getExpandedRows(): number[];
35
+ setExpandedRows(rows: number[]): void;
36
+ addExpandedRow(rowIndex: number): void;
37
+ removeExpandedRow(rowIndex: number): void;
38
+ isRowExpanded(rowIndex: number): boolean;
39
+ private bindTreeHierarchyStateChange;
40
+ private getRecordByRowIndex;
41
+ private bindRowMoveEvents;
42
+ cleanup(): void;
43
+ private onUpdateSubTablePositions?;
44
+ private onUpdateSubTablePositionsForRow?;
45
+ private onExpandRow?;
46
+ private onCollapseRow?;
47
+ private onCollapseRowToNoRealRecordIndex?;
48
+ private onToggleRowExpand?;
49
+ private getOriginalRowHeight?;
50
+ setCallbacks(callbacks: {
51
+ onUpdateSubTablePositions?: () => void;
52
+ onUpdateSubTablePositionsForRow?: () => void;
53
+ onExpandRow?: (rowIndex: number, colIndex?: number) => void;
54
+ onCollapseRow?: (rowIndex: number, colIndex?: number) => void;
55
+ onCollapseRowToNoRealRecordIndex?: (rowIndex: number) => void;
56
+ onToggleRowExpand?: (rowIndex: number, colIndex?: number) => void;
57
+ getOriginalRowHeight?: (bodyRowIndex: number) => number;
58
+ }): void;
59
+ }
@@ -0,0 +1,232 @@
1
+ import * as VTable from "@visactor/vtable";
2
+
3
+ export class EventManager {
4
+ constructor(table) {
5
+ this.table = table, this.expandedRows = [], this.eventHandlers = [], this.allExpandedRowsBeforeMove = new Set,
6
+ this.isCleanedUp = !1;
7
+ }
8
+ bindEventHandlers() {
9
+ const scrollHandler = () => this.onUpdateSubTablePositions(), resizeRowHandler = () => this.onUpdateSubTablePositionsForRow();
10
+ this.table.on(VTable.TABLE_EVENT_TYPE.SCROLL, scrollHandler), this.table.on(VTable.TABLE_EVENT_TYPE.RESIZE_ROW, resizeRowHandler),
11
+ this.eventHandlers.push({
12
+ type: VTable.TABLE_EVENT_TYPE.SCROLL,
13
+ handler: scrollHandler
14
+ }, {
15
+ type: VTable.TABLE_EVENT_TYPE.RESIZE_ROW,
16
+ handler: resizeRowHandler
17
+ }), this.wrapTableResizeMethod(), this.bindTreeHierarchyStateChange(), this.bindRowMoveEvents();
18
+ }
19
+ wrapTableResizeMethod() {
20
+ const originalResize = this.table.resize.bind(this.table);
21
+ this.originalResize = originalResize, this.table.resize = () => {
22
+ originalResize(), this.onUpdateSubTablePositions();
23
+ };
24
+ }
25
+ handleAfterUpdateCellContentWidth(eventData) {
26
+ var _a;
27
+ const {col: col, row: row, cellGroup: cellGroup, cellHeight: cellHeight, padding: padding, textBaseline: textBaseline} = eventData;
28
+ if (this.isCustomMergeCell(col, row)) return void this.fixCustomMergeCellTextPosition(cellGroup, padding);
29
+ let effectiveCellHeight = cellHeight;
30
+ if (void 0 !== cellGroup.col && void 0 !== cellGroup.row) try {
31
+ const recordIndex = this.table.getRecordShowIndexByCell(cellGroup.col, cellGroup.row);
32
+ if (void 0 !== recordIndex) {
33
+ const originalHeight = (null === (_a = this.getOriginalRowHeight) || void 0 === _a ? void 0 : _a.call(this, recordIndex)) || 0;
34
+ if (originalHeight > 0) {
35
+ effectiveCellHeight = originalHeight;
36
+ const newHeight = effectiveCellHeight - (padding[0] + padding[2]);
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]));
39
+ }));
40
+ }
41
+ }
42
+ } catch (error) {}
43
+ }
44
+ fixCustomMergeCellTextPosition(cellGroup, padding) {
45
+ const {col: col, row: row} = cellGroup, table = this.table, customMerge = table.getCustomMerge(col, row);
46
+ if (!customMerge || !customMerge.style || !customMerge.range) return;
47
+ const configuredTextAlign = customMerge.style.textAlign || "left", {start: start, end: end} = customMerge.range;
48
+ let totalMergeWidth = 0, mergeStartX = 0;
49
+ for (let c = start.col; c <= end.col; c++) totalMergeWidth += table.getColWidth(c);
50
+ for (let c = 0; c < start.col; c++) mergeStartX += table.getColWidth(c);
51
+ cellGroup.forEachChildren((child => {
52
+ if ("text" === child.name || "content" === child.name) {
53
+ let xPosition;
54
+ xPosition = "center" === configuredTextAlign ? mergeStartX + padding[3] + (totalMergeWidth - padding[1] - padding[3]) / 2 : "right" === configuredTextAlign ? mergeStartX + totalMergeWidth - padding[1] : mergeStartX + padding[3],
55
+ child.setAttribute("x", xPosition), child.setAttribute("textAlign", configuredTextAlign);
56
+ }
57
+ }));
58
+ }
59
+ isCustomMergeCell(col, row) {
60
+ try {
61
+ const table = this.table;
62
+ if (table && table.getCustomMerge) {
63
+ return !!table.getCustomMerge(col, row);
64
+ }
65
+ } catch (error) {}
66
+ return !1;
67
+ }
68
+ handleAfterUpdateSelectBorderHeight(eventData) {
69
+ var _a, _b;
70
+ const {startRow: startRow, endRow: endRow, selectComp: selectComp} = eventData, isSingleCellSelection = startRow === endRow, isLastRowExpanded = this.expandedRows.includes(endRow);
71
+ if (isSingleCellSelection) {
72
+ const bodyRowIndex = startRow - (this.table.columnHeaderLevelCount || 0), originalHeight = (null === (_a = this.getOriginalRowHeight) || void 0 === _a ? void 0 : _a.call(this, bodyRowIndex)) || 0;
73
+ if (originalHeight > 0 && originalHeight !== eventData.currentHeight && (selectComp.rect.setAttributes({
74
+ height: originalHeight
75
+ }), selectComp.fillhandle)) {
76
+ const currentY = selectComp.rect.attribute.y;
77
+ selectComp.fillhandle.setAttributes({
78
+ y: currentY + originalHeight
79
+ });
80
+ }
81
+ } else if (isLastRowExpanded) {
82
+ const lastRowBodyIndex = endRow - (this.table.columnHeaderLevelCount || 0), lastRowOriginalHeight = (null === (_b = this.getOriginalRowHeight) || void 0 === _b ? void 0 : _b.call(this, lastRowBodyIndex)) || 0;
83
+ if (lastRowOriginalHeight > 0) {
84
+ const lastRowCurrentHeight = this.table.getRowHeight(endRow), adjustedTotalHeight = eventData.currentHeight - lastRowCurrentHeight + lastRowOriginalHeight;
85
+ if (selectComp.rect.setAttributes({
86
+ height: adjustedTotalHeight
87
+ }), selectComp.fillhandle) {
88
+ const currentY = selectComp.rect.attribute.y;
89
+ selectComp.fillhandle.setAttributes({
90
+ y: currentY + adjustedTotalHeight
91
+ });
92
+ }
93
+ }
94
+ }
95
+ }
96
+ executeMasterDetailBeforeSort() {
97
+ const table = this.table;
98
+ if (table.internalProps.expandedRecordIndices && table.internalProps.expandedRecordIndices.length > 0 && (table.internalProps._tempExpandedRecordIndices = [ ...table.internalProps.expandedRecordIndices ]),
99
+ this.expandedRows.length > 0) {
100
+ [ ...this.expandedRows ].forEach((rowIndex => {
101
+ var _a, _b;
102
+ try {
103
+ const tableOptions = table.options;
104
+ tableOptions && tableOptions.pagination ? null === (_a = this.onCollapseRowToNoRealRecordIndex) || void 0 === _a || _a.call(this, rowIndex) : null === (_b = this.onCollapseRow) || void 0 === _b || _b.call(this, rowIndex);
105
+ } catch (e) {}
106
+ }));
107
+ }
108
+ }
109
+ executeMasterDetailAfterSort() {
110
+ const table = this.table, tempExpandedRecordIndices = table.internalProps._tempExpandedRecordIndices;
111
+ if (tempExpandedRecordIndices && tempExpandedRecordIndices.length > 0) {
112
+ [ ...tempExpandedRecordIndices ].forEach((recordIndex => {
113
+ var _a;
114
+ const bodyRowIndex = table.getBodyRowIndexByRecordIndex(recordIndex);
115
+ if (bodyRowIndex >= 0) try {
116
+ const targetRowIndex = bodyRowIndex + table.columnHeaderLevelCount;
117
+ null === (_a = this.onExpandRow) || void 0 === _a || _a.call(this, targetRowIndex);
118
+ } catch (e) {}
119
+ })), delete table.internalProps._tempExpandedRecordIndices;
120
+ }
121
+ }
122
+ getExpandedRows() {
123
+ return this.expandedRows;
124
+ }
125
+ setExpandedRows(rows) {
126
+ this.expandedRows = rows;
127
+ }
128
+ addExpandedRow(rowIndex) {
129
+ this.expandedRows.includes(rowIndex) || this.expandedRows.push(rowIndex);
130
+ }
131
+ removeExpandedRow(rowIndex) {
132
+ const index = this.expandedRows.indexOf(rowIndex);
133
+ index > -1 && this.expandedRows.splice(index, 1);
134
+ }
135
+ isRowExpanded(rowIndex) {
136
+ return this.expandedRows.includes(rowIndex);
137
+ }
138
+ bindTreeHierarchyStateChange() {
139
+ const hierarchyStateChangeHandler = args => {
140
+ var _a;
141
+ const {col: col, row: row} = args, record = this.getRecordByRowIndex(row - this.table.columnHeaderLevelCount);
142
+ record && "object" == typeof record && "children" in record && !0 === record.children || null === (_a = this.onToggleRowExpand) || void 0 === _a || _a.call(this, row, col);
143
+ };
144
+ this.table.on(VTable.TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, hierarchyStateChangeHandler),
145
+ this.eventHandlers.push({
146
+ type: VTable.TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE,
147
+ handler: hierarchyStateChangeHandler
148
+ });
149
+ }
150
+ getRecordByRowIndex(bodyRowIndex) {
151
+ try {
152
+ const table = this.table, recordIndex = table.getRecordShowIndexByCell(0, bodyRowIndex + table.columnHeaderLevelCount);
153
+ return table.dataSource.get(recordIndex);
154
+ } catch (error) {
155
+ return null;
156
+ }
157
+ }
158
+ bindRowMoveEvents() {
159
+ const moveStartHandler = args => {
160
+ var _a, _b;
161
+ if (!args || "number" != typeof args.col || "number" != typeof args.row) return;
162
+ const {col: col, row: row} = args;
163
+ if (!("rowHeader" === this.table.getCellLocation(col, row) || (null === (_b = (_a = this.table.internalProps.layoutMap).isSeriesNumberInBody) || void 0 === _b ? void 0 : _b.call(_a, col, row)))) return;
164
+ this.allExpandedRowsBeforeMove.clear();
165
+ const currentExpandedRows = [ ...this.expandedRows ];
166
+ currentExpandedRows.forEach((rowIndex => {
167
+ this.allExpandedRowsBeforeMove.add(rowIndex);
168
+ })), currentExpandedRows.forEach((rowIndex => {
169
+ var _a;
170
+ null === (_a = this.onCollapseRow) || void 0 === _a || _a.call(this, rowIndex);
171
+ }));
172
+ }, moveSuccessHandler = args => {
173
+ var _a;
174
+ if (0 === this.allExpandedRowsBeforeMove.size) return;
175
+ const columnMoveState = null === (_a = this.table.stateManager) || void 0 === _a ? void 0 : _a.columnMove, {colSource: colSource, rowSource: rowSource, colTarget: colTarget, rowTarget: rowTarget} = columnMoveState;
176
+ setTimeout((() => {
177
+ const sourceRowIndex = rowSource, targetRowIndex = rowTarget, moveDirection = targetRowIndex > sourceRowIndex ? "down" : "up";
178
+ this.allExpandedRowsBeforeMove.forEach((originalRowIndex => {
179
+ var _a;
180
+ let newRowIndex = originalRowIndex;
181
+ sourceRowIndex === originalRowIndex ? newRowIndex = targetRowIndex : "down" === moveDirection ? originalRowIndex <= targetRowIndex && originalRowIndex > sourceRowIndex && (newRowIndex = originalRowIndex - 1) : "up" === moveDirection && originalRowIndex >= targetRowIndex && originalRowIndex < sourceRowIndex && (newRowIndex = originalRowIndex + 1),
182
+ null === (_a = this.onExpandRow) || void 0 === _a || _a.call(this, newRowIndex);
183
+ })), this.allExpandedRowsBeforeMove.clear();
184
+ }), 0);
185
+ }, moveFailHandler = args => {
186
+ 0 !== this.allExpandedRowsBeforeMove.size && setTimeout((() => {
187
+ this.allExpandedRowsBeforeMove.forEach((originalRowIndex => {
188
+ var _a;
189
+ null === (_a = this.onExpandRow) || void 0 === _a || _a.call(this, originalRowIndex);
190
+ })), this.allExpandedRowsBeforeMove.clear();
191
+ }), 0);
192
+ };
193
+ this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START, moveStartHandler),
194
+ this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, moveSuccessHandler),
195
+ this.table.on(VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL, moveFailHandler),
196
+ this.eventHandlers.push({
197
+ type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START,
198
+ handler: moveStartHandler
199
+ }, {
200
+ type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION,
201
+ handler: moveSuccessHandler
202
+ }, {
203
+ type: VTable.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_FAIL,
204
+ handler: moveFailHandler
205
+ });
206
+ }
207
+ cleanup() {
208
+ if (!this.isCleanedUp) {
209
+ if (this.isCleanedUp = !0, this.expandedRows.length = 0, this.allExpandedRowsBeforeMove.clear(),
210
+ this.originalResize && this.table) try {
211
+ this.table.resize = this.originalResize, this.originalResize = void 0;
212
+ } catch (error) {}
213
+ try {
214
+ this.table && (this.eventHandlers.forEach((({type: type, handler: handler}) => {
215
+ try {
216
+ this.table.off(type, handler);
217
+ } catch (error) {}
218
+ })), this.eventHandlers.length = 0);
219
+ } catch (error) {}
220
+ this.onUpdateSubTablePositions = void 0, this.onUpdateSubTablePositionsForRow = void 0,
221
+ this.onExpandRow = void 0, this.onCollapseRow = void 0, this.onCollapseRowToNoRealRecordIndex = void 0,
222
+ this.onToggleRowExpand = void 0, this.getOriginalRowHeight = void 0, this.table = null;
223
+ }
224
+ }
225
+ setCallbacks(callbacks) {
226
+ this.onUpdateSubTablePositions = callbacks.onUpdateSubTablePositions, this.onUpdateSubTablePositionsForRow = callbacks.onUpdateSubTablePositionsForRow,
227
+ this.onExpandRow = callbacks.onExpandRow, this.onCollapseRow = callbacks.onCollapseRow,
228
+ this.onCollapseRowToNoRealRecordIndex = callbacks.onCollapseRowToNoRealRecordIndex,
229
+ this.onToggleRowExpand = callbacks.onToggleRowExpand, this.getOriginalRowHeight = callbacks.getOriginalRowHeight;
230
+ }
231
+ }
232
+ //# sourceMappingURL=events.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,4 @@
1
+ import { MasterDetailPlugin } from './core';
2
+ import type { MasterDetailPluginOptions, DetailTableOptions } from './types';
3
+ export { MasterDetailPlugin };
4
+ export type { MasterDetailPluginOptions, DetailTableOptions };
@@ -0,0 +1,4 @@
1
+ import { MasterDetailPlugin } from "./core";
2
+
3
+ export { MasterDetailPlugin };
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/master-detail-plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAG5C,OAAO,EAAE,kBAAkB,EAAE,CAAC","file":"index.js","sourcesContent":["import { MasterDetailPlugin } from './core';\r\nimport type { MasterDetailPluginOptions, DetailTableOptions } from './types';\r\n\r\nexport { MasterDetailPlugin };\r\nexport type { MasterDetailPluginOptions, DetailTableOptions };\r\n"]}
@@ -0,0 +1,39 @@
1
+ import * as VTable from '@visactor/vtable';
2
+ import type { DetailTableOptions } from './types';
3
+ export declare class SubTableManager {
4
+ private table;
5
+ private enableCheckboxCascade;
6
+ private timers;
7
+ constructor(table: VTable.ListTable, enableCheckboxCascade?: boolean);
8
+ private saveSubTableCheckboxState;
9
+ private restoreSubTableCheckboxState;
10
+ private safeSetTimeout;
11
+ private cleanupAllTimers;
12
+ private updateSubTableCheckboxVisualState;
13
+ renderSubTable(bodyRowIndex: number, childrenData: unknown[], getDetailConfig: (record: unknown, bodyRowIndex: number) => DetailTableOptions | null): void;
14
+ private columnRangeCache;
15
+ private getColumnRange;
16
+ private calculateSubTableViewBox;
17
+ removeSubTable(bodyRowIndex: number): void;
18
+ private cleanupSubTableEventHandlers;
19
+ private setupScrollEventIsolation;
20
+ private setupUnifiedSelectionManagement;
21
+ private calculateGroupLevelOffset;
22
+ private isAncestorGroup;
23
+ private setupSubTableCanvasClipping;
24
+ private setupAntiFlickerMechanism;
25
+ updateSubTablePositionsForRowResize(): void;
26
+ recalculateAllSubTablePositions(start?: number, end?: number, getDetailConfig?: (record: unknown, bodyRowIndex: number) => DetailTableOptions | null): void;
27
+ cleanup(): void;
28
+ getAllSubTableInstances(): Map<number, VTable.ListTable> | undefined;
29
+ getSubTableInstance(bodyRowIndex: number): VTable.ListTable | null;
30
+ private getDetailConfigForRecord?;
31
+ setCallbacks(callbacks: {
32
+ getDetailConfigForRecord?: (record: unknown, bodyRowIndex: number) => DetailTableOptions | null;
33
+ }): void;
34
+ private setupSubTableEventForwarding;
35
+ private forwardSubTableEvent;
36
+ private clearMainTableSelectionInternal;
37
+ private clearAllSelectionsExcept;
38
+ private cleanupSubTableEventForwarding;
39
+ }