@odoo/o-spreadsheet 18.3.47 → 18.3.49
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 -27
- package/dist/o_spreadsheet.css +3 -3
- package/dist/o_spreadsheet.esm.js +164 -27
- package/dist/o_spreadsheet.iife.js +164 -27
- package/dist/o_spreadsheet.iife.min.js +300 -300
- package/dist/o_spreadsheet.xml +4 -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.3.
|
|
6
|
-
* @date 2026-05-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.3.49
|
|
6
|
+
* @date 2026-05-27T05:57:05.809Z
|
|
7
|
+
* @hash fc34456
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
@@ -1351,6 +1351,7 @@ function getAlternatingColorsPalette(quantity) {
|
|
|
1351
1351
|
else return ALTERNATING_COLORS_XL;
|
|
1352
1352
|
}
|
|
1353
1353
|
var ColorGenerator = class {
|
|
1354
|
+
preferredColors;
|
|
1354
1355
|
currentColorIndex = 0;
|
|
1355
1356
|
palette;
|
|
1356
1357
|
constructor(paletteSize, preferredColors = []) {
|
|
@@ -2932,6 +2933,7 @@ const _t = function(s, ...values) {
|
|
|
2932
2933
|
return sprintf(_translate(s), ...values);
|
|
2933
2934
|
};
|
|
2934
2935
|
var LazyTranslatedString = class extends String {
|
|
2936
|
+
values;
|
|
2935
2937
|
constructor(str, values) {
|
|
2936
2938
|
super(str);
|
|
2937
2939
|
this.values = values;
|
|
@@ -3330,6 +3332,8 @@ const CellErrorType = {
|
|
|
3330
3332
|
};
|
|
3331
3333
|
const errorTypes = new Set(Object.values(CellErrorType));
|
|
3332
3334
|
var EvaluationError = class {
|
|
3335
|
+
message;
|
|
3336
|
+
value;
|
|
3333
3337
|
constructor(message = _t("Error"), value = CellErrorType.GenericError) {
|
|
3334
3338
|
this.message = message;
|
|
3335
3339
|
this.value = value;
|
|
@@ -3362,6 +3366,7 @@ var UnknownFunctionError = class extends EvaluationError {
|
|
|
3362
3366
|
}
|
|
3363
3367
|
};
|
|
3364
3368
|
var SplillBlockedError = class extends EvaluationError {
|
|
3369
|
+
errorOriginPosition;
|
|
3365
3370
|
constructor(message = _t("Spill range is not empty"), errorOriginPosition) {
|
|
3366
3371
|
super(message, CellErrorType.SpilledBlocked);
|
|
3367
3372
|
this.errorOriginPosition = errorOriginPosition;
|
|
@@ -5513,8 +5518,13 @@ function getApplyRangeChangeAddColRow(cmd) {
|
|
|
5513
5518
|
changeType: "NONE",
|
|
5514
5519
|
range
|
|
5515
5520
|
};
|
|
5521
|
+
const isUnboundedAtEnd = range.unboundedZone[end] === void 0;
|
|
5522
|
+
if (isUnboundedAtEnd && !range.unboundedZone.hasHeader) return {
|
|
5523
|
+
changeType: "RESIZE",
|
|
5524
|
+
range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
|
|
5525
|
+
};
|
|
5516
5526
|
if (cmd.position === "after") {
|
|
5517
|
-
if (range.zone[start] <= cmd.base && cmd.base < range.zone[end]) return {
|
|
5527
|
+
if (range.zone[start] <= cmd.base && (cmd.base < range.zone[end] || isUnboundedAtEnd)) return {
|
|
5518
5528
|
changeType: "RESIZE",
|
|
5519
5529
|
range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
|
|
5520
5530
|
};
|
|
@@ -6158,6 +6168,8 @@ const selectPastedZone = (selection, sourceZones, pastedZones) => {
|
|
|
6158
6168
|
//#endregion
|
|
6159
6169
|
//#region src/clipboard_handlers/abstract_clipboard_handler.ts
|
|
6160
6170
|
var ClipboardHandler = class {
|
|
6171
|
+
getters;
|
|
6172
|
+
dispatch;
|
|
6161
6173
|
constructor(getters, dispatch) {
|
|
6162
6174
|
this.getters = getters;
|
|
6163
6175
|
this.dispatch = dispatch;
|
|
@@ -8583,6 +8595,7 @@ var DependencyContainer = class extends EventBus {
|
|
|
8583
8595
|
}
|
|
8584
8596
|
};
|
|
8585
8597
|
var StoreFactory = class {
|
|
8598
|
+
get;
|
|
8586
8599
|
pendingBuilds = /* @__PURE__ */ new Set();
|
|
8587
8600
|
constructor(get) {
|
|
8588
8601
|
this.get = get;
|
|
@@ -8627,6 +8640,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
8627
8640
|
return MetaStore;
|
|
8628
8641
|
}
|
|
8629
8642
|
var DisposableStore = class {
|
|
8643
|
+
get;
|
|
8630
8644
|
disposeCallbacks = [];
|
|
8631
8645
|
constructor(get) {
|
|
8632
8646
|
this.get = get;
|
|
@@ -16905,6 +16919,7 @@ function hasStringMessage(obj) {
|
|
|
16905
16919
|
//#endregion
|
|
16906
16920
|
//#region src/formulas/code_builder.ts
|
|
16907
16921
|
var FunctionCodeBuilder = class {
|
|
16922
|
+
scope;
|
|
16908
16923
|
code = "";
|
|
16909
16924
|
constructor(scope = new Scope()) {
|
|
16910
16925
|
this.scope = scope;
|
|
@@ -16920,6 +16935,8 @@ var FunctionCodeBuilder = class {
|
|
|
16920
16935
|
}
|
|
16921
16936
|
};
|
|
16922
16937
|
var FunctionCodeImpl = class {
|
|
16938
|
+
scope;
|
|
16939
|
+
returnExpression;
|
|
16923
16940
|
code;
|
|
16924
16941
|
constructor(scope, code, returnExpression) {
|
|
16925
16942
|
this.scope = scope;
|
|
@@ -18780,6 +18797,7 @@ function getScorecardConfiguration({ width, height }, runtime) {
|
|
|
18780
18797
|
}, runtime).computeDesign();
|
|
18781
18798
|
}
|
|
18782
18799
|
var ScorecardChartConfigBuilder = class {
|
|
18800
|
+
runtime;
|
|
18783
18801
|
context;
|
|
18784
18802
|
width;
|
|
18785
18803
|
height;
|
|
@@ -19898,6 +19916,9 @@ function extractFormulaIdFromToken(tokenAtCursor) {
|
|
|
19898
19916
|
function getFirstPivotFunction(tokens) {
|
|
19899
19917
|
return getFunctionsFromTokens(tokens, PIVOT_FUNCTIONS)[0];
|
|
19900
19918
|
}
|
|
19919
|
+
function getPivotFunctions(tokens) {
|
|
19920
|
+
return getFunctionsFromTokens(tokens, PIVOT_FUNCTIONS);
|
|
19921
|
+
}
|
|
19901
19922
|
/**
|
|
19902
19923
|
* Parse a spreadsheet formula and detect the number of PIVOT functions that are
|
|
19903
19924
|
* present in the given formula.
|
|
@@ -25563,6 +25584,7 @@ function getMaxFigureSize(getters, figureSize) {
|
|
|
25563
25584
|
* Represent a raw XML string
|
|
25564
25585
|
*/
|
|
25565
25586
|
var XMLString = class {
|
|
25587
|
+
xmlString;
|
|
25566
25588
|
/**
|
|
25567
25589
|
* @param xmlString should be a well formed, properly escaped XML string
|
|
25568
25590
|
*/
|
|
@@ -26158,6 +26180,10 @@ const FORCE_DEFAULT_ARGS_FUNCTIONS = {
|
|
|
26158
26180
|
ROUNDDOWN: [{
|
|
26159
26181
|
type: "NUMBER",
|
|
26160
26182
|
value: 0
|
|
26183
|
+
}],
|
|
26184
|
+
IFERROR: [{
|
|
26185
|
+
type: "NUMBER",
|
|
26186
|
+
value: 0
|
|
26161
26187
|
}]
|
|
26162
26188
|
};
|
|
26163
26189
|
/**
|
|
@@ -31887,6 +31913,10 @@ var Popover = class extends _odoo_owl.Component {
|
|
|
31887
31913
|
}
|
|
31888
31914
|
};
|
|
31889
31915
|
var PopoverPositionContext = class {
|
|
31916
|
+
anchorRect;
|
|
31917
|
+
containerRect;
|
|
31918
|
+
propsMaxSize;
|
|
31919
|
+
spreadsheetOffset;
|
|
31890
31920
|
constructor(anchorRect, containerRect, propsMaxSize, spreadsheetOffset) {
|
|
31891
31921
|
this.anchorRect = anchorRect;
|
|
31892
31922
|
this.containerRect = containerRect;
|
|
@@ -34673,7 +34703,7 @@ function getVisiblePivotCellPositions(getters, pivotId) {
|
|
|
34673
34703
|
col,
|
|
34674
34704
|
row
|
|
34675
34705
|
};
|
|
34676
|
-
if (
|
|
34706
|
+
if (getters.getPivotIdsFromPosition(position).includes(pivotId)) positions.push(position);
|
|
34677
34707
|
}
|
|
34678
34708
|
return positions;
|
|
34679
34709
|
}
|
|
@@ -35336,6 +35366,7 @@ var DOMDndHelper = class {
|
|
|
35336
35366
|
}
|
|
35337
35367
|
};
|
|
35338
35368
|
var ContainerWrapper = class {
|
|
35369
|
+
el;
|
|
35339
35370
|
constructor(el) {
|
|
35340
35371
|
this.el = el;
|
|
35341
35372
|
}
|
|
@@ -35421,6 +35452,9 @@ var FocusStore = class {
|
|
|
35421
35452
|
* This plugin handles this internal state.
|
|
35422
35453
|
*/
|
|
35423
35454
|
var SelectionInputStore = class extends SpreadsheetStore {
|
|
35455
|
+
initialRanges;
|
|
35456
|
+
inputHasSingleRange;
|
|
35457
|
+
colors;
|
|
35424
35458
|
mutators = [
|
|
35425
35459
|
"resetWithRanges",
|
|
35426
35460
|
"focusById",
|
|
@@ -38724,6 +38758,7 @@ var Composer = class extends _odoo_owl.Component {
|
|
|
38724
38758
|
//#endregion
|
|
38725
38759
|
//#region src/components/composer/standalone_composer/standalone_composer_store.ts
|
|
38726
38760
|
var StandaloneComposerStore = class extends AbstractComposerStore {
|
|
38761
|
+
args;
|
|
38727
38762
|
constructor(get, args) {
|
|
38728
38763
|
super(get);
|
|
38729
38764
|
this.args = args;
|
|
@@ -42496,6 +42531,8 @@ var MoreFormatsPanel = class extends _odoo_owl.Component {
|
|
|
42496
42531
|
//#endregion
|
|
42497
42532
|
//#region src/components/side_panel/pivot/pivot_measure_display_panel/pivot_measure_display_panel_store.ts
|
|
42498
42533
|
var PivotMeasureDisplayPanelStore = class extends SpreadsheetStore {
|
|
42534
|
+
pivotId;
|
|
42535
|
+
initialMeasure;
|
|
42499
42536
|
mutators = [
|
|
42500
42537
|
"cancelMeasureDisplayEdition",
|
|
42501
42538
|
"updateMeasureDisplayType",
|
|
@@ -43535,13 +43572,30 @@ function createMeasure(fields, measure) {
|
|
|
43535
43572
|
} : fields[fieldName];
|
|
43536
43573
|
const aggregator = measure.aggregator;
|
|
43537
43574
|
return {
|
|
43575
|
+
/**
|
|
43576
|
+
* Get the id of the measure, as it is stored in the pivot formula
|
|
43577
|
+
*/
|
|
43538
43578
|
id: measure.id,
|
|
43579
|
+
/**
|
|
43580
|
+
* Display name of the measure
|
|
43581
|
+
* e.g. "__count" -> "Count", "amount_total" -> "Total Amount"
|
|
43582
|
+
*/
|
|
43539
43583
|
get displayName() {
|
|
43540
43584
|
return measure.userDefinedName ?? field?.string ?? measure.fieldName;
|
|
43541
43585
|
},
|
|
43542
43586
|
userDefinedName: measure.userDefinedName,
|
|
43587
|
+
/**
|
|
43588
|
+
* Get the name of the field of the measure
|
|
43589
|
+
*/
|
|
43543
43590
|
fieldName,
|
|
43591
|
+
/**
|
|
43592
|
+
* Get the aggregator of the measure
|
|
43593
|
+
*/
|
|
43544
43594
|
aggregator,
|
|
43595
|
+
/**
|
|
43596
|
+
* Get the type of the measure field
|
|
43597
|
+
* e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
|
|
43598
|
+
*/
|
|
43545
43599
|
type: fieldName === "__count" ? "integer" : field?.type ?? "integer",
|
|
43546
43600
|
isValid: !!(field || measure.computedBy),
|
|
43547
43601
|
isHidden: measure.isHidden,
|
|
@@ -43555,10 +43609,30 @@ function createPivotDimension(fields, dimension) {
|
|
|
43555
43609
|
const type = field?.type ?? "integer";
|
|
43556
43610
|
const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
|
|
43557
43611
|
return {
|
|
43612
|
+
/**
|
|
43613
|
+
* Get the display name of the dimension
|
|
43614
|
+
* e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
|
|
43615
|
+
*/
|
|
43558
43616
|
displayName: field?.string ?? dimension.fieldName,
|
|
43617
|
+
/**
|
|
43618
|
+
* Get the name of the dimension, as it is stored in the pivot formula
|
|
43619
|
+
* e.g. "stage_id", "create_date:month"
|
|
43620
|
+
*/
|
|
43559
43621
|
nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
|
|
43622
|
+
/**
|
|
43623
|
+
* Get the name of the field of the dimension
|
|
43624
|
+
* e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
|
|
43625
|
+
*/
|
|
43560
43626
|
fieldName: dimension.fieldName,
|
|
43627
|
+
/**
|
|
43628
|
+
* Get the aggregate operator of the dimension
|
|
43629
|
+
* e.g. "stage_id" -> undefined, "create_date:month" -> "month"
|
|
43630
|
+
*/
|
|
43561
43631
|
granularity,
|
|
43632
|
+
/**
|
|
43633
|
+
* Get the type of the field of the dimension
|
|
43634
|
+
* e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
|
|
43635
|
+
*/
|
|
43562
43636
|
type,
|
|
43563
43637
|
order: dimension.order,
|
|
43564
43638
|
isValid: !!field
|
|
@@ -44597,6 +44671,7 @@ function adaptPivotRange(range, applyChange) {
|
|
|
44597
44671
|
//#endregion
|
|
44598
44672
|
//#region src/components/side_panel/pivot/pivot_side_panel/pivot_side_panel_store.ts
|
|
44599
44673
|
var PivotSidePanelStore = class extends SpreadsheetStore {
|
|
44674
|
+
pivotId;
|
|
44600
44675
|
mutators = [
|
|
44601
44676
|
"reset",
|
|
44602
44677
|
"deferUpdates",
|
|
@@ -52265,6 +52340,11 @@ var CellPlugin = class extends CorePlugin {
|
|
|
52265
52340
|
}
|
|
52266
52341
|
};
|
|
52267
52342
|
var FormulaCellWithDependencies = class {
|
|
52343
|
+
id;
|
|
52344
|
+
format;
|
|
52345
|
+
style;
|
|
52346
|
+
sheetId;
|
|
52347
|
+
getRangeString;
|
|
52268
52348
|
isFormula = true;
|
|
52269
52349
|
compiledFormula;
|
|
52270
52350
|
constructor(id, compiledFormula, format, style, dependencies, sheetId, getRangeString) {
|
|
@@ -52299,6 +52379,10 @@ var FormulaCellWithDependencies = class {
|
|
|
52299
52379
|
}
|
|
52300
52380
|
};
|
|
52301
52381
|
var RangeReferenceToken = class {
|
|
52382
|
+
ranges;
|
|
52383
|
+
rangeIndex;
|
|
52384
|
+
sheetId;
|
|
52385
|
+
getRangeString;
|
|
52302
52386
|
type = "REFERENCE";
|
|
52303
52387
|
constructor(ranges, rangeIndex, sheetId, getRangeString) {
|
|
52304
52388
|
this.ranges = ranges;
|
|
@@ -56110,6 +56194,8 @@ function buildCompilationParameters(context, getters, computeCell) {
|
|
|
56110
56194
|
return new CompilationParametersBuilder(context, getters, computeCell).getParameters();
|
|
56111
56195
|
}
|
|
56112
56196
|
var CompilationParametersBuilder = class {
|
|
56197
|
+
getters;
|
|
56198
|
+
computeCell;
|
|
56113
56199
|
evalContext;
|
|
56114
56200
|
rangeCache = {};
|
|
56115
56201
|
constructor(context, getters, computeCell) {
|
|
@@ -56747,6 +56833,7 @@ var ZoneRBush = class extends import_rbush.default {
|
|
|
56747
56833
|
* It uses an R-Tree data structure to efficiently find dependent cells.
|
|
56748
56834
|
*/
|
|
56749
56835
|
var FormulaDependencyGraph = class {
|
|
56836
|
+
createEmptyPositionSet;
|
|
56750
56837
|
dependencies = new PositionMap();
|
|
56751
56838
|
rTree;
|
|
56752
56839
|
constructor(createEmptyPositionSet, data = []) {
|
|
@@ -57048,6 +57135,7 @@ const MAX_ITERATION = 30;
|
|
|
57048
57135
|
const ERROR_CYCLE_CELL = Object.freeze(createEvaluatedCell(new CircularDependencyError()));
|
|
57049
57136
|
const EMPTY_CELL = Object.freeze(createEvaluatedCell({ value: null }));
|
|
57050
57137
|
var Evaluator = class {
|
|
57138
|
+
context;
|
|
57051
57139
|
getters;
|
|
57052
57140
|
compilationParams;
|
|
57053
57141
|
evaluatedCells = new PositionMap();
|
|
@@ -59053,6 +59141,7 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
59053
59141
|
"getPivot",
|
|
59054
59142
|
"getFirstPivotFunction",
|
|
59055
59143
|
"getPivotIdFromPosition",
|
|
59144
|
+
"getPivotIdsFromPosition",
|
|
59056
59145
|
"getPivotCellFromPosition",
|
|
59057
59146
|
"generateNewCalculatedMeasureName",
|
|
59058
59147
|
"isPivotUnused",
|
|
@@ -59110,37 +59199,52 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
59110
59199
|
}
|
|
59111
59200
|
}
|
|
59112
59201
|
/**
|
|
59113
|
-
* Get the id of the pivot at the given position. Returns undefined if there
|
|
59202
|
+
* Get the id of the first pivot in the formula at the given position. Returns undefined if there
|
|
59114
59203
|
* is no pivot at this position
|
|
59115
59204
|
*/
|
|
59116
59205
|
getPivotIdFromPosition(position) {
|
|
59206
|
+
return this.getPivotIdsFromPosition(position)[0];
|
|
59207
|
+
}
|
|
59208
|
+
/**
|
|
59209
|
+
* Get all of the ids of the pivot present in the formula at the given position.
|
|
59210
|
+
*/
|
|
59211
|
+
getPivotIdsFromPosition(position) {
|
|
59117
59212
|
const cell = this.getters.getCorrespondingFormulaCell(position);
|
|
59118
|
-
if (cell && cell.isFormula)
|
|
59119
|
-
|
|
59120
|
-
|
|
59121
|
-
|
|
59122
|
-
|
|
59123
|
-
|
|
59124
|
-
|
|
59213
|
+
if (cell && cell.isFormula) return this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
|
|
59214
|
+
return [];
|
|
59215
|
+
}
|
|
59216
|
+
getPivotIdsFromFormula(sheetId, formula) {
|
|
59217
|
+
return this.getPivotFunctions(sheetId, formula.tokens).map((pivotFunction) => {
|
|
59218
|
+
const pivotId = pivotFunction.args[0]?.toString();
|
|
59219
|
+
return pivotId && this.getters.getPivotId(pivotId);
|
|
59220
|
+
}).filter(isDefined);
|
|
59125
59221
|
}
|
|
59126
59222
|
isSpillPivotFormula(position) {
|
|
59127
59223
|
const cell = this.getters.getCorrespondingFormulaCell(position);
|
|
59128
59224
|
if (cell && cell.isFormula) return this.getFirstPivotFunction(position.sheetId, cell.compiledFormula.tokens)?.functionName === "PIVOT";
|
|
59129
59225
|
return false;
|
|
59130
59226
|
}
|
|
59131
|
-
|
|
59132
|
-
const
|
|
59133
|
-
if (!
|
|
59134
|
-
const
|
|
59135
|
-
|
|
59136
|
-
functionName,
|
|
59137
|
-
|
|
59227
|
+
getPivotFunctions(sheetId, tokens) {
|
|
59228
|
+
const pivotFunctions = getPivotFunctions(tokens);
|
|
59229
|
+
if (!pivotFunctions.length) return [];
|
|
59230
|
+
const evaluatedPivotFunctions = [];
|
|
59231
|
+
for (const pivotFunction of pivotFunctions) {
|
|
59232
|
+
const { functionName, args } = pivotFunction;
|
|
59233
|
+
const evaluatedArgs = args.map((argAst) => {
|
|
59138
59234
|
if (argAst.type === "EMPTY") return;
|
|
59139
59235
|
else if (argAst.type === "STRING" || argAst.type === "BOOLEAN" || argAst.type === "NUMBER") return argAst.value;
|
|
59140
59236
|
const argsString = astToFormula(argAst);
|
|
59141
59237
|
return this.getters.evaluateFormula(sheetId, argsString);
|
|
59142
|
-
})
|
|
59143
|
-
|
|
59238
|
+
});
|
|
59239
|
+
evaluatedPivotFunctions.push({
|
|
59240
|
+
functionName,
|
|
59241
|
+
args: evaluatedArgs
|
|
59242
|
+
});
|
|
59243
|
+
}
|
|
59244
|
+
return evaluatedPivotFunctions;
|
|
59245
|
+
}
|
|
59246
|
+
getFirstPivotFunction(sheetId, tokens) {
|
|
59247
|
+
return this.getPivotFunctions(sheetId, tokens)[0];
|
|
59144
59248
|
}
|
|
59145
59249
|
/**
|
|
59146
59250
|
* Returns the domain args of a pivot formula from a position.
|
|
@@ -59234,8 +59338,8 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
59234
59338
|
const unusedPivots = new Set(this.getters.getPivotIds());
|
|
59235
59339
|
for (const sheetId of this.getters.getSheetIds()) for (const cellId in this.getters.getCells(sheetId)) {
|
|
59236
59340
|
const position = this.getters.getCellPosition(cellId);
|
|
59237
|
-
const
|
|
59238
|
-
|
|
59341
|
+
const pivotIds = this.getPivotIdsFromPosition(position);
|
|
59342
|
+
for (const pivotId of pivotIds) {
|
|
59239
59343
|
unusedPivots.delete(pivotId);
|
|
59240
59344
|
if (!unusedPivots.size) {
|
|
59241
59345
|
this.unusedPivots = [];
|
|
@@ -59243,6 +59347,21 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
59243
59347
|
}
|
|
59244
59348
|
}
|
|
59245
59349
|
}
|
|
59350
|
+
for (const pivotId of this.getters.getPivotIds()) {
|
|
59351
|
+
const pivot = this.getters.getPivot(pivotId);
|
|
59352
|
+
for (const measure of pivot.definition.measures) if (measure.computedBy) {
|
|
59353
|
+
const { sheetId } = measure.computedBy;
|
|
59354
|
+
const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
|
|
59355
|
+
const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
|
|
59356
|
+
for (const relatedPivotId of relatedPivotIds) {
|
|
59357
|
+
unusedPivots.delete(relatedPivotId);
|
|
59358
|
+
if (!unusedPivots.size) {
|
|
59359
|
+
this.unusedPivots = [];
|
|
59360
|
+
return [];
|
|
59361
|
+
}
|
|
59362
|
+
}
|
|
59363
|
+
}
|
|
59364
|
+
}
|
|
59246
59365
|
this.unusedPivots = [...unusedPivots];
|
|
59247
59366
|
return this.unusedPivots;
|
|
59248
59367
|
}
|
|
@@ -60496,6 +60615,8 @@ function transformPositionWithMerge(toTransform, executed) {
|
|
|
60496
60615
|
//#endregion
|
|
60497
60616
|
//#region src/collaborative/revisions.ts
|
|
60498
60617
|
var Revision = class {
|
|
60618
|
+
rootCommand;
|
|
60619
|
+
timestamp;
|
|
60499
60620
|
id;
|
|
60500
60621
|
clientId;
|
|
60501
60622
|
_commands = [];
|
|
@@ -60532,6 +60653,9 @@ var Revision = class {
|
|
|
60532
60653
|
//#region src/collaborative/session.ts
|
|
60533
60654
|
var ClientDisconnectedError = class extends Error {};
|
|
60534
60655
|
var Session = class extends EventBus {
|
|
60656
|
+
revisions;
|
|
60657
|
+
transportService;
|
|
60658
|
+
serverRevisionId;
|
|
60535
60659
|
/**
|
|
60536
60660
|
* Positions of the others client.
|
|
60537
60661
|
*/
|
|
@@ -64105,6 +64229,9 @@ var GridSelectionPlugin = class extends UIPlugin {
|
|
|
64105
64229
|
//#endregion
|
|
64106
64230
|
//#region src/helpers/internal_viewport.ts
|
|
64107
64231
|
var InternalViewport = class {
|
|
64232
|
+
getters;
|
|
64233
|
+
sheetId;
|
|
64234
|
+
boundaries;
|
|
64108
64235
|
top;
|
|
64109
64236
|
bottom;
|
|
64110
64237
|
left;
|
|
@@ -67718,6 +67845,7 @@ function instantiateClipboard() {
|
|
|
67718
67845
|
return new WebClipboardWrapper(navigator.clipboard);
|
|
67719
67846
|
}
|
|
67720
67847
|
var WebClipboardWrapper = class {
|
|
67848
|
+
clipboard;
|
|
67721
67849
|
constructor(clipboard) {
|
|
67722
67850
|
this.clipboard = clipboard;
|
|
67723
67851
|
}
|
|
@@ -68206,6 +68334,8 @@ function inverseCommand(cmd) {
|
|
|
68206
68334
|
* @param operations initial operations
|
|
68207
68335
|
*/
|
|
68208
68336
|
var Branch = class Branch {
|
|
68337
|
+
buildTransformation;
|
|
68338
|
+
operations;
|
|
68209
68339
|
constructor(buildTransformation, operations = []) {
|
|
68210
68340
|
this.buildTransformation = buildTransformation;
|
|
68211
68341
|
this.operations = operations;
|
|
@@ -68322,6 +68452,8 @@ var Branch = class Branch {
|
|
|
68322
68452
|
* to revert it).
|
|
68323
68453
|
*/
|
|
68324
68454
|
var Operation = class {
|
|
68455
|
+
id;
|
|
68456
|
+
data;
|
|
68325
68457
|
constructor(id, data) {
|
|
68326
68458
|
this.id = id;
|
|
68327
68459
|
this.data = data;
|
|
@@ -68331,6 +68463,8 @@ var Operation = class {
|
|
|
68331
68463
|
}
|
|
68332
68464
|
};
|
|
68333
68465
|
var LazyOperation = class LazyOperation {
|
|
68466
|
+
id;
|
|
68467
|
+
lazyData;
|
|
68334
68468
|
constructor(id, lazyData) {
|
|
68335
68469
|
this.id = id;
|
|
68336
68470
|
this.lazyData = lazyData;
|
|
@@ -68356,6 +68490,7 @@ var LazyOperation = class LazyOperation {
|
|
|
68356
68490
|
* ```
|
|
68357
68491
|
*/
|
|
68358
68492
|
var OperationSequence = class OperationSequence {
|
|
68493
|
+
operations;
|
|
68359
68494
|
constructor(operations) {
|
|
68360
68495
|
this.operations = operations;
|
|
68361
68496
|
}
|
|
@@ -68431,6 +68566,7 @@ var OperationSequence = class OperationSequence {
|
|
|
68431
68566
|
*
|
|
68432
68567
|
*/
|
|
68433
68568
|
var Tree = class {
|
|
68569
|
+
buildTransformation;
|
|
68434
68570
|
branches;
|
|
68435
68571
|
branchingOperationIds = /* @__PURE__ */ new Map();
|
|
68436
68572
|
constructor(buildTransformation, initialBranch) {
|
|
@@ -69013,6 +69149,7 @@ var EventStream = class {
|
|
|
69013
69149
|
* with the new selected anchor
|
|
69014
69150
|
*/
|
|
69015
69151
|
var SelectionStreamProcessorImpl = class {
|
|
69152
|
+
getters;
|
|
69016
69153
|
stream;
|
|
69017
69154
|
/**
|
|
69018
69155
|
* "Active" anchor used as a reference to compute new anchors
|
|
@@ -72315,6 +72452,6 @@ exports.stores = stores;
|
|
|
72315
72452
|
exports.tokenColors = tokenColors;
|
|
72316
72453
|
exports.tokenize = tokenize;
|
|
72317
72454
|
|
|
72318
|
-
__info__.version = "18.3.
|
|
72319
|
-
__info__.date = "2026-05-
|
|
72320
|
-
__info__.hash = "
|
|
72455
|
+
__info__.version = "18.3.49";
|
|
72456
|
+
__info__.date = "2026-05-27T05:57:05.809Z";
|
|
72457
|
+
__info__.hash = "fc34456";
|
package/dist/o_spreadsheet.css
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
/*
|
|
3
3
|
* This file is generated by o-spreadsheet build tools. Do not edit it.
|
|
4
4
|
* @see https://github.com/odoo/o-spreadsheet
|
|
5
|
-
* @version 18.3.
|
|
6
|
-
* @date 2026-05-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.3.49
|
|
6
|
+
* @date 2026-05-27T05:57:07.478Z
|
|
7
|
+
* @hash fc34456
|
|
8
8
|
*/
|
|
9
9
|
/* Originates from src/components/top_bar/top_bar.scss */
|
|
10
10
|
@media (max-width: 900px) {
|