@univerjs/sheets-drawing 1.1.0 → 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 = normalizePlacement(input, skeleton, drawing.drawingType === DrawingTypeEnum.DRAWING_IMAGE || drawing.drawingType === DrawingTypeEnum.DRAWING_DOM);
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
  /**
@@ -413,14 +489,14 @@ function normalizeSheetDrawingPlacement(input, skeleton) {
413
489
  }
414
490
  function normalizePlacement(input, skeleton, requiresArea) {
415
491
  if (!("bounds" in input)) {
416
- validatePlacement(input, requiresArea);
417
- 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(), {
418
494
  from: input.from,
419
495
  to: input.to
420
- }, skeleton), requiresArea);
496
+ }, skeleton), requiresArea));
421
497
  return input;
422
498
  }
423
- validateBounds(input.bounds, requiresArea);
499
+ assertValidPlacement(validateBounds(input.bounds, requiresArea));
424
500
  if (input.kind === "2") return {
425
501
  kind: "2",
426
502
  ...input.bounds
@@ -438,7 +514,7 @@ function normalizePlacement(input, skeleton, requiresArea) {
438
514
  from: sheetTransform.from,
439
515
  to: sheetTransform.to
440
516
  };
441
- throw new Error("SHEET_DRAWING_PLACEMENT_KIND_INVALID");
517
+ throw new Error(PLACEMENT_ERROR.KIND_INVALID);
442
518
  }
443
519
  function withExistingSheetTransform(current, placement) {
444
520
  return {
@@ -474,36 +550,50 @@ function absoluteSheetTransform(placement, current) {
474
550
  };
475
551
  }
476
552
  function validatePlacement(placement, requiresArea) {
477
- if (placement.kind === "0") {
478
- validateCellPosition(placement.from);
479
- validateExtent(placement.width, placement.height, requiresArea);
480
- return;
481
- }
482
- if (placement.kind === "1") {
483
- validateCellPosition(placement.from);
484
- validateCellPosition(placement.to);
485
- return;
486
- }
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);
487
555
  if (placement.kind === "2") {
488
- if (!Number.isFinite(placement.left) || !Number.isFinite(placement.top)) throw new TypeError("SHEET_DRAWING_PLACEMENT_POSITION_INVALID");
489
- validateExtent(placement.width, placement.height, requiresArea);
490
- 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);
491
561
  }
492
- throw new Error("SHEET_DRAWING_PLACEMENT_KIND_INVALID");
562
+ return {
563
+ ok: false,
564
+ reason: PLACEMENT_ERROR.KIND_INVALID
565
+ };
493
566
  }
494
567
  function validateBounds(bounds, requiresArea) {
495
- if (!Number.isFinite(bounds.left) || !Number.isFinite(bounds.top)) throw new TypeError("SHEET_DRAWING_PLACEMENT_POSITION_INVALID");
496
- validateExtent(bounds.width, bounds.height, 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);
497
573
  }
498
574
  function validateCellPosition(position) {
499
- 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
+ };
500
579
  }
501
- function validateExtent(width, height, requiresArea) {
502
- const hasInvalidZeroExtent = requiresArea ? width === 0 || height === 0 : width === 0 && height === 0;
503
- if (!Number.isFinite(width) || !Number.isFinite(height) || width < 0 || height < 0 || hasInvalidZeroExtent) throw Object.assign(/* @__PURE__ */ new Error("SHEET_DRAWING_PLACEMENT_EXTENT_INVALID"), {
504
- width,
505
- height
506
- });
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);
593
+ }
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);
507
597
  }
508
598
 
509
599
  //#endregion
@@ -934,7 +1024,7 @@ SheetsDrawingLoadController = __decorate([
934
1024
  //#endregion
935
1025
  //#region package.json
936
1026
  var name = "@univerjs/sheets-drawing";
937
- var version = "1.1.0";
1027
+ var version = "1.2.0";
938
1028
 
939
1029
  //#endregion
940
1030
  //#region src/config/config.ts
@@ -1068,7 +1158,7 @@ const REFRESH_MUTATIONS = [
1068
1158
  SetWorksheetColWidthMutation.id
1069
1159
  ];
1070
1160
  let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffectedController extends Disposable {
1071
- constructor(_commandService, _sheetSkeletonService, _sheetInterceptorService, _sheetDrawingService, _drawingManagerService, _univerInstanceService, _transformPlanService) {
1161
+ constructor(_commandService, _sheetSkeletonService, _sheetInterceptorService, _sheetDrawingService, _drawingManagerService, _univerInstanceService, _transformPlanService, _logService) {
1072
1162
  super();
1073
1163
  this._commandService = _commandService;
1074
1164
  this._sheetSkeletonService = _sheetSkeletonService;
@@ -1077,6 +1167,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1077
1167
  this._drawingManagerService = _drawingManagerService;
1078
1168
  this._univerInstanceService = _univerInstanceService;
1079
1169
  this._transformPlanService = _transformPlanService;
1170
+ this._logService = _logService;
1080
1171
  _defineProperty(this, "_currentCommand", {
1081
1172
  id: "",
1082
1173
  params: {}
@@ -1132,13 +1223,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1132
1223
  } else if (id === InsertRangeMoveRightCommand.id) {
1133
1224
  const { range } = params;
1134
1225
  return this._getRangeMoveUndo(range, 3);
1135
- } else if (id === SetRowHiddenCommand.id || id === SetSpecificRowsVisibleCommand.id) {
1136
- const { unitId, subUnitId, ranges } = params;
1137
- return this._getDrawingUndoForRowVisible(unitId, subUnitId, ranges);
1138
- } else if (id === SetColHiddenCommand.id || id === SetSpecificColsVisibleCommand.id) {
1139
- const { unitId, subUnitId, ranges } = params;
1140
- return this._getDrawingUndoForColVisible(unitId, subUnitId, ranges);
1141
- } 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) {
1142
1227
  const { unitId, subUnitId, ranges } = params;
1143
1228
  return this._getDrawingUndoForRowAndColSize(unitId, subUnitId, ranges);
1144
1229
  }
@@ -1369,266 +1454,20 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1369
1454
  newTransform = param === null || param === void 0 ? void 0 : param.newTransform;
1370
1455
  axisAlignSheetTransform = (param === null || param === void 0 ? void 0 : param.axisAlignSheetTransform) ?? void 0;
1371
1456
  }
1372
- if (newSheetTransform && newTransform) {
1373
- const newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1374
- updateDrawings.push({
1375
- ...drawing,
1376
- sheetTransform: newSheetTransform,
1377
- transform: newTransform,
1378
- axisAlignSheetTransform
1379
- });
1380
- }
1457
+ if (newSheetTransform && newTransform) updateDrawings.push({
1458
+ ...drawing,
1459
+ sheetTransform: newSheetTransform,
1460
+ transform: newTransform,
1461
+ axisAlignSheetTransform
1462
+ });
1381
1463
  return {
1382
1464
  updateDrawings,
1383
1465
  deleteDrawings
1384
1466
  };
1385
1467
  }
1386
- _remainDrawingSize(transform, updateDrawings, drawing, skeleton) {
1387
- const newSheetTransform = transformToDrawingPosition({ ...transform }, skeleton);
1388
- if (newSheetTransform) {
1389
- const axisAlignSheetTransform = transformToAxisAlignPosition({ ...transform }, skeleton);
1390
- updateDrawings.push({
1391
- ...drawing,
1392
- sheetTransform: newSheetTransform,
1393
- axisAlignSheetTransform
1394
- });
1395
- }
1396
- }
1397
- _getDrawingUndoForColVisible(unitId, subUnitId, ranges) {
1398
- const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1399
- if (!sheetSkeletonParam) return {
1400
- redos: [],
1401
- undos: []
1402
- };
1403
- const { skeleton } = sheetSkeletonParam;
1404
- const drawingData = this._drawingManagerService.getDrawingData(unitId, subUnitId);
1405
- const updateDrawings = [];
1406
- const preUpdateDrawings = [];
1407
- Object.keys(drawingData).forEach((drawingId) => {
1408
- const drawing = drawingData[drawingId];
1409
- const { sheetTransform, transform, anchorType = "0" } = drawing;
1410
- if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1411
- else {
1412
- const { from, to } = sheetTransform;
1413
- const { row: fromRow, column: fromColumn } = from;
1414
- const { row: toRow, column: toColumn } = to;
1415
- for (let i = 0; i < ranges.length; i++) {
1416
- const { startColumn, endColumn } = ranges[i];
1417
- if (toColumn < startColumn) continue;
1418
- if (anchorType === "0") {
1419
- let newSheetTransform = null;
1420
- let newTransform = null;
1421
- if (fromColumn >= startColumn && fromColumn <= endColumn) {
1422
- const selectionCell = attachRangeWithCoord(skeleton, {
1423
- startColumn: fromColumn,
1424
- endColumn,
1425
- startRow: fromRow,
1426
- endRow: toRow
1427
- });
1428
- newTransform = {
1429
- ...transform,
1430
- left: selectionCell.startX
1431
- };
1432
- }
1433
- if (newTransform) {
1434
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1435
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1436
- if (newSheetTransform && newTransform) {
1437
- updateDrawings.push({
1438
- ...drawing,
1439
- sheetTransform: newSheetTransform,
1440
- transform: newTransform,
1441
- axisAlignSheetTransform
1442
- });
1443
- break;
1444
- }
1445
- }
1446
- continue;
1447
- }
1448
- if (fromColumn >= startColumn && toColumn <= endColumn) continue;
1449
- let newSheetTransform = null;
1450
- let newTransform = null;
1451
- if (fromColumn >= startColumn && fromColumn <= endColumn) {
1452
- const selectionCell = attachRangeWithCoord(skeleton, {
1453
- startColumn: fromColumn,
1454
- endColumn,
1455
- startRow: fromRow,
1456
- endRow: toRow
1457
- });
1458
- newTransform = {
1459
- ...transform,
1460
- left: (selectionCell === null || selectionCell === void 0 ? void 0 : selectionCell.startX) || 0,
1461
- width: ((transform === null || transform === void 0 ? void 0 : transform.width) || 0) - selectionCell.endX + selectionCell.startX
1462
- };
1463
- } else if (toColumn >= startColumn && toColumn <= endColumn) {
1464
- const selectionCell = attachRangeWithCoord(skeleton, {
1465
- startColumn,
1466
- endColumn: toColumn,
1467
- startRow: fromRow,
1468
- endRow: toRow
1469
- });
1470
- newTransform = {
1471
- ...transform,
1472
- left: selectionCell.startX - ((transform === null || transform === void 0 ? void 0 : transform.width) || 0)
1473
- };
1474
- } else {
1475
- const selectionCell = attachRangeWithCoord(skeleton, {
1476
- startColumn,
1477
- endColumn,
1478
- startRow: fromRow,
1479
- endRow: toRow
1480
- });
1481
- newTransform = {
1482
- ...transform,
1483
- width: ((transform === null || transform === void 0 ? void 0 : transform.width) || 0) - selectionCell.endX + selectionCell.startX
1484
- };
1485
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1486
- if (newSheetTransform && newTransform) {
1487
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1488
- preUpdateDrawings.push({
1489
- ...drawing,
1490
- sheetTransform: newSheetTransform,
1491
- transform: newTransform,
1492
- axisAlignSheetTransform
1493
- });
1494
- break;
1495
- }
1496
- }
1497
- if (newTransform) newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1498
- if (newTransform && newSheetTransform) {
1499
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1500
- updateDrawings.push({
1501
- ...drawing,
1502
- sheetTransform: newSheetTransform,
1503
- transform: newTransform,
1504
- axisAlignSheetTransform
1505
- });
1506
- break;
1507
- } else this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1508
- }
1509
- }
1510
- });
1511
- return this._finalizePlan(unitId, subUnitId, [...preUpdateDrawings, ...updateDrawings]);
1512
- }
1513
1468
  _createUndoAndRedoMutation(unitId, subUnitId, updateDrawings) {
1514
1469
  return this._finalizePlan(unitId, subUnitId, updateDrawings);
1515
1470
  }
1516
- _getDrawingUndoForRowVisible(unitId, subUnitId, ranges) {
1517
- const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1518
- if (!sheetSkeletonParam) return {
1519
- redos: [],
1520
- undos: []
1521
- };
1522
- const { skeleton } = sheetSkeletonParam;
1523
- const drawingData = this._drawingManagerService.getDrawingData(unitId, subUnitId);
1524
- const updateDrawings = [];
1525
- const preUpdateDrawings = [];
1526
- Object.keys(drawingData).forEach((drawingId) => {
1527
- const drawing = drawingData[drawingId];
1528
- const { sheetTransform, transform, anchorType = "0" } = drawing;
1529
- if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1530
- else {
1531
- const { from, to } = sheetTransform;
1532
- const { row: fromRow, column: fromColumn } = from;
1533
- const { row: toRow, column: toColumn } = to;
1534
- for (let i = 0; i < ranges.length; i++) {
1535
- const { startRow, endRow } = ranges[i];
1536
- if (toRow < startRow) continue;
1537
- if (anchorType === "0") {
1538
- let newSheetTransform = null;
1539
- let newTransform = null;
1540
- if (fromRow >= startRow && fromRow <= endRow) {
1541
- const selectionCell = attachRangeWithCoord(skeleton, {
1542
- startColumn: fromColumn,
1543
- endColumn: toColumn,
1544
- startRow: fromRow,
1545
- endRow
1546
- });
1547
- newTransform = {
1548
- ...transform,
1549
- top: selectionCell.startY
1550
- };
1551
- }
1552
- if (newTransform) {
1553
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1554
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1555
- if (newSheetTransform && newTransform) {
1556
- updateDrawings.push({
1557
- ...drawing,
1558
- sheetTransform: newSheetTransform,
1559
- transform: newTransform,
1560
- axisAlignSheetTransform
1561
- });
1562
- break;
1563
- }
1564
- }
1565
- continue;
1566
- }
1567
- if (fromRow >= startRow && toRow <= endRow) continue;
1568
- let newSheetTransform = null;
1569
- let newTransform = null;
1570
- if (fromRow >= startRow && fromRow <= endRow) {
1571
- const selectionCell = attachRangeWithCoord(skeleton, {
1572
- startColumn: fromColumn,
1573
- endColumn: toColumn,
1574
- startRow: fromRow,
1575
- endRow
1576
- });
1577
- newTransform = {
1578
- ...transform,
1579
- top: (selectionCell === null || selectionCell === void 0 ? void 0 : selectionCell.startY) || 0,
1580
- height: ((transform === null || transform === void 0 ? void 0 : transform.height) || 0) - selectionCell.endY + selectionCell.startY
1581
- };
1582
- } else if (toRow >= startRow && toRow <= endRow) {
1583
- const selectionCell = attachRangeWithCoord(skeleton, {
1584
- startColumn: fromColumn,
1585
- endColumn: toColumn,
1586
- startRow,
1587
- endRow: toRow
1588
- });
1589
- newTransform = {
1590
- ...transform,
1591
- top: selectionCell.startY - ((transform === null || transform === void 0 ? void 0 : transform.height) || 0)
1592
- };
1593
- } else {
1594
- const selectionCell = attachRangeWithCoord(skeleton, {
1595
- startColumn: fromColumn,
1596
- endColumn: toColumn,
1597
- startRow,
1598
- endRow
1599
- });
1600
- newTransform = {
1601
- ...transform,
1602
- height: ((transform === null || transform === void 0 ? void 0 : transform.height) || 0) - selectionCell.endY + selectionCell.startY
1603
- };
1604
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1605
- if (newSheetTransform && newTransform) {
1606
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1607
- preUpdateDrawings.push({
1608
- ...drawing,
1609
- sheetTransform: newSheetTransform,
1610
- transform: newTransform,
1611
- axisAlignSheetTransform
1612
- });
1613
- break;
1614
- }
1615
- }
1616
- if (newTransform) newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1617
- if (newTransform && newSheetTransform) {
1618
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1619
- updateDrawings.push({
1620
- ...drawing,
1621
- sheetTransform: newSheetTransform,
1622
- transform: newTransform,
1623
- axisAlignSheetTransform
1624
- });
1625
- break;
1626
- } else this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1627
- }
1628
- }
1629
- });
1630
- return this._finalizePlan(unitId, subUnitId, [...preUpdateDrawings, ...updateDrawings]);
1631
- }
1632
1471
  _getDrawingUndoForRowAndColSize(unitId, subUnitId, ranges) {
1633
1472
  const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1634
1473
  if (!sheetSkeletonParam) return {
@@ -1640,27 +1479,9 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1640
1479
  const updateDrawings = [];
1641
1480
  Object.keys(drawingData).forEach((drawingId) => {
1642
1481
  const drawing = drawingData[drawingId];
1643
- const { sheetTransform, transform, anchorType = "0" } = drawing;
1644
- if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1645
- else {
1646
- const { row: toRow, column: toColumn } = sheetTransform.to;
1647
- for (let i = 0; i < ranges.length; i++) {
1648
- const { startRow, startColumn } = ranges[i];
1649
- if (toRow < startRow || toColumn < startColumn) continue;
1650
- if (anchorType === "0") {
1651
- updateDrawings.push(applySheetDrawingPlacement(drawing, getSheetDrawingPlacement(drawing), skeleton));
1652
- break;
1653
- }
1654
- const newTransform = drawingPositionToTransform({ ...sheetTransform }, sheetSkeletonParam);
1655
- if (newTransform) {
1656
- updateDrawings.push({
1657
- ...drawing,
1658
- transform: newTransform
1659
- });
1660
- break;
1661
- }
1662
- }
1663
- }
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);
1664
1485
  });
1665
1486
  if (updateDrawings.length === 0) return {
1666
1487
  redos: [],
@@ -1897,7 +1718,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1897
1718
  };
1898
1719
  newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1899
1720
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1900
- } else if (toColumn >= colEndIndex) {
1721
+ } else if (toColumn >= colStartIndex) {
1901
1722
  if (anchorType === "1") {
1902
1723
  newSheetTransform = {
1903
1724
  from: { ...from },
@@ -1913,12 +1734,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1913
1734
  axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
1914
1735
  };
1915
1736
  }
1916
- if (newSheetTransform && newTransform) return {
1917
- newSheetTransform,
1918
- newTransform,
1919
- axisAlignSheetTransform
1920
- };
1921
- return null;
1737
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
1922
1738
  }
1923
1739
  _shrinkCol(colStartIndex, colEndIndex, options) {
1924
1740
  const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
@@ -1946,8 +1762,9 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1946
1762
  column: toColumn - colCount
1947
1763
  }
1948
1764
  };
1765
+ if (anchorType === "0") return this._resolveShiftedPositionDrawing(newSheetTransform, transform, sheetSkeletonParam);
1949
1766
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1950
- } else if (fromColumn >= colStartIndex && toColumn <= colEndIndex) return null;
1767
+ } else if (anchorType === "1" && fromColumn >= colStartIndex && toColumn <= colEndIndex) return null;
1951
1768
  else if (fromColumn < colStartIndex && toColumn > colEndIndex) {
1952
1769
  if (anchorType === "1") {
1953
1770
  newSheetTransform = {
@@ -1978,49 +1795,28 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1978
1795
  };
1979
1796
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1980
1797
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1981
- } else if (fromColumn === colStartIndex) newTransform = {
1982
- ...transform,
1983
- left: (transform.left || 0) - sheetTransform.from.columnOffset
1984
- };
1985
- else {
1986
- const selectionCell = attachRangeWithCoord(skeleton, {
1987
- startColumn: colStartIndex,
1988
- endColumn: fromColumn - 1,
1989
- startRow: from.row,
1990
- endRow: to.row
1991
- });
1992
- newTransform = {
1993
- ...transform,
1994
- left: (transform.left || 0) - selectionCell.endX + selectionCell.startX - sheetTransform.from.columnOffset
1995
- };
1996
- }
1997
- if (!newSheetTransform) {
1998
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1999
- axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2000
- }
1798
+ } else return this._resolveShiftedPositionDrawing({
1799
+ ...sheetTransform,
1800
+ from: {
1801
+ ...from,
1802
+ column: colStartIndex,
1803
+ columnOffset: 0
1804
+ }
1805
+ }, transform, sheetSkeletonParam);
2001
1806
  } else if (toColumn >= colStartIndex && toColumn <= colEndIndex && anchorType === "1") {
2002
- const selectionCell = attachRangeWithCoord(skeleton, {
2003
- startColumn: colStartIndex - 1,
2004
- endColumn: colStartIndex - 1,
2005
- startRow: from.row,
2006
- endRow: to.row
2007
- });
1807
+ const boundaryColumn = Math.min(colStartIndex, skeleton.worksheet.getColumnCount() - 1);
1808
+ const boundaryCell = skeleton.getNoMergeCellWithCoordByIndex(from.row, boundaryColumn);
2008
1809
  newSheetTransform = {
2009
1810
  from: { ...from },
2010
1811
  to: {
2011
1812
  ...to,
2012
- column: colStartIndex - 1,
2013
- columnOffset: selectionCell.endX - selectionCell.startX
1813
+ column: boundaryColumn,
1814
+ columnOffset: boundaryColumn < colStartIndex ? boundaryCell.endX - boundaryCell.startX : 0
2014
1815
  }
2015
1816
  };
2016
1817
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2017
1818
  }
2018
- if (newSheetTransform && newTransform) return {
2019
- newSheetTransform,
2020
- newTransform,
2021
- axisAlignSheetTransform
2022
- };
2023
- return null;
1819
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
2024
1820
  }
2025
1821
  _expandRow(rowStartIndex, rowEndIndex, options) {
2026
1822
  const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
@@ -2050,7 +1846,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2050
1846
  };
2051
1847
  newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
2052
1848
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2053
- } else if (toRow >= rowEndIndex) {
1849
+ } else if (toRow >= rowStartIndex) {
2054
1850
  if (anchorType === "1") {
2055
1851
  newSheetTransform = {
2056
1852
  from: { ...from },
@@ -2066,12 +1862,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2066
1862
  axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
2067
1863
  };
2068
1864
  }
2069
- if (newSheetTransform && newTransform) return {
2070
- newSheetTransform,
2071
- newTransform,
2072
- axisAlignSheetTransform
2073
- };
2074
- return null;
1865
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
2075
1866
  }
2076
1867
  _shrinkRow(rowStartIndex, rowEndIndex, options) {
2077
1868
  const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
@@ -2099,8 +1890,9 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2099
1890
  row: toRow - rowCount
2100
1891
  }
2101
1892
  };
1893
+ if (anchorType === "0") return this._resolveShiftedPositionDrawing(newSheetTransform, transform, sheetSkeletonParam);
2102
1894
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2103
- } else if (fromRow >= rowStartIndex && toRow <= rowEndIndex) return null;
1895
+ } else if (anchorType === "1" && fromRow >= rowStartIndex && toRow <= rowEndIndex) return null;
2104
1896
  else if (fromRow < rowStartIndex && toRow > rowEndIndex) {
2105
1897
  if (anchorType === "1") {
2106
1898
  newSheetTransform = {
@@ -2131,67 +1923,108 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2131
1923
  };
2132
1924
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2133
1925
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2134
- } else if (fromRow === rowStartIndex) newTransform = {
2135
- ...transform,
2136
- top: (transform.top || 0) - sheetTransform.from.rowOffset
2137
- };
2138
- else {
2139
- const selectionCell = attachRangeWithCoord(skeleton, {
2140
- startRow: rowStartIndex,
2141
- endRow: fromRow - 1,
2142
- startColumn: from.column,
2143
- endColumn: to.column
2144
- });
2145
- newTransform = {
2146
- ...transform,
2147
- top: (transform.top || 0) - selectionCell.endY + selectionCell.startY - sheetTransform.from.rowOffset
2148
- };
2149
- }
2150
- if (!newSheetTransform) {
2151
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
2152
- axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2153
- }
1926
+ } else return this._resolveShiftedPositionDrawing({
1927
+ ...sheetTransform,
1928
+ from: {
1929
+ ...from,
1930
+ row: rowStartIndex,
1931
+ rowOffset: 0
1932
+ }
1933
+ }, transform, sheetSkeletonParam);
2154
1934
  } else if (toRow >= rowStartIndex && toRow <= rowEndIndex && anchorType === "1") {
2155
- const selectionCell = attachRangeWithCoord(skeleton, {
2156
- startColumn: from.column,
2157
- endColumn: from.column,
2158
- startRow: rowStartIndex - 1,
2159
- endRow: rowStartIndex - 1
2160
- });
1935
+ const boundaryRow = Math.min(rowStartIndex, skeleton.worksheet.getRowCount() - 1);
1936
+ const boundaryCell = skeleton.getNoMergeCellWithCoordByIndex(boundaryRow, from.column);
2161
1937
  newSheetTransform = {
2162
1938
  from: { ...from },
2163
1939
  to: {
2164
1940
  ...to,
2165
- row: rowStartIndex - 1,
2166
- rowOffset: selectionCell.endY - selectionCell.startY
1941
+ row: boundaryRow,
1942
+ rowOffset: boundaryRow < rowStartIndex ? boundaryCell.endY - boundaryCell.startY : 0
2167
1943
  }
2168
1944
  };
2169
1945
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2170
1946
  }
2171
- 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 {
2172
1971
  newSheetTransform,
2173
1972
  newTransform,
2174
- axisAlignSheetTransform
1973
+ axisAlignSheetTransform: axisAlignSheetTransform ?? transformToAxisAlignPosition(newTransform, skeleton)
2175
1974
  };
2176
- 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
+ });
2177
2001
  }
2178
2002
  _sheetRefreshListener() {
2179
2003
  this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
2180
2004
  if (!REFRESH_MUTATIONS.includes(command.id)) return;
2181
2005
  queueMicrotask(() => {
2182
- const params = command.params;
2183
- const target = getSheetCommandTarget(this._univerInstanceService, params);
2184
- if (!target) return;
2185
- const { unitId, subUnitId, worksheet } = target;
2186
- let ranges = [];
2187
- if ("ranges" in params) ranges = params.ranges;
2188
- else if ("rowsAutoHeightInfo" in params) ranges = params.rowsAutoHeightInfo.map((info) => ({
2189
- startRow: info.row,
2190
- endRow: info.row,
2191
- startColumn: 0,
2192
- endColumn: worksheet.getColumnCount() - 1
2193
- }));
2194
- 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
+ }
2195
2028
  });
2196
2029
  }));
2197
2030
  }
@@ -2202,43 +2035,26 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2202
2035
  const updateDrawings = [];
2203
2036
  Object.keys(drawingData).forEach((drawingId) => {
2204
2037
  const drawing = drawingData[drawingId];
2205
- const { sheetTransform, transform, anchorType = "0" } = drawing;
2206
- if (anchorType === "2") return true;
2207
- if (!sheetTransform) return true;
2208
- const { from, to } = sheetTransform;
2209
- const { row: fromRow, column: fromColumn } = from;
2210
- const { row: toRow, column: toColumn } = to;
2211
- for (let i = 0; i < ranges.length; i++) {
2212
- const { startRow, endRow, startColumn, endColumn } = ranges[i];
2213
- if (Rectangle.intersects({
2214
- startRow,
2215
- endRow,
2216
- startColumn,
2217
- endColumn
2218
- }, {
2219
- startRow: fromRow,
2220
- endRow: toRow,
2221
- startColumn: fromColumn,
2222
- endColumn: toColumn
2223
- }) || fromRow > endRow || fromColumn > endColumn) {
2224
- if (anchorType === "0") {
2225
- updateDrawings.push(applySheetDrawingPlacement(drawing, getSheetDrawingPlacement(drawing), sheetSkeletonParam.skeleton));
2226
- break;
2227
- }
2228
- const newTransform = drawingPositionToTransform(sheetTransform, sheetSkeletonParam);
2229
- updateDrawings.push({
2230
- ...drawing,
2231
- transform: {
2232
- ...transform,
2233
- left: newTransform === null || newTransform === void 0 ? void 0 : newTransform.left,
2234
- top: newTransform === null || newTransform === void 0 ? void 0 : newTransform.top,
2235
- width: newTransform === null || newTransform === void 0 ? void 0 : newTransform.width,
2236
- height: newTransform === null || newTransform === void 0 ? void 0 : newTransform.height
2237
- }
2238
- });
2239
- break;
2240
- }
2241
- }
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);
2242
2058
  });
2243
2059
  this._finalizePlan(unitId, subUnitId, updateDrawings, [], "refresh", command);
2244
2060
  }
@@ -2250,7 +2066,8 @@ SheetDrawingTransformAffectedController = __decorate([
2250
2066
  __decorateParam(3, ISheetDrawingService),
2251
2067
  __decorateParam(4, IDrawingManagerService),
2252
2068
  __decorateParam(5, IUniverInstanceService),
2253
- __decorateParam(6, Inject(SheetDrawingTransformPlanService))
2069
+ __decorateParam(6, Inject(SheetDrawingTransformPlanService)),
2070
+ __decorateParam(7, ILogService)
2254
2071
  ], SheetDrawingTransformAffectedController);
2255
2072
 
2256
2073
  //#endregion
@@ -2286,4 +2103,4 @@ UniverSheetsDrawingPlugin = __decorate([
2286
2103
  ], UniverSheetsDrawingPlugin);
2287
2104
 
2288
2105
  //#endregion
2289
- 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 };