@odoo/o-spreadsheet 19.5.0-alpha.5 → 19.5.0-alpha.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 +58 -20
- package/dist/o_spreadsheet.css +3 -3
- package/dist/o_spreadsheet.esm.js +58 -20
- package/dist/o_spreadsheet.iife.js +58 -20
- package/dist/o_spreadsheet.min.iife.js +213 -213
- package/dist/o_spreadsheet.xml +4 -7
- package/dist/types/components/grid/grid.d.ts +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/plugins/ui_core_views/pivot_ui.d.ts +3 -0
- package/dist/types/plugins/ui_feature/collaborative.d.ts +2 -1
- package/dist/types/store_engine/store_registries.d.ts +4 -0
- package/package.json +1 -1
package/dist/o_spreadsheet.cjs
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.5.0-alpha.
|
|
6
|
-
* @date 2026-07-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.5.0-alpha.6
|
|
6
|
+
* @date 2026-07-23T07:49:14.543Z
|
|
7
|
+
* @hash 192a921
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
@@ -48400,7 +48400,8 @@ var Autofill = class extends Component {
|
|
|
48400
48400
|
const { x, y } = this.state.handler ? this.state.position : this.props.position;
|
|
48401
48401
|
return cssPropertiesToCss({
|
|
48402
48402
|
top: `${y}px`,
|
|
48403
|
-
left: `${x}px
|
|
48403
|
+
left: `${x}px`,
|
|
48404
|
+
visibility: this.props.isVisible ? "visible" : "hidden"
|
|
48404
48405
|
});
|
|
48405
48406
|
}
|
|
48406
48407
|
get styleNextValue() {
|
|
@@ -48826,7 +48827,7 @@ var CellComposerStore = class extends AbstractComposerStore {
|
|
|
48826
48827
|
this._cancelEdition();
|
|
48827
48828
|
this.resetContent();
|
|
48828
48829
|
}
|
|
48829
|
-
if (cmd.sheetIdFrom !== cmd.sheetIdTo) {
|
|
48830
|
+
if (this.model.selection.isListening(this) && cmd.sheetIdFrom !== cmd.sheetIdTo) {
|
|
48830
48831
|
const activePosition = this.getters.getActivePosition();
|
|
48831
48832
|
const { col, row } = this.getters.getNextVisibleCellPosition({
|
|
48832
48833
|
sheetId: cmd.sheetIdTo,
|
|
@@ -53051,6 +53052,10 @@ var Grid = class extends Component {
|
|
|
53051
53052
|
get displaySelectionHandler() {
|
|
53052
53053
|
return this.env.isMobile() && this.composerFocusStore.activeComposer.editionMode === "inactive";
|
|
53053
53054
|
}
|
|
53055
|
+
get clientsToDisplay() {
|
|
53056
|
+
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
53057
|
+
return this.env.model.getters.getClientsToDisplay(sheetId);
|
|
53058
|
+
}
|
|
53054
53059
|
};
|
|
53055
53060
|
|
|
53056
53061
|
//#endregion
|
|
@@ -62823,6 +62828,8 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
62823
62828
|
pivots = {};
|
|
62824
62829
|
unusedPivotsInFormulas;
|
|
62825
62830
|
custom;
|
|
62831
|
+
pivotPositionCache = new PositionMap();
|
|
62832
|
+
shouldInvalidateCache = false;
|
|
62826
62833
|
constructor(config) {
|
|
62827
62834
|
super(config);
|
|
62828
62835
|
this.custom = config.custom;
|
|
@@ -62833,7 +62840,11 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
62833
62840
|
}
|
|
62834
62841
|
}
|
|
62835
62842
|
handle(cmd) {
|
|
62836
|
-
if (invalidateEvaluationCommands.has(cmd.type))
|
|
62843
|
+
if (invalidateEvaluationCommands.has(cmd.type)) {
|
|
62844
|
+
this.shouldInvalidateCache = true;
|
|
62845
|
+
for (const pivotId of this.getters.getPivotIds()) this.setupPivot(pivotId, { recreate: true });
|
|
62846
|
+
}
|
|
62847
|
+
if (cmd.type === "UPDATE_CELL") this.shouldInvalidateCache = true;
|
|
62837
62848
|
switch (cmd.type) {
|
|
62838
62849
|
case "REFRESH_PIVOT":
|
|
62839
62850
|
this.refreshPivot(cmd.id);
|
|
@@ -62873,6 +62884,12 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
62873
62884
|
break;
|
|
62874
62885
|
}
|
|
62875
62886
|
}
|
|
62887
|
+
finalize() {
|
|
62888
|
+
if (this.shouldInvalidateCache) {
|
|
62889
|
+
this.pivotPositionCache = new PositionMap();
|
|
62890
|
+
this.shouldInvalidateCache = false;
|
|
62891
|
+
}
|
|
62892
|
+
}
|
|
62876
62893
|
/**
|
|
62877
62894
|
* Get the id of the first pivot in the formula at the given position. Returns undefined if there
|
|
62878
62895
|
* is no pivot at this position
|
|
@@ -62884,9 +62901,14 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
62884
62901
|
* Get all of the ids of the pivot present in the formula at the given position.
|
|
62885
62902
|
*/
|
|
62886
62903
|
getPivotIdsFromPosition(position) {
|
|
62887
|
-
|
|
62888
|
-
|
|
62889
|
-
|
|
62904
|
+
if (!this.pivotPositionCache.has(position)) {
|
|
62905
|
+
const cell = this.getters.getCorrespondingFormulaCell(position);
|
|
62906
|
+
if (cell && cell.isFormula) {
|
|
62907
|
+
const pivotIds = this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
|
|
62908
|
+
this.pivotPositionCache.set(position, pivotIds);
|
|
62909
|
+
}
|
|
62910
|
+
}
|
|
62911
|
+
return this.pivotPositionCache.get(position) || [];
|
|
62890
62912
|
}
|
|
62891
62913
|
getPivotIdsFromFormula(sheetId, formula) {
|
|
62892
62914
|
return this.getPivotFunctions(sheetId, formula).map((pivotFunction) => {
|
|
@@ -63134,12 +63156,22 @@ var TableComputedStylePlugin = class extends UIPlugin {
|
|
|
63134
63156
|
getCellTableStyle(position) {
|
|
63135
63157
|
const table = this.getters.getTable(position);
|
|
63136
63158
|
if (!table) return;
|
|
63137
|
-
|
|
63159
|
+
try {
|
|
63160
|
+
return this.tableStyles[position.sheetId][table.id]().styles[position.col]?.[position.row];
|
|
63161
|
+
} catch (e) {
|
|
63162
|
+
if (isEvaluationError(e) || e instanceof EvaluationError) return;
|
|
63163
|
+
throw e;
|
|
63164
|
+
}
|
|
63138
63165
|
}
|
|
63139
63166
|
getCellTableBorder(position) {
|
|
63140
63167
|
const table = this.getters.getTable(position);
|
|
63141
63168
|
if (!table) return;
|
|
63142
|
-
|
|
63169
|
+
try {
|
|
63170
|
+
return this.tableStyles[position.sheetId][table.id]().borders[position.col]?.[position.row];
|
|
63171
|
+
} catch (e) {
|
|
63172
|
+
if (isEvaluationError(e) || e instanceof EvaluationError) return;
|
|
63173
|
+
throw e;
|
|
63174
|
+
}
|
|
63143
63175
|
}
|
|
63144
63176
|
computeTableStyle(sheetId, table) {
|
|
63145
63177
|
return lazy(() => {
|
|
@@ -64444,14 +64476,13 @@ var CollaborativePlugin = class extends UIPlugin {
|
|
|
64444
64476
|
* Get the list of others connected clients which are present in the same sheet
|
|
64445
64477
|
* and with a valid position
|
|
64446
64478
|
*/
|
|
64447
|
-
getClientsToDisplay() {
|
|
64479
|
+
getClientsToDisplay(sheetId) {
|
|
64448
64480
|
try {
|
|
64449
64481
|
this.getters.getCurrentClient();
|
|
64450
64482
|
} catch (e) {
|
|
64451
64483
|
if (e instanceof ClientDisconnectedError) return [];
|
|
64452
64484
|
else throw e;
|
|
64453
64485
|
}
|
|
64454
|
-
const sheetId = this.getters.getActiveSheetId();
|
|
64455
64486
|
const clients = [];
|
|
64456
64487
|
for (const client of this.getters.getConnectedClients()) if (client.id !== this.getters.getCurrentClient().id && client.position && client.position.sheetId === sheetId && this.isPositionValid(client.position)) clients.push({
|
|
64457
64488
|
...client,
|
|
@@ -64462,7 +64493,7 @@ var CollaborativePlugin = class extends UIPlugin {
|
|
|
64462
64493
|
drawLayer(renderingContext) {
|
|
64463
64494
|
if (this.getters.isDashboard()) return;
|
|
64464
64495
|
const { ctx, thinLineWidth, viewports, sheetId } = renderingContext;
|
|
64465
|
-
for (const client of this.getClientsToDisplay()) {
|
|
64496
|
+
for (const client of this.getClientsToDisplay(sheetId)) {
|
|
64466
64497
|
const { row, col } = client.position;
|
|
64467
64498
|
const zone = this.getters.expandZone(sheetId, {
|
|
64468
64499
|
top: row,
|
|
@@ -64891,8 +64922,8 @@ var HeaderVisibilityUIPlugin = class extends UIPlugin {
|
|
|
64891
64922
|
getNextVisibleCellPosition({ sheetId, col, row }) {
|
|
64892
64923
|
return {
|
|
64893
64924
|
sheetId,
|
|
64894
|
-
col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1),
|
|
64895
|
-
row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1)
|
|
64925
|
+
col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1) || this.findVisibleHeader(sheetId, "COL", col, 0) || 0,
|
|
64926
|
+
row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1) || this.findVisibleHeader(sheetId, "ROW", row, 0) || 0
|
|
64896
64927
|
};
|
|
64897
64928
|
}
|
|
64898
64929
|
/**
|
|
@@ -68797,6 +68828,10 @@ var ImageProvider = class {
|
|
|
68797
68828
|
}
|
|
68798
68829
|
};
|
|
68799
68830
|
|
|
68831
|
+
//#endregion
|
|
68832
|
+
//#region src/store_engine/store_registries.ts
|
|
68833
|
+
const globalStores = new Registry();
|
|
68834
|
+
|
|
68800
68835
|
//#endregion
|
|
68801
68836
|
//#region src/components/animation/ripple.ts
|
|
68802
68837
|
const RIPPLE_KEY_FRAMES = [
|
|
@@ -72131,6 +72166,7 @@ var Spreadsheet = class extends Component {
|
|
|
72131
72166
|
this.notificationStore = useStore(NotificationStore);
|
|
72132
72167
|
this.composerFocusStore = useStore(ComposerFocusStore);
|
|
72133
72168
|
this.sidePanel = useStore(SidePanelStore);
|
|
72169
|
+
for (const store of globalStores.getAll()) useStore(store);
|
|
72134
72170
|
const fileStore = this.model.config.external.fileStore;
|
|
72135
72171
|
useSubEnv({
|
|
72136
72172
|
model: this.model,
|
|
@@ -87743,6 +87779,7 @@ const helpers = {
|
|
|
87743
87779
|
collapseHierarchicalDisplayName,
|
|
87744
87780
|
getCanonicalSymbolName,
|
|
87745
87781
|
fuzzyLookup,
|
|
87782
|
+
PositionMap,
|
|
87746
87783
|
replaceSymbolInFormula,
|
|
87747
87784
|
isSingleCellReference,
|
|
87748
87785
|
computeCachedTextDimension
|
|
@@ -87853,7 +87890,8 @@ const stores = {
|
|
|
87853
87890
|
AutofillStore,
|
|
87854
87891
|
ClientFocusStore,
|
|
87855
87892
|
GridRenderer,
|
|
87856
|
-
ViewportsStore
|
|
87893
|
+
ViewportsStore,
|
|
87894
|
+
globalStores
|
|
87857
87895
|
};
|
|
87858
87896
|
function addFunction(functionName, functionDescription) {
|
|
87859
87897
|
functionRegistry.add(functionName, functionDescription);
|
|
@@ -87973,6 +88011,6 @@ exports.stores = stores;
|
|
|
87973
88011
|
exports.tokenColors = tokenColors;
|
|
87974
88012
|
exports.tokenize = tokenize;
|
|
87975
88013
|
|
|
87976
|
-
__info__.version = "19.5.0-alpha.
|
|
87977
|
-
__info__.date = "2026-07-
|
|
87978
|
-
__info__.hash = "
|
|
88014
|
+
__info__.version = "19.5.0-alpha.6";
|
|
88015
|
+
__info__.date = "2026-07-23T07:49:14.543Z";
|
|
88016
|
+
__info__.hash = "192a921";
|
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.5.0-alpha.
|
|
6
|
-
* @date 2026-07-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.5.0-alpha.6
|
|
6
|
+
* @date 2026-07-23T07:49:16.310Z
|
|
7
|
+
* @hash 192a921
|
|
8
8
|
*/
|
|
9
9
|
:root {
|
|
10
10
|
--os-gray-100: light-dark(#f9fafb, #1b1d26);
|
|
@@ -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.5.0-alpha.
|
|
6
|
-
* @date 2026-07-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.5.0-alpha.6
|
|
6
|
+
* @date 2026-07-23T07:49:14.543Z
|
|
7
|
+
* @hash 192a921
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import * as owl from "@odoo/owl";
|
|
@@ -48399,7 +48399,8 @@ var Autofill = class extends Component {
|
|
|
48399
48399
|
const { x, y } = this.state.handler ? this.state.position : this.props.position;
|
|
48400
48400
|
return cssPropertiesToCss({
|
|
48401
48401
|
top: `${y}px`,
|
|
48402
|
-
left: `${x}px
|
|
48402
|
+
left: `${x}px`,
|
|
48403
|
+
visibility: this.props.isVisible ? "visible" : "hidden"
|
|
48403
48404
|
});
|
|
48404
48405
|
}
|
|
48405
48406
|
get styleNextValue() {
|
|
@@ -48825,7 +48826,7 @@ var CellComposerStore = class extends AbstractComposerStore {
|
|
|
48825
48826
|
this._cancelEdition();
|
|
48826
48827
|
this.resetContent();
|
|
48827
48828
|
}
|
|
48828
|
-
if (cmd.sheetIdFrom !== cmd.sheetIdTo) {
|
|
48829
|
+
if (this.model.selection.isListening(this) && cmd.sheetIdFrom !== cmd.sheetIdTo) {
|
|
48829
48830
|
const activePosition = this.getters.getActivePosition();
|
|
48830
48831
|
const { col, row } = this.getters.getNextVisibleCellPosition({
|
|
48831
48832
|
sheetId: cmd.sheetIdTo,
|
|
@@ -53050,6 +53051,10 @@ var Grid = class extends Component {
|
|
|
53050
53051
|
get displaySelectionHandler() {
|
|
53051
53052
|
return this.env.isMobile() && this.composerFocusStore.activeComposer.editionMode === "inactive";
|
|
53052
53053
|
}
|
|
53054
|
+
get clientsToDisplay() {
|
|
53055
|
+
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
53056
|
+
return this.env.model.getters.getClientsToDisplay(sheetId);
|
|
53057
|
+
}
|
|
53053
53058
|
};
|
|
53054
53059
|
|
|
53055
53060
|
//#endregion
|
|
@@ -62638,6 +62643,8 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
62638
62643
|
pivots = {};
|
|
62639
62644
|
unusedPivotsInFormulas;
|
|
62640
62645
|
custom;
|
|
62646
|
+
pivotPositionCache = new PositionMap();
|
|
62647
|
+
shouldInvalidateCache = false;
|
|
62641
62648
|
constructor(config) {
|
|
62642
62649
|
super(config);
|
|
62643
62650
|
this.custom = config.custom;
|
|
@@ -62648,7 +62655,11 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
62648
62655
|
}
|
|
62649
62656
|
}
|
|
62650
62657
|
handle(cmd) {
|
|
62651
|
-
if (invalidateEvaluationCommands.has(cmd.type))
|
|
62658
|
+
if (invalidateEvaluationCommands.has(cmd.type)) {
|
|
62659
|
+
this.shouldInvalidateCache = true;
|
|
62660
|
+
for (const pivotId of this.getters.getPivotIds()) this.setupPivot(pivotId, { recreate: true });
|
|
62661
|
+
}
|
|
62662
|
+
if (cmd.type === "UPDATE_CELL") this.shouldInvalidateCache = true;
|
|
62652
62663
|
switch (cmd.type) {
|
|
62653
62664
|
case "REFRESH_PIVOT":
|
|
62654
62665
|
this.refreshPivot(cmd.id);
|
|
@@ -62688,6 +62699,12 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
62688
62699
|
break;
|
|
62689
62700
|
}
|
|
62690
62701
|
}
|
|
62702
|
+
finalize() {
|
|
62703
|
+
if (this.shouldInvalidateCache) {
|
|
62704
|
+
this.pivotPositionCache = new PositionMap();
|
|
62705
|
+
this.shouldInvalidateCache = false;
|
|
62706
|
+
}
|
|
62707
|
+
}
|
|
62691
62708
|
/**
|
|
62692
62709
|
* Get the id of the first pivot in the formula at the given position. Returns undefined if there
|
|
62693
62710
|
* is no pivot at this position
|
|
@@ -62699,9 +62716,14 @@ var PivotUIPlugin = class extends CoreViewPlugin {
|
|
|
62699
62716
|
* Get all of the ids of the pivot present in the formula at the given position.
|
|
62700
62717
|
*/
|
|
62701
62718
|
getPivotIdsFromPosition(position) {
|
|
62702
|
-
|
|
62703
|
-
|
|
62704
|
-
|
|
62719
|
+
if (!this.pivotPositionCache.has(position)) {
|
|
62720
|
+
const cell = this.getters.getCorrespondingFormulaCell(position);
|
|
62721
|
+
if (cell && cell.isFormula) {
|
|
62722
|
+
const pivotIds = this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
|
|
62723
|
+
this.pivotPositionCache.set(position, pivotIds);
|
|
62724
|
+
}
|
|
62725
|
+
}
|
|
62726
|
+
return this.pivotPositionCache.get(position) || [];
|
|
62705
62727
|
}
|
|
62706
62728
|
getPivotIdsFromFormula(sheetId, formula) {
|
|
62707
62729
|
return this.getPivotFunctions(sheetId, formula).map((pivotFunction) => {
|
|
@@ -62949,12 +62971,22 @@ var TableComputedStylePlugin = class extends UIPlugin {
|
|
|
62949
62971
|
getCellTableStyle(position) {
|
|
62950
62972
|
const table = this.getters.getTable(position);
|
|
62951
62973
|
if (!table) return;
|
|
62952
|
-
|
|
62974
|
+
try {
|
|
62975
|
+
return this.tableStyles[position.sheetId][table.id]().styles[position.col]?.[position.row];
|
|
62976
|
+
} catch (e) {
|
|
62977
|
+
if (isEvaluationError(e) || e instanceof EvaluationError) return;
|
|
62978
|
+
throw e;
|
|
62979
|
+
}
|
|
62953
62980
|
}
|
|
62954
62981
|
getCellTableBorder(position) {
|
|
62955
62982
|
const table = this.getters.getTable(position);
|
|
62956
62983
|
if (!table) return;
|
|
62957
|
-
|
|
62984
|
+
try {
|
|
62985
|
+
return this.tableStyles[position.sheetId][table.id]().borders[position.col]?.[position.row];
|
|
62986
|
+
} catch (e) {
|
|
62987
|
+
if (isEvaluationError(e) || e instanceof EvaluationError) return;
|
|
62988
|
+
throw e;
|
|
62989
|
+
}
|
|
62958
62990
|
}
|
|
62959
62991
|
computeTableStyle(sheetId, table) {
|
|
62960
62992
|
return lazy(() => {
|
|
@@ -64259,14 +64291,13 @@ var CollaborativePlugin = class extends UIPlugin {
|
|
|
64259
64291
|
* Get the list of others connected clients which are present in the same sheet
|
|
64260
64292
|
* and with a valid position
|
|
64261
64293
|
*/
|
|
64262
|
-
getClientsToDisplay() {
|
|
64294
|
+
getClientsToDisplay(sheetId) {
|
|
64263
64295
|
try {
|
|
64264
64296
|
this.getters.getCurrentClient();
|
|
64265
64297
|
} catch (e) {
|
|
64266
64298
|
if (e instanceof ClientDisconnectedError) return [];
|
|
64267
64299
|
else throw e;
|
|
64268
64300
|
}
|
|
64269
|
-
const sheetId = this.getters.getActiveSheetId();
|
|
64270
64301
|
const clients = [];
|
|
64271
64302
|
for (const client of this.getters.getConnectedClients()) if (client.id !== this.getters.getCurrentClient().id && client.position && client.position.sheetId === sheetId && this.isPositionValid(client.position)) clients.push({
|
|
64272
64303
|
...client,
|
|
@@ -64277,7 +64308,7 @@ var CollaborativePlugin = class extends UIPlugin {
|
|
|
64277
64308
|
drawLayer(renderingContext) {
|
|
64278
64309
|
if (this.getters.isDashboard()) return;
|
|
64279
64310
|
const { ctx, thinLineWidth, viewports, sheetId } = renderingContext;
|
|
64280
|
-
for (const client of this.getClientsToDisplay()) {
|
|
64311
|
+
for (const client of this.getClientsToDisplay(sheetId)) {
|
|
64281
64312
|
const { row, col } = client.position;
|
|
64282
64313
|
const zone = this.getters.expandZone(sheetId, {
|
|
64283
64314
|
top: row,
|
|
@@ -64706,8 +64737,8 @@ var HeaderVisibilityUIPlugin = class extends UIPlugin {
|
|
|
64706
64737
|
getNextVisibleCellPosition({ sheetId, col, row }) {
|
|
64707
64738
|
return {
|
|
64708
64739
|
sheetId,
|
|
64709
|
-
col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1),
|
|
64710
|
-
row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1)
|
|
64740
|
+
col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1) || this.findVisibleHeader(sheetId, "COL", col, 0) || 0,
|
|
64741
|
+
row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1) || this.findVisibleHeader(sheetId, "ROW", row, 0) || 0
|
|
64711
64742
|
};
|
|
64712
64743
|
}
|
|
64713
64744
|
/**
|
|
@@ -68612,6 +68643,10 @@ var ImageProvider = class {
|
|
|
68612
68643
|
}
|
|
68613
68644
|
};
|
|
68614
68645
|
|
|
68646
|
+
//#endregion
|
|
68647
|
+
//#region src/store_engine/store_registries.ts
|
|
68648
|
+
const globalStores = new Registry();
|
|
68649
|
+
|
|
68615
68650
|
//#endregion
|
|
68616
68651
|
//#region src/components/animation/ripple.ts
|
|
68617
68652
|
const RIPPLE_KEY_FRAMES = [
|
|
@@ -71946,6 +71981,7 @@ var Spreadsheet = class extends Component {
|
|
|
71946
71981
|
this.notificationStore = useStore(NotificationStore);
|
|
71947
71982
|
this.composerFocusStore = useStore(ComposerFocusStore);
|
|
71948
71983
|
this.sidePanel = useStore(SidePanelStore);
|
|
71984
|
+
for (const store of globalStores.getAll()) useStore(store);
|
|
71949
71985
|
const fileStore = this.model.config.external.fileStore;
|
|
71950
71986
|
useSubEnv({
|
|
71951
71987
|
model: this.model,
|
|
@@ -87558,6 +87594,7 @@ const helpers = {
|
|
|
87558
87594
|
collapseHierarchicalDisplayName,
|
|
87559
87595
|
getCanonicalSymbolName,
|
|
87560
87596
|
fuzzyLookup,
|
|
87597
|
+
PositionMap,
|
|
87561
87598
|
replaceSymbolInFormula,
|
|
87562
87599
|
isSingleCellReference,
|
|
87563
87600
|
computeCachedTextDimension
|
|
@@ -87668,7 +87705,8 @@ const stores = {
|
|
|
87668
87705
|
AutofillStore,
|
|
87669
87706
|
ClientFocusStore,
|
|
87670
87707
|
GridRenderer,
|
|
87671
|
-
ViewportsStore
|
|
87708
|
+
ViewportsStore,
|
|
87709
|
+
globalStores
|
|
87672
87710
|
};
|
|
87673
87711
|
function addFunction(functionName, functionDescription) {
|
|
87674
87712
|
functionRegistry.add(functionName, functionDescription);
|
|
@@ -87694,6 +87732,6 @@ const chartHelpers = {
|
|
|
87694
87732
|
//#endregion
|
|
87695
87733
|
export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, BadExpressionError, CHART_TYPES, CellErrorType, CellValueType, CircularDependencyError, ClientDisconnectedError, ClipboardMIMEType, CommandResult, CompiledFormula, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DEFAULT_LOCALE_DIGIT_GROUPING, DIRECTION, DispatchResult, DivisionByZeroError, EvaluationError, InvalidReferenceError, LocalTransportService, Model, NEXT_VALUE, NotAvailableError, NumberTooLargeError, OrderedLayers, PREVIOUS_VALUE, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, SplillBlockedError, Spreadsheet, SpreadsheetPivotTable, UIPlugin, UnknownFunctionError, __info__, addFunction, addRenderingLayer, astToFormula, availableConditionalFormatOperators, availableDataValidationOperators, availableFiltersOperators, borderPositions, borderStyles, canExecuteInReadonly, categories, chartHelpers, compatibility, components, composerFocusTypes, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, errorTypes, filterDateCriterionOperators, filterNumberCriterionOperators, filterTextCriterionOperators, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidSubtotalFormulasCommands, invalidateBordersCommands, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isHeadersDependant, isMatrix, isPositionDependent, isRangeDependant, isSheetDependent, isTargetDependent, isZoneDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, schemeToColorScale, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
|
|
87696
87734
|
|
|
87697
|
-
__info__.version = "19.5.0-alpha.
|
|
87698
|
-
__info__.date = "2026-07-
|
|
87699
|
-
__info__.hash = "
|
|
87735
|
+
__info__.version = "19.5.0-alpha.6";
|
|
87736
|
+
__info__.date = "2026-07-23T07:49:14.543Z";
|
|
87737
|
+
__info__.hash = "192a921";
|
|
@@ -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.5.0-alpha.
|
|
6
|
-
* @date 2026-07-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.5.0-alpha.6
|
|
6
|
+
* @date 2026-07-23T07:49:14.543Z
|
|
7
|
+
* @hash 192a921
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function(exports, _odoo_owl) {
|
|
@@ -48401,7 +48401,8 @@ set(value) {
|
|
|
48401
48401
|
const { x, y } = this.state.handler ? this.state.position : this.props.position;
|
|
48402
48402
|
return cssPropertiesToCss({
|
|
48403
48403
|
top: `${y}px`,
|
|
48404
|
-
left: `${x}px
|
|
48404
|
+
left: `${x}px`,
|
|
48405
|
+
visibility: this.props.isVisible ? "visible" : "hidden"
|
|
48405
48406
|
});
|
|
48406
48407
|
}
|
|
48407
48408
|
get styleNextValue() {
|
|
@@ -48827,7 +48828,7 @@ set(value) {
|
|
|
48827
48828
|
this._cancelEdition();
|
|
48828
48829
|
this.resetContent();
|
|
48829
48830
|
}
|
|
48830
|
-
if (cmd.sheetIdFrom !== cmd.sheetIdTo) {
|
|
48831
|
+
if (this.model.selection.isListening(this) && cmd.sheetIdFrom !== cmd.sheetIdTo) {
|
|
48831
48832
|
const activePosition = this.getters.getActivePosition();
|
|
48832
48833
|
const { col, row } = this.getters.getNextVisibleCellPosition({
|
|
48833
48834
|
sheetId: cmd.sheetIdTo,
|
|
@@ -53052,6 +53053,10 @@ set(value) {
|
|
|
53052
53053
|
get displaySelectionHandler() {
|
|
53053
53054
|
return this.env.isMobile() && this.composerFocusStore.activeComposer.editionMode === "inactive";
|
|
53054
53055
|
}
|
|
53056
|
+
get clientsToDisplay() {
|
|
53057
|
+
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
53058
|
+
return this.env.model.getters.getClientsToDisplay(sheetId);
|
|
53059
|
+
}
|
|
53055
53060
|
};
|
|
53056
53061
|
|
|
53057
53062
|
//#endregion
|
|
@@ -62640,6 +62645,8 @@ set(value) {
|
|
|
62640
62645
|
pivots = {};
|
|
62641
62646
|
unusedPivotsInFormulas;
|
|
62642
62647
|
custom;
|
|
62648
|
+
pivotPositionCache = new PositionMap();
|
|
62649
|
+
shouldInvalidateCache = false;
|
|
62643
62650
|
constructor(config) {
|
|
62644
62651
|
super(config);
|
|
62645
62652
|
this.custom = config.custom;
|
|
@@ -62650,7 +62657,11 @@ set(value) {
|
|
|
62650
62657
|
}
|
|
62651
62658
|
}
|
|
62652
62659
|
handle(cmd) {
|
|
62653
|
-
if (invalidateEvaluationCommands.has(cmd.type))
|
|
62660
|
+
if (invalidateEvaluationCommands.has(cmd.type)) {
|
|
62661
|
+
this.shouldInvalidateCache = true;
|
|
62662
|
+
for (const pivotId of this.getters.getPivotIds()) this.setupPivot(pivotId, { recreate: true });
|
|
62663
|
+
}
|
|
62664
|
+
if (cmd.type === "UPDATE_CELL") this.shouldInvalidateCache = true;
|
|
62654
62665
|
switch (cmd.type) {
|
|
62655
62666
|
case "REFRESH_PIVOT":
|
|
62656
62667
|
this.refreshPivot(cmd.id);
|
|
@@ -62690,6 +62701,12 @@ set(value) {
|
|
|
62690
62701
|
break;
|
|
62691
62702
|
}
|
|
62692
62703
|
}
|
|
62704
|
+
finalize() {
|
|
62705
|
+
if (this.shouldInvalidateCache) {
|
|
62706
|
+
this.pivotPositionCache = new PositionMap();
|
|
62707
|
+
this.shouldInvalidateCache = false;
|
|
62708
|
+
}
|
|
62709
|
+
}
|
|
62693
62710
|
/**
|
|
62694
62711
|
* Get the id of the first pivot in the formula at the given position. Returns undefined if there
|
|
62695
62712
|
* is no pivot at this position
|
|
@@ -62701,9 +62718,14 @@ set(value) {
|
|
|
62701
62718
|
* Get all of the ids of the pivot present in the formula at the given position.
|
|
62702
62719
|
*/
|
|
62703
62720
|
getPivotIdsFromPosition(position) {
|
|
62704
|
-
|
|
62705
|
-
|
|
62706
|
-
|
|
62721
|
+
if (!this.pivotPositionCache.has(position)) {
|
|
62722
|
+
const cell = this.getters.getCorrespondingFormulaCell(position);
|
|
62723
|
+
if (cell && cell.isFormula) {
|
|
62724
|
+
const pivotIds = this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
|
|
62725
|
+
this.pivotPositionCache.set(position, pivotIds);
|
|
62726
|
+
}
|
|
62727
|
+
}
|
|
62728
|
+
return this.pivotPositionCache.get(position) || [];
|
|
62707
62729
|
}
|
|
62708
62730
|
getPivotIdsFromFormula(sheetId, formula) {
|
|
62709
62731
|
return this.getPivotFunctions(sheetId, formula).map((pivotFunction) => {
|
|
@@ -62951,12 +62973,22 @@ set(value) {
|
|
|
62951
62973
|
getCellTableStyle(position) {
|
|
62952
62974
|
const table = this.getters.getTable(position);
|
|
62953
62975
|
if (!table) return;
|
|
62954
|
-
|
|
62976
|
+
try {
|
|
62977
|
+
return this.tableStyles[position.sheetId][table.id]().styles[position.col]?.[position.row];
|
|
62978
|
+
} catch (e) {
|
|
62979
|
+
if (isEvaluationError(e) || e instanceof EvaluationError) return;
|
|
62980
|
+
throw e;
|
|
62981
|
+
}
|
|
62955
62982
|
}
|
|
62956
62983
|
getCellTableBorder(position) {
|
|
62957
62984
|
const table = this.getters.getTable(position);
|
|
62958
62985
|
if (!table) return;
|
|
62959
|
-
|
|
62986
|
+
try {
|
|
62987
|
+
return this.tableStyles[position.sheetId][table.id]().borders[position.col]?.[position.row];
|
|
62988
|
+
} catch (e) {
|
|
62989
|
+
if (isEvaluationError(e) || e instanceof EvaluationError) return;
|
|
62990
|
+
throw e;
|
|
62991
|
+
}
|
|
62960
62992
|
}
|
|
62961
62993
|
computeTableStyle(sheetId, table) {
|
|
62962
62994
|
return lazy(() => {
|
|
@@ -64261,14 +64293,13 @@ set(value) {
|
|
|
64261
64293
|
* Get the list of others connected clients which are present in the same sheet
|
|
64262
64294
|
* and with a valid position
|
|
64263
64295
|
*/
|
|
64264
|
-
getClientsToDisplay() {
|
|
64296
|
+
getClientsToDisplay(sheetId) {
|
|
64265
64297
|
try {
|
|
64266
64298
|
this.getters.getCurrentClient();
|
|
64267
64299
|
} catch (e) {
|
|
64268
64300
|
if (e instanceof ClientDisconnectedError) return [];
|
|
64269
64301
|
else throw e;
|
|
64270
64302
|
}
|
|
64271
|
-
const sheetId = this.getters.getActiveSheetId();
|
|
64272
64303
|
const clients = [];
|
|
64273
64304
|
for (const client of this.getters.getConnectedClients()) if (client.id !== this.getters.getCurrentClient().id && client.position && client.position.sheetId === sheetId && this.isPositionValid(client.position)) clients.push({
|
|
64274
64305
|
...client,
|
|
@@ -64279,7 +64310,7 @@ set(value) {
|
|
|
64279
64310
|
drawLayer(renderingContext) {
|
|
64280
64311
|
if (this.getters.isDashboard()) return;
|
|
64281
64312
|
const { ctx, thinLineWidth, viewports, sheetId } = renderingContext;
|
|
64282
|
-
for (const client of this.getClientsToDisplay()) {
|
|
64313
|
+
for (const client of this.getClientsToDisplay(sheetId)) {
|
|
64283
64314
|
const { row, col } = client.position;
|
|
64284
64315
|
const zone = this.getters.expandZone(sheetId, {
|
|
64285
64316
|
top: row,
|
|
@@ -64708,8 +64739,8 @@ set(value) {
|
|
|
64708
64739
|
getNextVisibleCellPosition({ sheetId, col, row }) {
|
|
64709
64740
|
return {
|
|
64710
64741
|
sheetId,
|
|
64711
|
-
col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1),
|
|
64712
|
-
row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1)
|
|
64742
|
+
col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1) || this.findVisibleHeader(sheetId, "COL", col, 0) || 0,
|
|
64743
|
+
row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1) || this.findVisibleHeader(sheetId, "ROW", row, 0) || 0
|
|
64713
64744
|
};
|
|
64714
64745
|
}
|
|
64715
64746
|
/**
|
|
@@ -68614,6 +68645,10 @@ set(value) {
|
|
|
68614
68645
|
}
|
|
68615
68646
|
};
|
|
68616
68647
|
|
|
68648
|
+
//#endregion
|
|
68649
|
+
//#region src/store_engine/store_registries.ts
|
|
68650
|
+
const globalStores = new Registry();
|
|
68651
|
+
|
|
68617
68652
|
//#endregion
|
|
68618
68653
|
//#region src/components/animation/ripple.ts
|
|
68619
68654
|
const RIPPLE_KEY_FRAMES = [
|
|
@@ -71948,6 +71983,7 @@ set(value) {
|
|
|
71948
71983
|
this.notificationStore = useStore(NotificationStore);
|
|
71949
71984
|
this.composerFocusStore = useStore(ComposerFocusStore);
|
|
71950
71985
|
this.sidePanel = useStore(SidePanelStore);
|
|
71986
|
+
for (const store of globalStores.getAll()) useStore(store);
|
|
71951
71987
|
const fileStore = this.model.config.external.fileStore;
|
|
71952
71988
|
useSubEnv({
|
|
71953
71989
|
model: this.model,
|
|
@@ -87560,6 +87596,7 @@ set(value) {
|
|
|
87560
87596
|
collapseHierarchicalDisplayName,
|
|
87561
87597
|
getCanonicalSymbolName,
|
|
87562
87598
|
fuzzyLookup,
|
|
87599
|
+
PositionMap,
|
|
87563
87600
|
replaceSymbolInFormula,
|
|
87564
87601
|
isSingleCellReference,
|
|
87565
87602
|
computeCachedTextDimension
|
|
@@ -87670,7 +87707,8 @@ set(value) {
|
|
|
87670
87707
|
AutofillStore,
|
|
87671
87708
|
ClientFocusStore,
|
|
87672
87709
|
GridRenderer,
|
|
87673
|
-
ViewportsStore
|
|
87710
|
+
ViewportsStore,
|
|
87711
|
+
globalStores
|
|
87674
87712
|
};
|
|
87675
87713
|
function addFunction(functionName, functionDescription) {
|
|
87676
87714
|
functionRegistry.add(functionName, functionDescription);
|
|
@@ -87790,8 +87828,8 @@ exports.stores = stores;
|
|
|
87790
87828
|
exports.tokenColors = tokenColors;
|
|
87791
87829
|
exports.tokenize = tokenize;
|
|
87792
87830
|
|
|
87793
|
-
__info__.version = "19.5.0-alpha.
|
|
87794
|
-
__info__.date = "2026-07-
|
|
87795
|
-
__info__.hash = "
|
|
87831
|
+
__info__.version = "19.5.0-alpha.6";
|
|
87832
|
+
__info__.date = "2026-07-23T07:49:14.543Z";
|
|
87833
|
+
__info__.hash = "192a921";
|
|
87796
87834
|
|
|
87797
87835
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|