@odoo/o-spreadsheet 18.0.80 → 18.0.82

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.0.80
6
- * @date 2026-08-29T09:13:05.057Z
7
- * @hash af324f5
5
+ * @version 18.0.82
6
+ * @date 2026-09-10T05:35:40.438Z
7
+ * @hash d0329aa
8
8
  */
9
9
 
10
10
  import { Component, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, xml } from "@odoo/owl";
@@ -8763,6 +8763,7 @@ const chartShowValuesPlugin = {
8763
8763
  case "doughnut":
8764
8764
  drawPieChartValues(chart, options, ctx);
8765
8765
  break;
8766
+ case "combo":
8766
8767
  case "bar":
8767
8768
  case "line":
8768
8769
  options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarChartValues(chart, options, ctx);
@@ -8786,7 +8787,7 @@ function drawLineOrBarChartValues(chart, options, ctx) {
8786
8787
  const point = dataset.data[i];
8787
8788
  const xPosition = point.x;
8788
8789
  let yPosition = 0;
8789
- if (chart.config.type === "line") yPosition = point.y - 10;
8790
+ if (dataset.type === "line") yPosition = point.y - 10;
8790
8791
  else yPosition = value < 0 ? point.y - point.height / 2 : point.y + point.height / 2;
8791
8792
  if (!textsPositions[xPosition]) textsPositions[xPosition] = [];
8792
8793
  for (const otherPosition of textsPositions[xPosition] || []) if (Math.abs(otherPosition - yPosition) < 13) yPosition = otherPosition - 13;
@@ -13928,7 +13929,7 @@ function createEmptyExcelWorkbookData() {
13928
13929
  //#region src/helpers/ui/paste_interactive.ts
13929
13930
  const PasteInteractiveContent = {
13930
13931
  wrongPasteSelection: _t("This operation is not allowed with multiple selections."),
13931
- willRemoveExistingMerge: _t("This operation is not possible due to a merge. Please remove the merges first than try again."),
13932
+ willRemoveExistingMerge: _t("Cannot perform this action on merged cells. Unmerge the cells and try again."),
13932
13933
  wrongFigurePasteOption: _t("Cannot do a special paste of a figure."),
13933
13934
  frozenPaneOverlap: _t("This operation is not allowed due to an overlapping frozen pane.")
13934
13935
  };
@@ -25904,6 +25905,7 @@ function createComboChartRuntime(chart, getters) {
25904
25905
  };
25905
25906
  const fontColor = chartFontColor(chart.background);
25906
25907
  const config = getDefaultChartJsRuntime(chart, labels, fontColor, localeFormat);
25908
+ config.type = "bar";
25907
25909
  const legend = getChartJsLegend(fontColor);
25908
25910
  if (chart.legendPosition === "none") legend.display = false;
25909
25911
  else legend.position = chart.legendPosition;
@@ -31699,12 +31701,48 @@ var TopBarComponentRegistry = class extends Registry {
31699
31701
  const topbarComponentRegistry = new TopBarComponentRegistry();
31700
31702
 
31701
31703
  //#endregion
31702
- //#region src/components/side_panel/components/checkbox/checkbox.ts
31704
+ //#region src/components/icons/raw_svgs.ts
31705
+ /**
31706
+ * SVG markup used in `css` tagged templates as `data:image/svg+xml` URIs.
31707
+ *
31708
+ * Keep these values in a separate module so Rolldown references them instead
31709
+ * of inlining them into template literals. Inlining produces nested template
31710
+ * literals, which the downstream `rjsmin` minifier cannot parse correctly
31711
+ * because it relies on regular expressions.
31712
+ *
31713
+ * Do not inline these constants.
31714
+ */
31703
31715
  const CHECK_SVG = `
31704
31716
  <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'>
31705
31717
  <path fill='none' stroke='#FFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/>
31706
31718
  </svg>
31707
31719
  `;
31720
+ const CIRCLE_SVG = `
31721
+ <svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
31722
+ <circle r="2" fill="#FFF"/>
31723
+ </svg>
31724
+ `;
31725
+ const FX_SVG = `
31726
+ <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
31727
+ <path d='m28 34-4 5v2h10l-6 40c-4 22-6 28-7 30-2 2-3 3-5 3-3 0-7-2-9-4H4c-2 2-4 4-4 7s4 6 8 6 9-2 15-8c8-7 13-17 18-39l7-35 13-1 3-6H49c4-23 7-27 11-27 2 0 5 2 8 6h4c1-1 4-4 4-7 0-2-3-6-9-6-5 0-13 4-20 10-6 7-9 14-11 24h-8zm41 16c4-5 7-7 8-7s2 1 5 9l3 12c-7 11-12 17-16 17l-3-1-2-1c-3 0-6 3-6 7s3 7 7 7c6 0 12-6 22-23l3 10c3 9 6 13 10 13 5 0 11-4 18-15l-3-4c-4 6-7 8-8 8-2 0-4-3-6-10l-5-15 8-10 6-4 3 1 3 2c2 0 6-3 6-7s-2-7-6-7c-6 0-11 5-21 20l-2-6c-3-9-5-14-9-14-5 0-12 6-18 15l3 3z' fill='#BDBDBD'/>
31728
+ </svg>
31729
+ `;
31730
+ const TRANSPARENT_BACKGROUND_SVG = `
31731
+ <svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
31732
+ <path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
31733
+ </svg>
31734
+ `;
31735
+ const CURSOR_SVG = `
31736
+ <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>
31737
+ `;
31738
+ const CARET_DOWN_SVG = `
31739
+ <svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
31740
+ <polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
31741
+ </svg>
31742
+ `;
31743
+
31744
+ //#endregion
31745
+ //#region src/components/side_panel/components/checkbox/checkbox.ts
31708
31746
  const CHECKBOX_WIDTH = 14;
31709
31747
  css`
31710
31748
  label.o-checkbox {
@@ -32564,11 +32602,7 @@ css`
32564
32602
  border-radius: 8px;
32565
32603
 
32566
32604
  &:checked {
32567
- background: url("data:image/svg+xml,${encodeURIComponent(`
32568
- <svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
32569
- <circle r="2" fill="#FFF"/>
32570
- </svg>
32571
- `)}");
32605
+ background: url("data:image/svg+xml,${encodeURIComponent(CIRCLE_SVG)}");
32572
32606
  background-color: ${ACTION_COLOR};
32573
32607
  border-color: ${ACTION_COLOR};
32574
32608
  }
@@ -33168,11 +33202,7 @@ css`
33168
33202
  cursor: pointer;
33169
33203
  border: 1px solid ${GRAY_300};
33170
33204
  background-position: 1px 1px;
33171
- background-image: url("data:image/svg+xml,${encodeURIComponent(`
33172
- <svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
33173
- <path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
33174
- </svg>
33175
- `)}");
33205
+ background-image: url("data:image/svg+xml,${encodeURIComponent(TRANSPARENT_BACKGROUND_SVG)}");
33176
33206
  }
33177
33207
  `;
33178
33208
  var RoundColorPicker = class extends Component {
@@ -37647,7 +37677,7 @@ var FindAndReplacePanel = class extends Component {
37647
37677
  }
37648
37678
  get specificRangeMatchesCount() {
37649
37679
  const range = this.searchOptions.specificRange;
37650
- if (!range) return "";
37680
+ if (!range || range.invalidSheetName || range.invalidXc) return "";
37651
37681
  const { sheetId, zone } = range;
37652
37682
  return _t("%(matches)s matches in range %(range)s of %(sheetName)s", {
37653
37683
  matches: this.store.specificRangeMatchesCount,
@@ -40042,7 +40072,13 @@ var PivotSpreadsheetSidePanel = class extends Component {
40042
40072
  }
40043
40073
  onSelectionChanged(ranges) {
40044
40074
  this.state.rangeHasChanged = true;
40045
- this.state.range = ranges[0];
40075
+ if (ranges.length === 0) {
40076
+ this.state.range = void 0;
40077
+ return;
40078
+ }
40079
+ const sheetId = this.env.model.getters.getActiveSheetId();
40080
+ const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
40081
+ this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
40046
40082
  }
40047
40083
  onSelectionConfirmed() {
40048
40084
  if (this.state.range) {
@@ -43258,9 +43294,7 @@ var PaintFormatStore = class extends SpreadsheetStore {
43258
43294
  //#region src/components/grid_overlay/grid_overlay.ts
43259
43295
  css`
43260
43296
  .o-paint-format-cursor {
43261
- cursor: url("data:image/svg+xml,${encodeURIComponent(`
43262
- <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>
43263
- `)}"), auto;
43297
+ cursor: url("data:image/svg+xml,${encodeURIComponent(CURSOR_SVG)}"), auto;
43264
43298
  }
43265
43299
  `;
43266
43300
  function useCellHovered(env, gridRef, callback) {
@@ -51564,6 +51598,16 @@ var FormulaDependencyGraph = class {
51564
51598
  getCellsDependingOn(ranges, ignore) {
51565
51599
  const visited = this.createEmptyPositionSet();
51566
51600
  const queue = Array.from(ranges).reverse();
51601
+ const initialPositionsToRemove = this.createEmptyPositionSet();
51602
+ for (const range of ranges) {
51603
+ const zone = range.zone;
51604
+ const sheetId = range.sheetId;
51605
+ for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) initialPositionsToRemove.add({
51606
+ sheetId,
51607
+ col,
51608
+ row
51609
+ });
51610
+ }
51567
51611
  while (queue.length > 0) {
51568
51612
  const range = queue.pop();
51569
51613
  const zone = range.zone;
@@ -51575,9 +51619,13 @@ var FormulaDependencyGraph = class {
51575
51619
  });
51576
51620
  const impactedPositions = this.rTree.search(range).map((dep) => dep.data);
51577
51621
  const nextInQueue = {};
51578
- for (const position of impactedPositions) if (!visited.has(position) && !ignore.has(position)) {
51579
- if (!nextInQueue[position.sheetId]) nextInQueue[position.sheetId] = [];
51580
- nextInQueue[position.sheetId].push(positionToZone(position));
51622
+ for (const position of impactedPositions) {
51623
+ if (ignore.has(position)) continue;
51624
+ initialPositionsToRemove.delete(position);
51625
+ if (!visited.has(position)) {
51626
+ if (!nextInQueue[position.sheetId]) nextInQueue[position.sheetId] = [];
51627
+ nextInQueue[position.sheetId].push(positionToZone(position));
51628
+ }
51581
51629
  }
51582
51630
  for (const sheetId in nextInQueue) {
51583
51631
  const zones = recomputeZones(nextInQueue[sheetId], []);
@@ -51587,15 +51635,7 @@ var FormulaDependencyGraph = class {
51587
51635
  })));
51588
51636
  }
51589
51637
  }
51590
- for (const range of ranges) {
51591
- const zone = range.zone;
51592
- const sheetId = range.sheetId;
51593
- for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) visited.delete({
51594
- sheetId,
51595
- col,
51596
- row
51597
- });
51598
- }
51638
+ for (const position of initialPositionsToRemove) visited.delete(position);
51599
51639
  return visited;
51600
51640
  }
51601
51641
  };
@@ -58693,8 +58733,8 @@ var InternalViewport = class {
58693
58733
  const { end: lastRowEnd, size: lastRowSize } = this.getters.getRowDimensions(this.sheetId, lastRow);
58694
58734
  const leftColIndex = this.searchHeaderIndex("COL", lastColEnd - this.viewportWidth, 0);
58695
58735
  const leftColSize = this.getters.getColSize(this.sheetId, leftColIndex);
58696
- const leftRowIndex = this.searchHeaderIndex("ROW", lastRowEnd - this.viewportHeight, 0);
58697
- const topRowSize = this.getters.getRowSize(this.sheetId, leftRowIndex);
58736
+ const topRowIndex = this.searchHeaderIndex("ROW", lastRowEnd - this.viewportHeight, 0);
58737
+ const topRowSize = this.getters.getRowSize(this.sheetId, topRowIndex);
58698
58738
  let width = lastColEnd - this.offsetCorrectionX;
58699
58739
  if (this.canScrollHorizontally) {
58700
58740
  width += Math.max(96, Math.min(leftColSize, this.viewportWidth - lastColSize));
@@ -58872,7 +58912,11 @@ var InternalViewport = class {
58872
58912
  this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
58873
58913
  this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
58874
58914
  if (!this.viewportWidth) return;
58875
- if (this.left === -1) this.left = this.boundaries.left;
58915
+ if (this.left === -1) {
58916
+ const colsHeight = this.getters.getColRowOffset("COL", this.boundaries.left, this.boundaries.right);
58917
+ if (0 < colsHeight && colsHeight <= this.offsetScrollbarX) this.left = this.boundaries.right;
58918
+ else this.left = this.boundaries.left;
58919
+ }
58876
58920
  if (this.right === -1) this.right = this.boundaries.right;
58877
58921
  this.offsetX = this.getters.getColDimensions(sheetId, this.left).start - this.getters.getColDimensions(sheetId, this.boundaries.left).start;
58878
58922
  }
@@ -58883,7 +58927,11 @@ var InternalViewport = class {
58883
58927
  this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
58884
58928
  this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
58885
58929
  if (!this.viewportHeight) return;
58886
- if (this.top === -1) this.top = this.boundaries.top;
58930
+ if (this.top === -1) {
58931
+ const rowsHeight = this.getters.getColRowOffset("ROW", this.boundaries.top, this.boundaries.bottom);
58932
+ if (0 < rowsHeight && rowsHeight <= this.offsetScrollbarY) this.top = this.boundaries.bottom;
58933
+ else this.top = this.boundaries.top;
58934
+ }
58887
58935
  if (this.bottom === -1) this.bottom = this.boundaries.bottom;
58888
58936
  this.offsetY = this.getters.getRowDimensions(sheetId, this.top).start - this.getters.getRowDimensions(sheetId, this.boundaries.top).start;
58889
58937
  }
@@ -61509,11 +61557,7 @@ css`
61509
61557
  /* In readonly we always show the fx icon if the composer is empty, not matter the focus */
61510
61558
  .o-composer:empty:not(:focus):not(.active)::before,
61511
61559
  &.o-topbar-composer-readonly .o-composer:empty::before {
61512
- content: url("data:image/svg+xml,${encodeURIComponent(`
61513
- <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
61514
- <path d='m28 34-4 5v2h10l-6 40c-4 22-6 28-7 30-2 2-3 3-5 3-3 0-7-2-9-4H4c-2 2-4 4-4 7s4 6 8 6 9-2 15-8c8-7 13-17 18-39l7-35 13-1 3-6H49c4-23 7-27 11-27 2 0 5 2 8 6h4c1-1 4-4 4-7 0-2-3-6-9-6-5 0-13 4-20 10-6 7-9 14-11 24h-8zm41 16c4-5 7-7 8-7s2 1 5 9l3 12c-7 11-12 17-16 17l-3-1-2-1c-3 0-6 3-6 7s3 7 7 7c6 0 12-6 22-23l3 10c3 9 6 13 10 13 5 0 11-4 18-15l-3-4c-4 6-7 8-8 8-2 0-4-3-6-10l-5-15 8-10 6-4 3 1 3 2c2 0 6-3 6-7s-2-7-6-7c-6 0-11 5-21 20l-2-6c-3-9-5-14-9-14-5 0-12 6-18 15l3 3z' fill='#BDBDBD'/>
61515
- </svg>
61516
- `)}");
61560
+ content: url("data:image/svg+xml,${encodeURIComponent(FX_SVG)}");
61517
61561
  position: relative;
61518
61562
  top: 20%;
61519
61563
  }
@@ -62105,11 +62149,7 @@ css`
62105
62149
  appearance: none;
62106
62150
  -webkit-appearance: none;
62107
62151
  -moz-appearance: none;
62108
- background: transparent url("data:image/svg+xml,${encodeURIComponent(`
62109
- <svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
62110
- <polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
62111
- </svg>
62112
- `)}")
62152
+ background: transparent url("data:image/svg+xml,${encodeURIComponent(CARET_DOWN_SVG)}")
62113
62153
  no-repeat right center;
62114
62154
  text-overflow: ellipsis;
62115
62155
 
@@ -66412,6 +66452,6 @@ const constants = {
66412
66452
  //#endregion
66413
66453
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
66414
66454
 
66415
- __info__.version = "18.0.80";
66416
- __info__.date = "2026-08-29T09:13:05.057Z";
66417
- __info__.hash = "af324f5";
66455
+ __info__.version = "18.0.82";
66456
+ __info__.date = "2026-09-10T05:35:40.438Z";
66457
+ __info__.hash = "d0329aa";
@@ -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.0.80
6
- * @date 2026-08-29T09:13:05.057Z
7
- * @hash af324f5
5
+ * @version 18.0.82
6
+ * @date 2026-09-10T05:35:40.438Z
7
+ * @hash d0329aa
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -8765,6 +8765,7 @@ stores.inject(MyMetaStore, storeInstance);
8765
8765
  case "doughnut":
8766
8766
  drawPieChartValues(chart, options, ctx);
8767
8767
  break;
8768
+ case "combo":
8768
8769
  case "bar":
8769
8770
  case "line":
8770
8771
  options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarChartValues(chart, options, ctx);
@@ -8788,7 +8789,7 @@ stores.inject(MyMetaStore, storeInstance);
8788
8789
  const point = dataset.data[i];
8789
8790
  const xPosition = point.x;
8790
8791
  let yPosition = 0;
8791
- if (chart.config.type === "line") yPosition = point.y - 10;
8792
+ if (dataset.type === "line") yPosition = point.y - 10;
8792
8793
  else yPosition = value < 0 ? point.y - point.height / 2 : point.y + point.height / 2;
8793
8794
  if (!textsPositions[xPosition]) textsPositions[xPosition] = [];
8794
8795
  for (const otherPosition of textsPositions[xPosition] || []) if (Math.abs(otherPosition - yPosition) < 13) yPosition = otherPosition - 13;
@@ -13930,7 +13931,7 @@ stores.inject(MyMetaStore, storeInstance);
13930
13931
  //#region src/helpers/ui/paste_interactive.ts
13931
13932
  const PasteInteractiveContent = {
13932
13933
  wrongPasteSelection: _t("This operation is not allowed with multiple selections."),
13933
- willRemoveExistingMerge: _t("This operation is not possible due to a merge. Please remove the merges first than try again."),
13934
+ willRemoveExistingMerge: _t("Cannot perform this action on merged cells. Unmerge the cells and try again."),
13934
13935
  wrongFigurePasteOption: _t("Cannot do a special paste of a figure."),
13935
13936
  frozenPaneOverlap: _t("This operation is not allowed due to an overlapping frozen pane.")
13936
13937
  };
@@ -25906,6 +25907,7 @@ stores.inject(MyMetaStore, storeInstance);
25906
25907
  };
25907
25908
  const fontColor = chartFontColor(chart.background);
25908
25909
  const config = getDefaultChartJsRuntime(chart, labels, fontColor, localeFormat);
25910
+ config.type = "bar";
25909
25911
  const legend = getChartJsLegend(fontColor);
25910
25912
  if (chart.legendPosition === "none") legend.display = false;
25911
25913
  else legend.position = chart.legendPosition;
@@ -31701,12 +31703,48 @@ stores.inject(MyMetaStore, storeInstance);
31701
31703
  const topbarComponentRegistry = new TopBarComponentRegistry();
31702
31704
 
31703
31705
  //#endregion
31704
- //#region src/components/side_panel/components/checkbox/checkbox.ts
31706
+ //#region src/components/icons/raw_svgs.ts
31707
+ /**
31708
+ * SVG markup used in `css` tagged templates as `data:image/svg+xml` URIs.
31709
+ *
31710
+ * Keep these values in a separate module so Rolldown references them instead
31711
+ * of inlining them into template literals. Inlining produces nested template
31712
+ * literals, which the downstream `rjsmin` minifier cannot parse correctly
31713
+ * because it relies on regular expressions.
31714
+ *
31715
+ * Do not inline these constants.
31716
+ */
31705
31717
  const CHECK_SVG = `
31706
31718
  <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'>
31707
31719
  <path fill='none' stroke='#FFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/>
31708
31720
  </svg>
31709
31721
  `;
31722
+ const CIRCLE_SVG = `
31723
+ <svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
31724
+ <circle r="2" fill="#FFF"/>
31725
+ </svg>
31726
+ `;
31727
+ const FX_SVG = `
31728
+ <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
31729
+ <path d='m28 34-4 5v2h10l-6 40c-4 22-6 28-7 30-2 2-3 3-5 3-3 0-7-2-9-4H4c-2 2-4 4-4 7s4 6 8 6 9-2 15-8c8-7 13-17 18-39l7-35 13-1 3-6H49c4-23 7-27 11-27 2 0 5 2 8 6h4c1-1 4-4 4-7 0-2-3-6-9-6-5 0-13 4-20 10-6 7-9 14-11 24h-8zm41 16c4-5 7-7 8-7s2 1 5 9l3 12c-7 11-12 17-16 17l-3-1-2-1c-3 0-6 3-6 7s3 7 7 7c6 0 12-6 22-23l3 10c3 9 6 13 10 13 5 0 11-4 18-15l-3-4c-4 6-7 8-8 8-2 0-4-3-6-10l-5-15 8-10 6-4 3 1 3 2c2 0 6-3 6-7s-2-7-6-7c-6 0-11 5-21 20l-2-6c-3-9-5-14-9-14-5 0-12 6-18 15l3 3z' fill='#BDBDBD'/>
31730
+ </svg>
31731
+ `;
31732
+ const TRANSPARENT_BACKGROUND_SVG = `
31733
+ <svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
31734
+ <path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
31735
+ </svg>
31736
+ `;
31737
+ const CURSOR_SVG = `
31738
+ <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>
31739
+ `;
31740
+ const CARET_DOWN_SVG = `
31741
+ <svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
31742
+ <polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
31743
+ </svg>
31744
+ `;
31745
+
31746
+ //#endregion
31747
+ //#region src/components/side_panel/components/checkbox/checkbox.ts
31710
31748
  const CHECKBOX_WIDTH = 14;
31711
31749
  css`
31712
31750
  label.o-checkbox {
@@ -32566,11 +32604,7 @@ stores.inject(MyMetaStore, storeInstance);
32566
32604
  border-radius: 8px;
32567
32605
 
32568
32606
  &:checked {
32569
- background: url("data:image/svg+xml,${encodeURIComponent(`
32570
- <svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
32571
- <circle r="2" fill="#FFF"/>
32572
- </svg>
32573
- `)}");
32607
+ background: url("data:image/svg+xml,${encodeURIComponent(CIRCLE_SVG)}");
32574
32608
  background-color: ${ACTION_COLOR};
32575
32609
  border-color: ${ACTION_COLOR};
32576
32610
  }
@@ -33170,11 +33204,7 @@ stores.inject(MyMetaStore, storeInstance);
33170
33204
  cursor: pointer;
33171
33205
  border: 1px solid ${GRAY_300};
33172
33206
  background-position: 1px 1px;
33173
- background-image: url("data:image/svg+xml,${encodeURIComponent(`
33174
- <svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
33175
- <path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
33176
- </svg>
33177
- `)}");
33207
+ background-image: url("data:image/svg+xml,${encodeURIComponent(TRANSPARENT_BACKGROUND_SVG)}");
33178
33208
  }
33179
33209
  `;
33180
33210
  var RoundColorPicker = class extends _odoo_owl.Component {
@@ -37649,7 +37679,7 @@ stores.inject(MyMetaStore, storeInstance);
37649
37679
  }
37650
37680
  get specificRangeMatchesCount() {
37651
37681
  const range = this.searchOptions.specificRange;
37652
- if (!range) return "";
37682
+ if (!range || range.invalidSheetName || range.invalidXc) return "";
37653
37683
  const { sheetId, zone } = range;
37654
37684
  return _t("%(matches)s matches in range %(range)s of %(sheetName)s", {
37655
37685
  matches: this.store.specificRangeMatchesCount,
@@ -40044,7 +40074,13 @@ stores.inject(MyMetaStore, storeInstance);
40044
40074
  }
40045
40075
  onSelectionChanged(ranges) {
40046
40076
  this.state.rangeHasChanged = true;
40047
- this.state.range = ranges[0];
40077
+ if (ranges.length === 0) {
40078
+ this.state.range = void 0;
40079
+ return;
40080
+ }
40081
+ const sheetId = this.env.model.getters.getActiveSheetId();
40082
+ const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
40083
+ this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
40048
40084
  }
40049
40085
  onSelectionConfirmed() {
40050
40086
  if (this.state.range) {
@@ -43260,9 +43296,7 @@ stores.inject(MyMetaStore, storeInstance);
43260
43296
  //#region src/components/grid_overlay/grid_overlay.ts
43261
43297
  css`
43262
43298
  .o-paint-format-cursor {
43263
- cursor: url("data:image/svg+xml,${encodeURIComponent(`
43264
- <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>
43265
- `)}"), auto;
43299
+ cursor: url("data:image/svg+xml,${encodeURIComponent(CURSOR_SVG)}"), auto;
43266
43300
  }
43267
43301
  `;
43268
43302
  function useCellHovered(env, gridRef, callback) {
@@ -51566,6 +51600,16 @@ stores.inject(MyMetaStore, storeInstance);
51566
51600
  getCellsDependingOn(ranges, ignore) {
51567
51601
  const visited = this.createEmptyPositionSet();
51568
51602
  const queue = Array.from(ranges).reverse();
51603
+ const initialPositionsToRemove = this.createEmptyPositionSet();
51604
+ for (const range of ranges) {
51605
+ const zone = range.zone;
51606
+ const sheetId = range.sheetId;
51607
+ for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) initialPositionsToRemove.add({
51608
+ sheetId,
51609
+ col,
51610
+ row
51611
+ });
51612
+ }
51569
51613
  while (queue.length > 0) {
51570
51614
  const range = queue.pop();
51571
51615
  const zone = range.zone;
@@ -51577,9 +51621,13 @@ stores.inject(MyMetaStore, storeInstance);
51577
51621
  });
51578
51622
  const impactedPositions = this.rTree.search(range).map((dep) => dep.data);
51579
51623
  const nextInQueue = {};
51580
- for (const position of impactedPositions) if (!visited.has(position) && !ignore.has(position)) {
51581
- if (!nextInQueue[position.sheetId]) nextInQueue[position.sheetId] = [];
51582
- nextInQueue[position.sheetId].push(positionToZone(position));
51624
+ for (const position of impactedPositions) {
51625
+ if (ignore.has(position)) continue;
51626
+ initialPositionsToRemove.delete(position);
51627
+ if (!visited.has(position)) {
51628
+ if (!nextInQueue[position.sheetId]) nextInQueue[position.sheetId] = [];
51629
+ nextInQueue[position.sheetId].push(positionToZone(position));
51630
+ }
51583
51631
  }
51584
51632
  for (const sheetId in nextInQueue) {
51585
51633
  const zones = recomputeZones(nextInQueue[sheetId], []);
@@ -51589,15 +51637,7 @@ stores.inject(MyMetaStore, storeInstance);
51589
51637
  })));
51590
51638
  }
51591
51639
  }
51592
- for (const range of ranges) {
51593
- const zone = range.zone;
51594
- const sheetId = range.sheetId;
51595
- for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) visited.delete({
51596
- sheetId,
51597
- col,
51598
- row
51599
- });
51600
- }
51640
+ for (const position of initialPositionsToRemove) visited.delete(position);
51601
51641
  return visited;
51602
51642
  }
51603
51643
  };
@@ -58695,8 +58735,8 @@ stores.inject(MyMetaStore, storeInstance);
58695
58735
  const { end: lastRowEnd, size: lastRowSize } = this.getters.getRowDimensions(this.sheetId, lastRow);
58696
58736
  const leftColIndex = this.searchHeaderIndex("COL", lastColEnd - this.viewportWidth, 0);
58697
58737
  const leftColSize = this.getters.getColSize(this.sheetId, leftColIndex);
58698
- const leftRowIndex = this.searchHeaderIndex("ROW", lastRowEnd - this.viewportHeight, 0);
58699
- const topRowSize = this.getters.getRowSize(this.sheetId, leftRowIndex);
58738
+ const topRowIndex = this.searchHeaderIndex("ROW", lastRowEnd - this.viewportHeight, 0);
58739
+ const topRowSize = this.getters.getRowSize(this.sheetId, topRowIndex);
58700
58740
  let width = lastColEnd - this.offsetCorrectionX;
58701
58741
  if (this.canScrollHorizontally) {
58702
58742
  width += Math.max(96, Math.min(leftColSize, this.viewportWidth - lastColSize));
@@ -58874,7 +58914,11 @@ stores.inject(MyMetaStore, storeInstance);
58874
58914
  this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
58875
58915
  this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
58876
58916
  if (!this.viewportWidth) return;
58877
- if (this.left === -1) this.left = this.boundaries.left;
58917
+ if (this.left === -1) {
58918
+ const colsHeight = this.getters.getColRowOffset("COL", this.boundaries.left, this.boundaries.right);
58919
+ if (0 < colsHeight && colsHeight <= this.offsetScrollbarX) this.left = this.boundaries.right;
58920
+ else this.left = this.boundaries.left;
58921
+ }
58878
58922
  if (this.right === -1) this.right = this.boundaries.right;
58879
58923
  this.offsetX = this.getters.getColDimensions(sheetId, this.left).start - this.getters.getColDimensions(sheetId, this.boundaries.left).start;
58880
58924
  }
@@ -58885,7 +58929,11 @@ stores.inject(MyMetaStore, storeInstance);
58885
58929
  this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
58886
58930
  this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
58887
58931
  if (!this.viewportHeight) return;
58888
- if (this.top === -1) this.top = this.boundaries.top;
58932
+ if (this.top === -1) {
58933
+ const rowsHeight = this.getters.getColRowOffset("ROW", this.boundaries.top, this.boundaries.bottom);
58934
+ if (0 < rowsHeight && rowsHeight <= this.offsetScrollbarY) this.top = this.boundaries.bottom;
58935
+ else this.top = this.boundaries.top;
58936
+ }
58889
58937
  if (this.bottom === -1) this.bottom = this.boundaries.bottom;
58890
58938
  this.offsetY = this.getters.getRowDimensions(sheetId, this.top).start - this.getters.getRowDimensions(sheetId, this.boundaries.top).start;
58891
58939
  }
@@ -61511,11 +61559,7 @@ stores.inject(MyMetaStore, storeInstance);
61511
61559
  /* In readonly we always show the fx icon if the composer is empty, not matter the focus */
61512
61560
  .o-composer:empty:not(:focus):not(.active)::before,
61513
61561
  &.o-topbar-composer-readonly .o-composer:empty::before {
61514
- content: url("data:image/svg+xml,${encodeURIComponent(`
61515
- <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
61516
- <path d='m28 34-4 5v2h10l-6 40c-4 22-6 28-7 30-2 2-3 3-5 3-3 0-7-2-9-4H4c-2 2-4 4-4 7s4 6 8 6 9-2 15-8c8-7 13-17 18-39l7-35 13-1 3-6H49c4-23 7-27 11-27 2 0 5 2 8 6h4c1-1 4-4 4-7 0-2-3-6-9-6-5 0-13 4-20 10-6 7-9 14-11 24h-8zm41 16c4-5 7-7 8-7s2 1 5 9l3 12c-7 11-12 17-16 17l-3-1-2-1c-3 0-6 3-6 7s3 7 7 7c6 0 12-6 22-23l3 10c3 9 6 13 10 13 5 0 11-4 18-15l-3-4c-4 6-7 8-8 8-2 0-4-3-6-10l-5-15 8-10 6-4 3 1 3 2c2 0 6-3 6-7s-2-7-6-7c-6 0-11 5-21 20l-2-6c-3-9-5-14-9-14-5 0-12 6-18 15l3 3z' fill='#BDBDBD'/>
61517
- </svg>
61518
- `)}");
61562
+ content: url("data:image/svg+xml,${encodeURIComponent(FX_SVG)}");
61519
61563
  position: relative;
61520
61564
  top: 20%;
61521
61565
  }
@@ -62107,11 +62151,7 @@ stores.inject(MyMetaStore, storeInstance);
62107
62151
  appearance: none;
62108
62152
  -webkit-appearance: none;
62109
62153
  -moz-appearance: none;
62110
- background: transparent url("data:image/svg+xml,${encodeURIComponent(`
62111
- <svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
62112
- <polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
62113
- </svg>
62114
- `)}")
62154
+ background: transparent url("data:image/svg+xml,${encodeURIComponent(CARET_DOWN_SVG)}")
62115
62155
  no-repeat right center;
62116
62156
  text-overflow: ellipsis;
62117
62157
 
@@ -66458,8 +66498,8 @@ exports.stores = stores;
66458
66498
  exports.tokenColors = tokenColors;
66459
66499
  exports.tokenize = tokenize;
66460
66500
 
66461
- __info__.version = "18.0.80";
66462
- __info__.date = "2026-08-29T09:13:05.057Z";
66463
- __info__.hash = "af324f5";
66501
+ __info__.version = "18.0.82";
66502
+ __info__.date = "2026-09-10T05:35:40.438Z";
66503
+ __info__.hash = "d0329aa";
66464
66504
 
66465
66505
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);