@odoo/o-spreadsheet 18.2.9 → 18.2.10
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 +80 -52
- package/dist/o-spreadsheet.d.ts +3 -1
- package/dist/o-spreadsheet.esm.js +80 -52
- package/dist/o-spreadsheet.iife.js +80 -52
- package/dist/o-spreadsheet.iife.min.js +203 -204
- package/dist/o_spreadsheet.xml +5 -5
- package/package.json +2 -2
|
@@ -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.2.
|
|
6
|
-
* @date 2025-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.2.10
|
|
6
|
+
* @date 2025-05-02T12:34:39.632Z
|
|
7
|
+
* @hash e8ff3fc
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function (exports, owl) {
|
|
@@ -3770,6 +3770,7 @@
|
|
|
3770
3770
|
CommandResult["ValueCellIsInvalidFormula"] = "ValueCellIsInvalidFormula";
|
|
3771
3771
|
CommandResult["InvalidDefinition"] = "InvalidDefinition";
|
|
3772
3772
|
CommandResult["InvalidColor"] = "InvalidColor";
|
|
3773
|
+
CommandResult["InvalidPivotDataSet"] = "InvalidPivotDataSet";
|
|
3773
3774
|
})(exports.CommandResult || (exports.CommandResult = {}));
|
|
3774
3775
|
|
|
3775
3776
|
const DEFAULT_LOCALES = [
|
|
@@ -10172,7 +10173,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
10172
10173
|
const yMin = chart.chartArea.top;
|
|
10173
10174
|
const textsPositions = {};
|
|
10174
10175
|
for (const dataset of chart._metasets) {
|
|
10175
|
-
if (isTrendLineAxis(dataset.
|
|
10176
|
+
if (isTrendLineAxis(dataset.xAxisID) || dataset.hidden) {
|
|
10176
10177
|
continue;
|
|
10177
10178
|
}
|
|
10178
10179
|
for (let i = 0; i < dataset._parsed.length; i++) {
|
|
@@ -10215,7 +10216,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
10215
10216
|
const xMin = chart.chartArea.left;
|
|
10216
10217
|
const textsPositions = {};
|
|
10217
10218
|
for (const dataset of chart._metasets) {
|
|
10218
|
-
if (isTrendLineAxis(dataset.
|
|
10219
|
+
if (isTrendLineAxis(dataset.xAxisID)) {
|
|
10219
10220
|
return; // ignore trend lines
|
|
10220
10221
|
}
|
|
10221
10222
|
for (let i = 0; i < dataset._parsed.length; i++) {
|
|
@@ -10340,6 +10341,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
10340
10341
|
canvas = owl.useRef("graphContainer");
|
|
10341
10342
|
chart;
|
|
10342
10343
|
currentRuntime;
|
|
10344
|
+
currentDevicePixelRatio = window.devicePixelRatio;
|
|
10343
10345
|
get background() {
|
|
10344
10346
|
return this.chartRuntime.background;
|
|
10345
10347
|
}
|
|
@@ -10373,6 +10375,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
10373
10375
|
}
|
|
10374
10376
|
this.currentRuntime = runtime;
|
|
10375
10377
|
}
|
|
10378
|
+
else if (this.currentDevicePixelRatio !== window.devicePixelRatio) {
|
|
10379
|
+
this.currentDevicePixelRatio = window.devicePixelRatio;
|
|
10380
|
+
this.updateChartJs(deepCopy(this.currentRuntime.chartJsConfig));
|
|
10381
|
+
}
|
|
10376
10382
|
});
|
|
10377
10383
|
}
|
|
10378
10384
|
createChart(chartData) {
|
|
@@ -10628,9 +10634,11 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
10628
10634
|
};
|
|
10629
10635
|
function drawScoreChart(structure, canvas) {
|
|
10630
10636
|
const ctx = canvas.getContext("2d");
|
|
10631
|
-
|
|
10632
|
-
|
|
10633
|
-
canvas.height = structure.canvas.height;
|
|
10637
|
+
const dpr = window.devicePixelRatio || 1;
|
|
10638
|
+
canvas.width = dpr * structure.canvas.width;
|
|
10639
|
+
canvas.height = dpr * structure.canvas.height;
|
|
10640
|
+
ctx.scale(dpr, dpr);
|
|
10641
|
+
const availableWidth = structure.canvas.width - CHART_PADDING$1 * 2;
|
|
10634
10642
|
ctx.fillStyle = structure.canvas.backgroundColor;
|
|
10635
10643
|
ctx.fillRect(0, 0, structure.canvas.width, structure.canvas.height);
|
|
10636
10644
|
if (structure.title) {
|
|
@@ -10993,7 +11001,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
10993
11001
|
owl.useEffect(this.createChart.bind(this), () => {
|
|
10994
11002
|
const canvas = this.canvas.el;
|
|
10995
11003
|
const rect = canvas.getBoundingClientRect();
|
|
10996
|
-
return [rect.width, rect.height, this.runtime, this.canvas.el];
|
|
11004
|
+
return [rect.width, rect.height, this.runtime, this.canvas.el, window.devicePixelRatio];
|
|
10997
11005
|
});
|
|
10998
11006
|
}
|
|
10999
11007
|
createChart() {
|
|
@@ -22582,9 +22590,11 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
22582
22590
|
const GAUGE_TITLE_SECTION_HEIGHT = 25;
|
|
22583
22591
|
function drawGaugeChart(canvas, runtime) {
|
|
22584
22592
|
const canvasBoundingRect = canvas.getBoundingClientRect();
|
|
22585
|
-
|
|
22586
|
-
canvas.
|
|
22593
|
+
const dpr = window.devicePixelRatio || 1;
|
|
22594
|
+
canvas.width = dpr * canvasBoundingRect.width;
|
|
22595
|
+
canvas.height = dpr * canvasBoundingRect.height;
|
|
22587
22596
|
const ctx = canvas.getContext("2d");
|
|
22597
|
+
ctx.scale(dpr, dpr);
|
|
22588
22598
|
const config = getGaugeRenderingConfig(canvasBoundingRect, runtime, ctx);
|
|
22589
22599
|
drawBackground(ctx, config);
|
|
22590
22600
|
drawGauge(ctx, config);
|
|
@@ -22919,7 +22929,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
22919
22929
|
owl.useEffect(() => drawGaugeChart(this.canvas.el, this.runtime), () => {
|
|
22920
22930
|
const canvas = this.canvas.el;
|
|
22921
22931
|
const rect = canvas.getBoundingClientRect();
|
|
22922
|
-
return [rect.width, rect.height, this.runtime, this.canvas.el];
|
|
22932
|
+
return [rect.width, rect.height, this.runtime, this.canvas.el, window.devicePixelRatio];
|
|
22923
22933
|
});
|
|
22924
22934
|
}
|
|
22925
22935
|
}
|
|
@@ -29582,7 +29592,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
29582
29592
|
};
|
|
29583
29593
|
scales[MOVING_AVERAGE_TREND_LINE_XAXIS_ID] = {
|
|
29584
29594
|
...scales.x,
|
|
29585
|
-
offset:
|
|
29595
|
+
offset: true,
|
|
29586
29596
|
display: false,
|
|
29587
29597
|
};
|
|
29588
29598
|
}
|
|
@@ -30302,9 +30312,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
30302
30312
|
};
|
|
30303
30313
|
}
|
|
30304
30314
|
getDefinitionForExcel() {
|
|
30305
|
-
// Excel does not support aggregating labels
|
|
30306
|
-
if (this.aggregated)
|
|
30307
|
-
return undefined;
|
|
30308
30315
|
const dataSets = this.dataSets
|
|
30309
30316
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
30310
30317
|
.filter((ds) => ds.range !== "" && ds.range !== CellErrorType.InvalidReference);
|
|
@@ -31019,9 +31026,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
31019
31026
|
return new LineChart(definition, this.sheetId, this.getters);
|
|
31020
31027
|
}
|
|
31021
31028
|
getDefinitionForExcel() {
|
|
31022
|
-
// Excel does not support aggregating labels
|
|
31023
|
-
if (this.aggregated)
|
|
31024
|
-
return undefined;
|
|
31025
31029
|
const dataSets = this.dataSets
|
|
31026
31030
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
31027
31031
|
.filter((ds) => ds.range !== "" && ds.range !== CellErrorType.InvalidReference);
|
|
@@ -31158,9 +31162,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
31158
31162
|
return new PieChart(definition, sheetId, this.getters);
|
|
31159
31163
|
}
|
|
31160
31164
|
getDefinitionForExcel() {
|
|
31161
|
-
// Excel does not support aggregating labels
|
|
31162
|
-
if (this.aggregated)
|
|
31163
|
-
return undefined;
|
|
31164
31165
|
const dataSets = this.dataSets
|
|
31165
31166
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
31166
31167
|
.filter((ds) => ds.range !== "" && ds.range !== CellErrorType.InvalidReference);
|
|
@@ -33659,18 +33660,28 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
33659
33660
|
function useInterval(callback, delay) {
|
|
33660
33661
|
let intervalId;
|
|
33661
33662
|
const { setInterval, clearInterval } = window;
|
|
33663
|
+
const pause = () => {
|
|
33664
|
+
clearInterval(intervalId);
|
|
33665
|
+
intervalId = undefined;
|
|
33666
|
+
};
|
|
33667
|
+
const safeCallback = () => {
|
|
33668
|
+
try {
|
|
33669
|
+
callback();
|
|
33670
|
+
}
|
|
33671
|
+
catch (e) {
|
|
33672
|
+
pause();
|
|
33673
|
+
throw e;
|
|
33674
|
+
}
|
|
33675
|
+
};
|
|
33662
33676
|
owl.useEffect(() => {
|
|
33663
|
-
intervalId = setInterval(
|
|
33677
|
+
intervalId = setInterval(safeCallback, delay);
|
|
33664
33678
|
return () => clearInterval(intervalId);
|
|
33665
33679
|
}, () => [delay]);
|
|
33666
33680
|
return {
|
|
33667
|
-
pause
|
|
33668
|
-
clearInterval(intervalId);
|
|
33669
|
-
intervalId = undefined;
|
|
33670
|
-
},
|
|
33681
|
+
pause,
|
|
33671
33682
|
resume: () => {
|
|
33672
33683
|
if (intervalId === undefined) {
|
|
33673
|
-
intervalId = setInterval(
|
|
33684
|
+
intervalId = setInterval(safeCallback, delay);
|
|
33674
33685
|
}
|
|
33675
33686
|
},
|
|
33676
33687
|
};
|
|
@@ -38451,8 +38462,11 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
38451
38462
|
}
|
|
38452
38463
|
removeInput(rangeId) {
|
|
38453
38464
|
const index = this.store.selectionInputs.findIndex((range) => range.id === rangeId);
|
|
38454
|
-
this.
|
|
38455
|
-
|
|
38465
|
+
if (this.ranges.find((range) => range.id === rangeId)?.xc) {
|
|
38466
|
+
this.props.onSelectionRemoved?.(index);
|
|
38467
|
+
this.props.onSelectionConfirmed?.();
|
|
38468
|
+
}
|
|
38469
|
+
this.store.removeRange(rangeId);
|
|
38456
38470
|
}
|
|
38457
38471
|
onInputChanged(rangeId, ev) {
|
|
38458
38472
|
const target = ev.target;
|
|
@@ -50852,7 +50866,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
50852
50866
|
position: absolute;
|
|
50853
50867
|
top: 0;
|
|
50854
50868
|
left: ${HEADER_WIDTH}px;
|
|
50855
|
-
right:
|
|
50869
|
+
right: ${SCROLLBAR_WIDTH}px;
|
|
50856
50870
|
height: ${HEADER_HEIGHT}px;
|
|
50857
50871
|
width: calc(100% - ${HEADER_WIDTH + SCROLLBAR_WIDTH}px);
|
|
50858
50872
|
&.o-dragging {
|
|
@@ -51045,9 +51059,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
51045
51059
|
position: absolute;
|
|
51046
51060
|
top: ${HEADER_HEIGHT}px;
|
|
51047
51061
|
left: 0;
|
|
51048
|
-
|
|
51062
|
+
bottom: ${SCROLLBAR_WIDTH}px;
|
|
51049
51063
|
width: ${HEADER_WIDTH}px;
|
|
51050
|
-
height: calc(100% - ${HEADER_HEIGHT + SCROLLBAR_WIDTH}px);
|
|
51051
51064
|
&.o-dragging {
|
|
51052
51065
|
cursor: grabbing;
|
|
51053
51066
|
}
|
|
@@ -59095,6 +59108,15 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
59095
59108
|
}
|
|
59096
59109
|
}
|
|
59097
59110
|
class SpreadsheetPivotCorePlugin extends CorePlugin {
|
|
59111
|
+
allowDispatch(cmd) {
|
|
59112
|
+
switch (cmd.type) {
|
|
59113
|
+
case "ADD_PIVOT":
|
|
59114
|
+
case "UPDATE_PIVOT":
|
|
59115
|
+
const definition = cmd.pivot;
|
|
59116
|
+
return this.checkDataSetValidity(definition);
|
|
59117
|
+
}
|
|
59118
|
+
return "Success" /* CommandResult.Success */;
|
|
59119
|
+
}
|
|
59098
59120
|
adaptRanges(applyChange) {
|
|
59099
59121
|
for (const pivotId of this.getters.getPivotIds()) {
|
|
59100
59122
|
const definition = this.getters.getPivotCoreDefinition(pivotId);
|
|
@@ -59113,6 +59135,16 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
59113
59135
|
}
|
|
59114
59136
|
}
|
|
59115
59137
|
}
|
|
59138
|
+
checkDataSetValidity(definition) {
|
|
59139
|
+
if (definition.type === "SPREADSHEET" && definition.dataSet) {
|
|
59140
|
+
const { zone, sheetId } = definition.dataSet;
|
|
59141
|
+
if (!sheetId || !this.getters.tryGetSheet(sheetId) || !zone || !isZoneValid(zone)) {
|
|
59142
|
+
return "InvalidDataSet" /* CommandResult.InvalidDataSet */;
|
|
59143
|
+
}
|
|
59144
|
+
return this.getters.checkZonesExistInSheet(sheetId, [zone]);
|
|
59145
|
+
}
|
|
59146
|
+
return "Success" /* CommandResult.Success */;
|
|
59147
|
+
}
|
|
59116
59148
|
}
|
|
59117
59149
|
|
|
59118
59150
|
class TableStylePlugin extends CorePlugin {
|
|
@@ -61903,7 +61935,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
61903
61935
|
tables = {};
|
|
61904
61936
|
handle(cmd) {
|
|
61905
61937
|
if (invalidateEvaluationCommands.has(cmd.type) ||
|
|
61906
|
-
(cmd.type === "UPDATE_CELL" && "content" in cmd) ||
|
|
61938
|
+
(cmd.type === "UPDATE_CELL" && ("content" in cmd || "format" in cmd)) ||
|
|
61907
61939
|
cmd.type === "EVALUATE_CELLS") {
|
|
61908
61940
|
this.tables = {};
|
|
61909
61941
|
return;
|
|
@@ -65775,7 +65807,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
65775
65807
|
tableStyles = {};
|
|
65776
65808
|
handle(cmd) {
|
|
65777
65809
|
if (invalidateEvaluationCommands.has(cmd.type) ||
|
|
65778
|
-
(cmd.type === "UPDATE_CELL" && "content" in cmd) ||
|
|
65810
|
+
(cmd.type === "UPDATE_CELL" && ("content" in cmd || "format" in cmd)) ||
|
|
65779
65811
|
cmd.type === "EVALUATE_CELLS") {
|
|
65780
65812
|
this.tableStyles = {};
|
|
65781
65813
|
return;
|
|
@@ -67736,6 +67768,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
67736
67768
|
});
|
|
67737
67769
|
this.selectCell(col, row);
|
|
67738
67770
|
}
|
|
67771
|
+
const { col, row } = this.gridSelection.anchor.cell;
|
|
67772
|
+
this.moveClient({ sheetId: this.activeSheet.id, col, row });
|
|
67739
67773
|
}
|
|
67740
67774
|
/**
|
|
67741
67775
|
* Ensure selections are not outside sheet boundaries.
|
|
@@ -68451,8 +68485,11 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
68451
68485
|
case "REMOVE_TABLE":
|
|
68452
68486
|
case "UPDATE_TABLE":
|
|
68453
68487
|
case "UPDATE_FILTER":
|
|
68454
|
-
|
|
68455
|
-
|
|
68488
|
+
case "UNFREEZE_ROWS":
|
|
68489
|
+
case "UNFREEZE_COLUMNS":
|
|
68490
|
+
case "FREEZE_COLUMNS":
|
|
68491
|
+
case "FREEZE_ROWS":
|
|
68492
|
+
case "UNFREEZE_COLUMNS_ROWS":
|
|
68456
68493
|
case "REMOVE_COLUMNS_ROWS":
|
|
68457
68494
|
case "RESIZE_COLUMNS_ROWS":
|
|
68458
68495
|
case "HIDE_COLUMNS_ROWS":
|
|
@@ -68465,11 +68502,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
68465
68502
|
case "FOLD_HEADER_GROUPS_IN_ZONE":
|
|
68466
68503
|
case "UNFOLD_HEADER_GROUPS_IN_ZONE":
|
|
68467
68504
|
case "UNFOLD_ALL_HEADER_GROUPS":
|
|
68468
|
-
case "FOLD_ALL_HEADER_GROUPS":
|
|
68469
|
-
|
|
68470
|
-
this.sheetsWithDirtyViewports.add(sheetId);
|
|
68505
|
+
case "FOLD_ALL_HEADER_GROUPS":
|
|
68506
|
+
this.sheetsWithDirtyViewports.add(cmd.sheetId);
|
|
68471
68507
|
break;
|
|
68472
|
-
}
|
|
68473
68508
|
case "UPDATE_CELL":
|
|
68474
68509
|
// update cell content or format can change hidden rows because of data filters
|
|
68475
68510
|
if ("content" in cmd || "format" in cmd || cmd.style?.fontSize !== undefined) {
|
|
@@ -68485,13 +68520,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
68485
68520
|
case "ACTIVATE_SHEET":
|
|
68486
68521
|
this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
|
|
68487
68522
|
break;
|
|
68488
|
-
case "UNFREEZE_ROWS":
|
|
68489
|
-
case "UNFREEZE_COLUMNS":
|
|
68490
|
-
case "FREEZE_COLUMNS":
|
|
68491
|
-
case "FREEZE_ROWS":
|
|
68492
|
-
case "UNFREEZE_COLUMNS_ROWS":
|
|
68493
|
-
this.resetViewports(this.getters.getActiveSheetId());
|
|
68494
|
-
break;
|
|
68495
68523
|
case "SCROLL_TO_CELL":
|
|
68496
68524
|
this.refreshViewport(this.getters.getActiveSheetId(), { col: cmd.col, row: cmd.row });
|
|
68497
68525
|
break;
|
|
@@ -69659,7 +69687,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
69659
69687
|
}
|
|
69660
69688
|
handle(cmd) {
|
|
69661
69689
|
if (invalidateEvaluationCommands.has(cmd.type) ||
|
|
69662
|
-
(cmd.type === "UPDATE_CELL" && "content" in cmd)) {
|
|
69690
|
+
(cmd.type === "UPDATE_CELL" && ("content" in cmd || "format" in cmd))) {
|
|
69663
69691
|
this.isDirty = true;
|
|
69664
69692
|
}
|
|
69665
69693
|
switch (cmd.type) {
|
|
@@ -76241,9 +76269,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
76241
76269
|
exports.tokenize = tokenize;
|
|
76242
76270
|
|
|
76243
76271
|
|
|
76244
|
-
__info__.version = "18.2.
|
|
76245
|
-
__info__.date = "2025-
|
|
76246
|
-
__info__.hash = "
|
|
76272
|
+
__info__.version = "18.2.10";
|
|
76273
|
+
__info__.date = "2025-05-02T12:34:39.632Z";
|
|
76274
|
+
__info__.hash = "e8ff3fc";
|
|
76247
76275
|
|
|
76248
76276
|
|
|
76249
76277
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|