@univerjs/engine-render 0.22.1 → 0.23.0-insiders.20260522-ee0b0a4

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/lib/cjs/index.js CHANGED
@@ -4715,8 +4715,9 @@ var SpreadsheetColumnHeader = class extends SpreadsheetHeader {
4715
4715
  const segment = spreadsheetSkeleton.rowColumnSegment;
4716
4716
  if (!segment) return;
4717
4717
  if (segment.startColumn === -1 && segment.endColumn === -1) return;
4718
- const { rowHeaderWidth } = spreadsheetSkeleton;
4719
- ctx.translateWithPrecision(rowHeaderWidth, 0);
4718
+ const { columnHeaderHeight, columnHeaderHeightAndMarginTop, rowHeaderWidthAndMarginLeft } = spreadsheetSkeleton;
4719
+ const marginTop = columnHeaderHeightAndMarginTop - columnHeaderHeight;
4720
+ ctx.translateWithPrecision(rowHeaderWidthAndMarginLeft, marginTop);
4720
4721
  const extensions = this.getExtensionsByOrder();
4721
4722
  for (const extension of extensions) extension.draw(ctx, parentScale, spreadsheetSkeleton);
4722
4723
  }
@@ -4724,8 +4725,9 @@ var SpreadsheetColumnHeader = class extends SpreadsheetHeader {
4724
4725
  const oCoord = this.getInverseCoord(coord);
4725
4726
  const skeleton = this.getSkeleton();
4726
4727
  if (!skeleton) return false;
4727
- const { rowHeaderWidth, columnHeaderHeight } = skeleton;
4728
- if (oCoord.x > rowHeaderWidth && oCoord.y >= 0 && oCoord.y <= columnHeaderHeight) return true;
4728
+ const { rowHeaderWidthAndMarginLeft, columnHeaderHeight, columnHeaderHeightAndMarginTop } = skeleton;
4729
+ const marginTop = columnHeaderHeightAndMarginTop - columnHeaderHeight;
4730
+ if (oCoord.x > rowHeaderWidthAndMarginLeft && oCoord.y >= marginTop && oCoord.y <= columnHeaderHeightAndMarginTop) return true;
4729
4731
  return false;
4730
4732
  }
4731
4733
  _initialDefaultExtension() {
@@ -5474,36 +5476,38 @@ var Custom = class extends SheetExtension {
5474
5476
  if (!worksheet) return;
5475
5477
  const mergeCellRendered = /* @__PURE__ */ new Set();
5476
5478
  const subUnitId = worksheet.getSheetId();
5477
- _univerjs_core.Range.foreach(rowColumnSegment, (row, col) => {
5478
- if (!worksheet.getRowVisible(row) || !worksheet.getColVisible(col)) return;
5479
- let primaryWithCoord = skeleton.getCellWithCoordByIndex(row, col, false);
5480
- const { mergeInfo } = primaryWithCoord;
5481
- let cellData = worksheet.getCell(row, col);
5482
- if (primaryWithCoord.isMerged) cellData = worksheet.getCell(mergeInfo.startRow, mergeInfo.startColumn);
5483
- if (!(cellData === null || cellData === void 0 ? void 0 : cellData.customRender)) return;
5484
- if (!this.isRenderDiffRangesByRow(mergeInfo.startRow, mergeInfo.endRow, diffRanges)) return true;
5485
- if (primaryWithCoord.isMerged || primaryWithCoord.isMergedMainCell) {
5486
- const rangeStr = stringifyRange$1(mergeInfo);
5487
- if (mergeCellRendered.has(rangeStr)) return;
5488
- mergeCellRendered.add(rangeStr);
5489
- }
5490
- if (primaryWithCoord.isMerged) primaryWithCoord = skeleton.getCellWithCoordByIndex(mergeInfo.startRow, mergeInfo.startColumn, false);
5491
- const renderInfo = {
5492
- data: cellData,
5493
- style: skeleton.getStyles().getStyleByCell(cellData),
5494
- primaryWithCoord,
5495
- subUnitId,
5496
- row,
5497
- col,
5498
- worksheet,
5499
- unitId: worksheet.unitId
5500
- };
5501
- const customRender = cellData.customRender.sort(_univerjs_core.sortRules);
5502
- ctx.save();
5503
- customRender.forEach((item) => {
5504
- item.drawWith(ctx, renderInfo, skeleton, this.parent);
5479
+ ((diffRanges === null || diffRanges === void 0 ? void 0 : diffRanges.length) ? diffRanges : [rowColumnSegment]).forEach((range) => {
5480
+ _univerjs_core.Range.foreach(range, (row, col) => {
5481
+ if (!worksheet.getRowVisible(row) || !worksheet.getColVisible(col)) return;
5482
+ let primaryWithCoord = skeleton.getCellWithCoordByIndex(row, col, false);
5483
+ const { mergeInfo } = primaryWithCoord;
5484
+ let cellData = worksheet.getCell(row, col);
5485
+ if (primaryWithCoord.isMerged) cellData = worksheet.getCell(mergeInfo.startRow, mergeInfo.startColumn);
5486
+ if (!(cellData === null || cellData === void 0 ? void 0 : cellData.customRender)) return;
5487
+ if (!this.isRenderDiffRangesByRow(mergeInfo.startRow, mergeInfo.endRow, diffRanges)) return true;
5488
+ if (primaryWithCoord.isMerged || primaryWithCoord.isMergedMainCell) {
5489
+ const rangeStr = stringifyRange$1(mergeInfo);
5490
+ if (mergeCellRendered.has(rangeStr)) return;
5491
+ mergeCellRendered.add(rangeStr);
5492
+ }
5493
+ if (primaryWithCoord.isMerged) primaryWithCoord = skeleton.getCellWithCoordByIndex(mergeInfo.startRow, mergeInfo.startColumn, false);
5494
+ const renderInfo = {
5495
+ data: cellData,
5496
+ style: skeleton.getStyles().getStyleByCell(cellData),
5497
+ primaryWithCoord,
5498
+ subUnitId,
5499
+ row,
5500
+ col,
5501
+ worksheet,
5502
+ unitId: worksheet.unitId
5503
+ };
5504
+ const customRender = cellData.customRender.sort(_univerjs_core.sortRules);
5505
+ ctx.save();
5506
+ customRender.forEach((item) => {
5507
+ item.drawWith(ctx, renderInfo, skeleton, this.parent);
5508
+ });
5509
+ ctx.restore();
5505
5510
  });
5506
- ctx.restore();
5507
5511
  });
5508
5512
  }
5509
5513
  };
@@ -17294,54 +17298,58 @@ let SpreadsheetSkeleton = class SpreadsheetSkeleton extends _univerjs_core.Sheet
17294
17298
  * @param vpInfo viewBounds
17295
17299
  */
17296
17300
  setStylesCache(vpInfo) {
17301
+ var _vpInfo$diffBounds, _vpInfo$diffCacheBoun, _vpInfo$diffCacheBoun2, _vpInfo$diffCacheBoun3;
17297
17302
  if (!this._worksheetData) return;
17298
17303
  if (!this.rowHeightAccumulation || !this.columnWidthAccumulation) return;
17299
17304
  this.updateVisibleRange(vpInfo);
17300
17305
  const rowColumnSegment = this._drawingRange;
17301
17306
  const columnWidthAccumulation = this.columnWidthAccumulation;
17302
- const { startRow: visibleStartRow, endRow: visibleEndRow, startColumn: visibleStartColumn, endColumn: visibleEndColumn } = rowColumnSegment;
17303
- if (visibleEndColumn === -1 || visibleEndRow === -1) return;
17304
- const mergeVisibleRanges = [];
17305
- let mergeVisibleRangeStartRow = visibleStartRow;
17306
- const expandStartCol = Math.max(0, visibleStartColumn - 20);
17307
- const expandEndCol = Math.min(columnWidthAccumulation.length - 1, visibleEndColumn + 20);
17308
- for (let r = visibleStartRow; r <= visibleEndRow; r++) {
17309
- if (this.worksheet.getRowVisible(r) === false) {
17310
- if (mergeVisibleRangeStartRow < r) mergeVisibleRanges.push({
17307
+ const styleRanges = !!vpInfo && !vpInfo.isDirty && !vpInfo.isForceDirty && (!!((_vpInfo$diffBounds = vpInfo.diffBounds) === null || _vpInfo$diffBounds === void 0 ? void 0 : _vpInfo$diffBounds.length) || !!((_vpInfo$diffCacheBoun = vpInfo.diffCacheBounds) === null || _vpInfo$diffCacheBoun === void 0 ? void 0 : _vpInfo$diffCacheBoun.length) || !!vpInfo.diffX || !!vpInfo.diffY) ? vpInfo.shouldCacheUpdate ? (_vpInfo$diffCacheBoun2 = (_vpInfo$diffCacheBoun3 = vpInfo.diffCacheBounds) === null || _vpInfo$diffCacheBoun3 === void 0 ? void 0 : _vpInfo$diffCacheBoun3.map((bound) => this.getRangeByViewBound(bound))) !== null && _vpInfo$diffCacheBoun2 !== void 0 ? _vpInfo$diffCacheBoun2 : [] : [] : [rowColumnSegment];
17308
+ for (const styleRange of styleRanges) {
17309
+ const { startRow: visibleStartRow, endRow: visibleEndRow, startColumn: visibleStartColumn, endColumn: visibleEndColumn } = styleRange;
17310
+ if (visibleEndColumn === -1 || visibleEndRow === -1) continue;
17311
+ const mergeVisibleRanges = [];
17312
+ let mergeVisibleRangeStartRow = visibleStartRow;
17313
+ const expandStartCol = Math.max(0, visibleStartColumn - 20);
17314
+ const expandEndCol = Math.min(columnWidthAccumulation.length - 1, visibleEndColumn + 20);
17315
+ for (let r = visibleStartRow; r <= visibleEndRow; r++) {
17316
+ if (this.worksheet.getRowVisible(r) === false) {
17317
+ if (mergeVisibleRangeStartRow < r) mergeVisibleRanges.push({
17318
+ startRow: mergeVisibleRangeStartRow,
17319
+ endRow: r - 1,
17320
+ startColumn: visibleStartColumn,
17321
+ endColumn: visibleEndColumn
17322
+ });
17323
+ mergeVisibleRangeStartRow = r + 1;
17324
+ continue;
17325
+ }
17326
+ if (r === visibleEndRow) mergeVisibleRanges.push({
17311
17327
  startRow: mergeVisibleRangeStartRow,
17312
- endRow: r - 1,
17328
+ endRow: r,
17313
17329
  startColumn: visibleStartColumn,
17314
17330
  endColumn: visibleEndColumn
17315
17331
  });
17316
- mergeVisibleRangeStartRow = r + 1;
17317
- continue;
17332
+ for (let c = visibleStartColumn; c <= visibleEndColumn; c++) this._setStylesCacheForOneCell(r, c, { cacheItem: {
17333
+ bg: true,
17334
+ border: true
17335
+ } });
17336
+ for (let c = expandStartCol; c < visibleEndColumn; c++) this._setStylesCacheForOneCell(r, c, { cacheItem: {
17337
+ bg: false,
17338
+ border: false
17339
+ } });
17340
+ if (visibleEndColumn === 0) continue;
17341
+ for (let c = visibleEndColumn + 1; c < expandEndCol; c++) this._setStylesCacheForOneCell(r, c, { cacheItem: {
17342
+ bg: false,
17343
+ border: false
17344
+ } });
17318
17345
  }
17319
- if (r === visibleEndRow) mergeVisibleRanges.push({
17320
- startRow: mergeVisibleRangeStartRow,
17321
- endRow: r,
17322
- startColumn: visibleStartColumn,
17323
- endColumn: visibleEndColumn
17324
- });
17325
- for (let c = visibleStartColumn; c <= visibleEndColumn; c++) this._setStylesCacheForOneCell(r, c, { cacheItem: {
17326
- bg: true,
17327
- border: true
17328
- } });
17329
- for (let c = expandStartCol; c < visibleEndColumn; c++) this._setStylesCacheForOneCell(r, c, { cacheItem: {
17330
- bg: false,
17331
- border: false
17332
- } });
17333
- if (visibleEndColumn === 0) continue;
17334
- for (let c = visibleEndColumn + 1; c < expandEndCol; c++) this._setStylesCacheForOneCell(r, c, { cacheItem: {
17335
- bg: false,
17336
- border: false
17337
- } });
17338
- }
17339
- const mergeRanges = [];
17340
- for (const mergeVisibleRange of mergeVisibleRanges) {
17341
- const mergeRangeInVisible = this.getCurrentRowColumnSegmentMergeData(mergeVisibleRange);
17342
- mergeRanges.push(...mergeRangeInVisible);
17346
+ const mergeRanges = [];
17347
+ for (const mergeVisibleRange of mergeVisibleRanges) {
17348
+ const mergeRangeInVisible = this.getCurrentRowColumnSegmentMergeData(mergeVisibleRange);
17349
+ mergeRanges.push(...mergeRangeInVisible);
17350
+ }
17351
+ for (const mergeRange of mergeRanges) this._setStylesCacheForOneCell(mergeRange.startRow, mergeRange.startColumn, { mergeRange });
17343
17352
  }
17344
- for (const mergeRange of mergeRanges) this._setStylesCacheForOneCell(mergeRange.startRow, mergeRange.startColumn, { mergeRange });
17345
17353
  return this;
17346
17354
  }
17347
17355
  /**
@@ -18308,12 +18316,19 @@ var Font = class extends SheetExtension {
18308
18316
  if (!rowHeightAccumulation || !columnWidthAccumulation || columnTotalWidth === void 0 || rowTotalHeight === void 0 || !worksheet) return;
18309
18317
  const scale = this._getScale(parentScale);
18310
18318
  const { viewRanges = [], checkOutOfViewBound } = moreBoundsInfo;
18319
+ const lastRowIndex = spreadsheetSkeleton.getRowCount() - 1;
18320
+ const lastColIndex = spreadsheetSkeleton.getColumnCount() - 1;
18321
+ const expandedViewRanges = viewRanges.map((range) => clampRange({
18322
+ ...range,
18323
+ startColumn: range.startColumn - 20,
18324
+ endColumn: range.endColumn + 20
18325
+ }, lastRowIndex, lastColIndex));
18311
18326
  const renderFontContext = {
18312
18327
  ctx,
18313
18328
  scale,
18314
18329
  columnTotalWidth,
18315
18330
  rowTotalHeight,
18316
- viewRanges,
18331
+ viewRanges: expandedViewRanges,
18317
18332
  checkOutOfViewBound: checkOutOfViewBound || true,
18318
18333
  diffRanges,
18319
18334
  spreadsheetSkeleton
@@ -18321,12 +18336,7 @@ var Font = class extends SheetExtension {
18321
18336
  ctx.save();
18322
18337
  const uniqueMergeRanges = [];
18323
18338
  const mergeRangeIDSet = /* @__PURE__ */ new Set();
18324
- const lastRowIndex = spreadsheetSkeleton.getRowCount() - 1;
18325
- const lastColIndex = spreadsheetSkeleton.getColumnCount() - 1;
18326
- viewRanges.forEach((range) => {
18327
- range.startColumn -= 20;
18328
- range.endColumn += 20;
18329
- range = clampRange(range, lastRowIndex, lastColIndex);
18339
+ expandedViewRanges.forEach((range) => {
18330
18340
  spreadsheetSkeleton.worksheet.getMergedCellRange(range.startRow, range.startColumn, range.endRow, range.endColumn).forEach((mergeRange) => {
18331
18341
  const mergeRangeIndex = spreadsheetSkeleton.worksheet.getSpanModel().getMergeDataIndex(mergeRange.startRow, mergeRange.startColumn);
18332
18342
  if (!mergeRangeIDSet.has(mergeRangeIndex)) {
@@ -18654,93 +18664,95 @@ var Marker = class extends SheetExtension {
18654
18664
  const { worksheet, rowColumnSegment } = skeleton;
18655
18665
  if (!worksheet) return;
18656
18666
  const mergeCellRendered = /* @__PURE__ */ new Set();
18657
- _univerjs_core.Range.foreach(rowColumnSegment, (row, col) => {
18658
- var _cellData$markers, _cellData$markers2, _cellData$markers3, _cellData$markers4;
18659
- if (!worksheet.getRowVisible(row) || !worksheet.getColVisible(col)) return;
18660
- let cellData = worksheet.getCell(row, col);
18661
- const cellInfo = skeleton.getCellWithCoordByIndex(row, col, false);
18662
- const { isMerged, isMergedMainCell, mergeInfo } = cellInfo;
18663
- let { startY, endY, startX, endX } = cellInfo;
18664
- if (isMergedMainCell || isMerged) {
18665
- startY = mergeInfo.startY;
18666
- endY = mergeInfo.endY;
18667
- startX = mergeInfo.startX;
18668
- endX = mergeInfo.endX;
18669
- }
18670
- if (isMerged) {
18671
- const mainCell = {
18672
- row: mergeInfo.startRow,
18673
- col: mergeInfo.startColumn
18674
- };
18675
- cellData = worksheet.getCell(mainCell.row, mainCell.col);
18676
- }
18677
- if (!this.isRenderDiffRangesByRow(mergeInfo.startRow, mergeInfo.endRow, diffRanges)) return true;
18678
- if (cellInfo.isMerged || cellInfo.isMergedMainCell) {
18679
- const rangeStr = stringifyRange(mergeInfo);
18680
- if (mergeCellRendered.has(rangeStr)) return;
18681
- mergeCellRendered.add(rangeStr);
18682
- }
18683
- if (!cellData) return;
18684
- if ((_cellData$markers = cellData.markers) === null || _cellData$markers === void 0 ? void 0 : _cellData$markers.tr) {
18685
- ctx.save();
18686
- const marker = cellData.markers.tr;
18687
- const x = endX;
18688
- const y = startY;
18689
- ctx.fillStyle = marker.color;
18690
- ctx.moveTo(x, y);
18691
- ctx.beginPath();
18692
- ctx.lineTo(x - marker.size, y);
18693
- ctx.lineTo(x, y + marker.size);
18694
- ctx.lineTo(x, y);
18695
- ctx.closePath();
18696
- ctx.fill();
18697
- ctx.restore();
18698
- }
18699
- if ((_cellData$markers2 = cellData.markers) === null || _cellData$markers2 === void 0 ? void 0 : _cellData$markers2.tl) {
18700
- ctx.save();
18701
- const marker = cellData.markers.tl;
18702
- const x = startX;
18703
- const y = startY;
18704
- ctx.fillStyle = marker.color;
18705
- ctx.moveTo(x, y);
18706
- ctx.beginPath();
18707
- ctx.lineTo(x + marker.size, y);
18708
- ctx.lineTo(x, y + marker.size);
18709
- ctx.lineTo(x, y);
18710
- ctx.closePath();
18711
- ctx.fill();
18712
- ctx.restore();
18713
- }
18714
- if ((_cellData$markers3 = cellData.markers) === null || _cellData$markers3 === void 0 ? void 0 : _cellData$markers3.br) {
18715
- ctx.save();
18716
- const marker = cellData.markers.br;
18717
- const x = endX;
18718
- const y = endY;
18719
- ctx.fillStyle = marker.color;
18720
- ctx.moveTo(x, y);
18721
- ctx.beginPath();
18722
- ctx.lineTo(x - marker.size, y);
18723
- ctx.lineTo(x, y - marker.size);
18724
- ctx.lineTo(x, y);
18725
- ctx.closePath();
18726
- ctx.fill();
18727
- ctx.restore();
18728
- }
18729
- if ((_cellData$markers4 = cellData.markers) === null || _cellData$markers4 === void 0 ? void 0 : _cellData$markers4.bl) {
18730
- ctx.save();
18731
- const marker = cellData.markers.bl;
18732
- const x = startX;
18733
- const y = endY;
18734
- ctx.fillStyle = marker.color;
18735
- ctx.moveTo(x, y);
18736
- ctx.beginPath();
18737
- ctx.lineTo(x + marker.size, y);
18738
- ctx.lineTo(x, y - marker.size);
18739
- ctx.lineTo(x, y);
18740
- ctx.closePath();
18741
- ctx.fill();
18742
- ctx.restore();
18743
- }
18667
+ ((diffRanges === null || diffRanges === void 0 ? void 0 : diffRanges.length) ? diffRanges : [rowColumnSegment]).forEach((range) => {
18668
+ _univerjs_core.Range.foreach(range, (row, col) => {
18669
+ var _cellData$markers, _cellData$markers2, _cellData$markers3, _cellData$markers4;
18670
+ if (!worksheet.getRowVisible(row) || !worksheet.getColVisible(col)) return;
18671
+ let cellData = worksheet.getCell(row, col);
18672
+ const cellInfo = skeleton.getCellWithCoordByIndex(row, col, false);
18673
+ const { isMerged, isMergedMainCell, mergeInfo } = cellInfo;
18674
+ let { startY, endY, startX, endX } = cellInfo;
18675
+ if (isMergedMainCell || isMerged) {
18676
+ startY = mergeInfo.startY;
18677
+ endY = mergeInfo.endY;
18678
+ startX = mergeInfo.startX;
18679
+ endX = mergeInfo.endX;
18680
+ }
18681
+ if (isMerged) {
18682
+ const mainCell = {
18683
+ row: mergeInfo.startRow,
18684
+ col: mergeInfo.startColumn
18685
+ };
18686
+ cellData = worksheet.getCell(mainCell.row, mainCell.col);
18687
+ }
18688
+ if (!this.isRenderDiffRangesByRow(mergeInfo.startRow, mergeInfo.endRow, diffRanges)) return true;
18689
+ if (cellInfo.isMerged || cellInfo.isMergedMainCell) {
18690
+ const rangeStr = stringifyRange(mergeInfo);
18691
+ if (mergeCellRendered.has(rangeStr)) return;
18692
+ mergeCellRendered.add(rangeStr);
18693
+ }
18694
+ if (!cellData) return;
18695
+ if ((_cellData$markers = cellData.markers) === null || _cellData$markers === void 0 ? void 0 : _cellData$markers.tr) {
18696
+ ctx.save();
18697
+ const marker = cellData.markers.tr;
18698
+ const x = endX;
18699
+ const y = startY;
18700
+ ctx.fillStyle = marker.color;
18701
+ ctx.moveTo(x, y);
18702
+ ctx.beginPath();
18703
+ ctx.lineTo(x - marker.size, y);
18704
+ ctx.lineTo(x, y + marker.size);
18705
+ ctx.lineTo(x, y);
18706
+ ctx.closePath();
18707
+ ctx.fill();
18708
+ ctx.restore();
18709
+ }
18710
+ if ((_cellData$markers2 = cellData.markers) === null || _cellData$markers2 === void 0 ? void 0 : _cellData$markers2.tl) {
18711
+ ctx.save();
18712
+ const marker = cellData.markers.tl;
18713
+ const x = startX;
18714
+ const y = startY;
18715
+ ctx.fillStyle = marker.color;
18716
+ ctx.moveTo(x, y);
18717
+ ctx.beginPath();
18718
+ ctx.lineTo(x + marker.size, y);
18719
+ ctx.lineTo(x, y + marker.size);
18720
+ ctx.lineTo(x, y);
18721
+ ctx.closePath();
18722
+ ctx.fill();
18723
+ ctx.restore();
18724
+ }
18725
+ if ((_cellData$markers3 = cellData.markers) === null || _cellData$markers3 === void 0 ? void 0 : _cellData$markers3.br) {
18726
+ ctx.save();
18727
+ const marker = cellData.markers.br;
18728
+ const x = endX;
18729
+ const y = endY;
18730
+ ctx.fillStyle = marker.color;
18731
+ ctx.moveTo(x, y);
18732
+ ctx.beginPath();
18733
+ ctx.lineTo(x - marker.size, y);
18734
+ ctx.lineTo(x, y - marker.size);
18735
+ ctx.lineTo(x, y);
18736
+ ctx.closePath();
18737
+ ctx.fill();
18738
+ ctx.restore();
18739
+ }
18740
+ if ((_cellData$markers4 = cellData.markers) === null || _cellData$markers4 === void 0 ? void 0 : _cellData$markers4.bl) {
18741
+ ctx.save();
18742
+ const marker = cellData.markers.bl;
18743
+ const x = startX;
18744
+ const y = endY;
18745
+ ctx.fillStyle = marker.color;
18746
+ ctx.moveTo(x, y);
18747
+ ctx.beginPath();
18748
+ ctx.lineTo(x + marker.size, y);
18749
+ ctx.lineTo(x, y - marker.size);
18750
+ ctx.lineTo(x, y);
18751
+ ctx.closePath();
18752
+ ctx.fill();
18753
+ ctx.restore();
18754
+ }
18755
+ });
18744
18756
  });
18745
18757
  }
18746
18758
  };
@@ -18964,8 +18976,9 @@ var SpreadsheetRowHeader = class extends SpreadsheetHeader {
18964
18976
  const segment = spreadsheetSkeleton.rowColumnSegment;
18965
18977
  if (!segment) return;
18966
18978
  if (segment.startRow === -1 && segment.endRow === -1) return;
18967
- const { columnHeaderHeight } = spreadsheetSkeleton;
18968
- ctx.translateWithPrecision(0, columnHeaderHeight);
18979
+ const { columnHeaderHeightAndMarginTop, rowHeaderWidth, rowHeaderWidthAndMarginLeft } = spreadsheetSkeleton;
18980
+ const marginLeft = rowHeaderWidthAndMarginLeft - rowHeaderWidth;
18981
+ ctx.translateWithPrecision(marginLeft, columnHeaderHeightAndMarginTop);
18969
18982
  const extensions = this.getExtensionsByOrder();
18970
18983
  for (const extension of extensions) extension.draw(ctx, parentScale, spreadsheetSkeleton);
18971
18984
  }
@@ -18973,8 +18986,9 @@ var SpreadsheetRowHeader = class extends SpreadsheetHeader {
18973
18986
  const oCoord = this.getInverseCoord(coord);
18974
18987
  const skeleton = this.getSkeleton();
18975
18988
  if (!skeleton) return false;
18976
- const { rowHeaderWidth, columnHeaderHeight } = skeleton;
18977
- if (oCoord.x >= 0 && oCoord.x <= rowHeaderWidth && oCoord.y > columnHeaderHeight) return true;
18989
+ const { rowHeaderWidth, rowHeaderWidthAndMarginLeft, columnHeaderHeightAndMarginTop } = skeleton;
18990
+ const marginLeft = rowHeaderWidthAndMarginLeft - rowHeaderWidth;
18991
+ if (oCoord.x >= marginLeft && oCoord.x <= rowHeaderWidthAndMarginLeft && oCoord.y > columnHeaderHeightAndMarginTop) return true;
18978
18992
  return false;
18979
18993
  }
18980
18994
  _initialDefaultExtension() {
@@ -22089,20 +22103,28 @@ var Spreadsheet = class extends SheetComponent {
22089
22103
  this._drawAuxiliary(ctx);
22090
22104
  const parentScale = this.getParentScale();
22091
22105
  const diffRanges = this._refreshIncrementalState && viewportInfo.diffBounds ? (_viewportInfo$diffBou = viewportInfo.diffBounds) === null || _viewportInfo$diffBou === void 0 ? void 0 : _viewportInfo$diffBou.map((bound) => spreadsheetSkeleton.getRangeByViewBound(bound)) : [];
22092
- const viewRanges = [spreadsheetSkeleton.getCacheRangeByViewport(viewportInfo, this.isPrinting)];
22106
+ const cacheRange = spreadsheetSkeleton.getCacheRangeByViewport(viewportInfo, this.isPrinting);
22107
+ const viewRanges = this._refreshIncrementalState && diffRanges.length > 0 ? diffRanges : [cacheRange];
22108
+ const overflowSafeViewRanges = this._refreshIncrementalState && diffRanges.length > 0 ? diffRanges.map((range) => ({
22109
+ ...range,
22110
+ startColumn: cacheRange.startColumn,
22111
+ endColumn: cacheRange.endColumn
22112
+ })) : viewRanges;
22093
22113
  const extensions = this.getExtensionsByOrder();
22094
22114
  const scene = this.getScene();
22095
22115
  for (const extension of extensions) {
22116
+ const extensionViewRanges = extension === this._fontExtension || extension === this._borderExtension ? overflowSafeViewRanges : viewRanges;
22096
22117
  const timeKey = `${SHEET_EXTENSION_PREFIX}${extension.uKey}`;
22097
22118
  const st = _univerjs_core.Tools.now();
22098
22119
  extension.draw(ctx, parentScale, spreadsheetSkeleton, diffRanges, {
22099
- viewRanges,
22120
+ viewRanges: extensionViewRanges,
22100
22121
  checkOutOfViewBound: true,
22101
22122
  viewportKey: viewportInfo.viewportKey,
22102
22123
  viewBound: viewportInfo.cacheBound,
22103
22124
  diffBounds: viewportInfo.diffBounds
22104
22125
  });
22105
- this.addRenderFrameTimeMetricToScene(timeKey, _univerjs_core.Tools.now() - st, scene);
22126
+ const cost = _univerjs_core.Tools.now() - st;
22127
+ this.addRenderFrameTimeMetricToScene(timeKey, cost, scene);
22106
22128
  }
22107
22129
  }
22108
22130
  addRenderFrameTimeMetricToScene(timeKey, val, scene) {
@@ -22126,8 +22148,8 @@ var Spreadsheet = class extends SheetComponent {
22126
22148
  const oCoord = this.getInverseCoord(coord);
22127
22149
  const skeleton = this.getSkeleton();
22128
22150
  if (!skeleton) return false;
22129
- const { rowHeaderWidth, columnHeaderHeight } = skeleton;
22130
- if (oCoord.x > rowHeaderWidth && oCoord.y > columnHeaderHeight) return true;
22151
+ const { rowHeaderWidthAndMarginLeft, columnHeaderHeightAndMarginTop } = skeleton;
22152
+ if (oCoord.x > rowHeaderWidthAndMarginLeft && oCoord.y > columnHeaderHeightAndMarginTop) return true;
22131
22153
  return false;
22132
22154
  }
22133
22155
  getNoMergeCellPositionByIndex(rowIndex, columnIndex) {
@@ -22195,7 +22217,7 @@ var Spreadsheet = class extends SheetComponent {
22195
22217
  }
22196
22218
  renderByViewports(mainCtx, viewportInfo, spreadsheetSkeleton) {
22197
22219
  const { diffBounds, diffX, diffY, viewPortPosition, cacheCanvas, leftOrigin, topOrigin, bufferEdgeX, bufferEdgeY, isDirty: isViewportDirty, isForceDirty: isViewportForceDirty } = viewportInfo;
22198
- const { rowHeaderWidth, columnHeaderHeight } = spreadsheetSkeleton;
22220
+ const { rowHeaderWidthAndMarginLeft, columnHeaderHeightAndMarginTop } = spreadsheetSkeleton;
22199
22221
  const { a: scaleX = 1, d: scaleY = 1 } = mainCtx.getTransform();
22200
22222
  const bufferEdgeSizeX = bufferEdgeX * scaleX / window.devicePixelRatio;
22201
22223
  const bufferEdgeSizeY = bufferEdgeY * scaleY / window.devicePixelRatio;
@@ -22228,20 +22250,20 @@ var Spreadsheet = class extends SheetComponent {
22228
22250
  bufferEdgeY,
22229
22251
  scaleX,
22230
22252
  scaleY,
22231
- columnHeaderHeight,
22232
- rowHeaderWidth
22253
+ columnHeaderHeightAndMarginTop,
22254
+ rowHeaderWidthAndMarginLeft
22233
22255
  });
22234
22256
  }
22235
22257
  const sourceLeft = bufferEdgeSizeX * Math.min(1, window.devicePixelRatio);
22236
22258
  const sourceTop = bufferEdgeSizeY * Math.min(1, window.devicePixelRatio);
22237
22259
  const { left, top, right, bottom } = viewPortPosition;
22238
- const dw = right - left + rowHeaderWidth;
22239
- const dh = bottom - top + columnHeaderHeight;
22260
+ const dw = right - left + rowHeaderWidthAndMarginLeft;
22261
+ const dh = bottom - top + columnHeaderHeightAndMarginTop;
22240
22262
  this._applyCache(cacheCanvas, mainCtx, sourceLeft, sourceTop, dw, dh, left, top, dw, dh);
22241
22263
  cacheCtx.restore();
22242
22264
  }
22243
22265
  paintNewAreaForScrolling(viewportInfo, param) {
22244
- const { cacheCanvas, cacheCtx, mainCtx, topOrigin, leftOrigin, bufferEdgeX, bufferEdgeY, scaleX, scaleY, columnHeaderHeight, rowHeaderWidth } = param;
22266
+ const { cacheCanvas, cacheCtx, mainCtx, topOrigin, leftOrigin, bufferEdgeX, bufferEdgeY, scaleX, scaleY, columnHeaderHeightAndMarginTop, rowHeaderWidthAndMarginLeft } = param;
22245
22267
  const { shouldCacheUpdate, diffCacheBounds, diffX, diffY } = viewportInfo;
22246
22268
  cacheCtx.save();
22247
22269
  cacheCtx.setTransform(1, 0, 0, 1, 0, 0);
@@ -22254,8 +22276,8 @@ var Spreadsheet = class extends SheetComponent {
22254
22276
  cacheCtx.translateWithPrecision(m.e / m.a - leftOrigin + bufferEdgeX, m.f / m.d - topOrigin + bufferEdgeY);
22255
22277
  if (shouldCacheUpdate) for (const diffBound of diffCacheBounds) {
22256
22278
  const { left: diffLeft, right: diffRight, bottom: diffBottom, top: diffTop } = diffBound;
22257
- const x = diffLeft - rowHeaderWidth;
22258
- const y = diffTop - columnHeaderHeight;
22279
+ const x = diffLeft - rowHeaderWidthAndMarginLeft;
22280
+ const y = diffTop - columnHeaderHeightAndMarginTop;
22259
22281
  const w = diffRight - diffLeft;
22260
22282
  const h = diffBottom - diffTop;
22261
22283
  cacheCtx.clearRectByPrecision(x, y, w, h);
@@ -22301,9 +22323,9 @@ var Spreadsheet = class extends SheetComponent {
22301
22323
  if (!segment) return;
22302
22324
  if (segment.startRow === -1 && segment.endRow === -1 || segment.startColumn === -1 && segment.endColumn === -1) return;
22303
22325
  mainCtx.save();
22304
- const { rowHeaderWidth, columnHeaderHeight } = spreadsheetSkeleton;
22305
- mainCtx.translateWithPrecision(rowHeaderWidth, columnHeaderHeight);
22306
- (_this$getScene = this.getScene()) === null || _this$getScene === void 0 || _this$getScene.updateTransformerZero(spreadsheetSkeleton.rowHeaderWidth, spreadsheetSkeleton.columnHeaderHeight);
22326
+ const { rowHeaderWidthAndMarginLeft, columnHeaderHeightAndMarginTop } = spreadsheetSkeleton;
22327
+ mainCtx.translateWithPrecision(rowHeaderWidthAndMarginLeft, columnHeaderHeightAndMarginTop);
22328
+ (_this$getScene = this.getScene()) === null || _this$getScene === void 0 || _this$getScene.updateTransformerZero(rowHeaderWidthAndMarginLeft, columnHeaderHeightAndMarginTop);
22307
22329
  const { viewportKey } = viewportInfo;
22308
22330
  if (sheetContentViewportKeys.includes(viewportKey)) if (viewportInfo && viewportInfo.cacheCanvas) this.renderByViewports(mainCtx, viewportInfo, spreadsheetSkeleton);
22309
22331
  else this._draw(mainCtx, viewportInfo);
@@ -24440,14 +24462,13 @@ let Engine = class Engine extends _univerjs_core.Disposable {
24440
24462
  }
24441
24463
  _getPassive() {
24442
24464
  let passiveSupported = false;
24443
- const noop = () => {};
24444
24465
  try {
24445
24466
  const options = { passive: { get() {
24446
24467
  passiveSupported = true;
24447
24468
  } } };
24448
24469
  const canvasEle = this.getCanvasElement();
24449
- canvasEle.addEventListener("test", noop, options);
24450
- canvasEle.removeEventListener("test", noop, options);
24470
+ canvasEle.addEventListener("test", _univerjs_core.noop, options);
24471
+ canvasEle.removeEventListener("test", _univerjs_core.noop, options);
24451
24472
  } catch (e) {}
24452
24473
  return passiveSupported;
24453
24474
  }
@@ -24474,7 +24495,7 @@ Engine = __decorate([__decorateParam(2, ICanvasColorService)], Engine);
24474
24495
  //#endregion
24475
24496
  //#region package.json
24476
24497
  var name = "@univerjs/engine-render";
24477
- var version = "0.22.1";
24498
+ var version = "0.23.0-insiders.20260522-ee0b0a4";
24478
24499
 
24479
24500
  //#endregion
24480
24501
  //#region src/config/config.ts