@odoo/o-spreadsheet 18.0.24 → 18.0.26
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 +106 -69
- package/dist/o-spreadsheet.d.ts +5 -2
- package/dist/o-spreadsheet.esm.js +106 -69
- package/dist/o-spreadsheet.iife.js +106 -69
- package/dist/o-spreadsheet.iife.min.js +10 -11
- package/dist/o_spreadsheet.xml +62 -55
- package/package.json +1 -1
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* This file is generated by o-spreadsheet build tools. Do not edit it.
|
|
4
4
|
* @see https://github.com/odoo/o-spreadsheet
|
|
5
|
-
* @version 18.0.
|
|
6
|
-
* @date 2025-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.0.26
|
|
6
|
+
* @date 2025-05-02T12:30:31.966Z
|
|
7
|
+
* @hash 5bdf504
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
'use strict';
|
|
@@ -3593,6 +3593,7 @@ exports.CommandResult = void 0;
|
|
|
3593
3593
|
CommandResult["ValueCellIsInvalidFormula"] = "ValueCellIsInvalidFormula";
|
|
3594
3594
|
CommandResult["InvalidDefinition"] = "InvalidDefinition";
|
|
3595
3595
|
CommandResult["InvalidColor"] = "InvalidColor";
|
|
3596
|
+
CommandResult["InvalidPivotDataSet"] = "InvalidPivotDataSet";
|
|
3596
3597
|
})(exports.CommandResult || (exports.CommandResult = {}));
|
|
3597
3598
|
|
|
3598
3599
|
const DEFAULT_LOCALES = [
|
|
@@ -3665,11 +3666,13 @@ const CellErrorType = {
|
|
|
3665
3666
|
NullError: "#NULL!",
|
|
3666
3667
|
};
|
|
3667
3668
|
const errorTypes = new Set(Object.values(CellErrorType));
|
|
3668
|
-
class EvaluationError
|
|
3669
|
+
class EvaluationError {
|
|
3670
|
+
message;
|
|
3669
3671
|
value;
|
|
3670
3672
|
constructor(message = _t("Error"), value = CellErrorType.GenericError) {
|
|
3671
|
-
|
|
3673
|
+
this.message = message;
|
|
3672
3674
|
this.value = value;
|
|
3675
|
+
this.message = message.toString();
|
|
3673
3676
|
}
|
|
3674
3677
|
}
|
|
3675
3678
|
class BadExpressionError extends EvaluationError {
|
|
@@ -15668,9 +15671,11 @@ const GAUGE_TITLE_PADDING_LEFT = SCORECARD_GAUGE_CHART_PADDING;
|
|
|
15668
15671
|
const GAUGE_TITLE_PADDING_TOP = SCORECARD_GAUGE_CHART_PADDING;
|
|
15669
15672
|
function drawGaugeChart(canvas, runtime) {
|
|
15670
15673
|
const canvasBoundingRect = canvas.getBoundingClientRect();
|
|
15671
|
-
|
|
15672
|
-
canvas.
|
|
15674
|
+
const dpr = window.devicePixelRatio || 1;
|
|
15675
|
+
canvas.width = dpr * canvasBoundingRect.width;
|
|
15676
|
+
canvas.height = dpr * canvasBoundingRect.height;
|
|
15673
15677
|
const ctx = canvas.getContext("2d");
|
|
15678
|
+
ctx.scale(dpr, dpr);
|
|
15674
15679
|
const config = getGaugeRenderingConfig(canvasBoundingRect, runtime, ctx);
|
|
15675
15680
|
drawBackground(ctx, config);
|
|
15676
15681
|
drawGauge(ctx, config);
|
|
@@ -16232,9 +16237,11 @@ let ScorecardChart$1 = class ScorecardChart extends AbstractChart {
|
|
|
16232
16237
|
};
|
|
16233
16238
|
function drawScoreChart(structure, canvas) {
|
|
16234
16239
|
const ctx = canvas.getContext("2d");
|
|
16235
|
-
|
|
16236
|
-
|
|
16237
|
-
canvas.height = structure.canvas.height;
|
|
16240
|
+
const dpr = window.devicePixelRatio || 1;
|
|
16241
|
+
canvas.width = dpr * structure.canvas.width;
|
|
16242
|
+
canvas.height = dpr * structure.canvas.height;
|
|
16243
|
+
ctx.scale(dpr, dpr);
|
|
16244
|
+
const availableWidth = structure.canvas.width - DEFAULT_CHART_PADDING;
|
|
16238
16245
|
ctx.fillStyle = structure.canvas.backgroundColor;
|
|
16239
16246
|
ctx.fillRect(0, 0, structure.canvas.width, structure.canvas.height);
|
|
16240
16247
|
if (structure.title) {
|
|
@@ -16911,6 +16918,7 @@ class ChartJsComponent extends owl.Component {
|
|
|
16911
16918
|
canvas = owl.useRef("graphContainer");
|
|
16912
16919
|
chart;
|
|
16913
16920
|
currentRuntime;
|
|
16921
|
+
currentDevicePixelRatio = window.devicePixelRatio;
|
|
16914
16922
|
get background() {
|
|
16915
16923
|
return this.chartRuntime.background;
|
|
16916
16924
|
}
|
|
@@ -16944,6 +16952,10 @@ class ChartJsComponent extends owl.Component {
|
|
|
16944
16952
|
}
|
|
16945
16953
|
this.currentRuntime = runtime;
|
|
16946
16954
|
}
|
|
16955
|
+
else if (this.currentDevicePixelRatio !== window.devicePixelRatio) {
|
|
16956
|
+
this.currentDevicePixelRatio = window.devicePixelRatio;
|
|
16957
|
+
this.updateChartJs(deepCopy(this.currentRuntime));
|
|
16958
|
+
}
|
|
16947
16959
|
});
|
|
16948
16960
|
}
|
|
16949
16961
|
createChart(chartData) {
|
|
@@ -16986,7 +16998,7 @@ class ScorecardChart extends owl.Component {
|
|
|
16986
16998
|
owl.useEffect(this.createChart.bind(this), () => {
|
|
16987
16999
|
const canvas = this.canvas.el;
|
|
16988
17000
|
const rect = canvas.getBoundingClientRect();
|
|
16989
|
-
return [rect.width, rect.height, this.runtime, this.canvas.el];
|
|
17001
|
+
return [rect.width, rect.height, this.runtime, this.canvas.el, window.devicePixelRatio];
|
|
16990
17002
|
});
|
|
16991
17003
|
}
|
|
16992
17004
|
createChart() {
|
|
@@ -17454,7 +17466,7 @@ const MINVERSE = {
|
|
|
17454
17466
|
assertSquareMatrix(_t("The argument square_matrix must have the same number of columns and rows."), _matrix);
|
|
17455
17467
|
const { inverted } = invertMatrix(_matrix);
|
|
17456
17468
|
if (!inverted) {
|
|
17457
|
-
|
|
17469
|
+
return new EvaluationError(_t("The matrix is not invertible."));
|
|
17458
17470
|
}
|
|
17459
17471
|
return inverted;
|
|
17460
17472
|
},
|
|
@@ -17614,7 +17626,7 @@ const TOCOL = {
|
|
|
17614
17626
|
.flat()
|
|
17615
17627
|
.filter(shouldKeepValue(_ignore));
|
|
17616
17628
|
if (result.length === 0) {
|
|
17617
|
-
|
|
17629
|
+
return new NotAvailableError(_t("No results for the given arguments of TOCOL."));
|
|
17618
17630
|
}
|
|
17619
17631
|
return [result];
|
|
17620
17632
|
},
|
|
@@ -17635,7 +17647,7 @@ const TOROW = {
|
|
|
17635
17647
|
.filter(shouldKeepValue(_ignore))
|
|
17636
17648
|
.map((item) => [item]);
|
|
17637
17649
|
if (result.length === 0 || result[0].length === 0) {
|
|
17638
|
-
|
|
17650
|
+
return new NotAvailableError(_t("No results for the given arguments of TOROW."));
|
|
17639
17651
|
}
|
|
17640
17652
|
return result;
|
|
17641
17653
|
},
|
|
@@ -18482,7 +18494,7 @@ const PRODUCT = {
|
|
|
18482
18494
|
count += 1;
|
|
18483
18495
|
}
|
|
18484
18496
|
if (isEvaluationError(f)) {
|
|
18485
|
-
|
|
18497
|
+
return j;
|
|
18486
18498
|
}
|
|
18487
18499
|
}
|
|
18488
18500
|
}
|
|
@@ -19385,7 +19397,7 @@ const MATTHEWS = {
|
|
|
19385
19397
|
const flatY = dataY.flat();
|
|
19386
19398
|
assertSameNumberOfElements(flatX, flatY);
|
|
19387
19399
|
if (flatX.length === 0) {
|
|
19388
|
-
|
|
19400
|
+
return new EvaluationError(_t("[[FUNCTION_NAME]] expects non-empty ranges for both parameters."));
|
|
19389
19401
|
}
|
|
19390
19402
|
const n = flatX.length;
|
|
19391
19403
|
let trueN = 0, trueP = 0, falseP = 0, falseN = 0;
|
|
@@ -19748,7 +19760,7 @@ const RANK = {
|
|
|
19748
19760
|
}
|
|
19749
19761
|
}
|
|
19750
19762
|
if (!found) {
|
|
19751
|
-
|
|
19763
|
+
return new NotAvailableError(_t("Value not found in the given data."));
|
|
19752
19764
|
}
|
|
19753
19765
|
return rank;
|
|
19754
19766
|
},
|
|
@@ -21373,7 +21385,7 @@ const FILTER = {
|
|
|
21373
21385
|
}
|
|
21374
21386
|
}
|
|
21375
21387
|
if (!result.length) {
|
|
21376
|
-
|
|
21388
|
+
return new NotAvailableError(_t("No match found in FILTER evaluation"));
|
|
21377
21389
|
}
|
|
21378
21390
|
return mode === "row" ? transposeMatrix(result) : result;
|
|
21379
21391
|
},
|
|
@@ -21502,7 +21514,7 @@ const UNIQUE = {
|
|
|
21502
21514
|
result.push(row.data);
|
|
21503
21515
|
}
|
|
21504
21516
|
if (!result.length)
|
|
21505
|
-
|
|
21517
|
+
return new EvaluationError(_t("No unique values found"));
|
|
21506
21518
|
return _byColumn ? result : transposeMatrix(result);
|
|
21507
21519
|
},
|
|
21508
21520
|
isExported: true,
|
|
@@ -24428,7 +24440,7 @@ const IFS = {
|
|
|
24428
24440
|
return result;
|
|
24429
24441
|
}
|
|
24430
24442
|
}
|
|
24431
|
-
|
|
24443
|
+
return new EvaluationError(_t("No match."));
|
|
24432
24444
|
},
|
|
24433
24445
|
isExported: true,
|
|
24434
24446
|
};
|
|
@@ -24619,7 +24631,7 @@ const COLUMN = {
|
|
|
24619
24631
|
],
|
|
24620
24632
|
compute: function (cellReference) {
|
|
24621
24633
|
if (isEvaluationError(cellReference?.value)) {
|
|
24622
|
-
|
|
24634
|
+
return cellReference;
|
|
24623
24635
|
}
|
|
24624
24636
|
const column = cellReference === undefined
|
|
24625
24637
|
? this.__originCellPosition?.col
|
|
@@ -24637,7 +24649,7 @@ const COLUMNS = {
|
|
|
24637
24649
|
args: [arg("range (meta)", _t("The range whose column count will be returned."))],
|
|
24638
24650
|
compute: function (range) {
|
|
24639
24651
|
if (isEvaluationError(range?.value)) {
|
|
24640
|
-
|
|
24652
|
+
return range;
|
|
24641
24653
|
}
|
|
24642
24654
|
const zone = toZone(range.value);
|
|
24643
24655
|
return zone.right - zone.left + 1;
|
|
@@ -24715,11 +24727,11 @@ const INDIRECT = {
|
|
|
24715
24727
|
compute: function (reference, useA1Notation = { value: true }) {
|
|
24716
24728
|
let _reference = reference?.value?.toString();
|
|
24717
24729
|
if (!_reference) {
|
|
24718
|
-
|
|
24730
|
+
return new InvalidReferenceError(_t("Reference should be defined."));
|
|
24719
24731
|
}
|
|
24720
24732
|
const _useA1Notation = toBoolean(useA1Notation);
|
|
24721
24733
|
if (!_useA1Notation) {
|
|
24722
|
-
|
|
24734
|
+
return new EvaluationError(_t("R1C1 notation is not supported."));
|
|
24723
24735
|
}
|
|
24724
24736
|
const sheetId = this.__originSheetId;
|
|
24725
24737
|
const originPosition = this.__originCellPosition;
|
|
@@ -24731,7 +24743,7 @@ const INDIRECT = {
|
|
|
24731
24743
|
}
|
|
24732
24744
|
const range = this.getters.getRangeFromSheetXC(sheetId, _reference);
|
|
24733
24745
|
if (range === undefined || range.invalidXc || range.invalidSheetName) {
|
|
24734
|
-
|
|
24746
|
+
return new InvalidReferenceError();
|
|
24735
24747
|
}
|
|
24736
24748
|
if (originPosition) {
|
|
24737
24749
|
this.addDependencies?.(originPosition, [range]);
|
|
@@ -24842,7 +24854,7 @@ const ROW = {
|
|
|
24842
24854
|
],
|
|
24843
24855
|
compute: function (cellReference) {
|
|
24844
24856
|
if (isEvaluationError(cellReference?.value)) {
|
|
24845
|
-
|
|
24857
|
+
return cellReference;
|
|
24846
24858
|
}
|
|
24847
24859
|
const row = cellReference === undefined
|
|
24848
24860
|
? this.__originCellPosition?.row
|
|
@@ -24860,7 +24872,7 @@ const ROWS = {
|
|
|
24860
24872
|
args: [arg("range (meta)", _t("The range whose row count will be returned."))],
|
|
24861
24873
|
compute: function (range) {
|
|
24862
24874
|
if (isEvaluationError(range?.value)) {
|
|
24863
|
-
|
|
24875
|
+
return range;
|
|
24864
24876
|
}
|
|
24865
24877
|
const zone = toZone(range.value);
|
|
24866
24878
|
return zone.bottom - zone.top + 1;
|
|
@@ -25046,11 +25058,11 @@ const PIVOT = {
|
|
|
25046
25058
|
const _pivotFormulaId = toString(pivotFormulaId);
|
|
25047
25059
|
const _rowCount = toNumber(rowCount, this.locale);
|
|
25048
25060
|
if (_rowCount < 0) {
|
|
25049
|
-
|
|
25061
|
+
return new EvaluationError(_t("The number of rows must be positive."));
|
|
25050
25062
|
}
|
|
25051
25063
|
const _columnCount = toNumber(columnCount, this.locale);
|
|
25052
25064
|
if (_columnCount < 0) {
|
|
25053
|
-
|
|
25065
|
+
return new EvaluationError(_t("The number of columns must be positive."));
|
|
25054
25066
|
}
|
|
25055
25067
|
const _includeColumnHeaders = toBoolean(includeColumnHeaders);
|
|
25056
25068
|
const _includedTotal = toBoolean(includeTotal);
|
|
@@ -25118,7 +25130,7 @@ const OFFSET = {
|
|
|
25118
25130
|
}
|
|
25119
25131
|
const _cellReference = cellReference?.value;
|
|
25120
25132
|
if (!_cellReference) {
|
|
25121
|
-
|
|
25133
|
+
return new EvaluationError("In this context, the function OFFSET needs to have a cell or range in parameter.");
|
|
25122
25134
|
}
|
|
25123
25135
|
const zone = toZone(_cellReference);
|
|
25124
25136
|
let offsetHeight = zone.bottom - zone.top + 1;
|
|
@@ -28924,7 +28936,7 @@ class GaugeChartComponent extends owl.Component {
|
|
|
28924
28936
|
owl.useEffect(() => drawGaugeChart(this.canvas.el, this.runtime), () => {
|
|
28925
28937
|
const canvas = this.canvas.el;
|
|
28926
28938
|
const rect = canvas.getBoundingClientRect();
|
|
28927
|
-
return [rect.width, rect.height, this.runtime, this.canvas.el];
|
|
28939
|
+
return [rect.width, rect.height, this.runtime, this.canvas.el, window.devicePixelRatio];
|
|
28928
28940
|
});
|
|
28929
28941
|
}
|
|
28930
28942
|
}
|
|
@@ -29049,9 +29061,6 @@ class BarChart extends AbstractChart {
|
|
|
29049
29061
|
};
|
|
29050
29062
|
}
|
|
29051
29063
|
getDefinitionForExcel() {
|
|
29052
|
-
// Excel does not support aggregating labels
|
|
29053
|
-
if (this.aggregated)
|
|
29054
|
-
return undefined;
|
|
29055
29064
|
const dataSets = this.dataSets
|
|
29056
29065
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
29057
29066
|
.filter((ds) => ds.range !== "" && ds.range !== CellErrorType.InvalidReference);
|
|
@@ -30292,9 +30301,6 @@ class LineChart extends AbstractChart {
|
|
|
30292
30301
|
return new LineChart(definition, this.sheetId, this.getters);
|
|
30293
30302
|
}
|
|
30294
30303
|
getDefinitionForExcel() {
|
|
30295
|
-
// Excel does not support aggregating labels
|
|
30296
|
-
if (this.aggregated)
|
|
30297
|
-
return undefined;
|
|
30298
30304
|
const dataSets = this.dataSets
|
|
30299
30305
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
30300
30306
|
.filter((ds) => ds.range !== "" && ds.range !== CellErrorType.InvalidReference);
|
|
@@ -30405,9 +30411,6 @@ class PieChart extends AbstractChart {
|
|
|
30405
30411
|
return new PieChart(definition, sheetId, this.getters);
|
|
30406
30412
|
}
|
|
30407
30413
|
getDefinitionForExcel() {
|
|
30408
|
-
// Excel does not support aggregating labels
|
|
30409
|
-
if (this.aggregated)
|
|
30410
|
-
return undefined;
|
|
30411
30414
|
const dataSets = this.dataSets
|
|
30412
30415
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
30413
30416
|
.filter((ds) => ds.range !== "" && ds.range !== CellErrorType.InvalidReference);
|
|
@@ -32626,18 +32629,28 @@ linkMenuRegistry.add("sheet", {
|
|
|
32626
32629
|
function useInterval(callback, delay) {
|
|
32627
32630
|
let intervalId;
|
|
32628
32631
|
const { setInterval, clearInterval } = window;
|
|
32632
|
+
const pause = () => {
|
|
32633
|
+
clearInterval(intervalId);
|
|
32634
|
+
intervalId = undefined;
|
|
32635
|
+
};
|
|
32636
|
+
const safeCallback = () => {
|
|
32637
|
+
try {
|
|
32638
|
+
callback();
|
|
32639
|
+
}
|
|
32640
|
+
catch (e) {
|
|
32641
|
+
pause();
|
|
32642
|
+
throw e;
|
|
32643
|
+
}
|
|
32644
|
+
};
|
|
32629
32645
|
owl.useEffect(() => {
|
|
32630
|
-
intervalId = setInterval(
|
|
32646
|
+
intervalId = setInterval(safeCallback, delay);
|
|
32631
32647
|
return () => clearInterval(intervalId);
|
|
32632
32648
|
}, () => [delay]);
|
|
32633
32649
|
return {
|
|
32634
|
-
pause
|
|
32635
|
-
clearInterval(intervalId);
|
|
32636
|
-
intervalId = undefined;
|
|
32637
|
-
},
|
|
32650
|
+
pause,
|
|
32638
32651
|
resume: () => {
|
|
32639
32652
|
if (intervalId === undefined) {
|
|
32640
|
-
intervalId = setInterval(
|
|
32653
|
+
intervalId = setInterval(safeCallback, delay);
|
|
32641
32654
|
}
|
|
32642
32655
|
},
|
|
32643
32656
|
};
|
|
@@ -37482,7 +37495,7 @@ class ColorPicker extends owl.Component {
|
|
|
37482
37495
|
}
|
|
37483
37496
|
setHexColor(ev) {
|
|
37484
37497
|
// only support HEX code input
|
|
37485
|
-
const val = ev.target.value.slice(0, 7);
|
|
37498
|
+
const val = ev.target.value.replace("##", "#").slice(0, 7);
|
|
37486
37499
|
this.state.customHexColor = val;
|
|
37487
37500
|
if (!isColorValid(val)) ;
|
|
37488
37501
|
else {
|
|
@@ -48357,7 +48370,7 @@ css /* scss */ `
|
|
|
48357
48370
|
position: absolute;
|
|
48358
48371
|
top: 0;
|
|
48359
48372
|
left: ${HEADER_WIDTH}px;
|
|
48360
|
-
right:
|
|
48373
|
+
right: ${SCROLLBAR_WIDTH}px;
|
|
48361
48374
|
height: ${HEADER_HEIGHT}px;
|
|
48362
48375
|
&.o-dragging {
|
|
48363
48376
|
cursor: grabbing;
|
|
@@ -48523,9 +48536,8 @@ css /* scss */ `
|
|
|
48523
48536
|
position: absolute;
|
|
48524
48537
|
top: ${HEADER_HEIGHT}px;
|
|
48525
48538
|
left: 0;
|
|
48526
|
-
|
|
48539
|
+
bottom: ${SCROLLBAR_WIDTH}px;
|
|
48527
48540
|
width: ${HEADER_WIDTH}px;
|
|
48528
|
-
height: calc(100% - ${HEADER_HEIGHT + SCROLLBAR_WIDTH}px);
|
|
48529
48541
|
&.o-dragging {
|
|
48530
48542
|
cursor: grabbing;
|
|
48531
48543
|
}
|
|
@@ -56610,6 +56622,15 @@ function adaptPivotRange(range, applyChange) {
|
|
|
56610
56622
|
}
|
|
56611
56623
|
}
|
|
56612
56624
|
class SpreadsheetPivotCorePlugin extends CorePlugin {
|
|
56625
|
+
allowDispatch(cmd) {
|
|
56626
|
+
switch (cmd.type) {
|
|
56627
|
+
case "ADD_PIVOT":
|
|
56628
|
+
case "UPDATE_PIVOT":
|
|
56629
|
+
const definition = cmd.pivot;
|
|
56630
|
+
return this.checkDataSetValidity(definition);
|
|
56631
|
+
}
|
|
56632
|
+
return "Success" /* CommandResult.Success */;
|
|
56633
|
+
}
|
|
56613
56634
|
adaptRanges(applyChange) {
|
|
56614
56635
|
for (const pivotId of this.getters.getPivotIds()) {
|
|
56615
56636
|
const definition = this.getters.getPivotCoreDefinition(pivotId);
|
|
@@ -56628,6 +56649,16 @@ class SpreadsheetPivotCorePlugin extends CorePlugin {
|
|
|
56628
56649
|
}
|
|
56629
56650
|
}
|
|
56630
56651
|
}
|
|
56652
|
+
checkDataSetValidity(definition) {
|
|
56653
|
+
if (definition.type === "SPREADSHEET" && definition.dataSet) {
|
|
56654
|
+
const { zone, sheetId } = definition.dataSet;
|
|
56655
|
+
if (!sheetId || !this.getters.tryGetSheet(sheetId) || !zone || !isZoneValid(zone)) {
|
|
56656
|
+
return "InvalidDataSet" /* CommandResult.InvalidDataSet */;
|
|
56657
|
+
}
|
|
56658
|
+
return this.getters.checkZonesExistInSheet(sheetId, [zone]);
|
|
56659
|
+
}
|
|
56660
|
+
return "Success" /* CommandResult.Success */;
|
|
56661
|
+
}
|
|
56631
56662
|
}
|
|
56632
56663
|
|
|
56633
56664
|
class TableStylePlugin extends CorePlugin {
|
|
@@ -59465,7 +59496,7 @@ class DynamicTablesPlugin extends UIPlugin {
|
|
|
59465
59496
|
tables = {};
|
|
59466
59497
|
handle(cmd) {
|
|
59467
59498
|
if (invalidateEvaluationCommands.has(cmd.type) ||
|
|
59468
|
-
(cmd.type === "UPDATE_CELL" && "content" in cmd) ||
|
|
59499
|
+
(cmd.type === "UPDATE_CELL" && ("content" in cmd || "format" in cmd)) ||
|
|
59469
59500
|
cmd.type === "EVALUATE_CELLS") {
|
|
59470
59501
|
this.tables = {};
|
|
59471
59502
|
return;
|
|
@@ -59898,6 +59929,16 @@ function withPivotPresentationLayer (PivotClass) {
|
|
|
59898
59929
|
}
|
|
59899
59930
|
return values;
|
|
59900
59931
|
}
|
|
59932
|
+
else if (rowDomain.length === this.definition.rows.length &&
|
|
59933
|
+
colDomain.length &&
|
|
59934
|
+
colDomain.length < this.definition.columns.length) {
|
|
59935
|
+
const colSubTree = this.getSubTreeMatchingDomain(table.getColTree(), colDomain);
|
|
59936
|
+
const domains = this.treeToLeafDomains(colSubTree, colDomain);
|
|
59937
|
+
for (const domain of domains) {
|
|
59938
|
+
values.push(this._getPivotCellValueAndFormat(measure.id, rowDomain.concat(domain)));
|
|
59939
|
+
}
|
|
59940
|
+
return values;
|
|
59941
|
+
}
|
|
59901
59942
|
else {
|
|
59902
59943
|
const tree = table.getRowTree();
|
|
59903
59944
|
const subTree = this.getSubTreeMatchingDomain(tree, rowDomain);
|
|
@@ -63259,7 +63300,7 @@ class TableComputedStylePlugin extends UIPlugin {
|
|
|
63259
63300
|
tableStyles = {};
|
|
63260
63301
|
handle(cmd) {
|
|
63261
63302
|
if (invalidateEvaluationCommands.has(cmd.type) ||
|
|
63262
|
-
(cmd.type === "UPDATE_CELL" && "content" in cmd) ||
|
|
63303
|
+
(cmd.type === "UPDATE_CELL" && ("content" in cmd || "format" in cmd)) ||
|
|
63263
63304
|
cmd.type === "EVALUATE_CELLS") {
|
|
63264
63305
|
this.tableStyles = {};
|
|
63265
63306
|
return;
|
|
@@ -65223,6 +65264,8 @@ class GridSelectionPlugin extends UIPlugin {
|
|
|
65223
65264
|
});
|
|
65224
65265
|
this.selectCell(col, row);
|
|
65225
65266
|
}
|
|
65267
|
+
const { col, row } = this.gridSelection.anchor.cell;
|
|
65268
|
+
this.moveClient({ sheetId: this.activeSheet.id, col, row });
|
|
65226
65269
|
}
|
|
65227
65270
|
/**
|
|
65228
65271
|
* Ensure selections are not outside sheet boundaries.
|
|
@@ -65955,8 +65998,11 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
65955
65998
|
case "REMOVE_TABLE":
|
|
65956
65999
|
case "UPDATE_TABLE":
|
|
65957
66000
|
case "UPDATE_FILTER":
|
|
65958
|
-
|
|
65959
|
-
|
|
66001
|
+
case "UNFREEZE_ROWS":
|
|
66002
|
+
case "UNFREEZE_COLUMNS":
|
|
66003
|
+
case "FREEZE_COLUMNS":
|
|
66004
|
+
case "FREEZE_ROWS":
|
|
66005
|
+
case "UNFREEZE_COLUMNS_ROWS":
|
|
65960
66006
|
case "REMOVE_COLUMNS_ROWS":
|
|
65961
66007
|
case "RESIZE_COLUMNS_ROWS":
|
|
65962
66008
|
case "HIDE_COLUMNS_ROWS":
|
|
@@ -65969,11 +66015,9 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
65969
66015
|
case "FOLD_HEADER_GROUPS_IN_ZONE":
|
|
65970
66016
|
case "UNFOLD_HEADER_GROUPS_IN_ZONE":
|
|
65971
66017
|
case "UNFOLD_ALL_HEADER_GROUPS":
|
|
65972
|
-
case "FOLD_ALL_HEADER_GROUPS":
|
|
65973
|
-
|
|
65974
|
-
this.sheetsWithDirtyViewports.add(sheetId);
|
|
66018
|
+
case "FOLD_ALL_HEADER_GROUPS":
|
|
66019
|
+
this.sheetsWithDirtyViewports.add(cmd.sheetId);
|
|
65975
66020
|
break;
|
|
65976
|
-
}
|
|
65977
66021
|
case "UPDATE_CELL":
|
|
65978
66022
|
// update cell content or format can change hidden rows because of data filters
|
|
65979
66023
|
if ("content" in cmd || "format" in cmd || cmd.style?.fontSize !== undefined) {
|
|
@@ -65989,13 +66033,6 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
65989
66033
|
case "ACTIVATE_SHEET":
|
|
65990
66034
|
this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
|
|
65991
66035
|
break;
|
|
65992
|
-
case "UNFREEZE_ROWS":
|
|
65993
|
-
case "UNFREEZE_COLUMNS":
|
|
65994
|
-
case "FREEZE_COLUMNS":
|
|
65995
|
-
case "FREEZE_ROWS":
|
|
65996
|
-
case "UNFREEZE_COLUMNS_ROWS":
|
|
65997
|
-
this.resetViewports(this.getters.getActiveSheetId());
|
|
65998
|
-
break;
|
|
65999
66036
|
case "DELETE_SHEET":
|
|
66000
66037
|
this.sheetsWithDirtyViewports.delete(cmd.sheetId);
|
|
66001
66038
|
break;
|
|
@@ -67175,7 +67212,7 @@ class AggregateStatisticsStore extends SpreadsheetStore {
|
|
|
67175
67212
|
}
|
|
67176
67213
|
handle(cmd) {
|
|
67177
67214
|
if (invalidateEvaluationCommands.has(cmd.type) ||
|
|
67178
|
-
(cmd.type === "UPDATE_CELL" && "content" in cmd)) {
|
|
67215
|
+
(cmd.type === "UPDATE_CELL" && ("content" in cmd || "format" in cmd))) {
|
|
67179
67216
|
this.isDirty = true;
|
|
67180
67217
|
}
|
|
67181
67218
|
switch (cmd.type) {
|
|
@@ -73757,6 +73794,6 @@ exports.tokenColors = tokenColors;
|
|
|
73757
73794
|
exports.tokenize = tokenize;
|
|
73758
73795
|
|
|
73759
73796
|
|
|
73760
|
-
__info__.version = "18.0.
|
|
73761
|
-
__info__.date = "2025-
|
|
73762
|
-
__info__.hash = "
|
|
73797
|
+
__info__.version = "18.0.26";
|
|
73798
|
+
__info__.date = "2025-05-02T12:30:31.966Z";
|
|
73799
|
+
__info__.hash = "5bdf504";
|
package/dist/o-spreadsheet.d.ts
CHANGED
|
@@ -2688,7 +2688,8 @@ declare const enum CommandResult {
|
|
|
2688
2688
|
EmptyName = "EmptyName",
|
|
2689
2689
|
ValueCellIsInvalidFormula = "ValueCellIsInvalidFormula",
|
|
2690
2690
|
InvalidDefinition = "InvalidDefinition",
|
|
2691
|
-
InvalidColor = "InvalidColor"
|
|
2691
|
+
InvalidColor = "InvalidColor",
|
|
2692
|
+
InvalidPivotDataSet = "InvalidPivotDataSet"
|
|
2692
2693
|
}
|
|
2693
2694
|
interface CommandHandler<T> {
|
|
2694
2695
|
allowDispatch(command: T): CommandResult | CommandResult[];
|
|
@@ -8275,6 +8276,7 @@ declare class ChartJsComponent extends Component<Props$M, SpreadsheetChildEnv> {
|
|
|
8275
8276
|
private canvas;
|
|
8276
8277
|
private chart?;
|
|
8277
8278
|
private currentRuntime;
|
|
8279
|
+
private currentDevicePixelRatio;
|
|
8278
8280
|
get background(): string;
|
|
8279
8281
|
get canvasStyle(): string;
|
|
8280
8282
|
get chartRuntime(): ChartJSRuntime;
|
|
@@ -11111,7 +11113,8 @@ declare const CellErrorType: {
|
|
|
11111
11113
|
readonly GenericError: "#ERROR";
|
|
11112
11114
|
readonly NullError: "#NULL!";
|
|
11113
11115
|
};
|
|
11114
|
-
declare class EvaluationError
|
|
11116
|
+
declare class EvaluationError {
|
|
11117
|
+
readonly message: string;
|
|
11115
11118
|
readonly value: string;
|
|
11116
11119
|
constructor(message?: string, value?: string);
|
|
11117
11120
|
}
|