@visactor/vtable 1.24.0-alpha.0 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/cjs/core/BaseTable.d.ts +7 -0
  2. package/cjs/core/BaseTable.js +55 -17
  3. package/cjs/core/BaseTable.js.map +1 -1
  4. package/cjs/core/animation.js +3 -5
  5. package/cjs/core/animation.js.map +1 -1
  6. package/cjs/core/tableHelper.js +5 -3
  7. package/cjs/core/tableHelper.js.map +1 -1
  8. package/cjs/core/utils/get-cell-position.js +23 -12
  9. package/cjs/core/utils/get-cell-position.js.map +1 -1
  10. package/cjs/dataset/DataStatistics.js +2 -1
  11. package/cjs/edit/edit-manager.js +0 -1
  12. package/cjs/event/listener/container-dom.js +7 -5
  13. package/cjs/event/listener/container-dom.js.map +1 -1
  14. package/cjs/event/listener/scroll-bar.js +77 -6
  15. package/cjs/event/listener/scroll-bar.js.map +1 -1
  16. package/cjs/event/listener/table-group.js +29 -20
  17. package/cjs/event/listener/table-group.js.map +1 -1
  18. package/cjs/event/scroll.js +34 -11
  19. package/cjs/event/scroll.js.map +1 -1
  20. package/cjs/event/util.d.ts +2 -0
  21. package/cjs/event/util.js +28 -3
  22. package/cjs/event/util.js.map +1 -1
  23. package/cjs/index.d.ts +1 -1
  24. package/cjs/index.js +1 -1
  25. package/cjs/index.js.map +1 -1
  26. package/cjs/scenegraph/component/table-component.d.ts +6 -1
  27. package/cjs/scenegraph/component/table-component.js +143 -16
  28. package/cjs/scenegraph/component/table-component.js.map +1 -1
  29. package/cjs/scenegraph/component/util.js +5 -2
  30. package/cjs/scenegraph/component/util.js.map +1 -1
  31. package/cjs/scenegraph/graphic/contributions/group-contribution-render.js +29 -10
  32. package/cjs/scenegraph/graphic/contributions/group-contribution-render.js.map +1 -1
  33. package/cjs/scenegraph/group-creater/init-scenegraph.js +36 -6
  34. package/cjs/scenegraph/group-creater/init-scenegraph.js.map +1 -1
  35. package/cjs/scenegraph/group-creater/progress/proxy.js +4 -2
  36. package/cjs/scenegraph/group-creater/progress/proxy.js.map +1 -1
  37. package/cjs/scenegraph/scenegraph.d.ts +13 -0
  38. package/cjs/scenegraph/scenegraph.js +194 -23
  39. package/cjs/scenegraph/scenegraph.js.map +1 -1
  40. package/cjs/scenegraph/select/create-select-border.js +9 -10
  41. package/cjs/scenegraph/select/create-select-border.js.map +1 -1
  42. package/cjs/scenegraph/select/delete-select-border.js.map +1 -1
  43. package/cjs/scenegraph/select/move-select-border.js.map +1 -1
  44. package/cjs/scenegraph/select/update-custom-select-border.js +9 -9
  45. package/cjs/scenegraph/select/update-custom-select-border.js.map +1 -1
  46. package/cjs/scenegraph/select/update-select-border.js +14 -73
  47. package/cjs/scenegraph/select/update-select-border.js.map +1 -1
  48. package/cjs/scenegraph/select/update-select-style.js.map +1 -1
  49. package/cjs/state/state.d.ts +7 -1
  50. package/cjs/state/state.js +61 -28
  51. package/cjs/state/state.js.map +1 -1
  52. package/cjs/ts-types/base-table.d.ts +10 -0
  53. package/cjs/ts-types/base-table.js.map +1 -1
  54. package/cjs/vrender.js.map +1 -1
  55. package/dist/vtable.js +1087 -337
  56. package/dist/vtable.min.js +2 -2
  57. package/es/core/BaseTable.d.ts +7 -0
  58. package/es/core/BaseTable.js +55 -17
  59. package/es/core/BaseTable.js.map +1 -1
  60. package/es/core/animation.js +3 -5
  61. package/es/core/animation.js.map +1 -1
  62. package/es/core/tableHelper.js +5 -3
  63. package/es/core/tableHelper.js.map +1 -1
  64. package/es/core/utils/get-cell-position.js +23 -12
  65. package/es/core/utils/get-cell-position.js.map +1 -1
  66. package/es/dataset/DataStatistics.js +2 -1
  67. package/es/edit/edit-manager.js +1 -2
  68. package/es/event/listener/container-dom.js +7 -5
  69. package/es/event/listener/container-dom.js.map +1 -1
  70. package/es/event/listener/scroll-bar.js +75 -6
  71. package/es/event/listener/scroll-bar.js.map +1 -1
  72. package/es/event/listener/table-group.js +29 -21
  73. package/es/event/listener/table-group.js.map +1 -1
  74. package/es/event/scroll.js +34 -11
  75. package/es/event/scroll.js.map +1 -1
  76. package/es/event/util.d.ts +2 -0
  77. package/es/event/util.js +24 -0
  78. package/es/event/util.js.map +1 -1
  79. package/es/index.d.ts +1 -1
  80. package/es/index.js +1 -1
  81. package/es/index.js.map +1 -1
  82. package/es/scenegraph/component/table-component.d.ts +6 -1
  83. package/es/scenegraph/component/table-component.js +141 -16
  84. package/es/scenegraph/component/table-component.js.map +1 -1
  85. package/es/scenegraph/component/util.js +5 -2
  86. package/es/scenegraph/component/util.js.map +1 -1
  87. package/es/scenegraph/graphic/contributions/group-contribution-render.js +29 -10
  88. package/es/scenegraph/graphic/contributions/group-contribution-render.js.map +1 -1
  89. package/es/scenegraph/group-creater/init-scenegraph.js +36 -6
  90. package/es/scenegraph/group-creater/init-scenegraph.js.map +1 -1
  91. package/es/scenegraph/group-creater/progress/proxy.js +4 -2
  92. package/es/scenegraph/group-creater/progress/proxy.js.map +1 -1
  93. package/es/scenegraph/scenegraph.d.ts +13 -0
  94. package/es/scenegraph/scenegraph.js +185 -18
  95. package/es/scenegraph/scenegraph.js.map +1 -1
  96. package/es/scenegraph/select/create-select-border.js +9 -10
  97. package/es/scenegraph/select/create-select-border.js.map +1 -1
  98. package/es/scenegraph/select/delete-select-border.js.map +1 -1
  99. package/es/scenegraph/select/move-select-border.js.map +1 -1
  100. package/es/scenegraph/select/update-custom-select-border.js +9 -9
  101. package/es/scenegraph/select/update-custom-select-border.js.map +1 -1
  102. package/es/scenegraph/select/update-select-border.js +14 -73
  103. package/es/scenegraph/select/update-select-border.js.map +1 -1
  104. package/es/scenegraph/select/update-select-style.js.map +1 -1
  105. package/es/state/state.d.ts +7 -1
  106. package/es/state/state.js +61 -28
  107. package/es/state/state.js.map +1 -1
  108. package/es/ts-types/base-table.d.ts +10 -0
  109. package/es/ts-types/base-table.js.map +1 -1
  110. package/es/vrender.js.map +1 -1
  111. package/package.json +5 -5
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  const vrender_1 = require("./../../vrender");
8
8
 
9
9
  function createCellSelectBorder(scene, start_Col, start_Row, end_Col, end_Row, selectRangeType, selectId, strokes) {
10
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
10
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
11
11
  let isHasFillHandleRect = !!(null === (_a = scene.table.options.excelOptions) || void 0 === _a ? void 0 : _a.fillHandle);
12
12
  if ((null === (_b = scene.table.stateManager.select.ranges) || void 0 === _b ? void 0 : _b.length) > 1) isHasFillHandleRect = !1,
13
13
  scene.removeFillHandleFromSelectComponents(); else if (1 === (null === (_c = scene.table.stateManager.select.ranges) || void 0 === _c ? void 0 : _c.length)) {
@@ -15,26 +15,26 @@ function createCellSelectBorder(scene, start_Col, start_Row, end_Col, end_Row, s
15
15
  scene.table.isHeader(maxCol, maxRow) && (isHasFillHandleRect = !1);
16
16
  }
17
17
  !Array.isArray(strokes) || !1 !== strokes[1] && !1 !== strokes[2] || (isHasFillHandleRect = !1);
18
- const startCol = Math.min(start_Col, end_Col), startRow = Math.min(start_Row, end_Row), endCol = Math.max(start_Col, end_Col), endRow = Math.max(start_Row, end_Row), firstCellBound = scene.highPerformanceGetCell(startCol, startRow).globalAABBBounds, lastCellBound = scene.highPerformanceGetCell(endCol, endRow).globalAABBBounds, theme = scene.table.theme, bodyClickBorderColor = null === (_d = theme.selectionStyle) || void 0 === _d ? void 0 : _d.cellBorderColor, bodyClickLineWidth = null === (_e = theme.selectionStyle) || void 0 === _e ? void 0 : _e.cellBorderLineWidth, rect = (0,
18
+ const startCol = Math.min(start_Col, end_Col), startRow = Math.min(start_Row, end_Row), endCol = Math.max(start_Col, end_Col), endRow = Math.max(start_Row, end_Row), overlayGroup = scene.getSelectOverlayGroup(selectRangeType), offsetX = scene.tableGroup.attribute.x + (null !== (_d = overlayGroup.attribute.x) && void 0 !== _d ? _d : 0), offsetY = scene.tableGroup.attribute.y + (null !== (_e = overlayGroup.attribute.y) && void 0 !== _e ? _e : 0), firstCellBound = scene.highPerformanceGetCell(startCol, startRow).globalAABBBounds, lastCellBound = scene.highPerformanceGetCell(endCol, endRow).globalAABBBounds, theme = scene.table.theme, bodyClickBorderColor = null === (_f = theme.selectionStyle) || void 0 === _f ? void 0 : _f.cellBorderColor, bodyClickLineWidth = null === (_g = theme.selectionStyle) || void 0 === _g ? void 0 : _g.cellBorderLineWidth, rect = (0,
19
19
  vrender_1.createRect)({
20
20
  pickable: !1,
21
- fill: "replace" !== (null === (_f = theme.selectionStyle) || void 0 === _f ? void 0 : _f.selectionFillMode) && (null !== (_h = null === (_g = theme.selectionStyle) || void 0 === _g ? void 0 : _g.cellBgColor) && void 0 !== _h ? _h : "rgba(0, 0, 255,0.1)"),
21
+ fill: "replace" !== (null === (_h = theme.selectionStyle) || void 0 === _h ? void 0 : _h.selectionFillMode) && (null !== (_k = null === (_j = theme.selectionStyle) || void 0 === _j ? void 0 : _j.cellBgColor) && void 0 !== _k ? _k : "rgba(0, 0, 255,0.1)"),
22
22
  lineWidth: bodyClickLineWidth,
23
23
  stroke: strokes.map((stroke => !!stroke && bodyClickBorderColor)),
24
- x: firstCellBound.x1 - scene.tableGroup.attribute.x,
25
- y: firstCellBound.y1 - scene.tableGroup.attribute.y,
24
+ x: firstCellBound.x1 - offsetX,
25
+ y: firstCellBound.y1 - offsetY,
26
26
  width: 0,
27
27
  height: 0,
28
28
  visible: !0,
29
- cornerRadius: getCornerRadius(selectRangeType, null === (_j = scene.table.theme.frameStyle) || void 0 === _j ? void 0 : _j.cornerRadius, start_Col, start_Row, end_Col, end_Row, scene.table)
29
+ cornerRadius: getCornerRadius(selectRangeType, null === (_l = scene.table.theme.frameStyle) || void 0 === _l ? void 0 : _l.cornerRadius, start_Col, start_Row, end_Col, end_Row, scene.table)
30
30
  });
31
31
  let fillhandle;
32
32
  isHasFillHandleRect && (fillhandle = (0, vrender_1.createRect)({
33
33
  pickable: !1,
34
34
  fill: bodyClickBorderColor,
35
35
  stroke: bodyClickBorderColor,
36
- x: lastCellBound.x2 - 3,
37
- y: lastCellBound.y2 - 3,
36
+ x: lastCellBound.x2 - offsetX - 3,
37
+ y: lastCellBound.y2 - offsetY - 3,
38
38
  width: 6,
39
39
  height: 6,
40
40
  visible: !0
@@ -42,8 +42,7 @@ function createCellSelectBorder(scene, start_Col, start_Row, end_Col, end_Row, s
42
42
  rect: rect,
43
43
  fillhandle: fillhandle,
44
44
  role: selectRangeType
45
- }), scene.tableGroup.insertAfter(rect, "body" === selectRangeType ? scene.bodyGroup : "columnHeader" === selectRangeType ? scene.colHeaderGroup : "rowHeader" === selectRangeType ? scene.rowHeaderGroup : "cornerHeader" === selectRangeType ? scene.cornerHeaderGroup : "rightTopCorner" === selectRangeType ? scene.rightTopCornerGroup : "rightFrozen" === selectRangeType ? scene.rightFrozenGroup : "leftBottomCorner" === selectRangeType ? scene.leftBottomCornerGroup : "bottomFrozen" === selectRangeType ? scene.bottomFrozenGroup : scene.rightBottomCornerGroup),
46
- isHasFillHandleRect && scene.tableGroup.insertAfter(fillhandle, "body" === selectRangeType ? scene.bodyGroup : "columnHeader" === selectRangeType ? scene.colHeaderGroup : "rowHeader" === selectRangeType ? scene.rowHeaderGroup : "cornerHeader" === selectRangeType ? scene.cornerHeaderGroup : "rightTopCorner" === selectRangeType ? scene.rightTopCornerGroup : "rightFrozen" === selectRangeType ? scene.rightFrozenGroup : "leftBottomCorner" === selectRangeType ? scene.leftBottomCornerGroup : "bottomFrozen" === selectRangeType ? scene.bottomFrozenGroup : scene.rightBottomCornerGroup);
45
+ }), overlayGroup.addChild(rect), isHasFillHandleRect && overlayGroup.addChild(fillhandle);
47
46
  }
48
47
 
49
48
  function getCornerRadius(selectRangeType, cornerRadius, start_Col, start_Row, end_Col, end_Row, table) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scenegraph/select/create-select-border.ts"],"names":[],"mappings":"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","file":"create-select-border.js","sourcesContent":["import { createRect } from './../../vrender';\nimport type { CellSubLocation } from '../../ts-types';\nimport type { Scenegraph } from '../scenegraph';\nimport { table } from 'console';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\nexport function createCellSelectBorder(\n scene: Scenegraph,\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n selectRangeType: CellSubLocation,\n selectId: string, //整体区域${endRow}-${startCol}${startRow}${endCol}${endRow}作为其编号\n strokes: boolean[]\n // isHasFillHandleRect: boolean\n) {\n let isHasFillHandleRect = !!scene.table.options.excelOptions?.fillHandle;\n if (scene.table.stateManager.select.ranges?.length > 1) {\n isHasFillHandleRect = false;\n scene.removeFillHandleFromSelectComponents();\n } else if (scene.table.stateManager.select.ranges?.length === 1) {\n const maxRow = Math.max(\n scene.table.stateManager.select.ranges[0].start.row,\n scene.table.stateManager.select.ranges[0].end.row\n );\n const maxCol = Math.max(\n scene.table.stateManager.select.ranges[0].start.col,\n scene.table.stateManager.select.ranges[0].end.col\n );\n if (scene.table.isHeader(maxCol, maxRow)) {\n isHasFillHandleRect = false;\n }\n }\n if (Array.isArray(strokes) && (strokes[1] === false || strokes[2] === false)) {\n isHasFillHandleRect = false;\n }\n const startCol = Math.min(start_Col, end_Col);\n const startRow = Math.min(start_Row, end_Row);\n const endCol = Math.max(start_Col, end_Col);\n const endRow = Math.max(start_Row, end_Row);\n const firstCellBound = scene.highPerformanceGetCell(startCol, startRow).globalAABBBounds;\n const lastCellBound = scene.highPerformanceGetCell(endCol, endRow).globalAABBBounds;\n const theme = scene.table.theme;\n // 框选外边框\n const bodyClickBorderColor = theme.selectionStyle?.cellBorderColor;\n const bodyClickLineWidth = theme.selectionStyle?.cellBorderLineWidth;\n const rect = createRect({\n pickable: false,\n fill:\n theme.selectionStyle?.selectionFillMode === 'replace'\n ? false\n : (theme.selectionStyle?.cellBgColor as any) ?? 'rgba(0, 0, 255,0.1)',\n\n lineWidth: bodyClickLineWidth as number,\n // stroke: bodyClickBorderColor as string,\n stroke: strokes.map(stroke => {\n if (stroke) {\n return bodyClickBorderColor as string;\n }\n return false;\n }),\n x: firstCellBound.x1 - scene.tableGroup.attribute.x, // 坐标xy及宽高width height 不需要这里计算具体值 update-select-border文件中updateComponent方法中有逻辑 且该方法调用时间是render\n y: firstCellBound.y1 - scene.tableGroup.attribute.y,\n width: 0,\n height: 0,\n visible: true,\n cornerRadius: getCornerRadius(\n selectRangeType,\n scene.table.theme.frameStyle?.cornerRadius,\n start_Col,\n start_Row,\n end_Col,\n end_Row,\n scene.table\n )\n });\n // 创建右下角小方块\n let fillhandle;\n if (isHasFillHandleRect) {\n fillhandle = createRect({\n pickable: false,\n fill: bodyClickBorderColor as string,\n // lineWidth: bodyClickLineWidth as number,\n stroke: bodyClickBorderColor as string, // 右下角小方块边框颜色\n x: lastCellBound.x2 - 3, // 调整小方块位置\n y: lastCellBound.y2 - 3, // 调整小方块位置\n width: 6,\n height: 6,\n\n visible: true\n });\n }\n scene.lastSelectId = selectId;\n scene.selectingRangeComponents.set(`${startCol}-${startRow}-${endCol}-${endRow}-${selectId}`, {\n rect,\n fillhandle,\n role: selectRangeType\n });\n scene.tableGroup.insertAfter(\n rect,\n selectRangeType === 'body'\n ? scene.bodyGroup\n : selectRangeType === 'columnHeader'\n ? scene.colHeaderGroup\n : selectRangeType === 'rowHeader'\n ? scene.rowHeaderGroup\n : selectRangeType === 'cornerHeader'\n ? scene.cornerHeaderGroup\n : selectRangeType === 'rightTopCorner'\n ? scene.rightTopCornerGroup\n : selectRangeType === 'rightFrozen'\n ? scene.rightFrozenGroup\n : selectRangeType === 'leftBottomCorner'\n ? scene.leftBottomCornerGroup\n : selectRangeType === 'bottomFrozen'\n ? scene.bottomFrozenGroup\n : scene.rightBottomCornerGroup\n );\n isHasFillHandleRect &&\n scene.tableGroup.insertAfter(\n fillhandle,\n selectRangeType === 'body'\n ? scene.bodyGroup\n : selectRangeType === 'columnHeader'\n ? scene.colHeaderGroup\n : selectRangeType === 'rowHeader'\n ? scene.rowHeaderGroup\n : selectRangeType === 'cornerHeader'\n ? scene.cornerHeaderGroup\n : selectRangeType === 'rightTopCorner'\n ? scene.rightTopCornerGroup\n : selectRangeType === 'rightFrozen'\n ? scene.rightFrozenGroup\n : selectRangeType === 'leftBottomCorner'\n ? scene.leftBottomCornerGroup\n : selectRangeType === 'bottomFrozen'\n ? scene.bottomFrozenGroup\n : scene.rightBottomCornerGroup\n );\n}\n\n// set corner radius in select rect which covers the corner of the table\nexport function getCornerRadius(\n selectRangeType: CellSubLocation,\n cornerRadius: undefined | number | [number, number, number, number],\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n table: BaseTableAPI\n) {\n if (!cornerRadius) {\n return undefined;\n }\n const cornerRadiusArray = Array.isArray(cornerRadius)\n ? cornerRadius\n : [cornerRadius, cornerRadius, cornerRadius, cornerRadius]; // [left top, right top, right bottom, left bottom]\n\n const tableStartCol = 0;\n const tableStartRow = 0;\n const tableEndCol = table.colCount - 1;\n const tableEndRow = table.rowCount - 1;\n\n const result = [0, 0, 0, 0];\n let changed = false;\n\n if (start_Col === tableStartCol && start_Row === tableStartRow) {\n // select rect covers the left top corner of the table\n result[0] = cornerRadiusArray[0];\n changed = true;\n } else if (end_Col === tableEndCol && end_Row === tableEndRow) {\n // select rect covers the right bottom corner of the table\n result[2] = cornerRadiusArray[2];\n changed = true;\n } else if (start_Col === tableStartCol && end_Row === tableEndRow) {\n // select rect covers the left bottom corner of the table\n result[3] = cornerRadiusArray[3];\n changed = true;\n } else if (end_Col === tableEndCol && start_Row === tableStartRow) {\n // select rect covers the right top corner of the table\n result[1] = cornerRadiusArray[1];\n changed = true;\n }\n\n if (changed) {\n return result;\n }\n\n return undefined;\n}\n"]}
1
+ {"version":3,"sources":["../src/scenegraph/select/create-select-border.ts"],"names":[],"mappings":";;;AAAA,6CAA6C;AAiB7C,SAAgB,sBAAsB,CACpC,KAAiB,EACjB,SAAiB,EACjB,SAAiB,EACjB,OAAe,EACf,OAAe,EACf,eAAgC,EAChC,QAAgB,EAChB,OAAkB;;IAOlB,IAAI,mBAAmB,GAAG,CAAC,CAAC,CAAA,MAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,0CAAE,UAAU,CAAA,CAAC;IACzE,IAAI,CAAA,MAAA,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,0CAAE,MAAM,IAAG,CAAC,EAAE;QACtD,mBAAmB,GAAG,KAAK,CAAC;QAC5B,KAAK,CAAC,oCAAoC,EAAE,CAAC;KAC9C;SAAM,IAAI,CAAA,MAAA,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,0CAAE,MAAM,MAAK,CAAC,EAAE;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EACnD,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAClD,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EACnD,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAClD,CAAC;QACF,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YACxC,mBAAmB,GAAG,KAAK,CAAC;SAC7B;KACF;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;QAC5E,mBAAmB,GAAG,KAAK,CAAC;KAC7B;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAG5C,MAAM,YAAY,GAAG,KAAK,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,MAAA,YAAY,CAAC,SAAS,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,MAAA,YAAY,CAAC,SAAS,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC;IAC/E,MAAM,cAAc,GAAG,KAAK,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,gBAAgB,CAAC;IACzF,MAAM,aAAa,GAAG,KAAK,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,gBAAgB,CAAC;IACpF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;IAEhC,MAAM,oBAAoB,GAAG,MAAA,KAAK,CAAC,cAAc,0CAAE,eAAe,CAAC;IACnE,MAAM,kBAAkB,GAAG,MAAA,KAAK,CAAC,cAAc,0CAAE,mBAAmB,CAAC;IACrE,MAAM,IAAI,GAAG,IAAA,oBAAU,EAAC;QACtB,QAAQ,EAAE,KAAK;QACf,IAAI,EACF,CAAA,MAAA,KAAK,CAAC,cAAc,0CAAE,iBAAiB,MAAK,SAAS;YACnD,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,MAAC,MAAA,KAAK,CAAC,cAAc,0CAAE,WAAmB,mCAAI,qBAAqB;QAEzE,SAAS,EAAE,kBAA4B;QAEvC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC3B,IAAI,MAAM,EAAE;gBACV,OAAO,oBAA8B,CAAC;aACvC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QACF,CAAC,EAAE,cAAc,CAAC,EAAE,GAAG,OAAO;QAC9B,CAAC,EAAE,cAAc,CAAC,EAAE,GAAG,OAAO;QAC9B,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,eAAe,CAC3B,eAAe,EACf,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,0CAAE,YAAY,EAC1C,SAAS,EACT,SAAS,EACT,OAAO,EACP,OAAO,EACP,KAAK,CAAC,KAAK,CACZ;KACF,CAAC,CAAC;IAEH,IAAI,UAAU,CAAC;IACf,IAAI,mBAAmB,EAAE;QAEvB,UAAU,GAAG,IAAA,oBAAU,EAAC;YACtB,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,oBAA8B;YAEpC,MAAM,EAAE,oBAA8B;YACtC,CAAC,EAAE,aAAa,CAAC,EAAE,GAAG,OAAO,GAAG,CAAC;YACjC,CAAC,EAAE,aAAa,CAAC,EAAE,GAAG,OAAO,GAAG,CAAC;YACjC,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YAET,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;KACJ;IACD,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC;IAG9B,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,IAAI,QAAQ,EAAE,EAAE;QAC5F,IAAI;QACJ,UAAU;QACV,IAAI,EAAE,eAAe;KACtB,CAAC,CAAC;IACH,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,mBAAmB,EAAE;QACvB,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;KACnC;AACH,CAAC;AA7GD,wDA6GC;AAGD,SAAgB,eAAe,CAC7B,eAAgC,EAChC,YAAmE,EACnE,SAAiB,EACjB,SAAiB,EACjB,OAAe,EACf,OAAe,EACf,KAAmB;IAEnB,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,SAAS,CAAC;KAClB;IACD,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QACnD,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAE7D,MAAM,aAAa,GAAG,CAAC,CAAC;IACxB,MAAM,aAAa,GAAG,CAAC,CAAC;IACxB,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,aAAa,EAAE;QAE9D,MAAM,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,GAAG,IAAI,CAAC;KAChB;SAAM,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,WAAW,EAAE;QAE7D,MAAM,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,GAAG,IAAI,CAAC;KAChB;SAAM,IAAI,SAAS,KAAK,aAAa,IAAI,OAAO,KAAK,WAAW,EAAE;QAEjE,MAAM,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,GAAG,IAAI,CAAC;KAChB;SAAM,IAAI,OAAO,KAAK,WAAW,IAAI,SAAS,KAAK,aAAa,EAAE;QAEjE,MAAM,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,GAAG,IAAI,CAAC;KAChB;IAED,IAAI,OAAO,EAAE;QACX,OAAO,MAAM,CAAC;KACf;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AA/CD,0CA+CC","file":"create-select-border.js","sourcesContent":["import { createRect } from './../../vrender';\nimport type { CellSubLocation } from '../../ts-types';\nimport type { Scenegraph } from '../scenegraph';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\n\n/**\n * 选框(select border)的创建入口。\n *\n * 选框图元并不是直接挂在 tableGroup 下,而是挂在各区域对应的 overlayGroup(select-overlay)下:\n * - body / columnHeader / rowHeader / cornerHeader\n * - rightFrozen / rightTopCorner / rightBottomCorner\n * - bottomFrozen / leftBottomCorner\n *\n * 这样做的原因:\n * - overlay 会参与各区域的 clipRect 裁剪,避免选框越界绘制\n * - 当选择范围跨越多个区域(例如跨表头+body、跨左冻结+body、跨右冻结),需要拆成多段选框分别绘制\n */\nexport function createCellSelectBorder(\n scene: Scenegraph,\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n selectRangeType: CellSubLocation,\n selectId: string, //整体区域${endRow}-${startCol}${startRow}${endCol}${endRow}作为其编号\n strokes: boolean[]\n // isHasFillHandleRect: boolean\n) {\n // fill handle(右下角小方块)只在“单一选区 + body 区域 + 允许显示”的场景生效:\n // - 多选区时避免出现多个 handle(交互语义不明确),并清理历史 handle\n // - 选区包含表头时禁止显示(表头不是可填充的目标)\n // - strokes 关闭底边/右边时(例如跨区域拆分后该边由其它段负责),也不应显示 handle\n let isHasFillHandleRect = !!scene.table.options.excelOptions?.fillHandle;\n if (scene.table.stateManager.select.ranges?.length > 1) {\n isHasFillHandleRect = false;\n scene.removeFillHandleFromSelectComponents();\n } else if (scene.table.stateManager.select.ranges?.length === 1) {\n const maxRow = Math.max(\n scene.table.stateManager.select.ranges[0].start.row,\n scene.table.stateManager.select.ranges[0].end.row\n );\n const maxCol = Math.max(\n scene.table.stateManager.select.ranges[0].start.col,\n scene.table.stateManager.select.ranges[0].end.col\n );\n if (scene.table.isHeader(maxCol, maxRow)) {\n isHasFillHandleRect = false;\n }\n }\n if (Array.isArray(strokes) && (strokes[1] === false || strokes[2] === false)) {\n isHasFillHandleRect = false;\n }\n const startCol = Math.min(start_Col, end_Col);\n const startRow = Math.min(start_Row, end_Row);\n const endCol = Math.max(start_Col, end_Col);\n const endRow = Math.max(start_Row, end_Row);\n // overlayGroup 在不同区域会有各自的坐标偏移(例如 columnHeader / body / rightFrozen),\n // 选框需要用 global bounds(全局 AABB)减去 tableGroup + overlayGroup 的偏移,换算为 overlay 的本地坐标。\n const overlayGroup = scene.getSelectOverlayGroup(selectRangeType);\n const offsetX = scene.tableGroup.attribute.x + (overlayGroup.attribute.x ?? 0);\n const offsetY = scene.tableGroup.attribute.y + (overlayGroup.attribute.y ?? 0);\n const firstCellBound = scene.highPerformanceGetCell(startCol, startRow).globalAABBBounds;\n const lastCellBound = scene.highPerformanceGetCell(endCol, endRow).globalAABBBounds;\n const theme = scene.table.theme;\n // 框选外边框\n const bodyClickBorderColor = theme.selectionStyle?.cellBorderColor;\n const bodyClickLineWidth = theme.selectionStyle?.cellBorderLineWidth;\n const rect = createRect({\n pickable: false,\n fill:\n theme.selectionStyle?.selectionFillMode === 'replace'\n ? false\n : (theme.selectionStyle?.cellBgColor as any) ?? 'rgba(0, 0, 255,0.1)',\n\n lineWidth: bodyClickLineWidth as number,\n // stroke: bodyClickBorderColor as string,\n stroke: strokes.map(stroke => {\n if (stroke) {\n return bodyClickBorderColor as string;\n }\n return false;\n }),\n x: firstCellBound.x1 - offsetX,\n y: firstCellBound.y1 - offsetY,\n width: 0,\n height: 0,\n visible: true,\n cornerRadius: getCornerRadius(\n selectRangeType,\n scene.table.theme.frameStyle?.cornerRadius,\n start_Col,\n start_Row,\n end_Col,\n end_Row,\n scene.table\n )\n });\n // 创建右下角小方块\n let fillhandle;\n if (isHasFillHandleRect) {\n // 6x6 的 handle,定位在选区右下角(右/下各内缩 3px),避免压住边框线\n fillhandle = createRect({\n pickable: false,\n fill: bodyClickBorderColor as string,\n // lineWidth: bodyClickLineWidth as number,\n stroke: bodyClickBorderColor as string, // 右下角小方块边框颜色\n x: lastCellBound.x2 - offsetX - 3,\n y: lastCellBound.y2 - offsetY - 3,\n width: 6,\n height: 6,\n\n visible: true\n });\n }\n scene.lastSelectId = selectId;\n // key 以“标准化后的 start/end + selectId”组成:同一选择范围在不同区域拆分后 key 不同,\n // 但 selectId 相同,可用于 shift 续选等场景的删除/替换。\n scene.selectingRangeComponents.set(`${startCol}-${startRow}-${endCol}-${endRow}-${selectId}`, {\n rect,\n fillhandle,\n role: selectRangeType\n });\n overlayGroup.addChild(rect);\n if (isHasFillHandleRect) {\n overlayGroup.addChild(fillhandle);\n }\n}\n\n// set corner radius in select rect which covers the corner of the table\nexport function getCornerRadius(\n selectRangeType: CellSubLocation,\n cornerRadius: undefined | number | [number, number, number, number],\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n table: BaseTableAPI\n) {\n if (!cornerRadius) {\n return undefined;\n }\n const cornerRadiusArray = Array.isArray(cornerRadius)\n ? cornerRadius\n : [cornerRadius, cornerRadius, cornerRadius, cornerRadius]; // [left top, right top, right bottom, left bottom]\n\n const tableStartCol = 0;\n const tableStartRow = 0;\n const tableEndCol = table.colCount - 1;\n const tableEndRow = table.rowCount - 1;\n\n const result = [0, 0, 0, 0];\n let changed = false;\n\n if (start_Col === tableStartCol && start_Row === tableStartRow) {\n // select rect covers the left top corner of the table\n result[0] = cornerRadiusArray[0];\n changed = true;\n } else if (end_Col === tableEndCol && end_Row === tableEndRow) {\n // select rect covers the right bottom corner of the table\n result[2] = cornerRadiusArray[2];\n changed = true;\n } else if (start_Col === tableStartCol && end_Row === tableEndRow) {\n // select rect covers the left bottom corner of the table\n result[3] = cornerRadiusArray[3];\n changed = true;\n } else if (end_Col === tableEndCol && start_Row === tableStartRow) {\n // select rect covers the right top corner of the table\n result[1] = cornerRadiusArray[1];\n changed = true;\n }\n\n if (changed) {\n return result;\n }\n\n return undefined;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scenegraph/select/delete-select-border.ts"],"names":[],"mappings":";;;AAKA,SAAgB,iCAAiC,CAAC,KAAiB;IACjE,KAAK,CAAC,uBAAuB,CAAC,OAAO,CACnC,CAAC,UAAsE,EAAE,GAAW,EAAE,EAAE;;QACtF,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,YAAY,KAAK,KAAK,CAAC,YAAY,EAAE;YACvC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,MAAA,UAAU,CAAC,UAAU,0CAAE,MAAM,EAAE,CAAC;YAChC,KAAK,CAAC,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC3C;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAXD,8EAWC;AAED,SAAgB,qBAAqB,CAAC,KAAiB;IACrD,KAAK,CAAC,uBAAuB,CAAC,OAAO,CACnC,CAAC,UAAsE,EAAE,GAAW,EAAE,EAAE;;QACtF,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAEzB,MAAA,UAAU,CAAC,UAAU,0CAAE,MAAM,EAAE,CAAC;IAClC,CAAC,CACF,CAAC;IACF,KAAK,CAAC,uBAAuB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5C,CAAC;AATD,sDASC;AAED,SAAgB,wBAAwB,CAAC,KAAiB;IACxD,KAAK,CAAC,wBAAwB,CAAC,OAAO,CACpC,CAAC,UAAsE,EAAE,GAAW,EAAE,EAAE;;QACtF,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAEzB,MAAA,UAAU,CAAC,UAAU,0CAAE,MAAM,EAAE,CAAC;IAClC,CAAC,CACF,CAAC;IACF,KAAK,CAAC,wBAAwB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC7C,CAAC;AATD,4DASC;AAED,SAAgB,oCAAoC,CAAC,KAAiB;IACpE,KAAK,CAAC,uBAAuB,CAAC,OAAO,CACnC,CAAC,UAAsE,EAAE,GAAW,EAAE,EAAE;;QACtF,MAAA,UAAU,CAAC,UAAU,0CAAE,MAAM,EAAE,CAAC;QAChC,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC;IACpC,CAAC,CACF,CAAC;AACJ,CAAC;AAPD,oFAOC","file":"delete-select-border.js","sourcesContent":["import type { IRect } from './../../vrender';\nimport type { Scenegraph } from '../scenegraph';\nimport type { CellSubLocation } from '../../ts-types';\n\n/** 按住shift 则继续上次选中范围 需要将现有的删除掉 */\nexport function deleteLastSelectedRangeComponents(scene: Scenegraph) {\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n const lastSelectId = key.split('-')[4];\n if (lastSelectId === scene.lastSelectId) {\n selectComp.rect.delete();\n selectComp.fillhandle?.delete();\n scene.selectedRangeComponents.delete(key);\n }\n }\n );\n}\n\nexport function deleteAllSelectBorder(scene: Scenegraph) {\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.delete();\n\n selectComp.fillhandle?.delete();\n }\n );\n scene.selectedRangeComponents = new Map();\n}\n\nexport function deleteAllSelectingBorder(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.delete();\n\n selectComp.fillhandle?.delete();\n }\n );\n scene.selectingRangeComponents = new Map();\n}\n\nexport function removeFillHandleFromSelectComponents(scene: Scenegraph) {\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.fillhandle?.delete();\n selectComp.fillhandle = undefined;\n }\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/scenegraph/select/delete-select-border.ts"],"names":[],"mappings":";;;AAKA,SAAgB,iCAAiC,CAAC,KAAiB;IAGjE,KAAK,CAAC,uBAAuB,CAAC,OAAO,CACnC,CAAC,UAAsE,EAAE,GAAW,EAAE,EAAE;;QACtF,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,YAAY,KAAK,KAAK,CAAC,YAAY,EAAE;YACvC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,MAAA,UAAU,CAAC,UAAU,0CAAE,MAAM,EAAE,CAAC;YAChC,KAAK,CAAC,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC3C;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAbD,8EAaC;AAED,SAAgB,qBAAqB,CAAC,KAAiB;IAErD,KAAK,CAAC,uBAAuB,CAAC,OAAO,CACnC,CAAC,UAAsE,EAAE,GAAW,EAAE,EAAE;;QACtF,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,MAAA,UAAU,CAAC,UAAU,0CAAE,MAAM,EAAE,CAAC;IAClC,CAAC,CACF,CAAC;IACF,KAAK,CAAC,uBAAuB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5C,CAAC;AATD,sDASC;AAED,SAAgB,wBAAwB,CAAC,KAAiB;IAExD,KAAK,CAAC,wBAAwB,CAAC,OAAO,CACpC,CAAC,UAAsE,EAAE,GAAW,EAAE,EAAE;;QACtF,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,MAAA,UAAU,CAAC,UAAU,0CAAE,MAAM,EAAE,CAAC;IAClC,CAAC,CACF,CAAC;IACF,KAAK,CAAC,wBAAwB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC7C,CAAC;AATD,4DASC;AAED,SAAgB,oCAAoC,CAAC,KAAiB;IAEpE,KAAK,CAAC,uBAAuB,CAAC,OAAO,CACnC,CAAC,UAAsE,EAAE,GAAW,EAAE,EAAE;;QACtF,MAAA,UAAU,CAAC,UAAU,0CAAE,MAAM,EAAE,CAAC;QAChC,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC;IACpC,CAAC,CACF,CAAC;AACJ,CAAC;AARD,oFAQC","file":"delete-select-border.js","sourcesContent":["import type { IRect } from './../../vrender';\nimport type { Scenegraph } from '../scenegraph';\nimport type { CellSubLocation } from '../../ts-types';\n\n/** 按住shift 则继续上次选中范围 需要将现有的删除掉 */\nexport function deleteLastSelectedRangeComponents(scene: Scenegraph) {\n // lastSelectId 用于标识“上一次选择动作”的选区段落(可能拆分为多段,selectId 相同)。\n // shift 续选时,需要移除上一次的选区图元,再将本次选区追加到 selectedRangeComponents。\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n const lastSelectId = key.split('-')[4];\n if (lastSelectId === scene.lastSelectId) {\n selectComp.rect.delete();\n selectComp.fillhandle?.delete();\n scene.selectedRangeComponents.delete(key);\n }\n }\n );\n}\n\nexport function deleteAllSelectBorder(scene: Scenegraph) {\n // 清理最终选中态选区(包含 fill handle)\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.delete();\n selectComp.fillhandle?.delete();\n }\n );\n scene.selectedRangeComponents = new Map();\n}\n\nexport function deleteAllSelectingBorder(scene: Scenegraph) {\n // 清理拖拽/框选过程中的临时选区\n scene.selectingRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.delete();\n selectComp.fillhandle?.delete();\n }\n );\n scene.selectingRangeComponents = new Map();\n}\n\nexport function removeFillHandleFromSelectComponents(scene: Scenegraph) {\n // 多选区时不展示 fill handle,需要从所有 selectedRangeComponents 中移除\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n selectComp.fillhandle?.delete();\n selectComp.fillhandle = undefined;\n }\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scenegraph/select/move-select-border.ts"],"names":[],"mappings":";;;AAEA,SAAgB,qDAAqD,CAAC,KAAiB;IACrF,KAAK,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,GAAG,EAAE,EAAE;;QAC7D,IAAI,KAAK,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC1C,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACtD,MAAA,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,0CAAE,MAAM,EAAE,CAAC;SAC9D;QACD,KAAK,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,wBAAwB,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3C,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B,CAAC;AAVD,sHAUC","file":"move-select-border.js","sourcesContent":["import type { Scenegraph } from '../scenegraph';\n\nexport function moveSelectingRangeComponentsToSelectedRangeComponents(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((rangeComponent, key) => {\n if (scene.selectedRangeComponents.get(key)) {\n scene.selectingRangeComponents.get(key).rect.delete();\n scene.selectingRangeComponents.get(key).fillhandle?.delete();\n }\n scene.selectedRangeComponents.set(key, rangeComponent);\n });\n scene.selectingRangeComponents = new Map();\n scene.updateNextFrame();\n}\n"]}
1
+ {"version":3,"sources":["../src/scenegraph/select/move-select-border.ts"],"names":[],"mappings":";;;AAEA,SAAgB,qDAAqD,CAAC,KAAiB;IAKrF,KAAK,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,GAAG,EAAE,EAAE;;QAC7D,IAAI,KAAK,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC1C,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACtD,MAAA,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,0CAAE,MAAM,EAAE,CAAC;SAC9D;QACD,KAAK,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,wBAAwB,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3C,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B,CAAC;AAdD,sHAcC","file":"move-select-border.js","sourcesContent":["import type { Scenegraph } from '../scenegraph';\n\nexport function moveSelectingRangeComponentsToSelectedRangeComponents(scene: Scenegraph) {\n // selectingRangeComponents 是拖拽/框选过程中的临时选区;\n // 鼠标松开后需要将其“提交”为 selectedRangeComponents,用于后续 hover/滚动时持续更新位置。\n //\n // 若 selectedRangeComponents 已存在同 key 的段落(例如重复选择同一区域),先删除旧图元避免泄漏与重复绘制。\n scene.selectingRangeComponents.forEach((rangeComponent, key) => {\n if (scene.selectedRangeComponents.get(key)) {\n scene.selectingRangeComponents.get(key).rect.delete();\n scene.selectingRangeComponents.get(key).fillhandle?.delete();\n }\n scene.selectedRangeComponents.set(key, rangeComponent);\n });\n scene.selectingRangeComponents = new Map();\n scene.updateNextFrame();\n}\n"]}
@@ -44,25 +44,25 @@ function updateCustomSelectBorder(scene, selectRange, style) {
44
44
  }
45
45
 
46
46
  function createCustomCellSelectBorder(scene, start_Col, start_Row, end_Col, end_Row, selectRangeType, selectId, strokes, style) {
47
- var _a, _b, _c, _d;
48
- const startCol = Math.min(start_Col, end_Col), startRow = Math.min(start_Row, end_Row), endCol = Math.max(start_Col, end_Col), endRow = Math.max(start_Row, end_Row), firstCellBound = scene.highPerformanceGetCell(startCol, startRow).globalAABBBounds, rect = (0,
47
+ var _a, _b, _c, _d, _e, _f;
48
+ const startCol = Math.min(start_Col, end_Col), startRow = Math.min(start_Row, end_Row), endCol = Math.max(start_Col, end_Col), endRow = Math.max(start_Row, end_Row), overlayGroup = scene.getSelectOverlayGroup(selectRangeType), offsetX = scene.tableGroup.attribute.x + (null !== (_a = overlayGroup.attribute.x) && void 0 !== _a ? _a : 0), offsetY = scene.tableGroup.attribute.y + (null !== (_b = overlayGroup.attribute.y) && void 0 !== _b ? _b : 0), firstCellBound = scene.highPerformanceGetCell(startCol, startRow).globalAABBBounds, rect = (0,
49
49
  vrender_1.createRect)({
50
50
  pickable: !1,
51
- fill: null !== (_a = style.cellBgColor) && void 0 !== _a && _a,
52
- lineWidth: null !== (_b = style.cellBorderLineWidth) && void 0 !== _b ? _b : 0,
53
- lineDash: null !== (_c = style.cellBorderLineDash) && void 0 !== _c ? _c : [],
51
+ fill: null !== (_c = style.cellBgColor) && void 0 !== _c && _c,
52
+ lineWidth: null !== (_d = style.cellBorderLineWidth) && void 0 !== _d ? _d : 0,
53
+ lineDash: null !== (_e = style.cellBorderLineDash) && void 0 !== _e ? _e : [],
54
54
  stroke: strokes.map((stroke => !!stroke && style.cellBorderColor)),
55
- x: firstCellBound.x1 - scene.tableGroup.attribute.x,
56
- y: firstCellBound.y1 - scene.tableGroup.attribute.y,
55
+ x: firstCellBound.x1 - offsetX,
56
+ y: firstCellBound.y1 - offsetY,
57
57
  width: 0,
58
58
  height: 0,
59
59
  visible: !0,
60
- cornerRadius: (0, create_select_border_1.getCornerRadius)(selectRangeType, null === (_d = scene.table.theme.frameStyle) || void 0 === _d ? void 0 : _d.cornerRadius, start_Col, start_Row, end_Col, end_Row, scene.table)
60
+ cornerRadius: (0, create_select_border_1.getCornerRadius)(selectRangeType, null === (_f = scene.table.theme.frameStyle) || void 0 === _f ? void 0 : _f.cornerRadius, start_Col, start_Row, end_Col, end_Row, scene.table)
61
61
  });
62
62
  scene.customSelectedRangeComponents.set(`${startCol}-${startRow}-${endCol}-${endRow}-${selectId}`, {
63
63
  rect: rect,
64
64
  role: selectRangeType
65
- }), scene.tableGroup.insertAfter(rect, "body" === selectRangeType ? scene.bodyGroup : "columnHeader" === selectRangeType ? scene.colHeaderGroup : "rowHeader" === selectRangeType ? scene.rowHeaderGroup : "cornerHeader" === selectRangeType ? scene.cornerHeaderGroup : "rightTopCorner" === selectRangeType ? scene.rightTopCornerGroup : "rightFrozen" === selectRangeType ? scene.rightFrozenGroup : "leftBottomCorner" === selectRangeType ? scene.leftBottomCornerGroup : "bottomFrozen" === selectRangeType ? scene.bottomFrozenGroup : scene.rightBottomCornerGroup);
65
+ }), overlayGroup.addChild(rect);
66
66
  }
67
67
 
68
68
  exports.updateCustomSelectBorder = updateCustomSelectBorder;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scenegraph/select/update-custom-select-border.ts"],"names":[],"mappings":"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","file":"update-custom-select-border.js","sourcesContent":["import { type IRect } from './../../vrender';\nimport type { Scenegraph } from '../scenegraph';\nimport type { CellRange, CellSubLocation } from '../../ts-types';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport { calculateCellRangeDistribution } from '../utils/cell-pos';\nimport { createRect } from './../../vrender';\nimport { getCornerRadius } from './create-select-border';\nimport type { CustomSelectionStyle } from '../../ts-types';\n\nexport function updateCustomSelectBorder(\n scene: Scenegraph,\n selectRange: CellRange & { skipBodyMerge?: boolean },\n style: CustomSelectionStyle\n) {\n const table = scene.table;\n const newStartCol = selectRange.start.col;\n const newStartRow = selectRange.start.row;\n const newEndCol = selectRange.end.col;\n const newEndRow = selectRange.end.row;\n const skipBodyMerge = selectRange.skipBodyMerge;\n\n const startCol = Math.max(Math.min(newEndCol, newStartCol), 0);\n const startRow = Math.max(Math.min(newEndRow, newStartRow), 0);\n const endCol = Math.min(Math.max(newEndCol, newStartCol), table.colCount - 1);\n const endRow = Math.min(Math.max(newEndRow, newStartRow), table.rowCount - 1);\n\n const {\n needRowHeader,\n needRightRowHeader,\n needColumnHeader,\n needBottomColumnHeader,\n needBody,\n needCornerHeader,\n needRightTopCornerHeader,\n needLeftBottomCornerHeader,\n needRightBottomCornerHeader\n } = calculateCellRangeDistribution(startCol, startRow, endCol, endRow, table);\n\n if (needCornerHeader) {\n const cornerEndCol = Math.min(endCol, table.frozenColCount - 1);\n const cornerEndRow = Math.min(endRow, table.frozenRowCount - 1);\n const strokeArray = [true, !needColumnHeader, !needRowHeader, true];\n createCustomCellSelectBorder(\n scene,\n startCol,\n startRow,\n cornerEndCol,\n cornerEndRow,\n 'cornerHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needRightTopCornerHeader) {\n const cornerStartCol = Math.max(startCol, table.colCount - table.rightFrozenColCount);\n const cornerEndRow = Math.min(endRow, table.frozenRowCount - 1);\n const strokeArray = [true, true, !needRightRowHeader, !needColumnHeader];\n createCustomCellSelectBorder(\n scene,\n cornerStartCol,\n startRow,\n endCol,\n cornerEndRow,\n 'rightTopCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n\n if (needLeftBottomCornerHeader) {\n const cornerEndCol = Math.min(endCol, table.frozenColCount - 1);\n const cornerStartRow = Math.max(startRow, table.rowCount - table.bottomFrozenRowCount);\n const strokeArray = [!needRowHeader, !needBottomColumnHeader, true, true];\n createCustomCellSelectBorder(\n scene,\n startCol,\n cornerStartRow,\n cornerEndCol,\n endRow,\n 'leftBottomCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needRightBottomCornerHeader) {\n const cornerStartCol = Math.max(startCol, table.colCount - table.rightFrozenColCount);\n const cornerStartRow = Math.max(startRow, table.rowCount - table.bottomFrozenRowCount);\n const strokeArray = [!needRightRowHeader, true, true, !needBottomColumnHeader];\n createCustomCellSelectBorder(\n scene,\n cornerStartCol,\n cornerStartRow,\n endCol,\n endRow,\n 'rightBottomCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needColumnHeader) {\n const columnHeaderStartCol = Math.max(startCol, table.frozenColCount);\n const columnHeaderEndCol = Math.min(endCol, table.colCount - table.rightFrozenColCount - 1);\n const columnHeaderEndRow = Math.min(endRow, table.frozenRowCount - 1);\n const strokeArray = [true, !needRightTopCornerHeader, !needBody, !needCornerHeader];\n createCustomCellSelectBorder(\n scene,\n columnHeaderStartCol,\n startRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'columnHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needBottomColumnHeader) {\n const columnHeaderStartCol = Math.max(startCol, table.frozenColCount);\n const columnHeaderEndCol = Math.min(endCol, table.colCount - table.rightFrozenColCount - 1);\n const columnHeaderStartRow = Math.max(startRow, table.rowCount - table.bottomFrozenRowCount);\n const strokeArray = [!needBody, !needRightBottomCornerHeader, true, !needLeftBottomCornerHeader];\n createCustomCellSelectBorder(\n scene,\n columnHeaderStartCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n endRow,\n 'bottomFrozen',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needRowHeader) {\n const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount);\n const columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);\n const columnHeaderEndCol = Math.min(endCol, table.frozenColCount - 1);\n const strokeArray = [!needCornerHeader, !needBody, !needLeftBottomCornerHeader, true];\n createCustomCellSelectBorder(\n scene,\n startCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'rowHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needRightRowHeader) {\n const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount);\n const columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);\n const columnHeaderStartCol = Math.max(startCol, table.colCount - table.rightFrozenColCount);\n const strokeArray = [!needRightTopCornerHeader, true, !needRightBottomCornerHeader, !needBody];\n createCustomCellSelectBorder(\n scene,\n columnHeaderStartCol,\n columnHeaderStartRow,\n endCol,\n columnHeaderEndRow,\n 'rightFrozen',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needBody) {\n const columnHeaderStartCol = Math.max(startCol, table.frozenColCount);\n const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount);\n const columnHeaderEndCol = Math.min(endCol, table.colCount - table.rightFrozenColCount - 1);\n const columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);\n const strokeArray = [!needColumnHeader, !needRightRowHeader, !needBottomColumnHeader, !needRowHeader];\n createCustomCellSelectBorder(\n scene,\n columnHeaderStartCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'body',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n}\n\nfunction createCustomCellSelectBorder(\n scene: Scenegraph,\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n selectRangeType: CellSubLocation,\n selectId: string, //整体区域${endRow}-${startCol}${startRow}${endCol}${endRow}作为其编号\n strokes: boolean[],\n style: CustomSelectionStyle\n) {\n const startCol = Math.min(start_Col, end_Col);\n const startRow = Math.min(start_Row, end_Row);\n const endCol = Math.max(start_Col, end_Col);\n const endRow = Math.max(start_Row, end_Row);\n const firstCellBound = scene.highPerformanceGetCell(startCol, startRow).globalAABBBounds;\n const rect = createRect({\n pickable: false,\n fill: style.cellBgColor ?? false,\n lineWidth: style.cellBorderLineWidth ?? 0,\n lineDash: style.cellBorderLineDash ?? [],\n stroke: strokes.map(stroke => {\n if (stroke) {\n return style.cellBorderColor as string;\n }\n return false;\n }),\n x: firstCellBound.x1 - scene.tableGroup.attribute.x, // 坐标xy及宽高width height 不需要这里计算具体值 update-select-border文件中updateComponent方法中有逻辑 且该方法调用时间是render\n y: firstCellBound.y1 - scene.tableGroup.attribute.y,\n width: 0,\n height: 0,\n visible: true,\n cornerRadius: getCornerRadius(\n selectRangeType,\n scene.table.theme.frameStyle?.cornerRadius,\n start_Col,\n start_Row,\n end_Col,\n end_Row,\n scene.table\n )\n });\n scene.customSelectedRangeComponents.set(`${startCol}-${startRow}-${endCol}-${endRow}-${selectId}`, {\n rect,\n role: selectRangeType\n });\n scene.tableGroup.insertAfter(\n rect,\n selectRangeType === 'body'\n ? scene.bodyGroup\n : selectRangeType === 'columnHeader'\n ? scene.colHeaderGroup\n : selectRangeType === 'rowHeader'\n ? scene.rowHeaderGroup\n : selectRangeType === 'cornerHeader'\n ? scene.cornerHeaderGroup\n : selectRangeType === 'rightTopCorner'\n ? scene.rightTopCornerGroup\n : selectRangeType === 'rightFrozen'\n ? scene.rightFrozenGroup\n : selectRangeType === 'leftBottomCorner'\n ? scene.leftBottomCornerGroup\n : selectRangeType === 'bottomFrozen'\n ? scene.bottomFrozenGroup\n : scene.rightBottomCornerGroup\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/scenegraph/select/update-custom-select-border.ts"],"names":[],"mappings":"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","file":"update-custom-select-border.js","sourcesContent":["import { type IRect } from './../../vrender';\nimport type { Scenegraph } from '../scenegraph';\nimport type { CellRange, CellSubLocation } from '../../ts-types';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport { calculateCellRangeDistribution } from '../utils/cell-pos';\nimport { createRect } from './../../vrender';\nimport { getCornerRadius } from './create-select-border';\nimport type { CustomSelectionStyle } from '../../ts-types';\n\nexport function updateCustomSelectBorder(\n scene: Scenegraph,\n selectRange: CellRange & { skipBodyMerge?: boolean },\n style: CustomSelectionStyle\n) {\n // 自定义选区(CustomSelectionStyle)与默认选区的拆分方式一致:\n // 仍然需要按 corner/headers/body/rightFrozen/bottomFrozen 等区域拆分绘制,\n // 以便配合各区域的 clipRect,避免跨区域绘制导致的越界或重复描边。\n const table = scene.table;\n const newStartCol = selectRange.start.col;\n const newStartRow = selectRange.start.row;\n const newEndCol = selectRange.end.col;\n const newEndRow = selectRange.end.row;\n const skipBodyMerge = selectRange.skipBodyMerge;\n\n const startCol = Math.max(Math.min(newEndCol, newStartCol), 0);\n const startRow = Math.max(Math.min(newEndRow, newStartRow), 0);\n const endCol = Math.min(Math.max(newEndCol, newStartCol), table.colCount - 1);\n const endRow = Math.min(Math.max(newEndRow, newStartRow), table.rowCount - 1);\n\n const {\n needRowHeader,\n needRightRowHeader,\n needColumnHeader,\n needBottomColumnHeader,\n needBody,\n needCornerHeader,\n needRightTopCornerHeader,\n needLeftBottomCornerHeader,\n needRightBottomCornerHeader\n } = calculateCellRangeDistribution(startCol, startRow, endCol, endRow, table);\n\n if (needCornerHeader) {\n const cornerEndCol = Math.min(endCol, table.frozenColCount - 1);\n const cornerEndRow = Math.min(endRow, table.frozenRowCount - 1);\n const strokeArray = [true, !needColumnHeader, !needRowHeader, true];\n createCustomCellSelectBorder(\n scene,\n startCol,\n startRow,\n cornerEndCol,\n cornerEndRow,\n 'cornerHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needRightTopCornerHeader) {\n const cornerStartCol = Math.max(startCol, table.colCount - table.rightFrozenColCount);\n const cornerEndRow = Math.min(endRow, table.frozenRowCount - 1);\n const strokeArray = [true, true, !needRightRowHeader, !needColumnHeader];\n createCustomCellSelectBorder(\n scene,\n cornerStartCol,\n startRow,\n endCol,\n cornerEndRow,\n 'rightTopCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n\n if (needLeftBottomCornerHeader) {\n const cornerEndCol = Math.min(endCol, table.frozenColCount - 1);\n const cornerStartRow = Math.max(startRow, table.rowCount - table.bottomFrozenRowCount);\n const strokeArray = [!needRowHeader, !needBottomColumnHeader, true, true];\n createCustomCellSelectBorder(\n scene,\n startCol,\n cornerStartRow,\n cornerEndCol,\n endRow,\n 'leftBottomCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needRightBottomCornerHeader) {\n const cornerStartCol = Math.max(startCol, table.colCount - table.rightFrozenColCount);\n const cornerStartRow = Math.max(startRow, table.rowCount - table.bottomFrozenRowCount);\n const strokeArray = [!needRightRowHeader, true, true, !needBottomColumnHeader];\n createCustomCellSelectBorder(\n scene,\n cornerStartCol,\n cornerStartRow,\n endCol,\n endRow,\n 'rightBottomCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needColumnHeader) {\n const columnHeaderStartCol = Math.max(startCol, table.frozenColCount);\n const columnHeaderEndCol = Math.min(endCol, table.colCount - table.rightFrozenColCount - 1);\n const columnHeaderEndRow = Math.min(endRow, table.frozenRowCount - 1);\n const strokeArray = [true, !needRightTopCornerHeader, !needBody, !needCornerHeader];\n createCustomCellSelectBorder(\n scene,\n columnHeaderStartCol,\n startRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'columnHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needBottomColumnHeader) {\n const columnHeaderStartCol = Math.max(startCol, table.frozenColCount);\n const columnHeaderEndCol = Math.min(endCol, table.colCount - table.rightFrozenColCount - 1);\n const columnHeaderStartRow = Math.max(startRow, table.rowCount - table.bottomFrozenRowCount);\n const strokeArray = [!needBody, !needRightBottomCornerHeader, true, !needLeftBottomCornerHeader];\n createCustomCellSelectBorder(\n scene,\n columnHeaderStartCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n endRow,\n 'bottomFrozen',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needRowHeader) {\n const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount);\n const columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);\n const columnHeaderEndCol = Math.min(endCol, table.frozenColCount - 1);\n const strokeArray = [!needCornerHeader, !needBody, !needLeftBottomCornerHeader, true];\n createCustomCellSelectBorder(\n scene,\n startCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'rowHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needRightRowHeader) {\n const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount);\n const columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);\n const columnHeaderStartCol = Math.max(startCol, table.colCount - table.rightFrozenColCount);\n const strokeArray = [!needRightTopCornerHeader, true, !needRightBottomCornerHeader, !needBody];\n createCustomCellSelectBorder(\n scene,\n columnHeaderStartCol,\n columnHeaderStartRow,\n endCol,\n columnHeaderEndRow,\n 'rightFrozen',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n if (needBody) {\n const columnHeaderStartCol = Math.max(startCol, table.frozenColCount);\n const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount);\n const columnHeaderEndCol = Math.min(endCol, table.colCount - table.rightFrozenColCount - 1);\n const columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);\n const strokeArray = [!needColumnHeader, !needRightRowHeader, !needBottomColumnHeader, !needRowHeader];\n createCustomCellSelectBorder(\n scene,\n columnHeaderStartCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'body',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray,\n style\n );\n }\n}\n\nfunction createCustomCellSelectBorder(\n scene: Scenegraph,\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n selectRangeType: CellSubLocation,\n selectId: string, //整体区域${endRow}-${startCol}${startRow}${endCol}${endRow}作为其编号\n strokes: boolean[],\n style: CustomSelectionStyle\n) {\n // 自定义选区只负责绘制 rect(不包含 fill handle),其 key 与默认选区保持一致,便于统一更新/删除。\n const startCol = Math.min(start_Col, end_Col);\n const startRow = Math.min(start_Row, end_Row);\n const endCol = Math.max(start_Col, end_Col);\n const endRow = Math.max(start_Row, end_Row);\n const overlayGroup = scene.getSelectOverlayGroup(selectRangeType);\n const offsetX = scene.tableGroup.attribute.x + (overlayGroup.attribute.x ?? 0);\n const offsetY = scene.tableGroup.attribute.y + (overlayGroup.attribute.y ?? 0);\n const firstCellBound = scene.highPerformanceGetCell(startCol, startRow).globalAABBBounds;\n const rect = createRect({\n pickable: false,\n fill: style.cellBgColor ?? false,\n lineWidth: style.cellBorderLineWidth ?? 0,\n lineDash: style.cellBorderLineDash ?? [],\n stroke: strokes.map(stroke => {\n if (stroke) {\n return style.cellBorderColor as string;\n }\n return false;\n }),\n x: firstCellBound.x1 - offsetX,\n y: firstCellBound.y1 - offsetY,\n width: 0,\n height: 0,\n visible: true,\n cornerRadius: getCornerRadius(\n selectRangeType,\n scene.table.theme.frameStyle?.cornerRadius,\n start_Col,\n start_Row,\n end_Col,\n end_Row,\n scene.table\n )\n });\n scene.customSelectedRangeComponents.set(`${startCol}-${startRow}-${endCol}-${endRow}-${selectId}`, {\n rect,\n role: selectRangeType\n });\n overlayGroup.addChild(rect);\n}\n"]}
@@ -17,7 +17,7 @@ function updateAllSelectComponent(scene) {
17
17
  }
18
18
 
19
19
  function updateComponent(selectComp, key, scene) {
20
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
20
+ var _a, _b, _c, _d, _e, _f, _g, _h;
21
21
  const table = scene.table, [startColStr, startRowStr, endColStr, endRowStr] = key.split("-"), startCol = parseInt(startColStr, 10), startRow = parseInt(startRowStr, 10), endCol = parseInt(endColStr, 10), endRow = parseInt(endRowStr, 10);
22
22
  let visibleCellRange, computeRectCellRangeStartCol = startCol, computeRectCellRangeStartRow = startRow, computeRectCellRangeEndCol = endCol, computeRectCellRangeEndRow = endRow;
23
23
  switch (selectComp.role) {
@@ -48,10 +48,10 @@ function updateComponent(selectComp, key, scene) {
48
48
  computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1), computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1),
49
49
  computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1));
50
50
  }
51
- const colsWidth = table.getColsWidth(computeRectCellRangeStartCol, computeRectCellRangeEndCol), rowsHeight = table.getRowsHeight(computeRectCellRangeStartRow, computeRectCellRangeEndRow), firstCellBound = scene.highPerformanceGetCell(computeRectCellRangeStartCol, computeRectCellRangeStartRow).globalAABBBounds;
51
+ const colsWidth = table.getColsWidth(computeRectCellRangeStartCol, computeRectCellRangeEndCol), rowsHeight = table.getRowsHeight(computeRectCellRangeStartRow, computeRectCellRangeEndRow), overlayGroup = scene.getSelectOverlayGroup(selectComp.role), offsetX = scene.tableGroup.attribute.x + (null !== (_a = overlayGroup.attribute.x) && void 0 !== _a ? _a : 0), offsetY = scene.tableGroup.attribute.y + (null !== (_b = overlayGroup.attribute.y) && void 0 !== _b ? _b : 0), firstCellBound = scene.highPerformanceGetCell(computeRectCellRangeStartCol, computeRectCellRangeStartRow).globalAABBBounds;
52
52
  if (selectComp.rect.setAttributes({
53
- x: firstCellBound.x1 - scene.tableGroup.attribute.x,
54
- y: firstCellBound.y1 - scene.tableGroup.attribute.y,
53
+ x: firstCellBound.x1 - offsetX,
54
+ y: firstCellBound.y1 - offsetY,
55
55
  width: colsWidth,
56
56
  height: rowsHeight,
57
57
  visible: !0
@@ -61,17 +61,17 @@ function updateComponent(selectComp, key, scene) {
61
61
  currentHeight: rowsHeight,
62
62
  selectComp: selectComp
63
63
  }), selectComp.fillhandle) {
64
- const fillHandle = null === (_a = scene.table.options.excelOptions) || void 0 === _a ? void 0 : _a.fillHandle;
64
+ const fillHandle = null === (_c = scene.table.options.excelOptions) || void 0 === _c ? void 0 : _c.fillHandle;
65
65
  let lastCellBound, handlerX, visible = !0;
66
66
  "function" == typeof fillHandle && (visible = fillHandle({
67
67
  selectRanges: scene.table.stateManager.select.ranges,
68
68
  table: scene.table
69
69
  })), endCol < table.colCount - 1 ? (lastCellBound = scene.highPerformanceGetCell(endCol, endRow).globalAABBBounds,
70
- handlerX = lastCellBound.x2 - scene.tableGroup.attribute.x - 3) : 0 === startCol ? (lastCellBound = scene.highPerformanceGetCell(0, endRow).globalAABBBounds,
71
- handlerX = lastCellBound.x1 - scene.tableGroup.attribute.x) : (lastCellBound = scene.highPerformanceGetCell(startCol - 1, endRow).globalAABBBounds,
72
- handlerX = lastCellBound.x2 - scene.tableGroup.attribute.x - 3), lastCellBound = endRow < table.rowCount - 1 ? scene.highPerformanceGetCell(endCol, endRow).globalAABBBounds : scene.highPerformanceGetCell(endCol, startRow - 1).globalAABBBounds;
73
- const handlerY = lastCellBound.y2 - scene.tableGroup.attribute.y - 3;
74
- null === (_b = selectComp.fillhandle) || void 0 === _b || _b.setAttributes({
70
+ handlerX = lastCellBound.x2 - offsetX - 3) : 0 === startCol ? (lastCellBound = scene.highPerformanceGetCell(0, endRow).globalAABBBounds,
71
+ handlerX = lastCellBound.x1 - offsetX) : (lastCellBound = scene.highPerformanceGetCell(startCol - 1, endRow).globalAABBBounds,
72
+ handlerX = lastCellBound.x2 - offsetX - 3), lastCellBound = endRow < table.rowCount - 1 ? scene.highPerformanceGetCell(endCol, endRow).globalAABBBounds : scene.highPerformanceGetCell(endCol, startRow - 1).globalAABBBounds;
73
+ const handlerY = lastCellBound.y2 - offsetY - 3;
74
+ null === (_d = selectComp.fillhandle) || void 0 === _d || _d.setAttributes({
75
75
  x: handlerX,
76
76
  y: handlerY,
77
77
  width: 6,
@@ -79,78 +79,19 @@ function updateComponent(selectComp, key, scene) {
79
79
  visible: visible
80
80
  });
81
81
  }
82
- let isNearRowHeader = !!table.frozenColCount && startCol === table.frozenColCount;
83
- if (!isNearRowHeader && table.frozenColCount && table.scrollLeft > 0 && startCol >= table.frozenColCount) {
84
- table.getColsWidth(0, startCol - 1) - table.scrollLeft < table.getFrozenColsWidth() && (isNearRowHeader = !0);
85
- }
86
- let isNearRightRowHeader = !!table.rightFrozenColCount && (table.rightFrozenColCount > 0 && endCol === table.colCount - table.rightFrozenColCount - 1);
87
- if (!isNearRightRowHeader && table.rightFrozenColCount && endCol < table.colCount - table.rightFrozenColCount) {
88
- table.getColsWidth(0, endCol) - table.scrollLeft > table.tableNoFrameWidth - table.getRightFrozenColsWidth() && (isNearRightRowHeader = !0);
89
- }
90
- let isNearColHeader = !table.frozenRowCount || startRow === table.frozenRowCount;
91
- if (!isNearColHeader && table.frozenRowCount && table.scrollTop > 0 && startRow >= table.frozenRowCount) {
92
- table.getRowsHeight(0, startRow - 1) - table.scrollTop < table.getFrozenRowsHeight() && (isNearColHeader = !0);
93
- }
94
- let isNearBottomColHeader = !!table.bottomFrozenRowCount && endRow === table.rowCount - table.bottomFrozenRowCount - 1;
95
- if (!isNearBottomColHeader && table.bottomFrozenRowCount && endRow < table.rowCount - table.bottomFrozenRowCount) {
96
- table.getRowsHeight(0, endRow) - table.scrollTop > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight() && (isNearBottomColHeader = !0);
97
- }
98
- const {dynamicUpdateSelectionSize: dynamicUpdateSelectionSize} = table.theme.selectionStyle;
99
- if (isNearRowHeader && (selectComp.rect.attribute.stroke[3] || dynamicUpdateSelectionSize) || isNearRightRowHeader && (selectComp.rect.attribute.stroke[1] || dynamicUpdateSelectionSize) || isNearColHeader && (selectComp.rect.attribute.stroke[0] || dynamicUpdateSelectionSize) || isNearBottomColHeader && (selectComp.rect.attribute.stroke[2] || dynamicUpdateSelectionSize)) {
100
- if (isNearRowHeader && selectComp.rect.attribute.stroke[3] && scene.tableGroup.insertAfter(selectComp.rect, "columnHeader" === selectComp.role ? scene.cornerHeaderGroup : "bottomFrozen" === selectComp.role ? scene.leftBottomCornerGroup : scene.rowHeaderGroup),
101
- isNearBottomColHeader && selectComp.rect.attribute.stroke[2] && scene.tableGroup.insertAfter(selectComp.rect, "rowHeader" === selectComp.role ? scene.leftBottomCornerGroup : "rightFrozen" === selectComp.role ? scene.rightBottomCornerGroup : scene.bottomFrozenGroup),
102
- isNearColHeader && selectComp.rect.attribute.stroke[0] && scene.tableGroup.insertAfter(selectComp.rect, "rowHeader" === selectComp.role ? scene.cornerHeaderGroup : "rightFrozen" === selectComp.role ? scene.rightTopCornerGroup : scene.colHeaderGroup),
103
- isNearRightRowHeader && selectComp.rect.attribute.stroke[1] && scene.tableGroup.insertAfter(selectComp.rect, "columnHeader" === selectComp.role ? scene.rightTopCornerGroup : "bottomFrozen" === selectComp.role ? scene.rightBottomCornerGroup : scene.rightFrozenGroup),
104
- selectComp.rect.attribute.x < table.getFrozenColsWidth() && table.scrollLeft > 0 && ("body" === selectComp.role || "columnHeader" === selectComp.role || "bottomFrozen" === selectComp.role)) {
105
- const width = selectComp.rect.attribute.width - (table.getFrozenColsWidth() - selectComp.rect.attribute.x);
106
- selectComp.rect.setAttributes({
107
- x: selectComp.rect.attribute.x + (table.getFrozenColsWidth() - selectComp.rect.attribute.x),
108
- width: width > 0 ? width : 0
109
- }), null === (_c = selectComp.fillhandle) || void 0 === _c || _c.setAttributes({
110
- visible: width > 0
111
- });
112
- }
113
- if (table.getRightFrozenColsWidth() > 0 && scene.rightFrozenGroup.attribute.height > 0 && selectComp.rect.attribute.x + selectComp.rect.attribute.width > scene.rightFrozenGroup.attribute.x && ("body" === selectComp.role || "columnHeader" === selectComp.role || "bottomFrozen" === selectComp.role)) {
114
- const width = scene.rightFrozenGroup.attribute.x - selectComp.rect.attribute.x;
115
- selectComp.rect.setAttributes({
116
- x: selectComp.rect.attribute.x,
117
- width: width > 0 ? width : 0
118
- }), null === (_d = selectComp.fillhandle) || void 0 === _d || _d.setAttributes({
119
- visible: width - colsWidth > 0
120
- });
121
- }
122
- if (selectComp.rect.attribute.y < scene.colHeaderGroup.attribute.height && table.scrollTop > 0 && ("body" === selectComp.role || "rowHeader" === selectComp.role || "rightFrozen" === selectComp.role)) {
123
- const height = selectComp.rect.attribute.height - (scene.colHeaderGroup.attribute.height - selectComp.rect.attribute.y);
124
- selectComp.rect.setAttributes({
125
- y: selectComp.rect.attribute.y + (scene.colHeaderGroup.attribute.height - selectComp.rect.attribute.y),
126
- height: height > 0 ? height : 0
127
- }), null === (_e = selectComp.fillhandle) || void 0 === _e || _e.setAttributes({
128
- visible: height > 0
129
- });
130
- }
131
- if (scene.bottomFrozenGroup.attribute.width > 0 && scene.bottomFrozenGroup.attribute.height > 0 && selectComp.rect.attribute.y + selectComp.rect.attribute.height > scene.bottomFrozenGroup.attribute.y && ("body" === selectComp.role || "rowHeader" === selectComp.role || "rightFrozen" === selectComp.role)) {
132
- const height = scene.bottomFrozenGroup.attribute.y - selectComp.rect.attribute.y;
133
- selectComp.rect.setAttributes({
134
- y: selectComp.rect.attribute.y,
135
- height: height > 0 ? height : 0
136
- }), null === (_f = selectComp.fillhandle) || void 0 === _f || _f.setAttributes({
137
- visible: height - rowsHeight > 0
138
- });
139
- }
140
- } else scene.tableGroup.insertAfter(selectComp.rect, "body" === selectComp.role ? scene.bodyGroup : "columnHeader" === selectComp.role ? scene.colHeaderGroup : "rowHeader" === selectComp.role ? scene.rowHeaderGroup : "cornerHeader" === selectComp.role ? scene.cornerHeaderGroup : "rightTopCorner" === selectComp.role ? scene.rightTopCornerGroup : "rightFrozen" === selectComp.role ? scene.rightFrozenGroup : "leftBottomCorner" === selectComp.role ? scene.leftBottomCornerGroup : "bottomFrozen" === selectComp.role ? scene.bottomFrozenGroup : scene.rightBottomCornerGroup);
141
82
  let diffSize = 0;
142
83
  "number" == typeof selectComp.rect.attribute.lineWidth && (diffSize = Math.ceil(selectComp.rect.attribute.lineWidth / 2)),
143
- endCol === table.colCount - 1 && (Array.isArray(selectComp.rect.attribute.lineWidth) && (diffSize = Math.ceil((null !== (_g = selectComp.rect.attribute.lineWidth[1]) && void 0 !== _g ? _g : 0) / 2)),
84
+ endCol === table.colCount - 1 && (Array.isArray(selectComp.rect.attribute.lineWidth) && (diffSize = Math.ceil((null !== (_e = selectComp.rect.attribute.lineWidth[1]) && void 0 !== _e ? _e : 0) / 2)),
144
85
  selectComp.rect.setAttributes({
145
86
  width: selectComp.rect.attribute.width - diffSize
146
- })), 0 === startCol && (Array.isArray(selectComp.rect.attribute.lineWidth) && (diffSize = Math.ceil((null !== (_h = selectComp.rect.attribute.lineWidth[3]) && void 0 !== _h ? _h : 0) / 2)),
87
+ })), 0 === startCol && (Array.isArray(selectComp.rect.attribute.lineWidth) && (diffSize = Math.ceil((null !== (_f = selectComp.rect.attribute.lineWidth[3]) && void 0 !== _f ? _f : 0) / 2)),
147
88
  selectComp.rect.setAttributes({
148
89
  x: selectComp.rect.attribute.x + diffSize,
149
90
  width: selectComp.rect.attribute.width - diffSize
150
- })), endRow === table.rowCount - 1 && (Array.isArray(selectComp.rect.attribute.lineWidth) && (diffSize = Math.ceil((null !== (_j = selectComp.rect.attribute.lineWidth[2]) && void 0 !== _j ? _j : 0) / 2)),
91
+ })), endRow === table.rowCount - 1 && (Array.isArray(selectComp.rect.attribute.lineWidth) && (diffSize = Math.ceil((null !== (_g = selectComp.rect.attribute.lineWidth[2]) && void 0 !== _g ? _g : 0) / 2)),
151
92
  selectComp.rect.setAttributes({
152
93
  height: selectComp.rect.attribute.height - diffSize
153
- })), 0 === startRow && (Array.isArray(selectComp.rect.attribute.lineWidth) && (diffSize = Math.ceil((null !== (_k = selectComp.rect.attribute.lineWidth[0]) && void 0 !== _k ? _k : 0) / 2)),
94
+ })), 0 === startRow && (Array.isArray(selectComp.rect.attribute.lineWidth) && (diffSize = Math.ceil((null !== (_h = selectComp.rect.attribute.lineWidth[0]) && void 0 !== _h ? _h : 0) / 2)),
154
95
  selectComp.rect.setAttributes({
155
96
  y: selectComp.rect.attribute.y + diffSize,
156
97
  height: selectComp.rect.attribute.height - diffSize