@univerjs/sheets-drawing-ui 1.0.0-alpha.0 → 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/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.0";
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({
@@ -170,8 +170,8 @@ export interface IFWorksheetDrawingUIMixin {
170
170
  * const fWorksheet = univerAPI.getActiveWorkbook().getSheetByName('Sheet1');
171
171
  * if (!fWorksheet) return;
172
172
  *
173
- * // You should register components at an appropriate time (e.g., when Univer is loaded)
174
- * // This is a React component. For Vue3 components, the third parameter should be `{ framework: 'vue3' }`
173
+ * // You should register components at an appropriate time (e.g., when Univer is loaded).
174
+ * // This is a React component. For other frameworks, pass a matching adapter option, such as `{ framework: 'vue3' }`.
175
175
  * univerAPI.registerComponent(
176
176
  * 'myFloatDom',
177
177
  * ({ data }) => (
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import type { IDisposable, IPosition, IRange, ITransformState, Serializable, Worksheet } from '@univerjs/core';
17
- import type { BaseObject, IBoundRectNoAngle, Scene, SpreadsheetSkeleton } from '@univerjs/engine-render';
17
+ import type { BaseObject, IBoundRectNoAngle, IRectProps, Scene, SpreadsheetSkeleton } from '@univerjs/engine-render';
18
18
  import type { IFloatDomLayout } from '@univerjs/ui';
19
19
  import { Disposable, DrawingTypeEnum, ICommandService, IUniverInstanceService, LifecycleService } from '@univerjs/core';
20
20
  import { IDrawingManagerService } from '@univerjs/drawing';
@@ -71,6 +71,34 @@ export interface ICanvasFloatDomInfo {
71
71
  id: string;
72
72
  domId?: string;
73
73
  }
74
+ /**
75
+ * Context passed to a sheet float-dom render object factory.
76
+ *
77
+ * This shape is consumed by the sheet drawing render pipeline when it creates
78
+ * canvas-side render objects. Plugins normally use it through the callback
79
+ * passed to {@link SheetCanvasFloatDomManagerService.registerRenderObjectFactory}.
80
+ */
81
+ export interface ISheetFloatDomRenderObjectFactoryContext {
82
+ key: string;
83
+ config: IRectProps;
84
+ unitId: string;
85
+ subUnitId: string;
86
+ drawingId: string;
87
+ drawingType: DrawingTypeEnum;
88
+ data?: Serializable;
89
+ }
90
+ /**
91
+ * Creates the canvas-side render object for a sheet float-dom drawing.
92
+ *
93
+ * The returned object must be a {@link Rect} or a {@link Rect} subclass because
94
+ * the sheet drawing manager owns transform, selection, order, and grouping
95
+ * through that render object.
96
+ *
97
+ * Prefer registering factories through
98
+ * {@link SheetCanvasFloatDomManagerService.registerRenderObjectFactory} instead
99
+ * of constructing render objects inside sheet drawing code.
100
+ */
101
+ export type SheetFloatDomRenderObjectFactory = (context: ISheetFloatDomRenderObjectFactoryContext) => Rect;
74
102
  export interface IDOMAnchor {
75
103
  width: number;
76
104
  height: number;
@@ -138,7 +166,16 @@ export declare class SheetCanvasFloatDomManagerService extends Disposable {
138
166
  subUnitId: string;
139
167
  id: string;
140
168
  }>;
169
+ private readonly _renderObjectFactories;
141
170
  constructor(_renderManagerService: IRenderManagerService, _univerInstanceService: IUniverInstanceService, _commandService: ICommandService, _drawingManagerService: IDrawingManagerService, _canvasFloatDomService: CanvasFloatDomService, _sheetDrawingService: ISheetDrawingService, _lifecycleService: LifecycleService);
171
+ /**
172
+ * Register a factory that creates the canvas-side render object for a sheet
173
+ * float-dom drawing type. The latest registered factory wins; disposing the
174
+ * returned handle unregisters it and restores the previous factory or the
175
+ * default {@link Rect} fallback.
176
+ */
177
+ registerRenderObjectFactory(drawingType: DrawingTypeEnum, factory: SheetFloatDomRenderObjectFactory): IDisposable;
178
+ private _createRenderObject;
142
179
  private _bindScrollEvent;
143
180
  getFloatDomInfo(id: string): ICanvasFloatDomInfo | undefined;
144
181
  getFloatDomsBySubUnitId(unitId: string, subUnitId: string): ICanvasFloatDomInfo[];
@@ -146,6 +183,12 @@ export declare class SheetCanvasFloatDomManagerService extends Disposable {
146
183
  private _drawingAddListener;
147
184
  private _scrollUpdateListener;
148
185
  updateFloatDomProps(unitId: string, subUnitId: string, id: string, props: Record<string, any>): void;
186
+ private _getObjectIncludingGroup;
187
+ private _getChildObjectFromGroup;
188
+ private _findChildObject;
189
+ private _removeTopLevelDuplicateIfGrouped;
190
+ private _syncFloatDomRect;
191
+ private _getChartDataBackground;
149
192
  private _getPosition;
150
193
  private _featureUpdateListener;
151
194
  private _deleteListener;