@odoo/o-spreadsheet 19.3.4 → 19.3.6
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 +150 -124
- package/dist/o_spreadsheet.css +3 -3
- package/dist/o_spreadsheet.esm.js +150 -124
- package/dist/o_spreadsheet.iife.js +150 -124
- package/dist/o_spreadsheet.min.iife.js +94 -94
- package/dist/o_spreadsheet.xml +5 -4
- package/dist/types/functions/function_registry.d.ts +1 -1
- package/dist/types/helpers/figures/charts/chart_js_extension.d.ts +1 -1
- package/dist/types/helpers/pivot/pivot_composer_helpers.d.ts +4 -0
- package/dist/types/helpers/pivot/pivot_registry.d.ts +1 -1
- package/dist/types/index.d.ts +7 -7
- package/dist/types/migrations/migration_steps.d.ts +1 -1
- package/dist/types/plugins/index.d.ts +1 -1
- package/dist/types/plugins/ui_core_views/pivot_ui.d.ts +17 -8
- package/dist/types/plugins/ui_feature/table_computed_style.d.ts +1 -1
- package/package.json +1 -1
- package/dist/types/registry.d.ts +0 -10
|
@@ -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.3.
|
|
6
|
-
* @date 2026-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.3.6
|
|
6
|
+
* @date 2026-06-06T06:24:22.727Z
|
|
7
|
+
* @hash 0fe939b
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function(exports, _odoo_owl) {
|
|
@@ -3241,31 +3241,78 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
3241
3241
|
}
|
|
3242
3242
|
|
|
3243
3243
|
//#endregion
|
|
3244
|
-
//#region src/registry.ts
|
|
3245
|
-
|
|
3244
|
+
//#region src/registries/registry.ts
|
|
3245
|
+
/**
|
|
3246
|
+
* Registry
|
|
3247
|
+
*
|
|
3248
|
+
* The Registry class is basically just a mapping from a string key to an object.
|
|
3249
|
+
* It is really not much more than an object. It is however useful for the
|
|
3250
|
+
* following reasons:
|
|
3251
|
+
*
|
|
3252
|
+
* 1. it let us react and execute code when someone add something to the registry
|
|
3253
|
+
* (for example, the FunctionRegistry subclass this for this purpose)
|
|
3254
|
+
* 2. it throws an error when the get operation fails
|
|
3255
|
+
* 3. it provides a chained API to add items to the registry.
|
|
3256
|
+
*/
|
|
3257
|
+
var Registry = class {
|
|
3246
3258
|
content = {};
|
|
3259
|
+
/**
|
|
3260
|
+
* Add an item to the registry, you can only add if there is no item
|
|
3261
|
+
* already present in the registery with the given key
|
|
3262
|
+
*
|
|
3263
|
+
* Note that this also returns the registry, so another add method call can
|
|
3264
|
+
* be chained
|
|
3265
|
+
*/
|
|
3247
3266
|
add(key, value) {
|
|
3248
3267
|
if (key in this.content) throw new Error(`${key} is already present in this registry!`);
|
|
3249
3268
|
return this.replace(key, value);
|
|
3250
3269
|
}
|
|
3270
|
+
/**
|
|
3271
|
+
* Replace (or add) an item to the registry
|
|
3272
|
+
*
|
|
3273
|
+
* Note that this also returns the registry, so another add method call can
|
|
3274
|
+
* be chained
|
|
3275
|
+
*/
|
|
3251
3276
|
replace(key, value) {
|
|
3252
3277
|
this.content[key] = value;
|
|
3253
3278
|
return this;
|
|
3254
3279
|
}
|
|
3280
|
+
/**
|
|
3281
|
+
* Get an item from the registry
|
|
3282
|
+
*/
|
|
3255
3283
|
get(key) {
|
|
3284
|
+
/**
|
|
3285
|
+
* Note: key in {} is ~12 times slower than {}[key].
|
|
3286
|
+
* So, we check the absence of key only when the direct access returns
|
|
3287
|
+
* a falsy value. It's done to ensure that the registry can contains falsy values
|
|
3288
|
+
*/
|
|
3256
3289
|
const content = this.content[key];
|
|
3257
|
-
if (!content
|
|
3290
|
+
if (!content) {
|
|
3291
|
+
if (!(key in this.content)) throw new Error(`Cannot find ${key} in this registry!`);
|
|
3292
|
+
}
|
|
3258
3293
|
return content;
|
|
3259
3294
|
}
|
|
3295
|
+
/**
|
|
3296
|
+
* Check if the key is already in the registry
|
|
3297
|
+
*/
|
|
3260
3298
|
contains(key) {
|
|
3261
3299
|
return key in this.content;
|
|
3262
3300
|
}
|
|
3301
|
+
/**
|
|
3302
|
+
* Get a list of all elements in the registry
|
|
3303
|
+
*/
|
|
3263
3304
|
getAll() {
|
|
3264
3305
|
return Object.values(this.content);
|
|
3265
3306
|
}
|
|
3307
|
+
/**
|
|
3308
|
+
* Get a list of all keys in the registry
|
|
3309
|
+
*/
|
|
3266
3310
|
getKeys() {
|
|
3267
3311
|
return Object.keys(this.content);
|
|
3268
3312
|
}
|
|
3313
|
+
/**
|
|
3314
|
+
* Remove an item from the registry
|
|
3315
|
+
*/
|
|
3269
3316
|
remove(key) {
|
|
3270
3317
|
delete this.content[key];
|
|
3271
3318
|
}
|
|
@@ -4644,7 +4691,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
4644
4691
|
//#endregion
|
|
4645
4692
|
//#region src/functions/function_registry.ts
|
|
4646
4693
|
const functionNameRegex = /^[A-Z0-9\_\.]+$/;
|
|
4647
|
-
var FunctionRegistry = class extends Registry
|
|
4694
|
+
var FunctionRegistry = class extends Registry {
|
|
4648
4695
|
mapping = {};
|
|
4649
4696
|
add(name, addDescr) {
|
|
4650
4697
|
name = name.toUpperCase();
|
|
@@ -5458,84 +5505,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
5458
5505
|
return nextToken?.type === "LEFT_PAREN" && functionRegex.test(currentToken.value) && currentToken.value === unquote(currentToken.value, "'");
|
|
5459
5506
|
}
|
|
5460
5507
|
|
|
5461
|
-
//#endregion
|
|
5462
|
-
//#region src/registries/registry.ts
|
|
5463
|
-
/**
|
|
5464
|
-
* Registry
|
|
5465
|
-
*
|
|
5466
|
-
* The Registry class is basically just a mapping from a string key to an object.
|
|
5467
|
-
* It is really not much more than an object. It is however useful for the
|
|
5468
|
-
* following reasons:
|
|
5469
|
-
*
|
|
5470
|
-
* 1. it let us react and execute code when someone add something to the registry
|
|
5471
|
-
* (for example, the FunctionRegistry subclass this for this purpose)
|
|
5472
|
-
* 2. it throws an error when the get operation fails
|
|
5473
|
-
* 3. it provides a chained API to add items to the registry.
|
|
5474
|
-
*/
|
|
5475
|
-
var Registry = class {
|
|
5476
|
-
content = {};
|
|
5477
|
-
/**
|
|
5478
|
-
* Add an item to the registry, you can only add if there is no item
|
|
5479
|
-
* already present in the registery with the given key
|
|
5480
|
-
*
|
|
5481
|
-
* Note that this also returns the registry, so another add method call can
|
|
5482
|
-
* be chained
|
|
5483
|
-
*/
|
|
5484
|
-
add(key, value) {
|
|
5485
|
-
if (key in this.content) throw new Error(`${key} is already present in this registry!`);
|
|
5486
|
-
return this.replace(key, value);
|
|
5487
|
-
}
|
|
5488
|
-
/**
|
|
5489
|
-
* Replace (or add) an item to the registry
|
|
5490
|
-
*
|
|
5491
|
-
* Note that this also returns the registry, so another add method call can
|
|
5492
|
-
* be chained
|
|
5493
|
-
*/
|
|
5494
|
-
replace(key, value) {
|
|
5495
|
-
this.content[key] = value;
|
|
5496
|
-
return this;
|
|
5497
|
-
}
|
|
5498
|
-
/**
|
|
5499
|
-
* Get an item from the registry
|
|
5500
|
-
*/
|
|
5501
|
-
get(key) {
|
|
5502
|
-
/**
|
|
5503
|
-
* Note: key in {} is ~12 times slower than {}[key].
|
|
5504
|
-
* So, we check the absence of key only when the direct access returns
|
|
5505
|
-
* a falsy value. It's done to ensure that the registry can contains falsy values
|
|
5506
|
-
*/
|
|
5507
|
-
const content = this.content[key];
|
|
5508
|
-
if (!content) {
|
|
5509
|
-
if (!(key in this.content)) throw new Error(`Cannot find ${key} in this registry!`);
|
|
5510
|
-
}
|
|
5511
|
-
return content;
|
|
5512
|
-
}
|
|
5513
|
-
/**
|
|
5514
|
-
* Check if the key is already in the registry
|
|
5515
|
-
*/
|
|
5516
|
-
contains(key) {
|
|
5517
|
-
return key in this.content;
|
|
5518
|
-
}
|
|
5519
|
-
/**
|
|
5520
|
-
* Get a list of all elements in the registry
|
|
5521
|
-
*/
|
|
5522
|
-
getAll() {
|
|
5523
|
-
return Object.values(this.content);
|
|
5524
|
-
}
|
|
5525
|
-
/**
|
|
5526
|
-
* Get a list of all keys in the registry
|
|
5527
|
-
*/
|
|
5528
|
-
getKeys() {
|
|
5529
|
-
return Object.keys(this.content);
|
|
5530
|
-
}
|
|
5531
|
-
/**
|
|
5532
|
-
* Remove an item from the registry
|
|
5533
|
-
*/
|
|
5534
|
-
remove(key) {
|
|
5535
|
-
delete this.content[key];
|
|
5536
|
-
}
|
|
5537
|
-
};
|
|
5538
|
-
|
|
5539
5508
|
//#endregion
|
|
5540
5509
|
//#region src/helpers/range.ts
|
|
5541
5510
|
function createRange(args, getSheetSize) {
|
|
@@ -5817,8 +5786,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
5817
5786
|
changeType: "NONE",
|
|
5818
5787
|
range
|
|
5819
5788
|
};
|
|
5789
|
+
const isUnboundedAtEnd = range.unboundedZone[end] === void 0;
|
|
5790
|
+
if (isUnboundedAtEnd && !range.unboundedZone.hasHeader) return {
|
|
5791
|
+
changeType: "RESIZE",
|
|
5792
|
+
range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
|
|
5793
|
+
};
|
|
5820
5794
|
if (cmd.position === "after") {
|
|
5821
|
-
if (range.zone[start] <= cmd.base && cmd.base < range.zone[end]) return {
|
|
5795
|
+
if (range.zone[start] <= cmd.base && (cmd.base < range.zone[end] || isUnboundedAtEnd)) return {
|
|
5822
5796
|
changeType: "RESIZE",
|
|
5823
5797
|
range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
|
|
5824
5798
|
};
|
|
@@ -6556,6 +6530,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
6556
6530
|
//#endregion
|
|
6557
6531
|
//#region src/helpers/format/format_tokenizer.ts
|
|
6558
6532
|
function tokenizeFormat(str) {
|
|
6533
|
+
str = str.replace(/\s/g, " ");
|
|
6559
6534
|
const chars = new TokenizingChars(str);
|
|
6560
6535
|
const result = [];
|
|
6561
6536
|
let currentFormatPart = [];
|
|
@@ -7686,7 +7661,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
7686
7661
|
"SET_ZOOM",
|
|
7687
7662
|
"UPDATE_CAROUSEL_ACTIVE_ITEM",
|
|
7688
7663
|
"DUPLICATE_PIVOT_IN_NEW_SHEET",
|
|
7689
|
-
"UPDATE_FILTER"
|
|
7664
|
+
"UPDATE_FILTER",
|
|
7665
|
+
"ACTIVATE_NEXT_SHEET",
|
|
7666
|
+
"ACTIVATE_PREVIOUS_SHEET",
|
|
7667
|
+
"SCROLL_TO_CELL",
|
|
7668
|
+
"SHIFT_VIEWPORT_DOWN",
|
|
7669
|
+
"SHIFT_VIEWPORT_UP"
|
|
7690
7670
|
]);
|
|
7691
7671
|
const coreTypes = new Set([
|
|
7692
7672
|
"UPDATE_CELL",
|
|
@@ -8759,7 +8739,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
8759
8739
|
|
|
8760
8740
|
//#endregion
|
|
8761
8741
|
//#region src/helpers/figures/charts/chart_js_extension.ts
|
|
8762
|
-
const chartJsExtensionRegistry = new Registry
|
|
8742
|
+
const chartJsExtensionRegistry = new Registry();
|
|
8763
8743
|
function areChartJSExtensionsLoaded() {
|
|
8764
8744
|
return globalThis.Chart ? !!globalThis.Chart.registry.plugins.get("chartShowValuesPlugin") : true;
|
|
8765
8745
|
}
|
|
@@ -9119,6 +9099,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
9119
9099
|
ROUNDDOWN: [{
|
|
9120
9100
|
type: "NUMBER",
|
|
9121
9101
|
value: 0
|
|
9102
|
+
}],
|
|
9103
|
+
IFERROR: [{
|
|
9104
|
+
type: "NUMBER",
|
|
9105
|
+
value: 0
|
|
9122
9106
|
}]
|
|
9123
9107
|
};
|
|
9124
9108
|
/**
|
|
@@ -23266,7 +23250,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
23266
23250
|
|
|
23267
23251
|
//#endregion
|
|
23268
23252
|
//#region src/migrations/migration_steps.ts
|
|
23269
|
-
const migrationStepRegistry = new Registry
|
|
23253
|
+
const migrationStepRegistry = new Registry();
|
|
23270
23254
|
migrationStepRegistry.add("0.1", { migrate(data) {
|
|
23271
23255
|
if (data.sheets && data.sheets[0]) data.activeSheet = data.sheets[0].name;
|
|
23272
23256
|
return data;
|
|
@@ -30278,11 +30262,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
30278
30262
|
if (interactiveCreateTable(env, env.model.getters.getActiveSheetId()).isSuccessful) env.openSidePanel("TableSidePanel", {});
|
|
30279
30263
|
};
|
|
30280
30264
|
const DELETE_SELECTED_TABLE = (env) => {
|
|
30281
|
-
const
|
|
30282
|
-
const table = env.model.getters.getTable(position);
|
|
30265
|
+
const table = env.model.getters.getFirstTableInSelection();
|
|
30283
30266
|
if (!table) return;
|
|
30284
30267
|
env.model.dispatch("REMOVE_TABLE", {
|
|
30285
|
-
sheetId:
|
|
30268
|
+
sheetId: env.model.getters.getActiveSheetId(),
|
|
30286
30269
|
target: [table.range.zone]
|
|
30287
30270
|
});
|
|
30288
30271
|
};
|
|
@@ -32875,11 +32858,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
32875
32858
|
type: "range",
|
|
32876
32859
|
dataSets: [],
|
|
32877
32860
|
dataSetsHaveTitle: false,
|
|
32861
|
+
labelRange: context.auxiliaryRange,
|
|
32878
32862
|
...context.dataSource
|
|
32879
32863
|
};
|
|
32880
32864
|
},
|
|
32881
32865
|
fromHierarchicalContextCreation(context) {
|
|
32882
|
-
if (context.dataSource?.type !== "range" || context.hierarchicalDataSource
|
|
32866
|
+
if (context.dataSource?.type !== "range" || context.hierarchicalDataSource !== void 0 && context.hierarchicalDataSource.type !== "range") return {
|
|
32883
32867
|
type: "range",
|
|
32884
32868
|
dataSets: [],
|
|
32885
32869
|
dataSetsHaveTitle: false
|
|
@@ -37546,7 +37530,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
37546
37530
|
col,
|
|
37547
37531
|
row
|
|
37548
37532
|
};
|
|
37549
|
-
if (
|
|
37533
|
+
if (getters.getPivotIdsFromPosition(position).includes(pivotId)) positions.push(position);
|
|
37550
37534
|
}
|
|
37551
37535
|
return positions;
|
|
37552
37536
|
}
|
|
@@ -39556,7 +39540,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
39556
39540
|
|
|
39557
39541
|
//#endregion
|
|
39558
39542
|
//#region src/helpers/pivot/pivot_registry.ts
|
|
39559
|
-
const pivotRegistry = new Registry
|
|
39543
|
+
const pivotRegistry = new Registry();
|
|
39560
39544
|
const dateGranularities = [
|
|
39561
39545
|
"year",
|
|
39562
39546
|
"quarter_number",
|
|
@@ -39620,6 +39604,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
39620
39604
|
function getFirstPivotFunction(compiledFormula, getters) {
|
|
39621
39605
|
return compiledFormula.getFunctionsFromTokens(PIVOT_FUNCTIONS, getters)[0];
|
|
39622
39606
|
}
|
|
39607
|
+
function getPivotFunctions(compiledFormula, getters) {
|
|
39608
|
+
return compiledFormula.getFunctionsFromTokens(PIVOT_FUNCTIONS, getters);
|
|
39609
|
+
}
|
|
39623
39610
|
/**
|
|
39624
39611
|
* Parse a spreadsheet formula and detect the number of PIVOT functions that are
|
|
39625
39612
|
* present in the given formula.
|
|
@@ -57834,6 +57821,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
57834
57821
|
"getFirstPivotFunction",
|
|
57835
57822
|
"getPivotCellSortDirection",
|
|
57836
57823
|
"getPivotIdFromPosition",
|
|
57824
|
+
"getPivotIdsFromPosition",
|
|
57837
57825
|
"getPivotCellFromPosition",
|
|
57838
57826
|
"generateNewCalculatedMeasureName",
|
|
57839
57827
|
"isPivotUnused",
|
|
@@ -57860,9 +57848,11 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
57860
57848
|
this.refreshPivot(cmd.id);
|
|
57861
57849
|
break;
|
|
57862
57850
|
case "ADD_PIVOT":
|
|
57851
|
+
this.unusedPivotsInFormulas?.push(cmd.pivotId);
|
|
57863
57852
|
this.setupPivot(cmd.pivotId);
|
|
57864
57853
|
break;
|
|
57865
57854
|
case "DUPLICATE_PIVOT":
|
|
57855
|
+
this.unusedPivotsInFormulas?.push(cmd.newPivotId);
|
|
57866
57856
|
this.setupPivot(cmd.newPivotId);
|
|
57867
57857
|
break;
|
|
57868
57858
|
case "UPDATE_PIVOT":
|
|
@@ -57893,37 +57883,52 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
57893
57883
|
}
|
|
57894
57884
|
}
|
|
57895
57885
|
/**
|
|
57896
|
-
* Get the id of the pivot at the given position. Returns undefined if there
|
|
57886
|
+
* Get the id of the first pivot in the formula at the given position. Returns undefined if there
|
|
57897
57887
|
* is no pivot at this position
|
|
57898
57888
|
*/
|
|
57899
57889
|
getPivotIdFromPosition(position) {
|
|
57890
|
+
return this.getPivotIdsFromPosition(position)[0];
|
|
57891
|
+
}
|
|
57892
|
+
/**
|
|
57893
|
+
* Get all of the ids of the pivot present in the formula at the given position.
|
|
57894
|
+
*/
|
|
57895
|
+
getPivotIdsFromPosition(position) {
|
|
57900
57896
|
const cell = this.getters.getCorrespondingFormulaCell(position);
|
|
57901
|
-
if (cell && cell.isFormula)
|
|
57902
|
-
|
|
57903
|
-
|
|
57904
|
-
|
|
57905
|
-
|
|
57906
|
-
|
|
57907
|
-
|
|
57897
|
+
if (cell && cell.isFormula) return this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
|
|
57898
|
+
return [];
|
|
57899
|
+
}
|
|
57900
|
+
getPivotIdsFromFormula(sheetId, formula) {
|
|
57901
|
+
return this.getPivotFunctions(sheetId, formula).map((pivotFunction) => {
|
|
57902
|
+
const pivotId = pivotFunction.args[0]?.toString();
|
|
57903
|
+
return pivotId && this.getters.getPivotId(pivotId);
|
|
57904
|
+
}).filter(isDefined);
|
|
57908
57905
|
}
|
|
57909
57906
|
isSpillPivotFormula(position) {
|
|
57910
57907
|
const cell = this.getters.getCorrespondingFormulaCell(position);
|
|
57911
57908
|
if (cell && cell.isFormula) return this.getFirstPivotFunction(position.sheetId, cell.compiledFormula)?.functionName === "PIVOT";
|
|
57912
57909
|
return false;
|
|
57913
57910
|
}
|
|
57914
|
-
|
|
57915
|
-
const
|
|
57916
|
-
if (!
|
|
57917
|
-
const
|
|
57918
|
-
|
|
57919
|
-
functionName,
|
|
57920
|
-
|
|
57911
|
+
getPivotFunctions(sheetId, formula) {
|
|
57912
|
+
const pivotFunctions = getPivotFunctions(formula, this.getters);
|
|
57913
|
+
if (!pivotFunctions.length) return [];
|
|
57914
|
+
const evaluatedPivotFunctions = [];
|
|
57915
|
+
for (const pivotFunction of pivotFunctions) {
|
|
57916
|
+
const { functionName, args } = pivotFunction;
|
|
57917
|
+
const evaluatedArgs = args.map((argAst) => {
|
|
57921
57918
|
if (argAst.type === "EMPTY") return;
|
|
57922
57919
|
else if (argAst.type === "STRING" || argAst.type === "BOOLEAN" || argAst.type === "NUMBER") return argAst.value;
|
|
57923
57920
|
const argsString = astToFormula(argAst);
|
|
57924
57921
|
return this.getters.evaluateFormula(sheetId, argsString);
|
|
57925
|
-
})
|
|
57926
|
-
|
|
57922
|
+
});
|
|
57923
|
+
evaluatedPivotFunctions.push({
|
|
57924
|
+
functionName,
|
|
57925
|
+
args: evaluatedArgs
|
|
57926
|
+
});
|
|
57927
|
+
}
|
|
57928
|
+
return evaluatedPivotFunctions;
|
|
57929
|
+
}
|
|
57930
|
+
getFirstPivotFunction(sheetId, formula) {
|
|
57931
|
+
return this.getPivotFunctions(sheetId, formula)[0];
|
|
57927
57932
|
}
|
|
57928
57933
|
/**
|
|
57929
57934
|
* Returns the domain args of a pivot formula from a position.
|
|
@@ -58029,8 +58034,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
58029
58034
|
const unusedPivots = new Set(this.getters.getPivotIds());
|
|
58030
58035
|
for (const sheetId of this.getters.getSheetIds()) for (const cell of this.getters.getCells(sheetId)) {
|
|
58031
58036
|
const position = this.getters.getCellPosition(cell.id);
|
|
58032
|
-
const
|
|
58033
|
-
|
|
58037
|
+
const pivotIds = this.getPivotIdsFromPosition(position);
|
|
58038
|
+
for (const pivotId of pivotIds) {
|
|
58034
58039
|
unusedPivots.delete(pivotId);
|
|
58035
58040
|
if (!unusedPivots.size) {
|
|
58036
58041
|
this.unusedPivotsInFormulas = [];
|
|
@@ -58038,6 +58043,21 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
58038
58043
|
}
|
|
58039
58044
|
}
|
|
58040
58045
|
}
|
|
58046
|
+
for (const pivotId of this.getters.getPivotIds()) {
|
|
58047
|
+
const pivot = this.getters.getPivotCoreDefinition(pivotId);
|
|
58048
|
+
for (const measure of pivot.measures) if (measure.computedBy) {
|
|
58049
|
+
const { sheetId } = measure.computedBy;
|
|
58050
|
+
const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
|
|
58051
|
+
const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
|
|
58052
|
+
for (const relatedPivotId of relatedPivotIds) {
|
|
58053
|
+
unusedPivots.delete(relatedPivotId);
|
|
58054
|
+
if (!unusedPivots.size) {
|
|
58055
|
+
this.unusedPivotsInFormulas = [];
|
|
58056
|
+
return [];
|
|
58057
|
+
}
|
|
58058
|
+
}
|
|
58059
|
+
}
|
|
58060
|
+
}
|
|
58041
58061
|
this.unusedPivotsInFormulas = [...unusedPivots];
|
|
58042
58062
|
return this.unusedPivotsInFormulas;
|
|
58043
58063
|
}
|
|
@@ -59787,7 +59807,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
59787
59807
|
"REMOVE_TABLE",
|
|
59788
59808
|
"RESIZE_TABLE",
|
|
59789
59809
|
"CREATE_TABLE_STYLE",
|
|
59790
|
-
"REMOVE_TABLE_STYLE"
|
|
59810
|
+
"REMOVE_TABLE_STYLE",
|
|
59811
|
+
"DELETE_CONTENT"
|
|
59791
59812
|
]);
|
|
59792
59813
|
function doesCommandInvalidatesTableStyle(cmd) {
|
|
59793
59814
|
return invalidateTableStyleCommandsSet.has(cmd.type);
|
|
@@ -65482,10 +65503,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
65482
65503
|
|
|
65483
65504
|
//#endregion
|
|
65484
65505
|
//#region src/plugins/index.ts
|
|
65485
|
-
const corePluginRegistry = new Registry
|
|
65486
|
-
const featurePluginRegistry = new Registry
|
|
65487
|
-
const statefulUIPluginRegistry = new Registry
|
|
65488
|
-
const coreViewsPluginRegistry = new Registry
|
|
65506
|
+
const corePluginRegistry = new Registry().add("settings", SettingsPlugin).add("sheet", SheetPlugin).add("header grouping", HeaderGroupingPlugin).add("header visibility", HeaderVisibilityPlugin).add("tables", TablePlugin).add("dataValidation", DataValidationPlugin).add("cell", CellPlugin).add("merge", MergePlugin).add("headerSize", HeaderSizePlugin).add("borders", BordersPlugin).add("conditional formatting", ConditionalFormatPlugin).add("figures", FigurePlugin).add("chart", ChartPlugin).add("carousel", CarouselPlugin).add("image", ImagePlugin).add("named_ranges", NamedRangesPlugin).add("pivot_core", PivotCorePlugin).add("spreadsheet_pivot_core", SpreadsheetPivotCorePlugin).add("tableStyle", TableStylePlugin);
|
|
65507
|
+
const featurePluginRegistry = new Registry().add("ui_sheet", SheetUIPlugin).add("ui_options", UIOptionsPlugin).add("autofill", AutofillPlugin).add("sort", SortPlugin).add("automatic_sum", AutomaticSumPlugin).add("format", FormatPlugin).add("insert_pivot", InsertPivotPlugin).add("pivot_presence", PivotPresencePlugin).add("split_to_columns", SplitToColumnsPlugin).add("subtotal_evaluation", SubtotalEvaluationPlugin).add("collaborative", CollaborativePlugin).add("history", HistoryPlugin).add("table_autofill", TableAutofillPlugin).add("table_ui_resize", TableResizeUI).add("datavalidation_insert", DataValidationInsertionPlugin).add("checkbox_toggle", CheckboxTogglePlugin).add("dynamic_translate", DynamicTranslate).add("geo_features", GeoFeaturePlugin).add("data_cleanup", DataCleanupPlugin);
|
|
65508
|
+
const statefulUIPluginRegistry = new Registry().add("selection", GridSelectionPlugin).add("evaluation_filter", FilterEvaluationPlugin).add("header_visibility_ui", HeaderVisibilityUIPlugin).add("cell_computed_style", CellComputedStylePlugin).add("table_computed_style", TableComputedStylePlugin).add("header_positions", HeaderPositionsUIPlugin).add("viewport", SheetViewPlugin).add("clipboard", ClipboardPlugin).add("carousel_ui", CarouselUIPlugin).add("lock_sheet", LockSheetPlugin);
|
|
65509
|
+
const coreViewsPluginRegistry = new Registry().add("evaluation", EvaluationPlugin).add("evaluation_chart", EvaluationChartPlugin).add("evaluation_cf", EvaluationConditionalFormatPlugin).add("row_size", HeaderSizeUIPlugin).add("data_validation_ui", EvaluationDataValidationPlugin).add("dynamic_tables", DynamicTablesPlugin).add("custom_colors", CustomColorsPlugin).add("pivot_ui", PivotUIPlugin).add("cell_icon", CellIconPlugin).add("formula_tracker", FormulaTrackerPlugin);
|
|
65489
65510
|
|
|
65490
65511
|
//#endregion
|
|
65491
65512
|
//#region src/registries/auto_completes/data_validation_auto_complete.ts
|
|
@@ -72283,6 +72304,11 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
72283
72304
|
`;
|
|
72284
72305
|
}
|
|
72285
72306
|
function insertText(text, fontColor = "000000", fontsize = 16, style = {}) {
|
|
72307
|
+
const textProperties = [
|
|
72308
|
+
["b", style.bold ? "1" : "0"],
|
|
72309
|
+
["i", style.italic ? "1" : "0"],
|
|
72310
|
+
["sz", fontsize * 100]
|
|
72311
|
+
];
|
|
72286
72312
|
return escapeXml`
|
|
72287
72313
|
<c:tx>
|
|
72288
72314
|
<c:rich>
|
|
@@ -72290,13 +72316,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
72290
72316
|
<a:lstStyle />
|
|
72291
72317
|
<a:p>
|
|
72292
72318
|
<a:pPr lvl="0">
|
|
72293
|
-
<a:defRPr
|
|
72319
|
+
<a:defRPr ${formatAttributes(textProperties)}>
|
|
72294
72320
|
${solidFill(fontColor)}
|
|
72295
72321
|
<a:latin typeface="+mn-lt"/>
|
|
72296
72322
|
</a:defRPr>
|
|
72297
72323
|
</a:pPr>
|
|
72298
72324
|
<a:r> <!-- Runs -->
|
|
72299
|
-
<a:rPr
|
|
72325
|
+
<a:rPr ${formatAttributes(textProperties)}/>
|
|
72300
72326
|
<a:t>${text}</a:t>
|
|
72301
72327
|
</a:r>
|
|
72302
72328
|
</a:p>
|
|
@@ -84504,8 +84530,8 @@ exports.stores = stores;
|
|
|
84504
84530
|
exports.tokenColors = tokenColors;
|
|
84505
84531
|
exports.tokenize = tokenize;
|
|
84506
84532
|
|
|
84507
|
-
__info__.version = "19.3.
|
|
84508
|
-
__info__.date = "2026-
|
|
84509
|
-
__info__.hash = "
|
|
84533
|
+
__info__.version = "19.3.6";
|
|
84534
|
+
__info__.date = "2026-06-06T06:24:22.727Z";
|
|
84535
|
+
__info__.hash = "0fe939b";
|
|
84510
84536
|
|
|
84511
84537
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|