@odoo/o-spreadsheet 18.4.1 → 18.4.3

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.4.1
6
- * @date 2025-06-27T09:13:01.303Z
7
- * @hash 5cecc0e
5
+ * @version 18.4.3
6
+ * @date 2025-07-28T13:39:06.036Z
7
+ * @hash 4b596d7
8
8
  */
9
9
 
10
10
  (function (exports, owl) {
@@ -853,6 +853,7 @@
853
853
  ];
854
854
  const specialWhiteSpaceRegexp = new RegExp(specialWhiteSpaceSpecialCharacters.join("|"), "g");
855
855
  const newLineRegexp = /(\r\n|\r)/g;
856
+ const whiteSpaceCharacters = specialWhiteSpaceSpecialCharacters.concat([" "]);
856
857
  /**
857
858
  * Replace all different newlines characters by \n
858
859
  */
@@ -1989,8 +1990,9 @@
1989
1990
  const DATE_JS_1900_OFFSET = INITIAL_JS_DAY.getTime() - INITIAL_1900_DAY.getTime();
1990
1991
  const mdyDateRegexp = /^\d{1,2}(\/|-|\s)\d{1,2}((\/|-|\s)\d{1,4})?$/;
1991
1992
  const ymdDateRegexp = /^\d{3,4}(\/|-|\s)\d{1,2}(\/|-|\s)\d{1,2}$/;
1992
- const dateSeparatorsRegex = /\/|-|\s/;
1993
- const dateRegexp = /^(\d{1,4})[\/-\s](\d{1,4})([\/-\s](\d{1,4}))?$/;
1993
+ const whiteSpaceChars = whiteSpaceCharacters.join("");
1994
+ const dateSeparatorsRegex = new RegExp(`\/|-|${whiteSpaceCharacters.join("|")}`);
1995
+ const dateRegexp = new RegExp(`^(\\d{1,4})[\/${whiteSpaceChars}\-](\\d{1,4})([\/${whiteSpaceChars}\-](\\d{1,4}))?$`);
1994
1996
  const timeRegexp = /((\d+(:\d+)?(:\d+)?\s*(AM|PM))|(\d+:\d+(:\d+)?))$/;
1995
1997
  /** Convert a value number representing a date, or return undefined if it isn't possible */
1996
1998
  function valueToDateNumber(value, locale) {
@@ -6925,6 +6927,8 @@
6925
6927
  function splitTextToWidth(ctx, text, style, width) {
6926
6928
  if (!style)
6927
6929
  style = {};
6930
+ if (isMarkdownLink(text))
6931
+ text = parseMarkdownLink(text).label;
6928
6932
  const brokenText = [];
6929
6933
  // Checking if text contains NEWLINE before split makes it very slightly slower if text contains it,
6930
6934
  // but 5-10x faster if it doesn't
@@ -8765,6 +8769,10 @@
8765
8769
  if (groupValue === null || groupValue === "null") {
8766
8770
  return null;
8767
8771
  }
8772
+ const extractedGroupValue = typeof groupValue === "object" ? groupValue.value : groupValue;
8773
+ if (isEvaluationError(extractedGroupValue)) {
8774
+ return extractedGroupValue;
8775
+ }
8768
8776
  const groupValueString = typeof groupValue === "boolean"
8769
8777
  ? toString(groupValue).toLocaleLowerCase()
8770
8778
  : toString(groupValue);
@@ -19026,13 +19034,19 @@ stores.inject(MyMetaStore, storeInstance);
19026
19034
  if (isEvaluationError(cellReference?.value)) {
19027
19035
  return cellReference;
19028
19036
  }
19029
- const column = cellReference === undefined
19030
- ? this.__originCellPosition?.col
19031
- : toZone(cellReference.value).left;
19032
- if (column === undefined) {
19033
- return new EvaluationError(_t("In this context, the function [[FUNCTION_NAME]] needs to have a cell or range in parameter."));
19037
+ if (cellReference === undefined) {
19038
+ if (this.__originCellPosition?.col === undefined) {
19039
+ return new EvaluationError(_t("In this context, the function [[FUNCTION_NAME]] needs to have a cell or range in parameter."));
19040
+ }
19041
+ return this.__originCellPosition.col + 1;
19042
+ }
19043
+ const zone = this.getters.getRangeFromSheetXC(this.getters.getActiveSheetId(), cellReference.value).zone;
19044
+ if (zone.left === zone.right) {
19045
+ return zone.left + 1;
19034
19046
  }
19035
- return column + 1;
19047
+ return generateMatrix(zone.right - zone.left + 1, 1, (col, row) => ({
19048
+ value: zone.left + col + 1,
19049
+ }));
19036
19050
  },
19037
19051
  isExported: true,
19038
19052
  };
@@ -19263,13 +19277,19 @@ stores.inject(MyMetaStore, storeInstance);
19263
19277
  if (isEvaluationError(cellReference?.value)) {
19264
19278
  return cellReference;
19265
19279
  }
19266
- const row = cellReference === undefined
19267
- ? this.__originCellPosition?.row
19268
- : toZone(cellReference.value).top;
19269
- if (row === undefined) {
19270
- return new EvaluationError(_t("In this context, the function [[FUNCTION_NAME]] needs to have a cell or range in parameter."));
19280
+ if (cellReference === undefined) {
19281
+ if (this.__originCellPosition?.row === undefined) {
19282
+ return new EvaluationError(_t("In this context, the function [[FUNCTION_NAME]] needs to have a cell or range in parameter."));
19283
+ }
19284
+ return this.__originCellPosition.row + 1;
19285
+ }
19286
+ const zone = this.getters.getRangeFromSheetXC(this.getters.getActiveSheetId(), cellReference.value).zone;
19287
+ if (zone.top === zone.bottom) {
19288
+ return zone.top + 1;
19271
19289
  }
19272
- return row + 1;
19290
+ return generateMatrix(1, zone.bottom - zone.top + 1, (col, row) => ({
19291
+ value: zone.top + row + 1,
19292
+ }));
19273
19293
  },
19274
19294
  isExported: true,
19275
19295
  };
@@ -27447,7 +27467,9 @@ stores.inject(MyMetaStore, storeInstance);
27447
27467
  }
27448
27468
  function getFormulaNumberValue(sheetId, formula, getters) {
27449
27469
  const value = getters.evaluateFormula(sheetId, formula);
27450
- return isMatrix(value) ? undefined : tryToNumber(value, getters.getLocale());
27470
+ return isMultipleElementMatrix(value)
27471
+ ? undefined
27472
+ : tryToNumber(toScalar(value), getters.getLocale());
27451
27473
  }
27452
27474
  function getInvalidGaugeRuntime(chart, getters) {
27453
27475
  return {
@@ -31072,6 +31094,9 @@ stores.inject(MyMetaStore, storeInstance);
31072
31094
  return undefined;
31073
31095
  }
31074
31096
  get errorOriginPositionString() {
31097
+ if (this.env.model.getters.isDashboard()) {
31098
+ return "";
31099
+ }
31075
31100
  const evaluationError = this.evaluationError;
31076
31101
  const position = evaluationError?.errorOriginPosition;
31077
31102
  if (!position || deepEquals(position, this.props.cellPosition)) {
@@ -32594,6 +32619,9 @@ stores.inject(MyMetaStore, storeInstance);
32594
32619
  get isAutoCompleteDisplayed() {
32595
32620
  return !!this.autoComplete.provider;
32596
32621
  }
32622
+ get canBeToggled() {
32623
+ return this.autoComplete.provider?.canBeToggled ?? true;
32624
+ }
32597
32625
  cycleReferences() {
32598
32626
  const locale = this.getters.getLocale();
32599
32627
  const updated = cycleFixedReference(this.composerSelection, this._currentContent, locale);
@@ -33123,6 +33151,7 @@ stores.inject(MyMetaStore, storeInstance);
33123
33151
  proposals,
33124
33152
  selectProposal: provider.selectProposal,
33125
33153
  autoSelectFirstProposal: provider.autoSelectFirstProposal ?? false,
33154
+ canBeToggled: provider.canBeToggled,
33126
33155
  };
33127
33156
  }
33128
33157
  if (exactMatch && this._currentContent !== this.initialContent) {
@@ -33145,6 +33174,7 @@ stores.inject(MyMetaStore, storeInstance);
33145
33174
  proposals,
33146
33175
  selectProposal: provider.selectProposal,
33147
33176
  autoSelectFirstProposal: provider.autoSelectFirstProposal ?? false,
33177
+ canBeToggled: provider.canBeToggled,
33148
33178
  };
33149
33179
  }
33150
33180
  }
@@ -33715,9 +33745,13 @@ stores.inject(MyMetaStore, storeInstance);
33715
33745
  }
33716
33746
  }
33717
33747
  closeAssistant() {
33748
+ if (!this.props.composerStore.canBeToggled)
33749
+ return;
33718
33750
  this.assistant.forcedClosed = true;
33719
33751
  }
33720
33752
  openAssistant() {
33753
+ if (!this.props.composerStore.canBeToggled)
33754
+ return;
33721
33755
  this.assistant.forcedClosed = false;
33722
33756
  }
33723
33757
  onWheel(event) {
@@ -33907,7 +33941,7 @@ stores.inject(MyMetaStore, storeInstance);
33907
33941
  return [...new Set(argsToFocus)];
33908
33942
  }
33909
33943
  autoComplete(value) {
33910
- if (!value || this.assistant.forcedClosed) {
33944
+ if (!value || (this.assistant.forcedClosed && this.props.composerStore.canBeToggled)) {
33911
33945
  return;
33912
33946
  }
33913
33947
  this.props.composerStore.insertAutoCompleteValue(value);
@@ -39220,40 +39254,112 @@ stores.inject(MyMetaStore, storeInstance);
39220
39254
  * In all the sheets, replace the table-only references in the formula cells with standard references.
39221
39255
  */
39222
39256
  function convertTableFormulaReferences(convertedSheets, xlsxSheets) {
39257
+ let deconstructedSheets = null;
39223
39258
  for (const tableSheet of convertedSheets) {
39224
39259
  const tables = xlsxSheets.find((s) => isSheetNameEqual(s.sheetName, tableSheet.name)).tables;
39260
+ if (!tables || tables.length === 0) {
39261
+ continue;
39262
+ }
39263
+ // Only deconstruct sheets if we are sure there are tables to process
39264
+ if (!deconstructedSheets) {
39265
+ deconstructedSheets = deconstructSheets(convertedSheets);
39266
+ }
39225
39267
  for (const table of tables) {
39226
- const tabRef = table.name + "[";
39227
- for (const sheet of convertedSheets) {
39228
- for (const xc in sheet.cells) {
39229
- const cell = sheet.cells[xc];
39230
- let cellContent = sheet.cells[xc];
39231
- if (cell && cellContent && cellContent.startsWith("=")) {
39232
- let refIndex;
39233
- while ((refIndex = cellContent.indexOf(tabRef)) !== -1) {
39234
- let endIndex = refIndex + tabRef.length;
39235
- let openBrackets = 1;
39236
- while (openBrackets > 0 && endIndex < cellContent.length) {
39237
- if (cellContent[endIndex] === "[") {
39238
- openBrackets++;
39239
- }
39240
- else if (cellContent[endIndex] === "]") {
39241
- openBrackets--;
39242
- }
39243
- endIndex++;
39244
- }
39245
- const reference = cellContent.slice(refIndex + tabRef.length, endIndex - 1);
39246
- const sheetPrefix = tableSheet.id === sheet.id ? "" : tableSheet.name + "!";
39247
- const convertedRef = convertTableReference(sheetPrefix, reference, table, xc);
39248
- cellContent =
39249
- cellContent.slice(0, refIndex) + convertedRef + cellContent.slice(endIndex);
39268
+ for (const sheetId in deconstructedSheets) {
39269
+ const sheet = convertedSheets.find((s) => s.id === sheetId);
39270
+ for (const xc in deconstructedSheets[sheetId]) {
39271
+ const deconstructedCell = deconstructedSheets[sheetId][xc];
39272
+ for (let i = deconstructedCell.length - 3; i >= 0; i -= 2) {
39273
+ const possibleTable = deconstructedSheets[sheetId][xc][i];
39274
+ if (!possibleTable.endsWith(table.name)) {
39275
+ continue;
39250
39276
  }
39277
+ const possibleRef = deconstructedSheets[sheetId][xc][i + 1];
39278
+ const sheetPrefix = tableSheet.id === sheet.id ? "" : tableSheet.name + "!";
39279
+ const convertedRef = convertTableReference(sheetPrefix, possibleRef, table, xc);
39280
+ deconstructedSheets[sheetId][xc][i + 2] =
39281
+ possibleTable.slice(0, possibleTable.indexOf(table.name)) +
39282
+ convertedRef +
39283
+ deconstructedSheets[sheetId][xc][i + 2];
39284
+ deconstructedSheets[sheetId][xc].splice(i, 2);
39251
39285
  }
39252
- sheet.cells[xc] = cellContent;
39286
+ // sheet.cells[xc] = cellContent;
39253
39287
  }
39254
39288
  }
39255
39289
  }
39256
39290
  }
39291
+ if (!deconstructedSheets) {
39292
+ return;
39293
+ }
39294
+ for (const sheetId in deconstructedSheets) {
39295
+ const sheet = convertedSheets.find((s) => s.id === sheetId);
39296
+ for (const xc in deconstructedSheets[sheetId]) {
39297
+ const deconstructedCell = deconstructedSheets[sheetId][xc];
39298
+ if (deconstructedCell.length === 1) {
39299
+ sheet.cells[xc] = deconstructedCell[0];
39300
+ continue;
39301
+ }
39302
+ let newContent = "";
39303
+ for (let i = 0; i < deconstructedCell.length; i += 2) {
39304
+ newContent += deconstructedCell[i] + "[" + deconstructedCell[i + 1] + "]";
39305
+ }
39306
+ newContent += deconstructedCell[deconstructedCell.length - 1];
39307
+ sheet.cells[xc] = newContent;
39308
+ }
39309
+ }
39310
+ }
39311
+ /**
39312
+ * Deconstruct the content of the cells in the sheets to extract possible table references.
39313
+ * Example from "=AVERAGE(Table1[colName1])-AVERAGE(Table2[colName2])":
39314
+ * return --> ["=AVERAGE(Table1", "colName1", ")-AVERAGE(Table2", "colName2", ")"]
39315
+ */
39316
+ function deconstructSheets(convertedSheets) {
39317
+ const deconstructedSheets = {};
39318
+ for (const sheet of convertedSheets) {
39319
+ for (const xc in sheet.cells) {
39320
+ const cellContent = sheet.cells[xc];
39321
+ if (!cellContent || !cellContent.startsWith("=")) {
39322
+ continue;
39323
+ }
39324
+ const startIndex = cellContent.indexOf("[");
39325
+ if (startIndex === -1) {
39326
+ continue;
39327
+ }
39328
+ const deconstructedCell = [];
39329
+ let possibleTable = cellContent.slice(0, startIndex);
39330
+ let possibleRef = "";
39331
+ let openBrackets = 1;
39332
+ let mainPossibleTableIndex = 0;
39333
+ let mainOpenBracketIndex = startIndex;
39334
+ for (let index = startIndex + 1; index < cellContent.length; index++) {
39335
+ if (cellContent[index] === "[") {
39336
+ if (openBrackets === 0) {
39337
+ possibleTable = cellContent.slice(mainPossibleTableIndex, index);
39338
+ mainOpenBracketIndex = index;
39339
+ }
39340
+ openBrackets++;
39341
+ continue;
39342
+ }
39343
+ if (cellContent[index] === "]") {
39344
+ openBrackets--;
39345
+ if (openBrackets === 0) {
39346
+ possibleRef = cellContent.slice(mainOpenBracketIndex + 1, index);
39347
+ deconstructedCell.push(possibleTable);
39348
+ deconstructedCell.push(possibleRef);
39349
+ mainPossibleTableIndex = index + 1;
39350
+ }
39351
+ }
39352
+ }
39353
+ if (deconstructedCell.length) {
39354
+ if (!deconstructedSheets[sheet.id]) {
39355
+ deconstructedSheets[sheet.id] = {};
39356
+ }
39357
+ deconstructedCell.push(cellContent.slice(mainPossibleTableIndex));
39358
+ deconstructedSheets[sheet.id][xc] = [...deconstructedCell];
39359
+ }
39360
+ }
39361
+ }
39362
+ return deconstructedSheets;
39257
39363
  }
39258
39364
  /**
39259
39365
  * Convert table-specific references in formulas into standard references. A table reference is composed of columns names,
@@ -45565,10 +45671,10 @@ stores.inject(MyMetaStore, storeInstance);
45565
45671
  const cellValue = isFormula(content)
45566
45672
  ? this.getters.evaluateFormula(this.sheetId, content)
45567
45673
  : parseLiteral(content, this.getters.getLocale());
45568
- if (isMatrix(cellValue)) {
45674
+ if (isMultipleElementMatrix(cellValue)) {
45569
45675
  return true;
45570
45676
  }
45571
- const validationResult = this.getters.getValidationResultForCellValue(cellValue, cellPosition);
45677
+ const validationResult = this.getters.getValidationResultForCellValue(toScalar(cellValue), cellPosition);
45572
45678
  if (!validationResult.isValid && validationResult.rule.isBlocking) {
45573
45679
  return false;
45574
45680
  }
@@ -50680,10 +50786,10 @@ stores.inject(MyMetaStore, storeInstance);
50680
50786
  return tryToNumber(value, locale) !== undefined;
50681
50787
  }
50682
50788
  const evaluatedValue = this.env.model.getters.evaluateFormula(this.sheetId, value);
50683
- if (isMatrix(evaluatedValue)) {
50789
+ if (isMultipleElementMatrix(evaluatedValue)) {
50684
50790
  return false;
50685
50791
  }
50686
- return tryToNumber(evaluatedValue, locale) !== undefined;
50792
+ return tryToNumber(toScalar(evaluatedValue), locale) !== undefined;
50687
50793
  }
50688
50794
  get sheetId() {
50689
50795
  const chart = this.env.model.getters.getChart(this.props.figureId);
@@ -55494,10 +55600,7 @@ stores.inject(MyMetaStore, storeInstance);
55494
55600
  if (finalCell.value === null) {
55495
55601
  return { value: _t("(Undefined)") };
55496
55602
  }
55497
- return {
55498
- value: finalCell.value,
55499
- format: finalCell.format,
55500
- };
55603
+ return finalCell;
55501
55604
  }
55502
55605
  getPivotCellValueAndFormat(measureId, domain) {
55503
55606
  const dataEntries = this.filterDataEntriesFromDomain(this.dataEntries, domain);
@@ -55599,9 +55702,15 @@ stores.inject(MyMetaStore, storeInstance);
55599
55702
  return domain.reduce((current, acc) => this.filterDataEntriesFromDomainNode(current, acc), dataEntries);
55600
55703
  }
55601
55704
  filterDataEntriesFromDomainNode(dataEntries, domain) {
55602
- const { field, value } = domain;
55705
+ const { field, value, type } = domain;
55603
55706
  const { nameWithGranularity } = this.getDimension(field);
55604
- return dataEntries.filter((entry) => entry[nameWithGranularity]?.value === value);
55707
+ return dataEntries.filter((entry) => {
55708
+ const cellValue = entry[nameWithGranularity]?.value;
55709
+ if (type === "char") {
55710
+ return String(cellValue) === String(value);
55711
+ }
55712
+ return cellValue === value;
55713
+ });
55605
55714
  }
55606
55715
  getDimension(nameWithGranularity) {
55607
55716
  return this.definition.getDimension(nameWithGranularity);
@@ -55735,7 +55844,6 @@ stores.inject(MyMetaStore, storeInstance);
55735
55844
  ui: SpreadsheetPivot,
55736
55845
  definition: SpreadsheetPivotRuntimeDefinition,
55737
55846
  externalData: false,
55738
- onIterationEndEvaluation: (pivot) => pivot.markAsDirtyForEvaluation(),
55739
55847
  dateGranularities: [...dateGranularities],
55740
55848
  datetimeGranularities: [...dateGranularities, "hour_number", "minute_number", "second_number"],
55741
55849
  isMeasureCandidate: (field) => field.type !== "boolean",
@@ -64386,7 +64494,7 @@ stores.inject(MyMetaStore, storeInstance);
64386
64494
  onIterationEndEvaluationRegistry.add("pivots", (getters) => {
64387
64495
  for (const pivotId of getters.getPivotIds()) {
64388
64496
  const pivot = getters.getPivot(pivotId);
64389
- pivotRegistry.get(pivot.type).onIterationEndEvaluation(pivot);
64497
+ pivot.markAsDirtyForEvaluation?.();
64390
64498
  }
64391
64499
  });
64392
64500
 
@@ -66850,12 +66958,12 @@ stores.inject(MyMetaStore, storeInstance);
66850
66958
  }
66851
66959
  return this.getters.evaluateFormula(sheetId, value) ?? "";
66852
66960
  });
66853
- if (evaluatedCriterionValues.some(isMatrix)) {
66961
+ if (evaluatedCriterionValues.some(isMultipleElementMatrix)) {
66854
66962
  return false;
66855
66963
  }
66856
66964
  const evaluatedCriterion = {
66857
66965
  type: rule.operator,
66858
- values: evaluatedCriterionValues,
66966
+ values: evaluatedCriterionValues.map(toScalar),
66859
66967
  };
66860
66968
  return evaluator.isValueValid(cell.value ?? "", evaluatedCriterion, this.getters, sheetId);
66861
66969
  }
@@ -67015,10 +67123,10 @@ stores.inject(MyMetaStore, storeInstance);
67015
67123
  const evaluator = criterionEvaluatorRegistry.get(criterion.type);
67016
67124
  const offset = this.getCellOffsetInRule(cellPosition, rule);
67017
67125
  const evaluatedCriterionValues = this.getEvaluatedCriterionValues(sheetId, offset, criterion);
67018
- if (evaluatedCriterionValues.some(isMatrix)) {
67126
+ if (evaluatedCriterionValues.some(isMultipleElementMatrix)) {
67019
67127
  return undefined;
67020
67128
  }
67021
- const evaluatedCriterion = { ...criterion, values: evaluatedCriterionValues };
67129
+ const evaluatedCriterion = { ...criterion, values: evaluatedCriterionValues.map(toScalar) };
67022
67130
  if (evaluator.isValueValid(cellValue, evaluatedCriterion, this.getters, sheetId)) {
67023
67131
  return undefined;
67024
67132
  }
@@ -67471,6 +67579,23 @@ stores.inject(MyMetaStore, storeInstance);
67471
67579
  static getters = ["getRowSize", "getHeaderSize", "getMaxAnchorOffset"];
67472
67580
  tallestCellInRow = {};
67473
67581
  ctx = document.createElement("canvas").getContext("2d");
67582
+ beforeHandle(cmd) {
67583
+ switch (cmd.type) {
67584
+ // Ensure rows are updated before "UPDATE_CELL" is dispatched from cell plugin.
67585
+ // "UPDATE_CELL" uses the Sheet core plugin to access row data.
67586
+ // If "ADD_COLUMNS_ROWS" has not been processed yet by header_sizes_ui,
67587
+ // size updates may apply to incorrect (pre-insert) rows.
67588
+ case "ADD_COLUMNS_ROWS":
67589
+ if (cmd.dimension === "COL") {
67590
+ return;
67591
+ }
67592
+ const addIndex = getAddHeaderStartIndex(cmd.position, cmd.base);
67593
+ const newCells = Array(cmd.quantity).fill(undefined);
67594
+ const newTallestCells = insertItemsAtIndex(this.tallestCellInRow[cmd.sheetId], newCells, addIndex);
67595
+ this.history.update("tallestCellInRow", cmd.sheetId, newTallestCells);
67596
+ break;
67597
+ }
67598
+ }
67474
67599
  handle(cmd) {
67475
67600
  switch (cmd.type) {
67476
67601
  case "START":
@@ -67500,16 +67625,6 @@ stores.inject(MyMetaStore, storeInstance);
67500
67625
  this.history.update("tallestCellInRow", cmd.sheetId, tallestCells);
67501
67626
  break;
67502
67627
  }
67503
- case "ADD_COLUMNS_ROWS": {
67504
- if (cmd.dimension === "COL") {
67505
- return;
67506
- }
67507
- const addIndex = getAddHeaderStartIndex(cmd.position, cmd.base);
67508
- const newCells = Array(cmd.quantity).fill(undefined);
67509
- const newTallestCells = insertItemsAtIndex(this.tallestCellInRow[cmd.sheetId], newCells, addIndex);
67510
- this.history.update("tallestCellInRow", cmd.sheetId, newTallestCells);
67511
- break;
67512
- }
67513
67628
  case "RESIZE_COLUMNS_ROWS":
67514
67629
  {
67515
67630
  const sheetId = cmd.sheetId;
@@ -67661,13 +67776,13 @@ stores.inject(MyMetaStore, storeInstance);
67661
67776
  super(custom, params);
67662
67777
  this.getters = params.getters;
67663
67778
  }
67664
- init(params) {
67779
+ markAsDirtyForEvaluation() {
67665
67780
  this.cache = {};
67666
67781
  this.rankAsc = {};
67667
67782
  this.rankDesc = {};
67668
67783
  this.runningTotal = {};
67669
67784
  this.runningTotalInPercent = {};
67670
- super.init(params);
67785
+ super.markAsDirtyForEvaluation?.();
67671
67786
  }
67672
67787
  getPivotCellValueAndFormat(measureName, domain) {
67673
67788
  return this.getMeasureDisplayValue(measureName, domain);
@@ -67792,7 +67907,7 @@ stores.inject(MyMetaStore, storeInstance);
67792
67907
  return this.getSubTreeMatchingDomain(node.children, domain, domainLevel + 1);
67793
67908
  }
67794
67909
  }
67795
- return tree;
67910
+ return [];
67796
67911
  }
67797
67912
  treeToLeafDomains(tree, parentDomain = []) {
67798
67913
  const domains = [];
@@ -73524,12 +73639,12 @@ stores.inject(MyMetaStore, storeInstance);
73524
73639
  }
73525
73640
  return this.getters.evaluateFormula(sheetId, value) ?? "";
73526
73641
  });
73527
- if (evaluatedCriterionValues.some(isMatrix)) {
73642
+ if (evaluatedCriterionValues.some(isMultipleElementMatrix)) {
73528
73643
  continue;
73529
73644
  }
73530
73645
  const evaluatedCriterion = {
73531
73646
  type: filterValue.type,
73532
- values: evaluatedCriterionValues,
73647
+ values: evaluatedCriterionValues.map(toScalar),
73533
73648
  dateValue: filterValue.dateValue,
73534
73649
  };
73535
73650
  for (let row = filteredZone.top; row <= filteredZone.bottom; row++) {
@@ -74051,6 +74166,14 @@ stores.inject(MyMetaStore, storeInstance);
74051
74166
  const isBasedBefore = cmd.base < start;
74052
74167
  const deltaCol = isBasedBefore && isCol ? thickness : 0;
74053
74168
  const deltaRow = isBasedBefore && !isCol ? thickness : 0;
74169
+ const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
74170
+ const originalSize = Object.fromEntries(toRemove.map((element) => {
74171
+ const size = isCol
74172
+ ? this.getters.getColSize(cmd.sheetId, element)
74173
+ : this.getters.getUserRowSize(cmd.sheetId, element);
74174
+ const isDefaultCol = isCol && size === DEFAULT_CELL_WIDTH;
74175
+ return [element, isDefaultCol ? undefined : size];
74176
+ }));
74054
74177
  const target = [
74055
74178
  {
74056
74179
  left: isCol ? start + deltaCol : 0,
@@ -74081,13 +74204,12 @@ stores.inject(MyMetaStore, storeInstance);
74081
74204
  const col = selection.left;
74082
74205
  const row = selection.top;
74083
74206
  this.setSelectionMixin({ zone: selection, cell: { col, row } }, [selection]);
74084
- const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
74085
74207
  let currentIndex = isBasedBefore ? cmd.base : cmd.base + 1;
74086
74208
  const resizingGroups = {};
74087
74209
  for (const element of toRemove) {
74088
- const size = this.getters.getHeaderSize(cmd.sheetId, cmd.dimension, element);
74210
+ const size = originalSize[element];
74089
74211
  const currentSize = this.getters.getHeaderSize(cmd.sheetId, cmd.dimension, currentIndex);
74090
- if (size !== currentSize) {
74212
+ if (size && size !== currentSize) {
74091
74213
  resizingGroups[size] ??= [];
74092
74214
  resizingGroups[size].push(currentIndex);
74093
74215
  currentIndex += 1;
@@ -75513,6 +75635,7 @@ stores.inject(MyMetaStore, storeInstance);
75513
75635
 
75514
75636
  autoCompleteProviders.add("dataValidation", {
75515
75637
  displayAllOnInitialContent: true,
75638
+ canBeToggled: false,
75516
75639
  getProposals(tokenAtCursor, content) {
75517
75640
  if (isFormula(content)) {
75518
75641
  return [];
@@ -77078,14 +77201,12 @@ stores.inject(MyMetaStore, storeInstance);
77078
77201
  this.editionState = "initializing";
77079
77202
  }
77080
77203
  stopEdition() {
77081
- const input = this.sheetNameRef.el;
77082
- if (!this.state.isEditing || !input)
77204
+ if (!this.state.isEditing || !this.sheetNameRef.el)
77083
77205
  return;
77084
77206
  this.state.isEditing = false;
77085
77207
  this.editionState = "initializing";
77086
- input.blur();
77208
+ this.sheetNameRef.el.blur();
77087
77209
  const inputValue = this.getInputContent() || "";
77088
- input.innerText = inputValue;
77089
77210
  interactiveRenameSheet(this.env, this.props.sheetId, inputValue, () => this.startEdition());
77090
77211
  }
77091
77212
  cancelEdition() {
@@ -84457,6 +84578,7 @@ stores.inject(MyMetaStore, storeInstance);
84457
84578
  PivotSidePanelStore,
84458
84579
  PivotMeasureDisplayPanelStore,
84459
84580
  ClientFocusStore,
84581
+ GridRenderer,
84460
84582
  };
84461
84583
  function addFunction(functionName, functionDescription) {
84462
84584
  functionRegistry.add(functionName, functionDescription);
@@ -84523,9 +84645,9 @@ stores.inject(MyMetaStore, storeInstance);
84523
84645
  exports.tokenize = tokenize;
84524
84646
 
84525
84647
 
84526
- __info__.version = "18.4.1";
84527
- __info__.date = "2025-06-27T09:13:01.303Z";
84528
- __info__.hash = "5cecc0e";
84648
+ __info__.version = "18.4.3";
84649
+ __info__.date = "2025-07-28T13:39:06.036Z";
84650
+ __info__.hash = "4b596d7";
84529
84651
 
84530
84652
 
84531
84653
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);