@odoo/o-spreadsheet 18.3.61 → 18.3.62
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.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 18.3.
|
|
6
|
-
* @date 2026-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.3.62
|
|
6
|
+
* @date 2026-09-04T07:18:12.683Z
|
|
7
|
+
* @hash aaaa064
|
|
8
8
|
*/
|
|
9
9
|
/* Originates from src/components/top_bar/top_bar.scss */
|
|
10
10
|
@media (max-width: 900px) {
|
|
@@ -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.3.
|
|
6
|
-
* @date 2026-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.3.62
|
|
6
|
+
* @date 2026-09-04T07:18:11.182Z
|
|
7
|
+
* @hash aaaa064
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { App, Component, blockDom, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, xml } from "@odoo/owl";
|
|
@@ -17684,10 +17684,10 @@ const chartShowValuesPlugin = {
|
|
|
17684
17684
|
case "bar":
|
|
17685
17685
|
case "line":
|
|
17686
17686
|
case "radar":
|
|
17687
|
-
options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
|
|
17687
|
+
options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true }) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
|
|
17688
17688
|
break;
|
|
17689
17689
|
case "funnel":
|
|
17690
|
-
drawHorizontalBarChartValues(chart, options, ctx);
|
|
17690
|
+
drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: false });
|
|
17691
17691
|
break;
|
|
17692
17692
|
}
|
|
17693
17693
|
ctx.restore();
|
|
@@ -17728,7 +17728,7 @@ function drawLineOrBarOrRadarChartValues(chart, options, ctx) {
|
|
|
17728
17728
|
}
|
|
17729
17729
|
}
|
|
17730
17730
|
}
|
|
17731
|
-
function drawHorizontalBarChartValues(chart, options, ctx) {
|
|
17731
|
+
function drawHorizontalBarChartValues(chart, options, ctx, args) {
|
|
17732
17732
|
const textsPositions = {};
|
|
17733
17733
|
for (const dataset of chart._metasets) {
|
|
17734
17734
|
if (isTrendLineAxis(dataset.xAxisID)) return;
|
|
@@ -17743,7 +17743,7 @@ function drawHorizontalBarChartValues(chart, options, ctx) {
|
|
|
17743
17743
|
const distanceFromAxisOrigin = Math.abs(point.x - xZeroLine);
|
|
17744
17744
|
const PADDING = 3;
|
|
17745
17745
|
let xPosition;
|
|
17746
|
-
if (distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
|
|
17746
|
+
if (args.offsetFromAxisOrigin && distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
|
|
17747
17747
|
else xPosition = value < 0 ? point.x + point.width / 2 : point.x - point.width / 2;
|
|
17748
17748
|
if (!textsPositions[yPosition]) textsPositions[yPosition] = [];
|
|
17749
17749
|
for (const otherPosition of textsPositions[yPosition]) if (Math.abs(otherPosition - xPosition) < textWidth) xPosition = value < 0 ? otherPosition - textWidth - PADDING : otherPosition + textWidth + PADDING;
|
|
@@ -31034,12 +31034,48 @@ const ErrorToolTipPopoverBuilder = { onHover: (position, getters) => {
|
|
|
31034
31034
|
} };
|
|
31035
31035
|
|
|
31036
31036
|
//#endregion
|
|
31037
|
-
//#region src/components/
|
|
31037
|
+
//#region src/components/icons/raw_svgs.ts
|
|
31038
|
+
/**
|
|
31039
|
+
* SVG markup used in `css` tagged templates as `data:image/svg+xml` URIs.
|
|
31040
|
+
*
|
|
31041
|
+
* Keep these values in a separate module so Rolldown references them instead
|
|
31042
|
+
* of inlining them into template literals. Inlining produces nested template
|
|
31043
|
+
* literals, which the downstream `rjsmin` minifier cannot parse correctly
|
|
31044
|
+
* because it relies on regular expressions.
|
|
31045
|
+
*
|
|
31046
|
+
* Do not inline these constants.
|
|
31047
|
+
*/
|
|
31038
31048
|
const CHECK_SVG = `
|
|
31039
31049
|
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'>
|
|
31040
31050
|
<path fill='none' stroke='#FFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/>
|
|
31041
31051
|
</svg>
|
|
31042
31052
|
`;
|
|
31053
|
+
const CIRCLE_SVG = `
|
|
31054
|
+
<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
|
|
31055
|
+
<circle r="2" fill="#FFF"/>
|
|
31056
|
+
</svg>
|
|
31057
|
+
`;
|
|
31058
|
+
const FX_SVG = `
|
|
31059
|
+
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
|
|
31060
|
+
<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'/>
|
|
31061
|
+
</svg>
|
|
31062
|
+
`;
|
|
31063
|
+
const TRANSPARENT_BACKGROUND_SVG = `
|
|
31064
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
|
|
31065
|
+
<path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
|
|
31066
|
+
</svg>
|
|
31067
|
+
`;
|
|
31068
|
+
const CURSOR_SVG = `
|
|
31069
|
+
<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>
|
|
31070
|
+
`;
|
|
31071
|
+
const CARET_DOWN_SVG = `
|
|
31072
|
+
<svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
|
|
31073
|
+
<polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
|
|
31074
|
+
</svg>
|
|
31075
|
+
`;
|
|
31076
|
+
|
|
31077
|
+
//#endregion
|
|
31078
|
+
//#region src/components/side_panel/components/checkbox/checkbox.ts
|
|
31043
31079
|
const CHECKBOX_WIDTH = 14;
|
|
31044
31080
|
css`
|
|
31045
31081
|
label.o-checkbox {
|
|
@@ -37319,11 +37355,7 @@ css`
|
|
|
37319
37355
|
border-radius: 8px;
|
|
37320
37356
|
|
|
37321
37357
|
&:checked {
|
|
37322
|
-
background: url("data:image/svg+xml,${encodeURIComponent(
|
|
37323
|
-
<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
|
|
37324
|
-
<circle r="2" fill="#FFF"/>
|
|
37325
|
-
</svg>
|
|
37326
|
-
`)}");
|
|
37358
|
+
background: url("data:image/svg+xml,${encodeURIComponent(CIRCLE_SVG)}");
|
|
37327
37359
|
background-color: ${ACTION_COLOR};
|
|
37328
37360
|
border-color: ${ACTION_COLOR};
|
|
37329
37361
|
}
|
|
@@ -37360,11 +37392,7 @@ css`
|
|
|
37360
37392
|
cursor: pointer;
|
|
37361
37393
|
border: 1px solid ${GRAY_300};
|
|
37362
37394
|
background-position: 1px 1px;
|
|
37363
|
-
background-image: url("data:image/svg+xml,${encodeURIComponent(
|
|
37364
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
|
|
37365
|
-
<path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
|
|
37366
|
-
</svg>
|
|
37367
|
-
`)}");
|
|
37395
|
+
background-image: url("data:image/svg+xml,${encodeURIComponent(TRANSPARENT_BACKGROUND_SVG)}");
|
|
37368
37396
|
}
|
|
37369
37397
|
`;
|
|
37370
37398
|
var RoundColorPicker = class extends Component {
|
|
@@ -38369,9 +38397,10 @@ var Composer = class extends Component {
|
|
|
38369
38397
|
compositionActive = false;
|
|
38370
38398
|
spreadsheetRect = useSpreadsheetRect();
|
|
38371
38399
|
lastHoveredTokenIndex = void 0;
|
|
38372
|
-
debouncedHover = debounce((tokenIndex, hoveredRect) => {
|
|
38400
|
+
debouncedHover = debounce((tokenIndex, composerContent, hoveredRect) => {
|
|
38373
38401
|
const selection = this.contentHelper.getCurrentSelection();
|
|
38374
|
-
|
|
38402
|
+
const currentContent = this.props.composerStore.currentContent;
|
|
38403
|
+
if (selection.start !== selection.end || currentContent !== composerContent) return;
|
|
38375
38404
|
const currentHoveredContext = this.props.composerStore.hoveredTokens;
|
|
38376
38405
|
this.props.composerStore.hoverToken(tokenIndex);
|
|
38377
38406
|
if (!deepEquals(currentHoveredContext, this.props.composerStore.hoveredTokens)) this.composerState.hoveredRect = hoveredRect;
|
|
@@ -38713,7 +38742,8 @@ var Composer = class extends Component {
|
|
|
38713
38742
|
onTokenHover(tokenIndex, hoveredRect) {
|
|
38714
38743
|
if (this.lastHoveredTokenIndex !== tokenIndex) {
|
|
38715
38744
|
this.lastHoveredTokenIndex = tokenIndex;
|
|
38716
|
-
this.
|
|
38745
|
+
const composerContent = this.props.composerStore.currentContent;
|
|
38746
|
+
this.debouncedHover(tokenIndex, composerContent, hoveredRect);
|
|
38717
38747
|
}
|
|
38718
38748
|
}
|
|
38719
38749
|
/**
|
|
@@ -44981,7 +45011,13 @@ var PivotSpreadsheetSidePanel = class extends Component {
|
|
|
44981
45011
|
}
|
|
44982
45012
|
onSelectionChanged(ranges) {
|
|
44983
45013
|
this.state.rangeHasChanged = true;
|
|
44984
|
-
|
|
45014
|
+
if (ranges.length === 0) {
|
|
45015
|
+
this.state.range = void 0;
|
|
45016
|
+
return;
|
|
45017
|
+
}
|
|
45018
|
+
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
45019
|
+
const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
|
|
45020
|
+
this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
|
|
44985
45021
|
}
|
|
44986
45022
|
onSelectionConfirmed() {
|
|
44987
45023
|
if (this.state.range) {
|
|
@@ -48362,9 +48398,7 @@ var HoveredTableStore = class extends SpreadsheetStore {
|
|
|
48362
48398
|
//#region src/components/grid_overlay/grid_overlay.ts
|
|
48363
48399
|
css`
|
|
48364
48400
|
.o-paint-format-cursor {
|
|
48365
|
-
cursor: url("data:image/svg+xml,${encodeURIComponent(
|
|
48366
|
-
<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>
|
|
48367
|
-
`)}"), auto;
|
|
48401
|
+
cursor: url("data:image/svg+xml,${encodeURIComponent(CURSOR_SVG)}"), auto;
|
|
48368
48402
|
}
|
|
48369
48403
|
`;
|
|
48370
48404
|
function useCellHovered(env, gridRef) {
|
|
@@ -48540,6 +48574,11 @@ var GridOverlay = class extends Component {
|
|
|
48540
48574
|
const y = ev.clientY - this.gridOverlayRect.y;
|
|
48541
48575
|
return [this.env.model.getters.getColIndex(x), this.env.model.getters.getRowIndex(y)];
|
|
48542
48576
|
}
|
|
48577
|
+
get isFooterVisible() {
|
|
48578
|
+
const { y } = this.env.model.getters.getMainViewportCoordinates();
|
|
48579
|
+
const { height } = this.env.model.getters.getSheetViewDimension();
|
|
48580
|
+
return !this.env.model.getters.isReadonly() && height - y > 46;
|
|
48581
|
+
}
|
|
48543
48582
|
};
|
|
48544
48583
|
|
|
48545
48584
|
//#endregion
|
|
@@ -56747,6 +56786,16 @@ var FormulaDependencyGraph = class {
|
|
|
56747
56786
|
getCellsDependingOn(ranges, ignore) {
|
|
56748
56787
|
const visited = this.createEmptyPositionSet();
|
|
56749
56788
|
const queue = Array.from(ranges).reverse();
|
|
56789
|
+
const initialPositionsToRemove = this.createEmptyPositionSet();
|
|
56790
|
+
for (const range of ranges) {
|
|
56791
|
+
const zone = range.zone;
|
|
56792
|
+
const sheetId = range.sheetId;
|
|
56793
|
+
for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) initialPositionsToRemove.add({
|
|
56794
|
+
sheetId,
|
|
56795
|
+
col,
|
|
56796
|
+
row
|
|
56797
|
+
});
|
|
56798
|
+
}
|
|
56750
56799
|
while (queue.length > 0) {
|
|
56751
56800
|
const range = queue.pop();
|
|
56752
56801
|
const zone = range.zone;
|
|
@@ -56758,9 +56807,13 @@ var FormulaDependencyGraph = class {
|
|
|
56758
56807
|
});
|
|
56759
56808
|
const impactedPositions = this.rTree.search(range).map((dep) => dep.data);
|
|
56760
56809
|
const nextInQueue = {};
|
|
56761
|
-
for (const position of impactedPositions)
|
|
56762
|
-
if (
|
|
56763
|
-
|
|
56810
|
+
for (const position of impactedPositions) {
|
|
56811
|
+
if (ignore.has(position)) continue;
|
|
56812
|
+
initialPositionsToRemove.delete(position);
|
|
56813
|
+
if (!visited.has(position)) {
|
|
56814
|
+
if (!nextInQueue[position.sheetId]) nextInQueue[position.sheetId] = [];
|
|
56815
|
+
nextInQueue[position.sheetId].push(positionToZone(position));
|
|
56816
|
+
}
|
|
56764
56817
|
}
|
|
56765
56818
|
for (const sheetId in nextInQueue) {
|
|
56766
56819
|
const zones = recomputeZones(nextInQueue[sheetId], []);
|
|
@@ -56770,15 +56823,7 @@ var FormulaDependencyGraph = class {
|
|
|
56770
56823
|
})));
|
|
56771
56824
|
}
|
|
56772
56825
|
}
|
|
56773
|
-
for (const
|
|
56774
|
-
const zone = range.zone;
|
|
56775
|
-
const sheetId = range.sheetId;
|
|
56776
|
-
for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) visited.delete({
|
|
56777
|
-
sheetId,
|
|
56778
|
-
col,
|
|
56779
|
-
row
|
|
56780
|
-
});
|
|
56781
|
-
}
|
|
56826
|
+
for (const position of initialPositionsToRemove) visited.delete(position);
|
|
56782
56827
|
return visited;
|
|
56783
56828
|
}
|
|
56784
56829
|
};
|
|
@@ -64173,7 +64218,7 @@ var InternalViewport = class {
|
|
|
64173
64218
|
let height = lastRowEnd - this.offsetCorrectionY;
|
|
64174
64219
|
if (this.canScrollVertically) {
|
|
64175
64220
|
height = Math.max(height, this.viewportHeight);
|
|
64176
|
-
if (lastRowEnd + 46 > height && !this.getters.isReadonly()) height += 46;
|
|
64221
|
+
if (lastRowEnd + 46 > height && !this.getters.isReadonly() && this.viewportHeight > 46) height += 46;
|
|
64177
64222
|
}
|
|
64178
64223
|
return {
|
|
64179
64224
|
width,
|
|
@@ -66751,11 +66796,7 @@ css`
|
|
|
66751
66796
|
/* In readonly we always show the fx icon if the composer is empty, not matter the focus */
|
|
66752
66797
|
.o-composer:empty:not(:focus):not(.active)::before,
|
|
66753
66798
|
&.o-topbar-composer-readonly .o-composer:empty::before {
|
|
66754
|
-
content: url("data:image/svg+xml,${encodeURIComponent(
|
|
66755
|
-
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
|
|
66756
|
-
<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'/>
|
|
66757
|
-
</svg>
|
|
66758
|
-
`)}");
|
|
66799
|
+
content: url("data:image/svg+xml,${encodeURIComponent(FX_SVG)}");
|
|
66759
66800
|
position: relative;
|
|
66760
66801
|
top: 20%;
|
|
66761
66802
|
}
|
|
@@ -67909,11 +67950,7 @@ css`
|
|
|
67909
67950
|
appearance: none;
|
|
67910
67951
|
-webkit-appearance: none;
|
|
67911
67952
|
-moz-appearance: none;
|
|
67912
|
-
background: transparent url("data:image/svg+xml,${encodeURIComponent(
|
|
67913
|
-
<svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
|
|
67914
|
-
<polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
|
|
67915
|
-
</svg>
|
|
67916
|
-
`)}")
|
|
67953
|
+
background: transparent url("data:image/svg+xml,${encodeURIComponent(CARET_DOWN_SVG)}")
|
|
67917
67954
|
no-repeat right center;
|
|
67918
67955
|
text-overflow: ellipsis;
|
|
67919
67956
|
|
|
@@ -72304,6 +72341,6 @@ const chartHelpers = {
|
|
|
72304
72341
|
//#endregion
|
|
72305
72342
|
export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, CommandResult, CorePlugin, CoreViewPlugin, DispatchResult, EvaluationError, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, chartHelpers, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
|
|
72306
72343
|
|
|
72307
|
-
__info__.version = "18.3.
|
|
72308
|
-
__info__.date = "2026-
|
|
72309
|
-
__info__.hash = "
|
|
72344
|
+
__info__.version = "18.3.62";
|
|
72345
|
+
__info__.date = "2026-09-04T07:18:11.182Z";
|
|
72346
|
+
__info__.hash = "aaaa064";
|
|
@@ -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.3.
|
|
6
|
-
* @date 2026-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.3.62
|
|
6
|
+
* @date 2026-09-04T07:18:11.182Z
|
|
7
|
+
* @hash aaaa064
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function(exports, _odoo_owl) {
|
|
@@ -17686,10 +17686,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
17686
17686
|
case "bar":
|
|
17687
17687
|
case "line":
|
|
17688
17688
|
case "radar":
|
|
17689
|
-
options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
|
|
17689
|
+
options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true }) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
|
|
17690
17690
|
break;
|
|
17691
17691
|
case "funnel":
|
|
17692
|
-
drawHorizontalBarChartValues(chart, options, ctx);
|
|
17692
|
+
drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: false });
|
|
17693
17693
|
break;
|
|
17694
17694
|
}
|
|
17695
17695
|
ctx.restore();
|
|
@@ -17730,7 +17730,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
17730
17730
|
}
|
|
17731
17731
|
}
|
|
17732
17732
|
}
|
|
17733
|
-
function drawHorizontalBarChartValues(chart, options, ctx) {
|
|
17733
|
+
function drawHorizontalBarChartValues(chart, options, ctx, args) {
|
|
17734
17734
|
const textsPositions = {};
|
|
17735
17735
|
for (const dataset of chart._metasets) {
|
|
17736
17736
|
if (isTrendLineAxis(dataset.xAxisID)) return;
|
|
@@ -17745,7 +17745,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
17745
17745
|
const distanceFromAxisOrigin = Math.abs(point.x - xZeroLine);
|
|
17746
17746
|
const PADDING = 3;
|
|
17747
17747
|
let xPosition;
|
|
17748
|
-
if (distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
|
|
17748
|
+
if (args.offsetFromAxisOrigin && distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
|
|
17749
17749
|
else xPosition = value < 0 ? point.x + point.width / 2 : point.x - point.width / 2;
|
|
17750
17750
|
if (!textsPositions[yPosition]) textsPositions[yPosition] = [];
|
|
17751
17751
|
for (const otherPosition of textsPositions[yPosition]) if (Math.abs(otherPosition - xPosition) < textWidth) xPosition = value < 0 ? otherPosition - textWidth - PADDING : otherPosition + textWidth + PADDING;
|
|
@@ -31036,12 +31036,48 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
31036
31036
|
} };
|
|
31037
31037
|
|
|
31038
31038
|
//#endregion
|
|
31039
|
-
//#region src/components/
|
|
31039
|
+
//#region src/components/icons/raw_svgs.ts
|
|
31040
|
+
/**
|
|
31041
|
+
* SVG markup used in `css` tagged templates as `data:image/svg+xml` URIs.
|
|
31042
|
+
*
|
|
31043
|
+
* Keep these values in a separate module so Rolldown references them instead
|
|
31044
|
+
* of inlining them into template literals. Inlining produces nested template
|
|
31045
|
+
* literals, which the downstream `rjsmin` minifier cannot parse correctly
|
|
31046
|
+
* because it relies on regular expressions.
|
|
31047
|
+
*
|
|
31048
|
+
* Do not inline these constants.
|
|
31049
|
+
*/
|
|
31040
31050
|
const CHECK_SVG = `
|
|
31041
31051
|
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'>
|
|
31042
31052
|
<path fill='none' stroke='#FFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/>
|
|
31043
31053
|
</svg>
|
|
31044
31054
|
`;
|
|
31055
|
+
const CIRCLE_SVG = `
|
|
31056
|
+
<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
|
|
31057
|
+
<circle r="2" fill="#FFF"/>
|
|
31058
|
+
</svg>
|
|
31059
|
+
`;
|
|
31060
|
+
const FX_SVG = `
|
|
31061
|
+
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
|
|
31062
|
+
<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'/>
|
|
31063
|
+
</svg>
|
|
31064
|
+
`;
|
|
31065
|
+
const TRANSPARENT_BACKGROUND_SVG = `
|
|
31066
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
|
|
31067
|
+
<path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
|
|
31068
|
+
</svg>
|
|
31069
|
+
`;
|
|
31070
|
+
const CURSOR_SVG = `
|
|
31071
|
+
<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>
|
|
31072
|
+
`;
|
|
31073
|
+
const CARET_DOWN_SVG = `
|
|
31074
|
+
<svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
|
|
31075
|
+
<polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
|
|
31076
|
+
</svg>
|
|
31077
|
+
`;
|
|
31078
|
+
|
|
31079
|
+
//#endregion
|
|
31080
|
+
//#region src/components/side_panel/components/checkbox/checkbox.ts
|
|
31045
31081
|
const CHECKBOX_WIDTH = 14;
|
|
31046
31082
|
css`
|
|
31047
31083
|
label.o-checkbox {
|
|
@@ -37321,11 +37357,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
37321
37357
|
border-radius: 8px;
|
|
37322
37358
|
|
|
37323
37359
|
&:checked {
|
|
37324
|
-
background: url("data:image/svg+xml,${encodeURIComponent(
|
|
37325
|
-
<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
|
|
37326
|
-
<circle r="2" fill="#FFF"/>
|
|
37327
|
-
</svg>
|
|
37328
|
-
`)}");
|
|
37360
|
+
background: url("data:image/svg+xml,${encodeURIComponent(CIRCLE_SVG)}");
|
|
37329
37361
|
background-color: ${ACTION_COLOR};
|
|
37330
37362
|
border-color: ${ACTION_COLOR};
|
|
37331
37363
|
}
|
|
@@ -37362,11 +37394,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
37362
37394
|
cursor: pointer;
|
|
37363
37395
|
border: 1px solid ${GRAY_300};
|
|
37364
37396
|
background-position: 1px 1px;
|
|
37365
|
-
background-image: url("data:image/svg+xml,${encodeURIComponent(
|
|
37366
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
|
|
37367
|
-
<path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
|
|
37368
|
-
</svg>
|
|
37369
|
-
`)}");
|
|
37397
|
+
background-image: url("data:image/svg+xml,${encodeURIComponent(TRANSPARENT_BACKGROUND_SVG)}");
|
|
37370
37398
|
}
|
|
37371
37399
|
`;
|
|
37372
37400
|
var RoundColorPicker = class extends _odoo_owl.Component {
|
|
@@ -38371,9 +38399,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
38371
38399
|
compositionActive = false;
|
|
38372
38400
|
spreadsheetRect = useSpreadsheetRect();
|
|
38373
38401
|
lastHoveredTokenIndex = void 0;
|
|
38374
|
-
debouncedHover = debounce((tokenIndex, hoveredRect) => {
|
|
38402
|
+
debouncedHover = debounce((tokenIndex, composerContent, hoveredRect) => {
|
|
38375
38403
|
const selection = this.contentHelper.getCurrentSelection();
|
|
38376
|
-
|
|
38404
|
+
const currentContent = this.props.composerStore.currentContent;
|
|
38405
|
+
if (selection.start !== selection.end || currentContent !== composerContent) return;
|
|
38377
38406
|
const currentHoveredContext = this.props.composerStore.hoveredTokens;
|
|
38378
38407
|
this.props.composerStore.hoverToken(tokenIndex);
|
|
38379
38408
|
if (!deepEquals(currentHoveredContext, this.props.composerStore.hoveredTokens)) this.composerState.hoveredRect = hoveredRect;
|
|
@@ -38715,7 +38744,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
38715
38744
|
onTokenHover(tokenIndex, hoveredRect) {
|
|
38716
38745
|
if (this.lastHoveredTokenIndex !== tokenIndex) {
|
|
38717
38746
|
this.lastHoveredTokenIndex = tokenIndex;
|
|
38718
|
-
this.
|
|
38747
|
+
const composerContent = this.props.composerStore.currentContent;
|
|
38748
|
+
this.debouncedHover(tokenIndex, composerContent, hoveredRect);
|
|
38719
38749
|
}
|
|
38720
38750
|
}
|
|
38721
38751
|
/**
|
|
@@ -44983,7 +45013,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
44983
45013
|
}
|
|
44984
45014
|
onSelectionChanged(ranges) {
|
|
44985
45015
|
this.state.rangeHasChanged = true;
|
|
44986
|
-
|
|
45016
|
+
if (ranges.length === 0) {
|
|
45017
|
+
this.state.range = void 0;
|
|
45018
|
+
return;
|
|
45019
|
+
}
|
|
45020
|
+
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
45021
|
+
const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
|
|
45022
|
+
this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
|
|
44987
45023
|
}
|
|
44988
45024
|
onSelectionConfirmed() {
|
|
44989
45025
|
if (this.state.range) {
|
|
@@ -48364,9 +48400,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
48364
48400
|
//#region src/components/grid_overlay/grid_overlay.ts
|
|
48365
48401
|
css`
|
|
48366
48402
|
.o-paint-format-cursor {
|
|
48367
|
-
cursor: url("data:image/svg+xml,${encodeURIComponent(
|
|
48368
|
-
<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>
|
|
48369
|
-
`)}"), auto;
|
|
48403
|
+
cursor: url("data:image/svg+xml,${encodeURIComponent(CURSOR_SVG)}"), auto;
|
|
48370
48404
|
}
|
|
48371
48405
|
`;
|
|
48372
48406
|
function useCellHovered(env, gridRef) {
|
|
@@ -48542,6 +48576,11 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
48542
48576
|
const y = ev.clientY - this.gridOverlayRect.y;
|
|
48543
48577
|
return [this.env.model.getters.getColIndex(x), this.env.model.getters.getRowIndex(y)];
|
|
48544
48578
|
}
|
|
48579
|
+
get isFooterVisible() {
|
|
48580
|
+
const { y } = this.env.model.getters.getMainViewportCoordinates();
|
|
48581
|
+
const { height } = this.env.model.getters.getSheetViewDimension();
|
|
48582
|
+
return !this.env.model.getters.isReadonly() && height - y > 46;
|
|
48583
|
+
}
|
|
48545
48584
|
};
|
|
48546
48585
|
|
|
48547
48586
|
//#endregion
|
|
@@ -56749,6 +56788,16 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
56749
56788
|
getCellsDependingOn(ranges, ignore) {
|
|
56750
56789
|
const visited = this.createEmptyPositionSet();
|
|
56751
56790
|
const queue = Array.from(ranges).reverse();
|
|
56791
|
+
const initialPositionsToRemove = this.createEmptyPositionSet();
|
|
56792
|
+
for (const range of ranges) {
|
|
56793
|
+
const zone = range.zone;
|
|
56794
|
+
const sheetId = range.sheetId;
|
|
56795
|
+
for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) initialPositionsToRemove.add({
|
|
56796
|
+
sheetId,
|
|
56797
|
+
col,
|
|
56798
|
+
row
|
|
56799
|
+
});
|
|
56800
|
+
}
|
|
56752
56801
|
while (queue.length > 0) {
|
|
56753
56802
|
const range = queue.pop();
|
|
56754
56803
|
const zone = range.zone;
|
|
@@ -56760,9 +56809,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
56760
56809
|
});
|
|
56761
56810
|
const impactedPositions = this.rTree.search(range).map((dep) => dep.data);
|
|
56762
56811
|
const nextInQueue = {};
|
|
56763
|
-
for (const position of impactedPositions)
|
|
56764
|
-
if (
|
|
56765
|
-
|
|
56812
|
+
for (const position of impactedPositions) {
|
|
56813
|
+
if (ignore.has(position)) continue;
|
|
56814
|
+
initialPositionsToRemove.delete(position);
|
|
56815
|
+
if (!visited.has(position)) {
|
|
56816
|
+
if (!nextInQueue[position.sheetId]) nextInQueue[position.sheetId] = [];
|
|
56817
|
+
nextInQueue[position.sheetId].push(positionToZone(position));
|
|
56818
|
+
}
|
|
56766
56819
|
}
|
|
56767
56820
|
for (const sheetId in nextInQueue) {
|
|
56768
56821
|
const zones = recomputeZones(nextInQueue[sheetId], []);
|
|
@@ -56772,15 +56825,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
56772
56825
|
})));
|
|
56773
56826
|
}
|
|
56774
56827
|
}
|
|
56775
|
-
for (const
|
|
56776
|
-
const zone = range.zone;
|
|
56777
|
-
const sheetId = range.sheetId;
|
|
56778
|
-
for (let col = zone.left; col <= zone.right; col++) for (let row = zone.top; row <= zone.bottom; row++) visited.delete({
|
|
56779
|
-
sheetId,
|
|
56780
|
-
col,
|
|
56781
|
-
row
|
|
56782
|
-
});
|
|
56783
|
-
}
|
|
56828
|
+
for (const position of initialPositionsToRemove) visited.delete(position);
|
|
56784
56829
|
return visited;
|
|
56785
56830
|
}
|
|
56786
56831
|
};
|
|
@@ -64175,7 +64220,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
64175
64220
|
let height = lastRowEnd - this.offsetCorrectionY;
|
|
64176
64221
|
if (this.canScrollVertically) {
|
|
64177
64222
|
height = Math.max(height, this.viewportHeight);
|
|
64178
|
-
if (lastRowEnd + 46 > height && !this.getters.isReadonly()) height += 46;
|
|
64223
|
+
if (lastRowEnd + 46 > height && !this.getters.isReadonly() && this.viewportHeight > 46) height += 46;
|
|
64179
64224
|
}
|
|
64180
64225
|
return {
|
|
64181
64226
|
width,
|
|
@@ -66753,11 +66798,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
66753
66798
|
/* In readonly we always show the fx icon if the composer is empty, not matter the focus */
|
|
66754
66799
|
.o-composer:empty:not(:focus):not(.active)::before,
|
|
66755
66800
|
&.o-topbar-composer-readonly .o-composer:empty::before {
|
|
66756
|
-
content: url("data:image/svg+xml,${encodeURIComponent(
|
|
66757
|
-
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
|
|
66758
|
-
<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'/>
|
|
66759
|
-
</svg>
|
|
66760
|
-
`)}");
|
|
66801
|
+
content: url("data:image/svg+xml,${encodeURIComponent(FX_SVG)}");
|
|
66761
66802
|
position: relative;
|
|
66762
66803
|
top: 20%;
|
|
66763
66804
|
}
|
|
@@ -67911,11 +67952,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
67911
67952
|
appearance: none;
|
|
67912
67953
|
-webkit-appearance: none;
|
|
67913
67954
|
-moz-appearance: none;
|
|
67914
|
-
background: transparent url("data:image/svg+xml,${encodeURIComponent(
|
|
67915
|
-
<svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
|
|
67916
|
-
<polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
|
|
67917
|
-
</svg>
|
|
67918
|
-
`)}")
|
|
67955
|
+
background: transparent url("data:image/svg+xml,${encodeURIComponent(CARET_DOWN_SVG)}")
|
|
67919
67956
|
no-repeat right center;
|
|
67920
67957
|
text-overflow: ellipsis;
|
|
67921
67958
|
|
|
@@ -72353,8 +72390,8 @@ exports.stores = stores;
|
|
|
72353
72390
|
exports.tokenColors = tokenColors;
|
|
72354
72391
|
exports.tokenize = tokenize;
|
|
72355
72392
|
|
|
72356
|
-
__info__.version = "18.3.
|
|
72357
|
-
__info__.date = "2026-
|
|
72358
|
-
__info__.hash = "
|
|
72393
|
+
__info__.version = "18.3.62";
|
|
72394
|
+
__info__.date = "2026-09-04T07:18:11.182Z";
|
|
72395
|
+
__info__.hash = "aaaa064";
|
|
72359
72396
|
|
|
72360
72397
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|