@odoo/o-spreadsheet 19.3.12 → 19.3.14
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 +47 -23
- package/dist/o_spreadsheet.css +3 -3
- package/dist/o_spreadsheet.esm.js +47 -23
- package/dist/o_spreadsheet.iife.js +47 -23
- package/dist/o_spreadsheet.min.iife.js +239 -239
- package/dist/o_spreadsheet.xml +7 -12
- package/dist/types/components/grid/grid.d.ts +1 -0
- package/dist/types/components/helpers/dom_helpers.d.ts +2 -0
- package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_layout_configurator.d.ts +0 -2
- package/dist/types/plugins/ui_feature/collaborative.d.ts +2 -1
- 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.3.
|
|
6
|
-
* @date 2026-07-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.3.14
|
|
6
|
+
* @date 2026-07-30T06:55:43.749Z
|
|
7
|
+
* @hash 3dd5632
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
@@ -10252,7 +10252,7 @@ function getCalendarChartDatasetAndLabels(definition, args) {
|
|
|
10252
10252
|
borderWidth: 1,
|
|
10253
10253
|
barPercentage: 1,
|
|
10254
10254
|
categoryPercentage: 1,
|
|
10255
|
-
values: dataSetValues.data.map((cell) => isNumberResult(cell) ? cell.value :
|
|
10255
|
+
values: dataSetValues.data.map((cell) => isNumberResult(cell) ? cell.value : void 0)
|
|
10256
10256
|
});
|
|
10257
10257
|
return {
|
|
10258
10258
|
labels,
|
|
@@ -11822,6 +11822,19 @@ function isOtherMobileOS() {
|
|
|
11822
11822
|
function isMobileOS() {
|
|
11823
11823
|
return isAndroid() || isIOS() || isOtherMobileOS();
|
|
11824
11824
|
}
|
|
11825
|
+
const INTERACTIVE_ELEMENT_SELECTOR = "select, input, textarea, button, .o-select, .os-input, .o-input, .o-button, .o-button-icon, .o-button-link, .o-composer";
|
|
11826
|
+
/** Check if there is an interactive element (input, select, button, ...) between the event.target and event.currentTarget (inclusive)*/
|
|
11827
|
+
function hasInteractiveElementInEventTree(event) {
|
|
11828
|
+
const target = event.target;
|
|
11829
|
+
const root = event.currentTarget;
|
|
11830
|
+
if (!root || !target || !root.contains(target)) return false;
|
|
11831
|
+
let node = target;
|
|
11832
|
+
while (node && node !== root) {
|
|
11833
|
+
if (node.matches(INTERACTIVE_ELEMENT_SELECTOR)) return true;
|
|
11834
|
+
node = node.parentElement;
|
|
11835
|
+
}
|
|
11836
|
+
return root.matches(INTERACTIVE_ELEMENT_SELECTOR);
|
|
11837
|
+
}
|
|
11825
11838
|
|
|
11826
11839
|
//#endregion
|
|
11827
11840
|
//#region src/components/helpers/zoom.ts
|
|
@@ -38041,13 +38054,9 @@ var PivotLayoutConfigurator = class extends _odoo_owl.Component {
|
|
|
38041
38054
|
dimensionsRef = (0, _odoo_owl.useRef)("pivot-dimensions");
|
|
38042
38055
|
dragAndDrop = useDragAndDropListItems();
|
|
38043
38056
|
AGGREGATORS = AGGREGATORS;
|
|
38044
|
-
composerFocus;
|
|
38045
38057
|
isDateOrDatetimeField = isDateOrDatetimeField;
|
|
38046
|
-
setup() {
|
|
38047
|
-
this.composerFocus = useStore(ComposerFocusStore);
|
|
38048
|
-
}
|
|
38049
38058
|
startDragAndDrop(dimension, event) {
|
|
38050
|
-
if (event.button !== 0 || event
|
|
38059
|
+
if (event.button !== 0 || hasInteractiveElementInEventTree(event)) return;
|
|
38051
38060
|
const rects = this.getDimensionElementsRects();
|
|
38052
38061
|
const { columns, rows } = this.props.definition;
|
|
38053
38062
|
const draggableIds = [
|
|
@@ -38087,7 +38096,7 @@ var PivotLayoutConfigurator = class extends _odoo_owl.Component {
|
|
|
38087
38096
|
return field.type === "date" ? this.props.dateGranularities : this.props.datetimeGranularities;
|
|
38088
38097
|
}
|
|
38089
38098
|
startDragAndDropMeasures(measure, event) {
|
|
38090
|
-
if (event.button !== 0 || event
|
|
38099
|
+
if (event.button !== 0 || hasInteractiveElementInEventTree(event)) return;
|
|
38091
38100
|
const rects = this.getDimensionElementsRects();
|
|
38092
38101
|
const { measures, columns, rows } = this.props.definition;
|
|
38093
38102
|
const draggableIds = measures.map((m) => m.id);
|
|
@@ -44156,7 +44165,8 @@ var Autofill = class extends _odoo_owl.Component {
|
|
|
44156
44165
|
const { x, y } = this.state.handler ? this.state.position : this.props.position;
|
|
44157
44166
|
return cssPropertiesToCss({
|
|
44158
44167
|
top: `${y}px`,
|
|
44159
|
-
left: `${x}px
|
|
44168
|
+
left: `${x}px`,
|
|
44169
|
+
visibility: this.props.isVisible ? "visible" : "hidden"
|
|
44160
44170
|
});
|
|
44161
44171
|
}
|
|
44162
44172
|
get styleNextValue() {
|
|
@@ -44577,7 +44587,7 @@ var CellComposerStore = class extends AbstractComposerStore {
|
|
|
44577
44587
|
this._cancelEdition();
|
|
44578
44588
|
this.resetContent();
|
|
44579
44589
|
}
|
|
44580
|
-
if (cmd.sheetIdFrom !== cmd.sheetIdTo) {
|
|
44590
|
+
if (this.model.selection.isListening(this) && cmd.sheetIdFrom !== cmd.sheetIdTo) {
|
|
44581
44591
|
const activePosition = this.getters.getActivePosition();
|
|
44582
44592
|
const { col, row } = this.getters.getNextVisibleCellPosition({
|
|
44583
44593
|
sheetId: cmd.sheetIdTo,
|
|
@@ -48719,6 +48729,10 @@ var Grid = class extends _odoo_owl.Component {
|
|
|
48719
48729
|
get displaySelectionHandler() {
|
|
48720
48730
|
return this.env.isMobile() && this.composerFocusStore.activeComposer.editionMode === "inactive";
|
|
48721
48731
|
}
|
|
48732
|
+
get clientsToDisplay() {
|
|
48733
|
+
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
48734
|
+
return this.env.model.getters.getClientsToDisplay(sheetId);
|
|
48735
|
+
}
|
|
48722
48736
|
};
|
|
48723
48737
|
|
|
48724
48738
|
//#endregion
|
|
@@ -59894,12 +59908,22 @@ var TableComputedStylePlugin = class extends UIPlugin {
|
|
|
59894
59908
|
getCellTableStyle(position) {
|
|
59895
59909
|
const table = this.getters.getTable(position);
|
|
59896
59910
|
if (!table) return;
|
|
59897
|
-
|
|
59911
|
+
try {
|
|
59912
|
+
return this.tableStyles[position.sheetId][table.id]().styles[position.col]?.[position.row];
|
|
59913
|
+
} catch (e) {
|
|
59914
|
+
if (isEvaluationError(e) || e instanceof EvaluationError) return;
|
|
59915
|
+
throw e;
|
|
59916
|
+
}
|
|
59898
59917
|
}
|
|
59899
59918
|
getCellTableBorder(position) {
|
|
59900
59919
|
const table = this.getters.getTable(position);
|
|
59901
59920
|
if (!table) return;
|
|
59902
|
-
|
|
59921
|
+
try {
|
|
59922
|
+
return this.tableStyles[position.sheetId][table.id]().borders[position.col]?.[position.row];
|
|
59923
|
+
} catch (e) {
|
|
59924
|
+
if (isEvaluationError(e) || e instanceof EvaluationError) return;
|
|
59925
|
+
throw e;
|
|
59926
|
+
}
|
|
59903
59927
|
}
|
|
59904
59928
|
computeTableStyle(sheetId, table) {
|
|
59905
59929
|
return lazy(() => {
|
|
@@ -61242,14 +61266,13 @@ var CollaborativePlugin = class extends UIPlugin {
|
|
|
61242
61266
|
* Get the list of others connected clients which are present in the same sheet
|
|
61243
61267
|
* and with a valid position
|
|
61244
61268
|
*/
|
|
61245
|
-
getClientsToDisplay() {
|
|
61269
|
+
getClientsToDisplay(sheetId) {
|
|
61246
61270
|
try {
|
|
61247
61271
|
this.getters.getCurrentClient();
|
|
61248
61272
|
} catch (e) {
|
|
61249
61273
|
if (e instanceof ClientDisconnectedError) return [];
|
|
61250
61274
|
else throw e;
|
|
61251
61275
|
}
|
|
61252
|
-
const sheetId = this.getters.getActiveSheetId();
|
|
61253
61276
|
const clients = [];
|
|
61254
61277
|
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({
|
|
61255
61278
|
...client,
|
|
@@ -61260,7 +61283,7 @@ var CollaborativePlugin = class extends UIPlugin {
|
|
|
61260
61283
|
drawLayer(renderingContext) {
|
|
61261
61284
|
if (this.getters.isDashboard()) return;
|
|
61262
61285
|
const { ctx, thinLineWidth, viewports, sheetId } = renderingContext;
|
|
61263
|
-
for (const client of this.getClientsToDisplay()) {
|
|
61286
|
+
for (const client of this.getClientsToDisplay(sheetId)) {
|
|
61264
61287
|
const { row, col } = client.position;
|
|
61265
61288
|
const zone = this.getters.expandZone(sheetId, {
|
|
61266
61289
|
top: row,
|
|
@@ -61563,8 +61586,8 @@ var HeaderVisibilityUIPlugin = class extends UIPlugin {
|
|
|
61563
61586
|
getNextVisibleCellPosition({ sheetId, col, row }) {
|
|
61564
61587
|
return {
|
|
61565
61588
|
sheetId,
|
|
61566
|
-
col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1),
|
|
61567
|
-
row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1)
|
|
61589
|
+
col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1) || this.findVisibleHeader(sheetId, "COL", col, 0) || 0,
|
|
61590
|
+
row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1) || this.findVisibleHeader(sheetId, "ROW", row, 0) || 0
|
|
61568
61591
|
};
|
|
61569
61592
|
}
|
|
61570
61593
|
/**
|
|
@@ -62551,7 +62574,7 @@ var SheetUIPlugin = class extends UIPlugin {
|
|
|
62551
62574
|
if (contentWidth === 0) return 0;
|
|
62552
62575
|
contentWidth += 2 * 4;
|
|
62553
62576
|
if (style.wrapping === "wrap") {
|
|
62554
|
-
const colWidth = this.getters.getColSize(
|
|
62577
|
+
const colWidth = this.getters.getColSize(position.sheetId, position.col);
|
|
62555
62578
|
return Math.min(colWidth, contentWidth);
|
|
62556
62579
|
}
|
|
62557
62580
|
return contentWidth;
|
|
@@ -68238,6 +68261,7 @@ var SpreadsheetDashboard = class extends _odoo_owl.Component {
|
|
|
68238
68261
|
return (0, _odoo_owl.toRaw)(this.clickableCellsStore.clickableCells);
|
|
68239
68262
|
}
|
|
68240
68263
|
selectClickableCell(ev, clickableCell) {
|
|
68264
|
+
if (![0, 1].includes(ev.button)) return;
|
|
68241
68265
|
const { position, action } = clickableCell;
|
|
68242
68266
|
action(position, this.env, isMiddleClickOrCtrlClick(ev));
|
|
68243
68267
|
}
|
|
@@ -84837,6 +84861,6 @@ exports.stores = stores;
|
|
|
84837
84861
|
exports.tokenColors = tokenColors;
|
|
84838
84862
|
exports.tokenize = tokenize;
|
|
84839
84863
|
|
|
84840
|
-
__info__.version = "19.3.
|
|
84841
|
-
__info__.date = "2026-07-
|
|
84842
|
-
__info__.hash = "
|
|
84864
|
+
__info__.version = "19.3.14";
|
|
84865
|
+
__info__.date = "2026-07-30T06:55:43.749Z";
|
|
84866
|
+
__info__.hash = "3dd5632";
|
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.3.
|
|
6
|
-
* @date 2026-07-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.3.14
|
|
6
|
+
* @date 2026-07-30T06:55:45.398Z
|
|
7
|
+
* @hash 3dd5632
|
|
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.3.
|
|
6
|
-
* @date 2026-07-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.3.14
|
|
6
|
+
* @date 2026-07-30T06:55:43.749Z
|
|
7
|
+
* @hash 3dd5632
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { App, Component, blockDom, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, whenReady, xml } from "@odoo/owl";
|
|
@@ -10251,7 +10251,7 @@ function getCalendarChartDatasetAndLabels(definition, args) {
|
|
|
10251
10251
|
borderWidth: 1,
|
|
10252
10252
|
barPercentage: 1,
|
|
10253
10253
|
categoryPercentage: 1,
|
|
10254
|
-
values: dataSetValues.data.map((cell) => isNumberResult(cell) ? cell.value :
|
|
10254
|
+
values: dataSetValues.data.map((cell) => isNumberResult(cell) ? cell.value : void 0)
|
|
10255
10255
|
});
|
|
10256
10256
|
return {
|
|
10257
10257
|
labels,
|
|
@@ -11821,6 +11821,19 @@ function isOtherMobileOS() {
|
|
|
11821
11821
|
function isMobileOS() {
|
|
11822
11822
|
return isAndroid() || isIOS() || isOtherMobileOS();
|
|
11823
11823
|
}
|
|
11824
|
+
const INTERACTIVE_ELEMENT_SELECTOR = "select, input, textarea, button, .o-select, .os-input, .o-input, .o-button, .o-button-icon, .o-button-link, .o-composer";
|
|
11825
|
+
/** Check if there is an interactive element (input, select, button, ...) between the event.target and event.currentTarget (inclusive)*/
|
|
11826
|
+
function hasInteractiveElementInEventTree(event) {
|
|
11827
|
+
const target = event.target;
|
|
11828
|
+
const root = event.currentTarget;
|
|
11829
|
+
if (!root || !target || !root.contains(target)) return false;
|
|
11830
|
+
let node = target;
|
|
11831
|
+
while (node && node !== root) {
|
|
11832
|
+
if (node.matches(INTERACTIVE_ELEMENT_SELECTOR)) return true;
|
|
11833
|
+
node = node.parentElement;
|
|
11834
|
+
}
|
|
11835
|
+
return root.matches(INTERACTIVE_ELEMENT_SELECTOR);
|
|
11836
|
+
}
|
|
11824
11837
|
|
|
11825
11838
|
//#endregion
|
|
11826
11839
|
//#region src/components/helpers/zoom.ts
|
|
@@ -38040,13 +38053,9 @@ var PivotLayoutConfigurator = class extends Component {
|
|
|
38040
38053
|
dimensionsRef = useRef("pivot-dimensions");
|
|
38041
38054
|
dragAndDrop = useDragAndDropListItems();
|
|
38042
38055
|
AGGREGATORS = AGGREGATORS;
|
|
38043
|
-
composerFocus;
|
|
38044
38056
|
isDateOrDatetimeField = isDateOrDatetimeField;
|
|
38045
|
-
setup() {
|
|
38046
|
-
this.composerFocus = useStore(ComposerFocusStore);
|
|
38047
|
-
}
|
|
38048
38057
|
startDragAndDrop(dimension, event) {
|
|
38049
|
-
if (event.button !== 0 || event
|
|
38058
|
+
if (event.button !== 0 || hasInteractiveElementInEventTree(event)) return;
|
|
38050
38059
|
const rects = this.getDimensionElementsRects();
|
|
38051
38060
|
const { columns, rows } = this.props.definition;
|
|
38052
38061
|
const draggableIds = [
|
|
@@ -38086,7 +38095,7 @@ var PivotLayoutConfigurator = class extends Component {
|
|
|
38086
38095
|
return field.type === "date" ? this.props.dateGranularities : this.props.datetimeGranularities;
|
|
38087
38096
|
}
|
|
38088
38097
|
startDragAndDropMeasures(measure, event) {
|
|
38089
|
-
if (event.button !== 0 || event
|
|
38098
|
+
if (event.button !== 0 || hasInteractiveElementInEventTree(event)) return;
|
|
38090
38099
|
const rects = this.getDimensionElementsRects();
|
|
38091
38100
|
const { measures, columns, rows } = this.props.definition;
|
|
38092
38101
|
const draggableIds = measures.map((m) => m.id);
|
|
@@ -44155,7 +44164,8 @@ var Autofill = class extends Component {
|
|
|
44155
44164
|
const { x, y } = this.state.handler ? this.state.position : this.props.position;
|
|
44156
44165
|
return cssPropertiesToCss({
|
|
44157
44166
|
top: `${y}px`,
|
|
44158
|
-
left: `${x}px
|
|
44167
|
+
left: `${x}px`,
|
|
44168
|
+
visibility: this.props.isVisible ? "visible" : "hidden"
|
|
44159
44169
|
});
|
|
44160
44170
|
}
|
|
44161
44171
|
get styleNextValue() {
|
|
@@ -44576,7 +44586,7 @@ var CellComposerStore = class extends AbstractComposerStore {
|
|
|
44576
44586
|
this._cancelEdition();
|
|
44577
44587
|
this.resetContent();
|
|
44578
44588
|
}
|
|
44579
|
-
if (cmd.sheetIdFrom !== cmd.sheetIdTo) {
|
|
44589
|
+
if (this.model.selection.isListening(this) && cmd.sheetIdFrom !== cmd.sheetIdTo) {
|
|
44580
44590
|
const activePosition = this.getters.getActivePosition();
|
|
44581
44591
|
const { col, row } = this.getters.getNextVisibleCellPosition({
|
|
44582
44592
|
sheetId: cmd.sheetIdTo,
|
|
@@ -48718,6 +48728,10 @@ var Grid = class extends Component {
|
|
|
48718
48728
|
get displaySelectionHandler() {
|
|
48719
48729
|
return this.env.isMobile() && this.composerFocusStore.activeComposer.editionMode === "inactive";
|
|
48720
48730
|
}
|
|
48731
|
+
get clientsToDisplay() {
|
|
48732
|
+
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
48733
|
+
return this.env.model.getters.getClientsToDisplay(sheetId);
|
|
48734
|
+
}
|
|
48721
48735
|
};
|
|
48722
48736
|
|
|
48723
48737
|
//#endregion
|
|
@@ -59709,12 +59723,22 @@ var TableComputedStylePlugin = class extends UIPlugin {
|
|
|
59709
59723
|
getCellTableStyle(position) {
|
|
59710
59724
|
const table = this.getters.getTable(position);
|
|
59711
59725
|
if (!table) return;
|
|
59712
|
-
|
|
59726
|
+
try {
|
|
59727
|
+
return this.tableStyles[position.sheetId][table.id]().styles[position.col]?.[position.row];
|
|
59728
|
+
} catch (e) {
|
|
59729
|
+
if (isEvaluationError(e) || e instanceof EvaluationError) return;
|
|
59730
|
+
throw e;
|
|
59731
|
+
}
|
|
59713
59732
|
}
|
|
59714
59733
|
getCellTableBorder(position) {
|
|
59715
59734
|
const table = this.getters.getTable(position);
|
|
59716
59735
|
if (!table) return;
|
|
59717
|
-
|
|
59736
|
+
try {
|
|
59737
|
+
return this.tableStyles[position.sheetId][table.id]().borders[position.col]?.[position.row];
|
|
59738
|
+
} catch (e) {
|
|
59739
|
+
if (isEvaluationError(e) || e instanceof EvaluationError) return;
|
|
59740
|
+
throw e;
|
|
59741
|
+
}
|
|
59718
59742
|
}
|
|
59719
59743
|
computeTableStyle(sheetId, table) {
|
|
59720
59744
|
return lazy(() => {
|
|
@@ -61057,14 +61081,13 @@ var CollaborativePlugin = class extends UIPlugin {
|
|
|
61057
61081
|
* Get the list of others connected clients which are present in the same sheet
|
|
61058
61082
|
* and with a valid position
|
|
61059
61083
|
*/
|
|
61060
|
-
getClientsToDisplay() {
|
|
61084
|
+
getClientsToDisplay(sheetId) {
|
|
61061
61085
|
try {
|
|
61062
61086
|
this.getters.getCurrentClient();
|
|
61063
61087
|
} catch (e) {
|
|
61064
61088
|
if (e instanceof ClientDisconnectedError) return [];
|
|
61065
61089
|
else throw e;
|
|
61066
61090
|
}
|
|
61067
|
-
const sheetId = this.getters.getActiveSheetId();
|
|
61068
61091
|
const clients = [];
|
|
61069
61092
|
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({
|
|
61070
61093
|
...client,
|
|
@@ -61075,7 +61098,7 @@ var CollaborativePlugin = class extends UIPlugin {
|
|
|
61075
61098
|
drawLayer(renderingContext) {
|
|
61076
61099
|
if (this.getters.isDashboard()) return;
|
|
61077
61100
|
const { ctx, thinLineWidth, viewports, sheetId } = renderingContext;
|
|
61078
|
-
for (const client of this.getClientsToDisplay()) {
|
|
61101
|
+
for (const client of this.getClientsToDisplay(sheetId)) {
|
|
61079
61102
|
const { row, col } = client.position;
|
|
61080
61103
|
const zone = this.getters.expandZone(sheetId, {
|
|
61081
61104
|
top: row,
|
|
@@ -61378,8 +61401,8 @@ var HeaderVisibilityUIPlugin = class extends UIPlugin {
|
|
|
61378
61401
|
getNextVisibleCellPosition({ sheetId, col, row }) {
|
|
61379
61402
|
return {
|
|
61380
61403
|
sheetId,
|
|
61381
|
-
col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1),
|
|
61382
|
-
row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1)
|
|
61404
|
+
col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1) || this.findVisibleHeader(sheetId, "COL", col, 0) || 0,
|
|
61405
|
+
row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1) || this.findVisibleHeader(sheetId, "ROW", row, 0) || 0
|
|
61383
61406
|
};
|
|
61384
61407
|
}
|
|
61385
61408
|
/**
|
|
@@ -62366,7 +62389,7 @@ var SheetUIPlugin = class extends UIPlugin {
|
|
|
62366
62389
|
if (contentWidth === 0) return 0;
|
|
62367
62390
|
contentWidth += 2 * 4;
|
|
62368
62391
|
if (style.wrapping === "wrap") {
|
|
62369
|
-
const colWidth = this.getters.getColSize(
|
|
62392
|
+
const colWidth = this.getters.getColSize(position.sheetId, position.col);
|
|
62370
62393
|
return Math.min(colWidth, contentWidth);
|
|
62371
62394
|
}
|
|
62372
62395
|
return contentWidth;
|
|
@@ -68053,6 +68076,7 @@ var SpreadsheetDashboard = class extends Component {
|
|
|
68053
68076
|
return toRaw(this.clickableCellsStore.clickableCells);
|
|
68054
68077
|
}
|
|
68055
68078
|
selectClickableCell(ev, clickableCell) {
|
|
68079
|
+
if (![0, 1].includes(ev.button)) return;
|
|
68056
68080
|
const { position, action } = clickableCell;
|
|
68057
68081
|
action(position, this.env, isMiddleClickOrCtrlClick(ev));
|
|
68058
68082
|
}
|
|
@@ -84594,6 +84618,6 @@ const chartHelpers = {
|
|
|
84594
84618
|
//#endregion
|
|
84595
84619
|
export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CompiledFormula, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DispatchResult, EvaluationError, LocalTransportService, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, canExecuteInReadonly, categories, chartHelpers, components, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isSheetDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
|
|
84596
84620
|
|
|
84597
|
-
__info__.version = "19.3.
|
|
84598
|
-
__info__.date = "2026-07-
|
|
84599
|
-
__info__.hash = "
|
|
84621
|
+
__info__.version = "19.3.14";
|
|
84622
|
+
__info__.date = "2026-07-30T06:55:43.749Z";
|
|
84623
|
+
__info__.hash = "3dd5632";
|
|
@@ -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-07-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.3.14
|
|
6
|
+
* @date 2026-07-30T06:55:43.749Z
|
|
7
|
+
* @hash 3dd5632
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function(exports, _odoo_owl) {
|
|
@@ -10253,7 +10253,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
10253
10253
|
borderWidth: 1,
|
|
10254
10254
|
barPercentage: 1,
|
|
10255
10255
|
categoryPercentage: 1,
|
|
10256
|
-
values: dataSetValues.data.map((cell) => isNumberResult(cell) ? cell.value :
|
|
10256
|
+
values: dataSetValues.data.map((cell) => isNumberResult(cell) ? cell.value : void 0)
|
|
10257
10257
|
});
|
|
10258
10258
|
return {
|
|
10259
10259
|
labels,
|
|
@@ -11823,6 +11823,19 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
11823
11823
|
function isMobileOS() {
|
|
11824
11824
|
return isAndroid() || isIOS() || isOtherMobileOS();
|
|
11825
11825
|
}
|
|
11826
|
+
const INTERACTIVE_ELEMENT_SELECTOR = "select, input, textarea, button, .o-select, .os-input, .o-input, .o-button, .o-button-icon, .o-button-link, .o-composer";
|
|
11827
|
+
/** Check if there is an interactive element (input, select, button, ...) between the event.target and event.currentTarget (inclusive)*/
|
|
11828
|
+
function hasInteractiveElementInEventTree(event) {
|
|
11829
|
+
const target = event.target;
|
|
11830
|
+
const root = event.currentTarget;
|
|
11831
|
+
if (!root || !target || !root.contains(target)) return false;
|
|
11832
|
+
let node = target;
|
|
11833
|
+
while (node && node !== root) {
|
|
11834
|
+
if (node.matches(INTERACTIVE_ELEMENT_SELECTOR)) return true;
|
|
11835
|
+
node = node.parentElement;
|
|
11836
|
+
}
|
|
11837
|
+
return root.matches(INTERACTIVE_ELEMENT_SELECTOR);
|
|
11838
|
+
}
|
|
11826
11839
|
|
|
11827
11840
|
//#endregion
|
|
11828
11841
|
//#region src/components/helpers/zoom.ts
|
|
@@ -38042,13 +38055,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
38042
38055
|
dimensionsRef = (0, _odoo_owl.useRef)("pivot-dimensions");
|
|
38043
38056
|
dragAndDrop = useDragAndDropListItems();
|
|
38044
38057
|
AGGREGATORS = AGGREGATORS;
|
|
38045
|
-
composerFocus;
|
|
38046
38058
|
isDateOrDatetimeField = isDateOrDatetimeField;
|
|
38047
|
-
setup() {
|
|
38048
|
-
this.composerFocus = useStore(ComposerFocusStore);
|
|
38049
|
-
}
|
|
38050
38059
|
startDragAndDrop(dimension, event) {
|
|
38051
|
-
if (event.button !== 0 || event
|
|
38060
|
+
if (event.button !== 0 || hasInteractiveElementInEventTree(event)) return;
|
|
38052
38061
|
const rects = this.getDimensionElementsRects();
|
|
38053
38062
|
const { columns, rows } = this.props.definition;
|
|
38054
38063
|
const draggableIds = [
|
|
@@ -38088,7 +38097,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
38088
38097
|
return field.type === "date" ? this.props.dateGranularities : this.props.datetimeGranularities;
|
|
38089
38098
|
}
|
|
38090
38099
|
startDragAndDropMeasures(measure, event) {
|
|
38091
|
-
if (event.button !== 0 || event
|
|
38100
|
+
if (event.button !== 0 || hasInteractiveElementInEventTree(event)) return;
|
|
38092
38101
|
const rects = this.getDimensionElementsRects();
|
|
38093
38102
|
const { measures, columns, rows } = this.props.definition;
|
|
38094
38103
|
const draggableIds = measures.map((m) => m.id);
|
|
@@ -44157,7 +44166,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
44157
44166
|
const { x, y } = this.state.handler ? this.state.position : this.props.position;
|
|
44158
44167
|
return cssPropertiesToCss({
|
|
44159
44168
|
top: `${y}px`,
|
|
44160
|
-
left: `${x}px
|
|
44169
|
+
left: `${x}px`,
|
|
44170
|
+
visibility: this.props.isVisible ? "visible" : "hidden"
|
|
44161
44171
|
});
|
|
44162
44172
|
}
|
|
44163
44173
|
get styleNextValue() {
|
|
@@ -44578,7 +44588,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
44578
44588
|
this._cancelEdition();
|
|
44579
44589
|
this.resetContent();
|
|
44580
44590
|
}
|
|
44581
|
-
if (cmd.sheetIdFrom !== cmd.sheetIdTo) {
|
|
44591
|
+
if (this.model.selection.isListening(this) && cmd.sheetIdFrom !== cmd.sheetIdTo) {
|
|
44582
44592
|
const activePosition = this.getters.getActivePosition();
|
|
44583
44593
|
const { col, row } = this.getters.getNextVisibleCellPosition({
|
|
44584
44594
|
sheetId: cmd.sheetIdTo,
|
|
@@ -48720,6 +48730,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
48720
48730
|
get displaySelectionHandler() {
|
|
48721
48731
|
return this.env.isMobile() && this.composerFocusStore.activeComposer.editionMode === "inactive";
|
|
48722
48732
|
}
|
|
48733
|
+
get clientsToDisplay() {
|
|
48734
|
+
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
48735
|
+
return this.env.model.getters.getClientsToDisplay(sheetId);
|
|
48736
|
+
}
|
|
48723
48737
|
};
|
|
48724
48738
|
|
|
48725
48739
|
//#endregion
|
|
@@ -59711,12 +59725,22 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
59711
59725
|
getCellTableStyle(position) {
|
|
59712
59726
|
const table = this.getters.getTable(position);
|
|
59713
59727
|
if (!table) return;
|
|
59714
|
-
|
|
59728
|
+
try {
|
|
59729
|
+
return this.tableStyles[position.sheetId][table.id]().styles[position.col]?.[position.row];
|
|
59730
|
+
} catch (e) {
|
|
59731
|
+
if (isEvaluationError(e) || e instanceof EvaluationError) return;
|
|
59732
|
+
throw e;
|
|
59733
|
+
}
|
|
59715
59734
|
}
|
|
59716
59735
|
getCellTableBorder(position) {
|
|
59717
59736
|
const table = this.getters.getTable(position);
|
|
59718
59737
|
if (!table) return;
|
|
59719
|
-
|
|
59738
|
+
try {
|
|
59739
|
+
return this.tableStyles[position.sheetId][table.id]().borders[position.col]?.[position.row];
|
|
59740
|
+
} catch (e) {
|
|
59741
|
+
if (isEvaluationError(e) || e instanceof EvaluationError) return;
|
|
59742
|
+
throw e;
|
|
59743
|
+
}
|
|
59720
59744
|
}
|
|
59721
59745
|
computeTableStyle(sheetId, table) {
|
|
59722
59746
|
return lazy(() => {
|
|
@@ -61059,14 +61083,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
61059
61083
|
* Get the list of others connected clients which are present in the same sheet
|
|
61060
61084
|
* and with a valid position
|
|
61061
61085
|
*/
|
|
61062
|
-
getClientsToDisplay() {
|
|
61086
|
+
getClientsToDisplay(sheetId) {
|
|
61063
61087
|
try {
|
|
61064
61088
|
this.getters.getCurrentClient();
|
|
61065
61089
|
} catch (e) {
|
|
61066
61090
|
if (e instanceof ClientDisconnectedError) return [];
|
|
61067
61091
|
else throw e;
|
|
61068
61092
|
}
|
|
61069
|
-
const sheetId = this.getters.getActiveSheetId();
|
|
61070
61093
|
const clients = [];
|
|
61071
61094
|
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({
|
|
61072
61095
|
...client,
|
|
@@ -61077,7 +61100,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
61077
61100
|
drawLayer(renderingContext) {
|
|
61078
61101
|
if (this.getters.isDashboard()) return;
|
|
61079
61102
|
const { ctx, thinLineWidth, viewports, sheetId } = renderingContext;
|
|
61080
|
-
for (const client of this.getClientsToDisplay()) {
|
|
61103
|
+
for (const client of this.getClientsToDisplay(sheetId)) {
|
|
61081
61104
|
const { row, col } = client.position;
|
|
61082
61105
|
const zone = this.getters.expandZone(sheetId, {
|
|
61083
61106
|
top: row,
|
|
@@ -61380,8 +61403,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
61380
61403
|
getNextVisibleCellPosition({ sheetId, col, row }) {
|
|
61381
61404
|
return {
|
|
61382
61405
|
sheetId,
|
|
61383
|
-
col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1),
|
|
61384
|
-
row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1)
|
|
61406
|
+
col: this.findVisibleHeader(sheetId, "COL", col, this.getters.getNumberCols(sheetId) - 1) || this.findVisibleHeader(sheetId, "COL", col, 0) || 0,
|
|
61407
|
+
row: this.findVisibleHeader(sheetId, "ROW", row, this.getters.getNumberRows(sheetId) - 1) || this.findVisibleHeader(sheetId, "ROW", row, 0) || 0
|
|
61385
61408
|
};
|
|
61386
61409
|
}
|
|
61387
61410
|
/**
|
|
@@ -62368,7 +62391,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
62368
62391
|
if (contentWidth === 0) return 0;
|
|
62369
62392
|
contentWidth += 2 * 4;
|
|
62370
62393
|
if (style.wrapping === "wrap") {
|
|
62371
|
-
const colWidth = this.getters.getColSize(
|
|
62394
|
+
const colWidth = this.getters.getColSize(position.sheetId, position.col);
|
|
62372
62395
|
return Math.min(colWidth, contentWidth);
|
|
62373
62396
|
}
|
|
62374
62397
|
return contentWidth;
|
|
@@ -68055,6 +68078,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
68055
68078
|
return (0, _odoo_owl.toRaw)(this.clickableCellsStore.clickableCells);
|
|
68056
68079
|
}
|
|
68057
68080
|
selectClickableCell(ev, clickableCell) {
|
|
68081
|
+
if (![0, 1].includes(ev.button)) return;
|
|
68058
68082
|
const { position, action } = clickableCell;
|
|
68059
68083
|
action(position, this.env, isMiddleClickOrCtrlClick(ev));
|
|
68060
68084
|
}
|
|
@@ -84654,8 +84678,8 @@ exports.stores = stores;
|
|
|
84654
84678
|
exports.tokenColors = tokenColors;
|
|
84655
84679
|
exports.tokenize = tokenize;
|
|
84656
84680
|
|
|
84657
|
-
__info__.version = "19.3.
|
|
84658
|
-
__info__.date = "2026-07-
|
|
84659
|
-
__info__.hash = "
|
|
84681
|
+
__info__.version = "19.3.14";
|
|
84682
|
+
__info__.date = "2026-07-30T06:55:43.749Z";
|
|
84683
|
+
__info__.hash = "3dd5632";
|
|
84660
84684
|
|
|
84661
84685
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|