@odoo/o-spreadsheet 18.4.1 → 18.4.3
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 +207 -85
- package/dist/o-spreadsheet.d.ts +40 -2
- package/dist/o-spreadsheet.esm.js +207 -85
- package/dist/o-spreadsheet.iife.js +207 -85
- package/dist/o-spreadsheet.iife.min.js +391 -391
- package/dist/o_spreadsheet.xml +9 -7
- package/package.json +1 -1
|
@@ -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.4.
|
|
6
|
-
* @date 2025-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.4.3
|
|
6
|
+
* @date 2025-07-28T13:39:06.036Z
|
|
7
|
+
* @hash 4b596d7
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function (exports, owl) {
|
|
@@ -853,6 +853,7 @@
|
|
|
853
853
|
];
|
|
854
854
|
const specialWhiteSpaceRegexp = new RegExp(specialWhiteSpaceSpecialCharacters.join("|"), "g");
|
|
855
855
|
const newLineRegexp = /(\r\n|\r)/g;
|
|
856
|
+
const whiteSpaceCharacters = specialWhiteSpaceSpecialCharacters.concat([" "]);
|
|
856
857
|
/**
|
|
857
858
|
* Replace all different newlines characters by \n
|
|
858
859
|
*/
|
|
@@ -1989,8 +1990,9 @@
|
|
|
1989
1990
|
const DATE_JS_1900_OFFSET = INITIAL_JS_DAY.getTime() - INITIAL_1900_DAY.getTime();
|
|
1990
1991
|
const mdyDateRegexp = /^\d{1,2}(\/|-|\s)\d{1,2}((\/|-|\s)\d{1,4})?$/;
|
|
1991
1992
|
const ymdDateRegexp = /^\d{3,4}(\/|-|\s)\d{1,2}(\/|-|\s)\d{1,2}$/;
|
|
1992
|
-
const
|
|
1993
|
-
const
|
|
1993
|
+
const whiteSpaceChars = whiteSpaceCharacters.join("");
|
|
1994
|
+
const dateSeparatorsRegex = new RegExp(`\/|-|${whiteSpaceCharacters.join("|")}`);
|
|
1995
|
+
const dateRegexp = new RegExp(`^(\\d{1,4})[\/${whiteSpaceChars}\-](\\d{1,4})([\/${whiteSpaceChars}\-](\\d{1,4}))?$`);
|
|
1994
1996
|
const timeRegexp = /((\d+(:\d+)?(:\d+)?\s*(AM|PM))|(\d+:\d+(:\d+)?))$/;
|
|
1995
1997
|
/** Convert a value number representing a date, or return undefined if it isn't possible */
|
|
1996
1998
|
function valueToDateNumber(value, locale) {
|
|
@@ -6925,6 +6927,8 @@
|
|
|
6925
6927
|
function splitTextToWidth(ctx, text, style, width) {
|
|
6926
6928
|
if (!style)
|
|
6927
6929
|
style = {};
|
|
6930
|
+
if (isMarkdownLink(text))
|
|
6931
|
+
text = parseMarkdownLink(text).label;
|
|
6928
6932
|
const brokenText = [];
|
|
6929
6933
|
// Checking if text contains NEWLINE before split makes it very slightly slower if text contains it,
|
|
6930
6934
|
// but 5-10x faster if it doesn't
|
|
@@ -8765,6 +8769,10 @@
|
|
|
8765
8769
|
if (groupValue === null || groupValue === "null") {
|
|
8766
8770
|
return null;
|
|
8767
8771
|
}
|
|
8772
|
+
const extractedGroupValue = typeof groupValue === "object" ? groupValue.value : groupValue;
|
|
8773
|
+
if (isEvaluationError(extractedGroupValue)) {
|
|
8774
|
+
return extractedGroupValue;
|
|
8775
|
+
}
|
|
8768
8776
|
const groupValueString = typeof groupValue === "boolean"
|
|
8769
8777
|
? toString(groupValue).toLocaleLowerCase()
|
|
8770
8778
|
: toString(groupValue);
|
|
@@ -19026,13 +19034,19 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
19026
19034
|
if (isEvaluationError(cellReference?.value)) {
|
|
19027
19035
|
return cellReference;
|
|
19028
19036
|
}
|
|
19029
|
-
|
|
19030
|
-
|
|
19031
|
-
|
|
19032
|
-
|
|
19033
|
-
return
|
|
19037
|
+
if (cellReference === undefined) {
|
|
19038
|
+
if (this.__originCellPosition?.col === undefined) {
|
|
19039
|
+
return new EvaluationError(_t("In this context, the function [[FUNCTION_NAME]] needs to have a cell or range in parameter."));
|
|
19040
|
+
}
|
|
19041
|
+
return this.__originCellPosition.col + 1;
|
|
19042
|
+
}
|
|
19043
|
+
const zone = this.getters.getRangeFromSheetXC(this.getters.getActiveSheetId(), cellReference.value).zone;
|
|
19044
|
+
if (zone.left === zone.right) {
|
|
19045
|
+
return zone.left + 1;
|
|
19034
19046
|
}
|
|
19035
|
-
return
|
|
19047
|
+
return generateMatrix(zone.right - zone.left + 1, 1, (col, row) => ({
|
|
19048
|
+
value: zone.left + col + 1,
|
|
19049
|
+
}));
|
|
19036
19050
|
},
|
|
19037
19051
|
isExported: true,
|
|
19038
19052
|
};
|
|
@@ -19263,13 +19277,19 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
19263
19277
|
if (isEvaluationError(cellReference?.value)) {
|
|
19264
19278
|
return cellReference;
|
|
19265
19279
|
}
|
|
19266
|
-
|
|
19267
|
-
|
|
19268
|
-
|
|
19269
|
-
|
|
19270
|
-
return
|
|
19280
|
+
if (cellReference === undefined) {
|
|
19281
|
+
if (this.__originCellPosition?.row === undefined) {
|
|
19282
|
+
return new EvaluationError(_t("In this context, the function [[FUNCTION_NAME]] needs to have a cell or range in parameter."));
|
|
19283
|
+
}
|
|
19284
|
+
return this.__originCellPosition.row + 1;
|
|
19285
|
+
}
|
|
19286
|
+
const zone = this.getters.getRangeFromSheetXC(this.getters.getActiveSheetId(), cellReference.value).zone;
|
|
19287
|
+
if (zone.top === zone.bottom) {
|
|
19288
|
+
return zone.top + 1;
|
|
19271
19289
|
}
|
|
19272
|
-
return
|
|
19290
|
+
return generateMatrix(1, zone.bottom - zone.top + 1, (col, row) => ({
|
|
19291
|
+
value: zone.top + row + 1,
|
|
19292
|
+
}));
|
|
19273
19293
|
},
|
|
19274
19294
|
isExported: true,
|
|
19275
19295
|
};
|
|
@@ -27447,7 +27467,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
27447
27467
|
}
|
|
27448
27468
|
function getFormulaNumberValue(sheetId, formula, getters) {
|
|
27449
27469
|
const value = getters.evaluateFormula(sheetId, formula);
|
|
27450
|
-
return
|
|
27470
|
+
return isMultipleElementMatrix(value)
|
|
27471
|
+
? undefined
|
|
27472
|
+
: tryToNumber(toScalar(value), getters.getLocale());
|
|
27451
27473
|
}
|
|
27452
27474
|
function getInvalidGaugeRuntime(chart, getters) {
|
|
27453
27475
|
return {
|
|
@@ -31072,6 +31094,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
31072
31094
|
return undefined;
|
|
31073
31095
|
}
|
|
31074
31096
|
get errorOriginPositionString() {
|
|
31097
|
+
if (this.env.model.getters.isDashboard()) {
|
|
31098
|
+
return "";
|
|
31099
|
+
}
|
|
31075
31100
|
const evaluationError = this.evaluationError;
|
|
31076
31101
|
const position = evaluationError?.errorOriginPosition;
|
|
31077
31102
|
if (!position || deepEquals(position, this.props.cellPosition)) {
|
|
@@ -32594,6 +32619,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
32594
32619
|
get isAutoCompleteDisplayed() {
|
|
32595
32620
|
return !!this.autoComplete.provider;
|
|
32596
32621
|
}
|
|
32622
|
+
get canBeToggled() {
|
|
32623
|
+
return this.autoComplete.provider?.canBeToggled ?? true;
|
|
32624
|
+
}
|
|
32597
32625
|
cycleReferences() {
|
|
32598
32626
|
const locale = this.getters.getLocale();
|
|
32599
32627
|
const updated = cycleFixedReference(this.composerSelection, this._currentContent, locale);
|
|
@@ -33123,6 +33151,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
33123
33151
|
proposals,
|
|
33124
33152
|
selectProposal: provider.selectProposal,
|
|
33125
33153
|
autoSelectFirstProposal: provider.autoSelectFirstProposal ?? false,
|
|
33154
|
+
canBeToggled: provider.canBeToggled,
|
|
33126
33155
|
};
|
|
33127
33156
|
}
|
|
33128
33157
|
if (exactMatch && this._currentContent !== this.initialContent) {
|
|
@@ -33145,6 +33174,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
33145
33174
|
proposals,
|
|
33146
33175
|
selectProposal: provider.selectProposal,
|
|
33147
33176
|
autoSelectFirstProposal: provider.autoSelectFirstProposal ?? false,
|
|
33177
|
+
canBeToggled: provider.canBeToggled,
|
|
33148
33178
|
};
|
|
33149
33179
|
}
|
|
33150
33180
|
}
|
|
@@ -33715,9 +33745,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
33715
33745
|
}
|
|
33716
33746
|
}
|
|
33717
33747
|
closeAssistant() {
|
|
33748
|
+
if (!this.props.composerStore.canBeToggled)
|
|
33749
|
+
return;
|
|
33718
33750
|
this.assistant.forcedClosed = true;
|
|
33719
33751
|
}
|
|
33720
33752
|
openAssistant() {
|
|
33753
|
+
if (!this.props.composerStore.canBeToggled)
|
|
33754
|
+
return;
|
|
33721
33755
|
this.assistant.forcedClosed = false;
|
|
33722
33756
|
}
|
|
33723
33757
|
onWheel(event) {
|
|
@@ -33907,7 +33941,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
33907
33941
|
return [...new Set(argsToFocus)];
|
|
33908
33942
|
}
|
|
33909
33943
|
autoComplete(value) {
|
|
33910
|
-
if (!value || this.assistant.forcedClosed) {
|
|
33944
|
+
if (!value || (this.assistant.forcedClosed && this.props.composerStore.canBeToggled)) {
|
|
33911
33945
|
return;
|
|
33912
33946
|
}
|
|
33913
33947
|
this.props.composerStore.insertAutoCompleteValue(value);
|
|
@@ -39220,40 +39254,112 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
39220
39254
|
* In all the sheets, replace the table-only references in the formula cells with standard references.
|
|
39221
39255
|
*/
|
|
39222
39256
|
function convertTableFormulaReferences(convertedSheets, xlsxSheets) {
|
|
39257
|
+
let deconstructedSheets = null;
|
|
39223
39258
|
for (const tableSheet of convertedSheets) {
|
|
39224
39259
|
const tables = xlsxSheets.find((s) => isSheetNameEqual(s.sheetName, tableSheet.name)).tables;
|
|
39260
|
+
if (!tables || tables.length === 0) {
|
|
39261
|
+
continue;
|
|
39262
|
+
}
|
|
39263
|
+
// Only deconstruct sheets if we are sure there are tables to process
|
|
39264
|
+
if (!deconstructedSheets) {
|
|
39265
|
+
deconstructedSheets = deconstructSheets(convertedSheets);
|
|
39266
|
+
}
|
|
39225
39267
|
for (const table of tables) {
|
|
39226
|
-
const
|
|
39227
|
-
|
|
39228
|
-
for (const xc in
|
|
39229
|
-
const
|
|
39230
|
-
let
|
|
39231
|
-
|
|
39232
|
-
|
|
39233
|
-
|
|
39234
|
-
let endIndex = refIndex + tabRef.length;
|
|
39235
|
-
let openBrackets = 1;
|
|
39236
|
-
while (openBrackets > 0 && endIndex < cellContent.length) {
|
|
39237
|
-
if (cellContent[endIndex] === "[") {
|
|
39238
|
-
openBrackets++;
|
|
39239
|
-
}
|
|
39240
|
-
else if (cellContent[endIndex] === "]") {
|
|
39241
|
-
openBrackets--;
|
|
39242
|
-
}
|
|
39243
|
-
endIndex++;
|
|
39244
|
-
}
|
|
39245
|
-
const reference = cellContent.slice(refIndex + tabRef.length, endIndex - 1);
|
|
39246
|
-
const sheetPrefix = tableSheet.id === sheet.id ? "" : tableSheet.name + "!";
|
|
39247
|
-
const convertedRef = convertTableReference(sheetPrefix, reference, table, xc);
|
|
39248
|
-
cellContent =
|
|
39249
|
-
cellContent.slice(0, refIndex) + convertedRef + cellContent.slice(endIndex);
|
|
39268
|
+
for (const sheetId in deconstructedSheets) {
|
|
39269
|
+
const sheet = convertedSheets.find((s) => s.id === sheetId);
|
|
39270
|
+
for (const xc in deconstructedSheets[sheetId]) {
|
|
39271
|
+
const deconstructedCell = deconstructedSheets[sheetId][xc];
|
|
39272
|
+
for (let i = deconstructedCell.length - 3; i >= 0; i -= 2) {
|
|
39273
|
+
const possibleTable = deconstructedSheets[sheetId][xc][i];
|
|
39274
|
+
if (!possibleTable.endsWith(table.name)) {
|
|
39275
|
+
continue;
|
|
39250
39276
|
}
|
|
39277
|
+
const possibleRef = deconstructedSheets[sheetId][xc][i + 1];
|
|
39278
|
+
const sheetPrefix = tableSheet.id === sheet.id ? "" : tableSheet.name + "!";
|
|
39279
|
+
const convertedRef = convertTableReference(sheetPrefix, possibleRef, table, xc);
|
|
39280
|
+
deconstructedSheets[sheetId][xc][i + 2] =
|
|
39281
|
+
possibleTable.slice(0, possibleTable.indexOf(table.name)) +
|
|
39282
|
+
convertedRef +
|
|
39283
|
+
deconstructedSheets[sheetId][xc][i + 2];
|
|
39284
|
+
deconstructedSheets[sheetId][xc].splice(i, 2);
|
|
39251
39285
|
}
|
|
39252
|
-
sheet.cells[xc] = cellContent;
|
|
39286
|
+
// sheet.cells[xc] = cellContent;
|
|
39253
39287
|
}
|
|
39254
39288
|
}
|
|
39255
39289
|
}
|
|
39256
39290
|
}
|
|
39291
|
+
if (!deconstructedSheets) {
|
|
39292
|
+
return;
|
|
39293
|
+
}
|
|
39294
|
+
for (const sheetId in deconstructedSheets) {
|
|
39295
|
+
const sheet = convertedSheets.find((s) => s.id === sheetId);
|
|
39296
|
+
for (const xc in deconstructedSheets[sheetId]) {
|
|
39297
|
+
const deconstructedCell = deconstructedSheets[sheetId][xc];
|
|
39298
|
+
if (deconstructedCell.length === 1) {
|
|
39299
|
+
sheet.cells[xc] = deconstructedCell[0];
|
|
39300
|
+
continue;
|
|
39301
|
+
}
|
|
39302
|
+
let newContent = "";
|
|
39303
|
+
for (let i = 0; i < deconstructedCell.length; i += 2) {
|
|
39304
|
+
newContent += deconstructedCell[i] + "[" + deconstructedCell[i + 1] + "]";
|
|
39305
|
+
}
|
|
39306
|
+
newContent += deconstructedCell[deconstructedCell.length - 1];
|
|
39307
|
+
sheet.cells[xc] = newContent;
|
|
39308
|
+
}
|
|
39309
|
+
}
|
|
39310
|
+
}
|
|
39311
|
+
/**
|
|
39312
|
+
* Deconstruct the content of the cells in the sheets to extract possible table references.
|
|
39313
|
+
* Example from "=AVERAGE(Table1[colName1])-AVERAGE(Table2[colName2])":
|
|
39314
|
+
* return --> ["=AVERAGE(Table1", "colName1", ")-AVERAGE(Table2", "colName2", ")"]
|
|
39315
|
+
*/
|
|
39316
|
+
function deconstructSheets(convertedSheets) {
|
|
39317
|
+
const deconstructedSheets = {};
|
|
39318
|
+
for (const sheet of convertedSheets) {
|
|
39319
|
+
for (const xc in sheet.cells) {
|
|
39320
|
+
const cellContent = sheet.cells[xc];
|
|
39321
|
+
if (!cellContent || !cellContent.startsWith("=")) {
|
|
39322
|
+
continue;
|
|
39323
|
+
}
|
|
39324
|
+
const startIndex = cellContent.indexOf("[");
|
|
39325
|
+
if (startIndex === -1) {
|
|
39326
|
+
continue;
|
|
39327
|
+
}
|
|
39328
|
+
const deconstructedCell = [];
|
|
39329
|
+
let possibleTable = cellContent.slice(0, startIndex);
|
|
39330
|
+
let possibleRef = "";
|
|
39331
|
+
let openBrackets = 1;
|
|
39332
|
+
let mainPossibleTableIndex = 0;
|
|
39333
|
+
let mainOpenBracketIndex = startIndex;
|
|
39334
|
+
for (let index = startIndex + 1; index < cellContent.length; index++) {
|
|
39335
|
+
if (cellContent[index] === "[") {
|
|
39336
|
+
if (openBrackets === 0) {
|
|
39337
|
+
possibleTable = cellContent.slice(mainPossibleTableIndex, index);
|
|
39338
|
+
mainOpenBracketIndex = index;
|
|
39339
|
+
}
|
|
39340
|
+
openBrackets++;
|
|
39341
|
+
continue;
|
|
39342
|
+
}
|
|
39343
|
+
if (cellContent[index] === "]") {
|
|
39344
|
+
openBrackets--;
|
|
39345
|
+
if (openBrackets === 0) {
|
|
39346
|
+
possibleRef = cellContent.slice(mainOpenBracketIndex + 1, index);
|
|
39347
|
+
deconstructedCell.push(possibleTable);
|
|
39348
|
+
deconstructedCell.push(possibleRef);
|
|
39349
|
+
mainPossibleTableIndex = index + 1;
|
|
39350
|
+
}
|
|
39351
|
+
}
|
|
39352
|
+
}
|
|
39353
|
+
if (deconstructedCell.length) {
|
|
39354
|
+
if (!deconstructedSheets[sheet.id]) {
|
|
39355
|
+
deconstructedSheets[sheet.id] = {};
|
|
39356
|
+
}
|
|
39357
|
+
deconstructedCell.push(cellContent.slice(mainPossibleTableIndex));
|
|
39358
|
+
deconstructedSheets[sheet.id][xc] = [...deconstructedCell];
|
|
39359
|
+
}
|
|
39360
|
+
}
|
|
39361
|
+
}
|
|
39362
|
+
return deconstructedSheets;
|
|
39257
39363
|
}
|
|
39258
39364
|
/**
|
|
39259
39365
|
* Convert table-specific references in formulas into standard references. A table reference is composed of columns names,
|
|
@@ -45565,10 +45671,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
45565
45671
|
const cellValue = isFormula(content)
|
|
45566
45672
|
? this.getters.evaluateFormula(this.sheetId, content)
|
|
45567
45673
|
: parseLiteral(content, this.getters.getLocale());
|
|
45568
|
-
if (
|
|
45674
|
+
if (isMultipleElementMatrix(cellValue)) {
|
|
45569
45675
|
return true;
|
|
45570
45676
|
}
|
|
45571
|
-
const validationResult = this.getters.getValidationResultForCellValue(cellValue, cellPosition);
|
|
45677
|
+
const validationResult = this.getters.getValidationResultForCellValue(toScalar(cellValue), cellPosition);
|
|
45572
45678
|
if (!validationResult.isValid && validationResult.rule.isBlocking) {
|
|
45573
45679
|
return false;
|
|
45574
45680
|
}
|
|
@@ -50680,10 +50786,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
50680
50786
|
return tryToNumber(value, locale) !== undefined;
|
|
50681
50787
|
}
|
|
50682
50788
|
const evaluatedValue = this.env.model.getters.evaluateFormula(this.sheetId, value);
|
|
50683
|
-
if (
|
|
50789
|
+
if (isMultipleElementMatrix(evaluatedValue)) {
|
|
50684
50790
|
return false;
|
|
50685
50791
|
}
|
|
50686
|
-
return tryToNumber(evaluatedValue, locale) !== undefined;
|
|
50792
|
+
return tryToNumber(toScalar(evaluatedValue), locale) !== undefined;
|
|
50687
50793
|
}
|
|
50688
50794
|
get sheetId() {
|
|
50689
50795
|
const chart = this.env.model.getters.getChart(this.props.figureId);
|
|
@@ -55494,10 +55600,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
55494
55600
|
if (finalCell.value === null) {
|
|
55495
55601
|
return { value: _t("(Undefined)") };
|
|
55496
55602
|
}
|
|
55497
|
-
return
|
|
55498
|
-
value: finalCell.value,
|
|
55499
|
-
format: finalCell.format,
|
|
55500
|
-
};
|
|
55603
|
+
return finalCell;
|
|
55501
55604
|
}
|
|
55502
55605
|
getPivotCellValueAndFormat(measureId, domain) {
|
|
55503
55606
|
const dataEntries = this.filterDataEntriesFromDomain(this.dataEntries, domain);
|
|
@@ -55599,9 +55702,15 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
55599
55702
|
return domain.reduce((current, acc) => this.filterDataEntriesFromDomainNode(current, acc), dataEntries);
|
|
55600
55703
|
}
|
|
55601
55704
|
filterDataEntriesFromDomainNode(dataEntries, domain) {
|
|
55602
|
-
const { field, value } = domain;
|
|
55705
|
+
const { field, value, type } = domain;
|
|
55603
55706
|
const { nameWithGranularity } = this.getDimension(field);
|
|
55604
|
-
return dataEntries.filter((entry) =>
|
|
55707
|
+
return dataEntries.filter((entry) => {
|
|
55708
|
+
const cellValue = entry[nameWithGranularity]?.value;
|
|
55709
|
+
if (type === "char") {
|
|
55710
|
+
return String(cellValue) === String(value);
|
|
55711
|
+
}
|
|
55712
|
+
return cellValue === value;
|
|
55713
|
+
});
|
|
55605
55714
|
}
|
|
55606
55715
|
getDimension(nameWithGranularity) {
|
|
55607
55716
|
return this.definition.getDimension(nameWithGranularity);
|
|
@@ -55735,7 +55844,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
55735
55844
|
ui: SpreadsheetPivot,
|
|
55736
55845
|
definition: SpreadsheetPivotRuntimeDefinition,
|
|
55737
55846
|
externalData: false,
|
|
55738
|
-
onIterationEndEvaluation: (pivot) => pivot.markAsDirtyForEvaluation(),
|
|
55739
55847
|
dateGranularities: [...dateGranularities],
|
|
55740
55848
|
datetimeGranularities: [...dateGranularities, "hour_number", "minute_number", "second_number"],
|
|
55741
55849
|
isMeasureCandidate: (field) => field.type !== "boolean",
|
|
@@ -64386,7 +64494,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
64386
64494
|
onIterationEndEvaluationRegistry.add("pivots", (getters) => {
|
|
64387
64495
|
for (const pivotId of getters.getPivotIds()) {
|
|
64388
64496
|
const pivot = getters.getPivot(pivotId);
|
|
64389
|
-
|
|
64497
|
+
pivot.markAsDirtyForEvaluation?.();
|
|
64390
64498
|
}
|
|
64391
64499
|
});
|
|
64392
64500
|
|
|
@@ -66850,12 +66958,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
66850
66958
|
}
|
|
66851
66959
|
return this.getters.evaluateFormula(sheetId, value) ?? "";
|
|
66852
66960
|
});
|
|
66853
|
-
if (evaluatedCriterionValues.some(
|
|
66961
|
+
if (evaluatedCriterionValues.some(isMultipleElementMatrix)) {
|
|
66854
66962
|
return false;
|
|
66855
66963
|
}
|
|
66856
66964
|
const evaluatedCriterion = {
|
|
66857
66965
|
type: rule.operator,
|
|
66858
|
-
values: evaluatedCriterionValues,
|
|
66966
|
+
values: evaluatedCriterionValues.map(toScalar),
|
|
66859
66967
|
};
|
|
66860
66968
|
return evaluator.isValueValid(cell.value ?? "", evaluatedCriterion, this.getters, sheetId);
|
|
66861
66969
|
}
|
|
@@ -67015,10 +67123,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
67015
67123
|
const evaluator = criterionEvaluatorRegistry.get(criterion.type);
|
|
67016
67124
|
const offset = this.getCellOffsetInRule(cellPosition, rule);
|
|
67017
67125
|
const evaluatedCriterionValues = this.getEvaluatedCriterionValues(sheetId, offset, criterion);
|
|
67018
|
-
if (evaluatedCriterionValues.some(
|
|
67126
|
+
if (evaluatedCriterionValues.some(isMultipleElementMatrix)) {
|
|
67019
67127
|
return undefined;
|
|
67020
67128
|
}
|
|
67021
|
-
const evaluatedCriterion = { ...criterion, values: evaluatedCriterionValues };
|
|
67129
|
+
const evaluatedCriterion = { ...criterion, values: evaluatedCriterionValues.map(toScalar) };
|
|
67022
67130
|
if (evaluator.isValueValid(cellValue, evaluatedCriterion, this.getters, sheetId)) {
|
|
67023
67131
|
return undefined;
|
|
67024
67132
|
}
|
|
@@ -67471,6 +67579,23 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
67471
67579
|
static getters = ["getRowSize", "getHeaderSize", "getMaxAnchorOffset"];
|
|
67472
67580
|
tallestCellInRow = {};
|
|
67473
67581
|
ctx = document.createElement("canvas").getContext("2d");
|
|
67582
|
+
beforeHandle(cmd) {
|
|
67583
|
+
switch (cmd.type) {
|
|
67584
|
+
// Ensure rows are updated before "UPDATE_CELL" is dispatched from cell plugin.
|
|
67585
|
+
// "UPDATE_CELL" uses the Sheet core plugin to access row data.
|
|
67586
|
+
// If "ADD_COLUMNS_ROWS" has not been processed yet by header_sizes_ui,
|
|
67587
|
+
// size updates may apply to incorrect (pre-insert) rows.
|
|
67588
|
+
case "ADD_COLUMNS_ROWS":
|
|
67589
|
+
if (cmd.dimension === "COL") {
|
|
67590
|
+
return;
|
|
67591
|
+
}
|
|
67592
|
+
const addIndex = getAddHeaderStartIndex(cmd.position, cmd.base);
|
|
67593
|
+
const newCells = Array(cmd.quantity).fill(undefined);
|
|
67594
|
+
const newTallestCells = insertItemsAtIndex(this.tallestCellInRow[cmd.sheetId], newCells, addIndex);
|
|
67595
|
+
this.history.update("tallestCellInRow", cmd.sheetId, newTallestCells);
|
|
67596
|
+
break;
|
|
67597
|
+
}
|
|
67598
|
+
}
|
|
67474
67599
|
handle(cmd) {
|
|
67475
67600
|
switch (cmd.type) {
|
|
67476
67601
|
case "START":
|
|
@@ -67500,16 +67625,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
67500
67625
|
this.history.update("tallestCellInRow", cmd.sheetId, tallestCells);
|
|
67501
67626
|
break;
|
|
67502
67627
|
}
|
|
67503
|
-
case "ADD_COLUMNS_ROWS": {
|
|
67504
|
-
if (cmd.dimension === "COL") {
|
|
67505
|
-
return;
|
|
67506
|
-
}
|
|
67507
|
-
const addIndex = getAddHeaderStartIndex(cmd.position, cmd.base);
|
|
67508
|
-
const newCells = Array(cmd.quantity).fill(undefined);
|
|
67509
|
-
const newTallestCells = insertItemsAtIndex(this.tallestCellInRow[cmd.sheetId], newCells, addIndex);
|
|
67510
|
-
this.history.update("tallestCellInRow", cmd.sheetId, newTallestCells);
|
|
67511
|
-
break;
|
|
67512
|
-
}
|
|
67513
67628
|
case "RESIZE_COLUMNS_ROWS":
|
|
67514
67629
|
{
|
|
67515
67630
|
const sheetId = cmd.sheetId;
|
|
@@ -67661,13 +67776,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
67661
67776
|
super(custom, params);
|
|
67662
67777
|
this.getters = params.getters;
|
|
67663
67778
|
}
|
|
67664
|
-
|
|
67779
|
+
markAsDirtyForEvaluation() {
|
|
67665
67780
|
this.cache = {};
|
|
67666
67781
|
this.rankAsc = {};
|
|
67667
67782
|
this.rankDesc = {};
|
|
67668
67783
|
this.runningTotal = {};
|
|
67669
67784
|
this.runningTotalInPercent = {};
|
|
67670
|
-
super.
|
|
67785
|
+
super.markAsDirtyForEvaluation?.();
|
|
67671
67786
|
}
|
|
67672
67787
|
getPivotCellValueAndFormat(measureName, domain) {
|
|
67673
67788
|
return this.getMeasureDisplayValue(measureName, domain);
|
|
@@ -67792,7 +67907,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
67792
67907
|
return this.getSubTreeMatchingDomain(node.children, domain, domainLevel + 1);
|
|
67793
67908
|
}
|
|
67794
67909
|
}
|
|
67795
|
-
return
|
|
67910
|
+
return [];
|
|
67796
67911
|
}
|
|
67797
67912
|
treeToLeafDomains(tree, parentDomain = []) {
|
|
67798
67913
|
const domains = [];
|
|
@@ -73524,12 +73639,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
73524
73639
|
}
|
|
73525
73640
|
return this.getters.evaluateFormula(sheetId, value) ?? "";
|
|
73526
73641
|
});
|
|
73527
|
-
if (evaluatedCriterionValues.some(
|
|
73642
|
+
if (evaluatedCriterionValues.some(isMultipleElementMatrix)) {
|
|
73528
73643
|
continue;
|
|
73529
73644
|
}
|
|
73530
73645
|
const evaluatedCriterion = {
|
|
73531
73646
|
type: filterValue.type,
|
|
73532
|
-
values: evaluatedCriterionValues,
|
|
73647
|
+
values: evaluatedCriterionValues.map(toScalar),
|
|
73533
73648
|
dateValue: filterValue.dateValue,
|
|
73534
73649
|
};
|
|
73535
73650
|
for (let row = filteredZone.top; row <= filteredZone.bottom; row++) {
|
|
@@ -74051,6 +74166,14 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
74051
74166
|
const isBasedBefore = cmd.base < start;
|
|
74052
74167
|
const deltaCol = isBasedBefore && isCol ? thickness : 0;
|
|
74053
74168
|
const deltaRow = isBasedBefore && !isCol ? thickness : 0;
|
|
74169
|
+
const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
|
|
74170
|
+
const originalSize = Object.fromEntries(toRemove.map((element) => {
|
|
74171
|
+
const size = isCol
|
|
74172
|
+
? this.getters.getColSize(cmd.sheetId, element)
|
|
74173
|
+
: this.getters.getUserRowSize(cmd.sheetId, element);
|
|
74174
|
+
const isDefaultCol = isCol && size === DEFAULT_CELL_WIDTH;
|
|
74175
|
+
return [element, isDefaultCol ? undefined : size];
|
|
74176
|
+
}));
|
|
74054
74177
|
const target = [
|
|
74055
74178
|
{
|
|
74056
74179
|
left: isCol ? start + deltaCol : 0,
|
|
@@ -74081,13 +74204,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
74081
74204
|
const col = selection.left;
|
|
74082
74205
|
const row = selection.top;
|
|
74083
74206
|
this.setSelectionMixin({ zone: selection, cell: { col, row } }, [selection]);
|
|
74084
|
-
const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
|
|
74085
74207
|
let currentIndex = isBasedBefore ? cmd.base : cmd.base + 1;
|
|
74086
74208
|
const resizingGroups = {};
|
|
74087
74209
|
for (const element of toRemove) {
|
|
74088
|
-
const size =
|
|
74210
|
+
const size = originalSize[element];
|
|
74089
74211
|
const currentSize = this.getters.getHeaderSize(cmd.sheetId, cmd.dimension, currentIndex);
|
|
74090
|
-
if (size !== currentSize) {
|
|
74212
|
+
if (size && size !== currentSize) {
|
|
74091
74213
|
resizingGroups[size] ??= [];
|
|
74092
74214
|
resizingGroups[size].push(currentIndex);
|
|
74093
74215
|
currentIndex += 1;
|
|
@@ -75513,6 +75635,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
75513
75635
|
|
|
75514
75636
|
autoCompleteProviders.add("dataValidation", {
|
|
75515
75637
|
displayAllOnInitialContent: true,
|
|
75638
|
+
canBeToggled: false,
|
|
75516
75639
|
getProposals(tokenAtCursor, content) {
|
|
75517
75640
|
if (isFormula(content)) {
|
|
75518
75641
|
return [];
|
|
@@ -77078,14 +77201,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
77078
77201
|
this.editionState = "initializing";
|
|
77079
77202
|
}
|
|
77080
77203
|
stopEdition() {
|
|
77081
|
-
|
|
77082
|
-
if (!this.state.isEditing || !input)
|
|
77204
|
+
if (!this.state.isEditing || !this.sheetNameRef.el)
|
|
77083
77205
|
return;
|
|
77084
77206
|
this.state.isEditing = false;
|
|
77085
77207
|
this.editionState = "initializing";
|
|
77086
|
-
|
|
77208
|
+
this.sheetNameRef.el.blur();
|
|
77087
77209
|
const inputValue = this.getInputContent() || "";
|
|
77088
|
-
input.innerText = inputValue;
|
|
77089
77210
|
interactiveRenameSheet(this.env, this.props.sheetId, inputValue, () => this.startEdition());
|
|
77090
77211
|
}
|
|
77091
77212
|
cancelEdition() {
|
|
@@ -84457,6 +84578,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
84457
84578
|
PivotSidePanelStore,
|
|
84458
84579
|
PivotMeasureDisplayPanelStore,
|
|
84459
84580
|
ClientFocusStore,
|
|
84581
|
+
GridRenderer,
|
|
84460
84582
|
};
|
|
84461
84583
|
function addFunction(functionName, functionDescription) {
|
|
84462
84584
|
functionRegistry.add(functionName, functionDescription);
|
|
@@ -84523,9 +84645,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
84523
84645
|
exports.tokenize = tokenize;
|
|
84524
84646
|
|
|
84525
84647
|
|
|
84526
|
-
__info__.version = "18.4.
|
|
84527
|
-
__info__.date = "2025-
|
|
84528
|
-
__info__.hash = "
|
|
84648
|
+
__info__.version = "18.4.3";
|
|
84649
|
+
__info__.date = "2025-07-28T13:39:06.036Z";
|
|
84650
|
+
__info__.hash = "4b596d7";
|
|
84529
84651
|
|
|
84530
84652
|
|
|
84531
84653
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|