@odoo/o-spreadsheet 16.4.34 → 16.4.36
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 +86 -28
- package/dist/o-spreadsheet.esm.js +86 -28
- package/dist/o-spreadsheet.iife.js +86 -28
- package/dist/o-spreadsheet.iife.min.js +244 -244
- package/dist/o_spreadsheet.xml +3 -3
- package/package.json +1 -1
|
@@ -3236,8 +3236,11 @@ function copyRangeWithNewSheetId(sheetIdFrom, sheetIdTo, range) {
|
|
|
3236
3236
|
/**
|
|
3237
3237
|
* Create a range from a xc. If the xc is empty, this function returns undefined.
|
|
3238
3238
|
*/
|
|
3239
|
-
function
|
|
3240
|
-
|
|
3239
|
+
function createValidRange(getters, sheetId, xc) {
|
|
3240
|
+
if (!xc)
|
|
3241
|
+
return;
|
|
3242
|
+
const range = getters.getRangeFromSheetXC(sheetId, xc);
|
|
3243
|
+
return !(range.invalidSheetName || range.invalidXc) ? range : undefined;
|
|
3241
3244
|
}
|
|
3242
3245
|
/**
|
|
3243
3246
|
* Spread multiple colrows zone to one row/col zone and add a many new input range as needed.
|
|
@@ -5704,6 +5707,7 @@ const FilterMenuPopoverBuilder = {
|
|
|
5704
5707
|
};
|
|
5705
5708
|
|
|
5706
5709
|
const macRegex = /Mac/i;
|
|
5710
|
+
const MODIFIER_KEYS = ["Shift", "Control", "Alt", "Meta"];
|
|
5707
5711
|
/**
|
|
5708
5712
|
* Return true if the event was triggered from
|
|
5709
5713
|
* a child element.
|
|
@@ -5742,6 +5746,31 @@ function* iterateChildren(el) {
|
|
|
5742
5746
|
function getOpenedMenus() {
|
|
5743
5747
|
return Array.from(document.querySelectorAll(".o-spreadsheet .o-menu"));
|
|
5744
5748
|
}
|
|
5749
|
+
const letterRegex = /^[a-zA-Z]$/;
|
|
5750
|
+
/**
|
|
5751
|
+
* Transform a keyboard event into a shortcut string that represent this event. The letters keys will be uppercased.
|
|
5752
|
+
*
|
|
5753
|
+
* @argument ev - The keyboard event to transform
|
|
5754
|
+
* @argument mode - Use either ev.key of ev.code to get the string shortcut
|
|
5755
|
+
*
|
|
5756
|
+
* @example
|
|
5757
|
+
* event : { ctrlKey: true, key: "a" } => "Ctrl+A"
|
|
5758
|
+
* event : { shift: true, alt: true, key: "Home" } => "Alt+Shift+Home"
|
|
5759
|
+
*/
|
|
5760
|
+
function keyboardEventToShortcutString(ev, mode = "key") {
|
|
5761
|
+
let keyDownString = "";
|
|
5762
|
+
if (!MODIFIER_KEYS.includes(ev.key)) {
|
|
5763
|
+
if (isCtrlKey(ev))
|
|
5764
|
+
keyDownString += "Ctrl+";
|
|
5765
|
+
if (ev.altKey)
|
|
5766
|
+
keyDownString += "Alt+";
|
|
5767
|
+
if (ev.shiftKey)
|
|
5768
|
+
keyDownString += "Shift+";
|
|
5769
|
+
}
|
|
5770
|
+
const key = mode === "key" ? ev.key : ev.code;
|
|
5771
|
+
keyDownString += letterRegex.test(key) ? key.toUpperCase() : key;
|
|
5772
|
+
return keyDownString;
|
|
5773
|
+
}
|
|
5745
5774
|
function isMacOS() {
|
|
5746
5775
|
return Boolean(macRegex.test(navigator.userAgent));
|
|
5747
5776
|
}
|
|
@@ -5760,8 +5789,7 @@ function isCtrlKey(ev) {
|
|
|
5760
5789
|
*/
|
|
5761
5790
|
function useSpreadsheetRect() {
|
|
5762
5791
|
const position = owl.useState({ x: 0, y: 0, width: 0, height: 0 });
|
|
5763
|
-
let spreadsheetElement =
|
|
5764
|
-
updatePosition();
|
|
5792
|
+
let spreadsheetElement = null;
|
|
5765
5793
|
function updatePosition() {
|
|
5766
5794
|
if (!spreadsheetElement) {
|
|
5767
5795
|
spreadsheetElement = document.querySelector(".o-spreadsheet");
|
|
@@ -16542,7 +16570,7 @@ class BarChart extends AbstractChart {
|
|
|
16542
16570
|
constructor(definition, sheetId, getters) {
|
|
16543
16571
|
super(definition, sheetId, getters);
|
|
16544
16572
|
this.dataSets = createDataSets(getters, definition.dataSets, sheetId, definition.dataSetsHaveTitle);
|
|
16545
|
-
this.labelRange =
|
|
16573
|
+
this.labelRange = createValidRange(getters, sheetId, definition.labelRange);
|
|
16546
16574
|
this.background = definition.background;
|
|
16547
16575
|
this.verticalAxisPosition = definition.verticalAxisPosition;
|
|
16548
16576
|
this.legendPosition = definition.legendPosition;
|
|
@@ -16787,7 +16815,7 @@ class GaugeChart extends AbstractChart {
|
|
|
16787
16815
|
type = "gauge";
|
|
16788
16816
|
constructor(definition, sheetId, getters) {
|
|
16789
16817
|
super(definition, sheetId, getters);
|
|
16790
|
-
this.dataRange =
|
|
16818
|
+
this.dataRange = createValidRange(this.getters, this.sheetId, definition.dataRange);
|
|
16791
16819
|
this.sectionRule = definition.sectionRule;
|
|
16792
16820
|
this.background = definition.background;
|
|
16793
16821
|
}
|
|
@@ -17126,7 +17154,7 @@ class LineChart extends AbstractChart {
|
|
|
17126
17154
|
constructor(definition, sheetId, getters) {
|
|
17127
17155
|
super(definition, sheetId, getters);
|
|
17128
17156
|
this.dataSets = createDataSets(this.getters, definition.dataSets, sheetId, definition.dataSetsHaveTitle);
|
|
17129
|
-
this.labelRange =
|
|
17157
|
+
this.labelRange = createValidRange(this.getters, sheetId, definition.labelRange);
|
|
17130
17158
|
this.background = definition.background;
|
|
17131
17159
|
this.verticalAxisPosition = definition.verticalAxisPosition;
|
|
17132
17160
|
this.legendPosition = definition.legendPosition;
|
|
@@ -17424,7 +17452,7 @@ class PieChart extends AbstractChart {
|
|
|
17424
17452
|
constructor(definition, sheetId, getters) {
|
|
17425
17453
|
super(definition, sheetId, getters);
|
|
17426
17454
|
this.dataSets = createDataSets(getters, definition.dataSets, sheetId, definition.dataSetsHaveTitle);
|
|
17427
|
-
this.labelRange =
|
|
17455
|
+
this.labelRange = createValidRange(getters, sheetId, definition.labelRange);
|
|
17428
17456
|
this.background = definition.background;
|
|
17429
17457
|
this.legendPosition = definition.legendPosition;
|
|
17430
17458
|
this.aggregated = definition.aggregated;
|
|
@@ -17592,8 +17620,8 @@ class ScorecardChart extends AbstractChart {
|
|
|
17592
17620
|
type = "scorecard";
|
|
17593
17621
|
constructor(definition, sheetId, getters) {
|
|
17594
17622
|
super(definition, sheetId, getters);
|
|
17595
|
-
this.keyValue =
|
|
17596
|
-
this.baseline =
|
|
17623
|
+
this.keyValue = createValidRange(getters, sheetId, definition.keyValue);
|
|
17624
|
+
this.baseline = createValidRange(getters, sheetId, definition.baseline);
|
|
17597
17625
|
this.baselineMode = definition.baselineMode;
|
|
17598
17626
|
this.baselineDescr = definition.baselineDescr;
|
|
17599
17627
|
this.background = definition.background;
|
|
@@ -20952,7 +20980,7 @@ class LineBarPieConfigPanel extends owl.Component {
|
|
|
20952
20980
|
}
|
|
20953
20981
|
const getters = this.env.model.getters;
|
|
20954
20982
|
const sheetId = getters.getActiveSheetId();
|
|
20955
|
-
const labelRange =
|
|
20983
|
+
const labelRange = createValidRange(getters, sheetId, this.labelRange);
|
|
20956
20984
|
const dataSets = createDataSets(getters, this.dataSeriesRanges, sheetId, this.props.definition.dataSetsHaveTitle);
|
|
20957
20985
|
if (dataSets.length) {
|
|
20958
20986
|
return dataSets[0].dataRange.zone.top + 1;
|
|
@@ -23417,14 +23445,14 @@ class FigureComponent extends owl.Component {
|
|
|
23417
23445
|
}
|
|
23418
23446
|
onKeyDown(ev) {
|
|
23419
23447
|
const figure = this.props.figure;
|
|
23420
|
-
|
|
23448
|
+
const keyDownShortcut = keyboardEventToShortcutString(ev);
|
|
23449
|
+
switch (keyDownShortcut) {
|
|
23421
23450
|
case "Delete":
|
|
23422
23451
|
this.env.model.dispatch("DELETE_FIGURE", {
|
|
23423
23452
|
sheetId: this.env.model.getters.getActiveSheetId(),
|
|
23424
23453
|
id: figure.id,
|
|
23425
23454
|
});
|
|
23426
23455
|
this.props.onFigureDeleted();
|
|
23427
|
-
ev.stopPropagation();
|
|
23428
23456
|
ev.preventDefault();
|
|
23429
23457
|
ev.stopPropagation();
|
|
23430
23458
|
break;
|
|
@@ -23445,7 +23473,22 @@ class FigureComponent extends owl.Component {
|
|
|
23445
23473
|
x: figure.x + delta[0],
|
|
23446
23474
|
y: figure.y + delta[1],
|
|
23447
23475
|
});
|
|
23476
|
+
ev.preventDefault();
|
|
23448
23477
|
ev.stopPropagation();
|
|
23478
|
+
break;
|
|
23479
|
+
case "Ctrl+A":
|
|
23480
|
+
// Maybe in the future we will implement a way to select all figures
|
|
23481
|
+
ev.preventDefault();
|
|
23482
|
+
ev.stopPropagation();
|
|
23483
|
+
break;
|
|
23484
|
+
case "Ctrl+Y":
|
|
23485
|
+
case "Ctrl+Z":
|
|
23486
|
+
if (keyDownShortcut === "Ctrl+Y") {
|
|
23487
|
+
this.env.model.dispatch("REQUEST_REDO");
|
|
23488
|
+
}
|
|
23489
|
+
else if (keyDownShortcut === "Ctrl+Z") {
|
|
23490
|
+
this.env.model.dispatch("REQUEST_UNDO");
|
|
23491
|
+
}
|
|
23449
23492
|
ev.preventDefault();
|
|
23450
23493
|
ev.stopPropagation();
|
|
23451
23494
|
break;
|
|
@@ -24316,8 +24359,15 @@ class Composer extends owl.Component {
|
|
|
24316
24359
|
}
|
|
24317
24360
|
onPaste(ev) {
|
|
24318
24361
|
if (this.env.model.getters.getEditionMode() !== "inactive") {
|
|
24362
|
+
// let the browser clipboard work
|
|
24319
24363
|
ev.stopPropagation();
|
|
24320
24364
|
}
|
|
24365
|
+
else {
|
|
24366
|
+
// the user meant to paste in the sheet, not open the composer with the pasted content
|
|
24367
|
+
// While we're not editing, we still have the focus and should therefore prevent
|
|
24368
|
+
// the native "paste" to occur.
|
|
24369
|
+
ev.preventDefault();
|
|
24370
|
+
}
|
|
24321
24371
|
}
|
|
24322
24372
|
/*
|
|
24323
24373
|
* Triggered automatically by the content-editable between the keydown and key up
|
|
@@ -24326,10 +24376,6 @@ class Composer extends owl.Component {
|
|
|
24326
24376
|
if (!this.shouldProcessInputEvents) {
|
|
24327
24377
|
return;
|
|
24328
24378
|
}
|
|
24329
|
-
if (ev.inputType === "insertFromPaste" &&
|
|
24330
|
-
this.env.model.getters.getEditionMode() === "inactive") {
|
|
24331
|
-
return;
|
|
24332
|
-
}
|
|
24333
24379
|
ev.stopPropagation();
|
|
24334
24380
|
let content;
|
|
24335
24381
|
if (this.env.model.getters.getEditionMode() === "inactive") {
|
|
@@ -24760,10 +24806,7 @@ class GridComposer extends owl.Component {
|
|
|
24760
24806
|
}
|
|
24761
24807
|
get containerStyle() {
|
|
24762
24808
|
if (this.env.model.getters.getEditionMode() === "inactive" || !this.rect) {
|
|
24763
|
-
return `
|
|
24764
|
-
position: absolute;
|
|
24765
|
-
z-index: -1000;
|
|
24766
|
-
`;
|
|
24809
|
+
return `z-index: -1000;`;
|
|
24767
24810
|
}
|
|
24768
24811
|
const isFormula = this.env.model.getters.getCurrentContent().startsWith("=");
|
|
24769
24812
|
const cell = this.env.model.getters.getActiveCell();
|
|
@@ -34593,6 +34636,9 @@ class RangeAdapter {
|
|
|
34593
34636
|
if (range.invalidXc) {
|
|
34594
34637
|
return range.invalidXc;
|
|
34595
34638
|
}
|
|
34639
|
+
if (!this.getters.tryGetSheet(range.sheetId)) {
|
|
34640
|
+
return INCORRECT_RANGE_STRING;
|
|
34641
|
+
}
|
|
34596
34642
|
if (range.zone.bottom - range.zone.top < 0 || range.zone.right - range.zone.left < 0) {
|
|
34597
34643
|
return INCORRECT_RANGE_STRING;
|
|
34598
34644
|
}
|
|
@@ -37644,16 +37690,22 @@ class EvaluationPlugin extends UIPlugin {
|
|
|
37644
37690
|
let newContent = undefined;
|
|
37645
37691
|
let newFormat = undefined;
|
|
37646
37692
|
let isExported = true;
|
|
37693
|
+
const exportedSheetData = data.sheets.find((sheet) => sheet.id === position.sheetId);
|
|
37647
37694
|
const formulaCell = this.getCorrespondingFormulaCell(position);
|
|
37648
37695
|
if (formulaCell) {
|
|
37649
37696
|
isExported = isExportableToExcel(formulaCell.compiledFormula.tokens);
|
|
37650
37697
|
isFormula = isExported;
|
|
37651
37698
|
if (!isExported) {
|
|
37652
|
-
|
|
37653
|
-
|
|
37699
|
+
// If the cell contains a non-exported formula and that is evaluates to
|
|
37700
|
+
// nothing* ,we don't export it.
|
|
37701
|
+
// * non-falsy value are relevant and so are 0 and FALSE, which only leaves
|
|
37702
|
+
// the empty string.
|
|
37703
|
+
if (value !== "") {
|
|
37704
|
+
newContent = value.toString();
|
|
37705
|
+
newFormat = evaluatedCell.format;
|
|
37706
|
+
}
|
|
37654
37707
|
}
|
|
37655
37708
|
}
|
|
37656
|
-
const exportedSheetData = data.sheets.find((sheet) => sheet.id === position.sheetId);
|
|
37657
37709
|
const exportedCellData = exportedSheetData.cells[xc] || {};
|
|
37658
37710
|
const format = newFormat
|
|
37659
37711
|
? getItemId(newFormat, data.formats)
|
|
@@ -46524,9 +46576,11 @@ class BottomBarSheet extends owl.Component {
|
|
|
46524
46576
|
if (ev.key === "Enter") {
|
|
46525
46577
|
ev.preventDefault();
|
|
46526
46578
|
this.stopEdition();
|
|
46579
|
+
this.env.focusableElement.focus();
|
|
46527
46580
|
}
|
|
46528
46581
|
if (ev.key === "Escape") {
|
|
46529
46582
|
this.cancelEdition();
|
|
46583
|
+
this.env.focusableElement.focus();
|
|
46530
46584
|
}
|
|
46531
46585
|
}
|
|
46532
46586
|
onClickSheetName(ev) {
|
|
@@ -51142,7 +51196,11 @@ function addRows(construct, data, sheet) {
|
|
|
51142
51196
|
let cellNode = escapeXml ``;
|
|
51143
51197
|
// Either formula or static value inside the cell
|
|
51144
51198
|
if (cell.isFormula) {
|
|
51145
|
-
|
|
51199
|
+
const res = addFormula(cell);
|
|
51200
|
+
if (!res) {
|
|
51201
|
+
continue;
|
|
51202
|
+
}
|
|
51203
|
+
({ attrs: additionalAttrs, node: cellNode } = res);
|
|
51146
51204
|
}
|
|
51147
51205
|
else if (cell.content && isMarkdownLink(cell.content)) {
|
|
51148
51206
|
const { label } = parseMarkdownLink(cell.content);
|
|
@@ -52137,6 +52195,6 @@ exports.setTranslationMethod = setTranslationMethod;
|
|
|
52137
52195
|
exports.tokenize = tokenize;
|
|
52138
52196
|
|
|
52139
52197
|
|
|
52140
|
-
__info__.version = '16.4.
|
|
52141
|
-
__info__.date = '2024-
|
|
52142
|
-
__info__.hash = '
|
|
52198
|
+
__info__.version = '16.4.36';
|
|
52199
|
+
__info__.date = '2024-06-10T09:33:43.623Z';
|
|
52200
|
+
__info__.hash = '3b15ed5';
|
|
@@ -3232,8 +3232,11 @@ function copyRangeWithNewSheetId(sheetIdFrom, sheetIdTo, range) {
|
|
|
3232
3232
|
/**
|
|
3233
3233
|
* Create a range from a xc. If the xc is empty, this function returns undefined.
|
|
3234
3234
|
*/
|
|
3235
|
-
function
|
|
3236
|
-
|
|
3235
|
+
function createValidRange(getters, sheetId, xc) {
|
|
3236
|
+
if (!xc)
|
|
3237
|
+
return;
|
|
3238
|
+
const range = getters.getRangeFromSheetXC(sheetId, xc);
|
|
3239
|
+
return !(range.invalidSheetName || range.invalidXc) ? range : undefined;
|
|
3237
3240
|
}
|
|
3238
3241
|
/**
|
|
3239
3242
|
* Spread multiple colrows zone to one row/col zone and add a many new input range as needed.
|
|
@@ -5700,6 +5703,7 @@ const FilterMenuPopoverBuilder = {
|
|
|
5700
5703
|
};
|
|
5701
5704
|
|
|
5702
5705
|
const macRegex = /Mac/i;
|
|
5706
|
+
const MODIFIER_KEYS = ["Shift", "Control", "Alt", "Meta"];
|
|
5703
5707
|
/**
|
|
5704
5708
|
* Return true if the event was triggered from
|
|
5705
5709
|
* a child element.
|
|
@@ -5738,6 +5742,31 @@ function* iterateChildren(el) {
|
|
|
5738
5742
|
function getOpenedMenus() {
|
|
5739
5743
|
return Array.from(document.querySelectorAll(".o-spreadsheet .o-menu"));
|
|
5740
5744
|
}
|
|
5745
|
+
const letterRegex = /^[a-zA-Z]$/;
|
|
5746
|
+
/**
|
|
5747
|
+
* Transform a keyboard event into a shortcut string that represent this event. The letters keys will be uppercased.
|
|
5748
|
+
*
|
|
5749
|
+
* @argument ev - The keyboard event to transform
|
|
5750
|
+
* @argument mode - Use either ev.key of ev.code to get the string shortcut
|
|
5751
|
+
*
|
|
5752
|
+
* @example
|
|
5753
|
+
* event : { ctrlKey: true, key: "a" } => "Ctrl+A"
|
|
5754
|
+
* event : { shift: true, alt: true, key: "Home" } => "Alt+Shift+Home"
|
|
5755
|
+
*/
|
|
5756
|
+
function keyboardEventToShortcutString(ev, mode = "key") {
|
|
5757
|
+
let keyDownString = "";
|
|
5758
|
+
if (!MODIFIER_KEYS.includes(ev.key)) {
|
|
5759
|
+
if (isCtrlKey(ev))
|
|
5760
|
+
keyDownString += "Ctrl+";
|
|
5761
|
+
if (ev.altKey)
|
|
5762
|
+
keyDownString += "Alt+";
|
|
5763
|
+
if (ev.shiftKey)
|
|
5764
|
+
keyDownString += "Shift+";
|
|
5765
|
+
}
|
|
5766
|
+
const key = mode === "key" ? ev.key : ev.code;
|
|
5767
|
+
keyDownString += letterRegex.test(key) ? key.toUpperCase() : key;
|
|
5768
|
+
return keyDownString;
|
|
5769
|
+
}
|
|
5741
5770
|
function isMacOS() {
|
|
5742
5771
|
return Boolean(macRegex.test(navigator.userAgent));
|
|
5743
5772
|
}
|
|
@@ -5756,8 +5785,7 @@ function isCtrlKey(ev) {
|
|
|
5756
5785
|
*/
|
|
5757
5786
|
function useSpreadsheetRect() {
|
|
5758
5787
|
const position = useState({ x: 0, y: 0, width: 0, height: 0 });
|
|
5759
|
-
let spreadsheetElement =
|
|
5760
|
-
updatePosition();
|
|
5788
|
+
let spreadsheetElement = null;
|
|
5761
5789
|
function updatePosition() {
|
|
5762
5790
|
if (!spreadsheetElement) {
|
|
5763
5791
|
spreadsheetElement = document.querySelector(".o-spreadsheet");
|
|
@@ -16538,7 +16566,7 @@ class BarChart extends AbstractChart {
|
|
|
16538
16566
|
constructor(definition, sheetId, getters) {
|
|
16539
16567
|
super(definition, sheetId, getters);
|
|
16540
16568
|
this.dataSets = createDataSets(getters, definition.dataSets, sheetId, definition.dataSetsHaveTitle);
|
|
16541
|
-
this.labelRange =
|
|
16569
|
+
this.labelRange = createValidRange(getters, sheetId, definition.labelRange);
|
|
16542
16570
|
this.background = definition.background;
|
|
16543
16571
|
this.verticalAxisPosition = definition.verticalAxisPosition;
|
|
16544
16572
|
this.legendPosition = definition.legendPosition;
|
|
@@ -16783,7 +16811,7 @@ class GaugeChart extends AbstractChart {
|
|
|
16783
16811
|
type = "gauge";
|
|
16784
16812
|
constructor(definition, sheetId, getters) {
|
|
16785
16813
|
super(definition, sheetId, getters);
|
|
16786
|
-
this.dataRange =
|
|
16814
|
+
this.dataRange = createValidRange(this.getters, this.sheetId, definition.dataRange);
|
|
16787
16815
|
this.sectionRule = definition.sectionRule;
|
|
16788
16816
|
this.background = definition.background;
|
|
16789
16817
|
}
|
|
@@ -17122,7 +17150,7 @@ class LineChart extends AbstractChart {
|
|
|
17122
17150
|
constructor(definition, sheetId, getters) {
|
|
17123
17151
|
super(definition, sheetId, getters);
|
|
17124
17152
|
this.dataSets = createDataSets(this.getters, definition.dataSets, sheetId, definition.dataSetsHaveTitle);
|
|
17125
|
-
this.labelRange =
|
|
17153
|
+
this.labelRange = createValidRange(this.getters, sheetId, definition.labelRange);
|
|
17126
17154
|
this.background = definition.background;
|
|
17127
17155
|
this.verticalAxisPosition = definition.verticalAxisPosition;
|
|
17128
17156
|
this.legendPosition = definition.legendPosition;
|
|
@@ -17420,7 +17448,7 @@ class PieChart extends AbstractChart {
|
|
|
17420
17448
|
constructor(definition, sheetId, getters) {
|
|
17421
17449
|
super(definition, sheetId, getters);
|
|
17422
17450
|
this.dataSets = createDataSets(getters, definition.dataSets, sheetId, definition.dataSetsHaveTitle);
|
|
17423
|
-
this.labelRange =
|
|
17451
|
+
this.labelRange = createValidRange(getters, sheetId, definition.labelRange);
|
|
17424
17452
|
this.background = definition.background;
|
|
17425
17453
|
this.legendPosition = definition.legendPosition;
|
|
17426
17454
|
this.aggregated = definition.aggregated;
|
|
@@ -17588,8 +17616,8 @@ class ScorecardChart extends AbstractChart {
|
|
|
17588
17616
|
type = "scorecard";
|
|
17589
17617
|
constructor(definition, sheetId, getters) {
|
|
17590
17618
|
super(definition, sheetId, getters);
|
|
17591
|
-
this.keyValue =
|
|
17592
|
-
this.baseline =
|
|
17619
|
+
this.keyValue = createValidRange(getters, sheetId, definition.keyValue);
|
|
17620
|
+
this.baseline = createValidRange(getters, sheetId, definition.baseline);
|
|
17593
17621
|
this.baselineMode = definition.baselineMode;
|
|
17594
17622
|
this.baselineDescr = definition.baselineDescr;
|
|
17595
17623
|
this.background = definition.background;
|
|
@@ -20948,7 +20976,7 @@ class LineBarPieConfigPanel extends Component {
|
|
|
20948
20976
|
}
|
|
20949
20977
|
const getters = this.env.model.getters;
|
|
20950
20978
|
const sheetId = getters.getActiveSheetId();
|
|
20951
|
-
const labelRange =
|
|
20979
|
+
const labelRange = createValidRange(getters, sheetId, this.labelRange);
|
|
20952
20980
|
const dataSets = createDataSets(getters, this.dataSeriesRanges, sheetId, this.props.definition.dataSetsHaveTitle);
|
|
20953
20981
|
if (dataSets.length) {
|
|
20954
20982
|
return dataSets[0].dataRange.zone.top + 1;
|
|
@@ -23413,14 +23441,14 @@ class FigureComponent extends Component {
|
|
|
23413
23441
|
}
|
|
23414
23442
|
onKeyDown(ev) {
|
|
23415
23443
|
const figure = this.props.figure;
|
|
23416
|
-
|
|
23444
|
+
const keyDownShortcut = keyboardEventToShortcutString(ev);
|
|
23445
|
+
switch (keyDownShortcut) {
|
|
23417
23446
|
case "Delete":
|
|
23418
23447
|
this.env.model.dispatch("DELETE_FIGURE", {
|
|
23419
23448
|
sheetId: this.env.model.getters.getActiveSheetId(),
|
|
23420
23449
|
id: figure.id,
|
|
23421
23450
|
});
|
|
23422
23451
|
this.props.onFigureDeleted();
|
|
23423
|
-
ev.stopPropagation();
|
|
23424
23452
|
ev.preventDefault();
|
|
23425
23453
|
ev.stopPropagation();
|
|
23426
23454
|
break;
|
|
@@ -23441,7 +23469,22 @@ class FigureComponent extends Component {
|
|
|
23441
23469
|
x: figure.x + delta[0],
|
|
23442
23470
|
y: figure.y + delta[1],
|
|
23443
23471
|
});
|
|
23472
|
+
ev.preventDefault();
|
|
23444
23473
|
ev.stopPropagation();
|
|
23474
|
+
break;
|
|
23475
|
+
case "Ctrl+A":
|
|
23476
|
+
// Maybe in the future we will implement a way to select all figures
|
|
23477
|
+
ev.preventDefault();
|
|
23478
|
+
ev.stopPropagation();
|
|
23479
|
+
break;
|
|
23480
|
+
case "Ctrl+Y":
|
|
23481
|
+
case "Ctrl+Z":
|
|
23482
|
+
if (keyDownShortcut === "Ctrl+Y") {
|
|
23483
|
+
this.env.model.dispatch("REQUEST_REDO");
|
|
23484
|
+
}
|
|
23485
|
+
else if (keyDownShortcut === "Ctrl+Z") {
|
|
23486
|
+
this.env.model.dispatch("REQUEST_UNDO");
|
|
23487
|
+
}
|
|
23445
23488
|
ev.preventDefault();
|
|
23446
23489
|
ev.stopPropagation();
|
|
23447
23490
|
break;
|
|
@@ -24312,8 +24355,15 @@ class Composer extends Component {
|
|
|
24312
24355
|
}
|
|
24313
24356
|
onPaste(ev) {
|
|
24314
24357
|
if (this.env.model.getters.getEditionMode() !== "inactive") {
|
|
24358
|
+
// let the browser clipboard work
|
|
24315
24359
|
ev.stopPropagation();
|
|
24316
24360
|
}
|
|
24361
|
+
else {
|
|
24362
|
+
// the user meant to paste in the sheet, not open the composer with the pasted content
|
|
24363
|
+
// While we're not editing, we still have the focus and should therefore prevent
|
|
24364
|
+
// the native "paste" to occur.
|
|
24365
|
+
ev.preventDefault();
|
|
24366
|
+
}
|
|
24317
24367
|
}
|
|
24318
24368
|
/*
|
|
24319
24369
|
* Triggered automatically by the content-editable between the keydown and key up
|
|
@@ -24322,10 +24372,6 @@ class Composer extends Component {
|
|
|
24322
24372
|
if (!this.shouldProcessInputEvents) {
|
|
24323
24373
|
return;
|
|
24324
24374
|
}
|
|
24325
|
-
if (ev.inputType === "insertFromPaste" &&
|
|
24326
|
-
this.env.model.getters.getEditionMode() === "inactive") {
|
|
24327
|
-
return;
|
|
24328
|
-
}
|
|
24329
24375
|
ev.stopPropagation();
|
|
24330
24376
|
let content;
|
|
24331
24377
|
if (this.env.model.getters.getEditionMode() === "inactive") {
|
|
@@ -24756,10 +24802,7 @@ class GridComposer extends Component {
|
|
|
24756
24802
|
}
|
|
24757
24803
|
get containerStyle() {
|
|
24758
24804
|
if (this.env.model.getters.getEditionMode() === "inactive" || !this.rect) {
|
|
24759
|
-
return `
|
|
24760
|
-
position: absolute;
|
|
24761
|
-
z-index: -1000;
|
|
24762
|
-
`;
|
|
24805
|
+
return `z-index: -1000;`;
|
|
24763
24806
|
}
|
|
24764
24807
|
const isFormula = this.env.model.getters.getCurrentContent().startsWith("=");
|
|
24765
24808
|
const cell = this.env.model.getters.getActiveCell();
|
|
@@ -34589,6 +34632,9 @@ class RangeAdapter {
|
|
|
34589
34632
|
if (range.invalidXc) {
|
|
34590
34633
|
return range.invalidXc;
|
|
34591
34634
|
}
|
|
34635
|
+
if (!this.getters.tryGetSheet(range.sheetId)) {
|
|
34636
|
+
return INCORRECT_RANGE_STRING;
|
|
34637
|
+
}
|
|
34592
34638
|
if (range.zone.bottom - range.zone.top < 0 || range.zone.right - range.zone.left < 0) {
|
|
34593
34639
|
return INCORRECT_RANGE_STRING;
|
|
34594
34640
|
}
|
|
@@ -37640,16 +37686,22 @@ class EvaluationPlugin extends UIPlugin {
|
|
|
37640
37686
|
let newContent = undefined;
|
|
37641
37687
|
let newFormat = undefined;
|
|
37642
37688
|
let isExported = true;
|
|
37689
|
+
const exportedSheetData = data.sheets.find((sheet) => sheet.id === position.sheetId);
|
|
37643
37690
|
const formulaCell = this.getCorrespondingFormulaCell(position);
|
|
37644
37691
|
if (formulaCell) {
|
|
37645
37692
|
isExported = isExportableToExcel(formulaCell.compiledFormula.tokens);
|
|
37646
37693
|
isFormula = isExported;
|
|
37647
37694
|
if (!isExported) {
|
|
37648
|
-
|
|
37649
|
-
|
|
37695
|
+
// If the cell contains a non-exported formula and that is evaluates to
|
|
37696
|
+
// nothing* ,we don't export it.
|
|
37697
|
+
// * non-falsy value are relevant and so are 0 and FALSE, which only leaves
|
|
37698
|
+
// the empty string.
|
|
37699
|
+
if (value !== "") {
|
|
37700
|
+
newContent = value.toString();
|
|
37701
|
+
newFormat = evaluatedCell.format;
|
|
37702
|
+
}
|
|
37650
37703
|
}
|
|
37651
37704
|
}
|
|
37652
|
-
const exportedSheetData = data.sheets.find((sheet) => sheet.id === position.sheetId);
|
|
37653
37705
|
const exportedCellData = exportedSheetData.cells[xc] || {};
|
|
37654
37706
|
const format = newFormat
|
|
37655
37707
|
? getItemId(newFormat, data.formats)
|
|
@@ -46520,9 +46572,11 @@ class BottomBarSheet extends Component {
|
|
|
46520
46572
|
if (ev.key === "Enter") {
|
|
46521
46573
|
ev.preventDefault();
|
|
46522
46574
|
this.stopEdition();
|
|
46575
|
+
this.env.focusableElement.focus();
|
|
46523
46576
|
}
|
|
46524
46577
|
if (ev.key === "Escape") {
|
|
46525
46578
|
this.cancelEdition();
|
|
46579
|
+
this.env.focusableElement.focus();
|
|
46526
46580
|
}
|
|
46527
46581
|
}
|
|
46528
46582
|
onClickSheetName(ev) {
|
|
@@ -51138,7 +51192,11 @@ function addRows(construct, data, sheet) {
|
|
|
51138
51192
|
let cellNode = escapeXml ``;
|
|
51139
51193
|
// Either formula or static value inside the cell
|
|
51140
51194
|
if (cell.isFormula) {
|
|
51141
|
-
|
|
51195
|
+
const res = addFormula(cell);
|
|
51196
|
+
if (!res) {
|
|
51197
|
+
continue;
|
|
51198
|
+
}
|
|
51199
|
+
({ attrs: additionalAttrs, node: cellNode } = res);
|
|
51142
51200
|
}
|
|
51143
51201
|
else if (cell.content && isMarkdownLink(cell.content)) {
|
|
51144
51202
|
const { label } = parseMarkdownLink(cell.content);
|
|
@@ -52101,6 +52159,6 @@ const constants = {
|
|
|
52101
52159
|
export { AbstractChart, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, __info__, addFunction, astToFormula, compile, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, tokenize };
|
|
52102
52160
|
|
|
52103
52161
|
|
|
52104
|
-
__info__.version = '16.4.
|
|
52105
|
-
__info__.date = '2024-
|
|
52106
|
-
__info__.hash = '
|
|
52162
|
+
__info__.version = '16.4.36';
|
|
52163
|
+
__info__.date = '2024-06-10T09:33:43.623Z';
|
|
52164
|
+
__info__.hash = '3b15ed5';
|