@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:51:01.395Z
7
- * @hash 53aa85b
5
+ * @version 19.1.26
6
+ * @date 2026-07-01T05:03:33.170Z
7
+ * @hash 44237c0
8
8
  */
9
9
  :root {
10
10
  --os-gray-100: light-dark(#f9fafb, #1b1d26);
@@ -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
  import { App, Component, blockDom, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, whenReady, xml } from "@odoo/owl";
@@ -222,7 +222,7 @@ const GRAY_900 = "#111827";
222
222
  const GRAY_300 = "#D8DADD";
223
223
  const GRAY_200 = "#E7E9ED";
224
224
  const TEXT_BODY = "#374151";
225
- const TEXT_BODY_MUTED = TEXT_BODY + "C2";
225
+ const TEXT_BODY_MUTED = "#374151C2";
226
226
  const ACTION_COLOR = HIGHLIGHT_COLOR;
227
227
  const CHART_TITLE_FONT_SIZE = 16;
228
228
  const DEFAULT_CHART_COLOR_SCALE = {
@@ -315,9 +315,6 @@ const COLOR_PICKER_DEFAULTS = [
315
315
  ];
316
316
  const DEFAULT_CELL_HEIGHT = 23;
317
317
  const FOOTER_HEIGHT = 2 * 23;
318
- const MENU_SEPARATOR_BORDER_WIDTH = 1;
319
- const MENU_SEPARATOR_PADDING = 5;
320
- const MENU_SEPARATOR_HEIGHT = 1 + 2 * 5;
321
318
  const ZOOM_VALUES = [
322
319
  50,
323
320
  75,
@@ -343,7 +340,7 @@ const ROTATION_EPSILON = .001;
343
340
  const DEFAULT_VERTICAL_ALIGN = DEFAULT_STYLE.verticalAlign;
344
341
  const DEFAULT_WRAPPING_MODE = DEFAULT_STYLE.wrapping;
345
342
  const DEFAULT_FONT_SIZE = DEFAULT_STYLE.fontSize;
346
- const DEFAULT_FONT = "'Roboto', arial";
343
+ const DEFAULT_FONT = "'Roboto', arial, 'Liberation Sans'";
347
344
  const DEFAULT_BORDER_DESC = {
348
345
  style: "thin",
349
346
  color: "#000000"
@@ -1162,7 +1159,7 @@ function toXC(col, row, rangePart = {
1162
1159
  function recomputeZones(zones, zonesToRemove = []) {
1163
1160
  if (zones.length <= 1 && zonesToRemove.length === 0) return zones;
1164
1161
  const profilesStartingPosition = [0];
1165
- const profiles = new Map([[0, []]]);
1162
+ const profiles = /* @__PURE__ */ new Map([[0, []]]);
1166
1163
  modifyProfiles(profilesStartingPosition, profiles, zones, false);
1167
1164
  modifyProfiles(profilesStartingPosition, profiles, zonesToRemove, true);
1168
1165
  return constructZonesFromProfiles(profilesStartingPosition, profiles);
@@ -3470,12 +3467,10 @@ const getNumberRegex = memoize(function getNumberRegex(locale) {
3470
3467
  const pIntegerAndDecimals = `(?:\\d+(?:${escapeRegExp(locale.thousandsSeparator || "")}\\d{3,})*(?:${decimalSeparator}\\d*)?)`;
3471
3468
  const pOnlyDecimals = `(?:${decimalSeparator}\\d+)`;
3472
3469
  const pNumber = "(?:\\s*" + pIntegerAndDecimals + "|" + pOnlyDecimals + ")(?:(e|E)(?:\\+|-)?(?:[0-9]|[0-9][0-9]|[12][0-9]{2}|30[0-7]))?(?:\\s*%)?";
3473
- const pMinus = "(?:\\s*-)?";
3474
- const pCurrencyFormat = "(?:\\s*[\\$€])?";
3475
3470
  const pNumberExp = "^(?:(?:" + [
3476
- pMinus + pCurrencyFormat + pNumber,
3477
- pMinus + pNumber + pCurrencyFormat,
3478
- pCurrencyFormat + pMinus + pNumber
3471
+ "(?:\\s*-)?(?:\\s*[\\$€])?" + pNumber,
3472
+ "(?:\\s*-)?" + pNumber + "(?:\\s*[\\$€])?",
3473
+ "(?:\\s*[\\$€])?(?:\\s*-)?" + pNumber
3479
3474
  ].join(")|(?:") + "))$";
3480
3475
  return new RegExp(pNumberExp, "i");
3481
3476
  });
@@ -5374,7 +5369,7 @@ function isPositionDependent(cmd) {
5374
5369
  function isZoneDependent(cmd) {
5375
5370
  return "sheetId" in cmd && "zone" in cmd;
5376
5371
  }
5377
- const invalidateEvaluationCommands = new Set([
5372
+ const invalidateEvaluationCommands = /* @__PURE__ */ new Set([
5378
5373
  "RENAME_SHEET",
5379
5374
  "DELETE_SHEET",
5380
5375
  "CREATE_SHEET",
@@ -5393,7 +5388,7 @@ const invalidateEvaluationCommands = new Set([
5393
5388
  "REMOVE_PIVOT",
5394
5389
  "DUPLICATE_PIVOT"
5395
5390
  ]);
5396
- const invalidateChartEvaluationCommands = new Set([
5391
+ const invalidateChartEvaluationCommands = /* @__PURE__ */ new Set([
5397
5392
  "EVALUATE_CELLS",
5398
5393
  "EVALUATE_CHARTS",
5399
5394
  "UPDATE_CELL",
@@ -5414,20 +5409,20 @@ const invalidateChartEvaluationCommands = new Set([
5414
5409
  "UNDO",
5415
5410
  "REDO"
5416
5411
  ]);
5417
- const invalidateDependenciesCommands = new Set(["MOVE_RANGES"]);
5418
- const invalidateCFEvaluationCommands = new Set([
5412
+ const invalidateDependenciesCommands = /* @__PURE__ */ new Set(["MOVE_RANGES"]);
5413
+ const invalidateCFEvaluationCommands = /* @__PURE__ */ new Set([
5419
5414
  "EVALUATE_CELLS",
5420
5415
  "ADD_CONDITIONAL_FORMAT",
5421
5416
  "REMOVE_CONDITIONAL_FORMAT",
5422
5417
  "CHANGE_CONDITIONAL_FORMAT_PRIORITY"
5423
5418
  ]);
5424
- const invalidateBordersCommands = new Set([
5419
+ const invalidateBordersCommands = /* @__PURE__ */ new Set([
5425
5420
  "AUTOFILL_CELL",
5426
5421
  "SET_BORDER",
5427
5422
  "SET_ZONE_BORDERS",
5428
5423
  "SET_BORDERS_ON_TARGET"
5429
5424
  ]);
5430
- const invalidSubtotalFormulasCommands = new Set([
5425
+ const invalidSubtotalFormulasCommands = /* @__PURE__ */ new Set([
5431
5426
  "UNHIDE_COLUMNS_ROWS",
5432
5427
  "HIDE_COLUMNS_ROWS",
5433
5428
  "GROUP_HEADERS",
@@ -5441,7 +5436,7 @@ const invalidSubtotalFormulasCommands = new Set([
5441
5436
  "UPDATE_TABLE",
5442
5437
  "UPDATE_FILTER"
5443
5438
  ]);
5444
- const readonlyAllowedCommands = new Set([
5439
+ const readonlyAllowedCommands = /* @__PURE__ */ new Set([
5445
5440
  "START",
5446
5441
  "ACTIVATE_SHEET",
5447
5442
  "COPY",
@@ -5456,7 +5451,7 @@ const readonlyAllowedCommands = new Set([
5456
5451
  "UPDATE_CAROUSEL_ACTIVE_ITEM",
5457
5452
  "UPDATE_PIVOT"
5458
5453
  ]);
5459
- const coreTypes = new Set([
5454
+ const coreTypes = /* @__PURE__ */ new Set([
5460
5455
  "UPDATE_CELL",
5461
5456
  "UPDATE_CELL_POSITION",
5462
5457
  "CLEAR_CELL",
@@ -6001,7 +5996,6 @@ function getCanonicalRepresentation(item) {
6001
5996
  //#region src/helpers/edge_scrolling.ts
6002
5997
  const MAX_DELAY = 140;
6003
5998
  const MIN_DELAY = 20;
6004
- const ACCELERATION = .035;
6005
5999
  /**
6006
6000
  * Decreasing exponential function used to determine the "speed" of edge-scrolling
6007
6001
  * as the timeout delay.
@@ -6009,7 +6003,7 @@ const ACCELERATION = .035;
6009
6003
  * Returns a timeout delay in milliseconds.
6010
6004
  */
6011
6005
  function scrollDelay(value) {
6012
- return 20 + (140 - 20) * Math.exp(-ACCELERATION * (value - 1));
6006
+ return 20 + (140 - 20) * Math.exp(-.035 * (value - 1));
6013
6007
  }
6014
6008
 
6015
6009
  //#endregion
@@ -7003,7 +6997,7 @@ var UuidGenerator = class {
7003
6997
  const cryptoObj = this.getCrypto();
7004
6998
  if (cryptoObj) return "10000000-1000".replace(/[01]/g, (c) => {
7005
6999
  const n = Number(c);
7006
- return (n ^ cryptoObj.getRandomValues(new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
7000
+ return (n ^ cryptoObj.getRandomValues(/* @__PURE__ */ new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
7007
7001
  });
7008
7002
  else return "xxxxxxxx-xxxx".replace(/[xy]/g, function(c) {
7009
7003
  const r = Math.random() * 16 | 0;
@@ -7018,7 +7012,7 @@ var UuidGenerator = class {
7018
7012
  const cryptoObj = this.getCrypto();
7019
7013
  if (cryptoObj) return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => {
7020
7014
  const n = Number(c);
7021
- return (n ^ cryptoObj.getRandomValues(new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
7015
+ return (n ^ cryptoObj.getRandomValues(/* @__PURE__ */ new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
7022
7016
  });
7023
7017
  else return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
7024
7018
  const r = Math.random() * 16 | 0;
@@ -11612,7 +11606,7 @@ const availableConditionalFormatOperators = new Set(cfOperators);
11612
11606
 
11613
11607
  //#endregion
11614
11608
  //#region src/types/data_validation.ts
11615
- const availableDataValidationOperators = new Set([
11609
+ const availableDataValidationOperators = /* @__PURE__ */ new Set([
11616
11610
  "containsText",
11617
11611
  "notContainsText",
11618
11612
  "isEqualText",
@@ -12186,10 +12180,10 @@ function toNormalizedPivotValue(dimension, groupValue) {
12186
12180
  type: dimension.type
12187
12181
  }));
12188
12182
  if (groupValueString.toLowerCase() === "false") return false;
12189
- return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension.granularity);
12183
+ return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension);
12190
12184
  }
12191
- function normalizeDateTime(value, granularity) {
12192
- return pivotTimeAdapter(granularity ?? "month").normalizeFunctionValue(value);
12185
+ function normalizeDateTime(value, dimension) {
12186
+ return pivotTimeAdapter(dimension.granularity ?? "month").normalizeFunctionValue(value);
12193
12187
  }
12194
12188
  function toFunctionPivotValue(value, dimension) {
12195
12189
  if (value === null) return `"null"`;
@@ -15215,6 +15209,59 @@ function getCarouselItemTitle(getters, item) {
15215
15209
  return (chartSubtypeRegistry.getAll().find((c) => c.matcher?.(definition)) || chartSubtypeRegistry.get(definition.type)).displayName;
15216
15210
  }
15217
15211
 
15212
+ //#endregion
15213
+ //#region src/components/helpers/css.ts
15214
+ function getTextDecoration({ strikethrough, underline }) {
15215
+ if (!strikethrough && !underline) return "none";
15216
+ return `${strikethrough ? "line-through" : ""} ${underline ? "underline" : ""}`;
15217
+ }
15218
+ /**
15219
+ * Convert the cell style to CSS properties.
15220
+ */
15221
+ function cellStyleToCss(style) {
15222
+ const attributes = cellTextStyleToCss(style);
15223
+ if (!style) return attributes;
15224
+ if (style.fillColor) attributes["background"] = style.fillColor;
15225
+ return attributes;
15226
+ }
15227
+ /**
15228
+ * Convert the cell text style to CSS properties.
15229
+ */
15230
+ function cellTextStyleToCss(style) {
15231
+ const attributes = {};
15232
+ if (!style) return attributes;
15233
+ if (style.bold) attributes["font-weight"] = "bold";
15234
+ if (style.italic) attributes["font-style"] = "italic";
15235
+ if (style.fontSize) attributes["font-size"] = `${style.fontSize}px`;
15236
+ if (style.strikethrough || style.underline) {
15237
+ let decoration = style.strikethrough ? "line-through" : "";
15238
+ decoration = style.underline ? decoration + " underline" : decoration;
15239
+ attributes["text-decoration"] = decoration;
15240
+ }
15241
+ if (style.textColor) attributes["color"] = style.textColor;
15242
+ return attributes;
15243
+ }
15244
+ /**
15245
+ * Transform CSS properties into a CSS string.
15246
+ */
15247
+ function cssPropertiesToCss(attributes) {
15248
+ let styleStr = "";
15249
+ for (const attName in attributes) {
15250
+ if (!attributes[attName]) continue;
15251
+ styleStr += `${attName}:${attributes[attName]}; `;
15252
+ }
15253
+ return styleStr;
15254
+ }
15255
+ function getElementMargins(el) {
15256
+ const style = window.getComputedStyle(el);
15257
+ return {
15258
+ top: parseInt(style.marginTop, 10) || 0,
15259
+ bottom: parseInt(style.marginBottom, 10) || 0,
15260
+ left: parseInt(style.marginLeft, 10) || 0,
15261
+ right: parseInt(style.marginRight, 10) || 0
15262
+ };
15263
+ }
15264
+
15218
15265
  //#endregion
15219
15266
  //#region src/components/figures/chart/chartJs/zoomable_chart/zoomable_chart_store.ts
15220
15267
  const TREND_LINE_AXES_IDS = ["x1", MOVING_AVERAGE_TREND_LINE_XAXIS_ID];
@@ -15314,9 +15361,7 @@ var ZoomableChartJsComponent = class extends ChartJsComponent {
15314
15361
  this.removeEventListeners();
15315
15362
  }
15316
15363
  get containerStyle() {
15317
- return `
15318
- height:${this.sliceable ? `calc(100% - ${60}px)` : "100%"};
15319
- `;
15364
+ return cssPropertiesToCss({ height: this.sliceable ? `calc(100% - ${60}px)` : "100%" });
15320
15365
  }
15321
15366
  get masterChartContainerStyle() {
15322
15367
  const runtime = this.env.model.getters.getChartRuntime(this.props.chartId);
@@ -16172,59 +16217,6 @@ var FullScreenFigureStore = class extends SpreadsheetStore {
16172
16217
  }
16173
16218
  };
16174
16219
 
16175
- //#endregion
16176
- //#region src/components/helpers/css.ts
16177
- function getTextDecoration({ strikethrough, underline }) {
16178
- if (!strikethrough && !underline) return "none";
16179
- return `${strikethrough ? "line-through" : ""} ${underline ? "underline" : ""}`;
16180
- }
16181
- /**
16182
- * Convert the cell style to CSS properties.
16183
- */
16184
- function cellStyleToCss(style) {
16185
- const attributes = cellTextStyleToCss(style);
16186
- if (!style) return attributes;
16187
- if (style.fillColor) attributes["background"] = style.fillColor;
16188
- return attributes;
16189
- }
16190
- /**
16191
- * Convert the cell text style to CSS properties.
16192
- */
16193
- function cellTextStyleToCss(style) {
16194
- const attributes = {};
16195
- if (!style) return attributes;
16196
- if (style.bold) attributes["font-weight"] = "bold";
16197
- if (style.italic) attributes["font-style"] = "italic";
16198
- if (style.fontSize) attributes["font-size"] = `${style.fontSize}px`;
16199
- if (style.strikethrough || style.underline) {
16200
- let decoration = style.strikethrough ? "line-through" : "";
16201
- decoration = style.underline ? decoration + " underline" : decoration;
16202
- attributes["text-decoration"] = decoration;
16203
- }
16204
- if (style.textColor) attributes["color"] = style.textColor;
16205
- return attributes;
16206
- }
16207
- /**
16208
- * Transform CSS properties into a CSS string.
16209
- */
16210
- function cssPropertiesToCss(attributes) {
16211
- let styleStr = "";
16212
- for (const attName in attributes) {
16213
- if (!attributes[attName]) continue;
16214
- styleStr += `${attName}:${attributes[attName]}; `;
16215
- }
16216
- return styleStr;
16217
- }
16218
- function getElementMargins(el) {
16219
- const style = window.getComputedStyle(el);
16220
- return {
16221
- top: parseInt(style.marginTop, 10) || 0,
16222
- bottom: parseInt(style.marginBottom, 10) || 0,
16223
- left: parseInt(style.marginLeft, 10) || 0,
16224
- right: parseInt(style.marginRight, 10) || 0
16225
- };
16226
- }
16227
-
16228
16220
  //#endregion
16229
16221
  //#region src/components/helpers/time_hooks.ts
16230
16222
  /**
@@ -17219,11 +17211,11 @@ var FigureComponent = class extends Component {
17219
17211
  getResizerPosition(resizer) {
17220
17212
  const anchorCenteringOffset = (ANCHOR_SIZE - ACTIVE_BORDER_WIDTH) / 2;
17221
17213
  const style = {};
17222
- if (resizer.includes("top")) style.top = `${-anchorCenteringOffset}px`;
17223
- else if (resizer.includes("bottom")) style.bottom = `${-anchorCenteringOffset}px`;
17214
+ if (resizer.includes("top")) style.top = `-3px`;
17215
+ else if (resizer.includes("bottom")) style.bottom = `-3px`;
17224
17216
  else style.bottom = `calc(50% - ${anchorCenteringOffset}px)`;
17225
- if (resizer.includes("left")) style.left = `${-anchorCenteringOffset}px`;
17226
- else if (resizer.includes("right")) style.right = `${-anchorCenteringOffset}px`;
17217
+ if (resizer.includes("left")) style.left = `-3px`;
17218
+ else if (resizer.includes("right")) style.right = `-3px`;
17227
17219
  else style.right = `calc(50% - ${anchorCenteringOffset}px)`;
17228
17220
  return cssPropertiesToCss(style);
17229
17221
  }
@@ -27600,6 +27592,7 @@ function mapParenthesisCode(tokens) {
27600
27592
  function mapParentFunction(tokens) {
27601
27593
  const stack = [];
27602
27594
  let functionStarted = "";
27595
+ let braceDepth = 0;
27603
27596
  function pushTokenToFunctionContext(token) {
27604
27597
  if (stack.length === 0) return;
27605
27598
  const functionContext = stack.at(-1);
@@ -27612,7 +27605,7 @@ function mapParentFunction(tokens) {
27612
27605
  });
27613
27606
  }
27614
27607
  }
27615
- return tokens.map((token, i) => {
27608
+ return tokens.map((token) => {
27616
27609
  if (!["SPACE", "LEFT_PAREN"].includes(token.type)) functionStarted = "";
27617
27610
  switch (token.type) {
27618
27611
  case "SYMBOL":
@@ -27633,8 +27626,16 @@ function mapParentFunction(tokens) {
27633
27626
  stack.pop()?.argsTokens?.flat().forEach(pushTokenToFunctionContext);
27634
27627
  pushTokenToFunctionContext(token);
27635
27628
  break;
27629
+ case "LEFT_BRACE":
27630
+ braceDepth++;
27631
+ pushTokenToFunctionContext(token);
27632
+ break;
27633
+ case "RIGHT_BRACE":
27634
+ braceDepth--;
27635
+ pushTokenToFunctionContext(token);
27636
+ break;
27636
27637
  case "ARG_SEPARATOR":
27637
- if (stack.length) stack[stack.length - 1].argPosition++;
27638
+ if (stack.length && braceDepth === 0) stack[stack.length - 1].argPosition++;
27638
27639
  pushTokenToFunctionContext(token);
27639
27640
  break;
27640
27641
  default:
@@ -28848,10 +28849,7 @@ function startDnd(onPointerMove, onPointerUp) {
28848
28849
  //#endregion
28849
28850
  //#region src/components/color_picker/color_picker.ts
28850
28851
  const ITEM_BORDER_WIDTH = 1;
28851
- const ITEM_EDGE_LENGTH = 18;
28852
- const ITEMS_PER_LINE = 10;
28853
- const MAGNIFIER_EDGE = 16;
28854
- const CONTENT_WIDTH = ITEMS_PER_LINE * (ITEM_EDGE_LENGTH + 2 * ITEM_BORDER_WIDTH) + (ITEMS_PER_LINE - 1) * 2;
28852
+ const CONTENT_WIDTH = 218;
28855
28853
  const INNER_GRADIENT_WIDTH = CONTENT_WIDTH - 2 * ITEM_BORDER_WIDTH;
28856
28854
  const INNER_GRADIENT_HEIGHT = CONTENT_WIDTH - 30 - 2 * ITEM_BORDER_WIDTH;
28857
28855
  var ColorPicker = class extends Component {
@@ -28915,8 +28913,8 @@ var ColorPicker = class extends Component {
28915
28913
  const left = Math.round(INNER_GRADIENT_WIDTH * clip(s / 100, 0, 1));
28916
28914
  const top = Math.round(INNER_GRADIENT_HEIGHT * clip(1 - 2 * l / (200 - s), 0, 1));
28917
28915
  return cssPropertiesToCss({
28918
- left: `${-MAGNIFIER_EDGE / 2 + left}px`,
28919
- top: `${-MAGNIFIER_EDGE / 2 + top}px`,
28916
+ left: `${-16 / 2 + left}px`,
28917
+ top: `${-16 / 2 + top}px`,
28920
28918
  background: hslaToHex(this.state.currentHslaColor)
28921
28919
  });
28922
28920
  }
@@ -52618,7 +52616,7 @@ var Grid = class extends Component {
52618
52616
  ev.preventDefault();
52619
52617
  const clipboardData = ev.clipboardData;
52620
52618
  if (!clipboardData) return;
52621
- const image = [...clipboardData.files]?.find((file) => AllowedImageMimeTypes.includes(file.type));
52619
+ const image = [...clipboardData.files].find((file) => AllowedImageMimeTypes.includes(file.type));
52622
52620
  const osClipboard = { content: {
52623
52621
  ["text/plain"]: clipboardData?.getData("text/plain"),
52624
52622
  ["text/html"]: clipboardData?.getData("text/html")
@@ -58450,7 +58448,7 @@ var ZoneRBush = class extends import_rbush_min.default {
58450
58448
  //#region src/plugins/ui_core_views/cell_evaluation/zone_set.ts
58451
58449
  var ZoneSet = class ZoneSet {
58452
58450
  profilesStartingPosition = [0];
58453
- profiles = new Map([[0, []]]);
58451
+ profiles = /* @__PURE__ */ new Map([[0, []]]);
58454
58452
  constructor(zones = []) {
58455
58453
  for (const zone of zones) this.add(zone);
58456
58454
  }
@@ -59828,12 +59826,22 @@ var CustomColorsPlugin = class extends CoreViewPlugin {
59828
59826
  handle(cmd) {
59829
59827
  switch (cmd.type) {
59830
59828
  case "START":
59831
- for (const sheetId of this.getters.getSheetIds()) for (const chartId of this.getters.getChartIds(sheetId)) this.tryToAddColors(this.getChartColors(chartId));
59829
+ for (const sheetId of this.getters.getSheetIds()) {
59830
+ for (const chartId of this.getters.getChartIds(sheetId)) this.tryToAddColors(this.getChartColors(chartId));
59831
+ for (const figureId of this.getters.getFigures(sheetId)) this.tryToAddColors(this.getCarouselColors(sheetId, figureId.id));
59832
+ }
59832
59833
  break;
59833
59834
  case "UPDATE_CHART":
59834
59835
  case "CREATE_CHART":
59835
59836
  this.tryToAddColors(this.getChartColors(cmd.chartId));
59836
59837
  break;
59838
+ case "CREATE_CAROUSEL":
59839
+ case "UPDATE_CAROUSEL":
59840
+ this.tryToAddColors(this.getCarouselColors(cmd.sheetId, cmd.figureId));
59841
+ break;
59842
+ case "COLOR_SHEET":
59843
+ if (cmd.color) this.tryToAddColors([cmd.color]);
59844
+ break;
59837
59845
  case "UPDATE_CELL":
59838
59846
  case "ADD_CONDITIONAL_FORMAT":
59839
59847
  case "SET_BORDER":
@@ -59856,8 +59864,12 @@ var CustomColorsPlugin = class extends CoreViewPlugin {
59856
59864
  }
59857
59865
  computeCustomColors() {
59858
59866
  let usedColors = [];
59859
- for (const sheetId of this.getters.getSheetIds()) usedColors = usedColors.concat(this.getColorsFromCells(sheetId), this.getFormattingColors(sheetId), this.getTableColors(sheetId));
59860
- return [...new Set([...usedColors])];
59867
+ for (const sheetId of this.getters.getSheetIds()) usedColors = usedColors.concat(this.getSheetColors(sheetId), this.getColorsFromCells(sheetId), this.getFormattingColors(sheetId), this.getTableColors(sheetId));
59868
+ return [.../* @__PURE__ */ new Set([...usedColors])];
59869
+ }
59870
+ getSheetColors(sheetId) {
59871
+ const sheet = this.getters.getSheet(sheetId);
59872
+ return sheet.color ? [sheet.color] : [];
59861
59873
  }
59862
59874
  getColorsFromCells(sheetId) {
59863
59875
  const colors = /* @__PURE__ */ new Set();
@@ -59886,6 +59898,11 @@ var CustomColorsPlugin = class extends CoreViewPlugin {
59886
59898
  if (chart === void 0) return [];
59887
59899
  return [...JSON.stringify(chart.getDefinition()).matchAll(chartColorRegex)].map((color) => color[1]);
59888
59900
  }
59901
+ getCarouselColors(sheetId, figureId) {
59902
+ if (this.getters.getFigure(sheetId, figureId)?.tag !== "carousel") return [];
59903
+ const titleColor = this.getters.getCarousel(figureId).title?.color;
59904
+ return titleColor ? [titleColor] : [];
59905
+ }
59889
59906
  getTableColors(sheetId) {
59890
59907
  return this.getters.getTables(sheetId).flatMap((table) => {
59891
59908
  const config = table.config;
@@ -63102,7 +63119,7 @@ var TableComputedStylePlugin = class extends UIPlugin {
63102
63119
  };
63103
63120
  }
63104
63121
  };
63105
- const invalidateTableStyleCommandsSet = new Set([
63122
+ const invalidateTableStyleCommandsSet = /* @__PURE__ */ new Set([
63106
63123
  "HIDE_COLUMNS_ROWS",
63107
63124
  "UNHIDE_COLUMNS_ROWS",
63108
63125
  "UNFOLD_HEADER_GROUP",
@@ -67371,14 +67388,14 @@ var InternalViewport = class {
67371
67388
  adjustPositionX(targetCol) {
67372
67389
  const sheetId = this.sheetId;
67373
67390
  const { start, end } = this.getters.getColDimensions(sheetId, targetCol);
67374
- if (this.offsetX + this.viewportWidth + this.offsetCorrectionX < end) this.offsetX = end - this.viewportWidth;
67391
+ if (this.offsetX + this.viewportWidth + this.offsetCorrectionX < end) this.offsetX = end - this.viewportWidth - this.offsetCorrectionX;
67375
67392
  else if (this.offsetX + this.offsetCorrectionX > start) this.offsetX = start - this.offsetCorrectionX;
67376
67393
  this.adjustViewportZoneX();
67377
67394
  }
67378
67395
  adjustPositionY(targetRow) {
67379
67396
  const sheetId = this.sheetId;
67380
67397
  const { start, end } = this.getters.getRowDimensions(sheetId, targetRow);
67381
- if (this.offsetY + this.viewportHeight + this.offsetCorrectionY < end) this.offsetY = end - this.viewportHeight;
67398
+ if (this.offsetY + this.viewportHeight + this.offsetCorrectionY < end) this.offsetY = end - this.viewportHeight - this.offsetCorrectionY;
67382
67399
  else if (this.offsetY + this.offsetCorrectionY > start) this.offsetY = start - this.offsetCorrectionY;
67383
67400
  this.adjustViewportZoneY();
67384
67401
  }
@@ -69960,11 +69977,14 @@ var BottomBarSheet = class extends Component {
69960
69977
  }
69961
69978
  });
69962
69979
  this.DOMFocusableElementStore = useStore(DOMFocusableElementStore);
69963
- useExternalListener(window, "click", () => this.state.pickerOpened = false);
69980
+ useExternalListener(window, "click", this.onExternalClick.bind(this), { capture: true });
69964
69981
  useEffect((sheetId) => {
69965
69982
  if (this.props.sheetId === sheetId) this.scrollToSheet();
69966
69983
  }, () => [this.env.model.getters.getActiveSheetId()]);
69967
69984
  }
69985
+ onExternalClick(ev) {
69986
+ if (!ev.target.closest(".o-color-picker")) this.state.pickerOpened = false;
69987
+ }
69968
69988
  focusInputAndSelectContent() {
69969
69989
  if (!this.state.isEditing || !this.sheetNameRef.el) return;
69970
69990
  this.sheetNameRef.el.focus();
@@ -70066,6 +70086,8 @@ var BottomBarSheet = class extends Component {
70066
70086
  },
70067
70087
  openSheetColorPickerCallback: () => {
70068
70088
  this.state.pickerOpened = true;
70089
+ const sheet = this.env.model.getters.getSheet(this.props.sheetId);
70090
+ this.state.currentPickerColor = sheet.color;
70069
70091
  }
70070
70092
  });
70071
70093
  }
@@ -74257,11 +74279,11 @@ function addBarChart(chart) {
74257
74279
  <!-- each data marker in the series does not have a different color -->
74258
74280
  <c:varyColors val="0"/>
74259
74281
  ${joinXmlNodes(rightDataSetsNodes)}
74260
- <c:axId val="${catAxId + 1}" />
74261
- <c:axId val="${valAxId + 1}" />
74282
+ <c:axId val="${17781238}" />
74283
+ <c:axId val="${88853994}" />
74262
74284
  </c:barChart>
74263
- ${addAx("b", "c:catAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
74264
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
74285
+ ${addAx("b", "c:catAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
74286
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
74265
74287
  ` : ""}`;
74266
74288
  }
74267
74289
  function addComboChart(chart) {
@@ -74499,11 +74521,11 @@ function addLineChart(chart) {
74499
74521
  <!-- each data marker in the series does not have a different color -->
74500
74522
  <c:varyColors val="0"/>
74501
74523
  ${joinXmlNodes(rightDataSetsNodes)}
74502
- <c:axId val="${catAxId + 1}" />
74503
- <c:axId val="${valAxId + 1}" />
74524
+ <c:axId val="${17781238}" />
74525
+ <c:axId val="${88853994}" />
74504
74526
  </c:lineChart>
74505
- ${addAx("b", "c:catAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
74506
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
74527
+ ${addAx("b", "c:catAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
74528
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
74507
74529
  ` : ""}
74508
74530
  `;
74509
74531
  }
@@ -74566,11 +74588,11 @@ function addScatterChart(chart) {
74566
74588
  <c:varyColors val="0"/>
74567
74589
  <c:scatterStyle val="lineMarker"/>
74568
74590
  ${joinXmlNodes(rightDataSetsNodes)}
74569
- <c:axId val="${catAxId + 1}" />
74570
- <c:axId val="${valAxId + 1}" />
74591
+ <c:axId val="${17781238}" />
74592
+ <c:axId val="${88853994}" />
74571
74593
  </c:scatterChart>
74572
- ${addAx("b", "c:valAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
74573
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
74594
+ ${addAx("b", "c:valAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
74595
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
74574
74596
  ` : ""}`;
74575
74597
  }
74576
74598
  function addRadarChart(chart) {
@@ -79077,6 +79099,6 @@ const chartHelpers = {
79077
79099
  //#endregion
79078
79100
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DispatchResult, EvaluationError, LocalTransportService, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, categories, chartHelpers, components, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
79079
79101
 
79080
- __info__.version = "19.1.23";
79081
- __info__.date = "2026-06-17T08:50:59.790Z";
79082
- __info__.hash = "53aa85b";
79102
+ __info__.version = "19.1.26";
79103
+ __info__.date = "2026-07-01T05:03:31.665Z";
79104
+ __info__.hash = "44237c0";