@odoo/o-spreadsheet 16.2.13 → 16.2.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/o-spreadsheet.cjs.js +112 -62
- package/dist/o-spreadsheet.d.ts +13 -5
- package/dist/o-spreadsheet.esm.js +112 -62
- package/dist/o-spreadsheet.iife.js +112 -62
- 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
|
|
|
@@ -19034,34 +19059,25 @@ FigureComponent.props = {
|
|
|
19034
19059
|
};
|
|
19035
19060
|
|
|
19036
19061
|
function startDnd(onMouseMove, onMouseUp, onMouseDown = () => { }) {
|
|
19037
|
-
const _onMouseDown = (ev) => {
|
|
19038
|
-
ev.preventDefault();
|
|
19039
|
-
onMouseDown(ev);
|
|
19040
|
-
};
|
|
19041
|
-
const _onMouseMove = (ev) => {
|
|
19042
|
-
ev.preventDefault();
|
|
19043
|
-
onMouseMove(ev);
|
|
19044
|
-
};
|
|
19045
19062
|
const _onMouseUp = (ev) => {
|
|
19046
|
-
ev.preventDefault();
|
|
19047
19063
|
onMouseUp(ev);
|
|
19048
|
-
window.removeEventListener("mousedown",
|
|
19064
|
+
window.removeEventListener("mousedown", onMouseDown);
|
|
19049
19065
|
window.removeEventListener("mouseup", _onMouseUp);
|
|
19050
19066
|
window.removeEventListener("dragstart", _onDragStart);
|
|
19051
|
-
window.removeEventListener("mousemove",
|
|
19052
|
-
window.removeEventListener("wheel",
|
|
19067
|
+
window.removeEventListener("mousemove", onMouseMove);
|
|
19068
|
+
window.removeEventListener("wheel", onMouseMove);
|
|
19053
19069
|
};
|
|
19054
19070
|
function _onDragStart(ev) {
|
|
19055
19071
|
ev.preventDefault();
|
|
19056
19072
|
}
|
|
19057
|
-
window.addEventListener("mousedown",
|
|
19073
|
+
window.addEventListener("mousedown", onMouseDown);
|
|
19058
19074
|
window.addEventListener("mouseup", _onMouseUp);
|
|
19059
19075
|
window.addEventListener("dragstart", _onDragStart);
|
|
19060
|
-
window.addEventListener("mousemove",
|
|
19076
|
+
window.addEventListener("mousemove", onMouseMove);
|
|
19061
19077
|
// mouse wheel on window is by default a passive event.
|
|
19062
19078
|
// preventDefault() is not allowed in passive event handler.
|
|
19063
19079
|
// https://chromestatus.com/feature/6662647093133312
|
|
19064
|
-
window.addEventListener("wheel",
|
|
19080
|
+
window.addEventListener("wheel", onMouseMove, { passive: false });
|
|
19065
19081
|
}
|
|
19066
19082
|
/**
|
|
19067
19083
|
* Function to be used during a mousedown event, this function allows to
|
|
@@ -20863,9 +20879,11 @@ function useCellHovered(env, gridRef, callback) {
|
|
|
20863
20879
|
}
|
|
20864
20880
|
}
|
|
20865
20881
|
function updateMousePosition(e) {
|
|
20866
|
-
|
|
20867
|
-
|
|
20868
|
-
|
|
20882
|
+
if (gridRef.el === e.target) {
|
|
20883
|
+
x = e.offsetX;
|
|
20884
|
+
y = e.offsetY;
|
|
20885
|
+
lastMoved = Date.now();
|
|
20886
|
+
}
|
|
20869
20887
|
}
|
|
20870
20888
|
function recompute() {
|
|
20871
20889
|
const { col, row } = getPosition();
|
|
@@ -22306,7 +22324,8 @@ class Grid extends owl.Component {
|
|
|
22306
22324
|
}
|
|
22307
22325
|
let prevCol = col;
|
|
22308
22326
|
let prevRow = row;
|
|
22309
|
-
const onMouseMove = (col, row) => {
|
|
22327
|
+
const onMouseMove = (col, row, ev) => {
|
|
22328
|
+
ev.preventDefault();
|
|
22310
22329
|
if ((col !== prevCol && col != -1) || (row !== prevRow && row != -1)) {
|
|
22311
22330
|
prevCol = col === -1 ? prevCol : col;
|
|
22312
22331
|
prevRow = row === -1 ? prevRow : row;
|
|
@@ -24977,6 +24996,7 @@ function convertChartData(chartData) {
|
|
|
24977
24996
|
legendPosition: chartData.legendPosition,
|
|
24978
24997
|
stacked: chartData.stacked || false,
|
|
24979
24998
|
aggregated: false,
|
|
24999
|
+
cumulative: chartData.cumulative || false,
|
|
24980
25000
|
labelsAsText: false,
|
|
24981
25001
|
};
|
|
24982
25002
|
}
|
|
@@ -29631,7 +29651,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
29631
29651
|
if (!this.getters.tryGetSheet(cmd.sheetId)) {
|
|
29632
29652
|
return 27 /* CommandResult.InvalidSheetId */;
|
|
29633
29653
|
}
|
|
29634
|
-
if (
|
|
29654
|
+
if (this.checkElementsIncludeAllVisibleHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
29635
29655
|
return 8 /* CommandResult.NotEnoughElements */;
|
|
29636
29656
|
}
|
|
29637
29657
|
return 0 /* CommandResult.Success */;
|
|
@@ -29681,9 +29701,9 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
29681
29701
|
}
|
|
29682
29702
|
return;
|
|
29683
29703
|
}
|
|
29684
|
-
|
|
29704
|
+
checkElementsIncludeAllVisibleHeaders(sheetId, dimension, elements) {
|
|
29685
29705
|
const visibleHeaders = this.getAllVisibleHeaders(sheetId, dimension);
|
|
29686
|
-
return
|
|
29706
|
+
return includesAll(elements, visibleHeaders);
|
|
29687
29707
|
}
|
|
29688
29708
|
isRowHiddenByUser(sheetId, index) {
|
|
29689
29709
|
return this.hiddenHeaders[sheetId].ROW[index];
|
|
@@ -29779,7 +29799,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
29779
29799
|
}
|
|
29780
29800
|
}
|
|
29781
29801
|
HeaderVisibilityPlugin.getters = [
|
|
29782
|
-
"
|
|
29802
|
+
"checkElementsIncludeAllVisibleHeaders",
|
|
29783
29803
|
"getHiddenColsGroups",
|
|
29784
29804
|
"getHiddenRowsGroups",
|
|
29785
29805
|
"isRowHiddenByUser",
|
|
@@ -30816,6 +30836,9 @@ class SheetPlugin extends CorePlugin {
|
|
|
30816
30836
|
if (Math.min(...cmd.elements) < 0 || Math.max(...cmd.elements) > elements) {
|
|
30817
30837
|
return 86 /* CommandResult.InvalidHeaderIndex */;
|
|
30818
30838
|
}
|
|
30839
|
+
else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
30840
|
+
return 8 /* CommandResult.NotEnoughElements */;
|
|
30841
|
+
}
|
|
30819
30842
|
else {
|
|
30820
30843
|
return 0 /* CommandResult.Success */;
|
|
30821
30844
|
}
|
|
@@ -31102,6 +31125,20 @@ class SheetPlugin extends CorePlugin {
|
|
|
31102
31125
|
}
|
|
31103
31126
|
this.history.update("sheets", sheetId, "panes", panes);
|
|
31104
31127
|
}
|
|
31128
|
+
/**
|
|
31129
|
+
* Checks if all non-frozen header indices are present in the provided elements of selected rows/columns.
|
|
31130
|
+
* This validation ensures that all rows or columns cannot be deleted when frozen panes exist.
|
|
31131
|
+
*/
|
|
31132
|
+
checkElementsIncludeAllNonFrozenHeaders(sheetId, dimension, elements) {
|
|
31133
|
+
const paneDivisions = this.getters.getPaneDivisions(sheetId);
|
|
31134
|
+
const startIndex = dimension === "ROW" ? paneDivisions.ySplit : paneDivisions.xSplit;
|
|
31135
|
+
const endIndex = this.getters.getNumberHeaders(sheetId, dimension);
|
|
31136
|
+
if (!startIndex) {
|
|
31137
|
+
return false;
|
|
31138
|
+
}
|
|
31139
|
+
const indicesToCheck = range(startIndex, endIndex);
|
|
31140
|
+
return includesAll(elements, indicesToCheck);
|
|
31141
|
+
}
|
|
31105
31142
|
// ---------------------------------------------------------------------------
|
|
31106
31143
|
// Row/Col manipulation
|
|
31107
31144
|
// ---------------------------------------------------------------------------
|
|
@@ -31630,6 +31667,7 @@ SheetPlugin.getters = [
|
|
|
31630
31667
|
"getSheetSize",
|
|
31631
31668
|
"getSheetZone",
|
|
31632
31669
|
"getPaneDivisions",
|
|
31670
|
+
"checkElementsIncludeAllNonFrozenHeaders",
|
|
31633
31671
|
];
|
|
31634
31672
|
|
|
31635
31673
|
/**
|
|
@@ -32196,6 +32234,7 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
|
|
|
32196
32234
|
// stores the computed styles in the format of computedStyles.sheetName[col][row] = Style
|
|
32197
32235
|
this.computedStyles = {};
|
|
32198
32236
|
this.computedIcons = {};
|
|
32237
|
+
this.uuidGenerator = new UuidGenerator();
|
|
32199
32238
|
/**
|
|
32200
32239
|
* Execute the predicate to know if a conditional formatting rule should be applied to a cell
|
|
32201
32240
|
*/
|
|
@@ -32548,13 +32587,20 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
|
|
|
32548
32587
|
this.adaptRules(origin.sheetId, cf, [xc], toRemoveRange);
|
|
32549
32588
|
}
|
|
32550
32589
|
else {
|
|
32551
|
-
this.adaptRules(target.sheetId, cf, [xc], []);
|
|
32552
32590
|
this.adaptRules(origin.sheetId, cf, [], toRemoveRange);
|
|
32591
|
+
const cfToCopyTo = this.getCFToCopyTo(target.sheetId, cf);
|
|
32592
|
+
this.adaptRules(target.sheetId, cfToCopyTo, [xc], []);
|
|
32553
32593
|
}
|
|
32554
32594
|
}
|
|
32555
32595
|
}
|
|
32556
32596
|
}
|
|
32557
32597
|
}
|
|
32598
|
+
getCFToCopyTo(targetSheetId, originCF) {
|
|
32599
|
+
const cfInTarget = this.getters
|
|
32600
|
+
.getConditionalFormats(targetSheetId)
|
|
32601
|
+
.find((cf) => cf.stopIfTrue === originCF.stopIfTrue && deepEquals(cf.rule, originCF.rule));
|
|
32602
|
+
return cfInTarget ? cfInTarget : { ...originCF, id: this.uuidGenerator.uuidv4(), ranges: [] };
|
|
32603
|
+
}
|
|
32558
32604
|
}
|
|
32559
32605
|
EvaluationConditionalFormatPlugin.getters = ["getConditionalIcon", "getCellComputedStyle"];
|
|
32560
32606
|
|
|
@@ -33076,6 +33122,9 @@ class InternalViewport {
|
|
|
33076
33122
|
const sheetId = this.sheetId;
|
|
33077
33123
|
this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
|
|
33078
33124
|
this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
|
|
33125
|
+
if (this.left === -1) {
|
|
33126
|
+
this.left = this.boundaries.left;
|
|
33127
|
+
}
|
|
33079
33128
|
if (this.right === -1) {
|
|
33080
33129
|
this.right = this.getters.getNumberCols(sheetId) - 1;
|
|
33081
33130
|
}
|
|
@@ -33089,6 +33138,9 @@ class InternalViewport {
|
|
|
33089
33138
|
const sheetId = this.sheetId;
|
|
33090
33139
|
this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
|
|
33091
33140
|
this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
|
|
33141
|
+
if (this.top === -1) {
|
|
33142
|
+
this.top = this.boundaries.top;
|
|
33143
|
+
}
|
|
33092
33144
|
if (this.bottom === -1) {
|
|
33093
33145
|
this.bottom = this.getters.getNumberRows(sheetId) - 1;
|
|
33094
33146
|
}
|
|
@@ -38010,7 +38062,7 @@ class ClipboardPlugin extends UIPlugin {
|
|
|
38010
38062
|
allowDispatch(cmd) {
|
|
38011
38063
|
switch (cmd.type) {
|
|
38012
38064
|
case "CUT":
|
|
38013
|
-
const zones =
|
|
38065
|
+
const zones = this.getters.getSelectedZones();
|
|
38014
38066
|
const state = this.getClipboardState(zones, cmd.type);
|
|
38015
38067
|
return state.isCutAllowed(zones);
|
|
38016
38068
|
case "PASTE":
|
|
@@ -38041,7 +38093,7 @@ class ClipboardPlugin extends UIPlugin {
|
|
|
38041
38093
|
switch (cmd.type) {
|
|
38042
38094
|
case "COPY":
|
|
38043
38095
|
case "CUT":
|
|
38044
|
-
const zones =
|
|
38096
|
+
const zones = this.getters.getSelectedZones();
|
|
38045
38097
|
this.state = this.getClipboardState(zones, cmd.type);
|
|
38046
38098
|
this.status = "visible";
|
|
38047
38099
|
break;
|
|
@@ -39421,26 +39473,24 @@ class GridSelectionPlugin extends UIPlugin {
|
|
|
39421
39473
|
const isBasedBefore = cmd.base < start;
|
|
39422
39474
|
const deltaCol = isBasedBefore && isCol ? thickness : 0;
|
|
39423
39475
|
const deltaRow = isBasedBefore && !isCol ? thickness : 0;
|
|
39424
|
-
|
|
39425
|
-
|
|
39426
|
-
|
|
39427
|
-
|
|
39428
|
-
|
|
39429
|
-
|
|
39430
|
-
|
|
39431
|
-
|
|
39432
|
-
|
|
39433
|
-
|
|
39434
|
-
|
|
39435
|
-
|
|
39436
|
-
|
|
39437
|
-
|
|
39438
|
-
|
|
39439
|
-
|
|
39440
|
-
|
|
39441
|
-
|
|
39442
|
-
],
|
|
39443
|
-
});
|
|
39476
|
+
const target = [
|
|
39477
|
+
{
|
|
39478
|
+
left: isCol ? start + deltaCol : 0,
|
|
39479
|
+
right: isCol ? end + deltaCol : this.getters.getNumberCols(cmd.sheetId) - 1,
|
|
39480
|
+
top: !isCol ? start + deltaRow : 0,
|
|
39481
|
+
bottom: !isCol ? end + deltaRow : this.getters.getNumberRows(cmd.sheetId) - 1,
|
|
39482
|
+
},
|
|
39483
|
+
];
|
|
39484
|
+
const state = new ClipboardCellsState(target, "CUT", this.getters, this.dispatch, this.selection);
|
|
39485
|
+
const pasteTarget = [
|
|
39486
|
+
{
|
|
39487
|
+
left: isCol ? cmd.base : 0,
|
|
39488
|
+
right: isCol ? cmd.base + thickness - 1 : this.getters.getNumberCols(cmd.sheetId) - 1,
|
|
39489
|
+
top: !isCol ? cmd.base : 0,
|
|
39490
|
+
bottom: !isCol ? cmd.base + thickness - 1 : this.getters.getNumberRows(cmd.sheetId) - 1,
|
|
39491
|
+
},
|
|
39492
|
+
];
|
|
39493
|
+
state.paste(pasteTarget, { selectTarget: true });
|
|
39444
39494
|
const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
|
|
39445
39495
|
let currentIndex = cmd.base;
|
|
39446
39496
|
for (const element of toRemove) {
|
|
@@ -45408,6 +45458,6 @@ exports.setTranslationMethod = setTranslationMethod;
|
|
|
45408
45458
|
exports.tokenize = tokenize;
|
|
45409
45459
|
|
|
45410
45460
|
|
|
45411
|
-
__info__.version = '16.2.
|
|
45412
|
-
__info__.date = '2023-
|
|
45413
|
-
__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 {
|