@odoo/o-spreadsheet 19.3.18 → 19.3.19

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.3.18
6
- * @date 2026-08-29T09:16:28.272Z
7
- * @hash 1f4b1ae
5
+ * @version 19.3.19
6
+ * @date 2026-09-04T07:38:14.356Z
7
+ * @hash c8c526d
8
8
  */
9
9
 
10
10
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -9593,16 +9593,16 @@ const chartShowValuesPlugin = {
9593
9593
  drawLineOrBarOrRadarChartValues(chart, options, ctx);
9594
9594
  break;
9595
9595
  case "bar":
9596
- options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
9596
+ options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true }) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
9597
9597
  break;
9598
9598
  case "pyramid":
9599
- drawHorizontalBarChartValues(chart, options, ctx);
9599
+ drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true });
9600
9600
  break;
9601
9601
  case "calendar":
9602
9602
  drawBarChartValues(chart, options, ctx);
9603
9603
  break;
9604
9604
  case "funnel":
9605
- drawHorizontalBarChartValues(chart, options, ctx);
9605
+ drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: false });
9606
9606
  break;
9607
9607
  }
9608
9608
  ctx.restore();
@@ -9672,7 +9672,7 @@ function drawBarChartValues(chart, options, ctx) {
9672
9672
  }
9673
9673
  }
9674
9674
  }
9675
- function drawHorizontalBarChartValues(chart, options, ctx) {
9675
+ function drawHorizontalBarChartValues(chart, options, ctx, args) {
9676
9676
  const textsPositions = {};
9677
9677
  for (const dataset of chart._metasets) {
9678
9678
  if (isTrendLineAxis(dataset.xAxisID)) return;
@@ -9687,7 +9687,7 @@ function drawHorizontalBarChartValues(chart, options, ctx) {
9687
9687
  const distanceFromAxisOrigin = Math.abs(point.x - xZeroLine);
9688
9688
  const PADDING = 3;
9689
9689
  let xPosition;
9690
- if (distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
9690
+ if (args.offsetFromAxisOrigin && distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
9691
9691
  else xPosition = value < 0 ? point.x + point.width / 2 : point.x - point.width / 2;
9692
9692
  if (!textsPositions[yPosition]) textsPositions[yPosition] = [];
9693
9693
  for (const otherPosition of textsPositions[yPosition]) if (Math.abs(otherPosition - xPosition) < textWidth) xPosition = value < 0 ? otherPosition - textWidth - PADDING : otherPosition + textWidth + PADDING;
@@ -25446,9 +25446,10 @@ var Composer = class extends _odoo_owl.Component {
25446
25446
  compositionActive = false;
25447
25447
  spreadsheetRect = useSpreadsheetRect();
25448
25448
  lastHoveredTokenIndex = void 0;
25449
- debouncedHover = debounce((tokenIndex, hoveredRect) => {
25449
+ debouncedHover = debounce((tokenIndex, composerContent, hoveredRect) => {
25450
25450
  const selection = this.contentHelper.getCurrentSelection();
25451
- if (selection.start !== selection.end) return;
25451
+ const currentContent = this.props.composerStore.currentContent;
25452
+ if (selection.start !== selection.end || currentContent !== composerContent) return;
25452
25453
  const currentHoveredContext = this.props.composerStore.hoveredTokens;
25453
25454
  this.props.composerStore.hoverToken(tokenIndex);
25454
25455
  if (!deepEquals(currentHoveredContext, this.props.composerStore.hoveredTokens)) this.composerState.hoveredRect = hoveredRect;
@@ -25766,7 +25767,8 @@ var Composer = class extends _odoo_owl.Component {
25766
25767
  onTokenHover(tokenIndex, hoveredRect) {
25767
25768
  if (this.lastHoveredTokenIndex !== tokenIndex) {
25768
25769
  this.lastHoveredTokenIndex = tokenIndex;
25769
- this.debouncedHover(tokenIndex, hoveredRect);
25770
+ const composerContent = this.props.composerStore.currentContent;
25771
+ this.debouncedHover(tokenIndex, composerContent, hoveredRect);
25770
25772
  }
25771
25773
  }
25772
25774
  /**
@@ -40077,7 +40079,13 @@ var PivotSpreadsheetSidePanel = class extends _odoo_owl.Component {
40077
40079
  }
40078
40080
  onSelectionChanged(ranges) {
40079
40081
  this.state.rangeHasChanged = true;
40080
- this.state.range = ranges[0];
40082
+ if (ranges.length === 0) {
40083
+ this.state.range = void 0;
40084
+ return;
40085
+ }
40086
+ const sheetId = this.env.model.getters.getActiveSheetId();
40087
+ const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
40088
+ this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
40081
40089
  }
40082
40090
  onSelectionConfirmed() {
40083
40091
  if (this.state.range) {
@@ -49736,6 +49744,7 @@ var CarouselPlugin = class extends CorePlugin {
49736
49744
  return "Success";
49737
49745
  case "UPDATE_CAROUSEL":
49738
49746
  if (!this.carousels[cmd.sheetId]?.[cmd.figureId]) return "InvalidFigureId";
49747
+ for (const item of cmd.definition.items) if (item.type === "chart" && !this.getters.getChart(item.chartId)) return "ChartDoesNotExist";
49739
49748
  return "Success";
49740
49749
  }
49741
49750
  return "Success";
@@ -54914,6 +54923,7 @@ var FormulaDependencyGraph = class {
54914
54923
  }
54915
54924
  getCellsDependingOn(ranges, visited = new RangeSet()) {
54916
54925
  visited = visited.copy();
54926
+ let initialRangesToRemove = visited.copy();
54917
54927
  const queue = Array.from(ranges).reverse();
54918
54928
  while (queue.length > 0) {
54919
54929
  const range = queue.pop();
@@ -54929,8 +54939,9 @@ var FormulaDependencyGraph = class {
54929
54939
  for (const interval of overlappingIntervals) impactedRanges.add(interval.dependents);
54930
54940
  }
54931
54941
  queue.push(...impactedRanges.difference(visited));
54942
+ initialRangesToRemove = initialRangesToRemove.difference(impactedRanges);
54932
54943
  }
54933
- for (const range of ranges) visited.delete(range);
54944
+ for (const range of initialRangesToRemove) visited.delete(range);
54934
54945
  return visited;
54935
54946
  }
54936
54947
  getOrCreateIntervalTree(sheetId, col) {
@@ -68987,7 +68998,7 @@ var FigureRendererStore = class extends DisposableStore {
68987
68998
  if (!this.getters.isDashboard()) {
68988
68999
  ctx.strokeStyle = GRAY_400;
68989
69000
  ctx.lineWidth = 1;
68990
- ctx.strokeRect(x, y, figure.width, figure.height);
69001
+ ctx.strokeRect(x + .5, y + .5, figure.width - 1, figure.height - 1);
68991
69002
  }
68992
69003
  }
68993
69004
  }
@@ -85002,6 +85013,6 @@ exports.stores = stores;
85002
85013
  exports.tokenColors = tokenColors;
85003
85014
  exports.tokenize = tokenize;
85004
85015
 
85005
- __info__.version = "19.3.18";
85006
- __info__.date = "2026-08-29T09:16:28.272Z";
85007
- __info__.hash = "1f4b1ae";
85016
+ __info__.version = "19.3.19";
85017
+ __info__.date = "2026-09-04T07:38:14.356Z";
85018
+ __info__.hash = "c8c526d";
@@ -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.3.18
6
- * @date 2026-08-29T09:16:30.020Z
7
- * @hash 1f4b1ae
5
+ * @version 19.3.19
6
+ * @date 2026-09-04T07:38:15.963Z
7
+ * @hash c8c526d
8
8
  */
9
9
  :root {
10
10
  --os-gray-100: light-dark(#f9fafb, #1b1d26);
@@ -22,7 +22,7 @@
22
22
  --os-white-bg: light-dark(#ffffff, var(--os-gray-200));
23
23
  --os-popover-bg: light-dark(#ffffff, var(--os-gray-300));
24
24
 
25
- --os-default-font: "Roboto", "Arial";
25
+ --os-default-font: "Roboto", "Arial", "Liberation Sans";
26
26
  --os-default-font-size: 10px;
27
27
  --os-link-color: light-dark(#017e84, #02c7b5);
28
28
  --os-link-hover-color: light-dark(#01585c, #4ed8cb);
@@ -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.3.18
6
- * @date 2026-08-29T09:16:28.272Z
7
- * @hash 1f4b1ae
5
+ * @version 19.3.19
6
+ * @date 2026-09-04T07:38:14.356Z
7
+ * @hash c8c526d
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, whenReady, xml } from "@odoo/owl";
@@ -9592,16 +9592,16 @@ const chartShowValuesPlugin = {
9592
9592
  drawLineOrBarOrRadarChartValues(chart, options, ctx);
9593
9593
  break;
9594
9594
  case "bar":
9595
- options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
9595
+ options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true }) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
9596
9596
  break;
9597
9597
  case "pyramid":
9598
- drawHorizontalBarChartValues(chart, options, ctx);
9598
+ drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true });
9599
9599
  break;
9600
9600
  case "calendar":
9601
9601
  drawBarChartValues(chart, options, ctx);
9602
9602
  break;
9603
9603
  case "funnel":
9604
- drawHorizontalBarChartValues(chart, options, ctx);
9604
+ drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: false });
9605
9605
  break;
9606
9606
  }
9607
9607
  ctx.restore();
@@ -9671,7 +9671,7 @@ function drawBarChartValues(chart, options, ctx) {
9671
9671
  }
9672
9672
  }
9673
9673
  }
9674
- function drawHorizontalBarChartValues(chart, options, ctx) {
9674
+ function drawHorizontalBarChartValues(chart, options, ctx, args) {
9675
9675
  const textsPositions = {};
9676
9676
  for (const dataset of chart._metasets) {
9677
9677
  if (isTrendLineAxis(dataset.xAxisID)) return;
@@ -9686,7 +9686,7 @@ function drawHorizontalBarChartValues(chart, options, ctx) {
9686
9686
  const distanceFromAxisOrigin = Math.abs(point.x - xZeroLine);
9687
9687
  const PADDING = 3;
9688
9688
  let xPosition;
9689
- if (distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
9689
+ if (args.offsetFromAxisOrigin && distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
9690
9690
  else xPosition = value < 0 ? point.x + point.width / 2 : point.x - point.width / 2;
9691
9691
  if (!textsPositions[yPosition]) textsPositions[yPosition] = [];
9692
9692
  for (const otherPosition of textsPositions[yPosition]) if (Math.abs(otherPosition - xPosition) < textWidth) xPosition = value < 0 ? otherPosition - textWidth - PADDING : otherPosition + textWidth + PADDING;
@@ -25445,9 +25445,10 @@ var Composer = class extends Component {
25445
25445
  compositionActive = false;
25446
25446
  spreadsheetRect = useSpreadsheetRect();
25447
25447
  lastHoveredTokenIndex = void 0;
25448
- debouncedHover = debounce((tokenIndex, hoveredRect) => {
25448
+ debouncedHover = debounce((tokenIndex, composerContent, hoveredRect) => {
25449
25449
  const selection = this.contentHelper.getCurrentSelection();
25450
- if (selection.start !== selection.end) return;
25450
+ const currentContent = this.props.composerStore.currentContent;
25451
+ if (selection.start !== selection.end || currentContent !== composerContent) return;
25451
25452
  const currentHoveredContext = this.props.composerStore.hoveredTokens;
25452
25453
  this.props.composerStore.hoverToken(tokenIndex);
25453
25454
  if (!deepEquals(currentHoveredContext, this.props.composerStore.hoveredTokens)) this.composerState.hoveredRect = hoveredRect;
@@ -25765,7 +25766,8 @@ var Composer = class extends Component {
25765
25766
  onTokenHover(tokenIndex, hoveredRect) {
25766
25767
  if (this.lastHoveredTokenIndex !== tokenIndex) {
25767
25768
  this.lastHoveredTokenIndex = tokenIndex;
25768
- this.debouncedHover(tokenIndex, hoveredRect);
25769
+ const composerContent = this.props.composerStore.currentContent;
25770
+ this.debouncedHover(tokenIndex, composerContent, hoveredRect);
25769
25771
  }
25770
25772
  }
25771
25773
  /**
@@ -40076,7 +40078,13 @@ var PivotSpreadsheetSidePanel = class extends Component {
40076
40078
  }
40077
40079
  onSelectionChanged(ranges) {
40078
40080
  this.state.rangeHasChanged = true;
40079
- this.state.range = ranges[0];
40081
+ if (ranges.length === 0) {
40082
+ this.state.range = void 0;
40083
+ return;
40084
+ }
40085
+ const sheetId = this.env.model.getters.getActiveSheetId();
40086
+ const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
40087
+ this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
40080
40088
  }
40081
40089
  onSelectionConfirmed() {
40082
40090
  if (this.state.range) {
@@ -49735,6 +49743,7 @@ var CarouselPlugin = class extends CorePlugin {
49735
49743
  return "Success";
49736
49744
  case "UPDATE_CAROUSEL":
49737
49745
  if (!this.carousels[cmd.sheetId]?.[cmd.figureId]) return "InvalidFigureId";
49746
+ for (const item of cmd.definition.items) if (item.type === "chart" && !this.getters.getChart(item.chartId)) return "ChartDoesNotExist";
49738
49747
  return "Success";
49739
49748
  }
49740
49749
  return "Success";
@@ -54913,6 +54922,7 @@ var FormulaDependencyGraph = class {
54913
54922
  }
54914
54923
  getCellsDependingOn(ranges, visited = new RangeSet()) {
54915
54924
  visited = visited.copy();
54925
+ let initialRangesToRemove = visited.copy();
54916
54926
  const queue = Array.from(ranges).reverse();
54917
54927
  while (queue.length > 0) {
54918
54928
  const range = queue.pop();
@@ -54928,8 +54938,9 @@ var FormulaDependencyGraph = class {
54928
54938
  for (const interval of overlappingIntervals) impactedRanges.add(interval.dependents);
54929
54939
  }
54930
54940
  queue.push(...impactedRanges.difference(visited));
54941
+ initialRangesToRemove = initialRangesToRemove.difference(impactedRanges);
54931
54942
  }
54932
- for (const range of ranges) visited.delete(range);
54943
+ for (const range of initialRangesToRemove) visited.delete(range);
54933
54944
  return visited;
54934
54945
  }
54935
54946
  getOrCreateIntervalTree(sheetId, col) {
@@ -68802,7 +68813,7 @@ var FigureRendererStore = class extends DisposableStore {
68802
68813
  if (!this.getters.isDashboard()) {
68803
68814
  ctx.strokeStyle = GRAY_400;
68804
68815
  ctx.lineWidth = 1;
68805
- ctx.strokeRect(x, y, figure.width, figure.height);
68816
+ ctx.strokeRect(x + .5, y + .5, figure.width - 1, figure.height - 1);
68806
68817
  }
68807
68818
  }
68808
68819
  }
@@ -84759,6 +84770,6 @@ const chartHelpers = {
84759
84770
  //#endregion
84760
84771
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CompiledFormula, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DispatchResult, EvaluationError, LocalTransportService, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, canExecuteInReadonly, categories, chartHelpers, components, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isSheetDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
84761
84772
 
84762
- __info__.version = "19.3.18";
84763
- __info__.date = "2026-08-29T09:16:28.272Z";
84764
- __info__.hash = "1f4b1ae";
84773
+ __info__.version = "19.3.19";
84774
+ __info__.date = "2026-09-04T07:38:14.356Z";
84775
+ __info__.hash = "c8c526d";
@@ -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.3.18
6
- * @date 2026-08-29T09:16:28.272Z
7
- * @hash 1f4b1ae
5
+ * @version 19.3.19
6
+ * @date 2026-09-04T07:38:14.356Z
7
+ * @hash c8c526d
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -9594,16 +9594,16 @@ stores.inject(MyMetaStore, storeInstance);
9594
9594
  drawLineOrBarOrRadarChartValues(chart, options, ctx);
9595
9595
  break;
9596
9596
  case "bar":
9597
- options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
9597
+ options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true }) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
9598
9598
  break;
9599
9599
  case "pyramid":
9600
- drawHorizontalBarChartValues(chart, options, ctx);
9600
+ drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true });
9601
9601
  break;
9602
9602
  case "calendar":
9603
9603
  drawBarChartValues(chart, options, ctx);
9604
9604
  break;
9605
9605
  case "funnel":
9606
- drawHorizontalBarChartValues(chart, options, ctx);
9606
+ drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: false });
9607
9607
  break;
9608
9608
  }
9609
9609
  ctx.restore();
@@ -9673,7 +9673,7 @@ stores.inject(MyMetaStore, storeInstance);
9673
9673
  }
9674
9674
  }
9675
9675
  }
9676
- function drawHorizontalBarChartValues(chart, options, ctx) {
9676
+ function drawHorizontalBarChartValues(chart, options, ctx, args) {
9677
9677
  const textsPositions = {};
9678
9678
  for (const dataset of chart._metasets) {
9679
9679
  if (isTrendLineAxis(dataset.xAxisID)) return;
@@ -9688,7 +9688,7 @@ stores.inject(MyMetaStore, storeInstance);
9688
9688
  const distanceFromAxisOrigin = Math.abs(point.x - xZeroLine);
9689
9689
  const PADDING = 3;
9690
9690
  let xPosition;
9691
- if (distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
9691
+ if (args.offsetFromAxisOrigin && distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
9692
9692
  else xPosition = value < 0 ? point.x + point.width / 2 : point.x - point.width / 2;
9693
9693
  if (!textsPositions[yPosition]) textsPositions[yPosition] = [];
9694
9694
  for (const otherPosition of textsPositions[yPosition]) if (Math.abs(otherPosition - xPosition) < textWidth) xPosition = value < 0 ? otherPosition - textWidth - PADDING : otherPosition + textWidth + PADDING;
@@ -25447,9 +25447,10 @@ stores.inject(MyMetaStore, storeInstance);
25447
25447
  compositionActive = false;
25448
25448
  spreadsheetRect = useSpreadsheetRect();
25449
25449
  lastHoveredTokenIndex = void 0;
25450
- debouncedHover = debounce((tokenIndex, hoveredRect) => {
25450
+ debouncedHover = debounce((tokenIndex, composerContent, hoveredRect) => {
25451
25451
  const selection = this.contentHelper.getCurrentSelection();
25452
- if (selection.start !== selection.end) return;
25452
+ const currentContent = this.props.composerStore.currentContent;
25453
+ if (selection.start !== selection.end || currentContent !== composerContent) return;
25453
25454
  const currentHoveredContext = this.props.composerStore.hoveredTokens;
25454
25455
  this.props.composerStore.hoverToken(tokenIndex);
25455
25456
  if (!deepEquals(currentHoveredContext, this.props.composerStore.hoveredTokens)) this.composerState.hoveredRect = hoveredRect;
@@ -25767,7 +25768,8 @@ stores.inject(MyMetaStore, storeInstance);
25767
25768
  onTokenHover(tokenIndex, hoveredRect) {
25768
25769
  if (this.lastHoveredTokenIndex !== tokenIndex) {
25769
25770
  this.lastHoveredTokenIndex = tokenIndex;
25770
- this.debouncedHover(tokenIndex, hoveredRect);
25771
+ const composerContent = this.props.composerStore.currentContent;
25772
+ this.debouncedHover(tokenIndex, composerContent, hoveredRect);
25771
25773
  }
25772
25774
  }
25773
25775
  /**
@@ -40078,7 +40080,13 @@ stores.inject(MyMetaStore, storeInstance);
40078
40080
  }
40079
40081
  onSelectionChanged(ranges) {
40080
40082
  this.state.rangeHasChanged = true;
40081
- this.state.range = ranges[0];
40083
+ if (ranges.length === 0) {
40084
+ this.state.range = void 0;
40085
+ return;
40086
+ }
40087
+ const sheetId = this.env.model.getters.getActiveSheetId();
40088
+ const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
40089
+ this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
40082
40090
  }
40083
40091
  onSelectionConfirmed() {
40084
40092
  if (this.state.range) {
@@ -49737,6 +49745,7 @@ stores.inject(MyMetaStore, storeInstance);
49737
49745
  return "Success";
49738
49746
  case "UPDATE_CAROUSEL":
49739
49747
  if (!this.carousels[cmd.sheetId]?.[cmd.figureId]) return "InvalidFigureId";
49748
+ for (const item of cmd.definition.items) if (item.type === "chart" && !this.getters.getChart(item.chartId)) return "ChartDoesNotExist";
49740
49749
  return "Success";
49741
49750
  }
49742
49751
  return "Success";
@@ -54915,6 +54924,7 @@ stores.inject(MyMetaStore, storeInstance);
54915
54924
  }
54916
54925
  getCellsDependingOn(ranges, visited = new RangeSet()) {
54917
54926
  visited = visited.copy();
54927
+ let initialRangesToRemove = visited.copy();
54918
54928
  const queue = Array.from(ranges).reverse();
54919
54929
  while (queue.length > 0) {
54920
54930
  const range = queue.pop();
@@ -54930,8 +54940,9 @@ stores.inject(MyMetaStore, storeInstance);
54930
54940
  for (const interval of overlappingIntervals) impactedRanges.add(interval.dependents);
54931
54941
  }
54932
54942
  queue.push(...impactedRanges.difference(visited));
54943
+ initialRangesToRemove = initialRangesToRemove.difference(impactedRanges);
54933
54944
  }
54934
- for (const range of ranges) visited.delete(range);
54945
+ for (const range of initialRangesToRemove) visited.delete(range);
54935
54946
  return visited;
54936
54947
  }
54937
54948
  getOrCreateIntervalTree(sheetId, col) {
@@ -68804,7 +68815,7 @@ stores.inject(MyMetaStore, storeInstance);
68804
68815
  if (!this.getters.isDashboard()) {
68805
68816
  ctx.strokeStyle = GRAY_400;
68806
68817
  ctx.lineWidth = 1;
68807
- ctx.strokeRect(x, y, figure.width, figure.height);
68818
+ ctx.strokeRect(x + .5, y + .5, figure.width - 1, figure.height - 1);
68808
68819
  }
68809
68820
  }
68810
68821
  }
@@ -84819,8 +84830,8 @@ exports.stores = stores;
84819
84830
  exports.tokenColors = tokenColors;
84820
84831
  exports.tokenize = tokenize;
84821
84832
 
84822
- __info__.version = "19.3.18";
84823
- __info__.date = "2026-08-29T09:16:28.272Z";
84824
- __info__.hash = "1f4b1ae";
84833
+ __info__.version = "19.3.19";
84834
+ __info__.date = "2026-09-04T07:38:14.356Z";
84835
+ __info__.hash = "c8c526d";
84825
84836
 
84826
84837
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);