@univerjs/sheets 1.0.0-beta.0 → 1.0.0-beta.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.
Files changed (82) hide show
  1. package/lib/cjs/index.js +151 -106
  2. package/lib/cjs/locale/ar-SA.js +1 -2
  3. package/lib/cjs/locale/ca-ES.js +3 -4
  4. package/lib/cjs/locale/de-DE.js +1 -2
  5. package/lib/cjs/locale/en-US.js +1 -2
  6. package/lib/cjs/locale/es-ES.js +1 -2
  7. package/lib/cjs/locale/fa-IR.js +1 -2
  8. package/lib/cjs/locale/fr-FR.js +1 -2
  9. package/lib/cjs/locale/id-ID.js +1 -2
  10. package/lib/cjs/locale/it-IT.js +1 -2
  11. package/lib/cjs/locale/ja-JP.js +1 -2
  12. package/lib/cjs/locale/ko-KR.js +1 -2
  13. package/lib/cjs/locale/pl-PL.js +1 -2
  14. package/lib/cjs/locale/pt-BR.js +1 -2
  15. package/lib/cjs/locale/ru-RU.js +1 -2
  16. package/lib/cjs/locale/sk-SK.js +3 -4
  17. package/lib/cjs/locale/vi-VN.js +1 -2
  18. package/lib/cjs/locale/zh-CN.js +1 -2
  19. package/lib/cjs/locale/zh-HK.js +1 -2
  20. package/lib/cjs/locale/zh-TW.js +1 -2
  21. package/lib/es/index.js +152 -107
  22. package/lib/es/locale/ar-SA.js +1 -2
  23. package/lib/es/locale/ca-ES.js +3 -4
  24. package/lib/es/locale/de-DE.js +1 -2
  25. package/lib/es/locale/en-US.js +1 -2
  26. package/lib/es/locale/es-ES.js +1 -2
  27. package/lib/es/locale/fa-IR.js +1 -2
  28. package/lib/es/locale/fr-FR.js +1 -2
  29. package/lib/es/locale/id-ID.js +1 -2
  30. package/lib/es/locale/it-IT.js +1 -2
  31. package/lib/es/locale/ja-JP.js +1 -2
  32. package/lib/es/locale/ko-KR.js +1 -2
  33. package/lib/es/locale/pl-PL.js +1 -2
  34. package/lib/es/locale/pt-BR.js +1 -2
  35. package/lib/es/locale/ru-RU.js +1 -2
  36. package/lib/es/locale/sk-SK.js +3 -4
  37. package/lib/es/locale/vi-VN.js +1 -2
  38. package/lib/es/locale/zh-CN.js +1 -2
  39. package/lib/es/locale/zh-HK.js +1 -2
  40. package/lib/es/locale/zh-TW.js +1 -2
  41. package/lib/index.js +152 -107
  42. package/lib/locale/ar-SA.js +1 -2
  43. package/lib/locale/ca-ES.js +3 -4
  44. package/lib/locale/de-DE.js +1 -2
  45. package/lib/locale/en-US.js +1 -2
  46. package/lib/locale/es-ES.js +1 -2
  47. package/lib/locale/fa-IR.js +1 -2
  48. package/lib/locale/fr-FR.js +1 -2
  49. package/lib/locale/id-ID.js +1 -2
  50. package/lib/locale/it-IT.js +1 -2
  51. package/lib/locale/ja-JP.js +1 -2
  52. package/lib/locale/ko-KR.js +1 -2
  53. package/lib/locale/pl-PL.js +1 -2
  54. package/lib/locale/pt-BR.js +1 -2
  55. package/lib/locale/ru-RU.js +1 -2
  56. package/lib/locale/sk-SK.js +3 -4
  57. package/lib/locale/vi-VN.js +1 -2
  58. package/lib/locale/zh-CN.js +1 -2
  59. package/lib/locale/zh-HK.js +1 -2
  60. package/lib/locale/zh-TW.js +1 -2
  61. package/lib/types/locale/en-US.d.ts +0 -1
  62. package/lib/umd/index.js +1 -1
  63. package/lib/umd/locale/ar-SA.js +1 -1
  64. package/lib/umd/locale/ca-ES.js +1 -1
  65. package/lib/umd/locale/de-DE.js +1 -1
  66. package/lib/umd/locale/en-US.js +1 -1
  67. package/lib/umd/locale/es-ES.js +1 -1
  68. package/lib/umd/locale/fa-IR.js +1 -1
  69. package/lib/umd/locale/fr-FR.js +1 -1
  70. package/lib/umd/locale/id-ID.js +1 -1
  71. package/lib/umd/locale/it-IT.js +1 -1
  72. package/lib/umd/locale/ja-JP.js +1 -1
  73. package/lib/umd/locale/ko-KR.js +1 -1
  74. package/lib/umd/locale/pl-PL.js +1 -1
  75. package/lib/umd/locale/pt-BR.js +1 -1
  76. package/lib/umd/locale/ru-RU.js +1 -1
  77. package/lib/umd/locale/sk-SK.js +1 -1
  78. package/lib/umd/locale/vi-VN.js +1 -1
  79. package/lib/umd/locale/zh-CN.js +1 -1
  80. package/lib/umd/locale/zh-HK.js +1 -1
  81. package/lib/umd/locale/zh-TW.js +1 -1
  82. package/package.json +8 -8
package/lib/es/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { AUTO_HEIGHT_FOR_MERGED_CELLS, BORDER_KEYS, BORDER_STYLE_KEYS, BooleanNumber, BorderStyleTypes, BorderType, BuildTextUtils, COLOR_STYLE_KEYS, CellModeEnum, CellValueType, CommandType, CustomCommandExecutionError, DependentOn, Dimension, Direction, Disposable, DisposableCollection, DocumentDataModel, ErrorService, FontItalic, FontWeight, HorizontalAlign, IAuthzIoService, ICommandService, IConfigService, IConfirmService, IContextService, ILogService, IPermissionService, IResourceManagerService, IS_ROW_STYLE_PRECEDE_COLUMN_STYLE, IUndoRedoService, IUniverInstanceService, Inject, Injector, InterceptorEffectEnum, InterceptorManager, LRUMap, LocaleService, MAX_COLUMN_COUNT, MAX_ROW_COUNT, ObjectMatrix, Optional, PADDING_KEYS, PermissionStatus, Plugin, RANGE_TYPE, RTree, Range, Rectangle, RxDisposable, STYLE_KEYS, TEXT_DECORATION_KEYS, TEXT_ROTATION_KEYS, TextX, Tools, UniverInstanceType, UserManagerService, cellToRange, cloneWorksheetData, composeInterceptors, concatMatrixArray, createIdentifier, createInterceptorKey, createRowColIter, generateRandomId, getArrayLength, getIntersectRange, isBooleanString, isDefaultFormat, isFormulaId, isFormulaString, isICellData, isRealNum, isSafeNumeric, isTextFormat, mapObjectMatrix, merge, mergeIntervals, mergeOverrideWithDependencies, mergeWorksheetSnapshotWithDefault, moveMatrixArray, normalizeTextRuns, numfmt, queryObjectMatrix, regexp, registerDependencies, remove, selectionToArray, sequenceExecute, sliceMatrixArray, spliceArray, throttle, toDisposable, touchDependencies, willLoseNumericPrecision } from "@univerjs/core";
1
+ import { AUTO_HEIGHT_FOR_MERGED_CELLS, BORDER_KEYS, BORDER_STYLE_KEYS, BooleanNumber, BorderStyleTypes, BorderType, BuildTextUtils, COLOR_STYLE_KEYS, CellModeEnum, CellValueType, CommandType, CustomCommandExecutionError, DependentOn, Dimension, Direction, Disposable, DisposableCollection, DocumentDataModel, ErrorService, FontItalic, FontWeight, HorizontalAlign, IAuthzIoService, ICommandService, IConfigService, IConfirmService, IContextService, ILogService, IPermissionService, IResourceManagerService, IS_ROW_STYLE_PRECEDE_COLUMN_STYLE, IUndoRedoService, IUniverInstanceService, Inject, Injector, InterceptorEffectEnum, InterceptorManager, LRUMap, LocaleService, MAX_COLUMN_COUNT, MAX_ROW_COUNT, ObjectMatrix, Optional, PADDING_KEYS, PermissionStatus, Plugin, RANGE_TYPE, RTree, Range, Rectangle, RxDisposable, STYLE_KEYS, TEXT_DECORATION_KEYS, TEXT_ROTATION_KEYS, TextX, Tools, UniverInstanceType, UserManagerService, cellToRange, cloneWorksheetData, composeInterceptors, concatMatrixArray, createIdentifier, createInterceptorKey, createRowColIter, generateRandomId, getArrayLength, getIntersectRange, getNumfmtParseValueFilter, isBooleanString, isDefaultFormat, isFormulaId, isFormulaString, isICellData, isRealNum, isSafeNumeric, isTextFormat, mapObjectMatrix, merge, mergeIntervals, mergeOverrideWithDependencies, mergeWorksheetSnapshotWithDefault, moveMatrixArray, normalizeTextRuns, numfmt, regexp, registerDependencies, remove, selectionToArray, sequenceExecute, sliceMatrixArray, spliceArray, throttle, toDisposable, touchDependencies, willLoseNumericPrecision } from "@univerjs/core";
2
2
  import { BehaviorSubject, Subject, distinctUntilChanged, filter, first, map, merge as merge$1, of, share, shareReplay, skip, switchMap, takeUntil } from "rxjs";
3
3
  import { IDefinedNamesService, LexerTreeBuilder, RemoveDefinedNameMutation, SetDefinedNameMutation, SetDefinedNameMutationFactory, SetFormulaCalculationResultMutation, UniverFormulaEnginePlugin, deserializeRangeWithSheet, deserializeRangeWithSheetWithCache, handleNumfmtInCell, isReferenceStringWithEffectiveColumn, operatorToken, sequenceNodeType, stripErrorMargin } from "@univerjs/engine-formula";
4
4
  import { SpreadsheetSkeleton, cjk, precisionTo } from "@univerjs/engine-render";
@@ -6998,6 +6998,88 @@ const rotateRange = (range) => {
6998
6998
  rangeType
6999
6999
  };
7000
7000
  };
7001
+ function mergeAndSortRanges(ranges) {
7002
+ return sortRanges(ranges.length > 1 ? Rectangle.mergeRanges(ranges) : ranges);
7003
+ }
7004
+ function sortRanges(ranges) {
7005
+ return ranges.sort((a, b) => a.startRow - b.startRow || a.startColumn - b.startColumn || a.endRow - b.endRow || a.endColumn - b.endColumn);
7006
+ }
7007
+ function translateRange(range, rowOffset, columnOffset) {
7008
+ return {
7009
+ startRow: range.startRow + rowOffset,
7010
+ endRow: range.endRow + rowOffset,
7011
+ startColumn: range.startColumn + columnOffset,
7012
+ endColumn: range.endColumn + columnOffset
7013
+ };
7014
+ }
7015
+ function moveRangeAlongAxis(targetRange, from, count, to, isRow) {
7016
+ let transforms;
7017
+ if (from > to) transforms = [
7018
+ {
7019
+ start: Number.NEGATIVE_INFINITY,
7020
+ end: to - 1,
7021
+ offset: 0
7022
+ },
7023
+ {
7024
+ start: to,
7025
+ end: from - 1,
7026
+ offset: count
7027
+ },
7028
+ {
7029
+ start: from,
7030
+ end: from + count - 1,
7031
+ offset: to - from
7032
+ },
7033
+ {
7034
+ start: from + count,
7035
+ end: Number.POSITIVE_INFINITY,
7036
+ offset: 0
7037
+ }
7038
+ ];
7039
+ else {
7040
+ if (from + count > to) throw new Error("Invalid move operation");
7041
+ transforms = [
7042
+ {
7043
+ start: Number.NEGATIVE_INFINITY,
7044
+ end: from - 1,
7045
+ offset: 0
7046
+ },
7047
+ {
7048
+ start: from,
7049
+ end: from + count - 1,
7050
+ offset: to - from - count
7051
+ },
7052
+ {
7053
+ start: from + count,
7054
+ end: to - 1,
7055
+ offset: -count
7056
+ },
7057
+ {
7058
+ start: to,
7059
+ end: Number.POSITIVE_INFINITY,
7060
+ offset: 0
7061
+ }
7062
+ ];
7063
+ }
7064
+ const rangeStart = isRow ? targetRange.startRow : targetRange.startColumn;
7065
+ const rangeEnd = isRow ? targetRange.endRow : targetRange.endColumn;
7066
+ return mergeAndSortRanges(transforms.flatMap(({ start, end, offset }) => {
7067
+ const intersectStart = Math.max(rangeStart, start);
7068
+ const intersectEnd = Math.min(rangeEnd, end);
7069
+ if (intersectStart > intersectEnd) return [];
7070
+ return [translateRange(isRow ? {
7071
+ startRow: intersectStart,
7072
+ endRow: intersectEnd,
7073
+ startColumn: targetRange.startColumn,
7074
+ endColumn: targetRange.endColumn
7075
+ } : {
7076
+ startRow: targetRange.startRow,
7077
+ endRow: targetRange.endRow,
7078
+ startColumn: intersectStart,
7079
+ endColumn: intersectEnd
7080
+ }, isRow ? offset : 0, isRow ? 0 : offset)];
7081
+ }));
7082
+ }
7001
7083
  /**
7002
7084
  * see docs/tldr/ref-range/move-rows-cols.tldr
7003
7085
  */
@@ -7103,32 +7185,33 @@ const handleMoveRowsCommon = (params, targetRange) => {
7103
7185
  const fromRow = fromRange.startRow;
7104
7186
  const count = fromRange.endRow - fromRange.startRow + 1;
7105
7187
  const toRow = toRange.startRow;
7106
- const matrix = new ObjectMatrix();
7107
- Range.foreach(targetRange, (row, col) => {
7108
- matrix.setValue(row, col, 1);
7109
- });
7110
- matrix.moveRows(fromRow, count, toRow);
7111
- return queryObjectMatrix(matrix, (value) => value === 1);
7188
+ return moveRangeAlongAxis(targetRange, fromRow, count, toRow, true);
7112
7189
  };
7113
7190
  const handleReorderRangeCommon = (param, targetRange) => {
7114
7191
  const { range, order } = param.params || {};
7115
7192
  if (!range || !order) return [targetRange];
7116
- const matrix = new ObjectMatrix();
7117
- Range.foreach(targetRange, (row, col) => {
7118
- matrix.setValue(row, col, 1);
7119
- });
7120
- const cacheMatrix = new ObjectMatrix();
7121
- Range.foreach(range, (row, col) => {
7122
- if (Object.prototype.hasOwnProperty.call(order, row)) {
7123
- const targetRow = order[row];
7124
- const cloneCell = matrix.getValue(targetRow, col) ?? 0;
7125
- cacheMatrix.setValue(row, col, cloneCell);
7126
- }
7127
- });
7128
- cacheMatrix.forValue((row, col, cellData) => {
7129
- matrix.setValue(row, col, cellData);
7193
+ const overwrittenRows = [];
7194
+ const additions = [];
7195
+ const startColumn = Math.max(range.startColumn, targetRange.startColumn);
7196
+ const endColumn = Math.min(range.endColumn, targetRange.endColumn);
7197
+ Object.keys(order).forEach((key) => {
7198
+ const row = Number(key);
7199
+ if (row < range.startRow || row > range.endRow) return;
7200
+ overwrittenRows.push({
7201
+ startRow: row,
7202
+ endRow: row,
7203
+ startColumn: range.startColumn,
7204
+ endColumn: range.endColumn
7205
+ });
7206
+ const sourceRow = order[row];
7207
+ if (sourceRow >= targetRange.startRow && sourceRow <= targetRange.endRow && startColumn <= endColumn) additions.push({
7208
+ startRow: row,
7209
+ endRow: row,
7210
+ startColumn,
7211
+ endColumn
7212
+ });
7130
7213
  });
7131
- return queryObjectMatrix(matrix, (value) => value === 1);
7214
+ return mergeAndSortRanges([...Rectangle.subtractMulti([targetRange], overwrittenRows), ...additions]);
7132
7215
  };
7133
7216
  const handleMoveCols = (params, targetRange) => {
7134
7217
  const { fromRange, toRange } = params.params || {};
@@ -7159,12 +7242,7 @@ const handleMoveColsCommon = (params, targetRange) => {
7159
7242
  const fromCol = fromRange.startColumn;
7160
7243
  const count = fromRange.endColumn - fromRange.startColumn + 1;
7161
7244
  const toCol = toRange.startColumn;
7162
- const matrix = new ObjectMatrix();
7163
- Range.foreach(targetRange, (row, col) => {
7164
- matrix.setValue(row, col, 1);
7165
- });
7166
- matrix.moveColumns(fromCol, count, toCol);
7167
- return queryObjectMatrix(matrix, (value) => value === 1);
7245
+ return moveRangeAlongAxis(targetRange, fromCol, count, toCol, false);
7168
7246
  };
7169
7247
  const handleMoveRange = (param, targetRange) => {
7170
7248
  var _param$params, _param$params2;
@@ -7194,32 +7272,12 @@ const handleMoveRangeCommon = (param, targetRange) => {
7194
7272
  const relativeRange = Rectangle.getRelativeRange(targetRange, fromRange);
7195
7273
  return [Rectangle.getPositionRange(relativeRange, toRange)];
7196
7274
  }
7197
- const matrix = new ObjectMatrix();
7198
- Range.foreach(targetRange, (row, col) => {
7199
- matrix.setValue(row, col, 1);
7200
- });
7201
- const fromMatrix = new ObjectMatrix();
7202
- const loopFromRange = getIntersectRange(fromRange, targetRange);
7203
- loopFromRange && Range.foreach(loopFromRange, (row, col) => {
7204
- if (matrix.getValue(row, col)) {
7205
- matrix.setValue(row, col, void 0);
7206
- fromMatrix.setValue(row, col, 1);
7207
- }
7208
- });
7209
7275
  const columnOffset = toRange.startColumn - fromRange.startColumn;
7210
7276
  const rowOffset = toRange.startRow - fromRange.startRow;
7211
- const loopToRange = {
7212
- startColumn: toRange.startColumn - columnOffset,
7213
- endColumn: toRange.endColumn - columnOffset,
7214
- startRow: toRange.startRow - rowOffset,
7215
- endRow: toRange.endRow - rowOffset
7216
- };
7217
- loopToRange && Range.foreach(loopToRange, (row, col) => {
7218
- const targetRow = row + rowOffset;
7219
- const targetCol = col + columnOffset;
7220
- matrix.setValue(targetRow, targetCol, fromMatrix.getValue(row, col) ?? 0);
7221
- });
7222
- return queryObjectMatrix(matrix, (value) => value === 1);
7277
+ const movedRange = getIntersectRange(fromRange, targetRange);
7278
+ const remainingRanges = Rectangle.subtractMulti([targetRange], [fromRange, toRange]);
7279
+ const translatedRanges = movedRange ? [translateRange(movedRange, rowOffset, columnOffset)] : [];
7280
+ return mergeAndSortRanges([...remainingRanges, ...translatedRanges]);
7223
7281
  };
7224
7282
  const handleBaseRemoveRange = (_removeRange, _targetRange) => {
7225
7283
  const removeRange = handleRangeTypeInput(_removeRange);
@@ -7429,16 +7487,7 @@ const handleInsertRangeMoveDownCommon = (param, targetRange) => {
7429
7487
  const noMoveRanges = Rectangle.subtract(targetRange, bottomRange);
7430
7488
  const targetMoveRange = getIntersectRange(bottomRange, targetRange);
7431
7489
  if (!targetMoveRange) return [targetRange];
7432
- const matrix = new ObjectMatrix();
7433
- noMoveRanges.forEach((noMoveRange) => {
7434
- Range.foreach(noMoveRange, (row, col) => {
7435
- matrix.setValue(row, col, 1);
7436
- });
7437
- });
7438
- targetMoveRange && Range.foreach(targetMoveRange, (row, col) => {
7439
- matrix.setValue(row + moveCount, col, 1);
7440
- });
7441
- return queryObjectMatrix(matrix, (v) => v === 1);
7490
+ return sortRanges([...noMoveRanges, translateRange(targetMoveRange, moveCount, 0)]);
7442
7491
  };
7443
7492
  const handleInsertRangeMoveRight = (param, targetRange) => {
7444
7493
  var _param$params11;
@@ -7466,16 +7515,7 @@ const handleInsertRangeMoveRightCommon = (param, targetRange) => {
7466
7515
  const noMoveRanges = Rectangle.subtract(targetRange, bottomRange);
7467
7516
  const targetMoveRange = getIntersectRange(bottomRange, targetRange);
7468
7517
  if (!targetMoveRange) return [targetRange];
7469
- const matrix = new ObjectMatrix();
7470
- noMoveRanges.forEach((noMoveRange) => {
7471
- Range.foreach(noMoveRange, (row, col) => {
7472
- matrix.setValue(row, col, 1);
7473
- });
7474
- });
7475
- targetMoveRange && Range.foreach(targetMoveRange, (row, col) => {
7476
- matrix.setValue(row, col + moveCount, 1);
7477
- });
7478
- return queryObjectMatrix(matrix, (v) => v === 1);
7518
+ return sortRanges([...noMoveRanges, translateRange(targetMoveRange, 0, moveCount)]);
7479
7519
  };
7480
7520
  const handleDeleteRangeMoveLeft = (param, targetRange) => {
7481
7521
  var _param$params13;
@@ -7505,23 +7545,11 @@ const handleDeleteRangeMoveLeftCommon = (param, targetRange) => {
7505
7545
  endColumn: Number.POSITIVE_INFINITY
7506
7546
  };
7507
7547
  const moveCount = range.endColumn - range.startColumn + 1;
7508
- const targetDeleteRange = getIntersectRange(range, targetRange);
7509
7548
  const noMoveRanges = Rectangle.subtract(targetRange, rightRange);
7510
7549
  const targetMoveRange = getIntersectRange(rightRange, targetRange);
7511
- if (!targetDeleteRange && !targetMoveRange) return [targetRange];
7512
- const matrix = new ObjectMatrix();
7513
- targetMoveRange && Range.foreach(targetMoveRange, (row, col) => {
7514
- matrix.setValue(row, col - moveCount, 1);
7515
- });
7516
- targetDeleteRange && Range.foreach(targetDeleteRange, (row, col) => {
7517
- matrix.setValue(row, col - moveCount, 0);
7518
- });
7519
- noMoveRanges.forEach((noMoveRange) => {
7520
- Range.foreach(noMoveRange, (row, col) => {
7521
- matrix.setValue(row, col, 1);
7522
- });
7523
- });
7524
- return queryObjectMatrix(matrix, (v) => v === 1);
7550
+ if (!targetMoveRange) return [targetRange];
7551
+ const movedRanges = targetMoveRange ? Rectangle.subtract(targetMoveRange, range).map((target) => translateRange(target, 0, -moveCount)) : [];
7552
+ return mergeAndSortRanges([...noMoveRanges, ...movedRanges]);
7525
7553
  };
7526
7554
  const handleDeleteRangeMoveUp = (param, targetRange) => {
7527
7555
  var _param$params15;
@@ -7550,23 +7578,11 @@ const handleDeleteRangeMoveUpCommon = (param, targetRange) => {
7550
7578
  endRow: Number.POSITIVE_INFINITY
7551
7579
  };
7552
7580
  const moveCount = range.endRow - range.startRow + 1;
7553
- const targetDeleteRange = getIntersectRange(range, targetRange);
7554
7581
  const noMoveRanges = Rectangle.subtract(targetRange, bottomRange);
7555
7582
  const targetMoveRange = getIntersectRange(bottomRange, targetRange);
7556
- if (!targetDeleteRange && !targetMoveRange) return [targetRange];
7557
- const matrix = new ObjectMatrix();
7558
- targetMoveRange && Range.foreach(targetMoveRange, (row, col) => {
7559
- matrix.setValue(row - moveCount, col, 1);
7560
- });
7561
- targetDeleteRange && Range.foreach(targetDeleteRange, (row, col) => {
7562
- matrix.setValue(row - moveCount, col, 0);
7563
- });
7564
- noMoveRanges.forEach((noMoveRange) => {
7565
- Range.foreach(noMoveRange, (row, col) => {
7566
- matrix.setValue(row, col, 1);
7567
- });
7568
- });
7569
- return queryObjectMatrix(matrix, (v) => v === 1);
7583
+ if (!targetMoveRange) return [targetRange];
7584
+ const movedRanges = targetMoveRange ? Rectangle.subtract(targetMoveRange, range).map((target) => translateRange(target, -moveCount, 0)) : [];
7585
+ return mergeAndSortRanges([...noMoveRanges, ...movedRanges]);
7570
7586
  };
7571
7587
  const handleRemoveRowCommon = (param, targetRange) => {
7572
7588
  const mergedRemoved = mergeIntervals((param.ranges ?? [param.range]).map((range) => [range.startRow, range.endRow]));
@@ -13896,7 +13912,7 @@ const SetFrozenCommand = {
13896
13912
  if (!target) return false;
13897
13913
  const { unitId, subUnitId, worksheet } = target;
13898
13914
  const { startColumn, startRow, xSplit, ySplit } = params;
13899
- if (startRow >= worksheet.getRowCount() || startColumn >= worksheet.getColumnCount() || xSplit >= worksheet.getColumnCount() || ySplit >= worksheet.getRowCount()) return false;
13915
+ if (!Number.isInteger(startRow) || !Number.isInteger(startColumn) || !Number.isInteger(xSplit) || !Number.isInteger(ySplit) || xSplit < 0 || ySplit < 0 || startRow >= worksheet.getRowCount() || startColumn >= worksheet.getColumnCount() || xSplit >= worksheet.getColumnCount() || ySplit >= worksheet.getRowCount()) return false;
13900
13916
  const redoMutationParams = {
13901
13917
  unitId,
13902
13918
  subUnitId,
@@ -16936,18 +16952,26 @@ const TextToNumberCommand = {
16936
16952
  const undoRedoService = accessor.get(IUndoRedoService);
16937
16953
  const { worksheet, unitId, subUnitId } = target;
16938
16954
  const newCellValue = new ObjectMatrix();
16955
+ const setNumfmtCells = [];
16939
16956
  const removeNumfmtRanges = [];
16940
16957
  for (let i = 0; i < ranges.length; i++) for (let r = ranges[i].startRow; r <= ranges[i].endRow; r++) for (let c = ranges[i].startColumn; c <= ranges[i].endColumn; c++) {
16941
16958
  var _worksheet$getStyleDa, _cell$s;
16942
16959
  if (newCellValue.getValue(r, c)) continue;
16943
16960
  const cell = worksheet.getCellRaw(r, c);
16944
16961
  const pattern = typeof (cell === null || cell === void 0 ? void 0 : cell.s) === "string" ? (_worksheet$getStyleDa = worksheet.getStyleDataByHash(cell.s)) === null || _worksheet$getStyleDa === void 0 || (_worksheet$getStyleDa = _worksheet$getStyleDa.n) === null || _worksheet$getStyleDa === void 0 ? void 0 : _worksheet$getStyleDa.pattern : cell === null || cell === void 0 || (_cell$s = cell.s) === null || _cell$s === void 0 || (_cell$s = _cell$s.n) === null || _cell$s === void 0 ? void 0 : _cell$s.pattern;
16945
- if (cell && cell.v && (cell.t !== CellValueType.NUMBER || isTextFormat(pattern)) && isRealNum(cell.v)) {
16962
+ const parsedValue = typeof (cell === null || cell === void 0 ? void 0 : cell.v) === "string" ? getNumfmtParseValueFilter(cell.v) : null;
16963
+ const numberValue = isRealNum(cell === null || cell === void 0 ? void 0 : cell.v) ? Number(cell === null || cell === void 0 ? void 0 : cell.v) : typeof (parsedValue === null || parsedValue === void 0 ? void 0 : parsedValue.v) === "number" ? parsedValue.v : null;
16964
+ if (cell && cell.v && (cell.t !== CellValueType.NUMBER || isTextFormat(pattern)) && numberValue !== null) {
16946
16965
  newCellValue.setValue(r, c, {
16947
- v: Number(cell.v),
16966
+ v: numberValue,
16948
16967
  t: CellValueType.NUMBER
16949
16968
  });
16950
- if (isTextFormat(pattern)) removeNumfmtRanges.push({
16969
+ if ((parsedValue === null || parsedValue === void 0 ? void 0 : parsedValue.z) && (!pattern || isTextFormat(pattern))) setNumfmtCells.push({
16970
+ pattern: parsedValue.z,
16971
+ row: r,
16972
+ col: c
16973
+ });
16974
+ else if (isTextFormat(pattern)) removeNumfmtRanges.push({
16951
16975
  startRow: r,
16952
16976
  endRow: r,
16953
16977
  startColumn: c,
@@ -16968,6 +16992,14 @@ const TextToNumberCommand = {
16968
16992
  id: SetRangeValuesMutation.id,
16969
16993
  params: SetRangeValuesUndoMutationFactory(accessor, setRangeValuesMutationParams)
16970
16994
  }];
16995
+ if (setNumfmtCells.length) {
16996
+ const setNumfmtMutationParams = transformCellsToRange(unitId, subUnitId, setNumfmtCells);
16997
+ redos.push({
16998
+ id: SetNumfmtMutation.id,
16999
+ params: setNumfmtMutationParams
17000
+ });
17001
+ undos.push(...factorySetNumfmtUndoMutation(accessor, setNumfmtMutationParams));
17002
+ }
16971
17003
  if (removeNumfmtRanges.length) {
16972
17004
  const removeNumfmtMutationParams = {
16973
17005
  unitId,
@@ -18185,6 +18217,19 @@ let SheetPermissionCheckController = class SheetPermissionCheckController extend
18185
18217
  }, params.unitId, params.localSheetId);
18186
18218
  errorMsg = this._localeService.t("sheets.permission.dialog.editErr");
18187
18219
  break;
18220
+ case TextToNumberCommand.id:
18221
+ params = commandInfo.params;
18222
+ permission = this.permissionCheckWithRanges({
18223
+ workbookTypes: [WorkbookEditablePermission],
18224
+ worksheetTypes: [
18225
+ WorksheetSetCellValuePermission,
18226
+ WorksheetSetCellStylePermission,
18227
+ WorksheetEditPermission
18228
+ ],
18229
+ rangeTypes: [RangeProtectionPermissionEditPoint]
18230
+ }, params === null || params === void 0 ? void 0 : params.ranges, params === null || params === void 0 ? void 0 : params.unitId, params === null || params === void 0 ? void 0 : params.subUnitId);
18231
+ errorMsg = this._localeService.t("sheets.permission.dialog.editErr");
18232
+ break;
18188
18233
  default: break;
18189
18234
  }
18190
18235
  if (!permission) this.blockExecuteWithoutPermission(errorMsg);
@@ -19324,7 +19369,7 @@ RangeProtectionCache = __decorate([
19324
19369
  //#endregion
19325
19370
  //#region package.json
19326
19371
  var name = "@univerjs/sheets";
19327
- var version = "1.0.0-beta.0";
19372
+ var version = "1.0.0-beta.2";
19328
19373
 
19329
19374
  //#endregion
19330
19375
  //#region src/controllers/active-worksheet.controller.ts
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "سيؤدي الاستمرار في الدمج إلى الاحتفاظ بقيمة الخلية العلوية اليسرى فقط، وسيتم تجاهل القيم الأخرى. هل أنت متأكد من الاستمرار؟",
43
43
  cancel: "إلغاء الدمج",
44
44
  confirm: "الاستمرار في الدمج",
45
- warning: "تحذير",
46
- dismantleMergeCellWarning: "سيؤدي هذا إلى تقسيم بعض الخلايا المدمجة. هل تريد الاستمرار؟"
45
+ warning: "تحذير"
47
46
  } }
48
47
  } };
49
48
 
@@ -24,11 +24,11 @@ const locale = { sheets: {
24
24
  editErr: "L'interval està protegit i no teniu permís d'edició. Per editar, contacteu amb el creador.",
25
25
  formulaErr: "L'interval o l'interval referenciat està protegit, i no teniu permís d'edició. Per editar, contacteu amb el creador.",
26
26
  insertOrDeleteMoveRangeErr: "L'interval inserit o suprimit s'interseca amb l'interval protegit, i aquesta operació no és compatible per ara.",
27
- insertRowColErr: "L'interval está protegido y no tienes permiso para insertar filas y columnas. Para insertar filas y columnas, contacta con el creador.",
27
+ insertRowColErr: "L'interval està protegit i no teniu permís per inserir files i columnes. Per inserir files i columnes, contacteu amb el creador.",
28
28
  moveRangeErr: "L'interval està protegit i no teniu permís per moure la selecció. Per moure la selecció, contacteu amb el creador.",
29
29
  moveRowColErr: "L'interval està protegit i no teniu permís per moure files i columnes. Per moure files i columnes, contacteu amb el creador.",
30
30
  operatorSheetErr: "El full de càlcul està protegit i no teniu permís per operar-hi. Per operar al full de càlcul, contacteu amb el creador.",
31
- removeRowColErr: "L'interval está protegido y no tienes permiso para eliminar filas y columnas. Para eliminar filas y columnas, contacta con el creador.",
31
+ removeRowColErr: "L'interval està protegit i no teniu permís per suprimir files i columnes. Per suprimir files i columnes, contacteu amb el creador.",
32
32
  setRowColStyleErr: "L'interval està protegit i no teniu permís per establir estils de fila i columna. Per establir estils de fila i columna, contacteu amb el creador.",
33
33
  setStyleErr: "L'interval està protegit i no teniu permís per establir estils. Per establir estils, contacteu amb el creador."
34
34
  } },
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "Continuar la fusió només conservarà el valor de la cel·la superior esquerra, descartant els altres valors. Estàs segur de continuar?",
43
43
  cancel: "Cancel·lar fusió",
44
44
  confirm: "Continuar fusió",
45
- warning: "Avís",
46
- dismantleMergeCellWarning: "Això dividirà algunes cel·les fusionades. Vols continuar?"
45
+ warning: "Avís"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "Beim Fortfahren mit dem Zusammenführen bleibt nur der Wert der oberen linken Zelle erhalten, andere Werte werden verworfen. Möchten Sie wirklich fortfahren?",
43
43
  cancel: "Zusammenführen abbrechen",
44
44
  confirm: "Zusammenführen fortsetzen",
45
- warning: "Warnung",
46
- dismantleMergeCellWarning: "Dadurch werden einige verbundene Zellen aufgeteilt. Möchten Sie fortfahren?"
45
+ warning: "Warnung"
47
46
  } }
48
47
  } };
49
48
 
@@ -57,8 +57,7 @@ const locale = { sheets: {
57
57
  title: "Continue merging would only keep the upper-left cell value, discard other values. Are you sure to continue?",
58
58
  cancel: "Cancel merging",
59
59
  confirm: "Continue merging",
60
- warning: "Warning",
61
- dismantleMergeCellWarning: "This will cause some merged cells to be split. Do you want to continue?"
60
+ warning: "Warning"
62
61
  } }
63
62
  } };
64
63
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "Continuar la fusión solo conservará el valor de la celda superior izquierda, descartando los otros valores. ¿Estás seguro de continuar?",
43
43
  cancel: "Cancelar fusión",
44
44
  confirm: "Continuar fusión",
45
- warning: "Advertencia",
46
- dismantleMergeCellWarning: "Esto dividirá algunas celdas fusionadas. ¿Quieres continuar?"
45
+ warning: "Advertencia"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "ادغام ادامه‌دار فقط مقدار سلول بالا-چپ را حفظ می‌کند و سایر مقادیر را حذف می‌کند. آیا مطمئن هستید که ادامه می‌دهید؟",
43
43
  cancel: "لغو ادغام",
44
44
  confirm: "ادغام ادامه‌دار",
45
- warning: "هشدار",
46
- dismantleMergeCellWarning: "این باعث تقسیم برخی سلول‌های ادغام‌شده می‌شود. آیا می‌خواهید ادامه دهید؟"
45
+ warning: "هشدار"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "Continuer la fusion ne conservera que la valeur de la cellule en haut à gauche, en supprimant les autres valeurs. Êtes-vous sûr de vouloir continuer ?",
43
43
  cancel: "Annuler la fusion",
44
44
  confirm: "Continuer la fusion",
45
- warning: "Avertissement",
46
- dismantleMergeCellWarning: "Cela divisera certaines cellules fusionnées. Voulez-vous continuer ?"
45
+ warning: "Avertissement"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "Melanjutkan penggabungan hanya akan menyimpan nilai sel kiri atas, membuang nilai lainnya. Apakah Anda yakin ingin melanjutkan?",
43
43
  cancel: "Batalkan penggabungan",
44
44
  confirm: "Lanjutkan penggabungan",
45
- warning: "Peringatan",
46
- dismantleMergeCellWarning: "Ini akan menyebabkan beberapa sel gabungan terpisah. Apakah Anda ingin melanjutkan?"
45
+ warning: "Peringatan"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "Continuando l'unione verrà mantenuto solo il valore della cella in alto a sinistra, scartando gli altri valori. Continuare?",
43
43
  cancel: "Annulla unione",
44
44
  confirm: "Continua unione",
45
- warning: "Avviso",
46
- dismantleMergeCellWarning: "Questo comporterà la divisione di alcune celle unite. Continuare?"
45
+ warning: "Avviso"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "結合を続行すると、左上のセルの値のみが保持され、他の値は破棄されます。続行しますか?",
43
43
  cancel: "結合をキャンセル",
44
44
  confirm: "結合を続行",
45
- warning: "警告",
46
- dismantleMergeCellWarning: "これにより、一部の結合セルが分割されます。続行しますか?"
45
+ warning: "警告"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "병합을 계속하면 왼쪽 상단 셀의 값만 유지되고 다른 값은 삭제됩니다. 계속하시겠습니까?",
43
43
  cancel: "병합 취소",
44
44
  confirm: "병합 계속",
45
- warning: "경고",
46
- dismantleMergeCellWarning: "일부 병합된 셀이 분할됩니다. 계속하시겠습니까?"
45
+ warning: "경고"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "Kontynuowanie scalania spowoduje zachowanie tylko wartości komórki w lewym górnym rogu, pozostałe wartości zostaną odrzucone. Czy na pewno chcesz kontynuować?",
43
43
  cancel: "Anuluj scalanie",
44
44
  confirm: "Kontynuuj scalanie",
45
- warning: "Ostrzeżenie",
46
- dismantleMergeCellWarning: "Spowoduje to rozdzielenie niektórych scalonych komórek. Czy chcesz kontynuować?"
45
+ warning: "Ostrzeżenie"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "Continuar a mesclagem manterá apenas o valor da célula superior esquerda, descartando os outros valores. Tem certeza de que deseja continuar?",
43
43
  cancel: "Cancelar mesclagem",
44
44
  confirm: "Continuar mesclagem",
45
- warning: "Aviso",
46
- dismantleMergeCellWarning: "Isso fará com que algumas células mescladas sejam divididas. Deseja continuar?"
45
+ warning: "Aviso"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "Продолжение объединения сохранит только значение верхней левой ячейки, остальные значения будут удалены. Вы уверены, что хотите продолжить?",
43
43
  cancel: "Отменить объединение",
44
44
  confirm: "Продолжить объединение",
45
- warning: "Предупреждение",
46
- dismantleMergeCellWarning: "Это приведет к разделению некоторых объединенных ячеек. Вы хотите продолжить?"
45
+ warning: "Предупреждение"
47
46
  } }
48
47
  } };
49
48
 
@@ -24,11 +24,11 @@ const locale = { sheets: {
24
24
  editErr: "Rozsah je chránený a nemáte oprávnenie na úpravy. Ak chcete upravovať, kontaktujte autora.",
25
25
  formulaErr: "Rozsah alebo referenčný rozsah je chránený a nemáte oprávnenie na úpravu. Ak chcete upravovať, kontaktujte autora.",
26
26
  insertOrDeleteMoveRangeErr: "Vložený alebo odstránený rozsah sa prekrýva s chráneným rozsahom a táto operácia zatiaľ nie je podporovaná.",
27
- insertRowColErr: "Rozsah je chránený a nemáte oprávnění pro vkládání řádků a sloupců. Pokud chcete vkládat řádky a sloupce, kontaktujte autora.",
27
+ insertRowColErr: "Rozsah je chránený a nemáte oprávnenie vkladať riadky a stĺpce. Ak chcete vložiť riadky a stĺpce, kontaktujte autora.",
28
28
  moveRangeErr: "Rozsah je chránený a nemáte oprávnenie presúvať výber. Ak chcete presúvať výber, kontaktujte autora.",
29
29
  moveRowColErr: "Rozsah je chránený a nemáte oprávnenie presúvať riadky a stĺpce. Ak chcete presúvať riadky a stĺpce, kontaktujte autora.",
30
30
  operatorSheetErr: "Hárok je chránený a nemáte oprávnenie pracovať s hárkom. Ak chcete pracovať s hárkom, kontaktujte autora.",
31
- removeRowColErr: "Rozsah je chránený a nemáte oprávnění pro odstraňování řádků a sloupců. Pokud chcete odstraňovat řádky a sloupce, kontaktujte autora.",
31
+ removeRowColErr: "Rozsah je chránený a nemáte oprávnenie odstraňovať riadky a stĺpce. Ak chcete odstrániť riadky a stĺpce, kontaktujte autora.",
32
32
  setRowColStyleErr: "Rozsah je chránený a nemáte oprávnenie nastavovať štýly riadkov a stĺpcov. Ak chcete nastavovať štýly riadkov a stĺpcov, kontaktujte autora.",
33
33
  setStyleErr: "Rozsah je chránený a nemáte oprávnenie nastavovať štýly. Ak chcete nastavovať štýly, kontaktujte autora."
34
34
  } },
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "Pokračovanie v zlúčení zachová iba hodnotu hornej ľavej bunky, ostatné hodnoty sa zahodia. Ste si istí, že chcete pokračovať?",
43
43
  cancel: "Zrušiť zlúčenie",
44
44
  confirm: "Pokračovať v zlúčení",
45
- warning: "Varovanie",
46
- dismantleMergeCellWarning: "To spôsobí rozdelenie niektorých zlúčených buniek. Chcete pokračovať?"
45
+ warning: "Varovanie"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "Tiếp tục hợp nhất chỉ giữ lại giá trị của ô trên cùng bên trái, loại bỏ các giá trị khác. Bạn có chắc chắn muốn tiếp tục không?",
43
43
  cancel: "Hủy hợp nhất",
44
44
  confirm: "Tiếp tục hợp nhất",
45
- warning: "Cảnh báo",
46
- dismantleMergeCellWarning: "Điều này sẽ khiến một số ô đã hợp nhất bị tách ra. Bạn có muốn tiếp tục không?"
45
+ warning: "Cảnh báo"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "继续合并将只保留左上角单元格的值,丢弃其他值。您确定要继续吗?",
43
43
  cancel: "取消合并",
44
44
  confirm: "继续合并",
45
- warning: "警告",
46
- dismantleMergeCellWarning: "这将导致一些合并单元格被拆分。您要继续吗?"
45
+ warning: "警告"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "繼續合併將只保留左上角儲存格的值,捨棄其他值。您確定要繼續嗎?",
43
43
  cancel: "取消合併",
44
44
  confirm: "繼續合併",
45
- warning: "警告",
46
- dismantleMergeCellWarning: "這將導致一些合併儲存格被拆分。您要繼續嗎?"
45
+ warning: "警告"
47
46
  } }
48
47
  } };
49
48
 
@@ -42,8 +42,7 @@ const locale = { sheets: {
42
42
  title: "繼續合併將只保留左上角儲存格的值,捨棄其他值。您確定要繼續嗎?",
43
43
  cancel: "取消合併",
44
44
  confirm: "繼續合併",
45
- warning: "警告",
46
- dismantleMergeCellWarning: "這將導致一些合併儲存格被拆分。您要繼續嗎?"
45
+ warning: "警告"
47
46
  } }
48
47
  } };
49
48