@fileverse-dev/fortune-react 1.1.40 → 1.1.42
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/es/components/SheetOverlay/InputBox.js +68 -6
- package/es/components/SheetOverlay/helper.d.ts +7 -0
- package/es/components/SheetOverlay/helper.js +77 -0
- package/lib/components/SheetOverlay/InputBox.js +68 -6
- package/lib/components/SheetOverlay/helper.d.ts +7 -0
- package/lib/components/SheetOverlay/helper.js +89 -0
- package/package.json +2 -2
|
@@ -16,6 +16,7 @@ import ContentEditable from "./ContentEditable";
|
|
|
16
16
|
import FormulaSearch from "./FormulaSearch";
|
|
17
17
|
import FormulaHint from "./FormulaHint";
|
|
18
18
|
import usePrevious from "../../hooks/usePrevious";
|
|
19
|
+
import { moveCursorToEnd, isLetterNumberPattern, removeLastSpan, incrementColumn, decrementColumn, incrementRow, decrementRow } from "./helper";
|
|
19
20
|
var InputBox = function InputBox() {
|
|
20
21
|
var _a, _b, _c, _d, _e, _f;
|
|
21
22
|
var _g = useContext(WorkbookContext),
|
|
@@ -32,16 +33,28 @@ var InputBox = function InputBox() {
|
|
|
32
33
|
var _j = useState(false),
|
|
33
34
|
isInputBoxActive = _j[0],
|
|
34
35
|
setIsInputBoxActive = _j[1];
|
|
35
|
-
var _k = useState(
|
|
36
|
+
var _k = useState(""),
|
|
37
|
+
activeCell = _k[0],
|
|
38
|
+
setActiveCell = _k[1];
|
|
39
|
+
var _l = useState(""),
|
|
40
|
+
activeRefCell = _l[0],
|
|
41
|
+
setActiveRefCell = _l[1];
|
|
42
|
+
var _m = useState({
|
|
36
43
|
left: 0,
|
|
37
44
|
top: 0
|
|
38
45
|
}),
|
|
39
|
-
frozenPosition =
|
|
40
|
-
setFrozenPosition =
|
|
46
|
+
frozenPosition = _m[0],
|
|
47
|
+
setFrozenPosition = _m[1];
|
|
41
48
|
var firstSelection = (_a = context.luckysheet_select_save) === null || _a === void 0 ? void 0 : _a[0];
|
|
42
49
|
var row_index = firstSelection === null || firstSelection === void 0 ? void 0 : firstSelection.row_focus;
|
|
43
50
|
var col_index = firstSelection === null || firstSelection === void 0 ? void 0 : firstSelection.column_focus;
|
|
44
51
|
var preText = useRef("");
|
|
52
|
+
var placeRef = useRef("");
|
|
53
|
+
useEffect(function () {
|
|
54
|
+
if (isInputBoxActive) {
|
|
55
|
+
setActiveCell(getCellAddress());
|
|
56
|
+
}
|
|
57
|
+
}, [isInputBoxActive]);
|
|
45
58
|
var inputBoxStyle = useMemo(function () {
|
|
46
59
|
if (firstSelection && context.luckysheetCellUpdate.length > 0) {
|
|
47
60
|
var flowdata = getFlowdata(context);
|
|
@@ -187,8 +200,49 @@ var InputBox = function InputBox() {
|
|
|
187
200
|
}
|
|
188
201
|
}, [getActiveFormula, insertSelectedFormula]);
|
|
189
202
|
var onKeyDown = useCallback(function (e) {
|
|
203
|
+
var _a, _b;
|
|
190
204
|
lastKeyDownEventRef.current = new KeyboardEvent(e.type, e.nativeEvent);
|
|
191
205
|
preText.current = inputRef.current.innerText;
|
|
206
|
+
var allowListNavigation = true;
|
|
207
|
+
if (e.key === "Delete" || e.key === "Backspace") {
|
|
208
|
+
setTimeout(function () {
|
|
209
|
+
moveCursorToEnd(inputRef === null || inputRef === void 0 ? void 0 : inputRef.current);
|
|
210
|
+
}, 5);
|
|
211
|
+
}
|
|
212
|
+
var refCell = placeRef.current;
|
|
213
|
+
if (e.key === "ArrowUp") {
|
|
214
|
+
refCell = decrementRow(placeRef.current);
|
|
215
|
+
} else if (e.key === "ArrowDown") {
|
|
216
|
+
refCell = incrementRow(placeRef.current);
|
|
217
|
+
} else if (e.key === "ArrowLeft") {
|
|
218
|
+
refCell = decrementColumn(placeRef.current);
|
|
219
|
+
} else if (e.key === "ArrowRight") {
|
|
220
|
+
refCell = incrementColumn(placeRef.current);
|
|
221
|
+
}
|
|
222
|
+
if (e.key === "ArrowUp" || e.key === "ArrowDown" || e.key === "ArrowLeft" || e.key === "ArrowRight") {
|
|
223
|
+
var parser = new DOMParser();
|
|
224
|
+
var doc = parser.parseFromString("<div>".concat((_a = inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) === null || _a === void 0 ? void 0 : _a.innerHTML, "</div>"), "text/html");
|
|
225
|
+
var spans = doc.querySelectorAll("span");
|
|
226
|
+
var lastSpan = spans[spans.length - 1];
|
|
227
|
+
var notFunctionInit = !((_b = document.getElementById("luckysheet-rich-text-editor")) === null || _b === void 0 ? void 0 : _b.innerText.includes("("));
|
|
228
|
+
var arrowRefNotAllowed = (lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText.includes(")")) || notFunctionInit && /^[a-zA-Z]+$/.test(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) && !_.includes(["="], lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText);
|
|
229
|
+
if (((lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) === "(" || (lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) === "," || (lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText.includes(":")) || (lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) !== ")") && !isLetterNumberPattern(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) && !arrowRefNotAllowed) {
|
|
230
|
+
allowListNavigation = false;
|
|
231
|
+
inputRef.current.innerHTML = "".concat(inputRef.current.innerHTML, "<span class=\"fortune-formula-functionrange-cell\" rangeindex=\"0\" dir=\"auto\" style=\"color:#c1232b;\">").concat(refCell, "</span>");
|
|
232
|
+
setTimeout(function () {
|
|
233
|
+
moveCursorToEnd(inputRef.current);
|
|
234
|
+
}, 1);
|
|
235
|
+
}
|
|
236
|
+
if (isLetterNumberPattern(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText)) {
|
|
237
|
+
allowListNavigation = false;
|
|
238
|
+
var htmlR = removeLastSpan(inputRef === null || inputRef === void 0 ? void 0 : inputRef.current.innerHTML);
|
|
239
|
+
inputRef.current.innerHTML = "".concat(htmlR, "<span class=\"fortune-formula-functionrange-cell\" rangeindex=\"0\" dir=\"auto\" style=\"color:#c1232b;\">").concat(refCell, "</span>");
|
|
240
|
+
moveCursorToEnd(inputRef.current);
|
|
241
|
+
setTimeout(function () {
|
|
242
|
+
moveCursorToEnd(inputRef.current);
|
|
243
|
+
}, 1);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
192
246
|
if (e.key === "Escape" && context.luckysheetCellUpdate.length > 0) {
|
|
193
247
|
setContext(function (draftCtx) {
|
|
194
248
|
cancelNormalSelected(draftCtx);
|
|
@@ -206,7 +260,7 @@ var InputBox = function InputBox() {
|
|
|
206
260
|
e.preventDefault();
|
|
207
261
|
} else if (e.key === "F4" && context.luckysheetCellUpdate.length > 0) {
|
|
208
262
|
e.preventDefault();
|
|
209
|
-
} else if (e.key === "ArrowUp" && context.luckysheetCellUpdate.length > 0) {
|
|
263
|
+
} else if (e.key === "ArrowUp" && context.luckysheetCellUpdate.length > 0 && allowListNavigation) {
|
|
210
264
|
if (document.getElementById("luckysheet-formula-search-c")) {
|
|
211
265
|
var formulaSearchContainer = document.getElementById("luckysheet-formula-search-c");
|
|
212
266
|
var activeItem = formulaSearchContainer === null || formulaSearchContainer === void 0 ? void 0 : formulaSearchContainer.querySelector(".luckysheet-formula-search-item-active");
|
|
@@ -225,7 +279,7 @@ var InputBox = function InputBox() {
|
|
|
225
279
|
}
|
|
226
280
|
}
|
|
227
281
|
e.preventDefault();
|
|
228
|
-
} else if (e.key === "ArrowDown" && context.luckysheetCellUpdate.length > 0) {
|
|
282
|
+
} else if (e.key === "ArrowDown" && context.luckysheetCellUpdate.length > 0 && allowListNavigation) {
|
|
229
283
|
if (document.getElementById("luckysheet-formula-search-c")) {
|
|
230
284
|
var formulaSearchContainer = document.getElementById("luckysheet-formula-search-c");
|
|
231
285
|
var activeItem = formulaSearchContainer === null || formulaSearchContainer === void 0 ? void 0 : formulaSearchContainer.querySelector(".luckysheet-formula-search-item-active");
|
|
@@ -340,6 +394,14 @@ var InputBox = function InputBox() {
|
|
|
340
394
|
var rowNumber = rowIndex + 1;
|
|
341
395
|
return "".concat(columnChar).concat(rowNumber);
|
|
342
396
|
}, [firstSelection]);
|
|
397
|
+
var wraperGetCell = function wraperGetCell() {
|
|
398
|
+
var cell = getCellAddress();
|
|
399
|
+
placeRef.current = cell;
|
|
400
|
+
if (activeRefCell !== cell) {
|
|
401
|
+
setActiveRefCell(cell);
|
|
402
|
+
}
|
|
403
|
+
return activeCell || cell;
|
|
404
|
+
};
|
|
343
405
|
return /*#__PURE__*/React.createElement("div", {
|
|
344
406
|
className: "luckysheet-input-box",
|
|
345
407
|
style: getInputBoxPosition(),
|
|
@@ -352,7 +414,7 @@ var InputBox = function InputBox() {
|
|
|
352
414
|
}, firstSelection && !((_f = context.rangeDialog) === null || _f === void 0 ? void 0 : _f.show) && (/*#__PURE__*/React.createElement("div", {
|
|
353
415
|
className: "luckysheet-cell-address-indicator",
|
|
354
416
|
style: getAddressIndicatorPosition()
|
|
355
|
-
},
|
|
417
|
+
}, wraperGetCell())), /*#__PURE__*/React.createElement("div", {
|
|
356
418
|
className: "luckysheet-input-box-inner",
|
|
357
419
|
style: firstSelection ? __assign({
|
|
358
420
|
minWidth: firstSelection.width,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function moveCursorToEnd(editableDiv: HTMLDivElement): void;
|
|
2
|
+
export declare function isLetterNumberPattern(str: string): boolean;
|
|
3
|
+
export declare function removeLastSpan(htmlString: string): string;
|
|
4
|
+
export declare function incrementColumn(cell: string): string;
|
|
5
|
+
export declare function decrementColumn(cell: string): string;
|
|
6
|
+
export declare function incrementRow(cell: string): string;
|
|
7
|
+
export declare function decrementRow(cell: string): string;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export function moveCursorToEnd(editableDiv) {
|
|
2
|
+
editableDiv.focus();
|
|
3
|
+
var range = document.createRange();
|
|
4
|
+
var selection = window.getSelection();
|
|
5
|
+
range.selectNodeContents(editableDiv);
|
|
6
|
+
range.collapse(false);
|
|
7
|
+
if (selection) {
|
|
8
|
+
selection.removeAllRanges();
|
|
9
|
+
selection.addRange(range);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function isLetterNumberPattern(str) {
|
|
13
|
+
var regex = /^[a-zA-Z]\d+$/;
|
|
14
|
+
return regex.test(str);
|
|
15
|
+
}
|
|
16
|
+
export function removeLastSpan(htmlString) {
|
|
17
|
+
var container = document.createElement("div");
|
|
18
|
+
container.innerHTML = htmlString;
|
|
19
|
+
var spans = container.querySelectorAll("span");
|
|
20
|
+
if (spans.length > 0) {
|
|
21
|
+
var lastSpan = spans[spans.length - 1];
|
|
22
|
+
lastSpan.remove();
|
|
23
|
+
}
|
|
24
|
+
return container.innerHTML;
|
|
25
|
+
}
|
|
26
|
+
function parseCell(input) {
|
|
27
|
+
var match = input.match(/^([A-Z]+)(\d+)$/i);
|
|
28
|
+
if (!match) return null;
|
|
29
|
+
return {
|
|
30
|
+
colPart: match[1].toUpperCase(),
|
|
31
|
+
rowPart: parseInt(match[2], 10)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function columnToNumber(colPart) {
|
|
35
|
+
var colNumber = 0;
|
|
36
|
+
for (var i = 0; i < colPart.length; i++) {
|
|
37
|
+
colNumber = colNumber * 26 + (colPart.charCodeAt(i) - 64);
|
|
38
|
+
}
|
|
39
|
+
return colNumber;
|
|
40
|
+
}
|
|
41
|
+
function numberToColumn(colNumber) {
|
|
42
|
+
var colPart = "";
|
|
43
|
+
while (colNumber > 0) {
|
|
44
|
+
colNumber--;
|
|
45
|
+
colPart = String.fromCharCode(65 + colNumber % 26) + colPart;
|
|
46
|
+
colNumber = Math.floor(colNumber / 26);
|
|
47
|
+
}
|
|
48
|
+
return colPart;
|
|
49
|
+
}
|
|
50
|
+
export function incrementColumn(cell) {
|
|
51
|
+
var parsed = parseCell(cell);
|
|
52
|
+
if (!parsed) return "";
|
|
53
|
+
var colNumber = columnToNumber(parsed.colPart);
|
|
54
|
+
colNumber += 1;
|
|
55
|
+
var newColPart = numberToColumn(colNumber);
|
|
56
|
+
return newColPart + parsed.rowPart;
|
|
57
|
+
}
|
|
58
|
+
export function decrementColumn(cell) {
|
|
59
|
+
var parsed = parseCell(cell);
|
|
60
|
+
if (!parsed) return "";
|
|
61
|
+
var colNumber = columnToNumber(parsed.colPart);
|
|
62
|
+
colNumber = Math.max(1, colNumber - 1);
|
|
63
|
+
var newColPart = numberToColumn(colNumber);
|
|
64
|
+
return newColPart + parsed.rowPart;
|
|
65
|
+
}
|
|
66
|
+
export function incrementRow(cell) {
|
|
67
|
+
var parsed = parseCell(cell);
|
|
68
|
+
if (!parsed) return "";
|
|
69
|
+
var newRowPart = parsed.rowPart + 1;
|
|
70
|
+
return parsed.colPart + newRowPart;
|
|
71
|
+
}
|
|
72
|
+
export function decrementRow(cell) {
|
|
73
|
+
var parsed = parseCell(cell);
|
|
74
|
+
if (!parsed) return "";
|
|
75
|
+
var newRowPart = Math.max(1, parsed.rowPart - 1);
|
|
76
|
+
return parsed.colPart + newRowPart;
|
|
77
|
+
}
|
|
@@ -13,6 +13,7 @@ var _ContentEditable = _interopRequireDefault(require("./ContentEditable"));
|
|
|
13
13
|
var _FormulaSearch = _interopRequireDefault(require("./FormulaSearch"));
|
|
14
14
|
var _FormulaHint = _interopRequireDefault(require("./FormulaHint"));
|
|
15
15
|
var _usePrevious = _interopRequireDefault(require("../../hooks/usePrevious"));
|
|
16
|
+
var _helper = require("./helper");
|
|
16
17
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
18
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
18
19
|
var __assign = void 0 && (void 0).__assign || function () {
|
|
@@ -41,16 +42,28 @@ var InputBox = function InputBox() {
|
|
|
41
42
|
var _j = (0, _react.useState)(false),
|
|
42
43
|
isInputBoxActive = _j[0],
|
|
43
44
|
setIsInputBoxActive = _j[1];
|
|
44
|
-
var _k = (0, _react.useState)(
|
|
45
|
+
var _k = (0, _react.useState)(""),
|
|
46
|
+
activeCell = _k[0],
|
|
47
|
+
setActiveCell = _k[1];
|
|
48
|
+
var _l = (0, _react.useState)(""),
|
|
49
|
+
activeRefCell = _l[0],
|
|
50
|
+
setActiveRefCell = _l[1];
|
|
51
|
+
var _m = (0, _react.useState)({
|
|
45
52
|
left: 0,
|
|
46
53
|
top: 0
|
|
47
54
|
}),
|
|
48
|
-
frozenPosition =
|
|
49
|
-
setFrozenPosition =
|
|
55
|
+
frozenPosition = _m[0],
|
|
56
|
+
setFrozenPosition = _m[1];
|
|
50
57
|
var firstSelection = (_a = context.luckysheet_select_save) === null || _a === void 0 ? void 0 : _a[0];
|
|
51
58
|
var row_index = firstSelection === null || firstSelection === void 0 ? void 0 : firstSelection.row_focus;
|
|
52
59
|
var col_index = firstSelection === null || firstSelection === void 0 ? void 0 : firstSelection.column_focus;
|
|
53
60
|
var preText = (0, _react.useRef)("");
|
|
61
|
+
var placeRef = (0, _react.useRef)("");
|
|
62
|
+
(0, _react.useEffect)(function () {
|
|
63
|
+
if (isInputBoxActive) {
|
|
64
|
+
setActiveCell(getCellAddress());
|
|
65
|
+
}
|
|
66
|
+
}, [isInputBoxActive]);
|
|
54
67
|
var inputBoxStyle = (0, _react.useMemo)(function () {
|
|
55
68
|
if (firstSelection && context.luckysheetCellUpdate.length > 0) {
|
|
56
69
|
var flowdata = (0, _fortuneCore.getFlowdata)(context);
|
|
@@ -196,8 +209,49 @@ var InputBox = function InputBox() {
|
|
|
196
209
|
}
|
|
197
210
|
}, [getActiveFormula, insertSelectedFormula]);
|
|
198
211
|
var onKeyDown = (0, _react.useCallback)(function (e) {
|
|
212
|
+
var _a, _b;
|
|
199
213
|
lastKeyDownEventRef.current = new KeyboardEvent(e.type, e.nativeEvent);
|
|
200
214
|
preText.current = inputRef.current.innerText;
|
|
215
|
+
var allowListNavigation = true;
|
|
216
|
+
if (e.key === "Delete" || e.key === "Backspace") {
|
|
217
|
+
setTimeout(function () {
|
|
218
|
+
(0, _helper.moveCursorToEnd)(inputRef === null || inputRef === void 0 ? void 0 : inputRef.current);
|
|
219
|
+
}, 5);
|
|
220
|
+
}
|
|
221
|
+
var refCell = placeRef.current;
|
|
222
|
+
if (e.key === "ArrowUp") {
|
|
223
|
+
refCell = (0, _helper.decrementRow)(placeRef.current);
|
|
224
|
+
} else if (e.key === "ArrowDown") {
|
|
225
|
+
refCell = (0, _helper.incrementRow)(placeRef.current);
|
|
226
|
+
} else if (e.key === "ArrowLeft") {
|
|
227
|
+
refCell = (0, _helper.decrementColumn)(placeRef.current);
|
|
228
|
+
} else if (e.key === "ArrowRight") {
|
|
229
|
+
refCell = (0, _helper.incrementColumn)(placeRef.current);
|
|
230
|
+
}
|
|
231
|
+
if (e.key === "ArrowUp" || e.key === "ArrowDown" || e.key === "ArrowLeft" || e.key === "ArrowRight") {
|
|
232
|
+
var parser = new DOMParser();
|
|
233
|
+
var doc = parser.parseFromString("<div>".concat((_a = inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) === null || _a === void 0 ? void 0 : _a.innerHTML, "</div>"), "text/html");
|
|
234
|
+
var spans = doc.querySelectorAll("span");
|
|
235
|
+
var lastSpan = spans[spans.length - 1];
|
|
236
|
+
var notFunctionInit = !((_b = document.getElementById("luckysheet-rich-text-editor")) === null || _b === void 0 ? void 0 : _b.innerText.includes("("));
|
|
237
|
+
var arrowRefNotAllowed = (lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText.includes(")")) || notFunctionInit && /^[a-zA-Z]+$/.test(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) && !_lodash.default.includes(["="], lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText);
|
|
238
|
+
if (((lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) === "(" || (lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) === "," || (lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText.includes(":")) || (lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) !== ")") && !(0, _helper.isLetterNumberPattern)(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) && !arrowRefNotAllowed) {
|
|
239
|
+
allowListNavigation = false;
|
|
240
|
+
inputRef.current.innerHTML = "".concat(inputRef.current.innerHTML, "<span class=\"fortune-formula-functionrange-cell\" rangeindex=\"0\" dir=\"auto\" style=\"color:#c1232b;\">").concat(refCell, "</span>");
|
|
241
|
+
setTimeout(function () {
|
|
242
|
+
(0, _helper.moveCursorToEnd)(inputRef.current);
|
|
243
|
+
}, 1);
|
|
244
|
+
}
|
|
245
|
+
if ((0, _helper.isLetterNumberPattern)(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText)) {
|
|
246
|
+
allowListNavigation = false;
|
|
247
|
+
var htmlR = (0, _helper.removeLastSpan)(inputRef === null || inputRef === void 0 ? void 0 : inputRef.current.innerHTML);
|
|
248
|
+
inputRef.current.innerHTML = "".concat(htmlR, "<span class=\"fortune-formula-functionrange-cell\" rangeindex=\"0\" dir=\"auto\" style=\"color:#c1232b;\">").concat(refCell, "</span>");
|
|
249
|
+
(0, _helper.moveCursorToEnd)(inputRef.current);
|
|
250
|
+
setTimeout(function () {
|
|
251
|
+
(0, _helper.moveCursorToEnd)(inputRef.current);
|
|
252
|
+
}, 1);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
201
255
|
if (e.key === "Escape" && context.luckysheetCellUpdate.length > 0) {
|
|
202
256
|
setContext(function (draftCtx) {
|
|
203
257
|
(0, _fortuneCore.cancelNormalSelected)(draftCtx);
|
|
@@ -215,7 +269,7 @@ var InputBox = function InputBox() {
|
|
|
215
269
|
e.preventDefault();
|
|
216
270
|
} else if (e.key === "F4" && context.luckysheetCellUpdate.length > 0) {
|
|
217
271
|
e.preventDefault();
|
|
218
|
-
} else if (e.key === "ArrowUp" && context.luckysheetCellUpdate.length > 0) {
|
|
272
|
+
} else if (e.key === "ArrowUp" && context.luckysheetCellUpdate.length > 0 && allowListNavigation) {
|
|
219
273
|
if (document.getElementById("luckysheet-formula-search-c")) {
|
|
220
274
|
var formulaSearchContainer = document.getElementById("luckysheet-formula-search-c");
|
|
221
275
|
var activeItem = formulaSearchContainer === null || formulaSearchContainer === void 0 ? void 0 : formulaSearchContainer.querySelector(".luckysheet-formula-search-item-active");
|
|
@@ -234,7 +288,7 @@ var InputBox = function InputBox() {
|
|
|
234
288
|
}
|
|
235
289
|
}
|
|
236
290
|
e.preventDefault();
|
|
237
|
-
} else if (e.key === "ArrowDown" && context.luckysheetCellUpdate.length > 0) {
|
|
291
|
+
} else if (e.key === "ArrowDown" && context.luckysheetCellUpdate.length > 0 && allowListNavigation) {
|
|
238
292
|
if (document.getElementById("luckysheet-formula-search-c")) {
|
|
239
293
|
var formulaSearchContainer = document.getElementById("luckysheet-formula-search-c");
|
|
240
294
|
var activeItem = formulaSearchContainer === null || formulaSearchContainer === void 0 ? void 0 : formulaSearchContainer.querySelector(".luckysheet-formula-search-item-active");
|
|
@@ -349,6 +403,14 @@ var InputBox = function InputBox() {
|
|
|
349
403
|
var rowNumber = rowIndex + 1;
|
|
350
404
|
return "".concat(columnChar).concat(rowNumber);
|
|
351
405
|
}, [firstSelection]);
|
|
406
|
+
var wraperGetCell = function wraperGetCell() {
|
|
407
|
+
var cell = getCellAddress();
|
|
408
|
+
placeRef.current = cell;
|
|
409
|
+
if (activeRefCell !== cell) {
|
|
410
|
+
setActiveRefCell(cell);
|
|
411
|
+
}
|
|
412
|
+
return activeCell || cell;
|
|
413
|
+
};
|
|
352
414
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
353
415
|
className: "luckysheet-input-box",
|
|
354
416
|
style: getInputBoxPosition(),
|
|
@@ -361,7 +423,7 @@ var InputBox = function InputBox() {
|
|
|
361
423
|
}, firstSelection && !((_f = context.rangeDialog) === null || _f === void 0 ? void 0 : _f.show) && (/*#__PURE__*/_react.default.createElement("div", {
|
|
362
424
|
className: "luckysheet-cell-address-indicator",
|
|
363
425
|
style: getAddressIndicatorPosition()
|
|
364
|
-
},
|
|
426
|
+
}, wraperGetCell())), /*#__PURE__*/_react.default.createElement("div", {
|
|
365
427
|
className: "luckysheet-input-box-inner",
|
|
366
428
|
style: firstSelection ? __assign({
|
|
367
429
|
minWidth: firstSelection.width,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function moveCursorToEnd(editableDiv: HTMLDivElement): void;
|
|
2
|
+
export declare function isLetterNumberPattern(str: string): boolean;
|
|
3
|
+
export declare function removeLastSpan(htmlString: string): string;
|
|
4
|
+
export declare function incrementColumn(cell: string): string;
|
|
5
|
+
export declare function decrementColumn(cell: string): string;
|
|
6
|
+
export declare function incrementRow(cell: string): string;
|
|
7
|
+
export declare function decrementRow(cell: string): string;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.decrementColumn = decrementColumn;
|
|
7
|
+
exports.decrementRow = decrementRow;
|
|
8
|
+
exports.incrementColumn = incrementColumn;
|
|
9
|
+
exports.incrementRow = incrementRow;
|
|
10
|
+
exports.isLetterNumberPattern = isLetterNumberPattern;
|
|
11
|
+
exports.moveCursorToEnd = moveCursorToEnd;
|
|
12
|
+
exports.removeLastSpan = removeLastSpan;
|
|
13
|
+
function moveCursorToEnd(editableDiv) {
|
|
14
|
+
editableDiv.focus();
|
|
15
|
+
var range = document.createRange();
|
|
16
|
+
var selection = window.getSelection();
|
|
17
|
+
range.selectNodeContents(editableDiv);
|
|
18
|
+
range.collapse(false);
|
|
19
|
+
if (selection) {
|
|
20
|
+
selection.removeAllRanges();
|
|
21
|
+
selection.addRange(range);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function isLetterNumberPattern(str) {
|
|
25
|
+
var regex = /^[a-zA-Z]\d+$/;
|
|
26
|
+
return regex.test(str);
|
|
27
|
+
}
|
|
28
|
+
function removeLastSpan(htmlString) {
|
|
29
|
+
var container = document.createElement("div");
|
|
30
|
+
container.innerHTML = htmlString;
|
|
31
|
+
var spans = container.querySelectorAll("span");
|
|
32
|
+
if (spans.length > 0) {
|
|
33
|
+
var lastSpan = spans[spans.length - 1];
|
|
34
|
+
lastSpan.remove();
|
|
35
|
+
}
|
|
36
|
+
return container.innerHTML;
|
|
37
|
+
}
|
|
38
|
+
function parseCell(input) {
|
|
39
|
+
var match = input.match(/^([A-Z]+)(\d+)$/i);
|
|
40
|
+
if (!match) return null;
|
|
41
|
+
return {
|
|
42
|
+
colPart: match[1].toUpperCase(),
|
|
43
|
+
rowPart: parseInt(match[2], 10)
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function columnToNumber(colPart) {
|
|
47
|
+
var colNumber = 0;
|
|
48
|
+
for (var i = 0; i < colPart.length; i++) {
|
|
49
|
+
colNumber = colNumber * 26 + (colPart.charCodeAt(i) - 64);
|
|
50
|
+
}
|
|
51
|
+
return colNumber;
|
|
52
|
+
}
|
|
53
|
+
function numberToColumn(colNumber) {
|
|
54
|
+
var colPart = "";
|
|
55
|
+
while (colNumber > 0) {
|
|
56
|
+
colNumber--;
|
|
57
|
+
colPart = String.fromCharCode(65 + colNumber % 26) + colPart;
|
|
58
|
+
colNumber = Math.floor(colNumber / 26);
|
|
59
|
+
}
|
|
60
|
+
return colPart;
|
|
61
|
+
}
|
|
62
|
+
function incrementColumn(cell) {
|
|
63
|
+
var parsed = parseCell(cell);
|
|
64
|
+
if (!parsed) return "";
|
|
65
|
+
var colNumber = columnToNumber(parsed.colPart);
|
|
66
|
+
colNumber += 1;
|
|
67
|
+
var newColPart = numberToColumn(colNumber);
|
|
68
|
+
return newColPart + parsed.rowPart;
|
|
69
|
+
}
|
|
70
|
+
function decrementColumn(cell) {
|
|
71
|
+
var parsed = parseCell(cell);
|
|
72
|
+
if (!parsed) return "";
|
|
73
|
+
var colNumber = columnToNumber(parsed.colPart);
|
|
74
|
+
colNumber = Math.max(1, colNumber - 1);
|
|
75
|
+
var newColPart = numberToColumn(colNumber);
|
|
76
|
+
return newColPart + parsed.rowPart;
|
|
77
|
+
}
|
|
78
|
+
function incrementRow(cell) {
|
|
79
|
+
var parsed = parseCell(cell);
|
|
80
|
+
if (!parsed) return "";
|
|
81
|
+
var newRowPart = parsed.rowPart + 1;
|
|
82
|
+
return parsed.colPart + newRowPart;
|
|
83
|
+
}
|
|
84
|
+
function decrementRow(cell) {
|
|
85
|
+
var parsed = parseCell(cell);
|
|
86
|
+
if (!parsed) return "";
|
|
87
|
+
var newRowPart = Math.max(1, parsed.rowPart - 1);
|
|
88
|
+
return parsed.colPart + newRowPart;
|
|
89
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fileverse-dev/fortune-react",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.42",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"types": "lib/index.d.ts",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"tsc": "tsc"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@fileverse-dev/fortune-core": "1.1.
|
|
19
|
+
"@fileverse-dev/fortune-core": "1.1.42",
|
|
20
20
|
"@fileverse/ui": "^4.1.7-patch-21",
|
|
21
21
|
"@tippyjs/react": "^4.2.6",
|
|
22
22
|
"@types/regenerator-runtime": "^0.13.6",
|