@odoo/o-spreadsheet 18.2.53 → 18.2.55
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 +164 -29
- package/dist/o_spreadsheet.css +3 -3
- package/dist/o_spreadsheet.esm.js +164 -29
- package/dist/o_spreadsheet.iife.js +164 -29
- package/dist/o_spreadsheet.iife.min.js +296 -296
- package/dist/o_spreadsheet.xml +5 -4
- package/package.json +17 -17
|
@@ -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 2026-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.2.55
|
|
6
|
+
* @date 2026-06-06T06:20:23.893Z
|
|
7
|
+
* @hash 57b568a
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
@@ -1346,6 +1346,7 @@ function getAlternatingColorsPalette(quantity) {
|
|
|
1346
1346
|
else return ALTERNATING_COLORS_XL;
|
|
1347
1347
|
}
|
|
1348
1348
|
var ColorGenerator = class {
|
|
1349
|
+
preferredColors;
|
|
1349
1350
|
currentColorIndex = 0;
|
|
1350
1351
|
palette;
|
|
1351
1352
|
constructor(paletteSize, preferredColors = []) {
|
|
@@ -1812,6 +1813,7 @@ const _t = function(s, ...values) {
|
|
|
1812
1813
|
return sprintf(_translate(s), ...values);
|
|
1813
1814
|
};
|
|
1814
1815
|
var LazyTranslatedString = class extends String {
|
|
1816
|
+
values;
|
|
1815
1817
|
constructor(str, values) {
|
|
1816
1818
|
super(str);
|
|
1817
1819
|
this.values = values;
|
|
@@ -3308,6 +3310,8 @@ const CellErrorType = {
|
|
|
3308
3310
|
};
|
|
3309
3311
|
const errorTypes = new Set(Object.values(CellErrorType));
|
|
3310
3312
|
var EvaluationError = class {
|
|
3313
|
+
message;
|
|
3314
|
+
value;
|
|
3311
3315
|
constructor(message = _t("Error"), value = CellErrorType.GenericError) {
|
|
3312
3316
|
this.message = message;
|
|
3313
3317
|
this.value = value;
|
|
@@ -3340,6 +3344,7 @@ var UnknownFunctionError = class extends EvaluationError {
|
|
|
3340
3344
|
}
|
|
3341
3345
|
};
|
|
3342
3346
|
var SplillBlockedError = class extends EvaluationError {
|
|
3347
|
+
errorOriginPosition;
|
|
3343
3348
|
constructor(message = _t("Spill range is not empty"), errorOriginPosition) {
|
|
3344
3349
|
super(message, CellErrorType.SpilledBlocked);
|
|
3345
3350
|
this.errorOriginPosition = errorOriginPosition;
|
|
@@ -4042,6 +4047,7 @@ function detectLink(value) {
|
|
|
4042
4047
|
//#endregion
|
|
4043
4048
|
//#region src/helpers/format/format_tokenizer.ts
|
|
4044
4049
|
function tokenizeFormat(str) {
|
|
4050
|
+
str = str.replace(/\s/g, " ");
|
|
4045
4051
|
const chars = new TokenizingChars(str);
|
|
4046
4052
|
const result = [];
|
|
4047
4053
|
let currentFormatPart = [];
|
|
@@ -5173,6 +5179,7 @@ function getFullReference(sheetName, xc) {
|
|
|
5173
5179
|
//#endregion
|
|
5174
5180
|
//#region src/helpers/range.ts
|
|
5175
5181
|
var RangeImpl = class RangeImpl {
|
|
5182
|
+
getSheetSize;
|
|
5176
5183
|
_zone;
|
|
5177
5184
|
parts;
|
|
5178
5185
|
invalidXc;
|
|
@@ -5860,6 +5867,8 @@ const selectPastedZone = (selection, sourceZones, pastedZones) => {
|
|
|
5860
5867
|
//#endregion
|
|
5861
5868
|
//#region src/clipboard_handlers/abstract_clipboard_handler.ts
|
|
5862
5869
|
var ClipboardHandler = class {
|
|
5870
|
+
getters;
|
|
5871
|
+
dispatch;
|
|
5863
5872
|
constructor(getters, dispatch) {
|
|
5864
5873
|
this.getters = getters;
|
|
5865
5874
|
this.dispatch = dispatch;
|
|
@@ -8267,6 +8276,7 @@ var DependencyContainer = class extends EventBus {
|
|
|
8267
8276
|
}
|
|
8268
8277
|
};
|
|
8269
8278
|
var StoreFactory = class {
|
|
8279
|
+
get;
|
|
8270
8280
|
pendingBuilds = /* @__PURE__ */ new Set();
|
|
8271
8281
|
constructor(get) {
|
|
8272
8282
|
this.get = get;
|
|
@@ -8311,6 +8321,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
8311
8321
|
return MetaStore;
|
|
8312
8322
|
}
|
|
8313
8323
|
var DisposableStore = class {
|
|
8324
|
+
get;
|
|
8314
8325
|
disposeCallbacks = [];
|
|
8315
8326
|
constructor(get) {
|
|
8316
8327
|
this.get = get;
|
|
@@ -9454,6 +9465,7 @@ function getScorecardConfiguration({ width, height }, runtime) {
|
|
|
9454
9465
|
}, runtime).computeDesign();
|
|
9455
9466
|
}
|
|
9456
9467
|
var ScorecardChartConfigBuilder = class {
|
|
9468
|
+
runtime;
|
|
9457
9469
|
context;
|
|
9458
9470
|
width;
|
|
9459
9471
|
height;
|
|
@@ -18108,6 +18120,7 @@ var AbstractComposerStore = class extends SpreadsheetStore {
|
|
|
18108
18120
|
//#endregion
|
|
18109
18121
|
//#region src/formulas/code_builder.ts
|
|
18110
18122
|
var FunctionCodeBuilder = class {
|
|
18123
|
+
scope;
|
|
18111
18124
|
code = "";
|
|
18112
18125
|
constructor(scope = new Scope()) {
|
|
18113
18126
|
this.scope = scope;
|
|
@@ -18123,6 +18136,8 @@ var FunctionCodeBuilder = class {
|
|
|
18123
18136
|
}
|
|
18124
18137
|
};
|
|
18125
18138
|
var FunctionCodeImpl = class {
|
|
18139
|
+
scope;
|
|
18140
|
+
returnExpression;
|
|
18126
18141
|
code;
|
|
18127
18142
|
constructor(scope, code, returnExpression) {
|
|
18128
18143
|
this.scope = scope;
|
|
@@ -18503,6 +18518,9 @@ function extractFormulaIdFromToken(tokenAtCursor) {
|
|
|
18503
18518
|
function getFirstPivotFunction(tokens) {
|
|
18504
18519
|
return getFunctionsFromTokens(tokens, PIVOT_FUNCTIONS)[0];
|
|
18505
18520
|
}
|
|
18521
|
+
function getPivotFunctions(tokens) {
|
|
18522
|
+
return getFunctionsFromTokens(tokens, PIVOT_FUNCTIONS);
|
|
18523
|
+
}
|
|
18506
18524
|
/**
|
|
18507
18525
|
* Parse a spreadsheet formula and detect the number of PIVOT functions that are
|
|
18508
18526
|
* present in the given formula.
|
|
@@ -19553,6 +19571,7 @@ const backgroundColorChartJSPlugin = {
|
|
|
19553
19571
|
* Represent a raw XML string
|
|
19554
19572
|
*/
|
|
19555
19573
|
var XMLString = class {
|
|
19574
|
+
xmlString;
|
|
19556
19575
|
/**
|
|
19557
19576
|
* @param xmlString should be a well formed, properly escaped XML string
|
|
19558
19577
|
*/
|
|
@@ -19671,6 +19690,10 @@ const FORCE_DEFAULT_ARGS_FUNCTIONS = {
|
|
|
19671
19690
|
ROUNDDOWN: [{
|
|
19672
19691
|
type: "NUMBER",
|
|
19673
19692
|
value: 0
|
|
19693
|
+
}],
|
|
19694
|
+
IFERROR: [{
|
|
19695
|
+
type: "NUMBER",
|
|
19696
|
+
value: 0
|
|
19674
19697
|
}]
|
|
19675
19698
|
};
|
|
19676
19699
|
/**
|
|
@@ -29586,6 +29609,10 @@ var Popover = class extends _odoo_owl.Component {
|
|
|
29586
29609
|
}
|
|
29587
29610
|
};
|
|
29588
29611
|
var PopoverPositionContext = class {
|
|
29612
|
+
anchorRect;
|
|
29613
|
+
containerRect;
|
|
29614
|
+
propsMaxSize;
|
|
29615
|
+
spreadsheetOffset;
|
|
29589
29616
|
constructor(anchorRect, containerRect, propsMaxSize, spreadsheetOffset) {
|
|
29590
29617
|
this.anchorRect = anchorRect;
|
|
29591
29618
|
this.containerRect = containerRect;
|
|
@@ -30684,11 +30711,10 @@ const INSERT_TABLE = (env) => {
|
|
|
30684
30711
|
if (interactiveCreateTable(env, env.model.getters.getActiveSheetId()).isSuccessful) env.openSidePanel("TableSidePanel", {});
|
|
30685
30712
|
};
|
|
30686
30713
|
const DELETE_SELECTED_TABLE = (env) => {
|
|
30687
|
-
const
|
|
30688
|
-
const table = env.model.getters.getTable(position);
|
|
30714
|
+
const table = env.model.getters.getFirstTableInSelection();
|
|
30689
30715
|
if (!table) return;
|
|
30690
30716
|
env.model.dispatch("REMOVE_TABLE", {
|
|
30691
|
-
sheetId:
|
|
30717
|
+
sheetId: env.model.getters.getActiveSheetId(),
|
|
30692
30718
|
target: [table.range.zone]
|
|
30693
30719
|
});
|
|
30694
30720
|
};
|
|
@@ -32624,7 +32650,7 @@ function getVisiblePivotCellPositions(getters, pivotId) {
|
|
|
32624
32650
|
col,
|
|
32625
32651
|
row
|
|
32626
32652
|
};
|
|
32627
|
-
if (
|
|
32653
|
+
if (getters.getPivotIdsFromPosition(position).includes(pivotId)) positions.push(position);
|
|
32628
32654
|
}
|
|
32629
32655
|
return positions;
|
|
32630
32656
|
}
|
|
@@ -33402,6 +33428,7 @@ var DOMDndHelper = class {
|
|
|
33402
33428
|
}
|
|
33403
33429
|
};
|
|
33404
33430
|
var ContainerWrapper = class {
|
|
33431
|
+
el;
|
|
33405
33432
|
constructor(el) {
|
|
33406
33433
|
this.el = el;
|
|
33407
33434
|
}
|
|
@@ -33487,6 +33514,9 @@ var FocusStore = class {
|
|
|
33487
33514
|
* This plugin handles this internal state.
|
|
33488
33515
|
*/
|
|
33489
33516
|
var SelectionInputStore = class extends SpreadsheetStore {
|
|
33517
|
+
initialRanges;
|
|
33518
|
+
inputHasSingleRange;
|
|
33519
|
+
colors;
|
|
33490
33520
|
mutators = [
|
|
33491
33521
|
"resetWithRanges",
|
|
33492
33522
|
"focusById",
|
|
@@ -36399,6 +36429,7 @@ var Composer = class extends _odoo_owl.Component {
|
|
|
36399
36429
|
//#endregion
|
|
36400
36430
|
//#region src/components/composer/standalone_composer/standalone_composer_store.ts
|
|
36401
36431
|
var StandaloneComposerStore = class extends AbstractComposerStore {
|
|
36432
|
+
args;
|
|
36402
36433
|
constructor(get, args) {
|
|
36403
36434
|
super(get);
|
|
36404
36435
|
this.args = args;
|
|
@@ -39973,6 +40004,8 @@ var MoreFormatsPanel = class extends _odoo_owl.Component {
|
|
|
39973
40004
|
//#endregion
|
|
39974
40005
|
//#region src/components/side_panel/pivot/pivot_measure_display_panel/pivot_measure_display_panel_store.ts
|
|
39975
40006
|
var PivotMeasureDisplayPanelStore = class extends SpreadsheetStore {
|
|
40007
|
+
pivotId;
|
|
40008
|
+
initialMeasure;
|
|
39976
40009
|
mutators = [
|
|
39977
40010
|
"cancelMeasureDisplayEdition",
|
|
39978
40011
|
"updateMeasureDisplayType",
|
|
@@ -41011,13 +41044,30 @@ function createMeasure(fields, measure) {
|
|
|
41011
41044
|
} : fields[fieldName];
|
|
41012
41045
|
const aggregator = measure.aggregator;
|
|
41013
41046
|
return {
|
|
41047
|
+
/**
|
|
41048
|
+
* Get the id of the measure, as it is stored in the pivot formula
|
|
41049
|
+
*/
|
|
41014
41050
|
id: measure.id,
|
|
41051
|
+
/**
|
|
41052
|
+
* Display name of the measure
|
|
41053
|
+
* e.g. "__count" -> "Count", "amount_total" -> "Total Amount"
|
|
41054
|
+
*/
|
|
41015
41055
|
get displayName() {
|
|
41016
41056
|
return measure.userDefinedName ?? field?.string ?? measure.fieldName;
|
|
41017
41057
|
},
|
|
41018
41058
|
userDefinedName: measure.userDefinedName,
|
|
41059
|
+
/**
|
|
41060
|
+
* Get the name of the field of the measure
|
|
41061
|
+
*/
|
|
41019
41062
|
fieldName,
|
|
41063
|
+
/**
|
|
41064
|
+
* Get the aggregator of the measure
|
|
41065
|
+
*/
|
|
41020
41066
|
aggregator,
|
|
41067
|
+
/**
|
|
41068
|
+
* Get the type of the measure field
|
|
41069
|
+
* e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
|
|
41070
|
+
*/
|
|
41021
41071
|
type: fieldName === "__count" ? "integer" : field?.type ?? "integer",
|
|
41022
41072
|
isValid: !!(field || measure.computedBy),
|
|
41023
41073
|
isHidden: measure.isHidden,
|
|
@@ -41031,10 +41081,30 @@ function createPivotDimension(fields, dimension) {
|
|
|
41031
41081
|
const type = field?.type ?? "integer";
|
|
41032
41082
|
const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
|
|
41033
41083
|
return {
|
|
41084
|
+
/**
|
|
41085
|
+
* Get the display name of the dimension
|
|
41086
|
+
* e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
|
|
41087
|
+
*/
|
|
41034
41088
|
displayName: field?.string ?? dimension.fieldName,
|
|
41089
|
+
/**
|
|
41090
|
+
* Get the name of the dimension, as it is stored in the pivot formula
|
|
41091
|
+
* e.g. "stage_id", "create_date:month"
|
|
41092
|
+
*/
|
|
41035
41093
|
nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
|
|
41094
|
+
/**
|
|
41095
|
+
* Get the name of the field of the dimension
|
|
41096
|
+
* e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
|
|
41097
|
+
*/
|
|
41036
41098
|
fieldName: dimension.fieldName,
|
|
41099
|
+
/**
|
|
41100
|
+
* Get the aggregate operator of the dimension
|
|
41101
|
+
* e.g. "stage_id" -> undefined, "create_date:month" -> "month"
|
|
41102
|
+
*/
|
|
41037
41103
|
granularity,
|
|
41104
|
+
/**
|
|
41105
|
+
* Get the type of the field of the dimension
|
|
41106
|
+
* e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
|
|
41107
|
+
*/
|
|
41038
41108
|
type,
|
|
41039
41109
|
order: dimension.order,
|
|
41040
41110
|
isValid: !!field
|
|
@@ -42074,6 +42144,7 @@ function adaptPivotRange(range, applyChange) {
|
|
|
42074
42144
|
//#endregion
|
|
42075
42145
|
//#region src/components/side_panel/pivot/pivot_side_panel/pivot_side_panel_store.ts
|
|
42076
42146
|
var PivotSidePanelStore = class extends SpreadsheetStore {
|
|
42147
|
+
pivotId;
|
|
42077
42148
|
mutators = [
|
|
42078
42149
|
"reset",
|
|
42079
42150
|
"deferUpdates",
|
|
@@ -49575,6 +49646,11 @@ var CellPlugin = class extends CorePlugin {
|
|
|
49575
49646
|
}
|
|
49576
49647
|
};
|
|
49577
49648
|
var FormulaCellWithDependencies = class {
|
|
49649
|
+
id;
|
|
49650
|
+
format;
|
|
49651
|
+
style;
|
|
49652
|
+
sheetId;
|
|
49653
|
+
getRangeString;
|
|
49578
49654
|
isFormula = true;
|
|
49579
49655
|
compiledFormula;
|
|
49580
49656
|
constructor(id, compiledFormula, format, style, dependencies, sheetId, getRangeString) {
|
|
@@ -49609,6 +49685,10 @@ var FormulaCellWithDependencies = class {
|
|
|
49609
49685
|
}
|
|
49610
49686
|
};
|
|
49611
49687
|
var RangeReferenceToken = class {
|
|
49688
|
+
ranges;
|
|
49689
|
+
rangeIndex;
|
|
49690
|
+
sheetId;
|
|
49691
|
+
getRangeString;
|
|
49612
49692
|
type = "REFERENCE";
|
|
49613
49693
|
constructor(ranges, rangeIndex, sheetId, getRangeString) {
|
|
49614
49694
|
this.ranges = ranges;
|
|
@@ -53505,6 +53585,8 @@ function buildCompilationParameters(context, getters, computeCell) {
|
|
|
53505
53585
|
return new CompilationParametersBuilder(context, getters, computeCell).getParameters();
|
|
53506
53586
|
}
|
|
53507
53587
|
var CompilationParametersBuilder = class {
|
|
53588
|
+
getters;
|
|
53589
|
+
computeCell;
|
|
53508
53590
|
evalContext;
|
|
53509
53591
|
rangeCache = {};
|
|
53510
53592
|
constructor(context, getters, computeCell) {
|
|
@@ -54142,6 +54224,7 @@ var ZoneRBush = class extends import_rbush.default {
|
|
|
54142
54224
|
* It uses an R-Tree data structure to efficiently find dependent cells.
|
|
54143
54225
|
*/
|
|
54144
54226
|
var FormulaDependencyGraph = class {
|
|
54227
|
+
createEmptyPositionSet;
|
|
54145
54228
|
dependencies = new PositionMap();
|
|
54146
54229
|
rTree;
|
|
54147
54230
|
constructor(createEmptyPositionSet, data = []) {
|
|
@@ -54443,6 +54526,7 @@ const MAX_ITERATION = 30;
|
|
|
54443
54526
|
const ERROR_CYCLE_CELL = Object.freeze(createEvaluatedCell(new CircularDependencyError()));
|
|
54444
54527
|
const EMPTY_CELL = Object.freeze(createEvaluatedCell({ value: null }));
|
|
54445
54528
|
var Evaluator = class {
|
|
54529
|
+
context;
|
|
54446
54530
|
getters;
|
|
54447
54531
|
compilationParams;
|
|
54448
54532
|
evaluatedCells = new PositionMap();
|
|
@@ -56425,6 +56509,7 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
56425
56509
|
"getPivot",
|
|
56426
56510
|
"getFirstPivotFunction",
|
|
56427
56511
|
"getPivotIdFromPosition",
|
|
56512
|
+
"getPivotIdsFromPosition",
|
|
56428
56513
|
"getPivotCellFromPosition",
|
|
56429
56514
|
"generateNewCalculatedMeasureName",
|
|
56430
56515
|
"isPivotUnused",
|
|
@@ -56449,9 +56534,11 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
56449
56534
|
this.refreshPivot(cmd.id);
|
|
56450
56535
|
break;
|
|
56451
56536
|
case "ADD_PIVOT":
|
|
56537
|
+
this.unusedPivots?.push(cmd.pivotId);
|
|
56452
56538
|
this.setupPivot(cmd.pivotId);
|
|
56453
56539
|
break;
|
|
56454
56540
|
case "DUPLICATE_PIVOT":
|
|
56541
|
+
this.unusedPivots?.push(cmd.newPivotId);
|
|
56455
56542
|
this.setupPivot(cmd.newPivotId);
|
|
56456
56543
|
break;
|
|
56457
56544
|
case "UPDATE_PIVOT":
|
|
@@ -56482,37 +56569,52 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
56482
56569
|
}
|
|
56483
56570
|
}
|
|
56484
56571
|
/**
|
|
56485
|
-
* Get the id of the pivot at the given position. Returns undefined if there
|
|
56572
|
+
* Get the id of the first pivot in the formula at the given position. Returns undefined if there
|
|
56486
56573
|
* is no pivot at this position
|
|
56487
56574
|
*/
|
|
56488
56575
|
getPivotIdFromPosition(position) {
|
|
56576
|
+
return this.getPivotIdsFromPosition(position)[0];
|
|
56577
|
+
}
|
|
56578
|
+
/**
|
|
56579
|
+
* Get all of the ids of the pivot present in the formula at the given position.
|
|
56580
|
+
*/
|
|
56581
|
+
getPivotIdsFromPosition(position) {
|
|
56489
56582
|
const cell = this.getters.getCorrespondingFormulaCell(position);
|
|
56490
|
-
if (cell && cell.isFormula)
|
|
56491
|
-
|
|
56492
|
-
|
|
56493
|
-
|
|
56494
|
-
|
|
56495
|
-
|
|
56496
|
-
|
|
56583
|
+
if (cell && cell.isFormula) return this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
|
|
56584
|
+
return [];
|
|
56585
|
+
}
|
|
56586
|
+
getPivotIdsFromFormula(sheetId, formula) {
|
|
56587
|
+
return this.getPivotFunctions(sheetId, formula.tokens).map((pivotFunction) => {
|
|
56588
|
+
const pivotId = pivotFunction.args[0]?.toString();
|
|
56589
|
+
return pivotId && this.getters.getPivotId(pivotId);
|
|
56590
|
+
}).filter(isDefined);
|
|
56497
56591
|
}
|
|
56498
56592
|
isSpillPivotFormula(position) {
|
|
56499
56593
|
const cell = this.getters.getCorrespondingFormulaCell(position);
|
|
56500
56594
|
if (cell && cell.isFormula) return this.getFirstPivotFunction(position.sheetId, cell.compiledFormula.tokens)?.functionName === "PIVOT";
|
|
56501
56595
|
return false;
|
|
56502
56596
|
}
|
|
56503
|
-
|
|
56504
|
-
const
|
|
56505
|
-
if (!
|
|
56506
|
-
const
|
|
56507
|
-
|
|
56508
|
-
functionName,
|
|
56509
|
-
|
|
56597
|
+
getPivotFunctions(sheetId, tokens) {
|
|
56598
|
+
const pivotFunctions = getPivotFunctions(tokens);
|
|
56599
|
+
if (!pivotFunctions.length) return [];
|
|
56600
|
+
const evaluatedPivotFunctions = [];
|
|
56601
|
+
for (const pivotFunction of pivotFunctions) {
|
|
56602
|
+
const { functionName, args } = pivotFunction;
|
|
56603
|
+
const evaluatedArgs = args.map((argAst) => {
|
|
56510
56604
|
if (argAst.type === "EMPTY") return;
|
|
56511
56605
|
else if (argAst.type === "STRING" || argAst.type === "BOOLEAN" || argAst.type === "NUMBER") return argAst.value;
|
|
56512
56606
|
const argsString = astToFormula(argAst);
|
|
56513
56607
|
return this.getters.evaluateFormula(sheetId, argsString);
|
|
56514
|
-
})
|
|
56515
|
-
|
|
56608
|
+
});
|
|
56609
|
+
evaluatedPivotFunctions.push({
|
|
56610
|
+
functionName,
|
|
56611
|
+
args: evaluatedArgs
|
|
56612
|
+
});
|
|
56613
|
+
}
|
|
56614
|
+
return evaluatedPivotFunctions;
|
|
56615
|
+
}
|
|
56616
|
+
getFirstPivotFunction(sheetId, tokens) {
|
|
56617
|
+
return this.getPivotFunctions(sheetId, tokens)[0];
|
|
56516
56618
|
}
|
|
56517
56619
|
/**
|
|
56518
56620
|
* Returns the domain args of a pivot formula from a position.
|
|
@@ -56606,8 +56708,8 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
56606
56708
|
const unusedPivots = new Set(this.getters.getPivotIds());
|
|
56607
56709
|
for (const sheetId of this.getters.getSheetIds()) for (const cellId in this.getters.getCells(sheetId)) {
|
|
56608
56710
|
const position = this.getters.getCellPosition(cellId);
|
|
56609
|
-
const
|
|
56610
|
-
|
|
56711
|
+
const pivotIds = this.getPivotIdsFromPosition(position);
|
|
56712
|
+
for (const pivotId of pivotIds) {
|
|
56611
56713
|
unusedPivots.delete(pivotId);
|
|
56612
56714
|
if (!unusedPivots.size) {
|
|
56613
56715
|
this.unusedPivots = [];
|
|
@@ -56615,6 +56717,21 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
56615
56717
|
}
|
|
56616
56718
|
}
|
|
56617
56719
|
}
|
|
56720
|
+
for (const pivotId of this.getters.getPivotIds()) {
|
|
56721
|
+
const pivot = this.getters.getPivotCoreDefinition(pivotId);
|
|
56722
|
+
for (const measure of pivot.measures) if (measure.computedBy) {
|
|
56723
|
+
const { sheetId } = measure.computedBy;
|
|
56724
|
+
const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
|
|
56725
|
+
const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
|
|
56726
|
+
for (const relatedPivotId of relatedPivotIds) {
|
|
56727
|
+
unusedPivots.delete(relatedPivotId);
|
|
56728
|
+
if (!unusedPivots.size) {
|
|
56729
|
+
this.unusedPivots = [];
|
|
56730
|
+
return [];
|
|
56731
|
+
}
|
|
56732
|
+
}
|
|
56733
|
+
}
|
|
56734
|
+
}
|
|
56618
56735
|
this.unusedPivots = [...unusedPivots];
|
|
56619
56736
|
return this.unusedPivots;
|
|
56620
56737
|
}
|
|
@@ -57767,6 +57884,8 @@ function transformPositionWithMerge(toTransform, executed) {
|
|
|
57767
57884
|
//#endregion
|
|
57768
57885
|
//#region src/collaborative/revisions.ts
|
|
57769
57886
|
var Revision = class {
|
|
57887
|
+
rootCommand;
|
|
57888
|
+
timestamp;
|
|
57770
57889
|
id;
|
|
57771
57890
|
clientId;
|
|
57772
57891
|
_commands = [];
|
|
@@ -57803,6 +57922,9 @@ var Revision = class {
|
|
|
57803
57922
|
//#region src/collaborative/session.ts
|
|
57804
57923
|
var ClientDisconnectedError = class extends Error {};
|
|
57805
57924
|
var Session = class extends EventBus {
|
|
57925
|
+
revisions;
|
|
57926
|
+
transportService;
|
|
57927
|
+
serverRevisionId;
|
|
57806
57928
|
/**
|
|
57807
57929
|
* Positions of the others client.
|
|
57808
57930
|
*/
|
|
@@ -61242,6 +61364,9 @@ var GridSelectionPlugin = class extends UIPlugin {
|
|
|
61242
61364
|
//#endregion
|
|
61243
61365
|
//#region src/helpers/internal_viewport.ts
|
|
61244
61366
|
var InternalViewport = class {
|
|
61367
|
+
getters;
|
|
61368
|
+
sheetId;
|
|
61369
|
+
boundaries;
|
|
61245
61370
|
top;
|
|
61246
61371
|
bottom;
|
|
61247
61372
|
left;
|
|
@@ -64455,6 +64580,7 @@ function instantiateClipboard() {
|
|
|
64455
64580
|
return new WebClipboardWrapper(navigator.clipboard);
|
|
64456
64581
|
}
|
|
64457
64582
|
var WebClipboardWrapper = class {
|
|
64583
|
+
clipboard;
|
|
64458
64584
|
constructor(clipboard) {
|
|
64459
64585
|
this.clipboard = clipboard;
|
|
64460
64586
|
}
|
|
@@ -64933,6 +65059,8 @@ function inverseCommand(cmd) {
|
|
|
64933
65059
|
* @param operations initial operations
|
|
64934
65060
|
*/
|
|
64935
65061
|
var Branch = class Branch {
|
|
65062
|
+
buildTransformation;
|
|
65063
|
+
operations;
|
|
64936
65064
|
constructor(buildTransformation, operations = []) {
|
|
64937
65065
|
this.buildTransformation = buildTransformation;
|
|
64938
65066
|
this.operations = operations;
|
|
@@ -65049,6 +65177,8 @@ var Branch = class Branch {
|
|
|
65049
65177
|
* to revert it).
|
|
65050
65178
|
*/
|
|
65051
65179
|
var Operation = class {
|
|
65180
|
+
id;
|
|
65181
|
+
data;
|
|
65052
65182
|
constructor(id, data) {
|
|
65053
65183
|
this.id = id;
|
|
65054
65184
|
this.data = data;
|
|
@@ -65058,6 +65188,8 @@ var Operation = class {
|
|
|
65058
65188
|
}
|
|
65059
65189
|
};
|
|
65060
65190
|
var LazyOperation = class LazyOperation {
|
|
65191
|
+
id;
|
|
65192
|
+
lazyData;
|
|
65061
65193
|
constructor(id, lazyData) {
|
|
65062
65194
|
this.id = id;
|
|
65063
65195
|
this.lazyData = lazyData;
|
|
@@ -65083,6 +65215,7 @@ var LazyOperation = class LazyOperation {
|
|
|
65083
65215
|
* ```
|
|
65084
65216
|
*/
|
|
65085
65217
|
var OperationSequence = class OperationSequence {
|
|
65218
|
+
operations;
|
|
65086
65219
|
constructor(operations) {
|
|
65087
65220
|
this.operations = operations;
|
|
65088
65221
|
}
|
|
@@ -65158,6 +65291,7 @@ var OperationSequence = class OperationSequence {
|
|
|
65158
65291
|
*
|
|
65159
65292
|
*/
|
|
65160
65293
|
var Tree = class {
|
|
65294
|
+
buildTransformation;
|
|
65161
65295
|
branches;
|
|
65162
65296
|
branchingOperationIds = /* @__PURE__ */ new Map();
|
|
65163
65297
|
constructor(buildTransformation, initialBranch) {
|
|
@@ -65740,6 +65874,7 @@ var EventStream = class {
|
|
|
65740
65874
|
* with the new selected anchor
|
|
65741
65875
|
*/
|
|
65742
65876
|
var SelectionStreamProcessorImpl = class {
|
|
65877
|
+
getters;
|
|
65743
65878
|
stream;
|
|
65744
65879
|
/**
|
|
65745
65880
|
* "Active" anchor used as a reference to compute new anchors
|
|
@@ -69033,6 +69168,6 @@ exports.stores = stores;
|
|
|
69033
69168
|
exports.tokenColors = tokenColors;
|
|
69034
69169
|
exports.tokenize = tokenize;
|
|
69035
69170
|
|
|
69036
|
-
__info__.version = "18.2.
|
|
69037
|
-
__info__.date = "2026-
|
|
69038
|
-
__info__.hash = "
|
|
69171
|
+
__info__.version = "18.2.55";
|
|
69172
|
+
__info__.date = "2026-06-06T06:20:23.893Z";
|
|
69173
|
+
__info__.hash = "57b568a";
|
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.2.
|
|
6
|
-
* @date 2026-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.2.55
|
|
6
|
+
* @date 2026-06-06T06:20:25.457Z
|
|
7
|
+
* @hash 57b568a
|
|
8
8
|
*/
|
|
9
9
|
/* Originates from src/components/spreadsheet/spreadsheet.scss */
|
|
10
10
|
.o-spreadsheet {
|