@odoo/o-spreadsheet 18.2.32 → 18.2.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/o-spreadsheet.cjs.js +142 -110
- package/dist/o-spreadsheet.d.ts +10 -10
- package/dist/o-spreadsheet.esm.js +142 -110
- package/dist/o-spreadsheet.iife.js +142 -110
- package/dist/o-spreadsheet.iife.min.js +382 -381
- package/dist/o_spreadsheet.xml +7 -6
- package/package.json +2 -2
|
@@ -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.2.
|
|
6
|
-
* @date 2025-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.2.34
|
|
6
|
+
* @date 2025-11-12T14:15:32.431Z
|
|
7
|
+
* @hash 9ca0c4c
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { useEnv, useSubEnv, onWillUnmount, useComponent, status, Component, useRef, onMounted, useEffect, App, blockDom, useState, onPatched, onWillPatch, onWillUpdateProps, useExternalListener, onWillStart, xml, useChildSubEnv, markRaw, toRaw } from '@odoo/owl';
|
|
@@ -3914,7 +3914,17 @@ function toNumberMatrix(data, argName) {
|
|
|
3914
3914
|
return toMatrix(data).map((row) => {
|
|
3915
3915
|
return row.map((cell) => {
|
|
3916
3916
|
if (typeof cell.value !== "number") {
|
|
3917
|
-
|
|
3917
|
+
let message = "";
|
|
3918
|
+
if (typeof cell === "object") {
|
|
3919
|
+
message = _t("Function [[FUNCTION_NAME]] expects number values for %s, but got an empty value.", argName);
|
|
3920
|
+
}
|
|
3921
|
+
else if (typeof cell === "string") {
|
|
3922
|
+
message = _t("Function [[FUNCTION_NAME]] expects number values for %s, but got a string.", argName);
|
|
3923
|
+
}
|
|
3924
|
+
else if (typeof cell === "boolean") {
|
|
3925
|
+
message = _t("Function [[FUNCTION_NAME]] expects number values for %s, but got a boolean.", argName);
|
|
3926
|
+
}
|
|
3927
|
+
throw new EvaluationError(message);
|
|
3918
3928
|
}
|
|
3919
3929
|
return cell.value;
|
|
3920
3930
|
});
|
|
@@ -8816,7 +8826,7 @@ class CellClipboardHandler extends AbstractCellClipboardHandler {
|
|
|
8816
8826
|
pasteCell(origin, target, clipboardOption) {
|
|
8817
8827
|
const { sheetId, col, row } = target;
|
|
8818
8828
|
const targetCell = this.getters.getEvaluatedCell(target);
|
|
8819
|
-
const originFormat = origin?.format
|
|
8829
|
+
const originFormat = origin?.format || origin.evaluatedCell.format;
|
|
8820
8830
|
if (clipboardOption?.pasteOption === "asValue") {
|
|
8821
8831
|
this.dispatch("UPDATE_CELL", {
|
|
8822
8832
|
...target,
|
|
@@ -10437,6 +10447,10 @@ const chartShowValuesPlugin = {
|
|
|
10437
10447
|
}
|
|
10438
10448
|
const ctx = chart.ctx;
|
|
10439
10449
|
ctx.save();
|
|
10450
|
+
const { left, top, height, width } = chart.chartArea;
|
|
10451
|
+
ctx.beginPath();
|
|
10452
|
+
ctx.rect(left, top, width, height);
|
|
10453
|
+
ctx.clip();
|
|
10440
10454
|
ctx.textAlign = "center";
|
|
10441
10455
|
ctx.textBaseline = "middle";
|
|
10442
10456
|
ctx.miterLimit = 1; // Avoid sharp artifacts on strokeText
|
|
@@ -10885,7 +10899,7 @@ let ScorecardChart$1 = class ScorecardChart extends AbstractChart {
|
|
|
10885
10899
|
return {
|
|
10886
10900
|
background: context.background,
|
|
10887
10901
|
type: "scorecard",
|
|
10888
|
-
keyValue: context.range
|
|
10902
|
+
keyValue: context.range?.[0]?.dataRange,
|
|
10889
10903
|
title: context.title || { text: "" },
|
|
10890
10904
|
baselineMode: DEFAULT_SCORECARD_BASELINE_MODE,
|
|
10891
10905
|
baselineColorUp: DEFAULT_SCORECARD_BASELINE_COLOR_UP,
|
|
@@ -13642,7 +13656,7 @@ const GROWTH = {
|
|
|
13642
13656
|
],
|
|
13643
13657
|
compute: function (knownDataY, knownDataX = [[]], newDataX = [[]], b = { value: true }) {
|
|
13644
13658
|
assertNonEmptyMatrix(knownDataY, "known_data_y");
|
|
13645
|
-
return expM(predictLinearValues(logM(toNumberMatrix(knownDataY, "
|
|
13659
|
+
return expM(predictLinearValues(logM(toNumberMatrix(knownDataY, "known_data_y")), toNumberMatrix(knownDataX, "known_data_x"), toNumberMatrix(newDataX, "new_data_y"), toBoolean(b)));
|
|
13646
13660
|
},
|
|
13647
13661
|
};
|
|
13648
13662
|
// -----------------------------------------------------------------------------
|
|
@@ -13707,7 +13721,7 @@ const LINEST = {
|
|
|
13707
13721
|
],
|
|
13708
13722
|
compute: function (dataY, dataX = [[]], calculateB = { value: true }, verbose = { value: false }) {
|
|
13709
13723
|
assertNonEmptyMatrix(dataY, "data_y");
|
|
13710
|
-
return fullLinearRegression(toNumberMatrix(dataX, "
|
|
13724
|
+
return fullLinearRegression(toNumberMatrix(dataX, "data_x"), toNumberMatrix(dataY, "data_y"), toBoolean(calculateB), toBoolean(verbose));
|
|
13711
13725
|
},
|
|
13712
13726
|
isExported: true,
|
|
13713
13727
|
};
|
|
@@ -13724,7 +13738,7 @@ const LOGEST = {
|
|
|
13724
13738
|
],
|
|
13725
13739
|
compute: function (dataY, dataX = [[]], calculateB = { value: true }, verbose = { value: false }) {
|
|
13726
13740
|
assertNonEmptyMatrix(dataY, "data_y");
|
|
13727
|
-
const coeffs = fullLinearRegression(toNumberMatrix(dataX, "
|
|
13741
|
+
const coeffs = fullLinearRegression(toNumberMatrix(dataX, "data_x"), logM(toNumberMatrix(dataY, "data_y")), toBoolean(calculateB), toBoolean(verbose));
|
|
13728
13742
|
for (let i = 0; i < coeffs.length; i++) {
|
|
13729
13743
|
coeffs[i][0] = Math.exp(coeffs[i][0]);
|
|
13730
13744
|
}
|
|
@@ -14314,7 +14328,7 @@ const TREND = {
|
|
|
14314
14328
|
],
|
|
14315
14329
|
compute: function (knownDataY, knownDataX = [[]], newDataX = [[]], b = { value: true }) {
|
|
14316
14330
|
assertNonEmptyMatrix(knownDataY, "known_data_y");
|
|
14317
|
-
return predictLinearValues(toNumberMatrix(knownDataY, "
|
|
14331
|
+
return predictLinearValues(toNumberMatrix(knownDataY, "known_data_y"), toNumberMatrix(knownDataX, "known_data_x"), toNumberMatrix(newDataX, "new_data_y"), toBoolean(b));
|
|
14318
14332
|
},
|
|
14319
14333
|
};
|
|
14320
14334
|
// -----------------------------------------------------------------------------
|
|
@@ -18570,28 +18584,38 @@ function getTokenNextReferenceType(xc) {
|
|
|
18570
18584
|
return xc;
|
|
18571
18585
|
}
|
|
18572
18586
|
/**
|
|
18573
|
-
* Returns the given XC with the given reference type.
|
|
18587
|
+
* Returns the given XC with the given reference type.
|
|
18574
18588
|
*/
|
|
18575
18589
|
function setXcToFixedReferenceType(xc, referenceType) {
|
|
18576
|
-
|
|
18577
|
-
|
|
18578
|
-
|
|
18590
|
+
let sheetName;
|
|
18591
|
+
({ sheetName, xc } = splitReference(xc));
|
|
18592
|
+
sheetName = sheetName ? sheetName + "!" : "";
|
|
18579
18593
|
xc = xc.replace(/\$/g, "");
|
|
18580
|
-
|
|
18594
|
+
const splitIndex = xc.indexOf(":");
|
|
18595
|
+
if (splitIndex >= 0) {
|
|
18596
|
+
return `${sheetName}${_setXcToFixedReferenceType(xc.slice(0, splitIndex), referenceType)}:${_setXcToFixedReferenceType(xc.slice(splitIndex + 1), referenceType)}`;
|
|
18597
|
+
}
|
|
18598
|
+
else {
|
|
18599
|
+
return sheetName + _setXcToFixedReferenceType(xc, referenceType);
|
|
18600
|
+
}
|
|
18601
|
+
}
|
|
18602
|
+
function _setXcToFixedReferenceType(xc, referenceType) {
|
|
18603
|
+
const indexOfNumber = xc.search(/[0-9]/);
|
|
18604
|
+
const hasCol = indexOfNumber !== 0;
|
|
18605
|
+
const hasRow = indexOfNumber >= 0;
|
|
18581
18606
|
switch (referenceType) {
|
|
18582
18607
|
case "col":
|
|
18608
|
+
if (!hasCol)
|
|
18609
|
+
return xc;
|
|
18583
18610
|
return "$" + xc;
|
|
18584
18611
|
case "row":
|
|
18585
|
-
|
|
18612
|
+
if (!hasRow)
|
|
18613
|
+
return xc;
|
|
18586
18614
|
return xc.slice(0, indexOfNumber) + "$" + xc.slice(indexOfNumber);
|
|
18587
18615
|
case "colrow":
|
|
18588
|
-
|
|
18589
|
-
if (indexOfNumber === -1 || indexOfNumber === 0) {
|
|
18590
|
-
// no row number (eg. A) or no column (eg. 1)
|
|
18616
|
+
if (!hasRow || !hasCol)
|
|
18591
18617
|
return "$" + xc;
|
|
18592
|
-
|
|
18593
|
-
xc = xc.slice(0, indexOfNumber) + "$" + xc.slice(indexOfNumber);
|
|
18594
|
-
return "$" + xc;
|
|
18618
|
+
return "$" + xc.slice(0, indexOfNumber) + "$" + xc.slice(indexOfNumber);
|
|
18595
18619
|
case "none":
|
|
18596
18620
|
return xc;
|
|
18597
18621
|
}
|
|
@@ -21106,6 +21130,7 @@ class AbstractComposerStore extends SpreadsheetStore {
|
|
|
21106
21130
|
this.highlightStore.register(this);
|
|
21107
21131
|
this.onDispose(() => {
|
|
21108
21132
|
this.highlightStore.unRegister(this);
|
|
21133
|
+
this._cancelEdition();
|
|
21109
21134
|
});
|
|
21110
21135
|
}
|
|
21111
21136
|
handleEvent(event) {
|
|
@@ -23745,6 +23770,74 @@ iconsOnCellRegistry.add("conditional_formatting", (getters, position) => {
|
|
|
23745
23770
|
}
|
|
23746
23771
|
});
|
|
23747
23772
|
|
|
23773
|
+
/**
|
|
23774
|
+
* Get the relative path between two files
|
|
23775
|
+
*
|
|
23776
|
+
* Eg.:
|
|
23777
|
+
* from "folder1/file1.txt" to "folder2/file2.txt" => "../folder2/file2.txt"
|
|
23778
|
+
*/
|
|
23779
|
+
function getRelativePath(from, to) {
|
|
23780
|
+
const fromPathParts = from.split("/");
|
|
23781
|
+
const toPathParts = to.split("/");
|
|
23782
|
+
let relPath = "";
|
|
23783
|
+
let startIndex = 0;
|
|
23784
|
+
for (let i = 0; i < fromPathParts.length - 1; i++) {
|
|
23785
|
+
if (fromPathParts[i] === toPathParts[i]) {
|
|
23786
|
+
startIndex++;
|
|
23787
|
+
}
|
|
23788
|
+
else {
|
|
23789
|
+
relPath += "../";
|
|
23790
|
+
}
|
|
23791
|
+
}
|
|
23792
|
+
relPath += toPathParts.slice(startIndex).join("/");
|
|
23793
|
+
return relPath;
|
|
23794
|
+
}
|
|
23795
|
+
/**
|
|
23796
|
+
* Convert an array of element into an object where the objects keys were the elements position in the array.
|
|
23797
|
+
* Can give an offset as argument, and all the array indexes will we shifted by this offset in the returned object.
|
|
23798
|
+
*
|
|
23799
|
+
* eg. : ["a", "b"] => {0:"a", 1:"b"}
|
|
23800
|
+
*/
|
|
23801
|
+
function arrayToObject(array, indexOffset = 0) {
|
|
23802
|
+
const obj = {};
|
|
23803
|
+
for (let i = 0; i < array.length; i++) {
|
|
23804
|
+
if (array[i]) {
|
|
23805
|
+
obj[i + indexOffset] = array[i];
|
|
23806
|
+
}
|
|
23807
|
+
}
|
|
23808
|
+
return obj;
|
|
23809
|
+
}
|
|
23810
|
+
/**
|
|
23811
|
+
* In xlsx we can have string with unicode characters with the format _x00fa_.
|
|
23812
|
+
* Replace with characters understandable by JS
|
|
23813
|
+
*/
|
|
23814
|
+
function fixXlsxUnicode(str) {
|
|
23815
|
+
return str.replace(/_x([0-9a-zA-Z]{4})_/g, (match, code) => {
|
|
23816
|
+
return String.fromCharCode(parseInt(code, 16));
|
|
23817
|
+
});
|
|
23818
|
+
}
|
|
23819
|
+
/** Get a header in the SheetData. Create the header if it doesn't exist in the SheetData */
|
|
23820
|
+
function getSheetDataHeader(sheetData, dimension, index) {
|
|
23821
|
+
if (dimension === "COL") {
|
|
23822
|
+
if (!sheetData.cols[index]) {
|
|
23823
|
+
sheetData.cols[index] = {};
|
|
23824
|
+
}
|
|
23825
|
+
return sheetData.cols[index];
|
|
23826
|
+
}
|
|
23827
|
+
if (!sheetData.rows[index]) {
|
|
23828
|
+
sheetData.rows[index] = {};
|
|
23829
|
+
}
|
|
23830
|
+
return sheetData.rows[index];
|
|
23831
|
+
}
|
|
23832
|
+
/** Prefix the string by "=" if the string looks like a formula */
|
|
23833
|
+
function prefixFormulaWithEqual(formula) {
|
|
23834
|
+
if (formula[0] === "=") {
|
|
23835
|
+
return formula;
|
|
23836
|
+
}
|
|
23837
|
+
const tokens = tokenize(formula);
|
|
23838
|
+
return tokens.length === 1 && tokens[0].type !== "REFERENCE" ? formula : "=" + formula;
|
|
23839
|
+
}
|
|
23840
|
+
|
|
23748
23841
|
/**
|
|
23749
23842
|
* Map of the different types of conversions warnings and their name in error messages
|
|
23750
23843
|
*/
|
|
@@ -24252,66 +24345,6 @@ function hexaToInt(hex) {
|
|
|
24252
24345
|
*/
|
|
24253
24346
|
const DEFAULT_SYSTEM_COLOR = "FF000000";
|
|
24254
24347
|
|
|
24255
|
-
/**
|
|
24256
|
-
* Get the relative path between two files
|
|
24257
|
-
*
|
|
24258
|
-
* Eg.:
|
|
24259
|
-
* from "folder1/file1.txt" to "folder2/file2.txt" => "../folder2/file2.txt"
|
|
24260
|
-
*/
|
|
24261
|
-
function getRelativePath(from, to) {
|
|
24262
|
-
const fromPathParts = from.split("/");
|
|
24263
|
-
const toPathParts = to.split("/");
|
|
24264
|
-
let relPath = "";
|
|
24265
|
-
let startIndex = 0;
|
|
24266
|
-
for (let i = 0; i < fromPathParts.length - 1; i++) {
|
|
24267
|
-
if (fromPathParts[i] === toPathParts[i]) {
|
|
24268
|
-
startIndex++;
|
|
24269
|
-
}
|
|
24270
|
-
else {
|
|
24271
|
-
relPath += "../";
|
|
24272
|
-
}
|
|
24273
|
-
}
|
|
24274
|
-
relPath += toPathParts.slice(startIndex).join("/");
|
|
24275
|
-
return relPath;
|
|
24276
|
-
}
|
|
24277
|
-
/**
|
|
24278
|
-
* Convert an array of element into an object where the objects keys were the elements position in the array.
|
|
24279
|
-
* Can give an offset as argument, and all the array indexes will we shifted by this offset in the returned object.
|
|
24280
|
-
*
|
|
24281
|
-
* eg. : ["a", "b"] => {0:"a", 1:"b"}
|
|
24282
|
-
*/
|
|
24283
|
-
function arrayToObject(array, indexOffset = 0) {
|
|
24284
|
-
const obj = {};
|
|
24285
|
-
for (let i = 0; i < array.length; i++) {
|
|
24286
|
-
if (array[i]) {
|
|
24287
|
-
obj[i + indexOffset] = array[i];
|
|
24288
|
-
}
|
|
24289
|
-
}
|
|
24290
|
-
return obj;
|
|
24291
|
-
}
|
|
24292
|
-
/**
|
|
24293
|
-
* In xlsx we can have string with unicode characters with the format _x00fa_.
|
|
24294
|
-
* Replace with characters understandable by JS
|
|
24295
|
-
*/
|
|
24296
|
-
function fixXlsxUnicode(str) {
|
|
24297
|
-
return str.replace(/_x([0-9a-zA-Z]{4})_/g, (match, code) => {
|
|
24298
|
-
return String.fromCharCode(parseInt(code, 16));
|
|
24299
|
-
});
|
|
24300
|
-
}
|
|
24301
|
-
/** Get a header in the SheetData. Create the header if it doesn't exist in the SheetData */
|
|
24302
|
-
function getSheetDataHeader(sheetData, dimension, index) {
|
|
24303
|
-
if (dimension === "COL") {
|
|
24304
|
-
if (!sheetData.cols[index]) {
|
|
24305
|
-
sheetData.cols[index] = {};
|
|
24306
|
-
}
|
|
24307
|
-
return sheetData.cols[index];
|
|
24308
|
-
}
|
|
24309
|
-
if (!sheetData.rows[index]) {
|
|
24310
|
-
sheetData.rows[index] = {};
|
|
24311
|
-
}
|
|
24312
|
-
return sheetData.rows[index];
|
|
24313
|
-
}
|
|
24314
|
-
|
|
24315
24348
|
const XLSX_DATE_FORMAT_REGEX = /^(yy|yyyy|m{1,5}|d{1,4}|h{1,2}|s{1,2}|am\/pm|a\/m|\s|-|\/|\.|:)+$/i;
|
|
24316
24349
|
/**
|
|
24317
24350
|
* Convert excel format to o_spreadsheet format
|
|
@@ -24521,9 +24554,9 @@ function convertConditionalFormats(xlsxCfs, dxfs, warningManager) {
|
|
|
24521
24554
|
if (!rule.operator || !rule.formula || rule.formula.length === 0)
|
|
24522
24555
|
continue;
|
|
24523
24556
|
operator = convertCFCellIsOperator(rule.operator);
|
|
24524
|
-
values.push(
|
|
24557
|
+
values.push(prefixFormulaWithEqual(rule.formula[0]));
|
|
24525
24558
|
if (rule.formula.length === 2) {
|
|
24526
|
-
values.push(
|
|
24559
|
+
values.push(prefixFormulaWithEqual(rule.formula[1]));
|
|
24527
24560
|
}
|
|
24528
24561
|
break;
|
|
24529
24562
|
}
|
|
@@ -24681,11 +24714,6 @@ function convertIcons(xlsxIconSet, index) {
|
|
|
24681
24714
|
? ICON_SETS[iconSet].neutral
|
|
24682
24715
|
: ICON_SETS[iconSet].good;
|
|
24683
24716
|
}
|
|
24684
|
-
/** Prefix the string by "=" if the string looks like a formula */
|
|
24685
|
-
function prefixFormula(formula) {
|
|
24686
|
-
const tokens = tokenize(formula);
|
|
24687
|
-
return tokens.length === 1 && tokens[0].type !== "REFERENCE" ? formula : "=" + formula;
|
|
24688
|
-
}
|
|
24689
24717
|
// ---------------------------------------------------------------------------
|
|
24690
24718
|
// Warnings
|
|
24691
24719
|
// ---------------------------------------------------------------------------
|
|
@@ -25106,7 +25134,7 @@ function convertDataValidationRules(xlsxDataValidations, warningManager) {
|
|
|
25106
25134
|
dvRules.push(decimalRule);
|
|
25107
25135
|
break;
|
|
25108
25136
|
case "list":
|
|
25109
|
-
const listRule =
|
|
25137
|
+
const listRule = convertListRule(dvId++, dv);
|
|
25110
25138
|
dvRules.push(listRule);
|
|
25111
25139
|
break;
|
|
25112
25140
|
case "date":
|
|
@@ -25126,9 +25154,9 @@ function convertDataValidationRules(xlsxDataValidations, warningManager) {
|
|
|
25126
25154
|
return dvRules;
|
|
25127
25155
|
}
|
|
25128
25156
|
function convertDecimalRule(id, dv) {
|
|
25129
|
-
const values = [dv.formula1.toString()];
|
|
25157
|
+
const values = [prefixFormulaWithEqual(dv.formula1.toString())];
|
|
25130
25158
|
if (dv.formula2) {
|
|
25131
|
-
values.push(dv.formula2.toString());
|
|
25159
|
+
values.push(prefixFormulaWithEqual(dv.formula2.toString()));
|
|
25132
25160
|
}
|
|
25133
25161
|
return {
|
|
25134
25162
|
id: id.toString(),
|
|
@@ -25140,7 +25168,7 @@ function convertDecimalRule(id, dv) {
|
|
|
25140
25168
|
},
|
|
25141
25169
|
};
|
|
25142
25170
|
}
|
|
25143
|
-
function
|
|
25171
|
+
function convertListRule(id, dv) {
|
|
25144
25172
|
const formula1 = dv.formula1.toString();
|
|
25145
25173
|
const isRangeRule = rangeReference.test(formula1);
|
|
25146
25174
|
return {
|
|
@@ -25156,9 +25184,9 @@ function convertListrule(id, dv) {
|
|
|
25156
25184
|
}
|
|
25157
25185
|
function convertDateRule(id, dv) {
|
|
25158
25186
|
let criterion;
|
|
25159
|
-
const values = [dv.formula1.toString()];
|
|
25187
|
+
const values = [prefixFormulaWithEqual(dv.formula1.toString())];
|
|
25160
25188
|
if (dv.formula2) {
|
|
25161
|
-
values.push(dv.formula2.toString());
|
|
25189
|
+
values.push(prefixFormulaWithEqual(dv.formula2.toString()));
|
|
25162
25190
|
criterion = {
|
|
25163
25191
|
type: XLSX_DV_DATE_OPERATOR_TO_DV_TYPE_MAPPING[dv.operator],
|
|
25164
25192
|
values: getDateCriterionFormattedValues(values, DEFAULT_LOCALE),
|
|
@@ -25185,7 +25213,7 @@ function convertCustomRule(id, dv) {
|
|
|
25185
25213
|
isBlocking: dv.errorStyle !== "warning",
|
|
25186
25214
|
criterion: {
|
|
25187
25215
|
type: "customFormula",
|
|
25188
|
-
values: [
|
|
25216
|
+
values: [prefixFormulaWithEqual(dv.formula1.toString())],
|
|
25189
25217
|
},
|
|
25190
25218
|
};
|
|
25191
25219
|
}
|
|
@@ -28917,6 +28945,7 @@ function getChartTimeOptions(labels, labelFormat, locale) {
|
|
|
28917
28945
|
parser: luxonFormat,
|
|
28918
28946
|
displayFormats,
|
|
28919
28947
|
unit: timeUnit ?? false,
|
|
28948
|
+
tooltipFormat: luxonFormat,
|
|
28920
28949
|
};
|
|
28921
28950
|
}
|
|
28922
28951
|
/**
|
|
@@ -30095,6 +30124,7 @@ function getLineChartScales(definition, args) {
|
|
|
30095
30124
|
};
|
|
30096
30125
|
Object.assign(scales.x, axis);
|
|
30097
30126
|
scales.x.ticks.maxTicksLimit = 15;
|
|
30127
|
+
delete scales?.x?.ticks?.callback;
|
|
30098
30128
|
}
|
|
30099
30129
|
else if (axisType === "linear") {
|
|
30100
30130
|
scales.x.type = "linear";
|
|
@@ -31123,7 +31153,7 @@ class GaugeChart extends AbstractChart {
|
|
|
31123
31153
|
background: context.background,
|
|
31124
31154
|
title: context.title || { text: "" },
|
|
31125
31155
|
type: "gauge",
|
|
31126
|
-
dataRange: context.range
|
|
31156
|
+
dataRange: context.range?.[0]?.dataRange,
|
|
31127
31157
|
sectionRule: {
|
|
31128
31158
|
colors: {
|
|
31129
31159
|
lowerColor: DEFAULT_GAUGE_LOWER_COLOR,
|
|
@@ -44206,6 +44236,7 @@ class DataValidationInput extends Component {
|
|
|
44206
44236
|
placeholder: this.placeholder,
|
|
44207
44237
|
class: "o-sidePanel-composer",
|
|
44208
44238
|
defaultRangeSheetId: this.env.model.getters.getActiveSheetId(),
|
|
44239
|
+
defaultStatic: true,
|
|
44209
44240
|
};
|
|
44210
44241
|
}
|
|
44211
44242
|
get errorMessage() {
|
|
@@ -44550,12 +44581,13 @@ class DataValidationEditor extends Component {
|
|
|
44550
44581
|
onCloseSidePanel: { type: Function, optional: true },
|
|
44551
44582
|
};
|
|
44552
44583
|
state = useState({ rule: this.defaultDataValidationRule, errors: [] });
|
|
44584
|
+
editingSheetId;
|
|
44553
44585
|
setup() {
|
|
44586
|
+
this.editingSheetId = this.env.model.getters.getActiveSheetId();
|
|
44554
44587
|
if (this.props.rule) {
|
|
44555
|
-
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
44556
44588
|
this.state.rule = {
|
|
44557
44589
|
...this.props.rule,
|
|
44558
|
-
ranges: this.props.rule.ranges.map((range) => this.env.model.getters.getRangeString(range,
|
|
44590
|
+
ranges: this.props.rule.ranges.map((range) => this.env.model.getters.getRangeString(range, this.editingSheetId)),
|
|
44559
44591
|
};
|
|
44560
44592
|
this.state.rule.criterion.type = this.props.rule.criterion.type;
|
|
44561
44593
|
}
|
|
@@ -44589,7 +44621,6 @@ class DataValidationEditor extends Component {
|
|
|
44589
44621
|
const locale = this.env.model.getters.getLocale();
|
|
44590
44622
|
const criterion = rule.criterion;
|
|
44591
44623
|
const criterionEvaluator = dataValidationEvaluatorRegistry.get(criterion.type);
|
|
44592
|
-
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
44593
44624
|
const values = criterion.values
|
|
44594
44625
|
.slice(0, criterionEvaluator.numberOfValues(criterion))
|
|
44595
44626
|
.map((value) => value?.trim())
|
|
@@ -44597,8 +44628,8 @@ class DataValidationEditor extends Component {
|
|
|
44597
44628
|
.map((value) => canonicalizeContent(value, locale));
|
|
44598
44629
|
rule.criterion = { ...criterion, values };
|
|
44599
44630
|
return {
|
|
44600
|
-
sheetId,
|
|
44601
|
-
ranges: this.state.rule.ranges.map((xc) => this.env.model.getters.getRangeDataFromXc(
|
|
44631
|
+
sheetId: this.editingSheetId,
|
|
44632
|
+
ranges: this.state.rule.ranges.map((xc) => this.env.model.getters.getRangeDataFromXc(this.editingSheetId, xc)),
|
|
44602
44633
|
rule,
|
|
44603
44634
|
};
|
|
44604
44635
|
}
|
|
@@ -45128,6 +45159,7 @@ css /* scss */ `
|
|
|
45128
45159
|
.o-button {
|
|
45129
45160
|
height: 19px;
|
|
45130
45161
|
width: 19px;
|
|
45162
|
+
box-sizing: content-box;
|
|
45131
45163
|
.o-icon {
|
|
45132
45164
|
height: 14px;
|
|
45133
45165
|
width: 14px;
|
|
@@ -57832,7 +57864,7 @@ class RangeAdapter {
|
|
|
57832
57864
|
let sheetName = "";
|
|
57833
57865
|
if (prefixSheet) {
|
|
57834
57866
|
if (rangeImpl.invalidSheetName) {
|
|
57835
|
-
sheetName = rangeImpl.invalidSheetName;
|
|
57867
|
+
sheetName = getCanonicalSymbolName(rangeImpl.invalidSheetName);
|
|
57836
57868
|
}
|
|
57837
57869
|
else {
|
|
57838
57870
|
sheetName = getCanonicalSymbolName(this.getters.getSheetName(rangeImpl.sheetId));
|
|
@@ -61137,7 +61169,7 @@ class FormulaDependencyGraph {
|
|
|
61137
61169
|
* in the correct order they should be evaluated.
|
|
61138
61170
|
* This is called a topological ordering (excluding cycles)
|
|
61139
61171
|
*/
|
|
61140
|
-
getCellsDependingOn(ranges) {
|
|
61172
|
+
getCellsDependingOn(ranges, ignore) {
|
|
61141
61173
|
const visited = this.createEmptyPositionSet();
|
|
61142
61174
|
const queue = Array.from(ranges).reverse();
|
|
61143
61175
|
while (queue.length > 0) {
|
|
@@ -61152,7 +61184,7 @@ class FormulaDependencyGraph {
|
|
|
61152
61184
|
const impactedPositions = this.rTree.search(range).map((dep) => dep.data);
|
|
61153
61185
|
const nextInQueue = {};
|
|
61154
61186
|
for (const position of impactedPositions) {
|
|
61155
|
-
if (!visited.has(position)) {
|
|
61187
|
+
if (!visited.has(position) && !ignore.has(position)) {
|
|
61156
61188
|
if (!nextInQueue[position.sheetId]) {
|
|
61157
61189
|
nextInQueue[position.sheetId] = [];
|
|
61158
61190
|
}
|
|
@@ -61709,7 +61741,7 @@ class Evaluator {
|
|
|
61709
61741
|
}
|
|
61710
61742
|
invalidatePositionsDependingOnSpread(sheetId, resultZone) {
|
|
61711
61743
|
// the result matrix is split in 2 zones to exclude the array formula position
|
|
61712
|
-
const invalidatedPositions = this.formulaDependencies().getCellsDependingOn(excludeTopLeft(resultZone).map((zone) => ({ sheetId, zone })));
|
|
61744
|
+
const invalidatedPositions = this.formulaDependencies().getCellsDependingOn(excludeTopLeft(resultZone).map((zone) => ({ sheetId, zone })), this.nextPositionsToUpdate);
|
|
61713
61745
|
invalidatedPositions.delete({ sheetId, col: resultZone.left, row: resultZone.top });
|
|
61714
61746
|
this.nextPositionsToUpdate.addMany(invalidatedPositions);
|
|
61715
61747
|
}
|
|
@@ -61827,7 +61859,7 @@ class Evaluator {
|
|
|
61827
61859
|
for (const sheetId in zonesBySheetIds) {
|
|
61828
61860
|
ranges.push(...zonesBySheetIds[sheetId].map((zone) => ({ sheetId, zone })));
|
|
61829
61861
|
}
|
|
61830
|
-
return this.formulaDependencies().getCellsDependingOn(ranges);
|
|
61862
|
+
return this.formulaDependencies().getCellsDependingOn(ranges, this.nextPositionsToUpdate);
|
|
61831
61863
|
}
|
|
61832
61864
|
}
|
|
61833
61865
|
function forEachSpreadPositionInMatrix(nbColumns, nbRows, callback) {
|
|
@@ -77306,6 +77338,6 @@ const chartHelpers = { ...CHART_HELPERS, ...CHART_RUNTIME_HELPERS };
|
|
|
77306
77338
|
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, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
|
|
77307
77339
|
|
|
77308
77340
|
|
|
77309
|
-
__info__.version = "18.2.
|
|
77310
|
-
__info__.date = "2025-
|
|
77311
|
-
__info__.hash = "
|
|
77341
|
+
__info__.version = "18.2.34";
|
|
77342
|
+
__info__.date = "2025-11-12T14:15:32.431Z";
|
|
77343
|
+
__info__.hash = "9ca0c4c";
|