@univerjs/drawing-ui 1.0.0-alpha.1 → 1.0.0-alpha.2

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
@@ -132,15 +132,13 @@ const SetDrawingArrangeBackwardOperation = {
132
132
  //#endregion
133
133
  //#region src/commands/operations/drawing-group.operation.ts
134
134
  /**
135
- * Now only support grouping images, shapes, and groups.
135
+ * Now only support grouping images, shapes, charts, and groups.
136
136
  */
137
- const DRAWING_GROUP_TYPES = [
138
- _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE,
139
- _univerjs_core.DrawingTypeEnum.DRAWING_SHAPE,
140
- _univerjs_core.DrawingTypeEnum.DRAWING_GROUP
141
- ];
137
+ const DRAWING_GROUP_TYPES = _univerjs_drawing.DRAWING_GROUPABLE_TYPES;
142
138
  /**
143
- * Group the selected drawings into a new group. The selected drawings must be of type image, shape, or group, and there must be at least 2 drawings selected.
139
+ * Group the selected drawings into a new group. The selected drawings must be
140
+ * of type image, shape, chart, or group, and there must be at least 2 drawings
141
+ * selected.
144
142
  */
145
143
  const SetDrawingGroupOperation = {
146
144
  id: "drawing.operation.set-drawing-group",
@@ -149,7 +147,7 @@ const SetDrawingGroupOperation = {
149
147
  const drawingManagerService = accessor.get(_univerjs_drawing.IDrawingManagerService);
150
148
  const drawings = params.drawings || drawingManagerService.getFocusDrawings();
151
149
  if (drawings.length < 2) return false;
152
- if (!drawings.every((drawing) => DRAWING_GROUP_TYPES.includes(drawing.drawingType))) return false;
150
+ if (!drawings.every((drawing) => (0, _univerjs_drawing.isGroupableDrawingType)(drawing.drawingType))) return false;
153
151
  const { unitId, subUnitId } = drawings[0];
154
152
  const groupId = (0, _univerjs_core.generateRandomId)(10);
155
153
  const groupTransform = (0, _univerjs_engine_render.getGroupState)(0, 0, drawings.map((o) => o.transform || {}));
@@ -171,11 +169,12 @@ const SetDrawingGroupOperation = {
171
169
  left: 0,
172
170
  top: 0
173
171
  };
174
- const { unitId, subUnitId, drawingId } = drawing;
172
+ const { unitId, subUnitId, drawingId, drawingType } = drawing;
175
173
  return {
176
174
  unitId,
177
175
  subUnitId,
178
176
  drawingId,
177
+ drawingType,
179
178
  transform: { ...transform },
180
179
  groupId
181
180
  };
@@ -267,8 +266,48 @@ const ImageResetSizeOperation = {
267
266
  }
268
267
  };
269
268
 
269
+ //#endregion
270
+ //#region src/utils/rotate-enabled.ts
271
+ function isKnownDrawingUINonRotatableType(drawingType) {
272
+ return drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_CHART;
273
+ }
274
+ function resolveDrawingUIRotateEnabled(drawing, options = {}) {
275
+ var _options$isKnownNonRo;
276
+ return (0, _univerjs_drawing.resolveDrawingRotateEnabled)(drawing, {
277
+ ...options,
278
+ isKnownNonRotatableType: (_options$isKnownNonRo = options.isKnownNonRotatableType) !== null && _options$isKnownNonRo !== void 0 ? _options$isKnownNonRo : isKnownDrawingUINonRotatableType
279
+ });
280
+ }
281
+
270
282
  //#endregion
271
283
  //#region src/controllers/utils.ts
284
+ function getDrawingRenderObject(scene, drawingSearch) {
285
+ var _scene$getObjectInclu;
286
+ const key = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)(drawingSearch);
287
+ return (_scene$getObjectInclu = scene.getObjectIncludeInGroup(key)) !== null && _scene$getObjectInclu !== void 0 ? _scene$getObjectInclu : null;
288
+ }
289
+ function disposeDrawingRenderObject(scene, drawingSearch) {
290
+ const object = getDrawingRenderObject(scene, drawingSearch);
291
+ if (object == null) return false;
292
+ object.dispose();
293
+ return true;
294
+ }
295
+ function getRenderObjectForDrawing(scene, drawing) {
296
+ return getDrawingRenderObject(scene, drawing);
297
+ }
298
+ function syncGroupRotateEnabled(group, groupParam, scene, drawingManagerService, children) {
299
+ const rotateEnabled = resolveDrawingUIRotateEnabled(groupParam, {
300
+ getChildren: (drawing) => {
301
+ if (children && drawing.drawingId === groupParam.drawingId && drawing.unitId === groupParam.unitId && drawing.subUnitId === groupParam.subUnitId) return children;
302
+ return drawingManagerService.getDrawingsByGroup(drawing);
303
+ },
304
+ getRenderObject: (drawing) => getRenderObjectForDrawing(scene, drawing)
305
+ });
306
+ group.transformerConfig = {
307
+ ...group.transformerConfig,
308
+ rotateEnabled
309
+ };
310
+ }
272
311
  function insertGroupObject(objectParam, object, scene, drawingManagerService) {
273
312
  const groupParam = drawingManagerService.getDrawingByParam(objectParam);
274
313
  if (groupParam == null) return;
@@ -279,11 +318,13 @@ function insertGroupObject(objectParam, object, scene, drawingManagerService) {
279
318
  const objects = groupObject.getObjects();
280
319
  for (const obj of objects) if (obj.oKey === object.oKey) return;
281
320
  groupObject.addObject(object);
321
+ syncGroupRotateEnabled(groupObject, groupParam, scene, drawingManagerService);
282
322
  return;
283
323
  }
284
324
  const group = new _univerjs_engine_render.DrawingGroupObject(groupKey);
285
325
  scene.addObject(group, _univerjs_engine_render.DRAWING_OBJECT_LAYER_INDEX).attachTransformerTo(group);
286
326
  group.addObject(object);
327
+ syncGroupRotateEnabled(group, groupParam, scene, drawingManagerService);
287
328
  const { transform, groupBaseBound } = groupParam;
288
329
  if (groupBaseBound) group.setBaseBound(groupBaseBound);
289
330
  if (groupParam.groupId) {
@@ -322,7 +363,7 @@ function getCurrentUnitInfo(currentUniverService, propUnitId) {
322
363
  //#endregion
323
364
  //#region package.json
324
365
  var name = "@univerjs/drawing-ui";
325
- var version = "1.0.0-alpha.1";
366
+ var version = "1.0.0-alpha.2";
326
367
 
327
368
  //#endregion
328
369
  //#region src/config/config.ts
@@ -943,16 +984,18 @@ function getUpdateParams(objects, drawingManagerService) {
943
984
 
944
985
  //#endregion
945
986
  //#region src/controllers/drawing-update.controller.ts
987
+ function hasRefreshMetadata(refreshParam) {
988
+ return "hidden" in refreshParam || "behindText" in refreshParam;
989
+ }
946
990
  function syncDrawingHiddenState(shape, drawingParam) {
947
991
  if (!("hidden" in drawingParam)) return;
948
992
  drawingParam.hidden === true ? shape.hide() : shape.show();
949
993
  }
950
994
  function mergeRefreshMetadata(drawingParam, refreshParam) {
951
- const metadata = refreshParam;
952
- if (!("hidden" in metadata) && !("behindText" in metadata)) return drawingParam;
995
+ if (!hasRefreshMetadata(refreshParam)) return drawingParam;
953
996
  return {
954
997
  ...drawingParam,
955
- ...metadata
998
+ ...refreshParam
956
999
  };
957
1000
  }
958
1001
  let DrawingUpdateController = class DrawingUpdateController extends _univerjs_core.Disposable {
@@ -1059,6 +1102,7 @@ let DrawingUpdateController = class DrawingUpdateController extends _univerjs_co
1059
1102
  }));
1060
1103
  scene.addObject(group, _univerjs_engine_render.DRAWING_OBJECT_LAYER_INDEX).attachTransformerTo(group);
1061
1104
  group.addObjects(...objects);
1105
+ syncGroupRotateEnabled(group, parent, scene, this._drawingManagerService, children);
1062
1106
  if (parent.groupBaseBound) group.setBaseBound(parent.groupBaseBound);
1063
1107
  if (parent.groupId) {
1064
1108
  group.isInGroup = true;
@@ -1271,15 +1315,12 @@ let DrawingUpdateController = class DrawingUpdateController extends _univerjs_co
1271
1315
  const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
1272
1316
  if (renderObject == null) return;
1273
1317
  const { scene } = renderObject;
1274
- const drawingShapeKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
1318
+ if (disposeDrawingRenderObject(scene, {
1275
1319
  unitId,
1276
1320
  subUnitId,
1277
1321
  drawingId
1278
- });
1279
- const drawingShapes = scene.fuzzyMathObjects(drawingShapeKey, true);
1280
- if (drawingShapes.length > 0) {
1322
+ })) {
1281
1323
  var _scene$getTransformer;
1282
- for (const drawingShape of drawingShapes) drawingShape.dispose();
1283
1324
  (_scene$getTransformer = scene.getTransformer()) === null || _scene$getTransformer === void 0 || _scene$getTransformer.clearSelectedObjects();
1284
1325
  }
1285
1326
  });
@@ -1340,7 +1381,7 @@ let DrawingUpdateController = class DrawingUpdateController extends _univerjs_co
1340
1381
  subUnitId,
1341
1382
  drawingId
1342
1383
  });
1343
- const drawingShape = scene.getObject(drawingShapeKey);
1384
+ const drawingShape = scene.getObjectIncludeInGroup(drawingShapeKey);
1344
1385
  const drawingParamWithRefreshMetadata = mergeRefreshMetadata(drawingParam, param);
1345
1386
  if (drawingShape == null) {
1346
1387
  if (drawingParamWithRefreshMetadata.hidden === true) return true;
@@ -2221,10 +2262,10 @@ function getMenuStateByDrawingFocusChangedObservable$(accessor, type) {
2221
2262
  if (!drawings || drawings.length === 0) return subscriber.next(true);
2222
2263
  if (type === "group") {
2223
2264
  if (drawings.length < 2) return subscriber.next(true);
2224
- if (!drawings.every((drawing) => DRAWING_GROUP_TYPES.includes(drawing.drawingType))) return subscriber.next(true);
2265
+ if (!drawings.every((drawing) => (0, _univerjs_drawing.isGroupableDrawingType)(drawing.drawingType))) return subscriber.next(true);
2225
2266
  } else if (type === "unGroup") {
2226
2267
  if (drawings.filter((drawing) => drawing.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_GROUP).length === 0) return subscriber.next(true);
2227
- } else if (!drawings.every((drawing) => DRAWING_GROUP_TYPES.includes(drawing.drawingType))) return subscriber.next(true);
2268
+ } else if (!drawings.every((drawing) => (0, _univerjs_drawing.isGroupableDrawingType)(drawing.drawingType))) return subscriber.next(true);
2228
2269
  subscriber.next(false);
2229
2270
  };
2230
2271
  const subscription = drawingManagerService.focus$.subscribe((drawings) => {
@@ -2644,6 +2685,29 @@ const DrawingGroup = (props) => {
2644
2685
  //#region src/utils/config.ts
2645
2686
  const RANGE_DRAWING_ROTATION_LIMIT = [-360, 360];
2646
2687
 
2688
+ //#endregion
2689
+ //#region src/views/panel/drawing-transform-rotation.ts
2690
+ function isDrawingTransformRotationDisabled(rotateEnabled) {
2691
+ return !rotateEnabled;
2692
+ }
2693
+ function createDrawingTransformRotationChangeHandler(options) {
2694
+ return (val) => {
2695
+ if (isDrawingTransformRotationDisabled(options.rotateEnabled)) return;
2696
+ if (val == null) return;
2697
+ const { unitId, subUnitId, drawingId, drawingType } = options.drawingParam;
2698
+ const updateParam = {
2699
+ unitId,
2700
+ subUnitId,
2701
+ drawingId,
2702
+ drawingType,
2703
+ transform: { angle: val }
2704
+ };
2705
+ options.setRotation(val);
2706
+ options.emitUpdate([updateParam]);
2707
+ options.notifyChange();
2708
+ };
2709
+ }
2710
+
2647
2711
  //#endregion
2648
2712
  //#region src/views/panel/DrawingTransform.tsx
2649
2713
  const INPUT_DEBOUNCE_TIME = 300;
@@ -2671,6 +2735,8 @@ const DrawingTransform = (props) => {
2671
2735
  const [yPosition, setYPosition] = (0, react.useState)(originY);
2672
2736
  const [rotation, setRotation] = (0, react.useState)(originRotation);
2673
2737
  const [lockRatio, setLockRatio] = (0, react.useState)(transformer.keepRatio);
2738
+ const rotateEnabled = resolveDrawingUIRotateEnabled(drawingParam, { getChildren: (drawing) => drawingManagerService.getDrawingsByGroup(drawing) });
2739
+ const rotationDisabled = isDrawingTransformRotationDisabled(rotateEnabled);
2674
2740
  const checkMoveBoundary = (left, top, width, height) => {
2675
2741
  const { width: topSceneWidth, height: topSceneHeight } = topScene;
2676
2742
  const { ancestorLeft, ancestorTop } = scene;
@@ -2811,19 +2877,18 @@ const DrawingTransform = (props) => {
2811
2877
  drawingManagerService.featurePluginUpdateNotification([updateParam]);
2812
2878
  transformer.refreshControls().changeNotification();
2813
2879
  }, INPUT_DEBOUNCE_TIME);
2814
- const handleRotationChange = (val) => {
2815
- if (val == null) return;
2816
- const updateParam = {
2880
+ const handleRotationChange = createDrawingTransformRotationChangeHandler({
2881
+ rotateEnabled,
2882
+ drawingParam: {
2817
2883
  unitId,
2818
2884
  subUnitId,
2819
2885
  drawingId,
2820
- drawingType,
2821
- transform: { angle: val }
2822
- };
2823
- setRotation(val);
2824
- drawingManagerService.featurePluginUpdateNotification([updateParam]);
2825
- transformer.refreshControls().changeNotification();
2826
- };
2886
+ drawingType
2887
+ },
2888
+ setRotation,
2889
+ emitUpdate: (updateParams) => drawingManagerService.featurePluginUpdateNotification(updateParams),
2890
+ notifyChange: () => transformer.refreshControls().changeNotification()
2891
+ });
2827
2892
  const handleLockRatioChange = (val) => {
2828
2893
  setLockRatio(val);
2829
2894
  transformer.keepRatio = val;
@@ -2885,6 +2950,7 @@ const DrawingTransform = (props) => {
2885
2950
  value: rotation,
2886
2951
  min: RANGE_DRAWING_ROTATION_LIMIT[0],
2887
2952
  max: RANGE_DRAWING_ROTATION_LIMIT[1],
2953
+ disabled: rotationDisabled,
2888
2954
  onChange: handleRotationChange
2889
2955
  })] })
2890
2956
  ]
@@ -3155,6 +3221,8 @@ Object.defineProperty(exports, 'UniverDrawingUIPlugin', {
3155
3221
  return UniverDrawingUIPlugin;
3156
3222
  }
3157
3223
  });
3224
+ exports.disposeDrawingRenderObject = disposeDrawingRenderObject;
3158
3225
  exports.getCurrentUnitInfo = getCurrentUnitInfo;
3226
+ exports.getDrawingRenderObject = getDrawingRenderObject;
3159
3227
  exports.getUpdateParams = getUpdateParams;
3160
3228
  exports.insertGroupObject = insertGroupObject;
package/lib/es/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ArrangeTypeEnum, BooleanNumber, CommandType, Disposable, DrawingTypeEnum, ICommandService, IConfigService, IURLImageService, IUniverInstanceService, ImageSourceType, Inject, Injector, LocaleService, Plugin, PositionedObjectLayoutType, UniverInstanceType, checkIfMove, debounce, generateRandomId, merge, toDisposable } from "@univerjs/core";
2
- import { IDrawingManagerService, IImageIoService, ImageSourceType as ImageSourceType$1, SetDrawingSelectedOperation, getDrawingShapeKeyByDrawingSearch } from "@univerjs/drawing";
2
+ import { DRAWING_GROUPABLE_TYPES, IDrawingManagerService, IImageIoService, ImageSourceType as ImageSourceType$1, SetDrawingSelectedOperation, getDrawingShapeKeyByDrawingSearch, isGroupableDrawingType, resolveDrawingRotateEnabled } from "@univerjs/drawing";
3
3
  import { CURSOR_TYPE, Canvas, DRAWING_OBJECT_LAYER_INDEX, DrawingGroupObject, Group, IRenderManagerService, Image, RENDER_CLASS_TYPE, Rect, Shape, Vector2, degToRad, getGroupState, precisionTo, transformObjectOutOfGroup } from "@univerjs/engine-render";
4
4
  import { AutofillDoubleIcon, BottomIcon, CreateCopyIcon, CropIcon, DeleteIcon, DocSettingIcon, GroupIcon, MoreDownIcon, MoveDownIcon, MoveUpIcon, TextWrapShapeIcon, TopmostIcon, UngroupIcon } from "@univerjs/icons";
5
5
  import { ComponentManager, ContextMenuGroup, ContextMenuPosition, IDialogService, IGalleryService, IMenuManagerService, IMessageService, IconManager, MenuItemType, useDependency, useObservable } from "@univerjs/ui";
@@ -131,15 +131,13 @@ const SetDrawingArrangeBackwardOperation = {
131
131
  //#endregion
132
132
  //#region src/commands/operations/drawing-group.operation.ts
133
133
  /**
134
- * Now only support grouping images, shapes, and groups.
134
+ * Now only support grouping images, shapes, charts, and groups.
135
135
  */
136
- const DRAWING_GROUP_TYPES = [
137
- DrawingTypeEnum.DRAWING_IMAGE,
138
- DrawingTypeEnum.DRAWING_SHAPE,
139
- DrawingTypeEnum.DRAWING_GROUP
140
- ];
136
+ const DRAWING_GROUP_TYPES = DRAWING_GROUPABLE_TYPES;
141
137
  /**
142
- * Group the selected drawings into a new group. The selected drawings must be of type image, shape, or group, and there must be at least 2 drawings selected.
138
+ * Group the selected drawings into a new group. The selected drawings must be
139
+ * of type image, shape, chart, or group, and there must be at least 2 drawings
140
+ * selected.
143
141
  */
144
142
  const SetDrawingGroupOperation = {
145
143
  id: "drawing.operation.set-drawing-group",
@@ -148,7 +146,7 @@ const SetDrawingGroupOperation = {
148
146
  const drawingManagerService = accessor.get(IDrawingManagerService);
149
147
  const drawings = params.drawings || drawingManagerService.getFocusDrawings();
150
148
  if (drawings.length < 2) return false;
151
- if (!drawings.every((drawing) => DRAWING_GROUP_TYPES.includes(drawing.drawingType))) return false;
149
+ if (!drawings.every((drawing) => isGroupableDrawingType(drawing.drawingType))) return false;
152
150
  const { unitId, subUnitId } = drawings[0];
153
151
  const groupId = generateRandomId(10);
154
152
  const groupTransform = getGroupState(0, 0, drawings.map((o) => o.transform || {}));
@@ -170,11 +168,12 @@ const SetDrawingGroupOperation = {
170
168
  left: 0,
171
169
  top: 0
172
170
  };
173
- const { unitId, subUnitId, drawingId } = drawing;
171
+ const { unitId, subUnitId, drawingId, drawingType } = drawing;
174
172
  return {
175
173
  unitId,
176
174
  subUnitId,
177
175
  drawingId,
176
+ drawingType,
178
177
  transform: { ...transform },
179
178
  groupId
180
179
  };
@@ -266,8 +265,48 @@ const ImageResetSizeOperation = {
266
265
  }
267
266
  };
268
267
 
268
+ //#endregion
269
+ //#region src/utils/rotate-enabled.ts
270
+ function isKnownDrawingUINonRotatableType(drawingType) {
271
+ return drawingType === DrawingTypeEnum.DRAWING_CHART;
272
+ }
273
+ function resolveDrawingUIRotateEnabled(drawing, options = {}) {
274
+ var _options$isKnownNonRo;
275
+ return resolveDrawingRotateEnabled(drawing, {
276
+ ...options,
277
+ isKnownNonRotatableType: (_options$isKnownNonRo = options.isKnownNonRotatableType) !== null && _options$isKnownNonRo !== void 0 ? _options$isKnownNonRo : isKnownDrawingUINonRotatableType
278
+ });
279
+ }
280
+
269
281
  //#endregion
270
282
  //#region src/controllers/utils.ts
283
+ function getDrawingRenderObject(scene, drawingSearch) {
284
+ var _scene$getObjectInclu;
285
+ const key = getDrawingShapeKeyByDrawingSearch(drawingSearch);
286
+ return (_scene$getObjectInclu = scene.getObjectIncludeInGroup(key)) !== null && _scene$getObjectInclu !== void 0 ? _scene$getObjectInclu : null;
287
+ }
288
+ function disposeDrawingRenderObject(scene, drawingSearch) {
289
+ const object = getDrawingRenderObject(scene, drawingSearch);
290
+ if (object == null) return false;
291
+ object.dispose();
292
+ return true;
293
+ }
294
+ function getRenderObjectForDrawing(scene, drawing) {
295
+ return getDrawingRenderObject(scene, drawing);
296
+ }
297
+ function syncGroupRotateEnabled(group, groupParam, scene, drawingManagerService, children) {
298
+ const rotateEnabled = resolveDrawingUIRotateEnabled(groupParam, {
299
+ getChildren: (drawing) => {
300
+ if (children && drawing.drawingId === groupParam.drawingId && drawing.unitId === groupParam.unitId && drawing.subUnitId === groupParam.subUnitId) return children;
301
+ return drawingManagerService.getDrawingsByGroup(drawing);
302
+ },
303
+ getRenderObject: (drawing) => getRenderObjectForDrawing(scene, drawing)
304
+ });
305
+ group.transformerConfig = {
306
+ ...group.transformerConfig,
307
+ rotateEnabled
308
+ };
309
+ }
271
310
  function insertGroupObject(objectParam, object, scene, drawingManagerService) {
272
311
  const groupParam = drawingManagerService.getDrawingByParam(objectParam);
273
312
  if (groupParam == null) return;
@@ -278,11 +317,13 @@ function insertGroupObject(objectParam, object, scene, drawingManagerService) {
278
317
  const objects = groupObject.getObjects();
279
318
  for (const obj of objects) if (obj.oKey === object.oKey) return;
280
319
  groupObject.addObject(object);
320
+ syncGroupRotateEnabled(groupObject, groupParam, scene, drawingManagerService);
281
321
  return;
282
322
  }
283
323
  const group = new DrawingGroupObject(groupKey);
284
324
  scene.addObject(group, DRAWING_OBJECT_LAYER_INDEX).attachTransformerTo(group);
285
325
  group.addObject(object);
326
+ syncGroupRotateEnabled(group, groupParam, scene, drawingManagerService);
286
327
  const { transform, groupBaseBound } = groupParam;
287
328
  if (groupBaseBound) group.setBaseBound(groupBaseBound);
288
329
  if (groupParam.groupId) {
@@ -321,7 +362,7 @@ function getCurrentUnitInfo(currentUniverService, propUnitId) {
321
362
  //#endregion
322
363
  //#region package.json
323
364
  var name = "@univerjs/drawing-ui";
324
- var version = "1.0.0-alpha.1";
365
+ var version = "1.0.0-alpha.2";
325
366
 
326
367
  //#endregion
327
368
  //#region src/config/config.ts
@@ -942,16 +983,18 @@ function getUpdateParams(objects, drawingManagerService) {
942
983
 
943
984
  //#endregion
944
985
  //#region src/controllers/drawing-update.controller.ts
986
+ function hasRefreshMetadata(refreshParam) {
987
+ return "hidden" in refreshParam || "behindText" in refreshParam;
988
+ }
945
989
  function syncDrawingHiddenState(shape, drawingParam) {
946
990
  if (!("hidden" in drawingParam)) return;
947
991
  drawingParam.hidden === true ? shape.hide() : shape.show();
948
992
  }
949
993
  function mergeRefreshMetadata(drawingParam, refreshParam) {
950
- const metadata = refreshParam;
951
- if (!("hidden" in metadata) && !("behindText" in metadata)) return drawingParam;
994
+ if (!hasRefreshMetadata(refreshParam)) return drawingParam;
952
995
  return {
953
996
  ...drawingParam,
954
- ...metadata
997
+ ...refreshParam
955
998
  };
956
999
  }
957
1000
  let DrawingUpdateController = class DrawingUpdateController extends Disposable {
@@ -1058,6 +1101,7 @@ let DrawingUpdateController = class DrawingUpdateController extends Disposable {
1058
1101
  }));
1059
1102
  scene.addObject(group, DRAWING_OBJECT_LAYER_INDEX).attachTransformerTo(group);
1060
1103
  group.addObjects(...objects);
1104
+ syncGroupRotateEnabled(group, parent, scene, this._drawingManagerService, children);
1061
1105
  if (parent.groupBaseBound) group.setBaseBound(parent.groupBaseBound);
1062
1106
  if (parent.groupId) {
1063
1107
  group.isInGroup = true;
@@ -1270,15 +1314,12 @@ let DrawingUpdateController = class DrawingUpdateController extends Disposable {
1270
1314
  const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
1271
1315
  if (renderObject == null) return;
1272
1316
  const { scene } = renderObject;
1273
- const drawingShapeKey = getDrawingShapeKeyByDrawingSearch({
1317
+ if (disposeDrawingRenderObject(scene, {
1274
1318
  unitId,
1275
1319
  subUnitId,
1276
1320
  drawingId
1277
- });
1278
- const drawingShapes = scene.fuzzyMathObjects(drawingShapeKey, true);
1279
- if (drawingShapes.length > 0) {
1321
+ })) {
1280
1322
  var _scene$getTransformer;
1281
- for (const drawingShape of drawingShapes) drawingShape.dispose();
1282
1323
  (_scene$getTransformer = scene.getTransformer()) === null || _scene$getTransformer === void 0 || _scene$getTransformer.clearSelectedObjects();
1283
1324
  }
1284
1325
  });
@@ -1339,7 +1380,7 @@ let DrawingUpdateController = class DrawingUpdateController extends Disposable {
1339
1380
  subUnitId,
1340
1381
  drawingId
1341
1382
  });
1342
- const drawingShape = scene.getObject(drawingShapeKey);
1383
+ const drawingShape = scene.getObjectIncludeInGroup(drawingShapeKey);
1343
1384
  const drawingParamWithRefreshMetadata = mergeRefreshMetadata(drawingParam, param);
1344
1385
  if (drawingShape == null) {
1345
1386
  if (drawingParamWithRefreshMetadata.hidden === true) return true;
@@ -2220,10 +2261,10 @@ function getMenuStateByDrawingFocusChangedObservable$(accessor, type) {
2220
2261
  if (!drawings || drawings.length === 0) return subscriber.next(true);
2221
2262
  if (type === "group") {
2222
2263
  if (drawings.length < 2) return subscriber.next(true);
2223
- if (!drawings.every((drawing) => DRAWING_GROUP_TYPES.includes(drawing.drawingType))) return subscriber.next(true);
2264
+ if (!drawings.every((drawing) => isGroupableDrawingType(drawing.drawingType))) return subscriber.next(true);
2224
2265
  } else if (type === "unGroup") {
2225
2266
  if (drawings.filter((drawing) => drawing.drawingType === DrawingTypeEnum.DRAWING_GROUP).length === 0) return subscriber.next(true);
2226
- } else if (!drawings.every((drawing) => DRAWING_GROUP_TYPES.includes(drawing.drawingType))) return subscriber.next(true);
2267
+ } else if (!drawings.every((drawing) => isGroupableDrawingType(drawing.drawingType))) return subscriber.next(true);
2227
2268
  subscriber.next(false);
2228
2269
  };
2229
2270
  const subscription = drawingManagerService.focus$.subscribe((drawings) => {
@@ -2643,6 +2684,29 @@ const DrawingGroup = (props) => {
2643
2684
  //#region src/utils/config.ts
2644
2685
  const RANGE_DRAWING_ROTATION_LIMIT = [-360, 360];
2645
2686
 
2687
+ //#endregion
2688
+ //#region src/views/panel/drawing-transform-rotation.ts
2689
+ function isDrawingTransformRotationDisabled(rotateEnabled) {
2690
+ return !rotateEnabled;
2691
+ }
2692
+ function createDrawingTransformRotationChangeHandler(options) {
2693
+ return (val) => {
2694
+ if (isDrawingTransformRotationDisabled(options.rotateEnabled)) return;
2695
+ if (val == null) return;
2696
+ const { unitId, subUnitId, drawingId, drawingType } = options.drawingParam;
2697
+ const updateParam = {
2698
+ unitId,
2699
+ subUnitId,
2700
+ drawingId,
2701
+ drawingType,
2702
+ transform: { angle: val }
2703
+ };
2704
+ options.setRotation(val);
2705
+ options.emitUpdate([updateParam]);
2706
+ options.notifyChange();
2707
+ };
2708
+ }
2709
+
2646
2710
  //#endregion
2647
2711
  //#region src/views/panel/DrawingTransform.tsx
2648
2712
  const INPUT_DEBOUNCE_TIME = 300;
@@ -2670,6 +2734,8 @@ const DrawingTransform = (props) => {
2670
2734
  const [yPosition, setYPosition] = useState(originY);
2671
2735
  const [rotation, setRotation] = useState(originRotation);
2672
2736
  const [lockRatio, setLockRatio] = useState(transformer.keepRatio);
2737
+ const rotateEnabled = resolveDrawingUIRotateEnabled(drawingParam, { getChildren: (drawing) => drawingManagerService.getDrawingsByGroup(drawing) });
2738
+ const rotationDisabled = isDrawingTransformRotationDisabled(rotateEnabled);
2673
2739
  const checkMoveBoundary = (left, top, width, height) => {
2674
2740
  const { width: topSceneWidth, height: topSceneHeight } = topScene;
2675
2741
  const { ancestorLeft, ancestorTop } = scene;
@@ -2810,19 +2876,18 @@ const DrawingTransform = (props) => {
2810
2876
  drawingManagerService.featurePluginUpdateNotification([updateParam]);
2811
2877
  transformer.refreshControls().changeNotification();
2812
2878
  }, INPUT_DEBOUNCE_TIME);
2813
- const handleRotationChange = (val) => {
2814
- if (val == null) return;
2815
- const updateParam = {
2879
+ const handleRotationChange = createDrawingTransformRotationChangeHandler({
2880
+ rotateEnabled,
2881
+ drawingParam: {
2816
2882
  unitId,
2817
2883
  subUnitId,
2818
2884
  drawingId,
2819
- drawingType,
2820
- transform: { angle: val }
2821
- };
2822
- setRotation(val);
2823
- drawingManagerService.featurePluginUpdateNotification([updateParam]);
2824
- transformer.refreshControls().changeNotification();
2825
- };
2885
+ drawingType
2886
+ },
2887
+ setRotation,
2888
+ emitUpdate: (updateParams) => drawingManagerService.featurePluginUpdateNotification(updateParams),
2889
+ notifyChange: () => transformer.refreshControls().changeNotification()
2890
+ });
2826
2891
  const handleLockRatioChange = (val) => {
2827
2892
  setLockRatio(val);
2828
2893
  transformer.keepRatio = val;
@@ -2884,6 +2949,7 @@ const DrawingTransform = (props) => {
2884
2949
  value: rotation,
2885
2950
  min: RANGE_DRAWING_ROTATION_LIMIT[0],
2886
2951
  max: RANGE_DRAWING_ROTATION_LIMIT[1],
2952
+ disabled: rotationDisabled,
2887
2953
  onChange: handleRotationChange
2888
2954
  })] })
2889
2955
  ]
@@ -3128,4 +3194,4 @@ const DrawingCommonPanel = (props) => {
3128
3194
  };
3129
3195
 
3130
3196
  //#endregion
3131
- export { AutoImageCropOperation, COMPONENT_IMAGE_POPUP_MENU, CancelDrawingGroupOperation, CloseImageCropOperation, DRAWING_GROUP_TYPES, DrawingCommonPanel, DrawingImageClipService, DrawingRenderService, IMAGE_CLIP_SHAPE_PICKER_COMPONENT, ImageCropperObject, ImageResetSizeOperation, OpenImageCropOperation, SetDrawingAlignOperation, SetDrawingArrangeOperation, SetDrawingGroupOperation, UniverDrawingUIPlugin, getCurrentUnitInfo, getUpdateParams, insertGroupObject };
3197
+ export { AutoImageCropOperation, COMPONENT_IMAGE_POPUP_MENU, CancelDrawingGroupOperation, CloseImageCropOperation, DRAWING_GROUP_TYPES, DrawingCommonPanel, DrawingImageClipService, DrawingRenderService, IMAGE_CLIP_SHAPE_PICKER_COMPONENT, ImageCropperObject, ImageResetSizeOperation, OpenImageCropOperation, SetDrawingAlignOperation, SetDrawingArrangeOperation, SetDrawingGroupOperation, UniverDrawingUIPlugin, disposeDrawingRenderObject, getCurrentUnitInfo, getDrawingRenderObject, getUpdateParams, insertGroupObject };