@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
  import { useEnv, useSubEnv, onWillUnmount, useComponent, status, Component, useRef, onMounted, useEffect, useState, onPatched, onWillPatch, onWillUpdateProps, useExternalListener, onWillStart, xml, useChildSubEnv, markRaw, toRaw } from '@odoo/owl';
@@ -3591,6 +3591,7 @@ var CommandResult;
3591
3591
  CommandResult["ValueCellIsInvalidFormula"] = "ValueCellIsInvalidFormula";
3592
3592
  CommandResult["InvalidDefinition"] = "InvalidDefinition";
3593
3593
  CommandResult["InvalidColor"] = "InvalidColor";
3594
+ CommandResult["InvalidPivotDataSet"] = "InvalidPivotDataSet";
3594
3595
  })(CommandResult || (CommandResult = {}));
3595
3596
 
3596
3597
  const DEFAULT_LOCALES = [
@@ -3663,11 +3664,13 @@ const CellErrorType = {
3663
3664
  NullError: "#NULL!",
3664
3665
  };
3665
3666
  const errorTypes = new Set(Object.values(CellErrorType));
3666
- class EvaluationError extends Error {
3667
+ class EvaluationError {
3668
+ message;
3667
3669
  value;
3668
3670
  constructor(message = _t("Error"), value = CellErrorType.GenericError) {
3669
- super(message);
3671
+ this.message = message;
3670
3672
  this.value = value;
3673
+ this.message = message.toString();
3671
3674
  }
3672
3675
  }
3673
3676
  class BadExpressionError extends EvaluationError {
@@ -15666,9 +15669,11 @@ const GAUGE_TITLE_PADDING_LEFT = SCORECARD_GAUGE_CHART_PADDING;
15666
15669
  const GAUGE_TITLE_PADDING_TOP = SCORECARD_GAUGE_CHART_PADDING;
15667
15670
  function drawGaugeChart(canvas, runtime) {
15668
15671
  const canvasBoundingRect = canvas.getBoundingClientRect();
15669
- canvas.width = canvasBoundingRect.width;
15670
- canvas.height = canvasBoundingRect.height;
15672
+ const dpr = window.devicePixelRatio || 1;
15673
+ canvas.width = dpr * canvasBoundingRect.width;
15674
+ canvas.height = dpr * canvasBoundingRect.height;
15671
15675
  const ctx = canvas.getContext("2d");
15676
+ ctx.scale(dpr, dpr);
15672
15677
  const config = getGaugeRenderingConfig(canvasBoundingRect, runtime, ctx);
15673
15678
  drawBackground(ctx, config);
15674
15679
  drawGauge(ctx, config);
@@ -16230,9 +16235,11 @@ let ScorecardChart$1 = class ScorecardChart extends AbstractChart {
16230
16235
  };
16231
16236
  function drawScoreChart(structure, canvas) {
16232
16237
  const ctx = canvas.getContext("2d");
16233
- canvas.width = structure.canvas.width;
16234
- const availableWidth = canvas.width - DEFAULT_CHART_PADDING;
16235
- canvas.height = structure.canvas.height;
16238
+ const dpr = window.devicePixelRatio || 1;
16239
+ canvas.width = dpr * structure.canvas.width;
16240
+ canvas.height = dpr * structure.canvas.height;
16241
+ ctx.scale(dpr, dpr);
16242
+ const availableWidth = structure.canvas.width - DEFAULT_CHART_PADDING;
16236
16243
  ctx.fillStyle = structure.canvas.backgroundColor;
16237
16244
  ctx.fillRect(0, 0, structure.canvas.width, structure.canvas.height);
16238
16245
  if (structure.title) {
@@ -16909,6 +16916,7 @@ class ChartJsComponent extends Component {
16909
16916
  canvas = useRef("graphContainer");
16910
16917
  chart;
16911
16918
  currentRuntime;
16919
+ currentDevicePixelRatio = window.devicePixelRatio;
16912
16920
  get background() {
16913
16921
  return this.chartRuntime.background;
16914
16922
  }
@@ -16942,6 +16950,10 @@ class ChartJsComponent extends Component {
16942
16950
  }
16943
16951
  this.currentRuntime = runtime;
16944
16952
  }
16953
+ else if (this.currentDevicePixelRatio !== window.devicePixelRatio) {
16954
+ this.currentDevicePixelRatio = window.devicePixelRatio;
16955
+ this.updateChartJs(deepCopy(this.currentRuntime));
16956
+ }
16945
16957
  });
16946
16958
  }
16947
16959
  createChart(chartData) {
@@ -16984,7 +16996,7 @@ class ScorecardChart extends Component {
16984
16996
  useEffect(this.createChart.bind(this), () => {
16985
16997
  const canvas = this.canvas.el;
16986
16998
  const rect = canvas.getBoundingClientRect();
16987
- return [rect.width, rect.height, this.runtime, this.canvas.el];
16999
+ return [rect.width, rect.height, this.runtime, this.canvas.el, window.devicePixelRatio];
16988
17000
  });
16989
17001
  }
16990
17002
  createChart() {
@@ -17452,7 +17464,7 @@ const MINVERSE = {
17452
17464
  assertSquareMatrix(_t("The argument square_matrix must have the same number of columns and rows."), _matrix);
17453
17465
  const { inverted } = invertMatrix(_matrix);
17454
17466
  if (!inverted) {
17455
- throw new EvaluationError(_t("The matrix is not invertible."));
17467
+ return new EvaluationError(_t("The matrix is not invertible."));
17456
17468
  }
17457
17469
  return inverted;
17458
17470
  },
@@ -17612,7 +17624,7 @@ const TOCOL = {
17612
17624
  .flat()
17613
17625
  .filter(shouldKeepValue(_ignore));
17614
17626
  if (result.length === 0) {
17615
- throw new NotAvailableError(_t("No results for the given arguments of TOCOL."));
17627
+ return new NotAvailableError(_t("No results for the given arguments of TOCOL."));
17616
17628
  }
17617
17629
  return [result];
17618
17630
  },
@@ -17633,7 +17645,7 @@ const TOROW = {
17633
17645
  .filter(shouldKeepValue(_ignore))
17634
17646
  .map((item) => [item]);
17635
17647
  if (result.length === 0 || result[0].length === 0) {
17636
- throw new NotAvailableError(_t("No results for the given arguments of TOROW."));
17648
+ return new NotAvailableError(_t("No results for the given arguments of TOROW."));
17637
17649
  }
17638
17650
  return result;
17639
17651
  },
@@ -18480,7 +18492,7 @@ const PRODUCT = {
18480
18492
  count += 1;
18481
18493
  }
18482
18494
  if (isEvaluationError(f)) {
18483
- throw j;
18495
+ return j;
18484
18496
  }
18485
18497
  }
18486
18498
  }
@@ -19383,7 +19395,7 @@ const MATTHEWS = {
19383
19395
  const flatY = dataY.flat();
19384
19396
  assertSameNumberOfElements(flatX, flatY);
19385
19397
  if (flatX.length === 0) {
19386
- throw new EvaluationError(_t("[[FUNCTION_NAME]] expects non-empty ranges for both parameters."));
19398
+ return new EvaluationError(_t("[[FUNCTION_NAME]] expects non-empty ranges for both parameters."));
19387
19399
  }
19388
19400
  const n = flatX.length;
19389
19401
  let trueN = 0, trueP = 0, falseP = 0, falseN = 0;
@@ -19746,7 +19758,7 @@ const RANK = {
19746
19758
  }
19747
19759
  }
19748
19760
  if (!found) {
19749
- throw new NotAvailableError(_t("Value not found in the given data."));
19761
+ return new NotAvailableError(_t("Value not found in the given data."));
19750
19762
  }
19751
19763
  return rank;
19752
19764
  },
@@ -21371,7 +21383,7 @@ const FILTER = {
21371
21383
  }
21372
21384
  }
21373
21385
  if (!result.length) {
21374
- throw new NotAvailableError(_t("No match found in FILTER evaluation"));
21386
+ return new NotAvailableError(_t("No match found in FILTER evaluation"));
21375
21387
  }
21376
21388
  return mode === "row" ? transposeMatrix(result) : result;
21377
21389
  },
@@ -21500,7 +21512,7 @@ const UNIQUE = {
21500
21512
  result.push(row.data);
21501
21513
  }
21502
21514
  if (!result.length)
21503
- throw new EvaluationError(_t("No unique values found"));
21515
+ return new EvaluationError(_t("No unique values found"));
21504
21516
  return _byColumn ? result : transposeMatrix(result);
21505
21517
  },
21506
21518
  isExported: true,
@@ -24426,7 +24438,7 @@ const IFS = {
24426
24438
  return result;
24427
24439
  }
24428
24440
  }
24429
- throw new EvaluationError(_t("No match."));
24441
+ return new EvaluationError(_t("No match."));
24430
24442
  },
24431
24443
  isExported: true,
24432
24444
  };
@@ -24617,7 +24629,7 @@ const COLUMN = {
24617
24629
  ],
24618
24630
  compute: function (cellReference) {
24619
24631
  if (isEvaluationError(cellReference?.value)) {
24620
- throw cellReference;
24632
+ return cellReference;
24621
24633
  }
24622
24634
  const column = cellReference === undefined
24623
24635
  ? this.__originCellPosition?.col
@@ -24635,7 +24647,7 @@ const COLUMNS = {
24635
24647
  args: [arg("range (meta)", _t("The range whose column count will be returned."))],
24636
24648
  compute: function (range) {
24637
24649
  if (isEvaluationError(range?.value)) {
24638
- throw range;
24650
+ return range;
24639
24651
  }
24640
24652
  const zone = toZone(range.value);
24641
24653
  return zone.right - zone.left + 1;
@@ -24713,11 +24725,11 @@ const INDIRECT = {
24713
24725
  compute: function (reference, useA1Notation = { value: true }) {
24714
24726
  let _reference = reference?.value?.toString();
24715
24727
  if (!_reference) {
24716
- throw new InvalidReferenceError(_t("Reference should be defined."));
24728
+ return new InvalidReferenceError(_t("Reference should be defined."));
24717
24729
  }
24718
24730
  const _useA1Notation = toBoolean(useA1Notation);
24719
24731
  if (!_useA1Notation) {
24720
- throw new EvaluationError(_t("R1C1 notation is not supported."));
24732
+ return new EvaluationError(_t("R1C1 notation is not supported."));
24721
24733
  }
24722
24734
  const sheetId = this.__originSheetId;
24723
24735
  const originPosition = this.__originCellPosition;
@@ -24729,7 +24741,7 @@ const INDIRECT = {
24729
24741
  }
24730
24742
  const range = this.getters.getRangeFromSheetXC(sheetId, _reference);
24731
24743
  if (range === undefined || range.invalidXc || range.invalidSheetName) {
24732
- throw new InvalidReferenceError();
24744
+ return new InvalidReferenceError();
24733
24745
  }
24734
24746
  if (originPosition) {
24735
24747
  this.addDependencies?.(originPosition, [range]);
@@ -24840,7 +24852,7 @@ const ROW = {
24840
24852
  ],
24841
24853
  compute: function (cellReference) {
24842
24854
  if (isEvaluationError(cellReference?.value)) {
24843
- throw cellReference;
24855
+ return cellReference;
24844
24856
  }
24845
24857
  const row = cellReference === undefined
24846
24858
  ? this.__originCellPosition?.row
@@ -24858,7 +24870,7 @@ const ROWS = {
24858
24870
  args: [arg("range (meta)", _t("The range whose row count will be returned."))],
24859
24871
  compute: function (range) {
24860
24872
  if (isEvaluationError(range?.value)) {
24861
- throw range;
24873
+ return range;
24862
24874
  }
24863
24875
  const zone = toZone(range.value);
24864
24876
  return zone.bottom - zone.top + 1;
@@ -25044,11 +25056,11 @@ const PIVOT = {
25044
25056
  const _pivotFormulaId = toString(pivotFormulaId);
25045
25057
  const _rowCount = toNumber(rowCount, this.locale);
25046
25058
  if (_rowCount < 0) {
25047
- throw new EvaluationError(_t("The number of rows must be positive."));
25059
+ return new EvaluationError(_t("The number of rows must be positive."));
25048
25060
  }
25049
25061
  const _columnCount = toNumber(columnCount, this.locale);
25050
25062
  if (_columnCount < 0) {
25051
- throw new EvaluationError(_t("The number of columns must be positive."));
25063
+ return new EvaluationError(_t("The number of columns must be positive."));
25052
25064
  }
25053
25065
  const _includeColumnHeaders = toBoolean(includeColumnHeaders);
25054
25066
  const _includedTotal = toBoolean(includeTotal);
@@ -25116,7 +25128,7 @@ const OFFSET = {
25116
25128
  }
25117
25129
  const _cellReference = cellReference?.value;
25118
25130
  if (!_cellReference) {
25119
- throw new Error("In this context, the function OFFSET needs to have a cell or range in parameter.");
25131
+ return new EvaluationError("In this context, the function OFFSET needs to have a cell or range in parameter.");
25120
25132
  }
25121
25133
  const zone = toZone(_cellReference);
25122
25134
  let offsetHeight = zone.bottom - zone.top + 1;
@@ -28922,7 +28934,7 @@ class GaugeChartComponent extends Component {
28922
28934
  useEffect(() => drawGaugeChart(this.canvas.el, this.runtime), () => {
28923
28935
  const canvas = this.canvas.el;
28924
28936
  const rect = canvas.getBoundingClientRect();
28925
- return [rect.width, rect.height, this.runtime, this.canvas.el];
28937
+ return [rect.width, rect.height, this.runtime, this.canvas.el, window.devicePixelRatio];
28926
28938
  });
28927
28939
  }
28928
28940
  }
@@ -29047,9 +29059,6 @@ class BarChart extends AbstractChart {
29047
29059
  };
29048
29060
  }
29049
29061
  getDefinitionForExcel() {
29050
- // Excel does not support aggregating labels
29051
- if (this.aggregated)
29052
- return undefined;
29053
29062
  const dataSets = this.dataSets
29054
29063
  .map((ds) => toExcelDataset(this.getters, ds))
29055
29064
  .filter((ds) => ds.range !== "" && ds.range !== CellErrorType.InvalidReference);
@@ -30290,9 +30299,6 @@ class LineChart extends AbstractChart {
30290
30299
  return new LineChart(definition, this.sheetId, this.getters);
30291
30300
  }
30292
30301
  getDefinitionForExcel() {
30293
- // Excel does not support aggregating labels
30294
- if (this.aggregated)
30295
- return undefined;
30296
30302
  const dataSets = this.dataSets
30297
30303
  .map((ds) => toExcelDataset(this.getters, ds))
30298
30304
  .filter((ds) => ds.range !== "" && ds.range !== CellErrorType.InvalidReference);
@@ -30403,9 +30409,6 @@ class PieChart extends AbstractChart {
30403
30409
  return new PieChart(definition, sheetId, this.getters);
30404
30410
  }
30405
30411
  getDefinitionForExcel() {
30406
- // Excel does not support aggregating labels
30407
- if (this.aggregated)
30408
- return undefined;
30409
30412
  const dataSets = this.dataSets
30410
30413
  .map((ds) => toExcelDataset(this.getters, ds))
30411
30414
  .filter((ds) => ds.range !== "" && ds.range !== CellErrorType.InvalidReference);
@@ -32624,18 +32627,28 @@ linkMenuRegistry.add("sheet", {
32624
32627
  function useInterval(callback, delay) {
32625
32628
  let intervalId;
32626
32629
  const { setInterval, clearInterval } = window;
32630
+ const pause = () => {
32631
+ clearInterval(intervalId);
32632
+ intervalId = undefined;
32633
+ };
32634
+ const safeCallback = () => {
32635
+ try {
32636
+ callback();
32637
+ }
32638
+ catch (e) {
32639
+ pause();
32640
+ throw e;
32641
+ }
32642
+ };
32627
32643
  useEffect(() => {
32628
- intervalId = setInterval(callback, delay);
32644
+ intervalId = setInterval(safeCallback, delay);
32629
32645
  return () => clearInterval(intervalId);
32630
32646
  }, () => [delay]);
32631
32647
  return {
32632
- pause: () => {
32633
- clearInterval(intervalId);
32634
- intervalId = undefined;
32635
- },
32648
+ pause,
32636
32649
  resume: () => {
32637
32650
  if (intervalId === undefined) {
32638
- intervalId = setInterval(callback, delay);
32651
+ intervalId = setInterval(safeCallback, delay);
32639
32652
  }
32640
32653
  },
32641
32654
  };
@@ -37480,7 +37493,7 @@ class ColorPicker extends Component {
37480
37493
  }
37481
37494
  setHexColor(ev) {
37482
37495
  // only support HEX code input
37483
- const val = ev.target.value.slice(0, 7);
37496
+ const val = ev.target.value.replace("##", "#").slice(0, 7);
37484
37497
  this.state.customHexColor = val;
37485
37498
  if (!isColorValid(val)) ;
37486
37499
  else {
@@ -48355,7 +48368,7 @@ css /* scss */ `
48355
48368
  position: absolute;
48356
48369
  top: 0;
48357
48370
  left: ${HEADER_WIDTH}px;
48358
- right: 0;
48371
+ right: ${SCROLLBAR_WIDTH}px;
48359
48372
  height: ${HEADER_HEIGHT}px;
48360
48373
  &.o-dragging {
48361
48374
  cursor: grabbing;
@@ -48521,9 +48534,8 @@ css /* scss */ `
48521
48534
  position: absolute;
48522
48535
  top: ${HEADER_HEIGHT}px;
48523
48536
  left: 0;
48524
- right: 0;
48537
+ bottom: ${SCROLLBAR_WIDTH}px;
48525
48538
  width: ${HEADER_WIDTH}px;
48526
- height: calc(100% - ${HEADER_HEIGHT + SCROLLBAR_WIDTH}px);
48527
48539
  &.o-dragging {
48528
48540
  cursor: grabbing;
48529
48541
  }
@@ -56608,6 +56620,15 @@ function adaptPivotRange(range, applyChange) {
56608
56620
  }
56609
56621
  }
56610
56622
  class SpreadsheetPivotCorePlugin extends CorePlugin {
56623
+ allowDispatch(cmd) {
56624
+ switch (cmd.type) {
56625
+ case "ADD_PIVOT":
56626
+ case "UPDATE_PIVOT":
56627
+ const definition = cmd.pivot;
56628
+ return this.checkDataSetValidity(definition);
56629
+ }
56630
+ return "Success" /* CommandResult.Success */;
56631
+ }
56611
56632
  adaptRanges(applyChange) {
56612
56633
  for (const pivotId of this.getters.getPivotIds()) {
56613
56634
  const definition = this.getters.getPivotCoreDefinition(pivotId);
@@ -56626,6 +56647,16 @@ class SpreadsheetPivotCorePlugin extends CorePlugin {
56626
56647
  }
56627
56648
  }
56628
56649
  }
56650
+ checkDataSetValidity(definition) {
56651
+ if (definition.type === "SPREADSHEET" && definition.dataSet) {
56652
+ const { zone, sheetId } = definition.dataSet;
56653
+ if (!sheetId || !this.getters.tryGetSheet(sheetId) || !zone || !isZoneValid(zone)) {
56654
+ return "InvalidDataSet" /* CommandResult.InvalidDataSet */;
56655
+ }
56656
+ return this.getters.checkZonesExistInSheet(sheetId, [zone]);
56657
+ }
56658
+ return "Success" /* CommandResult.Success */;
56659
+ }
56629
56660
  }
56630
56661
 
56631
56662
  class TableStylePlugin extends CorePlugin {
@@ -59463,7 +59494,7 @@ class DynamicTablesPlugin extends UIPlugin {
59463
59494
  tables = {};
59464
59495
  handle(cmd) {
59465
59496
  if (invalidateEvaluationCommands.has(cmd.type) ||
59466
- (cmd.type === "UPDATE_CELL" && "content" in cmd) ||
59497
+ (cmd.type === "UPDATE_CELL" && ("content" in cmd || "format" in cmd)) ||
59467
59498
  cmd.type === "EVALUATE_CELLS") {
59468
59499
  this.tables = {};
59469
59500
  return;
@@ -59896,6 +59927,16 @@ function withPivotPresentationLayer (PivotClass) {
59896
59927
  }
59897
59928
  return values;
59898
59929
  }
59930
+ else if (rowDomain.length === this.definition.rows.length &&
59931
+ colDomain.length &&
59932
+ colDomain.length < this.definition.columns.length) {
59933
+ const colSubTree = this.getSubTreeMatchingDomain(table.getColTree(), colDomain);
59934
+ const domains = this.treeToLeafDomains(colSubTree, colDomain);
59935
+ for (const domain of domains) {
59936
+ values.push(this._getPivotCellValueAndFormat(measure.id, rowDomain.concat(domain)));
59937
+ }
59938
+ return values;
59939
+ }
59899
59940
  else {
59900
59941
  const tree = table.getRowTree();
59901
59942
  const subTree = this.getSubTreeMatchingDomain(tree, rowDomain);
@@ -63257,7 +63298,7 @@ class TableComputedStylePlugin extends UIPlugin {
63257
63298
  tableStyles = {};
63258
63299
  handle(cmd) {
63259
63300
  if (invalidateEvaluationCommands.has(cmd.type) ||
63260
- (cmd.type === "UPDATE_CELL" && "content" in cmd) ||
63301
+ (cmd.type === "UPDATE_CELL" && ("content" in cmd || "format" in cmd)) ||
63261
63302
  cmd.type === "EVALUATE_CELLS") {
63262
63303
  this.tableStyles = {};
63263
63304
  return;
@@ -65221,6 +65262,8 @@ class GridSelectionPlugin extends UIPlugin {
65221
65262
  });
65222
65263
  this.selectCell(col, row);
65223
65264
  }
65265
+ const { col, row } = this.gridSelection.anchor.cell;
65266
+ this.moveClient({ sheetId: this.activeSheet.id, col, row });
65224
65267
  }
65225
65268
  /**
65226
65269
  * Ensure selections are not outside sheet boundaries.
@@ -65953,8 +65996,11 @@ class SheetViewPlugin extends UIPlugin {
65953
65996
  case "REMOVE_TABLE":
65954
65997
  case "UPDATE_TABLE":
65955
65998
  case "UPDATE_FILTER":
65956
- this.sheetsWithDirtyViewports.add(cmd.sheetId);
65957
- break;
65999
+ case "UNFREEZE_ROWS":
66000
+ case "UNFREEZE_COLUMNS":
66001
+ case "FREEZE_COLUMNS":
66002
+ case "FREEZE_ROWS":
66003
+ case "UNFREEZE_COLUMNS_ROWS":
65958
66004
  case "REMOVE_COLUMNS_ROWS":
65959
66005
  case "RESIZE_COLUMNS_ROWS":
65960
66006
  case "HIDE_COLUMNS_ROWS":
@@ -65967,11 +66013,9 @@ class SheetViewPlugin extends UIPlugin {
65967
66013
  case "FOLD_HEADER_GROUPS_IN_ZONE":
65968
66014
  case "UNFOLD_HEADER_GROUPS_IN_ZONE":
65969
66015
  case "UNFOLD_ALL_HEADER_GROUPS":
65970
- case "FOLD_ALL_HEADER_GROUPS": {
65971
- const sheetId = "sheetId" in cmd ? cmd.sheetId : this.getters.getActiveSheetId();
65972
- this.sheetsWithDirtyViewports.add(sheetId);
66016
+ case "FOLD_ALL_HEADER_GROUPS":
66017
+ this.sheetsWithDirtyViewports.add(cmd.sheetId);
65973
66018
  break;
65974
- }
65975
66019
  case "UPDATE_CELL":
65976
66020
  // update cell content or format can change hidden rows because of data filters
65977
66021
  if ("content" in cmd || "format" in cmd || cmd.style?.fontSize !== undefined) {
@@ -65987,13 +66031,6 @@ class SheetViewPlugin extends UIPlugin {
65987
66031
  case "ACTIVATE_SHEET":
65988
66032
  this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
65989
66033
  break;
65990
- case "UNFREEZE_ROWS":
65991
- case "UNFREEZE_COLUMNS":
65992
- case "FREEZE_COLUMNS":
65993
- case "FREEZE_ROWS":
65994
- case "UNFREEZE_COLUMNS_ROWS":
65995
- this.resetViewports(this.getters.getActiveSheetId());
65996
- break;
65997
66034
  case "DELETE_SHEET":
65998
66035
  this.sheetsWithDirtyViewports.delete(cmd.sheetId);
65999
66036
  break;
@@ -67173,7 +67210,7 @@ class AggregateStatisticsStore extends SpreadsheetStore {
67173
67210
  }
67174
67211
  handle(cmd) {
67175
67212
  if (invalidateEvaluationCommands.has(cmd.type) ||
67176
- (cmd.type === "UPDATE_CELL" && "content" in cmd)) {
67213
+ (cmd.type === "UPDATE_CELL" && ("content" in cmd || "format" in cmd))) {
67177
67214
  this.isDirty = true;
67178
67215
  }
67179
67216
  switch (cmd.type) {
@@ -73712,6 +73749,6 @@ const constants = {
73712
73749
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
73713
73750
 
73714
73751
 
73715
- __info__.version = "18.0.24";
73716
- __info__.date = "2025-04-18T16:23:09.320Z";
73717
- __info__.hash = "aa18758";
73752
+ __info__.version = "18.0.26";
73753
+ __info__.date = "2025-05-02T12:30:31.966Z";
73754
+ __info__.hash = "5bdf504";