@odoo/o-spreadsheet 18.0.70 → 18.0.73

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.70
6
- * @date 2026-06-06T06:20:39.985Z
7
- * @hash 3ff29f6
5
+ * @version 18.0.73
6
+ * @date 2026-07-01T05:00:54.172Z
7
+ * @hash 1a9c761
8
8
  */
9
9
 
10
10
  import { Component, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, xml } from "@odoo/owl";
@@ -185,7 +185,7 @@ const GRAY_300 = "#D8DADD";
185
185
  const GRAY_200 = "#E7E9ED";
186
186
  const GRAY_100 = "#F9FAFB";
187
187
  const TEXT_BODY = "#374151";
188
- const TEXT_BODY_MUTED = TEXT_BODY + "C2";
188
+ const TEXT_BODY_MUTED = "#374151C2";
189
189
  const TEXT_HEADING = "#111827";
190
190
  const PRIMARY_BUTTON_BG = "#714B67";
191
191
  const PRIMARY_BUTTON_HOVER_BG = "#624159";
@@ -291,9 +291,6 @@ const COLOR_PICKER_DEFAULTS = [
291
291
  ];
292
292
  const DEFAULT_CELL_HEIGHT = 23;
293
293
  const FOOTER_HEIGHT = 2 * 23;
294
- const MENU_SEPARATOR_BORDER_WIDTH = 1;
295
- const MENU_SEPARATOR_PADDING = 5;
296
- const MENU_SEPARATOR_HEIGHT = 1 + 2 * 5;
297
294
  const DEFAULT_STYLE = {
298
295
  align: "left",
299
296
  verticalAlign: "bottom",
@@ -313,7 +310,7 @@ const DEFAULT_NUMBER_STYLE = {
313
310
  const DEFAULT_VERTICAL_ALIGN = DEFAULT_STYLE.verticalAlign;
314
311
  const DEFAULT_WRAPPING_MODE = DEFAULT_STYLE.wrapping;
315
312
  const DEFAULT_FONT_SIZE = DEFAULT_STYLE.fontSize;
316
- const DEFAULT_FONT = "'Roboto', arial";
313
+ const DEFAULT_FONT = "'Roboto', arial, 'Liberation Sans'";
317
314
  const DEFAULT_BORDER_DESC = {
318
315
  style: "thin",
319
316
  color: "#000000"
@@ -1489,7 +1486,7 @@ function toXC(col, row, rangePart = {
1489
1486
  function recomputeZones(zones, zonesToRemove = []) {
1490
1487
  if (zones.length <= 1 && zonesToRemove.length === 0) return zones;
1491
1488
  const profilesStartingPosition = [0];
1492
- const profiles = new Map([[0, []]]);
1489
+ const profiles = /* @__PURE__ */ new Map([[0, []]]);
1493
1490
  modifyProfiles(profilesStartingPosition, profiles, zones, false);
1494
1491
  modifyProfiles(profilesStartingPosition, profiles, zonesToRemove, true);
1495
1492
  return constructZonesFromProfiles(profilesStartingPosition, profiles);
@@ -2723,12 +2720,10 @@ const getNumberRegex = memoize(function getNumberRegex(locale) {
2723
2720
  const pIntegerAndDecimals = `(?:\\d+(?:${escapeRegExp(locale.thousandsSeparator || "")}\\d{3,})*(?:${decimalSeparator}\\d*)?)`;
2724
2721
  const pOnlyDecimals = `(?:${decimalSeparator}\\d+)`;
2725
2722
  const pNumber = "(?:\\s*" + pIntegerAndDecimals + "|" + pOnlyDecimals + ")(?:e(?:\\+|-)?\\d+)?(?:\\s*%)?";
2726
- const pMinus = "(?:\\s*-)?";
2727
- const pCurrencyFormat = "(?:\\s*[\\$€])?";
2728
2723
  const pNumberExp = "^(?:(?:" + [
2729
- pMinus + pCurrencyFormat + pNumber,
2730
- pMinus + pNumber + pCurrencyFormat,
2731
- pCurrencyFormat + pMinus + pNumber
2724
+ "(?:\\s*-)?(?:\\s*[\\$€])?" + pNumber,
2725
+ "(?:\\s*-)?" + pNumber + "(?:\\s*[\\$€])?",
2726
+ "(?:\\s*[\\$€])?(?:\\s*-)?" + pNumber
2732
2727
  ].join(")|(?:") + "))$";
2733
2728
  return new RegExp(pNumberExp, "i");
2734
2729
  });
@@ -2791,7 +2786,7 @@ function isPositionDependent(cmd) {
2791
2786
  function isZoneDependent(cmd) {
2792
2787
  return "sheetId" in cmd && "zone" in cmd;
2793
2788
  }
2794
- const invalidateEvaluationCommands = new Set([
2789
+ const invalidateEvaluationCommands = /* @__PURE__ */ new Set([
2795
2790
  "RENAME_SHEET",
2796
2791
  "DELETE_SHEET",
2797
2792
  "CREATE_SHEET",
@@ -2810,7 +2805,7 @@ const invalidateEvaluationCommands = new Set([
2810
2805
  "REMOVE_PIVOT",
2811
2806
  "DUPLICATE_PIVOT"
2812
2807
  ]);
2813
- const invalidateChartEvaluationCommands = new Set([
2808
+ const invalidateChartEvaluationCommands = /* @__PURE__ */ new Set([
2814
2809
  "EVALUATE_CELLS",
2815
2810
  "UPDATE_CELL",
2816
2811
  "UNHIDE_COLUMNS_ROWS",
@@ -2828,20 +2823,20 @@ const invalidateChartEvaluationCommands = new Set([
2828
2823
  "UNDO",
2829
2824
  "REDO"
2830
2825
  ]);
2831
- const invalidateDependenciesCommands = new Set(["MOVE_RANGES"]);
2832
- const invalidateCFEvaluationCommands = new Set([
2826
+ const invalidateDependenciesCommands = /* @__PURE__ */ new Set(["MOVE_RANGES"]);
2827
+ const invalidateCFEvaluationCommands = /* @__PURE__ */ new Set([
2833
2828
  "EVALUATE_CELLS",
2834
2829
  "ADD_CONDITIONAL_FORMAT",
2835
2830
  "REMOVE_CONDITIONAL_FORMAT",
2836
2831
  "CHANGE_CONDITIONAL_FORMAT_PRIORITY"
2837
2832
  ]);
2838
- const invalidateBordersCommands = new Set([
2833
+ const invalidateBordersCommands = /* @__PURE__ */ new Set([
2839
2834
  "AUTOFILL_CELL",
2840
2835
  "SET_BORDER",
2841
2836
  "SET_ZONE_BORDERS",
2842
2837
  "SET_BORDERS_ON_TARGET"
2843
2838
  ]);
2844
- const readonlyAllowedCommands = new Set([
2839
+ const readonlyAllowedCommands = /* @__PURE__ */ new Set([
2845
2840
  "START",
2846
2841
  "ACTIVATE_SHEET",
2847
2842
  "COPY",
@@ -2851,7 +2846,7 @@ const readonlyAllowedCommands = new Set([
2851
2846
  "SET_FORMULA_VISIBILITY",
2852
2847
  "UPDATE_FILTER"
2853
2848
  ]);
2854
- const coreTypes = new Set([
2849
+ const coreTypes = /* @__PURE__ */ new Set([
2855
2850
  "UPDATE_CELL",
2856
2851
  "UPDATE_CELL_POSITION",
2857
2852
  "CLEAR_CELL",
@@ -4944,7 +4939,6 @@ function getDateCriterionFormattedValues(values, locale) {
4944
4939
  //#region src/helpers/edge_scrolling.ts
4945
4940
  const MAX_DELAY = 140;
4946
4941
  const MIN_DELAY = 20;
4947
- const ACCELERATION = .035;
4948
4942
  /**
4949
4943
  * Decreasing exponential function used to determine the "speed" of edge-scrolling
4950
4944
  * as the timeout delay.
@@ -4952,7 +4946,7 @@ const ACCELERATION = .035;
4952
4946
  * Returns a timeout delay in milliseconds.
4953
4947
  */
4954
4948
  function scrollDelay(value) {
4955
- return 20 + (140 - 20) * Math.exp(-ACCELERATION * (value - 1));
4949
+ return 20 + (140 - 20) * Math.exp(-.035 * (value - 1));
4956
4950
  }
4957
4951
 
4958
4952
  //#endregion
@@ -5584,7 +5578,7 @@ var UuidGenerator = class {
5584
5578
  return String(this.fastIdStart);
5585
5579
  } else if (window.crypto) return "10000000-1000".replace(/[01]/g, (c) => {
5586
5580
  const n = Number(c);
5587
- return (n ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
5581
+ return (n ^ crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
5588
5582
  });
5589
5583
  else return "xxxxxxxx-xxxx".replace(/[xy]/g, function(c) {
5590
5584
  var r = Math.random() * 16 | 0;
@@ -5601,7 +5595,7 @@ var UuidGenerator = class {
5601
5595
  return String(this.fastIdStart);
5602
5596
  } else if (window.crypto) return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => {
5603
5597
  const n = Number(c);
5604
- return (n ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
5598
+ return (n ^ crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
5605
5599
  });
5606
5600
  else return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
5607
5601
  var r = Math.random() * 16 | 0;
@@ -7146,10 +7140,10 @@ function toNormalizedPivotValue(dimension, groupValue) {
7146
7140
  type: dimension.type
7147
7141
  }));
7148
7142
  if (groupValueString.toLowerCase() === "false") return false;
7149
- return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension.granularity);
7143
+ return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension);
7150
7144
  }
7151
- function normalizeDateTime(value, granularity) {
7152
- return pivotTimeAdapter(granularity ?? "month").normalizeFunctionValue(value);
7145
+ function normalizeDateTime(value, dimension) {
7146
+ return pivotTimeAdapter(dimension.granularity ?? "month").normalizeFunctionValue(value);
7153
7147
  }
7154
7148
  function toFunctionPivotValue(value, dimension) {
7155
7149
  if (value === null) return `"null"`;
@@ -32693,7 +32687,7 @@ const ITEM_EDGE_LENGTH = 18;
32693
32687
  const ITEMS_PER_LINE = 10;
32694
32688
  const MAGNIFIER_EDGE = 16;
32695
32689
  const ITEM_GAP = 2;
32696
- const CONTENT_WIDTH = ITEMS_PER_LINE * (ITEM_EDGE_LENGTH + 2 * ITEM_BORDER_WIDTH) + (ITEMS_PER_LINE - 1) * ITEM_GAP;
32690
+ const CONTENT_WIDTH = 218;
32697
32691
  const INNER_GRADIENT_WIDTH = CONTENT_WIDTH - 2 * ITEM_BORDER_WIDTH;
32698
32692
  const INNER_GRADIENT_HEIGHT = CONTENT_WIDTH - 30 - 2 * ITEM_BORDER_WIDTH;
32699
32693
  css`
@@ -32705,7 +32699,7 @@ css`
32705
32699
  line-height: 1.2;
32706
32700
  overflow-y: auto;
32707
32701
  overflow-x: hidden;
32708
- width: ${CONTENT_WIDTH + 2 * PICKER_PADDING}px;
32702
+ width: ${234}px;
32709
32703
 
32710
32704
  .o-color-picker-section-name {
32711
32705
  margin: 0px ${ITEM_BORDER_WIDTH}px;
@@ -32777,14 +32771,14 @@ css`
32777
32771
  }
32778
32772
 
32779
32773
  .o-custom-selector {
32780
- padding: ${PICKER_PADDING + 2}px ${PICKER_PADDING}px;
32774
+ padding: ${10}px ${PICKER_PADDING}px;
32781
32775
  position: relative;
32782
32776
  .o-gradient {
32783
32777
  margin-bottom: ${MAGNIFIER_EDGE / 2}px;
32784
32778
  border: ${ITEM_BORDER_WIDTH}px solid #c0c0c0;
32785
32779
  box-sizing: border-box;
32786
- width: ${INNER_GRADIENT_WIDTH + 2 * ITEM_BORDER_WIDTH}px;
32787
- height: ${INNER_GRADIENT_HEIGHT + 2 * ITEM_BORDER_WIDTH}px;
32780
+ width: ${218}px;
32781
+ height: ${188}px;
32788
32782
  position: relative;
32789
32783
  }
32790
32784
 
@@ -32925,8 +32919,8 @@ var ColorPicker = class extends Component {
32925
32919
  const left = Math.round(INNER_GRADIENT_WIDTH * clip(s / 100, 0, 1));
32926
32920
  const top = Math.round(INNER_GRADIENT_HEIGHT * clip(1 - 2 * l / (200 - s), 0, 1));
32927
32921
  return cssPropertiesToCss({
32928
- left: `${-MAGNIFIER_EDGE / 2 + left}px`,
32929
- top: `${-MAGNIFIER_EDGE / 2 + top}px`,
32922
+ left: `${-16 / 2 + left}px`,
32923
+ top: `${-16 / 2 + top}px`,
32930
32924
  background: hslaToHex(this.state.currentHslaColor)
32931
32925
  });
32932
32926
  }
@@ -37217,10 +37211,10 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37217
37211
  allSheetsMatches = [];
37218
37212
  activeSheetMatches = [];
37219
37213
  specificRangeMatches = [];
37214
+ selectedMatchPosition = null;
37220
37215
  currentSearchRegex = null;
37221
37216
  isSearchDirty = false;
37222
37217
  initialShowFormulaState;
37223
- preserveSelectedMatchIndex = false;
37224
37218
  irreplaceableMatchCount = 0;
37225
37219
  notificationStore = this.get(NotificationStore);
37226
37220
  selectedMatchIndex = null;
@@ -37324,7 +37318,10 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37324
37318
  */
37325
37319
  _updateSearch(toSearch, searchOptions) {
37326
37320
  this.searchOptions = searchOptions;
37327
- if (toSearch !== this.toSearch) this.selectedMatchIndex = null;
37321
+ if (toSearch !== this.toSearch) {
37322
+ this.selectedMatchIndex = null;
37323
+ this.selectedMatchPosition = null;
37324
+ }
37328
37325
  this.toSearch = toSearch;
37329
37326
  this.currentSearchRegex = getSearchRegex(this.toSearch, this.searchOptions);
37330
37327
  this.refreshSearch();
@@ -37333,8 +37330,14 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37333
37330
  * refresh the matches according to the current search options
37334
37331
  */
37335
37332
  refreshSearch(jumpToMatchSheet = true) {
37336
- if (!this.preserveSelectedMatchIndex) this.selectedMatchIndex = null;
37337
37333
  this.findMatches();
37334
+ if (this.selectedMatchPosition) if (this.selectedMatchPosition.sheetId !== this.getters.getActiveSheetId()) {
37335
+ this.selectedMatchIndex = null;
37336
+ this.selectedMatchPosition = null;
37337
+ } else {
37338
+ const index = this.searchMatches.findIndex((match) => match.sheetId === this.selectedMatchPosition?.sheetId && match.col === this.selectedMatchPosition?.col && match.row === this.selectedMatchPosition?.row);
37339
+ if (index !== -1) this.selectedMatchIndex = index;
37340
+ }
37338
37341
  this.selectNextCell(0, jumpToMatchSheet);
37339
37342
  }
37340
37343
  getSheetsInSearchOrder() {
@@ -37402,6 +37405,7 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37402
37405
  const matches = this.searchMatches;
37403
37406
  if (!matches.length) {
37404
37407
  this.selectedMatchIndex = null;
37408
+ this.selectedMatchPosition = null;
37405
37409
  return;
37406
37410
  }
37407
37411
  let nextIndex;
@@ -37415,14 +37419,13 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37415
37419
  } else nextIndex = this.selectedMatchIndex + indexChange;
37416
37420
  nextIndex = (nextIndex + matches.length) % matches.length;
37417
37421
  this.selectedMatchIndex = nextIndex;
37422
+ this.selectedMatchPosition = matches[this.selectedMatchIndex];
37418
37423
  const selectedMatch = matches[nextIndex];
37419
37424
  if (jumpToMatchSheet && this.getters.getActiveSheetId() !== selectedMatch.sheetId) {
37420
- this.preserveSelectedMatchIndex = true;
37421
37425
  this.model.dispatch("ACTIVATE_SHEET", {
37422
37426
  sheetIdFrom: this.getters.getActiveSheetId(),
37423
37427
  sheetIdTo: selectedMatch.sheetId
37424
37428
  });
37425
- this.preserveSelectedMatchIndex = false;
37426
37429
  this.isSearchDirty = false;
37427
37430
  }
37428
37431
  this.model.selection.getBackToDefault();
@@ -37433,14 +37436,12 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
37433
37436
  */
37434
37437
  replace() {
37435
37438
  if (this.selectedMatchIndex === null) return;
37436
- this.preserveSelectedMatchIndex = true;
37437
37439
  this.model.dispatch("REPLACE_SEARCH", {
37438
37440
  searchString: this.toSearch,
37439
37441
  replaceWith: this.toReplace,
37440
37442
  matches: [this.searchMatches[this.selectedMatchIndex]],
37441
37443
  searchOptions: this.searchOptions
37442
37444
  });
37443
- this.preserveSelectedMatchIndex = false;
37444
37445
  }
37445
37446
  /**
37446
37447
  * Apply the replace function to all the matches one time.
@@ -38651,8 +38652,8 @@ var PivotRuntimeDefinition = class {
38651
38652
  rows;
38652
38653
  constructor(definition, fields) {
38653
38654
  this.measures = definition.measures.map((measure) => createMeasure(fields, measure));
38654
- this.columns = definition.columns.map((dimension) => createPivotDimension(fields, dimension));
38655
- this.rows = definition.rows.map((dimension) => createPivotDimension(fields, dimension));
38655
+ this.columns = definition.columns.map((dimension) => this.createPivotDimension(fields, dimension));
38656
+ this.rows = definition.rows.map((dimension) => this.createPivotDimension(fields, dimension));
38656
38657
  }
38657
38658
  getDimension(nameWithGranularity) {
38658
38659
  const dimension = this.columns.find((d) => d.nameWithGranularity === nameWithGranularity) || this.rows.find((d) => d.nameWithGranularity === nameWithGranularity);
@@ -38664,6 +38665,40 @@ var PivotRuntimeDefinition = class {
38664
38665
  if (!measure) throw new EvaluationError(_t("Field %s is not a measure", id));
38665
38666
  return measure;
38666
38667
  }
38668
+ createPivotDimension(fields, dimension) {
38669
+ const field = fields[dimension.fieldName];
38670
+ const type = field?.type ?? "integer";
38671
+ const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
38672
+ return {
38673
+ /**
38674
+ * Get the display name of the dimension
38675
+ * e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
38676
+ */
38677
+ displayName: field?.string ?? dimension.fieldName,
38678
+ /**
38679
+ * Get the name of the dimension, as it is stored in the pivot formula
38680
+ * e.g. "stage_id", "create_date:month"
38681
+ */
38682
+ nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
38683
+ /**
38684
+ * Get the name of the field of the dimension
38685
+ * e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
38686
+ */
38687
+ fieldName: dimension.fieldName,
38688
+ /**
38689
+ * Get the aggregate operator of the dimension
38690
+ * e.g. "stage_id" -> undefined, "create_date:month" -> "month"
38691
+ */
38692
+ granularity,
38693
+ /**
38694
+ * Get the type of the field of the dimension
38695
+ * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
38696
+ */
38697
+ type,
38698
+ order: dimension.order,
38699
+ isValid: !!field
38700
+ };
38701
+ }
38667
38702
  };
38668
38703
  function createMeasure(fields, measure) {
38669
38704
  const fieldName = measure.fieldName;
@@ -38707,40 +38742,6 @@ function createMeasure(fields, measure) {
38707
38742
  display: measure.display
38708
38743
  };
38709
38744
  }
38710
- function createPivotDimension(fields, dimension) {
38711
- const field = fields[dimension.fieldName];
38712
- const type = field?.type ?? "integer";
38713
- const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
38714
- return {
38715
- /**
38716
- * Get the display name of the dimension
38717
- * e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
38718
- */
38719
- displayName: field?.string ?? dimension.fieldName,
38720
- /**
38721
- * Get the name of the dimension, as it is stored in the pivot formula
38722
- * e.g. "stage_id", "create_date:month"
38723
- */
38724
- nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
38725
- /**
38726
- * Get the name of the field of the dimension
38727
- * e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
38728
- */
38729
- fieldName: dimension.fieldName,
38730
- /**
38731
- * Get the aggregate operator of the dimension
38732
- * e.g. "stage_id" -> undefined, "create_date:month" -> "month"
38733
- */
38734
- granularity,
38735
- /**
38736
- * Get the type of the field of the dimension
38737
- * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
38738
- */
38739
- type,
38740
- order: dimension.order,
38741
- isValid: !!field
38742
- };
38743
- }
38744
38745
 
38745
38746
  //#endregion
38746
38747
  //#region src/helpers/pivot/spreadsheet_pivot/runtime_definition_spreadsheet_pivot.ts
@@ -41390,11 +41391,11 @@ var FigureComponent = class extends Component {
41390
41391
  getResizerPosition(resizer) {
41391
41392
  const anchorCenteringOffset = (ANCHOR_SIZE - ACTIVE_BORDER_WIDTH) / 2;
41392
41393
  const style = {};
41393
- if (resizer.includes("top")) style.top = `${-anchorCenteringOffset}px`;
41394
- else if (resizer.includes("bottom")) style.bottom = `${-anchorCenteringOffset}px`;
41394
+ if (resizer.includes("top")) style.top = `-3px`;
41395
+ else if (resizer.includes("bottom")) style.bottom = `-3px`;
41395
41396
  else style.bottom = `calc(50% - ${anchorCenteringOffset}px)`;
41396
- if (resizer.includes("left")) style.left = `${-anchorCenteringOffset}px`;
41397
- else if (resizer.includes("right")) style.right = `${-anchorCenteringOffset}px`;
41397
+ if (resizer.includes("left")) style.left = `-3px`;
41398
+ else if (resizer.includes("right")) style.right = `-3px`;
41398
41399
  else style.right = `calc(50% - ${anchorCenteringOffset}px)`;
41399
41400
  return cssPropertiesToCss(style);
41400
41401
  }
@@ -41776,8 +41777,12 @@ var CellComposerStore = class extends AbstractComposerStore {
41776
41777
  }
41777
41778
  stopEdition(direction) {
41778
41779
  if (this.canStopEdition()) {
41780
+ const { col, row } = this.currentEditedCell;
41779
41781
  this._stopEdition();
41780
- if (direction) this.model.selection.moveAnchorCell(direction, 1);
41782
+ if (direction) {
41783
+ this.model.selection.selectCell(col, row);
41784
+ this.model.selection.moveAnchorCell(direction, 1);
41785
+ }
41781
41786
  return;
41782
41787
  }
41783
41788
  const editedCell = this.currentEditedCell;
@@ -52423,6 +52428,9 @@ var CustomColorsPlugin = class extends UIPlugin {
52423
52428
  case "CREATE_CHART":
52424
52429
  this.tryToAddColors(this.getChartColors(cmd.id));
52425
52430
  break;
52431
+ case "COLOR_SHEET":
52432
+ if (cmd.color) this.tryToAddColors([cmd.color]);
52433
+ break;
52426
52434
  case "UPDATE_CELL":
52427
52435
  case "ADD_CONDITIONAL_FORMAT":
52428
52436
  case "SET_BORDER":
@@ -52445,8 +52453,12 @@ var CustomColorsPlugin = class extends UIPlugin {
52445
52453
  }
52446
52454
  computeCustomColors() {
52447
52455
  let usedColors = [];
52448
- for (const sheetId of this.getters.getSheetIds()) usedColors = usedColors.concat(this.getColorsFromCells(sheetId), this.getFormattingColors(sheetId), this.getTableColors(sheetId));
52449
- return [...new Set([...usedColors])];
52456
+ for (const sheetId of this.getters.getSheetIds()) usedColors = usedColors.concat(this.getSheetColors(sheetId), this.getColorsFromCells(sheetId), this.getFormattingColors(sheetId), this.getTableColors(sheetId));
52457
+ return [.../* @__PURE__ */ new Set([...usedColors])];
52458
+ }
52459
+ getSheetColors(sheetId) {
52460
+ const sheet = this.getters.getSheet(sheetId);
52461
+ return sheet.color ? [sheet.color] : [];
52450
52462
  }
52451
52463
  getColorsFromCells(sheetId) {
52452
52464
  const cells = Object.values(this.getters.getCells(sheetId));
@@ -56616,7 +56628,7 @@ var TableComputedStylePlugin = class extends UIPlugin {
56616
56628
  };
56617
56629
  }
56618
56630
  };
56619
- const invalidateTableStyleCommandsSet = new Set([
56631
+ const invalidateTableStyleCommandsSet = /* @__PURE__ */ new Set([
56620
56632
  "HIDE_COLUMNS_ROWS",
56621
56633
  "UNHIDE_COLUMNS_ROWS",
56622
56634
  "UNFOLD_HEADER_GROUP",
@@ -60006,11 +60018,14 @@ var BottomBarSheet = class extends Component {
60006
60018
  }
60007
60019
  });
60008
60020
  this.DOMFocusableElementStore = useStore(DOMFocusableElementStore);
60009
- useExternalListener(window, "click", () => this.state.pickerOpened = false);
60021
+ useExternalListener(window, "click", this.onExternalClick.bind(this), { capture: true });
60010
60022
  useEffect((sheetId) => {
60011
60023
  if (this.props.sheetId === sheetId) this.scrollToSheet();
60012
60024
  }, () => [this.env.model.getters.getActiveSheetId()]);
60013
60025
  }
60026
+ onExternalClick(ev) {
60027
+ if (!ev.target.closest(".o-color-picker")) this.state.pickerOpened = false;
60028
+ }
60014
60029
  focusInputAndSelectContent() {
60015
60030
  if (!this.state.isEditing || !this.sheetNameRef.el) return;
60016
60031
  this.sheetNameRef.el.focus();
@@ -60107,6 +60122,8 @@ var BottomBarSheet = class extends Component {
60107
60122
  },
60108
60123
  openSheetColorPickerCallback: () => {
60109
60124
  this.state.pickerOpened = true;
60125
+ const sheet = this.env.model.getters.getSheet(this.props.sheetId);
60126
+ this.state.currentPickerColor = sheet.color;
60110
60127
  }
60111
60128
  });
60112
60129
  }
@@ -64041,11 +64058,11 @@ function addBarChart(chart) {
64041
64058
  <!-- each data marker in the series does not have a different color -->
64042
64059
  <c:varyColors val="0"/>
64043
64060
  ${joinXmlNodes(rightDataSetsNodes)}
64044
- <c:axId val="${catAxId + 1}" />
64045
- <c:axId val="${valAxId + 1}" />
64061
+ <c:axId val="${17781238}" />
64062
+ <c:axId val="${88853994}" />
64046
64063
  </c:barChart>
64047
- ${addAx("b", "c:catAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
64048
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
64064
+ ${addAx("b", "c:catAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
64065
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
64049
64066
  ` : ""}`;
64050
64067
  }
64051
64068
  function addComboChart(chart) {
@@ -64200,11 +64217,11 @@ function addLineChart(chart) {
64200
64217
  <!-- each data marker in the series does not have a different color -->
64201
64218
  <c:varyColors val="0"/>
64202
64219
  ${joinXmlNodes(rightDataSetsNodes)}
64203
- <c:axId val="${catAxId + 1}" />
64204
- <c:axId val="${valAxId + 1}" />
64220
+ <c:axId val="${17781238}" />
64221
+ <c:axId val="${88853994}" />
64205
64222
  </c:lineChart>
64206
- ${addAx("b", "c:catAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
64207
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
64223
+ ${addAx("b", "c:catAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
64224
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
64208
64225
  ` : ""}
64209
64226
  `;
64210
64227
  }
@@ -64266,11 +64283,11 @@ function addScatterChart(chart) {
64266
64283
  <c:varyColors val="0"/>
64267
64284
  <c:scatterStyle val="lineMarker"/>
64268
64285
  ${joinXmlNodes(rightDataSetsNodes)}
64269
- <c:axId val="${catAxId + 1}" />
64270
- <c:axId val="${valAxId + 1}" />
64286
+ <c:axId val="${17781238}" />
64287
+ <c:axId val="${88853994}" />
64271
64288
  </c:scatterChart>
64272
- ${addAx("b", "c:valAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
64273
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
64289
+ ${addAx("b", "c:valAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
64290
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
64274
64291
  ` : ""}`;
64275
64292
  }
64276
64293
  function addDoughnutChart(chart, chartSheetIndex, data, { holeSize } = { holeSize: 50 }) {
@@ -66329,6 +66346,6 @@ const constants = {
66329
66346
  //#endregion
66330
66347
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
66331
66348
 
66332
- __info__.version = "18.0.70";
66333
- __info__.date = "2026-06-06T06:20:39.985Z";
66334
- __info__.hash = "3ff29f6";
66349
+ __info__.version = "18.0.73";
66350
+ __info__.date = "2026-07-01T05:00:54.172Z";
66351
+ __info__.hash = "1a9c761";