@odoo/o-spreadsheet 16.4.4 → 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.
- package/dist/o-spreadsheet.cjs.js +72 -28
- package/dist/o-spreadsheet.d.ts +11 -3
- package/dist/o-spreadsheet.esm.js +72 -28
- package/dist/o-spreadsheet.iife.js +72 -28
- package/dist/o-spreadsheet.iife.min.js +76 -76
- package/package.json +1 -1
|
@@ -6065,7 +6065,7 @@ class Menu extends owl.Component {
|
|
|
6065
6065
|
};
|
|
6066
6066
|
}
|
|
6067
6067
|
get childrenHaveIcon() {
|
|
6068
|
-
return this.props.menuItems.some((menuItem) => !!
|
|
6068
|
+
return this.props.menuItems.some((menuItem) => !!this.getIconName(menuItem));
|
|
6069
6069
|
}
|
|
6070
6070
|
getIconName(menu) {
|
|
6071
6071
|
if (menu.icon(this.env)) {
|
|
@@ -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.
|
|
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.
|
|
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:
|
|
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:
|
|
18529
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
|
|
18508
18530
|
};
|
|
18509
18531
|
const deleteCol = {
|
|
18510
18532
|
...deleteCols,
|
|
@@ -20731,34 +20753,25 @@ class BarConfigPanel extends LineBarPieConfigPanel {
|
|
|
20731
20753
|
}
|
|
20732
20754
|
|
|
20733
20755
|
function startDnd(onMouseMove, onMouseUp, onMouseDown = () => { }) {
|
|
20734
|
-
const _onMouseDown = (ev) => {
|
|
20735
|
-
ev.preventDefault();
|
|
20736
|
-
onMouseDown(ev);
|
|
20737
|
-
};
|
|
20738
|
-
const _onMouseMove = (ev) => {
|
|
20739
|
-
ev.preventDefault();
|
|
20740
|
-
onMouseMove(ev);
|
|
20741
|
-
};
|
|
20742
20756
|
const _onMouseUp = (ev) => {
|
|
20743
|
-
ev.preventDefault();
|
|
20744
20757
|
onMouseUp(ev);
|
|
20745
|
-
window.removeEventListener("mousedown",
|
|
20758
|
+
window.removeEventListener("mousedown", onMouseDown);
|
|
20746
20759
|
window.removeEventListener("mouseup", _onMouseUp);
|
|
20747
20760
|
window.removeEventListener("dragstart", _onDragStart);
|
|
20748
|
-
window.removeEventListener("mousemove",
|
|
20749
|
-
window.removeEventListener("wheel",
|
|
20761
|
+
window.removeEventListener("mousemove", onMouseMove);
|
|
20762
|
+
window.removeEventListener("wheel", onMouseMove);
|
|
20750
20763
|
};
|
|
20751
20764
|
function _onDragStart(ev) {
|
|
20752
20765
|
ev.preventDefault();
|
|
20753
20766
|
}
|
|
20754
|
-
window.addEventListener("mousedown",
|
|
20767
|
+
window.addEventListener("mousedown", onMouseDown);
|
|
20755
20768
|
window.addEventListener("mouseup", _onMouseUp);
|
|
20756
20769
|
window.addEventListener("dragstart", _onDragStart);
|
|
20757
|
-
window.addEventListener("mousemove",
|
|
20770
|
+
window.addEventListener("mousemove", onMouseMove);
|
|
20758
20771
|
// mouse wheel on window is by default a passive event.
|
|
20759
20772
|
// preventDefault() is not allowed in passive event handler.
|
|
20760
20773
|
// https://chromestatus.com/feature/6662647093133312
|
|
20761
|
-
window.addEventListener("wheel",
|
|
20774
|
+
window.addEventListener("wheel", onMouseMove, { passive: false });
|
|
20762
20775
|
}
|
|
20763
20776
|
/**
|
|
20764
20777
|
* Function to be used during a mousedown event, this function allows to
|
|
@@ -21488,6 +21501,11 @@ class LineConfigPanel extends LineBarPieConfigPanel {
|
|
|
21488
21501
|
aggregated: ev.target.checked,
|
|
21489
21502
|
});
|
|
21490
21503
|
}
|
|
21504
|
+
onUpdateCumulative(ev) {
|
|
21505
|
+
this.props.updateChart(this.props.figureId, {
|
|
21506
|
+
cumulative: ev.target.checked,
|
|
21507
|
+
});
|
|
21508
|
+
}
|
|
21491
21509
|
}
|
|
21492
21510
|
|
|
21493
21511
|
class LineChartDesignPanel extends LineBarPieDesignPanel {
|
|
@@ -26776,7 +26794,8 @@ class Grid extends owl.Component {
|
|
|
26776
26794
|
}
|
|
26777
26795
|
let prevCol = col;
|
|
26778
26796
|
let prevRow = row;
|
|
26779
|
-
const onMouseMove = (col, row) => {
|
|
26797
|
+
const onMouseMove = (col, row, ev) => {
|
|
26798
|
+
ev.preventDefault();
|
|
26780
26799
|
if ((col !== prevCol && col != -1) || (row !== prevRow && row != -1)) {
|
|
26781
26800
|
prevCol = col === -1 ? prevCol : col;
|
|
26782
26801
|
prevRow = row === -1 ? prevRow : row;
|
|
@@ -28460,6 +28479,7 @@ function convertChartData(chartData) {
|
|
|
28460
28479
|
legendPosition: chartData.legendPosition,
|
|
28461
28480
|
stacked: chartData.stacked || false,
|
|
28462
28481
|
aggregated: false,
|
|
28482
|
+
cumulative: chartData.cumulative || false,
|
|
28463
28483
|
labelsAsText: false,
|
|
28464
28484
|
};
|
|
28465
28485
|
}
|
|
@@ -33120,7 +33140,7 @@ class HeaderSizePlugin extends CorePlugin {
|
|
|
33120
33140
|
|
|
33121
33141
|
class HeaderVisibilityPlugin extends CorePlugin {
|
|
33122
33142
|
static getters = [
|
|
33123
|
-
"
|
|
33143
|
+
"checkElementsIncludeAllVisibleHeaders",
|
|
33124
33144
|
"getHiddenColsGroups",
|
|
33125
33145
|
"getHiddenRowsGroups",
|
|
33126
33146
|
"isRowHiddenByUser",
|
|
@@ -33154,7 +33174,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
33154
33174
|
if (!this.getters.tryGetSheet(cmd.sheetId)) {
|
|
33155
33175
|
return 28 /* CommandResult.InvalidSheetId */;
|
|
33156
33176
|
}
|
|
33157
|
-
if (
|
|
33177
|
+
if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
33158
33178
|
return 8 /* CommandResult.NotEnoughElements */;
|
|
33159
33179
|
}
|
|
33160
33180
|
return 0 /* CommandResult.Success */;
|
|
@@ -33204,9 +33224,9 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
33204
33224
|
}
|
|
33205
33225
|
return;
|
|
33206
33226
|
}
|
|
33207
|
-
|
|
33227
|
+
checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
|
|
33208
33228
|
const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
|
|
33209
|
-
return
|
|
33229
|
+
return includesAll(elements, visibleHeaders);
|
|
33210
33230
|
}
|
|
33211
33231
|
isRowHiddenByUser(sheetId, index) {
|
|
33212
33232
|
return this.hiddenHeaders[sheetId].ROW[index];
|
|
@@ -34311,6 +34331,7 @@ class SheetPlugin extends CorePlugin {
|
|
|
34311
34331
|
"checkZonesExistInSheet",
|
|
34312
34332
|
"getCommandZones",
|
|
34313
34333
|
"getUnboundedZone",
|
|
34334
|
+
"checkElementsIncludeAllNonFrozenHeaders",
|
|
34314
34335
|
];
|
|
34315
34336
|
sheetIdsMapName = {};
|
|
34316
34337
|
orderedSheetIds = [];
|
|
@@ -34367,6 +34388,9 @@ class SheetPlugin extends CorePlugin {
|
|
|
34367
34388
|
if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
|
|
34368
34389
|
return 87 /* CommandResult.InvalidHeaderIndex */;
|
|
34369
34390
|
}
|
|
34391
|
+
else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
34392
|
+
return 8 /* CommandResult.NotEnoughElements */;
|
|
34393
|
+
}
|
|
34370
34394
|
else {
|
|
34371
34395
|
return 0 /* CommandResult.Success */;
|
|
34372
34396
|
}
|
|
@@ -34659,6 +34683,20 @@ class SheetPlugin extends CorePlugin {
|
|
|
34659
34683
|
}
|
|
34660
34684
|
this.history.update("sheets", sheetId, "panes", panes);
|
|
34661
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
|
+
}
|
|
34662
34700
|
// ---------------------------------------------------------------------------
|
|
34663
34701
|
// Row/Col manipulation
|
|
34664
34702
|
// ---------------------------------------------------------------------------
|
|
@@ -43945,6 +43983,9 @@ class InternalViewport {
|
|
|
43945
43983
|
const sheetId = this.sheetId;
|
|
43946
43984
|
this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
|
|
43947
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
|
+
}
|
|
43948
43989
|
if (this.right === -1) {
|
|
43949
43990
|
this.right = this.getters.getNumberCols(sheetId) - 1;
|
|
43950
43991
|
}
|
|
@@ -43958,6 +43999,9 @@ class InternalViewport {
|
|
|
43958
43999
|
const sheetId = this.sheetId;
|
|
43959
44000
|
this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
|
|
43960
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
|
+
}
|
|
43961
44005
|
if (this.bottom === -1) {
|
|
43962
44006
|
this.bottom = this.getters.getNumberRows(sheetId) - 1;
|
|
43963
44007
|
}
|
|
@@ -50558,6 +50602,6 @@ exports.setTranslationMethod = setTranslationMethod;
|
|
|
50558
50602
|
exports.tokenize = tokenize;
|
|
50559
50603
|
|
|
50560
50604
|
|
|
50561
|
-
__info__.version = '16.4.
|
|
50562
|
-
__info__.date = '2023-
|
|
50563
|
-
__info__.hash = '
|
|
50605
|
+
__info__.version = '16.4.6';
|
|
50606
|
+
__info__.date = '2023-09-12T11:43:54.243Z';
|
|
50607
|
+
__info__.hash = '5746355';
|
package/dist/o-spreadsheet.d.ts
CHANGED
|
@@ -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 ["
|
|
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
|
-
|
|
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 {
|
|
@@ -6061,7 +6061,7 @@ class Menu extends Component {
|
|
|
6061
6061
|
};
|
|
6062
6062
|
}
|
|
6063
6063
|
get childrenHaveIcon() {
|
|
6064
|
-
return this.props.menuItems.some((menuItem) => !!
|
|
6064
|
+
return this.props.menuItems.some((menuItem) => !!this.getIconName(menuItem));
|
|
6065
6065
|
}
|
|
6066
6066
|
getIconName(menu) {
|
|
6067
6067
|
if (menu.icon(this.env)) {
|
|
@@ -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.
|
|
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.
|
|
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:
|
|
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:
|
|
18525
|
+
isVisible: (env) => CAN_REMOVE_COLUMNS_ROWS("COL", env),
|
|
18504
18526
|
};
|
|
18505
18527
|
const deleteCol = {
|
|
18506
18528
|
...deleteCols,
|
|
@@ -20727,34 +20749,25 @@ class BarConfigPanel extends LineBarPieConfigPanel {
|
|
|
20727
20749
|
}
|
|
20728
20750
|
|
|
20729
20751
|
function startDnd(onMouseMove, onMouseUp, onMouseDown = () => { }) {
|
|
20730
|
-
const _onMouseDown = (ev) => {
|
|
20731
|
-
ev.preventDefault();
|
|
20732
|
-
onMouseDown(ev);
|
|
20733
|
-
};
|
|
20734
|
-
const _onMouseMove = (ev) => {
|
|
20735
|
-
ev.preventDefault();
|
|
20736
|
-
onMouseMove(ev);
|
|
20737
|
-
};
|
|
20738
20752
|
const _onMouseUp = (ev) => {
|
|
20739
|
-
ev.preventDefault();
|
|
20740
20753
|
onMouseUp(ev);
|
|
20741
|
-
window.removeEventListener("mousedown",
|
|
20754
|
+
window.removeEventListener("mousedown", onMouseDown);
|
|
20742
20755
|
window.removeEventListener("mouseup", _onMouseUp);
|
|
20743
20756
|
window.removeEventListener("dragstart", _onDragStart);
|
|
20744
|
-
window.removeEventListener("mousemove",
|
|
20745
|
-
window.removeEventListener("wheel",
|
|
20757
|
+
window.removeEventListener("mousemove", onMouseMove);
|
|
20758
|
+
window.removeEventListener("wheel", onMouseMove);
|
|
20746
20759
|
};
|
|
20747
20760
|
function _onDragStart(ev) {
|
|
20748
20761
|
ev.preventDefault();
|
|
20749
20762
|
}
|
|
20750
|
-
window.addEventListener("mousedown",
|
|
20763
|
+
window.addEventListener("mousedown", onMouseDown);
|
|
20751
20764
|
window.addEventListener("mouseup", _onMouseUp);
|
|
20752
20765
|
window.addEventListener("dragstart", _onDragStart);
|
|
20753
|
-
window.addEventListener("mousemove",
|
|
20766
|
+
window.addEventListener("mousemove", onMouseMove);
|
|
20754
20767
|
// mouse wheel on window is by default a passive event.
|
|
20755
20768
|
// preventDefault() is not allowed in passive event handler.
|
|
20756
20769
|
// https://chromestatus.com/feature/6662647093133312
|
|
20757
|
-
window.addEventListener("wheel",
|
|
20770
|
+
window.addEventListener("wheel", onMouseMove, { passive: false });
|
|
20758
20771
|
}
|
|
20759
20772
|
/**
|
|
20760
20773
|
* Function to be used during a mousedown event, this function allows to
|
|
@@ -21484,6 +21497,11 @@ class LineConfigPanel extends LineBarPieConfigPanel {
|
|
|
21484
21497
|
aggregated: ev.target.checked,
|
|
21485
21498
|
});
|
|
21486
21499
|
}
|
|
21500
|
+
onUpdateCumulative(ev) {
|
|
21501
|
+
this.props.updateChart(this.props.figureId, {
|
|
21502
|
+
cumulative: ev.target.checked,
|
|
21503
|
+
});
|
|
21504
|
+
}
|
|
21487
21505
|
}
|
|
21488
21506
|
|
|
21489
21507
|
class LineChartDesignPanel extends LineBarPieDesignPanel {
|
|
@@ -26772,7 +26790,8 @@ class Grid extends Component {
|
|
|
26772
26790
|
}
|
|
26773
26791
|
let prevCol = col;
|
|
26774
26792
|
let prevRow = row;
|
|
26775
|
-
const onMouseMove = (col, row) => {
|
|
26793
|
+
const onMouseMove = (col, row, ev) => {
|
|
26794
|
+
ev.preventDefault();
|
|
26776
26795
|
if ((col !== prevCol && col != -1) || (row !== prevRow && row != -1)) {
|
|
26777
26796
|
prevCol = col === -1 ? prevCol : col;
|
|
26778
26797
|
prevRow = row === -1 ? prevRow : row;
|
|
@@ -28456,6 +28475,7 @@ function convertChartData(chartData) {
|
|
|
28456
28475
|
legendPosition: chartData.legendPosition,
|
|
28457
28476
|
stacked: chartData.stacked || false,
|
|
28458
28477
|
aggregated: false,
|
|
28478
|
+
cumulative: chartData.cumulative || false,
|
|
28459
28479
|
labelsAsText: false,
|
|
28460
28480
|
};
|
|
28461
28481
|
}
|
|
@@ -33116,7 +33136,7 @@ class HeaderSizePlugin extends CorePlugin {
|
|
|
33116
33136
|
|
|
33117
33137
|
class HeaderVisibilityPlugin extends CorePlugin {
|
|
33118
33138
|
static getters = [
|
|
33119
|
-
"
|
|
33139
|
+
"checkElementsIncludeAllVisibleHeaders",
|
|
33120
33140
|
"getHiddenColsGroups",
|
|
33121
33141
|
"getHiddenRowsGroups",
|
|
33122
33142
|
"isRowHiddenByUser",
|
|
@@ -33150,7 +33170,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
33150
33170
|
if (!this.getters.tryGetSheet(cmd.sheetId)) {
|
|
33151
33171
|
return 28 /* CommandResult.InvalidSheetId */;
|
|
33152
33172
|
}
|
|
33153
|
-
if (
|
|
33173
|
+
if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
33154
33174
|
return 8 /* CommandResult.NotEnoughElements */;
|
|
33155
33175
|
}
|
|
33156
33176
|
return 0 /* CommandResult.Success */;
|
|
@@ -33200,9 +33220,9 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
33200
33220
|
}
|
|
33201
33221
|
return;
|
|
33202
33222
|
}
|
|
33203
|
-
|
|
33223
|
+
checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
|
|
33204
33224
|
const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
|
|
33205
|
-
return
|
|
33225
|
+
return includesAll(elements, visibleHeaders);
|
|
33206
33226
|
}
|
|
33207
33227
|
isRowHiddenByUser(sheetId, index) {
|
|
33208
33228
|
return this.hiddenHeaders[sheetId].ROW[index];
|
|
@@ -34307,6 +34327,7 @@ class SheetPlugin extends CorePlugin {
|
|
|
34307
34327
|
"checkZonesExistInSheet",
|
|
34308
34328
|
"getCommandZones",
|
|
34309
34329
|
"getUnboundedZone",
|
|
34330
|
+
"checkElementsIncludeAllNonFrozenHeaders",
|
|
34310
34331
|
];
|
|
34311
34332
|
sheetIdsMapName = {};
|
|
34312
34333
|
orderedSheetIds = [];
|
|
@@ -34363,6 +34384,9 @@ class SheetPlugin extends CorePlugin {
|
|
|
34363
34384
|
if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
|
|
34364
34385
|
return 87 /* CommandResult.InvalidHeaderIndex */;
|
|
34365
34386
|
}
|
|
34387
|
+
else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
34388
|
+
return 8 /* CommandResult.NotEnoughElements */;
|
|
34389
|
+
}
|
|
34366
34390
|
else {
|
|
34367
34391
|
return 0 /* CommandResult.Success */;
|
|
34368
34392
|
}
|
|
@@ -34655,6 +34679,20 @@ class SheetPlugin extends CorePlugin {
|
|
|
34655
34679
|
}
|
|
34656
34680
|
this.history.update("sheets", sheetId, "panes", panes);
|
|
34657
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
|
+
}
|
|
34658
34696
|
// ---------------------------------------------------------------------------
|
|
34659
34697
|
// Row/Col manipulation
|
|
34660
34698
|
// ---------------------------------------------------------------------------
|
|
@@ -43941,6 +43979,9 @@ class InternalViewport {
|
|
|
43941
43979
|
const sheetId = this.sheetId;
|
|
43942
43980
|
this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
|
|
43943
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
|
+
}
|
|
43944
43985
|
if (this.right === -1) {
|
|
43945
43986
|
this.right = this.getters.getNumberCols(sheetId) - 1;
|
|
43946
43987
|
}
|
|
@@ -43954,6 +43995,9 @@ class InternalViewport {
|
|
|
43954
43995
|
const sheetId = this.sheetId;
|
|
43955
43996
|
this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
|
|
43956
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
|
+
}
|
|
43957
44001
|
if (this.bottom === -1) {
|
|
43958
44002
|
this.bottom = this.getters.getNumberRows(sheetId) - 1;
|
|
43959
44003
|
}
|
|
@@ -50522,6 +50566,6 @@ const constants = {
|
|
|
50522
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 };
|
|
50523
50567
|
|
|
50524
50568
|
|
|
50525
|
-
__info__.version = '16.4.
|
|
50526
|
-
__info__.date = '2023-
|
|
50527
|
-
__info__.hash = '
|
|
50569
|
+
__info__.version = '16.4.6';
|
|
50570
|
+
__info__.date = '2023-09-12T11:43:54.243Z';
|
|
50571
|
+
__info__.hash = '5746355';
|