@odoo/o-spreadsheet 16.2.13 → 16.2.16

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.
@@ -991,13 +991,17 @@ function getAddHeaderStartIndex(position, base) {
991
991
  return position === "after" ? base + 1 : base;
992
992
  }
993
993
  /**
994
- * Compare two objects.
994
+ * Compares two objects.
995
995
  */
996
996
  function deepEquals(o1, o2) {
997
997
  if (o1 === o2)
998
998
  return true;
999
999
  if ((o1 && !o2) || (o2 && !o1))
1000
1000
  return false;
1001
+ if (typeof o1 !== typeof o2)
1002
+ return false;
1003
+ if (typeof o1 !== "object")
1004
+ return o1 === o2;
1001
1005
  // Objects can have different keys if the values are undefined
1002
1006
  const keys = new Set();
1003
1007
  Object.keys(o1).forEach((key) => keys.add(key));
@@ -4683,6 +4687,7 @@ css /* scss */ `
4683
4687
  padding: 10px;
4684
4688
  width: ${ERROR_TOOLTIP_WIDTH}px;
4685
4689
  box-sizing: border-box !important;
4690
+ overflow-wrap: break-word;
4686
4691
  }
4687
4692
  `;
4688
4693
  class ErrorToolTip extends owl.Component {
@@ -7245,6 +7250,7 @@ class LineChart extends AbstractChart {
7245
7250
  this.labelsAsText = definition.labelsAsText;
7246
7251
  this.stacked = definition.stacked;
7247
7252
  this.aggregated = definition.aggregated;
7253
+ this.cumulative = definition.cumulative;
7248
7254
  }
7249
7255
  static validateChartDefinition(validator, definition) {
7250
7256
  return validator.checkValidations(definition, checkDataset, checkLabelRange);
@@ -7265,6 +7271,7 @@ class LineChart extends AbstractChart {
7265
7271
  labelRange: context.auxiliaryRange || undefined,
7266
7272
  stacked: false,
7267
7273
  aggregated: false,
7274
+ cumulative: false,
7268
7275
  };
7269
7276
  }
7270
7277
  getDefinition() {
@@ -7285,6 +7292,7 @@ class LineChart extends AbstractChart {
7285
7292
  labelsAsText: this.labelsAsText,
7286
7293
  stacked: this.stacked,
7287
7294
  aggregated: this.aggregated,
7295
+ cumulative: this.cumulative,
7288
7296
  };
7289
7297
  }
7290
7298
  getContextCreation() {
@@ -7488,6 +7496,16 @@ function createLineChartRuntime(chart, getters) {
7488
7496
  if (chart.stacked) {
7489
7497
  backgroundRGBA.a = LINE_FILL_TRANSPARENCY;
7490
7498
  }
7499
+ if (chart.cumulative) {
7500
+ let accumulator = 0;
7501
+ data = data.map((value) => {
7502
+ if (!isNaN(value)) {
7503
+ accumulator += parseFloat(value);
7504
+ return accumulator;
7505
+ }
7506
+ return value;
7507
+ });
7508
+ }
7491
7509
  const backgroundColor = rgbaToHex(backgroundRGBA);
7492
7510
  const dataset = {
7493
7511
  label,
@@ -8270,6 +8288,7 @@ function getSmartChartDefinition(zone, getters) {
8270
8288
  labelsAsText: false,
8271
8289
  stacked: false,
8272
8290
  aggregated: false,
8291
+ cumulative: false,
8273
8292
  labelRange: labelRangeXc,
8274
8293
  type: "line",
8275
8294
  dataSetsHaveTitle,
@@ -8632,6 +8651,13 @@ const REMOVE_ROWS_ACTION = (env) => {
8632
8651
  elements: rows,
8633
8652
  });
8634
8653
  };
8654
+ const CAN_REMOVE_COLUMNS_ROWS = (dimension, env) => {
8655
+ const sheetId = env.model.getters.getActiveSheetId();
8656
+ const selectedElements = env.model.getters.getElementsFromSelection(dimension);
8657
+ const includesAllVisibleHeaders = env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, dimension, selectedElements);
8658
+ const includesAllNonFrozenHeaders = env.model.getters.checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, selectedElements);
8659
+ return !includesAllVisibleHeaders && !includesAllNonFrozenHeaders;
8660
+ };
8635
8661
  const REMOVE_COLUMNS_NAME = (env) => {
8636
8662
  if (env.model.getters.getSelectedZones().length > 1) {
8637
8663
  return _lt("Delete columns");
@@ -9222,11 +9248,7 @@ colMenuRegistry
9222
9248
  name: REMOVE_COLUMNS_NAME,
9223
9249
  sequence: 90,
9224
9250
  action: REMOVE_COLUMNS_ACTION,
9225
- isVisible: (env) => {
9226
- const sheetId = env.model.getters.getActiveSheetId();
9227
- const selectedCols = env.model.getters.getElementsFromSelection("COL");
9228
- return env.model.getters.canRemoveHeaders(sheetId, "COL", selectedCols);
9229
- },
9251
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
9230
9252
  })
9231
9253
  .add("clear_column", {
9232
9254
  name: DELETE_CONTENT_COLUMNS_NAME,
@@ -9240,7 +9262,7 @@ colMenuRegistry
9240
9262
  isVisible: (env) => {
9241
9263
  const sheetId = env.model.getters.getActiveSheetId();
9242
9264
  const selectedCols = env.model.getters.getElementsFromSelection("COL");
9243
- return env.model.getters.canRemoveHeaders(sheetId, "COL", selectedCols);
9265
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "COL", selectedCols);
9244
9266
  },
9245
9267
  separator: true,
9246
9268
  })
@@ -9314,11 +9336,7 @@ rowMenuRegistry
9314
9336
  name: REMOVE_ROWS_NAME,
9315
9337
  sequence: 70,
9316
9338
  action: REMOVE_ROWS_ACTION,
9317
- isVisible: (env) => {
9318
- const sheetId = env.model.getters.getActiveSheetId();
9319
- const selectedRows = env.model.getters.getElementsFromSelection("ROW");
9320
- return env.model.getters.canRemoveHeaders(sheetId, "ROW", selectedRows);
9321
- },
9339
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
9322
9340
  })
9323
9341
  .add("clear_row", {
9324
9342
  name: DELETE_CONTENT_ROWS_NAME,
@@ -9332,7 +9350,7 @@ rowMenuRegistry
9332
9350
  isVisible: (env) => {
9333
9351
  const sheetId = env.model.getters.getActiveSheetId();
9334
9352
  const selectedRows = env.model.getters.getElementsFromSelection("ROW");
9335
- return env.model.getters.canRemoveHeaders(sheetId, "ROW", selectedRows);
9353
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "ROW", selectedRows);
9336
9354
  },
9337
9355
  separator: true,
9338
9356
  })
@@ -16178,11 +16196,13 @@ topbarMenuRegistry
16178
16196
  name: REMOVE_ROWS_NAME,
16179
16197
  sequence: 80,
16180
16198
  action: REMOVE_ROWS_ACTION,
16199
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
16181
16200
  })
16182
16201
  .addChild("edit_delete_column", ["edit"], {
16183
16202
  name: REMOVE_COLUMNS_NAME,
16184
16203
  sequence: 90,
16185
16204
  action: REMOVE_COLUMNS_ACTION,
16205
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
16186
16206
  })
16187
16207
  .addChild("edit_delete_cell_shift_up", ["edit"], {
16188
16208
  name: _lt("Delete cell and shift up"),
@@ -17495,6 +17515,11 @@ class LineConfigPanel extends LineBarPieConfigPanel {
17495
17515
  aggregated: ev.target.checked,
17496
17516
  });
17497
17517
  }
17518
+ onUpdateCumulative(ev) {
17519
+ this.props.updateChart(this.props.figureId, {
17520
+ cumulative: ev.target.checked,
17521
+ });
17522
+ }
17498
17523
  }
17499
17524
  LineConfigPanel.template = "o-spreadsheet-LineConfigPanel";
17500
17525
 
@@ -19034,34 +19059,25 @@ FigureComponent.props = {
19034
19059
  };
19035
19060
 
19036
19061
  function startDnd(onMouseMove, onMouseUp, onMouseDown = () => { }) {
19037
- const _onMouseDown = (ev) => {
19038
- ev.preventDefault();
19039
- onMouseDown(ev);
19040
- };
19041
- const _onMouseMove = (ev) => {
19042
- ev.preventDefault();
19043
- onMouseMove(ev);
19044
- };
19045
19062
  const _onMouseUp = (ev) => {
19046
- ev.preventDefault();
19047
19063
  onMouseUp(ev);
19048
- window.removeEventListener("mousedown", _onMouseDown);
19064
+ window.removeEventListener("mousedown", onMouseDown);
19049
19065
  window.removeEventListener("mouseup", _onMouseUp);
19050
19066
  window.removeEventListener("dragstart", _onDragStart);
19051
- window.removeEventListener("mousemove", _onMouseMove);
19052
- window.removeEventListener("wheel", _onMouseMove);
19067
+ window.removeEventListener("mousemove", onMouseMove);
19068
+ window.removeEventListener("wheel", onMouseMove);
19053
19069
  };
19054
19070
  function _onDragStart(ev) {
19055
19071
  ev.preventDefault();
19056
19072
  }
19057
- window.addEventListener("mousedown", _onMouseDown);
19073
+ window.addEventListener("mousedown", onMouseDown);
19058
19074
  window.addEventListener("mouseup", _onMouseUp);
19059
19075
  window.addEventListener("dragstart", _onDragStart);
19060
- window.addEventListener("mousemove", _onMouseMove);
19076
+ window.addEventListener("mousemove", onMouseMove);
19061
19077
  // mouse wheel on window is by default a passive event.
19062
19078
  // preventDefault() is not allowed in passive event handler.
19063
19079
  // https://chromestatus.com/feature/6662647093133312
19064
- window.addEventListener("wheel", _onMouseMove, { passive: false });
19080
+ window.addEventListener("wheel", onMouseMove, { passive: false });
19065
19081
  }
19066
19082
  /**
19067
19083
  * Function to be used during a mousedown event, this function allows to
@@ -20863,9 +20879,11 @@ function useCellHovered(env, gridRef, callback) {
20863
20879
  }
20864
20880
  }
20865
20881
  function updateMousePosition(e) {
20866
- x = e.offsetX;
20867
- y = e.offsetY;
20868
- lastMoved = Date.now();
20882
+ if (gridRef.el === e.target) {
20883
+ x = e.offsetX;
20884
+ y = e.offsetY;
20885
+ lastMoved = Date.now();
20886
+ }
20869
20887
  }
20870
20888
  function recompute() {
20871
20889
  const { col, row } = getPosition();
@@ -22306,7 +22324,8 @@ class Grid extends owl.Component {
22306
22324
  }
22307
22325
  let prevCol = col;
22308
22326
  let prevRow = row;
22309
- const onMouseMove = (col, row) => {
22327
+ const onMouseMove = (col, row, ev) => {
22328
+ ev.preventDefault();
22310
22329
  if ((col !== prevCol && col != -1) || (row !== prevRow && row != -1)) {
22311
22330
  prevCol = col === -1 ? prevCol : col;
22312
22331
  prevRow = row === -1 ? prevRow : row;
@@ -24977,6 +24996,7 @@ function convertChartData(chartData) {
24977
24996
  legendPosition: chartData.legendPosition,
24978
24997
  stacked: chartData.stacked || false,
24979
24998
  aggregated: false,
24999
+ cumulative: chartData.cumulative || false,
24980
25000
  labelsAsText: false,
24981
25001
  };
24982
25002
  }
@@ -29631,7 +29651,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
29631
29651
  if (!this.getters.tryGetSheet(cmd.sheetId)) {
29632
29652
  return 27 /* CommandResult.InvalidSheetId */;
29633
29653
  }
29634
- if (!this.canRemoveHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
29654
+ if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
29635
29655
  return 8 /* CommandResult.NotEnoughElements */;
29636
29656
  }
29637
29657
  return 0 /* CommandResult.Success */;
@@ -29681,9 +29701,9 @@ class HeaderVisibilityPlugin extends CorePlugin {
29681
29701
  }
29682
29702
  return;
29683
29703
  }
29684
- canRemoveHeaders(sheetId, dimension, elements) {
29704
+ checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
29685
29705
  const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
29686
- return !includesAll(elements, visibleHeaders);
29706
+ return includesAll(elements, visibleHeaders);
29687
29707
  }
29688
29708
  isRowHiddenByUser(sheetId, index) {
29689
29709
  return this.hiddenHeaders[sheetId].ROW[index];
@@ -29779,7 +29799,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
29779
29799
  }
29780
29800
  }
29781
29801
  HeaderVisibilityPlugin.getters = [
29782
- "canRemoveHeaders",
29802
+ "checkElementsIncludeAllVisibleHeaders",
29783
29803
  "getHiddenColsGroups",
29784
29804
  "getHiddenRowsGroups",
29785
29805
  "isRowHiddenByUser",
@@ -30816,6 +30836,9 @@ class SheetPlugin extends CorePlugin {
30816
30836
  if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
30817
30837
  return 86 /* CommandResult.InvalidHeaderIndex */;
30818
30838
  }
30839
+ else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
30840
+ return 8 /* CommandResult.NotEnoughElements */;
30841
+ }
30819
30842
  else {
30820
30843
  return 0 /* CommandResult.Success */;
30821
30844
  }
@@ -31102,6 +31125,20 @@ class SheetPlugin extends CorePlugin {
31102
31125
  }
31103
31126
  this.history.update("sheets", sheetId, "panes", panes);
31104
31127
  }
31128
+ /**
31129
+ * Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
31130
+ * This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
31131
+ */
31132
+ checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
31133
+ const paneDivisions = this.getters.getPaneDivisions(sheetId);
31134
+ const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
31135
+ const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
31136
+ if (!startIndex) {
31137
+ return false;
31138
+ }
31139
+ const indicesToCheck = range(startIndex, endIndex);
31140
+ return includesAll(elements, indicesToCheck);
31141
+ }
31105
31142
  // ---------------------------------------------------------------------------
31106
31143
  // Row/Col manipulation
31107
31144
  // ---------------------------------------------------------------------------
@@ -31630,6 +31667,7 @@ SheetPlugin.getters = [
31630
31667
  "getSheetSize",
31631
31668
  "getSheetZone",
31632
31669
  "getPaneDivisions",
31670
+ "checkElementsIncludeAllNonFrozenHeaders",
31633
31671
  ];
31634
31672
 
31635
31673
  /**
@@ -32196,6 +32234,7 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
32196
32234
  // stores the computed styles in the format of computedStyles.sheetName[col][row] = Style
32197
32235
  this.computedStyles = {};
32198
32236
  this.computedIcons = {};
32237
+ this.uuidGenerator = new UuidGenerator();
32199
32238
  /**
32200
32239
  * Execute the predicate to know if a conditional formatting rule should be applied to a cell
32201
32240
  */
@@ -32548,13 +32587,20 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
32548
32587
  this.adaptRules(origin.sheetId, cf, [xc], toRemoveRange);
32549
32588
  }
32550
32589
  else {
32551
- this.adaptRules(target.sheetId, cf, [xc], []);
32552
32590
  this.adaptRules(origin.sheetId, cf, [], toRemoveRange);
32591
+ const cfToCopyTo = this.getCFToCopyTo(target.sheetId, cf);
32592
+ this.adaptRules(target.sheetId, cfToCopyTo, [xc], []);
32553
32593
  }
32554
32594
  }
32555
32595
  }
32556
32596
  }
32557
32597
  }
32598
+ getCFToCopyTo(targetSheetId, originCF) {
32599
+ const cfInTarget = this.getters
32600
+ .getConditionalFormats(targetSheetId)
32601
+ .find((cf) => cf.stopIfTrue === originCF.stopIfTrue && deepEquals(cf.rule, originCF.rule));
32602
+ return cfInTarget ? cfInTarget : { ...originCF, id: this.uuidGenerator.uuidv4(), ranges: [] };
32603
+ }
32558
32604
  }
32559
32605
  EvaluationConditionalFormatPlugin.getters = ["getConditionalIcon", "getCellComputedStyle"];
32560
32606
 
@@ -33076,6 +33122,9 @@ class InternalViewport {
33076
33122
  const sheetId = this.sheetId;
33077
33123
  this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
33078
33124
  this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
33125
+ if (this.left === -1) {
33126
+ this.left = this.boundaries.left;
33127
+ }
33079
33128
  if (this.right === -1) {
33080
33129
  this.right = this.getters.getNumberCols(sheetId) - 1;
33081
33130
  }
@@ -33089,6 +33138,9 @@ class InternalViewport {
33089
33138
  const sheetId = this.sheetId;
33090
33139
  this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
33091
33140
  this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
33141
+ if (this.top === -1) {
33142
+ this.top = this.boundaries.top;
33143
+ }
33092
33144
  if (this.bottom === -1) {
33093
33145
  this.bottom = this.getters.getNumberRows(sheetId) - 1;
33094
33146
  }
@@ -38010,7 +38062,7 @@ class ClipboardPlugin extends UIPlugin {
38010
38062
  allowDispatch(cmd) {
38011
38063
  switch (cmd.type) {
38012
38064
  case "CUT":
38013
- const zones = cmd.target || this.getters.getSelectedZones();
38065
+ const zones = this.getters.getSelectedZones();
38014
38066
  const state = this.getClipboardState(zones, cmd.type);
38015
38067
  return state.isCutAllowed(zones);
38016
38068
  case "PASTE":
@@ -38041,7 +38093,7 @@ class ClipboardPlugin extends UIPlugin {
38041
38093
  switch (cmd.type) {
38042
38094
  case "COPY":
38043
38095
  case "CUT":
38044
- const zones = ("target" in cmd && cmd.target) || this.getters.getSelectedZones();
38096
+ const zones = this.getters.getSelectedZones();
38045
38097
  this.state = this.getClipboardState(zones, cmd.type);
38046
38098
  this.status = "visible";
38047
38099
  break;
@@ -39421,26 +39473,24 @@ class GridSelectionPlugin extends UIPlugin {
39421
39473
  const isBasedBefore = cmd.base < start;
39422
39474
  const deltaCol = isBasedBefore && isCol ? thickness : 0;
39423
39475
  const deltaRow = isBasedBefore && !isCol ? thickness : 0;
39424
- this.dispatch("CUT", {
39425
- target: [
39426
- {
39427
- left: isCol ? start + deltaCol : 0,
39428
- right: isCol ? end + deltaCol : this.getters.getNumberCols(cmd.sheetId) - 1,
39429
- top: !isCol ? start + deltaRow : 0,
39430
- bottom: !isCol ? end + deltaRow : this.getters.getNumberRows(cmd.sheetId) - 1,
39431
- },
39432
- ],
39433
- });
39434
- this.dispatch("PASTE", {
39435
- target: [
39436
- {
39437
- left: isCol ? cmd.base : 0,
39438
- right: isCol ? cmd.base + thickness - 1 : this.getters.getNumberCols(cmd.sheetId) - 1,
39439
- top: !isCol ? cmd.base : 0,
39440
- bottom: !isCol ? cmd.base + thickness - 1 : this.getters.getNumberRows(cmd.sheetId) - 1,
39441
- },
39442
- ],
39443
- });
39476
+ const target = [
39477
+ {
39478
+ left: isCol ? start + deltaCol : 0,
39479
+ right: isCol ? end + deltaCol : this.getters.getNumberCols(cmd.sheetId) - 1,
39480
+ top: !isCol ? start + deltaRow : 0,
39481
+ bottom: !isCol ? end + deltaRow : this.getters.getNumberRows(cmd.sheetId) - 1,
39482
+ },
39483
+ ];
39484
+ const state = new ClipboardCellsState(target, "CUT", this.getters, this.dispatch, this.selection);
39485
+ const pasteTarget = [
39486
+ {
39487
+ left: isCol ? cmd.base : 0,
39488
+ right: isCol ? cmd.base + thickness - 1 : this.getters.getNumberCols(cmd.sheetId) - 1,
39489
+ top: !isCol ? cmd.base : 0,
39490
+ bottom: !isCol ? cmd.base + thickness - 1 : this.getters.getNumberRows(cmd.sheetId) - 1,
39491
+ },
39492
+ ];
39493
+ state.paste(pasteTarget, { selectTarget: true });
39444
39494
  const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
39445
39495
  let currentIndex = cmd.base;
39446
39496
  for (const element of toRemove) {
@@ -45408,6 +45458,6 @@ exports.setTranslationMethod = setTranslationMethod;
45408
45458
  exports.tokenize = tokenize;
45409
45459
 
45410
45460
 
45411
- __info__.version = '16.2.13';
45412
- __info__.date = '2023-08-09T09:09:10.050Z';
45413
- __info__.hash = '5620a2e';
45461
+ __info__.version = '16.2.16';
45462
+ __info__.date = '2023-09-21T15:56:53.639Z';
45463
+ __info__.hash = '1a70819';
@@ -466,6 +466,7 @@ interface LineChartDefinition {
466
466
  readonly labelsAsText: boolean;
467
467
  readonly stacked: boolean;
468
468
  readonly aggregated?: boolean;
469
+ readonly cumulative: boolean;
469
470
  }
470
471
  type LineChartRuntime = {
471
472
  chartJsConfig: ChartConfiguration;
@@ -532,6 +533,7 @@ interface ExcelChartDefinition {
532
533
  readonly verticalAxisPosition: VerticalAxisPosition;
533
534
  readonly legendPosition: LegendPosition;
534
535
  readonly stacked?: boolean;
536
+ readonly cumulative?: boolean;
535
537
  }
536
538
  interface ChartCreationContext {
537
539
  readonly range?: string[];
@@ -1680,8 +1682,6 @@ interface CopyCommand {
1680
1682
  }
1681
1683
  interface CutCommand {
1682
1684
  type: "CUT";
1683
- /** Zones to cut. If none were given, will copy the zones in the selection*/
1684
- target?: Zone[];
1685
1685
  }
1686
1686
  interface PasteCommand {
1687
1687
  type: "PASTE";
@@ -3389,11 +3389,11 @@ declare class HeaderSizePlugin extends CorePlugin<HeaderSizeState> implements He
3389
3389
  }
3390
3390
 
3391
3391
  declare class HeaderVisibilityPlugin extends CorePlugin {
3392
- static getters: readonly ["canRemoveHeaders", "getHiddenColsGroups", "getHiddenRowsGroups", "isRowHiddenByUser", "isColHiddenByUser"];
3392
+ static getters: readonly ["checkElementsIncludeAllVisibleHeaders", "getHiddenColsGroups", "getHiddenRowsGroups", "isRowHiddenByUser", "isColHiddenByUser"];
3393
3393
  private readonly hiddenHeaders;
3394
3394
  allowDispatch(cmd: Command): CommandResult.Success | CommandResult.NotEnoughElements | CommandResult.InvalidSheetId | CommandResult.TooManyHiddenElements | CommandResult.InvalidHeaderIndex;
3395
3395
  handle(cmd: Command): void;
3396
- canRemoveHeaders(sheetId: UID, dimension: Dimension, elements: HeaderIndex[]): boolean;
3396
+ checkElementsIncludeAllVisibleHeaders(sheetId: UID, dimension: Dimension, elements: HeaderIndex[]): boolean;
3397
3397
  isRowHiddenByUser(sheetId: UID, index: HeaderIndex): boolean;
3398
3398
  isColHiddenByUser(sheetId: UID, index: HeaderIndex): boolean;
3399
3399
  getHiddenColsGroups(sheetId: UID): ConsecutiveIndexes[];
@@ -3516,7 +3516,7 @@ interface SheetState$1 {
3516
3516
  readonly cellPosition: Record<UID, CellPosition | undefined>;
3517
3517
  }
3518
3518
  declare class SheetPlugin extends CorePlugin<SheetState$1> implements SheetState$1 {
3519
- static getters: readonly ["getSheetName", "tryGetSheetName", "getSheet", "tryGetSheet", "getSheetIdByName", "getSheetIds", "getVisibleSheetIds", "isSheetVisible", "getEvaluationSheets", "doesHeaderExist", "getCell", "getCellPosition", "getColsZone", "getRowCells", "getRowsZone", "getNumberCols", "getNumberRows", "getNumberHeaders", "getGridLinesVisibility", "getNextSheetName", "isEmpty", "getSheetSize", "getSheetZone", "getPaneDivisions"];
3519
+ static getters: readonly ["getSheetName", "tryGetSheetName", "getSheet", "tryGetSheet", "getSheetIdByName", "getSheetIds", "getVisibleSheetIds", "isSheetVisible", "getEvaluationSheets", "doesHeaderExist", "getCell", "getCellPosition", "getColsZone", "getRowCells", "getRowsZone", "getNumberCols", "getNumberRows", "getNumberHeaders", "getGridLinesVisibility", "getNextSheetName", "isEmpty", "getSheetSize", "getSheetZone", "getPaneDivisions", "checkElementsIncludeAllNonFrozenHeaders"];
3520
3520
  readonly sheetIdsMapName: Record<string, UID | undefined>;
3521
3521
  readonly orderedSheetIds: UID[];
3522
3522
  readonly sheets: Record<UID, Sheet | undefined>;
@@ -3558,6 +3558,11 @@ declare class SheetPlugin extends CorePlugin<SheetState$1> implements SheetState
3558
3558
  getSheetZone(sheetId: UID): Zone;
3559
3559
  getPaneDivisions(sheetId: UID): Readonly<PaneDivision>;
3560
3560
  private setPaneDivisions;
3561
+ /**
3562
+ * Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
3563
+ * This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
3564
+ */
3565
+ checkElementsIncludeAllNonFrozenHeaders(sheetId: UID, dimension: Dimension, elements: HeaderIndex[]): boolean;
3561
3566
  /**
3562
3567
  * Check if a zone only contains empty cells
3563
3568
  */
@@ -3742,6 +3747,7 @@ declare class EvaluationConditionalFormatPlugin extends UIPlugin {
3742
3747
  private isStale;
3743
3748
  private computedStyles;
3744
3749
  private computedIcons;
3750
+ private uuidGenerator;
3745
3751
  handle(cmd: Command): void;
3746
3752
  finalize(): void;
3747
3753
  getCellComputedStyle(position: CellPosition): Style;
@@ -3772,6 +3778,7 @@ declare class EvaluationConditionalFormatPlugin extends UIPlugin {
3772
3778
  */
3773
3779
  private adaptRules;
3774
3780
  private pasteCf;
3781
+ private getCFToCopyTo;
3775
3782
  }
3776
3783
 
3777
3784
  declare class FilterEvaluationPlugin extends UIPlugin {
@@ -5137,6 +5144,7 @@ declare class LineConfigPanel extends LineBarPieConfigPanel {
5137
5144
  onUpdateLabelsAsText(ev: any): void;
5138
5145
  onUpdateStacked(ev: any): void;
5139
5146
  onUpdateAggregated(ev: any): void;
5147
+ onUpdateCumulative(ev: any): void;
5140
5148
  }
5141
5149
 
5142
5150
  interface Props$v {