@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/cjs/index.js CHANGED
@@ -37,8 +37,14 @@ function transformToDrawingPosition(transform, skeleton) {
37
37
  angle,
38
38
  skewX,
39
39
  skewY,
40
- from: skeleton.getCellIndexAndOffsetByPosition(left, top),
41
- to: skeleton.getCellIndexAndOffsetByPosition(left + width, top + height)
40
+ from: skeleton.getCellIndexAndOffsetByPosition(left, top, 1, 1, {
41
+ x: 0,
42
+ y: 0
43
+ }),
44
+ to: skeleton.getCellIndexAndOffsetByPosition(left + width, top + height, 1, 1, {
45
+ x: 0,
46
+ y: 0
47
+ })
42
48
  };
43
49
  }
44
50
  /**
@@ -340,6 +346,12 @@ const SetDrawingArrangeCommand = {
340
346
 
341
347
  //#endregion
342
348
  //#region src/services/sheet-drawing-placement.ts
349
+ const PLACEMENT_ERROR = {
350
+ CELL_INVALID: "SHEET_DRAWING_PLACEMENT_CELL_INVALID",
351
+ EXTENT_INVALID: "SHEET_DRAWING_PLACEMENT_EXTENT_INVALID",
352
+ KIND_INVALID: "SHEET_DRAWING_PLACEMENT_KIND_INVALID",
353
+ POSITION_INVALID: "SHEET_DRAWING_PLACEMENT_POSITION_INVALID"
354
+ };
343
355
  function getSheetDrawingPlacement(drawing) {
344
356
  var _drawing$transform5, _drawing$transform6;
345
357
  const anchorType = drawing.anchorType ?? "0";
@@ -366,7 +378,57 @@ function getSheetDrawingPlacement(drawing) {
366
378
  };
367
379
  }
368
380
  function applySheetDrawingPlacement(drawing, input, skeleton) {
369
- const placement = normalizePlacement(input, skeleton, drawing.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE || drawing.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_DOM);
381
+ return resolveSheetDrawingPlacement(drawing, normalizePlacement(input, skeleton, requiresDrawingArea(drawing)), skeleton);
382
+ }
383
+ /** Refresh layout-derived geometry without changing the drawing's anchor semantics. */
384
+ function refreshSheetDrawingPlacement(drawing, skeleton) {
385
+ const result = tryRefreshSheetDrawingPlacement(drawing, skeleton);
386
+ if (!result.ok) throw createPlacementError(result);
387
+ return result.drawing;
388
+ }
389
+ /** Validate persisted markers before any caller reads them to select a refresh range. */
390
+ function validateSheetDrawingPlacement(drawing) {
391
+ var _drawing$sheetTransfo, _drawing$sheetTransfo2;
392
+ if (!drawing || typeof drawing !== "object") return {
393
+ ok: false,
394
+ reason: PLACEMENT_ERROR.KIND_INVALID
395
+ };
396
+ const anchorType = drawing.anchorType ?? "0";
397
+ if (anchorType === "2") return;
398
+ if (anchorType !== "0" && anchorType !== "1") return {
399
+ ok: false,
400
+ reason: PLACEMENT_ERROR.KIND_INVALID
401
+ };
402
+ 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);
403
+ if (markerFailure) return markerFailure;
404
+ return validatePlacement(getSheetDrawingPlacement(drawing), requiresDrawingArea(drawing));
405
+ }
406
+ /** Expected snapshot errors are results; unexpected calculation failures are caught by the task owner. */
407
+ function tryRefreshSheetDrawingPlacement(drawing, skeleton) {
408
+ var _resolved$transform, _resolved$transform2;
409
+ const failure = validateSheetDrawingPlacement(drawing);
410
+ if (failure) return failure;
411
+ if (drawing.anchorType === "2") return {
412
+ ok: true,
413
+ drawing
414
+ };
415
+ const resolved = resolveSheetDrawingPlacement(drawing, getSheetDrawingPlacement(drawing), skeleton);
416
+ 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);
417
+ if (extentFailure) return extentFailure;
418
+ return {
419
+ ok: true,
420
+ drawing: {
421
+ ...drawing,
422
+ sheetTransform: resolved.sheetTransform,
423
+ transform: resolved.transform,
424
+ axisAlignSheetTransform: resolved.axisAlignSheetTransform
425
+ }
426
+ };
427
+ }
428
+ function requiresDrawingArea(drawing) {
429
+ return drawing.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE || drawing.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_DOM;
430
+ }
431
+ function resolveSheetDrawingPlacement(drawing, placement, skeleton) {
370
432
  if (placement.kind === "2") {
371
433
  const transform = withExistingTransform(drawing.transform, placement);
372
434
  const sheetTransform = absoluteSheetTransform(placement, drawing.sheetTransform);
@@ -380,29 +442,43 @@ function applySheetDrawingPlacement(drawing, input, skeleton) {
380
442
  }
381
443
  if (!skeleton) throw new Error("SHEET_DRAWING_PLACEMENT_SKELETON_REQUIRED");
382
444
  if (placement.kind === "0") {
383
- const converted = (0, _univerjs_sheets.convertPositionCellToSheetOverGrid)(drawing.unitId, drawing.subUnitId, placement.from, placement.width, placement.height, skeleton);
384
- const sheetTransform = withExistingSheetTransform(drawing.sheetTransform, converted.sheetTransform);
445
+ const converted = (0, _univerjs_sheets.convertPositionCellToSheetOverGrid)(drawing.unitId, drawing.subUnitId, getVisibleCellPosition(placement.from, skeleton), placement.width, placement.height, skeleton);
446
+ const sheetTransform = withExistingSheetTransform(drawing.sheetTransform, {
447
+ from: placement.from,
448
+ to: converted.sheetTransform.to
449
+ });
385
450
  const transform = withExistingTransform(drawing.transform, converted.transform);
386
451
  return {
387
452
  ...drawing,
388
453
  anchorType: "0",
389
454
  sheetTransform,
390
455
  transform,
391
- axisAlignSheetTransform: transformToAxisAlignPosition(transform, skeleton)
456
+ axisAlignSheetTransform: withExistingSheetTransform(drawing.axisAlignSheetTransform, transformToAxisAlignPosition(transform, skeleton))
392
457
  };
393
458
  }
394
459
  const sheetTransform = withExistingSheetTransform(drawing.sheetTransform, {
395
460
  from: placement.from,
396
461
  to: placement.to
397
462
  });
398
- const bounds = (0, _univerjs_sheets.convertPositionSheetOverGridToAbsolute)(drawing.unitId, drawing.subUnitId, sheetTransform, skeleton);
463
+ const bounds = (0, _univerjs_sheets.convertPositionSheetOverGridToAbsolute)(drawing.unitId, drawing.subUnitId, {
464
+ from: getVisibleCellPosition(placement.from, skeleton),
465
+ to: getVisibleCellPosition(placement.to, skeleton)
466
+ }, skeleton);
399
467
  const transform = withExistingTransform(drawing.transform, bounds);
400
468
  return {
401
469
  ...drawing,
402
470
  anchorType: "1",
403
471
  sheetTransform,
404
472
  transform,
405
- axisAlignSheetTransform: transformToAxisAlignPosition(transform, skeleton)
473
+ axisAlignSheetTransform: withExistingSheetTransform(drawing.axisAlignSheetTransform, transformToAxisAlignPosition(transform, skeleton))
474
+ };
475
+ }
476
+ function getVisibleCellPosition(position, skeleton) {
477
+ const cell = skeleton.getNoMergeCellWithCoordByIndex(position.row, position.column);
478
+ return {
479
+ ...position,
480
+ columnOffset: cell.startX === cell.endX ? 0 : position.columnOffset,
481
+ rowOffset: cell.startY === cell.endY ? 0 : position.rowOffset
406
482
  };
407
483
  }
408
484
  /**
@@ -414,14 +490,14 @@ function normalizeSheetDrawingPlacement(input, skeleton) {
414
490
  }
415
491
  function normalizePlacement(input, skeleton, requiresArea) {
416
492
  if (!("bounds" in input)) {
417
- validatePlacement(input, requiresArea);
418
- if (input.kind === "1" && skeleton) validateBounds((0, _univerjs_sheets.convertPositionSheetOverGridToAbsolute)(skeleton.worksheet.getUnitId(), skeleton.worksheet.getSheetId(), {
493
+ assertValidPlacement(validatePlacement(input, requiresArea));
494
+ if (input.kind === "1" && skeleton) assertValidPlacement(validateBounds((0, _univerjs_sheets.convertPositionSheetOverGridToAbsolute)(skeleton.worksheet.getUnitId(), skeleton.worksheet.getSheetId(), {
419
495
  from: input.from,
420
496
  to: input.to
421
- }, skeleton), requiresArea);
497
+ }, skeleton), requiresArea));
422
498
  return input;
423
499
  }
424
- validateBounds(input.bounds, requiresArea);
500
+ assertValidPlacement(validateBounds(input.bounds, requiresArea));
425
501
  if (input.kind === "2") return {
426
502
  kind: "2",
427
503
  ...input.bounds
@@ -439,7 +515,7 @@ function normalizePlacement(input, skeleton, requiresArea) {
439
515
  from: sheetTransform.from,
440
516
  to: sheetTransform.to
441
517
  };
442
- throw new Error("SHEET_DRAWING_PLACEMENT_KIND_INVALID");
518
+ throw new Error(PLACEMENT_ERROR.KIND_INVALID);
443
519
  }
444
520
  function withExistingSheetTransform(current, placement) {
445
521
  return {
@@ -475,36 +551,50 @@ function absoluteSheetTransform(placement, current) {
475
551
  };
476
552
  }
477
553
  function validatePlacement(placement, requiresArea) {
478
- if (placement.kind === "0") {
479
- validateCellPosition(placement.from);
480
- validateExtent(placement.width, placement.height, requiresArea);
481
- return;
482
- }
483
- if (placement.kind === "1") {
484
- validateCellPosition(placement.from);
485
- validateCellPosition(placement.to);
486
- return;
487
- }
554
+ if (placement.kind === "0") return validateCellPosition(placement.from) ?? validateExtent(placement.width, placement.height, requiresArea);
555
+ if (placement.kind === "1") return validateCellPosition(placement.from) ?? validateCellPosition(placement.to);
488
556
  if (placement.kind === "2") {
489
- if (!Number.isFinite(placement.left) || !Number.isFinite(placement.top)) throw new TypeError("SHEET_DRAWING_PLACEMENT_POSITION_INVALID");
490
- validateExtent(placement.width, placement.height, requiresArea);
491
- return;
557
+ if (!Number.isFinite(placement.left) || !Number.isFinite(placement.top)) return {
558
+ ok: false,
559
+ reason: PLACEMENT_ERROR.POSITION_INVALID
560
+ };
561
+ return validateExtent(placement.width, placement.height, requiresArea);
492
562
  }
493
- throw new Error("SHEET_DRAWING_PLACEMENT_KIND_INVALID");
563
+ return {
564
+ ok: false,
565
+ reason: PLACEMENT_ERROR.KIND_INVALID
566
+ };
494
567
  }
495
568
  function validateBounds(bounds, requiresArea) {
496
- if (!Number.isFinite(bounds.left) || !Number.isFinite(bounds.top)) throw new TypeError("SHEET_DRAWING_PLACEMENT_POSITION_INVALID");
497
- validateExtent(bounds.width, bounds.height, requiresArea);
569
+ if (!bounds || !Number.isFinite(bounds.left) || !Number.isFinite(bounds.top)) return {
570
+ ok: false,
571
+ reason: PLACEMENT_ERROR.POSITION_INVALID
572
+ };
573
+ return validateExtent(bounds.width, bounds.height, requiresArea);
498
574
  }
499
575
  function validateCellPosition(position) {
500
- 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");
576
+ 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 {
577
+ ok: false,
578
+ reason: PLACEMENT_ERROR.CELL_INVALID
579
+ };
501
580
  }
502
- function validateExtent(width, height, requiresArea) {
503
- const hasInvalidZeroExtent = requiresArea ? width === 0 || height === 0 : width === 0 && height === 0;
504
- if (!Number.isFinite(width) || !Number.isFinite(height) || width < 0 || height < 0 || hasInvalidZeroExtent) throw Object.assign(/* @__PURE__ */ new Error("SHEET_DRAWING_PLACEMENT_EXTENT_INVALID"), {
505
- width,
506
- height
507
- });
581
+ function validateExtent(width, height, requiresArea, allowCollapsed = false) {
582
+ const hasInvalidZeroExtent = !allowCollapsed && (requiresArea ? width === 0 || height === 0 : width === 0 && height === 0);
583
+ if (!Number.isFinite(width) || !Number.isFinite(height) || width < 0 || height < 0 || hasInvalidZeroExtent) return {
584
+ ok: false,
585
+ reason: PLACEMENT_ERROR.EXTENT_INVALID,
586
+ details: {
587
+ width,
588
+ height
589
+ }
590
+ };
591
+ }
592
+ function assertValidPlacement(failure) {
593
+ if (failure) throw createPlacementError(failure);
594
+ }
595
+ function createPlacementError(failure) {
596
+ const error = failure.reason === PLACEMENT_ERROR.POSITION_INVALID ? new TypeError(failure.reason) : new Error(failure.reason);
597
+ return Object.assign(error, failure.details);
508
598
  }
509
599
 
510
600
  //#endregion
@@ -935,7 +1025,7 @@ SheetsDrawingLoadController = __decorate([
935
1025
  //#endregion
936
1026
  //#region package.json
937
1027
  var name = "@univerjs/sheets-drawing";
938
- var version = "1.1.0";
1028
+ var version = "1.2.0";
939
1029
 
940
1030
  //#endregion
941
1031
  //#region src/config/config.ts
@@ -1069,7 +1159,7 @@ const REFRESH_MUTATIONS = [
1069
1159
  _univerjs_sheets.SetWorksheetColWidthMutation.id
1070
1160
  ];
1071
1161
  let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffectedController extends _univerjs_core.Disposable {
1072
- constructor(_commandService, _sheetSkeletonService, _sheetInterceptorService, _sheetDrawingService, _drawingManagerService, _univerInstanceService, _transformPlanService) {
1162
+ constructor(_commandService, _sheetSkeletonService, _sheetInterceptorService, _sheetDrawingService, _drawingManagerService, _univerInstanceService, _transformPlanService, _logService) {
1073
1163
  super();
1074
1164
  this._commandService = _commandService;
1075
1165
  this._sheetSkeletonService = _sheetSkeletonService;
@@ -1078,6 +1168,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1078
1168
  this._drawingManagerService = _drawingManagerService;
1079
1169
  this._univerInstanceService = _univerInstanceService;
1080
1170
  this._transformPlanService = _transformPlanService;
1171
+ this._logService = _logService;
1081
1172
  _defineProperty(this, "_currentCommand", {
1082
1173
  id: "",
1083
1174
  params: {}
@@ -1133,13 +1224,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1133
1224
  } else if (id === _univerjs_sheets.InsertRangeMoveRightCommand.id) {
1134
1225
  const { range } = params;
1135
1226
  return this._getRangeMoveUndo(range, 3);
1136
- } else if (id === _univerjs_sheets.SetRowHiddenCommand.id || id === _univerjs_sheets.SetSpecificRowsVisibleCommand.id) {
1137
- const { unitId, subUnitId, ranges } = params;
1138
- return this._getDrawingUndoForRowVisible(unitId, subUnitId, ranges);
1139
- } else if (id === _univerjs_sheets.SetColHiddenCommand.id || id === _univerjs_sheets.SetSpecificColsVisibleCommand.id) {
1140
- const { unitId, subUnitId, ranges } = params;
1141
- return this._getDrawingUndoForColVisible(unitId, subUnitId, ranges);
1142
- } else if (id === _univerjs_sheets.DeltaRowHeightCommand.id || id === _univerjs_sheets.DeltaColumnWidthCommand.id || id === _univerjs_sheets.SetRowHeightCommand.id || id === _univerjs_sheets.SetColWidthCommand.id) {
1227
+ } else if (id === _univerjs_sheets.SetRowHiddenCommand.id || id === _univerjs_sheets.SetSpecificRowsVisibleCommand.id || id === _univerjs_sheets.SetColHiddenCommand.id || id === _univerjs_sheets.SetSpecificColsVisibleCommand.id || id === _univerjs_sheets.DeltaRowHeightCommand.id || id === _univerjs_sheets.DeltaColumnWidthCommand.id || id === _univerjs_sheets.SetRowHeightCommand.id || id === _univerjs_sheets.SetColWidthCommand.id) {
1143
1228
  const { unitId, subUnitId, ranges } = params;
1144
1229
  return this._getDrawingUndoForRowAndColSize(unitId, subUnitId, ranges);
1145
1230
  }
@@ -1370,266 +1455,20 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1370
1455
  newTransform = param === null || param === void 0 ? void 0 : param.newTransform;
1371
1456
  axisAlignSheetTransform = (param === null || param === void 0 ? void 0 : param.axisAlignSheetTransform) ?? void 0;
1372
1457
  }
1373
- if (newSheetTransform && newTransform) {
1374
- const newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1375
- updateDrawings.push({
1376
- ...drawing,
1377
- sheetTransform: newSheetTransform,
1378
- transform: newTransform,
1379
- axisAlignSheetTransform
1380
- });
1381
- }
1458
+ if (newSheetTransform && newTransform) updateDrawings.push({
1459
+ ...drawing,
1460
+ sheetTransform: newSheetTransform,
1461
+ transform: newTransform,
1462
+ axisAlignSheetTransform
1463
+ });
1382
1464
  return {
1383
1465
  updateDrawings,
1384
1466
  deleteDrawings
1385
1467
  };
1386
1468
  }
1387
- _remainDrawingSize(transform, updateDrawings, drawing, skeleton) {
1388
- const newSheetTransform = transformToDrawingPosition({ ...transform }, skeleton);
1389
- if (newSheetTransform) {
1390
- const axisAlignSheetTransform = transformToAxisAlignPosition({ ...transform }, skeleton);
1391
- updateDrawings.push({
1392
- ...drawing,
1393
- sheetTransform: newSheetTransform,
1394
- axisAlignSheetTransform
1395
- });
1396
- }
1397
- }
1398
- _getDrawingUndoForColVisible(unitId, subUnitId, ranges) {
1399
- const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1400
- if (!sheetSkeletonParam) return {
1401
- redos: [],
1402
- undos: []
1403
- };
1404
- const { skeleton } = sheetSkeletonParam;
1405
- const drawingData = this._drawingManagerService.getDrawingData(unitId, subUnitId);
1406
- const updateDrawings = [];
1407
- const preUpdateDrawings = [];
1408
- Object.keys(drawingData).forEach((drawingId) => {
1409
- const drawing = drawingData[drawingId];
1410
- const { sheetTransform, transform, anchorType = "0" } = drawing;
1411
- if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1412
- else {
1413
- const { from, to } = sheetTransform;
1414
- const { row: fromRow, column: fromColumn } = from;
1415
- const { row: toRow, column: toColumn } = to;
1416
- for (let i = 0; i < ranges.length; i++) {
1417
- const { startColumn, endColumn } = ranges[i];
1418
- if (toColumn < startColumn) continue;
1419
- if (anchorType === "0") {
1420
- let newSheetTransform = null;
1421
- let newTransform = null;
1422
- if (fromColumn >= startColumn && fromColumn <= endColumn) {
1423
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1424
- startColumn: fromColumn,
1425
- endColumn,
1426
- startRow: fromRow,
1427
- endRow: toRow
1428
- });
1429
- newTransform = {
1430
- ...transform,
1431
- left: selectionCell.startX
1432
- };
1433
- }
1434
- if (newTransform) {
1435
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1436
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1437
- if (newSheetTransform && newTransform) {
1438
- updateDrawings.push({
1439
- ...drawing,
1440
- sheetTransform: newSheetTransform,
1441
- transform: newTransform,
1442
- axisAlignSheetTransform
1443
- });
1444
- break;
1445
- }
1446
- }
1447
- continue;
1448
- }
1449
- if (fromColumn >= startColumn && toColumn <= endColumn) continue;
1450
- let newSheetTransform = null;
1451
- let newTransform = null;
1452
- if (fromColumn >= startColumn && fromColumn <= endColumn) {
1453
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1454
- startColumn: fromColumn,
1455
- endColumn,
1456
- startRow: fromRow,
1457
- endRow: toRow
1458
- });
1459
- newTransform = {
1460
- ...transform,
1461
- left: (selectionCell === null || selectionCell === void 0 ? void 0 : selectionCell.startX) || 0,
1462
- width: ((transform === null || transform === void 0 ? void 0 : transform.width) || 0) - selectionCell.endX + selectionCell.startX
1463
- };
1464
- } else if (toColumn >= startColumn && toColumn <= endColumn) {
1465
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1466
- startColumn,
1467
- endColumn: toColumn,
1468
- startRow: fromRow,
1469
- endRow: toRow
1470
- });
1471
- newTransform = {
1472
- ...transform,
1473
- left: selectionCell.startX - ((transform === null || transform === void 0 ? void 0 : transform.width) || 0)
1474
- };
1475
- } else {
1476
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1477
- startColumn,
1478
- endColumn,
1479
- startRow: fromRow,
1480
- endRow: toRow
1481
- });
1482
- newTransform = {
1483
- ...transform,
1484
- width: ((transform === null || transform === void 0 ? void 0 : transform.width) || 0) - selectionCell.endX + selectionCell.startX
1485
- };
1486
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1487
- if (newSheetTransform && newTransform) {
1488
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1489
- preUpdateDrawings.push({
1490
- ...drawing,
1491
- sheetTransform: newSheetTransform,
1492
- transform: newTransform,
1493
- axisAlignSheetTransform
1494
- });
1495
- break;
1496
- }
1497
- }
1498
- if (newTransform) newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1499
- if (newTransform && newSheetTransform) {
1500
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1501
- updateDrawings.push({
1502
- ...drawing,
1503
- sheetTransform: newSheetTransform,
1504
- transform: newTransform,
1505
- axisAlignSheetTransform
1506
- });
1507
- break;
1508
- } else this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1509
- }
1510
- }
1511
- });
1512
- return this._finalizePlan(unitId, subUnitId, [...preUpdateDrawings, ...updateDrawings]);
1513
- }
1514
1469
  _createUndoAndRedoMutation(unitId, subUnitId, updateDrawings) {
1515
1470
  return this._finalizePlan(unitId, subUnitId, updateDrawings);
1516
1471
  }
1517
- _getDrawingUndoForRowVisible(unitId, subUnitId, ranges) {
1518
- const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1519
- if (!sheetSkeletonParam) return {
1520
- redos: [],
1521
- undos: []
1522
- };
1523
- const { skeleton } = sheetSkeletonParam;
1524
- const drawingData = this._drawingManagerService.getDrawingData(unitId, subUnitId);
1525
- const updateDrawings = [];
1526
- const preUpdateDrawings = [];
1527
- Object.keys(drawingData).forEach((drawingId) => {
1528
- const drawing = drawingData[drawingId];
1529
- const { sheetTransform, transform, anchorType = "0" } = drawing;
1530
- if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1531
- else {
1532
- const { from, to } = sheetTransform;
1533
- const { row: fromRow, column: fromColumn } = from;
1534
- const { row: toRow, column: toColumn } = to;
1535
- for (let i = 0; i < ranges.length; i++) {
1536
- const { startRow, endRow } = ranges[i];
1537
- if (toRow < startRow) continue;
1538
- if (anchorType === "0") {
1539
- let newSheetTransform = null;
1540
- let newTransform = null;
1541
- if (fromRow >= startRow && fromRow <= endRow) {
1542
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1543
- startColumn: fromColumn,
1544
- endColumn: toColumn,
1545
- startRow: fromRow,
1546
- endRow
1547
- });
1548
- newTransform = {
1549
- ...transform,
1550
- top: selectionCell.startY
1551
- };
1552
- }
1553
- if (newTransform) {
1554
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1555
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1556
- if (newSheetTransform && newTransform) {
1557
- updateDrawings.push({
1558
- ...drawing,
1559
- sheetTransform: newSheetTransform,
1560
- transform: newTransform,
1561
- axisAlignSheetTransform
1562
- });
1563
- break;
1564
- }
1565
- }
1566
- continue;
1567
- }
1568
- if (fromRow >= startRow && toRow <= endRow) continue;
1569
- let newSheetTransform = null;
1570
- let newTransform = null;
1571
- if (fromRow >= startRow && fromRow <= endRow) {
1572
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1573
- startColumn: fromColumn,
1574
- endColumn: toColumn,
1575
- startRow: fromRow,
1576
- endRow
1577
- });
1578
- newTransform = {
1579
- ...transform,
1580
- top: (selectionCell === null || selectionCell === void 0 ? void 0 : selectionCell.startY) || 0,
1581
- height: ((transform === null || transform === void 0 ? void 0 : transform.height) || 0) - selectionCell.endY + selectionCell.startY
1582
- };
1583
- } else if (toRow >= startRow && toRow <= endRow) {
1584
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1585
- startColumn: fromColumn,
1586
- endColumn: toColumn,
1587
- startRow,
1588
- endRow: toRow
1589
- });
1590
- newTransform = {
1591
- ...transform,
1592
- top: selectionCell.startY - ((transform === null || transform === void 0 ? void 0 : transform.height) || 0)
1593
- };
1594
- } else {
1595
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1596
- startColumn: fromColumn,
1597
- endColumn: toColumn,
1598
- startRow,
1599
- endRow
1600
- });
1601
- newTransform = {
1602
- ...transform,
1603
- height: ((transform === null || transform === void 0 ? void 0 : transform.height) || 0) - selectionCell.endY + selectionCell.startY
1604
- };
1605
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1606
- if (newSheetTransform && newTransform) {
1607
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1608
- preUpdateDrawings.push({
1609
- ...drawing,
1610
- sheetTransform: newSheetTransform,
1611
- transform: newTransform,
1612
- axisAlignSheetTransform
1613
- });
1614
- break;
1615
- }
1616
- }
1617
- if (newTransform) newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1618
- if (newTransform && newSheetTransform) {
1619
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1620
- updateDrawings.push({
1621
- ...drawing,
1622
- sheetTransform: newSheetTransform,
1623
- transform: newTransform,
1624
- axisAlignSheetTransform
1625
- });
1626
- break;
1627
- } else this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1628
- }
1629
- }
1630
- });
1631
- return this._finalizePlan(unitId, subUnitId, [...preUpdateDrawings, ...updateDrawings]);
1632
- }
1633
1472
  _getDrawingUndoForRowAndColSize(unitId, subUnitId, ranges) {
1634
1473
  const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1635
1474
  if (!sheetSkeletonParam) return {
@@ -1641,27 +1480,9 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1641
1480
  const updateDrawings = [];
1642
1481
  Object.keys(drawingData).forEach((drawingId) => {
1643
1482
  const drawing = drawingData[drawingId];
1644
- const { sheetTransform, transform, anchorType = "0" } = drawing;
1645
- if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1646
- else {
1647
- const { row: toRow, column: toColumn } = sheetTransform.to;
1648
- for (let i = 0; i < ranges.length; i++) {
1649
- const { startRow, startColumn } = ranges[i];
1650
- if (toRow < startRow || toColumn < startColumn) continue;
1651
- if (anchorType === "0") {
1652
- updateDrawings.push(applySheetDrawingPlacement(drawing, getSheetDrawingPlacement(drawing), skeleton));
1653
- break;
1654
- }
1655
- const newTransform = drawingPositionToTransform({ ...sheetTransform }, sheetSkeletonParam);
1656
- if (newTransform) {
1657
- updateDrawings.push({
1658
- ...drawing,
1659
- transform: newTransform
1660
- });
1661
- break;
1662
- }
1663
- }
1664
- }
1483
+ if ((drawing === null || drawing === void 0 ? void 0 : drawing.anchorType) === "2") return;
1484
+ const refreshed = this._tryRefreshDrawingPlacement(drawing, skeleton, this._currentCommand.id, ({ to }) => ranges.some(({ startRow, startColumn }) => to.row >= startRow && to.column >= startColumn));
1485
+ if (refreshed) updateDrawings.push(refreshed);
1665
1486
  });
1666
1487
  if (updateDrawings.length === 0) return {
1667
1488
  redos: [],
@@ -1898,7 +1719,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1898
1719
  };
1899
1720
  newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1900
1721
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1901
- } else if (toColumn >= colEndIndex) {
1722
+ } else if (toColumn >= colStartIndex) {
1902
1723
  if (anchorType === "1") {
1903
1724
  newSheetTransform = {
1904
1725
  from: { ...from },
@@ -1914,12 +1735,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1914
1735
  axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
1915
1736
  };
1916
1737
  }
1917
- if (newSheetTransform && newTransform) return {
1918
- newSheetTransform,
1919
- newTransform,
1920
- axisAlignSheetTransform
1921
- };
1922
- return null;
1738
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
1923
1739
  }
1924
1740
  _shrinkCol(colStartIndex, colEndIndex, options) {
1925
1741
  const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
@@ -1947,8 +1763,9 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1947
1763
  column: toColumn - colCount
1948
1764
  }
1949
1765
  };
1766
+ if (anchorType === "0") return this._resolveShiftedPositionDrawing(newSheetTransform, transform, sheetSkeletonParam);
1950
1767
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1951
- } else if (fromColumn >= colStartIndex && toColumn <= colEndIndex) return null;
1768
+ } else if (anchorType === "1" && fromColumn >= colStartIndex && toColumn <= colEndIndex) return null;
1952
1769
  else if (fromColumn < colStartIndex && toColumn > colEndIndex) {
1953
1770
  if (anchorType === "1") {
1954
1771
  newSheetTransform = {
@@ -1979,49 +1796,28 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1979
1796
  };
1980
1797
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1981
1798
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1982
- } else if (fromColumn === colStartIndex) newTransform = {
1983
- ...transform,
1984
- left: (transform.left || 0) - sheetTransform.from.columnOffset
1985
- };
1986
- else {
1987
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1988
- startColumn: colStartIndex,
1989
- endColumn: fromColumn - 1,
1990
- startRow: from.row,
1991
- endRow: to.row
1992
- });
1993
- newTransform = {
1994
- ...transform,
1995
- left: (transform.left || 0) - selectionCell.endX + selectionCell.startX - sheetTransform.from.columnOffset
1996
- };
1997
- }
1998
- if (!newSheetTransform) {
1999
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
2000
- axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2001
- }
1799
+ } else return this._resolveShiftedPositionDrawing({
1800
+ ...sheetTransform,
1801
+ from: {
1802
+ ...from,
1803
+ column: colStartIndex,
1804
+ columnOffset: 0
1805
+ }
1806
+ }, transform, sheetSkeletonParam);
2002
1807
  } else if (toColumn >= colStartIndex && toColumn <= colEndIndex && anchorType === "1") {
2003
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
2004
- startColumn: colStartIndex - 1,
2005
- endColumn: colStartIndex - 1,
2006
- startRow: from.row,
2007
- endRow: to.row
2008
- });
1808
+ const boundaryColumn = Math.min(colStartIndex, skeleton.worksheet.getColumnCount() - 1);
1809
+ const boundaryCell = skeleton.getNoMergeCellWithCoordByIndex(from.row, boundaryColumn);
2009
1810
  newSheetTransform = {
2010
1811
  from: { ...from },
2011
1812
  to: {
2012
1813
  ...to,
2013
- column: colStartIndex - 1,
2014
- columnOffset: selectionCell.endX - selectionCell.startX
1814
+ column: boundaryColumn,
1815
+ columnOffset: boundaryColumn < colStartIndex ? boundaryCell.endX - boundaryCell.startX : 0
2015
1816
  }
2016
1817
  };
2017
1818
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2018
1819
  }
2019
- if (newSheetTransform && newTransform) return {
2020
- newSheetTransform,
2021
- newTransform,
2022
- axisAlignSheetTransform
2023
- };
2024
- return null;
1820
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
2025
1821
  }
2026
1822
  _expandRow(rowStartIndex, rowEndIndex, options) {
2027
1823
  const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
@@ -2051,7 +1847,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2051
1847
  };
2052
1848
  newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
2053
1849
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2054
- } else if (toRow >= rowEndIndex) {
1850
+ } else if (toRow >= rowStartIndex) {
2055
1851
  if (anchorType === "1") {
2056
1852
  newSheetTransform = {
2057
1853
  from: { ...from },
@@ -2067,12 +1863,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2067
1863
  axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
2068
1864
  };
2069
1865
  }
2070
- if (newSheetTransform && newTransform) return {
2071
- newSheetTransform,
2072
- newTransform,
2073
- axisAlignSheetTransform
2074
- };
2075
- return null;
1866
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
2076
1867
  }
2077
1868
  _shrinkRow(rowStartIndex, rowEndIndex, options) {
2078
1869
  const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
@@ -2100,8 +1891,9 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2100
1891
  row: toRow - rowCount
2101
1892
  }
2102
1893
  };
1894
+ if (anchorType === "0") return this._resolveShiftedPositionDrawing(newSheetTransform, transform, sheetSkeletonParam);
2103
1895
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2104
- } else if (fromRow >= rowStartIndex && toRow <= rowEndIndex) return null;
1896
+ } else if (anchorType === "1" && fromRow >= rowStartIndex && toRow <= rowEndIndex) return null;
2105
1897
  else if (fromRow < rowStartIndex && toRow > rowEndIndex) {
2106
1898
  if (anchorType === "1") {
2107
1899
  newSheetTransform = {
@@ -2132,67 +1924,108 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2132
1924
  };
2133
1925
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2134
1926
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2135
- } else if (fromRow === rowStartIndex) newTransform = {
2136
- ...transform,
2137
- top: (transform.top || 0) - sheetTransform.from.rowOffset
2138
- };
2139
- else {
2140
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
2141
- startRow: rowStartIndex,
2142
- endRow: fromRow - 1,
2143
- startColumn: from.column,
2144
- endColumn: to.column
2145
- });
2146
- newTransform = {
2147
- ...transform,
2148
- top: (transform.top || 0) - selectionCell.endY + selectionCell.startY - sheetTransform.from.rowOffset
2149
- };
2150
- }
2151
- if (!newSheetTransform) {
2152
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
2153
- axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2154
- }
1927
+ } else return this._resolveShiftedPositionDrawing({
1928
+ ...sheetTransform,
1929
+ from: {
1930
+ ...from,
1931
+ row: rowStartIndex,
1932
+ rowOffset: 0
1933
+ }
1934
+ }, transform, sheetSkeletonParam);
2155
1935
  } else if (toRow >= rowStartIndex && toRow <= rowEndIndex && anchorType === "1") {
2156
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
2157
- startColumn: from.column,
2158
- endColumn: from.column,
2159
- startRow: rowStartIndex - 1,
2160
- endRow: rowStartIndex - 1
2161
- });
1936
+ const boundaryRow = Math.min(rowStartIndex, skeleton.worksheet.getRowCount() - 1);
1937
+ const boundaryCell = skeleton.getNoMergeCellWithCoordByIndex(boundaryRow, from.column);
2162
1938
  newSheetTransform = {
2163
1939
  from: { ...from },
2164
1940
  to: {
2165
1941
  ...to,
2166
- row: rowStartIndex - 1,
2167
- rowOffset: selectionCell.endY - selectionCell.startY
1942
+ row: boundaryRow,
1943
+ rowOffset: boundaryRow < rowStartIndex ? boundaryCell.endY - boundaryCell.startY : 0
2168
1944
  }
2169
1945
  };
2170
1946
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2171
1947
  }
2172
- if (newSheetTransform && newTransform) return {
1948
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
1949
+ }
1950
+ _resolveShiftedPositionDrawing(sheetTransform, transform, { unitId, sheetId, skeleton }) {
1951
+ const converted = (0, _univerjs_sheets.convertPositionCellToSheetOverGrid)(unitId, sheetId, sheetTransform.from, transform.width ?? 0, transform.height ?? 0, skeleton);
1952
+ const newTransform = {
1953
+ ...transform,
1954
+ ...converted.transform
1955
+ };
1956
+ return this._getStructuralDrawingResult({
1957
+ ...sheetTransform,
1958
+ ...transformToDrawingPosition(newTransform, skeleton)
1959
+ }, newTransform, null, skeleton);
1960
+ }
1961
+ _getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton) {
1962
+ if (!newSheetTransform || !newTransform) return null;
1963
+ const { left = 0, top = 0, width = 0, height = 0 } = newTransform;
1964
+ if (![
1965
+ left,
1966
+ top,
1967
+ width,
1968
+ height
1969
+ ].every(Number.isFinite) || width < 0 || height < 0) return null;
1970
+ 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;
1971
+ return {
2173
1972
  newSheetTransform,
2174
1973
  newTransform,
2175
- axisAlignSheetTransform
1974
+ axisAlignSheetTransform: axisAlignSheetTransform ?? transformToAxisAlignPosition(newTransform, skeleton)
2176
1975
  };
2177
- return null;
1976
+ }
1977
+ _tryRefreshDrawingPlacement(drawing, skeleton, commandId, shouldRefresh) {
1978
+ try {
1979
+ const failure = validateSheetDrawingPlacement(drawing);
1980
+ if (failure) {
1981
+ this._logSkippedDrawingRefresh(drawing, commandId, failure);
1982
+ return;
1983
+ }
1984
+ if (shouldRefresh && !shouldRefresh(drawing.sheetTransform)) return;
1985
+ const result = tryRefreshSheetDrawingPlacement(drawing, skeleton);
1986
+ if (result.ok) return result.drawing;
1987
+ this._logSkippedDrawingRefresh(drawing, commandId, result);
1988
+ } catch (error) {
1989
+ this._logSkippedDrawingRefresh(drawing, commandId, error);
1990
+ }
1991
+ }
1992
+ _logSkippedDrawingRefresh(drawing, commandId, failure) {
1993
+ this._logService.warn("[SheetDrawingTransformAffectedController]", "Skipping drawing placement refresh", {
1994
+ unitId: drawing === null || drawing === void 0 ? void 0 : drawing.unitId,
1995
+ subUnitId: drawing === null || drawing === void 0 ? void 0 : drawing.subUnitId,
1996
+ drawingId: drawing === null || drawing === void 0 ? void 0 : drawing.drawingId,
1997
+ commandId,
1998
+ transform: drawing === null || drawing === void 0 ? void 0 : drawing.transform,
1999
+ sheetTransform: drawing === null || drawing === void 0 ? void 0 : drawing.sheetTransform,
2000
+ failure
2001
+ });
2178
2002
  }
2179
2003
  _sheetRefreshListener() {
2180
2004
  this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
2181
2005
  if (!REFRESH_MUTATIONS.includes(command.id)) return;
2182
2006
  queueMicrotask(() => {
2183
- const params = command.params;
2184
- const target = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService, params);
2185
- if (!target) return;
2186
- const { unitId, subUnitId, worksheet } = target;
2187
- let ranges = [];
2188
- if ("ranges" in params) ranges = params.ranges;
2189
- else if ("rowsAutoHeightInfo" in params) ranges = params.rowsAutoHeightInfo.map((info) => ({
2190
- startRow: info.row,
2191
- endRow: info.row,
2192
- startColumn: 0,
2193
- endColumn: worksheet.getColumnCount() - 1
2194
- }));
2195
- this._refreshDrawingTransform(command, unitId, subUnitId, ranges);
2007
+ if (this._disposed) return;
2008
+ try {
2009
+ const params = command.params;
2010
+ const target = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService, params);
2011
+ if (!target) return;
2012
+ const { unitId, subUnitId, worksheet } = target;
2013
+ let ranges = [];
2014
+ if ("ranges" in params) ranges = params.ranges;
2015
+ else if ("rowsAutoHeightInfo" in params) ranges = params.rowsAutoHeightInfo.map((info) => ({
2016
+ startRow: info.row,
2017
+ endRow: info.row,
2018
+ startColumn: 0,
2019
+ endColumn: worksheet.getColumnCount() - 1
2020
+ }));
2021
+ this._refreshDrawingTransform(command, unitId, subUnitId, ranges);
2022
+ } catch (error) {
2023
+ this._logService.error("[SheetDrawingTransformAffectedController]", "Drawing layout refresh failed", {
2024
+ commandId: command.id,
2025
+ params: command.params,
2026
+ error
2027
+ });
2028
+ }
2196
2029
  });
2197
2030
  }));
2198
2031
  }
@@ -2203,43 +2036,26 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2203
2036
  const updateDrawings = [];
2204
2037
  Object.keys(drawingData).forEach((drawingId) => {
2205
2038
  const drawing = drawingData[drawingId];
2206
- const { sheetTransform, transform, anchorType = "0" } = drawing;
2207
- if (anchorType === "2") return true;
2208
- if (!sheetTransform) return true;
2209
- const { from, to } = sheetTransform;
2210
- const { row: fromRow, column: fromColumn } = from;
2211
- const { row: toRow, column: toColumn } = to;
2212
- for (let i = 0; i < ranges.length; i++) {
2213
- const { startRow, endRow, startColumn, endColumn } = ranges[i];
2214
- if (_univerjs_core.Rectangle.intersects({
2215
- startRow,
2216
- endRow,
2217
- startColumn,
2218
- endColumn
2219
- }, {
2220
- startRow: fromRow,
2221
- endRow: toRow,
2222
- startColumn: fromColumn,
2223
- endColumn: toColumn
2224
- }) || fromRow > endRow || fromColumn > endColumn) {
2225
- if (anchorType === "0") {
2226
- updateDrawings.push(applySheetDrawingPlacement(drawing, getSheetDrawingPlacement(drawing), sheetSkeletonParam.skeleton));
2227
- break;
2228
- }
2229
- const newTransform = drawingPositionToTransform(sheetTransform, sheetSkeletonParam);
2230
- updateDrawings.push({
2231
- ...drawing,
2232
- transform: {
2233
- ...transform,
2234
- left: newTransform === null || newTransform === void 0 ? void 0 : newTransform.left,
2235
- top: newTransform === null || newTransform === void 0 ? void 0 : newTransform.top,
2236
- width: newTransform === null || newTransform === void 0 ? void 0 : newTransform.width,
2237
- height: newTransform === null || newTransform === void 0 ? void 0 : newTransform.height
2238
- }
2239
- });
2240
- break;
2241
- }
2242
- }
2039
+ if ((drawing === null || drawing === void 0 ? void 0 : drawing.anchorType) === "2") return;
2040
+ const refreshed = this._tryRefreshDrawingPlacement(drawing, sheetSkeletonParam.skeleton, command.id, ({ from, to }) => {
2041
+ const { row: fromRow, column: fromColumn } = from;
2042
+ const { row: toRow, column: toColumn } = to;
2043
+ return ranges.some((range) => {
2044
+ const { startRow, endRow, startColumn, endColumn } = range;
2045
+ return _univerjs_core.Rectangle.intersects({
2046
+ startRow,
2047
+ endRow,
2048
+ startColumn,
2049
+ endColumn
2050
+ }, {
2051
+ startRow: fromRow,
2052
+ endRow: toRow,
2053
+ startColumn: fromColumn,
2054
+ endColumn: toColumn
2055
+ }) || fromRow > endRow || fromColumn > endColumn;
2056
+ });
2057
+ });
2058
+ if (refreshed) updateDrawings.push(refreshed);
2243
2059
  });
2244
2060
  this._finalizePlan(unitId, subUnitId, updateDrawings, [], "refresh", command);
2245
2061
  }
@@ -2251,7 +2067,8 @@ SheetDrawingTransformAffectedController = __decorate([
2251
2067
  __decorateParam(3, ISheetDrawingService),
2252
2068
  __decorateParam(4, _univerjs_drawing.IDrawingManagerService),
2253
2069
  __decorateParam(5, _univerjs_core.IUniverInstanceService),
2254
- __decorateParam(6, (0, _univerjs_core.Inject)(SheetDrawingTransformPlanService))
2070
+ __decorateParam(6, (0, _univerjs_core.Inject)(SheetDrawingTransformPlanService)),
2071
+ __decorateParam(7, _univerjs_core.ILogService)
2255
2072
  ], SheetDrawingTransformAffectedController);
2256
2073
 
2257
2074
  //#endregion
@@ -2313,6 +2130,7 @@ exports.drawingPositionToTransform = drawingPositionToTransform;
2313
2130
  exports.getSheetDrawingPlacement = getSheetDrawingPlacement;
2314
2131
  exports.isKnownSheetNonRotatableDrawingType = isKnownSheetNonRotatableDrawingType;
2315
2132
  exports.normalizeSheetDrawingPlacement = normalizeSheetDrawingPlacement;
2133
+ exports.refreshSheetDrawingPlacement = refreshSheetDrawingPlacement;
2316
2134
  exports.resolveSheetDrawingRotateEnabled = resolveSheetDrawingRotateEnabled;
2317
2135
  exports.transformToAxisAlignPosition = transformToAxisAlignPosition;
2318
2136
  exports.transformToDrawingPosition = transformToDrawingPosition;