@odoo/o-spreadsheet 18.4.53 → 18.4.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,9 +2,9 @@
2
2
  /*
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 18.4.53
6
- * @date 2026-08-29T09:14:02.893Z
7
- * @hash 8ca564d
5
+ * @version 18.4.54
6
+ * @date 2026-09-04T07:09:42.871Z
7
+ * @hash 303fa73
8
8
  */
9
9
  /* Originates from src/components/top_bar/top_bar.scss */
10
10
  @media (max-width: 1200px) {
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 18.4.53
6
- * @date 2026-08-29T09:14:01.099Z
7
- * @hash 8ca564d
5
+ * @version 18.4.54
6
+ * @date 2026-09-04T07:09:41.203Z
7
+ * @hash 303fa73
8
8
  */
9
9
 
10
10
  import { App, Component, blockDom, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, xml } from "@odoo/owl";
@@ -18030,10 +18030,10 @@ const chartShowValuesPlugin = {
18030
18030
  case "bar":
18031
18031
  case "line":
18032
18032
  case "radar":
18033
- options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
18033
+ options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true }) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
18034
18034
  break;
18035
18035
  case "funnel":
18036
- drawHorizontalBarChartValues(chart, options, ctx);
18036
+ drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: false });
18037
18037
  break;
18038
18038
  }
18039
18039
  ctx.restore();
@@ -18074,7 +18074,7 @@ function drawLineOrBarOrRadarChartValues(chart, options, ctx) {
18074
18074
  }
18075
18075
  }
18076
18076
  }
18077
- function drawHorizontalBarChartValues(chart, options, ctx) {
18077
+ function drawHorizontalBarChartValues(chart, options, ctx, args) {
18078
18078
  const textsPositions = {};
18079
18079
  for (const dataset of chart._metasets) {
18080
18080
  if (isTrendLineAxis(dataset.xAxisID)) return;
@@ -18089,7 +18089,7 @@ function drawHorizontalBarChartValues(chart, options, ctx) {
18089
18089
  const distanceFromAxisOrigin = Math.abs(point.x - xZeroLine);
18090
18090
  const PADDING = 3;
18091
18091
  let xPosition;
18092
- if (distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
18092
+ if (args.offsetFromAxisOrigin && distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
18093
18093
  else xPosition = value < 0 ? point.x + point.width / 2 : point.x - point.width / 2;
18094
18094
  if (!textsPositions[yPosition]) textsPositions[yPosition] = [];
18095
18095
  for (const otherPosition of textsPositions[yPosition]) if (Math.abs(otherPosition - xPosition) < textWidth) xPosition = value < 0 ? otherPosition - textWidth - PADDING : otherPosition + textWidth + PADDING;
@@ -28508,9 +28508,10 @@ var Composer = class extends Component {
28508
28508
  compositionActive = false;
28509
28509
  spreadsheetRect = useSpreadsheetRect();
28510
28510
  lastHoveredTokenIndex = void 0;
28511
- debouncedHover = debounce((tokenIndex, hoveredRect) => {
28511
+ debouncedHover = debounce((tokenIndex, composerContent, hoveredRect) => {
28512
28512
  const selection = this.contentHelper.getCurrentSelection();
28513
- if (selection.start !== selection.end) return;
28513
+ const currentContent = this.props.composerStore.currentContent;
28514
+ if (selection.start !== selection.end || currentContent !== composerContent) return;
28514
28515
  const currentHoveredContext = this.props.composerStore.hoveredTokens;
28515
28516
  this.props.composerStore.hoverToken(tokenIndex);
28516
28517
  if (!deepEquals(currentHoveredContext, this.props.composerStore.hoveredTokens)) this.composerState.hoveredRect = hoveredRect;
@@ -28826,7 +28827,8 @@ var Composer = class extends Component {
28826
28827
  onTokenHover(tokenIndex, hoveredRect) {
28827
28828
  if (this.lastHoveredTokenIndex !== tokenIndex) {
28828
28829
  this.lastHoveredTokenIndex = tokenIndex;
28829
- this.debouncedHover(tokenIndex, hoveredRect);
28830
+ const composerContent = this.props.composerStore.currentContent;
28831
+ this.debouncedHover(tokenIndex, composerContent, hoveredRect);
28830
28832
  }
28831
28833
  }
28832
28834
  /**
@@ -29602,6 +29604,42 @@ var ColorPicker = class extends Component {
29602
29604
  }
29603
29605
  };
29604
29606
 
29607
+ //#endregion
29608
+ //#region src/components/icons/raw_svgs.ts
29609
+ /**
29610
+ * SVG markup used in `css` tagged templates as `data:image/svg+xml` URIs.
29611
+ *
29612
+ * Keep these values in a separate module so Rolldown references them instead
29613
+ * of inlining them into template literals. Inlining produces nested template
29614
+ * literals, which the downstream `rjsmin` minifier cannot parse correctly
29615
+ * because it relies on regular expressions.
29616
+ *
29617
+ * Do not inline these constants.
29618
+ */
29619
+ const CHECK_SVG = `
29620
+ <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'>
29621
+ <path fill='none' stroke='#FFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/>
29622
+ </svg>
29623
+ `;
29624
+ const CIRCLE_SVG = `
29625
+ <svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
29626
+ <circle r="2" fill="#FFF"/>
29627
+ </svg>
29628
+ `;
29629
+ const TRANSPARENT_BACKGROUND_SVG = `
29630
+ <svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
29631
+ <path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
29632
+ </svg>
29633
+ `;
29634
+ const CURSOR_SVG = `
29635
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="16"><path d="M6.5.4c1.3-.8 2.9-.1 3.8 1.4l2.9 5.1c.2.4.9 1.6-.4 2.3l-1.6.9 1.8 3.1c.2.4.1 1-.2 1.2l-1.6 1c-.3.1-.9 0-1.1-.4l-1.8-3.1-1.6 1c-.6.4-1.7 0-2.2-.8L0 4.3"/><path fill="#fff" d="M9.1 2a1.4 1.1 60 0 0-1.7-.6L5.5 2.5l.9 1.6-1 .6-.9-1.6-.6.4 1.8 3.1-1.3.7-1.8-3.1-1 .6 3.8 6.6 6.8-3.98M3.9 8.8 10.82 5l.795 1.4-6.81 3.96"/></svg>
29636
+ `;
29637
+ const CARET_DOWN_SVG = `
29638
+ <svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
29639
+ <polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
29640
+ </svg>
29641
+ `;
29642
+
29605
29643
  //#endregion
29606
29644
  //#region src/components/side_panel/components/section/section.ts
29607
29645
  var Section = class extends Component {
@@ -29628,11 +29666,7 @@ css`
29628
29666
  cursor: pointer;
29629
29667
  border: 1px solid ${GRAY_300};
29630
29668
  background-position: 1px 1px;
29631
- background-image: url("data:image/svg+xml,${encodeURIComponent(`
29632
- <svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
29633
- <path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
29634
- </svg>
29635
- `)}");
29669
+ background-image: url("data:image/svg+xml,${encodeURIComponent(TRANSPARENT_BACKGROUND_SVG)}");
29636
29670
  }
29637
29671
  `;
29638
29672
  var RoundColorPicker = class extends Component {
@@ -30890,11 +30924,6 @@ var FilterMenuCriterion = class extends Component {
30890
30924
 
30891
30925
  //#endregion
30892
30926
  //#region src/components/side_panel/components/checkbox/checkbox.ts
30893
- const CHECK_SVG = `
30894
- <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'>
30895
- <path fill='none' stroke='#FFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/>
30896
- </svg>
30897
- `;
30898
30927
  const CHECKBOX_WIDTH = 14;
30899
30928
  css`
30900
30929
  label.o-checkbox {
@@ -41017,9 +41046,7 @@ var HoveredIconStore = class extends SpreadsheetStore {
41017
41046
  //#region src/components/grid_overlay/grid_overlay.ts
41018
41047
  css`
41019
41048
  .o-paint-format-cursor {
41020
- cursor: url("data:image/svg+xml,${encodeURIComponent(`
41021
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="16"><path d="M6.5.4c1.3-.8 2.9-.1 3.8 1.4l2.9 5.1c.2.4.9 1.6-.4 2.3l-1.6.9 1.8 3.1c.2.4.1 1-.2 1.2l-1.6 1c-.3.1-.9 0-1.1-.4l-1.8-3.1-1.6 1c-.6.4-1.7 0-2.2-.8L0 4.3"/><path fill="#fff" d="M9.1 2a1.4 1.1 60 0 0-1.7-.6L5.5 2.5l.9 1.6-1 .6-.9-1.6-.6.4 1.8 3.1-1.3.7-1.8-3.1-1 .6 3.8 6.6 6.8-3.98M3.9 8.8 10.82 5l.795 1.4-6.81 3.96"/></svg>
41022
- `)}"), auto;
41049
+ cursor: url("data:image/svg+xml,${encodeURIComponent(CURSOR_SVG)}"), auto;
41023
41050
  }
41024
41051
  `;
41025
41052
  function useCellHovered(env, gridRef) {
@@ -44318,11 +44345,7 @@ css`
44318
44345
  border-radius: 8px;
44319
44346
 
44320
44347
  &:checked {
44321
- background: url("data:image/svg+xml,${encodeURIComponent(`
44322
- <svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
44323
- <circle r="2" fill="#FFF"/>
44324
- </svg>
44325
- `)}");
44348
+ background: url("data:image/svg+xml,${encodeURIComponent(CIRCLE_SVG)}");
44326
44349
  background-color: ${ACTION_COLOR};
44327
44350
  border-color: ${ACTION_COLOR};
44328
44351
  }
@@ -50180,7 +50203,13 @@ var PivotSpreadsheetSidePanel = class extends Component {
50180
50203
  }
50181
50204
  onSelectionChanged(ranges) {
50182
50205
  this.state.rangeHasChanged = true;
50183
- this.state.range = ranges[0];
50206
+ if (ranges.length === 0) {
50207
+ this.state.range = void 0;
50208
+ return;
50209
+ }
50210
+ const sheetId = this.env.model.getters.getActiveSheetId();
50211
+ const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
50212
+ this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
50184
50213
  }
50185
50214
  onSelectionConfirmed() {
50186
50215
  if (this.state.range) {
@@ -57792,6 +57821,16 @@ var FormulaDependencyGraph = class {
57792
57821
  getCellsDependingOn(ranges, ignore) {
57793
57822
  const visited = this.createEmptyPositionSet();
57794
57823
  const queue = Array.from(ranges).reverse();
57824
+ const initialPositionsToRemove = this.createEmptyPositionSet();
57825
+ for (const range of ranges) {
57826
+ const zone = range.zone;
57827
+ const sheetId = range.sheetId;
57828
+ for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) initialPositionsToRemove.add({
57829
+ sheetId,
57830
+ col,
57831
+ row
57832
+ });
57833
+ }
57795
57834
  while (queue.length > 0) {
57796
57835
  const range = queue.pop();
57797
57836
  const zone = range.zone;
@@ -57803,9 +57842,13 @@ var FormulaDependencyGraph = class {
57803
57842
  });
57804
57843
  const impactedPositions = this.rTree.search(range).map((dep) => dep.data);
57805
57844
  const nextInQueue = {};
57806
- for (const position of impactedPositions) if (!visited.has(position) && !ignore.has(position)) {
57807
- if (!nextInQueue[position.sheetId]) nextInQueue[position.sheetId] = [];
57808
- nextInQueue[position.sheetId].push(positionToZone(position));
57845
+ for (const position of impactedPositions) {
57846
+ if (ignore.has(position)) continue;
57847
+ initialPositionsToRemove.delete(position);
57848
+ if (!visited.has(position)) {
57849
+ if (!nextInQueue[position.sheetId]) nextInQueue[position.sheetId] = [];
57850
+ nextInQueue[position.sheetId].push(positionToZone(position));
57851
+ }
57809
57852
  }
57810
57853
  for (const sheetId in nextInQueue) {
57811
57854
  const zones = recomputeZones(nextInQueue[sheetId], []);
@@ -57815,15 +57858,7 @@ var FormulaDependencyGraph = class {
57815
57858
  })));
57816
57859
  }
57817
57860
  }
57818
- for (const range of ranges) {
57819
- const zone = range.zone;
57820
- const sheetId = range.sheetId;
57821
- for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) visited.delete({
57822
- sheetId,
57823
- col,
57824
- row
57825
- });
57826
- }
57861
+ for (const position of initialPositionsToRemove) visited.delete(position);
57827
57862
  return visited;
57828
57863
  }
57829
57864
  };
@@ -70990,11 +71025,7 @@ css`
70990
71025
  appearance: none;
70991
71026
  -webkit-appearance: none;
70992
71027
  -moz-appearance: none;
70993
- background: transparent url("data:image/svg+xml,${encodeURIComponent(`
70994
- <svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
70995
- <polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
70996
- </svg>
70997
- `)}")
71028
+ background: transparent url("data:image/svg+xml,${encodeURIComponent(CARET_DOWN_SVG)}")
70998
71029
  no-repeat right center;
70999
71030
  text-overflow: ellipsis;
71000
71031
 
@@ -75446,6 +75477,6 @@ const chartHelpers = {
75446
75477
  //#endregion
75447
75478
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CorePlugin, CoreViewPlugin, DispatchResult, EvaluationError, LocalTransportService, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, chartHelpers, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
75448
75479
 
75449
- __info__.version = "18.4.53";
75450
- __info__.date = "2026-08-29T09:14:01.099Z";
75451
- __info__.hash = "8ca564d";
75480
+ __info__.version = "18.4.54";
75481
+ __info__.date = "2026-09-04T07:09:41.203Z";
75482
+ __info__.hash = "303fa73";
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 18.4.53
6
- * @date 2026-08-29T09:14:01.099Z
7
- * @hash 8ca564d
5
+ * @version 18.4.54
6
+ * @date 2026-09-04T07:09:41.203Z
7
+ * @hash 303fa73
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -18032,10 +18032,10 @@ stores.inject(MyMetaStore, storeInstance);
18032
18032
  case "bar":
18033
18033
  case "line":
18034
18034
  case "radar":
18035
- options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
18035
+ options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true }) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
18036
18036
  break;
18037
18037
  case "funnel":
18038
- drawHorizontalBarChartValues(chart, options, ctx);
18038
+ drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: false });
18039
18039
  break;
18040
18040
  }
18041
18041
  ctx.restore();
@@ -18076,7 +18076,7 @@ stores.inject(MyMetaStore, storeInstance);
18076
18076
  }
18077
18077
  }
18078
18078
  }
18079
- function drawHorizontalBarChartValues(chart, options, ctx) {
18079
+ function drawHorizontalBarChartValues(chart, options, ctx, args) {
18080
18080
  const textsPositions = {};
18081
18081
  for (const dataset of chart._metasets) {
18082
18082
  if (isTrendLineAxis(dataset.xAxisID)) return;
@@ -18091,7 +18091,7 @@ stores.inject(MyMetaStore, storeInstance);
18091
18091
  const distanceFromAxisOrigin = Math.abs(point.x - xZeroLine);
18092
18092
  const PADDING = 3;
18093
18093
  let xPosition;
18094
- if (distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
18094
+ if (args.offsetFromAxisOrigin && distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
18095
18095
  else xPosition = value < 0 ? point.x + point.width / 2 : point.x - point.width / 2;
18096
18096
  if (!textsPositions[yPosition]) textsPositions[yPosition] = [];
18097
18097
  for (const otherPosition of textsPositions[yPosition]) if (Math.abs(otherPosition - xPosition) < textWidth) xPosition = value < 0 ? otherPosition - textWidth - PADDING : otherPosition + textWidth + PADDING;
@@ -28510,9 +28510,10 @@ stores.inject(MyMetaStore, storeInstance);
28510
28510
  compositionActive = false;
28511
28511
  spreadsheetRect = useSpreadsheetRect();
28512
28512
  lastHoveredTokenIndex = void 0;
28513
- debouncedHover = debounce((tokenIndex, hoveredRect) => {
28513
+ debouncedHover = debounce((tokenIndex, composerContent, hoveredRect) => {
28514
28514
  const selection = this.contentHelper.getCurrentSelection();
28515
- if (selection.start !== selection.end) return;
28515
+ const currentContent = this.props.composerStore.currentContent;
28516
+ if (selection.start !== selection.end || currentContent !== composerContent) return;
28516
28517
  const currentHoveredContext = this.props.composerStore.hoveredTokens;
28517
28518
  this.props.composerStore.hoverToken(tokenIndex);
28518
28519
  if (!deepEquals(currentHoveredContext, this.props.composerStore.hoveredTokens)) this.composerState.hoveredRect = hoveredRect;
@@ -28828,7 +28829,8 @@ stores.inject(MyMetaStore, storeInstance);
28828
28829
  onTokenHover(tokenIndex, hoveredRect) {
28829
28830
  if (this.lastHoveredTokenIndex !== tokenIndex) {
28830
28831
  this.lastHoveredTokenIndex = tokenIndex;
28831
- this.debouncedHover(tokenIndex, hoveredRect);
28832
+ const composerContent = this.props.composerStore.currentContent;
28833
+ this.debouncedHover(tokenIndex, composerContent, hoveredRect);
28832
28834
  }
28833
28835
  }
28834
28836
  /**
@@ -29604,6 +29606,42 @@ stores.inject(MyMetaStore, storeInstance);
29604
29606
  }
29605
29607
  };
29606
29608
 
29609
+ //#endregion
29610
+ //#region src/components/icons/raw_svgs.ts
29611
+ /**
29612
+ * SVG markup used in `css` tagged templates as `data:image/svg+xml` URIs.
29613
+ *
29614
+ * Keep these values in a separate module so Rolldown references them instead
29615
+ * of inlining them into template literals. Inlining produces nested template
29616
+ * literals, which the downstream `rjsmin` minifier cannot parse correctly
29617
+ * because it relies on regular expressions.
29618
+ *
29619
+ * Do not inline these constants.
29620
+ */
29621
+ const CHECK_SVG = `
29622
+ <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'>
29623
+ <path fill='none' stroke='#FFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/>
29624
+ </svg>
29625
+ `;
29626
+ const CIRCLE_SVG = `
29627
+ <svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
29628
+ <circle r="2" fill="#FFF"/>
29629
+ </svg>
29630
+ `;
29631
+ const TRANSPARENT_BACKGROUND_SVG = `
29632
+ <svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
29633
+ <path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
29634
+ </svg>
29635
+ `;
29636
+ const CURSOR_SVG = `
29637
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="16"><path d="M6.5.4c1.3-.8 2.9-.1 3.8 1.4l2.9 5.1c.2.4.9 1.6-.4 2.3l-1.6.9 1.8 3.1c.2.4.1 1-.2 1.2l-1.6 1c-.3.1-.9 0-1.1-.4l-1.8-3.1-1.6 1c-.6.4-1.7 0-2.2-.8L0 4.3"/><path fill="#fff" d="M9.1 2a1.4 1.1 60 0 0-1.7-.6L5.5 2.5l.9 1.6-1 .6-.9-1.6-.6.4 1.8 3.1-1.3.7-1.8-3.1-1 .6 3.8 6.6 6.8-3.98M3.9 8.8 10.82 5l.795 1.4-6.81 3.96"/></svg>
29638
+ `;
29639
+ const CARET_DOWN_SVG = `
29640
+ <svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
29641
+ <polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
29642
+ </svg>
29643
+ `;
29644
+
29607
29645
  //#endregion
29608
29646
  //#region src/components/side_panel/components/section/section.ts
29609
29647
  var Section = class extends _odoo_owl.Component {
@@ -29630,11 +29668,7 @@ stores.inject(MyMetaStore, storeInstance);
29630
29668
  cursor: pointer;
29631
29669
  border: 1px solid ${GRAY_300};
29632
29670
  background-position: 1px 1px;
29633
- background-image: url("data:image/svg+xml,${encodeURIComponent(`
29634
- <svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
29635
- <path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
29636
- </svg>
29637
- `)}");
29671
+ background-image: url("data:image/svg+xml,${encodeURIComponent(TRANSPARENT_BACKGROUND_SVG)}");
29638
29672
  }
29639
29673
  `;
29640
29674
  var RoundColorPicker = class extends _odoo_owl.Component {
@@ -30892,11 +30926,6 @@ stores.inject(MyMetaStore, storeInstance);
30892
30926
 
30893
30927
  //#endregion
30894
30928
  //#region src/components/side_panel/components/checkbox/checkbox.ts
30895
- const CHECK_SVG = `
30896
- <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'>
30897
- <path fill='none' stroke='#FFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/>
30898
- </svg>
30899
- `;
30900
30929
  const CHECKBOX_WIDTH = 14;
30901
30930
  css`
30902
30931
  label.o-checkbox {
@@ -41019,9 +41048,7 @@ stores.inject(MyMetaStore, storeInstance);
41019
41048
  //#region src/components/grid_overlay/grid_overlay.ts
41020
41049
  css`
41021
41050
  .o-paint-format-cursor {
41022
- cursor: url("data:image/svg+xml,${encodeURIComponent(`
41023
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="16"><path d="M6.5.4c1.3-.8 2.9-.1 3.8 1.4l2.9 5.1c.2.4.9 1.6-.4 2.3l-1.6.9 1.8 3.1c.2.4.1 1-.2 1.2l-1.6 1c-.3.1-.9 0-1.1-.4l-1.8-3.1-1.6 1c-.6.4-1.7 0-2.2-.8L0 4.3"/><path fill="#fff" d="M9.1 2a1.4 1.1 60 0 0-1.7-.6L5.5 2.5l.9 1.6-1 .6-.9-1.6-.6.4 1.8 3.1-1.3.7-1.8-3.1-1 .6 3.8 6.6 6.8-3.98M3.9 8.8 10.82 5l.795 1.4-6.81 3.96"/></svg>
41024
- `)}"), auto;
41051
+ cursor: url("data:image/svg+xml,${encodeURIComponent(CURSOR_SVG)}"), auto;
41025
41052
  }
41026
41053
  `;
41027
41054
  function useCellHovered(env, gridRef) {
@@ -44320,11 +44347,7 @@ stores.inject(MyMetaStore, storeInstance);
44320
44347
  border-radius: 8px;
44321
44348
 
44322
44349
  &:checked {
44323
- background: url("data:image/svg+xml,${encodeURIComponent(`
44324
- <svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
44325
- <circle r="2" fill="#FFF"/>
44326
- </svg>
44327
- `)}");
44350
+ background: url("data:image/svg+xml,${encodeURIComponent(CIRCLE_SVG)}");
44328
44351
  background-color: ${ACTION_COLOR};
44329
44352
  border-color: ${ACTION_COLOR};
44330
44353
  }
@@ -50182,7 +50205,13 @@ stores.inject(MyMetaStore, storeInstance);
50182
50205
  }
50183
50206
  onSelectionChanged(ranges) {
50184
50207
  this.state.rangeHasChanged = true;
50185
- this.state.range = ranges[0];
50208
+ if (ranges.length === 0) {
50209
+ this.state.range = void 0;
50210
+ return;
50211
+ }
50212
+ const sheetId = this.env.model.getters.getActiveSheetId();
50213
+ const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
50214
+ this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
50186
50215
  }
50187
50216
  onSelectionConfirmed() {
50188
50217
  if (this.state.range) {
@@ -57794,6 +57823,16 @@ stores.inject(MyMetaStore, storeInstance);
57794
57823
  getCellsDependingOn(ranges, ignore) {
57795
57824
  const visited = this.createEmptyPositionSet();
57796
57825
  const queue = Array.from(ranges).reverse();
57826
+ const initialPositionsToRemove = this.createEmptyPositionSet();
57827
+ for (const range of ranges) {
57828
+ const zone = range.zone;
57829
+ const sheetId = range.sheetId;
57830
+ for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) initialPositionsToRemove.add({
57831
+ sheetId,
57832
+ col,
57833
+ row
57834
+ });
57835
+ }
57797
57836
  while (queue.length > 0) {
57798
57837
  const range = queue.pop();
57799
57838
  const zone = range.zone;
@@ -57805,9 +57844,13 @@ stores.inject(MyMetaStore, storeInstance);
57805
57844
  });
57806
57845
  const impactedPositions = this.rTree.search(range).map((dep) => dep.data);
57807
57846
  const nextInQueue = {};
57808
- for (const position of impactedPositions) if (!visited.has(position) && !ignore.has(position)) {
57809
- if (!nextInQueue[position.sheetId]) nextInQueue[position.sheetId] = [];
57810
- nextInQueue[position.sheetId].push(positionToZone(position));
57847
+ for (const position of impactedPositions) {
57848
+ if (ignore.has(position)) continue;
57849
+ initialPositionsToRemove.delete(position);
57850
+ if (!visited.has(position)) {
57851
+ if (!nextInQueue[position.sheetId]) nextInQueue[position.sheetId] = [];
57852
+ nextInQueue[position.sheetId].push(positionToZone(position));
57853
+ }
57811
57854
  }
57812
57855
  for (const sheetId in nextInQueue) {
57813
57856
  const zones = recomputeZones(nextInQueue[sheetId], []);
@@ -57817,15 +57860,7 @@ stores.inject(MyMetaStore, storeInstance);
57817
57860
  })));
57818
57861
  }
57819
57862
  }
57820
- for (const range of ranges) {
57821
- const zone = range.zone;
57822
- const sheetId = range.sheetId;
57823
- for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) visited.delete({
57824
- sheetId,
57825
- col,
57826
- row
57827
- });
57828
- }
57863
+ for (const position of initialPositionsToRemove) visited.delete(position);
57829
57864
  return visited;
57830
57865
  }
57831
57866
  };
@@ -70992,11 +71027,7 @@ stores.inject(MyMetaStore, storeInstance);
70992
71027
  appearance: none;
70993
71028
  -webkit-appearance: none;
70994
71029
  -moz-appearance: none;
70995
- background: transparent url("data:image/svg+xml,${encodeURIComponent(`
70996
- <svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
70997
- <polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
70998
- </svg>
70999
- `)}")
71030
+ background: transparent url("data:image/svg+xml,${encodeURIComponent(CARET_DOWN_SVG)}")
71000
71031
  no-repeat right center;
71001
71032
  text-overflow: ellipsis;
71002
71033
 
@@ -75497,8 +75528,8 @@ exports.stores = stores;
75497
75528
  exports.tokenColors = tokenColors;
75498
75529
  exports.tokenize = tokenize;
75499
75530
 
75500
- __info__.version = "18.4.53";
75501
- __info__.date = "2026-08-29T09:14:01.099Z";
75502
- __info__.hash = "8ca564d";
75531
+ __info__.version = "18.4.54";
75532
+ __info__.date = "2026-09-04T07:09:41.203Z";
75533
+ __info__.hash = "303fa73";
75503
75534
 
75504
75535
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);