@odoo/o-spreadsheet 19.0.34 → 19.0.36
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 +237 -237
- 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.0.
|
|
6
|
-
* @date 2026-05-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.0.36
|
|
6
|
+
* @date 2026-05-27T05:57:35.932Z
|
|
7
|
+
* @hash 3f73c94
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
@@ -1431,6 +1431,7 @@ function getAlternatingColorsPalette(quantity) {
|
|
|
1431
1431
|
else return ALTERNATING_COLORS_XL;
|
|
1432
1432
|
}
|
|
1433
1433
|
var ColorGenerator = class {
|
|
1434
|
+
preferredColors;
|
|
1434
1435
|
currentColorIndex = 0;
|
|
1435
1436
|
palette;
|
|
1436
1437
|
constructor(paletteSize, preferredColors = []) {
|
|
@@ -1638,6 +1639,7 @@ const _t = function(s, ...values) {
|
|
|
1638
1639
|
return sprintf(_translate(s), ...values);
|
|
1639
1640
|
};
|
|
1640
1641
|
var LazyTranslatedString = class extends String {
|
|
1642
|
+
values;
|
|
1641
1643
|
constructor(str, values) {
|
|
1642
1644
|
super(str);
|
|
1643
1645
|
this.values = values;
|
|
@@ -2796,6 +2798,8 @@ const CellErrorType = {
|
|
|
2796
2798
|
};
|
|
2797
2799
|
const errorTypes = new Set(Object.values(CellErrorType));
|
|
2798
2800
|
var EvaluationError = class {
|
|
2801
|
+
message;
|
|
2802
|
+
value;
|
|
2799
2803
|
constructor(message = _t("Error"), value = CellErrorType.GenericError) {
|
|
2800
2804
|
this.message = message;
|
|
2801
2805
|
this.value = value;
|
|
@@ -2828,6 +2832,7 @@ var UnknownFunctionError = class extends EvaluationError {
|
|
|
2828
2832
|
}
|
|
2829
2833
|
};
|
|
2830
2834
|
var SplillBlockedError = class extends EvaluationError {
|
|
2835
|
+
errorOriginPosition;
|
|
2831
2836
|
constructor(message = _t("Spill range is not empty"), errorOriginPosition) {
|
|
2832
2837
|
super(message, CellErrorType.SpilledBlocked);
|
|
2833
2838
|
this.errorOriginPosition = errorOriginPosition;
|
|
@@ -5816,8 +5821,13 @@ function getApplyRangeChangeAddColRow(cmd) {
|
|
|
5816
5821
|
changeType: "NONE",
|
|
5817
5822
|
range
|
|
5818
5823
|
};
|
|
5824
|
+
const isUnboundedAtEnd = range.unboundedZone[end] === void 0;
|
|
5825
|
+
if (isUnboundedAtEnd && !range.unboundedZone.hasHeader) return {
|
|
5826
|
+
changeType: "RESIZE",
|
|
5827
|
+
range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
|
|
5828
|
+
};
|
|
5819
5829
|
if (cmd.position === "after") {
|
|
5820
|
-
if (range.zone[start] <= cmd.base && cmd.base < range.zone[end]) return {
|
|
5830
|
+
if (range.zone[start] <= cmd.base && (cmd.base < range.zone[end] || isUnboundedAtEnd)) return {
|
|
5821
5831
|
changeType: "RESIZE",
|
|
5822
5832
|
range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
|
|
5823
5833
|
};
|
|
@@ -6460,6 +6470,8 @@ const selectPastedZone = (selection, sourceZones, pastedZones) => {
|
|
|
6460
6470
|
//#endregion
|
|
6461
6471
|
//#region src/clipboard_handlers/abstract_clipboard_handler.ts
|
|
6462
6472
|
var ClipboardHandler = class {
|
|
6473
|
+
getters;
|
|
6474
|
+
dispatch;
|
|
6463
6475
|
constructor(getters, dispatch) {
|
|
6464
6476
|
this.getters = getters;
|
|
6465
6477
|
this.dispatch = dispatch;
|
|
@@ -8894,6 +8906,7 @@ var DependencyContainer = class extends EventBus {
|
|
|
8894
8906
|
}
|
|
8895
8907
|
};
|
|
8896
8908
|
var StoreFactory = class {
|
|
8909
|
+
get;
|
|
8897
8910
|
pendingBuilds = /* @__PURE__ */ new Set();
|
|
8898
8911
|
constructor(get) {
|
|
8899
8912
|
this.get = get;
|
|
@@ -8938,6 +8951,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
8938
8951
|
return MetaStore;
|
|
8939
8952
|
}
|
|
8940
8953
|
var DisposableStore = class {
|
|
8954
|
+
get;
|
|
8941
8955
|
disposeCallbacks = [];
|
|
8942
8956
|
constructor(get) {
|
|
8943
8957
|
this.get = get;
|
|
@@ -9512,6 +9526,10 @@ const FORCE_DEFAULT_ARGS_FUNCTIONS = {
|
|
|
9512
9526
|
ROUNDDOWN: [{
|
|
9513
9527
|
type: "NUMBER",
|
|
9514
9528
|
value: 0
|
|
9529
|
+
}],
|
|
9530
|
+
IFERROR: [{
|
|
9531
|
+
type: "NUMBER",
|
|
9532
|
+
value: 0
|
|
9515
9533
|
}]
|
|
9516
9534
|
};
|
|
9517
9535
|
/**
|
|
@@ -18621,6 +18639,7 @@ function insertTokenAtArgStartingPosition(tokenAtCursor, value) {
|
|
|
18621
18639
|
//#endregion
|
|
18622
18640
|
//#region src/formulas/code_builder.ts
|
|
18623
18641
|
var FunctionCodeBuilder = class {
|
|
18642
|
+
scope;
|
|
18624
18643
|
code = "";
|
|
18625
18644
|
constructor(scope = new Scope()) {
|
|
18626
18645
|
this.scope = scope;
|
|
@@ -18636,6 +18655,8 @@ var FunctionCodeBuilder = class {
|
|
|
18636
18655
|
}
|
|
18637
18656
|
};
|
|
18638
18657
|
var FunctionCodeImpl = class {
|
|
18658
|
+
scope;
|
|
18659
|
+
returnExpression;
|
|
18639
18660
|
code;
|
|
18640
18661
|
constructor(scope, code, returnExpression) {
|
|
18641
18662
|
this.scope = scope;
|
|
@@ -20606,6 +20627,7 @@ function getScorecardConfiguration({ width, height }, runtime) {
|
|
|
20606
20627
|
}, runtime).computeDesign();
|
|
20607
20628
|
}
|
|
20608
20629
|
var ScorecardChartConfigBuilder = class {
|
|
20630
|
+
runtime;
|
|
20609
20631
|
context;
|
|
20610
20632
|
width;
|
|
20611
20633
|
height;
|
|
@@ -24266,6 +24288,10 @@ var GaugeChartComponent = class extends _odoo_owl.Component {
|
|
|
24266
24288
|
* Animation interpolating values using the ease-out quartic curve function (chartJS default easing)
|
|
24267
24289
|
*/
|
|
24268
24290
|
var Animation = class {
|
|
24291
|
+
startValue;
|
|
24292
|
+
endValue;
|
|
24293
|
+
duration;
|
|
24294
|
+
callback;
|
|
24269
24295
|
startTime = void 0;
|
|
24270
24296
|
animationFrameId = null;
|
|
24271
24297
|
constructor(startValue, endValue, duration, callback) {
|
|
@@ -26592,6 +26618,7 @@ function getMaxFigureSize(getters, figureSize) {
|
|
|
26592
26618
|
* Represent a raw XML string
|
|
26593
26619
|
*/
|
|
26594
26620
|
var XMLString = class {
|
|
26621
|
+
xmlString;
|
|
26595
26622
|
/**
|
|
26596
26623
|
* @param xmlString should be a well formed, properly escaped XML string
|
|
26597
26624
|
*/
|
|
@@ -27427,6 +27454,11 @@ var Popover = class extends _odoo_owl.Component {
|
|
|
27427
27454
|
}
|
|
27428
27455
|
};
|
|
27429
27456
|
var PopoverPositionContext = class {
|
|
27457
|
+
anchorRect;
|
|
27458
|
+
containerRect;
|
|
27459
|
+
propsMaxSize;
|
|
27460
|
+
spreadsheetOffset;
|
|
27461
|
+
lastPosition;
|
|
27430
27462
|
constructor(anchorRect, containerRect, propsMaxSize, spreadsheetOffset, lastPosition) {
|
|
27431
27463
|
this.anchorRect = anchorRect;
|
|
27432
27464
|
this.containerRect = containerRect;
|
|
@@ -30722,6 +30754,7 @@ var AbstractComposerStore = class extends SpreadsheetStore {
|
|
|
30722
30754
|
//#endregion
|
|
30723
30755
|
//#region src/components/composer/standalone_composer/standalone_composer_store.ts
|
|
30724
30756
|
var StandaloneComposerStore = class extends AbstractComposerStore {
|
|
30757
|
+
args;
|
|
30725
30758
|
constructor(get, args) {
|
|
30726
30759
|
super(get);
|
|
30727
30760
|
this.args = args;
|
|
@@ -31773,6 +31806,7 @@ var DOMDndHelper = class {
|
|
|
31773
31806
|
}
|
|
31774
31807
|
};
|
|
31775
31808
|
var ContainerWrapper = class {
|
|
31809
|
+
el;
|
|
31776
31810
|
constructor(el) {
|
|
31777
31811
|
this.el = el;
|
|
31778
31812
|
}
|
|
@@ -31844,6 +31878,10 @@ var FocusStore = class {
|
|
|
31844
31878
|
* This plugin handles this internal state.
|
|
31845
31879
|
*/
|
|
31846
31880
|
var SelectionInputStore = class extends SpreadsheetStore {
|
|
31881
|
+
initialRanges;
|
|
31882
|
+
inputHasSingleRange;
|
|
31883
|
+
colors;
|
|
31884
|
+
disabledRanges;
|
|
31847
31885
|
mutators = [
|
|
31848
31886
|
"resetWithRanges",
|
|
31849
31887
|
"focusById",
|
|
@@ -40665,13 +40703,30 @@ var PivotRuntimeDefinition = class {
|
|
|
40665
40703
|
break;
|
|
40666
40704
|
}
|
|
40667
40705
|
return {
|
|
40706
|
+
/**
|
|
40707
|
+
* Get the id of the measure, as it is stored in the pivot formula
|
|
40708
|
+
*/
|
|
40668
40709
|
id: measure.id,
|
|
40710
|
+
/**
|
|
40711
|
+
* Display name of the measure
|
|
40712
|
+
* e.g. "__count" -> "Count", "amount_total" -> "Total Amount"
|
|
40713
|
+
*/
|
|
40669
40714
|
get displayName() {
|
|
40670
40715
|
return measure.userDefinedName ?? field?.string ?? measure.fieldName;
|
|
40671
40716
|
},
|
|
40672
40717
|
userDefinedName: measure.userDefinedName,
|
|
40718
|
+
/**
|
|
40719
|
+
* Get the name of the field of the measure
|
|
40720
|
+
*/
|
|
40673
40721
|
fieldName,
|
|
40722
|
+
/**
|
|
40723
|
+
* Get the aggregator of the measure
|
|
40724
|
+
*/
|
|
40674
40725
|
aggregator,
|
|
40726
|
+
/**
|
|
40727
|
+
* Get the type of the measure field
|
|
40728
|
+
* e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
|
|
40729
|
+
*/
|
|
40675
40730
|
type: fieldName === "__count" ? "integer" : field?.type ?? "integer",
|
|
40676
40731
|
isValid,
|
|
40677
40732
|
isHidden: measure.isHidden,
|
|
@@ -40685,10 +40740,30 @@ var PivotRuntimeDefinition = class {
|
|
|
40685
40740
|
const type = field?.type ?? "integer";
|
|
40686
40741
|
const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
|
|
40687
40742
|
return {
|
|
40743
|
+
/**
|
|
40744
|
+
* Get the display name of the dimension
|
|
40745
|
+
* e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
|
|
40746
|
+
*/
|
|
40688
40747
|
displayName: field?.string ?? dimension.fieldName,
|
|
40748
|
+
/**
|
|
40749
|
+
* Get the name of the dimension, as it is stored in the pivot formula
|
|
40750
|
+
* e.g. "stage_id", "create_date:month"
|
|
40751
|
+
*/
|
|
40689
40752
|
nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
|
|
40753
|
+
/**
|
|
40754
|
+
* Get the name of the field of the dimension
|
|
40755
|
+
* e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
|
|
40756
|
+
*/
|
|
40690
40757
|
fieldName: dimension.fieldName,
|
|
40758
|
+
/**
|
|
40759
|
+
* Get the aggregate operator of the dimension
|
|
40760
|
+
* e.g. "stage_id" -> undefined, "create_date:month" -> "month"
|
|
40761
|
+
*/
|
|
40691
40762
|
granularity,
|
|
40763
|
+
/**
|
|
40764
|
+
* Get the type of the field of the dimension
|
|
40765
|
+
* e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
|
|
40766
|
+
*/
|
|
40692
40767
|
type: field?.isCustomField ? "custom" : type,
|
|
40693
40768
|
order: dimension.order,
|
|
40694
40769
|
isValid: !!field,
|
|
@@ -51859,6 +51934,8 @@ var MoreFormatsPanel = class extends _odoo_owl.Component {
|
|
|
51859
51934
|
//#endregion
|
|
51860
51935
|
//#region src/components/side_panel/pivot/pivot_measure_display_panel/pivot_measure_display_panel_store.ts
|
|
51861
51936
|
var PivotMeasureDisplayPanelStore = class extends SpreadsheetStore {
|
|
51937
|
+
pivotId;
|
|
51938
|
+
initialMeasure;
|
|
51862
51939
|
mutators = [
|
|
51863
51940
|
"cancelMeasureDisplayEdition",
|
|
51864
51941
|
"updateMeasureDisplayType",
|
|
@@ -52058,7 +52135,7 @@ function getVisiblePivotCellPositions(getters, pivotId) {
|
|
|
52058
52135
|
col,
|
|
52059
52136
|
row
|
|
52060
52137
|
};
|
|
52061
|
-
if (
|
|
52138
|
+
if (getters.getPivotIdsFromPosition(position).includes(pivotId)) positions.push(position);
|
|
52062
52139
|
}
|
|
52063
52140
|
return positions;
|
|
52064
52141
|
}
|
|
@@ -52944,6 +53021,9 @@ function extractFormulaIdFromToken(tokenAtCursor) {
|
|
|
52944
53021
|
function getFirstPivotFunction(tokens) {
|
|
52945
53022
|
return getFunctionsFromTokens(tokens, PIVOT_FUNCTIONS)[0];
|
|
52946
53023
|
}
|
|
53024
|
+
function getPivotFunctions(tokens) {
|
|
53025
|
+
return getFunctionsFromTokens(tokens, PIVOT_FUNCTIONS);
|
|
53026
|
+
}
|
|
52947
53027
|
/**
|
|
52948
53028
|
* Parse a spreadsheet formula and detect the number of PIVOT functions that are
|
|
52949
53029
|
* present in the given formula.
|
|
@@ -52955,6 +53035,7 @@ function getNumberOfPivotFunctions(tokens) {
|
|
|
52955
53035
|
//#endregion
|
|
52956
53036
|
//#region src/components/side_panel/pivot/pivot_side_panel/pivot_side_panel_store.ts
|
|
52957
53037
|
var PivotSidePanelStore = class extends SpreadsheetStore {
|
|
53038
|
+
pivotId;
|
|
52958
53039
|
mutators = [
|
|
52959
53040
|
"reset",
|
|
52960
53041
|
"deferUpdates",
|
|
@@ -56486,6 +56567,11 @@ var CellPlugin = class extends CorePlugin {
|
|
|
56486
56567
|
}
|
|
56487
56568
|
};
|
|
56488
56569
|
var FormulaCellWithDependencies = class {
|
|
56570
|
+
id;
|
|
56571
|
+
format;
|
|
56572
|
+
style;
|
|
56573
|
+
sheetId;
|
|
56574
|
+
getRangeString;
|
|
56489
56575
|
isFormula = true;
|
|
56490
56576
|
compiledFormula;
|
|
56491
56577
|
constructor(id, compiledFormula, format, style, dependencies, sheetId, getRangeString) {
|
|
@@ -56520,6 +56606,10 @@ var FormulaCellWithDependencies = class {
|
|
|
56520
56606
|
}
|
|
56521
56607
|
};
|
|
56522
56608
|
var RangeReferenceToken = class {
|
|
56609
|
+
ranges;
|
|
56610
|
+
rangeIndex;
|
|
56611
|
+
sheetId;
|
|
56612
|
+
getRangeString;
|
|
56523
56613
|
type = "REFERENCE";
|
|
56524
56614
|
constructor(ranges, rangeIndex, sheetId, getRangeString) {
|
|
56525
56615
|
this.ranges = ranges;
|
|
@@ -60505,6 +60595,8 @@ function buildCompilationParameters(context, getters, computeCell) {
|
|
|
60505
60595
|
return new CompilationParametersBuilder(context, getters, computeCell).getParameters();
|
|
60506
60596
|
}
|
|
60507
60597
|
var CompilationParametersBuilder = class {
|
|
60598
|
+
getters;
|
|
60599
|
+
computeCell;
|
|
60508
60600
|
evalContext;
|
|
60509
60601
|
rangeCache = {};
|
|
60510
60602
|
constructor(context, getters, computeCell) {
|
|
@@ -61622,6 +61714,7 @@ const ERROR_CYCLE_CELL = Object.freeze(createEvaluatedCell({
|
|
|
61622
61714
|
}));
|
|
61623
61715
|
const EMPTY_CELL = Object.freeze(createEvaluatedCell({ value: null }));
|
|
61624
61716
|
var Evaluator = class {
|
|
61717
|
+
context;
|
|
61625
61718
|
getters;
|
|
61626
61719
|
compilationParams;
|
|
61627
61720
|
evaluatedCells = new PositionMap();
|
|
@@ -63930,6 +64023,7 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
63930
64023
|
"getFirstPivotFunction",
|
|
63931
64024
|
"getPivotCellSortDirection",
|
|
63932
64025
|
"getPivotIdFromPosition",
|
|
64026
|
+
"getPivotIdsFromPosition",
|
|
63933
64027
|
"getPivotCellFromPosition",
|
|
63934
64028
|
"generateNewCalculatedMeasureName",
|
|
63935
64029
|
"isPivotUnused",
|
|
@@ -63987,37 +64081,52 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
63987
64081
|
}
|
|
63988
64082
|
}
|
|
63989
64083
|
/**
|
|
63990
|
-
* Get the id of the pivot at the given position. Returns undefined if there
|
|
64084
|
+
* Get the id of the first pivot in the formula at the given position. Returns undefined if there
|
|
63991
64085
|
* is no pivot at this position
|
|
63992
64086
|
*/
|
|
63993
64087
|
getPivotIdFromPosition(position) {
|
|
64088
|
+
return this.getPivotIdsFromPosition(position)[0];
|
|
64089
|
+
}
|
|
64090
|
+
/**
|
|
64091
|
+
* Get all of the ids of the pivot present in the formula at the given position.
|
|
64092
|
+
*/
|
|
64093
|
+
getPivotIdsFromPosition(position) {
|
|
63994
64094
|
const cell = this.getters.getCorrespondingFormulaCell(position);
|
|
63995
|
-
if (cell && cell.isFormula)
|
|
63996
|
-
|
|
63997
|
-
|
|
63998
|
-
|
|
63999
|
-
|
|
64000
|
-
|
|
64001
|
-
|
|
64095
|
+
if (cell && cell.isFormula) return this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
|
|
64096
|
+
return [];
|
|
64097
|
+
}
|
|
64098
|
+
getPivotIdsFromFormula(sheetId, formula) {
|
|
64099
|
+
return this.getPivotFunctions(sheetId, formula.tokens).map((pivotFunction) => {
|
|
64100
|
+
const pivotId = pivotFunction.args[0]?.toString();
|
|
64101
|
+
return pivotId && this.getters.getPivotId(pivotId);
|
|
64102
|
+
}).filter(isDefined);
|
|
64002
64103
|
}
|
|
64003
64104
|
isSpillPivotFormula(position) {
|
|
64004
64105
|
const cell = this.getters.getCorrespondingFormulaCell(position);
|
|
64005
64106
|
if (cell && cell.isFormula) return this.getFirstPivotFunction(position.sheetId, cell.compiledFormula.tokens)?.functionName === "PIVOT";
|
|
64006
64107
|
return false;
|
|
64007
64108
|
}
|
|
64008
|
-
|
|
64009
|
-
const
|
|
64010
|
-
if (!
|
|
64011
|
-
const
|
|
64012
|
-
|
|
64013
|
-
functionName,
|
|
64014
|
-
|
|
64109
|
+
getPivotFunctions(sheetId, tokens) {
|
|
64110
|
+
const pivotFunctions = getPivotFunctions(tokens);
|
|
64111
|
+
if (!pivotFunctions.length) return [];
|
|
64112
|
+
const evaluatedPivotFunctions = [];
|
|
64113
|
+
for (const pivotFunction of pivotFunctions) {
|
|
64114
|
+
const { functionName, args } = pivotFunction;
|
|
64115
|
+
const evaluatedArgs = args.map((argAst) => {
|
|
64015
64116
|
if (argAst.type === "EMPTY") return;
|
|
64016
64117
|
else if (argAst.type === "STRING" || argAst.type === "BOOLEAN" || argAst.type === "NUMBER") return argAst.value;
|
|
64017
64118
|
const argsString = astToFormula(argAst);
|
|
64018
64119
|
return this.getters.evaluateFormula(sheetId, argsString);
|
|
64019
|
-
})
|
|
64020
|
-
|
|
64120
|
+
});
|
|
64121
|
+
evaluatedPivotFunctions.push({
|
|
64122
|
+
functionName,
|
|
64123
|
+
args: evaluatedArgs
|
|
64124
|
+
});
|
|
64125
|
+
}
|
|
64126
|
+
return evaluatedPivotFunctions;
|
|
64127
|
+
}
|
|
64128
|
+
getFirstPivotFunction(sheetId, tokens) {
|
|
64129
|
+
return this.getPivotFunctions(sheetId, tokens)[0];
|
|
64021
64130
|
}
|
|
64022
64131
|
/**
|
|
64023
64132
|
* Returns the domain args of a pivot formula from a position.
|
|
@@ -64131,8 +64240,8 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
64131
64240
|
const unusedPivots = new Set(this.getters.getPivotIds());
|
|
64132
64241
|
for (const sheetId of this.getters.getSheetIds()) for (const cellId in this.getters.getCells(sheetId)) {
|
|
64133
64242
|
const position = this.getters.getCellPosition(cellId);
|
|
64134
|
-
const
|
|
64135
|
-
|
|
64243
|
+
const pivotIds = this.getPivotIdsFromPosition(position);
|
|
64244
|
+
for (const pivotId of pivotIds) {
|
|
64136
64245
|
unusedPivots.delete(pivotId);
|
|
64137
64246
|
if (!unusedPivots.size) {
|
|
64138
64247
|
this.unusedPivots = [];
|
|
@@ -64140,6 +64249,21 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
64140
64249
|
}
|
|
64141
64250
|
}
|
|
64142
64251
|
}
|
|
64252
|
+
for (const pivotId of this.getters.getPivotIds()) {
|
|
64253
|
+
const pivot = this.getters.getPivot(pivotId);
|
|
64254
|
+
for (const measure of pivot.definition.measures) if (measure.computedBy) {
|
|
64255
|
+
const { sheetId } = measure.computedBy;
|
|
64256
|
+
const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
|
|
64257
|
+
const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
|
|
64258
|
+
for (const relatedPivotId of relatedPivotIds) {
|
|
64259
|
+
unusedPivots.delete(relatedPivotId);
|
|
64260
|
+
if (!unusedPivots.size) {
|
|
64261
|
+
this.unusedPivots = [];
|
|
64262
|
+
return [];
|
|
64263
|
+
}
|
|
64264
|
+
}
|
|
64265
|
+
}
|
|
64266
|
+
}
|
|
64143
64267
|
this.unusedPivots = [...unusedPivots];
|
|
64144
64268
|
return this.unusedPivots;
|
|
64145
64269
|
}
|
|
@@ -65742,6 +65866,8 @@ function transformPositionWithMerge(toTransform, executed) {
|
|
|
65742
65866
|
//#endregion
|
|
65743
65867
|
//#region src/collaborative/revisions.ts
|
|
65744
65868
|
var Revision = class {
|
|
65869
|
+
rootCommand;
|
|
65870
|
+
timestamp;
|
|
65745
65871
|
id;
|
|
65746
65872
|
clientId;
|
|
65747
65873
|
_commands = [];
|
|
@@ -65778,6 +65904,9 @@ var Revision = class {
|
|
|
65778
65904
|
//#region src/collaborative/session.ts
|
|
65779
65905
|
var ClientDisconnectedError = class extends Error {};
|
|
65780
65906
|
var Session = class extends EventBus {
|
|
65907
|
+
revisions;
|
|
65908
|
+
transportService;
|
|
65909
|
+
serverRevisionId;
|
|
65781
65910
|
/**
|
|
65782
65911
|
* Positions of the others client.
|
|
65783
65912
|
*/
|
|
@@ -69494,6 +69623,9 @@ var GridSelectionPlugin = class extends UIPlugin {
|
|
|
69494
69623
|
//#endregion
|
|
69495
69624
|
//#region src/helpers/internal_viewport.ts
|
|
69496
69625
|
var InternalViewport = class {
|
|
69626
|
+
getters;
|
|
69627
|
+
sheetId;
|
|
69628
|
+
boundaries;
|
|
69497
69629
|
top;
|
|
69498
69630
|
bottom;
|
|
69499
69631
|
left;
|
|
@@ -74629,6 +74761,7 @@ function instantiateClipboard() {
|
|
|
74629
74761
|
return new WebClipboardWrapper(navigator.clipboard);
|
|
74630
74762
|
}
|
|
74631
74763
|
var WebClipboardWrapper = class {
|
|
74764
|
+
clipboard;
|
|
74632
74765
|
constructor(clipboard) {
|
|
74633
74766
|
this.clipboard = clipboard;
|
|
74634
74767
|
}
|
|
@@ -75115,6 +75248,7 @@ var Spreadsheet = class extends _odoo_owl.Component {
|
|
|
75115
75248
|
//#endregion
|
|
75116
75249
|
//#region src/collaborative/readonly_transport_filter.ts
|
|
75117
75250
|
var ReadonlyTransportFilter = class {
|
|
75251
|
+
transportService;
|
|
75118
75252
|
constructor(transportService) {
|
|
75119
75253
|
this.transportService = transportService;
|
|
75120
75254
|
}
|
|
@@ -75146,6 +75280,8 @@ function inverseCommand(cmd) {
|
|
|
75146
75280
|
* @param operations initial operations
|
|
75147
75281
|
*/
|
|
75148
75282
|
var Branch = class Branch {
|
|
75283
|
+
buildTransformation;
|
|
75284
|
+
operations;
|
|
75149
75285
|
constructor(buildTransformation, operations = []) {
|
|
75150
75286
|
this.buildTransformation = buildTransformation;
|
|
75151
75287
|
this.operations = operations;
|
|
@@ -75262,6 +75398,8 @@ var Branch = class Branch {
|
|
|
75262
75398
|
* to revert it).
|
|
75263
75399
|
*/
|
|
75264
75400
|
var Operation = class {
|
|
75401
|
+
id;
|
|
75402
|
+
data;
|
|
75265
75403
|
constructor(id, data) {
|
|
75266
75404
|
this.id = id;
|
|
75267
75405
|
this.data = data;
|
|
@@ -75271,6 +75409,8 @@ var Operation = class {
|
|
|
75271
75409
|
}
|
|
75272
75410
|
};
|
|
75273
75411
|
var LazyOperation = class LazyOperation {
|
|
75412
|
+
id;
|
|
75413
|
+
lazyData;
|
|
75274
75414
|
constructor(id, lazyData) {
|
|
75275
75415
|
this.id = id;
|
|
75276
75416
|
this.lazyData = lazyData;
|
|
@@ -75296,6 +75436,7 @@ var LazyOperation = class LazyOperation {
|
|
|
75296
75436
|
* ```
|
|
75297
75437
|
*/
|
|
75298
75438
|
var OperationSequence = class OperationSequence {
|
|
75439
|
+
operations;
|
|
75299
75440
|
constructor(operations) {
|
|
75300
75441
|
this.operations = operations;
|
|
75301
75442
|
}
|
|
@@ -75371,6 +75512,7 @@ var OperationSequence = class OperationSequence {
|
|
|
75371
75512
|
*
|
|
75372
75513
|
*/
|
|
75373
75514
|
var Tree = class {
|
|
75515
|
+
buildTransformation;
|
|
75374
75516
|
branches;
|
|
75375
75517
|
branchingOperationIds = /* @__PURE__ */ new Map();
|
|
75376
75518
|
constructor(buildTransformation, initialBranch) {
|
|
@@ -75950,6 +76092,7 @@ var EventStream = class {
|
|
|
75950
76092
|
* with the new selected anchor
|
|
75951
76093
|
*/
|
|
75952
76094
|
var SelectionStreamProcessorImpl = class {
|
|
76095
|
+
getters;
|
|
75953
76096
|
stream;
|
|
75954
76097
|
/**
|
|
75955
76098
|
* "Active" anchor used as a reference to compute new anchors
|
|
@@ -79416,6 +79559,6 @@ exports.stores = stores;
|
|
|
79416
79559
|
exports.tokenColors = tokenColors;
|
|
79417
79560
|
exports.tokenize = tokenize;
|
|
79418
79561
|
|
|
79419
|
-
__info__.version = "19.0.
|
|
79420
|
-
__info__.date = "2026-05-
|
|
79421
|
-
__info__.hash = "
|
|
79562
|
+
__info__.version = "19.0.36";
|
|
79563
|
+
__info__.date = "2026-05-27T05:57:35.932Z";
|
|
79564
|
+
__info__.hash = "3f73c94";
|
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.0.
|
|
6
|
-
* @date 2026-05-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.0.36
|
|
6
|
+
* @date 2026-05-27T05:57:37.639Z
|
|
7
|
+
* @hash 3f73c94
|
|
8
8
|
*/
|
|
9
9
|
/* Originates from src/components/top_bar/top_bar.scss */
|
|
10
10
|
@media (max-width: 1200px) {
|