@odoo/o-spreadsheet 18.0.24 → 18.0.26

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.
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 18.0.24
6
- * @date 2025-04-18T16:23:09.320Z
7
- * @hash aa18758
5
+ * @version 18.0.26
6
+ * @date 2025-05-02T12:30:31.966Z
7
+ * @hash 5bdf504
8
8
  */
9
9
 
10
10
  (function (exports, owl) {
@@ -3592,6 +3592,7 @@
3592
3592
  CommandResult["ValueCellIsInvalidFormula"] = "ValueCellIsInvalidFormula";
3593
3593
  CommandResult["InvalidDefinition"] = "InvalidDefinition";
3594
3594
  CommandResult["InvalidColor"] = "InvalidColor";
3595
+ CommandResult["InvalidPivotDataSet"] = "InvalidPivotDataSet";
3595
3596
  })(exports.CommandResult || (exports.CommandResult = {}));
3596
3597
 
3597
3598
  const DEFAULT_LOCALES = [
@@ -3664,11 +3665,13 @@
3664
3665
  NullError: "#NULL!",
3665
3666
  };
3666
3667
  const errorTypes = new Set(Object.values(CellErrorType));
3667
- class EvaluationError extends Error {
3668
+ class EvaluationError {
3669
+ message;
3668
3670
  value;
3669
3671
  constructor(message = _t("Error"), value = CellErrorType.GenericError) {
3670
- super(message);
3672
+ this.message = message;
3671
3673
  this.value = value;
3674
+ this.message = message.toString();
3672
3675
  }
3673
3676
  }
3674
3677
  class BadExpressionError extends EvaluationError {
@@ -15667,9 +15670,11 @@ stores.inject(MyMetaStore, storeInstance);
15667
15670
  const GAUGE_TITLE_PADDING_TOP = SCORECARD_GAUGE_CHART_PADDING;
15668
15671
  function drawGaugeChart(canvas, runtime) {
15669
15672
  const canvasBoundingRect = canvas.getBoundingClientRect();
15670
- canvas.width = canvasBoundingRect.width;
15671
- canvas.height = canvasBoundingRect.height;
15673
+ const dpr = window.devicePixelRatio || 1;
15674
+ canvas.width = dpr * canvasBoundingRect.width;
15675
+ canvas.height = dpr * canvasBoundingRect.height;
15672
15676
  const ctx = canvas.getContext("2d");
15677
+ ctx.scale(dpr, dpr);
15673
15678
  const config = getGaugeRenderingConfig(canvasBoundingRect, runtime, ctx);
15674
15679
  drawBackground(ctx, config);
15675
15680
  drawGauge(ctx, config);
@@ -16231,9 +16236,11 @@ stores.inject(MyMetaStore, storeInstance);
16231
16236
  };
16232
16237
  function drawScoreChart(structure, canvas) {
16233
16238
  const ctx = canvas.getContext("2d");
16234
- canvas.width = structure.canvas.width;
16235
- const availableWidth = canvas.width - DEFAULT_CHART_PADDING;
16236
- canvas.height = structure.canvas.height;
16239
+ const dpr = window.devicePixelRatio || 1;
16240
+ canvas.width = dpr * structure.canvas.width;
16241
+ canvas.height = dpr * structure.canvas.height;
16242
+ ctx.scale(dpr, dpr);
16243
+ const availableWidth = structure.canvas.width - DEFAULT_CHART_PADDING;
16237
16244
  ctx.fillStyle = structure.canvas.backgroundColor;
16238
16245
  ctx.fillRect(0, 0, structure.canvas.width, structure.canvas.height);
16239
16246
  if (structure.title) {
@@ -16910,6 +16917,7 @@ stores.inject(MyMetaStore, storeInstance);
16910
16917
  canvas = owl.useRef("graphContainer");
16911
16918
  chart;
16912
16919
  currentRuntime;
16920
+ currentDevicePixelRatio = window.devicePixelRatio;
16913
16921
  get background() {
16914
16922
  return this.chartRuntime.background;
16915
16923
  }
@@ -16943,6 +16951,10 @@ stores.inject(MyMetaStore, storeInstance);
16943
16951
  }
16944
16952
  this.currentRuntime = runtime;
16945
16953
  }
16954
+ else if (this.currentDevicePixelRatio !== window.devicePixelRatio) {
16955
+ this.currentDevicePixelRatio = window.devicePixelRatio;
16956
+ this.updateChartJs(deepCopy(this.currentRuntime));
16957
+ }
16946
16958
  });
16947
16959
  }
16948
16960
  createChart(chartData) {
@@ -16985,7 +16997,7 @@ stores.inject(MyMetaStore, storeInstance);
16985
16997
  owl.useEffect(this.createChart.bind(this), () => {
16986
16998
  const canvas = this.canvas.el;
16987
16999
  const rect = canvas.getBoundingClientRect();
16988
- return [rect.width, rect.height, this.runtime, this.canvas.el];
17000
+ return [rect.width, rect.height, this.runtime, this.canvas.el, window.devicePixelRatio];
16989
17001
  });
16990
17002
  }
16991
17003
  createChart() {
@@ -17453,7 +17465,7 @@ stores.inject(MyMetaStore, storeInstance);
17453
17465
  assertSquareMatrix(_t("The argument square_matrix must have the same number of columns and rows."), _matrix);
17454
17466
  const { inverted } = invertMatrix(_matrix);
17455
17467
  if (!inverted) {
17456
- throw new EvaluationError(_t("The matrix is not invertible."));
17468
+ return new EvaluationError(_t("The matrix is not invertible."));
17457
17469
  }
17458
17470
  return inverted;
17459
17471
  },
@@ -17613,7 +17625,7 @@ stores.inject(MyMetaStore, storeInstance);
17613
17625
  .flat()
17614
17626
  .filter(shouldKeepValue(_ignore));
17615
17627
  if (result.length === 0) {
17616
- throw new NotAvailableError(_t("No results for the given arguments of TOCOL."));
17628
+ return new NotAvailableError(_t("No results for the given arguments of TOCOL."));
17617
17629
  }
17618
17630
  return [result];
17619
17631
  },
@@ -17634,7 +17646,7 @@ stores.inject(MyMetaStore, storeInstance);
17634
17646
  .filter(shouldKeepValue(_ignore))
17635
17647
  .map((item) => [item]);
17636
17648
  if (result.length === 0 || result[0].length === 0) {
17637
- throw new NotAvailableError(_t("No results for the given arguments of TOROW."));
17649
+ return new NotAvailableError(_t("No results for the given arguments of TOROW."));
17638
17650
  }
17639
17651
  return result;
17640
17652
  },
@@ -18481,7 +18493,7 @@ stores.inject(MyMetaStore, storeInstance);
18481
18493
  count += 1;
18482
18494
  }
18483
18495
  if (isEvaluationError(f)) {
18484
- throw j;
18496
+ return j;
18485
18497
  }
18486
18498
  }
18487
18499
  }
@@ -19384,7 +19396,7 @@ stores.inject(MyMetaStore, storeInstance);
19384
19396
  const flatY = dataY.flat();
19385
19397
  assertSameNumberOfElements(flatX, flatY);
19386
19398
  if (flatX.length === 0) {
19387
- throw new EvaluationError(_t("[[FUNCTION_NAME]] expects non-empty ranges for both parameters."));
19399
+ return new EvaluationError(_t("[[FUNCTION_NAME]] expects non-empty ranges for both parameters."));
19388
19400
  }
19389
19401
  const n = flatX.length;
19390
19402
  let trueN = 0, trueP = 0, falseP = 0, falseN = 0;
@@ -19747,7 +19759,7 @@ stores.inject(MyMetaStore, storeInstance);
19747
19759
  }
19748
19760
  }
19749
19761
  if (!found) {
19750
- throw new NotAvailableError(_t("Value not found in the given data."));
19762
+ return new NotAvailableError(_t("Value not found in the given data."));
19751
19763
  }
19752
19764
  return rank;
19753
19765
  },
@@ -21372,7 +21384,7 @@ stores.inject(MyMetaStore, storeInstance);
21372
21384
  }
21373
21385
  }
21374
21386
  if (!result.length) {
21375
- throw new NotAvailableError(_t("No match found in FILTER evaluation"));
21387
+ return new NotAvailableError(_t("No match found in FILTER evaluation"));
21376
21388
  }
21377
21389
  return mode === "row" ? transposeMatrix(result) : result;
21378
21390
  },
@@ -21501,7 +21513,7 @@ stores.inject(MyMetaStore, storeInstance);
21501
21513
  result.push(row.data);
21502
21514
  }
21503
21515
  if (!result.length)
21504
- throw new EvaluationError(_t("No unique values found"));
21516
+ return new EvaluationError(_t("No unique values found"));
21505
21517
  return _byColumn ? result : transposeMatrix(result);
21506
21518
  },
21507
21519
  isExported: true,
@@ -24427,7 +24439,7 @@ stores.inject(MyMetaStore, storeInstance);
24427
24439
  return result;
24428
24440
  }
24429
24441
  }
24430
- throw new EvaluationError(_t("No match."));
24442
+ return new EvaluationError(_t("No match."));
24431
24443
  },
24432
24444
  isExported: true,
24433
24445
  };
@@ -24618,7 +24630,7 @@ stores.inject(MyMetaStore, storeInstance);
24618
24630
  ],
24619
24631
  compute: function (cellReference) {
24620
24632
  if (isEvaluationError(cellReference?.value)) {
24621
- throw cellReference;
24633
+ return cellReference;
24622
24634
  }
24623
24635
  const column = cellReference === undefined
24624
24636
  ? this.__originCellPosition?.col
@@ -24636,7 +24648,7 @@ stores.inject(MyMetaStore, storeInstance);
24636
24648
  args: [arg("range (meta)", _t("The range whose column count will be returned."))],
24637
24649
  compute: function (range) {
24638
24650
  if (isEvaluationError(range?.value)) {
24639
- throw range;
24651
+ return range;
24640
24652
  }
24641
24653
  const zone = toZone(range.value);
24642
24654
  return zone.right - zone.left + 1;
@@ -24714,11 +24726,11 @@ stores.inject(MyMetaStore, storeInstance);
24714
24726
  compute: function (reference, useA1Notation = { value: true }) {
24715
24727
  let _reference = reference?.value?.toString();
24716
24728
  if (!_reference) {
24717
- throw new InvalidReferenceError(_t("Reference should be defined."));
24729
+ return new InvalidReferenceError(_t("Reference should be defined."));
24718
24730
  }
24719
24731
  const _useA1Notation = toBoolean(useA1Notation);
24720
24732
  if (!_useA1Notation) {
24721
- throw new EvaluationError(_t("R1C1 notation is not supported."));
24733
+ return new EvaluationError(_t("R1C1 notation is not supported."));
24722
24734
  }
24723
24735
  const sheetId = this.__originSheetId;
24724
24736
  const originPosition = this.__originCellPosition;
@@ -24730,7 +24742,7 @@ stores.inject(MyMetaStore, storeInstance);
24730
24742
  }
24731
24743
  const range = this.getters.getRangeFromSheetXC(sheetId, _reference);
24732
24744
  if (range === undefined || range.invalidXc || range.invalidSheetName) {
24733
- throw new InvalidReferenceError();
24745
+ return new InvalidReferenceError();
24734
24746
  }
24735
24747
  if (originPosition) {
24736
24748
  this.addDependencies?.(originPosition, [range]);
@@ -24841,7 +24853,7 @@ stores.inject(MyMetaStore, storeInstance);
24841
24853
  ],
24842
24854
  compute: function (cellReference) {
24843
24855
  if (isEvaluationError(cellReference?.value)) {
24844
- throw cellReference;
24856
+ return cellReference;
24845
24857
  }
24846
24858
  const row = cellReference === undefined
24847
24859
  ? this.__originCellPosition?.row
@@ -24859,7 +24871,7 @@ stores.inject(MyMetaStore, storeInstance);
24859
24871
  args: [arg("range (meta)", _t("The range whose row count will be returned."))],
24860
24872
  compute: function (range) {
24861
24873
  if (isEvaluationError(range?.value)) {
24862
- throw range;
24874
+ return range;
24863
24875
  }
24864
24876
  const zone = toZone(range.value);
24865
24877
  return zone.bottom - zone.top + 1;
@@ -25045,11 +25057,11 @@ stores.inject(MyMetaStore, storeInstance);
25045
25057
  const _pivotFormulaId = toString(pivotFormulaId);
25046
25058
  const _rowCount = toNumber(rowCount, this.locale);
25047
25059
  if (_rowCount < 0) {
25048
- throw new EvaluationError(_t("The number of rows must be positive."));
25060
+ return new EvaluationError(_t("The number of rows must be positive."));
25049
25061
  }
25050
25062
  const _columnCount = toNumber(columnCount, this.locale);
25051
25063
  if (_columnCount < 0) {
25052
- throw new EvaluationError(_t("The number of columns must be positive."));
25064
+ return new EvaluationError(_t("The number of columns must be positive."));
25053
25065
  }
25054
25066
  const _includeColumnHeaders = toBoolean(includeColumnHeaders);
25055
25067
  const _includedTotal = toBoolean(includeTotal);
@@ -25117,7 +25129,7 @@ stores.inject(MyMetaStore, storeInstance);
25117
25129
  }
25118
25130
  const _cellReference = cellReference?.value;
25119
25131
  if (!_cellReference) {
25120
- throw new Error("In this context, the function OFFSET needs to have a cell or range in parameter.");
25132
+ return new EvaluationError("In this context, the function OFFSET needs to have a cell or range in parameter.");
25121
25133
  }
25122
25134
  const zone = toZone(_cellReference);
25123
25135
  let offsetHeight = zone.bottom - zone.top + 1;
@@ -28923,7 +28935,7 @@ stores.inject(MyMetaStore, storeInstance);
28923
28935
  owl.useEffect(() => drawGaugeChart(this.canvas.el, this.runtime), () => {
28924
28936
  const canvas = this.canvas.el;
28925
28937
  const rect = canvas.getBoundingClientRect();
28926
- return [rect.width, rect.height, this.runtime, this.canvas.el];
28938
+ return [rect.width, rect.height, this.runtime, this.canvas.el, window.devicePixelRatio];
28927
28939
  });
28928
28940
  }
28929
28941
  }
@@ -29048,9 +29060,6 @@ stores.inject(MyMetaStore, storeInstance);
29048
29060
  };
29049
29061
  }
29050
29062
  getDefinitionForExcel() {
29051
- // Excel does not support aggregating labels
29052
- if (this.aggregated)
29053
- return undefined;
29054
29063
  const dataSets = this.dataSets
29055
29064
  .map((ds) => toExcelDataset(this.getters, ds))
29056
29065
  .filter((ds) => ds.range !== "" && ds.range !== CellErrorType.InvalidReference);
@@ -30291,9 +30300,6 @@ stores.inject(MyMetaStore, storeInstance);
30291
30300
  return new LineChart(definition, this.sheetId, this.getters);
30292
30301
  }
30293
30302
  getDefinitionForExcel() {
30294
- // Excel does not support aggregating labels
30295
- if (this.aggregated)
30296
- return undefined;
30297
30303
  const dataSets = this.dataSets
30298
30304
  .map((ds) => toExcelDataset(this.getters, ds))
30299
30305
  .filter((ds) => ds.range !== "" && ds.range !== CellErrorType.InvalidReference);
@@ -30404,9 +30410,6 @@ stores.inject(MyMetaStore, storeInstance);
30404
30410
  return new PieChart(definition, sheetId, this.getters);
30405
30411
  }
30406
30412
  getDefinitionForExcel() {
30407
- // Excel does not support aggregating labels
30408
- if (this.aggregated)
30409
- return undefined;
30410
30413
  const dataSets = this.dataSets
30411
30414
  .map((ds) => toExcelDataset(this.getters, ds))
30412
30415
  .filter((ds) => ds.range !== "" && ds.range !== CellErrorType.InvalidReference);
@@ -32625,18 +32628,28 @@ stores.inject(MyMetaStore, storeInstance);
32625
32628
  function useInterval(callback, delay) {
32626
32629
  let intervalId;
32627
32630
  const { setInterval, clearInterval } = window;
32631
+ const pause = () => {
32632
+ clearInterval(intervalId);
32633
+ intervalId = undefined;
32634
+ };
32635
+ const safeCallback = () => {
32636
+ try {
32637
+ callback();
32638
+ }
32639
+ catch (e) {
32640
+ pause();
32641
+ throw e;
32642
+ }
32643
+ };
32628
32644
  owl.useEffect(() => {
32629
- intervalId = setInterval(callback, delay);
32645
+ intervalId = setInterval(safeCallback, delay);
32630
32646
  return () => clearInterval(intervalId);
32631
32647
  }, () => [delay]);
32632
32648
  return {
32633
- pause: () => {
32634
- clearInterval(intervalId);
32635
- intervalId = undefined;
32636
- },
32649
+ pause,
32637
32650
  resume: () => {
32638
32651
  if (intervalId === undefined) {
32639
- intervalId = setInterval(callback, delay);
32652
+ intervalId = setInterval(safeCallback, delay);
32640
32653
  }
32641
32654
  },
32642
32655
  };
@@ -37481,7 +37494,7 @@ stores.inject(MyMetaStore, storeInstance);
37481
37494
  }
37482
37495
  setHexColor(ev) {
37483
37496
  // only support HEX code input
37484
- const val = ev.target.value.slice(0, 7);
37497
+ const val = ev.target.value.replace("##", "#").slice(0, 7);
37485
37498
  this.state.customHexColor = val;
37486
37499
  if (!isColorValid(val)) ;
37487
37500
  else {
@@ -48356,7 +48369,7 @@ stores.inject(MyMetaStore, storeInstance);
48356
48369
  position: absolute;
48357
48370
  top: 0;
48358
48371
  left: ${HEADER_WIDTH}px;
48359
- right: 0;
48372
+ right: ${SCROLLBAR_WIDTH}px;
48360
48373
  height: ${HEADER_HEIGHT}px;
48361
48374
  &.o-dragging {
48362
48375
  cursor: grabbing;
@@ -48522,9 +48535,8 @@ stores.inject(MyMetaStore, storeInstance);
48522
48535
  position: absolute;
48523
48536
  top: ${HEADER_HEIGHT}px;
48524
48537
  left: 0;
48525
- right: 0;
48538
+ bottom: ${SCROLLBAR_WIDTH}px;
48526
48539
  width: ${HEADER_WIDTH}px;
48527
- height: calc(100% - ${HEADER_HEIGHT + SCROLLBAR_WIDTH}px);
48528
48540
  &.o-dragging {
48529
48541
  cursor: grabbing;
48530
48542
  }
@@ -56609,6 +56621,15 @@ stores.inject(MyMetaStore, storeInstance);
56609
56621
  }
56610
56622
  }
56611
56623
  class SpreadsheetPivotCorePlugin extends CorePlugin {
56624
+ allowDispatch(cmd) {
56625
+ switch (cmd.type) {
56626
+ case "ADD_PIVOT":
56627
+ case "UPDATE_PIVOT":
56628
+ const definition = cmd.pivot;
56629
+ return this.checkDataSetValidity(definition);
56630
+ }
56631
+ return "Success" /* CommandResult.Success */;
56632
+ }
56612
56633
  adaptRanges(applyChange) {
56613
56634
  for (const pivotId of this.getters.getPivotIds()) {
56614
56635
  const definition = this.getters.getPivotCoreDefinition(pivotId);
@@ -56627,6 +56648,16 @@ stores.inject(MyMetaStore, storeInstance);
56627
56648
  }
56628
56649
  }
56629
56650
  }
56651
+ checkDataSetValidity(definition) {
56652
+ if (definition.type === "SPREADSHEET" && definition.dataSet) {
56653
+ const { zone, sheetId } = definition.dataSet;
56654
+ if (!sheetId || !this.getters.tryGetSheet(sheetId) || !zone || !isZoneValid(zone)) {
56655
+ return "InvalidDataSet" /* CommandResult.InvalidDataSet */;
56656
+ }
56657
+ return this.getters.checkZonesExistInSheet(sheetId, [zone]);
56658
+ }
56659
+ return "Success" /* CommandResult.Success */;
56660
+ }
56630
56661
  }
56631
56662
 
56632
56663
  class TableStylePlugin extends CorePlugin {
@@ -59464,7 +59495,7 @@ stores.inject(MyMetaStore, storeInstance);
59464
59495
  tables = {};
59465
59496
  handle(cmd) {
59466
59497
  if (invalidateEvaluationCommands.has(cmd.type) ||
59467
- (cmd.type === "UPDATE_CELL" && "content" in cmd) ||
59498
+ (cmd.type === "UPDATE_CELL" && ("content" in cmd || "format" in cmd)) ||
59468
59499
  cmd.type === "EVALUATE_CELLS") {
59469
59500
  this.tables = {};
59470
59501
  return;
@@ -59897,6 +59928,16 @@ stores.inject(MyMetaStore, storeInstance);
59897
59928
  }
59898
59929
  return values;
59899
59930
  }
59931
+ else if (rowDomain.length === this.definition.rows.length &&
59932
+ colDomain.length &&
59933
+ colDomain.length < this.definition.columns.length) {
59934
+ const colSubTree = this.getSubTreeMatchingDomain(table.getColTree(), colDomain);
59935
+ const domains = this.treeToLeafDomains(colSubTree, colDomain);
59936
+ for (const domain of domains) {
59937
+ values.push(this._getPivotCellValueAndFormat(measure.id, rowDomain.concat(domain)));
59938
+ }
59939
+ return values;
59940
+ }
59900
59941
  else {
59901
59942
  const tree = table.getRowTree();
59902
59943
  const subTree = this.getSubTreeMatchingDomain(tree, rowDomain);
@@ -63258,7 +63299,7 @@ stores.inject(MyMetaStore, storeInstance);
63258
63299
  tableStyles = {};
63259
63300
  handle(cmd) {
63260
63301
  if (invalidateEvaluationCommands.has(cmd.type) ||
63261
- (cmd.type === "UPDATE_CELL" && "content" in cmd) ||
63302
+ (cmd.type === "UPDATE_CELL" && ("content" in cmd || "format" in cmd)) ||
63262
63303
  cmd.type === "EVALUATE_CELLS") {
63263
63304
  this.tableStyles = {};
63264
63305
  return;
@@ -65222,6 +65263,8 @@ stores.inject(MyMetaStore, storeInstance);
65222
65263
  });
65223
65264
  this.selectCell(col, row);
65224
65265
  }
65266
+ const { col, row } = this.gridSelection.anchor.cell;
65267
+ this.moveClient({ sheetId: this.activeSheet.id, col, row });
65225
65268
  }
65226
65269
  /**
65227
65270
  * Ensure selections are not outside sheet boundaries.
@@ -65954,8 +65997,11 @@ stores.inject(MyMetaStore, storeInstance);
65954
65997
  case "REMOVE_TABLE":
65955
65998
  case "UPDATE_TABLE":
65956
65999
  case "UPDATE_FILTER":
65957
- this.sheetsWithDirtyViewports.add(cmd.sheetId);
65958
- break;
66000
+ case "UNFREEZE_ROWS":
66001
+ case "UNFREEZE_COLUMNS":
66002
+ case "FREEZE_COLUMNS":
66003
+ case "FREEZE_ROWS":
66004
+ case "UNFREEZE_COLUMNS_ROWS":
65959
66005
  case "REMOVE_COLUMNS_ROWS":
65960
66006
  case "RESIZE_COLUMNS_ROWS":
65961
66007
  case "HIDE_COLUMNS_ROWS":
@@ -65968,11 +66014,9 @@ stores.inject(MyMetaStore, storeInstance);
65968
66014
  case "FOLD_HEADER_GROUPS_IN_ZONE":
65969
66015
  case "UNFOLD_HEADER_GROUPS_IN_ZONE":
65970
66016
  case "UNFOLD_ALL_HEADER_GROUPS":
65971
- case "FOLD_ALL_HEADER_GROUPS": {
65972
- const sheetId = "sheetId" in cmd ? cmd.sheetId : this.getters.getActiveSheetId();
65973
- this.sheetsWithDirtyViewports.add(sheetId);
66017
+ case "FOLD_ALL_HEADER_GROUPS":
66018
+ this.sheetsWithDirtyViewports.add(cmd.sheetId);
65974
66019
  break;
65975
- }
65976
66020
  case "UPDATE_CELL":
65977
66021
  // update cell content or format can change hidden rows because of data filters
65978
66022
  if ("content" in cmd || "format" in cmd || cmd.style?.fontSize !== undefined) {
@@ -65988,13 +66032,6 @@ stores.inject(MyMetaStore, storeInstance);
65988
66032
  case "ACTIVATE_SHEET":
65989
66033
  this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
65990
66034
  break;
65991
- case "UNFREEZE_ROWS":
65992
- case "UNFREEZE_COLUMNS":
65993
- case "FREEZE_COLUMNS":
65994
- case "FREEZE_ROWS":
65995
- case "UNFREEZE_COLUMNS_ROWS":
65996
- this.resetViewports(this.getters.getActiveSheetId());
65997
- break;
65998
66035
  case "DELETE_SHEET":
65999
66036
  this.sheetsWithDirtyViewports.delete(cmd.sheetId);
66000
66037
  break;
@@ -67174,7 +67211,7 @@ stores.inject(MyMetaStore, storeInstance);
67174
67211
  }
67175
67212
  handle(cmd) {
67176
67213
  if (invalidateEvaluationCommands.has(cmd.type) ||
67177
- (cmd.type === "UPDATE_CELL" && "content" in cmd)) {
67214
+ (cmd.type === "UPDATE_CELL" && ("content" in cmd || "format" in cmd))) {
67178
67215
  this.isDirty = true;
67179
67216
  }
67180
67217
  switch (cmd.type) {
@@ -73756,9 +73793,9 @@ stores.inject(MyMetaStore, storeInstance);
73756
73793
  exports.tokenize = tokenize;
73757
73794
 
73758
73795
 
73759
- __info__.version = "18.0.24";
73760
- __info__.date = "2025-04-18T16:23:09.320Z";
73761
- __info__.hash = "aa18758";
73796
+ __info__.version = "18.0.26";
73797
+ __info__.date = "2025-05-02T12:30:31.966Z";
73798
+ __info__.hash = "5bdf504";
73762
73799
 
73763
73800
 
73764
73801
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);