@odoo/o-spreadsheet 18.3.50 → 18.3.51

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.50
6
- * @date 2026-06-06T06:20:54.573Z
7
- * @hash d8ca64d
5
+ * @version 18.3.51
6
+ * @date 2026-06-17T08:49:41.496Z
7
+ * @hash 233f3ea
8
8
  */
9
9
 
10
10
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -42013,9 +42013,9 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42013
42013
  allSheetsMatches = [];
42014
42014
  activeSheetMatches = [];
42015
42015
  specificRangeMatches = [];
42016
+ selectedMatchPosition = null;
42016
42017
  currentSearchRegex = null;
42017
42018
  initialShowFormulaState;
42018
- preserveSelectedMatchIndex = false;
42019
42019
  irreplaceableMatchCount = 0;
42020
42020
  isSearchDirty = false;
42021
42021
  shouldFinalizeUpdateSelection = false;
@@ -42137,7 +42137,10 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42137
42137
  */
42138
42138
  _updateSearch(toSearch, searchOptions) {
42139
42139
  this.searchOptions = searchOptions;
42140
- if (toSearch !== this.toSearch) this.selectedMatchIndex = null;
42140
+ if (toSearch !== this.toSearch) {
42141
+ this.selectedMatchIndex = null;
42142
+ this.selectedMatchPosition = null;
42143
+ }
42141
42144
  this.toSearch = toSearch;
42142
42145
  this.currentSearchRegex = getSearchRegex(this.toSearch, this.searchOptions);
42143
42146
  this.refreshSearch({
@@ -42149,8 +42152,14 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42149
42152
  * refresh the matches according to the current search options
42150
42153
  */
42151
42154
  refreshSearch(options) {
42152
- if (!this.preserveSelectedMatchIndex) this.selectedMatchIndex = null;
42153
42155
  this.findMatches();
42156
+ if (this.selectedMatchPosition) if (this.selectedMatchPosition.sheetId !== this.getters.getActiveSheetId()) {
42157
+ this.selectedMatchIndex = null;
42158
+ this.selectedMatchPosition = null;
42159
+ } else {
42160
+ const index = this.searchMatches.findIndex((match) => match.sheetId === this.selectedMatchPosition?.sheetId && match.col === this.selectedMatchPosition?.col && match.row === this.selectedMatchPosition?.row);
42161
+ if (index !== -1) this.selectedMatchIndex = index;
42162
+ }
42154
42163
  this.selectNextCell(0, options);
42155
42164
  }
42156
42165
  getSheetsInSearchOrder() {
@@ -42218,6 +42227,7 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42218
42227
  const matches = this.searchMatches;
42219
42228
  if (!matches.length) {
42220
42229
  this.selectedMatchIndex = null;
42230
+ this.selectedMatchPosition = null;
42221
42231
  return;
42222
42232
  }
42223
42233
  let nextIndex;
@@ -42231,14 +42241,13 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42231
42241
  } else nextIndex = this.selectedMatchIndex + indexChange;
42232
42242
  nextIndex = (nextIndex + matches.length) % matches.length;
42233
42243
  this.selectedMatchIndex = nextIndex;
42244
+ this.selectedMatchPosition = matches[this.selectedMatchIndex];
42234
42245
  const selectedMatch = matches[nextIndex];
42235
42246
  if (options.jumpToMatchSheet && this.getters.getActiveSheetId() !== selectedMatch.sheetId) {
42236
- this.preserveSelectedMatchIndex = true;
42237
42247
  this.model.dispatch("ACTIVATE_SHEET", {
42238
42248
  sheetIdFrom: this.getters.getActiveSheetId(),
42239
42249
  sheetIdTo: selectedMatch.sheetId
42240
42250
  });
42241
- this.preserveSelectedMatchIndex = false;
42242
42251
  this.isSearchDirty = false;
42243
42252
  }
42244
42253
  this.model.selection.getBackToDefault();
@@ -42249,7 +42258,6 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42249
42258
  */
42250
42259
  replace() {
42251
42260
  if (this.selectedMatchIndex === null) return;
42252
- this.preserveSelectedMatchIndex = true;
42253
42261
  this.shouldFinalizeUpdateSelection = true;
42254
42262
  this.model.dispatch("REPLACE_SEARCH", {
42255
42263
  searchString: this.toSearch,
@@ -42257,7 +42265,6 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42257
42265
  matches: [this.searchMatches[this.selectedMatchIndex]],
42258
42266
  searchOptions: this.searchOptions
42259
42267
  });
42260
- this.preserveSelectedMatchIndex = false;
42261
42268
  }
42262
42269
  /**
42263
42270
  * Apply the replace function to all the matches one time.
@@ -46879,8 +46886,12 @@ var CellComposerStore = class extends AbstractComposerStore {
46879
46886
  }
46880
46887
  stopEdition(direction) {
46881
46888
  if (this.canStopEdition()) {
46889
+ const { col, row } = this.currentEditedCell;
46882
46890
  this._stopEdition();
46883
- if (direction) this.model.selection.moveAnchorCell(direction, 1);
46891
+ if (direction) {
46892
+ this.model.selection.selectCell(col, row);
46893
+ this.model.selection.moveAnchorCell(direction, 1);
46894
+ }
46884
46895
  return;
46885
46896
  }
46886
46897
  const editedCell = this.currentEditedCell;
@@ -72454,6 +72465,6 @@ exports.stores = stores;
72454
72465
  exports.tokenColors = tokenColors;
72455
72466
  exports.tokenize = tokenize;
72456
72467
 
72457
- __info__.version = "18.3.50";
72458
- __info__.date = "2026-06-06T06:20:54.573Z";
72459
- __info__.hash = "d8ca64d";
72468
+ __info__.version = "18.3.51";
72469
+ __info__.date = "2026-06-17T08:49:41.496Z";
72470
+ __info__.hash = "233f3ea";
@@ -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.50
6
- * @date 2026-06-06T06:20:55.876Z
7
- * @hash d8ca64d
5
+ * @version 18.3.51
6
+ * @date 2026-06-17T08:49:43.226Z
7
+ * @hash 233f3ea
8
8
  */
9
9
  /* Originates from src/components/top_bar/top_bar.scss */
10
10
  @media (max-width: 900px) {
@@ -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.50
6
- * @date 2026-06-06T06:20:54.573Z
7
- * @hash d8ca64d
5
+ * @version 18.3.51
6
+ * @date 2026-06-17T08:49:41.496Z
7
+ * @hash 233f3ea
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";
@@ -42012,9 +42012,9 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42012
42012
  allSheetsMatches = [];
42013
42013
  activeSheetMatches = [];
42014
42014
  specificRangeMatches = [];
42015
+ selectedMatchPosition = null;
42015
42016
  currentSearchRegex = null;
42016
42017
  initialShowFormulaState;
42017
- preserveSelectedMatchIndex = false;
42018
42018
  irreplaceableMatchCount = 0;
42019
42019
  isSearchDirty = false;
42020
42020
  shouldFinalizeUpdateSelection = false;
@@ -42136,7 +42136,10 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42136
42136
  */
42137
42137
  _updateSearch(toSearch, searchOptions) {
42138
42138
  this.searchOptions = searchOptions;
42139
- if (toSearch !== this.toSearch) this.selectedMatchIndex = null;
42139
+ if (toSearch !== this.toSearch) {
42140
+ this.selectedMatchIndex = null;
42141
+ this.selectedMatchPosition = null;
42142
+ }
42140
42143
  this.toSearch = toSearch;
42141
42144
  this.currentSearchRegex = getSearchRegex(this.toSearch, this.searchOptions);
42142
42145
  this.refreshSearch({
@@ -42148,8 +42151,14 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42148
42151
  * refresh the matches according to the current search options
42149
42152
  */
42150
42153
  refreshSearch(options) {
42151
- if (!this.preserveSelectedMatchIndex) this.selectedMatchIndex = null;
42152
42154
  this.findMatches();
42155
+ if (this.selectedMatchPosition) if (this.selectedMatchPosition.sheetId !== this.getters.getActiveSheetId()) {
42156
+ this.selectedMatchIndex = null;
42157
+ this.selectedMatchPosition = null;
42158
+ } else {
42159
+ const index = this.searchMatches.findIndex((match) => match.sheetId === this.selectedMatchPosition?.sheetId && match.col === this.selectedMatchPosition?.col && match.row === this.selectedMatchPosition?.row);
42160
+ if (index !== -1) this.selectedMatchIndex = index;
42161
+ }
42153
42162
  this.selectNextCell(0, options);
42154
42163
  }
42155
42164
  getSheetsInSearchOrder() {
@@ -42217,6 +42226,7 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42217
42226
  const matches = this.searchMatches;
42218
42227
  if (!matches.length) {
42219
42228
  this.selectedMatchIndex = null;
42229
+ this.selectedMatchPosition = null;
42220
42230
  return;
42221
42231
  }
42222
42232
  let nextIndex;
@@ -42230,14 +42240,13 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42230
42240
  } else nextIndex = this.selectedMatchIndex + indexChange;
42231
42241
  nextIndex = (nextIndex + matches.length) % matches.length;
42232
42242
  this.selectedMatchIndex = nextIndex;
42243
+ this.selectedMatchPosition = matches[this.selectedMatchIndex];
42233
42244
  const selectedMatch = matches[nextIndex];
42234
42245
  if (options.jumpToMatchSheet && this.getters.getActiveSheetId() !== selectedMatch.sheetId) {
42235
- this.preserveSelectedMatchIndex = true;
42236
42246
  this.model.dispatch("ACTIVATE_SHEET", {
42237
42247
  sheetIdFrom: this.getters.getActiveSheetId(),
42238
42248
  sheetIdTo: selectedMatch.sheetId
42239
42249
  });
42240
- this.preserveSelectedMatchIndex = false;
42241
42250
  this.isSearchDirty = false;
42242
42251
  }
42243
42252
  this.model.selection.getBackToDefault();
@@ -42248,7 +42257,6 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42248
42257
  */
42249
42258
  replace() {
42250
42259
  if (this.selectedMatchIndex === null) return;
42251
- this.preserveSelectedMatchIndex = true;
42252
42260
  this.shouldFinalizeUpdateSelection = true;
42253
42261
  this.model.dispatch("REPLACE_SEARCH", {
42254
42262
  searchString: this.toSearch,
@@ -42256,7 +42264,6 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
42256
42264
  matches: [this.searchMatches[this.selectedMatchIndex]],
42257
42265
  searchOptions: this.searchOptions
42258
42266
  });
42259
- this.preserveSelectedMatchIndex = false;
42260
42267
  }
42261
42268
  /**
42262
42269
  * Apply the replace function to all the matches one time.
@@ -46878,8 +46885,12 @@ var CellComposerStore = class extends AbstractComposerStore {
46878
46885
  }
46879
46886
  stopEdition(direction) {
46880
46887
  if (this.canStopEdition()) {
46888
+ const { col, row } = this.currentEditedCell;
46881
46889
  this._stopEdition();
46882
- if (direction) this.model.selection.moveAnchorCell(direction, 1);
46890
+ if (direction) {
46891
+ this.model.selection.selectCell(col, row);
46892
+ this.model.selection.moveAnchorCell(direction, 1);
46893
+ }
46883
46894
  return;
46884
46895
  }
46885
46896
  const editedCell = this.currentEditedCell;
@@ -72222,6 +72233,6 @@ const chartHelpers = {
72222
72233
  //#endregion
72223
72234
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, CommandResult, CorePlugin, CoreViewPlugin, DispatchResult, EvaluationError, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, chartHelpers, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
72224
72235
 
72225
- __info__.version = "18.3.50";
72226
- __info__.date = "2026-06-06T06:20:54.573Z";
72227
- __info__.hash = "d8ca64d";
72236
+ __info__.version = "18.3.51";
72237
+ __info__.date = "2026-06-17T08:49:41.496Z";
72238
+ __info__.hash = "233f3ea";
@@ -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.50
6
- * @date 2026-06-06T06:20:54.573Z
7
- * @hash d8ca64d
5
+ * @version 18.3.51
6
+ * @date 2026-06-17T08:49:41.496Z
7
+ * @hash 233f3ea
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -42014,9 +42014,9 @@ stores.inject(MyMetaStore, storeInstance);
42014
42014
  allSheetsMatches = [];
42015
42015
  activeSheetMatches = [];
42016
42016
  specificRangeMatches = [];
42017
+ selectedMatchPosition = null;
42017
42018
  currentSearchRegex = null;
42018
42019
  initialShowFormulaState;
42019
- preserveSelectedMatchIndex = false;
42020
42020
  irreplaceableMatchCount = 0;
42021
42021
  isSearchDirty = false;
42022
42022
  shouldFinalizeUpdateSelection = false;
@@ -42138,7 +42138,10 @@ stores.inject(MyMetaStore, storeInstance);
42138
42138
  */
42139
42139
  _updateSearch(toSearch, searchOptions) {
42140
42140
  this.searchOptions = searchOptions;
42141
- if (toSearch !== this.toSearch) this.selectedMatchIndex = null;
42141
+ if (toSearch !== this.toSearch) {
42142
+ this.selectedMatchIndex = null;
42143
+ this.selectedMatchPosition = null;
42144
+ }
42142
42145
  this.toSearch = toSearch;
42143
42146
  this.currentSearchRegex = getSearchRegex(this.toSearch, this.searchOptions);
42144
42147
  this.refreshSearch({
@@ -42150,8 +42153,14 @@ stores.inject(MyMetaStore, storeInstance);
42150
42153
  * refresh the matches according to the current search options
42151
42154
  */
42152
42155
  refreshSearch(options) {
42153
- if (!this.preserveSelectedMatchIndex) this.selectedMatchIndex = null;
42154
42156
  this.findMatches();
42157
+ if (this.selectedMatchPosition) if (this.selectedMatchPosition.sheetId !== this.getters.getActiveSheetId()) {
42158
+ this.selectedMatchIndex = null;
42159
+ this.selectedMatchPosition = null;
42160
+ } else {
42161
+ const index = this.searchMatches.findIndex((match) => match.sheetId === this.selectedMatchPosition?.sheetId && match.col === this.selectedMatchPosition?.col && match.row === this.selectedMatchPosition?.row);
42162
+ if (index !== -1) this.selectedMatchIndex = index;
42163
+ }
42155
42164
  this.selectNextCell(0, options);
42156
42165
  }
42157
42166
  getSheetsInSearchOrder() {
@@ -42219,6 +42228,7 @@ stores.inject(MyMetaStore, storeInstance);
42219
42228
  const matches = this.searchMatches;
42220
42229
  if (!matches.length) {
42221
42230
  this.selectedMatchIndex = null;
42231
+ this.selectedMatchPosition = null;
42222
42232
  return;
42223
42233
  }
42224
42234
  let nextIndex;
@@ -42232,14 +42242,13 @@ stores.inject(MyMetaStore, storeInstance);
42232
42242
  } else nextIndex = this.selectedMatchIndex + indexChange;
42233
42243
  nextIndex = (nextIndex + matches.length) % matches.length;
42234
42244
  this.selectedMatchIndex = nextIndex;
42245
+ this.selectedMatchPosition = matches[this.selectedMatchIndex];
42235
42246
  const selectedMatch = matches[nextIndex];
42236
42247
  if (options.jumpToMatchSheet && this.getters.getActiveSheetId() !== selectedMatch.sheetId) {
42237
- this.preserveSelectedMatchIndex = true;
42238
42248
  this.model.dispatch("ACTIVATE_SHEET", {
42239
42249
  sheetIdFrom: this.getters.getActiveSheetId(),
42240
42250
  sheetIdTo: selectedMatch.sheetId
42241
42251
  });
42242
- this.preserveSelectedMatchIndex = false;
42243
42252
  this.isSearchDirty = false;
42244
42253
  }
42245
42254
  this.model.selection.getBackToDefault();
@@ -42250,7 +42259,6 @@ stores.inject(MyMetaStore, storeInstance);
42250
42259
  */
42251
42260
  replace() {
42252
42261
  if (this.selectedMatchIndex === null) return;
42253
- this.preserveSelectedMatchIndex = true;
42254
42262
  this.shouldFinalizeUpdateSelection = true;
42255
42263
  this.model.dispatch("REPLACE_SEARCH", {
42256
42264
  searchString: this.toSearch,
@@ -42258,7 +42266,6 @@ stores.inject(MyMetaStore, storeInstance);
42258
42266
  matches: [this.searchMatches[this.selectedMatchIndex]],
42259
42267
  searchOptions: this.searchOptions
42260
42268
  });
42261
- this.preserveSelectedMatchIndex = false;
42262
42269
  }
42263
42270
  /**
42264
42271
  * Apply the replace function to all the matches one time.
@@ -46880,8 +46887,12 @@ stores.inject(MyMetaStore, storeInstance);
46880
46887
  }
46881
46888
  stopEdition(direction) {
46882
46889
  if (this.canStopEdition()) {
46890
+ const { col, row } = this.currentEditedCell;
46883
46891
  this._stopEdition();
46884
- if (direction) this.model.selection.moveAnchorCell(direction, 1);
46892
+ if (direction) {
46893
+ this.model.selection.selectCell(col, row);
46894
+ this.model.selection.moveAnchorCell(direction, 1);
46895
+ }
46885
46896
  return;
46886
46897
  }
46887
46898
  const editedCell = this.currentEditedCell;
@@ -72271,8 +72282,8 @@ exports.stores = stores;
72271
72282
  exports.tokenColors = tokenColors;
72272
72283
  exports.tokenize = tokenize;
72273
72284
 
72274
- __info__.version = "18.3.50";
72275
- __info__.date = "2026-06-06T06:20:54.573Z";
72276
- __info__.hash = "d8ca64d";
72285
+ __info__.version = "18.3.51";
72286
+ __info__.date = "2026-06-17T08:49:41.496Z";
72287
+ __info__.hash = "233f3ea";
72277
72288
 
72278
72289
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
@@ -1252,7 +1252,7 @@ stores.inject(MyMetaStore, storeInstance);
1252
1252
  }
1253
1253
  }
1254
1254
  }
1255
- `;var NR=class extends t.Component{static template=`o-spreadsheet-DataValidationPreview`;static props={onClick:Function,rule:Object};ref=(0,t.useRef)(`dvPreview`);setup(){cR(this.ref,this)}deleteDataValidation(){let e=this.env.model.getters.getActiveSheetId();this.env.model.dispatch(`REMOVE_DATA_VALIDATION_RULE`,{sheetId:e,id:this.props.rule.id})}get highlights(){return this.props.rule.ranges.map(e=>({sheetId:this.env.model.getters.getActiveSheetId(),zone:e.zone,color:_,fillAlpha:.06}))}get rangesString(){let e=this.env.model.getters.getActiveSheetId();return this.props.rule.ranges.map(t=>this.env.model.getters.getRangeString(t,e)).join(`, `)}get descriptionString(){return $.get(this.props.rule.criterion.type).getPreview(this.props.rule.criterion,this.env.model.getters)}},PR=class extends t.Component{static template=`o-spreadsheet-DataValidationPanel`;static props={onCloseSidePanel:Function};static components={DataValidationPreview:NR,DataValidationEditor:MR};state=(0,t.useState)({mode:`list`,activeRule:void 0});onPreviewClick(e){let t=this.env.model.getters.getActiveSheetId(),n=this.env.model.getters.getDataValidationRule(t,e);n&&(this.state.mode=`edit`,this.state.activeRule=n)}addDataValidationRule(){this.state.mode=`edit`,this.state.activeRule=void 0}onExitEditMode(){this.state.mode=`list`,this.state.activeRule=void 0}localizeDVRule(e){return e&&Xl(e,this.env.model.getters.getLocale())}get validationRules(){let e=this.env.model.getters.getActiveSheetId();return this.env.model.getters.getDataValidationRules(e)}};let FR=`#8B008B`;var IR=class extends ef{mutators=[`updateSearchOptions`,`updateSearchContent`,`searchFormulas`,`selectPreviousMatch`,`selectNextMatch`,`replace`];allSheetsMatches=[];activeSheetMatches=[];specificRangeMatches=[];currentSearchRegex=null;initialShowFormulaState;preserveSelectedMatchIndex=!1;irreplaceableMatchCount=0;isSearchDirty=!1;shouldFinalizeUpdateSelection=!1;notificationStore=this.get(dC);selectedMatchIndex=null;toSearch=``;toReplace=``;searchOptions={matchCase:!1,exactMatch:!1,searchFormulas:!1,searchScope:`activeSheet`,specificRange:void 0};constructor(e){super(e),this.initialShowFormulaState=this.model.getters.shouldShowFormulas(),this.searchOptions.searchFormulas=this.initialShowFormulaState;let t=e(uC);t.register(this),this.onDispose(()=>{this.model.dispatch(`SET_FORMULA_VISIBILITY`,{show:this.initialShowFormulaState}),t.unRegister(this)})}get searchMatches(){switch(this.searchOptions.searchScope){case`allSheets`:return this.allSheetsMatches;case`activeSheet`:return this.activeSheetMatches;case`specificRange`:return this.specificRangeMatches}}updateSearchContent(e){this._updateSearch(e,this.searchOptions)}updateSearchOptions(e){this._updateSearch(this.toSearch,{...this.searchOptions,...e})}searchFormulas(e){this.model.dispatch(`SET_FORMULA_VISIBILITY`,{show:e}),this.updateSearchOptions({searchFormulas:e})}selectPreviousMatch(){this.selectNextCell(-1,{jumpToMatchSheet:!0,updateSelection:!0})}selectNextMatch(){this.selectNextCell(1,{jumpToMatchSheet:!0,updateSelection:!0})}handle(e){switch(e.type){case`SET_FORMULA_VISIBILITY`:this.updateSearchOptions({searchFormulas:e.show});break;case`UNDO`:case`REDO`:case`REMOVE_TABLE`:case`UPDATE_FILTER`:case`REMOVE_COLUMNS_ROWS`:case`HIDE_COLUMNS_ROWS`:case`UNHIDE_COLUMNS_ROWS`:case`ADD_COLUMNS_ROWS`:case`EVALUATE_CELLS`:case`UPDATE_CELL`:this.isSearchDirty=!0;break;case`ACTIVATE_SHEET`:this.isSearchDirty=!0,this.shouldFinalizeUpdateSelection=!0,this.searchOptions.specificRange&&(this.searchOptions.specificRange={...this.searchOptions.specificRange,sheetId:this.getters.getActiveSheetId()});break;case`DELETE_SHEET`:this.searchOptions.searchScope===`specificRange`&&this.searchOptions.specificRange?.sheetId===e.sheetId&&(this.searchOptions={...this.searchOptions,specificRange:void 0}),this.isSearchDirty=!0;break;case`REPLACE_SEARCH`:for(let t of e.matches)this.replaceMatch(t,e.searchString,e.replaceWith,e.searchOptions);this.irreplaceableMatchCount>0&&this.showReplaceWarningMessage(e.matches.length,this.irreplaceableMatchCount),this.irreplaceableMatchCount=0;break}}finalize(){this.isSearchDirty&&=(this.refreshSearch({jumpToMatchSheet:!1,updateSelection:this.shouldFinalizeUpdateSelection}),this.shouldFinalizeUpdateSelection=!1,!1)}get allSheetMatchesCount(){return this.allSheetsMatches.length}get activeSheetMatchesCount(){return this.activeSheetMatches.length}get specificRangeMatchesCount(){return this.specificRangeMatches.length}_updateSearch(e,t){this.searchOptions=t,e!==this.toSearch&&(this.selectedMatchIndex=null),this.toSearch=e,this.currentSearchRegex=qt(this.toSearch,this.searchOptions),this.refreshSearch({jumpToMatchSheet:!0,updateSelection:!0})}refreshSearch(e){this.preserveSelectedMatchIndex||(this.selectedMatchIndex=null),this.findMatches(),this.selectNextCell(0,e)}getSheetsInSearchOrder(){switch(this.searchOptions.searchScope){case`allSheets`:let e=this.getters.getSheetIds(),t=e.findIndex(e=>e===this.getters.getActiveSheetId());return[e[t],...e.slice(t+1),...e.slice(0,t)];case`activeSheet`:return[this.getters.getActiveSheetId()];case`specificRange`:let n=this.searchOptions.specificRange;return n&&n?[n.sheetId]:[]}}findMatches(){let e=[];if(this.toSearch)for(let t of this.getters.getSheetIds())e.push(...this.findMatchesInSheet(t));if(this.allSheetsMatches=e,this.activeSheetMatches=e.filter(e=>e.sheetId===this.getters.getActiveSheetId()),this.searchOptions.specificRange){let{sheetId:t,zone:n}=this.searchOptions.specificRange;this.specificRangeMatches=e.filter(e=>e.sheetId===t&&vr(e.col,e.row,n))}else this.specificRangeMatches=[]}findMatchesInSheet(e){let t=[],{left:n,right:r,top:i,bottom:a}=this.getters.getSheetZone(e);for(let o=i;o<=a;o++)for(let i=n;i<=r;i++){let n=this.getters.isColHidden(e,i),r=this.getters.isRowHidden(e,o);if(n||r)continue;let a={sheetId:e,col:i,row:o};if(this.currentSearchRegex?.test(this.getSearchableString(a))){let n={sheetId:e,col:i,row:o};t.push(n)}}return t}selectNextCell(e,t){let n=this.searchMatches;if(!n.length){this.selectedMatchIndex=null;return}let r;if(this.selectedMatchIndex===null){let e=-1;for(let t of this.getSheetsInSearchOrder())if(e=n.findIndex(e=>e.sheetId===t),e!==-1)break;r=e}else r=this.selectedMatchIndex+e;r=(r+n.length)%n.length,this.selectedMatchIndex=r;let i=n[r];t.jumpToMatchSheet&&this.getters.getActiveSheetId()!==i.sheetId&&(this.preserveSelectedMatchIndex=!0,this.model.dispatch(`ACTIVATE_SHEET`,{sheetIdFrom:this.getters.getActiveSheetId(),sheetIdTo:i.sheetId}),this.preserveSelectedMatchIndex=!1,this.isSearchDirty=!1),this.model.selection.getBackToDefault(),t.updateSelection&&this.model.selection.selectCell(i.col,i.row)}replace(){this.selectedMatchIndex!==null&&(this.preserveSelectedMatchIndex=!0,this.shouldFinalizeUpdateSelection=!0,this.model.dispatch(`REPLACE_SEARCH`,{searchString:this.toSearch,replaceWith:this.toReplace,matches:[this.searchMatches[this.selectedMatchIndex]],searchOptions:this.searchOptions}),this.preserveSelectedMatchIndex=!1)}replaceAll(){this.model.dispatch(`REPLACE_SEARCH`,{searchString:this.toSearch,replaceWith:this.toReplace,matches:this.searchMatches,searchOptions:this.searchOptions})}showReplaceWarningMessage(e,t){let n=e-t;n===0?this.notificationStore.notifyUser({type:`warning`,sticky:!1,text:O(`Match(es) cannot be replaced as they are part of a formula.`)}):this.notificationStore.notifyUser({type:`warning`,sticky:!1,text:O(`%(replaceable_count)s match(es) replaced. %(irreplaceable_count)s match(es) cannot be replaced as they are part of a formula.`,{replaceable_count:n,irreplaceable_count:t})})}replaceMatch(e,t,n,r){let i=this.getters.getCell(e);if(!i?.content)return;if(i?.isFormula&&!r.searchFormulas){this.irreplaceableMatchCount++;return}let a=qt(t,r),o=new RegExp(a.source,a.flags+`g`),s=Ll(this.getters.getCellText(e,{showFormula:r.searchFormulas}).replace(o,n),this.getters.getLocale());this.model.dispatch(`UPDATE_CELL`,{...e,content:s})}getSearchableString(e){return this.getters.getCellText(e,{showFormula:this.searchOptions.searchFormulas})}get highlights(){let e=[],t=this.getters.getActiveSheetId();for(let[n,r]of this.searchMatches.entries()){if(r.sheetId!==t)continue;let i=E(r),a=this.getters.expandZone(t,i),{width:o,height:s}=this.getters.getVisibleRect(a);o>0&&s>0&&e.push({sheetId:t,zone:a,color:FR,noBorder:n!==this.selectedMatchIndex,thinLine:!0,fillAlpha:.2})}if(this.searchOptions.searchScope===`specificRange`){let n=this.searchOptions.specificRange;n&&n.sheetId===t&&e.push({sheetId:t,zone:n.zone,color:FR,noFill:!0,thinLine:!0})}return e}};H`
1255
+ `;var NR=class extends t.Component{static template=`o-spreadsheet-DataValidationPreview`;static props={onClick:Function,rule:Object};ref=(0,t.useRef)(`dvPreview`);setup(){cR(this.ref,this)}deleteDataValidation(){let e=this.env.model.getters.getActiveSheetId();this.env.model.dispatch(`REMOVE_DATA_VALIDATION_RULE`,{sheetId:e,id:this.props.rule.id})}get highlights(){return this.props.rule.ranges.map(e=>({sheetId:this.env.model.getters.getActiveSheetId(),zone:e.zone,color:_,fillAlpha:.06}))}get rangesString(){let e=this.env.model.getters.getActiveSheetId();return this.props.rule.ranges.map(t=>this.env.model.getters.getRangeString(t,e)).join(`, `)}get descriptionString(){return $.get(this.props.rule.criterion.type).getPreview(this.props.rule.criterion,this.env.model.getters)}},PR=class extends t.Component{static template=`o-spreadsheet-DataValidationPanel`;static props={onCloseSidePanel:Function};static components={DataValidationPreview:NR,DataValidationEditor:MR};state=(0,t.useState)({mode:`list`,activeRule:void 0});onPreviewClick(e){let t=this.env.model.getters.getActiveSheetId(),n=this.env.model.getters.getDataValidationRule(t,e);n&&(this.state.mode=`edit`,this.state.activeRule=n)}addDataValidationRule(){this.state.mode=`edit`,this.state.activeRule=void 0}onExitEditMode(){this.state.mode=`list`,this.state.activeRule=void 0}localizeDVRule(e){return e&&Xl(e,this.env.model.getters.getLocale())}get validationRules(){let e=this.env.model.getters.getActiveSheetId();return this.env.model.getters.getDataValidationRules(e)}};let FR=`#8B008B`;var IR=class extends ef{mutators=[`updateSearchOptions`,`updateSearchContent`,`searchFormulas`,`selectPreviousMatch`,`selectNextMatch`,`replace`];allSheetsMatches=[];activeSheetMatches=[];specificRangeMatches=[];selectedMatchPosition=null;currentSearchRegex=null;initialShowFormulaState;irreplaceableMatchCount=0;isSearchDirty=!1;shouldFinalizeUpdateSelection=!1;notificationStore=this.get(dC);selectedMatchIndex=null;toSearch=``;toReplace=``;searchOptions={matchCase:!1,exactMatch:!1,searchFormulas:!1,searchScope:`activeSheet`,specificRange:void 0};constructor(e){super(e),this.initialShowFormulaState=this.model.getters.shouldShowFormulas(),this.searchOptions.searchFormulas=this.initialShowFormulaState;let t=e(uC);t.register(this),this.onDispose(()=>{this.model.dispatch(`SET_FORMULA_VISIBILITY`,{show:this.initialShowFormulaState}),t.unRegister(this)})}get searchMatches(){switch(this.searchOptions.searchScope){case`allSheets`:return this.allSheetsMatches;case`activeSheet`:return this.activeSheetMatches;case`specificRange`:return this.specificRangeMatches}}updateSearchContent(e){this._updateSearch(e,this.searchOptions)}updateSearchOptions(e){this._updateSearch(this.toSearch,{...this.searchOptions,...e})}searchFormulas(e){this.model.dispatch(`SET_FORMULA_VISIBILITY`,{show:e}),this.updateSearchOptions({searchFormulas:e})}selectPreviousMatch(){this.selectNextCell(-1,{jumpToMatchSheet:!0,updateSelection:!0})}selectNextMatch(){this.selectNextCell(1,{jumpToMatchSheet:!0,updateSelection:!0})}handle(e){switch(e.type){case`SET_FORMULA_VISIBILITY`:this.updateSearchOptions({searchFormulas:e.show});break;case`UNDO`:case`REDO`:case`REMOVE_TABLE`:case`UPDATE_FILTER`:case`REMOVE_COLUMNS_ROWS`:case`HIDE_COLUMNS_ROWS`:case`UNHIDE_COLUMNS_ROWS`:case`ADD_COLUMNS_ROWS`:case`EVALUATE_CELLS`:case`UPDATE_CELL`:this.isSearchDirty=!0;break;case`ACTIVATE_SHEET`:this.isSearchDirty=!0,this.shouldFinalizeUpdateSelection=!0,this.searchOptions.specificRange&&(this.searchOptions.specificRange={...this.searchOptions.specificRange,sheetId:this.getters.getActiveSheetId()});break;case`DELETE_SHEET`:this.searchOptions.searchScope===`specificRange`&&this.searchOptions.specificRange?.sheetId===e.sheetId&&(this.searchOptions={...this.searchOptions,specificRange:void 0}),this.isSearchDirty=!0;break;case`REPLACE_SEARCH`:for(let t of e.matches)this.replaceMatch(t,e.searchString,e.replaceWith,e.searchOptions);this.irreplaceableMatchCount>0&&this.showReplaceWarningMessage(e.matches.length,this.irreplaceableMatchCount),this.irreplaceableMatchCount=0;break}}finalize(){this.isSearchDirty&&=(this.refreshSearch({jumpToMatchSheet:!1,updateSelection:this.shouldFinalizeUpdateSelection}),this.shouldFinalizeUpdateSelection=!1,!1)}get allSheetMatchesCount(){return this.allSheetsMatches.length}get activeSheetMatchesCount(){return this.activeSheetMatches.length}get specificRangeMatchesCount(){return this.specificRangeMatches.length}_updateSearch(e,t){this.searchOptions=t,e!==this.toSearch&&(this.selectedMatchIndex=null,this.selectedMatchPosition=null),this.toSearch=e,this.currentSearchRegex=qt(this.toSearch,this.searchOptions),this.refreshSearch({jumpToMatchSheet:!0,updateSelection:!0})}refreshSearch(e){if(this.findMatches(),this.selectedMatchPosition)if(this.selectedMatchPosition.sheetId!==this.getters.getActiveSheetId())this.selectedMatchIndex=null,this.selectedMatchPosition=null;else{let e=this.searchMatches.findIndex(e=>e.sheetId===this.selectedMatchPosition?.sheetId&&e.col===this.selectedMatchPosition?.col&&e.row===this.selectedMatchPosition?.row);e!==-1&&(this.selectedMatchIndex=e)}this.selectNextCell(0,e)}getSheetsInSearchOrder(){switch(this.searchOptions.searchScope){case`allSheets`:let e=this.getters.getSheetIds(),t=e.findIndex(e=>e===this.getters.getActiveSheetId());return[e[t],...e.slice(t+1),...e.slice(0,t)];case`activeSheet`:return[this.getters.getActiveSheetId()];case`specificRange`:let n=this.searchOptions.specificRange;return n&&n?[n.sheetId]:[]}}findMatches(){let e=[];if(this.toSearch)for(let t of this.getters.getSheetIds())e.push(...this.findMatchesInSheet(t));if(this.allSheetsMatches=e,this.activeSheetMatches=e.filter(e=>e.sheetId===this.getters.getActiveSheetId()),this.searchOptions.specificRange){let{sheetId:t,zone:n}=this.searchOptions.specificRange;this.specificRangeMatches=e.filter(e=>e.sheetId===t&&vr(e.col,e.row,n))}else this.specificRangeMatches=[]}findMatchesInSheet(e){let t=[],{left:n,right:r,top:i,bottom:a}=this.getters.getSheetZone(e);for(let o=i;o<=a;o++)for(let i=n;i<=r;i++){let n=this.getters.isColHidden(e,i),r=this.getters.isRowHidden(e,o);if(n||r)continue;let a={sheetId:e,col:i,row:o};if(this.currentSearchRegex?.test(this.getSearchableString(a))){let n={sheetId:e,col:i,row:o};t.push(n)}}return t}selectNextCell(e,t){let n=this.searchMatches;if(!n.length){this.selectedMatchIndex=null,this.selectedMatchPosition=null;return}let r;if(this.selectedMatchIndex===null){let e=-1;for(let t of this.getSheetsInSearchOrder())if(e=n.findIndex(e=>e.sheetId===t),e!==-1)break;r=e}else r=this.selectedMatchIndex+e;r=(r+n.length)%n.length,this.selectedMatchIndex=r,this.selectedMatchPosition=n[this.selectedMatchIndex];let i=n[r];t.jumpToMatchSheet&&this.getters.getActiveSheetId()!==i.sheetId&&(this.model.dispatch(`ACTIVATE_SHEET`,{sheetIdFrom:this.getters.getActiveSheetId(),sheetIdTo:i.sheetId}),this.isSearchDirty=!1),this.model.selection.getBackToDefault(),t.updateSelection&&this.model.selection.selectCell(i.col,i.row)}replace(){this.selectedMatchIndex!==null&&(this.shouldFinalizeUpdateSelection=!0,this.model.dispatch(`REPLACE_SEARCH`,{searchString:this.toSearch,replaceWith:this.toReplace,matches:[this.searchMatches[this.selectedMatchIndex]],searchOptions:this.searchOptions}))}replaceAll(){this.model.dispatch(`REPLACE_SEARCH`,{searchString:this.toSearch,replaceWith:this.toReplace,matches:this.searchMatches,searchOptions:this.searchOptions})}showReplaceWarningMessage(e,t){let n=e-t;n===0?this.notificationStore.notifyUser({type:`warning`,sticky:!1,text:O(`Match(es) cannot be replaced as they are part of a formula.`)}):this.notificationStore.notifyUser({type:`warning`,sticky:!1,text:O(`%(replaceable_count)s match(es) replaced. %(irreplaceable_count)s match(es) cannot be replaced as they are part of a formula.`,{replaceable_count:n,irreplaceable_count:t})})}replaceMatch(e,t,n,r){let i=this.getters.getCell(e);if(!i?.content)return;if(i?.isFormula&&!r.searchFormulas){this.irreplaceableMatchCount++;return}let a=qt(t,r),o=new RegExp(a.source,a.flags+`g`),s=Ll(this.getters.getCellText(e,{showFormula:r.searchFormulas}).replace(o,n),this.getters.getLocale());this.model.dispatch(`UPDATE_CELL`,{...e,content:s})}getSearchableString(e){return this.getters.getCellText(e,{showFormula:this.searchOptions.searchFormulas})}get highlights(){let e=[],t=this.getters.getActiveSheetId();for(let[n,r]of this.searchMatches.entries()){if(r.sheetId!==t)continue;let i=E(r),a=this.getters.expandZone(t,i),{width:o,height:s}=this.getters.getVisibleRect(a);o>0&&s>0&&e.push({sheetId:t,zone:a,color:FR,noBorder:n!==this.selectedMatchIndex,thinLine:!0,fillAlpha:.2})}if(this.searchOptions.searchScope===`specificRange`){let n=this.searchOptions.specificRange;n&&n.sheetId===t&&e.push({sheetId:t,zone:n.zone,color:FR,noFill:!0,thinLine:!0})}return e}};H`
1256
1256
  .o-find-and-replace {
1257
1257
  outline: none;
1258
1258
  height: 100%;
@@ -1631,7 +1631,7 @@ stores.inject(MyMetaStore, storeInstance);
1631
1631
  color: white;
1632
1632
  pointer-events: none;
1633
1633
  }
1634
- `;var gB=class extends t.Component{static template=`o-spreadsheet-ClientTag`;static props={active:Boolean,name:String,color:String,col:Number,row:Number};get tagStyle(){let{col:e,row:t,color:n}=this.props,{height:r}=this.env.model.getters.getSheetViewDimensionWithHeaders(),{x:i,y:a}=this.env.model.getters.getVisibleRect({left:e,top:t,right:e,bottom:t});return U({bottom:`${r-a+15}px`,left:`${i-1}px`,border:`1px solid ${n}`,"background-color":n})}};let _B=O(`The cell you are trying to edit has been deleted.`);var vB=class extends hC{canStopEdition(){return this.editionMode===`inactive`?!0:this.checkDataValidation()}stopEdition(e){if(this.canStopEdition()){this._stopEdition(),e&&this.model.selection.moveAnchorCell(e,1);return}let t=this.currentEditedCell,n=T(t.col,t.row),r=this.getters.getValidationRuleForCell(t);if(!r)return;let i=$.get(r.criterion.type).getErrorString(r.criterion,this.getters,t.sheetId);this.notificationStore.raiseError(O(`The data you entered in %s violates the data validation rule set on the cell:
1634
+ `;var gB=class extends t.Component{static template=`o-spreadsheet-ClientTag`;static props={active:Boolean,name:String,color:String,col:Number,row:Number};get tagStyle(){let{col:e,row:t,color:n}=this.props,{height:r}=this.env.model.getters.getSheetViewDimensionWithHeaders(),{x:i,y:a}=this.env.model.getters.getVisibleRect({left:e,top:t,right:e,bottom:t});return U({bottom:`${r-a+15}px`,left:`${i-1}px`,border:`1px solid ${n}`,"background-color":n})}};let _B=O(`The cell you are trying to edit has been deleted.`);var vB=class extends hC{canStopEdition(){return this.editionMode===`inactive`?!0:this.checkDataValidation()}stopEdition(e){if(this.canStopEdition()){let{col:t,row:n}=this.currentEditedCell;this._stopEdition(),e&&(this.model.selection.selectCell(t,n),this.model.selection.moveAnchorCell(e,1));return}let t=this.currentEditedCell,n=T(t.col,t.row),r=this.getters.getValidationRuleForCell(t);if(!r)return;let i=$.get(r.criterion.type).getErrorString(r.criterion,this.getters,t.sheetId);this.notificationStore.raiseError(O(`The data you entered in %s violates the data validation rule set on the cell:
1635
1635
  %s`,n,i)),this.cancelEdition()}handle(e){switch(super.handle(e),e.type){case`SET_FORMATTING`:this.cancelEdition();break;case`ADD_COLUMNS_ROWS`:this.onAddElements(e);break;case`REMOVE_COLUMNS_ROWS`:e.dimension===`COL`?this.onColumnsRemoved(e):this.onRowsRemoved(e);break;case`ACTIVATE_SHEET`:if(en(this._currentContent)||(this._cancelEdition(),this.resetContent()),e.sheetIdFrom!==e.sheetIdTo){let t=this.getters.getActivePosition(),{col:n,row:r}=this.getters.getNextVisibleCellPosition({sheetId:e.sheetIdTo,col:t.col,row:t.row}),i=this.getters.expandZone(e.sheetIdTo,E({col:n,row:r}));this.model.selection.resetAnchor(this,{cell:{col:n,row:r},zone:i})}break;case`DELETE_SHEET`:case`UNDO`:case`REDO`:!this.getters.tryGetSheet(this.sheetId)&&this.editionMode!==`inactive`&&(this.sheetId=this.getters.getActiveSheetId(),this.resetContent(),this.cancelEditionAndActivateSheet(),this.notificationStore.raiseError(_B));break}}get placeholder(){let e=this.getters.getActivePosition(),t=this.model.getters.getArrayFormulaSpreadingOn(e);if(t)return this.getters.getCellText(t,{showFormula:!0})}get currentEditedCell(){return{sheetId:this.sheetId,col:this.col,row:this.row}}onColumnsRemoved(e){if(e.elements.includes(this.col)&&this.editionMode!==`inactive`){this.cancelEdition(),this.notificationStore.raiseError(_B);return}let{top:t,left:n}=dr({left:this.col,right:this.col,top:this.row,bottom:this.row},`left`,[...e.elements]);this.col=n,this.row=t}onRowsRemoved(e){if(e.elements.includes(this.row)&&this.editionMode!==`inactive`){this.cancelEdition(),this.notificationStore.raiseError(_B);return}let{top:t,left:n}=dr({left:this.col,right:this.col,top:this.row,bottom:this.row},`top`,[...e.elements]);this.col=n,this.row=t}onAddElements(e){let{top:t,left:n}=ur({left:this.col,right:this.col,top:this.row,bottom:this.row},e.dimension===`COL`?`left`:`top`,e.base,e.position,e.quantity);this.col=n,this.row=t}confirmEdition(e){if(e){let t=this.getters.getActiveSheetId(),n=this.getters.getEvaluatedCell({sheetId:t,col:this.col,row:this.row});n.link&&!en(e)&&(e=vt(e,n.link.url)),this.addHeadersForSpreadingFormula(e),this.model.dispatch(`UPDATE_CELL`,{...this.currentEditedCell,content:e})}else this.model.dispatch(`UPDATE_CELL`,{...this.currentEditedCell,content:``});this.model.dispatch(`AUTOFILL_TABLE_COLUMN`,{...this.currentEditedCell}),this.setContent(``)}getComposerContent(e){let t=this.getters.getLocale(),n=this.getters.getCell(e);if(n?.isFormula)return Hl(n.content,t);if(this.model.getters.getArrayFormulaSpreadingOn(e))return``;let{format:r,value:i,type:a,formattedValue:o}=this.getters.getEvaluatedCell(e);switch(a){case`empty`:return``;case`text`:case`error`:return i;case`boolean`:return o;case`number`:return r&&ls(r)?si(o,t)===null?B(i,{locale:t,format:Number.isInteger(i)?t.dateFormat:$l(t)}):o:this.numberComposerContent(i,r,t)}}numberComposerContent(e,t,n){return t?.includes(`%`)?`${cs(e*100,n.decimalSeparator)}%`:cs(e,n.decimalSeparator)}addHeadersForSpreadingFormula(e){if(!en(e))return;let t=this.getters.evaluateFormula(this.sheetId,e,{sheetId:this.sheetId,col:this.col,row:this.row});if(!A(t))return;let n=this.getters.getNumberRows(this.sheetId),r=this.getters.getNumberCols(this.sheetId),i=this.row+t[0].length-n,a=this.col+t.length-r;a>0&&this.model.dispatch(`ADD_COLUMNS_ROWS`,{sheetId:this.sheetId,sheetName:this.getters.getSheetName(this.sheetId),dimension:`COL`,base:r-1,position:`after`,quantity:a+20}),i>0&&this.model.dispatch(`ADD_COLUMNS_ROWS`,{sheetId:this.sheetId,sheetName:this.getters.getSheetName(this.sheetId),dimension:`ROW`,base:n-1,position:`after`,quantity:i+50})}checkDataValidation(){let e={sheetId:this.sheetId,col:this.col,row:this.row},t=this.getCurrentCanonicalContent(),n=en(t)?this.getters.evaluateFormula(this.sheetId,t):Ns(t,this.getters.getLocale());if(A(n))return!0;let r=this.getters.getValidationResultForCellValue(n,e);return!(!r.isValid&&r.rule.isBlocking)}evaluateCanonicalFormula(e){return this.getters.evaluateFormulaResult(this.sheetId,e,{sheetId:this.sheetId,col:this.col,row:this.row})}};let yB=3*.4*window.devicePixelRatio||1;H`
1636
1636
  div.o-grid-composer {
1637
1637
  z-index: ${20};
@@ -3382,4 +3382,4 @@ You can download it directly instead.`,5),sticky:!1,type:`warning`});return}r=aw
3382
3382
  <Relationships xmlns="${iO.Relationships}">
3383
3383
  <Relationship ${q(e)} />
3384
3384
  </Relationships>
3385
- `),`_rels/.rels`)}function IK(e){let t={},n=[];for(let r of e.sheets){let e=r.name.slice(0,31);e=$t(e,n,{compute:(e,t)=>e.slice(0,31-String(t).length)+t}),n.push(e),e!==r.name&&(t[r.name]=e,r.name=e)}if(!Object.keys(t).length)return e;let r=Object.keys(t).sort((e,t)=>t.length-e.length),i=JSON.stringify(e);for(let e of r){let n=RegExp(`'?${at(e)}'?!`,`g`);i=i.replaceAll(n,n=>{let r=t[e];return n.replace(e,r)})}return JSON.parse(i)}function LK(e){for(let t of e.sheets)t.tables=t.tables.filter(e=>br(ar(e.range)).numberOfRows>1);return e}var RK=class extends Hd{corePlugins=[];statefulUIPlugins=[];range;session;isReplayingCommand=!1;renderers={};status=0;config;corePluginConfig;coreViewPluginConfig;uiPluginConfig;state;selection;getters;coreGetters;uuidGenerator;handlers=[];uiHandlers=[];coreHandlers=[];constructor(e={},n={},r=[],i=new al,a=!1){let o=performance.now();console.debug(`##### Model creation #####`),super(),qi(),r=Pj(e,r);let s=Ej(e,a);this.state=new rG,this.uuidGenerator=i,this.config=this.setupConfig(n),this.session=this.setupSession(s.revisionId),this.coreGetters={},this.range=new jV(this.coreGetters),this.coreGetters.getRangeString=this.range.getRangeString.bind(this.range),this.coreGetters.getRangeFromSheetXC=this.range.getRangeFromSheetXC.bind(this.range),this.coreGetters.createAdaptedRanges=this.range.createAdaptedRanges.bind(this.range),this.coreGetters.getRangeData=this.range.getRangeData.bind(this.range),this.coreGetters.getRangeDataFromXc=this.range.getRangeDataFromXc.bind(this.range),this.coreGetters.getRangeDataFromZone=this.range.getRangeDataFromZone.bind(this.range),this.coreGetters.getRangeFromRangeData=this.range.getRangeFromRangeData.bind(this.range),this.coreGetters.getRangeFromZone=this.range.getRangeFromZone.bind(this.range),this.coreGetters.recomputeRanges=this.range.recomputeRanges.bind(this.range),this.coreGetters.isRangeValid=this.range.isRangeValid.bind(this.range),this.coreGetters.extendRange=this.range.extendRange.bind(this.range),this.coreGetters.getRangesUnion=this.range.getRangesUnion.bind(this.range),this.coreGetters.removeRangesSheetPrefix=this.range.removeRangesSheetPrefix.bind(this.range),this.coreGetters.copyFormulaStringForSheet=this.range.copyFormulaStringForSheet.bind(this.range),this.getters={isReadonly:()=>this.config.mode===`readonly`||this.config.mode===`dashboard`,isDashboard:()=>this.config.mode===`dashboard`},this.selection=new tG(this.getters),this.coreHandlers.push(this.range),this.handlers.push(this.range),this.corePluginConfig=this.setupCorePluginConfig(),this.coreViewPluginConfig=this.setupCoreViewPluginConfig(),this.uiPluginConfig=this.setupUiPluginConfig();for(let e of nW.getAll())this.setupCorePlugin(e,s);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(r);for(let e of aW.getAll()){let t=this.setupCoreViewPlugin(e);this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(let e of iW.getAll()){let t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(let e of rW.getAll()){let t=this.setupUiPlugin(e);this.handlers.push(t),this.uiHandlers.push(t)}if(this.dispatch(`START`),this.selection.observe(this,{handleEvent:()=>this.trigger(`update`)}),this.setupSessionEvents(),this.joinSession(),n.snapshotRequested||e[`[Content_Types].xml`]&&!this.getters.isReadonly()){let e=performance.now();console.debug(`Snapshot requested`),this.session.snapshot(this.exportData()),this.garbageCollectExternalResources(),console.debug(`Snapshot taken in`,performance.now()-e,`ms`)}(0,t.markRaw)(this),console.debug(`Model created in`,performance.now()-o,`ms`),console.debug(`######`)}joinSession(){this.session.join(this.config.client)}async leaveSession(){let e=this.getters.isReadonly()?void 0:kt(()=>this.exportData());await this.session.leave(e)}setupUiPlugin(e){let t=new e(this.uiPluginConfig);for(let n of e.getters){if(!(n in t))throw Error(`Invalid getter name: ${n} for plugin ${t.constructor}`);if(n in this.getters)throw Error(`Getter "${n}" is already defined.`);this.getters[n]=t[n].bind(t)}for(let n of e.layers)this.renderers[n]||(this.renderers[n]=[]),this.renderers[n].push(t);return t}setupCoreViewPlugin(e){let t=new e(this.coreViewPluginConfig);for(let n of e.getters){if(!(n in t))throw Error(`Invalid getter name: ${n} for plugin ${t.constructor}`);if(n in this.getters)throw Error(`Getter "${n}" is already defined.`);this.getters[n]=t[n].bind(t)}return t}setupCorePlugin(e,t){let n=new e(this.corePluginConfig);for(let t of e.getters){if(!(t in n))throw Error(`Invalid getter name: ${t} for plugin ${n.constructor}`);if(t in this.coreGetters)throw Error(`Getter "${t}" is already defined.`);this.coreGetters[t]=n[t].bind(n)}n.import(t),this.corePlugins.push(n),this.coreHandlers.push(n),this.handlers.push(n)}onRemoteRevisionReceived({commands:e}){for(let t of e){let e=this.status;this.status=2,this.dispatchToHandlers(this.statefulUIPlugins,t),this.status=e}this.finalize()}setupSession(e){return new iU(ZW({initialRevisionId:e,recordChanges:this.state.recordChanges.bind(this.state),dispatch:e=>{if(!this.checkDispatchAllowed(e).isSuccessful){this.dispatchToHandlers(this.coreHandlers,{type:`UNDO`,commands:[e]});return}this.isReplayingCommand=!0,this.dispatchToHandlers(this.coreHandlers,e),this.isReplayingCommand=!1}}),this.config.transportService,e)}setupSessionEvents(){this.session.on(`remote-revision-received`,this,this.onRemoteRevisionReceived),this.session.on(`revision-undone`,this,({commands:e})=>{this.dispatchFromCorePlugin(`UNDO`,{commands:e}),this.finalize()}),this.session.on(`revision-redone`,this,({commands:e})=>{this.dispatchFromCorePlugin(`REDO`,{commands:e}),this.finalize()}),this.session.on(`unexpected-revision-id`,this,()=>this.trigger(`unexpected-revision-id`)),this.session.on(`collaborative-event-received`,this,()=>{this.trigger(`update`)})}setupConfig(e){let t=e.client||{id:this.uuidGenerator.smallUuid(),name:O(`Anonymous`).toString()},n=e.transportService||new UW;return{...e,mode:e.mode||`normal`,custom:e.custom||{},external:this.setupExternalConfig(e.external||{}),transportService:n,client:t,moveClient:()=>{},snapshotRequested:!1,notifyUI:e=>this.trigger(`notify-ui`,e),raiseBlockingErrorUI:e=>this.trigger(`raise-error-ui`,{text:e}),customColors:e.customColors||[]}}setupExternalConfig(e){let t=e.loadLocales||(()=>Promise.resolve(pa));return{...e,loadLocales:t}}setupCorePluginConfig(){return{getters:this.coreGetters,stateObserver:this.state,range:this.range,dispatch:this.dispatchFromCorePlugin,canDispatch:this.canDispatch,custom:this.config.custom,external:this.config.external}}setupCoreViewPluginConfig(){return{getters:this.getters,stateObserver:this.state,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session,defaultCurrency:this.config.defaultCurrency,customColors:this.config.customColors||[],external:this.config.external}}setupUiPluginConfig(){return{getters:this.getters,stateObserver:this.state,dispatch:this.dispatch,canDispatch:this.canDispatch,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session,defaultCurrency:this.config.defaultCurrency,customColors:this.config.customColors||[],external:this.config.external}}checkDispatchAllowed(e){let t=ca(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some(e=>e!==`Success`)?new ua(t.flat()):ua.Success}checkDispatchAllowedCoreCommand(e){let t=this.corePlugins.map(t=>t.allowDispatch(e));return t.push(this.range.allowDispatch(e)),t}checkDispatchAllowedLocalCommand(e){return this.uiHandlers.map(t=>t.allowDispatch(e))}finalize(){this.status=3;for(let e of this.handlers)e.finalize();this.status=0,this.trigger(`command-finalized`)}canDispatch=(e,t)=>this.checkDispatchAllowed(zK(e,t));dispatch=(e,t)=>{let n=zK(e,t),r=this.status;if(this.getters.isReadonly()&&!la(n))return new ua(`Readonly`);if(!this.session.canApplyOptimisticUpdate())return new ua(`WaitingSessionConfirmation`);switch(r){case 0:let t=this.checkDispatchAllowed(n);if(!t.isSuccessful)return this.trigger(`update`),t;this.status=1;let{changes:r,commands:i}=this.state.recordChanges(()=>{let t=performance.now();ca(n)&&this.state.addCommand(n),this.dispatchToHandlers(this.handlers,n),this.finalize();let r=performance.now()-t;r>5&&console.debug(e,r,`ms`)});this.session.save(n,i,r),this.status=0,this.trigger(`update`);break;case 1:if(ca(n)){let e=this.checkDispatchAllowed(n);if(!e.isSuccessful)return e;this.state.addCommand(n)}this.dispatchToHandlers(this.handlers,n);break;case 3:throw Error(`Cannot dispatch commands in the finalize state`);case 2:if(ca(n))throw Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,n)}return ua.Success};dispatchFromCorePlugin=(e,t)=>{let n=zK(e,t),r=this.status;this.status=2;let i=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(i,n),this.status=r,ua.Success};dispatchToHandlers(e,t){let n=ca(t);for(let r of e)!n&&r instanceof hV||r.beforeHandle(t);for(let r of e)!n&&r instanceof hV||r.handle(t);this.trigger(`command-dispatched`,t)}drawLayer(e,t){let n=this.renderers[t];if(n)for(let r of n)e.ctx.save(),r.drawLayer(e,t),e.ctx.restore()}exportData(){let e=Vj();for(let t of this.handlers)t instanceof hV&&t.export(e);return e.revisionId=this.session.getRevisionId()||`START_REVISION`,e=b(e),e}updateMode(e){this.config.mode=e,this.trigger(`update`)}exportXLSX(){this.dispatch(`EVALUATE_CELLS`);let e=Uj();for(let t of this.handlers)t instanceof mV&&t.exportForExcel(e);return e=b(e),DK(e)}garbageCollectExternalResources(){for(let e of this.corePlugins)e.garbageCollectExternalResources()}};function zK(e,t={}){let n=b(t);return n.type=e,n}let BK={},VK={MIN_ROW_HEIGHT:10,MIN_COL_WIDTH:5,HEADER_HEIGHT:26,HEADER_WIDTH:48,BOTTOMBAR_HEIGHT:36,DEFAULT_CELL_WIDTH:96,DEFAULT_CELL_HEIGHT:23,SCROLLBAR_WIDTH:15},HK={autoCompleteProviders:oC,autofillModifiersRegistry:AC,autofillRulesRegistry:jC,cellMenuRegistry:NP,colMenuRegistry:EI,errorTypes:va,linkMenuRegistry:pM,functionRegistry:ix,featurePluginRegistry:rW,iconsOnCellRegistry:gO,statefulUIPluginRegistry:iW,coreViewsPluginRegistry:aW,corePluginRegistry:nW,rowMenuRegistry:jI,sidePanelRegistry:rB,figureRegistry:AD,chartSidePanelComponentRegistry:tR,chartComponentRegistry:zE,chartRegistry:RE,chartSubtypeRegistry:VE,topbarMenuRegistry:FI,topbarComponentRegistry:LI,clickableCellRegistry:oW,otRegistry:II,inverseCommandRegistry:ID,urlRegistry:ho,cellPopoverRegistry:VC,numberFormatMenuRegistry:DI,repeatLocalCommandTransformRegistry:RU,repeatCommandTransformRegistry:LU,clipboardHandlersRegistries:zd,pivotRegistry:xz,pivotTimeAdapterRegistry:qu,pivotSidePanelRegistry:Dz,pivotNormalizationValueRegistry:wd,supportedPivotPositionalFormulaRegistry:TC,pivotToFunctionValueRegistry:Td,migrationStepRegistry:xj,chartJsExtensionRegistry:pf},UK={arg:W,isEvaluationError:P,toBoolean:L,toJsDate:R,toNumber:F,toString:I,toNormalizedPivotValue:bd,toFunctionPivotValue:Sd,toXC:T,toZone:ar,toUnboundedZone:ir,toCartesian:Jn,numberToLetters:zn,lettersToNumber:Bn,UuidGenerator:al,formatValue:B,createCurrencyFormat:gs,ColorGenerator:Pn,computeTextWidth:Vc,createEmptyWorkbookData:Vj,createEmptySheet:Bj,createEmptyExcelSheet:Hj,rgbaToHex:mn,colorToRGBA:hn,positionToZone:E,isDefined:C,isMatrix:A,lazy:kt,genericRepeat:zU,createAction:m,createActions:f,transformRangeData:Vd,deepEquals:w,overlap:_r,union:pr,isInside:vr,deepCopy:b,expandZoneOnInsertion:lr,reduceZoneOnDeletion:fr,unquote:ct,getMaxObjectId:fd,getFunctionsFromTokens:kx,getFirstPivotFunction:SC,getNumberOfPivotFunctions:wC,parseDimension:hd,isDateOrDatetimeField:gd,makeFieldProposal:_C,insertTokenAfterArgSeparator:yC,insertTokenAfterLeftParenthesis:bC,mergeContiguousZones:zr,getPivotHighlights:NI,pivotTimeAdapter:Ju,UNDO_REDO_PIVOT_COMMANDS:vH,createPivotFormula:yd,areDomainArgsFieldsValid:vd,splitReference:ac,sanitizeSheetName:ut,getUniqueText:$t,isNumber:Li,isDateTime:ai},WK={isMarkdownLink:gt,parseMarkdownLink:yt,markdownLink:vt,openLink:bo,urlRepresentation:yo},GK={Checkbox:Xj,Section:Q,RoundColorPicker:fL,ChartDataSeries:YI,ChartErrorSection:ZI,ChartLabelRange:QI,ChartTitle:lL,ChartPanel:iR,ChartFigure:UE,ChartJsComponent:HS,Grid:fV,GridOverlay:HB,ScorecardChart:aC,LineConfigPanel:HL,BarConfigPanel:eL,PieChartDesignPanel:UL,GenericChartConfigPanel:$I,ChartWithAxisDesignPanel:_L,GaugeChartConfigPanel:xL,GaugeChartDesignPanel:IL,ScorecardChartConfigPanel:KL,ScorecardChartDesignPanel:qL,GeoChartDesignPanel:BL,RadarChartDesignPanel:WL,WaterfallChartDesignPanel:eR,ComboChartDesignPanel:vL,FunnelChartDesignPanel:bL,ChartTypePicker:nR,FigureComponent:iB,Menu:DM,Popover:CM,SelectionInput:JI,ValidationMessages:XI,AddDimensionButton:WR,PivotDimensionGranularity:JR,PivotDimensionOrder:YR,PivotDimension:qR,PivotLayoutConfigurator:$R,PivotHTMLRenderer:pV,PivotDeferUpdate:HR,PivotTitleSection:ez,CogWheelMenu:KR,TextInput:GR,SidePanelCollapsible:nL,RadioSelection:dL,GeoChartRegionSelectSection:LL},KK={useDragAndDropListItems:zI,useHighlights:lR,useHighlightsOnHover:cR},qK={useStoreProvider:qd,DependencyContainer:Ud,CellPopoverStore:nM,ComposerFocusStore:nf,CellComposerStore:vB,FindAndReplaceStore:IR,HighlightStore:uC,DelayedHoveredCellStore:tM,HoveredTableStore:BB,ModelStore:Qd,NotificationStore:dC,RendererStore:$d,SelectionInputStore:qI,SpreadsheetStore:ef,useStore:V,useLocalStore:Jd,SidePanelStore:cV,PivotSidePanelStore:Tz,PivotMeasureDisplayPanelStore:BR};function JK(e,t){return ix.add(e,t),{addFunction:(e,t)=>JK(e,t)}}let YK={DEFAULT_LOCALE:k,HIGHLIGHT_COLOR:_,PIVOT_TABLE_CONFIG:et,ChartTerms:dw},XK={...hD,...nE};e.AbstractCellClipboardHandler=gl,e.AbstractChart=US,e.AbstractFigureClipboardHandler=Ad,e.CellErrorType=j,e.CommandResult=fa,e.CorePlugin=hV,e.CoreViewPlugin=zV,e.DispatchResult=ua,e.EvaluationError=M,e.Model=RK,e.PivotRuntimeDefinition=tz,e.Registry=h,e.Revision=nU,e.SPREADSHEET_DIMENSIONS=VK,e.Spreadsheet=HW,e.SpreadsheetPivotTable=az,e.UIPlugin=xH,e.__info__=BK,e.addFunction=JK,e.addRenderingLayer=_a,e.astToFormula=zv,e.chartHelpers=XK,e.compile=bx,e.compileTokens=xx,e.components=GK,e.constants=YK,e.convertAstNodes=Fv,e.coreTypes=sa,e.findCellInNewZone=kr,e.functionCache=yx,e.helpers=UK,e.hooks=KK,e.invalidateCFEvaluationCommands=ia,e.invalidateChartEvaluationCommands=na,e.invalidateDependenciesCommands=ra,e.invalidateEvaluationCommands=ta,e.iterateAstNodes=Iv,e.links=WK,e.load=Ej,e.parse=Nv,e.parseTokens=Pv,e.readonlyAllowedCommands=oa,e.registries=HK,e.setDefaultSheetViewSize=Qe,e.setTranslationMethod=Ki,e.stores=qK,e.tokenColors=mC,e.tokenize=bl,BK.version=`18.3.50`,BK.date=`2026-06-06T06:20:54.573Z`,BK.hash=`d8ca64d`})(this.o_spreadsheet=this.o_spreadsheet||{},owl);
3385
+ `),`_rels/.rels`)}function IK(e){let t={},n=[];for(let r of e.sheets){let e=r.name.slice(0,31);e=$t(e,n,{compute:(e,t)=>e.slice(0,31-String(t).length)+t}),n.push(e),e!==r.name&&(t[r.name]=e,r.name=e)}if(!Object.keys(t).length)return e;let r=Object.keys(t).sort((e,t)=>t.length-e.length),i=JSON.stringify(e);for(let e of r){let n=RegExp(`'?${at(e)}'?!`,`g`);i=i.replaceAll(n,n=>{let r=t[e];return n.replace(e,r)})}return JSON.parse(i)}function LK(e){for(let t of e.sheets)t.tables=t.tables.filter(e=>br(ar(e.range)).numberOfRows>1);return e}var RK=class extends Hd{corePlugins=[];statefulUIPlugins=[];range;session;isReplayingCommand=!1;renderers={};status=0;config;corePluginConfig;coreViewPluginConfig;uiPluginConfig;state;selection;getters;coreGetters;uuidGenerator;handlers=[];uiHandlers=[];coreHandlers=[];constructor(e={},n={},r=[],i=new al,a=!1){let o=performance.now();console.debug(`##### Model creation #####`),super(),qi(),r=Pj(e,r);let s=Ej(e,a);this.state=new rG,this.uuidGenerator=i,this.config=this.setupConfig(n),this.session=this.setupSession(s.revisionId),this.coreGetters={},this.range=new jV(this.coreGetters),this.coreGetters.getRangeString=this.range.getRangeString.bind(this.range),this.coreGetters.getRangeFromSheetXC=this.range.getRangeFromSheetXC.bind(this.range),this.coreGetters.createAdaptedRanges=this.range.createAdaptedRanges.bind(this.range),this.coreGetters.getRangeData=this.range.getRangeData.bind(this.range),this.coreGetters.getRangeDataFromXc=this.range.getRangeDataFromXc.bind(this.range),this.coreGetters.getRangeDataFromZone=this.range.getRangeDataFromZone.bind(this.range),this.coreGetters.getRangeFromRangeData=this.range.getRangeFromRangeData.bind(this.range),this.coreGetters.getRangeFromZone=this.range.getRangeFromZone.bind(this.range),this.coreGetters.recomputeRanges=this.range.recomputeRanges.bind(this.range),this.coreGetters.isRangeValid=this.range.isRangeValid.bind(this.range),this.coreGetters.extendRange=this.range.extendRange.bind(this.range),this.coreGetters.getRangesUnion=this.range.getRangesUnion.bind(this.range),this.coreGetters.removeRangesSheetPrefix=this.range.removeRangesSheetPrefix.bind(this.range),this.coreGetters.copyFormulaStringForSheet=this.range.copyFormulaStringForSheet.bind(this.range),this.getters={isReadonly:()=>this.config.mode===`readonly`||this.config.mode===`dashboard`,isDashboard:()=>this.config.mode===`dashboard`},this.selection=new tG(this.getters),this.coreHandlers.push(this.range),this.handlers.push(this.range),this.corePluginConfig=this.setupCorePluginConfig(),this.coreViewPluginConfig=this.setupCoreViewPluginConfig(),this.uiPluginConfig=this.setupUiPluginConfig();for(let e of nW.getAll())this.setupCorePlugin(e,s);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(r);for(let e of aW.getAll()){let t=this.setupCoreViewPlugin(e);this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(let e of iW.getAll()){let t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(let e of rW.getAll()){let t=this.setupUiPlugin(e);this.handlers.push(t),this.uiHandlers.push(t)}if(this.dispatch(`START`),this.selection.observe(this,{handleEvent:()=>this.trigger(`update`)}),this.setupSessionEvents(),this.joinSession(),n.snapshotRequested||e[`[Content_Types].xml`]&&!this.getters.isReadonly()){let e=performance.now();console.debug(`Snapshot requested`),this.session.snapshot(this.exportData()),this.garbageCollectExternalResources(),console.debug(`Snapshot taken in`,performance.now()-e,`ms`)}(0,t.markRaw)(this),console.debug(`Model created in`,performance.now()-o,`ms`),console.debug(`######`)}joinSession(){this.session.join(this.config.client)}async leaveSession(){let e=this.getters.isReadonly()?void 0:kt(()=>this.exportData());await this.session.leave(e)}setupUiPlugin(e){let t=new e(this.uiPluginConfig);for(let n of e.getters){if(!(n in t))throw Error(`Invalid getter name: ${n} for plugin ${t.constructor}`);if(n in this.getters)throw Error(`Getter "${n}" is already defined.`);this.getters[n]=t[n].bind(t)}for(let n of e.layers)this.renderers[n]||(this.renderers[n]=[]),this.renderers[n].push(t);return t}setupCoreViewPlugin(e){let t=new e(this.coreViewPluginConfig);for(let n of e.getters){if(!(n in t))throw Error(`Invalid getter name: ${n} for plugin ${t.constructor}`);if(n in this.getters)throw Error(`Getter "${n}" is already defined.`);this.getters[n]=t[n].bind(t)}return t}setupCorePlugin(e,t){let n=new e(this.corePluginConfig);for(let t of e.getters){if(!(t in n))throw Error(`Invalid getter name: ${t} for plugin ${n.constructor}`);if(t in this.coreGetters)throw Error(`Getter "${t}" is already defined.`);this.coreGetters[t]=n[t].bind(n)}n.import(t),this.corePlugins.push(n),this.coreHandlers.push(n),this.handlers.push(n)}onRemoteRevisionReceived({commands:e}){for(let t of e){let e=this.status;this.status=2,this.dispatchToHandlers(this.statefulUIPlugins,t),this.status=e}this.finalize()}setupSession(e){return new iU(ZW({initialRevisionId:e,recordChanges:this.state.recordChanges.bind(this.state),dispatch:e=>{if(!this.checkDispatchAllowed(e).isSuccessful){this.dispatchToHandlers(this.coreHandlers,{type:`UNDO`,commands:[e]});return}this.isReplayingCommand=!0,this.dispatchToHandlers(this.coreHandlers,e),this.isReplayingCommand=!1}}),this.config.transportService,e)}setupSessionEvents(){this.session.on(`remote-revision-received`,this,this.onRemoteRevisionReceived),this.session.on(`revision-undone`,this,({commands:e})=>{this.dispatchFromCorePlugin(`UNDO`,{commands:e}),this.finalize()}),this.session.on(`revision-redone`,this,({commands:e})=>{this.dispatchFromCorePlugin(`REDO`,{commands:e}),this.finalize()}),this.session.on(`unexpected-revision-id`,this,()=>this.trigger(`unexpected-revision-id`)),this.session.on(`collaborative-event-received`,this,()=>{this.trigger(`update`)})}setupConfig(e){let t=e.client||{id:this.uuidGenerator.smallUuid(),name:O(`Anonymous`).toString()},n=e.transportService||new UW;return{...e,mode:e.mode||`normal`,custom:e.custom||{},external:this.setupExternalConfig(e.external||{}),transportService:n,client:t,moveClient:()=>{},snapshotRequested:!1,notifyUI:e=>this.trigger(`notify-ui`,e),raiseBlockingErrorUI:e=>this.trigger(`raise-error-ui`,{text:e}),customColors:e.customColors||[]}}setupExternalConfig(e){let t=e.loadLocales||(()=>Promise.resolve(pa));return{...e,loadLocales:t}}setupCorePluginConfig(){return{getters:this.coreGetters,stateObserver:this.state,range:this.range,dispatch:this.dispatchFromCorePlugin,canDispatch:this.canDispatch,custom:this.config.custom,external:this.config.external}}setupCoreViewPluginConfig(){return{getters:this.getters,stateObserver:this.state,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session,defaultCurrency:this.config.defaultCurrency,customColors:this.config.customColors||[],external:this.config.external}}setupUiPluginConfig(){return{getters:this.getters,stateObserver:this.state,dispatch:this.dispatch,canDispatch:this.canDispatch,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session,defaultCurrency:this.config.defaultCurrency,customColors:this.config.customColors||[],external:this.config.external}}checkDispatchAllowed(e){let t=ca(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some(e=>e!==`Success`)?new ua(t.flat()):ua.Success}checkDispatchAllowedCoreCommand(e){let t=this.corePlugins.map(t=>t.allowDispatch(e));return t.push(this.range.allowDispatch(e)),t}checkDispatchAllowedLocalCommand(e){return this.uiHandlers.map(t=>t.allowDispatch(e))}finalize(){this.status=3;for(let e of this.handlers)e.finalize();this.status=0,this.trigger(`command-finalized`)}canDispatch=(e,t)=>this.checkDispatchAllowed(zK(e,t));dispatch=(e,t)=>{let n=zK(e,t),r=this.status;if(this.getters.isReadonly()&&!la(n))return new ua(`Readonly`);if(!this.session.canApplyOptimisticUpdate())return new ua(`WaitingSessionConfirmation`);switch(r){case 0:let t=this.checkDispatchAllowed(n);if(!t.isSuccessful)return this.trigger(`update`),t;this.status=1;let{changes:r,commands:i}=this.state.recordChanges(()=>{let t=performance.now();ca(n)&&this.state.addCommand(n),this.dispatchToHandlers(this.handlers,n),this.finalize();let r=performance.now()-t;r>5&&console.debug(e,r,`ms`)});this.session.save(n,i,r),this.status=0,this.trigger(`update`);break;case 1:if(ca(n)){let e=this.checkDispatchAllowed(n);if(!e.isSuccessful)return e;this.state.addCommand(n)}this.dispatchToHandlers(this.handlers,n);break;case 3:throw Error(`Cannot dispatch commands in the finalize state`);case 2:if(ca(n))throw Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,n)}return ua.Success};dispatchFromCorePlugin=(e,t)=>{let n=zK(e,t),r=this.status;this.status=2;let i=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(i,n),this.status=r,ua.Success};dispatchToHandlers(e,t){let n=ca(t);for(let r of e)!n&&r instanceof hV||r.beforeHandle(t);for(let r of e)!n&&r instanceof hV||r.handle(t);this.trigger(`command-dispatched`,t)}drawLayer(e,t){let n=this.renderers[t];if(n)for(let r of n)e.ctx.save(),r.drawLayer(e,t),e.ctx.restore()}exportData(){let e=Vj();for(let t of this.handlers)t instanceof hV&&t.export(e);return e.revisionId=this.session.getRevisionId()||`START_REVISION`,e=b(e),e}updateMode(e){this.config.mode=e,this.trigger(`update`)}exportXLSX(){this.dispatch(`EVALUATE_CELLS`);let e=Uj();for(let t of this.handlers)t instanceof mV&&t.exportForExcel(e);return e=b(e),DK(e)}garbageCollectExternalResources(){for(let e of this.corePlugins)e.garbageCollectExternalResources()}};function zK(e,t={}){let n=b(t);return n.type=e,n}let BK={},VK={MIN_ROW_HEIGHT:10,MIN_COL_WIDTH:5,HEADER_HEIGHT:26,HEADER_WIDTH:48,BOTTOMBAR_HEIGHT:36,DEFAULT_CELL_WIDTH:96,DEFAULT_CELL_HEIGHT:23,SCROLLBAR_WIDTH:15},HK={autoCompleteProviders:oC,autofillModifiersRegistry:AC,autofillRulesRegistry:jC,cellMenuRegistry:NP,colMenuRegistry:EI,errorTypes:va,linkMenuRegistry:pM,functionRegistry:ix,featurePluginRegistry:rW,iconsOnCellRegistry:gO,statefulUIPluginRegistry:iW,coreViewsPluginRegistry:aW,corePluginRegistry:nW,rowMenuRegistry:jI,sidePanelRegistry:rB,figureRegistry:AD,chartSidePanelComponentRegistry:tR,chartComponentRegistry:zE,chartRegistry:RE,chartSubtypeRegistry:VE,topbarMenuRegistry:FI,topbarComponentRegistry:LI,clickableCellRegistry:oW,otRegistry:II,inverseCommandRegistry:ID,urlRegistry:ho,cellPopoverRegistry:VC,numberFormatMenuRegistry:DI,repeatLocalCommandTransformRegistry:RU,repeatCommandTransformRegistry:LU,clipboardHandlersRegistries:zd,pivotRegistry:xz,pivotTimeAdapterRegistry:qu,pivotSidePanelRegistry:Dz,pivotNormalizationValueRegistry:wd,supportedPivotPositionalFormulaRegistry:TC,pivotToFunctionValueRegistry:Td,migrationStepRegistry:xj,chartJsExtensionRegistry:pf},UK={arg:W,isEvaluationError:P,toBoolean:L,toJsDate:R,toNumber:F,toString:I,toNormalizedPivotValue:bd,toFunctionPivotValue:Sd,toXC:T,toZone:ar,toUnboundedZone:ir,toCartesian:Jn,numberToLetters:zn,lettersToNumber:Bn,UuidGenerator:al,formatValue:B,createCurrencyFormat:gs,ColorGenerator:Pn,computeTextWidth:Vc,createEmptyWorkbookData:Vj,createEmptySheet:Bj,createEmptyExcelSheet:Hj,rgbaToHex:mn,colorToRGBA:hn,positionToZone:E,isDefined:C,isMatrix:A,lazy:kt,genericRepeat:zU,createAction:m,createActions:f,transformRangeData:Vd,deepEquals:w,overlap:_r,union:pr,isInside:vr,deepCopy:b,expandZoneOnInsertion:lr,reduceZoneOnDeletion:fr,unquote:ct,getMaxObjectId:fd,getFunctionsFromTokens:kx,getFirstPivotFunction:SC,getNumberOfPivotFunctions:wC,parseDimension:hd,isDateOrDatetimeField:gd,makeFieldProposal:_C,insertTokenAfterArgSeparator:yC,insertTokenAfterLeftParenthesis:bC,mergeContiguousZones:zr,getPivotHighlights:NI,pivotTimeAdapter:Ju,UNDO_REDO_PIVOT_COMMANDS:vH,createPivotFormula:yd,areDomainArgsFieldsValid:vd,splitReference:ac,sanitizeSheetName:ut,getUniqueText:$t,isNumber:Li,isDateTime:ai},WK={isMarkdownLink:gt,parseMarkdownLink:yt,markdownLink:vt,openLink:bo,urlRepresentation:yo},GK={Checkbox:Xj,Section:Q,RoundColorPicker:fL,ChartDataSeries:YI,ChartErrorSection:ZI,ChartLabelRange:QI,ChartTitle:lL,ChartPanel:iR,ChartFigure:UE,ChartJsComponent:HS,Grid:fV,GridOverlay:HB,ScorecardChart:aC,LineConfigPanel:HL,BarConfigPanel:eL,PieChartDesignPanel:UL,GenericChartConfigPanel:$I,ChartWithAxisDesignPanel:_L,GaugeChartConfigPanel:xL,GaugeChartDesignPanel:IL,ScorecardChartConfigPanel:KL,ScorecardChartDesignPanel:qL,GeoChartDesignPanel:BL,RadarChartDesignPanel:WL,WaterfallChartDesignPanel:eR,ComboChartDesignPanel:vL,FunnelChartDesignPanel:bL,ChartTypePicker:nR,FigureComponent:iB,Menu:DM,Popover:CM,SelectionInput:JI,ValidationMessages:XI,AddDimensionButton:WR,PivotDimensionGranularity:JR,PivotDimensionOrder:YR,PivotDimension:qR,PivotLayoutConfigurator:$R,PivotHTMLRenderer:pV,PivotDeferUpdate:HR,PivotTitleSection:ez,CogWheelMenu:KR,TextInput:GR,SidePanelCollapsible:nL,RadioSelection:dL,GeoChartRegionSelectSection:LL},KK={useDragAndDropListItems:zI,useHighlights:lR,useHighlightsOnHover:cR},qK={useStoreProvider:qd,DependencyContainer:Ud,CellPopoverStore:nM,ComposerFocusStore:nf,CellComposerStore:vB,FindAndReplaceStore:IR,HighlightStore:uC,DelayedHoveredCellStore:tM,HoveredTableStore:BB,ModelStore:Qd,NotificationStore:dC,RendererStore:$d,SelectionInputStore:qI,SpreadsheetStore:ef,useStore:V,useLocalStore:Jd,SidePanelStore:cV,PivotSidePanelStore:Tz,PivotMeasureDisplayPanelStore:BR};function JK(e,t){return ix.add(e,t),{addFunction:(e,t)=>JK(e,t)}}let YK={DEFAULT_LOCALE:k,HIGHLIGHT_COLOR:_,PIVOT_TABLE_CONFIG:et,ChartTerms:dw},XK={...hD,...nE};e.AbstractCellClipboardHandler=gl,e.AbstractChart=US,e.AbstractFigureClipboardHandler=Ad,e.CellErrorType=j,e.CommandResult=fa,e.CorePlugin=hV,e.CoreViewPlugin=zV,e.DispatchResult=ua,e.EvaluationError=M,e.Model=RK,e.PivotRuntimeDefinition=tz,e.Registry=h,e.Revision=nU,e.SPREADSHEET_DIMENSIONS=VK,e.Spreadsheet=HW,e.SpreadsheetPivotTable=az,e.UIPlugin=xH,e.__info__=BK,e.addFunction=JK,e.addRenderingLayer=_a,e.astToFormula=zv,e.chartHelpers=XK,e.compile=bx,e.compileTokens=xx,e.components=GK,e.constants=YK,e.convertAstNodes=Fv,e.coreTypes=sa,e.findCellInNewZone=kr,e.functionCache=yx,e.helpers=UK,e.hooks=KK,e.invalidateCFEvaluationCommands=ia,e.invalidateChartEvaluationCommands=na,e.invalidateDependenciesCommands=ra,e.invalidateEvaluationCommands=ta,e.iterateAstNodes=Iv,e.links=WK,e.load=Ej,e.parse=Nv,e.parseTokens=Pv,e.readonlyAllowedCommands=oa,e.registries=HK,e.setDefaultSheetViewSize=Qe,e.setTranslationMethod=Ki,e.stores=qK,e.tokenColors=mC,e.tokenize=bl,BK.version=`18.3.51`,BK.date=`2026-06-17T08:49:41.496Z`,BK.hash=`233f3ea`})(this.o_spreadsheet=this.o_spreadsheet||{},owl);
@@ -1,9 +1,9 @@
1
1
  <!--
2
2
  This file is generated by o-spreadsheet build tools. Do not edit it.
3
3
  @see https://github.com/odoo/o-spreadsheet
4
- @version 18.3.50
5
- @date 2026-06-06T06:20:55.214Z
6
- @hash d8ca64d
4
+ @version 18.3.51
5
+ @date 2026-06-17T08:49:42.326Z
6
+ @hash 233f3ea
7
7
  -->
8
8
  <odoo>
9
9
  <t t-name="o-spreadsheet-ValidationMessages">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/o-spreadsheet",
3
- "version": "18.3.50",
3
+ "version": "18.3.51",
4
4
  "description": "A spreadsheet component",
5
5
  "type": "module",
6
6
  "main": "dist/o-spreadsheet.cjs.js",