@visactor/vtable 1.19.2 → 1.19.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 (91) hide show
  1. package/cjs/ListTable-all.js +5 -5
  2. package/cjs/ListTable-all.js.map +1 -1
  3. package/cjs/ListTable.d.ts +4 -1
  4. package/cjs/ListTable.js +39 -0
  5. package/cjs/ListTable.js.map +1 -1
  6. package/cjs/PivotChart.js +4 -4
  7. package/cjs/PivotChart.js.map +1 -1
  8. package/cjs/PivotTable-all.js +4 -4
  9. package/cjs/PivotTable-all.js.map +1 -1
  10. package/cjs/PivotTable.d.ts +4 -0
  11. package/cjs/PivotTable.js +40 -0
  12. package/cjs/PivotTable.js.map +1 -1
  13. package/cjs/components/index.d.ts +1 -0
  14. package/cjs/components/index.js +8 -2
  15. package/cjs/components/index.js.map +1 -1
  16. package/cjs/core/BaseTable.js +1 -1
  17. package/cjs/core/BaseTable.js.map +1 -1
  18. package/cjs/core/record-helper.d.ts +1 -1
  19. package/cjs/core/record-helper.js +99 -65
  20. package/cjs/core/record-helper.js.map +1 -1
  21. package/cjs/data/DataSource.d.ts +3 -0
  22. package/cjs/data/DataSource.js +20 -0
  23. package/cjs/data/DataSource.js.map +1 -1
  24. package/cjs/event/listener/container-dom.js +32 -30
  25. package/cjs/event/listener/container-dom.js.map +1 -1
  26. package/cjs/event/listener/table-group.js +32 -28
  27. package/cjs/event/listener/table-group.js.map +1 -1
  28. package/cjs/index.d.ts +1 -1
  29. package/cjs/index.js +1 -1
  30. package/cjs/index.js.map +1 -1
  31. package/cjs/layout/pivot-header-layout.d.ts +6 -0
  32. package/cjs/layout/pivot-header-layout.js +74 -0
  33. package/cjs/layout/pivot-header-layout.js.map +1 -1
  34. package/cjs/layout/tree-helper.d.ts +2 -0
  35. package/cjs/layout/tree-helper.js +9 -0
  36. package/cjs/layout/tree-helper.js.map +1 -1
  37. package/cjs/state/state.d.ts +2 -0
  38. package/cjs/state/state.js +16 -4
  39. package/cjs/state/state.js.map +1 -1
  40. package/cjs/ts-types/events.d.ts +1 -0
  41. package/cjs/ts-types/events.js.map +1 -1
  42. package/cjs/ts-types/table-engine.d.ts +2 -1
  43. package/cjs/ts-types/table-engine.js.map +1 -1
  44. package/cjs/vrender.js.map +1 -1
  45. package/dist/vtable.js +3885 -363
  46. package/dist/vtable.min.js +2 -2
  47. package/es/ListTable-all.js +4 -4
  48. package/es/ListTable-all.js.map +1 -1
  49. package/es/ListTable.d.ts +4 -1
  50. package/es/ListTable.js +39 -0
  51. package/es/ListTable.js.map +1 -1
  52. package/es/PivotChart.js +4 -4
  53. package/es/PivotChart.js.map +1 -1
  54. package/es/PivotTable-all.js +3 -3
  55. package/es/PivotTable-all.js.map +1 -1
  56. package/es/PivotTable.d.ts +4 -0
  57. package/es/PivotTable.js +40 -0
  58. package/es/PivotTable.js.map +1 -1
  59. package/es/components/index.d.ts +1 -0
  60. package/es/components/index.js +6 -0
  61. package/es/components/index.js.map +1 -1
  62. package/es/core/BaseTable.js +1 -1
  63. package/es/core/BaseTable.js.map +1 -1
  64. package/es/core/record-helper.d.ts +1 -1
  65. package/es/core/record-helper.js +99 -65
  66. package/es/core/record-helper.js.map +1 -1
  67. package/es/data/DataSource.d.ts +3 -0
  68. package/es/data/DataSource.js +20 -0
  69. package/es/data/DataSource.js.map +1 -1
  70. package/es/event/listener/container-dom.js +32 -30
  71. package/es/event/listener/container-dom.js.map +1 -1
  72. package/es/event/listener/table-group.js +31 -28
  73. package/es/event/listener/table-group.js.map +1 -1
  74. package/es/index.d.ts +1 -1
  75. package/es/index.js +1 -1
  76. package/es/index.js.map +1 -1
  77. package/es/layout/pivot-header-layout.d.ts +6 -0
  78. package/es/layout/pivot-header-layout.js +74 -0
  79. package/es/layout/pivot-header-layout.js.map +1 -1
  80. package/es/layout/tree-helper.d.ts +2 -0
  81. package/es/layout/tree-helper.js +9 -0
  82. package/es/layout/tree-helper.js.map +1 -1
  83. package/es/state/state.d.ts +2 -0
  84. package/es/state/state.js +16 -4
  85. package/es/state/state.js.map +1 -1
  86. package/es/ts-types/events.d.ts +1 -0
  87. package/es/ts-types/events.js.map +1 -1
  88. package/es/ts-types/table-engine.d.ts +2 -1
  89. package/es/ts-types/table-engine.js.map +1 -1
  90. package/es/vrender.js.map +1 -1
  91. package/package.json +4 -4
@@ -144,11 +144,11 @@ function bindContainerDomListener(eventManager) {
144
144
  });
145
145
  }
146
146
  }
147
- })))), handler.on(table.getElement(), "paste", (e => {
148
- var _a, _b, _c, _d;
149
- if ((null === (_a = table.keyboardOptions) || void 0 === _a ? void 0 : _a.pasteValueToCell) && table.changeCellValues) {
150
- if (null === (_b = table.editorManager) || void 0 === _b ? void 0 : _b.editingEditor) return;
151
- if ((null === (_c = table.stateManager.select.ranges) || void 0 === _c ? void 0 : _c.length) > 0) if (null === (_d = navigator.clipboard) || void 0 === _d ? void 0 : _d.read) navigator.clipboard.read().then((clipboardItems => {
147
+ })))), handler.on(table.getElement(), "paste", (e => __awaiter(this, void 0, void 0, (function*() {
148
+ var _c, _d, _e, _f;
149
+ if ((null === (_c = table.keyboardOptions) || void 0 === _c ? void 0 : _c.pasteValueToCell) && table.changeCellValues) {
150
+ if (null === (_d = table.editorManager) || void 0 === _d ? void 0 : _d.editingEditor) return;
151
+ if ((null === (_e = table.stateManager.select.ranges) || void 0 === _e ? void 0 : _e.length) > 0) if (null === (_f = navigator.clipboard) || void 0 === _f ? void 0 : _f.read) navigator.clipboard.read().then((clipboardItems => {
152
152
  for (const item of clipboardItems) item.types.includes("text/html") ? pasteHtmlToTable(item) : 1 === item.types.length && "text/plain" === item.types[0] && pasteTextToTable(item);
153
153
  })); else {
154
154
  const ranges = table.stateManager.select.ranges, col = Math.min(ranges[0].start.col, ranges[0].end.col), row = Math.min(ranges[0].start.row, ranges[0].end.row), rows = (e.clipboardData || window.Clipboard).getData("text").split("\n"), values = [];
@@ -158,7 +158,7 @@ function bindContainerDomListener(eventManager) {
158
158
  cellIndex === cells.length - 1 && (cell = cell.trim()), rowValues.push(cell);
159
159
  }));
160
160
  }));
161
- const changedCellResults = table.changeCellValues(col, row, values);
161
+ const changedCellResults = yield table.changeCellValues(col, row, values);
162
162
  table.hasListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.PASTED_DATA) && table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.PASTED_DATA, {
163
163
  col: col,
164
164
  row: row,
@@ -167,7 +167,7 @@ function bindContainerDomListener(eventManager) {
167
167
  });
168
168
  }
169
169
  }
170
- })), handler.on(table.getElement(), "contextmenu", (e => {
170
+ })))), handler.on(table.getElement(), "contextmenu", (e => {
171
171
  var _a;
172
172
  !1 !== (null === (_a = table.eventOptions) || void 0 === _a ? void 0 : _a.preventDefaultContextMenu) ? e.preventDefault() : globalPointerupCallback(e);
173
173
  })), table.options.canvas || handler.on(table.getContainer(), "resize", (e => {
@@ -181,7 +181,7 @@ function bindContainerDomListener(eventManager) {
181
181
  const ranges = table.stateManager.select.ranges, selectRangeLength = ranges.length, col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col), row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row), maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col), maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);
182
182
  let pasteValuesColCount = 0, pasteValuesRowCount = 0, values = [];
183
183
  item.getType("text/html").then((blob => {
184
- blob.text().then((pastedData => {
184
+ blob.text().then((pastedData => __awaiter(this, void 0, void 0, (function*() {
185
185
  var _a, _b;
186
186
  if (pastedData && /(<table)|(<TABLE)/g.test(pastedData)) {
187
187
  const matches = Array.from(pastedData.matchAll(regex));
@@ -190,7 +190,7 @@ function bindContainerDomListener(eventManager) {
190
190
  values.push(rowValues), pasteValuesColCount = Math.max(pasteValuesColCount, null !== (_a = null == rowValues ? void 0 : rowValues.length) && void 0 !== _a ? _a : 0);
191
191
  }
192
192
  pasteValuesRowCount = null !== (_b = values.length) && void 0 !== _b ? _b : 0, values = handlePasteValues(values, pasteValuesRowCount, pasteValuesColCount, maxRow - row + 1, maxCol - col + 1);
193
- const changedCellResults = table.changeCellValues(col, row, values, !0);
193
+ const changedCellResults = yield table.changeCellValues(col, row, values, !0);
194
194
  table.hasListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.PASTED_DATA) && table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.PASTED_DATA, {
195
195
  col: col,
196
196
  row: row,
@@ -202,34 +202,36 @@ function bindContainerDomListener(eventManager) {
202
202
  blob.text().then(_pasteValue);
203
203
  }));
204
204
  }));
205
- }));
205
+ }))));
206
206
  }));
207
207
  }
208
208
  function _pasteValue(pastedData) {
209
209
  var _a;
210
- const ranges = table.stateManager.select.ranges, selectRangeLength = ranges.length, col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col), row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row), maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col), maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);
211
- let pasteValuesColCount = 0, pasteValuesRowCount = 0, values = [];
212
- pastedData.split("\n").forEach((function(rowCells, rowIndex) {
213
- var _a;
214
- const cells = rowCells.split("\t"), rowValues = [];
215
- values.push(rowValues), cells.forEach((function(cell, cellIndex) {
216
- cellIndex === cells.length - 1 && (cell = cell.trim()), rowValues.push(cell);
217
- })), pasteValuesColCount = Math.max(pasteValuesColCount, null !== (_a = null == rowValues ? void 0 : rowValues.length) && void 0 !== _a ? _a : 0);
218
- })), pasteValuesRowCount = null !== (_a = values.length) && void 0 !== _a ? _a : 0,
219
- values = handlePasteValues(values, pasteValuesRowCount, pasteValuesColCount, maxRow - row + 1, maxCol - col + 1);
220
- const changedCellResults = table.changeCellValues(col, row, values, !0);
221
- table.hasListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.PASTED_DATA) && table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.PASTED_DATA, {
222
- col: col,
223
- row: row,
224
- pasteData: values,
225
- changedCellResults: changedCellResults
226
- });
210
+ return __awaiter(this, void 0, void 0, (function*() {
211
+ const ranges = table.stateManager.select.ranges, selectRangeLength = ranges.length, col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col), row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row), maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col), maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);
212
+ let pasteValuesColCount = 0, pasteValuesRowCount = 0, values = [];
213
+ pastedData.split("\n").forEach((function(rowCells, rowIndex) {
214
+ var _a;
215
+ const cells = rowCells.split("\t"), rowValues = [];
216
+ values.push(rowValues), cells.forEach((function(cell, cellIndex) {
217
+ cellIndex === cells.length - 1 && (cell = cell.trim()), rowValues.push(cell);
218
+ })), pasteValuesColCount = Math.max(pasteValuesColCount, null !== (_a = null == rowValues ? void 0 : rowValues.length) && void 0 !== _a ? _a : 0);
219
+ })), pasteValuesRowCount = null !== (_a = values.length) && void 0 !== _a ? _a : 0,
220
+ values = handlePasteValues(values, pasteValuesRowCount, pasteValuesColCount, maxRow - row + 1, maxCol - col + 1);
221
+ const changedCellResults = yield table.changeCellValues(col, row, values, !0);
222
+ table.hasListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.PASTED_DATA) && table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.PASTED_DATA, {
223
+ col: col,
224
+ row: row,
225
+ pasteData: values,
226
+ changedCellResults: changedCellResults
227
+ });
228
+ }));
227
229
  }
228
230
  function pasteTextToTable(item) {
229
231
  const ranges = table.stateManager.select.ranges, selectRangeLength = ranges.length, col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col), row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row), maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col), maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);
230
232
  let pasteValuesColCount = 0, pasteValuesRowCount = 0;
231
233
  item.getType("text/plain").then((blob => {
232
- blob.text().then((pastedData => {
234
+ blob.text().then((pastedData => __awaiter(this, void 0, void 0, (function*() {
233
235
  var _a;
234
236
  const rows = pastedData.replace(/\r(?!\n)/g, "\r\n").split("\r\n");
235
237
  let values = [];
@@ -242,14 +244,14 @@ function bindContainerDomListener(eventManager) {
242
244
  })), pasteValuesColCount = Math.max(pasteValuesColCount, null !== (_a = null == rowValues ? void 0 : rowValues.length) && void 0 !== _a ? _a : 0);
243
245
  })), pasteValuesRowCount = null !== (_a = values.length) && void 0 !== _a ? _a : 0,
244
246
  values = handlePasteValues(values, pasteValuesRowCount, pasteValuesColCount, maxRow - row + 1, maxCol - col + 1);
245
- const changedCellResults = table.changeCellValues(col, row, values, !0);
247
+ const changedCellResults = yield table.changeCellValues(col, row, values, !0);
246
248
  table.hasListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.PASTED_DATA) && table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.PASTED_DATA, {
247
249
  col: col,
248
250
  row: row,
249
251
  pasteData: values,
250
252
  changedCellResults: changedCellResults
251
253
  });
252
- }));
254
+ }))));
253
255
  }));
254
256
  }
255
257
  function handlePasteValues(values, rowCount, colCount, selectedRowCount, selectedColCount) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/event/listener/container-dom.ts"],"names":[],"mappings":"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","file":"container-dom.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport type { EventHandler } from '../EventHandler';\nimport type { ListTableConstructorOptions, MousePointerMultiCellEvent } from '../../ts-types';\nimport { InteractionState, type KeydownEvent, type ListTableAPI } from '../../ts-types';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport { handleWhell } from '../scroll';\nimport { browser, getPromiseValue } from '../../tools/helper';\nimport type { EventManager } from '../event';\nimport { getPixelRatio } from '../../tools/pixel-ratio';\nimport { endResizeCol, endResizeRow } from './table-group';\nimport { isCellDisableSelect } from '../../state/select/is-cell-select-highlight';\nimport { fireMoveColEventListeners } from '../helper';\nimport { vglobal } from './../../vrender';\nexport function bindContainerDomListener(eventManager: EventManager) {\n const table = eventManager.table;\n const stateManager = table.stateManager;\n const handler: EventHandler = table.internalProps.handler;\n\n // handler.on(table.getElement(), 'mousedown', (e: MouseEvent) => {\n // if (table.eventManager.isPointerDownOnTable) {\n // e.stopPropagation();\n // }\n // });\n\n handler.on(table.getElement(), 'blur', (e: MouseEvent) => {\n eventManager.dealTableHover();\n // eventManager.dealTableSelect();\n });\n\n // 监听键盘事件\n handler.on(table.getElement(), 'keydown', (e: KeyboardEvent) => {\n // 键盘按下事件 内部逻辑处理前\n const beforeKeydownEvent: KeydownEvent = {\n keyCode: e.keyCode ?? e.which,\n code: e.code,\n event: e\n };\n table.fireListeners(TABLE_EVENT_TYPE.BEFORE_KEYDOWN, beforeKeydownEvent);\n // 键盘按下事件 内部逻辑处理\n if (e.key === 'a' && (e.ctrlKey || e.metaKey)) {\n if (table.keyboardOptions?.selectAllOnCtrlA) {\n // 处理全选\n e.preventDefault();\n //全选\n eventManager.deelTableSelectAll();\n }\n } else if (\n stateManager.select.cellPos.col >= 0 &&\n stateManager.select.cellPos.row >= 0 &&\n (e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'ArrowLeft' || e.key === 'ArrowRight')\n ) {\n if (\n (!(table.options.keyboardOptions?.moveEditCellOnArrowKeys ?? false) &&\n (table as ListTableAPI).editorManager?.editingEditor) ||\n table.options.keyboardOptions?.moveSelectedCellOnArrowKeys === false\n ) {\n // 编辑单元格状态下 如果没有开启方向键切换cell 则退出 。方向键可以在编辑input内移动光标\n return;\n }\n e.preventDefault();\n // 如果不加这句话 外部监听了键盘事件 会影响表格本身的移动格子功能,例如自定义日历编辑器的日期选择pickday.js\n //可能会引起其他问题 例如自定义实现了日历编辑器 里面切换日期左右键可能失效,这个时候建议监听VTable实例的事件keydown\n e.stopPropagation();\n let targetCol;\n let targetRow;\n\n // 处理向上箭头键\n if (e.key === 'ArrowUp') {\n if (e.ctrlKey || e.metaKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = 0;\n } else if (e.shiftKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row - 1));\n } else {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row - 1));\n }\n } else if (e.key === 'ArrowDown') {\n // 处理向下箭头键\n if (e.ctrlKey || e.metaKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = table.rowCount - 1;\n } else if (e.shiftKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n } else {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n }\n } else if (e.key === 'ArrowLeft') {\n // 处理向左箭头键\n if (e.ctrlKey || e.metaKey) {\n targetCol = 0;\n targetRow = stateManager.select.cellPos.row;\n } else if (e.shiftKey) {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col - 1));\n } else {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col - 1));\n }\n } else if (e.key === 'ArrowRight') {\n // 处理向右箭头键\n if (e.ctrlKey || e.metaKey) {\n targetCol = table.colCount - 1;\n targetRow = stateManager.select.cellPos.row;\n } else if (e.shiftKey) {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col + 1));\n } else {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col + 1));\n }\n }\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow, e.shiftKey);\n if (\n (table.options.keyboardOptions?.moveEditCellOnArrowKeys ?? false) &&\n (table as ListTableAPI).editorManager?.editingEditor\n ) {\n // 开启了方向键切换编辑单元格 并且当前已经在编辑状态下 切换到下一个需先退出再进入下个单元格的编辑\n (table as ListTableAPI).editorManager?.completeEdit();\n table.getElement().focus();\n if ((table as ListTableAPI).getEditor(targetCol, targetRow)) {\n (table as ListTableAPI).editorManager?.startEditCell(targetCol, targetRow);\n }\n }\n } else if (e.key === 'Escape') {\n (table as ListTableAPI).editorManager?.cancelEdit();\n table.getElement().focus();\n } else if (e.key === 'Enter') {\n // 如果按enter键 可以结束当前的编辑 或开启编辑选中的单元格(仅限单选)\n if ((table as ListTableAPI).editorManager?.editingEditor) {\n // 如果是结束当前编辑,且有主动监听keydown事件,则先触发keydown事件,之后再结束编辑\n handleKeydownListener(e);\n (table as ListTableAPI).editorManager?.completeEdit();\n table.getElement().focus();\n\n if (table.options.keyboardOptions?.moveFocusCellOnEnter === true) {\n // 利用enter键选中下一个单元格\n const targetCol = stateManager.select.cellPos.col;\n const targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow, e.shiftKey);\n }\n // 直接返回,不再触发最后的keydown监听事件相关代码\n return;\n }\n if (table.options.keyboardOptions?.moveFocusCellOnEnter === true) {\n // 利用enter键选中下一个单元格\n const targetCol = stateManager.select.cellPos.col;\n const targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow, e.shiftKey);\n } else if (\n (table.options.keyboardOptions?.editCellOnEnter ?? true) &&\n (table.stateManager.select.ranges?.length ?? 0) === 1\n ) {\n // 如果开启按enter键进入编辑的配置 且当前有选中的单元格 则进入编辑(仅限单选)\n const startCol = table.stateManager.select.ranges[0].start.col;\n const startRow = table.stateManager.select.ranges[0].start.row;\n const endCol = table.stateManager.select.ranges[0].end.col;\n const endRow = table.stateManager.select.ranges[0].end.row;\n if (startCol === endCol && startRow === endRow) {\n if ((table as ListTableAPI).getEditor(startCol, startRow)) {\n (table as ListTableAPI).editorManager?.startEditCell(startCol, startRow);\n }\n }\n }\n } else if (e.key === 'Tab') {\n if (table.options.keyboardOptions?.moveFocusCellOnTab ?? true) {\n if (stateManager.select.cellPos.col >= 0 && stateManager.select.cellPos.row >= 0) {\n const isLastCell =\n stateManager.select.cellPos.col === table.colCount - 1 &&\n stateManager.select.cellPos.row === table.rowCount - 1;\n\n if (isLastCell) {\n return;\n }\n\n e.preventDefault();\n\n let targetCol;\n let targetRow;\n if (stateManager.select.cellPos.col === table.colCount - 1) {\n targetRow = Math.min(table.rowCount - 1, stateManager.select.cellPos.row + 1);\n targetCol = table.rowHeaderLevelCount;\n } else {\n targetRow = stateManager.select.cellPos.row;\n targetCol = stateManager.select.cellPos.col + 1;\n }\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow);\n if ((table as ListTableAPI).editorManager?.editingEditor) {\n (table as ListTableAPI).editorManager?.completeEdit();\n table.getElement().focus();\n if ((table as ListTableAPI).getEditor(targetCol, targetRow)) {\n (table as ListTableAPI).editorManager?.startEditCell(targetCol, targetRow);\n }\n }\n }\n }\n } else if (!(e.ctrlKey || e.metaKey)) {\n const editCellTrigger = (table.options as ListTableConstructorOptions).editCellTrigger;\n if (\n (editCellTrigger === 'keydown' || (Array.isArray(editCellTrigger) && editCellTrigger.includes('keydown'))) &&\n !table.editorManager?.editingEditor\n ) {\n const allowedKeys = /^[a-zA-Z0-9+\\-*\\/%=.,\\s]$/; // 允许的键值正则表达式\n if (e.key.match(allowedKeys)) {\n table.editorManager && (table.editorManager.beginTriggerEditCellMode = 'keydown');\n table.editorManager?.startEditCell(stateManager.select.cellPos.col, stateManager.select.cellPos.row, '');\n }\n }\n }\n handleKeydownListener(e);\n });\n /**\n * 处理主动注册的keydown事件\n * @param e\n */\n function handleKeydownListener(e: KeyboardEvent) {\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.KEYDOWN)) {\n const cellsEvent: KeydownEvent = {\n keyCode: e.keyCode ?? e.which,\n code: e.code,\n event: e,\n // cells: table.getSelectedCellInfos(),\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth\n };\n table.fireListeners(TABLE_EVENT_TYPE.KEYDOWN, cellsEvent);\n }\n }\n\n handler.on(table.getElement(), 'copy', async (e: KeyboardEvent) => {\n if (table.keyboardOptions?.copySelected) {\n const data = table.getCopyValue();\n if (isValid(data)) {\n e.preventDefault();\n //检查是否有权限\n const permissionState = await navigator.permissions.query({ name: 'clipboard-write' as PermissionName });\n if (navigator.clipboard?.write && permissionState.state === 'granted') {\n // 将复制的数据转为html格式\n const setDataToHTML = (data: string) => {\n const result = ['<table>'];\n const META_HEAD = [\n '<meta name=\"author\" content=\"Visactor\"/>', // 后面可用于vtable之间的快速复制粘贴\n //white-space:normal,连续的空白字符会被合并为一个空格,并且文本会根据容器的宽度自动换行显示\n //mso-data-placement:same-cell,excel专用, 在同一个单元格中显示所有数据,而不是默认情况下将数据分散到多个单元格中显示\n '<style type=\"text/css\">td{white-space:normal}br{mso-data-placement:same-cell}</style>'\n ].join('');\n const rows = data.split('\\r\\n'); // 将数据拆分为行\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: string[] = [];\n if (rowIndex === 0) {\n result.push('<tbody>');\n }\n cells.forEach(function (cell: string, cellIndex: number) {\n // 单元格数据处理\n const parsedCellData = !cell\n ? ' '\n : cell\n .toString()\n .replace(/&/g, '&amp;') // replace & with &amp; to prevent XSS attacks\n .replace(/'/g, '&#39;') // replace ' with &#39; to prevent XSS attacks\n .replace(/</g, '&lt;') // replace < with &lt; to prevent XSS attacks\n .replace(/>/g, '&gt;') // replace > with &gt; to prevent XSS attacks\n .replace(/\\n/g, '<br>') // replace \\n with <br> to prevent XSS attacks\n .replace(/(<br(\\s*|\\/)>(\\r\\n|\\n)?|\\r\\n|\\n)/g, '<br>\\r\\n') // replace <br> with <br>\\r\\n to prevent XSS attacks\n .replace(/\\x20{2,}/gi, (substring: string | any[]) => {\n // excel连续空格序列化\n return `<span style=\"mso-spacerun: yes\">${'&nbsp;'.repeat(substring.length - 1)} </span>`;\n }) // replace 2 or more spaces with &nbsp; to prevent XSS attacks\n .replace(/\\t/gi, '&#9;'); // replace \\t with &#9; to prevent XSS attacks\n\n rowValues.push(`<td>${parsedCellData}</td>`);\n });\n result.push('<tr>', ...rowValues, '</tr>');\n\n if (rowIndex === rows.length - 1) {\n result.push('</tbody>');\n }\n });\n result.push('</table>');\n return [META_HEAD, result.join('')].join('');\n };\n const dataHTML = setDataToHTML(data);\n navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([dataHTML], { type: 'text/html' }),\n 'text/plain': new Blob([data], { type: 'text/plain' })\n })\n ]);\n } else {\n if (browser.IE) {\n (window as any).clipboardData.setData('Text', data); // IE\n } else {\n (e as any).clipboardData.setData('text/plain', data); // Chrome, Firefox\n }\n }\n table.fireListeners(TABLE_EVENT_TYPE.COPY_DATA, {\n cellRange: table.stateManager.select.ranges,\n copyData: data\n });\n }\n }\n });\n handler.on(table.getElement(), 'paste', (e: any) => {\n if (table.keyboardOptions?.pasteValueToCell && (table as ListTableAPI).changeCellValues) {\n if ((table as ListTableAPI).editorManager?.editingEditor) {\n return;\n }\n if (table.stateManager.select.ranges?.length > 0) {\n if (navigator.clipboard?.read) {\n // 读取剪切板数据\n navigator.clipboard.read().then(clipboardItems => {\n for (const item of clipboardItems) {\n // 优先处理 html 格式数据\n if (item.types.includes('text/html')) {\n pasteHtmlToTable(item);\n } else if (item.types.length === 1 && item.types[0] === 'text/plain') {\n pasteTextToTable(item);\n } else {\n // 其他情况\n }\n }\n });\n } else {\n const ranges = table.stateManager.select.ranges;\n const col = Math.min(ranges[0].start.col, ranges[0].end.col);\n const row = Math.min(ranges[0].start.row, ranges[0].end.row);\n\n const clipboardData = e.clipboardData || window.Clipboard;\n const pastedData = clipboardData.getData('text');\n const rows = pastedData.split('\\n'); // 将数据拆分为行\n const values: (string | number)[][] = [];\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = [];\n values.push(rowValues);\n cells.forEach(function (cell: string, cellIndex: number) {\n // 去掉单元格数据末尾的 '\\r'\n if (cellIndex === cells.length - 1) {\n cell = cell.trim();\n }\n rowValues.push(cell);\n });\n });\n const changedCellResults = (table as ListTableAPI).changeCellValues(col, row, values);\n if (table.hasListeners(TABLE_EVENT_TYPE.PASTED_DATA)) {\n table.fireListeners(TABLE_EVENT_TYPE.PASTED_DATA, {\n col,\n row,\n pasteData: values,\n changedCellResults\n });\n }\n }\n }\n }\n });\n\n handler.on(table.getElement(), 'contextmenu', (e: any) => {\n if (table.eventOptions?.preventDefaultContextMenu !== false) {\n e.preventDefault();\n } else {\n // default context menu will cause pointerup event can not trigger\n // call manually\n globalPointerupCallback(e);\n }\n });\n\n if (!table.options.canvas) {\n handler.on(table.getContainer(), 'resize', e => {\n if (table.isReleased) {\n return;\n }\n if (e.width === 0 && e.height === 0) {\n // 临时绕行解决因为display设置为none产生的问题\n return;\n }\n if (table.autoFillWidth || table.autoFillHeight) {\n table.editorManager?.completeEdit();\n }\n if (!isValid(table.options.pixelRatio)) {\n table.setPixelRatio(getPixelRatio());\n }\n if (!e.windowSizeNotChange) {\n table.resize();\n }\n });\n }\n\n // const regex = /<tr[^>]*>(.*?)<\\/tr>/gs; // 匹配<tr>标签及其内容\n const regex = /<tr[^>]*>([\\s\\S]*?)<\\/tr>/g; // for webpack3\n // const cellRegex = /<td[^>]*>(.*?)<\\/td>/gs; // 匹配<td>标签及其内容\n const cellRegex = /<td[^>]*>([\\s\\S]*?)<\\/td>/g; // for webpack3\n\n function pasteHtmlToTable(item: ClipboardItem) {\n const ranges = table.stateManager.select.ranges;\n const selectRangeLength = ranges.length;\n const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n let pasteValuesColCount = 0;\n let pasteValuesRowCount = 0;\n let values: (string | number)[][] = [];\n item.getType('text/html').then((blob: any) => {\n blob.text().then((pastedData: any) => {\n // 解析html数据\n if (pastedData && /(<table)|(<TABLE)/g.test(pastedData)) {\n // const matches = pastedData.matchAll(regex);\n const matches = Array.from(pastedData.matchAll(regex));\n for (const match of matches) {\n const rowContent = match[1]; // 获取<tr>标签中的内容\n const cellMatches: RegExpMatchArray[] = Array.from(rowContent.matchAll(cellRegex)); // 获取<td>标签中的内容\n const rowValues = cellMatches.map(cellMatch => {\n return (\n cellMatch[1]\n .replace(/(<(?!br)([^>]+)>)/gi, '') // 除了 <br> 标签以外的所有 HTML 标签都替换为空字符串\n .replace(/<br(\\s*|\\/)>[\\r\\n]?/gim, '\\n') // 将字符串中的 <br> 标签以及其后可能存在的空白字符和斜杠都替换为换行符 \\n\n // .replace(/<br>/g, '\\n') // 替换<br>标签为换行符\n // .replace(/<(?:.|\\n)*?>/gm, '') // 去除HTML标签\n //将字符串中的 HTML 实体字符转换为原始的字符\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&#9;/gi, '\\t')\n .replace(/&nbsp;/g, ' ')\n );\n // .trim(); // 去除首尾空格\n });\n values.push(rowValues);\n pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);\n }\n pasteValuesRowCount = values.length ?? 0;\n values = handlePasteValues(\n values,\n pasteValuesRowCount,\n pasteValuesColCount,\n maxRow - row + 1,\n maxCol - col + 1\n );\n\n const changedCellResults = (table as ListTableAPI).changeCellValues(col, row, values, true);\n if (table.hasListeners(TABLE_EVENT_TYPE.PASTED_DATA)) {\n table.fireListeners(TABLE_EVENT_TYPE.PASTED_DATA, {\n col,\n row,\n pasteData: values,\n changedCellResults\n });\n }\n } else {\n navigator.clipboard.read().then(clipboardItems => {\n for (const item of clipboardItems) {\n if (item.types.includes('text/plain')) {\n item.getType('text/plain').then((blob: Blob) => {\n blob.text().then(_pasteValue);\n });\n }\n }\n });\n }\n });\n });\n }\n\n function _pasteValue(pastedData: string) {\n const ranges = table.stateManager.select.ranges;\n const selectRangeLength = ranges.length;\n const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n let pasteValuesColCount = 0;\n let pasteValuesRowCount = 0;\n let values: (string | number)[][] = [];\n const rows = pastedData.split('\\n'); // 将数据拆分为行\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = [];\n values.push(rowValues);\n cells.forEach(function (cell: string, cellIndex: number) {\n // 去掉单元格数据末尾的 '\\r'\n if (cellIndex === cells.length - 1) {\n cell = cell.trim();\n }\n rowValues.push(cell);\n });\n pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);\n });\n pasteValuesRowCount = values.length ?? 0;\n values = handlePasteValues(values, pasteValuesRowCount, pasteValuesColCount, maxRow - row + 1, maxCol - col + 1);\n const changedCellResults = (table as ListTableAPI).changeCellValues(col, row, values, true);\n if (table.hasListeners(TABLE_EVENT_TYPE.PASTED_DATA)) {\n table.fireListeners(TABLE_EVENT_TYPE.PASTED_DATA, {\n col,\n row,\n pasteData: values,\n changedCellResults\n });\n }\n }\n function pasteTextToTable(item: ClipboardItem) {\n // 如果只有 'text/plain'\n const ranges = table.stateManager.select.ranges;\n const selectRangeLength = ranges.length;\n const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n let pasteValuesColCount = 0;\n let pasteValuesRowCount = 0;\n // const values: (string | number)[][] = [];\n item.getType('text/plain').then((blob: any) => {\n blob.text().then((pastedData: any) => {\n const rows = pastedData.replace(/\\r(?!\\n)/g, '\\r\\n').split('\\r\\n'); // 文本中的换行符格式进行统一处理\n let values: (string | number)[][] = [];\n if (rows.length > 1 && rows[rows.length - 1] === '') {\n rows.pop();\n }\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = [];\n values.push(rowValues);\n cells.forEach(function (cell: string, cellIndex: number) {\n if (cell.includes('\\n')) {\n cell = cell\n .replace(/^\"(.*)\"$/, '$1') // 将字符串开头和结尾的双引号去除,并保留双引号内的内容\n .replace(/[\"]*/g, match => new Array(Math.floor(match.length / 2)).fill('\"').join('')); // 连续出现的双引号替换为一半数量的双引号\n }\n rowValues.push(cell);\n });\n pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);\n });\n pasteValuesRowCount = values.length ?? 0;\n values = handlePasteValues(\n values,\n pasteValuesRowCount,\n pasteValuesColCount,\n maxRow - row + 1,\n maxCol - col + 1\n );\n const changedCellResults = (table as ListTableAPI).changeCellValues(col, row, values, true);\n if (table.hasListeners(TABLE_EVENT_TYPE.PASTED_DATA)) {\n table.fireListeners(TABLE_EVENT_TYPE.PASTED_DATA, {\n col,\n row,\n pasteData: values,\n changedCellResults\n });\n }\n });\n });\n }\n function handlePasteValues(\n values: (string | number)[][],\n rowCount: number,\n colCount: number,\n selectedRowCount: number,\n selectedColCount: number\n ) {\n if (selectedColCount > colCount || selectedRowCount > rowCount) {\n if (selectedColCount % colCount === 0 && selectedRowCount % rowCount === 0) {\n const toPasteValues: (string | number)[][] = [];\n // 在目标区域中循环遍历,将复制的值逐个粘贴到每个单元格中\n for (let i = 0; i < selectedRowCount; i++) {\n const rowPasteValue: (string | number)[] = [];\n toPasteValues.push(rowPasteValue);\n for (let j = 0; j < selectedColCount; j++) {\n const copiedRow = i % rowCount;\n const copiedCol = j % colCount;\n rowPasteValue.push(values[copiedRow][copiedCol]);\n }\n }\n return toPasteValues;\n }\n return values;\n }\n return values;\n }\n // 有被阻止冒泡的场景 就触发不到这里的事件了 所以这个LastBodyPointerXY变量的赋值在scrollbar的down事件也进行了处理\n const globalPointerdownCallback = (e: MouseEvent) => {\n if (table.isReleased) {\n return;\n }\n // console.log('body pointerdown');\n table.eventManager.LastBodyPointerXY = { x: e.x, y: e.y };\n table.eventManager.isDown = true;\n\n const target = e.target as HTMLElement;\n if (!table.getElement().contains(target) && !table.internalProps.menuHandler.containElement(target)) {\n // 如果点击到表格外部的dom\n const isCompleteEdit = (table as ListTableAPI).editorManager?.completeEdit(e);\n getPromiseValue<boolean>(isCompleteEdit, isCompleteEdit => {\n if (isCompleteEdit === false) {\n // 如果没有正常退出编辑状态 则不执行下面的逻辑 如选择其他单元格的逻辑\n return;\n }\n //点击到表格外部不需要取消选中状态\n if (table.options.select?.outsideClickDeselect) {\n const isHasSelected = !!stateManager.select.ranges?.length;\n eventManager.dealTableSelect();\n stateManager.endSelectCells(true, isHasSelected);\n }\n });\n }\n };\n eventManager.globalEventListeners.push({\n name: 'pointerdown',\n env: 'vglobal',\n callback: globalPointerdownCallback\n });\n vglobal.addEventListener('pointerdown', globalPointerdownCallback);\n\n const globalPointerupOutsideCallback = (e: MouseEvent) => {\n // console.log('pointerupoutside');\n // const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (stateManager.menu.isShow) {\n setTimeout(() => {\n // conside page scroll\n if (!table.internalProps.menuHandler.pointInMenuElement(e.clientX, e.clientY)) {\n stateManager.menu.isShow && stateManager.hideMenu();\n }\n }, 0);\n }\n // 同pointerup中的逻辑\n if (stateManager.isResizeCol()) {\n endResizeCol(table);\n } else if (stateManager.isResizeRow()) {\n endResizeRow(table);\n } else if (stateManager.isMoveCol()) {\n const endMoveColSuccess = table.stateManager.endMoveCol();\n fireMoveColEventListeners(table, endMoveColSuccess, e);\n } else if (stateManager.isSelecting()) {\n if (table.stateManager.select?.ranges?.length) {\n const lastCol = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end.col;\n const lastRow = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end.row;\n table.stateManager.endSelectCells();\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END)) {\n const cellsEvent: MousePointerMultiCellEvent = {\n event: e,\n cells: [],\n col: lastCol,\n row: lastRow,\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n target: undefined\n };\n cellsEvent.cells = table.getSelectedCellInfos();\n table.fireListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END, cellsEvent);\n }\n }\n }\n };\n\n const globalPointerupCallback = (e: MouseEvent) => {\n if (table.isReleased) {\n return;\n }\n const target = e.target as HTMLElement;\n\n if (target !== table.canvas) {\n globalPointerupOutsideCallback(e);\n }\n\n table.eventManager.LastBodyPointerXY = null;\n // console.log('body pointerup', table.eventManager.isDown, table.eventManager.isDraging);\n table.eventManager.isDown = false;\n table.eventManager.isDraging = false;\n table.eventManager.inertiaScroll.endInertia();\n if (stateManager.interactionState === 'grabing' && stateManager.isResizeCol()) {\n endResizeCol(table);\n } else if (stateManager.interactionState === 'grabing' && stateManager.isResizeRow()) {\n endResizeRow(table);\n } else if (stateManager.isMoveCol()) {\n const endMoveColSuccess = table.stateManager.endMoveCol();\n fireMoveColEventListeners(table, endMoveColSuccess, e);\n } else if (table.editorManager?.editingEditor) {\n if (!table.getElement().contains(target)) {\n // 如果点击到表格外部的dom\n const isCompleteEdit = (table as ListTableAPI).editorManager?.completeEdit(e);\n getPromiseValue<boolean>(isCompleteEdit, (isCompleteEdit: boolean) => {\n if (isCompleteEdit === false) {\n // 如果没有正常退出编辑状态 则不执行下面的逻辑 如选择其他单元格的逻辑\n return;\n }\n stateManager.updateInteractionState(InteractionState.default);\n eventManager.dealTableHover();\n });\n }\n }\n stateManager.updateInteractionState(InteractionState.default);\n };\n eventManager.globalEventListeners.push({\n name: 'pointerup',\n env: 'vglobal',\n callback: globalPointerupCallback\n });\n vglobal.addEventListener('pointerup', globalPointerupCallback);\n\n const globalPointermoveCallback = (e: MouseEvent) => {\n if (table.eventManager.isDown && table.eventManager.LastBodyPointerXY) {\n const lastX = table.eventManager.LastBodyPointerXY?.x ?? e.x;\n const lastY = table.eventManager.LastBodyPointerXY?.y ?? e.y;\n if (Math.abs(lastX - e.x) > 1 || Math.abs(lastY - e.y) > 1) {\n table.eventManager.isDraging = true;\n }\n }\n // 注释掉。因为: 这里pointermove太敏感了 点击快的时候 可能动了1px这里也会执行到 就影响到下面选中不触发的问题。下面pointermove就有这段逻辑,这里先去掉\n // if (eventManager.touchSetTimeout) {\n // clearTimeout(eventManager.touchSetTimeout);\n // console.log('eventManager.touchSetTimeout', eventManager.touchSetTimeout);\n // eventManager.touchSetTimeout = undefined;\n // }\n // const eventArgsSet = getCellEventArgsSet(e);\n const { x, y } = table._getMouseAbstractPoint(e);\n // if (stateManager.interactionState === InteractionState.scrolling) {\n // return;\n // }\n if (stateManager.interactionState === InteractionState.grabing) {\n if (stateManager.isResizeCol()) {\n eventManager.dealColumnResize(x, y);\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.RESIZE_COLUMN)) {\n table.fireListeners(TABLE_EVENT_TYPE.RESIZE_COLUMN, {\n col: table.stateManager.columnResize.col,\n colWidth: table.getColWidth(table.stateManager.columnResize.col)\n });\n }\n } else if (stateManager.isResizeRow()) {\n eventManager.dealRowResize(x, y);\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.RESIZE_ROW)) {\n table.fireListeners(TABLE_EVENT_TYPE.RESIZE_ROW, {\n row: table.stateManager.rowResize.row,\n rowHeight: table.getRowHeight(table.stateManager.rowResize.row)\n });\n }\n }\n }\n const isSelecting = table.stateManager.isSelecting();\n\n if (\n eventManager._enableTableScroll &&\n eventManager.isDraging &&\n isSelecting &&\n table.stateManager.select.ranges?.length > 0\n ) {\n // 检测鼠标是否离开了table\n const drawRange = table.getDrawRange();\n // const element = table.getElement();\n // const { x: rootLeft, y: rootTop, width: rootWidth } = element.getBoundingClientRect();\n // const tableLeft = drawRange.left + rootLeft;\n // const tableTop = drawRange.top + rootTop;\n // const tableRight = tableLeft + drawRange.width;\n // const tableBottom = tableTop + drawRange.height;\n // console.log('x, y', x, y);\n const topFrozenRowHeight = table.getFrozenRowsHeight();\n const bottomFrozenRowHeight = table.getBottomFrozenRowsHeight();\n const leftFrozenColsWidth = table.getFrozenColsWidth();\n const rightFrozenColsWidth = table.getRightFrozenColsWidth();\n const startCell = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].start;\n if (table.isSeriesNumber(startCell.col, startCell.row)) {\n //如果是鼠标落到了序号列 不自动滚动\n return;\n }\n const endCell = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end;\n const canScrollY =\n (table.isFrozenRow(startCell.row) === false || table.isFrozenRow(endCell.row) === false) &&\n table.getAllRowsHeight() > table.tableNoFrameHeight;\n const canScrollX =\n (table.isFrozenColumn(startCell.col) === false || table.isFrozenColumn(endCell.col) === false) &&\n table.getAllColsWidth() > table.tableNoFrameWidth;\n if (\n ((y > drawRange.bottom - bottomFrozenRowHeight || y < drawRange.top + topFrozenRowHeight) && canScrollY) ||\n ((x > drawRange.right - rightFrozenColsWidth || x < drawRange.left + leftFrozenColsWidth) && canScrollX)\n ) {\n table.eventManager.scrollXSpeed = 0;\n table.eventManager.scrollYSpeed = 0;\n let bottom = false;\n let top = false;\n let right = false;\n let left = false;\n if (\n y > drawRange.bottom - bottomFrozenRowHeight &&\n canScrollY &&\n table.scrollTop + table.tableNoFrameHeight < table.getAllRowsHeight()\n ) {\n bottom = true;\n table.eventManager.scrollYSpeed = -(y - drawRange.bottom + bottomFrozenRowHeight) / 50;\n } else if (y < drawRange.top + topFrozenRowHeight && canScrollY && table.scrollTop > 0) {\n top = true;\n table.eventManager.scrollYSpeed = -(y - drawRange.top - topFrozenRowHeight) / 50;\n }\n\n if (\n x > drawRange.right - rightFrozenColsWidth &&\n canScrollX &&\n table.scrollLeft + table.tableNoFrameWidth < table.getAllColsWidth()\n ) {\n right = true;\n table.eventManager.scrollXSpeed = -(x - drawRange.right + rightFrozenColsWidth) / 50;\n } else if (x < drawRange.left + leftFrozenColsWidth && canScrollX && table.scrollLeft > 0) {\n left = true;\n table.eventManager.scrollXSpeed = -(x - drawRange.left - leftFrozenColsWidth) / 50;\n }\n table.eventManager.inertiaScroll.startInertia(\n table.eventManager.scrollXSpeed,\n table.eventManager.scrollYSpeed,\n 1\n );\n table.eventManager.inertiaScroll.setScrollHandle((dx: number, dy: number) => {\n handleWhell({ deltaX: -dx, deltaY: -dy } as any, table.stateManager, false);\n\n let selectX: number;\n let selectY: number;\n\n if (bottom) {\n selectY = table.scrollTop + drawRange.height - bottomFrozenRowHeight - 20;\n } else if (top) {\n selectY = table.scrollTop + topFrozenRowHeight + 20;\n }\n\n if (right) {\n selectX = table.scrollLeft + drawRange.width - rightFrozenColsWidth - 20;\n } else if (left) {\n selectX = table.scrollLeft + leftFrozenColsWidth + 20;\n }\n\n let considerFrozenY = false;\n let considerFrozenX = false;\n if (!right && !left) {\n if (\n (x > table.tableNoFrameWidth - table.getRightFrozenColsWidth() && x < table.tableNoFrameWidth) ||\n (x > 0 && x < table.getFrozenColsWidth())\n ) {\n selectX = x;\n considerFrozenX = true;\n } else {\n selectX = table.scrollLeft + x;\n }\n }\n if (!bottom && !top) {\n if (\n (y > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight() && y < table.tableNoFrameHeight) ||\n (y > 0 && y < table.getFrozenRowsHeight())\n ) {\n selectY = y;\n considerFrozenY = true;\n } else {\n selectY = table.scrollTop + y;\n }\n }\n table.stateManager.updateInteractionState(InteractionState.grabing);\n const targetCol = table.getTargetColAtConsiderRightFrozen(selectX, considerFrozenX);\n const targetRow = table.getTargetRowAtConsiderBottomFrozen(selectY, considerFrozenY);\n if (!table.options.select?.disableDragSelect && isValid(targetCol) && isValid(targetRow)) {\n table.stateManager.updateSelectPos(targetCol.col, targetRow.row, false, false, false, false);\n }\n });\n } else if (table.eventManager.inertiaScroll.isInertiaScrolling()) {\n table.eventManager.inertiaScroll.endInertia();\n } else {\n table.eventManager.scrollYSpeed = 0;\n }\n }\n };\n eventManager.globalEventListeners.push({\n name: 'pointermove',\n env: 'vglobal',\n callback: globalPointermoveCallback\n });\n vglobal.addEventListener('pointermove', globalPointermoveCallback);\n}\n"]}
1
+ {"version":3,"sources":["../src/event/listener/container-dom.ts"],"names":[],"mappings":"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","file":"container-dom.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport type { EventHandler } from '../EventHandler';\nimport type { ListTableConstructorOptions, MousePointerMultiCellEvent } from '../../ts-types';\nimport { InteractionState, type KeydownEvent, type ListTableAPI } from '../../ts-types';\nimport { TABLE_EVENT_TYPE } from '../../core/TABLE_EVENT_TYPE';\nimport { handleWhell } from '../scroll';\nimport { browser, getPromiseValue } from '../../tools/helper';\nimport type { EventManager } from '../event';\nimport { getPixelRatio } from '../../tools/pixel-ratio';\nimport { endResizeCol, endResizeRow } from './table-group';\nimport { isCellDisableSelect } from '../../state/select/is-cell-select-highlight';\nimport { fireMoveColEventListeners } from '../helper';\nimport { vglobal } from './../../vrender';\nexport function bindContainerDomListener(eventManager: EventManager) {\n const table = eventManager.table;\n const stateManager = table.stateManager;\n const handler: EventHandler = table.internalProps.handler;\n\n // handler.on(table.getElement(), 'mousedown', (e: MouseEvent) => {\n // if (table.eventManager.isPointerDownOnTable) {\n // e.stopPropagation();\n // }\n // });\n\n handler.on(table.getElement(), 'blur', (e: MouseEvent) => {\n eventManager.dealTableHover();\n // eventManager.dealTableSelect();\n });\n\n // 监听键盘事件\n handler.on(table.getElement(), 'keydown', (e: KeyboardEvent) => {\n // 键盘按下事件 内部逻辑处理前\n const beforeKeydownEvent: KeydownEvent = {\n keyCode: e.keyCode ?? e.which,\n code: e.code,\n event: e\n };\n table.fireListeners(TABLE_EVENT_TYPE.BEFORE_KEYDOWN, beforeKeydownEvent);\n // 键盘按下事件 内部逻辑处理\n if (e.key === 'a' && (e.ctrlKey || e.metaKey)) {\n if (table.keyboardOptions?.selectAllOnCtrlA) {\n // 处理全选\n e.preventDefault();\n //全选\n eventManager.deelTableSelectAll();\n }\n } else if (\n stateManager.select.cellPos.col >= 0 &&\n stateManager.select.cellPos.row >= 0 &&\n (e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'ArrowLeft' || e.key === 'ArrowRight')\n ) {\n if (\n (!(table.options.keyboardOptions?.moveEditCellOnArrowKeys ?? false) &&\n (table as ListTableAPI).editorManager?.editingEditor) ||\n table.options.keyboardOptions?.moveSelectedCellOnArrowKeys === false\n ) {\n // 编辑单元格状态下 如果没有开启方向键切换cell 则退出 。方向键可以在编辑input内移动光标\n return;\n }\n e.preventDefault();\n // 如果不加这句话 外部监听了键盘事件 会影响表格本身的移动格子功能,例如自定义日历编辑器的日期选择pickday.js\n //可能会引起其他问题 例如自定义实现了日历编辑器 里面切换日期左右键可能失效,这个时候建议监听VTable实例的事件keydown\n e.stopPropagation();\n let targetCol;\n let targetRow;\n\n // 处理向上箭头键\n if (e.key === 'ArrowUp') {\n if (e.ctrlKey || e.metaKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = 0;\n } else if (e.shiftKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row - 1));\n } else {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row - 1));\n }\n } else if (e.key === 'ArrowDown') {\n // 处理向下箭头键\n if (e.ctrlKey || e.metaKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = table.rowCount - 1;\n } else if (e.shiftKey) {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n } else {\n targetCol = stateManager.select.cellPos.col;\n targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n }\n } else if (e.key === 'ArrowLeft') {\n // 处理向左箭头键\n if (e.ctrlKey || e.metaKey) {\n targetCol = 0;\n targetRow = stateManager.select.cellPos.row;\n } else if (e.shiftKey) {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col - 1));\n } else {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col - 1));\n }\n } else if (e.key === 'ArrowRight') {\n // 处理向右箭头键\n if (e.ctrlKey || e.metaKey) {\n targetCol = table.colCount - 1;\n targetRow = stateManager.select.cellPos.row;\n } else if (e.shiftKey) {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col + 1));\n } else {\n targetRow = stateManager.select.cellPos.row;\n targetCol = Math.min(table.colCount - 1, Math.max(0, stateManager.select.cellPos.col + 1));\n }\n }\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow, e.shiftKey);\n if (\n (table.options.keyboardOptions?.moveEditCellOnArrowKeys ?? false) &&\n (table as ListTableAPI).editorManager?.editingEditor\n ) {\n // 开启了方向键切换编辑单元格 并且当前已经在编辑状态下 切换到下一个需先退出再进入下个单元格的编辑\n (table as ListTableAPI).editorManager?.completeEdit();\n table.getElement().focus();\n if ((table as ListTableAPI).getEditor(targetCol, targetRow)) {\n (table as ListTableAPI).editorManager?.startEditCell(targetCol, targetRow);\n }\n }\n } else if (e.key === 'Escape') {\n (table as ListTableAPI).editorManager?.cancelEdit();\n table.getElement().focus();\n } else if (e.key === 'Enter') {\n // 如果按enter键 可以结束当前的编辑 或开启编辑选中的单元格(仅限单选)\n if ((table as ListTableAPI).editorManager?.editingEditor) {\n // 如果是结束当前编辑,且有主动监听keydown事件,则先触发keydown事件,之后再结束编辑\n handleKeydownListener(e);\n (table as ListTableAPI).editorManager?.completeEdit();\n table.getElement().focus();\n\n if (table.options.keyboardOptions?.moveFocusCellOnEnter === true) {\n // 利用enter键选中下一个单元格\n const targetCol = stateManager.select.cellPos.col;\n const targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow, e.shiftKey);\n }\n // 直接返回,不再触发最后的keydown监听事件相关代码\n return;\n }\n if (table.options.keyboardOptions?.moveFocusCellOnEnter === true) {\n // 利用enter键选中下一个单元格\n const targetCol = stateManager.select.cellPos.col;\n const targetRow = Math.min(table.rowCount - 1, Math.max(0, stateManager.select.cellPos.row + 1));\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow, e.shiftKey);\n } else if (\n (table.options.keyboardOptions?.editCellOnEnter ?? true) &&\n (table.stateManager.select.ranges?.length ?? 0) === 1\n ) {\n // 如果开启按enter键进入编辑的配置 且当前有选中的单元格 则进入编辑(仅限单选)\n const startCol = table.stateManager.select.ranges[0].start.col;\n const startRow = table.stateManager.select.ranges[0].start.row;\n const endCol = table.stateManager.select.ranges[0].end.col;\n const endRow = table.stateManager.select.ranges[0].end.row;\n if (startCol === endCol && startRow === endRow) {\n if ((table as ListTableAPI).getEditor(startCol, startRow)) {\n (table as ListTableAPI).editorManager?.startEditCell(startCol, startRow);\n }\n }\n }\n } else if (e.key === 'Tab') {\n if (table.options.keyboardOptions?.moveFocusCellOnTab ?? true) {\n if (stateManager.select.cellPos.col >= 0 && stateManager.select.cellPos.row >= 0) {\n const isLastCell =\n stateManager.select.cellPos.col === table.colCount - 1 &&\n stateManager.select.cellPos.row === table.rowCount - 1;\n\n if (isLastCell) {\n return;\n }\n\n e.preventDefault();\n\n let targetCol;\n let targetRow;\n if (stateManager.select.cellPos.col === table.colCount - 1) {\n targetRow = Math.min(table.rowCount - 1, stateManager.select.cellPos.row + 1);\n targetCol = table.rowHeaderLevelCount;\n } else {\n targetRow = stateManager.select.cellPos.row;\n targetCol = stateManager.select.cellPos.col + 1;\n }\n // 如果是不支持选中的单元格 则退出\n if (isCellDisableSelect(table, targetCol, targetRow)) {\n return;\n }\n table.selectCell(targetCol, targetRow);\n if ((table as ListTableAPI).editorManager?.editingEditor) {\n (table as ListTableAPI).editorManager?.completeEdit();\n table.getElement().focus();\n if ((table as ListTableAPI).getEditor(targetCol, targetRow)) {\n (table as ListTableAPI).editorManager?.startEditCell(targetCol, targetRow);\n }\n }\n }\n }\n } else if (!(e.ctrlKey || e.metaKey)) {\n const editCellTrigger = (table.options as ListTableConstructorOptions).editCellTrigger;\n if (\n (editCellTrigger === 'keydown' || (Array.isArray(editCellTrigger) && editCellTrigger.includes('keydown'))) &&\n !table.editorManager?.editingEditor\n ) {\n const allowedKeys = /^[a-zA-Z0-9+\\-*\\/%=.,\\s]$/; // 允许的键值正则表达式\n if (e.key.match(allowedKeys)) {\n table.editorManager && (table.editorManager.beginTriggerEditCellMode = 'keydown');\n table.editorManager?.startEditCell(stateManager.select.cellPos.col, stateManager.select.cellPos.row, '');\n }\n }\n }\n handleKeydownListener(e);\n });\n /**\n * 处理主动注册的keydown事件\n * @param e\n */\n function handleKeydownListener(e: KeyboardEvent) {\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.KEYDOWN)) {\n const cellsEvent: KeydownEvent = {\n keyCode: e.keyCode ?? e.which,\n code: e.code,\n event: e,\n // cells: table.getSelectedCellInfos(),\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth\n };\n table.fireListeners(TABLE_EVENT_TYPE.KEYDOWN, cellsEvent);\n }\n }\n\n handler.on(table.getElement(), 'copy', async (e: KeyboardEvent) => {\n if (table.keyboardOptions?.copySelected) {\n const data = table.getCopyValue();\n if (isValid(data)) {\n e.preventDefault();\n //检查是否有权限\n const permissionState = await navigator.permissions.query({ name: 'clipboard-write' as PermissionName });\n if (navigator.clipboard?.write && permissionState.state === 'granted') {\n // 将复制的数据转为html格式\n const setDataToHTML = (data: string) => {\n const result = ['<table>'];\n const META_HEAD = [\n '<meta name=\"author\" content=\"Visactor\"/>', // 后面可用于vtable之间的快速复制粘贴\n //white-space:normal,连续的空白字符会被合并为一个空格,并且文本会根据容器的宽度自动换行显示\n //mso-data-placement:same-cell,excel专用, 在同一个单元格中显示所有数据,而不是默认情况下将数据分散到多个单元格中显示\n '<style type=\"text/css\">td{white-space:normal}br{mso-data-placement:same-cell}</style>'\n ].join('');\n const rows = data.split('\\r\\n'); // 将数据拆分为行\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: string[] = [];\n if (rowIndex === 0) {\n result.push('<tbody>');\n }\n cells.forEach(function (cell: string, cellIndex: number) {\n // 单元格数据处理\n const parsedCellData = !cell\n ? ' '\n : cell\n .toString()\n .replace(/&/g, '&amp;') // replace & with &amp; to prevent XSS attacks\n .replace(/'/g, '&#39;') // replace ' with &#39; to prevent XSS attacks\n .replace(/</g, '&lt;') // replace < with &lt; to prevent XSS attacks\n .replace(/>/g, '&gt;') // replace > with &gt; to prevent XSS attacks\n .replace(/\\n/g, '<br>') // replace \\n with <br> to prevent XSS attacks\n .replace(/(<br(\\s*|\\/)>(\\r\\n|\\n)?|\\r\\n|\\n)/g, '<br>\\r\\n') // replace <br> with <br>\\r\\n to prevent XSS attacks\n .replace(/\\x20{2,}/gi, (substring: string | any[]) => {\n // excel连续空格序列化\n return `<span style=\"mso-spacerun: yes\">${'&nbsp;'.repeat(substring.length - 1)} </span>`;\n }) // replace 2 or more spaces with &nbsp; to prevent XSS attacks\n .replace(/\\t/gi, '&#9;'); // replace \\t with &#9; to prevent XSS attacks\n\n rowValues.push(`<td>${parsedCellData}</td>`);\n });\n result.push('<tr>', ...rowValues, '</tr>');\n\n if (rowIndex === rows.length - 1) {\n result.push('</tbody>');\n }\n });\n result.push('</table>');\n return [META_HEAD, result.join('')].join('');\n };\n const dataHTML = setDataToHTML(data);\n navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([dataHTML], { type: 'text/html' }),\n 'text/plain': new Blob([data], { type: 'text/plain' })\n })\n ]);\n } else {\n if (browser.IE) {\n (window as any).clipboardData.setData('Text', data); // IE\n } else {\n (e as any).clipboardData.setData('text/plain', data); // Chrome, Firefox\n }\n }\n table.fireListeners(TABLE_EVENT_TYPE.COPY_DATA, {\n cellRange: table.stateManager.select.ranges,\n copyData: data\n });\n }\n }\n });\n handler.on(table.getElement(), 'paste', async (e: any) => {\n if (table.keyboardOptions?.pasteValueToCell && (table as ListTableAPI).changeCellValues) {\n if ((table as ListTableAPI).editorManager?.editingEditor) {\n return;\n }\n if (table.stateManager.select.ranges?.length > 0) {\n if (navigator.clipboard?.read) {\n // 读取剪切板数据\n navigator.clipboard.read().then(clipboardItems => {\n for (const item of clipboardItems) {\n // 优先处理 html 格式数据\n if (item.types.includes('text/html')) {\n pasteHtmlToTable(item);\n } else if (item.types.length === 1 && item.types[0] === 'text/plain') {\n pasteTextToTable(item);\n } else {\n // 其他情况\n }\n }\n });\n } else {\n const ranges = table.stateManager.select.ranges;\n const col = Math.min(ranges[0].start.col, ranges[0].end.col);\n const row = Math.min(ranges[0].start.row, ranges[0].end.row);\n\n const clipboardData = e.clipboardData || window.Clipboard;\n const pastedData = clipboardData.getData('text');\n const rows = pastedData.split('\\n'); // 将数据拆分为行\n const values: (string | number)[][] = [];\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = [];\n values.push(rowValues);\n cells.forEach(function (cell: string, cellIndex: number) {\n // 去掉单元格数据末尾的 '\\r'\n if (cellIndex === cells.length - 1) {\n cell = cell.trim();\n }\n rowValues.push(cell);\n });\n });\n const changedCellResults = await (table as ListTableAPI).changeCellValues(col, row, values);\n if (table.hasListeners(TABLE_EVENT_TYPE.PASTED_DATA)) {\n table.fireListeners(TABLE_EVENT_TYPE.PASTED_DATA, {\n col,\n row,\n pasteData: values,\n changedCellResults\n });\n }\n }\n }\n }\n });\n\n handler.on(table.getElement(), 'contextmenu', (e: any) => {\n if (table.eventOptions?.preventDefaultContextMenu !== false) {\n e.preventDefault();\n } else {\n // default context menu will cause pointerup event can not trigger\n // call manually\n globalPointerupCallback(e);\n }\n });\n\n if (!table.options.canvas) {\n handler.on(table.getContainer(), 'resize', e => {\n if (table.isReleased) {\n return;\n }\n if (e.width === 0 && e.height === 0) {\n // 临时绕行解决因为display设置为none产生的问题\n return;\n }\n if (table.autoFillWidth || table.autoFillHeight) {\n table.editorManager?.completeEdit();\n }\n if (!isValid(table.options.pixelRatio)) {\n table.setPixelRatio(getPixelRatio());\n }\n if (!e.windowSizeNotChange) {\n table.resize();\n }\n });\n }\n\n // const regex = /<tr[^>]*>(.*?)<\\/tr>/gs; // 匹配<tr>标签及其内容\n const regex = /<tr[^>]*>([\\s\\S]*?)<\\/tr>/g; // for webpack3\n // const cellRegex = /<td[^>]*>(.*?)<\\/td>/gs; // 匹配<td>标签及其内容\n const cellRegex = /<td[^>]*>([\\s\\S]*?)<\\/td>/g; // for webpack3\n\n function pasteHtmlToTable(item: ClipboardItem) {\n const ranges = table.stateManager.select.ranges;\n const selectRangeLength = ranges.length;\n const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n let pasteValuesColCount = 0;\n let pasteValuesRowCount = 0;\n let values: (string | number)[][] = [];\n item.getType('text/html').then((blob: any) => {\n blob.text().then(async (pastedData: any) => {\n // 解析html数据\n if (pastedData && /(<table)|(<TABLE)/g.test(pastedData)) {\n // const matches = pastedData.matchAll(regex);\n const matches = Array.from(pastedData.matchAll(regex));\n for (const match of matches) {\n const rowContent = match[1]; // 获取<tr>标签中的内容\n const cellMatches: RegExpMatchArray[] = Array.from(rowContent.matchAll(cellRegex)); // 获取<td>标签中的内容\n const rowValues = cellMatches.map(cellMatch => {\n return (\n cellMatch[1]\n .replace(/(<(?!br)([^>]+)>)/gi, '') // 除了 <br> 标签以外的所有 HTML 标签都替换为空字符串\n .replace(/<br(\\s*|\\/)>[\\r\\n]?/gim, '\\n') // 将字符串中的 <br> 标签以及其后可能存在的空白字符和斜杠都替换为换行符 \\n\n // .replace(/<br>/g, '\\n') // 替换<br>标签为换行符\n // .replace(/<(?:.|\\n)*?>/gm, '') // 去除HTML标签\n //将字符串中的 HTML 实体字符转换为原始的字符\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&#9;/gi, '\\t')\n .replace(/&nbsp;/g, ' ')\n );\n // .trim(); // 去除首尾空格\n });\n values.push(rowValues);\n pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);\n }\n pasteValuesRowCount = values.length ?? 0;\n values = handlePasteValues(\n values,\n pasteValuesRowCount,\n pasteValuesColCount,\n maxRow - row + 1,\n maxCol - col + 1\n );\n\n const changedCellResults = await (table as ListTableAPI).changeCellValues(col, row, values, true);\n if (table.hasListeners(TABLE_EVENT_TYPE.PASTED_DATA)) {\n table.fireListeners(TABLE_EVENT_TYPE.PASTED_DATA, {\n col,\n row,\n pasteData: values,\n changedCellResults\n });\n }\n } else {\n navigator.clipboard.read().then(clipboardItems => {\n for (const item of clipboardItems) {\n if (item.types.includes('text/plain')) {\n item.getType('text/plain').then((blob: Blob) => {\n blob.text().then(_pasteValue);\n });\n }\n }\n });\n }\n });\n });\n }\n\n async function _pasteValue(pastedData: string) {\n const ranges = table.stateManager.select.ranges;\n const selectRangeLength = ranges.length;\n const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n let pasteValuesColCount = 0;\n let pasteValuesRowCount = 0;\n let values: (string | number)[][] = [];\n const rows = pastedData.split('\\n'); // 将数据拆分为行\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = [];\n values.push(rowValues);\n cells.forEach(function (cell: string, cellIndex: number) {\n // 去掉单元格数据末尾的 '\\r'\n if (cellIndex === cells.length - 1) {\n cell = cell.trim();\n }\n rowValues.push(cell);\n });\n pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);\n });\n pasteValuesRowCount = values.length ?? 0;\n values = handlePasteValues(values, pasteValuesRowCount, pasteValuesColCount, maxRow - row + 1, maxCol - col + 1);\n const changedCellResults = await (table as ListTableAPI).changeCellValues(col, row, values, true);\n if (table.hasListeners(TABLE_EVENT_TYPE.PASTED_DATA)) {\n table.fireListeners(TABLE_EVENT_TYPE.PASTED_DATA, {\n col,\n row,\n pasteData: values,\n changedCellResults\n });\n }\n }\n function pasteTextToTable(item: ClipboardItem) {\n // 如果只有 'text/plain'\n const ranges = table.stateManager.select.ranges;\n const selectRangeLength = ranges.length;\n const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);\n const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);\n let pasteValuesColCount = 0;\n let pasteValuesRowCount = 0;\n // const values: (string | number)[][] = [];\n item.getType('text/plain').then((blob: any) => {\n blob.text().then(async (pastedData: any) => {\n const rows = pastedData.replace(/\\r(?!\\n)/g, '\\r\\n').split('\\r\\n'); // 文本中的换行符格式进行统一处理\n let values: (string | number)[][] = [];\n if (rows.length > 1 && rows[rows.length - 1] === '') {\n rows.pop();\n }\n rows.forEach(function (rowCells: any, rowIndex: number) {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = [];\n values.push(rowValues);\n cells.forEach(function (cell: string, cellIndex: number) {\n if (cell.includes('\\n')) {\n cell = cell\n .replace(/^\"(.*)\"$/, '$1') // 将字符串开头和结尾的双引号去除,并保留双引号内的内容\n .replace(/[\"]*/g, match => new Array(Math.floor(match.length / 2)).fill('\"').join('')); // 连续出现的双引号替换为一半数量的双引号\n }\n rowValues.push(cell);\n });\n pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);\n });\n pasteValuesRowCount = values.length ?? 0;\n values = handlePasteValues(\n values,\n pasteValuesRowCount,\n pasteValuesColCount,\n maxRow - row + 1,\n maxCol - col + 1\n );\n const changedCellResults = await (table as ListTableAPI).changeCellValues(col, row, values, true);\n if (table.hasListeners(TABLE_EVENT_TYPE.PASTED_DATA)) {\n table.fireListeners(TABLE_EVENT_TYPE.PASTED_DATA, {\n col,\n row,\n pasteData: values,\n changedCellResults\n });\n }\n });\n });\n }\n function handlePasteValues(\n values: (string | number)[][],\n rowCount: number,\n colCount: number,\n selectedRowCount: number,\n selectedColCount: number\n ) {\n if (selectedColCount > colCount || selectedRowCount > rowCount) {\n if (selectedColCount % colCount === 0 && selectedRowCount % rowCount === 0) {\n const toPasteValues: (string | number)[][] = [];\n // 在目标区域中循环遍历,将复制的值逐个粘贴到每个单元格中\n for (let i = 0; i < selectedRowCount; i++) {\n const rowPasteValue: (string | number)[] = [];\n toPasteValues.push(rowPasteValue);\n for (let j = 0; j < selectedColCount; j++) {\n const copiedRow = i % rowCount;\n const copiedCol = j % colCount;\n rowPasteValue.push(values[copiedRow][copiedCol]);\n }\n }\n return toPasteValues;\n }\n return values;\n }\n return values;\n }\n // 有被阻止冒泡的场景 就触发不到这里的事件了 所以这个LastBodyPointerXY变量的赋值在scrollbar的down事件也进行了处理\n const globalPointerdownCallback = (e: MouseEvent) => {\n if (table.isReleased) {\n return;\n }\n // console.log('body pointerdown');\n table.eventManager.LastBodyPointerXY = { x: e.x, y: e.y };\n table.eventManager.isDown = true;\n\n const target = e.target as HTMLElement;\n if (!table.getElement().contains(target) && !table.internalProps.menuHandler.containElement(target)) {\n // 如果点击到表格外部的dom\n const isCompleteEdit = (table as ListTableAPI).editorManager?.completeEdit(e);\n getPromiseValue<boolean>(isCompleteEdit, isCompleteEdit => {\n if (isCompleteEdit === false) {\n // 如果没有正常退出编辑状态 则不执行下面的逻辑 如选择其他单元格的逻辑\n return;\n }\n //点击到表格外部不需要取消选中状态\n if (table.options.select?.outsideClickDeselect) {\n const isHasSelected = !!stateManager.select.ranges?.length;\n eventManager.dealTableSelect();\n stateManager.endSelectCells(true, isHasSelected);\n }\n });\n }\n };\n eventManager.globalEventListeners.push({\n name: 'pointerdown',\n env: 'vglobal',\n callback: globalPointerdownCallback\n });\n vglobal.addEventListener('pointerdown', globalPointerdownCallback);\n\n const globalPointerupOutsideCallback = (e: MouseEvent) => {\n // console.log('pointerupoutside');\n // const eventArgsSet: SceneEvent = getCellEventArgsSet(e);\n if (stateManager.menu.isShow) {\n setTimeout(() => {\n // conside page scroll\n if (!table.internalProps.menuHandler.pointInMenuElement(e.clientX, e.clientY)) {\n stateManager.menu.isShow && stateManager.hideMenu();\n }\n }, 0);\n }\n // 同pointerup中的逻辑\n if (stateManager.isResizeCol()) {\n endResizeCol(table);\n } else if (stateManager.isResizeRow()) {\n endResizeRow(table);\n } else if (stateManager.isMoveCol()) {\n const endMoveColSuccess = table.stateManager.endMoveCol();\n fireMoveColEventListeners(table, endMoveColSuccess, e);\n } else if (stateManager.isSelecting()) {\n if (table.stateManager.select?.ranges?.length) {\n const lastCol = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end.col;\n const lastRow = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end.row;\n table.stateManager.endSelectCells();\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END)) {\n const cellsEvent: MousePointerMultiCellEvent = {\n event: e,\n cells: [],\n col: lastCol,\n row: lastRow,\n scaleRatio: table.canvas.getBoundingClientRect().width / table.canvas.offsetWidth,\n target: undefined\n };\n cellsEvent.cells = table.getSelectedCellInfos();\n table.fireListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END, cellsEvent);\n }\n }\n }\n };\n\n const globalPointerupCallback = (e: MouseEvent) => {\n if (table.isReleased) {\n return;\n }\n const target = e.target as HTMLElement;\n\n if (target !== table.canvas) {\n globalPointerupOutsideCallback(e);\n }\n\n table.eventManager.LastBodyPointerXY = null;\n // console.log('body pointerup', table.eventManager.isDown, table.eventManager.isDraging);\n table.eventManager.isDown = false;\n table.eventManager.isDraging = false;\n table.eventManager.inertiaScroll.endInertia();\n if (stateManager.interactionState === 'grabing' && stateManager.isResizeCol()) {\n endResizeCol(table);\n } else if (stateManager.interactionState === 'grabing' && stateManager.isResizeRow()) {\n endResizeRow(table);\n } else if (stateManager.isMoveCol()) {\n const endMoveColSuccess = table.stateManager.endMoveCol();\n fireMoveColEventListeners(table, endMoveColSuccess, e);\n } else if (table.editorManager?.editingEditor) {\n if (!table.getElement().contains(target)) {\n // 如果点击到表格外部的dom\n const isCompleteEdit = (table as ListTableAPI).editorManager?.completeEdit(e);\n getPromiseValue<boolean>(isCompleteEdit, (isCompleteEdit: boolean) => {\n if (isCompleteEdit === false) {\n // 如果没有正常退出编辑状态 则不执行下面的逻辑 如选择其他单元格的逻辑\n return;\n }\n stateManager.updateInteractionState(InteractionState.default);\n eventManager.dealTableHover();\n });\n }\n }\n stateManager.updateInteractionState(InteractionState.default);\n };\n eventManager.globalEventListeners.push({\n name: 'pointerup',\n env: 'vglobal',\n callback: globalPointerupCallback\n });\n vglobal.addEventListener('pointerup', globalPointerupCallback);\n\n const globalPointermoveCallback = (e: MouseEvent) => {\n if (table.eventManager.isDown && table.eventManager.LastBodyPointerXY) {\n const lastX = table.eventManager.LastBodyPointerXY?.x ?? e.x;\n const lastY = table.eventManager.LastBodyPointerXY?.y ?? e.y;\n if (Math.abs(lastX - e.x) > 1 || Math.abs(lastY - e.y) > 1) {\n table.eventManager.isDraging = true;\n }\n }\n // 注释掉。因为: 这里pointermove太敏感了 点击快的时候 可能动了1px这里也会执行到 就影响到下面选中不触发的问题。下面pointermove就有这段逻辑,这里先去掉\n // if (eventManager.touchSetTimeout) {\n // clearTimeout(eventManager.touchSetTimeout);\n // console.log('eventManager.touchSetTimeout', eventManager.touchSetTimeout);\n // eventManager.touchSetTimeout = undefined;\n // }\n // const eventArgsSet = getCellEventArgsSet(e);\n const { x, y } = table._getMouseAbstractPoint(e);\n // if (stateManager.interactionState === InteractionState.scrolling) {\n // return;\n // }\n if (stateManager.interactionState === InteractionState.grabing) {\n if (stateManager.isResizeCol()) {\n eventManager.dealColumnResize(x, y);\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.RESIZE_COLUMN)) {\n table.fireListeners(TABLE_EVENT_TYPE.RESIZE_COLUMN, {\n col: table.stateManager.columnResize.col,\n colWidth: table.getColWidth(table.stateManager.columnResize.col)\n });\n }\n } else if (stateManager.isResizeRow()) {\n eventManager.dealRowResize(x, y);\n if ((table as any).hasListeners(TABLE_EVENT_TYPE.RESIZE_ROW)) {\n table.fireListeners(TABLE_EVENT_TYPE.RESIZE_ROW, {\n row: table.stateManager.rowResize.row,\n rowHeight: table.getRowHeight(table.stateManager.rowResize.row)\n });\n }\n }\n }\n const isSelecting = table.stateManager.isSelecting();\n\n if (\n eventManager._enableTableScroll &&\n eventManager.isDraging &&\n isSelecting &&\n table.stateManager.select.ranges?.length > 0\n ) {\n // 检测鼠标是否离开了table\n const drawRange = table.getDrawRange();\n // const element = table.getElement();\n // const { x: rootLeft, y: rootTop, width: rootWidth } = element.getBoundingClientRect();\n // const tableLeft = drawRange.left + rootLeft;\n // const tableTop = drawRange.top + rootTop;\n // const tableRight = tableLeft + drawRange.width;\n // const tableBottom = tableTop + drawRange.height;\n // console.log('x, y', x, y);\n const topFrozenRowHeight = table.getFrozenRowsHeight();\n const bottomFrozenRowHeight = table.getBottomFrozenRowsHeight();\n const leftFrozenColsWidth = table.getFrozenColsWidth();\n const rightFrozenColsWidth = table.getRightFrozenColsWidth();\n const startCell = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].start;\n if (table.isSeriesNumber(startCell.col, startCell.row)) {\n //如果是鼠标落到了序号列 不自动滚动\n return;\n }\n const endCell = table.stateManager.select.ranges[table.stateManager.select.ranges.length - 1].end;\n const canScrollY =\n (table.isFrozenRow(startCell.row) === false || table.isFrozenRow(endCell.row) === false) &&\n table.getAllRowsHeight() > table.tableNoFrameHeight;\n const canScrollX =\n (table.isFrozenColumn(startCell.col) === false || table.isFrozenColumn(endCell.col) === false) &&\n table.getAllColsWidth() > table.tableNoFrameWidth;\n if (\n ((y > drawRange.bottom - bottomFrozenRowHeight || y < drawRange.top + topFrozenRowHeight) && canScrollY) ||\n ((x > drawRange.right - rightFrozenColsWidth || x < drawRange.left + leftFrozenColsWidth) && canScrollX)\n ) {\n table.eventManager.scrollXSpeed = 0;\n table.eventManager.scrollYSpeed = 0;\n let bottom = false;\n let top = false;\n let right = false;\n let left = false;\n if (\n y > drawRange.bottom - bottomFrozenRowHeight &&\n canScrollY &&\n table.scrollTop + table.tableNoFrameHeight < table.getAllRowsHeight()\n ) {\n bottom = true;\n table.eventManager.scrollYSpeed = -(y - drawRange.bottom + bottomFrozenRowHeight) / 50;\n } else if (y < drawRange.top + topFrozenRowHeight && canScrollY && table.scrollTop > 0) {\n top = true;\n table.eventManager.scrollYSpeed = -(y - drawRange.top - topFrozenRowHeight) / 50;\n }\n\n if (\n x > drawRange.right - rightFrozenColsWidth &&\n canScrollX &&\n table.scrollLeft + table.tableNoFrameWidth < table.getAllColsWidth()\n ) {\n right = true;\n table.eventManager.scrollXSpeed = -(x - drawRange.right + rightFrozenColsWidth) / 50;\n } else if (x < drawRange.left + leftFrozenColsWidth && canScrollX && table.scrollLeft > 0) {\n left = true;\n table.eventManager.scrollXSpeed = -(x - drawRange.left - leftFrozenColsWidth) / 50;\n }\n table.eventManager.inertiaScroll.startInertia(\n table.eventManager.scrollXSpeed,\n table.eventManager.scrollYSpeed,\n 1\n );\n table.eventManager.inertiaScroll.setScrollHandle((dx: number, dy: number) => {\n handleWhell({ deltaX: -dx, deltaY: -dy } as any, table.stateManager, false);\n\n let selectX: number;\n let selectY: number;\n\n if (bottom) {\n selectY = table.scrollTop + drawRange.height - bottomFrozenRowHeight - 20;\n } else if (top) {\n selectY = table.scrollTop + topFrozenRowHeight + 20;\n }\n\n if (right) {\n selectX = table.scrollLeft + drawRange.width - rightFrozenColsWidth - 20;\n } else if (left) {\n selectX = table.scrollLeft + leftFrozenColsWidth + 20;\n }\n\n let considerFrozenY = false;\n let considerFrozenX = false;\n if (!right && !left) {\n if (\n (x > table.tableNoFrameWidth - table.getRightFrozenColsWidth() && x < table.tableNoFrameWidth) ||\n (x > 0 && x < table.getFrozenColsWidth())\n ) {\n selectX = x;\n considerFrozenX = true;\n } else {\n selectX = table.scrollLeft + x;\n }\n }\n if (!bottom && !top) {\n if (\n (y > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight() && y < table.tableNoFrameHeight) ||\n (y > 0 && y < table.getFrozenRowsHeight())\n ) {\n selectY = y;\n considerFrozenY = true;\n } else {\n selectY = table.scrollTop + y;\n }\n }\n table.stateManager.updateInteractionState(InteractionState.grabing);\n const targetCol = table.getTargetColAtConsiderRightFrozen(selectX, considerFrozenX);\n const targetRow = table.getTargetRowAtConsiderBottomFrozen(selectY, considerFrozenY);\n if (!table.options.select?.disableDragSelect && isValid(targetCol) && isValid(targetRow)) {\n table.stateManager.updateSelectPos(targetCol.col, targetRow.row, false, false, false, false);\n }\n });\n } else if (table.eventManager.inertiaScroll.isInertiaScrolling()) {\n table.eventManager.inertiaScroll.endInertia();\n } else {\n table.eventManager.scrollYSpeed = 0;\n }\n }\n };\n eventManager.globalEventListeners.push({\n name: 'pointermove',\n env: 'vglobal',\n callback: globalPointermoveCallback\n });\n vglobal.addEventListener('pointermove', globalPointermoveCallback);\n}\n"]}
@@ -191,7 +191,7 @@ function bindTableGroupListener(eventManager) {
191
191
  }
192
192
  }));
193
193
  })), table.scenegraph.tableGroup.addEventListener("pointerup", (e => {
194
- var _a, _b, _c, _d;
194
+ var _a, _b, _c, _d, _e, _f, _g, _h;
195
195
  if (0 === e.button) {
196
196
  if ("grabing" === stateManager.interactionState) {
197
197
  if (stateManager.updateInteractionState(ts_types_1.InteractionState.default), stateManager.isResizeCol()) endResizeCol(table); else if (stateManager.isResizeRow()) endResizeRow(table); else if (stateManager.isMoveCol()) {
@@ -214,14 +214,38 @@ function bindTableGroupListener(eventManager) {
214
214
  }
215
215
  }
216
216
  } else stateManager.interactionState === ts_types_1.InteractionState.scrolling && stateManager.updateInteractionState(ts_types_1.InteractionState.default);
217
+ if (!table.eventManager.isDraging) {
218
+ const eventArgsSet = (0, util_1.getCellEventArgsSet)(e);
219
+ if (!eventManager.isTouchMove && 0 === e.button && eventArgsSet.eventArgs && table.hasListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.CLICK_CELL)) {
220
+ const {col: col, row: row} = eventArgsSet.eventArgs, cellInfo = table.getCellInfo(col, row);
221
+ let icon, position;
222
+ if (null === (_c = eventArgsSet.eventArgs) || void 0 === _c ? void 0 : _c.target) {
223
+ const iconInfo = (0, icon_1.getIconAndPositionFromTarget)(null === (_d = eventArgsSet.eventArgs) || void 0 === _d ? void 0 : _d.target);
224
+ iconInfo && (icon = iconInfo.icon, position = iconInfo.position);
225
+ }
226
+ const cellsEvent = Object.assign(Object.assign({}, cellInfo), {
227
+ event: e.nativeEvent,
228
+ federatedEvent: e,
229
+ cells: [],
230
+ targetIcon: icon ? {
231
+ name: icon.name,
232
+ position: position,
233
+ funcType: icon.attribute.funcType
234
+ } : void 0,
235
+ target: null === (_e = null == eventArgsSet ? void 0 : eventArgsSet.eventArgs) || void 0 === _e ? void 0 : _e.target,
236
+ mergeCellInfo: null === (_f = eventArgsSet.eventArgs) || void 0 === _f ? void 0 : _f.mergeInfo
237
+ });
238
+ table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.CLICK_CELL, cellsEvent);
239
+ }
240
+ }
217
241
  if (table.hasListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.MOUSEUP_CELL)) {
218
242
  const eventArgsSet = (0, util_1.getCellEventArgsSet)(e);
219
243
  eventArgsSet.eventArgs && table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.MOUSEUP_CELL, {
220
244
  col: eventArgsSet.eventArgs.col,
221
245
  row: eventArgsSet.eventArgs.row,
222
246
  event: e.nativeEvent,
223
- target: null === (_c = null == eventArgsSet ? void 0 : eventArgsSet.eventArgs) || void 0 === _c ? void 0 : _c.target,
224
- mergeCellInfo: null === (_d = eventArgsSet.eventArgs) || void 0 === _d ? void 0 : _d.mergeInfo
247
+ target: null === (_g = null == eventArgsSet ? void 0 : eventArgsSet.eventArgs) || void 0 === _g ? void 0 : _g.target,
248
+ mergeCellInfo: null === (_h = eventArgsSet.eventArgs) || void 0 === _h ? void 0 : _h.mergeInfo
225
249
  });
226
250
  }
227
251
  setTimeout((() => {
@@ -230,7 +254,7 @@ function bindTableGroupListener(eventManager) {
230
254
  }), 0);
231
255
  }
232
256
  })), table.scenegraph.tableGroup.addEventListener("rightdown", (e => {
233
- var _a, _b, _c, _d;
257
+ var _a, _b, _c, _d, _e, _f;
234
258
  const eventArgsSet = (0, util_1.getCellEventArgsSet)(e);
235
259
  if (eventArgsSet.eventArgs) {
236
260
  stateManager.triggerContextMenu(eventArgsSet.eventArgs.col, eventArgsSet.eventArgs.row, eventArgsSet.abstractPos.x, eventArgsSet.abstractPos.y);
@@ -253,41 +277,21 @@ function bindTableGroupListener(eventManager) {
253
277
  target: null === (_c = null == eventArgsSet ? void 0 : eventArgsSet.eventArgs) || void 0 === _c ? void 0 : _c.target,
254
278
  mergeCellInfo: null === (_d = eventArgsSet.eventArgs) || void 0 === _d ? void 0 : _d.mergeInfo
255
279
  });
256
- (0, helper_1.cellInRanges)(table.stateManager.select.ranges, col, row) ? cellsEvent.cells = table.getSelectedCellInfos() : cellsEvent.cells = [ [ cellInfo ] ],
280
+ (null === (_f = null === (_e = table.options.eventOptions) || void 0 === _e ? void 0 : _e.contextmenuReturnAllSelectedCells) || void 0 === _f || _f) && ((0,
281
+ helper_1.cellInRanges)(table.stateManager.select.ranges, col, row) ? cellsEvent.cells = table.getSelectedCellInfos() : cellsEvent.cells = [ [ cellInfo ] ]),
257
282
  table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.CONTEXTMENU_CELL, cellsEvent);
258
283
  }
259
284
  }
260
285
  })), table.scenegraph.tableGroup.addEventListener("pointertap", (e => {
261
- var _a, _b, _c, _d, _e;
286
+ var _a;
262
287
  if (table.stateManager.columnResize.resizing) return;
263
288
  const eventArgsSet = (0, util_1.getCellEventArgsSet)(e);
264
- if (!eventManager.isTouchMove && 0 === e.button && eventArgsSet.eventArgs && table.hasListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.CLICK_CELL)) {
265
- const {col: col, row: row} = eventArgsSet.eventArgs, cellInfo = table.getCellInfo(col, row);
266
- let icon, position;
267
- if (null === (_a = eventArgsSet.eventArgs) || void 0 === _a ? void 0 : _a.target) {
268
- const iconInfo = (0, icon_1.getIconAndPositionFromTarget)(null === (_b = eventArgsSet.eventArgs) || void 0 === _b ? void 0 : _b.target);
269
- iconInfo && (icon = iconInfo.icon, position = iconInfo.position);
270
- }
271
- const cellsEvent = Object.assign(Object.assign({}, cellInfo), {
272
- event: e.nativeEvent,
273
- federatedEvent: e,
274
- cells: [],
275
- targetIcon: icon ? {
276
- name: icon.name,
277
- position: position,
278
- funcType: icon.attribute.funcType
279
- } : void 0,
280
- target: null === (_c = null == eventArgsSet ? void 0 : eventArgsSet.eventArgs) || void 0 === _c ? void 0 : _c.target,
281
- mergeCellInfo: null === (_d = eventArgsSet.eventArgs) || void 0 === _d ? void 0 : _d.mergeInfo
282
- });
283
- table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.CLICK_CELL, cellsEvent);
284
- }
285
289
  if (!table.stateManager.columnResize.resizing && !table.stateManager.columnMove.moving && (eventManager.dealIconClick(e, eventArgsSet),
286
290
  (null == eventArgsSet ? void 0 : eventArgsSet.eventArgs) && eventManager.touchSetTimeout && "touch" === e.pointerType)) {
287
291
  const eventArgsSet = (0, util_1.getCellEventArgsSet)(e);
288
292
  if (eventManager.touchSetTimeout) {
289
293
  clearTimeout(eventManager.touchSetTimeout);
290
- const isHasSelected = !!(null === (_e = stateManager.select.ranges) || void 0 === _e ? void 0 : _e.length);
294
+ const isHasSelected = !!(null === (_a = stateManager.select.ranges) || void 0 === _a ? void 0 : _a.length);
291
295
  eventManager.dealTableSelect(eventArgsSet), stateManager.endSelectCells(!0, isHasSelected),
292
296
  eventManager.touchSetTimeout = void 0;
293
297
  }