@odoo/o-spreadsheet 18.1.6 → 18.1.8
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 +190 -123
- package/dist/o-spreadsheet.d.ts +24 -3
- package/dist/o-spreadsheet.esm.js +190 -123
- package/dist/o-spreadsheet.iife.js +190 -123
- package/dist/o-spreadsheet.iife.min.js +152 -148
- package/dist/o_spreadsheet.xml +18 -15
- package/package.json +1 -1
|
@@ -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 18.1.
|
|
6
|
-
* @date 2025-02-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.1.8
|
|
6
|
+
* @date 2025-02-14T08:42:08.322Z
|
|
7
|
+
* @hash 02682f4
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function (exports, owl) {
|
|
@@ -769,9 +769,16 @@
|
|
|
769
769
|
}
|
|
770
770
|
return true;
|
|
771
771
|
}
|
|
772
|
-
/**
|
|
772
|
+
/**
|
|
773
|
+
* Check if the given array contains all the values of the other array.
|
|
774
|
+
* It makes the assumption that both array do not contain duplicates.
|
|
775
|
+
*/
|
|
773
776
|
function includesAll(arr, values) {
|
|
774
|
-
|
|
777
|
+
if (arr.length < values.length) {
|
|
778
|
+
return false;
|
|
779
|
+
}
|
|
780
|
+
const set = new Set(arr);
|
|
781
|
+
return values.every((value) => set.has(value));
|
|
775
782
|
}
|
|
776
783
|
/**
|
|
777
784
|
* Return an object with all the keys in the object that have a falsy value removed.
|
|
@@ -6473,6 +6480,33 @@
|
|
|
6473
6480
|
* https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
|
|
6474
6481
|
* */
|
|
6475
6482
|
class UuidGenerator {
|
|
6483
|
+
/**
|
|
6484
|
+
* Generates a custom UUID using a simple 36^12 method (8-character alphanumeric string with lowercase letters)
|
|
6485
|
+
* This has a higher chance of collision than a UUIDv4, but not only faster to generate than an UUIDV4,
|
|
6486
|
+
* it also has a smaller size, which is preferable to alleviate the overall data size.
|
|
6487
|
+
*
|
|
6488
|
+
* This method is preferable when generating uuids for the core data (sheetId, figureId, etc)
|
|
6489
|
+
* as they will appear several times in the revisions and local history.
|
|
6490
|
+
*
|
|
6491
|
+
*/
|
|
6492
|
+
smallUuid() {
|
|
6493
|
+
//@ts-ignore
|
|
6494
|
+
if (window.crypto && window.crypto.getRandomValues) {
|
|
6495
|
+
//@ts-ignore
|
|
6496
|
+
return ([1e7] + -1e3).replace(/[018]/g, (c) => (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16));
|
|
6497
|
+
}
|
|
6498
|
+
else {
|
|
6499
|
+
// mainly for jest and other browsers that do not have the crypto functionality
|
|
6500
|
+
return "xxxxxxxx-xxxx".replace(/[xy]/g, function (c) {
|
|
6501
|
+
const r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8;
|
|
6502
|
+
return v.toString(16);
|
|
6503
|
+
});
|
|
6504
|
+
}
|
|
6505
|
+
}
|
|
6506
|
+
/**
|
|
6507
|
+
* Generates an UUIDV4, has astronomically low chance of collision, but is larger in size than the smallUuid.
|
|
6508
|
+
* This method should be used when you need to avoid collisions at all costs, like the id of a revision.
|
|
6509
|
+
*/
|
|
6476
6510
|
uuidv4() {
|
|
6477
6511
|
//@ts-ignore
|
|
6478
6512
|
if (window.crypto && window.crypto.getRandomValues) {
|
|
@@ -8507,7 +8541,7 @@
|
|
|
8507
8541
|
};
|
|
8508
8542
|
}
|
|
8509
8543
|
getPasteTarget(sheetId, target, content, options) {
|
|
8510
|
-
const newId = new UuidGenerator().
|
|
8544
|
+
const newId = new UuidGenerator().smallUuid();
|
|
8511
8545
|
return { zones: [], figureId: newId, sheetId };
|
|
8512
8546
|
}
|
|
8513
8547
|
paste(target, clippedContent, options) {
|
|
@@ -8673,7 +8707,7 @@
|
|
|
8673
8707
|
if (!targetCF && queuedCfs) {
|
|
8674
8708
|
targetCF = queuedCfs.find((queued) => queued.cf.stopIfTrue === originCF.stopIfTrue && deepEquals(queued.cf.rule, originCF.rule))?.cf;
|
|
8675
8709
|
}
|
|
8676
|
-
return targetCF || { ...originCF, id: this.uuidGenerator.
|
|
8710
|
+
return targetCF || { ...originCF, id: this.uuidGenerator.smallUuid(), ranges: [] };
|
|
8677
8711
|
}
|
|
8678
8712
|
}
|
|
8679
8713
|
|
|
@@ -8766,7 +8800,7 @@
|
|
|
8766
8800
|
}
|
|
8767
8801
|
return (targetRule || {
|
|
8768
8802
|
...originRule,
|
|
8769
|
-
id: newId ? this.uuidGenerator.
|
|
8803
|
+
id: newId ? this.uuidGenerator.smallUuid() : originRule.id,
|
|
8770
8804
|
ranges: [],
|
|
8771
8805
|
});
|
|
8772
8806
|
}
|
|
@@ -8828,7 +8862,7 @@
|
|
|
8828
8862
|
};
|
|
8829
8863
|
}
|
|
8830
8864
|
getPasteTarget(sheetId, target, content, options) {
|
|
8831
|
-
const newId = new UuidGenerator().
|
|
8865
|
+
const newId = new UuidGenerator().smallUuid();
|
|
8832
8866
|
return { sheetId, zones: [], figureId: newId };
|
|
8833
8867
|
}
|
|
8834
8868
|
paste(target, clippedContent, options) {
|
|
@@ -15103,7 +15137,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
15103
15137
|
}
|
|
15104
15138
|
}
|
|
15105
15139
|
},
|
|
15106
|
-
isExported:
|
|
15140
|
+
isExported: false,
|
|
15107
15141
|
};
|
|
15108
15142
|
// -----------------------------------------------------------------------------
|
|
15109
15143
|
// UNIQUE
|
|
@@ -27616,7 +27650,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
27616
27650
|
for (const sheet of data.sheets || []) {
|
|
27617
27651
|
for (const figure of sheet.figures || []) {
|
|
27618
27652
|
if (figureIds.has(figure.id)) {
|
|
27619
|
-
figure.id += uuidGenerator.
|
|
27653
|
+
figure.id += uuidGenerator.smallUuid();
|
|
27620
27654
|
}
|
|
27621
27655
|
figureIds.add(figure.id);
|
|
27622
27656
|
}
|
|
@@ -28201,9 +28235,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28201
28235
|
const labelValues = getChartLabelValues(getters, dataSets, labelRange);
|
|
28202
28236
|
let labels = labelValues.formattedValues;
|
|
28203
28237
|
let dataSetsValues = getChartDatasetValues(getters, dataSets);
|
|
28204
|
-
if (definition.dataSetsHaveTitle
|
|
28205
|
-
dataSetsValues[0] &&
|
|
28206
|
-
labels.length > dataSetsValues[0].data.length) {
|
|
28238
|
+
if (shouldRemoveFirstLabel(labelRange, dataSets[0], definition.dataSetsHaveTitle || false)) {
|
|
28207
28239
|
labels.shift();
|
|
28208
28240
|
}
|
|
28209
28241
|
({ labels, dataSetsValues } = filterInvalidDataPoints(labels, dataSetsValues));
|
|
@@ -28252,13 +28284,12 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28252
28284
|
};
|
|
28253
28285
|
}
|
|
28254
28286
|
function getLineChartData(definition, dataSets, labelRange, getters) {
|
|
28255
|
-
const axisType = getChartAxisType(definition, labelRange, getters);
|
|
28287
|
+
const axisType = getChartAxisType(definition, dataSets, labelRange, getters);
|
|
28256
28288
|
const labelValues = getChartLabelValues(getters, dataSets, labelRange);
|
|
28257
28289
|
let labels = axisType === "linear" ? labelValues.values : labelValues.formattedValues;
|
|
28258
28290
|
let dataSetsValues = getChartDatasetValues(getters, dataSets);
|
|
28259
|
-
|
|
28260
|
-
|
|
28261
|
-
labels.length > dataSetsValues[0].data.length) {
|
|
28291
|
+
const removeFirstLabel = shouldRemoveFirstLabel(labelRange, dataSets[0], definition.dataSetsHaveTitle || false);
|
|
28292
|
+
if (removeFirstLabel) {
|
|
28262
28293
|
labels.shift();
|
|
28263
28294
|
}
|
|
28264
28295
|
({ labels, dataSetsValues } = filterInvalidDataPoints(labels, dataSetsValues));
|
|
@@ -28270,7 +28301,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28270
28301
|
}
|
|
28271
28302
|
const leftAxisFormat = getChartDatasetFormat(getters, dataSets, "left");
|
|
28272
28303
|
const rightAxisFormat = getChartDatasetFormat(getters, dataSets, "right");
|
|
28273
|
-
const labelsFormat = getChartLabelFormat(getters, labelRange);
|
|
28304
|
+
const labelsFormat = getChartLabelFormat(getters, labelRange, removeFirstLabel);
|
|
28274
28305
|
const axisFormats = { y: leftAxisFormat, y1: rightAxisFormat, x: labelsFormat };
|
|
28275
28306
|
const trendDataSetsValues = [];
|
|
28276
28307
|
for (const index in dataSetsValues) {
|
|
@@ -28306,9 +28337,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28306
28337
|
const labelValues = getChartLabelValues(getters, dataSets, labelRange);
|
|
28307
28338
|
let labels = labelValues.formattedValues;
|
|
28308
28339
|
let dataSetsValues = getChartDatasetValues(getters, dataSets);
|
|
28309
|
-
if (definition.dataSetsHaveTitle
|
|
28310
|
-
dataSetsValues[0] &&
|
|
28311
|
-
labels.length > dataSetsValues[0].data.length) {
|
|
28340
|
+
if (shouldRemoveFirstLabel(labelRange, dataSets[0], definition.dataSetsHaveTitle || false)) {
|
|
28312
28341
|
labels.shift();
|
|
28313
28342
|
}
|
|
28314
28343
|
({ labels, dataSetsValues } = filterInvalidDataPoints(labels, dataSetsValues));
|
|
@@ -28328,9 +28357,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28328
28357
|
const labelValues = getChartLabelValues(getters, dataSets, labelRange);
|
|
28329
28358
|
let labels = labelValues.formattedValues;
|
|
28330
28359
|
let dataSetsValues = getChartDatasetValues(getters, dataSets);
|
|
28331
|
-
if (definition.dataSetsHaveTitle
|
|
28332
|
-
dataSetsValues[0] &&
|
|
28333
|
-
labels.length > dataSetsValues[0].data.length) {
|
|
28360
|
+
if (shouldRemoveFirstLabel(labelRange, dataSets[0], definition.dataSetsHaveTitle || false)) {
|
|
28334
28361
|
labels.shift();
|
|
28335
28362
|
}
|
|
28336
28363
|
({ labels, dataSetsValues } = filterInvalidDataPoints(labels, dataSetsValues));
|
|
@@ -28350,7 +28377,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28350
28377
|
function getGeoChartData(definition, dataSets, labelRange, getters) {
|
|
28351
28378
|
const labelValues = getChartLabelValues(getters, dataSets, labelRange);
|
|
28352
28379
|
let labels = labelValues.formattedValues;
|
|
28353
|
-
if (definition.dataSetsHaveTitle) {
|
|
28380
|
+
if (shouldRemoveFirstLabel(labelRange, dataSets[0], definition.dataSetsHaveTitle || false)) {
|
|
28354
28381
|
labels.shift();
|
|
28355
28382
|
}
|
|
28356
28383
|
let dataSetsValues = getChartDatasetValues(getters, dataSets);
|
|
@@ -28511,36 +28538,41 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28511
28538
|
}
|
|
28512
28539
|
return { normalizedLabels, normalizedNewLabels };
|
|
28513
28540
|
}
|
|
28514
|
-
function getChartAxisType(
|
|
28515
|
-
if (isDateChart(
|
|
28541
|
+
function getChartAxisType(definition, dataSets, labelRange, getters) {
|
|
28542
|
+
if (isDateChart(definition, dataSets, labelRange, getters) && isLuxonTimeAdapterInstalled()) {
|
|
28516
28543
|
return "time";
|
|
28517
28544
|
}
|
|
28518
|
-
if (isLinearChart(
|
|
28545
|
+
if (isLinearChart(definition, dataSets, labelRange, getters)) {
|
|
28519
28546
|
return "linear";
|
|
28520
28547
|
}
|
|
28521
28548
|
return "category";
|
|
28522
28549
|
}
|
|
28523
|
-
function isDateChart(definition, labelRange, getters) {
|
|
28524
|
-
return !definition.labelsAsText && canBeDateChart(labelRange, getters);
|
|
28550
|
+
function isDateChart(definition, dataSets, labelRange, getters) {
|
|
28551
|
+
return !definition.labelsAsText && canBeDateChart(definition, dataSets, labelRange, getters);
|
|
28525
28552
|
}
|
|
28526
|
-
function isLinearChart(definition, labelRange, getters) {
|
|
28527
|
-
return !definition.labelsAsText && canBeLinearChart(labelRange, getters);
|
|
28553
|
+
function isLinearChart(definition, dataSets, labelRange, getters) {
|
|
28554
|
+
return !definition.labelsAsText && canBeLinearChart(definition, dataSets, labelRange, getters);
|
|
28528
28555
|
}
|
|
28529
|
-
function canChartParseLabels(labelRange, getters) {
|
|
28530
|
-
return canBeDateChart(
|
|
28556
|
+
function canChartParseLabels(definition, dataSets, labelRange, getters) {
|
|
28557
|
+
return (canBeDateChart(definition, dataSets, labelRange, getters) ||
|
|
28558
|
+
canBeLinearChart(definition, dataSets, labelRange, getters));
|
|
28531
28559
|
}
|
|
28532
|
-
function canBeDateChart(labelRange, getters) {
|
|
28533
|
-
if (!labelRange || !canBeLinearChart(labelRange, getters)) {
|
|
28560
|
+
function canBeDateChart(definition, dataSets, labelRange, getters) {
|
|
28561
|
+
if (!labelRange || !canBeLinearChart(definition, dataSets, labelRange, getters)) {
|
|
28534
28562
|
return false;
|
|
28535
28563
|
}
|
|
28536
|
-
const
|
|
28564
|
+
const removeFirstLabel = shouldRemoveFirstLabel(labelRange, dataSets[0], definition.dataSetsHaveTitle || false);
|
|
28565
|
+
const labelFormat = getChartLabelFormat(getters, labelRange, removeFirstLabel);
|
|
28537
28566
|
return Boolean(labelFormat && timeFormatLuxonCompatible.test(labelFormat));
|
|
28538
28567
|
}
|
|
28539
|
-
function canBeLinearChart(labelRange, getters) {
|
|
28568
|
+
function canBeLinearChart(definition, dataSets, labelRange, getters) {
|
|
28540
28569
|
if (!labelRange) {
|
|
28541
28570
|
return false;
|
|
28542
28571
|
}
|
|
28543
28572
|
const labels = getters.getRangeValues(labelRange);
|
|
28573
|
+
if (shouldRemoveFirstLabel(labelRange, dataSets[0], definition.dataSetsHaveTitle || false)) {
|
|
28574
|
+
labels.shift();
|
|
28575
|
+
}
|
|
28544
28576
|
if (labels.some((label) => isNaN(Number(label)) && label)) {
|
|
28545
28577
|
return false;
|
|
28546
28578
|
}
|
|
@@ -28649,17 +28681,15 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
28649
28681
|
})),
|
|
28650
28682
|
};
|
|
28651
28683
|
}
|
|
28652
|
-
function getChartLabelFormat(getters, range) {
|
|
28684
|
+
function getChartLabelFormat(getters, range, shouldRemoveFirstLabel) {
|
|
28653
28685
|
if (!range)
|
|
28654
28686
|
return undefined;
|
|
28655
|
-
const { sheetId, zone
|
|
28656
|
-
|
|
28657
|
-
|
|
28658
|
-
|
|
28659
|
-
return format;
|
|
28660
|
-
}
|
|
28687
|
+
const { sheetId, zone } = range;
|
|
28688
|
+
const formats = positions(zone).map((position) => getters.getEvaluatedCell({ sheetId, ...position }).format);
|
|
28689
|
+
if (shouldRemoveFirstLabel) {
|
|
28690
|
+
formats.shift();
|
|
28661
28691
|
}
|
|
28662
|
-
return undefined;
|
|
28692
|
+
return formats.find((format) => format !== undefined);
|
|
28663
28693
|
}
|
|
28664
28694
|
function getChartLabelValues(getters, dataSets, labelRange) {
|
|
28665
28695
|
let labels = { values: [], formattedValues: [] };
|
|
@@ -32892,7 +32922,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
32892
32922
|
const deleteSheet = {
|
|
32893
32923
|
name: _t("Delete"),
|
|
32894
32924
|
isVisible: (env) => {
|
|
32895
|
-
return env.model.getters.
|
|
32925
|
+
return env.model.getters.getVisibleSheetIds().length > 1;
|
|
32896
32926
|
},
|
|
32897
32927
|
execute: (env) => env.askConfirmation(_t("Are you sure you want to delete this sheet?"), () => {
|
|
32898
32928
|
env.model.dispatch("DELETE_SHEET", { sheetId: env.model.getters.getActiveSheetId() });
|
|
@@ -32903,7 +32933,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
32903
32933
|
name: _t("Duplicate"),
|
|
32904
32934
|
execute: (env) => {
|
|
32905
32935
|
const sheetIdFrom = env.model.getters.getActiveSheetId();
|
|
32906
|
-
const sheetIdTo = env.model.uuidGenerator.
|
|
32936
|
+
const sheetIdTo = env.model.uuidGenerator.smallUuid();
|
|
32907
32937
|
env.model.dispatch("DUPLICATE_SHEET", {
|
|
32908
32938
|
sheetId: sheetIdFrom,
|
|
32909
32939
|
sheetIdTo,
|
|
@@ -33606,20 +33636,21 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
33606
33636
|
}
|
|
33607
33637
|
// Only display legend for several datasets.
|
|
33608
33638
|
const newLegendPos = dataSetZone.right === dataSetZone.left ? "none" : "top";
|
|
33609
|
-
const
|
|
33610
|
-
|
|
33611
|
-
|
|
33612
|
-
|
|
33613
|
-
|
|
33614
|
-
|
|
33615
|
-
|
|
33616
|
-
|
|
33617
|
-
|
|
33618
|
-
|
|
33619
|
-
|
|
33620
|
-
|
|
33621
|
-
|
|
33622
|
-
|
|
33639
|
+
const lineChartDefinition = {
|
|
33640
|
+
title: {},
|
|
33641
|
+
dataSets,
|
|
33642
|
+
labelsAsText: false,
|
|
33643
|
+
stacked: false,
|
|
33644
|
+
aggregated: false,
|
|
33645
|
+
cumulative: false,
|
|
33646
|
+
labelRange: labelRangeXc,
|
|
33647
|
+
type: "line",
|
|
33648
|
+
dataSetsHaveTitle,
|
|
33649
|
+
legendPosition: newLegendPos,
|
|
33650
|
+
};
|
|
33651
|
+
const chart = new LineChart(lineChartDefinition, sheetId, getters);
|
|
33652
|
+
if (canChartParseLabels(lineChartDefinition, chart.dataSets, chart.labelRange, getters)) {
|
|
33653
|
+
return lineChartDefinition;
|
|
33623
33654
|
}
|
|
33624
33655
|
const _dataSets = createDataSets(getters, dataSets, sheetId, dataSetsHaveTitle);
|
|
33625
33656
|
if (singleColumn &&
|
|
@@ -34033,7 +34064,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
34033
34064
|
//------------------------------------------------------------------------------
|
|
34034
34065
|
const CREATE_CHART = (env) => {
|
|
34035
34066
|
const getters = env.model.getters;
|
|
34036
|
-
const id = env.model.uuidGenerator.
|
|
34067
|
+
const id = env.model.uuidGenerator.smallUuid();
|
|
34037
34068
|
const sheetId = getters.getActiveSheetId();
|
|
34038
34069
|
if (getZoneArea(env.model.getters.getSelectedZone()) === 1) {
|
|
34039
34070
|
env.model.selection.selectTableAroundSelection();
|
|
@@ -34056,8 +34087,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
34056
34087
|
// Pivots
|
|
34057
34088
|
//------------------------------------------------------------------------------
|
|
34058
34089
|
const CREATE_PIVOT = (env) => {
|
|
34059
|
-
const pivotId = env.model.uuidGenerator.
|
|
34060
|
-
const newSheetId = env.model.uuidGenerator.
|
|
34090
|
+
const pivotId = env.model.uuidGenerator.smallUuid();
|
|
34091
|
+
const newSheetId = env.model.uuidGenerator.smallUuid();
|
|
34061
34092
|
const result = env.model.dispatch("INSERT_NEW_PIVOT", { pivotId, newSheetId });
|
|
34062
34093
|
if (result.isSuccessful) {
|
|
34063
34094
|
env.openSidePanel("PivotSidePanel", { pivotId });
|
|
@@ -34116,7 +34147,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
34116
34147
|
const CREATE_IMAGE = async (env) => {
|
|
34117
34148
|
if (env.imageProvider) {
|
|
34118
34149
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
34119
|
-
const figureId = env.model.uuidGenerator.
|
|
34150
|
+
const figureId = env.model.uuidGenerator.smallUuid();
|
|
34120
34151
|
const image = await requestImage(env);
|
|
34121
34152
|
if (!image) {
|
|
34122
34153
|
throw new Error("No image provider was given to the environment");
|
|
@@ -34669,7 +34700,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
34669
34700
|
ranges,
|
|
34670
34701
|
sheetId,
|
|
34671
34702
|
rule: {
|
|
34672
|
-
id: env.model.uuidGenerator.
|
|
34703
|
+
id: env.model.uuidGenerator.smallUuid(),
|
|
34673
34704
|
criterion: {
|
|
34674
34705
|
type: "isBoolean",
|
|
34675
34706
|
values: [],
|
|
@@ -34685,7 +34716,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
34685
34716
|
const zones = env.model.getters.getSelectedZones();
|
|
34686
34717
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
34687
34718
|
const ranges = zones.map((zone) => env.model.getters.getRangeDataFromZone(sheetId, zone));
|
|
34688
|
-
const ruleID = env.model.uuidGenerator.
|
|
34719
|
+
const ruleID = env.model.uuidGenerator.smallUuid();
|
|
34689
34720
|
env.model.dispatch("ADD_DATA_VALIDATION_RULE", {
|
|
34690
34721
|
ranges,
|
|
34691
34722
|
sheetId,
|
|
@@ -34716,7 +34747,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
34716
34747
|
execute: (env) => {
|
|
34717
34748
|
const activeSheetId = env.model.getters.getActiveSheetId();
|
|
34718
34749
|
const position = env.model.getters.getSheetIds().indexOf(activeSheetId) + 1;
|
|
34719
|
-
const sheetId = env.model.uuidGenerator.
|
|
34750
|
+
const sheetId = env.model.uuidGenerator.smallUuid();
|
|
34720
34751
|
env.model.dispatch("CREATE_SHEET", { sheetId, position });
|
|
34721
34752
|
env.model.dispatch("ACTIVATE_SHEET", { sheetIdFrom: activeSheetId, sheetIdTo: sheetId });
|
|
34722
34753
|
},
|
|
@@ -39205,7 +39236,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
39205
39236
|
get canTreatLabelsAsText() {
|
|
39206
39237
|
const chart = this.env.model.getters.getChart(this.props.figureId);
|
|
39207
39238
|
if (chart && chart instanceof LineChart) {
|
|
39208
|
-
return canChartParseLabels(chart.labelRange, this.env.model.getters);
|
|
39239
|
+
return canChartParseLabels(chart.getDefinition(), chart.dataSets, chart.labelRange, this.env.model.getters);
|
|
39209
39240
|
}
|
|
39210
39241
|
return false;
|
|
39211
39242
|
}
|
|
@@ -39282,7 +39313,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
39282
39313
|
get canTreatLabelsAsText() {
|
|
39283
39314
|
const chart = this.env.model.getters.getChart(this.props.figureId);
|
|
39284
39315
|
if (chart && chart instanceof ScatterChart) {
|
|
39285
|
-
return canChartParseLabels(chart.labelRange, this.env.model.getters);
|
|
39316
|
+
return canChartParseLabels(chart.getDefinition(), chart.dataSets, chart.labelRange, this.env.model.getters);
|
|
39286
39317
|
}
|
|
39287
39318
|
return false;
|
|
39288
39319
|
}
|
|
@@ -41030,8 +41061,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
41030
41061
|
document.body.style.cursor = "move";
|
|
41031
41062
|
state.draggedItemId = args.draggedItemId;
|
|
41032
41063
|
const container = direction === "horizontal"
|
|
41033
|
-
? new HorizontalContainer(args.
|
|
41034
|
-
: new VerticalContainer(args.
|
|
41064
|
+
? new HorizontalContainer(args.scrollableContainerEl)
|
|
41065
|
+
: new VerticalContainer(args.scrollableContainerEl);
|
|
41035
41066
|
dndHelper = new DOMDndHelper({
|
|
41036
41067
|
...args,
|
|
41037
41068
|
container,
|
|
@@ -41042,8 +41073,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
41042
41073
|
const stopListening = startDnd(dndHelper.onMouseMove.bind(dndHelper), dndHelper.onMouseUp.bind(dndHelper));
|
|
41043
41074
|
cleanupFns.push(stopListening);
|
|
41044
41075
|
const onScroll = dndHelper.onScroll.bind(dndHelper);
|
|
41045
|
-
args.
|
|
41046
|
-
cleanupFns.push(() => args.
|
|
41076
|
+
args.scrollableContainerEl.addEventListener("scroll", onScroll);
|
|
41077
|
+
cleanupFns.push(() => args.scrollableContainerEl.removeEventListener("scroll", onScroll));
|
|
41047
41078
|
cleanupFns.push(dndHelper.destroy.bind(dndHelper));
|
|
41048
41079
|
};
|
|
41049
41080
|
owl.onWillUnmount(() => {
|
|
@@ -41500,7 +41531,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
41500
41531
|
draggedItemId: cf.id,
|
|
41501
41532
|
initialMousePosition: event.clientY,
|
|
41502
41533
|
items: items,
|
|
41503
|
-
|
|
41534
|
+
scrollableContainerEl: this.cfListRef.el,
|
|
41504
41535
|
onDragEnd: (cfId, finalIndex) => this.onDragEnd(cfId, finalIndex),
|
|
41505
41536
|
});
|
|
41506
41537
|
}
|
|
@@ -42060,7 +42091,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
42060
42091
|
this.originalEditedCf = undefined;
|
|
42061
42092
|
}
|
|
42062
42093
|
addConditionalFormat() {
|
|
42063
|
-
const cfId = this.env.model.uuidGenerator.
|
|
42094
|
+
const cfId = this.env.model.uuidGenerator.smallUuid();
|
|
42064
42095
|
this.env.model.dispatch("ADD_CONDITIONAL_FORMAT", {
|
|
42065
42096
|
sheetId: this.activeSheetId,
|
|
42066
42097
|
ranges: this.env.model.getters
|
|
@@ -43330,7 +43361,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
43330
43361
|
.getSelectedZones()
|
|
43331
43362
|
.map((zone) => zoneToXc(this.env.model.getters.getUnboundedZone(sheetId, zone)));
|
|
43332
43363
|
return {
|
|
43333
|
-
id: this.env.model.uuidGenerator.
|
|
43364
|
+
id: this.env.model.uuidGenerator.smallUuid(),
|
|
43334
43365
|
criterion: { type: "textContains", values: [""] },
|
|
43335
43366
|
ranges,
|
|
43336
43367
|
};
|
|
@@ -44682,6 +44713,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
44682
44713
|
unusedGranularities: Object,
|
|
44683
44714
|
dateGranularities: Array,
|
|
44684
44715
|
datetimeGranularities: Array,
|
|
44716
|
+
getScrollableContainerEl: { type: Function, optional: true },
|
|
44685
44717
|
pivotId: String,
|
|
44686
44718
|
};
|
|
44687
44719
|
dimensionsRef = owl.useRef("pivot-dimensions");
|
|
@@ -44715,7 +44747,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
44715
44747
|
draggedItemId: dimension.nameWithGranularity,
|
|
44716
44748
|
initialMousePosition: event.clientY,
|
|
44717
44749
|
items: draggableItems,
|
|
44718
|
-
|
|
44750
|
+
scrollableContainerEl: this.props.getScrollableContainerEl?.() || this.dimensionsRef.el,
|
|
44719
44751
|
onDragEnd: (dimensionName, finalIndex) => {
|
|
44720
44752
|
const originalIndex = draggableIds.findIndex((id) => id === dimensionName);
|
|
44721
44753
|
if (originalIndex === finalIndex) {
|
|
@@ -44764,7 +44796,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
44764
44796
|
draggedItemId: measure.id,
|
|
44765
44797
|
initialMousePosition: event.clientY,
|
|
44766
44798
|
items: draggableItems,
|
|
44767
|
-
|
|
44799
|
+
scrollableContainerEl: this.props.getScrollableContainerEl?.() || this.dimensionsRef.el,
|
|
44768
44800
|
onDragEnd: (measureName, finalIndex) => {
|
|
44769
44801
|
const originalIndex = draggableIds.findIndex((id) => id === measureName);
|
|
44770
44802
|
if (originalIndex === finalIndex) {
|
|
@@ -44947,8 +44979,8 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
44947
44979
|
return this.env.model.getters.getPivotDisplayName(this.props.pivotId);
|
|
44948
44980
|
}
|
|
44949
44981
|
duplicatePivot() {
|
|
44950
|
-
const newPivotId = this.env.model.uuidGenerator.
|
|
44951
|
-
const newSheetId = this.env.model.uuidGenerator.
|
|
44982
|
+
const newPivotId = this.env.model.uuidGenerator.smallUuid();
|
|
44983
|
+
const newSheetId = this.env.model.uuidGenerator.smallUuid();
|
|
44952
44984
|
const result = this.env.model.dispatch("DUPLICATE_PIVOT_IN_NEW_SHEET", {
|
|
44953
44985
|
pivotId: this.props.pivotId,
|
|
44954
44986
|
newPivotId,
|
|
@@ -45397,7 +45429,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
45397
45429
|
rowTreeToRows(tree, parentRow) {
|
|
45398
45430
|
return tree.flatMap((node) => {
|
|
45399
45431
|
const row = {
|
|
45400
|
-
indent: parentRow ? parentRow.indent + 1 :
|
|
45432
|
+
indent: parentRow ? parentRow.indent + 1 : 1,
|
|
45401
45433
|
fields: [...(parentRow?.fields || []), node.field],
|
|
45402
45434
|
values: [...(parentRow?.values || []), node.value],
|
|
45403
45435
|
};
|
|
@@ -45453,7 +45485,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
45453
45485
|
pivotTableRows.push({
|
|
45454
45486
|
fields: _fields,
|
|
45455
45487
|
values: _values,
|
|
45456
|
-
indent: index,
|
|
45488
|
+
indent: index + 1,
|
|
45457
45489
|
});
|
|
45458
45490
|
const record = groups[value];
|
|
45459
45491
|
if (record) {
|
|
@@ -46451,6 +46483,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
46451
46483
|
};
|
|
46452
46484
|
store;
|
|
46453
46485
|
state;
|
|
46486
|
+
pivotSidePanelRef = owl.useRef("pivotSidePanel");
|
|
46454
46487
|
setup() {
|
|
46455
46488
|
this.store = useLocalStore(PivotSidePanelStore, this.props.pivotId);
|
|
46456
46489
|
this.state = owl.useState({
|
|
@@ -46479,6 +46512,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
46479
46512
|
get definition() {
|
|
46480
46513
|
return this.store.definition;
|
|
46481
46514
|
}
|
|
46515
|
+
getScrollableContainerEl() {
|
|
46516
|
+
return this.pivotSidePanelRef.el;
|
|
46517
|
+
}
|
|
46482
46518
|
onSelectionChanged(ranges) {
|
|
46483
46519
|
this.state.rangeHasChanged = true;
|
|
46484
46520
|
this.state.range = ranges[0];
|
|
@@ -47569,7 +47605,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
47569
47605
|
this.state.selectedTemplateName = templateName;
|
|
47570
47606
|
}
|
|
47571
47607
|
onConfirm() {
|
|
47572
|
-
const tableStyleId = this.props.styleId || this.env.model.uuidGenerator.
|
|
47608
|
+
const tableStyleId = this.props.styleId || this.env.model.uuidGenerator.smallUuid();
|
|
47573
47609
|
this.env.model.dispatch("CREATE_TABLE_STYLE", {
|
|
47574
47610
|
tableStyleId,
|
|
47575
47611
|
tableStyleName: this.state.styleName,
|
|
@@ -56143,7 +56179,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
56143
56179
|
? "Success" /* CommandResult.Success */
|
|
56144
56180
|
: "InvalidColor" /* CommandResult.InvalidColor */;
|
|
56145
56181
|
case "DELETE_SHEET":
|
|
56146
|
-
return this.
|
|
56182
|
+
return this.getVisibleSheetIds().length > 1
|
|
56147
56183
|
? "Success" /* CommandResult.Success */
|
|
56148
56184
|
: "NotEnoughSheets" /* CommandResult.NotEnoughSheets */;
|
|
56149
56185
|
case "ADD_COLUMNS_ROWS":
|
|
@@ -63502,6 +63538,15 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
63502
63538
|
}
|
|
63503
63539
|
this.sendPendingMessage();
|
|
63504
63540
|
}
|
|
63541
|
+
dropPendingRevision(revisionId) {
|
|
63542
|
+
this.revisions.drop(revisionId);
|
|
63543
|
+
const revisionIds = this.pendingMessages
|
|
63544
|
+
.filter((message) => message.type === "REMOTE_REVISION")
|
|
63545
|
+
.map((message) => message.nextRevisionId);
|
|
63546
|
+
this.trigger("pending-revisions-dropped", { revisionIds });
|
|
63547
|
+
this.waitingAck = false;
|
|
63548
|
+
this.waitingUndoRedoAck = false;
|
|
63549
|
+
}
|
|
63505
63550
|
/**
|
|
63506
63551
|
* Send the next pending message
|
|
63507
63552
|
*/
|
|
@@ -63516,13 +63561,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
63516
63561
|
* The command is empty, we have to drop all the next local revisions
|
|
63517
63562
|
* to avoid issues with undo/redo
|
|
63518
63563
|
*/
|
|
63519
|
-
this.
|
|
63520
|
-
const revisionIds = this.pendingMessages
|
|
63521
|
-
.filter((message) => message.type === "REMOTE_REVISION")
|
|
63522
|
-
.map((message) => message.nextRevisionId);
|
|
63523
|
-
this.trigger("pending-revisions-dropped", { revisionIds });
|
|
63524
|
-
this.waitingAck = false;
|
|
63525
|
-
this.waitingUndoRedoAck = false;
|
|
63564
|
+
this.dropPendingRevision(revision.id);
|
|
63526
63565
|
this.pendingMessages = [];
|
|
63527
63566
|
return;
|
|
63528
63567
|
}
|
|
@@ -63549,7 +63588,6 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
63549
63588
|
switch (message.type) {
|
|
63550
63589
|
case "REMOTE_REVISION":
|
|
63551
63590
|
case "REVISION_REDONE":
|
|
63552
|
-
case "REVISION_UNDONE":
|
|
63553
63591
|
case "SNAPSHOT_CREATED":
|
|
63554
63592
|
this.waitingAck = false;
|
|
63555
63593
|
this.pendingMessages = this.pendingMessages.filter((msg) => msg.nextRevisionId !== message.nextRevisionId);
|
|
@@ -63558,6 +63596,27 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
63558
63596
|
this.lastRevisionMessage = message;
|
|
63559
63597
|
this.sendPendingMessage();
|
|
63560
63598
|
break;
|
|
63599
|
+
case "REVISION_UNDONE": {
|
|
63600
|
+
this.waitingAck = false;
|
|
63601
|
+
this.pendingMessages = this.pendingMessages.filter((msg) => msg.nextRevisionId !== message.nextRevisionId);
|
|
63602
|
+
const pendingRemoteRevisions = this.pendingMessages.filter((message) => message.type === "REMOTE_REVISION");
|
|
63603
|
+
const firstTransformedRevisionIndex = pendingRemoteRevisions.findIndex((message) => !deepEquals(message.commands, this.revisions.get(message.nextRevisionId).commands));
|
|
63604
|
+
if (firstTransformedRevisionIndex !== -1) {
|
|
63605
|
+
/**
|
|
63606
|
+
* Some revisions undergo transformations that may cause issues with
|
|
63607
|
+
* undo/redo if the transformation is destructive (we don't get back
|
|
63608
|
+
* the original command by transforming it with the inverse).
|
|
63609
|
+
* To prevent these problems, we must discard all subsequent local
|
|
63610
|
+
* revisions.
|
|
63611
|
+
*/
|
|
63612
|
+
this.dropPendingRevision(this.pendingMessages[firstTransformedRevisionIndex].nextRevisionId);
|
|
63613
|
+
this.pendingMessages = this.pendingMessages.slice(0, firstTransformedRevisionIndex);
|
|
63614
|
+
}
|
|
63615
|
+
this.serverRevisionId = message.nextRevisionId;
|
|
63616
|
+
this.processedRevisions.add(message.nextRevisionId);
|
|
63617
|
+
this.sendPendingMessage();
|
|
63618
|
+
break;
|
|
63619
|
+
}
|
|
63561
63620
|
}
|
|
63562
63621
|
}
|
|
63563
63622
|
isAlreadyProcessed(message) {
|
|
@@ -65028,23 +65087,23 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
65028
65087
|
function repeatCreateChartCommand(getters, cmd) {
|
|
65029
65088
|
return {
|
|
65030
65089
|
...repeatSheetDependantCommand(getters, cmd),
|
|
65031
|
-
id: uuidGenerator.
|
|
65090
|
+
id: uuidGenerator.smallUuid(),
|
|
65032
65091
|
};
|
|
65033
65092
|
}
|
|
65034
65093
|
function repeatCreateImageCommand(getters, cmd) {
|
|
65035
65094
|
return {
|
|
65036
65095
|
...repeatSheetDependantCommand(getters, cmd),
|
|
65037
|
-
figureId: uuidGenerator.
|
|
65096
|
+
figureId: uuidGenerator.smallUuid(),
|
|
65038
65097
|
};
|
|
65039
65098
|
}
|
|
65040
65099
|
function repeatCreateFigureCommand(getters, cmd) {
|
|
65041
65100
|
const newCmd = repeatSheetDependantCommand(getters, cmd);
|
|
65042
|
-
newCmd.figure.id = uuidGenerator.
|
|
65101
|
+
newCmd.figure.id = uuidGenerator.smallUuid();
|
|
65043
65102
|
return newCmd;
|
|
65044
65103
|
}
|
|
65045
65104
|
function repeatCreateSheetCommand(getters, cmd) {
|
|
65046
65105
|
const newCmd = deepCopy(cmd);
|
|
65047
|
-
newCmd.sheetId = uuidGenerator.
|
|
65106
|
+
newCmd.sheetId = uuidGenerator.smallUuid();
|
|
65048
65107
|
const sheetName = cmd.name || getters.getSheet(getters.getActiveSheetId()).name;
|
|
65049
65108
|
// Extract the prefix of the sheet name (everything before the number at the end of the name)
|
|
65050
65109
|
const namePrefix = sheetName.match(/(.+?)\d*$/)?.[1] || sheetName;
|
|
@@ -66507,23 +66566,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
66507
66566
|
gridSelection: deepCopy(gridSelection),
|
|
66508
66567
|
};
|
|
66509
66568
|
}
|
|
66510
|
-
|
|
66511
|
-
const currentSheetIds = this.getters.getVisibleSheetIds();
|
|
66512
|
-
this.activeSheet = this.getters.getSheet(currentSheetIds[0]);
|
|
66513
|
-
if (this.activeSheet.id in this.sheetsData) {
|
|
66514
|
-
const { anchor } = this.clipSelection(this.activeSheet.id, this.sheetsData[this.activeSheet.id].gridSelection);
|
|
66515
|
-
this.selectCell(anchor.cell.col, anchor.cell.row);
|
|
66516
|
-
}
|
|
66517
|
-
else {
|
|
66518
|
-
this.selectCell(0, 0);
|
|
66519
|
-
}
|
|
66520
|
-
const { col, row } = this.gridSelection.anchor.cell;
|
|
66521
|
-
this.moveClient({
|
|
66522
|
-
sheetId: this.getters.getActiveSheetId(),
|
|
66523
|
-
col,
|
|
66524
|
-
row,
|
|
66525
|
-
});
|
|
66526
|
-
}
|
|
66569
|
+
this.fallbackToVisibleSheet();
|
|
66527
66570
|
const sheetId = this.getters.getActiveSheetId();
|
|
66528
66571
|
this.gridSelection.zones = this.gridSelection.zones.map((z) => this.getters.expandZone(sheetId, z));
|
|
66529
66572
|
this.gridSelection.anchor.zone = this.getters.expandZone(sheetId, this.gridSelection.anchor.zone);
|
|
@@ -66533,6 +66576,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
66533
66576
|
}
|
|
66534
66577
|
}
|
|
66535
66578
|
finalize() {
|
|
66579
|
+
this.fallbackToVisibleSheet();
|
|
66536
66580
|
/** Any change to the selection has to be reflected in the selection processor. */
|
|
66537
66581
|
this.selection.resetDefaultAnchor(this, deepCopy(this.gridSelection.anchor));
|
|
66538
66582
|
}
|
|
@@ -66843,6 +66887,25 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
66843
66887
|
}
|
|
66844
66888
|
return "Success" /* CommandResult.Success */;
|
|
66845
66889
|
}
|
|
66890
|
+
fallbackToVisibleSheet() {
|
|
66891
|
+
if (!this.getters.tryGetSheet(this.getters.getActiveSheetId())) {
|
|
66892
|
+
const currentSheetIds = this.getters.getVisibleSheetIds();
|
|
66893
|
+
this.activeSheet = this.getters.getSheet(currentSheetIds[0]);
|
|
66894
|
+
if (this.activeSheet.id in this.sheetsData) {
|
|
66895
|
+
const { anchor } = this.clipSelection(this.activeSheet.id, this.sheetsData[this.activeSheet.id].gridSelection);
|
|
66896
|
+
this.selectCell(anchor.cell.col, anchor.cell.row);
|
|
66897
|
+
}
|
|
66898
|
+
else {
|
|
66899
|
+
this.selectCell(0, 0);
|
|
66900
|
+
}
|
|
66901
|
+
const { col, row } = this.gridSelection.anchor.cell;
|
|
66902
|
+
this.moveClient({
|
|
66903
|
+
sheetId: this.getters.getActiveSheetId(),
|
|
66904
|
+
col,
|
|
66905
|
+
row,
|
|
66906
|
+
});
|
|
66907
|
+
}
|
|
66908
|
+
}
|
|
66846
66909
|
//-------------------------------------------
|
|
66847
66910
|
// Helpers for extensions
|
|
66848
66911
|
// ------------------------------------------
|
|
@@ -68843,7 +68906,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
68843
68906
|
clickAddSheet(ev) {
|
|
68844
68907
|
const activeSheetId = this.env.model.getters.getActiveSheetId();
|
|
68845
68908
|
const position = this.env.model.getters.getSheetIds().findIndex((sheetId) => sheetId === activeSheetId) + 1;
|
|
68846
|
-
const sheetId = this.env.model.uuidGenerator.
|
|
68909
|
+
const sheetId = this.env.model.uuidGenerator.smallUuid();
|
|
68847
68910
|
const name = this.env.model.getters.getNextSheetName(_t("Sheet"));
|
|
68848
68911
|
this.env.model.dispatch("CREATE_SHEET", { sheetId, position, name });
|
|
68849
68912
|
this.env.model.dispatch("ACTIVATE_SHEET", { sheetIdFrom: activeSheetId, sheetIdTo: sheetId });
|
|
@@ -68960,7 +69023,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
68960
69023
|
draggedItemId: sheetId,
|
|
68961
69024
|
initialMousePosition: event.clientX,
|
|
68962
69025
|
items: sheets,
|
|
68963
|
-
|
|
69026
|
+
scrollableContainerEl: this.sheetListRef.el,
|
|
68964
69027
|
onDragEnd: (sheetId, finalIndex) => this.onDragEnd(sheetId, finalIndex),
|
|
68965
69028
|
});
|
|
68966
69029
|
}
|
|
@@ -69858,6 +69921,10 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
69858
69921
|
</svg>
|
|
69859
69922
|
`;
|
|
69860
69923
|
css /* scss */ `
|
|
69924
|
+
.o-topbar-composer-container {
|
|
69925
|
+
height: ${TOPBAR_TOOLBAR_HEIGHT}px;
|
|
69926
|
+
}
|
|
69927
|
+
|
|
69861
69928
|
.o-topbar-composer {
|
|
69862
69929
|
height: fit-content;
|
|
69863
69930
|
margin-top: -1px;
|
|
@@ -71131,7 +71198,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
71131
71198
|
}
|
|
71132
71199
|
/**
|
|
71133
71200
|
* Drop the operation and all following operations in every
|
|
71134
|
-
*
|
|
71201
|
+
* branches
|
|
71135
71202
|
*/
|
|
71136
71203
|
drop(operationId) {
|
|
71137
71204
|
for (const branch of this.branches) {
|
|
@@ -74576,7 +74643,7 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
74576
74643
|
}
|
|
74577
74644
|
setupConfig(config) {
|
|
74578
74645
|
const client = config.client || {
|
|
74579
|
-
id: this.uuidGenerator.
|
|
74646
|
+
id: this.uuidGenerator.smallUuid(),
|
|
74580
74647
|
name: _t("Anonymous").toString(),
|
|
74581
74648
|
};
|
|
74582
74649
|
const transportService = config.transportService || new LocalTransportService();
|
|
@@ -75099,9 +75166,9 @@ stores.inject(MyMetaStore, storeInstance);
|
|
|
75099
75166
|
exports.tokenize = tokenize;
|
|
75100
75167
|
|
|
75101
75168
|
|
|
75102
|
-
__info__.version = "18.1.
|
|
75103
|
-
__info__.date = "2025-02-
|
|
75104
|
-
__info__.hash = "
|
|
75169
|
+
__info__.version = "18.1.8";
|
|
75170
|
+
__info__.date = "2025-02-14T08:42:08.322Z";
|
|
75171
|
+
__info__.hash = "02682f4";
|
|
75105
75172
|
|
|
75106
75173
|
|
|
75107
75174
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|