@odoo/o-spreadsheet 17.0.31 → 17.0.33
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 +104 -96
- package/dist/o-spreadsheet.d.ts +2 -1
- package/dist/o-spreadsheet.esm.js +104 -96
- package/dist/o-spreadsheet.iife.js +104 -96
- package/dist/o-spreadsheet.iife.min.js +224 -224
- package/dist/o_spreadsheet.xml +3 -3
- package/package.json +8 -11
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* This file is generated by o-spreadsheet build tools. Do not edit it.
|
|
4
4
|
* @see https://github.com/odoo/o-spreadsheet
|
|
5
|
-
* @version 17.0.
|
|
6
|
-
* @date 2024-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 17.0.33
|
|
6
|
+
* @date 2024-08-02T08:18:55.061Z
|
|
7
|
+
* @hash 4ad4049
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
'use strict';
|
|
@@ -594,7 +594,7 @@ function debounce(func, wait, immediate) {
|
|
|
594
594
|
let timeout;
|
|
595
595
|
return function () {
|
|
596
596
|
const context = this;
|
|
597
|
-
const args = arguments;
|
|
597
|
+
const args = Array.from(arguments);
|
|
598
598
|
function later() {
|
|
599
599
|
timeout = null;
|
|
600
600
|
if (!immediate) {
|
|
@@ -797,7 +797,7 @@ function isNumberBetween(value, min, max) {
|
|
|
797
797
|
*/
|
|
798
798
|
function largeMax(array) {
|
|
799
799
|
let len = array.length;
|
|
800
|
-
if (len <
|
|
800
|
+
if (len < 100_000)
|
|
801
801
|
return Math.max(...array);
|
|
802
802
|
let max = -Infinity;
|
|
803
803
|
while (len--) {
|
|
@@ -811,7 +811,7 @@ function largeMax(array) {
|
|
|
811
811
|
*/
|
|
812
812
|
function largeMin(array) {
|
|
813
813
|
let len = array.length;
|
|
814
|
-
if (len <
|
|
814
|
+
if (len < 100_000)
|
|
815
815
|
return Math.min(...array);
|
|
816
816
|
let min = +Infinity;
|
|
817
817
|
while (len--) {
|
|
@@ -2566,13 +2566,16 @@ function operandToRegExp(operand) {
|
|
|
2566
2566
|
}
|
|
2567
2567
|
return new RegExp("^" + exp + "$", "i");
|
|
2568
2568
|
}
|
|
2569
|
-
function evaluatePredicate(value = "", criterion) {
|
|
2569
|
+
function evaluatePredicate(value = "", criterion, locale) {
|
|
2570
2570
|
const { operator, operand } = criterion;
|
|
2571
2571
|
if (operand === undefined || value === null || operand === null) {
|
|
2572
2572
|
return false;
|
|
2573
2573
|
}
|
|
2574
2574
|
if (typeof operand === "number" && operator === "=") {
|
|
2575
|
-
|
|
2575
|
+
if (typeof value === "string" && (isNumber(value, locale) || isDateTime(value, locale))) {
|
|
2576
|
+
return toNumber(value, locale) === operand;
|
|
2577
|
+
}
|
|
2578
|
+
return value === operand;
|
|
2576
2579
|
}
|
|
2577
2580
|
if (operator === "<>" || operator === "=") {
|
|
2578
2581
|
let result;
|
|
@@ -2651,7 +2654,7 @@ function visitMatchingRanges(args, cb, locale, isQuery = false) {
|
|
|
2651
2654
|
for (let k = 0; k < countArg - 1; k += 2) {
|
|
2652
2655
|
const criteriaValue = args[k][i][j];
|
|
2653
2656
|
const criterion = predicates[k / 2];
|
|
2654
|
-
validatedPredicates = evaluatePredicate(criteriaValue ?? undefined, criterion);
|
|
2657
|
+
validatedPredicates = evaluatePredicate(criteriaValue ?? undefined, criterion, locale);
|
|
2655
2658
|
if (!validatedPredicates) {
|
|
2656
2659
|
break;
|
|
2657
2660
|
}
|
|
@@ -5900,7 +5903,7 @@ function textCell(value, localeFormat) {
|
|
|
5900
5903
|
function numberCell(value, localeFormat) {
|
|
5901
5904
|
return {
|
|
5902
5905
|
type: CellValueType.number,
|
|
5903
|
-
value: value || 0,
|
|
5906
|
+
value: value || 0, // necessary to avoid "-0" and NaN values,
|
|
5904
5907
|
format: localeFormat.format,
|
|
5905
5908
|
isAutoSummable: true,
|
|
5906
5909
|
defaultAlign: "right",
|
|
@@ -8433,8 +8436,8 @@ function truncateLabel(label) {
|
|
|
8433
8436
|
function getDefaultChartJsRuntime(chart, labels, fontColor, { format, locale, truncateLabels = true }) {
|
|
8434
8437
|
const options = {
|
|
8435
8438
|
// https://www.chartjs.org/docs/latest/general/responsive.html
|
|
8436
|
-
responsive: true,
|
|
8437
|
-
maintainAspectRatio: false,
|
|
8439
|
+
responsive: true, // will resize when its container is resized
|
|
8440
|
+
maintainAspectRatio: false, // doesn't maintain the aspect ration (width/height =2 by default) so the user has the choice of the exact layout
|
|
8438
8441
|
layout: {
|
|
8439
8442
|
padding: { left: 20, right: 20, top: chart.title ? 10 : 25, bottom: 10 },
|
|
8440
8443
|
},
|
|
@@ -8743,7 +8746,7 @@ function getBarConfiguration(chart, labels, localeFormat) {
|
|
|
8743
8746
|
},
|
|
8744
8747
|
y: {
|
|
8745
8748
|
position: chart.verticalAxisPosition,
|
|
8746
|
-
beginAtZero: true,
|
|
8749
|
+
beginAtZero: true, // the origin of the y axis is always zero
|
|
8747
8750
|
ticks: {
|
|
8748
8751
|
color: fontColor,
|
|
8749
8752
|
callback: (value) => {
|
|
@@ -9397,7 +9400,7 @@ function getLineConfiguration(chart, labels, options) {
|
|
|
9397
9400
|
},
|
|
9398
9401
|
y: {
|
|
9399
9402
|
position: chart.verticalAxisPosition,
|
|
9400
|
-
beginAtZero: true,
|
|
9403
|
+
beginAtZero: true, // the origin of the y axis is always zero
|
|
9401
9404
|
ticks: {
|
|
9402
9405
|
color: fontColor,
|
|
9403
9406
|
callback: (value) => {
|
|
@@ -9485,7 +9488,7 @@ function createLineChartRuntime(chart, getters) {
|
|
|
9485
9488
|
const dataset = {
|
|
9486
9489
|
label,
|
|
9487
9490
|
data,
|
|
9488
|
-
tension: 0,
|
|
9491
|
+
tension: 0, // 0 -> render straight lines, which is much faster
|
|
9489
9492
|
borderColor: color,
|
|
9490
9493
|
backgroundColor,
|
|
9491
9494
|
pointBackgroundColor: color,
|
|
@@ -9596,7 +9599,7 @@ class PieChart extends AbstractChart {
|
|
|
9596
9599
|
...this.getDefinition(),
|
|
9597
9600
|
backgroundColor: toXlsxHexColor(this.background || BACKGROUND_CHART_COLOR),
|
|
9598
9601
|
fontColor: toXlsxHexColor(chartFontColor(this.background)),
|
|
9599
|
-
verticalAxisPosition: "left",
|
|
9602
|
+
verticalAxisPosition: "left", //TODO ExcelChartDefinition should be adapted, but can be done later
|
|
9600
9603
|
dataSets,
|
|
9601
9604
|
labelRange,
|
|
9602
9605
|
};
|
|
@@ -26700,7 +26703,9 @@ class Composer extends owl.Component {
|
|
|
26700
26703
|
argToFocus: 0,
|
|
26701
26704
|
});
|
|
26702
26705
|
compositionActive = false;
|
|
26706
|
+
spreadsheetRect = useSpreadsheetRect();
|
|
26703
26707
|
get assistantStyle() {
|
|
26708
|
+
const composerRect = this.composerRef.el.getBoundingClientRect();
|
|
26704
26709
|
const assistantStyle = {};
|
|
26705
26710
|
assistantStyle["min-width"] = `${this.props.rect?.width || ASSISTANT_WIDTH}px`;
|
|
26706
26711
|
if (this.autoCompleteState.type === "function") {
|
|
@@ -26723,6 +26728,10 @@ class Composer extends owl.Component {
|
|
|
26723
26728
|
assistantStyle.right = `0px`;
|
|
26724
26729
|
}
|
|
26725
26730
|
}
|
|
26731
|
+
if (this.props.focus === "contentFocus" &&
|
|
26732
|
+
composerRect.left + ASSISTANT_WIDTH > this.spreadsheetRect.width) {
|
|
26733
|
+
assistantStyle.right = "0px";
|
|
26734
|
+
}
|
|
26726
26735
|
return cssPropertiesToCss(assistantStyle);
|
|
26727
26736
|
}
|
|
26728
26737
|
// we can't allow input events to be triggered while we remove and add back the content of the composer in processContent
|
|
@@ -28371,10 +28380,13 @@ function useCellHovered(env, gridRef, callback) {
|
|
|
28371
28380
|
row: undefined,
|
|
28372
28381
|
};
|
|
28373
28382
|
const { Date } = window;
|
|
28374
|
-
let x =
|
|
28375
|
-
let y =
|
|
28383
|
+
let x = undefined;
|
|
28384
|
+
let y = undefined;
|
|
28376
28385
|
let lastMoved = 0;
|
|
28377
28386
|
function getPosition() {
|
|
28387
|
+
if (x === undefined || y === undefined) {
|
|
28388
|
+
return { col: -1, row: -1 };
|
|
28389
|
+
}
|
|
28378
28390
|
const col = env.model.getters.getColIndex(x);
|
|
28379
28391
|
const row = env.model.getters.getRowIndex(y);
|
|
28380
28392
|
return { col, row };
|
|
@@ -29578,7 +29590,7 @@ class VerticalScrollBar extends owl.Component {
|
|
|
29578
29590
|
onScroll(offset) {
|
|
29579
29591
|
const { scrollX } = this.env.model.getters.getActiveSheetDOMScrollInfo();
|
|
29580
29592
|
this.env.model.dispatch("SET_VIEWPORT_OFFSET", {
|
|
29581
|
-
offsetX: scrollX,
|
|
29593
|
+
offsetX: scrollX, // offsetX is the same
|
|
29582
29594
|
offsetY: offset,
|
|
29583
29595
|
});
|
|
29584
29596
|
}
|
|
@@ -29789,8 +29801,8 @@ class Grid extends owl.Component {
|
|
|
29789
29801
|
"CTRL+SHIFT+L": () => this.setHorizontalAlign("left"),
|
|
29790
29802
|
"CTRL+SHIFT+R": () => this.setHorizontalAlign("right"),
|
|
29791
29803
|
"CTRL+SHIFT+V": () => PASTE_VALUE_ACTION(this.env),
|
|
29792
|
-
"CTRL+SHIFT+<": () => this.clearFormatting(),
|
|
29793
|
-
"CTRL+<": () => this.clearFormatting(),
|
|
29804
|
+
"CTRL+SHIFT+<": () => this.clearFormatting(), // for qwerty
|
|
29805
|
+
"CTRL+<": () => this.clearFormatting(), // for azerty
|
|
29794
29806
|
"CTRL+SHIFT+ ": () => {
|
|
29795
29807
|
this.env.model.selection.selectAll();
|
|
29796
29808
|
},
|
|
@@ -30604,10 +30616,10 @@ function convertCFCellIsOperator(xlsxCfOperator) {
|
|
|
30604
30616
|
const CF_TYPE_CONVERSION_MAP = {
|
|
30605
30617
|
aboveAverage: undefined,
|
|
30606
30618
|
expression: undefined,
|
|
30607
|
-
cellIs: undefined,
|
|
30608
|
-
colorScale: undefined,
|
|
30619
|
+
cellIs: undefined, // exist but isn't an operator in o_spreadsheet
|
|
30620
|
+
colorScale: undefined, // exist but isn't an operator in o_spreadsheet
|
|
30609
30621
|
dataBar: undefined,
|
|
30610
|
-
iconSet: undefined,
|
|
30622
|
+
iconSet: undefined, // exist but isn't an operator in o_spreadsheet
|
|
30611
30623
|
top10: undefined,
|
|
30612
30624
|
uniqueValues: undefined,
|
|
30613
30625
|
duplicateValues: undefined,
|
|
@@ -30842,7 +30854,7 @@ const XLSX_INDEXED_COLORS = {
|
|
|
30842
30854
|
61: "993366",
|
|
30843
30855
|
62: "333399",
|
|
30844
30856
|
63: "333333",
|
|
30845
|
-
64: "000000",
|
|
30857
|
+
64: "000000", // system foreground
|
|
30846
30858
|
65: "FFFFFF", // system background
|
|
30847
30859
|
};
|
|
30848
30860
|
const IMAGE_MIMETYPE_TO_EXTENSION_MAPPING = {
|
|
@@ -34483,12 +34495,13 @@ class BordersPlugin extends CorePlugin {
|
|
|
34483
34495
|
this.clearBorders(cmd.sheetId, cmd.target);
|
|
34484
34496
|
break;
|
|
34485
34497
|
case "REMOVE_COLUMNS_ROWS":
|
|
34486
|
-
|
|
34498
|
+
const elements = [...cmd.elements].sort((a, b) => b - a);
|
|
34499
|
+
for (const group of groupConsecutive(elements)) {
|
|
34487
34500
|
if (cmd.dimension === "COL") {
|
|
34488
|
-
this.shiftBordersHorizontally(cmd.sheetId,
|
|
34501
|
+
this.shiftBordersHorizontally(cmd.sheetId, group[group.length - 1] + 1, -group.length);
|
|
34489
34502
|
}
|
|
34490
34503
|
else {
|
|
34491
|
-
this.shiftBordersVertically(cmd.sheetId,
|
|
34504
|
+
this.shiftBordersVertically(cmd.sheetId, group[group.length - 1] + 1, -group.length);
|
|
34492
34505
|
}
|
|
34493
34506
|
}
|
|
34494
34507
|
break;
|
|
@@ -39549,12 +39562,7 @@ class SheetPlugin extends CorePlugin {
|
|
|
39549
39562
|
});
|
|
39550
39563
|
}
|
|
39551
39564
|
if (colIndex > deletedColumn) {
|
|
39552
|
-
this.
|
|
39553
|
-
sheetId: sheet.id,
|
|
39554
|
-
cellId: cellId,
|
|
39555
|
-
col: colIndex - 1,
|
|
39556
|
-
row: rowIndex,
|
|
39557
|
-
});
|
|
39565
|
+
this.setNewPosition(cellId, sheet.id, colIndex - 1, rowIndex);
|
|
39558
39566
|
}
|
|
39559
39567
|
}
|
|
39560
39568
|
}
|
|
@@ -39564,7 +39572,7 @@ class SheetPlugin extends CorePlugin {
|
|
|
39564
39572
|
* Move the cells after a column or rows insertion
|
|
39565
39573
|
*/
|
|
39566
39574
|
moveCellsOnAddition(sheet, addedElement, quantity, dimension) {
|
|
39567
|
-
const
|
|
39575
|
+
const updates = [];
|
|
39568
39576
|
for (let rowIndex = 0; rowIndex < sheet.rows.length; rowIndex++) {
|
|
39569
39577
|
const row = sheet.rows[rowIndex];
|
|
39570
39578
|
if (dimension !== "rows" || rowIndex >= addedElement) {
|
|
@@ -39573,20 +39581,20 @@ class SheetPlugin extends CorePlugin {
|
|
|
39573
39581
|
const cellId = row.cells[i];
|
|
39574
39582
|
if (cellId) {
|
|
39575
39583
|
if (dimension === "rows" || colIndex >= addedElement) {
|
|
39576
|
-
|
|
39577
|
-
type: "UPDATE_CELL_POSITION",
|
|
39584
|
+
updates.push({
|
|
39578
39585
|
sheetId: sheet.id,
|
|
39579
39586
|
cellId: cellId,
|
|
39580
39587
|
col: colIndex + (dimension === "columns" ? quantity : 0),
|
|
39581
39588
|
row: rowIndex + (dimension === "rows" ? quantity : 0),
|
|
39589
|
+
type: "UPDATE_CELL_POSITION",
|
|
39582
39590
|
});
|
|
39583
39591
|
}
|
|
39584
39592
|
}
|
|
39585
39593
|
}
|
|
39586
39594
|
}
|
|
39587
39595
|
}
|
|
39588
|
-
for (let
|
|
39589
|
-
this.
|
|
39596
|
+
for (let update of updates.reverse()) {
|
|
39597
|
+
this.updateCellPosition(update);
|
|
39590
39598
|
}
|
|
39591
39599
|
}
|
|
39592
39600
|
/**
|
|
@@ -39619,12 +39627,7 @@ class SheetPlugin extends CorePlugin {
|
|
|
39619
39627
|
const colIndex = Number(i);
|
|
39620
39628
|
const cellId = row.cells[i];
|
|
39621
39629
|
if (cellId) {
|
|
39622
|
-
this.
|
|
39623
|
-
sheetId: sheet.id,
|
|
39624
|
-
cellId: cellId,
|
|
39625
|
-
col: colIndex,
|
|
39626
|
-
row: rowIndex - numberRows,
|
|
39627
|
-
});
|
|
39630
|
+
this.setNewPosition(cellId, sheet.id, colIndex, rowIndex - numberRows);
|
|
39628
39631
|
}
|
|
39629
39632
|
}
|
|
39630
39633
|
}
|
|
@@ -42237,17 +42240,17 @@ function isBadExpression(tokens) {
|
|
|
42237
42240
|
*/
|
|
42238
42241
|
function sortWithClusters(colorsToSort) {
|
|
42239
42242
|
const clusters = [
|
|
42240
|
-
{ leadColor: rgba(255, 0, 0), colors: [] },
|
|
42241
|
-
{ leadColor: rgba(255, 128, 0), colors: [] },
|
|
42242
|
-
{ leadColor: rgba(128, 128, 0), colors: [] },
|
|
42243
|
-
{ leadColor: rgba(128, 255, 0), colors: [] },
|
|
42244
|
-
{ leadColor: rgba(0, 255, 0), colors: [] },
|
|
42245
|
-
{ leadColor: rgba(0, 255, 128), colors: [] },
|
|
42246
|
-
{ leadColor: rgba(0, 255, 255), colors: [] },
|
|
42247
|
-
{ leadColor: rgba(0, 127, 255), colors: [] },
|
|
42248
|
-
{ leadColor: rgba(0, 0, 255), colors: [] },
|
|
42249
|
-
{ leadColor: rgba(127, 0, 255), colors: [] },
|
|
42250
|
-
{ leadColor: rgba(128, 0, 128), colors: [] },
|
|
42243
|
+
{ leadColor: rgba(255, 0, 0), colors: [] }, // red
|
|
42244
|
+
{ leadColor: rgba(255, 128, 0), colors: [] }, // orange
|
|
42245
|
+
{ leadColor: rgba(128, 128, 0), colors: [] }, // yellow
|
|
42246
|
+
{ leadColor: rgba(128, 255, 0), colors: [] }, // chartreuse
|
|
42247
|
+
{ leadColor: rgba(0, 255, 0), colors: [] }, // green
|
|
42248
|
+
{ leadColor: rgba(0, 255, 128), colors: [] }, // spring green
|
|
42249
|
+
{ leadColor: rgba(0, 255, 255), colors: [] }, // cyan
|
|
42250
|
+
{ leadColor: rgba(0, 127, 255), colors: [] }, // azure
|
|
42251
|
+
{ leadColor: rgba(0, 0, 255), colors: [] }, // blue
|
|
42252
|
+
{ leadColor: rgba(127, 0, 255), colors: [] }, // violet
|
|
42253
|
+
{ leadColor: rgba(128, 0, 128), colors: [] }, // magenta
|
|
42251
42254
|
{ leadColor: rgba(255, 0, 128), colors: [] }, // rose
|
|
42252
42255
|
];
|
|
42253
42256
|
for (const color of colorsToSort.map(colorToRGBA)) {
|
|
@@ -42553,40 +42556,45 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
|
|
|
42553
42556
|
getComputedStyles(sheetId) {
|
|
42554
42557
|
const computedStyle = {};
|
|
42555
42558
|
for (let cf of this.getters.getConditionalFormats(sheetId).reverse()) {
|
|
42556
|
-
|
|
42557
|
-
|
|
42558
|
-
|
|
42559
|
-
|
|
42560
|
-
|
|
42561
|
-
|
|
42562
|
-
|
|
42563
|
-
|
|
42564
|
-
|
|
42565
|
-
|
|
42566
|
-
|
|
42567
|
-
for (let
|
|
42568
|
-
|
|
42569
|
-
|
|
42570
|
-
|
|
42571
|
-
const
|
|
42572
|
-
|
|
42573
|
-
|
|
42574
|
-
|
|
42575
|
-
|
|
42576
|
-
|
|
42559
|
+
try {
|
|
42560
|
+
switch (cf.rule.type) {
|
|
42561
|
+
case "ColorScaleRule":
|
|
42562
|
+
for (let range of cf.ranges) {
|
|
42563
|
+
this.applyColorScale(sheetId, range, cf.rule, computedStyle);
|
|
42564
|
+
}
|
|
42565
|
+
break;
|
|
42566
|
+
case "CellIsRule":
|
|
42567
|
+
const formulas = cf.rule.values.map((value) => value.startsWith("=") ? compile(value) : undefined);
|
|
42568
|
+
for (let ref of cf.ranges) {
|
|
42569
|
+
const zone = this.getters.getRangeFromSheetXC(sheetId, ref).zone;
|
|
42570
|
+
for (let row = zone.top; row <= zone.bottom; row++) {
|
|
42571
|
+
for (let col = zone.left; col <= zone.right; col++) {
|
|
42572
|
+
const predicate = this.rulePredicate[cf.rule.type];
|
|
42573
|
+
const target = { sheetId, col, row };
|
|
42574
|
+
const values = cf.rule.values.map((value, i) => {
|
|
42575
|
+
const compiledFormula = formulas[i];
|
|
42576
|
+
if (compiledFormula) {
|
|
42577
|
+
return this.getters.getTranslatedCellFormula(sheetId, col - zone.left, row - zone.top, {
|
|
42578
|
+
...compiledFormula,
|
|
42579
|
+
dependencies: compiledFormula.dependencies.map((d) => this.getters.getRangeFromSheetXC(sheetId, d)),
|
|
42580
|
+
});
|
|
42581
|
+
}
|
|
42582
|
+
return value;
|
|
42583
|
+
});
|
|
42584
|
+
if (predicate && predicate(target, { ...cf.rule, values })) {
|
|
42585
|
+
if (!computedStyle[col])
|
|
42586
|
+
computedStyle[col] = [];
|
|
42587
|
+
// we must combine all the properties of all the CF rules applied to the given cell
|
|
42588
|
+
computedStyle[col][row] = Object.assign(computedStyle[col]?.[row] || {}, cf.rule.style);
|
|
42577
42589
|
}
|
|
42578
|
-
return value;
|
|
42579
|
-
});
|
|
42580
|
-
if (predicate && predicate(target, { ...cf.rule, values })) {
|
|
42581
|
-
if (!computedStyle[col])
|
|
42582
|
-
computedStyle[col] = [];
|
|
42583
|
-
// we must combine all the properties of all the CF rules applied to the given cell
|
|
42584
|
-
computedStyle[col][row] = Object.assign(computedStyle[col]?.[row] || {}, cf.rule.style);
|
|
42585
42590
|
}
|
|
42586
42591
|
}
|
|
42587
42592
|
}
|
|
42588
|
-
|
|
42589
|
-
|
|
42593
|
+
break;
|
|
42594
|
+
}
|
|
42595
|
+
}
|
|
42596
|
+
catch (_) {
|
|
42597
|
+
// we ignore the errors within the evaluation of a rule
|
|
42590
42598
|
}
|
|
42591
42599
|
}
|
|
42592
42600
|
return computedStyle;
|
|
@@ -52152,7 +52160,7 @@ class BottomBar extends owl.Component {
|
|
|
52152
52160
|
.map((sheetEl) => sheetEl.getBoundingClientRect())
|
|
52153
52161
|
.map((rect) => ({
|
|
52154
52162
|
x: rect.x,
|
|
52155
|
-
width: rect.width - 1,
|
|
52163
|
+
width: rect.width - 1, // -1 to compensate negative margin
|
|
52156
52164
|
y: rect.y,
|
|
52157
52165
|
height: rect.height,
|
|
52158
52166
|
}));
|
|
@@ -52377,7 +52385,7 @@ class RowGroup extends AbstractHeaderGroup {
|
|
|
52377
52385
|
}
|
|
52378
52386
|
return cssPropertiesToCss({
|
|
52379
52387
|
top: `${groupBox.headerRect.height / 2}px`,
|
|
52380
|
-
left: `calc(50% - 1px)`,
|
|
52388
|
+
left: `calc(50% - 1px)`, // -1px: we want the border to be on the center
|
|
52381
52389
|
width: `30%`,
|
|
52382
52390
|
height: `calc(100% - ${groupBox.headerRect.height / 2}px)`,
|
|
52383
52391
|
"border-left": `1px solid ${HEADER_GROUPING_BORDER_COLOR}`,
|
|
@@ -52429,7 +52437,7 @@ class ColGroup extends AbstractHeaderGroup {
|
|
|
52429
52437
|
return "";
|
|
52430
52438
|
}
|
|
52431
52439
|
return cssPropertiesToCss({
|
|
52432
|
-
top: `calc(50% - 1px)`,
|
|
52440
|
+
top: `calc(50% - 1px)`, // -1px: we want the border to be on the center
|
|
52433
52441
|
left: `${groupBox.headerRect.width / 2}px`,
|
|
52434
52442
|
width: `calc(100% - ${groupBox.headerRect.width / 2}px)`,
|
|
52435
52443
|
height: `30%`,
|
|
@@ -53830,7 +53838,7 @@ class Spreadsheet extends owl.Component {
|
|
|
53830
53838
|
const gridColSize = GROUP_LAYER_WIDTH * this.rowLayers.length;
|
|
53831
53839
|
const gridRowSize = GROUP_LAYER_WIDTH * this.colLayers.length;
|
|
53832
53840
|
return cssPropertiesToCss({
|
|
53833
|
-
"grid-template-columns": `${gridColSize ? gridColSize + 2 : 0}px auto`,
|
|
53841
|
+
"grid-template-columns": `${gridColSize ? gridColSize + 2 : 0}px auto`, // +2: margins
|
|
53834
53842
|
"grid-template-rows": `${gridRowSize ? gridRowSize + 2 : 0}px auto`,
|
|
53835
53843
|
});
|
|
53836
53844
|
}
|
|
@@ -55333,7 +55341,7 @@ class SelectionStreamProcessorImpl {
|
|
|
55333
55341
|
}
|
|
55334
55342
|
|
|
55335
55343
|
class StateObserver {
|
|
55336
|
-
changes
|
|
55344
|
+
changes;
|
|
55337
55345
|
commands = [];
|
|
55338
55346
|
/**
|
|
55339
55347
|
* Record the changes which could happen in the given callback, save them in a
|
|
@@ -55365,7 +55373,7 @@ class StateObserver {
|
|
|
55365
55373
|
if (value[key] === val) {
|
|
55366
55374
|
return;
|
|
55367
55375
|
}
|
|
55368
|
-
this.changes
|
|
55376
|
+
this.changes?.push({
|
|
55369
55377
|
path: args,
|
|
55370
55378
|
before: value[key],
|
|
55371
55379
|
after: val,
|
|
@@ -56496,7 +56504,7 @@ function addTableColumns(table, sheetData) {
|
|
|
56496
56504
|
const colHeaderXc = toXC(tableZone.left + i, tableZone.top);
|
|
56497
56505
|
const colName = sheetData.cells[colHeaderXc]?.content || `col${i}`;
|
|
56498
56506
|
const colAttributes = [
|
|
56499
|
-
["id", i + 1],
|
|
56507
|
+
["id", i + 1], // id cannot be 0
|
|
56500
56508
|
["name", colName],
|
|
56501
56509
|
];
|
|
56502
56510
|
columns.push(escapeXml /*xml*/ `<tableColumn ${formatAttributes(colAttributes)}/>`);
|
|
@@ -57578,6 +57586,6 @@ exports.setTranslationMethod = setTranslationMethod;
|
|
|
57578
57586
|
exports.tokenize = tokenize;
|
|
57579
57587
|
|
|
57580
57588
|
|
|
57581
|
-
__info__.version = "17.0.
|
|
57582
|
-
__info__.date = "2024-
|
|
57583
|
-
__info__.hash = "
|
|
57589
|
+
__info__.version = "17.0.33";
|
|
57590
|
+
__info__.date = "2024-08-02T08:18:55.061Z";
|
|
57591
|
+
__info__.hash = "4ad4049";
|
package/dist/o-spreadsheet.d.ts
CHANGED
|
@@ -7250,6 +7250,7 @@ declare class Composer extends Component<ComposerProps, SpreadsheetChildEnv> {
|
|
|
7250
7250
|
autoCompleteState: AutoCompleteState;
|
|
7251
7251
|
functionDescriptionState: FunctionDescriptionState;
|
|
7252
7252
|
private compositionActive;
|
|
7253
|
+
private spreadsheetRect;
|
|
7253
7254
|
get assistantStyle(): string;
|
|
7254
7255
|
shouldProcessInputEvents: boolean;
|
|
7255
7256
|
tokens: EnrichedToken[];
|
|
@@ -7438,7 +7439,7 @@ declare class Spreadsheet extends Component<SpreadsheetProps, SpreadsheetChildEn
|
|
|
7438
7439
|
private keyDownMapping;
|
|
7439
7440
|
private isViewportTooSmall;
|
|
7440
7441
|
get model(): Model;
|
|
7441
|
-
getStyle():
|
|
7442
|
+
getStyle(): "grid-template-rows: auto;" | "grid-template-rows: 63px auto 37px";
|
|
7442
7443
|
setup(): void;
|
|
7443
7444
|
get focusTopBarComposer(): Omit<ComposerFocusType, "cellFocus">;
|
|
7444
7445
|
get focusGridComposer(): ComposerFocusType;
|