@univerjs/docs-drawing-ui 1.0.0-beta.0 → 1.0.0-beta.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.
Files changed (86) hide show
  1. package/lib/cjs/index.js +187 -72
  2. package/lib/cjs/locale/ar-SA.js +0 -3
  3. package/lib/cjs/locale/ca-ES.js +0 -3
  4. package/lib/cjs/locale/de-DE.js +0 -3
  5. package/lib/cjs/locale/en-US.js +0 -3
  6. package/lib/cjs/locale/es-ES.js +0 -3
  7. package/lib/cjs/locale/fa-IR.js +0 -3
  8. package/lib/cjs/locale/fr-FR.js +0 -3
  9. package/lib/cjs/locale/id-ID.js +0 -3
  10. package/lib/cjs/locale/it-IT.js +0 -3
  11. package/lib/cjs/locale/ja-JP.js +0 -3
  12. package/lib/cjs/locale/ko-KR.js +0 -3
  13. package/lib/cjs/locale/pl-PL.js +0 -3
  14. package/lib/cjs/locale/pt-BR.js +0 -3
  15. package/lib/cjs/locale/ru-RU.js +0 -3
  16. package/lib/cjs/locale/sk-SK.js +0 -3
  17. package/lib/cjs/locale/vi-VN.js +0 -3
  18. package/lib/cjs/locale/zh-CN.js +0 -3
  19. package/lib/cjs/locale/zh-HK.js +0 -3
  20. package/lib/cjs/locale/zh-TW.js +0 -3
  21. package/lib/es/index.js +187 -72
  22. package/lib/es/locale/ar-SA.js +0 -3
  23. package/lib/es/locale/ca-ES.js +0 -3
  24. package/lib/es/locale/de-DE.js +0 -3
  25. package/lib/es/locale/en-US.js +0 -3
  26. package/lib/es/locale/es-ES.js +0 -3
  27. package/lib/es/locale/fa-IR.js +0 -3
  28. package/lib/es/locale/fr-FR.js +0 -3
  29. package/lib/es/locale/id-ID.js +0 -3
  30. package/lib/es/locale/it-IT.js +0 -3
  31. package/lib/es/locale/ja-JP.js +0 -3
  32. package/lib/es/locale/ko-KR.js +0 -3
  33. package/lib/es/locale/pl-PL.js +0 -3
  34. package/lib/es/locale/pt-BR.js +0 -3
  35. package/lib/es/locale/ru-RU.js +0 -3
  36. package/lib/es/locale/sk-SK.js +0 -3
  37. package/lib/es/locale/vi-VN.js +0 -3
  38. package/lib/es/locale/zh-CN.js +0 -3
  39. package/lib/es/locale/zh-HK.js +0 -3
  40. package/lib/es/locale/zh-TW.js +0 -3
  41. package/lib/index.js +187 -72
  42. package/lib/locale/ar-SA.js +0 -3
  43. package/lib/locale/ca-ES.js +0 -3
  44. package/lib/locale/de-DE.js +0 -3
  45. package/lib/locale/en-US.js +0 -3
  46. package/lib/locale/es-ES.js +0 -3
  47. package/lib/locale/fa-IR.js +0 -3
  48. package/lib/locale/fr-FR.js +0 -3
  49. package/lib/locale/id-ID.js +0 -3
  50. package/lib/locale/it-IT.js +0 -3
  51. package/lib/locale/ja-JP.js +0 -3
  52. package/lib/locale/ko-KR.js +0 -3
  53. package/lib/locale/pl-PL.js +0 -3
  54. package/lib/locale/pt-BR.js +0 -3
  55. package/lib/locale/ru-RU.js +0 -3
  56. package/lib/locale/sk-SK.js +0 -3
  57. package/lib/locale/vi-VN.js +0 -3
  58. package/lib/locale/zh-CN.js +0 -3
  59. package/lib/locale/zh-HK.js +0 -3
  60. package/lib/locale/zh-TW.js +0 -3
  61. package/lib/types/controllers/render-controllers/doc-drawing-transform-update.controller.d.ts +3 -0
  62. package/lib/types/controllers/render-controllers/doc-drawing-update.render-controller.d.ts +4 -0
  63. package/lib/types/locale/en-US.d.ts +0 -3
  64. package/lib/types/menu/drawing-popup-menu.controller.d.ts +3 -0
  65. package/lib/types/services/doc-drawing-floating-toolbar-adapter.service.d.ts +1 -0
  66. package/lib/umd/index.js +1 -1
  67. package/lib/umd/locale/ar-SA.js +1 -1
  68. package/lib/umd/locale/ca-ES.js +1 -1
  69. package/lib/umd/locale/de-DE.js +1 -1
  70. package/lib/umd/locale/en-US.js +1 -1
  71. package/lib/umd/locale/es-ES.js +1 -1
  72. package/lib/umd/locale/fa-IR.js +1 -1
  73. package/lib/umd/locale/fr-FR.js +1 -1
  74. package/lib/umd/locale/id-ID.js +1 -1
  75. package/lib/umd/locale/it-IT.js +1 -1
  76. package/lib/umd/locale/ja-JP.js +1 -1
  77. package/lib/umd/locale/ko-KR.js +1 -1
  78. package/lib/umd/locale/pl-PL.js +1 -1
  79. package/lib/umd/locale/pt-BR.js +1 -1
  80. package/lib/umd/locale/ru-RU.js +1 -1
  81. package/lib/umd/locale/sk-SK.js +1 -1
  82. package/lib/umd/locale/vi-VN.js +1 -1
  83. package/lib/umd/locale/zh-CN.js +1 -1
  84. package/lib/umd/locale/zh-HK.js +1 -1
  85. package/lib/umd/locale/zh-TW.js +1 -1
  86. package/package.json +11 -11
package/lib/cjs/index.js CHANGED
@@ -163,6 +163,7 @@ let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController ex
163
163
  this._docRefreshDrawingsService = _docRefreshDrawingsService;
164
164
  this._fileOpenerService = _fileOpenerService;
165
165
  this._updateOrderListener();
166
+ this._updateImageCropListener();
166
167
  this._groupDrawingListener();
167
168
  this._focusDrawingListener();
168
169
  this._transformDrawingListener();
@@ -174,10 +175,12 @@ let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController ex
174
175
  }
175
176
  async insertDocImage() {
176
177
  const insertPosition = this._getCurrentImageInsertPosition();
178
+ const textRange = this._getCurrentImageInsertTextRange();
177
179
  const files = await this._fileOpenerService.openFile({
178
180
  multiple: true,
179
181
  accept: _univerjs_drawing.DRAWING_IMAGE_ALLOW_IMAGE_LIST.map((image) => `.${image.replace("image/", "")}`).join(",")
180
182
  });
183
+ if (this._disposed) return false;
181
184
  const fileLength = files.length;
182
185
  if (fileLength > _univerjs_drawing.DRAWING_IMAGE_COUNT_LIMIT) {
183
186
  this._messageService.show({
@@ -186,10 +189,9 @@ let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController ex
186
189
  });
187
190
  return false;
188
191
  } else if (fileLength === 0) return false;
189
- await this._insertFloatImages(files, insertPosition);
190
- return true;
192
+ return await this._insertFloatImages(files, insertPosition, textRange);
191
193
  }
192
- async _insertFloatImages(files, insertPosition) {
194
+ async _insertFloatImages(files, insertPosition, textRange) {
193
195
  let imageParams = [];
194
196
  try {
195
197
  imageParams = await Promise.all(files.map((file) => this._imageIoService.saveImage(file)));
@@ -213,13 +215,14 @@ let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController ex
213
215
  content
214
216
  });
215
217
  }
216
- if (imageParams.length === 0) return;
218
+ if (this._disposed || imageParams.length === 0) return false;
217
219
  const { unitId } = this._context;
218
220
  const docDrawingParams = [];
219
221
  for (const imageParam of imageParams) {
220
222
  if (imageParam == null) continue;
221
223
  const { imageId, imageSourceType, source, base64Cache } = imageParam;
222
224
  const { width, height, image } = await (0, _univerjs_drawing.getImageSize)(base64Cache || "");
225
+ if (this._disposed) return false;
223
226
  this._imageIoService.addImageSourceCache(imageId, imageSourceType, image);
224
227
  let scale = 1;
225
228
  if (width > _univerjs_drawing.DRAWING_IMAGE_WIDTH_LIMIT || height > _univerjs_drawing.DRAWING_IMAGE_HEIGHT_LIMIT) {
@@ -229,7 +232,7 @@ let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController ex
229
232
  }
230
233
  const imagePosition = insertPosition ?? this._getCurrentImageInsertPosition();
231
234
  const docTransform = this._getImagePosition(width * scale, height * scale, imagePosition);
232
- if (docTransform == null) return;
235
+ if (docTransform == null) return false;
233
236
  const transform = (0, _univerjs_docs.docDrawingPositionToTransform)(docTransform);
234
237
  if (transform != null && imagePosition != null) transform.top = imagePosition.top;
235
238
  const docDrawingParam = {
@@ -257,9 +260,10 @@ let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController ex
257
260
  }
258
261
  docDrawingParams.push(docDrawingParam);
259
262
  }
260
- this._commandService.executeCommand(_univerjs_docs_drawing.InsertDocDrawingCommand.id, {
263
+ return await this._commandService.executeCommand(_univerjs_docs_drawing.InsertDocDrawingCommand.id, {
261
264
  unitId,
262
- drawings: docDrawingParams
265
+ drawings: docDrawingParams,
266
+ textRange: textRange ?? void 0
263
267
  });
264
268
  }
265
269
  _isInsertInHeaderFooter() {
@@ -284,6 +288,9 @@ let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController ex
284
288
  top: position.top
285
289
  };
286
290
  }
291
+ _getCurrentImageInsertTextRange() {
292
+ return this._docSelectionRenderService.getAllTextRanges().find((range) => range.isActive) ?? this._docSelectionManagerService.getActiveTextRange();
293
+ }
287
294
  _updateOrderListener() {
288
295
  this.disposeWithMe(this._drawingManagerService.featurePluginOrderUpdate$.subscribe((params) => {
289
296
  const { unitId, subUnitId, drawingIds, arrangeType } = params;
@@ -295,6 +302,73 @@ let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController ex
295
302
  });
296
303
  }));
297
304
  }
305
+ _updateImageCropListener() {
306
+ this.disposeWithMe(this._drawingManagerService.featurePluginUpdate$.subscribe((params) => {
307
+ const drawings = params.flatMap((param) => this._getImageCropUpdates(param));
308
+ if (drawings.length > 0) {
309
+ const { unitId } = this._context;
310
+ this._commandService.executeCommand(_univerjs_docs_drawing.UpdateDrawingDocTransformCommand.id, {
311
+ unitId,
312
+ subUnitId: unitId,
313
+ drawings
314
+ });
315
+ }
316
+ }));
317
+ }
318
+ _getImageCropUpdates(param) {
319
+ const { unitId, subUnitId, drawingId, transform } = param;
320
+ if ([unitId, subUnitId].some((id) => id !== this._context.unitId)) return [];
321
+ if (transform == null || !Object.prototype.hasOwnProperty.call(param, "srcRect")) return [];
322
+ const docDrawing = this._getDocDrawing(drawingId);
323
+ const renderDrawing = this._drawingManagerService.getDrawingByParam({
324
+ unitId,
325
+ subUnitId,
326
+ drawingId
327
+ });
328
+ if ((docDrawing === null || docDrawing === void 0 ? void 0 : docDrawing.drawingType) !== _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE || (renderDrawing === null || renderDrawing === void 0 ? void 0 : renderDrawing.transform) == null) return [];
329
+ const nextTransform = {
330
+ ...renderDrawing.transform,
331
+ ...transform
332
+ };
333
+ const drawings = [{
334
+ drawingId,
335
+ key: "srcRect",
336
+ value: param.srcRect
337
+ }];
338
+ if (nextTransform.width != null && nextTransform.height != null) drawings.push({
339
+ drawingId,
340
+ key: "size",
341
+ value: {
342
+ width: nextTransform.width,
343
+ height: nextTransform.height
344
+ }
345
+ });
346
+ if (docDrawing.layoutType === _univerjs_core.PositionedObjectLayoutType.INLINE || renderDrawing.isMultiTransform === _univerjs_core.BooleanNumber.TRUE) return drawings;
347
+ const horizontalDelta = (nextTransform.left ?? 0) - (renderDrawing.transform.left ?? 0);
348
+ const verticalDelta = (nextTransform.top ?? 0) - (renderDrawing.transform.top ?? 0);
349
+ const { positionH, positionV } = docDrawing.docTransform;
350
+ if (horizontalDelta !== 0 && positionH.posOffset != null) drawings.push({
351
+ drawingId,
352
+ key: "positionH",
353
+ value: {
354
+ relativeFrom: positionH.relativeFrom,
355
+ posOffset: positionH.posOffset + horizontalDelta
356
+ }
357
+ });
358
+ if (verticalDelta !== 0 && positionV.posOffset != null) drawings.push({
359
+ drawingId,
360
+ key: "positionV",
361
+ value: {
362
+ relativeFrom: positionV.relativeFrom,
363
+ posOffset: positionV.posOffset + verticalDelta
364
+ }
365
+ });
366
+ return drawings;
367
+ }
368
+ _getDocDrawing(drawingId) {
369
+ var _this$_context$unit$g;
370
+ return (_this$_context$unit$g = this._context.unit.getDrawings()) === null || _this$_context$unit$g === void 0 ? void 0 : _this$_context$unit$g[drawingId];
371
+ }
298
372
  _groupDrawingListener() {
299
373
  this.disposeWithMe(this._drawingManagerService.featurePluginGroupUpdate$.subscribe((params) => {
300
374
  this._commandService.executeCommand(GroupDocDrawingCommand.id, params);
@@ -317,7 +391,7 @@ let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController ex
317
391
  }
318
392
  _transformDrawingListener() {
319
393
  const res = this._getCurrentSceneAndTransformer();
320
- if (res && res.transformer) this.disposeWithMe(res.transformer.changeEnd$.pipe((0, rxjs.debounceTime)(30)).subscribe((params) => {
394
+ if (res && res.transformer) this.disposeWithMe(res.transformer.changeEnd$.pipe((0, rxjs.debounceTime)(30)).subscribe(() => {
321
395
  this._docSelectionManagerService.refreshSelection();
322
396
  }));
323
397
  else throw new Error("transformer is not init");
@@ -382,13 +456,13 @@ let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController ex
382
456
  scene.detachTransformerFrom(shape);
383
457
  try {
384
458
  shape.setOpacity(isDocInputFocusing ? .5 : 1);
385
- } catch (e) {}
459
+ } catch {}
386
460
  if (!isDocInputFocusing) continue;
387
461
  if (isEditBody && drawing.isMultiTransform !== _univerjs_core.BooleanNumber.TRUE || !isEditBody && drawing.isMultiTransform === _univerjs_core.BooleanNumber.TRUE) {
388
462
  if (drawing.allowTransform !== false) scene.attachTransformerTo(shape);
389
463
  try {
390
464
  shape.setOpacity(1);
391
- } catch (e) {}
465
+ } catch {}
392
466
  }
393
467
  }
394
468
  }
@@ -1034,7 +1108,8 @@ const getDisableWhenSelectionInTableObservable = (accessor) => {
1034
1108
  function ImageMenuFactory(accessor) {
1035
1109
  return {
1036
1110
  id: DOCS_IMAGE_MENU_ID,
1037
- type: _univerjs_ui.MenuItemType.SUBITEMS,
1111
+ commandId: IMAGE_MENU_UPLOAD_FLOAT_ID,
1112
+ type: _univerjs_ui.MenuItemType.BUTTON,
1038
1113
  icon: "AddImageIcon",
1039
1114
  tooltip: "docs-drawing-ui.title",
1040
1115
  disabled$: getDisableWhenSelectionInTableObservable(accessor),
@@ -1128,11 +1203,7 @@ function InsertEllipseShapeBelowMenuFactory(accessor) {
1128
1203
  const menuSchema = {
1129
1204
  [_univerjs_ui.RibbonInsertGroup.MEDIA]: { [DOCS_IMAGE_MENU_ID]: {
1130
1205
  order: 0,
1131
- menuItemFactory: ImageMenuFactory,
1132
- [IMAGE_MENU_UPLOAD_FLOAT_ID]: {
1133
- order: 0,
1134
- menuItemFactory: UploadFloatImageMenuFactory
1135
- }
1206
+ menuItemFactory: ImageMenuFactory
1136
1207
  } },
1137
1208
  [_univerjs_ui.ContextMenuPosition.PARAGRAPH]: {
1138
1209
  [_univerjs_ui.ContextMenuGroup.LAYOUT]: { [_univerjs_docs_ui.INSERT_BELLOW_MENU_ID]: { [IMAGE_MENU_UPLOAD_FLOAT_ID]: {
@@ -1195,7 +1266,7 @@ const menuSchema = {
1195
1266
  //#endregion
1196
1267
  //#region package.json
1197
1268
  var name = "@univerjs/docs-drawing-ui";
1198
- var version = "1.0.0-beta.0";
1269
+ var version = "1.0.0-beta.2";
1199
1270
 
1200
1271
  //#endregion
1201
1272
  //#region src/config/config.ts
@@ -2608,6 +2679,7 @@ let DocDrawingTransformUpdateController = class DocDrawingTransformUpdateControl
2608
2679
  this._univerInstanceService = _univerInstanceService;
2609
2680
  this._lifecycleService = _lifecycleService;
2610
2681
  _defineProperty(this, "_liquid", new _univerjs_engine_render.Liquid());
2682
+ _defineProperty(this, "_changesetDrawingRefreshScheduled", false);
2611
2683
  this._initialize();
2612
2684
  this._commandExecutedListener();
2613
2685
  }
@@ -2628,21 +2700,40 @@ let DocDrawingTransformUpdateController = class DocDrawingTransformUpdateControl
2628
2700
  }
2629
2701
  _commandExecutedListener() {
2630
2702
  const updateCommandList = [_univerjs_docs.RichTextEditingMutation.id, _univerjs_docs_ui.SetDocZoomRatioOperation.id];
2631
- this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
2703
+ this.disposeWithMe(this._commandService.onCommandExecuted((command, options) => {
2632
2704
  if (updateCommandList.includes(command.id)) {
2633
2705
  const { unitId: commandUnitId } = command.params;
2634
- const { unitId, mainComponent } = this._context;
2706
+ const { unitId } = this._context;
2635
2707
  if (commandUnitId !== unitId) return;
2636
- const skeleton = this._docSkeletonManagerService.getSkeleton();
2637
- if (skeleton == null) return;
2638
- if (this._editorService.isEditor(unitId)) {
2639
- mainComponent === null || mainComponent === void 0 || mainComponent.makeDirty();
2708
+ if (command.id === _univerjs_docs.RichTextEditingMutation.id && (options === null || options === void 0 ? void 0 : options.fromChangeset)) {
2709
+ this._scheduleChangesetDrawingRefresh();
2640
2710
  return;
2641
2711
  }
2642
- this._refreshDrawing(skeleton);
2712
+ this._refreshCurrentDrawing();
2643
2713
  }
2644
2714
  }));
2645
2715
  }
2716
+ _scheduleChangesetDrawingRefresh() {
2717
+ if (this._changesetDrawingRefreshScheduled) return;
2718
+ this._changesetDrawingRefreshScheduled = true;
2719
+ queueMicrotask(() => {
2720
+ queueMicrotask(() => {
2721
+ this._changesetDrawingRefreshScheduled = false;
2722
+ if (this._disposed) return;
2723
+ this._refreshCurrentDrawing();
2724
+ });
2725
+ });
2726
+ }
2727
+ _refreshCurrentDrawing() {
2728
+ const skeleton = this._docSkeletonManagerService.getSkeleton();
2729
+ if (skeleton == null) return;
2730
+ const { unitId, mainComponent } = this._context;
2731
+ if (this._editorService.isEditor(unitId)) {
2732
+ mainComponent === null || mainComponent === void 0 || mainComponent.makeDirty();
2733
+ return;
2734
+ }
2735
+ this._refreshDrawing(skeleton);
2736
+ }
2646
2737
  _initTransformRefresh() {
2647
2738
  this.disposeWithMe((0, rxjs.merge)((0, _univerjs_core.fromEventSubject)(this._context.engine.onTransformChange$).pipe((0, rxjs.filter)((evt) => evt.type === _univerjs_engine_render.TRANSFORM_CHANGE_OBSERVABLE_TYPE.resize)), (0, _univerjs_core.fromEventSubject)(this._context.scene.onTransformChange$).pipe((0, rxjs.filter)((evt) => evt.type === _univerjs_engine_render.TRANSFORM_CHANGE_OBSERVABLE_TYPE.scale))).pipe((0, rxjs.debounceTime)(16)).subscribe(() => {
2648
2739
  var _scene$getTransformer;
@@ -3586,6 +3677,8 @@ let DocDrawingPopupMenuController = class DocDrawingPopupMenuController extends
3586
3677
  this._floatingToolbarAdapterService = _floatingToolbarAdapterService;
3587
3678
  this._commandService = _commandService;
3588
3679
  _defineProperty(this, "_initImagePopupMenu", /* @__PURE__ */ new Set());
3680
+ _defineProperty(this, "_embeddedRenderUnits", /* @__PURE__ */ new Set());
3681
+ _defineProperty(this, "_popupMenuListeners", /* @__PURE__ */ new Map());
3589
3682
  _defineProperty(this, "_disposePopups", []);
3590
3683
  _defineProperty(this, "_isDrawingPanelOpen", false);
3591
3684
  this._init();
@@ -3607,11 +3700,21 @@ let DocDrawingPopupMenuController = class DocDrawingPopupMenuController extends
3607
3700
  }));
3608
3701
  this.disposeWithMe(this._univerInstanceService.getCurrentTypeOfUnit$(_univerjs_core.UniverInstanceType.UNIVER_DOC).pipe((0, rxjs.takeUntil)(this.dispose$)).subscribe((documentDataModel) => this._create(documentDataModel)));
3609
3702
  this.disposeWithMe(this._univerInstanceService.getTypeOfUnitDisposed$(_univerjs_core.UniverInstanceType.UNIVER_DOC).pipe((0, rxjs.takeUntil)(this.dispose$)).subscribe((documentDataModel) => this._dispose(documentDataModel)));
3703
+ this.disposeWithMe(this._renderManagerService.created$.pipe((0, rxjs.takeUntil)(this.dispose$)).subscribe((render) => {
3704
+ if (render.type !== _univerjs_core.UniverInstanceType.UNIVER_DOC || render.isMainScene) return;
3705
+ this._embeddedRenderUnits.add(render.unitId);
3706
+ this._create(this._univerInstanceService.getUnit(render.unitId, _univerjs_core.UniverInstanceType.UNIVER_DOC));
3707
+ }));
3708
+ this.disposeWithMe(this._renderManagerService.disposed$.pipe((0, rxjs.takeUntil)(this.dispose$)).subscribe((unitId) => {
3709
+ if (!this._embeddedRenderUnits.delete(unitId)) return;
3710
+ this._disposePopupMenuListener(unitId);
3711
+ }));
3610
3712
  this._univerInstanceService.getAllUnitsForType(_univerjs_core.UniverInstanceType.UNIVER_DOC).forEach((documentDataModel) => this._create(documentDataModel));
3611
3713
  }
3612
3714
  _dispose(documentDataModel) {
3613
3715
  const unitId = documentDataModel.getUnitId();
3614
3716
  this._clearPopups();
3717
+ this._disposePopupMenuListener(unitId);
3615
3718
  this._renderManagerService.removeRender(unitId);
3616
3719
  }
3617
3720
  _clearPopups() {
@@ -3623,10 +3726,20 @@ let DocDrawingPopupMenuController = class DocDrawingPopupMenuController extends
3623
3726
  const unitId = documentDataModel.getUnitId();
3624
3727
  if ((0, _univerjs_core.isInternalEditorID)(unitId)) return;
3625
3728
  if (this._renderManagerService.has(unitId) && !this._initImagePopupMenu.has(unitId)) {
3626
- this._popupMenuListener(unitId);
3627
- this._initImagePopupMenu.add(unitId);
3729
+ const listener = this._popupMenuListener(unitId);
3730
+ if (listener) {
3731
+ this._popupMenuListeners.set(unitId, listener);
3732
+ this._initImagePopupMenu.add(unitId);
3733
+ }
3628
3734
  }
3629
3735
  }
3736
+ _disposePopupMenuListener(unitId) {
3737
+ var _this$_popupMenuListe;
3738
+ (_this$_popupMenuListe = this._popupMenuListeners.get(unitId)) === null || _this$_popupMenuListe === void 0 || _this$_popupMenuListe.dispose();
3739
+ this._popupMenuListeners.delete(unitId);
3740
+ this._initImagePopupMenu.delete(unitId);
3741
+ this._clearPopups();
3742
+ }
3630
3743
  _hasCropObject(scene) {
3631
3744
  const objects = scene.getAllObjects();
3632
3745
  for (const object of objects) if (object instanceof _univerjs_drawing_ui.ImageCropperObject) return true;
@@ -3639,55 +3752,57 @@ let DocDrawingPopupMenuController = class DocDrawingPopupMenuController extends
3639
3752
  const transformer = scene.getTransformerByCreate();
3640
3753
  if (!transformer) return;
3641
3754
  const disposePopups = this._disposePopups;
3642
- this.disposeWithMe(transformer.createControl$.subscribe(() => {
3643
- if (this._hasCropObject(scene)) return;
3644
- const selectedObjects = transformer.getSelectedObjectMap();
3645
- disposePopups.forEach((dispose) => dispose.dispose());
3646
- disposePopups.length = 0;
3647
- if (this._isDrawingPanelOpen) return;
3648
- if (selectedObjects.size > 1) return;
3649
- const object = selectedObjects.values().next().value;
3650
- if (!object) return;
3651
- const oKey = object.oKey;
3652
- const drawingParam = this._drawingManagerService.getDrawingOKey(oKey);
3653
- if (!drawingParam || drawingParam.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_DOM || drawingParam.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_SHAPE) return;
3654
- const { unitId, subUnitId, drawingId, drawingType } = drawingParam;
3655
- const isImage = drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE;
3656
- const isChart = drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_CHART;
3657
- const popup = this._canvasPopManagerService.attachPopupToObject(object, {
3658
- componentKey: _univerjs_drawing_ui.COMPONENT_IMAGE_POPUP_MENU,
3659
- direction: isImage || isChart ? "top-center" : "horizontal",
3660
- offset: isImage || isChart ? [0, 8] : [2, 0],
3661
- extraProps: {
3662
- menuItems: this._getDrawingPopupMenuItems(unitId, subUnitId, drawingId, drawingType),
3663
- variant: isImage ? "doc-floating-toolbar" : isChart ? "doc-chart-floating-toolbar" : void 0,
3755
+ const subscriptions = [
3756
+ transformer.createControl$.subscribe(() => {
3757
+ if (this._hasCropObject(scene)) return;
3758
+ const selectedObjects = transformer.getSelectedObjectMap();
3759
+ disposePopups.forEach((dispose) => dispose.dispose());
3760
+ disposePopups.length = 0;
3761
+ if (this._isDrawingPanelOpen || selectedObjects.size > 1) return;
3762
+ const object = selectedObjects.values().next().value;
3763
+ if (!object) return;
3764
+ const drawingParam = this._drawingManagerService.getDrawingOKey(object.oKey);
3765
+ if (!drawingParam || drawingParam.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_DOM || drawingParam.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_SHAPE) return;
3766
+ const { unitId, subUnitId, drawingId, drawingType } = drawingParam;
3767
+ const isImage = drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE;
3768
+ const isChart = drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_CHART;
3769
+ const popup = this._canvasPopManagerService.attachPopupToObject(object, {
3770
+ componentKey: _univerjs_drawing_ui.COMPONENT_IMAGE_POPUP_MENU,
3771
+ direction: isImage || isChart ? "top-center" : "horizontal",
3772
+ offset: isImage || isChart ? [0, 8] : [2, 0],
3773
+ extraProps: {
3774
+ menuItems: this._getDrawingPopupMenuItems(unitId, subUnitId, drawingId, drawingType),
3775
+ variant: isImage ? "doc-floating-toolbar" : isChart ? "doc-chart-floating-toolbar" : void 0,
3776
+ unitId,
3777
+ subUnitId,
3778
+ drawingId
3779
+ }
3780
+ }, unitId);
3781
+ disposePopups.push(this.disposeWithMe(popup));
3782
+ if (!this._drawingManagerService.getFocusDrawings().find((drawing) => drawing.unitId === unitId && drawing.subUnitId === subUnitId && drawing.drawingId === drawingId)) this._drawingManagerService.focusDrawing([{
3664
3783
  unitId,
3665
3784
  subUnitId,
3666
3785
  drawingId
3667
- }
3668
- }, unitId);
3669
- disposePopups.push(this.disposeWithMe(popup));
3670
- if (this._drawingManagerService.getFocusDrawings().find((drawing) => drawing.unitId === unitId && drawing.subUnitId === subUnitId && drawing.drawingId === drawingId)) return;
3671
- this._drawingManagerService.focusDrawing([{
3672
- unitId,
3673
- subUnitId,
3674
- drawingId
3675
- }]);
3676
- }));
3677
- this.disposeWithMe(transformer.clearControl$.subscribe(() => {
3678
- disposePopups.forEach((dispose) => dispose.dispose());
3679
- disposePopups.length = 0;
3680
- this._contextService.setContextValue(_univerjs_core.FOCUSING_COMMON_DRAWINGS, false);
3681
- this._drawingManagerService.focusDrawing(null);
3682
- }));
3683
- this.disposeWithMe(transformer.changing$.subscribe(() => {
3684
- disposePopups.forEach((dispose) => dispose.dispose());
3685
- disposePopups.length = 0;
3686
- }));
3687
- this.disposeWithMe(transformer.changeStart$.subscribe(() => {
3688
- disposePopups.forEach((dispose) => dispose.dispose());
3689
- disposePopups.length = 0;
3690
- }));
3786
+ }]);
3787
+ }),
3788
+ transformer.clearControl$.subscribe(() => {
3789
+ disposePopups.forEach((dispose) => dispose.dispose());
3790
+ disposePopups.length = 0;
3791
+ this._contextService.setContextValue(_univerjs_core.FOCUSING_COMMON_DRAWINGS, false);
3792
+ this._drawingManagerService.focusDrawing(null);
3793
+ }),
3794
+ transformer.changing$.subscribe(() => {
3795
+ disposePopups.forEach((dispose) => dispose.dispose());
3796
+ disposePopups.length = 0;
3797
+ }),
3798
+ transformer.changeStart$.subscribe(() => {
3799
+ disposePopups.forEach((dispose) => dispose.dispose());
3800
+ disposePopups.length = 0;
3801
+ })
3802
+ ];
3803
+ const disposable = (0, _univerjs_core.toDisposable)(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));
3804
+ this.disposeWithMe(disposable);
3805
+ return disposable;
3691
3806
  }
3692
3807
  _getDrawingPopupMenuItems(unitId, subUnitId, drawingId, drawingType) {
3693
3808
  const drawing = this._drawingManagerService.getDrawingByParam({
@@ -10,7 +10,6 @@ const locale = { "docs-drawing-ui": {
10
10
  } },
11
11
  panel: { title: "تحرير الصورة" },
12
12
  "image-popup": {
13
- replace: "استبدال",
14
13
  delete: "حذف",
15
14
  edit: "تحرير",
16
15
  crop: "قص",
@@ -39,9 +38,7 @@ const locale = { "docs-drawing-ui": {
39
38
  horizontal: "أفقي",
40
39
  vertical: "عمودي",
41
40
  absolutePosition: "موضع مطلق(بكسل)",
42
- relativePosition: "موضع نسبي",
43
41
  toTheRightOf: "إلى يمين",
44
- relativeTo: "بالنسبة إلى",
45
42
  bellow: "أسفل",
46
43
  options: "خيارات",
47
44
  moveObjectWithText: "نقل الكائن مع النص",
@@ -10,7 +10,6 @@ const locale = { "docs-drawing-ui": {
10
10
  } },
11
11
  panel: { title: "Edita la imatge" },
12
12
  "image-popup": {
13
- replace: "Reemplaça",
14
13
  delete: "Elimina",
15
14
  edit: "Edita",
16
15
  crop: "Retalla",
@@ -39,9 +38,7 @@ const locale = { "docs-drawing-ui": {
39
38
  horizontal: "Horitzontal",
40
39
  vertical: "Vertical",
41
40
  absolutePosition: "Posició absoluta(px)",
42
- relativePosition: "Posició relativa",
43
41
  toTheRightOf: "a la dreta de",
44
- relativeTo: "relatiu a",
45
42
  bellow: "a sota",
46
43
  options: "Opcions",
47
44
  moveObjectWithText: "Mou l'objecte amb el text",
@@ -10,7 +10,6 @@ const locale = { "docs-drawing-ui": {
10
10
  } },
11
11
  panel: { title: "Bild bearbeiten" },
12
12
  "image-popup": {
13
- replace: "Ersetzen",
14
13
  delete: "Löschen",
15
14
  edit: "Bearbeiten",
16
15
  crop: "Zuschneiden",
@@ -39,9 +38,7 @@ const locale = { "docs-drawing-ui": {
39
38
  horizontal: "Horizontal",
40
39
  vertical: "Vertikal",
41
40
  absolutePosition: "Absolute Position(px)",
42
- relativePosition: "Relative Position",
43
41
  toTheRightOf: "rechts von",
44
- relativeTo: "relativ zu",
45
42
  bellow: "unterhalb",
46
43
  options: "Optionen",
47
44
  moveObjectWithText: "Objekt mit Text verschieben",
@@ -25,7 +25,6 @@ const locale = { "docs-drawing-ui": {
25
25
  } },
26
26
  panel: { title: "Edit Image" },
27
27
  "image-popup": {
28
- replace: "Replace",
29
28
  delete: "Delete",
30
29
  edit: "Edit",
31
30
  crop: "Crop",
@@ -54,9 +53,7 @@ const locale = { "docs-drawing-ui": {
54
53
  horizontal: "Horizontal",
55
54
  vertical: "Vertical",
56
55
  absolutePosition: "Absolute Position(px)",
57
- relativePosition: "Relative Position",
58
56
  toTheRightOf: "to the right of",
59
- relativeTo: "relative to",
60
57
  bellow: "bellow",
61
58
  options: "Options",
62
59
  moveObjectWithText: "Move object with text",
@@ -10,7 +10,6 @@ const locale = { "docs-drawing-ui": {
10
10
  } },
11
11
  panel: { title: "Editar imagen" },
12
12
  "image-popup": {
13
- replace: "Reemplazar",
14
13
  delete: "Eliminar",
15
14
  edit: "Editar",
16
15
  crop: "Recortar",
@@ -39,9 +38,7 @@ const locale = { "docs-drawing-ui": {
39
38
  horizontal: "Horizontal",
40
39
  vertical: "Vertical",
41
40
  absolutePosition: "Posición absoluta(px)",
42
- relativePosition: "Posición relativa",
43
41
  toTheRightOf: "a la derecha de",
44
- relativeTo: "relativo a",
45
42
  bellow: "debajo",
46
43
  options: "Opciones",
47
44
  moveObjectWithText: "Mover objeto con el texto",
@@ -10,7 +10,6 @@ const locale = { "docs-drawing-ui": {
10
10
  } },
11
11
  panel: { title: "ویرایش تصویر" },
12
12
  "image-popup": {
13
- replace: "تعویض",
14
13
  delete: "حذف",
15
14
  edit: "ویرایش",
16
15
  crop: "کراپ",
@@ -39,9 +38,7 @@ const locale = { "docs-drawing-ui": {
39
38
  horizontal: "افقی",
40
39
  vertical: "عمودی",
41
40
  absolutePosition: "موقعیت مطلق(px)",
42
- relativePosition: "موقعیت نسبی",
43
41
  toTheRightOf: "سمت راست",
44
- relativeTo: "نسبت به",
45
42
  bellow: "زیر",
46
43
  options: "گزینه‌ها",
47
44
  moveObjectWithText: "جابه‌جایی شیء با متن",
@@ -10,7 +10,6 @@ const locale = { "docs-drawing-ui": {
10
10
  } },
11
11
  panel: { title: "Modifier l'image" },
12
12
  "image-popup": {
13
- replace: "Remplacer",
14
13
  delete: "Supprimer",
15
14
  edit: "Modifier",
16
15
  crop: "Rogner",
@@ -39,9 +38,7 @@ const locale = { "docs-drawing-ui": {
39
38
  horizontal: "Horizontal",
40
39
  vertical: "Vertical",
41
40
  absolutePosition: "Position absolue(px)",
42
- relativePosition: "Position relative",
43
41
  toTheRightOf: "à droite de",
44
- relativeTo: "par rapport à",
45
42
  bellow: "en dessous",
46
43
  options: "Options",
47
44
  moveObjectWithText: "Déplacer l'objet avec le texte",
@@ -10,7 +10,6 @@ const locale = { "docs-drawing-ui": {
10
10
  } },
11
11
  panel: { title: "Edit Gambar" },
12
12
  "image-popup": {
13
- replace: "Ganti",
14
13
  delete: "Hapus",
15
14
  edit: "Edit",
16
15
  crop: "Pangkas",
@@ -39,9 +38,7 @@ const locale = { "docs-drawing-ui": {
39
38
  horizontal: "Horizontal",
40
39
  vertical: "Vertikal",
41
40
  absolutePosition: "Posisi Absolut(px)",
42
- relativePosition: "Posisi Relatif",
43
41
  toTheRightOf: "di sebelah kanan",
44
- relativeTo: "relatif terhadap",
45
42
  bellow: "di bawah",
46
43
  options: "Opsi",
47
44
  moveObjectWithText: "Pindahkan objek dengan teks",
@@ -10,7 +10,6 @@ const locale = { "docs-drawing-ui": {
10
10
  } },
11
11
  panel: { title: "Modifica immagine" },
12
12
  "image-popup": {
13
- replace: "Sostituisci",
14
13
  delete: "Elimina",
15
14
  edit: "Modifica",
16
15
  crop: "Ritaglia",
@@ -39,9 +38,7 @@ const locale = { "docs-drawing-ui": {
39
38
  horizontal: "Orizzontale",
40
39
  vertical: "Verticale",
41
40
  absolutePosition: "Posizione assoluta(px)",
42
- relativePosition: "Posizione relativa",
43
41
  toTheRightOf: "a destra di",
44
- relativeTo: "relativo a",
45
42
  bellow: "sotto",
46
43
  options: "Opzioni",
47
44
  moveObjectWithText: "Sposta oggetto con il testo",
@@ -10,7 +10,6 @@ const locale = { "docs-drawing-ui": {
10
10
  } },
11
11
  panel: { title: "画像の編集" },
12
12
  "image-popup": {
13
- replace: "置換",
14
13
  delete: "削除",
15
14
  edit: "編集",
16
15
  crop: "トリミング",
@@ -39,9 +38,7 @@ const locale = { "docs-drawing-ui": {
39
38
  horizontal: "水平方向",
40
39
  vertical: "垂直方向",
41
40
  absolutePosition: "絶対位置(px)",
42
- relativePosition: "相対位置",
43
41
  toTheRightOf: "右側に",
44
- relativeTo: "基準に対して",
45
42
  bellow: "下に",
46
43
  options: "オプション",
47
44
  moveObjectWithText: "文字列と一緒にオブジェクトを移動",
@@ -10,7 +10,6 @@ const locale = { "docs-drawing-ui": {
10
10
  } },
11
11
  panel: { title: "이미지 편집" },
12
12
  "image-popup": {
13
- replace: "교체",
14
13
  delete: "삭제",
15
14
  edit: "편집",
16
15
  crop: "자르기",
@@ -39,9 +38,7 @@ const locale = { "docs-drawing-ui": {
39
38
  horizontal: "수평",
40
39
  vertical: "수직",
41
40
  absolutePosition: "절대 위치(px)",
42
- relativePosition: "상대 위치",
43
41
  toTheRightOf: "우측에",
44
- relativeTo: "상대적으로",
45
42
  bellow: "아래에",
46
43
  options: "옵션",
47
44
  moveObjectWithText: "텍스트와 함께 객체 이동",
@@ -10,7 +10,6 @@ const locale = { "docs-drawing-ui": {
10
10
  } },
11
11
  panel: { title: "Edytuj obraz" },
12
12
  "image-popup": {
13
- replace: "Zamień",
14
13
  delete: "Usuń",
15
14
  edit: "Edytuj",
16
15
  crop: "Przytnij",
@@ -39,9 +38,7 @@ const locale = { "docs-drawing-ui": {
39
38
  horizontal: "Pozioma",
40
39
  vertical: "Pionowa",
41
40
  absolutePosition: "Pozycja bezwzględna(px)",
42
- relativePosition: "Pozycja względna",
43
41
  toTheRightOf: "po prawej stronie",
44
- relativeTo: "względem",
45
42
  bellow: "poniżej",
46
43
  options: "Opcje",
47
44
  moveObjectWithText: "Przesuwaj obiekt razem z tekstem",
@@ -10,7 +10,6 @@ const locale = { "docs-drawing-ui": {
10
10
  } },
11
11
  panel: { title: "Editar imagem" },
12
12
  "image-popup": {
13
- replace: "Substituir",
14
13
  delete: "Excluir",
15
14
  edit: "Editar",
16
15
  crop: "Cortar",
@@ -39,9 +38,7 @@ const locale = { "docs-drawing-ui": {
39
38
  horizontal: "Horizontal",
40
39
  vertical: "Vertical",
41
40
  absolutePosition: "Posição absoluta(px)",
42
- relativePosition: "Posição relativa",
43
41
  toTheRightOf: "à direita de",
44
- relativeTo: "relativo a",
45
42
  bellow: "abaixo",
46
43
  options: "Opções",
47
44
  moveObjectWithText: "Mover objeto com o texto",