@univerjs/sheets-drawing 0.25.0 → 1.0.0-alpha.0

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/facade.js CHANGED
@@ -1,11 +1,12 @@
1
- import { ArrangeTypeEnum, CanceledError, DrawingTypeEnum, ICommandService, ImageSourceType, Inject, Injector, generateRandomId } from "@univerjs/core";
1
+ import { ArrangeTypeEnum, CanceledError, DrawingTypeEnum, ICommandService, IUndoRedoService, ImageSourceType, Inject, Injector, generateRandomId } from "@univerjs/core";
2
2
  import { FBase, FEnum, FEventName, FUniver } from "@univerjs/core/facade";
3
3
  import { IDrawingManagerService, SetDrawingSelectedOperation, getImageSize } from "@univerjs/drawing";
4
4
  import { SheetSkeletonService, convertPositionCellToSheetOverGrid, convertPositionSheetOverGridToAbsolute } from "@univerjs/sheets";
5
- import { ISheetDrawingService, InsertSheetDrawingCommand, RemoveSheetDrawingCommand, SetDrawingArrangeCommand, SetSheetDrawingCommand, SheetDrawingAnchorType, transformToAxisAlignPosition } from "@univerjs/sheets-drawing";
5
+ import { DrawingApplyType, ISheetDrawingService, InsertSheetDrawingCommand, RemoveSheetDrawingCommand, SetDrawingApplyMutation, SetDrawingArrangeCommand, SetSheetDrawingCommand, SheetDrawingAnchorType, transformToAxisAlignPosition } from "@univerjs/sheets-drawing";
6
+ import { getGroupState, transformObjectOutOfGroup } from "@univerjs/engine-render";
6
7
  import { FWorksheet } from "@univerjs/sheets/facade";
7
8
 
8
- //#region \0@oxc-project+runtime@0.133.0/helpers/esm/typeof.js
9
+ //#region \0@oxc-project+runtime@0.137.0/helpers/esm/typeof.js
9
10
  function _typeof(o) {
10
11
  "@babel/helpers - typeof";
11
12
  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
@@ -16,7 +17,7 @@ function _typeof(o) {
16
17
  }
17
18
 
18
19
  //#endregion
19
- //#region \0@oxc-project+runtime@0.133.0/helpers/esm/toPrimitive.js
20
+ //#region \0@oxc-project+runtime@0.137.0/helpers/esm/toPrimitive.js
20
21
  function toPrimitive(t, r) {
21
22
  if ("object" != _typeof(t) || !t) return t;
22
23
  var e = t[Symbol.toPrimitive];
@@ -29,14 +30,14 @@ function toPrimitive(t, r) {
29
30
  }
30
31
 
31
32
  //#endregion
32
- //#region \0@oxc-project+runtime@0.133.0/helpers/esm/toPropertyKey.js
33
+ //#region \0@oxc-project+runtime@0.137.0/helpers/esm/toPropertyKey.js
33
34
  function toPropertyKey(t) {
34
35
  var i = toPrimitive(t, "string");
35
36
  return "symbol" == _typeof(i) ? i : i + "";
36
37
  }
37
38
 
38
39
  //#endregion
39
- //#region \0@oxc-project+runtime@0.133.0/helpers/esm/defineProperty.js
40
+ //#region \0@oxc-project+runtime@0.137.0/helpers/esm/defineProperty.js
40
41
  function _defineProperty(e, r, t) {
41
42
  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
42
43
  value: t,
@@ -47,7 +48,7 @@ function _defineProperty(e, r, t) {
47
48
  }
48
49
 
49
50
  //#endregion
50
- //#region \0@oxc-project+runtime@0.133.0/helpers/esm/decorateParam.js
51
+ //#region \0@oxc-project+runtime@0.137.0/helpers/esm/decorateParam.js
51
52
  function __decorateParam(paramIndex, decorator) {
52
53
  return function(target, key) {
53
54
  decorator(target, key, paramIndex);
@@ -55,7 +56,7 @@ function __decorateParam(paramIndex, decorator) {
55
56
  }
56
57
 
57
58
  //#endregion
58
- //#region \0@oxc-project+runtime@0.133.0/helpers/esm/decorate.js
59
+ //#region \0@oxc-project+runtime@0.137.0/helpers/esm/decorate.js
59
60
  function __decorate(decorators, target, key, desc) {
60
61
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
61
62
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -890,6 +891,11 @@ FOverGridImage = __decorate([__decorateParam(1, ICommandService), __decoratePara
890
891
 
891
892
  //#endregion
892
893
  //#region src/facade/f-worksheet.ts
894
+ const GROUPABLE_DRAWING_TYPES = /* @__PURE__ */ new Set([
895
+ DrawingTypeEnum.DRAWING_IMAGE,
896
+ DrawingTypeEnum.DRAWING_SHAPE,
897
+ DrawingTypeEnum.DRAWING_GROUP
898
+ ]);
893
899
  var FWorksheetDrawingMixin = class extends FWorksheet {
894
900
  async insertImage(url, column, row, offsetX, offsetY) {
895
901
  const imageBuilder = this.newOverGridImage();
@@ -979,6 +985,201 @@ var FWorksheetDrawingMixin = class extends FWorksheet {
979
985
  const subUnitId = this.getSheetId();
980
986
  return this._injector.createInstance(FOverGridImageBuilder, unitId, subUnitId);
981
987
  }
988
+ groupDrawings(drawingIds, groupId = generateRandomId(10)) {
989
+ const uniqueDrawingIds = Array.from(new Set(drawingIds));
990
+ if (uniqueDrawingIds.length < 2) return null;
991
+ const unitId = this._fWorkbook.getId();
992
+ const subUnitId = this.getSheetId();
993
+ const sheetDrawingService = this._injector.get(ISheetDrawingService);
994
+ if (sheetDrawingService.getDrawingByParam({
995
+ unitId,
996
+ subUnitId,
997
+ drawingId: groupId
998
+ })) return null;
999
+ const drawings = uniqueDrawingIds.map((drawingId) => sheetDrawingService.getDrawingByParam({
1000
+ unitId,
1001
+ subUnitId,
1002
+ drawingId
1003
+ }));
1004
+ if (drawings.some((drawing) => !drawing)) return null;
1005
+ if (drawings.some((drawing) => !GROUPABLE_DRAWING_TYPES.has(drawing.drawingType))) return null;
1006
+ const validDrawings = drawings;
1007
+ const groupTransform = getGroupState(0, 0, validDrawings.map((drawing) => drawing.transform || {}));
1008
+ const groupParam = {
1009
+ unitId,
1010
+ subUnitId,
1011
+ drawingId: groupId,
1012
+ drawingType: DrawingTypeEnum.DRAWING_GROUP,
1013
+ transform: groupTransform,
1014
+ groupBaseBound: {
1015
+ left: groupTransform.left,
1016
+ top: groupTransform.top,
1017
+ width: groupTransform.width,
1018
+ height: groupTransform.height
1019
+ }
1020
+ };
1021
+ const children = validDrawings.map((drawing) => ({
1022
+ ...drawing,
1023
+ groupId
1024
+ }));
1025
+ return this._applyGroupDrawingOperation([{
1026
+ parent: groupParam,
1027
+ children
1028
+ }], DrawingApplyType.GROUP) ? groupId : null;
1029
+ }
1030
+ ungroupDrawings(groupIds) {
1031
+ const unitId = this._fWorkbook.getId();
1032
+ const subUnitId = this.getSheetId();
1033
+ const sheetDrawingService = this._injector.get(ISheetDrawingService);
1034
+ const groupParams = [];
1035
+ for (const groupId of groupIds) {
1036
+ const groupDrawing = sheetDrawingService.getDrawingByParam({
1037
+ unitId,
1038
+ subUnitId,
1039
+ drawingId: groupId
1040
+ });
1041
+ if (!groupDrawing || groupDrawing.drawingType !== DrawingTypeEnum.DRAWING_GROUP) continue;
1042
+ const groupTransform = groupDrawing.transform || {
1043
+ width: 0,
1044
+ height: 0
1045
+ };
1046
+ const children = sheetDrawingService.getDrawingsByGroup({
1047
+ unitId,
1048
+ subUnitId,
1049
+ drawingId: groupId
1050
+ }).map((drawing) => {
1051
+ const newTransform = transformObjectOutOfGroup(drawing.transform || {}, groupTransform, groupTransform.width || 0, groupTransform.height || 0, groupDrawing.groupBaseBound);
1052
+ return {
1053
+ ...drawing,
1054
+ transform: {
1055
+ ...drawing.transform,
1056
+ ...newTransform
1057
+ },
1058
+ groupId: void 0
1059
+ };
1060
+ });
1061
+ if (children.length > 0) groupParams.push({
1062
+ parent: groupDrawing,
1063
+ children
1064
+ });
1065
+ }
1066
+ return this._applyGroupDrawingOperation(groupParams, DrawingApplyType.UNGROUP);
1067
+ }
1068
+ getDrawingGroupChildren(groupId, recursive = false) {
1069
+ const unitId = this._fWorkbook.getId();
1070
+ const subUnitId = this.getSheetId();
1071
+ const sheetDrawingService = this._injector.get(ISheetDrawingService);
1072
+ if (!recursive) return sheetDrawingService.getDrawingsByGroup({
1073
+ unitId,
1074
+ subUnitId,
1075
+ drawingId: groupId
1076
+ });
1077
+ const nested = sheetDrawingService.getDrawingsByGroupNested({
1078
+ unitId,
1079
+ subUnitId,
1080
+ drawingId: groupId
1081
+ });
1082
+ if (!nested) return [];
1083
+ return [...nested.flatChildren || [], ...nested.groups.filter((group) => group.drawingId !== groupId)];
1084
+ }
1085
+ getDrawingParentGroup(drawingId) {
1086
+ const unitId = this._fWorkbook.getId();
1087
+ const subUnitId = this.getSheetId();
1088
+ const sheetDrawingService = this._injector.get(ISheetDrawingService);
1089
+ const drawing = sheetDrawingService.getDrawingByParam({
1090
+ unitId,
1091
+ subUnitId,
1092
+ drawingId
1093
+ });
1094
+ if (!(drawing === null || drawing === void 0 ? void 0 : drawing.groupId)) return null;
1095
+ const groupDrawing = sheetDrawingService.getDrawingByParam({
1096
+ unitId,
1097
+ subUnitId,
1098
+ drawingId: drawing.groupId
1099
+ });
1100
+ if (!groupDrawing || groupDrawing.drawingType !== DrawingTypeEnum.DRAWING_GROUP) return null;
1101
+ return groupDrawing;
1102
+ }
1103
+ isDrawingGrouped(drawingId) {
1104
+ return this.getDrawingParentGroup(drawingId) !== null;
1105
+ }
1106
+ _applyGroupDrawingOperation(groupParams, type) {
1107
+ if (groupParams.length === 0) return false;
1108
+ const sheetDrawingService = this._injector.get(ISheetDrawingService);
1109
+ const commandService = this._commandService;
1110
+ const undoRedoService = this._injector.get(IUndoRedoService);
1111
+ const { unitId, subUnitId, undo, redo, objects } = type === DrawingApplyType.GROUP ? sheetDrawingService.getGroupDrawingOp(groupParams) : sheetDrawingService.getUngroupDrawingOp(groupParams);
1112
+ if (commandService.syncExecuteCommand(SetDrawingApplyMutation.id, {
1113
+ op: redo,
1114
+ unitId,
1115
+ subUnitId,
1116
+ objects,
1117
+ type
1118
+ })) {
1119
+ const inverseType = type === DrawingApplyType.GROUP ? DrawingApplyType.UNGROUP : DrawingApplyType.GROUP;
1120
+ undoRedoService.pushUndoRedo({
1121
+ unitID: unitId,
1122
+ undoMutations: [{
1123
+ id: SetDrawingApplyMutation.id,
1124
+ params: {
1125
+ op: undo,
1126
+ unitId,
1127
+ subUnitId,
1128
+ objects: this._invertGroupOperationObjects(objects, type),
1129
+ type: inverseType
1130
+ }
1131
+ }],
1132
+ redoMutations: [{
1133
+ id: SetDrawingApplyMutation.id,
1134
+ params: {
1135
+ op: redo,
1136
+ unitId,
1137
+ subUnitId,
1138
+ objects,
1139
+ type
1140
+ }
1141
+ }]
1142
+ });
1143
+ return true;
1144
+ }
1145
+ return false;
1146
+ }
1147
+ _invertGroupOperationObjects(groupParams, type) {
1148
+ return type === DrawingApplyType.GROUP ? groupParams.map((groupParam) => {
1149
+ const { parent, children } = groupParam;
1150
+ const groupTransform = parent.transform || {
1151
+ width: 0,
1152
+ height: 0
1153
+ };
1154
+ return {
1155
+ parent: {
1156
+ ...parent,
1157
+ transform: {
1158
+ left: 0,
1159
+ top: 0
1160
+ }
1161
+ },
1162
+ children: children.map((child) => ({
1163
+ ...child,
1164
+ transform: transformObjectOutOfGroup(child.transform || {}, groupTransform, groupTransform.width || 0, groupTransform.height || 0, parent.groupBaseBound),
1165
+ groupId: void 0
1166
+ }))
1167
+ };
1168
+ }) : groupParams.map((groupParam) => {
1169
+ const { parent, children } = groupParam;
1170
+ const groupTransform = getGroupState(0, 0, children.map((child) => child.transform || {}));
1171
+ return {
1172
+ parent: {
1173
+ ...parent,
1174
+ transform: groupTransform
1175
+ },
1176
+ children: children.map((child) => ({
1177
+ ...child,
1178
+ groupId: parent.drawingId
1179
+ }))
1180
+ };
1181
+ });
1182
+ }
982
1183
  };
983
1184
  FWorksheet.extend(FWorksheetDrawingMixin);
984
1185
 
package/lib/index.js CHANGED
@@ -405,7 +405,7 @@ const SetSheetDrawingCommand = {
405
405
  };
406
406
 
407
407
  //#endregion
408
- //#region \0@oxc-project+runtime@0.133.0/helpers/esm/decorateParam.js
408
+ //#region \0@oxc-project+runtime@0.137.0/helpers/esm/decorateParam.js
409
409
  function __decorateParam(paramIndex, decorator) {
410
410
  return function(target, key) {
411
411
  decorator(target, key, paramIndex);
@@ -413,7 +413,7 @@ function __decorateParam(paramIndex, decorator) {
413
413
  }
414
414
 
415
415
  //#endregion
416
- //#region \0@oxc-project+runtime@0.133.0/helpers/esm/decorate.js
416
+ //#region \0@oxc-project+runtime@0.137.0/helpers/esm/decorate.js
417
417
  function __decorate(decorators, target, key, desc) {
418
418
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
419
419
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -583,7 +583,7 @@ SheetsDrawingLoadController = __decorate([
583
583
  //#endregion
584
584
  //#region package.json
585
585
  var name = "@univerjs/sheets-drawing";
586
- var version = "0.25.0";
586
+ var version = "1.0.0-alpha.0";
587
587
 
588
588
  //#endregion
589
589
  //#region src/config/config.ts
@@ -607,7 +607,7 @@ const configSymbol = Symbol(SHEETS_DRAWING_PLUGIN_CONFIG_KEY);
607
607
  const defaultPluginConfig = {};
608
608
 
609
609
  //#endregion
610
- //#region \0@oxc-project+runtime@0.133.0/helpers/esm/typeof.js
610
+ //#region \0@oxc-project+runtime@0.137.0/helpers/esm/typeof.js
611
611
  function _typeof(o) {
612
612
  "@babel/helpers - typeof";
613
613
  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
@@ -618,7 +618,7 @@ function _typeof(o) {
618
618
  }
619
619
 
620
620
  //#endregion
621
- //#region \0@oxc-project+runtime@0.133.0/helpers/esm/toPrimitive.js
621
+ //#region \0@oxc-project+runtime@0.137.0/helpers/esm/toPrimitive.js
622
622
  function toPrimitive(t, r) {
623
623
  if ("object" != _typeof(t) || !t) return t;
624
624
  var e = t[Symbol.toPrimitive];
@@ -631,14 +631,14 @@ function toPrimitive(t, r) {
631
631
  }
632
632
 
633
633
  //#endregion
634
- //#region \0@oxc-project+runtime@0.133.0/helpers/esm/toPropertyKey.js
634
+ //#region \0@oxc-project+runtime@0.137.0/helpers/esm/toPropertyKey.js
635
635
  function toPropertyKey(t) {
636
636
  var i = toPrimitive(t, "string");
637
637
  return "symbol" == _typeof(i) ? i : i + "";
638
638
  }
639
639
 
640
640
  //#endregion
641
- //#region \0@oxc-project+runtime@0.133.0/helpers/esm/defineProperty.js
641
+ //#region \0@oxc-project+runtime@0.137.0/helpers/esm/defineProperty.js
642
642
  function _defineProperty(e, r, t) {
643
643
  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
644
644
  value: t,
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import type { IFBlobSource } from '@univerjs/core/facade';
17
- import type { ISheetImage } from '@univerjs/sheets-drawing';
17
+ import type { ISheetDrawing, ISheetImage } from '@univerjs/sheets-drawing';
18
18
  import { FWorksheet } from '@univerjs/sheets/facade';
19
19
  import { FOverGridImage, FOverGridImageBuilder } from './f-over-grid-image';
20
20
  /**
@@ -206,6 +206,161 @@ export interface IFWorksheetDrawingMixin {
206
206
  * ```
207
207
  */
208
208
  newOverGridImage(): FOverGridImageBuilder;
209
+ /**
210
+ * Group drawings on the current sheet.
211
+ * @param {string[]} drawingIds - The drawing ids to group. At least two drawings are required.
212
+ * @param {string} [groupId] - Optional group drawing id. If omitted, a new id will be generated.
213
+ * @returns {string | null} The group id if the operation succeeds, otherwise null.
214
+ * @example
215
+ * ```ts
216
+ * // Group two over-grid images on the active sheet.
217
+ * const fWorkbook = univerAPI.getActiveWorkbook();
218
+ * const fWorksheet = fWorkbook.getActiveSheet();
219
+ * const image1 = await fWorksheet.newOverGridImage()
220
+ * .setSource('https://avatars.githubusercontent.com/u/61444807?s=48&v=4', univerAPI.Enum.ImageSourceType.URL)
221
+ * .setColumn(1)
222
+ * .setRow(1)
223
+ * .setWidth(100)
224
+ * .setHeight(100)
225
+ * .buildAsync();
226
+ * const image2 = await fWorksheet.newOverGridImage()
227
+ * .setSource('https://avatars.githubusercontent.com/u/61444807?s=48&v=4', univerAPI.Enum.ImageSourceType.URL)
228
+ * .setColumn(3)
229
+ * .setRow(1)
230
+ * .setWidth(100)
231
+ * .setHeight(100)
232
+ * .buildAsync();
233
+ * fWorksheet.insertImages([image1, image2]);
234
+ * const groupId = fWorksheet.groupDrawings([image1.drawingId, image2.drawingId]);
235
+ * console.log(groupId);
236
+ * ```
237
+ */
238
+ groupDrawings(drawingIds: string[], groupId?: string): string | null;
239
+ /**
240
+ * Ungroup drawing groups on the current sheet.
241
+ * @param {string[]} groupIds - The group drawing ids to ungroup.
242
+ * @returns {boolean} true if the operation succeeds, otherwise false.
243
+ * @example
244
+ * ```ts
245
+ * // Group two images, then ungroup the generated group.
246
+ * const fWorkbook = univerAPI.getActiveWorkbook();
247
+ * const fWorksheet = fWorkbook.getActiveSheet();
248
+ * const image1 = await fWorksheet.newOverGridImage()
249
+ * .setSource('https://avatars.githubusercontent.com/u/61444807?s=48&v=4', univerAPI.Enum.ImageSourceType.URL)
250
+ * .setColumn(1)
251
+ * .setRow(1)
252
+ * .setWidth(100)
253
+ * .setHeight(100)
254
+ * .buildAsync();
255
+ * const image2 = await fWorksheet.newOverGridImage()
256
+ * .setSource('https://avatars.githubusercontent.com/u/61444807?s=48&v=4', univerAPI.Enum.ImageSourceType.URL)
257
+ * .setColumn(3)
258
+ * .setRow(1)
259
+ * .setWidth(100)
260
+ * .setHeight(100)
261
+ * .buildAsync();
262
+ * fWorksheet.insertImages([image1, image2]);
263
+ * const groupId = fWorksheet.groupDrawings([image1.drawingId, image2.drawingId]);
264
+ * if (groupId) {
265
+ * const result = fWorksheet.ungroupDrawings([groupId]);
266
+ * console.log(result);
267
+ * }
268
+ * ```
269
+ */
270
+ ungroupDrawings(groupIds: string[]): boolean;
271
+ /**
272
+ * Get children of a drawing group on the current sheet.
273
+ * @param {string} groupId - The group drawing id.
274
+ * @param {boolean} [recursive] - Whether to return all descendants.
275
+ * @returns {ISheetDrawing[]} The child drawings.
276
+ * @example
277
+ * ```ts
278
+ * // Get the direct children of a drawing group.
279
+ * const fWorkbook = univerAPI.getActiveWorkbook();
280
+ * const fWorksheet = fWorkbook.getActiveSheet();
281
+ * const image1 = await fWorksheet.newOverGridImage()
282
+ * .setSource('https://avatars.githubusercontent.com/u/61444807?s=48&v=4', univerAPI.Enum.ImageSourceType.URL)
283
+ * .setColumn(1)
284
+ * .setRow(1)
285
+ * .setWidth(100)
286
+ * .setHeight(100)
287
+ * .buildAsync();
288
+ * const image2 = await fWorksheet.newOverGridImage()
289
+ * .setSource('https://avatars.githubusercontent.com/u/61444807?s=48&v=4', univerAPI.Enum.ImageSourceType.URL)
290
+ * .setColumn(3)
291
+ * .setRow(1)
292
+ * .setWidth(100)
293
+ * .setHeight(100)
294
+ * .buildAsync();
295
+ * fWorksheet.insertImages([image1, image2]);
296
+ * const groupId = fWorksheet.groupDrawings([image1.drawingId, image2.drawingId]);
297
+ * if (groupId) {
298
+ * const children = fWorksheet.getDrawingGroupChildren(groupId);
299
+ * console.log(children.map((drawing) => drawing.drawingId));
300
+ * }
301
+ * ```
302
+ */
303
+ getDrawingGroupChildren(groupId: string, recursive?: boolean): ISheetDrawing[];
304
+ /**
305
+ * Get the parent group of a drawing on the current sheet.
306
+ * @param {string} drawingId - The child drawing id.
307
+ * @returns {ISheetDrawing | null} The parent group drawing, or null if the drawing is not grouped.
308
+ * @example
309
+ * ```ts
310
+ * // Get the parent group of a drawing.
311
+ * const fWorkbook = univerAPI.getActiveWorkbook();
312
+ * const fWorksheet = fWorkbook.getActiveSheet();
313
+ * const image1 = await fWorksheet.newOverGridImage()
314
+ * .setSource('https://avatars.githubusercontent.com/u/61444807?s=48&v=4', univerAPI.Enum.ImageSourceType.URL)
315
+ * .setColumn(1)
316
+ * .setRow(1)
317
+ * .setWidth(100)
318
+ * .setHeight(100)
319
+ * .buildAsync();
320
+ * const image2 = await fWorksheet.newOverGridImage()
321
+ * .setSource('https://avatars.githubusercontent.com/u/61444807?s=48&v=4', univerAPI.Enum.ImageSourceType.URL)
322
+ * .setColumn(3)
323
+ * .setRow(1)
324
+ * .setWidth(100)
325
+ * .setHeight(100)
326
+ * .buildAsync();
327
+ * fWorksheet.insertImages([image1, image2]);
328
+ * fWorksheet.groupDrawings([image1.drawingId, image2.drawingId]);
329
+ * const parentGroup = fWorksheet.getDrawingParentGroup(image1.drawingId);
330
+ * console.log(parentGroup?.drawingId);
331
+ * ```
332
+ */
333
+ getDrawingParentGroup(drawingId: string): ISheetDrawing | null;
334
+ /**
335
+ * Returns whether a drawing is inside a group on the current sheet.
336
+ * @param {string} drawingId - The drawing id.
337
+ * @returns {boolean} true if the drawing has a parent group.
338
+ * @example
339
+ * ```ts
340
+ * // Check whether a drawing is inside a group.
341
+ * const fWorkbook = univerAPI.getActiveWorkbook();
342
+ * const fWorksheet = fWorkbook.getActiveSheet();
343
+ * const image1 = await fWorksheet.newOverGridImage()
344
+ * .setSource('https://avatars.githubusercontent.com/u/61444807?s=48&v=4', univerAPI.Enum.ImageSourceType.URL)
345
+ * .setColumn(1)
346
+ * .setRow(1)
347
+ * .setWidth(100)
348
+ * .setHeight(100)
349
+ * .buildAsync();
350
+ * const image2 = await fWorksheet.newOverGridImage()
351
+ * .setSource('https://avatars.githubusercontent.com/u/61444807?s=48&v=4', univerAPI.Enum.ImageSourceType.URL)
352
+ * .setColumn(3)
353
+ * .setRow(1)
354
+ * .setWidth(100)
355
+ * .setHeight(100)
356
+ * .buildAsync();
357
+ * fWorksheet.insertImages([image1, image2]);
358
+ * fWorksheet.groupDrawings([image1.drawingId, image2.drawingId]);
359
+ * const isGrouped = fWorksheet.isDrawingGrouped(image1.drawingId);
360
+ * console.log(isGrouped);
361
+ * ```
362
+ */
363
+ isDrawingGrouped(drawingId: string): boolean;
209
364
  }
210
365
  export declare class FWorksheetDrawingMixin extends FWorksheet implements IFWorksheetDrawingMixin {
211
366
  insertImage(url: IFBlobSource | string, column?: number, row?: number, offsetX?: number, offsetY?: number): Promise<boolean>;
@@ -216,6 +371,13 @@ export declare class FWorksheetDrawingMixin extends FWorksheet implements IFWork
216
371
  getActiveImages(): FOverGridImage[];
217
372
  updateImages(sheetImages: ISheetImage[]): FWorksheet;
218
373
  newOverGridImage(): FOverGridImageBuilder;
374
+ groupDrawings(drawingIds: string[], groupId?: string): string | null;
375
+ ungroupDrawings(groupIds: string[]): boolean;
376
+ getDrawingGroupChildren(groupId: string, recursive?: boolean): ISheetDrawing[];
377
+ getDrawingParentGroup(drawingId: string): ISheetDrawing | null;
378
+ isDrawingGrouped(drawingId: string): boolean;
379
+ private _applyGroupDrawingOperation;
380
+ private _invertGroupOperationObjects;
219
381
  }
220
382
  declare module '@univerjs/sheets/facade' {
221
383
  interface FWorksheet extends IFWorksheetDrawingMixin {
@@ -13,15 +13,20 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- export { drawingPositionToTransform, transformToAxisAlignPosition, transformToDrawingPosition } from './basics/transform-position';
17
- export { type IInsertDrawingCommandParams, InsertSheetDrawingCommand } from './commands/commands/insert-sheet-drawing.command';
18
- export { type IDeleteDrawingCommandParam, type IDeleteDrawingCommandParams, RemoveSheetDrawingCommand } from './commands/commands/remove-sheet-drawing.command';
19
- export { type ISetDrawingArrangeCommandParams, SetDrawingArrangeCommand } from './commands/commands/set-drawing-arrange.command';
20
- export { type ISetDrawingCommandParams, SetSheetDrawingCommand } from './commands/commands/set-sheet-drawing.command';
21
- export { DrawingApplyType, type ISetDrawingApplyMutationParams, SetDrawingApplyMutation } from './commands/mutations/set-drawing-apply.mutation';
16
+ export { drawingPositionToTransform, transformToAxisAlignPosition, transformToDrawingPosition, } from './basics/transform-position';
17
+ export { InsertSheetDrawingCommand } from './commands/commands/insert-sheet-drawing.command';
18
+ export type { IInsertDrawingCommandParams } from './commands/commands/insert-sheet-drawing.command';
19
+ export { RemoveSheetDrawingCommand } from './commands/commands/remove-sheet-drawing.command';
20
+ export type { IDeleteDrawingCommandParam, IDeleteDrawingCommandParams, } from './commands/commands/remove-sheet-drawing.command';
21
+ export { SetDrawingArrangeCommand } from './commands/commands/set-drawing-arrange.command';
22
+ export type { ISetDrawingArrangeCommandParams } from './commands/commands/set-drawing-arrange.command';
23
+ export { SetSheetDrawingCommand } from './commands/commands/set-sheet-drawing.command';
24
+ export type { ISetDrawingCommandParams } from './commands/commands/set-sheet-drawing.command';
25
+ export { DrawingApplyType, SetDrawingApplyMutation } from './commands/mutations/set-drawing-apply.mutation';
26
+ export type { ISetDrawingApplyMutationParams } from './commands/mutations/set-drawing-apply.mutation';
22
27
  export { ClearSheetDrawingTransformerOperation } from './commands/operations/clear-drawing-transformer.operation';
23
28
  export type { IUniverSheetsDrawingConfig } from './config/config';
24
29
  export { SHEET_DRAWING_PLUGIN } from './controllers/sheet-drawing.controller';
25
30
  export { UniverSheetsDrawingPlugin } from './plugin';
26
31
  export { ISheetDrawingService, SheetDrawingAnchorType } from './services/sheet-drawing.service';
27
- export type { IFloatDomData, ISheetDrawing, ISheetDrawingPosition, ISheetFloatDom, ISheetImage, ISheetShape } from './services/sheet-drawing.service';
32
+ export type { IFloatDomData, ISheetDrawing, ISheetDrawingPosition, ISheetFloatDom, ISheetImage, ISheetShape, } from './services/sheet-drawing.service';
package/lib/umd/facade.js CHANGED
@@ -1 +1 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(require("@univerjs/core"),require("@univerjs/core/facade"),require("@univerjs/drawing"),require("@univerjs/sheets"),require("@univerjs/sheets-drawing"),require("@univerjs/sheets/facade")):typeof define==`function`&&define.amd?define([`@univerjs/core`,`@univerjs/core/facade`,`@univerjs/drawing`,`@univerjs/sheets`,`@univerjs/sheets-drawing`,`@univerjs/sheets/facade`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverCore,e.UniverCoreFacade,e.UniverDrawing,e.UniverSheets,e.UniverSheetsDrawing,e.UniverSheetsFacade))})(this,function(e,t,n,r,i,a){function o(e){"@babel/helpers - typeof";return o=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},o(e)}function s(e,t){if(o(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(o(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function c(e){var t=s(e,`string`);return o(t)==`symbol`?t:t+``}function l(e,t,n){return(t=c(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){return function(n,r){t(n,r,e)}}function d(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}function f(e,t){let{from:n,to:i,flipY:a=!1,flipX:o=!1,angle:s=0,skewX:c=0,skewY:l=0}=e.sheetTransform,{column:u,columnOffset:d,row:f,rowOffset:p}=n,{width:m,height:h}=(0,r.convertPositionSheetOverGridToAbsolute)(e.unitId,e.subUnitId,{from:n,to:i},t);return{...e,column:u,columnOffset:d,row:f,rowOffset:p,width:m,height:h,flipY:a,flipX:o,angle:s,skewX:c,skewY:l}}function p(e,t){let n=t.ensureSkeleton(e.unitId,e.subUnitId);if(!n)throw Error(`Skeleton for unitId ${e.unitId} and subUnitId ${e.subUnitId} not found`);let{column:a,columnOffset:o,row:s,rowOffset:c,flipY:l=!1,flipX:u=!1,angle:d=0,skewX:f=0,skewY:p=0,width:m,height:h}=e,{sheetTransform:g,transform:_}=(0,r.convertPositionCellToSheetOverGrid)(e.unitId,e.subUnitId,{column:a,columnOffset:o,row:s,rowOffset:c},m,h,n);return{...e,sheetTransform:{...g,flipY:l,flipX:u,angle:d,skewX:f,skewY:p},transform:{..._,flipY:l,flipX:u,angle:d,skewX:f,skewY:p},axisAlignSheetTransform:(0,i.transformToAxisAlignPosition)(_,n)}}let m=class{constructor(t,n,r){this._injector=r,l(this,`_image`,void 0),this._image={drawingId:(0,e.generateRandomId)(6),drawingType:e.DrawingTypeEnum.DRAWING_IMAGE,imageSourceType:e.ImageSourceType.BASE64,source:``,unitId:t,subUnitId:n,column:0,columnOffset:0,row:0,rowOffset:0,width:0,height:0,axisAlignSheetTransform:{from:{column:0,columnOffset:0,row:0,rowOffset:0},to:{column:0,columnOffset:0,row:0,rowOffset:0}}}}setImage(e){let{unitId:t,subUnitId:n}=e,i=this._injector.get(r.SheetSkeletonService).getSkeleton(t,n);if(!i)throw Error(`Skeleton for unitId ${t} and subUnitId ${n} not found`);return e.sheetTransform==null&&(e.sheetTransform={from:{column:0,columnOffset:0,row:0,rowOffset:0},to:{column:0,columnOffset:0,row:0,rowOffset:0}}),e.axisAlignSheetTransform==null&&(e.axisAlignSheetTransform={from:{column:0,columnOffset:0,row:0,rowOffset:0},to:{column:0,columnOffset:0,row:0,rowOffset:0}}),this._image=f(e,i),this}setSource(t,n){let r=n==null?e.ImageSourceType.URL:n;return this._image.source=t,this._image.imageSourceType=r,this}getSource(){return this._image.source}getSourceType(){return this._image.imageSourceType}setColumn(e){return this._image.column=e,this}setRow(e){return this._image.row=e,this}setColumnOffset(e){return this._image.columnOffset=e,this}setRowOffset(e){return this._image.rowOffset=e,this}setWidth(e){return this._image.width=e,this}setHeight(e){return this._image.height=e,this}setAnchorType(e){return this._image.anchorType=e,this}setCropTop(e){return this._initializeSrcRect(),this._image.srcRect.top=e,this}setCropLeft(e){return this._initializeSrcRect(),this._image.srcRect.left=e,this}setCropBottom(e){return this._initializeSrcRect(),this._image.srcRect.bottom=e,this}setCropRight(e){return this._initializeSrcRect(),this._image.srcRect.right=e,this}_initializeSrcRect(){this._image.srcRect==null&&(this._image.srcRect={top:0,left:0,bottom:0,right:0})}setRotate(e){return this._image.angle=e,this}setUnitId(e){return this._image.unitId=e,this}setSubUnitId(e){return this._image.subUnitId=e,this}async buildAsync(){let e=this._injector.get(r.SheetSkeletonService);if(this._image.width===0||this._image.height===0){let e=await(0,n.getImageSize)(this._image.source),t=e.width,r=e.height;this._image.width===0&&(this._image.width=t),this._image.height===0&&(this._image.height=r)}return p(this._image,e)}};m=d([u(2,(0,e.Inject)(e.Injector))],m);let h=class extends t.FBase{constructor(e,t,n){super(),this._image=e,this._commandService=t,this._injector=n}getId(){return this._image.drawingId}getType(){return this._image.drawingType}remove(){return this._commandService.syncExecuteCommand(i.RemoveSheetDrawingCommand.id,{unitId:this._image.unitId,drawings:[this._image]})}toBuilder(){let e=this._injector.createInstance(m,this._image.unitId,this._image.subUnitId);return e.setImage(this._image),e}setSource(t,n){let r=n==null?e.ImageSourceType.URL:n;return this._image.source=t,this._image.imageSourceType=r,this._commandService.syncExecuteCommand(i.SetSheetDrawingCommand.id,{unitId:this._image.unitId,drawings:[this._image]})}async setPositionAsync(e,t,n,r){let a=this.toBuilder();a.setColumn(t),a.setRow(e),n!=null&&a.setRowOffset(n),r!=null&&a.setColumnOffset(r);let o=await a.buildAsync();return this._commandService.syncExecuteCommand(i.SetSheetDrawingCommand.id,{unitId:this._image.unitId,drawings:[o]})}async setSizeAsync(e,t){let n=this.toBuilder();n.setWidth(e),n.setHeight(t);let r=await n.buildAsync();return this._commandService.syncExecuteCommand(i.SetSheetDrawingCommand.id,{unitId:this._image.unitId,drawings:[r]})}setCrop(e,t,n,r){return this._image.srcRect==null&&(this._image.srcRect={top:0,left:0,bottom:0,right:0}),e!=null&&(this._image.srcRect.top=e),t!=null&&(this._image.srcRect.left=t),n!=null&&(this._image.srcRect.bottom=n),r!=null&&(this._image.srcRect.right=r),this._commandService.syncExecuteCommand(i.SetSheetDrawingCommand.id,{unitId:this._image.unitId,drawings:[this._image]})}setRotate(e){if(this._image.sheetTransform.angle=e,this._image.transform&&(this._image.transform.angle=e),this._image.transform){let e=this._injector.get(r.SheetSkeletonService).getSkeleton(this._image.unitId,this._image.subUnitId);if(!e)throw Error(`Skeleton for unitId ${this._image.unitId} and subUnitId ${this._image.subUnitId} not found`);this._image.axisAlignSheetTransform&&(this._image.axisAlignSheetTransform=(0,i.transformToAxisAlignPosition)(this._image.transform,e))}return this._commandService.syncExecuteCommand(i.SetSheetDrawingCommand.id,{unitId:this._image.unitId,drawings:[this._image]})}setForward(){return this._commandService.syncExecuteCommand(i.SetDrawingArrangeCommand.id,{unitId:this._image.unitId,subUnitId:this._image.subUnitId,drawingIds:[this._image.drawingId],arrangeType:e.ArrangeTypeEnum.forward})}setBackward(){return this._commandService.syncExecuteCommand(i.SetDrawingArrangeCommand.id,{unitId:this._image.unitId,subUnitId:this._image.subUnitId,drawingIds:[this._image.drawingId],arrangeType:e.ArrangeTypeEnum.backward})}setBack(){return this._commandService.syncExecuteCommand(i.SetDrawingArrangeCommand.id,{unitId:this._image.unitId,subUnitId:this._image.subUnitId,drawingIds:[this._image.drawingId],arrangeType:e.ArrangeTypeEnum.back})}setFront(){return this._commandService.syncExecuteCommand(i.SetDrawingArrangeCommand.id,{unitId:this._image.unitId,subUnitId:this._image.subUnitId,drawingIds:[this._image.drawingId],arrangeType:e.ArrangeTypeEnum.front})}};h=d([u(1,e.ICommandService),u(2,(0,e.Inject)(e.Injector))],h);var g=class extends a.FWorksheet{async insertImage(t,n,r,a,o){let s=this.newOverGridImage();if(typeof t==`string`)s.setSource(t);else{let n=await t.getBlob().getDataAsString();s.setSource(n,e.ImageSourceType.BASE64)}n===void 0?s.setColumn(0):s.setColumn(n),r===void 0?s.setRow(0):s.setRow(r),a===void 0?s.setColumnOffset(0):s.setColumnOffset(a),o===void 0?s.setRowOffset(0):s.setRowOffset(o);let c=await s.buildAsync();return this._commandService.syncExecuteCommand(i.InsertSheetDrawingCommand.id,{unitId:this._fWorkbook.getId(),drawings:[c]})}insertImages(e){let t=e.map(e=>(e.unitId=this._fWorkbook.getId(),e.subUnitId=this.getSheetId(),e));return this._commandService.syncExecuteCommand(i.InsertSheetDrawingCommand.id,{unitId:this._fWorkbook.getId(),drawings:t}),this}deleteImages(e){let t=e.map(e=>({unitId:this._fWorkbook.getId(),drawingId:e.getId(),subUnitId:this.getSheetId(),drawingType:e.getType()}));return this._commandService.syncExecuteCommand(i.RemoveSheetDrawingCommand.id,{unitId:this._fWorkbook.getId(),drawings:t}),this}getImages(){let t=this._injector.get(i.ISheetDrawingService).getDrawingData(this._fWorkbook.getId(),this.getSheetId()),n=[];for(let r in t){let i=t[r];i.drawingType===e.DrawingTypeEnum.DRAWING_IMAGE&&n.push(this._injector.createInstance(h,i))}return n}getImageById(t){let n=this._injector.get(i.ISheetDrawingService).getDrawingByParam({unitId:this._fWorkbook.getId(),subUnitId:this.getSheetId(),drawingId:t});return n&&n.drawingType===e.DrawingTypeEnum.DRAWING_IMAGE?this._injector.createInstance(h,n):null}getActiveImages(){let e=this._injector.get(i.ISheetDrawingService).getFocusDrawings(),t=[];for(let n in e){let r=e[n];t.push(this._injector.createInstance(h,r))}return t}updateImages(e){return this._commandService.syncExecuteCommand(i.SetSheetDrawingCommand.id,{unitId:this._fWorkbook.getId(),drawings:e}),this}newOverGridImage(){let e=this._fWorkbook.getId(),t=this.getSheetId();return this._injector.createInstance(m,e,t)}};a.FWorksheet.extend(g);var _=class extends t.FEnum{get DrawingType(){return e.DrawingTypeEnum}get ImageSourceType(){return e.ImageSourceType}get SheetDrawingAnchorType(){return i.SheetDrawingAnchorType}};t.FEnum.extend(_);var v=class extends t.FEventName{get BeforeFloatDomAdd(){return`BeforeFloatDomAdd`}get FloatDomAdded(){return`FloatDomAdded`}get BeforeFloatDomUpdate(){return`BeforeFloatDomUpdate`}get FloatDomUpdated(){return`FloatDomUpdated`}get BeforeFloatDomDelete(){return`BeforeFloatDomDelete`}get FloatDomDeleted(){return`FloatDomDeleted`}get BeforeOverGridImageChange(){return`BeforeOverGridImageChange`}get OverGridImageChanged(){return`OverGridImageChanged`}get BeforeOverGridImageInsert(){return`BeforeOverGridImageInsert`}get OverGridImageInserted(){return`OverGridImageInserted`}get BeforeOverGridImageRemove(){return`BeforeOverGridImageRemove`}get OverGridImageRemoved(){return`OverGridImageRemoved`}get BeforeOverGridImageSelect(){return`BeforeOverGridImageSelect`}get OverGridImageSelected(){return`OverGridImageSelected`}};t.FEventName.extend(v);var y=class extends t.FUniver{_initialize(t){let r=t.get(e.ICommandService);this.disposeWithMe(this.registerEventHandler(this.Event.BeforeOverGridImageInsert,()=>r.beforeCommandExecuted(t=>{if(t.id!==i.InsertSheetDrawingCommand.id)return;let n=t.params,r=this.getActiveWorkbook();if(r==null||n==null)return;let{drawings:a}=n,o={workbook:r,insertImageParams:a};if(this.fireEvent(this.Event.BeforeOverGridImageInsert,o),o.cancel)throw new e.CanceledError}))),this.disposeWithMe(this.registerEventHandler(this.Event.BeforeOverGridImageRemove,()=>r.beforeCommandExecuted(r=>{if(r.id!==i.RemoveSheetDrawingCommand.id)return;let a=r.params,o=this.getActiveWorkbook();if(o==null||a==null)return;let s=t.get(n.IDrawingManagerService),{drawings:c}=a,l=c.map(e=>s.getDrawingByParam(e)),u={workbook:o,images:this._createFOverGridImage(l)};if(this.fireEvent(this.Event.BeforeOverGridImageRemove,u),u.cancel)throw new e.CanceledError}))),this.disposeWithMe(this.registerEventHandler(this.Event.BeforeOverGridImageChange,()=>r.beforeCommandExecuted(r=>{if(r.id!==i.SetSheetDrawingCommand.id)return;let a=r.params,o=this.getActiveWorkbook();if(o==null||a==null)return;let{drawings:s}=a,c=t.get(n.IDrawingManagerService),l=[];s.forEach(e=>{let t=c.getDrawingByParam(e);t!=null&&l.push({changeParam:e,image:this._injector.createInstance(h,t)})});let u={workbook:o,images:l};if(this.fireEvent(this.Event.BeforeOverGridImageChange,u),u.cancel)throw c.updateNotification(s),new e.CanceledError}))),this.disposeWithMe(this.registerEventHandler(this.Event.BeforeOverGridImageSelect,()=>r.beforeCommandExecuted(r=>{if(r.id!==n.SetDrawingSelectedOperation.id)return;let i=r.params,a=this.getActiveWorkbook();if(a==null)return;let o=t.get(n.IDrawingManagerService),s=o.getFocusDrawings(),c=i.map(e=>o.getDrawingByParam(e)),l={workbook:a,selectedImages:this._createFOverGridImage(c),oldSelectedImages:this._createFOverGridImage(s)};if(this.fireEvent(this.Event.BeforeOverGridImageSelect,l),l.cancel)throw new e.CanceledError}))),this.disposeWithMe(this.registerEventHandler(this.Event.OverGridImageInserted,()=>r.onCommandExecuted(e=>{if(e.id!==i.InsertSheetDrawingCommand.id)return;let t=e.params,n=this.getActiveWorkbook();if(n==null||t==null)return;let{drawings:r}=t,a={workbook:n,images:this._createFOverGridImage(r)};this.fireEvent(this.Event.OverGridImageInserted,a)}))),this.disposeWithMe(this.registerEventHandler(this.Event.OverGridImageRemoved,()=>r.onCommandExecuted(e=>{if(e.id!==i.RemoveSheetDrawingCommand.id)return;let t=e.params,n=this.getActiveWorkbook();if(n==null||t==null)return;let{drawings:r}=t,a={workbook:n,removeImageParams:r};this.fireEvent(this.Event.OverGridImageRemoved,a)}))),this.disposeWithMe(this.registerEventHandler(this.Event.OverGridImageChanged,()=>r.onCommandExecuted(e=>{if(e.id!==i.SetSheetDrawingCommand.id)return;let r=e.params,a=this.getActiveWorkbook();if(a==null||r==null)return;let{drawings:o}=r,s=t.get(n.IDrawingManagerService),c={workbook:a,images:o.map(e=>this._injector.createInstance(h,s.getDrawingByParam(e)))};this.fireEvent(this.Event.OverGridImageChanged,c)}))),this.disposeWithMe(this.registerEventHandler(this.Event.OverGridImageSelected,()=>r.onCommandExecuted(e=>{if(e.id!==n.SetDrawingSelectedOperation.id)return;let r=e.params,i=this.getActiveWorkbook();if(i==null)return;let a=t.get(n.IDrawingManagerService),o=r.map(e=>a.getDrawingByParam(e)),s={workbook:i,selectedImages:this._createFOverGridImage(o)};this.fireEvent(this.Event.OverGridImageSelected,s)})))}_createFOverGridImage(e){return e.map(e=>this._injector.createInstance(h,e))}};t.FUniver.extend(y)});
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(require("@univerjs/core"),require("@univerjs/core/facade"),require("@univerjs/drawing"),require("@univerjs/sheets"),require("@univerjs/sheets-drawing"),require("@univerjs/engine-render"),require("@univerjs/sheets/facade")):typeof define==`function`&&define.amd?define([`@univerjs/core`,`@univerjs/core/facade`,`@univerjs/drawing`,`@univerjs/sheets`,`@univerjs/sheets-drawing`,`@univerjs/engine-render`,`@univerjs/sheets/facade`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverCore,e.UniverCoreFacade,e.UniverDrawing,e.UniverSheets,e.UniverSheetsDrawing,e.UniverEngineRender,e.UniverSheetsFacade))})(this,function(e,t,n,r,i,a,o){function s(e){"@babel/helpers - typeof";return s=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},s(e)}function c(e,t){if(s(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(s(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function l(e){var t=c(e,`string`);return s(t)==`symbol`?t:t+``}function u(e,t,n){return(t=l(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e,t){return function(n,r){t(n,r,e)}}function f(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}function p(e,t){let{from:n,to:i,flipY:a=!1,flipX:o=!1,angle:s=0,skewX:c=0,skewY:l=0}=e.sheetTransform,{column:u,columnOffset:d,row:f,rowOffset:p}=n,{width:m,height:h}=(0,r.convertPositionSheetOverGridToAbsolute)(e.unitId,e.subUnitId,{from:n,to:i},t);return{...e,column:u,columnOffset:d,row:f,rowOffset:p,width:m,height:h,flipY:a,flipX:o,angle:s,skewX:c,skewY:l}}function m(e,t){let n=t.ensureSkeleton(e.unitId,e.subUnitId);if(!n)throw Error(`Skeleton for unitId ${e.unitId} and subUnitId ${e.subUnitId} not found`);let{column:a,columnOffset:o,row:s,rowOffset:c,flipY:l=!1,flipX:u=!1,angle:d=0,skewX:f=0,skewY:p=0,width:m,height:h}=e,{sheetTransform:g,transform:_}=(0,r.convertPositionCellToSheetOverGrid)(e.unitId,e.subUnitId,{column:a,columnOffset:o,row:s,rowOffset:c},m,h,n);return{...e,sheetTransform:{...g,flipY:l,flipX:u,angle:d,skewX:f,skewY:p},transform:{..._,flipY:l,flipX:u,angle:d,skewX:f,skewY:p},axisAlignSheetTransform:(0,i.transformToAxisAlignPosition)(_,n)}}let h=class{constructor(t,n,r){this._injector=r,u(this,`_image`,void 0),this._image={drawingId:(0,e.generateRandomId)(6),drawingType:e.DrawingTypeEnum.DRAWING_IMAGE,imageSourceType:e.ImageSourceType.BASE64,source:``,unitId:t,subUnitId:n,column:0,columnOffset:0,row:0,rowOffset:0,width:0,height:0,axisAlignSheetTransform:{from:{column:0,columnOffset:0,row:0,rowOffset:0},to:{column:0,columnOffset:0,row:0,rowOffset:0}}}}setImage(e){let{unitId:t,subUnitId:n}=e,i=this._injector.get(r.SheetSkeletonService).getSkeleton(t,n);if(!i)throw Error(`Skeleton for unitId ${t} and subUnitId ${n} not found`);return e.sheetTransform==null&&(e.sheetTransform={from:{column:0,columnOffset:0,row:0,rowOffset:0},to:{column:0,columnOffset:0,row:0,rowOffset:0}}),e.axisAlignSheetTransform==null&&(e.axisAlignSheetTransform={from:{column:0,columnOffset:0,row:0,rowOffset:0},to:{column:0,columnOffset:0,row:0,rowOffset:0}}),this._image=p(e,i),this}setSource(t,n){let r=n==null?e.ImageSourceType.URL:n;return this._image.source=t,this._image.imageSourceType=r,this}getSource(){return this._image.source}getSourceType(){return this._image.imageSourceType}setColumn(e){return this._image.column=e,this}setRow(e){return this._image.row=e,this}setColumnOffset(e){return this._image.columnOffset=e,this}setRowOffset(e){return this._image.rowOffset=e,this}setWidth(e){return this._image.width=e,this}setHeight(e){return this._image.height=e,this}setAnchorType(e){return this._image.anchorType=e,this}setCropTop(e){return this._initializeSrcRect(),this._image.srcRect.top=e,this}setCropLeft(e){return this._initializeSrcRect(),this._image.srcRect.left=e,this}setCropBottom(e){return this._initializeSrcRect(),this._image.srcRect.bottom=e,this}setCropRight(e){return this._initializeSrcRect(),this._image.srcRect.right=e,this}_initializeSrcRect(){this._image.srcRect==null&&(this._image.srcRect={top:0,left:0,bottom:0,right:0})}setRotate(e){return this._image.angle=e,this}setUnitId(e){return this._image.unitId=e,this}setSubUnitId(e){return this._image.subUnitId=e,this}async buildAsync(){let e=this._injector.get(r.SheetSkeletonService);if(this._image.width===0||this._image.height===0){let e=await(0,n.getImageSize)(this._image.source),t=e.width,r=e.height;this._image.width===0&&(this._image.width=t),this._image.height===0&&(this._image.height=r)}return m(this._image,e)}};h=f([d(2,(0,e.Inject)(e.Injector))],h);let g=class extends t.FBase{constructor(e,t,n){super(),this._image=e,this._commandService=t,this._injector=n}getId(){return this._image.drawingId}getType(){return this._image.drawingType}remove(){return this._commandService.syncExecuteCommand(i.RemoveSheetDrawingCommand.id,{unitId:this._image.unitId,drawings:[this._image]})}toBuilder(){let e=this._injector.createInstance(h,this._image.unitId,this._image.subUnitId);return e.setImage(this._image),e}setSource(t,n){let r=n==null?e.ImageSourceType.URL:n;return this._image.source=t,this._image.imageSourceType=r,this._commandService.syncExecuteCommand(i.SetSheetDrawingCommand.id,{unitId:this._image.unitId,drawings:[this._image]})}async setPositionAsync(e,t,n,r){let a=this.toBuilder();a.setColumn(t),a.setRow(e),n!=null&&a.setRowOffset(n),r!=null&&a.setColumnOffset(r);let o=await a.buildAsync();return this._commandService.syncExecuteCommand(i.SetSheetDrawingCommand.id,{unitId:this._image.unitId,drawings:[o]})}async setSizeAsync(e,t){let n=this.toBuilder();n.setWidth(e),n.setHeight(t);let r=await n.buildAsync();return this._commandService.syncExecuteCommand(i.SetSheetDrawingCommand.id,{unitId:this._image.unitId,drawings:[r]})}setCrop(e,t,n,r){return this._image.srcRect==null&&(this._image.srcRect={top:0,left:0,bottom:0,right:0}),e!=null&&(this._image.srcRect.top=e),t!=null&&(this._image.srcRect.left=t),n!=null&&(this._image.srcRect.bottom=n),r!=null&&(this._image.srcRect.right=r),this._commandService.syncExecuteCommand(i.SetSheetDrawingCommand.id,{unitId:this._image.unitId,drawings:[this._image]})}setRotate(e){if(this._image.sheetTransform.angle=e,this._image.transform&&(this._image.transform.angle=e),this._image.transform){let e=this._injector.get(r.SheetSkeletonService).getSkeleton(this._image.unitId,this._image.subUnitId);if(!e)throw Error(`Skeleton for unitId ${this._image.unitId} and subUnitId ${this._image.subUnitId} not found`);this._image.axisAlignSheetTransform&&(this._image.axisAlignSheetTransform=(0,i.transformToAxisAlignPosition)(this._image.transform,e))}return this._commandService.syncExecuteCommand(i.SetSheetDrawingCommand.id,{unitId:this._image.unitId,drawings:[this._image]})}setForward(){return this._commandService.syncExecuteCommand(i.SetDrawingArrangeCommand.id,{unitId:this._image.unitId,subUnitId:this._image.subUnitId,drawingIds:[this._image.drawingId],arrangeType:e.ArrangeTypeEnum.forward})}setBackward(){return this._commandService.syncExecuteCommand(i.SetDrawingArrangeCommand.id,{unitId:this._image.unitId,subUnitId:this._image.subUnitId,drawingIds:[this._image.drawingId],arrangeType:e.ArrangeTypeEnum.backward})}setBack(){return this._commandService.syncExecuteCommand(i.SetDrawingArrangeCommand.id,{unitId:this._image.unitId,subUnitId:this._image.subUnitId,drawingIds:[this._image.drawingId],arrangeType:e.ArrangeTypeEnum.back})}setFront(){return this._commandService.syncExecuteCommand(i.SetDrawingArrangeCommand.id,{unitId:this._image.unitId,subUnitId:this._image.subUnitId,drawingIds:[this._image.drawingId],arrangeType:e.ArrangeTypeEnum.front})}};g=f([d(1,e.ICommandService),d(2,(0,e.Inject)(e.Injector))],g);let _=new Set([e.DrawingTypeEnum.DRAWING_IMAGE,e.DrawingTypeEnum.DRAWING_SHAPE,e.DrawingTypeEnum.DRAWING_GROUP]);var v=class extends o.FWorksheet{async insertImage(t,n,r,a,o){let s=this.newOverGridImage();if(typeof t==`string`)s.setSource(t);else{let n=await t.getBlob().getDataAsString();s.setSource(n,e.ImageSourceType.BASE64)}n===void 0?s.setColumn(0):s.setColumn(n),r===void 0?s.setRow(0):s.setRow(r),a===void 0?s.setColumnOffset(0):s.setColumnOffset(a),o===void 0?s.setRowOffset(0):s.setRowOffset(o);let c=await s.buildAsync();return this._commandService.syncExecuteCommand(i.InsertSheetDrawingCommand.id,{unitId:this._fWorkbook.getId(),drawings:[c]})}insertImages(e){let t=e.map(e=>(e.unitId=this._fWorkbook.getId(),e.subUnitId=this.getSheetId(),e));return this._commandService.syncExecuteCommand(i.InsertSheetDrawingCommand.id,{unitId:this._fWorkbook.getId(),drawings:t}),this}deleteImages(e){let t=e.map(e=>({unitId:this._fWorkbook.getId(),drawingId:e.getId(),subUnitId:this.getSheetId(),drawingType:e.getType()}));return this._commandService.syncExecuteCommand(i.RemoveSheetDrawingCommand.id,{unitId:this._fWorkbook.getId(),drawings:t}),this}getImages(){let t=this._injector.get(i.ISheetDrawingService).getDrawingData(this._fWorkbook.getId(),this.getSheetId()),n=[];for(let r in t){let i=t[r];i.drawingType===e.DrawingTypeEnum.DRAWING_IMAGE&&n.push(this._injector.createInstance(g,i))}return n}getImageById(t){let n=this._injector.get(i.ISheetDrawingService).getDrawingByParam({unitId:this._fWorkbook.getId(),subUnitId:this.getSheetId(),drawingId:t});return n&&n.drawingType===e.DrawingTypeEnum.DRAWING_IMAGE?this._injector.createInstance(g,n):null}getActiveImages(){let e=this._injector.get(i.ISheetDrawingService).getFocusDrawings(),t=[];for(let n in e){let r=e[n];t.push(this._injector.createInstance(g,r))}return t}updateImages(e){return this._commandService.syncExecuteCommand(i.SetSheetDrawingCommand.id,{unitId:this._fWorkbook.getId(),drawings:e}),this}newOverGridImage(){let e=this._fWorkbook.getId(),t=this.getSheetId();return this._injector.createInstance(h,e,t)}groupDrawings(t,n=(0,e.generateRandomId)(10)){let r=Array.from(new Set(t));if(r.length<2)return null;let o=this._fWorkbook.getId(),s=this.getSheetId(),c=this._injector.get(i.ISheetDrawingService);if(c.getDrawingByParam({unitId:o,subUnitId:s,drawingId:n}))return null;let l=r.map(e=>c.getDrawingByParam({unitId:o,subUnitId:s,drawingId:e}));if(l.some(e=>!e)||l.some(e=>!_.has(e.drawingType)))return null;let u=l,d=(0,a.getGroupState)(0,0,u.map(e=>e.transform||{})),f={unitId:o,subUnitId:s,drawingId:n,drawingType:e.DrawingTypeEnum.DRAWING_GROUP,transform:d,groupBaseBound:{left:d.left,top:d.top,width:d.width,height:d.height}},p=u.map(e=>({...e,groupId:n}));return this._applyGroupDrawingOperation([{parent:f,children:p}],i.DrawingApplyType.GROUP)?n:null}ungroupDrawings(t){let n=this._fWorkbook.getId(),r=this.getSheetId(),o=this._injector.get(i.ISheetDrawingService),s=[];for(let i of t){let t=o.getDrawingByParam({unitId:n,subUnitId:r,drawingId:i});if(!t||t.drawingType!==e.DrawingTypeEnum.DRAWING_GROUP)continue;let c=t.transform||{width:0,height:0},l=o.getDrawingsByGroup({unitId:n,subUnitId:r,drawingId:i}).map(e=>{let n=(0,a.transformObjectOutOfGroup)(e.transform||{},c,c.width||0,c.height||0,t.groupBaseBound);return{...e,transform:{...e.transform,...n},groupId:void 0}});l.length>0&&s.push({parent:t,children:l})}return this._applyGroupDrawingOperation(s,i.DrawingApplyType.UNGROUP)}getDrawingGroupChildren(e,t=!1){let n=this._fWorkbook.getId(),r=this.getSheetId(),a=this._injector.get(i.ISheetDrawingService);if(!t)return a.getDrawingsByGroup({unitId:n,subUnitId:r,drawingId:e});let o=a.getDrawingsByGroupNested({unitId:n,subUnitId:r,drawingId:e});return o?[...o.flatChildren||[],...o.groups.filter(t=>t.drawingId!==e)]:[]}getDrawingParentGroup(t){let n=this._fWorkbook.getId(),r=this.getSheetId(),a=this._injector.get(i.ISheetDrawingService),o=a.getDrawingByParam({unitId:n,subUnitId:r,drawingId:t});if(!(o!=null&&o.groupId))return null;let s=a.getDrawingByParam({unitId:n,subUnitId:r,drawingId:o.groupId});return!s||s.drawingType!==e.DrawingTypeEnum.DRAWING_GROUP?null:s}isDrawingGrouped(e){return this.getDrawingParentGroup(e)!==null}_applyGroupDrawingOperation(t,n){if(t.length===0)return!1;let r=this._injector.get(i.ISheetDrawingService),a=this._commandService,o=this._injector.get(e.IUndoRedoService),{unitId:s,subUnitId:c,undo:l,redo:u,objects:d}=n===i.DrawingApplyType.GROUP?r.getGroupDrawingOp(t):r.getUngroupDrawingOp(t);if(a.syncExecuteCommand(i.SetDrawingApplyMutation.id,{op:u,unitId:s,subUnitId:c,objects:d,type:n})){let e=n===i.DrawingApplyType.GROUP?i.DrawingApplyType.UNGROUP:i.DrawingApplyType.GROUP;return o.pushUndoRedo({unitID:s,undoMutations:[{id:i.SetDrawingApplyMutation.id,params:{op:l,unitId:s,subUnitId:c,objects:this._invertGroupOperationObjects(d,n),type:e}}],redoMutations:[{id:i.SetDrawingApplyMutation.id,params:{op:u,unitId:s,subUnitId:c,objects:d,type:n}}]}),!0}return!1}_invertGroupOperationObjects(e,t){return t===i.DrawingApplyType.GROUP?e.map(e=>{let{parent:t,children:n}=e,r=t.transform||{width:0,height:0};return{parent:{...t,transform:{left:0,top:0}},children:n.map(e=>({...e,transform:(0,a.transformObjectOutOfGroup)(e.transform||{},r,r.width||0,r.height||0,t.groupBaseBound),groupId:void 0}))}}):e.map(e=>{let{parent:t,children:n}=e,r=(0,a.getGroupState)(0,0,n.map(e=>e.transform||{}));return{parent:{...t,transform:r},children:n.map(e=>({...e,groupId:t.drawingId}))}})}};o.FWorksheet.extend(v);var y=class extends t.FEnum{get DrawingType(){return e.DrawingTypeEnum}get ImageSourceType(){return e.ImageSourceType}get SheetDrawingAnchorType(){return i.SheetDrawingAnchorType}};t.FEnum.extend(y);var b=class extends t.FEventName{get BeforeFloatDomAdd(){return`BeforeFloatDomAdd`}get FloatDomAdded(){return`FloatDomAdded`}get BeforeFloatDomUpdate(){return`BeforeFloatDomUpdate`}get FloatDomUpdated(){return`FloatDomUpdated`}get BeforeFloatDomDelete(){return`BeforeFloatDomDelete`}get FloatDomDeleted(){return`FloatDomDeleted`}get BeforeOverGridImageChange(){return`BeforeOverGridImageChange`}get OverGridImageChanged(){return`OverGridImageChanged`}get BeforeOverGridImageInsert(){return`BeforeOverGridImageInsert`}get OverGridImageInserted(){return`OverGridImageInserted`}get BeforeOverGridImageRemove(){return`BeforeOverGridImageRemove`}get OverGridImageRemoved(){return`OverGridImageRemoved`}get BeforeOverGridImageSelect(){return`BeforeOverGridImageSelect`}get OverGridImageSelected(){return`OverGridImageSelected`}};t.FEventName.extend(b);var x=class extends t.FUniver{_initialize(t){let r=t.get(e.ICommandService);this.disposeWithMe(this.registerEventHandler(this.Event.BeforeOverGridImageInsert,()=>r.beforeCommandExecuted(t=>{if(t.id!==i.InsertSheetDrawingCommand.id)return;let n=t.params,r=this.getActiveWorkbook();if(r==null||n==null)return;let{drawings:a}=n,o={workbook:r,insertImageParams:a};if(this.fireEvent(this.Event.BeforeOverGridImageInsert,o),o.cancel)throw new e.CanceledError}))),this.disposeWithMe(this.registerEventHandler(this.Event.BeforeOverGridImageRemove,()=>r.beforeCommandExecuted(r=>{if(r.id!==i.RemoveSheetDrawingCommand.id)return;let a=r.params,o=this.getActiveWorkbook();if(o==null||a==null)return;let s=t.get(n.IDrawingManagerService),{drawings:c}=a,l=c.map(e=>s.getDrawingByParam(e)),u={workbook:o,images:this._createFOverGridImage(l)};if(this.fireEvent(this.Event.BeforeOverGridImageRemove,u),u.cancel)throw new e.CanceledError}))),this.disposeWithMe(this.registerEventHandler(this.Event.BeforeOverGridImageChange,()=>r.beforeCommandExecuted(r=>{if(r.id!==i.SetSheetDrawingCommand.id)return;let a=r.params,o=this.getActiveWorkbook();if(o==null||a==null)return;let{drawings:s}=a,c=t.get(n.IDrawingManagerService),l=[];s.forEach(e=>{let t=c.getDrawingByParam(e);t!=null&&l.push({changeParam:e,image:this._injector.createInstance(g,t)})});let u={workbook:o,images:l};if(this.fireEvent(this.Event.BeforeOverGridImageChange,u),u.cancel)throw c.updateNotification(s),new e.CanceledError}))),this.disposeWithMe(this.registerEventHandler(this.Event.BeforeOverGridImageSelect,()=>r.beforeCommandExecuted(r=>{if(r.id!==n.SetDrawingSelectedOperation.id)return;let i=r.params,a=this.getActiveWorkbook();if(a==null)return;let o=t.get(n.IDrawingManagerService),s=o.getFocusDrawings(),c=i.map(e=>o.getDrawingByParam(e)),l={workbook:a,selectedImages:this._createFOverGridImage(c),oldSelectedImages:this._createFOverGridImage(s)};if(this.fireEvent(this.Event.BeforeOverGridImageSelect,l),l.cancel)throw new e.CanceledError}))),this.disposeWithMe(this.registerEventHandler(this.Event.OverGridImageInserted,()=>r.onCommandExecuted(e=>{if(e.id!==i.InsertSheetDrawingCommand.id)return;let t=e.params,n=this.getActiveWorkbook();if(n==null||t==null)return;let{drawings:r}=t,a={workbook:n,images:this._createFOverGridImage(r)};this.fireEvent(this.Event.OverGridImageInserted,a)}))),this.disposeWithMe(this.registerEventHandler(this.Event.OverGridImageRemoved,()=>r.onCommandExecuted(e=>{if(e.id!==i.RemoveSheetDrawingCommand.id)return;let t=e.params,n=this.getActiveWorkbook();if(n==null||t==null)return;let{drawings:r}=t,a={workbook:n,removeImageParams:r};this.fireEvent(this.Event.OverGridImageRemoved,a)}))),this.disposeWithMe(this.registerEventHandler(this.Event.OverGridImageChanged,()=>r.onCommandExecuted(e=>{if(e.id!==i.SetSheetDrawingCommand.id)return;let r=e.params,a=this.getActiveWorkbook();if(a==null||r==null)return;let{drawings:o}=r,s=t.get(n.IDrawingManagerService),c={workbook:a,images:o.map(e=>this._injector.createInstance(g,s.getDrawingByParam(e)))};this.fireEvent(this.Event.OverGridImageChanged,c)}))),this.disposeWithMe(this.registerEventHandler(this.Event.OverGridImageSelected,()=>r.onCommandExecuted(e=>{if(e.id!==n.SetDrawingSelectedOperation.id)return;let r=e.params,i=this.getActiveWorkbook();if(i==null)return;let a=t.get(n.IDrawingManagerService),o=r.map(e=>a.getDrawingByParam(e)),s={workbook:i,selectedImages:this._createFOverGridImage(o)};this.fireEvent(this.Event.OverGridImageSelected,s)})))}_createFOverGridImage(e){return e.map(e=>this._injector.createInstance(g,e))}};t.FUniver.extend(x)});