@odoo/o-spreadsheet 16.0.62 → 16.0.64
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 +168 -95
- package/dist/o-spreadsheet.d.ts +3 -1
- package/dist/o-spreadsheet.esm.js +168 -95
- package/dist/o-spreadsheet.iife.js +168 -95
- package/dist/o-spreadsheet.iife.min.js +216 -216
- package/dist/o_spreadsheet.xml +18 -11
- package/package.json +2 -1
|
@@ -2399,11 +2399,12 @@ class UuidGenerator {
|
|
|
2399
2399
|
if (this.isFastIdStrategy) {
|
|
2400
2400
|
this.fastIdStart++;
|
|
2401
2401
|
return String(this.fastIdStart);
|
|
2402
|
-
//@ts-ignore
|
|
2403
2402
|
}
|
|
2404
|
-
else if (window.crypto
|
|
2405
|
-
|
|
2406
|
-
|
|
2403
|
+
else if (window.crypto) {
|
|
2404
|
+
return "10000000-1000".replace(/[01]/g, (c) => {
|
|
2405
|
+
const n = Number(c);
|
|
2406
|
+
return (n ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (n / 4)))).toString(16);
|
|
2407
|
+
});
|
|
2407
2408
|
}
|
|
2408
2409
|
else {
|
|
2409
2410
|
// mainly for jest and other browsers that do not have the crypto functionality
|
|
@@ -2421,11 +2422,12 @@ class UuidGenerator {
|
|
|
2421
2422
|
if (this.isFastIdStrategy) {
|
|
2422
2423
|
this.fastIdStart++;
|
|
2423
2424
|
return String(this.fastIdStart);
|
|
2424
|
-
//@ts-ignore
|
|
2425
2425
|
}
|
|
2426
|
-
else if (window.crypto
|
|
2427
|
-
|
|
2428
|
-
|
|
2426
|
+
else if (window.crypto) {
|
|
2427
|
+
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => {
|
|
2428
|
+
const n = Number(c);
|
|
2429
|
+
return (n ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (n / 4)))).toString(16);
|
|
2430
|
+
});
|
|
2429
2431
|
}
|
|
2430
2432
|
else {
|
|
2431
2433
|
// mainly for jest and other browsers that do not have the crypto functionality
|
|
@@ -3582,10 +3584,13 @@ autofillRulesRegistry
|
|
|
3582
3584
|
})
|
|
3583
3585
|
.add("increment_number", {
|
|
3584
3586
|
condition: (cell) => cell.evaluated.type === CellValueType.number,
|
|
3585
|
-
generateRule: (cell, cells) => {
|
|
3587
|
+
generateRule: (cell, cells, direction) => {
|
|
3586
3588
|
const group = getGroup(cell, cells);
|
|
3587
3589
|
let increment = 1;
|
|
3588
|
-
if (group.length
|
|
3590
|
+
if (group.length === 1 && ["up", "left"].includes(direction)) {
|
|
3591
|
+
increment = -1;
|
|
3592
|
+
}
|
|
3593
|
+
else if (group.length == 2) {
|
|
3589
3594
|
increment = (group[1] - group[0]) * 2;
|
|
3590
3595
|
}
|
|
3591
3596
|
else if (group.length > 2) {
|
|
@@ -22185,6 +22190,9 @@ class ColResizer extends AbstractResizer {
|
|
|
22185
22190
|
this.MAX_SIZE_MARGIN = 90;
|
|
22186
22191
|
this.MIN_ELEMENT_SIZE = MIN_COL_WIDTH;
|
|
22187
22192
|
}
|
|
22193
|
+
get sheetId() {
|
|
22194
|
+
return this.env.model.getters.getActiveSheetId();
|
|
22195
|
+
}
|
|
22188
22196
|
_getEvOffset(ev) {
|
|
22189
22197
|
return ev.offsetX;
|
|
22190
22198
|
}
|
|
@@ -22207,10 +22215,10 @@ class ColResizer extends AbstractResizer {
|
|
|
22207
22215
|
return this.env.model.getters.getEdgeScrollCol(position, position, position);
|
|
22208
22216
|
}
|
|
22209
22217
|
_getDimensionsInViewport(index) {
|
|
22210
|
-
return this.env.model.getters.getColDimensionsInViewport(this.
|
|
22218
|
+
return this.env.model.getters.getColDimensionsInViewport(this.sheetId, index);
|
|
22211
22219
|
}
|
|
22212
22220
|
_getElementSize(index) {
|
|
22213
|
-
return this.env.model.getters.getColSize(this.
|
|
22221
|
+
return this.env.model.getters.getColSize(this.sheetId, index);
|
|
22214
22222
|
}
|
|
22215
22223
|
_getMaxSize() {
|
|
22216
22224
|
return this.colResizerRef.el.clientWidth;
|
|
@@ -22221,7 +22229,7 @@ class ColResizer extends AbstractResizer {
|
|
|
22221
22229
|
const cols = this.env.model.getters.getActiveCols();
|
|
22222
22230
|
this.env.model.dispatch("RESIZE_COLUMNS_ROWS", {
|
|
22223
22231
|
dimension: "COL",
|
|
22224
|
-
sheetId: this.
|
|
22232
|
+
sheetId: this.sheetId,
|
|
22225
22233
|
elements: cols.has(index) ? [...cols] : [index],
|
|
22226
22234
|
size,
|
|
22227
22235
|
});
|
|
@@ -22234,7 +22242,7 @@ class ColResizer extends AbstractResizer {
|
|
|
22234
22242
|
elements.push(colIndex);
|
|
22235
22243
|
}
|
|
22236
22244
|
const result = this.env.model.dispatch("MOVE_COLUMNS_ROWS", {
|
|
22237
|
-
sheetId: this.
|
|
22245
|
+
sheetId: this.sheetId,
|
|
22238
22246
|
dimension: "COL",
|
|
22239
22247
|
base: this.state.base,
|
|
22240
22248
|
elements,
|
|
@@ -22253,7 +22261,7 @@ class ColResizer extends AbstractResizer {
|
|
|
22253
22261
|
_fitElementSize(index) {
|
|
22254
22262
|
const cols = this.env.model.getters.getActiveCols();
|
|
22255
22263
|
this.env.model.dispatch("AUTORESIZE_COLUMNS", {
|
|
22256
|
-
sheetId: this.
|
|
22264
|
+
sheetId: this.sheetId,
|
|
22257
22265
|
cols: cols.has(index) ? [...cols] : [index],
|
|
22258
22266
|
});
|
|
22259
22267
|
}
|
|
@@ -22264,7 +22272,7 @@ class ColResizer extends AbstractResizer {
|
|
|
22264
22272
|
return this.env.model.getters.getActiveCols();
|
|
22265
22273
|
}
|
|
22266
22274
|
_getPreviousVisibleElement(index) {
|
|
22267
|
-
const sheetId = this.
|
|
22275
|
+
const sheetId = this.sheetId;
|
|
22268
22276
|
let row;
|
|
22269
22277
|
for (row = index - 1; row >= 0; row--) {
|
|
22270
22278
|
if (!this.env.model.getters.isColHidden(sheetId, row)) {
|
|
@@ -22275,7 +22283,7 @@ class ColResizer extends AbstractResizer {
|
|
|
22275
22283
|
}
|
|
22276
22284
|
unhide(hiddenElements) {
|
|
22277
22285
|
this.env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
|
|
22278
|
-
sheetId: this.
|
|
22286
|
+
sheetId: this.sheetId,
|
|
22279
22287
|
elements: hiddenElements,
|
|
22280
22288
|
dimension: "COL",
|
|
22281
22289
|
});
|
|
@@ -22292,7 +22300,7 @@ css /* scss */ `
|
|
|
22292
22300
|
left: 0;
|
|
22293
22301
|
right: 0;
|
|
22294
22302
|
width: ${HEADER_WIDTH}px;
|
|
22295
|
-
height: 100
|
|
22303
|
+
height: calc(100% - ${HEADER_HEIGHT + SCROLLBAR_WIDTH}px);
|
|
22296
22304
|
&.o-dragging {
|
|
22297
22305
|
cursor: grabbing;
|
|
22298
22306
|
}
|
|
@@ -22355,6 +22363,9 @@ class RowResizer extends AbstractResizer {
|
|
|
22355
22363
|
this.MAX_SIZE_MARGIN = 60;
|
|
22356
22364
|
this.MIN_ELEMENT_SIZE = MIN_ROW_HEIGHT;
|
|
22357
22365
|
}
|
|
22366
|
+
get sheetId() {
|
|
22367
|
+
return this.env.model.getters.getActiveSheetId();
|
|
22368
|
+
}
|
|
22358
22369
|
_getEvOffset(ev) {
|
|
22359
22370
|
return ev.offsetY;
|
|
22360
22371
|
}
|
|
@@ -22377,10 +22388,10 @@ class RowResizer extends AbstractResizer {
|
|
|
22377
22388
|
return this.env.model.getters.getEdgeScrollRow(position, position, position);
|
|
22378
22389
|
}
|
|
22379
22390
|
_getDimensionsInViewport(index) {
|
|
22380
|
-
return this.env.model.getters.getRowDimensionsInViewport(this.
|
|
22391
|
+
return this.env.model.getters.getRowDimensionsInViewport(this.sheetId, index);
|
|
22381
22392
|
}
|
|
22382
22393
|
_getElementSize(index) {
|
|
22383
|
-
return this.env.model.getters.getRowSize(this.
|
|
22394
|
+
return this.env.model.getters.getRowSize(this.sheetId, index);
|
|
22384
22395
|
}
|
|
22385
22396
|
_getMaxSize() {
|
|
22386
22397
|
return this.rowResizerRef.el.clientHeight;
|
|
@@ -22391,7 +22402,7 @@ class RowResizer extends AbstractResizer {
|
|
|
22391
22402
|
const rows = this.env.model.getters.getActiveRows();
|
|
22392
22403
|
this.env.model.dispatch("RESIZE_COLUMNS_ROWS", {
|
|
22393
22404
|
dimension: "ROW",
|
|
22394
|
-
sheetId: this.
|
|
22405
|
+
sheetId: this.sheetId,
|
|
22395
22406
|
elements: rows.has(index) ? [...rows] : [index],
|
|
22396
22407
|
size,
|
|
22397
22408
|
});
|
|
@@ -22404,7 +22415,7 @@ class RowResizer extends AbstractResizer {
|
|
|
22404
22415
|
elements.push(rowIndex);
|
|
22405
22416
|
}
|
|
22406
22417
|
const result = this.env.model.dispatch("MOVE_COLUMNS_ROWS", {
|
|
22407
|
-
sheetId: this.
|
|
22418
|
+
sheetId: this.sheetId,
|
|
22408
22419
|
dimension: "ROW",
|
|
22409
22420
|
base: this.state.base,
|
|
22410
22421
|
elements,
|
|
@@ -22423,7 +22434,7 @@ class RowResizer extends AbstractResizer {
|
|
|
22423
22434
|
_fitElementSize(index) {
|
|
22424
22435
|
const rows = this.env.model.getters.getActiveRows();
|
|
22425
22436
|
this.env.model.dispatch("AUTORESIZE_ROWS", {
|
|
22426
|
-
sheetId: this.
|
|
22437
|
+
sheetId: this.sheetId,
|
|
22427
22438
|
rows: rows.has(index) ? [...rows] : [index],
|
|
22428
22439
|
});
|
|
22429
22440
|
}
|
|
@@ -22434,7 +22445,7 @@ class RowResizer extends AbstractResizer {
|
|
|
22434
22445
|
return this.env.model.getters.getActiveRows();
|
|
22435
22446
|
}
|
|
22436
22447
|
_getPreviousVisibleElement(index) {
|
|
22437
|
-
const sheetId = this.
|
|
22448
|
+
const sheetId = this.sheetId;
|
|
22438
22449
|
let row;
|
|
22439
22450
|
for (row = index - 1; row >= 0; row--) {
|
|
22440
22451
|
if (!this.env.model.getters.isRowHidden(sheetId, row)) {
|
|
@@ -22445,7 +22456,7 @@ class RowResizer extends AbstractResizer {
|
|
|
22445
22456
|
}
|
|
22446
22457
|
unhide(hiddenElements) {
|
|
22447
22458
|
this.env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
|
|
22448
|
-
sheetId: this.
|
|
22459
|
+
sheetId: this.sheetId,
|
|
22449
22460
|
dimension: "ROW",
|
|
22450
22461
|
elements: hiddenElements,
|
|
22451
22462
|
});
|
|
@@ -25523,29 +25534,33 @@ function applyStyleToZone(appliedStyle, zone, cells, styles) {
|
|
|
25523
25534
|
* In all the sheets, replace the table-only references in the formula cells with standard references.
|
|
25524
25535
|
*/
|
|
25525
25536
|
function convertTableFormulaReferences(convertedSheets, xlsxSheets) {
|
|
25526
|
-
for (let
|
|
25527
|
-
const tables = xlsxSheets.find((s) => s.sheetName ===
|
|
25537
|
+
for (let tableSheet of convertedSheets) {
|
|
25538
|
+
const tables = xlsxSheets.find((s) => s.sheetName === tableSheet.name).tables;
|
|
25528
25539
|
for (let table of tables) {
|
|
25529
25540
|
const tabRef = table.name + "[";
|
|
25530
|
-
for (let
|
|
25531
|
-
|
|
25532
|
-
|
|
25533
|
-
|
|
25534
|
-
|
|
25535
|
-
|
|
25536
|
-
|
|
25537
|
-
|
|
25538
|
-
|
|
25539
|
-
|
|
25540
|
-
|
|
25541
|
-
|
|
25541
|
+
for (let sheet of convertedSheets) {
|
|
25542
|
+
for (let xc in sheet.cells) {
|
|
25543
|
+
const cell = sheet.cells[xc];
|
|
25544
|
+
if (cell && cell.content && cell.content.startsWith("=")) {
|
|
25545
|
+
let refIndex;
|
|
25546
|
+
while ((refIndex = cell.content.indexOf(tabRef)) !== -1) {
|
|
25547
|
+
let endIndex = refIndex + tabRef.length;
|
|
25548
|
+
let openBrackets = 1;
|
|
25549
|
+
while (openBrackets > 0 && endIndex < cell.content.length) {
|
|
25550
|
+
if (cell.content[endIndex] === "[") {
|
|
25551
|
+
openBrackets++;
|
|
25552
|
+
}
|
|
25553
|
+
else if (cell.content[endIndex] === "]") {
|
|
25554
|
+
openBrackets--;
|
|
25555
|
+
}
|
|
25556
|
+
endIndex++;
|
|
25557
|
+
}
|
|
25558
|
+
let reference = cell.content.slice(refIndex + tabRef.length, endIndex - 1);
|
|
25559
|
+
const sheetPrefix = tableSheet.id === sheet.id ? "" : tableSheet.name + "!";
|
|
25560
|
+
const convertedRef = convertTableReference(sheetPrefix, reference, table, xc);
|
|
25561
|
+
cell.content =
|
|
25562
|
+
cell.content.slice(0, refIndex) + convertedRef + cell.content.slice(endIndex);
|
|
25542
25563
|
}
|
|
25543
|
-
reference = reference.slice(0, endIndex);
|
|
25544
|
-
const convertedRef = convertTableReference(reference, table, xc);
|
|
25545
|
-
cell.content =
|
|
25546
|
-
cell.content.slice(0, refIndex) +
|
|
25547
|
-
convertedRef +
|
|
25548
|
-
cell.content.slice(tabRef.length + refIndex + endIndex + 1);
|
|
25549
25564
|
}
|
|
25550
25565
|
}
|
|
25551
25566
|
}
|
|
@@ -25553,11 +25568,17 @@ function convertTableFormulaReferences(convertedSheets, xlsxSheets) {
|
|
|
25553
25568
|
}
|
|
25554
25569
|
}
|
|
25555
25570
|
/**
|
|
25556
|
-
* Convert table-specific references in formulas into standard references.
|
|
25571
|
+
* Convert table-specific references in formulas into standard references. A table reference is composed of columns names,
|
|
25572
|
+
* and of keywords determining the rows of the table to reference.
|
|
25557
25573
|
*
|
|
25558
25574
|
* A reference in a table can have the form (only the part between brackets should be given to this function):
|
|
25559
25575
|
* - tableName[colName] : reference to the whole column "colName"
|
|
25576
|
+
* - tableName[#keyword] : reference to the whatever row the keyword refers to
|
|
25560
25577
|
* - tableName[[#keyword], [colName]] : reference to some of the element(s) of the column colName
|
|
25578
|
+
* - tableName[[#keyword], [colName]:[col2Name]] : reference to some of the element(s) of the columns colName to col2Name
|
|
25579
|
+
* - tableName[[#keyword1], [#keyword2], [colName]] : reference to all the rows referenced by the keywords in the column colName
|
|
25580
|
+
* - tableName[[#keyword1], [colName], [#keyword2]]: the keywords and colName can be in any order
|
|
25581
|
+
*
|
|
25561
25582
|
*
|
|
25562
25583
|
* The available keywords are :
|
|
25563
25584
|
* - #All : all the column (including totals)
|
|
@@ -25565,58 +25586,109 @@ function convertTableFormulaReferences(convertedSheets, xlsxSheets) {
|
|
|
25565
25586
|
* - #Headers : only the header of the column
|
|
25566
25587
|
* - #Totals : only the totals of the column
|
|
25567
25588
|
* - #This Row : only the element in the same row as the cell
|
|
25589
|
+
*
|
|
25590
|
+
* Note that the only valid combination of multiple keywords are #Data + #Totals and #Headers + #Data.
|
|
25568
25591
|
*/
|
|
25569
|
-
function convertTableReference(expr, table, cellXc) {
|
|
25570
|
-
|
|
25592
|
+
function convertTableReference(sheetPrefix, expr, table, cellXc) {
|
|
25593
|
+
// TODO: Ideally we'd want to make a real tokenizer, this simple approach won't work if for example the column name
|
|
25594
|
+
// contain # or , characters. But that's probably an edge case that we can ignore for now.
|
|
25595
|
+
const parts = expr.split(",").map((part) => part.trim());
|
|
25571
25596
|
const tableZone = toZone(table.ref);
|
|
25572
|
-
const
|
|
25573
|
-
|
|
25574
|
-
|
|
25575
|
-
|
|
25576
|
-
|
|
25577
|
-
|
|
25578
|
-
|
|
25579
|
-
|
|
25580
|
-
|
|
25581
|
-
|
|
25582
|
-
|
|
25597
|
+
const colIndexes = [];
|
|
25598
|
+
const rowIndexes = [];
|
|
25599
|
+
const foundKeywords = [];
|
|
25600
|
+
for (const part of parts) {
|
|
25601
|
+
if (removeBrackets(part).startsWith("#")) {
|
|
25602
|
+
const keyWord = removeBrackets(part);
|
|
25603
|
+
foundKeywords.push(keyWord);
|
|
25604
|
+
switch (keyWord) {
|
|
25605
|
+
case "#All":
|
|
25606
|
+
rowIndexes.push(tableZone.top, tableZone.bottom);
|
|
25607
|
+
break;
|
|
25608
|
+
case "#Data":
|
|
25609
|
+
const top = table.headerRowCount ? tableZone.top + table.headerRowCount : tableZone.top;
|
|
25610
|
+
const bottom = table.totalsRowCount
|
|
25611
|
+
? tableZone.bottom - table.totalsRowCount
|
|
25612
|
+
: tableZone.bottom;
|
|
25613
|
+
rowIndexes.push(top, bottom);
|
|
25614
|
+
break;
|
|
25615
|
+
case "#This Row":
|
|
25616
|
+
rowIndexes.push(toCartesian(cellXc).row);
|
|
25617
|
+
break;
|
|
25618
|
+
case "#Headers":
|
|
25619
|
+
if (!table.headerRowCount) {
|
|
25620
|
+
return INCORRECT_RANGE_STRING;
|
|
25621
|
+
}
|
|
25622
|
+
rowIndexes.push(tableZone.top);
|
|
25623
|
+
break;
|
|
25624
|
+
case "#Totals":
|
|
25625
|
+
if (!table.totalsRowCount) {
|
|
25626
|
+
return INCORRECT_RANGE_STRING;
|
|
25627
|
+
}
|
|
25628
|
+
rowIndexes.push(tableZone.bottom);
|
|
25629
|
+
break;
|
|
25630
|
+
}
|
|
25583
25631
|
}
|
|
25584
|
-
|
|
25585
|
-
|
|
25586
|
-
|
|
25587
|
-
|
|
25588
|
-
|
|
25589
|
-
|
|
25590
|
-
|
|
25591
|
-
|
|
25592
|
-
|
|
25593
|
-
|
|
25594
|
-
|
|
25595
|
-
|
|
25596
|
-
|
|
25597
|
-
|
|
25598
|
-
|
|
25599
|
-
|
|
25600
|
-
|
|
25601
|
-
if (!table.headerRowCount) {
|
|
25602
|
-
isReferencedZoneValid = false;
|
|
25603
|
-
}
|
|
25604
|
-
break;
|
|
25605
|
-
case "#Totals":
|
|
25606
|
-
refZone.top = refZone.bottom = tableZone.bottom;
|
|
25607
|
-
if (!table.totalsRowCount) {
|
|
25608
|
-
isReferencedZoneValid = false;
|
|
25632
|
+
else {
|
|
25633
|
+
const columns = part
|
|
25634
|
+
.split(":")
|
|
25635
|
+
.map((part) => part.trim())
|
|
25636
|
+
.map(removeBrackets);
|
|
25637
|
+
if (colIndexes.length) {
|
|
25638
|
+
return INCORRECT_RANGE_STRING;
|
|
25639
|
+
}
|
|
25640
|
+
const colRelativeIndex = table.cols.findIndex((col) => col.name === columns[0]);
|
|
25641
|
+
if (colRelativeIndex === -1) {
|
|
25642
|
+
return INCORRECT_RANGE_STRING;
|
|
25643
|
+
}
|
|
25644
|
+
colIndexes.push(colRelativeIndex + tableZone.left);
|
|
25645
|
+
if (columns[1]) {
|
|
25646
|
+
const colRelativeIndex2 = table.cols.findIndex((col) => col.name === columns[1]);
|
|
25647
|
+
if (colRelativeIndex2 === -1) {
|
|
25648
|
+
return INCORRECT_RANGE_STRING;
|
|
25609
25649
|
}
|
|
25610
|
-
|
|
25650
|
+
colIndexes.push(colRelativeIndex2 + tableZone.left);
|
|
25651
|
+
}
|
|
25611
25652
|
}
|
|
25612
|
-
const colRef = refElements[1].slice(1, refElements[1].length - 1);
|
|
25613
|
-
const colRelativeIndex = table.cols.findIndex((col) => col.name === colRef);
|
|
25614
|
-
refZone.left = refZone.right = colRelativeIndex + tableZone.left;
|
|
25615
25653
|
}
|
|
25616
|
-
if (!
|
|
25654
|
+
if (!areKeywordsCompatible(foundKeywords)) {
|
|
25617
25655
|
return INCORRECT_RANGE_STRING;
|
|
25618
25656
|
}
|
|
25619
|
-
|
|
25657
|
+
if (rowIndexes.length === 0) {
|
|
25658
|
+
const top = table.headerRowCount ? tableZone.top + table.headerRowCount : tableZone.top;
|
|
25659
|
+
const bottom = table.totalsRowCount
|
|
25660
|
+
? tableZone.bottom - table.totalsRowCount
|
|
25661
|
+
: tableZone.bottom;
|
|
25662
|
+
rowIndexes.push(top, bottom);
|
|
25663
|
+
}
|
|
25664
|
+
if (colIndexes.length === 0) {
|
|
25665
|
+
colIndexes.push(tableZone.left, tableZone.right);
|
|
25666
|
+
}
|
|
25667
|
+
const refZone = {
|
|
25668
|
+
top: Math.min(...rowIndexes),
|
|
25669
|
+
left: Math.min(...colIndexes),
|
|
25670
|
+
bottom: Math.max(...rowIndexes),
|
|
25671
|
+
right: Math.max(...colIndexes),
|
|
25672
|
+
};
|
|
25673
|
+
return sheetPrefix + zoneToXc(refZone);
|
|
25674
|
+
}
|
|
25675
|
+
function removeBrackets(str) {
|
|
25676
|
+
return str.startsWith("[") && str.endsWith("]") ? str.slice(1, str.length - 1) : str;
|
|
25677
|
+
}
|
|
25678
|
+
function areKeywordsCompatible(keywords) {
|
|
25679
|
+
if (keywords.length < 2) {
|
|
25680
|
+
return true;
|
|
25681
|
+
}
|
|
25682
|
+
else if (keywords.length > 2) {
|
|
25683
|
+
return false;
|
|
25684
|
+
}
|
|
25685
|
+
else if (keywords.includes("#Data") && keywords.includes("#Totals")) {
|
|
25686
|
+
return true;
|
|
25687
|
+
}
|
|
25688
|
+
else if (keywords.includes("#Headers") && keywords.includes("#Data")) {
|
|
25689
|
+
return true;
|
|
25690
|
+
}
|
|
25691
|
+
return false;
|
|
25620
25692
|
}
|
|
25621
25693
|
|
|
25622
25694
|
// -------------------------------------
|
|
@@ -31594,7 +31666,7 @@ class AutofillPlugin extends UIPlugin {
|
|
|
31594
31666
|
getRule(cell, cells) {
|
|
31595
31667
|
const rules = autofillRulesRegistry.getAll().sort((a, b) => a.sequence - b.sequence);
|
|
31596
31668
|
const rule = rules.find((rule) => rule.condition(cell, cells));
|
|
31597
|
-
return rule && rule.generateRule(cell, cells);
|
|
31669
|
+
return rule && this.direction && rule.generateRule(cell, cells, this.direction);
|
|
31598
31670
|
}
|
|
31599
31671
|
/**
|
|
31600
31672
|
* Create the generator to be able to autofill the next cells.
|
|
@@ -37496,7 +37568,8 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
37496
37568
|
? this.getters.getSheetViewVisibleCols()
|
|
37497
37569
|
: this.getters.getSheetViewVisibleRows();
|
|
37498
37570
|
const startIndex = visibleHeaders.findIndex((header) => referenceHeaderIndex >= header);
|
|
37499
|
-
|
|
37571
|
+
let endIndex = visibleHeaders.findIndex((header) => targetHeaderIndex <= header);
|
|
37572
|
+
endIndex = endIndex === -1 ? visibleHeaders.length : endIndex;
|
|
37500
37573
|
const relevantIndexes = visibleHeaders.slice(startIndex, endIndex);
|
|
37501
37574
|
let offset = 0;
|
|
37502
37575
|
for (const i of relevantIndexes) {
|
|
@@ -43689,6 +43762,6 @@ exports.setTranslationMethod = setTranslationMethod;
|
|
|
43689
43762
|
exports.tokenize = tokenize;
|
|
43690
43763
|
|
|
43691
43764
|
|
|
43692
|
-
__info__.version = '16.0.
|
|
43693
|
-
__info__.date = '2025-
|
|
43694
|
-
__info__.hash = '
|
|
43765
|
+
__info__.version = '16.0.64';
|
|
43766
|
+
__info__.date = '2025-03-07T10:29:50.957Z';
|
|
43767
|
+
__info__.hash = '20def15';
|
package/dist/o-spreadsheet.d.ts
CHANGED
|
@@ -5207,7 +5207,7 @@ declare class MenuItemRegistry extends Registry<FullMenuItem> {
|
|
|
5207
5207
|
*/
|
|
5208
5208
|
interface AutofillRule {
|
|
5209
5209
|
condition: (cell: Cell, cells: (Cell | undefined)[]) => boolean;
|
|
5210
|
-
generateRule: (cell: Cell, cells: (Cell | undefined)[]) => AutofillModifier;
|
|
5210
|
+
generateRule: (cell: Cell, cells: (Cell | undefined)[], direction: DIRECTION) => AutofillModifier;
|
|
5211
5211
|
sequence: number;
|
|
5212
5212
|
}
|
|
5213
5213
|
|
|
@@ -5939,6 +5939,7 @@ declare class ColResizer extends AbstractResizer {
|
|
|
5939
5939
|
static template: string;
|
|
5940
5940
|
private colResizerRef;
|
|
5941
5941
|
setup(): void;
|
|
5942
|
+
get sheetId(): UID;
|
|
5942
5943
|
_getEvOffset(ev: MouseEvent): Pixel;
|
|
5943
5944
|
_getViewportOffset(): Pixel;
|
|
5944
5945
|
_getClientPosition(ev: MouseEvent): Pixel;
|
|
@@ -5964,6 +5965,7 @@ declare class RowResizer extends AbstractResizer {
|
|
|
5964
5965
|
static template: string;
|
|
5965
5966
|
setup(): void;
|
|
5966
5967
|
private rowResizerRef;
|
|
5968
|
+
get sheetId(): UID;
|
|
5967
5969
|
_getEvOffset(ev: MouseEvent): Pixel;
|
|
5968
5970
|
_getViewportOffset(): Pixel;
|
|
5969
5971
|
_getClientPosition(ev: MouseEvent): Pixel;
|