@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 +149 -16
- package/lib/es/index.js +150 -17
- package/lib/index.js +150 -17
- package/lib/types/facade/f-worksheet.d.ts +2 -2
- package/lib/types/services/canvas-float-dom-manager.service.d.ts +44 -1
- package/lib/umd/index.js +2 -2
- package/package.json +14 -14
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
|
|
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
|
-
...
|
|
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.
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
3282
|
-
|
|
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)
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
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;
|