@odoo/o-spreadsheet 17.0.75 → 17.0.76

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.75
6
- * @date 2025-10-07T10:00:00.345Z
7
- * @hash c8f1120
5
+ * @version 17.0.76
6
+ * @date 2025-10-16T06:36:18.137Z
7
+ * @hash 5c3234b
8
8
  */
9
9
 
10
10
  'use strict';
@@ -2284,7 +2284,17 @@ function tryCastAsNumberMatrix(data, argName) {
2284
2284
  data.forEach((row) => {
2285
2285
  row.forEach((cell) => {
2286
2286
  if (typeof cell !== "number") {
2287
- throw new Error(_t("Function [[FUNCTION_NAME]] expects number values for %s, but got a %s.", typeof cell, argName));
2287
+ let message = "";
2288
+ if (typeof cell === "object") {
2289
+ message = _t("Function [[FUNCTION_NAME]] expects number values for %s, but got an empty value.", argName);
2290
+ }
2291
+ else if (typeof cell === "string") {
2292
+ message = _t("Function [[FUNCTION_NAME]] expects number values for %s, but got a string.", argName);
2293
+ }
2294
+ else if (typeof cell === "boolean") {
2295
+ message = _t("Function [[FUNCTION_NAME]] expects number values for %s, but got a boolean.", argName);
2296
+ }
2297
+ throw new Error(message);
2288
2298
  }
2289
2299
  });
2290
2300
  });
@@ -9249,6 +9259,7 @@ function getChartTimeOptions(labels, labelFormat, locale) {
9249
9259
  parser: luxonFormat,
9250
9260
  displayFormats,
9251
9261
  unit: timeUnit ?? false,
9262
+ tooltipFormat: luxonFormat,
9252
9263
  };
9253
9264
  }
9254
9265
  /**
@@ -13825,7 +13836,7 @@ const GROWTH = {
13825
13836
  returns: ["NUMBER"],
13826
13837
  compute: function (knownDataY, knownDataX = [], newDataX = [], b = true) {
13827
13838
  assertNonEmptyMatrix(knownDataY, "known_data_y");
13828
- return expM(predictLinearValues(logM(tryCastAsNumberMatrix(knownDataY, "the first argument (known_data_y)")), tryCastAsNumberMatrix(knownDataX, "the second argument (known_data_x)"), tryCastAsNumberMatrix(newDataX, "the third argument (new_data_y)"), toBoolean(b)));
13839
+ return expM(predictLinearValues(logM(tryCastAsNumberMatrix(knownDataY, "known_data_y")), tryCastAsNumberMatrix(knownDataX, "known_data_x"), tryCastAsNumberMatrix(newDataX, "new_data_y"), toBoolean(b)));
13829
13840
  },
13830
13841
  };
13831
13842
  // -----------------------------------------------------------------------------
@@ -13893,7 +13904,7 @@ const LINEST = {
13893
13904
  returns: ["NUMBER"],
13894
13905
  compute: function (dataY, dataX = [], calculateB = true, verbose = false) {
13895
13906
  assertNonEmptyMatrix(dataY, "data_y");
13896
- return fullLinearRegression(tryCastAsNumberMatrix(dataX, "the first argument (data_y)"), tryCastAsNumberMatrix(dataY, "the second argument (data_x)"), toBoolean(calculateB), toBoolean(verbose));
13907
+ return fullLinearRegression(tryCastAsNumberMatrix(dataX, "data_x"), tryCastAsNumberMatrix(dataY, "data_y"), toBoolean(calculateB), toBoolean(verbose));
13897
13908
  },
13898
13909
  isExported: true,
13899
13910
  };
@@ -13911,7 +13922,7 @@ const LOGEST = {
13911
13922
  returns: ["NUMBER"],
13912
13923
  compute: function (dataY, dataX = [], calculateB = true, verbose = false) {
13913
13924
  assertNonEmptyMatrix(dataY, "data_y");
13914
- const coeffs = fullLinearRegression(tryCastAsNumberMatrix(dataX, "the second argument (data_x)"), logM(tryCastAsNumberMatrix(dataY, "the first argument (data_y)")), toBoolean(calculateB), toBoolean(verbose));
13925
+ const coeffs = fullLinearRegression(tryCastAsNumberMatrix(dataX, "data_x"), logM(tryCastAsNumberMatrix(dataY, "data_y")), toBoolean(calculateB), toBoolean(verbose));
13915
13926
  for (let i = 0; i < coeffs.length; i++) {
13916
13927
  coeffs[i][0] = Math.exp(coeffs[i][0]);
13917
13928
  }
@@ -14549,7 +14560,7 @@ const TREND = {
14549
14560
  returns: ["NUMBER"],
14550
14561
  compute: function (knownDataY, knownDataX = [], newDataX = [], b = true) {
14551
14562
  assertNonEmptyMatrix(knownDataY, "known_data_y");
14552
- return predictLinearValues(tryCastAsNumberMatrix(knownDataY, "the first argument (known_data_y)"), tryCastAsNumberMatrix(knownDataX, "the second argument (known_data_x)"), tryCastAsNumberMatrix(newDataX, "the third argument (new_data_y)"), toBoolean(b));
14563
+ return predictLinearValues(tryCastAsNumberMatrix(knownDataY, "known_data_y"), tryCastAsNumberMatrix(knownDataX, "known_data_x"), tryCastAsNumberMatrix(newDataX, "new_data_y"), toBoolean(b));
14553
14564
  },
14554
14565
  };
14555
14566
  // -----------------------------------------------------------------------------
@@ -25665,12 +25676,13 @@ class DataValidationEditor extends owl.Component {
25665
25676
  static template = "o-spreadsheet-DataValidationEditor";
25666
25677
  static components = { SelectionInput, SelectMenu };
25667
25678
  state = owl.useState({ rule: this.defaultDataValidationRule });
25679
+ editingSheetId;
25668
25680
  setup() {
25681
+ this.editingSheetId = this.env.model.getters.getActiveSheetId();
25669
25682
  if (this.props.rule) {
25670
- const sheetId = this.env.model.getters.getActiveSheetId();
25671
25683
  this.state.rule = {
25672
25684
  ...this.props.rule,
25673
- ranges: this.props.rule.ranges.map((range) => this.env.model.getters.getRangeString(range, sheetId)),
25685
+ ranges: this.props.rule.ranges.map((range) => this.env.model.getters.getRangeString(range, this.editingSheetId)),
25674
25686
  };
25675
25687
  this.state.rule.criterion.type = this.props.rule.criterion.type;
25676
25688
  }
@@ -25704,7 +25716,6 @@ class DataValidationEditor extends owl.Component {
25704
25716
  const locale = this.env.model.getters.getLocale();
25705
25717
  const criterion = rule.criterion;
25706
25718
  const criterionEvaluator = dataValidationEvaluatorRegistry.get(criterion.type);
25707
- const sheetId = this.env.model.getters.getActiveSheetId();
25708
25719
  const values = criterion.values
25709
25720
  .slice(0, criterionEvaluator.numberOfValues(criterion))
25710
25721
  .map((value) => value?.trim())
@@ -25712,8 +25723,8 @@ class DataValidationEditor extends owl.Component {
25712
25723
  .map((value) => canonicalizeContent(value, locale));
25713
25724
  rule.criterion = { ...criterion, values };
25714
25725
  return {
25715
- sheetId,
25716
- ranges: this.state.rule.ranges.map((xc) => this.env.model.getters.getRangeDataFromXc(sheetId, xc)),
25726
+ sheetId: this.editingSheetId,
25727
+ ranges: this.state.rule.ranges.map((xc) => this.env.model.getters.getRangeDataFromXc(this.editingSheetId, xc)),
25717
25728
  rule,
25718
25729
  };
25719
25730
  }
@@ -58500,6 +58511,6 @@ exports.setTranslationMethod = setTranslationMethod;
58500
58511
  exports.tokenize = tokenize;
58501
58512
 
58502
58513
 
58503
- __info__.version = "17.0.75";
58504
- __info__.date = "2025-10-07T10:00:00.345Z";
58505
- __info__.hash = "c8f1120";
58514
+ __info__.version = "17.0.76";
58515
+ __info__.date = "2025-10-16T06:36:18.137Z";
58516
+ __info__.hash = "5c3234b";
@@ -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.75
6
- * @date 2025-10-07T10:00:00.345Z
7
- * @hash c8f1120
5
+ * @version 17.0.76
6
+ * @date 2025-10-16T06:36:18.137Z
7
+ * @hash 5c3234b
8
8
  */
9
9
 
10
10
  import { Component, useRef, onMounted, useEffect, onWillPatch, useState, onWillUpdateProps, onPatched, useComponent, useExternalListener, onWillUnmount, onWillStart, xml, useChildSubEnv, useSubEnv, markRaw } from '@odoo/owl';
@@ -2282,7 +2282,17 @@ function tryCastAsNumberMatrix(data, argName) {
2282
2282
  data.forEach((row) => {
2283
2283
  row.forEach((cell) => {
2284
2284
  if (typeof cell !== "number") {
2285
- throw new Error(_t("Function [[FUNCTION_NAME]] expects number values for %s, but got a %s.", typeof cell, argName));
2285
+ let message = "";
2286
+ if (typeof cell === "object") {
2287
+ message = _t("Function [[FUNCTION_NAME]] expects number values for %s, but got an empty value.", argName);
2288
+ }
2289
+ else if (typeof cell === "string") {
2290
+ message = _t("Function [[FUNCTION_NAME]] expects number values for %s, but got a string.", argName);
2291
+ }
2292
+ else if (typeof cell === "boolean") {
2293
+ message = _t("Function [[FUNCTION_NAME]] expects number values for %s, but got a boolean.", argName);
2294
+ }
2295
+ throw new Error(message);
2286
2296
  }
2287
2297
  });
2288
2298
  });
@@ -9247,6 +9257,7 @@ function getChartTimeOptions(labels, labelFormat, locale) {
9247
9257
  parser: luxonFormat,
9248
9258
  displayFormats,
9249
9259
  unit: timeUnit ?? false,
9260
+ tooltipFormat: luxonFormat,
9250
9261
  };
9251
9262
  }
9252
9263
  /**
@@ -13823,7 +13834,7 @@ const GROWTH = {
13823
13834
  returns: ["NUMBER"],
13824
13835
  compute: function (knownDataY, knownDataX = [], newDataX = [], b = true) {
13825
13836
  assertNonEmptyMatrix(knownDataY, "known_data_y");
13826
- return expM(predictLinearValues(logM(tryCastAsNumberMatrix(knownDataY, "the first argument (known_data_y)")), tryCastAsNumberMatrix(knownDataX, "the second argument (known_data_x)"), tryCastAsNumberMatrix(newDataX, "the third argument (new_data_y)"), toBoolean(b)));
13837
+ return expM(predictLinearValues(logM(tryCastAsNumberMatrix(knownDataY, "known_data_y")), tryCastAsNumberMatrix(knownDataX, "known_data_x"), tryCastAsNumberMatrix(newDataX, "new_data_y"), toBoolean(b)));
13827
13838
  },
13828
13839
  };
13829
13840
  // -----------------------------------------------------------------------------
@@ -13891,7 +13902,7 @@ const LINEST = {
13891
13902
  returns: ["NUMBER"],
13892
13903
  compute: function (dataY, dataX = [], calculateB = true, verbose = false) {
13893
13904
  assertNonEmptyMatrix(dataY, "data_y");
13894
- return fullLinearRegression(tryCastAsNumberMatrix(dataX, "the first argument (data_y)"), tryCastAsNumberMatrix(dataY, "the second argument (data_x)"), toBoolean(calculateB), toBoolean(verbose));
13905
+ return fullLinearRegression(tryCastAsNumberMatrix(dataX, "data_x"), tryCastAsNumberMatrix(dataY, "data_y"), toBoolean(calculateB), toBoolean(verbose));
13895
13906
  },
13896
13907
  isExported: true,
13897
13908
  };
@@ -13909,7 +13920,7 @@ const LOGEST = {
13909
13920
  returns: ["NUMBER"],
13910
13921
  compute: function (dataY, dataX = [], calculateB = true, verbose = false) {
13911
13922
  assertNonEmptyMatrix(dataY, "data_y");
13912
- const coeffs = fullLinearRegression(tryCastAsNumberMatrix(dataX, "the second argument (data_x)"), logM(tryCastAsNumberMatrix(dataY, "the first argument (data_y)")), toBoolean(calculateB), toBoolean(verbose));
13923
+ const coeffs = fullLinearRegression(tryCastAsNumberMatrix(dataX, "data_x"), logM(tryCastAsNumberMatrix(dataY, "data_y")), toBoolean(calculateB), toBoolean(verbose));
13913
13924
  for (let i = 0; i < coeffs.length; i++) {
13914
13925
  coeffs[i][0] = Math.exp(coeffs[i][0]);
13915
13926
  }
@@ -14547,7 +14558,7 @@ const TREND = {
14547
14558
  returns: ["NUMBER"],
14548
14559
  compute: function (knownDataY, knownDataX = [], newDataX = [], b = true) {
14549
14560
  assertNonEmptyMatrix(knownDataY, "known_data_y");
14550
- return predictLinearValues(tryCastAsNumberMatrix(knownDataY, "the first argument (known_data_y)"), tryCastAsNumberMatrix(knownDataX, "the second argument (known_data_x)"), tryCastAsNumberMatrix(newDataX, "the third argument (new_data_y)"), toBoolean(b));
14561
+ return predictLinearValues(tryCastAsNumberMatrix(knownDataY, "known_data_y"), tryCastAsNumberMatrix(knownDataX, "known_data_x"), tryCastAsNumberMatrix(newDataX, "new_data_y"), toBoolean(b));
14551
14562
  },
14552
14563
  };
14553
14564
  // -----------------------------------------------------------------------------
@@ -25663,12 +25674,13 @@ class DataValidationEditor extends Component {
25663
25674
  static template = "o-spreadsheet-DataValidationEditor";
25664
25675
  static components = { SelectionInput, SelectMenu };
25665
25676
  state = useState({ rule: this.defaultDataValidationRule });
25677
+ editingSheetId;
25666
25678
  setup() {
25679
+ this.editingSheetId = this.env.model.getters.getActiveSheetId();
25667
25680
  if (this.props.rule) {
25668
- const sheetId = this.env.model.getters.getActiveSheetId();
25669
25681
  this.state.rule = {
25670
25682
  ...this.props.rule,
25671
- ranges: this.props.rule.ranges.map((range) => this.env.model.getters.getRangeString(range, sheetId)),
25683
+ ranges: this.props.rule.ranges.map((range) => this.env.model.getters.getRangeString(range, this.editingSheetId)),
25672
25684
  };
25673
25685
  this.state.rule.criterion.type = this.props.rule.criterion.type;
25674
25686
  }
@@ -25702,7 +25714,6 @@ class DataValidationEditor extends Component {
25702
25714
  const locale = this.env.model.getters.getLocale();
25703
25715
  const criterion = rule.criterion;
25704
25716
  const criterionEvaluator = dataValidationEvaluatorRegistry.get(criterion.type);
25705
- const sheetId = this.env.model.getters.getActiveSheetId();
25706
25717
  const values = criterion.values
25707
25718
  .slice(0, criterionEvaluator.numberOfValues(criterion))
25708
25719
  .map((value) => value?.trim())
@@ -25710,8 +25721,8 @@ class DataValidationEditor extends Component {
25710
25721
  .map((value) => canonicalizeContent(value, locale));
25711
25722
  rule.criterion = { ...criterion, values };
25712
25723
  return {
25713
- sheetId,
25714
- ranges: this.state.rule.ranges.map((xc) => this.env.model.getters.getRangeDataFromXc(sheetId, xc)),
25724
+ sheetId: this.editingSheetId,
25725
+ ranges: this.state.rule.ranges.map((xc) => this.env.model.getters.getRangeDataFromXc(this.editingSheetId, xc)),
25715
25726
  rule,
25716
25727
  };
25717
25728
  }
@@ -58463,6 +58474,6 @@ const constants = {
58463
58474
  export { AbstractChart, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, __info__, addFunction, astToFormula, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, tokenize };
58464
58475
 
58465
58476
 
58466
- __info__.version = "17.0.75";
58467
- __info__.date = "2025-10-07T10:00:00.345Z";
58468
- __info__.hash = "c8f1120";
58477
+ __info__.version = "17.0.76";
58478
+ __info__.date = "2025-10-16T06:36:18.137Z";
58479
+ __info__.hash = "5c3234b";
@@ -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.75
6
- * @date 2025-10-07T10:00:00.345Z
7
- * @hash c8f1120
5
+ * @version 17.0.76
6
+ * @date 2025-10-16T06:36:18.137Z
7
+ * @hash 5c3234b
8
8
  */
9
9
 
10
10
  (function (exports, owl) {
@@ -2283,7 +2283,17 @@
2283
2283
  data.forEach((row) => {
2284
2284
  row.forEach((cell) => {
2285
2285
  if (typeof cell !== "number") {
2286
- throw new Error(_t("Function [[FUNCTION_NAME]] expects number values for %s, but got a %s.", typeof cell, argName));
2286
+ let message = "";
2287
+ if (typeof cell === "object") {
2288
+ message = _t("Function [[FUNCTION_NAME]] expects number values for %s, but got an empty value.", argName);
2289
+ }
2290
+ else if (typeof cell === "string") {
2291
+ message = _t("Function [[FUNCTION_NAME]] expects number values for %s, but got a string.", argName);
2292
+ }
2293
+ else if (typeof cell === "boolean") {
2294
+ message = _t("Function [[FUNCTION_NAME]] expects number values for %s, but got a boolean.", argName);
2295
+ }
2296
+ throw new Error(message);
2287
2297
  }
2288
2298
  });
2289
2299
  });
@@ -9248,6 +9258,7 @@
9248
9258
  parser: luxonFormat,
9249
9259
  displayFormats,
9250
9260
  unit: timeUnit ?? false,
9261
+ tooltipFormat: luxonFormat,
9251
9262
  };
9252
9263
  }
9253
9264
  /**
@@ -13824,7 +13835,7 @@
13824
13835
  returns: ["NUMBER"],
13825
13836
  compute: function (knownDataY, knownDataX = [], newDataX = [], b = true) {
13826
13837
  assertNonEmptyMatrix(knownDataY, "known_data_y");
13827
- return expM(predictLinearValues(logM(tryCastAsNumberMatrix(knownDataY, "the first argument (known_data_y)")), tryCastAsNumberMatrix(knownDataX, "the second argument (known_data_x)"), tryCastAsNumberMatrix(newDataX, "the third argument (new_data_y)"), toBoolean(b)));
13838
+ return expM(predictLinearValues(logM(tryCastAsNumberMatrix(knownDataY, "known_data_y")), tryCastAsNumberMatrix(knownDataX, "known_data_x"), tryCastAsNumberMatrix(newDataX, "new_data_y"), toBoolean(b)));
13828
13839
  },
13829
13840
  };
13830
13841
  // -----------------------------------------------------------------------------
@@ -13892,7 +13903,7 @@
13892
13903
  returns: ["NUMBER"],
13893
13904
  compute: function (dataY, dataX = [], calculateB = true, verbose = false) {
13894
13905
  assertNonEmptyMatrix(dataY, "data_y");
13895
- return fullLinearRegression(tryCastAsNumberMatrix(dataX, "the first argument (data_y)"), tryCastAsNumberMatrix(dataY, "the second argument (data_x)"), toBoolean(calculateB), toBoolean(verbose));
13906
+ return fullLinearRegression(tryCastAsNumberMatrix(dataX, "data_x"), tryCastAsNumberMatrix(dataY, "data_y"), toBoolean(calculateB), toBoolean(verbose));
13896
13907
  },
13897
13908
  isExported: true,
13898
13909
  };
@@ -13910,7 +13921,7 @@
13910
13921
  returns: ["NUMBER"],
13911
13922
  compute: function (dataY, dataX = [], calculateB = true, verbose = false) {
13912
13923
  assertNonEmptyMatrix(dataY, "data_y");
13913
- const coeffs = fullLinearRegression(tryCastAsNumberMatrix(dataX, "the second argument (data_x)"), logM(tryCastAsNumberMatrix(dataY, "the first argument (data_y)")), toBoolean(calculateB), toBoolean(verbose));
13924
+ const coeffs = fullLinearRegression(tryCastAsNumberMatrix(dataX, "data_x"), logM(tryCastAsNumberMatrix(dataY, "data_y")), toBoolean(calculateB), toBoolean(verbose));
13914
13925
  for (let i = 0; i < coeffs.length; i++) {
13915
13926
  coeffs[i][0] = Math.exp(coeffs[i][0]);
13916
13927
  }
@@ -14548,7 +14559,7 @@
14548
14559
  returns: ["NUMBER"],
14549
14560
  compute: function (knownDataY, knownDataX = [], newDataX = [], b = true) {
14550
14561
  assertNonEmptyMatrix(knownDataY, "known_data_y");
14551
- return predictLinearValues(tryCastAsNumberMatrix(knownDataY, "the first argument (known_data_y)"), tryCastAsNumberMatrix(knownDataX, "the second argument (known_data_x)"), tryCastAsNumberMatrix(newDataX, "the third argument (new_data_y)"), toBoolean(b));
14562
+ return predictLinearValues(tryCastAsNumberMatrix(knownDataY, "known_data_y"), tryCastAsNumberMatrix(knownDataX, "known_data_x"), tryCastAsNumberMatrix(newDataX, "new_data_y"), toBoolean(b));
14552
14563
  },
14553
14564
  };
14554
14565
  // -----------------------------------------------------------------------------
@@ -25664,12 +25675,13 @@
25664
25675
  static template = "o-spreadsheet-DataValidationEditor";
25665
25676
  static components = { SelectionInput, SelectMenu };
25666
25677
  state = owl.useState({ rule: this.defaultDataValidationRule });
25678
+ editingSheetId;
25667
25679
  setup() {
25680
+ this.editingSheetId = this.env.model.getters.getActiveSheetId();
25668
25681
  if (this.props.rule) {
25669
- const sheetId = this.env.model.getters.getActiveSheetId();
25670
25682
  this.state.rule = {
25671
25683
  ...this.props.rule,
25672
- ranges: this.props.rule.ranges.map((range) => this.env.model.getters.getRangeString(range, sheetId)),
25684
+ ranges: this.props.rule.ranges.map((range) => this.env.model.getters.getRangeString(range, this.editingSheetId)),
25673
25685
  };
25674
25686
  this.state.rule.criterion.type = this.props.rule.criterion.type;
25675
25687
  }
@@ -25703,7 +25715,6 @@
25703
25715
  const locale = this.env.model.getters.getLocale();
25704
25716
  const criterion = rule.criterion;
25705
25717
  const criterionEvaluator = dataValidationEvaluatorRegistry.get(criterion.type);
25706
- const sheetId = this.env.model.getters.getActiveSheetId();
25707
25718
  const values = criterion.values
25708
25719
  .slice(0, criterionEvaluator.numberOfValues(criterion))
25709
25720
  .map((value) => value?.trim())
@@ -25711,8 +25722,8 @@
25711
25722
  .map((value) => canonicalizeContent(value, locale));
25712
25723
  rule.criterion = { ...criterion, values };
25713
25724
  return {
25714
- sheetId,
25715
- ranges: this.state.rule.ranges.map((xc) => this.env.model.getters.getRangeDataFromXc(sheetId, xc)),
25725
+ sheetId: this.editingSheetId,
25726
+ ranges: this.state.rule.ranges.map((xc) => this.env.model.getters.getRangeDataFromXc(this.editingSheetId, xc)),
25716
25727
  rule,
25717
25728
  };
25718
25729
  }
@@ -58499,9 +58510,9 @@
58499
58510
  exports.tokenize = tokenize;
58500
58511
 
58501
58512
 
58502
- __info__.version = "17.0.75";
58503
- __info__.date = "2025-10-07T10:00:00.345Z";
58504
- __info__.hash = "c8f1120";
58513
+ __info__.version = "17.0.76";
58514
+ __info__.date = "2025-10-16T06:36:18.137Z";
58515
+ __info__.hash = "5c3234b";
58505
58516
 
58506
58517
 
58507
58518
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);