@odoo/o-spreadsheet 19.0.45 → 19.0.46

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 19.0.45
6
- * @date 2026-07-30T06:52:45.317Z
7
- * @hash eb4c9d3
5
+ * @version 19.0.46
6
+ * @date 2026-08-10T12:30:50.771Z
7
+ * @hash b721d1f
8
8
  */
9
9
  /* Originates from src/components/top_bar/top_bar.scss */
10
10
  @media (max-width: 1200px) {
@@ -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 19.0.45
6
- * @date 2026-07-30T06:52:43.792Z
7
- * @hash eb4c9d3
5
+ * @version 19.0.46
6
+ * @date 2026-08-10T12:30:49.160Z
7
+ * @hash b721d1f
8
8
  */
9
9
 
10
10
  import { App, Component, blockDom, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, xml } from "@odoo/owl";
@@ -3108,19 +3108,58 @@ function applyVectorization(formula, args, acceptToVectorize = void 0) {
3108
3108
  }
3109
3109
  }
3110
3110
  if (countVectorizedCol === 1 && countVectorizedRow === 1) return formula(...args);
3111
- const getArgOffset = (i, j) => args.map((arg, index) => {
3112
- switch (vectorArgsType?.[index]) {
3113
- case "matrix": return arg[i][j];
3114
- case "horizontal": return arg[i][0];
3115
- case "vertical": return arg[0][j];
3116
- case void 0: return arg;
3111
+ const argsBuffer = new Array(args.length);
3112
+ const argGetters = [];
3113
+ const vectorizedIndices = [];
3114
+ for (let k = 0; k < args.length; k++) {
3115
+ const arg = args[k];
3116
+ switch (vectorArgsType?.[k]) {
3117
+ case "matrix":
3118
+ argGetters.push((i, j) => arg[i][j]);
3119
+ vectorizedIndices.push(k);
3120
+ break;
3121
+ case "horizontal":
3122
+ argGetters.push((i) => arg[i][0]);
3123
+ vectorizedIndices.push(k);
3124
+ break;
3125
+ case "vertical":
3126
+ argGetters.push((_i, j) => arg[0][j]);
3127
+ vectorizedIndices.push(k);
3128
+ break;
3129
+ case void 0:
3130
+ argsBuffer[k] = arg;
3131
+ break;
3117
3132
  }
3118
- });
3119
- return generateMatrix(countVectorizedCol, countVectorizedRow, (col, row) => {
3120
- if (col > vectorizedColLimit - 1 || row > vectorizedRowLimit - 1) return new NotAvailableError(_t("Array arguments to [[FUNCTION_NAME]] are of different size."));
3121
- const singleCellComputeResult = formula(...getArgOffset(col, row));
3122
- return isMatrix(singleCellComputeResult) ? singleCellComputeResult[0][0] : singleCellComputeResult;
3123
- });
3133
+ }
3134
+ const nbVectorized = vectorizedIndices.length;
3135
+ let callFormula;
3136
+ switch (argsBuffer.length) {
3137
+ case 1:
3138
+ callFormula = () => formula(argsBuffer[0]);
3139
+ break;
3140
+ case 2:
3141
+ callFormula = () => formula(argsBuffer[0], argsBuffer[1]);
3142
+ break;
3143
+ case 3:
3144
+ callFormula = () => formula(argsBuffer[0], argsBuffer[1], argsBuffer[2]);
3145
+ break;
3146
+ default: callFormula = () => formula(...argsBuffer);
3147
+ }
3148
+ const result = new Array(countVectorizedCol);
3149
+ for (let col = 0; col < countVectorizedCol; col++) {
3150
+ const column = new Array(countVectorizedRow);
3151
+ result[col] = column;
3152
+ for (let row = 0; row < countVectorizedRow; row++) {
3153
+ if (col > vectorizedColLimit - 1 || row > vectorizedRowLimit - 1) {
3154
+ column[row] = new NotAvailableError(_t("Array arguments to [[FUNCTION_NAME]] are of different size."));
3155
+ continue;
3156
+ }
3157
+ for (let k = 0; k < nbVectorized; k++) argsBuffer[vectorizedIndices[k]] = argGetters[k](col, row);
3158
+ const singleCellComputeResult = callFormula();
3159
+ column[row] = isMatrix(singleCellComputeResult) ? singleCellComputeResult[0][0] : singleCellComputeResult;
3160
+ }
3161
+ }
3162
+ return result;
3124
3163
  }
3125
3164
  /**
3126
3165
  * This function allows to visit arguments and stop the visit if necessary.
@@ -18510,12 +18549,15 @@ for (const category of categories) {
18510
18549
  }
18511
18550
  }
18512
18551
  function createComputeFunction(descr) {
18552
+ let currentArgDefinitions = [];
18513
18553
  function vectorizedCompute(...args) {
18514
18554
  const acceptToVectorize = [];
18555
+ currentArgDefinitions = new Array(args.length);
18515
18556
  const getArgToFocus = argTargeting(descr, args.length);
18516
18557
  for (let i = 0; i < args.length; i++) {
18517
18558
  const argIndex = getArgToFocus(i) ?? -1;
18518
18559
  const argDefinition = descr.args[argIndex];
18560
+ currentArgDefinitions[i] = argDefinition;
18519
18561
  const arg = args[i];
18520
18562
  if (!isMatrix(arg) && argDefinition.acceptMatrixOnly) throw new BadExpressionError(_t("Function %s expects the parameter '%s' to be reference to a cell or range.", descr.name, (i + 1).toString()));
18521
18563
  acceptToVectorize.push(!argDefinition.acceptMatrix);
@@ -18530,8 +18572,7 @@ function createComputeFunction(descr) {
18530
18572
  function errorHandlingCompute(...args) {
18531
18573
  for (let i = 0; i < args.length; i++) {
18532
18574
  const arg = args[i];
18533
- const getArgToFocus = argTargeting(descr, args.length);
18534
- if (!descr.args[getArgToFocus(i) || i].acceptErrors && !isMatrix(arg) && isEvaluationError(arg?.value)) return arg;
18575
+ if (!currentArgDefinitions[i].acceptErrors && !isMatrix(arg) && isEvaluationError(arg?.value)) return arg;
18535
18576
  }
18536
18577
  try {
18537
18578
  return computeFunctionToObject.apply(this, args);
@@ -28234,7 +28275,7 @@ var FigureComponent = class extends Component {
28234
28275
  case "ArrowLeft":
28235
28276
  case "ArrowRight":
28236
28277
  case "ArrowUp":
28237
- const { col, row, offset } = this.postionInBoundary(this.props.figureUI, ev.key);
28278
+ const { col, row, offset } = this.postionInBoundary(this.env.model.getters.getActiveSheetId(), this.props.figureUI, ev.key);
28238
28279
  this.env.model.dispatch("UPDATE_FIGURE", {
28239
28280
  sheetId: this.env.model.getters.getActiveSheetId(),
28240
28281
  figureId: this.props.figureUI.id,
@@ -28258,34 +28299,52 @@ var FigureComponent = class extends Component {
28258
28299
  break;
28259
28300
  }
28260
28301
  }
28261
- postionInBoundary(position, key) {
28262
- const sheetId = this.env.model.getters.getActiveSheetId();
28263
- let { col, row, offset } = position;
28302
+ postionInBoundary(sheetId, figure, key) {
28303
+ let { col, row, offset } = figure;
28264
28304
  offset = { ...offset };
28305
+ const maxAnchor = this.env.model.getters.getMaxAnchorOffset(sheetId, figure.height, figure.width);
28265
28306
  switch (key) {
28266
28307
  case "ArrowUp":
28267
28308
  if (offset.y === 0) {
28268
28309
  row--;
28310
+ while (row > 0 && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row--;
28269
28311
  offset.y = this.env.model.getters.getRowSize(sheetId, row) - 1;
28270
28312
  } else offset.y--;
28271
28313
  break;
28272
28314
  case "ArrowLeft":
28273
28315
  if (offset.x === 0) {
28274
28316
  col--;
28317
+ while (col > 0 && this.env.model.getters.isColHiddenByUser(sheetId, col)) col--;
28275
28318
  offset.x = this.env.model.getters.getColSize(sheetId, col) - 1;
28276
28319
  } else offset.x--;
28277
28320
  break;
28278
28321
  case "ArrowDown":
28279
28322
  if (offset.y === this.env.model.getters.getRowSize(sheetId, row)) {
28280
28323
  row++;
28324
+ while (row <= maxAnchor.row && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row++;
28281
28325
  offset.y = 0;
28282
28326
  } else offset.y++;
28283
28327
  break;
28284
28328
  case "ArrowRight": if (offset.x === this.env.model.getters.getColSize(sheetId, row)) {
28285
28329
  col++;
28330
+ while (col <= maxAnchor.col && this.env.model.getters.isColHiddenByUser(sheetId, col)) col++;
28286
28331
  offset.x = 0;
28287
28332
  } else offset.x++;
28288
28333
  }
28334
+ if (col < 0) {
28335
+ col = 0;
28336
+ offset.x = 0;
28337
+ } else if (col > maxAnchor.col || col === maxAnchor.col && offset.x > maxAnchor.offset.x) {
28338
+ col = maxAnchor.col;
28339
+ offset.x = maxAnchor.offset.x;
28340
+ }
28341
+ if (row < 0) {
28342
+ row = 0;
28343
+ offset.y = 0;
28344
+ } else if (row > maxAnchor.row || row === maxAnchor.row && offset.y > maxAnchor.offset.y) {
28345
+ row = maxAnchor.row;
28346
+ offset.y = maxAnchor.offset.y;
28347
+ }
28289
28348
  return {
28290
28349
  col,
28291
28350
  row,
@@ -71277,6 +71336,10 @@ function inverseCreateFigure(cmd) {
71277
71336
  }
71278
71337
  function inverseCreateChart(cmd) {
71279
71338
  return [{
71339
+ type: "DELETE_CHART",
71340
+ chartId: cmd.chartId,
71341
+ sheetId: cmd.sheetId
71342
+ }, {
71280
71343
  type: "DELETE_FIGURE",
71281
71344
  figureId: cmd.figureId,
71282
71345
  sheetId: cmd.sheetId
@@ -79376,6 +79439,6 @@ const chartHelpers = {
79376
79439
  //#endregion
79377
79440
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CorePlugin, CoreViewPlugin, DispatchResult, EvaluationError, LocalTransportService, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, chartHelpers, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
79378
79441
 
79379
- __info__.version = "19.0.45";
79380
- __info__.date = "2026-07-30T06:52:43.792Z";
79381
- __info__.hash = "eb4c9d3";
79442
+ __info__.version = "19.0.46";
79443
+ __info__.date = "2026-08-10T12:30:49.160Z";
79444
+ __info__.hash = "b721d1f";
@@ -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 19.0.45
6
- * @date 2026-07-30T06:52:43.792Z
7
- * @hash eb4c9d3
5
+ * @version 19.0.46
6
+ * @date 2026-08-10T12:30:49.160Z
7
+ * @hash b721d1f
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -3110,19 +3110,58 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
3110
3110
  }
3111
3111
  }
3112
3112
  if (countVectorizedCol === 1 && countVectorizedRow === 1) return formula(...args);
3113
- const getArgOffset = (i, j) => args.map((arg, index) => {
3114
- switch (vectorArgsType?.[index]) {
3115
- case "matrix": return arg[i][j];
3116
- case "horizontal": return arg[i][0];
3117
- case "vertical": return arg[0][j];
3118
- case void 0: return arg;
3113
+ const argsBuffer = new Array(args.length);
3114
+ const argGetters = [];
3115
+ const vectorizedIndices = [];
3116
+ for (let k = 0; k < args.length; k++) {
3117
+ const arg = args[k];
3118
+ switch (vectorArgsType?.[k]) {
3119
+ case "matrix":
3120
+ argGetters.push((i, j) => arg[i][j]);
3121
+ vectorizedIndices.push(k);
3122
+ break;
3123
+ case "horizontal":
3124
+ argGetters.push((i) => arg[i][0]);
3125
+ vectorizedIndices.push(k);
3126
+ break;
3127
+ case "vertical":
3128
+ argGetters.push((_i, j) => arg[0][j]);
3129
+ vectorizedIndices.push(k);
3130
+ break;
3131
+ case void 0:
3132
+ argsBuffer[k] = arg;
3133
+ break;
3119
3134
  }
3120
- });
3121
- return generateMatrix(countVectorizedCol, countVectorizedRow, (col, row) => {
3122
- if (col > vectorizedColLimit - 1 || row > vectorizedRowLimit - 1) return new NotAvailableError(_t("Array arguments to [[FUNCTION_NAME]] are of different size."));
3123
- const singleCellComputeResult = formula(...getArgOffset(col, row));
3124
- return isMatrix(singleCellComputeResult) ? singleCellComputeResult[0][0] : singleCellComputeResult;
3125
- });
3135
+ }
3136
+ const nbVectorized = vectorizedIndices.length;
3137
+ let callFormula;
3138
+ switch (argsBuffer.length) {
3139
+ case 1:
3140
+ callFormula = () => formula(argsBuffer[0]);
3141
+ break;
3142
+ case 2:
3143
+ callFormula = () => formula(argsBuffer[0], argsBuffer[1]);
3144
+ break;
3145
+ case 3:
3146
+ callFormula = () => formula(argsBuffer[0], argsBuffer[1], argsBuffer[2]);
3147
+ break;
3148
+ default: callFormula = () => formula(...argsBuffer);
3149
+ }
3150
+ const result = new Array(countVectorizedCol);
3151
+ for (let col = 0; col < countVectorizedCol; col++) {
3152
+ const column = new Array(countVectorizedRow);
3153
+ result[col] = column;
3154
+ for (let row = 0; row < countVectorizedRow; row++) {
3155
+ if (col > vectorizedColLimit - 1 || row > vectorizedRowLimit - 1) {
3156
+ column[row] = new NotAvailableError(_t("Array arguments to [[FUNCTION_NAME]] are of different size."));
3157
+ continue;
3158
+ }
3159
+ for (let k = 0; k < nbVectorized; k++) argsBuffer[vectorizedIndices[k]] = argGetters[k](col, row);
3160
+ const singleCellComputeResult = callFormula();
3161
+ column[row] = isMatrix(singleCellComputeResult) ? singleCellComputeResult[0][0] : singleCellComputeResult;
3162
+ }
3163
+ }
3164
+ return result;
3126
3165
  }
3127
3166
  /**
3128
3167
  * This function allows to visit arguments and stop the visit if necessary.
@@ -18512,12 +18551,15 @@ stores.inject(MyMetaStore, storeInstance);
18512
18551
  }
18513
18552
  }
18514
18553
  function createComputeFunction(descr) {
18554
+ let currentArgDefinitions = [];
18515
18555
  function vectorizedCompute(...args) {
18516
18556
  const acceptToVectorize = [];
18557
+ currentArgDefinitions = new Array(args.length);
18517
18558
  const getArgToFocus = argTargeting(descr, args.length);
18518
18559
  for (let i = 0; i < args.length; i++) {
18519
18560
  const argIndex = getArgToFocus(i) ?? -1;
18520
18561
  const argDefinition = descr.args[argIndex];
18562
+ currentArgDefinitions[i] = argDefinition;
18521
18563
  const arg = args[i];
18522
18564
  if (!isMatrix(arg) && argDefinition.acceptMatrixOnly) throw new BadExpressionError(_t("Function %s expects the parameter '%s' to be reference to a cell or range.", descr.name, (i + 1).toString()));
18523
18565
  acceptToVectorize.push(!argDefinition.acceptMatrix);
@@ -18532,8 +18574,7 @@ stores.inject(MyMetaStore, storeInstance);
18532
18574
  function errorHandlingCompute(...args) {
18533
18575
  for (let i = 0; i < args.length; i++) {
18534
18576
  const arg = args[i];
18535
- const getArgToFocus = argTargeting(descr, args.length);
18536
- if (!descr.args[getArgToFocus(i) || i].acceptErrors && !isMatrix(arg) && isEvaluationError(arg?.value)) return arg;
18577
+ if (!currentArgDefinitions[i].acceptErrors && !isMatrix(arg) && isEvaluationError(arg?.value)) return arg;
18537
18578
  }
18538
18579
  try {
18539
18580
  return computeFunctionToObject.apply(this, args);
@@ -28236,7 +28277,7 @@ stores.inject(MyMetaStore, storeInstance);
28236
28277
  case "ArrowLeft":
28237
28278
  case "ArrowRight":
28238
28279
  case "ArrowUp":
28239
- const { col, row, offset } = this.postionInBoundary(this.props.figureUI, ev.key);
28280
+ const { col, row, offset } = this.postionInBoundary(this.env.model.getters.getActiveSheetId(), this.props.figureUI, ev.key);
28240
28281
  this.env.model.dispatch("UPDATE_FIGURE", {
28241
28282
  sheetId: this.env.model.getters.getActiveSheetId(),
28242
28283
  figureId: this.props.figureUI.id,
@@ -28260,34 +28301,52 @@ stores.inject(MyMetaStore, storeInstance);
28260
28301
  break;
28261
28302
  }
28262
28303
  }
28263
- postionInBoundary(position, key) {
28264
- const sheetId = this.env.model.getters.getActiveSheetId();
28265
- let { col, row, offset } = position;
28304
+ postionInBoundary(sheetId, figure, key) {
28305
+ let { col, row, offset } = figure;
28266
28306
  offset = { ...offset };
28307
+ const maxAnchor = this.env.model.getters.getMaxAnchorOffset(sheetId, figure.height, figure.width);
28267
28308
  switch (key) {
28268
28309
  case "ArrowUp":
28269
28310
  if (offset.y === 0) {
28270
28311
  row--;
28312
+ while (row > 0 && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row--;
28271
28313
  offset.y = this.env.model.getters.getRowSize(sheetId, row) - 1;
28272
28314
  } else offset.y--;
28273
28315
  break;
28274
28316
  case "ArrowLeft":
28275
28317
  if (offset.x === 0) {
28276
28318
  col--;
28319
+ while (col > 0 && this.env.model.getters.isColHiddenByUser(sheetId, col)) col--;
28277
28320
  offset.x = this.env.model.getters.getColSize(sheetId, col) - 1;
28278
28321
  } else offset.x--;
28279
28322
  break;
28280
28323
  case "ArrowDown":
28281
28324
  if (offset.y === this.env.model.getters.getRowSize(sheetId, row)) {
28282
28325
  row++;
28326
+ while (row <= maxAnchor.row && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row++;
28283
28327
  offset.y = 0;
28284
28328
  } else offset.y++;
28285
28329
  break;
28286
28330
  case "ArrowRight": if (offset.x === this.env.model.getters.getColSize(sheetId, row)) {
28287
28331
  col++;
28332
+ while (col <= maxAnchor.col && this.env.model.getters.isColHiddenByUser(sheetId, col)) col++;
28288
28333
  offset.x = 0;
28289
28334
  } else offset.x++;
28290
28335
  }
28336
+ if (col < 0) {
28337
+ col = 0;
28338
+ offset.x = 0;
28339
+ } else if (col > maxAnchor.col || col === maxAnchor.col && offset.x > maxAnchor.offset.x) {
28340
+ col = maxAnchor.col;
28341
+ offset.x = maxAnchor.offset.x;
28342
+ }
28343
+ if (row < 0) {
28344
+ row = 0;
28345
+ offset.y = 0;
28346
+ } else if (row > maxAnchor.row || row === maxAnchor.row && offset.y > maxAnchor.offset.y) {
28347
+ row = maxAnchor.row;
28348
+ offset.y = maxAnchor.offset.y;
28349
+ }
28291
28350
  return {
28292
28351
  col,
28293
28352
  row,
@@ -71279,6 +71338,10 @@ stores.inject(MyMetaStore, storeInstance);
71279
71338
  }
71280
71339
  function inverseCreateChart(cmd) {
71281
71340
  return [{
71341
+ type: "DELETE_CHART",
71342
+ chartId: cmd.chartId,
71343
+ sheetId: cmd.sheetId
71344
+ }, {
71282
71345
  type: "DELETE_FIGURE",
71283
71346
  figureId: cmd.figureId,
71284
71347
  sheetId: cmd.sheetId
@@ -79429,8 +79492,8 @@ exports.stores = stores;
79429
79492
  exports.tokenColors = tokenColors;
79430
79493
  exports.tokenize = tokenize;
79431
79494
 
79432
- __info__.version = "19.0.45";
79433
- __info__.date = "2026-07-30T06:52:43.792Z";
79434
- __info__.hash = "eb4c9d3";
79495
+ __info__.version = "19.0.46";
79496
+ __info__.date = "2026-08-10T12:30:49.160Z";
79497
+ __info__.hash = "b721d1f";
79435
79498
 
79436
79499
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);