@odoo/o-spreadsheet 18.0.80 → 18.0.82
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.
|
@@ -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 2026-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.0.82
|
|
6
|
+
* @date 2026-09-10T05:35:40.438Z
|
|
7
|
+
* @hash d0329aa
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { Component, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, xml } from "@odoo/owl";
|
|
@@ -8763,6 +8763,7 @@ const chartShowValuesPlugin = {
|
|
|
8763
8763
|
case "doughnut":
|
|
8764
8764
|
drawPieChartValues(chart, options, ctx);
|
|
8765
8765
|
break;
|
|
8766
|
+
case "combo":
|
|
8766
8767
|
case "bar":
|
|
8767
8768
|
case "line":
|
|
8768
8769
|
options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarChartValues(chart, options, ctx);
|
|
@@ -8786,7 +8787,7 @@ function drawLineOrBarChartValues(chart, options, ctx) {
|
|
|
8786
8787
|
const point = dataset.data[i];
|
|
8787
8788
|
const xPosition = point.x;
|
|
8788
8789
|
let yPosition = 0;
|
|
8789
|
-
if (
|
|
8790
|
+
if (dataset.type === "line") yPosition = point.y - 10;
|
|
8790
8791
|
else yPosition = value < 0 ? point.y - point.height / 2 : point.y + point.height / 2;
|
|
8791
8792
|
if (!textsPositions[xPosition]) textsPositions[xPosition] = [];
|
|
8792
8793
|
for (const otherPosition of textsPositions[xPosition] || []) if (Math.abs(otherPosition - yPosition) < 13) yPosition = otherPosition - 13;
|
|
@@ -13928,7 +13929,7 @@ function createEmptyExcelWorkbookData() {
|
|
|
13928
13929
|
//#region src/helpers/ui/paste_interactive.ts
|
|
13929
13930
|
const PasteInteractiveContent = {
|
|
13930
13931
|
wrongPasteSelection: _t("This operation is not allowed with multiple selections."),
|
|
13931
|
-
willRemoveExistingMerge: _t("
|
|
13932
|
+
willRemoveExistingMerge: _t("Cannot perform this action on merged cells. Unmerge the cells and try again."),
|
|
13932
13933
|
wrongFigurePasteOption: _t("Cannot do a special paste of a figure."),
|
|
13933
13934
|
frozenPaneOverlap: _t("This operation is not allowed due to an overlapping frozen pane.")
|
|
13934
13935
|
};
|
|
@@ -25904,6 +25905,7 @@ function createComboChartRuntime(chart, getters) {
|
|
|
25904
25905
|
};
|
|
25905
25906
|
const fontColor = chartFontColor(chart.background);
|
|
25906
25907
|
const config = getDefaultChartJsRuntime(chart, labels, fontColor, localeFormat);
|
|
25908
|
+
config.type = "bar";
|
|
25907
25909
|
const legend = getChartJsLegend(fontColor);
|
|
25908
25910
|
if (chart.legendPosition === "none") legend.display = false;
|
|
25909
25911
|
else legend.position = chart.legendPosition;
|
|
@@ -31699,12 +31701,48 @@ var TopBarComponentRegistry = class extends Registry {
|
|
|
31699
31701
|
const topbarComponentRegistry = new TopBarComponentRegistry();
|
|
31700
31702
|
|
|
31701
31703
|
//#endregion
|
|
31702
|
-
//#region src/components/
|
|
31704
|
+
//#region src/components/icons/raw_svgs.ts
|
|
31705
|
+
/**
|
|
31706
|
+
* SVG markup used in `css` tagged templates as `data:image/svg+xml` URIs.
|
|
31707
|
+
*
|
|
31708
|
+
* Keep these values in a separate module so Rolldown references them instead
|
|
31709
|
+
* of inlining them into template literals. Inlining produces nested template
|
|
31710
|
+
* literals, which the downstream `rjsmin` minifier cannot parse correctly
|
|
31711
|
+
* because it relies on regular expressions.
|
|
31712
|
+
*
|
|
31713
|
+
* Do not inline these constants.
|
|
31714
|
+
*/
|
|
31703
31715
|
const CHECK_SVG = `
|
|
31704
31716
|
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'>
|
|
31705
31717
|
<path fill='none' stroke='#FFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/>
|
|
31706
31718
|
</svg>
|
|
31707
31719
|
`;
|
|
31720
|
+
const CIRCLE_SVG = `
|
|
31721
|
+
<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
|
|
31722
|
+
<circle r="2" fill="#FFF"/>
|
|
31723
|
+
</svg>
|
|
31724
|
+
`;
|
|
31725
|
+
const FX_SVG = `
|
|
31726
|
+
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
|
|
31727
|
+
<path d='m28 34-4 5v2h10l-6 40c-4 22-6 28-7 30-2 2-3 3-5 3-3 0-7-2-9-4H4c-2 2-4 4-4 7s4 6 8 6 9-2 15-8c8-7 13-17 18-39l7-35 13-1 3-6H49c4-23 7-27 11-27 2 0 5 2 8 6h4c1-1 4-4 4-7 0-2-3-6-9-6-5 0-13 4-20 10-6 7-9 14-11 24h-8zm41 16c4-5 7-7 8-7s2 1 5 9l3 12c-7 11-12 17-16 17l-3-1-2-1c-3 0-6 3-6 7s3 7 7 7c6 0 12-6 22-23l3 10c3 9 6 13 10 13 5 0 11-4 18-15l-3-4c-4 6-7 8-8 8-2 0-4-3-6-10l-5-15 8-10 6-4 3 1 3 2c2 0 6-3 6-7s-2-7-6-7c-6 0-11 5-21 20l-2-6c-3-9-5-14-9-14-5 0-12 6-18 15l3 3z' fill='#BDBDBD'/>
|
|
31728
|
+
</svg>
|
|
31729
|
+
`;
|
|
31730
|
+
const TRANSPARENT_BACKGROUND_SVG = `
|
|
31731
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
|
|
31732
|
+
<path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
|
|
31733
|
+
</svg>
|
|
31734
|
+
`;
|
|
31735
|
+
const CURSOR_SVG = `
|
|
31736
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="16"><path d="M6.5.4c1.3-.8 2.9-.1 3.8 1.4l2.9 5.1c.2.4.9 1.6-.4 2.3l-1.6.9 1.8 3.1c.2.4.1 1-.2 1.2l-1.6 1c-.3.1-.9 0-1.1-.4l-1.8-3.1-1.6 1c-.6.4-1.7 0-2.2-.8L0 4.3"/><path fill="#fff" d="M9.1 2a1.4 1.1 60 0 0-1.7-.6L5.5 2.5l.9 1.6-1 .6-.9-1.6-.6.4 1.8 3.1-1.3.7-1.8-3.1-1 .6 3.8 6.6 6.8-3.98M3.9 8.8 10.82 5l.795 1.4-6.81 3.96"/></svg>
|
|
31737
|
+
`;
|
|
31738
|
+
const CARET_DOWN_SVG = `
|
|
31739
|
+
<svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
|
|
31740
|
+
<polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
|
|
31741
|
+
</svg>
|
|
31742
|
+
`;
|
|
31743
|
+
|
|
31744
|
+
//#endregion
|
|
31745
|
+
//#region src/components/side_panel/components/checkbox/checkbox.ts
|
|
31708
31746
|
const CHECKBOX_WIDTH = 14;
|
|
31709
31747
|
css`
|
|
31710
31748
|
label.o-checkbox {
|
|
@@ -32564,11 +32602,7 @@ css`
|
|
|
32564
32602
|
border-radius: 8px;
|
|
32565
32603
|
|
|
32566
32604
|
&:checked {
|
|
32567
|
-
background: url("data:image/svg+xml,${encodeURIComponent(
|
|
32568
|
-
<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
|
|
32569
|
-
<circle r="2" fill="#FFF"/>
|
|
32570
|
-
</svg>
|
|
32571
|
-
`)}");
|
|
32605
|
+
background: url("data:image/svg+xml,${encodeURIComponent(CIRCLE_SVG)}");
|
|
32572
32606
|
background-color: ${ACTION_COLOR};
|
|
32573
32607
|
border-color: ${ACTION_COLOR};
|
|
32574
32608
|
}
|
|
@@ -33168,11 +33202,7 @@ css`
|
|
|
33168
33202
|
cursor: pointer;
|
|
33169
33203
|
border: 1px solid ${GRAY_300};
|
|
33170
33204
|
background-position: 1px 1px;
|
|
33171
|
-
background-image: url("data:image/svg+xml,${encodeURIComponent(
|
|
33172
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
|
|
33173
|
-
<path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
|
|
33174
|
-
</svg>
|
|
33175
|
-
`)}");
|
|
33205
|
+
background-image: url("data:image/svg+xml,${encodeURIComponent(TRANSPARENT_BACKGROUND_SVG)}");
|
|
33176
33206
|
}
|
|
33177
33207
|
`;
|
|
33178
33208
|
var RoundColorPicker = class extends Component {
|
|
@@ -37647,7 +37677,7 @@ var FindAndReplacePanel = class extends Component {
|
|
|
37647
37677
|
}
|
|
37648
37678
|
get specificRangeMatchesCount() {
|
|
37649
37679
|
const range = this.searchOptions.specificRange;
|
|
37650
|
-
if (!range) return "";
|
|
37680
|
+
if (!range || range.invalidSheetName || range.invalidXc) return "";
|
|
37651
37681
|
const { sheetId, zone } = range;
|
|
37652
37682
|
return _t("%(matches)s matches in range %(range)s of %(sheetName)s", {
|
|
37653
37683
|
matches: this.store.specificRangeMatchesCount,
|
|
@@ -40042,7 +40072,13 @@ var PivotSpreadsheetSidePanel = class extends Component {
|
|
|
40042
40072
|
}
|
|
40043
40073
|
onSelectionChanged(ranges) {
|
|
40044
40074
|
this.state.rangeHasChanged = true;
|
|
40045
|
-
|
|
40075
|
+
if (ranges.length === 0) {
|
|
40076
|
+
this.state.range = void 0;
|
|
40077
|
+
return;
|
|
40078
|
+
}
|
|
40079
|
+
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
40080
|
+
const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
|
|
40081
|
+
this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
|
|
40046
40082
|
}
|
|
40047
40083
|
onSelectionConfirmed() {
|
|
40048
40084
|
if (this.state.range) {
|
|
@@ -43258,9 +43294,7 @@ var PaintFormatStore = class extends SpreadsheetStore {
|
|
|
43258
43294
|
//#region src/components/grid_overlay/grid_overlay.ts
|
|
43259
43295
|
css`
|
|
43260
43296
|
.o-paint-format-cursor {
|
|
43261
|
-
cursor: url("data:image/svg+xml,${encodeURIComponent(
|
|
43262
|
-
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="16"><path d="M6.5.4c1.3-.8 2.9-.1 3.8 1.4l2.9 5.1c.2.4.9 1.6-.4 2.3l-1.6.9 1.8 3.1c.2.4.1 1-.2 1.2l-1.6 1c-.3.1-.9 0-1.1-.4l-1.8-3.1-1.6 1c-.6.4-1.7 0-2.2-.8L0 4.3"/><path fill="#fff" d="M9.1 2a1.4 1.1 60 0 0-1.7-.6L5.5 2.5l.9 1.6-1 .6-.9-1.6-.6.4 1.8 3.1-1.3.7-1.8-3.1-1 .6 3.8 6.6 6.8-3.98M3.9 8.8 10.82 5l.795 1.4-6.81 3.96"/></svg>
|
|
43263
|
-
`)}"), auto;
|
|
43297
|
+
cursor: url("data:image/svg+xml,${encodeURIComponent(CURSOR_SVG)}"), auto;
|
|
43264
43298
|
}
|
|
43265
43299
|
`;
|
|
43266
43300
|
function useCellHovered(env, gridRef, callback) {
|
|
@@ -51564,6 +51598,16 @@ var FormulaDependencyGraph = class {
|
|
|
51564
51598
|
getCellsDependingOn(ranges, ignore) {
|
|
51565
51599
|
const visited = this.createEmptyPositionSet();
|
|
51566
51600
|
const queue = Array.from(ranges).reverse();
|
|
51601
|
+
const initialPositionsToRemove = this.createEmptyPositionSet();
|
|
51602
|
+
for (const range of ranges) {
|
|
51603
|
+
const zone = range.zone;
|
|
51604
|
+
const sheetId = range.sheetId;
|
|
51605
|
+
for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) initialPositionsToRemove.add({
|
|
51606
|
+
sheetId,
|
|
51607
|
+
col,
|
|
51608
|
+
row
|
|
51609
|
+
});
|
|
51610
|
+
}
|
|
51567
51611
|
while (queue.length > 0) {
|
|
51568
51612
|
const range = queue.pop();
|
|
51569
51613
|
const zone = range.zone;
|
|
@@ -51575,9 +51619,13 @@ var FormulaDependencyGraph = class {
|
|
|
51575
51619
|
});
|
|
51576
51620
|
const impactedPositions = this.rTree.search(range).map((dep) => dep.data);
|
|
51577
51621
|
const nextInQueue = {};
|
|
51578
|
-
for (const position of impactedPositions)
|
|
51579
|
-
if (
|
|
51580
|
-
|
|
51622
|
+
for (const position of impactedPositions) {
|
|
51623
|
+
if (ignore.has(position)) continue;
|
|
51624
|
+
initialPositionsToRemove.delete(position);
|
|
51625
|
+
if (!visited.has(position)) {
|
|
51626
|
+
if (!nextInQueue[position.sheetId]) nextInQueue[position.sheetId] = [];
|
|
51627
|
+
nextInQueue[position.sheetId].push(positionToZone(position));
|
|
51628
|
+
}
|
|
51581
51629
|
}
|
|
51582
51630
|
for (const sheetId in nextInQueue) {
|
|
51583
51631
|
const zones = recomputeZones(nextInQueue[sheetId], []);
|
|
@@ -51587,15 +51635,7 @@ var FormulaDependencyGraph = class {
|
|
|
51587
51635
|
})));
|
|
51588
51636
|
}
|
|
51589
51637
|
}
|
|
51590
|
-
for (const
|
|
51591
|
-
const zone = range.zone;
|
|
51592
|
-
const sheetId = range.sheetId;
|
|
51593
|
-
for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) visited.delete({
|
|
51594
|
-
sheetId,
|
|
51595
|
-
col,
|
|
51596
|
-
row
|
|
51597
|
-
});
|
|
51598
|
-
}
|
|
51638
|
+
for (const position of initialPositionsToRemove) visited.delete(position);
|
|
51599
51639
|
return visited;
|
|
51600
51640
|
}
|
|
51601
51641
|
};
|
|
@@ -58693,8 +58733,8 @@ var InternalViewport = class {
|
|
|
58693
58733
|
const { end: lastRowEnd, size: lastRowSize } = this.getters.getRowDimensions(this.sheetId, lastRow);
|
|
58694
58734
|
const leftColIndex = this.searchHeaderIndex("COL", lastColEnd - this.viewportWidth, 0);
|
|
58695
58735
|
const leftColSize = this.getters.getColSize(this.sheetId, leftColIndex);
|
|
58696
|
-
const
|
|
58697
|
-
const topRowSize = this.getters.getRowSize(this.sheetId,
|
|
58736
|
+
const topRowIndex = this.searchHeaderIndex("ROW", lastRowEnd - this.viewportHeight, 0);
|
|
58737
|
+
const topRowSize = this.getters.getRowSize(this.sheetId, topRowIndex);
|
|
58698
58738
|
let width = lastColEnd - this.offsetCorrectionX;
|
|
58699
58739
|
if (this.canScrollHorizontally) {
|
|
58700
58740
|
width += Math.max(96, Math.min(leftColSize, this.viewportWidth - lastColSize));
|
|
@@ -58872,7 +58912,11 @@ var InternalViewport = class {
|
|
|
58872
58912
|
this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
|
|
58873
58913
|
this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
|
|
58874
58914
|
if (!this.viewportWidth) return;
|
|
58875
|
-
if (this.left === -1)
|
|
58915
|
+
if (this.left === -1) {
|
|
58916
|
+
const colsHeight = this.getters.getColRowOffset("COL", this.boundaries.left, this.boundaries.right);
|
|
58917
|
+
if (0 < colsHeight && colsHeight <= this.offsetScrollbarX) this.left = this.boundaries.right;
|
|
58918
|
+
else this.left = this.boundaries.left;
|
|
58919
|
+
}
|
|
58876
58920
|
if (this.right === -1) this.right = this.boundaries.right;
|
|
58877
58921
|
this.offsetX = this.getters.getColDimensions(sheetId, this.left).start - this.getters.getColDimensions(sheetId, this.boundaries.left).start;
|
|
58878
58922
|
}
|
|
@@ -58883,7 +58927,11 @@ var InternalViewport = class {
|
|
|
58883
58927
|
this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
|
|
58884
58928
|
this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
|
|
58885
58929
|
if (!this.viewportHeight) return;
|
|
58886
|
-
if (this.top === -1)
|
|
58930
|
+
if (this.top === -1) {
|
|
58931
|
+
const rowsHeight = this.getters.getColRowOffset("ROW", this.boundaries.top, this.boundaries.bottom);
|
|
58932
|
+
if (0 < rowsHeight && rowsHeight <= this.offsetScrollbarY) this.top = this.boundaries.bottom;
|
|
58933
|
+
else this.top = this.boundaries.top;
|
|
58934
|
+
}
|
|
58887
58935
|
if (this.bottom === -1) this.bottom = this.boundaries.bottom;
|
|
58888
58936
|
this.offsetY = this.getters.getRowDimensions(sheetId, this.top).start - this.getters.getRowDimensions(sheetId, this.boundaries.top).start;
|
|
58889
58937
|
}
|
|
@@ -61509,11 +61557,7 @@ css`
|
|
|
61509
61557
|
/* In readonly we always show the fx icon if the composer is empty, not matter the focus */
|
|
61510
61558
|
.o-composer:empty:not(:focus):not(.active)::before,
|
|
61511
61559
|
&.o-topbar-composer-readonly .o-composer:empty::before {
|
|
61512
|
-
content: url("data:image/svg+xml,${encodeURIComponent(
|
|
61513
|
-
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
|
|
61514
|
-
<path d='m28 34-4 5v2h10l-6 40c-4 22-6 28-7 30-2 2-3 3-5 3-3 0-7-2-9-4H4c-2 2-4 4-4 7s4 6 8 6 9-2 15-8c8-7 13-17 18-39l7-35 13-1 3-6H49c4-23 7-27 11-27 2 0 5 2 8 6h4c1-1 4-4 4-7 0-2-3-6-9-6-5 0-13 4-20 10-6 7-9 14-11 24h-8zm41 16c4-5 7-7 8-7s2 1 5 9l3 12c-7 11-12 17-16 17l-3-1-2-1c-3 0-6 3-6 7s3 7 7 7c6 0 12-6 22-23l3 10c3 9 6 13 10 13 5 0 11-4 18-15l-3-4c-4 6-7 8-8 8-2 0-4-3-6-10l-5-15 8-10 6-4 3 1 3 2c2 0 6-3 6-7s-2-7-6-7c-6 0-11 5-21 20l-2-6c-3-9-5-14-9-14-5 0-12 6-18 15l3 3z' fill='#BDBDBD'/>
|
|
61515
|
-
</svg>
|
|
61516
|
-
`)}");
|
|
61560
|
+
content: url("data:image/svg+xml,${encodeURIComponent(FX_SVG)}");
|
|
61517
61561
|
position: relative;
|
|
61518
61562
|
top: 20%;
|
|
61519
61563
|
}
|
|
@@ -62105,11 +62149,7 @@ css`
|
|
|
62105
62149
|
appearance: none;
|
|
62106
62150
|
-webkit-appearance: none;
|
|
62107
62151
|
-moz-appearance: none;
|
|
62108
|
-
background: transparent url("data:image/svg+xml,${encodeURIComponent(
|
|
62109
|
-
<svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
|
|
62110
|
-
<polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
|
|
62111
|
-
</svg>
|
|
62112
|
-
`)}")
|
|
62152
|
+
background: transparent url("data:image/svg+xml,${encodeURIComponent(CARET_DOWN_SVG)}")
|
|
62113
62153
|
no-repeat right center;
|
|
62114
62154
|
text-overflow: ellipsis;
|
|
62115
62155
|
|
|
@@ -66412,6 +66452,6 @@ const constants = {
|
|
|
66412
66452
|
//#endregion
|
|
66413
66453
|
export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
|
|
66414
66454
|
|
|
66415
|
-
__info__.version = "18.0.
|
|
66416
|
-
__info__.date = "2026-
|
|
66417
|
-
__info__.hash = "
|
|
66455
|
+
__info__.version = "18.0.82";
|
|
66456
|
+
__info__.date = "2026-09-10T05:35:40.438Z";
|
|
66457
|
+
__info__.hash = "d0329aa";
|
|
@@ -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 2026-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.0.82
|
|
6
|
+
* @date 2026-09-10T05:35:40.438Z
|
|
7
|
+
* @hash d0329aa
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function(exports, _odoo_owl) {
|
|
@@ -8765,6 +8765,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
8765
8765
|
case "doughnut":
|
|
8766
8766
|
drawPieChartValues(chart, options, ctx);
|
|
8767
8767
|
break;
|
|
8768
|
+
case "combo":
|
|
8768
8769
|
case "bar":
|
|
8769
8770
|
case "line":
|
|
8770
8771
|
options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarChartValues(chart, options, ctx);
|
|
@@ -8788,7 +8789,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
8788
8789
|
const point = dataset.data[i];
|
|
8789
8790
|
const xPosition = point.x;
|
|
8790
8791
|
let yPosition = 0;
|
|
8791
|
-
if (
|
|
8792
|
+
if (dataset.type === "line") yPosition = point.y - 10;
|
|
8792
8793
|
else yPosition = value < 0 ? point.y - point.height / 2 : point.y + point.height / 2;
|
|
8793
8794
|
if (!textsPositions[xPosition]) textsPositions[xPosition] = [];
|
|
8794
8795
|
for (const otherPosition of textsPositions[xPosition] || []) if (Math.abs(otherPosition - yPosition) < 13) yPosition = otherPosition - 13;
|
|
@@ -13930,7 +13931,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
13930
13931
|
//#region src/helpers/ui/paste_interactive.ts
|
|
13931
13932
|
const PasteInteractiveContent = {
|
|
13932
13933
|
wrongPasteSelection: _t("This operation is not allowed with multiple selections."),
|
|
13933
|
-
willRemoveExistingMerge: _t("
|
|
13934
|
+
willRemoveExistingMerge: _t("Cannot perform this action on merged cells. Unmerge the cells and try again."),
|
|
13934
13935
|
wrongFigurePasteOption: _t("Cannot do a special paste of a figure."),
|
|
13935
13936
|
frozenPaneOverlap: _t("This operation is not allowed due to an overlapping frozen pane.")
|
|
13936
13937
|
};
|
|
@@ -25906,6 +25907,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
25906
25907
|
};
|
|
25907
25908
|
const fontColor = chartFontColor(chart.background);
|
|
25908
25909
|
const config = getDefaultChartJsRuntime(chart, labels, fontColor, localeFormat);
|
|
25910
|
+
config.type = "bar";
|
|
25909
25911
|
const legend = getChartJsLegend(fontColor);
|
|
25910
25912
|
if (chart.legendPosition === "none") legend.display = false;
|
|
25911
25913
|
else legend.position = chart.legendPosition;
|
|
@@ -31701,12 +31703,48 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
31701
31703
|
const topbarComponentRegistry = new TopBarComponentRegistry();
|
|
31702
31704
|
|
|
31703
31705
|
//#endregion
|
|
31704
|
-
//#region src/components/
|
|
31706
|
+
//#region src/components/icons/raw_svgs.ts
|
|
31707
|
+
/**
|
|
31708
|
+
* SVG markup used in `css` tagged templates as `data:image/svg+xml` URIs.
|
|
31709
|
+
*
|
|
31710
|
+
* Keep these values in a separate module so Rolldown references them instead
|
|
31711
|
+
* of inlining them into template literals. Inlining produces nested template
|
|
31712
|
+
* literals, which the downstream `rjsmin` minifier cannot parse correctly
|
|
31713
|
+
* because it relies on regular expressions.
|
|
31714
|
+
*
|
|
31715
|
+
* Do not inline these constants.
|
|
31716
|
+
*/
|
|
31705
31717
|
const CHECK_SVG = `
|
|
31706
31718
|
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'>
|
|
31707
31719
|
<path fill='none' stroke='#FFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/>
|
|
31708
31720
|
</svg>
|
|
31709
31721
|
`;
|
|
31722
|
+
const CIRCLE_SVG = `
|
|
31723
|
+
<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
|
|
31724
|
+
<circle r="2" fill="#FFF"/>
|
|
31725
|
+
</svg>
|
|
31726
|
+
`;
|
|
31727
|
+
const FX_SVG = `
|
|
31728
|
+
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
|
|
31729
|
+
<path d='m28 34-4 5v2h10l-6 40c-4 22-6 28-7 30-2 2-3 3-5 3-3 0-7-2-9-4H4c-2 2-4 4-4 7s4 6 8 6 9-2 15-8c8-7 13-17 18-39l7-35 13-1 3-6H49c4-23 7-27 11-27 2 0 5 2 8 6h4c1-1 4-4 4-7 0-2-3-6-9-6-5 0-13 4-20 10-6 7-9 14-11 24h-8zm41 16c4-5 7-7 8-7s2 1 5 9l3 12c-7 11-12 17-16 17l-3-1-2-1c-3 0-6 3-6 7s3 7 7 7c6 0 12-6 22-23l3 10c3 9 6 13 10 13 5 0 11-4 18-15l-3-4c-4 6-7 8-8 8-2 0-4-3-6-10l-5-15 8-10 6-4 3 1 3 2c2 0 6-3 6-7s-2-7-6-7c-6 0-11 5-21 20l-2-6c-3-9-5-14-9-14-5 0-12 6-18 15l3 3z' fill='#BDBDBD'/>
|
|
31730
|
+
</svg>
|
|
31731
|
+
`;
|
|
31732
|
+
const TRANSPARENT_BACKGROUND_SVG = `
|
|
31733
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
|
|
31734
|
+
<path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
|
|
31735
|
+
</svg>
|
|
31736
|
+
`;
|
|
31737
|
+
const CURSOR_SVG = `
|
|
31738
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="16"><path d="M6.5.4c1.3-.8 2.9-.1 3.8 1.4l2.9 5.1c.2.4.9 1.6-.4 2.3l-1.6.9 1.8 3.1c.2.4.1 1-.2 1.2l-1.6 1c-.3.1-.9 0-1.1-.4l-1.8-3.1-1.6 1c-.6.4-1.7 0-2.2-.8L0 4.3"/><path fill="#fff" d="M9.1 2a1.4 1.1 60 0 0-1.7-.6L5.5 2.5l.9 1.6-1 .6-.9-1.6-.6.4 1.8 3.1-1.3.7-1.8-3.1-1 .6 3.8 6.6 6.8-3.98M3.9 8.8 10.82 5l.795 1.4-6.81 3.96"/></svg>
|
|
31739
|
+
`;
|
|
31740
|
+
const CARET_DOWN_SVG = `
|
|
31741
|
+
<svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
|
|
31742
|
+
<polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
|
|
31743
|
+
</svg>
|
|
31744
|
+
`;
|
|
31745
|
+
|
|
31746
|
+
//#endregion
|
|
31747
|
+
//#region src/components/side_panel/components/checkbox/checkbox.ts
|
|
31710
31748
|
const CHECKBOX_WIDTH = 14;
|
|
31711
31749
|
css`
|
|
31712
31750
|
label.o-checkbox {
|
|
@@ -32566,11 +32604,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
32566
32604
|
border-radius: 8px;
|
|
32567
32605
|
|
|
32568
32606
|
&:checked {
|
|
32569
|
-
background: url("data:image/svg+xml,${encodeURIComponent(
|
|
32570
|
-
<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
|
|
32571
|
-
<circle r="2" fill="#FFF"/>
|
|
32572
|
-
</svg>
|
|
32573
|
-
`)}");
|
|
32607
|
+
background: url("data:image/svg+xml,${encodeURIComponent(CIRCLE_SVG)}");
|
|
32574
32608
|
background-color: ${ACTION_COLOR};
|
|
32575
32609
|
border-color: ${ACTION_COLOR};
|
|
32576
32610
|
}
|
|
@@ -33170,11 +33204,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
33170
33204
|
cursor: pointer;
|
|
33171
33205
|
border: 1px solid ${GRAY_300};
|
|
33172
33206
|
background-position: 1px 1px;
|
|
33173
|
-
background-image: url("data:image/svg+xml,${encodeURIComponent(
|
|
33174
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
|
|
33175
|
-
<path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
|
|
33176
|
-
</svg>
|
|
33177
|
-
`)}");
|
|
33207
|
+
background-image: url("data:image/svg+xml,${encodeURIComponent(TRANSPARENT_BACKGROUND_SVG)}");
|
|
33178
33208
|
}
|
|
33179
33209
|
`;
|
|
33180
33210
|
var RoundColorPicker = class extends _odoo_owl.Component {
|
|
@@ -37649,7 +37679,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
37649
37679
|
}
|
|
37650
37680
|
get specificRangeMatchesCount() {
|
|
37651
37681
|
const range = this.searchOptions.specificRange;
|
|
37652
|
-
if (!range) return "";
|
|
37682
|
+
if (!range || range.invalidSheetName || range.invalidXc) return "";
|
|
37653
37683
|
const { sheetId, zone } = range;
|
|
37654
37684
|
return _t("%(matches)s matches in range %(range)s of %(sheetName)s", {
|
|
37655
37685
|
matches: this.store.specificRangeMatchesCount,
|
|
@@ -40044,7 +40074,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
40044
40074
|
}
|
|
40045
40075
|
onSelectionChanged(ranges) {
|
|
40046
40076
|
this.state.rangeHasChanged = true;
|
|
40047
|
-
|
|
40077
|
+
if (ranges.length === 0) {
|
|
40078
|
+
this.state.range = void 0;
|
|
40079
|
+
return;
|
|
40080
|
+
}
|
|
40081
|
+
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
40082
|
+
const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
|
|
40083
|
+
this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
|
|
40048
40084
|
}
|
|
40049
40085
|
onSelectionConfirmed() {
|
|
40050
40086
|
if (this.state.range) {
|
|
@@ -43260,9 +43296,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
43260
43296
|
//#region src/components/grid_overlay/grid_overlay.ts
|
|
43261
43297
|
css`
|
|
43262
43298
|
.o-paint-format-cursor {
|
|
43263
|
-
cursor: url("data:image/svg+xml,${encodeURIComponent(
|
|
43264
|
-
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="16"><path d="M6.5.4c1.3-.8 2.9-.1 3.8 1.4l2.9 5.1c.2.4.9 1.6-.4 2.3l-1.6.9 1.8 3.1c.2.4.1 1-.2 1.2l-1.6 1c-.3.1-.9 0-1.1-.4l-1.8-3.1-1.6 1c-.6.4-1.7 0-2.2-.8L0 4.3"/><path fill="#fff" d="M9.1 2a1.4 1.1 60 0 0-1.7-.6L5.5 2.5l.9 1.6-1 .6-.9-1.6-.6.4 1.8 3.1-1.3.7-1.8-3.1-1 .6 3.8 6.6 6.8-3.98M3.9 8.8 10.82 5l.795 1.4-6.81 3.96"/></svg>
|
|
43265
|
-
`)}"), auto;
|
|
43299
|
+
cursor: url("data:image/svg+xml,${encodeURIComponent(CURSOR_SVG)}"), auto;
|
|
43266
43300
|
}
|
|
43267
43301
|
`;
|
|
43268
43302
|
function useCellHovered(env, gridRef, callback) {
|
|
@@ -51566,6 +51600,16 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
51566
51600
|
getCellsDependingOn(ranges, ignore) {
|
|
51567
51601
|
const visited = this.createEmptyPositionSet();
|
|
51568
51602
|
const queue = Array.from(ranges).reverse();
|
|
51603
|
+
const initialPositionsToRemove = this.createEmptyPositionSet();
|
|
51604
|
+
for (const range of ranges) {
|
|
51605
|
+
const zone = range.zone;
|
|
51606
|
+
const sheetId = range.sheetId;
|
|
51607
|
+
for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) initialPositionsToRemove.add({
|
|
51608
|
+
sheetId,
|
|
51609
|
+
col,
|
|
51610
|
+
row
|
|
51611
|
+
});
|
|
51612
|
+
}
|
|
51569
51613
|
while (queue.length > 0) {
|
|
51570
51614
|
const range = queue.pop();
|
|
51571
51615
|
const zone = range.zone;
|
|
@@ -51577,9 +51621,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
51577
51621
|
});
|
|
51578
51622
|
const impactedPositions = this.rTree.search(range).map((dep) => dep.data);
|
|
51579
51623
|
const nextInQueue = {};
|
|
51580
|
-
for (const position of impactedPositions)
|
|
51581
|
-
if (
|
|
51582
|
-
|
|
51624
|
+
for (const position of impactedPositions) {
|
|
51625
|
+
if (ignore.has(position)) continue;
|
|
51626
|
+
initialPositionsToRemove.delete(position);
|
|
51627
|
+
if (!visited.has(position)) {
|
|
51628
|
+
if (!nextInQueue[position.sheetId]) nextInQueue[position.sheetId] = [];
|
|
51629
|
+
nextInQueue[position.sheetId].push(positionToZone(position));
|
|
51630
|
+
}
|
|
51583
51631
|
}
|
|
51584
51632
|
for (const sheetId in nextInQueue) {
|
|
51585
51633
|
const zones = recomputeZones(nextInQueue[sheetId], []);
|
|
@@ -51589,15 +51637,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
51589
51637
|
})));
|
|
51590
51638
|
}
|
|
51591
51639
|
}
|
|
51592
|
-
for (const
|
|
51593
|
-
const zone = range.zone;
|
|
51594
|
-
const sheetId = range.sheetId;
|
|
51595
|
-
for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) visited.delete({
|
|
51596
|
-
sheetId,
|
|
51597
|
-
col,
|
|
51598
|
-
row
|
|
51599
|
-
});
|
|
51600
|
-
}
|
|
51640
|
+
for (const position of initialPositionsToRemove) visited.delete(position);
|
|
51601
51641
|
return visited;
|
|
51602
51642
|
}
|
|
51603
51643
|
};
|
|
@@ -58695,8 +58735,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
58695
58735
|
const { end: lastRowEnd, size: lastRowSize } = this.getters.getRowDimensions(this.sheetId, lastRow);
|
|
58696
58736
|
const leftColIndex = this.searchHeaderIndex("COL", lastColEnd - this.viewportWidth, 0);
|
|
58697
58737
|
const leftColSize = this.getters.getColSize(this.sheetId, leftColIndex);
|
|
58698
|
-
const
|
|
58699
|
-
const topRowSize = this.getters.getRowSize(this.sheetId,
|
|
58738
|
+
const topRowIndex = this.searchHeaderIndex("ROW", lastRowEnd - this.viewportHeight, 0);
|
|
58739
|
+
const topRowSize = this.getters.getRowSize(this.sheetId, topRowIndex);
|
|
58700
58740
|
let width = lastColEnd - this.offsetCorrectionX;
|
|
58701
58741
|
if (this.canScrollHorizontally) {
|
|
58702
58742
|
width += Math.max(96, Math.min(leftColSize, this.viewportWidth - lastColSize));
|
|
@@ -58874,7 +58914,11 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
58874
58914
|
this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
|
|
58875
58915
|
this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
|
|
58876
58916
|
if (!this.viewportWidth) return;
|
|
58877
|
-
if (this.left === -1)
|
|
58917
|
+
if (this.left === -1) {
|
|
58918
|
+
const colsHeight = this.getters.getColRowOffset("COL", this.boundaries.left, this.boundaries.right);
|
|
58919
|
+
if (0 < colsHeight && colsHeight <= this.offsetScrollbarX) this.left = this.boundaries.right;
|
|
58920
|
+
else this.left = this.boundaries.left;
|
|
58921
|
+
}
|
|
58878
58922
|
if (this.right === -1) this.right = this.boundaries.right;
|
|
58879
58923
|
this.offsetX = this.getters.getColDimensions(sheetId, this.left).start - this.getters.getColDimensions(sheetId, this.boundaries.left).start;
|
|
58880
58924
|
}
|
|
@@ -58885,7 +58929,11 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
58885
58929
|
this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
|
|
58886
58930
|
this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
|
|
58887
58931
|
if (!this.viewportHeight) return;
|
|
58888
|
-
if (this.top === -1)
|
|
58932
|
+
if (this.top === -1) {
|
|
58933
|
+
const rowsHeight = this.getters.getColRowOffset("ROW", this.boundaries.top, this.boundaries.bottom);
|
|
58934
|
+
if (0 < rowsHeight && rowsHeight <= this.offsetScrollbarY) this.top = this.boundaries.bottom;
|
|
58935
|
+
else this.top = this.boundaries.top;
|
|
58936
|
+
}
|
|
58889
58937
|
if (this.bottom === -1) this.bottom = this.boundaries.bottom;
|
|
58890
58938
|
this.offsetY = this.getters.getRowDimensions(sheetId, this.top).start - this.getters.getRowDimensions(sheetId, this.boundaries.top).start;
|
|
58891
58939
|
}
|
|
@@ -61511,11 +61559,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
61511
61559
|
/* In readonly we always show the fx icon if the composer is empty, not matter the focus */
|
|
61512
61560
|
.o-composer:empty:not(:focus):not(.active)::before,
|
|
61513
61561
|
&.o-topbar-composer-readonly .o-composer:empty::before {
|
|
61514
|
-
content: url("data:image/svg+xml,${encodeURIComponent(
|
|
61515
|
-
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
|
|
61516
|
-
<path d='m28 34-4 5v2h10l-6 40c-4 22-6 28-7 30-2 2-3 3-5 3-3 0-7-2-9-4H4c-2 2-4 4-4 7s4 6 8 6 9-2 15-8c8-7 13-17 18-39l7-35 13-1 3-6H49c4-23 7-27 11-27 2 0 5 2 8 6h4c1-1 4-4 4-7 0-2-3-6-9-6-5 0-13 4-20 10-6 7-9 14-11 24h-8zm41 16c4-5 7-7 8-7s2 1 5 9l3 12c-7 11-12 17-16 17l-3-1-2-1c-3 0-6 3-6 7s3 7 7 7c6 0 12-6 22-23l3 10c3 9 6 13 10 13 5 0 11-4 18-15l-3-4c-4 6-7 8-8 8-2 0-4-3-6-10l-5-15 8-10 6-4 3 1 3 2c2 0 6-3 6-7s-2-7-6-7c-6 0-11 5-21 20l-2-6c-3-9-5-14-9-14-5 0-12 6-18 15l3 3z' fill='#BDBDBD'/>
|
|
61517
|
-
</svg>
|
|
61518
|
-
`)}");
|
|
61562
|
+
content: url("data:image/svg+xml,${encodeURIComponent(FX_SVG)}");
|
|
61519
61563
|
position: relative;
|
|
61520
61564
|
top: 20%;
|
|
61521
61565
|
}
|
|
@@ -62107,11 +62151,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
62107
62151
|
appearance: none;
|
|
62108
62152
|
-webkit-appearance: none;
|
|
62109
62153
|
-moz-appearance: none;
|
|
62110
|
-
background: transparent url("data:image/svg+xml,${encodeURIComponent(
|
|
62111
|
-
<svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
|
|
62112
|
-
<polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
|
|
62113
|
-
</svg>
|
|
62114
|
-
`)}")
|
|
62154
|
+
background: transparent url("data:image/svg+xml,${encodeURIComponent(CARET_DOWN_SVG)}")
|
|
62115
62155
|
no-repeat right center;
|
|
62116
62156
|
text-overflow: ellipsis;
|
|
62117
62157
|
|
|
@@ -66458,8 +66498,8 @@ exports.stores = stores;
|
|
|
66458
66498
|
exports.tokenColors = tokenColors;
|
|
66459
66499
|
exports.tokenize = tokenize;
|
|
66460
66500
|
|
|
66461
|
-
__info__.version = "18.0.
|
|
66462
|
-
__info__.date = "2026-
|
|
66463
|
-
__info__.hash = "
|
|
66501
|
+
__info__.version = "18.0.82";
|
|
66502
|
+
__info__.date = "2026-09-10T05:35:40.438Z";
|
|
66503
|
+
__info__.hash = "d0329aa";
|
|
66464
66504
|
|
|
66465
66505
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|