@odoo/o-spreadsheet 16.0.17 → 16.0.19

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.
@@ -1010,13 +1010,17 @@ function getAddHeaderStartIndex(position, base) {
1010
1010
  return position === "after" ? base + 1 : base;
1011
1011
  }
1012
1012
  /**
1013
- * Compare two objects.
1013
+ * Compares two objects.
1014
1014
  */
1015
1015
  function deepEquals(o1, o2) {
1016
1016
  if (o1 === o2)
1017
1017
  return true;
1018
1018
  if ((o1 && !o2) || (o2 && !o1))
1019
1019
  return false;
1020
+ if (typeof o1 !== typeof o2)
1021
+ return false;
1022
+ if (typeof o1 !== "object")
1023
+ return o1 === o2;
1020
1024
  // Objects can have different keys if the values are undefined
1021
1025
  const keys = new Set();
1022
1026
  Object.keys(o1).forEach((key) => keys.add(key));
@@ -3519,6 +3523,7 @@ css /* scss */ `
3519
3523
  background-color: white;
3520
3524
  border-left: 3px solid red;
3521
3525
  padding: 10px;
3526
+ overflow-wrap: break-word;
3522
3527
  }
3523
3528
  `;
3524
3529
  class ErrorToolTip extends owl.Component {
@@ -5035,6 +5040,13 @@ const REMOVE_ROWS_ACTION = (env) => {
5035
5040
  elements: rows,
5036
5041
  });
5037
5042
  };
5043
+ const CAN_REMOVE_COLUMNS_ROWS = (dimension, env) => {
5044
+ const sheetId = env.model.getters.getActiveSheetId();
5045
+ const selectedElements = env.model.getters.getElementsFromSelection(dimension);
5046
+ const includesAllVisibleHeaders = env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, dimension, selectedElements);
5047
+ const includesAllNonFrozenHeaders = env.model.getters.checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, selectedElements);
5048
+ return !includesAllVisibleHeaders && !includesAllNonFrozenHeaders;
5049
+ };
5038
5050
  const REMOVE_COLUMNS_NAME = (env) => {
5039
5051
  if (env.model.getters.getSelectedZones().length > 1) {
5040
5052
  return _lt("Delete columns");
@@ -5639,11 +5651,7 @@ colMenuRegistry
5639
5651
  name: REMOVE_COLUMNS_NAME,
5640
5652
  sequence: 90,
5641
5653
  action: REMOVE_COLUMNS_ACTION,
5642
- isVisible: (env) => {
5643
- const sheetId = env.model.getters.getActiveSheetId();
5644
- const selectedCols = env.model.getters.getElementsFromSelection("COL");
5645
- return env.model.getters.canRemoveHeaders(sheetId, "COL", selectedCols);
5646
- },
5654
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
5647
5655
  })
5648
5656
  .add("clear_column", {
5649
5657
  name: DELETE_CONTENT_COLUMNS_NAME,
@@ -5657,7 +5665,7 @@ colMenuRegistry
5657
5665
  isVisible: (env) => {
5658
5666
  const sheetId = env.model.getters.getActiveSheetId();
5659
5667
  const selectedCols = env.model.getters.getElementsFromSelection("COL");
5660
- return env.model.getters.canRemoveHeaders(sheetId, "COL", selectedCols);
5668
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "COL", selectedCols);
5661
5669
  },
5662
5670
  separator: true,
5663
5671
  })
@@ -5731,11 +5739,7 @@ rowMenuRegistry
5731
5739
  name: REMOVE_ROWS_NAME,
5732
5740
  sequence: 70,
5733
5741
  action: REMOVE_ROWS_ACTION,
5734
- isVisible: (env) => {
5735
- const sheetId = env.model.getters.getActiveSheetId();
5736
- const selectedRows = env.model.getters.getElementsFromSelection("ROW");
5737
- return env.model.getters.canRemoveHeaders(sheetId, "ROW", selectedRows);
5738
- },
5742
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
5739
5743
  })
5740
5744
  .add("clear_row", {
5741
5745
  name: DELETE_CONTENT_ROWS_NAME,
@@ -5749,7 +5753,7 @@ rowMenuRegistry
5749
5753
  isVisible: (env) => {
5750
5754
  const sheetId = env.model.getters.getActiveSheetId();
5751
5755
  const selectedRows = env.model.getters.getElementsFromSelection("ROW");
5752
- return env.model.getters.canRemoveHeaders(sheetId, "ROW", selectedRows);
5756
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "ROW", selectedRows);
5753
5757
  },
5754
5758
  separator: true,
5755
5759
  })
@@ -6043,11 +6047,13 @@ topbarMenuRegistry
6043
6047
  name: REMOVE_ROWS_NAME,
6044
6048
  sequence: 80,
6045
6049
  action: REMOVE_ROWS_ACTION,
6050
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
6046
6051
  })
6047
6052
  .addChild("edit_delete_column", ["edit"], {
6048
6053
  name: REMOVE_COLUMNS_NAME,
6049
6054
  sequence: 90,
6050
6055
  action: REMOVE_COLUMNS_ACTION,
6056
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
6051
6057
  })
6052
6058
  .addChild("edit_delete_cell_shift_up", ["edit"], {
6053
6059
  name: _lt("Delete cell and shift up"),
@@ -7814,6 +7820,7 @@ class LineChart extends AbstractChart {
7814
7820
  this.legendPosition = definition.legendPosition;
7815
7821
  this.labelsAsText = definition.labelsAsText;
7816
7822
  this.stacked = definition.stacked;
7823
+ this.cumulative = definition.cumulative;
7817
7824
  }
7818
7825
  static validateChartDefinition(validator, definition) {
7819
7826
  return validator.checkValidations(definition, checkDataset, checkLabelRange);
@@ -7833,6 +7840,7 @@ class LineChart extends AbstractChart {
7833
7840
  verticalAxisPosition: "left",
7834
7841
  labelRange: context.auxiliaryRange || undefined,
7835
7842
  stacked: false,
7843
+ cumulative: false,
7836
7844
  };
7837
7845
  }
7838
7846
  getDefinition() {
@@ -7852,6 +7860,7 @@ class LineChart extends AbstractChart {
7852
7860
  title: this.title,
7853
7861
  labelsAsText: this.labelsAsText,
7854
7862
  stacked: this.stacked,
7863
+ cumulative: this.cumulative,
7855
7864
  };
7856
7865
  }
7857
7866
  getContextCreation() {
@@ -8036,6 +8045,16 @@ function createLineChartRuntime(chart, getters) {
8036
8045
  if (chart.stacked) {
8037
8046
  backgroundRGBA.a = LINE_FILL_TRANSPARENCY;
8038
8047
  }
8048
+ if (chart.cumulative) {
8049
+ let accumulator = 0;
8050
+ data = data.map((value) => {
8051
+ if (!isNaN(value)) {
8052
+ accumulator += parseFloat(value);
8053
+ return accumulator;
8054
+ }
8055
+ return value;
8056
+ });
8057
+ }
8039
8058
  const backgroundColor = rgbaToHex(backgroundRGBA);
8040
8059
  const dataset = {
8041
8060
  label,
@@ -8821,6 +8840,11 @@ class LineConfigPanel extends LineBarPieConfigPanel {
8821
8840
  stacked: ev.target.checked,
8822
8841
  });
8823
8842
  }
8843
+ onUpdateCumulative(ev) {
8844
+ this.props.updateChart(this.props.figureId, {
8845
+ cumulative: ev.target.checked,
8846
+ });
8847
+ }
8824
8848
  }
8825
8849
  LineConfigPanel.template = "o-spreadsheet-LineConfigPanel";
8826
8850
 
@@ -21280,9 +21304,11 @@ function useCellHovered(env, gridRef, callback) {
21280
21304
  }
21281
21305
  }
21282
21306
  function updateMousePosition(e) {
21283
- x = e.offsetX;
21284
- y = e.offsetY;
21285
- lastMoved = Date.now();
21307
+ if (gridRef.el === e.target) {
21308
+ x = e.offsetX;
21309
+ y = e.offsetY;
21310
+ lastMoved = Date.now();
21311
+ }
21286
21312
  }
21287
21313
  function recompute() {
21288
21314
  const { col, row } = getPosition();
@@ -24650,6 +24676,7 @@ function convertChartData(chartData) {
24650
24676
  verticalAxisPosition: chartData.verticalAxisPosition,
24651
24677
  legendPosition: chartData.legendPosition,
24652
24678
  stacked: chartData.stacked || false,
24679
+ cumulative: chartData.cumulative || false,
24653
24680
  labelsAsText: false,
24654
24681
  };
24655
24682
  }
@@ -28925,7 +28952,11 @@ class HeaderSizePlugin extends CorePlugin {
28925
28952
  let sizes = [...this.sizes[cmd.sheetId][cmd.dimension]];
28926
28953
  const addIndex = getAddHeaderStartIndex(cmd.position, cmd.base);
28927
28954
  const baseSize = sizes[cmd.base];
28928
- sizes.splice(addIndex, 0, ...Array(cmd.quantity).fill(baseSize));
28955
+ const sizesToInsert = range(0, cmd.quantity).map(() => ({
28956
+ manualSize: baseSize.manualSize,
28957
+ computedSize: lazy(baseSize.computedSize()),
28958
+ }));
28959
+ sizes.splice(addIndex, 0, ...sizesToInsert);
28929
28960
  sizes = sizes.map((size, row) => {
28930
28961
  if (cmd.dimension === "ROW" && row > cmd.base + cmd.quantity) {
28931
28962
  // invalidate sizes
@@ -29142,7 +29173,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
29142
29173
  if (!this.getters.tryGetSheet(cmd.sheetId)) {
29143
29174
  return 27 /* CommandResult.InvalidSheetId */;
29144
29175
  }
29145
- if (!this.canRemoveHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
29176
+ if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
29146
29177
  return 8 /* CommandResult.NotEnoughElements */;
29147
29178
  }
29148
29179
  return 0 /* CommandResult.Success */;
@@ -29192,9 +29223,9 @@ class HeaderVisibilityPlugin extends CorePlugin {
29192
29223
  }
29193
29224
  return;
29194
29225
  }
29195
- canRemoveHeaders(sheetId, dimension, elements) {
29226
+ checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
29196
29227
  const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
29197
- return !includesAll(elements, visibleHeaders);
29228
+ return includesAll(elements, visibleHeaders);
29198
29229
  }
29199
29230
  isRowHiddenByUser(sheetId, index) {
29200
29231
  return this.hiddenHeaders[sheetId].ROW[index];
@@ -29290,7 +29321,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
29290
29321
  }
29291
29322
  }
29292
29323
  HeaderVisibilityPlugin.getters = [
29293
- "canRemoveHeaders",
29324
+ "checkElementsIncludeAllVisibleHeaders",
29294
29325
  "getHiddenColsGroups",
29295
29326
  "getHiddenRowsGroups",
29296
29327
  "isRowHiddenByUser",
@@ -29809,6 +29840,9 @@ class SheetPlugin extends CorePlugin {
29809
29840
  if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
29810
29841
  return 85 /* CommandResult.InvalidHeaderIndex */;
29811
29842
  }
29843
+ else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
29844
+ return 8 /* CommandResult.NotEnoughElements */;
29845
+ }
29812
29846
  else {
29813
29847
  return 0 /* CommandResult.Success */;
29814
29848
  }
@@ -30108,6 +30142,20 @@ class SheetPlugin extends CorePlugin {
30108
30142
  }
30109
30143
  this.history.update("sheets", sheetId, "panes", panes);
30110
30144
  }
30145
+ /**
30146
+ * Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
30147
+ * This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
30148
+ */
30149
+ checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
30150
+ const paneDivisions = this.getters.getPaneDivisions(sheetId);
30151
+ const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
30152
+ const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
30153
+ if (!startIndex) {
30154
+ return false;
30155
+ }
30156
+ const indicesToCheck = range(startIndex, endIndex);
30157
+ return includesAll(elements, indicesToCheck);
30158
+ }
30111
30159
  // ---------------------------------------------------------------------------
30112
30160
  // Row/Col manipulation
30113
30161
  // ---------------------------------------------------------------------------
@@ -30642,6 +30690,7 @@ SheetPlugin.getters = [
30642
30690
  "getSheetSize",
30643
30691
  "getSheetZone",
30644
30692
  "getPaneDivisions",
30693
+ "checkElementsIncludeAllNonFrozenHeaders",
30645
30694
  ];
30646
30695
 
30647
30696
  /**
@@ -32023,7 +32072,7 @@ class ClipboardPlugin extends UIPlugin {
32023
32072
  allowDispatch(cmd) {
32024
32073
  switch (cmd.type) {
32025
32074
  case "CUT":
32026
- const zones = cmd.target || this.getters.getSelectedZones();
32075
+ const zones = this.getters.getSelectedZones();
32027
32076
  const state = this.getClipboardState(zones, cmd.type);
32028
32077
  return state.isCutAllowed(zones);
32029
32078
  case "PASTE":
@@ -32054,7 +32103,7 @@ class ClipboardPlugin extends UIPlugin {
32054
32103
  switch (cmd.type) {
32055
32104
  case "COPY":
32056
32105
  case "CUT":
32057
- const zones = ("target" in cmd && cmd.target) || this.getters.getSelectedZones();
32106
+ const zones = this.getters.getSelectedZones();
32058
32107
  this.state = this.getClipboardState(zones, cmd.type);
32059
32108
  this.status = "visible";
32060
32109
  break;
@@ -32672,6 +32721,7 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
32672
32721
  // stores the computed styles in the format of computedStyles.sheetName[col][row] = Style
32673
32722
  this.computedStyles = {};
32674
32723
  this.computedIcons = {};
32724
+ this.uuidGenerator = new UuidGenerator();
32675
32725
  /**
32676
32726
  * Execute the predicate to know if a conditional formatting rule should be applied to a cell
32677
32727
  */
@@ -33023,8 +33073,9 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
33023
33073
  this.adaptRules(origin.sheetId, cf, [xc], toRemoveRange);
33024
33074
  }
33025
33075
  else {
33026
- this.adaptRules(target.sheetId, cf, [xc], []);
33027
33076
  this.adaptRules(origin.sheetId, cf, [], toRemoveRange);
33077
+ const cfToCopyTo = this.getCFToCopyTo(target.sheetId, cf);
33078
+ this.adaptRules(target.sheetId, cfToCopyTo, [xc], []);
33028
33079
  }
33029
33080
  }
33030
33081
  }
@@ -33033,6 +33084,12 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
33033
33084
  isCellValueNumber(value) {
33034
33085
  return typeof value === "number";
33035
33086
  }
33087
+ getCFToCopyTo(targetSheetId, originCF) {
33088
+ const cfInTarget = this.getters
33089
+ .getConditionalFormats(targetSheetId)
33090
+ .find((cf) => cf.stopIfTrue === originCF.stopIfTrue && deepEquals(cf.rule, originCF.rule));
33091
+ return cfInTarget ? cfInTarget : { ...originCF, id: this.uuidGenerator.uuidv4(), ranges: [] };
33092
+ }
33036
33093
  }
33037
33094
  EvaluationConditionalFormatPlugin.getters = ["getConditionalIcon", "getCellComputedStyle"];
33038
33095
 
@@ -34800,26 +34857,24 @@ class GridSelectionPlugin extends UIPlugin {
34800
34857
  const isBasedBefore = cmd.base < start;
34801
34858
  const deltaCol = isBasedBefore && isCol ? thickness : 0;
34802
34859
  const deltaRow = isBasedBefore && !isCol ? thickness : 0;
34803
- this.dispatch("CUT", {
34804
- target: [
34805
- {
34806
- left: isCol ? start + deltaCol : 0,
34807
- right: isCol ? end + deltaCol : this.getters.getNumberCols(cmd.sheetId) - 1,
34808
- top: !isCol ? start + deltaRow : 0,
34809
- bottom: !isCol ? end + deltaRow : this.getters.getNumberRows(cmd.sheetId) - 1,
34810
- },
34811
- ],
34812
- });
34813
- this.dispatch("PASTE", {
34814
- target: [
34815
- {
34816
- left: isCol ? cmd.base : 0,
34817
- right: isCol ? cmd.base + thickness - 1 : this.getters.getNumberCols(cmd.sheetId) - 1,
34818
- top: !isCol ? cmd.base : 0,
34819
- bottom: !isCol ? cmd.base + thickness - 1 : this.getters.getNumberRows(cmd.sheetId) - 1,
34820
- },
34821
- ],
34822
- });
34860
+ const target = [
34861
+ {
34862
+ left: isCol ? start + deltaCol : 0,
34863
+ right: isCol ? end + deltaCol : this.getters.getNumberCols(cmd.sheetId) - 1,
34864
+ top: !isCol ? start + deltaRow : 0,
34865
+ bottom: !isCol ? end + deltaRow : this.getters.getNumberRows(cmd.sheetId) - 1,
34866
+ },
34867
+ ];
34868
+ const state = new ClipboardCellsState(target, "CUT", this.getters, this.dispatch, this.selection);
34869
+ const pasteTarget = [
34870
+ {
34871
+ left: isCol ? cmd.base : 0,
34872
+ right: isCol ? cmd.base + thickness - 1 : this.getters.getNumberCols(cmd.sheetId) - 1,
34873
+ top: !isCol ? cmd.base : 0,
34874
+ bottom: !isCol ? cmd.base + thickness - 1 : this.getters.getNumberRows(cmd.sheetId) - 1,
34875
+ },
34876
+ ];
34877
+ state.paste(pasteTarget, { selectTarget: true });
34823
34878
  const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
34824
34879
  let currentIndex = cmd.base;
34825
34880
  for (const element of toRemove) {
@@ -36435,6 +36490,9 @@ class InternalViewport {
36435
36490
  const sheetId = this.sheetId;
36436
36491
  this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
36437
36492
  this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
36493
+ if (this.left === -1) {
36494
+ this.left = this.boundaries.left;
36495
+ }
36438
36496
  if (this.right === -1) {
36439
36497
  this.right = this.getters.getNumberCols(sheetId) - 1;
36440
36498
  }
@@ -36448,6 +36506,9 @@ class InternalViewport {
36448
36506
  const sheetId = this.sheetId;
36449
36507
  this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
36450
36508
  this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
36509
+ if (this.top === -1) {
36510
+ this.top = this.boundaries.top;
36511
+ }
36451
36512
  if (this.bottom === -1) {
36452
36513
  this.bottom = this.getters.getNumberRows(sheetId) - 1;
36453
36514
  }
@@ -42861,6 +42922,6 @@ exports.setTranslationMethod = setTranslationMethod;
42861
42922
  exports.tokenize = tokenize;
42862
42923
 
42863
42924
 
42864
- __info__.version = '16.0.17';
42865
- __info__.date = '2023-08-17T11:08:00.168Z';
42866
- __info__.hash = '34011c3';
42925
+ __info__.version = '16.0.19';
42926
+ __info__.date = '2023-09-21T15:56:31.776Z';
42927
+ __info__.hash = '229c563';
@@ -600,6 +600,7 @@ interface LineChartDefinition {
600
600
  readonly legendPosition: LegendPosition;
601
601
  readonly labelsAsText: boolean;
602
602
  readonly stacked: boolean;
603
+ readonly cumulative: boolean;
603
604
  }
604
605
  type LineChartRuntime = {
605
606
  chartJsConfig: ChartConfiguration;
@@ -665,6 +666,7 @@ interface ExcelChartDefinition {
665
666
  readonly verticalAxisPosition: VerticalAxisPosition;
666
667
  readonly legendPosition: LegendPosition;
667
668
  readonly stacked?: boolean;
669
+ readonly cumulative?: boolean;
668
670
  }
669
671
  interface ChartCreationContext {
670
672
  readonly range?: string[];
@@ -1727,8 +1729,6 @@ interface CopyCommand {
1727
1729
  }
1728
1730
  interface CutCommand {
1729
1731
  type: "CUT";
1730
- /** Zones to cut. If none were given, will copy the zones in the selection*/
1731
- target?: Zone[];
1732
1732
  }
1733
1733
  interface PasteCommand {
1734
1734
  type: "PASTE";
@@ -3390,11 +3390,11 @@ declare class HeaderSizePlugin extends CorePlugin<HeaderSizeState> implements He
3390
3390
  }
3391
3391
 
3392
3392
  declare class HeaderVisibilityPlugin extends CorePlugin {
3393
- static getters: readonly ["canRemoveHeaders", "getHiddenColsGroups", "getHiddenRowsGroups", "isRowHiddenByUser", "isColHiddenByUser"];
3393
+ static getters: readonly ["checkElementsIncludeAllVisibleHeaders", "getHiddenColsGroups", "getHiddenRowsGroups", "isRowHiddenByUser", "isColHiddenByUser"];
3394
3394
  private readonly hiddenHeaders;
3395
3395
  allowDispatch(cmd: Command): CommandResult.Success | CommandResult.NotEnoughElements | CommandResult.InvalidSheetId | CommandResult.TooManyHiddenElements | CommandResult.InvalidHeaderIndex;
3396
3396
  handle(cmd: Command): void;
3397
- canRemoveHeaders(sheetId: UID, dimension: Dimension, elements: HeaderIndex[]): boolean;
3397
+ checkElementsIncludeAllVisibleHeaders(sheetId: UID, dimension: Dimension, elements: HeaderIndex[]): boolean;
3398
3398
  isRowHiddenByUser(sheetId: UID, index: HeaderIndex): boolean;
3399
3399
  isColHiddenByUser(sheetId: UID, index: HeaderIndex): boolean;
3400
3400
  getHiddenColsGroups(sheetId: UID): ConsecutiveIndexes[];
@@ -3489,7 +3489,7 @@ interface SheetState {
3489
3489
  readonly cellPosition: Record<UID, CellPosition | undefined>;
3490
3490
  }
3491
3491
  declare class SheetPlugin extends CorePlugin<SheetState> implements SheetState {
3492
- static getters: readonly ["getSheetName", "tryGetSheetName", "getSheet", "tryGetSheet", "getSheetIdByName", "getSheetIds", "getVisibleSheetIds", "isSheetVisible", "getEvaluationSheets", "doesHeaderExist", "getCell", "getCellsInZone", "getCellPosition", "getColCells", "getColsZone", "getRowCells", "getRowsZone", "getNumberCols", "getNumberRows", "getNumberHeaders", "getGridLinesVisibility", "getNextSheetName", "isEmpty", "getSheetSize", "getSheetZone", "getPaneDivisions"];
3492
+ static getters: readonly ["getSheetName", "tryGetSheetName", "getSheet", "tryGetSheet", "getSheetIdByName", "getSheetIds", "getVisibleSheetIds", "isSheetVisible", "getEvaluationSheets", "doesHeaderExist", "getCell", "getCellsInZone", "getCellPosition", "getColCells", "getColsZone", "getRowCells", "getRowsZone", "getNumberCols", "getNumberRows", "getNumberHeaders", "getGridLinesVisibility", "getNextSheetName", "isEmpty", "getSheetSize", "getSheetZone", "getPaneDivisions", "checkElementsIncludeAllNonFrozenHeaders"];
3493
3493
  readonly sheetIdsMapName: Record<string, UID | undefined>;
3494
3494
  readonly orderedSheetIds: UID[];
3495
3495
  readonly sheets: Record<UID, Sheet | undefined>;
@@ -3536,6 +3536,11 @@ declare class SheetPlugin extends CorePlugin<SheetState> implements SheetState {
3536
3536
  getSheetZone(sheetId: UID): Zone;
3537
3537
  getPaneDivisions(sheetId: UID): Readonly<PaneDivision>;
3538
3538
  private setPaneDivisions;
3539
+ /**
3540
+ * Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
3541
+ * This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
3542
+ */
3543
+ checkElementsIncludeAllNonFrozenHeaders(sheetId: UID, dimension: Dimension, elements: HeaderIndex[]): boolean;
3539
3544
  /**
3540
3545
  * Check if a zone only contains empty cells
3541
3546
  */
@@ -3909,6 +3914,7 @@ declare class EvaluationConditionalFormatPlugin extends UIPlugin {
3909
3914
  private isStale;
3910
3915
  private computedStyles;
3911
3916
  private computedIcons;
3917
+ private uuidGenerator;
3912
3918
  handle(cmd: Command): void;
3913
3919
  finalize(): void;
3914
3920
  getCellComputedStyle(sheetId: UID, col: HeaderIndex, row: HeaderIndex): Style;
@@ -3940,6 +3946,7 @@ declare class EvaluationConditionalFormatPlugin extends UIPlugin {
3940
3946
  private adaptRules;
3941
3947
  private pasteCf;
3942
3948
  private isCellValueNumber;
3949
+ private getCFToCopyTo;
3943
3950
  }
3944
3951
 
3945
3952
  declare class FilterEvaluationPlugin extends UIPlugin {
@@ -5004,6 +5011,7 @@ declare class LineConfigPanel extends LineBarPieConfigPanel {
5004
5011
  get canTreatLabelsAsText(): boolean;
5005
5012
  onUpdateLabelsAsText(ev: any): void;
5006
5013
  onUpdateStacked(ev: any): void;
5014
+ onUpdateCumulative(ev: any): void;
5007
5015
  }
5008
5016
 
5009
5017
  interface Props$t {