@odoo/o-spreadsheet 19.5.0-alpha.15 → 19.5.0-alpha.17

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.15
6
- * @date 2026-09-01T11:37:11.514Z
7
- * @hash 23c00bb
5
+ * @version 19.5.0-alpha.17
6
+ * @date 2026-09-07T05:58:42.129Z
7
+ * @hash 532243c
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -2658,7 +2658,7 @@ stores.inject(MyMetaStore, storeInstance);
2658
2658
  *
2659
2659
  * The end goal is to eliminate all compatibility shims.
2660
2660
  */
2661
- const { __ODOO_COMPATIBILITY_LAYER_ADDED__, blockDom: blockDom$1, config, onMounted: onMounted$26, onPatched: onPatched$5, onWillUnmount: onWillUnmount$20, App: OwlApp, Component: OwlComponent, EnvPlugin: OwlEnvPlugin, useComponent: OwlUseComponent, useEnv: OwlUseEnv, useLayoutEffect: OwlUseLayoutEffect, useSubEnv: OwlUseSubEnv, Plugin, usePlugin, useProps: useProps$171, providePlugins, useScope, xml: xml$5 } = _odoo_owl;
2661
+ const { __ODOO_COMPATIBILITY_LAYER_ADDED__, blockDom: blockDom$1, config, onMounted: onMounted$26, onPatched: onPatched$5, onWillUnmount: onWillUnmount$20, App: OwlApp, Component: OwlComponent, EnvPlugin: OwlEnvPlugin, useComponent: OwlUseComponent, useEnv: OwlUseEnv, useLayoutEffect: OwlUseLayoutEffect, useSubEnv: OwlUseSubEnv, Plugin: Plugin$1, usePlugin: usePlugin$1, useProps: useProps$171, providePlugins: providePlugins$3, useScope, xml: xml$5 } = _odoo_owl;
2662
2662
  const isOdooCompatLoaded = __ODOO_COMPATIBILITY_LAYER_ADDED__ === true;
2663
2663
  var _Component = class extends OwlComponent {
2664
2664
  env;
@@ -2703,17 +2703,17 @@ stores.inject(MyMetaStore, storeInstance);
2703
2703
  });
2704
2704
  onWillUnmount$20(() => cleanup && cleanup());
2705
2705
  }
2706
- var _EnvPlugin = class extends Plugin {
2706
+ var _EnvPlugin = class extends Plugin$1 {
2707
2707
  static id = "__ENV__";
2708
2708
  env = config("env") ?? {};
2709
2709
  };
2710
2710
  function _useEnv() {
2711
- return usePlugin(_EnvPlugin).env;
2711
+ return usePlugin$1(_EnvPlugin).env;
2712
2712
  }
2713
2713
  function _useSubEnv(extension) {
2714
2714
  const subEnv = Object.create(_useEnv());
2715
2715
  Object.defineProperties(subEnv, Object.getOwnPropertyDescriptors(extension));
2716
- providePlugins([_EnvPlugin], { env: subEnv });
2716
+ providePlugins$3([_EnvPlugin], { env: subEnv });
2717
2717
  const component = _useComponent();
2718
2718
  component.env = subEnv;
2719
2719
  }
@@ -2850,7 +2850,7 @@ set(value) {
2850
2850
  createRoot(component, config = {}) {
2851
2851
  if (config.env) component = { [component.name]: class extends component {
2852
2852
  constructor(node) {
2853
- providePlugins([_EnvPlugin], { env: config.env });
2853
+ providePlugins$3([_EnvPlugin], { env: config.env });
2854
2854
  super(node);
2855
2855
  }
2856
2856
  } }[component.name];
@@ -13903,7 +13903,6 @@ set(value) {
13903
13903
  getFooterSize: this.getFooterSizeCallback
13904
13904
  });
13905
13905
  sheetsWithDirtyViewports = /* @__PURE__ */ new Set();
13906
- shouldRepositionViewports = false;
13907
13906
  displayedSheetId = this.model.getters.getActiveSheetId();
13908
13907
  constructor(get) {
13909
13908
  super(get);
@@ -13919,7 +13918,6 @@ set(value) {
13919
13918
  this.sheetsWithDirtyViewports.add(sheetId);
13920
13919
  this.syncPaneDivision(sheetId);
13921
13920
  }
13922
- this.shouldRepositionViewports = !this.getters.getSelectedFigureIds().length;
13923
13921
  break;
13924
13922
  case "UNFREEZE_ROWS":
13925
13923
  case "UNFREEZE_COLUMNS":
@@ -13962,17 +13960,8 @@ set(value) {
13962
13960
  }
13963
13961
  }
13964
13962
  finalize() {
13965
- for (const sheetId of this.sheetsWithDirtyViewports) {
13966
- this.viewports.resetViewports(sheetId);
13967
- if (this.shouldRepositionViewports) {
13968
- const position = this.getters.getSheetPosition(sheetId);
13969
- this.viewports.getSubViewports(sheetId).forEach((viewport) => {
13970
- viewport.repositionViewport(position);
13971
- });
13972
- }
13973
- }
13963
+ for (const sheetId of this.sheetsWithDirtyViewports) this.viewports.resetViewports(sheetId);
13974
13964
  this.sheetsWithDirtyViewports = /* @__PURE__ */ new Set();
13975
- this.shouldRepositionViewports = false;
13976
13965
  this.setViewports();
13977
13966
  }
13978
13967
  setViewports() {
@@ -16221,6 +16210,12 @@ set(value) {
16221
16210
  }
16222
16211
  };
16223
16212
 
16213
+ //#endregion
16214
+ //#region src/components/popover/popover_container_owl_plugin.ts
16215
+ var PopoverContainerPlugin = class extends _odoo_owl.Plugin {
16216
+ getContainerRect = (0, _odoo_owl.useConfig)("getPopoverContainerRect");
16217
+ };
16218
+
16224
16219
  //#endregion
16225
16220
  //#region src/components/helpers/position_hook.ts
16226
16221
  /**
@@ -16263,11 +16258,9 @@ set(value) {
16263
16258
  width: 0,
16264
16259
  height: 0
16265
16260
  });
16266
- const component = useComponent();
16267
- const spreadsheetRect = useSpreadsheetRect();
16261
+ const popoverContainerPlugin = (0, _odoo_owl.usePlugin)(PopoverContainerPlugin);
16268
16262
  function updateRect() {
16269
- const env = component.env;
16270
- const newRect = "getPopoverContainerRect" in env && env.getPopoverContainerRect ? env.getPopoverContainerRect() : spreadsheetRect;
16263
+ const newRect = popoverContainerPlugin.getContainerRect();
16271
16264
  container.x = newRect.x;
16272
16265
  container.y = newRect.y;
16273
16266
  container.width = newRect.width;
@@ -16285,7 +16278,6 @@ set(value) {
16285
16278
  static template = "o-spreadsheet-Popover";
16286
16279
  props = (0, _odoo_owl.useProps)({
16287
16280
  anchorRect: types.Rect(),
16288
- containerRect: types.object({}).optional(),
16289
16281
  positioning: types.or([types.literal("top-right"), types.literal("bottom-left")]).optional("bottom-left"),
16290
16282
  maxWidth: types.Pixel().optional(),
16291
16283
  maxHeight: types.Pixel().optional(),
@@ -34194,7 +34186,8 @@ set(value) {
34194
34186
  format,
34195
34187
  locale: getters.getLocale()
34196
34188
  }));
34197
- ({labels, dataSetsValues} = filterInvalidDataPoints(labels, dataSetsValues));
34189
+ const invalidDataValue = definition.fillArea ? ZERO : EMPTY$1;
34190
+ ({labels, dataSetsValues} = filterInvalidDataPoints(labels, dataSetsValues, invalidDataValue));
34198
34191
  if (axisType === "time") ({labels, dataSetsValues} = fixEmptyLabelsForDateCharts(labels, dataSetsValues));
34199
34192
  if (definition.aggregated) ({labels, dataSetsValues} = aggregateDataForLabels(labels, dataSetsValues));
34200
34193
  if (definition.cumulative) dataSetsValues = makeDatasetsCumulative(dataSetsValues, "asc");
@@ -34571,7 +34564,7 @@ set(value) {
34571
34564
  * - have neither a label nor a value
34572
34565
  * - have no label and a non-numeric value
34573
34566
  */
34574
- function filterInvalidDataPoints(labels, datasets) {
34567
+ function filterInvalidDataPoints(labels, datasets, invalidDataValue = EMPTY$1) {
34575
34568
  const dataPointsIndexes = range(0, Math.max(labels.length, ...datasets.map((dataset) => dataset.data?.length || 0))).filter((dataPointIndex) => {
34576
34569
  const label = labels[dataPointIndex];
34577
34570
  const values = datasets.map((dataset) => dataset.data?.[dataPointIndex]);
@@ -34581,7 +34574,7 @@ set(value) {
34581
34574
  labels: dataPointsIndexes.map((i) => labels[i] || ""),
34582
34575
  dataSetsValues: datasets.map((dataset) => ({
34583
34576
  ...dataset,
34584
- data: dataPointsIndexes.map((i) => isNumberResult(dataset.data[i]) ? dataset.data[i] : EMPTY$1)
34577
+ data: dataPointsIndexes.map((i) => isNumberResult(dataset.data[i]) ? dataset.data[i] : invalidDataValue)
34585
34578
  }))
34586
34579
  };
34587
34580
  }
@@ -55525,7 +55518,7 @@ set(value) {
55525
55518
  this.checkboxToggleStore = useStore(CheckboxToggleStore);
55526
55519
  useStore(ArrayFormulaHighlight);
55527
55520
  this.automaticSumStore = useLocalStore(AutomaticSumStore);
55528
- useSubEnv({ getPopoverContainerRect: () => this.getGridRect() });
55521
+ (0, _odoo_owl.providePlugins)([PopoverContainerPlugin], { getPopoverContainerRect: () => this.getGridRect() });
55529
55522
  (0, _odoo_owl.useListener)(document.body, "cut", this.copy.bind(this, true));
55530
55523
  (0, _odoo_owl.useListener)(document.body, "copy", this.copy.bind(this, false));
55531
55524
  (0, _odoo_owl.useListener)(document.body, "paste", this.paste.bind(this));
@@ -63453,7 +63446,7 @@ set(value) {
63453
63446
  if (rangeError) return [[rangeError]];
63454
63447
  const sheetId = range.sheetId;
63455
63448
  const zone = range.zone;
63456
- const _zone = intersection(zone, this.getters.getSheetZone(sheetId));
63449
+ const _zone = this.getters.clipRangeToSheet(range)?.zone;
63457
63450
  if (!_zone) return [[]];
63458
63451
  const { top, left, bottom, right } = zone;
63459
63452
  const cacheKey = `${sheetId}-${top}-${left}-${bottom}-${right}`;
@@ -64443,10 +64436,10 @@ set(value) {
64443
64436
  updateDependencies(position) {
64444
64437
  this.formulaDependencies().removeAllDependencies(position);
64445
64438
  const dependencies = this.getDirectDependencies(position);
64446
- this.formulaDependencies().addDependencies(position, dependencies);
64439
+ this.formulaDependencies().addDependencies(position, this.getters.clipRangesToSheet(dependencies));
64447
64440
  }
64448
64441
  addDependencies(position, dependencies) {
64449
- this.formulaDependencies().addDependencies(position, dependencies);
64442
+ this.formulaDependencies().addDependencies(position, this.getters.clipRangesToSheet(dependencies));
64450
64443
  this.computeDependencies(dependencies);
64451
64444
  }
64452
64445
  computeDependencies(dependencies) {
@@ -64519,7 +64512,8 @@ set(value) {
64519
64512
  const graph = new FormulaDependencyGraph();
64520
64513
  for (const sheetId of this.getters.getSheetIds()) for (const cell of this.getters.getCells(sheetId)) if (cell.isFormula) {
64521
64514
  const cellPosition = this.getters.getCellPosition(cell.id);
64522
- graph.addDependencies(cellPosition, cell.compiledFormula.rangeDependencies);
64515
+ const dependencies = this.getters.clipRangesToSheet(cell.compiledFormula.rangeDependencies);
64516
+ graph.addDependencies(cellPosition, dependencies);
64523
64517
  }
64524
64518
  return graph;
64525
64519
  });
@@ -72665,7 +72659,7 @@ set(value) {
72665
72659
  this.zoomStore = useStore(ZoomStore);
72666
72660
  useLocalStore(HoveredTableStore);
72667
72661
  const rendererStore = useLocalStore(RendererStore, OrderedLayers().filter((layer) => layer !== "Headers"));
72668
- useSubEnv({ getPopoverContainerRect: () => this.zoomStore.getZoomedRect(this.getGridRect()) });
72662
+ (0, _odoo_owl.providePlugins)([PopoverContainerPlugin], { getPopoverContainerRect: () => this.zoomStore.getZoomedRect(this.getGridRect()) });
72669
72663
  useGridDrawing({
72670
72664
  canvasRef: this.canvasRef,
72671
72665
  rendererStore,
@@ -75040,6 +75034,7 @@ set(value) {
75040
75034
  stores.inject(ModelStore, this.model);
75041
75035
  this.viewStore = useStore(ViewportsStore);
75042
75036
  this.zoomStore = useStore(ZoomStore);
75037
+ (0, _odoo_owl.providePlugins)([PopoverContainerPlugin], { getPopoverContainerRect: () => getElBoundingRect(this.spreadsheetRef()) });
75043
75038
  const env = this.env;
75044
75039
  stores.get(ScreenWidthStore).setSmallThreshhold(() => {
75045
75040
  return env.isSmall;
@@ -76082,6 +76077,8 @@ set(value) {
76082
76077
  "extendRange",
76083
76078
  "getRangeString",
76084
76079
  "getRangeFromSheetXC",
76080
+ "clipRangesToSheet",
76081
+ "clipRangeToSheet",
76085
76082
  "createAdaptedRanges",
76086
76083
  "getRangeData",
76087
76084
  "getRangeDataFromXc",
@@ -76120,6 +76117,22 @@ set(value) {
76120
76117
  addRangeProvider(provider) {
76121
76118
  this.providers.push(provider);
76122
76119
  }
76120
+ clipRangeToSheet(range) {
76121
+ if (range.invalidXc) return range;
76122
+ const sheetZone = this.getters.getSheetZone(range.sheetId);
76123
+ if (isZoneInside(range.zone, sheetZone)) return range;
76124
+ const newZone = intersection(range.zone, sheetZone);
76125
+ if (!newZone) return;
76126
+ return this.getters.getRangeFromZone(range.sheetId, newZone);
76127
+ }
76128
+ clipRangesToSheet(ranges) {
76129
+ const clippedRanges = [];
76130
+ for (const range of ranges) {
76131
+ const clippedRange = this.clipRangeToSheet(range);
76132
+ if (clippedRange) clippedRanges.push(clippedRange);
76133
+ }
76134
+ return clippedRanges;
76135
+ }
76123
76136
  createAdaptedRanges(ranges, offsetX, offsetY, sheetId) {
76124
76137
  return ranges.map((range) => {
76125
76138
  if (!isZoneValid(range.zone)) return range;
@@ -91255,8 +91268,8 @@ exports.stores = stores;
91255
91268
  exports.tokenColors = tokenColors;
91256
91269
  exports.tokenize = tokenize;
91257
91270
 
91258
- __info__.version = "19.5.0-alpha.15";
91259
- __info__.date = "2026-09-01T11:37:11.514Z";
91260
- __info__.hash = "23c00bb";
91271
+ __info__.version = "19.5.0-alpha.17";
91272
+ __info__.date = "2026-09-07T05:58:42.129Z";
91273
+ __info__.hash = "532243c";
91261
91274
 
91262
91275
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);