@odoo/o-spreadsheet 19.0.37 → 19.0.41

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.0.37
6
- * @date 2026-06-06T06:22:23.027Z
7
- * @hash 41aace0
5
+ * @version 19.0.41
6
+ * @date 2026-07-01T05:03:21.811Z
7
+ * @hash 346d3c0
8
8
  */
9
9
  /* Originates from src/components/top_bar/top_bar.scss */
10
10
  @media (max-width: 1200px) {
@@ -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.0.37
6
- * @date 2026-06-06T06:22:21.404Z
7
- * @hash 41aace0
5
+ * @version 19.0.41
6
+ * @date 2026-07-01T05:03:20.304Z
7
+ * @hash 346d3c0
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";
@@ -213,7 +213,7 @@ const GRAY_300 = "#D8DADD";
213
213
  const GRAY_200 = "#E7E9ED";
214
214
  const GRAY_100 = "#F9FAFB";
215
215
  const TEXT_BODY = "#374151";
216
- const TEXT_BODY_MUTED = TEXT_BODY + "C2";
216
+ const TEXT_BODY_MUTED = "#374151C2";
217
217
  const TEXT_HEADING = "#111827";
218
218
  const PRIMARY_BUTTON_BG = "#714B67";
219
219
  const PRIMARY_BUTTON_HOVER_BG = "#624159";
@@ -321,9 +321,6 @@ const COLOR_PICKER_DEFAULTS = [
321
321
  ];
322
322
  const DEFAULT_CELL_HEIGHT = 23;
323
323
  const FOOTER_HEIGHT = 2 * 23;
324
- const MENU_SEPARATOR_BORDER_WIDTH = 1;
325
- const MENU_SEPARATOR_PADDING = 5;
326
- const MENU_SEPARATOR_HEIGHT = 1 + 2 * 5;
327
324
  const DEFAULT_STYLE = {
328
325
  align: "left",
329
326
  verticalAlign: "bottom",
@@ -343,7 +340,7 @@ const DEFAULT_NUMBER_STYLE = {
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"
@@ -1672,7 +1669,7 @@ function isPositionDependent(cmd) {
1672
1669
  function isZoneDependent(cmd) {
1673
1670
  return "sheetId" in cmd && "zone" in cmd;
1674
1671
  }
1675
- const invalidateEvaluationCommands = new Set([
1672
+ const invalidateEvaluationCommands = /* @__PURE__ */ new Set([
1676
1673
  "RENAME_SHEET",
1677
1674
  "DELETE_SHEET",
1678
1675
  "CREATE_SHEET",
@@ -1691,7 +1688,7 @@ const invalidateEvaluationCommands = new Set([
1691
1688
  "REMOVE_PIVOT",
1692
1689
  "DUPLICATE_PIVOT"
1693
1690
  ]);
1694
- const invalidateChartEvaluationCommands = new Set([
1691
+ const invalidateChartEvaluationCommands = /* @__PURE__ */ new Set([
1695
1692
  "EVALUATE_CELLS",
1696
1693
  "EVALUATE_CHARTS",
1697
1694
  "UPDATE_CELL",
@@ -1710,20 +1707,20 @@ const invalidateChartEvaluationCommands = new Set([
1710
1707
  "UNDO",
1711
1708
  "REDO"
1712
1709
  ]);
1713
- const invalidateDependenciesCommands = new Set(["MOVE_RANGES"]);
1714
- const invalidateCFEvaluationCommands = new Set([
1710
+ const invalidateDependenciesCommands = /* @__PURE__ */ new Set(["MOVE_RANGES"]);
1711
+ const invalidateCFEvaluationCommands = /* @__PURE__ */ new Set([
1715
1712
  "EVALUATE_CELLS",
1716
1713
  "ADD_CONDITIONAL_FORMAT",
1717
1714
  "REMOVE_CONDITIONAL_FORMAT",
1718
1715
  "CHANGE_CONDITIONAL_FORMAT_PRIORITY"
1719
1716
  ]);
1720
- const invalidateBordersCommands = new Set([
1717
+ const invalidateBordersCommands = /* @__PURE__ */ new Set([
1721
1718
  "AUTOFILL_CELL",
1722
1719
  "SET_BORDER",
1723
1720
  "SET_ZONE_BORDERS",
1724
1721
  "SET_BORDERS_ON_TARGET"
1725
1722
  ]);
1726
- const invalidSubtotalFormulasCommands = new Set([
1723
+ const invalidSubtotalFormulasCommands = /* @__PURE__ */ new Set([
1727
1724
  "UNHIDE_COLUMNS_ROWS",
1728
1725
  "HIDE_COLUMNS_ROWS",
1729
1726
  "GROUP_HEADERS",
@@ -1737,7 +1734,7 @@ const invalidSubtotalFormulasCommands = new Set([
1737
1734
  "UPDATE_TABLE",
1738
1735
  "UPDATE_FILTER"
1739
1736
  ]);
1740
- const readonlyAllowedCommands = new Set([
1737
+ const readonlyAllowedCommands = /* @__PURE__ */ new Set([
1741
1738
  "START",
1742
1739
  "ACTIVATE_SHEET",
1743
1740
  "COPY",
@@ -1751,7 +1748,7 @@ const readonlyAllowedCommands = new Set([
1751
1748
  "UPDATE_CAROUSEL_ACTIVE_ITEM",
1752
1749
  "UPDATE_PIVOT"
1753
1750
  ]);
1754
- const coreTypes = new Set([
1751
+ const coreTypes = /* @__PURE__ */ new Set([
1755
1752
  "UPDATE_CELL",
1756
1753
  "UPDATE_CELL_POSITION",
1757
1754
  "CLEAR_CELL",
@@ -1989,7 +1986,7 @@ let CommandResult = /* @__PURE__ */ function(CommandResult) {
1989
1986
 
1990
1987
  //#endregion
1991
1988
  //#region src/types/conditional_formatting.ts
1992
- const availableConditionalFormatOperators = new Set([
1989
+ const availableConditionalFormatOperators = /* @__PURE__ */ new Set([
1993
1990
  "containsText",
1994
1991
  "notContainsText",
1995
1992
  "isGreaterThan",
@@ -2009,7 +2006,7 @@ const availableConditionalFormatOperators = new Set([
2009
2006
 
2010
2007
  //#endregion
2011
2008
  //#region src/types/data_validation.ts
2012
- const availableDataValidationOperators = new Set([
2009
+ const availableDataValidationOperators = /* @__PURE__ */ new Set([
2013
2010
  "containsText",
2014
2011
  "notContainsText",
2015
2012
  "isEqualText",
@@ -2734,12 +2731,10 @@ const getNumberRegex = memoize(function getNumberRegex(locale) {
2734
2731
  const pIntegerAndDecimals = `(?:\\d+(?:${escapeRegExp(locale.thousandsSeparator || "")}\\d{3,})*(?:${decimalSeparator}\\d*)?)`;
2735
2732
  const pOnlyDecimals = `(?:${decimalSeparator}\\d+)`;
2736
2733
  const pNumber = "(?:\\s*" + pIntegerAndDecimals + "|" + pOnlyDecimals + ")(?:e(?:\\+|-)?\\d+)?(?:\\s*%)?";
2737
- const pMinus = "(?:\\s*-)?";
2738
- const pCurrencyFormat = "(?:\\s*[\\$€])?";
2739
2734
  const pNumberExp = "^(?:(?:" + [
2740
- pMinus + pCurrencyFormat + pNumber,
2741
- pMinus + pNumber + pCurrencyFormat,
2742
- pCurrencyFormat + pMinus + pNumber
2735
+ "(?:\\s*-)?(?:\\s*[\\$€])?" + pNumber,
2736
+ "(?:\\s*-)?" + pNumber + "(?:\\s*[\\$€])?",
2737
+ "(?:\\s*[\\$€])?(?:\\s*-)?" + pNumber
2743
2738
  ].join(")|(?:") + "))$";
2744
2739
  return new RegExp(pNumberExp, "i");
2745
2740
  });
@@ -4676,7 +4671,7 @@ function getDateCriterionFormattedValues(values, locale) {
4676
4671
  function recomputeZones(zones, zonesToRemove = []) {
4677
4672
  if (zones.length <= 1 && zonesToRemove.length === 0) return zones;
4678
4673
  const profilesStartingPosition = [0];
4679
- const profiles = new Map([[0, []]]);
4674
+ const profiles = /* @__PURE__ */ new Map([[0, []]]);
4680
4675
  modifyProfiles(profilesStartingPosition, profiles, zones, false);
4681
4676
  modifyProfiles(profilesStartingPosition, profiles, zonesToRemove, true);
4682
4677
  return constructZonesFromProfiles(profilesStartingPosition, profiles);
@@ -5464,7 +5459,6 @@ function getCanonicalRepresentation(item) {
5464
5459
  //#region src/helpers/edge_scrolling.ts
5465
5460
  const MAX_DELAY = 140;
5466
5461
  const MIN_DELAY = 20;
5467
- const ACCELERATION = .035;
5468
5462
  /**
5469
5463
  * Decreasing exponential function used to determine the "speed" of edge-scrolling
5470
5464
  * as the timeout delay.
@@ -5472,7 +5466,7 @@ const ACCELERATION = .035;
5472
5466
  * Returns a timeout delay in milliseconds.
5473
5467
  */
5474
5468
  function scrollDelay(value) {
5475
- return 20 + (140 - 20) * Math.exp(-ACCELERATION * (value - 1));
5469
+ return 20 + (140 - 20) * Math.exp(-.035 * (value - 1));
5476
5470
  }
5477
5471
 
5478
5472
  //#endregion
@@ -6313,7 +6307,7 @@ var UuidGenerator = class {
6313
6307
  smallUuid() {
6314
6308
  if (window.crypto) return "10000000-1000".replace(/[01]/g, (c) => {
6315
6309
  const n = Number(c);
6316
- return (n ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
6310
+ return (n ^ crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
6317
6311
  });
6318
6312
  else return "xxxxxxxx-xxxx".replace(/[xy]/g, function(c) {
6319
6313
  const r = Math.random() * 16 | 0;
@@ -6327,7 +6321,7 @@ var UuidGenerator = class {
6327
6321
  uuidv4() {
6328
6322
  if (window.crypto) return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => {
6329
6323
  const n = Number(c);
6330
- return (n ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
6324
+ return (n ^ crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(1))[0] & 15 >> n / 4).toString(16);
6331
6325
  });
6332
6326
  else return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
6333
6327
  const r = Math.random() * 16 | 0;
@@ -7878,10 +7872,10 @@ function toNormalizedPivotValue(dimension, groupValue) {
7878
7872
  type: dimension.type
7879
7873
  }));
7880
7874
  if (groupValueString.toLowerCase() === "false") return false;
7881
- return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension.granularity);
7875
+ return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension);
7882
7876
  }
7883
- function normalizeDateTime(value, granularity) {
7884
- return pivotTimeAdapter(granularity ?? "month").normalizeFunctionValue(value);
7877
+ function normalizeDateTime(value, dimension) {
7878
+ return pivotTimeAdapter(dimension.granularity ?? "month").normalizeFunctionValue(value);
7885
7879
  }
7886
7880
  function toFunctionPivotValue(value, dimension) {
7887
7881
  if (value === null) return `"null"`;
@@ -23511,9 +23505,7 @@ var ZoomableChartJsComponent = class extends ChartJsComponent {
23511
23505
  this.removeEventListeners();
23512
23506
  }
23513
23507
  get containerStyle() {
23514
- return `
23515
- height:${this.sliceable ? `calc(100% - ${60}px)` : "100%"};
23516
- `;
23508
+ return cssPropertiesToCss({ height: this.sliceable ? `calc(100% - ${60}px)` : "100%" });
23517
23509
  }
23518
23510
  get masterChartContainerStyle() {
23519
23511
  const runtime = this.env.model.getters.getChartRuntime(this.props.chartId);
@@ -28189,11 +28181,11 @@ var FigureComponent = class extends Component {
28189
28181
  getResizerPosition(resizer) {
28190
28182
  const anchorCenteringOffset = (ANCHOR_SIZE - ACTIVE_BORDER_WIDTH) / 2;
28191
28183
  const style = {};
28192
- if (resizer.includes("top")) style.top = `${-anchorCenteringOffset}px`;
28193
- else if (resizer.includes("bottom")) style.bottom = `${-anchorCenteringOffset}px`;
28184
+ if (resizer.includes("top")) style.top = `-3px`;
28185
+ else if (resizer.includes("bottom")) style.bottom = `-3px`;
28194
28186
  else style.bottom = `calc(50% - ${anchorCenteringOffset}px)`;
28195
- if (resizer.includes("left")) style.left = `${-anchorCenteringOffset}px`;
28196
- else if (resizer.includes("right")) style.right = `${-anchorCenteringOffset}px`;
28187
+ if (resizer.includes("left")) style.left = `-3px`;
28188
+ else if (resizer.includes("right")) style.right = `-3px`;
28197
28189
  else style.right = `calc(50% - ${anchorCenteringOffset}px)`;
28198
28190
  return cssPropertiesToCss(style);
28199
28191
  }
@@ -31104,11 +31096,10 @@ function startDnd(onPointerMove, onPointerUp) {
31104
31096
  const LINE_VERTICAL_PADDING = 1;
31105
31097
  const PICKER_PADDING = 8;
31106
31098
  const ITEM_BORDER_WIDTH = 1;
31107
- const ITEM_EDGE_LENGTH = 18;
31108
31099
  const ITEMS_PER_LINE = 10;
31109
31100
  const MAGNIFIER_EDGE = 16;
31110
31101
  const ITEM_GAP = 2;
31111
- const CONTENT_WIDTH = ITEMS_PER_LINE * (ITEM_EDGE_LENGTH + 2 * ITEM_BORDER_WIDTH) + (ITEMS_PER_LINE - 1) * ITEM_GAP;
31102
+ const CONTENT_WIDTH = 218;
31112
31103
  const INNER_GRADIENT_WIDTH = CONTENT_WIDTH - 2 * ITEM_BORDER_WIDTH;
31113
31104
  const INNER_GRADIENT_HEIGHT = CONTENT_WIDTH - 30 - 2 * ITEM_BORDER_WIDTH;
31114
31105
  css`
@@ -31120,7 +31111,7 @@ css`
31120
31111
  line-height: 1.2;
31121
31112
  overflow-y: auto;
31122
31113
  overflow-x: hidden;
31123
- width: ${CONTENT_WIDTH + 2 * PICKER_PADDING}px;
31114
+ width: ${234}px;
31124
31115
 
31125
31116
  .o-color-picker-section-name {
31126
31117
  margin: 0px ${ITEM_BORDER_WIDTH}px;
@@ -31146,8 +31137,8 @@ css`
31146
31137
  }
31147
31138
  }
31148
31139
  .o-color-picker-line-item {
31149
- width: ${ITEM_EDGE_LENGTH + 2 * ITEM_BORDER_WIDTH}px;
31150
- height: ${ITEM_EDGE_LENGTH + 2 * ITEM_BORDER_WIDTH}px;
31140
+ width: ${20}px;
31141
+ height: ${20}px;
31151
31142
  margin: 0px;
31152
31143
  border-radius: 50px;
31153
31144
  border: ${ITEM_BORDER_WIDTH}px solid #666666;
@@ -31191,13 +31182,13 @@ css`
31191
31182
  }
31192
31183
 
31193
31184
  .o-custom-selector {
31194
- padding: ${PICKER_PADDING + 2}px ${PICKER_PADDING}px;
31185
+ padding: ${10}px ${PICKER_PADDING}px;
31195
31186
  position: relative;
31196
31187
  .o-gradient {
31197
31188
  margin-bottom: ${MAGNIFIER_EDGE / 2}px;
31198
31189
  border: ${ITEM_BORDER_WIDTH}px solid #c0c0c0;
31199
- width: ${INNER_GRADIENT_WIDTH + 2 * ITEM_BORDER_WIDTH}px;
31200
- height: ${INNER_GRADIENT_HEIGHT + 2 * ITEM_BORDER_WIDTH}px;
31190
+ width: ${218}px;
31191
+ height: ${188}px;
31201
31192
  position: relative;
31202
31193
  }
31203
31194
 
@@ -31335,8 +31326,8 @@ var ColorPicker = class extends Component {
31335
31326
  const left = Math.round(INNER_GRADIENT_WIDTH * clip(s / 100, 0, 1));
31336
31327
  const top = Math.round(INNER_GRADIENT_HEIGHT * clip(1 - 2 * l / (200 - s), 0, 1));
31337
31328
  return cssPropertiesToCss({
31338
- left: `${-MAGNIFIER_EDGE / 2 + left}px`,
31339
- top: `${-MAGNIFIER_EDGE / 2 + top}px`,
31329
+ left: `${-16 / 2 + left}px`,
31330
+ top: `${-16 / 2 + top}px`,
31340
31331
  background: hslaToHex(this.state.currentHslaColor)
31341
31332
  });
31342
31333
  }
@@ -33521,17 +33512,16 @@ linkMenuRegistry.add("sheet", {
33521
33512
 
33522
33513
  //#endregion
33523
33514
  //#region src/components/link/link_editor/link_editor.ts
33524
- const PADDING = 12;
33525
33515
  css`
33526
33516
  .o-link-editor {
33527
33517
  font-size: 13px;
33528
33518
  background-color: white;
33529
33519
  box-shadow: 0 1px 4px 3px rgba(60, 64, 67, 0.15);
33530
- padding: ${PADDING}px;
33520
+ padding: ${12}px;
33531
33521
  display: flex;
33532
33522
  flex-direction: column;
33533
33523
  border-radius: 4px;
33534
- width: ${340 + 2 * PADDING}px;
33524
+ width: ${364}px;
33535
33525
 
33536
33526
  .o-section {
33537
33527
  .o-section-title {
@@ -43584,8 +43574,12 @@ var CellComposerStore = class extends AbstractComposerStore {
43584
43574
  }
43585
43575
  stopEdition(direction) {
43586
43576
  if (this.canStopEdition()) {
43577
+ const { col, row } = this.currentEditedCell;
43587
43578
  this._stopEdition();
43588
- if (direction) this.model.selection.moveAnchorCell(direction, 1);
43579
+ if (direction) {
43580
+ this.model.selection.selectCell(col, row);
43581
+ this.model.selection.moveAnchorCell(direction, 1);
43582
+ }
43589
43583
  return;
43590
43584
  }
43591
43585
  const editedCell = this.currentEditedCell;
@@ -51415,9 +51409,9 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
51415
51409
  allSheetsMatches = [];
51416
51410
  activeSheetMatches = [];
51417
51411
  specificRangeMatches = [];
51412
+ selectedMatchPosition = null;
51418
51413
  currentSearchRegex = null;
51419
51414
  initialShowFormulaState;
51420
- preserveSelectedMatchIndex = false;
51421
51415
  irreplaceableMatchCount = 0;
51422
51416
  isSearchDirty = false;
51423
51417
  shouldFinalizeUpdateSelection = false;
@@ -51539,7 +51533,10 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
51539
51533
  */
51540
51534
  _updateSearch(toSearch, searchOptions) {
51541
51535
  this.searchOptions = searchOptions;
51542
- if (toSearch !== this.toSearch) this.selectedMatchIndex = null;
51536
+ if (toSearch !== this.toSearch) {
51537
+ this.selectedMatchIndex = null;
51538
+ this.selectedMatchPosition = null;
51539
+ }
51543
51540
  this.toSearch = toSearch;
51544
51541
  this.currentSearchRegex = getSearchRegex(this.toSearch, this.searchOptions);
51545
51542
  this.refreshSearch({
@@ -51551,8 +51548,14 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
51551
51548
  * refresh the matches according to the current search options
51552
51549
  */
51553
51550
  refreshSearch(options) {
51554
- if (!this.preserveSelectedMatchIndex) this.selectedMatchIndex = null;
51555
51551
  this.findMatches();
51552
+ if (this.selectedMatchPosition) if (this.selectedMatchPosition.sheetId !== this.getters.getActiveSheetId()) {
51553
+ this.selectedMatchIndex = null;
51554
+ this.selectedMatchPosition = null;
51555
+ } else {
51556
+ const index = this.searchMatches.findIndex((match) => match.sheetId === this.selectedMatchPosition?.sheetId && match.col === this.selectedMatchPosition?.col && match.row === this.selectedMatchPosition?.row);
51557
+ if (index !== -1) this.selectedMatchIndex = index;
51558
+ }
51556
51559
  this.selectNextCell(0, options);
51557
51560
  }
51558
51561
  getSheetsInSearchOrder() {
@@ -51620,6 +51623,7 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
51620
51623
  const matches = this.searchMatches;
51621
51624
  if (!matches.length) {
51622
51625
  this.selectedMatchIndex = null;
51626
+ this.selectedMatchPosition = null;
51623
51627
  return;
51624
51628
  }
51625
51629
  let nextIndex;
@@ -51633,14 +51637,13 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
51633
51637
  } else nextIndex = this.selectedMatchIndex + indexChange;
51634
51638
  nextIndex = (nextIndex + matches.length) % matches.length;
51635
51639
  this.selectedMatchIndex = nextIndex;
51640
+ this.selectedMatchPosition = matches[this.selectedMatchIndex];
51636
51641
  const selectedMatch = matches[nextIndex];
51637
51642
  if (options.jumpToMatchSheet && this.getters.getActiveSheetId() !== selectedMatch.sheetId) {
51638
- this.preserveSelectedMatchIndex = true;
51639
51643
  this.model.dispatch("ACTIVATE_SHEET", {
51640
51644
  sheetIdFrom: this.getters.getActiveSheetId(),
51641
51645
  sheetIdTo: selectedMatch.sheetId
51642
51646
  });
51643
- this.preserveSelectedMatchIndex = false;
51644
51647
  this.isSearchDirty = false;
51645
51648
  }
51646
51649
  this.model.selection.getBackToDefault();
@@ -51651,7 +51654,6 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
51651
51654
  */
51652
51655
  replace() {
51653
51656
  if (this.selectedMatchIndex === null) return;
51654
- this.preserveSelectedMatchIndex = true;
51655
51657
  this.shouldFinalizeUpdateSelection = true;
51656
51658
  this.model.dispatch("REPLACE_SEARCH", {
51657
51659
  searchString: this.toSearch,
@@ -51659,7 +51661,6 @@ var FindAndReplaceStore = class extends SpreadsheetStore {
51659
51661
  matches: [this.searchMatches[this.selectedMatchIndex]],
51660
51662
  searchOptions: this.searchOptions
51661
51663
  });
51662
- this.preserveSelectedMatchIndex = false;
51663
51664
  }
51664
51665
  /**
51665
51666
  * Apply the replace function to all the matches one time.
@@ -55103,7 +55104,7 @@ var Grid = class extends Component {
55103
55104
  ev.preventDefault();
55104
55105
  const clipboardData = ev.clipboardData;
55105
55106
  if (!clipboardData) return;
55106
- const image = [...clipboardData.files]?.find((file) => AllowedImageMimeTypes.includes(file.type));
55107
+ const image = [...clipboardData.files].find((file) => AllowedImageMimeTypes.includes(file.type));
55107
55108
  const osClipboard = { content: {
55108
55109
  ["text/plain"]: clipboardData?.getData("text/plain"),
55109
55110
  ["text/html"]: clipboardData?.getData("text/html")
@@ -61048,7 +61049,7 @@ var ZoneRBush = class extends import_rbush_min.default {
61048
61049
  //#region src/plugins/ui_core_views/cell_evaluation/zone_set.ts
61049
61050
  var ZoneSet = class ZoneSet {
61050
61051
  profilesStartingPosition = [0];
61051
- profiles = new Map([[0, []]]);
61052
+ profiles = /* @__PURE__ */ new Map([[0, []]]);
61052
61053
  constructor(zones = []) {
61053
61054
  for (const zone of zones) this.add(zone);
61054
61055
  }
@@ -62217,12 +62218,22 @@ var CustomColorsPlugin = class extends CoreViewPlugin {
62217
62218
  handle(cmd) {
62218
62219
  switch (cmd.type) {
62219
62220
  case "START":
62220
- for (const sheetId of this.getters.getSheetIds()) for (const chartId of this.getters.getChartIds(sheetId)) this.tryToAddColors(this.getChartColors(chartId));
62221
+ for (const sheetId of this.getters.getSheetIds()) {
62222
+ for (const chartId of this.getters.getChartIds(sheetId)) this.tryToAddColors(this.getChartColors(chartId));
62223
+ for (const figureId of this.getters.getFigures(sheetId)) this.tryToAddColors(this.getCarouselColors(sheetId, figureId.id));
62224
+ }
62221
62225
  break;
62222
62226
  case "UPDATE_CHART":
62223
62227
  case "CREATE_CHART":
62224
62228
  this.tryToAddColors(this.getChartColors(cmd.chartId));
62225
62229
  break;
62230
+ case "CREATE_CAROUSEL":
62231
+ case "UPDATE_CAROUSEL":
62232
+ this.tryToAddColors(this.getCarouselColors(cmd.sheetId, cmd.figureId));
62233
+ break;
62234
+ case "COLOR_SHEET":
62235
+ if (cmd.color) this.tryToAddColors([cmd.color]);
62236
+ break;
62226
62237
  case "UPDATE_CELL":
62227
62238
  case "ADD_CONDITIONAL_FORMAT":
62228
62239
  case "SET_BORDER":
@@ -62245,8 +62256,12 @@ var CustomColorsPlugin = class extends CoreViewPlugin {
62245
62256
  }
62246
62257
  computeCustomColors() {
62247
62258
  let usedColors = [];
62248
- for (const sheetId of this.getters.getSheetIds()) usedColors = usedColors.concat(this.getColorsFromCells(sheetId), this.getFormattingColors(sheetId), this.getTableColors(sheetId));
62249
- return [...new Set([...usedColors])];
62259
+ for (const sheetId of this.getters.getSheetIds()) usedColors = usedColors.concat(this.getSheetColors(sheetId), this.getColorsFromCells(sheetId), this.getFormattingColors(sheetId), this.getTableColors(sheetId));
62260
+ return [.../* @__PURE__ */ new Set([...usedColors])];
62261
+ }
62262
+ getSheetColors(sheetId) {
62263
+ const sheet = this.getters.getSheet(sheetId);
62264
+ return sheet.color ? [sheet.color] : [];
62250
62265
  }
62251
62266
  getColorsFromCells(sheetId) {
62252
62267
  const cells = Object.values(this.getters.getCells(sheetId));
@@ -62279,6 +62294,11 @@ var CustomColorsPlugin = class extends CoreViewPlugin {
62279
62294
  if (chart === void 0) return [];
62280
62295
  return [...JSON.stringify(chart.getDefinition()).matchAll(chartColorRegex)].map((color) => color[1]);
62281
62296
  }
62297
+ getCarouselColors(sheetId, figureId) {
62298
+ if (this.getters.getFigure(sheetId, figureId)?.tag !== "carousel") return [];
62299
+ const titleColor = this.getters.getCarousel(figureId).title?.color;
62300
+ return titleColor ? [titleColor] : [];
62301
+ }
62282
62302
  getTableColors(sheetId) {
62283
62303
  return this.getters.getTables(sheetId).flatMap((table) => {
62284
62304
  const config = table.config;
@@ -62911,7 +62931,7 @@ iconsOnCellRegistry.add("pivot_collapse", (getters, position) => {
62911
62931
  const definition = getters.getPivotCoreDefinition(pivotId);
62912
62932
  const isDashboard = getters.isDashboard();
62913
62933
  const fields = pivotCell.dimension === "COL" ? definition.columns : definition.rows;
62914
- const hasIcon = !isDashboard && pivotCell.domain.length !== fields.length;
62934
+ const hasIcon = !isDashboard && !getters.shouldShowFormulas() && pivotCell.domain.length !== fields.length;
62915
62935
  const isCollapsed = (definition.collapsedDomains?.[pivotCell.dimension] ?? []).some((domain) => deepEquals(domain, pivotCell.domain));
62916
62936
  const indent = pivotCell.dimension === "ROW" ? (pivotCell.domain.length - 1) * 15 : 0;
62917
62937
  return {
@@ -67260,7 +67280,7 @@ var TableComputedStylePlugin = class extends UIPlugin {
67260
67280
  };
67261
67281
  }
67262
67282
  };
67263
- const invalidateTableStyleCommandsSet = new Set([
67283
+ const invalidateTableStyleCommandsSet = /* @__PURE__ */ new Set([
67264
67284
  "HIDE_COLUMNS_ROWS",
67265
67285
  "UNHIDE_COLUMNS_ROWS",
67266
67286
  "UNFOLD_HEADER_GROUP",
@@ -69539,14 +69559,14 @@ var InternalViewport = class {
69539
69559
  adjustPositionX(targetCol) {
69540
69560
  const sheetId = this.sheetId;
69541
69561
  const { start, end } = this.getters.getColDimensions(sheetId, targetCol);
69542
- if (this.offsetX + this.viewportWidth + this.offsetCorrectionX < end) this.offsetX = end - this.viewportWidth;
69562
+ if (this.offsetX + this.viewportWidth + this.offsetCorrectionX < end) this.offsetX = end - this.viewportWidth - this.offsetCorrectionX;
69543
69563
  else if (this.offsetX + this.offsetCorrectionX > start) this.offsetX = start - this.offsetCorrectionX;
69544
69564
  this.adjustViewportZoneX();
69545
69565
  }
69546
69566
  adjustPositionY(targetRow) {
69547
69567
  const sheetId = this.sheetId;
69548
69568
  const { start, end } = this.getters.getRowDimensions(sheetId, targetRow);
69549
- if (this.offsetY + this.viewportHeight + this.offsetCorrectionY < end) this.offsetY = end - this.viewportHeight;
69569
+ if (this.offsetY + this.viewportHeight + this.offsetCorrectionY < end) this.offsetY = end - this.viewportHeight - this.offsetCorrectionY;
69550
69570
  else if (this.offsetY + this.offsetCorrectionY > start) this.offsetY = start - this.offsetCorrectionY;
69551
69571
  this.adjustViewportZoneY();
69552
69572
  }
@@ -72160,11 +72180,14 @@ var BottomBarSheet = class extends Component {
72160
72180
  }
72161
72181
  });
72162
72182
  this.DOMFocusableElementStore = useStore(DOMFocusableElementStore);
72163
- useExternalListener(window, "click", () => this.state.pickerOpened = false);
72183
+ useExternalListener(window, "click", this.onExternalClick.bind(this), { capture: true });
72164
72184
  useEffect((sheetId) => {
72165
72185
  if (this.props.sheetId === sheetId) this.scrollToSheet();
72166
72186
  }, () => [this.env.model.getters.getActiveSheetId()]);
72167
72187
  }
72188
+ onExternalClick(ev) {
72189
+ if (!ev.target.closest(".o-color-picker")) this.state.pickerOpened = false;
72190
+ }
72168
72191
  focusInputAndSelectContent() {
72169
72192
  if (!this.state.isEditing || !this.sheetNameRef.el) return;
72170
72193
  this.sheetNameRef.el.focus();
@@ -72266,6 +72289,8 @@ var BottomBarSheet = class extends Component {
72266
72289
  },
72267
72290
  openSheetColorPickerCallback: () => {
72268
72291
  this.state.pickerOpened = true;
72292
+ const sheet = this.env.model.getters.getSheet(this.props.sheetId);
72293
+ this.state.currentPickerColor = sheet.color;
72269
72294
  }
72270
72295
  });
72271
72296
  }
@@ -76825,11 +76850,11 @@ function addBarChart(chart) {
76825
76850
  <!-- each data marker in the series does not have a different color -->
76826
76851
  <c:varyColors val="0"/>
76827
76852
  ${joinXmlNodes(rightDataSetsNodes)}
76828
- <c:axId val="${catAxId + 1}" />
76829
- <c:axId val="${valAxId + 1}" />
76853
+ <c:axId val="${17781238}" />
76854
+ <c:axId val="${88853994}" />
76830
76855
  </c:barChart>
76831
- ${addAx("b", "c:catAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
76832
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
76856
+ ${addAx("b", "c:catAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
76857
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
76833
76858
  ` : ""}`;
76834
76859
  }
76835
76860
  function addComboChart(chart) {
@@ -77067,11 +77092,11 @@ function addLineChart(chart) {
77067
77092
  <!-- each data marker in the series does not have a different color -->
77068
77093
  <c:varyColors val="0"/>
77069
77094
  ${joinXmlNodes(rightDataSetsNodes)}
77070
- <c:axId val="${catAxId + 1}" />
77071
- <c:axId val="${valAxId + 1}" />
77095
+ <c:axId val="${17781238}" />
77096
+ <c:axId val="${88853994}" />
77072
77097
  </c:lineChart>
77073
- ${addAx("b", "c:catAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
77074
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
77098
+ ${addAx("b", "c:catAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
77099
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
77075
77100
  ` : ""}
77076
77101
  `;
77077
77102
  }
@@ -77134,11 +77159,11 @@ function addScatterChart(chart) {
77134
77159
  <c:varyColors val="0"/>
77135
77160
  <c:scatterStyle val="lineMarker"/>
77136
77161
  ${joinXmlNodes(rightDataSetsNodes)}
77137
- <c:axId val="${catAxId + 1}" />
77138
- <c:axId val="${valAxId + 1}" />
77162
+ <c:axId val="${17781238}" />
77163
+ <c:axId val="${88853994}" />
77139
77164
  </c:scatterChart>
77140
- ${addAx("b", "c:valAx", catAxId + 1, valAxId + 1, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
77141
- ${addAx("r", "c:valAx", valAxId + 1, catAxId + 1, chart.axesDesign?.y1?.title, chart.fontColor)}
77165
+ ${addAx("b", "c:valAx", 17781238, 88853994, chart.axesDesign?.x?.title, chart.fontColor, leftDataSetsNodes.length ? 1 : 0)}
77166
+ ${addAx("r", "c:valAx", 88853994, 17781238, chart.axesDesign?.y1?.title, chart.fontColor)}
77142
77167
  ` : ""}`;
77143
77168
  }
77144
77169
  function addRadarChart(chart) {
@@ -79331,6 +79356,6 @@ const chartHelpers = {
79331
79356
  //#endregion
79332
79357
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CorePlugin, CoreViewPlugin, DispatchResult, EvaluationError, LocalTransportService, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, chartHelpers, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
79333
79358
 
79334
- __info__.version = "19.0.37";
79335
- __info__.date = "2026-06-06T06:22:21.404Z";
79336
- __info__.hash = "41aace0";
79359
+ __info__.version = "19.0.41";
79360
+ __info__.date = "2026-07-01T05:03:20.304Z";
79361
+ __info__.hash = "346d3c0";