@univerjs/sheets-drawing 1.0.0-alpha.5 → 1.0.0-alpha.7

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
@@ -653,7 +653,7 @@ SheetsDrawingLoadController = __decorate([
653
653
  //#endregion
654
654
  //#region package.json
655
655
  var name = "@univerjs/sheets-drawing";
656
- var version = "1.0.0-alpha.5";
656
+ var version = "1.0.0-alpha.7";
657
657
 
658
658
  //#endregion
659
659
  //#region src/config/config.ts
@@ -718,6 +718,1327 @@ function _defineProperty(e, r, t) {
718
718
  }) : e[r] = t, e;
719
719
  }
720
720
 
721
+ //#endregion
722
+ //#region src/services/sheet-drawing-transform-plan.service.ts
723
+ function createEmptyResult() {
724
+ return {
725
+ preRedos: [],
726
+ redos: [],
727
+ preUndos: [],
728
+ undos: []
729
+ };
730
+ }
731
+ var SheetDrawingTransformPlanService = class {
732
+ constructor() {
733
+ _defineProperty(this, "_extensions", []);
734
+ }
735
+ register(extension) {
736
+ this._extensions.push(extension);
737
+ this._extensions.sort((a, b) => {
738
+ var _b$priority, _a$priority;
739
+ return ((_b$priority = b.priority) !== null && _b$priority !== void 0 ? _b$priority : 0) - ((_a$priority = a.priority) !== null && _a$priority !== void 0 ? _a$priority : 0);
740
+ });
741
+ return (0, _univerjs_core.toDisposable)(() => {
742
+ const index = this._extensions.indexOf(extension);
743
+ if (index >= 0) this._extensions.splice(index, 1);
744
+ });
745
+ }
746
+ transform(plan) {
747
+ return this._extensions.reduce((all, extension) => {
748
+ var _next$preRedos, _next$redos, _next$preUndos, _next$undos;
749
+ const next = extension.transform(plan);
750
+ if (!next) return all;
751
+ all.preRedos.push(...(_next$preRedos = next.preRedos) !== null && _next$preRedos !== void 0 ? _next$preRedos : []);
752
+ all.redos.push(...(_next$redos = next.redos) !== null && _next$redos !== void 0 ? _next$redos : []);
753
+ all.preUndos.push(...(_next$preUndos = next.preUndos) !== null && _next$preUndos !== void 0 ? _next$preUndos : []);
754
+ all.undos.push(...(_next$undos = next.undos) !== null && _next$undos !== void 0 ? _next$undos : []);
755
+ return all;
756
+ }, createEmptyResult());
757
+ }
758
+ };
759
+
760
+ //#endregion
761
+ //#region src/controllers/sheet-drawing-transform-affected.controller.ts
762
+ const UPDATE_COMMANDS = [
763
+ _univerjs_sheets.InsertRowCommand.id,
764
+ _univerjs_sheets.InsertColCommand.id,
765
+ _univerjs_sheets.RemoveRowCommand.id,
766
+ _univerjs_sheets.RemoveColCommand.id,
767
+ _univerjs_sheets.DeleteRangeMoveLeftCommand.id,
768
+ _univerjs_sheets.DeleteRangeMoveUpCommand.id,
769
+ _univerjs_sheets.InsertRangeMoveDownCommand.id,
770
+ _univerjs_sheets.InsertRangeMoveRightCommand.id,
771
+ _univerjs_sheets.DeltaRowHeightCommand.id,
772
+ _univerjs_sheets.SetRowHeightCommand.id,
773
+ _univerjs_sheets.DeltaColumnWidthCommand.id,
774
+ _univerjs_sheets.SetColWidthCommand.id,
775
+ _univerjs_sheets.SetRowHiddenCommand.id,
776
+ _univerjs_sheets.SetSpecificRowsVisibleCommand.id,
777
+ _univerjs_sheets.SetSpecificColsVisibleCommand.id,
778
+ _univerjs_sheets.SetColHiddenCommand.id,
779
+ _univerjs_sheets.MoveColsCommand.id,
780
+ _univerjs_sheets.MoveRowsCommand.id,
781
+ _univerjs_sheets.MoveRangeCommand.id
782
+ ];
783
+ const REFRESH_MUTATIONS = [
784
+ _univerjs_sheets.SetRowVisibleMutation.id,
785
+ _univerjs_sheets.SetRowHiddenMutation.id,
786
+ _univerjs_sheets.SetColVisibleMutation.id,
787
+ _univerjs_sheets.SetColHiddenMutation.id,
788
+ _univerjs_sheets.SetWorksheetRowHeightMutation.id,
789
+ _univerjs_sheets.SetWorksheetRowAutoHeightMutation.id,
790
+ _univerjs_sheets.SetWorksheetRowIsAutoHeightMutation.id,
791
+ _univerjs_sheets.SetWorksheetColWidthMutation.id
792
+ ];
793
+ let SheetDrawingTransformAffectedController = class SheetDrawingTransformAffectedController extends _univerjs_core.Disposable {
794
+ constructor(_commandService, _sheetSkeletonService, _sheetInterceptorService, _selectionManagerService, _sheetDrawingService, _drawingManagerService, _univerInstanceService, _transformPlanService) {
795
+ super();
796
+ this._commandService = _commandService;
797
+ this._sheetSkeletonService = _sheetSkeletonService;
798
+ this._sheetInterceptorService = _sheetInterceptorService;
799
+ this._selectionManagerService = _selectionManagerService;
800
+ this._sheetDrawingService = _sheetDrawingService;
801
+ this._drawingManagerService = _drawingManagerService;
802
+ this._univerInstanceService = _univerInstanceService;
803
+ this._transformPlanService = _transformPlanService;
804
+ _defineProperty(this, "_currentCommand", {
805
+ id: "",
806
+ params: {}
807
+ });
808
+ this._sheetInterceptorListener();
809
+ this._sheetRefreshListener();
810
+ }
811
+ _sheetInterceptorListener() {
812
+ this.disposeWithMe(this._sheetInterceptorService.interceptAfterCommand({ getMutations: (commandInfo) => {
813
+ const { id, params } = commandInfo;
814
+ if (!UPDATE_COMMANDS.includes(id) || !params) return {
815
+ redos: [],
816
+ undos: []
817
+ };
818
+ this._currentCommand = commandInfo;
819
+ if (id === _univerjs_sheets.InsertRowCommand.id) return this._moveRowInterceptor(params, "insert");
820
+ else if ([
821
+ _univerjs_sheets.MoveColsCommand.id,
822
+ _univerjs_sheets.MoveRowsCommand.id,
823
+ _univerjs_sheets.MoveRangeCommand.id
824
+ ].includes(id)) {
825
+ let target;
826
+ if (id === _univerjs_sheets.MoveRangeCommand.id) {
827
+ const _params = params;
828
+ if (_params.toUnitId && _params.fromUnitId && _params.toUnitId !== _params.fromUnitId || _params.toSubUnitId && _params.fromSubUnitId && _params.toSubUnitId !== _params.fromSubUnitId) return {
829
+ redos: [],
830
+ undos: []
831
+ };
832
+ target = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService, {
833
+ unitId: _params.toUnitId,
834
+ subUnitId: _params.toSubUnitId
835
+ });
836
+ } else target = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService, params);
837
+ if (!target) return {
838
+ redos: [],
839
+ undos: []
840
+ };
841
+ const { unitId, subUnitId } = target;
842
+ const { fromRange, toRange } = params;
843
+ return this._moveRangeInterceptor(unitId, subUnitId, fromRange, toRange);
844
+ } else if (id === _univerjs_sheets.InsertColCommand.id) return this._moveColInterceptor(params, "insert");
845
+ else if (id === _univerjs_sheets.RemoveRowCommand.id) return this._moveRowInterceptor(params, "remove");
846
+ else if (id === _univerjs_sheets.RemoveColCommand.id) return this._moveColInterceptor(params, "remove");
847
+ else if (id === _univerjs_sheets.DeleteRangeMoveLeftCommand.id) {
848
+ const { range } = params;
849
+ return this._getRangeMoveUndo(range, 0);
850
+ } else if (id === _univerjs_sheets.DeleteRangeMoveUpCommand.id) {
851
+ const { range } = params;
852
+ return this._getRangeMoveUndo(range, 1);
853
+ } else if (id === _univerjs_sheets.InsertRangeMoveDownCommand.id) {
854
+ const { range } = params;
855
+ return this._getRangeMoveUndo(range, 2);
856
+ } else if (id === _univerjs_sheets.InsertRangeMoveRightCommand.id) {
857
+ const { range } = params;
858
+ return this._getRangeMoveUndo(range, 3);
859
+ } else if (id === _univerjs_sheets.SetRowHiddenCommand.id || id === _univerjs_sheets.SetSpecificRowsVisibleCommand.id) {
860
+ var _this$_selectionManag;
861
+ const _params = params;
862
+ const target = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService, _params);
863
+ if (!target) return {
864
+ redos: [],
865
+ undos: []
866
+ };
867
+ const { unitId, subUnitId } = target;
868
+ const ranges = _params.ranges || ((_this$_selectionManag = this._selectionManagerService.getCurrentSelections()) === null || _this$_selectionManag === void 0 ? void 0 : _this$_selectionManag.map((s) => s.range).filter((r) => r.rangeType === _univerjs_core.RANGE_TYPE.ROW));
869
+ if (!ranges || ranges.length === 0) return {
870
+ redos: [],
871
+ undos: []
872
+ };
873
+ return this._getDrawingUndoForRowVisible(unitId, subUnitId, ranges);
874
+ } else if (id === _univerjs_sheets.SetColHiddenCommand.id || id === _univerjs_sheets.SetSpecificColsVisibleCommand.id) {
875
+ var _this$_selectionManag2;
876
+ const _params = params;
877
+ const target = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService, _params);
878
+ if (!target) return {
879
+ redos: [],
880
+ undos: []
881
+ };
882
+ const { unitId, subUnitId } = target;
883
+ const ranges = _params.ranges || ((_this$_selectionManag2 = this._selectionManagerService.getCurrentSelections()) === null || _this$_selectionManag2 === void 0 ? void 0 : _this$_selectionManag2.map((s) => s.range).filter((r) => r.rangeType === _univerjs_core.RANGE_TYPE.COLUMN));
884
+ if (!ranges || ranges.length === 0) return {
885
+ redos: [],
886
+ undos: []
887
+ };
888
+ return this._getDrawingUndoForColVisible(unitId, subUnitId, ranges);
889
+ } else if (id === _univerjs_sheets.DeltaRowHeightCommand.id || id === _univerjs_sheets.DeltaColumnWidthCommand.id) {
890
+ const target = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService);
891
+ if (!target) return {
892
+ redos: [],
893
+ undos: []
894
+ };
895
+ const { unitId, subUnitId, worksheet } = target;
896
+ const ranges = [];
897
+ if (id === _univerjs_sheets.DeltaRowHeightCommand.id) ranges.push({
898
+ startRow: params.anchorRow,
899
+ endRow: params.anchorRow,
900
+ startColumn: 0,
901
+ endColumn: worksheet.getColumnCount() - 1
902
+ });
903
+ else ranges.push({
904
+ startRow: 0,
905
+ endRow: worksheet.getRowCount() - 1,
906
+ startColumn: params.anchorCol,
907
+ endColumn: params.anchorCol
908
+ });
909
+ return this._getDrawingUndoForRowAndColSize(unitId, subUnitId, ranges);
910
+ } else if (id === _univerjs_sheets.SetRowHeightCommand.id || id === _univerjs_sheets.SetColWidthCommand.id) {
911
+ var _this$_selectionManag3;
912
+ const _params = params;
913
+ const target = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService, _params);
914
+ if (!target) return {
915
+ redos: [],
916
+ undos: []
917
+ };
918
+ const { unitId, subUnitId } = target;
919
+ const ranges = _params.ranges || ((_this$_selectionManag3 = this._selectionManagerService.getCurrentSelections()) === null || _this$_selectionManag3 === void 0 ? void 0 : _this$_selectionManag3.map((s) => s.range));
920
+ if (!ranges || ranges.length === 0) return {
921
+ redos: [],
922
+ undos: []
923
+ };
924
+ return this._getDrawingUndoForRowAndColSize(unitId, subUnitId, ranges);
925
+ }
926
+ return {
927
+ redos: [],
928
+ undos: []
929
+ };
930
+ } }));
931
+ }
932
+ _finalizePlan(unitId, subUnitId, updates, deletes = [], mode = "command", command = this._currentCommand) {
933
+ const skeleton = this._sheetSkeletonService.getSkeleton(unitId, subUnitId);
934
+ if (!skeleton) return {
935
+ redos: [],
936
+ undos: []
937
+ };
938
+ const data = this._sheetDrawingService.getDrawingData(unitId, subUnitId);
939
+ const originals = new Map(Object.entries(data));
940
+ const plan = {
941
+ command,
942
+ mode,
943
+ unitId,
944
+ subUnitId,
945
+ skeleton,
946
+ originals,
947
+ updates: /* @__PURE__ */ new Map(),
948
+ deletes: new Set(deletes.map(({ drawingId }) => drawingId).filter((drawingId) => Boolean(drawingId)))
949
+ };
950
+ updates.forEach((patch) => {
951
+ var _patch$sheetTransform, _patch$axisAlignSheet;
952
+ if (!patch.drawingId) return;
953
+ const original = originals.get(patch.drawingId);
954
+ if (!original) return;
955
+ plan.updates.set(patch.drawingId, {
956
+ ...original,
957
+ ...patch,
958
+ transform: {
959
+ ...original.transform,
960
+ ...patch.transform
961
+ },
962
+ sheetTransform: (_patch$sheetTransform = patch.sheetTransform) !== null && _patch$sheetTransform !== void 0 ? _patch$sheetTransform : original.sheetTransform,
963
+ axisAlignSheetTransform: (_patch$axisAlignSheet = patch.axisAlignSheetTransform) !== null && _patch$axisAlignSheet !== void 0 ? _patch$axisAlignSheet : original.axisAlignSheetTransform
964
+ });
965
+ });
966
+ const feature = this._transformPlanService.transform(plan);
967
+ if (mode === "refresh") {
968
+ const changed = [...plan.updates.values()].filter((drawing) => JSON.stringify(originals.get(drawing.drawingId)) !== JSON.stringify(drawing));
969
+ if (changed.length) {
970
+ this._sheetDrawingService.refreshTransform(changed);
971
+ this._drawingManagerService.refreshTransform(changed);
972
+ this._commandService.syncExecuteCommand(ClearSheetDrawingTransformerOperation.id, [unitId]);
973
+ }
974
+ return {
975
+ redos: [],
976
+ undos: []
977
+ };
978
+ }
979
+ return this._createPlanMutations(plan, feature);
980
+ }
981
+ _getCalculatedSkeletonParam(unitId, subUnitId) {
982
+ const skeletonParam = this._sheetSkeletonService.getSkeletonParam(unitId, subUnitId);
983
+ if (!skeletonParam) return;
984
+ skeletonParam.skeleton.makeDirty(true);
985
+ skeletonParam.skeleton.calculate();
986
+ return skeletonParam;
987
+ }
988
+ _createPlanMutations(plan, feature) {
989
+ const { unitId, subUnitId } = plan;
990
+ const redos = [...feature.preRedos];
991
+ const undos = [...feature.preUndos];
992
+ const updates = [...plan.updates.values()].filter(({ drawingId }) => !plan.deletes.has(drawingId));
993
+ if (updates.length) {
994
+ const { undo, redo, objects } = this._sheetDrawingService.getBatchUpdateOp(updates);
995
+ redos.push({
996
+ id: SetDrawingApplyMutation.id,
997
+ params: {
998
+ unitId,
999
+ subUnitId,
1000
+ op: redo,
1001
+ objects,
1002
+ type: 2
1003
+ }
1004
+ });
1005
+ undos.push({
1006
+ id: SetDrawingApplyMutation.id,
1007
+ params: {
1008
+ unitId,
1009
+ subUnitId,
1010
+ op: undo,
1011
+ objects,
1012
+ type: 2
1013
+ }
1014
+ });
1015
+ }
1016
+ if (plan.deletes.size) {
1017
+ const drawings = [...plan.deletes].map((drawingId) => ({
1018
+ unitId,
1019
+ subUnitId,
1020
+ drawingId
1021
+ }));
1022
+ const { undo, redo, objects } = this._sheetDrawingService.getBatchRemoveOp(drawings);
1023
+ redos.push({
1024
+ id: SetDrawingApplyMutation.id,
1025
+ params: {
1026
+ unitId,
1027
+ subUnitId,
1028
+ op: redo,
1029
+ objects,
1030
+ type: 1
1031
+ }
1032
+ });
1033
+ undos.push({
1034
+ id: SetDrawingApplyMutation.id,
1035
+ params: {
1036
+ unitId,
1037
+ subUnitId,
1038
+ op: undo,
1039
+ objects,
1040
+ type: 0
1041
+ }
1042
+ });
1043
+ }
1044
+ redos.push(...feature.redos);
1045
+ undos.push(...feature.undos);
1046
+ if (redos.length || undos.length) {
1047
+ redos.push({
1048
+ id: ClearSheetDrawingTransformerOperation.id,
1049
+ params: [unitId]
1050
+ });
1051
+ undos.push({
1052
+ id: ClearSheetDrawingTransformerOperation.id,
1053
+ params: [unitId]
1054
+ });
1055
+ }
1056
+ return {
1057
+ redos,
1058
+ undos
1059
+ };
1060
+ }
1061
+ _getRangeMoveUndo(range, type) {
1062
+ const target = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService);
1063
+ if (!target) return {
1064
+ redos: [],
1065
+ undos: []
1066
+ };
1067
+ const { unitId, subUnitId } = target;
1068
+ if (!this._getCalculatedSkeletonParam(unitId, subUnitId)) return {
1069
+ redos: [],
1070
+ undos: []
1071
+ };
1072
+ const drawingData = this._sheetDrawingService.getDrawingData(unitId, subUnitId);
1073
+ const updateDrawings = [];
1074
+ const deleteDrawings = [];
1075
+ Object.keys(drawingData).forEach((drawingId) => {
1076
+ const drawing = drawingData[drawingId];
1077
+ const { updateDrawings: updateDrawingsPart, deleteDrawings: deleteDrawingsPart } = this._getUpdateOrDeleteDrawings(range, type, drawing);
1078
+ updateDrawings.push(...updateDrawingsPart);
1079
+ deleteDrawings.push(...deleteDrawingsPart);
1080
+ });
1081
+ return this._finalizePlan(unitId, subUnitId, updateDrawings, deleteDrawings);
1082
+ }
1083
+ _getUpdateOrDeleteDrawings(range, type, drawing) {
1084
+ const updateDrawings = [];
1085
+ const deleteDrawings = [];
1086
+ const { sheetTransform, anchorType = "0", transform, unitId, subUnitId, drawingId } = drawing;
1087
+ const sheetSkeletonParam = this._sheetSkeletonService.getSkeletonParam(unitId, subUnitId);
1088
+ if (!sheetTransform || !transform || !sheetSkeletonParam) return {
1089
+ updateDrawings,
1090
+ deleteDrawings
1091
+ };
1092
+ const { from, to } = sheetTransform;
1093
+ const { row: fromRow, column: fromColumn } = from;
1094
+ const { row: toRow, column: toColumn } = to;
1095
+ const { startRow, endRow, startColumn, endColumn } = range;
1096
+ let newSheetTransform = null;
1097
+ let newTransform = null;
1098
+ let axisAlignSheetTransform;
1099
+ if (type === 0 && fromRow >= startRow && toRow <= endRow) if (fromColumn >= startColumn && toColumn <= endColumn) deleteDrawings.push({
1100
+ unitId,
1101
+ subUnitId,
1102
+ drawingId
1103
+ });
1104
+ else {
1105
+ var _param$axisAlignSheet;
1106
+ const param = this._shrinkCol(startColumn, endColumn, {
1107
+ sheetSkeletonParam,
1108
+ sheetTransform,
1109
+ transform,
1110
+ anchorType
1111
+ });
1112
+ newSheetTransform = param === null || param === void 0 ? void 0 : param.newSheetTransform;
1113
+ newTransform = param === null || param === void 0 ? void 0 : param.newTransform;
1114
+ axisAlignSheetTransform = (_param$axisAlignSheet = param === null || param === void 0 ? void 0 : param.axisAlignSheetTransform) !== null && _param$axisAlignSheet !== void 0 ? _param$axisAlignSheet : void 0;
1115
+ }
1116
+ else if (type === 1 && fromColumn >= startColumn && toColumn <= endColumn) if (fromRow >= startRow && toRow <= endRow) deleteDrawings.push({
1117
+ unitId,
1118
+ subUnitId,
1119
+ drawingId
1120
+ });
1121
+ else {
1122
+ var _param$axisAlignSheet2;
1123
+ const param = this._shrinkRow(startRow, endRow, {
1124
+ sheetSkeletonParam,
1125
+ sheetTransform,
1126
+ transform,
1127
+ anchorType
1128
+ });
1129
+ newSheetTransform = param === null || param === void 0 ? void 0 : param.newSheetTransform;
1130
+ newTransform = param === null || param === void 0 ? void 0 : param.newTransform;
1131
+ axisAlignSheetTransform = (_param$axisAlignSheet2 = param === null || param === void 0 ? void 0 : param.axisAlignSheetTransform) !== null && _param$axisAlignSheet2 !== void 0 ? _param$axisAlignSheet2 : void 0;
1132
+ }
1133
+ else if (type === 2) {
1134
+ var _param$axisAlignSheet3;
1135
+ const param = this._expandRow(startRow, endRow, {
1136
+ sheetSkeletonParam,
1137
+ sheetTransform,
1138
+ transform,
1139
+ anchorType
1140
+ });
1141
+ newSheetTransform = param === null || param === void 0 ? void 0 : param.newSheetTransform;
1142
+ newTransform = param === null || param === void 0 ? void 0 : param.newTransform;
1143
+ axisAlignSheetTransform = (_param$axisAlignSheet3 = param === null || param === void 0 ? void 0 : param.axisAlignSheetTransform) !== null && _param$axisAlignSheet3 !== void 0 ? _param$axisAlignSheet3 : void 0;
1144
+ } else if (type === 3) {
1145
+ var _param$axisAlignSheet4;
1146
+ const param = this._expandCol(startColumn, endColumn, {
1147
+ sheetSkeletonParam,
1148
+ sheetTransform,
1149
+ transform,
1150
+ anchorType
1151
+ });
1152
+ newSheetTransform = param === null || param === void 0 ? void 0 : param.newSheetTransform;
1153
+ newTransform = param === null || param === void 0 ? void 0 : param.newTransform;
1154
+ axisAlignSheetTransform = (_param$axisAlignSheet4 = param === null || param === void 0 ? void 0 : param.axisAlignSheetTransform) !== null && _param$axisAlignSheet4 !== void 0 ? _param$axisAlignSheet4 : void 0;
1155
+ }
1156
+ if (newSheetTransform && newTransform) {
1157
+ const newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1158
+ updateDrawings.push({
1159
+ ...drawing,
1160
+ sheetTransform: newSheetTransform,
1161
+ transform: newTransform,
1162
+ axisAlignSheetTransform
1163
+ });
1164
+ }
1165
+ return {
1166
+ updateDrawings,
1167
+ deleteDrawings
1168
+ };
1169
+ }
1170
+ _remainDrawingSize(transform, updateDrawings, drawing, skeleton) {
1171
+ const newSheetTransform = transformToDrawingPosition({ ...transform }, skeleton);
1172
+ if (newSheetTransform) {
1173
+ const axisAlignSheetTransform = transformToAxisAlignPosition({ ...transform }, skeleton);
1174
+ updateDrawings.push({
1175
+ ...drawing,
1176
+ sheetTransform: newSheetTransform,
1177
+ axisAlignSheetTransform
1178
+ });
1179
+ }
1180
+ }
1181
+ _getDrawingUndoForColVisible(unitId, subUnitId, ranges) {
1182
+ const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1183
+ if (!sheetSkeletonParam) return {
1184
+ redos: [],
1185
+ undos: []
1186
+ };
1187
+ const { skeleton } = sheetSkeletonParam;
1188
+ const drawingData = this._drawingManagerService.getDrawingData(unitId, subUnitId);
1189
+ const updateDrawings = [];
1190
+ const preUpdateDrawings = [];
1191
+ Object.keys(drawingData).forEach((drawingId) => {
1192
+ const drawing = drawingData[drawingId];
1193
+ const { sheetTransform, transform, anchorType = "0" } = drawing;
1194
+ if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1195
+ else {
1196
+ const { from, to } = sheetTransform;
1197
+ const { row: fromRow, column: fromColumn } = from;
1198
+ const { row: toRow, column: toColumn } = to;
1199
+ for (let i = 0; i < ranges.length; i++) {
1200
+ const { startColumn, endColumn } = ranges[i];
1201
+ if (toColumn < startColumn) continue;
1202
+ if (anchorType === "0") {
1203
+ let newSheetTransform = null;
1204
+ let newTransform = null;
1205
+ if (fromColumn >= startColumn && fromColumn <= endColumn) {
1206
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1207
+ startColumn: fromColumn,
1208
+ endColumn,
1209
+ startRow: fromRow,
1210
+ endRow: toRow
1211
+ });
1212
+ newTransform = {
1213
+ ...transform,
1214
+ left: selectionCell.startX
1215
+ };
1216
+ }
1217
+ if (newTransform) {
1218
+ newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1219
+ const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1220
+ if (newSheetTransform && newTransform) {
1221
+ updateDrawings.push({
1222
+ ...drawing,
1223
+ sheetTransform: newSheetTransform,
1224
+ transform: newTransform,
1225
+ axisAlignSheetTransform
1226
+ });
1227
+ break;
1228
+ }
1229
+ }
1230
+ continue;
1231
+ }
1232
+ if (fromColumn >= startColumn && toColumn <= endColumn) continue;
1233
+ let newSheetTransform = null;
1234
+ let newTransform = null;
1235
+ if (fromColumn >= startColumn && fromColumn <= endColumn) {
1236
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1237
+ startColumn: fromColumn,
1238
+ endColumn,
1239
+ startRow: fromRow,
1240
+ endRow: toRow
1241
+ });
1242
+ newTransform = {
1243
+ ...transform,
1244
+ left: (selectionCell === null || selectionCell === void 0 ? void 0 : selectionCell.startX) || 0,
1245
+ width: ((transform === null || transform === void 0 ? void 0 : transform.width) || 0) - selectionCell.endX + selectionCell.startX
1246
+ };
1247
+ } else if (toColumn >= startColumn && toColumn <= endColumn) {
1248
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1249
+ startColumn,
1250
+ endColumn: toColumn,
1251
+ startRow: fromRow,
1252
+ endRow: toRow
1253
+ });
1254
+ newTransform = {
1255
+ ...transform,
1256
+ left: selectionCell.startX - ((transform === null || transform === void 0 ? void 0 : transform.width) || 0)
1257
+ };
1258
+ } else {
1259
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1260
+ startColumn,
1261
+ endColumn,
1262
+ startRow: fromRow,
1263
+ endRow: toRow
1264
+ });
1265
+ newTransform = {
1266
+ ...transform,
1267
+ width: ((transform === null || transform === void 0 ? void 0 : transform.width) || 0) - selectionCell.endX + selectionCell.startX
1268
+ };
1269
+ newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1270
+ if (newSheetTransform && newTransform) {
1271
+ const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1272
+ preUpdateDrawings.push({
1273
+ ...drawing,
1274
+ sheetTransform: newSheetTransform,
1275
+ transform: newTransform,
1276
+ axisAlignSheetTransform
1277
+ });
1278
+ break;
1279
+ }
1280
+ }
1281
+ if (newTransform) newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1282
+ if (newTransform && newSheetTransform) {
1283
+ const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1284
+ updateDrawings.push({
1285
+ ...drawing,
1286
+ sheetTransform: newSheetTransform,
1287
+ transform: newTransform,
1288
+ axisAlignSheetTransform
1289
+ });
1290
+ break;
1291
+ } else this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1292
+ }
1293
+ }
1294
+ });
1295
+ return this._finalizePlan(unitId, subUnitId, [...preUpdateDrawings, ...updateDrawings]);
1296
+ }
1297
+ _createUndoAndRedoMutation(unitId, subUnitId, updateDrawings) {
1298
+ return this._finalizePlan(unitId, subUnitId, updateDrawings);
1299
+ }
1300
+ _getDrawingUndoForRowVisible(unitId, subUnitId, ranges) {
1301
+ const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1302
+ if (!sheetSkeletonParam) return {
1303
+ redos: [],
1304
+ undos: []
1305
+ };
1306
+ const { skeleton } = sheetSkeletonParam;
1307
+ const drawingData = this._drawingManagerService.getDrawingData(unitId, subUnitId);
1308
+ const updateDrawings = [];
1309
+ const preUpdateDrawings = [];
1310
+ Object.keys(drawingData).forEach((drawingId) => {
1311
+ const drawing = drawingData[drawingId];
1312
+ const { sheetTransform, transform, anchorType = "0" } = drawing;
1313
+ if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1314
+ else {
1315
+ const { from, to } = sheetTransform;
1316
+ const { row: fromRow, column: fromColumn } = from;
1317
+ const { row: toRow, column: toColumn } = to;
1318
+ for (let i = 0; i < ranges.length; i++) {
1319
+ const { startRow, endRow } = ranges[i];
1320
+ if (toRow < startRow) continue;
1321
+ if (anchorType === "0") {
1322
+ let newSheetTransform = null;
1323
+ let newTransform = null;
1324
+ if (fromRow >= startRow && fromRow <= endRow) {
1325
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1326
+ startColumn: fromColumn,
1327
+ endColumn: toColumn,
1328
+ startRow: fromRow,
1329
+ endRow
1330
+ });
1331
+ newTransform = {
1332
+ ...transform,
1333
+ top: selectionCell.startY
1334
+ };
1335
+ }
1336
+ if (newTransform) {
1337
+ newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1338
+ const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1339
+ if (newSheetTransform && newTransform) {
1340
+ updateDrawings.push({
1341
+ ...drawing,
1342
+ sheetTransform: newSheetTransform,
1343
+ transform: newTransform,
1344
+ axisAlignSheetTransform
1345
+ });
1346
+ break;
1347
+ }
1348
+ }
1349
+ continue;
1350
+ }
1351
+ if (fromRow >= startRow && toRow <= endRow) continue;
1352
+ let newSheetTransform = null;
1353
+ let newTransform = null;
1354
+ if (fromRow >= startRow && fromRow <= endRow) {
1355
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1356
+ startColumn: fromColumn,
1357
+ endColumn: toColumn,
1358
+ startRow: fromRow,
1359
+ endRow
1360
+ });
1361
+ newTransform = {
1362
+ ...transform,
1363
+ top: (selectionCell === null || selectionCell === void 0 ? void 0 : selectionCell.startY) || 0,
1364
+ height: ((transform === null || transform === void 0 ? void 0 : transform.height) || 0) - selectionCell.endY + selectionCell.startY
1365
+ };
1366
+ } else if (toRow >= startRow && toRow <= endRow) {
1367
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1368
+ startColumn: fromColumn,
1369
+ endColumn: toColumn,
1370
+ startRow,
1371
+ endRow: toRow
1372
+ });
1373
+ newTransform = {
1374
+ ...transform,
1375
+ top: selectionCell.startY - ((transform === null || transform === void 0 ? void 0 : transform.height) || 0)
1376
+ };
1377
+ } else {
1378
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1379
+ startColumn: fromColumn,
1380
+ endColumn: toColumn,
1381
+ startRow,
1382
+ endRow
1383
+ });
1384
+ newTransform = {
1385
+ ...transform,
1386
+ height: ((transform === null || transform === void 0 ? void 0 : transform.height) || 0) - selectionCell.endY + selectionCell.startY
1387
+ };
1388
+ newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1389
+ if (newSheetTransform && newTransform) {
1390
+ const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1391
+ preUpdateDrawings.push({
1392
+ ...drawing,
1393
+ sheetTransform: newSheetTransform,
1394
+ transform: newTransform,
1395
+ axisAlignSheetTransform
1396
+ });
1397
+ break;
1398
+ }
1399
+ }
1400
+ if (newTransform) newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1401
+ if (newTransform && newSheetTransform) {
1402
+ const axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1403
+ updateDrawings.push({
1404
+ ...drawing,
1405
+ sheetTransform: newSheetTransform,
1406
+ transform: newTransform,
1407
+ axisAlignSheetTransform
1408
+ });
1409
+ break;
1410
+ } else this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1411
+ }
1412
+ }
1413
+ });
1414
+ return this._finalizePlan(unitId, subUnitId, [...preUpdateDrawings, ...updateDrawings]);
1415
+ }
1416
+ _getDrawingUndoForRowAndColSize(unitId, subUnitId, ranges) {
1417
+ const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1418
+ if (!sheetSkeletonParam) return {
1419
+ redos: [],
1420
+ undos: []
1421
+ };
1422
+ const { skeleton } = sheetSkeletonParam;
1423
+ const drawingData = this._drawingManagerService.getDrawingData(unitId, subUnitId);
1424
+ const updateDrawings = [];
1425
+ Object.keys(drawingData).forEach((drawingId) => {
1426
+ const drawing = drawingData[drawingId];
1427
+ const { sheetTransform, transform, anchorType = "0" } = drawing;
1428
+ if (anchorType === "2") this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1429
+ else {
1430
+ const { from, to } = sheetTransform;
1431
+ const { row: fromRow, column: fromColumn } = from;
1432
+ const { row: toRow, column: toColumn } = to;
1433
+ for (let i = 0; i < ranges.length; i++) {
1434
+ const { startRow, endRow, startColumn, endColumn } = ranges[i];
1435
+ if (toRow < startRow || toColumn < startColumn) continue;
1436
+ if (anchorType === "0") {
1437
+ if (fromRow <= startRow && toRow >= endRow || fromColumn <= startColumn && toColumn >= endColumn) {
1438
+ this._remainDrawingSize(transform, updateDrawings, drawing, skeleton);
1439
+ continue;
1440
+ }
1441
+ }
1442
+ const newTransform = drawingPositionToTransform({ ...sheetTransform }, sheetSkeletonParam);
1443
+ if (newTransform) {
1444
+ updateDrawings.push({
1445
+ ...drawing,
1446
+ transform: newTransform
1447
+ });
1448
+ break;
1449
+ }
1450
+ }
1451
+ }
1452
+ });
1453
+ if (updateDrawings.length === 0) return {
1454
+ redos: [],
1455
+ undos: []
1456
+ };
1457
+ return this._createUndoAndRedoMutation(unitId, subUnitId, updateDrawings);
1458
+ }
1459
+ _getUnitIdAndSubUnitId(params, type) {
1460
+ let target;
1461
+ if (type === "insert") target = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService, params);
1462
+ else target = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService);
1463
+ if (!target) return;
1464
+ const { unitId, subUnitId } = target;
1465
+ return {
1466
+ unitId,
1467
+ subUnitId
1468
+ };
1469
+ }
1470
+ _moveRangeInterceptor(unitId, subUnitId, fromRange, toRange) {
1471
+ const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1472
+ if (!sheetSkeletonParam) return {
1473
+ redos: [],
1474
+ undos: []
1475
+ };
1476
+ const { skeleton } = sheetSkeletonParam;
1477
+ const selectionRect = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, fromRange);
1478
+ if (!selectionRect) return {
1479
+ redos: [],
1480
+ undos: []
1481
+ };
1482
+ const { startX, endX, startY, endY } = selectionRect;
1483
+ const drawings = this._sheetDrawingService.getDrawingData(unitId, subUnitId);
1484
+ const containedDrawings = [];
1485
+ Object.keys(drawings).forEach((drawingId) => {
1486
+ const drawing = drawings[drawingId];
1487
+ if (drawing.anchorType !== "1") return;
1488
+ const { transform } = drawing;
1489
+ if (!transform) return;
1490
+ const { left = 0, top = 0, width = 0, height = 0 } = transform;
1491
+ const { drawingStartX, drawingEndX, drawingStartY, drawingEndY } = {
1492
+ drawingStartX: left,
1493
+ drawingEndX: left + width,
1494
+ drawingStartY: top,
1495
+ drawingEndY: top + height
1496
+ };
1497
+ if (startX <= drawingStartX && drawingEndX <= endX && startY <= drawingStartY && drawingEndY <= endY) containedDrawings.push(drawing);
1498
+ });
1499
+ const rowOffset = toRange.startRow - fromRange.startRow;
1500
+ const colOffset = toRange.startColumn - fromRange.startColumn;
1501
+ const updateDrawings = containedDrawings.map((drawing) => {
1502
+ const oldSheetTransform = drawing.sheetTransform;
1503
+ const sheetTransform = {
1504
+ to: {
1505
+ ...oldSheetTransform.to,
1506
+ row: oldSheetTransform.to.row + rowOffset,
1507
+ column: oldSheetTransform.to.column + colOffset
1508
+ },
1509
+ from: {
1510
+ ...oldSheetTransform.from,
1511
+ row: oldSheetTransform.from.row + rowOffset,
1512
+ column: oldSheetTransform.from.column + colOffset
1513
+ }
1514
+ };
1515
+ const transform = drawingPositionToTransform(sheetTransform, sheetSkeletonParam);
1516
+ return {
1517
+ unitId,
1518
+ subUnitId,
1519
+ drawingId: drawing.drawingId,
1520
+ transform,
1521
+ sheetTransform
1522
+ };
1523
+ });
1524
+ return this._finalizePlan(unitId, subUnitId, updateDrawings);
1525
+ }
1526
+ _moveRowInterceptor(params, type) {
1527
+ const target = this._getUnitIdAndSubUnitId(params, type);
1528
+ if (!target) return {
1529
+ redos: [],
1530
+ undos: []
1531
+ };
1532
+ const { unitId, subUnitId } = target;
1533
+ const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1534
+ if (!sheetSkeletonParam) return {
1535
+ redos: [],
1536
+ undos: []
1537
+ };
1538
+ const { range } = params;
1539
+ const rowStartIndex = range.startRow;
1540
+ const rowEndIndex = range.endRow;
1541
+ const data = this._sheetDrawingService.getDrawingData(unitId, subUnitId);
1542
+ const updateDrawings = [];
1543
+ const deleteDrawings = [];
1544
+ Object.keys(data).forEach((drawingId) => {
1545
+ const { sheetTransform, transform, anchorType = "0" } = data[drawingId];
1546
+ if (!sheetTransform || !transform) return;
1547
+ let newSheetTransform;
1548
+ let newTransform;
1549
+ let axisAlignSheetTransform;
1550
+ if (type === "insert") {
1551
+ var _param$axisAlignSheet5;
1552
+ const param = this._expandRow(rowStartIndex, rowEndIndex, {
1553
+ sheetSkeletonParam,
1554
+ sheetTransform,
1555
+ transform,
1556
+ anchorType
1557
+ });
1558
+ newSheetTransform = param === null || param === void 0 ? void 0 : param.newSheetTransform;
1559
+ newTransform = param === null || param === void 0 ? void 0 : param.newTransform;
1560
+ axisAlignSheetTransform = (_param$axisAlignSheet5 = param === null || param === void 0 ? void 0 : param.axisAlignSheetTransform) !== null && _param$axisAlignSheet5 !== void 0 ? _param$axisAlignSheet5 : void 0;
1561
+ } else {
1562
+ const { from, to } = sheetTransform;
1563
+ const { row: fromRow } = from;
1564
+ const { row: toRow } = to;
1565
+ if (anchorType === "1" && fromRow >= rowStartIndex && toRow <= rowEndIndex) deleteDrawings.push({
1566
+ unitId,
1567
+ subUnitId,
1568
+ drawingId
1569
+ });
1570
+ else {
1571
+ var _param$axisAlignSheet6;
1572
+ const param = this._shrinkRow(rowStartIndex, rowEndIndex, {
1573
+ sheetSkeletonParam,
1574
+ sheetTransform,
1575
+ transform,
1576
+ anchorType
1577
+ });
1578
+ newSheetTransform = param === null || param === void 0 ? void 0 : param.newSheetTransform;
1579
+ newTransform = param === null || param === void 0 ? void 0 : param.newTransform;
1580
+ axisAlignSheetTransform = (_param$axisAlignSheet6 = param === null || param === void 0 ? void 0 : param.axisAlignSheetTransform) !== null && _param$axisAlignSheet6 !== void 0 ? _param$axisAlignSheet6 : void 0;
1581
+ }
1582
+ }
1583
+ if (!newSheetTransform || !newTransform) return;
1584
+ const params = {
1585
+ unitId,
1586
+ subUnitId,
1587
+ drawingId,
1588
+ transform: newTransform,
1589
+ sheetTransform: newSheetTransform,
1590
+ axisAlignSheetTransform
1591
+ };
1592
+ updateDrawings.push(params);
1593
+ });
1594
+ return this._finalizePlan(unitId, subUnitId, updateDrawings, deleteDrawings);
1595
+ }
1596
+ _moveColInterceptor(params, type) {
1597
+ const target = this._getUnitIdAndSubUnitId(params, type);
1598
+ if (!target) return {
1599
+ redos: [],
1600
+ undos: []
1601
+ };
1602
+ const { unitId, subUnitId } = target;
1603
+ const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1604
+ if (!sheetSkeletonParam) return {
1605
+ redos: [],
1606
+ undos: []
1607
+ };
1608
+ const { range } = params;
1609
+ const colStartIndex = range.startColumn;
1610
+ const colEndIndex = range.endColumn;
1611
+ const data = this._sheetDrawingService.getDrawingData(unitId, subUnitId);
1612
+ const updateDrawings = [];
1613
+ const deleteDrawings = [];
1614
+ Object.keys(data).forEach((drawingId) => {
1615
+ const { sheetTransform, transform, anchorType = "0" } = data[drawingId];
1616
+ if (!sheetTransform || !transform) return;
1617
+ let newSheetTransform;
1618
+ let newTransform;
1619
+ let axisAlignSheetTransform;
1620
+ if (type === "insert") {
1621
+ var _param$axisAlignSheet7;
1622
+ const param = this._expandCol(colStartIndex, colEndIndex, {
1623
+ sheetSkeletonParam,
1624
+ sheetTransform,
1625
+ transform,
1626
+ anchorType
1627
+ });
1628
+ newSheetTransform = param === null || param === void 0 ? void 0 : param.newSheetTransform;
1629
+ newTransform = param === null || param === void 0 ? void 0 : param.newTransform;
1630
+ axisAlignSheetTransform = (_param$axisAlignSheet7 = param === null || param === void 0 ? void 0 : param.axisAlignSheetTransform) !== null && _param$axisAlignSheet7 !== void 0 ? _param$axisAlignSheet7 : void 0;
1631
+ } else {
1632
+ const { from, to } = sheetTransform;
1633
+ const { column: fromColumn } = from;
1634
+ const { column: toColumn } = to;
1635
+ if (anchorType === "1" && fromColumn >= colStartIndex && toColumn <= colEndIndex) deleteDrawings.push({
1636
+ unitId,
1637
+ subUnitId,
1638
+ drawingId
1639
+ });
1640
+ else {
1641
+ var _param$axisAlignSheet8;
1642
+ const param = this._shrinkCol(colStartIndex, colEndIndex, {
1643
+ sheetSkeletonParam,
1644
+ sheetTransform,
1645
+ transform,
1646
+ anchorType
1647
+ });
1648
+ newSheetTransform = param === null || param === void 0 ? void 0 : param.newSheetTransform;
1649
+ newTransform = param === null || param === void 0 ? void 0 : param.newTransform;
1650
+ axisAlignSheetTransform = (_param$axisAlignSheet8 = param === null || param === void 0 ? void 0 : param.axisAlignSheetTransform) !== null && _param$axisAlignSheet8 !== void 0 ? _param$axisAlignSheet8 : void 0;
1651
+ }
1652
+ }
1653
+ if (!newSheetTransform || !newTransform) return;
1654
+ const params = {
1655
+ unitId,
1656
+ subUnitId,
1657
+ drawingId,
1658
+ transform: newTransform,
1659
+ sheetTransform: newSheetTransform,
1660
+ axisAlignSheetTransform
1661
+ };
1662
+ updateDrawings.push(params);
1663
+ });
1664
+ return this._finalizePlan(unitId, subUnitId, updateDrawings, deleteDrawings);
1665
+ }
1666
+ _expandCol(colStartIndex, colEndIndex, options) {
1667
+ const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
1668
+ const { skeleton } = sheetSkeletonParam;
1669
+ const colCount = colEndIndex - colStartIndex + 1;
1670
+ const { from, to } = sheetTransform;
1671
+ const { column: fromColumn } = from;
1672
+ const { column: toColumn } = to;
1673
+ if (anchorType === "2") return {
1674
+ newSheetTransform: transformToDrawingPosition({ ...transform }, skeleton),
1675
+ newTransform: transform,
1676
+ axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
1677
+ };
1678
+ let newSheetTransform = null;
1679
+ let newTransform = null;
1680
+ let axisAlignSheetTransform = null;
1681
+ if (fromColumn >= colStartIndex) {
1682
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1683
+ startColumn: colStartIndex,
1684
+ endColumn: colEndIndex,
1685
+ startRow: from.row,
1686
+ endRow: to.row
1687
+ });
1688
+ newTransform = {
1689
+ ...transform,
1690
+ left: (transform.left || 0) + selectionCell.endX - selectionCell.startX
1691
+ };
1692
+ newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1693
+ axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1694
+ } else if (toColumn >= colEndIndex) if (anchorType === "1") {
1695
+ newSheetTransform = {
1696
+ from: { ...from },
1697
+ to: {
1698
+ ...to,
1699
+ column: toColumn + colCount
1700
+ }
1701
+ };
1702
+ newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1703
+ } else return {
1704
+ newSheetTransform: transformToDrawingPosition({ ...transform }, skeleton),
1705
+ newTransform: transform,
1706
+ axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
1707
+ };
1708
+ if (newSheetTransform && newTransform) return {
1709
+ newSheetTransform,
1710
+ newTransform,
1711
+ axisAlignSheetTransform
1712
+ };
1713
+ return null;
1714
+ }
1715
+ _shrinkCol(colStartIndex, colEndIndex, options) {
1716
+ const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
1717
+ const { skeleton } = sheetSkeletonParam;
1718
+ const colCount = colEndIndex - colStartIndex + 1;
1719
+ const { from, to } = sheetTransform;
1720
+ const { column: fromColumn } = from;
1721
+ const { column: toColumn } = to;
1722
+ if (anchorType === "2") return {
1723
+ newSheetTransform: transformToDrawingPosition({ ...transform }, skeleton),
1724
+ newTransform: transform,
1725
+ axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
1726
+ };
1727
+ let newSheetTransform = null;
1728
+ let newTransform = null;
1729
+ let axisAlignSheetTransform = null;
1730
+ if (fromColumn > colEndIndex) {
1731
+ newSheetTransform = {
1732
+ from: {
1733
+ ...from,
1734
+ column: fromColumn - colCount
1735
+ },
1736
+ to: {
1737
+ ...to,
1738
+ column: toColumn - colCount
1739
+ }
1740
+ };
1741
+ newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1742
+ } else if (fromColumn >= colStartIndex && toColumn <= colEndIndex) return null;
1743
+ else if (fromColumn < colStartIndex && toColumn > colEndIndex) if (anchorType === "1") {
1744
+ newSheetTransform = {
1745
+ from: { ...from },
1746
+ to: {
1747
+ ...to,
1748
+ column: toColumn - colCount
1749
+ }
1750
+ };
1751
+ newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1752
+ } else return {
1753
+ newSheetTransform: transformToDrawingPosition({ ...transform }, skeleton),
1754
+ newTransform: transform,
1755
+ axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
1756
+ };
1757
+ else if (fromColumn >= colStartIndex && fromColumn <= colEndIndex) {
1758
+ if (anchorType === "1") {
1759
+ newSheetTransform = {
1760
+ from: {
1761
+ ...from,
1762
+ column: colStartIndex,
1763
+ columnOffset: 0
1764
+ },
1765
+ to: {
1766
+ ...to,
1767
+ column: toColumn - colCount
1768
+ }
1769
+ };
1770
+ newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1771
+ axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1772
+ } else if (fromColumn === colStartIndex) newTransform = {
1773
+ ...transform,
1774
+ left: (transform.left || 0) - sheetTransform.from.columnOffset
1775
+ };
1776
+ else {
1777
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1778
+ startColumn: colStartIndex,
1779
+ endColumn: fromColumn - 1,
1780
+ startRow: from.row,
1781
+ endRow: to.row
1782
+ });
1783
+ newTransform = {
1784
+ ...transform,
1785
+ left: (transform.left || 0) - selectionCell.endX + selectionCell.startX - sheetTransform.from.columnOffset
1786
+ };
1787
+ }
1788
+ if (!newSheetTransform) {
1789
+ newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1790
+ axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1791
+ }
1792
+ } else if (toColumn >= colStartIndex && toColumn <= colEndIndex && anchorType === "1") {
1793
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1794
+ startColumn: colStartIndex - 1,
1795
+ endColumn: colStartIndex - 1,
1796
+ startRow: from.row,
1797
+ endRow: to.row
1798
+ });
1799
+ newSheetTransform = {
1800
+ from: { ...from },
1801
+ to: {
1802
+ ...to,
1803
+ column: colStartIndex - 1,
1804
+ columnOffset: selectionCell.endX - selectionCell.startX
1805
+ }
1806
+ };
1807
+ newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1808
+ }
1809
+ if (newSheetTransform && newTransform) return {
1810
+ newSheetTransform,
1811
+ newTransform,
1812
+ axisAlignSheetTransform
1813
+ };
1814
+ return null;
1815
+ }
1816
+ _expandRow(rowStartIndex, rowEndIndex, options) {
1817
+ const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
1818
+ const { skeleton } = sheetSkeletonParam;
1819
+ const rowCount = rowEndIndex - rowStartIndex + 1;
1820
+ const { from, to } = sheetTransform;
1821
+ const { row: fromRow } = from;
1822
+ const { row: toRow } = to;
1823
+ if (anchorType === "2") return {
1824
+ newSheetTransform: transformToDrawingPosition({ ...transform }, skeleton),
1825
+ newTransform: transform,
1826
+ axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
1827
+ };
1828
+ let newSheetTransform = null;
1829
+ let newTransform = null;
1830
+ let axisAlignSheetTransform = null;
1831
+ if (fromRow >= rowStartIndex) {
1832
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1833
+ startRow: rowStartIndex,
1834
+ endRow: rowEndIndex,
1835
+ startColumn: from.column,
1836
+ endColumn: to.column
1837
+ });
1838
+ newTransform = {
1839
+ ...transform,
1840
+ top: (transform.top || 0) + selectionCell.endY - selectionCell.startY
1841
+ };
1842
+ newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1843
+ axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1844
+ } else if (toRow >= rowEndIndex) if (anchorType === "1") {
1845
+ newSheetTransform = {
1846
+ from: { ...from },
1847
+ to: {
1848
+ ...to,
1849
+ row: toRow + rowCount
1850
+ }
1851
+ };
1852
+ newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1853
+ } else return {
1854
+ newSheetTransform: transformToDrawingPosition({ ...transform }, skeleton),
1855
+ newTransform: transform,
1856
+ axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
1857
+ };
1858
+ if (newSheetTransform && newTransform) return {
1859
+ newSheetTransform,
1860
+ newTransform,
1861
+ axisAlignSheetTransform
1862
+ };
1863
+ return null;
1864
+ }
1865
+ _shrinkRow(rowStartIndex, rowEndIndex, options) {
1866
+ const { sheetSkeletonParam, sheetTransform, transform, anchorType = "0" } = options;
1867
+ const { skeleton } = sheetSkeletonParam;
1868
+ const rowCount = rowEndIndex - rowStartIndex + 1;
1869
+ const { from, to } = sheetTransform;
1870
+ const { row: fromRow } = from;
1871
+ const { row: toRow } = to;
1872
+ if (anchorType === "2") return {
1873
+ newSheetTransform: transformToDrawingPosition({ ...transform }, skeleton),
1874
+ newTransform: transform,
1875
+ axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
1876
+ };
1877
+ let newSheetTransform = null;
1878
+ let newTransform = null;
1879
+ let axisAlignSheetTransform = null;
1880
+ if (fromRow > rowEndIndex) {
1881
+ newSheetTransform = {
1882
+ from: {
1883
+ ...from,
1884
+ row: fromRow - rowCount
1885
+ },
1886
+ to: {
1887
+ ...to,
1888
+ row: toRow - rowCount
1889
+ }
1890
+ };
1891
+ newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1892
+ } else if (fromRow >= rowStartIndex && toRow <= rowEndIndex) return null;
1893
+ else if (fromRow < rowStartIndex && toRow > rowEndIndex) if (anchorType === "1") {
1894
+ newSheetTransform = {
1895
+ from: { ...from },
1896
+ to: {
1897
+ ...to,
1898
+ row: toRow - rowCount
1899
+ }
1900
+ };
1901
+ newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1902
+ } else return {
1903
+ newSheetTransform: transformToDrawingPosition({ ...transform }, skeleton),
1904
+ newTransform: transform,
1905
+ axisAlignSheetTransform: transformToAxisAlignPosition({ ...transform }, skeleton)
1906
+ };
1907
+ else if (fromRow >= rowStartIndex && fromRow <= rowEndIndex) {
1908
+ if (anchorType === "1") {
1909
+ newSheetTransform = {
1910
+ from: {
1911
+ ...from,
1912
+ row: rowStartIndex,
1913
+ rowOffset: 0
1914
+ },
1915
+ to: {
1916
+ ...to,
1917
+ row: toRow - rowCount
1918
+ }
1919
+ };
1920
+ newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1921
+ axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1922
+ } else if (fromRow === rowStartIndex) newTransform = {
1923
+ ...transform,
1924
+ top: (transform.top || 0) - sheetTransform.from.rowOffset
1925
+ };
1926
+ else {
1927
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1928
+ startRow: rowStartIndex,
1929
+ endRow: fromRow - 1,
1930
+ startColumn: from.column,
1931
+ endColumn: to.column
1932
+ });
1933
+ newTransform = {
1934
+ ...transform,
1935
+ top: (transform.top || 0) - selectionCell.endY + selectionCell.startY - sheetTransform.from.rowOffset
1936
+ };
1937
+ }
1938
+ if (!newSheetTransform) {
1939
+ newSheetTransform = transformToDrawingPosition(newTransform, skeleton);
1940
+ axisAlignSheetTransform = transformToAxisAlignPosition(newTransform, skeleton);
1941
+ }
1942
+ } else if (toRow >= rowStartIndex && toRow <= rowEndIndex && anchorType === "1") {
1943
+ const selectionCell = (0, _univerjs_sheets.attachRangeWithCoord)(skeleton, {
1944
+ startColumn: from.column,
1945
+ endColumn: from.column,
1946
+ startRow: rowStartIndex - 1,
1947
+ endRow: rowStartIndex - 1
1948
+ });
1949
+ newSheetTransform = {
1950
+ from: { ...from },
1951
+ to: {
1952
+ ...to,
1953
+ row: rowStartIndex - 1,
1954
+ rowOffset: selectionCell.endY - selectionCell.startY
1955
+ }
1956
+ };
1957
+ newTransform = drawingPositionToTransform(newSheetTransform, sheetSkeletonParam);
1958
+ }
1959
+ if (newSheetTransform && newTransform) return {
1960
+ newSheetTransform,
1961
+ newTransform,
1962
+ axisAlignSheetTransform
1963
+ };
1964
+ return null;
1965
+ }
1966
+ _sheetRefreshListener() {
1967
+ this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
1968
+ if (!REFRESH_MUTATIONS.includes(command.id)) return;
1969
+ queueMicrotask(() => {
1970
+ const params = command.params;
1971
+ const target = (0, _univerjs_sheets.getSheetCommandTarget)(this._univerInstanceService, params);
1972
+ if (!target) return;
1973
+ const { unitId, subUnitId, worksheet } = target;
1974
+ let ranges = [];
1975
+ if ("ranges" in params) ranges = params.ranges;
1976
+ else if ("rowsAutoHeightInfo" in params) ranges = params.rowsAutoHeightInfo.map((info) => ({
1977
+ startRow: info.row,
1978
+ endRow: info.row,
1979
+ startColumn: 0,
1980
+ endColumn: worksheet.getColumnCount() - 1
1981
+ }));
1982
+ this._refreshDrawingTransform(command, unitId, subUnitId, ranges);
1983
+ });
1984
+ }));
1985
+ }
1986
+ _refreshDrawingTransform(command, unitId, subUnitId, ranges) {
1987
+ var _this$_drawingManager;
1988
+ const sheetSkeletonParam = this._getCalculatedSkeletonParam(unitId, subUnitId);
1989
+ const drawingData = (_this$_drawingManager = this._drawingManagerService.getDrawingData(unitId, subUnitId)) !== null && _this$_drawingManager !== void 0 ? _this$_drawingManager : {};
1990
+ const updateDrawings = [];
1991
+ Object.keys(drawingData).forEach((drawingId) => {
1992
+ const drawing = drawingData[drawingId];
1993
+ const { sheetTransform, transform, anchorType = "0" } = drawing;
1994
+ if (anchorType === "2") return true;
1995
+ if (!sheetTransform) return true;
1996
+ const { from, to } = sheetTransform;
1997
+ const { row: fromRow, column: fromColumn } = from;
1998
+ const { row: toRow, column: toColumn } = to;
1999
+ for (let i = 0; i < ranges.length; i++) {
2000
+ const { startRow, endRow, startColumn, endColumn } = ranges[i];
2001
+ if (_univerjs_core.Rectangle.intersects({
2002
+ startRow,
2003
+ endRow,
2004
+ startColumn,
2005
+ endColumn
2006
+ }, {
2007
+ startRow: fromRow,
2008
+ endRow: toRow,
2009
+ startColumn: fromColumn,
2010
+ endColumn: toColumn
2011
+ }) || fromRow > endRow || fromColumn > endColumn) {
2012
+ const isPositionAnchor = anchorType === "0";
2013
+ const newTransform = drawingPositionToTransform(sheetTransform, sheetSkeletonParam);
2014
+ updateDrawings.push({
2015
+ ...drawing,
2016
+ transform: {
2017
+ ...transform,
2018
+ left: newTransform === null || newTransform === void 0 ? void 0 : newTransform.left,
2019
+ top: newTransform === null || newTransform === void 0 ? void 0 : newTransform.top,
2020
+ width: isPositionAnchor ? transform === null || transform === void 0 ? void 0 : transform.width : newTransform === null || newTransform === void 0 ? void 0 : newTransform.width,
2021
+ height: isPositionAnchor ? transform === null || transform === void 0 ? void 0 : transform.height : newTransform === null || newTransform === void 0 ? void 0 : newTransform.height
2022
+ }
2023
+ });
2024
+ break;
2025
+ }
2026
+ }
2027
+ });
2028
+ this._finalizePlan(unitId, subUnitId, updateDrawings, [], "refresh", command);
2029
+ }
2030
+ };
2031
+ SheetDrawingTransformAffectedController = __decorate([
2032
+ __decorateParam(0, _univerjs_core.ICommandService),
2033
+ __decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_sheets.SheetSkeletonService)),
2034
+ __decorateParam(2, (0, _univerjs_core.Inject)(_univerjs_sheets.SheetInterceptorService)),
2035
+ __decorateParam(3, (0, _univerjs_core.Inject)(_univerjs_sheets.SheetsSelectionsService)),
2036
+ __decorateParam(4, ISheetDrawingService),
2037
+ __decorateParam(5, _univerjs_drawing.IDrawingManagerService),
2038
+ __decorateParam(6, _univerjs_core.IUniverInstanceService),
2039
+ __decorateParam(7, (0, _univerjs_core.Inject)(SheetDrawingTransformPlanService))
2040
+ ], SheetDrawingTransformAffectedController);
2041
+
721
2042
  //#endregion
722
2043
  //#region src/plugin.ts
723
2044
  let UniverSheetsDrawingPlugin = class UniverSheetsDrawingPlugin extends _univerjs_core.Plugin {
@@ -730,8 +2051,14 @@ let UniverSheetsDrawingPlugin = class UniverSheetsDrawingPlugin extends _univerj
730
2051
  this._configService.setConfig(SHEETS_DRAWING_PLUGIN_CONFIG_KEY, rest);
731
2052
  }
732
2053
  onStarting() {
733
- [[SheetsDrawingLoadController], [ISheetDrawingService, { useClass: SheetDrawingService }]].forEach((dependency) => this._injector.add(dependency));
2054
+ [
2055
+ [SheetsDrawingLoadController],
2056
+ [SheetDrawingTransformPlanService],
2057
+ [SheetDrawingTransformAffectedController],
2058
+ [ISheetDrawingService, { useClass: SheetDrawingService }]
2059
+ ].forEach((dependency) => this._injector.add(dependency));
734
2060
  this._injector.get(SheetsDrawingLoadController);
2061
+ this._injector.get(SheetDrawingTransformAffectedController);
735
2062
  }
736
2063
  };
737
2064
  _defineProperty(UniverSheetsDrawingPlugin, "pluginName", SHEET_DRAWING_PLUGIN);
@@ -756,6 +2083,7 @@ exports.SetDrawingArrangeCommand = SetDrawingArrangeCommand;
756
2083
  exports.SetSheetDrawingCommand = SetSheetDrawingCommand;
757
2084
  exports.SheetDrawingAnchorType = SheetDrawingAnchorType;
758
2085
  exports.SheetDrawingService = SheetDrawingService;
2086
+ exports.SheetDrawingTransformPlanService = SheetDrawingTransformPlanService;
759
2087
  Object.defineProperty(exports, 'UniverSheetsDrawingPlugin', {
760
2088
  enumerable: true,
761
2089
  get: function () {