@visactor/vtable 1.19.9-alpha.3 → 1.20.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.
- package/cjs/ListTable.d.ts +8 -2
- package/cjs/ListTable.js +58 -11
- package/cjs/ListTable.js.map +1 -1
- package/cjs/PivotChart.d.ts +4 -1
- package/cjs/PivotChart.js +8 -3
- package/cjs/PivotChart.js.map +1 -1
- package/cjs/PivotTable.d.ts +4 -1
- package/cjs/PivotTable.js +8 -3
- package/cjs/PivotTable.js.map +1 -1
- package/cjs/core/BaseTable.d.ts +14 -1
- package/cjs/core/BaseTable.js +121 -28
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/core/TABLE_EVENT_TYPE.d.ts +4 -0
- package/cjs/core/TABLE_EVENT_TYPE.js +5 -1
- package/cjs/core/TABLE_EVENT_TYPE.js.map +1 -1
- package/cjs/core/animation.js.map +1 -1
- package/cjs/core/group-helper.d.ts +3 -1
- package/cjs/core/group-helper.js +8 -4
- package/cjs/core/group-helper.js.map +1 -1
- package/cjs/core/utils/get-cell-position.js +2 -2
- package/cjs/core/utils/get-cell-position.js.map +1 -1
- package/cjs/data/DataSource.d.ts +1 -0
- package/cjs/data/DataSource.js +21 -12
- package/cjs/data/DataSource.js.map +1 -1
- package/cjs/edit/edit-manager.js +5 -4
- package/cjs/edit/edit-manager.js.map +1 -1
- package/cjs/event/drill.js +2 -1
- package/cjs/event/event.d.ts +17 -0
- package/cjs/event/event.js +238 -4
- package/cjs/event/event.js.map +1 -1
- package/cjs/event/listener/container-dom.js +8 -153
- package/cjs/event/listener/container-dom.js.map +1 -1
- package/cjs/event/listener/scroll-bar.js +1 -1
- package/cjs/event/listener/scroll-bar.js.map +1 -1
- package/cjs/event/listener/table-group.js +27 -25
- package/cjs/event/listener/table-group.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/layout/pivot-header-layout.js +1 -1
- package/cjs/layout/pivot-layout.js +2 -0
- package/cjs/layout/row-height-map.js +1 -1
- package/cjs/layout/simple-header-layout.js +1 -1
- package/cjs/layout/tree-helper.js +1 -1
- package/cjs/plugins/custom-cell-style.js +1 -2
- package/cjs/plugins/index.js +1 -1
- package/cjs/plugins/interface.js +1 -1
- package/cjs/plugins/invert-highlight.js +1 -1
- package/cjs/plugins/list-tree-stick-cell.js +1 -1
- package/cjs/plugins/plugin-manager.js +1 -1
- package/cjs/scenegraph/graphic/contributions/chart-render-helper.js +1 -4
- package/cjs/scenegraph/graphic/contributions/chart-render-helper.js.map +1 -1
- package/cjs/scenegraph/graphic/contributions/chart-render.js +1 -4
- package/cjs/scenegraph/graphic/contributions/chart-render.js.map +1 -1
- package/cjs/scenegraph/graphic/contributions/vchart-graphic-picker.js +1 -7
- package/cjs/scenegraph/graphic/contributions/vchart-graphic-picker.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-helper.js +2 -1
- package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
- package/cjs/scenegraph/group-creater/progress/proxy.js.map +1 -1
- package/cjs/scenegraph/layout/compute-col-width.js +3 -1
- package/cjs/scenegraph/layout/compute-col-width.js.map +1 -1
- package/cjs/scenegraph/layout/frozen.js +7 -4
- package/cjs/scenegraph/layout/frozen.js.map +1 -1
- package/cjs/scenegraph/scenegraph.d.ts +6 -2
- package/cjs/scenegraph/scenegraph.js +31 -7
- package/cjs/scenegraph/scenegraph.js.map +1 -1
- package/cjs/scenegraph/select/create-select-border.d.ts +2 -0
- package/cjs/scenegraph/select/create-select-border.js +2 -2
- package/cjs/scenegraph/select/create-select-border.js.map +1 -1
- package/cjs/scenegraph/select/update-custom-select-border.d.ts +6 -0
- package/cjs/scenegraph/select/update-custom-select-border.js +69 -0
- package/cjs/scenegraph/select/update-custom-select-border.js.map +1 -0
- package/cjs/scenegraph/select/update-select-border.js +4 -12
- package/cjs/scenegraph/select/update-select-border.js.map +1 -1
- package/cjs/scenegraph/utils/cell-pos.d.ts +12 -0
- package/cjs/scenegraph/utils/cell-pos.js +26 -1
- package/cjs/scenegraph/utils/cell-pos.js.map +1 -1
- package/cjs/scenegraph/utils/update-container.d.ts +1 -0
- package/cjs/scenegraph/utils/update-container.js +8 -1
- package/cjs/scenegraph/utils/update-container.js.map +1 -1
- package/cjs/state/select/custom-select.d.ts +2 -2
- package/cjs/state/select/custom-select.js +2 -14
- package/cjs/state/select/custom-select.js.map +1 -1
- package/cjs/state/select/update-position.js +1 -1
- package/cjs/state/select/update-position.js.map +1 -1
- package/cjs/state/state.d.ts +4 -7
- package/cjs/state/state.js +14 -2
- package/cjs/state/state.js.map +1 -1
- package/cjs/themes/theme-define.js +1 -1
- package/cjs/themes/theme-define.js.map +1 -1
- package/cjs/tools/style.d.ts +3 -1
- package/cjs/tools/style.js +23 -2
- package/cjs/tools/style.js.map +1 -1
- package/cjs/ts-types/base-table.d.ts +6 -0
- package/cjs/ts-types/base-table.js.map +1 -1
- package/cjs/ts-types/events.d.ts +21 -1
- package/cjs/ts-types/events.js.map +1 -1
- package/cjs/ts-types/new-data-set.d.ts +1 -0
- package/cjs/ts-types/new-data-set.js.map +1 -1
- package/cjs/ts-types/style-define.d.ts +6 -0
- package/cjs/ts-types/style-define.js.map +1 -1
- package/cjs/ts-types/table-engine.d.ts +3 -0
- package/cjs/ts-types/table-engine.js.map +1 -1
- package/cjs/vrender.js.map +1 -1
- package/dist/vtable.js +2402 -465
- package/dist/vtable.min.js +2 -2
- package/es/ListTable.d.ts +8 -2
- package/es/ListTable.js +59 -9
- package/es/ListTable.js.map +1 -1
- package/es/PivotChart.d.ts +4 -1
- package/es/PivotChart.js +8 -3
- package/es/PivotChart.js.map +1 -1
- package/es/PivotTable.d.ts +4 -1
- package/es/PivotTable.js +8 -3
- package/es/PivotTable.js.map +1 -1
- package/es/core/BaseTable.d.ts +14 -1
- package/es/core/BaseTable.js +116 -24
- package/es/core/BaseTable.js.map +1 -1
- package/es/core/TABLE_EVENT_TYPE.d.ts +4 -0
- package/es/core/TABLE_EVENT_TYPE.js +5 -1
- package/es/core/TABLE_EVENT_TYPE.js.map +1 -1
- package/es/core/animation.js +1 -1
- package/es/core/animation.js.map +1 -1
- package/es/core/group-helper.d.ts +3 -1
- package/es/core/group-helper.js +8 -4
- package/es/core/group-helper.js.map +1 -1
- package/es/core/utils/get-cell-position.js +2 -2
- package/es/core/utils/get-cell-position.js.map +1 -1
- package/es/data/DataSource.d.ts +1 -0
- package/es/data/DataSource.js +21 -12
- package/es/data/DataSource.js.map +1 -1
- package/es/edit/edit-manager.js +5 -4
- package/es/edit/edit-manager.js.map +1 -1
- package/es/event/drill.js +2 -1
- package/es/event/event.d.ts +17 -0
- package/es/event/event.js +240 -3
- package/es/event/event.js.map +1 -1
- package/es/event/listener/container-dom.js +9 -154
- package/es/event/listener/container-dom.js.map +1 -1
- package/es/event/listener/scroll-bar.js +1 -1
- package/es/event/listener/scroll-bar.js.map +1 -1
- package/es/event/listener/table-group.js +27 -25
- package/es/event/listener/table-group.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/layout/pivot-header-layout.js +1 -1
- package/es/layout/pivot-layout.js +2 -0
- package/es/layout/row-height-map.js +1 -1
- package/es/layout/simple-header-layout.js +1 -1
- package/es/layout/tree-helper.js +1 -1
- package/es/plugins/custom-cell-style.js +1 -2
- package/es/plugins/index.js +1 -1
- package/es/plugins/interface.js +1 -1
- package/es/plugins/invert-highlight.js +1 -1
- package/es/plugins/list-tree-stick-cell.js +1 -1
- package/es/plugins/plugin-manager.js +1 -1
- package/es/scenegraph/graphic/contributions/chart-render-helper.js +1 -4
- package/es/scenegraph/graphic/contributions/chart-render-helper.js.map +1 -1
- package/es/scenegraph/graphic/contributions/chart-render.js +1 -4
- package/es/scenegraph/graphic/contributions/chart-render.js.map +1 -1
- package/es/scenegraph/graphic/contributions/vchart-graphic-picker.js +1 -7
- package/es/scenegraph/graphic/contributions/vchart-graphic-picker.js.map +1 -1
- package/es/scenegraph/group-creater/cell-helper.js +2 -1
- package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
- package/es/scenegraph/group-creater/progress/proxy.js.map +1 -1
- package/es/scenegraph/layout/compute-col-width.js +3 -1
- package/es/scenegraph/layout/compute-col-width.js.map +1 -1
- package/es/scenegraph/layout/frozen.js +7 -4
- package/es/scenegraph/layout/frozen.js.map +1 -1
- package/es/scenegraph/scenegraph.d.ts +6 -2
- package/es/scenegraph/scenegraph.js +29 -8
- package/es/scenegraph/scenegraph.js.map +1 -1
- package/es/scenegraph/select/create-select-border.d.ts +2 -0
- package/es/scenegraph/select/create-select-border.js +1 -1
- package/es/scenegraph/select/create-select-border.js.map +1 -1
- package/es/scenegraph/select/update-custom-select-border.d.ts +6 -0
- package/es/scenegraph/select/update-custom-select-border.js +63 -0
- package/es/scenegraph/select/update-custom-select-border.js.map +1 -0
- package/es/scenegraph/select/update-select-border.js +4 -11
- package/es/scenegraph/select/update-select-border.js.map +1 -1
- package/es/scenegraph/utils/cell-pos.d.ts +12 -0
- package/es/scenegraph/utils/cell-pos.js +24 -0
- package/es/scenegraph/utils/cell-pos.js.map +1 -1
- package/es/scenegraph/utils/update-container.d.ts +1 -0
- package/es/scenegraph/utils/update-container.js +6 -0
- package/es/scenegraph/utils/update-container.js.map +1 -1
- package/es/state/select/custom-select.d.ts +2 -2
- package/es/state/select/custom-select.js +3 -15
- package/es/state/select/custom-select.js.map +1 -1
- package/es/state/select/update-position.js +1 -1
- package/es/state/select/update-position.js.map +1 -1
- package/es/state/state.d.ts +4 -7
- package/es/state/state.js +14 -2
- package/es/state/state.js.map +1 -1
- package/es/themes/theme-define.js +1 -1
- package/es/themes/theme-define.js.map +1 -1
- package/es/tools/style.d.ts +3 -1
- package/es/tools/style.js +20 -0
- package/es/tools/style.js.map +1 -1
- package/es/ts-types/base-table.d.ts +6 -0
- package/es/ts-types/base-table.js.map +1 -1
- package/es/ts-types/events.d.ts +21 -1
- package/es/ts-types/events.js.map +1 -1
- package/es/ts-types/new-data-set.d.ts +1 -0
- package/es/ts-types/new-data-set.js.map +1 -1
- package/es/ts-types/style-define.d.ts +6 -0
- package/es/ts-types/style-define.js.map +1 -1
- package/es/ts-types/table-engine.d.ts +3 -0
- package/es/ts-types/table-engine.js.map +1 -1
- package/es/vrender.js.map +1 -1
- package/package.json +8 -8
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { CellSubLocation } from '../../ts-types';
|
|
2
2
|
import type { Scenegraph } from '../scenegraph';
|
|
3
|
+
import type { BaseTableAPI } from '../../ts-types/base-table';
|
|
3
4
|
export declare function createCellSelectBorder(scene: Scenegraph, start_Col: number, start_Row: number, end_Col: number, end_Row: number, selectRangeType: CellSubLocation, selectId: string, strokes: boolean[]): void;
|
|
5
|
+
export declare function getCornerRadius(selectRangeType: CellSubLocation, cornerRadius: undefined | number | [number, number, number, number], start_Col: number, start_Row: number, end_Col: number, end_Row: number, table: BaseTableAPI): number[];
|
|
@@ -39,7 +39,7 @@ export function createCellSelectBorder(scene, start_Col, start_Row, end_Col, end
|
|
|
39
39
|
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);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
function getCornerRadius(selectRangeType, cornerRadius, start_Col, start_Row, end_Col, end_Row, table) {
|
|
42
|
+
export function getCornerRadius(selectRangeType, cornerRadius, start_Col, start_Row, end_Col, end_Row, table) {
|
|
43
43
|
if (!cornerRadius) return;
|
|
44
44
|
const cornerRadiusArray = Array.isArray(cornerRadius) ? cornerRadius : [ cornerRadius, cornerRadius, cornerRadius, cornerRadius ], tableEndCol = table.colCount - 1, tableEndRow = table.rowCount - 1, result = [ 0, 0, 0, 0 ];
|
|
45
45
|
let changed = !1;
|
|
@@ -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\nfunction 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":"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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"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Scenegraph } from '../scenegraph';
|
|
2
|
+
import type { CellRange } from '../../ts-types';
|
|
3
|
+
import type { CustomSelectionStyle } from '../../ts-types';
|
|
4
|
+
export declare function updateCustomSelectBorder(scene: Scenegraph, selectRange: CellRange & {
|
|
5
|
+
skipBodyMerge?: boolean;
|
|
6
|
+
}, style: CustomSelectionStyle): void;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { calculateCellRangeDistribution } from "../utils/cell-pos";
|
|
2
|
+
|
|
3
|
+
import { createRect } from "./../../vrender";
|
|
4
|
+
|
|
5
|
+
import { getCornerRadius } from "./create-select-border";
|
|
6
|
+
|
|
7
|
+
export function updateCustomSelectBorder(scene, selectRange, style) {
|
|
8
|
+
const table = scene.table, newStartCol = selectRange.start.col, newStartRow = selectRange.start.row, newEndCol = selectRange.end.col, newEndRow = selectRange.end.row, startCol = (selectRange.skipBodyMerge,
|
|
9
|
+
Math.max(Math.min(newEndCol, newStartCol), 0)), startRow = Math.max(Math.min(newEndRow, newStartRow), 0), endCol = Math.min(Math.max(newEndCol, newStartCol), table.colCount - 1), endRow = Math.min(Math.max(newEndRow, newStartRow), table.rowCount - 1), {needRowHeader: needRowHeader, needRightRowHeader: needRightRowHeader, needColumnHeader: needColumnHeader, needBottomColumnHeader: needBottomColumnHeader, needBody: needBody, needCornerHeader: needCornerHeader, needRightTopCornerHeader: needRightTopCornerHeader, needLeftBottomCornerHeader: needLeftBottomCornerHeader, needRightBottomCornerHeader: needRightBottomCornerHeader} = calculateCellRangeDistribution(startCol, startRow, endCol, endRow, table);
|
|
10
|
+
if (needCornerHeader) {
|
|
11
|
+
createCustomCellSelectBorder(scene, startCol, startRow, Math.min(endCol, table.frozenColCount - 1), Math.min(endRow, table.frozenRowCount - 1), "cornerHeader", `${startCol}${startRow}${endCol}${endRow}`, [ !0, !needColumnHeader, !needRowHeader, !0 ], style);
|
|
12
|
+
}
|
|
13
|
+
if (needRightTopCornerHeader) {
|
|
14
|
+
createCustomCellSelectBorder(scene, Math.max(startCol, table.colCount - table.rightFrozenColCount), startRow, endCol, Math.min(endRow, table.frozenRowCount - 1), "rightTopCorner", `${startCol}${startRow}${endCol}${endRow}`, [ !0, !0, !needRightRowHeader, !needColumnHeader ], style);
|
|
15
|
+
}
|
|
16
|
+
if (needLeftBottomCornerHeader) {
|
|
17
|
+
const cornerEndCol = Math.min(endCol, table.frozenColCount - 1);
|
|
18
|
+
createCustomCellSelectBorder(scene, startCol, Math.max(startRow, table.rowCount - table.bottomFrozenRowCount), cornerEndCol, endRow, "leftBottomCorner", `${startCol}${startRow}${endCol}${endRow}`, [ !needRowHeader, !needBottomColumnHeader, !0, !0 ], style);
|
|
19
|
+
}
|
|
20
|
+
if (needRightBottomCornerHeader) {
|
|
21
|
+
createCustomCellSelectBorder(scene, Math.max(startCol, table.colCount - table.rightFrozenColCount), Math.max(startRow, table.rowCount - table.bottomFrozenRowCount), endCol, endRow, "rightBottomCorner", `${startCol}${startRow}${endCol}${endRow}`, [ !needRightRowHeader, !0, !0, !needBottomColumnHeader ], style);
|
|
22
|
+
}
|
|
23
|
+
if (needColumnHeader) {
|
|
24
|
+
createCustomCellSelectBorder(scene, Math.max(startCol, table.frozenColCount), startRow, Math.min(endCol, table.colCount - table.rightFrozenColCount - 1), Math.min(endRow, table.frozenRowCount - 1), "columnHeader", `${startCol}${startRow}${endCol}${endRow}`, [ !0, !needRightTopCornerHeader, !needBody, !needCornerHeader ], style);
|
|
25
|
+
}
|
|
26
|
+
if (needBottomColumnHeader) {
|
|
27
|
+
const columnHeaderStartCol = Math.max(startCol, table.frozenColCount), columnHeaderEndCol = Math.min(endCol, table.colCount - table.rightFrozenColCount - 1);
|
|
28
|
+
createCustomCellSelectBorder(scene, columnHeaderStartCol, Math.max(startRow, table.rowCount - table.bottomFrozenRowCount), columnHeaderEndCol, endRow, "bottomFrozen", `${startCol}${startRow}${endCol}${endRow}`, [ !needBody, !needRightBottomCornerHeader, !0, !needLeftBottomCornerHeader ], style);
|
|
29
|
+
}
|
|
30
|
+
if (needRowHeader) {
|
|
31
|
+
const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount), columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);
|
|
32
|
+
createCustomCellSelectBorder(scene, startCol, columnHeaderStartRow, Math.min(endCol, table.frozenColCount - 1), columnHeaderEndRow, "rowHeader", `${startCol}${startRow}${endCol}${endRow}`, [ !needCornerHeader, !needBody, !needLeftBottomCornerHeader, !0 ], style);
|
|
33
|
+
}
|
|
34
|
+
if (needRightRowHeader) {
|
|
35
|
+
const columnHeaderStartRow = Math.max(startRow, table.frozenRowCount), columnHeaderEndRow = Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1);
|
|
36
|
+
createCustomCellSelectBorder(scene, Math.max(startCol, table.colCount - table.rightFrozenColCount), columnHeaderStartRow, endCol, columnHeaderEndRow, "rightFrozen", `${startCol}${startRow}${endCol}${endRow}`, [ !needRightTopCornerHeader, !0, !needRightBottomCornerHeader, !needBody ], style);
|
|
37
|
+
}
|
|
38
|
+
if (needBody) {
|
|
39
|
+
createCustomCellSelectBorder(scene, Math.max(startCol, table.frozenColCount), Math.max(startRow, table.frozenRowCount), Math.min(endCol, table.colCount - table.rightFrozenColCount - 1), Math.min(endRow, table.rowCount - table.bottomFrozenRowCount - 1), "body", `${startCol}${startRow}${endCol}${endRow}`, [ !needColumnHeader, !needRightRowHeader, !needBottomColumnHeader, !needRowHeader ], style);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function createCustomCellSelectBorder(scene, start_Col, start_Row, end_Col, end_Row, selectRangeType, selectId, strokes, style) {
|
|
44
|
+
var _a, _b, _c, _d;
|
|
45
|
+
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 = createRect({
|
|
46
|
+
pickable: !1,
|
|
47
|
+
fill: null !== (_a = style.cellBgColor) && void 0 !== _a && _a,
|
|
48
|
+
lineWidth: null !== (_b = style.cellBorderLineWidth) && void 0 !== _b ? _b : 0,
|
|
49
|
+
lineDash: null !== (_c = style.cellBorderLineDash) && void 0 !== _c ? _c : [],
|
|
50
|
+
stroke: strokes.map((stroke => !!stroke && style.cellBorderColor)),
|
|
51
|
+
x: firstCellBound.x1 - scene.tableGroup.attribute.x,
|
|
52
|
+
y: firstCellBound.y1 - scene.tableGroup.attribute.y,
|
|
53
|
+
width: 0,
|
|
54
|
+
height: 0,
|
|
55
|
+
visible: !0,
|
|
56
|
+
cornerRadius: 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)
|
|
57
|
+
});
|
|
58
|
+
scene.customSelectedRangeComponents.set(`${startCol}-${startRow}-${endCol}-${endRow}-${selectId}`, {
|
|
59
|
+
rect: rect,
|
|
60
|
+
role: selectRangeType
|
|
61
|
+
}), 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);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=update-custom-select-border.js.map
|
|
@@ -0,0 +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,5 +1,7 @@
|
|
|
1
1
|
import { getCellMergeInfo } from "../utils/get-cell-merge";
|
|
2
2
|
|
|
3
|
+
import { calculateCellRangeDistribution } from "../utils/cell-pos";
|
|
4
|
+
|
|
3
5
|
export function updateAllSelectComponent(scene) {
|
|
4
6
|
scene.customSelectedRangeComponents.forEach(((selectComp, key) => {
|
|
5
7
|
updateComponent(selectComp, key, scene);
|
|
@@ -198,17 +200,8 @@ export function updateCellSelectBorder(scene, selectRange, ifExtendSelectRange =
|
|
|
198
200
|
var _a;
|
|
199
201
|
selectComp.rect.delete(), null === (_a = selectComp.fillhandle) || void 0 === _a || _a.delete();
|
|
200
202
|
})), scene.selectingRangeComponents = new Map;
|
|
201
|
-
|
|
202
|
-
if (
|
|
203
|
-
endCol >= table.colCount - table.rightFrozenColCount && startRow <= table.frozenRowCount - 1 && (needRightTopCornerHeader = !0),
|
|
204
|
-
startCol <= table.frozenColCount - 1 && endRow >= table.rowCount - table.bottomFrozenRowCount && (needLeftBottomCornerHeader = !0),
|
|
205
|
-
endCol >= table.colCount - table.rightFrozenColCount && endRow >= table.rowCount - table.bottomFrozenRowCount && (needRightBottomCornerHeader = !0),
|
|
206
|
-
startCol <= table.frozenColCount - 1 && endRow >= table.frozenRowCount && startRow <= table.rowCount - table.bottomFrozenRowCount - 1 && (needRowHeader = !0),
|
|
207
|
-
endCol >= table.colCount - table.rightFrozenColCount && endRow >= table.frozenRowCount && startRow <= table.rowCount - table.bottomFrozenRowCount - 1 && (needRightRowHeader = !0),
|
|
208
|
-
startRow <= table.frozenRowCount - 1 && endCol >= table.frozenColCount && startCol <= table.colCount - table.rightFrozenColCount - 1 && (needColumnHeader = !0),
|
|
209
|
-
endRow >= table.rowCount - table.bottomFrozenRowCount && endCol >= table.frozenColCount && startCol <= table.colCount - table.rightFrozenColCount - 1 && (needBottomColumnHeader = !0),
|
|
210
|
-
startCol <= table.colCount - table.rightFrozenColCount - 1 && endCol >= table.frozenColCount && startRow <= table.rowCount - table.bottomFrozenRowCount - 1 && endRow >= table.frozenRowCount && (needBody = !0),
|
|
211
|
-
needCornerHeader) {
|
|
203
|
+
const {needRowHeader: needRowHeader, needRightRowHeader: needRightRowHeader, needColumnHeader: needColumnHeader, needBottomColumnHeader: needBottomColumnHeader, needBody: needBody, needCornerHeader: needCornerHeader, needRightTopCornerHeader: needRightTopCornerHeader, needLeftBottomCornerHeader: needLeftBottomCornerHeader, needRightBottomCornerHeader: needRightBottomCornerHeader} = calculateCellRangeDistribution(startCol, startRow, endCol, endRow, table);
|
|
204
|
+
if (needCornerHeader) {
|
|
212
205
|
const cornerEndCol = Math.min(endCol, table.frozenColCount - 1), cornerEndRow = Math.min(endRow, table.frozenRowCount - 1), strokeArray = [ !0, !needColumnHeader, !needRowHeader, !0 ];
|
|
213
206
|
scene.createCellSelectBorder(startCol, startRow, cornerEndCol, cornerEndRow, "cornerHeader", `${startCol}${startRow}${endCol}${endRow}`, strokeArray);
|
|
214
207
|
}
|
|
@@ -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 { CellRange, CellSubLocation } from '../../ts-types';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\n\nexport function updateAllSelectComponent(scene: Scenegraph) {\n scene.customSelectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n updateComponent(selectComp, key, scene);\n });\n\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 table = scene.table;\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 = 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 = 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 = 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 = 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 = 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 = table.getCellRange(startCol, startRow);\n // const colsWidth = table.getColsWidth(cellRange.start.col, endCol);\n // const rowsHeight = table.getRowsHeight(cellRange.start.row, endRow);\n const colsWidth = table.getColsWidth(computeRectCellRangeStartCol, computeRectCellRangeEndCol);\n const rowsHeight = 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 if (selectComp.fillhandle) {\n const fillHandle = scene.table.options.excelOptions?.fillHandle;\n let visible = true;\n if (typeof fillHandle === 'function') {\n visible = fillHandle({ selectRanges: scene.table.stateManager.select.ranges, table: scene.table });\n }\n //#region 计算填充柄小方块的位置\n\n let lastCellBound;\n //当选择区域没有到到最后一列时\n if (computeRectCellRangeEndCol < table.colCount - 1) {\n lastCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeEndCol,\n computeRectCellRangeEndRow\n ).globalAABBBounds;\n } else {\n // 最后一列\n lastCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeStartCol - 1,\n computeRectCellRangeEndRow\n ).globalAABBBounds;\n }\n const handlerX = lastCellBound.x2 - scene.tableGroup.attribute.x - 3;\n //当选择区域没有到到最后一行时\n if (computeRectCellRangeEndRow < table.rowCount - 1) {\n lastCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeEndCol,\n computeRectCellRangeEndRow\n ).globalAABBBounds;\n } else {\n // 最后一行\n lastCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeEndCol,\n computeRectCellRangeStartRow - 1\n ).globalAABBBounds;\n }\n const handlerY = lastCellBound.y2 - scene.tableGroup.attribute.y - 3;\n //#endregion\n\n selectComp.fillhandle?.setAttributes({\n x: handlerX, // 调整小方块位置\n y: handlerY, // 调整小方块位置\n width: 6,\n height: 6,\n visible\n });\n }\n\n //#region 判断是不是按着表头部分的选中框 因为绘制层级的原因 线宽会被遮住一半,因此需要动态调整层级\n let isNearRowHeader = table.frozenColCount ? startCol === table.frozenColCount : false;\n if (!isNearRowHeader && table.frozenColCount && table.scrollLeft > 0 && startCol >= table.frozenColCount) {\n const startColRelativePosition = table.getColsWidth(0, startCol - 1) - table.scrollLeft;\n if (startColRelativePosition < table.getFrozenColsWidth()) {\n isNearRowHeader = true;\n }\n }\n\n let isNearRightRowHeader = table.rightFrozenColCount\n ? table.rightFrozenColCount > 0 && endCol === table.colCount - table.rightFrozenColCount - 1\n : false;\n if (!isNearRightRowHeader && table.rightFrozenColCount && endCol < table.colCount - table.rightFrozenColCount) {\n const endColRelativePosition = table.getColsWidth(0, endCol) - table.scrollLeft;\n if (endColRelativePosition > table.tableNoFrameWidth - table.getRightFrozenColsWidth()) {\n isNearRightRowHeader = true;\n }\n }\n\n let isNearColHeader = table.frozenRowCount ? startRow === table.frozenRowCount : true;\n if (!isNearColHeader && table.frozenRowCount && table.scrollTop > 0 && startRow >= table.frozenRowCount) {\n const startRowRelativePosition = table.getRowsHeight(0, startRow - 1) - table.scrollTop;\n if (startRowRelativePosition < table.getFrozenRowsHeight()) {\n isNearColHeader = true;\n }\n }\n\n let isNearBottomColHeader = table.bottomFrozenRowCount\n ? endRow === table.rowCount - table.bottomFrozenRowCount - 1\n : false;\n if (!isNearBottomColHeader && table.bottomFrozenRowCount && endRow < table.rowCount - table.bottomFrozenRowCount) {\n const endRowRelativePosition = table.getRowsHeight(0, endRow) - table.scrollTop;\n if (endRowRelativePosition > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight()) {\n isNearBottomColHeader = true;\n }\n }\n\n const { dynamicUpdateSelectionSize } = table.theme.selectionStyle;\n if (\n (isNearRowHeader && (selectComp.rect.attribute.stroke[3] || dynamicUpdateSelectionSize)) ||\n (isNearRightRowHeader && (selectComp.rect.attribute.stroke[1] || dynamicUpdateSelectionSize)) ||\n (isNearColHeader && (selectComp.rect.attribute.stroke[0] || dynamicUpdateSelectionSize)) ||\n (isNearBottomColHeader && (selectComp.rect.attribute.stroke[2] || dynamicUpdateSelectionSize))\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 < table.getFrozenColsWidth() &&\n // selectComp.rect.attribute.x + selectComp.rect.attribute.width > scene.rowHeaderGroup.attribute.width &&\n table.scrollLeft > 0 &&\n (selectComp.role === 'body' || selectComp.role === 'columnHeader' || selectComp.role === 'bottomFrozen')\n ) {\n const width = selectComp.rect.attribute.width - (table.getFrozenColsWidth() - selectComp.rect.attribute.x);\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x + (table.getFrozenColsWidth() - selectComp.rect.attribute.x),\n width: width > 0 ? width : 0\n });\n selectComp.fillhandle?.setAttributes({\n visible: width > 0\n });\n }\n if (\n // selectComp.rect.attribute.x < scene.rightFrozenGroup.attribute.x &&\n 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 visible: width - colsWidth > 0\n });\n }\n if (\n selectComp.rect.attribute.y < scene.colHeaderGroup.attribute.height &&\n 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 visible: 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 visible: height - rowsHeight > 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 === 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 === 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 selectRange: CellRange & { skipBodyMerge?: boolean },\n ifExtendSelectRange: boolean = true\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 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), table.colCount - 1);\n let endRow = Math.min(Math.max(newEndRow, newStartRow), 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 if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(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 if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo && Math.min(mergeInfo.end.col, 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 if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(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 if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo && Math.min(mergeInfo.end.row, 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 if (ifExtendSelectRange) {\n extendSelectRange();\n if (selectRange.start.col > selectRange.end.col) {\n selectRange.start.col = Math.max(startCol, endCol);\n selectRange.end.col = Math.min(startCol, endCol);\n } else {\n selectRange.start.col = Math.min(startCol, endCol);\n selectRange.end.col = Math.max(startCol, endCol);\n }\n if (selectRange.start.row > selectRange.end.row) {\n selectRange.start.row = Math.max(startRow, endRow);\n selectRange.end.row = Math.min(startRow, endRow);\n } else {\n selectRange.start.row = Math.min(startRow, endRow);\n selectRange.end.row = Math.max(startRow, endRow);\n }\n }\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 <= table.frozenColCount - 1 && startRow <= table.frozenRowCount - 1) {\n needCornerHeader = true;\n }\n if (endCol >= table.colCount - table.rightFrozenColCount && startRow <= table.frozenRowCount - 1) {\n needRightTopCornerHeader = true;\n }\n\n if (startCol <= table.frozenColCount - 1 && endRow >= table.rowCount - table.bottomFrozenRowCount) {\n needLeftBottomCornerHeader = true;\n }\n\n if (endCol >= table.colCount - table.rightFrozenColCount && endRow >= table.rowCount - table.bottomFrozenRowCount) {\n needRightBottomCornerHeader = true;\n }\n\n if (\n startCol <= table.frozenColCount - 1 &&\n endRow >= table.frozenRowCount &&\n startRow <= table.rowCount - table.bottomFrozenRowCount - 1\n ) {\n needRowHeader = true;\n }\n if (\n endCol >= table.colCount - table.rightFrozenColCount &&\n endRow >= table.frozenRowCount &&\n startRow <= table.rowCount - table.bottomFrozenRowCount - 1\n ) {\n needRightRowHeader = true;\n }\n\n if (\n startRow <= table.frozenRowCount - 1 &&\n endCol >= table.frozenColCount &&\n startCol <= table.colCount - table.rightFrozenColCount - 1\n ) {\n needColumnHeader = true;\n }\n if (\n endRow >= table.rowCount - table.bottomFrozenRowCount &&\n endCol >= table.frozenColCount &&\n startCol <= table.colCount - table.rightFrozenColCount - 1\n ) {\n needBottomColumnHeader = true;\n }\n if (\n startCol <= table.colCount - table.rightFrozenColCount - 1 &&\n endCol >= table.frozenColCount &&\n startRow <= table.rowCount - table.bottomFrozenRowCount - 1 &&\n endRow >= 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, table.frozenColCount - 1);\n const cornerEndRow = Math.min(endRow, 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, table.colCount - table.rightFrozenColCount);\n const cornerEndRow = Math.min(endRow, 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, table.frozenColCount - 1);\n const cornerStartRow = Math.max(startRow, table.rowCount - 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, table.colCount - table.rightFrozenColCount);\n const cornerStartRow = Math.max(startRow, table.rowCount - 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, 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 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, 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 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, 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 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, 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 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, 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 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('opacity', 0);\n });\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 0);\n });\n}\n\nexport function restoreCellSelectBorder(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 1);\n });\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 1);\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 { CellRange, CellSubLocation } from '../../ts-types';\nimport { getCellMergeInfo } from '../utils/get-cell-merge';\nimport { calculateCellRangeDistribution } from '../utils/cell-pos';\n\nexport function updateAllSelectComponent(scene: Scenegraph) {\n scene.customSelectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n updateComponent(selectComp, key, scene);\n });\n\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 table = scene.table;\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 = 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 = 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 = 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 = 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 = 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 = table.getCellRange(startCol, startRow);\n // const colsWidth = table.getColsWidth(cellRange.start.col, endCol);\n // const rowsHeight = table.getRowsHeight(cellRange.start.row, endRow);\n const colsWidth = table.getColsWidth(computeRectCellRangeStartCol, computeRectCellRangeEndCol);\n const rowsHeight = 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 if (selectComp.fillhandle) {\n const fillHandle = scene.table.options.excelOptions?.fillHandle;\n let visible = true;\n if (typeof fillHandle === 'function') {\n visible = fillHandle({ selectRanges: scene.table.stateManager.select.ranges, table: scene.table });\n }\n //#region 计算填充柄小方块的位置\n\n let lastCellBound;\n //当选择区域没有到到最后一列时\n if (computeRectCellRangeEndCol < table.colCount - 1) {\n lastCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeEndCol,\n computeRectCellRangeEndRow\n ).globalAABBBounds;\n } else {\n // 最后一列\n lastCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeStartCol - 1,\n computeRectCellRangeEndRow\n ).globalAABBBounds;\n }\n const handlerX = lastCellBound.x2 - scene.tableGroup.attribute.x - 3;\n //当选择区域没有到到最后一行时\n if (computeRectCellRangeEndRow < table.rowCount - 1) {\n lastCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeEndCol,\n computeRectCellRangeEndRow\n ).globalAABBBounds;\n } else {\n // 最后一行\n lastCellBound = scene.highPerformanceGetCell(\n computeRectCellRangeEndCol,\n computeRectCellRangeStartRow - 1\n ).globalAABBBounds;\n }\n const handlerY = lastCellBound.y2 - scene.tableGroup.attribute.y - 3;\n //#endregion\n\n selectComp.fillhandle?.setAttributes({\n x: handlerX, // 调整小方块位置\n y: handlerY, // 调整小方块位置\n width: 6,\n height: 6,\n visible\n });\n }\n\n //#region 判断是不是按着表头部分的选中框 因为绘制层级的原因 线宽会被遮住一半,因此需要动态调整层级\n let isNearRowHeader = table.frozenColCount ? startCol === table.frozenColCount : false;\n if (!isNearRowHeader && table.frozenColCount && table.scrollLeft > 0 && startCol >= table.frozenColCount) {\n const startColRelativePosition = table.getColsWidth(0, startCol - 1) - table.scrollLeft;\n if (startColRelativePosition < table.getFrozenColsWidth()) {\n isNearRowHeader = true;\n }\n }\n\n let isNearRightRowHeader = table.rightFrozenColCount\n ? table.rightFrozenColCount > 0 && endCol === table.colCount - table.rightFrozenColCount - 1\n : false;\n if (!isNearRightRowHeader && table.rightFrozenColCount && endCol < table.colCount - table.rightFrozenColCount) {\n const endColRelativePosition = table.getColsWidth(0, endCol) - table.scrollLeft;\n if (endColRelativePosition > table.tableNoFrameWidth - table.getRightFrozenColsWidth()) {\n isNearRightRowHeader = true;\n }\n }\n\n let isNearColHeader = table.frozenRowCount ? startRow === table.frozenRowCount : true;\n if (!isNearColHeader && table.frozenRowCount && table.scrollTop > 0 && startRow >= table.frozenRowCount) {\n const startRowRelativePosition = table.getRowsHeight(0, startRow - 1) - table.scrollTop;\n if (startRowRelativePosition < table.getFrozenRowsHeight()) {\n isNearColHeader = true;\n }\n }\n\n let isNearBottomColHeader = table.bottomFrozenRowCount\n ? endRow === table.rowCount - table.bottomFrozenRowCount - 1\n : false;\n if (!isNearBottomColHeader && table.bottomFrozenRowCount && endRow < table.rowCount - table.bottomFrozenRowCount) {\n const endRowRelativePosition = table.getRowsHeight(0, endRow) - table.scrollTop;\n if (endRowRelativePosition > table.tableNoFrameHeight - table.getBottomFrozenRowsHeight()) {\n isNearBottomColHeader = true;\n }\n }\n\n const { dynamicUpdateSelectionSize } = table.theme.selectionStyle;\n if (\n (isNearRowHeader && (selectComp.rect.attribute.stroke[3] || dynamicUpdateSelectionSize)) ||\n (isNearRightRowHeader && (selectComp.rect.attribute.stroke[1] || dynamicUpdateSelectionSize)) ||\n (isNearColHeader && (selectComp.rect.attribute.stroke[0] || dynamicUpdateSelectionSize)) ||\n (isNearBottomColHeader && (selectComp.rect.attribute.stroke[2] || dynamicUpdateSelectionSize))\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 < table.getFrozenColsWidth() &&\n // selectComp.rect.attribute.x + selectComp.rect.attribute.width > scene.rowHeaderGroup.attribute.width &&\n table.scrollLeft > 0 &&\n (selectComp.role === 'body' || selectComp.role === 'columnHeader' || selectComp.role === 'bottomFrozen')\n ) {\n const width = selectComp.rect.attribute.width - (table.getFrozenColsWidth() - selectComp.rect.attribute.x);\n selectComp.rect.setAttributes({\n x: selectComp.rect.attribute.x + (table.getFrozenColsWidth() - selectComp.rect.attribute.x),\n width: width > 0 ? width : 0\n });\n selectComp.fillhandle?.setAttributes({\n visible: width > 0\n });\n }\n if (\n // selectComp.rect.attribute.x < scene.rightFrozenGroup.attribute.x &&\n 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 visible: width - colsWidth > 0\n });\n }\n if (\n selectComp.rect.attribute.y < scene.colHeaderGroup.attribute.height &&\n 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 visible: 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 visible: height - rowsHeight > 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 === 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 === 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 selectRange: CellRange & { skipBodyMerge?: boolean },\n ifExtendSelectRange: boolean = true\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 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), table.colCount - 1);\n let endRow = Math.min(Math.max(newEndRow, newStartRow), 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 if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(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 if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo && Math.min(mergeInfo.end.col, 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 if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(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 if (!table.isHeader(col, row) && skipBodyMerge) {\n continue;\n }\n const mergeInfo = getCellMergeInfo(table, col, row);\n if (mergeInfo && Math.min(mergeInfo.end.row, 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 if (ifExtendSelectRange) {\n extendSelectRange();\n if (selectRange.start.col > selectRange.end.col) {\n selectRange.start.col = Math.max(startCol, endCol);\n selectRange.end.col = Math.min(startCol, endCol);\n } else {\n selectRange.start.col = Math.min(startCol, endCol);\n selectRange.end.col = Math.max(startCol, endCol);\n }\n if (selectRange.start.row > selectRange.end.row) {\n selectRange.start.row = Math.max(startRow, endRow);\n selectRange.end.row = Math.min(startRow, endRow);\n } else {\n selectRange.start.row = Math.min(startRow, endRow);\n selectRange.end.row = Math.max(startRow, endRow);\n }\n }\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 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 // TODO 可以尝试不拆分三个表头和body【前提是theme中合并配置】 用一个SelectBorder 需要结合clip,并动态设置border的范围【依据区域范围 已经是否跨表头及body】\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 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, table.colCount - table.rightFrozenColCount);\n const cornerEndRow = Math.min(endRow, 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, table.frozenColCount - 1);\n const cornerStartRow = Math.max(startRow, table.rowCount - 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, table.colCount - table.rightFrozenColCount);\n const cornerStartRow = Math.max(startRow, table.rowCount - 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, 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 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, 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 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, 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 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, 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 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, 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 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('opacity', 0);\n });\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 0);\n });\n}\n\nexport function restoreCellSelectBorder(scene: Scenegraph) {\n scene.selectingRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 1);\n });\n scene.selectedRangeComponents.forEach((selectComp: { rect: IRect; role: CellSubLocation }, key: string) => {\n selectComp.rect.setAttribute('opacity', 1);\n });\n}\n"]}
|
|
@@ -1,4 +1,16 @@
|
|
|
1
|
+
import type { BaseTableAPI } from '../..';
|
|
1
2
|
export declare function calcStartPosition(left: number, top: number, width: number, height: number, contentWidth: number, contentHeight: number, textAlign?: CanvasTextAlign, textBaseline?: CanvasTextBaseline, margin?: number[], paddingLeft?: number, paddingRight?: number, paddingTop?: number, paddingBottom?: number): {
|
|
2
3
|
x: number;
|
|
3
4
|
y: number;
|
|
4
5
|
};
|
|
6
|
+
export declare function calculateCellRangeDistribution(startCol: number, startRow: number, endCol: number, endRow: number, table: BaseTableAPI): {
|
|
7
|
+
needRowHeader: boolean;
|
|
8
|
+
needRightRowHeader: boolean;
|
|
9
|
+
needColumnHeader: boolean;
|
|
10
|
+
needBottomColumnHeader: boolean;
|
|
11
|
+
needBody: boolean;
|
|
12
|
+
needCornerHeader: boolean;
|
|
13
|
+
needRightTopCornerHeader: boolean;
|
|
14
|
+
needLeftBottomCornerHeader: boolean;
|
|
15
|
+
needRightBottomCornerHeader: boolean;
|
|
16
|
+
};
|
|
@@ -9,4 +9,28 @@ export function calcStartPosition(left, top, width, height, contentWidth, conten
|
|
|
9
9
|
y: y
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
|
+
|
|
13
|
+
export function calculateCellRangeDistribution(startCol, startRow, endCol, endRow, table) {
|
|
14
|
+
let needRowHeader = !1, needRightRowHeader = !1, needColumnHeader = !1, needBottomColumnHeader = !1, needBody = !1, needCornerHeader = !1, needRightTopCornerHeader = !1, needRightBottomCornerHeader = !1, needLeftBottomCornerHeader = !1;
|
|
15
|
+
return startCol <= table.frozenColCount - 1 && startRow <= table.frozenRowCount - 1 && (needCornerHeader = !0),
|
|
16
|
+
endCol >= table.colCount - table.rightFrozenColCount && startRow <= table.frozenRowCount - 1 && (needRightTopCornerHeader = !0),
|
|
17
|
+
startCol <= table.frozenColCount - 1 && endRow >= table.rowCount - table.bottomFrozenRowCount && (needLeftBottomCornerHeader = !0),
|
|
18
|
+
endCol >= table.colCount - table.rightFrozenColCount && endRow >= table.rowCount - table.bottomFrozenRowCount && (needRightBottomCornerHeader = !0),
|
|
19
|
+
startCol <= table.frozenColCount - 1 && endRow >= table.frozenRowCount && startRow <= table.rowCount - table.bottomFrozenRowCount - 1 && (needRowHeader = !0),
|
|
20
|
+
endCol >= table.colCount - table.rightFrozenColCount && endRow >= table.frozenRowCount && startRow <= table.rowCount - table.bottomFrozenRowCount - 1 && (needRightRowHeader = !0),
|
|
21
|
+
startRow <= table.frozenRowCount - 1 && endCol >= table.frozenColCount && startCol <= table.colCount - table.rightFrozenColCount - 1 && (needColumnHeader = !0),
|
|
22
|
+
endRow >= table.rowCount - table.bottomFrozenRowCount && endCol >= table.frozenColCount && startCol <= table.colCount - table.rightFrozenColCount - 1 && (needBottomColumnHeader = !0),
|
|
23
|
+
startCol <= table.colCount - table.rightFrozenColCount - 1 && endCol >= table.frozenColCount && startRow <= table.rowCount - table.bottomFrozenRowCount - 1 && endRow >= table.frozenRowCount && (needBody = !0),
|
|
24
|
+
{
|
|
25
|
+
needRowHeader: needRowHeader,
|
|
26
|
+
needRightRowHeader: needRightRowHeader,
|
|
27
|
+
needColumnHeader: needColumnHeader,
|
|
28
|
+
needBottomColumnHeader: needBottomColumnHeader,
|
|
29
|
+
needBody: needBody,
|
|
30
|
+
needCornerHeader: needCornerHeader,
|
|
31
|
+
needRightTopCornerHeader: needRightTopCornerHeader,
|
|
32
|
+
needLeftBottomCornerHeader: needLeftBottomCornerHeader,
|
|
33
|
+
needRightBottomCornerHeader: needRightBottomCornerHeader
|
|
34
|
+
};
|
|
35
|
+
}
|
|
12
36
|
//# sourceMappingURL=cell-pos.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/scenegraph/utils/cell-pos.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/scenegraph/utils/cell-pos.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,GAAW,EACX,KAAa,EACb,MAAc,EACd,YAAoB,EACpB,aAAqB,EACrB,YAA6B,MAAM,EACnC,eAAmC,QAAQ,EAC3C,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACrB,WAAW,GAAG,CAAC,EACf,YAAY,GAAG,CAAC,EAChB,UAAU,GAAG,CAAC,EACd,aAAa,GAAG,CAAC;IAEjB,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;IAC3B,MAAM,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;IACvC,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,EAAE;QAChD,CAAC,GAAG,KAAK,GAAG,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;KACrD;SAAM,IAAI,SAAS,KAAK,QAAQ,EAAE;QACjC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;KACpE;IACD,IAAI,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IACrC,IAAI,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,YAAY,IAAI,YAAY,KAAK,aAAa,EAAE;QAChG,CAAC,GAAG,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;KACxD;SAAM,IAAI,YAAY,KAAK,QAAQ,EAAE;QACpC,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;KACrE;IACD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,QAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,MAAc,EACd,KAAmB;IAEnB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,sBAAsB,GAAG,KAAK,CAAC;IACnC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,wBAAwB,GAAG,KAAK,CAAC;IACrC,IAAI,2BAA2B,GAAG,KAAK,CAAC;IACxC,IAAI,0BAA0B,GAAG,KAAK,CAAC;IACvC,IAAI,QAAQ,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,IAAI,QAAQ,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE;QAChF,gBAAgB,GAAG,IAAI,CAAC;KACzB;IACD,IAAI,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,mBAAmB,IAAI,QAAQ,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE;QAChG,wBAAwB,GAAG,IAAI,CAAC;KACjC;IAED,IAAI,QAAQ,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,IAAI,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,oBAAoB,EAAE;QACjG,0BAA0B,GAAG,IAAI,CAAC;KACnC;IAED,IAAI,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,mBAAmB,IAAI,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,oBAAoB,EAAE;QACjH,2BAA2B,GAAG,IAAI,CAAC;KACpC;IAED,IACE,QAAQ,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,cAAc;QAC9B,QAAQ,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,oBAAoB,GAAG,CAAC,EAC3D;QACA,aAAa,GAAG,IAAI,CAAC;KACtB;IACD,IACE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,mBAAmB;QACpD,MAAM,IAAI,KAAK,CAAC,cAAc;QAC9B,QAAQ,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,oBAAoB,GAAG,CAAC,EAC3D;QACA,kBAAkB,GAAG,IAAI,CAAC;KAC3B;IAED,IACE,QAAQ,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,cAAc;QAC9B,QAAQ,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,mBAAmB,GAAG,CAAC,EAC1D;QACA,gBAAgB,GAAG,IAAI,CAAC;KACzB;IACD,IACE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,oBAAoB;QACrD,MAAM,IAAI,KAAK,CAAC,cAAc;QAC9B,QAAQ,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,mBAAmB,GAAG,CAAC,EAC1D;QACA,sBAAsB,GAAG,IAAI,CAAC;KAC/B;IACD,IACE,QAAQ,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,mBAAmB,GAAG,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,cAAc;QAC9B,QAAQ,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,oBAAoB,GAAG,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,cAAc,EAC9B;QACA,QAAQ,GAAG,IAAI,CAAC;KACjB;IACD,OAAO;QACL,aAAa;QACb,kBAAkB;QAClB,gBAAgB;QAChB,sBAAsB;QACtB,QAAQ;QACR,gBAAgB;QAChB,wBAAwB;QACxB,0BAA0B;QAC1B,2BAA2B;KAC5B,CAAC;AACJ,CAAC","file":"cell-pos.js","sourcesContent":["import type { BaseTableAPI } from '../..';\n\n/* eslint-disable no-undef */\nexport function calcStartPosition(\n left: number,\n top: number,\n width: number,\n height: number,\n contentWidth: number,\n contentHeight: number,\n textAlign: CanvasTextAlign = 'left',\n textBaseline: CanvasTextBaseline = 'middle',\n margin = [0, 0, 0, 0],\n paddingLeft = 0,\n paddingRight = 0,\n paddingTop = 0,\n paddingBottom = 0\n): { x: number; y: number } {\n const right = left + width;\n const bottom = top + height;\n let x = left + margin[3] + paddingLeft;\n if (textAlign === 'right' || textAlign === 'end') {\n x = right - contentWidth - margin[1] - paddingRight;\n } else if (textAlign === 'center') {\n x = left + (width - contentWidth + paddingLeft - paddingRight) / 2;\n }\n let y = top + margin[0] + paddingTop;\n if (textBaseline === 'bottom' || textBaseline === 'alphabetic' || textBaseline === 'ideographic') {\n y = bottom - contentHeight - margin[2] - paddingBottom;\n } else if (textBaseline === 'middle') {\n y = top + (height - contentHeight + paddingTop - paddingBottom) / 2;\n }\n return { x, y };\n}\n\nexport function calculateCellRangeDistribution(\n startCol: number,\n startRow: number,\n endCol: number,\n endRow: number,\n table: BaseTableAPI\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 <= table.frozenColCount - 1 && startRow <= table.frozenRowCount - 1) {\n needCornerHeader = true;\n }\n if (endCol >= table.colCount - table.rightFrozenColCount && startRow <= table.frozenRowCount - 1) {\n needRightTopCornerHeader = true;\n }\n\n if (startCol <= table.frozenColCount - 1 && endRow >= table.rowCount - table.bottomFrozenRowCount) {\n needLeftBottomCornerHeader = true;\n }\n\n if (endCol >= table.colCount - table.rightFrozenColCount && endRow >= table.rowCount - table.bottomFrozenRowCount) {\n needRightBottomCornerHeader = true;\n }\n\n if (\n startCol <= table.frozenColCount - 1 &&\n endRow >= table.frozenRowCount &&\n startRow <= table.rowCount - table.bottomFrozenRowCount - 1\n ) {\n needRowHeader = true;\n }\n if (\n endCol >= table.colCount - table.rightFrozenColCount &&\n endRow >= table.frozenRowCount &&\n startRow <= table.rowCount - table.bottomFrozenRowCount - 1\n ) {\n needRightRowHeader = true;\n }\n\n if (\n startRow <= table.frozenRowCount - 1 &&\n endCol >= table.frozenColCount &&\n startCol <= table.colCount - table.rightFrozenColCount - 1\n ) {\n needColumnHeader = true;\n }\n if (\n endRow >= table.rowCount - table.bottomFrozenRowCount &&\n endCol >= table.frozenColCount &&\n startCol <= table.colCount - table.rightFrozenColCount - 1\n ) {\n needBottomColumnHeader = true;\n }\n if (\n startCol <= table.colCount - table.rightFrozenColCount - 1 &&\n endCol >= table.frozenColCount &&\n startRow <= table.rowCount - table.bottomFrozenRowCount - 1 &&\n endRow >= table.frozenRowCount\n ) {\n needBody = true;\n }\n return {\n needRowHeader,\n needRightRowHeader,\n needColumnHeader,\n needBottomColumnHeader,\n needBody,\n needCornerHeader,\n needRightTopCornerHeader,\n needLeftBottomCornerHeader,\n needRightBottomCornerHeader\n };\n}\n"]}
|
|
@@ -3,4 +3,10 @@ export function updateContainerChildrenX(containerGroup, x) {
|
|
|
3
3
|
column.setAttribute("x", x), x += column.attribute.width;
|
|
4
4
|
})), x;
|
|
5
5
|
}
|
|
6
|
+
|
|
7
|
+
export function updateContainerChildrenY(containerGroup, y) {
|
|
8
|
+
return containerGroup.forEachChildrenSkipChild(((row, index) => {
|
|
9
|
+
row.setAttribute("y", y), y += row.attribute.height;
|
|
10
|
+
})), y;
|
|
11
|
+
}
|
|
6
12
|
//# sourceMappingURL=update-container.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/scenegraph/utils/update-container.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,wBAAwB,CAAC,cAAqB,EAAE,CAAS;IAEvE,cAAc,CAAC,wBAAwB,CAAC,CAAC,MAAa,EAAE,KAAK,EAAE,EAAE;QAC/D,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;AACX,CAAC","file":"update-container.js","sourcesContent":["import type { Group } from '../graphic/group';\n\nexport function updateContainerChildrenX(containerGroup: Group, x: number): number {\n // let x = 0;\n containerGroup.forEachChildrenSkipChild((column: Group, index) => {\n column.setAttribute('x', x);\n x += column.attribute.width;\n });\n return x;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/scenegraph/utils/update-container.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,wBAAwB,CAAC,cAAqB,EAAE,CAAS;IAEvE,cAAc,CAAC,wBAAwB,CAAC,CAAC,MAAa,EAAE,KAAK,EAAE,EAAE;QAC/D,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;AACX,CAAC;AACD,MAAM,UAAU,wBAAwB,CAAC,cAAqB,EAAE,CAAS;IACvE,cAAc,CAAC,wBAAwB,CAAC,CAAC,GAAU,EAAE,KAAK,EAAE,EAAE;QAC5D,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;AACX,CAAC","file":"update-container.js","sourcesContent":["import type { Group } from '../graphic/group';\n\nexport function updateContainerChildrenX(containerGroup: Group, x: number): number {\n // let x = 0;\n containerGroup.forEachChildrenSkipChild((column: Group, index) => {\n column.setAttribute('x', x);\n x += column.attribute.width;\n });\n return x;\n}\nexport function updateContainerChildrenY(containerGroup: Group, y: number): number {\n containerGroup.forEachChildrenSkipChild((row: Group, index) => {\n row.setAttribute('y', y);\n y += row.attribute.height;\n });\n return y;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { CellRange } from '../../ts-types';
|
|
1
|
+
import type { StateManager } from '../state';
|
|
2
|
+
import type { CustomSelectionStyle, CellRange } from '../../ts-types';
|
|
3
3
|
export declare function deletaCustomSelectRanges(state: StateManager): void;
|
|
4
4
|
export declare function addCustomSelectRanges(customSelectRanges: {
|
|
5
5
|
range: CellRange;
|