@odoo/o-spreadsheet 17.0.8 → 17.0.10

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 17.0.8
6
- * @date 2024-01-17T10:27:32.736Z
7
- * @hash 0f2d46e
5
+ * @version 17.0.10
6
+ * @date 2024-02-02T13:48:28.727Z
7
+ * @hash be06aa9
8
8
  */
9
9
 
10
10
  (function (exports, owl) {
@@ -2121,6 +2121,7 @@
2121
2121
  CommandResult["BlockingValidationRule"] = "BlockingValidationRule";
2122
2122
  CommandResult["InvalidCopyPasteSelection"] = "InvalidCopyPasteSelection";
2123
2123
  CommandResult["NoChanges"] = "NoChanges";
2124
+ CommandResult["InvalidInputId"] = "InvalidInputId";
2124
2125
  })(exports.CommandResult || (exports.CommandResult = {}));
2125
2126
 
2126
2127
  const DEFAULT_LOCALES = [
@@ -3265,27 +3266,30 @@
3265
3266
  }
3266
3267
  function createLargeNumberFormat(format, magnitude, postFix, locale) {
3267
3268
  const internalFormat = parseFormat(format || "#,##0");
3268
- const largeNumberFormat = internalFormat
3269
- .map((formatPart) => {
3270
- if (formatPart.type === "NUMBER") {
3271
- return [
3272
- {
3273
- ...formatPart,
3274
- format: {
3275
- ...formatPart.format,
3276
- magnitude,
3277
- decimalPart: undefined,
3278
- },
3279
- },
3280
- {
3281
- type: "STRING",
3282
- format: postFix,
3283
- },
3284
- ];
3269
+ const largeNumberFormat = [];
3270
+ for (let i = 0; i < internalFormat.length; i++) {
3271
+ const formatPart = internalFormat[i];
3272
+ if (formatPart.type !== "NUMBER") {
3273
+ largeNumberFormat.push(formatPart);
3274
+ continue;
3285
3275
  }
3286
- return formatPart;
3287
- })
3288
- .flat();
3276
+ largeNumberFormat.push({
3277
+ ...formatPart,
3278
+ format: {
3279
+ ...formatPart.format,
3280
+ magnitude,
3281
+ decimalPart: undefined,
3282
+ },
3283
+ });
3284
+ largeNumberFormat.push({
3285
+ type: "STRING",
3286
+ format: postFix,
3287
+ });
3288
+ const nextFormatPart = internalFormat[i + 1];
3289
+ if (nextFormatPart?.type === "STRING" && ["k", "m", "b"].includes(nextFormatPart.format)) {
3290
+ i++;
3291
+ }
3292
+ }
3289
3293
  return convertInternalFormatToFormat(largeNumberFormat);
3290
3294
  }
3291
3295
  function changeDecimalPlaces(format, step, locale) {
@@ -4929,14 +4933,8 @@
4929
4933
  : undefined));
4930
4934
  }
4931
4935
  }
4932
- else if (zone.left === zone.right && zone.top === zone.bottom) {
4933
- // A single cell. If it's only the title, the dataset is not added.
4934
- if (!dataSetsHaveTitle) {
4935
- dataSets.push(createDataSet(getters, dataSetSheetId, zone, undefined));
4936
- }
4937
- }
4938
4936
  else {
4939
- /* 1 row or 1 column */
4937
+ /* 1 cell, 1 row or 1 column */
4940
4938
  dataSets.push(createDataSet(getters, dataSetSheetId, zone, dataSetsHaveTitle
4941
4939
  ? {
4942
4940
  top: zone.top,
@@ -4985,8 +4983,10 @@
4985
4983
  }
4986
4984
  const dataRange = ds.dataRange.clone({ zone: dataZone });
4987
4985
  return {
4988
- label: ds.labelCell ? getters.getRangeString(ds.labelCell, "forceSheetReference") : undefined,
4989
- range: getters.getRangeString(dataRange, "forceSheetReference"),
4986
+ label: ds.labelCell
4987
+ ? getters.getRangeString(ds.labelCell, "forceSheetReference", { useFixedReference: true })
4988
+ : undefined,
4989
+ range: getters.getRangeString(dataRange, "forceSheetReference", { useFixedReference: true }),
4990
4990
  };
4991
4991
  }
4992
4992
  function toExcelLabelRange(getters, labelRange, shouldRemoveFirstLabel) {
@@ -4999,7 +4999,7 @@
4999
4999
  zone.top = zone.top + 1;
5000
5000
  }
5001
5001
  const range = labelRange.clone({ zone });
5002
- return getters.getRangeString(range, "forceSheetReference");
5002
+ return getters.getRangeString(range, "forceSheetReference", { useFixedReference: true });
5003
5003
  }
5004
5004
  /**
5005
5005
  * Transform a chart definition which supports dataSets (dataSets and LabelRange)
@@ -8589,7 +8589,7 @@
8589
8589
  return undefined;
8590
8590
  const dataSets = this.dataSets
8591
8591
  .map((ds) => toExcelDataset(this.getters, ds))
8592
- .filter((ds) => ds.range !== ""); // && range !== INCORRECT_RANGE_STRING ? show incorrect #ref ?
8592
+ .filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
8593
8593
  const labelRange = toExcelLabelRange(this.getters, this.labelRange, shouldRemoveFirstLabel(this.labelRange, this.dataSets[0], this.dataSetsHaveTitle));
8594
8594
  return {
8595
8595
  ...this.getDefinition(),
@@ -9167,7 +9167,7 @@
9167
9167
  return undefined;
9168
9168
  const dataSets = this.dataSets
9169
9169
  .map((ds) => toExcelDataset(this.getters, ds))
9170
- .filter((ds) => ds.range !== ""); // && range !== INCORRECT_RANGE_STRING ? show incorrect #ref ?
9170
+ .filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
9171
9171
  const labelRange = toExcelLabelRange(this.getters, this.labelRange, shouldRemoveFirstLabel(this.labelRange, this.dataSets[0], this.dataSetsHaveTitle));
9172
9172
  return {
9173
9173
  ...this.getDefinition(),
@@ -9473,7 +9473,7 @@
9473
9473
  return undefined;
9474
9474
  const dataSets = this.dataSets
9475
9475
  .map((ds) => toExcelDataset(this.getters, ds))
9476
- .filter((ds) => ds.range !== ""); // && range !== INCORRECT_RANGE_STRING ? show incorrect #ref ?
9476
+ .filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
9477
9477
  const labelRange = toExcelLabelRange(this.getters, this.labelRange, shouldRemoveFirstLabel(this.labelRange, this.dataSets[0], this.dataSetsHaveTitle));
9478
9478
  return {
9479
9479
  ...this.getDefinition(),
@@ -19916,19 +19916,20 @@
19916
19916
  const formatNumberCurrency = createFormatActionSpec({
19917
19917
  name: _t("Currency"),
19918
19918
  descriptionValue: 1000.12,
19919
- format: (env) => env.model.config.defaultCurrencyFormat,
19919
+ format: (env) => env.model.config.defaultCurrencyFormat ?? DEFAULT_CURRENCY_FORMAT,
19920
19920
  });
19921
19921
  const formatNumberCurrencyRounded = {
19922
19922
  ...createFormatActionSpec({
19923
19923
  name: _t("Currency rounded"),
19924
19924
  descriptionValue: 1000,
19925
- format: (env) => roundFormat(env.model.config.defaultCurrencyFormat),
19925
+ format: (env) => roundFormat(env.model.config.defaultCurrencyFormat ?? DEFAULT_CURRENCY_FORMAT),
19926
19926
  }),
19927
19927
  isVisible: (env) => {
19928
19928
  const currencyFormat = env.model.config.defaultCurrencyFormat;
19929
- return currencyFormat !== roundFormat(currencyFormat);
19929
+ return currencyFormat !== roundFormat(currencyFormat ?? DEFAULT_CURRENCY_FORMAT);
19930
19930
  },
19931
19931
  };
19932
+ const DEFAULT_CURRENCY_FORMAT = "[$$]#,##0.00";
19932
19933
  const EXAMPLE_DATE = parseLiteral("2023/09/26 10:43:00 PM", DEFAULT_LOCALE);
19933
19934
  const formatCustomCurrency = {
19934
19935
  name: _t("Custom currency"),
@@ -26807,6 +26808,9 @@
26807
26808
  const token = tokens.filter((token) => token.value.includes(currentSelectedText) &&
26808
26809
  token.start <= currentSelection.start &&
26809
26810
  token.end >= currentSelection.end)[0];
26811
+ if (!token) {
26812
+ return;
26813
+ }
26810
26814
  if (token.type === "REFERENCE") {
26811
26815
  this.env.model.dispatch("CHANGE_COMPOSER_CURSOR_SELECTION", {
26812
26816
  start: token.start,
@@ -29345,6 +29349,7 @@
29345
29349
  GROUP_HEADERS: groupHeadersMenuRegistry,
29346
29350
  UNGROUP_HEADERS: unGroupHeadersMenuRegistry,
29347
29351
  };
29352
+ const MODIFIER_KEYS = ["Shift", "Control", "Alt", "Meta"];
29348
29353
  // -----------------------------------------------------------------------------
29349
29354
  // JS
29350
29355
  // -----------------------------------------------------------------------------
@@ -29717,16 +29722,15 @@
29717
29722
  }
29718
29723
  }
29719
29724
  onKeydown(ev) {
29720
- const eventKey = ev.key.toUpperCase();
29721
29725
  let keyDownString = "";
29722
- if (isCtrlKey(ev) && eventKey !== "CTRL")
29723
- keyDownString += "CTRL+";
29724
- if (ev.metaKey)
29725
- keyDownString += "CTRL+";
29726
- if (ev.altKey && eventKey !== "ALT")
29727
- keyDownString += "ALT+";
29728
- if (ev.shiftKey && eventKey !== "SHIFT")
29729
- keyDownString += "SHIFT+";
29726
+ if (!MODIFIER_KEYS.includes(ev.key)) {
29727
+ if (isCtrlKey(ev))
29728
+ keyDownString += "CTRL+";
29729
+ if (ev.altKey)
29730
+ keyDownString += "ALT+";
29731
+ if (ev.shiftKey)
29732
+ keyDownString += "SHIFT+";
29733
+ }
29730
29734
  keyDownString += ev.key.toUpperCase();
29731
29735
  let handler = this.keyDownMapping[keyDownString];
29732
29736
  if (handler) {
@@ -35564,6 +35568,9 @@
35564
35568
  format: cell.format ? getItemId(cell.format, formats) : undefined,
35565
35569
  content: cell.content || undefined,
35566
35570
  };
35571
+ if (cell instanceof FormulaCellWithDependencies) {
35572
+ cells[xc].content = cell.contentWithFixedReferences || undefined;
35573
+ }
35567
35574
  }
35568
35575
  _sheet.cells = cells;
35569
35576
  }
@@ -35607,13 +35614,13 @@
35607
35614
  /*
35608
35615
  * Reconstructs the original formula string based on a normalized form and its dependencies
35609
35616
  */
35610
- getFormulaCellContent(sheetId, compiledFormula, dependencies) {
35617
+ getFormulaCellContent(sheetId, compiledFormula, dependencies, useFixedReference = false) {
35611
35618
  const ranges = dependencies || compiledFormula.dependencies;
35612
35619
  let rangeIndex = 0;
35613
35620
  return concat(compiledFormula.tokens.map((token) => {
35614
35621
  if (token.type === "REFERENCE") {
35615
35622
  const range = ranges[rangeIndex++];
35616
- return this.getters.getRangeString(range, sheetId);
35623
+ return this.getters.getRangeString(range, sheetId, { useFixedReference });
35617
35624
  }
35618
35625
  return token.value;
35619
35626
  }));
@@ -35882,6 +35889,18 @@
35882
35889
  get content() {
35883
35890
  return concat(this.compiledFormula.tokens.map((token) => token.value));
35884
35891
  }
35892
+ get contentWithFixedReferences() {
35893
+ let rangeIndex = 0;
35894
+ return concat(this.compiledFormula.tokens.map((token) => {
35895
+ if (token.type === "REFERENCE") {
35896
+ const index = rangeIndex++;
35897
+ return this.getRangeString(this.compiledFormula.dependencies[index], this.sheetId, {
35898
+ useFixedReference: true,
35899
+ });
35900
+ }
35901
+ return token.value;
35902
+ }));
35903
+ }
35885
35904
  }
35886
35905
  class RangeReferenceToken {
35887
35906
  getValue;
@@ -36186,7 +36205,13 @@
36186
36205
  }
36187
36206
  }
36188
36207
  exportForExcel(data) {
36189
- this.export(data);
36208
+ if (data.sheets) {
36209
+ for (let sheet of data.sheets) {
36210
+ if (this.cfRules[sheet.id]) {
36211
+ sheet.conditionalFormats = this.cfRules[sheet.id].map((rule) => this.mapToConditionalFormat(sheet.id, rule, { useFixedReference: true }));
36212
+ }
36213
+ }
36214
+ }
36190
36215
  }
36191
36216
  // ---------------------------------------------------------------------------
36192
36217
  // Getters
@@ -36251,11 +36276,11 @@
36251
36276
  // ---------------------------------------------------------------------------
36252
36277
  // Private
36253
36278
  // ---------------------------------------------------------------------------
36254
- mapToConditionalFormat(sheetId, cf) {
36279
+ mapToConditionalFormat(sheetId, cf, { useFixedReference } = { useFixedReference: false }) {
36255
36280
  return {
36256
36281
  ...cf,
36257
36282
  ranges: cf.ranges.map((range) => {
36258
- return this.getters.getRangeString(range, sheetId);
36283
+ return this.getters.getRangeString(range, sheetId, { useFixedReference });
36259
36284
  }),
36260
36285
  };
36261
36286
  }
@@ -38323,8 +38348,10 @@
38323
38348
  *
38324
38349
  * @param range the range (received from getRangeFromXC or getRangeFromZone)
38325
38350
  * @param forSheetId the id of the sheet where the range string is supposed to be used.
38351
+ * @param options
38352
+ * @param options.useFixedReference if true, the range will be returned with fixed row and column
38326
38353
  */
38327
- getRangeString(range, forSheetId) {
38354
+ getRangeString(range, forSheetId, options = { useFixedReference: false }) {
38328
38355
  if (!range) {
38329
38356
  return INCORRECT_RANGE_STRING;
38330
38357
  }
@@ -38351,7 +38378,7 @@
38351
38378
  if (prefixSheet && !sheetName) {
38352
38379
  return INCORRECT_RANGE_STRING;
38353
38380
  }
38354
- let rangeString = this.getRangePartString(rangeImpl, 0);
38381
+ let rangeString = this.getRangePartString(rangeImpl, 0, options);
38355
38382
  if (rangeImpl.parts && rangeImpl.parts.length === 2) {
38356
38383
  // this if converts A2:A2 into A2 except if any part of the original range had fixed row or column (with $)
38357
38384
  if (rangeImpl.zone.top !== rangeImpl.zone.bottom ||
@@ -38361,7 +38388,7 @@
38361
38388
  rangeImpl.parts[1].rowFixed ||
38362
38389
  rangeImpl.parts[1].colFixed) {
38363
38390
  rangeString += ":";
38364
- rangeString += this.getRangePartString(rangeImpl, 1);
38391
+ rangeString += this.getRangePartString(rangeImpl, 1, options);
38365
38392
  }
38366
38393
  }
38367
38394
  return `${prefixSheet ? sheetName + "!" : ""}${rangeString}`;
@@ -38402,13 +38429,13 @@
38402
38429
  /**
38403
38430
  * Get a Xc string that represent a part of a range
38404
38431
  */
38405
- getRangePartString(range, part) {
38432
+ getRangePartString(range, part, options = { useFixedReference: false }) {
38406
38433
  const colFixed = range.parts && range.parts[part]?.colFixed ? "$" : "";
38407
38434
  const col = part === 0 ? numberToLetters(range.zone.left) : numberToLetters(range.zone.right);
38408
38435
  const rowFixed = range.parts && range.parts[part]?.rowFixed ? "$" : "";
38409
38436
  const row = part === 0 ? String(range.zone.top + 1) : String(range.zone.bottom + 1);
38410
38437
  let str = "";
38411
- if (range.isFullCol) {
38438
+ if (range.isFullCol && !options.useFixedReference) {
38412
38439
  if (part === 0 && range.unboundedZone.hasHeader) {
38413
38440
  str = colFixed + col + rowFixed + row;
38414
38441
  }
@@ -38416,7 +38443,7 @@
38416
38443
  str = colFixed + col;
38417
38444
  }
38418
38445
  }
38419
- else if (range.isFullRow) {
38446
+ else if (range.isFullRow && !options.useFixedReference) {
38420
38447
  if (part === 0 && range.unboundedZone.hasHeader) {
38421
38448
  str = colFixed + col + rowFixed + row;
38422
38449
  }
@@ -39837,22 +39864,17 @@
39837
39864
  * The `compute` of the formula's function must process it completely
39838
39865
  */
39839
39866
  refFn(range, isMeta, functionName, paramNumber) {
39867
+ this.assertRangeValid(range);
39840
39868
  if (isMeta) {
39841
39869
  // Use zoneToXc of zone instead of getRangeString to avoid sending unbounded ranges
39842
39870
  return { value: zoneToXc(range.zone) };
39843
39871
  }
39844
- if (!isZoneValid(range.zone)) {
39845
- throw new InvalidReferenceError();
39846
- }
39847
39872
  // if the formula definition could have accepted a range, we would pass through the _range function and not here
39848
39873
  if (range.zone.bottom !== range.zone.top || range.zone.left !== range.zone.right) {
39849
39874
  throw new Error(paramNumber
39850
39875
  ? _t("Function %s expects the parameter %s to be a single value or a single cell reference, not a range.", functionName.toString(), paramNumber.toString())
39851
39876
  : _t("Function %s expects its parameters to be single values or single cell references, not ranges.", functionName.toString()));
39852
39877
  }
39853
- if (range.invalidSheetName) {
39854
- throw new Error(_t("Invalid sheet name: %s", range.invalidSheetName));
39855
- }
39856
39878
  const position = { sheetId: range.sheetId, col: range.zone.left, row: range.zone.top };
39857
39879
  return this.readCell(position);
39858
39880
  }
@@ -39887,10 +39909,10 @@
39887
39909
  * Note that each col is possibly sparse: it only contain the values of cells
39888
39910
  * that are actually present in the grid.
39889
39911
  */
39890
- range({ sheetId, zone }) {
39891
- if (!isZoneValid(zone)) {
39892
- throw new InvalidReferenceError();
39893
- }
39912
+ range(range) {
39913
+ this.assertRangeValid(range);
39914
+ const sheetId = range.sheetId;
39915
+ const zone = range.zone;
39894
39916
  // Performance issue: Avoid fetching data on positions that are out of the spreadsheet
39895
39917
  // e.g. A1:ZZZ9999 in a sheet with 10 cols and 10 rows should ignore everything past J10 and return a 10x10 array
39896
39918
  const sheetZone = this.getters.getSheetZone(sheetId);
@@ -39927,6 +39949,14 @@
39927
39949
  this.rangeCache[cacheKey] = matrix;
39928
39950
  return matrix;
39929
39951
  }
39952
+ assertRangeValid(range) {
39953
+ if (!isZoneValid(range.zone)) {
39954
+ throw new InvalidReferenceError();
39955
+ }
39956
+ if (range.invalidSheetName) {
39957
+ throw new Error(_t("Invalid sheet name: %s", range.invalidSheetName));
39958
+ }
39959
+ }
39930
39960
  }
39931
39961
 
39932
39962
  function quickselect(arr, k, left, right, compare) {
@@ -45999,27 +46029,6 @@
45999
46029
  // ---------------------------------------------------------------------------
46000
46030
  // Command Handling
46001
46031
  // ---------------------------------------------------------------------------
46002
- allowDispatch(cmd) {
46003
- switch (cmd.type) {
46004
- case "ADD_RANGE":
46005
- case "ADD_EMPTY_RANGE":
46006
- if (this.inputHasSingleRange && this.ranges.length === 1) {
46007
- return "MaximumRangesReached" /* CommandResult.MaximumRangesReached */;
46008
- }
46009
- break;
46010
- case "REMOVE_RANGE":
46011
- if (this.ranges.length === 1) {
46012
- return "MinimumRangesReached" /* CommandResult.MinimumRangesReached */;
46013
- }
46014
- break;
46015
- case "CHANGE_RANGE":
46016
- if (this.inputHasSingleRange && cmd.value.split(",").length > 1) {
46017
- return "MaximumRangesReached" /* CommandResult.MaximumRangesReached */;
46018
- }
46019
- break;
46020
- }
46021
- return "Success" /* CommandResult.Success */;
46022
- }
46023
46032
  handleEvent(event) {
46024
46033
  if (this.focusedRangeIndex === null) {
46025
46034
  return;
@@ -46257,6 +46266,15 @@
46257
46266
  // Command Handling
46258
46267
  // ---------------------------------------------------------------------------
46259
46268
  allowDispatch(cmd) {
46269
+ switch (cmd.type) {
46270
+ case "FOCUS_RANGE":
46271
+ case "CHANGE_RANGE":
46272
+ case "ADD_EMPTY_RANGE":
46273
+ case "REMOVE_RANGE":
46274
+ if (!this.inputs[cmd.id]) {
46275
+ return "InvalidInputId" /* CommandResult.InvalidInputId */;
46276
+ }
46277
+ }
46260
46278
  switch (cmd.type) {
46261
46279
  case "FOCUS_RANGE":
46262
46280
  const index = this.currentInput?.getIndex(cmd.rangeId);
@@ -46264,9 +46282,25 @@
46264
46282
  return "InputAlreadyFocused" /* CommandResult.InputAlreadyFocused */;
46265
46283
  }
46266
46284
  break;
46267
- }
46268
- if (this.currentInput) {
46269
- return this.currentInput.allowDispatch(cmd);
46285
+ case "ADD_RANGE":
46286
+ case "ADD_EMPTY_RANGE":
46287
+ const input = this.inputs[cmd.id];
46288
+ if (input.inputHasSingleRange && input.ranges.length === 1) {
46289
+ return "MaximumRangesReached" /* CommandResult.MaximumRangesReached */;
46290
+ }
46291
+ break;
46292
+ case "REMOVE_RANGE":
46293
+ if (this.inputs[cmd.id].ranges.length === 1) {
46294
+ return "MinimumRangesReached" /* CommandResult.MinimumRangesReached */;
46295
+ }
46296
+ break;
46297
+ case "CHANGE_RANGE": {
46298
+ const input = this.inputs[cmd.id];
46299
+ if (input.inputHasSingleRange && cmd.value.split(",").length > 1) {
46300
+ return "MaximumRangesReached" /* CommandResult.MaximumRangesReached */;
46301
+ }
46302
+ break;
46303
+ }
46270
46304
  }
46271
46305
  return "Success" /* CommandResult.Success */;
46272
46306
  }
@@ -48575,9 +48609,10 @@
48575
48609
  */
48576
48610
  getReferencedRanges() {
48577
48611
  const editionSheetId = this.getters.getCurrentEditedCell().sheetId;
48578
- return this.currentTokens
48612
+ const referenceRanges = this.currentTokens
48579
48613
  .filter((token) => token.type === "REFERENCE")
48580
48614
  .map((token) => this.getters.getRangeFromSheetXC(editionSheetId, token.value));
48615
+ return referenceRanges.filter((range) => !range.invalidSheetName && !range.invalidXc);
48581
48616
  }
48582
48617
  getAutoCompleteDataValidationValues() {
48583
48618
  if (this.mode === "inactive") {
@@ -54935,12 +54970,7 @@
54935
54970
  attrs.push(["t", "str"]);
54936
54971
  cycle = escapeXml /*xml*/ `<v>${cell.value}</v>`;
54937
54972
  }
54938
- node = escapeXml /*xml*/ `
54939
- <f>
54940
- ${XlsxFormula}
54941
- </f>
54942
- ${cycle}
54943
- `;
54973
+ node = escapeXml /*xml*/ `<f>${XlsxFormula}</f>${cycle}`;
54944
54974
  return { attrs, node };
54945
54975
  }
54946
54976
  function addContent(content, sharedStrings, forceString = false) {
@@ -55759,11 +55789,10 @@
55759
55789
  ({ attrs: additionalAttrs, node: cellNode } = addContent(cell.content, construct.sharedStrings, isTableHeader));
55760
55790
  }
55761
55791
  attributes.push(...additionalAttrs);
55762
- cellNodes.push(escapeXml /*xml*/ `
55763
- <c ${formatAttributes(attributes)}>
55764
- ${cellNode}
55765
- </c>
55766
- `);
55792
+ // prettier-ignore
55793
+ cellNodes.push(escapeXml /*xml*/ `<c ${formatAttributes(attributes)}>
55794
+ ${cellNode}
55795
+ </c>`);
55767
55796
  }
55768
55797
  }
55769
55798
  if (cellNodes.length || row.size !== DEFAULT_CELL_HEIGHT || row.isHidden) {
@@ -56359,7 +56388,6 @@
56359
56388
  ...config,
56360
56389
  mode: config.mode || "normal",
56361
56390
  custom: config.custom || {},
56362
- defaultCurrencyFormat: config.defaultCurrencyFormat || "[$$]#,##0.00",
56363
56391
  external: this.setupExternalConfig(config.external || {}),
56364
56392
  transportService,
56365
56393
  client,
@@ -56397,6 +56425,7 @@
56397
56425
  custom: this.config.custom,
56398
56426
  uiActions: this.config,
56399
56427
  session: this.session,
56428
+ defaultCurrencyFormat: this.config.defaultCurrencyFormat,
56400
56429
  };
56401
56430
  }
56402
56431
  // ---------------------------------------------------------------------------
@@ -56769,9 +56798,9 @@
56769
56798
  exports.tokenize = tokenize;
56770
56799
 
56771
56800
 
56772
- __info__.version = "17.0.8";
56773
- __info__.date = "2024-01-17T10:27:32.736Z";
56774
- __info__.hash = "0f2d46e";
56801
+ __info__.version = "17.0.10";
56802
+ __info__.date = "2024-02-02T13:48:28.727Z";
56803
+ __info__.hash = "be06aa9";
56775
56804
 
56776
56805
 
56777
56806
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);