@univerjs/sheets-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
@@ -820,7 +820,8 @@ let SheetDrawingUpdateController = class SheetDrawingUpdateController extends _u
820
820
  this.disposeWithMe(this._drawingManagerService.featurePluginGroupUpdate$.subscribe((params) => {
821
821
  const grpParams = [];
822
822
  for (const param of params) {
823
- const grpSheetTransform = this._getSheetTransformByParam(param.parent, true);
823
+ const parent = param.parent;
824
+ const grpSheetTransform = this._getSheetTransformByParam(parent, true);
824
825
  const children = [];
825
826
  for (const child of param.children) {
826
827
  const childSheetTransformInfo = this._getSheetTransformByParam(child, false);
@@ -832,7 +833,7 @@ let SheetDrawingUpdateController = class SheetDrawingUpdateController extends _u
832
833
  }
833
834
  const grpParam = {
834
835
  parent: {
835
- ...param.parent,
836
+ ...parent,
836
837
  sheetTransform: grpSheetTransform === null || grpSheetTransform === void 0 ? void 0 : grpSheetTransform.sheetTransform,
837
838
  axisAlignSheetTransform: grpSheetTransform === null || grpSheetTransform === void 0 ? void 0 : grpSheetTransform.axisAlignSheetTransform
838
839
  },
@@ -1680,7 +1681,7 @@ function UploadCellImageMenuFactory(accessor) {
1680
1681
  //#endregion
1681
1682
  //#region package.json
1682
1683
  var name = "@univerjs/sheets-drawing-ui";
1683
- var version = "1.0.0-alpha.1";
1684
+ var version = "1.0.0-alpha.2";
1684
1685
 
1685
1686
  //#endregion
1686
1687
  //#region src/config/config.ts
@@ -3057,11 +3058,37 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3057
3058
  _defineProperty(this, "add$", this._add$.asObservable());
3058
3059
  _defineProperty(this, "_remove$", new rxjs.Subject());
3059
3060
  _defineProperty(this, "remove$", this._remove$.asObservable());
3061
+ _defineProperty(this, "_renderObjectFactories", /* @__PURE__ */ new Map());
3060
3062
  this._drawingAddListener();
3061
3063
  this._featureUpdateListener();
3062
3064
  this._deleteListener();
3063
3065
  this._bindScrollEvent();
3064
3066
  }
3067
+ /**
3068
+ * Register a factory that creates the canvas-side render object for a sheet
3069
+ * float-dom drawing type. The latest registered factory wins; disposing the
3070
+ * returned handle unregisters it and restores the previous factory or the
3071
+ * default {@link Rect} fallback.
3072
+ */
3073
+ registerRenderObjectFactory(drawingType, factory) {
3074
+ var _this$_renderObjectFa;
3075
+ const factories = (_this$_renderObjectFa = this._renderObjectFactories.get(drawingType)) !== null && _this$_renderObjectFa !== void 0 ? _this$_renderObjectFa : [];
3076
+ factories.push(factory);
3077
+ this._renderObjectFactories.set(drawingType, factories);
3078
+ return { dispose: () => {
3079
+ const currentFactories = this._renderObjectFactories.get(drawingType);
3080
+ if (!currentFactories) return;
3081
+ const index = currentFactories.indexOf(factory);
3082
+ if (index >= 0) currentFactories.splice(index, 1);
3083
+ if (currentFactories.length === 0) this._renderObjectFactories.delete(drawingType);
3084
+ } };
3085
+ }
3086
+ _createRenderObject(context) {
3087
+ var _factory;
3088
+ const factories = this._renderObjectFactories.get(context.drawingType);
3089
+ const factory = factories === null || factories === void 0 ? void 0 : factories[factories.length - 1];
3090
+ return (_factory = factory === null || factory === void 0 ? void 0 : factory(context)) !== null && _factory !== void 0 ? _factory : new _univerjs_engine_render.Rect(context.key, context.config);
3091
+ }
3065
3092
  _bindScrollEvent() {
3066
3093
  this._lifecycleService.lifecycle$.pipe((0, rxjs.filter)((s) => s === _univerjs_core.LifecycleStages.Rendered), (0, rxjs.take)(1)).subscribe(() => {
3067
3094
  this._scrollUpdateListener();
@@ -3101,7 +3128,7 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3101
3128
  if (!floatDomParam || !target) return;
3102
3129
  const skeleton = (_this$_renderManagerS = this._renderManagerService.getRenderById(unitId)) === null || _this$_renderManagerS === void 0 ? void 0 : _this$_renderManagerS.with(_univerjs_sheets_ui.SheetSkeletonManagerService).getSkeletonParam(subUnitId);
3103
3130
  if (!skeleton) return;
3104
- const { transform, drawingType, data, hidden } = floatDomParam;
3131
+ const { transform, drawingType, data, hidden, groupId } = floatDomParam;
3105
3132
  if (drawingType !== _univerjs_core.DrawingTypeEnum.DRAWING_DOM && drawingType !== _univerjs_core.DrawingTypeEnum.DRAWING_CHART) return;
3106
3133
  const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
3107
3134
  if (renderObject == null) return;
@@ -3115,8 +3142,14 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3115
3142
  subUnitId,
3116
3143
  drawingId
3117
3144
  });
3118
- const rectShape = scene.getObject(rectShapeKey);
3145
+ const groupShapeKey = groupId ? (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
3146
+ unitId,
3147
+ subUnitId,
3148
+ drawingId: groupId
3149
+ }) : void 0;
3150
+ const rectShape = this._getObjectIncludingGroup(scene, rectShapeKey, groupShapeKey);
3119
3151
  if (rectShape != null) {
3152
+ this._removeTopLevelDuplicateIfGrouped(scene, rectShapeKey, rectShape);
3120
3153
  rectShape.transformByState({
3121
3154
  left,
3122
3155
  top,
@@ -3128,6 +3161,7 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3128
3161
  skewX,
3129
3162
  skewY
3130
3163
  });
3164
+ this._syncFloatDomRect(drawingId, rectShape);
3131
3165
  return;
3132
3166
  }
3133
3167
  const imageConfig = {
@@ -3140,18 +3174,32 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3140
3174
  const isChart = drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_CHART;
3141
3175
  imageConfig.rotateEnabled = false;
3142
3176
  if (isChart) {
3143
- imageConfig.fill = data ? data.backgroundColor : "white";
3177
+ const backgroundColor = this._getChartDataBackground(data);
3178
+ if (backgroundColor !== void 0) imageConfig.fill = backgroundColor;
3144
3179
  if (data && data.border) imageConfig.stroke = data.border;
3145
3180
  imageConfig.paintFirst = "stroke";
3146
3181
  imageConfig.strokeWidth = 1;
3147
3182
  imageConfig.borderEnabled = false;
3148
3183
  imageConfig.radius = 8;
3149
3184
  }
3150
- const rect = new _univerjs_engine_render.Rect(rectShapeKey, imageConfig);
3185
+ const rect = this._createRenderObject({
3186
+ key: rectShapeKey,
3187
+ config: imageConfig,
3188
+ unitId,
3189
+ subUnitId,
3190
+ drawingId,
3191
+ drawingType,
3192
+ data
3193
+ });
3151
3194
  if (isChart) rect.setObjectType(_univerjs_engine_render.ObjectType.CHART);
3152
3195
  else if (drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_DOM) rect.setObjectType(_univerjs_engine_render.ObjectType.DRAWING_DOM);
3153
3196
  scene.addObject(rect, _univerjs_engine_render.DRAWING_OBJECT_LAYER_INDEX);
3154
3197
  if (floatDomParam.allowTransform !== false) scene.attachTransformerTo(rect);
3198
+ if (isChart && groupId) (0, _univerjs_drawing_ui.insertGroupObject)({
3199
+ drawingId: groupId,
3200
+ unitId,
3201
+ subUnitId
3202
+ }, rect, scene, this._drawingManagerService);
3155
3203
  const disposableCollection = new _univerjs_core.DisposableCollection();
3156
3204
  const position$ = new rxjs.BehaviorSubject(calcSheetFloatDomPosition(rect, renderObject.renderUnit.scene, skeleton.skeleton, target.worksheet));
3157
3205
  const domId = `${SHEET_FLOAT_DOM_PREFIX}${(0, _univerjs_core.generateRandomId)(6)}`;
@@ -3206,7 +3254,7 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3206
3254
  const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
3207
3255
  if (renderObject == null) return;
3208
3256
  const { transformer, scene } = renderObject;
3209
- const rectShape = scene.getObject(rectShapeKey);
3257
+ const rectShape = this._getObjectIncludingGroup(scene, rectShapeKey);
3210
3258
  if (rectShape === null || rectShape === void 0 ? void 0 : rectShape.oKey) {
3211
3259
  var _scene$getTransformer;
3212
3260
  transformer.clearControlByIds([rectShape === null || rectShape === void 0 ? void 0 : rectShape.oKey]);
@@ -3279,9 +3327,60 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3279
3327
  subUnitId,
3280
3328
  drawingId: id
3281
3329
  });
3282
- const rectShape = scene.getObject(rectShapeKey);
3283
- if (rectShape && rectShape instanceof _univerjs_engine_render.Rect) rectShape.setProps(props);
3330
+ const drawing = this._drawingManagerService.getDrawingByParam({
3331
+ unitId,
3332
+ subUnitId,
3333
+ drawingId: id
3334
+ });
3335
+ const groupShapeKey = (drawing === null || drawing === void 0 ? void 0 : drawing.groupId) ? (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
3336
+ unitId,
3337
+ subUnitId,
3338
+ drawingId: drawing.groupId
3339
+ }) : void 0;
3340
+ const rectShape = this._getObjectIncludingGroup(scene, rectShapeKey, groupShapeKey);
3341
+ if (rectShape && rectShape instanceof _univerjs_engine_render.Rect) {
3342
+ this._removeTopLevelDuplicateIfGrouped(scene, rectShapeKey, rectShape);
3343
+ rectShape.setProps(props);
3344
+ this._syncFloatDomRect(id, rectShape);
3345
+ }
3346
+ }
3347
+ }
3348
+ _getObjectIncludingGroup(scene, key, groupKey) {
3349
+ var _ref, _ref2, _this$_getChildObject, _scene$getObjectInclu;
3350
+ return (_ref = (_ref2 = (_this$_getChildObject = this._getChildObjectFromGroup(scene, key, groupKey)) !== null && _this$_getChildObject !== void 0 ? _this$_getChildObject : (_scene$getObjectInclu = scene.getObjectIncludeInGroup) === null || _scene$getObjectInclu === void 0 ? void 0 : _scene$getObjectInclu.call(scene, key)) !== null && _ref2 !== void 0 ? _ref2 : scene.getObject(key)) !== null && _ref !== void 0 ? _ref : null;
3351
+ }
3352
+ _getChildObjectFromGroup(scene, key, groupKey) {
3353
+ var _scene$getObjectInclu2, _scene$getObjectInclu3;
3354
+ if (!groupKey) return null;
3355
+ const groupObject = (_scene$getObjectInclu2 = (_scene$getObjectInclu3 = scene.getObjectIncludeInGroup) === null || _scene$getObjectInclu3 === void 0 ? void 0 : _scene$getObjectInclu3.call(scene, groupKey)) !== null && _scene$getObjectInclu2 !== void 0 ? _scene$getObjectInclu2 : scene.getObject(groupKey);
3356
+ return this._findChildObject(groupObject, key);
3357
+ }
3358
+ _findChildObject(object, key) {
3359
+ if (!object) return null;
3360
+ const children = object.getObjects();
3361
+ for (const child of children) {
3362
+ if (child.oKey === key) return child;
3363
+ const nested = this._findChildObject(child, key);
3364
+ if (nested) return nested;
3284
3365
  }
3366
+ return null;
3367
+ }
3368
+ _removeTopLevelDuplicateIfGrouped(scene, key, object) {
3369
+ if (!object.isInGroup) return;
3370
+ const topLevelObject = scene.getObject(key);
3371
+ if (topLevelObject && topLevelObject !== object) scene.removeObject(topLevelObject);
3372
+ }
3373
+ _syncFloatDomRect(id, object) {
3374
+ if (!(object instanceof _univerjs_engine_render.Rect)) return;
3375
+ const info = this._domLayerInfoMap.get(id);
3376
+ if (info) info.rect = object;
3377
+ }
3378
+ _getChartDataBackground(data) {
3379
+ var _record$backgroundCol;
3380
+ if (!data || typeof data !== "object" || Array.isArray(data)) return;
3381
+ const record = data;
3382
+ const background = (_record$backgroundCol = record.backgroundColor) !== null && _record$backgroundCol !== void 0 ? _record$backgroundCol : record.background;
3383
+ return typeof background === "string" ? background : void 0;
3285
3384
  }
3286
3385
  _getPosition(position, unitId) {
3287
3386
  var _this$_renderManagerS3;
@@ -3388,7 +3487,18 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3388
3487
  this._domLayerInfoMap.delete(id);
3389
3488
  info.dispose.dispose();
3390
3489
  const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
3391
- if (renderObject) renderObject.scene.removeObject(info.rect);
3490
+ if (renderObject) {
3491
+ const { scene, transformer } = renderObject;
3492
+ if ((0, _univerjs_drawing_ui.disposeDrawingRenderObject)(scene, {
3493
+ unitId,
3494
+ subUnitId,
3495
+ drawingId: id
3496
+ })) {
3497
+ var _scene$getTransformer2;
3498
+ transformer.clearControlByIds([info.rect.oKey]);
3499
+ (_scene$getTransformer2 = scene.getTransformer()) === null || _scene$getTransformer2 === void 0 || _scene$getTransformer2.clearSelectedObjects();
3500
+ }
3501
+ }
3392
3502
  if (removeDrawing) {
3393
3503
  const param = this._drawingManagerService.getDrawingByParam({
3394
3504
  unitId,
@@ -3463,7 +3573,7 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3463
3573
  if (!skMangerService) return;
3464
3574
  const skeletonParam = skMangerService.getSkeletonParam(subUnitId);
3465
3575
  if (!skeletonParam) return;
3466
- const { transform, drawingType, data } = floatDomParam;
3576
+ const { transform, drawingType, data, groupId } = floatDomParam;
3467
3577
  if (drawingType !== _univerjs_core.DrawingTypeEnum.DRAWING_DOM && drawingType !== _univerjs_core.DrawingTypeEnum.DRAWING_CHART) return;
3468
3578
  const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
3469
3579
  if (renderObject == null) return;
@@ -3476,8 +3586,14 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3476
3586
  subUnitId,
3477
3587
  drawingId
3478
3588
  });
3479
- const rectShape = scene.getObject(rectShapeKey);
3589
+ const groupShapeKey = groupId ? (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
3590
+ unitId,
3591
+ subUnitId,
3592
+ drawingId: groupId
3593
+ }) : void 0;
3594
+ const rectShape = this._getObjectIncludingGroup(scene, rectShapeKey, groupShapeKey);
3480
3595
  if (rectShape != null) {
3596
+ this._removeTopLevelDuplicateIfGrouped(scene, rectShapeKey, rectShape);
3481
3597
  rectShape.transformByState({
3482
3598
  left,
3483
3599
  top,
@@ -3489,6 +3605,7 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3489
3605
  skewX,
3490
3606
  skewY
3491
3607
  });
3608
+ this._syncFloatDomRect(drawingId, rectShape);
3492
3609
  return;
3493
3610
  }
3494
3611
  const domConfig = {
@@ -3500,7 +3617,8 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3500
3617
  };
3501
3618
  const isChart = drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_CHART;
3502
3619
  if (isChart) {
3503
- domConfig.fill = data ? data.backgroundColor : "white";
3620
+ const backgroundColor = this._getChartDataBackground(data);
3621
+ if (backgroundColor !== void 0) domConfig.fill = backgroundColor;
3504
3622
  domConfig.rotateEnabled = false;
3505
3623
  if (data && data.border) domConfig.stroke = data.border;
3506
3624
  domConfig.paintFirst = "stroke";
@@ -3508,10 +3626,23 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3508
3626
  domConfig.borderEnabled = false;
3509
3627
  domConfig.radius = 8;
3510
3628
  }
3511
- const domRect = new _univerjs_engine_render.Rect(rectShapeKey, domConfig);
3629
+ const domRect = this._createRenderObject({
3630
+ key: rectShapeKey,
3631
+ config: domConfig,
3632
+ unitId,
3633
+ subUnitId,
3634
+ drawingId,
3635
+ drawingType,
3636
+ data
3637
+ });
3512
3638
  if (isChart) domRect.setObjectType(_univerjs_engine_render.ObjectType.CHART);
3513
3639
  scene.addObject(domRect, _univerjs_engine_render.DRAWING_OBJECT_LAYER_INDEX);
3514
3640
  if (floatDomParam.allowTransform !== false) scene.attachTransformerTo(domRect);
3641
+ if (isChart && groupId) (0, _univerjs_drawing_ui.insertGroupObject)({
3642
+ drawingId: groupId,
3643
+ unitId,
3644
+ subUnitId
3645
+ }, domRect, scene, this._drawingManagerService);
3515
3646
  const disposableCollection = new _univerjs_core.DisposableCollection();
3516
3647
  const viewMain = scene.getMainViewport();
3517
3648
  const { rowHeaderWidth, columnHeaderHeight } = skeletonParam.skeleton;
@@ -3678,8 +3809,9 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3678
3809
  subUnitId,
3679
3810
  drawingId
3680
3811
  });
3681
- const rectShape = scene.getObject(rectShapeKey);
3812
+ const rectShape = this._getObjectIncludingGroup(scene, rectShapeKey);
3682
3813
  if (rectShape != null) {
3814
+ this._removeTopLevelDuplicateIfGrouped(scene, rectShapeKey, rectShape);
3683
3815
  rectShape.transformByState({
3684
3816
  left,
3685
3817
  top,
@@ -3691,6 +3823,7 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3691
3823
  skewX,
3692
3824
  skewY
3693
3825
  });
3826
+ this._syncFloatDomRect(drawingId, rectShape);
3694
3827
  return;
3695
3828
  }
3696
3829
  const calcOffsetPos = calcDomPositionByAnchor({
package/lib/es/index.js CHANGED
@@ -8,7 +8,7 @@ import { COMMAND_LISTENER_SKELETON_CHANGE, DeleteRangeMoveLeftCommand, DeleteRan
8
8
  import { COPY_TYPE, EditingRenderController, HoverManagerService, IEditorBridgeService, ISheetClipboardService, ISheetSelectionRenderService, PREDEFINED_HOOK_NAME_PASTE, SetCellEditVisibleOperation, SetScrollOperation, SetZoomRatioOperation, SheetCanvasPopManagerService, SheetPrintInterceptorService, SheetSkeletonManagerService, getCurrentRangeDisable$, useHighlightRange, virtualizeDiscreteRanges } from "@univerjs/sheets-ui";
9
9
  import { CanvasFloatDomService, ComponentManager, ContextMenuGroup, ContextMenuPosition, IClipboardInterfaceService, IContextMenuService, IDialogService, ILocalFileService, IMenuManagerService, IMessageService, IShortcutService, ISidebarService, KeyCode, MenuItemType, PrintFloatDomSingle, RibbonInsertGroup, connectInjector, getMenuHiddenObservable, useDependency } from "@univerjs/ui";
10
10
  import { DocDrawingController, UniverDocsDrawingPlugin } from "@univerjs/docs-drawing";
11
- import { COMPONENT_IMAGE_POPUP_MENU, DrawingCommonPanel, DrawingRenderService, ImageCropperObject, ImageResetSizeOperation, OpenImageCropOperation, UniverDrawingUIPlugin } from "@univerjs/drawing-ui";
11
+ import { COMPONENT_IMAGE_POPUP_MENU, DrawingCommonPanel, DrawingRenderService, ImageCropperObject, ImageResetSizeOperation, OpenImageCropOperation, UniverDrawingUIPlugin, disposeDrawingRenderObject, insertGroupObject } from "@univerjs/drawing-ui";
12
12
  import { useCallback, useEffect, useMemo, useState } from "react";
13
13
  import { jsx, jsxs } from "react/jsx-runtime";
14
14
  import { BehaviorSubject, EMPTY, Subject, combineLatest, distinctUntilChanged, filter, map, of, switchMap, take, tap, throttleTime } from "rxjs";
@@ -819,7 +819,8 @@ let SheetDrawingUpdateController = class SheetDrawingUpdateController extends Di
819
819
  this.disposeWithMe(this._drawingManagerService.featurePluginGroupUpdate$.subscribe((params) => {
820
820
  const grpParams = [];
821
821
  for (const param of params) {
822
- const grpSheetTransform = this._getSheetTransformByParam(param.parent, true);
822
+ const parent = param.parent;
823
+ const grpSheetTransform = this._getSheetTransformByParam(parent, true);
823
824
  const children = [];
824
825
  for (const child of param.children) {
825
826
  const childSheetTransformInfo = this._getSheetTransformByParam(child, false);
@@ -831,7 +832,7 @@ let SheetDrawingUpdateController = class SheetDrawingUpdateController extends Di
831
832
  }
832
833
  const grpParam = {
833
834
  parent: {
834
- ...param.parent,
835
+ ...parent,
835
836
  sheetTransform: grpSheetTransform === null || grpSheetTransform === void 0 ? void 0 : grpSheetTransform.sheetTransform,
836
837
  axisAlignSheetTransform: grpSheetTransform === null || grpSheetTransform === void 0 ? void 0 : grpSheetTransform.axisAlignSheetTransform
837
838
  },
@@ -1679,7 +1680,7 @@ function UploadCellImageMenuFactory(accessor) {
1679
1680
  //#endregion
1680
1681
  //#region package.json
1681
1682
  var name = "@univerjs/sheets-drawing-ui";
1682
- var version = "1.0.0-alpha.1";
1683
+ var version = "1.0.0-alpha.2";
1683
1684
 
1684
1685
  //#endregion
1685
1686
  //#region src/config/config.ts
@@ -3056,11 +3057,37 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3056
3057
  _defineProperty(this, "add$", this._add$.asObservable());
3057
3058
  _defineProperty(this, "_remove$", new Subject());
3058
3059
  _defineProperty(this, "remove$", this._remove$.asObservable());
3060
+ _defineProperty(this, "_renderObjectFactories", /* @__PURE__ */ new Map());
3059
3061
  this._drawingAddListener();
3060
3062
  this._featureUpdateListener();
3061
3063
  this._deleteListener();
3062
3064
  this._bindScrollEvent();
3063
3065
  }
3066
+ /**
3067
+ * Register a factory that creates the canvas-side render object for a sheet
3068
+ * float-dom drawing type. The latest registered factory wins; disposing the
3069
+ * returned handle unregisters it and restores the previous factory or the
3070
+ * default {@link Rect} fallback.
3071
+ */
3072
+ registerRenderObjectFactory(drawingType, factory) {
3073
+ var _this$_renderObjectFa;
3074
+ const factories = (_this$_renderObjectFa = this._renderObjectFactories.get(drawingType)) !== null && _this$_renderObjectFa !== void 0 ? _this$_renderObjectFa : [];
3075
+ factories.push(factory);
3076
+ this._renderObjectFactories.set(drawingType, factories);
3077
+ return { dispose: () => {
3078
+ const currentFactories = this._renderObjectFactories.get(drawingType);
3079
+ if (!currentFactories) return;
3080
+ const index = currentFactories.indexOf(factory);
3081
+ if (index >= 0) currentFactories.splice(index, 1);
3082
+ if (currentFactories.length === 0) this._renderObjectFactories.delete(drawingType);
3083
+ } };
3084
+ }
3085
+ _createRenderObject(context) {
3086
+ var _factory;
3087
+ const factories = this._renderObjectFactories.get(context.drawingType);
3088
+ const factory = factories === null || factories === void 0 ? void 0 : factories[factories.length - 1];
3089
+ return (_factory = factory === null || factory === void 0 ? void 0 : factory(context)) !== null && _factory !== void 0 ? _factory : new Rect(context.key, context.config);
3090
+ }
3064
3091
  _bindScrollEvent() {
3065
3092
  this._lifecycleService.lifecycle$.pipe(filter((s) => s === LifecycleStages.Rendered), take(1)).subscribe(() => {
3066
3093
  this._scrollUpdateListener();
@@ -3100,7 +3127,7 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3100
3127
  if (!floatDomParam || !target) return;
3101
3128
  const skeleton = (_this$_renderManagerS = this._renderManagerService.getRenderById(unitId)) === null || _this$_renderManagerS === void 0 ? void 0 : _this$_renderManagerS.with(SheetSkeletonManagerService).getSkeletonParam(subUnitId);
3102
3129
  if (!skeleton) return;
3103
- const { transform, drawingType, data, hidden } = floatDomParam;
3130
+ const { transform, drawingType, data, hidden, groupId } = floatDomParam;
3104
3131
  if (drawingType !== DrawingTypeEnum.DRAWING_DOM && drawingType !== DrawingTypeEnum.DRAWING_CHART) return;
3105
3132
  const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
3106
3133
  if (renderObject == null) return;
@@ -3114,8 +3141,14 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3114
3141
  subUnitId,
3115
3142
  drawingId
3116
3143
  });
3117
- const rectShape = scene.getObject(rectShapeKey);
3144
+ const groupShapeKey = groupId ? getDrawingShapeKeyByDrawingSearch({
3145
+ unitId,
3146
+ subUnitId,
3147
+ drawingId: groupId
3148
+ }) : void 0;
3149
+ const rectShape = this._getObjectIncludingGroup(scene, rectShapeKey, groupShapeKey);
3118
3150
  if (rectShape != null) {
3151
+ this._removeTopLevelDuplicateIfGrouped(scene, rectShapeKey, rectShape);
3119
3152
  rectShape.transformByState({
3120
3153
  left,
3121
3154
  top,
@@ -3127,6 +3160,7 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3127
3160
  skewX,
3128
3161
  skewY
3129
3162
  });
3163
+ this._syncFloatDomRect(drawingId, rectShape);
3130
3164
  return;
3131
3165
  }
3132
3166
  const imageConfig = {
@@ -3139,18 +3173,32 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3139
3173
  const isChart = drawingType === DrawingTypeEnum.DRAWING_CHART;
3140
3174
  imageConfig.rotateEnabled = false;
3141
3175
  if (isChart) {
3142
- imageConfig.fill = data ? data.backgroundColor : "white";
3176
+ const backgroundColor = this._getChartDataBackground(data);
3177
+ if (backgroundColor !== void 0) imageConfig.fill = backgroundColor;
3143
3178
  if (data && data.border) imageConfig.stroke = data.border;
3144
3179
  imageConfig.paintFirst = "stroke";
3145
3180
  imageConfig.strokeWidth = 1;
3146
3181
  imageConfig.borderEnabled = false;
3147
3182
  imageConfig.radius = 8;
3148
3183
  }
3149
- const rect = new Rect(rectShapeKey, imageConfig);
3184
+ const rect = this._createRenderObject({
3185
+ key: rectShapeKey,
3186
+ config: imageConfig,
3187
+ unitId,
3188
+ subUnitId,
3189
+ drawingId,
3190
+ drawingType,
3191
+ data
3192
+ });
3150
3193
  if (isChart) rect.setObjectType(ObjectType.CHART);
3151
3194
  else if (drawingType === DrawingTypeEnum.DRAWING_DOM) rect.setObjectType(ObjectType.DRAWING_DOM);
3152
3195
  scene.addObject(rect, DRAWING_OBJECT_LAYER_INDEX);
3153
3196
  if (floatDomParam.allowTransform !== false) scene.attachTransformerTo(rect);
3197
+ if (isChart && groupId) insertGroupObject({
3198
+ drawingId: groupId,
3199
+ unitId,
3200
+ subUnitId
3201
+ }, rect, scene, this._drawingManagerService);
3154
3202
  const disposableCollection = new DisposableCollection();
3155
3203
  const position$ = new BehaviorSubject(calcSheetFloatDomPosition(rect, renderObject.renderUnit.scene, skeleton.skeleton, target.worksheet));
3156
3204
  const domId = `${SHEET_FLOAT_DOM_PREFIX}${generateRandomId(6)}`;
@@ -3205,7 +3253,7 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3205
3253
  const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
3206
3254
  if (renderObject == null) return;
3207
3255
  const { transformer, scene } = renderObject;
3208
- const rectShape = scene.getObject(rectShapeKey);
3256
+ const rectShape = this._getObjectIncludingGroup(scene, rectShapeKey);
3209
3257
  if (rectShape === null || rectShape === void 0 ? void 0 : rectShape.oKey) {
3210
3258
  var _scene$getTransformer;
3211
3259
  transformer.clearControlByIds([rectShape === null || rectShape === void 0 ? void 0 : rectShape.oKey]);
@@ -3278,9 +3326,60 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3278
3326
  subUnitId,
3279
3327
  drawingId: id
3280
3328
  });
3281
- const rectShape = scene.getObject(rectShapeKey);
3282
- if (rectShape && rectShape instanceof Rect) rectShape.setProps(props);
3329
+ const drawing = this._drawingManagerService.getDrawingByParam({
3330
+ unitId,
3331
+ subUnitId,
3332
+ drawingId: id
3333
+ });
3334
+ const groupShapeKey = (drawing === null || drawing === void 0 ? void 0 : drawing.groupId) ? getDrawingShapeKeyByDrawingSearch({
3335
+ unitId,
3336
+ subUnitId,
3337
+ drawingId: drawing.groupId
3338
+ }) : void 0;
3339
+ const rectShape = this._getObjectIncludingGroup(scene, rectShapeKey, groupShapeKey);
3340
+ if (rectShape && rectShape instanceof Rect) {
3341
+ this._removeTopLevelDuplicateIfGrouped(scene, rectShapeKey, rectShape);
3342
+ rectShape.setProps(props);
3343
+ this._syncFloatDomRect(id, rectShape);
3344
+ }
3345
+ }
3346
+ }
3347
+ _getObjectIncludingGroup(scene, key, groupKey) {
3348
+ var _ref, _ref2, _this$_getChildObject, _scene$getObjectInclu;
3349
+ return (_ref = (_ref2 = (_this$_getChildObject = this._getChildObjectFromGroup(scene, key, groupKey)) !== null && _this$_getChildObject !== void 0 ? _this$_getChildObject : (_scene$getObjectInclu = scene.getObjectIncludeInGroup) === null || _scene$getObjectInclu === void 0 ? void 0 : _scene$getObjectInclu.call(scene, key)) !== null && _ref2 !== void 0 ? _ref2 : scene.getObject(key)) !== null && _ref !== void 0 ? _ref : null;
3350
+ }
3351
+ _getChildObjectFromGroup(scene, key, groupKey) {
3352
+ var _scene$getObjectInclu2, _scene$getObjectInclu3;
3353
+ if (!groupKey) return null;
3354
+ const groupObject = (_scene$getObjectInclu2 = (_scene$getObjectInclu3 = scene.getObjectIncludeInGroup) === null || _scene$getObjectInclu3 === void 0 ? void 0 : _scene$getObjectInclu3.call(scene, groupKey)) !== null && _scene$getObjectInclu2 !== void 0 ? _scene$getObjectInclu2 : scene.getObject(groupKey);
3355
+ return this._findChildObject(groupObject, key);
3356
+ }
3357
+ _findChildObject(object, key) {
3358
+ if (!object) return null;
3359
+ const children = object.getObjects();
3360
+ for (const child of children) {
3361
+ if (child.oKey === key) return child;
3362
+ const nested = this._findChildObject(child, key);
3363
+ if (nested) return nested;
3283
3364
  }
3365
+ return null;
3366
+ }
3367
+ _removeTopLevelDuplicateIfGrouped(scene, key, object) {
3368
+ if (!object.isInGroup) return;
3369
+ const topLevelObject = scene.getObject(key);
3370
+ if (topLevelObject && topLevelObject !== object) scene.removeObject(topLevelObject);
3371
+ }
3372
+ _syncFloatDomRect(id, object) {
3373
+ if (!(object instanceof Rect)) return;
3374
+ const info = this._domLayerInfoMap.get(id);
3375
+ if (info) info.rect = object;
3376
+ }
3377
+ _getChartDataBackground(data) {
3378
+ var _record$backgroundCol;
3379
+ if (!data || typeof data !== "object" || Array.isArray(data)) return;
3380
+ const record = data;
3381
+ const background = (_record$backgroundCol = record.backgroundColor) !== null && _record$backgroundCol !== void 0 ? _record$backgroundCol : record.background;
3382
+ return typeof background === "string" ? background : void 0;
3284
3383
  }
3285
3384
  _getPosition(position, unitId) {
3286
3385
  var _this$_renderManagerS3;
@@ -3387,7 +3486,18 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3387
3486
  this._domLayerInfoMap.delete(id);
3388
3487
  info.dispose.dispose();
3389
3488
  const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
3390
- if (renderObject) renderObject.scene.removeObject(info.rect);
3489
+ if (renderObject) {
3490
+ const { scene, transformer } = renderObject;
3491
+ if (disposeDrawingRenderObject(scene, {
3492
+ unitId,
3493
+ subUnitId,
3494
+ drawingId: id
3495
+ })) {
3496
+ var _scene$getTransformer2;
3497
+ transformer.clearControlByIds([info.rect.oKey]);
3498
+ (_scene$getTransformer2 = scene.getTransformer()) === null || _scene$getTransformer2 === void 0 || _scene$getTransformer2.clearSelectedObjects();
3499
+ }
3500
+ }
3391
3501
  if (removeDrawing) {
3392
3502
  const param = this._drawingManagerService.getDrawingByParam({
3393
3503
  unitId,
@@ -3462,7 +3572,7 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3462
3572
  if (!skMangerService) return;
3463
3573
  const skeletonParam = skMangerService.getSkeletonParam(subUnitId);
3464
3574
  if (!skeletonParam) return;
3465
- const { transform, drawingType, data } = floatDomParam;
3575
+ const { transform, drawingType, data, groupId } = floatDomParam;
3466
3576
  if (drawingType !== DrawingTypeEnum.DRAWING_DOM && drawingType !== DrawingTypeEnum.DRAWING_CHART) return;
3467
3577
  const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
3468
3578
  if (renderObject == null) return;
@@ -3475,8 +3585,14 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3475
3585
  subUnitId,
3476
3586
  drawingId
3477
3587
  });
3478
- const rectShape = scene.getObject(rectShapeKey);
3588
+ const groupShapeKey = groupId ? getDrawingShapeKeyByDrawingSearch({
3589
+ unitId,
3590
+ subUnitId,
3591
+ drawingId: groupId
3592
+ }) : void 0;
3593
+ const rectShape = this._getObjectIncludingGroup(scene, rectShapeKey, groupShapeKey);
3479
3594
  if (rectShape != null) {
3595
+ this._removeTopLevelDuplicateIfGrouped(scene, rectShapeKey, rectShape);
3480
3596
  rectShape.transformByState({
3481
3597
  left,
3482
3598
  top,
@@ -3488,6 +3604,7 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3488
3604
  skewX,
3489
3605
  skewY
3490
3606
  });
3607
+ this._syncFloatDomRect(drawingId, rectShape);
3491
3608
  return;
3492
3609
  }
3493
3610
  const domConfig = {
@@ -3499,7 +3616,8 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3499
3616
  };
3500
3617
  const isChart = drawingType === DrawingTypeEnum.DRAWING_CHART;
3501
3618
  if (isChart) {
3502
- domConfig.fill = data ? data.backgroundColor : "white";
3619
+ const backgroundColor = this._getChartDataBackground(data);
3620
+ if (backgroundColor !== void 0) domConfig.fill = backgroundColor;
3503
3621
  domConfig.rotateEnabled = false;
3504
3622
  if (data && data.border) domConfig.stroke = data.border;
3505
3623
  domConfig.paintFirst = "stroke";
@@ -3507,10 +3625,23 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3507
3625
  domConfig.borderEnabled = false;
3508
3626
  domConfig.radius = 8;
3509
3627
  }
3510
- const domRect = new Rect(rectShapeKey, domConfig);
3628
+ const domRect = this._createRenderObject({
3629
+ key: rectShapeKey,
3630
+ config: domConfig,
3631
+ unitId,
3632
+ subUnitId,
3633
+ drawingId,
3634
+ drawingType,
3635
+ data
3636
+ });
3511
3637
  if (isChart) domRect.setObjectType(ObjectType.CHART);
3512
3638
  scene.addObject(domRect, DRAWING_OBJECT_LAYER_INDEX);
3513
3639
  if (floatDomParam.allowTransform !== false) scene.attachTransformerTo(domRect);
3640
+ if (isChart && groupId) insertGroupObject({
3641
+ drawingId: groupId,
3642
+ unitId,
3643
+ subUnitId
3644
+ }, domRect, scene, this._drawingManagerService);
3514
3645
  const disposableCollection = new DisposableCollection();
3515
3646
  const viewMain = scene.getMainViewport();
3516
3647
  const { rowHeaderWidth, columnHeaderHeight } = skeletonParam.skeleton;
@@ -3677,8 +3808,9 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3677
3808
  subUnitId,
3678
3809
  drawingId
3679
3810
  });
3680
- const rectShape = scene.getObject(rectShapeKey);
3811
+ const rectShape = this._getObjectIncludingGroup(scene, rectShapeKey);
3681
3812
  if (rectShape != null) {
3813
+ this._removeTopLevelDuplicateIfGrouped(scene, rectShapeKey, rectShape);
3682
3814
  rectShape.transformByState({
3683
3815
  left,
3684
3816
  top,
@@ -3690,6 +3822,7 @@ let SheetCanvasFloatDomManagerService = class SheetCanvasFloatDomManagerService
3690
3822
  skewX,
3691
3823
  skewY
3692
3824
  });
3825
+ this._syncFloatDomRect(drawingId, rectShape);
3693
3826
  return;
3694
3827
  }
3695
3828
  const calcOffsetPos = calcDomPositionByAnchor({