@odoo/o-spreadsheet 19.5.0-alpha.16 → 19.5.0-alpha.18

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.16
6
- * @date 2026-09-04T07:53:23.908Z
7
- * @hash bb7357a
5
+ * @version 19.5.0-alpha.18
6
+ * @date 2026-09-07T12:43:29.601Z
7
+ * @hash 54a0597
8
8
  */
9
9
 
10
10
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -2657,7 +2657,7 @@ function unregisterChartJsExtensions() {
2657
2657
  *
2658
2658
  * The end goal is to eliminate all compatibility shims.
2659
2659
  */
2660
- 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;
2660
+ 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;
2661
2661
  const isOdooCompatLoaded = __ODOO_COMPATIBILITY_LAYER_ADDED__ === true;
2662
2662
  var _Component = class extends OwlComponent {
2663
2663
  env;
@@ -2702,17 +2702,17 @@ function _useLayoutEffect(effect, computeDependencies = () => [NaN]) {
2702
2702
  });
2703
2703
  onWillUnmount$20(() => cleanup && cleanup());
2704
2704
  }
2705
- var _EnvPlugin = class extends Plugin {
2705
+ var _EnvPlugin = class extends Plugin$1 {
2706
2706
  static id = "__ENV__";
2707
2707
  env = config("env") ?? {};
2708
2708
  };
2709
2709
  function _useEnv() {
2710
- return usePlugin(_EnvPlugin).env;
2710
+ return usePlugin$1(_EnvPlugin).env;
2711
2711
  }
2712
2712
  function _useSubEnv(extension) {
2713
2713
  const subEnv = Object.create(_useEnv());
2714
2714
  Object.defineProperties(subEnv, Object.getOwnPropertyDescriptors(extension));
2715
- providePlugins([_EnvPlugin], { env: subEnv });
2715
+ providePlugins$3([_EnvPlugin], { env: subEnv });
2716
2716
  const component = _useComponent();
2717
2717
  component.env = subEnv;
2718
2718
  }
@@ -2849,7 +2849,7 @@ var _App = class extends OwlApp {
2849
2849
  createRoot(component, config = {}) {
2850
2850
  if (config.env) component = { [component.name]: class extends component {
2851
2851
  constructor(node) {
2852
- providePlugins([_EnvPlugin], { env: config.env });
2852
+ providePlugins$3([_EnvPlugin], { env: config.env });
2853
2853
  super(node);
2854
2854
  }
2855
2855
  } }[component.name];
@@ -16209,6 +16209,12 @@ var Menu = class extends Component {
16209
16209
  }
16210
16210
  };
16211
16211
 
16212
+ //#endregion
16213
+ //#region src/components/popover/popover_container_owl_plugin.ts
16214
+ var PopoverContainerPlugin = class extends _odoo_owl.Plugin {
16215
+ getContainerRect = (0, _odoo_owl.useConfig)("getPopoverContainerRect");
16216
+ };
16217
+
16212
16218
  //#endregion
16213
16219
  //#region src/components/helpers/position_hook.ts
16214
16220
  /**
@@ -16251,11 +16257,9 @@ function usePopoverContainer() {
16251
16257
  width: 0,
16252
16258
  height: 0
16253
16259
  });
16254
- const component = useComponent();
16255
- const spreadsheetRect = useSpreadsheetRect();
16260
+ const popoverContainerPlugin = (0, _odoo_owl.usePlugin)(PopoverContainerPlugin);
16256
16261
  function updateRect() {
16257
- const env = component.env;
16258
- const newRect = "getPopoverContainerRect" in env && env.getPopoverContainerRect ? env.getPopoverContainerRect() : spreadsheetRect;
16262
+ const newRect = popoverContainerPlugin.getContainerRect();
16259
16263
  container.x = newRect.x;
16260
16264
  container.y = newRect.y;
16261
16265
  container.width = newRect.width;
@@ -16273,7 +16277,6 @@ var Popover = class extends Component {
16273
16277
  static template = "o-spreadsheet-Popover";
16274
16278
  props = (0, _odoo_owl.useProps)({
16275
16279
  anchorRect: types.Rect(),
16276
- containerRect: types.object({}).optional(),
16277
16280
  positioning: types.or([types.literal("top-right"), types.literal("bottom-left")]).optional("bottom-left"),
16278
16281
  maxWidth: types.Pixel().optional(),
16279
16282
  maxHeight: types.Pixel().optional(),
@@ -55514,7 +55517,7 @@ var Grid = class extends Component {
55514
55517
  this.checkboxToggleStore = useStore(CheckboxToggleStore);
55515
55518
  useStore(ArrayFormulaHighlight);
55516
55519
  this.automaticSumStore = useLocalStore(AutomaticSumStore);
55517
- useSubEnv({ getPopoverContainerRect: () => this.getGridRect() });
55520
+ (0, _odoo_owl.providePlugins)([PopoverContainerPlugin], { getPopoverContainerRect: () => this.getGridRect() });
55518
55521
  (0, _odoo_owl.useListener)(document.body, "cut", this.copy.bind(this, true));
55519
55522
  (0, _odoo_owl.useListener)(document.body, "copy", this.copy.bind(this, false));
55520
55523
  (0, _odoo_owl.useListener)(document.body, "paste", this.paste.bind(this));
@@ -63442,7 +63445,7 @@ var CompilationParametersBuilder = class {
63442
63445
  if (rangeError) return [[rangeError]];
63443
63446
  const sheetId = range.sheetId;
63444
63447
  const zone = range.zone;
63445
- const _zone = intersection(zone, this.getters.getSheetZone(sheetId));
63448
+ const _zone = this.getters.clipRangeToSheet(range)?.zone;
63446
63449
  if (!_zone) return [[]];
63447
63450
  const { top, left, bottom, right } = zone;
63448
63451
  const cacheKey = `${sheetId}-${top}-${left}-${bottom}-${right}`;
@@ -64616,10 +64619,10 @@ var Evaluator = class {
64616
64619
  updateDependencies(position) {
64617
64620
  this.formulaDependencies().removeAllDependencies(position);
64618
64621
  const dependencies = this.getDirectDependencies(position);
64619
- this.formulaDependencies().addDependencies(position, dependencies);
64622
+ this.formulaDependencies().addDependencies(position, this.getters.clipRangesToSheet(dependencies));
64620
64623
  }
64621
64624
  addDependencies(position, dependencies) {
64622
- this.formulaDependencies().addDependencies(position, dependencies);
64625
+ this.formulaDependencies().addDependencies(position, this.getters.clipRangesToSheet(dependencies));
64623
64626
  this.computeDependencies(dependencies);
64624
64627
  }
64625
64628
  computeDependencies(dependencies) {
@@ -64692,7 +64695,8 @@ var Evaluator = class {
64692
64695
  const graph = new FormulaDependencyGraph();
64693
64696
  for (const sheetId of this.getters.getSheetIds()) for (const cell of this.getters.getCells(sheetId)) if (cell.isFormula) {
64694
64697
  const cellPosition = this.getters.getCellPosition(cell.id);
64695
- graph.addDependencies(cellPosition, cell.compiledFormula.rangeDependencies);
64698
+ const dependencies = this.getters.clipRangesToSheet(cell.compiledFormula.rangeDependencies);
64699
+ graph.addDependencies(cellPosition, dependencies);
64696
64700
  }
64697
64701
  return graph;
64698
64702
  });
@@ -72838,7 +72842,7 @@ var SpreadsheetDashboard = class extends Component {
72838
72842
  this.zoomStore = useStore(ZoomStore);
72839
72843
  useLocalStore(HoveredTableStore);
72840
72844
  const rendererStore = useLocalStore(RendererStore, OrderedLayers().filter((layer) => layer !== "Headers"));
72841
- useSubEnv({ getPopoverContainerRect: () => this.zoomStore.getZoomedRect(this.getGridRect()) });
72845
+ (0, _odoo_owl.providePlugins)([PopoverContainerPlugin], { getPopoverContainerRect: () => this.zoomStore.getZoomedRect(this.getGridRect()) });
72842
72846
  useGridDrawing({
72843
72847
  canvasRef: this.canvasRef,
72844
72848
  rendererStore,
@@ -75213,6 +75217,7 @@ var Spreadsheet = class extends Component {
75213
75217
  stores.inject(ModelStore, this.model);
75214
75218
  this.viewStore = useStore(ViewportsStore);
75215
75219
  this.zoomStore = useStore(ZoomStore);
75220
+ (0, _odoo_owl.providePlugins)([PopoverContainerPlugin], { getPopoverContainerRect: () => getElBoundingRect(this.spreadsheetRef()) });
75216
75221
  const env = this.env;
75217
75222
  stores.get(ScreenWidthStore).setSmallThreshhold(() => {
75218
75223
  return env.isSmall;
@@ -76255,6 +76260,8 @@ var RangeAdapterPlugin = class {
76255
76260
  "extendRange",
76256
76261
  "getRangeString",
76257
76262
  "getRangeFromSheetXC",
76263
+ "clipRangesToSheet",
76264
+ "clipRangeToSheet",
76258
76265
  "createAdaptedRanges",
76259
76266
  "getRangeData",
76260
76267
  "getRangeDataFromXc",
@@ -76293,6 +76300,22 @@ var RangeAdapterPlugin = class {
76293
76300
  addRangeProvider(provider) {
76294
76301
  this.providers.push(provider);
76295
76302
  }
76303
+ clipRangeToSheet(range) {
76304
+ if (range.invalidXc) return range;
76305
+ const sheetZone = this.getters.getSheetZone(range.sheetId);
76306
+ if (isZoneInside(range.zone, sheetZone)) return range;
76307
+ const newZone = intersection(range.zone, sheetZone);
76308
+ if (!newZone) return;
76309
+ return this.getters.getRangeFromZone(range.sheetId, newZone);
76310
+ }
76311
+ clipRangesToSheet(ranges) {
76312
+ const clippedRanges = [];
76313
+ for (const range of ranges) {
76314
+ const clippedRange = this.clipRangeToSheet(range);
76315
+ if (clippedRange) clippedRanges.push(clippedRange);
76316
+ }
76317
+ return clippedRanges;
76318
+ }
76296
76319
  createAdaptedRanges(ranges, offsetX, offsetY, sheetId) {
76297
76320
  return ranges.map((range) => {
76298
76321
  if (!isZoneValid(range.zone)) return range;
@@ -91306,6 +91329,7 @@ const stores = {
91306
91329
  ZoomStore,
91307
91330
  globalStores
91308
91331
  };
91332
+ const owlPlugins = { PopoverContainerPlugin };
91309
91333
  function addFunction(functionName, functionDescription) {
91310
91334
  functionRegistry.add(functionName, functionDescription);
91311
91335
  return { addFunction: (fName, fDescription) => addFunction(fName, fDescription) };
@@ -91417,6 +91441,7 @@ exports.iterateAstNodes = iterateAstNodes;
91417
91441
  exports.links = links;
91418
91442
  exports.load = load;
91419
91443
  exports.lockedSheetAllowedCommands = lockedSheetAllowedCommands;
91444
+ exports.owlPlugins = owlPlugins;
91420
91445
  exports.parse = parse;
91421
91446
  exports.parseTokens = parseTokens;
91422
91447
  exports.readonlyAllowedCommands = readonlyAllowedCommands;
@@ -91428,6 +91453,6 @@ exports.stores = stores;
91428
91453
  exports.tokenColors = tokenColors;
91429
91454
  exports.tokenize = tokenize;
91430
91455
 
91431
- __info__.version = "19.5.0-alpha.16";
91432
- __info__.date = "2026-09-04T07:53:23.908Z";
91433
- __info__.hash = "bb7357a";
91456
+ __info__.version = "19.5.0-alpha.18";
91457
+ __info__.date = "2026-09-07T12:43:29.601Z";
91458
+ __info__.hash = "54a0597";
@@ -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.16
6
- * @date 2026-09-04T07:53:25.720Z
7
- * @hash bb7357a
5
+ * @version 19.5.0-alpha.18
6
+ * @date 2026-09-07T12:43:31.414Z
7
+ * @hash 54a0597
8
8
  */
9
9
  :root {
10
10
  --os-gray-100: light-dark(#f8f9fa, #1c1c20);
@@ -2,13 +2,13 @@
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.16
6
- * @date 2026-09-04T07:53:23.908Z
7
- * @hash bb7357a
5
+ * @version 19.5.0-alpha.18
6
+ * @date 2026-09-07T12:43:29.601Z
7
+ * @hash 54a0597
8
8
  */
9
9
 
10
10
  import * as owl from "@odoo/owl";
11
- import { App, blockDom, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, proxy, signal, status, toRaw, types, useEffect, useListener, useProps, whenReady, xml } from "@odoo/owl";
11
+ import { App, Plugin, blockDom, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, providePlugins, proxy, signal, status, toRaw, types, useConfig, useEffect, useListener, usePlugin, useProps, whenReady, xml } from "@odoo/owl";
12
12
 
13
13
  //#region \0rolldown/runtime.js
14
14
  var __create = Object.create;
@@ -2656,7 +2656,7 @@ function unregisterChartJsExtensions() {
2656
2656
  *
2657
2657
  * The end goal is to eliminate all compatibility shims.
2658
2658
  */
2659
- const { __ODOO_COMPATIBILITY_LAYER_ADDED__, blockDom: blockDom$1, config, onMounted: onMounted$1, onPatched: onPatched$1, onWillUnmount: onWillUnmount$1, App: OwlApp, Component: OwlComponent, EnvPlugin: OwlEnvPlugin, useComponent: OwlUseComponent, useEnv: OwlUseEnv, useLayoutEffect: OwlUseLayoutEffect, useSubEnv: OwlUseSubEnv, Plugin, usePlugin, useProps: useProps$1, providePlugins, useScope, xml: xml$1 } = owl;
2659
+ const { __ODOO_COMPATIBILITY_LAYER_ADDED__, blockDom: blockDom$1, config, onMounted: onMounted$1, onPatched: onPatched$1, onWillUnmount: onWillUnmount$1, App: OwlApp, Component: OwlComponent, EnvPlugin: OwlEnvPlugin, useComponent: OwlUseComponent, useEnv: OwlUseEnv, useLayoutEffect: OwlUseLayoutEffect, useSubEnv: OwlUseSubEnv, Plugin: Plugin$1, usePlugin: usePlugin$1, useProps: useProps$1, providePlugins: providePlugins$1, useScope, xml: xml$1 } = owl;
2660
2660
  const isOdooCompatLoaded = __ODOO_COMPATIBILITY_LAYER_ADDED__ === true;
2661
2661
  var _Component = class extends OwlComponent {
2662
2662
  env;
@@ -2701,17 +2701,17 @@ function _useLayoutEffect(effect, computeDependencies = () => [NaN]) {
2701
2701
  });
2702
2702
  onWillUnmount$1(() => cleanup && cleanup());
2703
2703
  }
2704
- var _EnvPlugin = class extends Plugin {
2704
+ var _EnvPlugin = class extends Plugin$1 {
2705
2705
  static id = "__ENV__";
2706
2706
  env = config("env") ?? {};
2707
2707
  };
2708
2708
  function _useEnv() {
2709
- return usePlugin(_EnvPlugin).env;
2709
+ return usePlugin$1(_EnvPlugin).env;
2710
2710
  }
2711
2711
  function _useSubEnv(extension) {
2712
2712
  const subEnv = Object.create(_useEnv());
2713
2713
  Object.defineProperties(subEnv, Object.getOwnPropertyDescriptors(extension));
2714
- providePlugins([_EnvPlugin], { env: subEnv });
2714
+ providePlugins$1([_EnvPlugin], { env: subEnv });
2715
2715
  const component = _useComponent();
2716
2716
  component.env = subEnv;
2717
2717
  }
@@ -2848,7 +2848,7 @@ var _App = class extends OwlApp {
2848
2848
  createRoot(component, config = {}) {
2849
2849
  if (config.env) component = { [component.name]: class extends component {
2850
2850
  constructor(node) {
2851
- providePlugins([_EnvPlugin], { env: config.env });
2851
+ providePlugins$1([_EnvPlugin], { env: config.env });
2852
2852
  super(node);
2853
2853
  }
2854
2854
  } }[component.name];
@@ -16208,6 +16208,12 @@ var Menu = class extends Component {
16208
16208
  }
16209
16209
  };
16210
16210
 
16211
+ //#endregion
16212
+ //#region src/components/popover/popover_container_owl_plugin.ts
16213
+ var PopoverContainerPlugin = class extends Plugin {
16214
+ getContainerRect = useConfig("getPopoverContainerRect");
16215
+ };
16216
+
16211
16217
  //#endregion
16212
16218
  //#region src/components/helpers/position_hook.ts
16213
16219
  /**
@@ -16250,11 +16256,9 @@ function usePopoverContainer() {
16250
16256
  width: 0,
16251
16257
  height: 0
16252
16258
  });
16253
- const component = useComponent();
16254
- const spreadsheetRect = useSpreadsheetRect();
16259
+ const popoverContainerPlugin = usePlugin(PopoverContainerPlugin);
16255
16260
  function updateRect() {
16256
- const env = component.env;
16257
- const newRect = "getPopoverContainerRect" in env && env.getPopoverContainerRect ? env.getPopoverContainerRect() : spreadsheetRect;
16261
+ const newRect = popoverContainerPlugin.getContainerRect();
16258
16262
  container.x = newRect.x;
16259
16263
  container.y = newRect.y;
16260
16264
  container.width = newRect.width;
@@ -16272,7 +16276,6 @@ var Popover = class extends Component {
16272
16276
  static template = "o-spreadsheet-Popover";
16273
16277
  props = useProps({
16274
16278
  anchorRect: types$1.Rect(),
16275
- containerRect: types$1.object({}).optional(),
16276
16279
  positioning: types$1.or([types$1.literal("top-right"), types$1.literal("bottom-left")]).optional("bottom-left"),
16277
16280
  maxWidth: types$1.Pixel().optional(),
16278
16281
  maxHeight: types$1.Pixel().optional(),
@@ -55513,7 +55516,7 @@ var Grid = class extends Component {
55513
55516
  this.checkboxToggleStore = useStore(CheckboxToggleStore);
55514
55517
  useStore(ArrayFormulaHighlight);
55515
55518
  this.automaticSumStore = useLocalStore(AutomaticSumStore);
55516
- useSubEnv({ getPopoverContainerRect: () => this.getGridRect() });
55519
+ providePlugins([PopoverContainerPlugin], { getPopoverContainerRect: () => this.getGridRect() });
55517
55520
  useListener(document.body, "cut", this.copy.bind(this, true));
55518
55521
  useListener(document.body, "copy", this.copy.bind(this, false));
55519
55522
  useListener(document.body, "paste", this.paste.bind(this));
@@ -63441,7 +63444,7 @@ var CompilationParametersBuilder = class {
63441
63444
  if (rangeError) return [[rangeError]];
63442
63445
  const sheetId = range.sheetId;
63443
63446
  const zone = range.zone;
63444
- const _zone = intersection(zone, this.getters.getSheetZone(sheetId));
63447
+ const _zone = this.getters.clipRangeToSheet(range)?.zone;
63445
63448
  if (!_zone) return [[]];
63446
63449
  const { top, left, bottom, right } = zone;
63447
63450
  const cacheKey = `${sheetId}-${top}-${left}-${bottom}-${right}`;
@@ -64431,10 +64434,10 @@ var Evaluator = class {
64431
64434
  updateDependencies(position) {
64432
64435
  this.formulaDependencies().removeAllDependencies(position);
64433
64436
  const dependencies = this.getDirectDependencies(position);
64434
- this.formulaDependencies().addDependencies(position, dependencies);
64437
+ this.formulaDependencies().addDependencies(position, this.getters.clipRangesToSheet(dependencies));
64435
64438
  }
64436
64439
  addDependencies(position, dependencies) {
64437
- this.formulaDependencies().addDependencies(position, dependencies);
64440
+ this.formulaDependencies().addDependencies(position, this.getters.clipRangesToSheet(dependencies));
64438
64441
  this.computeDependencies(dependencies);
64439
64442
  }
64440
64443
  computeDependencies(dependencies) {
@@ -64507,7 +64510,8 @@ var Evaluator = class {
64507
64510
  const graph = new FormulaDependencyGraph();
64508
64511
  for (const sheetId of this.getters.getSheetIds()) for (const cell of this.getters.getCells(sheetId)) if (cell.isFormula) {
64509
64512
  const cellPosition = this.getters.getCellPosition(cell.id);
64510
- graph.addDependencies(cellPosition, cell.compiledFormula.rangeDependencies);
64513
+ const dependencies = this.getters.clipRangesToSheet(cell.compiledFormula.rangeDependencies);
64514
+ graph.addDependencies(cellPosition, dependencies);
64511
64515
  }
64512
64516
  return graph;
64513
64517
  });
@@ -72653,7 +72657,7 @@ var SpreadsheetDashboard = class extends Component {
72653
72657
  this.zoomStore = useStore(ZoomStore);
72654
72658
  useLocalStore(HoveredTableStore);
72655
72659
  const rendererStore = useLocalStore(RendererStore, OrderedLayers().filter((layer) => layer !== "Headers"));
72656
- useSubEnv({ getPopoverContainerRect: () => this.zoomStore.getZoomedRect(this.getGridRect()) });
72660
+ providePlugins([PopoverContainerPlugin], { getPopoverContainerRect: () => this.zoomStore.getZoomedRect(this.getGridRect()) });
72657
72661
  useGridDrawing({
72658
72662
  canvasRef: this.canvasRef,
72659
72663
  rendererStore,
@@ -75028,6 +75032,7 @@ var Spreadsheet = class extends Component {
75028
75032
  stores.inject(ModelStore, this.model);
75029
75033
  this.viewStore = useStore(ViewportsStore);
75030
75034
  this.zoomStore = useStore(ZoomStore);
75035
+ providePlugins([PopoverContainerPlugin], { getPopoverContainerRect: () => getElBoundingRect(this.spreadsheetRef()) });
75031
75036
  const env = this.env;
75032
75037
  stores.get(ScreenWidthStore).setSmallThreshhold(() => {
75033
75038
  return env.isSmall;
@@ -76070,6 +76075,8 @@ var RangeAdapterPlugin = class {
76070
76075
  "extendRange",
76071
76076
  "getRangeString",
76072
76077
  "getRangeFromSheetXC",
76078
+ "clipRangesToSheet",
76079
+ "clipRangeToSheet",
76073
76080
  "createAdaptedRanges",
76074
76081
  "getRangeData",
76075
76082
  "getRangeDataFromXc",
@@ -76108,6 +76115,22 @@ var RangeAdapterPlugin = class {
76108
76115
  addRangeProvider(provider) {
76109
76116
  this.providers.push(provider);
76110
76117
  }
76118
+ clipRangeToSheet(range) {
76119
+ if (range.invalidXc) return range;
76120
+ const sheetZone = this.getters.getSheetZone(range.sheetId);
76121
+ if (isZoneInside(range.zone, sheetZone)) return range;
76122
+ const newZone = intersection(range.zone, sheetZone);
76123
+ if (!newZone) return;
76124
+ return this.getters.getRangeFromZone(range.sheetId, newZone);
76125
+ }
76126
+ clipRangesToSheet(ranges) {
76127
+ const clippedRanges = [];
76128
+ for (const range of ranges) {
76129
+ const clippedRange = this.clipRangeToSheet(range);
76130
+ if (clippedRange) clippedRanges.push(clippedRange);
76131
+ }
76132
+ return clippedRanges;
76133
+ }
76111
76134
  createAdaptedRanges(ranges, offsetX, offsetY, sheetId) {
76112
76135
  return ranges.map((range) => {
76113
76136
  if (!isZoneValid(range.zone)) return range;
@@ -91121,6 +91144,7 @@ const stores = {
91121
91144
  ZoomStore,
91122
91145
  globalStores
91123
91146
  };
91147
+ const owlPlugins = { PopoverContainerPlugin };
91124
91148
  function addFunction(functionName, functionDescription) {
91125
91149
  functionRegistry.add(functionName, functionDescription);
91126
91150
  return { addFunction: (fName, fDescription) => addFunction(fName, fDescription) };
@@ -91143,8 +91167,8 @@ const chartHelpers = {
91143
91167
  };
91144
91168
 
91145
91169
  //#endregion
91146
- export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, BadExpressionError, CHART_TYPES, CellErrorType, CellValueType, CircularDependencyError, ClientDisconnectedError, ClipboardMIMEType, CommandResult, CompiledFormula, CorePlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DEFAULT_LOCALE_DIGIT_GROUPING, DIRECTION, DispatchResult, DivisionByZeroError, EvaluationError, EvaluationPlugin, 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, dispatcheableEvaluationCommandTypes, errorTypes, evaluationCommandTypes, filterDateCriterionOperators, filterNumberCriterionOperators, filterTextCriterionOperators, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidSubtotalFormulasCommands, invalidateBordersCommands, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isDispatcheableEvaluationCommand, isEvaluationCommand, isHeadersDependant, isMatrix, isPositionDependent, isRangeDependant, isSheetDependent, isTargetDependent, isZoneDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, schemeToColorScale, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
91170
+ export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, BadExpressionError, CHART_TYPES, CellErrorType, CellValueType, CircularDependencyError, ClientDisconnectedError, ClipboardMIMEType, CommandResult, CompiledFormula, CorePlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DEFAULT_LOCALE_DIGIT_GROUPING, DIRECTION, DispatchResult, DivisionByZeroError, EvaluationError, EvaluationPlugin, 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, dispatcheableEvaluationCommandTypes, errorTypes, evaluationCommandTypes, filterDateCriterionOperators, filterNumberCriterionOperators, filterTextCriterionOperators, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidSubtotalFormulasCommands, invalidateBordersCommands, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isDispatcheableEvaluationCommand, isEvaluationCommand, isHeadersDependant, isMatrix, isPositionDependent, isRangeDependant, isSheetDependent, isTargetDependent, isZoneDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, owlPlugins, parse, parseTokens, readonlyAllowedCommands, registries, schemeToColorScale, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
91147
91171
 
91148
- __info__.version = "19.5.0-alpha.16";
91149
- __info__.date = "2026-09-04T07:53:23.908Z";
91150
- __info__.hash = "bb7357a";
91172
+ __info__.version = "19.5.0-alpha.18";
91173
+ __info__.date = "2026-09-07T12:43:29.601Z";
91174
+ __info__.hash = "54a0597";
@@ -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.16
6
- * @date 2026-09-04T07:53:23.908Z
7
- * @hash bb7357a
5
+ * @version 19.5.0-alpha.18
6
+ * @date 2026-09-07T12:43:29.601Z
7
+ * @hash 54a0597
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];
@@ -16210,6 +16210,12 @@ set(value) {
16210
16210
  }
16211
16211
  };
16212
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
+
16213
16219
  //#endregion
16214
16220
  //#region src/components/helpers/position_hook.ts
16215
16221
  /**
@@ -16252,11 +16258,9 @@ set(value) {
16252
16258
  width: 0,
16253
16259
  height: 0
16254
16260
  });
16255
- const component = useComponent();
16256
- const spreadsheetRect = useSpreadsheetRect();
16261
+ const popoverContainerPlugin = (0, _odoo_owl.usePlugin)(PopoverContainerPlugin);
16257
16262
  function updateRect() {
16258
- const env = component.env;
16259
- const newRect = "getPopoverContainerRect" in env && env.getPopoverContainerRect ? env.getPopoverContainerRect() : spreadsheetRect;
16263
+ const newRect = popoverContainerPlugin.getContainerRect();
16260
16264
  container.x = newRect.x;
16261
16265
  container.y = newRect.y;
16262
16266
  container.width = newRect.width;
@@ -16274,7 +16278,6 @@ set(value) {
16274
16278
  static template = "o-spreadsheet-Popover";
16275
16279
  props = (0, _odoo_owl.useProps)({
16276
16280
  anchorRect: types.Rect(),
16277
- containerRect: types.object({}).optional(),
16278
16281
  positioning: types.or([types.literal("top-right"), types.literal("bottom-left")]).optional("bottom-left"),
16279
16282
  maxWidth: types.Pixel().optional(),
16280
16283
  maxHeight: types.Pixel().optional(),
@@ -55515,7 +55518,7 @@ set(value) {
55515
55518
  this.checkboxToggleStore = useStore(CheckboxToggleStore);
55516
55519
  useStore(ArrayFormulaHighlight);
55517
55520
  this.automaticSumStore = useLocalStore(AutomaticSumStore);
55518
- useSubEnv({ getPopoverContainerRect: () => this.getGridRect() });
55521
+ (0, _odoo_owl.providePlugins)([PopoverContainerPlugin], { getPopoverContainerRect: () => this.getGridRect() });
55519
55522
  (0, _odoo_owl.useListener)(document.body, "cut", this.copy.bind(this, true));
55520
55523
  (0, _odoo_owl.useListener)(document.body, "copy", this.copy.bind(this, false));
55521
55524
  (0, _odoo_owl.useListener)(document.body, "paste", this.paste.bind(this));
@@ -63443,7 +63446,7 @@ set(value) {
63443
63446
  if (rangeError) return [[rangeError]];
63444
63447
  const sheetId = range.sheetId;
63445
63448
  const zone = range.zone;
63446
- const _zone = intersection(zone, this.getters.getSheetZone(sheetId));
63449
+ const _zone = this.getters.clipRangeToSheet(range)?.zone;
63447
63450
  if (!_zone) return [[]];
63448
63451
  const { top, left, bottom, right } = zone;
63449
63452
  const cacheKey = `${sheetId}-${top}-${left}-${bottom}-${right}`;
@@ -64433,10 +64436,10 @@ set(value) {
64433
64436
  updateDependencies(position) {
64434
64437
  this.formulaDependencies().removeAllDependencies(position);
64435
64438
  const dependencies = this.getDirectDependencies(position);
64436
- this.formulaDependencies().addDependencies(position, dependencies);
64439
+ this.formulaDependencies().addDependencies(position, this.getters.clipRangesToSheet(dependencies));
64437
64440
  }
64438
64441
  addDependencies(position, dependencies) {
64439
- this.formulaDependencies().addDependencies(position, dependencies);
64442
+ this.formulaDependencies().addDependencies(position, this.getters.clipRangesToSheet(dependencies));
64440
64443
  this.computeDependencies(dependencies);
64441
64444
  }
64442
64445
  computeDependencies(dependencies) {
@@ -64509,7 +64512,8 @@ set(value) {
64509
64512
  const graph = new FormulaDependencyGraph();
64510
64513
  for (const sheetId of this.getters.getSheetIds()) for (const cell of this.getters.getCells(sheetId)) if (cell.isFormula) {
64511
64514
  const cellPosition = this.getters.getCellPosition(cell.id);
64512
- graph.addDependencies(cellPosition, cell.compiledFormula.rangeDependencies);
64515
+ const dependencies = this.getters.clipRangesToSheet(cell.compiledFormula.rangeDependencies);
64516
+ graph.addDependencies(cellPosition, dependencies);
64513
64517
  }
64514
64518
  return graph;
64515
64519
  });
@@ -72655,7 +72659,7 @@ set(value) {
72655
72659
  this.zoomStore = useStore(ZoomStore);
72656
72660
  useLocalStore(HoveredTableStore);
72657
72661
  const rendererStore = useLocalStore(RendererStore, OrderedLayers().filter((layer) => layer !== "Headers"));
72658
- useSubEnv({ getPopoverContainerRect: () => this.zoomStore.getZoomedRect(this.getGridRect()) });
72662
+ (0, _odoo_owl.providePlugins)([PopoverContainerPlugin], { getPopoverContainerRect: () => this.zoomStore.getZoomedRect(this.getGridRect()) });
72659
72663
  useGridDrawing({
72660
72664
  canvasRef: this.canvasRef,
72661
72665
  rendererStore,
@@ -75030,6 +75034,7 @@ set(value) {
75030
75034
  stores.inject(ModelStore, this.model);
75031
75035
  this.viewStore = useStore(ViewportsStore);
75032
75036
  this.zoomStore = useStore(ZoomStore);
75037
+ (0, _odoo_owl.providePlugins)([PopoverContainerPlugin], { getPopoverContainerRect: () => getElBoundingRect(this.spreadsheetRef()) });
75033
75038
  const env = this.env;
75034
75039
  stores.get(ScreenWidthStore).setSmallThreshhold(() => {
75035
75040
  return env.isSmall;
@@ -76072,6 +76077,8 @@ set(value) {
76072
76077
  "extendRange",
76073
76078
  "getRangeString",
76074
76079
  "getRangeFromSheetXC",
76080
+ "clipRangesToSheet",
76081
+ "clipRangeToSheet",
76075
76082
  "createAdaptedRanges",
76076
76083
  "getRangeData",
76077
76084
  "getRangeDataFromXc",
@@ -76110,6 +76117,22 @@ set(value) {
76110
76117
  addRangeProvider(provider) {
76111
76118
  this.providers.push(provider);
76112
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
+ }
76113
76136
  createAdaptedRanges(ranges, offsetX, offsetY, sheetId) {
76114
76137
  return ranges.map((range) => {
76115
76138
  if (!isZoneValid(range.zone)) return range;
@@ -91123,6 +91146,7 @@ set(value) {
91123
91146
  ZoomStore,
91124
91147
  globalStores
91125
91148
  };
91149
+ const owlPlugins = { PopoverContainerPlugin };
91126
91150
  function addFunction(functionName, functionDescription) {
91127
91151
  functionRegistry.add(functionName, functionDescription);
91128
91152
  return { addFunction: (fName, fDescription) => addFunction(fName, fDescription) };
@@ -91234,6 +91258,7 @@ exports.iterateAstNodes = iterateAstNodes;
91234
91258
  exports.links = links;
91235
91259
  exports.load = load;
91236
91260
  exports.lockedSheetAllowedCommands = lockedSheetAllowedCommands;
91261
+ exports.owlPlugins = owlPlugins;
91237
91262
  exports.parse = parse;
91238
91263
  exports.parseTokens = parseTokens;
91239
91264
  exports.readonlyAllowedCommands = readonlyAllowedCommands;
@@ -91245,8 +91270,8 @@ exports.stores = stores;
91245
91270
  exports.tokenColors = tokenColors;
91246
91271
  exports.tokenize = tokenize;
91247
91272
 
91248
- __info__.version = "19.5.0-alpha.16";
91249
- __info__.date = "2026-09-04T07:53:23.908Z";
91250
- __info__.hash = "bb7357a";
91273
+ __info__.version = "19.5.0-alpha.18";
91274
+ __info__.date = "2026-09-07T12:43:29.601Z";
91275
+ __info__.hash = "54a0597";
91251
91276
 
91252
91277
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);