@odoo/o-spreadsheet 19.5.0-alpha.5 → 19.5.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.5.0-alpha.5
6
- * @date 2026-07-20T10:50:13.850Z
7
- * @hash a599d86
5
+ * @version 19.5.0-alpha.6
6
+ * @date 2026-07-23T07:49:14.543Z
7
+ * @hash 192a921
8
8
  */
9
9
 
10
10
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -48400,7 +48400,8 @@ var Autofill = class extends Component {
48400
48400
  const { x, y } = this.state.handler ? this.state.position : this.props.position;
48401
48401
  return cssPropertiesToCss({
48402
48402
  top: `${y}px`,
48403
- left: `${x}px`
48403
+ left: `${x}px`,
48404
+ visibility: this.props.isVisible ? "visible" : "hidden"
48404
48405
  });
48405
48406
  }
48406
48407
  get styleNextValue() {
@@ -48826,7 +48827,7 @@ var CellComposerStore = class extends AbstractComposerStore {
48826
48827
  this._cancelEdition();
48827
48828
  this.resetContent();
48828
48829
  }
48829
- if (cmd.sheetIdFrom !== cmd.sheetIdTo) {
48830
+ if (this.model.selection.isListening(this) && cmd.sheetIdFrom !== cmd.sheetIdTo) {
48830
48831
  const activePosition = this.getters.getActivePosition();
48831
48832
  const { col, row } = this.getters.getNextVisibleCellPosition({
48832
48833
  sheetId: cmd.sheetIdTo,
@@ -53051,6 +53052,10 @@ var Grid = class extends Component {
53051
53052
  get displaySelectionHandler() {
53052
53053
  return this.env.isMobile() && this.composerFocusStore.activeComposer.editionMode === "inactive";
53053
53054
  }
53055
+ get clientsToDisplay() {
53056
+ const sheetId = this.env.model.getters.getActiveSheetId();
53057
+ return this.env.model.getters.getClientsToDisplay(sheetId);
53058
+ }
53054
53059
  };
53055
53060
 
53056
53061
  //#endregion
@@ -62823,6 +62828,8 @@ var PivotUIPlugin = class extends CoreViewPlugin {
62823
62828
  pivots = {};
62824
62829
  unusedPivotsInFormulas;
62825
62830
  custom;
62831
+ pivotPositionCache = new PositionMap();
62832
+ shouldInvalidateCache = false;
62826
62833
  constructor(config) {
62827
62834
  super(config);
62828
62835
  this.custom = config.custom;
@@ -62833,7 +62840,11 @@ var PivotUIPlugin = class extends CoreViewPlugin {
62833
62840
  }
62834
62841
  }
62835
62842
  handle(cmd) {
62836
- if (invalidateEvaluationCommands.has(cmd.type)) for (const pivotId of this.getters.getPivotIds()) this.setupPivot(pivotId, { recreate: true });
62843
+ if (invalidateEvaluationCommands.has(cmd.type)) {
62844
+ this.shouldInvalidateCache = true;
62845
+ for (const pivotId of this.getters.getPivotIds()) this.setupPivot(pivotId, { recreate: true });
62846
+ }
62847
+ if (cmd.type === "UPDATE_CELL") this.shouldInvalidateCache = true;
62837
62848
  switch (cmd.type) {
62838
62849
  case "REFRESH_PIVOT":
62839
62850
  this.refreshPivot(cmd.id);
@@ -62873,6 +62884,12 @@ var PivotUIPlugin = class extends CoreViewPlugin {
62873
62884
  break;
62874
62885
  }
62875
62886
  }
62887
+ finalize() {
62888
+ if (this.shouldInvalidateCache) {
62889
+ this.pivotPositionCache = new PositionMap();
62890
+ this.shouldInvalidateCache = false;
62891
+ }
62892
+ }
62876
62893
  /**
62877
62894
  * Get the id of the first pivot in the formula at the given position. Returns undefined if there
62878
62895
  * is no pivot at this position
@@ -62884,9 +62901,14 @@ var PivotUIPlugin = class extends CoreViewPlugin {
62884
62901
  * Get all of the ids of the pivot present in the formula at the given position.
62885
62902
  */
62886
62903
  getPivotIdsFromPosition(position) {
62887
- const cell = this.getters.getCorrespondingFormulaCell(position);
62888
- if (cell && cell.isFormula) return this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
62889
- return [];
62904
+ if (!this.pivotPositionCache.has(position)) {
62905
+ const cell = this.getters.getCorrespondingFormulaCell(position);
62906
+ if (cell && cell.isFormula) {
62907
+ const pivotIds = this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
62908
+ this.pivotPositionCache.set(position, pivotIds);
62909
+ }
62910
+ }
62911
+ return this.pivotPositionCache.get(position) || [];
62890
62912
  }
62891
62913
  getPivotIdsFromFormula(sheetId, formula) {
62892
62914
  return this.getPivotFunctions(sheetId, formula).map((pivotFunction) => {
@@ -63134,12 +63156,22 @@ var TableComputedStylePlugin = class extends UIPlugin {
63134
63156
  getCellTableStyle(position) {
63135
63157
  const table = this.getters.getTable(position);
63136
63158
  if (!table) return;
63137
- return this.tableStyles[position.sheetId][table.id]().styles[position.col]?.[position.row];
63159
+ try {
63160
+ return this.tableStyles[position.sheetId][table.id]().styles[position.col]?.[position.row];
63161
+ } catch (e) {
63162
+ if (isEvaluationError(e) || e instanceof EvaluationError) return;
63163
+ throw e;
63164
+ }
63138
63165
  }
63139
63166
  getCellTableBorder(position) {
63140
63167
  const table = this.getters.getTable(position);
63141
63168
  if (!table) return;
63142
- return this.tableStyles[position.sheetId][table.id]().borders[position.col]?.[position.row];
63169
+ try {
63170
+ return this.tableStyles[position.sheetId][table.id]().borders[position.col]?.[position.row];
63171
+ } catch (e) {
63172
+ if (isEvaluationError(e) || e instanceof EvaluationError) return;
63173
+ throw e;
63174
+ }
63143
63175
  }
63144
63176
  computeTableStyle(sheetId, table) {
63145
63177
  return lazy(() => {
@@ -64444,14 +64476,13 @@ var CollaborativePlugin = class extends UIPlugin {
64444
64476
  * Get the list of others connected clients which are present in the same sheet
64445
64477
  * and with a valid position
64446
64478
  */
64447
- getClientsToDisplay() {
64479
+ getClientsToDisplay(sheetId) {
64448
64480
  try {
64449
64481
  this.getters.getCurrentClient();
64450
64482
  } catch (e) {
64451
64483
  if (e instanceof ClientDisconnectedError) return [];
64452
64484
  else throw e;
64453
64485
  }
64454
- const sheetId = this.getters.getActiveSheetId();
64455
64486
  const clients = [];
64456
64487
  for (const client of this.getters.getConnectedClients()) if (client.id !== this.getters.getCurrentClient().id && client.position && client.position.sheetId === sheetId && this.isPositionValid(client.position)) clients.push({
64457
64488
  ...client,
@@ -64462,7 +64493,7 @@ var CollaborativePlugin = class extends UIPlugin {
64462
64493
  drawLayer(renderingContext) {
64463
64494
  if (this.getters.isDashboard()) return;
64464
64495
  const { ctx, thinLineWidth, viewports, sheetId } = renderingContext;
64465
- for (const client of this.getClientsToDisplay()) {
64496
+ for (const client of this.getClientsToDisplay(sheetId)) {
64466
64497
  const { row, col } = client.position;
64467
64498
  const zone = this.getters.expandZone(sheetId, {
64468
64499
  top: row,
@@ -64891,8 +64922,8 @@ var HeaderVisibilityUIPlugin = class extends UIPlugin {
64891
64922
  getNextVisibleCellPosition({ sheetId, col, row }) {
64892
64923
  return {
64893
64924
  sheetId,
64894
- col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1),
64895
- row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1)
64925
+ col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1) || this.findVisibleHeader(sheetId, "COL", col, 0) || 0,
64926
+ row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1) || this.findVisibleHeader(sheetId, "ROW", row, 0) || 0
64896
64927
  };
64897
64928
  }
64898
64929
  /**
@@ -68797,6 +68828,10 @@ var ImageProvider = class {
68797
68828
  }
68798
68829
  };
68799
68830
 
68831
+ //#endregion
68832
+ //#region src/store_engine/store_registries.ts
68833
+ const globalStores = new Registry();
68834
+
68800
68835
  //#endregion
68801
68836
  //#region src/components/animation/ripple.ts
68802
68837
  const RIPPLE_KEY_FRAMES = [
@@ -72131,6 +72166,7 @@ var Spreadsheet = class extends Component {
72131
72166
  this.notificationStore = useStore(NotificationStore);
72132
72167
  this.composerFocusStore = useStore(ComposerFocusStore);
72133
72168
  this.sidePanel = useStore(SidePanelStore);
72169
+ for (const store of globalStores.getAll()) useStore(store);
72134
72170
  const fileStore = this.model.config.external.fileStore;
72135
72171
  useSubEnv({
72136
72172
  model: this.model,
@@ -87743,6 +87779,7 @@ const helpers = {
87743
87779
  collapseHierarchicalDisplayName,
87744
87780
  getCanonicalSymbolName,
87745
87781
  fuzzyLookup,
87782
+ PositionMap,
87746
87783
  replaceSymbolInFormula,
87747
87784
  isSingleCellReference,
87748
87785
  computeCachedTextDimension
@@ -87853,7 +87890,8 @@ const stores = {
87853
87890
  AutofillStore,
87854
87891
  ClientFocusStore,
87855
87892
  GridRenderer,
87856
- ViewportsStore
87893
+ ViewportsStore,
87894
+ globalStores
87857
87895
  };
87858
87896
  function addFunction(functionName, functionDescription) {
87859
87897
  functionRegistry.add(functionName, functionDescription);
@@ -87973,6 +88011,6 @@ exports.stores = stores;
87973
88011
  exports.tokenColors = tokenColors;
87974
88012
  exports.tokenize = tokenize;
87975
88013
 
87976
- __info__.version = "19.5.0-alpha.5";
87977
- __info__.date = "2026-07-20T10:50:13.850Z";
87978
- __info__.hash = "a599d86";
88014
+ __info__.version = "19.5.0-alpha.6";
88015
+ __info__.date = "2026-07-23T07:49:14.543Z";
88016
+ __info__.hash = "192a921";
@@ -2,9 +2,9 @@
2
2
  /*
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.5.0-alpha.5
6
- * @date 2026-07-20T10:50:15.584Z
7
- * @hash a599d86
5
+ * @version 19.5.0-alpha.6
6
+ * @date 2026-07-23T07:49:16.310Z
7
+ * @hash 192a921
8
8
  */
9
9
  :root {
10
10
  --os-gray-100: light-dark(#f9fafb, #1b1d26);
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.5.0-alpha.5
6
- * @date 2026-07-20T10:50:13.850Z
7
- * @hash a599d86
5
+ * @version 19.5.0-alpha.6
6
+ * @date 2026-07-23T07:49:14.543Z
7
+ * @hash 192a921
8
8
  */
9
9
 
10
10
  import * as owl from "@odoo/owl";
@@ -48399,7 +48399,8 @@ var Autofill = class extends Component {
48399
48399
  const { x, y } = this.state.handler ? this.state.position : this.props.position;
48400
48400
  return cssPropertiesToCss({
48401
48401
  top: `${y}px`,
48402
- left: `${x}px`
48402
+ left: `${x}px`,
48403
+ visibility: this.props.isVisible ? "visible" : "hidden"
48403
48404
  });
48404
48405
  }
48405
48406
  get styleNextValue() {
@@ -48825,7 +48826,7 @@ var CellComposerStore = class extends AbstractComposerStore {
48825
48826
  this._cancelEdition();
48826
48827
  this.resetContent();
48827
48828
  }
48828
- if (cmd.sheetIdFrom !== cmd.sheetIdTo) {
48829
+ if (this.model.selection.isListening(this) && cmd.sheetIdFrom !== cmd.sheetIdTo) {
48829
48830
  const activePosition = this.getters.getActivePosition();
48830
48831
  const { col, row } = this.getters.getNextVisibleCellPosition({
48831
48832
  sheetId: cmd.sheetIdTo,
@@ -53050,6 +53051,10 @@ var Grid = class extends Component {
53050
53051
  get displaySelectionHandler() {
53051
53052
  return this.env.isMobile() && this.composerFocusStore.activeComposer.editionMode === "inactive";
53052
53053
  }
53054
+ get clientsToDisplay() {
53055
+ const sheetId = this.env.model.getters.getActiveSheetId();
53056
+ return this.env.model.getters.getClientsToDisplay(sheetId);
53057
+ }
53053
53058
  };
53054
53059
 
53055
53060
  //#endregion
@@ -62638,6 +62643,8 @@ var PivotUIPlugin = class extends CoreViewPlugin {
62638
62643
  pivots = {};
62639
62644
  unusedPivotsInFormulas;
62640
62645
  custom;
62646
+ pivotPositionCache = new PositionMap();
62647
+ shouldInvalidateCache = false;
62641
62648
  constructor(config) {
62642
62649
  super(config);
62643
62650
  this.custom = config.custom;
@@ -62648,7 +62655,11 @@ var PivotUIPlugin = class extends CoreViewPlugin {
62648
62655
  }
62649
62656
  }
62650
62657
  handle(cmd) {
62651
- if (invalidateEvaluationCommands.has(cmd.type)) for (const pivotId of this.getters.getPivotIds()) this.setupPivot(pivotId, { recreate: true });
62658
+ if (invalidateEvaluationCommands.has(cmd.type)) {
62659
+ this.shouldInvalidateCache = true;
62660
+ for (const pivotId of this.getters.getPivotIds()) this.setupPivot(pivotId, { recreate: true });
62661
+ }
62662
+ if (cmd.type === "UPDATE_CELL") this.shouldInvalidateCache = true;
62652
62663
  switch (cmd.type) {
62653
62664
  case "REFRESH_PIVOT":
62654
62665
  this.refreshPivot(cmd.id);
@@ -62688,6 +62699,12 @@ var PivotUIPlugin = class extends CoreViewPlugin {
62688
62699
  break;
62689
62700
  }
62690
62701
  }
62702
+ finalize() {
62703
+ if (this.shouldInvalidateCache) {
62704
+ this.pivotPositionCache = new PositionMap();
62705
+ this.shouldInvalidateCache = false;
62706
+ }
62707
+ }
62691
62708
  /**
62692
62709
  * Get the id of the first pivot in the formula at the given position. Returns undefined if there
62693
62710
  * is no pivot at this position
@@ -62699,9 +62716,14 @@ var PivotUIPlugin = class extends CoreViewPlugin {
62699
62716
  * Get all of the ids of the pivot present in the formula at the given position.
62700
62717
  */
62701
62718
  getPivotIdsFromPosition(position) {
62702
- const cell = this.getters.getCorrespondingFormulaCell(position);
62703
- if (cell && cell.isFormula) return this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
62704
- return [];
62719
+ if (!this.pivotPositionCache.has(position)) {
62720
+ const cell = this.getters.getCorrespondingFormulaCell(position);
62721
+ if (cell && cell.isFormula) {
62722
+ const pivotIds = this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
62723
+ this.pivotPositionCache.set(position, pivotIds);
62724
+ }
62725
+ }
62726
+ return this.pivotPositionCache.get(position) || [];
62705
62727
  }
62706
62728
  getPivotIdsFromFormula(sheetId, formula) {
62707
62729
  return this.getPivotFunctions(sheetId, formula).map((pivotFunction) => {
@@ -62949,12 +62971,22 @@ var TableComputedStylePlugin = class extends UIPlugin {
62949
62971
  getCellTableStyle(position) {
62950
62972
  const table = this.getters.getTable(position);
62951
62973
  if (!table) return;
62952
- return this.tableStyles[position.sheetId][table.id]().styles[position.col]?.[position.row];
62974
+ try {
62975
+ return this.tableStyles[position.sheetId][table.id]().styles[position.col]?.[position.row];
62976
+ } catch (e) {
62977
+ if (isEvaluationError(e) || e instanceof EvaluationError) return;
62978
+ throw e;
62979
+ }
62953
62980
  }
62954
62981
  getCellTableBorder(position) {
62955
62982
  const table = this.getters.getTable(position);
62956
62983
  if (!table) return;
62957
- return this.tableStyles[position.sheetId][table.id]().borders[position.col]?.[position.row];
62984
+ try {
62985
+ return this.tableStyles[position.sheetId][table.id]().borders[position.col]?.[position.row];
62986
+ } catch (e) {
62987
+ if (isEvaluationError(e) || e instanceof EvaluationError) return;
62988
+ throw e;
62989
+ }
62958
62990
  }
62959
62991
  computeTableStyle(sheetId, table) {
62960
62992
  return lazy(() => {
@@ -64259,14 +64291,13 @@ var CollaborativePlugin = class extends UIPlugin {
64259
64291
  * Get the list of others connected clients which are present in the same sheet
64260
64292
  * and with a valid position
64261
64293
  */
64262
- getClientsToDisplay() {
64294
+ getClientsToDisplay(sheetId) {
64263
64295
  try {
64264
64296
  this.getters.getCurrentClient();
64265
64297
  } catch (e) {
64266
64298
  if (e instanceof ClientDisconnectedError) return [];
64267
64299
  else throw e;
64268
64300
  }
64269
- const sheetId = this.getters.getActiveSheetId();
64270
64301
  const clients = [];
64271
64302
  for (const client of this.getters.getConnectedClients()) if (client.id !== this.getters.getCurrentClient().id && client.position && client.position.sheetId === sheetId && this.isPositionValid(client.position)) clients.push({
64272
64303
  ...client,
@@ -64277,7 +64308,7 @@ var CollaborativePlugin = class extends UIPlugin {
64277
64308
  drawLayer(renderingContext) {
64278
64309
  if (this.getters.isDashboard()) return;
64279
64310
  const { ctx, thinLineWidth, viewports, sheetId } = renderingContext;
64280
- for (const client of this.getClientsToDisplay()) {
64311
+ for (const client of this.getClientsToDisplay(sheetId)) {
64281
64312
  const { row, col } = client.position;
64282
64313
  const zone = this.getters.expandZone(sheetId, {
64283
64314
  top: row,
@@ -64706,8 +64737,8 @@ var HeaderVisibilityUIPlugin = class extends UIPlugin {
64706
64737
  getNextVisibleCellPosition({ sheetId, col, row }) {
64707
64738
  return {
64708
64739
  sheetId,
64709
- col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1),
64710
- row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1)
64740
+ col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1) || this.findVisibleHeader(sheetId, "COL", col, 0) || 0,
64741
+ row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1) || this.findVisibleHeader(sheetId, "ROW", row, 0) || 0
64711
64742
  };
64712
64743
  }
64713
64744
  /**
@@ -68612,6 +68643,10 @@ var ImageProvider = class {
68612
68643
  }
68613
68644
  };
68614
68645
 
68646
+ //#endregion
68647
+ //#region src/store_engine/store_registries.ts
68648
+ const globalStores = new Registry();
68649
+
68615
68650
  //#endregion
68616
68651
  //#region src/components/animation/ripple.ts
68617
68652
  const RIPPLE_KEY_FRAMES = [
@@ -71946,6 +71981,7 @@ var Spreadsheet = class extends Component {
71946
71981
  this.notificationStore = useStore(NotificationStore);
71947
71982
  this.composerFocusStore = useStore(ComposerFocusStore);
71948
71983
  this.sidePanel = useStore(SidePanelStore);
71984
+ for (const store of globalStores.getAll()) useStore(store);
71949
71985
  const fileStore = this.model.config.external.fileStore;
71950
71986
  useSubEnv({
71951
71987
  model: this.model,
@@ -87558,6 +87594,7 @@ const helpers = {
87558
87594
  collapseHierarchicalDisplayName,
87559
87595
  getCanonicalSymbolName,
87560
87596
  fuzzyLookup,
87597
+ PositionMap,
87561
87598
  replaceSymbolInFormula,
87562
87599
  isSingleCellReference,
87563
87600
  computeCachedTextDimension
@@ -87668,7 +87705,8 @@ const stores = {
87668
87705
  AutofillStore,
87669
87706
  ClientFocusStore,
87670
87707
  GridRenderer,
87671
- ViewportsStore
87708
+ ViewportsStore,
87709
+ globalStores
87672
87710
  };
87673
87711
  function addFunction(functionName, functionDescription) {
87674
87712
  functionRegistry.add(functionName, functionDescription);
@@ -87694,6 +87732,6 @@ const chartHelpers = {
87694
87732
  //#endregion
87695
87733
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, BadExpressionError, CHART_TYPES, CellErrorType, CellValueType, CircularDependencyError, ClientDisconnectedError, ClipboardMIMEType, CommandResult, CompiledFormula, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DEFAULT_LOCALE_DIGIT_GROUPING, DIRECTION, DispatchResult, DivisionByZeroError, EvaluationError, InvalidReferenceError, LocalTransportService, Model, NEXT_VALUE, NotAvailableError, NumberTooLargeError, OrderedLayers, PREVIOUS_VALUE, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, SplillBlockedError, Spreadsheet, SpreadsheetPivotTable, UIPlugin, UnknownFunctionError, __info__, addFunction, addRenderingLayer, astToFormula, availableConditionalFormatOperators, availableDataValidationOperators, availableFiltersOperators, borderPositions, borderStyles, canExecuteInReadonly, categories, chartHelpers, compatibility, components, composerFocusTypes, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, errorTypes, filterDateCriterionOperators, filterNumberCriterionOperators, filterTextCriterionOperators, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidSubtotalFormulasCommands, invalidateBordersCommands, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isHeadersDependant, isMatrix, isPositionDependent, isRangeDependant, isSheetDependent, isTargetDependent, isZoneDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, schemeToColorScale, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
87696
87734
 
87697
- __info__.version = "19.5.0-alpha.5";
87698
- __info__.date = "2026-07-20T10:50:13.850Z";
87699
- __info__.hash = "a599d86";
87735
+ __info__.version = "19.5.0-alpha.6";
87736
+ __info__.date = "2026-07-23T07:49:14.543Z";
87737
+ __info__.hash = "192a921";
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.5.0-alpha.5
6
- * @date 2026-07-20T10:50:13.850Z
7
- * @hash a599d86
5
+ * @version 19.5.0-alpha.6
6
+ * @date 2026-07-23T07:49:14.543Z
7
+ * @hash 192a921
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -48401,7 +48401,8 @@ set(value) {
48401
48401
  const { x, y } = this.state.handler ? this.state.position : this.props.position;
48402
48402
  return cssPropertiesToCss({
48403
48403
  top: `${y}px`,
48404
- left: `${x}px`
48404
+ left: `${x}px`,
48405
+ visibility: this.props.isVisible ? "visible" : "hidden"
48405
48406
  });
48406
48407
  }
48407
48408
  get styleNextValue() {
@@ -48827,7 +48828,7 @@ set(value) {
48827
48828
  this._cancelEdition();
48828
48829
  this.resetContent();
48829
48830
  }
48830
- if (cmd.sheetIdFrom !== cmd.sheetIdTo) {
48831
+ if (this.model.selection.isListening(this) && cmd.sheetIdFrom !== cmd.sheetIdTo) {
48831
48832
  const activePosition = this.getters.getActivePosition();
48832
48833
  const { col, row } = this.getters.getNextVisibleCellPosition({
48833
48834
  sheetId: cmd.sheetIdTo,
@@ -53052,6 +53053,10 @@ set(value) {
53052
53053
  get displaySelectionHandler() {
53053
53054
  return this.env.isMobile() && this.composerFocusStore.activeComposer.editionMode === "inactive";
53054
53055
  }
53056
+ get clientsToDisplay() {
53057
+ const sheetId = this.env.model.getters.getActiveSheetId();
53058
+ return this.env.model.getters.getClientsToDisplay(sheetId);
53059
+ }
53055
53060
  };
53056
53061
 
53057
53062
  //#endregion
@@ -62640,6 +62645,8 @@ set(value) {
62640
62645
  pivots = {};
62641
62646
  unusedPivotsInFormulas;
62642
62647
  custom;
62648
+ pivotPositionCache = new PositionMap();
62649
+ shouldInvalidateCache = false;
62643
62650
  constructor(config) {
62644
62651
  super(config);
62645
62652
  this.custom = config.custom;
@@ -62650,7 +62657,11 @@ set(value) {
62650
62657
  }
62651
62658
  }
62652
62659
  handle(cmd) {
62653
- if (invalidateEvaluationCommands.has(cmd.type)) for (const pivotId of this.getters.getPivotIds()) this.setupPivot(pivotId, { recreate: true });
62660
+ if (invalidateEvaluationCommands.has(cmd.type)) {
62661
+ this.shouldInvalidateCache = true;
62662
+ for (const pivotId of this.getters.getPivotIds()) this.setupPivot(pivotId, { recreate: true });
62663
+ }
62664
+ if (cmd.type === "UPDATE_CELL") this.shouldInvalidateCache = true;
62654
62665
  switch (cmd.type) {
62655
62666
  case "REFRESH_PIVOT":
62656
62667
  this.refreshPivot(cmd.id);
@@ -62690,6 +62701,12 @@ set(value) {
62690
62701
  break;
62691
62702
  }
62692
62703
  }
62704
+ finalize() {
62705
+ if (this.shouldInvalidateCache) {
62706
+ this.pivotPositionCache = new PositionMap();
62707
+ this.shouldInvalidateCache = false;
62708
+ }
62709
+ }
62693
62710
  /**
62694
62711
  * Get the id of the first pivot in the formula at the given position. Returns undefined if there
62695
62712
  * is no pivot at this position
@@ -62701,9 +62718,14 @@ set(value) {
62701
62718
  * Get all of the ids of the pivot present in the formula at the given position.
62702
62719
  */
62703
62720
  getPivotIdsFromPosition(position) {
62704
- const cell = this.getters.getCorrespondingFormulaCell(position);
62705
- if (cell && cell.isFormula) return this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
62706
- return [];
62721
+ if (!this.pivotPositionCache.has(position)) {
62722
+ const cell = this.getters.getCorrespondingFormulaCell(position);
62723
+ if (cell && cell.isFormula) {
62724
+ const pivotIds = this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
62725
+ this.pivotPositionCache.set(position, pivotIds);
62726
+ }
62727
+ }
62728
+ return this.pivotPositionCache.get(position) || [];
62707
62729
  }
62708
62730
  getPivotIdsFromFormula(sheetId, formula) {
62709
62731
  return this.getPivotFunctions(sheetId, formula).map((pivotFunction) => {
@@ -62951,12 +62973,22 @@ set(value) {
62951
62973
  getCellTableStyle(position) {
62952
62974
  const table = this.getters.getTable(position);
62953
62975
  if (!table) return;
62954
- return this.tableStyles[position.sheetId][table.id]().styles[position.col]?.[position.row];
62976
+ try {
62977
+ return this.tableStyles[position.sheetId][table.id]().styles[position.col]?.[position.row];
62978
+ } catch (e) {
62979
+ if (isEvaluationError(e) || e instanceof EvaluationError) return;
62980
+ throw e;
62981
+ }
62955
62982
  }
62956
62983
  getCellTableBorder(position) {
62957
62984
  const table = this.getters.getTable(position);
62958
62985
  if (!table) return;
62959
- return this.tableStyles[position.sheetId][table.id]().borders[position.col]?.[position.row];
62986
+ try {
62987
+ return this.tableStyles[position.sheetId][table.id]().borders[position.col]?.[position.row];
62988
+ } catch (e) {
62989
+ if (isEvaluationError(e) || e instanceof EvaluationError) return;
62990
+ throw e;
62991
+ }
62960
62992
  }
62961
62993
  computeTableStyle(sheetId, table) {
62962
62994
  return lazy(() => {
@@ -64261,14 +64293,13 @@ set(value) {
64261
64293
  * Get the list of others connected clients which are present in the same sheet
64262
64294
  * and with a valid position
64263
64295
  */
64264
- getClientsToDisplay() {
64296
+ getClientsToDisplay(sheetId) {
64265
64297
  try {
64266
64298
  this.getters.getCurrentClient();
64267
64299
  } catch (e) {
64268
64300
  if (e instanceof ClientDisconnectedError) return [];
64269
64301
  else throw e;
64270
64302
  }
64271
- const sheetId = this.getters.getActiveSheetId();
64272
64303
  const clients = [];
64273
64304
  for (const client of this.getters.getConnectedClients()) if (client.id !== this.getters.getCurrentClient().id && client.position && client.position.sheetId === sheetId && this.isPositionValid(client.position)) clients.push({
64274
64305
  ...client,
@@ -64279,7 +64310,7 @@ set(value) {
64279
64310
  drawLayer(renderingContext) {
64280
64311
  if (this.getters.isDashboard()) return;
64281
64312
  const { ctx, thinLineWidth, viewports, sheetId } = renderingContext;
64282
- for (const client of this.getClientsToDisplay()) {
64313
+ for (const client of this.getClientsToDisplay(sheetId)) {
64283
64314
  const { row, col } = client.position;
64284
64315
  const zone = this.getters.expandZone(sheetId, {
64285
64316
  top: row,
@@ -64708,8 +64739,8 @@ set(value) {
64708
64739
  getNextVisibleCellPosition({ sheetId, col, row }) {
64709
64740
  return {
64710
64741
  sheetId,
64711
- col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1),
64712
- row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1)
64742
+ col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1) || this.findVisibleHeader(sheetId, "COL", col, 0) || 0,
64743
+ row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1) || this.findVisibleHeader(sheetId, "ROW", row, 0) || 0
64713
64744
  };
64714
64745
  }
64715
64746
  /**
@@ -68614,6 +68645,10 @@ set(value) {
68614
68645
  }
68615
68646
  };
68616
68647
 
68648
+ //#endregion
68649
+ //#region src/store_engine/store_registries.ts
68650
+ const globalStores = new Registry();
68651
+
68617
68652
  //#endregion
68618
68653
  //#region src/components/animation/ripple.ts
68619
68654
  const RIPPLE_KEY_FRAMES = [
@@ -71948,6 +71983,7 @@ set(value) {
71948
71983
  this.notificationStore = useStore(NotificationStore);
71949
71984
  this.composerFocusStore = useStore(ComposerFocusStore);
71950
71985
  this.sidePanel = useStore(SidePanelStore);
71986
+ for (const store of globalStores.getAll()) useStore(store);
71951
71987
  const fileStore = this.model.config.external.fileStore;
71952
71988
  useSubEnv({
71953
71989
  model: this.model,
@@ -87560,6 +87596,7 @@ set(value) {
87560
87596
  collapseHierarchicalDisplayName,
87561
87597
  getCanonicalSymbolName,
87562
87598
  fuzzyLookup,
87599
+ PositionMap,
87563
87600
  replaceSymbolInFormula,
87564
87601
  isSingleCellReference,
87565
87602
  computeCachedTextDimension
@@ -87670,7 +87707,8 @@ set(value) {
87670
87707
  AutofillStore,
87671
87708
  ClientFocusStore,
87672
87709
  GridRenderer,
87673
- ViewportsStore
87710
+ ViewportsStore,
87711
+ globalStores
87674
87712
  };
87675
87713
  function addFunction(functionName, functionDescription) {
87676
87714
  functionRegistry.add(functionName, functionDescription);
@@ -87790,8 +87828,8 @@ exports.stores = stores;
87790
87828
  exports.tokenColors = tokenColors;
87791
87829
  exports.tokenize = tokenize;
87792
87830
 
87793
- __info__.version = "19.5.0-alpha.5";
87794
- __info__.date = "2026-07-20T10:50:13.850Z";
87795
- __info__.hash = "a599d86";
87831
+ __info__.version = "19.5.0-alpha.6";
87832
+ __info__.date = "2026-07-23T07:49:14.543Z";
87833
+ __info__.hash = "192a921";
87796
87834
 
87797
87835
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);