@odoo/o-spreadsheet 17.0.58 → 17.0.60
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 +40 -42
- package/dist/o-spreadsheet.esm.js +40 -42
- package/dist/o-spreadsheet.iife.js +40 -42
- package/dist/o-spreadsheet.iife.min.js +8 -9
- package/dist/o_spreadsheet.xml +65 -58
- 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 17.0.
|
|
6
|
-
* @date 2025-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 17.0.60
|
|
6
|
+
* @date 2025-05-02T12:28:49.842Z
|
|
7
|
+
* @hash 29510cc
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
'use strict';
|
|
@@ -4857,7 +4857,7 @@ class ChartJsComponent extends owl.Component {
|
|
|
4857
4857
|
// Note: chartJS modify the runtime in place, so it's important to give it a copy
|
|
4858
4858
|
this.createChart(deepCopy(runtime.chartJsConfig));
|
|
4859
4859
|
});
|
|
4860
|
-
owl.useEffect(() => this.updateChartJs(deepCopy(this.chartRuntime)), () => [this.chartRuntime]);
|
|
4860
|
+
owl.useEffect(() => this.updateChartJs(deepCopy(this.chartRuntime)), () => [this.chartRuntime, window.devicePixelRatio]);
|
|
4861
4861
|
}
|
|
4862
4862
|
createChart(chartData) {
|
|
4863
4863
|
const canvas = this.canvas.el;
|
|
@@ -5395,8 +5395,10 @@ let ScorecardChart$1 = class ScorecardChart extends AbstractChart {
|
|
|
5395
5395
|
};
|
|
5396
5396
|
function drawScoreChart(structure, canvas) {
|
|
5397
5397
|
const ctx = canvas.getContext("2d");
|
|
5398
|
-
|
|
5399
|
-
canvas.
|
|
5398
|
+
const dpr = window.devicePixelRatio || 1;
|
|
5399
|
+
canvas.width = structure.canvas.width * dpr;
|
|
5400
|
+
canvas.height = structure.canvas.height * dpr;
|
|
5401
|
+
ctx.scale(dpr, dpr);
|
|
5400
5402
|
ctx.fillStyle = structure.canvas.backgroundColor;
|
|
5401
5403
|
ctx.fillRect(0, 0, structure.canvas.width, structure.canvas.height);
|
|
5402
5404
|
if (structure.title) {
|
|
@@ -5745,7 +5747,7 @@ class ScorecardChart extends owl.Component {
|
|
|
5745
5747
|
owl.useEffect(this.createChart.bind(this), () => {
|
|
5746
5748
|
const canvas = this.canvas.el;
|
|
5747
5749
|
const rect = canvas.getBoundingClientRect();
|
|
5748
|
-
return [rect.width, rect.height, this.runtime, this.canvas.el];
|
|
5750
|
+
return [rect.width, rect.height, this.runtime, this.canvas.el, window.devicePixelRatio];
|
|
5749
5751
|
});
|
|
5750
5752
|
}
|
|
5751
5753
|
createChart() {
|
|
@@ -8789,9 +8791,6 @@ class BarChart extends AbstractChart {
|
|
|
8789
8791
|
};
|
|
8790
8792
|
}
|
|
8791
8793
|
getDefinitionForExcel() {
|
|
8792
|
-
// Excel does not support aggregating labels
|
|
8793
|
-
if (this.aggregated)
|
|
8794
|
-
return undefined;
|
|
8795
8794
|
const dataSets = this.dataSets
|
|
8796
8795
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
8797
8796
|
.filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
|
|
@@ -9368,9 +9367,6 @@ class LineChart extends AbstractChart {
|
|
|
9368
9367
|
return new LineChart(definition, this.sheetId, this.getters);
|
|
9369
9368
|
}
|
|
9370
9369
|
getDefinitionForExcel() {
|
|
9371
|
-
// Excel does not support aggregating labels
|
|
9372
|
-
if (this.aggregated)
|
|
9373
|
-
return undefined;
|
|
9374
9370
|
const dataSets = this.dataSets
|
|
9375
9371
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
9376
9372
|
.filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
|
|
@@ -9676,9 +9672,6 @@ class PieChart extends AbstractChart {
|
|
|
9676
9672
|
return new PieChart(definition, sheetId, this.getters);
|
|
9677
9673
|
}
|
|
9678
9674
|
getDefinitionForExcel() {
|
|
9679
|
-
// Excel does not support aggregating labels
|
|
9680
|
-
if (this.aggregated)
|
|
9681
|
-
return undefined;
|
|
9682
9675
|
const dataSets = this.dataSets
|
|
9683
9676
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
9684
9677
|
.filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
|
|
@@ -22383,7 +22376,7 @@ class ColorPicker extends owl.Component {
|
|
|
22383
22376
|
}
|
|
22384
22377
|
setHexColor(ev) {
|
|
22385
22378
|
// only support HEX code input
|
|
22386
|
-
const val = ev.target.value.slice(0, 7);
|
|
22379
|
+
const val = ev.target.value.replace("##", "#").slice(0, 7);
|
|
22387
22380
|
this.state.customHexColor = val;
|
|
22388
22381
|
if (!isColorValid(val)) ;
|
|
22389
22382
|
else {
|
|
@@ -28482,18 +28475,28 @@ function useRefListener(ref, ...listener) {
|
|
|
28482
28475
|
function useInterval(callback, delay) {
|
|
28483
28476
|
let intervalId;
|
|
28484
28477
|
const { setInterval, clearInterval } = window;
|
|
28478
|
+
const pause = () => {
|
|
28479
|
+
clearInterval(intervalId);
|
|
28480
|
+
intervalId = undefined;
|
|
28481
|
+
};
|
|
28482
|
+
const safeCallback = () => {
|
|
28483
|
+
try {
|
|
28484
|
+
callback();
|
|
28485
|
+
}
|
|
28486
|
+
catch (e) {
|
|
28487
|
+
pause();
|
|
28488
|
+
throw e;
|
|
28489
|
+
}
|
|
28490
|
+
};
|
|
28485
28491
|
owl.useEffect(() => {
|
|
28486
|
-
intervalId = setInterval(
|
|
28492
|
+
intervalId = setInterval(safeCallback, delay);
|
|
28487
28493
|
return () => clearInterval(intervalId);
|
|
28488
28494
|
}, () => [delay]);
|
|
28489
28495
|
return {
|
|
28490
|
-
pause
|
|
28491
|
-
clearInterval(intervalId);
|
|
28492
|
-
intervalId = undefined;
|
|
28493
|
-
},
|
|
28496
|
+
pause,
|
|
28494
28497
|
resume: () => {
|
|
28495
28498
|
if (intervalId === undefined) {
|
|
28496
|
-
intervalId = setInterval(
|
|
28499
|
+
intervalId = setInterval(safeCallback, delay);
|
|
28497
28500
|
}
|
|
28498
28501
|
},
|
|
28499
28502
|
};
|
|
@@ -28938,7 +28941,7 @@ css /* scss */ `
|
|
|
28938
28941
|
position: absolute;
|
|
28939
28942
|
top: 0;
|
|
28940
28943
|
left: ${HEADER_WIDTH}px;
|
|
28941
|
-
right:
|
|
28944
|
+
right: ${SCROLLBAR_WIDTH}px;
|
|
28942
28945
|
height: ${HEADER_HEIGHT}px;
|
|
28943
28946
|
&.o-dragging {
|
|
28944
28947
|
cursor: grabbing;
|
|
@@ -29113,9 +29116,8 @@ css /* scss */ `
|
|
|
29113
29116
|
position: absolute;
|
|
29114
29117
|
top: ${HEADER_HEIGHT}px;
|
|
29115
29118
|
left: 0;
|
|
29116
|
-
|
|
29119
|
+
bottom: ${SCROLLBAR_WIDTH}px;
|
|
29117
29120
|
width: ${HEADER_WIDTH}px;
|
|
29118
|
-
height: calc(100% - ${HEADER_HEIGHT + SCROLLBAR_WIDTH}px);
|
|
29119
29121
|
&.o-dragging {
|
|
29120
29122
|
cursor: grabbing;
|
|
29121
29123
|
}
|
|
@@ -50603,6 +50605,8 @@ class GridSelectionPlugin extends UIPlugin {
|
|
|
50603
50605
|
});
|
|
50604
50606
|
this.selectCell(col, row);
|
|
50605
50607
|
}
|
|
50608
|
+
const { col, row } = this.gridSelection.anchor.cell;
|
|
50609
|
+
this.moveClient({ sheetId: this.activeSheet.id, col, row });
|
|
50606
50610
|
}
|
|
50607
50611
|
/**
|
|
50608
50612
|
* Ensure selections are not outside sheet boundaries.
|
|
@@ -51342,8 +51346,11 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
51342
51346
|
}
|
|
51343
51347
|
case "REMOVE_FILTER_TABLE":
|
|
51344
51348
|
case "UPDATE_FILTER":
|
|
51345
|
-
|
|
51346
|
-
|
|
51349
|
+
case "UNFREEZE_ROWS":
|
|
51350
|
+
case "UNFREEZE_COLUMNS":
|
|
51351
|
+
case "FREEZE_COLUMNS":
|
|
51352
|
+
case "FREEZE_ROWS":
|
|
51353
|
+
case "UNFREEZE_COLUMNS_ROWS":
|
|
51347
51354
|
case "REMOVE_COLUMNS_ROWS":
|
|
51348
51355
|
case "RESIZE_COLUMNS_ROWS":
|
|
51349
51356
|
case "HIDE_COLUMNS_ROWS":
|
|
@@ -51356,11 +51363,9 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
51356
51363
|
case "FOLD_HEADER_GROUPS_IN_ZONE":
|
|
51357
51364
|
case "UNFOLD_HEADER_GROUPS_IN_ZONE":
|
|
51358
51365
|
case "UNFOLD_ALL_HEADER_GROUPS":
|
|
51359
|
-
case "FOLD_ALL_HEADER_GROUPS":
|
|
51360
|
-
|
|
51361
|
-
this.sheetsWithDirtyViewports.add(sheetId);
|
|
51366
|
+
case "FOLD_ALL_HEADER_GROUPS":
|
|
51367
|
+
this.sheetsWithDirtyViewports.add(cmd.sheetId);
|
|
51362
51368
|
break;
|
|
51363
|
-
}
|
|
51364
51369
|
case "UPDATE_CELL":
|
|
51365
51370
|
// update cell content or format can change hidden rows because of data filters
|
|
51366
51371
|
if ("content" in cmd || "format" in cmd || cmd.style?.fontSize !== undefined) {
|
|
@@ -51376,13 +51381,6 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
51376
51381
|
case "ACTIVATE_SHEET":
|
|
51377
51382
|
this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
|
|
51378
51383
|
break;
|
|
51379
|
-
case "UNFREEZE_ROWS":
|
|
51380
|
-
case "UNFREEZE_COLUMNS":
|
|
51381
|
-
case "FREEZE_COLUMNS":
|
|
51382
|
-
case "FREEZE_ROWS":
|
|
51383
|
-
case "UNFREEZE_COLUMNS_ROWS":
|
|
51384
|
-
this.resetViewports(this.getters.getActiveSheetId());
|
|
51385
|
-
break;
|
|
51386
51384
|
case "DELETE_SHEET":
|
|
51387
51385
|
this.sheetsWithDirtyViewports.delete(cmd.sheetId);
|
|
51388
51386
|
break;
|
|
@@ -58254,6 +58252,6 @@ exports.setTranslationMethod = setTranslationMethod;
|
|
|
58254
58252
|
exports.tokenize = tokenize;
|
|
58255
58253
|
|
|
58256
58254
|
|
|
58257
|
-
__info__.version = "17.0.
|
|
58258
|
-
__info__.date = "2025-
|
|
58259
|
-
__info__.hash = "
|
|
58255
|
+
__info__.version = "17.0.60";
|
|
58256
|
+
__info__.date = "2025-05-02T12:28:49.842Z";
|
|
58257
|
+
__info__.hash = "29510cc";
|
|
@@ -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 17.0.
|
|
6
|
-
* @date 2025-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 17.0.60
|
|
6
|
+
* @date 2025-05-02T12:28:49.842Z
|
|
7
|
+
* @hash 29510cc
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { Component, useRef, onMounted, useEffect, onWillPatch, useState, onWillUpdateProps, onPatched, useComponent, useExternalListener, onWillUnmount, onWillStart, xml, useChildSubEnv, useSubEnv, markRaw } from '@odoo/owl';
|
|
@@ -4855,7 +4855,7 @@ class ChartJsComponent extends Component {
|
|
|
4855
4855
|
// Note: chartJS modify the runtime in place, so it's important to give it a copy
|
|
4856
4856
|
this.createChart(deepCopy(runtime.chartJsConfig));
|
|
4857
4857
|
});
|
|
4858
|
-
useEffect(() => this.updateChartJs(deepCopy(this.chartRuntime)), () => [this.chartRuntime]);
|
|
4858
|
+
useEffect(() => this.updateChartJs(deepCopy(this.chartRuntime)), () => [this.chartRuntime, window.devicePixelRatio]);
|
|
4859
4859
|
}
|
|
4860
4860
|
createChart(chartData) {
|
|
4861
4861
|
const canvas = this.canvas.el;
|
|
@@ -5393,8 +5393,10 @@ let ScorecardChart$1 = class ScorecardChart extends AbstractChart {
|
|
|
5393
5393
|
};
|
|
5394
5394
|
function drawScoreChart(structure, canvas) {
|
|
5395
5395
|
const ctx = canvas.getContext("2d");
|
|
5396
|
-
|
|
5397
|
-
canvas.
|
|
5396
|
+
const dpr = window.devicePixelRatio || 1;
|
|
5397
|
+
canvas.width = structure.canvas.width * dpr;
|
|
5398
|
+
canvas.height = structure.canvas.height * dpr;
|
|
5399
|
+
ctx.scale(dpr, dpr);
|
|
5398
5400
|
ctx.fillStyle = structure.canvas.backgroundColor;
|
|
5399
5401
|
ctx.fillRect(0, 0, structure.canvas.width, structure.canvas.height);
|
|
5400
5402
|
if (structure.title) {
|
|
@@ -5743,7 +5745,7 @@ class ScorecardChart extends Component {
|
|
|
5743
5745
|
useEffect(this.createChart.bind(this), () => {
|
|
5744
5746
|
const canvas = this.canvas.el;
|
|
5745
5747
|
const rect = canvas.getBoundingClientRect();
|
|
5746
|
-
return [rect.width, rect.height, this.runtime, this.canvas.el];
|
|
5748
|
+
return [rect.width, rect.height, this.runtime, this.canvas.el, window.devicePixelRatio];
|
|
5747
5749
|
});
|
|
5748
5750
|
}
|
|
5749
5751
|
createChart() {
|
|
@@ -8787,9 +8789,6 @@ class BarChart extends AbstractChart {
|
|
|
8787
8789
|
};
|
|
8788
8790
|
}
|
|
8789
8791
|
getDefinitionForExcel() {
|
|
8790
|
-
// Excel does not support aggregating labels
|
|
8791
|
-
if (this.aggregated)
|
|
8792
|
-
return undefined;
|
|
8793
8792
|
const dataSets = this.dataSets
|
|
8794
8793
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
8795
8794
|
.filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
|
|
@@ -9366,9 +9365,6 @@ class LineChart extends AbstractChart {
|
|
|
9366
9365
|
return new LineChart(definition, this.sheetId, this.getters);
|
|
9367
9366
|
}
|
|
9368
9367
|
getDefinitionForExcel() {
|
|
9369
|
-
// Excel does not support aggregating labels
|
|
9370
|
-
if (this.aggregated)
|
|
9371
|
-
return undefined;
|
|
9372
9368
|
const dataSets = this.dataSets
|
|
9373
9369
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
9374
9370
|
.filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
|
|
@@ -9674,9 +9670,6 @@ class PieChart extends AbstractChart {
|
|
|
9674
9670
|
return new PieChart(definition, sheetId, this.getters);
|
|
9675
9671
|
}
|
|
9676
9672
|
getDefinitionForExcel() {
|
|
9677
|
-
// Excel does not support aggregating labels
|
|
9678
|
-
if (this.aggregated)
|
|
9679
|
-
return undefined;
|
|
9680
9673
|
const dataSets = this.dataSets
|
|
9681
9674
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
9682
9675
|
.filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
|
|
@@ -22381,7 +22374,7 @@ class ColorPicker extends Component {
|
|
|
22381
22374
|
}
|
|
22382
22375
|
setHexColor(ev) {
|
|
22383
22376
|
// only support HEX code input
|
|
22384
|
-
const val = ev.target.value.slice(0, 7);
|
|
22377
|
+
const val = ev.target.value.replace("##", "#").slice(0, 7);
|
|
22385
22378
|
this.state.customHexColor = val;
|
|
22386
22379
|
if (!isColorValid(val)) ;
|
|
22387
22380
|
else {
|
|
@@ -28480,18 +28473,28 @@ function useRefListener(ref, ...listener) {
|
|
|
28480
28473
|
function useInterval(callback, delay) {
|
|
28481
28474
|
let intervalId;
|
|
28482
28475
|
const { setInterval, clearInterval } = window;
|
|
28476
|
+
const pause = () => {
|
|
28477
|
+
clearInterval(intervalId);
|
|
28478
|
+
intervalId = undefined;
|
|
28479
|
+
};
|
|
28480
|
+
const safeCallback = () => {
|
|
28481
|
+
try {
|
|
28482
|
+
callback();
|
|
28483
|
+
}
|
|
28484
|
+
catch (e) {
|
|
28485
|
+
pause();
|
|
28486
|
+
throw e;
|
|
28487
|
+
}
|
|
28488
|
+
};
|
|
28483
28489
|
useEffect(() => {
|
|
28484
|
-
intervalId = setInterval(
|
|
28490
|
+
intervalId = setInterval(safeCallback, delay);
|
|
28485
28491
|
return () => clearInterval(intervalId);
|
|
28486
28492
|
}, () => [delay]);
|
|
28487
28493
|
return {
|
|
28488
|
-
pause
|
|
28489
|
-
clearInterval(intervalId);
|
|
28490
|
-
intervalId = undefined;
|
|
28491
|
-
},
|
|
28494
|
+
pause,
|
|
28492
28495
|
resume: () => {
|
|
28493
28496
|
if (intervalId === undefined) {
|
|
28494
|
-
intervalId = setInterval(
|
|
28497
|
+
intervalId = setInterval(safeCallback, delay);
|
|
28495
28498
|
}
|
|
28496
28499
|
},
|
|
28497
28500
|
};
|
|
@@ -28936,7 +28939,7 @@ css /* scss */ `
|
|
|
28936
28939
|
position: absolute;
|
|
28937
28940
|
top: 0;
|
|
28938
28941
|
left: ${HEADER_WIDTH}px;
|
|
28939
|
-
right:
|
|
28942
|
+
right: ${SCROLLBAR_WIDTH}px;
|
|
28940
28943
|
height: ${HEADER_HEIGHT}px;
|
|
28941
28944
|
&.o-dragging {
|
|
28942
28945
|
cursor: grabbing;
|
|
@@ -29111,9 +29114,8 @@ css /* scss */ `
|
|
|
29111
29114
|
position: absolute;
|
|
29112
29115
|
top: ${HEADER_HEIGHT}px;
|
|
29113
29116
|
left: 0;
|
|
29114
|
-
|
|
29117
|
+
bottom: ${SCROLLBAR_WIDTH}px;
|
|
29115
29118
|
width: ${HEADER_WIDTH}px;
|
|
29116
|
-
height: calc(100% - ${HEADER_HEIGHT + SCROLLBAR_WIDTH}px);
|
|
29117
29119
|
&.o-dragging {
|
|
29118
29120
|
cursor: grabbing;
|
|
29119
29121
|
}
|
|
@@ -50601,6 +50603,8 @@ class GridSelectionPlugin extends UIPlugin {
|
|
|
50601
50603
|
});
|
|
50602
50604
|
this.selectCell(col, row);
|
|
50603
50605
|
}
|
|
50606
|
+
const { col, row } = this.gridSelection.anchor.cell;
|
|
50607
|
+
this.moveClient({ sheetId: this.activeSheet.id, col, row });
|
|
50604
50608
|
}
|
|
50605
50609
|
/**
|
|
50606
50610
|
* Ensure selections are not outside sheet boundaries.
|
|
@@ -51340,8 +51344,11 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
51340
51344
|
}
|
|
51341
51345
|
case "REMOVE_FILTER_TABLE":
|
|
51342
51346
|
case "UPDATE_FILTER":
|
|
51343
|
-
|
|
51344
|
-
|
|
51347
|
+
case "UNFREEZE_ROWS":
|
|
51348
|
+
case "UNFREEZE_COLUMNS":
|
|
51349
|
+
case "FREEZE_COLUMNS":
|
|
51350
|
+
case "FREEZE_ROWS":
|
|
51351
|
+
case "UNFREEZE_COLUMNS_ROWS":
|
|
51345
51352
|
case "REMOVE_COLUMNS_ROWS":
|
|
51346
51353
|
case "RESIZE_COLUMNS_ROWS":
|
|
51347
51354
|
case "HIDE_COLUMNS_ROWS":
|
|
@@ -51354,11 +51361,9 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
51354
51361
|
case "FOLD_HEADER_GROUPS_IN_ZONE":
|
|
51355
51362
|
case "UNFOLD_HEADER_GROUPS_IN_ZONE":
|
|
51356
51363
|
case "UNFOLD_ALL_HEADER_GROUPS":
|
|
51357
|
-
case "FOLD_ALL_HEADER_GROUPS":
|
|
51358
|
-
|
|
51359
|
-
this.sheetsWithDirtyViewports.add(sheetId);
|
|
51364
|
+
case "FOLD_ALL_HEADER_GROUPS":
|
|
51365
|
+
this.sheetsWithDirtyViewports.add(cmd.sheetId);
|
|
51360
51366
|
break;
|
|
51361
|
-
}
|
|
51362
51367
|
case "UPDATE_CELL":
|
|
51363
51368
|
// update cell content or format can change hidden rows because of data filters
|
|
51364
51369
|
if ("content" in cmd || "format" in cmd || cmd.style?.fontSize !== undefined) {
|
|
@@ -51374,13 +51379,6 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
51374
51379
|
case "ACTIVATE_SHEET":
|
|
51375
51380
|
this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
|
|
51376
51381
|
break;
|
|
51377
|
-
case "UNFREEZE_ROWS":
|
|
51378
|
-
case "UNFREEZE_COLUMNS":
|
|
51379
|
-
case "FREEZE_COLUMNS":
|
|
51380
|
-
case "FREEZE_ROWS":
|
|
51381
|
-
case "UNFREEZE_COLUMNS_ROWS":
|
|
51382
|
-
this.resetViewports(this.getters.getActiveSheetId());
|
|
51383
|
-
break;
|
|
51384
51382
|
case "DELETE_SHEET":
|
|
51385
51383
|
this.sheetsWithDirtyViewports.delete(cmd.sheetId);
|
|
51386
51384
|
break;
|
|
@@ -58217,6 +58215,6 @@ const constants = {
|
|
|
58217
58215
|
export { AbstractChart, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, __info__, addFunction, astToFormula, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, tokenize };
|
|
58218
58216
|
|
|
58219
58217
|
|
|
58220
|
-
__info__.version = "17.0.
|
|
58221
|
-
__info__.date = "2025-
|
|
58222
|
-
__info__.hash = "
|
|
58218
|
+
__info__.version = "17.0.60";
|
|
58219
|
+
__info__.date = "2025-05-02T12:28:49.842Z";
|
|
58220
|
+
__info__.hash = "29510cc";
|
|
@@ -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 17.0.
|
|
6
|
-
* @date 2025-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 17.0.60
|
|
6
|
+
* @date 2025-05-02T12:28:49.842Z
|
|
7
|
+
* @hash 29510cc
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function (exports, owl) {
|
|
@@ -4856,7 +4856,7 @@
|
|
|
4856
4856
|
// Note: chartJS modify the runtime in place, so it's important to give it a copy
|
|
4857
4857
|
this.createChart(deepCopy(runtime.chartJsConfig));
|
|
4858
4858
|
});
|
|
4859
|
-
owl.useEffect(() => this.updateChartJs(deepCopy(this.chartRuntime)), () => [this.chartRuntime]);
|
|
4859
|
+
owl.useEffect(() => this.updateChartJs(deepCopy(this.chartRuntime)), () => [this.chartRuntime, window.devicePixelRatio]);
|
|
4860
4860
|
}
|
|
4861
4861
|
createChart(chartData) {
|
|
4862
4862
|
const canvas = this.canvas.el;
|
|
@@ -5394,8 +5394,10 @@
|
|
|
5394
5394
|
};
|
|
5395
5395
|
function drawScoreChart(structure, canvas) {
|
|
5396
5396
|
const ctx = canvas.getContext("2d");
|
|
5397
|
-
|
|
5398
|
-
canvas.
|
|
5397
|
+
const dpr = window.devicePixelRatio || 1;
|
|
5398
|
+
canvas.width = structure.canvas.width * dpr;
|
|
5399
|
+
canvas.height = structure.canvas.height * dpr;
|
|
5400
|
+
ctx.scale(dpr, dpr);
|
|
5399
5401
|
ctx.fillStyle = structure.canvas.backgroundColor;
|
|
5400
5402
|
ctx.fillRect(0, 0, structure.canvas.width, structure.canvas.height);
|
|
5401
5403
|
if (structure.title) {
|
|
@@ -5744,7 +5746,7 @@
|
|
|
5744
5746
|
owl.useEffect(this.createChart.bind(this), () => {
|
|
5745
5747
|
const canvas = this.canvas.el;
|
|
5746
5748
|
const rect = canvas.getBoundingClientRect();
|
|
5747
|
-
return [rect.width, rect.height, this.runtime, this.canvas.el];
|
|
5749
|
+
return [rect.width, rect.height, this.runtime, this.canvas.el, window.devicePixelRatio];
|
|
5748
5750
|
});
|
|
5749
5751
|
}
|
|
5750
5752
|
createChart() {
|
|
@@ -8788,9 +8790,6 @@
|
|
|
8788
8790
|
};
|
|
8789
8791
|
}
|
|
8790
8792
|
getDefinitionForExcel() {
|
|
8791
|
-
// Excel does not support aggregating labels
|
|
8792
|
-
if (this.aggregated)
|
|
8793
|
-
return undefined;
|
|
8794
8793
|
const dataSets = this.dataSets
|
|
8795
8794
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
8796
8795
|
.filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
|
|
@@ -9367,9 +9366,6 @@
|
|
|
9367
9366
|
return new LineChart(definition, this.sheetId, this.getters);
|
|
9368
9367
|
}
|
|
9369
9368
|
getDefinitionForExcel() {
|
|
9370
|
-
// Excel does not support aggregating labels
|
|
9371
|
-
if (this.aggregated)
|
|
9372
|
-
return undefined;
|
|
9373
9369
|
const dataSets = this.dataSets
|
|
9374
9370
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
9375
9371
|
.filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
|
|
@@ -9675,9 +9671,6 @@
|
|
|
9675
9671
|
return new PieChart(definition, sheetId, this.getters);
|
|
9676
9672
|
}
|
|
9677
9673
|
getDefinitionForExcel() {
|
|
9678
|
-
// Excel does not support aggregating labels
|
|
9679
|
-
if (this.aggregated)
|
|
9680
|
-
return undefined;
|
|
9681
9674
|
const dataSets = this.dataSets
|
|
9682
9675
|
.map((ds) => toExcelDataset(this.getters, ds))
|
|
9683
9676
|
.filter((ds) => ds.range !== "" && ds.range !== INCORRECT_RANGE_STRING);
|
|
@@ -22382,7 +22375,7 @@
|
|
|
22382
22375
|
}
|
|
22383
22376
|
setHexColor(ev) {
|
|
22384
22377
|
// only support HEX code input
|
|
22385
|
-
const val = ev.target.value.slice(0, 7);
|
|
22378
|
+
const val = ev.target.value.replace("##", "#").slice(0, 7);
|
|
22386
22379
|
this.state.customHexColor = val;
|
|
22387
22380
|
if (!isColorValid(val)) ;
|
|
22388
22381
|
else {
|
|
@@ -28481,18 +28474,28 @@
|
|
|
28481
28474
|
function useInterval(callback, delay) {
|
|
28482
28475
|
let intervalId;
|
|
28483
28476
|
const { setInterval, clearInterval } = window;
|
|
28477
|
+
const pause = () => {
|
|
28478
|
+
clearInterval(intervalId);
|
|
28479
|
+
intervalId = undefined;
|
|
28480
|
+
};
|
|
28481
|
+
const safeCallback = () => {
|
|
28482
|
+
try {
|
|
28483
|
+
callback();
|
|
28484
|
+
}
|
|
28485
|
+
catch (e) {
|
|
28486
|
+
pause();
|
|
28487
|
+
throw e;
|
|
28488
|
+
}
|
|
28489
|
+
};
|
|
28484
28490
|
owl.useEffect(() => {
|
|
28485
|
-
intervalId = setInterval(
|
|
28491
|
+
intervalId = setInterval(safeCallback, delay);
|
|
28486
28492
|
return () => clearInterval(intervalId);
|
|
28487
28493
|
}, () => [delay]);
|
|
28488
28494
|
return {
|
|
28489
|
-
pause
|
|
28490
|
-
clearInterval(intervalId);
|
|
28491
|
-
intervalId = undefined;
|
|
28492
|
-
},
|
|
28495
|
+
pause,
|
|
28493
28496
|
resume: () => {
|
|
28494
28497
|
if (intervalId === undefined) {
|
|
28495
|
-
intervalId = setInterval(
|
|
28498
|
+
intervalId = setInterval(safeCallback, delay);
|
|
28496
28499
|
}
|
|
28497
28500
|
},
|
|
28498
28501
|
};
|
|
@@ -28937,7 +28940,7 @@
|
|
|
28937
28940
|
position: absolute;
|
|
28938
28941
|
top: 0;
|
|
28939
28942
|
left: ${HEADER_WIDTH}px;
|
|
28940
|
-
right:
|
|
28943
|
+
right: ${SCROLLBAR_WIDTH}px;
|
|
28941
28944
|
height: ${HEADER_HEIGHT}px;
|
|
28942
28945
|
&.o-dragging {
|
|
28943
28946
|
cursor: grabbing;
|
|
@@ -29112,9 +29115,8 @@
|
|
|
29112
29115
|
position: absolute;
|
|
29113
29116
|
top: ${HEADER_HEIGHT}px;
|
|
29114
29117
|
left: 0;
|
|
29115
|
-
|
|
29118
|
+
bottom: ${SCROLLBAR_WIDTH}px;
|
|
29116
29119
|
width: ${HEADER_WIDTH}px;
|
|
29117
|
-
height: calc(100% - ${HEADER_HEIGHT + SCROLLBAR_WIDTH}px);
|
|
29118
29120
|
&.o-dragging {
|
|
29119
29121
|
cursor: grabbing;
|
|
29120
29122
|
}
|
|
@@ -50602,6 +50604,8 @@
|
|
|
50602
50604
|
});
|
|
50603
50605
|
this.selectCell(col, row);
|
|
50604
50606
|
}
|
|
50607
|
+
const { col, row } = this.gridSelection.anchor.cell;
|
|
50608
|
+
this.moveClient({ sheetId: this.activeSheet.id, col, row });
|
|
50605
50609
|
}
|
|
50606
50610
|
/**
|
|
50607
50611
|
* Ensure selections are not outside sheet boundaries.
|
|
@@ -51341,8 +51345,11 @@
|
|
|
51341
51345
|
}
|
|
51342
51346
|
case "REMOVE_FILTER_TABLE":
|
|
51343
51347
|
case "UPDATE_FILTER":
|
|
51344
|
-
|
|
51345
|
-
|
|
51348
|
+
case "UNFREEZE_ROWS":
|
|
51349
|
+
case "UNFREEZE_COLUMNS":
|
|
51350
|
+
case "FREEZE_COLUMNS":
|
|
51351
|
+
case "FREEZE_ROWS":
|
|
51352
|
+
case "UNFREEZE_COLUMNS_ROWS":
|
|
51346
51353
|
case "REMOVE_COLUMNS_ROWS":
|
|
51347
51354
|
case "RESIZE_COLUMNS_ROWS":
|
|
51348
51355
|
case "HIDE_COLUMNS_ROWS":
|
|
@@ -51355,11 +51362,9 @@
|
|
|
51355
51362
|
case "FOLD_HEADER_GROUPS_IN_ZONE":
|
|
51356
51363
|
case "UNFOLD_HEADER_GROUPS_IN_ZONE":
|
|
51357
51364
|
case "UNFOLD_ALL_HEADER_GROUPS":
|
|
51358
|
-
case "FOLD_ALL_HEADER_GROUPS":
|
|
51359
|
-
|
|
51360
|
-
this.sheetsWithDirtyViewports.add(sheetId);
|
|
51365
|
+
case "FOLD_ALL_HEADER_GROUPS":
|
|
51366
|
+
this.sheetsWithDirtyViewports.add(cmd.sheetId);
|
|
51361
51367
|
break;
|
|
51362
|
-
}
|
|
51363
51368
|
case "UPDATE_CELL":
|
|
51364
51369
|
// update cell content or format can change hidden rows because of data filters
|
|
51365
51370
|
if ("content" in cmd || "format" in cmd || cmd.style?.fontSize !== undefined) {
|
|
@@ -51375,13 +51380,6 @@
|
|
|
51375
51380
|
case "ACTIVATE_SHEET":
|
|
51376
51381
|
this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
|
|
51377
51382
|
break;
|
|
51378
|
-
case "UNFREEZE_ROWS":
|
|
51379
|
-
case "UNFREEZE_COLUMNS":
|
|
51380
|
-
case "FREEZE_COLUMNS":
|
|
51381
|
-
case "FREEZE_ROWS":
|
|
51382
|
-
case "UNFREEZE_COLUMNS_ROWS":
|
|
51383
|
-
this.resetViewports(this.getters.getActiveSheetId());
|
|
51384
|
-
break;
|
|
51385
51383
|
case "DELETE_SHEET":
|
|
51386
51384
|
this.sheetsWithDirtyViewports.delete(cmd.sheetId);
|
|
51387
51385
|
break;
|
|
@@ -58253,9 +58251,9 @@
|
|
|
58253
58251
|
exports.tokenize = tokenize;
|
|
58254
58252
|
|
|
58255
58253
|
|
|
58256
|
-
__info__.version = "17.0.
|
|
58257
|
-
__info__.date = "2025-
|
|
58258
|
-
__info__.hash = "
|
|
58254
|
+
__info__.version = "17.0.60";
|
|
58255
|
+
__info__.date = "2025-05-02T12:28:49.842Z";
|
|
58256
|
+
__info__.hash = "29510cc";
|
|
58259
58257
|
|
|
58260
58258
|
|
|
58261
58259
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|