@univerjs/sheets-drawing 1.0.4 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/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 = normalizeSheetDrawingPlacement(input, skeleton);
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
  /**
@@ -410,15 +486,18 @@ function applySheetDrawingPlacement(drawing, input, skeleton) {
410
486
  * Position, Both, or None Placement.
411
487
  */
412
488
  function normalizeSheetDrawingPlacement(input, skeleton) {
489
+ return normalizePlacement(input, skeleton, false);
490
+ }
491
+ function normalizePlacement(input, skeleton, requiresArea) {
413
492
  if (!("bounds" in input)) {
414
- validatePlacement(input);
415
- 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(), {
416
495
  from: input.from,
417
496
  to: input.to
418
- }, skeleton));
497
+ }, skeleton), requiresArea));
419
498
  return input;
420
499
  }
421
- validateBounds(input.bounds);
500
+ assertValidPlacement(validateBounds(input.bounds, requiresArea));
422
501
  if (input.kind === "2") return {
423
502
  kind: "2",
424
503
  ...input.bounds
@@ -436,7 +515,7 @@ function normalizeSheetDrawingPlacement(input, skeleton) {
436
515
  from: sheetTransform.from,
437
516
  to: sheetTransform.to
438
517
  };
439
- throw new Error("SHEET_DRAWING_PLACEMENT_KIND_INVALID");
518
+ throw new Error(PLACEMENT_ERROR.KIND_INVALID);
440
519
  }
441
520
  function withExistingSheetTransform(current, placement) {
442
521
  return {
@@ -471,33 +550,51 @@ function absoluteSheetTransform(placement, current) {
471
550
  }
472
551
  };
473
552
  }
474
- function validatePlacement(placement) {
475
- if (placement.kind === "0") {
476
- validateCellPosition(placement.from);
477
- validateExtent(placement.width, placement.height);
478
- return;
479
- }
480
- if (placement.kind === "1") {
481
- validateCellPosition(placement.from);
482
- validateCellPosition(placement.to);
483
- return;
484
- }
553
+ function validatePlacement(placement, requiresArea) {
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);
485
556
  if (placement.kind === "2") {
486
- if (!Number.isFinite(placement.left) || !Number.isFinite(placement.top)) throw new TypeError("SHEET_DRAWING_PLACEMENT_POSITION_INVALID");
487
- validateExtent(placement.width, placement.height);
488
- 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);
489
562
  }
490
- throw new Error("SHEET_DRAWING_PLACEMENT_KIND_INVALID");
563
+ return {
564
+ ok: false,
565
+ reason: PLACEMENT_ERROR.KIND_INVALID
566
+ };
491
567
  }
492
- function validateBounds(bounds) {
493
- if (!Number.isFinite(bounds.left) || !Number.isFinite(bounds.top)) throw new TypeError("SHEET_DRAWING_PLACEMENT_POSITION_INVALID");
494
- validateExtent(bounds.width, bounds.height);
568
+ function validateBounds(bounds, 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);
495
574
  }
496
575
  function validateCellPosition(position) {
497
- 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
+ };
580
+ }
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);
498
594
  }
499
- function validateExtent(width, height) {
500
- if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) throw new Error("SHEET_DRAWING_PLACEMENT_EXTENT_INVALID");
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);
501
598
  }
502
599
 
503
600
  //#endregion
@@ -736,7 +833,7 @@ const SetWorksheetBackgroundImageCommand = {
736
833
  };
737
834
 
738
835
  //#endregion
739
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/decorateParam.js
836
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/decorateParam.js
740
837
  function __decorateParam(paramIndex, decorator) {
741
838
  return function(target, key) {
742
839
  decorator(target, key, paramIndex);
@@ -744,7 +841,7 @@ function __decorateParam(paramIndex, decorator) {
744
841
  }
745
842
 
746
843
  //#endregion
747
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/decorate.js
844
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/decorate.js
748
845
  function __decorate(decorators, target, key, desc) {
749
846
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
750
847
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -928,7 +1025,7 @@ SheetsDrawingLoadController = __decorate([
928
1025
  //#endregion
929
1026
  //#region package.json
930
1027
  var name = "@univerjs/sheets-drawing";
931
- var version = "1.0.4";
1028
+ var version = "1.2.0";
932
1029
 
933
1030
  //#endregion
934
1031
  //#region src/config/config.ts
@@ -952,7 +1049,7 @@ const configSymbol = Symbol(SHEETS_DRAWING_PLUGIN_CONFIG_KEY);
952
1049
  const defaultPluginConfig = {};
953
1050
 
954
1051
  //#endregion
955
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/typeof.js
1052
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/typeof.js
956
1053
  function _typeof(o) {
957
1054
  "@babel/helpers - typeof";
958
1055
  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
@@ -963,7 +1060,7 @@ function _typeof(o) {
963
1060
  }
964
1061
 
965
1062
  //#endregion
966
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/toPrimitive.js
1063
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/toPrimitive.js
967
1064
  function toPrimitive(t, r) {
968
1065
  if ("object" != _typeof(t) || !t) return t;
969
1066
  var e = t[Symbol.toPrimitive];
@@ -976,14 +1073,14 @@ function toPrimitive(t, r) {
976
1073
  }
977
1074
 
978
1075
  //#endregion
979
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/toPropertyKey.js
1076
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/toPropertyKey.js
980
1077
  function toPropertyKey(t) {
981
1078
  var i = toPrimitive(t, "string");
982
1079
  return "symbol" == _typeof(i) ? i : i + "";
983
1080
  }
984
1081
 
985
1082
  //#endregion
986
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/defineProperty.js
1083
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/defineProperty.js
987
1084
  function _defineProperty(e, r, t) {
988
1085
  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
989
1086
  value: t,
@@ -1062,7 +1159,7 @@ const REFRESH_MUTATIONS = [
1062
1159
  _univerjs_sheets.SetWorksheetColWidthMutation.id
1063
1160
  ];
1064
1161
  let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffectedController extends _univerjs_core.Disposable {
1065
- constructor(_commandService, _sheetSkeletonService, _sheetInterceptorService, _sheetDrawingService, _drawingManagerService, _univerInstanceService, _transformPlanService) {
1162
+ constructor(_commandService, _sheetSkeletonService, _sheetInterceptorService, _sheetDrawingService, _drawingManagerService, _univerInstanceService, _transformPlanService, _logService) {
1066
1163
  super();
1067
1164
  this._commandService = _commandService;
1068
1165
  this._sheetSkeletonService = _sheetSkeletonService;
@@ -1071,6 +1168,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1071
1168
  this._drawingManagerService = _drawingManagerService;
1072
1169
  this._univerInstanceService = _univerInstanceService;
1073
1170
  this._transformPlanService = _transformPlanService;
1171
+ this._logService = _logService;
1074
1172
  _defineProperty(this, "_currentCommand", {
1075
1173
  id: "",
1076
1174
  params: {}
@@ -1126,13 +1224,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1126
1224
  } else if (id === _univerjs_sheets.InsertRangeMoveRightCommand.id) {
1127
1225
  const { range } = params;
1128
1226
  return this._getRangeMoveUndo(range, 3);
1129
- } else if (id === _univerjs_sheets.SetRowHiddenCommand.id || id === _univerjs_sheets.SetSpecificRowsVisibleCommand.id) {
1130
- const { unitId, subUnitId, ranges } = params;
1131
- return this._getDrawingUndoForRowVisible(unitId, subUnitId, ranges);
1132
- } else if (id === _univerjs_sheets.SetColHiddenCommand.id || id === _univerjs_sheets.SetSpecificColsVisibleCommand.id) {
1133
- const { unitId, subUnitId, ranges } = params;
1134
- return this._getDrawingUndoForColVisible(unitId, subUnitId, ranges);
1135
- } 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) {
1136
1228
  const { unitId, subUnitId, ranges } = params;
1137
1229
  return this._getDrawingUndoForRowAndColSize(unitId, subUnitId, ranges);
1138
1230
  }
@@ -1363,266 +1455,20 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1363
1455
  newTransform = param === null || param === void 0 ? void 0 : param.newTransform;
1364
1456
  axisAlignSheetTransform = (param === null || param === void 0 ? void 0 : param.axisAlignSheetTransform) ?? void 0;
1365
1457
  }
1366
- if (newSheetTransform && newTransform) {
1367
- const newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1368
- updateDrawings.push({
1369
- ...drawing,
1370
- sheetTransform: newSheetTransform,
1371
- transform: newTransform,
1372
- axisAlignSheetTransform
1373
- });
1374
- }
1458
+ if (newSheetTransform && newTransform) updateDrawings.push({
1459
+ ...drawing,
1460
+ sheetTransform: newSheetTransform,
1461
+ transform: newTransform,
1462
+ axisAlignSheetTransform
1463
+ });
1375
1464
  return {
1376
1465
  updateDrawings,
1377
1466
  deleteDrawings
1378
1467
  };
1379
1468
  }
1380
- _remainDrawingSize(transform, updateDrawings, drawing, skeleton) {
1381
- const newSheetTransform = transformToDrawingPosition({ ...transform }, skeleton);
1382
- if (newSheetTransform) {
1383
- const axisAlignSheetTransform = transformToAxisAlignPosition({ ...transform }, skeleton);
1384
- updateDrawings.push({
1385
- ...drawing,
1386
- sheetTransform: newSheetTransform,
1387
- axisAlignSheetTransform
1388
- });
1389
- }
1390
- }
1391
- _getDrawingUndoForColVisible(unitId, subUnitId, ranges) {
1392
- const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1393
- if (!sheetSkeletonParam) return {
1394
- redos: [],
1395
- undos: []
1396
- };
1397
- const { skeleton } = sheetSkeletonParam;
1398
- const drawingData = this._drawingManagerService.getDrawingData(unitId, subUnitId);
1399
- const updateDrawings = [];
1400
- const preUpdateDrawings = [];
1401
- Object.keys(drawingData).forEach((drawingId) => {
1402
- const drawing = drawingData[drawingId];
1403
- const { sheetTransform, transform, anchorType = "0" } = drawing;
1404
- if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1405
- else {
1406
- const { from, to } = sheetTransform;
1407
- const { row: fromRow, column: fromColumn } = from;
1408
- const { row: toRow, column: toColumn } = to;
1409
- for (let i = 0; i < ranges.length; i++) {
1410
- const { startColumn, endColumn } = ranges[i];
1411
- if (toColumn < startColumn) continue;
1412
- if (anchorType === "0") {
1413
- let newSheetTransform = null;
1414
- let newTransform = null;
1415
- if (fromColumn >= startColumn && fromColumn <= endColumn) {
1416
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1417
- startColumn: fromColumn,
1418
- endColumn,
1419
- startRow: fromRow,
1420
- endRow: toRow
1421
- });
1422
- newTransform = {
1423
- ...transform,
1424
- left: selectionCell.startX
1425
- };
1426
- }
1427
- if (newTransform) {
1428
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1429
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1430
- if (newSheetTransform && newTransform) {
1431
- updateDrawings.push({
1432
- ...drawing,
1433
- sheetTransform: newSheetTransform,
1434
- transform: newTransform,
1435
- axisAlignSheetTransform
1436
- });
1437
- break;
1438
- }
1439
- }
1440
- continue;
1441
- }
1442
- if (fromColumn >= startColumn && toColumn <= endColumn) continue;
1443
- let newSheetTransform = null;
1444
- let newTransform = null;
1445
- if (fromColumn >= startColumn && fromColumn <= endColumn) {
1446
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1447
- startColumn: fromColumn,
1448
- endColumn,
1449
- startRow: fromRow,
1450
- endRow: toRow
1451
- });
1452
- newTransform = {
1453
- ...transform,
1454
- left: (selectionCell === null || selectionCell === void 0 ? void 0 : selectionCell.startX) || 0,
1455
- width: ((transform === null || transform === void 0 ? void 0 : transform.width) || 0) - selectionCell.endX + selectionCell.startX
1456
- };
1457
- } else if (toColumn >= startColumn && toColumn <= endColumn) {
1458
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1459
- startColumn,
1460
- endColumn: toColumn,
1461
- startRow: fromRow,
1462
- endRow: toRow
1463
- });
1464
- newTransform = {
1465
- ...transform,
1466
- left: selectionCell.startX - ((transform === null || transform === void 0 ? void 0 : transform.width) || 0)
1467
- };
1468
- } else {
1469
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1470
- startColumn,
1471
- endColumn,
1472
- startRow: fromRow,
1473
- endRow: toRow
1474
- });
1475
- newTransform = {
1476
- ...transform,
1477
- width: ((transform === null || transform === void 0 ? void 0 : transform.width) || 0) - selectionCell.endX + selectionCell.startX
1478
- };
1479
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1480
- if (newSheetTransform && newTransform) {
1481
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1482
- preUpdateDrawings.push({
1483
- ...drawing,
1484
- sheetTransform: newSheetTransform,
1485
- transform: newTransform,
1486
- axisAlignSheetTransform
1487
- });
1488
- break;
1489
- }
1490
- }
1491
- if (newTransform) newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1492
- if (newTransform && newSheetTransform) {
1493
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1494
- updateDrawings.push({
1495
- ...drawing,
1496
- sheetTransform: newSheetTransform,
1497
- transform: newTransform,
1498
- axisAlignSheetTransform
1499
- });
1500
- break;
1501
- } else this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1502
- }
1503
- }
1504
- });
1505
- return this._finalizePlan(unitId, subUnitId, [...preUpdateDrawings, ...updateDrawings]);
1506
- }
1507
1469
  _createUndoAndRedoMutation(unitId, subUnitId, updateDrawings) {
1508
1470
  return this._finalizePlan(unitId, subUnitId, updateDrawings);
1509
1471
  }
1510
- _getDrawingUndoForRowVisible(unitId, subUnitId, ranges) {
1511
- const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1512
- if (!sheetSkeletonParam) return {
1513
- redos: [],
1514
- undos: []
1515
- };
1516
- const { skeleton } = sheetSkeletonParam;
1517
- const drawingData = this._drawingManagerService.getDrawingData(unitId, subUnitId);
1518
- const updateDrawings = [];
1519
- const preUpdateDrawings = [];
1520
- Object.keys(drawingData).forEach((drawingId) => {
1521
- const drawing = drawingData[drawingId];
1522
- const { sheetTransform, transform, anchorType = "0" } = drawing;
1523
- if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1524
- else {
1525
- const { from, to } = sheetTransform;
1526
- const { row: fromRow, column: fromColumn } = from;
1527
- const { row: toRow, column: toColumn } = to;
1528
- for (let i = 0; i < ranges.length; i++) {
1529
- const { startRow, endRow } = ranges[i];
1530
- if (toRow < startRow) continue;
1531
- if (anchorType === "0") {
1532
- let newSheetTransform = null;
1533
- let newTransform = null;
1534
- if (fromRow >= startRow && fromRow <= endRow) {
1535
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1536
- startColumn: fromColumn,
1537
- endColumn: toColumn,
1538
- startRow: fromRow,
1539
- endRow
1540
- });
1541
- newTransform = {
1542
- ...transform,
1543
- top: selectionCell.startY
1544
- };
1545
- }
1546
- if (newTransform) {
1547
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1548
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1549
- if (newSheetTransform && newTransform) {
1550
- updateDrawings.push({
1551
- ...drawing,
1552
- sheetTransform: newSheetTransform,
1553
- transform: newTransform,
1554
- axisAlignSheetTransform
1555
- });
1556
- break;
1557
- }
1558
- }
1559
- continue;
1560
- }
1561
- if (fromRow >= startRow && toRow <= endRow) continue;
1562
- let newSheetTransform = null;
1563
- let newTransform = null;
1564
- if (fromRow >= startRow && fromRow <= endRow) {
1565
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1566
- startColumn: fromColumn,
1567
- endColumn: toColumn,
1568
- startRow: fromRow,
1569
- endRow
1570
- });
1571
- newTransform = {
1572
- ...transform,
1573
- top: (selectionCell === null || selectionCell === void 0 ? void 0 : selectionCell.startY) || 0,
1574
- height: ((transform === null || transform === void 0 ? void 0 : transform.height) || 0) - selectionCell.endY + selectionCell.startY
1575
- };
1576
- } else if (toRow >= startRow && toRow <= endRow) {
1577
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1578
- startColumn: fromColumn,
1579
- endColumn: toColumn,
1580
- startRow,
1581
- endRow: toRow
1582
- });
1583
- newTransform = {
1584
- ...transform,
1585
- top: selectionCell.startY - ((transform === null || transform === void 0 ? void 0 : transform.height) || 0)
1586
- };
1587
- } else {
1588
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1589
- startColumn: fromColumn,
1590
- endColumn: toColumn,
1591
- startRow,
1592
- endRow
1593
- });
1594
- newTransform = {
1595
- ...transform,
1596
- height: ((transform === null || transform === void 0 ? void 0 : transform.height) || 0) - selectionCell.endY + selectionCell.startY
1597
- };
1598
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1599
- if (newSheetTransform && newTransform) {
1600
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1601
- preUpdateDrawings.push({
1602
- ...drawing,
1603
- sheetTransform: newSheetTransform,
1604
- transform: newTransform,
1605
- axisAlignSheetTransform
1606
- });
1607
- break;
1608
- }
1609
- }
1610
- if (newTransform) newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1611
- if (newTransform && newSheetTransform) {
1612
- const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1613
- updateDrawings.push({
1614
- ...drawing,
1615
- sheetTransform: newSheetTransform,
1616
- transform: newTransform,
1617
- axisAlignSheetTransform
1618
- });
1619
- break;
1620
- } else this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1621
- }
1622
- }
1623
- });
1624
- return this._finalizePlan(unitId, subUnitId, [...preUpdateDrawings, ...updateDrawings]);
1625
- }
1626
1472
  _getDrawingUndoForRowAndColSize(unitId, subUnitId, ranges) {
1627
1473
  const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1628
1474
  if (!sheetSkeletonParam) return {
@@ -1634,27 +1480,9 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1634
1480
  const updateDrawings = [];
1635
1481
  Object.keys(drawingData).forEach((drawingId) => {
1636
1482
  const drawing = drawingData[drawingId];
1637
- const { sheetTransform, transform, anchorType = "0" } = drawing;
1638
- if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1639
- else {
1640
- const { row: toRow, column: toColumn } = sheetTransform.to;
1641
- for (let i = 0; i < ranges.length; i++) {
1642
- const { startRow, startColumn } = ranges[i];
1643
- if (toRow < startRow || toColumn < startColumn) continue;
1644
- if (anchorType === "0") {
1645
- updateDrawings.push(applySheetDrawingPlacement(drawing, getSheetDrawingPlacement(drawing), skeleton));
1646
- break;
1647
- }
1648
- const newTransform = drawingPositionToTransform({ ...sheetTransform }, sheetSkeletonParam);
1649
- if (newTransform) {
1650
- updateDrawings.push({
1651
- ...drawing,
1652
- transform: newTransform
1653
- });
1654
- break;
1655
- }
1656
- }
1657
- }
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);
1658
1486
  });
1659
1487
  if (updateDrawings.length === 0) return {
1660
1488
  redos: [],
@@ -1891,7 +1719,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1891
1719
  };
1892
1720
  newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1893
1721
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1894
- } else if (toColumn >= colEndIndex) {
1722
+ } else if (toColumn >= colStartIndex) {
1895
1723
  if (anchorType === "1") {
1896
1724
  newSheetTransform = {
1897
1725
  from: { ...from },
@@ -1907,12 +1735,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1907
1735
  axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
1908
1736
  };
1909
1737
  }
1910
- if (newSheetTransform && newTransform) return {
1911
- newSheetTransform,
1912
- newTransform,
1913
- axisAlignSheetTransform
1914
- };
1915
- return null;
1738
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
1916
1739
  }
1917
1740
  _shrinkCol(colStartIndex, colEndIndex, options) {
1918
1741
  const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
@@ -1940,8 +1763,9 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1940
1763
  column: toColumn - colCount
1941
1764
  }
1942
1765
  };
1766
+ if (anchorType === "0") return this._resolveShiftedPositionDrawing(newSheetTransform, transform, sheetSkeletonParam);
1943
1767
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1944
- } else if (fromColumn >= colStartIndex && toColumn <= colEndIndex) return null;
1768
+ } else if (anchorType === "1" && fromColumn >= colStartIndex && toColumn <= colEndIndex) return null;
1945
1769
  else if (fromColumn < colStartIndex && toColumn > colEndIndex) {
1946
1770
  if (anchorType === "1") {
1947
1771
  newSheetTransform = {
@@ -1972,49 +1796,28 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
1972
1796
  };
1973
1797
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1974
1798
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1975
- } else if (fromColumn === colStartIndex) newTransform = {
1976
- ...transform,
1977
- left: (transform.left || 0) - sheetTransform.from.columnOffset
1978
- };
1979
- else {
1980
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1981
- startColumn: colStartIndex,
1982
- endColumn: fromColumn - 1,
1983
- startRow: from.row,
1984
- endRow: to.row
1985
- });
1986
- newTransform = {
1987
- ...transform,
1988
- left: (transform.left || 0) - selectionCell.endX + selectionCell.startX - sheetTransform.from.columnOffset
1989
- };
1990
- }
1991
- if (!newSheetTransform) {
1992
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1993
- axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1994
- }
1799
+ } else return this._resolveShiftedPositionDrawing({
1800
+ ...sheetTransform,
1801
+ from: {
1802
+ ...from,
1803
+ column: colStartIndex,
1804
+ columnOffset: 0
1805
+ }
1806
+ }, transform, sheetSkeletonParam);
1995
1807
  } else if (toColumn >= colStartIndex && toColumn <= colEndIndex && anchorType === "1") {
1996
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1997
- startColumn: colStartIndex - 1,
1998
- endColumn: colStartIndex - 1,
1999
- startRow: from.row,
2000
- endRow: to.row
2001
- });
1808
+ const boundaryColumn = Math.min(colStartIndex, skeleton.worksheet.getColumnCount() - 1);
1809
+ const boundaryCell = skeleton.getNoMergeCellWithCoordByIndex(from.row, boundaryColumn);
2002
1810
  newSheetTransform = {
2003
1811
  from: { ...from },
2004
1812
  to: {
2005
1813
  ...to,
2006
- column: colStartIndex - 1,
2007
- columnOffset: selectionCell.endX - selectionCell.startX
1814
+ column: boundaryColumn,
1815
+ columnOffset: boundaryColumn < colStartIndex ? boundaryCell.endX - boundaryCell.startX : 0
2008
1816
  }
2009
1817
  };
2010
1818
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2011
1819
  }
2012
- if (newSheetTransform && newTransform) return {
2013
- newSheetTransform,
2014
- newTransform,
2015
- axisAlignSheetTransform
2016
- };
2017
- return null;
1820
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
2018
1821
  }
2019
1822
  _expandRow(rowStartIndex, rowEndIndex, options) {
2020
1823
  const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
@@ -2044,7 +1847,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2044
1847
  };
2045
1848
  newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
2046
1849
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2047
- } else if (toRow >= rowEndIndex) {
1850
+ } else if (toRow >= rowStartIndex) {
2048
1851
  if (anchorType === "1") {
2049
1852
  newSheetTransform = {
2050
1853
  from: { ...from },
@@ -2060,12 +1863,7 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2060
1863
  axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
2061
1864
  };
2062
1865
  }
2063
- if (newSheetTransform && newTransform) return {
2064
- newSheetTransform,
2065
- newTransform,
2066
- axisAlignSheetTransform
2067
- };
2068
- return null;
1866
+ return this._getStructuralDrawingResult(newSheetTransform, newTransform, axisAlignSheetTransform, skeleton);
2069
1867
  }
2070
1868
  _shrinkRow(rowStartIndex, rowEndIndex, options) {
2071
1869
  const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
@@ -2093,8 +1891,9 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2093
1891
  row: toRow - rowCount
2094
1892
  }
2095
1893
  };
1894
+ if (anchorType === "0") return this._resolveShiftedPositionDrawing(newSheetTransform, transform, sheetSkeletonParam);
2096
1895
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2097
- } else if (fromRow >= rowStartIndex && toRow <= rowEndIndex) return null;
1896
+ } else if (anchorType === "1" && fromRow >= rowStartIndex && toRow <= rowEndIndex) return null;
2098
1897
  else if (fromRow < rowStartIndex && toRow > rowEndIndex) {
2099
1898
  if (anchorType === "1") {
2100
1899
  newSheetTransform = {
@@ -2125,67 +1924,108 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2125
1924
  };
2126
1925
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2127
1926
  axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2128
- } else if (fromRow === rowStartIndex) newTransform = {
2129
- ...transform,
2130
- top: (transform.top || 0) - sheetTransform.from.rowOffset
2131
- };
2132
- else {
2133
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
2134
- startRow: rowStartIndex,
2135
- endRow: fromRow - 1,
2136
- startColumn: from.column,
2137
- endColumn: to.column
2138
- });
2139
- newTransform = {
2140
- ...transform,
2141
- top: (transform.top || 0) - selectionCell.endY + selectionCell.startY - sheetTransform.from.rowOffset
2142
- };
2143
- }
2144
- if (!newSheetTransform) {
2145
- newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
2146
- axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
2147
- }
1927
+ } else return this._resolveShiftedPositionDrawing({
1928
+ ...sheetTransform,
1929
+ from: {
1930
+ ...from,
1931
+ row: rowStartIndex,
1932
+ rowOffset: 0
1933
+ }
1934
+ }, transform, sheetSkeletonParam);
2148
1935
  } else if (toRow >= rowStartIndex && toRow <= rowEndIndex && anchorType === "1") {
2149
- const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
2150
- startColumn: from.column,
2151
- endColumn: from.column,
2152
- startRow: rowStartIndex - 1,
2153
- endRow: rowStartIndex - 1
2154
- });
1936
+ const boundaryRow = Math.min(rowStartIndex, skeleton.worksheet.getRowCount() - 1);
1937
+ const boundaryCell = skeleton.getNoMergeCellWithCoordByIndex(boundaryRow, from.column);
2155
1938
  newSheetTransform = {
2156
1939
  from: { ...from },
2157
1940
  to: {
2158
1941
  ...to,
2159
- row: rowStartIndex - 1,
2160
- rowOffset: selectionCell.endY - selectionCell.startY
1942
+ row: boundaryRow,
1943
+ rowOffset: boundaryRow < rowStartIndex ? boundaryCell.endY - boundaryCell.startY : 0
2161
1944
  }
2162
1945
  };
2163
1946
  newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
2164
1947
  }
2165
- 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 {
2166
1972
  newSheetTransform,
2167
1973
  newTransform,
2168
- axisAlignSheetTransform
1974
+ axisAlignSheetTransform: axisAlignSheetTransform ?? transformToAxisAlignPosition(newTransform, skeleton)
2169
1975
  };
2170
- 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
+ });
2171
2002
  }
2172
2003
  _sheetRefreshListener() {
2173
2004
  this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
2174
2005
  if (!REFRESH_MUTATIONS.includes(command.id)) return;
2175
2006
  queueMicrotask(() => {
2176
- const params = command.params;
2177
- const target = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService, params);
2178
- if (!target) return;
2179
- const { unitId, subUnitId, worksheet } = target;
2180
- let ranges = [];
2181
- if ("ranges" in params) ranges = params.ranges;
2182
- else if ("rowsAutoHeightInfo" in params) ranges = params.rowsAutoHeightInfo.map((info) => ({
2183
- startRow: info.row,
2184
- endRow: info.row,
2185
- startColumn: 0,
2186
- endColumn: worksheet.getColumnCount() - 1
2187
- }));
2188
- 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
+ }
2189
2029
  });
2190
2030
  }));
2191
2031
  }
@@ -2196,43 +2036,26 @@ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffecte
2196
2036
  const updateDrawings = [];
2197
2037
  Object.keys(drawingData).forEach((drawingId) => {
2198
2038
  const drawing = drawingData[drawingId];
2199
- const { sheetTransform, transform, anchorType = "0" } = drawing;
2200
- if (anchorType === "2") return true;
2201
- if (!sheetTransform) return true;
2202
- const { from, to } = sheetTransform;
2203
- const { row: fromRow, column: fromColumn } = from;
2204
- const { row: toRow, column: toColumn } = to;
2205
- for (let i = 0; i < ranges.length; i++) {
2206
- const { startRow, endRow, startColumn, endColumn } = ranges[i];
2207
- if (_univerjs_core.Rectangle.intersects({
2208
- startRow,
2209
- endRow,
2210
- startColumn,
2211
- endColumn
2212
- }, {
2213
- startRow: fromRow,
2214
- endRow: toRow,
2215
- startColumn: fromColumn,
2216
- endColumn: toColumn
2217
- }) || fromRow > endRow || fromColumn > endColumn) {
2218
- if (anchorType === "0") {
2219
- updateDrawings.push(applySheetDrawingPlacement(drawing, getSheetDrawingPlacement(drawing), sheetSkeletonParam.skeleton));
2220
- break;
2221
- }
2222
- const newTransform = drawingPositionToTransform(sheetTransform, sheetSkeletonParam);
2223
- updateDrawings.push({
2224
- ...drawing,
2225
- transform: {
2226
- ...transform,
2227
- left: newTransform === null || newTransform === void 0 ? void 0 : newTransform.left,
2228
- top: newTransform === null || newTransform === void 0 ? void 0 : newTransform.top,
2229
- width: newTransform === null || newTransform === void 0 ? void 0 : newTransform.width,
2230
- height: newTransform === null || newTransform === void 0 ? void 0 : newTransform.height
2231
- }
2232
- });
2233
- break;
2234
- }
2235
- }
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);
2236
2059
  });
2237
2060
  this._finalizePlan(unitId, subUnitId, updateDrawings, [], "refresh", command);
2238
2061
  }
@@ -2244,7 +2067,8 @@ SheetDrawingTransformAffectedController = __decorate([
2244
2067
  __decorateParam(3, ISheetDrawingService),
2245
2068
  __decorateParam(4, _univerjs_drawing.IDrawingManagerService),
2246
2069
  __decorateParam(5, _univerjs_core.IUniverInstanceService),
2247
- __decorateParam(6, (0, _univerjs_core.Inject)(SheetDrawingTransformPlanService))
2070
+ __decorateParam(6, (0, _univerjs_core.Inject)(SheetDrawingTransformPlanService)),
2071
+ __decorateParam(7, _univerjs_core.ILogService)
2248
2072
  ], SheetDrawingTransformAffectedController);
2249
2073
 
2250
2074
  //#endregion
@@ -2295,7 +2119,7 @@ exports.SetWorksheetBackgroundImageMutation = SetWorksheetBackgroundImageMutatio
2295
2119
  exports.SheetDrawingAnchorType = SheetDrawingAnchorType;
2296
2120
  exports.SheetDrawingService = SheetDrawingService;
2297
2121
  exports.SheetDrawingTransformPlanService = SheetDrawingTransformPlanService;
2298
- Object.defineProperty(exports, 'UniverSheetsDrawingPlugin', {
2122
+ Object.defineProperty(exports, "UniverSheetsDrawingPlugin", {
2299
2123
  enumerable: true,
2300
2124
  get: function () {
2301
2125
  return UniverSheetsDrawingPlugin;
@@ -2306,6 +2130,7 @@ exports.drawingPositionToTransform = drawingPositionToTransform;
2306
2130
  exports.getSheetDrawingPlacement = getSheetDrawingPlacement;
2307
2131
  exports.isKnownSheetNonRotatableDrawingType = isKnownSheetNonRotatableDrawingType;
2308
2132
  exports.normalizeSheetDrawingPlacement = normalizeSheetDrawingPlacement;
2133
+ exports.refreshSheetDrawingPlacement = refreshSheetDrawingPlacement;
2309
2134
  exports.resolveSheetDrawingRotateEnabled = resolveSheetDrawingRotateEnabled;
2310
2135
  exports.transformToAxisAlignPosition = transformToAxisAlignPosition;
2311
2136
  exports.transformToDrawingPosition = transformToDrawingPosition;