@odoo/o-spreadsheet 18.3.51 → 18.3.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,9 +2,9 @@
2
2
  /*
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 18.3.51
6
- * @date 2026-06-17T08:49:43.226Z
7
- * @hash 233f3ea
5
+ * @version 18.3.54
6
+ * @date 2026-07-01T05:01:46.026Z
7
+ * @hash d00e4b6
8
8
  */
9
9
  /* Originates from src/components/top_bar/top_bar.scss */
10
10
  @media (max-width: 900px) {
@@ -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.3.51
6
- * @date 2026-06-17T08:49:41.496Z
7
- * @hash 233f3ea
5
+ * @version 18.3.54
6
+ * @date 2026-07-01T05:01:44.424Z
7
+ * @hash d00e4b6
8
8
  */
9
9
 
10
10
  import { App, Component, blockDom, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, xml } from "@odoo/owl";
@@ -187,7 +187,7 @@ const GRAY_300 = "#D8DADD";
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";
@@ -294,9 +294,6 @@ const COLOR_PICKER_DEFAULTS = [
294
294
  ];
295
295
  const DEFAULT_CELL_HEIGHT = 23;
296
296
  const FOOTER_HEIGHT = 2 * 23;
297
- const MENU_SEPARATOR_BORDER_WIDTH = 1;
298
- const MENU_SEPARATOR_PADDING = 5;
299
- const MENU_SEPARATOR_HEIGHT = 1 + 2 * 5;
300
297
  const DEFAULT_STYLE = {
301
298
  align: "left",
302
299
  verticalAlign: "bottom",
@@ -316,7 +313,7 @@ const DEFAULT_NUMBER_STYLE = {
316
313
  const DEFAULT_VERTICAL_ALIGN = DEFAULT_STYLE.verticalAlign;
317
314
  const DEFAULT_WRAPPING_MODE = DEFAULT_STYLE.wrapping;
318
315
  const DEFAULT_FONT_SIZE = DEFAULT_STYLE.fontSize;
319
- const DEFAULT_FONT = "'Roboto', arial";
316
+ const DEFAULT_FONT = "'Roboto', arial, 'Liberation Sans'";
320
317
  const DEFAULT_BORDER_DESC = {
321
318
  style: "thin",
322
319
  color: "#000000"
@@ -1636,7 +1633,7 @@ function toXC(col, row, rangePart = {
1636
1633
  function recomputeZones(zones, zonesToRemove = []) {
1637
1634
  if (zones.length <= 1 && zonesToRemove.length === 0) return zones;
1638
1635
  const profilesStartingPosition = [0];
1639
- const profiles = new Map([[0, []]]);
1636
+ const profiles = /* @__PURE__ */ new Map([[0, []]]);
1640
1637
  modifyProfiles(profilesStartingPosition, profiles, zones, false);
1641
1638
  modifyProfiles(profilesStartingPosition, profiles, zonesToRemove, true);
1642
1639
  return constructZonesFromProfiles(profilesStartingPosition, profiles);
@@ -2846,12 +2843,10 @@ const getNumberRegex = memoize(function getNumberRegex(locale) {
2846
2843
  const pIntegerAndDecimals = `(?:\\d+(?:${escapeRegExp(locale.thousandsSeparator || "")}\\d{3,})*(?:${decimalSeparator}\\d*)?)`;
2847
2844
  const pOnlyDecimals = `(?:${decimalSeparator}\\d+)`;
2848
2845
  const pNumber = "(?:\\s*" + pIntegerAndDecimals + "|" + pOnlyDecimals + ")(?:e(?:\\+|-)?\\d+)?(?:\\s*%)?";
2849
- const pMinus = "(?:\\s*-)?";
2850
- const pCurrencyFormat = "(?:\\s*[\\$€])?";
2851
2846
  const pNumberExp = "^(?:(?:" + [
2852
- pMinus + pCurrencyFormat + pNumber,
2853
- pMinus + pNumber + pCurrencyFormat,
2854
- pCurrencyFormat + pMinus + pNumber
2847
+ "(?:\\s*-)?(?:\\s*[\\$€])?" + pNumber,
2848
+ "(?:\\s*-)?" + pNumber + "(?:\\s*[\\$€])?",
2849
+ "(?:\\s*[\\$€])?(?:\\s*-)?" + pNumber
2855
2850
  ].join(")|(?:") + "))$";
2856
2851
  return new RegExp(pNumberExp, "i");
2857
2852
  });
@@ -2966,7 +2961,7 @@ function isPositionDependent(cmd) {
2966
2961
  function isZoneDependent(cmd) {
2967
2962
  return "sheetId" in cmd && "zone" in cmd;
2968
2963
  }
2969
- const invalidateEvaluationCommands = new Set([
2964
+ const invalidateEvaluationCommands = /* @__PURE__ */ new Set([
2970
2965
  "RENAME_SHEET",
2971
2966
  "DELETE_SHEET",
2972
2967
  "CREATE_SHEET",
@@ -2985,7 +2980,7 @@ const invalidateEvaluationCommands = new Set([
2985
2980
  "REMOVE_PIVOT",
2986
2981
  "DUPLICATE_PIVOT"
2987
2982
  ]);
2988
- const invalidateChartEvaluationCommands = new Set([
2983
+ const invalidateChartEvaluationCommands = /* @__PURE__ */ new Set([
2989
2984
  "EVALUATE_CELLS",
2990
2985
  "EVALUATE_CHARTS",
2991
2986
  "UPDATE_CELL",
@@ -3004,20 +2999,20 @@ const invalidateChartEvaluationCommands = new Set([
3004
2999
  "UNDO",
3005
3000
  "REDO"
3006
3001
  ]);
3007
- const invalidateDependenciesCommands = new Set(["MOVE_RANGES"]);
3008
- const invalidateCFEvaluationCommands = new Set([
3002
+ const invalidateDependenciesCommands = /* @__PURE__ */ new Set(["MOVE_RANGES"]);
3003
+ const invalidateCFEvaluationCommands = /* @__PURE__ */ new Set([
3009
3004
  "EVALUATE_CELLS",
3010
3005
  "ADD_CONDITIONAL_FORMAT",
3011
3006
  "REMOVE_CONDITIONAL_FORMAT",
3012
3007
  "CHANGE_CONDITIONAL_FORMAT_PRIORITY"
3013
3008
  ]);
3014
- const invalidateBordersCommands = new Set([
3009
+ const invalidateBordersCommands = /* @__PURE__ */ new Set([
3015
3010
  "AUTOFILL_CELL",
3016
3011
  "SET_BORDER",
3017
3012
  "SET_ZONE_BORDERS",
3018
3013
  "SET_BORDERS_ON_TARGET"
3019
3014
  ]);
3020
- const readonlyAllowedCommands = new Set([
3015
+ const readonlyAllowedCommands = /* @__PURE__ */ new Set([
3021
3016
  "START",
3022
3017
  "ACTIVATE_SHEET",
3023
3018
  "COPY",
@@ -3028,7 +3023,7 @@ const readonlyAllowedCommands = new Set([
3028
3023
  "SET_FORMULA_VISIBILITY",
3029
3024
  "UPDATE_FILTER"
3030
3025
  ]);
3031
- const coreTypes = new Set([
3026
+ const coreTypes = /* @__PURE__ */ new Set([
3032
3027
  "UPDATE_CELL",
3033
3028
  "UPDATE_CELL_POSITION",
3034
3029
  "CLEAR_CELL",
@@ -5130,7 +5125,6 @@ function getDateCriterionFormattedValues(values, locale) {
5130
5125
  //#region src/helpers/edge_scrolling.ts
5131
5126
  const MAX_DELAY = 140;
5132
5127
  const MIN_DELAY = 20;
5133
- const ACCELERATION = .035;
5134
5128
  /**
5135
5129
  * Decreasing exponential function used to determine the "speed" of edge-scrolling
5136
5130
  * as the timeout delay.
@@ -5138,7 +5132,7 @@ const ACCELERATION = .035;
5138
5132
  * Returns a timeout delay in milliseconds.
5139
5133
  */
5140
5134
  function scrollDelay(value) {
5141
- return 20 + (140 - 20) * Math.exp(-ACCELERATION * (value - 1));
5135
+ return 20 + (140 - 20) * Math.exp(-.035 * (value - 1));
5142
5136
  }
5143
5137
 
5144
5138
  //#endregion
@@ -6011,7 +6005,7 @@ var UuidGenerator = class {
6011
6005
  smallUuid() {
6012
6006
  if (window.crypto) return "10000000-1000".replace(/[01]/g, (c) => {
6013
6007
  const n = Number(c);
6014
- return (n ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
6008
+ return (n ^ crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
6015
6009
  });
6016
6010
  else return "xxxxxxxx-xxxx".replace(/[xy]/g, function(c) {
6017
6011
  const r = Math.random() * 16 | 0;
@@ -6025,7 +6019,7 @@ var UuidGenerator = class {
6025
6019
  uuidv4() {
6026
6020
  if (window.crypto) return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => {
6027
6021
  const n = Number(c);
6028
- return (n ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
6022
+ return (n ^ crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
6029
6023
  });
6030
6024
  else return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
6031
6025
  const r = Math.random() * 16 | 0;
@@ -7617,10 +7611,10 @@ function toNormalizedPivotValue(dimension, groupValue) {
7617
7611
  type: dimension.type
7618
7612
  }));
7619
7613
  if (groupValueString.toLowerCase() === "false") return false;
7620
- return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension.granularity);
7614
+ return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension);
7621
7615
  }
7622
- function normalizeDateTime(value, granularity) {
7623
- return pivotTimeAdapter(granularity ?? "month").normalizeFunctionValue(value);
7616
+ function normalizeDateTime(value, dimension) {
7617
+ return pivotTimeAdapter(dimension.granularity ?? "month").normalizeFunctionValue(value);
7624
7618
  }
7625
7619
  function toFunctionPivotValue(value, dimension) {
7626
7620
  if (value === null) return `"null"`;
@@ -32260,17 +32254,16 @@ var Menu = class Menu extends Component {
32260
32254
 
32261
32255
  //#endregion
32262
32256
  //#region src/components/link/link_editor/link_editor.ts
32263
- const PADDING = 12;
32264
32257
  css`
32265
32258
  .o-link-editor {
32266
32259
  font-size: 13px;
32267
32260
  background-color: white;
32268
32261
  box-shadow: 0 1px 4px 3px rgba(60, 64, 67, 0.15);
32269
- padding: ${PADDING}px;
32262
+ padding: ${12}px;
32270
32263
  display: flex;
32271
32264
  flex-direction: column;
32272
32265
  border-radius: 4px;
32273
- width: ${340 + 2 * PADDING}px;
32266
+ width: ${364}px;
32274
32267
 
32275
32268
  .o-section {
32276
32269
  .o-section-title {
@@ -36424,11 +36417,10 @@ var ActionButton = class extends Component {
36424
36417
  const LINE_VERTICAL_PADDING = 1;
36425
36418
  const PICKER_PADDING = 8;
36426
36419
  const ITEM_BORDER_WIDTH = 1;
36427
- const ITEM_EDGE_LENGTH = 18;
36428
36420
  const ITEMS_PER_LINE = 10;
36429
36421
  const MAGNIFIER_EDGE = 16;
36430
36422
  const ITEM_GAP = 2;
36431
- const CONTENT_WIDTH = ITEMS_PER_LINE * (ITEM_EDGE_LENGTH + 2 * ITEM_BORDER_WIDTH) + (ITEMS_PER_LINE - 1) * ITEM_GAP;
36423
+ const CONTENT_WIDTH = 218;
36432
36424
  const INNER_GRADIENT_WIDTH = CONTENT_WIDTH - 2 * ITEM_BORDER_WIDTH;
36433
36425
  const INNER_GRADIENT_HEIGHT = CONTENT_WIDTH - 30 - 2 * ITEM_BORDER_WIDTH;
36434
36426
  css`
@@ -36440,7 +36432,7 @@ css`
36440
36432
  line-height: 1.2;
36441
36433
  overflow-y: auto;
36442
36434
  overflow-x: hidden;
36443
- width: ${CONTENT_WIDTH + 2 * PICKER_PADDING}px;
36435
+ width: ${234}px;
36444
36436
 
36445
36437
  .o-color-picker-section-name {
36446
36438
  margin: 0px ${ITEM_BORDER_WIDTH}px;
@@ -36466,8 +36458,8 @@ css`
36466
36458
  }
36467
36459
  }
36468
36460
  .o-color-picker-line-item {
36469
- width: ${ITEM_EDGE_LENGTH + 2 * ITEM_BORDER_WIDTH}px;
36470
- height: ${ITEM_EDGE_LENGTH + 2 * ITEM_BORDER_WIDTH}px;
36461
+ width: ${20}px;
36462
+ height: ${20}px;
36471
36463
  margin: 0px;
36472
36464
  border-radius: 50px;
36473
36465
  border: ${ITEM_BORDER_WIDTH}px solid #666666;
@@ -36511,13 +36503,13 @@ css`
36511
36503
  }
36512
36504
 
36513
36505
  .o-custom-selector {
36514
- padding: ${PICKER_PADDING + 2}px ${PICKER_PADDING}px;
36506
+ padding: ${10}px ${PICKER_PADDING}px;
36515
36507
  position: relative;
36516
36508
  .o-gradient {
36517
36509
  margin-bottom: ${MAGNIFIER_EDGE / 2}px;
36518
36510
  border: ${ITEM_BORDER_WIDTH}px solid #c0c0c0;
36519
- width: ${INNER_GRADIENT_WIDTH + 2 * ITEM_BORDER_WIDTH}px;
36520
- height: ${INNER_GRADIENT_HEIGHT + 2 * ITEM_BORDER_WIDTH}px;
36511
+ width: ${218}px;
36512
+ height: ${188}px;
36521
36513
  position: relative;
36522
36514
  }
36523
36515
 
@@ -36655,8 +36647,8 @@ var ColorPicker = class extends Component {
36655
36647
  const left = Math.round(INNER_GRADIENT_WIDTH * clip(s / 100, 0, 1));
36656
36648
  const top = Math.round(INNER_GRADIENT_HEIGHT * clip(1 - 2 * l / (200 - s), 0, 1));
36657
36649
  return cssPropertiesToCss({
36658
- left: `${-MAGNIFIER_EDGE / 2 + left}px`,
36659
- top: `${-MAGNIFIER_EDGE / 2 + top}px`,
36650
+ left: `${-16 / 2 + left}px`,
36651
+ top: `${-16 / 2 + top}px`,
36660
36652
  background: hslaToHex(this.state.currentHslaColor)
36661
36653
  });
36662
36654
  }
@@ -43553,8 +43545,8 @@ var PivotRuntimeDefinition = class {
43553
43545
  sortedColumn;
43554
43546
  constructor(definition, fields) {
43555
43547
  this.measures = definition.measures.map((measure) => createMeasure(fields, measure));
43556
- this.columns = definition.columns.map((dimension) => createPivotDimension(fields, dimension));
43557
- this.rows = definition.rows.map((dimension) => createPivotDimension(fields, dimension));
43548
+ this.columns = definition.columns.map((dimension) => this.createPivotDimension(fields, dimension));
43549
+ this.rows = definition.rows.map((dimension) => this.createPivotDimension(fields, dimension));
43558
43550
  this.sortedColumn = definition.sortedColumn;
43559
43551
  }
43560
43552
  getDimension(nameWithGranularity) {
@@ -43567,6 +43559,40 @@ var PivotRuntimeDefinition = class {
43567
43559
  if (!measure) throw new EvaluationError(_t("Field %s is not a measure", id));
43568
43560
  return measure;
43569
43561
  }
43562
+ createPivotDimension(fields, dimension) {
43563
+ const field = fields[dimension.fieldName];
43564
+ const type = field?.type ?? "integer";
43565
+ const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
43566
+ return {
43567
+ /**
43568
+ * Get the display name of the dimension
43569
+ * e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
43570
+ */
43571
+ displayName: field?.string ?? dimension.fieldName,
43572
+ /**
43573
+ * Get the name of the dimension, as it is stored in the pivot formula
43574
+ * e.g. "stage_id", "create_date:month"
43575
+ */
43576
+ nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
43577
+ /**
43578
+ * Get the name of the field of the dimension
43579
+ * e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
43580
+ */
43581
+ fieldName: dimension.fieldName,
43582
+ /**
43583
+ * Get the aggregate operator of the dimension
43584
+ * e.g. "stage_id" -> undefined, "create_date:month" -> "month"
43585
+ */
43586
+ granularity,
43587
+ /**
43588
+ * Get the type of the field of the dimension
43589
+ * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
43590
+ */
43591
+ type,
43592
+ order: dimension.order,
43593
+ isValid: !!field
43594
+ };
43595
+ }
43570
43596
  };
43571
43597
  function createMeasure(fields, measure) {
43572
43598
  const fieldName = measure.fieldName;
@@ -43610,40 +43636,6 @@ function createMeasure(fields, measure) {
43610
43636
  display: measure.display
43611
43637
  };
43612
43638
  }
43613
- function createPivotDimension(fields, dimension) {
43614
- const field = fields[dimension.fieldName];
43615
- const type = field?.type ?? "integer";
43616
- const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
43617
- return {
43618
- /**
43619
- * Get the display name of the dimension
43620
- * e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
43621
- */
43622
- displayName: field?.string ?? dimension.fieldName,
43623
- /**
43624
- * Get the name of the dimension, as it is stored in the pivot formula
43625
- * e.g. "stage_id", "create_date:month"
43626
- */
43627
- nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
43628
- /**
43629
- * Get the name of the field of the dimension
43630
- * e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
43631
- */
43632
- fieldName: dimension.fieldName,
43633
- /**
43634
- * Get the aggregate operator of the dimension
43635
- * e.g. "stage_id" -> undefined, "create_date:month" -> "month"
43636
- */
43637
- granularity,
43638
- /**
43639
- * Get the type of the field of the dimension
43640
- * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
43641
- */
43642
- type,
43643
- order: dimension.order,
43644
- isValid: !!field
43645
- };
43646
- }
43647
43639
 
43648
43640
  //#endregion
43649
43641
  //#region src/helpers/pivot/spreadsheet_pivot/runtime_definition_spreadsheet_pivot.ts
@@ -46338,11 +46330,11 @@ var FigureComponent = class extends Component {
46338
46330
  getResizerPosition(resizer) {
46339
46331
  const anchorCenteringOffset = (ANCHOR_SIZE - ACTIVE_BORDER_WIDTH) / 2;
46340
46332
  const style = {};
46341
- if (resizer.includes("top")) style.top = `${-anchorCenteringOffset}px`;
46342
- else if (resizer.includes("bottom")) style.bottom = `${-anchorCenteringOffset}px`;
46333
+ if (resizer.includes("top")) style.top = `-3px`;
46334
+ else if (resizer.includes("bottom")) style.bottom = `-3px`;
46343
46335
  else style.bottom = `calc(50% - ${anchorCenteringOffset}px)`;
46344
- if (resizer.includes("left")) style.left = `${-anchorCenteringOffset}px`;
46345
- else if (resizer.includes("right")) style.right = `${-anchorCenteringOffset}px`;
46336
+ if (resizer.includes("left")) style.left = `-3px`;
46337
+ else if (resizer.includes("right")) style.right = `-3px`;
46346
46338
  else style.right = `calc(50% - ${anchorCenteringOffset}px)`;
46347
46339
  return cssPropertiesToCss(style);
46348
46340
  }
@@ -57625,6 +57617,9 @@ var CustomColorsPlugin = class extends CoreViewPlugin {
57625
57617
  case "CREATE_CHART":
57626
57618
  this.tryToAddColors(this.getChartColors(cmd.figureId));
57627
57619
  break;
57620
+ case "COLOR_SHEET":
57621
+ if (cmd.color) this.tryToAddColors([cmd.color]);
57622
+ break;
57628
57623
  case "UPDATE_CELL":
57629
57624
  case "ADD_CONDITIONAL_FORMAT":
57630
57625
  case "SET_BORDER":
@@ -57647,8 +57642,12 @@ var CustomColorsPlugin = class extends CoreViewPlugin {
57647
57642
  }
57648
57643
  computeCustomColors() {
57649
57644
  let usedColors = [];
57650
- for (const sheetId of this.getters.getSheetIds()) usedColors = usedColors.concat(this.getColorsFromCells(sheetId), this.getFormattingColors(sheetId), this.getTableColors(sheetId));
57651
- return [...new Set([...usedColors])];
57645
+ for (const sheetId of this.getters.getSheetIds()) usedColors = usedColors.concat(this.getSheetColors(sheetId), this.getColorsFromCells(sheetId), this.getFormattingColors(sheetId), this.getTableColors(sheetId));
57646
+ return [.../* @__PURE__ */ new Set([...usedColors])];
57647
+ }
57648
+ getSheetColors(sheetId) {
57649
+ const sheet = this.getters.getSheet(sheetId);
57650
+ return sheet.color ? [sheet.color] : [];
57652
57651
  }
57653
57652
  getColorsFromCells(sheetId) {
57654
57653
  const cells = Object.values(this.getters.getCells(sheetId));
@@ -61994,7 +61993,7 @@ var TableComputedStylePlugin = class extends UIPlugin {
61994
61993
  };
61995
61994
  }
61996
61995
  };
61997
- const invalidateTableStyleCommandsSet = new Set([
61996
+ const invalidateTableStyleCommandsSet = /* @__PURE__ */ new Set([
61998
61997
  "HIDE_COLUMNS_ROWS",
61999
61998
  "UNHIDE_COLUMNS_ROWS",
62000
61999
  "UNFOLD_HEADER_GROUP",
@@ -64155,14 +64154,14 @@ var InternalViewport = class {
64155
64154
  adjustPositionX(targetCol) {
64156
64155
  const sheetId = this.sheetId;
64157
64156
  const { start, end } = this.getters.getColDimensions(sheetId, targetCol);
64158
- if (this.offsetX + this.viewportWidth + this.offsetCorrectionX < end) this.offsetX = end - this.viewportWidth;
64157
+ if (this.offsetX + this.viewportWidth + this.offsetCorrectionX < end) this.offsetX = end - this.viewportWidth - this.offsetCorrectionX;
64159
64158
  else if (this.offsetX + this.offsetCorrectionX > start) this.offsetX = start - this.offsetCorrectionX;
64160
64159
  this.adjustViewportZoneX();
64161
64160
  }
64162
64161
  adjustPositionY(targetRow) {
64163
64162
  const sheetId = this.sheetId;
64164
64163
  const { start, end } = this.getters.getRowDimensions(sheetId, targetRow);
64165
- if (this.offsetY + this.viewportHeight + this.offsetCorrectionY < end) this.offsetY = end - this.viewportHeight;
64164
+ if (this.offsetY + this.viewportHeight + this.offsetCorrectionY < end) this.offsetY = end - this.viewportHeight - this.offsetCorrectionY;
64166
64165
  else if (this.offsetY + this.offsetCorrectionY > start) this.offsetY = start - this.offsetCorrectionY;
64167
64166
  this.adjustViewportZoneY();
64168
64167
  }
@@ -65555,11 +65554,14 @@ var BottomBarSheet = class extends Component {
65555
65554
  }
65556
65555
  });
65557
65556
  this.DOMFocusableElementStore = useStore(DOMFocusableElementStore);
65558
- useExternalListener(window, "click", () => this.state.pickerOpened = false);
65557
+ useExternalListener(window, "click", this.onExternalClick.bind(this), { capture: true });
65559
65558
  useEffect((sheetId) => {
65560
65559
  if (this.props.sheetId === sheetId) this.scrollToSheet();
65561
65560
  }, () => [this.env.model.getters.getActiveSheetId()]);
65562
65561
  }
65562
+ onExternalClick(ev) {
65563
+ if (!ev.target.closest(".o-color-picker")) this.state.pickerOpened = false;
65564
+ }
65563
65565
  focusInputAndSelectContent() {
65564
65566
  if (!this.state.isEditing || !this.sheetNameRef.el) return;
65565
65567
  this.sheetNameRef.el.focus();
@@ -65656,6 +65658,8 @@ var BottomBarSheet = class extends Component {
65656
65658
  },
65657
65659
  openSheetColorPickerCallback: () => {
65658
65660
  this.state.pickerOpened = true;
65661
+ const sheet = this.env.model.getters.getSheet(this.props.sheetId);
65662
+ this.state.currentPickerColor = sheet.color;
65659
65663
  }
65660
65664
  });
65661
65665
  }
@@ -69840,11 +69844,11 @@ function addBarChart(chart) {
69840
69844
  <!-- each data marker in the series does not have a different color -->
69841
69845
  <c:varyColors val="0"/>
69842
69846
  ${joinXmlNodes(rightDataSetsNodes)}
69843
- <c:axId val="${catAxId + 1}" />
69844
- <c:axId val="${valAxId + 1}" />
69847
+ <c:axId val="${17781238}" />
69848
+ <c:axId val="${88853994}" />
69845
69849
  </c:barChart>
69846
- ${addAx("b", "c:catAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
69847
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
69850
+ ${addAx("b", "c:catAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
69851
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
69848
69852
  ` : ""}`;
69849
69853
  }
69850
69854
  function addComboChart(chart) {
@@ -69999,11 +70003,11 @@ function addLineChart(chart) {
69999
70003
  <!-- each data marker in the series does not have a different color -->
70000
70004
  <c:varyColors val="0"/>
70001
70005
  ${joinXmlNodes(rightDataSetsNodes)}
70002
- <c:axId val="${catAxId + 1}" />
70003
- <c:axId val="${valAxId + 1}" />
70006
+ <c:axId val="${17781238}" />
70007
+ <c:axId val="${88853994}" />
70004
70008
  </c:lineChart>
70005
- ${addAx("b", "c:catAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
70006
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
70009
+ ${addAx("b", "c:catAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
70010
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
70007
70011
  ` : ""}
70008
70012
  `;
70009
70013
  }
@@ -70065,11 +70069,11 @@ function addScatterChart(chart) {
70065
70069
  <c:varyColors val="0"/>
70066
70070
  <c:scatterStyle val="lineMarker"/>
70067
70071
  ${joinXmlNodes(rightDataSetsNodes)}
70068
- <c:axId val="${catAxId + 1}" />
70069
- <c:axId val="${valAxId + 1}" />
70072
+ <c:axId val="${17781238}" />
70073
+ <c:axId val="${88853994}" />
70070
70074
  </c:scatterChart>
70071
- ${addAx("b", "c:valAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
70072
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
70075
+ ${addAx("b", "c:valAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
70076
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
70073
70077
  ` : ""}`;
70074
70078
  }
70075
70079
  function addRadarChart(chart) {
@@ -72233,6 +72237,6 @@ const chartHelpers = {
72233
72237
  //#endregion
72234
72238
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, CommandResult, CorePlugin, CoreViewPlugin, DispatchResult, EvaluationError, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, chartHelpers, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
72235
72239
 
72236
- __info__.version = "18.3.51";
72237
- __info__.date = "2026-06-17T08:49:41.496Z";
72238
- __info__.hash = "233f3ea";
72240
+ __info__.version = "18.3.54";
72241
+ __info__.date = "2026-07-01T05:01:44.424Z";
72242
+ __info__.hash = "d00e4b6";