@visactor/vtable-plugins 1.17.7-alpha.0 → 1.17.7
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/add-row-column.d.ts +40 -0
- package/cjs/add-row-column.js +217 -0
- package/cjs/add-row-column.js.map +1 -0
- package/cjs/carousel-animation.js +2 -1
- package/cjs/column-series.d.ts +29 -0
- package/cjs/column-series.js +76 -0
- package/cjs/column-series.js.map +1 -0
- package/cjs/excel-edit-cell-keyboard.d.ts +16 -0
- package/cjs/excel-edit-cell-keyboard.js +79 -0
- package/cjs/excel-edit-cell-keyboard.js.map +1 -0
- package/cjs/focus-highlight.d.ts +23 -0
- package/cjs/focus-highlight.js +93 -0
- package/cjs/focus-highlight.js.map +1 -0
- package/cjs/header-highlight.js.map +1 -1
- package/cjs/highlight-header-when-select-cell.d.ts +25 -0
- package/cjs/highlight-header-when-select-cell.js +111 -0
- package/cjs/highlight-header-when-select-cell.js.map +1 -0
- package/cjs/index.d.ts +8 -0
- package/cjs/index.js +5 -1
- package/cjs/index.js.map +1 -1
- package/cjs/invert-highlight.js.map +1 -1
- package/cjs/row-series.d.ts +15 -0
- package/cjs/row-series.js +35 -0
- package/cjs/row-series.js.map +1 -0
- package/cjs/table-carousel-animation.d.ts +53 -0
- package/cjs/table-carousel-animation.js +73 -0
- package/cjs/table-carousel-animation.js.map +1 -0
- package/cjs/types.d.ts +3 -0
- package/cjs/types.js +6 -0
- package/cjs/types.js.map +1 -0
- package/dist/vtable-plugins.js +2893 -859
- package/dist/vtable-plugins.min.js +1 -1
- package/es/add-row-column.d.ts +40 -0
- package/es/add-row-column.js +184 -0
- package/es/add-row-column.js.map +1 -0
- package/es/carousel-animation.js +2 -1
- package/es/column-series.d.ts +29 -0
- package/es/column-series.js +43 -0
- package/es/column-series.js.map +1 -0
- package/es/excel-edit-cell-keyboard.d.ts +16 -0
- package/es/excel-edit-cell-keyboard.js +46 -0
- package/es/excel-edit-cell-keyboard.js.map +1 -0
- package/es/focus-highlight.d.ts +23 -0
- package/es/focus-highlight.js +91 -0
- package/es/focus-highlight.js.map +1 -0
- package/es/header-highlight.js.map +1 -1
- package/es/highlight-header-when-select-cell.d.ts +25 -0
- package/es/highlight-header-when-select-cell.js +103 -0
- package/es/highlight-header-when-select-cell.js.map +1 -0
- package/es/index.d.ts +8 -0
- package/es/index.js +16 -0
- package/es/index.js.map +1 -1
- package/es/invert-highlight.js.map +1 -1
- package/es/row-series.d.ts +15 -0
- package/es/row-series.js +27 -0
- package/es/row-series.js.map +1 -0
- package/es/table-carousel-animation.d.ts +53 -0
- package/es/table-carousel-animation.js +65 -0
- package/es/table-carousel-animation.js.map +1 -0
- package/es/types.d.ts +3 -0
- package/es/types.js +2 -0
- package/es/types.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import * as VTable from '@visactor/vtable';
|
|
3
|
+
export interface AddRowColumnOptions {
|
|
4
|
+
addColumnEnable?: boolean;
|
|
5
|
+
addRowEnable?: boolean;
|
|
6
|
+
addColumnCallback?: (col: number) => void;
|
|
7
|
+
addRowCallback?: (row: number) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare class AddRowColumnPlugin implements VTable.plugins.IVTablePlugin {
|
|
10
|
+
id: string;
|
|
11
|
+
runTime: ("mouseleave_table" | "mouseenter_cell" | "mouseleave_cell")[];
|
|
12
|
+
pluginOptions: AddRowColumnOptions;
|
|
13
|
+
table: VTable.ListTable;
|
|
14
|
+
hoverCell: VTable.TYPES.CellAddressWithBound;
|
|
15
|
+
hideAllTimeoutId_addColumn: NodeJS.Timeout;
|
|
16
|
+
hideAllTimeoutId_addRow: NodeJS.Timeout;
|
|
17
|
+
leftDotForAddColumn: HTMLElement;
|
|
18
|
+
rightDotForAddColumn: HTMLElement;
|
|
19
|
+
addIconForAddColumn: HTMLElement;
|
|
20
|
+
addLineForAddColumn: HTMLElement;
|
|
21
|
+
topDotForAddRow: HTMLElement;
|
|
22
|
+
bottomDotForAddRow: HTMLElement;
|
|
23
|
+
addIconForAddRow: HTMLElement;
|
|
24
|
+
addLineForAddRow: HTMLElement;
|
|
25
|
+
constructor(pluginOptions?: AddRowColumnOptions);
|
|
26
|
+
run(...args: any[]): void;
|
|
27
|
+
initAddColumnDomElement(): void;
|
|
28
|
+
bindEventForAddColumn(): void;
|
|
29
|
+
showDotForAddColumn(top: number, left: number, right: number, isShowLeft?: boolean, isShowRight?: boolean): void;
|
|
30
|
+
showAddIconForAddColumn(left: number, top: number, isLeft: boolean): void;
|
|
31
|
+
showSplitLineForAddColumn(left: number, top: number, height: number): void;
|
|
32
|
+
delayHideAllForAddColumn(delay?: number): void;
|
|
33
|
+
initAddRowDomElement(): void;
|
|
34
|
+
bindEventForAddRow(): void;
|
|
35
|
+
showDotForAddRow(top: number, left: number, bottom: number, isShowTop?: boolean, isShowBottom?: boolean): void;
|
|
36
|
+
showAddIconForAddRow(left: number, top: number, isTop: boolean): void;
|
|
37
|
+
showSplitLineForAddRow(left: number, top: number, width: number): void;
|
|
38
|
+
delayHideAllForAddRow(delay?: number): void;
|
|
39
|
+
release(): void;
|
|
40
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
4
|
+
void 0 === k2 && (k2 = k);
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
|
|
7
|
+
enumerable: !0,
|
|
8
|
+
get: function() {
|
|
9
|
+
return m[k];
|
|
10
|
+
}
|
|
11
|
+
}), Object.defineProperty(o, k2, desc);
|
|
12
|
+
} : function(o, m, k, k2) {
|
|
13
|
+
void 0 === k2 && (k2 = k), o[k2] = m[k];
|
|
14
|
+
}), __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", {
|
|
16
|
+
enumerable: !0,
|
|
17
|
+
value: v
|
|
18
|
+
});
|
|
19
|
+
} : function(o, v) {
|
|
20
|
+
o.default = v;
|
|
21
|
+
}), __importStar = this && this.__importStar || function(mod) {
|
|
22
|
+
if (mod && mod.__esModule) return mod;
|
|
23
|
+
var result = {};
|
|
24
|
+
if (null != mod) for (var k in mod) "default" !== k && Object.prototype.hasOwnProperty.call(mod, k) && __createBinding(result, mod, k);
|
|
25
|
+
return __setModuleDefault(result, mod), result;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
Object.defineProperty(exports, "__esModule", {
|
|
29
|
+
value: !0
|
|
30
|
+
}), exports.AddRowColumnPlugin = void 0;
|
|
31
|
+
|
|
32
|
+
const VTable = __importStar(require("@visactor/vtable"));
|
|
33
|
+
|
|
34
|
+
class AddRowColumnPlugin {
|
|
35
|
+
constructor(pluginOptions = {
|
|
36
|
+
addColumnEnable: !0,
|
|
37
|
+
addRowEnable: !0
|
|
38
|
+
}) {
|
|
39
|
+
var _a, _b;
|
|
40
|
+
this.id = "add-row-column", this.runTime = [ VTable.TABLE_EVENT_TYPE.MOUSEENTER_CELL, VTable.TABLE_EVENT_TYPE.MOUSELEAVE_CELL, VTable.TABLE_EVENT_TYPE.MOUSELEAVE_TABLE ],
|
|
41
|
+
this.pluginOptions = pluginOptions, this.pluginOptions.addColumnEnable = null === (_a = this.pluginOptions.addColumnEnable) || void 0 === _a || _a,
|
|
42
|
+
this.pluginOptions.addRowEnable = null === (_b = this.pluginOptions.addRowEnable) || void 0 === _b || _b,
|
|
43
|
+
this.pluginOptions.addColumnEnable && (this.initAddColumnDomElement(), this.bindEventForAddColumn()),
|
|
44
|
+
this.pluginOptions.addRowEnable && (this.initAddRowDomElement(), this.bindEventForAddRow());
|
|
45
|
+
}
|
|
46
|
+
run(...args) {
|
|
47
|
+
const eventArgs = args[0], runTime = args[1], table = args[2];
|
|
48
|
+
if (this.table = table, runTime === VTable.TABLE_EVENT_TYPE.MOUSEENTER_CELL) {
|
|
49
|
+
clearTimeout(this.hideAllTimeoutId_addColumn), clearTimeout(this.hideAllTimeoutId_addRow);
|
|
50
|
+
const canvasBounds = table.canvas.getBoundingClientRect(), cell = table.getCellAtRelativePosition(eventArgs.event.clientX - canvasBounds.left, eventArgs.event.clientY - canvasBounds.top);
|
|
51
|
+
this.hoverCell = cell;
|
|
52
|
+
const cellRect = table.getCellRelativeRect(cell.col, cell.row);
|
|
53
|
+
if (this.pluginOptions.addColumnEnable) {
|
|
54
|
+
const isRowSerierNumberCol = table.isSeriesNumber(cell.col, 0);
|
|
55
|
+
this.showDotForAddColumn(canvasBounds.top - 6, cellRect.left + canvasBounds.left, cellRect.right + canvasBounds.left, !isRowSerierNumberCol);
|
|
56
|
+
}
|
|
57
|
+
if (this.pluginOptions.addRowEnable) {
|
|
58
|
+
const isHeader = table.isHeader(cell.col, cell.row);
|
|
59
|
+
this.showDotForAddRow(cellRect.top + canvasBounds.top, canvasBounds.left - 6, cellRect.bottom + canvasBounds.top, !isHeader, !isHeader);
|
|
60
|
+
}
|
|
61
|
+
} else runTime === VTable.TABLE_EVENT_TYPE.MOUSELEAVE_CELL || runTime === VTable.TABLE_EVENT_TYPE.MOUSELEAVE_TABLE && (this.pluginOptions.addColumnEnable && this.delayHideAllForAddColumn(),
|
|
62
|
+
this.pluginOptions.addRowEnable && this.delayHideAllForAddRow());
|
|
63
|
+
}
|
|
64
|
+
initAddColumnDomElement() {
|
|
65
|
+
this.leftDotForAddColumn = document.createElement("div"), this.leftDotForAddColumn.style.width = "6px",
|
|
66
|
+
this.leftDotForAddColumn.style.height = "6px", this.leftDotForAddColumn.style.backgroundColor = "#4A90E2",
|
|
67
|
+
this.leftDotForAddColumn.style.position = "absolute", this.leftDotForAddColumn.style.cursor = "pointer",
|
|
68
|
+
this.leftDotForAddColumn.style.zIndex = "1000", this.leftDotForAddColumn.style.borderRadius = "50%",
|
|
69
|
+
this.leftDotForAddColumn.style.border = "1px solid white", this.leftDotForAddColumn.style.boxShadow = "0 1px 3px rgba(0,0,0,0.2)",
|
|
70
|
+
document.body.appendChild(this.leftDotForAddColumn), this.rightDotForAddColumn = document.createElement("div"),
|
|
71
|
+
this.rightDotForAddColumn.style.width = "6px", this.rightDotForAddColumn.style.height = "6px",
|
|
72
|
+
this.rightDotForAddColumn.style.backgroundColor = "#4A90E2", this.rightDotForAddColumn.style.position = "absolute",
|
|
73
|
+
this.rightDotForAddColumn.style.cursor = "pointer", this.rightDotForAddColumn.style.zIndex = "1000",
|
|
74
|
+
this.rightDotForAddColumn.style.borderRadius = "50%", this.rightDotForAddColumn.style.border = "1px solid white",
|
|
75
|
+
this.rightDotForAddColumn.style.boxShadow = "0 1px 3px rgba(0,0,0,0.2)", document.body.appendChild(this.rightDotForAddColumn),
|
|
76
|
+
this.addIconForAddColumn = document.createElement("div"), this.addIconForAddColumn.style.width = "18px",
|
|
77
|
+
this.addIconForAddColumn.style.height = "18px", this.addIconForAddColumn.style.backgroundColor = "#4A90E2",
|
|
78
|
+
this.addIconForAddColumn.style.position = "absolute", this.addIconForAddColumn.style.zIndex = "1001",
|
|
79
|
+
this.addIconForAddColumn.style.display = "none", this.addIconForAddColumn.style.borderRadius = "50%",
|
|
80
|
+
this.addIconForAddColumn.style.boxShadow = "0 2px 5px rgba(0,0,0,0.2)", this.addIconForAddColumn.style.display = "flex",
|
|
81
|
+
this.addIconForAddColumn.style.justifyContent = "center", this.addIconForAddColumn.style.alignItems = "center",
|
|
82
|
+
this.addIconForAddColumn.style.border = "1px solid white", document.body.appendChild(this.addIconForAddColumn);
|
|
83
|
+
const addIconText = document.createElement("div");
|
|
84
|
+
addIconText.textContent = "+", addIconText.style.color = "white", addIconText.style.fontSize = "18px",
|
|
85
|
+
addIconText.style.fontWeight = "bold", addIconText.style.lineHeight = "15px", addIconText.style.userSelect = "none",
|
|
86
|
+
addIconText.style.cursor = "pointer", addIconText.style.verticalAlign = "top", addIconText.style.textAlign = "center",
|
|
87
|
+
this.addIconForAddColumn.appendChild(addIconText), this.addLineForAddColumn = document.createElement("div"),
|
|
88
|
+
this.addLineForAddColumn.style.width = "2px", this.addLineForAddColumn.style.height = "10px",
|
|
89
|
+
this.addLineForAddColumn.style.backgroundColor = "#4A90E2", this.addLineForAddColumn.style.position = "absolute",
|
|
90
|
+
this.addLineForAddColumn.style.zIndex = "1001", this.addLineForAddColumn.style.display = "none",
|
|
91
|
+
document.body.appendChild(this.addLineForAddColumn);
|
|
92
|
+
}
|
|
93
|
+
bindEventForAddColumn() {
|
|
94
|
+
this.leftDotForAddColumn.addEventListener("mouseenter", (() => {
|
|
95
|
+
clearTimeout(this.hideAllTimeoutId_addColumn), this.addIconForAddColumn.style.display = "block";
|
|
96
|
+
const dotWidth = this.leftDotForAddColumn.offsetWidth, dotHeight = this.leftDotForAddColumn.offsetHeight;
|
|
97
|
+
this.showAddIconForAddColumn(this.leftDotForAddColumn.offsetLeft + dotWidth / 2, this.leftDotForAddColumn.offsetTop + dotHeight / 2, !0),
|
|
98
|
+
this.showSplitLineForAddColumn(this.leftDotForAddColumn.offsetLeft + dotWidth / 2 - 1, this.leftDotForAddColumn.offsetTop + dotHeight / 2 + 2, this.table.getDrawRange().height);
|
|
99
|
+
})), this.rightDotForAddColumn.addEventListener("mouseenter", (() => {
|
|
100
|
+
clearTimeout(this.hideAllTimeoutId_addColumn), this.addIconForAddColumn.style.display = "block";
|
|
101
|
+
const dotWidth = this.rightDotForAddColumn.offsetWidth, dotHeight = this.rightDotForAddColumn.offsetHeight;
|
|
102
|
+
this.showAddIconForAddColumn(this.rightDotForAddColumn.offsetLeft + dotWidth / 2, this.rightDotForAddColumn.offsetTop + dotHeight / 2, !1),
|
|
103
|
+
this.showSplitLineForAddColumn(this.rightDotForAddColumn.offsetLeft + dotWidth / 2 - 1, this.rightDotForAddColumn.offsetTop + dotHeight / 2 + 2, this.table.getDrawRange().height);
|
|
104
|
+
})), this.addIconForAddColumn.addEventListener("mouseleave", (() => {
|
|
105
|
+
this.addIconForAddColumn.style.display = "none", this.addLineForAddColumn.style.display = "none",
|
|
106
|
+
this.delayHideAllForAddColumn();
|
|
107
|
+
})), this.addIconForAddColumn.addEventListener("click", (e => {
|
|
108
|
+
const isLeft = "left" === this.addIconForAddColumn.dataset.addIconType, columns = this.table.options.columns, col = this.hoverCell.col, addColIndex = isLeft ? col : col + 1;
|
|
109
|
+
this.pluginOptions.addColumnCallback ? this.pluginOptions.addColumnCallback(addColIndex) : (columns.splice(addColIndex, 0, {
|
|
110
|
+
field: "",
|
|
111
|
+
title: `New Column ${col}`,
|
|
112
|
+
width: 100
|
|
113
|
+
}), this.table.updateColumns(columns)), this.delayHideAllForAddColumn(0);
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
showDotForAddColumn(top, left, right, isShowLeft = !0, isShowRight = !0) {
|
|
117
|
+
const dotWidth = this.leftDotForAddColumn.offsetWidth, dotHeight = this.leftDotForAddColumn.offsetHeight;
|
|
118
|
+
this.leftDotForAddColumn.style.left = left - dotWidth / 2 + "px", this.leftDotForAddColumn.style.top = top - dotHeight / 2 + "px",
|
|
119
|
+
this.rightDotForAddColumn.style.left = right - dotWidth / 2 + "px", this.rightDotForAddColumn.style.top = top - dotHeight / 2 + "px",
|
|
120
|
+
this.leftDotForAddColumn.style.display = isShowLeft ? "block" : "none", this.rightDotForAddColumn.style.display = isShowRight ? "block" : "none";
|
|
121
|
+
}
|
|
122
|
+
showAddIconForAddColumn(left, top, isLeft) {
|
|
123
|
+
const iconWidth = this.addIconForAddColumn.offsetWidth, iconHeight = this.addIconForAddColumn.offsetHeight, dotHeight = this.leftDotForAddColumn.offsetHeight;
|
|
124
|
+
this.addIconForAddColumn.style.left = left - iconWidth / 2 + "px", this.addIconForAddColumn.style.top = top - iconHeight / 2 - dotHeight / 2 + "px",
|
|
125
|
+
this.addIconForAddColumn.dataset.addIconType = isLeft ? "left" : "right";
|
|
126
|
+
}
|
|
127
|
+
showSplitLineForAddColumn(left, top, height) {
|
|
128
|
+
this.addLineForAddColumn.style.left = `${left}px`, this.addLineForAddColumn.style.top = `${top}px`,
|
|
129
|
+
this.addLineForAddColumn.style.height = `${height}px`, this.addLineForAddColumn.style.display = "block";
|
|
130
|
+
}
|
|
131
|
+
delayHideAllForAddColumn(delay = 1e3) {
|
|
132
|
+
this.hideAllTimeoutId_addColumn = setTimeout((() => {
|
|
133
|
+
this.addIconForAddColumn.style.display = "none", this.addLineForAddColumn.style.display = "none",
|
|
134
|
+
this.leftDotForAddColumn.style.display = "none", this.rightDotForAddColumn.style.display = "none";
|
|
135
|
+
}), delay);
|
|
136
|
+
}
|
|
137
|
+
initAddRowDomElement() {
|
|
138
|
+
this.topDotForAddRow = document.createElement("div"), this.topDotForAddRow.style.width = "6px",
|
|
139
|
+
this.topDotForAddRow.style.height = "6px", this.topDotForAddRow.style.backgroundColor = "#4A90E2",
|
|
140
|
+
this.topDotForAddRow.style.position = "absolute", this.topDotForAddRow.style.cursor = "pointer",
|
|
141
|
+
this.topDotForAddRow.style.zIndex = "1000", this.topDotForAddRow.style.borderRadius = "50%",
|
|
142
|
+
this.topDotForAddRow.style.border = "1px solid white", this.topDotForAddRow.style.boxShadow = "0 1px 3px rgba(0,0,0,0.2)",
|
|
143
|
+
document.body.appendChild(this.topDotForAddRow), this.bottomDotForAddRow = document.createElement("div"),
|
|
144
|
+
this.bottomDotForAddRow.style.width = "6px", this.bottomDotForAddRow.style.height = "6px",
|
|
145
|
+
this.bottomDotForAddRow.style.backgroundColor = "#4A90E2", this.bottomDotForAddRow.style.position = "absolute",
|
|
146
|
+
this.bottomDotForAddRow.style.cursor = "pointer", this.bottomDotForAddRow.style.zIndex = "1000",
|
|
147
|
+
this.bottomDotForAddRow.style.borderRadius = "50%", this.bottomDotForAddRow.style.border = "1px solid white",
|
|
148
|
+
this.bottomDotForAddRow.style.boxShadow = "0 1px 3px rgba(0,0,0,0.2)", document.body.appendChild(this.bottomDotForAddRow),
|
|
149
|
+
this.addIconForAddRow = document.createElement("div"), this.addIconForAddRow.style.width = "18px",
|
|
150
|
+
this.addIconForAddRow.style.height = "18px", this.addIconForAddRow.style.backgroundColor = "#4A90E2",
|
|
151
|
+
this.addIconForAddRow.style.position = "absolute", this.addIconForAddRow.style.zIndex = "1001",
|
|
152
|
+
this.addIconForAddRow.style.display = "none", this.addIconForAddRow.style.borderRadius = "50%",
|
|
153
|
+
this.addIconForAddRow.style.boxShadow = "0 2px 5px rgba(0,0,0,0.2)", this.addIconForAddRow.style.display = "flex",
|
|
154
|
+
this.addIconForAddRow.style.justifyContent = "center", this.addIconForAddRow.style.alignItems = "center",
|
|
155
|
+
this.addIconForAddRow.style.border = "1px solid white", document.body.appendChild(this.addIconForAddRow);
|
|
156
|
+
const addIconText = document.createElement("div");
|
|
157
|
+
addIconText.textContent = "+", addIconText.style.color = "white", addIconText.style.fontSize = "18px",
|
|
158
|
+
addIconText.style.fontWeight = "bold", addIconText.style.lineHeight = "15px", addIconText.style.userSelect = "none",
|
|
159
|
+
addIconText.style.cursor = "pointer", addIconText.style.verticalAlign = "top", addIconText.style.textAlign = "center",
|
|
160
|
+
this.addIconForAddRow.appendChild(addIconText), this.addLineForAddRow = document.createElement("div"),
|
|
161
|
+
this.addLineForAddRow.style.width = "10px", this.addLineForAddRow.style.height = "2px",
|
|
162
|
+
this.addLineForAddRow.style.backgroundColor = "#4A90E2", this.addLineForAddRow.style.position = "absolute",
|
|
163
|
+
this.addLineForAddRow.style.zIndex = "1001", this.addLineForAddRow.style.display = "none",
|
|
164
|
+
document.body.appendChild(this.addLineForAddRow);
|
|
165
|
+
}
|
|
166
|
+
bindEventForAddRow() {
|
|
167
|
+
this.topDotForAddRow.addEventListener("mouseenter", (() => {
|
|
168
|
+
clearTimeout(this.hideAllTimeoutId_addRow), this.addIconForAddRow.style.display = "block";
|
|
169
|
+
const dotWidth = this.topDotForAddRow.offsetWidth, dotHeight = this.topDotForAddRow.offsetHeight;
|
|
170
|
+
this.showAddIconForAddRow(this.topDotForAddRow.offsetLeft + dotWidth / 2, this.topDotForAddRow.offsetTop + dotHeight / 2, !0),
|
|
171
|
+
this.showSplitLineForAddRow(this.topDotForAddRow.offsetLeft + dotWidth + 2, this.topDotForAddRow.offsetTop + dotHeight / 2 - 1, this.table.getDrawRange().width);
|
|
172
|
+
})), this.bottomDotForAddRow.addEventListener("mouseenter", (() => {
|
|
173
|
+
clearTimeout(this.hideAllTimeoutId_addRow), this.addIconForAddRow.style.display = "block";
|
|
174
|
+
const dotWidth = this.bottomDotForAddRow.offsetWidth, dotHeight = this.bottomDotForAddRow.offsetHeight;
|
|
175
|
+
this.showAddIconForAddRow(this.bottomDotForAddRow.offsetLeft + dotWidth / 2, this.bottomDotForAddRow.offsetTop + dotHeight / 2, !1),
|
|
176
|
+
this.showSplitLineForAddRow(this.bottomDotForAddRow.offsetLeft + dotWidth + 2, this.bottomDotForAddRow.offsetTop + dotHeight / 2 - 1, this.table.getDrawRange().height);
|
|
177
|
+
})), this.addIconForAddRow.addEventListener("mouseleave", (() => {
|
|
178
|
+
this.addIconForAddRow.style.display = "none", this.addLineForAddRow.style.display = "none",
|
|
179
|
+
this.delayHideAllForAddRow();
|
|
180
|
+
})), this.addIconForAddRow.addEventListener("click", (e => {
|
|
181
|
+
const isTop = "top" === this.addIconForAddRow.dataset.addIconType, row = this.hoverCell.row, addRowIndex = isTop ? row : row + 1;
|
|
182
|
+
if (this.pluginOptions.addRowCallback) this.pluginOptions.addRowCallback(addRowIndex); else {
|
|
183
|
+
const recordIndex = this.table.getRecordIndexByCell(0, addRowIndex);
|
|
184
|
+
this.table.addRecord({}, recordIndex);
|
|
185
|
+
}
|
|
186
|
+
this.delayHideAllForAddRow(0);
|
|
187
|
+
}));
|
|
188
|
+
}
|
|
189
|
+
showDotForAddRow(top, left, bottom, isShowTop = !0, isShowBottom = !0) {
|
|
190
|
+
const dotWidth = this.topDotForAddRow.offsetWidth, dotHeight = this.topDotForAddRow.offsetHeight;
|
|
191
|
+
this.topDotForAddRow.style.left = left - dotWidth / 2 + "px", this.topDotForAddRow.style.top = top - dotHeight / 2 + "px",
|
|
192
|
+
this.bottomDotForAddRow.style.left = left - dotWidth / 2 + "px", this.bottomDotForAddRow.style.top = bottom - dotHeight / 2 + "px",
|
|
193
|
+
this.topDotForAddRow.style.display = isShowTop ? "block" : "none", this.bottomDotForAddRow.style.display = isShowBottom ? "block" : "none";
|
|
194
|
+
}
|
|
195
|
+
showAddIconForAddRow(left, top, isTop) {
|
|
196
|
+
const iconWidth = this.addIconForAddRow.offsetWidth, iconHeight = this.addIconForAddRow.offsetHeight, dotWidth = this.topDotForAddRow.offsetWidth;
|
|
197
|
+
this.addIconForAddRow.style.left = left - iconWidth / 2 - dotWidth / 2 + "px", this.addIconForAddRow.style.top = top - iconHeight / 2 + "px",
|
|
198
|
+
this.addIconForAddRow.dataset.addIconType = isTop ? "top" : "bottom";
|
|
199
|
+
}
|
|
200
|
+
showSplitLineForAddRow(left, top, width) {
|
|
201
|
+
this.addLineForAddRow.style.left = `${left}px`, this.addLineForAddRow.style.top = `${top}px`,
|
|
202
|
+
this.addLineForAddRow.style.width = `${width}px`, this.addLineForAddRow.style.display = "block";
|
|
203
|
+
}
|
|
204
|
+
delayHideAllForAddRow(delay = 1e3) {
|
|
205
|
+
this.hideAllTimeoutId_addRow = setTimeout((() => {
|
|
206
|
+
this.addIconForAddRow.style.display = "none", this.addLineForAddRow.style.display = "none",
|
|
207
|
+
this.topDotForAddRow.style.display = "none", this.bottomDotForAddRow.style.display = "none";
|
|
208
|
+
}), delay);
|
|
209
|
+
}
|
|
210
|
+
release() {
|
|
211
|
+
this.leftDotForAddColumn.remove(), this.rightDotForAddColumn.remove(), this.addIconForAddColumn.remove(),
|
|
212
|
+
this.addLineForAddColumn.remove(), this.topDotForAddRow.remove(), this.bottomDotForAddRow.remove(),
|
|
213
|
+
this.addIconForAddRow.remove(), this.addLineForAddRow.remove();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
exports.AddRowColumnPlugin = AddRowColumnPlugin;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["add-row-column.ts"],"names":[],"mappings":"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","file":"add-row-column.js","sourcesContent":["import * as VTable from '@visactor/vtable';\n/**\n * 添加行和列的插件的配置选项\n */\nexport interface AddRowColumnOptions {\n /**\n * 是否启用添加列\n */\n addColumnEnable?: boolean;\n /**\n * 是否启用添加行\n */\n addRowEnable?: boolean;\n /**\n * 添加列的回调函数\n */\n addColumnCallback?: (col: number) => void;\n /**\n * 添加行的回调函数\n */\n addRowCallback?: (row: number) => void;\n}\n/**\n * 添加行和列的插件\n * 该插件监听了table的MOUSEENTER_CELL,MOUSELEAVE_CELL,MOUSELEAVE_TABLE事件\n * 当鼠标hover到table的cell时,会显示添加行和列的dot和加号\n * 当鼠标离开table的cell时,会隐藏添加行和列的dot和加号\n */\nexport class AddRowColumnPlugin implements VTable.plugins.IVTablePlugin {\n id = 'add-row-column';\n runTime = [\n VTable.TABLE_EVENT_TYPE.MOUSEENTER_CELL,\n VTable.TABLE_EVENT_TYPE.MOUSELEAVE_CELL,\n VTable.TABLE_EVENT_TYPE.MOUSELEAVE_TABLE\n ];\n pluginOptions: AddRowColumnOptions;\n table: VTable.ListTable;\n hoverCell: VTable.TYPES.CellAddressWithBound;\n hideAllTimeoutId_addColumn: NodeJS.Timeout;\n hideAllTimeoutId_addRow: NodeJS.Timeout;\n leftDotForAddColumn: HTMLElement;\n rightDotForAddColumn: HTMLElement;\n addIconForAddColumn: HTMLElement;\n addLineForAddColumn: HTMLElement;\n topDotForAddRow: HTMLElement;\n bottomDotForAddRow: HTMLElement;\n addIconForAddRow: HTMLElement;\n addLineForAddRow: HTMLElement;\n\n constructor(\n pluginOptions: AddRowColumnOptions = {\n addColumnEnable: true,\n addRowEnable: true\n }\n ) {\n this.pluginOptions = pluginOptions;\n this.pluginOptions.addColumnEnable = this.pluginOptions.addColumnEnable ?? true;\n this.pluginOptions.addRowEnable = this.pluginOptions.addRowEnable ?? true;\n if (this.pluginOptions.addColumnEnable) {\n this.initAddColumnDomElement();\n this.bindEventForAddColumn();\n }\n if (this.pluginOptions.addRowEnable) {\n this.initAddRowDomElement();\n this.bindEventForAddRow();\n }\n }\n run(...args: any[]) {\n const eventArgs = args[0];\n const runTime = args[1];\n const table: VTable.BaseTableAPI = args[2];\n this.table = table as VTable.ListTable;\n if (runTime === VTable.TABLE_EVENT_TYPE.MOUSEENTER_CELL) {\n clearTimeout(this.hideAllTimeoutId_addColumn);\n clearTimeout(this.hideAllTimeoutId_addRow);\n const canvasBounds = table.canvas.getBoundingClientRect();\n const cell = table.getCellAtRelativePosition(\n eventArgs.event.clientX - canvasBounds.left,\n eventArgs.event.clientY - canvasBounds.top\n );\n this.hoverCell = cell;\n const cellRect = table.getCellRelativeRect(cell.col, cell.row);\n if (this.pluginOptions.addColumnEnable) {\n const isRowSerierNumberCol = table.isSeriesNumber(cell.col, 0);\n this.showDotForAddColumn(\n canvasBounds.top - 6,\n cellRect.left + canvasBounds.left,\n cellRect.right + canvasBounds.left,\n !isRowSerierNumberCol\n );\n }\n if (this.pluginOptions.addRowEnable) {\n const isHeader = table.isHeader(cell.col, cell.row);\n this.showDotForAddRow(\n cellRect.top + canvasBounds.top,\n canvasBounds.left - 6,\n cellRect.bottom + canvasBounds.top,\n !isHeader,\n !isHeader\n );\n }\n } else if (runTime === VTable.TABLE_EVENT_TYPE.MOUSELEAVE_CELL) {\n } else if (runTime === VTable.TABLE_EVENT_TYPE.MOUSELEAVE_TABLE) {\n if (this.pluginOptions.addColumnEnable) {\n this.delayHideAllForAddColumn();\n }\n if (this.pluginOptions.addRowEnable) {\n this.delayHideAllForAddRow();\n }\n }\n }\n // #region 添加列\n initAddColumnDomElement() {\n //创建一个div 作为hoverCell的顶部左侧的圆点\n this.leftDotForAddColumn = document.createElement('div');\n this.leftDotForAddColumn.style.width = '6px';\n this.leftDotForAddColumn.style.height = '6px';\n this.leftDotForAddColumn.style.backgroundColor = '#4A90E2'; // 蓝色\n this.leftDotForAddColumn.style.position = 'absolute';\n this.leftDotForAddColumn.style.cursor = 'pointer';\n this.leftDotForAddColumn.style.zIndex = '1000';\n this.leftDotForAddColumn.style.borderRadius = '50%';\n this.leftDotForAddColumn.style.border = '1px solid white';\n this.leftDotForAddColumn.style.boxShadow = '0 1px 3px rgba(0,0,0,0.2)';\n document.body.appendChild(this.leftDotForAddColumn);\n\n //创建一个div 作为hoverCell的顶部右侧的圆点\n this.rightDotForAddColumn = document.createElement('div');\n this.rightDotForAddColumn.style.width = '6px';\n this.rightDotForAddColumn.style.height = '6px';\n this.rightDotForAddColumn.style.backgroundColor = '#4A90E2'; // 蓝色\n this.rightDotForAddColumn.style.position = 'absolute';\n this.rightDotForAddColumn.style.cursor = 'pointer';\n this.rightDotForAddColumn.style.zIndex = '1000';\n this.rightDotForAddColumn.style.borderRadius = '50%';\n this.rightDotForAddColumn.style.border = '1px solid white';\n this.rightDotForAddColumn.style.boxShadow = '0 1px 3px rgba(0,0,0,0.2)';\n document.body.appendChild(this.rightDotForAddColumn);\n\n //创建+加号 当鼠标hover到圆点上时,显示+加号\n this.addIconForAddColumn = document.createElement('div');\n this.addIconForAddColumn.style.width = '18px';\n this.addIconForAddColumn.style.height = '18px';\n this.addIconForAddColumn.style.backgroundColor = '#4A90E2'; // 蓝色\n this.addIconForAddColumn.style.position = 'absolute';\n this.addIconForAddColumn.style.zIndex = '1001';\n this.addIconForAddColumn.style.display = 'none';\n this.addIconForAddColumn.style.borderRadius = '50%';\n this.addIconForAddColumn.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)';\n this.addIconForAddColumn.style.display = 'flex';\n this.addIconForAddColumn.style.justifyContent = 'center';\n this.addIconForAddColumn.style.alignItems = 'center';\n this.addIconForAddColumn.style.border = '1px solid white';\n document.body.appendChild(this.addIconForAddColumn);\n\n //addIcon中添加一个+号\n const addIconText = document.createElement('div');\n addIconText.textContent = '+';\n addIconText.style.color = 'white';\n addIconText.style.fontSize = '18px';\n addIconText.style.fontWeight = 'bold';\n addIconText.style.lineHeight = '15px';\n addIconText.style.userSelect = 'none';\n addIconText.style.cursor = 'pointer';\n addIconText.style.verticalAlign = 'top';\n addIconText.style.textAlign = 'center';\n\n this.addIconForAddColumn.appendChild(addIconText);\n\n // 创建加号下面列间隔线\n this.addLineForAddColumn = document.createElement('div');\n this.addLineForAddColumn.style.width = '2px';\n this.addLineForAddColumn.style.height = '10px';\n this.addLineForAddColumn.style.backgroundColor = '#4A90E2'; // 蓝色\n this.addLineForAddColumn.style.position = 'absolute';\n this.addLineForAddColumn.style.zIndex = '1001';\n this.addLineForAddColumn.style.display = 'none';\n document.body.appendChild(this.addLineForAddColumn);\n }\n bindEventForAddColumn() {\n this.leftDotForAddColumn.addEventListener('mouseenter', () => {\n clearTimeout(this.hideAllTimeoutId_addColumn);\n this.addIconForAddColumn.style.display = 'block';\n const dotWidth = this.leftDotForAddColumn.offsetWidth;\n const dotHeight = this.leftDotForAddColumn.offsetHeight;\n this.showAddIconForAddColumn(\n this.leftDotForAddColumn.offsetLeft + dotWidth / 2,\n this.leftDotForAddColumn.offsetTop + dotHeight / 2,\n true\n );\n this.showSplitLineForAddColumn(\n this.leftDotForAddColumn.offsetLeft + dotWidth / 2 - 1,\n this.leftDotForAddColumn.offsetTop + dotHeight / 2 + 2,\n this.table.getDrawRange().height\n );\n });\n\n this.rightDotForAddColumn.addEventListener('mouseenter', () => {\n clearTimeout(this.hideAllTimeoutId_addColumn);\n this.addIconForAddColumn.style.display = 'block';\n const dotWidth = this.rightDotForAddColumn.offsetWidth;\n const dotHeight = this.rightDotForAddColumn.offsetHeight;\n this.showAddIconForAddColumn(\n this.rightDotForAddColumn.offsetLeft + dotWidth / 2,\n this.rightDotForAddColumn.offsetTop + dotHeight / 2,\n false\n );\n this.showSplitLineForAddColumn(\n this.rightDotForAddColumn.offsetLeft + dotWidth / 2 - 1,\n this.rightDotForAddColumn.offsetTop + dotHeight / 2 + 2,\n this.table.getDrawRange().height\n );\n });\n\n // this.addIconForAddColumn.addEventListener('mouseenter', () => {\n // clearTimeout(this.hideAllTimeoutId_addColumn);\n // });\n this.addIconForAddColumn.addEventListener('mouseleave', () => {\n this.addIconForAddColumn.style.display = 'none';\n this.addLineForAddColumn.style.display = 'none';\n this.delayHideAllForAddColumn();\n });\n\n this.addIconForAddColumn.addEventListener('click', (e: MouseEvent) => {\n const isLeft = this.addIconForAddColumn.dataset.addIconType === 'left';\n const columns = this.table.options.columns;\n const col = this.hoverCell.col;\n const addColIndex = isLeft ? col : col + 1;\n if (this.pluginOptions.addColumnCallback) {\n this.pluginOptions.addColumnCallback(addColIndex);\n } else {\n columns.splice(addColIndex, 0, {\n field: ``,\n title: `New Column ${col}`,\n width: 100\n });\n this.table.updateColumns(columns);\n }\n this.delayHideAllForAddColumn(0);\n });\n }\n showDotForAddColumn(\n top: number,\n left: number,\n right: number,\n isShowLeft: boolean = true,\n isShowRight: boolean = true\n ) {\n // 动态获取元素尺寸\n const dotWidth = this.leftDotForAddColumn.offsetWidth;\n const dotHeight = this.leftDotForAddColumn.offsetHeight;\n this.leftDotForAddColumn.style.left = `${left - dotWidth / 2}px`;\n this.leftDotForAddColumn.style.top = `${top - dotHeight / 2}px`;\n this.rightDotForAddColumn.style.left = `${right - dotWidth / 2}px`;\n this.rightDotForAddColumn.style.top = `${top - dotHeight / 2}px`;\n this.leftDotForAddColumn.style.display = isShowLeft ? 'block' : 'none';\n this.rightDotForAddColumn.style.display = isShowRight ? 'block' : 'none';\n }\n showAddIconForAddColumn(left: number, top: number, isLeft: boolean) {\n // 动态获取元素尺寸\n const iconWidth = this.addIconForAddColumn.offsetWidth;\n const iconHeight = this.addIconForAddColumn.offsetHeight;\n const dotHeight = this.leftDotForAddColumn.offsetHeight;\n this.addIconForAddColumn.style.left = `${left - iconWidth / 2}px`;\n this.addIconForAddColumn.style.top = `${top - iconHeight / 2 - dotHeight / 2}px`;\n if (isLeft) {\n this.addIconForAddColumn.dataset.addIconType = 'left';\n } else {\n this.addIconForAddColumn.dataset.addIconType = 'right';\n }\n }\n showSplitLineForAddColumn(left: number, top: number, height: number) {\n this.addLineForAddColumn.style.left = `${left}px`;\n this.addLineForAddColumn.style.top = `${top}px`;\n this.addLineForAddColumn.style.height = `${height}px`;\n this.addLineForAddColumn.style.display = 'block';\n }\n delayHideAllForAddColumn(delay: number = 1000) {\n this.hideAllTimeoutId_addColumn = setTimeout(() => {\n this.addIconForAddColumn.style.display = 'none';\n this.addLineForAddColumn.style.display = 'none';\n this.leftDotForAddColumn.style.display = 'none';\n this.rightDotForAddColumn.style.display = 'none';\n }, delay);\n }\n // #endregion\n\n // #region 添加行\n initAddRowDomElement() {\n //创建一个div 作为hoverCell的顶部左侧的圆点\n this.topDotForAddRow = document.createElement('div');\n this.topDotForAddRow.style.width = '6px';\n this.topDotForAddRow.style.height = '6px';\n this.topDotForAddRow.style.backgroundColor = '#4A90E2'; // 蓝色\n this.topDotForAddRow.style.position = 'absolute';\n this.topDotForAddRow.style.cursor = 'pointer';\n this.topDotForAddRow.style.zIndex = '1000';\n this.topDotForAddRow.style.borderRadius = '50%';\n this.topDotForAddRow.style.border = '1px solid white';\n this.topDotForAddRow.style.boxShadow = '0 1px 3px rgba(0,0,0,0.2)';\n document.body.appendChild(this.topDotForAddRow);\n\n //创建一个div 作为hoverCell的底部右侧的圆点\n this.bottomDotForAddRow = document.createElement('div');\n this.bottomDotForAddRow.style.width = '6px';\n this.bottomDotForAddRow.style.height = '6px';\n this.bottomDotForAddRow.style.backgroundColor = '#4A90E2'; // 蓝色\n this.bottomDotForAddRow.style.position = 'absolute';\n this.bottomDotForAddRow.style.cursor = 'pointer';\n this.bottomDotForAddRow.style.zIndex = '1000';\n this.bottomDotForAddRow.style.borderRadius = '50%';\n this.bottomDotForAddRow.style.border = '1px solid white';\n this.bottomDotForAddRow.style.boxShadow = '0 1px 3px rgba(0,0,0,0.2)';\n document.body.appendChild(this.bottomDotForAddRow);\n\n //创建+加号 当鼠标hover到圆点上时,显示+加号\n this.addIconForAddRow = document.createElement('div');\n this.addIconForAddRow.style.width = '18px';\n this.addIconForAddRow.style.height = '18px';\n this.addIconForAddRow.style.backgroundColor = '#4A90E2'; // 蓝色\n this.addIconForAddRow.style.position = 'absolute';\n this.addIconForAddRow.style.zIndex = '1001';\n this.addIconForAddRow.style.display = 'none';\n this.addIconForAddRow.style.borderRadius = '50%';\n this.addIconForAddRow.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)';\n this.addIconForAddRow.style.display = 'flex';\n this.addIconForAddRow.style.justifyContent = 'center';\n this.addIconForAddRow.style.alignItems = 'center';\n this.addIconForAddRow.style.border = '1px solid white';\n document.body.appendChild(this.addIconForAddRow);\n\n //addIcon中添加一个+号\n const addIconText = document.createElement('div');\n addIconText.textContent = '+';\n addIconText.style.color = 'white';\n addIconText.style.fontSize = '18px';\n addIconText.style.fontWeight = 'bold';\n addIconText.style.lineHeight = '15px';\n addIconText.style.userSelect = 'none';\n addIconText.style.cursor = 'pointer';\n addIconText.style.verticalAlign = 'top';\n addIconText.style.textAlign = 'center';\n\n this.addIconForAddRow.appendChild(addIconText);\n\n // 创建加号下面行间隔线\n this.addLineForAddRow = document.createElement('div');\n this.addLineForAddRow.style.width = '10px';\n this.addLineForAddRow.style.height = '2px';\n this.addLineForAddRow.style.backgroundColor = '#4A90E2'; // 蓝色\n this.addLineForAddRow.style.position = 'absolute';\n this.addLineForAddRow.style.zIndex = '1001';\n this.addLineForAddRow.style.display = 'none';\n document.body.appendChild(this.addLineForAddRow);\n }\n bindEventForAddRow() {\n this.topDotForAddRow.addEventListener('mouseenter', () => {\n clearTimeout(this.hideAllTimeoutId_addRow);\n this.addIconForAddRow.style.display = 'block';\n const dotWidth = this.topDotForAddRow.offsetWidth;\n const dotHeight = this.topDotForAddRow.offsetHeight;\n this.showAddIconForAddRow(\n this.topDotForAddRow.offsetLeft + dotWidth / 2,\n this.topDotForAddRow.offsetTop + dotHeight / 2,\n true\n );\n this.showSplitLineForAddRow(\n this.topDotForAddRow.offsetLeft + dotWidth + 2,\n this.topDotForAddRow.offsetTop + dotHeight / 2 - 1,\n this.table.getDrawRange().width\n );\n });\n\n this.bottomDotForAddRow.addEventListener('mouseenter', () => {\n clearTimeout(this.hideAllTimeoutId_addRow);\n this.addIconForAddRow.style.display = 'block';\n const dotWidth = this.bottomDotForAddRow.offsetWidth;\n const dotHeight = this.bottomDotForAddRow.offsetHeight;\n this.showAddIconForAddRow(\n this.bottomDotForAddRow.offsetLeft + dotWidth / 2,\n this.bottomDotForAddRow.offsetTop + dotHeight / 2,\n false\n );\n this.showSplitLineForAddRow(\n this.bottomDotForAddRow.offsetLeft + dotWidth + 2,\n this.bottomDotForAddRow.offsetTop + dotHeight / 2 - 1,\n this.table.getDrawRange().height\n );\n });\n\n this.addIconForAddRow.addEventListener('mouseleave', () => {\n this.addIconForAddRow.style.display = 'none';\n this.addLineForAddRow.style.display = 'none';\n this.delayHideAllForAddRow();\n });\n\n this.addIconForAddRow.addEventListener('click', (e: MouseEvent) => {\n const isTop = this.addIconForAddRow.dataset.addIconType === 'top';\n const row = this.hoverCell.row;\n const addRowIndex = isTop ? row : row + 1;\n if (this.pluginOptions.addRowCallback) {\n this.pluginOptions.addRowCallback(addRowIndex);\n } else {\n const recordIndex = this.table.getRecordIndexByCell(0, addRowIndex);\n this.table.addRecord({}, recordIndex);\n }\n this.delayHideAllForAddRow(0);\n });\n }\n showDotForAddRow(top: number, left: number, bottom: number, isShowTop: boolean = true, isShowBottom: boolean = true) {\n // 动态获取元素尺寸\n const dotWidth = this.topDotForAddRow.offsetWidth;\n const dotHeight = this.topDotForAddRow.offsetHeight;\n this.topDotForAddRow.style.left = `${left - dotWidth / 2}px`;\n this.topDotForAddRow.style.top = `${top - dotHeight / 2}px`;\n this.bottomDotForAddRow.style.left = `${left - dotWidth / 2}px`;\n this.bottomDotForAddRow.style.top = `${bottom - dotHeight / 2}px`;\n this.topDotForAddRow.style.display = isShowTop ? 'block' : 'none';\n this.bottomDotForAddRow.style.display = isShowBottom ? 'block' : 'none';\n }\n showAddIconForAddRow(left: number, top: number, isTop: boolean) {\n // 动态获取元素尺寸\n const iconWidth = this.addIconForAddRow.offsetWidth;\n const iconHeight = this.addIconForAddRow.offsetHeight;\n const dotWidth = this.topDotForAddRow.offsetWidth;\n this.addIconForAddRow.style.left = `${left - iconWidth / 2 - dotWidth / 2}px`;\n this.addIconForAddRow.style.top = `${top - iconHeight / 2}px`;\n if (isTop) {\n this.addIconForAddRow.dataset.addIconType = 'top';\n } else {\n this.addIconForAddRow.dataset.addIconType = 'bottom';\n }\n }\n showSplitLineForAddRow(left: number, top: number, width: number) {\n this.addLineForAddRow.style.left = `${left}px`;\n this.addLineForAddRow.style.top = `${top}px`;\n this.addLineForAddRow.style.width = `${width}px`;\n this.addLineForAddRow.style.display = 'block';\n }\n delayHideAllForAddRow(delay: number = 1000) {\n this.hideAllTimeoutId_addRow = setTimeout(() => {\n this.addIconForAddRow.style.display = 'none';\n this.addLineForAddRow.style.display = 'none';\n this.topDotForAddRow.style.display = 'none';\n this.bottomDotForAddRow.style.display = 'none';\n }, delay);\n }\n // #endregion\n release() {\n this.leftDotForAddColumn.remove();\n this.rightDotForAddColumn.remove();\n this.addIconForAddColumn.remove();\n this.addLineForAddColumn.remove();\n this.topDotForAddRow.remove();\n this.bottomDotForAddRow.remove();\n this.addIconForAddRow.remove();\n this.addLineForAddRow.remove();\n }\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as VTable from '@visactor/vtable';
|
|
2
|
+
export interface ColumnSeriesOptions {
|
|
3
|
+
columnCount: number;
|
|
4
|
+
generateColumnTitle?: (index: number) => string;
|
|
5
|
+
generateColumnField?: (index: number) => string;
|
|
6
|
+
autoExtendColumn?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare class ColumnSeriesPlugin implements VTable.plugins.IVTablePlugin {
|
|
9
|
+
id: string;
|
|
10
|
+
runTime: ("before_keydown" | "before_init")[];
|
|
11
|
+
pluginOptions: ColumnSeriesOptions;
|
|
12
|
+
table: VTable.ListTable;
|
|
13
|
+
columns: {
|
|
14
|
+
field?: string;
|
|
15
|
+
title: string;
|
|
16
|
+
}[];
|
|
17
|
+
constructor(pluginOptions: ColumnSeriesOptions);
|
|
18
|
+
run(...args: any[]): void;
|
|
19
|
+
generateColumns(columnCount: number): {
|
|
20
|
+
field?: string;
|
|
21
|
+
title: string;
|
|
22
|
+
}[];
|
|
23
|
+
generateColumn(index: number): {
|
|
24
|
+
field?: string;
|
|
25
|
+
title: string;
|
|
26
|
+
};
|
|
27
|
+
generateColumnField(index: number): string;
|
|
28
|
+
resetColumnCount(columnCount: number): void;
|
|
29
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
4
|
+
void 0 === k2 && (k2 = k);
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
|
|
7
|
+
enumerable: !0,
|
|
8
|
+
get: function() {
|
|
9
|
+
return m[k];
|
|
10
|
+
}
|
|
11
|
+
}), Object.defineProperty(o, k2, desc);
|
|
12
|
+
} : function(o, m, k, k2) {
|
|
13
|
+
void 0 === k2 && (k2 = k), o[k2] = m[k];
|
|
14
|
+
}), __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", {
|
|
16
|
+
enumerable: !0,
|
|
17
|
+
value: v
|
|
18
|
+
});
|
|
19
|
+
} : function(o, v) {
|
|
20
|
+
o.default = v;
|
|
21
|
+
}), __importStar = this && this.__importStar || function(mod) {
|
|
22
|
+
if (mod && mod.__esModule) return mod;
|
|
23
|
+
var result = {};
|
|
24
|
+
if (null != mod) for (var k in mod) "default" !== k && Object.prototype.hasOwnProperty.call(mod, k) && __createBinding(result, mod, k);
|
|
25
|
+
return __setModuleDefault(result, mod), result;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
Object.defineProperty(exports, "__esModule", {
|
|
29
|
+
value: !0
|
|
30
|
+
}), exports.ColumnSeriesPlugin = void 0;
|
|
31
|
+
|
|
32
|
+
const VTable = __importStar(require("@visactor/vtable"));
|
|
33
|
+
|
|
34
|
+
class ColumnSeriesPlugin {
|
|
35
|
+
constructor(pluginOptions) {
|
|
36
|
+
this.id = "column-series", this.runTime = [ VTable.TABLE_EVENT_TYPE.BEFORE_INIT, VTable.TABLE_EVENT_TYPE.BEFORE_KEYDOWN ],
|
|
37
|
+
this.columns = [], this.pluginOptions = Object.assign({
|
|
38
|
+
columnCount: 100,
|
|
39
|
+
autoExtendColumn: !0
|
|
40
|
+
}, pluginOptions);
|
|
41
|
+
}
|
|
42
|
+
run(...args) {
|
|
43
|
+
if (args[1] === VTable.TABLE_EVENT_TYPE.BEFORE_INIT) {
|
|
44
|
+
const eventArgs = args[0], table = args[2];
|
|
45
|
+
this.table = table;
|
|
46
|
+
const options = eventArgs.options;
|
|
47
|
+
this.columns = this.generateColumns(this.pluginOptions.columnCount), options.columns = this.columns;
|
|
48
|
+
} else if (args[1] === VTable.TABLE_EVENT_TYPE.BEFORE_KEYDOWN) {
|
|
49
|
+
"ArrowRight" === args[0].event.key && this.pluginOptions.autoExtendColumn && this.table.stateManager.select.cellPos.col === this.table.colCount - 1 && this.table.addColumn(this.generateColumn(this.table.colCount - 1));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
generateColumns(columnCount) {
|
|
53
|
+
const columnFields = [];
|
|
54
|
+
for (let i = 0; i < columnCount; i++) columnFields.push(this.generateColumn(i));
|
|
55
|
+
return columnFields;
|
|
56
|
+
}
|
|
57
|
+
generateColumn(index) {
|
|
58
|
+
return {
|
|
59
|
+
title: this.pluginOptions.generateColumnTitle ? this.pluginOptions.generateColumnTitle(index) : this.generateColumnField(index)
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
generateColumnField(index) {
|
|
63
|
+
if (index < 26) return String.fromCharCode(65 + index);
|
|
64
|
+
const title = [];
|
|
65
|
+
for (index++; index > 0; ) index--, title.unshift(String.fromCharCode(65 + index % 26)),
|
|
66
|
+
index = Math.floor(index / 26);
|
|
67
|
+
return title.join("");
|
|
68
|
+
}
|
|
69
|
+
resetColumnCount(columnCount) {
|
|
70
|
+
this.pluginOptions.columnCount = columnCount, this.columns = this.generateColumns(columnCount),
|
|
71
|
+
this.table.updateColumns(this.columns);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
exports.ColumnSeriesPlugin = ColumnSeriesPlugin;
|
|
76
|
+
//# sourceMappingURL=column-series.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["column-series.ts"],"names":[],"mappings":"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","file":"column-series.js","sourcesContent":["import * as VTable from '@visactor/vtable';\n/**\n * 添加行和列的插件的配置选项\n */\nexport interface ColumnSeriesOptions {\n columnCount: number;\n generateColumnTitle?: (index: number) => string;\n generateColumnField?: (index: number) => string;\n /**\n * 是否自动扩展列\n * @default true\n */\n autoExtendColumn?: boolean;\n}\n/**\n * 生成列序号标题的插件\n */\nexport class ColumnSeriesPlugin implements VTable.plugins.IVTablePlugin {\n id = 'column-series';\n runTime = [VTable.TABLE_EVENT_TYPE.BEFORE_INIT, VTable.TABLE_EVENT_TYPE.BEFORE_KEYDOWN];\n pluginOptions: ColumnSeriesOptions;\n table: VTable.ListTable;\n columns: { field?: string; title: string }[] = [];\n constructor(pluginOptions: ColumnSeriesOptions) {\n this.pluginOptions = Object.assign({ columnCount: 100, autoExtendColumn: true }, pluginOptions);\n }\n run(...args: any[]) {\n if (args[1] === VTable.TABLE_EVENT_TYPE.BEFORE_INIT) {\n const eventArgs = args[0];\n const table: VTable.BaseTableAPI = args[2];\n this.table = table as VTable.ListTable;\n const options = eventArgs.options;\n //根据pluginOptions的columnCount组织columns,column的title生成规则和excel一致,如A~Z,AA~AZ,AB~AZ,AA~ZZ,AAA~ZZZ\n this.columns = this.generateColumns(this.pluginOptions.columnCount);\n options.columns = this.columns;\n } else if (args[1] === VTable.TABLE_EVENT_TYPE.BEFORE_KEYDOWN) {\n const eventArgs = args[0];\n const e = eventArgs.event;\n if (e.key === 'ArrowRight') {\n if (\n this.pluginOptions.autoExtendColumn &&\n this.table.stateManager.select.cellPos.col === this.table.colCount - 1\n ) {\n this.table.addColumn(this.generateColumn(this.table.colCount - 1) as VTable.ColumnDefine);\n }\n }\n }\n }\n /**\n * 生成列字段和标题\n * 规则和excel一致,如A~Z,AA~AZ,AB~AZ,AA~ZZ,AAA~ZZZ\n * @param columnCount 列数\n * @returns 列字段和标题的数组\n */\n generateColumns(columnCount: number): { field?: string; title: string }[] {\n const columnFields = [];\n for (let i = 0; i < columnCount; i++) {\n columnFields.push(this.generateColumn(i));\n }\n return columnFields;\n }\n generateColumn(index: number): { field?: string; title: string } {\n const column = {\n // field: this.pluginOptions.generateColumnField\n // ? this.pluginOptions.generateColumnField(i)\n // : this.generateColumnField(i),\n title: this.pluginOptions.generateColumnTitle\n ? this.pluginOptions.generateColumnTitle(index)\n : this.generateColumnField(index)\n };\n return column;\n }\n /**\n * 生成excel的列标题,规则和excel一致,如A~Z,AA~AZ,AB~AZ,AA~ZZ,AAA~ZZZ\n * @param index 从0开始\n * @returns\n */\n generateColumnField(index: number): string {\n // 处理0-25的情况(A-Z)\n if (index < 26) {\n return String.fromCharCode(65 + index);\n }\n\n const title = [];\n index++; // 调整索引,使得第一个26变成AA\n\n while (index > 0) {\n index--; // 每次循环前减1,以正确处理进位\n title.unshift(String.fromCharCode(65 + (index % 26)));\n index = Math.floor(index / 26);\n }\n\n return title.join('');\n }\n\n resetColumnCount(columnCount: number) {\n this.pluginOptions.columnCount = columnCount;\n this.columns = this.generateColumns(columnCount);\n this.table.updateColumns(this.columns as VTable.ColumnsDefine);\n }\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as VTable from '@visactor/vtable';
|
|
2
|
+
import type { TableEvents } from '@visactor/vtable/src/core/TABLE_EVENT_TYPE';
|
|
3
|
+
import type { EventArg } from './types';
|
|
4
|
+
export type IExcelEditCellKeyboardPluginOptions = {};
|
|
5
|
+
export declare class ExcelEditCellKeyboardPlugin implements VTable.plugins.IVTablePlugin {
|
|
6
|
+
id: string;
|
|
7
|
+
runTime: "initialized"[];
|
|
8
|
+
table: VTable.ListTable;
|
|
9
|
+
pluginOptions: IExcelEditCellKeyboardPluginOptions;
|
|
10
|
+
constructor(pluginOptions?: IExcelEditCellKeyboardPluginOptions);
|
|
11
|
+
run(...args: [EventArg, TableEvents[keyof TableEvents] | TableEvents[keyof TableEvents][], VTable.BaseTableAPI]): void;
|
|
12
|
+
bindEvent(): void;
|
|
13
|
+
handleKeyDown(event: KeyboardEvent): void;
|
|
14
|
+
isExcelShortcutKey(event: KeyboardEvent): boolean;
|
|
15
|
+
release(): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
4
|
+
void 0 === k2 && (k2 = k);
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
|
|
7
|
+
enumerable: !0,
|
|
8
|
+
get: function() {
|
|
9
|
+
return m[k];
|
|
10
|
+
}
|
|
11
|
+
}), Object.defineProperty(o, k2, desc);
|
|
12
|
+
} : function(o, m, k, k2) {
|
|
13
|
+
void 0 === k2 && (k2 = k), o[k2] = m[k];
|
|
14
|
+
}), __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", {
|
|
16
|
+
enumerable: !0,
|
|
17
|
+
value: v
|
|
18
|
+
});
|
|
19
|
+
} : function(o, v) {
|
|
20
|
+
o.default = v;
|
|
21
|
+
}), __importStar = this && this.__importStar || function(mod) {
|
|
22
|
+
if (mod && mod.__esModule) return mod;
|
|
23
|
+
var result = {};
|
|
24
|
+
if (null != mod) for (var k in mod) "default" !== k && Object.prototype.hasOwnProperty.call(mod, k) && __createBinding(result, mod, k);
|
|
25
|
+
return __setModuleDefault(result, mod), result;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
Object.defineProperty(exports, "__esModule", {
|
|
29
|
+
value: !0
|
|
30
|
+
}), exports.ExcelEditCellKeyboardPlugin = void 0;
|
|
31
|
+
|
|
32
|
+
const VTable = __importStar(require("@visactor/vtable"));
|
|
33
|
+
|
|
34
|
+
class ExcelEditCellKeyboardPlugin {
|
|
35
|
+
constructor(pluginOptions) {
|
|
36
|
+
this.id = "excel-edit-cell-keyboard", this.runTime = [ VTable.TABLE_EVENT_TYPE.INITIALIZED ],
|
|
37
|
+
this.pluginOptions = pluginOptions, this.bindEvent();
|
|
38
|
+
}
|
|
39
|
+
run(...args) {
|
|
40
|
+
const table = args[2];
|
|
41
|
+
this.table = table;
|
|
42
|
+
}
|
|
43
|
+
bindEvent() {
|
|
44
|
+
document.addEventListener("keydown", this.handleKeyDown.bind(this), !0);
|
|
45
|
+
}
|
|
46
|
+
handleKeyDown(event) {
|
|
47
|
+
if (this.table.editorManager) if ("keydown" === this.table.editorManager.beginTriggerEditCellMode) {
|
|
48
|
+
if (this.table.editorManager.editingEditor && this.isExcelShortcutKey(event)) {
|
|
49
|
+
const {col: col, row: row} = this.table.editorManager.editCell;
|
|
50
|
+
this.table.editorManager.completeEdit(), this.table.getElement().focus(), event.shiftKey || event.ctrlKey || event.metaKey || ("Enter" === event.key ? this.table.selectCell(col, row + 1) : "Tab" === event.key ? this.table.selectCell(col + 1, row) : "ArrowLeft" === event.key ? this.table.selectCell(col - 1, row) : "ArrowRight" === event.key ? this.table.selectCell(col + 1, row) : "ArrowDown" === event.key ? this.table.selectCell(col, row + 1) : "ArrowUp" === event.key && this.table.selectCell(col, row - 1),
|
|
51
|
+
event.stopPropagation(), event.preventDefault());
|
|
52
|
+
}
|
|
53
|
+
} else {
|
|
54
|
+
const {col: col, row: row} = this.table.stateManager.select.cellPos;
|
|
55
|
+
if (!this.table.editorManager.editingEditor || "Enter" !== event.key && "Tab" !== event.key) {
|
|
56
|
+
if ("Delete" === event.key) {
|
|
57
|
+
const selectCells = this.table.getSelectedCellInfos();
|
|
58
|
+
(null == selectCells ? void 0 : selectCells.length) > 0 && deleteSelectRange(selectCells, this.table),
|
|
59
|
+
event.stopPropagation(), event.preventDefault();
|
|
60
|
+
}
|
|
61
|
+
} else this.table.editorManager.completeEdit(), this.table.getElement().focus(),
|
|
62
|
+
"Enter" === event.key ? this.table.selectCell(col, row + 1) : "Tab" === event.key && this.table.selectCell(col + 1, row),
|
|
63
|
+
event.stopPropagation(), event.preventDefault();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
isExcelShortcutKey(event) {
|
|
67
|
+
return "Enter" === event.key || "Tab" === event.key || "ArrowLeft" === event.key || "ArrowRight" === event.key || "ArrowDown" === event.key || "ArrowUp" === event.key;
|
|
68
|
+
}
|
|
69
|
+
release() {
|
|
70
|
+
document.removeEventListener("keydown", this.handleKeyDown, !0);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function deleteSelectRange(selectCells, tableInstance) {
|
|
75
|
+
for (let i = 0; i < selectCells.length; i++) for (let j = 0; j < selectCells[i].length; j++) tableInstance.changeCellValue(selectCells[i][j].col, selectCells[i][j].row, "");
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=excel-edit-cell-keyboard.js.map
|
|
79
|
+
exports.ExcelEditCellKeyboardPlugin = ExcelEditCellKeyboardPlugin;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["excel-edit-cell-keyboard.ts"],"names":[],"mappings":"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","file":"excel-edit-cell-keyboard.js","sourcesContent":["import type { CellRange } from '@visactor/vtable/es/ts-types';\nimport type { BaseTableAPI } from '@visactor/vtable/es/ts-types/base-table';\nimport * as VTable from '@visactor/vtable';\nimport type { TableEvents } from '@visactor/vtable/src/core/TABLE_EVENT_TYPE';\nimport type { EventArg } from './types';\n//备用 插件配置项 目前感觉都走默认逻辑就行\nexport type IExcelEditCellKeyboardPluginOptions = {\n // 是否响应删除\n // enableDeleteKey?: boolean;\n};\n\nexport class ExcelEditCellKeyboardPlugin implements VTable.plugins.IVTablePlugin {\n id = 'excel-edit-cell-keyboard';\n runTime = [VTable.TABLE_EVENT_TYPE.INITIALIZED];\n table: VTable.ListTable;\n pluginOptions: IExcelEditCellKeyboardPluginOptions;\n constructor(pluginOptions?: IExcelEditCellKeyboardPluginOptions) {\n this.pluginOptions = pluginOptions;\n\n this.bindEvent();\n }\n run(...args: [EventArg, TableEvents[keyof TableEvents] | TableEvents[keyof TableEvents][], VTable.BaseTableAPI]) {\n const table: VTable.BaseTableAPI = args[2];\n this.table = table as VTable.ListTable;\n }\n\n bindEvent() {\n //监听document全局的keydown事件 捕获阶段监听 可以及时阻止事件传播和默认行为\n document.addEventListener('keydown', this.handleKeyDown.bind(this), true);\n // this.table.on('selected_cell', () => {\n // this.updateHighlight();\n // });\n\n // this.table.on('selected_clear', () => {\n // this.clearHighlight();\n // });\n\n // this.table.on('mousemove_table', () => {\n // if (this.table.stateManager.select.selecting) {\n // this.updateHighlight();\n // }\n // });\n }\n handleKeyDown(event: KeyboardEvent) {\n if (this.table.editorManager) {\n //判断是键盘触发编辑单元格的情况下,那么在编辑状态中切换方向需要选中下一个继续编辑\n if (this.table.editorManager.beginTriggerEditCellMode === 'keydown') {\n if (this.table.editorManager.editingEditor && this.isExcelShortcutKey(event)) {\n const { col, row } = this.table.editorManager.editCell;\n this.table.editorManager.completeEdit();\n this.table.getElement().focus();\n if (!event.shiftKey && !event.ctrlKey && !event.metaKey) {\n //有这些配合键,则不进行选中下一个单元格的行为 执行vtable内部逻辑\n if (event.key === 'Enter') {\n this.table.selectCell(col, row + 1);\n } else if (event.key === 'Tab') {\n this.table.selectCell(col + 1, row);\n } else if (event.key === 'ArrowLeft') {\n this.table.selectCell(col - 1, row);\n } else if (event.key === 'ArrowRight') {\n this.table.selectCell(col + 1, row);\n } else if (event.key === 'ArrowDown') {\n this.table.selectCell(col, row + 1);\n } else if (event.key === 'ArrowUp') {\n this.table.selectCell(col, row - 1);\n }\n // 阻止事件传播和默认行为\n event.stopPropagation();\n event.preventDefault();\n }\n }\n } else {\n const { col, row } = this.table.stateManager.select.cellPos;\n if (this.table.editorManager.editingEditor && (event.key === 'Enter' || event.key === 'Tab')) {\n this.table.editorManager.completeEdit();\n this.table.getElement().focus();\n if (event.key === 'Enter') {\n this.table.selectCell(col, row + 1);\n } else if (event.key === 'Tab') {\n this.table.selectCell(col + 1, row);\n }\n // 阻止事件传播和默认行为\n event.stopPropagation();\n event.preventDefault();\n } else if (event.key === 'Delete') {\n //响应删除键,删除\n const selectCells = this.table.getSelectedCellInfos();\n if (selectCells?.length > 0) {\n // 如果选中的是范围,则删除范围内的所有单元格\n deleteSelectRange(selectCells, this.table);\n }\n // 阻止事件传播和默认行为\n event.stopPropagation();\n event.preventDefault();\n }\n }\n }\n }\n // 判断event的keyCode是否是excel的快捷键\n isExcelShortcutKey(event: KeyboardEvent) {\n return (\n event.key === 'Enter' ||\n event.key === 'Tab' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp'\n );\n }\n release() {\n document.removeEventListener('keydown', this.handleKeyDown, true);\n }\n}\n//将选中单元格的值设置为空\nfunction deleteSelectRange(selectCells: VTable.TYPES.CellInfo[][], tableInstance: VTable.ListTable) {\n for (let i = 0; i < selectCells.length; i++) {\n for (let j = 0; j < selectCells[i].length; j++) {\n tableInstance.changeCellValue(selectCells[i][j].col, selectCells[i][j].row, '');\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Group } from '@visactor/vtable/es/scenegraph/graphic/group';
|
|
2
|
+
import type { CellAddress, CellRange } from '@visactor/vtable/es/ts-types';
|
|
3
|
+
import type { BaseTableAPI } from '@visactor/vtable/es/ts-types/base-table';
|
|
4
|
+
import type * as VTable from '@visactor/vtable';
|
|
5
|
+
export interface FocusHighlightPluginOptions {
|
|
6
|
+
fill?: string;
|
|
7
|
+
opacity?: number;
|
|
8
|
+
highlightRange?: CellAddress | CellRange;
|
|
9
|
+
}
|
|
10
|
+
export declare class FocusHighlightPlugin implements VTable.plugins.IVTablePlugin {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
runTime: ("selected_cell" | "selected_clear" | "initialized")[];
|
|
14
|
+
table: BaseTableAPI;
|
|
15
|
+
range?: CellRange;
|
|
16
|
+
pluginOptions: FocusHighlightPluginOptions;
|
|
17
|
+
constructor(options?: FocusHighlightPluginOptions);
|
|
18
|
+
run(...args: any[]): void;
|
|
19
|
+
setFocusHighlightRange(range?: CellAddress | CellRange): void;
|
|
20
|
+
deleteAllCellGroupShadow(): void;
|
|
21
|
+
updateCellGroupShadow(): void;
|
|
22
|
+
updateCellGroupShadowInContainer(container: Group, range?: CellAddress | CellRange): void;
|
|
23
|
+
}
|