@visactor/vtable 0.22.1 → 0.23.0-alpha.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 (83) hide show
  1. package/cjs/core/BaseTable.d.ts +1 -0
  2. package/cjs/core/BaseTable.js +5 -1
  3. package/cjs/core/BaseTable.js.map +1 -1
  4. package/cjs/core/TABLE_EVENT_TYPE.d.ts +3 -0
  5. package/cjs/core/TABLE_EVENT_TYPE.js +4 -1
  6. package/cjs/core/TABLE_EVENT_TYPE.js.map +1 -1
  7. package/cjs/event/event.d.ts +2 -0
  8. package/cjs/event/event.js +30 -1
  9. package/cjs/event/event.js.map +1 -1
  10. package/cjs/event/listener/container-dom.js +78 -39
  11. package/cjs/event/listener/container-dom.js.map +1 -1
  12. package/cjs/event/listener/table-group.js +5 -4
  13. package/cjs/event/listener/table-group.js.map +1 -1
  14. package/cjs/index.d.ts +1 -1
  15. package/cjs/index.js +1 -1
  16. package/cjs/index.js.map +1 -1
  17. package/cjs/layout/tree-helper.js +1 -0
  18. package/cjs/plugins/themes.js +1 -2
  19. package/cjs/scenegraph/scenegraph.d.ts +3 -0
  20. package/cjs/scenegraph/scenegraph.js +3 -0
  21. package/cjs/scenegraph/scenegraph.js.map +1 -1
  22. package/cjs/scenegraph/select/create-select-border.d.ts +1 -1
  23. package/cjs/scenegraph/select/create-select-border.js +24 -5
  24. package/cjs/scenegraph/select/create-select-border.js.map +1 -1
  25. package/cjs/scenegraph/select/delete-select-border.d.ts +1 -0
  26. package/cjs/scenegraph/select/delete-select-border.js +15 -4
  27. package/cjs/scenegraph/select/delete-select-border.js.map +1 -1
  28. package/cjs/scenegraph/select/move-select-border.js +3 -1
  29. package/cjs/scenegraph/select/move-select-border.js.map +1 -1
  30. package/cjs/scenegraph/select/update-select-border.js +9 -2
  31. package/cjs/scenegraph/select/update-select-border.js.map +1 -1
  32. package/cjs/state/state.d.ts +10 -0
  33. package/cjs/state/state.js +17 -0
  34. package/cjs/state/state.js.map +1 -1
  35. package/cjs/ts-types/base-table.d.ts +4 -0
  36. package/cjs/ts-types/base-table.js.map +1 -1
  37. package/cjs/ts-types/events.d.ts +8 -0
  38. package/cjs/ts-types/events.js.map +1 -1
  39. package/cjs/ts-types/theme.js.map +1 -1
  40. package/cjs/vrender.js.map +1 -1
  41. package/dist/vtable.js +334 -80
  42. package/dist/vtable.min.js +2 -2
  43. package/es/core/BaseTable.d.ts +1 -0
  44. package/es/core/BaseTable.js +6 -2
  45. package/es/core/BaseTable.js.map +1 -1
  46. package/es/core/TABLE_EVENT_TYPE.d.ts +3 -0
  47. package/es/core/TABLE_EVENT_TYPE.js +4 -1
  48. package/es/core/TABLE_EVENT_TYPE.js.map +1 -1
  49. package/es/event/event.d.ts +2 -0
  50. package/es/event/event.js +30 -1
  51. package/es/event/event.js.map +1 -1
  52. package/es/event/listener/container-dom.js +78 -39
  53. package/es/event/listener/container-dom.js.map +1 -1
  54. package/es/event/listener/table-group.js +5 -4
  55. package/es/event/listener/table-group.js.map +1 -1
  56. package/es/index.d.ts +1 -1
  57. package/es/index.js +1 -1
  58. package/es/index.js.map +1 -1
  59. package/es/layout/tree-helper.js +2 -1
  60. package/es/plugins/themes.js +1 -2
  61. package/es/scenegraph/scenegraph.d.ts +3 -0
  62. package/es/scenegraph/scenegraph.js +4 -1
  63. package/es/scenegraph/scenegraph.js.map +1 -1
  64. package/es/scenegraph/select/create-select-border.d.ts +1 -1
  65. package/es/scenegraph/select/create-select-border.js +24 -5
  66. package/es/scenegraph/select/create-select-border.js.map +1 -1
  67. package/es/scenegraph/select/delete-select-border.d.ts +1 -0
  68. package/es/scenegraph/select/delete-select-border.js +12 -2
  69. package/es/scenegraph/select/delete-select-border.js.map +1 -1
  70. package/es/scenegraph/select/move-select-border.js +3 -1
  71. package/es/scenegraph/select/move-select-border.js.map +1 -1
  72. package/es/scenegraph/select/update-select-border.js +9 -2
  73. package/es/scenegraph/select/update-select-border.js.map +1 -1
  74. package/es/state/state.d.ts +10 -0
  75. package/es/state/state.js +17 -0
  76. package/es/state/state.js.map +1 -1
  77. package/es/ts-types/base-table.d.ts +4 -0
  78. package/es/ts-types/base-table.js.map +1 -1
  79. package/es/ts-types/events.d.ts +8 -0
  80. package/es/ts-types/events.js.map +1 -1
  81. package/es/ts-types/theme.js.map +1 -1
  82. package/es/vrender.js.map +1 -1
  83. package/package.json +5 -5
@@ -1,10 +1,17 @@
1
1
  import { createRect } from "./../../vrender";
2
2
 
3
3
  export function createCellSelectBorder(scene, start_Col, start_Row, end_Col, end_Row, selectRangeType, selectId, strokes) {
4
- var _a, _b, _c, _d;
5
- 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, theme = scene.table.theme, bodyClickBorderColor = null === (_a = theme.selectionStyle) || void 0 === _a ? void 0 : _a.cellBorderColor, bodyClickLineWidth = null === (_b = theme.selectionStyle) || void 0 === _b ? void 0 : _b.cellBorderLineWidth, rect = createRect({
4
+ var _a, _b, _c, _d, _e, _f, _g;
5
+ let isHasFillHandleRect = !!(null === (_a = scene.table.options.excelOptions) || void 0 === _a ? void 0 : _a.fillHandle);
6
+ if ((null === (_b = scene.table.stateManager.select.ranges) || void 0 === _b ? void 0 : _b.length) > 1) isHasFillHandleRect = !1,
7
+ scene.removeFillHandleFromSelectComponents(); else if (1 === (null === (_c = scene.table.stateManager.select.ranges) || void 0 === _c ? void 0 : _c.length)) {
8
+ const maxRow = Math.max(scene.table.stateManager.select.ranges[0].start.row, scene.table.stateManager.select.ranges[0].end.row), maxCol = Math.max(scene.table.stateManager.select.ranges[0].start.col, scene.table.stateManager.select.ranges[0].end.col);
9
+ scene.table.isHeader(maxCol, maxRow) && (isHasFillHandleRect = !1);
10
+ }
11
+ !Array.isArray(strokes) || !1 !== strokes[1] && !1 !== strokes[2] || (isHasFillHandleRect = !1);
12
+ 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 = createRect({
6
13
  pickable: !1,
7
- fill: null !== (_d = null === (_c = theme.selectionStyle) || void 0 === _c ? void 0 : _c.cellBgColor) && void 0 !== _d ? _d : "rgba(0, 0, 255,0.1)",
14
+ fill: null !== (_g = null === (_f = theme.selectionStyle) || void 0 === _f ? void 0 : _f.cellBgColor) && void 0 !== _g ? _g : "rgba(0, 0, 255,0.1)",
8
15
  lineWidth: bodyClickLineWidth,
9
16
  stroke: strokes.map((stroke => !!stroke && bodyClickBorderColor)),
10
17
  x: firstCellBound.x1 - scene.tableGroup.attribute.x,
@@ -13,9 +20,21 @@ export function createCellSelectBorder(scene, start_Col, start_Row, end_Col, end
13
20
  height: 0,
14
21
  visible: !0
15
22
  });
16
- scene.lastSelectId = selectId, scene.selectingRangeComponents.set(`${startCol}-${startRow}-${endCol}-${endRow}-${selectId}`, {
23
+ let fillhandle;
24
+ isHasFillHandleRect && (fillhandle = createRect({
25
+ pickable: !1,
26
+ fill: bodyClickBorderColor,
27
+ stroke: bodyClickBorderColor,
28
+ x: lastCellBound.x2 - 3,
29
+ y: lastCellBound.y2 - 3,
30
+ width: 6,
31
+ height: 6,
32
+ visible: !0
33
+ })), scene.lastSelectId = selectId, scene.selectingRangeComponents.set(`${startCol}-${startRow}-${endCol}-${endRow}-${selectId}`, {
17
34
  rect: rect,
35
+ fillhandle: fillhandle,
18
36
  role: selectRangeType
19
- }), 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);
37
+ }), 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),
38
+ 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);
20
39
  }
21
40
  //# sourceMappingURL=create-select-border.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scenegraph/select/create-select-border.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,MAAM,UAAU,sBAAsB,CACpC,KAAiB,EACjB,SAAiB,EACjB,SAAiB,EACjB,OAAe,EACf,OAAe,EACf,eAAgC,EAChC,QAAgB,EAChB,OAAmB;;IAEnB,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;IAC5C,MAAM,cAAc,GAAG,KAAK,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,gBAAgB,CAAC;IAEzF,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,UAAU,CAAC;QACtB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,MAAC,MAAA,KAAK,CAAC,cAAc,0CAAE,WAAmB,mCAAI,qBAAqB;QACzE,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,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACnD,CAAC,EAAE,cAAc,CAAC,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACnD,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IACH,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC;IAC9B,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,IAAI,QAAQ,EAAE,EAAE;QAC5F,IAAI;QACJ,IAAI,EAAE,eAAe;KACtB,CAAC,CAAC;IACH,KAAK,CAAC,UAAU,CAAC,WAAW,CAC1B,IAAI,EACJ,eAAe,KAAK,MAAM;QACxB,CAAC,CAAC,KAAK,CAAC,SAAS;QACjB,CAAC,CAAC,eAAe,KAAK,cAAc;YACpC,CAAC,CAAC,KAAK,CAAC,cAAc;YACtB,CAAC,CAAC,eAAe,KAAK,WAAW;gBACjC,CAAC,CAAC,KAAK,CAAC,cAAc;gBACtB,CAAC,CAAC,eAAe,KAAK,cAAc;oBACpC,CAAC,CAAC,KAAK,CAAC,iBAAiB;oBACzB,CAAC,CAAC,eAAe,KAAK,gBAAgB;wBACtC,CAAC,CAAC,KAAK,CAAC,mBAAmB;wBAC3B,CAAC,CAAC,eAAe,KAAK,aAAa;4BACnC,CAAC,CAAC,KAAK,CAAC,gBAAgB;4BACxB,CAAC,CAAC,eAAe,KAAK,kBAAkB;gCACxC,CAAC,CAAC,KAAK,CAAC,qBAAqB;gCAC7B,CAAC,CAAC,eAAe,KAAK,cAAc;oCACpC,CAAC,CAAC,KAAK,CAAC,iBAAiB;oCACzB,CAAC,CAAC,KAAK,CAAC,sBAAsB,CACjC,CAAC;AACJ,CAAC","file":"create-select-border.js","sourcesContent":["import { createRect } from './../../vrender';\nimport type { CellSubLocation } from '../../ts-types';\nimport type { Scenegraph } from '../scenegraph';\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) {\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\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: (theme.selectionStyle?.cellBgColor as any) ?? 'rgba(0, 0, 255,0.1)',\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 });\n scene.lastSelectId = selectId;\n scene.selectingRangeComponents.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/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';\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: (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 });\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"]}
@@ -1,3 +1,4 @@
1
1
  import type { Scenegraph } from '../scenegraph';
2
2
  export declare function deleteLastSelectedRangeComponents(scene: Scenegraph): void;
3
3
  export declare function deleteAllSelectBorder(scene: Scenegraph): void;
4
+ export declare function removeFillHandleFromSelectComponents(scene: Scenegraph): void;
@@ -1,12 +1,22 @@
1
1
  export function deleteLastSelectedRangeComponents(scene) {
2
2
  scene.selectedRangeComponents.forEach(((selectComp, key) => {
3
- key.split("-")[4] === scene.lastSelectId && (selectComp.rect.delete(), scene.selectedRangeComponents.delete(key));
3
+ var _a;
4
+ key.split("-")[4] === scene.lastSelectId && (selectComp.rect.delete(), null === (_a = selectComp.fillhandle) || void 0 === _a || _a.delete(),
5
+ scene.selectedRangeComponents.delete(key));
4
6
  }));
5
7
  }
6
8
 
7
9
  export function deleteAllSelectBorder(scene) {
8
10
  scene.selectedRangeComponents.forEach(((selectComp, key) => {
9
- selectComp.rect.delete();
11
+ var _a;
12
+ selectComp.rect.delete(), null === (_a = selectComp.fillhandle) || void 0 === _a || _a.delete();
10
13
  })), scene.selectedRangeComponents = new Map;
11
14
  }
15
+
16
+ export function removeFillHandleFromSelectComponents(scene) {
17
+ scene.selectedRangeComponents.forEach(((selectComp, key) => {
18
+ var _a;
19
+ null === (_a = selectComp.fillhandle) || void 0 === _a || _a.delete(), selectComp.fillhandle = void 0;
20
+ }));
21
+ }
12
22
  //# sourceMappingURL=delete-select-border.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scenegraph/select/delete-select-border.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,iCAAiC,CAAC,KAAiB;IACjE,KAAK,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,UAAkD,EAAE,GAAW,EAAE,EAAE;QACxG,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,KAAK,CAAC,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC3C;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAiB;IACrD,KAAK,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,UAAkD,EAAE,GAAW,EAAE,EAAE;QACxG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,uBAAuB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5C,CAAC","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((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n const lastSelectId = key.split('-')[4];\n if (lastSelectId === scene.lastSelectId) {\n selectComp.rect.delete();\n scene.selectedRangeComponents.delete(key);\n }\n });\n}\n\nexport function deleteAllSelectBorder(scene: Scenegraph) {\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.delete();\n });\n scene.selectedRangeComponents = new Map();\n}\n"]}
1
+ {"version":3,"sources":["../src/scenegraph/select/delete-select-border.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,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;AAED,MAAM,UAAU,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;AAED,MAAM,UAAU,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","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 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,6 +1,8 @@
1
1
  export function moveSelectingRangeComponentsToSelectedRangeComponents(scene) {
2
2
  scene.selectingRangeComponents.forEach(((rangeComponent, key) => {
3
- scene.selectedRangeComponents.get(key) && scene.selectedRangeComponents.get(key).rect.delete(),
3
+ var _a;
4
+ scene.selectedRangeComponents.get(key) && (scene.selectingRangeComponents.get(key).rect.delete(),
5
+ null === (_a = scene.selectingRangeComponents.get(key).fillhandle) || void 0 === _a || _a.delete()),
4
6
  scene.selectedRangeComponents.set(key, rangeComponent);
5
7
  })), scene.selectingRangeComponents = new Map, scene.updateNextFrame();
6
8
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scenegraph/select/move-select-border.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,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,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;SACtD;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","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.selectedRangeComponents.get(key).rect.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,MAAM,UAAU,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","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"]}
@@ -40,13 +40,19 @@ function updateComponent(selectComp, key, scene) {
40
40
  computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1), computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1),
41
41
  computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1));
42
42
  }
43
- const colsWidth = scene.table.getColsWidth(computeRectCellRangeStartCol, computeRectCellRangeEndCol), rowsHeight = scene.table.getRowsHeight(computeRectCellRangeStartRow, computeRectCellRangeEndRow), firstCellBound = scene.highPerformanceGetCell(computeRectCellRangeStartCol, computeRectCellRangeStartRow).globalAABBBounds;
43
+ const colsWidth = scene.table.getColsWidth(computeRectCellRangeStartCol, computeRectCellRangeEndCol), rowsHeight = scene.table.getRowsHeight(computeRectCellRangeStartRow, computeRectCellRangeEndRow), firstCellBound = scene.highPerformanceGetCell(computeRectCellRangeStartCol, computeRectCellRangeStartRow).globalAABBBounds, lastCellBound = scene.highPerformanceGetCell(computeRectCellRangeEndCol, computeRectCellRangeEndRow).globalAABBBounds;
44
44
  selectComp.rect.setAttributes({
45
45
  x: firstCellBound.x1 - scene.tableGroup.attribute.x,
46
46
  y: firstCellBound.y1 - scene.tableGroup.attribute.y,
47
47
  width: colsWidth,
48
48
  height: rowsHeight,
49
49
  visible: !0
50
+ }), selectComp.fillhandle && selectComp.fillhandle.setAttributes({
51
+ x: lastCellBound.x2 - scene.tableGroup.attribute.x - 3,
52
+ y: lastCellBound.y2 - scene.tableGroup.attribute.y - 3,
53
+ width: 6,
54
+ height: 6,
55
+ visible: !0
50
56
  });
51
57
  const isNearRowHeader = !!scene.table.frozenColCount && startCol === scene.table.frozenColCount, isNearRightRowHeader = !!scene.table.rightFrozenColCount && (scene.table.rightFrozenColCount > 0 && endCol === scene.table.colCount - scene.table.rightFrozenColCount - 1), isNearColHeader = !scene.table.frozenRowCount || startRow === scene.table.frozenRowCount, isNearBottomColHeader = !!scene.table.bottomFrozenRowCount && endRow === scene.table.rowCount - scene.table.bottomFrozenRowCount - 1;
52
58
  if (isNearRowHeader && selectComp.rect.attribute.stroke[3] || isNearRightRowHeader && selectComp.rect.attribute.stroke[1] || isNearColHeader && selectComp.rect.attribute.stroke[0] || isNearBottomColHeader && selectComp.rect.attribute.stroke[2]) {
@@ -143,7 +149,8 @@ export function updateCellSelectBorder(scene, newStartCol, newStartRow, newEndCo
143
149
  isExtend && extendSelectRange();
144
150
  };
145
151
  ifExtendSelectRange && extendSelectRange(), scene.selectingRangeComponents.forEach(((selectComp, key) => {
146
- selectComp.rect.delete();
152
+ var _a;
153
+ selectComp.rect.delete(), null === (_a = selectComp.fillhandle) || void 0 === _a || _a.delete();
147
154
  })), scene.selectingRangeComponents = new Map;
148
155
  let needRowHeader = !1, needRightRowHeader = !1, needColumnHeader = !1, needBottomColumnHeader = !1, needBody = !1, needCornerHeader = !1, needRightTopCornerHeader = !1, needRightBottomCornerHeader = !1, needLeftBottomCornerHeader = !1;
149
156
  if (startCol <= scene.table.frozenColCount - 1 && startRow <= scene.table.frozenRowCount - 1 && (needCornerHeader = !0),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scenegraph/select/update-select-border.ts"],"names":[],"mappings":"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","file":"update-select-border.js","sourcesContent":["import type { IRect } from './../../vrender';\nimport type { Scenegraph } from '../scenegraph';\nimport type { CellSubLocation } from '../../ts-types';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\n\nexport function updateAllSelectComponent(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n updateComponent(selectComp, key, scene);\n });\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n updateComponent(selectComp, key, scene);\n });\n}\n\nfunction updateComponent(selectComp: { rect: IRect; role: CellSubLocation }, key: string, scene: Scenegraph) {\n const [startColStr, startRowStr, endColStr, endRowStr] = key.split('-');\n const startCol = parseInt(startColStr, 10);\n const startRow = parseInt(startRowStr, 10);\n const endCol = parseInt(endColStr, 10);\n const endRow = parseInt(endRowStr, 10);\n // 下面为计算选中区域使用的行列值\n let computeRectCellRangeStartCol = startCol;\n let computeRectCellRangeStartRow = startRow;\n let computeRectCellRangeEndCol = endCol;\n let computeRectCellRangeEndRow = endRow;\n // 下面逻辑根据选中区域所属表格部分 来判断可视区域内容的选中单元格范围\n let visibleCellRange;\n switch (selectComp.role) {\n case 'rowHeader':\n visibleCellRange = scene.table.getBodyVisibleRowRange();\n if (visibleCellRange) {\n computeRectCellRangeStartRow = Math.max(startRow, visibleCellRange.rowStart - 1);\n computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1);\n }\n break;\n case 'columnHeader':\n visibleCellRange = scene.table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1);\n computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1);\n }\n break;\n case 'cornerHeader':\n break;\n case 'bottomFrozen':\n visibleCellRange = scene.table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1);\n computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1);\n }\n break;\n case 'rightFrozen':\n visibleCellRange = scene.table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartRow = Math.max(startRow, visibleCellRange.rowStart - 1);\n computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1);\n }\n break;\n case 'rightTopCorner':\n break;\n case 'leftBottomCorner':\n break;\n case 'rightBottomCorner':\n break;\n default:\n visibleCellRange = scene.table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartRow = Math.max(startRow, visibleCellRange.rowStart - 1);\n computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1);\n computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1);\n computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1);\n }\n break;\n }\n // const cellRange = scene.table.getCellRange(startCol, startRow);\n // const colsWidth = scene.table.getColsWidth(cellRange.start.col, endCol);\n // const rowsHeight = scene.table.getRowsHeight(cellRange.start.row, endRow);\n const colsWidth = scene.table.getColsWidth(computeRectCellRangeStartCol, computeRectCellRangeEndCol);\n const rowsHeight = scene.table.getRowsHeight(computeRectCellRangeStartRow, computeRectCellRangeEndRow);\n const firstCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeStartCol,\n computeRectCellRangeStartRow\n ).globalAABBBounds;\n\n selectComp.rect.setAttributes({\n x: firstCellBound.x1 - scene.tableGroup.attribute.x, //坐标xy在下面的逻辑中会做适当调整\n y: firstCellBound.y1 - scene.tableGroup.attribute.y,\n width: colsWidth,\n height: rowsHeight,\n visible: true\n });\n\n //#region 判断是不是按着表头部分的选中框 因为绘制层级的原因 线宽会被遮住一半,因此需要动态调整层级\n const isNearRowHeader = scene.table.frozenColCount ? startCol === scene.table.frozenColCount : false;\n const isNearRightRowHeader = scene.table.rightFrozenColCount\n ? scene.table.rightFrozenColCount > 0 && endCol === scene.table.colCount - scene.table.rightFrozenColCount - 1\n : false;\n const isNearColHeader = scene.table.frozenRowCount ? startRow === scene.table.frozenRowCount : true;\n const isNearBottomColHeader = scene.table.bottomFrozenRowCount\n ? endRow === scene.table.rowCount - scene.table.bottomFrozenRowCount - 1\n : false;\n if (\n (isNearRowHeader && selectComp.rect.attribute.stroke[3]) ||\n (isNearRightRowHeader && selectComp.rect.attribute.stroke[1]) ||\n (isNearColHeader && selectComp.rect.attribute.stroke[0]) ||\n (isNearBottomColHeader && selectComp.rect.attribute.stroke[2])\n ) {\n if (isNearRowHeader && selectComp.rect.attribute.stroke[3]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'columnHeader'\n ? scene.cornerHeaderGroup\n : selectComp.role === 'bottomFrozen'\n ? scene.leftBottomCornerGroup\n : scene.rowHeaderGroup\n );\n }\n\n if (isNearBottomColHeader && selectComp.rect.attribute.stroke[2]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'rowHeader'\n ? scene.leftBottomCornerGroup\n : selectComp.role === 'rightFrozen'\n ? scene.rightBottomCornerGroup\n : scene.bottomFrozenGroup\n );\n }\n\n if (isNearColHeader && selectComp.rect.attribute.stroke[0]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'rowHeader'\n ? scene.cornerHeaderGroup\n : selectComp.role === 'rightFrozen'\n ? scene.rightTopCornerGroup\n : scene.colHeaderGroup\n );\n }\n if (isNearRightRowHeader && selectComp.rect.attribute.stroke[1]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'columnHeader'\n ? scene.rightTopCornerGroup\n : selectComp.role === 'bottomFrozen'\n ? scene.rightBottomCornerGroup\n : scene.rightFrozenGroup\n );\n }\n\n //#region 调整层级后 滚动情况下会出现绘制范围出界 如body的选中框 渲染在了rowheader上面,所有需要调整选中框rect的 边界\n if (\n selectComp.rect.attribute.x < scene.table.getFrozenColsWidth() &&\n // selectComp.rect.attribute.x + selectComp.rect.attribute.width > scene.rowHeaderGroup.attribute.width &&\n scene.table.scrollLeft > 0 &&\n (selectComp.role === 'body' || selectComp.role === 'columnHeader' || selectComp.role === 'bottomFrozen')\n ) {\n const width = selectComp.rect.attribute.width - (scene.table.getFrozenColsWidth() - selectComp.rect.attribute.x);\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x + (scene.table.getFrozenColsWidth() - selectComp.rect.attribute.x),\n width: width > 0 ? width : 0\n });\n }\n if (\n // selectComp.rect.attribute.x < scene.rightFrozenGroup.attribute.x &&\n scene.table.getRightFrozenColsWidth() > 0 && // right冻结列存在的情况下\n scene.rightFrozenGroup.attribute.height > 0 &&\n selectComp.rect.attribute.x + selectComp.rect.attribute.width > scene.rightFrozenGroup.attribute.x &&\n (selectComp.role === 'body' || selectComp.role === 'columnHeader' || selectComp.role === 'bottomFrozen')\n ) {\n const width = scene.rightFrozenGroup.attribute.x - selectComp.rect.attribute.x;\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x,\n width: width > 0 ? width : 0\n });\n }\n if (\n selectComp.rect.attribute.y < scene.colHeaderGroup.attribute.height &&\n scene.table.scrollTop > 0 &&\n (selectComp.role === 'body' || selectComp.role === 'rowHeader' || selectComp.role === 'rightFrozen')\n ) {\n const height =\n selectComp.rect.attribute.height - (scene.colHeaderGroup.attribute.height - selectComp.rect.attribute.y);\n selectComp.rect.setAttributes({\n y: selectComp.rect.attribute.y + (scene.colHeaderGroup.attribute.height - selectComp.rect.attribute.y),\n height: height > 0 ? height : 0\n });\n }\n if (\n scene.bottomFrozenGroup.attribute.width > 0 &&\n scene.bottomFrozenGroup.attribute.height > 0 &&\n selectComp.rect.attribute.y + selectComp.rect.attribute.height > scene.bottomFrozenGroup.attribute.y &&\n (selectComp.role === 'body' || selectComp.role === 'rowHeader' || selectComp.role === 'rightFrozen')\n ) {\n const height = scene.bottomFrozenGroup.attribute.y - selectComp.rect.attribute.y;\n selectComp.rect.setAttributes({\n y: selectComp.rect.attribute.y,\n height: height > 0 ? height : 0\n });\n }\n //#endregion\n } else {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'body'\n ? scene.bodyGroup\n : selectComp.role === 'columnHeader'\n ? scene.colHeaderGroup\n : selectComp.role === 'rowHeader'\n ? scene.rowHeaderGroup\n : selectComp.role === 'cornerHeader'\n ? scene.cornerHeaderGroup\n : selectComp.role === 'rightTopCorner'\n ? scene.rightTopCornerGroup\n : selectComp.role === 'rightFrozen'\n ? scene.rightFrozenGroup\n : selectComp.role === 'leftBottomCorner'\n ? scene.leftBottomCornerGroup\n : selectComp.role === 'bottomFrozen'\n ? scene.bottomFrozenGroup\n : scene.rightBottomCornerGroup\n );\n }\n //#endregion\n\n //#region 处理边缘被截问题\n let diffSize = 0;\n if (typeof selectComp.rect.attribute.lineWidth === 'number') {\n diffSize = Math.ceil(selectComp.rect.attribute.lineWidth / 2);\n }\n if (endCol === scene.table.colCount - 1) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[1] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n width: selectComp.rect.attribute.width - diffSize\n });\n }\n if (startCol === 0) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[3] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x + diffSize,\n width: selectComp.rect.attribute.width - diffSize\n });\n }\n if (endRow === scene.table.rowCount - 1) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[2] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n height: selectComp.rect.attribute.height - diffSize\n });\n }\n if (startRow === 0) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[0] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n y: selectComp.rect.attribute.y + diffSize,\n height: selectComp.rect.attribute.height - diffSize\n });\n }\n //#endregion\n}\n\nexport function updateCellSelectBorder(\n scene: Scenegraph,\n newStartCol: number,\n newStartRow: number,\n newEndCol: number,\n newEndRow: number,\n ifExtendSelectRange: boolean = true\n) {\n let startCol = Math.max(Math.min(newEndCol, newStartCol), 0);\n let startRow = Math.max(Math.min(newEndRow, newStartRow), 0);\n let endCol = Math.min(Math.max(newEndCol, newStartCol), scene.table.colCount - 1);\n let endRow = Math.min(Math.max(newEndRow, newStartRow), scene.table.rowCount - 1);\n //#region region 校验四周的单元格有没有合并的情况,如有则扩大范围\n const extendSelectRange = () => {\n let isExtend = false;\n for (let col = startCol; col <= endCol; col++) {\n if (col === startCol) {\n for (let row = startRow; row <= endRow; row++) {\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo && mergeInfo.start.col < startCol) {\n startCol = mergeInfo.start.col;\n isExtend = true;\n break;\n }\n }\n }\n if (!isExtend && col === endCol) {\n for (let row = startRow; row <= endRow; row++) {\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo && Math.min(mergeInfo.end.col, scene.table.colCount - 1) > endCol) {\n endCol = mergeInfo.end.col;\n isExtend = true;\n break;\n }\n }\n }\n\n if (isExtend) {\n break;\n }\n }\n if (!isExtend) {\n for (let row = startRow; row <= endRow; row++) {\n if (row === startRow) {\n for (let col = startCol; col <= endCol; col++) {\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo && mergeInfo.start.row < startRow) {\n startRow = mergeInfo.start.row;\n isExtend = true;\n break;\n }\n }\n }\n if (!isExtend && row === endRow) {\n for (let col = startCol; col <= endCol; col++) {\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo && Math.min(mergeInfo.end.row, scene.table.rowCount - 1) > endRow) {\n endRow = mergeInfo.end.row;\n isExtend = true;\n break;\n }\n }\n }\n\n if (isExtend) {\n break;\n }\n }\n }\n if (isExtend) {\n extendSelectRange();\n }\n };\n ifExtendSelectRange && extendSelectRange();\n //#endregion\n scene.selectingRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.delete();\n });\n scene.selectingRangeComponents = new Map();\n\n let needRowHeader = false;\n let needRightRowHeader = false; // 右侧冻结\n let needColumnHeader = false;\n let needBottomColumnHeader = false; // 底部冻结\n let needBody = false;\n let needCornerHeader = false;\n let needRightTopCornerHeader = false;\n let needRightBottomCornerHeader = false;\n let needLeftBottomCornerHeader = false;\n if (startCol <= scene.table.frozenColCount - 1 && startRow <= scene.table.frozenRowCount - 1) {\n needCornerHeader = true;\n }\n if (endCol >= scene.table.colCount - scene.table.rightFrozenColCount && startRow <= scene.table.frozenRowCount - 1) {\n needRightTopCornerHeader = true;\n }\n\n if (startCol <= scene.table.frozenColCount - 1 && endRow >= scene.table.rowCount - scene.table.bottomFrozenRowCount) {\n needLeftBottomCornerHeader = true;\n }\n\n if (\n endCol >= scene.table.colCount - scene.table.rightFrozenColCount &&\n endRow >= scene.table.rowCount - scene.table.bottomFrozenRowCount\n ) {\n needRightBottomCornerHeader = true;\n }\n\n if (\n startCol <= scene.table.frozenColCount - 1 &&\n endRow >= scene.table.frozenRowCount &&\n startRow <= scene.table.rowCount - scene.table.bottomFrozenRowCount - 1\n ) {\n needRowHeader = true;\n }\n if (\n endCol >= scene.table.colCount - scene.table.rightFrozenColCount &&\n endRow >= scene.table.frozenRowCount &&\n startRow <= scene.table.rowCount - scene.table.bottomFrozenRowCount - 1\n ) {\n needRightRowHeader = true;\n }\n\n if (\n startRow <= scene.table.frozenRowCount - 1 &&\n endCol >= scene.table.frozenColCount &&\n startCol <= scene.table.colCount - scene.table.rightFrozenColCount - 1\n ) {\n needColumnHeader = true;\n }\n if (\n endRow >= scene.table.rowCount - scene.table.bottomFrozenRowCount &&\n endCol >= scene.table.frozenColCount &&\n startCol <= scene.table.colCount - scene.table.rightFrozenColCount - 1\n ) {\n needBottomColumnHeader = true;\n }\n if (\n startCol <= scene.table.colCount - scene.table.rightFrozenColCount - 1 &&\n endCol >= scene.table.frozenColCount &&\n startRow <= scene.table.rowCount - scene.table.bottomFrozenRowCount - 1 &&\n endRow >= scene.table.frozenRowCount\n ) {\n needBody = true;\n }\n\n // TODO 可以尝试不拆分三个表头和body【前提是theme中合并配置】 用一个SelectBorder 需要结合clip,并动态设置border的范围【依据区域范围 已经是否跨表头及body】\n if (needCornerHeader) {\n const cornerEndCol = Math.min(endCol, scene.table.frozenColCount - 1);\n const cornerEndRow = Math.min(endRow, scene.table.frozenRowCount - 1);\n const strokeArray = [true, !needColumnHeader, !needRowHeader, true];\n scene.createCellSelectBorder(\n startCol,\n startRow,\n cornerEndCol,\n cornerEndRow,\n 'cornerHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRightTopCornerHeader) {\n const cornerStartCol = Math.max(startCol, scene.table.colCount - scene.table.rightFrozenColCount);\n const cornerEndRow = Math.min(endRow, scene.table.frozenRowCount - 1);\n const strokeArray = [true, true, !needRightRowHeader, !needColumnHeader];\n scene.createCellSelectBorder(\n cornerStartCol,\n startRow,\n endCol,\n cornerEndRow,\n 'rightTopCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n\n if (needLeftBottomCornerHeader) {\n const cornerEndCol = Math.min(endCol, scene.table.frozenColCount - 1);\n const cornerStartRow = Math.max(startRow, scene.table.rowCount - scene.table.bottomFrozenRowCount);\n const strokeArray = [!needRowHeader, !needBottomColumnHeader, true, true];\n scene.createCellSelectBorder(\n startCol,\n cornerStartRow,\n cornerEndCol,\n endRow,\n 'leftBottomCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRightBottomCornerHeader) {\n const cornerStartCol = Math.max(startCol, scene.table.colCount - scene.table.rightFrozenColCount);\n const cornerStartRow = Math.max(startRow, scene.table.rowCount - scene.table.bottomFrozenRowCount);\n const strokeArray = [!needRightRowHeader, true, true, !needBottomColumnHeader];\n scene.createCellSelectBorder(\n cornerStartCol,\n cornerStartRow,\n endCol,\n endRow,\n 'rightBottomCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needColumnHeader) {\n const columnHeaderStartCol = Math.max(startCol, scene.table.frozenColCount);\n const columnHeaderEndCol = Math.min(endCol, scene.table.colCount - scene.table.rightFrozenColCount - 1);\n const columnHeaderEndRow = Math.min(endRow, scene.table.frozenRowCount - 1);\n const strokeArray = [true, !needRightTopCornerHeader, !needBody, !needCornerHeader];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n startRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'columnHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needBottomColumnHeader) {\n const columnHeaderStartCol = Math.max(startCol, scene.table.frozenColCount);\n const columnHeaderEndCol = Math.min(endCol, scene.table.colCount - scene.table.rightFrozenColCount - 1);\n const columnHeaderStartRow = Math.max(startRow, scene.table.rowCount - scene.table.bottomFrozenRowCount);\n const strokeArray = [!needBody, !needRightBottomCornerHeader, true, !needLeftBottomCornerHeader];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n endRow,\n 'bottomFrozen',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRowHeader) {\n const columnHeaderStartRow = Math.max(startRow, scene.table.frozenRowCount);\n const columnHeaderEndRow = Math.min(endRow, scene.table.rowCount - scene.table.bottomFrozenRowCount - 1);\n const columnHeaderEndCol = Math.min(endCol, scene.table.frozenColCount - 1);\n const strokeArray = [!needCornerHeader, !needBody, !needLeftBottomCornerHeader, true];\n scene.createCellSelectBorder(\n startCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'rowHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRightRowHeader) {\n const columnHeaderStartRow = Math.max(startRow, scene.table.frozenRowCount);\n const columnHeaderEndRow = Math.min(endRow, scene.table.rowCount - scene.table.bottomFrozenRowCount - 1);\n const columnHeaderStartCol = Math.max(startCol, scene.table.colCount - scene.table.rightFrozenColCount);\n const strokeArray = [!needRightTopCornerHeader, true, !needRightBottomCornerHeader, !needBody];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n columnHeaderStartRow,\n endCol,\n columnHeaderEndRow,\n 'rightFrozen',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needBody) {\n const columnHeaderStartCol = Math.max(startCol, scene.table.frozenColCount);\n const columnHeaderStartRow = Math.max(startRow, scene.table.frozenRowCount);\n const columnHeaderEndCol = Math.min(endCol, scene.table.colCount - scene.table.rightFrozenColCount - 1);\n const columnHeaderEndRow = Math.min(endRow, scene.table.rowCount - scene.table.bottomFrozenRowCount - 1);\n const strokeArray = [!needColumnHeader, !needRightRowHeader, !needBottomColumnHeader, !needRowHeader];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'body',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n}\n\nexport function hideCellSelectBorder(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('visible', false);\n });\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('visible', false);\n });\n}\n\nexport function restoreCellSelectBorder(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('visible', false);\n });\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('visible', false);\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/scenegraph/select/update-select-border.ts"],"names":[],"mappings":"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","file":"update-select-border.js","sourcesContent":["import type { IRect } from './../../vrender';\nimport type { Scenegraph } from '../scenegraph';\nimport type { CellSubLocation } from '../../ts-types';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\n\nexport function updateAllSelectComponent(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n updateComponent(selectComp, key, scene);\n }\n );\n scene.selectedRangeComponents.forEach(\n (selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation }, key: string) => {\n updateComponent(selectComp, key, scene);\n }\n );\n}\n\nfunction updateComponent(\n selectComp: { rect: IRect; fillhandle?: IRect; role: CellSubLocation },\n key: string,\n scene: Scenegraph\n) {\n const [startColStr, startRowStr, endColStr, endRowStr] = key.split('-');\n const startCol = parseInt(startColStr, 10);\n const startRow = parseInt(startRowStr, 10);\n const endCol = parseInt(endColStr, 10);\n const endRow = parseInt(endRowStr, 10);\n // 下面为计算选中区域使用的行列值\n let computeRectCellRangeStartCol = startCol;\n let computeRectCellRangeStartRow = startRow;\n let computeRectCellRangeEndCol = endCol;\n let computeRectCellRangeEndRow = endRow;\n // 下面逻辑根据选中区域所属表格部分 来判断可视区域内容的选中单元格范围\n let visibleCellRange;\n switch (selectComp.role) {\n case 'rowHeader':\n visibleCellRange = scene.table.getBodyVisibleRowRange();\n if (visibleCellRange) {\n computeRectCellRangeStartRow = Math.max(startRow, visibleCellRange.rowStart - 1);\n computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1);\n }\n break;\n case 'columnHeader':\n visibleCellRange = scene.table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1);\n computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1);\n }\n break;\n case 'cornerHeader':\n break;\n case 'bottomFrozen':\n visibleCellRange = scene.table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1);\n computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1);\n }\n break;\n case 'rightFrozen':\n visibleCellRange = scene.table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartRow = Math.max(startRow, visibleCellRange.rowStart - 1);\n computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1);\n }\n break;\n case 'rightTopCorner':\n break;\n case 'leftBottomCorner':\n break;\n case 'rightBottomCorner':\n break;\n default:\n visibleCellRange = scene.table.getBodyVisibleCellRange();\n if (visibleCellRange) {\n computeRectCellRangeStartRow = Math.max(startRow, visibleCellRange.rowStart - 1);\n computeRectCellRangeEndRow = Math.min(endRow, visibleCellRange.rowEnd + 1);\n computeRectCellRangeStartCol = Math.max(startCol, visibleCellRange.colStart - 1);\n computeRectCellRangeEndCol = Math.min(endCol, visibleCellRange.colEnd + 1);\n }\n break;\n }\n // const cellRange = scene.table.getCellRange(startCol, startRow);\n // const colsWidth = scene.table.getColsWidth(cellRange.start.col, endCol);\n // const rowsHeight = scene.table.getRowsHeight(cellRange.start.row, endRow);\n const colsWidth = scene.table.getColsWidth(computeRectCellRangeStartCol, computeRectCellRangeEndCol);\n const rowsHeight = scene.table.getRowsHeight(computeRectCellRangeStartRow, computeRectCellRangeEndRow);\n const firstCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeStartCol,\n computeRectCellRangeStartRow\n ).globalAABBBounds;\n const lastCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeEndCol,\n computeRectCellRangeEndRow\n ).globalAABBBounds;\n\n selectComp.rect.setAttributes({\n x: firstCellBound.x1 - scene.tableGroup.attribute.x, //坐标xy在下面的逻辑中会做适当调整\n y: firstCellBound.y1 - scene.tableGroup.attribute.y,\n width: colsWidth,\n height: rowsHeight,\n visible: true\n });\n if (selectComp.fillhandle) {\n selectComp.fillhandle.setAttributes({\n x: lastCellBound.x2 - scene.tableGroup.attribute.x - 3, // 调整小方块位置\n y: lastCellBound.y2 - scene.tableGroup.attribute.y - 3, // 调整小方块位置\n width: 6,\n height: 6,\n visible: true\n });\n }\n\n //#region 判断是不是按着表头部分的选中框 因为绘制层级的原因 线宽会被遮住一半,因此需要动态调整层级\n const isNearRowHeader = scene.table.frozenColCount ? startCol === scene.table.frozenColCount : false;\n const isNearRightRowHeader = scene.table.rightFrozenColCount\n ? scene.table.rightFrozenColCount > 0 && endCol === scene.table.colCount - scene.table.rightFrozenColCount - 1\n : false;\n const isNearColHeader = scene.table.frozenRowCount ? startRow === scene.table.frozenRowCount : true;\n const isNearBottomColHeader = scene.table.bottomFrozenRowCount\n ? endRow === scene.table.rowCount - scene.table.bottomFrozenRowCount - 1\n : false;\n if (\n (isNearRowHeader && selectComp.rect.attribute.stroke[3]) ||\n (isNearRightRowHeader && selectComp.rect.attribute.stroke[1]) ||\n (isNearColHeader && selectComp.rect.attribute.stroke[0]) ||\n (isNearBottomColHeader && selectComp.rect.attribute.stroke[2])\n ) {\n if (isNearRowHeader && selectComp.rect.attribute.stroke[3]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'columnHeader'\n ? scene.cornerHeaderGroup\n : selectComp.role === 'bottomFrozen'\n ? scene.leftBottomCornerGroup\n : scene.rowHeaderGroup\n );\n }\n\n if (isNearBottomColHeader && selectComp.rect.attribute.stroke[2]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'rowHeader'\n ? scene.leftBottomCornerGroup\n : selectComp.role === 'rightFrozen'\n ? scene.rightBottomCornerGroup\n : scene.bottomFrozenGroup\n );\n }\n\n if (isNearColHeader && selectComp.rect.attribute.stroke[0]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'rowHeader'\n ? scene.cornerHeaderGroup\n : selectComp.role === 'rightFrozen'\n ? scene.rightTopCornerGroup\n : scene.colHeaderGroup\n );\n }\n if (isNearRightRowHeader && selectComp.rect.attribute.stroke[1]) {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'columnHeader'\n ? scene.rightTopCornerGroup\n : selectComp.role === 'bottomFrozen'\n ? scene.rightBottomCornerGroup\n : scene.rightFrozenGroup\n );\n }\n\n //#region 调整层级后 滚动情况下会出现绘制范围出界 如body的选中框 渲染在了rowheader上面,所有需要调整选中框rect的 边界\n if (\n selectComp.rect.attribute.x < scene.table.getFrozenColsWidth() &&\n // selectComp.rect.attribute.x + selectComp.rect.attribute.width > scene.rowHeaderGroup.attribute.width &&\n scene.table.scrollLeft > 0 &&\n (selectComp.role === 'body' || selectComp.role === 'columnHeader' || selectComp.role === 'bottomFrozen')\n ) {\n const width = selectComp.rect.attribute.width - (scene.table.getFrozenColsWidth() - selectComp.rect.attribute.x);\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x + (scene.table.getFrozenColsWidth() - selectComp.rect.attribute.x),\n width: width > 0 ? width : 0\n });\n // selectComp.fillhandle.setAttributes({\n // x: selectComp.rect.attribute.x + (scene.table.getFrozenColsWidth() - selectComp.rect.attribute.x),\n // width: width > 0 ? width : 0\n // });\n }\n if (\n // selectComp.rect.attribute.x < scene.rightFrozenGroup.attribute.x &&\n scene.table.getRightFrozenColsWidth() > 0 && // right冻结列存在的情况下\n scene.rightFrozenGroup.attribute.height > 0 &&\n selectComp.rect.attribute.x + selectComp.rect.attribute.width > scene.rightFrozenGroup.attribute.x &&\n (selectComp.role === 'body' || selectComp.role === 'columnHeader' || selectComp.role === 'bottomFrozen')\n ) {\n const width = scene.rightFrozenGroup.attribute.x - selectComp.rect.attribute.x;\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x,\n width: width > 0 ? width : 0\n });\n // selectComp.fillhandle.setAttributes({\n // x: selectComp.rect.attribute.x,\n // width: width > 0 ? width : 0\n // });\n }\n if (\n selectComp.rect.attribute.y < scene.colHeaderGroup.attribute.height &&\n scene.table.scrollTop > 0 &&\n (selectComp.role === 'body' || selectComp.role === 'rowHeader' || selectComp.role === 'rightFrozen')\n ) {\n const height =\n selectComp.rect.attribute.height - (scene.colHeaderGroup.attribute.height - selectComp.rect.attribute.y);\n selectComp.rect.setAttributes({\n y: selectComp.rect.attribute.y + (scene.colHeaderGroup.attribute.height - selectComp.rect.attribute.y),\n height: height > 0 ? height : 0\n });\n // selectComp.fillhandle.setAttributes({\n // y: selectComp.rect.attribute.y + (scene.colHeaderGroup.attribute.height - selectComp.rect.attribute.y),\n // height: height > 0 ? height : 0\n // });\n }\n if (\n scene.bottomFrozenGroup.attribute.width > 0 &&\n scene.bottomFrozenGroup.attribute.height > 0 &&\n selectComp.rect.attribute.y + selectComp.rect.attribute.height > scene.bottomFrozenGroup.attribute.y &&\n (selectComp.role === 'body' || selectComp.role === 'rowHeader' || selectComp.role === 'rightFrozen')\n ) {\n const height = scene.bottomFrozenGroup.attribute.y - selectComp.rect.attribute.y;\n selectComp.rect.setAttributes({\n y: selectComp.rect.attribute.y,\n height: height > 0 ? height : 0\n });\n // selectComp.fillhandle.setAttributes({\n // y: selectComp.fillhandle.attribute.y,\n // height: height > 0 ? height : 0\n // });\n }\n //#endregion\n } else {\n scene.tableGroup.insertAfter(\n selectComp.rect,\n selectComp.role === 'body'\n ? scene.bodyGroup\n : selectComp.role === 'columnHeader'\n ? scene.colHeaderGroup\n : selectComp.role === 'rowHeader'\n ? scene.rowHeaderGroup\n : selectComp.role === 'cornerHeader'\n ? scene.cornerHeaderGroup\n : selectComp.role === 'rightTopCorner'\n ? scene.rightTopCornerGroup\n : selectComp.role === 'rightFrozen'\n ? scene.rightFrozenGroup\n : selectComp.role === 'leftBottomCorner'\n ? scene.leftBottomCornerGroup\n : selectComp.role === 'bottomFrozen'\n ? scene.bottomFrozenGroup\n : scene.rightBottomCornerGroup\n );\n }\n //#endregion\n\n //#region 处理边缘被截问题\n let diffSize = 0;\n if (typeof selectComp.rect.attribute.lineWidth === 'number') {\n diffSize = Math.ceil(selectComp.rect.attribute.lineWidth / 2);\n }\n if (endCol === scene.table.colCount - 1) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[1] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n width: selectComp.rect.attribute.width - diffSize\n });\n // selectComp.fillhandle.setAttributes({\n // width: selectComp.rect.attribute.width - diffSize\n // });\n }\n if (startCol === 0) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[3] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x + diffSize,\n width: selectComp.rect.attribute.width - diffSize\n });\n // selectComp.fillhandle.setAttributes({\n // x: selectComp.rect.attribute.x + diffSize,\n // width: selectComp.rect.attribute.width - diffSize\n // });\n }\n if (endRow === scene.table.rowCount - 1) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[2] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n height: selectComp.rect.attribute.height - diffSize\n });\n // selectComp.fillhandle.setAttributes({\n // height: selectComp.rect.attribute.height - diffSize\n // });\n }\n if (startRow === 0) {\n if (Array.isArray(selectComp.rect.attribute.lineWidth)) {\n diffSize = Math.ceil((selectComp.rect.attribute.lineWidth[0] ?? 0) / 2);\n }\n selectComp.rect.setAttributes({\n y: selectComp.rect.attribute.y + diffSize,\n height: selectComp.rect.attribute.height - diffSize\n });\n // selectComp.fillhandle.setAttributes({\n // y: selectComp.rect.attribute.y + diffSize,\n // height: selectComp.rect.attribute.height - diffSize\n // });\n }\n //#endregion\n}\n\nexport function updateCellSelectBorder(\n scene: Scenegraph,\n newStartCol: number,\n newStartRow: number,\n newEndCol: number,\n newEndRow: number,\n ifExtendSelectRange: boolean = true\n) {\n let startCol = Math.max(Math.min(newEndCol, newStartCol), 0);\n let startRow = Math.max(Math.min(newEndRow, newStartRow), 0);\n let endCol = Math.min(Math.max(newEndCol, newStartCol), scene.table.colCount - 1);\n let endRow = Math.min(Math.max(newEndRow, newStartRow), scene.table.rowCount - 1);\n //#region region 校验四周的单元格有没有合并的情况,如有则扩大范围\n const extendSelectRange = () => {\n let isExtend = false;\n for (let col = startCol; col <= endCol; col++) {\n if (col === startCol) {\n for (let row = startRow; row <= endRow; row++) {\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo && mergeInfo.start.col < startCol) {\n startCol = mergeInfo.start.col;\n isExtend = true;\n break;\n }\n }\n }\n if (!isExtend && col === endCol) {\n for (let row = startRow; row <= endRow; row++) {\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo && Math.min(mergeInfo.end.col, scene.table.colCount - 1) > endCol) {\n endCol = mergeInfo.end.col;\n isExtend = true;\n break;\n }\n }\n }\n\n if (isExtend) {\n break;\n }\n }\n if (!isExtend) {\n for (let row = startRow; row <= endRow; row++) {\n if (row === startRow) {\n for (let col = startCol; col <= endCol; col++) {\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo && mergeInfo.start.row < startRow) {\n startRow = mergeInfo.start.row;\n isExtend = true;\n break;\n }\n }\n }\n if (!isExtend && row === endRow) {\n for (let col = startCol; col <= endCol; col++) {\n const mergeInfo = getCellMergeInfo(scene.table, col, row);\n if (mergeInfo && Math.min(mergeInfo.end.row, scene.table.rowCount - 1) > endRow) {\n endRow = mergeInfo.end.row;\n isExtend = true;\n break;\n }\n }\n }\n\n if (isExtend) {\n break;\n }\n }\n }\n if (isExtend) {\n extendSelectRange();\n }\n };\n ifExtendSelectRange && extendSelectRange();\n //#endregion\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 let needRowHeader = false;\n let needRightRowHeader = false; // 右侧冻结\n let needColumnHeader = false;\n let needBottomColumnHeader = false; // 底部冻结\n let needBody = false;\n let needCornerHeader = false;\n let needRightTopCornerHeader = false;\n let needRightBottomCornerHeader = false;\n let needLeftBottomCornerHeader = false;\n if (startCol <= scene.table.frozenColCount - 1 && startRow <= scene.table.frozenRowCount - 1) {\n needCornerHeader = true;\n }\n if (endCol >= scene.table.colCount - scene.table.rightFrozenColCount && startRow <= scene.table.frozenRowCount - 1) {\n needRightTopCornerHeader = true;\n }\n\n if (startCol <= scene.table.frozenColCount - 1 && endRow >= scene.table.rowCount - scene.table.bottomFrozenRowCount) {\n needLeftBottomCornerHeader = true;\n }\n\n if (\n endCol >= scene.table.colCount - scene.table.rightFrozenColCount &&\n endRow >= scene.table.rowCount - scene.table.bottomFrozenRowCount\n ) {\n needRightBottomCornerHeader = true;\n }\n\n if (\n startCol <= scene.table.frozenColCount - 1 &&\n endRow >= scene.table.frozenRowCount &&\n startRow <= scene.table.rowCount - scene.table.bottomFrozenRowCount - 1\n ) {\n needRowHeader = true;\n }\n if (\n endCol >= scene.table.colCount - scene.table.rightFrozenColCount &&\n endRow >= scene.table.frozenRowCount &&\n startRow <= scene.table.rowCount - scene.table.bottomFrozenRowCount - 1\n ) {\n needRightRowHeader = true;\n }\n\n if (\n startRow <= scene.table.frozenRowCount - 1 &&\n endCol >= scene.table.frozenColCount &&\n startCol <= scene.table.colCount - scene.table.rightFrozenColCount - 1\n ) {\n needColumnHeader = true;\n }\n if (\n endRow >= scene.table.rowCount - scene.table.bottomFrozenRowCount &&\n endCol >= scene.table.frozenColCount &&\n startCol <= scene.table.colCount - scene.table.rightFrozenColCount - 1\n ) {\n needBottomColumnHeader = true;\n }\n if (\n startCol <= scene.table.colCount - scene.table.rightFrozenColCount - 1 &&\n endCol >= scene.table.frozenColCount &&\n startRow <= scene.table.rowCount - scene.table.bottomFrozenRowCount - 1 &&\n endRow >= scene.table.frozenRowCount\n ) {\n needBody = true;\n }\n\n // TODO 可以尝试不拆分三个表头和body【前提是theme中合并配置】 用一个SelectBorder 需要结合clip,并动态设置border的范围【依据区域范围 已经是否跨表头及body】\n if (needCornerHeader) {\n const cornerEndCol = Math.min(endCol, scene.table.frozenColCount - 1);\n const cornerEndRow = Math.min(endRow, scene.table.frozenRowCount - 1);\n const strokeArray = [true, !needColumnHeader, !needRowHeader, true];\n scene.createCellSelectBorder(\n startCol,\n startRow,\n cornerEndCol,\n cornerEndRow,\n 'cornerHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRightTopCornerHeader) {\n const cornerStartCol = Math.max(startCol, scene.table.colCount - scene.table.rightFrozenColCount);\n const cornerEndRow = Math.min(endRow, scene.table.frozenRowCount - 1);\n const strokeArray = [true, true, !needRightRowHeader, !needColumnHeader];\n scene.createCellSelectBorder(\n cornerStartCol,\n startRow,\n endCol,\n cornerEndRow,\n 'rightTopCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n\n if (needLeftBottomCornerHeader) {\n const cornerEndCol = Math.min(endCol, scene.table.frozenColCount - 1);\n const cornerStartRow = Math.max(startRow, scene.table.rowCount - scene.table.bottomFrozenRowCount);\n const strokeArray = [!needRowHeader, !needBottomColumnHeader, true, true];\n scene.createCellSelectBorder(\n startCol,\n cornerStartRow,\n cornerEndCol,\n endRow,\n 'leftBottomCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRightBottomCornerHeader) {\n const cornerStartCol = Math.max(startCol, scene.table.colCount - scene.table.rightFrozenColCount);\n const cornerStartRow = Math.max(startRow, scene.table.rowCount - scene.table.bottomFrozenRowCount);\n const strokeArray = [!needRightRowHeader, true, true, !needBottomColumnHeader];\n scene.createCellSelectBorder(\n cornerStartCol,\n cornerStartRow,\n endCol,\n endRow,\n 'rightBottomCorner',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needColumnHeader) {\n const columnHeaderStartCol = Math.max(startCol, scene.table.frozenColCount);\n const columnHeaderEndCol = Math.min(endCol, scene.table.colCount - scene.table.rightFrozenColCount - 1);\n const columnHeaderEndRow = Math.min(endRow, scene.table.frozenRowCount - 1);\n const strokeArray = [true, !needRightTopCornerHeader, !needBody, !needCornerHeader];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n startRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'columnHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needBottomColumnHeader) {\n const columnHeaderStartCol = Math.max(startCol, scene.table.frozenColCount);\n const columnHeaderEndCol = Math.min(endCol, scene.table.colCount - scene.table.rightFrozenColCount - 1);\n const columnHeaderStartRow = Math.max(startRow, scene.table.rowCount - scene.table.bottomFrozenRowCount);\n const strokeArray = [!needBody, !needRightBottomCornerHeader, true, !needLeftBottomCornerHeader];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n endRow,\n 'bottomFrozen',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRowHeader) {\n const columnHeaderStartRow = Math.max(startRow, scene.table.frozenRowCount);\n const columnHeaderEndRow = Math.min(endRow, scene.table.rowCount - scene.table.bottomFrozenRowCount - 1);\n const columnHeaderEndCol = Math.min(endCol, scene.table.frozenColCount - 1);\n const strokeArray = [!needCornerHeader, !needBody, !needLeftBottomCornerHeader, true];\n scene.createCellSelectBorder(\n startCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'rowHeader',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needRightRowHeader) {\n const columnHeaderStartRow = Math.max(startRow, scene.table.frozenRowCount);\n const columnHeaderEndRow = Math.min(endRow, scene.table.rowCount - scene.table.bottomFrozenRowCount - 1);\n const columnHeaderStartCol = Math.max(startCol, scene.table.colCount - scene.table.rightFrozenColCount);\n const strokeArray = [!needRightTopCornerHeader, true, !needRightBottomCornerHeader, !needBody];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n columnHeaderStartRow,\n endCol,\n columnHeaderEndRow,\n 'rightFrozen',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n if (needBody) {\n const columnHeaderStartCol = Math.max(startCol, scene.table.frozenColCount);\n const columnHeaderStartRow = Math.max(startRow, scene.table.frozenRowCount);\n const columnHeaderEndCol = Math.min(endCol, scene.table.colCount - scene.table.rightFrozenColCount - 1);\n const columnHeaderEndRow = Math.min(endRow, scene.table.rowCount - scene.table.bottomFrozenRowCount - 1);\n const strokeArray = [!needColumnHeader, !needRightRowHeader, !needBottomColumnHeader, !needRowHeader];\n scene.createCellSelectBorder(\n columnHeaderStartCol,\n columnHeaderStartRow,\n columnHeaderEndCol,\n columnHeaderEndRow,\n 'body',\n `${startCol}${startRow}${endCol}${endRow}`,\n strokeArray\n );\n }\n}\n\nexport function hideCellSelectBorder(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('visible', false);\n });\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('visible', false);\n });\n}\n\nexport function restoreCellSelectBorder(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('visible', false);\n });\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('visible', false);\n });\n}\n"]}
@@ -17,6 +17,13 @@ export declare class StateManager {
17
17
  headerSelectMode?: 'inline' | 'cell';
18
18
  selecting: boolean;
19
19
  };
20
+ fillHandle: {
21
+ direction?: 'top' | 'bottom' | 'left' | 'right';
22
+ directionRow?: boolean;
23
+ isFilling: boolean;
24
+ startX: number;
25
+ startY: number;
26
+ };
20
27
  hover: {
21
28
  highlightScope: HighlightScope;
22
29
  singleStyle?: boolean;
@@ -114,10 +121,13 @@ export declare class StateManager {
114
121
  checkCellRangeInSelect(cellPosStart: CellAddress, cellPosEnd: CellAddress): boolean;
115
122
  updateHoverIcon(col: number, row: number, target: any, cellGroup: Group, event?: FederatedEvent): void;
116
123
  isResizeCol(): boolean;
124
+ isFillHandle(): boolean;
117
125
  isSelecting(): boolean;
118
126
  endSelectCells(fireListener?: boolean): void;
119
127
  endResizeCol(): void;
120
128
  startResizeCol(col: number, x: number, y: number, isRightFrozen?: boolean): void;
129
+ startFillSelect(x: number, y: number): void;
130
+ endFillSelect(): void;
121
131
  updateResizeCol(xInTable: number, yInTable: number): void;
122
132
  startMoveCol(col: number, row: number, x: number, y: number): void;
123
133
  updateMoveCol(col: number, row: number, x: number, y: number): void;
package/es/state/state.js CHANGED
@@ -99,6 +99,10 @@ export class StateManager {
99
99
  row: -1
100
100
  },
101
101
  selecting: !1
102
+ }, this.fillHandle = {
103
+ isFilling: !1,
104
+ startX: void 0,
105
+ startY: void 0
102
106
  }, this.hover = {
103
107
  highlightScope: HighlightScope.single,
104
108
  cellPos: {
@@ -230,6 +234,9 @@ export class StateManager {
230
234
  isResizeCol() {
231
235
  return this.columnResize.resizing;
232
236
  }
237
+ isFillHandle() {
238
+ return this.fillHandle.isFilling;
239
+ }
233
240
  isSelecting() {
234
241
  return this.select.selecting;
235
242
  }
@@ -254,6 +261,16 @@ export class StateManager {
254
261
  this.columnResize.isRightFrozen = isRightFrozen, this.table.scenegraph.component.showResizeCol(col, y, isRightFrozen),
255
262
  this.table.stateManager.updateSelectPos(-1, -1), this.table.scenegraph.updateNextFrame();
256
263
  }
264
+ startFillSelect(x, y) {
265
+ this.fillHandle.isFilling = !0, this.fillHandle.startX = x, this.fillHandle.startY = y,
266
+ this.table.scenegraph.updateNextFrame(), this.table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_FILL_HANDLE, {});
267
+ }
268
+ endFillSelect() {
269
+ this.fillHandle.isFilling = !1, this.fillHandle.startX = void 0, this.fillHandle.startY = void 0,
270
+ this.table.stateManager.fillHandle.directionRow = void 0, this.table.eventManager.isDraging && this.table.fireListeners(TABLE_EVENT_TYPE.DRAG_FILL_HANDLE_END, {
271
+ direction: this.fillHandle.direction
272
+ });
273
+ }
257
274
  updateResizeCol(xInTable, yInTable) {
258
275
  updateResizeColumn(xInTable, yInTable, this);
259
276
  }