@odoo/o-spreadsheet 16.0.60 → 16.0.62

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.
@@ -1102,9 +1102,16 @@ function deepEquals(o1, o2) {
1102
1102
  }
1103
1103
  return true;
1104
1104
  }
1105
- /** Check if the given array contains all the values of the other array. */
1105
+ /**
1106
+ * Check if the given array contains all the values of the other array.
1107
+ * It makes the assumption that both array do not contain duplicates.
1108
+ */
1106
1109
  function includesAll(arr, values) {
1107
- return values.every((value) => arr.includes(value));
1110
+ if (arr.length < values.length) {
1111
+ return false;
1112
+ }
1113
+ const set = new Set(arr);
1114
+ return values.every((value) => set.has(value));
1108
1115
  }
1109
1116
  /**
1110
1117
  * Return an object with all the keys in the object that have a falsy value removed.
@@ -2379,6 +2386,37 @@ class UuidGenerator {
2379
2386
  setIsFastStrategy(isFast) {
2380
2387
  this.isFastIdStrategy = isFast;
2381
2388
  }
2389
+ /**
2390
+ * Generates a custom UUID using a simple 26^8 method (8-character alphanumeric string with lowercase letters)
2391
+ * This has a higher chance of collision than a UUIDv4, but not only faster to generate than an UUIDV4,
2392
+ * it also has a smaller size, which is preferable to alleviate the overall data size.
2393
+ *
2394
+ * This method is preferable when generating uuids for the core data (sheetId, figureId, etc)
2395
+ * as they will appear several times in the revisions and local history.
2396
+ *
2397
+ */
2398
+ smallUuid() {
2399
+ if (this.isFastIdStrategy) {
2400
+ this.fastIdStart++;
2401
+ return String(this.fastIdStart);
2402
+ //@ts-ignore
2403
+ }
2404
+ else if (window.crypto && window.crypto.getRandomValues) {
2405
+ //@ts-ignore
2406
+ return ([1e7] + -1e3).replace(/[018]/g, (c) => (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16));
2407
+ }
2408
+ else {
2409
+ // mainly for jest and other browsers that do not have the crypto functionality
2410
+ return "xxxxxxxx-xxxx".replace(/[xy]/g, function (c) {
2411
+ var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8;
2412
+ return v.toString(16);
2413
+ });
2414
+ }
2415
+ }
2416
+ /**
2417
+ * Generates an UUIDV4, has astronomically low chance of collision, but is larger in size than the smallUuid.
2418
+ * This method should be used when you need to avoid collisions at all costs, like the id of a revision.
2419
+ */
2382
2420
  uuidv4() {
2383
2421
  if (this.isFastIdStrategy) {
2384
2422
  this.fastIdStart++;
@@ -2492,17 +2530,20 @@ function toZoneWithoutBoundaryChanges(xc) {
2492
2530
  */
2493
2531
  function toUnboundedZone(xc) {
2494
2532
  const zone = toZoneWithoutBoundaryChanges(xc);
2533
+ reorderZone(zone);
2534
+ return zone;
2535
+ }
2536
+ function reorderZone(zone) {
2495
2537
  if (zone.right !== undefined && zone.right < zone.left) {
2496
- const tmp = zone.left;
2538
+ const right = zone.left;
2497
2539
  zone.left = zone.right;
2498
- zone.right = tmp;
2540
+ zone.right = right;
2499
2541
  }
2500
2542
  if (zone.bottom !== undefined && zone.bottom < zone.top) {
2501
- const tmp = zone.top;
2543
+ const bottom = zone.top;
2502
2544
  zone.top = zone.bottom;
2503
- zone.bottom = tmp;
2545
+ zone.bottom = bottom;
2504
2546
  }
2505
- return zone;
2506
2547
  }
2507
2548
  /**
2508
2549
  * Convert from a cartesian reference to a Zone.
@@ -3390,67 +3431,68 @@ exports.CommandResult = void 0;
3390
3431
  CommandResult[CommandResult["InvalidRange"] = 25] = "InvalidRange";
3391
3432
  CommandResult[CommandResult["InvalidZones"] = 26] = "InvalidZones";
3392
3433
  CommandResult[CommandResult["InvalidSheetId"] = 27] = "InvalidSheetId";
3393
- CommandResult[CommandResult["InputAlreadyFocused"] = 28] = "InputAlreadyFocused";
3394
- CommandResult[CommandResult["MaximumRangesReached"] = 29] = "MaximumRangesReached";
3395
- CommandResult[CommandResult["InvalidInputId"] = 30] = "InvalidInputId";
3396
- CommandResult[CommandResult["InvalidChartDefinition"] = 31] = "InvalidChartDefinition";
3397
- CommandResult[CommandResult["InvalidDataSet"] = 32] = "InvalidDataSet";
3398
- CommandResult[CommandResult["InvalidLabelRange"] = 33] = "InvalidLabelRange";
3399
- CommandResult[CommandResult["InvalidScorecardKeyValue"] = 34] = "InvalidScorecardKeyValue";
3400
- CommandResult[CommandResult["InvalidScorecardBaseline"] = 35] = "InvalidScorecardBaseline";
3401
- CommandResult[CommandResult["InvalidGaugeDataRange"] = 36] = "InvalidGaugeDataRange";
3402
- CommandResult[CommandResult["EmptyGaugeRangeMin"] = 37] = "EmptyGaugeRangeMin";
3403
- CommandResult[CommandResult["GaugeRangeMinNaN"] = 38] = "GaugeRangeMinNaN";
3404
- CommandResult[CommandResult["EmptyGaugeRangeMax"] = 39] = "EmptyGaugeRangeMax";
3405
- CommandResult[CommandResult["GaugeRangeMaxNaN"] = 40] = "GaugeRangeMaxNaN";
3406
- CommandResult[CommandResult["GaugeRangeMinBiggerThanRangeMax"] = 41] = "GaugeRangeMinBiggerThanRangeMax";
3407
- CommandResult[CommandResult["GaugeLowerInflectionPointNaN"] = 42] = "GaugeLowerInflectionPointNaN";
3408
- CommandResult[CommandResult["GaugeUpperInflectionPointNaN"] = 43] = "GaugeUpperInflectionPointNaN";
3409
- CommandResult[CommandResult["GaugeLowerBiggerThanUpper"] = 44] = "GaugeLowerBiggerThanUpper";
3410
- CommandResult[CommandResult["InvalidAutofillSelection"] = 45] = "InvalidAutofillSelection";
3411
- CommandResult[CommandResult["WrongComposerSelection"] = 46] = "WrongComposerSelection";
3412
- CommandResult[CommandResult["MinBiggerThanMax"] = 47] = "MinBiggerThanMax";
3413
- CommandResult[CommandResult["LowerBiggerThanUpper"] = 48] = "LowerBiggerThanUpper";
3414
- CommandResult[CommandResult["MidBiggerThanMax"] = 49] = "MidBiggerThanMax";
3415
- CommandResult[CommandResult["MinBiggerThanMid"] = 50] = "MinBiggerThanMid";
3416
- CommandResult[CommandResult["FirstArgMissing"] = 51] = "FirstArgMissing";
3417
- CommandResult[CommandResult["SecondArgMissing"] = 52] = "SecondArgMissing";
3418
- CommandResult[CommandResult["MinNaN"] = 53] = "MinNaN";
3419
- CommandResult[CommandResult["MidNaN"] = 54] = "MidNaN";
3420
- CommandResult[CommandResult["MaxNaN"] = 55] = "MaxNaN";
3421
- CommandResult[CommandResult["ValueUpperInflectionNaN"] = 56] = "ValueUpperInflectionNaN";
3422
- CommandResult[CommandResult["ValueLowerInflectionNaN"] = 57] = "ValueLowerInflectionNaN";
3423
- CommandResult[CommandResult["MinInvalidFormula"] = 58] = "MinInvalidFormula";
3424
- CommandResult[CommandResult["MidInvalidFormula"] = 59] = "MidInvalidFormula";
3425
- CommandResult[CommandResult["MaxInvalidFormula"] = 60] = "MaxInvalidFormula";
3426
- CommandResult[CommandResult["ValueUpperInvalidFormula"] = 61] = "ValueUpperInvalidFormula";
3427
- CommandResult[CommandResult["ValueLowerInvalidFormula"] = 62] = "ValueLowerInvalidFormula";
3428
- CommandResult[CommandResult["InvalidSortZone"] = 63] = "InvalidSortZone";
3429
- CommandResult[CommandResult["WaitingSessionConfirmation"] = 64] = "WaitingSessionConfirmation";
3430
- CommandResult[CommandResult["MergeOverlap"] = 65] = "MergeOverlap";
3431
- CommandResult[CommandResult["TooManyHiddenElements"] = 66] = "TooManyHiddenElements";
3432
- CommandResult[CommandResult["Readonly"] = 67] = "Readonly";
3433
- CommandResult[CommandResult["InvalidViewportSize"] = 68] = "InvalidViewportSize";
3434
- CommandResult[CommandResult["InvalidScrollingDirection"] = 69] = "InvalidScrollingDirection";
3435
- CommandResult[CommandResult["FigureDoesNotExist"] = 70] = "FigureDoesNotExist";
3436
- CommandResult[CommandResult["InvalidConditionalFormatId"] = 71] = "InvalidConditionalFormatId";
3437
- CommandResult[CommandResult["InvalidCellPopover"] = 72] = "InvalidCellPopover";
3438
- CommandResult[CommandResult["EmptyTarget"] = 73] = "EmptyTarget";
3439
- CommandResult[CommandResult["InvalidFreezeQuantity"] = 74] = "InvalidFreezeQuantity";
3440
- CommandResult[CommandResult["FrozenPaneOverlap"] = 75] = "FrozenPaneOverlap";
3441
- CommandResult[CommandResult["ValuesNotChanged"] = 76] = "ValuesNotChanged";
3442
- CommandResult[CommandResult["InvalidFilterZone"] = 77] = "InvalidFilterZone";
3443
- CommandResult[CommandResult["FilterOverlap"] = 78] = "FilterOverlap";
3444
- CommandResult[CommandResult["FilterNotFound"] = 79] = "FilterNotFound";
3445
- CommandResult[CommandResult["MergeInFilter"] = 80] = "MergeInFilter";
3446
- CommandResult[CommandResult["NonContinuousTargets"] = 81] = "NonContinuousTargets";
3447
- CommandResult[CommandResult["DuplicatedFigureId"] = 82] = "DuplicatedFigureId";
3448
- CommandResult[CommandResult["InvalidSelectionStep"] = 83] = "InvalidSelectionStep";
3449
- CommandResult[CommandResult["DuplicatedChartId"] = 84] = "DuplicatedChartId";
3450
- CommandResult[CommandResult["ChartDoesNotExist"] = 85] = "ChartDoesNotExist";
3451
- CommandResult[CommandResult["InvalidHeaderIndex"] = 86] = "InvalidHeaderIndex";
3452
- CommandResult[CommandResult["InvalidQuantity"] = 87] = "InvalidQuantity";
3453
- CommandResult[CommandResult["NoChanges"] = 88] = "NoChanges";
3434
+ CommandResult[CommandResult["InvalidCellId"] = 28] = "InvalidCellId";
3435
+ CommandResult[CommandResult["InputAlreadyFocused"] = 29] = "InputAlreadyFocused";
3436
+ CommandResult[CommandResult["MaximumRangesReached"] = 30] = "MaximumRangesReached";
3437
+ CommandResult[CommandResult["InvalidInputId"] = 31] = "InvalidInputId";
3438
+ CommandResult[CommandResult["InvalidChartDefinition"] = 32] = "InvalidChartDefinition";
3439
+ CommandResult[CommandResult["InvalidDataSet"] = 33] = "InvalidDataSet";
3440
+ CommandResult[CommandResult["InvalidLabelRange"] = 34] = "InvalidLabelRange";
3441
+ CommandResult[CommandResult["InvalidScorecardKeyValue"] = 35] = "InvalidScorecardKeyValue";
3442
+ CommandResult[CommandResult["InvalidScorecardBaseline"] = 36] = "InvalidScorecardBaseline";
3443
+ CommandResult[CommandResult["InvalidGaugeDataRange"] = 37] = "InvalidGaugeDataRange";
3444
+ CommandResult[CommandResult["EmptyGaugeRangeMin"] = 38] = "EmptyGaugeRangeMin";
3445
+ CommandResult[CommandResult["GaugeRangeMinNaN"] = 39] = "GaugeRangeMinNaN";
3446
+ CommandResult[CommandResult["EmptyGaugeRangeMax"] = 40] = "EmptyGaugeRangeMax";
3447
+ CommandResult[CommandResult["GaugeRangeMaxNaN"] = 41] = "GaugeRangeMaxNaN";
3448
+ CommandResult[CommandResult["GaugeRangeMinBiggerThanRangeMax"] = 42] = "GaugeRangeMinBiggerThanRangeMax";
3449
+ CommandResult[CommandResult["GaugeLowerInflectionPointNaN"] = 43] = "GaugeLowerInflectionPointNaN";
3450
+ CommandResult[CommandResult["GaugeUpperInflectionPointNaN"] = 44] = "GaugeUpperInflectionPointNaN";
3451
+ CommandResult[CommandResult["GaugeLowerBiggerThanUpper"] = 45] = "GaugeLowerBiggerThanUpper";
3452
+ CommandResult[CommandResult["InvalidAutofillSelection"] = 46] = "InvalidAutofillSelection";
3453
+ CommandResult[CommandResult["WrongComposerSelection"] = 47] = "WrongComposerSelection";
3454
+ CommandResult[CommandResult["MinBiggerThanMax"] = 48] = "MinBiggerThanMax";
3455
+ CommandResult[CommandResult["LowerBiggerThanUpper"] = 49] = "LowerBiggerThanUpper";
3456
+ CommandResult[CommandResult["MidBiggerThanMax"] = 50] = "MidBiggerThanMax";
3457
+ CommandResult[CommandResult["MinBiggerThanMid"] = 51] = "MinBiggerThanMid";
3458
+ CommandResult[CommandResult["FirstArgMissing"] = 52] = "FirstArgMissing";
3459
+ CommandResult[CommandResult["SecondArgMissing"] = 53] = "SecondArgMissing";
3460
+ CommandResult[CommandResult["MinNaN"] = 54] = "MinNaN";
3461
+ CommandResult[CommandResult["MidNaN"] = 55] = "MidNaN";
3462
+ CommandResult[CommandResult["MaxNaN"] = 56] = "MaxNaN";
3463
+ CommandResult[CommandResult["ValueUpperInflectionNaN"] = 57] = "ValueUpperInflectionNaN";
3464
+ CommandResult[CommandResult["ValueLowerInflectionNaN"] = 58] = "ValueLowerInflectionNaN";
3465
+ CommandResult[CommandResult["MinInvalidFormula"] = 59] = "MinInvalidFormula";
3466
+ CommandResult[CommandResult["MidInvalidFormula"] = 60] = "MidInvalidFormula";
3467
+ CommandResult[CommandResult["MaxInvalidFormula"] = 61] = "MaxInvalidFormula";
3468
+ CommandResult[CommandResult["ValueUpperInvalidFormula"] = 62] = "ValueUpperInvalidFormula";
3469
+ CommandResult[CommandResult["ValueLowerInvalidFormula"] = 63] = "ValueLowerInvalidFormula";
3470
+ CommandResult[CommandResult["InvalidSortZone"] = 64] = "InvalidSortZone";
3471
+ CommandResult[CommandResult["WaitingSessionConfirmation"] = 65] = "WaitingSessionConfirmation";
3472
+ CommandResult[CommandResult["MergeOverlap"] = 66] = "MergeOverlap";
3473
+ CommandResult[CommandResult["TooManyHiddenElements"] = 67] = "TooManyHiddenElements";
3474
+ CommandResult[CommandResult["Readonly"] = 68] = "Readonly";
3475
+ CommandResult[CommandResult["InvalidViewportSize"] = 69] = "InvalidViewportSize";
3476
+ CommandResult[CommandResult["InvalidScrollingDirection"] = 70] = "InvalidScrollingDirection";
3477
+ CommandResult[CommandResult["FigureDoesNotExist"] = 71] = "FigureDoesNotExist";
3478
+ CommandResult[CommandResult["InvalidConditionalFormatId"] = 72] = "InvalidConditionalFormatId";
3479
+ CommandResult[CommandResult["InvalidCellPopover"] = 73] = "InvalidCellPopover";
3480
+ CommandResult[CommandResult["EmptyTarget"] = 74] = "EmptyTarget";
3481
+ CommandResult[CommandResult["InvalidFreezeQuantity"] = 75] = "InvalidFreezeQuantity";
3482
+ CommandResult[CommandResult["FrozenPaneOverlap"] = 76] = "FrozenPaneOverlap";
3483
+ CommandResult[CommandResult["ValuesNotChanged"] = 77] = "ValuesNotChanged";
3484
+ CommandResult[CommandResult["InvalidFilterZone"] = 78] = "InvalidFilterZone";
3485
+ CommandResult[CommandResult["FilterOverlap"] = 79] = "FilterOverlap";
3486
+ CommandResult[CommandResult["FilterNotFound"] = 80] = "FilterNotFound";
3487
+ CommandResult[CommandResult["MergeInFilter"] = 81] = "MergeInFilter";
3488
+ CommandResult[CommandResult["NonContinuousTargets"] = 82] = "NonContinuousTargets";
3489
+ CommandResult[CommandResult["DuplicatedFigureId"] = 83] = "DuplicatedFigureId";
3490
+ CommandResult[CommandResult["InvalidSelectionStep"] = 84] = "InvalidSelectionStep";
3491
+ CommandResult[CommandResult["DuplicatedChartId"] = 85] = "DuplicatedChartId";
3492
+ CommandResult[CommandResult["ChartDoesNotExist"] = 86] = "ChartDoesNotExist";
3493
+ CommandResult[CommandResult["InvalidHeaderIndex"] = 87] = "InvalidHeaderIndex";
3494
+ CommandResult[CommandResult["InvalidQuantity"] = 88] = "InvalidQuantity";
3495
+ CommandResult[CommandResult["NoChanges"] = 89] = "NoChanges";
3454
3496
  })(exports.CommandResult || (exports.CommandResult = {}));
3455
3497
 
3456
3498
  function isMatrix(x) {
@@ -4980,7 +5022,7 @@ function interactiveSortSelection(env, sheetId, anchor, zone, sortDirection) {
4980
5022
  });
4981
5023
  }
4982
5024
  }
4983
- if (result.isCancelledBecause(63 /* CommandResult.InvalidSortZone */)) {
5025
+ if (result.isCancelledBecause(64 /* CommandResult.InvalidSortZone */)) {
4984
5026
  const { col, row } = anchor;
4985
5027
  env.model.selection.selectZone({ cell: { col, row }, zone });
4986
5028
  env.raiseError(_lt("Cannot sort. To sort, select only cells or only merges that have the same size."));
@@ -5003,13 +5045,13 @@ const AddFilterInteractiveContent = {
5003
5045
  };
5004
5046
  function interactiveAddFilter(env, sheetId, target) {
5005
5047
  const result = env.model.dispatch("CREATE_FILTER_TABLE", { target, sheetId });
5006
- if (result.isCancelledBecause(78 /* CommandResult.FilterOverlap */)) {
5048
+ if (result.isCancelledBecause(79 /* CommandResult.FilterOverlap */)) {
5007
5049
  env.raiseError(AddFilterInteractiveContent.filterOverlap);
5008
5050
  }
5009
- else if (result.isCancelledBecause(80 /* CommandResult.MergeInFilter */)) {
5051
+ else if (result.isCancelledBecause(81 /* CommandResult.MergeInFilter */)) {
5010
5052
  env.raiseError(AddFilterInteractiveContent.mergeInFilter);
5011
5053
  }
5012
- else if (result.isCancelledBecause(81 /* CommandResult.NonContinuousTargets */)) {
5054
+ else if (result.isCancelledBecause(82 /* CommandResult.NonContinuousTargets */)) {
5013
5055
  env.raiseError(AddFilterInteractiveContent.nonContinuousTargets);
5014
5056
  }
5015
5057
  }
@@ -5031,7 +5073,7 @@ function handlePasteResult(env, result) {
5031
5073
  else if (result.reasons.includes(22 /* CommandResult.WrongFigurePasteOption */)) {
5032
5074
  env.raiseError(PasteInteractiveContent.wrongFigurePasteOption);
5033
5075
  }
5034
- else if (result.reasons.includes(75 /* CommandResult.FrozenPaneOverlap */)) {
5076
+ else if (result.reasons.includes(76 /* CommandResult.FrozenPaneOverlap */)) {
5035
5077
  env.raiseError(PasteInteractiveContent.frozenPaneOverlap);
5036
5078
  }
5037
5079
  }
@@ -5536,7 +5578,7 @@ const UNHIDE_ROWS_ACTION = (env) => {
5536
5578
  const CREATE_SHEET_ACTION = (env) => {
5537
5579
  const activeSheetId = env.model.getters.getActiveSheetId();
5538
5580
  const position = env.model.getters.getSheetIds().indexOf(activeSheetId) + 1;
5539
- const sheetId = env.model.uuidGenerator.uuidv4();
5581
+ const sheetId = env.model.uuidGenerator.smallUuid();
5540
5582
  env.model.dispatch("CREATE_SHEET", { sheetId, position });
5541
5583
  env.model.dispatch("ACTIVATE_SHEET", { sheetIdFrom: activeSheetId, sheetIdTo: sheetId });
5542
5584
  };
@@ -5547,7 +5589,7 @@ const CREATE_CHART = (env) => {
5547
5589
  const getters = env.model.getters;
5548
5590
  const zone = getters.getSelectedZone();
5549
5591
  let dataSetZone = zone;
5550
- const id = env.model.uuidGenerator.uuidv4();
5592
+ const id = env.model.uuidGenerator.smallUuid();
5551
5593
  let labelRange;
5552
5594
  if (zone.left !== zone.right) {
5553
5595
  dataSetZone = { ...zone, left: zone.left + 1 };
@@ -6023,7 +6065,7 @@ sheetMenuRegistry
6023
6065
  name: _lt("Delete"),
6024
6066
  sequence: 10,
6025
6067
  isVisible: (env) => {
6026
- return env.model.getters.getSheetIds().length > 1;
6068
+ return env.model.getters.getVisibleSheetIds().length > 1;
6027
6069
  },
6028
6070
  action: (env) => env.askConfirmation(_lt("Are you sure you want to delete this sheet ?"), () => {
6029
6071
  env.model.dispatch("DELETE_SHEET", { sheetId: env.model.getters.getActiveSheetId() });
@@ -6034,7 +6076,7 @@ sheetMenuRegistry
6034
6076
  sequence: 20,
6035
6077
  action: (env) => {
6036
6078
  const sheetIdFrom = env.model.getters.getActiveSheetId();
6037
- const sheetIdTo = env.model.uuidGenerator.uuidv4();
6079
+ const sheetIdTo = env.model.uuidGenerator.smallUuid();
6038
6080
  env.model.dispatch("DUPLICATE_SHEET", {
6039
6081
  sheetId: sheetIdFrom,
6040
6082
  sheetIdTo,
@@ -6082,22 +6124,22 @@ sheetMenuRegistry
6082
6124
  const CfTerms = {
6083
6125
  Errors: {
6084
6126
  [25 /* CommandResult.InvalidRange */]: _lt("The range is invalid"),
6085
- [51 /* CommandResult.FirstArgMissing */]: _lt("The argument is missing. Please provide a value"),
6086
- [52 /* CommandResult.SecondArgMissing */]: _lt("The second argument is missing. Please provide a value"),
6087
- [53 /* CommandResult.MinNaN */]: _lt("The minpoint must be a number"),
6088
- [54 /* CommandResult.MidNaN */]: _lt("The midpoint must be a number"),
6089
- [55 /* CommandResult.MaxNaN */]: _lt("The maxpoint must be a number"),
6090
- [56 /* CommandResult.ValueUpperInflectionNaN */]: _lt("The first value must be a number"),
6091
- [57 /* CommandResult.ValueLowerInflectionNaN */]: _lt("The second value must be a number"),
6092
- [47 /* CommandResult.MinBiggerThanMax */]: _lt("Minimum must be smaller then Maximum"),
6093
- [50 /* CommandResult.MinBiggerThanMid */]: _lt("Minimum must be smaller then Midpoint"),
6094
- [49 /* CommandResult.MidBiggerThanMax */]: _lt("Midpoint must be smaller then Maximum"),
6095
- [48 /* CommandResult.LowerBiggerThanUpper */]: _lt("Lower inflection point must be smaller than upper inflection point"),
6096
- [58 /* CommandResult.MinInvalidFormula */]: _lt("Invalid Minpoint formula"),
6097
- [60 /* CommandResult.MaxInvalidFormula */]: _lt("Invalid Maxpoint formula"),
6098
- [59 /* CommandResult.MidInvalidFormula */]: _lt("Invalid Midpoint formula"),
6099
- [61 /* CommandResult.ValueUpperInvalidFormula */]: _lt("Invalid upper inflection point formula"),
6100
- [62 /* CommandResult.ValueLowerInvalidFormula */]: _lt("Invalid lower inflection point formula"),
6127
+ [52 /* CommandResult.FirstArgMissing */]: _lt("The argument is missing. Please provide a value"),
6128
+ [53 /* CommandResult.SecondArgMissing */]: _lt("The second argument is missing. Please provide a value"),
6129
+ [54 /* CommandResult.MinNaN */]: _lt("The minpoint must be a number"),
6130
+ [55 /* CommandResult.MidNaN */]: _lt("The midpoint must be a number"),
6131
+ [56 /* CommandResult.MaxNaN */]: _lt("The maxpoint must be a number"),
6132
+ [57 /* CommandResult.ValueUpperInflectionNaN */]: _lt("The first value must be a number"),
6133
+ [58 /* CommandResult.ValueLowerInflectionNaN */]: _lt("The second value must be a number"),
6134
+ [48 /* CommandResult.MinBiggerThanMax */]: _lt("Minimum must be smaller then Maximum"),
6135
+ [51 /* CommandResult.MinBiggerThanMid */]: _lt("Minimum must be smaller then Midpoint"),
6136
+ [50 /* CommandResult.MidBiggerThanMax */]: _lt("Midpoint must be smaller then Maximum"),
6137
+ [49 /* CommandResult.LowerBiggerThanUpper */]: _lt("Lower inflection point must be smaller than upper inflection point"),
6138
+ [59 /* CommandResult.MinInvalidFormula */]: _lt("Invalid Minpoint formula"),
6139
+ [61 /* CommandResult.MaxInvalidFormula */]: _lt("Invalid Maxpoint formula"),
6140
+ [60 /* CommandResult.MidInvalidFormula */]: _lt("Invalid Midpoint formula"),
6141
+ [62 /* CommandResult.ValueUpperInvalidFormula */]: _lt("Invalid upper inflection point formula"),
6142
+ [63 /* CommandResult.ValueLowerInvalidFormula */]: _lt("Invalid lower inflection point formula"),
6101
6143
  [24 /* CommandResult.EmptyRange */]: _lt("A range needs to be defined"),
6102
6144
  Unexpected: _lt("The rule is invalid for an unknown reason"),
6103
6145
  },
@@ -6125,20 +6167,20 @@ const ChartTerms = {
6125
6167
  Errors: {
6126
6168
  Unexpected: _lt("The chart definition is invalid for an unknown reason"),
6127
6169
  // BASIC CHART ERRORS (LINE | BAR | PIE)
6128
- [32 /* CommandResult.InvalidDataSet */]: _lt("The dataset is invalid"),
6129
- [33 /* CommandResult.InvalidLabelRange */]: _lt("Labels are invalid"),
6170
+ [33 /* CommandResult.InvalidDataSet */]: _lt("The dataset is invalid"),
6171
+ [34 /* CommandResult.InvalidLabelRange */]: _lt("Labels are invalid"),
6130
6172
  // SCORECARD CHART ERRORS
6131
- [34 /* CommandResult.InvalidScorecardKeyValue */]: _lt("The key value is invalid"),
6132
- [35 /* CommandResult.InvalidScorecardBaseline */]: _lt("The baseline value is invalid"),
6173
+ [35 /* CommandResult.InvalidScorecardKeyValue */]: _lt("The key value is invalid"),
6174
+ [36 /* CommandResult.InvalidScorecardBaseline */]: _lt("The baseline value is invalid"),
6133
6175
  // GAUGE CHART ERRORS
6134
- [36 /* CommandResult.InvalidGaugeDataRange */]: _lt("The data range is invalid"),
6135
- [37 /* CommandResult.EmptyGaugeRangeMin */]: _lt("A minimum range limit value is needed"),
6136
- [38 /* CommandResult.GaugeRangeMinNaN */]: _lt("The minimum range limit value must be a number"),
6137
- [39 /* CommandResult.EmptyGaugeRangeMax */]: _lt("A maximum range limit value is needed"),
6138
- [40 /* CommandResult.GaugeRangeMaxNaN */]: _lt("The maximum range limit value must be a number"),
6139
- [41 /* CommandResult.GaugeRangeMinBiggerThanRangeMax */]: _lt("Minimum range limit must be smaller than maximum range limit"),
6140
- [42 /* CommandResult.GaugeLowerInflectionPointNaN */]: _lt("The lower inflection point value must be a number"),
6141
- [43 /* CommandResult.GaugeUpperInflectionPointNaN */]: _lt("The upper inflection point value must be a number"),
6176
+ [37 /* CommandResult.InvalidGaugeDataRange */]: _lt("The data range is invalid"),
6177
+ [38 /* CommandResult.EmptyGaugeRangeMin */]: _lt("A minimum range limit value is needed"),
6178
+ [39 /* CommandResult.GaugeRangeMinNaN */]: _lt("The minimum range limit value must be a number"),
6179
+ [40 /* CommandResult.EmptyGaugeRangeMax */]: _lt("A maximum range limit value is needed"),
6180
+ [41 /* CommandResult.GaugeRangeMaxNaN */]: _lt("The maximum range limit value must be a number"),
6181
+ [42 /* CommandResult.GaugeRangeMinBiggerThanRangeMax */]: _lt("Minimum range limit must be smaller than maximum range limit"),
6182
+ [43 /* CommandResult.GaugeLowerInflectionPointNaN */]: _lt("The lower inflection point value must be a number"),
6183
+ [44 /* CommandResult.GaugeUpperInflectionPointNaN */]: _lt("The upper inflection point value must be a number"),
6142
6184
  },
6143
6185
  };
6144
6186
  const NumberFormatTerms = {
@@ -6162,7 +6204,7 @@ function interactiveFreezeColumnsRows(env, dimension, base) {
6162
6204
  const sheetId = env.model.getters.getActiveSheetId();
6163
6205
  const cmd = dimension === "COL" ? "FREEZE_COLUMNS" : "FREEZE_ROWS";
6164
6206
  const result = env.model.dispatch(cmd, { sheetId, quantity: base });
6165
- if (result.isCancelledBecause(65 /* CommandResult.MergeOverlap */)) {
6207
+ if (result.isCancelledBecause(66 /* CommandResult.MergeOverlap */)) {
6166
6208
  env.raiseError(MergeErrorMessage);
6167
6209
  }
6168
6210
  }
@@ -6673,7 +6715,7 @@ css /* scss */ `
6673
6715
  class SelectionInput extends owl.Component {
6674
6716
  constructor() {
6675
6717
  super(...arguments);
6676
- this.id = uuidGenerator$1.uuidv4();
6718
+ this.id = uuidGenerator$1.smallUuid();
6677
6719
  this.previousRanges = this.props.ranges || [];
6678
6720
  this.originSheet = this.env.model.getters.getActiveSheetId();
6679
6721
  this.state = owl.useState({
@@ -6808,11 +6850,11 @@ class LineBarPieConfigPanel extends owl.Component {
6808
6850
  }
6809
6851
  get isDatasetInvalid() {
6810
6852
  var _a;
6811
- return !!((_a = this.state.datasetDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(32 /* CommandResult.InvalidDataSet */));
6853
+ return !!((_a = this.state.datasetDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(33 /* CommandResult.InvalidDataSet */));
6812
6854
  }
6813
6855
  get isLabelInvalid() {
6814
6856
  var _a;
6815
- return !!((_a = this.state.labelsDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(33 /* CommandResult.InvalidLabelRange */));
6857
+ return !!((_a = this.state.labelsDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(34 /* CommandResult.InvalidLabelRange */));
6816
6858
  }
6817
6859
  onUpdateDataSetsHaveTitle(ev) {
6818
6860
  this.props.updateChart(this.props.figureId, {
@@ -7156,11 +7198,11 @@ function checkDataset(definition) {
7156
7198
  if (definition.dataSets) {
7157
7199
  const invalidRanges = definition.dataSets.find((range) => !rangeReference.test(range)) !== undefined;
7158
7200
  if (invalidRanges) {
7159
- return 32 /* CommandResult.InvalidDataSet */;
7201
+ return 33 /* CommandResult.InvalidDataSet */;
7160
7202
  }
7161
7203
  const zones = definition.dataSets.map(toUnboundedZone);
7162
7204
  if (zones.some((zone) => zone.top !== zone.bottom && isFullRow(zone))) {
7163
- return 32 /* CommandResult.InvalidDataSet */;
7205
+ return 33 /* CommandResult.InvalidDataSet */;
7164
7206
  }
7165
7207
  }
7166
7208
  return 0 /* CommandResult.Success */;
@@ -7169,7 +7211,7 @@ function checkLabelRange(definition) {
7169
7211
  if (definition.labelRange) {
7170
7212
  const invalidLabels = !rangeReference.test(definition.labelRange || "");
7171
7213
  if (invalidLabels) {
7172
- return 33 /* CommandResult.InvalidLabelRange */;
7214
+ return 34 /* CommandResult.InvalidLabelRange */;
7173
7215
  }
7174
7216
  }
7175
7217
  return 0 /* CommandResult.Success */;
@@ -7630,7 +7672,7 @@ chartRegistry.add("gauge", {
7630
7672
  });
7631
7673
  function isDataRangeValid(definition) {
7632
7674
  return definition.dataRange && !rangeReference.test(definition.dataRange)
7633
- ? 36 /* CommandResult.InvalidGaugeDataRange */
7675
+ ? 37 /* CommandResult.InvalidGaugeDataRange */
7634
7676
  : 0 /* CommandResult.Success */;
7635
7677
  }
7636
7678
  function checkRangeLimits(check, batchValidations) {
@@ -7662,7 +7704,7 @@ function checkInflectionPointsValue(check, batchValidations) {
7662
7704
  function checkRangeMinBiggerThanRangeMax(definition) {
7663
7705
  if (definition.sectionRule) {
7664
7706
  if (Number(definition.sectionRule.rangeMin) >= Number(definition.sectionRule.rangeMax)) {
7665
- return 41 /* CommandResult.GaugeRangeMinBiggerThanRangeMax */;
7707
+ return 42 /* CommandResult.GaugeRangeMinBiggerThanRangeMax */;
7666
7708
  }
7667
7709
  }
7668
7710
  return 0 /* CommandResult.Success */;
@@ -7671,9 +7713,9 @@ function checkEmpty(value, valueName) {
7671
7713
  if (value === "") {
7672
7714
  switch (valueName) {
7673
7715
  case "rangeMin":
7674
- return 37 /* CommandResult.EmptyGaugeRangeMin */;
7716
+ return 38 /* CommandResult.EmptyGaugeRangeMin */;
7675
7717
  case "rangeMax":
7676
- return 39 /* CommandResult.EmptyGaugeRangeMax */;
7718
+ return 40 /* CommandResult.EmptyGaugeRangeMax */;
7677
7719
  }
7678
7720
  }
7679
7721
  return 0 /* CommandResult.Success */;
@@ -7682,13 +7724,13 @@ function checkNaN(value, valueName) {
7682
7724
  if (isNaN(value)) {
7683
7725
  switch (valueName) {
7684
7726
  case "rangeMin":
7685
- return 38 /* CommandResult.GaugeRangeMinNaN */;
7727
+ return 39 /* CommandResult.GaugeRangeMinNaN */;
7686
7728
  case "rangeMax":
7687
- return 40 /* CommandResult.GaugeRangeMaxNaN */;
7729
+ return 41 /* CommandResult.GaugeRangeMaxNaN */;
7688
7730
  case "lowerInflectionPointValue":
7689
- return 42 /* CommandResult.GaugeLowerInflectionPointNaN */;
7731
+ return 43 /* CommandResult.GaugeLowerInflectionPointNaN */;
7690
7732
  case "upperInflectionPointValue":
7691
- return 43 /* CommandResult.GaugeUpperInflectionPointNaN */;
7733
+ return 44 /* CommandResult.GaugeUpperInflectionPointNaN */;
7692
7734
  }
7693
7735
  }
7694
7736
  return 0 /* CommandResult.Success */;
@@ -8429,7 +8471,7 @@ function createPieChartRuntime(chart, getters) {
8429
8471
  const dataset = {
8430
8472
  label,
8431
8473
  data,
8432
- borderColor: "#FFFFFF",
8474
+ borderColor: chart.background || "#FFFFFF",
8433
8475
  backgroundColor,
8434
8476
  };
8435
8477
  config.data.datasets.push(dataset);
@@ -8448,12 +8490,12 @@ chartRegistry.add("scorecard", {
8448
8490
  });
8449
8491
  function checkKeyValue(definition) {
8450
8492
  return definition.keyValue && !rangeReference.test(definition.keyValue)
8451
- ? 34 /* CommandResult.InvalidScorecardKeyValue */
8493
+ ? 35 /* CommandResult.InvalidScorecardKeyValue */
8452
8494
  : 0 /* CommandResult.Success */;
8453
8495
  }
8454
8496
  function checkBaseline(definition) {
8455
8497
  return definition.baseline && !rangeReference.test(definition.baseline)
8456
- ? 35 /* CommandResult.InvalidScorecardBaseline */
8498
+ ? 36 /* CommandResult.InvalidScorecardBaseline */
8457
8499
  : 0 /* CommandResult.Success */;
8458
8500
  }
8459
8501
  class ScorecardChart$1 extends AbstractChart {
@@ -8882,7 +8924,7 @@ class GaugeChartConfigPanel extends owl.Component {
8882
8924
  }
8883
8925
  get isDataRangeInvalid() {
8884
8926
  var _a;
8885
- return !!((_a = this.state.dataRangeDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(36 /* CommandResult.InvalidGaugeDataRange */));
8927
+ return !!((_a = this.state.dataRangeDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(37 /* CommandResult.InvalidGaugeDataRange */));
8886
8928
  }
8887
8929
  onDataRangeChanged(ranges) {
8888
8930
  this.dataRange = ranges[0];
@@ -8969,28 +9011,28 @@ class GaugeChartDesignPanel extends owl.Component {
8969
9011
  }
8970
9012
  isRangeMinInvalid() {
8971
9013
  var _a, _b, _c;
8972
- return !!(((_a = this.state.sectionRuleDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(37 /* CommandResult.EmptyGaugeRangeMin */)) ||
8973
- ((_b = this.state.sectionRuleDispatchResult) === null || _b === void 0 ? void 0 : _b.isCancelledBecause(38 /* CommandResult.GaugeRangeMinNaN */)) ||
8974
- ((_c = this.state.sectionRuleDispatchResult) === null || _c === void 0 ? void 0 : _c.isCancelledBecause(41 /* CommandResult.GaugeRangeMinBiggerThanRangeMax */)));
9014
+ return !!(((_a = this.state.sectionRuleDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(38 /* CommandResult.EmptyGaugeRangeMin */)) ||
9015
+ ((_b = this.state.sectionRuleDispatchResult) === null || _b === void 0 ? void 0 : _b.isCancelledBecause(39 /* CommandResult.GaugeRangeMinNaN */)) ||
9016
+ ((_c = this.state.sectionRuleDispatchResult) === null || _c === void 0 ? void 0 : _c.isCancelledBecause(42 /* CommandResult.GaugeRangeMinBiggerThanRangeMax */)));
8975
9017
  }
8976
9018
  isRangeMaxInvalid() {
8977
9019
  var _a, _b, _c;
8978
- return !!(((_a = this.state.sectionRuleDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(39 /* CommandResult.EmptyGaugeRangeMax */)) ||
8979
- ((_b = this.state.sectionRuleDispatchResult) === null || _b === void 0 ? void 0 : _b.isCancelledBecause(40 /* CommandResult.GaugeRangeMaxNaN */)) ||
8980
- ((_c = this.state.sectionRuleDispatchResult) === null || _c === void 0 ? void 0 : _c.isCancelledBecause(41 /* CommandResult.GaugeRangeMinBiggerThanRangeMax */)));
9020
+ return !!(((_a = this.state.sectionRuleDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(40 /* CommandResult.EmptyGaugeRangeMax */)) ||
9021
+ ((_b = this.state.sectionRuleDispatchResult) === null || _b === void 0 ? void 0 : _b.isCancelledBecause(41 /* CommandResult.GaugeRangeMaxNaN */)) ||
9022
+ ((_c = this.state.sectionRuleDispatchResult) === null || _c === void 0 ? void 0 : _c.isCancelledBecause(42 /* CommandResult.GaugeRangeMinBiggerThanRangeMax */)));
8981
9023
  }
8982
9024
  // ---------------------------------------------------------------------------
8983
9025
  // COLOR_SECTION_TEMPLATE
8984
9026
  // ---------------------------------------------------------------------------
8985
9027
  get isLowerInflectionPointInvalid() {
8986
9028
  var _a, _b;
8987
- return !!(((_a = this.state.sectionRuleDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(42 /* CommandResult.GaugeLowerInflectionPointNaN */)) ||
8988
- ((_b = this.state.sectionRuleDispatchResult) === null || _b === void 0 ? void 0 : _b.isCancelledBecause(44 /* CommandResult.GaugeLowerBiggerThanUpper */)));
9029
+ return !!(((_a = this.state.sectionRuleDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(43 /* CommandResult.GaugeLowerInflectionPointNaN */)) ||
9030
+ ((_b = this.state.sectionRuleDispatchResult) === null || _b === void 0 ? void 0 : _b.isCancelledBecause(45 /* CommandResult.GaugeLowerBiggerThanUpper */)));
8989
9031
  }
8990
9032
  get isUpperInflectionPointInvalid() {
8991
9033
  var _a, _b;
8992
- return !!(((_a = this.state.sectionRuleDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(43 /* CommandResult.GaugeUpperInflectionPointNaN */)) ||
8993
- ((_b = this.state.sectionRuleDispatchResult) === null || _b === void 0 ? void 0 : _b.isCancelledBecause(44 /* CommandResult.GaugeLowerBiggerThanUpper */)));
9034
+ return !!(((_a = this.state.sectionRuleDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(44 /* CommandResult.GaugeUpperInflectionPointNaN */)) ||
9035
+ ((_b = this.state.sectionRuleDispatchResult) === null || _b === void 0 ? void 0 : _b.isCancelledBecause(45 /* CommandResult.GaugeLowerBiggerThanUpper */)));
8994
9036
  }
8995
9037
  updateInflectionPointValue(attr, ev) {
8996
9038
  const sectionRule = deepCopy(this.props.definition.sectionRule);
@@ -9093,11 +9135,11 @@ class ScorecardChartConfigPanel extends owl.Component {
9093
9135
  }
9094
9136
  get isKeyValueInvalid() {
9095
9137
  var _a;
9096
- return !!((_a = this.state.keyValueDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(34 /* CommandResult.InvalidScorecardKeyValue */));
9138
+ return !!((_a = this.state.keyValueDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(35 /* CommandResult.InvalidScorecardKeyValue */));
9097
9139
  }
9098
9140
  get isBaselineInvalid() {
9099
9141
  var _a;
9100
- return !!((_a = this.state.keyValueDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(35 /* CommandResult.InvalidScorecardBaseline */));
9142
+ return !!((_a = this.state.keyValueDispatchResult) === null || _a === void 0 ? void 0 : _a.isCancelledBecause(36 /* CommandResult.InvalidScorecardBaseline */));
9101
9143
  }
9102
9144
  onKeyValueRangeChanged(ranges) {
9103
9145
  this.keyValue = ranges[0];
@@ -9790,7 +9832,7 @@ class ConditionalFormattingPanel extends owl.Component {
9790
9832
  rule: this.getEditorRule(),
9791
9833
  id: this.state.mode === "edit"
9792
9834
  ? this.state.currentCF.id
9793
- : this.env.model.uuidGenerator.uuidv4(),
9835
+ : this.env.model.uuidGenerator.smallUuid(),
9794
9836
  },
9795
9837
  ranges: this.state.currentCF.ranges.map((xc) => this.env.model.getters.getRangeDataFromXc(sheetId, xc)),
9796
9838
  sheetId,
@@ -9858,7 +9900,7 @@ class ConditionalFormattingPanel extends owl.Component {
9858
9900
  this.state.mode = "add";
9859
9901
  this.state.currentCFType = "CellIsRule";
9860
9902
  this.state.currentCF = {
9861
- id: this.env.model.uuidGenerator.uuidv4(),
9903
+ id: this.env.model.uuidGenerator.smallUuid(),
9862
9904
  ranges: this.env.model.getters
9863
9905
  .getSelectedZones()
9864
9906
  .map((zone) => this.env.model.getters.zoneToXC(this.env.model.getters.getActiveSheetId(), zone)),
@@ -9937,11 +9979,11 @@ class ConditionalFormattingPanel extends owl.Component {
9937
9979
  ****************************************************************************/
9938
9980
  get isValue1Invalid() {
9939
9981
  var _a;
9940
- return !!((_a = this.state.errors) === null || _a === void 0 ? void 0 : _a.includes(51 /* CommandResult.FirstArgMissing */));
9982
+ return !!((_a = this.state.errors) === null || _a === void 0 ? void 0 : _a.includes(52 /* CommandResult.FirstArgMissing */));
9941
9983
  }
9942
9984
  get isValue2Invalid() {
9943
9985
  var _a;
9944
- return !!((_a = this.state.errors) === null || _a === void 0 ? void 0 : _a.includes(52 /* CommandResult.SecondArgMissing */));
9986
+ return !!((_a = this.state.errors) === null || _a === void 0 ? void 0 : _a.includes(53 /* CommandResult.SecondArgMissing */));
9945
9987
  }
9946
9988
  toggleStyle(tool) {
9947
9989
  const style = this.state.rules.cellIs.style;
@@ -9958,17 +10000,17 @@ class ConditionalFormattingPanel extends owl.Component {
9958
10000
  isValueInvalid(threshold) {
9959
10001
  switch (threshold) {
9960
10002
  case "minimum":
9961
- return (this.state.errors.includes(58 /* CommandResult.MinInvalidFormula */) ||
9962
- this.state.errors.includes(50 /* CommandResult.MinBiggerThanMid */) ||
9963
- this.state.errors.includes(47 /* CommandResult.MinBiggerThanMax */) ||
9964
- this.state.errors.includes(53 /* CommandResult.MinNaN */));
10003
+ return (this.state.errors.includes(59 /* CommandResult.MinInvalidFormula */) ||
10004
+ this.state.errors.includes(51 /* CommandResult.MinBiggerThanMid */) ||
10005
+ this.state.errors.includes(48 /* CommandResult.MinBiggerThanMax */) ||
10006
+ this.state.errors.includes(54 /* CommandResult.MinNaN */));
9965
10007
  case "midpoint":
9966
- return (this.state.errors.includes(59 /* CommandResult.MidInvalidFormula */) ||
9967
- this.state.errors.includes(54 /* CommandResult.MidNaN */) ||
9968
- this.state.errors.includes(49 /* CommandResult.MidBiggerThanMax */));
10008
+ return (this.state.errors.includes(60 /* CommandResult.MidInvalidFormula */) ||
10009
+ this.state.errors.includes(55 /* CommandResult.MidNaN */) ||
10010
+ this.state.errors.includes(50 /* CommandResult.MidBiggerThanMax */));
9969
10011
  case "maximum":
9970
- return (this.state.errors.includes(60 /* CommandResult.MaxInvalidFormula */) ||
9971
- this.state.errors.includes(55 /* CommandResult.MaxNaN */));
10012
+ return (this.state.errors.includes(61 /* CommandResult.MaxInvalidFormula */) ||
10013
+ this.state.errors.includes(56 /* CommandResult.MaxNaN */));
9972
10014
  default:
9973
10015
  return false;
9974
10016
  }
@@ -10020,13 +10062,13 @@ class ConditionalFormattingPanel extends owl.Component {
10020
10062
  isInflectionPointInvalid(inflectionPoint) {
10021
10063
  switch (inflectionPoint) {
10022
10064
  case "lowerInflectionPoint":
10023
- return (this.state.errors.includes(57 /* CommandResult.ValueLowerInflectionNaN */) ||
10024
- this.state.errors.includes(62 /* CommandResult.ValueLowerInvalidFormula */) ||
10025
- this.state.errors.includes(48 /* CommandResult.LowerBiggerThanUpper */));
10065
+ return (this.state.errors.includes(58 /* CommandResult.ValueLowerInflectionNaN */) ||
10066
+ this.state.errors.includes(63 /* CommandResult.ValueLowerInvalidFormula */) ||
10067
+ this.state.errors.includes(49 /* CommandResult.LowerBiggerThanUpper */));
10026
10068
  case "upperInflectionPoint":
10027
- return (this.state.errors.includes(56 /* CommandResult.ValueUpperInflectionNaN */) ||
10028
- this.state.errors.includes(61 /* CommandResult.ValueUpperInvalidFormula */) ||
10029
- this.state.errors.includes(48 /* CommandResult.LowerBiggerThanUpper */));
10069
+ return (this.state.errors.includes(57 /* CommandResult.ValueUpperInflectionNaN */) ||
10070
+ this.state.errors.includes(62 /* CommandResult.ValueUpperInvalidFormula */) ||
10071
+ this.state.errors.includes(49 /* CommandResult.LowerBiggerThanUpper */));
10030
10072
  default:
10031
10073
  return true;
10032
10074
  }
@@ -10346,7 +10388,7 @@ class TopBarComponentRegistry extends Registry {
10346
10388
  this.uuidGenerator = new UuidGenerator();
10347
10389
  }
10348
10390
  add(name, value) {
10349
- const component = { ...value, id: this.uuidGenerator.uuidv4() };
10391
+ const component = { ...value, id: this.uuidGenerator.smallUuid() };
10350
10392
  return super.add(name, component);
10351
10393
  }
10352
10394
  }
@@ -12344,6 +12386,26 @@ const LN = {
12344
12386
  isExported: true,
12345
12387
  };
12346
12388
  // -----------------------------------------------------------------------------
12389
+ // LOG
12390
+ // -----------------------------------------------------------------------------
12391
+ const LOG = {
12392
+ description: _lt("The logarithm of a number, for a given base."),
12393
+ args: args(`
12394
+ value (number) ${_lt("The value for which to calculate the logarithm, base e.")}
12395
+ base (number, default=10) ${_lt("The base of the logarithm.")}
12396
+ `),
12397
+ returns: ["NUMBER"],
12398
+ compute: function (value, base = 10) {
12399
+ const _value = toNumber(value);
12400
+ const _base = toNumber(base);
12401
+ assert(() => _value > 0, _lt("The value (%s) must be strictly positive.", _value.toString()));
12402
+ assert(() => _base > 0, _lt("The base (%s) must be strictly positive.", _base.toString()));
12403
+ assert(() => _base !== 1, _lt("The base must be different from 1."));
12404
+ return Math.log10(_value) / Math.log10(_base);
12405
+ },
12406
+ isExported: true,
12407
+ };
12408
+ // -----------------------------------------------------------------------------
12347
12409
  // MOD
12348
12410
  // -----------------------------------------------------------------------------
12349
12411
  const MOD = {
@@ -12812,6 +12874,7 @@ var math = /*#__PURE__*/Object.freeze({
12812
12874
  ISO_CEILING: ISO_CEILING,
12813
12875
  ISODD: ISODD,
12814
12876
  LN: LN,
12877
+ LOG: LOG,
12815
12878
  MOD: MOD,
12816
12879
  ODD: ODD,
12817
12880
  PI: PI,
@@ -19688,7 +19751,7 @@ class EditionPlugin extends UIPlugin {
19688
19751
  validateSelection(length, start, end) {
19689
19752
  return start >= 0 && start <= length && end >= 0 && end <= length
19690
19753
  ? 0 /* CommandResult.Success */
19691
- : 46 /* CommandResult.WrongComposerSelection */;
19754
+ : 47 /* CommandResult.WrongComposerSelection */;
19692
19755
  }
19693
19756
  onColumnsRemoved(cmd) {
19694
19757
  if (cmd.elements.includes(this.col) && this.mode !== "inactive") {
@@ -27248,7 +27311,7 @@ function forceUnicityOfFigure(data) {
27248
27311
  for (const sheet of data.sheets || []) {
27249
27312
  for (const figure of sheet.figures || []) {
27250
27313
  if (figureIds.has(figure.id)) {
27251
- figure.id += uuidGenerator.uuidv4();
27314
+ figure.id += uuidGenerator.smallUuid();
27252
27315
  }
27253
27316
  figureIds.add(figure.id);
27254
27317
  }
@@ -27933,7 +27996,7 @@ class BordersPlugin extends CorePlugin {
27933
27996
  const currentBorder = this.getCellBorder(cmd.sheetId, cmd.col, cmd.row);
27934
27997
  const areAllNewBordersUndefined = !((_a = cmd.border) === null || _a === void 0 ? void 0 : _a.bottom) && !((_b = cmd.border) === null || _b === void 0 ? void 0 : _b.left) && !((_c = cmd.border) === null || _c === void 0 ? void 0 : _c.right) && !((_d = cmd.border) === null || _d === void 0 ? void 0 : _d.top);
27935
27998
  if ((!currentBorder && areAllNewBordersUndefined) || deepEquals(currentBorder, cmd.border)) {
27936
- return 88 /* CommandResult.NoChanges */;
27999
+ return 89 /* CommandResult.NoChanges */;
27937
28000
  }
27938
28001
  return 0 /* CommandResult.Success */;
27939
28002
  }
@@ -28039,11 +28102,16 @@ class CellPlugin extends CorePlugin {
28039
28102
  // Command Handling
28040
28103
  // ---------------------------------------------------------------------------
28041
28104
  allowDispatch(cmd) {
28105
+ var _a;
28042
28106
  switch (cmd.type) {
28043
28107
  case "UPDATE_CELL":
28044
28108
  return this.checkValidations(cmd, this.checkCellOutOfSheet, this.checkUselessUpdateCell);
28045
28109
  case "CLEAR_CELL":
28046
28110
  return this.checkValidations(cmd, this.checkCellOutOfSheet, this.checkUselessClearCell);
28111
+ case "UPDATE_CELL_POSITION":
28112
+ return !cmd.cellId || ((_a = this.cells[cmd.sheetId]) === null || _a === void 0 ? void 0 : _a[cmd.cellId])
28113
+ ? 0 /* CommandResult.Success */
28114
+ : 28 /* CommandResult.InvalidCellId */;
28047
28115
  default:
28048
28116
  return 0 /* CommandResult.Success */;
28049
28117
  }
@@ -28082,6 +28150,9 @@ class CellPlugin extends CorePlugin {
28082
28150
  format: "",
28083
28151
  });
28084
28152
  break;
28153
+ case "DELETE_SHEET": {
28154
+ this.history.update("cells", cmd.sheetId, undefined);
28155
+ }
28085
28156
  }
28086
28157
  }
28087
28158
  /**
@@ -28397,9 +28468,9 @@ class CellPlugin extends CorePlugin {
28397
28468
  checkUselessClearCell(cmd) {
28398
28469
  const cell = this.getters.getCell(cmd.sheetId, cmd.col, cmd.row);
28399
28470
  if (!cell)
28400
- return 88 /* CommandResult.NoChanges */;
28471
+ return 89 /* CommandResult.NoChanges */;
28401
28472
  if (!cell.content && !cell.style && !cell.format) {
28402
- return 88 /* CommandResult.NoChanges */;
28473
+ return 89 /* CommandResult.NoChanges */;
28403
28474
  }
28404
28475
  return 0 /* CommandResult.Success */;
28405
28476
  }
@@ -28411,7 +28482,7 @@ class CellPlugin extends CorePlugin {
28411
28482
  if ((!hasContent || (cell === null || cell === void 0 ? void 0 : cell.content) === cmd.content) &&
28412
28483
  (!hasStyle || deepEquals(cell === null || cell === void 0 ? void 0 : cell.style, cmd.style)) &&
28413
28484
  (!hasFormat || (cell === null || cell === void 0 ? void 0 : cell.format) === cmd.format)) {
28414
- return 88 /* CommandResult.NoChanges */;
28485
+ return 89 /* CommandResult.NoChanges */;
28415
28486
  }
28416
28487
  return 0 /* CommandResult.Success */;
28417
28488
  }
@@ -28620,13 +28691,13 @@ class ChartPlugin extends CorePlugin {
28620
28691
  }
28621
28692
  checkChartDuplicate(cmd) {
28622
28693
  return this.getters.getFigureSheetId(cmd.id)
28623
- ? 84 /* CommandResult.DuplicatedChartId */
28694
+ ? 85 /* CommandResult.DuplicatedChartId */
28624
28695
  : 0 /* CommandResult.Success */;
28625
28696
  }
28626
28697
  checkChartExists(cmd) {
28627
28698
  return this.getters.getFigureSheetId(cmd.id)
28628
28699
  ? 0 /* CommandResult.Success */
28629
- : 85 /* CommandResult.ChartDoesNotExist */;
28700
+ : 86 /* CommandResult.ChartDoesNotExist */;
28630
28701
  }
28631
28702
  }
28632
28703
  ChartPlugin.getters = [
@@ -28834,10 +28905,10 @@ class ConditionalFormatPlugin extends CorePlugin {
28834
28905
  return 27 /* CommandResult.InvalidSheetId */;
28835
28906
  const ruleIndex = this.cfRules[sheetId].findIndex((cf) => cf.id === cfId);
28836
28907
  if (ruleIndex === -1)
28837
- return 71 /* CommandResult.InvalidConditionalFormatId */;
28908
+ return 72 /* CommandResult.InvalidConditionalFormatId */;
28838
28909
  const cfIndex2 = direction === "up" ? ruleIndex - 1 : ruleIndex + 1;
28839
28910
  if (cfIndex2 < 0 || cfIndex2 >= this.cfRules[sheetId].length) {
28840
- return 71 /* CommandResult.InvalidConditionalFormatId */;
28911
+ return 72 /* CommandResult.InvalidConditionalFormatId */;
28841
28912
  }
28842
28913
  return 0 /* CommandResult.Success */;
28843
28914
  }
@@ -28878,10 +28949,10 @@ class ConditionalFormatPlugin extends CorePlugin {
28878
28949
  const errors = [];
28879
28950
  const isEmpty = (value) => value === undefined || value === "";
28880
28951
  if (expectedNumber >= 1 && isEmpty(rule.values[0])) {
28881
- errors.push(51 /* CommandResult.FirstArgMissing */);
28952
+ errors.push(52 /* CommandResult.FirstArgMissing */);
28882
28953
  }
28883
28954
  if (expectedNumber >= 2 && isEmpty(rule.values[1])) {
28884
- errors.push(52 /* CommandResult.SecondArgMissing */);
28955
+ errors.push(53 /* CommandResult.SecondArgMissing */);
28885
28956
  }
28886
28957
  return errors.length ? errors : 0 /* CommandResult.Success */;
28887
28958
  }
@@ -28893,15 +28964,15 @@ class ConditionalFormatPlugin extends CorePlugin {
28893
28964
  (threshold.value === "" || isNaN(threshold.value))) {
28894
28965
  switch (thresholdName) {
28895
28966
  case "min":
28896
- return 53 /* CommandResult.MinNaN */;
28967
+ return 54 /* CommandResult.MinNaN */;
28897
28968
  case "max":
28898
- return 55 /* CommandResult.MaxNaN */;
28969
+ return 56 /* CommandResult.MaxNaN */;
28899
28970
  case "mid":
28900
- return 54 /* CommandResult.MidNaN */;
28971
+ return 55 /* CommandResult.MidNaN */;
28901
28972
  case "upperInflectionPoint":
28902
- return 56 /* CommandResult.ValueUpperInflectionNaN */;
28973
+ return 57 /* CommandResult.ValueUpperInflectionNaN */;
28903
28974
  case "lowerInflectionPoint":
28904
- return 57 /* CommandResult.ValueLowerInflectionNaN */;
28975
+ return 58 /* CommandResult.ValueLowerInflectionNaN */;
28905
28976
  }
28906
28977
  }
28907
28978
  return 0 /* CommandResult.Success */;
@@ -28915,15 +28986,15 @@ class ConditionalFormatPlugin extends CorePlugin {
28915
28986
  catch (error) {
28916
28987
  switch (thresholdName) {
28917
28988
  case "min":
28918
- return 58 /* CommandResult.MinInvalidFormula */;
28989
+ return 59 /* CommandResult.MinInvalidFormula */;
28919
28990
  case "max":
28920
- return 60 /* CommandResult.MaxInvalidFormula */;
28991
+ return 61 /* CommandResult.MaxInvalidFormula */;
28921
28992
  case "mid":
28922
- return 59 /* CommandResult.MidInvalidFormula */;
28993
+ return 60 /* CommandResult.MidInvalidFormula */;
28923
28994
  case "upperInflectionPoint":
28924
- return 61 /* CommandResult.ValueUpperInvalidFormula */;
28995
+ return 62 /* CommandResult.ValueUpperInvalidFormula */;
28925
28996
  case "lowerInflectionPoint":
28926
- return 62 /* CommandResult.ValueLowerInvalidFormula */;
28997
+ return 63 /* CommandResult.ValueLowerInvalidFormula */;
28927
28998
  }
28928
28999
  }
28929
29000
  return 0 /* CommandResult.Success */;
@@ -28940,7 +29011,7 @@ class ConditionalFormatPlugin extends CorePlugin {
28940
29011
  if (["number", "percentage", "percentile"].includes(rule.lowerInflectionPoint.type) &&
28941
29012
  rule.lowerInflectionPoint.type === rule.upperInflectionPoint.type &&
28942
29013
  Number(minValue) > Number(maxValue)) {
28943
- return 48 /* CommandResult.LowerBiggerThanUpper */;
29014
+ return 49 /* CommandResult.LowerBiggerThanUpper */;
28944
29015
  }
28945
29016
  return 0 /* CommandResult.Success */;
28946
29017
  }
@@ -28950,7 +29021,7 @@ class ConditionalFormatPlugin extends CorePlugin {
28950
29021
  if (["number", "percentage", "percentile"].includes(rule.minimum.type) &&
28951
29022
  rule.minimum.type === rule.maximum.type &&
28952
29023
  stringToNumber(minValue) >= stringToNumber(maxValue)) {
28953
- return 47 /* CommandResult.MinBiggerThanMax */;
29024
+ return 48 /* CommandResult.MinBiggerThanMax */;
28954
29025
  }
28955
29026
  return 0 /* CommandResult.Success */;
28956
29027
  }
@@ -28962,7 +29033,7 @@ class ConditionalFormatPlugin extends CorePlugin {
28962
29033
  ["number", "percentage", "percentile"].includes(rule.midpoint.type) &&
28963
29034
  rule.midpoint.type === rule.maximum.type &&
28964
29035
  stringToNumber(midValue) >= stringToNumber(maxValue)) {
28965
- return 49 /* CommandResult.MidBiggerThanMax */;
29036
+ return 50 /* CommandResult.MidBiggerThanMax */;
28966
29037
  }
28967
29038
  return 0 /* CommandResult.Success */;
28968
29039
  }
@@ -28974,7 +29045,7 @@ class ConditionalFormatPlugin extends CorePlugin {
28974
29045
  ["number", "percentage", "percentile"].includes(rule.midpoint.type) &&
28975
29046
  rule.minimum.type === rule.midpoint.type &&
28976
29047
  stringToNumber(minValue) >= stringToNumber(midValue)) {
28977
- return 50 /* CommandResult.MinBiggerThanMid */;
29048
+ return 51 /* CommandResult.MinBiggerThanMid */;
28978
29049
  }
28979
29050
  return 0 /* CommandResult.Success */;
28980
29051
  }
@@ -29084,13 +29155,13 @@ class FigurePlugin extends CorePlugin {
29084
29155
  checkFigureExists(sheetId, figureId) {
29085
29156
  var _a;
29086
29157
  if (((_a = this.figures[sheetId]) === null || _a === void 0 ? void 0 : _a[figureId]) === undefined) {
29087
- return 70 /* CommandResult.FigureDoesNotExist */;
29158
+ return 71 /* CommandResult.FigureDoesNotExist */;
29088
29159
  }
29089
29160
  return 0 /* CommandResult.Success */;
29090
29161
  }
29091
29162
  checkFigureDuplicate(figureId) {
29092
29163
  if (Object.values(this.figures).find((sheet) => sheet === null || sheet === void 0 ? void 0 : sheet[figureId])) {
29093
- return 82 /* CommandResult.DuplicatedFigureId */;
29164
+ return 83 /* CommandResult.DuplicatedFigureId */;
29094
29165
  }
29095
29166
  return 0 /* CommandResult.Success */;
29096
29167
  }
@@ -29138,10 +29209,10 @@ class FilterTable {
29138
29209
  this.filters = [];
29139
29210
  this.zone = zone;
29140
29211
  const uuid = new UuidGenerator();
29141
- this.id = uuid.uuidv4();
29212
+ this.id = uuid.smallUuid();
29142
29213
  for (const i of range(zone.left, zone.right + 1)) {
29143
29214
  const filterZone = { ...this.zone, left: i, right: i };
29144
- this.filters.push(new Filter(uuid.uuidv4(), filterZone));
29215
+ this.filters.push(new Filter(uuid.smallUuid(), filterZone));
29145
29216
  }
29146
29217
  }
29147
29218
  /** Get zone of the table without the headers */
@@ -29192,12 +29263,12 @@ class FiltersPlugin extends CorePlugin {
29192
29263
  switch (cmd.type) {
29193
29264
  case "CREATE_FILTER_TABLE":
29194
29265
  if (!areZonesContinuous(...cmd.target)) {
29195
- return 81 /* CommandResult.NonContinuousTargets */;
29266
+ return 82 /* CommandResult.NonContinuousTargets */;
29196
29267
  }
29197
29268
  const zone = union(...cmd.target);
29198
29269
  const checkFilterOverlap = () => {
29199
29270
  if (this.getFilterTables(cmd.sheetId).some((filter) => overlap(filter.zone, zone))) {
29200
- return 78 /* CommandResult.FilterOverlap */;
29271
+ return 79 /* CommandResult.FilterOverlap */;
29201
29272
  }
29202
29273
  return 0 /* CommandResult.Success */;
29203
29274
  };
@@ -29205,7 +29276,7 @@ class FiltersPlugin extends CorePlugin {
29205
29276
  const mergesInTarget = this.getters.getMergesInZone(cmd.sheetId, zone);
29206
29277
  for (let merge of mergesInTarget) {
29207
29278
  if (overlap(zone, merge)) {
29208
- return 80 /* CommandResult.MergeInFilter */;
29279
+ return 81 /* CommandResult.MergeInFilter */;
29209
29280
  }
29210
29281
  }
29211
29282
  return 0 /* CommandResult.Success */;
@@ -29215,7 +29286,7 @@ class FiltersPlugin extends CorePlugin {
29215
29286
  for (let merge of cmd.target) {
29216
29287
  for (let filterTable of this.getFilterTables(cmd.sheetId)) {
29217
29288
  if (overlap(filterTable.zone, merge)) {
29218
- return 80 /* CommandResult.MergeInFilter */;
29289
+ return 81 /* CommandResult.MergeInFilter */;
29219
29290
  }
29220
29291
  }
29221
29292
  }
@@ -29321,7 +29392,7 @@ class FiltersPlugin extends CorePlugin {
29321
29392
  if (filters.length < zoneToDimension(zone).width) {
29322
29393
  for (let col = zone.left; col <= zone.right; col++) {
29323
29394
  if (!filters.find((filter) => filter.col === col)) {
29324
- filters.push(new Filter(this.uuidGenerator.uuidv4(), { ...zone, left: col, right: col }));
29395
+ filters.push(new Filter(this.uuidGenerator.smallUuid(), { ...zone, left: col, right: col }));
29325
29396
  }
29326
29397
  }
29327
29398
  filters.sort((f1, f2) => f1.col - f2.col);
@@ -29725,10 +29796,10 @@ class HeaderVisibilityPlugin extends CorePlugin {
29725
29796
  : this.getters.getNumberRows(cmd.sheetId);
29726
29797
  const hiddenElements = new Set((hiddenGroup || []).flat().concat(cmd.elements));
29727
29798
  if (hiddenElements.size >= elements) {
29728
- return 66 /* CommandResult.TooManyHiddenElements */;
29799
+ return 67 /* CommandResult.TooManyHiddenElements */;
29729
29800
  }
29730
29801
  else if (largeMin(cmd.elements) < 0 || largeMax(cmd.elements) > elements) {
29731
- return 86 /* CommandResult.InvalidHeaderIndex */;
29802
+ return 87 /* CommandResult.InvalidHeaderIndex */;
29732
29803
  }
29733
29804
  else {
29734
29805
  return 0 /* CommandResult.Success */;
@@ -30131,7 +30202,7 @@ class MergePlugin extends CorePlugin {
30131
30202
  for (const zone of target) {
30132
30203
  for (const zone2 of target) {
30133
30204
  if (zone !== zone2 && overlap(zone, zone2)) {
30134
- return 65 /* CommandResult.MergeOverlap */;
30205
+ return 66 /* CommandResult.MergeOverlap */;
30135
30206
  }
30136
30207
  }
30137
30208
  }
@@ -30145,7 +30216,7 @@ class MergePlugin extends CorePlugin {
30145
30216
  for (const zone of target) {
30146
30217
  if ((zone.left < xSplit && zone.right >= xSplit) ||
30147
30218
  (zone.top < ySplit && zone.bottom >= ySplit)) {
30148
- return 75 /* CommandResult.FrozenPaneOverlap */;
30219
+ return 76 /* CommandResult.FrozenPaneOverlap */;
30149
30220
  }
30150
30221
  }
30151
30222
  return 0 /* CommandResult.Success */;
@@ -30363,6 +30434,9 @@ class SheetPlugin extends CorePlugin {
30363
30434
  case "CREATE_SHEET": {
30364
30435
  return this.checkValidations(cmd, this.checkSheetName, this.checkSheetPosition);
30365
30436
  }
30437
+ case "DUPLICATE_SHEET": {
30438
+ return this.sheets[cmd.sheetIdTo] ? 12 /* CommandResult.DuplicatedSheetId */ : 0 /* CommandResult.Success */;
30439
+ }
30366
30440
  case "MOVE_SHEET":
30367
30441
  const currentIndex = this.orderedSheetIds.indexOf(cmd.sheetId);
30368
30442
  if (cmd.direction === "left") {
@@ -30384,7 +30458,7 @@ class SheetPlugin extends CorePlugin {
30384
30458
  case "RENAME_SHEET":
30385
30459
  return this.isRenameAllowed(cmd);
30386
30460
  case "DELETE_SHEET":
30387
- return this.orderedSheetIds.length > 1
30461
+ return this.getVisibleSheetIds().length > 1
30388
30462
  ? 0 /* CommandResult.Success */
30389
30463
  : 9 /* CommandResult.NotEnoughSheets */;
30390
30464
  case "ADD_COLUMNS_ROWS":
@@ -30392,10 +30466,10 @@ class SheetPlugin extends CorePlugin {
30392
30466
  ? this.getNumberCols(cmd.sheetId)
30393
30467
  : this.getNumberRows(cmd.sheetId);
30394
30468
  if (cmd.base < 0 || cmd.base >= elements) {
30395
- return 86 /* CommandResult.InvalidHeaderIndex */;
30469
+ return 87 /* CommandResult.InvalidHeaderIndex */;
30396
30470
  }
30397
30471
  else if (cmd.quantity <= 0) {
30398
- return 87 /* CommandResult.InvalidQuantity */;
30472
+ return 88 /* CommandResult.InvalidQuantity */;
30399
30473
  }
30400
30474
  return 0 /* CommandResult.Success */;
30401
30475
  case "REMOVE_COLUMNS_ROWS": {
@@ -30403,7 +30477,7 @@ class SheetPlugin extends CorePlugin {
30403
30477
  ? this.getNumberCols(cmd.sheetId)
30404
30478
  : this.getNumberRows(cmd.sheetId);
30405
30479
  if (largeMin(cmd.elements) < 0 || largeMax(cmd.elements) > elements) {
30406
- return 86 /* CommandResult.InvalidHeaderIndex */;
30480
+ return 87 /* CommandResult.InvalidHeaderIndex */;
30407
30481
  }
30408
30482
  else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
30409
30483
  return 8 /* CommandResult.NotEnoughElements */;
@@ -30860,18 +30934,18 @@ class SheetPlugin extends CorePlugin {
30860
30934
  checkRowFreezeQuantity(cmd) {
30861
30935
  return cmd.quantity >= 1 && cmd.quantity < this.getNumberRows(cmd.sheetId)
30862
30936
  ? 0 /* CommandResult.Success */
30863
- : 74 /* CommandResult.InvalidFreezeQuantity */;
30937
+ : 75 /* CommandResult.InvalidFreezeQuantity */;
30864
30938
  }
30865
30939
  checkColFreezeQuantity(cmd) {
30866
30940
  return cmd.quantity >= 1 && cmd.quantity < this.getNumberCols(cmd.sheetId)
30867
30941
  ? 0 /* CommandResult.Success */
30868
- : 74 /* CommandResult.InvalidFreezeQuantity */;
30942
+ : 75 /* CommandResult.InvalidFreezeQuantity */;
30869
30943
  }
30870
30944
  checkRowFreezeOverlapMerge(cmd) {
30871
30945
  const merges = this.getters.getMerges(cmd.sheetId);
30872
30946
  for (let merge of merges) {
30873
30947
  if (merge.top < cmd.quantity && cmd.quantity <= merge.bottom) {
30874
- return 65 /* CommandResult.MergeOverlap */;
30948
+ return 66 /* CommandResult.MergeOverlap */;
30875
30949
  }
30876
30950
  }
30877
30951
  return 0 /* CommandResult.Success */;
@@ -30880,7 +30954,7 @@ class SheetPlugin extends CorePlugin {
30880
30954
  const merges = this.getters.getMerges(cmd.sheetId);
30881
30955
  for (let merge of merges) {
30882
30956
  if (merge.left < cmd.quantity && cmd.quantity <= merge.right) {
30883
- return 65 /* CommandResult.MergeOverlap */;
30957
+ return 66 /* CommandResult.MergeOverlap */;
30884
30958
  }
30885
30959
  }
30886
30960
  return 0 /* CommandResult.Success */;
@@ -31190,6 +31264,9 @@ class SheetPlugin extends CorePlugin {
31190
31264
  zones.push(...cmd.target);
31191
31265
  }
31192
31266
  if ("ranges" in cmd && Array.isArray(cmd.ranges)) {
31267
+ if (cmd.ranges.some((rangeData) => !this.getters.tryGetSheet(rangeData._sheetId))) {
31268
+ return 27 /* CommandResult.InvalidSheetId */;
31269
+ }
31193
31270
  zones.push(...cmd.ranges.map((rangeData) => this.getters.getRangeFromRangeData(rangeData).zone));
31194
31271
  }
31195
31272
  if (!zones.every(isZoneValid)) {
@@ -31311,7 +31388,7 @@ class AutofillPlugin extends UIPlugin {
31311
31388
  if (this.lastCellSelected.col !== undefined && this.lastCellSelected.row !== undefined) {
31312
31389
  return 0 /* CommandResult.Success */;
31313
31390
  }
31314
- return 45 /* CommandResult.InvalidAutofillSelection */;
31391
+ return 46 /* CommandResult.InvalidAutofillSelection */;
31315
31392
  case "AUTOFILL_AUTO":
31316
31393
  const zone = this.getters.getSelectedZone();
31317
31394
  return zone.top === zone.bottom
@@ -31911,7 +31988,7 @@ class CellPopoverPlugin extends UIPlugin {
31911
31988
  cellPopoverRegistry.get(cmd.popoverType);
31912
31989
  }
31913
31990
  catch (error) {
31914
- return 72 /* CommandResult.InvalidCellPopover */;
31991
+ return 73 /* CommandResult.InvalidCellPopover */;
31915
31992
  }
31916
31993
  return 0 /* CommandResult.Success */;
31917
31994
  default:
@@ -32135,7 +32212,7 @@ class ClipboardCellsState extends ClipboardCellsAbstractState {
32135
32212
  for (const zone of this.getPasteZones(target)) {
32136
32213
  if ((zone.left < xSplit && zone.right >= xSplit) ||
32137
32214
  (zone.top < ySplit && zone.bottom >= ySplit)) {
32138
- return 75 /* CommandResult.FrozenPaneOverlap */;
32215
+ return 76 /* CommandResult.FrozenPaneOverlap */;
32139
32216
  }
32140
32217
  }
32141
32218
  return 0 /* CommandResult.Success */;
@@ -32495,7 +32572,7 @@ class ClipboardFigureState {
32495
32572
  }
32496
32573
  isPasteAllowed(target, option) {
32497
32574
  if (target.length === 0) {
32498
- return 73 /* CommandResult.EmptyTarget */;
32575
+ return 74 /* CommandResult.EmptyTarget */;
32499
32576
  }
32500
32577
  if ((option === null || option === void 0 ? void 0 : option.pasteOption) !== undefined) {
32501
32578
  return 22 /* CommandResult.WrongFigurePasteOption */;
@@ -32512,7 +32589,7 @@ class ClipboardFigureState {
32512
32589
  y: this.getters.getRowDimensions(sheetId, target[0].top).start,
32513
32590
  };
32514
32591
  const newChart = this.copiedChart.copyInSheetId(sheetId);
32515
- const newId = new UuidGenerator().uuidv4();
32592
+ const newId = new UuidGenerator().smallUuid();
32516
32593
  this.dispatch("CREATE_CHART", {
32517
32594
  id: newId,
32518
32595
  sheetId,
@@ -33642,7 +33719,9 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
33642
33719
  const cfInTarget = this.getters
33643
33720
  .getConditionalFormats(targetSheetId)
33644
33721
  .find((cf) => cf.stopIfTrue === originCF.stopIfTrue && deepEquals(cf.rule, originCF.rule));
33645
- return cfInTarget ? cfInTarget : { ...originCF, id: this.uuidGenerator.uuidv4(), ranges: [] };
33722
+ return cfInTarget
33723
+ ? cfInTarget
33724
+ : { ...originCF, id: this.uuidGenerator.smallUuid(), ranges: [] };
33646
33725
  }
33647
33726
  }
33648
33727
  EvaluationConditionalFormatPlugin.getters = ["getConditionalIcon", "getCellComputedStyle"];
@@ -33658,7 +33737,7 @@ class FilterEvaluationPlugin extends UIPlugin {
33658
33737
  switch (cmd.type) {
33659
33738
  case "UPDATE_FILTER":
33660
33739
  if (!this.getters.getFilterId(cmd.sheetId, cmd.col, cmd.row)) {
33661
- return 79 /* CommandResult.FilterNotFound */;
33740
+ return 80 /* CommandResult.FilterNotFound */;
33662
33741
  }
33663
33742
  break;
33664
33743
  }
@@ -35164,23 +35243,7 @@ class GridSelectionPlugin extends UIPlugin {
35164
35243
  gridSelection: deepCopy(gridSelection),
35165
35244
  };
35166
35245
  }
35167
- if (!this.getters.tryGetSheet(this.getters.getActiveSheetId())) {
35168
- const currentSheetIds = this.getters.getVisibleSheetIds();
35169
- this.activeSheet = this.getters.getSheet(currentSheetIds[0]);
35170
- if (this.activeSheet.id in this.sheetsData) {
35171
- const { anchor } = this.clipSelection(this.activeSheet.id, this.sheetsData[this.activeSheet.id].gridSelection);
35172
- this.selectCell(anchor.cell.col, anchor.cell.row);
35173
- }
35174
- else {
35175
- this.selectCell(0, 0);
35176
- }
35177
- const { col, row } = this.gridSelection.anchor.cell;
35178
- this.moveClient({
35179
- sheetId: this.getters.getActiveSheetId(),
35180
- col,
35181
- row,
35182
- });
35183
- }
35246
+ this.fallbackToVisibleSheet();
35184
35247
  const sheetId = this.getters.getActiveSheetId();
35185
35248
  this.gridSelection.zones = this.gridSelection.zones.map((z) => this.getters.expandZone(sheetId, z));
35186
35249
  this.gridSelection.anchor.zone = this.getters.expandZone(sheetId, this.gridSelection.anchor.zone);
@@ -35190,6 +35253,7 @@ class GridSelectionPlugin extends UIPlugin {
35190
35253
  }
35191
35254
  }
35192
35255
  finalize() {
35256
+ this.fallbackToVisibleSheet();
35193
35257
  /** Any change to the selection has to be reflected in the selection processor. */
35194
35258
  this.selection.resetDefaultAnchor(this, deepCopy(this.gridSelection.anchor));
35195
35259
  }
@@ -35488,10 +35552,29 @@ class GridSelectionPlugin extends UIPlugin {
35488
35552
  const headers = [cmd.base, ...cmd.elements];
35489
35553
  const maxHeaderValue = isCol ? this.getters.getNumberCols(id) : this.getters.getNumberRows(id);
35490
35554
  if (headers.some((h) => h < 0 || h >= maxHeaderValue)) {
35491
- return 86 /* CommandResult.InvalidHeaderIndex */;
35555
+ return 87 /* CommandResult.InvalidHeaderIndex */;
35492
35556
  }
35493
35557
  return 0 /* CommandResult.Success */;
35494
35558
  }
35559
+ fallbackToVisibleSheet() {
35560
+ if (!this.getters.tryGetSheet(this.getters.getActiveSheetId())) {
35561
+ const currentSheetIds = this.getters.getVisibleSheetIds();
35562
+ this.activeSheet = this.getters.getSheet(currentSheetIds[0]);
35563
+ if (this.activeSheet.id in this.sheetsData) {
35564
+ const { anchor } = this.clipSelection(this.activeSheet.id, this.sheetsData[this.activeSheet.id].gridSelection);
35565
+ this.selectCell(anchor.cell.col, anchor.cell.row);
35566
+ }
35567
+ else {
35568
+ this.selectCell(0, 0);
35569
+ }
35570
+ const { col, row } = this.gridSelection.anchor.cell;
35571
+ this.moveClient({
35572
+ sheetId: this.getters.getActiveSheetId(),
35573
+ col,
35574
+ row,
35575
+ });
35576
+ }
35577
+ }
35495
35578
  //-------------------------------------------
35496
35579
  // Helpers for extensions
35497
35580
  // ------------------------------------------
@@ -35716,7 +35799,7 @@ class SelectionInputPlugin extends UIPlugin {
35716
35799
  setContent(index, xc) {
35717
35800
  this.ranges[index] = {
35718
35801
  ...this.ranges[index],
35719
- id: uuidGenerator.uuidv4(),
35802
+ id: uuidGenerator.smallUuid(),
35720
35803
  xc,
35721
35804
  };
35722
35805
  }
@@ -35831,26 +35914,26 @@ class SelectionInputsManagerPlugin extends UIPlugin {
35831
35914
  case "ADD_EMPTY_RANGE":
35832
35915
  case "REMOVE_RANGE":
35833
35916
  if (!this.inputs[cmd.id]) {
35834
- return 30 /* CommandResult.InvalidInputId */;
35917
+ return 31 /* CommandResult.InvalidInputId */;
35835
35918
  }
35836
35919
  }
35837
35920
  switch (cmd.type) {
35838
35921
  case "FOCUS_RANGE":
35839
35922
  const index = (_a = this.currentInput) === null || _a === void 0 ? void 0 : _a.getIndex(cmd.rangeId);
35840
35923
  if (this.focusedInputId === cmd.id && ((_b = this.currentInput) === null || _b === void 0 ? void 0 : _b.focusedRangeIndex) === index) {
35841
- return 28 /* CommandResult.InputAlreadyFocused */;
35924
+ return 29 /* CommandResult.InputAlreadyFocused */;
35842
35925
  }
35843
35926
  break;
35844
35927
  case "ADD_EMPTY_RANGE":
35845
35928
  const input = this.inputs[cmd.id];
35846
35929
  if (input.inputHasSingleRange && input.ranges.length === 1) {
35847
- return 29 /* CommandResult.MaximumRangesReached */;
35930
+ return 30 /* CommandResult.MaximumRangesReached */;
35848
35931
  }
35849
35932
  break;
35850
35933
  case "CHANGE_RANGE": {
35851
35934
  const input = this.inputs[cmd.id];
35852
35935
  if (input.inputHasSingleRange && cmd.value.split(",").length > 1) {
35853
- return 29 /* CommandResult.MaximumRangesReached */;
35936
+ return 30 /* CommandResult.MaximumRangesReached */;
35854
35937
  }
35855
35938
  break;
35856
35939
  }
@@ -36041,6 +36124,9 @@ function updateChartRangesTransformation(toTransform, executed) {
36041
36124
  }
36042
36125
  function createSheetTransformation(cmd, executed) {
36043
36126
  var _a;
36127
+ if (cmd.sheetId === executed.sheetId) {
36128
+ cmd = { ...cmd, sheetId: `${cmd.sheetId}~` };
36129
+ }
36044
36130
  if (cmd.name === executed.name) {
36045
36131
  return {
36046
36132
  ...cmd,
@@ -36616,21 +36702,14 @@ class Session extends EventBus {
36616
36702
  if (!message)
36617
36703
  return;
36618
36704
  if (message.type === "REMOTE_REVISION") {
36619
- const revision = this.revisions.get(message.nextRevisionId);
36705
+ let revision = this.revisions.get(message.nextRevisionId);
36620
36706
  if (revision.commands.length === 0) {
36621
36707
  /**
36622
- * The command is empty, we have to drop all the next local revisions
36708
+ * The command is empty, we have to rebase all the next local revisions
36623
36709
  * to avoid issues with undo/redo
36624
36710
  */
36625
- this.revisions.drop(revision.id);
36626
- const revisionIds = this.pendingMessages
36627
- .filter((message) => message.type === "REMOTE_REVISION")
36628
- .map((message) => message.nextRevisionId);
36629
- this.trigger("pending-revisions-dropped", { revisionIds });
36630
- this.waitingAck = false;
36631
- this.waitingUndoRedoAck = false;
36632
- this.pendingMessages = [];
36633
- return;
36711
+ this.revisions.rebase(revision.id);
36712
+ revision = this.revisions.get(message.nextRevisionId);
36634
36713
  }
36635
36714
  message = {
36636
36715
  ...message,
@@ -36654,7 +36733,6 @@ class Session extends EventBus {
36654
36733
  switch (message.type) {
36655
36734
  case "REMOTE_REVISION":
36656
36735
  case "REVISION_REDONE":
36657
- case "REVISION_UNDONE":
36658
36736
  case "SNAPSHOT_CREATED":
36659
36737
  this.waitingAck = false;
36660
36738
  this.pendingMessages = this.pendingMessages.filter((msg) => msg.nextRevisionId !== message.nextRevisionId);
@@ -36662,6 +36740,25 @@ class Session extends EventBus {
36662
36740
  this.processedRevisions.add(message.nextRevisionId);
36663
36741
  this.sendPendingMessage();
36664
36742
  break;
36743
+ case "REVISION_UNDONE": {
36744
+ this.waitingAck = false;
36745
+ this.pendingMessages = this.pendingMessages.filter((msg) => msg.nextRevisionId !== message.nextRevisionId);
36746
+ const firstPendingRevisionId = this.pendingMessages.findIndex((message) => message.type === "REMOTE_REVISION");
36747
+ if (firstPendingRevisionId !== -1) {
36748
+ /**
36749
+ * Some revisions undergo transformations that may cause issues with
36750
+ * undo/redo if the transformation is destructive (we don't get back
36751
+ * the original command by transforming it with the inverse).
36752
+ * To prevent these problems, we must rebase all subsequent local
36753
+ * revisions.
36754
+ */
36755
+ this.revisions.rebase(this.pendingMessages[firstPendingRevisionId].nextRevisionId);
36756
+ }
36757
+ this.serverRevisionId = message.nextRevisionId;
36758
+ this.processedRevisions.add(message.nextRevisionId);
36759
+ this.sendPendingMessage();
36760
+ break;
36761
+ }
36665
36762
  }
36666
36763
  }
36667
36764
  isAlreadyProcessed(message) {
@@ -37532,7 +37629,7 @@ class SheetViewPlugin extends UIPlugin {
37532
37629
  }
37533
37630
  checkPositiveDimension(cmd) {
37534
37631
  if (cmd.width < 0 || cmd.height < 0) {
37535
- return 68 /* CommandResult.InvalidViewportSize */;
37632
+ return 69 /* CommandResult.InvalidViewportSize */;
37536
37633
  }
37537
37634
  return 0 /* CommandResult.Success */;
37538
37635
  }
@@ -37542,7 +37639,7 @@ class SheetViewPlugin extends UIPlugin {
37542
37639
  cmd.gridOffsetY === this.gridOffsetY &&
37543
37640
  cmd.width === width &&
37544
37641
  cmd.height === height) {
37545
- return 76 /* CommandResult.ValuesNotChanged */;
37642
+ return 77 /* CommandResult.ValuesNotChanged */;
37546
37643
  }
37547
37644
  return 0 /* CommandResult.Success */;
37548
37645
  }
@@ -37550,7 +37647,7 @@ class SheetViewPlugin extends UIPlugin {
37550
37647
  const pane = this.getMainInternalViewport(this.getters.getActiveSheetId());
37551
37648
  if ((!pane.canScrollHorizontally && offsetX > 0) ||
37552
37649
  (!pane.canScrollVertically && offsetY > 0)) {
37553
- return 69 /* CommandResult.InvalidScrollingDirection */;
37650
+ return 70 /* CommandResult.InvalidScrollingDirection */;
37554
37651
  }
37555
37652
  return 0 /* CommandResult.Success */;
37556
37653
  }
@@ -37777,7 +37874,7 @@ class SortPlugin extends UIPlugin {
37777
37874
  for (let row = zone.top; row <= zone.bottom; row++) {
37778
37875
  for (let col = zone.left; col <= zone.right; col++) {
37779
37876
  if (!this.getters.isInMerge(sheetId, col, row)) {
37780
- return 63 /* CommandResult.InvalidSortZone */;
37877
+ return 64 /* CommandResult.InvalidSortZone */;
37781
37878
  }
37782
37879
  }
37783
37880
  }
@@ -37798,7 +37895,7 @@ class SortPlugin extends UIPlugin {
37798
37895
  ];
37799
37896
  return widthCurrent === widthFirst && heightCurrent === heightFirst;
37800
37897
  })) {
37801
- return 63 /* CommandResult.InvalidSortZone */;
37898
+ return 64 /* CommandResult.InvalidSortZone */;
37802
37899
  }
37803
37900
  return 0 /* CommandResult.Success */;
37804
37901
  }
@@ -38464,7 +38561,7 @@ class BottomBar extends owl.Component {
38464
38561
  addSheet() {
38465
38562
  const activeSheetId = this.env.model.getters.getActiveSheetId();
38466
38563
  const position = this.env.model.getters.getSheetIds().findIndex((sheetId) => sheetId === activeSheetId) + 1;
38467
- const sheetId = this.env.model.uuidGenerator.uuidv4();
38564
+ const sheetId = this.env.model.uuidGenerator.smallUuid();
38468
38565
  const name = this.env.model.getters.getNextSheetName(this.env._t("Sheet"));
38469
38566
  this.env.model.dispatch("CREATE_SHEET", { sheetId, position, name });
38470
38567
  this.env.model.dispatch("ACTIVATE_SHEET", { sheetIdFrom: activeSheetId, sheetIdTo: sheetId });
@@ -38953,7 +39050,7 @@ const AddMergeInteractiveContent = {
38953
39050
  };
38954
39051
  function interactiveAddMerge(env, sheetId, target) {
38955
39052
  const result = env.model.dispatch("ADD_MERGE", { sheetId, target });
38956
- if (result.isCancelledBecause(80 /* CommandResult.MergeInFilter */)) {
39053
+ if (result.isCancelledBecause(81 /* CommandResult.MergeInFilter */)) {
38957
39054
  env.raiseError(AddMergeInteractiveContent.MergeInFilter);
38958
39055
  }
38959
39056
  else if (result.isCancelledBecause(3 /* CommandResult.MergeIsDestructive */)) {
@@ -40086,7 +40183,7 @@ class Tree {
40086
40183
  }
40087
40184
  /**
40088
40185
  * Drop the operation and all following operations in every
40089
- * branch
40186
+ * branches
40090
40187
  */
40091
40188
  drop(operationId) {
40092
40189
  for (const branch of this.branches) {
@@ -40383,9 +40480,16 @@ class SelectiveHistory {
40383
40480
  this.fastForward();
40384
40481
  this.insert(redoId, this.buildEmpty(redoId), insertAfter);
40385
40482
  }
40386
- drop(operationId) {
40483
+ rebase(operationId) {
40484
+ const operation = this.get(operationId);
40485
+ const execution = [...this.tree.execution(this.HEAD_BRANCH).startAfter(operationId)];
40387
40486
  this.revertBefore(operationId);
40487
+ const baseId = this.HEAD_OPERATION.id;
40388
40488
  this.tree.drop(operationId);
40489
+ this.insert(operationId, operation, baseId);
40490
+ for (const { operation } of execution) {
40491
+ this.insert(operation.id, operation.data, this.HEAD_OPERATION.id);
40492
+ }
40389
40493
  }
40390
40494
  /**
40391
40495
  * Revert the state as it was *before* the given operation was executed.
@@ -40508,7 +40612,6 @@ class LocalHistory extends owl.EventBus {
40508
40612
  this.session.on("new-local-state-update", this, this.onNewLocalStateUpdate);
40509
40613
  this.session.on("revision-undone", this, ({ commands }) => this.selectiveUndo(commands));
40510
40614
  this.session.on("revision-redone", this, ({ commands }) => this.selectiveRedo(commands));
40511
- this.session.on("pending-revisions-dropped", this, ({ revisionIds }) => this.drop(revisionIds));
40512
40615
  this.session.on("snapshot", this, () => {
40513
40616
  this.undoStack = [];
40514
40617
  this.redoStack = [];
@@ -40561,10 +40664,6 @@ class LocalHistory extends owl.EventBus {
40561
40664
  canRedo() {
40562
40665
  return this.redoStack.length > 0;
40563
40666
  }
40564
- drop(revisionIds) {
40565
- this.undoStack = this.undoStack.filter((id) => !revisionIds.includes(id));
40566
- this.redoStack = [];
40567
- }
40568
40667
  onNewLocalStateUpdate({ id }) {
40569
40668
  this.undoStack.push(id);
40570
40669
  this.redoStack = [];
@@ -41145,7 +41244,7 @@ class SelectionStreamProcessor {
41145
41244
  */
41146
41245
  moveAnchorCell(direction, step = 1) {
41147
41246
  if (step !== "end" && step <= 0) {
41148
- return new DispatchResult(83 /* CommandResult.InvalidSelectionStep */);
41247
+ return new DispatchResult(84 /* CommandResult.InvalidSelectionStep */);
41149
41248
  }
41150
41249
  const { col, row } = this.getNextAvailablePosition(direction, step);
41151
41250
  return this.selectCell(col, row);
@@ -41191,7 +41290,7 @@ class SelectionStreamProcessor {
41191
41290
  */
41192
41291
  resizeAnchorZone(direction, step = 1) {
41193
41292
  if (step !== "end" && step <= 0) {
41194
- return new DispatchResult(83 /* CommandResult.InvalidSelectionStep */);
41293
+ return new DispatchResult(84 /* CommandResult.InvalidSelectionStep */);
41195
41294
  }
41196
41295
  const sheetId = this.getters.getActiveSheetId();
41197
41296
  const anchor = this.anchor;
@@ -43137,10 +43236,10 @@ class Model extends EventBus {
43137
43236
  const command = { type, ...payload };
43138
43237
  let status = this.status;
43139
43238
  if (this.getters.isReadonly() && !canExecuteInReadonly(command)) {
43140
- return new DispatchResult(67 /* CommandResult.Readonly */);
43239
+ return new DispatchResult(68 /* CommandResult.Readonly */);
43141
43240
  }
43142
43241
  if (!this.session.canApplyOptimisticUpdate()) {
43143
- return new DispatchResult(64 /* CommandResult.WaitingSessionConfirmation */);
43242
+ return new DispatchResult(65 /* CommandResult.WaitingSessionConfirmation */);
43144
43243
  }
43145
43244
  switch (status) {
43146
43245
  case 0 /* Status.Ready */:
@@ -43342,7 +43441,7 @@ class Model extends EventBus {
43342
43441
  }
43343
43442
  setupConfig(config) {
43344
43443
  const client = config.client || {
43345
- id: this.uuidGenerator.uuidv4(),
43444
+ id: this.uuidGenerator.smallUuid(),
43346
43445
  name: _lt("Anonymous").toString(),
43347
43446
  };
43348
43447
  const transportService = config.transportService || new LocalTransportService();
@@ -43590,6 +43689,6 @@ exports.setTranslationMethod = setTranslationMethod;
43590
43689
  exports.tokenize = tokenize;
43591
43690
 
43592
43691
 
43593
- __info__.version = '16.0.60';
43594
- __info__.date = '2025-02-05T06:44:04.651Z';
43595
- __info__.hash = 'd098699';
43692
+ __info__.version = '16.0.62';
43693
+ __info__.date = '2025-02-14T08:36:41.388Z';
43694
+ __info__.hash = '34f2802';