@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.
- package/dist/o-spreadsheet.cjs.js +108 -47
- package/dist/o-spreadsheet.d.ts +13 -5
- package/dist/o-spreadsheet.esm.js +108 -47
- package/dist/o-spreadsheet.iife.js +108 -47
- package/dist/o-spreadsheet.iife.min.js +238 -237
- package/package.json +1 -1
|
@@ -1010,13 +1010,17 @@ function getAddHeaderStartIndex(position, base) {
|
|
|
1010
1010
|
return position === "after" ? base + 1 : base;
|
|
1011
1011
|
}
|
|
1012
1012
|
/**
|
|
1013
|
-
*
|
|
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.
|
|
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.
|
|
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
|
-
|
|
21284
|
-
|
|
21285
|
-
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
29226
|
+
checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
|
|
29196
29227
|
const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
|
|
29197
|
-
return
|
|
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
|
-
"
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
34804
|
-
|
|
34805
|
-
|
|
34806
|
-
|
|
34807
|
-
|
|
34808
|
-
|
|
34809
|
-
|
|
34810
|
-
|
|
34811
|
-
|
|
34812
|
-
|
|
34813
|
-
|
|
34814
|
-
|
|
34815
|
-
|
|
34816
|
-
|
|
34817
|
-
|
|
34818
|
-
|
|
34819
|
-
|
|
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.
|
|
42865
|
-
__info__.date = '2023-
|
|
42866
|
-
__info__.hash = '
|
|
42925
|
+
__info__.version = '16.0.19';
|
|
42926
|
+
__info__.date = '2023-09-21T15:56:31.776Z';
|
|
42927
|
+
__info__.hash = '229c563';
|
package/dist/o-spreadsheet.d.ts
CHANGED
|
@@ -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 ["
|
|
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
|
-
|
|
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 {
|