@odoo/o-spreadsheet 18.3.47 → 18.3.49

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.47
6
- * @date 2026-05-12T12:18:07.038Z
7
- * @hash 8b8bc44
5
+ * @version 18.3.49
6
+ * @date 2026-05-27T05:57:05.809Z
7
+ * @hash fc34456
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -1352,6 +1352,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1352
1352
  else return ALTERNATING_COLORS_XL;
1353
1353
  }
1354
1354
  var ColorGenerator = class {
1355
+ preferredColors;
1355
1356
  currentColorIndex = 0;
1356
1357
  palette;
1357
1358
  constructor(paletteSize, preferredColors = []) {
@@ -2933,6 +2934,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2933
2934
  return sprintf(_translate(s), ...values);
2934
2935
  };
2935
2936
  var LazyTranslatedString = class extends String {
2937
+ values;
2936
2938
  constructor(str, values) {
2937
2939
  super(str);
2938
2940
  this.values = values;
@@ -3331,6 +3333,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
3331
3333
  };
3332
3334
  const errorTypes = new Set(Object.values(CellErrorType));
3333
3335
  var EvaluationError = class {
3336
+ message;
3337
+ value;
3334
3338
  constructor(message = _t("Error"), value = CellErrorType.GenericError) {
3335
3339
  this.message = message;
3336
3340
  this.value = value;
@@ -3363,6 +3367,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
3363
3367
  }
3364
3368
  };
3365
3369
  var SplillBlockedError = class extends EvaluationError {
3370
+ errorOriginPosition;
3366
3371
  constructor(message = _t("Spill range is not empty"), errorOriginPosition) {
3367
3372
  super(message, CellErrorType.SpilledBlocked);
3368
3373
  this.errorOriginPosition = errorOriginPosition;
@@ -5514,8 +5519,13 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5514
5519
  changeType: "NONE",
5515
5520
  range
5516
5521
  };
5522
+ const isUnboundedAtEnd = range.unboundedZone[end] === void 0;
5523
+ if (isUnboundedAtEnd && !range.unboundedZone.hasHeader) return {
5524
+ changeType: "RESIZE",
5525
+ range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
5526
+ };
5517
5527
  if (cmd.position === "after") {
5518
- if (range.zone[start] <= cmd.base && cmd.base < range.zone[end]) return {
5528
+ if (range.zone[start] <= cmd.base && (cmd.base < range.zone[end] || isUnboundedAtEnd)) return {
5519
5529
  changeType: "RESIZE",
5520
5530
  range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
5521
5531
  };
@@ -6159,6 +6169,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
6159
6169
  //#endregion
6160
6170
  //#region src/clipboard_handlers/abstract_clipboard_handler.ts
6161
6171
  var ClipboardHandler = class {
6172
+ getters;
6173
+ dispatch;
6162
6174
  constructor(getters, dispatch) {
6163
6175
  this.getters = getters;
6164
6176
  this.dispatch = dispatch;
@@ -8584,6 +8596,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
8584
8596
  }
8585
8597
  };
8586
8598
  var StoreFactory = class {
8599
+ get;
8587
8600
  pendingBuilds = /* @__PURE__ */ new Set();
8588
8601
  constructor(get) {
8589
8602
  this.get = get;
@@ -8628,6 +8641,7 @@ stores.inject(MyMetaStore, storeInstance);
8628
8641
  return MetaStore;
8629
8642
  }
8630
8643
  var DisposableStore = class {
8644
+ get;
8631
8645
  disposeCallbacks = [];
8632
8646
  constructor(get) {
8633
8647
  this.get = get;
@@ -16906,6 +16920,7 @@ stores.inject(MyMetaStore, storeInstance);
16906
16920
  //#endregion
16907
16921
  //#region src/formulas/code_builder.ts
16908
16922
  var FunctionCodeBuilder = class {
16923
+ scope;
16909
16924
  code = "";
16910
16925
  constructor(scope = new Scope()) {
16911
16926
  this.scope = scope;
@@ -16921,6 +16936,8 @@ stores.inject(MyMetaStore, storeInstance);
16921
16936
  }
16922
16937
  };
16923
16938
  var FunctionCodeImpl = class {
16939
+ scope;
16940
+ returnExpression;
16924
16941
  code;
16925
16942
  constructor(scope, code, returnExpression) {
16926
16943
  this.scope = scope;
@@ -18781,6 +18798,7 @@ stores.inject(MyMetaStore, storeInstance);
18781
18798
  }, runtime).computeDesign();
18782
18799
  }
18783
18800
  var ScorecardChartConfigBuilder = class {
18801
+ runtime;
18784
18802
  context;
18785
18803
  width;
18786
18804
  height;
@@ -19899,6 +19917,9 @@ stores.inject(MyMetaStore, storeInstance);
19899
19917
  function getFirstPivotFunction(tokens) {
19900
19918
  return getFunctionsFromTokens(tokens, PIVOT_FUNCTIONS)[0];
19901
19919
  }
19920
+ function getPivotFunctions(tokens) {
19921
+ return getFunctionsFromTokens(tokens, PIVOT_FUNCTIONS);
19922
+ }
19902
19923
  /**
19903
19924
  * Parse a spreadsheet formula and detect the number of PIVOT functions that are
19904
19925
  * present in the given formula.
@@ -25564,6 +25585,7 @@ stores.inject(MyMetaStore, storeInstance);
25564
25585
  * Represent a raw XML string
25565
25586
  */
25566
25587
  var XMLString = class {
25588
+ xmlString;
25567
25589
  /**
25568
25590
  * @param xmlString should be a well formed, properly escaped XML string
25569
25591
  */
@@ -26159,6 +26181,10 @@ stores.inject(MyMetaStore, storeInstance);
26159
26181
  ROUNDDOWN: [{
26160
26182
  type: "NUMBER",
26161
26183
  value: 0
26184
+ }],
26185
+ IFERROR: [{
26186
+ type: "NUMBER",
26187
+ value: 0
26162
26188
  }]
26163
26189
  };
26164
26190
  /**
@@ -31888,6 +31914,10 @@ stores.inject(MyMetaStore, storeInstance);
31888
31914
  }
31889
31915
  };
31890
31916
  var PopoverPositionContext = class {
31917
+ anchorRect;
31918
+ containerRect;
31919
+ propsMaxSize;
31920
+ spreadsheetOffset;
31891
31921
  constructor(anchorRect, containerRect, propsMaxSize, spreadsheetOffset) {
31892
31922
  this.anchorRect = anchorRect;
31893
31923
  this.containerRect = containerRect;
@@ -34674,7 +34704,7 @@ stores.inject(MyMetaStore, storeInstance);
34674
34704
  col,
34675
34705
  row
34676
34706
  };
34677
- if (pivotId === getters.getPivotIdFromPosition(position)) positions.push(position);
34707
+ if (getters.getPivotIdsFromPosition(position).includes(pivotId)) positions.push(position);
34678
34708
  }
34679
34709
  return positions;
34680
34710
  }
@@ -35337,6 +35367,7 @@ stores.inject(MyMetaStore, storeInstance);
35337
35367
  }
35338
35368
  };
35339
35369
  var ContainerWrapper = class {
35370
+ el;
35340
35371
  constructor(el) {
35341
35372
  this.el = el;
35342
35373
  }
@@ -35422,6 +35453,9 @@ stores.inject(MyMetaStore, storeInstance);
35422
35453
  * This plugin handles this internal state.
35423
35454
  */
35424
35455
  var SelectionInputStore = class extends SpreadsheetStore {
35456
+ initialRanges;
35457
+ inputHasSingleRange;
35458
+ colors;
35425
35459
  mutators = [
35426
35460
  "resetWithRanges",
35427
35461
  "focusById",
@@ -38725,6 +38759,7 @@ stores.inject(MyMetaStore, storeInstance);
38725
38759
  //#endregion
38726
38760
  //#region src/components/composer/standalone_composer/standalone_composer_store.ts
38727
38761
  var StandaloneComposerStore = class extends AbstractComposerStore {
38762
+ args;
38728
38763
  constructor(get, args) {
38729
38764
  super(get);
38730
38765
  this.args = args;
@@ -42497,6 +42532,8 @@ stores.inject(MyMetaStore, storeInstance);
42497
42532
  //#endregion
42498
42533
  //#region src/components/side_panel/pivot/pivot_measure_display_panel/pivot_measure_display_panel_store.ts
42499
42534
  var PivotMeasureDisplayPanelStore = class extends SpreadsheetStore {
42535
+ pivotId;
42536
+ initialMeasure;
42500
42537
  mutators = [
42501
42538
  "cancelMeasureDisplayEdition",
42502
42539
  "updateMeasureDisplayType",
@@ -43536,13 +43573,30 @@ stores.inject(MyMetaStore, storeInstance);
43536
43573
  } : fields[fieldName];
43537
43574
  const aggregator = measure.aggregator;
43538
43575
  return {
43576
+ /**
43577
+ * Get the id of the measure, as it is stored in the pivot formula
43578
+ */
43539
43579
  id: measure.id,
43580
+ /**
43581
+ * Display name of the measure
43582
+ * e.g. "__count" -> "Count", "amount_total" -> "Total Amount"
43583
+ */
43540
43584
  get displayName() {
43541
43585
  return measure.userDefinedName ?? field?.string ?? measure.fieldName;
43542
43586
  },
43543
43587
  userDefinedName: measure.userDefinedName,
43588
+ /**
43589
+ * Get the name of the field of the measure
43590
+ */
43544
43591
  fieldName,
43592
+ /**
43593
+ * Get the aggregator of the measure
43594
+ */
43545
43595
  aggregator,
43596
+ /**
43597
+ * Get the type of the measure field
43598
+ * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
43599
+ */
43546
43600
  type: fieldName === "__count" ? "integer" : field?.type ?? "integer",
43547
43601
  isValid: !!(field || measure.computedBy),
43548
43602
  isHidden: measure.isHidden,
@@ -43556,10 +43610,30 @@ stores.inject(MyMetaStore, storeInstance);
43556
43610
  const type = field?.type ?? "integer";
43557
43611
  const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
43558
43612
  return {
43613
+ /**
43614
+ * Get the display name of the dimension
43615
+ * e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
43616
+ */
43559
43617
  displayName: field?.string ?? dimension.fieldName,
43618
+ /**
43619
+ * Get the name of the dimension, as it is stored in the pivot formula
43620
+ * e.g. "stage_id", "create_date:month"
43621
+ */
43560
43622
  nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
43623
+ /**
43624
+ * Get the name of the field of the dimension
43625
+ * e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
43626
+ */
43561
43627
  fieldName: dimension.fieldName,
43628
+ /**
43629
+ * Get the aggregate operator of the dimension
43630
+ * e.g. "stage_id" -> undefined, "create_date:month" -> "month"
43631
+ */
43562
43632
  granularity,
43633
+ /**
43634
+ * Get the type of the field of the dimension
43635
+ * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
43636
+ */
43563
43637
  type,
43564
43638
  order: dimension.order,
43565
43639
  isValid: !!field
@@ -44598,6 +44672,7 @@ stores.inject(MyMetaStore, storeInstance);
44598
44672
  //#endregion
44599
44673
  //#region src/components/side_panel/pivot/pivot_side_panel/pivot_side_panel_store.ts
44600
44674
  var PivotSidePanelStore = class extends SpreadsheetStore {
44675
+ pivotId;
44601
44676
  mutators = [
44602
44677
  "reset",
44603
44678
  "deferUpdates",
@@ -52266,6 +52341,11 @@ stores.inject(MyMetaStore, storeInstance);
52266
52341
  }
52267
52342
  };
52268
52343
  var FormulaCellWithDependencies = class {
52344
+ id;
52345
+ format;
52346
+ style;
52347
+ sheetId;
52348
+ getRangeString;
52269
52349
  isFormula = true;
52270
52350
  compiledFormula;
52271
52351
  constructor(id, compiledFormula, format, style, dependencies, sheetId, getRangeString) {
@@ -52300,6 +52380,10 @@ stores.inject(MyMetaStore, storeInstance);
52300
52380
  }
52301
52381
  };
52302
52382
  var RangeReferenceToken = class {
52383
+ ranges;
52384
+ rangeIndex;
52385
+ sheetId;
52386
+ getRangeString;
52303
52387
  type = "REFERENCE";
52304
52388
  constructor(ranges, rangeIndex, sheetId, getRangeString) {
52305
52389
  this.ranges = ranges;
@@ -56111,6 +56195,8 @@ stores.inject(MyMetaStore, storeInstance);
56111
56195
  return new CompilationParametersBuilder(context, getters, computeCell).getParameters();
56112
56196
  }
56113
56197
  var CompilationParametersBuilder = class {
56198
+ getters;
56199
+ computeCell;
56114
56200
  evalContext;
56115
56201
  rangeCache = {};
56116
56202
  constructor(context, getters, computeCell) {
@@ -56564,6 +56650,7 @@ stores.inject(MyMetaStore, storeInstance);
56564
56650
  * It uses an R-Tree data structure to efficiently find dependent cells.
56565
56651
  */
56566
56652
  var FormulaDependencyGraph = class {
56653
+ createEmptyPositionSet;
56567
56654
  dependencies = new PositionMap();
56568
56655
  rTree;
56569
56656
  constructor(createEmptyPositionSet, data = []) {
@@ -56865,6 +56952,7 @@ stores.inject(MyMetaStore, storeInstance);
56865
56952
  const ERROR_CYCLE_CELL = Object.freeze(createEvaluatedCell(new CircularDependencyError()));
56866
56953
  const EMPTY_CELL = Object.freeze(createEvaluatedCell({ value: null }));
56867
56954
  var Evaluator = class {
56955
+ context;
56868
56956
  getters;
56869
56957
  compilationParams;
56870
56958
  evaluatedCells = new PositionMap();
@@ -58870,6 +58958,7 @@ stores.inject(MyMetaStore, storeInstance);
58870
58958
  "getPivot",
58871
58959
  "getFirstPivotFunction",
58872
58960
  "getPivotIdFromPosition",
58961
+ "getPivotIdsFromPosition",
58873
58962
  "getPivotCellFromPosition",
58874
58963
  "generateNewCalculatedMeasureName",
58875
58964
  "isPivotUnused",
@@ -58927,37 +59016,52 @@ stores.inject(MyMetaStore, storeInstance);
58927
59016
  }
58928
59017
  }
58929
59018
  /**
58930
- * Get the id of the pivot at the given position. Returns undefined if there
59019
+ * Get the id of the first pivot in the formula at the given position. Returns undefined if there
58931
59020
  * is no pivot at this position
58932
59021
  */
58933
59022
  getPivotIdFromPosition(position) {
59023
+ return this.getPivotIdsFromPosition(position)[0];
59024
+ }
59025
+ /**
59026
+ * Get all of the ids of the pivot present in the formula at the given position.
59027
+ */
59028
+ getPivotIdsFromPosition(position) {
58934
59029
  const cell = this.getters.getCorrespondingFormulaCell(position);
58935
- if (cell && cell.isFormula) {
58936
- const pivotFunction = this.getFirstPivotFunction(position.sheetId, cell.compiledFormula.tokens);
58937
- if (pivotFunction) {
58938
- const pivotId = pivotFunction.args[0]?.toString();
58939
- return pivotId && this.getters.getPivotId(pivotId);
58940
- }
58941
- }
59030
+ if (cell && cell.isFormula) return this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
59031
+ return [];
59032
+ }
59033
+ getPivotIdsFromFormula(sheetId, formula) {
59034
+ return this.getPivotFunctions(sheetId, formula.tokens).map((pivotFunction) => {
59035
+ const pivotId = pivotFunction.args[0]?.toString();
59036
+ return pivotId && this.getters.getPivotId(pivotId);
59037
+ }).filter(isDefined);
58942
59038
  }
58943
59039
  isSpillPivotFormula(position) {
58944
59040
  const cell = this.getters.getCorrespondingFormulaCell(position);
58945
59041
  if (cell && cell.isFormula) return this.getFirstPivotFunction(position.sheetId, cell.compiledFormula.tokens)?.functionName === "PIVOT";
58946
59042
  return false;
58947
59043
  }
58948
- getFirstPivotFunction(sheetId, tokens) {
58949
- const pivotFunction = getFirstPivotFunction(tokens);
58950
- if (!pivotFunction) return;
58951
- const { functionName, args } = pivotFunction;
58952
- return {
58953
- functionName,
58954
- args: args.map((argAst) => {
59044
+ getPivotFunctions(sheetId, tokens) {
59045
+ const pivotFunctions = getPivotFunctions(tokens);
59046
+ if (!pivotFunctions.length) return [];
59047
+ const evaluatedPivotFunctions = [];
59048
+ for (const pivotFunction of pivotFunctions) {
59049
+ const { functionName, args } = pivotFunction;
59050
+ const evaluatedArgs = args.map((argAst) => {
58955
59051
  if (argAst.type === "EMPTY") return;
58956
59052
  else if (argAst.type === "STRING" || argAst.type === "BOOLEAN" || argAst.type === "NUMBER") return argAst.value;
58957
59053
  const argsString = astToFormula(argAst);
58958
59054
  return this.getters.evaluateFormula(sheetId, argsString);
58959
- })
58960
- };
59055
+ });
59056
+ evaluatedPivotFunctions.push({
59057
+ functionName,
59058
+ args: evaluatedArgs
59059
+ });
59060
+ }
59061
+ return evaluatedPivotFunctions;
59062
+ }
59063
+ getFirstPivotFunction(sheetId, tokens) {
59064
+ return this.getPivotFunctions(sheetId, tokens)[0];
58961
59065
  }
58962
59066
  /**
58963
59067
  * Returns the domain args of a pivot formula from a position.
@@ -59051,8 +59155,8 @@ stores.inject(MyMetaStore, storeInstance);
59051
59155
  const unusedPivots = new Set(this.getters.getPivotIds());
59052
59156
  for (const sheetId of this.getters.getSheetIds()) for (const cellId in this.getters.getCells(sheetId)) {
59053
59157
  const position = this.getters.getCellPosition(cellId);
59054
- const pivotId = this.getPivotIdFromPosition(position);
59055
- if (pivotId) {
59158
+ const pivotIds = this.getPivotIdsFromPosition(position);
59159
+ for (const pivotId of pivotIds) {
59056
59160
  unusedPivots.delete(pivotId);
59057
59161
  if (!unusedPivots.size) {
59058
59162
  this.unusedPivots = [];
@@ -59060,6 +59164,21 @@ stores.inject(MyMetaStore, storeInstance);
59060
59164
  }
59061
59165
  }
59062
59166
  }
59167
+ for (const pivotId of this.getters.getPivotIds()) {
59168
+ const pivot = this.getters.getPivot(pivotId);
59169
+ for (const measure of pivot.definition.measures) if (measure.computedBy) {
59170
+ const { sheetId } = measure.computedBy;
59171
+ const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
59172
+ const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
59173
+ for (const relatedPivotId of relatedPivotIds) {
59174
+ unusedPivots.delete(relatedPivotId);
59175
+ if (!unusedPivots.size) {
59176
+ this.unusedPivots = [];
59177
+ return [];
59178
+ }
59179
+ }
59180
+ }
59181
+ }
59063
59182
  this.unusedPivots = [...unusedPivots];
59064
59183
  return this.unusedPivots;
59065
59184
  }
@@ -60313,6 +60432,8 @@ stores.inject(MyMetaStore, storeInstance);
60313
60432
  //#endregion
60314
60433
  //#region src/collaborative/revisions.ts
60315
60434
  var Revision = class {
60435
+ rootCommand;
60436
+ timestamp;
60316
60437
  id;
60317
60438
  clientId;
60318
60439
  _commands = [];
@@ -60349,6 +60470,9 @@ stores.inject(MyMetaStore, storeInstance);
60349
60470
  //#region src/collaborative/session.ts
60350
60471
  var ClientDisconnectedError = class extends Error {};
60351
60472
  var Session = class extends EventBus {
60473
+ revisions;
60474
+ transportService;
60475
+ serverRevisionId;
60352
60476
  /**
60353
60477
  * Positions of the others client.
60354
60478
  */
@@ -63922,6 +64046,9 @@ stores.inject(MyMetaStore, storeInstance);
63922
64046
  //#endregion
63923
64047
  //#region src/helpers/internal_viewport.ts
63924
64048
  var InternalViewport = class {
64049
+ getters;
64050
+ sheetId;
64051
+ boundaries;
63925
64052
  top;
63926
64053
  bottom;
63927
64054
  left;
@@ -67535,6 +67662,7 @@ stores.inject(MyMetaStore, storeInstance);
67535
67662
  return new WebClipboardWrapper(navigator.clipboard);
67536
67663
  }
67537
67664
  var WebClipboardWrapper = class {
67665
+ clipboard;
67538
67666
  constructor(clipboard) {
67539
67667
  this.clipboard = clipboard;
67540
67668
  }
@@ -68023,6 +68151,8 @@ stores.inject(MyMetaStore, storeInstance);
68023
68151
  * @param operations initial operations
68024
68152
  */
68025
68153
  var Branch = class Branch {
68154
+ buildTransformation;
68155
+ operations;
68026
68156
  constructor(buildTransformation, operations = []) {
68027
68157
  this.buildTransformation = buildTransformation;
68028
68158
  this.operations = operations;
@@ -68139,6 +68269,8 @@ stores.inject(MyMetaStore, storeInstance);
68139
68269
  * to revert it).
68140
68270
  */
68141
68271
  var Operation = class {
68272
+ id;
68273
+ data;
68142
68274
  constructor(id, data) {
68143
68275
  this.id = id;
68144
68276
  this.data = data;
@@ -68148,6 +68280,8 @@ stores.inject(MyMetaStore, storeInstance);
68148
68280
  }
68149
68281
  };
68150
68282
  var LazyOperation = class LazyOperation {
68283
+ id;
68284
+ lazyData;
68151
68285
  constructor(id, lazyData) {
68152
68286
  this.id = id;
68153
68287
  this.lazyData = lazyData;
@@ -68173,6 +68307,7 @@ stores.inject(MyMetaStore, storeInstance);
68173
68307
  * ```
68174
68308
  */
68175
68309
  var OperationSequence = class OperationSequence {
68310
+ operations;
68176
68311
  constructor(operations) {
68177
68312
  this.operations = operations;
68178
68313
  }
@@ -68248,6 +68383,7 @@ stores.inject(MyMetaStore, storeInstance);
68248
68383
  *
68249
68384
  */
68250
68385
  var Tree = class {
68386
+ buildTransformation;
68251
68387
  branches;
68252
68388
  branchingOperationIds = /* @__PURE__ */ new Map();
68253
68389
  constructor(buildTransformation, initialBranch) {
@@ -68830,6 +68966,7 @@ stores.inject(MyMetaStore, storeInstance);
68830
68966
  * with the new selected anchor
68831
68967
  */
68832
68968
  var SelectionStreamProcessorImpl = class {
68969
+ getters;
68833
68970
  stream;
68834
68971
  /**
68835
68972
  * "Active" anchor used as a reference to compute new anchors
@@ -72132,8 +72269,8 @@ exports.stores = stores;
72132
72269
  exports.tokenColors = tokenColors;
72133
72270
  exports.tokenize = tokenize;
72134
72271
 
72135
- __info__.version = "18.3.47";
72136
- __info__.date = "2026-05-12T12:18:07.038Z";
72137
- __info__.hash = "8b8bc44";
72272
+ __info__.version = "18.3.49";
72273
+ __info__.date = "2026-05-27T05:57:05.809Z";
72274
+ __info__.hash = "fc34456";
72138
72275
 
72139
72276
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);