@odoo/o-spreadsheet 18.3.20 → 18.3.22

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.3.20
6
- * @date 2025-09-11T08:45:37.934Z
7
- * @hash ef829f4
5
+ * @version 18.3.22
6
+ * @date 2025-09-23T12:28:52.149Z
7
+ * @hash fb227d7
8
8
  */
9
9
 
10
10
  'use strict';
@@ -864,8 +864,19 @@ function memoize(func) {
864
864
  },
865
865
  }[funcName];
866
866
  }
867
+ /**
868
+ * Removes the specified indexes from the array.
869
+ * Sparse (empty) elements are transformed to undefined (unless their index is explicitly removed).
870
+ */
867
871
  function removeIndexesFromArray(array, indexes) {
868
- return array.filter((_, index) => !indexes.includes(index));
872
+ const toRemove = new Set(indexes);
873
+ const newArray = [];
874
+ for (let i = 0; i < array.length; i++) {
875
+ if (!toRemove.has(i)) {
876
+ newArray.push(array[i]);
877
+ }
878
+ }
879
+ return newArray;
869
880
  }
870
881
  function insertItemsAtIndex(array, items, index) {
871
882
  const newArray = [...array];
@@ -14810,8 +14821,9 @@ function interactiveSort(env, sheetId, anchor, zone, sortDirection, sortOptions)
14810
14821
  }
14811
14822
 
14812
14823
  function sortMatrix(matrix, locale, ...criteria) {
14813
- for (const [i, value] of criteria.entries()) {
14814
- assert(() => value !== undefined, _t("Value for parameter %d is missing, while the function [[FUNCTION_NAME]] expect a number or a range.", i + 1));
14824
+ for (let i = 0; i < criteria.length; i++) {
14825
+ const param = i % 2 === 0 ? "sort_column" : "is_ascending";
14826
+ assert(() => criteria[i] !== undefined, _t("Value for parameter %s is missing in [[FUNCTION_NAME]].", param));
14815
14827
  }
14816
14828
  const sortingOrders = [];
14817
14829
  const sortColumns = [];
@@ -48879,12 +48891,13 @@ class PivotLayoutConfigurator extends owl.Component {
48879
48891
  addCalculatedMeasure() {
48880
48892
  const { measures } = this.props.definition;
48881
48893
  const measureName = this.env.model.getters.generateNewCalculatedMeasureName(measures);
48894
+ const aggregator = "sum";
48882
48895
  this.props.onDimensionsUpdated({
48883
48896
  measures: measures.concat([
48884
48897
  {
48885
- id: this.getMeasureId(measureName),
48898
+ id: this.getMeasureId(measureName, aggregator),
48886
48899
  fieldName: measureName,
48887
- aggregator: "sum",
48900
+ aggregator,
48888
48901
  computedBy: {
48889
48902
  sheetId: this.env.model.getters.getActiveSheetId(),
48890
48903
  formula: "=0",
@@ -66235,7 +66248,7 @@ function withPivotPresentationLayer (PivotClass) {
66235
66248
  return { value: 0 };
66236
66249
  }
66237
66250
  const { columns, rows } = super.definition;
66238
- if (columns.length + rows.length !== domain.length) {
66251
+ if (measure.aggregator && columns.length + rows.length !== domain.length) {
66239
66252
  const values = this.getValuesToAggregate(measure, domain);
66240
66253
  const aggregator = AGGREGATORS_FN[measure.aggregator];
66241
66254
  if (!aggregator) {
@@ -66254,11 +66267,17 @@ function withPivotPresentationLayer (PivotClass) {
66254
66267
  if (columns.find((col) => col.nameWithGranularity === symbolName)) {
66255
66268
  const { colDomain } = domainToColRowDomain(this, domain);
66256
66269
  const symbolIndex = colDomain.findIndex((node) => node.field === symbolName);
66270
+ if (symbolIndex === -1) {
66271
+ return new NotAvailableError();
66272
+ }
66257
66273
  return this.getPivotHeaderValueAndFormat(colDomain.slice(0, symbolIndex + 1));
66258
66274
  }
66259
66275
  if (rows.find((row) => row.nameWithGranularity === symbolName)) {
66260
66276
  const { rowDomain } = domainToColRowDomain(this, domain);
66261
66277
  const symbolIndex = rowDomain.findIndex((row) => row.field === symbolName);
66278
+ if (symbolIndex === -1) {
66279
+ return new NotAvailableError();
66280
+ }
66262
66281
  return this.getPivotHeaderValueAndFormat(rowDomain.slice(0, symbolIndex + 1));
66263
66282
  }
66264
66283
  return this.getPivotCellValueAndFormat(symbolName, domain);
@@ -69477,7 +69496,10 @@ class SortPlugin extends UIPlugin {
69477
69496
  return "Success" /* CommandResult.Success */;
69478
69497
  }
69479
69498
  checkArrayFormulaInSortZone({ sheetId, zone }) {
69480
- const arrayFormulaInZone = positions(zone).some(({ col, row }) => this.getters.getArrayFormulaSpreadingOn({ sheetId, col, row }));
69499
+ const arrayFormulaInZone = positions(zone).some(({ col, row }) => {
69500
+ const originPosition = this.getters.getArrayFormulaSpreadingOn({ sheetId, col, row });
69501
+ return originPosition && !deepEquals(originPosition, { sheetId, col, row });
69502
+ });
69481
69503
  return arrayFormulaInZone ? "SortZoneWithArrayFormulas" /* CommandResult.SortZoneWithArrayFormulas */ : "Success" /* CommandResult.Success */;
69482
69504
  }
69483
69505
  /**
@@ -72054,13 +72076,10 @@ class GridSelectionPlugin extends UIPlugin {
72054
72076
  const deltaCol = isBasedBefore && isCol ? thickness : 0;
72055
72077
  const deltaRow = isBasedBefore && !isCol ? thickness : 0;
72056
72078
  const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
72057
- const originalSize = Object.fromEntries(toRemove.map((element) => {
72058
- const size = isCol
72059
- ? this.getters.getColSize(cmd.sheetId, element)
72060
- : this.getters.getUserRowSize(cmd.sheetId, element);
72061
- const isDefaultCol = isCol && size === DEFAULT_CELL_WIDTH;
72062
- return [element, isDefaultCol ? undefined : size];
72063
- }));
72079
+ const originalSize = {};
72080
+ for (const element of toRemove) {
72081
+ originalSize[element] = this.getters.getHeaderSize(cmd.sheetId, cmd.dimension, element);
72082
+ }
72064
72083
  const target = [
72065
72084
  {
72066
72085
  left: isCol ? start + deltaCol : 0,
@@ -72096,11 +72115,11 @@ class GridSelectionPlugin extends UIPlugin {
72096
72115
  for (const element of toRemove) {
72097
72116
  const size = originalSize[element];
72098
72117
  const currentSize = this.getters.getHeaderSize(cmd.sheetId, cmd.dimension, currentIndex);
72099
- if (size && size != currentSize) {
72118
+ if (size != currentSize) {
72100
72119
  resizingGroups[size] ??= [];
72101
72120
  resizingGroups[size].push(currentIndex);
72102
- currentIndex += 1;
72103
72121
  }
72122
+ currentIndex += 1;
72104
72123
  }
72105
72124
  for (const size in resizingGroups) {
72106
72125
  this.dispatch("RESIZE_COLUMNS_ROWS", {
@@ -81015,6 +81034,6 @@ exports.tokenColors = tokenColors;
81015
81034
  exports.tokenize = tokenize;
81016
81035
 
81017
81036
 
81018
- __info__.version = "18.3.20";
81019
- __info__.date = "2025-09-11T08:45:37.934Z";
81020
- __info__.hash = "ef829f4";
81037
+ __info__.version = "18.3.22";
81038
+ __info__.date = "2025-09-23T12:28:52.149Z";
81039
+ __info__.hash = "fb227d7";
@@ -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.3.20
6
- * @date 2025-09-11T08:45:37.934Z
7
- * @hash ef829f4
5
+ * @version 18.3.22
6
+ * @date 2025-09-23T12:28:52.149Z
7
+ * @hash fb227d7
8
8
  */
9
9
 
10
10
  import { useEnv, useSubEnv, onWillUnmount, useComponent, status, Component, useRef, onMounted, useEffect, App, blockDom, useState, onPatched, onWillPatch, onWillUpdateProps, useExternalListener, onWillStart, xml, useChildSubEnv, markRaw, toRaw } from '@odoo/owl';
@@ -862,8 +862,19 @@ function memoize(func) {
862
862
  },
863
863
  }[funcName];
864
864
  }
865
+ /**
866
+ * Removes the specified indexes from the array.
867
+ * Sparse (empty) elements are transformed to undefined (unless their index is explicitly removed).
868
+ */
865
869
  function removeIndexesFromArray(array, indexes) {
866
- return array.filter((_, index) => !indexes.includes(index));
870
+ const toRemove = new Set(indexes);
871
+ const newArray = [];
872
+ for (let i = 0; i < array.length; i++) {
873
+ if (!toRemove.has(i)) {
874
+ newArray.push(array[i]);
875
+ }
876
+ }
877
+ return newArray;
867
878
  }
868
879
  function insertItemsAtIndex(array, items, index) {
869
880
  const newArray = [...array];
@@ -14808,8 +14819,9 @@ function interactiveSort(env, sheetId, anchor, zone, sortDirection, sortOptions)
14808
14819
  }
14809
14820
 
14810
14821
  function sortMatrix(matrix, locale, ...criteria) {
14811
- for (const [i, value] of criteria.entries()) {
14812
- assert(() => value !== undefined, _t("Value for parameter %d is missing, while the function [[FUNCTION_NAME]] expect a number or a range.", i + 1));
14822
+ for (let i = 0; i < criteria.length; i++) {
14823
+ const param = i % 2 === 0 ? "sort_column" : "is_ascending";
14824
+ assert(() => criteria[i] !== undefined, _t("Value for parameter %s is missing in [[FUNCTION_NAME]].", param));
14813
14825
  }
14814
14826
  const sortingOrders = [];
14815
14827
  const sortColumns = [];
@@ -48877,12 +48889,13 @@ class PivotLayoutConfigurator extends Component {
48877
48889
  addCalculatedMeasure() {
48878
48890
  const { measures } = this.props.definition;
48879
48891
  const measureName = this.env.model.getters.generateNewCalculatedMeasureName(measures);
48892
+ const aggregator = "sum";
48880
48893
  this.props.onDimensionsUpdated({
48881
48894
  measures: measures.concat([
48882
48895
  {
48883
- id: this.getMeasureId(measureName),
48896
+ id: this.getMeasureId(measureName, aggregator),
48884
48897
  fieldName: measureName,
48885
- aggregator: "sum",
48898
+ aggregator,
48886
48899
  computedBy: {
48887
48900
  sheetId: this.env.model.getters.getActiveSheetId(),
48888
48901
  formula: "=0",
@@ -66233,7 +66246,7 @@ function withPivotPresentationLayer (PivotClass) {
66233
66246
  return { value: 0 };
66234
66247
  }
66235
66248
  const { columns, rows } = super.definition;
66236
- if (columns.length + rows.length !== domain.length) {
66249
+ if (measure.aggregator && columns.length + rows.length !== domain.length) {
66237
66250
  const values = this.getValuesToAggregate(measure, domain);
66238
66251
  const aggregator = AGGREGATORS_FN[measure.aggregator];
66239
66252
  if (!aggregator) {
@@ -66252,11 +66265,17 @@ function withPivotPresentationLayer (PivotClass) {
66252
66265
  if (columns.find((col) => col.nameWithGranularity === symbolName)) {
66253
66266
  const { colDomain } = domainToColRowDomain(this, domain);
66254
66267
  const symbolIndex = colDomain.findIndex((node) => node.field === symbolName);
66268
+ if (symbolIndex === -1) {
66269
+ return new NotAvailableError();
66270
+ }
66255
66271
  return this.getPivotHeaderValueAndFormat(colDomain.slice(0, symbolIndex + 1));
66256
66272
  }
66257
66273
  if (rows.find((row) => row.nameWithGranularity === symbolName)) {
66258
66274
  const { rowDomain } = domainToColRowDomain(this, domain);
66259
66275
  const symbolIndex = rowDomain.findIndex((row) => row.field === symbolName);
66276
+ if (symbolIndex === -1) {
66277
+ return new NotAvailableError();
66278
+ }
66260
66279
  return this.getPivotHeaderValueAndFormat(rowDomain.slice(0, symbolIndex + 1));
66261
66280
  }
66262
66281
  return this.getPivotCellValueAndFormat(symbolName, domain);
@@ -69475,7 +69494,10 @@ class SortPlugin extends UIPlugin {
69475
69494
  return "Success" /* CommandResult.Success */;
69476
69495
  }
69477
69496
  checkArrayFormulaInSortZone({ sheetId, zone }) {
69478
- const arrayFormulaInZone = positions(zone).some(({ col, row }) => this.getters.getArrayFormulaSpreadingOn({ sheetId, col, row }));
69497
+ const arrayFormulaInZone = positions(zone).some(({ col, row }) => {
69498
+ const originPosition = this.getters.getArrayFormulaSpreadingOn({ sheetId, col, row });
69499
+ return originPosition && !deepEquals(originPosition, { sheetId, col, row });
69500
+ });
69479
69501
  return arrayFormulaInZone ? "SortZoneWithArrayFormulas" /* CommandResult.SortZoneWithArrayFormulas */ : "Success" /* CommandResult.Success */;
69480
69502
  }
69481
69503
  /**
@@ -72052,13 +72074,10 @@ class GridSelectionPlugin extends UIPlugin {
72052
72074
  const deltaCol = isBasedBefore && isCol ? thickness : 0;
72053
72075
  const deltaRow = isBasedBefore && !isCol ? thickness : 0;
72054
72076
  const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
72055
- const originalSize = Object.fromEntries(toRemove.map((element) => {
72056
- const size = isCol
72057
- ? this.getters.getColSize(cmd.sheetId, element)
72058
- : this.getters.getUserRowSize(cmd.sheetId, element);
72059
- const isDefaultCol = isCol && size === DEFAULT_CELL_WIDTH;
72060
- return [element, isDefaultCol ? undefined : size];
72061
- }));
72077
+ const originalSize = {};
72078
+ for (const element of toRemove) {
72079
+ originalSize[element] = this.getters.getHeaderSize(cmd.sheetId, cmd.dimension, element);
72080
+ }
72062
72081
  const target = [
72063
72082
  {
72064
72083
  left: isCol ? start + deltaCol : 0,
@@ -72094,11 +72113,11 @@ class GridSelectionPlugin extends UIPlugin {
72094
72113
  for (const element of toRemove) {
72095
72114
  const size = originalSize[element];
72096
72115
  const currentSize = this.getters.getHeaderSize(cmd.sheetId, cmd.dimension, currentIndex);
72097
- if (size && size != currentSize) {
72116
+ if (size != currentSize) {
72098
72117
  resizingGroups[size] ??= [];
72099
72118
  resizingGroups[size].push(currentIndex);
72100
- currentIndex += 1;
72101
72119
  }
72120
+ currentIndex += 1;
72102
72121
  }
72103
72122
  for (const size in resizingGroups) {
72104
72123
  this.dispatch("RESIZE_COLUMNS_ROWS", {
@@ -80967,6 +80986,6 @@ const chartHelpers = { ...CHART_HELPERS, ...CHART_RUNTIME_HELPERS };
80967
80986
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, CommandResult, CorePlugin, CoreViewPlugin, DispatchResult, EvaluationError, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, chartHelpers, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
80968
80987
 
80969
80988
 
80970
- __info__.version = "18.3.20";
80971
- __info__.date = "2025-09-11T08:45:37.934Z";
80972
- __info__.hash = "ef829f4";
80989
+ __info__.version = "18.3.22";
80990
+ __info__.date = "2025-09-23T12:28:52.149Z";
80991
+ __info__.hash = "fb227d7";
@@ -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.3.20
6
- * @date 2025-09-11T08:45:37.934Z
7
- * @hash ef829f4
5
+ * @version 18.3.22
6
+ * @date 2025-09-23T12:28:52.149Z
7
+ * @hash fb227d7
8
8
  */
9
9
 
10
10
  (function (exports, owl) {
@@ -863,8 +863,19 @@
863
863
  },
864
864
  }[funcName];
865
865
  }
866
+ /**
867
+ * Removes the specified indexes from the array.
868
+ * Sparse (empty) elements are transformed to undefined (unless their index is explicitly removed).
869
+ */
866
870
  function removeIndexesFromArray(array, indexes) {
867
- return array.filter((_, index) => !indexes.includes(index));
871
+ const toRemove = new Set(indexes);
872
+ const newArray = [];
873
+ for (let i = 0; i < array.length; i++) {
874
+ if (!toRemove.has(i)) {
875
+ newArray.push(array[i]);
876
+ }
877
+ }
878
+ return newArray;
868
879
  }
869
880
  function insertItemsAtIndex(array, items, index) {
870
881
  const newArray = [...array];
@@ -14809,8 +14820,9 @@ stores.inject(MyMetaStore, storeInstance);
14809
14820
  }
14810
14821
 
14811
14822
  function sortMatrix(matrix, locale, ...criteria) {
14812
- for (const [i, value] of criteria.entries()) {
14813
- assert(() => value !== undefined, _t("Value for parameter %d is missing, while the function [[FUNCTION_NAME]] expect a number or a range.", i + 1));
14823
+ for (let i = 0; i < criteria.length; i++) {
14824
+ const param = i % 2 === 0 ? "sort_column" : "is_ascending";
14825
+ assert(() => criteria[i] !== undefined, _t("Value for parameter %s is missing in [[FUNCTION_NAME]].", param));
14814
14826
  }
14815
14827
  const sortingOrders = [];
14816
14828
  const sortColumns = [];
@@ -48878,12 +48890,13 @@ stores.inject(MyMetaStore, storeInstance);
48878
48890
  addCalculatedMeasure() {
48879
48891
  const { measures } = this.props.definition;
48880
48892
  const measureName = this.env.model.getters.generateNewCalculatedMeasureName(measures);
48893
+ const aggregator = "sum";
48881
48894
  this.props.onDimensionsUpdated({
48882
48895
  measures: measures.concat([
48883
48896
  {
48884
- id: this.getMeasureId(measureName),
48897
+ id: this.getMeasureId(measureName, aggregator),
48885
48898
  fieldName: measureName,
48886
- aggregator: "sum",
48899
+ aggregator,
48887
48900
  computedBy: {
48888
48901
  sheetId: this.env.model.getters.getActiveSheetId(),
48889
48902
  formula: "=0",
@@ -66234,7 +66247,7 @@ stores.inject(MyMetaStore, storeInstance);
66234
66247
  return { value: 0 };
66235
66248
  }
66236
66249
  const { columns, rows } = super.definition;
66237
- if (columns.length + rows.length !== domain.length) {
66250
+ if (measure.aggregator && columns.length + rows.length !== domain.length) {
66238
66251
  const values = this.getValuesToAggregate(measure, domain);
66239
66252
  const aggregator = AGGREGATORS_FN[measure.aggregator];
66240
66253
  if (!aggregator) {
@@ -66253,11 +66266,17 @@ stores.inject(MyMetaStore, storeInstance);
66253
66266
  if (columns.find((col) => col.nameWithGranularity === symbolName)) {
66254
66267
  const { colDomain } = domainToColRowDomain(this, domain);
66255
66268
  const symbolIndex = colDomain.findIndex((node) => node.field === symbolName);
66269
+ if (symbolIndex === -1) {
66270
+ return new NotAvailableError();
66271
+ }
66256
66272
  return this.getPivotHeaderValueAndFormat(colDomain.slice(0, symbolIndex + 1));
66257
66273
  }
66258
66274
  if (rows.find((row) => row.nameWithGranularity === symbolName)) {
66259
66275
  const { rowDomain } = domainToColRowDomain(this, domain);
66260
66276
  const symbolIndex = rowDomain.findIndex((row) => row.field === symbolName);
66277
+ if (symbolIndex === -1) {
66278
+ return new NotAvailableError();
66279
+ }
66261
66280
  return this.getPivotHeaderValueAndFormat(rowDomain.slice(0, symbolIndex + 1));
66262
66281
  }
66263
66282
  return this.getPivotCellValueAndFormat(symbolName, domain);
@@ -69476,7 +69495,10 @@ stores.inject(MyMetaStore, storeInstance);
69476
69495
  return "Success" /* CommandResult.Success */;
69477
69496
  }
69478
69497
  checkArrayFormulaInSortZone({ sheetId, zone }) {
69479
- const arrayFormulaInZone = positions(zone).some(({ col, row }) => this.getters.getArrayFormulaSpreadingOn({ sheetId, col, row }));
69498
+ const arrayFormulaInZone = positions(zone).some(({ col, row }) => {
69499
+ const originPosition = this.getters.getArrayFormulaSpreadingOn({ sheetId, col, row });
69500
+ return originPosition && !deepEquals(originPosition, { sheetId, col, row });
69501
+ });
69480
69502
  return arrayFormulaInZone ? "SortZoneWithArrayFormulas" /* CommandResult.SortZoneWithArrayFormulas */ : "Success" /* CommandResult.Success */;
69481
69503
  }
69482
69504
  /**
@@ -72053,13 +72075,10 @@ stores.inject(MyMetaStore, storeInstance);
72053
72075
  const deltaCol = isBasedBefore && isCol ? thickness : 0;
72054
72076
  const deltaRow = isBasedBefore && !isCol ? thickness : 0;
72055
72077
  const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
72056
- const originalSize = Object.fromEntries(toRemove.map((element) => {
72057
- const size = isCol
72058
- ? this.getters.getColSize(cmd.sheetId, element)
72059
- : this.getters.getUserRowSize(cmd.sheetId, element);
72060
- const isDefaultCol = isCol && size === DEFAULT_CELL_WIDTH;
72061
- return [element, isDefaultCol ? undefined : size];
72062
- }));
72078
+ const originalSize = {};
72079
+ for (const element of toRemove) {
72080
+ originalSize[element] = this.getters.getHeaderSize(cmd.sheetId, cmd.dimension, element);
72081
+ }
72063
72082
  const target = [
72064
72083
  {
72065
72084
  left: isCol ? start + deltaCol : 0,
@@ -72095,11 +72114,11 @@ stores.inject(MyMetaStore, storeInstance);
72095
72114
  for (const element of toRemove) {
72096
72115
  const size = originalSize[element];
72097
72116
  const currentSize = this.getters.getHeaderSize(cmd.sheetId, cmd.dimension, currentIndex);
72098
- if (size && size != currentSize) {
72117
+ if (size != currentSize) {
72099
72118
  resizingGroups[size] ??= [];
72100
72119
  resizingGroups[size].push(currentIndex);
72101
- currentIndex += 1;
72102
72120
  }
72121
+ currentIndex += 1;
72103
72122
  }
72104
72123
  for (const size in resizingGroups) {
72105
72124
  this.dispatch("RESIZE_COLUMNS_ROWS", {
@@ -81014,9 +81033,9 @@ stores.inject(MyMetaStore, storeInstance);
81014
81033
  exports.tokenize = tokenize;
81015
81034
 
81016
81035
 
81017
- __info__.version = "18.3.20";
81018
- __info__.date = "2025-09-11T08:45:37.934Z";
81019
- __info__.hash = "ef829f4";
81036
+ __info__.version = "18.3.22";
81037
+ __info__.date = "2025-09-23T12:28:52.149Z";
81038
+ __info__.hash = "fb227d7";
81020
81039
 
81021
81040
 
81022
81041
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);