@odoo/o-spreadsheet 16.3.31 → 16.3.34
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 +89 -90
- package/dist/o-spreadsheet.d.ts +4 -7
- package/dist/o-spreadsheet.esm.js +89 -90
- package/dist/o-spreadsheet.iife.js +89 -90
- package/dist/o-spreadsheet.iife.min.js +177 -177
- package/dist/o_spreadsheet.xml +6 -5
- package/package.json +1 -1
|
@@ -1127,7 +1127,7 @@ function deepEquals(o1, o2) {
|
|
|
1127
1127
|
if (typeof o1 !== typeof o2)
|
|
1128
1128
|
return false;
|
|
1129
1129
|
if (typeof o1 !== "object")
|
|
1130
|
-
return
|
|
1130
|
+
return false;
|
|
1131
1131
|
// Objects can have different keys if the values are undefined
|
|
1132
1132
|
const keys = new Set();
|
|
1133
1133
|
Object.keys(o1).forEach((key) => keys.add(key));
|
|
@@ -6286,6 +6286,7 @@ class LinkEditor extends owl.Component {
|
|
|
6286
6286
|
this.save();
|
|
6287
6287
|
}
|
|
6288
6288
|
ev.stopPropagation();
|
|
6289
|
+
ev.preventDefault();
|
|
6289
6290
|
break;
|
|
6290
6291
|
case "Escape":
|
|
6291
6292
|
this.cancel();
|
|
@@ -6870,7 +6871,7 @@ function truncateLabel(label) {
|
|
|
6870
6871
|
/**
|
|
6871
6872
|
* Get a default chart js configuration
|
|
6872
6873
|
*/
|
|
6873
|
-
function getDefaultChartJsRuntime(chart, labels, fontColor, dataSetsFormat) {
|
|
6874
|
+
function getDefaultChartJsRuntime(chart, labels, fontColor, dataSetsFormat, truncateLabels = true) {
|
|
6874
6875
|
return {
|
|
6875
6876
|
type: chart.type,
|
|
6876
6877
|
options: {
|
|
@@ -6923,7 +6924,7 @@ function getDefaultChartJsRuntime(chart, labels, fontColor, dataSetsFormat) {
|
|
|
6923
6924
|
},
|
|
6924
6925
|
},
|
|
6925
6926
|
data: {
|
|
6926
|
-
labels: labels.map(truncateLabel),
|
|
6927
|
+
labels: truncateLabels ? labels.map(truncateLabel) : labels,
|
|
6927
6928
|
datasets: [],
|
|
6928
6929
|
},
|
|
6929
6930
|
};
|
|
@@ -7762,9 +7763,9 @@ function canBeLinearChart(labelRange, getters) {
|
|
|
7762
7763
|
}
|
|
7763
7764
|
return true;
|
|
7764
7765
|
}
|
|
7765
|
-
function getLineConfiguration(chart, labels, dataSetFormat) {
|
|
7766
|
+
function getLineConfiguration(chart, labels, dataSetFormat, truncateLabels) {
|
|
7766
7767
|
const fontColor = chartFontColor(chart.background);
|
|
7767
|
-
const config = getDefaultChartJsRuntime(chart, labels, fontColor, dataSetFormat);
|
|
7768
|
+
const config = getDefaultChartJsRuntime(chart, labels, fontColor, dataSetFormat, truncateLabels);
|
|
7768
7769
|
const legend = {
|
|
7769
7770
|
labels: {
|
|
7770
7771
|
fontColor,
|
|
@@ -7839,8 +7840,9 @@ function createLineChartRuntime(chart, getters) {
|
|
|
7839
7840
|
if (chart.aggregated) {
|
|
7840
7841
|
({ labels, dataSetsValues } = aggregateDataForLabels(labels, dataSetsValues));
|
|
7841
7842
|
}
|
|
7843
|
+
const truncateLabels = axisType === "category";
|
|
7842
7844
|
const dataSetFormat = getChartDatasetFormat(getters, chart.dataSets);
|
|
7843
|
-
const config = getLineConfiguration(chart, labels, dataSetFormat);
|
|
7845
|
+
const config = getLineConfiguration(chart, labels, dataSetFormat, truncateLabels);
|
|
7844
7846
|
const labelFormat = getChartLabelFormat(getters, chart.labelRange);
|
|
7845
7847
|
if (axisType === "time") {
|
|
7846
7848
|
config.options.scales.xAxes[0].type = "time";
|
|
@@ -9474,9 +9476,12 @@ const INSERT_LINK_NAME = (env) => {
|
|
|
9474
9476
|
// Filters action
|
|
9475
9477
|
//------------------------------------------------------------------------------
|
|
9476
9478
|
const FILTERS_CREATE_FILTER_TABLE = (env) => {
|
|
9479
|
+
const zones = env.model.getters.getSelectedZones();
|
|
9480
|
+
if (zones.length === 1 && getZoneArea(zones[0]) === 1) {
|
|
9481
|
+
env.model.selection.selectTableAroundSelection();
|
|
9482
|
+
}
|
|
9477
9483
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
9478
|
-
|
|
9479
|
-
interactiveAddFilter(env, sheetId, selection);
|
|
9484
|
+
interactiveAddFilter(env, sheetId, env.model.getters.getSelectedZones());
|
|
9480
9485
|
};
|
|
9481
9486
|
const FILTERS_REMOVE_FILTER_TABLE = (env) => {
|
|
9482
9487
|
const sheetId = env.model.getters.getActiveSheetId();
|
|
@@ -21340,6 +21345,11 @@ class Composer extends owl.Component {
|
|
|
21340
21345
|
onBlur() {
|
|
21341
21346
|
this.isKeyStillDown = false;
|
|
21342
21347
|
}
|
|
21348
|
+
onContextMenu(ev) {
|
|
21349
|
+
if (this.env.model.getters.getEditionMode() === "inactive") {
|
|
21350
|
+
this.props.onInputContextMenu?.(ev);
|
|
21351
|
+
}
|
|
21352
|
+
}
|
|
21343
21353
|
// ---------------------------------------------------------------------------
|
|
21344
21354
|
// Private
|
|
21345
21355
|
// ---------------------------------------------------------------------------
|
|
@@ -21561,6 +21571,7 @@ Composer.props = {
|
|
|
21561
21571
|
onComposerCellFocused: { type: Function, optional: true },
|
|
21562
21572
|
onComposerContentFocused: Function,
|
|
21563
21573
|
isDefaultFocus: { type: Boolean, optional: true },
|
|
21574
|
+
onInputContextMenu: { type: Function, optional: true },
|
|
21564
21575
|
};
|
|
21565
21576
|
|
|
21566
21577
|
const COMPOSER_BORDER_WIDTH = 3 * 0.4 * window.devicePixelRatio || 1;
|
|
@@ -21637,6 +21648,7 @@ class GridComposer extends owl.Component {
|
|
|
21637
21648
|
isDefaultFocus: true,
|
|
21638
21649
|
onComposerContentFocused: this.props.onComposerContentFocused,
|
|
21639
21650
|
onComposerCellFocused: this.props.onComposerCellFocused,
|
|
21651
|
+
onInputContextMenu: this.props.onInputContextMenu,
|
|
21640
21652
|
};
|
|
21641
21653
|
}
|
|
21642
21654
|
get containerStyle() {
|
|
@@ -21725,6 +21737,7 @@ GridComposer.props = {
|
|
|
21725
21737
|
onComposerContentFocused: Function,
|
|
21726
21738
|
gridDims: Object,
|
|
21727
21739
|
onComposerCellFocused: Function,
|
|
21740
|
+
onInputContextMenu: Function,
|
|
21728
21741
|
};
|
|
21729
21742
|
|
|
21730
21743
|
const CSS$1 = css /* scss */ `
|
|
@@ -24060,8 +24073,8 @@ class Grid extends owl.Component {
|
|
|
24060
24073
|
else if (this.env.model.getters.getActiveRows().has(row)) {
|
|
24061
24074
|
type = "ROW";
|
|
24062
24075
|
}
|
|
24063
|
-
const { x, y, width
|
|
24064
|
-
this.toggleContextMenu(type, x + width, y +
|
|
24076
|
+
const { x, y, width } = this.env.model.getters.getVisibleRect(lastZone);
|
|
24077
|
+
this.toggleContextMenu(type, this.canvasPosition.x + x + width, this.canvasPosition.y + y);
|
|
24065
24078
|
}
|
|
24066
24079
|
onCellRightClicked(col, row, { x, y }) {
|
|
24067
24080
|
const zones = this.env.model.getters.getSelectedZones();
|
|
@@ -26388,29 +26401,12 @@ function convertWidthFromExcel(width) {
|
|
|
26388
26401
|
return width;
|
|
26389
26402
|
return Math.round((width / WIDTH_FACTOR) * 100) / 100;
|
|
26390
26403
|
}
|
|
26391
|
-
function convertBorderDescr(descr) {
|
|
26392
|
-
if (!descr) {
|
|
26393
|
-
return undefined;
|
|
26394
|
-
}
|
|
26395
|
-
return {
|
|
26396
|
-
style: descr.style,
|
|
26397
|
-
color: { rgb: descr.color },
|
|
26398
|
-
};
|
|
26399
|
-
}
|
|
26400
26404
|
function extractStyle(cell, data) {
|
|
26401
26405
|
let style = {};
|
|
26402
26406
|
if (cell.style) {
|
|
26403
26407
|
style = data.styles[cell.style];
|
|
26404
26408
|
}
|
|
26405
26409
|
const format = extractFormat(cell, data);
|
|
26406
|
-
const exportedBorder = {};
|
|
26407
|
-
if (cell.border) {
|
|
26408
|
-
const border = data.borders[cell.border];
|
|
26409
|
-
exportedBorder.left = convertBorderDescr(border.left);
|
|
26410
|
-
exportedBorder.right = convertBorderDescr(border.right);
|
|
26411
|
-
exportedBorder.bottom = convertBorderDescr(border.bottom);
|
|
26412
|
-
exportedBorder.top = convertBorderDescr(border.top);
|
|
26413
|
-
}
|
|
26414
26410
|
const styles = {
|
|
26415
26411
|
font: {
|
|
26416
26412
|
size: style?.fontSize || DEFAULT_FONT_SIZE,
|
|
@@ -26424,7 +26420,7 @@ function extractStyle(cell, data) {
|
|
|
26424
26420
|
}
|
|
26425
26421
|
: { reservedAttribute: "none" },
|
|
26426
26422
|
numFmt: format ? { format: format, id: 0 /* id not used for export */ } : undefined,
|
|
26427
|
-
border:
|
|
26423
|
+
border: cell.border || 0,
|
|
26428
26424
|
alignment: {
|
|
26429
26425
|
horizontal: style.align,
|
|
26430
26426
|
vertical: style.verticalAlign
|
|
@@ -26456,15 +26452,12 @@ function extractFormat(cell, data) {
|
|
|
26456
26452
|
return undefined;
|
|
26457
26453
|
}
|
|
26458
26454
|
function normalizeStyle(construct, styles) {
|
|
26459
|
-
const { id: fontId } = pushElement(styles["font"], construct.fonts);
|
|
26460
|
-
const { id: fillId } = pushElement(styles["fill"], construct.fills);
|
|
26461
|
-
const { id: borderId } = pushElement(styles["border"], construct.borders);
|
|
26462
26455
|
// Normalize this
|
|
26463
26456
|
const numFmtId = convertFormat(styles["numFmt"], construct.numFmts);
|
|
26464
26457
|
const style = {
|
|
26465
|
-
fontId,
|
|
26466
|
-
fillId,
|
|
26467
|
-
borderId,
|
|
26458
|
+
fontId: pushElement(styles.font, construct.fonts),
|
|
26459
|
+
fillId: pushElement(styles.fill, construct.fills),
|
|
26460
|
+
borderId: styles.border,
|
|
26468
26461
|
numFmtId,
|
|
26469
26462
|
alignment: {
|
|
26470
26463
|
vertical: styles.alignment.vertical,
|
|
@@ -26472,8 +26465,7 @@ function normalizeStyle(construct, styles) {
|
|
|
26472
26465
|
wrapText: styles.alignment.wrapText,
|
|
26473
26466
|
},
|
|
26474
26467
|
};
|
|
26475
|
-
|
|
26476
|
-
return id;
|
|
26468
|
+
return pushElement(style, construct.styles);
|
|
26477
26469
|
}
|
|
26478
26470
|
function convertFormat(format, numFmtStructure) {
|
|
26479
26471
|
if (!format) {
|
|
@@ -26481,8 +26473,7 @@ function convertFormat(format, numFmtStructure) {
|
|
|
26481
26473
|
}
|
|
26482
26474
|
let formatId = XLSX_FORMAT_MAP[format.format];
|
|
26483
26475
|
if (!formatId) {
|
|
26484
|
-
|
|
26485
|
-
formatId = id + FIRST_NUMFMT_ID;
|
|
26476
|
+
formatId = pushElement(format, numFmtStructure) + FIRST_NUMFMT_ID;
|
|
26486
26477
|
}
|
|
26487
26478
|
return formatId;
|
|
26488
26479
|
}
|
|
@@ -26507,20 +26498,15 @@ function addRelsToFile(relsFiles, path, rel) {
|
|
|
26507
26498
|
return id;
|
|
26508
26499
|
}
|
|
26509
26500
|
function pushElement(property, propertyList) {
|
|
26510
|
-
|
|
26511
|
-
|
|
26512
|
-
|
|
26501
|
+
let len = propertyList.length;
|
|
26502
|
+
const operator = typeof property === "object" ? deepEquals : (a, b) => a === b;
|
|
26503
|
+
for (let i = 0; i < len; i++) {
|
|
26504
|
+
if (operator(property, propertyList[i])) {
|
|
26505
|
+
return i;
|
|
26513
26506
|
}
|
|
26514
26507
|
}
|
|
26515
|
-
|
|
26516
|
-
|
|
26517
|
-
propertyList.push(property);
|
|
26518
|
-
elemId = propertyList.length - 1;
|
|
26519
|
-
}
|
|
26520
|
-
return {
|
|
26521
|
-
id: elemId,
|
|
26522
|
-
list: propertyList,
|
|
26523
|
-
};
|
|
26508
|
+
propertyList[propertyList.length] = property;
|
|
26509
|
+
return propertyList.length - 1;
|
|
26524
26510
|
}
|
|
26525
26511
|
const chartIds = [];
|
|
26526
26512
|
/**
|
|
@@ -27226,7 +27212,25 @@ function parseXML(xmlString, mimeType = "text/xml") {
|
|
|
27226
27212
|
}
|
|
27227
27213
|
return document;
|
|
27228
27214
|
}
|
|
27229
|
-
function
|
|
27215
|
+
function convertBorderDescr(descr) {
|
|
27216
|
+
if (!descr) {
|
|
27217
|
+
return undefined;
|
|
27218
|
+
}
|
|
27219
|
+
return {
|
|
27220
|
+
style: descr.style,
|
|
27221
|
+
color: { rgb: descr.color },
|
|
27222
|
+
};
|
|
27223
|
+
}
|
|
27224
|
+
function getDefaultXLSXStructure(data) {
|
|
27225
|
+
const xlsxBorders = Object.values(data.borders).map((border) => {
|
|
27226
|
+
return {
|
|
27227
|
+
left: convertBorderDescr(border.left),
|
|
27228
|
+
right: convertBorderDescr(border.right),
|
|
27229
|
+
bottom: convertBorderDescr(border.bottom),
|
|
27230
|
+
top: convertBorderDescr(border.top),
|
|
27231
|
+
};
|
|
27232
|
+
});
|
|
27233
|
+
const borders = [{}, ...xlsxBorders];
|
|
27230
27234
|
return {
|
|
27231
27235
|
relsFiles: [],
|
|
27232
27236
|
sharedStrings: [],
|
|
@@ -27249,7 +27253,7 @@ function getDefaultXLSXStructure() {
|
|
|
27249
27253
|
},
|
|
27250
27254
|
],
|
|
27251
27255
|
fills: [{ reservedAttribute: "none" }, { reservedAttribute: "gray125" }],
|
|
27252
|
-
borders
|
|
27256
|
+
borders,
|
|
27253
27257
|
numFmts: [],
|
|
27254
27258
|
dxfs: [],
|
|
27255
27259
|
};
|
|
@@ -29247,7 +29251,7 @@ class BordersPlugin extends CorePlugin {
|
|
|
29247
29251
|
this.clearBorders(cmd.sheetId, cmd.target);
|
|
29248
29252
|
break;
|
|
29249
29253
|
case "REMOVE_COLUMNS_ROWS":
|
|
29250
|
-
for (let el of cmd.elements) {
|
|
29254
|
+
for (let el of [...cmd.elements].sort((a, b) => b - a)) {
|
|
29251
29255
|
if (cmd.dimension === "COL") {
|
|
29252
29256
|
this.shiftBordersHorizontally(cmd.sheetId, el + 1, -1);
|
|
29253
29257
|
}
|
|
@@ -31200,7 +31204,17 @@ class FiltersPlugin extends CorePlugin {
|
|
|
31200
31204
|
}
|
|
31201
31205
|
}
|
|
31202
31206
|
exportForExcel(data) {
|
|
31203
|
-
|
|
31207
|
+
for (const sheet of data.sheets) {
|
|
31208
|
+
for (const filterTable of this.getFilterTables(sheet.id)) {
|
|
31209
|
+
if (zoneToDimension(filterTable.zone).numberOfRows === 1) {
|
|
31210
|
+
continue;
|
|
31211
|
+
}
|
|
31212
|
+
sheet.filterTables.push({
|
|
31213
|
+
range: zoneToXc(filterTable.zone),
|
|
31214
|
+
filters: [],
|
|
31215
|
+
});
|
|
31216
|
+
}
|
|
31217
|
+
}
|
|
31204
31218
|
}
|
|
31205
31219
|
}
|
|
31206
31220
|
|
|
@@ -35068,12 +35082,13 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
35068
35082
|
case "AlterZone":
|
|
35069
35083
|
break;
|
|
35070
35084
|
case "ZonesSelected":
|
|
35085
|
+
const sheetId = this.getters.getActiveSheetId();
|
|
35071
35086
|
let { col, row } = findCellInNewZone(event.previousAnchor.zone, event.anchor.zone);
|
|
35072
35087
|
if (event.mode === "updateAnchor") {
|
|
35073
35088
|
const oldZone = event.previousAnchor.zone;
|
|
35074
35089
|
const newZone = event.anchor.zone;
|
|
35075
35090
|
// altering a zone should not move the viewport in a dimension that wasn't changed
|
|
35076
|
-
const { top, bottom, left, right } = this.
|
|
35091
|
+
const { top, bottom, left, right } = this.getMainInternalViewport(sheetId);
|
|
35077
35092
|
if (oldZone.left === newZone.left && oldZone.right === newZone.right) {
|
|
35078
35093
|
col = left > col || col > right ? left : col;
|
|
35079
35094
|
}
|
|
@@ -35081,10 +35096,9 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
35081
35096
|
row = top > row || row > bottom ? top : row;
|
|
35082
35097
|
}
|
|
35083
35098
|
}
|
|
35084
|
-
const sheetId = this.getters.getActiveSheetId();
|
|
35085
35099
|
col = Math.min(col, this.getters.getNumberCols(sheetId) - 1);
|
|
35086
35100
|
row = Math.min(row, this.getters.getNumberRows(sheetId) - 1);
|
|
35087
|
-
this.refreshViewport(
|
|
35101
|
+
this.refreshViewport(sheetId, { col, row });
|
|
35088
35102
|
break;
|
|
35089
35103
|
}
|
|
35090
35104
|
}
|
|
@@ -35108,16 +35122,16 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
35108
35122
|
this.setSheetViewOffset(cmd.offsetX, cmd.offsetY);
|
|
35109
35123
|
break;
|
|
35110
35124
|
case "SHIFT_VIEWPORT_DOWN":
|
|
35111
|
-
const { top } = this.getActiveMainViewport();
|
|
35112
35125
|
const sheetId = this.getters.getActiveSheetId();
|
|
35113
|
-
const
|
|
35114
|
-
this.
|
|
35126
|
+
const { top, viewportHeight, offsetCorrectionY } = this.getMainInternalViewport(sheetId);
|
|
35127
|
+
const topRowDims = this.getters.getRowDimensions(sheetId, top);
|
|
35128
|
+
this.shiftVertically(topRowDims.start + viewportHeight - offsetCorrectionY);
|
|
35115
35129
|
break;
|
|
35116
35130
|
case "SHIFT_VIEWPORT_UP": {
|
|
35117
|
-
const { top } = this.getActiveMainViewport();
|
|
35118
35131
|
const sheetId = this.getters.getActiveSheetId();
|
|
35119
|
-
const
|
|
35120
|
-
this.
|
|
35132
|
+
const { top, viewportHeight, offsetCorrectionY } = this.getMainInternalViewport(sheetId);
|
|
35133
|
+
const topRowDims = this.getters.getRowDimensions(sheetId, top);
|
|
35134
|
+
this.shiftVertically(topRowDims.end - offsetCorrectionY - viewportHeight);
|
|
35121
35135
|
break;
|
|
35122
35136
|
}
|
|
35123
35137
|
case "REMOVE_COLUMNS_ROWS":
|
|
@@ -35479,17 +35493,6 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
35479
35493
|
const { maxOffsetX, maxOffsetY } = this.getMaximumSheetOffset();
|
|
35480
35494
|
Object.values(this.getSubViewports(sheetId)).forEach((viewport) => viewport.setViewportOffset(clip(offsetX, 0, maxOffsetX), clip(offsetY, 0, maxOffsetY)));
|
|
35481
35495
|
}
|
|
35482
|
-
/**
|
|
35483
|
-
* Clip the vertical offset within the allowed range.
|
|
35484
|
-
* Not above the sheet, nor below the sheet.
|
|
35485
|
-
*/
|
|
35486
|
-
clipOffsetY(offsetY) {
|
|
35487
|
-
const { height } = this.getMainViewportRect();
|
|
35488
|
-
const maxOffset = height - this.sheetViewHeight;
|
|
35489
|
-
offsetY = Math.min(offsetY, maxOffset);
|
|
35490
|
-
offsetY = Math.max(offsetY, 0);
|
|
35491
|
-
return offsetY;
|
|
35492
|
-
}
|
|
35493
35496
|
getViewportOffset(sheetId) {
|
|
35494
35497
|
return {
|
|
35495
35498
|
x: this.viewports[sheetId]?.bottomRight.offsetScrollbarX || 0,
|
|
@@ -35545,12 +35548,15 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
35545
35548
|
* viewport top.
|
|
35546
35549
|
*/
|
|
35547
35550
|
shiftVertically(offset) {
|
|
35548
|
-
const
|
|
35551
|
+
const sheetId = this.getters.getActiveSheetId();
|
|
35552
|
+
const { top } = this.getMainInternalViewport(sheetId);
|
|
35549
35553
|
const { scrollX } = this.getActiveSheetScrollInfo();
|
|
35550
35554
|
this.setSheetViewOffset(scrollX, offset);
|
|
35551
35555
|
const { anchor } = this.getters.getSelection();
|
|
35552
|
-
|
|
35553
|
-
|
|
35556
|
+
if (anchor.cell.row >= this.getters.getPaneDivisions(sheetId).ySplit) {
|
|
35557
|
+
const deltaRow = this.getMainInternalViewport(sheetId).top - top;
|
|
35558
|
+
this.selection.selectCell(anchor.cell.col, anchor.cell.row + deltaRow);
|
|
35559
|
+
}
|
|
35554
35560
|
}
|
|
35555
35561
|
getVisibleFigures() {
|
|
35556
35562
|
const sheetId = this.getters.getActiveSheetId();
|
|
@@ -43100,7 +43106,6 @@ css /* scss */ `
|
|
|
43100
43106
|
cursor: pointer;
|
|
43101
43107
|
}
|
|
43102
43108
|
`;
|
|
43103
|
-
let tKey = 1;
|
|
43104
43109
|
class SpreadsheetDashboard extends owl.Component {
|
|
43105
43110
|
static template = "o-spreadsheet-SpreadsheetDashboard";
|
|
43106
43111
|
static components = {
|
|
@@ -43178,13 +43183,9 @@ class SpreadsheetDashboard extends owl.Component {
|
|
|
43178
43183
|
coordinates: rect,
|
|
43179
43184
|
position: { col, row },
|
|
43180
43185
|
action,
|
|
43181
|
-
// we can't rely on position only because a row or a column could
|
|
43182
|
-
// be inserted at any time.
|
|
43183
|
-
tKey: `${tKey}-${col}-${row}`,
|
|
43184
43186
|
});
|
|
43185
43187
|
}
|
|
43186
43188
|
}
|
|
43187
|
-
tKey++;
|
|
43188
43189
|
return cells;
|
|
43189
43190
|
}
|
|
43190
43191
|
getClickableAction(position) {
|
|
@@ -46322,8 +46323,7 @@ function addContent(content, sharedStrings, forceString = false) {
|
|
|
46322
46323
|
attrs.push(["t", "b"]);
|
|
46323
46324
|
}
|
|
46324
46325
|
else if (forceString || !isNumber(value)) {
|
|
46325
|
-
|
|
46326
|
-
value = id.toString();
|
|
46326
|
+
value = pushElement(content, sharedStrings);
|
|
46327
46327
|
attrs.push(["t", "s"]);
|
|
46328
46328
|
}
|
|
46329
46329
|
return { attrs, node: escapeXml /*xml*/ `<v>${value}</v>` };
|
|
@@ -46448,8 +46448,7 @@ function addCellIsRule(cf, rule, dxfs) {
|
|
|
46448
46448
|
if (rule.style.fillColor) {
|
|
46449
46449
|
dxf.fill = { fgColor: { rgb: rule.style.fillColor } };
|
|
46450
46450
|
}
|
|
46451
|
-
|
|
46452
|
-
ruleAttributes.push(["dxfId", id]);
|
|
46451
|
+
ruleAttributes.push(["dxfId", pushElement(dxf, dxfs)]);
|
|
46453
46452
|
return escapeXml /*xml*/ `
|
|
46454
46453
|
<conditionalFormatting sqref="${cf.ranges.join(" ")}">
|
|
46455
46454
|
<cfRule ${formatAttributes(ruleAttributes)}>
|
|
@@ -47253,7 +47252,7 @@ function addSheetViews(sheet) {
|
|
|
47253
47252
|
*/
|
|
47254
47253
|
function getXLSX(data) {
|
|
47255
47254
|
const files = [];
|
|
47256
|
-
const construct = getDefaultXLSXStructure();
|
|
47255
|
+
const construct = getDefaultXLSXStructure(data);
|
|
47257
47256
|
files.push(createWorkbook(data, construct));
|
|
47258
47257
|
files.push(...createWorksheets(data, construct));
|
|
47259
47258
|
files.push(createStylesSheet(construct));
|
|
@@ -48094,6 +48093,6 @@ exports.setTranslationMethod = setTranslationMethod;
|
|
|
48094
48093
|
exports.tokenize = tokenize;
|
|
48095
48094
|
|
|
48096
48095
|
|
|
48097
|
-
__info__.version = '16.3.
|
|
48098
|
-
__info__.date = '2024-04-
|
|
48099
|
-
__info__.hash = '
|
|
48096
|
+
__info__.version = '16.3.34';
|
|
48097
|
+
__info__.date = '2024-04-26T07:37:12.329Z';
|
|
48098
|
+
__info__.hash = '196324c';
|
package/dist/o-spreadsheet.d.ts
CHANGED
|
@@ -4089,11 +4089,6 @@ declare class SheetViewPlugin extends UIPlugin {
|
|
|
4089
4089
|
private resizeSheetView;
|
|
4090
4090
|
private recomputeViewports;
|
|
4091
4091
|
private setSheetViewOffset;
|
|
4092
|
-
/**
|
|
4093
|
-
* Clip the vertical offset within the allowed range.
|
|
4094
|
-
* Not above the sheet, nor below the sheet.
|
|
4095
|
-
*/
|
|
4096
|
-
private clipOffsetY;
|
|
4097
4092
|
private getViewportOffset;
|
|
4098
4093
|
private resetViewports;
|
|
4099
4094
|
/**
|
|
@@ -6093,7 +6088,6 @@ interface ClickableCell {
|
|
|
6093
6088
|
coordinates: Rect;
|
|
6094
6089
|
position: Position$1;
|
|
6095
6090
|
action: (position: CellPosition, env: SpreadsheetChildEnv) => void;
|
|
6096
|
-
tKey: string;
|
|
6097
6091
|
}
|
|
6098
6092
|
declare class SpreadsheetDashboard extends Component<Props$e, SpreadsheetChildEnv> {
|
|
6099
6093
|
static template: string;
|
|
@@ -6570,6 +6564,7 @@ interface ComposerProps {
|
|
|
6570
6564
|
delimitation?: DOMDimension;
|
|
6571
6565
|
onComposerContentFocused: () => void;
|
|
6572
6566
|
onComposerCellFocused?: (content: String) => void;
|
|
6567
|
+
onInputContextMenu?: (event: MouseEvent) => void;
|
|
6573
6568
|
isDefaultFocus?: boolean;
|
|
6574
6569
|
}
|
|
6575
6570
|
interface ComposerState$1 {
|
|
@@ -6630,6 +6625,7 @@ declare class Composer extends Component<ComposerProps, SpreadsheetChildEnv> {
|
|
|
6630
6625
|
onMousedown(ev: MouseEvent): void;
|
|
6631
6626
|
onClick(): void;
|
|
6632
6627
|
onBlur(): void;
|
|
6628
|
+
onContextMenu(ev: MouseEvent): void;
|
|
6633
6629
|
private processContent;
|
|
6634
6630
|
/**
|
|
6635
6631
|
* Get the HTML content corresponding to the current composer token, divided by lines.
|
|
@@ -6797,6 +6793,7 @@ interface Props$5 {
|
|
|
6797
6793
|
onComposerContentFocused: () => void;
|
|
6798
6794
|
onComposerCellFocused: () => void;
|
|
6799
6795
|
gridDims: DOMDimension;
|
|
6796
|
+
onInputContextMenu: (event: MouseEvent) => void;
|
|
6800
6797
|
}
|
|
6801
6798
|
/**
|
|
6802
6799
|
* This component is a composer which positions itself on the grid at the anchor cell.
|
|
@@ -7101,7 +7098,7 @@ declare function chartFontColor(backgroundColor: Color | undefined): Color;
|
|
|
7101
7098
|
/**
|
|
7102
7099
|
* Get a default chart js configuration
|
|
7103
7100
|
*/
|
|
7104
|
-
declare function getDefaultChartJsRuntime(chart: AbstractChart, labels: string[], fontColor: Color, dataSetsFormat?: Format | undefined): ChartConfiguration;
|
|
7101
|
+
declare function getDefaultChartJsRuntime(chart: AbstractChart, labels: string[], fontColor: Color, dataSetsFormat?: Format | undefined, truncateLabels?: boolean): ChartConfiguration;
|
|
7105
7102
|
/** See https://www.chartjs.org/docs/latest/charts/area.html#filling-modes */
|
|
7106
7103
|
declare function getFillingMode(index: number): "origin" | number;
|
|
7107
7104
|
|