@odoo/o-spreadsheet 19.3.10 → 19.3.11
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 +61 -24
- package/dist/o_spreadsheet.css +3 -3
- package/dist/o_spreadsheet.esm.js +61 -24
- package/dist/o_spreadsheet.iife.js +61 -24
- package/dist/o_spreadsheet.min.iife.js +5 -5
- package/dist/o_spreadsheet.xml +3 -3
- package/dist/types/helpers/internal_viewport.d.ts +1 -0
- package/dist/types/helpers/viewport_collection.d.ts +1 -0
- package/dist/types/selection_stream/selection_stream_processor.d.ts +1 -1
- package/dist/types/types/event_stream/selection_events.d.ts +1 -0
- package/dist/types/types/selection_stream_processor.d.ts +1 -1
- package/package.json +1 -1
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.3.
|
|
6
|
-
* @date 2026-07-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.3.11
|
|
6
|
+
* @date 2026-07-13T06:26:28.422Z
|
|
7
|
+
* @hash 35c06d3
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
@@ -14141,7 +14141,7 @@ function filterInvalidCalendarDataPoints(labels, datasets) {
|
|
|
14141
14141
|
*/
|
|
14142
14142
|
function filterInvalidHierarchicalPoints(values, hierarchy) {
|
|
14143
14143
|
const numberOfDataPoints = Math.max(values.length, ...hierarchy.map((dataset) => dataset.data?.length || 0));
|
|
14144
|
-
const isEmpty = (value) => value === null || value === "";
|
|
14144
|
+
const isEmpty = (value) => value === void 0 || value === null || value === "";
|
|
14145
14145
|
const dataPointsIndexes = range(0, numberOfDataPoints).filter((dataPointIndex) => {
|
|
14146
14146
|
const groups = hierarchy.map((dataset) => dataset.data?.[dataPointIndex]);
|
|
14147
14147
|
if (isEmpty(groups[0]?.value)) return false;
|
|
@@ -57126,13 +57126,13 @@ var EvaluationConditionalFormatPlugin = class extends CoreViewPlugin {
|
|
|
57126
57126
|
const minValue = this.parsePoint(sheetId, range, rule.minimum, "min");
|
|
57127
57127
|
const midValue = rule.midpoint ? this.parsePoint(sheetId, range, rule.midpoint) : null;
|
|
57128
57128
|
const maxValue = this.parsePoint(sheetId, range, rule.maximum, "max");
|
|
57129
|
-
if (minValue === null || maxValue === null || minValue >= maxValue || midValue && (minValue >= midValue || midValue >= maxValue)) return;
|
|
57129
|
+
if (minValue === null || maxValue === null || minValue >= maxValue || midValue !== null && (minValue >= midValue || midValue >= maxValue)) return;
|
|
57130
57130
|
const zone = this.getters.getRangeFromSheetXC(sheetId, range).zone;
|
|
57131
57131
|
const colorThresholds = [{
|
|
57132
57132
|
value: minValue,
|
|
57133
57133
|
color: rule.minimum.color
|
|
57134
57134
|
}];
|
|
57135
|
-
if (rule.midpoint && midValue) colorThresholds.push({
|
|
57135
|
+
if (rule.midpoint && midValue !== null) colorThresholds.push({
|
|
57136
57136
|
value: midValue,
|
|
57137
57137
|
color: rule.midpoint.color
|
|
57138
57138
|
});
|
|
@@ -64445,11 +64445,23 @@ var GridSelectionPlugin = class extends UIPlugin {
|
|
|
64445
64445
|
ctx.strokeStyle = SELECTION_BORDER_COLOR;
|
|
64446
64446
|
ctx.lineWidth = 1.5 * thinLineWidth;
|
|
64447
64447
|
for (const zone of zones) {
|
|
64448
|
+
if (!viewports.isZoneVisibleInViewport(sheetId, zone)) continue;
|
|
64448
64449
|
const { x, y, width, height } = viewports.getVisibleRect(sheetId, zone);
|
|
64449
64450
|
ctx.globalCompositeOperation = "multiply";
|
|
64450
|
-
|
|
64451
|
-
ctx.
|
|
64452
|
-
|
|
64451
|
+
const currentLineWidth = ctx.lineWidth;
|
|
64452
|
+
if (height === 0 || width === 0) ctx.lineWidth = 3 * thinLineWidth;
|
|
64453
|
+
if (height === 0 && width === 0) {
|
|
64454
|
+
ctx.beginPath();
|
|
64455
|
+
ctx.arc(x, y, 3, 0, 2 * Math.PI);
|
|
64456
|
+
ctx.fill();
|
|
64457
|
+
ctx.globalCompositeOperation = "source-over";
|
|
64458
|
+
ctx.stroke();
|
|
64459
|
+
} else {
|
|
64460
|
+
ctx.fillRect(x, y, width, height);
|
|
64461
|
+
ctx.globalCompositeOperation = "source-over";
|
|
64462
|
+
ctx.strokeRect(x, y, width, height);
|
|
64463
|
+
}
|
|
64464
|
+
ctx.lineWidth = currentLineWidth;
|
|
64453
64465
|
}
|
|
64454
64466
|
ctx.globalCompositeOperation = "source-over";
|
|
64455
64467
|
const position = renderingContext.activePosition;
|
|
@@ -64596,6 +64608,9 @@ var InternalViewport = class {
|
|
|
64596
64608
|
this.adjustViewportZoneX();
|
|
64597
64609
|
this.adjustViewportZoneY();
|
|
64598
64610
|
}
|
|
64611
|
+
isZoneVisible(zone) {
|
|
64612
|
+
return intersection(zone, this) !== void 0;
|
|
64613
|
+
}
|
|
64599
64614
|
/**
|
|
64600
64615
|
*
|
|
64601
64616
|
* Computes the visible coordinates & dimensions of a given zone inside the viewport
|
|
@@ -64876,6 +64891,9 @@ var ViewportCollection = class {
|
|
|
64876
64891
|
isVisibleInViewport({ sheetId, col, row }) {
|
|
64877
64892
|
return this.getSubViewports(sheetId).some((pane) => pane.isVisible(col, row));
|
|
64878
64893
|
}
|
|
64894
|
+
isZoneVisibleInViewport(sheetId, zone) {
|
|
64895
|
+
return this.getSubViewports(sheetId).some((pane) => pane.isZoneVisible(zone));
|
|
64896
|
+
}
|
|
64879
64897
|
getScrollBarWidth() {
|
|
64880
64898
|
return 15 / this.zoomLevel;
|
|
64881
64899
|
}
|
|
@@ -69407,18 +69425,28 @@ var NamedRangeSelector = class extends _odoo_owl.Component {
|
|
|
69407
69425
|
return;
|
|
69408
69426
|
}
|
|
69409
69427
|
const activeSheetId = this.env.model.getters.getActiveSheetId();
|
|
69410
|
-
if (activeSheetId !== sheetId)
|
|
69411
|
-
|
|
69412
|
-
|
|
69413
|
-
|
|
69414
|
-
|
|
69428
|
+
if (activeSheetId !== sheetId) {
|
|
69429
|
+
if (!this.env.model.getters.getSheet(sheetId).isVisible) {
|
|
69430
|
+
this.env.notifyUser({
|
|
69431
|
+
text: _t("The sheet on which the range is defined is hidden."),
|
|
69432
|
+
type: "info",
|
|
69433
|
+
sticky: false
|
|
69434
|
+
});
|
|
69435
|
+
return;
|
|
69436
|
+
}
|
|
69437
|
+
this.env.model.dispatch("ACTIVATE_SHEET", {
|
|
69438
|
+
sheetIdFrom: activeSheetId,
|
|
69439
|
+
sheetIdTo: sheetId
|
|
69440
|
+
});
|
|
69441
|
+
}
|
|
69442
|
+
this.env.model.selection.selectCell(zone.right, zone.bottom, { allowsHiddenSelection: true });
|
|
69415
69443
|
this.env.model.selection.selectZone({
|
|
69416
69444
|
cell: {
|
|
69417
69445
|
col: zone.left,
|
|
69418
69446
|
row: zone.top
|
|
69419
69447
|
},
|
|
69420
69448
|
zone
|
|
69421
|
-
});
|
|
69449
|
+
}, { allowsHiddenSelection: true });
|
|
69422
69450
|
}
|
|
69423
69451
|
get selectionKey() {
|
|
69424
69452
|
return `${this.env.model.getters.getActiveSheetId()}-${zoneToXc(this.selectedZone)}`;
|
|
@@ -71827,7 +71855,7 @@ var SelectionStreamProcessorImpl = class {
|
|
|
71827
71855
|
/**
|
|
71828
71856
|
* Select a single cell as the new anchor.
|
|
71829
71857
|
*/
|
|
71830
|
-
selectCell(col, row) {
|
|
71858
|
+
selectCell(col, row, options) {
|
|
71831
71859
|
const zone = positionToZone({
|
|
71832
71860
|
col,
|
|
71833
71861
|
row
|
|
@@ -71838,7 +71866,10 @@ var SelectionStreamProcessorImpl = class {
|
|
|
71838
71866
|
col,
|
|
71839
71867
|
row
|
|
71840
71868
|
}
|
|
71841
|
-
}, {
|
|
71869
|
+
}, {
|
|
71870
|
+
scrollIntoView: true,
|
|
71871
|
+
...options
|
|
71872
|
+
});
|
|
71842
71873
|
}
|
|
71843
71874
|
/**
|
|
71844
71875
|
* Set the selection to one of the cells adjacent to the current anchor cell.
|
|
@@ -72193,15 +72224,21 @@ var SelectionStreamProcessorImpl = class {
|
|
|
72193
72224
|
return DispatchResult.Success;
|
|
72194
72225
|
}
|
|
72195
72226
|
checkEventAnchorZone(event) {
|
|
72196
|
-
return this.checkAnchorZone(event.anchor);
|
|
72227
|
+
return this.checkAnchorZone(event.anchor, event.options);
|
|
72197
72228
|
}
|
|
72198
|
-
checkAnchorZone(anchor) {
|
|
72229
|
+
checkAnchorZone(anchor, options) {
|
|
72199
72230
|
const { cell, zone } = anchor;
|
|
72200
72231
|
if (!isInside(cell.col, cell.row, zone)) return "InvalidAnchorZone";
|
|
72201
72232
|
const { left, right, top, bottom } = zone;
|
|
72202
72233
|
const sheetId = this.getters.getActiveSheetId();
|
|
72203
|
-
|
|
72204
|
-
|
|
72234
|
+
if (!options?.allowsHiddenSelection) {
|
|
72235
|
+
const refCol = this.getters.findVisibleHeader(sheetId, "COL", left, right);
|
|
72236
|
+
if (this.getters.findVisibleHeader(sheetId, "ROW", top, bottom) === void 0 || refCol === void 0) return "SelectionOutOfBound";
|
|
72237
|
+
} else {
|
|
72238
|
+
const numberCols = this.getters.getNumberCols(sheetId);
|
|
72239
|
+
const numberRows = this.getters.getNumberRows(sheetId);
|
|
72240
|
+
if (left < 0 || right > numberCols - 1 || top < 0 || bottom > numberRows - 1) return "SelectionOutOfBound";
|
|
72241
|
+
}
|
|
72205
72242
|
return "Success";
|
|
72206
72243
|
}
|
|
72207
72244
|
checkAnchorZoneOrThrow(anchor) {
|
|
@@ -84752,6 +84789,6 @@ exports.stores = stores;
|
|
|
84752
84789
|
exports.tokenColors = tokenColors;
|
|
84753
84790
|
exports.tokenize = tokenize;
|
|
84754
84791
|
|
|
84755
|
-
__info__.version = "19.3.
|
|
84756
|
-
__info__.date = "2026-07-
|
|
84757
|
-
__info__.hash = "
|
|
84792
|
+
__info__.version = "19.3.11";
|
|
84793
|
+
__info__.date = "2026-07-13T06:26:28.422Z";
|
|
84794
|
+
__info__.hash = "35c06d3";
|
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.3.
|
|
6
|
-
* @date 2026-07-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.3.11
|
|
6
|
+
* @date 2026-07-13T06:26:30.150Z
|
|
7
|
+
* @hash 35c06d3
|
|
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.3.
|
|
6
|
-
* @date 2026-07-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.3.11
|
|
6
|
+
* @date 2026-07-13T06:26:28.422Z
|
|
7
|
+
* @hash 35c06d3
|
|
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, whenReady, xml } from "@odoo/owl";
|
|
@@ -14140,7 +14140,7 @@ function filterInvalidCalendarDataPoints(labels, datasets) {
|
|
|
14140
14140
|
*/
|
|
14141
14141
|
function filterInvalidHierarchicalPoints(values, hierarchy) {
|
|
14142
14142
|
const numberOfDataPoints = Math.max(values.length, ...hierarchy.map((dataset) => dataset.data?.length || 0));
|
|
14143
|
-
const isEmpty = (value) => value === null || value === "";
|
|
14143
|
+
const isEmpty = (value) => value === void 0 || value === null || value === "";
|
|
14144
14144
|
const dataPointsIndexes = range(0, numberOfDataPoints).filter((dataPointIndex) => {
|
|
14145
14145
|
const groups = hierarchy.map((dataset) => dataset.data?.[dataPointIndex]);
|
|
14146
14146
|
if (isEmpty(groups[0]?.value)) return false;
|
|
@@ -56941,13 +56941,13 @@ var EvaluationConditionalFormatPlugin = class extends CoreViewPlugin {
|
|
|
56941
56941
|
const minValue = this.parsePoint(sheetId, range, rule.minimum, "min");
|
|
56942
56942
|
const midValue = rule.midpoint ? this.parsePoint(sheetId, range, rule.midpoint) : null;
|
|
56943
56943
|
const maxValue = this.parsePoint(sheetId, range, rule.maximum, "max");
|
|
56944
|
-
if (minValue === null || maxValue === null || minValue >= maxValue || midValue && (minValue >= midValue || midValue >= maxValue)) return;
|
|
56944
|
+
if (minValue === null || maxValue === null || minValue >= maxValue || midValue !== null && (minValue >= midValue || midValue >= maxValue)) return;
|
|
56945
56945
|
const zone = this.getters.getRangeFromSheetXC(sheetId, range).zone;
|
|
56946
56946
|
const colorThresholds = [{
|
|
56947
56947
|
value: minValue,
|
|
56948
56948
|
color: rule.minimum.color
|
|
56949
56949
|
}];
|
|
56950
|
-
if (rule.midpoint && midValue) colorThresholds.push({
|
|
56950
|
+
if (rule.midpoint && midValue !== null) colorThresholds.push({
|
|
56951
56951
|
value: midValue,
|
|
56952
56952
|
color: rule.midpoint.color
|
|
56953
56953
|
});
|
|
@@ -64260,11 +64260,23 @@ var GridSelectionPlugin = class extends UIPlugin {
|
|
|
64260
64260
|
ctx.strokeStyle = SELECTION_BORDER_COLOR;
|
|
64261
64261
|
ctx.lineWidth = 1.5 * thinLineWidth;
|
|
64262
64262
|
for (const zone of zones) {
|
|
64263
|
+
if (!viewports.isZoneVisibleInViewport(sheetId, zone)) continue;
|
|
64263
64264
|
const { x, y, width, height } = viewports.getVisibleRect(sheetId, zone);
|
|
64264
64265
|
ctx.globalCompositeOperation = "multiply";
|
|
64265
|
-
|
|
64266
|
-
ctx.
|
|
64267
|
-
|
|
64266
|
+
const currentLineWidth = ctx.lineWidth;
|
|
64267
|
+
if (height === 0 || width === 0) ctx.lineWidth = 3 * thinLineWidth;
|
|
64268
|
+
if (height === 0 && width === 0) {
|
|
64269
|
+
ctx.beginPath();
|
|
64270
|
+
ctx.arc(x, y, 3, 0, 2 * Math.PI);
|
|
64271
|
+
ctx.fill();
|
|
64272
|
+
ctx.globalCompositeOperation = "source-over";
|
|
64273
|
+
ctx.stroke();
|
|
64274
|
+
} else {
|
|
64275
|
+
ctx.fillRect(x, y, width, height);
|
|
64276
|
+
ctx.globalCompositeOperation = "source-over";
|
|
64277
|
+
ctx.strokeRect(x, y, width, height);
|
|
64278
|
+
}
|
|
64279
|
+
ctx.lineWidth = currentLineWidth;
|
|
64268
64280
|
}
|
|
64269
64281
|
ctx.globalCompositeOperation = "source-over";
|
|
64270
64282
|
const position = renderingContext.activePosition;
|
|
@@ -64411,6 +64423,9 @@ var InternalViewport = class {
|
|
|
64411
64423
|
this.adjustViewportZoneX();
|
|
64412
64424
|
this.adjustViewportZoneY();
|
|
64413
64425
|
}
|
|
64426
|
+
isZoneVisible(zone) {
|
|
64427
|
+
return intersection(zone, this) !== void 0;
|
|
64428
|
+
}
|
|
64414
64429
|
/**
|
|
64415
64430
|
*
|
|
64416
64431
|
* Computes the visible coordinates & dimensions of a given zone inside the viewport
|
|
@@ -64691,6 +64706,9 @@ var ViewportCollection = class {
|
|
|
64691
64706
|
isVisibleInViewport({ sheetId, col, row }) {
|
|
64692
64707
|
return this.getSubViewports(sheetId).some((pane) => pane.isVisible(col, row));
|
|
64693
64708
|
}
|
|
64709
|
+
isZoneVisibleInViewport(sheetId, zone) {
|
|
64710
|
+
return this.getSubViewports(sheetId).some((pane) => pane.isZoneVisible(zone));
|
|
64711
|
+
}
|
|
64694
64712
|
getScrollBarWidth() {
|
|
64695
64713
|
return 15 / this.zoomLevel;
|
|
64696
64714
|
}
|
|
@@ -69222,18 +69240,28 @@ var NamedRangeSelector = class extends Component {
|
|
|
69222
69240
|
return;
|
|
69223
69241
|
}
|
|
69224
69242
|
const activeSheetId = this.env.model.getters.getActiveSheetId();
|
|
69225
|
-
if (activeSheetId !== sheetId)
|
|
69226
|
-
|
|
69227
|
-
|
|
69228
|
-
|
|
69229
|
-
|
|
69243
|
+
if (activeSheetId !== sheetId) {
|
|
69244
|
+
if (!this.env.model.getters.getSheet(sheetId).isVisible) {
|
|
69245
|
+
this.env.notifyUser({
|
|
69246
|
+
text: _t("The sheet on which the range is defined is hidden."),
|
|
69247
|
+
type: "info",
|
|
69248
|
+
sticky: false
|
|
69249
|
+
});
|
|
69250
|
+
return;
|
|
69251
|
+
}
|
|
69252
|
+
this.env.model.dispatch("ACTIVATE_SHEET", {
|
|
69253
|
+
sheetIdFrom: activeSheetId,
|
|
69254
|
+
sheetIdTo: sheetId
|
|
69255
|
+
});
|
|
69256
|
+
}
|
|
69257
|
+
this.env.model.selection.selectCell(zone.right, zone.bottom, { allowsHiddenSelection: true });
|
|
69230
69258
|
this.env.model.selection.selectZone({
|
|
69231
69259
|
cell: {
|
|
69232
69260
|
col: zone.left,
|
|
69233
69261
|
row: zone.top
|
|
69234
69262
|
},
|
|
69235
69263
|
zone
|
|
69236
|
-
});
|
|
69264
|
+
}, { allowsHiddenSelection: true });
|
|
69237
69265
|
}
|
|
69238
69266
|
get selectionKey() {
|
|
69239
69267
|
return `${this.env.model.getters.getActiveSheetId()}-${zoneToXc(this.selectedZone)}`;
|
|
@@ -71642,7 +71670,7 @@ var SelectionStreamProcessorImpl = class {
|
|
|
71642
71670
|
/**
|
|
71643
71671
|
* Select a single cell as the new anchor.
|
|
71644
71672
|
*/
|
|
71645
|
-
selectCell(col, row) {
|
|
71673
|
+
selectCell(col, row, options) {
|
|
71646
71674
|
const zone = positionToZone({
|
|
71647
71675
|
col,
|
|
71648
71676
|
row
|
|
@@ -71653,7 +71681,10 @@ var SelectionStreamProcessorImpl = class {
|
|
|
71653
71681
|
col,
|
|
71654
71682
|
row
|
|
71655
71683
|
}
|
|
71656
|
-
}, {
|
|
71684
|
+
}, {
|
|
71685
|
+
scrollIntoView: true,
|
|
71686
|
+
...options
|
|
71687
|
+
});
|
|
71657
71688
|
}
|
|
71658
71689
|
/**
|
|
71659
71690
|
* Set the selection to one of the cells adjacent to the current anchor cell.
|
|
@@ -72008,15 +72039,21 @@ var SelectionStreamProcessorImpl = class {
|
|
|
72008
72039
|
return DispatchResult.Success;
|
|
72009
72040
|
}
|
|
72010
72041
|
checkEventAnchorZone(event) {
|
|
72011
|
-
return this.checkAnchorZone(event.anchor);
|
|
72042
|
+
return this.checkAnchorZone(event.anchor, event.options);
|
|
72012
72043
|
}
|
|
72013
|
-
checkAnchorZone(anchor) {
|
|
72044
|
+
checkAnchorZone(anchor, options) {
|
|
72014
72045
|
const { cell, zone } = anchor;
|
|
72015
72046
|
if (!isInside(cell.col, cell.row, zone)) return "InvalidAnchorZone";
|
|
72016
72047
|
const { left, right, top, bottom } = zone;
|
|
72017
72048
|
const sheetId = this.getters.getActiveSheetId();
|
|
72018
|
-
|
|
72019
|
-
|
|
72049
|
+
if (!options?.allowsHiddenSelection) {
|
|
72050
|
+
const refCol = this.getters.findVisibleHeader(sheetId, "COL", left, right);
|
|
72051
|
+
if (this.getters.findVisibleHeader(sheetId, "ROW", top, bottom) === void 0 || refCol === void 0) return "SelectionOutOfBound";
|
|
72052
|
+
} else {
|
|
72053
|
+
const numberCols = this.getters.getNumberCols(sheetId);
|
|
72054
|
+
const numberRows = this.getters.getNumberRows(sheetId);
|
|
72055
|
+
if (left < 0 || right > numberCols - 1 || top < 0 || bottom > numberRows - 1) return "SelectionOutOfBound";
|
|
72056
|
+
}
|
|
72020
72057
|
return "Success";
|
|
72021
72058
|
}
|
|
72022
72059
|
checkAnchorZoneOrThrow(anchor) {
|
|
@@ -84509,6 +84546,6 @@ const chartHelpers = {
|
|
|
84509
84546
|
//#endregion
|
|
84510
84547
|
export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CompiledFormula, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DispatchResult, EvaluationError, LocalTransportService, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, canExecuteInReadonly, categories, chartHelpers, components, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isSheetDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
|
|
84511
84548
|
|
|
84512
|
-
__info__.version = "19.3.
|
|
84513
|
-
__info__.date = "2026-07-
|
|
84514
|
-
__info__.hash = "
|
|
84549
|
+
__info__.version = "19.3.11";
|
|
84550
|
+
__info__.date = "2026-07-13T06:26:28.422Z";
|
|
84551
|
+
__info__.hash = "35c06d3";
|
|
@@ -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.3.
|
|
6
|
-
* @date 2026-07-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.3.11
|
|
6
|
+
* @date 2026-07-13T06:26:28.422Z
|
|
7
|
+
* @hash 35c06d3
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function(exports, _odoo_owl) {
|
|
@@ -14142,7 +14142,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
14142
14142
|
*/
|
|
14143
14143
|
function filterInvalidHierarchicalPoints(values, hierarchy) {
|
|
14144
14144
|
const numberOfDataPoints = Math.max(values.length, ...hierarchy.map((dataset) => dataset.data?.length || 0));
|
|
14145
|
-
const isEmpty = (value) => value === null || value === "";
|
|
14145
|
+
const isEmpty = (value) => value === void 0 || value === null || value === "";
|
|
14146
14146
|
const dataPointsIndexes = range(0, numberOfDataPoints).filter((dataPointIndex) => {
|
|
14147
14147
|
const groups = hierarchy.map((dataset) => dataset.data?.[dataPointIndex]);
|
|
14148
14148
|
if (isEmpty(groups[0]?.value)) return false;
|
|
@@ -56943,13 +56943,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
56943
56943
|
const minValue = this.parsePoint(sheetId, range, rule.minimum, "min");
|
|
56944
56944
|
const midValue = rule.midpoint ? this.parsePoint(sheetId, range, rule.midpoint) : null;
|
|
56945
56945
|
const maxValue = this.parsePoint(sheetId, range, rule.maximum, "max");
|
|
56946
|
-
if (minValue === null || maxValue === null || minValue >= maxValue || midValue && (minValue >= midValue || midValue >= maxValue)) return;
|
|
56946
|
+
if (minValue === null || maxValue === null || minValue >= maxValue || midValue !== null && (minValue >= midValue || midValue >= maxValue)) return;
|
|
56947
56947
|
const zone = this.getters.getRangeFromSheetXC(sheetId, range).zone;
|
|
56948
56948
|
const colorThresholds = [{
|
|
56949
56949
|
value: minValue,
|
|
56950
56950
|
color: rule.minimum.color
|
|
56951
56951
|
}];
|
|
56952
|
-
if (rule.midpoint && midValue) colorThresholds.push({
|
|
56952
|
+
if (rule.midpoint && midValue !== null) colorThresholds.push({
|
|
56953
56953
|
value: midValue,
|
|
56954
56954
|
color: rule.midpoint.color
|
|
56955
56955
|
});
|
|
@@ -64262,11 +64262,23 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
64262
64262
|
ctx.strokeStyle = SELECTION_BORDER_COLOR;
|
|
64263
64263
|
ctx.lineWidth = 1.5 * thinLineWidth;
|
|
64264
64264
|
for (const zone of zones) {
|
|
64265
|
+
if (!viewports.isZoneVisibleInViewport(sheetId, zone)) continue;
|
|
64265
64266
|
const { x, y, width, height } = viewports.getVisibleRect(sheetId, zone);
|
|
64266
64267
|
ctx.globalCompositeOperation = "multiply";
|
|
64267
|
-
|
|
64268
|
-
ctx.
|
|
64269
|
-
|
|
64268
|
+
const currentLineWidth = ctx.lineWidth;
|
|
64269
|
+
if (height === 0 || width === 0) ctx.lineWidth = 3 * thinLineWidth;
|
|
64270
|
+
if (height === 0 && width === 0) {
|
|
64271
|
+
ctx.beginPath();
|
|
64272
|
+
ctx.arc(x, y, 3, 0, 2 * Math.PI);
|
|
64273
|
+
ctx.fill();
|
|
64274
|
+
ctx.globalCompositeOperation = "source-over";
|
|
64275
|
+
ctx.stroke();
|
|
64276
|
+
} else {
|
|
64277
|
+
ctx.fillRect(x, y, width, height);
|
|
64278
|
+
ctx.globalCompositeOperation = "source-over";
|
|
64279
|
+
ctx.strokeRect(x, y, width, height);
|
|
64280
|
+
}
|
|
64281
|
+
ctx.lineWidth = currentLineWidth;
|
|
64270
64282
|
}
|
|
64271
64283
|
ctx.globalCompositeOperation = "source-over";
|
|
64272
64284
|
const position = renderingContext.activePosition;
|
|
@@ -64413,6 +64425,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
64413
64425
|
this.adjustViewportZoneX();
|
|
64414
64426
|
this.adjustViewportZoneY();
|
|
64415
64427
|
}
|
|
64428
|
+
isZoneVisible(zone) {
|
|
64429
|
+
return intersection(zone, this) !== void 0;
|
|
64430
|
+
}
|
|
64416
64431
|
/**
|
|
64417
64432
|
*
|
|
64418
64433
|
* Computes the visible coordinates & dimensions of a given zone inside the viewport
|
|
@@ -64693,6 +64708,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
64693
64708
|
isVisibleInViewport({ sheetId, col, row }) {
|
|
64694
64709
|
return this.getSubViewports(sheetId).some((pane) => pane.isVisible(col, row));
|
|
64695
64710
|
}
|
|
64711
|
+
isZoneVisibleInViewport(sheetId, zone) {
|
|
64712
|
+
return this.getSubViewports(sheetId).some((pane) => pane.isZoneVisible(zone));
|
|
64713
|
+
}
|
|
64696
64714
|
getScrollBarWidth() {
|
|
64697
64715
|
return 15 / this.zoomLevel;
|
|
64698
64716
|
}
|
|
@@ -69224,18 +69242,28 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
69224
69242
|
return;
|
|
69225
69243
|
}
|
|
69226
69244
|
const activeSheetId = this.env.model.getters.getActiveSheetId();
|
|
69227
|
-
if (activeSheetId !== sheetId)
|
|
69228
|
-
|
|
69229
|
-
|
|
69230
|
-
|
|
69231
|
-
|
|
69245
|
+
if (activeSheetId !== sheetId) {
|
|
69246
|
+
if (!this.env.model.getters.getSheet(sheetId).isVisible) {
|
|
69247
|
+
this.env.notifyUser({
|
|
69248
|
+
text: _t("The sheet on which the range is defined is hidden."),
|
|
69249
|
+
type: "info",
|
|
69250
|
+
sticky: false
|
|
69251
|
+
});
|
|
69252
|
+
return;
|
|
69253
|
+
}
|
|
69254
|
+
this.env.model.dispatch("ACTIVATE_SHEET", {
|
|
69255
|
+
sheetIdFrom: activeSheetId,
|
|
69256
|
+
sheetIdTo: sheetId
|
|
69257
|
+
});
|
|
69258
|
+
}
|
|
69259
|
+
this.env.model.selection.selectCell(zone.right, zone.bottom, { allowsHiddenSelection: true });
|
|
69232
69260
|
this.env.model.selection.selectZone({
|
|
69233
69261
|
cell: {
|
|
69234
69262
|
col: zone.left,
|
|
69235
69263
|
row: zone.top
|
|
69236
69264
|
},
|
|
69237
69265
|
zone
|
|
69238
|
-
});
|
|
69266
|
+
}, { allowsHiddenSelection: true });
|
|
69239
69267
|
}
|
|
69240
69268
|
get selectionKey() {
|
|
69241
69269
|
return `${this.env.model.getters.getActiveSheetId()}-${zoneToXc(this.selectedZone)}`;
|
|
@@ -71644,7 +71672,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
71644
71672
|
/**
|
|
71645
71673
|
* Select a single cell as the new anchor.
|
|
71646
71674
|
*/
|
|
71647
|
-
selectCell(col, row) {
|
|
71675
|
+
selectCell(col, row, options) {
|
|
71648
71676
|
const zone = positionToZone({
|
|
71649
71677
|
col,
|
|
71650
71678
|
row
|
|
@@ -71655,7 +71683,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
71655
71683
|
col,
|
|
71656
71684
|
row
|
|
71657
71685
|
}
|
|
71658
|
-
}, {
|
|
71686
|
+
}, {
|
|
71687
|
+
scrollIntoView: true,
|
|
71688
|
+
...options
|
|
71689
|
+
});
|
|
71659
71690
|
}
|
|
71660
71691
|
/**
|
|
71661
71692
|
* Set the selection to one of the cells adjacent to the current anchor cell.
|
|
@@ -72010,15 +72041,21 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
72010
72041
|
return DispatchResult.Success;
|
|
72011
72042
|
}
|
|
72012
72043
|
checkEventAnchorZone(event) {
|
|
72013
|
-
return this.checkAnchorZone(event.anchor);
|
|
72044
|
+
return this.checkAnchorZone(event.anchor, event.options);
|
|
72014
72045
|
}
|
|
72015
|
-
checkAnchorZone(anchor) {
|
|
72046
|
+
checkAnchorZone(anchor, options) {
|
|
72016
72047
|
const { cell, zone } = anchor;
|
|
72017
72048
|
if (!isInside(cell.col, cell.row, zone)) return "InvalidAnchorZone";
|
|
72018
72049
|
const { left, right, top, bottom } = zone;
|
|
72019
72050
|
const sheetId = this.getters.getActiveSheetId();
|
|
72020
|
-
|
|
72021
|
-
|
|
72051
|
+
if (!options?.allowsHiddenSelection) {
|
|
72052
|
+
const refCol = this.getters.findVisibleHeader(sheetId, "COL", left, right);
|
|
72053
|
+
if (this.getters.findVisibleHeader(sheetId, "ROW", top, bottom) === void 0 || refCol === void 0) return "SelectionOutOfBound";
|
|
72054
|
+
} else {
|
|
72055
|
+
const numberCols = this.getters.getNumberCols(sheetId);
|
|
72056
|
+
const numberRows = this.getters.getNumberRows(sheetId);
|
|
72057
|
+
if (left < 0 || right > numberCols - 1 || top < 0 || bottom > numberRows - 1) return "SelectionOutOfBound";
|
|
72058
|
+
}
|
|
72022
72059
|
return "Success";
|
|
72023
72060
|
}
|
|
72024
72061
|
checkAnchorZoneOrThrow(anchor) {
|
|
@@ -84569,8 +84606,8 @@ exports.stores = stores;
|
|
|
84569
84606
|
exports.tokenColors = tokenColors;
|
|
84570
84607
|
exports.tokenize = tokenize;
|
|
84571
84608
|
|
|
84572
|
-
__info__.version = "19.3.
|
|
84573
|
-
__info__.date = "2026-07-
|
|
84574
|
-
__info__.hash = "
|
|
84609
|
+
__info__.version = "19.3.11";
|
|
84610
|
+
__info__.date = "2026-07-13T06:26:28.422Z";
|
|
84611
|
+
__info__.hash = "35c06d3";
|
|
84575
84612
|
|
|
84576
84613
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|