@odoo/o-spreadsheet 19.1.30 → 19.1.31

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.1.30
6
- * @date 2026-07-30T06:53:53.625Z
7
- * @hash b4f7ab8
5
+ * @version 19.1.31
6
+ * @date 2026-08-10T12:30:53.702Z
7
+ * @hash 8ac65ec
8
8
  */
9
9
  :root {
10
10
  --os-gray-100: light-dark(#f9fafb, #1b1d26);
@@ -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.1.30
6
- * @date 2026-07-30T06:53:51.978Z
7
- * @hash b4f7ab8
5
+ * @version 19.1.31
6
+ * @date 2026-08-10T12:30:52.454Z
7
+ * @hash 8ac65ec
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, whenReady, xml } from "@odoo/owl";
@@ -3915,19 +3915,58 @@ function applyVectorization(formula, args, acceptToVectorize = void 0) {
3915
3915
  }
3916
3916
  }
3917
3917
  if (countVectorizedCol === 1 && countVectorizedRow === 1) return formula(...args);
3918
- const getArgOffset = (i, j) => args.map((arg, index) => {
3919
- switch (vectorArgsType?.[index]) {
3920
- case "matrix": return arg[i][j];
3921
- case "horizontal": return arg[i][0];
3922
- case "vertical": return arg[0][j];
3923
- case void 0: return arg;
3918
+ const argsBuffer = new Array(args.length);
3919
+ const argGetters = [];
3920
+ const vectorizedIndices = [];
3921
+ for (let k = 0; k < args.length; k++) {
3922
+ const arg = args[k];
3923
+ switch (vectorArgsType?.[k]) {
3924
+ case "matrix":
3925
+ argGetters.push((i, j) => arg[i][j]);
3926
+ vectorizedIndices.push(k);
3927
+ break;
3928
+ case "horizontal":
3929
+ argGetters.push((i) => arg[i][0]);
3930
+ vectorizedIndices.push(k);
3931
+ break;
3932
+ case "vertical":
3933
+ argGetters.push((_i, j) => arg[0][j]);
3934
+ vectorizedIndices.push(k);
3935
+ break;
3936
+ case void 0:
3937
+ argsBuffer[k] = arg;
3938
+ break;
3924
3939
  }
3925
- });
3926
- return generateMatrix(countVectorizedCol, countVectorizedRow, (col, row) => {
3927
- if (col > vectorizedColLimit - 1 || row > vectorizedRowLimit - 1) return new NotAvailableError(_t("Array arguments to [[FUNCTION_NAME]] are of different size."));
3928
- const singleCellComputeResult = formula(...getArgOffset(col, row));
3929
- return isMatrix(singleCellComputeResult) ? singleCellComputeResult[0][0] : singleCellComputeResult;
3930
- });
3940
+ }
3941
+ const nbVectorized = vectorizedIndices.length;
3942
+ let callFormula;
3943
+ switch (argsBuffer.length) {
3944
+ case 1:
3945
+ callFormula = () => formula(argsBuffer[0]);
3946
+ break;
3947
+ case 2:
3948
+ callFormula = () => formula(argsBuffer[0], argsBuffer[1]);
3949
+ break;
3950
+ case 3:
3951
+ callFormula = () => formula(argsBuffer[0], argsBuffer[1], argsBuffer[2]);
3952
+ break;
3953
+ default: callFormula = () => formula(...argsBuffer);
3954
+ }
3955
+ const result = new Array(countVectorizedCol);
3956
+ for (let col = 0; col < countVectorizedCol; col++) {
3957
+ const column = new Array(countVectorizedRow);
3958
+ result[col] = column;
3959
+ for (let row = 0; row < countVectorizedRow; row++) {
3960
+ if (col > vectorizedColLimit - 1 || row > vectorizedRowLimit - 1) {
3961
+ column[row] = new NotAvailableError(_t("Array arguments to [[FUNCTION_NAME]] are of different size."));
3962
+ continue;
3963
+ }
3964
+ for (let k = 0; k < nbVectorized; k++) argsBuffer[vectorizedIndices[k]] = argGetters[k](col, row);
3965
+ const singleCellComputeResult = callFormula();
3966
+ column[row] = isMatrix(singleCellComputeResult) ? singleCellComputeResult[0][0] : singleCellComputeResult;
3967
+ }
3968
+ }
3969
+ return result;
3931
3970
  }
3932
3971
  /**
3933
3972
  * This function allows to visit arguments and stop the visit if necessary.
@@ -17264,7 +17303,7 @@ var FigureComponent = class extends Component {
17264
17303
  case "ArrowLeft":
17265
17304
  case "ArrowRight":
17266
17305
  case "ArrowUp":
17267
- const { col, row, offset } = this.postionInBoundary(this.props.figureUI, ev.key);
17306
+ const { col, row, offset } = this.postionInBoundary(this.env.model.getters.getActiveSheetId(), this.props.figureUI, ev.key);
17268
17307
  this.env.model.dispatch("UPDATE_FIGURE", {
17269
17308
  sheetId: this.env.model.getters.getActiveSheetId(),
17270
17309
  figureId: this.props.figureUI.id,
@@ -17288,34 +17327,52 @@ var FigureComponent = class extends Component {
17288
17327
  break;
17289
17328
  }
17290
17329
  }
17291
- postionInBoundary(position, key) {
17292
- const sheetId = this.env.model.getters.getActiveSheetId();
17293
- let { col, row, offset } = position;
17330
+ postionInBoundary(sheetId, figure, key) {
17331
+ let { col, row, offset } = figure;
17294
17332
  offset = { ...offset };
17333
+ const maxAnchor = this.env.model.getters.getMaxAnchorOffset(sheetId, figure.height, figure.width);
17295
17334
  switch (key) {
17296
17335
  case "ArrowUp":
17297
17336
  if (offset.y === 0) {
17298
17337
  row--;
17338
+ while (row > 0 && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row--;
17299
17339
  offset.y = this.env.model.getters.getRowSize(sheetId, row) - 1;
17300
17340
  } else offset.y--;
17301
17341
  break;
17302
17342
  case "ArrowLeft":
17303
17343
  if (offset.x === 0) {
17304
17344
  col--;
17345
+ while (col > 0 && this.env.model.getters.isColHiddenByUser(sheetId, col)) col--;
17305
17346
  offset.x = this.env.model.getters.getColSize(sheetId, col) - 1;
17306
17347
  } else offset.x--;
17307
17348
  break;
17308
17349
  case "ArrowDown":
17309
17350
  if (offset.y === this.env.model.getters.getRowSize(sheetId, row)) {
17310
17351
  row++;
17352
+ while (row <= maxAnchor.row && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row++;
17311
17353
  offset.y = 0;
17312
17354
  } else offset.y++;
17313
17355
  break;
17314
17356
  case "ArrowRight": if (offset.x === this.env.model.getters.getColSize(sheetId, row)) {
17315
17357
  col++;
17358
+ while (col <= maxAnchor.col && this.env.model.getters.isColHiddenByUser(sheetId, col)) col++;
17316
17359
  offset.x = 0;
17317
17360
  } else offset.x++;
17318
17361
  }
17362
+ if (col < 0) {
17363
+ col = 0;
17364
+ offset.x = 0;
17365
+ } else if (col > maxAnchor.col || col === maxAnchor.col && offset.x > maxAnchor.offset.x) {
17366
+ col = maxAnchor.col;
17367
+ offset.x = maxAnchor.offset.x;
17368
+ }
17369
+ if (row < 0) {
17370
+ row = 0;
17371
+ offset.y = 0;
17372
+ } else if (row > maxAnchor.row || row === maxAnchor.row && offset.y > maxAnchor.offset.y) {
17373
+ row = maxAnchor.row;
17374
+ offset.y = maxAnchor.offset.y;
17375
+ }
17319
17376
  return {
17320
17377
  col,
17321
17378
  row,
@@ -18480,12 +18537,15 @@ function validateArguments(descr) {
18480
18537
  //#endregion
18481
18538
  //#region src/functions/create_compute_function.ts
18482
18539
  function createComputeFunction(descr) {
18540
+ let currentArgDefinitions = [];
18483
18541
  function vectorizedCompute(...args) {
18484
18542
  const acceptToVectorize = [];
18543
+ currentArgDefinitions = new Array(args.length);
18485
18544
  const getArgToFocus = argTargeting(descr, args.length);
18486
18545
  for (let i = 0; i < args.length; i++) {
18487
18546
  const argIndex = getArgToFocus(i).index ?? -1;
18488
18547
  const argDefinition = descr.args[argIndex];
18548
+ currentArgDefinitions[i] = argDefinition;
18489
18549
  const arg = args[i];
18490
18550
  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()));
18491
18551
  acceptToVectorize.push(!argDefinition.acceptMatrix);
@@ -18500,8 +18560,7 @@ function createComputeFunction(descr) {
18500
18560
  function errorHandlingCompute(...args) {
18501
18561
  for (let i = 0; i < args.length; i++) {
18502
18562
  const arg = args[i];
18503
- const getArgToFocus = argTargeting(descr, args.length);
18504
- if (!descr.args[getArgToFocus(i).index ?? i].acceptErrors && !isMatrix(arg) && isEvaluationError(arg?.value)) return arg;
18563
+ if (!currentArgDefinitions[i].acceptErrors && !isMatrix(arg) && isEvaluationError(arg?.value)) return arg;
18505
18564
  }
18506
18565
  try {
18507
18566
  return computeFunctionToObject.apply(this, args);
@@ -68941,6 +69000,10 @@ function inverseCreateFigure(cmd) {
68941
69000
  }
68942
69001
  function inverseCreateChart(cmd) {
68943
69002
  return [{
69003
+ type: "DELETE_CHART",
69004
+ chartId: cmd.chartId,
69005
+ sheetId: cmd.sheetId
69006
+ }, {
68944
69007
  type: "DELETE_FIGURE",
68945
69008
  figureId: cmd.figureId,
68946
69009
  sheetId: cmd.sheetId
@@ -79119,6 +79182,6 @@ const chartHelpers = {
79119
79182
  //#endregion
79120
79183
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DispatchResult, EvaluationError, LocalTransportService, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, categories, chartHelpers, components, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
79121
79184
 
79122
- __info__.version = "19.1.30";
79123
- __info__.date = "2026-07-30T06:53:51.978Z";
79124
- __info__.hash = "b4f7ab8";
79185
+ __info__.version = "19.1.31";
79186
+ __info__.date = "2026-08-10T12:30:52.454Z";
79187
+ __info__.hash = "8ac65ec";
@@ -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.1.30
6
- * @date 2026-07-30T06:53:51.978Z
7
- * @hash b4f7ab8
5
+ * @version 19.1.31
6
+ * @date 2026-08-10T12:30:52.454Z
7
+ * @hash 8ac65ec
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -3917,19 +3917,58 @@ stores.inject(MyMetaStore, storeInstance);
3917
3917
  }
3918
3918
  }
3919
3919
  if (countVectorizedCol === 1 && countVectorizedRow === 1) return formula(...args);
3920
- const getArgOffset = (i, j) => args.map((arg, index) => {
3921
- switch (vectorArgsType?.[index]) {
3922
- case "matrix": return arg[i][j];
3923
- case "horizontal": return arg[i][0];
3924
- case "vertical": return arg[0][j];
3925
- case void 0: return arg;
3920
+ const argsBuffer = new Array(args.length);
3921
+ const argGetters = [];
3922
+ const vectorizedIndices = [];
3923
+ for (let k = 0; k < args.length; k++) {
3924
+ const arg = args[k];
3925
+ switch (vectorArgsType?.[k]) {
3926
+ case "matrix":
3927
+ argGetters.push((i, j) => arg[i][j]);
3928
+ vectorizedIndices.push(k);
3929
+ break;
3930
+ case "horizontal":
3931
+ argGetters.push((i) => arg[i][0]);
3932
+ vectorizedIndices.push(k);
3933
+ break;
3934
+ case "vertical":
3935
+ argGetters.push((_i, j) => arg[0][j]);
3936
+ vectorizedIndices.push(k);
3937
+ break;
3938
+ case void 0:
3939
+ argsBuffer[k] = arg;
3940
+ break;
3926
3941
  }
3927
- });
3928
- return generateMatrix(countVectorizedCol, countVectorizedRow, (col, row) => {
3929
- if (col > vectorizedColLimit - 1 || row > vectorizedRowLimit - 1) return new NotAvailableError(_t("Array arguments to [[FUNCTION_NAME]] are of different size."));
3930
- const singleCellComputeResult = formula(...getArgOffset(col, row));
3931
- return isMatrix(singleCellComputeResult) ? singleCellComputeResult[0][0] : singleCellComputeResult;
3932
- });
3942
+ }
3943
+ const nbVectorized = vectorizedIndices.length;
3944
+ let callFormula;
3945
+ switch (argsBuffer.length) {
3946
+ case 1:
3947
+ callFormula = () => formula(argsBuffer[0]);
3948
+ break;
3949
+ case 2:
3950
+ callFormula = () => formula(argsBuffer[0], argsBuffer[1]);
3951
+ break;
3952
+ case 3:
3953
+ callFormula = () => formula(argsBuffer[0], argsBuffer[1], argsBuffer[2]);
3954
+ break;
3955
+ default: callFormula = () => formula(...argsBuffer);
3956
+ }
3957
+ const result = new Array(countVectorizedCol);
3958
+ for (let col = 0; col < countVectorizedCol; col++) {
3959
+ const column = new Array(countVectorizedRow);
3960
+ result[col] = column;
3961
+ for (let row = 0; row < countVectorizedRow; row++) {
3962
+ if (col > vectorizedColLimit - 1 || row > vectorizedRowLimit - 1) {
3963
+ column[row] = new NotAvailableError(_t("Array arguments to [[FUNCTION_NAME]] are of different size."));
3964
+ continue;
3965
+ }
3966
+ for (let k = 0; k < nbVectorized; k++) argsBuffer[vectorizedIndices[k]] = argGetters[k](col, row);
3967
+ const singleCellComputeResult = callFormula();
3968
+ column[row] = isMatrix(singleCellComputeResult) ? singleCellComputeResult[0][0] : singleCellComputeResult;
3969
+ }
3970
+ }
3971
+ return result;
3933
3972
  }
3934
3973
  /**
3935
3974
  * This function allows to visit arguments and stop the visit if necessary.
@@ -17266,7 +17305,7 @@ stores.inject(MyMetaStore, storeInstance);
17266
17305
  case "ArrowLeft":
17267
17306
  case "ArrowRight":
17268
17307
  case "ArrowUp":
17269
- const { col, row, offset } = this.postionInBoundary(this.props.figureUI, ev.key);
17308
+ const { col, row, offset } = this.postionInBoundary(this.env.model.getters.getActiveSheetId(), this.props.figureUI, ev.key);
17270
17309
  this.env.model.dispatch("UPDATE_FIGURE", {
17271
17310
  sheetId: this.env.model.getters.getActiveSheetId(),
17272
17311
  figureId: this.props.figureUI.id,
@@ -17290,34 +17329,52 @@ stores.inject(MyMetaStore, storeInstance);
17290
17329
  break;
17291
17330
  }
17292
17331
  }
17293
- postionInBoundary(position, key) {
17294
- const sheetId = this.env.model.getters.getActiveSheetId();
17295
- let { col, row, offset } = position;
17332
+ postionInBoundary(sheetId, figure, key) {
17333
+ let { col, row, offset } = figure;
17296
17334
  offset = { ...offset };
17335
+ const maxAnchor = this.env.model.getters.getMaxAnchorOffset(sheetId, figure.height, figure.width);
17297
17336
  switch (key) {
17298
17337
  case "ArrowUp":
17299
17338
  if (offset.y === 0) {
17300
17339
  row--;
17340
+ while (row > 0 && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row--;
17301
17341
  offset.y = this.env.model.getters.getRowSize(sheetId, row) - 1;
17302
17342
  } else offset.y--;
17303
17343
  break;
17304
17344
  case "ArrowLeft":
17305
17345
  if (offset.x === 0) {
17306
17346
  col--;
17347
+ while (col > 0 && this.env.model.getters.isColHiddenByUser(sheetId, col)) col--;
17307
17348
  offset.x = this.env.model.getters.getColSize(sheetId, col) - 1;
17308
17349
  } else offset.x--;
17309
17350
  break;
17310
17351
  case "ArrowDown":
17311
17352
  if (offset.y === this.env.model.getters.getRowSize(sheetId, row)) {
17312
17353
  row++;
17354
+ while (row <= maxAnchor.row && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row++;
17313
17355
  offset.y = 0;
17314
17356
  } else offset.y++;
17315
17357
  break;
17316
17358
  case "ArrowRight": if (offset.x === this.env.model.getters.getColSize(sheetId, row)) {
17317
17359
  col++;
17360
+ while (col <= maxAnchor.col && this.env.model.getters.isColHiddenByUser(sheetId, col)) col++;
17318
17361
  offset.x = 0;
17319
17362
  } else offset.x++;
17320
17363
  }
17364
+ if (col < 0) {
17365
+ col = 0;
17366
+ offset.x = 0;
17367
+ } else if (col > maxAnchor.col || col === maxAnchor.col && offset.x > maxAnchor.offset.x) {
17368
+ col = maxAnchor.col;
17369
+ offset.x = maxAnchor.offset.x;
17370
+ }
17371
+ if (row < 0) {
17372
+ row = 0;
17373
+ offset.y = 0;
17374
+ } else if (row > maxAnchor.row || row === maxAnchor.row && offset.y > maxAnchor.offset.y) {
17375
+ row = maxAnchor.row;
17376
+ offset.y = maxAnchor.offset.y;
17377
+ }
17321
17378
  return {
17322
17379
  col,
17323
17380
  row,
@@ -18482,12 +18539,15 @@ stores.inject(MyMetaStore, storeInstance);
18482
18539
  //#endregion
18483
18540
  //#region src/functions/create_compute_function.ts
18484
18541
  function createComputeFunction(descr) {
18542
+ let currentArgDefinitions = [];
18485
18543
  function vectorizedCompute(...args) {
18486
18544
  const acceptToVectorize = [];
18545
+ currentArgDefinitions = new Array(args.length);
18487
18546
  const getArgToFocus = argTargeting(descr, args.length);
18488
18547
  for (let i = 0; i < args.length; i++) {
18489
18548
  const argIndex = getArgToFocus(i).index ?? -1;
18490
18549
  const argDefinition = descr.args[argIndex];
18550
+ currentArgDefinitions[i] = argDefinition;
18491
18551
  const arg = args[i];
18492
18552
  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()));
18493
18553
  acceptToVectorize.push(!argDefinition.acceptMatrix);
@@ -18502,8 +18562,7 @@ stores.inject(MyMetaStore, storeInstance);
18502
18562
  function errorHandlingCompute(...args) {
18503
18563
  for (let i = 0; i < args.length; i++) {
18504
18564
  const arg = args[i];
18505
- const getArgToFocus = argTargeting(descr, args.length);
18506
- if (!descr.args[getArgToFocus(i).index ?? i].acceptErrors && !isMatrix(arg) && isEvaluationError(arg?.value)) return arg;
18565
+ if (!currentArgDefinitions[i].acceptErrors && !isMatrix(arg) && isEvaluationError(arg?.value)) return arg;
18507
18566
  }
18508
18567
  try {
18509
18568
  return computeFunctionToObject.apply(this, args);
@@ -68943,6 +69002,10 @@ stores.inject(MyMetaStore, storeInstance);
68943
69002
  }
68944
69003
  function inverseCreateChart(cmd) {
68945
69004
  return [{
69005
+ type: "DELETE_CHART",
69006
+ chartId: cmd.chartId,
69007
+ sheetId: cmd.sheetId
69008
+ }, {
68946
69009
  type: "DELETE_FIGURE",
68947
69010
  figureId: cmd.figureId,
68948
69011
  sheetId: cmd.sheetId
@@ -79174,8 +79237,8 @@ exports.stores = stores;
79174
79237
  exports.tokenColors = tokenColors;
79175
79238
  exports.tokenize = tokenize;
79176
79239
 
79177
- __info__.version = "19.1.30";
79178
- __info__.date = "2026-07-30T06:53:51.978Z";
79179
- __info__.hash = "b4f7ab8";
79240
+ __info__.version = "19.1.31";
79241
+ __info__.date = "2026-08-10T12:30:52.454Z";
79242
+ __info__.hash = "8ac65ec";
79180
79243
 
79181
79244
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);