@odoo/o-spreadsheet 19.1.19 → 19.1.21
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 +170 -27
- package/dist/o_spreadsheet.css +3 -3
- package/dist/o_spreadsheet.esm.js +170 -27
- package/dist/o_spreadsheet.iife.js +170 -27
- package/dist/o_spreadsheet.iife.min.js +208 -208
- 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 19.1.
|
|
6
|
-
* @date 2026-05-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.1.21
|
|
6
|
+
* @date 2026-05-27T05:56:49.891Z
|
|
7
|
+
* @hash 99ebe93
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
@@ -2037,6 +2037,7 @@ var DependencyContainer = class extends EventBus {
|
|
|
2037
2037
|
}
|
|
2038
2038
|
};
|
|
2039
2039
|
var StoreFactory = class {
|
|
2040
|
+
get;
|
|
2040
2041
|
pendingBuilds = /* @__PURE__ */ new Set();
|
|
2041
2042
|
constructor(get) {
|
|
2042
2043
|
this.get = get;
|
|
@@ -2081,6 +2082,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
2081
2082
|
return MetaStore;
|
|
2082
2083
|
}
|
|
2083
2084
|
var DisposableStore = class {
|
|
2085
|
+
get;
|
|
2084
2086
|
disposeCallbacks = [];
|
|
2085
2087
|
constructor(get) {
|
|
2086
2088
|
this.get = get;
|
|
@@ -2836,6 +2838,7 @@ function getAlternatingColorsPalette(quantity) {
|
|
|
2836
2838
|
else return ALTERNATING_COLORS_XL;
|
|
2837
2839
|
}
|
|
2838
2840
|
var ColorGenerator = class {
|
|
2841
|
+
preferredColors;
|
|
2839
2842
|
currentColorIndex = 0;
|
|
2840
2843
|
palette;
|
|
2841
2844
|
constructor(paletteSize, preferredColors = []) {
|
|
@@ -3554,6 +3557,7 @@ const _t = function(s, ...values) {
|
|
|
3554
3557
|
return sprintf(_translate(s), ...values);
|
|
3555
3558
|
};
|
|
3556
3559
|
var LazyTranslatedString = class extends String {
|
|
3560
|
+
values;
|
|
3557
3561
|
constructor(str, values) {
|
|
3558
3562
|
super(str);
|
|
3559
3563
|
this.values = values;
|
|
@@ -3583,6 +3587,8 @@ const CellErrorType = {
|
|
|
3583
3587
|
};
|
|
3584
3588
|
const errorTypes = new Set(Object.values(CellErrorType));
|
|
3585
3589
|
var EvaluationError = class {
|
|
3590
|
+
message;
|
|
3591
|
+
value;
|
|
3586
3592
|
constructor(message = _t("Error"), value = CellErrorType.GenericError) {
|
|
3587
3593
|
this.message = message;
|
|
3588
3594
|
this.value = value;
|
|
@@ -3615,6 +3621,7 @@ var UnknownFunctionError = class extends EvaluationError {
|
|
|
3615
3621
|
}
|
|
3616
3622
|
};
|
|
3617
3623
|
var SplillBlockedError = class extends EvaluationError {
|
|
3624
|
+
errorOriginPosition;
|
|
3618
3625
|
constructor(message = _t("Spill range is not empty"), errorOriginPosition) {
|
|
3619
3626
|
super(message, CellErrorType.SpilledBlocked);
|
|
3620
3627
|
this.errorOriginPosition = errorOriginPosition;
|
|
@@ -6421,8 +6428,13 @@ function getApplyRangeChangeAddColRow(cmd) {
|
|
|
6421
6428
|
changeType: "NONE",
|
|
6422
6429
|
range
|
|
6423
6430
|
};
|
|
6431
|
+
const isUnboundedAtEnd = range.unboundedZone[end] === void 0;
|
|
6432
|
+
if (isUnboundedAtEnd && !range.unboundedZone.hasHeader) return {
|
|
6433
|
+
changeType: "RESIZE",
|
|
6434
|
+
range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
|
|
6435
|
+
};
|
|
6424
6436
|
if (cmd.position === "after") {
|
|
6425
|
-
if (range.zone[start] <= cmd.base && cmd.base < range.zone[end]) return {
|
|
6437
|
+
if (range.zone[start] <= cmd.base && (cmd.base < range.zone[end] || isUnboundedAtEnd)) return {
|
|
6426
6438
|
changeType: "RESIZE",
|
|
6427
6439
|
range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
|
|
6428
6440
|
};
|
|
@@ -7351,6 +7363,10 @@ const FORCE_DEFAULT_ARGS_FUNCTIONS = {
|
|
|
7351
7363
|
ROUNDDOWN: [{
|
|
7352
7364
|
type: "NUMBER",
|
|
7353
7365
|
value: 0
|
|
7366
|
+
}],
|
|
7367
|
+
IFERROR: [{
|
|
7368
|
+
type: "NUMBER",
|
|
7369
|
+
value: 0
|
|
7354
7370
|
}]
|
|
7355
7371
|
};
|
|
7356
7372
|
/**
|
|
@@ -10066,6 +10082,7 @@ function getScorecardConfiguration({ width, height }, runtime) {
|
|
|
10066
10082
|
}, runtime).computeDesign();
|
|
10067
10083
|
}
|
|
10068
10084
|
var ScorecardChartConfigBuilder = class {
|
|
10085
|
+
runtime;
|
|
10069
10086
|
context;
|
|
10070
10087
|
width;
|
|
10071
10088
|
height;
|
|
@@ -16113,6 +16130,10 @@ var GaugeChartComponent = class extends _odoo_owl.Component {
|
|
|
16113
16130
|
* Animation interpolating values using the ease-out quartic curve function (chartJS default easing)
|
|
16114
16131
|
*/
|
|
16115
16132
|
var Animation = class {
|
|
16133
|
+
startValue;
|
|
16134
|
+
endValue;
|
|
16135
|
+
duration;
|
|
16136
|
+
callback;
|
|
16116
16137
|
startTime = void 0;
|
|
16117
16138
|
animationFrameId = null;
|
|
16118
16139
|
constructor(startValue, endValue, duration, callback) {
|
|
@@ -16576,6 +16597,11 @@ var Popover = class extends _odoo_owl.Component {
|
|
|
16576
16597
|
}
|
|
16577
16598
|
};
|
|
16578
16599
|
var PopoverPositionContext = class {
|
|
16600
|
+
anchorRect;
|
|
16601
|
+
containerRect;
|
|
16602
|
+
propsMaxSize;
|
|
16603
|
+
spreadsheetOffset;
|
|
16604
|
+
lastPosition;
|
|
16579
16605
|
constructor(anchorRect, containerRect, propsMaxSize, spreadsheetOffset, lastPosition) {
|
|
16580
16606
|
this.anchorRect = anchorRect;
|
|
16581
16607
|
this.containerRect = containerRect;
|
|
@@ -28531,6 +28557,7 @@ var AbstractComposerStore = class extends SpreadsheetStore {
|
|
|
28531
28557
|
//#endregion
|
|
28532
28558
|
//#region src/components/composer/standalone_composer/standalone_composer_store.ts
|
|
28533
28559
|
var StandaloneComposerStore = class extends AbstractComposerStore {
|
|
28560
|
+
args;
|
|
28534
28561
|
constructor(get, args) {
|
|
28535
28562
|
super(get);
|
|
28536
28563
|
this.args = args;
|
|
@@ -29373,6 +29400,7 @@ var DOMDndHelper = class {
|
|
|
29373
29400
|
}
|
|
29374
29401
|
};
|
|
29375
29402
|
var ContainerWrapper = class {
|
|
29403
|
+
el;
|
|
29376
29404
|
constructor(el) {
|
|
29377
29405
|
this.el = el;
|
|
29378
29406
|
}
|
|
@@ -29444,6 +29472,10 @@ var FocusStore = class {
|
|
|
29444
29472
|
* This plugin handles this internal state.
|
|
29445
29473
|
*/
|
|
29446
29474
|
var SelectionInputStore = class extends SpreadsheetStore {
|
|
29475
|
+
initialRanges;
|
|
29476
|
+
inputHasSingleRange;
|
|
29477
|
+
colors;
|
|
29478
|
+
disabledRanges;
|
|
29447
29479
|
mutators = [
|
|
29448
29480
|
"resetWithRanges",
|
|
29449
29481
|
"focusById",
|
|
@@ -31963,6 +31995,7 @@ function buildTableStyle(name, templateName, primaryColor) {
|
|
|
31963
31995
|
* Represent a raw XML string
|
|
31964
31996
|
*/
|
|
31965
31997
|
var XMLString = class {
|
|
31998
|
+
xmlString;
|
|
31966
31999
|
/**
|
|
31967
32000
|
* @param xmlString should be a well formed, properly escaped XML string
|
|
31968
32001
|
*/
|
|
@@ -38341,13 +38374,30 @@ var PivotRuntimeDefinition = class {
|
|
|
38341
38374
|
break;
|
|
38342
38375
|
}
|
|
38343
38376
|
return {
|
|
38377
|
+
/**
|
|
38378
|
+
* Get the id of the measure, as it is stored in the pivot formula
|
|
38379
|
+
*/
|
|
38344
38380
|
id: measure.id,
|
|
38381
|
+
/**
|
|
38382
|
+
* Display name of the measure
|
|
38383
|
+
* e.g. "__count" -> "Count", "amount_total" -> "Total Amount"
|
|
38384
|
+
*/
|
|
38345
38385
|
get displayName() {
|
|
38346
38386
|
return measure.userDefinedName ?? field?.string ?? measure.fieldName;
|
|
38347
38387
|
},
|
|
38348
38388
|
userDefinedName: measure.userDefinedName,
|
|
38389
|
+
/**
|
|
38390
|
+
* Get the name of the field of the measure
|
|
38391
|
+
*/
|
|
38349
38392
|
fieldName,
|
|
38393
|
+
/**
|
|
38394
|
+
* Get the aggregator of the measure
|
|
38395
|
+
*/
|
|
38350
38396
|
aggregator,
|
|
38397
|
+
/**
|
|
38398
|
+
* Get the type of the measure field
|
|
38399
|
+
* e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
|
|
38400
|
+
*/
|
|
38351
38401
|
type: fieldName === "__count" ? "integer" : field?.type ?? "integer",
|
|
38352
38402
|
isValid,
|
|
38353
38403
|
isHidden: measure.isHidden,
|
|
@@ -38361,10 +38411,30 @@ var PivotRuntimeDefinition = class {
|
|
|
38361
38411
|
const type = field?.type ?? "integer";
|
|
38362
38412
|
const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
|
|
38363
38413
|
return {
|
|
38414
|
+
/**
|
|
38415
|
+
* Get the display name of the dimension
|
|
38416
|
+
* e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
|
|
38417
|
+
*/
|
|
38364
38418
|
displayName: field?.string ?? dimension.fieldName,
|
|
38419
|
+
/**
|
|
38420
|
+
* Get the name of the dimension, as it is stored in the pivot formula
|
|
38421
|
+
* e.g. "stage_id", "create_date:month"
|
|
38422
|
+
*/
|
|
38365
38423
|
nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
|
|
38424
|
+
/**
|
|
38425
|
+
* Get the name of the field of the dimension
|
|
38426
|
+
* e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
|
|
38427
|
+
*/
|
|
38366
38428
|
fieldName: dimension.fieldName,
|
|
38429
|
+
/**
|
|
38430
|
+
* Get the aggregate operator of the dimension
|
|
38431
|
+
* e.g. "stage_id" -> undefined, "create_date:month" -> "month"
|
|
38432
|
+
*/
|
|
38367
38433
|
granularity,
|
|
38434
|
+
/**
|
|
38435
|
+
* Get the type of the field of the dimension
|
|
38436
|
+
* e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
|
|
38437
|
+
*/
|
|
38368
38438
|
type: field?.isCustomField ? "custom" : type,
|
|
38369
38439
|
order: dimension.order,
|
|
38370
38440
|
isValid: !!field,
|
|
@@ -49230,6 +49300,8 @@ var MoreFormatsPanel = class extends _odoo_owl.Component {
|
|
|
49230
49300
|
//#endregion
|
|
49231
49301
|
//#region src/components/side_panel/pivot/pivot_measure_display_panel/pivot_measure_display_panel_store.ts
|
|
49232
49302
|
var PivotMeasureDisplayPanelStore = class extends SpreadsheetStore {
|
|
49303
|
+
pivotId;
|
|
49304
|
+
initialMeasure;
|
|
49233
49305
|
mutators = [
|
|
49234
49306
|
"cancelMeasureDisplayEdition",
|
|
49235
49307
|
"updateMeasureDisplayType",
|
|
@@ -49414,7 +49486,7 @@ function getVisiblePivotCellPositions(getters, pivotId) {
|
|
|
49414
49486
|
col,
|
|
49415
49487
|
row
|
|
49416
49488
|
};
|
|
49417
|
-
if (
|
|
49489
|
+
if (getters.getPivotIdsFromPosition(position).includes(pivotId)) positions.push(position);
|
|
49418
49490
|
}
|
|
49419
49491
|
return positions;
|
|
49420
49492
|
}
|
|
@@ -49682,6 +49754,7 @@ var PivotDimensionOrder = class extends _odoo_owl.Component {
|
|
|
49682
49754
|
//#endregion
|
|
49683
49755
|
//#region src/formulas/code_builder.ts
|
|
49684
49756
|
var FunctionCodeBuilder = class {
|
|
49757
|
+
scope;
|
|
49685
49758
|
code = "";
|
|
49686
49759
|
constructor(scope = new Scope()) {
|
|
49687
49760
|
this.scope = scope;
|
|
@@ -49697,6 +49770,8 @@ var FunctionCodeBuilder = class {
|
|
|
49697
49770
|
}
|
|
49698
49771
|
};
|
|
49699
49772
|
var FunctionCodeImpl = class {
|
|
49773
|
+
scope;
|
|
49774
|
+
returnExpression;
|
|
49700
49775
|
code;
|
|
49701
49776
|
constructor(scope, code, returnExpression) {
|
|
49702
49777
|
this.scope = scope;
|
|
@@ -50511,6 +50586,9 @@ const PIVOT_FUNCTIONS = [
|
|
|
50511
50586
|
function getFirstPivotFunction(tokens) {
|
|
50512
50587
|
return getFunctionsFromTokens(tokens, PIVOT_FUNCTIONS)[0];
|
|
50513
50588
|
}
|
|
50589
|
+
function getPivotFunctions(tokens) {
|
|
50590
|
+
return getFunctionsFromTokens(tokens, PIVOT_FUNCTIONS);
|
|
50591
|
+
}
|
|
50514
50592
|
/**
|
|
50515
50593
|
* Parse a spreadsheet formula and detect the number of PIVOT functions that are
|
|
50516
50594
|
* present in the given formula.
|
|
@@ -50587,6 +50665,8 @@ function extractFormulaIdFromToken(tokenAtCursor) {
|
|
|
50587
50665
|
//#endregion
|
|
50588
50666
|
//#region src/components/side_panel/pivot/pivot_side_panel/pivot_side_panel_store.ts
|
|
50589
50667
|
var PivotSidePanelStore = class extends SpreadsheetStore {
|
|
50668
|
+
pivotId;
|
|
50669
|
+
updateMode;
|
|
50590
50670
|
mutators = [
|
|
50591
50671
|
"reset",
|
|
50592
50672
|
"deferUpdates",
|
|
@@ -54038,6 +54118,10 @@ var CellPlugin = class extends CorePlugin {
|
|
|
54038
54118
|
}
|
|
54039
54119
|
};
|
|
54040
54120
|
var FormulaCellWithDependencies = class {
|
|
54121
|
+
id;
|
|
54122
|
+
format;
|
|
54123
|
+
sheetId;
|
|
54124
|
+
getRangeString;
|
|
54041
54125
|
isFormula = true;
|
|
54042
54126
|
compiledFormula;
|
|
54043
54127
|
constructor(id, compiledFormula, format, dependencies, sheetId, getRangeString) {
|
|
@@ -54071,6 +54155,10 @@ var FormulaCellWithDependencies = class {
|
|
|
54071
54155
|
}
|
|
54072
54156
|
};
|
|
54073
54157
|
var RangeReferenceToken = class {
|
|
54158
|
+
ranges;
|
|
54159
|
+
rangeIndex;
|
|
54160
|
+
sheetId;
|
|
54161
|
+
getRangeString;
|
|
54074
54162
|
type = "REFERENCE";
|
|
54075
54163
|
constructor(ranges, rangeIndex, sheetId, getRangeString) {
|
|
54076
54164
|
this.ranges = ranges;
|
|
@@ -57929,6 +58017,8 @@ function buildCompilationParameters(context, getters, computeCell) {
|
|
|
57929
58017
|
return new CompilationParametersBuilder(context, getters, computeCell).getParameters();
|
|
57930
58018
|
}
|
|
57931
58019
|
var CompilationParametersBuilder = class {
|
|
58020
|
+
getters;
|
|
58021
|
+
computeCell;
|
|
57932
58022
|
evalContext;
|
|
57933
58023
|
rangeCache = {};
|
|
57934
58024
|
constructor(context, getters, computeCell) {
|
|
@@ -59059,6 +59149,7 @@ const ERROR_CYCLE_CELL = Object.freeze(createEvaluatedCell({
|
|
|
59059
59149
|
}));
|
|
59060
59150
|
const EMPTY_CELL = Object.freeze(createEvaluatedCell({ value: null }));
|
|
59061
59151
|
var Evaluator = class {
|
|
59152
|
+
context;
|
|
59062
59153
|
getters;
|
|
59063
59154
|
compilationParams;
|
|
59064
59155
|
evaluatedCells = new PositionMap();
|
|
@@ -61330,6 +61421,7 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
61330
61421
|
"getFirstPivotFunction",
|
|
61331
61422
|
"getPivotCellSortDirection",
|
|
61332
61423
|
"getPivotIdFromPosition",
|
|
61424
|
+
"getPivotIdsFromPosition",
|
|
61333
61425
|
"getPivotCellFromPosition",
|
|
61334
61426
|
"generateNewCalculatedMeasureName",
|
|
61335
61427
|
"isPivotUnused",
|
|
@@ -61387,37 +61479,52 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
61387
61479
|
}
|
|
61388
61480
|
}
|
|
61389
61481
|
/**
|
|
61390
|
-
* Get the id of the pivot at the given position. Returns undefined if there
|
|
61482
|
+
* Get the id of the first pivot in the formula at the given position. Returns undefined if there
|
|
61391
61483
|
* is no pivot at this position
|
|
61392
61484
|
*/
|
|
61393
61485
|
getPivotIdFromPosition(position) {
|
|
61486
|
+
return this.getPivotIdsFromPosition(position)[0];
|
|
61487
|
+
}
|
|
61488
|
+
/**
|
|
61489
|
+
* Get all of the ids of the pivot present in the formula at the given position.
|
|
61490
|
+
*/
|
|
61491
|
+
getPivotIdsFromPosition(position) {
|
|
61394
61492
|
const cell = this.getters.getCorrespondingFormulaCell(position);
|
|
61395
|
-
if (cell && cell.isFormula)
|
|
61396
|
-
|
|
61397
|
-
|
|
61398
|
-
|
|
61399
|
-
|
|
61400
|
-
|
|
61401
|
-
|
|
61493
|
+
if (cell && cell.isFormula) return this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
|
|
61494
|
+
return [];
|
|
61495
|
+
}
|
|
61496
|
+
getPivotIdsFromFormula(sheetId, formula) {
|
|
61497
|
+
return this.getPivotFunctions(sheetId, formula.tokens).map((pivotFunction) => {
|
|
61498
|
+
const pivotId = pivotFunction.args[0]?.toString();
|
|
61499
|
+
return pivotId && this.getters.getPivotId(pivotId);
|
|
61500
|
+
}).filter(isDefined);
|
|
61402
61501
|
}
|
|
61403
61502
|
isSpillPivotFormula(position) {
|
|
61404
61503
|
const cell = this.getters.getCorrespondingFormulaCell(position);
|
|
61405
61504
|
if (cell && cell.isFormula) return this.getFirstPivotFunction(position.sheetId, cell.compiledFormula.tokens)?.functionName === "PIVOT";
|
|
61406
61505
|
return false;
|
|
61407
61506
|
}
|
|
61408
|
-
|
|
61409
|
-
const
|
|
61410
|
-
if (!
|
|
61411
|
-
const
|
|
61412
|
-
|
|
61413
|
-
functionName,
|
|
61414
|
-
|
|
61507
|
+
getPivotFunctions(sheetId, tokens) {
|
|
61508
|
+
const pivotFunctions = getPivotFunctions(tokens);
|
|
61509
|
+
if (!pivotFunctions.length) return [];
|
|
61510
|
+
const evaluatedPivotFunctions = [];
|
|
61511
|
+
for (const pivotFunction of pivotFunctions) {
|
|
61512
|
+
const { functionName, args } = pivotFunction;
|
|
61513
|
+
const evaluatedArgs = args.map((argAst) => {
|
|
61415
61514
|
if (argAst.type === "EMPTY") return;
|
|
61416
61515
|
else if (argAst.type === "STRING" || argAst.type === "BOOLEAN" || argAst.type === "NUMBER") return argAst.value;
|
|
61417
61516
|
const argsString = astToFormula(argAst);
|
|
61418
61517
|
return this.getters.evaluateFormula(sheetId, argsString);
|
|
61419
|
-
})
|
|
61420
|
-
|
|
61518
|
+
});
|
|
61519
|
+
evaluatedPivotFunctions.push({
|
|
61520
|
+
functionName,
|
|
61521
|
+
args: evaluatedArgs
|
|
61522
|
+
});
|
|
61523
|
+
}
|
|
61524
|
+
return evaluatedPivotFunctions;
|
|
61525
|
+
}
|
|
61526
|
+
getFirstPivotFunction(sheetId, tokens) {
|
|
61527
|
+
return this.getPivotFunctions(sheetId, tokens)[0];
|
|
61421
61528
|
}
|
|
61422
61529
|
/**
|
|
61423
61530
|
* Returns the domain args of a pivot formula from a position.
|
|
@@ -61523,8 +61630,8 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
61523
61630
|
const unusedPivots = new Set(this.getters.getPivotIds());
|
|
61524
61631
|
for (const sheetId of this.getters.getSheetIds()) for (const cellId in this.getters.getCells(sheetId)) {
|
|
61525
61632
|
const position = this.getters.getCellPosition(cellId);
|
|
61526
|
-
const
|
|
61527
|
-
|
|
61633
|
+
const pivotIds = this.getPivotIdsFromPosition(position);
|
|
61634
|
+
for (const pivotId of pivotIds) {
|
|
61528
61635
|
unusedPivots.delete(pivotId);
|
|
61529
61636
|
if (!unusedPivots.size) {
|
|
61530
61637
|
this.unusedPivotsInFormulas = [];
|
|
@@ -61532,6 +61639,21 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
61532
61639
|
}
|
|
61533
61640
|
}
|
|
61534
61641
|
}
|
|
61642
|
+
for (const pivotId of this.getters.getPivotIds()) {
|
|
61643
|
+
const pivot = this.getters.getPivot(pivotId);
|
|
61644
|
+
for (const measure of pivot.definition.measures) if (measure.computedBy) {
|
|
61645
|
+
const { sheetId } = measure.computedBy;
|
|
61646
|
+
const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
|
|
61647
|
+
const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
|
|
61648
|
+
for (const relatedPivotId of relatedPivotIds) {
|
|
61649
|
+
unusedPivots.delete(relatedPivotId);
|
|
61650
|
+
if (!unusedPivots.size) {
|
|
61651
|
+
this.unusedPivotsInFormulas = [];
|
|
61652
|
+
return [];
|
|
61653
|
+
}
|
|
61654
|
+
}
|
|
61655
|
+
}
|
|
61656
|
+
}
|
|
61535
61657
|
this.unusedPivotsInFormulas = [...unusedPivots];
|
|
61536
61658
|
return this.unusedPivotsInFormulas;
|
|
61537
61659
|
}
|
|
@@ -61540,6 +61662,8 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
61540
61662
|
//#endregion
|
|
61541
61663
|
//#region src/clipboard_handlers/abstract_clipboard_handler.ts
|
|
61542
61664
|
var ClipboardHandler = class {
|
|
61665
|
+
getters;
|
|
61666
|
+
dispatch;
|
|
61543
61667
|
constructor(getters, dispatch) {
|
|
61544
61668
|
this.getters = getters;
|
|
61545
61669
|
this.dispatch = dispatch;
|
|
@@ -63809,6 +63933,8 @@ function transformPositionWithMerge(toTransform, executed) {
|
|
|
63809
63933
|
//#endregion
|
|
63810
63934
|
//#region src/collaborative/revisions.ts
|
|
63811
63935
|
var Revision = class {
|
|
63936
|
+
rootCommand;
|
|
63937
|
+
timestamp;
|
|
63812
63938
|
id;
|
|
63813
63939
|
clientId;
|
|
63814
63940
|
_commands = [];
|
|
@@ -63845,6 +63971,9 @@ var Revision = class {
|
|
|
63845
63971
|
//#region src/collaborative/session.ts
|
|
63846
63972
|
var ClientDisconnectedError = class extends Error {};
|
|
63847
63973
|
var Session = class extends EventBus {
|
|
63974
|
+
revisions;
|
|
63975
|
+
transportService;
|
|
63976
|
+
serverRevisionId;
|
|
63848
63977
|
/**
|
|
63849
63978
|
* Positions of the others client.
|
|
63850
63979
|
*/
|
|
@@ -67346,6 +67475,9 @@ var GridSelectionPlugin = class extends UIPlugin {
|
|
|
67346
67475
|
//#endregion
|
|
67347
67476
|
//#region src/helpers/internal_viewport.ts
|
|
67348
67477
|
var InternalViewport = class {
|
|
67478
|
+
getters;
|
|
67479
|
+
sheetId;
|
|
67480
|
+
boundaries;
|
|
67349
67481
|
top;
|
|
67350
67482
|
bottom;
|
|
67351
67483
|
left;
|
|
@@ -72063,6 +72195,7 @@ function instantiateClipboard() {
|
|
|
72063
72195
|
return new WebClipboardWrapper(navigator.clipboard);
|
|
72064
72196
|
}
|
|
72065
72197
|
var WebClipboardWrapper = class {
|
|
72198
|
+
clipboard;
|
|
72066
72199
|
constructor(clipboard) {
|
|
72067
72200
|
this.clipboard = clipboard;
|
|
72068
72201
|
}
|
|
@@ -72326,6 +72459,7 @@ var Spreadsheet = class extends _odoo_owl.Component {
|
|
|
72326
72459
|
//#endregion
|
|
72327
72460
|
//#region src/collaborative/readonly_transport_filter.ts
|
|
72328
72461
|
var ReadonlyTransportFilter = class {
|
|
72462
|
+
transportService;
|
|
72329
72463
|
constructor(transportService) {
|
|
72330
72464
|
this.transportService = transportService;
|
|
72331
72465
|
}
|
|
@@ -72357,6 +72491,8 @@ function inverseCommand(cmd) {
|
|
|
72357
72491
|
* @param operations initial operations
|
|
72358
72492
|
*/
|
|
72359
72493
|
var Branch = class Branch {
|
|
72494
|
+
buildTransformation;
|
|
72495
|
+
operations;
|
|
72360
72496
|
constructor(buildTransformation, operations = []) {
|
|
72361
72497
|
this.buildTransformation = buildTransformation;
|
|
72362
72498
|
this.operations = operations;
|
|
@@ -72473,6 +72609,8 @@ var Branch = class Branch {
|
|
|
72473
72609
|
* to revert it).
|
|
72474
72610
|
*/
|
|
72475
72611
|
var Operation = class {
|
|
72612
|
+
id;
|
|
72613
|
+
data;
|
|
72476
72614
|
constructor(id, data) {
|
|
72477
72615
|
this.id = id;
|
|
72478
72616
|
this.data = data;
|
|
@@ -72482,6 +72620,8 @@ var Operation = class {
|
|
|
72482
72620
|
}
|
|
72483
72621
|
};
|
|
72484
72622
|
var LazyOperation = class LazyOperation {
|
|
72623
|
+
id;
|
|
72624
|
+
lazyData;
|
|
72485
72625
|
constructor(id, lazyData) {
|
|
72486
72626
|
this.id = id;
|
|
72487
72627
|
this.lazyData = lazyData;
|
|
@@ -72507,6 +72647,7 @@ var LazyOperation = class LazyOperation {
|
|
|
72507
72647
|
* ```
|
|
72508
72648
|
*/
|
|
72509
72649
|
var OperationSequence = class OperationSequence {
|
|
72650
|
+
operations;
|
|
72510
72651
|
constructor(operations) {
|
|
72511
72652
|
this.operations = operations;
|
|
72512
72653
|
}
|
|
@@ -72582,6 +72723,7 @@ var OperationSequence = class OperationSequence {
|
|
|
72582
72723
|
*
|
|
72583
72724
|
*/
|
|
72584
72725
|
var Tree = class {
|
|
72726
|
+
buildTransformation;
|
|
72585
72727
|
branches;
|
|
72586
72728
|
branchingOperationIds = /* @__PURE__ */ new Map();
|
|
72587
72729
|
constructor(buildTransformation, initialBranch) {
|
|
@@ -73394,6 +73536,7 @@ var EventStream = class {
|
|
|
73394
73536
|
* with the new selected anchor
|
|
73395
73537
|
*/
|
|
73396
73538
|
var SelectionStreamProcessorImpl = class {
|
|
73539
|
+
getters;
|
|
73397
73540
|
stream;
|
|
73398
73541
|
/**
|
|
73399
73542
|
* "Active" anchor used as a reference to compute new anchors
|
|
@@ -79184,6 +79327,6 @@ exports.stores = stores;
|
|
|
79184
79327
|
exports.tokenColors = tokenColors;
|
|
79185
79328
|
exports.tokenize = tokenize;
|
|
79186
79329
|
|
|
79187
|
-
__info__.version = "19.1.
|
|
79188
|
-
__info__.date = "2026-05-
|
|
79189
|
-
__info__.hash = "
|
|
79330
|
+
__info__.version = "19.1.21";
|
|
79331
|
+
__info__.date = "2026-05-27T05:56:49.891Z";
|
|
79332
|
+
__info__.hash = "99ebe93";
|
package/dist/o_spreadsheet.css
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
/*
|
|
3
3
|
* This file is generated by o-spreadsheet build tools. Do not edit it.
|
|
4
4
|
* @see https://github.com/odoo/o-spreadsheet
|
|
5
|
-
* @version 19.1.
|
|
6
|
-
* @date 2026-05-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.1.21
|
|
6
|
+
* @date 2026-05-27T05:56:51.558Z
|
|
7
|
+
* @hash 99ebe93
|
|
8
8
|
*/
|
|
9
9
|
:root {
|
|
10
10
|
--os-gray-100: light-dark(#f9fafb, #1b1d26);
|