@odoo/o-spreadsheet 19.1.23 → 19.1.26

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.1.23
6
- * @date 2026-06-17T08:50:59.790Z
7
- * @hash 53aa85b
5
+ * @version 19.1.26
6
+ * @date 2026-07-01T05:03:31.665Z
7
+ * @hash 44237c0
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -224,7 +224,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
224
224
  const GRAY_300 = "#D8DADD";
225
225
  const GRAY_200 = "#E7E9ED";
226
226
  const TEXT_BODY = "#374151";
227
- const TEXT_BODY_MUTED = TEXT_BODY + "C2";
227
+ const TEXT_BODY_MUTED = "#374151C2";
228
228
  const ACTION_COLOR = HIGHLIGHT_COLOR;
229
229
  const CHART_TITLE_FONT_SIZE = 16;
230
230
  const DEFAULT_CHART_COLOR_SCALE = {
@@ -317,9 +317,6 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
317
317
  ];
318
318
  const DEFAULT_CELL_HEIGHT = 23;
319
319
  const FOOTER_HEIGHT = 2 * 23;
320
- const MENU_SEPARATOR_BORDER_WIDTH = 1;
321
- const MENU_SEPARATOR_PADDING = 5;
322
- const MENU_SEPARATOR_HEIGHT = 1 + 2 * 5;
323
320
  const ZOOM_VALUES = [
324
321
  50,
325
322
  75,
@@ -345,7 +342,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
345
342
  const DEFAULT_VERTICAL_ALIGN = DEFAULT_STYLE.verticalAlign;
346
343
  const DEFAULT_WRAPPING_MODE = DEFAULT_STYLE.wrapping;
347
344
  const DEFAULT_FONT_SIZE = DEFAULT_STYLE.fontSize;
348
- const DEFAULT_FONT = "'Roboto', arial";
345
+ const DEFAULT_FONT = "'Roboto', arial, 'Liberation Sans'";
349
346
  const DEFAULT_BORDER_DESC = {
350
347
  style: "thin",
351
348
  color: "#000000"
@@ -1164,7 +1161,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1164
1161
  function recomputeZones(zones, zonesToRemove = []) {
1165
1162
  if (zones.length <= 1 && zonesToRemove.length === 0) return zones;
1166
1163
  const profilesStartingPosition = [0];
1167
- const profiles = new Map([[0, []]]);
1164
+ const profiles = /* @__PURE__ */ new Map([[0, []]]);
1168
1165
  modifyProfiles(profilesStartingPosition, profiles, zones, false);
1169
1166
  modifyProfiles(profilesStartingPosition, profiles, zonesToRemove, true);
1170
1167
  return constructZonesFromProfiles(profilesStartingPosition, profiles);
@@ -3472,12 +3469,10 @@ stores.inject(MyMetaStore, storeInstance);
3472
3469
  const pIntegerAndDecimals = `(?:\\d+(?:${escapeRegExp(locale.thousandsSeparator || "")}\\d{3,})*(?:${decimalSeparator}\\d*)?)`;
3473
3470
  const pOnlyDecimals = `(?:${decimalSeparator}\\d+)`;
3474
3471
  const pNumber = "(?:\\s*" + pIntegerAndDecimals + "|" + pOnlyDecimals + ")(?:(e|E)(?:\\+|-)?(?:[0-9]|[0-9][0-9]|[12][0-9]{2}|30[0-7]))?(?:\\s*%)?";
3475
- const pMinus = "(?:\\s*-)?";
3476
- const pCurrencyFormat = "(?:\\s*[\\$€])?";
3477
3472
  const pNumberExp = "^(?:(?:" + [
3478
- pMinus + pCurrencyFormat + pNumber,
3479
- pMinus + pNumber + pCurrencyFormat,
3480
- pCurrencyFormat + pMinus + pNumber
3473
+ "(?:\\s*-)?(?:\\s*[\\$€])?" + pNumber,
3474
+ "(?:\\s*-)?" + pNumber + "(?:\\s*[\\$€])?",
3475
+ "(?:\\s*[\\$€])?(?:\\s*-)?" + pNumber
3481
3476
  ].join(")|(?:") + "))$";
3482
3477
  return new RegExp(pNumberExp, "i");
3483
3478
  });
@@ -5376,7 +5371,7 @@ stores.inject(MyMetaStore, storeInstance);
5376
5371
  function isZoneDependent(cmd) {
5377
5372
  return "sheetId" in cmd && "zone" in cmd;
5378
5373
  }
5379
- const invalidateEvaluationCommands = new Set([
5374
+ const invalidateEvaluationCommands = /* @__PURE__ */ new Set([
5380
5375
  "RENAME_SHEET",
5381
5376
  "DELETE_SHEET",
5382
5377
  "CREATE_SHEET",
@@ -5395,7 +5390,7 @@ stores.inject(MyMetaStore, storeInstance);
5395
5390
  "REMOVE_PIVOT",
5396
5391
  "DUPLICATE_PIVOT"
5397
5392
  ]);
5398
- const invalidateChartEvaluationCommands = new Set([
5393
+ const invalidateChartEvaluationCommands = /* @__PURE__ */ new Set([
5399
5394
  "EVALUATE_CELLS",
5400
5395
  "EVALUATE_CHARTS",
5401
5396
  "UPDATE_CELL",
@@ -5416,20 +5411,20 @@ stores.inject(MyMetaStore, storeInstance);
5416
5411
  "UNDO",
5417
5412
  "REDO"
5418
5413
  ]);
5419
- const invalidateDependenciesCommands = new Set(["MOVE_RANGES"]);
5420
- const invalidateCFEvaluationCommands = new Set([
5414
+ const invalidateDependenciesCommands = /* @__PURE__ */ new Set(["MOVE_RANGES"]);
5415
+ const invalidateCFEvaluationCommands = /* @__PURE__ */ new Set([
5421
5416
  "EVALUATE_CELLS",
5422
5417
  "ADD_CONDITIONAL_FORMAT",
5423
5418
  "REMOVE_CONDITIONAL_FORMAT",
5424
5419
  "CHANGE_CONDITIONAL_FORMAT_PRIORITY"
5425
5420
  ]);
5426
- const invalidateBordersCommands = new Set([
5421
+ const invalidateBordersCommands = /* @__PURE__ */ new Set([
5427
5422
  "AUTOFILL_CELL",
5428
5423
  "SET_BORDER",
5429
5424
  "SET_ZONE_BORDERS",
5430
5425
  "SET_BORDERS_ON_TARGET"
5431
5426
  ]);
5432
- const invalidSubtotalFormulasCommands = new Set([
5427
+ const invalidSubtotalFormulasCommands = /* @__PURE__ */ new Set([
5433
5428
  "UNHIDE_COLUMNS_ROWS",
5434
5429
  "HIDE_COLUMNS_ROWS",
5435
5430
  "GROUP_HEADERS",
@@ -5443,7 +5438,7 @@ stores.inject(MyMetaStore, storeInstance);
5443
5438
  "UPDATE_TABLE",
5444
5439
  "UPDATE_FILTER"
5445
5440
  ]);
5446
- const readonlyAllowedCommands = new Set([
5441
+ const readonlyAllowedCommands = /* @__PURE__ */ new Set([
5447
5442
  "START",
5448
5443
  "ACTIVATE_SHEET",
5449
5444
  "COPY",
@@ -5458,7 +5453,7 @@ stores.inject(MyMetaStore, storeInstance);
5458
5453
  "UPDATE_CAROUSEL_ACTIVE_ITEM",
5459
5454
  "UPDATE_PIVOT"
5460
5455
  ]);
5461
- const coreTypes = new Set([
5456
+ const coreTypes = /* @__PURE__ */ new Set([
5462
5457
  "UPDATE_CELL",
5463
5458
  "UPDATE_CELL_POSITION",
5464
5459
  "CLEAR_CELL",
@@ -6003,7 +5998,6 @@ stores.inject(MyMetaStore, storeInstance);
6003
5998
  //#region src/helpers/edge_scrolling.ts
6004
5999
  const MAX_DELAY = 140;
6005
6000
  const MIN_DELAY = 20;
6006
- const ACCELERATION = .035;
6007
6001
  /**
6008
6002
  * Decreasing exponential function used to determine the "speed" of edge-scrolling
6009
6003
  * as the timeout delay.
@@ -6011,7 +6005,7 @@ stores.inject(MyMetaStore, storeInstance);
6011
6005
  * Returns a timeout delay in milliseconds.
6012
6006
  */
6013
6007
  function scrollDelay(value) {
6014
- return 20 + (140 - 20) * Math.exp(-ACCELERATION * (value - 1));
6008
+ return 20 + (140 - 20) * Math.exp(-.035 * (value - 1));
6015
6009
  }
6016
6010
 
6017
6011
  //#endregion
@@ -7005,7 +6999,7 @@ stores.inject(MyMetaStore, storeInstance);
7005
6999
  const cryptoObj = this.getCrypto();
7006
7000
  if (cryptoObj) return "10000000-1000".replace(/[01]/g, (c) => {
7007
7001
  const n = Number(c);
7008
- return (n ^ cryptoObj.getRandomValues(new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
7002
+ return (n ^ cryptoObj.getRandomValues(/* @__PURE__ */ new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
7009
7003
  });
7010
7004
  else return "xxxxxxxx-xxxx".replace(/[xy]/g, function(c) {
7011
7005
  const r = Math.random() * 16 | 0;
@@ -7020,7 +7014,7 @@ stores.inject(MyMetaStore, storeInstance);
7020
7014
  const cryptoObj = this.getCrypto();
7021
7015
  if (cryptoObj) return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => {
7022
7016
  const n = Number(c);
7023
- return (n ^ cryptoObj.getRandomValues(new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
7017
+ return (n ^ cryptoObj.getRandomValues(/* @__PURE__ */ new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
7024
7018
  });
7025
7019
  else return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
7026
7020
  const r = Math.random() * 16 | 0;
@@ -11614,7 +11608,7 @@ stores.inject(MyMetaStore, storeInstance);
11614
11608
 
11615
11609
  //#endregion
11616
11610
  //#region src/types/data_validation.ts
11617
- const availableDataValidationOperators = new Set([
11611
+ const availableDataValidationOperators = /* @__PURE__ */ new Set([
11618
11612
  "containsText",
11619
11613
  "notContainsText",
11620
11614
  "isEqualText",
@@ -12188,10 +12182,10 @@ stores.inject(MyMetaStore, storeInstance);
12188
12182
  type: dimension.type
12189
12183
  }));
12190
12184
  if (groupValueString.toLowerCase() === "false") return false;
12191
- return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension.granularity);
12185
+ return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension);
12192
12186
  }
12193
- function normalizeDateTime(value, granularity) {
12194
- return pivotTimeAdapter(granularity ?? "month").normalizeFunctionValue(value);
12187
+ function normalizeDateTime(value, dimension) {
12188
+ return pivotTimeAdapter(dimension.granularity ?? "month").normalizeFunctionValue(value);
12195
12189
  }
12196
12190
  function toFunctionPivotValue(value, dimension) {
12197
12191
  if (value === null) return `"null"`;
@@ -15217,6 +15211,59 @@ stores.inject(MyMetaStore, storeInstance);
15217
15211
  return (chartSubtypeRegistry.getAll().find((c) => c.matcher?.(definition)) || chartSubtypeRegistry.get(definition.type)).displayName;
15218
15212
  }
15219
15213
 
15214
+ //#endregion
15215
+ //#region src/components/helpers/css.ts
15216
+ function getTextDecoration({ strikethrough, underline }) {
15217
+ if (!strikethrough && !underline) return "none";
15218
+ return `${strikethrough ? "line-through" : ""} ${underline ? "underline" : ""}`;
15219
+ }
15220
+ /**
15221
+ * Convert the cell style to CSS properties.
15222
+ */
15223
+ function cellStyleToCss(style) {
15224
+ const attributes = cellTextStyleToCss(style);
15225
+ if (!style) return attributes;
15226
+ if (style.fillColor) attributes["background"] = style.fillColor;
15227
+ return attributes;
15228
+ }
15229
+ /**
15230
+ * Convert the cell text style to CSS properties.
15231
+ */
15232
+ function cellTextStyleToCss(style) {
15233
+ const attributes = {};
15234
+ if (!style) return attributes;
15235
+ if (style.bold) attributes["font-weight"] = "bold";
15236
+ if (style.italic) attributes["font-style"] = "italic";
15237
+ if (style.fontSize) attributes["font-size"] = `${style.fontSize}px`;
15238
+ if (style.strikethrough || style.underline) {
15239
+ let decoration = style.strikethrough ? "line-through" : "";
15240
+ decoration = style.underline ? decoration + " underline" : decoration;
15241
+ attributes["text-decoration"] = decoration;
15242
+ }
15243
+ if (style.textColor) attributes["color"] = style.textColor;
15244
+ return attributes;
15245
+ }
15246
+ /**
15247
+ * Transform CSS properties into a CSS string.
15248
+ */
15249
+ function cssPropertiesToCss(attributes) {
15250
+ let styleStr = "";
15251
+ for (const attName in attributes) {
15252
+ if (!attributes[attName]) continue;
15253
+ styleStr += `${attName}:${attributes[attName]}; `;
15254
+ }
15255
+ return styleStr;
15256
+ }
15257
+ function getElementMargins(el) {
15258
+ const style = window.getComputedStyle(el);
15259
+ return {
15260
+ top: parseInt(style.marginTop, 10) || 0,
15261
+ bottom: parseInt(style.marginBottom, 10) || 0,
15262
+ left: parseInt(style.marginLeft, 10) || 0,
15263
+ right: parseInt(style.marginRight, 10) || 0
15264
+ };
15265
+ }
15266
+
15220
15267
  //#endregion
15221
15268
  //#region src/components/figures/chart/chartJs/zoomable_chart/zoomable_chart_store.ts
15222
15269
  const TREND_LINE_AXES_IDS = ["x1", MOVING_AVERAGE_TREND_LINE_XAXIS_ID];
@@ -15316,9 +15363,7 @@ stores.inject(MyMetaStore, storeInstance);
15316
15363
  this.removeEventListeners();
15317
15364
  }
15318
15365
  get containerStyle() {
15319
- return `
15320
- height:${this.sliceable ? `calc(100% - ${60}px)` : "100%"};
15321
- `;
15366
+ return cssPropertiesToCss({ height: this.sliceable ? `calc(100% - ${60}px)` : "100%" });
15322
15367
  }
15323
15368
  get masterChartContainerStyle() {
15324
15369
  const runtime = this.env.model.getters.getChartRuntime(this.props.chartId);
@@ -16174,59 +16219,6 @@ stores.inject(MyMetaStore, storeInstance);
16174
16219
  }
16175
16220
  };
16176
16221
 
16177
- //#endregion
16178
- //#region src/components/helpers/css.ts
16179
- function getTextDecoration({ strikethrough, underline }) {
16180
- if (!strikethrough && !underline) return "none";
16181
- return `${strikethrough ? "line-through" : ""} ${underline ? "underline" : ""}`;
16182
- }
16183
- /**
16184
- * Convert the cell style to CSS properties.
16185
- */
16186
- function cellStyleToCss(style) {
16187
- const attributes = cellTextStyleToCss(style);
16188
- if (!style) return attributes;
16189
- if (style.fillColor) attributes["background"] = style.fillColor;
16190
- return attributes;
16191
- }
16192
- /**
16193
- * Convert the cell text style to CSS properties.
16194
- */
16195
- function cellTextStyleToCss(style) {
16196
- const attributes = {};
16197
- if (!style) return attributes;
16198
- if (style.bold) attributes["font-weight"] = "bold";
16199
- if (style.italic) attributes["font-style"] = "italic";
16200
- if (style.fontSize) attributes["font-size"] = `${style.fontSize}px`;
16201
- if (style.strikethrough || style.underline) {
16202
- let decoration = style.strikethrough ? "line-through" : "";
16203
- decoration = style.underline ? decoration + " underline" : decoration;
16204
- attributes["text-decoration"] = decoration;
16205
- }
16206
- if (style.textColor) attributes["color"] = style.textColor;
16207
- return attributes;
16208
- }
16209
- /**
16210
- * Transform CSS properties into a CSS string.
16211
- */
16212
- function cssPropertiesToCss(attributes) {
16213
- let styleStr = "";
16214
- for (const attName in attributes) {
16215
- if (!attributes[attName]) continue;
16216
- styleStr += `${attName}:${attributes[attName]}; `;
16217
- }
16218
- return styleStr;
16219
- }
16220
- function getElementMargins(el) {
16221
- const style = window.getComputedStyle(el);
16222
- return {
16223
- top: parseInt(style.marginTop, 10) || 0,
16224
- bottom: parseInt(style.marginBottom, 10) || 0,
16225
- left: parseInt(style.marginLeft, 10) || 0,
16226
- right: parseInt(style.marginRight, 10) || 0
16227
- };
16228
- }
16229
-
16230
16222
  //#endregion
16231
16223
  //#region src/components/helpers/time_hooks.ts
16232
16224
  /**
@@ -17221,11 +17213,11 @@ stores.inject(MyMetaStore, storeInstance);
17221
17213
  getResizerPosition(resizer) {
17222
17214
  const anchorCenteringOffset = (ANCHOR_SIZE - ACTIVE_BORDER_WIDTH) / 2;
17223
17215
  const style = {};
17224
- if (resizer.includes("top")) style.top = `${-anchorCenteringOffset}px`;
17225
- else if (resizer.includes("bottom")) style.bottom = `${-anchorCenteringOffset}px`;
17216
+ if (resizer.includes("top")) style.top = `-3px`;
17217
+ else if (resizer.includes("bottom")) style.bottom = `-3px`;
17226
17218
  else style.bottom = `calc(50% - ${anchorCenteringOffset}px)`;
17227
- if (resizer.includes("left")) style.left = `${-anchorCenteringOffset}px`;
17228
- else if (resizer.includes("right")) style.right = `${-anchorCenteringOffset}px`;
17219
+ if (resizer.includes("left")) style.left = `-3px`;
17220
+ else if (resizer.includes("right")) style.right = `-3px`;
17229
17221
  else style.right = `calc(50% - ${anchorCenteringOffset}px)`;
17230
17222
  return cssPropertiesToCss(style);
17231
17223
  }
@@ -27602,6 +27594,7 @@ stores.inject(MyMetaStore, storeInstance);
27602
27594
  function mapParentFunction(tokens) {
27603
27595
  const stack = [];
27604
27596
  let functionStarted = "";
27597
+ let braceDepth = 0;
27605
27598
  function pushTokenToFunctionContext(token) {
27606
27599
  if (stack.length === 0) return;
27607
27600
  const functionContext = stack.at(-1);
@@ -27614,7 +27607,7 @@ stores.inject(MyMetaStore, storeInstance);
27614
27607
  });
27615
27608
  }
27616
27609
  }
27617
- return tokens.map((token, i) => {
27610
+ return tokens.map((token) => {
27618
27611
  if (!["SPACE", "LEFT_PAREN"].includes(token.type)) functionStarted = "";
27619
27612
  switch (token.type) {
27620
27613
  case "SYMBOL":
@@ -27635,8 +27628,16 @@ stores.inject(MyMetaStore, storeInstance);
27635
27628
  stack.pop()?.argsTokens?.flat().forEach(pushTokenToFunctionContext);
27636
27629
  pushTokenToFunctionContext(token);
27637
27630
  break;
27631
+ case "LEFT_BRACE":
27632
+ braceDepth++;
27633
+ pushTokenToFunctionContext(token);
27634
+ break;
27635
+ case "RIGHT_BRACE":
27636
+ braceDepth--;
27637
+ pushTokenToFunctionContext(token);
27638
+ break;
27638
27639
  case "ARG_SEPARATOR":
27639
- if (stack.length) stack[stack.length - 1].argPosition++;
27640
+ if (stack.length && braceDepth === 0) stack[stack.length - 1].argPosition++;
27640
27641
  pushTokenToFunctionContext(token);
27641
27642
  break;
27642
27643
  default:
@@ -28850,10 +28851,7 @@ stores.inject(MyMetaStore, storeInstance);
28850
28851
  //#endregion
28851
28852
  //#region src/components/color_picker/color_picker.ts
28852
28853
  const ITEM_BORDER_WIDTH = 1;
28853
- const ITEM_EDGE_LENGTH = 18;
28854
- const ITEMS_PER_LINE = 10;
28855
- const MAGNIFIER_EDGE = 16;
28856
- const CONTENT_WIDTH = ITEMS_PER_LINE * (ITEM_EDGE_LENGTH + 2 * ITEM_BORDER_WIDTH) + (ITEMS_PER_LINE - 1) * 2;
28854
+ const CONTENT_WIDTH = 218;
28857
28855
  const INNER_GRADIENT_WIDTH = CONTENT_WIDTH - 2 * ITEM_BORDER_WIDTH;
28858
28856
  const INNER_GRADIENT_HEIGHT = CONTENT_WIDTH - 30 - 2 * ITEM_BORDER_WIDTH;
28859
28857
  var ColorPicker = class extends _odoo_owl.Component {
@@ -28917,8 +28915,8 @@ stores.inject(MyMetaStore, storeInstance);
28917
28915
  const left = Math.round(INNER_GRADIENT_WIDTH * clip(s / 100, 0, 1));
28918
28916
  const top = Math.round(INNER_GRADIENT_HEIGHT * clip(1 - 2 * l / (200 - s), 0, 1));
28919
28917
  return cssPropertiesToCss({
28920
- left: `${-MAGNIFIER_EDGE / 2 + left}px`,
28921
- top: `${-MAGNIFIER_EDGE / 2 + top}px`,
28918
+ left: `${-16 / 2 + left}px`,
28919
+ top: `${-16 / 2 + top}px`,
28922
28920
  background: hslaToHex(this.state.currentHslaColor)
28923
28921
  });
28924
28922
  }
@@ -52620,7 +52618,7 @@ stores.inject(MyMetaStore, storeInstance);
52620
52618
  ev.preventDefault();
52621
52619
  const clipboardData = ev.clipboardData;
52622
52620
  if (!clipboardData) return;
52623
- const image = [...clipboardData.files]?.find((file) => AllowedImageMimeTypes.includes(file.type));
52621
+ const image = [...clipboardData.files].find((file) => AllowedImageMimeTypes.includes(file.type));
52624
52622
  const osClipboard = { content: {
52625
52623
  ["text/plain"]: clipboardData?.getData("text/plain"),
52626
52624
  ["text/html"]: clipboardData?.getData("text/html")
@@ -58452,7 +58450,7 @@ stores.inject(MyMetaStore, storeInstance);
58452
58450
  //#region src/plugins/ui_core_views/cell_evaluation/zone_set.ts
58453
58451
  var ZoneSet = class ZoneSet {
58454
58452
  profilesStartingPosition = [0];
58455
- profiles = new Map([[0, []]]);
58453
+ profiles = /* @__PURE__ */ new Map([[0, []]]);
58456
58454
  constructor(zones = []) {
58457
58455
  for (const zone of zones) this.add(zone);
58458
58456
  }
@@ -59830,12 +59828,22 @@ stores.inject(MyMetaStore, storeInstance);
59830
59828
  handle(cmd) {
59831
59829
  switch (cmd.type) {
59832
59830
  case "START":
59833
- for (const sheetId of this.getters.getSheetIds()) for (const chartId of this.getters.getChartIds(sheetId)) this.tryToAddColors(this.getChartColors(chartId));
59831
+ for (const sheetId of this.getters.getSheetIds()) {
59832
+ for (const chartId of this.getters.getChartIds(sheetId)) this.tryToAddColors(this.getChartColors(chartId));
59833
+ for (const figureId of this.getters.getFigures(sheetId)) this.tryToAddColors(this.getCarouselColors(sheetId, figureId.id));
59834
+ }
59834
59835
  break;
59835
59836
  case "UPDATE_CHART":
59836
59837
  case "CREATE_CHART":
59837
59838
  this.tryToAddColors(this.getChartColors(cmd.chartId));
59838
59839
  break;
59840
+ case "CREATE_CAROUSEL":
59841
+ case "UPDATE_CAROUSEL":
59842
+ this.tryToAddColors(this.getCarouselColors(cmd.sheetId, cmd.figureId));
59843
+ break;
59844
+ case "COLOR_SHEET":
59845
+ if (cmd.color) this.tryToAddColors([cmd.color]);
59846
+ break;
59839
59847
  case "UPDATE_CELL":
59840
59848
  case "ADD_CONDITIONAL_FORMAT":
59841
59849
  case "SET_BORDER":
@@ -59858,8 +59866,12 @@ stores.inject(MyMetaStore, storeInstance);
59858
59866
  }
59859
59867
  computeCustomColors() {
59860
59868
  let usedColors = [];
59861
- for (const sheetId of this.getters.getSheetIds()) usedColors = usedColors.concat(this.getColorsFromCells(sheetId), this.getFormattingColors(sheetId), this.getTableColors(sheetId));
59862
- return [...new Set([...usedColors])];
59869
+ for (const sheetId of this.getters.getSheetIds()) usedColors = usedColors.concat(this.getSheetColors(sheetId), this.getColorsFromCells(sheetId), this.getFormattingColors(sheetId), this.getTableColors(sheetId));
59870
+ return [.../* @__PURE__ */ new Set([...usedColors])];
59871
+ }
59872
+ getSheetColors(sheetId) {
59873
+ const sheet = this.getters.getSheet(sheetId);
59874
+ return sheet.color ? [sheet.color] : [];
59863
59875
  }
59864
59876
  getColorsFromCells(sheetId) {
59865
59877
  const colors = /* @__PURE__ */ new Set();
@@ -59888,6 +59900,11 @@ stores.inject(MyMetaStore, storeInstance);
59888
59900
  if (chart === void 0) return [];
59889
59901
  return [...JSON.stringify(chart.getDefinition()).matchAll(chartColorRegex)].map((color) => color[1]);
59890
59902
  }
59903
+ getCarouselColors(sheetId, figureId) {
59904
+ if (this.getters.getFigure(sheetId, figureId)?.tag !== "carousel") return [];
59905
+ const titleColor = this.getters.getCarousel(figureId).title?.color;
59906
+ return titleColor ? [titleColor] : [];
59907
+ }
59891
59908
  getTableColors(sheetId) {
59892
59909
  return this.getters.getTables(sheetId).flatMap((table) => {
59893
59910
  const config = table.config;
@@ -63104,7 +63121,7 @@ stores.inject(MyMetaStore, storeInstance);
63104
63121
  };
63105
63122
  }
63106
63123
  };
63107
- const invalidateTableStyleCommandsSet = new Set([
63124
+ const invalidateTableStyleCommandsSet = /* @__PURE__ */ new Set([
63108
63125
  "HIDE_COLUMNS_ROWS",
63109
63126
  "UNHIDE_COLUMNS_ROWS",
63110
63127
  "UNFOLD_HEADER_GROUP",
@@ -67373,14 +67390,14 @@ stores.inject(MyMetaStore, storeInstance);
67373
67390
  adjustPositionX(targetCol) {
67374
67391
  const sheetId = this.sheetId;
67375
67392
  const { start, end } = this.getters.getColDimensions(sheetId, targetCol);
67376
- if (this.offsetX + this.viewportWidth + this.offsetCorrectionX < end) this.offsetX = end - this.viewportWidth;
67393
+ if (this.offsetX + this.viewportWidth + this.offsetCorrectionX < end) this.offsetX = end - this.viewportWidth - this.offsetCorrectionX;
67377
67394
  else if (this.offsetX + this.offsetCorrectionX > start) this.offsetX = start - this.offsetCorrectionX;
67378
67395
  this.adjustViewportZoneX();
67379
67396
  }
67380
67397
  adjustPositionY(targetRow) {
67381
67398
  const sheetId = this.sheetId;
67382
67399
  const { start, end } = this.getters.getRowDimensions(sheetId, targetRow);
67383
- if (this.offsetY + this.viewportHeight + this.offsetCorrectionY < end) this.offsetY = end - this.viewportHeight;
67400
+ if (this.offsetY + this.viewportHeight + this.offsetCorrectionY < end) this.offsetY = end - this.viewportHeight - this.offsetCorrectionY;
67384
67401
  else if (this.offsetY + this.offsetCorrectionY > start) this.offsetY = start - this.offsetCorrectionY;
67385
67402
  this.adjustViewportZoneY();
67386
67403
  }
@@ -69962,11 +69979,14 @@ stores.inject(MyMetaStore, storeInstance);
69962
69979
  }
69963
69980
  });
69964
69981
  this.DOMFocusableElementStore = useStore(DOMFocusableElementStore);
69965
- (0, _odoo_owl.useExternalListener)(window, "click", () => this.state.pickerOpened = false);
69982
+ (0, _odoo_owl.useExternalListener)(window, "click", this.onExternalClick.bind(this), { capture: true });
69966
69983
  (0, _odoo_owl.useEffect)((sheetId) => {
69967
69984
  if (this.props.sheetId === sheetId) this.scrollToSheet();
69968
69985
  }, () => [this.env.model.getters.getActiveSheetId()]);
69969
69986
  }
69987
+ onExternalClick(ev) {
69988
+ if (!ev.target.closest(".o-color-picker")) this.state.pickerOpened = false;
69989
+ }
69970
69990
  focusInputAndSelectContent() {
69971
69991
  if (!this.state.isEditing || !this.sheetNameRef.el) return;
69972
69992
  this.sheetNameRef.el.focus();
@@ -70068,6 +70088,8 @@ stores.inject(MyMetaStore, storeInstance);
70068
70088
  },
70069
70089
  openSheetColorPickerCallback: () => {
70070
70090
  this.state.pickerOpened = true;
70091
+ const sheet = this.env.model.getters.getSheet(this.props.sheetId);
70092
+ this.state.currentPickerColor = sheet.color;
70071
70093
  }
70072
70094
  });
70073
70095
  }
@@ -74259,11 +74281,11 @@ stores.inject(MyMetaStore, storeInstance);
74259
74281
  <!-- each data marker in the series does not have a different color -->
74260
74282
  <c:varyColors val="0"/>
74261
74283
  ${joinXmlNodes(rightDataSetsNodes)}
74262
- <c:axId val="${catAxId + 1}" />
74263
- <c:axId val="${valAxId + 1}" />
74284
+ <c:axId val="${17781238}" />
74285
+ <c:axId val="${88853994}" />
74264
74286
  </c:barChart>
74265
- ${addAx("b", "c:catAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
74266
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
74287
+ ${addAx("b", "c:catAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
74288
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
74267
74289
  ` : ""}`;
74268
74290
  }
74269
74291
  function addComboChart(chart) {
@@ -74501,11 +74523,11 @@ stores.inject(MyMetaStore, storeInstance);
74501
74523
  <!-- each data marker in the series does not have a different color -->
74502
74524
  <c:varyColors val="0"/>
74503
74525
  ${joinXmlNodes(rightDataSetsNodes)}
74504
- <c:axId val="${catAxId + 1}" />
74505
- <c:axId val="${valAxId + 1}" />
74526
+ <c:axId val="${17781238}" />
74527
+ <c:axId val="${88853994}" />
74506
74528
  </c:lineChart>
74507
- ${addAx("b", "c:catAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
74508
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
74529
+ ${addAx("b", "c:catAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
74530
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
74509
74531
  ` : ""}
74510
74532
  `;
74511
74533
  }
@@ -74568,11 +74590,11 @@ stores.inject(MyMetaStore, storeInstance);
74568
74590
  <c:varyColors val="0"/>
74569
74591
  <c:scatterStyle val="lineMarker"/>
74570
74592
  ${joinXmlNodes(rightDataSetsNodes)}
74571
- <c:axId val="${catAxId + 1}" />
74572
- <c:axId val="${valAxId + 1}" />
74593
+ <c:axId val="${17781238}" />
74594
+ <c:axId val="${88853994}" />
74573
74595
  </c:scatterChart>
74574
- ${addAx("b", "c:valAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
74575
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
74596
+ ${addAx("b", "c:valAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
74597
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
74576
74598
  ` : ""}`;
74577
74599
  }
74578
74600
  function addRadarChart(chart) {
@@ -79132,8 +79154,8 @@ exports.stores = stores;
79132
79154
  exports.tokenColors = tokenColors;
79133
79155
  exports.tokenize = tokenize;
79134
79156
 
79135
- __info__.version = "19.1.23";
79136
- __info__.date = "2026-06-17T08:50:59.790Z";
79137
- __info__.hash = "53aa85b";
79157
+ __info__.version = "19.1.26";
79158
+ __info__.date = "2026-07-01T05:03:31.665Z";
79159
+ __info__.hash = "44237c0";
79138
79160
 
79139
79161
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);