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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/es/api/range.js +20 -0
  2. package/es/api/sheet.js +30 -2
  3. package/es/events/keyboard.js +50 -15
  4. package/es/events/mouse.js +36 -20
  5. package/es/events/paste.js +77 -28
  6. package/es/modules/cell.js +59 -2
  7. package/es/modules/comment.js +129 -24
  8. package/es/modules/dataVerification.js +34 -1
  9. package/es/modules/dropCell.js +65 -1
  10. package/es/modules/formula.d.ts +7 -0
  11. package/es/modules/formula.js +356 -45
  12. package/es/modules/hyperlink.js +52 -5
  13. package/es/modules/merge.js +93 -1
  14. package/es/modules/moveCells.js +35 -9
  15. package/es/modules/rowcol.js +75 -2
  16. package/es/modules/searchReplace.js +58 -2
  17. package/es/modules/selection.js +152 -42
  18. package/es/modules/sort.js +74 -9
  19. package/es/modules/splitColumn.js +21 -0
  20. package/es/modules/toolbar.js +46 -3
  21. package/es/settings.d.ts +5 -0
  22. package/lib/api/range.js +20 -0
  23. package/lib/api/sheet.js +29 -1
  24. package/lib/events/keyboard.js +49 -14
  25. package/lib/events/mouse.js +35 -19
  26. package/lib/events/paste.js +77 -28
  27. package/lib/modules/cell.js +59 -2
  28. package/lib/modules/comment.js +129 -24
  29. package/lib/modules/dataVerification.js +34 -1
  30. package/lib/modules/dropCell.js +65 -1
  31. package/lib/modules/formula.d.ts +7 -0
  32. package/lib/modules/formula.js +362 -45
  33. package/lib/modules/hyperlink.js +52 -5
  34. package/lib/modules/merge.js +93 -1
  35. package/lib/modules/moveCells.js +35 -9
  36. package/lib/modules/rowcol.js +75 -2
  37. package/lib/modules/searchReplace.js +58 -2
  38. package/lib/modules/selection.js +152 -42
  39. package/lib/modules/sort.js +74 -9
  40. package/lib/modules/splitColumn.js +21 -0
  41. package/lib/modules/toolbar.js +46 -3
  42. package/lib/settings.d.ts +5 -0
  43. package/package.json +1 -1
package/lib/api/range.js CHANGED
@@ -93,6 +93,7 @@ function setSelection(ctx, range, options) {
93
93
  }
94
94
  }
95
95
  function setCellValuesByRange(ctx, data, range, cellInput, options, callAfterUpdate) {
96
+ var _a, _b, _c, _d, _e;
96
97
  if (options === void 0) {
97
98
  options = {};
98
99
  }
@@ -110,13 +111,32 @@ function setCellValuesByRange(ctx, data, range, cellInput, options, callAfterUpd
110
111
  if (data.length !== rowCount || data[0].length !== columnCount) {
111
112
  throw new Error("data size does not match range");
112
113
  }
114
+ var sheet = (0, _common.getSheet)(ctx, options);
115
+ var sheetId = sheet.id || ctx.currentSheetId;
116
+ var cellChanges = [];
113
117
  for (var i = 0; i < rowCount; i += 1) {
114
118
  for (var j = 0; j < columnCount; j += 1) {
115
119
  var row = range.row[0] + i;
116
120
  var column = range.column[0] + j;
117
121
  (0, _cell.setCellValue)(ctx, row, column, data[i][j], cellInput, options, callAfterUpdate);
122
+ if (((_a = ctx === null || ctx === void 0 ? void 0 : ctx.hooks) === null || _a === void 0 ? void 0 : _a.updateCellYdoc) && sheet.data) {
123
+ cellChanges.push({
124
+ sheetId: sheetId,
125
+ path: ["celldata"],
126
+ value: {
127
+ r: row,
128
+ c: column,
129
+ v: (_d = (_c = (_b = sheet.data) === null || _b === void 0 ? void 0 : _b[row]) === null || _c === void 0 ? void 0 : _c[column]) !== null && _d !== void 0 ? _d : null
130
+ },
131
+ key: "".concat(row, "_").concat(column),
132
+ type: "update"
133
+ });
134
+ }
118
135
  }
119
136
  }
137
+ if (cellChanges.length > 0 && ((_e = ctx === null || ctx === void 0 ? void 0 : ctx.hooks) === null || _e === void 0 ? void 0 : _e.updateCellYdoc)) {
138
+ ctx.hooks.updateCellYdoc(cellChanges);
139
+ }
120
140
  }
121
141
  function setCellFormatByRange(ctx, attr, value, range, options) {
122
142
  if (options === void 0) {
package/lib/api/sheet.js CHANGED
@@ -164,7 +164,7 @@ function generateCopySheetName(ctx, sheetId) {
164
164
  return sheetCopyName;
165
165
  }
166
166
  function copySheet(ctx, sheetId) {
167
- var _a, _b, _c;
167
+ var _a, _b, _c, _d, _e;
168
168
  var index = (0, _utils.getSheetIndex)(ctx, sheetId);
169
169
  var order = ctx.luckysheetfile[index].order + 1;
170
170
  var sheetName = generateCopySheetName(ctx, sheetId);
@@ -201,6 +201,34 @@ function copySheet(ctx, sheetId) {
201
201
  var sheetOrderList = {};
202
202
  sheetOrderList[newSheetId] = order;
203
203
  _2.api.setSheetOrder(ctx, sheetOrderList);
204
+ (0, _2.changeSheet)(ctx, newSheetId, undefined, true, true);
205
+ if ((_d = ctx === null || ctx === void 0 ? void 0 : ctx.hooks) === null || _d === void 0 ? void 0 : _d.updateAllCell) {
206
+ ctx.hooks.updateAllCell(newSheetId);
207
+ } else if ((_e = ctx === null || ctx === void 0 ? void 0 : ctx.hooks) === null || _e === void 0 ? void 0 : _e.updateCellYdoc) {
208
+ var changes_1 = [];
209
+ var celldata = newSheet.celldata || (0, _common.dataToCelldata)(newSheet.data);
210
+ if (Array.isArray(celldata)) {
211
+ celldata.forEach(function (d) {
212
+ var _a;
213
+ if (d == null) return;
214
+ var r = d.r;
215
+ var c = d.c;
216
+ if (!_lodash.default.isNumber(r) || !_lodash.default.isNumber(c)) return;
217
+ changes_1.push({
218
+ sheetId: newSheetId,
219
+ path: ["celldata"],
220
+ key: "".concat(r, "_").concat(c),
221
+ value: {
222
+ r: r,
223
+ c: c,
224
+ v: (_a = d.v) !== null && _a !== void 0 ? _a : null
225
+ },
226
+ type: d.v == null ? "delete" : "update"
227
+ });
228
+ });
229
+ }
230
+ if (changes_1.length > 0) ctx.hooks.updateCellYdoc(changes_1);
231
+ }
204
232
  }
205
233
  function calculateSheetFromula(ctx, id) {
206
234
  var _a, _b, _c;
@@ -134,6 +134,9 @@ var __generator = void 0 && (void 0).__generator || function (thisArg, body) {
134
134
  };
135
135
  }
136
136
  };
137
+ function isLegacyFormulaRangeMode(ctx) {
138
+ return !!ctx.formulaCache.rangestart || !!ctx.formulaCache.rangedrag_column_start || !!ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true || (0, _formula.israngeseleciton)(ctx);
139
+ }
137
140
  function handleGlobalEnter(ctx, cellInput, e, canvas) {
138
141
  var _a, _b, _c;
139
142
  if ((e.altKey || e.metaKey) && ctx.luckysheetCellUpdate.length > 0) {
@@ -179,11 +182,20 @@ function moveToEdge(sheetData, key, curr, rowDelta, colDelta, startR, endR, star
179
182
  return colDelta === 0 ? r : c;
180
183
  }
181
184
  function handleControlPlusArrowKey(ctx, e, shiftPressed) {
182
- if (ctx.luckysheetCellUpdate.length > 0) return;
185
+ if (ctx.formulaCache.rangeSelectionActive === false && !(0, _formula.maybeRecoverDirtyRangeSelection)(ctx)) {
186
+ return;
187
+ }
188
+ var isFormulaRefMode = isLegacyFormulaRangeMode(ctx);
189
+ if (isFormulaRefMode) {
190
+ ctx.formulaCache.rangeSelectionActive = true;
191
+ }
192
+ if (ctx.luckysheetCellUpdate.length > 0 && !isFormulaRefMode) {
193
+ return;
194
+ }
183
195
  var idx = (0, _utils.getSheetIndex)(ctx, ctx.currentSheetId);
184
196
  if (_lodash.default.isNil(idx)) return;
185
197
  var file = ctx.luckysheetfile[idx];
186
- if (!file || !file.row || !file.column) return;
198
+ if (!file || _lodash.default.isNil(file.row) || _lodash.default.isNil(file.column)) return;
187
199
  var maxRow = file.row;
188
200
  var maxCol = file.column;
189
201
  var last;
@@ -334,7 +346,14 @@ function handleWithCtrlOrMetaKey(ctx, cache, e, cellInput, fxInput, handleUndo,
334
346
  }
335
347
  function handleShiftWithArrowKey(ctx, e) {
336
348
  var _a;
337
- if (ctx.luckysheetCellUpdate.length > 0) {
349
+ if (ctx.formulaCache.rangeSelectionActive === false && !(0, _formula.maybeRecoverDirtyRangeSelection)(ctx)) {
350
+ return;
351
+ }
352
+ var isFormulaMode = isLegacyFormulaRangeMode(ctx);
353
+ if (isFormulaMode) {
354
+ ctx.formulaCache.rangeSelectionActive = true;
355
+ }
356
+ if (ctx.luckysheetCellUpdate.length > 0 && !isFormulaMode) {
338
357
  return;
339
358
  }
340
359
  ctx.luckysheet_shiftpositon = _lodash.default.cloneDeep((_a = ctx.luckysheet_select_save) === null || _a === void 0 ? void 0 : _a[ctx.luckysheet_select_save.length - 1]);
@@ -358,17 +377,15 @@ function handleShiftWithArrowKey(ctx, e) {
358
377
  e.preventDefault();
359
378
  }
360
379
  function handleArrowKey(ctx, e) {
361
- var _a, _b;
362
- if (ctx.luckysheetCellUpdate.length > 0 || ctx.luckysheet_cell_selected_move || ctx.luckysheet_cell_selected_extend) {
363
- var parser = new DOMParser();
364
- var doc = parser.parseFromString("<div>".concat((_a = document.getElementById("luckysheet-rich-text-editor")) === null || _a === void 0 ? void 0 : _a.innerHTML, "</div>"), "text/html");
365
- var spans = doc.querySelectorAll("span");
366
- var lastSpan = spans[spans.length - 1];
367
- var notFunctionInit = !((_b = document.getElementById("luckysheet-rich-text-editor")) === null || _b === void 0 ? void 0 : _b.innerText.includes("("));
368
- if ((lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText.includes(")")) || (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) || /^[a-zA-Z]+$/.test(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText)) {
369
- return;
370
- }
380
+ if (ctx.formulaCache.rangeSelectionActive === false && !(0, _formula.maybeRecoverDirtyRangeSelection)(ctx)) {
381
+ return;
371
382
  }
383
+ var isFormulaRefMode = isLegacyFormulaRangeMode(ctx);
384
+ if (isFormulaRefMode) ctx.formulaCache.rangeSelectionActive = true;
385
+ if (ctx.luckysheetCellUpdate.length > 0 && !isFormulaRefMode) {
386
+ return;
387
+ }
388
+ if (ctx.luckysheetCellUpdate.length > 0 || ctx.luckysheet_cell_selected_move || ctx.luckysheet_cell_selected_extend) {}
372
389
  var moveCount = (0, _2.hideCRCount)(ctx, e.key);
373
390
  switch (e.key) {
374
391
  case "ArrowUp":
@@ -386,11 +403,12 @@ function handleArrowKey(ctx, e) {
386
403
  default:
387
404
  break;
388
405
  }
406
+ e.preventDefault();
389
407
  }
390
408
  function handleGlobalKeyDown(ctx, cellInput, fxInput, e, cache, handleUndo, handleRedo, canvas) {
391
409
  var _a, _b, _c;
392
410
  return __awaiter(this, void 0, void 0, function () {
393
- var kcode, kstr, allowEdit, isFxInput, ignoredKeys, restCod, last, row_index, col_index, last, row_index, col_index;
411
+ var handledFlvShortcut, kcode, kstr, allowEdit, isFxInput, ignoredKeys, restCod, last, row_index, col_index, last, row_index, col_index;
394
412
  return __generator(this, function (_d) {
395
413
  if (e.shiftKey && e.code === "Space") {
396
414
  e.stopImmediatePropagation();
@@ -398,27 +416,41 @@ function handleGlobalKeyDown(ctx, cellInput, fxInput, e, cache, handleUndo, hand
398
416
  e.preventDefault();
399
417
  return [2];
400
418
  }
419
+ handledFlvShortcut = false;
401
420
  if ((e.ctrlKey || e.metaKey && e.shiftKey) && e.code === "KeyE") {
402
421
  (0, _selection.textFormat)(ctx, "center");
422
+ handledFlvShortcut = true;
403
423
  } else if ((e.ctrlKey || e.metaKey && e.shiftKey) && e.code === "KeyL") {
404
424
  (0, _selection.textFormat)(ctx, "left");
425
+ handledFlvShortcut = true;
405
426
  } else if ((e.ctrlKey || e.metaKey && e.shiftKey) && e.code === "KeyR") {
406
427
  (0, _selection.textFormat)(ctx, "right");
428
+ handledFlvShortcut = true;
407
429
  }
408
430
  if ((e.metaKey || e.ctrlKey) && e.code === "KeyK") {
409
431
  (0, _toolbar.handleLink)(ctx, cellInput);
410
432
  }
411
433
  if ((e.metaKey || e.ctrlKey) && !e.shiftKey && e.code === "Semicolon") {
412
434
  (0, _selection.fillDate)(ctx);
435
+ handledFlvShortcut = true;
413
436
  }
414
437
  if ((e.metaKey || e.ctrlKey) && e.shiftKey && e.code === "Semicolon") {
415
438
  (0, _selection.fillTime)(ctx);
439
+ handledFlvShortcut = true;
416
440
  }
417
441
  if ((e.metaKey || e.ctrlKey) && !e.shiftKey && e.code === "KeyR") {
418
442
  (0, _selection.fillRightData)(ctx);
443
+ handledFlvShortcut = true;
419
444
  }
420
445
  if ((e.metaKey || e.ctrlKey) && e.code === "KeyD") {
421
446
  (0, _selection.fillDownData)(ctx);
447
+ handledFlvShortcut = true;
448
+ }
449
+ if (handledFlvShortcut) {
450
+ (0, _refresh.jfrefreshgrid)(ctx, null, undefined);
451
+ e.stopPropagation();
452
+ e.preventDefault();
453
+ return [2];
422
454
  }
423
455
  ctx.luckysheet_select_status = false;
424
456
  kcode = e.keyCode;
@@ -480,6 +512,9 @@ function handleGlobalKeyDown(ctx, cellInput, fxInput, e, cache, handleUndo, hand
480
512
  if (ctx.activeImg != null) {
481
513
  (0, _2.removeActiveImage)(ctx);
482
514
  } else {
515
+ if (ctx.formulaCache.rangeSelectionActive === true) {
516
+ (0, _formula.markRangeSelectionDirty)(ctx);
517
+ }
483
518
  (0, _selection.deleteSelectedCellText)(ctx);
484
519
  }
485
520
  (0, _refresh.jfrefreshgrid)(ctx, null, undefined);
@@ -127,7 +127,7 @@ function fixPositionOnFrozenCells(freeze, x, y, mouseX, mouseY) {
127
127
  }
128
128
  function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxInput, canvas) {
129
129
  var _a, _b;
130
- var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
130
+ var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
131
131
  if (!(fxInput === null || fxInput === void 0 ? void 0 : fxInput.innerHTML) && ctx) {
132
132
  ctx.defaultCandidates = [];
133
133
  }
@@ -146,11 +146,11 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
146
146
  return;
147
147
  }
148
148
  var freeze = (_c = globalCache.freezen) === null || _c === void 0 ? void 0 : _c[ctx.currentSheetId];
149
- var _q = fixPositionOnFrozenCells(freeze, _x, _y, mouseX, mouseY),
150
- x = _q.x,
151
- y = _q.y,
152
- inHorizontalFreeze = _q.inHorizontalFreeze,
153
- inVerticalFreeze = _q.inVerticalFreeze;
149
+ var _p = fixPositionOnFrozenCells(freeze, _x, _y, mouseX, mouseY),
150
+ x = _p.x,
151
+ y = _p.y,
152
+ inHorizontalFreeze = _p.inHorizontalFreeze,
153
+ inVerticalFreeze = _p.inVerticalFreeze;
154
154
  var row_location = (0, _location.rowLocation)(y, ctx.visibledatarow);
155
155
  var row = row_location[1];
156
156
  var row_pre = row_location[0];
@@ -195,12 +195,7 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
195
195
  }
196
196
  ctx.luckysheet_scroll_status = true;
197
197
  if (ctx.luckysheetCellUpdate.length > 0) {
198
- var parser = new DOMParser();
199
- var doc = parser.parseFromString("<div>".concat((_g = document.getElementById("luckysheet-rich-text-editor")) === null || _g === void 0 ? void 0 : _g.innerHTML, "</div>"), "text/html");
200
- var spans = doc.querySelectorAll("span");
201
- var firstSpan = spans[0];
202
- var lastSpan = spans[spans.length - 1];
203
- if ((ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start || (0, _modules.israngeseleciton)(ctx) || (firstSpan === null || firstSpan === void 0 ? void 0 : firstSpan.innerText.includes("=")) && !(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText.includes(")"))) && lastSpan && ctx.luckysheetCellUpdate.length === 2) {
198
+ if (ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start || (0, _modules.israngeseleciton)(ctx)) {
204
199
  var rowseleted = [row_index, row_index_ed];
205
200
  var columnseleted = [col_index, col_index_ed];
206
201
  var left = col_pre;
@@ -267,7 +262,7 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
267
262
  last.top_move = top_1;
268
263
  last.height_move = height;
269
264
  ctx.formulaCache.func_selectedrange = last;
270
- } else if (e.ctrlKey && ((_h = _lodash.default.last(cellInput.querySelectorAll("span"))) === null || _h === void 0 ? void 0 : _h.innerText) !== ",") {
265
+ } else if (e.ctrlKey && ((_g = _lodash.default.last(cellInput.querySelectorAll("span"))) === null || _g === void 0 ? void 0 : _g.innerText) !== ",") {
271
266
  var vText = cellInput.innerText;
272
267
  if (vText[vText.length - 1] === ")") {
273
268
  vText = vText.substring(0, vText.length - 1);
@@ -283,7 +278,7 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
283
278
  if (window.getSelection) {
284
279
  var currSelection = window.getSelection();
285
280
  if (currSelection == null) return;
286
- ctx.formulaCache.functionRangeIndex = [_lodash.default.indexOf((_l = (_k = (_j = currSelection.anchorNode) === null || _j === void 0 ? void 0 : _j.parentNode) === null || _k === void 0 ? void 0 : _k.parentNode) === null || _l === void 0 ? void 0 : _l.childNodes, (_m = currSelection.anchorNode) === null || _m === void 0 ? void 0 : _m.parentNode), currSelection.anchorOffset];
281
+ ctx.formulaCache.functionRangeIndex = [_lodash.default.indexOf((_k = (_j = (_h = currSelection.anchorNode) === null || _h === void 0 ? void 0 : _h.parentNode) === null || _j === void 0 ? void 0 : _j.parentNode) === null || _k === void 0 ? void 0 : _k.childNodes, (_l = currSelection.anchorNode) === null || _l === void 0 ? void 0 : _l.parentNode), currSelection.anchorOffset];
287
282
  } else {
288
283
  var textRange = document.selection.createRange();
289
284
  ctx.formulaCache.functionRangeIndex = textRange;
@@ -328,13 +323,14 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
328
323
  column_focus: col_index
329
324
  };
330
325
  }
326
+ ctx.formulaCache.rangestart = true;
327
+ ctx.formulaCache.rangedrag_column_start = false;
328
+ ctx.formulaCache.rangedrag_row_start = false;
331
329
  (0, _modules.rangeSetValue)(ctx, cellInput, {
332
330
  row: rowseleted,
333
331
  column: columnseleted
334
332
  }, fxInput);
335
- ctx.formulaCache.rangestart = true;
336
- ctx.formulaCache.rangedrag_column_start = false;
337
- ctx.formulaCache.rangedrag_row_start = false;
333
+ (0, _modules.rangeHightlightselected)(ctx, cellInput);
338
334
  ctx.formulaCache.selectingRangeIndex = ctx.formulaCache.rangechangeindex;
339
335
  if (ctx.formulaCache.rangechangeindex > ctx.formulaRangeHighlight.length) {
340
336
  (0, _modules.createRangeHightlight)(ctx, cellInput.innerHTML, ctx.formulaCache.rangechangeindex);
@@ -357,7 +353,7 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
357
353
  }
358
354
  if (ctx.luckysheet_select_status) {
359
355
  if (e.shiftKey) {
360
- var last = (_o = ctx.luckysheet_select_save) === null || _o === void 0 ? void 0 : _o[ctx.luckysheet_select_save.length - 1];
356
+ var last = (_m = ctx.luckysheet_select_save) === null || _m === void 0 ? void 0 : _m[ctx.luckysheet_select_save.length - 1];
361
357
  if (last && last.top != null && last.left != null && last.height != null && last.width != null && last.row_focus != null && last.column_focus != null) {
362
358
  var top_2 = 0;
363
359
  var height = 0;
@@ -416,7 +412,7 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
416
412
  ctx.luckysheet_select_save[ctx.luckysheet_select_save.length - 1] = last;
417
413
  }
418
414
  } else if (e.ctrlKey || e.metaKey) {
419
- (_p = ctx.luckysheet_select_save) === null || _p === void 0 ? void 0 : _p.push({
415
+ (_o = ctx.luckysheet_select_save) === null || _o === void 0 ? void 0 : _o.push({
420
416
  left: col_pre,
421
417
  width: col - col_pre - 1,
422
418
  top: row_pre,
@@ -848,10 +844,28 @@ function mouseRender(ctx, globalCache, e, cellInput, scrollX, scrollY, container
848
844
  ctx.luckysheet_select_save[ctx.luckysheet_select_save.length - 1] = last;
849
845
  (0, _freeze.scrollToFrozenRowCol)(ctx, (_d = globalCache.freezen) === null || _d === void 0 ? void 0 : _d[ctx.currentSheetId]);
850
846
  } else if (ctx.formulaCache.rangestart) {
847
+ if (ctx.formulaCache.rangeSelectionActive === false && !(0, _modules.maybeRecoverDirtyRangeSelection)(ctx)) {
848
+ if (ctx.luckysheetCellUpdate.length > 0) {
849
+ (0, _cell.updateCell)(ctx, ctx.luckysheetCellUpdate[0], ctx.luckysheetCellUpdate[1], cellInput);
850
+ }
851
+ return;
852
+ }
851
853
  (0, _modules.rangeDrag)(ctx, e, cellInput, scrollX.scrollLeft, scrollY.scrollTop, container, fxInput);
852
854
  } else if (ctx.formulaCache.rangedrag_row_start) {
855
+ if (ctx.formulaCache.rangeSelectionActive === false && !(0, _modules.maybeRecoverDirtyRangeSelection)(ctx)) {
856
+ if (ctx.luckysheetCellUpdate.length > 0) {
857
+ (0, _cell.updateCell)(ctx, ctx.luckysheetCellUpdate[0], ctx.luckysheetCellUpdate[1], cellInput);
858
+ }
859
+ return;
860
+ }
853
861
  (0, _formula.rangeDragRow)(ctx, e, cellInput, scrollX.scrollLeft, scrollY.scrollTop, container, fxInput);
854
862
  } else if (ctx.formulaCache.rangedrag_column_start) {
863
+ if (ctx.formulaCache.rangeSelectionActive === false && !(0, _modules.maybeRecoverDirtyRangeSelection)(ctx)) {
864
+ if (ctx.luckysheetCellUpdate.length > 0) {
865
+ (0, _cell.updateCell)(ctx, ctx.luckysheetCellUpdate[0], ctx.luckysheetCellUpdate[1], cellInput);
866
+ }
867
+ return;
868
+ }
855
869
  (0, _formula.rangeDragColumn)(ctx, e, cellInput, scrollX.scrollLeft, scrollY.scrollTop, container, fxInput);
856
870
  } else if (ctx.luckysheet_rows_selected_status) {} else if (ctx.luckysheet_cols_selected_status) {} else if (ctx.luckysheet_cell_selected_move) {} else if (ctx.luckysheet_cell_selected_extend) {
857
871
  (0, _dropCell.onDropCellSelect)(ctx, e, scrollX, scrollY, container);
@@ -1338,6 +1352,7 @@ function handleRowHeaderMouseDown(ctx, globalCache, e, container, cellInput, fxI
1338
1352
  row: rowseleted,
1339
1353
  column: [null, null]
1340
1354
  }, fxInput);
1355
+ (0, _modules.rangeHightlightselected)(ctx, cellInput);
1341
1356
  }
1342
1357
  ctx.formulaCache.rangedrag_row_start = true;
1343
1358
  ctx.formulaCache.rangestart = false;
@@ -1569,6 +1584,7 @@ function handleColumnHeaderMouseDown(ctx, globalCache, e, container, cellInput,
1569
1584
  row: [null, null],
1570
1585
  column: columnseleted
1571
1586
  }, fxInput);
1587
+ (0, _modules.rangeHightlightselected)(ctx, cellInput);
1572
1588
  }
1573
1589
  ctx.formulaCache.rangedrag_column_start = true;
1574
1590
  ctx.formulaCache.rangestart = false;
@@ -216,19 +216,19 @@ var handleFormulaOnPaste = function handleFormulaOnPaste(ctx, d) {
216
216
  cell.f = f;
217
217
  cell.m = v.toString();
218
218
  x[c] = cell;
219
+ changes.push({
220
+ sheetId: ctx.currentSheetId,
221
+ path: ["celldata"],
222
+ value: {
223
+ r: r,
224
+ c: c,
225
+ v: d[r][c]
226
+ },
227
+ key: "".concat(r, "_").concat(c),
228
+ type: "update"
229
+ });
219
230
  }
220
231
  d[r] = x;
221
- changes.push({
222
- sheetId: ctx.currentSheetId,
223
- path: ["celldata"],
224
- value: {
225
- r: r,
226
- c: c,
227
- v: d[r][c]
228
- },
229
- key: "".concat(r, "_").concat(c),
230
- type: "update"
231
- });
232
232
  }
233
233
  }
234
234
  if ((_b = ctx === null || ctx === void 0 ? void 0 : ctx.hooks) === null || _b === void 0 ? void 0 : _b.updateCellYdoc) {
@@ -362,7 +362,9 @@ function pasteHandler(ctx, data, borderInfo) {
362
362
  ctx.luckysheetfile[(0, _utils.getSheetIndex)(ctx, ctx.currentSheetId)].config = cfg;
363
363
  }
364
364
  (0, _refresh.jfrefreshgrid)(ctx, null, undefined);
365
- handleFormulaOnPaste(ctx, d);
365
+ if (data.includes("=")) {
366
+ handleFormulaOnPaste(ctx, d);
367
+ }
366
368
  } else {
367
369
  data = data.replace(/\r/g, "");
368
370
  var dataChe = [];
@@ -492,17 +494,17 @@ function pasteHandler(ctx, data, borderInfo) {
492
494
  }
493
495
  x[c + curC] = cell;
494
496
  }
495
- changes.push(changes.push({
497
+ changes.push({
496
498
  sheetId: ctx.currentSheetId,
497
499
  path: ["celldata"],
498
500
  value: {
499
- r: r,
500
- c: c,
501
- v: d[r][c]
501
+ r: r + curR,
502
+ c: c + curC,
503
+ v: d[r + curR][c + curC]
502
504
  },
503
- key: "".concat(r, "_").concat(c),
505
+ key: "".concat(r + curR, "_").concat(c + curC),
504
506
  type: "update"
505
- }));
507
+ });
506
508
  }
507
509
  d[r + curR] = x;
508
510
  }
@@ -512,7 +514,9 @@ function pasteHandler(ctx, data, borderInfo) {
512
514
  last.row = [curR, curR + rlen - 1];
513
515
  last.column = [curC, curC + clen - 1];
514
516
  (0, _refresh.jfrefreshgrid)(ctx, null, undefined);
515
- handleFormulaOnPaste(ctx, d);
517
+ if (data.includes("=")) {
518
+ handleFormulaOnPaste(ctx, d);
519
+ }
516
520
  }
517
521
  }
518
522
  function setCellHyperlink(ctx, id, r, c, link) {
@@ -523,7 +527,7 @@ function setCellHyperlink(ctx, id, r, c, link) {
523
527
  ctx.luckysheetfile[index].hyperlink["".concat(r, "_").concat(c)] = link;
524
528
  }
525
529
  function pasteHandlerOfCutPaste(ctx, copyRange) {
526
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
530
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
527
531
  var allowEdit = (0, _utils.isAllowEdit)(ctx);
528
532
  if (!allowEdit || ctx.isFlvReadOnly) return;
529
533
  if (!copyRange) return;
@@ -566,6 +570,7 @@ function pasteHandlerOfCutPaste(ctx, copyRange) {
566
570
  if (addr > 0 || addc > 0) {
567
571
  (0, _sheet.expandRowsAndColumns)(d, addr, addc);
568
572
  }
573
+ var changes = [];
569
574
  var borderInfoCompute = (0, _border.getBorderInfoCompute)(ctx, copySheetId);
570
575
  var c_dataVerification = _lodash.default.cloneDeep(ctx.luckysheetfile[(0, _utils.getSheetIndex)(ctx, copySheetId)].dataVerification) || {};
571
576
  var dataVerification = _lodash.default.cloneDeep(ctx.luckysheetfile[(0, _utils.getSheetIndex)(ctx, ctx.currentSheetId)].dataVerification) || {};
@@ -597,6 +602,17 @@ function pasteHandlerOfCutPaste(ctx, copyRange) {
597
602
  delete cell.mc;
598
603
  }
599
604
  d[i][j] = null;
605
+ changes.push({
606
+ sheetId: ctx.currentSheetId,
607
+ path: ["celldata"],
608
+ value: {
609
+ r: i,
610
+ c: j,
611
+ v: null
612
+ },
613
+ key: "".concat(i, "_").concat(j),
614
+ type: "update"
615
+ });
600
616
  delete dataVerification["".concat(i, "_").concat(j)];
601
617
  (_f = ctx.luckysheetfile[(0, _utils.getSheetIndex)(ctx, ctx.currentSheetId)].hyperlink) === null || _f === void 0 ? true : delete _f["".concat(i, "_").concat(j)];
602
618
  }
@@ -696,6 +712,17 @@ function pasteHandlerOfCutPaste(ctx, copyRange) {
696
712
  value = copyData[h - minh][c - minc];
697
713
  }
698
714
  x[c] = _lodash.default.cloneDeep(value);
715
+ changes.push({
716
+ sheetId: ctx.currentSheetId,
717
+ path: ["celldata"],
718
+ value: {
719
+ r: h,
720
+ c: c,
721
+ v: d[h][c]
722
+ },
723
+ key: "".concat(h, "_").concat(c),
724
+ type: "update"
725
+ });
699
726
  if (value != null && copyHasMC && ((_k = x[c]) === null || _k === void 0 ? void 0 : _k.mc)) {
700
727
  if (x[c].mc.rs != null) {
701
728
  x[c].mc.r = h;
@@ -716,6 +743,9 @@ function pasteHandlerOfCutPaste(ctx, copyRange) {
716
743
  }
717
744
  last.row = [minh, maxh];
718
745
  last.column = [minc, maxc];
746
+ if (changes.length > 0 && ((_l = ctx === null || ctx === void 0 ? void 0 : ctx.hooks) === null || _l === void 0 ? void 0 : _l.updateCellYdoc)) {
747
+ ctx.hooks.updateCellYdoc(changes);
748
+ }
719
749
  if (copyRowlChange) {}
720
750
  var source;
721
751
  var target;
@@ -798,7 +828,7 @@ function pasteHandlerOfCutPaste(ctx, copyRange) {
798
828
  }
799
829
  source_curCdformat[i].cellrange = emptyRange;
800
830
  if (emptyRange2.length > 0) {
801
- var ruleObj = (_l = source_curCdformat[i]) !== null && _l !== void 0 ? _l : {};
831
+ var ruleObj = (_m = source_curCdformat[i]) !== null && _m !== void 0 ? _m : {};
802
832
  ruleObj.cellrange = emptyRange2;
803
833
  ruleArr.push(ruleObj);
804
834
  }
@@ -902,7 +932,7 @@ function pasteHandlerOfCutPaste(ctx, copyRange) {
902
932
  }
903
933
  }
904
934
  function pasteHandlerOfCopyPaste(ctx, copyRange) {
905
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
935
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
906
936
  var allowEdit = (0, _utils.isAllowEdit)(ctx);
907
937
  if (!allowEdit || ctx.isFlvReadOnly) return;
908
938
  if (!copyRange) return;
@@ -993,6 +1023,7 @@ function pasteHandlerOfCopyPaste(ctx, copyRange) {
993
1023
  if (addr > 0 || addc > 0) {
994
1024
  (0, _sheet.expandRowsAndColumns)(d, addr, addc);
995
1025
  }
1026
+ var changes = [];
996
1027
  var borderInfoCompute = (0, _border.getBorderInfoCompute)(ctx, copySheetIndex);
997
1028
  var c_dataVerification = _lodash.default.cloneDeep(ctx.luckysheetfile[(0, _utils.getSheetIndex)(ctx, copySheetIndex)].dataVerification) || {};
998
1029
  var dataVerification = null;
@@ -1082,6 +1113,7 @@ function pasteHandlerOfCopyPaste(ctx, copyRange) {
1082
1113
  value.m = "Loading...";
1083
1114
  }
1084
1115
  }
1116
+ var afterHookCalled = false;
1085
1117
  if (!_lodash.default.isNil(value) && !_lodash.default.isNil(value.f)) {
1086
1118
  var adjustedFormula = value.f;
1087
1119
  var isError = false;
@@ -1134,6 +1166,7 @@ function pasteHandlerOfCopyPaste(ctx, copyRange) {
1134
1166
  v: arr.length === 1 ? funcV[1] : value.v,
1135
1167
  m: funcV[1] instanceof Promise ? "[object Promise]" : funcV[1]
1136
1168
  }));
1169
+ afterHookCalled = true;
1137
1170
  }
1138
1171
  }
1139
1172
  if (!_lodash.default.isNil(value.spl)) {}
@@ -1154,6 +1187,19 @@ function pasteHandlerOfCopyPaste(ctx, copyRange) {
1154
1187
  };
1155
1188
  }
1156
1189
  }
1190
+ if (!(((_k = ctx === null || ctx === void 0 ? void 0 : ctx.hooks) === null || _k === void 0 ? void 0 : _k.afterUpdateCell) && afterHookCalled)) {
1191
+ changes.push({
1192
+ sheetId: ctx.currentSheetId,
1193
+ path: ["celldata"],
1194
+ value: {
1195
+ r: h,
1196
+ c: c,
1197
+ v: d[h][c]
1198
+ },
1199
+ key: "".concat(h, "_").concat(c),
1200
+ type: "update"
1201
+ });
1202
+ }
1157
1203
  }
1158
1204
  d[h] = x;
1159
1205
  }
@@ -1165,7 +1211,7 @@ function pasteHandlerOfCopyPaste(ctx, copyRange) {
1165
1211
  var a_file = ctx.luckysheetfile[(0, _utils.getSheetIndex)(ctx, ctx.currentSheetId)];
1166
1212
  var ruleArr_cf = _lodash.default.cloneDeep(c_file.luckysheet_conditionformat_save);
1167
1213
  if (!_lodash.default.isNil(ruleArr_cf) && ruleArr_cf.length > 0) {
1168
- cdformat = (_k = _lodash.default.cloneDeep(a_file.luckysheet_conditionformat_save)) !== null && _k !== void 0 ? _k : [];
1214
+ cdformat = (_l = _lodash.default.cloneDeep(a_file.luckysheet_conditionformat_save)) !== null && _l !== void 0 ? _l : [];
1169
1215
  for (var i = 0; i < ruleArr_cf.length; i += 1) {
1170
1216
  var cf_range = ruleArr_cf[i].cellrange;
1171
1217
  var emptyRange = [];
@@ -1201,8 +1247,8 @@ function pasteHandlerOfCopyPaste(ctx, copyRange) {
1201
1247
  file.config = cfg;
1202
1248
  file.luckysheet_conditionformat_save = cdformat;
1203
1249
  file.dataVerification = __assign(__assign({}, file.dataVerification), dataVerification);
1204
- if (((_l = ctx.luckysheet_select_save) === null || _l === void 0 ? void 0 : _l.length) === 1 && ((_m = ctx.luckysheet_copy_save) === null || _m === void 0 ? void 0 : _m.copyRange.length) === 1) {
1205
- var srcIndex = (0, _utils.getSheetIndex)(ctx, (_o = ctx.luckysheet_copy_save) === null || _o === void 0 ? void 0 : _o.dataSheetId);
1250
+ if (((_m = ctx.luckysheet_select_save) === null || _m === void 0 ? void 0 : _m.length) === 1 && ((_o = ctx.luckysheet_copy_save) === null || _o === void 0 ? void 0 : _o.copyRange.length) === 1) {
1251
+ var srcIndex = (0, _utils.getSheetIndex)(ctx, (_p = ctx.luckysheet_copy_save) === null || _p === void 0 ? void 0 : _p.dataSheetId);
1206
1252
  var targetSheetIndex = (0, _utils.getSheetIndex)(ctx, ctx.currentSheetId);
1207
1253
  var srcHyperlinks = ctx.luckysheetfile[srcIndex].hyperlink;
1208
1254
  var srcData = ctx.luckysheetfile[srcIndex].data;
@@ -1213,7 +1259,7 @@ function pasteHandlerOfCopyPaste(ctx, copyRange) {
1213
1259
  var isSingleCell = copyh === 1 && copyc === 1;
1214
1260
  var cachedSrcLinkKey = isSingleCell ? "".concat(c_r1, "_").concat(c_c1) : null;
1215
1261
  var cachedSrcLink = isSingleCell && srcHyperlinks ? srcHyperlinks[cachedSrcLinkKey] : null;
1216
- var cachedSrcCell = isSingleCell && srcData ? (_p = srcData[c_r1]) === null || _p === void 0 ? void 0 : _p[c_c1] : null;
1262
+ var cachedSrcCell = isSingleCell && srcData ? (_q = srcData[c_r1]) === null || _q === void 0 ? void 0 : _q[c_c1] : null;
1217
1263
  for (var th = 1; th <= timesH; th += 1) {
1218
1264
  for (var tc = 1; tc <= timesC; tc += 1) {
1219
1265
  var linkMth = minh + (th - 1) * copyh;
@@ -1233,7 +1279,7 @@ function pasteHandlerOfCopyPaste(ctx, copyRange) {
1233
1279
  if (!srcLink) continue;
1234
1280
  var targetKey = "".concat(h, "_").concat(c);
1235
1281
  targetHyperlinks[targetKey] = srcLink;
1236
- var cell = (_q = d[h]) === null || _q === void 0 ? void 0 : _q[c];
1282
+ var cell = (_r = d[h]) === null || _r === void 0 ? void 0 : _r[c];
1237
1283
  if (cell) {
1238
1284
  var srcCell = void 0;
1239
1285
  if (isSingleCell && cachedSrcCell) {
@@ -1241,7 +1287,7 @@ function pasteHandlerOfCopyPaste(ctx, copyRange) {
1241
1287
  } else {
1242
1288
  var srcRow = c_r1 + (h - linkMth);
1243
1289
  var srcCol = c_c1 + (c - linkMtc);
1244
- srcCell = (_r = srcData === null || srcData === void 0 ? void 0 : srcData[srcRow]) === null || _r === void 0 ? void 0 : _r[srcCol];
1290
+ srcCell = (_s = srcData === null || srcData === void 0 ? void 0 : srcData[srcRow]) === null || _s === void 0 ? void 0 : _s[srcCol];
1245
1291
  }
1246
1292
  cell.hl = {
1247
1293
  r: h,
@@ -1261,6 +1307,9 @@ function pasteHandlerOfCopyPaste(ctx, copyRange) {
1261
1307
  }
1262
1308
  }
1263
1309
  }
1310
+ if (changes.length > 0 && ((_t = ctx === null || ctx === void 0 ? void 0 : ctx.hooks) === null || _t === void 0 ? void 0 : _t.updateCellYdoc)) {
1311
+ ctx.hooks.updateCellYdoc(changes);
1312
+ }
1264
1313
  if (copyRowlChange || addr > 0 || addc > 0) {
1265
1314
  (0, _refresh.jfrefreshgrid)(ctx, d, ctx.luckysheet_select_save);
1266
1315
  } else {