@odoo/o-spreadsheet 16.4.5 → 16.4.6

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.
@@ -16878,6 +16878,7 @@ class LineChart extends AbstractChart {
16878
16878
  aggregated;
16879
16879
  type = "line";
16880
16880
  dataSetsHaveTitle;
16881
+ cumulative;
16881
16882
  constructor(definition, sheetId, getters) {
16882
16883
  super(definition, sheetId, getters);
16883
16884
  this.dataSets = createDataSets(this.getters, definition.dataSets, sheetId, definition.dataSetsHaveTitle);
@@ -16889,6 +16890,7 @@ class LineChart extends AbstractChart {
16889
16890
  this.stacked = definition.stacked;
16890
16891
  this.aggregated = definition.aggregated;
16891
16892
  this.dataSetsHaveTitle = definition.dataSetsHaveTitle;
16893
+ this.cumulative = definition.cumulative;
16892
16894
  }
16893
16895
  static validateChartDefinition(validator, definition) {
16894
16896
  return validator.checkValidations(definition, checkDataset, checkLabelRange);
@@ -16909,6 +16911,7 @@ class LineChart extends AbstractChart {
16909
16911
  labelRange: context.auxiliaryRange || undefined,
16910
16912
  stacked: false,
16911
16913
  aggregated: false,
16914
+ cumulative: false,
16912
16915
  };
16913
16916
  }
16914
16917
  getDefinition() {
@@ -16929,6 +16932,7 @@ class LineChart extends AbstractChart {
16929
16932
  labelsAsText: this.labelsAsText,
16930
16933
  stacked: this.stacked,
16931
16934
  aggregated: this.aggregated,
16935
+ cumulative: this.cumulative,
16932
16936
  };
16933
16937
  }
16934
16938
  getContextCreation() {
@@ -17139,6 +17143,16 @@ function createLineChartRuntime(chart, getters) {
17139
17143
  if (chart.stacked) {
17140
17144
  backgroundRGBA.a = LINE_FILL_TRANSPARENCY;
17141
17145
  }
17146
+ if (chart.cumulative) {
17147
+ let accumulator = 0;
17148
+ data = data.map((value) => {
17149
+ if (!isNaN(value)) {
17150
+ accumulator += parseFloat(value);
17151
+ return accumulator;
17152
+ }
17153
+ return value;
17154
+ });
17155
+ }
17142
17156
  const backgroundColor = rgbaToHex(backgroundRGBA);
17143
17157
  const dataset = {
17144
17158
  label,
@@ -18013,6 +18027,7 @@ function getSmartChartDefinition(zone, getters) {
18013
18027
  labelsAsText: false,
18014
18028
  stacked: false,
18015
18029
  aggregated: false,
18030
+ cumulative: false,
18016
18031
  labelRange: labelRangeXc,
18017
18032
  type: "line",
18018
18033
  dataSetsHaveTitle,
@@ -18176,6 +18191,13 @@ const REMOVE_ROWS_ACTION = (env) => {
18176
18191
  elements: rows,
18177
18192
  });
18178
18193
  };
18194
+ const CAN_REMOVE_COLUMNS_ROWS = (dimension, env) => {
18195
+ const sheetId = env.model.getters.getActiveSheetId();
18196
+ const selectedElements = env.model.getters.getElementsFromSelection(dimension);
18197
+ const includesAllVisibleHeaders = env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, dimension, selectedElements);
18198
+ const includesAllNonFrozenHeaders = env.model.getters.checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, selectedElements);
18199
+ return !includesAllVisibleHeaders && !includesAllNonFrozenHeaders;
18200
+ };
18179
18201
  const REMOVE_COLUMNS_NAME = (env) => {
18180
18202
  if (env.model.getters.getSelectedZones().length > 1) {
18181
18203
  return _lt("Delete columns");
@@ -18200,7 +18222,7 @@ const REMOVE_COLUMNS_NAME = (env) => {
18200
18222
  const NOT_ALL_VISIBLE_ROWS_SELECTED = (env) => {
18201
18223
  const sheetId = env.model.getters.getActiveSheetId();
18202
18224
  const selectedRows = env.model.getters.getElementsFromSelection("ROW");
18203
- return env.model.getters.canRemoveHeaders(sheetId, "ROW", selectedRows);
18225
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "ROW", selectedRows);
18204
18226
  };
18205
18227
  const REMOVE_COLUMNS_ACTION = (env) => {
18206
18228
  let columns = [...env.model.getters.getActiveCols()];
@@ -18219,7 +18241,7 @@ const REMOVE_COLUMNS_ACTION = (env) => {
18219
18241
  const NOT_ALL_VISIBLE_COLS_SELECTED = (env) => {
18220
18242
  const sheetId = env.model.getters.getActiveSheetId();
18221
18243
  const selectedCols = env.model.getters.getElementsFromSelection("COL");
18222
- return env.model.getters.canRemoveHeaders(sheetId, "COL", selectedCols);
18244
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "COL", selectedCols);
18223
18245
  };
18224
18246
  const INSERT_ROWS_BEFORE_ACTION = (env) => {
18225
18247
  const activeRows = env.model.getters.getActiveRows();
@@ -18491,7 +18513,7 @@ const deleteValues = {
18491
18513
  const deleteRows = {
18492
18514
  name: REMOVE_ROWS_NAME,
18493
18515
  execute: REMOVE_ROWS_ACTION,
18494
- isVisible: NOT_ALL_VISIBLE_ROWS_SELECTED,
18516
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
18495
18517
  };
18496
18518
  const deleteRow = {
18497
18519
  ...deleteRows,
@@ -18504,7 +18526,7 @@ const clearRows = {
18504
18526
  const deleteCols = {
18505
18527
  name: REMOVE_COLUMNS_NAME,
18506
18528
  execute: REMOVE_COLUMNS_ACTION,
18507
- isVisible: NOT_ALL_VISIBLE_COLS_SELECTED,
18529
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
18508
18530
  };
18509
18531
  const deleteCol = {
18510
18532
  ...deleteCols,
@@ -21479,6 +21501,11 @@ class LineConfigPanel extends LineBarPieConfigPanel {
21479
21501
  aggregated: ev.target.checked,
21480
21502
  });
21481
21503
  }
21504
+ onUpdateCumulative(ev) {
21505
+ this.props.updateChart(this.props.figureId, {
21506
+ cumulative: ev.target.checked,
21507
+ });
21508
+ }
21482
21509
  }
21483
21510
 
21484
21511
  class LineChartDesignPanel extends LineBarPieDesignPanel {
@@ -28452,6 +28479,7 @@ function convertChartData(chartData) {
28452
28479
  legendPosition: chartData.legendPosition,
28453
28480
  stacked: chartData.stacked || false,
28454
28481
  aggregated: false,
28482
+ cumulative: chartData.cumulative || false,
28455
28483
  labelsAsText: false,
28456
28484
  };
28457
28485
  }
@@ -33112,7 +33140,7 @@ class HeaderSizePlugin extends CorePlugin {
33112
33140
 
33113
33141
  class HeaderVisibilityPlugin extends CorePlugin {
33114
33142
  static getters = [
33115
- "canRemoveHeaders",
33143
+ "checkElementsIncludeAllVisibleHeaders",
33116
33144
  "getHiddenColsGroups",
33117
33145
  "getHiddenRowsGroups",
33118
33146
  "isRowHiddenByUser",
@@ -33146,7 +33174,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
33146
33174
  if (!this.getters.tryGetSheet(cmd.sheetId)) {
33147
33175
  return 28 /* CommandResult.InvalidSheetId */;
33148
33176
  }
33149
- if (!this.canRemoveHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
33177
+ if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
33150
33178
  return 8 /* CommandResult.NotEnoughElements */;
33151
33179
  }
33152
33180
  return 0 /* CommandResult.Success */;
@@ -33196,9 +33224,9 @@ class HeaderVisibilityPlugin extends CorePlugin {
33196
33224
  }
33197
33225
  return;
33198
33226
  }
33199
- canRemoveHeaders(sheetId, dimension, elements) {
33227
+ checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
33200
33228
  const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
33201
- return !includesAll(elements, visibleHeaders);
33229
+ return includesAll(elements, visibleHeaders);
33202
33230
  }
33203
33231
  isRowHiddenByUser(sheetId, index) {
33204
33232
  return this.hiddenHeaders[sheetId].ROW[index];
@@ -34303,6 +34331,7 @@ class SheetPlugin extends CorePlugin {
34303
34331
  "checkZonesExistInSheet",
34304
34332
  "getCommandZones",
34305
34333
  "getUnboundedZone",
34334
+ "checkElementsIncludeAllNonFrozenHeaders",
34306
34335
  ];
34307
34336
  sheetIdsMapName = {};
34308
34337
  orderedSheetIds = [];
@@ -34359,6 +34388,9 @@ class SheetPlugin extends CorePlugin {
34359
34388
  if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
34360
34389
  return 87 /* CommandResult.InvalidHeaderIndex */;
34361
34390
  }
34391
+ else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
34392
+ return 8 /* CommandResult.NotEnoughElements */;
34393
+ }
34362
34394
  else {
34363
34395
  return 0 /* CommandResult.Success */;
34364
34396
  }
@@ -34651,6 +34683,20 @@ class SheetPlugin extends CorePlugin {
34651
34683
  }
34652
34684
  this.history.update("sheets", sheetId, "panes", panes);
34653
34685
  }
34686
+ /**
34687
+ * Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
34688
+ * This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
34689
+ */
34690
+ checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
34691
+ const paneDivisions = this.getters.getPaneDivisions(sheetId);
34692
+ const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
34693
+ const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
34694
+ if (!startIndex) {
34695
+ return false;
34696
+ }
34697
+ const indicesToCheck = range(startIndex, endIndex);
34698
+ return includesAll(elements, indicesToCheck);
34699
+ }
34654
34700
  // ---------------------------------------------------------------------------
34655
34701
  // Row/Col manipulation
34656
34702
  // ---------------------------------------------------------------------------
@@ -43937,6 +43983,9 @@ class InternalViewport {
43937
43983
  const sheetId = this.sheetId;
43938
43984
  this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
43939
43985
  this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
43986
+ if (this.left === -1) {
43987
+ this.left = this.boundaries.left;
43988
+ }
43940
43989
  if (this.right === -1) {
43941
43990
  this.right = this.getters.getNumberCols(sheetId) - 1;
43942
43991
  }
@@ -43950,6 +43999,9 @@ class InternalViewport {
43950
43999
  const sheetId = this.sheetId;
43951
44000
  this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
43952
44001
  this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
44002
+ if (this.top === -1) {
44003
+ this.top = this.boundaries.top;
44004
+ }
43953
44005
  if (this.bottom === -1) {
43954
44006
  this.bottom = this.getters.getNumberRows(sheetId) - 1;
43955
44007
  }
@@ -50550,6 +50602,6 @@ exports.setTranslationMethod = setTranslationMethod;
50550
50602
  exports.tokenize = tokenize;
50551
50603
 
50552
50604
 
50553
- __info__.version = '16.4.5';
50554
- __info__.date = '2023-08-29T13:55:58.527Z';
50555
- __info__.hash = '105c130';
50605
+ __info__.version = '16.4.6';
50606
+ __info__.date = '2023-09-12T11:43:54.243Z';
50607
+ __info__.hash = '5746355';
@@ -424,6 +424,7 @@ interface LineChartDefinition {
424
424
  readonly labelsAsText: boolean;
425
425
  readonly stacked: boolean;
426
426
  readonly aggregated?: boolean;
427
+ readonly cumulative: boolean;
427
428
  }
428
429
  type LineChartRuntime = {
429
430
  chartJsConfig: ChartConfiguration;
@@ -490,6 +491,7 @@ interface ExcelChartDefinition {
490
491
  readonly verticalAxisPosition: VerticalAxisPosition;
491
492
  readonly legendPosition: LegendPosition;
492
493
  readonly stacked?: boolean;
494
+ readonly cumulative?: boolean;
493
495
  }
494
496
  interface ChartCreationContext {
495
497
  readonly range?: string[];
@@ -3462,11 +3464,11 @@ declare class HeaderSizePlugin extends CorePlugin<HeaderSizeState$1> implements
3462
3464
  }
3463
3465
 
3464
3466
  declare class HeaderVisibilityPlugin extends CorePlugin {
3465
- static getters: readonly ["canRemoveHeaders", "getHiddenColsGroups", "getHiddenRowsGroups", "isRowHiddenByUser", "isColHiddenByUser"];
3467
+ static getters: readonly ["checkElementsIncludeAllVisibleHeaders", "getHiddenColsGroups", "getHiddenRowsGroups", "isRowHiddenByUser", "isColHiddenByUser"];
3466
3468
  private readonly hiddenHeaders;
3467
3469
  allowDispatch(cmd: Command): CommandResult.Success | CommandResult.NotEnoughElements | CommandResult.InvalidSheetId | CommandResult.TooManyHiddenElements | CommandResult.InvalidHeaderIndex;
3468
3470
  handle(cmd: Command): void;
3469
- canRemoveHeaders(sheetId: UID, dimension: Dimension, elements: HeaderIndex[]): boolean;
3471
+ checkElementsIncludeAllVisibleHeaders(sheetId: UID, dimension: Dimension, elements: HeaderIndex[]): boolean;
3470
3472
  isRowHiddenByUser(sheetId: UID, index: HeaderIndex): boolean;
3471
3473
  isColHiddenByUser(sheetId: UID, index: HeaderIndex): boolean;
3472
3474
  getHiddenColsGroups(sheetId: UID): ConsecutiveIndexes[];
@@ -3603,7 +3605,7 @@ interface SheetState$1 {
3603
3605
  readonly cellPosition: Record<UID, CellPosition | undefined>;
3604
3606
  }
3605
3607
  declare class SheetPlugin extends CorePlugin<SheetState$1> implements SheetState$1 {
3606
- 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", "checkZonesExistInSheet", "getCommandZones", "getUnboundedZone"];
3608
+ 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", "checkZonesExistInSheet", "getCommandZones", "getUnboundedZone", "checkElementsIncludeAllNonFrozenHeaders"];
3607
3609
  readonly sheetIdsMapName: Record<string, UID | undefined>;
3608
3610
  readonly orderedSheetIds: UID[];
3609
3611
  readonly sheets: Record<UID, Sheet | undefined>;
@@ -3646,6 +3648,11 @@ declare class SheetPlugin extends CorePlugin<SheetState$1> implements SheetState
3646
3648
  getUnboundedZone(sheetId: UID, zone: Zone): UnboundedZone;
3647
3649
  getPaneDivisions(sheetId: UID): Readonly<PaneDivision>;
3648
3650
  private setPaneDivisions;
3651
+ /**
3652
+ * Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
3653
+ * This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
3654
+ */
3655
+ checkElementsIncludeAllNonFrozenHeaders(sheetId: UID, dimension: Dimension, elements: HeaderIndex[]): boolean;
3649
3656
  /**
3650
3657
  * Check if a zone only contains empty cells
3651
3658
  */
@@ -5354,6 +5361,7 @@ declare class LineConfigPanel extends LineBarPieConfigPanel {
5354
5361
  onUpdateLabelsAsText(ev: any): void;
5355
5362
  onUpdateStacked(ev: any): void;
5356
5363
  onUpdateAggregated(ev: any): void;
5364
+ onUpdateCumulative(ev: any): void;
5357
5365
  }
5358
5366
 
5359
5367
  interface Props$y {
@@ -16874,6 +16874,7 @@ class LineChart extends AbstractChart {
16874
16874
  aggregated;
16875
16875
  type = "line";
16876
16876
  dataSetsHaveTitle;
16877
+ cumulative;
16877
16878
  constructor(definition, sheetId, getters) {
16878
16879
  super(definition, sheetId, getters);
16879
16880
  this.dataSets = createDataSets(this.getters, definition.dataSets, sheetId, definition.dataSetsHaveTitle);
@@ -16885,6 +16886,7 @@ class LineChart extends AbstractChart {
16885
16886
  this.stacked = definition.stacked;
16886
16887
  this.aggregated = definition.aggregated;
16887
16888
  this.dataSetsHaveTitle = definition.dataSetsHaveTitle;
16889
+ this.cumulative = definition.cumulative;
16888
16890
  }
16889
16891
  static validateChartDefinition(validator, definition) {
16890
16892
  return validator.checkValidations(definition, checkDataset, checkLabelRange);
@@ -16905,6 +16907,7 @@ class LineChart extends AbstractChart {
16905
16907
  labelRange: context.auxiliaryRange || undefined,
16906
16908
  stacked: false,
16907
16909
  aggregated: false,
16910
+ cumulative: false,
16908
16911
  };
16909
16912
  }
16910
16913
  getDefinition() {
@@ -16925,6 +16928,7 @@ class LineChart extends AbstractChart {
16925
16928
  labelsAsText: this.labelsAsText,
16926
16929
  stacked: this.stacked,
16927
16930
  aggregated: this.aggregated,
16931
+ cumulative: this.cumulative,
16928
16932
  };
16929
16933
  }
16930
16934
  getContextCreation() {
@@ -17135,6 +17139,16 @@ function createLineChartRuntime(chart, getters) {
17135
17139
  if (chart.stacked) {
17136
17140
  backgroundRGBA.a = LINE_FILL_TRANSPARENCY;
17137
17141
  }
17142
+ if (chart.cumulative) {
17143
+ let accumulator = 0;
17144
+ data = data.map((value) => {
17145
+ if (!isNaN(value)) {
17146
+ accumulator += parseFloat(value);
17147
+ return accumulator;
17148
+ }
17149
+ return value;
17150
+ });
17151
+ }
17138
17152
  const backgroundColor = rgbaToHex(backgroundRGBA);
17139
17153
  const dataset = {
17140
17154
  label,
@@ -18009,6 +18023,7 @@ function getSmartChartDefinition(zone, getters) {
18009
18023
  labelsAsText: false,
18010
18024
  stacked: false,
18011
18025
  aggregated: false,
18026
+ cumulative: false,
18012
18027
  labelRange: labelRangeXc,
18013
18028
  type: "line",
18014
18029
  dataSetsHaveTitle,
@@ -18172,6 +18187,13 @@ const REMOVE_ROWS_ACTION = (env) => {
18172
18187
  elements: rows,
18173
18188
  });
18174
18189
  };
18190
+ const CAN_REMOVE_COLUMNS_ROWS = (dimension, env) => {
18191
+ const sheetId = env.model.getters.getActiveSheetId();
18192
+ const selectedElements = env.model.getters.getElementsFromSelection(dimension);
18193
+ const includesAllVisibleHeaders = env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, dimension, selectedElements);
18194
+ const includesAllNonFrozenHeaders = env.model.getters.checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, selectedElements);
18195
+ return !includesAllVisibleHeaders && !includesAllNonFrozenHeaders;
18196
+ };
18175
18197
  const REMOVE_COLUMNS_NAME = (env) => {
18176
18198
  if (env.model.getters.getSelectedZones().length > 1) {
18177
18199
  return _lt("Delete columns");
@@ -18196,7 +18218,7 @@ const REMOVE_COLUMNS_NAME = (env) => {
18196
18218
  const NOT_ALL_VISIBLE_ROWS_SELECTED = (env) => {
18197
18219
  const sheetId = env.model.getters.getActiveSheetId();
18198
18220
  const selectedRows = env.model.getters.getElementsFromSelection("ROW");
18199
- return env.model.getters.canRemoveHeaders(sheetId, "ROW", selectedRows);
18221
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "ROW", selectedRows);
18200
18222
  };
18201
18223
  const REMOVE_COLUMNS_ACTION = (env) => {
18202
18224
  let columns = [...env.model.getters.getActiveCols()];
@@ -18215,7 +18237,7 @@ const REMOVE_COLUMNS_ACTION = (env) => {
18215
18237
  const NOT_ALL_VISIBLE_COLS_SELECTED = (env) => {
18216
18238
  const sheetId = env.model.getters.getActiveSheetId();
18217
18239
  const selectedCols = env.model.getters.getElementsFromSelection("COL");
18218
- return env.model.getters.canRemoveHeaders(sheetId, "COL", selectedCols);
18240
+ return !env.model.getters.checkElementsIncludeAllVisibleHeaders(sheetId, "COL", selectedCols);
18219
18241
  };
18220
18242
  const INSERT_ROWS_BEFORE_ACTION = (env) => {
18221
18243
  const activeRows = env.model.getters.getActiveRows();
@@ -18487,7 +18509,7 @@ const deleteValues = {
18487
18509
  const deleteRows = {
18488
18510
  name: REMOVE_ROWS_NAME,
18489
18511
  execute: REMOVE_ROWS_ACTION,
18490
- isVisible: NOT_ALL_VISIBLE_ROWS_SELECTED,
18512
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("ROW", env),
18491
18513
  };
18492
18514
  const deleteRow = {
18493
18515
  ...deleteRows,
@@ -18500,7 +18522,7 @@ const clearRows = {
18500
18522
  const deleteCols = {
18501
18523
  name: REMOVE_COLUMNS_NAME,
18502
18524
  execute: REMOVE_COLUMNS_ACTION,
18503
- isVisible: NOT_ALL_VISIBLE_COLS_SELECTED,
18525
+ isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
18504
18526
  };
18505
18527
  const deleteCol = {
18506
18528
  ...deleteCols,
@@ -21475,6 +21497,11 @@ class LineConfigPanel extends LineBarPieConfigPanel {
21475
21497
  aggregated: ev.target.checked,
21476
21498
  });
21477
21499
  }
21500
+ onUpdateCumulative(ev) {
21501
+ this.props.updateChart(this.props.figureId, {
21502
+ cumulative: ev.target.checked,
21503
+ });
21504
+ }
21478
21505
  }
21479
21506
 
21480
21507
  class LineChartDesignPanel extends LineBarPieDesignPanel {
@@ -28448,6 +28475,7 @@ function convertChartData(chartData) {
28448
28475
  legendPosition: chartData.legendPosition,
28449
28476
  stacked: chartData.stacked || false,
28450
28477
  aggregated: false,
28478
+ cumulative: chartData.cumulative || false,
28451
28479
  labelsAsText: false,
28452
28480
  };
28453
28481
  }
@@ -33108,7 +33136,7 @@ class HeaderSizePlugin extends CorePlugin {
33108
33136
 
33109
33137
  class HeaderVisibilityPlugin extends CorePlugin {
33110
33138
  static getters = [
33111
- "canRemoveHeaders",
33139
+ "checkElementsIncludeAllVisibleHeaders",
33112
33140
  "getHiddenColsGroups",
33113
33141
  "getHiddenRowsGroups",
33114
33142
  "isRowHiddenByUser",
@@ -33142,7 +33170,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
33142
33170
  if (!this.getters.tryGetSheet(cmd.sheetId)) {
33143
33171
  return 28 /* CommandResult.InvalidSheetId */;
33144
33172
  }
33145
- if (!this.canRemoveHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
33173
+ if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
33146
33174
  return 8 /* CommandResult.NotEnoughElements */;
33147
33175
  }
33148
33176
  return 0 /* CommandResult.Success */;
@@ -33192,9 +33220,9 @@ class HeaderVisibilityPlugin extends CorePlugin {
33192
33220
  }
33193
33221
  return;
33194
33222
  }
33195
- canRemoveHeaders(sheetId, dimension, elements) {
33223
+ checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
33196
33224
  const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
33197
- return !includesAll(elements, visibleHeaders);
33225
+ return includesAll(elements, visibleHeaders);
33198
33226
  }
33199
33227
  isRowHiddenByUser(sheetId, index) {
33200
33228
  return this.hiddenHeaders[sheetId].ROW[index];
@@ -34299,6 +34327,7 @@ class SheetPlugin extends CorePlugin {
34299
34327
  "checkZonesExistInSheet",
34300
34328
  "getCommandZones",
34301
34329
  "getUnboundedZone",
34330
+ "checkElementsIncludeAllNonFrozenHeaders",
34302
34331
  ];
34303
34332
  sheetIdsMapName = {};
34304
34333
  orderedSheetIds = [];
@@ -34355,6 +34384,9 @@ class SheetPlugin extends CorePlugin {
34355
34384
  if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
34356
34385
  return 87 /* CommandResult.InvalidHeaderIndex */;
34357
34386
  }
34387
+ else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
34388
+ return 8 /* CommandResult.NotEnoughElements */;
34389
+ }
34358
34390
  else {
34359
34391
  return 0 /* CommandResult.Success */;
34360
34392
  }
@@ -34647,6 +34679,20 @@ class SheetPlugin extends CorePlugin {
34647
34679
  }
34648
34680
  this.history.update("sheets", sheetId, "panes", panes);
34649
34681
  }
34682
+ /**
34683
+ * Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
34684
+ * This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
34685
+ */
34686
+ checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
34687
+ const paneDivisions = this.getters.getPaneDivisions(sheetId);
34688
+ const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
34689
+ const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
34690
+ if (!startIndex) {
34691
+ return false;
34692
+ }
34693
+ const indicesToCheck = range(startIndex, endIndex);
34694
+ return includesAll(elements, indicesToCheck);
34695
+ }
34650
34696
  // ---------------------------------------------------------------------------
34651
34697
  // Row/Col manipulation
34652
34698
  // ---------------------------------------------------------------------------
@@ -43933,6 +43979,9 @@ class InternalViewport {
43933
43979
  const sheetId = this.sheetId;
43934
43980
  this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
43935
43981
  this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
43982
+ if (this.left === -1) {
43983
+ this.left = this.boundaries.left;
43984
+ }
43936
43985
  if (this.right === -1) {
43937
43986
  this.right = this.getters.getNumberCols(sheetId) - 1;
43938
43987
  }
@@ -43946,6 +43995,9 @@ class InternalViewport {
43946
43995
  const sheetId = this.sheetId;
43947
43996
  this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
43948
43997
  this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
43998
+ if (this.top === -1) {
43999
+ this.top = this.boundaries.top;
44000
+ }
43949
44001
  if (this.bottom === -1) {
43950
44002
  this.bottom = this.getters.getNumberRows(sheetId) - 1;
43951
44003
  }
@@ -50514,6 +50566,6 @@ const constants = {
50514
50566
  export { AbstractChart, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, __info__, addFunction, astToFormula, compile, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, tokenize };
50515
50567
 
50516
50568
 
50517
- __info__.version = '16.4.5';
50518
- __info__.date = '2023-08-29T13:55:58.527Z';
50519
- __info__.hash = '105c130';
50569
+ __info__.version = '16.4.6';
50570
+ __info__.date = '2023-09-12T11:43:54.243Z';
50571
+ __info__.hash = '5746355';