@odoo/o-spreadsheet 19.2.23 → 19.2.24

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.2.23
6
- * @date 2026-07-30T06:54:22.421Z
7
- * @hash 7914fd5
5
+ * @version 19.2.24
6
+ * @date 2026-08-10T12:32:28.468Z
7
+ * @hash 31fa530
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.2.23
6
- * @date 2026-07-30T06:54:20.810Z
7
- * @hash 7914fd5
5
+ * @version 19.2.24
6
+ * @date 2026-08-10T12:32:26.974Z
7
+ * @hash 31fa530
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";
@@ -3940,19 +3940,58 @@ function applyVectorization(formula, args, acceptToVectorize = void 0) {
3940
3940
  }
3941
3941
  }
3942
3942
  if (countVectorizedCol === 1 && countVectorizedRow === 1) return formula(...args);
3943
- const getArgOffset = (i, j) => args.map((arg, index) => {
3944
- switch (vectorArgsType?.[index]) {
3945
- case "matrix": return arg[i][j];
3946
- case "horizontal": return arg[i][0];
3947
- case "vertical": return arg[0][j];
3948
- case void 0: return arg;
3943
+ const argsBuffer = new Array(args.length);
3944
+ const argGetters = [];
3945
+ const vectorizedIndices = [];
3946
+ for (let k = 0; k < args.length; k++) {
3947
+ const arg = args[k];
3948
+ switch (vectorArgsType?.[k]) {
3949
+ case "matrix":
3950
+ argGetters.push((i, j) => arg[i][j]);
3951
+ vectorizedIndices.push(k);
3952
+ break;
3953
+ case "horizontal":
3954
+ argGetters.push((i) => arg[i][0]);
3955
+ vectorizedIndices.push(k);
3956
+ break;
3957
+ case "vertical":
3958
+ argGetters.push((_i, j) => arg[0][j]);
3959
+ vectorizedIndices.push(k);
3960
+ break;
3961
+ case void 0:
3962
+ argsBuffer[k] = arg;
3963
+ break;
3949
3964
  }
3950
- });
3951
- return generateMatrix(countVectorizedCol, countVectorizedRow, (col, row) => {
3952
- if (col > vectorizedColLimit - 1 || row > vectorizedRowLimit - 1) return new NotAvailableError(_t("Array arguments to [[FUNCTION_NAME]] are of different size."));
3953
- const singleCellComputeResult = formula(...getArgOffset(col, row));
3954
- return isMatrix(singleCellComputeResult) ? singleCellComputeResult[0][0] : singleCellComputeResult;
3955
- });
3965
+ }
3966
+ const nbVectorized = vectorizedIndices.length;
3967
+ let callFormula;
3968
+ switch (argsBuffer.length) {
3969
+ case 1:
3970
+ callFormula = () => formula(argsBuffer[0]);
3971
+ break;
3972
+ case 2:
3973
+ callFormula = () => formula(argsBuffer[0], argsBuffer[1]);
3974
+ break;
3975
+ case 3:
3976
+ callFormula = () => formula(argsBuffer[0], argsBuffer[1], argsBuffer[2]);
3977
+ break;
3978
+ default: callFormula = () => formula(...argsBuffer);
3979
+ }
3980
+ const result = new Array(countVectorizedCol);
3981
+ for (let col = 0; col < countVectorizedCol; col++) {
3982
+ const column = new Array(countVectorizedRow);
3983
+ result[col] = column;
3984
+ for (let row = 0; row < countVectorizedRow; row++) {
3985
+ if (col > vectorizedColLimit - 1 || row > vectorizedRowLimit - 1) {
3986
+ column[row] = new NotAvailableError(_t("Array arguments to [[FUNCTION_NAME]] are of different size."));
3987
+ continue;
3988
+ }
3989
+ for (let k = 0; k < nbVectorized; k++) argsBuffer[vectorizedIndices[k]] = argGetters[k](col, row);
3990
+ const singleCellComputeResult = callFormula();
3991
+ column[row] = isMatrix(singleCellComputeResult) ? singleCellComputeResult[0][0] : singleCellComputeResult;
3992
+ }
3993
+ }
3994
+ return result;
3956
3995
  }
3957
3996
  /**
3958
3997
  * This function allows to visit arguments and stop the visit if necessary.
@@ -17389,7 +17428,7 @@ var FigureComponent = class extends Component {
17389
17428
  case "ArrowLeft":
17390
17429
  case "ArrowRight":
17391
17430
  case "ArrowUp":
17392
- const { col, row, offset } = this.postionInBoundary(this.props.figureUI, ev.key);
17431
+ const { col, row, offset } = this.postionInBoundary(this.env.model.getters.getActiveSheetId(), this.props.figureUI, ev.key);
17393
17432
  this.env.model.dispatch("UPDATE_FIGURE", {
17394
17433
  sheetId: this.env.model.getters.getActiveSheetId(),
17395
17434
  figureId: this.props.figureUI.id,
@@ -17413,34 +17452,52 @@ var FigureComponent = class extends Component {
17413
17452
  break;
17414
17453
  }
17415
17454
  }
17416
- postionInBoundary(position, key) {
17417
- const sheetId = this.env.model.getters.getActiveSheetId();
17418
- let { col, row, offset } = position;
17455
+ postionInBoundary(sheetId, figure, key) {
17456
+ let { col, row, offset } = figure;
17419
17457
  offset = { ...offset };
17458
+ const maxAnchor = this.env.model.getters.getMaxAnchorOffset(sheetId, figure.height, figure.width);
17420
17459
  switch (key) {
17421
17460
  case "ArrowUp":
17422
17461
  if (offset.y === 0) {
17423
17462
  row--;
17463
+ while (row > 0 && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row--;
17424
17464
  offset.y = this.env.model.getters.getRowSize(sheetId, row) - 1;
17425
17465
  } else offset.y--;
17426
17466
  break;
17427
17467
  case "ArrowLeft":
17428
17468
  if (offset.x === 0) {
17429
17469
  col--;
17470
+ while (col > 0 && this.env.model.getters.isColHiddenByUser(sheetId, col)) col--;
17430
17471
  offset.x = this.env.model.getters.getColSize(sheetId, col) - 1;
17431
17472
  } else offset.x--;
17432
17473
  break;
17433
17474
  case "ArrowDown":
17434
17475
  if (offset.y === this.env.model.getters.getRowSize(sheetId, row)) {
17435
17476
  row++;
17477
+ while (row <= maxAnchor.row && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row++;
17436
17478
  offset.y = 0;
17437
17479
  } else offset.y++;
17438
17480
  break;
17439
17481
  case "ArrowRight": if (offset.x === this.env.model.getters.getColSize(sheetId, row)) {
17440
17482
  col++;
17483
+ while (col <= maxAnchor.col && this.env.model.getters.isColHiddenByUser(sheetId, col)) col++;
17441
17484
  offset.x = 0;
17442
17485
  } else offset.x++;
17443
17486
  }
17487
+ if (col < 0) {
17488
+ col = 0;
17489
+ offset.x = 0;
17490
+ } else if (col > maxAnchor.col || col === maxAnchor.col && offset.x > maxAnchor.offset.x) {
17491
+ col = maxAnchor.col;
17492
+ offset.x = maxAnchor.offset.x;
17493
+ }
17494
+ if (row < 0) {
17495
+ row = 0;
17496
+ offset.y = 0;
17497
+ } else if (row > maxAnchor.row || row === maxAnchor.row && offset.y > maxAnchor.offset.y) {
17498
+ row = maxAnchor.row;
17499
+ offset.y = maxAnchor.offset.y;
17500
+ }
17444
17501
  return {
17445
17502
  col,
17446
17503
  row,
@@ -17711,12 +17768,15 @@ function validateArguments(descr) {
17711
17768
  //#endregion
17712
17769
  //#region src/functions/create_compute_function.ts
17713
17770
  function createComputeFunction(descr) {
17771
+ let currentArgDefinitions = [];
17714
17772
  function vectorizedCompute(...args) {
17715
17773
  const acceptToVectorize = [];
17774
+ currentArgDefinitions = new Array(args.length);
17716
17775
  const getArgToFocus = argTargeting(descr, args.length);
17717
17776
  for (let i = 0; i < args.length; i++) {
17718
17777
  const argIndex = getArgToFocus(i).index ?? -1;
17719
17778
  const argDefinition = descr.args[argIndex];
17779
+ currentArgDefinitions[i] = argDefinition;
17720
17780
  const arg = args[i];
17721
17781
  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()));
17722
17782
  acceptToVectorize.push(!argDefinition.acceptMatrix);
@@ -17731,8 +17791,7 @@ function createComputeFunction(descr) {
17731
17791
  function errorHandlingCompute(...args) {
17732
17792
  for (let i = 0; i < args.length; i++) {
17733
17793
  const arg = args[i];
17734
- const getArgToFocus = argTargeting(descr, args.length);
17735
- if (!descr.args[getArgToFocus(i).index ?? i].acceptErrors && !isMatrix(arg) && isEvaluationError(arg?.value)) return arg;
17794
+ if (!currentArgDefinitions[i].acceptErrors && !isMatrix(arg) && isEvaluationError(arg?.value)) return arg;
17736
17795
  }
17737
17796
  try {
17738
17797
  return computeFunctionToObject.apply(this, args);
@@ -50757,7 +50816,13 @@ var CellComposerStore = class extends AbstractComposerStore {
50757
50816
  const cell = this.getters.getEvaluatedCell(position);
50758
50817
  if (cell.link && !isFormula(content)) content = markdownLink(content, cell.link.url);
50759
50818
  const currentFormat = this.getters.getCell(position)?.format;
50760
- const afterFormat = currentFormat === "@" || currentFormat && isDateTimeFormat(currentFormat) ? void 0 : detectDateFormat(content, this.getters.getLocale());
50819
+ const isCurrentFormatDate = currentFormat && isDateTimeFormat(currentFormat);
50820
+ const contentDateFormat = detectDateFormat(content, this.getters.getLocale());
50821
+ let afterFormat;
50822
+ if (currentFormat !== "@") {
50823
+ if (contentDateFormat && !isCurrentFormatDate) afterFormat = contentDateFormat;
50824
+ else if (isCurrentFormatDate && isNumber(content, this.getters.getLocale())) afterFormat = "";
50825
+ }
50761
50826
  this.addHeadersForSpreadingFormula(content);
50762
50827
  result = this.model.dispatch("UPDATE_CELL", {
50763
50828
  ...this.currentEditedCell,
@@ -71430,6 +71495,10 @@ function inverseCreateFigure(cmd) {
71430
71495
  }
71431
71496
  function inverseCreateChart(cmd) {
71432
71497
  return [{
71498
+ type: "DELETE_CHART",
71499
+ chartId: cmd.chartId,
71500
+ sheetId: cmd.sheetId
71501
+ }, {
71433
71502
  type: "DELETE_FIGURE",
71434
71503
  figureId: cmd.figureId,
71435
71504
  sheetId: cmd.sheetId
@@ -81733,6 +81802,6 @@ const chartHelpers = {
81733
81802
  //#endregion
81734
81803
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CompiledFormula, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DispatchResult, EvaluationError, LocalTransportService, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, canExecuteInReadonly, categories, chartHelpers, components, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isSheetDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
81735
81804
 
81736
- __info__.version = "19.2.23";
81737
- __info__.date = "2026-07-30T06:54:20.810Z";
81738
- __info__.hash = "7914fd5";
81805
+ __info__.version = "19.2.24";
81806
+ __info__.date = "2026-08-10T12:32:26.974Z";
81807
+ __info__.hash = "31fa530";
@@ -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.2.23
6
- * @date 2026-07-30T06:54:20.810Z
7
- * @hash 7914fd5
5
+ * @version 19.2.24
6
+ * @date 2026-08-10T12:32:26.974Z
7
+ * @hash 31fa530
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -3942,19 +3942,58 @@ stores.inject(MyMetaStore, storeInstance);
3942
3942
  }
3943
3943
  }
3944
3944
  if (countVectorizedCol === 1 && countVectorizedRow === 1) return formula(...args);
3945
- const getArgOffset = (i, j) => args.map((arg, index) => {
3946
- switch (vectorArgsType?.[index]) {
3947
- case "matrix": return arg[i][j];
3948
- case "horizontal": return arg[i][0];
3949
- case "vertical": return arg[0][j];
3950
- case void 0: return arg;
3945
+ const argsBuffer = new Array(args.length);
3946
+ const argGetters = [];
3947
+ const vectorizedIndices = [];
3948
+ for (let k = 0; k < args.length; k++) {
3949
+ const arg = args[k];
3950
+ switch (vectorArgsType?.[k]) {
3951
+ case "matrix":
3952
+ argGetters.push((i, j) => arg[i][j]);
3953
+ vectorizedIndices.push(k);
3954
+ break;
3955
+ case "horizontal":
3956
+ argGetters.push((i) => arg[i][0]);
3957
+ vectorizedIndices.push(k);
3958
+ break;
3959
+ case "vertical":
3960
+ argGetters.push((_i, j) => arg[0][j]);
3961
+ vectorizedIndices.push(k);
3962
+ break;
3963
+ case void 0:
3964
+ argsBuffer[k] = arg;
3965
+ break;
3951
3966
  }
3952
- });
3953
- return generateMatrix(countVectorizedCol, countVectorizedRow, (col, row) => {
3954
- if (col > vectorizedColLimit - 1 || row > vectorizedRowLimit - 1) return new NotAvailableError(_t("Array arguments to [[FUNCTION_NAME]] are of different size."));
3955
- const singleCellComputeResult = formula(...getArgOffset(col, row));
3956
- return isMatrix(singleCellComputeResult) ? singleCellComputeResult[0][0] : singleCellComputeResult;
3957
- });
3967
+ }
3968
+ const nbVectorized = vectorizedIndices.length;
3969
+ let callFormula;
3970
+ switch (argsBuffer.length) {
3971
+ case 1:
3972
+ callFormula = () => formula(argsBuffer[0]);
3973
+ break;
3974
+ case 2:
3975
+ callFormula = () => formula(argsBuffer[0], argsBuffer[1]);
3976
+ break;
3977
+ case 3:
3978
+ callFormula = () => formula(argsBuffer[0], argsBuffer[1], argsBuffer[2]);
3979
+ break;
3980
+ default: callFormula = () => formula(...argsBuffer);
3981
+ }
3982
+ const result = new Array(countVectorizedCol);
3983
+ for (let col = 0; col < countVectorizedCol; col++) {
3984
+ const column = new Array(countVectorizedRow);
3985
+ result[col] = column;
3986
+ for (let row = 0; row < countVectorizedRow; row++) {
3987
+ if (col > vectorizedColLimit - 1 || row > vectorizedRowLimit - 1) {
3988
+ column[row] = new NotAvailableError(_t("Array arguments to [[FUNCTION_NAME]] are of different size."));
3989
+ continue;
3990
+ }
3991
+ for (let k = 0; k < nbVectorized; k++) argsBuffer[vectorizedIndices[k]] = argGetters[k](col, row);
3992
+ const singleCellComputeResult = callFormula();
3993
+ column[row] = isMatrix(singleCellComputeResult) ? singleCellComputeResult[0][0] : singleCellComputeResult;
3994
+ }
3995
+ }
3996
+ return result;
3958
3997
  }
3959
3998
  /**
3960
3999
  * This function allows to visit arguments and stop the visit if necessary.
@@ -17391,7 +17430,7 @@ stores.inject(MyMetaStore, storeInstance);
17391
17430
  case "ArrowLeft":
17392
17431
  case "ArrowRight":
17393
17432
  case "ArrowUp":
17394
- const { col, row, offset } = this.postionInBoundary(this.props.figureUI, ev.key);
17433
+ const { col, row, offset } = this.postionInBoundary(this.env.model.getters.getActiveSheetId(), this.props.figureUI, ev.key);
17395
17434
  this.env.model.dispatch("UPDATE_FIGURE", {
17396
17435
  sheetId: this.env.model.getters.getActiveSheetId(),
17397
17436
  figureId: this.props.figureUI.id,
@@ -17415,34 +17454,52 @@ stores.inject(MyMetaStore, storeInstance);
17415
17454
  break;
17416
17455
  }
17417
17456
  }
17418
- postionInBoundary(position, key) {
17419
- const sheetId = this.env.model.getters.getActiveSheetId();
17420
- let { col, row, offset } = position;
17457
+ postionInBoundary(sheetId, figure, key) {
17458
+ let { col, row, offset } = figure;
17421
17459
  offset = { ...offset };
17460
+ const maxAnchor = this.env.model.getters.getMaxAnchorOffset(sheetId, figure.height, figure.width);
17422
17461
  switch (key) {
17423
17462
  case "ArrowUp":
17424
17463
  if (offset.y === 0) {
17425
17464
  row--;
17465
+ while (row > 0 && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row--;
17426
17466
  offset.y = this.env.model.getters.getRowSize(sheetId, row) - 1;
17427
17467
  } else offset.y--;
17428
17468
  break;
17429
17469
  case "ArrowLeft":
17430
17470
  if (offset.x === 0) {
17431
17471
  col--;
17472
+ while (col > 0 && this.env.model.getters.isColHiddenByUser(sheetId, col)) col--;
17432
17473
  offset.x = this.env.model.getters.getColSize(sheetId, col) - 1;
17433
17474
  } else offset.x--;
17434
17475
  break;
17435
17476
  case "ArrowDown":
17436
17477
  if (offset.y === this.env.model.getters.getRowSize(sheetId, row)) {
17437
17478
  row++;
17479
+ while (row <= maxAnchor.row && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row++;
17438
17480
  offset.y = 0;
17439
17481
  } else offset.y++;
17440
17482
  break;
17441
17483
  case "ArrowRight": if (offset.x === this.env.model.getters.getColSize(sheetId, row)) {
17442
17484
  col++;
17485
+ while (col <= maxAnchor.col && this.env.model.getters.isColHiddenByUser(sheetId, col)) col++;
17443
17486
  offset.x = 0;
17444
17487
  } else offset.x++;
17445
17488
  }
17489
+ if (col < 0) {
17490
+ col = 0;
17491
+ offset.x = 0;
17492
+ } else if (col > maxAnchor.col || col === maxAnchor.col && offset.x > maxAnchor.offset.x) {
17493
+ col = maxAnchor.col;
17494
+ offset.x = maxAnchor.offset.x;
17495
+ }
17496
+ if (row < 0) {
17497
+ row = 0;
17498
+ offset.y = 0;
17499
+ } else if (row > maxAnchor.row || row === maxAnchor.row && offset.y > maxAnchor.offset.y) {
17500
+ row = maxAnchor.row;
17501
+ offset.y = maxAnchor.offset.y;
17502
+ }
17446
17503
  return {
17447
17504
  col,
17448
17505
  row,
@@ -17713,12 +17770,15 @@ stores.inject(MyMetaStore, storeInstance);
17713
17770
  //#endregion
17714
17771
  //#region src/functions/create_compute_function.ts
17715
17772
  function createComputeFunction(descr) {
17773
+ let currentArgDefinitions = [];
17716
17774
  function vectorizedCompute(...args) {
17717
17775
  const acceptToVectorize = [];
17776
+ currentArgDefinitions = new Array(args.length);
17718
17777
  const getArgToFocus = argTargeting(descr, args.length);
17719
17778
  for (let i = 0; i < args.length; i++) {
17720
17779
  const argIndex = getArgToFocus(i).index ?? -1;
17721
17780
  const argDefinition = descr.args[argIndex];
17781
+ currentArgDefinitions[i] = argDefinition;
17722
17782
  const arg = args[i];
17723
17783
  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()));
17724
17784
  acceptToVectorize.push(!argDefinition.acceptMatrix);
@@ -17733,8 +17793,7 @@ stores.inject(MyMetaStore, storeInstance);
17733
17793
  function errorHandlingCompute(...args) {
17734
17794
  for (let i = 0; i < args.length; i++) {
17735
17795
  const arg = args[i];
17736
- const getArgToFocus = argTargeting(descr, args.length);
17737
- if (!descr.args[getArgToFocus(i).index ?? i].acceptErrors && !isMatrix(arg) && isEvaluationError(arg?.value)) return arg;
17796
+ if (!currentArgDefinitions[i].acceptErrors && !isMatrix(arg) && isEvaluationError(arg?.value)) return arg;
17738
17797
  }
17739
17798
  try {
17740
17799
  return computeFunctionToObject.apply(this, args);
@@ -50759,7 +50818,13 @@ stores.inject(MyMetaStore, storeInstance);
50759
50818
  const cell = this.getters.getEvaluatedCell(position);
50760
50819
  if (cell.link && !isFormula(content)) content = markdownLink(content, cell.link.url);
50761
50820
  const currentFormat = this.getters.getCell(position)?.format;
50762
- const afterFormat = currentFormat === "@" || currentFormat && isDateTimeFormat(currentFormat) ? void 0 : detectDateFormat(content, this.getters.getLocale());
50821
+ const isCurrentFormatDate = currentFormat && isDateTimeFormat(currentFormat);
50822
+ const contentDateFormat = detectDateFormat(content, this.getters.getLocale());
50823
+ let afterFormat;
50824
+ if (currentFormat !== "@") {
50825
+ if (contentDateFormat && !isCurrentFormatDate) afterFormat = contentDateFormat;
50826
+ else if (isCurrentFormatDate && isNumber(content, this.getters.getLocale())) afterFormat = "";
50827
+ }
50763
50828
  this.addHeadersForSpreadingFormula(content);
50764
50829
  result = this.model.dispatch("UPDATE_CELL", {
50765
50830
  ...this.currentEditedCell,
@@ -71432,6 +71497,10 @@ stores.inject(MyMetaStore, storeInstance);
71432
71497
  }
71433
71498
  function inverseCreateChart(cmd) {
71434
71499
  return [{
71500
+ type: "DELETE_CHART",
71501
+ chartId: cmd.chartId,
71502
+ sheetId: cmd.sheetId
71503
+ }, {
71435
71504
  type: "DELETE_FIGURE",
71436
71505
  figureId: cmd.figureId,
71437
71506
  sheetId: cmd.sheetId
@@ -81793,8 +81862,8 @@ exports.stores = stores;
81793
81862
  exports.tokenColors = tokenColors;
81794
81863
  exports.tokenize = tokenize;
81795
81864
 
81796
- __info__.version = "19.2.23";
81797
- __info__.date = "2026-07-30T06:54:20.810Z";
81798
- __info__.hash = "7914fd5";
81865
+ __info__.version = "19.2.24";
81866
+ __info__.date = "2026-08-10T12:32:26.974Z";
81867
+ __info__.hash = "31fa530";
81799
81868
 
81800
81869
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);