@odoo/o-spreadsheet 18.0.71 → 18.0.74

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.71
6
- * @date 2026-06-17T08:50:04.188Z
7
- * @hash 18d4601
5
+ * @version 18.0.74
6
+ * @date 2026-07-13T06:25:20.333Z
7
+ * @hash 9183e36
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -187,7 +187,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
187
187
  const GRAY_200 = "#E7E9ED";
188
188
  const GRAY_100 = "#F9FAFB";
189
189
  const TEXT_BODY = "#374151";
190
- const TEXT_BODY_MUTED = TEXT_BODY + "C2";
190
+ const TEXT_BODY_MUTED = "#374151C2";
191
191
  const TEXT_HEADING = "#111827";
192
192
  const PRIMARY_BUTTON_BG = "#714B67";
193
193
  const PRIMARY_BUTTON_HOVER_BG = "#624159";
@@ -293,9 +293,6 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
293
293
  ];
294
294
  const DEFAULT_CELL_HEIGHT = 23;
295
295
  const FOOTER_HEIGHT = 2 * 23;
296
- const MENU_SEPARATOR_BORDER_WIDTH = 1;
297
- const MENU_SEPARATOR_PADDING = 5;
298
- const MENU_SEPARATOR_HEIGHT = 1 + 2 * 5;
299
296
  const DEFAULT_STYLE = {
300
297
  align: "left",
301
298
  verticalAlign: "bottom",
@@ -315,7 +312,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
315
312
  const DEFAULT_VERTICAL_ALIGN = DEFAULT_STYLE.verticalAlign;
316
313
  const DEFAULT_WRAPPING_MODE = DEFAULT_STYLE.wrapping;
317
314
  const DEFAULT_FONT_SIZE = DEFAULT_STYLE.fontSize;
318
- const DEFAULT_FONT = "'Roboto', arial";
315
+ const DEFAULT_FONT = "'Roboto', arial, 'Liberation Sans'";
319
316
  const DEFAULT_BORDER_DESC = {
320
317
  style: "thin",
321
318
  color: "#000000"
@@ -1491,7 +1488,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1491
1488
  function recomputeZones(zones, zonesToRemove = []) {
1492
1489
  if (zones.length <= 1 && zonesToRemove.length === 0) return zones;
1493
1490
  const profilesStartingPosition = [0];
1494
- const profiles = new Map([[0, []]]);
1491
+ const profiles = /* @__PURE__ */ new Map([[0, []]]);
1495
1492
  modifyProfiles(profilesStartingPosition, profiles, zones, false);
1496
1493
  modifyProfiles(profilesStartingPosition, profiles, zonesToRemove, true);
1497
1494
  return constructZonesFromProfiles(profilesStartingPosition, profiles);
@@ -2725,12 +2722,10 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2725
2722
  const pIntegerAndDecimals = `(?:\\d+(?:${escapeRegExp(locale.thousandsSeparator || "")}\\d{3,})*(?:${decimalSeparator}\\d*)?)`;
2726
2723
  const pOnlyDecimals = `(?:${decimalSeparator}\\d+)`;
2727
2724
  const pNumber = "(?:\\s*" + pIntegerAndDecimals + "|" + pOnlyDecimals + ")(?:e(?:\\+|-)?\\d+)?(?:\\s*%)?";
2728
- const pMinus = "(?:\\s*-)?";
2729
- const pCurrencyFormat = "(?:\\s*[\\$€])?";
2730
2725
  const pNumberExp = "^(?:(?:" + [
2731
- pMinus + pCurrencyFormat + pNumber,
2732
- pMinus + pNumber + pCurrencyFormat,
2733
- pCurrencyFormat + pMinus + pNumber
2726
+ "(?:\\s*-)?(?:\\s*[\\$€])?" + pNumber,
2727
+ "(?:\\s*-)?" + pNumber + "(?:\\s*[\\$€])?",
2728
+ "(?:\\s*[\\$€])?(?:\\s*-)?" + pNumber
2734
2729
  ].join(")|(?:") + "))$";
2735
2730
  return new RegExp(pNumberExp, "i");
2736
2731
  });
@@ -2793,7 +2788,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2793
2788
  function isZoneDependent(cmd) {
2794
2789
  return "sheetId" in cmd && "zone" in cmd;
2795
2790
  }
2796
- const invalidateEvaluationCommands = new Set([
2791
+ const invalidateEvaluationCommands = /* @__PURE__ */ new Set([
2797
2792
  "RENAME_SHEET",
2798
2793
  "DELETE_SHEET",
2799
2794
  "CREATE_SHEET",
@@ -2812,7 +2807,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2812
2807
  "REMOVE_PIVOT",
2813
2808
  "DUPLICATE_PIVOT"
2814
2809
  ]);
2815
- const invalidateChartEvaluationCommands = new Set([
2810
+ const invalidateChartEvaluationCommands = /* @__PURE__ */ new Set([
2816
2811
  "EVALUATE_CELLS",
2817
2812
  "UPDATE_CELL",
2818
2813
  "UNHIDE_COLUMNS_ROWS",
@@ -2830,20 +2825,20 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2830
2825
  "UNDO",
2831
2826
  "REDO"
2832
2827
  ]);
2833
- const invalidateDependenciesCommands = new Set(["MOVE_RANGES"]);
2834
- const invalidateCFEvaluationCommands = new Set([
2828
+ const invalidateDependenciesCommands = /* @__PURE__ */ new Set(["MOVE_RANGES"]);
2829
+ const invalidateCFEvaluationCommands = /* @__PURE__ */ new Set([
2835
2830
  "EVALUATE_CELLS",
2836
2831
  "ADD_CONDITIONAL_FORMAT",
2837
2832
  "REMOVE_CONDITIONAL_FORMAT",
2838
2833
  "CHANGE_CONDITIONAL_FORMAT_PRIORITY"
2839
2834
  ]);
2840
- const invalidateBordersCommands = new Set([
2835
+ const invalidateBordersCommands = /* @__PURE__ */ new Set([
2841
2836
  "AUTOFILL_CELL",
2842
2837
  "SET_BORDER",
2843
2838
  "SET_ZONE_BORDERS",
2844
2839
  "SET_BORDERS_ON_TARGET"
2845
2840
  ]);
2846
- const readonlyAllowedCommands = new Set([
2841
+ const readonlyAllowedCommands = /* @__PURE__ */ new Set([
2847
2842
  "START",
2848
2843
  "ACTIVATE_SHEET",
2849
2844
  "COPY",
@@ -2853,7 +2848,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2853
2848
  "SET_FORMULA_VISIBILITY",
2854
2849
  "UPDATE_FILTER"
2855
2850
  ]);
2856
- const coreTypes = new Set([
2851
+ const coreTypes = /* @__PURE__ */ new Set([
2857
2852
  "UPDATE_CELL",
2858
2853
  "UPDATE_CELL_POSITION",
2859
2854
  "CLEAR_CELL",
@@ -4946,7 +4941,6 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4946
4941
  //#region src/helpers/edge_scrolling.ts
4947
4942
  const MAX_DELAY = 140;
4948
4943
  const MIN_DELAY = 20;
4949
- const ACCELERATION = .035;
4950
4944
  /**
4951
4945
  * Decreasing exponential function used to determine the "speed" of edge-scrolling
4952
4946
  * as the timeout delay.
@@ -4954,7 +4948,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4954
4948
  * Returns a timeout delay in milliseconds.
4955
4949
  */
4956
4950
  function scrollDelay(value) {
4957
- return 20 + (140 - 20) * Math.exp(-ACCELERATION * (value - 1));
4951
+ return 20 + (140 - 20) * Math.exp(-.035 * (value - 1));
4958
4952
  }
4959
4953
 
4960
4954
  //#endregion
@@ -5586,7 +5580,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5586
5580
  return String(this.fastIdStart);
5587
5581
  } else if (window.crypto) return "10000000-1000".replace(/[01]/g, (c) => {
5588
5582
  const n = Number(c);
5589
- return (n ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
5583
+ return (n ^ crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
5590
5584
  });
5591
5585
  else return "xxxxxxxx-xxxx".replace(/[xy]/g, function(c) {
5592
5586
  var r = Math.random() * 16 | 0;
@@ -5603,7 +5597,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5603
5597
  return String(this.fastIdStart);
5604
5598
  } else if (window.crypto) return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => {
5605
5599
  const n = Number(c);
5606
- return (n ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
5600
+ return (n ^ crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
5607
5601
  });
5608
5602
  else return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
5609
5603
  var r = Math.random() * 16 | 0;
@@ -7148,10 +7142,10 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
7148
7142
  type: dimension.type
7149
7143
  }));
7150
7144
  if (groupValueString.toLowerCase() === "false") return false;
7151
- return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension.granularity);
7145
+ return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension);
7152
7146
  }
7153
- function normalizeDateTime(value, granularity) {
7154
- return pivotTimeAdapter(granularity ?? "month").normalizeFunctionValue(value);
7147
+ function normalizeDateTime(value, dimension) {
7148
+ return pivotTimeAdapter(dimension.granularity ?? "month").normalizeFunctionValue(value);
7155
7149
  }
7156
7150
  function toFunctionPivotValue(value, dimension) {
7157
7151
  if (value === null) return `"null"`;
@@ -32695,7 +32689,7 @@ stores.inject(MyMetaStore, storeInstance);
32695
32689
  const ITEMS_PER_LINE = 10;
32696
32690
  const MAGNIFIER_EDGE = 16;
32697
32691
  const ITEM_GAP = 2;
32698
- const CONTENT_WIDTH = ITEMS_PER_LINE * (ITEM_EDGE_LENGTH + 2 * ITEM_BORDER_WIDTH) + (ITEMS_PER_LINE - 1) * ITEM_GAP;
32692
+ const CONTENT_WIDTH = 218;
32699
32693
  const INNER_GRADIENT_WIDTH = CONTENT_WIDTH - 2 * ITEM_BORDER_WIDTH;
32700
32694
  const INNER_GRADIENT_HEIGHT = CONTENT_WIDTH - 30 - 2 * ITEM_BORDER_WIDTH;
32701
32695
  css`
@@ -32707,7 +32701,7 @@ stores.inject(MyMetaStore, storeInstance);
32707
32701
  line-height: 1.2;
32708
32702
  overflow-y: auto;
32709
32703
  overflow-x: hidden;
32710
- width: ${CONTENT_WIDTH + 2 * PICKER_PADDING}px;
32704
+ width: ${234}px;
32711
32705
 
32712
32706
  .o-color-picker-section-name {
32713
32707
  margin: 0px ${ITEM_BORDER_WIDTH}px;
@@ -32779,14 +32773,14 @@ stores.inject(MyMetaStore, storeInstance);
32779
32773
  }
32780
32774
 
32781
32775
  .o-custom-selector {
32782
- padding: ${PICKER_PADDING + 2}px ${PICKER_PADDING}px;
32776
+ padding: ${10}px ${PICKER_PADDING}px;
32783
32777
  position: relative;
32784
32778
  .o-gradient {
32785
32779
  margin-bottom: ${MAGNIFIER_EDGE / 2}px;
32786
32780
  border: ${ITEM_BORDER_WIDTH}px solid #c0c0c0;
32787
32781
  box-sizing: border-box;
32788
- width: ${INNER_GRADIENT_WIDTH + 2 * ITEM_BORDER_WIDTH}px;
32789
- height: ${INNER_GRADIENT_HEIGHT + 2 * ITEM_BORDER_WIDTH}px;
32782
+ width: ${218}px;
32783
+ height: ${188}px;
32790
32784
  position: relative;
32791
32785
  }
32792
32786
 
@@ -32927,8 +32921,8 @@ stores.inject(MyMetaStore, storeInstance);
32927
32921
  const left = Math.round(INNER_GRADIENT_WIDTH * clip(s / 100, 0, 1));
32928
32922
  const top = Math.round(INNER_GRADIENT_HEIGHT * clip(1 - 2 * l / (200 - s), 0, 1));
32929
32923
  return cssPropertiesToCss({
32930
- left: `${-MAGNIFIER_EDGE / 2 + left}px`,
32931
- top: `${-MAGNIFIER_EDGE / 2 + top}px`,
32924
+ left: `${-16 / 2 + left}px`,
32925
+ top: `${-16 / 2 + top}px`,
32932
32926
  background: hslaToHex(this.state.currentHslaColor)
32933
32927
  });
32934
32928
  }
@@ -38660,8 +38654,8 @@ stores.inject(MyMetaStore, storeInstance);
38660
38654
  rows;
38661
38655
  constructor(definition, fields) {
38662
38656
  this.measures = definition.measures.map((measure) => createMeasure(fields, measure));
38663
- this.columns = definition.columns.map((dimension) => createPivotDimension(fields, dimension));
38664
- this.rows = definition.rows.map((dimension) => createPivotDimension(fields, dimension));
38657
+ this.columns = definition.columns.map((dimension) => this.createPivotDimension(fields, dimension));
38658
+ this.rows = definition.rows.map((dimension) => this.createPivotDimension(fields, dimension));
38665
38659
  }
38666
38660
  getDimension(nameWithGranularity) {
38667
38661
  const dimension = this.columns.find((d) => d.nameWithGranularity === nameWithGranularity) || this.rows.find((d) => d.nameWithGranularity === nameWithGranularity);
@@ -38673,6 +38667,40 @@ stores.inject(MyMetaStore, storeInstance);
38673
38667
  if (!measure) throw new EvaluationError(_t("Field %s is not a measure", id));
38674
38668
  return measure;
38675
38669
  }
38670
+ createPivotDimension(fields, dimension) {
38671
+ const field = fields[dimension.fieldName];
38672
+ const type = field?.type ?? "integer";
38673
+ const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
38674
+ return {
38675
+ /**
38676
+ * Get the display name of the dimension
38677
+ * e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
38678
+ */
38679
+ displayName: field?.string ?? dimension.fieldName,
38680
+ /**
38681
+ * Get the name of the dimension, as it is stored in the pivot formula
38682
+ * e.g. "stage_id", "create_date:month"
38683
+ */
38684
+ nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
38685
+ /**
38686
+ * Get the name of the field of the dimension
38687
+ * e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
38688
+ */
38689
+ fieldName: dimension.fieldName,
38690
+ /**
38691
+ * Get the aggregate operator of the dimension
38692
+ * e.g. "stage_id" -> undefined, "create_date:month" -> "month"
38693
+ */
38694
+ granularity,
38695
+ /**
38696
+ * Get the type of the field of the dimension
38697
+ * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
38698
+ */
38699
+ type,
38700
+ order: dimension.order,
38701
+ isValid: !!field
38702
+ };
38703
+ }
38676
38704
  };
38677
38705
  function createMeasure(fields, measure) {
38678
38706
  const fieldName = measure.fieldName;
@@ -38716,40 +38744,6 @@ stores.inject(MyMetaStore, storeInstance);
38716
38744
  display: measure.display
38717
38745
  };
38718
38746
  }
38719
- function createPivotDimension(fields, dimension) {
38720
- const field = fields[dimension.fieldName];
38721
- const type = field?.type ?? "integer";
38722
- const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
38723
- return {
38724
- /**
38725
- * Get the display name of the dimension
38726
- * e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
38727
- */
38728
- displayName: field?.string ?? dimension.fieldName,
38729
- /**
38730
- * Get the name of the dimension, as it is stored in the pivot formula
38731
- * e.g. "stage_id", "create_date:month"
38732
- */
38733
- nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
38734
- /**
38735
- * Get the name of the field of the dimension
38736
- * e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
38737
- */
38738
- fieldName: dimension.fieldName,
38739
- /**
38740
- * Get the aggregate operator of the dimension
38741
- * e.g. "stage_id" -> undefined, "create_date:month" -> "month"
38742
- */
38743
- granularity,
38744
- /**
38745
- * Get the type of the field of the dimension
38746
- * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
38747
- */
38748
- type,
38749
- order: dimension.order,
38750
- isValid: !!field
38751
- };
38752
- }
38753
38747
 
38754
38748
  //#endregion
38755
38749
  //#region src/helpers/pivot/spreadsheet_pivot/runtime_definition_spreadsheet_pivot.ts
@@ -41399,11 +41393,11 @@ stores.inject(MyMetaStore, storeInstance);
41399
41393
  getResizerPosition(resizer) {
41400
41394
  const anchorCenteringOffset = (ANCHOR_SIZE - ACTIVE_BORDER_WIDTH) / 2;
41401
41395
  const style = {};
41402
- if (resizer.includes("top")) style.top = `${-anchorCenteringOffset}px`;
41403
- else if (resizer.includes("bottom")) style.bottom = `${-anchorCenteringOffset}px`;
41396
+ if (resizer.includes("top")) style.top = `-3px`;
41397
+ else if (resizer.includes("bottom")) style.bottom = `-3px`;
41404
41398
  else style.bottom = `calc(50% - ${anchorCenteringOffset}px)`;
41405
- if (resizer.includes("left")) style.left = `${-anchorCenteringOffset}px`;
41406
- else if (resizer.includes("right")) style.right = `${-anchorCenteringOffset}px`;
41399
+ if (resizer.includes("left")) style.left = `-3px`;
41400
+ else if (resizer.includes("right")) style.right = `-3px`;
41407
41401
  else style.right = `calc(50% - ${anchorCenteringOffset}px)`;
41408
41402
  return cssPropertiesToCss(style);
41409
41403
  }
@@ -52436,6 +52430,9 @@ stores.inject(MyMetaStore, storeInstance);
52436
52430
  case "CREATE_CHART":
52437
52431
  this.tryToAddColors(this.getChartColors(cmd.id));
52438
52432
  break;
52433
+ case "COLOR_SHEET":
52434
+ if (cmd.color) this.tryToAddColors([cmd.color]);
52435
+ break;
52439
52436
  case "UPDATE_CELL":
52440
52437
  case "ADD_CONDITIONAL_FORMAT":
52441
52438
  case "SET_BORDER":
@@ -52458,8 +52455,12 @@ stores.inject(MyMetaStore, storeInstance);
52458
52455
  }
52459
52456
  computeCustomColors() {
52460
52457
  let usedColors = [];
52461
- for (const sheetId of this.getters.getSheetIds()) usedColors = usedColors.concat(this.getColorsFromCells(sheetId), this.getFormattingColors(sheetId), this.getTableColors(sheetId));
52462
- return [...new Set([...usedColors])];
52458
+ for (const sheetId of this.getters.getSheetIds()) usedColors = usedColors.concat(this.getSheetColors(sheetId), this.getColorsFromCells(sheetId), this.getFormattingColors(sheetId), this.getTableColors(sheetId));
52459
+ return [.../* @__PURE__ */ new Set([...usedColors])];
52460
+ }
52461
+ getSheetColors(sheetId) {
52462
+ const sheet = this.getters.getSheet(sheetId);
52463
+ return sheet.color ? [sheet.color] : [];
52463
52464
  }
52464
52465
  getColorsFromCells(sheetId) {
52465
52466
  const cells = Object.values(this.getters.getCells(sheetId));
@@ -52790,10 +52791,10 @@ stores.inject(MyMetaStore, storeInstance);
52790
52791
  const minValue = this.parsePoint(sheetId, range, rule.minimum, "min");
52791
52792
  const midValue = rule.midpoint ? this.parsePoint(sheetId, range, rule.midpoint) : null;
52792
52793
  const maxValue = this.parsePoint(sheetId, range, rule.maximum, "max");
52793
- if (minValue === null || maxValue === null || minValue >= maxValue || midValue && (minValue >= midValue || midValue >= maxValue)) return;
52794
+ if (minValue === null || maxValue === null || minValue >= maxValue || midValue !== null && (minValue >= midValue || midValue >= maxValue)) return;
52794
52795
  const zone = this.getters.getRangeFromSheetXC(sheetId, range).zone;
52795
52796
  const colorCellArgs = [];
52796
- if (rule.midpoint && midValue) {
52797
+ if (rule.midpoint && midValue !== null) {
52797
52798
  colorCellArgs.push({
52798
52799
  minValue,
52799
52800
  minColor: rule.minimum.color,
@@ -52818,7 +52819,7 @@ stores.inject(MyMetaStore, storeInstance);
52818
52819
  if (cell.type === "number") {
52819
52820
  const value = clip(cell.value, minValue, maxValue);
52820
52821
  let color;
52821
- if (colorCellArgs.length === 2 && midValue) color = value <= midValue ? this.colorCell(value, colorCellArgs[0].minValue, colorCellArgs[0].minColor, colorCellArgs[0].colorDiffUnit) : this.colorCell(value, colorCellArgs[1].minValue, colorCellArgs[1].minColor, colorCellArgs[1].colorDiffUnit);
52822
+ if (colorCellArgs.length === 2 && midValue !== null) color = value <= midValue ? this.colorCell(value, colorCellArgs[0].minValue, colorCellArgs[0].minColor, colorCellArgs[0].colorDiffUnit) : this.colorCell(value, colorCellArgs[1].minValue, colorCellArgs[1].minColor, colorCellArgs[1].colorDiffUnit);
52822
52823
  else color = this.colorCell(value, colorCellArgs[0].minValue, colorCellArgs[0].minColor, colorCellArgs[0].colorDiffUnit);
52823
52824
  if (!computedStyle[col]) computedStyle[col] = [];
52824
52825
  computedStyle[col][row] = computedStyle[col]?.[row] || {};
@@ -56629,7 +56630,7 @@ stores.inject(MyMetaStore, storeInstance);
56629
56630
  };
56630
56631
  }
56631
56632
  };
56632
- const invalidateTableStyleCommandsSet = new Set([
56633
+ const invalidateTableStyleCommandsSet = /* @__PURE__ */ new Set([
56633
56634
  "HIDE_COLUMNS_ROWS",
56634
56635
  "UNHIDE_COLUMNS_ROWS",
56635
56636
  "UNFOLD_HEADER_GROUP",
@@ -60019,11 +60020,14 @@ stores.inject(MyMetaStore, storeInstance);
60019
60020
  }
60020
60021
  });
60021
60022
  this.DOMFocusableElementStore = useStore(DOMFocusableElementStore);
60022
- (0, _odoo_owl.useExternalListener)(window, "click", () => this.state.pickerOpened = false);
60023
+ (0, _odoo_owl.useExternalListener)(window, "click", this.onExternalClick.bind(this), { capture: true });
60023
60024
  (0, _odoo_owl.useEffect)((sheetId) => {
60024
60025
  if (this.props.sheetId === sheetId) this.scrollToSheet();
60025
60026
  }, () => [this.env.model.getters.getActiveSheetId()]);
60026
60027
  }
60028
+ onExternalClick(ev) {
60029
+ if (!ev.target.closest(".o-color-picker")) this.state.pickerOpened = false;
60030
+ }
60027
60031
  focusInputAndSelectContent() {
60028
60032
  if (!this.state.isEditing || !this.sheetNameRef.el) return;
60029
60033
  this.sheetNameRef.el.focus();
@@ -60120,6 +60124,8 @@ stores.inject(MyMetaStore, storeInstance);
60120
60124
  },
60121
60125
  openSheetColorPickerCallback: () => {
60122
60126
  this.state.pickerOpened = true;
60127
+ const sheet = this.env.model.getters.getSheet(this.props.sheetId);
60128
+ this.state.currentPickerColor = sheet.color;
60123
60129
  }
60124
60130
  });
60125
60131
  }
@@ -64054,11 +64060,11 @@ stores.inject(MyMetaStore, storeInstance);
64054
64060
  <!-- each data marker in the series does not have a different color -->
64055
64061
  <c:varyColors val="0"/>
64056
64062
  ${joinXmlNodes(rightDataSetsNodes)}
64057
- <c:axId val="${catAxId + 1}" />
64058
- <c:axId val="${valAxId + 1}" />
64063
+ <c:axId val="${17781238}" />
64064
+ <c:axId val="${88853994}" />
64059
64065
  </c:barChart>
64060
- ${addAx("b", "c:catAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
64061
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
64066
+ ${addAx("b", "c:catAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
64067
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
64062
64068
  ` : ""}`;
64063
64069
  }
64064
64070
  function addComboChart(chart) {
@@ -64213,11 +64219,11 @@ stores.inject(MyMetaStore, storeInstance);
64213
64219
  <!-- each data marker in the series does not have a different color -->
64214
64220
  <c:varyColors val="0"/>
64215
64221
  ${joinXmlNodes(rightDataSetsNodes)}
64216
- <c:axId val="${catAxId + 1}" />
64217
- <c:axId val="${valAxId + 1}" />
64222
+ <c:axId val="${17781238}" />
64223
+ <c:axId val="${88853994}" />
64218
64224
  </c:lineChart>
64219
- ${addAx("b", "c:catAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
64220
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
64225
+ ${addAx("b", "c:catAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
64226
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
64221
64227
  ` : ""}
64222
64228
  `;
64223
64229
  }
@@ -64279,11 +64285,11 @@ stores.inject(MyMetaStore, storeInstance);
64279
64285
  <c:varyColors val="0"/>
64280
64286
  <c:scatterStyle val="lineMarker"/>
64281
64287
  ${joinXmlNodes(rightDataSetsNodes)}
64282
- <c:axId val="${catAxId + 1}" />
64283
- <c:axId val="${valAxId + 1}" />
64288
+ <c:axId val="${17781238}" />
64289
+ <c:axId val="${88853994}" />
64284
64290
  </c:scatterChart>
64285
- ${addAx("b", "c:valAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
64286
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
64291
+ ${addAx("b", "c:valAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
64292
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
64287
64293
  ` : ""}`;
64288
64294
  }
64289
64295
  function addDoughnutChart(chart, chartSheetIndex, data, { holeSize } = { holeSize: 50 }) {
@@ -66386,8 +66392,8 @@ exports.stores = stores;
66386
66392
  exports.tokenColors = tokenColors;
66387
66393
  exports.tokenize = tokenize;
66388
66394
 
66389
- __info__.version = "18.0.71";
66390
- __info__.date = "2026-06-17T08:50:04.188Z";
66391
- __info__.hash = "18d4601";
66395
+ __info__.version = "18.0.74";
66396
+ __info__.date = "2026-07-13T06:25:20.333Z";
66397
+ __info__.hash = "9183e36";
66392
66398
 
66393
66399
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);