@univerjs/sheets-drawing 1.0.4 → 1.2.0

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/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { CopySheetCommand, DeleteRangeMoveLeftCommand, DeleteRangeMoveUpCommand, DeltaColumnWidthCommand, DeltaRowHeightCommand, InsertColCommand, InsertRangeMoveDownCommand, InsertRangeMoveRightCommand, InsertRowCommand, MoveColsCommand, MoveRangeCommand, MoveRowsCommand, RemoveColCommand, RemoveRowCommand, RemoveSheetCommand, SetColHiddenCommand, SetColHiddenMutation, SetColVisibleMutation, SetColWidthCommand, SetRowHeightCommand, SetRowHiddenCommand, SetRowHiddenMutation, SetRowVisibleMutation, SetSpecificColsVisibleCommand, SetSpecificRowsVisibleCommand, SetWorksheetColWidthMutation, SetWorksheetRowAutoHeightMutation, SetWorksheetRowHeightMutation, SetWorksheetRowIsAutoHeightMutation, SheetInterceptorService, SheetSkeletonService, UniverSheetsPlugin, attachRangeWithCoord, convertPositionCellToSheetOverGrid, convertPositionSheetOverGridToAbsolute, getSheetCommandTarget } from "@univerjs/sheets";
2
- import { ArrangeTypeEnum, CommandType, DependentOn, Disposable, DrawingTypeEnum, ICommandService, IConfigService, IResourceManagerService, IUndoRedoService, IUniverInstanceService, Inject, Injector, Plugin, Rectangle, UniverInstanceType, createIdentifier, merge, sequenceExecute, toDisposable } from "@univerjs/core";
2
+ import { ArrangeTypeEnum, CommandType, DependentOn, Disposable, DrawingTypeEnum, ICommandService, IConfigService, ILogService, IResourceManagerService, IUndoRedoService, IUniverInstanceService, Inject, Injector, Plugin, Rectangle, UniverInstanceType, createIdentifier, merge, sequenceExecute, toDisposable } from "@univerjs/core";
3
3
  import { IDrawingManagerService, UnitDrawingService, UniverDrawingPlugin, getOrCreateDrawingCopyPlan, resolveDrawingRotateEnabled } from "@univerjs/drawing";
4
4
  import { IRenderManagerService } from "@univerjs/engine-render";
5
5
 
@@ -36,8 +36,14 @@ function transformToDrawingPosition(transform, skeleton) {
36
36
  angle,
37
37
  skewX,
38
38
  skewY,
39
- from: skeleton.getCellIndexAndOffsetByPosition(left, top),
40
- to: skeleton.getCellIndexAndOffsetByPosition(left + width, top + height)
39
+ from: skeleton.getCellIndexAndOffsetByPosition(left, top, 1, 1, {
40
+ x: 0,
41
+ y: 0
42
+ }),
43
+ to: skeleton.getCellIndexAndOffsetByPosition(left + width, top + height, 1, 1, {
44
+ x: 0,
45
+ y: 0
46
+ })
41
47
  };
42
48
  }
43
49
  /**
@@ -339,6 +345,12 @@ const SetDrawingArrangeCommand = {
339
345
 
340
346
  //#endregion
341
347
  //#region src/services/sheet-drawing-placement.ts
348
+ const PLACEMENT_ERROR = {
349
+ CELL_INVALID: "SHEET_DRAWING_PLACEMENT_CELL_INVALID",
350
+ EXTENT_INVALID: "SHEET_DRAWING_PLACEMENT_EXTENT_INVALID",
351
+ KIND_INVALID: "SHEET_DRAWING_PLACEMENT_KIND_INVALID",
352
+ POSITION_INVALID: "SHEET_DRAWING_PLACEMENT_POSITION_INVALID"
353
+ };
342
354
  function getSheetDrawingPlacement(drawing) {
343
355
  var _drawing$transform5, _drawing$transform6;
344
356
  const anchorType = drawing.anchorType ?? "0";
@@ -365,7 +377,57 @@ function getSheetDrawingPlacement(drawing) {
365
377
  };
366
378
  }
367
379
  function applySheetDrawingPlacement(drawing, input, skeleton) {
368
- const placement = normalizeSheetDrawingPlacement(input, skeleton);
380
+ return resolveSheetDrawingPlacement(drawing, normalizePlacement(input, skeleton, requiresDrawingArea(drawing)), skeleton);
381
+ }
382
+ /** Refresh layout-derived geometry without changing the drawing's anchor semantics. */
383
+ function refreshSheetDrawingPlacement(drawing, skeleton) {
384
+ const result = tryRefreshSheetDrawingPlacement(drawing, skeleton);
385
+ if (!result.ok) throw createPlacementError(result);
386
+ return result.drawing;
387
+ }
388
+ /** Validate persisted markers before any caller reads them to select a refresh range. */
389
+ function validateSheetDrawingPlacement(drawing) {
390
+ var _drawing$sheetTransfo, _drawing$sheetTransfo2;
391
+ if (!drawing || typeof drawing !== "object") return {
392
+ ok: false,
393
+ reason: PLACEMENT_ERROR.KIND_INVALID
394
+ };
395
+ const anchorType = drawing.anchorType ?? "0";
396
+ if (anchorType === "2") return;
397
+ if (anchorType !== "0" && anchorType !== "1") return {
398
+ ok: false,
399
+ reason: PLACEMENT_ERROR.KIND_INVALID
400
+ };
401
+ const markerFailure = validateCellPosition((_drawing$sheetTransfo = drawing.sheetTransform) === null || _drawing$sheetTransfo === void 0 ? void 0 : _drawing$sheetTransfo.from) ?? validateCellPosition((_drawing$sheetTransfo2 = drawing.sheetTransform) === null || _drawing$sheetTransfo2 === void 0 ? void 0 : _drawing$sheetTransfo2.to);
402
+ if (markerFailure) return markerFailure;
403
+ return validatePlacement(getSheetDrawingPlacement(drawing), requiresDrawingArea(drawing));
404
+ }
405
+ /** Expected snapshot errors are results; unexpected calculation failures are caught by the task owner. */
406
+ function tryRefreshSheetDrawingPlacement(drawing, skeleton) {
407
+ var _resolved$transform, _resolved$transform2;
408
+ const failure = validateSheetDrawingPlacement(drawing);
409
+ if (failure) return failure;
410
+ if (drawing.anchorType === "2") return {
411
+ ok: true,
412
+ drawing
413
+ };
414
+ const resolved = resolveSheetDrawingPlacement(drawing, getSheetDrawingPlacement(drawing), skeleton);
415
+ const extentFailure = validateExtent(((_resolved$transform = resolved.transform) === null || _resolved$transform === void 0 ? void 0 : _resolved$transform.width) ?? 0, ((_resolved$transform2 = resolved.transform) === null || _resolved$transform2 === void 0 ? void 0 : _resolved$transform2.height) ?? 0, requiresDrawingArea(drawing), true);
416
+ if (extentFailure) return extentFailure;
417
+ return {
418
+ ok: true,
419
+ drawing: {
420
+ ...drawing,
421
+ sheetTransform: resolved.sheetTransform,
422
+ transform: resolved.transform,
423
+ axisAlignSheetTransform: resolved.axisAlignSheetTransform
424
+ }
425
+ };
426
+ }
427
+ function requiresDrawingArea(drawing) {
428
+ return drawing.drawingType === DrawingTypeEnum.DRAWING_IMAGE || drawing.drawingType === DrawingTypeEnum.DRAWING_DOM;
429
+ }
430
+ function resolveSheetDrawingPlacement(drawing, placement, skeleton) {
369
431
  if (placement.kind === "2") {
370
432
  const transform = withExistingTransform(drawing.transform, placement);
371
433
  const sheetTransform = absoluteSheetTransform(placement, drawing.sheetTransform);
@@ -379,29 +441,43 @@ function applySheetDrawingPlacement(drawing, input, skeleton) {
379
441
  }
380
442
  if (!skeleton) throw new Error("SHEET_DRAWING_PLACEMENT_SKELETON_REQUIRED");
381
443
  if (placement.kind === "0") {
382
- const converted = convertPositionCellToSheetOverGrid(drawing.unitId, drawing.subUnitId, placement.from, placement.width, placement.height, skeleton);
383
- const sheetTransform = withExistingSheetTransform(drawing.sheetTransform, converted.sheetTransform);
444
+ const converted = convertPositionCellToSheetOverGrid(drawing.unitId, drawing.subUnitId, getVisibleCellPosition(placement.from, skeleton), placement.width, placement.height, skeleton);
445
+ const sheetTransform = withExistingSheetTransform(drawing.sheetTransform, {
446
+ from: placement.from,
447
+ to: converted.sheetTransform.to
448
+ });
384
449
  const transform = withExistingTransform(drawing.transform, converted.transform);
385
450
  return {
386
451
  ...drawing,
387
452
  anchorType: "0",
388
453
  sheetTransform,
389
454
  transform,
390
- axisAlignSheetTransform: transformToAxisAlignPosition(transform, skeleton)
455
+ axisAlignSheetTransform: withExistingSheetTransform(drawing.axisAlignSheetTransform, transformToAxisAlignPosition(transform, skeleton))
391
456
  };
392
457
  }
393
458
  const sheetTransform = withExistingSheetTransform(drawing.sheetTransform, {
394
459
  from: placement.from,
395
460
  to: placement.to
396
461
  });
397
- const bounds = convertPositionSheetOverGridToAbsolute(drawing.unitId, drawing.subUnitId, sheetTransform, skeleton);
462
+ const bounds = convertPositionSheetOverGridToAbsolute(drawing.unitId, drawing.subUnitId, {
463
+ from: getVisibleCellPosition(placement.from, skeleton),
464
+ to: getVisibleCellPosition(placement.to, skeleton)
465
+ }, skeleton);
398
466
  const transform = withExistingTransform(drawing.transform, bounds);
399
467
  return {
400
468
  ...drawing,
401
469
  anchorType: "1",
402
470
  sheetTransform,
403
471
  transform,
404
- axisAlignSheetTransform: transformToAxisAlignPosition(transform, skeleton)
472
+ axisAlignSheetTransform: withExistingSheetTransform(drawing.axisAlignSheetTransform, transformToAxisAlignPosition(transform, skeleton))
473
+ };
474
+ }
475
+ function getVisibleCellPosition(position, skeleton) {
476
+ const cell = skeleton.getNoMergeCellWithCoordByIndex(position.row, position.column);
477
+ return {
478
+ ...position,
479
+ columnOffset: cell.startX === cell.endX ? 0 : position.columnOffset,
480
+ rowOffset: cell.startY === cell.endY ? 0 : position.rowOffset
405
481
  };
406
482
  }
407
483
  /**
@@ -409,15 +485,18 @@ function applySheetDrawingPlacement(drawing, input, skeleton) {
409
485
  * Position, Both, or None Placement.
410
486
  */
411
487
  function normalizeSheetDrawingPlacement(input, skeleton) {
488
+ return normalizePlacement(input, skeleton, false);
489
+ }
490
+ function normalizePlacement(input, skeleton, requiresArea) {
412
491
  if (!("bounds" in input)) {
413
- validatePlacement(input);
414
- if (input.kind === "1" && skeleton) validateBounds(convertPositionSheetOverGridToAbsolute(skeleton.worksheet.getUnitId(), skeleton.worksheet.getSheetId(), {
492
+ assertValidPlacement(validatePlacement(input, requiresArea));
493
+ if (input.kind === "1" && skeleton) assertValidPlacement(validateBounds(convertPositionSheetOverGridToAbsolute(skeleton.worksheet.getUnitId(), skeleton.worksheet.getSheetId(), {
415
494
  from: input.from,
416
495
  to: input.to
417
- }, skeleton));
496
+ }, skeleton), requiresArea));
418
497
  return input;
419
498
  }
420
- validateBounds(input.bounds);
499
+ assertValidPlacement(validateBounds(input.bounds, requiresArea));
421
500
  if (input.kind === "2") return {
422
501
  kind: "2",
423
502
  ...input.bounds
@@ -435,7 +514,7 @@ function normalizeSheetDrawingPlacement(input, skeleton) {
435
514
  from: sheetTransform.from,
436
515
  to: sheetTransform.to
437
516
  };
438
- throw new Error("SHEET_DRAWING_PLACEMENT_KIND_INVALID");
517
+ throw new Error(PLACEMENT_ERROR.KIND_INVALID);
439
518
  }
440
519
  function withExistingSheetTransform(current, placement) {
441
520
  return {
@@ -470,33 +549,51 @@ function absoluteSheetTransform(placement, current) {
470
549
  }
471
550
  };
472
551
  }
473
- function validatePlacement(placement) {
474
- if (placement.kind === "0") {
475
- validateCellPosition(placement.from);
476
- validateExtent(placement.width, placement.height);
477
- return;
478
- }
479
- if (placement.kind === "1") {
480
- validateCellPosition(placement.from);
481
- validateCellPosition(placement.to);
482
- return;
483
- }
552
+ function validatePlacement(placement, requiresArea) {
553
+ if (placement.kind === "0") return validateCellPosition(placement.from) ?? validateExtent(placement.width, placement.height, requiresArea);
554
+ if (placement.kind === "1") return validateCellPosition(placement.from) ?? validateCellPosition(placement.to);
484
555
  if (placement.kind === "2") {
485
- if (!Number.isFinite(placement.left) || !Number.isFinite(placement.top)) throw new TypeError("SHEET_DRAWING_PLACEMENT_POSITION_INVALID");
486
- validateExtent(placement.width, placement.height);
487
- return;
556
+ if (!Number.isFinite(placement.left) || !Number.isFinite(placement.top)) return {
557
+ ok: false,
558
+ reason: PLACEMENT_ERROR.POSITION_INVALID
559
+ };
560
+ return validateExtent(placement.width, placement.height, requiresArea);
488
561
  }
489
- throw new Error("SHEET_DRAWING_PLACEMENT_KIND_INVALID");
562
+ return {
563
+ ok: false,
564
+ reason: PLACEMENT_ERROR.KIND_INVALID
565
+ };
490
566
  }
491
- function validateBounds(bounds) {
492
- if (!Number.isFinite(bounds.left) || !Number.isFinite(bounds.top)) throw new TypeError("SHEET_DRAWING_PLACEMENT_POSITION_INVALID");
493
- validateExtent(bounds.width, bounds.height);
567
+ function validateBounds(bounds, requiresArea) {
568
+ if (!bounds || !Number.isFinite(bounds.left) || !Number.isFinite(bounds.top)) return {
569
+ ok: false,
570
+ reason: PLACEMENT_ERROR.POSITION_INVALID
571
+ };
572
+ return validateExtent(bounds.width, bounds.height, requiresArea);
494
573
  }
495
574
  function validateCellPosition(position) {
496
- if (!Number.isInteger(position.row) || !Number.isInteger(position.column) || position.row < 0 || position.column < 0 || !Number.isFinite(position.rowOffset) || !Number.isFinite(position.columnOffset)) throw new Error("SHEET_DRAWING_PLACEMENT_CELL_INVALID");
575
+ if (!position || !Number.isInteger(position.row) || !Number.isInteger(position.column) || position.row < 0 || position.column < 0 || !Number.isFinite(position.rowOffset) || !Number.isFinite(position.columnOffset)) return {
576
+ ok: false,
577
+ reason: PLACEMENT_ERROR.CELL_INVALID
578
+ };
579
+ }
580
+ function validateExtent(width, height, requiresArea, allowCollapsed = false) {
581
+ const hasInvalidZeroExtent = !allowCollapsed && (requiresArea ? width === 0 || height === 0 : width === 0 && height === 0);
582
+ if (!Number.isFinite(width) || !Number.isFinite(height) || width < 0 || height < 0 || hasInvalidZeroExtent) return {
583
+ ok: false,
584
+ reason: PLACEMENT_ERROR.EXTENT_INVALID,
585
+ details: {
586
+ width,
587
+ height
588
+ }
589
+ };
590
+ }
591
+ function assertValidPlacement(failure) {
592
+ if (failure) throw createPlacementError(failure);
497
593
  }
498
- function validateExtent(width, height) {
499
- if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) throw new Error("SHEET_DRAWING_PLACEMENT_EXTENT_INVALID");
594
+ function createPlacementError(failure) {
595
+ const error = failure.reason === PLACEMENT_ERROR.POSITION_INVALID ? new TypeError(failure.reason) : new Error(failure.reason);
596
+ return Object.assign(error, failure.details);
500
597
  }
501
598
 
502
599
  //#endregion
@@ -735,7 +832,7 @@ const SetWorksheetBackgroundImageCommand = {
735
832
  };
736
833
 
737
834
  //#endregion
738
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/decorateParam.js
835
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/decorateParam.js
739
836
  function __decorateParam(paramIndex, decorator) {
740
837
  return function(target, key) {
741
838
  decorator(target, key, paramIndex);
@@ -743,7 +840,7 @@ function __decorateParam(paramIndex, decorator) {
743
840
  }
744
841
 
745
842
  //#endregion
746
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/decorate.js
843
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/decorate.js
747
844
  function __decorate(decorators, target, key, desc) {
748
845
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
749
846
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -927,7 +1024,7 @@ SheetsDrawingLoadController = __decorate([
927
1024
  //#endregion
928
1025
  //#region package.json
929
1026
  var name = "@univerjs/sheets-drawing";
930
- var version = "1.0.4";
1027
+ var version = "1.2.0";
931
1028
 
932
1029
  //#endregion
933
1030
  //#region src/config/config.ts
@@ -951,7 +1048,7 @@ const configSymbol = Symbol(SHEETS_DRAWING_PLUGIN_CONFIG_KEY);
951
1048
  const defaultPluginConfig = {};
952
1049
 
953
1050
  //#endregion
954
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/typeof.js
1051
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/typeof.js
955
1052
  function _typeof(o) {
956
1053
  "@babel/helpers - typeof";
957
1054
  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
@@ -962,7 +1059,7 @@ function _typeof(o) {
962
1059
  }
963
1060
 
964
1061
  //#endregion
965
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/toPrimitive.js
1062
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/toPrimitive.js
966
1063
  function toPrimitive(t, r) {
967
1064
  if ("object" != _typeof(t) || !t) return t;
968
1065
  var e = t[Symbol.toPrimitive];
@@ -975,14 +1072,14 @@ function toPrimitive(t, r) {
975
1072
  }
976
1073
 
977
1074
  //#endregion
978
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/toPropertyKey.js
1075
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/toPropertyKey.js
979
1076
  function toPropertyKey(t) {
980
1077
  var i = toPrimitive(t, "string");
981
1078
  return "symbol" == _typeof(i) ? i : i + "";
982
1079
  }
983
1080
 
984
1081
  //#endregion
985
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/defineProperty.js
1082
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/defineProperty.js
986
1083
  function _defineProperty(e, r, t) {
987
1084
  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
988
1085
  value: t,
@@ -1061,7 +1158,7 @@ const REFRESH_MUTATIONS = [
1061
1158
  SetWorksheetColWidthMutation.id
1062
1159
  ];
1063
1160
  let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffectedController extends Disposable {
1064
- constructor(_commandService, _sheetSkeletonService, _sheetInterceptorService, _sheetDrawingService, _drawingManagerService, _univerInstanceService, _transformPlanService) {
1161
+ constructor(_commandService, _sheetSkeletonService, _sheetInterceptorService, _sheetDrawingService, _drawingManagerService, _univerInstanceService, _transformPlanService, _logService) {
1065
1162
  super();
1066
1163
  this._commandService = _commandService;
1067
1164
  this._sheetSkeletonService = _sheetSkeletonService;
@@ -1070,6 +1167,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1070
1167
  this._drawingManagerService = _drawingManagerService;
1071
1168
  this._univerInstanceService = _univerInstanceService;
1072
1169
  this._transformPlanService = _transformPlanService;
1170
+ this._logService = _logService;
1073
1171
  _defineProperty(this, "_currentCommand", {
1074
1172
  id: "",
1075
1173
  params: {}
@@ -1125,13 +1223,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1125
1223
  } else if (id === InsertRangeMoveRightCommand.id) {
1126
1224
  const { range } = params;
1127
1225
  return this._getRangeMoveUndo(range, 3);
1128
- } else if (id === SetRowHiddenCommand.id || id === SetSpecificRowsVisibleCommand.id) {
1129
- const { unitId, subUnitId, ranges } = params;
1130
- return this._getDrawingUndoForRowVisible(unitId, subUnitId, ranges);
1131
- } else if (id === SetColHiddenCommand.id || id === SetSpecificColsVisibleCommand.id) {
1132
- const { unitId, subUnitId, ranges } = params;
1133
- return this._getDrawingUndoForColVisible(unitId, subUnitId, ranges);
1134
- } else if (id === DeltaRowHeightCommand.id || id === DeltaColumnWidthCommand.id || id === SetRowHeightCommand.id || id === SetColWidthCommand.id) {
1226
+ } else if (id === SetRowHiddenCommand.id || id === SetSpecificRowsVisibleCommand.id || id === SetColHiddenCommand.id || id === SetSpecificColsVisibleCommand.id || id === DeltaRowHeightCommand.id || id === DeltaColumnWidthCommand.id || id === SetRowHeightCommand.id || id === SetColWidthCommand.id) {
1135
1227
  const { unitId, subUnitId, ranges } = params;
1136
1228
  return this._getDrawingUndoForRowAndColSize(unitId, subUnitId, ranges);
1137
1229
  }
@@ -1362,266 +1454,20 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1362
1454
  newTransform = param === null || param === void 0 ? void 0 : param.newTransform;
1363
1455
  axisAlignSheetTransform = (param === null || param === void 0 ? void 0 : param.axisAlignSheetTransform) ?? void 0;
1364
1456
  }
1365
- if (newSheetTransform && newTransform) {
1366
- const newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1367
- updateDrawings.push({
1368
- ...drawing,
1369
- sheetTransform: newSheetTransform,
1370
- transform: newTransform,
1371
- axisAlignSheetTransform
1372
- });
1373
- }
1457
+ if (newSheetTransform && newTransform) updateDrawings.push({
1458
+ ...drawing,
1459
+ sheetTransform: newSheetTransform,
1460
+ transform: newTransform,
1461
+ axisAlignSheetTransform
1462
+ });
1374
1463
  return {
1375
1464
  updateDrawings,
1376
1465
  deleteDrawings
1377
1466
  };
1378
1467
  }
1379
- _remainDrawingSize(transform, updateDrawings, drawing, skeleton) {
1380
- const newSheetTransform = transformToDrawingPosition({ ...transform }, skeleton);
1381
- if (newSheetTransform) {
1382
- const axisAlignSheetTransform = transformToAxisAlignPosition({ ...transform }, skeleton);
1383
- updateDrawings.push({
1384
- ...drawing,
1385
- sheetTransform: newSheetTransform,
1386
- axisAlignSheetTransform
1387
- });
1388
- }
1389
- }
1390
- _getDrawingUndoForColVisible(unitId, subUnitId, ranges) {
1391
- const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1392
- if (!sheetSkeletonParam) return {
1393
- redos: [],
1394
- undos: []
1395
- };
1396
- const { skeleton } = sheetSkeletonParam;
1397
- const drawingData = this._drawingManagerService.getDrawingData(unitId, subUnitId);
1398
- const updateDrawings = [];
1399
- const preUpdateDrawings = [];
1400
- Object.keys(drawingData).forEach((drawingId) => {
1401
- const drawing = drawingData[drawingId];
1402
- const { sheetTransform, transform, anchorType = "0" } = drawing;
1403
- if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1404
- else {
1405
- const { from, to } = sheetTransform;
1406
- const { row: fromRow, column: fromColumn } = from;
1407
- const { row: toRow, column: toColumn } = to;
1408
- for (let i = 0; i < ranges.length; i++) {
1409
- const { startColumn, endColumn } = ranges[i];
1410
- if (toColumn < startColumn) continue;
1411
- if (anchorType === "0") {
1412
- let newSheetTransform = null;
1413
- let newTransform = null;
1414
- if (fromColumn >= startColumn && fromColumn <= endColumn) {
1415
- const selectionCell = attachRangeWithCoord(skeleton, {
1416
- startColumn: fromColumn,
1417
- endColumn,
1418
- startRow: fromRow,
1419
- endRow: toRow
1420
- });
1421
- newTransform = {
1422
- ...transform,
1423
- left: selectionCell.startX
1424
- };
1425
- }
1426
- if (newTransform) {
1427
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1428
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1429
- if (newSheetTransform && newTransform) {
1430
- updateDrawings.push({
1431
- ...drawing,
1432
- sheetTransform: newSheetTransform,
1433
- transform: newTransform,
1434
- axisAlignSheetTransform
1435
- });
1436
- break;
1437
- }
1438
- }
1439
- continue;
1440
- }
1441
- if (fromColumn >= startColumn && toColumn <= endColumn) continue;
1442
- let newSheetTransform = null;
1443
- let newTransform = null;
1444
- if (fromColumn >= startColumn && fromColumn <= endColumn) {
1445
- const selectionCell = attachRangeWithCoord(skeleton, {
1446
- startColumn: fromColumn,
1447
- endColumn,
1448
- startRow: fromRow,
1449
- endRow: toRow
1450
- });
1451
- newTransform = {
1452
- ...transform,
1453
- left: (selectionCell === null || selectionCell === void 0 ? void 0 : selectionCell.startX) || 0,
1454
- width: ((transform === null || transform === void 0 ? void 0 : transform.width) || 0) - selectionCell.endX + selectionCell.startX
1455
- };
1456
- } else if (toColumn >= startColumn && toColumn <= endColumn) {
1457
- const selectionCell = attachRangeWithCoord(skeleton, {
1458
- startColumn,
1459
- endColumn: toColumn,
1460
- startRow: fromRow,
1461
- endRow: toRow
1462
- });
1463
- newTransform = {
1464
- ...transform,
1465
- left: selectionCell.startX - ((transform === null || transform === void 0 ? void 0 : transform.width) || 0)
1466
- };
1467
- } else {
1468
- const selectionCell = attachRangeWithCoord(skeleton, {
1469
- startColumn,
1470
- endColumn,
1471
- startRow: fromRow,
1472
- endRow: toRow
1473
- });
1474
- newTransform = {
1475
- ...transform,
1476
- width: ((transform === null || transform === void 0 ? void 0 : transform.width) || 0) - selectionCell.endX + selectionCell.startX
1477
- };
1478
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1479
- if (newSheetTransform && newTransform) {
1480
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1481
- preUpdateDrawings.push({
1482
- ...drawing,
1483
- sheetTransform: newSheetTransform,
1484
- transform: newTransform,
1485
- axisAlignSheetTransform
1486
- });
1487
- break;
1488
- }
1489
- }
1490
- if (newTransform) newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1491
- if (newTransform && newSheetTransform) {
1492
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1493
- updateDrawings.push({
1494
- ...drawing,
1495
- sheetTransform: newSheetTransform,
1496
- transform: newTransform,
1497
- axisAlignSheetTransform
1498
- });
1499
- break;
1500
- } else this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1501
- }
1502
- }
1503
- });
1504
- return this._finalizePlan(unitId, subUnitId, [...preUpdateDrawings, ...updateDrawings]);
1505
- }
1506
1468
  _createUndoAndRedoMutation(unitId, subUnitId, updateDrawings) {
1507
1469
  return this._finalizePlan(unitId, subUnitId, updateDrawings);
1508
1470
  }
1509
- _getDrawingUndoForRowVisible(unitId, subUnitId, ranges) {
1510
- const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1511
- if (!sheetSkeletonParam) return {
1512
- redos: [],
1513
- undos: []
1514
- };
1515
- const { skeleton } = sheetSkeletonParam;
1516
- const drawingData = this._drawingManagerService.getDrawingData(unitId, subUnitId);
1517
- const updateDrawings = [];
1518
- const preUpdateDrawings = [];
1519
- Object.keys(drawingData).forEach((drawingId) => {
1520
- const drawing = drawingData[drawingId];
1521
- const { sheetTransform, transform, anchorType = "0" } = drawing;
1522
- if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1523
- else {
1524
- const { from, to } = sheetTransform;
1525
- const { row: fromRow, column: fromColumn } = from;
1526
- const { row: toRow, column: toColumn } = to;
1527
- for (let i = 0; i < ranges.length; i++) {
1528
- const { startRow, endRow } = ranges[i];
1529
- if (toRow < startRow) continue;
1530
- if (anchorType === "0") {
1531
- let newSheetTransform = null;
1532
- let newTransform = null;
1533
- if (fromRow >= startRow && fromRow <= endRow) {
1534
- const selectionCell = attachRangeWithCoord(skeleton, {
1535
- startColumn: fromColumn,
1536
- endColumn: toColumn,
1537
- startRow: fromRow,
1538
- endRow
1539
- });
1540
- newTransform = {
1541
- ...transform,
1542
- top: selectionCell.startY
1543
- };
1544
- }
1545
- if (newTransform) {
1546
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1547
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1548
- if (newSheetTransform && newTransform) {
1549
- updateDrawings.push({
1550
- ...drawing,
1551
- sheetTransform: newSheetTransform,
1552
- transform: newTransform,
1553
- axisAlignSheetTransform
1554
- });
1555
- break;
1556
- }
1557
- }
1558
- continue;
1559
- }
1560
- if (fromRow >= startRow && toRow <= endRow) continue;
1561
- let newSheetTransform = null;
1562
- let newTransform = null;
1563
- if (fromRow >= startRow && fromRow <= endRow) {
1564
- const selectionCell = attachRangeWithCoord(skeleton, {
1565
- startColumn: fromColumn,
1566
- endColumn: toColumn,
1567
- startRow: fromRow,
1568
- endRow
1569
- });
1570
- newTransform = {
1571
- ...transform,
1572
- top: (selectionCell === null || selectionCell === void 0 ? void 0 : selectionCell.startY) || 0,
1573
- height: ((transform === null || transform === void 0 ? void 0 : transform.height) || 0) - selectionCell.endY + selectionCell.startY
1574
- };
1575
- } else if (toRow >= startRow && toRow <= endRow) {
1576
- const selectionCell = attachRangeWithCoord(skeleton, {
1577
- startColumn: fromColumn,
1578
- endColumn: toColumn,
1579
- startRow,
1580
- endRow: toRow
1581
- });
1582
- newTransform = {
1583
- ...transform,
1584
- top: selectionCell.startY - ((transform === null || transform === void 0 ? void 0 : transform.height) || 0)
1585
- };
1586
- } else {
1587
- const selectionCell = attachRangeWithCoord(skeleton, {
1588
- startColumn: fromColumn,
1589
- endColumn: toColumn,
1590
- startRow,
1591
- endRow
1592
- });
1593
- newTransform = {
1594
- ...transform,
1595
- height: ((transform === null || transform === void 0 ? void 0 : transform.height) || 0) - selectionCell.endY + selectionCell.startY
1596
- };
1597
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1598
- if (newSheetTransform && newTransform) {
1599
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1600
- preUpdateDrawings.push({
1601
- ...drawing,
1602
- sheetTransform: newSheetTransform,
1603
- transform: newTransform,
1604
- axisAlignSheetTransform
1605
- });
1606
- break;
1607
- }
1608
- }
1609
- if (newTransform) newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1610
- if (newTransform && newSheetTransform) {
1611
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1612
- updateDrawings.push({
1613
- ...drawing,
1614
- sheetTransform: newSheetTransform,
1615
- transform: newTransform,
1616
- axisAlignSheetTransform
1617
- });
1618
- break;
1619
- } else this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1620
- }
1621
- }
1622
- });
1623
- return this._finalizePlan(unitId, subUnitId, [...preUpdateDrawings, ...updateDrawings]);
1624
- }
1625
1471
  _getDrawingUndoForRowAndColSize(unitId, subUnitId, ranges) {
1626
1472
  const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1627
1473
  if (!sheetSkeletonParam) return {
@@ -1633,27 +1479,9 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1633
1479
  const updateDrawings = [];
1634
1480
  Object.keys(drawingData).forEach((drawingId) => {
1635
1481
  const drawing = drawingData[drawingId];
1636
- const { sheetTransform, transform, anchorType = "0" } = drawing;
1637
- if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1638
- else {
1639
- const { row: toRow, column: toColumn } = sheetTransform.to;
1640
- for (let i = 0; i < ranges.length; i++) {
1641
- const { startRow, startColumn } = ranges[i];
1642
- if (toRow < startRow || toColumn < startColumn) continue;
1643
- if (anchorType === "0") {
1644
- updateDrawings.push(applySheetDrawingPlacement(drawing, getSheetDrawingPlacement(drawing), skeleton));
1645
- break;
1646
- }
1647
- const newTransform = drawingPositionToTransform({ ...sheetTransform }, sheetSkeletonParam);
1648
- if (newTransform) {
1649
- updateDrawings.push({
1650
- ...drawing,
1651
- transform: newTransform
1652
- });
1653
- break;
1654
- }
1655
- }
1656
- }
1482
+ if ((drawing === null || drawing === void 0 ? void 0 : drawing.anchorType) === "2") return;
1483
+ const refreshed = this._tryRefreshDrawingPlacement(drawing, skeleton, this._currentCommand.id, ({ to }) => ranges.some(({ startRow, startColumn }) => to.row >= startRow && to.column >= startColumn));
1484
+ if (refreshed) updateDrawings.push(refreshed);
1657
1485
  });
1658
1486
  if (updateDrawings.length === 0) return {
1659
1487
  redos: [],
@@ -1890,7 +1718,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1890
1718
  };
1891
1719
  newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1892
1720
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1893
- } else if (toColumn >= colEndIndex) {
1721
+ } else if (toColumn >= colStartIndex) {
1894
1722
  if (anchorType === "1") {
1895
1723
  newSheetTransform = {
1896
1724
  from: { ...from },
@@ -1906,12 +1734,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1906
1734
  axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
1907
1735
  };
1908
1736
  }
1909
- if (newSheetTransform && newTransform) return {
1910
- newSheetTransform,
1911
- newTransform,
1912
- axisAlignSheetTransform
1913
- };
1914
- return null;
1737
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
1915
1738
  }
1916
1739
  _shrinkCol(colStartIndex, colEndIndex, options) {
1917
1740
  const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
@@ -1939,8 +1762,9 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1939
1762
  column: toColumn - colCount
1940
1763
  }
1941
1764
  };
1765
+ if (anchorType === "0") return this._resolveShiftedPositionDrawing(newSheetTransform, transform, sheetSkeletonParam);
1942
1766
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1943
- } else if (fromColumn >= colStartIndex && toColumn <= colEndIndex) return null;
1767
+ } else if (anchorType === "1" && fromColumn >= colStartIndex && toColumn <= colEndIndex) return null;
1944
1768
  else if (fromColumn < colStartIndex && toColumn > colEndIndex) {
1945
1769
  if (anchorType === "1") {
1946
1770
  newSheetTransform = {
@@ -1971,49 +1795,28 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1971
1795
  };
1972
1796
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1973
1797
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1974
- } else if (fromColumn === colStartIndex) newTransform = {
1975
- ...transform,
1976
- left: (transform.left || 0) - sheetTransform.from.columnOffset
1977
- };
1978
- else {
1979
- const selectionCell = attachRangeWithCoord(skeleton, {
1980
- startColumn: colStartIndex,
1981
- endColumn: fromColumn - 1,
1982
- startRow: from.row,
1983
- endRow: to.row
1984
- });
1985
- newTransform = {
1986
- ...transform,
1987
- left: (transform.left || 0) - selectionCell.endX + selectionCell.startX - sheetTransform.from.columnOffset
1988
- };
1989
- }
1990
- if (!newSheetTransform) {
1991
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1992
- axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1993
- }
1798
+ } else return this._resolveShiftedPositionDrawing({
1799
+ ...sheetTransform,
1800
+ from: {
1801
+ ...from,
1802
+ column: colStartIndex,
1803
+ columnOffset: 0
1804
+ }
1805
+ }, transform, sheetSkeletonParam);
1994
1806
  } else if (toColumn >= colStartIndex && toColumn <= colEndIndex && anchorType === "1") {
1995
- const selectionCell = attachRangeWithCoord(skeleton, {
1996
- startColumn: colStartIndex - 1,
1997
- endColumn: colStartIndex - 1,
1998
- startRow: from.row,
1999
- endRow: to.row
2000
- });
1807
+ const boundaryColumn = Math.min(colStartIndex, skeleton.worksheet.getColumnCount() - 1);
1808
+ const boundaryCell = skeleton.getNoMergeCellWithCoordByIndex(from.row, boundaryColumn);
2001
1809
  newSheetTransform = {
2002
1810
  from: { ...from },
2003
1811
  to: {
2004
1812
  ...to,
2005
- column: colStartIndex - 1,
2006
- columnOffset: selectionCell.endX - selectionCell.startX
1813
+ column: boundaryColumn,
1814
+ columnOffset: boundaryColumn < colStartIndex ? boundaryCell.endX - boundaryCell.startX : 0
2007
1815
  }
2008
1816
  };
2009
1817
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2010
1818
  }
2011
- if (newSheetTransform && newTransform) return {
2012
- newSheetTransform,
2013
- newTransform,
2014
- axisAlignSheetTransform
2015
- };
2016
- return null;
1819
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
2017
1820
  }
2018
1821
  _expandRow(rowStartIndex, rowEndIndex, options) {
2019
1822
  const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
@@ -2043,7 +1846,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2043
1846
  };
2044
1847
  newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
2045
1848
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2046
- } else if (toRow >= rowEndIndex) {
1849
+ } else if (toRow >= rowStartIndex) {
2047
1850
  if (anchorType === "1") {
2048
1851
  newSheetTransform = {
2049
1852
  from: { ...from },
@@ -2059,12 +1862,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2059
1862
  axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
2060
1863
  };
2061
1864
  }
2062
- if (newSheetTransform && newTransform) return {
2063
- newSheetTransform,
2064
- newTransform,
2065
- axisAlignSheetTransform
2066
- };
2067
- return null;
1865
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
2068
1866
  }
2069
1867
  _shrinkRow(rowStartIndex, rowEndIndex, options) {
2070
1868
  const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
@@ -2092,8 +1890,9 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2092
1890
  row: toRow - rowCount
2093
1891
  }
2094
1892
  };
1893
+ if (anchorType === "0") return this._resolveShiftedPositionDrawing(newSheetTransform, transform, sheetSkeletonParam);
2095
1894
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2096
- } else if (fromRow >= rowStartIndex && toRow <= rowEndIndex) return null;
1895
+ } else if (anchorType === "1" && fromRow >= rowStartIndex && toRow <= rowEndIndex) return null;
2097
1896
  else if (fromRow < rowStartIndex && toRow > rowEndIndex) {
2098
1897
  if (anchorType === "1") {
2099
1898
  newSheetTransform = {
@@ -2124,67 +1923,108 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2124
1923
  };
2125
1924
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2126
1925
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2127
- } else if (fromRow === rowStartIndex) newTransform = {
2128
- ...transform,
2129
- top: (transform.top || 0) - sheetTransform.from.rowOffset
2130
- };
2131
- else {
2132
- const selectionCell = attachRangeWithCoord(skeleton, {
2133
- startRow: rowStartIndex,
2134
- endRow: fromRow - 1,
2135
- startColumn: from.column,
2136
- endColumn: to.column
2137
- });
2138
- newTransform = {
2139
- ...transform,
2140
- top: (transform.top || 0) - selectionCell.endY + selectionCell.startY - sheetTransform.from.rowOffset
2141
- };
2142
- }
2143
- if (!newSheetTransform) {
2144
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
2145
- axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2146
- }
1926
+ } else return this._resolveShiftedPositionDrawing({
1927
+ ...sheetTransform,
1928
+ from: {
1929
+ ...from,
1930
+ row: rowStartIndex,
1931
+ rowOffset: 0
1932
+ }
1933
+ }, transform, sheetSkeletonParam);
2147
1934
  } else if (toRow >= rowStartIndex && toRow <= rowEndIndex && anchorType === "1") {
2148
- const selectionCell = attachRangeWithCoord(skeleton, {
2149
- startColumn: from.column,
2150
- endColumn: from.column,
2151
- startRow: rowStartIndex - 1,
2152
- endRow: rowStartIndex - 1
2153
- });
1935
+ const boundaryRow = Math.min(rowStartIndex, skeleton.worksheet.getRowCount() - 1);
1936
+ const boundaryCell = skeleton.getNoMergeCellWithCoordByIndex(boundaryRow, from.column);
2154
1937
  newSheetTransform = {
2155
1938
  from: { ...from },
2156
1939
  to: {
2157
1940
  ...to,
2158
- row: rowStartIndex - 1,
2159
- rowOffset: selectionCell.endY - selectionCell.startY
1941
+ row: boundaryRow,
1942
+ rowOffset: boundaryRow < rowStartIndex ? boundaryCell.endY - boundaryCell.startY : 0
2160
1943
  }
2161
1944
  };
2162
1945
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2163
1946
  }
2164
- if (newSheetTransform && newTransform) return {
1947
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
1948
+ }
1949
+ _resolveShiftedPositionDrawing(sheetTransform, transform, { unitId, sheetId, skeleton }) {
1950
+ const converted = convertPositionCellToSheetOverGrid(unitId, sheetId, sheetTransform.from, transform.width ?? 0, transform.height ?? 0, skeleton);
1951
+ const newTransform = {
1952
+ ...transform,
1953
+ ...converted.transform
1954
+ };
1955
+ return this._getStructuralDrawingResult({
1956
+ ...sheetTransform,
1957
+ ...transformToDrawingPosition(newTransform, skeleton)
1958
+ }, newTransform, null, skeleton);
1959
+ }
1960
+ _getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton) {
1961
+ if (!newSheetTransform || !newTransform) return null;
1962
+ const { left = 0, top = 0, width = 0, height = 0 } = newTransform;
1963
+ if (![
1964
+ left,
1965
+ top,
1966
+ width,
1967
+ height
1968
+ ].every(Number.isFinite) || width < 0 || height < 0) return null;
1969
+ if ([newSheetTransform.from, newSheetTransform.to].some(({ row, column, rowOffset, columnOffset }) => !Number.isInteger(row) || !Number.isInteger(column) || row < 0 || column < 0 || !Number.isFinite(rowOffset) || !Number.isFinite(columnOffset))) return null;
1970
+ return {
2165
1971
  newSheetTransform,
2166
1972
  newTransform,
2167
- axisAlignSheetTransform
1973
+ axisAlignSheetTransform: axisAlignSheetTransform ?? transformToAxisAlignPosition(newTransform, skeleton)
2168
1974
  };
2169
- return null;
1975
+ }
1976
+ _tryRefreshDrawingPlacement(drawing, skeleton, commandId, shouldRefresh) {
1977
+ try {
1978
+ const failure = validateSheetDrawingPlacement(drawing);
1979
+ if (failure) {
1980
+ this._logSkippedDrawingRefresh(drawing, commandId, failure);
1981
+ return;
1982
+ }
1983
+ if (shouldRefresh && !shouldRefresh(drawing.sheetTransform)) return;
1984
+ const result = tryRefreshSheetDrawingPlacement(drawing, skeleton);
1985
+ if (result.ok) return result.drawing;
1986
+ this._logSkippedDrawingRefresh(drawing, commandId, result);
1987
+ } catch (error) {
1988
+ this._logSkippedDrawingRefresh(drawing, commandId, error);
1989
+ }
1990
+ }
1991
+ _logSkippedDrawingRefresh(drawing, commandId, failure) {
1992
+ this._logService.warn("[SheetDrawingTransformAffectedController]", "Skipping drawing placement refresh", {
1993
+ unitId: drawing === null || drawing === void 0 ? void 0 : drawing.unitId,
1994
+ subUnitId: drawing === null || drawing === void 0 ? void 0 : drawing.subUnitId,
1995
+ drawingId: drawing === null || drawing === void 0 ? void 0 : drawing.drawingId,
1996
+ commandId,
1997
+ transform: drawing === null || drawing === void 0 ? void 0 : drawing.transform,
1998
+ sheetTransform: drawing === null || drawing === void 0 ? void 0 : drawing.sheetTransform,
1999
+ failure
2000
+ });
2170
2001
  }
2171
2002
  _sheetRefreshListener() {
2172
2003
  this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
2173
2004
  if (!REFRESH_MUTATIONS.includes(command.id)) return;
2174
2005
  queueMicrotask(() => {
2175
- const params = command.params;
2176
- const target = getSheetCommandTarget(this._univerInstanceService, params);
2177
- if (!target) return;
2178
- const { unitId, subUnitId, worksheet } = target;
2179
- let ranges = [];
2180
- if ("ranges" in params) ranges = params.ranges;
2181
- else if ("rowsAutoHeightInfo" in params) ranges = params.rowsAutoHeightInfo.map((info) => ({
2182
- startRow: info.row,
2183
- endRow: info.row,
2184
- startColumn: 0,
2185
- endColumn: worksheet.getColumnCount() - 1
2186
- }));
2187
- this._refreshDrawingTransform(command, unitId, subUnitId, ranges);
2006
+ if (this._disposed) return;
2007
+ try {
2008
+ const params = command.params;
2009
+ const target = getSheetCommandTarget(this._univerInstanceService, params);
2010
+ if (!target) return;
2011
+ const { unitId, subUnitId, worksheet } = target;
2012
+ let ranges = [];
2013
+ if ("ranges" in params) ranges = params.ranges;
2014
+ else if ("rowsAutoHeightInfo" in params) ranges = params.rowsAutoHeightInfo.map((info) => ({
2015
+ startRow: info.row,
2016
+ endRow: info.row,
2017
+ startColumn: 0,
2018
+ endColumn: worksheet.getColumnCount() - 1
2019
+ }));
2020
+ this._refreshDrawingTransform(command, unitId, subUnitId, ranges);
2021
+ } catch (error) {
2022
+ this._logService.error("[SheetDrawingTransformAffectedController]", "Drawing layout refresh failed", {
2023
+ commandId: command.id,
2024
+ params: command.params,
2025
+ error
2026
+ });
2027
+ }
2188
2028
  });
2189
2029
  }));
2190
2030
  }
@@ -2195,43 +2035,26 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2195
2035
  const updateDrawings = [];
2196
2036
  Object.keys(drawingData).forEach((drawingId) => {
2197
2037
  const drawing = drawingData[drawingId];
2198
- const { sheetTransform, transform, anchorType = "0" } = drawing;
2199
- if (anchorType === "2") return true;
2200
- if (!sheetTransform) return true;
2201
- const { from, to } = sheetTransform;
2202
- const { row: fromRow, column: fromColumn } = from;
2203
- const { row: toRow, column: toColumn } = to;
2204
- for (let i = 0; i < ranges.length; i++) {
2205
- const { startRow, endRow, startColumn, endColumn } = ranges[i];
2206
- if (Rectangle.intersects({
2207
- startRow,
2208
- endRow,
2209
- startColumn,
2210
- endColumn
2211
- }, {
2212
- startRow: fromRow,
2213
- endRow: toRow,
2214
- startColumn: fromColumn,
2215
- endColumn: toColumn
2216
- }) || fromRow > endRow || fromColumn > endColumn) {
2217
- if (anchorType === "0") {
2218
- updateDrawings.push(applySheetDrawingPlacement(drawing, getSheetDrawingPlacement(drawing), sheetSkeletonParam.skeleton));
2219
- break;
2220
- }
2221
- const newTransform = drawingPositionToTransform(sheetTransform, sheetSkeletonParam);
2222
- updateDrawings.push({
2223
- ...drawing,
2224
- transform: {
2225
- ...transform,
2226
- left: newTransform === null || newTransform === void 0 ? void 0 : newTransform.left,
2227
- top: newTransform === null || newTransform === void 0 ? void 0 : newTransform.top,
2228
- width: newTransform === null || newTransform === void 0 ? void 0 : newTransform.width,
2229
- height: newTransform === null || newTransform === void 0 ? void 0 : newTransform.height
2230
- }
2231
- });
2232
- break;
2233
- }
2234
- }
2038
+ if ((drawing === null || drawing === void 0 ? void 0 : drawing.anchorType) === "2") return;
2039
+ const refreshed = this._tryRefreshDrawingPlacement(drawing, sheetSkeletonParam.skeleton, command.id, ({ from, to }) => {
2040
+ const { row: fromRow, column: fromColumn } = from;
2041
+ const { row: toRow, column: toColumn } = to;
2042
+ return ranges.some((range) => {
2043
+ const { startRow, endRow, startColumn, endColumn } = range;
2044
+ return Rectangle.intersects({
2045
+ startRow,
2046
+ endRow,
2047
+ startColumn,
2048
+ endColumn
2049
+ }, {
2050
+ startRow: fromRow,
2051
+ endRow: toRow,
2052
+ startColumn: fromColumn,
2053
+ endColumn: toColumn
2054
+ }) || fromRow > endRow || fromColumn > endColumn;
2055
+ });
2056
+ });
2057
+ if (refreshed) updateDrawings.push(refreshed);
2235
2058
  });
2236
2059
  this._finalizePlan(unitId, subUnitId, updateDrawings, [], "refresh", command);
2237
2060
  }
@@ -2243,7 +2066,8 @@ SheetDrawingTransformAffectedController = __decorate([
2243
2066
  __decorateParam(3, ISheetDrawingService),
2244
2067
  __decorateParam(4, IDrawingManagerService),
2245
2068
  __decorateParam(5, IUniverInstanceService),
2246
- __decorateParam(6, Inject(SheetDrawingTransformPlanService))
2069
+ __decorateParam(6, Inject(SheetDrawingTransformPlanService)),
2070
+ __decorateParam(7, ILogService)
2247
2071
  ], SheetDrawingTransformAffectedController);
2248
2072
 
2249
2073
  //#endregion
@@ -2279,4 +2103,4 @@ UniverSheetsDrawingPlugin = __decorate([
2279
2103
  ], UniverSheetsDrawingPlugin);
2280
2104
 
2281
2105
  //#endregion
2282
- export { ClearSheetDrawingTransformerOperation, DrawingApplyType, ISheetDrawingService, InsertSheetDrawingCommand, RemoveSheetDrawingCommand, SHEET_DRAWING_PLUGIN, SetDrawingApplyMutation, SetDrawingArrangeCommand, SetSheetDrawingCommand, SetSheetDrawingPlacementCommand, SetWorksheetBackgroundImageCommand, SetWorksheetBackgroundImageMutation, SheetDrawingAnchorType, SheetDrawingService, SheetDrawingTransformPlanService, UniverSheetsDrawingPlugin, applySheetDrawingPlacement, drawingPositionToTransform, getSheetDrawingPlacement, isKnownSheetNonRotatableDrawingType, normalizeSheetDrawingPlacement, resolveSheetDrawingRotateEnabled, transformToAxisAlignPosition, transformToDrawingPosition };
2106
+ export { ClearSheetDrawingTransformerOperation, DrawingApplyType, ISheetDrawingService, InsertSheetDrawingCommand, RemoveSheetDrawingCommand, SHEET_DRAWING_PLUGIN, SetDrawingApplyMutation, SetDrawingArrangeCommand, SetSheetDrawingCommand, SetSheetDrawingPlacementCommand, SetWorksheetBackgroundImageCommand, SetWorksheetBackgroundImageMutation, SheetDrawingAnchorType, SheetDrawingService, SheetDrawingTransformPlanService, UniverSheetsDrawingPlugin, applySheetDrawingPlacement, drawingPositionToTransform, getSheetDrawingPlacement, isKnownSheetNonRotatableDrawingType, normalizeSheetDrawingPlacement, refreshSheetDrawingPlacement, resolveSheetDrawingRotateEnabled, transformToAxisAlignPosition, transformToDrawingPosition };