@odoo/o-spreadsheet 16.2.23 → 16.2.26

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.
@@ -1366,8 +1366,10 @@ function isSameColor(color1, color2) {
1366
1366
  const cellReference = new RegExp(/\$?([A-Z]{1,3})\$?([0-9]{1,7})/, "i");
1367
1367
  // Same as above, but matches the exact string (nothing before or after)
1368
1368
  const singleCellReference = new RegExp(/^\$?([A-Z]{1,3})\$?([0-9]{1,7})$/, "i");
1369
- /** Reference of a column header (eg. A, AB) */
1370
- const colHeader = new RegExp(/^([A-Z]{1,3})+$/, "i");
1369
+ /** Reference of a column header (eg. A, AB, $A) */
1370
+ const colHeader = new RegExp(/^\$?([A-Z]{1,3})+$/, "i");
1371
+ /** Reference of a row header (eg. 1, $1) */
1372
+ const rowHeader = new RegExp(/^\$?([0-9]{1,7})+$/, "i");
1371
1373
  /** Reference of a column (eg. A, $CA, Sheet1!B) */
1372
1374
  const colReference = new RegExp(/^\s*('.+'!|[^']+!)?\$?([A-Z]{1,3})$/, "i");
1373
1375
  /** Reference of a row (eg. 1, 59, Sheet1!9) */
@@ -1397,6 +1399,9 @@ function isRowReference(xc) {
1397
1399
  function isColHeader(str) {
1398
1400
  return colHeader.test(str);
1399
1401
  }
1402
+ function isRowHeader(str) {
1403
+ return rowHeader.test(str);
1404
+ }
1400
1405
  /**
1401
1406
  * Return true if the given xc is the reference of a single cell,
1402
1407
  * without any specified sheet (e.g. A1)
@@ -2186,18 +2191,10 @@ class RangeImpl {
2186
2191
  if (isFullCol) {
2187
2192
  parts[0].rowFixed = parts[0].rowFixed || parts[1].rowFixed;
2188
2193
  parts[1].rowFixed = parts[0].rowFixed || parts[1].rowFixed;
2189
- if (zone.left === zone.right) {
2190
- parts[0].colFixed = parts[0].colFixed || parts[1].colFixed;
2191
- parts[1].colFixed = parts[0].colFixed || parts[1].colFixed;
2192
- }
2193
2194
  }
2194
2195
  if (isFullRow) {
2195
2196
  parts[0].colFixed = parts[0].colFixed || parts[1].colFixed;
2196
2197
  parts[1].colFixed = parts[0].colFixed || parts[1].colFixed;
2197
- if (zone.top === zone.bottom) {
2198
- parts[0].rowFixed = parts[0].rowFixed || parts[1].rowFixed;
2199
- parts[1].rowFixed = parts[0].rowFixed || parts[1].rowFixed;
2200
- }
2201
2198
  }
2202
2199
  return parts;
2203
2200
  }
@@ -5051,6 +5048,7 @@ const FilterMenuPopoverBuilder = {
5051
5048
  },
5052
5049
  };
5053
5050
 
5051
+ const macRegex = /Mac/i;
5054
5052
  /**
5055
5053
  * Return true if the event was triggered from
5056
5054
  * a child element.
@@ -5096,6 +5094,17 @@ function setElementScrollTop(el, scroll) {
5096
5094
  }
5097
5095
  function getOpenedMenus() {
5098
5096
  return Array.from(document.querySelectorAll(".o-spreadsheet .o-menu"));
5097
+ }
5098
+ function isMacOS() {
5099
+ return Boolean(macRegex.test(navigator.userAgent));
5100
+ }
5101
+ /**
5102
+ * @param {KeyboardEvent | MouseEvent} ev
5103
+ * @returns Returns true if the event was triggered with the "ctrl" modifier pressed.
5104
+ * On Mac, this is the "meta" or "command" key.
5105
+ */
5106
+ function isCtrlKey(ev) {
5107
+ return isMacOS() ? ev.metaKey : ev.ctrlKey;
5099
5108
  }
5100
5109
 
5101
5110
  /**
@@ -16713,10 +16722,10 @@ const arrowMap = {
16713
16722
  function updateSelectionWithArrowKeys(ev, selection) {
16714
16723
  const direction = arrowMap[ev.key];
16715
16724
  if (ev.shiftKey) {
16716
- selection.resizeAnchorZone(direction, ev.ctrlKey ? "end" : 1);
16725
+ selection.resizeAnchorZone(direction, isCtrlKey(ev) ? "end" : 1);
16717
16726
  }
16718
16727
  else {
16719
- selection.moveAnchorCell(direction, ev.ctrlKey ? "end" : 1);
16728
+ selection.moveAnchorCell(direction, isCtrlKey(ev) ? "end" : 1);
16720
16729
  }
16721
16730
  }
16722
16731
 
@@ -21051,7 +21060,10 @@ class GridOverlay extends owl.Component {
21051
21060
  return;
21052
21061
  }
21053
21062
  const [col, row] = this.getCartesianCoordinates(ev);
21054
- this.props.onCellClicked(col, row, { shiftKey: ev.shiftKey, ctrlKey: ev.ctrlKey });
21063
+ this.props.onCellClicked(col, row, {
21064
+ expandZone: ev.shiftKey,
21065
+ addZone: isCtrlKey(ev),
21066
+ });
21055
21067
  }
21056
21068
  onDoubleClick(ev) {
21057
21069
  const [col, row] = this.getCartesianCoordinates(ev);
@@ -21139,6 +21151,7 @@ class AbstractResizer extends owl.Component {
21139
21151
  draggerShadowThickness: 0,
21140
21152
  delta: 0,
21141
21153
  base: 0,
21154
+ position: "before",
21142
21155
  });
21143
21156
  }
21144
21157
  _computeHandleDisplay(ev) {
@@ -21264,11 +21277,13 @@ class AbstractResizer extends owl.Component {
21264
21277
  this.state.draggerLinePosition = dimensions.start;
21265
21278
  this.state.draggerShadowPosition = dimensions.start;
21266
21279
  this.state.base = elementIndex;
21280
+ this.state.position = "before";
21267
21281
  }
21268
21282
  else if (this._getSelectedZoneEnd() < elementIndex) {
21269
21283
  this.state.draggerLinePosition = dimensions.end;
21270
21284
  this.state.draggerShadowPosition = dimensions.end - this.state.draggerShadowThickness;
21271
- this.state.base = elementIndex + 1;
21285
+ this.state.base = elementIndex;
21286
+ this.state.position = "after";
21272
21287
  }
21273
21288
  else {
21274
21289
  this.state.draggerLinePosition = startDimensions.start;
@@ -21292,7 +21307,7 @@ class AbstractResizer extends owl.Component {
21292
21307
  this._increaseSelection(index);
21293
21308
  }
21294
21309
  else {
21295
- this._selectElement(index, ev.ctrlKey);
21310
+ this._selectElement(index, isCtrlKey(ev));
21296
21311
  }
21297
21312
  this.lastSelectedElementIndex = index;
21298
21313
  const mouseMoveSelect = (col, row) => {
@@ -21305,7 +21320,7 @@ class AbstractResizer extends owl.Component {
21305
21320
  const mouseUpSelect = () => {
21306
21321
  this.state.isSelecting = false;
21307
21322
  this.lastSelectedElementIndex = null;
21308
- this.env.model.dispatch(ev.ctrlKey ? "PREPARE_SELECTION_INPUT_EXPANSION" : "STOP_SELECTION_INPUT");
21323
+ this.env.model.dispatch(isCtrlKey(ev) ? "PREPARE_SELECTION_INPUT_EXPANSION" : "STOP_SELECTION_INPUT");
21309
21324
  this._computeGrabDisplay(ev);
21310
21325
  };
21311
21326
  dragAndDropBeyondTheViewport(this.env, mouseMoveSelect, mouseUpSelect);
@@ -21449,13 +21464,14 @@ class ColResizer extends AbstractResizer {
21449
21464
  dimension: "COL",
21450
21465
  base: this.state.base,
21451
21466
  elements,
21467
+ position: this.state.position,
21452
21468
  });
21453
21469
  if (!result.isSuccessful && result.reasons.includes(2 /* CommandResult.WillRemoveExistingMerge */)) {
21454
21470
  this.env.raiseError(MergeErrorMessage);
21455
21471
  }
21456
21472
  }
21457
- _selectElement(index, ctrlKey) {
21458
- this.env.model.selection.selectColumn(index, ctrlKey ? "newAnchor" : "overrideSelection");
21473
+ _selectElement(index, addDistinctHeader) {
21474
+ this.env.model.selection.selectColumn(index, addDistinctHeader ? "newAnchor" : "overrideSelection");
21459
21475
  }
21460
21476
  _increaseSelection(index) {
21461
21477
  this.env.model.selection.selectColumn(index, "updateAnchor");
@@ -21621,13 +21637,14 @@ class RowResizer extends AbstractResizer {
21621
21637
  dimension: "ROW",
21622
21638
  base: this.state.base,
21623
21639
  elements,
21640
+ position: this.state.position,
21624
21641
  });
21625
21642
  if (!result.isSuccessful && result.reasons.includes(2 /* CommandResult.WillRemoveExistingMerge */)) {
21626
21643
  this.env.raiseError(MergeErrorMessage);
21627
21644
  }
21628
21645
  }
21629
- _selectElement(index, ctrlKey) {
21630
- this.env.model.selection.selectRow(index, ctrlKey ? "newAnchor" : "overrideSelection");
21646
+ _selectElement(index, addDistinctHeader) {
21647
+ this.env.model.selection.selectRow(index, addDistinctHeader ? "newAnchor" : "overrideSelection");
21631
21648
  }
21632
21649
  _increaseSelection(index) {
21633
21650
  this.env.model.selection.selectRow(index, "updateAnchor");
@@ -21729,8 +21746,8 @@ function useWheelHandler(handler) {
21729
21746
  return val * (deltaMode === 0 ? 1 : DEFAULT_CELL_HEIGHT);
21730
21747
  }
21731
21748
  const onMouseWheel = (ev) => {
21732
- const deltaX = normalize(ev.shiftKey ? ev.deltaY : ev.deltaX, ev.deltaMode);
21733
- const deltaY = normalize(ev.shiftKey ? ev.deltaX : ev.deltaY, ev.deltaMode);
21749
+ const deltaX = normalize(ev.shiftKey && !isMacOS() ? ev.deltaY : ev.deltaX, ev.deltaMode);
21750
+ const deltaY = normalize(ev.shiftKey && !isMacOS() ? ev.deltaX : ev.deltaY, ev.deltaMode);
21734
21751
  handler(deltaX, deltaY);
21735
21752
  };
21736
21753
  return onMouseWheel;
@@ -22374,8 +22391,8 @@ class Grid extends owl.Component {
22374
22391
  // ---------------------------------------------------------------------------
22375
22392
  // Zone selection with mouse
22376
22393
  // ---------------------------------------------------------------------------
22377
- onCellClicked(col, row, { ctrlKey, shiftKey }) {
22378
- if (ctrlKey) {
22394
+ onCellClicked(col, row, { addZone, expandZone }) {
22395
+ if (addZone) {
22379
22396
  this.env.model.dispatch("PREPARE_SELECTION_INPUT_EXPANSION");
22380
22397
  }
22381
22398
  if (this.env.model.getters.hasOpenedPopover()) {
@@ -22384,10 +22401,10 @@ class Grid extends owl.Component {
22384
22401
  if (this.env.model.getters.getEditionMode() === "editing") {
22385
22402
  this.env.model.dispatch("STOP_EDITION");
22386
22403
  }
22387
- if (shiftKey) {
22404
+ if (expandZone) {
22388
22405
  this.env.model.selection.setAnchorCorner(col, row);
22389
22406
  }
22390
- else if (ctrlKey) {
22407
+ else if (addZone) {
22391
22408
  this.env.model.selection.addCellToSelection(col, row);
22392
22409
  }
22393
22410
  else {
@@ -22449,9 +22466,7 @@ class Grid extends owl.Component {
22449
22466
  return;
22450
22467
  }
22451
22468
  let keyDownString = "";
22452
- if (ev.ctrlKey)
22453
- keyDownString += "CTRL+";
22454
- if (ev.metaKey)
22469
+ if (isCtrlKey(ev))
22455
22470
  keyDownString += "CTRL+";
22456
22471
  if (ev.altKey)
22457
22472
  keyDownString += "ALT+";
@@ -24318,7 +24333,7 @@ const machine = {
24318
24333
  SPACE: goTo(State.RightRef),
24319
24334
  NUMBER: goTo(State.Found),
24320
24335
  REFERENCE: goTo(State.Found, (token) => isSingleCellReference(token.value)),
24321
- SYMBOL: goTo(State.Found, (token) => isColHeader(token.value)),
24336
+ SYMBOL: goTo(State.Found, (token) => isColHeader(token.value) || isRowHeader(token.value)),
24322
24337
  },
24323
24338
  [State.RightColumnRef]: {
24324
24339
  SPACE: goTo(State.RightColumnRef),
@@ -24329,6 +24344,7 @@ const machine = {
24329
24344
  SPACE: goTo(State.RightRowRef),
24330
24345
  NUMBER: goTo(State.Found),
24331
24346
  REFERENCE: goTo(State.Found, (token) => isSingleCellReference(token.value)),
24347
+ SYMBOL: goTo(State.Found, (token) => isRowHeader(token.value)),
24332
24348
  },
24333
24349
  [State.Found]: {},
24334
24350
  };
@@ -30931,7 +30947,7 @@ class SheetPlugin extends CorePlugin {
30931
30947
  const elements = cmd.dimension === "COL"
30932
30948
  ? this.getNumberCols(cmd.sheetId)
30933
30949
  : this.getNumberRows(cmd.sheetId);
30934
- if (cmd.base < 0 || cmd.base > elements) {
30950
+ if (cmd.base < 0 || cmd.base >= elements) {
30935
30951
  return 86 /* CommandResult.InvalidHeaderIndex */;
30936
30952
  }
30937
30953
  else if (cmd.quantity <= 0) {
@@ -31968,13 +31984,18 @@ class EvaluationPlugin extends UIPlugin {
31968
31984
  // Getters
31969
31985
  // ---------------------------------------------------------------------------
31970
31986
  evaluateFormula(formulaString, sheetId = this.getters.getActiveSheetId()) {
31971
- const compiledFormula = compile(formulaString);
31972
- const params = this.getCompilationParameters((cell) => this.getEvaluatedCell(this.getters.getCellPosition(cell.id)));
31973
- const ranges = [];
31974
- for (let xc of compiledFormula.dependencies) {
31975
- ranges.push(this.getters.getRangeFromSheetXC(sheetId, xc));
31987
+ try {
31988
+ const compiledFormula = compile(formulaString);
31989
+ const params = this.getCompilationParameters((cell) => this.getEvaluatedCell(this.getters.getCellPosition(cell.id)));
31990
+ const ranges = [];
31991
+ for (let xc of compiledFormula.dependencies) {
31992
+ ranges.push(this.getters.getRangeFromSheetXC(sheetId, xc));
31993
+ }
31994
+ return compiledFormula.execute(ranges, ...params).value;
31995
+ }
31996
+ catch (error) {
31997
+ return error instanceof EvaluationError ? error.errorType : CellErrorType.GenericError;
31976
31998
  }
31977
- return compiledFormula.execute(ranges, ...params).value;
31978
31999
  }
31979
32000
  /**
31980
32001
  * Return the value of each cell in the range as they are displayed in the grid.
@@ -32476,39 +32497,34 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
32476
32497
  this.computedIcons[sheetId] = {};
32477
32498
  const computedStyle = this.computedStyles[sheetId];
32478
32499
  for (let cf of this.getters.getConditionalFormats(sheetId).reverse()) {
32479
- try {
32480
- switch (cf.rule.type) {
32481
- case "ColorScaleRule":
32482
- for (let range of cf.ranges) {
32483
- this.applyColorScale(range, cf.rule);
32484
- }
32485
- break;
32486
- case "IconSetRule":
32487
- for (let range of cf.ranges) {
32488
- this.applyIcon(range, cf.rule);
32489
- }
32490
- break;
32491
- default:
32492
- for (let ref of cf.ranges) {
32493
- const zone = this.getters.getRangeFromSheetXC(sheetId, ref).zone;
32494
- for (let row = zone.top; row <= zone.bottom; row++) {
32495
- for (let col = zone.left; col <= zone.right; col++) {
32496
- const pr = this.rulePredicate[cf.rule.type];
32497
- let cell = this.getters.getEvaluatedCell({ sheetId, col, row });
32498
- if (pr && pr(cell, cf.rule)) {
32499
- if (!computedStyle[col])
32500
- computedStyle[col] = [];
32501
- // we must combine all the properties of all the CF rules applied to the given cell
32502
- computedStyle[col][row] = Object.assign(((_a = computedStyle[col]) === null || _a === void 0 ? void 0 : _a[row]) || {}, cf.rule.style);
32503
- }
32500
+ switch (cf.rule.type) {
32501
+ case "ColorScaleRule":
32502
+ for (let range of cf.ranges) {
32503
+ this.applyColorScale(range, cf.rule);
32504
+ }
32505
+ break;
32506
+ case "IconSetRule":
32507
+ for (let range of cf.ranges) {
32508
+ this.applyIcon(range, cf.rule);
32509
+ }
32510
+ break;
32511
+ default:
32512
+ for (let ref of cf.ranges) {
32513
+ const zone = this.getters.getRangeFromSheetXC(sheetId, ref).zone;
32514
+ for (let row = zone.top; row <= zone.bottom; row++) {
32515
+ for (let col = zone.left; col <= zone.right; col++) {
32516
+ const pr = this.rulePredicate[cf.rule.type];
32517
+ let cell = this.getters.getEvaluatedCell({ sheetId, col, row });
32518
+ if (pr && pr(cell, cf.rule)) {
32519
+ if (!computedStyle[col])
32520
+ computedStyle[col] = [];
32521
+ // we must combine all the properties of all the CF rules applied to the given cell
32522
+ computedStyle[col][row] = Object.assign(((_a = computedStyle[col]) === null || _a === void 0 ? void 0 : _a[row]) || {}, cf.rule.style);
32504
32523
  }
32505
32524
  }
32506
32525
  }
32507
- break;
32508
- }
32509
- }
32510
- catch (_) {
32511
- // we don't care about the errors within the evaluation of a rule
32526
+ }
32527
+ break;
32512
32528
  }
32513
32529
  }
32514
32530
  }
@@ -32533,7 +32549,7 @@ class EvaluationConditionalFormatPlugin extends UIPlugin {
32533
32549
  return percentile(rangeValues, Number(threshold.value) / 100, true);
32534
32550
  case "formula":
32535
32551
  const value = threshold.value && this.getters.evaluateFormula(threshold.value);
32536
- return !(value instanceof Promise) ? value : null;
32552
+ return typeof value === "number" ? value : null;
32537
32553
  default:
32538
32554
  return null;
32539
32555
  }
@@ -34096,24 +34112,27 @@ class AutofillPlugin extends UIPlugin {
34096
34112
  * autofiller
34097
34113
  */
34098
34114
  autofillAuto() {
34115
+ var _a, _b;
34099
34116
  const zone = this.getters.getSelectedZone();
34100
34117
  const sheetId = this.getters.getActiveSheetId();
34101
34118
  let col = zone.left;
34102
34119
  let row = zone.bottom;
34103
34120
  if (col > 0) {
34104
- let left = this.getters.getEvaluatedCell({ sheetId, col: col - 1, row });
34105
- while (left.type !== CellValueType.empty) {
34121
+ let leftPosition = { sheetId, col: col - 1, row };
34122
+ while (this.getters.getEvaluatedCell(leftPosition).type !== CellValueType.empty ||
34123
+ ((_a = this.getters.getCell(leftPosition)) === null || _a === void 0 ? void 0 : _a.content)) {
34106
34124
  row += 1;
34107
- left = this.getters.getEvaluatedCell({ sheetId, col: col - 1, row });
34125
+ leftPosition = { sheetId, col: col - 1, row };
34108
34126
  }
34109
34127
  }
34110
34128
  if (row === zone.bottom) {
34111
34129
  col = zone.right;
34112
34130
  if (col <= this.getters.getNumberCols(sheetId)) {
34113
- let right = this.getters.getEvaluatedCell({ sheetId, col: col + 1, row });
34114
- while (right.type !== CellValueType.empty) {
34131
+ let rightPosition = { sheetId, col: col + 1, row };
34132
+ while (this.getters.getEvaluatedCell(rightPosition).type !== CellValueType.empty ||
34133
+ ((_b = this.getters.getCell(rightPosition)) === null || _b === void 0 ? void 0 : _b.content)) {
34115
34134
  row += 1;
34116
- right = this.getters.getEvaluatedCell({ sheetId, col: col + 1, row });
34135
+ rightPosition = { sheetId, col: col + 1, row };
34117
34136
  }
34118
34137
  }
34119
34138
  }
@@ -38431,6 +38450,10 @@ function setXcToReferenceType(xc, referenceType) {
38431
38450
  return xc.slice(0, indexOfNumber) + "$" + xc.slice(indexOfNumber);
38432
38451
  case "colrow":
38433
38452
  indexOfNumber = xc.search(/[0-9]/);
38453
+ if (indexOfNumber === -1 || indexOfNumber === 0) {
38454
+ // no row number (eg. A) or no column (eg. 1)
38455
+ return "$" + xc;
38456
+ }
38434
38457
  xc = xc.slice(0, indexOfNumber) + "$" + xc.slice(indexOfNumber);
38435
38458
  return "$" + xc;
38436
38459
  case "none":
@@ -39572,7 +39595,7 @@ class GridSelectionPlugin extends UIPlugin {
39572
39595
  sheetId: cmd.sheetId,
39573
39596
  base: cmd.base,
39574
39597
  quantity: thickness,
39575
- position: "before",
39598
+ position: cmd.position,
39576
39599
  });
39577
39600
  const isCol = cmd.dimension === "COL";
39578
39601
  const start = cmd.elements[0];
@@ -39589,12 +39612,13 @@ class GridSelectionPlugin extends UIPlugin {
39589
39612
  },
39590
39613
  ];
39591
39614
  const state = new ClipboardCellsState(target, "CUT", this.getters, this.dispatch, this.selection);
39615
+ const base = isBasedBefore ? cmd.base : cmd.base + 1;
39592
39616
  const pasteTarget = [
39593
39617
  {
39594
- left: isCol ? cmd.base : 0,
39595
- right: isCol ? cmd.base + thickness - 1 : this.getters.getNumberCols(cmd.sheetId) - 1,
39596
- top: !isCol ? cmd.base : 0,
39597
- bottom: !isCol ? cmd.base + thickness - 1 : this.getters.getNumberRows(cmd.sheetId) - 1,
39618
+ left: isCol ? base : 0,
39619
+ right: isCol ? base + thickness - 1 : this.getters.getNumberCols(cmd.sheetId) - 1,
39620
+ top: !isCol ? base : 0,
39621
+ bottom: !isCol ? base + thickness - 1 : this.getters.getNumberRows(cmd.sheetId) - 1,
39598
39622
  },
39599
39623
  ];
39600
39624
  state.paste(pasteTarget, { selectTarget: true });
@@ -39631,6 +39655,11 @@ class GridSelectionPlugin extends UIPlugin {
39631
39655
  doesElementsHaveCommonMerges(id, cmd.base - 1, cmd.base)) {
39632
39656
  return 2 /* CommandResult.WillRemoveExistingMerge */;
39633
39657
  }
39658
+ const headers = [cmd.base, ...cmd.elements];
39659
+ const maxHeaderValue = isCol ? this.getters.getNumberCols(id) : this.getters.getNumberRows(id);
39660
+ if (headers.some((h) => h < 0 || h >= maxHeaderValue)) {
39661
+ return 86 /* CommandResult.InvalidHeaderIndex */;
39662
+ }
39634
39663
  return 0 /* CommandResult.Success */;
39635
39664
  }
39636
39665
  //-------------------------------------------
@@ -41868,7 +41897,7 @@ class Spreadsheet extends owl.Component {
41868
41897
  }
41869
41898
  onKeydown(ev) {
41870
41899
  let keyDownString = "";
41871
- if (ev.ctrlKey || ev.metaKey) {
41900
+ if (isCtrlKey(ev)) {
41872
41901
  keyDownString += "CTRL+";
41873
41902
  }
41874
41903
  keyDownString += ev.key.toUpperCase();
@@ -45572,6 +45601,6 @@ exports.setTranslationMethod = setTranslationMethod;
45572
45601
  exports.tokenize = tokenize;
45573
45602
 
45574
45603
 
45575
- __info__.version = '16.2.23';
45576
- __info__.date = '2023-11-24T13:11:02.651Z';
45577
- __info__.hash = '3c723d3';
45604
+ __info__.version = '16.2.26';
45605
+ __info__.date = '2024-01-04T16:19:52.806Z';
45606
+ __info__.hash = 'ef51232';
@@ -1507,6 +1507,7 @@ interface MoveColumnsRowsCommand extends GridDependentCommand {
1507
1507
  type: "MOVE_COLUMNS_ROWS";
1508
1508
  base: HeaderIndex;
1509
1509
  elements: HeaderIndex[];
1510
+ position: "before" | "after";
1510
1511
  }
1511
1512
  interface ResizeColumnsRowsCommand extends GridDependentCommand {
1512
1513
  type: "RESIZE_COLUMNS_ROWS";
@@ -3686,7 +3687,7 @@ declare class EvaluationPlugin extends UIPlugin {
3686
3687
  constructor(config: UIPluginConfig);
3687
3688
  handle(cmd: Command): void;
3688
3689
  finalize(): void;
3689
- evaluateFormula(formulaString: string, sheetId?: UID): any;
3690
+ evaluateFormula(formulaString: string, sheetId?: UID): FunctionReturnValue | null;
3690
3691
  /**
3691
3692
  * Return the value of each cell in the range as they are displayed in the grid.
3692
3693
  */
@@ -5781,8 +5782,8 @@ interface Props$h {
5781
5782
  onCellHovered: (position: Partial<Position$1>) => void;
5782
5783
  onCellDoubleClicked: (col: HeaderIndex, row: HeaderIndex) => void;
5783
5784
  onCellClicked: (col: HeaderIndex, row: HeaderIndex, modifiers: {
5784
- ctrlKey: boolean;
5785
- shiftKey: boolean;
5785
+ addZone: boolean;
5786
+ expandZone: boolean;
5786
5787
  }) => void;
5787
5788
  onCellRightClicked: (col: HeaderIndex, row: HeaderIndex, coordinates: DOMCoordinates) => void;
5788
5789
  onGridResized: (dimension: DOMDimension) => void;
@@ -6345,6 +6346,7 @@ interface ResizerState {
6345
6346
  draggerShadowThickness: number;
6346
6347
  delta: number;
6347
6348
  base: number;
6349
+ position: "before" | "after";
6348
6350
  }
6349
6351
  interface ResizerProps {
6350
6352
  onOpenContextMenu: (type: ContextMenuType, x: Pixel, y: Pixel) => void;
@@ -6367,7 +6369,7 @@ declare abstract class AbstractResizer extends Component<ResizerProps, Spreadshe
6367
6369
  abstract _getMaxSize(): Pixel;
6368
6370
  abstract _updateSize(): void;
6369
6371
  abstract _moveElements(): void;
6370
- abstract _selectElement(index: HeaderIndex, ctrlKey: boolean): void;
6372
+ abstract _selectElement(index: HeaderIndex, addDistinctHeader: boolean): void;
6371
6373
  abstract _increaseSelection(index: HeaderIndex): void;
6372
6374
  abstract _fitElementSize(index: HeaderIndex): void;
6373
6375
  abstract _getType(): ContextMenuType;
@@ -6401,7 +6403,7 @@ declare class ColResizer extends AbstractResizer {
6401
6403
  _getMaxSize(): Pixel;
6402
6404
  _updateSize(): void;
6403
6405
  _moveElements(): void;
6404
- _selectElement(index: HeaderIndex, ctrlKey: boolean): void;
6406
+ _selectElement(index: HeaderIndex, addDistinctHeader: boolean): void;
6405
6407
  _increaseSelection(index: HeaderIndex): void;
6406
6408
  _fitElementSize(index: HeaderIndex): void;
6407
6409
  _getType(): ContextMenuType;
@@ -6426,7 +6428,7 @@ declare class RowResizer extends AbstractResizer {
6426
6428
  _getMaxSize(): Pixel;
6427
6429
  _updateSize(): void;
6428
6430
  _moveElements(): void;
6429
- _selectElement(index: HeaderIndex, ctrlKey: boolean): void;
6431
+ _selectElement(index: HeaderIndex, addDistinctHeader: boolean): void;
6430
6432
  _increaseSelection(index: HeaderIndex): void;
6431
6433
  _fitElementSize(index: HeaderIndex): void;
6432
6434
  _getType(): ContextMenuType;
@@ -6553,9 +6555,9 @@ declare class Grid extends Component<Props$1, SpreadsheetChildEnv> {
6553
6555
  getClientPositionKey(client: Client): string;
6554
6556
  isCellHovered(col: HeaderIndex, row: HeaderIndex): boolean;
6555
6557
  private getGridRect;
6556
- onCellClicked(col: HeaderIndex, row: HeaderIndex, { ctrlKey, shiftKey }: {
6557
- ctrlKey: boolean;
6558
- shiftKey: boolean;
6558
+ onCellClicked(col: HeaderIndex, row: HeaderIndex, { addZone, expandZone }: {
6559
+ addZone: boolean;
6560
+ expandZone: boolean;
6559
6561
  }): void;
6560
6562
  onCellDoubleClicked(col: HeaderIndex, row: HeaderIndex): void;
6561
6563
  closeOpenedPopover(): void;