@univerjs/sheets-ui 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
@@ -518,11 +518,13 @@ var BaseSelectionRenderService = class extends _univerjs_core.Disposable {
518
518
  }
519
519
  newSelectionControl(scene, skeleton, selection) {
520
520
  const zIndex = this.getSelectionControls().length;
521
- const { rowHeaderWidth, columnHeaderHeight } = skeleton;
521
+ const { rowHeaderWidth, rowHeaderWidthAndMarginLeft, columnHeaderHeight, columnHeaderHeightAndMarginTop } = skeleton;
522
522
  const control = new SelectionControl(scene, zIndex, this._selectionTheme, {
523
523
  highlightHeader: this._highlightHeader,
524
524
  rowHeaderWidth,
525
- columnHeaderHeight
525
+ columnHeaderHeight,
526
+ rowHeaderOffsetX: Math.max(0, rowHeaderWidthAndMarginLeft - rowHeaderWidth),
527
+ columnHeaderOffsetY: Math.max(0, columnHeaderHeightAndMarginTop - columnHeaderHeight)
526
528
  });
527
529
  this._selectionControls.push(control);
528
530
  const selectionWithCoord = (0, _univerjs_sheets.attachSelectionWithCoord)(selection, skeleton);
@@ -1808,7 +1810,7 @@ const SELECTION_TITLE_HIGHLIGHT_ALPHA = .3;
1808
1810
  */
1809
1811
  var SelectionControl = class extends _univerjs_core.Disposable {
1810
1812
  constructor(_scene, _zIndex, _themeService, options) {
1811
- var _options$enableAutoFi, _options$highlightHea, _options$rowHeaderWid, _options$columnHeader;
1813
+ var _options$enableAutoFi, _options$highlightHea, _options$rowHeaderWid, _options$columnHeader, _options$rowHeaderOff, _options$columnHeader2;
1812
1814
  super();
1813
1815
  this._scene = _scene;
1814
1816
  this._zIndex = _zIndex;
@@ -1847,6 +1849,8 @@ var SelectionControl = class extends _univerjs_core.Disposable {
1847
1849
  _defineProperty(this, "_currentStyle", void 0);
1848
1850
  _defineProperty(this, "_rowHeaderWidth", 0);
1849
1851
  _defineProperty(this, "_columnHeaderHeight", 0);
1852
+ _defineProperty(this, "_rowHeaderOffsetX", 0);
1853
+ _defineProperty(this, "_columnHeaderOffsetY", 0);
1850
1854
  _defineProperty(this, "_widgetRects", []);
1851
1855
  _defineProperty(this, "_controlExtension", void 0);
1852
1856
  _defineProperty(this, "_dispose$", new rxjs.BehaviorSubject(this));
@@ -1864,6 +1868,8 @@ var SelectionControl = class extends _univerjs_core.Disposable {
1864
1868
  this._highlightHeader = (_options$highlightHea = options === null || options === void 0 ? void 0 : options.highlightHeader) !== null && _options$highlightHea !== void 0 ? _options$highlightHea : true;
1865
1869
  this._rowHeaderWidth = (_options$rowHeaderWid = options === null || options === void 0 ? void 0 : options.rowHeaderWidth) !== null && _options$rowHeaderWid !== void 0 ? _options$rowHeaderWid : 0;
1866
1870
  this._columnHeaderHeight = (_options$columnHeader = options === null || options === void 0 ? void 0 : options.columnHeaderHeight) !== null && _options$columnHeader !== void 0 ? _options$columnHeader : 0;
1871
+ this._rowHeaderOffsetX = (_options$rowHeaderOff = options === null || options === void 0 ? void 0 : options.rowHeaderOffsetX) !== null && _options$rowHeaderOff !== void 0 ? _options$rowHeaderOff : 0;
1872
+ this._columnHeaderOffsetY = (_options$columnHeader2 = options === null || options === void 0 ? void 0 : options.columnHeaderOffsetY) !== null && _options$columnHeader2 !== void 0 ? _options$columnHeader2 : 0;
1867
1873
  this._initializeSheetBody();
1868
1874
  this._initialHeader();
1869
1875
  }
@@ -2228,6 +2234,8 @@ var SelectionControl = class extends _univerjs_core.Disposable {
2228
2234
  if (sk) {
2229
2235
  this._rowHeaderWidth = sk.rowHeaderWidth;
2230
2236
  this._columnHeaderHeight = sk.columnHeaderHeight;
2237
+ this._rowHeaderOffsetX = Math.max(0, sk.rowHeaderWidthAndMarginLeft - sk.rowHeaderWidth);
2238
+ this._columnHeaderOffsetY = Math.max(0, sk.columnHeaderHeightAndMarginTop - sk.columnHeaderHeight);
2231
2239
  }
2232
2240
  this._selectionRenderModel.setValue(selectionWthCoord.rangeWithCoord, selectionWthCoord.primaryWithCoord);
2233
2241
  this._showAutoFill = selectionWthCoord.primaryWithCoord !== null;
@@ -2248,6 +2256,8 @@ var SelectionControl = class extends _univerjs_core.Disposable {
2248
2256
  update(newSelectionRange, rowHeaderWidth = 0, columnHeaderHeight = 0, style, primaryCell) {
2249
2257
  this._rowHeaderWidth = rowHeaderWidth;
2250
2258
  this._columnHeaderHeight = columnHeaderHeight;
2259
+ this._rowHeaderOffsetX = 0;
2260
+ this._columnHeaderOffsetY = 0;
2251
2261
  this.updateRangeBySelectionWithCoord({
2252
2262
  rangeWithCoord: newSelectionRange,
2253
2263
  primaryWithCoord: primaryCell,
@@ -2367,6 +2377,8 @@ var SelectionControl = class extends _univerjs_core.Disposable {
2367
2377
  columnHeaderStrokeWidth /= scale;
2368
2378
  const rowHeaderWidth = this._rowHeaderWidth;
2369
2379
  const columnHeaderHeight = this._columnHeaderHeight;
2380
+ const rowHeaderOffsetX = this._rowHeaderOffsetX;
2381
+ const columnHeaderOffsetY = this._columnHeaderOffsetY;
2370
2382
  if (this._highlightHeader && columnHeaderHeight > 0) {
2371
2383
  let highlightTitleColor = columnHeaderFill;
2372
2384
  if (rangeType === _univerjs_core.RANGE_TYPE.COLUMN) highlightTitleColor = new _univerjs_core.ColorKit(stroke).setAlpha(SELECTION_TITLE_HIGHLIGHT_ALPHA).toString();
@@ -2379,7 +2391,7 @@ var SelectionControl = class extends _univerjs_core.Disposable {
2379
2391
  top: columnHeaderHeight - columnHeaderStrokeWidth + 1 / scale
2380
2392
  });
2381
2393
  this._columnHeaderGroup.show();
2382
- this._columnHeaderGroup.translate(startX, 0);
2394
+ this._columnHeaderGroup.translate(startX, columnHeaderOffsetY);
2383
2395
  } else this._columnHeaderGroup.hide();
2384
2396
  this._columnHeaderGroup.makeDirty(true);
2385
2397
  if (this._highlightHeader && rowHeaderWidth > 0) {
@@ -2394,7 +2406,7 @@ var SelectionControl = class extends _univerjs_core.Disposable {
2394
2406
  left: rowHeaderWidth - rowHeaderStrokeWidth + 1 / scale
2395
2407
  });
2396
2408
  this._rowHeaderGroup.show();
2397
- this._rowHeaderGroup.translate(0, startY);
2409
+ this._rowHeaderGroup.translate(rowHeaderOffsetX, startY);
2398
2410
  } else this._rowHeaderGroup.hide();
2399
2411
  this._rowHeaderGroup.makeDirty(true);
2400
2412
  }
@@ -2734,10 +2746,6 @@ function cloneCellDataWithSpanInfo(cell) {
2734
2746
  //#endregion
2735
2747
  //#region src/services/clipboard/copy-content-cache.ts
2736
2748
  const COPY_CONTENT_CACHE_LIMIT = 10;
2737
- const ID_LENGTH = 6;
2738
- function genId() {
2739
- return (0, _univerjs_core.generateRandomId)(ID_LENGTH);
2740
- }
2741
2749
  function extractId(html) {
2742
2750
  const match = html.match(/data-copy-id="([^\s]+)"/);
2743
2751
  if (match && match[1]) return match[1];
@@ -4225,7 +4233,7 @@ let SheetClipboardService = class SheetClipboardService extends _univerjs_core.D
4225
4233
  rowIndex += 1;
4226
4234
  }
4227
4235
  for (let c = startColumn; c <= endColumn; c++) discreteRange.cols.push(c);
4228
- const copyId = genId();
4236
+ const copyId = (0, _univerjs_core.generateRandomId)(6);
4229
4237
  const html = this._usmToHtml.convert(matrix, discreteRange, hooks, copyId);
4230
4238
  return {
4231
4239
  copyId,
@@ -14517,7 +14525,7 @@ let HeaderResizeRenderController = class HeaderResizeRenderController extends _u
14517
14525
  var _this$_sheetSkeletonM;
14518
14526
  const skeleton = (_this$_sheetSkeletonM = this._sheetSkeletonManagerService.getCurrentParam()) === null || _this$_sheetSkeletonM === void 0 ? void 0 : _this$_sheetSkeletonM.skeleton;
14519
14527
  if (skeleton == null || this._rowResizeRect == null || this._columnResizeRect == null) return;
14520
- const { rowHeaderWidth, columnHeaderHeight } = skeleton;
14528
+ const { rowBaseWidth, rowGutterWidth, columnBaseHeight, columnGutterHeight } = getHeaderBaseLayout$1(skeleton);
14521
14529
  const { startX, startY, endX, endY, row, column } = getCoordByOffset(evt.offsetX, evt.offsetY, scene, skeleton);
14522
14530
  const isLastRow = row === skeleton.worksheet.getRowCount() - 1;
14523
14531
  const isLastColumn = column === skeleton.worksheet.getColumnCount() - 1;
@@ -14537,9 +14545,9 @@ let HeaderResizeRenderController = class HeaderResizeRenderController extends _u
14537
14545
  }
14538
14546
  if (this._currentRow === -1) return;
14539
14547
  if (!this.interceptor.fetchThroughInterceptors(HEADER_RESIZE_PERMISSION_CHECK)(null, { row: this._currentRow })) return false;
14540
- const rowSize = Math.min(44, rowHeaderWidth / 3);
14548
+ const rowSize = Math.min(44, rowBaseWidth / 3);
14541
14549
  this._rowResizeRect.transformByState({
14542
- left: rowHeaderWidth / 2 - rowSize / 2,
14550
+ left: rowGutterWidth + rowBaseWidth / 2 - rowSize / 2,
14543
14551
  top
14544
14552
  });
14545
14553
  this._rowResizeRect.setShapeProps({ size: rowSize });
@@ -14557,10 +14565,10 @@ let HeaderResizeRenderController = class HeaderResizeRenderController extends _u
14557
14565
  }
14558
14566
  if (this._currentColumn === -1) return;
14559
14567
  if (!this.interceptor.fetchThroughInterceptors(HEADER_RESIZE_PERMISSION_CHECK)(null, { col: this._currentColumn })) return false;
14560
- const columnSize = columnHeaderHeight * .7;
14568
+ const columnSize = columnBaseHeight * .7;
14561
14569
  this._columnResizeRect.transformByState({
14562
14570
  left,
14563
- top: columnHeaderHeight / 2 - columnSize / 2
14571
+ top: columnGutterHeight + columnBaseHeight / 2 - columnSize / 2
14564
14572
  });
14565
14573
  this._columnResizeRect.setShapeProps({ size: columnSize });
14566
14574
  this._columnResizeRect.show();
@@ -14605,9 +14613,9 @@ let HeaderResizeRenderController = class HeaderResizeRenderController extends _u
14605
14613
  let isStartMove = false;
14606
14614
  let moveChangeX = 0;
14607
14615
  let moveChangeY = 0;
14608
- const { columnTotalWidth, rowHeaderWidth, rowTotalHeight, columnHeaderHeight } = skeleton;
14609
- const shapeWidth = canvasMaxWidth > columnTotalWidth + rowHeaderWidth ? canvasMaxWidth : columnTotalWidth + rowHeaderWidth;
14610
- const shapeHeight = canvasMaxHeight > rowTotalHeight + columnHeaderHeight ? canvasMaxHeight : rowTotalHeight + columnHeaderHeight;
14616
+ const { columnTotalWidth, rowHeaderWidthAndMarginLeft, rowTotalHeight, columnHeaderHeightAndMarginTop } = skeleton;
14617
+ const shapeWidth = canvasMaxWidth > columnTotalWidth + rowHeaderWidthAndMarginLeft ? canvasMaxWidth : columnTotalWidth + rowHeaderWidthAndMarginLeft;
14618
+ const shapeHeight = canvasMaxHeight > rowTotalHeight + columnHeaderHeightAndMarginTop ? canvasMaxHeight : rowTotalHeight + columnHeaderHeightAndMarginTop;
14611
14619
  const HEADER_MENU_SHAPE_THUMB_SIZE_SCALE = 4 / Math.max(scaleX, scaleY);
14612
14620
  if (initialType === 0) this._resizeHelperShape = new _univerjs_engine_render.Rect(HEADER_RESIZE_CONTROLLER_SHAPE_HELPER, {
14613
14621
  width: shapeWidth,
@@ -14740,126 +14748,498 @@ HeaderResizeRenderController = __decorate([
14740
14748
  __decorateParam(2, (0, _univerjs_core.Inject)(_univerjs_sheets.SheetsSelectionsService)),
14741
14749
  __decorateParam(3, _univerjs_core.ICommandService)
14742
14750
  ], HeaderResizeRenderController);
14751
+ function getHeaderBaseLayout$1(skeleton) {
14752
+ var _skeleton$worksheet$g, _skeleton$worksheet, _config$rowHeader, _config$columnHeader;
14753
+ const config = (_skeleton$worksheet$g = (_skeleton$worksheet = skeleton.worksheet).getConfig) === null || _skeleton$worksheet$g === void 0 ? void 0 : _skeleton$worksheet$g.call(_skeleton$worksheet);
14754
+ const configuredRowWidth = config === null || config === void 0 || (_config$rowHeader = config.rowHeader) === null || _config$rowHeader === void 0 ? void 0 : _config$rowHeader.width;
14755
+ const configuredColumnHeight = config === null || config === void 0 || (_config$columnHeader = config.columnHeader) === null || _config$columnHeader === void 0 ? void 0 : _config$columnHeader.height;
14756
+ const rowBaseWidth = typeof configuredRowWidth === "number" && configuredRowWidth > 0 ? Math.min(configuredRowWidth, skeleton.rowHeaderWidth) : skeleton.rowHeaderWidth;
14757
+ const columnBaseHeight = typeof configuredColumnHeight === "number" && configuredColumnHeight > 0 ? Math.min(configuredColumnHeight, skeleton.columnHeaderHeight) : skeleton.columnHeaderHeight;
14758
+ return {
14759
+ rowBaseWidth,
14760
+ rowGutterWidth: Math.max(0, skeleton.rowHeaderWidthAndMarginLeft - rowBaseWidth),
14761
+ columnBaseHeight,
14762
+ columnGutterHeight: Math.max(0, skeleton.columnHeaderHeightAndMarginTop - columnBaseHeight)
14763
+ };
14764
+ }
14743
14765
 
14744
14766
  //#endregion
14745
- //#region src/controllers/render-controllers/sheet.render-controller.ts
14746
- const FRAME_STACK_THRESHOLD = 60;
14747
- let SheetRenderController = class SheetRenderController extends _univerjs_core.RxDisposable {
14748
- constructor(_context, _configService, _sheetSkeletonManagerService, _sheetRenderService, _commandService, _telemetryService) {
14749
- super();
14750
- this._context = _context;
14751
- this._configService = _configService;
14752
- this._sheetSkeletonManagerService = _sheetSkeletonManagerService;
14753
- this._sheetRenderService = _sheetRenderService;
14754
- this._commandService = _commandService;
14755
- this._telemetryService = _telemetryService;
14756
- _defineProperty(this, "_renderMetric$", new rxjs.Subject());
14757
- _defineProperty(this, "renderMetric$", this._renderMetric$.asObservable());
14758
- _defineProperty(this, "_renderFrameTimeMetric", null);
14759
- _defineProperty(this, "_renderFrameTags", {});
14760
- _defineProperty(this, "_afterRenderMetric$", new rxjs.Subject());
14761
- this._addNewRender();
14762
- this._initRenderMetricSubscriber();
14767
+ //#region src/services/header-unhide-range.service.ts
14768
+ let HeaderUnhideRangeAxis = /* @__PURE__ */ function(HeaderUnhideRangeAxis) {
14769
+ HeaderUnhideRangeAxis["ROW"] = "row";
14770
+ HeaderUnhideRangeAxis["COLUMN"] = "column";
14771
+ return HeaderUnhideRangeAxis;
14772
+ }({});
14773
+ var HeaderUnhideRangeService = class {
14774
+ constructor() {
14775
+ _defineProperty(this, "_visibleHandlers", /* @__PURE__ */ new Set());
14763
14776
  }
14764
- _addNewRender() {
14765
- const { scene, engine, unit: workbook } = this._context;
14766
- this._addComponent(workbook);
14767
- this._initRerenderScheduler();
14768
- this._initCommandListener();
14769
- const worksheet = this._context.unit.getActiveSheet();
14770
- if (!worksheet) throw new Error("No active sheet found");
14771
- const sheetId = worksheet.getSheetId();
14772
- this._sheetSkeletonManagerService.setCurrent({ sheetId });
14773
- const frameFn = () => scene.render();
14774
- this.disposeWithMe(this._context.activated$.subscribe((activated) => {
14775
- if (activated) engine.runRenderLoop(frameFn);
14776
- else engine.stopRenderLoop(frameFn);
14777
- }));
14777
+ registerRangeVisibleHandler(handler) {
14778
+ this._visibleHandlers.add(handler);
14779
+ const dispose = () => this._visibleHandlers.delete(handler);
14780
+ return {
14781
+ dispose,
14782
+ unsubscribe: dispose
14783
+ };
14778
14784
  }
14779
- _initRenderMetricSubscriber() {
14780
- const { engine } = this._context;
14781
- engine.beginFrame$.subscribe(() => {
14782
- this._renderFrameTimeMetric = null;
14783
- this._renderFrameTags = {};
14785
+ shouldRenderRange(visible, payload) {
14786
+ let nextVisible = visible;
14787
+ for (const handler of this._visibleHandlers) nextVisible = handler(nextVisible, payload);
14788
+ return nextVisible;
14789
+ }
14790
+ };
14791
+
14792
+ //#endregion
14793
+ //#region src/menu/header-menu-shape.ts
14794
+ const HEADER_MENU_SHAPE_CIRCLE_FILL = "rgba(0, 0, 0, 0.15)";
14795
+ const HEADER_MENU_SHAPE_TRIANGLE_FILL = "rgb(0, 0, 0)";
14796
+ const HEADER_MENU_BACKGROUND_COLOR = "rgb(255, 255, 255, 1)";
14797
+ var HeaderMenuShape = class extends _univerjs_engine_render.Shape {
14798
+ constructor(key, props) {
14799
+ super(key, props);
14800
+ _defineProperty(this, "_size", 12);
14801
+ _defineProperty(this, "_iconRatio", .4);
14802
+ _defineProperty(this, "_mode", 0);
14803
+ this.setShapeProps(props);
14804
+ }
14805
+ setShapeProps(props) {
14806
+ if (props === null || props === void 0 ? void 0 : props.size) this._size = props.size;
14807
+ if (props === null || props === void 0 ? void 0 : props.mode) this._mode = props.mode;
14808
+ this.transformByState({
14809
+ width: this._size,
14810
+ height: this._size
14784
14811
  });
14785
- engine.endFrame$.subscribe(() => {
14786
- if (this._renderFrameTimeMetric && Object.keys(this._renderFrameTimeMetric).filter((key) => key.startsWith(_univerjs_engine_render.SHEET_EXTENSION_PREFIX)).length > 0) this._afterRenderMetric$.next({
14787
- frameTimeMetric: this._renderFrameTimeMetric,
14788
- tags: this._renderFrameTags
14789
- });
14812
+ }
14813
+ _draw(ctx) {
14814
+ if (this._mode === 1) _univerjs_engine_render.Rect.drawWith(ctx, {
14815
+ width: this._size,
14816
+ height: this._size,
14817
+ radius: this._size,
14818
+ fill: HEADER_MENU_SHAPE_CIRCLE_FILL
14790
14819
  });
14791
- engine.renderFrameTimeMetric$.subscribe(([key, value]) => {
14792
- if (!this._renderFrameTimeMetric) this._renderFrameTimeMetric = {};
14793
- if (!this._renderFrameTimeMetric[key]) this._renderFrameTimeMetric[key] = [];
14794
- this._renderFrameTimeMetric[key].push(Math.round(value * 100) / 100);
14820
+ const iconSize = this._size * .5 * this._iconRatio;
14821
+ const sixtyDegree = Math.PI / 180 * 60;
14822
+ const left = iconSize * Math.sin(sixtyDegree);
14823
+ const top = iconSize * Math.cos(sixtyDegree);
14824
+ _univerjs_engine_render.RegularPolygon.drawWith(ctx, {
14825
+ pointsGroup: [[
14826
+ {
14827
+ x: -left + this._size / 2,
14828
+ y: -top + this._size / 2
14829
+ },
14830
+ {
14831
+ x: left + this._size / 2,
14832
+ y: -top + this._size / 2
14833
+ },
14834
+ {
14835
+ x: this._size / 2,
14836
+ y: iconSize + this._size / 2
14837
+ }
14838
+ ]],
14839
+ fill: HEADER_MENU_SHAPE_TRIANGLE_FILL
14795
14840
  });
14796
- engine.renderFrameTags$.subscribe(([key, value]) => {
14797
- this._renderFrameTags[key] = value;
14841
+ }
14842
+ };
14843
+
14844
+ //#endregion
14845
+ //#region src/views/header-unhide-shape.ts
14846
+ const UNHIDE_ICON_SIZE = 12;
14847
+ const UNHIDE_ARROW_RATIO = .4;
14848
+ var HeaderUnhideShape = class extends _univerjs_engine_render.Shape {
14849
+ constructor(key, props, onClick) {
14850
+ super(key, props);
14851
+ _defineProperty(this, "_size", 12);
14852
+ _defineProperty(this, "_iconRatio", UNHIDE_ARROW_RATIO);
14853
+ _defineProperty(this, "_hovered", true);
14854
+ _defineProperty(this, "_hasPrevious", true);
14855
+ _defineProperty(this, "_hasNext", true);
14856
+ _defineProperty(this, "_unhideType", void 0);
14857
+ if (props) this.setShapeProps(props);
14858
+ this.onPointerEnter$.subscribeEvent(() => this.setShapeProps({ hovered: true }));
14859
+ this.onPointerLeave$.subscribeEvent(() => this.setShapeProps({ hovered: false }));
14860
+ this.onPointerDown$.subscribeEvent(() => onClick === null || onClick === void 0 ? void 0 : onClick());
14861
+ }
14862
+ setShapeProps(props) {
14863
+ if (props.type !== void 0) this._unhideType = props.type;
14864
+ if (props.hovered !== void 0) this._hovered = props.hovered;
14865
+ if (props.hasPrevious !== void 0) this._hasPrevious = props.hasPrevious;
14866
+ if (props.hasNext !== void 0) this._hasNext = props.hasNext;
14867
+ this.transformByState({
14868
+ width: this._size * (this._unhideType === 1 ? 2 : 1),
14869
+ height: this._size * (this._unhideType === 0 ? 2 : 1)
14798
14870
  });
14799
- const frameInfoList = [];
14800
- this._afterRenderMetric$.pipe((0, rxjs.withLatestFrom)(engine.endFrame$)).subscribe(([sceneRenderDetail, basicFrameTimeInfo]) => {
14801
- frameInfoList.push({
14802
- FPS: basicFrameTimeInfo.FPS,
14803
- elapsedTime: basicFrameTimeInfo.elapsedTime,
14804
- frameTime: Math.round(basicFrameTimeInfo.frameTime * 100) / 100,
14805
- ...sceneRenderDetail.frameTimeMetric,
14806
- ...sceneRenderDetail.tags
14807
- });
14808
- if (frameInfoList.length > FRAME_STACK_THRESHOLD) {
14809
- this._captureRenderMetric(frameInfoList);
14810
- frameInfoList.length = 0;
14811
- }
14871
+ }
14872
+ _draw(ctx) {
14873
+ if (this._unhideType === 0) this._drawOnRow(ctx);
14874
+ else this._drawOnCol(ctx);
14875
+ }
14876
+ _drawOnRow(ctx) {
14877
+ if (this._hovered) if (!this._hasNext || !this._hasPrevious) _univerjs_engine_render.Rect.drawWith(ctx, {
14878
+ width: this._size,
14879
+ height: this._size,
14880
+ stroke: HEADER_MENU_SHAPE_TRIANGLE_FILL,
14881
+ fill: HEADER_MENU_BACKGROUND_COLOR
14882
+ });
14883
+ else _univerjs_engine_render.Rect.drawWith(ctx, {
14884
+ width: this._size,
14885
+ height: 2 * this._size,
14886
+ stroke: HEADER_MENU_SHAPE_TRIANGLE_FILL,
14887
+ fill: HEADER_MENU_BACKGROUND_COLOR
14888
+ });
14889
+ const iconSize = this._size * .5 * this._iconRatio;
14890
+ const sixtyDegree = Math.PI / 3;
14891
+ const top = iconSize * Math.cos(sixtyDegree);
14892
+ const left = iconSize * Math.sin(sixtyDegree);
14893
+ if (this._hasPrevious) _univerjs_engine_render.RegularPolygon.drawWith(ctx, {
14894
+ pointsGroup: [[
14895
+ {
14896
+ x: this._size / 2,
14897
+ y: this._size / 2 - left
14898
+ },
14899
+ {
14900
+ x: this._size / 2 - left,
14901
+ y: this._size / 2 + top
14902
+ },
14903
+ {
14904
+ x: this._size / 2 + left,
14905
+ y: this._size / 2 + top
14906
+ }
14907
+ ]],
14908
+ fill: HEADER_MENU_SHAPE_TRIANGLE_FILL
14812
14909
  });
14910
+ if (this._hasNext) {
14911
+ const offset = this._hasPrevious ? 3 : 1;
14912
+ _univerjs_engine_render.RegularPolygon.drawWith(ctx, {
14913
+ pointsGroup: [[
14914
+ {
14915
+ x: this._size / 2,
14916
+ y: this._size * offset / 2 + left
14917
+ },
14918
+ {
14919
+ x: this._size / 2 - left,
14920
+ y: this._size * offset / 2 - top
14921
+ },
14922
+ {
14923
+ x: this._size / 2 + left,
14924
+ y: this._size * offset / 2 - top
14925
+ }
14926
+ ]],
14927
+ fill: HEADER_MENU_SHAPE_TRIANGLE_FILL
14928
+ });
14929
+ }
14813
14930
  }
14814
14931
  /**
14815
- * Send render metric to telemetry service
14816
- * @param frameInfoList
14932
+ *
14933
+ * @param ctx
14817
14934
  */
14818
- _captureRenderMetric(frameInfoList) {
14819
- var _this$_telemetryServi;
14820
- const filteredFrameInfo = frameInfoList;
14821
- if (filteredFrameInfo.length === 0) return;
14822
- const sumValueForNumListFields = (data) => {
14823
- let totalSum = 0;
14824
- const sums = Object.entries(data).filter(([_, value]) => Array.isArray(value)).map(([key]) => key).reduce((acc, key) => {
14825
- acc[key] = data[key].reduce((sum, num) => sum + num, 0);
14826
- return acc;
14827
- }, {});
14828
- Object.keys(data).filter((key) => key.startsWith(_univerjs_engine_render.SHEET_EXTENSION_PREFIX)).forEach((key) => {
14829
- totalSum += sums[key];
14830
- });
14831
- return {
14832
- ...sums,
14833
- extensionTotal: totalSum
14834
- };
14835
- };
14836
- const frameTimeListAfterSum = frameInfoList.map((info) => {
14837
- return {
14838
- ...info,
14839
- ...sumValueForNumListFields(info)
14840
- };
14935
+ _drawOnCol(ctx) {
14936
+ if (this._hovered) if (!this._hasNext || !this._hasPrevious) _univerjs_engine_render.Rect.drawWith(ctx, {
14937
+ width: this._size,
14938
+ height: this._size,
14939
+ stroke: HEADER_MENU_SHAPE_TRIANGLE_FILL,
14940
+ fill: HEADER_MENU_BACKGROUND_COLOR
14841
14941
  });
14842
- const getSummaryStats = (list) => {
14843
- return Object.entries(list[0]).filter(([key, _]) => !["elapsedTime"].includes(key)).filter(([_, value]) => typeof value === "number").map(([key]) => key).reduce((acc, key) => {
14844
- const values = list.map((obj) => obj[key]);
14845
- const max = Math.max(...values);
14846
- const min = Math.min(...values);
14847
- const avg = values.reduce((sum, val) => sum + val, 0) / values.length;
14848
- acc[key] = {
14849
- max: Math.round(max * 100) / 100,
14850
- min: Math.round(min * 100) / 100,
14851
- avg: Math.round(avg * 100) / 100
14852
- };
14853
- return acc;
14854
- }, {});
14855
- };
14856
- const summaryFrameStats = getSummaryStats(frameTimeListAfterSum);
14857
- const elapsedTimeToStart = filteredFrameInfo[filteredFrameInfo.length - 1].elapsedTime;
14858
- const telemetryData = {
14859
- sheetId: this._context.unit.getActiveSheet().getSheetId(),
14860
- unitId: this._context.unit.getUnitId(),
14861
- elapsedTimeToStart,
14862
- ...summaryFrameStats
14942
+ else _univerjs_engine_render.Rect.drawWith(ctx, {
14943
+ width: 2 * this._size,
14944
+ height: this._size,
14945
+ stroke: HEADER_MENU_SHAPE_TRIANGLE_FILL,
14946
+ fill: HEADER_MENU_BACKGROUND_COLOR
14947
+ });
14948
+ const iconSize = this._size * .5 * this._iconRatio;
14949
+ const sixtyDegree = Math.PI / 3;
14950
+ const top = iconSize * Math.cos(sixtyDegree);
14951
+ const left = iconSize * Math.sin(sixtyDegree);
14952
+ if (this._hasPrevious) _univerjs_engine_render.RegularPolygon.drawWith(ctx, {
14953
+ pointsGroup: [[
14954
+ {
14955
+ x: -top + this._size / 2,
14956
+ y: this._size / 2
14957
+ },
14958
+ {
14959
+ x: this._size / 2 + left,
14960
+ y: this._size / 2 - left
14961
+ },
14962
+ {
14963
+ x: this._size / 2 + left,
14964
+ y: this._size / 2 + left
14965
+ }
14966
+ ]],
14967
+ fill: HEADER_MENU_SHAPE_TRIANGLE_FILL
14968
+ });
14969
+ if (this._hasNext) {
14970
+ const offset = this._hasPrevious ? 3 : 1;
14971
+ _univerjs_engine_render.RegularPolygon.drawWith(ctx, {
14972
+ pointsGroup: [[
14973
+ {
14974
+ x: top + this._size * offset / 2,
14975
+ y: this._size / 2
14976
+ },
14977
+ {
14978
+ x: -left + this._size * offset / 2,
14979
+ y: this._size / 2 - left
14980
+ },
14981
+ {
14982
+ x: -left + this._size * offset / 2,
14983
+ y: this._size / 2 + left
14984
+ }
14985
+ ]],
14986
+ fill: HEADER_MENU_SHAPE_TRIANGLE_FILL
14987
+ });
14988
+ }
14989
+ }
14990
+ };
14991
+
14992
+ //#endregion
14993
+ //#region src/controllers/render-controllers/header-unhide.render-controller.ts
14994
+ const HEADER_UNHIDE_CONTROLLER_SHAPE = "__SpreadsheetHeaderUnhideSHAPEControllerShape__";
14995
+ const HEADER_UNHIDE_RANGE_VISIBLE_CHECK = (0, _univerjs_core.createInterceptorKey)("headerUnhideRangeVisibleCheck");
14996
+ let HeaderUnhideRenderController = class HeaderUnhideRenderController extends _univerjs_core.RxDisposable {
14997
+ get _workbook() {
14998
+ return this._context.unit;
14999
+ }
15000
+ constructor(_context, _sheetSkeletonManagerService, _headerUnhideRangeService, _commandService) {
15001
+ super();
15002
+ this._context = _context;
15003
+ this._sheetSkeletonManagerService = _sheetSkeletonManagerService;
15004
+ this._headerUnhideRangeService = _headerUnhideRangeService;
15005
+ this._commandService = _commandService;
15006
+ _defineProperty(this, "_shapes", {
15007
+ cols: [],
15008
+ rows: []
15009
+ });
15010
+ _defineProperty(this, "interceptor", new _univerjs_core.InterceptorManager({ HEADER_UNHIDE_RANGE_VISIBLE_CHECK }));
15011
+ this._init();
15012
+ }
15013
+ dispose() {
15014
+ super.dispose();
15015
+ this._clearShapes();
15016
+ }
15017
+ _init() {
15018
+ let activeSheetId = "";
15019
+ this._context.unit.activeSheet$.pipe((0, rxjs.takeUntil)(this.dispose$)).subscribe((worksheet) => {
15020
+ this._clearShapes();
15021
+ if (!worksheet) {
15022
+ activeSheetId = "";
15023
+ return;
15024
+ }
15025
+ activeSheetId = worksheet.getSheetId();
15026
+ this._update(this._workbook, worksheet);
15027
+ });
15028
+ this.disposeWithMe(this._sheetSkeletonManagerService.currentSkeleton$.subscribe((param) => {
15029
+ if (param) {
15030
+ const { unitId, sheetId } = param;
15031
+ if (unitId === this._workbook.getUnitId() && sheetId === activeSheetId) {
15032
+ const worksheet = this._workbook.getSheetBySheetId(sheetId);
15033
+ if (worksheet) this._update(this._workbook, worksheet);
15034
+ }
15035
+ }
15036
+ }));
15037
+ }
15038
+ _update(workbook, worksheet) {
15039
+ var _this$_sheetSkeletonM;
15040
+ const skeleton = (_this$_sheetSkeletonM = this._sheetSkeletonManagerService.getSkeletonParam(worksheet.getSheetId())) === null || _this$_sheetSkeletonM === void 0 ? void 0 : _this$_sheetSkeletonM.skeleton;
15041
+ if (!skeleton) return;
15042
+ const visibleCheck = this.interceptor.fetchThroughInterceptors(HEADER_UNHIDE_RANGE_VISIBLE_CHECK);
15043
+ const shouldRenderRange = (payload) => {
15044
+ var _visibleCheck;
15045
+ return this._headerUnhideRangeService.shouldRenderRange((_visibleCheck = visibleCheck(true, payload)) !== null && _visibleCheck !== void 0 ? _visibleCheck : true, payload);
15046
+ };
15047
+ const hiddenRowRanges = worksheet.getHiddenRows().filter((range) => shouldRenderRange({
15048
+ axis: "row",
15049
+ range,
15050
+ workbook,
15051
+ worksheet
15052
+ }));
15053
+ const hiddenColRanges = worksheet.getHiddenCols().filter((range) => shouldRenderRange({
15054
+ axis: "column",
15055
+ range,
15056
+ workbook,
15057
+ worksheet
15058
+ }));
15059
+ const { scene } = this._getSheetObject();
15060
+ const rowCount = worksheet.getRowCount();
15061
+ const rowShapes = hiddenRowRanges.map((range) => {
15062
+ const { startRow, endRow } = range;
15063
+ const position = getCoordByCell(startRow, 0, scene, skeleton);
15064
+ const hasPrevious = startRow !== 0;
15065
+ const hasNext = endRow !== rowCount - 1;
15066
+ return new HeaderUnhideShape(HEADER_UNHIDE_CONTROLLER_SHAPE, {
15067
+ type: 0,
15068
+ hovered: false,
15069
+ hasPrevious,
15070
+ hasNext,
15071
+ top: position.startY - (hasPrevious ? 12 : 0),
15072
+ left: position.startX - 12
15073
+ }, () => this._commandService.executeCommand(_univerjs_sheets.SetSpecificRowsVisibleCommand.id, {
15074
+ unitId: workbook.getUnitId(),
15075
+ subUnitId: worksheet.getSheetId(),
15076
+ ranges: [range]
15077
+ }));
15078
+ });
15079
+ const colCount = worksheet.getColumnCount();
15080
+ const colShapes = hiddenColRanges.map((range) => {
15081
+ const { startColumn, endColumn } = range;
15082
+ const position = getCoordByCell(0, startColumn, scene, skeleton);
15083
+ const hasPrevious = startColumn !== 0;
15084
+ const hasNext = endColumn !== colCount - 1;
15085
+ return new HeaderUnhideShape(HEADER_UNHIDE_CONTROLLER_SHAPE, {
15086
+ type: 1,
15087
+ hovered: false,
15088
+ hasPrevious,
15089
+ hasNext,
15090
+ top: Math.max(skeleton.columnHeaderHeight, skeleton.columnHeaderHeightAndMarginTop) - 12,
15091
+ left: position.startX - (hasPrevious ? 12 : 0)
15092
+ }, () => this._commandService.executeCommand(_univerjs_sheets.SetSpecificColsVisibleCommand.id, {
15093
+ unitId: workbook.getUnitId(),
15094
+ subUnitId: worksheet.getSheetId(),
15095
+ ranges: [range]
15096
+ }));
15097
+ });
15098
+ scene.addObjects(colShapes, 12);
15099
+ scene.addObjects(rowShapes, 12);
15100
+ this._clearShapes();
15101
+ this._shapes = {
15102
+ cols: colShapes,
15103
+ rows: rowShapes
15104
+ };
15105
+ }
15106
+ _clearShapes() {
15107
+ this._shapes.cols.forEach((shape) => shape.dispose());
15108
+ this._shapes.rows.forEach((shape) => shape.dispose());
15109
+ this._shapes = {
15110
+ cols: [],
15111
+ rows: []
15112
+ };
15113
+ }
15114
+ _getSheetObject() {
15115
+ return getSheetObject(this._workbook, this._context);
15116
+ }
15117
+ };
15118
+ HeaderUnhideRenderController = __decorate([
15119
+ __decorateParam(1, (0, _univerjs_core.Inject)(SheetSkeletonManagerService)),
15120
+ __decorateParam(2, (0, _univerjs_core.Inject)(HeaderUnhideRangeService)),
15121
+ __decorateParam(3, _univerjs_core.ICommandService)
15122
+ ], HeaderUnhideRenderController);
15123
+
15124
+ //#endregion
15125
+ //#region src/controllers/render-controllers/sheet.render-controller.ts
15126
+ const FRAME_STACK_THRESHOLD = 60;
15127
+ let SheetRenderController = class SheetRenderController extends _univerjs_core.RxDisposable {
15128
+ constructor(_context, _configService, _sheetSkeletonManagerService, _sheetRenderService, _commandService, _telemetryService) {
15129
+ super();
15130
+ this._context = _context;
15131
+ this._configService = _configService;
15132
+ this._sheetSkeletonManagerService = _sheetSkeletonManagerService;
15133
+ this._sheetRenderService = _sheetRenderService;
15134
+ this._commandService = _commandService;
15135
+ this._telemetryService = _telemetryService;
15136
+ _defineProperty(this, "_renderMetric$", new rxjs.Subject());
15137
+ _defineProperty(this, "renderMetric$", this._renderMetric$.asObservable());
15138
+ _defineProperty(this, "_renderFrameTimeMetric", null);
15139
+ _defineProperty(this, "_renderFrameTags", {});
15140
+ _defineProperty(this, "_afterRenderMetric$", new rxjs.Subject());
15141
+ this._addNewRender();
15142
+ this._initRenderMetricSubscriber();
15143
+ }
15144
+ _addNewRender() {
15145
+ const { scene, engine, unit: workbook } = this._context;
15146
+ this._addComponent(workbook);
15147
+ this._initRerenderScheduler();
15148
+ this._initCommandListener();
15149
+ const worksheet = this._context.unit.getActiveSheet();
15150
+ if (!worksheet) throw new Error("No active sheet found");
15151
+ const sheetId = worksheet.getSheetId();
15152
+ this._sheetSkeletonManagerService.setCurrent({ sheetId });
15153
+ const frameFn = () => scene.render();
15154
+ this.disposeWithMe(this._context.activated$.subscribe((activated) => {
15155
+ if (activated) engine.runRenderLoop(frameFn);
15156
+ else engine.stopRenderLoop(frameFn);
15157
+ }));
15158
+ }
15159
+ _initRenderMetricSubscriber() {
15160
+ const { engine } = this._context;
15161
+ this.disposeWithMe(engine.beginFrame$.subscribe(() => {
15162
+ this._renderFrameTimeMetric = null;
15163
+ this._renderFrameTags = {};
15164
+ }));
15165
+ this.disposeWithMe(engine.endFrame$.subscribe(() => {
15166
+ if (this._renderFrameTimeMetric && Object.keys(this._renderFrameTimeMetric).filter((key) => key.startsWith(_univerjs_engine_render.SHEET_EXTENSION_PREFIX)).length > 0) this._afterRenderMetric$.next({
15167
+ frameTimeMetric: this._renderFrameTimeMetric,
15168
+ tags: this._renderFrameTags
15169
+ });
15170
+ }));
15171
+ this.disposeWithMe(engine.renderFrameTimeMetric$.subscribe(([key, value]) => {
15172
+ if (!this._renderFrameTimeMetric) this._renderFrameTimeMetric = {};
15173
+ if (!this._renderFrameTimeMetric[key]) this._renderFrameTimeMetric[key] = [];
15174
+ this._renderFrameTimeMetric[key].push(Math.round(value * 100) / 100);
15175
+ }));
15176
+ this.disposeWithMe(engine.renderFrameTags$.subscribe(([key, value]) => {
15177
+ this._renderFrameTags[key] = value;
15178
+ }));
15179
+ const frameInfoList = [];
15180
+ this.disposeWithMe(this._afterRenderMetric$.pipe((0, rxjs.withLatestFrom)(engine.endFrame$)).subscribe(([sceneRenderDetail, basicFrameTimeInfo]) => {
15181
+ frameInfoList.push({
15182
+ FPS: basicFrameTimeInfo.FPS,
15183
+ elapsedTime: basicFrameTimeInfo.elapsedTime,
15184
+ frameTime: Math.round(basicFrameTimeInfo.frameTime * 100) / 100,
15185
+ ...sceneRenderDetail.frameTimeMetric,
15186
+ ...sceneRenderDetail.tags
15187
+ });
15188
+ if (frameInfoList.length > FRAME_STACK_THRESHOLD) {
15189
+ this._captureRenderMetric(frameInfoList);
15190
+ frameInfoList.length = 0;
15191
+ }
15192
+ }));
15193
+ }
15194
+ /**
15195
+ * Send render metric to telemetry service
15196
+ * @param frameInfoList
15197
+ */
15198
+ _captureRenderMetric(frameInfoList) {
15199
+ var _this$_telemetryServi;
15200
+ const filteredFrameInfo = frameInfoList;
15201
+ if (filteredFrameInfo.length === 0) return;
15202
+ const sumValueForNumListFields = (data) => {
15203
+ let totalSum = 0;
15204
+ const sums = Object.entries(data).filter(([_, value]) => Array.isArray(value)).map(([key]) => key).reduce((acc, key) => {
15205
+ acc[key] = data[key].reduce((sum, num) => sum + num, 0);
15206
+ return acc;
15207
+ }, {});
15208
+ Object.keys(data).filter((key) => key.startsWith(_univerjs_engine_render.SHEET_EXTENSION_PREFIX)).forEach((key) => {
15209
+ totalSum += sums[key];
15210
+ });
15211
+ return {
15212
+ ...sums,
15213
+ extensionTotal: totalSum
15214
+ };
15215
+ };
15216
+ const frameTimeListAfterSum = frameInfoList.map((info) => {
15217
+ return {
15218
+ ...info,
15219
+ ...sumValueForNumListFields(info)
15220
+ };
15221
+ });
15222
+ const getSummaryStats = (list) => {
15223
+ return Object.entries(list[0]).filter(([key, _]) => !["elapsedTime"].includes(key)).filter(([_, value]) => typeof value === "number").map(([key]) => key).reduce((acc, key) => {
15224
+ const values = list.map((obj) => obj[key]);
15225
+ const max = Math.max(...values);
15226
+ const min = Math.min(...values);
15227
+ const avg = values.reduce((sum, val) => sum + val, 0) / values.length;
15228
+ acc[key] = {
15229
+ max: Math.round(max * 100) / 100,
15230
+ min: Math.round(min * 100) / 100,
15231
+ avg: Math.round(avg * 100) / 100
15232
+ };
15233
+ return acc;
15234
+ }, {});
15235
+ };
15236
+ const summaryFrameStats = getSummaryStats(frameTimeListAfterSum);
15237
+ const elapsedTimeToStart = filteredFrameInfo[filteredFrameInfo.length - 1].elapsedTime;
15238
+ const telemetryData = {
15239
+ sheetId: this._context.unit.getActiveSheet().getSheetId(),
15240
+ unitId: this._context.unit.getUnitId(),
15241
+ elapsedTimeToStart,
15242
+ ...summaryFrameStats
14863
15243
  };
14864
15244
  this._renderMetric$.next(telemetryData);
14865
15245
  (_this$_telemetryServi = this._telemetryService) === null || _this$_telemetryServi === void 0 || _this$_telemetryServi.capture("sheet_render_cost", telemetryData);
@@ -15000,13 +15380,13 @@ let SheetRenderController = class SheetRenderController extends _univerjs_core.R
15000
15380
  const spreadsheetRowHeader = components.get("__SpreadsheetRowHeader__");
15001
15381
  const spreadsheetColumnHeader = components.get("__SpreadsheetColumnHeader__");
15002
15382
  const spreadsheetLeftTopPlaceholder = components.get("__SpreadsheetLeftTopPlaceholder__");
15003
- const { rowHeaderWidth, columnHeaderHeight } = spreadsheetSkeleton;
15383
+ const leftTopPlaceholderSize = getLeftTopPlaceholderSize(spreadsheetSkeleton);
15004
15384
  spreadsheet === null || spreadsheet === void 0 || spreadsheet.updateSkeleton(spreadsheetSkeleton);
15005
15385
  spreadsheetRowHeader === null || spreadsheetRowHeader === void 0 || spreadsheetRowHeader.updateSkeleton(spreadsheetSkeleton);
15006
15386
  spreadsheetColumnHeader === null || spreadsheetColumnHeader === void 0 || spreadsheetColumnHeader.updateSkeleton(spreadsheetSkeleton);
15007
15387
  spreadsheetLeftTopPlaceholder === null || spreadsheetLeftTopPlaceholder === void 0 || spreadsheetLeftTopPlaceholder.transformByState({
15008
- width: rowHeaderWidth,
15009
- height: columnHeaderHeight
15388
+ width: leftTopPlaceholderSize.width,
15389
+ height: leftTopPlaceholderSize.height
15010
15390
  });
15011
15391
  }));
15012
15392
  }
@@ -15126,6 +15506,13 @@ SheetRenderController = __decorate([
15126
15506
  __decorateParam(4, _univerjs_core.ICommandService),
15127
15507
  __decorateParam(5, (0, _univerjs_core.Optional)(_univerjs_telemetry.ITelemetryService))
15128
15508
  ], SheetRenderController);
15509
+ function getLeftTopPlaceholderSize(skeleton) {
15510
+ var _skeleton$rowHeaderWi, _skeleton$columnHeade;
15511
+ return {
15512
+ width: (_skeleton$rowHeaderWi = skeleton.rowHeaderWidthAndMarginLeft) !== null && _skeleton$rowHeaderWi !== void 0 ? _skeleton$rowHeaderWi : skeleton.rowHeaderWidth,
15513
+ height: (_skeleton$columnHeade = skeleton.columnHeaderHeightAndMarginTop) !== null && _skeleton$columnHeade !== void 0 ? _skeleton$columnHeade : skeleton.columnHeaderHeight
15514
+ };
15515
+ }
15129
15516
 
15130
15517
  //#endregion
15131
15518
  //#region src/components/border-panel/border-line/icons/BorderDashDot.tsx
@@ -16321,7 +16708,6 @@ function ClearSelectionContentMenuItemFactory(accessor) {
16321
16708
  return {
16322
16709
  id: _univerjs_sheets.ClearSelectionContentCommand.id,
16323
16710
  type: _univerjs_ui.MenuItemType.BUTTON,
16324
- icon: "ClearFormatDoubleIcon",
16325
16711
  title: "rightClick.clearContent",
16326
16712
  disabled$: getObservableWithExclusiveRange$(accessor, getCurrentRangeDisable$(accessor, {
16327
16713
  workbookTypes: [_univerjs_sheets.WorkbookEditablePermission],
@@ -16335,7 +16721,6 @@ function ClearSelectionFormatMenuItemFactory(accessor) {
16335
16721
  return {
16336
16722
  id: _univerjs_sheets.ClearSelectionFormatCommand.id,
16337
16723
  type: _univerjs_ui.MenuItemType.BUTTON,
16338
- icon: "ClearFormatDoubleIcon",
16339
16724
  title: "rightClick.clearFormat",
16340
16725
  disabled$: getCurrentRangeDisable$(accessor, {
16341
16726
  workbookTypes: [_univerjs_sheets.WorkbookEditablePermission],
@@ -16345,11 +16730,28 @@ function ClearSelectionFormatMenuItemFactory(accessor) {
16345
16730
  hidden$: (0, _univerjs_ui.getMenuHiddenObservable)(accessor, _univerjs_core.UniverInstanceType.UNIVER_SHEET)
16346
16731
  };
16347
16732
  }
16348
- function ClearSelectionAllMenuItemFactory(accessor) {
16733
+ function ClearSelectionAllToolbarMenuItemFactory(accessor) {
16349
16734
  return {
16350
16735
  id: _univerjs_sheets.ClearSelectionAllCommand.id,
16351
16736
  type: _univerjs_ui.MenuItemType.BUTTON,
16352
16737
  icon: "ClearFormatDoubleIcon",
16738
+ tooltip: "rightClick.clearAll",
16739
+ disabled$: getObservableWithExclusiveRange$(accessor, getCurrentRangeDisable$(accessor, {
16740
+ workbookTypes: [_univerjs_sheets.WorkbookEditablePermission],
16741
+ worksheetTypes: [
16742
+ _univerjs_sheets.WorksheetEditPermission,
16743
+ _univerjs_sheets.WorksheetSetCellValuePermission,
16744
+ _univerjs_sheets.WorksheetSetCellStylePermission
16745
+ ],
16746
+ rangeTypes: [_univerjs_sheets.RangeProtectionPermissionEditPoint]
16747
+ })),
16748
+ hidden$: (0, _univerjs_ui.getMenuHiddenObservable)(accessor, _univerjs_core.UniverInstanceType.UNIVER_SHEET)
16749
+ };
16750
+ }
16751
+ function ClearSelectionAllMenuItemFactory(accessor) {
16752
+ return {
16753
+ id: _univerjs_sheets.ClearSelectionAllCommand.id,
16754
+ type: _univerjs_ui.MenuItemType.BUTTON,
16353
16755
  title: "rightClick.clearAll",
16354
16756
  tooltip: "rightClick.clearAll",
16355
16757
  disabled$: getObservableWithExclusiveRange$(accessor, getCurrentRangeDisable$(accessor, {
@@ -18646,7 +19048,7 @@ const menuSchema = {
18646
19048
  },
18647
19049
  [_univerjs_sheets.ClearSelectionAllCommand.id]: {
18648
19050
  order: 3,
18649
- menuItemFactory: ClearSelectionAllMenuItemFactory
19051
+ menuItemFactory: ClearSelectionAllToolbarMenuItemFactory
18650
19052
  }
18651
19053
  },
18652
19054
  [_univerjs_ui.RibbonStartGroup.FORMAT]: {
@@ -23990,7 +24392,7 @@ const useHighlightRange = (ranges = []) => {
23990
24392
  //#endregion
23991
24393
  //#region package.json
23992
24394
  var name = "@univerjs/sheets-ui";
23993
- var version = "0.22.1";
24395
+ var version = "0.23.0-insiders.20260522-ee0b0a4";
23994
24396
 
23995
24397
  //#endregion
23996
24398
  //#region src/services/cell-alert-manager.service.ts
@@ -26784,28 +27186,30 @@ var RangeProtectionRenderExtension = class extends _univerjs_engine_render.Sheet
26784
27186
  getShadowStrategy() {
26785
27187
  return this._shadowStrategy;
26786
27188
  }
26787
- draw(ctx, _parentScale, spreadsheetSkeleton) {
27189
+ draw(ctx, _parentScale, spreadsheetSkeleton, diffRanges) {
26788
27190
  const { worksheet } = spreadsheetSkeleton;
26789
27191
  if (!worksheet) return;
26790
27192
  ctx.save();
26791
27193
  if (!this._pattern) this._pattern = ctx.createPattern(this._img, "repeat");
26792
27194
  this.renderCache.clear();
26793
- _univerjs_core.Range.foreach(spreadsheetSkeleton.rowColumnSegment, (row, col) => {
26794
- if (!worksheet.getRowVisible(row) || !worksheet.getColVisible(col)) return;
26795
- const { selectionProtection = [] } = worksheet.getCell(row, col) || {};
26796
- if (!this._pattern) return;
26797
- ctx.fillStyle = this._pattern;
26798
- selectionProtection.forEach((config) => {
26799
- if (!config.ruleId) return;
26800
- if (this.shouldRender(config)) {
26801
- if (this.renderCache.has(config.ruleId)) return;
26802
- this.renderCache.add(config.ruleId);
26803
- config.ranges.forEach((range) => {
26804
- const start = spreadsheetSkeleton.getCellWithCoordByIndex(range.startRow, range.startColumn, false);
26805
- const end = spreadsheetSkeleton.getCellWithCoordByIndex(range.endRow, range.endColumn, false);
26806
- ctx.fillRect(start.startX, start.startY, end.endX - start.startX, end.endY - start.startY);
26807
- });
26808
- }
27195
+ ((diffRanges === null || diffRanges === void 0 ? void 0 : diffRanges.length) ? diffRanges : [spreadsheetSkeleton.rowColumnSegment]).forEach((range) => {
27196
+ _univerjs_core.Range.foreach(range, (row, col) => {
27197
+ if (!worksheet.getRowVisible(row) || !worksheet.getColVisible(col)) return;
27198
+ const { selectionProtection = [] } = worksheet.getCell(row, col) || {};
27199
+ if (!this._pattern) return;
27200
+ ctx.fillStyle = this._pattern;
27201
+ selectionProtection.forEach((config) => {
27202
+ if (!config.ruleId) return;
27203
+ if (this.shouldRender(config)) {
27204
+ if (this.renderCache.has(config.ruleId)) return;
27205
+ this.renderCache.add(config.ruleId);
27206
+ config.ranges.forEach((range) => {
27207
+ const start = spreadsheetSkeleton.getCellWithCoordByIndex(range.startRow, range.startColumn, false);
27208
+ const end = spreadsheetSkeleton.getCellWithCoordByIndex(range.endRow, range.endColumn, false);
27209
+ ctx.fillRect(start.startX, start.startY, end.endX - start.startX, end.endY - start.startY);
27210
+ });
27211
+ }
27212
+ });
26809
27213
  });
26810
27214
  });
26811
27215
  ctx.restore();
@@ -26891,690 +27295,394 @@ var WorksheetProtectionRenderExtension = class extends _univerjs_engine_render.S
26891
27295
  getShadowStrategy() {
26892
27296
  return this._shadowStrategy;
26893
27297
  }
26894
- setZIndex(zIndex) {
26895
- this.Z_INDEX = zIndex;
26896
- }
26897
- };
26898
-
26899
- //#endregion
26900
- //#region src/controllers/permission/sheet-permission-render.controller.ts
26901
- let SheetPermissionRenderManagerController = class SheetPermissionRenderManagerController extends _univerjs_core.Disposable {
26902
- constructor(_injector, _componentManager) {
26903
- super();
26904
- this._injector = _injector;
26905
- this._componentManager = _componentManager;
26906
- this._init();
26907
- }
26908
- _init() {
26909
- this._initComponents();
26910
- this._initUiPartComponents();
26911
- }
26912
- _initComponents() {
26913
- [
26914
- [permissionMenuIconKey, _univerjs_icons.ProtectIcon],
26915
- [permissionDeleteIconKey, _univerjs_icons.DeleteIcon],
26916
- [permissionEditIconKey, _univerjs_icons.WriteIcon],
26917
- [permissionCheckIconKey, _univerjs_icons.CheckMarkIcon],
26918
- [permissionLockIconKey, _univerjs_icons.LockIcon],
26919
- [UNIVER_SHEET_PERMISSION_PANEL, SheetPermissionPanel],
26920
- [UNIVER_SHEET_PERMISSION_USER_DIALOG, SheetPermissionUserDialog],
26921
- [UNIVER_SHEET_PERMISSION_DIALOG, SheetPermissionDialog],
26922
- [UNIVER_SHEET_PERMISSION_ALERT_DIALOG, AlertDialog]
26923
- ].forEach(([key, comp]) => {
26924
- this.disposeWithMe(this._componentManager.register(key, comp));
26925
- });
26926
- }
26927
- _initUiPartComponents() {
26928
- const config = this._injector.get(_univerjs_core.IConfigService).getConfig(SHEETS_UI_PLUGIN_CONFIG_KEY);
26929
- if (config === null || config === void 0 ? void 0 : config.protectedRangeUserSelector) {
26930
- const { component, framework } = config.protectedRangeUserSelector;
26931
- this.disposeWithMe(this._componentManager.register(UNIVER_SHEET_PERMISSION_USER_PART, component, { framework }));
26932
- }
26933
- }
26934
- };
26935
- SheetPermissionRenderManagerController = __decorate([__decorateParam(0, (0, _univerjs_core.Inject)(_univerjs_core.Injector)), __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_ui.ComponentManager))], SheetPermissionRenderManagerController);
26936
- let SheetPermissionRenderController = class SheetPermissionRenderController extends _univerjs_core.Disposable {
26937
- constructor(_context, _rangeProtectionRuleModel, _sheetSkeletonManagerService, _permissionService, _configService) {
26938
- super();
26939
- this._context = _context;
26940
- this._rangeProtectionRuleModel = _rangeProtectionRuleModel;
26941
- this._sheetSkeletonManagerService = _sheetSkeletonManagerService;
26942
- this._permissionService = _permissionService;
26943
- this._configService = _configService;
26944
- _defineProperty(this, "_rangeProtectionCanViewRenderExtension", void 0);
26945
- _defineProperty(this, "_rangeProtectionCanNotViewRenderExtension", void 0);
26946
- const config = this._configService.getConfig(SHEETS_UI_PLUGIN_CONFIG_KEY);
26947
- const shadowStrategy = convertToShadowStrategy(config === null || config === void 0 ? void 0 : config.protectedRangeShadow);
26948
- this._rangeProtectionCanViewRenderExtension = new RangeProtectionCanViewRenderExtension(shadowStrategy);
26949
- this._rangeProtectionCanNotViewRenderExtension = new RangeProtectionCanNotViewRenderExtension(shadowStrategy);
26950
- this._initSkeleton();
26951
- this._initRender();
26952
- this.disposeWithMe(this._rangeProtectionRuleModel.ruleChange$.subscribe((info) => {
26953
- var _info$oldRule, _info$oldRule2;
26954
- if (((_info$oldRule = info.oldRule) === null || _info$oldRule === void 0 ? void 0 : _info$oldRule.id) && this._rangeProtectionCanViewRenderExtension.renderCache.has(info.oldRule.id) || this._rangeProtectionCanViewRenderExtension.renderCache.has(info.rule.id)) this._rangeProtectionCanViewRenderExtension.clearCache();
26955
- if (((_info$oldRule2 = info.oldRule) === null || _info$oldRule2 === void 0 ? void 0 : _info$oldRule2.id) && this._rangeProtectionCanNotViewRenderExtension.renderCache.has(info.oldRule.id) || this._rangeProtectionCanNotViewRenderExtension.renderCache.has(info.rule.id)) this._rangeProtectionCanNotViewRenderExtension.clearCache();
26956
- }));
26957
- }
26958
- _initRender() {
26959
- const spreadsheetRender = this._context.mainComponent;
26960
- if (spreadsheetRender) {
26961
- if (!spreadsheetRender.getExtensionByKey("RANGE_PROTECTION_CAN_VIEW_RENDER_EXTENSION_KEY")) spreadsheetRender.register(this._rangeProtectionCanViewRenderExtension);
26962
- if (!spreadsheetRender.getExtensionByKey("RANGE_PROTECTION_CAN_NOT_VIEW_RENDER_EXTENSION_KEY")) spreadsheetRender.register(this._rangeProtectionCanNotViewRenderExtension);
26963
- }
26964
- }
26965
- _initSkeleton() {
26966
- const markDirtySkeleton = () => {
26967
- var _this$_context$mainCo;
26968
- this._sheetSkeletonManagerService.reCalculate();
26969
- (_this$_context$mainCo = this._context.mainComponent) === null || _this$_context$mainCo === void 0 || _this$_context$mainCo.makeDirty();
26970
- };
26971
- this.disposeWithMe((0, rxjs.merge)(this._permissionService.permissionPointUpdate$.pipe((0, rxjs.throttleTime)(300, void 0, { trailing: true })), this._rangeProtectionRuleModel.rangeRuleInitStateChange$, this._rangeProtectionRuleModel.ruleChange$).pipe().subscribe(markDirtySkeleton));
26972
- }
26973
- };
26974
- SheetPermissionRenderController = __decorate([
26975
- __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_sheets.RangeProtectionRuleModel)),
26976
- __decorateParam(2, (0, _univerjs_core.Inject)(SheetSkeletonManagerService)),
26977
- __decorateParam(3, _univerjs_core.IPermissionService),
26978
- __decorateParam(4, _univerjs_core.IConfigService)
26979
- ], SheetPermissionRenderController);
26980
- let WorksheetProtectionRenderController = class WorksheetProtectionRenderController extends _univerjs_core.Disposable {
26981
- constructor(_context, _renderManagerService, _sheetSkeletonManagerService, _worksheetProtectionRuleModel, _configService) {
26982
- super();
26983
- this._context = _context;
26984
- this._renderManagerService = _renderManagerService;
26985
- this._sheetSkeletonManagerService = _sheetSkeletonManagerService;
26986
- this._worksheetProtectionRuleModel = _worksheetProtectionRuleModel;
26987
- this._configService = _configService;
26988
- _defineProperty(this, "_worksheetProtectionRenderExtension", void 0);
26989
- const config = this._configService.getConfig(SHEETS_UI_PLUGIN_CONFIG_KEY);
26990
- const shadowStrategy = convertToShadowStrategy(config === null || config === void 0 ? void 0 : config.protectedRangeShadow);
26991
- this._worksheetProtectionRenderExtension = new WorksheetProtectionRenderExtension(shadowStrategy);
26992
- this._initSkeleton();
26993
- if (shadowStrategy === "none") return;
26994
- this._initRender();
26995
- }
26996
- _initRender() {
26997
- const renderId = this._context.unitId;
26998
- const render = renderId && this._renderManagerService.getRenderById(renderId);
26999
- const spreadsheetRender = render && render.mainComponent;
27000
- if (spreadsheetRender) {
27001
- if (!spreadsheetRender.getExtensionByKey("worksheet-protection")) spreadsheetRender.register(this._worksheetProtectionRenderExtension);
27002
- }
27003
- }
27004
- _initSkeleton() {
27005
- const markDirtySkeleton = () => {
27006
- var _this$_context$mainCo2;
27007
- this._sheetSkeletonManagerService.reCalculate();
27008
- (_this$_context$mainCo2 = this._context.mainComponent) === null || _this$_context$mainCo2 === void 0 || _this$_context$mainCo2.makeDirty();
27009
- };
27010
- this.disposeWithMe((0, rxjs.merge)(this._worksheetProtectionRuleModel.worksheetRuleInitStateChange$).pipe().subscribe(markDirtySkeleton));
27011
- }
27012
- };
27013
- WorksheetProtectionRenderController = __decorate([
27014
- __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_engine_render.IRenderManagerService)),
27015
- __decorateParam(2, (0, _univerjs_core.Inject)(SheetSkeletonManagerService)),
27016
- __decorateParam(3, (0, _univerjs_core.Inject)(_univerjs_sheets.WorksheetProtectionRuleModel)),
27017
- __decorateParam(4, (0, _univerjs_core.Inject)(_univerjs_core.IConfigService))
27018
- ], WorksheetProtectionRenderController);
27019
-
27020
- //#endregion
27021
- //#region src/controllers/render-controllers/clipboard.render-controller.ts
27022
- let ClipboardRenderController = class ClipboardRenderController extends _univerjs_core.Disposable {
27023
- constructor(_context, _sheetSkeletonManagerService, _sheetClipboardService, _sheetClipboardController) {
27024
- super();
27025
- this._context = _context;
27026
- this._sheetSkeletonManagerService = _sheetSkeletonManagerService;
27027
- this._sheetClipboardService = _sheetClipboardService;
27028
- this._sheetClipboardController = _sheetClipboardController;
27029
- this._initialize();
27030
- }
27031
- _initialize() {
27032
- this.disposeWithMe((0, _univerjs_core.toDisposable)(this._sheetSkeletonManagerService.currentSkeleton$.subscribe((skeleton) => {
27033
- if (!(skeleton === null || skeleton === void 0 ? void 0 : skeleton.unitId)) return;
27034
- if (!this._sheetClipboardService.getPasteMenuVisible()) return;
27035
- const pasteOptionsCache = this._sheetClipboardService.getPasteOptionsCache();
27036
- const menuUnitId = pasteOptionsCache === null || pasteOptionsCache === void 0 ? void 0 : pasteOptionsCache.target.unitId;
27037
- if (skeleton.unitId === menuUnitId) this._sheetClipboardController.refreshOptionalPaste();
27038
- })));
27039
- }
27040
- };
27041
- ClipboardRenderController = __decorate([
27042
- __decorateParam(1, (0, _univerjs_core.Inject)(SheetSkeletonManagerService)),
27043
- __decorateParam(2, ISheetClipboardService),
27044
- __decorateParam(3, (0, _univerjs_core.Inject)(SheetClipboardController))
27045
- ], ClipboardRenderController);
27046
-
27047
- //#endregion
27048
- //#region src/controllers/render-controllers/format-painter.render-controller.ts
27049
- let FormatPainterRenderController = class FormatPainterRenderController extends _univerjs_core.Disposable {
27050
- constructor(_context, _formatPainterService, _selectionRenderService, _commandService) {
27051
- super();
27052
- this._context = _context;
27053
- this._formatPainterService = _formatPainterService;
27054
- this._selectionRenderService = _selectionRenderService;
27055
- this._commandService = _commandService;
27056
- this._initialize();
27057
- }
27058
- _initialize() {
27059
- this._bindFormatPainterStatus();
27060
- this._commandExecutedListener();
27061
- }
27062
- _commandExecutedListener() {
27063
- this.disposeWithMe(this._selectionRenderService.selectionMoveEnd$.subscribe((selections) => {
27064
- if (this._formatPainterService.getStatus() !== 0) {
27065
- var _this$_context$unit$g;
27066
- const { rangeWithCoord } = selections[selections.length - 1];
27067
- this._commandService.executeCommand(ApplyFormatPainterCommand.id, {
27068
- unitId: this._context.unitId,
27069
- subUnitId: ((_this$_context$unit$g = this._context.unit.getActiveSheet()) === null || _this$_context$unit$g === void 0 ? void 0 : _this$_context$unit$g.getSheetId()) || "",
27070
- range: {
27071
- startRow: rangeWithCoord.startRow,
27072
- startColumn: rangeWithCoord.startColumn,
27073
- endRow: rangeWithCoord.endRow,
27074
- endColumn: rangeWithCoord.endColumn
27075
- }
27076
- });
27077
- if (this._formatPainterService.getStatus() === 1) this._commandService.executeCommand(SetOnceFormatPainterCommand.id);
27078
- }
27079
- }));
27080
- }
27081
- _bindFormatPainterStatus() {
27082
- this.disposeWithMe((0, _univerjs_core.toDisposable)(this._formatPainterService.status$.subscribe((status) => {
27083
- const scene = this._context.scene;
27084
- if (!scene) return;
27085
- if (status !== 0) scene.setDefaultCursor(_univerjs_engine_render.CURSOR_TYPE.CELL);
27086
- else scene.setDefaultCursor(_univerjs_engine_render.CURSOR_TYPE.DEFAULT);
27087
- })));
27088
- }
27089
- };
27090
- FormatPainterRenderController = __decorate([
27091
- __decorateParam(1, IFormatPainterService),
27092
- __decorateParam(2, ISheetSelectionRenderService),
27093
- __decorateParam(3, _univerjs_core.ICommandService)
27094
- ], FormatPainterRenderController);
27298
+ setZIndex(zIndex) {
27299
+ this.Z_INDEX = zIndex;
27300
+ }
27301
+ };
27095
27302
 
27096
27303
  //#endregion
27097
- //#region src/menu/header-menu-shape.ts
27098
- const HEADER_MENU_SHAPE_CIRCLE_FILL = "rgba(0, 0, 0, 0.15)";
27099
- const HEADER_MENU_SHAPE_TRIANGLE_FILL = "rgb(0, 0, 0)";
27100
- const HEADER_MENU_BACKGROUND_COLOR = "rgb(255, 255, 255, 1)";
27101
- var HeaderMenuShape = class extends _univerjs_engine_render.Shape {
27102
- constructor(key, props) {
27103
- super(key, props);
27104
- _defineProperty(this, "_size", 12);
27105
- _defineProperty(this, "_iconRatio", .4);
27106
- _defineProperty(this, "_mode", 0);
27107
- this.setShapeProps(props);
27304
+ //#region src/controllers/permission/sheet-permission-render.controller.ts
27305
+ let SheetPermissionRenderManagerController = class SheetPermissionRenderManagerController extends _univerjs_core.Disposable {
27306
+ constructor(_injector, _componentManager) {
27307
+ super();
27308
+ this._injector = _injector;
27309
+ this._componentManager = _componentManager;
27310
+ this._init();
27108
27311
  }
27109
- setShapeProps(props) {
27110
- if (props === null || props === void 0 ? void 0 : props.size) this._size = props.size;
27111
- if (props === null || props === void 0 ? void 0 : props.mode) this._mode = props.mode;
27112
- this.transformByState({
27113
- width: this._size,
27114
- height: this._size
27115
- });
27312
+ _init() {
27313
+ this._initComponents();
27314
+ this._initUiPartComponents();
27116
27315
  }
27117
- _draw(ctx) {
27118
- if (this._mode === 1) _univerjs_engine_render.Rect.drawWith(ctx, {
27119
- width: this._size,
27120
- height: this._size,
27121
- radius: this._size,
27122
- fill: HEADER_MENU_SHAPE_CIRCLE_FILL
27123
- });
27124
- const iconSize = this._size * .5 * this._iconRatio;
27125
- const sixtyDegree = Math.PI / 180 * 60;
27126
- const left = iconSize * Math.sin(sixtyDegree);
27127
- const top = iconSize * Math.cos(sixtyDegree);
27128
- _univerjs_engine_render.RegularPolygon.drawWith(ctx, {
27129
- pointsGroup: [[
27130
- {
27131
- x: -left + this._size / 2,
27132
- y: -top + this._size / 2
27133
- },
27134
- {
27135
- x: left + this._size / 2,
27136
- y: -top + this._size / 2
27137
- },
27138
- {
27139
- x: this._size / 2,
27140
- y: iconSize + this._size / 2
27141
- }
27142
- ]],
27143
- fill: HEADER_MENU_SHAPE_TRIANGLE_FILL
27316
+ _initComponents() {
27317
+ [
27318
+ [permissionMenuIconKey, _univerjs_icons.ProtectIcon],
27319
+ [permissionDeleteIconKey, _univerjs_icons.DeleteIcon],
27320
+ [permissionEditIconKey, _univerjs_icons.WriteIcon],
27321
+ [permissionCheckIconKey, _univerjs_icons.CheckMarkIcon],
27322
+ [permissionLockIconKey, _univerjs_icons.LockIcon],
27323
+ [UNIVER_SHEET_PERMISSION_PANEL, SheetPermissionPanel],
27324
+ [UNIVER_SHEET_PERMISSION_USER_DIALOG, SheetPermissionUserDialog],
27325
+ [UNIVER_SHEET_PERMISSION_DIALOG, SheetPermissionDialog],
27326
+ [UNIVER_SHEET_PERMISSION_ALERT_DIALOG, AlertDialog]
27327
+ ].forEach(([key, comp]) => {
27328
+ this.disposeWithMe(this._componentManager.register(key, comp));
27144
27329
  });
27145
27330
  }
27331
+ _initUiPartComponents() {
27332
+ const config = this._injector.get(_univerjs_core.IConfigService).getConfig(SHEETS_UI_PLUGIN_CONFIG_KEY);
27333
+ if (config === null || config === void 0 ? void 0 : config.protectedRangeUserSelector) {
27334
+ const { component, framework } = config.protectedRangeUserSelector;
27335
+ this.disposeWithMe(this._componentManager.register(UNIVER_SHEET_PERMISSION_USER_PART, component, { framework }));
27336
+ }
27337
+ }
27146
27338
  };
27147
-
27148
- //#endregion
27149
- //#region src/controllers/render-controllers/header-menu.render-controller.ts
27150
- const HEADER_MENU_CONTROLLER_SHAPE = "__SpreadsheetHeaderMenuSHAPEControllerShape__";
27151
- const HEADER_MENU_CONTROLLER_MENU = "__SpreadsheetHeaderMenuMAINControllerShape__";
27152
- const HEADER_MENU_CONTROLLER_SHAPE_COLOR = "rgba(0, 0, 0, 0.1)";
27153
- let HeaderMenuRenderController = class HeaderMenuRenderController extends _univerjs_core.Disposable {
27154
- constructor(_context, _sheetSkeletonManagerService, _contextMenuService, _commandService, _selectionManagerService) {
27339
+ SheetPermissionRenderManagerController = __decorate([__decorateParam(0, (0, _univerjs_core.Inject)(_univerjs_core.Injector)), __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_ui.ComponentManager))], SheetPermissionRenderManagerController);
27340
+ let SheetPermissionRenderController = class SheetPermissionRenderController extends _univerjs_core.Disposable {
27341
+ constructor(_context, _rangeProtectionRuleModel, _sheetSkeletonManagerService, _permissionService, _configService) {
27155
27342
  super();
27156
27343
  this._context = _context;
27344
+ this._rangeProtectionRuleModel = _rangeProtectionRuleModel;
27157
27345
  this._sheetSkeletonManagerService = _sheetSkeletonManagerService;
27158
- this._contextMenuService = _contextMenuService;
27159
- this._commandService = _commandService;
27160
- this._selectionManagerService = _selectionManagerService;
27161
- _defineProperty(this, "_hoverRect", void 0);
27162
- _defineProperty(this, "_hoverMenu", void 0);
27163
- _defineProperty(this, "_currentColumn", Number.POSITIVE_INFINITY);
27164
- _defineProperty(this, "_headerPointerSubs", void 0);
27165
- _defineProperty(this, "_colHeaderPointerSubs", void 0);
27166
- this._initialize();
27167
- }
27168
- dispose() {
27169
- var _this$_hoverRect, _this$_hoverMenu, _this$_headerPointerS;
27170
- (_this$_hoverRect = this._hoverRect) === null || _this$_hoverRect === void 0 || _this$_hoverRect.dispose();
27171
- (_this$_hoverMenu = this._hoverMenu) === null || _this$_hoverMenu === void 0 || _this$_hoverMenu.dispose();
27172
- (_this$_headerPointerS = this._headerPointerSubs) === null || _this$_headerPointerS === void 0 || _this$_headerPointerS.unsubscribe();
27173
- this._headerPointerSubs = null;
27346
+ this._permissionService = _permissionService;
27347
+ this._configService = _configService;
27348
+ _defineProperty(this, "_rangeProtectionCanViewRenderExtension", void 0);
27349
+ _defineProperty(this, "_rangeProtectionCanNotViewRenderExtension", void 0);
27350
+ const config = this._configService.getConfig(SHEETS_UI_PLUGIN_CONFIG_KEY);
27351
+ const shadowStrategy = convertToShadowStrategy(config === null || config === void 0 ? void 0 : config.protectedRangeShadow);
27352
+ this._rangeProtectionCanViewRenderExtension = new RangeProtectionCanViewRenderExtension(shadowStrategy);
27353
+ this._rangeProtectionCanNotViewRenderExtension = new RangeProtectionCanNotViewRenderExtension(shadowStrategy);
27354
+ this._initSkeleton();
27355
+ this._initRender();
27356
+ this.disposeWithMe(this._rangeProtectionRuleModel.ruleChange$.subscribe((info) => {
27357
+ var _info$oldRule, _info$oldRule2;
27358
+ if (((_info$oldRule = info.oldRule) === null || _info$oldRule === void 0 ? void 0 : _info$oldRule.id) && this._rangeProtectionCanViewRenderExtension.renderCache.has(info.oldRule.id) || this._rangeProtectionCanViewRenderExtension.renderCache.has(info.rule.id)) this._rangeProtectionCanViewRenderExtension.clearCache();
27359
+ if (((_info$oldRule2 = info.oldRule) === null || _info$oldRule2 === void 0 ? void 0 : _info$oldRule2.id) && this._rangeProtectionCanNotViewRenderExtension.renderCache.has(info.oldRule.id) || this._rangeProtectionCanNotViewRenderExtension.renderCache.has(info.rule.id)) this._rangeProtectionCanNotViewRenderExtension.clearCache();
27360
+ }));
27174
27361
  }
27175
- _initialize() {
27176
- const scene = this._context.scene;
27177
- this._hoverRect = new _univerjs_engine_render.Rect(HEADER_MENU_CONTROLLER_SHAPE, {
27178
- fill: HEADER_MENU_CONTROLLER_SHAPE_COLOR,
27179
- evented: false
27180
- });
27181
- this._hoverMenu = new HeaderMenuShape(HEADER_MENU_CONTROLLER_MENU, {
27182
- zIndex: 100,
27183
- visible: false
27184
- });
27185
- scene.addObjects([this._hoverRect, this._hoverMenu], 10);
27186
- this._initialHover(0);
27187
- this._initialHover(1);
27188
- this._initialHoverMenu();
27362
+ _initRender() {
27363
+ const spreadsheetRender = this._context.mainComponent;
27364
+ if (spreadsheetRender) {
27365
+ if (!spreadsheetRender.getExtensionByKey("RANGE_PROTECTION_CAN_VIEW_RENDER_EXTENSION_KEY")) spreadsheetRender.register(this._rangeProtectionCanViewRenderExtension);
27366
+ if (!spreadsheetRender.getExtensionByKey("RANGE_PROTECTION_CAN_NOT_VIEW_RENDER_EXTENSION_KEY")) spreadsheetRender.register(this._rangeProtectionCanNotViewRenderExtension);
27367
+ }
27189
27368
  }
27190
- _initialHover(initialType = 0) {
27191
- var _this$_headerPointerS2, _this$_headerPointerS3, _this$_headerPointerS4;
27192
- const spreadsheetColumnHeader = this._context.components.get("__SpreadsheetColumnHeader__");
27193
- const spreadsheetRowHeader = this._context.components.get("__SpreadsheetRowHeader__");
27194
- const eventBindingObject = initialType === 0 ? spreadsheetRowHeader : spreadsheetColumnHeader;
27195
- const pointerMoveHandler = (evt) => {
27196
- var _this$_sheetSkeletonM;
27197
- const skeleton = (_this$_sheetSkeletonM = this._sheetSkeletonManagerService.getCurrentParam()) === null || _this$_sheetSkeletonM === void 0 ? void 0 : _this$_sheetSkeletonM.skeleton;
27198
- if (skeleton == null) return;
27199
- const { rowHeaderWidth, columnHeaderHeight } = skeleton;
27200
- const { startX, startY, endX, endY, column } = getCoordByOffset(evt.offsetX, evt.offsetY, this._context.scene, skeleton);
27201
- if (initialType === 0) {
27202
- var _this$_hoverRect2;
27203
- (_this$_hoverRect2 = this._hoverRect) === null || _this$_hoverRect2 === void 0 || _this$_hoverRect2.transformByState({
27204
- width: rowHeaderWidth,
27205
- height: endY - startY,
27206
- left: 0,
27207
- top: startY
27208
- });
27209
- } else {
27210
- var _this$_hoverRect3;
27211
- this._currentColumn = column;
27212
- (_this$_hoverRect3 = this._hoverRect) === null || _this$_hoverRect3 === void 0 || _this$_hoverRect3.transformByState({
27213
- width: endX - startX,
27214
- height: columnHeaderHeight,
27215
- left: startX,
27216
- top: 0
27217
- });
27218
- if (this._hoverMenu == null) return;
27219
- if (endX - startX < columnHeaderHeight * 2) {
27220
- this._hoverMenu.hide();
27221
- return;
27222
- }
27223
- const menuSize = columnHeaderHeight * .8;
27224
- this._hoverMenu.transformByState({
27225
- left: endX - columnHeaderHeight,
27226
- top: columnHeaderHeight / 2 - menuSize / 2
27227
- });
27228
- this._hoverMenu.setShapeProps({ size: menuSize });
27229
- this._hoverMenu.show();
27230
- }
27231
- };
27232
- const pointerEnterHandler = () => {
27233
- var _this$_hoverRect4;
27234
- (_this$_hoverRect4 = this._hoverRect) === null || _this$_hoverRect4 === void 0 || _this$_hoverRect4.show();
27235
- };
27236
- const pointerLeaveHandler = () => {
27237
- var _this$_hoverRect5, _this$_hoverMenu2;
27238
- (_this$_hoverRect5 = this._hoverRect) === null || _this$_hoverRect5 === void 0 || _this$_hoverRect5.hide();
27239
- (_this$_hoverMenu2 = this._hoverMenu) === null || _this$_hoverMenu2 === void 0 || _this$_hoverMenu2.hide();
27369
+ _initSkeleton() {
27370
+ const markDirtySkeleton = () => {
27371
+ var _this$_context$mainCo;
27372
+ this._sheetSkeletonManagerService.reCalculate();
27373
+ (_this$_context$mainCo = this._context.mainComponent) === null || _this$_context$mainCo === void 0 || _this$_context$mainCo.makeDirty();
27240
27374
  };
27241
- this._headerPointerSubs = new rxjs.Subscription();
27242
- const headerPointerMoveSub = eventBindingObject.onPointerMove$.subscribeEvent(pointerMoveHandler);
27243
- const headerPointerEnterSub = eventBindingObject.onPointerEnter$.subscribeEvent(pointerEnterHandler);
27244
- const headerPointerLeaveSub = eventBindingObject.onPointerLeave$.subscribeEvent(pointerLeaveHandler);
27245
- (_this$_headerPointerS2 = this._headerPointerSubs) === null || _this$_headerPointerS2 === void 0 || _this$_headerPointerS2.add(headerPointerMoveSub);
27246
- (_this$_headerPointerS3 = this._headerPointerSubs) === null || _this$_headerPointerS3 === void 0 || _this$_headerPointerS3.add(headerPointerEnterSub);
27247
- (_this$_headerPointerS4 = this._headerPointerSubs) === null || _this$_headerPointerS4 === void 0 || _this$_headerPointerS4.add(headerPointerLeaveSub);
27375
+ this.disposeWithMe((0, rxjs.merge)(this._permissionService.permissionPointUpdate$.pipe((0, rxjs.throttleTime)(300, void 0, { trailing: true })), this._rangeProtectionRuleModel.rangeRuleInitStateChange$, this._rangeProtectionRuleModel.ruleChange$).pipe().subscribe(markDirtySkeleton));
27248
27376
  }
27249
- _initialHoverMenu() {
27250
- if (this._hoverMenu == null) return;
27251
- this._hoverMenu.onPointerEnter$.subscribeEvent(() => {
27252
- if (this._hoverMenu == null) return;
27253
- this._hoverMenu.setProps({
27254
- mode: 1,
27255
- visible: true
27256
- });
27257
- this._context.scene.setCursor(_univerjs_engine_render.CURSOR_TYPE.POINTER);
27258
- });
27259
- this._hoverMenu.onPointerLeave$.subscribeEvent(() => {
27260
- if (this._hoverMenu == null) return;
27261
- this._hoverMenu.setProps({
27262
- mode: 0,
27263
- visible: false
27264
- });
27265
- this._context.scene.resetCursor();
27266
- });
27267
- this._hoverMenu.onPointerDown$.subscribeEvent((evt) => {
27268
- var _this$_selectionManag;
27269
- const currentColumn = this._currentColumn;
27270
- const currentSelectionDatas = (_this$_selectionManag = this._selectionManagerService.getCurrentSelections()) === null || _this$_selectionManag === void 0 ? void 0 : _this$_selectionManag.map((s) => s.range);
27271
- if (!!!(currentSelectionDatas === null || currentSelectionDatas === void 0 ? void 0 : currentSelectionDatas.filter((range) => range.rangeType === _univerjs_core.RANGE_TYPE.COLUMN).find((data) => {
27272
- const { startColumn, endColumn } = data;
27273
- if (currentColumn >= startColumn && currentColumn <= endColumn) return true;
27274
- return false;
27275
- }))) {
27276
- const selection = this._getSelectionOnColumn(currentColumn);
27277
- this._commandService.syncExecuteCommand(_univerjs_sheets.SetSelectionsOperation.id, selection);
27278
- }
27279
- evt.stopPropagation();
27280
- evt.preventDefault();
27281
- this._contextMenuService.triggerContextMenu(evt, _univerjs_ui.ContextMenuPosition.COL_HEADER);
27282
- });
27377
+ };
27378
+ SheetPermissionRenderController = __decorate([
27379
+ __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_sheets.RangeProtectionRuleModel)),
27380
+ __decorateParam(2, (0, _univerjs_core.Inject)(SheetSkeletonManagerService)),
27381
+ __decorateParam(3, _univerjs_core.IPermissionService),
27382
+ __decorateParam(4, _univerjs_core.IConfigService)
27383
+ ], SheetPermissionRenderController);
27384
+ let WorksheetProtectionRenderController = class WorksheetProtectionRenderController extends _univerjs_core.Disposable {
27385
+ constructor(_context, _renderManagerService, _sheetSkeletonManagerService, _worksheetProtectionRuleModel, _configService) {
27386
+ super();
27387
+ this._context = _context;
27388
+ this._renderManagerService = _renderManagerService;
27389
+ this._sheetSkeletonManagerService = _sheetSkeletonManagerService;
27390
+ this._worksheetProtectionRuleModel = _worksheetProtectionRuleModel;
27391
+ this._configService = _configService;
27392
+ _defineProperty(this, "_worksheetProtectionRenderExtension", void 0);
27393
+ const config = this._configService.getConfig(SHEETS_UI_PLUGIN_CONFIG_KEY);
27394
+ const shadowStrategy = convertToShadowStrategy(config === null || config === void 0 ? void 0 : config.protectedRangeShadow);
27395
+ this._worksheetProtectionRenderExtension = new WorksheetProtectionRenderExtension(shadowStrategy);
27396
+ this._initSkeleton();
27397
+ if (shadowStrategy === "none") return;
27398
+ this._initRender();
27399
+ }
27400
+ _initRender() {
27401
+ const renderId = this._context.unitId;
27402
+ const render = renderId && this._renderManagerService.getRenderById(renderId);
27403
+ const spreadsheetRender = render && render.mainComponent;
27404
+ if (spreadsheetRender) {
27405
+ if (!spreadsheetRender.getExtensionByKey("worksheet-protection")) spreadsheetRender.register(this._worksheetProtectionRenderExtension);
27406
+ }
27283
27407
  }
27284
- _getSelectionOnColumn(column) {
27285
- const workbook = this._context.unit;
27286
- const worksheet = workbook.getActiveSheet();
27287
- if (!worksheet) throw new Error("No active worksheet");
27288
- return {
27289
- unitId: workbook.getUnitId(),
27290
- subUnitId: worksheet.getSheetId(),
27291
- selections: [{
27292
- range: {
27293
- startRow: 0,
27294
- startColumn: column,
27295
- endRow: worksheet.getRowCount() - 1,
27296
- endColumn: column,
27297
- rangeType: _univerjs_core.RANGE_TYPE.COLUMN
27298
- },
27299
- primary: {
27300
- startRow: 0,
27301
- startColumn: column,
27302
- endRow: 0,
27303
- endColumn: column,
27304
- actualRow: 0,
27305
- actualColumn: column,
27306
- isMerged: false,
27307
- isMergedMainCell: false
27308
- },
27309
- style: null
27310
- }]
27408
+ _initSkeleton() {
27409
+ const markDirtySkeleton = () => {
27410
+ var _this$_context$mainCo2;
27411
+ this._sheetSkeletonManagerService.reCalculate();
27412
+ (_this$_context$mainCo2 = this._context.mainComponent) === null || _this$_context$mainCo2 === void 0 || _this$_context$mainCo2.makeDirty();
27311
27413
  };
27414
+ this.disposeWithMe((0, rxjs.merge)(this._worksheetProtectionRuleModel.worksheetRuleInitStateChange$).pipe().subscribe(markDirtySkeleton));
27312
27415
  }
27313
27416
  };
27314
- HeaderMenuRenderController = __decorate([
27315
- __decorateParam(1, (0, _univerjs_core.Inject)(SheetSkeletonManagerService)),
27316
- __decorateParam(2, _univerjs_ui.IContextMenuService),
27317
- __decorateParam(3, _univerjs_core.ICommandService),
27318
- __decorateParam(4, (0, _univerjs_core.Inject)(_univerjs_sheets.SheetsSelectionsService))
27319
- ], HeaderMenuRenderController);
27417
+ WorksheetProtectionRenderController = __decorate([
27418
+ __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_engine_render.IRenderManagerService)),
27419
+ __decorateParam(2, (0, _univerjs_core.Inject)(SheetSkeletonManagerService)),
27420
+ __decorateParam(3, (0, _univerjs_core.Inject)(_univerjs_sheets.WorksheetProtectionRuleModel)),
27421
+ __decorateParam(4, (0, _univerjs_core.Inject)(_univerjs_core.IConfigService))
27422
+ ], WorksheetProtectionRenderController);
27320
27423
 
27321
27424
  //#endregion
27322
- //#region src/views/header-unhide-shape.ts
27323
- const UNHIDE_ICON_SIZE = 12;
27324
- const UNHIDE_ARROW_RATIO = .4;
27325
- var HeaderUnhideShape = class extends _univerjs_engine_render.Shape {
27326
- constructor(key, props, onClick) {
27327
- super(key, props);
27328
- _defineProperty(this, "_size", 12);
27329
- _defineProperty(this, "_iconRatio", UNHIDE_ARROW_RATIO);
27330
- _defineProperty(this, "_hovered", true);
27331
- _defineProperty(this, "_hasPrevious", true);
27332
- _defineProperty(this, "_hasNext", true);
27333
- _defineProperty(this, "_unhideType", void 0);
27334
- if (props) this.setShapeProps(props);
27335
- this.onPointerEnter$.subscribeEvent(() => this.setShapeProps({ hovered: true }));
27336
- this.onPointerLeave$.subscribeEvent(() => this.setShapeProps({ hovered: false }));
27337
- this.onPointerDown$.subscribeEvent(() => onClick === null || onClick === void 0 ? void 0 : onClick());
27425
+ //#region src/controllers/render-controllers/clipboard.render-controller.ts
27426
+ let ClipboardRenderController = class ClipboardRenderController extends _univerjs_core.Disposable {
27427
+ constructor(_context, _sheetSkeletonManagerService, _sheetClipboardService, _sheetClipboardController) {
27428
+ super();
27429
+ this._context = _context;
27430
+ this._sheetSkeletonManagerService = _sheetSkeletonManagerService;
27431
+ this._sheetClipboardService = _sheetClipboardService;
27432
+ this._sheetClipboardController = _sheetClipboardController;
27433
+ this._initialize();
27338
27434
  }
27339
- setShapeProps(props) {
27340
- if (props.type !== void 0) this._unhideType = props.type;
27341
- if (props.hovered !== void 0) this._hovered = props.hovered;
27342
- if (props.hasPrevious !== void 0) this._hasPrevious = props.hasPrevious;
27343
- if (props.hasNext !== void 0) this._hasNext = props.hasNext;
27344
- this.transformByState({
27345
- width: this._size * (this._unhideType === 1 ? 2 : 1),
27346
- height: this._size * (this._unhideType === 0 ? 2 : 1)
27347
- });
27435
+ _initialize() {
27436
+ this.disposeWithMe((0, _univerjs_core.toDisposable)(this._sheetSkeletonManagerService.currentSkeleton$.subscribe((skeleton) => {
27437
+ if (!(skeleton === null || skeleton === void 0 ? void 0 : skeleton.unitId)) return;
27438
+ if (!this._sheetClipboardService.getPasteMenuVisible()) return;
27439
+ const pasteOptionsCache = this._sheetClipboardService.getPasteOptionsCache();
27440
+ const menuUnitId = pasteOptionsCache === null || pasteOptionsCache === void 0 ? void 0 : pasteOptionsCache.target.unitId;
27441
+ if (skeleton.unitId === menuUnitId) this._sheetClipboardController.refreshOptionalPaste();
27442
+ })));
27348
27443
  }
27349
- _draw(ctx) {
27350
- if (this._unhideType === 0) this._drawOnRow(ctx);
27351
- else this._drawOnCol(ctx);
27444
+ };
27445
+ ClipboardRenderController = __decorate([
27446
+ __decorateParam(1, (0, _univerjs_core.Inject)(SheetSkeletonManagerService)),
27447
+ __decorateParam(2, ISheetClipboardService),
27448
+ __decorateParam(3, (0, _univerjs_core.Inject)(SheetClipboardController))
27449
+ ], ClipboardRenderController);
27450
+
27451
+ //#endregion
27452
+ //#region src/controllers/render-controllers/format-painter.render-controller.ts
27453
+ let FormatPainterRenderController = class FormatPainterRenderController extends _univerjs_core.Disposable {
27454
+ constructor(_context, _formatPainterService, _selectionRenderService, _commandService) {
27455
+ super();
27456
+ this._context = _context;
27457
+ this._formatPainterService = _formatPainterService;
27458
+ this._selectionRenderService = _selectionRenderService;
27459
+ this._commandService = _commandService;
27460
+ this._initialize();
27352
27461
  }
27353
- _drawOnRow(ctx) {
27354
- if (this._hovered) if (!this._hasNext || !this._hasPrevious) _univerjs_engine_render.Rect.drawWith(ctx, {
27355
- width: this._size,
27356
- height: this._size,
27357
- stroke: HEADER_MENU_SHAPE_TRIANGLE_FILL,
27358
- fill: HEADER_MENU_BACKGROUND_COLOR
27359
- });
27360
- else _univerjs_engine_render.Rect.drawWith(ctx, {
27361
- width: this._size,
27362
- height: 2 * this._size,
27363
- stroke: HEADER_MENU_SHAPE_TRIANGLE_FILL,
27364
- fill: HEADER_MENU_BACKGROUND_COLOR
27365
- });
27366
- const iconSize = this._size * .5 * this._iconRatio;
27367
- const sixtyDegree = Math.PI / 3;
27368
- const top = iconSize * Math.cos(sixtyDegree);
27369
- const left = iconSize * Math.sin(sixtyDegree);
27370
- if (this._hasPrevious) _univerjs_engine_render.RegularPolygon.drawWith(ctx, {
27371
- pointsGroup: [[
27372
- {
27373
- x: this._size / 2,
27374
- y: this._size / 2 - left
27375
- },
27376
- {
27377
- x: this._size / 2 - left,
27378
- y: this._size / 2 + top
27379
- },
27380
- {
27381
- x: this._size / 2 + left,
27382
- y: this._size / 2 + top
27383
- }
27384
- ]],
27385
- fill: HEADER_MENU_SHAPE_TRIANGLE_FILL
27386
- });
27387
- if (this._hasNext) {
27388
- const offset = this._hasPrevious ? 3 : 1;
27389
- _univerjs_engine_render.RegularPolygon.drawWith(ctx, {
27390
- pointsGroup: [[
27391
- {
27392
- x: this._size / 2,
27393
- y: this._size * offset / 2 + left
27394
- },
27395
- {
27396
- x: this._size / 2 - left,
27397
- y: this._size * offset / 2 - top
27398
- },
27399
- {
27400
- x: this._size / 2 + left,
27401
- y: this._size * offset / 2 - top
27402
- }
27403
- ]],
27404
- fill: HEADER_MENU_SHAPE_TRIANGLE_FILL
27405
- });
27406
- }
27462
+ _initialize() {
27463
+ this._bindFormatPainterStatus();
27464
+ this._commandExecutedListener();
27407
27465
  }
27408
- /**
27409
- *
27410
- * @param ctx
27411
- */
27412
- _drawOnCol(ctx) {
27413
- if (this._hovered) if (!this._hasNext || !this._hasPrevious) _univerjs_engine_render.Rect.drawWith(ctx, {
27414
- width: this._size,
27415
- height: this._size,
27416
- stroke: HEADER_MENU_SHAPE_TRIANGLE_FILL,
27417
- fill: HEADER_MENU_BACKGROUND_COLOR
27418
- });
27419
- else _univerjs_engine_render.Rect.drawWith(ctx, {
27420
- width: 2 * this._size,
27421
- height: this._size,
27422
- stroke: HEADER_MENU_SHAPE_TRIANGLE_FILL,
27423
- fill: HEADER_MENU_BACKGROUND_COLOR
27424
- });
27425
- const iconSize = this._size * .5 * this._iconRatio;
27426
- const sixtyDegree = Math.PI / 3;
27427
- const top = iconSize * Math.cos(sixtyDegree);
27428
- const left = iconSize * Math.sin(sixtyDegree);
27429
- if (this._hasPrevious) _univerjs_engine_render.RegularPolygon.drawWith(ctx, {
27430
- pointsGroup: [[
27431
- {
27432
- x: -top + this._size / 2,
27433
- y: this._size / 2
27434
- },
27435
- {
27436
- x: this._size / 2 + left,
27437
- y: this._size / 2 - left
27438
- },
27439
- {
27440
- x: this._size / 2 + left,
27441
- y: this._size / 2 + left
27442
- }
27443
- ]],
27444
- fill: HEADER_MENU_SHAPE_TRIANGLE_FILL
27445
- });
27446
- if (this._hasNext) {
27447
- const offset = this._hasPrevious ? 3 : 1;
27448
- _univerjs_engine_render.RegularPolygon.drawWith(ctx, {
27449
- pointsGroup: [[
27450
- {
27451
- x: top + this._size * offset / 2,
27452
- y: this._size / 2
27453
- },
27454
- {
27455
- x: -left + this._size * offset / 2,
27456
- y: this._size / 2 - left
27457
- },
27458
- {
27459
- x: -left + this._size * offset / 2,
27460
- y: this._size / 2 + left
27466
+ _commandExecutedListener() {
27467
+ this.disposeWithMe(this._selectionRenderService.selectionMoveEnd$.subscribe((selections) => {
27468
+ if (this._formatPainterService.getStatus() !== 0) {
27469
+ var _this$_context$unit$g;
27470
+ const { rangeWithCoord } = selections[selections.length - 1];
27471
+ this._commandService.executeCommand(ApplyFormatPainterCommand.id, {
27472
+ unitId: this._context.unitId,
27473
+ subUnitId: ((_this$_context$unit$g = this._context.unit.getActiveSheet()) === null || _this$_context$unit$g === void 0 ? void 0 : _this$_context$unit$g.getSheetId()) || "",
27474
+ range: {
27475
+ startRow: rangeWithCoord.startRow,
27476
+ startColumn: rangeWithCoord.startColumn,
27477
+ endRow: rangeWithCoord.endRow,
27478
+ endColumn: rangeWithCoord.endColumn
27461
27479
  }
27462
- ]],
27463
- fill: HEADER_MENU_SHAPE_TRIANGLE_FILL
27464
- });
27465
- }
27480
+ });
27481
+ if (this._formatPainterService.getStatus() === 1) this._commandService.executeCommand(SetOnceFormatPainterCommand.id);
27482
+ }
27483
+ }));
27484
+ }
27485
+ _bindFormatPainterStatus() {
27486
+ this.disposeWithMe((0, _univerjs_core.toDisposable)(this._formatPainterService.status$.subscribe((status) => {
27487
+ const scene = this._context.scene;
27488
+ if (!scene) return;
27489
+ if (status !== 0) scene.setDefaultCursor(_univerjs_engine_render.CURSOR_TYPE.CELL);
27490
+ else scene.setDefaultCursor(_univerjs_engine_render.CURSOR_TYPE.DEFAULT);
27491
+ })));
27466
27492
  }
27467
27493
  };
27494
+ FormatPainterRenderController = __decorate([
27495
+ __decorateParam(1, IFormatPainterService),
27496
+ __decorateParam(2, ISheetSelectionRenderService),
27497
+ __decorateParam(3, _univerjs_core.ICommandService)
27498
+ ], FormatPainterRenderController);
27468
27499
 
27469
27500
  //#endregion
27470
- //#region src/controllers/render-controllers/header-unhide.render-controller.ts
27471
- const HEADER_UNHIDE_CONTROLLER_SHAPE = "__SpreadsheetHeaderUnhideSHAPEControllerShape__";
27472
- let HeaderUnhideRenderController = class HeaderUnhideRenderController extends _univerjs_core.RxDisposable {
27473
- get _workbook() {
27474
- return this._context.unit;
27475
- }
27476
- constructor(_context, _sheetSkeletonManagerService, _commandService) {
27501
+ //#region src/controllers/render-controllers/header-menu.render-controller.ts
27502
+ const HEADER_MENU_CONTROLLER_SHAPE = "__SpreadsheetHeaderMenuSHAPEControllerShape__";
27503
+ const HEADER_MENU_CONTROLLER_MENU = "__SpreadsheetHeaderMenuMAINControllerShape__";
27504
+ const HEADER_MENU_CONTROLLER_SHAPE_COLOR = "rgba(0, 0, 0, 0.1)";
27505
+ let HeaderMenuRenderController = class HeaderMenuRenderController extends _univerjs_core.Disposable {
27506
+ constructor(_context, _sheetSkeletonManagerService, _contextMenuService, _commandService, _selectionManagerService) {
27477
27507
  super();
27478
27508
  this._context = _context;
27479
27509
  this._sheetSkeletonManagerService = _sheetSkeletonManagerService;
27510
+ this._contextMenuService = _contextMenuService;
27480
27511
  this._commandService = _commandService;
27481
- _defineProperty(this, "_shapes", {
27482
- cols: [],
27483
- rows: []
27484
- });
27485
- this._init();
27512
+ this._selectionManagerService = _selectionManagerService;
27513
+ _defineProperty(this, "_hoverRect", void 0);
27514
+ _defineProperty(this, "_hoverMenu", void 0);
27515
+ _defineProperty(this, "_currentColumn", Number.POSITIVE_INFINITY);
27516
+ _defineProperty(this, "_headerPointerSubs", void 0);
27517
+ _defineProperty(this, "_colHeaderPointerSubs", void 0);
27518
+ this._initialize();
27486
27519
  }
27487
27520
  dispose() {
27488
- super.dispose();
27489
- this._clearShapes();
27521
+ var _this$_hoverRect, _this$_hoverMenu, _this$_headerPointerS;
27522
+ (_this$_hoverRect = this._hoverRect) === null || _this$_hoverRect === void 0 || _this$_hoverRect.dispose();
27523
+ (_this$_hoverMenu = this._hoverMenu) === null || _this$_hoverMenu === void 0 || _this$_hoverMenu.dispose();
27524
+ (_this$_headerPointerS = this._headerPointerSubs) === null || _this$_headerPointerS === void 0 || _this$_headerPointerS.unsubscribe();
27525
+ this._headerPointerSubs = null;
27490
27526
  }
27491
- _init() {
27492
- let activeSheetId = "";
27493
- this._context.unit.activeSheet$.pipe((0, rxjs.takeUntil)(this.dispose$)).subscribe((worksheet) => {
27494
- this._clearShapes();
27495
- if (!worksheet) {
27496
- activeSheetId = "";
27497
- return;
27498
- }
27499
- activeSheetId = worksheet.getSheetId();
27500
- this._update(this._workbook, worksheet);
27527
+ _initialize() {
27528
+ const scene = this._context.scene;
27529
+ this._hoverRect = new _univerjs_engine_render.Rect(HEADER_MENU_CONTROLLER_SHAPE, {
27530
+ fill: HEADER_MENU_CONTROLLER_SHAPE_COLOR,
27531
+ evented: false
27501
27532
  });
27502
- this.disposeWithMe(this._sheetSkeletonManagerService.currentSkeleton$.subscribe((param) => {
27503
- if (param) {
27504
- const { unitId, sheetId } = param;
27505
- if (unitId === this._workbook.getUnitId() && sheetId === activeSheetId) {
27506
- const worksheet = this._workbook.getSheetBySheetId(sheetId);
27507
- if (worksheet) this._update(this._workbook, worksheet);
27533
+ this._hoverMenu = new HeaderMenuShape(HEADER_MENU_CONTROLLER_MENU, {
27534
+ zIndex: 100,
27535
+ visible: false
27536
+ });
27537
+ scene.addObjects([this._hoverRect, this._hoverMenu], 10);
27538
+ this._initialHover(0);
27539
+ this._initialHover(1);
27540
+ this._initialHoverMenu();
27541
+ }
27542
+ _initialHover(initialType = 0) {
27543
+ var _this$_headerPointerS2, _this$_headerPointerS3, _this$_headerPointerS4;
27544
+ const spreadsheetColumnHeader = this._context.components.get("__SpreadsheetColumnHeader__");
27545
+ const spreadsheetRowHeader = this._context.components.get("__SpreadsheetRowHeader__");
27546
+ const eventBindingObject = initialType === 0 ? spreadsheetRowHeader : spreadsheetColumnHeader;
27547
+ const pointerMoveHandler = (evt) => {
27548
+ var _this$_sheetSkeletonM;
27549
+ const skeleton = (_this$_sheetSkeletonM = this._sheetSkeletonManagerService.getCurrentParam()) === null || _this$_sheetSkeletonM === void 0 ? void 0 : _this$_sheetSkeletonM.skeleton;
27550
+ if (skeleton == null) return;
27551
+ const { rowBaseWidth, rowGutterWidth, columnBaseHeight, columnGutterHeight } = getHeaderBaseLayout(skeleton);
27552
+ const { startX, startY, endX, endY, column } = getCoordByOffset(evt.offsetX, evt.offsetY, this._context.scene, skeleton);
27553
+ if (initialType === 0) {
27554
+ var _this$_hoverRect2;
27555
+ (_this$_hoverRect2 = this._hoverRect) === null || _this$_hoverRect2 === void 0 || _this$_hoverRect2.transformByState({
27556
+ width: rowBaseWidth,
27557
+ height: endY - startY,
27558
+ left: rowGutterWidth,
27559
+ top: startY
27560
+ });
27561
+ } else {
27562
+ var _this$_hoverRect3;
27563
+ this._currentColumn = column;
27564
+ (_this$_hoverRect3 = this._hoverRect) === null || _this$_hoverRect3 === void 0 || _this$_hoverRect3.transformByState({
27565
+ width: endX - startX,
27566
+ height: columnBaseHeight,
27567
+ left: startX,
27568
+ top: columnGutterHeight
27569
+ });
27570
+ if (this._hoverMenu == null) return;
27571
+ if (endX - startX < columnBaseHeight * 2) {
27572
+ this._hoverMenu.hide();
27573
+ return;
27508
27574
  }
27575
+ const menuSize = columnBaseHeight * .8;
27576
+ this._hoverMenu.transformByState({
27577
+ left: endX - columnBaseHeight,
27578
+ top: columnGutterHeight + columnBaseHeight / 2 - menuSize / 2
27579
+ });
27580
+ this._hoverMenu.setShapeProps({ size: menuSize });
27581
+ this._hoverMenu.show();
27509
27582
  }
27510
- }));
27583
+ };
27584
+ const pointerEnterHandler = () => {
27585
+ var _this$_hoverRect4;
27586
+ (_this$_hoverRect4 = this._hoverRect) === null || _this$_hoverRect4 === void 0 || _this$_hoverRect4.show();
27587
+ };
27588
+ const pointerLeaveHandler = () => {
27589
+ var _this$_hoverRect5, _this$_hoverMenu2;
27590
+ (_this$_hoverRect5 = this._hoverRect) === null || _this$_hoverRect5 === void 0 || _this$_hoverRect5.hide();
27591
+ (_this$_hoverMenu2 = this._hoverMenu) === null || _this$_hoverMenu2 === void 0 || _this$_hoverMenu2.hide();
27592
+ };
27593
+ this._headerPointerSubs = new rxjs.Subscription();
27594
+ const headerPointerMoveSub = eventBindingObject.onPointerMove$.subscribeEvent(pointerMoveHandler);
27595
+ const headerPointerEnterSub = eventBindingObject.onPointerEnter$.subscribeEvent(pointerEnterHandler);
27596
+ const headerPointerLeaveSub = eventBindingObject.onPointerLeave$.subscribeEvent(pointerLeaveHandler);
27597
+ (_this$_headerPointerS2 = this._headerPointerSubs) === null || _this$_headerPointerS2 === void 0 || _this$_headerPointerS2.add(headerPointerMoveSub);
27598
+ (_this$_headerPointerS3 = this._headerPointerSubs) === null || _this$_headerPointerS3 === void 0 || _this$_headerPointerS3.add(headerPointerEnterSub);
27599
+ (_this$_headerPointerS4 = this._headerPointerSubs) === null || _this$_headerPointerS4 === void 0 || _this$_headerPointerS4.add(headerPointerLeaveSub);
27511
27600
  }
27512
- _update(workbook, worksheet) {
27513
- var _this$_sheetSkeletonM;
27514
- const skeleton = (_this$_sheetSkeletonM = this._sheetSkeletonManagerService.getSkeletonParam(worksheet.getSheetId())) === null || _this$_sheetSkeletonM === void 0 ? void 0 : _this$_sheetSkeletonM.skeleton;
27515
- if (!skeleton) return;
27516
- const hiddenRowRanges = worksheet.getHiddenRows();
27517
- const hiddenColRanges = worksheet.getHiddenCols();
27518
- const { scene } = this._getSheetObject();
27519
- const rowCount = worksheet.getRowCount();
27520
- const rowShapes = hiddenRowRanges.map((range) => {
27521
- const { startRow, endRow } = range;
27522
- const position = getCoordByCell(startRow, 0, scene, skeleton);
27523
- const hasPrevious = startRow !== 0;
27524
- const hasNext = endRow !== rowCount - 1;
27525
- return new HeaderUnhideShape(HEADER_UNHIDE_CONTROLLER_SHAPE, {
27526
- type: 0,
27527
- hovered: false,
27528
- hasPrevious,
27529
- hasNext,
27530
- top: position.startY - (hasPrevious ? 12 : 0),
27531
- left: position.startX - 12
27532
- }, () => this._commandService.executeCommand(_univerjs_sheets.SetSpecificRowsVisibleCommand.id, {
27533
- unitId: workbook.getUnitId(),
27534
- subUnitId: worksheet.getSheetId(),
27535
- ranges: [range]
27536
- }));
27601
+ _initialHoverMenu() {
27602
+ if (this._hoverMenu == null) return;
27603
+ this._hoverMenu.onPointerEnter$.subscribeEvent(() => {
27604
+ if (this._hoverMenu == null) return;
27605
+ this._hoverMenu.setProps({
27606
+ mode: 1,
27607
+ visible: true
27608
+ });
27609
+ this._context.scene.setCursor(_univerjs_engine_render.CURSOR_TYPE.POINTER);
27537
27610
  });
27538
- const colCount = worksheet.getColumnCount();
27539
- const colShapes = hiddenColRanges.map((range) => {
27540
- const { startColumn, endColumn } = range;
27541
- const position = getCoordByCell(0, startColumn, scene, skeleton);
27542
- const hasPrevious = startColumn !== 0;
27543
- const hasNext = endColumn !== colCount - 1;
27544
- return new HeaderUnhideShape(HEADER_UNHIDE_CONTROLLER_SHAPE, {
27545
- type: 1,
27546
- hovered: false,
27547
- hasPrevious,
27548
- hasNext,
27549
- top: 20 - 12,
27550
- left: position.startX - (hasPrevious ? 12 : 0)
27551
- }, () => this._commandService.executeCommand(_univerjs_sheets.SetSpecificColsVisibleCommand.id, {
27552
- unitId: workbook.getUnitId(),
27553
- subUnitId: worksheet.getSheetId(),
27554
- ranges: [range]
27555
- }));
27611
+ this._hoverMenu.onPointerLeave$.subscribeEvent(() => {
27612
+ if (this._hoverMenu == null) return;
27613
+ this._hoverMenu.setProps({
27614
+ mode: 0,
27615
+ visible: false
27616
+ });
27617
+ this._context.scene.resetCursor();
27618
+ });
27619
+ this._hoverMenu.onPointerDown$.subscribeEvent((evt) => {
27620
+ var _this$_selectionManag;
27621
+ const currentColumn = this._currentColumn;
27622
+ const currentSelectionDatas = (_this$_selectionManag = this._selectionManagerService.getCurrentSelections()) === null || _this$_selectionManag === void 0 ? void 0 : _this$_selectionManag.map((s) => s.range);
27623
+ if (!!!(currentSelectionDatas === null || currentSelectionDatas === void 0 ? void 0 : currentSelectionDatas.filter((range) => range.rangeType === _univerjs_core.RANGE_TYPE.COLUMN).find((data) => {
27624
+ const { startColumn, endColumn } = data;
27625
+ if (currentColumn >= startColumn && currentColumn <= endColumn) return true;
27626
+ return false;
27627
+ }))) {
27628
+ const selection = this._getSelectionOnColumn(currentColumn);
27629
+ this._commandService.syncExecuteCommand(_univerjs_sheets.SetSelectionsOperation.id, selection);
27630
+ }
27631
+ evt.stopPropagation();
27632
+ evt.preventDefault();
27633
+ this._contextMenuService.triggerContextMenu(evt, _univerjs_ui.ContextMenuPosition.COL_HEADER);
27556
27634
  });
27557
- scene.addObjects(colShapes, 12);
27558
- scene.addObjects(rowShapes, 12);
27559
- this._clearShapes();
27560
- this._shapes = {
27561
- cols: colShapes,
27562
- rows: rowShapes
27563
- };
27564
27635
  }
27565
- _clearShapes() {
27566
- this._shapes.cols.forEach((shape) => shape.dispose());
27567
- this._shapes.rows.forEach((shape) => shape.dispose());
27568
- this._shapes = {
27569
- cols: [],
27570
- rows: []
27636
+ _getSelectionOnColumn(column) {
27637
+ const workbook = this._context.unit;
27638
+ const worksheet = workbook.getActiveSheet();
27639
+ if (!worksheet) throw new Error("No active worksheet");
27640
+ return {
27641
+ unitId: workbook.getUnitId(),
27642
+ subUnitId: worksheet.getSheetId(),
27643
+ selections: [{
27644
+ range: {
27645
+ startRow: 0,
27646
+ startColumn: column,
27647
+ endRow: worksheet.getRowCount() - 1,
27648
+ endColumn: column,
27649
+ rangeType: _univerjs_core.RANGE_TYPE.COLUMN
27650
+ },
27651
+ primary: {
27652
+ startRow: 0,
27653
+ startColumn: column,
27654
+ endRow: 0,
27655
+ endColumn: column,
27656
+ actualRow: 0,
27657
+ actualColumn: column,
27658
+ isMerged: false,
27659
+ isMergedMainCell: false
27660
+ },
27661
+ style: null
27662
+ }]
27571
27663
  };
27572
27664
  }
27573
- _getSheetObject() {
27574
- return getSheetObject(this._workbook, this._context);
27575
- }
27576
27665
  };
27577
- HeaderUnhideRenderController = __decorate([__decorateParam(1, (0, _univerjs_core.Inject)(SheetSkeletonManagerService)), __decorateParam(2, _univerjs_core.ICommandService)], HeaderUnhideRenderController);
27666
+ HeaderMenuRenderController = __decorate([
27667
+ __decorateParam(1, (0, _univerjs_core.Inject)(SheetSkeletonManagerService)),
27668
+ __decorateParam(2, _univerjs_ui.IContextMenuService),
27669
+ __decorateParam(3, _univerjs_core.ICommandService),
27670
+ __decorateParam(4, (0, _univerjs_core.Inject)(_univerjs_sheets.SheetsSelectionsService))
27671
+ ], HeaderMenuRenderController);
27672
+ function getHeaderBaseLayout(skeleton) {
27673
+ var _skeleton$worksheet$g, _skeleton$worksheet, _config$rowHeader, _config$columnHeader;
27674
+ const config = (_skeleton$worksheet$g = (_skeleton$worksheet = skeleton.worksheet).getConfig) === null || _skeleton$worksheet$g === void 0 ? void 0 : _skeleton$worksheet$g.call(_skeleton$worksheet);
27675
+ const configuredRowWidth = config === null || config === void 0 || (_config$rowHeader = config.rowHeader) === null || _config$rowHeader === void 0 ? void 0 : _config$rowHeader.width;
27676
+ const configuredColumnHeight = config === null || config === void 0 || (_config$columnHeader = config.columnHeader) === null || _config$columnHeader === void 0 ? void 0 : _config$columnHeader.height;
27677
+ const rowBaseWidth = typeof configuredRowWidth === "number" && configuredRowWidth > 0 ? Math.min(configuredRowWidth, skeleton.rowHeaderWidth) : skeleton.rowHeaderWidth;
27678
+ const columnBaseHeight = typeof configuredColumnHeight === "number" && configuredColumnHeight > 0 ? Math.min(configuredColumnHeight, skeleton.columnHeaderHeight) : skeleton.columnHeaderHeight;
27679
+ return {
27680
+ rowBaseWidth,
27681
+ rowGutterWidth: Math.max(0, skeleton.rowHeaderWidthAndMarginLeft - rowBaseWidth),
27682
+ columnBaseHeight,
27683
+ columnGutterHeight: Math.max(0, skeleton.columnHeaderHeightAndMarginTop - columnBaseHeight)
27684
+ };
27685
+ }
27578
27686
 
27579
27687
  //#endregion
27580
27688
  //#region src/consts/mobile-context.ts
@@ -28876,12 +28984,12 @@ let SheetSkeletonRenderController = class SheetSkeletonRenderController extends
28876
28984
  this._context = _context;
28877
28985
  this._sheetSkeletonManagerService = _sheetSkeletonManagerService;
28878
28986
  this._renderManagerService = _renderManagerService;
28879
- this._sheetSkeletonManagerService.currentSkeleton$.subscribe((param) => {
28987
+ this.disposeWithMe(this._sheetSkeletonManagerService.currentSkeleton$.subscribe((param) => {
28880
28988
  this._updateSceneSize(param);
28881
- });
28989
+ }));
28882
28990
  }
28883
28991
  _updateSceneSize(param) {
28884
- var _this$_renderManagerS;
28992
+ var _this$_renderManagerS, _scene$getViewport, _scene$getViewport2, _scene$getViewport3, _scene$getViewport4, _scene$getViewport5;
28885
28993
  if (param == null) return;
28886
28994
  const { unitId } = this._context;
28887
28995
  const { skeleton } = param;
@@ -28894,6 +29002,30 @@ let SheetSkeletonRenderController = class SheetSkeletonRenderController extends
28894
29002
  height: columnHeaderHeightAndMarginTop + rowTotalHeight
28895
29003
  });
28896
29004
  scene.getMainViewport().setMargin(rowHeaderWidthAndMarginLeft, columnHeaderHeightAndMarginTop);
29005
+ scene.getMainViewport().resizeWhenFreezeChange({
29006
+ left: rowHeaderWidthAndMarginLeft,
29007
+ top: columnHeaderHeightAndMarginTop
29008
+ });
29009
+ (_scene$getViewport = scene.getViewport(_univerjs_engine_render.SHEET_VIEWPORT_KEY.VIEW_COLUMN_LEFT)) === null || _scene$getViewport === void 0 || _scene$getViewport.resizeWhenFreezeChange({
29010
+ left: rowHeaderWidthAndMarginLeft,
29011
+ height: columnHeaderHeightAndMarginTop
29012
+ });
29013
+ (_scene$getViewport2 = scene.getViewport(_univerjs_engine_render.SHEET_VIEWPORT_KEY.VIEW_COLUMN_RIGHT)) === null || _scene$getViewport2 === void 0 || _scene$getViewport2.resizeWhenFreezeChange({
29014
+ left: rowHeaderWidthAndMarginLeft,
29015
+ height: columnHeaderHeightAndMarginTop
29016
+ });
29017
+ (_scene$getViewport3 = scene.getViewport(_univerjs_engine_render.SHEET_VIEWPORT_KEY.VIEW_ROW_BOTTOM)) === null || _scene$getViewport3 === void 0 || _scene$getViewport3.resizeWhenFreezeChange({
29018
+ width: rowHeaderWidthAndMarginLeft,
29019
+ top: columnHeaderHeightAndMarginTop
29020
+ });
29021
+ (_scene$getViewport4 = scene.getViewport(_univerjs_engine_render.SHEET_VIEWPORT_KEY.VIEW_ROW_TOP)) === null || _scene$getViewport4 === void 0 || _scene$getViewport4.resizeWhenFreezeChange({
29022
+ width: rowHeaderWidthAndMarginLeft,
29023
+ top: columnHeaderHeightAndMarginTop
29024
+ });
29025
+ (_scene$getViewport5 = scene.getViewport(_univerjs_engine_render.SHEET_VIEWPORT_KEY.VIEW_LEFT_TOP)) === null || _scene$getViewport5 === void 0 || _scene$getViewport5.resizeWhenFreezeChange({
29026
+ width: rowHeaderWidthAndMarginLeft,
29027
+ height: columnHeaderHeightAndMarginTop
29028
+ });
28897
29029
  }
28898
29030
  };
28899
29031
  SheetSkeletonRenderController = __decorate([__decorateParam(1, (0, _univerjs_core.Inject)(SheetSkeletonManagerService)), __decorateParam(2, _univerjs_engine_render.IRenderManagerService)], SheetSkeletonRenderController);
@@ -29727,16 +29859,18 @@ let MobileSheetsSelectionRenderService = class MobileSheetsSelectionRenderServic
29727
29859
  */
29728
29860
  newSelectionControl(scene, skeleton, selection) {
29729
29861
  const selectionControls = this.getSelectionControls();
29730
- const { rowHeaderWidth, columnHeaderHeight } = skeleton;
29862
+ const { rowHeaderWidth, rowHeaderWidthAndMarginLeft, columnHeaderHeight, columnHeaderHeightAndMarginTop } = skeleton;
29731
29863
  const rangeType = selection.range.rangeType;
29732
29864
  const control = new MobileSelectionControl(scene, selectionControls.length, this._themeService, {
29733
29865
  highlightHeader: this._highlightHeader,
29734
29866
  rowHeaderWidth,
29735
29867
  columnHeaderHeight,
29868
+ rowHeaderOffsetX: Math.max(0, rowHeaderWidthAndMarginLeft - rowHeaderWidth),
29869
+ columnHeaderOffsetY: Math.max(0, columnHeaderHeightAndMarginTop - columnHeaderHeight),
29736
29870
  rangeType
29737
29871
  });
29738
29872
  const selectionWithCoord = (0, _univerjs_sheets.attachSelectionWithCoord)(selection, skeleton);
29739
- control.updateRangeBySelectionWithCoord(selectionWithCoord);
29873
+ control.updateRangeBySelectionWithCoord(selectionWithCoord, skeleton);
29740
29874
  this._selectionControls.push(control);
29741
29875
  const { expandingModeForTopLeft, expandingModeForBottomRight } = (() => {
29742
29876
  switch (rangeType) {
@@ -30012,6 +30146,7 @@ let UniverSheetsMobileUIPlugin = class UniverSheetsMobileUIPlugin extends _unive
30012
30146
  [IStatusBarService, { useClass: StatusBarService }],
30013
30147
  [IMarkSelectionService, { useClass: MarkSelectionService }],
30014
30148
  [HoverManagerService],
30149
+ [HeaderUnhideRangeService],
30015
30150
  [DragManagerService],
30016
30151
  [SheetCanvasPopManagerService],
30017
30152
  [CellPopupManagerService],
@@ -30607,6 +30742,7 @@ let UniverSheetsUIPlugin = class UniverSheetsUIPlugin extends _univerjs_core.Plu
30607
30742
  [IStatusBarService, { useClass: StatusBarService }],
30608
30743
  [IMarkSelectionService, { useClass: MarkSelectionService }],
30609
30744
  [HoverManagerService],
30745
+ [HeaderUnhideRangeService],
30610
30746
  [DragManagerService],
30611
30747
  [SheetCanvasPopManagerService],
30612
30748
  [CellPopupManagerService],
@@ -30821,6 +30957,7 @@ Object.defineProperty(exports, 'FormulaEditorController', {
30821
30957
  return FormulaEditorController;
30822
30958
  }
30823
30959
  });
30960
+ exports.HEADER_UNHIDE_RANGE_VISIBLE_CHECK = HEADER_UNHIDE_RANGE_VISIBLE_CHECK;
30824
30961
  Object.defineProperty(exports, 'HeaderFreezeRenderController', {
30825
30962
  enumerable: true,
30826
30963
  get: function () {
@@ -30839,6 +30976,14 @@ Object.defineProperty(exports, 'HeaderResizeRenderController', {
30839
30976
  return HeaderResizeRenderController;
30840
30977
  }
30841
30978
  });
30979
+ exports.HeaderUnhideRangeAxis = HeaderUnhideRangeAxis;
30980
+ exports.HeaderUnhideRangeService = HeaderUnhideRangeService;
30981
+ Object.defineProperty(exports, 'HeaderUnhideRenderController', {
30982
+ enumerable: true,
30983
+ get: function () {
30984
+ return HeaderUnhideRenderController;
30985
+ }
30986
+ });
30842
30987
  exports.HideColConfirmCommand = HideColConfirmCommand;
30843
30988
  exports.HideRowConfirmCommand = HideRowConfirmCommand;
30844
30989
  Object.defineProperty(exports, 'HoverManagerService', {