@odoo/o-spreadsheet 16.2.14 → 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.
- package/dist/o-spreadsheet.cjs.js +104 -46
- package/dist/o-spreadsheet.d.ts +13 -5
- package/dist/o-spreadsheet.esm.js +104 -46
- package/dist/o-spreadsheet.iife.js +104 -46
- package/dist/o-spreadsheet.iife.min.js +244 -243
- package/package.json +1 -1
|
@@ -991,13 +991,17 @@ function getAddHeaderStartIndex(position, base) {
|
|
|
991
991
|
return position === "after" ? base + 1 : base;
|
|
992
992
|
}
|
|
993
993
|
/**
|
|
994
|
-
*
|
|
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.
|
|
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.
|
|
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
|
|
|
@@ -20854,9 +20879,11 @@ function useCellHovered(env, gridRef, callback) {
|
|
|
20854
20879
|
}
|
|
20855
20880
|
}
|
|
20856
20881
|
function updateMousePosition(e) {
|
|
20857
|
-
|
|
20858
|
-
|
|
20859
|
-
|
|
20882
|
+
if (gridRef.el === e.target) {
|
|
20883
|
+
x = e.offsetX;
|
|
20884
|
+
y = e.offsetY;
|
|
20885
|
+
lastMoved = Date.now();
|
|
20886
|
+
}
|
|
20860
20887
|
}
|
|
20861
20888
|
function recompute() {
|
|
20862
20889
|
const { col, row } = getPosition();
|
|
@@ -24969,6 +24996,7 @@ function convertChartData(chartData) {
|
|
|
24969
24996
|
legendPosition: chartData.legendPosition,
|
|
24970
24997
|
stacked: chartData.stacked || false,
|
|
24971
24998
|
aggregated: false,
|
|
24999
|
+
cumulative: chartData.cumulative || false,
|
|
24972
25000
|
labelsAsText: false,
|
|
24973
25001
|
};
|
|
24974
25002
|
}
|
|
@@ -29623,7 +29651,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
29623
29651
|
if (!this.getters.tryGetSheet(cmd.sheetId)) {
|
|
29624
29652
|
return 27 /* CommandResult.InvalidSheetId */;
|
|
29625
29653
|
}
|
|
29626
|
-
if (
|
|
29654
|
+
if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
29627
29655
|
return 8 /* CommandResult.NotEnoughElements */;
|
|
29628
29656
|
}
|
|
29629
29657
|
return 0 /* CommandResult.Success */;
|
|
@@ -29673,9 +29701,9 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
29673
29701
|
}
|
|
29674
29702
|
return;
|
|
29675
29703
|
}
|
|
29676
|
-
|
|
29704
|
+
checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
|
|
29677
29705
|
const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
|
|
29678
|
-
return
|
|
29706
|
+
return includesAll(elements, visibleHeaders);
|
|
29679
29707
|
}
|
|
29680
29708
|
isRowHiddenByUser(sheetId, index) {
|
|
29681
29709
|
return this.hiddenHeaders[sheetId].ROW[index];
|
|
@@ -29771,7 +29799,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
29771
29799
|
}
|
|
29772
29800
|
}
|
|
29773
29801
|
HeaderVisibilityPlugin.getters = [
|
|
29774
|
-
"
|
|
29802
|
+
"checkElementsIncludeAllVisibleHeaders",
|
|
29775
29803
|
"getHiddenColsGroups",
|
|
29776
29804
|
"getHiddenRowsGroups",
|
|
29777
29805
|
"isRowHiddenByUser",
|
|
@@ -30808,6 +30836,9 @@ class SheetPlugin extends CorePlugin {
|
|
|
30808
30836
|
if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
|
|
30809
30837
|
return 86 /* CommandResult.InvalidHeaderIndex */;
|
|
30810
30838
|
}
|
|
30839
|
+
else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
30840
|
+
return 8 /* CommandResult.NotEnoughElements */;
|
|
30841
|
+
}
|
|
30811
30842
|
else {
|
|
30812
30843
|
return 0 /* CommandResult.Success */;
|
|
30813
30844
|
}
|
|
@@ -31094,6 +31125,20 @@ class SheetPlugin extends CorePlugin {
|
|
|
31094
31125
|
}
|
|
31095
31126
|
this.history.update("sheets", sheetId, "panes", panes);
|
|
31096
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
|
+
}
|
|
31097
31142
|
// ---------------------------------------------------------------------------
|
|
31098
31143
|
// Row/Col manipulation
|
|
31099
31144
|
// ---------------------------------------------------------------------------
|
|
@@ -31622,6 +31667,7 @@ SheetPlugin.getters = [
|
|
|
31622
31667
|
"getSheetSize",
|
|
31623
31668
|
"getSheetZone",
|
|
31624
31669
|
"getPaneDivisions",
|
|
31670
|
+
"checkElementsIncludeAllNonFrozenHeaders",
|
|
31625
31671
|
];
|
|
31626
31672
|
|
|
31627
31673
|
/**
|
|
@@ -32188,6 +32234,7 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
|
|
|
32188
32234
|
// stores the computed styles in the format of computedStyles.sheetName[col][row] = Style
|
|
32189
32235
|
this.computedStyles = {};
|
|
32190
32236
|
this.computedIcons = {};
|
|
32237
|
+
this.uuidGenerator = new UuidGenerator();
|
|
32191
32238
|
/**
|
|
32192
32239
|
* Execute the predicate to know if a conditional formatting rule should be applied to a cell
|
|
32193
32240
|
*/
|
|
@@ -32540,13 +32587,20 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
|
|
|
32540
32587
|
this.adaptRules(origin.sheetId, cf, [xc], toRemoveRange);
|
|
32541
32588
|
}
|
|
32542
32589
|
else {
|
|
32543
|
-
this.adaptRules(target.sheetId, cf, [xc], []);
|
|
32544
32590
|
this.adaptRules(origin.sheetId, cf, [], toRemoveRange);
|
|
32591
|
+
const cfToCopyTo = this.getCFToCopyTo(target.sheetId, cf);
|
|
32592
|
+
this.adaptRules(target.sheetId, cfToCopyTo, [xc], []);
|
|
32545
32593
|
}
|
|
32546
32594
|
}
|
|
32547
32595
|
}
|
|
32548
32596
|
}
|
|
32549
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
|
+
}
|
|
32550
32604
|
}
|
|
32551
32605
|
EvaluationConditionalFormatPlugin.getters = ["getConditionalIcon", "getCellComputedStyle"];
|
|
32552
32606
|
|
|
@@ -33068,6 +33122,9 @@ class InternalViewport {
|
|
|
33068
33122
|
const sheetId = this.sheetId;
|
|
33069
33123
|
this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
|
|
33070
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
|
+
}
|
|
33071
33128
|
if (this.right === -1) {
|
|
33072
33129
|
this.right = this.getters.getNumberCols(sheetId) - 1;
|
|
33073
33130
|
}
|
|
@@ -33081,6 +33138,9 @@ class InternalViewport {
|
|
|
33081
33138
|
const sheetId = this.sheetId;
|
|
33082
33139
|
this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
|
|
33083
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
|
+
}
|
|
33084
33144
|
if (this.bottom === -1) {
|
|
33085
33145
|
this.bottom = this.getters.getNumberRows(sheetId) - 1;
|
|
33086
33146
|
}
|
|
@@ -38002,7 +38062,7 @@ class ClipboardPlugin extends UIPlugin {
|
|
|
38002
38062
|
allowDispatch(cmd) {
|
|
38003
38063
|
switch (cmd.type) {
|
|
38004
38064
|
case "CUT":
|
|
38005
|
-
const zones =
|
|
38065
|
+
const zones = this.getters.getSelectedZones();
|
|
38006
38066
|
const state = this.getClipboardState(zones, cmd.type);
|
|
38007
38067
|
return state.isCutAllowed(zones);
|
|
38008
38068
|
case "PASTE":
|
|
@@ -38033,7 +38093,7 @@ class ClipboardPlugin extends UIPlugin {
|
|
|
38033
38093
|
switch (cmd.type) {
|
|
38034
38094
|
case "COPY":
|
|
38035
38095
|
case "CUT":
|
|
38036
|
-
const zones =
|
|
38096
|
+
const zones = this.getters.getSelectedZones();
|
|
38037
38097
|
this.state = this.getClipboardState(zones, cmd.type);
|
|
38038
38098
|
this.status = "visible";
|
|
38039
38099
|
break;
|
|
@@ -39413,26 +39473,24 @@ class GridSelectionPlugin extends UIPlugin {
|
|
|
39413
39473
|
const isBasedBefore = cmd.base < start;
|
|
39414
39474
|
const deltaCol = isBasedBefore && isCol ? thickness : 0;
|
|
39415
39475
|
const deltaRow = isBasedBefore && !isCol ? thickness : 0;
|
|
39416
|
-
|
|
39417
|
-
|
|
39418
|
-
|
|
39419
|
-
|
|
39420
|
-
|
|
39421
|
-
|
|
39422
|
-
|
|
39423
|
-
|
|
39424
|
-
|
|
39425
|
-
|
|
39426
|
-
|
|
39427
|
-
|
|
39428
|
-
|
|
39429
|
-
|
|
39430
|
-
|
|
39431
|
-
|
|
39432
|
-
|
|
39433
|
-
|
|
39434
|
-
],
|
|
39435
|
-
});
|
|
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 });
|
|
39436
39494
|
const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
|
|
39437
39495
|
let currentIndex = cmd.base;
|
|
39438
39496
|
for (const element of toRemove) {
|
|
@@ -45400,6 +45458,6 @@ exports.setTranslationMethod = setTranslationMethod;
|
|
|
45400
45458
|
exports.tokenize = tokenize;
|
|
45401
45459
|
|
|
45402
45460
|
|
|
45403
|
-
__info__.version = '16.2.
|
|
45404
|
-
__info__.date = '2023-
|
|
45405
|
-
__info__.hash = '
|
|
45461
|
+
__info__.version = '16.2.16';
|
|
45462
|
+
__info__.date = '2023-09-21T15:56:53.639Z';
|
|
45463
|
+
__info__.hash = '1a70819';
|
package/dist/o-spreadsheet.d.ts
CHANGED
|
@@ -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 ["
|
|
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
|
-
|
|
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 {
|