@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
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -1351,6 +1351,7 @@ function getAlternatingColorsPalette(quantity) {
1351
1351
  else return ALTERNATING_COLORS_XL;
1352
1352
  }
1353
1353
  var ColorGenerator = class {
1354
+ preferredColors;
1354
1355
  currentColorIndex = 0;
1355
1356
  palette;
1356
1357
  constructor(paletteSize, preferredColors = []) {
@@ -2932,6 +2933,7 @@ const _t = function(s, ...values) {
2932
2933
  return sprintf(_translate(s), ...values);
2933
2934
  };
2934
2935
  var LazyTranslatedString = class extends String {
2936
+ values;
2935
2937
  constructor(str, values) {
2936
2938
  super(str);
2937
2939
  this.values = values;
@@ -3330,6 +3332,8 @@ const CellErrorType = {
3330
3332
  };
3331
3333
  const errorTypes = new Set(Object.values(CellErrorType));
3332
3334
  var EvaluationError = class {
3335
+ message;
3336
+ value;
3333
3337
  constructor(message = _t("Error"), value = CellErrorType.GenericError) {
3334
3338
  this.message = message;
3335
3339
  this.value = value;
@@ -3362,6 +3366,7 @@ var UnknownFunctionError = class extends EvaluationError {
3362
3366
  }
3363
3367
  };
3364
3368
  var SplillBlockedError = class extends EvaluationError {
3369
+ errorOriginPosition;
3365
3370
  constructor(message = _t("Spill range is not empty"), errorOriginPosition) {
3366
3371
  super(message, CellErrorType.SpilledBlocked);
3367
3372
  this.errorOriginPosition = errorOriginPosition;
@@ -5513,8 +5518,13 @@ function getApplyRangeChangeAddColRow(cmd) {
5513
5518
  changeType: "NONE",
5514
5519
  range
5515
5520
  };
5521
+ const isUnboundedAtEnd = range.unboundedZone[end] === void 0;
5522
+ if (isUnboundedAtEnd && !range.unboundedZone.hasHeader) return {
5523
+ changeType: "RESIZE",
5524
+ range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
5525
+ };
5516
5526
  if (cmd.position === "after") {
5517
- if (range.zone[start] <= cmd.base && cmd.base < range.zone[end]) return {
5527
+ if (range.zone[start] <= cmd.base && (cmd.base < range.zone[end] || isUnboundedAtEnd)) return {
5518
5528
  changeType: "RESIZE",
5519
5529
  range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
5520
5530
  };
@@ -6158,6 +6168,8 @@ const selectPastedZone = (selection, sourceZones, pastedZones) => {
6158
6168
  //#endregion
6159
6169
  //#region src/clipboard_handlers/abstract_clipboard_handler.ts
6160
6170
  var ClipboardHandler = class {
6171
+ getters;
6172
+ dispatch;
6161
6173
  constructor(getters, dispatch) {
6162
6174
  this.getters = getters;
6163
6175
  this.dispatch = dispatch;
@@ -8583,6 +8595,7 @@ var DependencyContainer = class extends EventBus {
8583
8595
  }
8584
8596
  };
8585
8597
  var StoreFactory = class {
8598
+ get;
8586
8599
  pendingBuilds = /* @__PURE__ */ new Set();
8587
8600
  constructor(get) {
8588
8601
  this.get = get;
@@ -8627,6 +8640,7 @@ stores.inject(MyMetaStore, storeInstance);
8627
8640
  return MetaStore;
8628
8641
  }
8629
8642
  var DisposableStore = class {
8643
+ get;
8630
8644
  disposeCallbacks = [];
8631
8645
  constructor(get) {
8632
8646
  this.get = get;
@@ -16905,6 +16919,7 @@ function hasStringMessage(obj) {
16905
16919
  //#endregion
16906
16920
  //#region src/formulas/code_builder.ts
16907
16921
  var FunctionCodeBuilder = class {
16922
+ scope;
16908
16923
  code = "";
16909
16924
  constructor(scope = new Scope()) {
16910
16925
  this.scope = scope;
@@ -16920,6 +16935,8 @@ var FunctionCodeBuilder = class {
16920
16935
  }
16921
16936
  };
16922
16937
  var FunctionCodeImpl = class {
16938
+ scope;
16939
+ returnExpression;
16923
16940
  code;
16924
16941
  constructor(scope, code, returnExpression) {
16925
16942
  this.scope = scope;
@@ -18780,6 +18797,7 @@ function getScorecardConfiguration({ width, height }, runtime) {
18780
18797
  }, runtime).computeDesign();
18781
18798
  }
18782
18799
  var ScorecardChartConfigBuilder = class {
18800
+ runtime;
18783
18801
  context;
18784
18802
  width;
18785
18803
  height;
@@ -19898,6 +19916,9 @@ function extractFormulaIdFromToken(tokenAtCursor) {
19898
19916
  function getFirstPivotFunction(tokens) {
19899
19917
  return getFunctionsFromTokens(tokens, PIVOT_FUNCTIONS)[0];
19900
19918
  }
19919
+ function getPivotFunctions(tokens) {
19920
+ return getFunctionsFromTokens(tokens, PIVOT_FUNCTIONS);
19921
+ }
19901
19922
  /**
19902
19923
  * Parse a spreadsheet formula and detect the number of PIVOT functions that are
19903
19924
  * present in the given formula.
@@ -25563,6 +25584,7 @@ function getMaxFigureSize(getters, figureSize) {
25563
25584
  * Represent a raw XML string
25564
25585
  */
25565
25586
  var XMLString = class {
25587
+ xmlString;
25566
25588
  /**
25567
25589
  * @param xmlString should be a well formed, properly escaped XML string
25568
25590
  */
@@ -26158,6 +26180,10 @@ const FORCE_DEFAULT_ARGS_FUNCTIONS = {
26158
26180
  ROUNDDOWN: [{
26159
26181
  type: "NUMBER",
26160
26182
  value: 0
26183
+ }],
26184
+ IFERROR: [{
26185
+ type: "NUMBER",
26186
+ value: 0
26161
26187
  }]
26162
26188
  };
26163
26189
  /**
@@ -31887,6 +31913,10 @@ var Popover = class extends _odoo_owl.Component {
31887
31913
  }
31888
31914
  };
31889
31915
  var PopoverPositionContext = class {
31916
+ anchorRect;
31917
+ containerRect;
31918
+ propsMaxSize;
31919
+ spreadsheetOffset;
31890
31920
  constructor(anchorRect, containerRect, propsMaxSize, spreadsheetOffset) {
31891
31921
  this.anchorRect = anchorRect;
31892
31922
  this.containerRect = containerRect;
@@ -34673,7 +34703,7 @@ function getVisiblePivotCellPositions(getters, pivotId) {
34673
34703
  col,
34674
34704
  row
34675
34705
  };
34676
- if (pivotId === getters.getPivotIdFromPosition(position)) positions.push(position);
34706
+ if (getters.getPivotIdsFromPosition(position).includes(pivotId)) positions.push(position);
34677
34707
  }
34678
34708
  return positions;
34679
34709
  }
@@ -35336,6 +35366,7 @@ var DOMDndHelper = class {
35336
35366
  }
35337
35367
  };
35338
35368
  var ContainerWrapper = class {
35369
+ el;
35339
35370
  constructor(el) {
35340
35371
  this.el = el;
35341
35372
  }
@@ -35421,6 +35452,9 @@ var FocusStore = class {
35421
35452
  * This plugin handles this internal state.
35422
35453
  */
35423
35454
  var SelectionInputStore = class extends SpreadsheetStore {
35455
+ initialRanges;
35456
+ inputHasSingleRange;
35457
+ colors;
35424
35458
  mutators = [
35425
35459
  "resetWithRanges",
35426
35460
  "focusById",
@@ -38724,6 +38758,7 @@ var Composer = class extends _odoo_owl.Component {
38724
38758
  //#endregion
38725
38759
  //#region src/components/composer/standalone_composer/standalone_composer_store.ts
38726
38760
  var StandaloneComposerStore = class extends AbstractComposerStore {
38761
+ args;
38727
38762
  constructor(get, args) {
38728
38763
  super(get);
38729
38764
  this.args = args;
@@ -42496,6 +42531,8 @@ var MoreFormatsPanel = class extends _odoo_owl.Component {
42496
42531
  //#endregion
42497
42532
  //#region src/components/side_panel/pivot/pivot_measure_display_panel/pivot_measure_display_panel_store.ts
42498
42533
  var PivotMeasureDisplayPanelStore = class extends SpreadsheetStore {
42534
+ pivotId;
42535
+ initialMeasure;
42499
42536
  mutators = [
42500
42537
  "cancelMeasureDisplayEdition",
42501
42538
  "updateMeasureDisplayType",
@@ -43535,13 +43572,30 @@ function createMeasure(fields, measure) {
43535
43572
  } : fields[fieldName];
43536
43573
  const aggregator = measure.aggregator;
43537
43574
  return {
43575
+ /**
43576
+ * Get the id of the measure, as it is stored in the pivot formula
43577
+ */
43538
43578
  id: measure.id,
43579
+ /**
43580
+ * Display name of the measure
43581
+ * e.g. "__count" -> "Count", "amount_total" -> "Total Amount"
43582
+ */
43539
43583
  get displayName() {
43540
43584
  return measure.userDefinedName ?? field?.string ?? measure.fieldName;
43541
43585
  },
43542
43586
  userDefinedName: measure.userDefinedName,
43587
+ /**
43588
+ * Get the name of the field of the measure
43589
+ */
43543
43590
  fieldName,
43591
+ /**
43592
+ * Get the aggregator of the measure
43593
+ */
43544
43594
  aggregator,
43595
+ /**
43596
+ * Get the type of the measure field
43597
+ * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
43598
+ */
43545
43599
  type: fieldName === "__count" ? "integer" : field?.type ?? "integer",
43546
43600
  isValid: !!(field || measure.computedBy),
43547
43601
  isHidden: measure.isHidden,
@@ -43555,10 +43609,30 @@ function createPivotDimension(fields, dimension) {
43555
43609
  const type = field?.type ?? "integer";
43556
43610
  const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
43557
43611
  return {
43612
+ /**
43613
+ * Get the display name of the dimension
43614
+ * e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
43615
+ */
43558
43616
  displayName: field?.string ?? dimension.fieldName,
43617
+ /**
43618
+ * Get the name of the dimension, as it is stored in the pivot formula
43619
+ * e.g. "stage_id", "create_date:month"
43620
+ */
43559
43621
  nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
43622
+ /**
43623
+ * Get the name of the field of the dimension
43624
+ * e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
43625
+ */
43560
43626
  fieldName: dimension.fieldName,
43627
+ /**
43628
+ * Get the aggregate operator of the dimension
43629
+ * e.g. "stage_id" -> undefined, "create_date:month" -> "month"
43630
+ */
43561
43631
  granularity,
43632
+ /**
43633
+ * Get the type of the field of the dimension
43634
+ * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
43635
+ */
43562
43636
  type,
43563
43637
  order: dimension.order,
43564
43638
  isValid: !!field
@@ -44597,6 +44671,7 @@ function adaptPivotRange(range, applyChange) {
44597
44671
  //#endregion
44598
44672
  //#region src/components/side_panel/pivot/pivot_side_panel/pivot_side_panel_store.ts
44599
44673
  var PivotSidePanelStore = class extends SpreadsheetStore {
44674
+ pivotId;
44600
44675
  mutators = [
44601
44676
  "reset",
44602
44677
  "deferUpdates",
@@ -52265,6 +52340,11 @@ var CellPlugin = class extends CorePlugin {
52265
52340
  }
52266
52341
  };
52267
52342
  var FormulaCellWithDependencies = class {
52343
+ id;
52344
+ format;
52345
+ style;
52346
+ sheetId;
52347
+ getRangeString;
52268
52348
  isFormula = true;
52269
52349
  compiledFormula;
52270
52350
  constructor(id, compiledFormula, format, style, dependencies, sheetId, getRangeString) {
@@ -52299,6 +52379,10 @@ var FormulaCellWithDependencies = class {
52299
52379
  }
52300
52380
  };
52301
52381
  var RangeReferenceToken = class {
52382
+ ranges;
52383
+ rangeIndex;
52384
+ sheetId;
52385
+ getRangeString;
52302
52386
  type = "REFERENCE";
52303
52387
  constructor(ranges, rangeIndex, sheetId, getRangeString) {
52304
52388
  this.ranges = ranges;
@@ -56110,6 +56194,8 @@ function buildCompilationParameters(context, getters, computeCell) {
56110
56194
  return new CompilationParametersBuilder(context, getters, computeCell).getParameters();
56111
56195
  }
56112
56196
  var CompilationParametersBuilder = class {
56197
+ getters;
56198
+ computeCell;
56113
56199
  evalContext;
56114
56200
  rangeCache = {};
56115
56201
  constructor(context, getters, computeCell) {
@@ -56747,6 +56833,7 @@ var ZoneRBush = class extends import_rbush.default {
56747
56833
  * It uses an R-Tree data structure to efficiently find dependent cells.
56748
56834
  */
56749
56835
  var FormulaDependencyGraph = class {
56836
+ createEmptyPositionSet;
56750
56837
  dependencies = new PositionMap();
56751
56838
  rTree;
56752
56839
  constructor(createEmptyPositionSet, data = []) {
@@ -57048,6 +57135,7 @@ const MAX_ITERATION = 30;
57048
57135
  const ERROR_CYCLE_CELL = Object.freeze(createEvaluatedCell(new CircularDependencyError()));
57049
57136
  const EMPTY_CELL = Object.freeze(createEvaluatedCell({ value: null }));
57050
57137
  var Evaluator = class {
57138
+ context;
57051
57139
  getters;
57052
57140
  compilationParams;
57053
57141
  evaluatedCells = new PositionMap();
@@ -59053,6 +59141,7 @@ var PivotUIPlugin = class extends CoreViewPlugin {
59053
59141
  "getPivot",
59054
59142
  "getFirstPivotFunction",
59055
59143
  "getPivotIdFromPosition",
59144
+ "getPivotIdsFromPosition",
59056
59145
  "getPivotCellFromPosition",
59057
59146
  "generateNewCalculatedMeasureName",
59058
59147
  "isPivotUnused",
@@ -59110,37 +59199,52 @@ var PivotUIPlugin = class extends CoreViewPlugin {
59110
59199
  }
59111
59200
  }
59112
59201
  /**
59113
- * Get the id of the pivot at the given position. Returns undefined if there
59202
+ * Get the id of the first pivot in the formula at the given position. Returns undefined if there
59114
59203
  * is no pivot at this position
59115
59204
  */
59116
59205
  getPivotIdFromPosition(position) {
59206
+ return this.getPivotIdsFromPosition(position)[0];
59207
+ }
59208
+ /**
59209
+ * Get all of the ids of the pivot present in the formula at the given position.
59210
+ */
59211
+ getPivotIdsFromPosition(position) {
59117
59212
  const cell = this.getters.getCorrespondingFormulaCell(position);
59118
- if (cell && cell.isFormula) {
59119
- const pivotFunction = this.getFirstPivotFunction(position.sheetId, cell.compiledFormula.tokens);
59120
- if (pivotFunction) {
59121
- const pivotId = pivotFunction.args[0]?.toString();
59122
- return pivotId && this.getters.getPivotId(pivotId);
59123
- }
59124
- }
59213
+ if (cell && cell.isFormula) return this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
59214
+ return [];
59215
+ }
59216
+ getPivotIdsFromFormula(sheetId, formula) {
59217
+ return this.getPivotFunctions(sheetId, formula.tokens).map((pivotFunction) => {
59218
+ const pivotId = pivotFunction.args[0]?.toString();
59219
+ return pivotId && this.getters.getPivotId(pivotId);
59220
+ }).filter(isDefined);
59125
59221
  }
59126
59222
  isSpillPivotFormula(position) {
59127
59223
  const cell = this.getters.getCorrespondingFormulaCell(position);
59128
59224
  if (cell && cell.isFormula) return this.getFirstPivotFunction(position.sheetId, cell.compiledFormula.tokens)?.functionName === "PIVOT";
59129
59225
  return false;
59130
59226
  }
59131
- getFirstPivotFunction(sheetId, tokens) {
59132
- const pivotFunction = getFirstPivotFunction(tokens);
59133
- if (!pivotFunction) return;
59134
- const { functionName, args } = pivotFunction;
59135
- return {
59136
- functionName,
59137
- args: args.map((argAst) => {
59227
+ getPivotFunctions(sheetId, tokens) {
59228
+ const pivotFunctions = getPivotFunctions(tokens);
59229
+ if (!pivotFunctions.length) return [];
59230
+ const evaluatedPivotFunctions = [];
59231
+ for (const pivotFunction of pivotFunctions) {
59232
+ const { functionName, args } = pivotFunction;
59233
+ const evaluatedArgs = args.map((argAst) => {
59138
59234
  if (argAst.type === "EMPTY") return;
59139
59235
  else if (argAst.type === "STRING" || argAst.type === "BOOLEAN" || argAst.type === "NUMBER") return argAst.value;
59140
59236
  const argsString = astToFormula(argAst);
59141
59237
  return this.getters.evaluateFormula(sheetId, argsString);
59142
- })
59143
- };
59238
+ });
59239
+ evaluatedPivotFunctions.push({
59240
+ functionName,
59241
+ args: evaluatedArgs
59242
+ });
59243
+ }
59244
+ return evaluatedPivotFunctions;
59245
+ }
59246
+ getFirstPivotFunction(sheetId, tokens) {
59247
+ return this.getPivotFunctions(sheetId, tokens)[0];
59144
59248
  }
59145
59249
  /**
59146
59250
  * Returns the domain args of a pivot formula from a position.
@@ -59234,8 +59338,8 @@ var PivotUIPlugin = class extends CoreViewPlugin {
59234
59338
  const unusedPivots = new Set(this.getters.getPivotIds());
59235
59339
  for (const sheetId of this.getters.getSheetIds()) for (const cellId in this.getters.getCells(sheetId)) {
59236
59340
  const position = this.getters.getCellPosition(cellId);
59237
- const pivotId = this.getPivotIdFromPosition(position);
59238
- if (pivotId) {
59341
+ const pivotIds = this.getPivotIdsFromPosition(position);
59342
+ for (const pivotId of pivotIds) {
59239
59343
  unusedPivots.delete(pivotId);
59240
59344
  if (!unusedPivots.size) {
59241
59345
  this.unusedPivots = [];
@@ -59243,6 +59347,21 @@ var PivotUIPlugin = class extends CoreViewPlugin {
59243
59347
  }
59244
59348
  }
59245
59349
  }
59350
+ for (const pivotId of this.getters.getPivotIds()) {
59351
+ const pivot = this.getters.getPivot(pivotId);
59352
+ for (const measure of pivot.definition.measures) if (measure.computedBy) {
59353
+ const { sheetId } = measure.computedBy;
59354
+ const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
59355
+ const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
59356
+ for (const relatedPivotId of relatedPivotIds) {
59357
+ unusedPivots.delete(relatedPivotId);
59358
+ if (!unusedPivots.size) {
59359
+ this.unusedPivots = [];
59360
+ return [];
59361
+ }
59362
+ }
59363
+ }
59364
+ }
59246
59365
  this.unusedPivots = [...unusedPivots];
59247
59366
  return this.unusedPivots;
59248
59367
  }
@@ -60496,6 +60615,8 @@ function transformPositionWithMerge(toTransform, executed) {
60496
60615
  //#endregion
60497
60616
  //#region src/collaborative/revisions.ts
60498
60617
  var Revision = class {
60618
+ rootCommand;
60619
+ timestamp;
60499
60620
  id;
60500
60621
  clientId;
60501
60622
  _commands = [];
@@ -60532,6 +60653,9 @@ var Revision = class {
60532
60653
  //#region src/collaborative/session.ts
60533
60654
  var ClientDisconnectedError = class extends Error {};
60534
60655
  var Session = class extends EventBus {
60656
+ revisions;
60657
+ transportService;
60658
+ serverRevisionId;
60535
60659
  /**
60536
60660
  * Positions of the others client.
60537
60661
  */
@@ -64105,6 +64229,9 @@ var GridSelectionPlugin = class extends UIPlugin {
64105
64229
  //#endregion
64106
64230
  //#region src/helpers/internal_viewport.ts
64107
64231
  var InternalViewport = class {
64232
+ getters;
64233
+ sheetId;
64234
+ boundaries;
64108
64235
  top;
64109
64236
  bottom;
64110
64237
  left;
@@ -67718,6 +67845,7 @@ function instantiateClipboard() {
67718
67845
  return new WebClipboardWrapper(navigator.clipboard);
67719
67846
  }
67720
67847
  var WebClipboardWrapper = class {
67848
+ clipboard;
67721
67849
  constructor(clipboard) {
67722
67850
  this.clipboard = clipboard;
67723
67851
  }
@@ -68206,6 +68334,8 @@ function inverseCommand(cmd) {
68206
68334
  * @param operations initial operations
68207
68335
  */
68208
68336
  var Branch = class Branch {
68337
+ buildTransformation;
68338
+ operations;
68209
68339
  constructor(buildTransformation, operations = []) {
68210
68340
  this.buildTransformation = buildTransformation;
68211
68341
  this.operations = operations;
@@ -68322,6 +68452,8 @@ var Branch = class Branch {
68322
68452
  * to revert it).
68323
68453
  */
68324
68454
  var Operation = class {
68455
+ id;
68456
+ data;
68325
68457
  constructor(id, data) {
68326
68458
  this.id = id;
68327
68459
  this.data = data;
@@ -68331,6 +68463,8 @@ var Operation = class {
68331
68463
  }
68332
68464
  };
68333
68465
  var LazyOperation = class LazyOperation {
68466
+ id;
68467
+ lazyData;
68334
68468
  constructor(id, lazyData) {
68335
68469
  this.id = id;
68336
68470
  this.lazyData = lazyData;
@@ -68356,6 +68490,7 @@ var LazyOperation = class LazyOperation {
68356
68490
  * ```
68357
68491
  */
68358
68492
  var OperationSequence = class OperationSequence {
68493
+ operations;
68359
68494
  constructor(operations) {
68360
68495
  this.operations = operations;
68361
68496
  }
@@ -68431,6 +68566,7 @@ var OperationSequence = class OperationSequence {
68431
68566
  *
68432
68567
  */
68433
68568
  var Tree = class {
68569
+ buildTransformation;
68434
68570
  branches;
68435
68571
  branchingOperationIds = /* @__PURE__ */ new Map();
68436
68572
  constructor(buildTransformation, initialBranch) {
@@ -69013,6 +69149,7 @@ var EventStream = class {
69013
69149
  * with the new selected anchor
69014
69150
  */
69015
69151
  var SelectionStreamProcessorImpl = class {
69152
+ getters;
69016
69153
  stream;
69017
69154
  /**
69018
69155
  * "Active" anchor used as a reference to compute new anchors
@@ -72315,6 +72452,6 @@ exports.stores = stores;
72315
72452
  exports.tokenColors = tokenColors;
72316
72453
  exports.tokenize = tokenize;
72317
72454
 
72318
- __info__.version = "18.3.47";
72319
- __info__.date = "2026-05-12T12:18:07.038Z";
72320
- __info__.hash = "8b8bc44";
72455
+ __info__.version = "18.3.49";
72456
+ __info__.date = "2026-05-27T05:57:05.809Z";
72457
+ __info__.hash = "fc34456";
@@ -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:08.869Z
7
- * @hash 8b8bc44
5
+ * @version 18.3.49
6
+ * @date 2026-05-27T05:57:07.478Z
7
+ * @hash fc34456
8
8
  */
9
9
  /* Originates from src/components/top_bar/top_bar.scss */
10
10
  @media (max-width: 900px) {