@odoo/o-spreadsheet 18.0.69 → 18.0.71

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.0.69
6
- * @date 2026-05-27T05:57:08.710Z
7
- * @hash 50b85ba
5
+ * @version 18.0.71
6
+ * @date 2026-06-17T08:50:04.188Z
7
+ * @hash 18d4601
8
8
  */
9
9
 
10
10
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -3890,6 +3890,7 @@ function detectLink(value) {
3890
3890
  //#endregion
3891
3891
  //#region src/helpers/format/format_tokenizer.ts
3892
3892
  function tokenizeFormat(str) {
3893
+ str = str.replace(/\s/g, " ");
3893
3894
  const chars = new TokenizingChars(str);
3894
3895
  const result = [];
3895
3896
  let currentFormatPart = [];
@@ -29527,11 +29528,10 @@ const INSERT_TABLE = (env) => {
29527
29528
  if (interactiveCreateTable(env, env.model.getters.getActiveSheetId()).isSuccessful) env.openSidePanel("TableSidePanel", {});
29528
29529
  };
29529
29530
  const DELETE_SELECTED_TABLE = (env) => {
29530
- const position = env.model.getters.getActivePosition();
29531
- const table = env.model.getters.getTable(position);
29531
+ const table = env.model.getters.getFirstTableInSelection();
29532
29532
  if (!table) return;
29533
29533
  env.model.dispatch("REMOVE_TABLE", {
29534
- sheetId: position.sheetId,
29534
+ sheetId: env.model.getters.getActiveSheetId(),
29535
29535
  target: [table.range.zone]
29536
29536
  });
29537
29537
  };
@@ -37218,10 +37218,10 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37218
37218
  allSheetsMatches = [];
37219
37219
  activeSheetMatches = [];
37220
37220
  specificRangeMatches = [];
37221
+ selectedMatchPosition = null;
37221
37222
  currentSearchRegex = null;
37222
37223
  isSearchDirty = false;
37223
37224
  initialShowFormulaState;
37224
- preserveSelectedMatchIndex = false;
37225
37225
  irreplaceableMatchCount = 0;
37226
37226
  notificationStore = this.get(NotificationStore);
37227
37227
  selectedMatchIndex = null;
@@ -37325,7 +37325,10 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37325
37325
  */
37326
37326
  _updateSearch(toSearch, searchOptions) {
37327
37327
  this.searchOptions = searchOptions;
37328
- if (toSearch !== this.toSearch) this.selectedMatchIndex = null;
37328
+ if (toSearch !== this.toSearch) {
37329
+ this.selectedMatchIndex = null;
37330
+ this.selectedMatchPosition = null;
37331
+ }
37329
37332
  this.toSearch = toSearch;
37330
37333
  this.currentSearchRegex = getSearchRegex(this.toSearch, this.searchOptions);
37331
37334
  this.refreshSearch();
@@ -37334,8 +37337,14 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37334
37337
  * refresh the matches according to the current search options
37335
37338
  */
37336
37339
  refreshSearch(jumpToMatchSheet = true) {
37337
- if (!this.preserveSelectedMatchIndex) this.selectedMatchIndex = null;
37338
37340
  this.findMatches();
37341
+ if (this.selectedMatchPosition) if (this.selectedMatchPosition.sheetId !== this.getters.getActiveSheetId()) {
37342
+ this.selectedMatchIndex = null;
37343
+ this.selectedMatchPosition = null;
37344
+ } else {
37345
+ const index = this.searchMatches.findIndex((match) => match.sheetId === this.selectedMatchPosition?.sheetId && match.col === this.selectedMatchPosition?.col && match.row === this.selectedMatchPosition?.row);
37346
+ if (index !== -1) this.selectedMatchIndex = index;
37347
+ }
37339
37348
  this.selectNextCell(0, jumpToMatchSheet);
37340
37349
  }
37341
37350
  getSheetsInSearchOrder() {
@@ -37403,6 +37412,7 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37403
37412
  const matches = this.searchMatches;
37404
37413
  if (!matches.length) {
37405
37414
  this.selectedMatchIndex = null;
37415
+ this.selectedMatchPosition = null;
37406
37416
  return;
37407
37417
  }
37408
37418
  let nextIndex;
@@ -37416,14 +37426,13 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37416
37426
  } else nextIndex = this.selectedMatchIndex + indexChange;
37417
37427
  nextIndex = (nextIndex + matches.length) % matches.length;
37418
37428
  this.selectedMatchIndex = nextIndex;
37429
+ this.selectedMatchPosition = matches[this.selectedMatchIndex];
37419
37430
  const selectedMatch = matches[nextIndex];
37420
37431
  if (jumpToMatchSheet && this.getters.getActiveSheetId() !== selectedMatch.sheetId) {
37421
- this.preserveSelectedMatchIndex = true;
37422
37432
  this.model.dispatch("ACTIVATE_SHEET", {
37423
37433
  sheetIdFrom: this.getters.getActiveSheetId(),
37424
37434
  sheetIdTo: selectedMatch.sheetId
37425
37435
  });
37426
- this.preserveSelectedMatchIndex = false;
37427
37436
  this.isSearchDirty = false;
37428
37437
  }
37429
37438
  this.model.selection.getBackToDefault();
@@ -37434,14 +37443,12 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37434
37443
  */
37435
37444
  replace() {
37436
37445
  if (this.selectedMatchIndex === null) return;
37437
- this.preserveSelectedMatchIndex = true;
37438
37446
  this.model.dispatch("REPLACE_SEARCH", {
37439
37447
  searchString: this.toSearch,
37440
37448
  replaceWith: this.toReplace,
37441
37449
  matches: [this.searchMatches[this.selectedMatchIndex]],
37442
37450
  searchOptions: this.searchOptions
37443
37451
  });
37444
- this.preserveSelectedMatchIndex = false;
37445
37452
  }
37446
37453
  /**
37447
37454
  * Apply the replace function to all the matches one time.
@@ -41777,8 +41784,12 @@ var CellComposerStore = class extends AbstractComposerStore {
41777
41784
  }
41778
41785
  stopEdition(direction) {
41779
41786
  if (this.canStopEdition()) {
41787
+ const { col, row } = this.currentEditedCell;
41780
41788
  this._stopEdition();
41781
- if (direction) this.model.selection.moveAnchorCell(direction, 1);
41789
+ if (direction) {
41790
+ this.model.selection.selectCell(col, row);
41791
+ this.model.selection.moveAnchorCell(direction, 1);
41792
+ }
41782
41793
  return;
41783
41794
  }
41784
41795
  const editedCell = this.currentEditedCell;
@@ -53971,9 +53982,11 @@ var PivotUIPlugin = class extends UIPlugin {
53971
53982
  this.refreshPivot(cmd.id);
53972
53983
  break;
53973
53984
  case "ADD_PIVOT":
53985
+ this.unusedPivots?.push(cmd.pivotId);
53974
53986
  this.setupPivot(cmd.pivotId);
53975
53987
  break;
53976
53988
  case "DUPLICATE_PIVOT":
53989
+ this.unusedPivots?.push(cmd.newPivotId);
53977
53990
  this.setupPivot(cmd.newPivotId);
53978
53991
  break;
53979
53992
  case "UPDATE_PIVOT":
@@ -54159,8 +54172,8 @@ var PivotUIPlugin = class extends UIPlugin {
54159
54172
  }
54160
54173
  }
54161
54174
  for (const pivotId of this.getters.getPivotIds()) {
54162
- const pivot = this.getters.getPivot(pivotId);
54163
- for (const measure of pivot.definition.measures) if (measure.computedBy) {
54175
+ const pivot = this.getters.getPivotCoreDefinition(pivotId);
54176
+ for (const measure of pivot.measures) if (measure.computedBy) {
54164
54177
  const { sheetId } = measure.computedBy;
54165
54178
  const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
54166
54179
  const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
@@ -66556,6 +66569,6 @@ exports.stores = stores;
66556
66569
  exports.tokenColors = tokenColors;
66557
66570
  exports.tokenize = tokenize;
66558
66571
 
66559
- __info__.version = "18.0.69";
66560
- __info__.date = "2026-05-27T05:57:08.710Z";
66561
- __info__.hash = "50b85ba";
66572
+ __info__.version = "18.0.71";
66573
+ __info__.date = "2026-06-17T08:50:04.188Z";
66574
+ __info__.hash = "18d4601";
@@ -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.0.69
6
- * @date 2026-05-27T05:57:08.710Z
7
- * @hash 50b85ba
5
+ * @version 18.0.71
6
+ * @date 2026-06-17T08:50:04.188Z
7
+ * @hash 18d4601
8
8
  */
9
9
 
10
10
  import { Component, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, xml } from "@odoo/owl";
@@ -3889,6 +3889,7 @@ function detectLink(value) {
3889
3889
  //#endregion
3890
3890
  //#region src/helpers/format/format_tokenizer.ts
3891
3891
  function tokenizeFormat(str) {
3892
+ str = str.replace(/\s/g, " ");
3892
3893
  const chars = new TokenizingChars(str);
3893
3894
  const result = [];
3894
3895
  let currentFormatPart = [];
@@ -29526,11 +29527,10 @@ const INSERT_TABLE = (env) => {
29526
29527
  if (interactiveCreateTable(env, env.model.getters.getActiveSheetId()).isSuccessful) env.openSidePanel("TableSidePanel", {});
29527
29528
  };
29528
29529
  const DELETE_SELECTED_TABLE = (env) => {
29529
- const position = env.model.getters.getActivePosition();
29530
- const table = env.model.getters.getTable(position);
29530
+ const table = env.model.getters.getFirstTableInSelection();
29531
29531
  if (!table) return;
29532
29532
  env.model.dispatch("REMOVE_TABLE", {
29533
- sheetId: position.sheetId,
29533
+ sheetId: env.model.getters.getActiveSheetId(),
29534
29534
  target: [table.range.zone]
29535
29535
  });
29536
29536
  };
@@ -37217,10 +37217,10 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37217
37217
  allSheetsMatches = [];
37218
37218
  activeSheetMatches = [];
37219
37219
  specificRangeMatches = [];
37220
+ selectedMatchPosition = null;
37220
37221
  currentSearchRegex = null;
37221
37222
  isSearchDirty = false;
37222
37223
  initialShowFormulaState;
37223
- preserveSelectedMatchIndex = false;
37224
37224
  irreplaceableMatchCount = 0;
37225
37225
  notificationStore = this.get(NotificationStore);
37226
37226
  selectedMatchIndex = null;
@@ -37324,7 +37324,10 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37324
37324
  */
37325
37325
  _updateSearch(toSearch, searchOptions) {
37326
37326
  this.searchOptions = searchOptions;
37327
- if (toSearch !== this.toSearch) this.selectedMatchIndex = null;
37327
+ if (toSearch !== this.toSearch) {
37328
+ this.selectedMatchIndex = null;
37329
+ this.selectedMatchPosition = null;
37330
+ }
37328
37331
  this.toSearch = toSearch;
37329
37332
  this.currentSearchRegex = getSearchRegex(this.toSearch, this.searchOptions);
37330
37333
  this.refreshSearch();
@@ -37333,8 +37336,14 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37333
37336
  * refresh the matches according to the current search options
37334
37337
  */
37335
37338
  refreshSearch(jumpToMatchSheet = true) {
37336
- if (!this.preserveSelectedMatchIndex) this.selectedMatchIndex = null;
37337
37339
  this.findMatches();
37340
+ if (this.selectedMatchPosition) if (this.selectedMatchPosition.sheetId !== this.getters.getActiveSheetId()) {
37341
+ this.selectedMatchIndex = null;
37342
+ this.selectedMatchPosition = null;
37343
+ } else {
37344
+ const index = this.searchMatches.findIndex((match) => match.sheetId === this.selectedMatchPosition?.sheetId && match.col === this.selectedMatchPosition?.col && match.row === this.selectedMatchPosition?.row);
37345
+ if (index !== -1) this.selectedMatchIndex = index;
37346
+ }
37338
37347
  this.selectNextCell(0, jumpToMatchSheet);
37339
37348
  }
37340
37349
  getSheetsInSearchOrder() {
@@ -37402,6 +37411,7 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37402
37411
  const matches = this.searchMatches;
37403
37412
  if (!matches.length) {
37404
37413
  this.selectedMatchIndex = null;
37414
+ this.selectedMatchPosition = null;
37405
37415
  return;
37406
37416
  }
37407
37417
  let nextIndex;
@@ -37415,14 +37425,13 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37415
37425
  } else nextIndex = this.selectedMatchIndex + indexChange;
37416
37426
  nextIndex = (nextIndex + matches.length) % matches.length;
37417
37427
  this.selectedMatchIndex = nextIndex;
37428
+ this.selectedMatchPosition = matches[this.selectedMatchIndex];
37418
37429
  const selectedMatch = matches[nextIndex];
37419
37430
  if (jumpToMatchSheet && this.getters.getActiveSheetId() !== selectedMatch.sheetId) {
37420
- this.preserveSelectedMatchIndex = true;
37421
37431
  this.model.dispatch("ACTIVATE_SHEET", {
37422
37432
  sheetIdFrom: this.getters.getActiveSheetId(),
37423
37433
  sheetIdTo: selectedMatch.sheetId
37424
37434
  });
37425
- this.preserveSelectedMatchIndex = false;
37426
37435
  this.isSearchDirty = false;
37427
37436
  }
37428
37437
  this.model.selection.getBackToDefault();
@@ -37433,14 +37442,12 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37433
37442
  */
37434
37443
  replace() {
37435
37444
  if (this.selectedMatchIndex === null) return;
37436
- this.preserveSelectedMatchIndex = true;
37437
37445
  this.model.dispatch("REPLACE_SEARCH", {
37438
37446
  searchString: this.toSearch,
37439
37447
  replaceWith: this.toReplace,
37440
37448
  matches: [this.searchMatches[this.selectedMatchIndex]],
37441
37449
  searchOptions: this.searchOptions
37442
37450
  });
37443
- this.preserveSelectedMatchIndex = false;
37444
37451
  }
37445
37452
  /**
37446
37453
  * Apply the replace function to all the matches one time.
@@ -41776,8 +41783,12 @@ var CellComposerStore = class extends AbstractComposerStore {
41776
41783
  }
41777
41784
  stopEdition(direction) {
41778
41785
  if (this.canStopEdition()) {
41786
+ const { col, row } = this.currentEditedCell;
41779
41787
  this._stopEdition();
41780
- if (direction) this.model.selection.moveAnchorCell(direction, 1);
41788
+ if (direction) {
41789
+ this.model.selection.selectCell(col, row);
41790
+ this.model.selection.moveAnchorCell(direction, 1);
41791
+ }
41781
41792
  return;
41782
41793
  }
41783
41794
  const editedCell = this.currentEditedCell;
@@ -53786,9 +53797,11 @@ var PivotUIPlugin = class extends UIPlugin {
53786
53797
  this.refreshPivot(cmd.id);
53787
53798
  break;
53788
53799
  case "ADD_PIVOT":
53800
+ this.unusedPivots?.push(cmd.pivotId);
53789
53801
  this.setupPivot(cmd.pivotId);
53790
53802
  break;
53791
53803
  case "DUPLICATE_PIVOT":
53804
+ this.unusedPivots?.push(cmd.newPivotId);
53792
53805
  this.setupPivot(cmd.newPivotId);
53793
53806
  break;
53794
53807
  case "UPDATE_PIVOT":
@@ -53974,8 +53987,8 @@ var PivotUIPlugin = class extends UIPlugin {
53974
53987
  }
53975
53988
  }
53976
53989
  for (const pivotId of this.getters.getPivotIds()) {
53977
- const pivot = this.getters.getPivot(pivotId);
53978
- for (const measure of pivot.definition.measures) if (measure.computedBy) {
53990
+ const pivot = this.getters.getPivotCoreDefinition(pivotId);
53991
+ for (const measure of pivot.measures) if (measure.computedBy) {
53979
53992
  const { sheetId } = measure.computedBy;
53980
53993
  const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
53981
53994
  const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
@@ -66327,6 +66340,6 @@ const constants = {
66327
66340
  //#endregion
66328
66341
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
66329
66342
 
66330
- __info__.version = "18.0.69";
66331
- __info__.date = "2026-05-27T05:57:08.710Z";
66332
- __info__.hash = "50b85ba";
66343
+ __info__.version = "18.0.71";
66344
+ __info__.date = "2026-06-17T08:50:04.188Z";
66345
+ __info__.hash = "18d4601";
@@ -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.0.69
6
- * @date 2026-05-27T05:57:08.710Z
7
- * @hash 50b85ba
5
+ * @version 18.0.71
6
+ * @date 2026-06-17T08:50:04.188Z
7
+ * @hash 18d4601
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -3891,6 +3891,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
3891
3891
  //#endregion
3892
3892
  //#region src/helpers/format/format_tokenizer.ts
3893
3893
  function tokenizeFormat(str) {
3894
+ str = str.replace(/\s/g, " ");
3894
3895
  const chars = new TokenizingChars(str);
3895
3896
  const result = [];
3896
3897
  let currentFormatPart = [];
@@ -29528,11 +29529,10 @@ stores.inject(MyMetaStore, storeInstance);
29528
29529
  if (interactiveCreateTable(env, env.model.getters.getActiveSheetId()).isSuccessful) env.openSidePanel("TableSidePanel", {});
29529
29530
  };
29530
29531
  const DELETE_SELECTED_TABLE = (env) => {
29531
- const position = env.model.getters.getActivePosition();
29532
- const table = env.model.getters.getTable(position);
29532
+ const table = env.model.getters.getFirstTableInSelection();
29533
29533
  if (!table) return;
29534
29534
  env.model.dispatch("REMOVE_TABLE", {
29535
- sheetId: position.sheetId,
29535
+ sheetId: env.model.getters.getActiveSheetId(),
29536
29536
  target: [table.range.zone]
29537
29537
  });
29538
29538
  };
@@ -37219,10 +37219,10 @@ stores.inject(MyMetaStore, storeInstance);
37219
37219
  allSheetsMatches = [];
37220
37220
  activeSheetMatches = [];
37221
37221
  specificRangeMatches = [];
37222
+ selectedMatchPosition = null;
37222
37223
  currentSearchRegex = null;
37223
37224
  isSearchDirty = false;
37224
37225
  initialShowFormulaState;
37225
- preserveSelectedMatchIndex = false;
37226
37226
  irreplaceableMatchCount = 0;
37227
37227
  notificationStore = this.get(NotificationStore);
37228
37228
  selectedMatchIndex = null;
@@ -37326,7 +37326,10 @@ stores.inject(MyMetaStore, storeInstance);
37326
37326
  */
37327
37327
  _updateSearch(toSearch, searchOptions) {
37328
37328
  this.searchOptions = searchOptions;
37329
- if (toSearch !== this.toSearch) this.selectedMatchIndex = null;
37329
+ if (toSearch !== this.toSearch) {
37330
+ this.selectedMatchIndex = null;
37331
+ this.selectedMatchPosition = null;
37332
+ }
37330
37333
  this.toSearch = toSearch;
37331
37334
  this.currentSearchRegex = getSearchRegex(this.toSearch, this.searchOptions);
37332
37335
  this.refreshSearch();
@@ -37335,8 +37338,14 @@ stores.inject(MyMetaStore, storeInstance);
37335
37338
  * refresh the matches according to the current search options
37336
37339
  */
37337
37340
  refreshSearch(jumpToMatchSheet = true) {
37338
- if (!this.preserveSelectedMatchIndex) this.selectedMatchIndex = null;
37339
37341
  this.findMatches();
37342
+ if (this.selectedMatchPosition) if (this.selectedMatchPosition.sheetId !== this.getters.getActiveSheetId()) {
37343
+ this.selectedMatchIndex = null;
37344
+ this.selectedMatchPosition = null;
37345
+ } else {
37346
+ const index = this.searchMatches.findIndex((match) => match.sheetId === this.selectedMatchPosition?.sheetId && match.col === this.selectedMatchPosition?.col && match.row === this.selectedMatchPosition?.row);
37347
+ if (index !== -1) this.selectedMatchIndex = index;
37348
+ }
37340
37349
  this.selectNextCell(0, jumpToMatchSheet);
37341
37350
  }
37342
37351
  getSheetsInSearchOrder() {
@@ -37404,6 +37413,7 @@ stores.inject(MyMetaStore, storeInstance);
37404
37413
  const matches = this.searchMatches;
37405
37414
  if (!matches.length) {
37406
37415
  this.selectedMatchIndex = null;
37416
+ this.selectedMatchPosition = null;
37407
37417
  return;
37408
37418
  }
37409
37419
  let nextIndex;
@@ -37417,14 +37427,13 @@ stores.inject(MyMetaStore, storeInstance);
37417
37427
  } else nextIndex = this.selectedMatchIndex + indexChange;
37418
37428
  nextIndex = (nextIndex + matches.length) % matches.length;
37419
37429
  this.selectedMatchIndex = nextIndex;
37430
+ this.selectedMatchPosition = matches[this.selectedMatchIndex];
37420
37431
  const selectedMatch = matches[nextIndex];
37421
37432
  if (jumpToMatchSheet && this.getters.getActiveSheetId() !== selectedMatch.sheetId) {
37422
- this.preserveSelectedMatchIndex = true;
37423
37433
  this.model.dispatch("ACTIVATE_SHEET", {
37424
37434
  sheetIdFrom: this.getters.getActiveSheetId(),
37425
37435
  sheetIdTo: selectedMatch.sheetId
37426
37436
  });
37427
- this.preserveSelectedMatchIndex = false;
37428
37437
  this.isSearchDirty = false;
37429
37438
  }
37430
37439
  this.model.selection.getBackToDefault();
@@ -37435,14 +37444,12 @@ stores.inject(MyMetaStore, storeInstance);
37435
37444
  */
37436
37445
  replace() {
37437
37446
  if (this.selectedMatchIndex === null) return;
37438
- this.preserveSelectedMatchIndex = true;
37439
37447
  this.model.dispatch("REPLACE_SEARCH", {
37440
37448
  searchString: this.toSearch,
37441
37449
  replaceWith: this.toReplace,
37442
37450
  matches: [this.searchMatches[this.selectedMatchIndex]],
37443
37451
  searchOptions: this.searchOptions
37444
37452
  });
37445
- this.preserveSelectedMatchIndex = false;
37446
37453
  }
37447
37454
  /**
37448
37455
  * Apply the replace function to all the matches one time.
@@ -41778,8 +41785,12 @@ stores.inject(MyMetaStore, storeInstance);
41778
41785
  }
41779
41786
  stopEdition(direction) {
41780
41787
  if (this.canStopEdition()) {
41788
+ const { col, row } = this.currentEditedCell;
41781
41789
  this._stopEdition();
41782
- if (direction) this.model.selection.moveAnchorCell(direction, 1);
41790
+ if (direction) {
41791
+ this.model.selection.selectCell(col, row);
41792
+ this.model.selection.moveAnchorCell(direction, 1);
41793
+ }
41783
41794
  return;
41784
41795
  }
41785
41796
  const editedCell = this.currentEditedCell;
@@ -53788,9 +53799,11 @@ stores.inject(MyMetaStore, storeInstance);
53788
53799
  this.refreshPivot(cmd.id);
53789
53800
  break;
53790
53801
  case "ADD_PIVOT":
53802
+ this.unusedPivots?.push(cmd.pivotId);
53791
53803
  this.setupPivot(cmd.pivotId);
53792
53804
  break;
53793
53805
  case "DUPLICATE_PIVOT":
53806
+ this.unusedPivots?.push(cmd.newPivotId);
53794
53807
  this.setupPivot(cmd.newPivotId);
53795
53808
  break;
53796
53809
  case "UPDATE_PIVOT":
@@ -53976,8 +53989,8 @@ stores.inject(MyMetaStore, storeInstance);
53976
53989
  }
53977
53990
  }
53978
53991
  for (const pivotId of this.getters.getPivotIds()) {
53979
- const pivot = this.getters.getPivot(pivotId);
53980
- for (const measure of pivot.definition.measures) if (measure.computedBy) {
53992
+ const pivot = this.getters.getPivotCoreDefinition(pivotId);
53993
+ for (const measure of pivot.measures) if (measure.computedBy) {
53981
53994
  const { sheetId } = measure.computedBy;
53982
53995
  const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
53983
53996
  const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
@@ -66373,8 +66386,8 @@ exports.stores = stores;
66373
66386
  exports.tokenColors = tokenColors;
66374
66387
  exports.tokenize = tokenize;
66375
66388
 
66376
- __info__.version = "18.0.69";
66377
- __info__.date = "2026-05-27T05:57:08.710Z";
66378
- __info__.hash = "50b85ba";
66389
+ __info__.version = "18.0.71";
66390
+ __info__.date = "2026-06-17T08:50:04.188Z";
66391
+ __info__.hash = "18d4601";
66379
66392
 
66380
66393
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);