@odoo/o-spreadsheet 17.4.1 → 17.4.3
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 +133 -108
- package/dist/o-spreadsheet.d.ts +1 -0
- package/dist/o-spreadsheet.esm.js +133 -108
- package/dist/o-spreadsheet.iife.js +133 -108
- package/dist/o-spreadsheet.iife.min.js +344 -334
- package/dist/o_spreadsheet.xml +10 -7
- package/package.json +5 -8
|
@@ -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 17.4.
|
|
6
|
-
* @date 2024-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 17.4.3
|
|
6
|
+
* @date 2024-08-02T08:23:56.573Z
|
|
7
|
+
* @hash 40ecd1e
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function (exports, owl) {
|
|
@@ -2766,13 +2766,16 @@
|
|
|
2766
2766
|
}
|
|
2767
2767
|
return new RegExp("^" + exp + "$", "i");
|
|
2768
2768
|
});
|
|
2769
|
-
function evaluatePredicate(value = "", criterion) {
|
|
2769
|
+
function evaluatePredicate(value = "", criterion, locale) {
|
|
2770
2770
|
const { operator, operand } = criterion;
|
|
2771
2771
|
if (operand === undefined || value === null || operand === null) {
|
|
2772
2772
|
return false;
|
|
2773
2773
|
}
|
|
2774
2774
|
if (typeof operand === "number" && operator === "=") {
|
|
2775
|
-
|
|
2775
|
+
if (typeof value === "string" && (isNumber(value, locale) || isDateTime(value, locale))) {
|
|
2776
|
+
return toNumber(value, locale) === operand;
|
|
2777
|
+
}
|
|
2778
|
+
return value === operand;
|
|
2776
2779
|
}
|
|
2777
2780
|
if (operator === "<>" || operator === "=") {
|
|
2778
2781
|
let result;
|
|
@@ -2854,7 +2857,7 @@
|
|
|
2854
2857
|
for (let k = 0; k < countArg - 1; k += 2) {
|
|
2855
2858
|
const criteriaValue = toMatrix(args[k])[i][j].value;
|
|
2856
2859
|
const criterion = predicates[k / 2];
|
|
2857
|
-
validatedPredicates = evaluatePredicate(criteriaValue ?? undefined, criterion);
|
|
2860
|
+
validatedPredicates = evaluatePredicate(criteriaValue ?? undefined, criterion, locale);
|
|
2858
2861
|
if (!validatedPredicates) {
|
|
2859
2862
|
break;
|
|
2860
2863
|
}
|
|
@@ -6545,6 +6548,9 @@
|
|
|
6545
6548
|
const groupValueString = typeof groupValue === "boolean"
|
|
6546
6549
|
? toString(groupValue).toLocaleLowerCase()
|
|
6547
6550
|
: toString(groupValue);
|
|
6551
|
+
if (groupValueString === "null") {
|
|
6552
|
+
return null;
|
|
6553
|
+
}
|
|
6548
6554
|
if (!pivotNormalizationValueRegistry.contains(dimension.type)) {
|
|
6549
6555
|
throw new EvaluationError(_t("Field %(field)s is not supported because of its type (%(type)s)", {
|
|
6550
6556
|
field: dimension.displayName,
|
|
@@ -6565,6 +6571,9 @@
|
|
|
6565
6571
|
return pivotTimeAdapter(granularity).normalizeFunctionValue(value);
|
|
6566
6572
|
}
|
|
6567
6573
|
function toFunctionPivotValue(value, dimension) {
|
|
6574
|
+
if (value === null) {
|
|
6575
|
+
return `"null"`;
|
|
6576
|
+
}
|
|
6568
6577
|
if (!pivotToFunctionValueRegistry.contains(dimension.type)) {
|
|
6569
6578
|
return `"${value}"`;
|
|
6570
6579
|
}
|
|
@@ -20780,6 +20789,78 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
20780
20789
|
return isMacOS() ? ev.metaKey : ev.ctrlKey;
|
|
20781
20790
|
}
|
|
20782
20791
|
|
|
20792
|
+
/**
|
|
20793
|
+
* Return the o-spreadsheet element position relative
|
|
20794
|
+
* to the browser viewport.
|
|
20795
|
+
*/
|
|
20796
|
+
function useSpreadsheetRect() {
|
|
20797
|
+
const position = owl.useState({ x: 0, y: 0, width: 0, height: 0 });
|
|
20798
|
+
let spreadsheetElement = null;
|
|
20799
|
+
function updatePosition() {
|
|
20800
|
+
if (!spreadsheetElement) {
|
|
20801
|
+
spreadsheetElement = document.querySelector(".o-spreadsheet");
|
|
20802
|
+
}
|
|
20803
|
+
if (spreadsheetElement) {
|
|
20804
|
+
const { top, left, width, height } = spreadsheetElement.getBoundingClientRect();
|
|
20805
|
+
position.x = left;
|
|
20806
|
+
position.y = top;
|
|
20807
|
+
position.width = width;
|
|
20808
|
+
position.height = height;
|
|
20809
|
+
}
|
|
20810
|
+
}
|
|
20811
|
+
owl.onMounted(updatePosition);
|
|
20812
|
+
owl.onPatched(updatePosition);
|
|
20813
|
+
return position;
|
|
20814
|
+
}
|
|
20815
|
+
/**
|
|
20816
|
+
* Return the component (or ref's component) BoundingRect, relative
|
|
20817
|
+
* to the upper left corner of the screen (<body> element).
|
|
20818
|
+
*
|
|
20819
|
+
* Note: when used with a <Portal/> component, it will
|
|
20820
|
+
* return the portal position, not the teleported position.
|
|
20821
|
+
*/
|
|
20822
|
+
function useAbsoluteBoundingRect(ref) {
|
|
20823
|
+
const rect = owl.useState({ x: 0, y: 0, width: 0, height: 0 });
|
|
20824
|
+
function updateElRect() {
|
|
20825
|
+
const el = ref.el;
|
|
20826
|
+
if (el === null) {
|
|
20827
|
+
return;
|
|
20828
|
+
}
|
|
20829
|
+
const { top, left, width, height } = el.getBoundingClientRect();
|
|
20830
|
+
rect.x = left;
|
|
20831
|
+
rect.y = top;
|
|
20832
|
+
rect.width = width;
|
|
20833
|
+
rect.height = height;
|
|
20834
|
+
}
|
|
20835
|
+
owl.onMounted(updateElRect);
|
|
20836
|
+
owl.onPatched(updateElRect);
|
|
20837
|
+
return rect;
|
|
20838
|
+
}
|
|
20839
|
+
/**
|
|
20840
|
+
* Get the rectangle inside which a popover should stay when being displayed.
|
|
20841
|
+
* It's the value defined in `env.getPopoverContainerRect`, or the Rect of the "o-spreadsheet"
|
|
20842
|
+
* element by default.
|
|
20843
|
+
*
|
|
20844
|
+
* Coordinates are expressed expressed as absolute DOM position.
|
|
20845
|
+
*/
|
|
20846
|
+
function usePopoverContainer() {
|
|
20847
|
+
const container = owl.useState({ x: 0, y: 0, width: 0, height: 0 });
|
|
20848
|
+
const component = owl.useComponent();
|
|
20849
|
+
const spreadsheetRect = useSpreadsheetRect();
|
|
20850
|
+
function updateRect() {
|
|
20851
|
+
const env = component.env;
|
|
20852
|
+
const newRect = "getPopoverContainerRect" in env ? env.getPopoverContainerRect() : spreadsheetRect;
|
|
20853
|
+
container.x = newRect.x;
|
|
20854
|
+
container.y = newRect.y;
|
|
20855
|
+
container.width = newRect.width;
|
|
20856
|
+
container.height = newRect.height;
|
|
20857
|
+
}
|
|
20858
|
+
updateRect();
|
|
20859
|
+
owl.onMounted(updateRect);
|
|
20860
|
+
owl.onPatched(updateRect);
|
|
20861
|
+
return container;
|
|
20862
|
+
}
|
|
20863
|
+
|
|
20783
20864
|
const arrowMap = {
|
|
20784
20865
|
ArrowDown: "down",
|
|
20785
20866
|
ArrowLeft: "left",
|
|
@@ -21369,7 +21450,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
21369
21450
|
argToFocus: 0,
|
|
21370
21451
|
});
|
|
21371
21452
|
compositionActive = false;
|
|
21453
|
+
spreadsheetRect = useSpreadsheetRect();
|
|
21372
21454
|
get assistantStyle() {
|
|
21455
|
+
const composerRect = this.composerRef.el.getBoundingClientRect();
|
|
21373
21456
|
const assistantStyle = {};
|
|
21374
21457
|
assistantStyle["min-width"] = `${this.props.rect?.width || ASSISTANT_WIDTH}px`;
|
|
21375
21458
|
const proposals = this.autoCompleteState.provider?.proposals;
|
|
@@ -21396,6 +21479,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
21396
21479
|
}
|
|
21397
21480
|
else if (this.props.delimitation) {
|
|
21398
21481
|
assistantStyle["max-height"] = `${this.props.delimitation.height}px`;
|
|
21482
|
+
if (composerRect.left + ASSISTANT_WIDTH > this.spreadsheetRect.width) {
|
|
21483
|
+
assistantStyle.right = `0px`;
|
|
21484
|
+
}
|
|
21399
21485
|
}
|
|
21400
21486
|
return cssPropertiesToCss(assistantStyle);
|
|
21401
21487
|
}
|
|
@@ -26238,78 +26324,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
26238
26324
|
};
|
|
26239
26325
|
}
|
|
26240
26326
|
|
|
26241
|
-
/**
|
|
26242
|
-
* Return the o-spreadsheet element position relative
|
|
26243
|
-
* to the browser viewport.
|
|
26244
|
-
*/
|
|
26245
|
-
function useSpreadsheetRect() {
|
|
26246
|
-
const position = owl.useState({ x: 0, y: 0, width: 0, height: 0 });
|
|
26247
|
-
let spreadsheetElement = null;
|
|
26248
|
-
function updatePosition() {
|
|
26249
|
-
if (!spreadsheetElement) {
|
|
26250
|
-
spreadsheetElement = document.querySelector(".o-spreadsheet");
|
|
26251
|
-
}
|
|
26252
|
-
if (spreadsheetElement) {
|
|
26253
|
-
const { top, left, width, height } = spreadsheetElement.getBoundingClientRect();
|
|
26254
|
-
position.x = left;
|
|
26255
|
-
position.y = top;
|
|
26256
|
-
position.width = width;
|
|
26257
|
-
position.height = height;
|
|
26258
|
-
}
|
|
26259
|
-
}
|
|
26260
|
-
owl.onMounted(updatePosition);
|
|
26261
|
-
owl.onPatched(updatePosition);
|
|
26262
|
-
return position;
|
|
26263
|
-
}
|
|
26264
|
-
/**
|
|
26265
|
-
* Return the component (or ref's component) BoundingRect, relative
|
|
26266
|
-
* to the upper left corner of the screen (<body> element).
|
|
26267
|
-
*
|
|
26268
|
-
* Note: when used with a <Portal/> component, it will
|
|
26269
|
-
* return the portal position, not the teleported position.
|
|
26270
|
-
*/
|
|
26271
|
-
function useAbsoluteBoundingRect(ref) {
|
|
26272
|
-
const rect = owl.useState({ x: 0, y: 0, width: 0, height: 0 });
|
|
26273
|
-
function updateElRect() {
|
|
26274
|
-
const el = ref.el;
|
|
26275
|
-
if (el === null) {
|
|
26276
|
-
return;
|
|
26277
|
-
}
|
|
26278
|
-
const { top, left, width, height } = el.getBoundingClientRect();
|
|
26279
|
-
rect.x = left;
|
|
26280
|
-
rect.y = top;
|
|
26281
|
-
rect.width = width;
|
|
26282
|
-
rect.height = height;
|
|
26283
|
-
}
|
|
26284
|
-
owl.onMounted(updateElRect);
|
|
26285
|
-
owl.onPatched(updateElRect);
|
|
26286
|
-
return rect;
|
|
26287
|
-
}
|
|
26288
|
-
/**
|
|
26289
|
-
* Get the rectangle inside which a popover should stay when being displayed.
|
|
26290
|
-
* It's the value defined in `env.getPopoverContainerRect`, or the Rect of the "o-spreadsheet"
|
|
26291
|
-
* element by default.
|
|
26292
|
-
*
|
|
26293
|
-
* Coordinates are expressed expressed as absolute DOM position.
|
|
26294
|
-
*/
|
|
26295
|
-
function usePopoverContainer() {
|
|
26296
|
-
const container = owl.useState({ x: 0, y: 0, width: 0, height: 0 });
|
|
26297
|
-
const component = owl.useComponent();
|
|
26298
|
-
const spreadsheetRect = useSpreadsheetRect();
|
|
26299
|
-
function updateRect() {
|
|
26300
|
-
const env = component.env;
|
|
26301
|
-
const newRect = "getPopoverContainerRect" in env ? env.getPopoverContainerRect() : spreadsheetRect;
|
|
26302
|
-
container.x = newRect.x;
|
|
26303
|
-
container.y = newRect.y;
|
|
26304
|
-
container.width = newRect.width;
|
|
26305
|
-
container.height = newRect.height;
|
|
26306
|
-
}
|
|
26307
|
-
updateRect();
|
|
26308
|
-
owl.onMounted(updateRect);
|
|
26309
|
-
owl.onPatched(updateRect);
|
|
26310
|
-
return container;
|
|
26311
|
-
}
|
|
26312
|
-
|
|
26313
26327
|
css /* scss */ `
|
|
26314
26328
|
.o-popover {
|
|
26315
26329
|
position: absolute;
|
|
@@ -35808,6 +35822,14 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
35808
35822
|
.pivot-dim-operator-label {
|
|
35809
35823
|
min-width: 120px;
|
|
35810
35824
|
}
|
|
35825
|
+
|
|
35826
|
+
&.pivot-dimension-invalid {
|
|
35827
|
+
background-color: #ffdddd;
|
|
35828
|
+
border-color: red !important;
|
|
35829
|
+
select {
|
|
35830
|
+
background-color: #ffdddd;
|
|
35831
|
+
}
|
|
35832
|
+
}
|
|
35811
35833
|
}
|
|
35812
35834
|
`;
|
|
35813
35835
|
class PivotDimension extends owl.Component {
|
|
@@ -35870,6 +35892,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
35870
35892
|
"__rows_title__",
|
|
35871
35893
|
...rows.map((row) => row.nameWithGranularity),
|
|
35872
35894
|
];
|
|
35895
|
+
const allDimensions = columns.concat(rows);
|
|
35873
35896
|
const offset = 1; // column title
|
|
35874
35897
|
const draggableItems = draggableIds.map((id, index) => ({
|
|
35875
35898
|
id,
|
|
@@ -35892,8 +35915,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
35892
35915
|
const columns = draggedItems.slice(0, draggedItems.indexOf("__rows_title__"));
|
|
35893
35916
|
const rows = draggedItems.slice(draggedItems.indexOf("__rows_title__") + 1);
|
|
35894
35917
|
this.props.onDimensionsUpdated({
|
|
35895
|
-
columns: columns
|
|
35896
|
-
|
|
35918
|
+
columns: columns
|
|
35919
|
+
.map((nameWithGranularity) => allDimensions.find((dimension) => dimension.nameWithGranularity === nameWithGranularity))
|
|
35920
|
+
.filter(isDefined),
|
|
35921
|
+
rows: rows
|
|
35922
|
+
.map((nameWithGranularity) => allDimensions.find((dimension) => dimension.nameWithGranularity === nameWithGranularity))
|
|
35923
|
+
.filter(isDefined),
|
|
35897
35924
|
});
|
|
35898
35925
|
},
|
|
35899
35926
|
});
|
|
@@ -40206,10 +40233,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
40206
40233
|
row: undefined,
|
|
40207
40234
|
};
|
|
40208
40235
|
const { Date } = window;
|
|
40209
|
-
let x =
|
|
40210
|
-
let y =
|
|
40236
|
+
let x = undefined;
|
|
40237
|
+
let y = undefined;
|
|
40211
40238
|
let lastMoved = 0;
|
|
40212
40239
|
function getPosition() {
|
|
40240
|
+
if (x === undefined || y === undefined) {
|
|
40241
|
+
return { col: -1, row: -1 };
|
|
40242
|
+
}
|
|
40213
40243
|
const col = env.model.getters.getColIndex(x);
|
|
40214
40244
|
const row = env.model.getters.getRowIndex(y);
|
|
40215
40245
|
return { col, row };
|
|
@@ -47207,12 +47237,13 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
47207
47237
|
this.clearBorders(cmd.sheetId, cmd.target);
|
|
47208
47238
|
break;
|
|
47209
47239
|
case "REMOVE_COLUMNS_ROWS":
|
|
47210
|
-
|
|
47240
|
+
const elements = [...cmd.elements].sort((a, b) => b - a);
|
|
47241
|
+
for (const group of groupConsecutive(elements)) {
|
|
47211
47242
|
if (cmd.dimension === "COL") {
|
|
47212
|
-
this.shiftBordersHorizontally(cmd.sheetId,
|
|
47243
|
+
this.shiftBordersHorizontally(cmd.sheetId, group[group.length - 1] + 1, -group.length);
|
|
47213
47244
|
}
|
|
47214
47245
|
else {
|
|
47215
|
-
this.shiftBordersVertically(cmd.sheetId,
|
|
47246
|
+
this.shiftBordersVertically(cmd.sheetId, group[group.length - 1] + 1, -group.length);
|
|
47216
47247
|
}
|
|
47217
47248
|
}
|
|
47218
47249
|
break;
|
|
@@ -51273,12 +51304,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
51273
51304
|
});
|
|
51274
51305
|
}
|
|
51275
51306
|
if (colIndex > deletedColumn) {
|
|
51276
|
-
this.
|
|
51277
|
-
sheetId: sheet.id,
|
|
51278
|
-
cellId: cellId,
|
|
51279
|
-
col: colIndex - 1,
|
|
51280
|
-
row: rowIndex,
|
|
51281
|
-
});
|
|
51307
|
+
this.setNewPosition(cellId, sheet.id, colIndex - 1, rowIndex);
|
|
51282
51308
|
}
|
|
51283
51309
|
}
|
|
51284
51310
|
}
|
|
@@ -51288,7 +51314,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
51288
51314
|
* Move the cells after a column or rows insertion
|
|
51289
51315
|
*/
|
|
51290
51316
|
moveCellsOnAddition(sheet, addedElement, quantity, dimension) {
|
|
51291
|
-
const
|
|
51317
|
+
const updates = [];
|
|
51292
51318
|
for (let rowIndex = 0; rowIndex < sheet.rows.length; rowIndex++) {
|
|
51293
51319
|
const row = sheet.rows[rowIndex];
|
|
51294
51320
|
if (dimension !== "rows" || rowIndex >= addedElement) {
|
|
@@ -51297,20 +51323,20 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
51297
51323
|
const cellId = row.cells[i];
|
|
51298
51324
|
if (cellId) {
|
|
51299
51325
|
if (dimension === "rows" || colIndex >= addedElement) {
|
|
51300
|
-
|
|
51301
|
-
type: "UPDATE_CELL_POSITION",
|
|
51326
|
+
updates.push({
|
|
51302
51327
|
sheetId: sheet.id,
|
|
51303
51328
|
cellId: cellId,
|
|
51304
51329
|
col: colIndex + (dimension === "columns" ? quantity : 0),
|
|
51305
51330
|
row: rowIndex + (dimension === "rows" ? quantity : 0),
|
|
51331
|
+
type: "UPDATE_CELL_POSITION",
|
|
51306
51332
|
});
|
|
51307
51333
|
}
|
|
51308
51334
|
}
|
|
51309
51335
|
}
|
|
51310
51336
|
}
|
|
51311
51337
|
}
|
|
51312
|
-
for (let
|
|
51313
|
-
this.
|
|
51338
|
+
for (let update of updates.reverse()) {
|
|
51339
|
+
this.updateCellPosition(update);
|
|
51314
51340
|
}
|
|
51315
51341
|
}
|
|
51316
51342
|
/**
|
|
@@ -51343,12 +51369,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
51343
51369
|
const colIndex = Number(i);
|
|
51344
51370
|
const cellId = row.cells[i];
|
|
51345
51371
|
if (cellId) {
|
|
51346
|
-
this.
|
|
51347
|
-
sheetId: sheet.id,
|
|
51348
|
-
cellId: cellId,
|
|
51349
|
-
col: colIndex,
|
|
51350
|
-
row: rowIndex - numberRows,
|
|
51351
|
-
});
|
|
51372
|
+
this.setNewPosition(cellId, sheet.id, colIndex, rowIndex - numberRows);
|
|
51352
51373
|
}
|
|
51353
51374
|
}
|
|
51354
51375
|
}
|
|
@@ -54114,6 +54135,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
54114
54135
|
if (!this.blockedArrayFormulas.has(position)) {
|
|
54115
54136
|
this.invalidateSpreading(position);
|
|
54116
54137
|
}
|
|
54138
|
+
if (this.spreadingRelations.isArrayFormula(position)) {
|
|
54139
|
+
this.spreadingRelations.removeNode(position);
|
|
54140
|
+
}
|
|
54117
54141
|
const cell = this.getters.getCell(position);
|
|
54118
54142
|
if (cell === undefined) {
|
|
54119
54143
|
return EMPTY_CELL;
|
|
@@ -54156,7 +54180,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
54156
54180
|
this.assertSheetHasEnoughSpaceToSpreadFormulaResult(formulaPosition, formulaReturn);
|
|
54157
54181
|
const nbColumns = formulaReturn.length;
|
|
54158
54182
|
const nbRows = formulaReturn[0].length;
|
|
54159
|
-
this.spreadingRelations.removeNode(formulaPosition);
|
|
54160
54183
|
forEachSpreadPositionInMatrix(nbColumns, nbRows, this.updateSpreadRelation(formulaPosition));
|
|
54161
54184
|
this.assertNoMergedCellsInSpreadZone(formulaPosition, formulaReturn);
|
|
54162
54185
|
forEachSpreadPositionInMatrix(nbColumns, nbRows, this.checkCollision(formulaPosition));
|
|
@@ -63081,6 +63104,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
63081
63104
|
|
|
63082
63105
|
.o-sidePanel-handle-container {
|
|
63083
63106
|
width: 8px;
|
|
63107
|
+
position: fixed;
|
|
63108
|
+
top: 50%;
|
|
63084
63109
|
}
|
|
63085
63110
|
.o-sidePanel-handle {
|
|
63086
63111
|
cursor: col-resize;
|
|
@@ -65700,7 +65725,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
65700
65725
|
}
|
|
65701
65726
|
|
|
65702
65727
|
class StateObserver {
|
|
65703
|
-
changes
|
|
65728
|
+
changes;
|
|
65704
65729
|
commands = [];
|
|
65705
65730
|
/**
|
|
65706
65731
|
* Record the changes which could happen in the given callback, save them in a
|
|
@@ -65732,7 +65757,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
65732
65757
|
if (value[key] === val) {
|
|
65733
65758
|
return;
|
|
65734
65759
|
}
|
|
65735
|
-
this.changes
|
|
65760
|
+
this.changes?.push({
|
|
65736
65761
|
key,
|
|
65737
65762
|
target: value,
|
|
65738
65763
|
before: value[key],
|
|
@@ -68398,9 +68423,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
68398
68423
|
exports.tokenize = tokenize;
|
|
68399
68424
|
|
|
68400
68425
|
|
|
68401
|
-
__info__.version = "17.4.
|
|
68402
|
-
__info__.date = "2024-
|
|
68403
|
-
__info__.hash = "
|
|
68426
|
+
__info__.version = "17.4.3";
|
|
68427
|
+
__info__.date = "2024-08-02T08:23:56.573Z";
|
|
68428
|
+
__info__.hash = "40ecd1e";
|
|
68404
68429
|
|
|
68405
68430
|
|
|
68406
68431
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|