@fileverse-dev/fortune-core 1.3.11-input-ref → 1.3.11-input-ref-2

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.
@@ -196,6 +196,7 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
196
196
  ctx.luckysheet_scroll_status = true;
197
197
  if (ctx.luckysheetCellUpdate.length > 0) {
198
198
  if (ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start || (0, _modules.israngeseleciton)(ctx)) {
199
+ var formulaEditorForCmdComma = (0, _modules.getFormulaEditorOwner)(ctx) === "fx" && fxInput ? fxInput : cellInput;
199
200
  var rowseleted = [row_index, row_index_ed];
200
201
  var columnseleted = [col_index, col_index_ed];
201
202
  var left = col_pre;
@@ -262,13 +263,14 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
262
263
  last.top_move = top_1;
263
264
  last.height_move = height;
264
265
  ctx.formulaCache.func_selectedrange = last;
265
- } else if (e.ctrlKey && ((_g = _lodash.default.last(cellInput.querySelectorAll("span"))) === null || _g === void 0 ? void 0 : _g.innerText) !== ",") {
266
- var vText = cellInput.innerText;
266
+ } else if ((e.ctrlKey || e.metaKey) && ((_g = _lodash.default.last(formulaEditorForCmdComma.querySelectorAll("span"))) === null || _g === void 0 ? void 0 : _g.innerText) !== ",") {
267
+ var didCmdCommaFormulaHtml = false;
268
+ var vText = formulaEditorForCmdComma.innerText;
267
269
  if (vText[vText.length - 1] === ")") {
268
270
  vText = vText.substring(0, vText.length - 1);
269
271
  }
270
272
  if (vText.length > 0) {
271
- var lastWord = vText.substring(vText.length - 1, 1);
273
+ var lastWord = vText.slice(-1);
272
274
  if (lastWord !== "," && lastWord !== "=" && lastWord !== "(") {
273
275
  vText += ",";
274
276
  }
@@ -284,15 +286,21 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
284
286
  ctx.formulaCache.functionRangeIndex = textRange;
285
287
  }
286
288
  cellInput.innerHTML = vText;
289
+ if (fxInput) fxInput.innerHTML = vText;
287
290
  (0, _cell.cancelFunctionrangeSelected)(ctx);
288
291
  (0, _modules.createRangeHightlight)(ctx, vText);
292
+ didCmdCommaFormulaHtml = true;
289
293
  }
290
294
  ctx.formulaCache.rangestart = false;
291
295
  ctx.formulaCache.rangedrag_column_start = false;
292
296
  ctx.formulaCache.rangedrag_row_start = false;
293
- if (fxInput) fxInput.innerHTML = vText;
294
- (0, _modules.rangeHightlightselected)(ctx, cellInput);
297
+ (0, _modules.rangeHightlightselected)(ctx, formulaEditorForCmdComma);
295
298
  (0, _modules.israngeseleciton)(ctx);
299
+ if (didCmdCommaFormulaHtml) {
300
+ ctx.formulaCache.rangechangeindex = undefined;
301
+ var ch = formulaEditorForCmdComma.childNodes;
302
+ ctx.formulaCache.rangeSetValueTo = ch.length > 0 ? ch[ch.length - 1] : undefined;
303
+ }
296
304
  ctx.formulaCache.func_selectedrange = {
297
305
  left: left,
298
306
  width: width,
@@ -326,6 +334,7 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
326
334
  ctx.formulaCache.rangestart = true;
327
335
  ctx.formulaCache.rangedrag_column_start = false;
328
336
  ctx.formulaCache.rangedrag_row_start = false;
337
+ ctx.formulaCache.rangeSelectionActive = true;
329
338
  (0, _modules.rangeSetValue)(ctx, cellInput, {
330
339
  row: rowseleted,
331
340
  column: columnseleted
@@ -504,6 +513,8 @@ function handleCellAreaDoubleClick(ctx, globalCache, settings, e, container) {
504
513
  row_index = row_focus;
505
514
  col_index = column_focus;
506
515
  }
516
+ globalCache.enteredEditByTyping = false;
517
+ delete globalCache.pendingTypeOverCell;
507
518
  (0, _cell.luckysheetUpdateCell)(ctx, row_index, col_index);
508
519
  }
509
520
  function handleContextMenu(ctx, settings, e, workbookContainer, container, area) {
@@ -971,7 +982,7 @@ function handleOverlayMouseMove(ctx, globalCache, e, cellInput, scrollX, scrollY
971
982
  }
972
983
  }
973
984
  function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollbarY, container, cellInput, fxInput) {
974
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
985
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
975
986
  var rect = container.getBoundingClientRect();
976
987
  (0, _modules.onImageMoveEnd)(ctx, globalCache);
977
988
  (0, _modules.onImageResizeEnd)(ctx, globalCache);
@@ -984,11 +995,17 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
984
995
  (0, _hyperlink.onRangeSelectionModalMoveEnd)(globalCache);
985
996
  (0, _modules.onCellsMoveEnd)(ctx, globalCache, e, scrollbarX, scrollbarY, container);
986
997
  if (ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start) {
987
- if (((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.id) === "luckysheet-functionbox-cell") {
998
+ if ((0, _modules.getFormulaEditorOwner)(ctx) === "fx") {
988
999
  (0, _formula.handleFormulaInput)(ctx, cellInput, fxInput, 0, undefined, false);
989
1000
  } else {
990
1001
  (0, _formula.handleFormulaInput)(ctx, fxInput, cellInput, 0, undefined, false);
991
1002
  }
1003
+ ctx.luckysheet_select_status = false;
1004
+ ctx.luckysheet_scroll_status = false;
1005
+ ctx.luckysheet_rows_selected_status = false;
1006
+ ctx.luckysheet_cols_selected_status = false;
1007
+ e.preventDefault();
1008
+ return;
992
1009
  }
993
1010
  if (ctx.luckysheet_select_status) {
994
1011
  if (ctx.luckysheetPaintModelOn) {
@@ -1030,10 +1047,10 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
1030
1047
  cfg_1.customHeight[ctx.luckysheet_rows_change_size_start[1]] = 1;
1031
1048
  var changeRowIndex_1 = ctx.luckysheet_rows_change_size_start[1];
1032
1049
  var changeRowSelected_1 = false;
1033
- if (((_c = (_b = ctx.luckysheet_select_save) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) > 0) {
1034
- (_e = (_d = ctx.luckysheet_select_save) === null || _d === void 0 ? void 0 : _d.filter(function (select) {
1050
+ if (((_b = (_a = ctx.luckysheet_select_save) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0) {
1051
+ (_d = (_c = ctx.luckysheet_select_save) === null || _c === void 0 ? void 0 : _c.filter(function (select) {
1035
1052
  return select.row_select;
1036
- })) === null || _e === void 0 ? void 0 : _e.some(function (select) {
1053
+ })) === null || _d === void 0 ? void 0 : _d.some(function (select) {
1037
1054
  if (changeRowIndex_1 >= select.row[0] && changeRowIndex_1 <= select.row[1]) {
1038
1055
  changeRowSelected_1 = true;
1039
1056
  }
@@ -1042,9 +1059,9 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
1042
1059
  }
1043
1060
  if (changeRowSelected_1) {
1044
1061
  cfg_1.rowlen || (cfg_1.rowlen = {});
1045
- (_g = (_f = ctx.luckysheet_select_save) === null || _f === void 0 ? void 0 : _f.filter(function (select) {
1062
+ (_f = (_e = ctx.luckysheet_select_save) === null || _e === void 0 ? void 0 : _e.filter(function (select) {
1046
1063
  return select.row_select;
1047
- })) === null || _g === void 0 ? void 0 : _g.forEach(function (select) {
1064
+ })) === null || _f === void 0 ? void 0 : _f.forEach(function (select) {
1048
1065
  for (var r = select.row[0]; r <= select.row[1]; r += 1) {
1049
1066
  cfg_1.rowlen[r] = Math.ceil(size_1 / ctx.zoomRatio);
1050
1067
  }
@@ -1088,10 +1105,10 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
1088
1105
  cfg_2.customWidth[ctx.luckysheet_cols_change_size_start[1]] = 1;
1089
1106
  var changeColumnIndex_1 = ctx.luckysheet_cols_change_size_start[1];
1090
1107
  var changeColumnSelected_1 = false;
1091
- if (((_j = (_h = ctx.luckysheet_select_save) === null || _h === void 0 ? void 0 : _h.length) !== null && _j !== void 0 ? _j : 0) > 0) {
1092
- (_l = (_k = ctx.luckysheet_select_save) === null || _k === void 0 ? void 0 : _k.filter(function (select) {
1108
+ if (((_h = (_g = ctx.luckysheet_select_save) === null || _g === void 0 ? void 0 : _g.length) !== null && _h !== void 0 ? _h : 0) > 0) {
1109
+ (_k = (_j = ctx.luckysheet_select_save) === null || _j === void 0 ? void 0 : _j.filter(function (select) {
1093
1110
  return select.column_select;
1094
- })) === null || _l === void 0 ? void 0 : _l.some(function (select) {
1111
+ })) === null || _k === void 0 ? void 0 : _k.some(function (select) {
1095
1112
  if (changeColumnIndex_1 >= select.column[0] && changeColumnIndex_1 <= select.column[1]) {
1096
1113
  changeColumnSelected_1 = true;
1097
1114
  }
@@ -1100,9 +1117,9 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
1100
1117
  }
1101
1118
  if (changeColumnSelected_1) {
1102
1119
  cfg_2.columnlen || (cfg_2.columnlen = {});
1103
- (_o = (_m = ctx.luckysheet_select_save) === null || _m === void 0 ? void 0 : _m.filter(function (select) {
1120
+ (_m = (_l = ctx.luckysheet_select_save) === null || _l === void 0 ? void 0 : _l.filter(function (select) {
1104
1121
  return select.column_select;
1105
- })) === null || _o === void 0 ? void 0 : _o.forEach(function (select) {
1122
+ })) === null || _m === void 0 ? void 0 : _m.forEach(function (select) {
1106
1123
  for (var r = select.column[0]; r <= select.column[1]; r += 1) {
1107
1124
  cfg_2.columnlen[r] = Math.ceil(size_2 / ctx.zoomRatio);
1108
1125
  }
@@ -1119,10 +1136,10 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
1119
1136
  ctx.luckysheet_cols_freeze_drag = false;
1120
1137
  var scrollLeft = ctx.scrollLeft;
1121
1138
  var x = e.pageX - rect.left - ctx.rowHeaderWidth + scrollLeft - window.scrollX;
1122
- var _p = (0, _location.colLocation)(x, ctx.visibledatacolumn),
1123
- col_pre = _p[0],
1124
- col_curr = _p[1],
1125
- col_index_curr = _p[2];
1139
+ var _o = (0, _location.colLocation)(x, ctx.visibledatacolumn),
1140
+ col_pre = _o[0],
1141
+ col_curr = _o[1],
1142
+ col_index_curr = _o[2];
1126
1143
  var col_index = x > (col_curr + col_pre) / 2 ? col_index_curr : col_index_curr - 1;
1127
1144
  var idx = (0, _utils.getSheetIndex)(ctx, ctx.currentSheetId);
1128
1145
  if (idx == null) return;
@@ -1170,10 +1187,10 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
1170
1187
  ctx.luckysheet_rows_freeze_drag = false;
1171
1188
  var scrollTop = ctx.scrollTop;
1172
1189
  var y = e.pageY - rect.top - ctx.columnHeaderHeight + scrollTop - window.scrollY;
1173
- var _q = (0, _location.rowLocation)(y, ctx.visibledatarow),
1174
- row_pre = _q[0],
1175
- row_curr = _q[1],
1176
- row_index_curr = _q[2];
1190
+ var _p = (0, _location.rowLocation)(y, ctx.visibledatarow),
1191
+ row_pre = _p[0],
1192
+ row_curr = _p[1],
1193
+ row_index_curr = _p[2];
1177
1194
  var row_index = y > (row_curr + row_pre) / 2 ? row_index_curr : row_index_curr - 1;
1178
1195
  var idx = (0, _utils.getSheetIndex)(ctx, ctx.currentSheetId);
1179
1196
  if (idx == null) return;
@@ -1357,6 +1374,7 @@ function handleRowHeaderMouseDown(ctx, globalCache, e, container, cellInput, fxI
1357
1374
  ctx.formulaCache.rangedrag_row_start = true;
1358
1375
  ctx.formulaCache.rangestart = false;
1359
1376
  ctx.formulaCache.rangedrag_column_start = false;
1377
+ ctx.formulaCache.rangeSelectionActive = true;
1360
1378
  ctx.formulaCache.selectingRangeIndex = ctx.formulaCache.rangechangeindex;
1361
1379
  if (ctx.formulaCache.rangechangeindex > ctx.formulaRangeHighlight.length) {
1362
1380
  (0, _modules.createRangeHightlight)(ctx, cellInput.innerHTML, ctx.formulaCache.rangechangeindex);
@@ -1589,6 +1607,7 @@ function handleColumnHeaderMouseDown(ctx, globalCache, e, container, cellInput,
1589
1607
  ctx.formulaCache.rangedrag_column_start = true;
1590
1608
  ctx.formulaCache.rangestart = false;
1591
1609
  ctx.formulaCache.rangedrag_row_start = false;
1610
+ ctx.formulaCache.rangeSelectionActive = true;
1592
1611
  ctx.formulaCache.selectingRangeIndex = ctx.formulaCache.rangechangeindex;
1593
1612
  if (ctx.formulaCache.rangechangeindex > ctx.formulaRangeHighlight.length) {
1594
1613
  (0, _modules.createRangeHightlight)(ctx, cellInput.innerHTML, ctx.formulaCache.rangechangeindex);
@@ -102,6 +102,32 @@ function newlinesToBr(text) {
102
102
  if (!text) return "";
103
103
  return text.replace(/\r\n|\r|\n/g, "<br />");
104
104
  }
105
+ function closeUnclosedParenthesesInFormula(formula) {
106
+ if (!formula.startsWith("=") || formula.length <= 1) return formula;
107
+ var body = formula.slice(1);
108
+ var depth = 0;
109
+ var inString = false;
110
+ for (var i = 0; i < body.length; i += 1) {
111
+ var ch = body[i];
112
+ if (inString) {
113
+ if (ch === '"') {
114
+ if (body[i + 1] === '"') {
115
+ i += 1;
116
+ } else {
117
+ inString = false;
118
+ }
119
+ }
120
+ continue;
121
+ }
122
+ if (ch === '"') {
123
+ inString = true;
124
+ continue;
125
+ }
126
+ if (ch === "(") depth += 1;else if (ch === ")") depth = Math.max(0, depth - 1);
127
+ }
128
+ if (depth <= 0) return formula;
129
+ return "".concat(formula).concat(")".repeat(depth));
130
+ }
105
131
  function getCellValue(r, c, data, attr) {
106
132
  var _a;
107
133
  if (!attr) {
@@ -575,6 +601,7 @@ function cancelNormalSelected(ctx) {
575
601
  ctx.formulaCache.rangedrag_column_start = false;
576
602
  ctx.formulaCache.rangedrag_row_start = false;
577
603
  ctx.formulaCache.rangeSelectionActive = null;
604
+ ctx.formulaCache.formulaEditorOwner = null;
578
605
  }
579
606
  function updateCell(ctx, r, c, $input, value, canvas) {
580
607
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
@@ -650,6 +677,11 @@ function updateCell(ctx, r, c, $input, value, canvas) {
650
677
  }
651
678
  }
652
679
  value = value || inputText;
680
+ if (_lodash.default.isString(value) && value.startsWith("=") && value.length > 1) {
681
+ value = closeUnclosedParenthesesInFormula(value);
682
+ } else if (_lodash.default.isPlainObject(value) && _lodash.default.isString(value.f) && value.f.startsWith("=") && value.f.length > 1) {
683
+ value.f = closeUnclosedParenthesesInFormula(value.f);
684
+ }
653
685
  var shouldClearError = (oldValue_1 === null || oldValue_1 === void 0 ? void 0 : oldValue_1.f) ? oldValue_1.f !== value : (oldValue_1 === null || oldValue_1 === void 0 ? void 0 : oldValue_1.v) !== value;
654
686
  if (shouldClearError) {
655
687
  (0, _api.clearCellError)(ctx, r, c);
@@ -1258,6 +1290,12 @@ function getdatabyselection(ctx, range, sheetId) {
1258
1290
  return data;
1259
1291
  }
1260
1292
  function luckysheetUpdateCell(ctx, row_index, col_index) {
1293
+ var _a;
1294
+ var flowdata = (0, _context.getFlowdata)(ctx);
1295
+ var cell = (_a = flowdata === null || flowdata === void 0 ? void 0 : flowdata[row_index]) === null || _a === void 0 ? void 0 : _a[col_index];
1296
+ if ((cell === null || cell === void 0 ? void 0 : cell.f) != null && String(cell.f).trim() !== "") {
1297
+ (0, _formula.suppressFormulaRangeSelectionForInitialEdit)(ctx);
1298
+ }
1261
1299
  ctx.luckysheetCellUpdate = [row_index, col_index];
1262
1300
  }
1263
1301
  function getDataBySelectionNoCopy(ctx, range) {
@@ -21,6 +21,7 @@ export declare class FormulaCache {
21
21
  rangedrag_column_start?: boolean;
22
22
  rangedrag_row_start?: boolean;
23
23
  rangeSelectionActive?: boolean | null;
24
+ formulaEditorOwner?: "cell" | "fx" | null;
24
25
  functionRangeIndex?: number[];
25
26
  functionlistMap: any;
26
27
  execFunctionExist?: any[];
@@ -47,6 +48,12 @@ export declare function rangeHightlightselected(ctx: Context, $editor: HTMLDivEl
47
48
  export declare function functionHTMLGenerate(txt: string): string;
48
49
  export declare function getLastFormulaRangeIndex($editor: HTMLDivElement): number | null;
49
50
  export declare function getFormulaRangeIndexAtCaret($editor: HTMLDivElement): number | null;
51
+ export declare function setFormulaEditorOwner(ctx: Context, owner: "cell" | "fx" | null): void;
52
+ export declare function getFormulaEditorOwner(ctx: Context): "cell" | "fx" | null;
53
+ export declare function hasIncompleteTruncatedCellRangeSyntax(formulaText: string): boolean;
54
+ export declare function isBareCellOrRangeOnlyFormula(formulaText: string): boolean;
55
+ export declare function suppressFormulaRangeSelectionForInitialEdit(ctx: Context): void;
56
+ export declare function isCaretAtValidFormulaRangeInsertionPoint(editor: HTMLElement | null): boolean;
50
57
  export declare function markRangeSelectionDirty(ctx: Context): void;
51
58
  export declare function getFormulaRangeIndexForKeyboardSync($editor: HTMLDivElement): number | null;
52
59
  export declare function handleFormulaInput(ctx: Context, $copyTo: HTMLDivElement | null | undefined, $editor: HTMLDivElement, kcode: number, preText?: string, refreshRangeSelect?: boolean): void;
@@ -13,6 +13,7 @@ exports.functionCopy = functionCopy;
13
13
  exports.functionHTMLGenerate = functionHTMLGenerate;
14
14
  exports.functionStrChange = functionStrChange;
15
15
  exports.getAllFunctionGroup = getAllFunctionGroup;
16
+ exports.getFormulaEditorOwner = getFormulaEditorOwner;
16
17
  exports.getFormulaRangeIndexAtCaret = getFormulaRangeIndexAtCaret;
17
18
  exports.getFormulaRangeIndexForKeyboardSync = getFormulaRangeIndexForKeyboardSync;
18
19
  exports.getLastFormulaRangeIndex = getLastFormulaRangeIndex;
@@ -20,7 +21,10 @@ exports.getcellrange = getcellrange;
20
21
  exports.getrangeseleciton = getrangeseleciton;
21
22
  exports.groupValuesRefresh = groupValuesRefresh;
22
23
  exports.handleFormulaInput = handleFormulaInput;
24
+ exports.hasIncompleteTruncatedCellRangeSyntax = hasIncompleteTruncatedCellRangeSyntax;
23
25
  exports.insertUpdateFunctionGroup = insertUpdateFunctionGroup;
26
+ exports.isBareCellOrRangeOnlyFormula = isBareCellOrRangeOnlyFormula;
27
+ exports.isCaretAtValidFormulaRangeInsertionPoint = isCaretAtValidFormulaRangeInsertionPoint;
24
28
  exports.isFormulaReferenceInputMode = isFormulaReferenceInputMode;
25
29
  exports.iscelldata = iscelldata;
26
30
  exports.israngeseleciton = israngeseleciton;
@@ -34,6 +38,8 @@ exports.rangeDragRow = rangeDragRow;
34
38
  exports.rangeHightlightselected = rangeHightlightselected;
35
39
  exports.rangeSetValue = rangeSetValue;
36
40
  exports.setCaretPosition = setCaretPosition;
41
+ exports.setFormulaEditorOwner = setFormulaEditorOwner;
42
+ exports.suppressFormulaRangeSelectionForInitialEdit = suppressFormulaRangeSelectionForInitialEdit;
37
43
  var _formulaParser = require("@fileverse-dev/formula-parser");
38
44
  var _lodash = _interopRequireDefault(require("lodash"));
39
45
  var _context = require("../context");
@@ -44,7 +50,6 @@ var _locale = require("../locale");
44
50
  var _color = require("./color");
45
51
  var _location = require("./location");
46
52
  var _2 = require(".");
47
- var _index = require("../utils/index");
48
53
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
49
54
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
50
55
  var __assign = void 0 && (void 0).__assign || function () {
@@ -93,6 +98,7 @@ var FormulaCache = exports.FormulaCache = function () {
93
98
  this.data_parm_index = 0;
94
99
  this.selectingRangeIndex = -1;
95
100
  this.rangeSelectionActive = null;
101
+ this.formulaEditorOwner = null;
96
102
  this.functionlistMap = {};
97
103
  this.execFunctionGlobalData = {};
98
104
  this.cellTextToIndexList = {};
@@ -1666,6 +1672,115 @@ function getFormulaRangeIndexAtCaret($editor) {
1666
1672
  var n = parseInt(ri, 10);
1667
1673
  return Number.isNaN(n) ? null : n;
1668
1674
  }
1675
+ function setFormulaEditorOwner(ctx, owner) {
1676
+ ctx.formulaCache.formulaEditorOwner = owner;
1677
+ }
1678
+ function getFormulaEditorOwner(ctx) {
1679
+ var _a, _b;
1680
+ var cachedOwner = ctx.formulaCache.formulaEditorOwner;
1681
+ if (cachedOwner === "cell" || cachedOwner === "fx") {
1682
+ return cachedOwner;
1683
+ }
1684
+ if (((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.id) === "luckysheet-functionbox-cell") {
1685
+ return "fx";
1686
+ }
1687
+ if (((_b = document.activeElement) === null || _b === void 0 ? void 0 : _b.id) === "luckysheet-rich-text-editor") {
1688
+ return "cell";
1689
+ }
1690
+ return null;
1691
+ }
1692
+ function getActiveFormulaEditorElement(ctx) {
1693
+ var _a;
1694
+ var cellEditor = document.getElementById("luckysheet-rich-text-editor");
1695
+ var fxEditor = document.getElementById("luckysheet-functionbox-cell");
1696
+ var owner = getFormulaEditorOwner(ctx);
1697
+ if (owner === "fx") return fxEditor !== null && fxEditor !== void 0 ? fxEditor : cellEditor;
1698
+ if (owner === "cell") return cellEditor !== null && cellEditor !== void 0 ? cellEditor : fxEditor;
1699
+ var activeId = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.id;
1700
+ if (activeId === "luckysheet-functionbox-cell") return fxEditor !== null && fxEditor !== void 0 ? fxEditor : cellEditor;
1701
+ if (activeId === "luckysheet-rich-text-editor") return cellEditor !== null && cellEditor !== void 0 ? cellEditor : fxEditor;
1702
+ return cellEditor !== null && cellEditor !== void 0 ? cellEditor : fxEditor;
1703
+ }
1704
+ function getCurrentFormulaSlotTextBeforeCaret(editor, caretOffset) {
1705
+ var textBefore = editor.innerText.slice(0, caretOffset);
1706
+ var parts = textBefore.split(/[=,(+\-*/&<>]/);
1707
+ return _lodash.default.trim(parts[parts.length - 1] || "");
1708
+ }
1709
+ function hasIncompleteTruncatedCellRangeSyntax(formulaText) {
1710
+ var t = formulaText.replace(/\s/g, "");
1711
+ if (!t.startsWith("=")) return false;
1712
+ if (/[A-Za-z]+\d+:[A-Za-z]+$/i.test(t)) return true;
1713
+ if (/[A-Za-z]+\d+:\s*$/i.test(t)) return true;
1714
+ return false;
1715
+ }
1716
+ function isBareCellOrRangeOnlyFormula(formulaText) {
1717
+ var t = formulaText.trim();
1718
+ if (!t.startsWith("=")) return false;
1719
+ var body = t.slice(1).trim();
1720
+ if (!body) return false;
1721
+ if (body.includes("(") || body.includes(")")) return false;
1722
+ return iscelldata(body);
1723
+ }
1724
+ function suppressFormulaRangeSelectionForInitialEdit(ctx) {
1725
+ ctx.formulaCache.rangeSelectionActive = false;
1726
+ ctx.formulaCache.rangestart = false;
1727
+ ctx.formulaCache.rangedrag_column_start = false;
1728
+ ctx.formulaCache.rangedrag_row_start = false;
1729
+ }
1730
+ function isCaretAtValidFormulaRangeInsertionPoint(editor) {
1731
+ var currSelection = window.getSelection();
1732
+ if (!editor || !currSelection || currSelection.rangeCount === 0) {
1733
+ return false;
1734
+ }
1735
+ var anchorNode = currSelection.anchorNode;
1736
+ if (anchorNode && !editor.contains(anchorNode)) {
1737
+ return false;
1738
+ }
1739
+ var inputText = editor.innerText.trim();
1740
+ if (!inputText.startsWith("=")) {
1741
+ return false;
1742
+ }
1743
+ if (hasIncompleteTruncatedCellRangeSyntax(inputText)) {
1744
+ return false;
1745
+ }
1746
+ if (/^=\s*[A-Za-z_][A-Za-z0-9_]*$/.test(inputText)) {
1747
+ return false;
1748
+ }
1749
+ if (isBareCellOrRangeOnlyFormula(inputText)) {
1750
+ return false;
1751
+ }
1752
+ var caretRange = currSelection.getRangeAt(0).cloneRange();
1753
+ var preCaretRange = document.createRange();
1754
+ preCaretRange.selectNodeContents(editor);
1755
+ preCaretRange.setEnd(caretRange.endContainer, caretRange.endOffset);
1756
+ var caretOffset = preCaretRange.toString().length;
1757
+ var slotTextBeforeCaret = getCurrentFormulaSlotTextBeforeCaret(editor, caretOffset);
1758
+ if (slotTextBeforeCaret.length > 0 && !iscelldata(slotTextBeforeCaret)) {
1759
+ return false;
1760
+ }
1761
+ var textAfter = editor.innerText.slice(caretOffset);
1762
+ var remaining = textAfter.replace(/^\s+/, "");
1763
+ if (remaining.length === 0) {
1764
+ var atCaret = getFormulaRangeIndexAtCaret(editor);
1765
+ if (atCaret !== null) {
1766
+ return true;
1767
+ }
1768
+ var textBefore = editor.innerText.slice(0, caretOffset).trimEnd();
1769
+ var lastCh = textBefore.slice(-1);
1770
+ if (!lastCh) {
1771
+ return false;
1772
+ }
1773
+ if (lastCh === ")") {
1774
+ return false;
1775
+ }
1776
+ if (/^[=,(+\-*/&%^<>]$/.test(lastCh)) {
1777
+ return true;
1778
+ }
1779
+ return false;
1780
+ }
1781
+ var first = remaining[0];
1782
+ return first === "," || first === ")" || first === "&" || first in operatorjson;
1783
+ }
1669
1784
  function hasCommaOrAnotherRefAfterRangeCell(cell) {
1670
1785
  var _a, _b;
1671
1786
  var n = cell.nextSibling;
@@ -1772,9 +1887,7 @@ function handleFormulaInput(ctx, $copyTo, $editor, kcode, preText, refreshRangeS
1772
1887
  functionRange(ctx, $editor, value, value1);
1773
1888
  if (refreshRangeSelect) {
1774
1889
  (0, _2.cancelFunctionrangeSelected)(ctx);
1775
- if (kcode !== 46) {
1776
- createRangeHightlight(ctx, value);
1777
- }
1890
+ createRangeHightlight(ctx, value);
1778
1891
  ctx.formulaCache.rangestart = false;
1779
1892
  ctx.formulaCache.rangedrag_column_start = false;
1780
1893
  ctx.formulaCache.rangedrag_row_start = false;
@@ -2060,31 +2173,7 @@ function israngeseleciton(ctx, istooltip) {
2060
2173
  return true;
2061
2174
  }
2062
2175
  var editor = ((_a = anchorElement.closest) === null || _a === void 0 ? void 0 : _a.call(anchorElement, "#luckysheet-rich-text-editor, #luckysheet-functionbox-cell")) || ((_b = parentElement.closest) === null || _b === void 0 ? void 0 : _b.call(parentElement, "#luckysheet-rich-text-editor, #luckysheet-functionbox-cell")) || document.getElementById("luckysheet-rich-text-editor");
2063
- if (!editor || currSelection.rangeCount === 0) {
2064
- return true;
2065
- }
2066
- var inputText = editor.innerText.trim();
2067
- if (!inputText.startsWith("=")) {
2068
- return false;
2069
- }
2070
- if (/^=\s*[A-Za-z_][A-Za-z0-9_]*$/.test(inputText)) {
2071
- return false;
2072
- }
2073
- var caretRange = currSelection.getRangeAt(0).cloneRange();
2074
- var preCaretRange = document.createRange();
2075
- preCaretRange.selectNodeContents(editor);
2076
- preCaretRange.setEnd(caretRange.endContainer, caretRange.endOffset);
2077
- var caretOffset = preCaretRange.toString().length;
2078
- var textAfter = editor.innerText.slice(caretOffset);
2079
- var remaining = textAfter.replace(/^\s+/, "");
2080
- if (remaining.length === 0) {
2081
- return true;
2082
- }
2083
- var first = remaining[0];
2084
- if (first === "," || first === ")" || first === "&" || first in operatorjson) {
2085
- return true;
2086
- }
2087
- return false;
2176
+ return isCaretAtValidFormulaRangeInsertionPoint(editor);
2088
2177
  };
2089
2178
  if (((_a = anchor === null || anchor === void 0 ? void 0 : anchor.parentNode) === null || _a === void 0 ? void 0 : _a.nodeName.toLowerCase()) === "span" && anchorOffset !== 0) {
2090
2179
  var txt = _lodash.default.trim((_b = anchor.textContent) !== null && _b !== void 0 ? _b : "");
@@ -2145,12 +2234,15 @@ function israngeseleciton(ctx, istooltip) {
2145
2234
  return false;
2146
2235
  }
2147
2236
  function isFormulaReferenceInputMode(ctx) {
2148
- var editor = document.getElementById("luckysheet-rich-text-editor");
2237
+ var editor = getActiveFormulaEditorElement(ctx);
2149
2238
  var inputText = ((editor === null || editor === void 0 ? void 0 : editor.innerText) || "").trim();
2150
- var hasRangeToken = (editor === null || editor === void 0 ? void 0 : editor.querySelector("span.fortune-formula-functionrange-cell")) != null;
2151
- if (!!ctx.formulaCache.rangestart || !!ctx.formulaCache.rangedrag_column_start || !!ctx.formulaCache.rangedrag_row_start || hasRangeToken || ctx.formulaCache.rangeSelectionActive === true) {
2239
+ var refFlowActive = !!ctx.formulaCache.rangestart || !!ctx.formulaCache.rangedrag_column_start || !!ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true;
2240
+ if (refFlowActive) {
2152
2241
  return true;
2153
2242
  }
2243
+ if (ctx.formulaCache.rangeSelectionActive === false) {
2244
+ return false;
2245
+ }
2154
2246
  if (!inputText.startsWith("=")) {
2155
2247
  return false;
2156
2248
  }
@@ -2163,12 +2255,16 @@ function maybeRecoverDirtyRangeSelection(ctx) {
2163
2255
  if (ctx.formulaCache.rangeSelectionActive !== false) {
2164
2256
  return false;
2165
2257
  }
2166
- var editor = document.getElementById("luckysheet-rich-text-editor");
2258
+ var editor = getActiveFormulaEditorElement(ctx);
2167
2259
  if (!editor) {
2168
2260
  return false;
2169
2261
  }
2170
2262
  var inputText = (editor.innerText || "").trim();
2171
- if (inputText.startsWith("=") && israngeseleciton(ctx)) {
2263
+ if (hasIncompleteTruncatedCellRangeSyntax(inputText)) {
2264
+ return false;
2265
+ }
2266
+ var atCaretRangeIndex = getFormulaRangeIndexAtCaret(editor);
2267
+ if (inputText.startsWith("=") && atCaretRangeIndex === null && isCaretAtValidFormulaRangeInsertionPoint(editor) && israngeseleciton(ctx)) {
2172
2268
  ctx.formulaCache.rangeSelectionActive = null;
2173
2269
  return true;
2174
2270
  }
@@ -2269,14 +2365,14 @@ function functionStrChange(txt, type, rc, orient, stindex, step) {
2269
2365
  return function_str;
2270
2366
  }
2271
2367
  function rangeSetValue(ctx, cellInput, selected, fxInput) {
2272
- var _a, _b, _c, _d, _e, _f, _g;
2368
+ var _a, _b, _c, _d, _e, _f;
2273
2369
  var parser = new DOMParser();
2274
2370
  var doc = parser.parseFromString("<div>".concat(cellInput.innerHTML, "</div>"), "text/html");
2275
2371
  var spans = doc.querySelectorAll("span");
2276
2372
  var lastSpan = spans[spans.length - 1];
2277
2373
  var isManagedRangeSpan = (_b = (_a = lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.classList) === null || _a === void 0 ? void 0 : _a.contains("fortune-formula-functionrange-cell")) !== null && _b !== void 0 ? _b : false;
2278
- if (lastSpan && (0, _index.isLetterNumberPattern)(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) && !isManagedRangeSpan) {
2279
- var htmlR = (0, _index.removeLastSpan)(cellInput.innerHTML);
2374
+ if (lastSpan && (0, _utils.isLetterNumberPattern)(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) && !isManagedRangeSpan) {
2375
+ var htmlR = (0, _utils.removeLastSpan)(cellInput.innerHTML);
2280
2376
  cellInput.innerHTML = "".concat(htmlR);
2281
2377
  cellInput.focus();
2282
2378
  var kids = cellInput.childNodes;
@@ -2284,7 +2380,7 @@ function rangeSetValue(ctx, cellInput, selected, fxInput) {
2284
2380
  }
2285
2381
  var $editor = cellInput;
2286
2382
  var $copyTo = fxInput;
2287
- if (((_c = document.activeElement) === null || _c === void 0 ? void 0 : _c.id) === "luckysheet-functionbox-cell") {
2383
+ if (getFormulaEditorOwner(ctx) === "fx") {
2288
2384
  $editor = fxInput;
2289
2385
  $copyTo = cellInput;
2290
2386
  }
@@ -2313,9 +2409,9 @@ function rangeSetValue(ctx, cellInput, selected, fxInput) {
2313
2409
  refEle = ctx.formulaCache.rangeSetValueTo;
2314
2410
  }
2315
2411
  if (refEle && refEle.parentNode) {
2316
- var leftPar = (_d = document.getElementsByClassName("luckysheet-formula-text-lpar")) === null || _d === void 0 ? void 0 : _d[0];
2317
- if ((_e = leftPar === null || leftPar === void 0 ? void 0 : leftPar.parentElement) === null || _e === void 0 ? void 0 : _e.classList.contains("luckysheet-formula-text-color")) {
2318
- (_g = (_f = document.getElementsByClassName("luckysheet-formula-text-lpar")) === null || _f === void 0 ? void 0 : _f[0].parentNode) === null || _g === void 0 ? void 0 : _g.appendChild(newEle);
2412
+ var leftPar = (_c = document.getElementsByClassName("luckysheet-formula-text-lpar")) === null || _c === void 0 ? void 0 : _c[0];
2413
+ if ((_d = leftPar === null || leftPar === void 0 ? void 0 : leftPar.parentElement) === null || _d === void 0 ? void 0 : _d.classList.contains("luckysheet-formula-text-color")) {
2414
+ (_f = (_e = document.getElementsByClassName("luckysheet-formula-text-lpar")) === null || _e === void 0 ? void 0 : _e[0].parentNode) === null || _f === void 0 ? void 0 : _f.appendChild(newEle);
2319
2415
  } else {
2320
2416
  refEle.parentNode.insertBefore(newEle, refEle.nextSibling);
2321
2417
  }
package/lib/types.d.ts CHANGED
@@ -325,6 +325,8 @@ export type Freezen = {
325
325
  };
326
326
  };
327
327
  export type GlobalCache = {
328
+ enteredEditByTyping?: boolean;
329
+ pendingTypeOverCell?: [number, number];
328
330
  verticalScrollLock?: boolean;
329
331
  horizontalScrollLock?: boolean;
330
332
  overwriteCell?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fileverse-dev/fortune-core",
3
- "version": "1.3.11-input-ref",
3
+ "version": "1.3.11-input-ref-2",
4
4
  "main": "lib/index.js",
5
5
  "module": "es/index.js",
6
6
  "typings": "lib/index.d.ts",