@odoo/o-spreadsheet 16.0.35 → 16.0.37
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 +84 -35
- package/dist/o-spreadsheet.d.ts +3 -0
- package/dist/o-spreadsheet.esm.js +84 -35
- package/dist/o-spreadsheet.iife.js +84 -35
- package/dist/o-spreadsheet.iife.min.js +242 -242
- package/dist/o_spreadsheet.xml +5 -4
- package/package.json +2 -2
|
@@ -989,7 +989,7 @@
|
|
|
989
989
|
}
|
|
990
990
|
// Generate new Id if the item didn't exist in the dictionary
|
|
991
991
|
const ids = Object.keys(itemsDic);
|
|
992
|
-
const maxId = ids.length === 0 ? 0 :
|
|
992
|
+
const maxId = ids.length === 0 ? 0 : largeMax(ids.map((id) => parseInt(id, 10)));
|
|
993
993
|
itemsDic[maxId + 1] = item;
|
|
994
994
|
return maxId + 1;
|
|
995
995
|
}
|
|
@@ -1135,6 +1135,34 @@
|
|
|
1135
1135
|
return cache.get(args[0]);
|
|
1136
1136
|
},
|
|
1137
1137
|
}[funcName];
|
|
1138
|
+
}
|
|
1139
|
+
/**
|
|
1140
|
+
* Alternative to Math.max that works with large arrays.
|
|
1141
|
+
* Typically useful for arrays bigger than 100k elements.
|
|
1142
|
+
*/
|
|
1143
|
+
function largeMax(array) {
|
|
1144
|
+
let len = array.length;
|
|
1145
|
+
if (len < 100000)
|
|
1146
|
+
return Math.max(...array);
|
|
1147
|
+
let max = -Infinity;
|
|
1148
|
+
while (len--) {
|
|
1149
|
+
max = array[len] > max ? array[len] : max;
|
|
1150
|
+
}
|
|
1151
|
+
return max;
|
|
1152
|
+
}
|
|
1153
|
+
/**
|
|
1154
|
+
* Alternative to Math.min that works with large arrays.
|
|
1155
|
+
* Typically useful for arrays bigger than 100k elements.
|
|
1156
|
+
*/
|
|
1157
|
+
function largeMin(array) {
|
|
1158
|
+
let len = array.length;
|
|
1159
|
+
if (len < 100000)
|
|
1160
|
+
return Math.min(...array);
|
|
1161
|
+
let min = +Infinity;
|
|
1162
|
+
while (len--) {
|
|
1163
|
+
min = array[len] < min ? array[len] : min;
|
|
1164
|
+
}
|
|
1165
|
+
return min;
|
|
1138
1166
|
}
|
|
1139
1167
|
|
|
1140
1168
|
const RBA_REGEX = /rgba?\(|\s+|\)/gi;
|
|
@@ -5097,8 +5125,8 @@
|
|
|
5097
5125
|
let last;
|
|
5098
5126
|
const activesRows = env.model.getters.getActiveRows();
|
|
5099
5127
|
if (activesRows.size !== 0) {
|
|
5100
|
-
first =
|
|
5101
|
-
last =
|
|
5128
|
+
first = largeMin([...activesRows]);
|
|
5129
|
+
last = largeMax([...activesRows]);
|
|
5102
5130
|
}
|
|
5103
5131
|
else {
|
|
5104
5132
|
const zone = env.model.getters.getSelectedZones()[0];
|
|
@@ -5126,8 +5154,8 @@
|
|
|
5126
5154
|
let last;
|
|
5127
5155
|
const activeCols = env.model.getters.getActiveCols();
|
|
5128
5156
|
if (activeCols.size !== 0) {
|
|
5129
|
-
first =
|
|
5130
|
-
last =
|
|
5157
|
+
first = largeMin([...activeCols]);
|
|
5158
|
+
last = largeMax([...activeCols]);
|
|
5131
5159
|
}
|
|
5132
5160
|
else {
|
|
5133
5161
|
const zone = env.model.getters.getSelectedZones()[0];
|
|
@@ -5155,8 +5183,8 @@
|
|
|
5155
5183
|
let last;
|
|
5156
5184
|
const activesRows = env.model.getters.getActiveRows();
|
|
5157
5185
|
if (activesRows.size !== 0) {
|
|
5158
|
-
first =
|
|
5159
|
-
last =
|
|
5186
|
+
first = largeMin([...activesRows]);
|
|
5187
|
+
last = largeMax([...activesRows]);
|
|
5160
5188
|
}
|
|
5161
5189
|
else {
|
|
5162
5190
|
const zone = env.model.getters.getSelectedZones()[0];
|
|
@@ -5197,8 +5225,8 @@
|
|
|
5197
5225
|
let last;
|
|
5198
5226
|
const activeCols = env.model.getters.getActiveCols();
|
|
5199
5227
|
if (activeCols.size !== 0) {
|
|
5200
|
-
first =
|
|
5201
|
-
last =
|
|
5228
|
+
first = largeMin([...activeCols]);
|
|
5229
|
+
last = largeMax([...activeCols]);
|
|
5202
5230
|
}
|
|
5203
5231
|
else {
|
|
5204
5232
|
const zone = env.model.getters.getSelectedZones()[0];
|
|
@@ -5267,7 +5295,7 @@
|
|
|
5267
5295
|
let row;
|
|
5268
5296
|
let quantity;
|
|
5269
5297
|
if (activeRows.size) {
|
|
5270
|
-
row =
|
|
5298
|
+
row = largeMin([...activeRows]);
|
|
5271
5299
|
quantity = activeRows.size;
|
|
5272
5300
|
}
|
|
5273
5301
|
else {
|
|
@@ -5299,7 +5327,7 @@
|
|
|
5299
5327
|
let row;
|
|
5300
5328
|
let quantity;
|
|
5301
5329
|
if (activeRows.size) {
|
|
5302
|
-
row =
|
|
5330
|
+
row = largeMax([...activeRows]);
|
|
5303
5331
|
quantity = activeRows.size;
|
|
5304
5332
|
}
|
|
5305
5333
|
else {
|
|
@@ -5340,7 +5368,7 @@
|
|
|
5340
5368
|
let column;
|
|
5341
5369
|
let quantity;
|
|
5342
5370
|
if (activeCols.size) {
|
|
5343
|
-
column =
|
|
5371
|
+
column = largeMin([...activeCols]);
|
|
5344
5372
|
quantity = activeCols.size;
|
|
5345
5373
|
}
|
|
5346
5374
|
else {
|
|
@@ -5374,7 +5402,7 @@
|
|
|
5374
5402
|
let column;
|
|
5375
5403
|
let quantity;
|
|
5376
5404
|
if (activeCols.size) {
|
|
5377
|
-
column =
|
|
5405
|
+
column = largeMax([...activeCols]);
|
|
5378
5406
|
quantity = activeCols.size;
|
|
5379
5407
|
}
|
|
5380
5408
|
else {
|
|
@@ -7930,7 +7958,7 @@
|
|
|
7930
7958
|
return undefined;
|
|
7931
7959
|
}
|
|
7932
7960
|
const labelsTimestamps = labelDates.map((date) => date.getTime());
|
|
7933
|
-
const period =
|
|
7961
|
+
const period = largeMax(labelsTimestamps) - largeMin(labelsTimestamps);
|
|
7934
7962
|
const minUnit = getFormatMinDisplayUnit(format);
|
|
7935
7963
|
if (UNIT_LENGTH.second >= UNIT_LENGTH[minUnit] && Milliseconds.inSeconds(period) < 180) {
|
|
7936
7964
|
return "second";
|
|
@@ -8346,7 +8374,7 @@
|
|
|
8346
8374
|
}
|
|
8347
8375
|
function getPieColors(colors, dataSetsValues) {
|
|
8348
8376
|
const pieColors = [];
|
|
8349
|
-
const maxLength =
|
|
8377
|
+
const maxLength = largeMax(dataSetsValues.map((ds) => ds.data.length));
|
|
8350
8378
|
for (let i = 0; i <= maxLength; i++) {
|
|
8351
8379
|
pieColors.push(colors.next());
|
|
8352
8380
|
}
|
|
@@ -20434,6 +20462,10 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
20434
20462
|
if (!this.isKeyStillDown) {
|
|
20435
20463
|
this.processContent();
|
|
20436
20464
|
}
|
|
20465
|
+
// Required because typing '=SUM' and double-clicking another cell leaves ShowProvider and ShowDescription true
|
|
20466
|
+
if (this.env.model.getters.getEditionMode() === "inactive") {
|
|
20467
|
+
this.processTokenAtCursor();
|
|
20468
|
+
}
|
|
20437
20469
|
});
|
|
20438
20470
|
}
|
|
20439
20471
|
// ---------------------------------------------------------------------------
|
|
@@ -20632,6 +20664,12 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
20632
20664
|
onCompleted(text) {
|
|
20633
20665
|
text && this.autoComplete(text);
|
|
20634
20666
|
}
|
|
20667
|
+
onContextMenu(ev) {
|
|
20668
|
+
var _a, _b;
|
|
20669
|
+
if (this.env.model.getters.getEditionMode() === "inactive") {
|
|
20670
|
+
(_b = (_a = this.props).onInputContextMenu) === null || _b === void 0 ? void 0 : _b.call(_a, ev);
|
|
20671
|
+
}
|
|
20672
|
+
}
|
|
20635
20673
|
// ---------------------------------------------------------------------------
|
|
20636
20674
|
// Private
|
|
20637
20675
|
// ---------------------------------------------------------------------------
|
|
@@ -20865,6 +20903,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
20865
20903
|
isDefaultFocus: true,
|
|
20866
20904
|
onComposerContentFocused: this.props.onComposerContentFocused,
|
|
20867
20905
|
onComposerCellFocused: this.props.onComposerCellFocused,
|
|
20906
|
+
onInputContextMenu: this.props.onInputContextMenu,
|
|
20868
20907
|
};
|
|
20869
20908
|
}
|
|
20870
20909
|
get containerStyle() {
|
|
@@ -23015,8 +23054,8 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
23015
23054
|
else if (this.env.model.getters.getActiveRows().has(row)) {
|
|
23016
23055
|
type = "ROW";
|
|
23017
23056
|
}
|
|
23018
|
-
const { x, y, width
|
|
23019
|
-
this.toggleContextMenu(type, x + width, y +
|
|
23057
|
+
const { x, y, width } = this.env.model.getters.getVisibleRect(lastZone);
|
|
23058
|
+
this.toggleContextMenu(type, this.canvasPosition.x + x + width, this.canvasPosition.y + y);
|
|
23020
23059
|
}
|
|
23021
23060
|
onCellRightClicked(col, row, { x, y }) {
|
|
23022
23061
|
const zones = this.env.model.getters.getSelectedZones();
|
|
@@ -25182,7 +25221,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
25182
25221
|
function getSheetDims(sheet) {
|
|
25183
25222
|
const dims = [0, 0];
|
|
25184
25223
|
for (let row of sheet.rows) {
|
|
25185
|
-
dims[0] = Math.max(dims[0],
|
|
25224
|
+
dims[0] = Math.max(dims[0], largeMax(row.cells.map((cell) => toCartesian(cell.xc).col)));
|
|
25186
25225
|
dims[1] = Math.max(dims[1], row.index);
|
|
25187
25226
|
}
|
|
25188
25227
|
dims[0] = Math.max(dims[0], EXCEL_IMPORT_DEFAULT_NUMBER_OF_COLS);
|
|
@@ -29219,7 +29258,17 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
29219
29258
|
}
|
|
29220
29259
|
}
|
|
29221
29260
|
exportForExcel(data) {
|
|
29222
|
-
|
|
29261
|
+
for (const sheet of data.sheets) {
|
|
29262
|
+
for (const filterTable of this.getFilterTables(sheet.id)) {
|
|
29263
|
+
if (zoneToDimension(filterTable.zone).height === 1) {
|
|
29264
|
+
continue;
|
|
29265
|
+
}
|
|
29266
|
+
sheet.filterTables.push({
|
|
29267
|
+
range: zoneToXc(filterTable.zone),
|
|
29268
|
+
filters: [],
|
|
29269
|
+
});
|
|
29270
|
+
}
|
|
29271
|
+
}
|
|
29223
29272
|
}
|
|
29224
29273
|
}
|
|
29225
29274
|
FiltersPlugin.getters = [
|
|
@@ -29275,7 +29324,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
29275
29324
|
for (let headerIndex of [...cmd.elements].sort((a, b) => b - a)) {
|
|
29276
29325
|
sizes.splice(headerIndex, 1);
|
|
29277
29326
|
}
|
|
29278
|
-
const min =
|
|
29327
|
+
const min = largeMin(cmd.elements);
|
|
29279
29328
|
sizes = sizes.map((size, row) => {
|
|
29280
29329
|
if (cmd.dimension === "ROW" && row >= min) {
|
|
29281
29330
|
// invalidate sizes
|
|
@@ -29503,7 +29552,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
29503
29552
|
if (hiddenElements.size >= elements) {
|
|
29504
29553
|
return 66 /* CommandResult.TooManyHiddenElements */;
|
|
29505
29554
|
}
|
|
29506
|
-
else if (
|
|
29555
|
+
else if (largeMin(cmd.elements) < 0 || largeMax(cmd.elements) > elements) {
|
|
29507
29556
|
return 86 /* CommandResult.InvalidHeaderIndex */;
|
|
29508
29557
|
}
|
|
29509
29558
|
else {
|
|
@@ -30178,7 +30227,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
30178
30227
|
const elements = cmd.dimension === "COL"
|
|
30179
30228
|
? this.getNumberCols(cmd.sheetId)
|
|
30180
30229
|
: this.getNumberRows(cmd.sheetId);
|
|
30181
|
-
if (
|
|
30230
|
+
if (largeMin(cmd.elements) < 0 || largeMax(cmd.elements) > elements) {
|
|
30182
30231
|
return 86 /* CommandResult.InvalidHeaderIndex */;
|
|
30183
30232
|
}
|
|
30184
30233
|
else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
@@ -31551,13 +31600,13 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
31551
31600
|
const cells = this.getters.getCellsInZone(sheet.id, zone);
|
|
31552
31601
|
const cellPositions = range(end, -1, -1);
|
|
31553
31602
|
const invalidCells = cellPositions.filter((position) => { var _a; return cells[position] && !((_a = cells[position]) === null || _a === void 0 ? void 0 : _a.isAutoSummable); });
|
|
31554
|
-
const maxValidPosition =
|
|
31603
|
+
const maxValidPosition = largeMax(invalidCells);
|
|
31555
31604
|
const numberSequences = groupConsecutive(cellPositions.filter((position) => this.isNumber(cells[position])));
|
|
31556
31605
|
const firstSequence = numberSequences[0] || [];
|
|
31557
|
-
if (
|
|
31606
|
+
if (largeMax(firstSequence) < maxValidPosition) {
|
|
31558
31607
|
return Infinity;
|
|
31559
31608
|
}
|
|
31560
|
-
return
|
|
31609
|
+
return largeMin(firstSequence);
|
|
31561
31610
|
}
|
|
31562
31611
|
shouldFindData(sheetId, zone) {
|
|
31563
31612
|
return this.getters.isEmpty(sheetId, zone) || this.getters.isSingleCellOrMerge(sheetId, zone);
|
|
@@ -33240,13 +33289,13 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
33240
33289
|
.filter(this.isCellValueNumber);
|
|
33241
33290
|
switch (threshold.type) {
|
|
33242
33291
|
case "value":
|
|
33243
|
-
const result = functionName === "max" ?
|
|
33292
|
+
const result = functionName === "max" ? largeMax(rangeValues) : largeMin(rangeValues);
|
|
33244
33293
|
return result;
|
|
33245
33294
|
case "number":
|
|
33246
33295
|
return Number(threshold.value);
|
|
33247
33296
|
case "percentage":
|
|
33248
|
-
const min =
|
|
33249
|
-
const max =
|
|
33297
|
+
const min = largeMin(rangeValues);
|
|
33298
|
+
const max = largeMax(rangeValues);
|
|
33250
33299
|
const delta = max - min;
|
|
33251
33300
|
return min + (delta * Number(threshold.value)) / 100;
|
|
33252
33301
|
case "percentile":
|
|
@@ -37983,7 +38032,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
37983
38032
|
getColMaxWidth(sheetId, index) {
|
|
37984
38033
|
const cellsPositions = positions(this.getters.getColsZone(sheetId, index, index));
|
|
37985
38034
|
const sizes = cellsPositions.map((position) => this.getCellWidth(sheetId, position));
|
|
37986
|
-
return Math.max(0,
|
|
38035
|
+
return Math.max(0, largeMax(sizes));
|
|
37987
38036
|
}
|
|
37988
38037
|
splitWordToSpecificWidth(ctx, word, width, style) {
|
|
37989
38038
|
const wordWidth = computeTextWidth(ctx, word, style);
|
|
@@ -40334,8 +40383,8 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
40334
40383
|
let newRange = range;
|
|
40335
40384
|
let changeType = "NONE";
|
|
40336
40385
|
for (let group of groups) {
|
|
40337
|
-
const min =
|
|
40338
|
-
const max =
|
|
40386
|
+
const min = largeMin(group);
|
|
40387
|
+
const max = largeMax(group);
|
|
40339
40388
|
if (range.zone[start] <= min && min <= range.zone[end]) {
|
|
40340
40389
|
const toRemove = Math.min(range.zone[end], max) - min + 1;
|
|
40341
40390
|
changeType = "RESIZE";
|
|
@@ -41593,7 +41642,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
41593
41642
|
}
|
|
41594
41643
|
function addDoughnutChart(chart, chartSheetIndex, data, { holeSize } = { holeSize: 50 }) {
|
|
41595
41644
|
const colors = new ChartColors();
|
|
41596
|
-
const maxLength =
|
|
41645
|
+
const maxLength = largeMax(chart.dataSets.map((ds) => getRangeSize(ds.range, chartSheetIndex, data)));
|
|
41597
41646
|
const doughnutColors = range(0, maxLength).map(() => toXlsxHexColor(colors.next()));
|
|
41598
41647
|
const dataSetsNodes = [];
|
|
41599
41648
|
for (const [dsIndex, dataset] of Object.entries(chart.dataSets).reverse()) {
|
|
@@ -43290,9 +43339,9 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
|
|
|
43290
43339
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
43291
43340
|
|
|
43292
43341
|
|
|
43293
|
-
__info__.version = '16.0.
|
|
43294
|
-
__info__.date = '2024-
|
|
43295
|
-
__info__.hash = '
|
|
43342
|
+
__info__.version = '16.0.37';
|
|
43343
|
+
__info__.date = '2024-04-05T13:58:08.848Z';
|
|
43344
|
+
__info__.hash = 'e95827b';
|
|
43296
43345
|
|
|
43297
43346
|
|
|
43298
43347
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|