@odoo/o-spreadsheet 16.0.36 → 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 +80 -35
- package/dist/o-spreadsheet.d.ts +3 -0
- package/dist/o-spreadsheet.esm.js +80 -35
- package/dist/o-spreadsheet.iife.js +80 -35
- package/dist/o-spreadsheet.iife.min.js +242 -242
- package/dist/o_spreadsheet.xml +5 -4
- package/package.json +2 -2
|
@@ -992,7 +992,7 @@ function getItemId(item, itemsDic) {
|
|
|
992
992
|
}
|
|
993
993
|
// Generate new Id if the item didn't exist in the dictionary
|
|
994
994
|
const ids = Object.keys(itemsDic);
|
|
995
|
-
const maxId = ids.length === 0 ? 0 :
|
|
995
|
+
const maxId = ids.length === 0 ? 0 : largeMax(ids.map((id) => parseInt(id, 10)));
|
|
996
996
|
itemsDic[maxId + 1] = item;
|
|
997
997
|
return maxId + 1;
|
|
998
998
|
}
|
|
@@ -1138,6 +1138,34 @@ function memoize(func) {
|
|
|
1138
1138
|
return cache.get(args[0]);
|
|
1139
1139
|
},
|
|
1140
1140
|
}[funcName];
|
|
1141
|
+
}
|
|
1142
|
+
/**
|
|
1143
|
+
* Alternative to Math.max that works with large arrays.
|
|
1144
|
+
* Typically useful for arrays bigger than 100k elements.
|
|
1145
|
+
*/
|
|
1146
|
+
function largeMax(array) {
|
|
1147
|
+
let len = array.length;
|
|
1148
|
+
if (len < 100000)
|
|
1149
|
+
return Math.max(...array);
|
|
1150
|
+
let max = -Infinity;
|
|
1151
|
+
while (len--) {
|
|
1152
|
+
max = array[len] > max ? array[len] : max;
|
|
1153
|
+
}
|
|
1154
|
+
return max;
|
|
1155
|
+
}
|
|
1156
|
+
/**
|
|
1157
|
+
* Alternative to Math.min that works with large arrays.
|
|
1158
|
+
* Typically useful for arrays bigger than 100k elements.
|
|
1159
|
+
*/
|
|
1160
|
+
function largeMin(array) {
|
|
1161
|
+
let len = array.length;
|
|
1162
|
+
if (len < 100000)
|
|
1163
|
+
return Math.min(...array);
|
|
1164
|
+
let min = +Infinity;
|
|
1165
|
+
while (len--) {
|
|
1166
|
+
min = array[len] < min ? array[len] : min;
|
|
1167
|
+
}
|
|
1168
|
+
return min;
|
|
1141
1169
|
}
|
|
1142
1170
|
|
|
1143
1171
|
const RBA_REGEX = /rgba?\(|\s+|\)/gi;
|
|
@@ -5100,8 +5128,8 @@ const DELETE_CONTENT_ROWS_NAME = (env) => {
|
|
|
5100
5128
|
let last;
|
|
5101
5129
|
const activesRows = env.model.getters.getActiveRows();
|
|
5102
5130
|
if (activesRows.size !== 0) {
|
|
5103
|
-
first =
|
|
5104
|
-
last =
|
|
5131
|
+
first = largeMin([...activesRows]);
|
|
5132
|
+
last = largeMax([...activesRows]);
|
|
5105
5133
|
}
|
|
5106
5134
|
else {
|
|
5107
5135
|
const zone = env.model.getters.getSelectedZones()[0];
|
|
@@ -5129,8 +5157,8 @@ const DELETE_CONTENT_COLUMNS_NAME = (env) => {
|
|
|
5129
5157
|
let last;
|
|
5130
5158
|
const activeCols = env.model.getters.getActiveCols();
|
|
5131
5159
|
if (activeCols.size !== 0) {
|
|
5132
|
-
first =
|
|
5133
|
-
last =
|
|
5160
|
+
first = largeMin([...activeCols]);
|
|
5161
|
+
last = largeMax([...activeCols]);
|
|
5134
5162
|
}
|
|
5135
5163
|
else {
|
|
5136
5164
|
const zone = env.model.getters.getSelectedZones()[0];
|
|
@@ -5158,8 +5186,8 @@ const REMOVE_ROWS_NAME = (env) => {
|
|
|
5158
5186
|
let last;
|
|
5159
5187
|
const activesRows = env.model.getters.getActiveRows();
|
|
5160
5188
|
if (activesRows.size !== 0) {
|
|
5161
|
-
first =
|
|
5162
|
-
last =
|
|
5189
|
+
first = largeMin([...activesRows]);
|
|
5190
|
+
last = largeMax([...activesRows]);
|
|
5163
5191
|
}
|
|
5164
5192
|
else {
|
|
5165
5193
|
const zone = env.model.getters.getSelectedZones()[0];
|
|
@@ -5200,8 +5228,8 @@ const REMOVE_COLUMNS_NAME = (env) => {
|
|
|
5200
5228
|
let last;
|
|
5201
5229
|
const activeCols = env.model.getters.getActiveCols();
|
|
5202
5230
|
if (activeCols.size !== 0) {
|
|
5203
|
-
first =
|
|
5204
|
-
last =
|
|
5231
|
+
first = largeMin([...activeCols]);
|
|
5232
|
+
last = largeMax([...activeCols]);
|
|
5205
5233
|
}
|
|
5206
5234
|
else {
|
|
5207
5235
|
const zone = env.model.getters.getSelectedZones()[0];
|
|
@@ -5270,7 +5298,7 @@ const INSERT_ROWS_BEFORE_ACTION = (env) => {
|
|
|
5270
5298
|
let row;
|
|
5271
5299
|
let quantity;
|
|
5272
5300
|
if (activeRows.size) {
|
|
5273
|
-
row =
|
|
5301
|
+
row = largeMin([...activeRows]);
|
|
5274
5302
|
quantity = activeRows.size;
|
|
5275
5303
|
}
|
|
5276
5304
|
else {
|
|
@@ -5302,7 +5330,7 @@ const INSERT_ROWS_AFTER_ACTION = (env) => {
|
|
|
5302
5330
|
let row;
|
|
5303
5331
|
let quantity;
|
|
5304
5332
|
if (activeRows.size) {
|
|
5305
|
-
row =
|
|
5333
|
+
row = largeMax([...activeRows]);
|
|
5306
5334
|
quantity = activeRows.size;
|
|
5307
5335
|
}
|
|
5308
5336
|
else {
|
|
@@ -5343,7 +5371,7 @@ const INSERT_COLUMNS_BEFORE_ACTION = (env) => {
|
|
|
5343
5371
|
let column;
|
|
5344
5372
|
let quantity;
|
|
5345
5373
|
if (activeCols.size) {
|
|
5346
|
-
column =
|
|
5374
|
+
column = largeMin([...activeCols]);
|
|
5347
5375
|
quantity = activeCols.size;
|
|
5348
5376
|
}
|
|
5349
5377
|
else {
|
|
@@ -5377,7 +5405,7 @@ const INSERT_COLUMNS_AFTER_ACTION = (env) => {
|
|
|
5377
5405
|
let column;
|
|
5378
5406
|
let quantity;
|
|
5379
5407
|
if (activeCols.size) {
|
|
5380
|
-
column =
|
|
5408
|
+
column = largeMax([...activeCols]);
|
|
5381
5409
|
quantity = activeCols.size;
|
|
5382
5410
|
}
|
|
5383
5411
|
else {
|
|
@@ -7933,7 +7961,7 @@ function getBestTimeUnitForScale(labels, format) {
|
|
|
7933
7961
|
return undefined;
|
|
7934
7962
|
}
|
|
7935
7963
|
const labelsTimestamps = labelDates.map((date) => date.getTime());
|
|
7936
|
-
const period =
|
|
7964
|
+
const period = largeMax(labelsTimestamps) - largeMin(labelsTimestamps);
|
|
7937
7965
|
const minUnit = getFormatMinDisplayUnit(format);
|
|
7938
7966
|
if (UNIT_LENGTH.second >= UNIT_LENGTH[minUnit] && Milliseconds.inSeconds(period) < 180) {
|
|
7939
7967
|
return "second";
|
|
@@ -8349,7 +8377,7 @@ function getPieConfiguration(chart, labels) {
|
|
|
8349
8377
|
}
|
|
8350
8378
|
function getPieColors(colors, dataSetsValues) {
|
|
8351
8379
|
const pieColors = [];
|
|
8352
|
-
const maxLength =
|
|
8380
|
+
const maxLength = largeMax(dataSetsValues.map((ds) => ds.data.length));
|
|
8353
8381
|
for (let i = 0; i <= maxLength; i++) {
|
|
8354
8382
|
pieColors.push(colors.next());
|
|
8355
8383
|
}
|
|
@@ -20639,6 +20667,12 @@ class Composer extends owl.Component {
|
|
|
20639
20667
|
onCompleted(text) {
|
|
20640
20668
|
text && this.autoComplete(text);
|
|
20641
20669
|
}
|
|
20670
|
+
onContextMenu(ev) {
|
|
20671
|
+
var _a, _b;
|
|
20672
|
+
if (this.env.model.getters.getEditionMode() === "inactive") {
|
|
20673
|
+
(_b = (_a = this.props).onInputContextMenu) === null || _b === void 0 ? void 0 : _b.call(_a, ev);
|
|
20674
|
+
}
|
|
20675
|
+
}
|
|
20642
20676
|
// ---------------------------------------------------------------------------
|
|
20643
20677
|
// Private
|
|
20644
20678
|
// ---------------------------------------------------------------------------
|
|
@@ -20872,6 +20906,7 @@ class GridComposer extends owl.Component {
|
|
|
20872
20906
|
isDefaultFocus: true,
|
|
20873
20907
|
onComposerContentFocused: this.props.onComposerContentFocused,
|
|
20874
20908
|
onComposerCellFocused: this.props.onComposerCellFocused,
|
|
20909
|
+
onInputContextMenu: this.props.onInputContextMenu,
|
|
20875
20910
|
};
|
|
20876
20911
|
}
|
|
20877
20912
|
get containerStyle() {
|
|
@@ -23022,8 +23057,8 @@ class Grid extends owl.Component {
|
|
|
23022
23057
|
else if (this.env.model.getters.getActiveRows().has(row)) {
|
|
23023
23058
|
type = "ROW";
|
|
23024
23059
|
}
|
|
23025
|
-
const { x, y, width
|
|
23026
|
-
this.toggleContextMenu(type, x + width, y +
|
|
23060
|
+
const { x, y, width } = this.env.model.getters.getVisibleRect(lastZone);
|
|
23061
|
+
this.toggleContextMenu(type, this.canvasPosition.x + x + width, this.canvasPosition.y + y);
|
|
23027
23062
|
}
|
|
23028
23063
|
onCellRightClicked(col, row, { x, y }) {
|
|
23029
23064
|
const zones = this.env.model.getters.getSelectedZones();
|
|
@@ -25189,7 +25224,7 @@ function convertHyperlink(link, cellValue, warningManager) {
|
|
|
25189
25224
|
function getSheetDims(sheet) {
|
|
25190
25225
|
const dims = [0, 0];
|
|
25191
25226
|
for (let row of sheet.rows) {
|
|
25192
|
-
dims[0] = Math.max(dims[0],
|
|
25227
|
+
dims[0] = Math.max(dims[0], largeMax(row.cells.map((cell) => toCartesian(cell.xc).col)));
|
|
25193
25228
|
dims[1] = Math.max(dims[1], row.index);
|
|
25194
25229
|
}
|
|
25195
25230
|
dims[0] = Math.max(dims[0], EXCEL_IMPORT_DEFAULT_NUMBER_OF_COLS);
|
|
@@ -29226,7 +29261,17 @@ class FiltersPlugin extends CorePlugin {
|
|
|
29226
29261
|
}
|
|
29227
29262
|
}
|
|
29228
29263
|
exportForExcel(data) {
|
|
29229
|
-
|
|
29264
|
+
for (const sheet of data.sheets) {
|
|
29265
|
+
for (const filterTable of this.getFilterTables(sheet.id)) {
|
|
29266
|
+
if (zoneToDimension(filterTable.zone).height === 1) {
|
|
29267
|
+
continue;
|
|
29268
|
+
}
|
|
29269
|
+
sheet.filterTables.push({
|
|
29270
|
+
range: zoneToXc(filterTable.zone),
|
|
29271
|
+
filters: [],
|
|
29272
|
+
});
|
|
29273
|
+
}
|
|
29274
|
+
}
|
|
29230
29275
|
}
|
|
29231
29276
|
}
|
|
29232
29277
|
FiltersPlugin.getters = [
|
|
@@ -29282,7 +29327,7 @@ class HeaderSizePlugin extends CorePlugin {
|
|
|
29282
29327
|
for (let headerIndex of [...cmd.elements].sort((a, b) => b - a)) {
|
|
29283
29328
|
sizes.splice(headerIndex, 1);
|
|
29284
29329
|
}
|
|
29285
|
-
const min =
|
|
29330
|
+
const min = largeMin(cmd.elements);
|
|
29286
29331
|
sizes = sizes.map((size, row) => {
|
|
29287
29332
|
if (cmd.dimension === "ROW" && row >= min) {
|
|
29288
29333
|
// invalidate sizes
|
|
@@ -29510,7 +29555,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
29510
29555
|
if (hiddenElements.size >= elements) {
|
|
29511
29556
|
return 66 /* CommandResult.TooManyHiddenElements */;
|
|
29512
29557
|
}
|
|
29513
|
-
else if (
|
|
29558
|
+
else if (largeMin(cmd.elements) < 0 || largeMax(cmd.elements) > elements) {
|
|
29514
29559
|
return 86 /* CommandResult.InvalidHeaderIndex */;
|
|
29515
29560
|
}
|
|
29516
29561
|
else {
|
|
@@ -30185,7 +30230,7 @@ class SheetPlugin extends CorePlugin {
|
|
|
30185
30230
|
const elements = cmd.dimension === "COL"
|
|
30186
30231
|
? this.getNumberCols(cmd.sheetId)
|
|
30187
30232
|
: this.getNumberRows(cmd.sheetId);
|
|
30188
|
-
if (
|
|
30233
|
+
if (largeMin(cmd.elements) < 0 || largeMax(cmd.elements) > elements) {
|
|
30189
30234
|
return 86 /* CommandResult.InvalidHeaderIndex */;
|
|
30190
30235
|
}
|
|
30191
30236
|
else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
@@ -31558,13 +31603,13 @@ class AutomaticSumPlugin extends UIPlugin {
|
|
|
31558
31603
|
const cells = this.getters.getCellsInZone(sheet.id, zone);
|
|
31559
31604
|
const cellPositions = range(end, -1, -1);
|
|
31560
31605
|
const invalidCells = cellPositions.filter((position) => { var _a; return cells[position] && !((_a = cells[position]) === null || _a === void 0 ? void 0 : _a.isAutoSummable); });
|
|
31561
|
-
const maxValidPosition =
|
|
31606
|
+
const maxValidPosition = largeMax(invalidCells);
|
|
31562
31607
|
const numberSequences = groupConsecutive(cellPositions.filter((position) => this.isNumber(cells[position])));
|
|
31563
31608
|
const firstSequence = numberSequences[0] || [];
|
|
31564
|
-
if (
|
|
31609
|
+
if (largeMax(firstSequence) < maxValidPosition) {
|
|
31565
31610
|
return Infinity;
|
|
31566
31611
|
}
|
|
31567
|
-
return
|
|
31612
|
+
return largeMin(firstSequence);
|
|
31568
31613
|
}
|
|
31569
31614
|
shouldFindData(sheetId, zone) {
|
|
31570
31615
|
return this.getters.isEmpty(sheetId, zone) || this.getters.isSingleCellOrMerge(sheetId, zone);
|
|
@@ -33247,13 +33292,13 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
|
|
|
33247
33292
|
.filter(this.isCellValueNumber);
|
|
33248
33293
|
switch (threshold.type) {
|
|
33249
33294
|
case "value":
|
|
33250
|
-
const result = functionName === "max" ?
|
|
33295
|
+
const result = functionName === "max" ? largeMax(rangeValues) : largeMin(rangeValues);
|
|
33251
33296
|
return result;
|
|
33252
33297
|
case "number":
|
|
33253
33298
|
return Number(threshold.value);
|
|
33254
33299
|
case "percentage":
|
|
33255
|
-
const min =
|
|
33256
|
-
const max =
|
|
33300
|
+
const min = largeMin(rangeValues);
|
|
33301
|
+
const max = largeMax(rangeValues);
|
|
33257
33302
|
const delta = max - min;
|
|
33258
33303
|
return min + (delta * Number(threshold.value)) / 100;
|
|
33259
33304
|
case "percentile":
|
|
@@ -37990,7 +38035,7 @@ class SheetUIPlugin extends UIPlugin {
|
|
|
37990
38035
|
getColMaxWidth(sheetId, index) {
|
|
37991
38036
|
const cellsPositions = positions(this.getters.getColsZone(sheetId, index, index));
|
|
37992
38037
|
const sizes = cellsPositions.map((position) => this.getCellWidth(sheetId, position));
|
|
37993
|
-
return Math.max(0,
|
|
38038
|
+
return Math.max(0, largeMax(sizes));
|
|
37994
38039
|
}
|
|
37995
38040
|
splitWordToSpecificWidth(ctx, word, width, style) {
|
|
37996
38041
|
const wordWidth = computeTextWidth(ctx, word, style);
|
|
@@ -40341,8 +40386,8 @@ class RangeAdapter {
|
|
|
40341
40386
|
let newRange = range;
|
|
40342
40387
|
let changeType = "NONE";
|
|
40343
40388
|
for (let group of groups) {
|
|
40344
|
-
const min =
|
|
40345
|
-
const max =
|
|
40389
|
+
const min = largeMin(group);
|
|
40390
|
+
const max = largeMax(group);
|
|
40346
40391
|
if (range.zone[start] <= min && min <= range.zone[end]) {
|
|
40347
40392
|
const toRemove = Math.min(range.zone[end], max) - min + 1;
|
|
40348
40393
|
changeType = "RESIZE";
|
|
@@ -41600,7 +41645,7 @@ function addLineChart(chart) {
|
|
|
41600
41645
|
}
|
|
41601
41646
|
function addDoughnutChart(chart, chartSheetIndex, data, { holeSize } = { holeSize: 50 }) {
|
|
41602
41647
|
const colors = new ChartColors();
|
|
41603
|
-
const maxLength =
|
|
41648
|
+
const maxLength = largeMax(chart.dataSets.map((ds) => getRangeSize(ds.range, chartSheetIndex, data)));
|
|
41604
41649
|
const doughnutColors = range(0, maxLength).map(() => toXlsxHexColor(colors.next()));
|
|
41605
41650
|
const dataSetsNodes = [];
|
|
41606
41651
|
for (const [dsIndex, dataset] of Object.entries(chart.dataSets).reverse()) {
|
|
@@ -43295,6 +43340,6 @@ exports.setTranslationMethod = setTranslationMethod;
|
|
|
43295
43340
|
exports.tokenize = tokenize;
|
|
43296
43341
|
|
|
43297
43342
|
|
|
43298
|
-
__info__.version = '16.0.
|
|
43299
|
-
__info__.date = '2024-
|
|
43300
|
-
__info__.hash = '
|
|
43343
|
+
__info__.version = '16.0.37';
|
|
43344
|
+
__info__.date = '2024-04-05T13:58:08.848Z';
|
|
43345
|
+
__info__.hash = 'e95827b';
|
package/dist/o-spreadsheet.d.ts
CHANGED
|
@@ -5538,6 +5538,7 @@ interface ComposerProps {
|
|
|
5538
5538
|
focus: "inactive" | "cellFocus" | "contentFocus";
|
|
5539
5539
|
onComposerContentFocused: () => void;
|
|
5540
5540
|
onComposerCellFocused?: (content: String) => void;
|
|
5541
|
+
onInputContextMenu?: (event: MouseEvent) => void;
|
|
5541
5542
|
isDefaultFocus?: boolean;
|
|
5542
5543
|
}
|
|
5543
5544
|
interface ComposerState$1 {
|
|
@@ -5600,6 +5601,7 @@ declare class Composer extends Component<ComposerProps, SpreadsheetChildEnv> {
|
|
|
5600
5601
|
onClick(): void;
|
|
5601
5602
|
onBlur(): void;
|
|
5602
5603
|
onCompleted(text: string | undefined): void;
|
|
5604
|
+
onContextMenu(ev: MouseEvent): void;
|
|
5603
5605
|
private processContent;
|
|
5604
5606
|
private getContent;
|
|
5605
5607
|
private getColoredTokens;
|
|
@@ -5618,6 +5620,7 @@ interface Props$i {
|
|
|
5618
5620
|
content: string;
|
|
5619
5621
|
onComposerContentFocused: () => void;
|
|
5620
5622
|
onComposerCellFocused: () => void;
|
|
5623
|
+
onInputContextMenu: (event: MouseEvent) => void;
|
|
5621
5624
|
}
|
|
5622
5625
|
/**
|
|
5623
5626
|
* This component is a composer which positions itself on the grid at the anchor cell.
|
|
@@ -988,7 +988,7 @@ function getItemId(item, itemsDic) {
|
|
|
988
988
|
}
|
|
989
989
|
// Generate new Id if the item didn't exist in the dictionary
|
|
990
990
|
const ids = Object.keys(itemsDic);
|
|
991
|
-
const maxId = ids.length === 0 ? 0 :
|
|
991
|
+
const maxId = ids.length === 0 ? 0 : largeMax(ids.map((id) => parseInt(id, 10)));
|
|
992
992
|
itemsDic[maxId + 1] = item;
|
|
993
993
|
return maxId + 1;
|
|
994
994
|
}
|
|
@@ -1134,6 +1134,34 @@ function memoize(func) {
|
|
|
1134
1134
|
return cache.get(args[0]);
|
|
1135
1135
|
},
|
|
1136
1136
|
}[funcName];
|
|
1137
|
+
}
|
|
1138
|
+
/**
|
|
1139
|
+
* Alternative to Math.max that works with large arrays.
|
|
1140
|
+
* Typically useful for arrays bigger than 100k elements.
|
|
1141
|
+
*/
|
|
1142
|
+
function largeMax(array) {
|
|
1143
|
+
let len = array.length;
|
|
1144
|
+
if (len < 100000)
|
|
1145
|
+
return Math.max(...array);
|
|
1146
|
+
let max = -Infinity;
|
|
1147
|
+
while (len--) {
|
|
1148
|
+
max = array[len] > max ? array[len] : max;
|
|
1149
|
+
}
|
|
1150
|
+
return max;
|
|
1151
|
+
}
|
|
1152
|
+
/**
|
|
1153
|
+
* Alternative to Math.min that works with large arrays.
|
|
1154
|
+
* Typically useful for arrays bigger than 100k elements.
|
|
1155
|
+
*/
|
|
1156
|
+
function largeMin(array) {
|
|
1157
|
+
let len = array.length;
|
|
1158
|
+
if (len < 100000)
|
|
1159
|
+
return Math.min(...array);
|
|
1160
|
+
let min = +Infinity;
|
|
1161
|
+
while (len--) {
|
|
1162
|
+
min = array[len] < min ? array[len] : min;
|
|
1163
|
+
}
|
|
1164
|
+
return min;
|
|
1137
1165
|
}
|
|
1138
1166
|
|
|
1139
1167
|
const RBA_REGEX = /rgba?\(|\s+|\)/gi;
|
|
@@ -5096,8 +5124,8 @@ const DELETE_CONTENT_ROWS_NAME = (env) => {
|
|
|
5096
5124
|
let last;
|
|
5097
5125
|
const activesRows = env.model.getters.getActiveRows();
|
|
5098
5126
|
if (activesRows.size !== 0) {
|
|
5099
|
-
first =
|
|
5100
|
-
last =
|
|
5127
|
+
first = largeMin([...activesRows]);
|
|
5128
|
+
last = largeMax([...activesRows]);
|
|
5101
5129
|
}
|
|
5102
5130
|
else {
|
|
5103
5131
|
const zone = env.model.getters.getSelectedZones()[0];
|
|
@@ -5125,8 +5153,8 @@ const DELETE_CONTENT_COLUMNS_NAME = (env) => {
|
|
|
5125
5153
|
let last;
|
|
5126
5154
|
const activeCols = env.model.getters.getActiveCols();
|
|
5127
5155
|
if (activeCols.size !== 0) {
|
|
5128
|
-
first =
|
|
5129
|
-
last =
|
|
5156
|
+
first = largeMin([...activeCols]);
|
|
5157
|
+
last = largeMax([...activeCols]);
|
|
5130
5158
|
}
|
|
5131
5159
|
else {
|
|
5132
5160
|
const zone = env.model.getters.getSelectedZones()[0];
|
|
@@ -5154,8 +5182,8 @@ const REMOVE_ROWS_NAME = (env) => {
|
|
|
5154
5182
|
let last;
|
|
5155
5183
|
const activesRows = env.model.getters.getActiveRows();
|
|
5156
5184
|
if (activesRows.size !== 0) {
|
|
5157
|
-
first =
|
|
5158
|
-
last =
|
|
5185
|
+
first = largeMin([...activesRows]);
|
|
5186
|
+
last = largeMax([...activesRows]);
|
|
5159
5187
|
}
|
|
5160
5188
|
else {
|
|
5161
5189
|
const zone = env.model.getters.getSelectedZones()[0];
|
|
@@ -5196,8 +5224,8 @@ const REMOVE_COLUMNS_NAME = (env) => {
|
|
|
5196
5224
|
let last;
|
|
5197
5225
|
const activeCols = env.model.getters.getActiveCols();
|
|
5198
5226
|
if (activeCols.size !== 0) {
|
|
5199
|
-
first =
|
|
5200
|
-
last =
|
|
5227
|
+
first = largeMin([...activeCols]);
|
|
5228
|
+
last = largeMax([...activeCols]);
|
|
5201
5229
|
}
|
|
5202
5230
|
else {
|
|
5203
5231
|
const zone = env.model.getters.getSelectedZones()[0];
|
|
@@ -5266,7 +5294,7 @@ const INSERT_ROWS_BEFORE_ACTION = (env) => {
|
|
|
5266
5294
|
let row;
|
|
5267
5295
|
let quantity;
|
|
5268
5296
|
if (activeRows.size) {
|
|
5269
|
-
row =
|
|
5297
|
+
row = largeMin([...activeRows]);
|
|
5270
5298
|
quantity = activeRows.size;
|
|
5271
5299
|
}
|
|
5272
5300
|
else {
|
|
@@ -5298,7 +5326,7 @@ const INSERT_ROWS_AFTER_ACTION = (env) => {
|
|
|
5298
5326
|
let row;
|
|
5299
5327
|
let quantity;
|
|
5300
5328
|
if (activeRows.size) {
|
|
5301
|
-
row =
|
|
5329
|
+
row = largeMax([...activeRows]);
|
|
5302
5330
|
quantity = activeRows.size;
|
|
5303
5331
|
}
|
|
5304
5332
|
else {
|
|
@@ -5339,7 +5367,7 @@ const INSERT_COLUMNS_BEFORE_ACTION = (env) => {
|
|
|
5339
5367
|
let column;
|
|
5340
5368
|
let quantity;
|
|
5341
5369
|
if (activeCols.size) {
|
|
5342
|
-
column =
|
|
5370
|
+
column = largeMin([...activeCols]);
|
|
5343
5371
|
quantity = activeCols.size;
|
|
5344
5372
|
}
|
|
5345
5373
|
else {
|
|
@@ -5373,7 +5401,7 @@ const INSERT_COLUMNS_AFTER_ACTION = (env) => {
|
|
|
5373
5401
|
let column;
|
|
5374
5402
|
let quantity;
|
|
5375
5403
|
if (activeCols.size) {
|
|
5376
|
-
column =
|
|
5404
|
+
column = largeMax([...activeCols]);
|
|
5377
5405
|
quantity = activeCols.size;
|
|
5378
5406
|
}
|
|
5379
5407
|
else {
|
|
@@ -7929,7 +7957,7 @@ function getBestTimeUnitForScale(labels, format) {
|
|
|
7929
7957
|
return undefined;
|
|
7930
7958
|
}
|
|
7931
7959
|
const labelsTimestamps = labelDates.map((date) => date.getTime());
|
|
7932
|
-
const period =
|
|
7960
|
+
const period = largeMax(labelsTimestamps) - largeMin(labelsTimestamps);
|
|
7933
7961
|
const minUnit = getFormatMinDisplayUnit(format);
|
|
7934
7962
|
if (UNIT_LENGTH.second >= UNIT_LENGTH[minUnit] && Milliseconds.inSeconds(period) < 180) {
|
|
7935
7963
|
return "second";
|
|
@@ -8345,7 +8373,7 @@ function getPieConfiguration(chart, labels) {
|
|
|
8345
8373
|
}
|
|
8346
8374
|
function getPieColors(colors, dataSetsValues) {
|
|
8347
8375
|
const pieColors = [];
|
|
8348
|
-
const maxLength =
|
|
8376
|
+
const maxLength = largeMax(dataSetsValues.map((ds) => ds.data.length));
|
|
8349
8377
|
for (let i = 0; i <= maxLength; i++) {
|
|
8350
8378
|
pieColors.push(colors.next());
|
|
8351
8379
|
}
|
|
@@ -20635,6 +20663,12 @@ class Composer extends Component {
|
|
|
20635
20663
|
onCompleted(text) {
|
|
20636
20664
|
text && this.autoComplete(text);
|
|
20637
20665
|
}
|
|
20666
|
+
onContextMenu(ev) {
|
|
20667
|
+
var _a, _b;
|
|
20668
|
+
if (this.env.model.getters.getEditionMode() === "inactive") {
|
|
20669
|
+
(_b = (_a = this.props).onInputContextMenu) === null || _b === void 0 ? void 0 : _b.call(_a, ev);
|
|
20670
|
+
}
|
|
20671
|
+
}
|
|
20638
20672
|
// ---------------------------------------------------------------------------
|
|
20639
20673
|
// Private
|
|
20640
20674
|
// ---------------------------------------------------------------------------
|
|
@@ -20868,6 +20902,7 @@ class GridComposer extends Component {
|
|
|
20868
20902
|
isDefaultFocus: true,
|
|
20869
20903
|
onComposerContentFocused: this.props.onComposerContentFocused,
|
|
20870
20904
|
onComposerCellFocused: this.props.onComposerCellFocused,
|
|
20905
|
+
onInputContextMenu: this.props.onInputContextMenu,
|
|
20871
20906
|
};
|
|
20872
20907
|
}
|
|
20873
20908
|
get containerStyle() {
|
|
@@ -23018,8 +23053,8 @@ class Grid extends Component {
|
|
|
23018
23053
|
else if (this.env.model.getters.getActiveRows().has(row)) {
|
|
23019
23054
|
type = "ROW";
|
|
23020
23055
|
}
|
|
23021
|
-
const { x, y, width
|
|
23022
|
-
this.toggleContextMenu(type, x + width, y +
|
|
23056
|
+
const { x, y, width } = this.env.model.getters.getVisibleRect(lastZone);
|
|
23057
|
+
this.toggleContextMenu(type, this.canvasPosition.x + x + width, this.canvasPosition.y + y);
|
|
23023
23058
|
}
|
|
23024
23059
|
onCellRightClicked(col, row, { x, y }) {
|
|
23025
23060
|
const zones = this.env.model.getters.getSelectedZones();
|
|
@@ -25185,7 +25220,7 @@ function convertHyperlink(link, cellValue, warningManager) {
|
|
|
25185
25220
|
function getSheetDims(sheet) {
|
|
25186
25221
|
const dims = [0, 0];
|
|
25187
25222
|
for (let row of sheet.rows) {
|
|
25188
|
-
dims[0] = Math.max(dims[0],
|
|
25223
|
+
dims[0] = Math.max(dims[0], largeMax(row.cells.map((cell) => toCartesian(cell.xc).col)));
|
|
25189
25224
|
dims[1] = Math.max(dims[1], row.index);
|
|
25190
25225
|
}
|
|
25191
25226
|
dims[0] = Math.max(dims[0], EXCEL_IMPORT_DEFAULT_NUMBER_OF_COLS);
|
|
@@ -29222,7 +29257,17 @@ class FiltersPlugin extends CorePlugin {
|
|
|
29222
29257
|
}
|
|
29223
29258
|
}
|
|
29224
29259
|
exportForExcel(data) {
|
|
29225
|
-
|
|
29260
|
+
for (const sheet of data.sheets) {
|
|
29261
|
+
for (const filterTable of this.getFilterTables(sheet.id)) {
|
|
29262
|
+
if (zoneToDimension(filterTable.zone).height === 1) {
|
|
29263
|
+
continue;
|
|
29264
|
+
}
|
|
29265
|
+
sheet.filterTables.push({
|
|
29266
|
+
range: zoneToXc(filterTable.zone),
|
|
29267
|
+
filters: [],
|
|
29268
|
+
});
|
|
29269
|
+
}
|
|
29270
|
+
}
|
|
29226
29271
|
}
|
|
29227
29272
|
}
|
|
29228
29273
|
FiltersPlugin.getters = [
|
|
@@ -29278,7 +29323,7 @@ class HeaderSizePlugin extends CorePlugin {
|
|
|
29278
29323
|
for (let headerIndex of [...cmd.elements].sort((a, b) => b - a)) {
|
|
29279
29324
|
sizes.splice(headerIndex, 1);
|
|
29280
29325
|
}
|
|
29281
|
-
const min =
|
|
29326
|
+
const min = largeMin(cmd.elements);
|
|
29282
29327
|
sizes = sizes.map((size, row) => {
|
|
29283
29328
|
if (cmd.dimension === "ROW" && row >= min) {
|
|
29284
29329
|
// invalidate sizes
|
|
@@ -29506,7 +29551,7 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
29506
29551
|
if (hiddenElements.size >= elements) {
|
|
29507
29552
|
return 66 /* CommandResult.TooManyHiddenElements */;
|
|
29508
29553
|
}
|
|
29509
|
-
else if (
|
|
29554
|
+
else if (largeMin(cmd.elements) < 0 || largeMax(cmd.elements) > elements) {
|
|
29510
29555
|
return 86 /* CommandResult.InvalidHeaderIndex */;
|
|
29511
29556
|
}
|
|
29512
29557
|
else {
|
|
@@ -30181,7 +30226,7 @@ class SheetPlugin extends CorePlugin {
|
|
|
30181
30226
|
const elements = cmd.dimension === "COL"
|
|
30182
30227
|
? this.getNumberCols(cmd.sheetId)
|
|
30183
30228
|
: this.getNumberRows(cmd.sheetId);
|
|
30184
|
-
if (
|
|
30229
|
+
if (largeMin(cmd.elements) < 0 || largeMax(cmd.elements) > elements) {
|
|
30185
30230
|
return 86 /* CommandResult.InvalidHeaderIndex */;
|
|
30186
30231
|
}
|
|
30187
30232
|
else if (this.checkElementsIncludeAllNonFrozenHeaders(cmd.sheetId, cmd.dimension, cmd.elements)) {
|
|
@@ -31554,13 +31599,13 @@ class AutomaticSumPlugin extends UIPlugin {
|
|
|
31554
31599
|
const cells = this.getters.getCellsInZone(sheet.id, zone);
|
|
31555
31600
|
const cellPositions = range(end, -1, -1);
|
|
31556
31601
|
const invalidCells = cellPositions.filter((position) => { var _a; return cells[position] && !((_a = cells[position]) === null || _a === void 0 ? void 0 : _a.isAutoSummable); });
|
|
31557
|
-
const maxValidPosition =
|
|
31602
|
+
const maxValidPosition = largeMax(invalidCells);
|
|
31558
31603
|
const numberSequences = groupConsecutive(cellPositions.filter((position) => this.isNumber(cells[position])));
|
|
31559
31604
|
const firstSequence = numberSequences[0] || [];
|
|
31560
|
-
if (
|
|
31605
|
+
if (largeMax(firstSequence) < maxValidPosition) {
|
|
31561
31606
|
return Infinity;
|
|
31562
31607
|
}
|
|
31563
|
-
return
|
|
31608
|
+
return largeMin(firstSequence);
|
|
31564
31609
|
}
|
|
31565
31610
|
shouldFindData(sheetId, zone) {
|
|
31566
31611
|
return this.getters.isEmpty(sheetId, zone) || this.getters.isSingleCellOrMerge(sheetId, zone);
|
|
@@ -33243,13 +33288,13 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
|
|
|
33243
33288
|
.filter(this.isCellValueNumber);
|
|
33244
33289
|
switch (threshold.type) {
|
|
33245
33290
|
case "value":
|
|
33246
|
-
const result = functionName === "max" ?
|
|
33291
|
+
const result = functionName === "max" ? largeMax(rangeValues) : largeMin(rangeValues);
|
|
33247
33292
|
return result;
|
|
33248
33293
|
case "number":
|
|
33249
33294
|
return Number(threshold.value);
|
|
33250
33295
|
case "percentage":
|
|
33251
|
-
const min =
|
|
33252
|
-
const max =
|
|
33296
|
+
const min = largeMin(rangeValues);
|
|
33297
|
+
const max = largeMax(rangeValues);
|
|
33253
33298
|
const delta = max - min;
|
|
33254
33299
|
return min + (delta * Number(threshold.value)) / 100;
|
|
33255
33300
|
case "percentile":
|
|
@@ -37986,7 +38031,7 @@ class SheetUIPlugin extends UIPlugin {
|
|
|
37986
38031
|
getColMaxWidth(sheetId, index) {
|
|
37987
38032
|
const cellsPositions = positions(this.getters.getColsZone(sheetId, index, index));
|
|
37988
38033
|
const sizes = cellsPositions.map((position) => this.getCellWidth(sheetId, position));
|
|
37989
|
-
return Math.max(0,
|
|
38034
|
+
return Math.max(0, largeMax(sizes));
|
|
37990
38035
|
}
|
|
37991
38036
|
splitWordToSpecificWidth(ctx, word, width, style) {
|
|
37992
38037
|
const wordWidth = computeTextWidth(ctx, word, style);
|
|
@@ -40337,8 +40382,8 @@ class RangeAdapter {
|
|
|
40337
40382
|
let newRange = range;
|
|
40338
40383
|
let changeType = "NONE";
|
|
40339
40384
|
for (let group of groups) {
|
|
40340
|
-
const min =
|
|
40341
|
-
const max =
|
|
40385
|
+
const min = largeMin(group);
|
|
40386
|
+
const max = largeMax(group);
|
|
40342
40387
|
if (range.zone[start] <= min && min <= range.zone[end]) {
|
|
40343
40388
|
const toRemove = Math.min(range.zone[end], max) - min + 1;
|
|
40344
40389
|
changeType = "RESIZE";
|
|
@@ -41596,7 +41641,7 @@ function addLineChart(chart) {
|
|
|
41596
41641
|
}
|
|
41597
41642
|
function addDoughnutChart(chart, chartSheetIndex, data, { holeSize } = { holeSize: 50 }) {
|
|
41598
41643
|
const colors = new ChartColors();
|
|
41599
|
-
const maxLength =
|
|
41644
|
+
const maxLength = largeMax(chart.dataSets.map((ds) => getRangeSize(ds.range, chartSheetIndex, data)));
|
|
41600
41645
|
const doughnutColors = range(0, maxLength).map(() => toXlsxHexColor(colors.next()));
|
|
41601
41646
|
const dataSetsNodes = [];
|
|
41602
41647
|
for (const [dsIndex, dataset] of Object.entries(chart.dataSets).reverse()) {
|
|
@@ -43263,6 +43308,6 @@ function addFunction(functionName, functionDescription) {
|
|
|
43263
43308
|
export { AbstractChart, CommandResult, CorePlugin, DATETIME_FORMAT, DispatchResult, EvaluationError, Model, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, __info__, addFunction, astToFormula, cellTypes, compile, components, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, invalidateEvaluationCommands, load, parse, readonlyAllowedCommands, registries, setTranslationMethod, tokenize };
|
|
43264
43309
|
|
|
43265
43310
|
|
|
43266
|
-
__info__.version = '16.0.
|
|
43267
|
-
__info__.date = '2024-
|
|
43268
|
-
__info__.hash = '
|
|
43311
|
+
__info__.version = '16.0.37';
|
|
43312
|
+
__info__.date = '2024-04-05T13:58:08.848Z';
|
|
43313
|
+
__info__.hash = 'e95827b';
|