@odoo/o-spreadsheet 18.4.24 → 18.4.25

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.24
6
- * @date 2026-01-14T10:00:55.867Z
7
- * @hash 0364f56
5
+ * @version 18.4.25
6
+ * @date 2026-01-21T11:06:11.131Z
7
+ * @hash 161472d
8
8
  */
9
9
 
10
10
  (function (exports, owl) {
@@ -41,7 +41,8 @@
41
41
  return children
42
42
  .map((child) => (typeof child === "function" ? child(env) : child))
43
43
  .flat()
44
- .map(createAction);
44
+ .map(createAction)
45
+ .sort((a, b) => a.sequence - b.sequence);
45
46
  }
46
47
  : () => [],
47
48
  isReadonlyAllowed: item.isReadonlyAllowed || false,
@@ -333,6 +334,7 @@
333
334
  fillColor: "",
334
335
  textColor: "",
335
336
  };
337
+ const DEFAULT_NUMBER_STYLE = { ...DEFAULT_STYLE, align: "right" };
336
338
  const DEFAULT_VERTICAL_ALIGN = DEFAULT_STYLE.verticalAlign;
337
339
  const DEFAULT_WRAPPING_MODE = DEFAULT_STYLE.wrapping;
338
340
  // Fonts
@@ -6386,67 +6388,6 @@
6386
6388
  return sheetName !== undefined ? `${getCanonicalSymbolName(sheetName)}!${xc}` : xc;
6387
6389
  }
6388
6390
 
6389
- function createDefaultRows(rowNumber) {
6390
- const rows = [];
6391
- for (let i = 0; i < rowNumber; i++) {
6392
- const row = {
6393
- cells: {},
6394
- };
6395
- rows.push(row);
6396
- }
6397
- return rows;
6398
- }
6399
- function moveHeaderIndexesOnHeaderAddition(indexHeaderAdded, numberAdded, headers) {
6400
- return headers.map((header) => {
6401
- if (header >= indexHeaderAdded) {
6402
- return header + numberAdded;
6403
- }
6404
- return header;
6405
- });
6406
- }
6407
- function moveHeaderIndexesOnHeaderDeletion(deletedHeaders, headers) {
6408
- deletedHeaders = [...deletedHeaders].sort((a, b) => b - a);
6409
- return headers
6410
- .map((header) => {
6411
- for (const deletedHeader of deletedHeaders) {
6412
- if (header > deletedHeader) {
6413
- header--;
6414
- }
6415
- else if (header === deletedHeader) {
6416
- return undefined;
6417
- }
6418
- }
6419
- return header;
6420
- })
6421
- .filter(isDefined);
6422
- }
6423
- function getNextSheetName(existingNames, baseName = "Sheet") {
6424
- let i = 1;
6425
- let name = `${baseName}${i}`;
6426
- while (existingNames.includes(name)) {
6427
- name = `${baseName}${i}`;
6428
- i++;
6429
- }
6430
- return name;
6431
- }
6432
- function getDuplicateSheetName(nameToDuplicate, existingNames) {
6433
- let i = 1;
6434
- const baseName = _t("Copy of %s", nameToDuplicate);
6435
- let name = baseName.toString();
6436
- while (existingNames.includes(name)) {
6437
- name = `${baseName} (${i})`;
6438
- i++;
6439
- }
6440
- return name;
6441
- }
6442
- function isSheetNameEqual(name1, name2) {
6443
- if (name1 === undefined || name2 === undefined) {
6444
- return false;
6445
- }
6446
- return (getUnquotedSheetName(name1.trim().toUpperCase()) ===
6447
- getUnquotedSheetName(name2.trim().toUpperCase()));
6448
- }
6449
-
6450
6391
  function createRange(args, getSheetSize) {
6451
6392
  const unboundedZone = args.zone;
6452
6393
  const zone = boundUnboundedZone(unboundedZone, getSheetSize(args.sheetId));
@@ -6690,8 +6631,8 @@
6690
6631
  elements.sort((a, b) => b - a);
6691
6632
  const groups = groupConsecutive(elements);
6692
6633
  return (range) => {
6693
- if (!isSheetNameEqual(range.sheetId, cmd.sheetId)) {
6694
- return { changeType: "NONE" };
6634
+ if (range.sheetId !== cmd.sheetId) {
6635
+ return { changeType: "NONE", range };
6695
6636
  }
6696
6637
  let newRange = range;
6697
6638
  let changeType = "NONE";
@@ -6718,10 +6659,7 @@
6718
6659
  newRange = createAdaptedRange(newRange, dimension, changeType, -(max - min + 1));
6719
6660
  }
6720
6661
  }
6721
- if (changeType !== "NONE") {
6722
- return { changeType, range: newRange };
6723
- }
6724
- return { changeType: "NONE" };
6662
+ return { changeType, range: newRange };
6725
6663
  };
6726
6664
  }
6727
6665
  function getApplyRangeChangeAddColRow(cmd) {
@@ -6730,7 +6668,7 @@
6730
6668
  const dimension = cmd.dimension === "COL" ? "columns" : "rows";
6731
6669
  return (range) => {
6732
6670
  if (range.sheetId !== cmd.sheetId) {
6733
- return { changeType: "NONE" };
6671
+ return { changeType: "NONE", range };
6734
6672
  }
6735
6673
  if (cmd.position === "after") {
6736
6674
  if (range.zone[start] <= cmd.base && cmd.base < range.zone[end]) {
@@ -6760,13 +6698,13 @@
6760
6698
  };
6761
6699
  }
6762
6700
  }
6763
- return { changeType: "NONE" };
6701
+ return { changeType: "NONE", range };
6764
6702
  };
6765
6703
  }
6766
6704
  function getApplyRangeChangeDeleteSheet(cmd) {
6767
6705
  return (range) => {
6768
6706
  if (range.sheetId !== cmd.sheetId && range.invalidSheetName !== cmd.sheetName) {
6769
- return { changeType: "NONE" };
6707
+ return { changeType: "NONE", range };
6770
6708
  }
6771
6709
  const invalidSheetName = cmd.sheetName;
6772
6710
  range = {
@@ -6793,14 +6731,14 @@
6793
6731
  const newRange = { ...range, sheetId, invalidSheetName };
6794
6732
  return { changeType: "CHANGE", range: newRange };
6795
6733
  }
6796
- return { changeType: "NONE" };
6734
+ return { changeType: "NONE", range };
6797
6735
  };
6798
6736
  }
6799
6737
  function getApplyRangeChangeMoveRange(cmd) {
6800
6738
  const originZone = cmd.target[0];
6801
6739
  return (range) => {
6802
6740
  if (range.sheetId !== cmd.sheetId || !isZoneInside(range.zone, originZone)) {
6803
- return { changeType: "NONE" };
6741
+ return { changeType: "NONE", range };
6804
6742
  }
6805
6743
  const targetSheetId = cmd.targetSheetId;
6806
6744
  const offsetX = cmd.col - originZone.left;
@@ -6897,17 +6835,87 @@
6897
6835
  return results.map((r) => r.elem);
6898
6836
  }
6899
6837
 
6838
+ function createDefaultRows(rowNumber) {
6839
+ const rows = [];
6840
+ for (let i = 0; i < rowNumber; i++) {
6841
+ const row = {
6842
+ cells: {},
6843
+ };
6844
+ rows.push(row);
6845
+ }
6846
+ return rows;
6847
+ }
6848
+ function moveHeaderIndexesOnHeaderAddition(indexHeaderAdded, numberAdded, headers) {
6849
+ return headers.map((header) => {
6850
+ if (header >= indexHeaderAdded) {
6851
+ return header + numberAdded;
6852
+ }
6853
+ return header;
6854
+ });
6855
+ }
6856
+ function moveHeaderIndexesOnHeaderDeletion(deletedHeaders, headers) {
6857
+ deletedHeaders = [...deletedHeaders].sort((a, b) => b - a);
6858
+ return headers
6859
+ .map((header) => {
6860
+ for (const deletedHeader of deletedHeaders) {
6861
+ if (header > deletedHeader) {
6862
+ header--;
6863
+ }
6864
+ else if (header === deletedHeader) {
6865
+ return undefined;
6866
+ }
6867
+ }
6868
+ return header;
6869
+ })
6870
+ .filter(isDefined);
6871
+ }
6872
+ function getNextSheetName(existingNames, baseName = "Sheet") {
6873
+ let i = 1;
6874
+ let name = `${baseName}${i}`;
6875
+ while (existingNames.includes(name)) {
6876
+ name = `${baseName}${i}`;
6877
+ i++;
6878
+ }
6879
+ return name;
6880
+ }
6881
+ function getDuplicateSheetName(nameToDuplicate, existingNames) {
6882
+ let i = 1;
6883
+ const baseName = _t("Copy of %s", nameToDuplicate);
6884
+ let name = baseName.toString();
6885
+ while (existingNames.includes(name)) {
6886
+ name = `${baseName} (${i})`;
6887
+ i++;
6888
+ }
6889
+ return name;
6890
+ }
6891
+ function isSheetNameEqual(name1, name2) {
6892
+ if (name1 === undefined || name2 === undefined) {
6893
+ return false;
6894
+ }
6895
+ return (getUnquotedSheetName(name1.trim().toUpperCase()) ===
6896
+ getUnquotedSheetName(name2.trim().toUpperCase()));
6897
+ }
6898
+
6900
6899
  function computeTextLinesHeight(textLineHeight, numberOfLines = 1) {
6901
6900
  return numberOfLines * (textLineHeight + MIN_CELL_TEXT_MARGIN) - MIN_CELL_TEXT_MARGIN;
6902
6901
  }
6903
6902
  /**
6904
6903
  * Get the default height of the cell given its style.
6905
6904
  */
6906
- function getDefaultCellHeight(ctx, cell, colSize) {
6905
+ function getDefaultCellHeight(ctx, cell, locale, colSize) {
6907
6906
  if (!cell || (!cell.isFormula && !cell.content)) {
6908
6907
  return DEFAULT_CELL_HEIGHT;
6909
6908
  }
6910
- const content = cell.isFormula ? "" : cell.content;
6909
+ let content = "";
6910
+ try {
6911
+ if (!cell.isFormula) {
6912
+ const localeFormat = { format: cell.format, locale };
6913
+ content = formatValue(parseLiteral(cell.content, locale), localeFormat);
6914
+ }
6915
+ }
6916
+ catch {
6917
+ content = CellErrorType.GenericError;
6918
+ }
6911
6919
  return getCellContentHeight(ctx, content, cell.style, colSize);
6912
6920
  }
6913
6921
  function getCellContentHeight(ctx, content, style, colSize) {
@@ -20988,7 +20996,16 @@ stores.inject(MyMetaStore, storeInstance);
20988
20996
  }
20989
20997
  acceptToVectorize.push(!argDefinition.acceptMatrix);
20990
20998
  }
20991
- return applyVectorization(errorHandlingCompute.bind(this), args, acceptToVectorize);
20999
+ return replaceErrorPlaceholderInResult(applyVectorization(errorHandlingCompute.bind(this), args, acceptToVectorize));
21000
+ }
21001
+ function replaceErrorPlaceholderInResult(result) {
21002
+ if (!isMatrix(result)) {
21003
+ replaceFunctionNamePlaceholder(result, descr.name);
21004
+ }
21005
+ else {
21006
+ matrixForEach(result, (result) => replaceFunctionNamePlaceholder(result, descr.name));
21007
+ }
21008
+ return result;
20992
21009
  }
20993
21010
  function errorHandlingCompute(...args) {
20994
21011
  for (let i = 0; i < args.length; i++) {
@@ -21017,13 +21034,12 @@ stores.inject(MyMetaStore, storeInstance);
21017
21034
  const result = descr.compute.apply(this, args);
21018
21035
  if (!isMatrix(result)) {
21019
21036
  if (typeof result === "object" && result !== null && "value" in result) {
21020
- replaceFunctionNamePlaceholder(result, descr.name);
21021
21037
  return result;
21022
21038
  }
21039
+ descr.name;
21023
21040
  return { value: result };
21024
21041
  }
21025
21042
  if (typeof result[0][0] === "object" && result[0][0] !== null && "value" in result[0][0]) {
21026
- matrixForEach(result, (result) => replaceFunctionNamePlaceholder(result, descr.name));
21027
21043
  return result;
21028
21044
  }
21029
21045
  return matrixMap(result, (row) => ({ value: row }));
@@ -21475,7 +21491,7 @@ stores.inject(MyMetaStore, storeInstance);
21475
21491
  continue;
21476
21492
  }
21477
21493
  const sheetXC = tokens[tokenIdx].value;
21478
- const newSheetXC = adaptStringRange(defaultSheetId, sheetXC, applyChange);
21494
+ const newSheetXC = adaptStringRange(defaultSheetId, sheetXC, applyChange).range;
21479
21495
  if (sheetXC !== newSheetXC) {
21480
21496
  tokens[tokenIdx] = {
21481
21497
  value: newSheetXC,
@@ -21485,23 +21501,30 @@ stores.inject(MyMetaStore, storeInstance);
21485
21501
  }
21486
21502
  return concat(tokens.map((token) => token.value));
21487
21503
  }
21488
- function adaptStringRange(defaultSheetId, sheetXC, applyChange) {
21504
+ function adaptStringRange(defaultSheetId, sheetXC, rangeAdapter) {
21489
21505
  const sheetName = splitReference(sheetXC).sheetName;
21490
21506
  if (sheetName
21491
- ? !isSheetNameEqual(sheetName, applyChange.sheetName.old)
21492
- : defaultSheetId !== applyChange.sheetId) {
21493
- return sheetXC;
21507
+ ? !isSheetNameEqual(sheetName, rangeAdapter.sheetName.old)
21508
+ : defaultSheetId !== rangeAdapter.sheetId) {
21509
+ return { changeType: "NONE", range: sheetXC };
21494
21510
  }
21495
- const sheetId = sheetName ? applyChange.sheetId : defaultSheetId;
21511
+ const sheetId = sheetName ? rangeAdapter.sheetId : defaultSheetId;
21496
21512
  const range = getRange(sheetXC, sheetId);
21497
21513
  if (range.invalidXc) {
21498
- return sheetXC;
21514
+ return { changeType: "NONE", range: sheetXC };
21499
21515
  }
21500
- const change = applyChange.applyChange(range);
21516
+ const change = rangeAdapter.applyChange(range);
21501
21517
  if (change.changeType === "NONE" || change.changeType === "REMOVE") {
21502
- return sheetXC;
21518
+ return { changeType: change.changeType, range: sheetXC };
21519
+ }
21520
+ const rangeStr = getRangeString(change.range, defaultSheetId, getSheetNameGetter(rangeAdapter));
21521
+ if (rangeStr === CellErrorType.InvalidReference) {
21522
+ return { changeType: "REMOVE", range: rangeStr };
21503
21523
  }
21504
- return getRangeString(change.range, defaultSheetId, getSheetNameGetter(applyChange));
21524
+ return {
21525
+ changeType: change.changeType,
21526
+ range: rangeStr,
21527
+ };
21505
21528
  }
21506
21529
  function getSheetNameGetter(applyChange) {
21507
21530
  return (sheetId) => {
@@ -21606,8 +21629,6 @@ stores.inject(MyMetaStore, storeInstance);
21606
21629
  }
21607
21630
  const change = applyChange(range);
21608
21631
  switch (change.changeType) {
21609
- case "NONE":
21610
- return range;
21611
21632
  case "REMOVE":
21612
21633
  return undefined;
21613
21634
  default:
@@ -21759,16 +21780,16 @@ stores.inject(MyMetaStore, storeInstance);
21759
21780
  function transformChartDefinitionWithDataSetsWithZone(chartSheetId, definition, applyChange) {
21760
21781
  let labelRange;
21761
21782
  if (definition.labelRange) {
21762
- const adaptedRange = adaptStringRange(chartSheetId, definition.labelRange, applyChange);
21763
- if (adaptedRange !== CellErrorType.InvalidReference) {
21783
+ const { changeType, range: adaptedRange } = adaptStringRange(chartSheetId, definition.labelRange, applyChange);
21784
+ if (changeType !== "REMOVE") {
21764
21785
  labelRange = adaptedRange;
21765
21786
  }
21766
21787
  }
21767
21788
  const dataSets = [];
21768
21789
  for (const dataSet of definition.dataSets) {
21769
21790
  const newDataSet = { ...dataSet };
21770
- const adaptedRange = adaptStringRange(chartSheetId, dataSet.dataRange, applyChange);
21771
- if (adaptedRange !== CellErrorType.InvalidReference) {
21791
+ const { changeType, range: adaptedRange } = adaptStringRange(chartSheetId, dataSet.dataRange, applyChange);
21792
+ if (changeType !== "REMOVE") {
21772
21793
  newDataSet.dataRange = adaptedRange;
21773
21794
  dataSets.push(newDataSet);
21774
21795
  }
@@ -23146,14 +23167,14 @@ stores.inject(MyMetaStore, storeInstance);
23146
23167
  let baseline;
23147
23168
  let keyValue;
23148
23169
  if (definition.baseline) {
23149
- const adaptedRange = adaptStringRange(chartSheetId, definition.baseline, applyChange);
23150
- if (adaptedRange !== CellErrorType.InvalidReference) {
23170
+ const { changeType, range: adaptedRange } = adaptStringRange(chartSheetId, definition.baseline, applyChange);
23171
+ if (changeType !== "REMOVE") {
23151
23172
  baseline = adaptedRange;
23152
23173
  }
23153
23174
  }
23154
23175
  if (definition.keyValue) {
23155
- const adaptedRange = adaptStringRange(chartSheetId, definition.keyValue, applyChange);
23156
- if (adaptedRange !== CellErrorType.InvalidReference) {
23176
+ const { changeType, range: adaptedRange } = adaptStringRange(chartSheetId, definition.keyValue, applyChange);
23177
+ if (changeType !== "REMOVE") {
23157
23178
  keyValue = adaptedRange;
23158
23179
  }
23159
23180
  }
@@ -23210,7 +23231,7 @@ stores.inject(MyMetaStore, storeInstance);
23210
23231
  // This kind of graph is not exportable in Excel
23211
23232
  return undefined;
23212
23233
  }
23213
- updateRanges(applyChange) {
23234
+ updateRanges({ applyChange }) {
23214
23235
  const baseline = adaptChartRange(this.baseline, applyChange);
23215
23236
  const keyValue = adaptChartRange(this.keyValue, applyChange);
23216
23237
  if (this.baseline === baseline && this.keyValue === keyValue) {
@@ -26584,7 +26605,7 @@ stores.inject(MyMetaStore, storeInstance);
26584
26605
  verticalAxis: getDefinedAxis(definition),
26585
26606
  };
26586
26607
  }
26587
- updateRanges(applyChange) {
26608
+ updateRanges({ applyChange }) {
26588
26609
  const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
26589
26610
  if (!isStale) {
26590
26611
  return this;
@@ -27171,7 +27192,7 @@ stores.inject(MyMetaStore, storeInstance);
27171
27192
  verticalAxis: getDefinedAxis(definition),
27172
27193
  };
27173
27194
  }
27174
- updateRanges(applyChange) {
27195
+ updateRanges({ applyChange }) {
27175
27196
  const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
27176
27197
  if (!isStale) {
27177
27198
  return this;
@@ -27343,7 +27364,7 @@ stores.inject(MyMetaStore, storeInstance);
27343
27364
  getDefinitionForExcel() {
27344
27365
  return undefined;
27345
27366
  }
27346
- updateRanges(applyChange) {
27367
+ updateRanges({ applyChange }) {
27347
27368
  const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
27348
27369
  if (!isStale) {
27349
27370
  return this;
@@ -27454,8 +27475,8 @@ stores.inject(MyMetaStore, storeInstance);
27454
27475
  static transformDefinition(chartSheetId, definition, applyChange) {
27455
27476
  let dataRange;
27456
27477
  if (definition.dataRange) {
27457
- const adaptedRange = adaptStringRange(chartSheetId, definition.dataRange, applyChange);
27458
- if (adaptedRange !== CellErrorType.InvalidReference) {
27478
+ const { changeType, range: adaptedRange } = adaptStringRange(chartSheetId, definition.dataRange, applyChange);
27479
+ if (changeType !== "REMOVE") {
27459
27480
  dataRange = adaptedRange;
27460
27481
  }
27461
27482
  }
@@ -27530,13 +27551,9 @@ stores.inject(MyMetaStore, storeInstance);
27530
27551
  : undefined,
27531
27552
  };
27532
27553
  }
27533
- updateRanges(applyChange, sheetId, adaptSheetName) {
27554
+ updateRanges({ applyChange, adaptFormulaString }) {
27534
27555
  const dataRange = adaptChartRange(this.dataRange, applyChange);
27535
- const adaptFormula = (formula) => adaptFormulaStringRanges(this.sheetId, formula, {
27536
- applyChange,
27537
- sheetId,
27538
- sheetName: adaptSheetName,
27539
- });
27556
+ const adaptFormula = (formula) => adaptFormulaString(this.sheetId, formula);
27540
27557
  const sectionRule = adaptSectionRuleFormulas(this.sectionRule, adaptFormula);
27541
27558
  const definition = this.getDefinitionWithSpecificRanges(dataRange, sectionRule);
27542
27559
  return new GaugeChart(definition, this.sheetId, this.getters);
@@ -27758,7 +27775,7 @@ stores.inject(MyMetaStore, storeInstance);
27758
27775
  getDefinitionForExcel() {
27759
27776
  return undefined;
27760
27777
  }
27761
- updateRanges(applyChange) {
27778
+ updateRanges({ applyChange }) {
27762
27779
  const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
27763
27780
  if (!isStale) {
27764
27781
  return this;
@@ -27894,7 +27911,7 @@ stores.inject(MyMetaStore, storeInstance);
27894
27911
  : undefined,
27895
27912
  };
27896
27913
  }
27897
- updateRanges(applyChange) {
27914
+ updateRanges({ applyChange }) {
27898
27915
  const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
27899
27916
  if (!isStale) {
27900
27917
  return this;
@@ -28054,7 +28071,7 @@ stores.inject(MyMetaStore, storeInstance);
28054
28071
  labelRange,
28055
28072
  };
28056
28073
  }
28057
- updateRanges(applyChange) {
28074
+ updateRanges({ applyChange }) {
28058
28075
  const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
28059
28076
  if (!isStale) {
28060
28077
  return this;
@@ -28193,7 +28210,7 @@ stores.inject(MyMetaStore, storeInstance);
28193
28210
  getDefinitionForExcel() {
28194
28211
  return undefined;
28195
28212
  }
28196
- updateRanges(applyChange) {
28213
+ updateRanges({ applyChange }) {
28197
28214
  const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
28198
28215
  if (!isStale) {
28199
28216
  return this;
@@ -28344,7 +28361,7 @@ stores.inject(MyMetaStore, storeInstance);
28344
28361
  labelRange,
28345
28362
  };
28346
28363
  }
28347
- updateRanges(applyChange) {
28364
+ updateRanges({ applyChange }) {
28348
28365
  const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
28349
28366
  if (!isStale) {
28350
28367
  return this;
@@ -28466,7 +28483,7 @@ stores.inject(MyMetaStore, storeInstance);
28466
28483
  : undefined,
28467
28484
  };
28468
28485
  }
28469
- updateRanges(applyChange) {
28486
+ updateRanges({ applyChange }) {
28470
28487
  const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
28471
28488
  if (!isStale) {
28472
28489
  return this;
@@ -28631,7 +28648,7 @@ stores.inject(MyMetaStore, storeInstance);
28631
28648
  getDefinitionForExcel() {
28632
28649
  return undefined;
28633
28650
  }
28634
- updateRanges(applyChange) {
28651
+ updateRanges({ applyChange }) {
28635
28652
  const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
28636
28653
  if (!isStale) {
28637
28654
  return this;
@@ -28779,7 +28796,7 @@ stores.inject(MyMetaStore, storeInstance);
28779
28796
  getDefinitionForExcel() {
28780
28797
  return undefined;
28781
28798
  }
28782
- updateRanges(applyChange) {
28799
+ updateRanges({ applyChange }) {
28783
28800
  const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
28784
28801
  if (!isStale) {
28785
28802
  return this;
@@ -28934,7 +28951,7 @@ stores.inject(MyMetaStore, storeInstance);
28934
28951
  // TODO: implement export excel
28935
28952
  return undefined;
28936
28953
  }
28937
- updateRanges(applyChange) {
28954
+ updateRanges({ applyChange }) {
28938
28955
  const { dataSets, labelRange, isStale } = updateChartRangesWithDataSets(this.getters, applyChange, this.dataSets, this.labelRange);
28939
28956
  if (!isStale) {
28940
28957
  return this;
@@ -32642,7 +32659,6 @@ stores.inject(MyMetaStore, storeInstance);
32642
32659
  });
32643
32660
  }
32644
32661
  handleEvent(event) {
32645
- this.hideHelp();
32646
32662
  const sheetId = this.getters.getActiveSheetId();
32647
32663
  let unboundedZone;
32648
32664
  if (event.options.unbounded) {
@@ -32996,6 +33012,7 @@ stores.inject(MyMetaStore, storeInstance);
32996
33012
  this.colorIndexByRange = {};
32997
33013
  this.hoveredTokens = [];
32998
33014
  this.hoveredContentEvaluation = "";
33015
+ this.hideHelp();
32999
33016
  }
33000
33017
  /**
33001
33018
  * Reset the current content to the active cell content
@@ -38617,6 +38634,7 @@ stores.inject(MyMetaStore, storeInstance);
38617
38634
  ? V_ALIGNMENT_EXPORT_CONVERSION_MAP[style.verticalAlign]
38618
38635
  : undefined,
38619
38636
  wrapText: style.wrapping === "wrap" || content?.includes(NEWLINE) ? true : undefined,
38637
+ shrinkToFit: style.wrapping === "clip" ? true : undefined,
38620
38638
  },
38621
38639
  };
38622
38640
  styles.font["strike"] = !!style?.strikethrough || undefined;
@@ -38637,6 +38655,7 @@ stores.inject(MyMetaStore, storeInstance);
38637
38655
  vertical: styles.alignment.vertical,
38638
38656
  horizontal: styles.alignment.horizontal,
38639
38657
  wrapText: styles.alignment.wrapText,
38658
+ shrinkToFit: styles.alignment.shrinkToFit,
38640
38659
  },
38641
38660
  };
38642
38661
  return pushElement(style, construct.styles);
@@ -50820,7 +50839,7 @@ stores.inject(MyMetaStore, storeInstance);
50820
50839
  });
50821
50840
  dataRange = this.props.definition.dataRange;
50822
50841
  get configurationErrorMessages() {
50823
- const cancelledReasons = [...(this.state.dataRangeDispatchResult?.reasons || [])];
50842
+ const cancelledReasons = [...(this.state.dataRangeDispatchResult?.reasons || [])].filter((reason) => reason !== "NoChanges" /* CommandResult.NoChanges */);
50824
50843
  return cancelledReasons.map((error) => ChartTerms.Errors[error] || ChartTerms.Errors.Unexpected);
50825
50844
  }
50826
50845
  get isDataRangeInvalid() {
@@ -50905,7 +50924,7 @@ stores.inject(MyMetaStore, storeInstance);
50905
50924
  });
50906
50925
  }
50907
50926
  get designErrorMessages() {
50908
- const cancelledReasons = [...(this.state.sectionRuleCancelledReasons || [])];
50927
+ const cancelledReasons = [...(this.state.sectionRuleCancelledReasons || [])].filter((reason) => reason !== "NoChanges" /* CommandResult.NoChanges */);
50909
50928
  return cancelledReasons.map((error) => ChartTerms.Errors[error] || ChartTerms.Errors.Unexpected);
50910
50929
  }
50911
50930
  get isRangeMinInvalid() {
@@ -51270,7 +51289,7 @@ stores.inject(MyMetaStore, storeInstance);
51270
51289
  const cancelledReasons = [
51271
51290
  ...(this.state.keyValueDispatchResult?.reasons || []),
51272
51291
  ...(this.state.baselineDispatchResult?.reasons || []),
51273
- ];
51292
+ ].filter((reason) => reason !== "NoChanges" /* CommandResult.NoChanges */);
51274
51293
  return cancelledReasons.map((error) => ChartTerms.Errors[error] || ChartTerms.Errors.Unexpected);
51275
51294
  }
51276
51295
  get isKeyValueInvalid() {
@@ -56097,8 +56116,6 @@ stores.inject(MyMetaStore, storeInstance);
56097
56116
  }
56098
56117
  const change = applyChange(range);
56099
56118
  switch (change.changeType) {
56100
- case "NONE":
56101
- return range;
56102
56119
  case "REMOVE":
56103
56120
  return undefined;
56104
56121
  default:
@@ -58916,7 +58933,7 @@ stores.inject(MyMetaStore, storeInstance);
58916
58933
  * @param sheetId an sheetId to adapt either range of that sheet specifically, or ranges pointing to that sheet
58917
58934
  * @param sheetName couple of old and new sheet names to adapt ranges pointing to that sheet
58918
58935
  */
58919
- adaptRanges(applyChange, sheetId, sheetName) { }
58936
+ adaptRanges(rangeAdapterFunctions, sheetId, sheetName) { }
58920
58937
  /**
58921
58938
  * Implement this method to clean unused external resources, such as images
58922
58939
  * stored on a server which have been deleted.
@@ -59512,7 +59529,7 @@ stores.inject(MyMetaStore, storeInstance);
59512
59529
  ];
59513
59530
  nextId = 1;
59514
59531
  cells = {};
59515
- adaptRanges(applyChange, sheetId, sheetName) {
59532
+ adaptRanges({ applyChange }, sheetId, sheetName) {
59516
59533
  for (const sheet of Object.keys(this.cells)) {
59517
59534
  for (const cell of Object.values(this.cells[sheet] || {})) {
59518
59535
  if (cell.isFormula) {
@@ -59734,7 +59751,7 @@ stores.inject(MyMetaStore, storeInstance);
59734
59751
  for (const position of positions) {
59735
59752
  const cell = this.getters.getCell(position);
59736
59753
  const xc = toXC(position.col, position.row);
59737
- const style = this.removeDefaultStyleValues(cell.style);
59754
+ const style = this.extractCustomStyle(cell);
59738
59755
  if (Object.keys(style).length) {
59739
59756
  const styleId = getItemId(style, styles);
59740
59757
  positionsByStyle[styleId] ??= [];
@@ -59780,10 +59797,14 @@ stores.inject(MyMetaStore, storeInstance);
59780
59797
  }
59781
59798
  }
59782
59799
  }
59783
- removeDefaultStyleValues(style) {
59784
- const cleanedStyle = { ...style };
59785
- for (const property in DEFAULT_STYLE) {
59786
- if (cleanedStyle[property] === DEFAULT_STYLE[property]) {
59800
+ extractCustomStyle(cell) {
59801
+ const cleanedStyle = { ...cell.style };
59802
+ const defaultStyle = isNumber(cell.content, DEFAULT_LOCALE)
59803
+ ? DEFAULT_NUMBER_STYLE
59804
+ : DEFAULT_STYLE;
59805
+ for (const property in cleanedStyle) {
59806
+ if ((property !== "align" || !cell.isFormula) &&
59807
+ cleanedStyle[property] === defaultStyle[property]) {
59787
59808
  delete cleanedStyle[property];
59788
59809
  }
59789
59810
  }
@@ -60133,9 +60154,9 @@ stores.inject(MyMetaStore, storeInstance);
60133
60154
  charts = {};
60134
60155
  createChart = chartFactory(this.getters);
60135
60156
  validateChartDefinition = (cmd) => validateChartDefinition(this, cmd.definition);
60136
- adaptRanges(applyChange, sheetId, adaptSheetName) {
60157
+ adaptRanges(rangeAdapters) {
60137
60158
  for (const [chartId, chart] of Object.entries(this.charts)) {
60138
- this.history.update("charts", chartId, chart?.updateRanges(applyChange, sheetId, adaptSheetName));
60159
+ this.history.update("charts", chartId, chart?.updateRanges(rangeAdapters));
60139
60160
  }
60140
60161
  }
60141
60162
  // ---------------------------------------------------------------------------
@@ -60325,7 +60346,7 @@ stores.inject(MyMetaStore, storeInstance);
60325
60346
  "getAdaptedCfRanges",
60326
60347
  ];
60327
60348
  cfRules = {};
60328
- adaptCFFormulas(applyChange) {
60349
+ adaptCFFormulas({ applyChange, adaptFormulaString }) {
60329
60350
  for (const sheetId in this.cfRules) {
60330
60351
  for (const rule of this.cfRules[sheetId]) {
60331
60352
  if (rule.rule.type === "DataBarRule" && rule.rule.rangeValues) {
@@ -60349,7 +60370,7 @@ stores.inject(MyMetaStore, storeInstance);
60349
60370
  for (let i = 0; i < rule.rule.values.length; i++) {
60350
60371
  this.history.update("cfRules", sheetId, this.cfRules[sheetId].indexOf(rule), "rule",
60351
60372
  //@ts-expect-error
60352
- "values", i, this.getters.adaptFormulaStringDependencies(sheetId, rule.rule.values[i], applyChange));
60373
+ "values", i, adaptFormulaString(sheetId, rule.rule.values[i]));
60353
60374
  }
60354
60375
  }
60355
60376
  else if (rule.rule.type === "IconSetRule") {
@@ -60357,7 +60378,7 @@ stores.inject(MyMetaStore, storeInstance);
60357
60378
  if (rule.rule[inflectionPoint].type === "formula") {
60358
60379
  this.history.update("cfRules", sheetId, this.cfRules[sheetId].indexOf(rule), "rule",
60359
60380
  //@ts-expect-error
60360
- inflectionPoint, "value", this.getters.adaptFormulaStringDependencies(sheetId, rule.rule[inflectionPoint].value, applyChange));
60381
+ inflectionPoint, "value", adaptFormulaString(sheetId, rule.rule[inflectionPoint].value));
60361
60382
  }
60362
60383
  }
60363
60384
  }
@@ -60367,14 +60388,14 @@ stores.inject(MyMetaStore, storeInstance);
60367
60388
  if (ruleValue?.type === "formula" && ruleValue?.value) {
60368
60389
  this.history.update("cfRules", sheetId, this.cfRules[sheetId].indexOf(rule), "rule",
60369
60390
  //@ts-expect-error
60370
- value, "value", this.getters.adaptFormulaStringDependencies(sheetId, ruleValue.value, applyChange));
60391
+ value, "value", adaptFormulaString(sheetId, ruleValue.value));
60371
60392
  }
60372
60393
  }
60373
60394
  }
60374
60395
  }
60375
60396
  }
60376
60397
  }
60377
- adaptCFRanges(sheetId, applyChange) {
60398
+ adaptCFRanges(sheetId, { applyChange }) {
60378
60399
  for (const rule of this.cfRules[sheetId]) {
60379
60400
  for (const range of rule.ranges) {
60380
60401
  const change = applyChange(range);
@@ -60398,12 +60419,12 @@ stores.inject(MyMetaStore, storeInstance);
60398
60419
  }
60399
60420
  }
60400
60421
  }
60401
- adaptRanges(applyChange, sheetId) {
60422
+ adaptRanges(rangeAdapters, sheetId) {
60402
60423
  const sheetIds = sheetId ? [sheetId] : Object.keys(this.cfRules);
60403
60424
  for (const sheetId of sheetIds) {
60404
- this.adaptCFRanges(sheetId, applyChange);
60425
+ this.adaptCFRanges(sheetId, rangeAdapters);
60405
60426
  }
60406
- this.adaptCFFormulas(applyChange);
60427
+ this.adaptCFFormulas(rangeAdapters);
60407
60428
  }
60408
60429
  // ---------------------------------------------------------------------------
60409
60430
  // Command Handling
@@ -60780,23 +60801,23 @@ stores.inject(MyMetaStore, storeInstance);
60780
60801
  "getValidationRuleForCell",
60781
60802
  ];
60782
60803
  rules = {};
60783
- adaptRanges(applyChange, sheetId) {
60784
- this.adaptDVRanges(sheetId, applyChange);
60785
- this.adaptDVFormulas(applyChange);
60804
+ adaptRanges(rangeAdapters, sheetId) {
60805
+ this.adaptDVRanges(sheetId, rangeAdapters);
60806
+ this.adaptDVFormulas(rangeAdapters);
60786
60807
  }
60787
- adaptDVFormulas(applyChange) {
60808
+ adaptDVFormulas({ adaptFormulaString }) {
60788
60809
  for (const sheetId in this.rules) {
60789
60810
  const rules = this.rules[sheetId];
60790
60811
  for (let ruleIndex = rules.length - 1; ruleIndex >= 0; ruleIndex--) {
60791
60812
  const rule = this.rules[sheetId][ruleIndex];
60792
60813
  for (let valueIndex = 0; valueIndex < rule.criterion.values.length; valueIndex++) {
60793
- const value = this.getters.adaptFormulaStringDependencies(sheetId, rule.criterion.values[valueIndex], applyChange);
60814
+ const value = adaptFormulaString(sheetId, rule.criterion.values[valueIndex]);
60794
60815
  this.history.update("rules", sheetId, ruleIndex, "criterion", "values", valueIndex, value);
60795
60816
  }
60796
60817
  }
60797
60818
  }
60798
60819
  }
60799
- adaptDVRanges(sheetId, applyChange) {
60820
+ adaptDVRanges(sheetId, { applyChange }) {
60800
60821
  const rules = this.rules[sheetId];
60801
60822
  for (let ruleIndex = rules.length - 1; ruleIndex >= 0; ruleIndex--) {
60802
60823
  const rule = this.rules[sheetId][ruleIndex];
@@ -61070,7 +61091,7 @@ stores.inject(MyMetaStore, storeInstance);
61070
61091
  // ---------------------------------------------------------------------------
61071
61092
  // Command Handling
61072
61093
  // ---------------------------------------------------------------------------
61073
- adaptRanges(applyChange, sheetId) {
61094
+ adaptRanges({ applyChange }, sheetId) {
61074
61095
  for (const figure of this.getFigures(sheetId)) {
61075
61096
  const change = applyChange(this.getters.getRangeFromZone(sheetId, {
61076
61097
  left: figure.col,
@@ -61878,8 +61899,8 @@ stores.inject(MyMetaStore, storeInstance);
61878
61899
  break;
61879
61900
  }
61880
61901
  }
61881
- adaptRanges(applyChange, sheetId) {
61882
- this.applyRangeChangeOnSheet(sheetId, applyChange);
61902
+ adaptRanges(rangeAdapters, sheetId) {
61903
+ this.applyRangeChangeOnSheet(sheetId, rangeAdapters);
61883
61904
  }
61884
61905
  // ---------------------------------------------------------------------------
61885
61906
  // Getters
@@ -62181,7 +62202,7 @@ stores.inject(MyMetaStore, storeInstance);
62181
62202
  /**
62182
62203
  * Apply a range change on merges of a particular sheet.
62183
62204
  */
62184
- applyRangeChangeOnSheet(sheetId, applyChange) {
62205
+ applyRangeChangeOnSheet(sheetId, { applyChange }) {
62185
62206
  const merges = Object.entries(this.merges[sheetId] || {});
62186
62207
  for (const [mergeId, range] of merges) {
62187
62208
  if (range) {
@@ -62255,7 +62276,7 @@ stores.inject(MyMetaStore, storeInstance);
62255
62276
  };
62256
62277
  }
62257
62278
 
62258
- class RangeAdapter {
62279
+ class RangeAdapterPlugin {
62259
62280
  getters;
62260
62281
  providers = [];
62261
62282
  isAdaptingRanges = false;
@@ -62263,7 +62284,6 @@ stores.inject(MyMetaStore, storeInstance);
62263
62284
  this.getters = getters;
62264
62285
  }
62265
62286
  static getters = [
62266
- "adaptFormulaStringDependencies",
62267
62287
  "copyFormulaStringForSheet",
62268
62288
  "extendRange",
62269
62289
  "getRangeString",
@@ -62294,8 +62314,8 @@ stores.inject(MyMetaStore, storeInstance);
62294
62314
  throw new Error("Plugins cannot dispatch commands during adaptRanges phase");
62295
62315
  }
62296
62316
  const rangeAdapter = getRangeAdapter(cmd);
62297
- if (rangeAdapter?.applyChange) {
62298
- this.executeOnAllRanges(rangeAdapter.applyChange, rangeAdapter.sheetId, rangeAdapter.sheetName);
62317
+ if (rangeAdapter) {
62318
+ this.executeOnAllRanges(rangeAdapter);
62299
62319
  }
62300
62320
  }
62301
62321
  finalize() { }
@@ -62314,11 +62334,15 @@ stores.inject(MyMetaStore, storeInstance);
62314
62334
  return result;
62315
62335
  };
62316
62336
  }
62317
- executeOnAllRanges(adaptRange, sheetId, sheetName) {
62337
+ executeOnAllRanges(rangeAdapter) {
62318
62338
  this.isAdaptingRanges = true;
62319
- const func = this.verifyRangeRemoved(adaptRange);
62339
+ const adapterFunctions = {
62340
+ applyChange: this.verifyRangeRemoved(rangeAdapter.applyChange),
62341
+ adaptRangeString: (defaultSheetId, sheetXC) => adaptStringRange(defaultSheetId, sheetXC, rangeAdapter),
62342
+ adaptFormulaString: (defaultSheetId, formula) => adaptFormulaStringRanges(defaultSheetId, formula, rangeAdapter),
62343
+ };
62320
62344
  for (const provider of this.providers) {
62321
- provider(func, sheetId, sheetName);
62345
+ provider(adapterFunctions, rangeAdapter.sheetId, rangeAdapter.sheetName);
62322
62346
  }
62323
62347
  this.isAdaptingRanges = false;
62324
62348
  }
@@ -62486,18 +62510,6 @@ stores.inject(MyMetaStore, storeInstance);
62486
62510
  const unionOfZones = unionUnboundedZones(...zones);
62487
62511
  return this.getRangeFromZone(ranges[0].sheetId, unionOfZones);
62488
62512
  }
62489
- adaptFormulaStringDependencies(sheetId, formula, applyChange) {
62490
- if (!formula.startsWith("=")) {
62491
- return formula;
62492
- }
62493
- const compiledFormula = compile(formula);
62494
- const updatedDependencies = compiledFormula.dependencies.map((dep) => {
62495
- const range = this.getters.getRangeFromSheetXC(sheetId, dep);
62496
- const changedRange = applyChange(range);
62497
- return changedRange.changeType === "NONE" ? range : changedRange.range;
62498
- });
62499
- return this.getters.getFormulaString(sheetId, compiledFormula.tokens, updatedDependencies);
62500
- }
62501
62513
  /**
62502
62514
  * Copy a formula string to another sheet.
62503
62515
  *
@@ -63390,7 +63402,7 @@ stores.inject(MyMetaStore, storeInstance);
63390
63402
  static getters = ["getCoreTable", "getCoreTables", "getCoreTableMatchingTopLeft"];
63391
63403
  tables = {};
63392
63404
  nextTableId = 1;
63393
- adaptRanges(applyChange, sheetId) {
63405
+ adaptRanges({ applyChange }, sheetId) {
63394
63406
  for (const table of this.getCoreTables(sheetId)) {
63395
63407
  this.applyRangeChangeOnTable(sheetId, table, applyChange);
63396
63408
  }
@@ -64356,7 +64368,7 @@ stores.inject(MyMetaStore, storeInstance);
64356
64368
  }
64357
64369
  }
64358
64370
  }
64359
- adaptRanges(applyChange) {
64371
+ adaptRanges({ applyChange, adaptFormulaString }) {
64360
64372
  for (const pivotId in this.pivots) {
64361
64373
  const definition = deepCopy(this.pivots[pivotId]?.definition);
64362
64374
  if (!definition) {
@@ -64376,19 +64388,13 @@ stores.inject(MyMetaStore, storeInstance);
64376
64388
  continue;
64377
64389
  }
64378
64390
  const sheetId = measure.computedBy.sheetId;
64379
- const compiledFormula = this.compiledMeasureFormulas[pivotId][measureId].formula;
64380
- const newDependencies = [];
64381
- for (const range of compiledFormula.dependencies) {
64382
- const change = applyChange(range);
64383
- if (change.changeType === "NONE") {
64384
- newDependencies.push(range);
64385
- }
64386
- else {
64387
- newDependencies.push(change.range);
64388
- }
64389
- }
64390
- const newFormulaString = this.getters.getFormulaString(sheetId, compiledFormula.tokens, newDependencies);
64391
+ const { formula: compiledFormula, dependencies: indirectDependencies } = this.compiledMeasureFormulas[pivotId][measureId];
64392
+ // adapt direct dependencies
64393
+ this.history.update("compiledMeasureFormulas", pivotId, measureId, "formula", "dependencies", compiledFormula.dependencies.map((range) => applyChange(range).range));
64394
+ // adapt all dependencies (including indirect)
64395
+ this.history.update("compiledMeasureFormulas", pivotId, measure.id, "dependencies", indirectDependencies.map((range) => applyChange(range).range));
64391
64396
  const oldFormulaString = measure.computedBy.formula;
64397
+ const newFormulaString = adaptFormulaString(sheetId, oldFormulaString);
64392
64398
  if (newFormulaString !== oldFormulaString) {
64393
64399
  this.replaceMeasureFormula(pivotId, measure, newFormulaString);
64394
64400
  }
@@ -64550,7 +64556,6 @@ stores.inject(MyMetaStore, storeInstance);
64550
64556
  formula: newFormulaString,
64551
64557
  sheetId: measure.computedBy.sheetId,
64552
64558
  });
64553
- this.compileCalculatedMeasures(pivotId, pivot.definition.measures);
64554
64559
  }
64555
64560
  checkSortedColumnInMeasures(definition) {
64556
64561
  const measures = definition.measures.map((measure) => measure.id);
@@ -65932,11 +65937,16 @@ stores.inject(MyMetaStore, storeInstance);
65932
65937
  return this.arrayFormulasToResults.get(formulasPosition);
65933
65938
  }
65934
65939
  /**
65935
- * Remove a node, also remove it from other nodes adjacency list
65940
+ * Remove a spreading relation for a given array formula position
65941
+ * and its result zone
65936
65942
  */
65937
65943
  removeNode(position) {
65944
+ const resultZone = this.arrayFormulasToResults.get(position);
65945
+ if (!resultZone) {
65946
+ return;
65947
+ }
65938
65948
  this.resultsToArrayFormulas.remove({
65939
- boundingBox: { sheetId: position.sheetId, zone: positionToZone(position) },
65949
+ boundingBox: { sheetId: position.sheetId, zone: resultZone },
65940
65950
  data: position,
65941
65951
  });
65942
65952
  this.arrayFormulasToResults.delete(position);
@@ -66224,6 +66234,10 @@ stores.inject(MyMetaStore, storeInstance);
66224
66234
  // empty matrix
66225
66235
  return createEvaluatedCell({ value: 0 }, this.getters.getLocale(), cellData);
66226
66236
  }
66237
+ if (nbRows === 1 && nbColumns === 1) {
66238
+ // single value matrix
66239
+ return createEvaluatedCell(nullValueToZeroValue(formulaReturn[0][0]), this.getters.getLocale(), cellData);
66240
+ }
66227
66241
  const resultZone = {
66228
66242
  top: formulaPosition.row,
66229
66243
  bottom: formulaPosition.row + nbRows - 1,
@@ -67910,6 +67924,7 @@ stores.inject(MyMetaStore, storeInstance);
67910
67924
  handle(cmd) {
67911
67925
  switch (cmd.type) {
67912
67926
  case "START":
67927
+ case "UPDATE_LOCALE":
67913
67928
  for (const sheetId of this.getters.getSheetIds()) {
67914
67929
  this.initializeSheet(sheetId);
67915
67930
  }
@@ -68031,7 +68046,7 @@ stores.inject(MyMetaStore, storeInstance);
68031
68046
  }
68032
68047
  const cell = this.getters.getCell(position);
68033
68048
  const colSize = this.getters.getColSize(position.sheetId, position.col);
68034
- return getDefaultCellHeight(this.ctx, cell, colSize);
68049
+ return getDefaultCellHeight(this.ctx, cell, this.getters.getLocale(), colSize);
68035
68050
  }
68036
68051
  isInMultiRowMerge(position) {
68037
68052
  const merge = this.getters.getMerge(position);
@@ -70340,7 +70355,7 @@ stores.inject(MyMetaStore, storeInstance);
70340
70355
  cmd.cf.rule = {
70341
70356
  ...rule,
70342
70357
  rangeValues: rule.rangeValues
70343
- ? adaptStringRange(cmd.sheetId, rule.rangeValues, applyChange)
70358
+ ? adaptStringRange(cmd.sheetId, rule.rangeValues, applyChange).range
70344
70359
  : undefined,
70345
70360
  };
70346
70361
  }
@@ -83555,6 +83570,9 @@ stores.inject(MyMetaStore, storeInstance);
83555
83570
  if (style.alignment && style.alignment.wrapText) {
83556
83571
  alignAttrs.push(["wrapText", "1"]);
83557
83572
  }
83573
+ if (style.alignment && style.alignment.shrinkToFit) {
83574
+ alignAttrs.push(["shrinkToFit", "1"]);
83575
+ }
83558
83576
  if (alignAttrs.length > 0) {
83559
83577
  attributes.push(["applyAlignment", "1"]); // for Libre Office
83560
83578
  styleNodes.push(escapeXml /*xml*/ `<xf ${formatAttributes(attributes)}><alignment ${formatAttributes(alignAttrs)} /></xf> `);
@@ -84325,7 +84343,7 @@ stores.inject(MyMetaStore, storeInstance);
84325
84343
  this.config = this.setupConfig(config);
84326
84344
  this.session = this.setupSession(workbookData.revisionId);
84327
84345
  this.coreGetters = {};
84328
- this.range = new RangeAdapter(this.coreGetters);
84346
+ this.range = new RangeAdapterPlugin(this.coreGetters);
84329
84347
  this.coreGetters.getRangeString = this.range.getRangeString.bind(this.range);
84330
84348
  this.coreGetters.getRangeFromSheetXC = this.range.getRangeFromSheetXC.bind(this.range);
84331
84349
  this.coreGetters.createAdaptedRanges = this.range.createAdaptedRanges.bind(this.range);
@@ -84339,8 +84357,6 @@ stores.inject(MyMetaStore, storeInstance);
84339
84357
  this.coreGetters.extendRange = this.range.extendRange.bind(this.range);
84340
84358
  this.coreGetters.getRangesUnion = this.range.getRangesUnion.bind(this.range);
84341
84359
  this.coreGetters.removeRangesSheetPrefix = this.range.removeRangesSheetPrefix.bind(this.range);
84342
- this.coreGetters.adaptFormulaStringDependencies =
84343
- this.range.adaptFormulaStringDependencies.bind(this.range);
84344
84360
  this.coreGetters.copyFormulaStringForSheet = this.range.copyFormulaStringForSheet.bind(this.range);
84345
84361
  this.getters = {
84346
84362
  isReadonly: () => this.config.mode === "readonly" || this.config.mode === "dashboard",
@@ -85063,9 +85079,9 @@ stores.inject(MyMetaStore, storeInstance);
85063
85079
  exports.tokenize = tokenize;
85064
85080
 
85065
85081
 
85066
- __info__.version = "18.4.24";
85067
- __info__.date = "2026-01-14T10:00:55.867Z";
85068
- __info__.hash = "0364f56";
85082
+ __info__.version = "18.4.25";
85083
+ __info__.date = "2026-01-21T11:06:11.131Z";
85084
+ __info__.hash = "161472d";
85069
85085
 
85070
85086
 
85071
85087
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);