@visactor/vtable 1.26.7 → 1.26.8

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 (183) hide show
  1. package/cjs/ListTable.d.ts +1 -1
  2. package/cjs/ListTable.js +21 -13
  3. package/cjs/ListTable.js.map +1 -1
  4. package/cjs/PivotChart.js +16 -16
  5. package/cjs/PivotChart.js.map +1 -1
  6. package/cjs/PivotTable.d.ts +1 -1
  7. package/cjs/PivotTable.js +65 -63
  8. package/cjs/PivotTable.js.map +1 -1
  9. package/cjs/body-helper/body-helper.js +2 -1
  10. package/cjs/components/index.js +1 -2
  11. package/cjs/core/BaseTable.js +2 -2
  12. package/cjs/core/BaseTable.js.map +1 -1
  13. package/cjs/core/record-helper.d.ts +1 -1
  14. package/cjs/core/record-helper.js +60 -12
  15. package/cjs/core/record-helper.js.map +1 -1
  16. package/cjs/core/tableHelper.js +2 -1
  17. package/cjs/data/DataSource.d.ts +3 -1
  18. package/cjs/data/DataSource.js +71 -23
  19. package/cjs/data/DataSource.js.map +1 -1
  20. package/cjs/dataset/dataset.d.ts +9 -1
  21. package/cjs/dataset/dataset.js +344 -187
  22. package/cjs/dataset/dataset.js.map +1 -1
  23. package/cjs/event/event.d.ts +94 -8
  24. package/cjs/event/event.js +698 -191
  25. package/cjs/event/event.js.map +1 -1
  26. package/cjs/event/helper.js +1 -1
  27. package/cjs/event/media-click.js +4 -1
  28. package/cjs/event/media-click.js.map +1 -1
  29. package/cjs/event/scroll.js +1 -1
  30. package/cjs/event/sparkline-event.js +1 -2
  31. package/cjs/event/util.js +2 -2
  32. package/cjs/event/util.js.map +1 -1
  33. package/cjs/index.d.ts +1 -1
  34. package/cjs/index.js +1 -1
  35. package/cjs/index.js.map +1 -1
  36. package/cjs/layout/pivot-header-layout.js +33 -17
  37. package/cjs/layout/pivot-header-layout.js.map +1 -1
  38. package/cjs/plugins/custom-cell-style.js +1 -1
  39. package/cjs/plugins/index.js +2 -1
  40. package/cjs/plugins/interface.js +1 -1
  41. package/cjs/plugins/invert-highlight.js +1 -1
  42. package/cjs/plugins/list-tree-stick-cell.js +1 -1
  43. package/cjs/plugins/plugin-manager.js +1 -1
  44. package/cjs/scenegraph/group-creater/cell-helper.js +27 -10
  45. package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
  46. package/cjs/scenegraph/group-creater/cell-type/text-cell.d.ts +1 -1
  47. package/cjs/scenegraph/group-creater/cell-type/text-cell.js +14 -10
  48. package/cjs/scenegraph/group-creater/cell-type/text-cell.js.map +1 -1
  49. package/cjs/scenegraph/group-creater/progress/create-group-for-first-screen.js +17 -4
  50. package/cjs/scenegraph/group-creater/progress/create-group-for-first-screen.js.map +1 -1
  51. package/cjs/scenegraph/layout/compute-col-width.js +6 -1
  52. package/cjs/scenegraph/layout/compute-col-width.js.map +1 -1
  53. package/cjs/scenegraph/layout/compute-row-height.js +11 -3
  54. package/cjs/scenegraph/layout/compute-row-height.js.map +1 -1
  55. package/cjs/scenegraph/layout/update-height.d.ts +4 -3
  56. package/cjs/scenegraph/layout/update-height.js +43 -29
  57. package/cjs/scenegraph/layout/update-height.js.map +1 -1
  58. package/cjs/scenegraph/layout/update-width.d.ts +2 -1
  59. package/cjs/scenegraph/layout/update-width.js +49 -37
  60. package/cjs/scenegraph/layout/update-width.js.map +1 -1
  61. package/cjs/scenegraph/scenegraph.d.ts +2 -2
  62. package/cjs/scenegraph/scenegraph.js +6 -5
  63. package/cjs/scenegraph/scenegraph.js.map +1 -1
  64. package/cjs/scenegraph/utils/corner-custom-merge.d.ts +10 -0
  65. package/cjs/scenegraph/utils/corner-custom-merge.js +68 -0
  66. package/cjs/scenegraph/utils/corner-custom-merge.js.map +1 -0
  67. package/cjs/state/resize/update-resize-column.js +25 -13
  68. package/cjs/state/resize/update-resize-column.js.map +1 -1
  69. package/cjs/state/resize/update-resize-row.js +24 -12
  70. package/cjs/state/resize/update-resize-row.js.map +1 -1
  71. package/cjs/themes.d.ts +4 -2
  72. package/cjs/themes.js +12 -4
  73. package/cjs/themes.js.map +1 -1
  74. package/cjs/tools/get-data-path/create-dataset.js +4 -4
  75. package/cjs/tools/get-data-path/create-dataset.js.map +1 -1
  76. package/cjs/tools/get-data-path/index.js +4 -4
  77. package/cjs/tools/get-data-path/index.js.map +1 -1
  78. package/cjs/tools/style.d.ts +3 -1
  79. package/cjs/tools/style.js +2 -2
  80. package/cjs/tools/style.js.map +1 -1
  81. package/cjs/ts-types/common.d.ts +1 -0
  82. package/cjs/ts-types/common.js.map +1 -1
  83. package/cjs/ts-types/dataset/aggregation.d.ts +1 -0
  84. package/cjs/ts-types/dataset/aggregation.js +21 -3
  85. package/cjs/ts-types/dataset/aggregation.js.map +1 -1
  86. package/cjs/ts-types/new-data-set.d.ts +1 -0
  87. package/cjs/ts-types/new-data-set.js.map +1 -1
  88. package/cjs/ts-types/table-engine.d.ts +3 -2
  89. package/cjs/ts-types/table-engine.js.map +1 -1
  90. package/cjs/vrender.js.map +1 -1
  91. package/dist/vtable.js +2224 -779
  92. package/dist/vtable.min.js +1 -1
  93. package/es/ListTable.d.ts +1 -1
  94. package/es/ListTable.js +21 -15
  95. package/es/ListTable.js.map +1 -1
  96. package/es/PivotChart.js +16 -16
  97. package/es/PivotChart.js.map +1 -1
  98. package/es/PivotTable.d.ts +1 -1
  99. package/es/PivotTable.js +65 -63
  100. package/es/PivotTable.js.map +1 -1
  101. package/es/body-helper/body-helper.js +2 -1
  102. package/es/components/index.js +1 -2
  103. package/es/core/BaseTable.js +2 -2
  104. package/es/core/BaseTable.js.map +1 -1
  105. package/es/core/record-helper.d.ts +1 -1
  106. package/es/core/record-helper.js +60 -12
  107. package/es/core/record-helper.js.map +1 -1
  108. package/es/core/tableHelper.js +2 -1
  109. package/es/data/DataSource.d.ts +3 -1
  110. package/es/data/DataSource.js +70 -23
  111. package/es/data/DataSource.js.map +1 -1
  112. package/es/dataset/dataset.d.ts +9 -1
  113. package/es/dataset/dataset.js +341 -187
  114. package/es/dataset/dataset.js.map +1 -1
  115. package/es/event/event.d.ts +94 -8
  116. package/es/event/event.js +696 -191
  117. package/es/event/event.js.map +1 -1
  118. package/es/event/helper.js +1 -1
  119. package/es/event/media-click.js +4 -1
  120. package/es/event/media-click.js.map +1 -1
  121. package/es/event/scroll.js +1 -1
  122. package/es/event/sparkline-event.js +1 -2
  123. package/es/event/util.js +2 -2
  124. package/es/event/util.js.map +1 -1
  125. package/es/index.d.ts +1 -1
  126. package/es/index.js +1 -1
  127. package/es/index.js.map +1 -1
  128. package/es/layout/pivot-header-layout.js +29 -17
  129. package/es/layout/pivot-header-layout.js.map +1 -1
  130. package/es/plugins/custom-cell-style.js +1 -1
  131. package/es/plugins/index.js +2 -1
  132. package/es/plugins/interface.js +1 -1
  133. package/es/plugins/invert-highlight.js +1 -1
  134. package/es/plugins/list-tree-stick-cell.js +1 -1
  135. package/es/plugins/plugin-manager.js +1 -1
  136. package/es/scenegraph/group-creater/cell-helper.js +23 -9
  137. package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
  138. package/es/scenegraph/group-creater/cell-type/text-cell.d.ts +1 -1
  139. package/es/scenegraph/group-creater/cell-type/text-cell.js +13 -8
  140. package/es/scenegraph/group-creater/cell-type/text-cell.js.map +1 -1
  141. package/es/scenegraph/group-creater/progress/create-group-for-first-screen.js +17 -5
  142. package/es/scenegraph/group-creater/progress/create-group-for-first-screen.js.map +1 -1
  143. package/es/scenegraph/layout/compute-col-width.js +6 -1
  144. package/es/scenegraph/layout/compute-col-width.js.map +1 -1
  145. package/es/scenegraph/layout/compute-row-height.js +11 -3
  146. package/es/scenegraph/layout/compute-row-height.js.map +1 -1
  147. package/es/scenegraph/layout/update-height.d.ts +4 -3
  148. package/es/scenegraph/layout/update-height.js +40 -26
  149. package/es/scenegraph/layout/update-height.js.map +1 -1
  150. package/es/scenegraph/layout/update-width.d.ts +2 -1
  151. package/es/scenegraph/layout/update-width.js +46 -34
  152. package/es/scenegraph/layout/update-width.js.map +1 -1
  153. package/es/scenegraph/scenegraph.d.ts +2 -2
  154. package/es/scenegraph/scenegraph.js +7 -5
  155. package/es/scenegraph/scenegraph.js.map +1 -1
  156. package/es/scenegraph/utils/corner-custom-merge.d.ts +10 -0
  157. package/es/scenegraph/utils/corner-custom-merge.js +59 -0
  158. package/es/scenegraph/utils/corner-custom-merge.js.map +1 -0
  159. package/es/state/resize/update-resize-column.js +19 -10
  160. package/es/state/resize/update-resize-column.js.map +1 -1
  161. package/es/state/resize/update-resize-row.js +19 -9
  162. package/es/state/resize/update-resize-row.js.map +1 -1
  163. package/es/themes.d.ts +4 -2
  164. package/es/themes.js +11 -3
  165. package/es/themes.js.map +1 -1
  166. package/es/tools/get-data-path/create-dataset.js +4 -4
  167. package/es/tools/get-data-path/create-dataset.js.map +1 -1
  168. package/es/tools/get-data-path/index.js +4 -4
  169. package/es/tools/get-data-path/index.js.map +1 -1
  170. package/es/tools/style.d.ts +3 -1
  171. package/es/tools/style.js +2 -2
  172. package/es/tools/style.js.map +1 -1
  173. package/es/ts-types/common.d.ts +1 -0
  174. package/es/ts-types/common.js.map +1 -1
  175. package/es/ts-types/dataset/aggregation.d.ts +1 -0
  176. package/es/ts-types/dataset/aggregation.js +21 -3
  177. package/es/ts-types/dataset/aggregation.js.map +1 -1
  178. package/es/ts-types/new-data-set.d.ts +1 -0
  179. package/es/ts-types/new-data-set.js.map +1 -1
  180. package/es/ts-types/table-engine.d.ts +3 -2
  181. package/es/ts-types/table-engine.js.map +1 -1
  182. package/es/vrender.js.map +1 -1
  183. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/event/event.ts"],"names":[],"mappings":"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","file":"event.js","sourcesContent":["// import { FederatedPointerEvent } from '@src/vrender';\nimport type { FederatedPointerEvent, Gesture, IEventTarget } from './../vrender';\nimport { RichText, vglobal } from './../vrender';\nimport type { CellInfo, CellRange, ListTableAPI, ListTableConstructorOptions } from '../ts-types';\nimport { IconFuncTypeEnum } from '../ts-types';\nimport type { StateManager } from '../state/state';\nimport type { Group } from '../scenegraph/graphic/group';\nimport { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport type { Icon } from '../scenegraph/graphic/icon';\nimport { checkCellInSelect } from '../state/common/check-in-select';\nimport { bindMediaClick } from './media-click';\nimport { bindDrillEvent, checkHaveDrill, drillClick } from './drill';\nimport { bindSparklineHoverEvent } from './sparkline-event';\nimport type { BaseTableAPI, ListTableProtected } from '../ts-types/base-table';\nimport { checkHaveTextStick, handleTextStick } from '../scenegraph/stick-text';\nimport { bindGesture, bindTableGroupListener } from './listener/table-group';\nimport { bindScrollBarListener } from './listener/scroll-bar';\nimport { bindContainerDomListener } from './listener/container-dom';\nimport { bindTouchListener } from './listener/touch';\nimport { getCellEventArgsSet, setDataToHTML, type SceneEvent } from './util';\nimport { bindAxisClickEvent } from './self-event-listener/pivot-chart/axis-click';\nimport { bindAxisHoverEvent } from './self-event-listener/pivot-chart/axis-hover';\nimport type { PivotTable } from '../PivotTable';\nimport { Env } from '../tools/env';\nimport type { ListTable } from '../ListTable';\nimport { isValid } from '@visactor/vutils';\nimport { InertiaScroll } from './scroll';\nimport { isCellDisableSelect } from '../state/select/is-cell-select-highlight';\nimport {\n bindGroupCheckboxTreeChange,\n bindGroupTitleCheckboxChange,\n bindHeaderCheckboxChange\n} from './self-event-listener/list-table/checkbox';\nimport { bindButtonClickEvent } from './component/button';\nimport { bindIconClickEvent } from './self-event-listener/base-table/icon';\nimport { bindDropdownMenuEvent } from './self-event-listener/base-table/dropdown-menu';\nimport { bindDBClickAutoColumnWidthEvent } from './self-event-listener/base-table/dbclick-auto-column-width';\nimport { browser } from '../tools/helper';\nimport { clearActiveCellRangeState, setActiveCellRangeState } from '../tools/style';\n\nexport class EventManager {\n table: BaseTableAPI;\n // _col: number;\n // _resizing: boolean = false;\n // /** 为了能够判断canvas mousedown 事件 以阻止事件冒泡 */\n // isPointerDownOnTable: boolean = false;\n isTouchdown: boolean; // touch scrolling mode on\n isTouchMove: boolean; // touchmove 事件中设置\n touchMovePoints: {\n x: number;\n y: number;\n timestamp: number;\n }[]; // touch points record in touch scrolling mode\n touchSetTimeout: any; // touch start timeout, use to distinguish touch scrolling mode and default touch event\n touchEnd: boolean; // is touch event end when default touch event listener response\n /** 是在touchSetTimeout中设置的true 延迟了500ms 如果在500ms内接入了touch事件 则取消touchSetTimeout逻辑 也就是不会将touchMode设置为true。这个是longTouch的逻辑 */\n isLongTouch: boolean; // is touch listener working, use to disable document touch scrolling function\n gesture: Gesture;\n handleTextStickBindId: number[];\n\n //鼠标事件记录。 PointerMove敏感度太高了 记录下上一个鼠标位置 在接收到PointerMove事件时做判断 是否到到触发框选或者移动表头操作的标准,防止误触\n LastPointerXY: { x: number; y: number };\n LastBodyPointerXY: { x: number; y: number };\n isDown = false;\n isDraging = false;\n scrollYSpeed: number;\n scrollXSpeed: number;\n downIcon: IEventTarget; // 记录鼠标按下的sicon\n //报错已绑定过的事件 后续清除绑定\n globalEventListeners: {\n name: string;\n env: 'document' | 'body' | 'window' | 'vglobal';\n callback: (e?: any) => void;\n }[] = [];\n inertiaScroll: InertiaScroll;\n\n bindSparklineHoverEvent: boolean;\n\n _enableTableScroll: boolean = true;\n /** 剪切后等待粘贴 */\n cutWaitPaste: boolean = false;\n private clipboardCheckTimer: number | null = null; // 剪贴板检测定时器\n private cutOperationTime: number = 0; // 记录剪切操作的时间\n lastClipboardContent: string = ''; // 最后一次复制/剪切的内容\n cutCellRange: CellInfo[][] | null = null;\n cutRanges: CellRange[] | null = null;\n /** 复制时的源位置信息(用于公式相对引用调整) */\n copySourceRange: { startCol: number; startRow: number } | null = null;\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.handleTextStickBindId = [];\n this.inertiaScroll = new InertiaScroll(table.stateManager);\n if (Env.mode === 'node' || table.options.disableInteraction) {\n return;\n }\n this.bindOuterEvent();\n setTimeout(() => {\n this.bindSelfEvent();\n }, 0);\n }\n\n // 绑定DOM事件\n bindOuterEvent() {\n bindTableGroupListener(this);\n bindContainerDomListener(this);\n bindScrollBarListener(this);\n bindTouchListener(this);\n bindGesture(this);\n }\n updateEventBinder() {\n setTimeout(() => {\n if (this.table.isReleased) {\n return;\n }\n\n // 处理textStick 是否绑定SCROLL的判断\n if (checkHaveTextStick(this.table) && this.handleTextStickBindId?.length === 0) {\n this.handleTextStickBindId.push(\n this.table.on(TABLE_EVENT_TYPE.SCROLL, e => {\n handleTextStick(this.table);\n })\n );\n\n this.handleTextStickBindId.push(\n this.table.on(TABLE_EVENT_TYPE.RESIZE_COLUMN_END, e => {\n handleTextStick(this.table);\n })\n );\n this.handleTextStickBindId.push(\n this.table.on(TABLE_EVENT_TYPE.RESIZE_ROW_END, e => {\n handleTextStick(this.table);\n })\n );\n } else if (!checkHaveTextStick(this.table) && this.handleTextStickBindId) {\n this.handleTextStickBindId.forEach(id => {\n this.table.off(id);\n });\n this.handleTextStickBindId = [];\n }\n\n // chart hover\n bindSparklineHoverEvent(this.table);\n }, 0);\n }\n bindSelfEvent() {\n if (this.table.isReleased) {\n return;\n }\n\n // 图标点击\n bindIconClickEvent(this.table);\n\n // 下拉菜单内容点击\n bindDropdownMenuEvent(this.table);\n\n // 处理textStick\n // if (checkHaveTextStick(this.table)) {\n // this.handleTextStickBindId = this.table.on(TABLE_EVENT_TYPE.SCROLL, e => {\n // handleTextStick(this.table);\n // });\n // }\n this.updateEventBinder();\n\n // link/image/video点击\n bindMediaClick(this.table);\n\n // 双击自动列宽\n bindDBClickAutoColumnWidthEvent(this.table);\n\n // drill icon\n if (this.table.isPivotTable() && checkHaveDrill(this.table as PivotTable)) {\n bindDrillEvent(this.table);\n }\n\n // chart hover\n bindSparklineHoverEvent(this.table);\n\n // axis click\n bindAxisClickEvent(this.table);\n\n // chart axis event\n bindAxisHoverEvent(this.table);\n\n // group title checkbox change\n bindGroupTitleCheckboxChange(this.table);\n // checkbox and titlr change\n bindGroupCheckboxTreeChange(this.table as ListTable);\n // header checkbox change\n bindHeaderCheckboxChange(this.table);\n\n // button click\n bindButtonClickEvent(this.table);\n }\n\n dealTableHover(eventArgsSet?: SceneEvent) {\n if (!eventArgsSet) {\n this.table.stateManager.updateHoverPos(-1, -1);\n return;\n }\n const { eventArgs } = eventArgsSet;\n\n if (eventArgs) {\n this.table.stateManager.updateHoverPos(eventArgs.col, eventArgs.row);\n } else {\n this.table.stateManager.updateHoverPos(-1, -1);\n }\n }\n\n dealIconHover(eventArgsSet: SceneEvent) {\n const { eventArgs } = eventArgsSet;\n\n if (eventArgs) {\n this.table.stateManager.updateHoverIcon(eventArgs.col, eventArgs.row, eventArgs.target, eventArgs.targetCell);\n } else {\n this.table.stateManager.updateHoverIcon(-1, -1, undefined, undefined);\n }\n }\n\n dealMenuHover(eventArgsSet: SceneEvent) {\n // menu自身状态实现\n }\n\n dealTableSelect(eventArgsSet?: SceneEvent, isSelectMoving?: boolean): boolean {\n if (!eventArgsSet) {\n this.table.stateManager.updateSelectPos(-1, -1);\n return false;\n }\n const { eventArgs } = eventArgsSet;\n\n if (eventArgs) {\n if (\n eventArgs.target.name === 'checkbox' ||\n eventArgs.target.name === 'radio' ||\n eventArgs.target.name === 'switch' ||\n eventArgs.target.name === 'button'\n ) {\n return false;\n }\n\n // // 注意:如果启用下面这句代码逻辑 则在点击选中单元格时失效hover效果。但是会导致chart实例的click事件失效,所以先特殊处理这个逻辑\n // if (\n // !this.table.isPivotChart() &&\n // eventArgsSet?.eventArgs?.target.type !== 'chart' &&\n // eventArgs.event.pointerType !== 'touch'\n // ) {\n // this.table.stateManager.updateHoverPos(-1, -1);\n // }\n\n if (\n this.table.isHeader(eventArgs.col, eventArgs.row) &&\n isCellDisableSelect(this.table, eventArgs.col, eventArgs.row)\n ) {\n if (!isSelectMoving) {\n // 如果是点击点表头 取消单元格选中状态\n this.table.stateManager.updateSelectPos(-1, -1);\n }\n return false;\n } else if (\n !this.table.isHeader(eventArgs.col, eventArgs.row) &&\n isCellDisableSelect(this.table, eventArgs.col, eventArgs.row)\n ) {\n if (!isSelectMoving) {\n const isHasSelected = !!this.table.stateManager.select.ranges?.length;\n this.table.stateManager.updateSelectPos(-1, -1);\n if (isHasSelected) {\n this.table.stateManager.endSelectCells(true, isHasSelected);\n }\n }\n return false;\n }\n\n if (\n this.table.isPivotChart() &&\n (eventArgsSet?.eventArgs?.target.name === 'axis-label' || eventArgsSet?.eventArgs?.target.type === 'chart')\n ) {\n // 点击透视图坐标轴标签或图标内容,执行图表状态更新,不触发Select\n this.table.stateManager.updateSelectPos(-1, -1);\n return false;\n }\n const shiftMultiSelect = this.table.keyboardOptions?.shiftMultiSelect ?? true;\n const ctrlMultiSelect = this.table.keyboardOptions?.ctrlMultiSelect ?? true;\n this.table.stateManager.updateSelectPos(\n this.table.stateManager.select.selectInline === 'row' ? this.table.colCount - 1 : eventArgs.col,\n this.table.stateManager.select.selectInline === 'col' ? this.table.rowCount - 1 : eventArgs.row,\n eventArgs.event.shiftKey && shiftMultiSelect,\n (eventArgs.event.ctrlKey || eventArgs.event.metaKey) && ctrlMultiSelect,\n false,\n isSelectMoving ? false : this.table.options.select?.makeSelectCellVisible ?? true\n );\n\n return true;\n }\n // this.table.stateManager.updateSelectPos(-1, -1); 这句有问题 如drag框选鼠标超出表格范围 这里就直接情况是不对的\n return false;\n }\n dealFillSelect(eventArgsSet?: SceneEvent, isSelectMoving?: boolean): boolean {\n const { eventArgs } = eventArgsSet;\n\n if (eventArgs) {\n if (this.table.stateManager.select?.ranges?.length && this.table.stateManager.isFillHandle()) {\n let updateRow;\n let updateCol;\n const currentRange = this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1];\n if (isSelectMoving) {\n if (!isValid(this.table.stateManager.fillHandle.directionRow)) {\n if (\n Math.abs(this.table.stateManager.fillHandle.startY - eventArgsSet.abstractPos.y) >=\n Math.abs(this.table.stateManager.fillHandle.startX - eventArgsSet.abstractPos.x)\n ) {\n this.table.stateManager.fillHandle.directionRow = true;\n } else {\n this.table.stateManager.fillHandle.directionRow = false;\n }\n }\n\n if (\n Math.abs(this.table.stateManager.fillHandle.startY - eventArgsSet.abstractPos.y) >=\n Math.abs(this.table.stateManager.fillHandle.startX - eventArgsSet.abstractPos.x)\n ) {\n if (this.table.stateManager.fillHandle.startY - eventArgsSet.abstractPos.y > 0) {\n this.table.stateManager.fillHandle.direction = 'top';\n } else {\n this.table.stateManager.fillHandle.direction = 'bottom';\n }\n } else {\n if (this.table.stateManager.fillHandle.startX - eventArgsSet.abstractPos.x > 0) {\n this.table.stateManager.fillHandle.direction = 'left';\n } else {\n this.table.stateManager.fillHandle.direction = 'right';\n }\n }\n if (this.table.stateManager.fillHandle.directionRow) {\n updateRow = eventArgs.row;\n updateCol = currentRange.end.col;\n } else {\n updateRow = currentRange.end.row;\n updateCol = eventArgs.col;\n }\n }\n const ctrlMultiSelect = this.table.keyboardOptions?.ctrlMultiSelect ?? true;\n\n this.table.stateManager.updateSelectPos(\n isSelectMoving ? updateCol : currentRange.end.col,\n isSelectMoving ? updateRow : currentRange.end.row,\n true,\n (eventArgs.event.ctrlKey || eventArgs.event.metaKey) && ctrlMultiSelect,\n false,\n !isSelectMoving\n );\n } else {\n const shiftMultiSelect = this.table.keyboardOptions?.shiftMultiSelect ?? true;\n const ctrlMultiSelect = this.table.keyboardOptions?.ctrlMultiSelect ?? true;\n this.table.stateManager.updateSelectPos(\n eventArgs.col,\n eventArgs.row,\n eventArgs.event.shiftKey && shiftMultiSelect,\n (eventArgs.event.ctrlKey || eventArgs.event.metaKey) && ctrlMultiSelect,\n false,\n !isSelectMoving\n );\n }\n return true;\n }\n // this.table.stateManager.updateSelectPos(-1, -1); 这句有问题 如drag框选鼠标超出表格范围 这里就直接情况是不对的\n return false;\n }\n\n // fillSelected(eventArgsSet?: SceneEvent, SelectCellRange?: any, SelectData?: any): any {\n // return;\n // if (!eventArgsSet) {\n // this.table.stateManager.updateSelectPos(-1, -1);\n // return;\n // }\n // const { eventArgs } = eventArgsSet;\n\n // if (eventArgs) {\n // if (eventArgs.target.name === 'checkbox') {\n // return;\n // }\n // let direction;\n\n // if (eventArgs.row >= SelectCellRange.start.row && eventArgs.row <= SelectCellRange.end.row) {\n // if (eventArgs.col > SelectCellRange.end.col) {\n // direction = 'right';\n // } else {\n // direction = 'left';\n // }\n // } else {\n // if (eventArgs.row > SelectCellRange.end.row) {\n // direction = 'down';\n // } else {\n // direction = 'up';\n // }\n // }\n // const values: (string | number)[][] = [];\n // const fillData: any[][] = [];\n // let updaterow;\n // let updatecol;\n // const rows = SelectData.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 // });\n\n // updaterow = SelectCellRange.start.row;\n // updatecol = SelectCellRange.start.col;\n // if (['up', 'left'].indexOf(direction) > -1) {\n // if (direction === 'up') {\n // updaterow = eventArgs.row;\n\n // const fillLength = SelectCellRange.start.row - updaterow;\n\n // for (let i = 0; i < fillLength; i++) {\n // const rowIndex = values.length - 1 - (i % values.length);\n // const newRow = values[rowIndex].slice(0); // 复制一行数据\n\n // fillData.unshift(newRow); // 在填充数据的开头插入新行\n // }\n // } else {\n // updatecol = eventArgs.col;\n // const fillLength = SelectCellRange.start.col - updatecol;\n\n // for (let i = 0; i < values.length; i++) {\n // const newRow = values[i].slice(0); // 复制一行数据\n // while (newRow.length < fillLength) {\n // newRow.unshift(newRow[0]); // 在新行开头向左填充元素\n // }\n // fillData.push(newRow);\n // }\n // }\n // } else {\n // if (direction === 'down') {\n // updaterow = SelectCellRange.end.row + 1;\n // const fillLength = eventArgs.row - SelectCellRange.end.row;\n\n // // 将原始数据添加到新数组中\n // for (let i = 0; i < fillLength; i++) {\n // const rowIndex = i % values.length;\n // const newRow = values[rowIndex]; // 复制一行数据\n // fillData.push(newRow);\n // }\n // } else {\n // const fillLength = eventArgs.col - SelectCellRange.end.col;\n // updatecol = SelectCellRange.end.col + 1;\n\n // values.forEach(function (rowCells: any[]) {\n // const newRow: any[] = [];\n // // 将原始数据按顺序填充到新行中\n // for (let i = 0; i < fillLength; i++) {\n // const dataIndex = i % rowCells.length;\n // newRow.push(rowCells[dataIndex]);\n // }\n\n // // 将新行添加到填充数据中\n // fillData.push(newRow);\n // });\n // }\n // }\n\n // (this.table as ListTableAPI).changeCellValues(updatecol, updaterow, fillData, false);\n // }\n // }\n\n deelTableSelectAll() {\n this.table.stateManager.updateSelectPos(-1, -1, false, false, true);\n this.table.fireListeners(TABLE_EVENT_TYPE.SELECTED_CELL, {\n ranges: this.table.stateManager.select.ranges,\n col: 0,\n row: 0\n });\n }\n\n dealMenuSelect(eventArgsSet: SceneEvent) {\n // do nothing\n }\n\n checkColumnResize(eventArgsSet: SceneEvent, update?: boolean): boolean {\n // return false;\n const { eventArgs } = eventArgsSet;\n\n if ((this.table.internalProps as ListTableProtected).enableTreeStickCell && !eventArgs) {\n return false;\n }\n // if (eventArgs) { // 如果是鼠标处理表格外部如最后一列的后面 也期望可以拖拽列宽\n const resizeCol = this.table.scenegraph.getResizeColAt(\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n eventArgs?.targetCell\n );\n let useerCustomCanResizeColumn: boolean = true;\n if (\n this.table.internalProps.canResizeColumn &&\n !this.table.internalProps.canResizeColumn(resizeCol.col, resizeCol.row, this.table)\n ) {\n useerCustomCanResizeColumn = false;\n }\n\n if (useerCustomCanResizeColumn && this.table._canResizeColumn(resizeCol.col, resizeCol.row) && resizeCol.col >= 0) {\n if (update) {\n this.table.stateManager.startResizeCol(\n resizeCol.col,\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n resizeCol.rightFrozen\n );\n }\n return true;\n }\n if (this.table.stateManager.isResizeCol()) {\n // 结束列调整\n this.table.stateManager.endResizeCol();\n }\n\n // }\n\n return false;\n }\n\n checkRowResize(eventArgsSet: SceneEvent, update?: boolean): boolean {\n const { eventArgs } = eventArgsSet;\n if (eventArgs) {\n const resizeRow = this.table.scenegraph.getResizeRowAt(\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n eventArgs.targetCell\n );\n\n if (this.table._canResizeRow(resizeRow.col, resizeRow.row) && resizeRow.row >= 0) {\n if (update) {\n this.table.stateManager.startResizeRow(\n resizeRow.row,\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n resizeRow.bottomFrozen\n );\n }\n return true;\n }\n }\n\n return false;\n }\n\n cellIsHeaderCheck(eventArgsSet: SceneEvent, update?: boolean): boolean {\n const { eventArgs } = eventArgsSet;\n if (!eventArgs) {\n return false;\n }\n const { col, row, target } = eventArgs;\n if (!this.table.isHeader(col, row)) {\n return false;\n }\n const cellType = this.table.getCellType(eventArgs.col, eventArgs.row);\n if (cellType === 'checkbox' && target.name === 'checkbox') {\n return true;\n }\n return false;\n }\n checkCellFillhandle(eventArgsSet: SceneEvent, update?: boolean): boolean {\n let isFillHandle = false;\n if (typeof this.table.options.excelOptions?.fillHandle === 'function') {\n isFillHandle = this.table.options.excelOptions.fillHandle({\n selectRanges: this.table.stateManager.select.ranges,\n table: this.table\n });\n } else {\n isFillHandle = this.table.options.excelOptions?.fillHandle;\n }\n if (isFillHandle) {\n const { eventArgs } = eventArgsSet;\n if (eventArgs) {\n if (this.table.stateManager.select?.ranges?.length) {\n const lastCol = Math.max(\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].start.col,\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].end.col\n );\n const lastRow = Math.max(\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].start.row,\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].end.row\n );\n const startCol = Math.min(\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].start.col,\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].end.col\n );\n const startRow = Math.min(\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].start.row,\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].end.row\n );\n // 计算鼠标与fillhandle矩形中心之间的距离 distanceX 和 distanceY\n // 考虑最后一行和最后一列的特殊情况 逻辑处理需要和update-select-border.ts 中 “计算填充柄小方块的位置” 逻辑处理一致。目前都还有小问题,例如存在冻结的时候。\n let lastCellBoundTargetX;\n if (lastCol < this.table.colCount - 1) {\n const lastCellBound = this.table.scenegraph.highPerformanceGetCell(lastCol, lastRow).globalAABBBounds;\n lastCellBoundTargetX = lastCellBound.x2;\n } else {\n if (startCol === 0) {\n const lastCellBound = this.table.scenegraph.highPerformanceGetCell(0, lastRow).globalAABBBounds;\n lastCellBoundTargetX = lastCellBound.x1;\n } else {\n const lastCellBound = this.table.scenegraph.highPerformanceGetCell(\n startCol - 1,\n lastRow\n ).globalAABBBounds;\n lastCellBoundTargetX = lastCellBound.x2;\n }\n }\n const distanceX = Math.abs(eventArgsSet.abstractPos.x - lastCellBoundTargetX);\n\n let lastCellBoundTargetY;\n if (lastRow < this.table.rowCount - 1) {\n const lastCellBound = this.table.scenegraph.highPerformanceGetCell(lastCol, lastRow).globalAABBBounds;\n lastCellBoundTargetY = lastCellBound.y2;\n } else {\n const lastCellBound = this.table.scenegraph.highPerformanceGetCell(lastCol, startRow - 1).globalAABBBounds;\n lastCellBoundTargetY = lastCellBound.y2;\n }\n const distanceY = Math.abs(eventArgsSet.abstractPos.y - lastCellBoundTargetY);\n\n const squareSize = 6 * 3;\n // 判断鼠标是否落在fillhandle矩形内\n if (\n this.table.stateManager.fillHandle?.isFilling ||\n (distanceX <= squareSize / 2 && distanceY <= squareSize / 2)\n ) {\n if (update) {\n this.table.stateManager.startFillSelect(eventArgsSet.abstractPos.x, eventArgsSet.abstractPos.y);\n }\n return true;\n }\n }\n }\n }\n return false;\n }\n\n dealColumnResize(xInTable: number, yInTable: number) {\n this.table.stateManager.updateResizeCol(xInTable, yInTable);\n }\n\n dealRowResize(xInTable: number, yInTable: number) {\n this.table.stateManager.updateResizeRow(xInTable, yInTable);\n }\n\n checkColumnMover(eventArgsSet: SceneEvent): boolean {\n // return false;\n const { eventArgs } = eventArgsSet;\n if (\n eventArgs &&\n // this.table.isHeader(eventArgs.col, eventArgs.row) &&\n // (checkCellInSelect(eventArgs.col, eventArgs.row, this.table.stateManager.select.ranges) ||\n // this.table.options.select?.disableHeaderSelect ||\n // this.table.options.select?.disableSelect) &&\n // this.table.stateManager.select.cellPosStart.col === eventArgs.col &&\n // this.table.stateManager.select.cellPosStart.row === eventArgs.row &&\n this.table._canDragHeaderPosition(eventArgs.col, eventArgs.row)\n ) {\n this.table.stateManager.startMoveCol(\n eventArgs.col,\n eventArgs.row,\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n eventArgs?.event?.nativeEvent\n );\n return true;\n }\n\n return false;\n }\n\n dealColumnMover(x: number, y: number, event: MouseEvent | PointerEvent | TouchEvent) {\n let col = this.table.getColAtRelativePosition(x);\n let row = this.table.getRowAtRelativePosition(y);\n if (col === -1 && this.table.stateManager.columnMove.movingColumnOrRow === 'row') {\n col = 0;\n }\n if (row === -1 && this.table.stateManager.columnMove.movingColumnOrRow === 'column') {\n row = 0;\n }\n // const { eventArgs } = eventArgsSet;\n if (isValid(col) && isValid(row)) {\n this.table.stateManager.updateMoveCol(col, row, x, y, event);\n }\n }\n\n startColumnResize(eventArgsSet: SceneEvent) {\n // do nothing\n }\n\n dealIconClick(e: FederatedPointerEvent, eventArgsSet: SceneEvent): boolean {\n const { eventArgs } = eventArgsSet;\n // if (!eventArgs) {\n // return false;\n // }\n\n const { target, event, col, row } = eventArgs || {\n target: e.target,\n event: e,\n col: -1,\n row: -1\n };\n const icon = target as unknown as Icon;\n\n if (icon.role && icon.role.startsWith('icon-')) {\n this.table.fireListeners(TABLE_EVENT_TYPE.ICON_CLICK, {\n name: icon.name,\n // 默认位置:icon中部正下方\n x: (icon.globalAABBBounds.x1 + icon.globalAABBBounds.x2) / 2,\n y: icon.globalAABBBounds.y2,\n col,\n row,\n funcType: icon.attribute.funcType,\n icon,\n event\n });\n\n return true;\n } else if (target instanceof RichText) {\n const icon = target.pickIcon(event.global);\n if (icon) {\n this.table.fireListeners(TABLE_EVENT_TYPE.ICON_CLICK, {\n name: icon.attribute.id,\n // 默认位置:icon中部正下方\n x: icon.globalX + icon.globalAABBBounds.width() / 2,\n y: icon.globalY + icon.AABBBounds.height(),\n col,\n row,\n funcType: (icon.attribute as any).funcType,\n icon: icon as unknown as Icon,\n event\n });\n return true;\n }\n }\n\n return false;\n }\n /** TODO 其他的事件并么有做remove */\n release() {\n this.gesture?.release();\n\n // remove global event listerner\n this.globalEventListeners.forEach(item => {\n if (item.env === 'document') {\n document.removeEventListener(item.name, item.callback);\n } else if (item.env === 'body') {\n document.body.removeEventListener(item.name, item.callback);\n } else if (item.env === 'window') {\n window.removeEventListener(item.name, item.callback);\n } else if (item.env === 'vglobal') {\n vglobal.removeEventListener(item.name, item.callback);\n }\n });\n this.globalEventListeners = [];\n }\n\n enableScroll() {\n this._enableTableScroll = true;\n }\n\n disableScroll() {\n this._enableTableScroll = false;\n }\n\n async handleCopy(e: KeyboardEvent, isCut: boolean = false) {\n const table = this.table;\n !isCut && (this.cutWaitPaste = false);\n this.copySourceRange = null;\n // 记录复制时的源位置(用于公式相对引用调整)\n const sourceRanges = table.stateManager.select.ranges;\n if (sourceRanges && sourceRanges.length === 1) {\n // 只有一个选区的时候才需要采取解析公式(和excel一致),才需要记录源位置\n const sourceRange = sourceRanges[0];\n this.copySourceRange = {\n startCol: Math.min(sourceRange.start.col, sourceRange.end.col),\n startRow: Math.min(sourceRange.start.row, sourceRange.end.row)\n };\n } else if (!sourceRanges?.length) {\n this.copySourceRange = null;\n // 没有选中区域,直接返回,不进行复制操作\n return;\n }\n\n const data = this.table.getCopyValue(\n table.options.keyboardOptions?.getCopyCellValue?.value as (col: number, row: number) => string | number\n );\n if (isValid(data)) {\n e.preventDefault();\n\n // 确保表格元素获得焦点,避免Document is not focused错误\n const element = table.getElement();\n if (element && element !== document.activeElement) {\n element.focus();\n // 短暂延迟,确保焦点设置完成\n await new Promise(resolve => setTimeout(resolve, 10));\n }\n\n try {\n // 优先使用现代剪贴板API\n if (navigator.clipboard && navigator.clipboard.writeText) {\n // 尝试获取权限(如果支持)\n let hasPermission = true;\n if (navigator.permissions && navigator.permissions.query) {\n try {\n const permissionState = await navigator.permissions.query({\n name: 'clipboard-write' as PermissionName\n });\n hasPermission = permissionState.state === 'granted';\n } catch (permissionError) {\n // 权限查询失败,继续尝试写入\n console.warn('无法查询剪贴板权限:', permissionError);\n hasPermission = true; // 假设有权限,让写入操作自己失败\n }\n }\n\n if (hasPermission) {\n // 将复制的数据转为html格式\n\n try {\n // 尝试使用 ClipboardItem(支持富文本)\n if (window.ClipboardItem) {\n let htmlValues = data;\n if (\n table.stateManager.select.ranges.length === 1 && //只有一个选区的时候采取解析公式(和excel一致)\n table.options.keyboardOptions?.getCopyCellValue?.html\n ) {\n htmlValues = this.table.getCopyValue(\n table.options.keyboardOptions?.getCopyCellValue.html as (\n col: number,\n row: number\n ) => string | number\n );\n }\n const dataHTML = setDataToHTML(htmlValues);\n await 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 // 降级到纯文本\n await navigator.clipboard.writeText(data);\n }\n } catch (clipboardError) {\n console.warn('剪贴板写入失败,使用降级方案:', clipboardError);\n // 降级到传统方法\n this.fallbackCopyToClipboard(data, e);\n }\n } else {\n // 没有权限,使用降级方案\n this.fallbackCopyToClipboard(data, e);\n }\n } else {\n // 不支持现代剪贴板API,使用降级方案\n this.fallbackCopyToClipboard(data, e);\n }\n\n table.fireListeners(TABLE_EVENT_TYPE.COPY_DATA, {\n cellRange: table.stateManager.select.ranges,\n copyData: data,\n isCut\n });\n } catch (error) {\n console.error('复制操作失败:', error);\n // 最后的降级方案\n this.fallbackCopyToClipboard(data, e);\n }\n }\n if (table.keyboardOptions?.showCopyCellBorder) {\n setActiveCellRangeState(table);\n table.clearSelected();\n }\n }\n\n // 降级复制方案\n private fallbackCopyToClipboard(data: string, e: KeyboardEvent): void {\n try {\n // 尝试使用旧的 clipboardData API (在事件处理函数中直接设置)\n if ((e as any).clipboardData) {\n (e as any).clipboardData.setData('text/plain', data);\n return;\n }\n\n // 确保当前文档有焦点\n if (document.activeElement && document.activeElement !== document.body) {\n (document.activeElement as HTMLElement).blur();\n }\n\n // 尝试使用 document.execCommand\n const textArea = document.createElement('textarea');\n textArea.value = data;\n textArea.style.position = 'fixed';\n textArea.style.left = '-999999px';\n textArea.style.top = '-999999px';\n textArea.style.opacity = '0';\n textArea.setAttribute('readonly', '');\n textArea.setAttribute('aria-hidden', 'true');\n document.body.appendChild(textArea);\n\n // 强制聚焦并选中文本\n textArea.focus();\n textArea.select();\n textArea.setSelectionRange(0, data.length);\n\n try {\n const successful = document.execCommand('copy');\n if (!successful) {\n console.warn('execCommand复制返回false,可能不被支持');\n }\n } catch (execError) {\n console.warn('execCommand复制失败:', execError);\n } finally {\n document.body.removeChild(textArea);\n }\n } catch (error) {\n console.error('降级复制方案失败:', error);\n }\n }\n\n async handleCut(e: KeyboardEvent) {\n this.handleCopy(e, true);\n this.cutWaitPaste = true;\n this.cutCellRange = this.table.getSelectedCellInfos();\n this.cutRanges = this.table.stateManager.select.ranges?.map(r => ({\n start: { col: r.start.col, row: r.start.row },\n end: { col: r.end.col, row: r.end.row }\n }));\n // 设置自动超时,防止剪切状态无限期保持\n if (this.clipboardCheckTimer) {\n clearTimeout(this.clipboardCheckTimer);\n }\n\n // 30秒后自动取消剪切状态\n this.clipboardCheckTimer = window.setTimeout(() => {\n if (this.cutWaitPaste) {\n // 剪切操作超时,重置剪切状态\n this.cutWaitPaste = false;\n this.cutCellRange = null;\n this.cutRanges = null;\n this.clipboardCheckTimer = null;\n }\n }, 30000); // 30秒超时\n\n // 保存剪贴板内容以便后续检测变化\n this.saveClipboardContent();\n }\n\n // 执行实际的粘贴操作\n handlePaste(e: KeyboardEvent): void {\n if (!this.cutWaitPaste) {\n // 非剪切状态,直接粘贴\n this.executePaste(e);\n return;\n }\n\n this.checkClipboardChanged()\n .then(changed => {\n // 执行粘贴操作,并根据剪贴板是否变化决定是否清空选中区域\n this.executePaste(e);\n if (!changed) {\n this.clearCutArea(this.table as ListTableAPI);\n }\n // 执行完粘贴操作后,重置剪切状态\n if (this.cutWaitPaste) {\n this.cutWaitPaste = false;\n this.cutCellRange = null;\n this.cutRanges = null;\n // 清除定时器\n if (this.clipboardCheckTimer) {\n clearTimeout(this.clipboardCheckTimer);\n this.clipboardCheckTimer = null;\n }\n }\n })\n .catch(() => {\n // 如果无法检测剪贴板变化(例如权限问题),则保守地执行粘贴但不清空选中区域\n this.executePaste(e);\n // 执行完粘贴操作后,重置剪切状态\n if (this.cutWaitPaste) {\n this.cutWaitPaste = false;\n this.cutCellRange = null;\n // 清除定时器\n if (this.clipboardCheckTimer) {\n clearTimeout(this.clipboardCheckTimer);\n this.clipboardCheckTimer = null;\n }\n }\n });\n }\n private async executePaste(e: any) {\n const table = this.table;\n if ((table as ListTableAPI).editorManager?.editingEditor) {\n return;\n }\n if ((table as ListTableAPI).changeCellValues && table.stateManager.select.ranges?.length > 0) {\n try {\n // 优先使用现代剪贴板API\n if (navigator.clipboard && navigator.clipboard.read) {\n try {\n // 读取剪切板数据\n const clipboardItems = await navigator.clipboard.read();\n let handled = false;\n\n for (const item of clipboardItems) {\n // 优先处理 html 格式数据\n if (item.types.includes('text/html')) {\n await this.pasteHtmlToTable(item);\n handled = true;\n break;\n } else if (item.types.includes('text/plain')) {\n await this.pasteTextToTable(item);\n handled = true;\n break;\n }\n }\n\n if (!handled) {\n // 如果没有处理任何数据,使用降级方案\n await this.fallbackPasteFromClipboard(e);\n }\n } catch (clipboardError) {\n console.warn('现代剪贴板API读取失败,使用降级方案:', clipboardError);\n // 降级到传统方法\n await this.fallbackPasteFromClipboard(e);\n }\n } else {\n // 不支持现代剪贴板API,使用降级方案\n await this.fallbackPasteFromClipboard(e);\n }\n } catch (error) {\n console.error('粘贴操作失败:', error);\n // 最后的降级方案\n await this.fallbackPasteFromClipboard(e);\n }\n }\n if (table.keyboardOptions?.showCopyCellBorder) {\n clearActiveCellRangeState(table);\n }\n }\n\n // 降级粘贴方案\n private async fallbackPasteFromClipboard(e: any): Promise<void> {\n const table = this.table;\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 try {\n // 确保表格元素获得焦点\n const element = table.getElement();\n if (element && element !== document.activeElement) {\n element.focus();\n // 短暂延迟,确保焦点设置完成\n await new Promise(resolve => setTimeout(resolve, 10));\n }\n\n // 尝试从事件对象获取剪贴板数据\n const clipboardData = e.clipboardData || (window as any).clipboardData || window.Clipboard;\n\n if (clipboardData) {\n const pastedData = clipboardData.getData('text') || clipboardData.getData('Text');\n if (pastedData) {\n await this.processPastedText(pastedData, col, row);\n return;\n }\n }\n } catch (error) {\n console.error('降级粘贴方案失败:', error);\n }\n }\n\n // 处理粘贴的文本数据\n private async processPastedText(pastedData: string, col: number, row: number): Promise<void> {\n const table = this.table;\n const rows = pastedData.split('\\n'); // 将数据拆分为行\n const values: (string | number)[][] = [];\n\n rows.forEach(function (rowCells: any) {\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 let processedValues;\n // 检查是否支持公式处理(针对vtable-sheet)\n if (table.options.keyboardOptions?.processFormulaBeforePaste && this.copySourceRange) {\n // 利用复制时记录的源位置,对粘贴的数据进行公式处理\n processedValues = table.options.keyboardOptions.processFormulaBeforePaste(\n values,\n this.copySourceRange.startCol,\n this.copySourceRange.startRow,\n col,\n row\n );\n }\n\n // 保持与 navigator.clipboard.read 中的操作一致\n const changedCellResults = await (table as ListTableAPI).changeCellValues(\n col,\n row,\n processedValues ? processedValues : values,\n true\n );\n if (table.hasListeners(TABLE_EVENT_TYPE.PASTED_DATA)) {\n table.fireListeners(TABLE_EVENT_TYPE.PASTED_DATA, {\n col,\n row,\n pasteData: processedValues ? processedValues : values,\n changedCellResults\n });\n }\n }\n // 清空选中区域的内容\n private clearCutArea(table: ListTableAPI): void {\n try {\n const ranges = this.cutRanges;\n if (!ranges || ranges.length === 0) {\n return;\n }\n\n table.changeCellValuesByRanges(ranges, '');\n } catch (error) {\n console.error('清空单元格内容失败', error);\n }\n }\n\n // 检查剪贴板内容是否被其他应用更改\n private async checkClipboardChanged(): Promise<boolean> {\n // 如果不支持读取剪贴板,则无法检测变化\n if (!navigator.clipboard || !navigator.clipboard.readText) {\n return false;\n }\n\n try {\n const currentContent = await navigator.clipboard.readText();\n // console.log('当前剪贴板内容:', currentContent);\n // console.log('上次保存的剪贴板内容:', this.lastClipboardContent);\n\n // 比较当前剪贴板内容与剪切时保存的内容\n return currentContent !== this.lastClipboardContent;\n } catch (err) {\n console.warn('检查剪贴板状态失败:', err);\n // 出错时假设剪贴板未变化\n return false;\n }\n }\n\n // 保存剪贴板内容\n private saveClipboardContent(): void {\n // 尝试获取剪贴板内容\n if (navigator.clipboard && navigator.clipboard.readText) {\n // 延迟一点以确保剪贴板内容已更新\n setTimeout(() => {\n navigator.clipboard\n .readText()\n .then(text => {\n this.lastClipboardContent = text;\n console.log('已保存剪贴板状态');\n })\n .catch(err => {\n console.warn('无法读取剪贴板内容:', err);\n });\n }, 50);\n }\n }\n private pasteHtmlToTable(item: ClipboardItem) {\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 const table = this.table;\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)) as RegExpMatchArray[];\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 = this.handlePasteValues(\n values,\n pasteValuesRowCount,\n pasteValuesColCount,\n maxRow - row + 1,\n maxCol - col + 1\n );\n let processedValues;\n // 检查是否支持公式处理(针对vtable-sheet)\n if (table.options.keyboardOptions?.processFormulaBeforePaste && this.copySourceRange) {\n // 使用复制时记录的源位置(而不是当前的选中位置)\n processedValues = table.options.keyboardOptions.processFormulaBeforePaste(\n values,\n this.copySourceRange.startCol,\n this.copySourceRange.startRow,\n col,\n row\n );\n }\n\n const changedCellResults = await (table as ListTableAPI).changeCellValues(\n col,\n row,\n processedValues ? processedValues : values,\n true\n );\n if (table.hasListeners(TABLE_EVENT_TYPE.PASTED_DATA)) {\n table.fireListeners(TABLE_EVENT_TYPE.PASTED_DATA, {\n col,\n row,\n pasteData: processedValues ? processedValues : 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(data => this._pasteValue(data));\n });\n }\n }\n });\n }\n });\n });\n }\n\n private async _pasteValue(pastedData: string) {\n const table = this.table;\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 = this.handlePasteValues(\n values,\n pasteValuesRowCount,\n pasteValuesColCount,\n maxRow - row + 1,\n maxCol - col + 1\n );\n let processedValues;\n // 检查是否支持公式处理(针对vtable-sheet)\n if (table.options.keyboardOptions?.processFormulaBeforePaste && this.copySourceRange) {\n // 利用复制时记录的源位置,对粘贴的数据进行公式处理\n processedValues = table.options.keyboardOptions.processFormulaBeforePaste(\n values,\n this.copySourceRange.startCol,\n this.copySourceRange.startRow,\n col,\n row\n );\n }\n // 保持与 navigator.clipboard.read 中的操作一致\n const changedCellResults = await (table as ListTableAPI).changeCellValues(\n col,\n row,\n processedValues ? processedValues : values,\n true\n );\n if (table.hasListeners(TABLE_EVENT_TYPE.PASTED_DATA)) {\n table.fireListeners(TABLE_EVENT_TYPE.PASTED_DATA, {\n col,\n row,\n pasteData: processedValues ? processedValues : values,\n changedCellResults\n });\n }\n }\n private async pasteTextToTable(item: ClipboardItem) {\n const table = this.table;\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\n try {\n const blob = await item.getType('text/plain');\n const pastedData = await blob.text();\n const values = this.parsePastedData(pastedData);\n\n const pasteValuesRowCount = values.length;\n const pasteValuesColCount = Math.max(...values.map(row => row.length), 0);\n\n const processedValues = this.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, processedValues, true);\n\n if (table.hasListeners(TABLE_EVENT_TYPE.PASTED_DATA)) {\n table.fireListeners(TABLE_EVENT_TYPE.PASTED_DATA, {\n col,\n row,\n pasteData: processedValues,\n changedCellResults\n });\n }\n } catch (error) {\n // 静默处理粘贴错误,保持原有行为\n console.warn('Paste operation failed:', error);\n }\n }\n\n private parsePastedData(pastedData: string): (string | number)[][] {\n const rows = pastedData.replace(/\\r(?!\\n)/g, '\\r\\n').split('\\r\\n'); // 文本中的换行符格式进行统一处理\n const values: (string | number)[][] = [];\n\n // 移除最后一行空行\n if (rows.length > 1 && rows[rows.length - 1] === '') {\n rows.pop();\n }\n\n rows.forEach((rowCells: string) => {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = cells.map(cell => this.processCellValue(cell));\n values.push(rowValues);\n });\n\n return values;\n }\n\n private processCellValue(cell: string): string | 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\n // 尝试转换为数字\n const numValue = Number(cell);\n return isNaN(numValue) ? cell : numValue;\n }\n private 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}\n"]}
1
+ {"version":3,"sources":["../src/event/event.ts"],"names":[],"mappings":"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","file":"event.js","sourcesContent":["// import { FederatedPointerEvent } from '@src/vrender';\nimport type { FederatedPointerEvent, Gesture, IEventTarget } from './../vrender';\nimport { RichText, vglobal } from './../vrender';\nimport type { CellInfo, CellRange, ListTableAPI, ListTableConstructorOptions } from '../ts-types';\nimport { IconFuncTypeEnum } from '../ts-types';\nimport type { StateManager } from '../state/state';\nimport type { Group } from '../scenegraph/graphic/group';\nimport { TABLE_EVENT_TYPE } from '../core/TABLE_EVENT_TYPE';\nimport type { Icon } from '../scenegraph/graphic/icon';\nimport { checkCellInSelect } from '../state/common/check-in-select';\nimport { bindMediaClick } from './media-click';\nimport { bindDrillEvent, checkHaveDrill, drillClick } from './drill';\nimport { bindSparklineHoverEvent } from './sparkline-event';\nimport type { BaseTableAPI, ListTableProtected } from '../ts-types/base-table';\nimport { checkHaveTextStick, handleTextStick } from '../scenegraph/stick-text';\nimport { bindGesture, bindTableGroupListener } from './listener/table-group';\nimport { bindScrollBarListener } from './listener/scroll-bar';\nimport { bindContainerDomListener } from './listener/container-dom';\nimport { bindTouchListener } from './listener/touch';\nimport { getCellEventArgsSet, setDataToHTML, type SceneEvent } from './util';\nimport { bindAxisClickEvent } from './self-event-listener/pivot-chart/axis-click';\nimport { bindAxisHoverEvent } from './self-event-listener/pivot-chart/axis-hover';\nimport type { PivotTable } from '../PivotTable';\nimport { Env } from '../tools/env';\nimport type { ListTable } from '../ListTable';\nimport { isValid } from '@visactor/vutils';\nimport { InertiaScroll } from './scroll';\nimport { isCellDisableSelect } from '../state/select/is-cell-select-highlight';\nimport {\n bindGroupCheckboxTreeChange,\n bindGroupTitleCheckboxChange,\n bindHeaderCheckboxChange\n} from './self-event-listener/list-table/checkbox';\nimport { bindButtonClickEvent } from './component/button';\nimport { bindIconClickEvent } from './self-event-listener/base-table/icon';\nimport { bindDropdownMenuEvent } from './self-event-listener/base-table/dropdown-menu';\nimport { bindDBClickAutoColumnWidthEvent } from './self-event-listener/base-table/dbclick-auto-column-width';\nimport { browser } from '../tools/helper';\nimport { clearActiveCellRangeState, setActiveCellRangeState } from '../tools/style';\n\ntype PasteRange = {\n col: number;\n row: number;\n maxCol: number;\n maxRow: number;\n};\n\ntype ClipboardRange = {\n start: { col: number; row: number };\n end: { col: number; row: number };\n};\n\ntype CopySnapshot = {\n ranges: ClipboardRange[];\n copySourceRange: { startCol: number; startRow: number } | null;\n cellInfos: CellInfo[][] | null;\n sourceCells: SourceCell[];\n sourceCellMatrix: SourceCellMatrix;\n sourceColCount: number;\n sourceRowCount: number;\n clipboardData: EventClipboardData | null;\n clipboardSignature: string;\n};\n\ntype EventClipboardData = {\n html: string;\n text: string;\n hasHtml?: boolean;\n hasText?: boolean;\n readFailed?: boolean;\n internalFormulaText?: string;\n internalFormulaHtmlMarker?: string;\n};\n\ntype SourceCell = {\n col: number;\n row: number;\n recordIndex?: number | number[];\n field?: any;\n value?: any;\n};\n\ntype SourceCellMatrix = (SourceCell | null)[][];\n\ntype CutState = {\n id: number;\n ranges: ClipboardRange[];\n cellInfos: CellInfo[][] | null;\n sourceCells: SourceCell[];\n sourceCellMatrix: SourceCellMatrix;\n sourceColCount: number;\n sourceRowCount: number;\n clipboardData: EventClipboardData | null;\n clipboardSignature: string;\n copySourceRange: { startCol: number; startRow: number } | null;\n isSingleRange: boolean;\n};\n\ntype PasteContext = {\n pasteRange: PasteRange;\n copySourceRange: { startCol: number; startRow: number } | null;\n cutState?: CutState | null;\n pasteOperationId?: number;\n};\n\ntype PasteWriteResult = {\n pasted: boolean;\n changedCellResults: boolean[][];\n changedCells: SourceCell[];\n migratedSourceCells: SourceCell[];\n};\n\nexport class EventManager {\n table: BaseTableAPI;\n // _col: number;\n // _resizing: boolean = false;\n // /** 为了能够判断canvas mousedown 事件 以阻止事件冒泡 */\n // isPointerDownOnTable: boolean = false;\n isTouchdown: boolean; // touch scrolling mode on\n isTouchMove: boolean; // touchmove 事件中设置\n touchMovePoints: {\n x: number;\n y: number;\n timestamp: number;\n }[]; // touch points record in touch scrolling mode\n touchSetTimeout: any; // touch start timeout, use to distinguish touch scrolling mode and default touch event\n touchEnd: boolean; // is touch event end when default touch event listener response\n /** 是在touchSetTimeout中设置的true 延迟了500ms 如果在500ms内接入了touch事件 则取消touchSetTimeout逻辑 也就是不会将touchMode设置为true。这个是longTouch的逻辑 */\n isLongTouch: boolean; // is touch listener working, use to disable document touch scrolling function\n gesture: Gesture;\n handleTextStickBindId: number[];\n\n //鼠标事件记录。 PointerMove敏感度太高了 记录下上一个鼠标位置 在接收到PointerMove事件时做判断 是否到到触发框选或者移动表头操作的标准,防止误触\n LastPointerXY: { x: number; y: number };\n LastBodyPointerXY: { x: number; y: number };\n isDown = false;\n isDraging = false;\n scrollYSpeed: number;\n scrollXSpeed: number;\n downIcon: IEventTarget; // 记录鼠标按下的sicon\n //报错已绑定过的事件 后续清除绑定\n globalEventListeners: {\n name: string;\n env: 'document' | 'body' | 'window' | 'vglobal';\n callback: (e?: any) => void;\n }[] = [];\n inertiaScroll: InertiaScroll;\n\n bindSparklineHoverEvent: boolean;\n\n _enableTableScroll: boolean = true;\n /** 剪切后等待粘贴 */\n cutWaitPaste: boolean = false;\n private clipboardCheckTimer: number | null = null; // 剪贴板检测定时器\n private cutOperationId: number = 0;\n private clipboardOperationId: number = 0;\n private pasteOperationId: number = 0;\n private pasteWriteInProgress: boolean = false;\n private pasteWritePromise: Promise<void> = Promise.resolve();\n private clipboardWritePromise: Promise<void> = Promise.resolve();\n private lastCopiedClipboardData: EventClipboardData | null = null;\n private internalFormulaHtmlMarkerId: number = 0;\n private fieldKeyIds: WeakMap<object, number> = new WeakMap();\n private fieldKeyId: number = 0;\n private activeCutState: CutState | null = null;\n lastClipboardContent: string = ''; // 最后一次复制/剪切的内容\n cutCellRange: CellInfo[][] | null = null;\n cutRanges: CellRange[] | null = null;\n /** 复制时的源位置信息(用于公式相对引用调整) */\n copySourceRange: { startCol: number; startRow: number } | null = null;\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.handleTextStickBindId = [];\n this.inertiaScroll = new InertiaScroll(table.stateManager);\n if (Env.mode === 'node' || table.options.disableInteraction) {\n return;\n }\n this.bindOuterEvent();\n setTimeout(() => {\n this.bindSelfEvent();\n }, 0);\n }\n\n // 绑定DOM事件\n bindOuterEvent() {\n bindTableGroupListener(this);\n bindContainerDomListener(this);\n bindScrollBarListener(this);\n bindTouchListener(this);\n bindGesture(this);\n }\n updateEventBinder() {\n setTimeout(() => {\n if (this.table.isReleased) {\n return;\n }\n\n // 处理textStick 是否绑定SCROLL的判断\n if (checkHaveTextStick(this.table) && this.handleTextStickBindId?.length === 0) {\n this.handleTextStickBindId.push(\n this.table.on(TABLE_EVENT_TYPE.SCROLL, e => {\n handleTextStick(this.table);\n })\n );\n\n this.handleTextStickBindId.push(\n this.table.on(TABLE_EVENT_TYPE.RESIZE_COLUMN_END, e => {\n handleTextStick(this.table);\n })\n );\n this.handleTextStickBindId.push(\n this.table.on(TABLE_EVENT_TYPE.RESIZE_ROW_END, e => {\n handleTextStick(this.table);\n })\n );\n } else if (!checkHaveTextStick(this.table) && this.handleTextStickBindId) {\n this.handleTextStickBindId.forEach(id => {\n this.table.off(id);\n });\n this.handleTextStickBindId = [];\n }\n\n // chart hover\n bindSparklineHoverEvent(this.table);\n }, 0);\n }\n bindSelfEvent() {\n if (this.table.isReleased) {\n return;\n }\n\n // 图标点击\n bindIconClickEvent(this.table);\n\n // 下拉菜单内容点击\n bindDropdownMenuEvent(this.table);\n\n // 处理textStick\n // if (checkHaveTextStick(this.table)) {\n // this.handleTextStickBindId = this.table.on(TABLE_EVENT_TYPE.SCROLL, e => {\n // handleTextStick(this.table);\n // });\n // }\n this.updateEventBinder();\n\n // link/image/video点击\n bindMediaClick(this.table);\n\n // 双击自动列宽\n bindDBClickAutoColumnWidthEvent(this.table);\n\n // drill icon\n if (this.table.isPivotTable() && checkHaveDrill(this.table as PivotTable)) {\n bindDrillEvent(this.table);\n }\n\n // chart hover\n bindSparklineHoverEvent(this.table);\n\n // axis click\n bindAxisClickEvent(this.table);\n\n // chart axis event\n bindAxisHoverEvent(this.table);\n\n // group title checkbox change\n bindGroupTitleCheckboxChange(this.table);\n // checkbox and titlr change\n bindGroupCheckboxTreeChange(this.table as ListTable);\n // header checkbox change\n bindHeaderCheckboxChange(this.table);\n\n // button click\n bindButtonClickEvent(this.table);\n }\n\n dealTableHover(eventArgsSet?: SceneEvent) {\n if (!eventArgsSet) {\n this.table.stateManager.updateHoverPos(-1, -1);\n return;\n }\n const { eventArgs } = eventArgsSet;\n\n if (eventArgs) {\n this.table.stateManager.updateHoverPos(eventArgs.col, eventArgs.row);\n } else {\n this.table.stateManager.updateHoverPos(-1, -1);\n }\n }\n\n dealIconHover(eventArgsSet: SceneEvent) {\n const { eventArgs } = eventArgsSet;\n\n if (eventArgs) {\n this.table.stateManager.updateHoverIcon(eventArgs.col, eventArgs.row, eventArgs.target, eventArgs.targetCell);\n } else {\n this.table.stateManager.updateHoverIcon(-1, -1, undefined, undefined);\n }\n }\n\n dealMenuHover(eventArgsSet: SceneEvent) {\n // menu自身状态实现\n }\n\n dealTableSelect(eventArgsSet?: SceneEvent, isSelectMoving?: boolean): boolean {\n if (!eventArgsSet) {\n this.table.stateManager.updateSelectPos(-1, -1);\n return false;\n }\n const { eventArgs } = eventArgsSet;\n\n if (eventArgs) {\n if (\n eventArgs.target.name === 'checkbox' ||\n eventArgs.target.name === 'radio' ||\n eventArgs.target.name === 'switch' ||\n eventArgs.target.name === 'button'\n ) {\n return false;\n }\n\n // // 注意:如果启用下面这句代码逻辑 则在点击选中单元格时失效hover效果。但是会导致chart实例的click事件失效,所以先特殊处理这个逻辑\n // if (\n // !this.table.isPivotChart() &&\n // eventArgsSet?.eventArgs?.target.type !== 'chart' &&\n // eventArgs.event.pointerType !== 'touch'\n // ) {\n // this.table.stateManager.updateHoverPos(-1, -1);\n // }\n\n if (\n this.table.isHeader(eventArgs.col, eventArgs.row) &&\n isCellDisableSelect(this.table, eventArgs.col, eventArgs.row)\n ) {\n if (!isSelectMoving) {\n // 如果是点击点表头 取消单元格选中状态\n this.table.stateManager.updateSelectPos(-1, -1);\n }\n return false;\n } else if (\n !this.table.isHeader(eventArgs.col, eventArgs.row) &&\n isCellDisableSelect(this.table, eventArgs.col, eventArgs.row)\n ) {\n if (!isSelectMoving) {\n const isHasSelected = !!this.table.stateManager.select.ranges?.length;\n this.table.stateManager.updateSelectPos(-1, -1);\n if (isHasSelected) {\n this.table.stateManager.endSelectCells(true, isHasSelected);\n }\n }\n return false;\n }\n\n if (\n this.table.isPivotChart() &&\n (eventArgsSet?.eventArgs?.target.name === 'axis-label' || eventArgsSet?.eventArgs?.target.type === 'chart')\n ) {\n // 点击透视图坐标轴标签或图标内容,执行图表状态更新,不触发Select\n this.table.stateManager.updateSelectPos(-1, -1);\n return false;\n }\n const shiftMultiSelect = this.table.keyboardOptions?.shiftMultiSelect ?? true;\n const ctrlMultiSelect = this.table.keyboardOptions?.ctrlMultiSelect ?? true;\n this.table.stateManager.updateSelectPos(\n this.table.stateManager.select.selectInline === 'row' ? this.table.colCount - 1 : eventArgs.col,\n this.table.stateManager.select.selectInline === 'col' ? this.table.rowCount - 1 : eventArgs.row,\n eventArgs.event.shiftKey && shiftMultiSelect,\n (eventArgs.event.ctrlKey || eventArgs.event.metaKey) && ctrlMultiSelect,\n false,\n isSelectMoving ? false : this.table.options.select?.makeSelectCellVisible ?? true\n );\n\n return true;\n }\n // this.table.stateManager.updateSelectPos(-1, -1); 这句有问题 如drag框选鼠标超出表格范围 这里就直接情况是不对的\n return false;\n }\n dealFillSelect(eventArgsSet?: SceneEvent, isSelectMoving?: boolean): boolean {\n const { eventArgs } = eventArgsSet;\n\n if (eventArgs) {\n if (this.table.stateManager.select?.ranges?.length && this.table.stateManager.isFillHandle()) {\n let updateRow;\n let updateCol;\n const currentRange = this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1];\n if (isSelectMoving) {\n if (!isValid(this.table.stateManager.fillHandle.directionRow)) {\n if (\n Math.abs(this.table.stateManager.fillHandle.startY - eventArgsSet.abstractPos.y) >=\n Math.abs(this.table.stateManager.fillHandle.startX - eventArgsSet.abstractPos.x)\n ) {\n this.table.stateManager.fillHandle.directionRow = true;\n } else {\n this.table.stateManager.fillHandle.directionRow = false;\n }\n }\n\n if (\n Math.abs(this.table.stateManager.fillHandle.startY - eventArgsSet.abstractPos.y) >=\n Math.abs(this.table.stateManager.fillHandle.startX - eventArgsSet.abstractPos.x)\n ) {\n if (this.table.stateManager.fillHandle.startY - eventArgsSet.abstractPos.y > 0) {\n this.table.stateManager.fillHandle.direction = 'top';\n } else {\n this.table.stateManager.fillHandle.direction = 'bottom';\n }\n } else {\n if (this.table.stateManager.fillHandle.startX - eventArgsSet.abstractPos.x > 0) {\n this.table.stateManager.fillHandle.direction = 'left';\n } else {\n this.table.stateManager.fillHandle.direction = 'right';\n }\n }\n if (this.table.stateManager.fillHandle.directionRow) {\n updateRow = eventArgs.row;\n updateCol = currentRange.end.col;\n } else {\n updateRow = currentRange.end.row;\n updateCol = eventArgs.col;\n }\n }\n const ctrlMultiSelect = this.table.keyboardOptions?.ctrlMultiSelect ?? true;\n\n this.table.stateManager.updateSelectPos(\n isSelectMoving ? updateCol : currentRange.end.col,\n isSelectMoving ? updateRow : currentRange.end.row,\n true,\n (eventArgs.event.ctrlKey || eventArgs.event.metaKey) && ctrlMultiSelect,\n false,\n !isSelectMoving\n );\n } else {\n const shiftMultiSelect = this.table.keyboardOptions?.shiftMultiSelect ?? true;\n const ctrlMultiSelect = this.table.keyboardOptions?.ctrlMultiSelect ?? true;\n this.table.stateManager.updateSelectPos(\n eventArgs.col,\n eventArgs.row,\n eventArgs.event.shiftKey && shiftMultiSelect,\n (eventArgs.event.ctrlKey || eventArgs.event.metaKey) && ctrlMultiSelect,\n false,\n !isSelectMoving\n );\n }\n return true;\n }\n // this.table.stateManager.updateSelectPos(-1, -1); 这句有问题 如drag框选鼠标超出表格范围 这里就直接情况是不对的\n return false;\n }\n\n // fillSelected(eventArgsSet?: SceneEvent, SelectCellRange?: any, SelectData?: any): any {\n // return;\n // if (!eventArgsSet) {\n // this.table.stateManager.updateSelectPos(-1, -1);\n // return;\n // }\n // const { eventArgs } = eventArgsSet;\n\n // if (eventArgs) {\n // if (eventArgs.target.name === 'checkbox') {\n // return;\n // }\n // let direction;\n\n // if (eventArgs.row >= SelectCellRange.start.row && eventArgs.row <= SelectCellRange.end.row) {\n // if (eventArgs.col > SelectCellRange.end.col) {\n // direction = 'right';\n // } else {\n // direction = 'left';\n // }\n // } else {\n // if (eventArgs.row > SelectCellRange.end.row) {\n // direction = 'down';\n // } else {\n // direction = 'up';\n // }\n // }\n // const values: (string | number)[][] = [];\n // const fillData: any[][] = [];\n // let updaterow;\n // let updatecol;\n // const rows = SelectData.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 // });\n\n // updaterow = SelectCellRange.start.row;\n // updatecol = SelectCellRange.start.col;\n // if (['up', 'left'].indexOf(direction) > -1) {\n // if (direction === 'up') {\n // updaterow = eventArgs.row;\n\n // const fillLength = SelectCellRange.start.row - updaterow;\n\n // for (let i = 0; i < fillLength; i++) {\n // const rowIndex = values.length - 1 - (i % values.length);\n // const newRow = values[rowIndex].slice(0); // 复制一行数据\n\n // fillData.unshift(newRow); // 在填充数据的开头插入新行\n // }\n // } else {\n // updatecol = eventArgs.col;\n // const fillLength = SelectCellRange.start.col - updatecol;\n\n // for (let i = 0; i < values.length; i++) {\n // const newRow = values[i].slice(0); // 复制一行数据\n // while (newRow.length < fillLength) {\n // newRow.unshift(newRow[0]); // 在新行开头向左填充元素\n // }\n // fillData.push(newRow);\n // }\n // }\n // } else {\n // if (direction === 'down') {\n // updaterow = SelectCellRange.end.row + 1;\n // const fillLength = eventArgs.row - SelectCellRange.end.row;\n\n // // 将原始数据添加到新数组中\n // for (let i = 0; i < fillLength; i++) {\n // const rowIndex = i % values.length;\n // const newRow = values[rowIndex]; // 复制一行数据\n // fillData.push(newRow);\n // }\n // } else {\n // const fillLength = eventArgs.col - SelectCellRange.end.col;\n // updatecol = SelectCellRange.end.col + 1;\n\n // values.forEach(function (rowCells: any[]) {\n // const newRow: any[] = [];\n // // 将原始数据按顺序填充到新行中\n // for (let i = 0; i < fillLength; i++) {\n // const dataIndex = i % rowCells.length;\n // newRow.push(rowCells[dataIndex]);\n // }\n\n // // 将新行添加到填充数据中\n // fillData.push(newRow);\n // });\n // }\n // }\n\n // (this.table as ListTableAPI).changeCellValues(updatecol, updaterow, fillData, false);\n // }\n // }\n\n deelTableSelectAll() {\n this.table.stateManager.updateSelectPos(-1, -1, false, false, true);\n this.table.fireListeners(TABLE_EVENT_TYPE.SELECTED_CELL, {\n ranges: this.table.stateManager.select.ranges,\n col: 0,\n row: 0\n });\n }\n\n dealMenuSelect(eventArgsSet: SceneEvent) {\n // do nothing\n }\n\n checkColumnResize(eventArgsSet: SceneEvent, update?: boolean): boolean {\n // return false;\n const { eventArgs } = eventArgsSet;\n\n if ((this.table.internalProps as ListTableProtected).enableTreeStickCell && !eventArgs) {\n return false;\n }\n // if (eventArgs) { // 如果是鼠标处理表格外部如最后一列的后面 也期望可以拖拽列宽\n const resizeCol = this.table.scenegraph.getResizeColAt(\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n eventArgs?.targetCell\n );\n let useerCustomCanResizeColumn: boolean = true;\n if (\n this.table.internalProps.canResizeColumn &&\n !this.table.internalProps.canResizeColumn(resizeCol.col, resizeCol.row, this.table)\n ) {\n useerCustomCanResizeColumn = false;\n }\n\n if (useerCustomCanResizeColumn && this.table._canResizeColumn(resizeCol.col, resizeCol.row) && resizeCol.col >= 0) {\n if (update) {\n this.table.stateManager.startResizeCol(\n resizeCol.col,\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n resizeCol.rightFrozen\n );\n }\n return true;\n }\n if (this.table.stateManager.isResizeCol()) {\n // 结束列调整\n this.table.stateManager.endResizeCol();\n }\n\n // }\n\n return false;\n }\n\n checkRowResize(eventArgsSet: SceneEvent, update?: boolean): boolean {\n const { eventArgs } = eventArgsSet;\n if (eventArgs) {\n const resizeRow = this.table.scenegraph.getResizeRowAt(\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n eventArgs.targetCell\n );\n\n if (this.table._canResizeRow(resizeRow.col, resizeRow.row) && resizeRow.row >= 0) {\n if (update) {\n this.table.stateManager.startResizeRow(\n resizeRow.row,\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n resizeRow.bottomFrozen\n );\n }\n return true;\n }\n }\n\n return false;\n }\n\n cellIsHeaderCheck(eventArgsSet: SceneEvent, update?: boolean): boolean {\n const { eventArgs } = eventArgsSet;\n if (!eventArgs) {\n return false;\n }\n const { col, row, target } = eventArgs;\n if (!this.table.isHeader(col, row)) {\n return false;\n }\n const cellType = this.table.getCellType(eventArgs.col, eventArgs.row);\n if (cellType === 'checkbox' && target.name === 'checkbox') {\n return true;\n }\n return false;\n }\n checkCellFillhandle(eventArgsSet: SceneEvent, update?: boolean): boolean {\n let isFillHandle = false;\n if (typeof this.table.options.excelOptions?.fillHandle === 'function') {\n isFillHandle = this.table.options.excelOptions.fillHandle({\n selectRanges: this.table.stateManager.select.ranges,\n table: this.table\n });\n } else {\n isFillHandle = this.table.options.excelOptions?.fillHandle;\n }\n if (isFillHandle) {\n const { eventArgs } = eventArgsSet;\n if (eventArgs) {\n if (this.table.stateManager.select?.ranges?.length) {\n const lastCol = Math.max(\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].start.col,\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].end.col\n );\n const lastRow = Math.max(\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].start.row,\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].end.row\n );\n const startCol = Math.min(\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].start.col,\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].end.col\n );\n const startRow = Math.min(\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].start.row,\n this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].end.row\n );\n // 计算鼠标与fillhandle矩形中心之间的距离 distanceX 和 distanceY\n // 考虑最后一行和最后一列的特殊情况 逻辑处理需要和update-select-border.ts 中 “计算填充柄小方块的位置” 逻辑处理一致。目前都还有小问题,例如存在冻结的时候。\n let lastCellBoundTargetX;\n if (lastCol < this.table.colCount - 1) {\n const lastCellBound = this.table.scenegraph.highPerformanceGetCell(lastCol, lastRow).globalAABBBounds;\n lastCellBoundTargetX = lastCellBound.x2;\n } else {\n if (startCol === 0) {\n const lastCellBound = this.table.scenegraph.highPerformanceGetCell(0, lastRow).globalAABBBounds;\n lastCellBoundTargetX = lastCellBound.x1;\n } else {\n const lastCellBound = this.table.scenegraph.highPerformanceGetCell(\n startCol - 1,\n lastRow\n ).globalAABBBounds;\n lastCellBoundTargetX = lastCellBound.x2;\n }\n }\n const distanceX = Math.abs(eventArgsSet.abstractPos.x - lastCellBoundTargetX);\n\n let lastCellBoundTargetY;\n if (lastRow < this.table.rowCount - 1) {\n const lastCellBound = this.table.scenegraph.highPerformanceGetCell(lastCol, lastRow).globalAABBBounds;\n lastCellBoundTargetY = lastCellBound.y2;\n } else {\n const lastCellBound = this.table.scenegraph.highPerformanceGetCell(lastCol, startRow - 1).globalAABBBounds;\n lastCellBoundTargetY = lastCellBound.y2;\n }\n const distanceY = Math.abs(eventArgsSet.abstractPos.y - lastCellBoundTargetY);\n\n const squareSize = 6 * 3;\n // 判断鼠标是否落在fillhandle矩形内\n if (\n this.table.stateManager.fillHandle?.isFilling ||\n (distanceX <= squareSize / 2 && distanceY <= squareSize / 2)\n ) {\n if (update) {\n this.table.stateManager.startFillSelect(eventArgsSet.abstractPos.x, eventArgsSet.abstractPos.y);\n }\n return true;\n }\n }\n }\n }\n return false;\n }\n\n dealColumnResize(xInTable: number, yInTable: number) {\n this.table.stateManager.updateResizeCol(xInTable, yInTable);\n }\n\n dealRowResize(xInTable: number, yInTable: number) {\n this.table.stateManager.updateResizeRow(xInTable, yInTable);\n }\n\n checkColumnMover(eventArgsSet: SceneEvent): boolean {\n // return false;\n const { eventArgs } = eventArgsSet;\n if (\n eventArgs &&\n // this.table.isHeader(eventArgs.col, eventArgs.row) &&\n // (checkCellInSelect(eventArgs.col, eventArgs.row, this.table.stateManager.select.ranges) ||\n // this.table.options.select?.disableHeaderSelect ||\n // this.table.options.select?.disableSelect) &&\n // this.table.stateManager.select.cellPosStart.col === eventArgs.col &&\n // this.table.stateManager.select.cellPosStart.row === eventArgs.row &&\n this.table._canDragHeaderPosition(eventArgs.col, eventArgs.row)\n ) {\n this.table.stateManager.startMoveCol(\n eventArgs.col,\n eventArgs.row,\n eventArgsSet.abstractPos.x,\n eventArgsSet.abstractPos.y,\n eventArgs?.event?.nativeEvent\n );\n return true;\n }\n\n return false;\n }\n\n dealColumnMover(x: number, y: number, event: MouseEvent | PointerEvent | TouchEvent) {\n let col = this.table.getColAtRelativePosition(x);\n let row = this.table.getRowAtRelativePosition(y);\n if (col === -1 && this.table.stateManager.columnMove.movingColumnOrRow === 'row') {\n col = 0;\n }\n if (row === -1 && this.table.stateManager.columnMove.movingColumnOrRow === 'column') {\n row = 0;\n }\n // const { eventArgs } = eventArgsSet;\n if (isValid(col) && isValid(row)) {\n this.table.stateManager.updateMoveCol(col, row, x, y, event);\n }\n }\n\n startColumnResize(eventArgsSet: SceneEvent) {\n // do nothing\n }\n\n dealIconClick(e: FederatedPointerEvent, eventArgsSet: SceneEvent): boolean {\n const { eventArgs } = eventArgsSet;\n // if (!eventArgs) {\n // return false;\n // }\n\n const { target, event, col, row } = eventArgs || {\n target: e.target,\n event: e,\n col: -1,\n row: -1\n };\n const icon = target as unknown as Icon;\n\n if (icon.role && icon.role.startsWith('icon-')) {\n this.table.fireListeners(TABLE_EVENT_TYPE.ICON_CLICK, {\n name: icon.name,\n // 默认位置:icon中部正下方\n x: (icon.globalAABBBounds.x1 + icon.globalAABBBounds.x2) / 2,\n y: icon.globalAABBBounds.y2,\n col,\n row,\n funcType: icon.attribute.funcType,\n icon,\n event\n });\n\n return true;\n } else if (target instanceof RichText) {\n const icon = target.pickIcon(event.global);\n if (icon) {\n this.table.fireListeners(TABLE_EVENT_TYPE.ICON_CLICK, {\n name: icon.attribute.id,\n // 默认位置:icon中部正下方\n x: icon.globalX + icon.globalAABBBounds.width() / 2,\n y: icon.globalY + icon.AABBBounds.height(),\n col,\n row,\n funcType: (icon.attribute as any).funcType,\n icon: icon as unknown as Icon,\n event\n });\n return true;\n }\n }\n\n return false;\n }\n /** TODO 其他的事件并么有做remove */\n release() {\n this.clipboardOperationId++;\n this.pasteOperationId++;\n this.resetCutState();\n this.gesture?.release();\n\n // remove global event listerner\n this.globalEventListeners.forEach(item => {\n if (item.env === 'document') {\n document.removeEventListener(item.name, item.callback);\n } else if (item.env === 'body') {\n document.body.removeEventListener(item.name, item.callback);\n } else if (item.env === 'window') {\n window.removeEventListener(item.name, item.callback);\n } else if (item.env === 'vglobal') {\n vglobal.removeEventListener(item.name, item.callback);\n }\n });\n this.globalEventListeners = [];\n }\n\n enableScroll() {\n this._enableTableScroll = true;\n }\n\n disableScroll() {\n this._enableTableScroll = false;\n }\n\n async handleCopy(e: KeyboardEvent, isCut: boolean = false): Promise<CopySnapshot | null> {\n const table = this.table;\n const operationId = ++this.clipboardOperationId;\n this.pasteOperationId++;\n if (!isCut) {\n this.resetCutState();\n }\n const copySnapshot = this.getCopySnapshot(isCut);\n this.copySourceRange = null;\n this.lastCopiedClipboardData = null;\n if (!copySnapshot) {\n this.copySourceRange = null;\n // 没有选中区域,直接返回,不进行复制操作\n return null;\n }\n\n const data = this.table.getCopyValue(\n table.options.keyboardOptions?.getCopyCellValue?.value as (col: number, row: number) => string | number\n );\n if (isValid(data)) {\n e.preventDefault();\n let copySucceeded = false;\n let copiedClipboardData: EventClipboardData | null = null;\n\n const canUseAsyncClipboard = window.isSecureContext && !!navigator.clipboard?.writeText;\n const canWriteRichClipboard = window.isSecureContext && !!navigator.clipboard?.write && !!window.ClipboardItem;\n const hasEventClipboard = !!(e as unknown as ClipboardEvent).clipboardData;\n const dataHTML =\n !canUseAsyncClipboard || canWriteRichClipboard || hasEventClipboard ? this.getCopyDataHTML(data) : null;\n const formulaClipboardData = this.getCopyFormulaPlainData(data, isCut);\n if (formulaClipboardData === null) {\n return null;\n }\n const plainClipboardData = data;\n const internalFormulaText = formulaClipboardData !== plainClipboardData ? formulaClipboardData : undefined;\n const internalFormulaHtmlMarker = internalFormulaText ? this.createInternalFormulaHtmlMarker() : undefined;\n const clipboardHTML =\n dataHTML && internalFormulaHtmlMarker\n ? this.attachInternalFormulaHtmlMarker(dataHTML, internalFormulaHtmlMarker)\n : dataHTML;\n const eventClipboardWriteData = hasEventClipboard\n ? this.setCopyDataToEventClipboard(\n plainClipboardData,\n clipboardHTML,\n e,\n internalFormulaText,\n internalFormulaHtmlMarker\n )\n : null;\n if (eventClipboardWriteData) {\n copiedClipboardData = eventClipboardWriteData;\n this.lastCopiedClipboardData = copiedClipboardData;\n if (isCut) {\n this.lastClipboardContent = this.getClipboardSignature(copiedClipboardData);\n copySnapshot.clipboardData = copiedClipboardData;\n copySnapshot.clipboardSignature = this.lastClipboardContent;\n }\n this.copySourceRange = copySnapshot.copySourceRange;\n this.afterCopyData(data, isCut, copySnapshot, !isCut);\n if (isCut && table.keyboardOptions?.showCopyCellBorder) {\n window.setTimeout(() => {\n if (!this.isClipboardOperationCurrent(operationId)) {\n return;\n }\n setActiveCellRangeState(table, copySnapshot.ranges);\n table.clearSelected();\n }, 0);\n }\n return copySnapshot;\n }\n\n // 确保表格元素获得焦点,避免Document is not focused错误\n const element = table.getElement();\n if (element && element !== document.activeElement) {\n element.focus();\n // 短暂延迟,确保焦点设置完成\n await new Promise(resolve => setTimeout(resolve, 10));\n if (!this.isClipboardOperationCurrent(operationId)) {\n return null;\n }\n }\n\n try {\n // 优先使用现代剪贴板API\n if (navigator.clipboard && navigator.clipboard.writeText) {\n // 尝试获取权限(如果支持)\n let hasPermission = true;\n if (navigator.permissions && navigator.permissions.query) {\n try {\n const permissionState = await navigator.permissions.query({\n name: 'clipboard-write' as PermissionName\n });\n hasPermission = permissionState.state === 'granted';\n if (!this.isClipboardOperationCurrent(operationId)) {\n return null;\n }\n } catch (permissionError) {\n // 权限查询失败,继续尝试写入\n console.warn('无法查询剪贴板权限:', permissionError);\n hasPermission = true; // 假设有权限,让写入操作自己失败\n }\n }\n\n if (hasPermission) {\n // 将复制的数据转为html格式\n\n try {\n if (!this.isClipboardOperationCurrent(operationId)) {\n return null;\n }\n copiedClipboardData = await this.queueClipboardWrite(async () => {\n if (!this.isClipboardOperationCurrent(operationId)) {\n return null;\n }\n // 尝试使用 ClipboardItem(支持富文本)\n if (canWriteRichClipboard && clipboardHTML) {\n await navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([clipboardHTML], { type: 'text/html' }),\n 'text/plain': new Blob([plainClipboardData], { type: 'text/plain' })\n })\n ]);\n return {\n html: clipboardHTML,\n text: plainClipboardData,\n hasHtml: true,\n hasText: true,\n internalFormulaText,\n internalFormulaHtmlMarker\n };\n }\n // 降级到纯文本\n await navigator.clipboard.writeText(plainClipboardData);\n return { html: '', text: plainClipboardData, hasText: true, internalFormulaText };\n });\n if (copiedClipboardData) {\n copySucceeded = true;\n }\n } catch (clipboardError) {\n console.warn('剪贴板写入失败,使用降级方案:', clipboardError);\n // 降级到传统方法\n if (!this.isClipboardOperationCurrent(operationId)) {\n return null;\n }\n copySucceeded = this.fallbackCopyToClipboard(plainClipboardData);\n if (!this.isClipboardOperationCurrent(operationId)) {\n return null;\n }\n if (copySucceeded) {\n copiedClipboardData = { html: '', text: plainClipboardData, hasText: true, internalFormulaText };\n }\n }\n } else {\n // 没有权限,使用降级方案\n copySucceeded = this.fallbackCopyToClipboard(plainClipboardData);\n if (copySucceeded) {\n copiedClipboardData = { html: '', text: plainClipboardData, hasText: true, internalFormulaText };\n }\n }\n } else {\n // 不支持现代剪贴板API,使用降级方案\n copySucceeded = this.fallbackCopyToClipboard(plainClipboardData);\n if (copySucceeded) {\n copiedClipboardData = { html: '', text: plainClipboardData, hasText: true, internalFormulaText };\n }\n }\n\n if (!copySucceeded) {\n return null;\n }\n if (!this.isClipboardOperationCurrent(operationId)) {\n return null;\n }\n\n this.lastCopiedClipboardData = copiedClipboardData;\n if (isCut) {\n this.lastClipboardContent = this.getClipboardSignature(copiedClipboardData);\n copySnapshot.clipboardData = copiedClipboardData;\n copySnapshot.clipboardSignature = this.lastClipboardContent;\n }\n this.copySourceRange = copySnapshot.copySourceRange;\n this.afterCopyData(data, isCut, copySnapshot, false);\n } catch (error) {\n console.error('复制操作失败:', error);\n // 最后的降级方案\n if (!this.isClipboardOperationCurrent(operationId)) {\n return null;\n }\n if (!this.fallbackCopyToClipboard(plainClipboardData)) {\n return null;\n }\n if (!this.isClipboardOperationCurrent(operationId)) {\n return null;\n }\n this.lastCopiedClipboardData = { html: '', text: plainClipboardData, hasText: true, internalFormulaText };\n if (isCut) {\n this.lastClipboardContent = this.getClipboardSignature(this.lastCopiedClipboardData);\n copySnapshot.clipboardData = this.lastCopiedClipboardData;\n copySnapshot.clipboardSignature = this.lastClipboardContent;\n }\n this.copySourceRange = copySnapshot.copySourceRange;\n this.afterCopyData(data, isCut, copySnapshot, false);\n }\n } else {\n return null;\n }\n if (table.keyboardOptions?.showCopyCellBorder) {\n setActiveCellRangeState(table, copySnapshot.ranges);\n table.clearSelected();\n }\n return copySnapshot;\n }\n\n private afterCopyData(\n data: string,\n isCut: boolean,\n copySnapshot: CopySnapshot,\n updateCopyCellBorder: boolean = true\n ): void {\n const table = this.table;\n try {\n table.fireListeners(TABLE_EVENT_TYPE.COPY_DATA, {\n cellRange: this.cloneRanges(copySnapshot.ranges),\n copyData: data,\n isCut\n });\n } catch (error) {\n console.warn('COPY_DATA listener failed:', error);\n }\n if (updateCopyCellBorder && table.keyboardOptions?.showCopyCellBorder) {\n setActiveCellRangeState(table, copySnapshot.ranges);\n table.clearSelected();\n }\n }\n\n private getCopySnapshot(includeCellInfos: boolean): CopySnapshot | null {\n const ranges = this.table.stateManager.select.ranges;\n if (!ranges?.length) {\n return null;\n }\n\n const clonedRanges = ranges.map(range => ({\n start: { col: range.start.col, row: range.start.row },\n end: { col: range.end.col, row: range.end.row }\n }));\n const sourceRange = ranges.length === 1 ? ranges[0] : null;\n const sourceCellMatrix = this.getSourceCellMatrix(clonedRanges);\n const sourceCells = this.getSourceCells(sourceCellMatrix);\n const sourceSize = this.getSourceSize(clonedRanges, sourceCellMatrix);\n\n return {\n ranges: clonedRanges,\n copySourceRange: sourceRange\n ? {\n startCol: Math.min(sourceRange.start.col, sourceRange.end.col),\n startRow: Math.min(sourceRange.start.row, sourceRange.end.row)\n }\n : null,\n cellInfos: includeCellInfos ? this.table.getSelectedCellInfos() : null,\n sourceCells,\n sourceCellMatrix,\n sourceColCount: sourceSize.colCount,\n sourceRowCount: sourceSize.rowCount,\n clipboardData: null,\n clipboardSignature: ''\n };\n }\n\n private cloneRanges(ranges: ClipboardRange[]): ClipboardRange[] {\n return ranges.map(range => ({\n start: { col: range.start.col, row: range.start.row },\n end: { col: range.end.col, row: range.end.row }\n }));\n }\n\n private getSourceCellMatrix(ranges: ClipboardRange[]): SourceCellMatrix {\n const table = this.table as ListTableAPI;\n const createSourceCell = (col: number, row: number): SourceCell => {\n const recordShowIndex = table.getRecordShowIndexByCell?.(col, row);\n const recordIndex = recordShowIndex >= 0 ? (table as any).dataSource?.getIndexKey?.(recordShowIndex) : undefined;\n const field = table.internalProps?.layoutMap?.getBody?.(col, row)?.field;\n return { col, row, recordIndex, field, value: table.getCellOriginValue?.(col, row) };\n };\n if (ranges.length === 1) {\n const range = ranges[0];\n const startCol = Math.min(range.start.col, range.end.col);\n const endCol = Math.max(range.start.col, range.end.col);\n const startRow = Math.min(range.start.row, range.end.row);\n const endRow = Math.max(range.start.row, range.end.row);\n const sourceCellMatrix: SourceCellMatrix = [];\n for (let row = startRow; row <= endRow; row++) {\n const rowCells: (SourceCell | null)[] = [];\n for (let col = startCol; col <= endCol; col++) {\n rowCells.push(createSourceCell(col, row));\n }\n sourceCellMatrix.push(rowCells);\n }\n return sourceCellMatrix;\n }\n\n let minCol = Math.min(ranges[0].start.col, ranges[0].end.col);\n let maxCol = Math.max(ranges[0].start.col, ranges[0].end.col);\n let minRow = Math.min(ranges[0].start.row, ranges[0].end.row);\n let maxRow = Math.max(ranges[0].start.row, ranges[0].end.row);\n ranges.forEach(range => {\n minCol = Math.min(minCol, range.start.col, range.end.col);\n maxCol = Math.max(maxCol, range.start.col, range.end.col);\n minRow = Math.min(minRow, range.start.row, range.end.row);\n maxRow = Math.max(maxRow, range.start.row, range.end.row);\n });\n const isExistDataInRow = (row: number) =>\n ranges.some(range => {\n const startRow = Math.min(range.start.row, range.end.row);\n const endRow = Math.max(range.start.row, range.end.row);\n return startRow <= row && endRow >= row;\n });\n const isExistDataInCol = (col: number) =>\n ranges.some(range => {\n const startCol = Math.min(range.start.col, range.end.col);\n const endCol = Math.max(range.start.col, range.end.col);\n return startCol <= col && endCol >= col;\n });\n const getRangeExistDataInCell = (col: number, row: number) =>\n ranges.some(range => {\n const startRow = Math.min(range.start.row, range.end.row);\n const endRow = Math.max(range.start.row, range.end.row);\n const startCol = Math.min(range.start.col, range.end.col);\n const endCol = Math.max(range.start.col, range.end.col);\n return startCol <= col && endCol >= col && startRow <= row && endRow >= row;\n });\n const sourceCellMatrix: SourceCellMatrix = [];\n for (let row = minRow; row <= maxRow; row++) {\n if (!isExistDataInRow(row)) {\n continue;\n }\n const rowCells: (SourceCell | null)[] = [];\n for (let col = minCol; col <= maxCol; col++) {\n if (!isExistDataInCol(col)) {\n continue;\n }\n rowCells.push(getRangeExistDataInCell(col, row) ? createSourceCell(col, row) : null);\n }\n sourceCellMatrix.push(rowCells);\n }\n return sourceCellMatrix;\n }\n\n private getSourceCells(sourceCellMatrix: SourceCellMatrix): SourceCell[] {\n const sourceCells: SourceCell[] = [];\n for (let row = 0; row < sourceCellMatrix.length; row++) {\n for (let col = 0; col < sourceCellMatrix[row].length; col++) {\n const sourceCell = sourceCellMatrix[row][col];\n if (sourceCell) {\n sourceCells.push(sourceCell);\n }\n }\n }\n return sourceCells;\n }\n\n private getSourceSize(\n ranges: ClipboardRange[],\n sourceCellMatrix: SourceCellMatrix\n ): { colCount: number; rowCount: number } {\n if (sourceCellMatrix.length) {\n return {\n colCount: sourceCellMatrix[0]?.length ?? 0,\n rowCount: sourceCellMatrix.length\n };\n }\n if (ranges.length === 1) {\n const range = ranges[0];\n return {\n colCount: Math.abs(range.end.col - range.start.col) + 1,\n rowCount: Math.abs(range.end.row - range.start.row) + 1\n };\n }\n return { colCount: 0, rowCount: 0 };\n }\n\n private getClipboardSignature(data: EventClipboardData | null): string {\n return data\n ? JSON.stringify({\n html: data.hasHtml ? data.html : null,\n text: data.hasText ? data.text : null\n })\n : '';\n }\n\n private isClipboardOperationCurrent(operationId: number): boolean {\n return operationId === this.clipboardOperationId && !this.table.isReleased;\n }\n\n private isPasteOperationCurrent(operationId: number | undefined): boolean {\n return (operationId === undefined || operationId === this.pasteOperationId) && !this.table.isReleased;\n }\n\n private async queueClipboardWrite(\n write: () => Promise<EventClipboardData | null>\n ): Promise<EventClipboardData | null> {\n const previousWrite = this.clipboardWritePromise;\n let settleCurrentWrite: () => void = () => {\n return;\n };\n this.clipboardWritePromise = previousWrite\n .catch(() => {\n // Ignore stale write failures so the latest copy can still proceed.\n })\n .then(\n () =>\n new Promise<void>(resolve => {\n settleCurrentWrite = resolve;\n })\n );\n await previousWrite.catch(() => {\n // Previous clipboard write failure should not block later copy attempts.\n });\n try {\n return await write();\n } finally {\n settleCurrentWrite();\n }\n }\n\n private isClipboardDataChanged(clipboardData: EventClipboardData | null, cutState: CutState): boolean | null {\n if (!clipboardData || clipboardData.readFailed) {\n return null;\n }\n const sourceData = cutState.clipboardData;\n if (!sourceData) {\n return this.getClipboardSignature(clipboardData) !== cutState.clipboardSignature;\n }\n if (sourceData.hasHtml && !clipboardData.hasHtml) {\n return null;\n }\n if (sourceData.hasText && !clipboardData.hasText) {\n return null;\n }\n let hasComparableType = false;\n if (clipboardData.hasHtml && sourceData.hasHtml) {\n hasComparableType = true;\n if (clipboardData.html !== sourceData.html) {\n return true;\n }\n }\n if (clipboardData.hasText && sourceData.hasText) {\n hasComparableType = true;\n if (clipboardData.text !== sourceData.text) {\n return true;\n }\n }\n if (hasComparableType) {\n return false;\n }\n return null;\n }\n\n private isClipboardDataSameAsLastCopy(clipboardData: EventClipboardData | null): boolean {\n const sourceData = this.lastCopiedClipboardData;\n if (!clipboardData || clipboardData.readFailed || !sourceData) {\n return false;\n }\n return this.isClipboardDataSameBySignature(clipboardData, sourceData);\n }\n\n private isClipboardDataSameBySignature(clipboardData: EventClipboardData, sourceData: EventClipboardData): boolean {\n return (\n sourceData.hasHtml === clipboardData.hasHtml &&\n sourceData.hasText === clipboardData.hasText &&\n (!sourceData.hasHtml || sourceData.html === clipboardData.html) &&\n (!sourceData.hasText || sourceData.text === clipboardData.text)\n );\n }\n\n private getCopyFormulaPlainData(data: string, isCut: boolean): string | null {\n const table = this.table;\n if (table.stateManager.select.ranges.length !== 1 || !table.options.keyboardOptions?.getCopyCellValue?.html) {\n return data;\n }\n try {\n return this.table.getCopyValue(\n table.options.keyboardOptions.getCopyCellValue.html as (col: number, row: number) => string | number\n );\n } catch (error) {\n console.warn('复制公式纯文本数据生成失败,使用显示值:', error);\n return isCut ? null : data;\n }\n }\n\n private getCopyDataHTML(data: string): string | null {\n const table = this.table;\n let htmlValues = data;\n try {\n if (\n table.stateManager.select.ranges.length === 1 && //只有一个选区的时候采取解析公式(和excel一致)\n table.options.keyboardOptions?.getCopyCellValue?.html\n ) {\n htmlValues = this.table.getCopyValue(\n table.options.keyboardOptions?.getCopyCellValue.html as (col: number, row: number) => string | number\n );\n }\n return setDataToHTML(htmlValues);\n } catch (error) {\n console.warn('复制HTML数据生成失败,使用纯文本内容:', error);\n try {\n return setDataToHTML(data);\n } catch (fallbackError) {\n console.warn('复制HTML降级数据生成失败:', fallbackError);\n return null;\n }\n }\n }\n\n private createInternalFormulaHtmlMarker(): string {\n return `vtable-formula-${Date.now()}-${++this.internalFormulaHtmlMarkerId}`;\n }\n\n private attachInternalFormulaHtmlMarker(html: string, marker: string): string {\n return `${html}<!--${marker}-->`;\n }\n\n private setCopyDataToEventClipboard(\n data: string,\n dataHTML: string | null,\n e: KeyboardEvent,\n internalFormulaText?: string,\n internalFormulaHtmlMarker?: string\n ): EventClipboardData | null {\n const clipboardData = (e as unknown as ClipboardEvent).clipboardData;\n if (!clipboardData) {\n return null;\n }\n\n try {\n clipboardData.setData('text/plain', data);\n const copiedClipboardData: EventClipboardData = { html: '', text: data, hasText: true, internalFormulaText };\n if (dataHTML) {\n try {\n clipboardData.setData('text/html', dataHTML);\n copiedClipboardData.html = dataHTML;\n copiedClipboardData.hasHtml = true;\n copiedClipboardData.internalFormulaHtmlMarker = internalFormulaHtmlMarker;\n } catch (error) {\n console.warn('事件剪贴板HTML写入失败,保留纯文本数据:', error);\n }\n }\n return copiedClipboardData;\n } catch (error) {\n console.warn('事件剪贴板写入失败,使用降级方案:', error);\n return null;\n }\n }\n\n // 降级复制方案\n private fallbackCopyToClipboard(data: string): boolean {\n try {\n // 确保当前文档有焦点\n if (document.activeElement && document.activeElement !== document.body) {\n (document.activeElement as HTMLElement).blur();\n }\n\n // 尝试使用 document.execCommand\n const textArea = document.createElement('textarea');\n textArea.value = data;\n textArea.style.position = 'fixed';\n textArea.style.left = '-999999px';\n textArea.style.top = '-999999px';\n textArea.style.opacity = '0';\n textArea.setAttribute('readonly', '');\n textArea.setAttribute('aria-hidden', 'true');\n document.body.appendChild(textArea);\n\n // 强制聚焦并选中文本\n textArea.focus();\n textArea.select();\n textArea.setSelectionRange(0, data.length);\n\n try {\n const successful = document.execCommand('copy');\n if (!successful) {\n console.warn('execCommand复制返回false,可能不被支持');\n }\n return successful;\n } catch (execError) {\n console.warn('execCommand复制失败:', execError);\n } finally {\n document.body.removeChild(textArea);\n }\n } catch (error) {\n console.error('降级复制方案失败:', error);\n }\n return false;\n }\n\n async handleCut(e: KeyboardEvent) {\n const copySnapshot = await this.handleCopy(e, true);\n if (!copySnapshot) {\n return;\n }\n const cutState: CutState = {\n id: ++this.cutOperationId,\n ranges: this.cloneRanges(copySnapshot.ranges),\n cellInfos: copySnapshot.cellInfos,\n sourceCells: copySnapshot.sourceCells,\n sourceCellMatrix: copySnapshot.sourceCellMatrix,\n sourceColCount: copySnapshot.sourceColCount,\n sourceRowCount: copySnapshot.sourceRowCount,\n clipboardData: copySnapshot.clipboardData,\n clipboardSignature: copySnapshot.clipboardSignature,\n copySourceRange: copySnapshot.copySourceRange,\n isSingleRange: copySnapshot.ranges.length === 1\n };\n this.cutWaitPaste = true;\n this.activeCutState = cutState;\n this.cutCellRange = cutState.cellInfos;\n this.cutRanges = cutState.ranges;\n // 设置自动超时,防止剪切状态无限期保持\n if (this.clipboardCheckTimer) {\n clearTimeout(this.clipboardCheckTimer);\n }\n\n // 30秒后自动取消剪切状态\n this.clipboardCheckTimer = window.setTimeout(() => {\n if (this.cutWaitPaste) {\n // 剪切操作超时,重置剪切状态\n this.resetCutState();\n }\n }, 30000); // 30秒超时\n\n this.lastClipboardContent = cutState.clipboardSignature;\n }\n\n // 执行实际的粘贴操作\n handlePaste(e: KeyboardEvent): void {\n const pasteOperationId = ++this.pasteOperationId;\n const pasteRange = this.getPasteRange();\n if (!pasteRange) {\n return;\n }\n const eventClipboardData = this.getEventClipboardData(e);\n const pasteCopySourceRange = this.copySourceRange;\n if (!this.cutWaitPaste) {\n // 非剪切状态,直接粘贴\n this.readClipboardDataForPaste(eventClipboardData)\n .then(clipboardData => {\n if (!this.isPasteOperationCurrent(pasteOperationId)) {\n return;\n }\n const copySourceRange = this.isClipboardDataSameAsLastCopy(clipboardData) ? pasteCopySourceRange : null;\n this.executePaste(clipboardData, {\n pasteRange,\n copySourceRange,\n pasteOperationId\n });\n })\n .catch(error => {\n console.warn('读取剪贴板数据失败:', error);\n });\n return;\n }\n\n const cutState = this.activeCutState;\n if (!cutState) {\n this.executePaste(eventClipboardData, {\n pasteRange,\n copySourceRange: this.isClipboardDataSameAsLastCopy(eventClipboardData) ? pasteCopySourceRange : null,\n pasteOperationId\n });\n return;\n }\n\n this.readClipboardDataForPaste(eventClipboardData)\n .then(async clipboardData => {\n if (!this.isPasteOperationCurrent(pasteOperationId) || this.activeCutState?.id !== cutState.id) {\n return;\n }\n const changed = this.isClipboardDataChanged(clipboardData, cutState);\n if (changed === null) {\n await this.executePaste(clipboardData, {\n pasteRange,\n copySourceRange: this.isClipboardDataSameAsLastCopy(clipboardData) ? pasteCopySourceRange : null,\n pasteOperationId\n });\n return;\n }\n const pasteResult = await this.executePaste(clipboardData, {\n pasteRange,\n copySourceRange: changed ? null : cutState.copySourceRange,\n cutState: changed ? null : cutState,\n pasteOperationId\n });\n if (!this.isPasteOperationCurrent(pasteOperationId) || this.activeCutState?.id !== cutState.id) {\n return;\n }\n if (!changed && pasteResult.pasted && this.activeCutState?.id === cutState.id) {\n if (pasteResult.migratedSourceCells.length === cutState.sourceCells.length) {\n const cleared = await this.clearCutArea(pasteResult.migratedSourceCells, pasteResult.changedCells);\n if (!cleared) {\n this.resetCutState();\n return;\n }\n if (this.activeCutState?.id === cutState.id) {\n this.resetCutState();\n }\n }\n return;\n }\n if (changed && this.activeCutState?.id === cutState.id) {\n this.resetCutState();\n }\n })\n .catch(async () => {\n // 如果无法检测剪贴板变化(例如权限问题),则保守地执行粘贴但不清空选中区域\n if (!this.isPasteOperationCurrent(pasteOperationId)) {\n return;\n }\n await this.executePaste(eventClipboardData, {\n pasteRange,\n copySourceRange: this.isClipboardDataSameAsLastCopy(eventClipboardData) ? pasteCopySourceRange : null,\n pasteOperationId\n });\n });\n }\n private async executePaste(\n clipboardData: EventClipboardData | null,\n pasteContext: PasteContext\n ): Promise<PasteWriteResult> {\n const table = this.table;\n const emptyResult = this.getEmptyPasteResult();\n const pasteClipboardData = this.getPasteClipboardData(clipboardData, pasteContext);\n if (\n !this.isPasteOperationCurrent(pasteContext.pasteOperationId) ||\n (table as ListTableAPI).editorManager?.editingEditor\n ) {\n return emptyResult;\n }\n if (this.pasteWriteInProgress) {\n await this.pasteWritePromise.catch(() => {\n // Previous paste failures are handled by their own task.\n });\n if (\n !this.isPasteOperationCurrent(pasteContext.pasteOperationId) ||\n (table as ListTableAPI).editorManager?.editingEditor\n ) {\n return emptyResult;\n }\n }\n let pasteResult = emptyResult;\n let settlePasteWrite: () => void = () => {\n return;\n };\n this.pasteWritePromise = new Promise<void>(resolve => {\n settlePasteWrite = resolve;\n });\n this.pasteWriteInProgress = true;\n try {\n if ((table as ListTableAPI).changeCellValues) {\n try {\n if (pasteClipboardData?.html) {\n try {\n const htmlResult = await this.processPastedHTML(pasteClipboardData.html, pasteContext);\n if (htmlResult.pasted) {\n pasteResult = htmlResult;\n return pasteResult;\n }\n } catch (error) {\n console.warn('粘贴HTML数据失败:', error);\n if (/<table\\b/i.test(pasteClipboardData.html)) {\n return emptyResult;\n }\n }\n }\n if (pasteClipboardData?.hasText || pasteClipboardData?.text) {\n pasteResult = await this.processPastedText(\n pasteClipboardData.internalFormulaText ?? pasteClipboardData.text,\n pasteContext\n );\n return pasteResult;\n }\n } catch (error) {\n console.error('粘贴操作失败:', error);\n if (pasteContext.cutState) {\n this.resetCutState();\n }\n }\n }\n return pasteResult;\n } finally {\n this.pasteWriteInProgress = false;\n settlePasteWrite();\n if (!pasteContext.cutState && table.keyboardOptions?.showCopyCellBorder) {\n clearActiveCellRangeState(table);\n }\n }\n }\n\n private getPasteClipboardData(\n clipboardData: EventClipboardData | null,\n pasteContext: PasteContext\n ): EventClipboardData | null {\n if (!clipboardData || !pasteContext.copySourceRange) {\n return clipboardData;\n }\n const sourceData = pasteContext.cutState?.clipboardData ?? this.lastCopiedClipboardData;\n if (\n !sourceData?.internalFormulaText ||\n !sourceData.internalFormulaHtmlMarker ||\n !sourceData.hasHtml ||\n !clipboardData.hasHtml ||\n !this.isClipboardDataSameBySignature(clipboardData, sourceData) ||\n !clipboardData.html.includes(sourceData.internalFormulaHtmlMarker)\n ) {\n return clipboardData;\n }\n return {\n ...clipboardData,\n internalFormulaText: sourceData.internalFormulaText\n };\n }\n\n private getPasteRange(): PasteRange | null {\n const ranges = this.table.stateManager.select.ranges;\n if (!ranges?.length) {\n return null;\n }\n const selectRangeLength = ranges.length;\n const range = ranges[selectRangeLength - 1];\n return {\n col: Math.min(range.start.col, range.end.col),\n row: Math.min(range.start.row, range.end.row),\n maxCol: Math.max(range.start.col, range.end.col),\n maxRow: Math.max(range.start.row, range.end.row)\n };\n }\n\n // 降级粘贴方案\n private getEventClipboardData(e: KeyboardEvent): EventClipboardData | null {\n const clipboardData = (e as unknown as ClipboardEvent).clipboardData || (window as any).clipboardData;\n if (!clipboardData) {\n return null;\n }\n try {\n const types = Array.from(clipboardData.types ?? []);\n const html = clipboardData.getData('text/html') || '';\n const text =\n clipboardData.getData('text/plain') || clipboardData.getData('text') || clipboardData.getData('Text') || '';\n const hasHtml = types.includes('text/html') || !!html;\n const hasText = types.includes('text/plain') || types.includes('text') || types.includes('Text') || !!text;\n return {\n html,\n text,\n hasHtml,\n hasText\n };\n } catch (error) {\n console.warn('读取事件剪贴板数据失败:', error);\n return { html: '', text: '', readFailed: true };\n }\n }\n\n private async readClipboardDataForPaste(\n eventClipboardData: EventClipboardData | null\n ): Promise<EventClipboardData | null> {\n if (eventClipboardData?.readFailed || eventClipboardData?.hasHtml || eventClipboardData?.hasText) {\n return eventClipboardData;\n }\n if (navigator.clipboard?.read) {\n try {\n const clipboardItems = await navigator.clipboard.read();\n const clipboardData: EventClipboardData = { html: '', text: '' };\n for (const item of clipboardItems) {\n if (!clipboardData.html && item.types.includes('text/html')) {\n try {\n clipboardData.html = await (await item.getType('text/html')).text();\n clipboardData.hasHtml = true;\n } catch (error) {\n console.warn('读取HTML剪贴板数据失败:', error);\n }\n }\n if (!clipboardData.text && item.types.includes('text/plain')) {\n try {\n clipboardData.text = await (await item.getType('text/plain')).text();\n clipboardData.hasText = true;\n } catch (error) {\n console.warn('读取纯文本剪贴板数据失败:', error);\n }\n }\n }\n if (clipboardData.hasHtml || clipboardData.hasText) {\n return clipboardData;\n }\n } catch (error) {\n console.warn('现代剪贴板API读取失败,使用事件剪贴板数据:', error);\n }\n }\n if (navigator.clipboard?.readText) {\n try {\n return { html: '', text: await navigator.clipboard.readText(), hasText: true };\n } catch (error) {\n console.warn('剪贴板纯文本读取失败,使用事件剪贴板数据:', error);\n }\n }\n return eventClipboardData ?? { html: '', text: '', readFailed: true };\n }\n\n private decodeHTMLCellValue(cellHTML: string): string {\n const template = document.createElement('template');\n template.innerHTML = cellHTML.replace(/<br\\b[^>]*>(?:\\r\\n|\\r|\\n)?/gim, '\\n').replace(/&nbsp;/gi, ' ');\n return template.content.textContent ?? '';\n }\n\n private async processPastedHTML(pastedData: string, pasteContext: PasteContext): Promise<PasteWriteResult> {\n // const regex = /<tr[^>]*>(.*?)<\\/tr>/gs; // 匹配<tr>标签及其内容\n const regex = /<tr[^>]*>([\\s\\S]*?)<\\/tr>/gi; // for webpack3\n // const cellRegex = /<td[^>]*>(.*?)<\\/td>/gs; // 匹配<td>标签及其内容\n const cellRegex = /<t[dh][^>]*>([\\s\\S]*?)<\\/t[dh]>/gi; // for webpack3\n const table = this.table;\n const pasteRange = pasteContext.pasteRange;\n const { col, row, maxCol, maxRow } = pasteRange;\n let pasteValuesColCount = 0;\n let pasteValuesRowCount = 0;\n let values: (string | number)[][] = [];\n\n if (!pastedData || !/<table\\b/i.test(pastedData)) {\n return this.getEmptyPasteResult();\n }\n\n // 解析html数据\n const matches = Array.from(pastedData.matchAll(regex)) as RegExpMatchArray[];\n for (const match of matches) {\n const rowContent = match[1]; // 获取<tr>标签中的内容\n const cellMatches: RegExpMatchArray[] = Array.from(rowContent.matchAll(cellRegex)); // 获取<td>/<th>标签及其内容\n if (!cellMatches.length) {\n continue;\n }\n const rowValues = cellMatches.map(cellMatch => {\n return this.decodeHTMLCellValue(cellMatch[1]);\n // .trim(); // 去除首尾空格\n });\n values.push(rowValues);\n pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);\n }\n\n pasteValuesRowCount = values.length ?? 0;\n if (!pasteValuesRowCount || !pasteValuesColCount) {\n return this.getEmptyPasteResult();\n }\n values = this.handlePasteValues(\n values,\n pasteValuesRowCount,\n pasteValuesColCount,\n maxRow - row + 1,\n maxCol - col + 1\n );\n let processedValues;\n // 检查是否支持公式处理(针对vtable-sheet)\n if (table.options.keyboardOptions?.processFormulaBeforePaste && pasteContext.copySourceRange) {\n // 使用复制时记录的源位置(而不是当前的选中位置)\n processedValues = table.options.keyboardOptions.processFormulaBeforePaste(\n values,\n pasteContext.copySourceRange.startCol,\n pasteContext.copySourceRange.startRow,\n col,\n row\n );\n }\n\n const valuesToPaste = processedValues ? processedValues : values;\n const targetCells = this.getPasteTargetCells(pasteRange, valuesToPaste);\n if (!this.isPasteOperationCurrent(pasteContext.pasteOperationId)) {\n return this.getEmptyPasteResult();\n }\n if (pasteContext.cutState) {\n const validatedCellResults = await this.validatePasteTargetCells(pasteRange, valuesToPaste);\n if (!this.isPasteOperationCurrent(pasteContext.pasteOperationId)) {\n return this.getEmptyPasteResult();\n }\n if (!this.isFullPasteAllowed(valuesToPaste, validatedCellResults)) {\n return this.getEmptyPasteResult(validatedCellResults);\n }\n }\n const rawChangedCellResults = await (table as ListTableAPI).changeCellValues(\n col,\n row,\n valuesToPaste,\n !pasteContext.cutState,\n true,\n undefined,\n () => !this.isPasteOperationCurrent(pasteContext.pasteOperationId)\n );\n if (!this.isPasteOperationCurrent(pasteContext.pasteOperationId)) {\n return this.getEmptyPasteResult();\n }\n const changedCellResults = this.normalizeChangedCellResults(rawChangedCellResults, pasteRange, valuesToPaste);\n const changedCells = this.getChangedCells(targetCells, changedCellResults);\n const migratedSourceCells = this.getMigratedSourceCells(pasteContext.cutState, changedCellResults);\n if (!changedCells.length) {\n return this.getEmptyPasteResult(changedCellResults);\n }\n this.firePastedDataEvent(col, row, valuesToPaste, changedCellResults);\n return { pasted: true, changedCellResults, changedCells, migratedSourceCells };\n }\n\n // 处理粘贴的文本数据\n private async processPastedText(pastedData: string, pasteContext: PasteContext): Promise<PasteWriteResult> {\n const table = this.table;\n const pasteRange = pasteContext.pasteRange;\n const { col, row, maxCol, maxRow } = pasteRange;\n let values = this.parsePlainTextPastedData(pastedData);\n const pasteValuesRowCount = values.length;\n const pasteValuesColCount = Math.max(...values.map(rowValues => rowValues.length));\n if (!pasteValuesRowCount || !pasteValuesColCount) {\n return this.getEmptyPasteResult();\n }\n values = this.handlePasteValues(\n values,\n pasteValuesRowCount,\n pasteValuesColCount,\n maxRow - row + 1,\n maxCol - col + 1\n );\n let processedValues;\n // 检查是否支持公式处理(针对vtable-sheet)\n if (table.options.keyboardOptions?.processFormulaBeforePaste && pasteContext.copySourceRange) {\n // 利用复制时记录的源位置,对粘贴的数据进行公式处理\n processedValues = table.options.keyboardOptions.processFormulaBeforePaste(\n values,\n pasteContext.copySourceRange.startCol,\n pasteContext.copySourceRange.startRow,\n col,\n row\n );\n }\n\n const valuesToPaste = processedValues ? processedValues : values;\n const targetCells = this.getPasteTargetCells(pasteRange, valuesToPaste);\n // 保持与 navigator.clipboard.read 中的操作一致\n if (!this.isPasteOperationCurrent(pasteContext.pasteOperationId)) {\n return this.getEmptyPasteResult();\n }\n if (pasteContext.cutState) {\n const validatedCellResults = await this.validatePasteTargetCells(pasteRange, valuesToPaste);\n if (!this.isPasteOperationCurrent(pasteContext.pasteOperationId)) {\n return this.getEmptyPasteResult();\n }\n if (!this.isFullPasteAllowed(valuesToPaste, validatedCellResults)) {\n return this.getEmptyPasteResult(validatedCellResults);\n }\n }\n const rawChangedCellResults = await (table as ListTableAPI).changeCellValues(\n col,\n row,\n valuesToPaste,\n !pasteContext.cutState,\n true,\n undefined,\n () => !this.isPasteOperationCurrent(pasteContext.pasteOperationId)\n );\n if (!this.isPasteOperationCurrent(pasteContext.pasteOperationId)) {\n return this.getEmptyPasteResult();\n }\n const changedCellResults = this.normalizeChangedCellResults(rawChangedCellResults, pasteRange, valuesToPaste);\n const changedCells = this.getChangedCells(targetCells, changedCellResults);\n const migratedSourceCells = this.getMigratedSourceCells(pasteContext.cutState, changedCellResults);\n if (!changedCells.length) {\n return this.getEmptyPasteResult(changedCellResults);\n }\n this.firePastedDataEvent(col, row, valuesToPaste, changedCellResults);\n return { pasted: true, changedCellResults, changedCells, migratedSourceCells };\n }\n\n private firePastedDataEvent(\n col: number,\n row: number,\n pasteData: (string | number)[][],\n changedCellResults: any\n ): void {\n const table = this.table;\n if (!table.hasListeners(TABLE_EVENT_TYPE.PASTED_DATA)) {\n return;\n }\n try {\n table.fireListeners(TABLE_EVENT_TYPE.PASTED_DATA, {\n col,\n row,\n pasteData,\n changedCellResults\n });\n } catch (error) {\n console.warn('PASTED_DATA listener failed:', error);\n }\n }\n private getEmptyPasteResult(changedCellResults: boolean[][] = []): PasteWriteResult {\n return {\n pasted: false,\n changedCellResults,\n changedCells: [],\n migratedSourceCells: []\n };\n }\n\n private getPasteTargetCells(pasteRange: PasteRange, values: (string | number)[][]): SourceCell[][] {\n const targetCells: SourceCell[][] = [];\n for (let rowIndex = 0; rowIndex < values.length; rowIndex++) {\n targetCells[rowIndex] = [];\n for (let colIndex = 0; colIndex < values[rowIndex].length; colIndex++) {\n targetCells[rowIndex][colIndex] = this.getCellIdentity(pasteRange.col + colIndex, pasteRange.row + rowIndex);\n }\n }\n return targetCells;\n }\n\n private getChangedCells(targetCells: SourceCell[][], changedCellResults: boolean[][]): SourceCell[] {\n const changedCells: SourceCell[] = [];\n for (let rowIndex = 0; rowIndex < changedCellResults.length; rowIndex++) {\n for (let colIndex = 0; colIndex < (changedCellResults[rowIndex]?.length ?? 0); colIndex++) {\n if (changedCellResults[rowIndex][colIndex] && targetCells[rowIndex]?.[colIndex]) {\n changedCells.push(targetCells[rowIndex][colIndex]);\n }\n }\n }\n return changedCells;\n }\n\n private normalizeChangedCellResults(\n changedCellResults: boolean[][] | void,\n pasteRange: PasteRange,\n values: (string | number)[][]\n ): boolean[][] {\n if (Array.isArray(changedCellResults)) {\n return changedCellResults;\n }\n const table = this.table as any;\n return values.map((rowValues, rowIndex) =>\n rowValues.map((_value, colIndex) => {\n const targetCol = pasteRange.col + colIndex;\n const targetRow = pasteRange.row + rowIndex;\n return (\n targetCol < table.colCount &&\n targetRow < table.rowCount &&\n (!table.isHasEditorDefine || table.isHasEditorDefine(targetCol, targetRow))\n );\n })\n );\n }\n\n private async validatePasteTargetCells(pasteRange: PasteRange, values: (string | number)[][]): Promise<boolean[][]> {\n const table = this.table as ListTableAPI;\n const changedCellResults: boolean[][] = [];\n for (let rowIndex = 0; rowIndex < values.length; rowIndex++) {\n changedCellResults[rowIndex] = [];\n for (let colIndex = 0; colIndex < values[rowIndex].length; colIndex++) {\n const targetCol = pasteRange.col + colIndex;\n const targetRow = pasteRange.row + rowIndex;\n const tableAny = table as any;\n let canChange =\n targetCol < tableAny.colCount &&\n targetRow < tableAny.rowCount &&\n (!tableAny.isHasEditorDefine || tableAny.isHasEditorDefine(targetCol, targetRow));\n if (canChange) {\n const editor = tableAny.getEditor?.(targetCol, targetRow);\n const oldValue = table.getCellOriginValue?.(targetCol, targetRow);\n const validateResult =\n editor?.validateValue?.(values[rowIndex][colIndex], oldValue, { col: targetCol, row: targetRow }, table) ??\n true;\n const resolvedValidateResult =\n validateResult && typeof (validateResult as Promise<any>).then === 'function'\n ? await validateResult\n : validateResult;\n canChange =\n resolvedValidateResult === true ||\n resolvedValidateResult === 'validate-exit' ||\n resolvedValidateResult === 'validate-not-exit';\n }\n changedCellResults[rowIndex][colIndex] = canChange;\n }\n }\n return changedCellResults;\n }\n\n private isFullPasteAllowed(values: (string | number)[][], changedCellResults: boolean[][]): boolean {\n return values.every((rowValues, rowIndex) =>\n rowValues.every((_value, colIndex) => changedCellResults[rowIndex]?.[colIndex] === true)\n );\n }\n\n private getMigratedSourceCells(cutState: CutState | null | undefined, changedCellResults: boolean[][]): SourceCell[] {\n if (!cutState?.sourceCells.length || !cutState.sourceColCount || !cutState.sourceRowCount) {\n return [];\n }\n const migratedSourceCells: SourceCell[] = [];\n const migratedKeys = new Set<string>();\n if (!cutState.isSingleRange) {\n for (let rowIndex = 0; rowIndex < changedCellResults.length; rowIndex++) {\n for (let colIndex = 0; colIndex < (changedCellResults[rowIndex]?.length ?? 0); colIndex++) {\n if (!changedCellResults[rowIndex][colIndex]) {\n continue;\n }\n const sourceRow = rowIndex % cutState.sourceRowCount;\n const sourceCol = colIndex % cutState.sourceColCount;\n const sourceCell = cutState.sourceCellMatrix[sourceRow]?.[sourceCol];\n if (!sourceCell) {\n continue;\n }\n const sourceKey = this.getCellKey(sourceCell);\n if (!migratedKeys.has(sourceKey)) {\n migratedKeys.add(sourceKey);\n migratedSourceCells.push(sourceCell);\n }\n }\n }\n return migratedSourceCells.length === cutState.sourceCells.length ? migratedSourceCells : [];\n }\n for (let rowIndex = 0; rowIndex < changedCellResults.length; rowIndex++) {\n for (let colIndex = 0; colIndex < (changedCellResults[rowIndex]?.length ?? 0); colIndex++) {\n if (!changedCellResults[rowIndex][colIndex]) {\n continue;\n }\n const sourceRow = rowIndex % cutState.sourceRowCount;\n const sourceCol = colIndex % cutState.sourceColCount;\n const sourceIndex = sourceRow * cutState.sourceColCount + sourceCol;\n const sourceCell = cutState.sourceCells[sourceIndex];\n if (!sourceCell) {\n continue;\n }\n const sourceKey = this.getCellKey(sourceCell);\n if (migratedKeys.has(sourceKey)) {\n continue;\n }\n migratedKeys.add(sourceKey);\n migratedSourceCells.push(sourceCell);\n }\n }\n return migratedSourceCells;\n }\n\n private getCellIdentity(col: number, row: number): SourceCell {\n const table = this.table as ListTableAPI;\n const recordShowIndex = table.getRecordShowIndexByCell?.(col, row);\n const recordIndex = recordShowIndex >= 0 ? (table as any).dataSource?.getIndexKey?.(recordShowIndex) : undefined;\n const field = table.internalProps?.layoutMap?.getBody?.(col, row)?.field;\n return { col, row, recordIndex, field };\n }\n\n // 清空选中区域的内容\n private async clearCutArea(migratedSourceCells: SourceCell[], changedTargetCells: SourceCell[]): Promise<boolean> {\n try {\n const table = this.table as ListTableAPI;\n const changedTargetKeys = new Set<string>();\n changedTargetCells.forEach(cell => {\n changedTargetKeys.add(this.getCellKey(cell));\n changedTargetKeys.add(this.getCoordKey(cell));\n });\n const clearedKeys = new Set<string>();\n const sourceChanges: { recordIndex: number | number[]; field: any; value: string }[] = [];\n const coordChanges: { col: number; row: number }[] = [];\n for (let i = 0; i < migratedSourceCells.length; i++) {\n const sourceCell = migratedSourceCells[i];\n const sourceKey = this.getCellKey(sourceCell);\n if (\n clearedKeys.has(sourceKey) ||\n changedTargetKeys.has(sourceKey) ||\n changedTargetKeys.has(this.getCoordKey(sourceCell))\n ) {\n continue;\n }\n const currentAddress = this.getCurrentCellAddress(sourceCell);\n if (!currentAddress) {\n continue;\n }\n if (!this.isSourceCellUnchanged(sourceCell, currentAddress)) {\n continue;\n }\n if (\n sourceCell.recordIndex !== undefined &&\n sourceCell.field !== undefined &&\n (table as any).changeCellValuesByRecords\n ) {\n sourceChanges.push({ recordIndex: sourceCell.recordIndex, field: sourceCell.field, value: '' });\n } else {\n coordChanges.push(currentAddress);\n }\n clearedKeys.add(sourceKey);\n }\n if (sourceChanges.length) {\n (table as any).changeCellValuesByRecords(sourceChanges, {\n triggerEvent: true,\n autoRefresh: false\n });\n }\n for (let i = 0; i < coordChanges.length; i++) {\n await table.changeCellValues(coordChanges[i].col, coordChanges[i].row, [['']], false);\n }\n if (sourceChanges.length) {\n (table as any).refreshAfterSourceChange?.();\n }\n return true;\n } catch (error) {\n console.error('清空单元格内容失败', error);\n return false;\n }\n }\n\n private isSourceCellUnchanged(sourceCell: SourceCell, currentAddress: { col: number; row: number }): boolean {\n const table = this.table as ListTableAPI;\n return Object.is(table.getCellOriginValue?.(currentAddress.col, currentAddress.row), sourceCell.value);\n }\n\n private getCurrentCellAddress(sourceCell: SourceCell): { col: number; row: number } | null {\n const table = this.table as ListTableAPI;\n if (sourceCell.recordIndex !== undefined && sourceCell.field !== undefined && table.getCellAddrByFieldRecord) {\n const address = table.getCellAddrByFieldRecord(sourceCell.field, sourceCell.recordIndex);\n if (address && address.col >= 0 && address.row >= 0) {\n return address;\n }\n return null;\n }\n return { col: sourceCell.col, row: sourceCell.row };\n }\n\n private getCellKey(cell: SourceCell): string {\n if (cell.recordIndex !== undefined && cell.field !== undefined) {\n return `record:${this.getStableKeyPart(cell.recordIndex)}:${this.getStableKeyPart(cell.field)}`;\n }\n return this.getCoordKey(cell);\n }\n\n private getCoordKey(cell: SourceCell): string {\n return `coord:${cell.col}:${cell.row}`;\n }\n\n private getStableKeyPart(value: any): string {\n if (value === null) {\n return 'null';\n }\n const valueType = typeof value;\n if (valueType === 'string' || valueType === 'number' || valueType === 'boolean') {\n return `${valueType}:${JSON.stringify(value)}`;\n }\n if (Array.isArray(value)) {\n return `array:[${value.map(item => this.getStableKeyPart(item)).join(',')}]`;\n }\n if (valueType === 'object' || valueType === 'function') {\n let id = this.fieldKeyIds.get(value);\n if (id === undefined) {\n id = ++this.fieldKeyId;\n this.fieldKeyIds.set(value, id);\n }\n return `${valueType}:#${id}`;\n }\n return `${valueType}:${String(value)}`;\n }\n\n private resetCutState(): void {\n this.cutWaitPaste = false;\n this.activeCutState = null;\n this.cutCellRange = null;\n this.cutRanges = null;\n if (this.table.keyboardOptions?.showCopyCellBorder) {\n clearActiveCellRangeState(this.table);\n }\n if (this.clipboardCheckTimer) {\n clearTimeout(this.clipboardCheckTimer);\n this.clipboardCheckTimer = null;\n }\n }\n\n private parsePastedData(pastedData: string): (string | number)[][] {\n const rows = pastedData.replace(/\\r(?!\\n)/g, '\\r\\n').split('\\r\\n'); // 文本中的换行符格式进行统一处理\n const values: (string | number)[][] = [];\n\n // 移除最后一行空行\n if (rows.length > 1 && rows[rows.length - 1] === '') {\n rows.pop();\n }\n\n rows.forEach((rowCells: string) => {\n const cells = rowCells.split('\\t'); // 将行数据拆分为单元格\n const rowValues: (string | number)[] = cells.map(cell => this.processCellValue(cell));\n values.push(rowValues);\n });\n\n return values;\n }\n\n private parsePlainTextPastedData(pastedData: string): (string | number)[][] {\n const rows = pastedData.replace(/\\r\\n|\\r/g, '\\n').split('\\n');\n if (rows.length > 1 && rows[rows.length - 1] === '') {\n rows.pop();\n }\n return rows.map(rowCells => rowCells.split('\\t'));\n }\n\n private processCellValue(cell: string): string | 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\n // 尝试转换为数字\n const numValue = Number(cell);\n return isNaN(numValue) ? cell : numValue;\n }\n private 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}\n"]}