@odoo/o-spreadsheet 16.0.59 → 16.0.60

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.
@@ -22428,6 +22428,9 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
22428
22428
  canvas.width = width * dpr;
22429
22429
  canvas.height = height * dpr;
22430
22430
  canvas.setAttribute("style", `width:${width}px;height:${height}px;`);
22431
+ if (width === 0 || height === 0) {
22432
+ return;
22433
+ }
22431
22434
  // Imagine each pixel as a large square. The whole-number coordinates (0, 1, 2…)
22432
22435
  // are the edges of the squares. If you draw a one-unit-wide line between whole-number
22433
22436
  // coordinates, it will overlap opposite sides of the pixel square, and the resulting
@@ -34631,10 +34634,8 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
34631
34634
  const { ctx, thinLineWidth } = renderingContext;
34632
34635
  const visibleCols = this.getters.getSheetViewVisibleCols();
34633
34636
  const left = visibleCols[0];
34634
- const right = visibleCols[visibleCols.length - 1];
34635
34637
  const visibleRows = this.getters.getSheetViewVisibleRows();
34636
34638
  const top = visibleRows[0];
34637
- const bottom = visibleRows[visibleRows.length - 1];
34638
34639
  const { width, height } = this.getters.getSheetViewDimensionWithHeaders();
34639
34640
  const selection = this.getters.getSelectedZones();
34640
34641
  const selectedCols = getZonesCols(selection);
@@ -34650,7 +34651,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
34650
34651
  ctx.lineWidth = thinLineWidth;
34651
34652
  ctx.strokeStyle = "#333";
34652
34653
  // Columns headers background
34653
- for (let col = left; col <= right; col++) {
34654
+ for (const col of visibleCols) {
34654
34655
  const colZone = { left: col, right: col, top: 0, bottom: numberOfRows - 1 };
34655
34656
  const { x, width } = this.getters.getVisibleRect(colZone);
34656
34657
  const colHasFilter = this.getters.doesZonesContainFilter(sheetId, [colZone]);
@@ -34670,7 +34671,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
34670
34671
  ctx.fillRect(x, 0, width, HEADER_HEIGHT);
34671
34672
  }
34672
34673
  // Rows headers background
34673
- for (let row = top; row <= bottom; row++) {
34674
+ for (const row of visibleRows) {
34674
34675
  const rowZone = { top: row, bottom: row, left: 0, right: numberOfCols - 1 };
34675
34676
  const { y, height } = this.getters.getVisibleRect(rowZone);
34676
34677
  const rowHasFilter = this.getters.doesZonesContainFilter(sheetId, [rowZone]);
@@ -34699,21 +34700,21 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
34699
34700
  ctx.stroke();
34700
34701
  ctx.beginPath();
34701
34702
  // column text + separator
34702
- for (const i of visibleCols) {
34703
- const colSize = this.getters.getColSize(sheetId, i);
34704
- const colName = numberToLetters(i);
34705
- ctx.fillStyle = activeCols.has(i) ? "#fff" : TEXT_HEADER_COLOR;
34706
- let colStart = this.getHeaderOffset("COL", left, i);
34703
+ for (const col of visibleCols) {
34704
+ const colSize = this.getters.getColSize(sheetId, col);
34705
+ const colName = numberToLetters(col);
34706
+ ctx.fillStyle = activeCols.has(col) ? "#fff" : TEXT_HEADER_COLOR;
34707
+ let colStart = this.getHeaderOffset("COL", left, col);
34707
34708
  ctx.fillText(colName, colStart + colSize / 2, HEADER_HEIGHT / 2);
34708
34709
  ctx.moveTo(colStart + colSize, 0);
34709
34710
  ctx.lineTo(colStart + colSize, HEADER_HEIGHT);
34710
34711
  }
34711
34712
  // row text + separator
34712
- for (const i of visibleRows) {
34713
- const rowSize = this.getters.getRowSize(sheetId, i);
34714
- ctx.fillStyle = activeRows.has(i) ? "#fff" : TEXT_HEADER_COLOR;
34715
- let rowStart = this.getHeaderOffset("ROW", top, i);
34716
- ctx.fillText(String(i + 1), HEADER_WIDTH / 2, rowStart + rowSize / 2);
34713
+ for (const row of visibleRows) {
34714
+ const rowSize = this.getters.getRowSize(sheetId, row);
34715
+ ctx.fillStyle = activeRows.has(row) ? "#fff" : TEXT_HEADER_COLOR;
34716
+ let rowStart = this.getHeaderOffset("ROW", top, row);
34717
+ ctx.fillText(String(row + 1), HEADER_WIDTH / 2, rowStart + rowSize / 2);
34717
34718
  ctx.moveTo(0, rowStart + rowSize);
34718
34719
  ctx.lineTo(HEADER_WIDTH, rowStart + rowSize);
34719
34720
  }
@@ -36801,8 +36802,17 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
36801
36802
  this.getters = getters;
36802
36803
  this.sheetId = sheetId;
36803
36804
  this.boundaries = boundaries;
36804
- this.viewportWidth = sizeInGrid.width;
36805
- this.viewportHeight = sizeInGrid.height;
36805
+ if (sizeInGrid.width < 0 || sizeInGrid.height < 0) {
36806
+ throw new Error("Viewport size cannot be negative");
36807
+ }
36808
+ this.viewportWidth = sizeInGrid.height && sizeInGrid.width;
36809
+ this.viewportHeight = sizeInGrid.width && sizeInGrid.height;
36810
+ this.top = boundaries.top;
36811
+ this.bottom = boundaries.bottom;
36812
+ this.left = boundaries.left;
36813
+ this.right = boundaries.right;
36814
+ this.offsetX = offsets.x;
36815
+ this.offsetY = offsets.y;
36806
36816
  this.offsetScrollbarX = offsets.x;
36807
36817
  this.offsetScrollbarY = offsets.y;
36808
36818
  this.canScrollVertically = options.canScrollVertically;
@@ -36991,6 +37001,9 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
36991
37001
  }
36992
37002
  // PRIVATE
36993
37003
  searchHeaderIndex(dimension, position, startIndex = 0, absolute = false) {
37004
+ if (this.viewportWidth <= 0 || this.viewportHeight <= 0) {
37005
+ return -1;
37006
+ }
36994
37007
  let size = 0;
36995
37008
  const sheetId = this.sheetId;
36996
37009
  const headers = this.getters.getNumberHeaders(sheetId, dimension);
@@ -37029,7 +37042,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37029
37042
  this.adjustViewportZoneY();
37030
37043
  }
37031
37044
  /** Corrects the viewport's horizontal offset based on the current structure
37032
- * To make sure that at least on column is visible inside the viewport.
37045
+ * To make sure that at least one column is visible inside the viewport.
37033
37046
  */
37034
37047
  adjustViewportOffsetX() {
37035
37048
  if (this.canScrollHorizontally) {
@@ -37046,7 +37059,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37046
37059
  this.adjustViewportZoneX();
37047
37060
  }
37048
37061
  /** Corrects the viewport's vertical offset based on the current structure
37049
- * To make sure that at least on row is visible inside the viewport.
37062
+ * To make sure that at least one row is visible inside the viewport.
37050
37063
  */
37051
37064
  adjustViewportOffsetY() {
37052
37065
  if (this.canScrollVertically) {
@@ -37068,11 +37081,14 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37068
37081
  const sheetId = this.sheetId;
37069
37082
  this.left = this.searchHeaderIndex("COL", this.offsetScrollbarX, this.boundaries.left);
37070
37083
  this.right = Math.min(this.boundaries.right, this.searchHeaderIndex("COL", this.viewportWidth, this.left));
37084
+ if (!this.viewportWidth) {
37085
+ return;
37086
+ }
37071
37087
  if (this.left === -1) {
37072
37088
  this.left = this.boundaries.left;
37073
37089
  }
37074
37090
  if (this.right === -1) {
37075
- this.right = this.getters.getNumberCols(sheetId) - 1;
37091
+ this.right = this.boundaries.right;
37076
37092
  }
37077
37093
  this.offsetX =
37078
37094
  this.getters.getColDimensions(sheetId, this.left).start -
@@ -37084,11 +37100,14 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37084
37100
  const sheetId = this.sheetId;
37085
37101
  this.top = this.searchHeaderIndex("ROW", this.offsetScrollbarY, this.boundaries.top);
37086
37102
  this.bottom = Math.min(this.boundaries.bottom, this.searchHeaderIndex("ROW", this.viewportHeight, this.top));
37103
+ if (!this.viewportHeight) {
37104
+ return;
37105
+ }
37087
37106
  if (this.top === -1) {
37088
37107
  this.top = this.boundaries.top;
37089
37108
  }
37090
37109
  if (this.bottom === -1) {
37091
- this.bottom = this.getters.getNumberRows(sheetId) - 1;
37110
+ this.bottom = this.boundaries.bottom;
37092
37111
  }
37093
37112
  this.offsetY =
37094
37113
  this.getters.getRowDimensions(sheetId, this.top).start -
@@ -37340,12 +37359,12 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37340
37359
  getSheetViewVisibleCols() {
37341
37360
  const sheetId = this.getters.getActiveSheetId();
37342
37361
  const viewports = this.getSubViewports(sheetId);
37343
- return [...new Set(viewports.map((v) => range(v.left, v.right + 1)).flat())].filter((col) => !this.getters.isHeaderHidden(sheetId, "COL", col));
37362
+ return [...new Set(viewports.map((v) => range(v.left, v.right + 1)).flat())].filter((col) => col >= 0 && !this.getters.isHeaderHidden(sheetId, "COL", col));
37344
37363
  }
37345
37364
  getSheetViewVisibleRows() {
37346
37365
  const sheetId = this.getters.getActiveSheetId();
37347
37366
  const viewports = this.getSubViewports(sheetId);
37348
- return [...new Set(viewports.map((v) => range(v.top, v.bottom + 1)).flat())].filter((row) => !this.getters.isHeaderHidden(sheetId, "ROW", row));
37367
+ return [...new Set(viewports.map((v) => range(v.top, v.bottom + 1)).flat())].filter((row) => row >= 0 && !this.getters.isHeaderHidden(sheetId, "ROW", row));
37349
37368
  }
37350
37369
  /**
37351
37370
  * Return the main viewport maximum size relative to the client size.
@@ -37368,19 +37387,19 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37368
37387
  maxOffsetY: Math.max(0, height - viewport.viewportHeight + 1),
37369
37388
  };
37370
37389
  }
37371
- getColRowOffsetInViewport(dimension, referenceIndex, index) {
37372
- const sheetId = this.getters.getActiveSheetId();
37373
- const visibleCols = this.getters.getSheetViewVisibleCols();
37374
- const visibleRows = this.getters.getSheetViewVisibleRows();
37375
- if (index < referenceIndex) {
37376
- return -this.getColRowOffsetInViewport(dimension, index, referenceIndex);
37390
+ getColRowOffsetInViewport(dimension, referenceHeaderIndex, targetHeaderIndex) {
37391
+ if (targetHeaderIndex < referenceHeaderIndex) {
37392
+ return -this.getColRowOffsetInViewport(dimension, targetHeaderIndex, referenceHeaderIndex);
37377
37393
  }
37394
+ const sheetId = this.getters.getActiveSheetId();
37395
+ const visibleHeaders = dimension === "COL"
37396
+ ? this.getters.getSheetViewVisibleCols()
37397
+ : this.getters.getSheetViewVisibleRows();
37398
+ const startIndex = visibleHeaders.findIndex((header) => referenceHeaderIndex >= header);
37399
+ const endIndex = visibleHeaders.findIndex((header) => targetHeaderIndex <= header);
37400
+ const relevantIndexes = visibleHeaders.slice(startIndex, endIndex);
37378
37401
  let offset = 0;
37379
- const visibleIndexes = dimension === "COL" ? visibleCols : visibleRows;
37380
- for (let i = referenceIndex; i < index; i++) {
37381
- if (!visibleIndexes.includes(i)) {
37382
- continue;
37383
- }
37402
+ for (const i of relevantIndexes) {
37384
37403
  offset +=
37385
37404
  dimension === "COL"
37386
37405
  ? this.getters.getColSize(sheetId, i)
@@ -37430,7 +37449,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37430
37449
  }
37431
37450
  return { canEdgeScroll, direction, delay };
37432
37451
  }
37433
- getEdgeScrollRow(y, previousY, tartingY) {
37452
+ getEdgeScrollRow(y, previousY, startingY) {
37434
37453
  let canEdgeScroll = false;
37435
37454
  let direction = 0;
37436
37455
  let delay = 0;
@@ -37451,7 +37470,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37451
37470
  delay = scrollDelay(y - height);
37452
37471
  direction = 1;
37453
37472
  }
37454
- else if (y < offsetCorrectionY && tartingY >= offsetCorrectionY && currentOffsetY > 0) {
37473
+ else if (y < offsetCorrectionY && startingY >= offsetCorrectionY && currentOffsetY > 0) {
37455
37474
  // 2
37456
37475
  canEdgeScroll = true;
37457
37476
  delay = scrollDelay(offsetCorrectionY - y);
@@ -37470,13 +37489,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37470
37489
  */
37471
37490
  getVisibleRect(zone) {
37472
37491
  const sheetId = this.getters.getActiveSheetId();
37473
- const viewportRects = this.getSubViewports(sheetId)
37474
- .map((viewport) => viewport.getVisibleRect(zone))
37475
- .filter(isDefined$1);
37476
- if (viewportRects.length === 0) {
37477
- return { x: 0, y: 0, width: 0, height: 0 };
37478
- }
37479
- return this.recomposeRect(viewportRects);
37492
+ return this.mapViewportsToRect(sheetId, (viewport) => viewport.getVisibleRect(zone));
37480
37493
  }
37481
37494
  /**
37482
37495
  * Computes the actual size and position (:Rect) of the zone on the canvas
@@ -37484,13 +37497,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37484
37497
  */
37485
37498
  getRect(zone) {
37486
37499
  const sheetId = this.getters.getActiveSheetId();
37487
- const viewportRects = this.getSubViewports(sheetId)
37488
- .map((viewport) => viewport.getFullRect(zone))
37489
- .filter(isDefined$1);
37490
- if (viewportRects.length === 0) {
37491
- return { x: 0, y: 0, width: 0, height: 0 };
37492
- }
37493
- return this.recomposeRect(viewportRects);
37500
+ return this.mapViewportsToRect(sheetId, (viewport) => viewport.getFullRect(zone));
37494
37501
  }
37495
37502
  /**
37496
37503
  * Returns the position of the MainViewport relatively to the start of the grid (without headers)
@@ -37559,12 +37566,11 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37559
37566
  }
37560
37567
  /** gets rid of deprecated sheetIds */
37561
37568
  cleanViewports() {
37562
- const sheetIds = this.getters.getSheetIds();
37563
- for (let sheetId of Object.keys(this.viewports)) {
37564
- if (!sheetIds.includes(sheetId)) {
37565
- delete this.viewports[sheetId];
37566
- }
37569
+ const newViewport = {};
37570
+ for (const sheetId of this.getters.getSheetIds()) {
37571
+ newViewport[sheetId] = this.viewports[sheetId];
37567
37572
  }
37573
+ this.viewports = newViewport;
37568
37574
  }
37569
37575
  resetSheetViews() {
37570
37576
  this.cleanViewports();
@@ -37585,14 +37591,14 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37585
37591
  this.recomputeViewports();
37586
37592
  }
37587
37593
  recomputeViewports() {
37588
- for (let sheetId of Object.keys(this.viewports)) {
37594
+ for (const sheetId of this.getters.getSheetIds()) {
37589
37595
  this.resetViewports(sheetId);
37590
37596
  }
37591
37597
  }
37592
37598
  setSheetViewOffset(offsetX, offsetY) {
37593
37599
  const sheetId = this.getters.getActiveSheetId();
37594
37600
  const { maxOffsetX, maxOffsetY } = this.getMaximumSheetOffset();
37595
- Object.values(this.getSubViewports(sheetId)).forEach((viewport) => viewport.setViewportOffset(clip(offsetX, 0, maxOffsetX), clip(offsetY, 0, maxOffsetY)));
37601
+ this.getSubViewports(sheetId).forEach((viewport) => viewport.setViewportOffset(clip(offsetX, 0, maxOffsetX), clip(offsetY, 0, maxOffsetY)));
37596
37602
  }
37597
37603
  getViewportOffset(sheetId) {
37598
37604
  var _a, _b;
@@ -37608,8 +37614,10 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37608
37614
  const { xSplit, ySplit } = this.getters.getPaneDivisions(sheetId);
37609
37615
  const nCols = this.getters.getNumberCols(sheetId);
37610
37616
  const nRows = this.getters.getNumberRows(sheetId);
37611
- const colOffset = this.getters.getColRowOffset("COL", 0, xSplit, sheetId);
37612
- const rowOffset = this.getters.getColRowOffset("ROW", 0, ySplit, sheetId);
37617
+ const colOffset = Math.min(this.getters.getColRowOffset("COL", 0, xSplit, sheetId), this.sheetViewWidth);
37618
+ const rowOffset = Math.min(this.getters.getColRowOffset("ROW", 0, ySplit, sheetId), this.sheetViewHeight);
37619
+ const unfrozenWidth = Math.max(this.sheetViewWidth - colOffset, 0);
37620
+ const unfrozenHeight = Math.max(this.sheetViewHeight - rowOffset, 0);
37613
37621
  const { xRatio, yRatio } = this.getFrozenSheetViewRatio(sheetId);
37614
37622
  const canScrollHorizontally = xRatio < 1.0;
37615
37623
  const canScrollVertically = yRatio < 1.0;
@@ -37620,14 +37628,14 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37620
37628
  new InternalViewport(this.getters, sheetId, { left: 0, right: xSplit - 1, top: 0, bottom: ySplit - 1 }, { width: colOffset, height: rowOffset }, { canScrollHorizontally: false, canScrollVertically: false }, { x: 0, y: 0 })) ||
37621
37629
  undefined,
37622
37630
  topRight: (ySplit &&
37623
- new InternalViewport(this.getters, sheetId, { left: xSplit, right: nCols - 1, top: 0, bottom: ySplit - 1 }, { width: this.sheetViewWidth - colOffset, height: rowOffset }, { canScrollHorizontally, canScrollVertically: false }, { x: canScrollHorizontally ? previousOffset.x : 0, y: 0 })) ||
37631
+ new InternalViewport(this.getters, sheetId, { left: xSplit, right: nCols - 1, top: 0, bottom: ySplit - 1 }, { width: unfrozenWidth, height: rowOffset }, { canScrollHorizontally, canScrollVertically: false }, { x: canScrollHorizontally ? previousOffset.x : 0, y: 0 })) ||
37624
37632
  undefined,
37625
37633
  bottomLeft: (xSplit &&
37626
- new InternalViewport(this.getters, sheetId, { left: 0, right: xSplit - 1, top: ySplit, bottom: nRows - 1 }, { width: colOffset, height: this.sheetViewHeight - rowOffset }, { canScrollHorizontally: false, canScrollVertically }, { x: 0, y: canScrollVertically ? previousOffset.y : 0 })) ||
37634
+ new InternalViewport(this.getters, sheetId, { left: 0, right: xSplit - 1, top: ySplit, bottom: nRows - 1 }, { width: colOffset, height: unfrozenHeight }, { canScrollHorizontally: false, canScrollVertically }, { x: 0, y: canScrollVertically ? previousOffset.y : 0 })) ||
37627
37635
  undefined,
37628
37636
  bottomRight: new InternalViewport(this.getters, sheetId, { left: xSplit, right: nCols - 1, top: ySplit, bottom: nRows - 1 }, {
37629
- width: this.sheetViewWidth - colOffset,
37630
- height: this.sheetViewHeight - rowOffset,
37637
+ width: unfrozenWidth,
37638
+ height: unfrozenHeight,
37631
37639
  }, { canScrollHorizontally, canScrollVertically }, {
37632
37640
  x: canScrollHorizontally ? previousOffset.x : 0,
37633
37641
  y: canScrollVertically ? previousOffset.y : 0,
@@ -37639,7 +37647,7 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37639
37647
  * Adjust the viewport such that the anchor position is visible
37640
37648
  */
37641
37649
  refreshViewport(sheetId, anchorPosition) {
37642
- Object.values(this.getSubViewports(sheetId)).forEach((viewport) => {
37650
+ this.getSubViewports(sheetId).forEach((viewport) => {
37643
37651
  viewport.adjustViewportZone();
37644
37652
  viewport.adjustPosition(anchorPosition);
37645
37653
  });
@@ -37690,16 +37698,30 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
37690
37698
  const height = this.sheetViewHeight + this.gridOffsetY;
37691
37699
  return { xRatio: offsetCorrectionX / width, yRatio: offsetCorrectionY / height };
37692
37700
  }
37693
- recomposeRect(viewportRects) {
37694
- const x = Math.min(...viewportRects.map((rect) => rect.x));
37695
- const y = Math.min(...viewportRects.map((rect) => rect.y));
37696
- const width = Math.max(...viewportRects.map((rect) => rect.x + rect.width)) - x;
37697
- const height = Math.max(...viewportRects.map((rect) => rect.y + rect.height)) - y;
37701
+ mapViewportsToRect(sheetId, rectCallBack) {
37702
+ let x = Infinity;
37703
+ let y = Infinity;
37704
+ let width = 0;
37705
+ let height = 0;
37706
+ let hasViewports = false;
37707
+ for (const viewport of this.getSubViewports(sheetId)) {
37708
+ const rect = rectCallBack(viewport);
37709
+ if (rect) {
37710
+ hasViewports = true;
37711
+ x = Math.min(x, rect.x);
37712
+ y = Math.min(y, rect.y);
37713
+ width = Math.max(width, rect.x + rect.width);
37714
+ height = Math.max(height, rect.y + rect.height);
37715
+ }
37716
+ }
37717
+ if (!hasViewports) {
37718
+ return { x: 0, y: 0, width: 0, height: 0 };
37719
+ }
37698
37720
  return {
37699
37721
  x: x + this.gridOffsetX,
37700
37722
  y: y + this.gridOffsetY,
37701
- width,
37702
- height,
37723
+ width: width - x,
37724
+ height: height - y,
37703
37725
  };
37704
37726
  }
37705
37727
  }
@@ -43567,9 +43589,9 @@ day_count_convention (number, default=${DEFAULT_DAY_COUNT_CONVENTION} ) ${_lt("A
43567
43589
  Object.defineProperty(exports, '__esModule', { value: true });
43568
43590
 
43569
43591
 
43570
- __info__.version = '16.0.59';
43571
- __info__.date = '2025-01-29T06:24:17.486Z';
43572
- __info__.hash = '0897f45';
43592
+ __info__.version = '16.0.60';
43593
+ __info__.date = '2025-02-05T06:44:04.651Z';
43594
+ __info__.hash = 'd098699';
43573
43595
 
43574
43596
 
43575
43597
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);