@odoo/o-spreadsheet 19.4.5 → 19.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/o_spreadsheet.cjs +65 -17
- package/dist/o_spreadsheet.css +3 -3
- package/dist/o_spreadsheet.esm.js +65 -17
- package/dist/o_spreadsheet.iife.js +65 -17
- package/dist/o_spreadsheet.min.iife.js +45 -45
- package/dist/o_spreadsheet.xml +3 -3
- package/dist/types/components/figures/chart/chartJs/chartjs_geo_projection_plugin.d.ts +12 -0
- package/dist/types/components/figures/figure/figure.d.ts +3 -3
- package/dist/types/index.d.ts +2 -0
- package/package.json +2 -2
package/dist/o_spreadsheet.cjs
CHANGED
|
@@ -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 19.4.
|
|
6
|
-
* @date 2026-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.4.6
|
|
6
|
+
* @date 2026-08-10T12:33:32.728Z
|
|
7
|
+
* @hash 5c667fe
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
@@ -8916,6 +8916,25 @@ const funnelTooltipPositioner = function(elements) {
|
|
|
8916
8916
|
};
|
|
8917
8917
|
};
|
|
8918
8918
|
|
|
8919
|
+
//#endregion
|
|
8920
|
+
//#region src/components/figures/chart/chartJs/chartjs_geo_projection_plugin.ts
|
|
8921
|
+
/**
|
|
8922
|
+
* ChartJS plugin to apply custom changes to a d3 projection.
|
|
8923
|
+
*
|
|
8924
|
+
* We pass the projection as a string instead of a customized d3 object so
|
|
8925
|
+
* Chart.js creates a fresh projection instance. Custom changes (e.g. rotation)
|
|
8926
|
+
* are then applied in `beforeUpdate`.
|
|
8927
|
+
*
|
|
8928
|
+
* This is important because Chart.js mutates the projection instance at runtime,
|
|
8929
|
+
* and a customize d3 projection object would not be copied during deepCopy.
|
|
8930
|
+
*/
|
|
8931
|
+
const geoProjectionPlugin = {
|
|
8932
|
+
id: "geoProjection",
|
|
8933
|
+
beforeUpdate(chart) {
|
|
8934
|
+
if (chart.options?.scales?.projection?.projection === "conicConformal") chart.scales?.projection?.projection?.rotate([100, 0]);
|
|
8935
|
+
}
|
|
8936
|
+
};
|
|
8937
|
+
|
|
8919
8938
|
//#endregion
|
|
8920
8939
|
//#region src/components/figures/chart/chartJs/chartjs_minor_grid_plugin.ts
|
|
8921
8940
|
const chartMinorGridPlugin = {
|
|
@@ -10719,7 +10738,7 @@ function getGeoChartScales(definition, args) {
|
|
|
10719
10738
|
const format = axisFormats?.y || axisFormats?.y1;
|
|
10720
10739
|
return {
|
|
10721
10740
|
projection: {
|
|
10722
|
-
projection:
|
|
10741
|
+
projection: region?.defaultProjection || "mercator",
|
|
10723
10742
|
axis: "x"
|
|
10724
10743
|
},
|
|
10725
10744
|
color: {
|
|
@@ -10771,10 +10790,6 @@ function getFunnelChartScales(definition, args) {
|
|
|
10771
10790
|
}
|
|
10772
10791
|
};
|
|
10773
10792
|
}
|
|
10774
|
-
function getGeoChartProjection(projection) {
|
|
10775
|
-
if (globalThis.ChartGeo && projection === "conicConformal") return globalThis.ChartGeo.geoConicConformal().rotate([100, 0]);
|
|
10776
|
-
return projection;
|
|
10777
|
-
}
|
|
10778
10793
|
function getChartAxisTitleRuntime(design) {
|
|
10779
10794
|
if (design?.title?.text) {
|
|
10780
10795
|
const { text, color, align, italic, bold } = design.title;
|
|
@@ -11735,6 +11750,10 @@ chartJsExtensionRegistry.add("chartBackgroundPlugin", {
|
|
|
11735
11750
|
register: (Chart) => Chart.register(chartBackgroundPlugin),
|
|
11736
11751
|
unregister: (Chart) => Chart.unregister(chartBackgroundPlugin)
|
|
11737
11752
|
});
|
|
11753
|
+
chartJsExtensionRegistry.add("geoProjectionPlugin", {
|
|
11754
|
+
register: (Chart) => Chart.register(geoProjectionPlugin),
|
|
11755
|
+
unregister: (Chart) => Chart.unregister(geoProjectionPlugin)
|
|
11756
|
+
});
|
|
11738
11757
|
var ChartJsComponent = class extends Component {
|
|
11739
11758
|
static template = "o-spreadsheet-ChartJsComponent";
|
|
11740
11759
|
props = (0, _odoo_owl.useProps)({
|
|
@@ -15584,7 +15603,7 @@ var FigureComponent = class extends Component {
|
|
|
15584
15603
|
figures.push({
|
|
15585
15604
|
sheetId,
|
|
15586
15605
|
figureId,
|
|
15587
|
-
...this.
|
|
15606
|
+
...this.positionInBoundary(sheetId, this.env.model.getters.getFigureUI(sheetId, figure), ev.key, ev.shiftKey)
|
|
15588
15607
|
});
|
|
15589
15608
|
}
|
|
15590
15609
|
this.env.model.dispatch("MOVE_FIGURES", { figures });
|
|
@@ -15604,21 +15623,23 @@ var FigureComponent = class extends Component {
|
|
|
15604
15623
|
break;
|
|
15605
15624
|
}
|
|
15606
15625
|
}
|
|
15607
|
-
|
|
15608
|
-
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
15626
|
+
positionInBoundary(sheetId, figure, key, shift) {
|
|
15609
15627
|
const shiftAmount = shift ? 1 : 5;
|
|
15610
|
-
let { col, row, offset } =
|
|
15628
|
+
let { col, row, offset } = figure;
|
|
15611
15629
|
offset = { ...offset };
|
|
15630
|
+
const maxAnchor = this.env.model.getters.getMaxAnchorOffset(sheetId, figure.height, figure.width);
|
|
15612
15631
|
switch (key) {
|
|
15613
15632
|
case "ArrowUp":
|
|
15614
15633
|
if (offset.y < shiftAmount) {
|
|
15615
15634
|
row--;
|
|
15635
|
+
while (row > 0 && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row--;
|
|
15616
15636
|
offset.y = this.env.model.getters.getRowSize(sheetId, row) - shiftAmount + offset.y;
|
|
15617
15637
|
} else offset.y -= shiftAmount;
|
|
15618
15638
|
break;
|
|
15619
15639
|
case "ArrowLeft":
|
|
15620
15640
|
if (offset.x < shiftAmount) {
|
|
15621
15641
|
col--;
|
|
15642
|
+
while (col > 0 && this.env.model.getters.isColHiddenByUser(sheetId, col)) col--;
|
|
15622
15643
|
offset.x = this.env.model.getters.getColSize(sheetId, col) - shiftAmount + offset.x;
|
|
15623
15644
|
} else offset.x -= shiftAmount;
|
|
15624
15645
|
break;
|
|
@@ -15626,6 +15647,7 @@ var FigureComponent = class extends Component {
|
|
|
15626
15647
|
const rowSize = this.env.model.getters.getRowSize(sheetId, row);
|
|
15627
15648
|
if (offset.y + shiftAmount >= rowSize) {
|
|
15628
15649
|
row++;
|
|
15650
|
+
while (row <= maxAnchor.row && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row++;
|
|
15629
15651
|
offset.y = offset.y + shiftAmount - rowSize;
|
|
15630
15652
|
} else offset.y += shiftAmount;
|
|
15631
15653
|
break;
|
|
@@ -15633,9 +15655,24 @@ var FigureComponent = class extends Component {
|
|
|
15633
15655
|
const colSize = this.env.model.getters.getColSize(sheetId, col);
|
|
15634
15656
|
if (offset.x + shiftAmount >= colSize) {
|
|
15635
15657
|
col++;
|
|
15658
|
+
while (col <= maxAnchor.col && this.env.model.getters.isColHiddenByUser(sheetId, col)) col++;
|
|
15636
15659
|
offset.x = offset.x + shiftAmount - colSize;
|
|
15637
15660
|
} else offset.x += shiftAmount;
|
|
15638
15661
|
}
|
|
15662
|
+
if (col < 0) {
|
|
15663
|
+
col = 0;
|
|
15664
|
+
offset.x = 0;
|
|
15665
|
+
} else if (col > maxAnchor.col || col === maxAnchor.col && offset.x > maxAnchor.offset.x) {
|
|
15666
|
+
col = maxAnchor.col;
|
|
15667
|
+
offset.x = maxAnchor.offset.x;
|
|
15668
|
+
}
|
|
15669
|
+
if (row < 0) {
|
|
15670
|
+
row = 0;
|
|
15671
|
+
offset.y = 0;
|
|
15672
|
+
} else if (row > maxAnchor.row || row === maxAnchor.row && offset.y > maxAnchor.offset.y) {
|
|
15673
|
+
row = maxAnchor.row;
|
|
15674
|
+
offset.y = maxAnchor.offset.y;
|
|
15675
|
+
}
|
|
15639
15676
|
return {
|
|
15640
15677
|
col,
|
|
15641
15678
|
row,
|
|
@@ -46021,7 +46058,13 @@ var CellComposerStore = class extends AbstractComposerStore {
|
|
|
46021
46058
|
const cell = this.getters.getEvaluatedCell(position);
|
|
46022
46059
|
if (cell.link && !isFormula(content)) content = markdownLink(content, cell.link.url);
|
|
46023
46060
|
const currentFormat = this.getters.getCell(position)?.format;
|
|
46024
|
-
const
|
|
46061
|
+
const isCurrentFormatDate = currentFormat && isDateTimeFormat(currentFormat);
|
|
46062
|
+
const contentDateFormat = detectDateFormat(content, this.getters.getLocale());
|
|
46063
|
+
let afterFormat;
|
|
46064
|
+
if (currentFormat !== "@") {
|
|
46065
|
+
if (contentDateFormat && !isCurrentFormatDate) afterFormat = contentDateFormat;
|
|
46066
|
+
else if (isCurrentFormatDate && isNumber(content, this.getters.getLocale())) afterFormat = "";
|
|
46067
|
+
}
|
|
46025
46068
|
this.addHeadersForSpreadingFormula(content);
|
|
46026
46069
|
result = this.model.dispatch("UPDATE_CELL", {
|
|
46027
46070
|
...this.currentEditedCell,
|
|
@@ -67876,6 +67919,10 @@ function inverseCreateFigure(cmd) {
|
|
|
67876
67919
|
}
|
|
67877
67920
|
function inverseCreateChart(cmd) {
|
|
67878
67921
|
return [{
|
|
67922
|
+
type: "DELETE_CHART",
|
|
67923
|
+
chartId: cmd.chartId,
|
|
67924
|
+
sheetId: cmd.sheetId
|
|
67925
|
+
}, {
|
|
67879
67926
|
type: "DELETE_FIGURE",
|
|
67880
67927
|
figureId: cmd.figureId,
|
|
67881
67928
|
sheetId: cmd.sheetId
|
|
@@ -87712,7 +87759,8 @@ const components = {
|
|
|
87712
87759
|
FullScreenFigure,
|
|
87713
87760
|
NumberInput,
|
|
87714
87761
|
TopBar,
|
|
87715
|
-
Composer
|
|
87762
|
+
Composer,
|
|
87763
|
+
CarouselFigure
|
|
87716
87764
|
};
|
|
87717
87765
|
const hooks = {
|
|
87718
87766
|
useDragAndDropListItems,
|
|
@@ -87866,6 +87914,6 @@ exports.stores = stores;
|
|
|
87866
87914
|
exports.tokenColors = tokenColors;
|
|
87867
87915
|
exports.tokenize = tokenize;
|
|
87868
87916
|
|
|
87869
|
-
__info__.version = "19.4.
|
|
87870
|
-
__info__.date = "2026-
|
|
87871
|
-
__info__.hash = "
|
|
87917
|
+
__info__.version = "19.4.6";
|
|
87918
|
+
__info__.date = "2026-08-10T12:33:32.728Z";
|
|
87919
|
+
__info__.hash = "5c667fe";
|
package/dist/o_spreadsheet.css
CHANGED
|
@@ -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 19.4.
|
|
6
|
-
* @date 2026-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.4.6
|
|
6
|
+
* @date 2026-08-10T12:33:34.157Z
|
|
7
|
+
* @hash 5c667fe
|
|
8
8
|
*/
|
|
9
9
|
:root {
|
|
10
10
|
--os-gray-100: light-dark(#f9fafb, #1b1d26);
|
|
@@ -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 19.4.
|
|
6
|
-
* @date 2026-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.4.6
|
|
6
|
+
* @date 2026-08-10T12:33:32.728Z
|
|
7
|
+
* @hash 5c667fe
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import * as owl from "@odoo/owl";
|
|
@@ -8915,6 +8915,25 @@ const funnelTooltipPositioner = function(elements) {
|
|
|
8915
8915
|
};
|
|
8916
8916
|
};
|
|
8917
8917
|
|
|
8918
|
+
//#endregion
|
|
8919
|
+
//#region src/components/figures/chart/chartJs/chartjs_geo_projection_plugin.ts
|
|
8920
|
+
/**
|
|
8921
|
+
* ChartJS plugin to apply custom changes to a d3 projection.
|
|
8922
|
+
*
|
|
8923
|
+
* We pass the projection as a string instead of a customized d3 object so
|
|
8924
|
+
* Chart.js creates a fresh projection instance. Custom changes (e.g. rotation)
|
|
8925
|
+
* are then applied in `beforeUpdate`.
|
|
8926
|
+
*
|
|
8927
|
+
* This is important because Chart.js mutates the projection instance at runtime,
|
|
8928
|
+
* and a customize d3 projection object would not be copied during deepCopy.
|
|
8929
|
+
*/
|
|
8930
|
+
const geoProjectionPlugin = {
|
|
8931
|
+
id: "geoProjection",
|
|
8932
|
+
beforeUpdate(chart) {
|
|
8933
|
+
if (chart.options?.scales?.projection?.projection === "conicConformal") chart.scales?.projection?.projection?.rotate([100, 0]);
|
|
8934
|
+
}
|
|
8935
|
+
};
|
|
8936
|
+
|
|
8918
8937
|
//#endregion
|
|
8919
8938
|
//#region src/components/figures/chart/chartJs/chartjs_minor_grid_plugin.ts
|
|
8920
8939
|
const chartMinorGridPlugin = {
|
|
@@ -10718,7 +10737,7 @@ function getGeoChartScales(definition, args) {
|
|
|
10718
10737
|
const format = axisFormats?.y || axisFormats?.y1;
|
|
10719
10738
|
return {
|
|
10720
10739
|
projection: {
|
|
10721
|
-
projection:
|
|
10740
|
+
projection: region?.defaultProjection || "mercator",
|
|
10722
10741
|
axis: "x"
|
|
10723
10742
|
},
|
|
10724
10743
|
color: {
|
|
@@ -10770,10 +10789,6 @@ function getFunnelChartScales(definition, args) {
|
|
|
10770
10789
|
}
|
|
10771
10790
|
};
|
|
10772
10791
|
}
|
|
10773
|
-
function getGeoChartProjection(projection) {
|
|
10774
|
-
if (globalThis.ChartGeo && projection === "conicConformal") return globalThis.ChartGeo.geoConicConformal().rotate([100, 0]);
|
|
10775
|
-
return projection;
|
|
10776
|
-
}
|
|
10777
10792
|
function getChartAxisTitleRuntime(design) {
|
|
10778
10793
|
if (design?.title?.text) {
|
|
10779
10794
|
const { text, color, align, italic, bold } = design.title;
|
|
@@ -11734,6 +11749,10 @@ chartJsExtensionRegistry.add("chartBackgroundPlugin", {
|
|
|
11734
11749
|
register: (Chart) => Chart.register(chartBackgroundPlugin),
|
|
11735
11750
|
unregister: (Chart) => Chart.unregister(chartBackgroundPlugin)
|
|
11736
11751
|
});
|
|
11752
|
+
chartJsExtensionRegistry.add("geoProjectionPlugin", {
|
|
11753
|
+
register: (Chart) => Chart.register(geoProjectionPlugin),
|
|
11754
|
+
unregister: (Chart) => Chart.unregister(geoProjectionPlugin)
|
|
11755
|
+
});
|
|
11737
11756
|
var ChartJsComponent = class extends Component {
|
|
11738
11757
|
static template = "o-spreadsheet-ChartJsComponent";
|
|
11739
11758
|
props = useProps({
|
|
@@ -15583,7 +15602,7 @@ var FigureComponent = class extends Component {
|
|
|
15583
15602
|
figures.push({
|
|
15584
15603
|
sheetId,
|
|
15585
15604
|
figureId,
|
|
15586
|
-
...this.
|
|
15605
|
+
...this.positionInBoundary(sheetId, this.env.model.getters.getFigureUI(sheetId, figure), ev.key, ev.shiftKey)
|
|
15587
15606
|
});
|
|
15588
15607
|
}
|
|
15589
15608
|
this.env.model.dispatch("MOVE_FIGURES", { figures });
|
|
@@ -15603,21 +15622,23 @@ var FigureComponent = class extends Component {
|
|
|
15603
15622
|
break;
|
|
15604
15623
|
}
|
|
15605
15624
|
}
|
|
15606
|
-
|
|
15607
|
-
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
15625
|
+
positionInBoundary(sheetId, figure, key, shift) {
|
|
15608
15626
|
const shiftAmount = shift ? 1 : 5;
|
|
15609
|
-
let { col, row, offset } =
|
|
15627
|
+
let { col, row, offset } = figure;
|
|
15610
15628
|
offset = { ...offset };
|
|
15629
|
+
const maxAnchor = this.env.model.getters.getMaxAnchorOffset(sheetId, figure.height, figure.width);
|
|
15611
15630
|
switch (key) {
|
|
15612
15631
|
case "ArrowUp":
|
|
15613
15632
|
if (offset.y < shiftAmount) {
|
|
15614
15633
|
row--;
|
|
15634
|
+
while (row > 0 && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row--;
|
|
15615
15635
|
offset.y = this.env.model.getters.getRowSize(sheetId, row) - shiftAmount + offset.y;
|
|
15616
15636
|
} else offset.y -= shiftAmount;
|
|
15617
15637
|
break;
|
|
15618
15638
|
case "ArrowLeft":
|
|
15619
15639
|
if (offset.x < shiftAmount) {
|
|
15620
15640
|
col--;
|
|
15641
|
+
while (col > 0 && this.env.model.getters.isColHiddenByUser(sheetId, col)) col--;
|
|
15621
15642
|
offset.x = this.env.model.getters.getColSize(sheetId, col) - shiftAmount + offset.x;
|
|
15622
15643
|
} else offset.x -= shiftAmount;
|
|
15623
15644
|
break;
|
|
@@ -15625,6 +15646,7 @@ var FigureComponent = class extends Component {
|
|
|
15625
15646
|
const rowSize = this.env.model.getters.getRowSize(sheetId, row);
|
|
15626
15647
|
if (offset.y + shiftAmount >= rowSize) {
|
|
15627
15648
|
row++;
|
|
15649
|
+
while (row <= maxAnchor.row && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row++;
|
|
15628
15650
|
offset.y = offset.y + shiftAmount - rowSize;
|
|
15629
15651
|
} else offset.y += shiftAmount;
|
|
15630
15652
|
break;
|
|
@@ -15632,9 +15654,24 @@ var FigureComponent = class extends Component {
|
|
|
15632
15654
|
const colSize = this.env.model.getters.getColSize(sheetId, col);
|
|
15633
15655
|
if (offset.x + shiftAmount >= colSize) {
|
|
15634
15656
|
col++;
|
|
15657
|
+
while (col <= maxAnchor.col && this.env.model.getters.isColHiddenByUser(sheetId, col)) col++;
|
|
15635
15658
|
offset.x = offset.x + shiftAmount - colSize;
|
|
15636
15659
|
} else offset.x += shiftAmount;
|
|
15637
15660
|
}
|
|
15661
|
+
if (col < 0) {
|
|
15662
|
+
col = 0;
|
|
15663
|
+
offset.x = 0;
|
|
15664
|
+
} else if (col > maxAnchor.col || col === maxAnchor.col && offset.x > maxAnchor.offset.x) {
|
|
15665
|
+
col = maxAnchor.col;
|
|
15666
|
+
offset.x = maxAnchor.offset.x;
|
|
15667
|
+
}
|
|
15668
|
+
if (row < 0) {
|
|
15669
|
+
row = 0;
|
|
15670
|
+
offset.y = 0;
|
|
15671
|
+
} else if (row > maxAnchor.row || row === maxAnchor.row && offset.y > maxAnchor.offset.y) {
|
|
15672
|
+
row = maxAnchor.row;
|
|
15673
|
+
offset.y = maxAnchor.offset.y;
|
|
15674
|
+
}
|
|
15638
15675
|
return {
|
|
15639
15676
|
col,
|
|
15640
15677
|
row,
|
|
@@ -46020,7 +46057,13 @@ var CellComposerStore = class extends AbstractComposerStore {
|
|
|
46020
46057
|
const cell = this.getters.getEvaluatedCell(position);
|
|
46021
46058
|
if (cell.link && !isFormula(content)) content = markdownLink(content, cell.link.url);
|
|
46022
46059
|
const currentFormat = this.getters.getCell(position)?.format;
|
|
46023
|
-
const
|
|
46060
|
+
const isCurrentFormatDate = currentFormat && isDateTimeFormat(currentFormat);
|
|
46061
|
+
const contentDateFormat = detectDateFormat(content, this.getters.getLocale());
|
|
46062
|
+
let afterFormat;
|
|
46063
|
+
if (currentFormat !== "@") {
|
|
46064
|
+
if (contentDateFormat && !isCurrentFormatDate) afterFormat = contentDateFormat;
|
|
46065
|
+
else if (isCurrentFormatDate && isNumber(content, this.getters.getLocale())) afterFormat = "";
|
|
46066
|
+
}
|
|
46024
46067
|
this.addHeadersForSpreadingFormula(content);
|
|
46025
46068
|
result = this.model.dispatch("UPDATE_CELL", {
|
|
46026
46069
|
...this.currentEditedCell,
|
|
@@ -67691,6 +67734,10 @@ function inverseCreateFigure(cmd) {
|
|
|
67691
67734
|
}
|
|
67692
67735
|
function inverseCreateChart(cmd) {
|
|
67693
67736
|
return [{
|
|
67737
|
+
type: "DELETE_CHART",
|
|
67738
|
+
chartId: cmd.chartId,
|
|
67739
|
+
sheetId: cmd.sheetId
|
|
67740
|
+
}, {
|
|
67694
67741
|
type: "DELETE_FIGURE",
|
|
67695
67742
|
figureId: cmd.figureId,
|
|
67696
67743
|
sheetId: cmd.sheetId
|
|
@@ -87527,7 +87574,8 @@ const components = {
|
|
|
87527
87574
|
FullScreenFigure,
|
|
87528
87575
|
NumberInput,
|
|
87529
87576
|
TopBar,
|
|
87530
|
-
Composer
|
|
87577
|
+
Composer,
|
|
87578
|
+
CarouselFigure
|
|
87531
87579
|
};
|
|
87532
87580
|
const hooks = {
|
|
87533
87581
|
useDragAndDropListItems,
|
|
@@ -87587,6 +87635,6 @@ const chartHelpers = {
|
|
|
87587
87635
|
//#endregion
|
|
87588
87636
|
export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, BadExpressionError, CHART_TYPES, CellErrorType, CellValueType, CircularDependencyError, ClientDisconnectedError, ClipboardMIMEType, CommandResult, CompiledFormula, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DEFAULT_LOCALE_DIGIT_GROUPING, DIRECTION, DispatchResult, DivisionByZeroError, EvaluationError, InvalidReferenceError, LocalTransportService, Model, NEXT_VALUE, NotAvailableError, NumberTooLargeError, OrderedLayers, PREVIOUS_VALUE, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, SplillBlockedError, Spreadsheet, SpreadsheetPivotTable, UIPlugin, UnknownFunctionError, __info__, addFunction, addRenderingLayer, astToFormula, availableConditionalFormatOperators, availableDataValidationOperators, availableFiltersOperators, borderPositions, borderStyles, canExecuteInReadonly, categories, chartHelpers, compatibility, components, composerFocusTypes, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, errorTypes, filterDateCriterionOperators, filterNumberCriterionOperators, filterTextCriterionOperators, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidSubtotalFormulasCommands, invalidateBordersCommands, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isHeadersDependant, isMatrix, isPositionDependent, isRangeDependant, isSheetDependent, isTargetDependent, isZoneDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, schemeToColorScale, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
|
|
87589
87637
|
|
|
87590
|
-
__info__.version = "19.4.
|
|
87591
|
-
__info__.date = "2026-
|
|
87592
|
-
__info__.hash = "
|
|
87638
|
+
__info__.version = "19.4.6";
|
|
87639
|
+
__info__.date = "2026-08-10T12:33:32.728Z";
|
|
87640
|
+
__info__.hash = "5c667fe";
|
|
@@ -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 19.4.
|
|
6
|
-
* @date 2026-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.4.6
|
|
6
|
+
* @date 2026-08-10T12:33:32.728Z
|
|
7
|
+
* @hash 5c667fe
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function(exports, _odoo_owl) {
|
|
@@ -8917,6 +8917,25 @@ set(value) {
|
|
|
8917
8917
|
};
|
|
8918
8918
|
};
|
|
8919
8919
|
|
|
8920
|
+
//#endregion
|
|
8921
|
+
//#region src/components/figures/chart/chartJs/chartjs_geo_projection_plugin.ts
|
|
8922
|
+
/**
|
|
8923
|
+
* ChartJS plugin to apply custom changes to a d3 projection.
|
|
8924
|
+
*
|
|
8925
|
+
* We pass the projection as a string instead of a customized d3 object so
|
|
8926
|
+
* Chart.js creates a fresh projection instance. Custom changes (e.g. rotation)
|
|
8927
|
+
* are then applied in `beforeUpdate`.
|
|
8928
|
+
*
|
|
8929
|
+
* This is important because Chart.js mutates the projection instance at runtime,
|
|
8930
|
+
* and a customize d3 projection object would not be copied during deepCopy.
|
|
8931
|
+
*/
|
|
8932
|
+
const geoProjectionPlugin = {
|
|
8933
|
+
id: "geoProjection",
|
|
8934
|
+
beforeUpdate(chart) {
|
|
8935
|
+
if (chart.options?.scales?.projection?.projection === "conicConformal") chart.scales?.projection?.projection?.rotate([100, 0]);
|
|
8936
|
+
}
|
|
8937
|
+
};
|
|
8938
|
+
|
|
8920
8939
|
//#endregion
|
|
8921
8940
|
//#region src/components/figures/chart/chartJs/chartjs_minor_grid_plugin.ts
|
|
8922
8941
|
const chartMinorGridPlugin = {
|
|
@@ -10720,7 +10739,7 @@ set(value) {
|
|
|
10720
10739
|
const format = axisFormats?.y || axisFormats?.y1;
|
|
10721
10740
|
return {
|
|
10722
10741
|
projection: {
|
|
10723
|
-
projection:
|
|
10742
|
+
projection: region?.defaultProjection || "mercator",
|
|
10724
10743
|
axis: "x"
|
|
10725
10744
|
},
|
|
10726
10745
|
color: {
|
|
@@ -10772,10 +10791,6 @@ set(value) {
|
|
|
10772
10791
|
}
|
|
10773
10792
|
};
|
|
10774
10793
|
}
|
|
10775
|
-
function getGeoChartProjection(projection) {
|
|
10776
|
-
if (globalThis.ChartGeo && projection === "conicConformal") return globalThis.ChartGeo.geoConicConformal().rotate([100, 0]);
|
|
10777
|
-
return projection;
|
|
10778
|
-
}
|
|
10779
10794
|
function getChartAxisTitleRuntime(design) {
|
|
10780
10795
|
if (design?.title?.text) {
|
|
10781
10796
|
const { text, color, align, italic, bold } = design.title;
|
|
@@ -11736,6 +11751,10 @@ set(value) {
|
|
|
11736
11751
|
register: (Chart) => Chart.register(chartBackgroundPlugin),
|
|
11737
11752
|
unregister: (Chart) => Chart.unregister(chartBackgroundPlugin)
|
|
11738
11753
|
});
|
|
11754
|
+
chartJsExtensionRegistry.add("geoProjectionPlugin", {
|
|
11755
|
+
register: (Chart) => Chart.register(geoProjectionPlugin),
|
|
11756
|
+
unregister: (Chart) => Chart.unregister(geoProjectionPlugin)
|
|
11757
|
+
});
|
|
11739
11758
|
var ChartJsComponent = class extends Component {
|
|
11740
11759
|
static template = "o-spreadsheet-ChartJsComponent";
|
|
11741
11760
|
props = (0, _odoo_owl.useProps)({
|
|
@@ -15585,7 +15604,7 @@ set(value) {
|
|
|
15585
15604
|
figures.push({
|
|
15586
15605
|
sheetId,
|
|
15587
15606
|
figureId,
|
|
15588
|
-
...this.
|
|
15607
|
+
...this.positionInBoundary(sheetId, this.env.model.getters.getFigureUI(sheetId, figure), ev.key, ev.shiftKey)
|
|
15589
15608
|
});
|
|
15590
15609
|
}
|
|
15591
15610
|
this.env.model.dispatch("MOVE_FIGURES", { figures });
|
|
@@ -15605,21 +15624,23 @@ set(value) {
|
|
|
15605
15624
|
break;
|
|
15606
15625
|
}
|
|
15607
15626
|
}
|
|
15608
|
-
|
|
15609
|
-
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
15627
|
+
positionInBoundary(sheetId, figure, key, shift) {
|
|
15610
15628
|
const shiftAmount = shift ? 1 : 5;
|
|
15611
|
-
let { col, row, offset } =
|
|
15629
|
+
let { col, row, offset } = figure;
|
|
15612
15630
|
offset = { ...offset };
|
|
15631
|
+
const maxAnchor = this.env.model.getters.getMaxAnchorOffset(sheetId, figure.height, figure.width);
|
|
15613
15632
|
switch (key) {
|
|
15614
15633
|
case "ArrowUp":
|
|
15615
15634
|
if (offset.y < shiftAmount) {
|
|
15616
15635
|
row--;
|
|
15636
|
+
while (row > 0 && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row--;
|
|
15617
15637
|
offset.y = this.env.model.getters.getRowSize(sheetId, row) - shiftAmount + offset.y;
|
|
15618
15638
|
} else offset.y -= shiftAmount;
|
|
15619
15639
|
break;
|
|
15620
15640
|
case "ArrowLeft":
|
|
15621
15641
|
if (offset.x < shiftAmount) {
|
|
15622
15642
|
col--;
|
|
15643
|
+
while (col > 0 && this.env.model.getters.isColHiddenByUser(sheetId, col)) col--;
|
|
15623
15644
|
offset.x = this.env.model.getters.getColSize(sheetId, col) - shiftAmount + offset.x;
|
|
15624
15645
|
} else offset.x -= shiftAmount;
|
|
15625
15646
|
break;
|
|
@@ -15627,6 +15648,7 @@ set(value) {
|
|
|
15627
15648
|
const rowSize = this.env.model.getters.getRowSize(sheetId, row);
|
|
15628
15649
|
if (offset.y + shiftAmount >= rowSize) {
|
|
15629
15650
|
row++;
|
|
15651
|
+
while (row <= maxAnchor.row && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row++;
|
|
15630
15652
|
offset.y = offset.y + shiftAmount - rowSize;
|
|
15631
15653
|
} else offset.y += shiftAmount;
|
|
15632
15654
|
break;
|
|
@@ -15634,9 +15656,24 @@ set(value) {
|
|
|
15634
15656
|
const colSize = this.env.model.getters.getColSize(sheetId, col);
|
|
15635
15657
|
if (offset.x + shiftAmount >= colSize) {
|
|
15636
15658
|
col++;
|
|
15659
|
+
while (col <= maxAnchor.col && this.env.model.getters.isColHiddenByUser(sheetId, col)) col++;
|
|
15637
15660
|
offset.x = offset.x + shiftAmount - colSize;
|
|
15638
15661
|
} else offset.x += shiftAmount;
|
|
15639
15662
|
}
|
|
15663
|
+
if (col < 0) {
|
|
15664
|
+
col = 0;
|
|
15665
|
+
offset.x = 0;
|
|
15666
|
+
} else if (col > maxAnchor.col || col === maxAnchor.col && offset.x > maxAnchor.offset.x) {
|
|
15667
|
+
col = maxAnchor.col;
|
|
15668
|
+
offset.x = maxAnchor.offset.x;
|
|
15669
|
+
}
|
|
15670
|
+
if (row < 0) {
|
|
15671
|
+
row = 0;
|
|
15672
|
+
offset.y = 0;
|
|
15673
|
+
} else if (row > maxAnchor.row || row === maxAnchor.row && offset.y > maxAnchor.offset.y) {
|
|
15674
|
+
row = maxAnchor.row;
|
|
15675
|
+
offset.y = maxAnchor.offset.y;
|
|
15676
|
+
}
|
|
15640
15677
|
return {
|
|
15641
15678
|
col,
|
|
15642
15679
|
row,
|
|
@@ -46022,7 +46059,13 @@ set(value) {
|
|
|
46022
46059
|
const cell = this.getters.getEvaluatedCell(position);
|
|
46023
46060
|
if (cell.link && !isFormula(content)) content = markdownLink(content, cell.link.url);
|
|
46024
46061
|
const currentFormat = this.getters.getCell(position)?.format;
|
|
46025
|
-
const
|
|
46062
|
+
const isCurrentFormatDate = currentFormat && isDateTimeFormat(currentFormat);
|
|
46063
|
+
const contentDateFormat = detectDateFormat(content, this.getters.getLocale());
|
|
46064
|
+
let afterFormat;
|
|
46065
|
+
if (currentFormat !== "@") {
|
|
46066
|
+
if (contentDateFormat && !isCurrentFormatDate) afterFormat = contentDateFormat;
|
|
46067
|
+
else if (isCurrentFormatDate && isNumber(content, this.getters.getLocale())) afterFormat = "";
|
|
46068
|
+
}
|
|
46026
46069
|
this.addHeadersForSpreadingFormula(content);
|
|
46027
46070
|
result = this.model.dispatch("UPDATE_CELL", {
|
|
46028
46071
|
...this.currentEditedCell,
|
|
@@ -67693,6 +67736,10 @@ set(value) {
|
|
|
67693
67736
|
}
|
|
67694
67737
|
function inverseCreateChart(cmd) {
|
|
67695
67738
|
return [{
|
|
67739
|
+
type: "DELETE_CHART",
|
|
67740
|
+
chartId: cmd.chartId,
|
|
67741
|
+
sheetId: cmd.sheetId
|
|
67742
|
+
}, {
|
|
67696
67743
|
type: "DELETE_FIGURE",
|
|
67697
67744
|
figureId: cmd.figureId,
|
|
67698
67745
|
sheetId: cmd.sheetId
|
|
@@ -87529,7 +87576,8 @@ set(value) {
|
|
|
87529
87576
|
FullScreenFigure,
|
|
87530
87577
|
NumberInput,
|
|
87531
87578
|
TopBar,
|
|
87532
|
-
Composer
|
|
87579
|
+
Composer,
|
|
87580
|
+
CarouselFigure
|
|
87533
87581
|
};
|
|
87534
87582
|
const hooks = {
|
|
87535
87583
|
useDragAndDropListItems,
|
|
@@ -87683,8 +87731,8 @@ exports.stores = stores;
|
|
|
87683
87731
|
exports.tokenColors = tokenColors;
|
|
87684
87732
|
exports.tokenize = tokenize;
|
|
87685
87733
|
|
|
87686
|
-
__info__.version = "19.4.
|
|
87687
|
-
__info__.date = "2026-
|
|
87688
|
-
__info__.hash = "
|
|
87734
|
+
__info__.version = "19.4.6";
|
|
87735
|
+
__info__.date = "2026-08-10T12:33:32.728Z";
|
|
87736
|
+
__info__.hash = "5c667fe";
|
|
87689
87737
|
|
|
87690
87738
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|