@univerjs/sheets-drawing 1.0.0-alpha.7 → 1.0.0-beta.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/cjs/facade.js +290 -27
- package/lib/cjs/index.js +260 -55
- package/lib/es/facade.js +291 -28
- package/lib/es/index.js +258 -57
- package/lib/facade.js +291 -28
- package/lib/index.js +258 -57
- package/lib/types/commands/commands/set-sheet-drawing-placement.command.d.ts +26 -0
- package/lib/types/facade/f-over-grid-image.d.ts +130 -4
- package/lib/types/facade/f-worksheet.d.ts +129 -1
- package/lib/types/index.d.ts +4 -0
- package/lib/types/services/sheet-drawing-placement.d.ts +86 -0
- package/lib/types/services/sheet-drawing.service.d.ts +2 -1
- package/lib/umd/facade.js +1 -1
- package/lib/umd/index.js +1 -1
- package/package.json +6 -6
|
@@ -15,18 +15,21 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import type { IRotationSkewFlipTransform, ISize } from '@univerjs/core';
|
|
17
17
|
import type { ICellOverGridPosition } from '@univerjs/sheets';
|
|
18
|
-
import type {
|
|
18
|
+
import type { ISheetDrawingPlacement, ISheetDrawingPlacementInput, ISheetImage } from '@univerjs/sheets-drawing';
|
|
19
19
|
import { DrawingTypeEnum, ICommandService, ImageSourceType, Injector } from '@univerjs/core';
|
|
20
20
|
import { FBase } from '@univerjs/core/facade';
|
|
21
|
+
import { SheetSkeletonService } from '@univerjs/sheets';
|
|
22
|
+
import { ISheetDrawingService, SheetDrawingAnchorType } from '@univerjs/sheets-drawing';
|
|
21
23
|
export interface IFOverGridImage extends Omit<ISheetImage, 'sheetTransform' | 'transform'>, ICellOverGridPosition, IRotationSkewFlipTransform, Required<ISize> {
|
|
22
24
|
}
|
|
23
25
|
/**
|
|
24
26
|
* @hideconstructor
|
|
25
27
|
*/
|
|
26
28
|
export declare class FOverGridImageBuilder {
|
|
27
|
-
|
|
29
|
+
private readonly _sheetSkeletonService;
|
|
28
30
|
private _image;
|
|
29
|
-
|
|
31
|
+
private _placement?;
|
|
32
|
+
constructor(unitId: string, subUnitId: string, _sheetSkeletonService: SheetSkeletonService);
|
|
30
33
|
/**
|
|
31
34
|
* Set the initial image configuration for the image builder.
|
|
32
35
|
* @param {ISheetImage} image - The image configuration
|
|
@@ -285,6 +288,70 @@ export declare class FOverGridImageBuilder {
|
|
|
285
288
|
* ```
|
|
286
289
|
*/
|
|
287
290
|
setAnchorType(anchorType: SheetDrawingAnchorType): FOverGridImageBuilder;
|
|
291
|
+
/**
|
|
292
|
+
* Set an explicit OneCell, TwoCell, or Absolute placement for the image.
|
|
293
|
+
*
|
|
294
|
+
* This placement takes precedence over the individual row, column, size,
|
|
295
|
+
* and anchor type builder fields. Use bounds inference for an existing
|
|
296
|
+
* transform; use exact markers when a caller explicitly chose cells.
|
|
297
|
+
* @param {ISheetDrawingPlacementInput} placement Exact placement or bounds with an explicit anchor type.
|
|
298
|
+
* @returns {FOverGridImageBuilder} This builder.
|
|
299
|
+
* @example
|
|
300
|
+
* ```ts
|
|
301
|
+
* const sheet = univerAPI.getActiveWorkbook().getActiveSheet();
|
|
302
|
+
* const image = await sheet.newOverGridImage()
|
|
303
|
+
* .setSource('https://avatars.githubusercontent.com/u/61444807?s=96&v=4')
|
|
304
|
+
* .setPlacement({
|
|
305
|
+
* kind: univerAPI.Enum.SheetDrawingAnchorType.Position,
|
|
306
|
+
* from: { row: 2, column: 2, rowOffset: 8, columnOffset: 8 },
|
|
307
|
+
* width: 240,
|
|
308
|
+
* height: 120,
|
|
309
|
+
* })
|
|
310
|
+
* .buildAsync();
|
|
311
|
+
* sheet.insertImages([image]);
|
|
312
|
+
* ```
|
|
313
|
+
* @example Infer Position markers from model-space bounds
|
|
314
|
+
* ```ts
|
|
315
|
+
* const sheet = univerAPI.getActiveWorkbook().getActiveSheet();
|
|
316
|
+
* const image = await sheet.newOverGridImage()
|
|
317
|
+
* .setSource('https://avatars.githubusercontent.com/u/61444807?s=96&v=4')
|
|
318
|
+
* .setPlacement({
|
|
319
|
+
* kind: univerAPI.Enum.SheetDrawingAnchorType.Position,
|
|
320
|
+
* bounds: { left: 120, top: 80, width: 240, height: 120 },
|
|
321
|
+
* })
|
|
322
|
+
* .buildAsync();
|
|
323
|
+
* sheet.insertImages([image]);
|
|
324
|
+
* ```
|
|
325
|
+
* @example TwoCell
|
|
326
|
+
* ```ts
|
|
327
|
+
* const sheet = univerAPI.getActiveWorkbook().getActiveSheet();
|
|
328
|
+
* const image = await sheet.newOverGridImage()
|
|
329
|
+
* .setSource('https://avatars.githubusercontent.com/u/61444807?s=96&v=4')
|
|
330
|
+
* .setPlacement({
|
|
331
|
+
* kind: univerAPI.Enum.SheetDrawingAnchorType.Both,
|
|
332
|
+
* from: { row: 2, column: 2, rowOffset: 8, columnOffset: 8 },
|
|
333
|
+
* to: { row: 8, column: 6, rowOffset: 0, columnOffset: 0 },
|
|
334
|
+
* })
|
|
335
|
+
* .buildAsync();
|
|
336
|
+
* sheet.insertImages([image]);
|
|
337
|
+
* ```
|
|
338
|
+
* @example Absolute
|
|
339
|
+
* ```ts
|
|
340
|
+
* const sheet = univerAPI.getActiveWorkbook().getActiveSheet();
|
|
341
|
+
* const image = await sheet.newOverGridImage()
|
|
342
|
+
* .setSource('https://avatars.githubusercontent.com/u/61444807?s=96&v=4')
|
|
343
|
+
* .setPlacement({
|
|
344
|
+
* kind: univerAPI.Enum.SheetDrawingAnchorType.None,
|
|
345
|
+
* left: 640,
|
|
346
|
+
* top: 96,
|
|
347
|
+
* width: 240,
|
|
348
|
+
* height: 120,
|
|
349
|
+
* })
|
|
350
|
+
* .buildAsync();
|
|
351
|
+
* sheet.insertImages([image]);
|
|
352
|
+
* ```
|
|
353
|
+
*/
|
|
354
|
+
setPlacement(placement: ISheetDrawingPlacementInput): FOverGridImageBuilder;
|
|
288
355
|
/**
|
|
289
356
|
* Set the cropping region of the image by defining the top edges, thereby displaying the specific part of the image you want.
|
|
290
357
|
* @param {number} top - The number of pixels to crop from the top of the image
|
|
@@ -402,7 +469,9 @@ export declare class FOverGridImage extends FBase {
|
|
|
402
469
|
private _image;
|
|
403
470
|
protected readonly _commandService: ICommandService;
|
|
404
471
|
protected readonly _injector: Injector;
|
|
405
|
-
|
|
472
|
+
private readonly _sheetDrawingService;
|
|
473
|
+
private readonly _sheetSkeletonService;
|
|
474
|
+
constructor(_image: ISheetImage, _commandService: ICommandService, _injector: Injector, _sheetDrawingService: ISheetDrawingService, _sheetSkeletonService: SheetSkeletonService);
|
|
406
475
|
/**
|
|
407
476
|
* Get the id of the image
|
|
408
477
|
* @returns {string} The id of the image
|
|
@@ -433,6 +502,63 @@ export declare class FOverGridImage extends FBase {
|
|
|
433
502
|
* ```
|
|
434
503
|
*/
|
|
435
504
|
getType(): DrawingTypeEnum;
|
|
505
|
+
/**
|
|
506
|
+
* Get this image's explicit placement.
|
|
507
|
+
* @returns {ISheetDrawingPlacement} OneCell, TwoCell, or Absolute placement.
|
|
508
|
+
* @example
|
|
509
|
+
* ```ts
|
|
510
|
+
* const image = univerAPI.getActiveWorkbook().getActiveSheet().getImages()[0];
|
|
511
|
+
* console.log(image.getPlacement());
|
|
512
|
+
* ```
|
|
513
|
+
*/
|
|
514
|
+
getPlacement(): ISheetDrawingPlacement;
|
|
515
|
+
/**
|
|
516
|
+
* Set this image's explicit placement through the drawing command.
|
|
517
|
+
* `Position`, `Both`, and `None` correspond to OneCell, TwoCell, and
|
|
518
|
+
* Absolute. Bounds inference is preferable when preserving the current
|
|
519
|
+
* visual bounds; exact markers are for user-selected cells and offsets.
|
|
520
|
+
* @param {ISheetDrawingPlacementInput} placement Exact placement or bounds with an explicit anchor type.
|
|
521
|
+
* @returns {boolean} `true` when the command succeeds.
|
|
522
|
+
* @example OneCell
|
|
523
|
+
* ```ts
|
|
524
|
+
* const image = univerAPI.getActiveWorkbook().getActiveSheet().getImages()[0];
|
|
525
|
+
* image.setPlacement({
|
|
526
|
+
* kind: univerAPI.Enum.SheetDrawingAnchorType.Position,
|
|
527
|
+
* from: { row: 4, column: 3, rowOffset: 8, columnOffset: 8 },
|
|
528
|
+
* width: 320,
|
|
529
|
+
* height: 180,
|
|
530
|
+
* });
|
|
531
|
+
* ```
|
|
532
|
+
* @example Infer TwoCell markers while preserving current model-space bounds
|
|
533
|
+
* ```ts
|
|
534
|
+
* const image = univerAPI.getActiveWorkbook().getActiveSheet().getImages()[0];
|
|
535
|
+
* image.setPlacement({
|
|
536
|
+
* kind: univerAPI.Enum.SheetDrawingAnchorType.Both,
|
|
537
|
+
* bounds: { left: 120, top: 80, width: 320, height: 160 },
|
|
538
|
+
* });
|
|
539
|
+
* ```
|
|
540
|
+
* @example TwoCell
|
|
541
|
+
* ```ts
|
|
542
|
+
* const image = univerAPI.getActiveWorkbook().getActiveSheet().getImages()[0];
|
|
543
|
+
* image.setPlacement({
|
|
544
|
+
* kind: univerAPI.Enum.SheetDrawingAnchorType.Both,
|
|
545
|
+
* from: { row: 4, column: 3, rowOffset: 8, columnOffset: 8 },
|
|
546
|
+
* to: { row: 10, column: 8, rowOffset: 0, columnOffset: 0 },
|
|
547
|
+
* });
|
|
548
|
+
* ```
|
|
549
|
+
* @example Absolute
|
|
550
|
+
* ```ts
|
|
551
|
+
* const image = univerAPI.getActiveWorkbook().getActiveSheet().getImages()[0];
|
|
552
|
+
* image.setPlacement({
|
|
553
|
+
* kind: univerAPI.Enum.SheetDrawingAnchorType.None,
|
|
554
|
+
* left: 640,
|
|
555
|
+
* top: 96,
|
|
556
|
+
* width: 320,
|
|
557
|
+
* height: 180,
|
|
558
|
+
* });
|
|
559
|
+
* ```
|
|
560
|
+
*/
|
|
561
|
+
setPlacement(placement: ISheetDrawingPlacementInput): boolean;
|
|
436
562
|
/**
|
|
437
563
|
* Remove the image from the sheet
|
|
438
564
|
* @returns {boolean} true if the image is removed successfully, otherwise false
|
|
@@ -13,10 +13,27 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
+
import type { IGroupBaseBound, Injector } from '@univerjs/core';
|
|
16
17
|
import type { IFBlobSource } from '@univerjs/core/facade';
|
|
17
|
-
import type { ISheetDrawing, ISheetImage } from '@univerjs/sheets-drawing';
|
|
18
|
+
import type { ISheetDrawing, ISheetDrawingPlacement, ISheetDrawingPlacementInput, ISheetImage } from '@univerjs/sheets-drawing';
|
|
19
|
+
import { DrawingTypeEnum } from '@univerjs/core';
|
|
18
20
|
import { FWorksheet } from '@univerjs/sheets/facade';
|
|
19
21
|
import { FOverGridImage, FOverGridImageBuilder } from './f-over-grid-image';
|
|
22
|
+
export interface ISheetDrawingLayoutObject {
|
|
23
|
+
drawingId: string;
|
|
24
|
+
drawingType: DrawingTypeEnum;
|
|
25
|
+
bounds: IGroupBaseBound;
|
|
26
|
+
placement: ISheetDrawingPlacement;
|
|
27
|
+
groupId?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ISheetDrawingLayout {
|
|
30
|
+
/** Entire Sheet grid in model coordinates. */
|
|
31
|
+
gridBounds: IGroupBaseBound;
|
|
32
|
+
/** Cell content range in model coordinates. */
|
|
33
|
+
dataBounds: IGroupBaseBound;
|
|
34
|
+
/** Drawings ordered from back to front. */
|
|
35
|
+
drawings: ISheetDrawingLayoutObject[];
|
|
36
|
+
}
|
|
20
37
|
/**
|
|
21
38
|
* @ignore
|
|
22
39
|
*/
|
|
@@ -171,6 +188,109 @@ export interface IFWorksheetDrawingMixin {
|
|
|
171
188
|
* ```
|
|
172
189
|
*/
|
|
173
190
|
updateImages(sheetImages: ISheetImage[]): FWorksheet;
|
|
191
|
+
/**
|
|
192
|
+
* Get the placement of any drawing on this sheet.
|
|
193
|
+
*
|
|
194
|
+
* Image, Shape, Chart, and Group use the same placement contract.
|
|
195
|
+
* @param {string} drawingId Drawing id.
|
|
196
|
+
* @returns {ISheetDrawingPlacement | null} The placement, or `null` when the drawing does not exist.
|
|
197
|
+
* @example
|
|
198
|
+
* ```ts
|
|
199
|
+
* const sheet = univerAPI.getActiveWorkbook().getActiveSheet();
|
|
200
|
+
* const placement = sheet.getDrawingPlacement('drawing-id');
|
|
201
|
+
* if (placement?.kind === univerAPI.Enum.SheetDrawingAnchorType.Both) {
|
|
202
|
+
* console.log(placement.from, placement.to);
|
|
203
|
+
* }
|
|
204
|
+
* ```
|
|
205
|
+
*/
|
|
206
|
+
getDrawingPlacement(drawingId: string): ISheetDrawingPlacement | null;
|
|
207
|
+
/**
|
|
208
|
+
* Set the placement of any drawing on this sheet through the drawing command.
|
|
209
|
+
*
|
|
210
|
+
* @param {string} drawingId Drawing id.
|
|
211
|
+
* @param {ISheetDrawingPlacementInput} placement Exact markers or model-space bounds with an explicit anchor type.
|
|
212
|
+
* @returns {boolean} `true` when the command succeeds.
|
|
213
|
+
* @example OneCell: move with cells, keep pixel size
|
|
214
|
+
* ```ts
|
|
215
|
+
* const sheet = univerAPI.getActiveWorkbook().getActiveSheet();
|
|
216
|
+
* const drawingId = sheet.getImages()[0]?.getId();
|
|
217
|
+
* if (!drawingId) throw new Error('No drawing found.');
|
|
218
|
+
* const changed = sheet.setDrawingPlacement(drawingId, {
|
|
219
|
+
* kind: univerAPI.Enum.SheetDrawingAnchorType.Position,
|
|
220
|
+
* from: { row: 2, column: 2, rowOffset: 8, columnOffset: 8 },
|
|
221
|
+
* width: 240,
|
|
222
|
+
* height: 120,
|
|
223
|
+
* });
|
|
224
|
+
* console.log(changed);
|
|
225
|
+
* ```
|
|
226
|
+
* @example TwoCell: move and resize with both cell markers
|
|
227
|
+
* ```ts
|
|
228
|
+
* const sheet = univerAPI.getActiveWorkbook().getActiveSheet();
|
|
229
|
+
* const drawingId = sheet.getImages()[0]?.getId();
|
|
230
|
+
* if (!drawingId) throw new Error('No drawing found.');
|
|
231
|
+
* sheet.setDrawingPlacement(drawingId, {
|
|
232
|
+
* kind: univerAPI.Enum.SheetDrawingAnchorType.Both,
|
|
233
|
+
* from: { row: 2, column: 2, rowOffset: 8, columnOffset: 8 },
|
|
234
|
+
* to: { row: 8, column: 6, rowOffset: 0, columnOffset: 0 },
|
|
235
|
+
* });
|
|
236
|
+
* ```
|
|
237
|
+
* @example Absolute: do not move or resize after row or column changes
|
|
238
|
+
* ```ts
|
|
239
|
+
* const sheet = univerAPI.getActiveWorkbook().getActiveSheet();
|
|
240
|
+
* const drawingId = sheet.getImages()[0]?.getId();
|
|
241
|
+
* if (!drawingId) throw new Error('No drawing found.');
|
|
242
|
+
* sheet.setDrawingPlacement(drawingId, {
|
|
243
|
+
* kind: univerAPI.Enum.SheetDrawingAnchorType.None,
|
|
244
|
+
* left: 640,
|
|
245
|
+
* top: 96,
|
|
246
|
+
* width: 240,
|
|
247
|
+
* height: 120,
|
|
248
|
+
* });
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
251
|
+
setDrawingPlacement(drawingId: string, placement: ISheetDrawingPlacementInput): boolean;
|
|
252
|
+
/**
|
|
253
|
+
* Resolve exact markers or model-space bounds to a normalized Placement.
|
|
254
|
+
*
|
|
255
|
+
* Bounds inference is usually preferable when positioning from an existing
|
|
256
|
+
* transform. Exact markers are useful when the caller must preserve a
|
|
257
|
+
* user-selected cell and offset. `Position` maps to OOXML OneCell,
|
|
258
|
+
* `Both` maps to TwoCell, and `None` maps to Absolute.
|
|
259
|
+
* @param {ISheetDrawingPlacementInput} placement Exact markers or bounds with an explicit anchor type.
|
|
260
|
+
* @returns {ISheetDrawingPlacement} The normalized Placement.
|
|
261
|
+
* @example Infer Position and Both placements from bounds in Node/headless
|
|
262
|
+
* ```ts
|
|
263
|
+
* const sheet = univerAPI.getActiveWorkbook().getActiveSheet();
|
|
264
|
+
* const positionPlacement = sheet.resolveDrawingPlacement({
|
|
265
|
+
* kind: univerAPI.Enum.SheetDrawingAnchorType.Position,
|
|
266
|
+
* bounds: { left: 120, top: 80, width: 320, height: 160 },
|
|
267
|
+
* });
|
|
268
|
+
* const bothPlacement = sheet.resolveDrawingPlacement({
|
|
269
|
+
* kind: univerAPI.Enum.SheetDrawingAnchorType.Both,
|
|
270
|
+
* bounds: { left: 120, top: 80, width: 320, height: 160 },
|
|
271
|
+
* });
|
|
272
|
+
* console.log(positionPlacement.from);
|
|
273
|
+
* console.log(bothPlacement.from, bothPlacement.to);
|
|
274
|
+
* ```
|
|
275
|
+
*/
|
|
276
|
+
resolveDrawingPlacement(placement: ISheetDrawingPlacementInput): ISheetDrawingPlacement;
|
|
277
|
+
/**
|
|
278
|
+
* Get the Sheet host layout in model coordinates.
|
|
279
|
+
*
|
|
280
|
+
* This API is available in Node/headless and does not include viewport,
|
|
281
|
+
* scroll, zoom, frozen-pane clipping, or screen coordinates.
|
|
282
|
+
* @returns {ISheetDrawingLayout} Grid, data, and ordered Drawing bounds.
|
|
283
|
+
* @example
|
|
284
|
+
* ```ts
|
|
285
|
+
* const sheet = univerAPI.getActiveWorkbook().getActiveSheet();
|
|
286
|
+
* const layout = sheet.getDrawingLayout();
|
|
287
|
+
* console.log(layout.gridBounds, layout.dataBounds);
|
|
288
|
+
* for (const drawing of layout.drawings) {
|
|
289
|
+
* console.log(drawing.drawingId, drawing.bounds);
|
|
290
|
+
* }
|
|
291
|
+
* ```
|
|
292
|
+
*/
|
|
293
|
+
getDrawingLayout(): ISheetDrawingLayout;
|
|
174
294
|
/**
|
|
175
295
|
* Get the current selected images.
|
|
176
296
|
* @returns {FOverGridImage[]} The FOverGridImage instances
|
|
@@ -363,6 +483,10 @@ export interface IFWorksheetDrawingMixin {
|
|
|
363
483
|
isDrawingGrouped(drawingId: string): boolean;
|
|
364
484
|
}
|
|
365
485
|
export declare class FWorksheetDrawingMixin extends FWorksheet implements IFWorksheetDrawingMixin {
|
|
486
|
+
private _sheetDrawingService;
|
|
487
|
+
private _sheetSkeletonService;
|
|
488
|
+
private _undoRedoService;
|
|
489
|
+
_initialize(injector: Injector): void;
|
|
366
490
|
insertImage(url: IFBlobSource | string, column?: number, row?: number, offsetX?: number, offsetY?: number): Promise<boolean>;
|
|
367
491
|
insertImages(sheetImages: ISheetImage[]): FWorksheet;
|
|
368
492
|
deleteImages(sheetImages: FOverGridImage[]): FWorksheet;
|
|
@@ -370,6 +494,10 @@ export declare class FWorksheetDrawingMixin extends FWorksheet implements IFWork
|
|
|
370
494
|
getImageById(id: string): FOverGridImage | null;
|
|
371
495
|
getActiveImages(): FOverGridImage[];
|
|
372
496
|
updateImages(sheetImages: ISheetImage[]): FWorksheet;
|
|
497
|
+
getDrawingPlacement(drawingId: string): ISheetDrawingPlacement | null;
|
|
498
|
+
setDrawingPlacement(drawingId: string, placement: ISheetDrawingPlacementInput): boolean;
|
|
499
|
+
resolveDrawingPlacement(placement: ISheetDrawingPlacementInput): ISheetDrawingPlacement;
|
|
500
|
+
getDrawingLayout(): ISheetDrawingLayout;
|
|
373
501
|
newOverGridImage(): FOverGridImageBuilder;
|
|
374
502
|
groupDrawings(drawingIds: string[], groupId?: string): string | null;
|
|
375
503
|
ungroupDrawings(groupIds: string[]): boolean;
|
package/lib/types/index.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export { RemoveSheetDrawingCommand } from './commands/commands/remove-sheet-draw
|
|
|
20
20
|
export type { IRemoveSheetDrawingCommandParam, IRemoveSheetDrawingCommandParams } from './commands/commands/remove-sheet-drawing.command';
|
|
21
21
|
export { SetDrawingArrangeCommand } from './commands/commands/set-drawing-arrange.command';
|
|
22
22
|
export type { ISetDrawingArrangeCommandParams } from './commands/commands/set-drawing-arrange.command';
|
|
23
|
+
export { SetSheetDrawingPlacementCommand } from './commands/commands/set-sheet-drawing-placement.command';
|
|
24
|
+
export type { ISetSheetDrawingPlacementCommandParams } from './commands/commands/set-sheet-drawing-placement.command';
|
|
23
25
|
export { SetSheetDrawingCommand } from './commands/commands/set-sheet-drawing.command';
|
|
24
26
|
export type { ISetDrawingCommandParams } from './commands/commands/set-sheet-drawing.command';
|
|
25
27
|
export { DrawingApplyType, SetDrawingApplyMutation } from './commands/mutations/set-drawing-apply.mutation';
|
|
@@ -29,6 +31,8 @@ export { isKnownSheetNonRotatableDrawingType, resolveSheetDrawingRotateEnabled }
|
|
|
29
31
|
export type { IUniverSheetsDrawingConfig } from './config/config';
|
|
30
32
|
export { SHEET_DRAWING_PLUGIN } from './controllers/sheet-drawing.controller';
|
|
31
33
|
export { UniverSheetsDrawingPlugin } from './plugin';
|
|
34
|
+
export { applySheetDrawingPlacement, getSheetDrawingPlacement, normalizeSheetDrawingPlacement, } from './services/sheet-drawing-placement';
|
|
35
|
+
export type { ISheetDrawingAbsolutePlacement, ISheetDrawingOneCellPlacement, ISheetDrawingPlacement, ISheetDrawingPlacementByBounds, ISheetDrawingPlacementInput, ISheetDrawingTwoCellPlacement, } from './services/sheet-drawing-placement';
|
|
32
36
|
export { SheetDrawingTransformPlanService } from './services/sheet-drawing-transform-plan.service';
|
|
33
37
|
export type { ISheetDrawingTransformExtension, ISheetDrawingTransformExtensionResult, ISheetDrawingTransformPlan, } from './services/sheet-drawing-transform-plan.service';
|
|
34
38
|
export { ISheetDrawingService, SheetDrawingAnchorType, SheetDrawingService } from './services/sheet-drawing.service';
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2023-present DreamNum Co., Ltd.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import type { IGroupBaseBound } from '@univerjs/core';
|
|
17
|
+
import type { SpreadsheetSkeleton } from '@univerjs/engine-render';
|
|
18
|
+
import type { ICellOverGridPosition } from '@univerjs/sheets';
|
|
19
|
+
import type { ISheetDrawing, ISheetFloatDom, ISheetImage } from './sheet-drawing.service';
|
|
20
|
+
import { SheetDrawingAnchorType } from './sheet-drawing.service';
|
|
21
|
+
/**
|
|
22
|
+
* Anchor a drawing to one cell while keeping a fixed pixel extent.
|
|
23
|
+
*/
|
|
24
|
+
export interface ISheetDrawingOneCellPlacement {
|
|
25
|
+
/** Placement discriminator. */
|
|
26
|
+
kind: SheetDrawingAnchorType.Position;
|
|
27
|
+
/** Zero-based anchor cell and pixel offsets from its top-left corner. */
|
|
28
|
+
from: ICellOverGridPosition;
|
|
29
|
+
/** Drawing width in pixels. */
|
|
30
|
+
width: number;
|
|
31
|
+
/** Drawing height in pixels. */
|
|
32
|
+
height: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Anchor a drawing between two cell markers.
|
|
36
|
+
*/
|
|
37
|
+
export interface ISheetDrawingTwoCellPlacement {
|
|
38
|
+
/** Placement discriminator. */
|
|
39
|
+
kind: SheetDrawingAnchorType.Both;
|
|
40
|
+
/** Zero-based start cell and pixel offsets. */
|
|
41
|
+
from: ICellOverGridPosition;
|
|
42
|
+
/** Zero-based end cell and pixel offsets. */
|
|
43
|
+
to: ICellOverGridPosition;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Position a drawing in the Sheet canvas pixel coordinate system.
|
|
47
|
+
*/
|
|
48
|
+
export interface ISheetDrawingAbsolutePlacement {
|
|
49
|
+
/** Placement discriminator. */
|
|
50
|
+
kind: SheetDrawingAnchorType.None;
|
|
51
|
+
/** Horizontal pixel offset from the Sheet canvas origin. */
|
|
52
|
+
left: number;
|
|
53
|
+
/** Vertical pixel offset from the Sheet canvas origin. */
|
|
54
|
+
top: number;
|
|
55
|
+
/** Drawing width in pixels. */
|
|
56
|
+
width: number;
|
|
57
|
+
/** Drawing height in pixels. */
|
|
58
|
+
height: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Explicit Sheet drawing placement.
|
|
62
|
+
*/
|
|
63
|
+
export type ISheetDrawingPlacement = ISheetDrawingOneCellPlacement | ISheetDrawingTwoCellPlacement | ISheetDrawingAbsolutePlacement;
|
|
64
|
+
/**
|
|
65
|
+
* Infer cell markers from model-space bounds after the anchor semantics have
|
|
66
|
+
* been selected explicitly.
|
|
67
|
+
*/
|
|
68
|
+
export interface ISheetDrawingPlacementByBounds {
|
|
69
|
+
/** Position, Both, or None semantics. */
|
|
70
|
+
kind: SheetDrawingAnchorType;
|
|
71
|
+
/** Bounds in the Sheet model coordinate system. */
|
|
72
|
+
bounds: IGroupBaseBound;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Exact Placement or model-space bounds to normalize into one.
|
|
76
|
+
*/
|
|
77
|
+
export type ISheetDrawingPlacementInput = ISheetDrawingPlacement | ISheetDrawingPlacementByBounds;
|
|
78
|
+
export declare function getSheetDrawingPlacement(drawing: ISheetDrawing): ISheetDrawingPlacement;
|
|
79
|
+
export declare function applySheetDrawingPlacement(drawing: ISheetImage, input: ISheetDrawingPlacementInput, skeleton?: SpreadsheetSkeleton): ISheetImage;
|
|
80
|
+
export declare function applySheetDrawingPlacement(drawing: ISheetFloatDom, input: ISheetDrawingPlacementInput, skeleton?: SpreadsheetSkeleton): ISheetFloatDom;
|
|
81
|
+
export declare function applySheetDrawingPlacement(drawing: ISheetDrawing, input: ISheetDrawingPlacementInput, skeleton?: SpreadsheetSkeleton): ISheetDrawing;
|
|
82
|
+
/**
|
|
83
|
+
* Normalize exact markers or model-space bounds to the authoritative
|
|
84
|
+
* Position, Both, or None Placement.
|
|
85
|
+
*/
|
|
86
|
+
export declare function normalizeSheetDrawingPlacement(input: ISheetDrawingPlacementInput, skeleton?: SpreadsheetSkeleton): ISheetDrawingPlacement;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import type { IDrawingParam, IRotationSkewFlipTransform, Serializable } from '@univerjs/core';
|
|
17
|
-
import type { IImageData, IUnitDrawingService } from '@univerjs/drawing';
|
|
17
|
+
import type { IDrawingJsonUndo1, IImageData, IUnitDrawingService } from '@univerjs/drawing';
|
|
18
18
|
import type { ISheetOverGridPosition } from '@univerjs/sheets';
|
|
19
19
|
import { UnitDrawingService } from '@univerjs/drawing';
|
|
20
20
|
export declare enum SheetDrawingAnchorType {
|
|
@@ -65,6 +65,7 @@ export type ISheetUpdateDrawing = OptionalField<ISheetImage | ISheetShape, 'shee
|
|
|
65
65
|
export declare class SheetDrawingService extends UnitDrawingService<ISheetDrawing> {
|
|
66
66
|
}
|
|
67
67
|
export interface ISheetDrawingService extends IUnitDrawingService<ISheetDrawing> {
|
|
68
|
+
getBatchUpdateOp(updateParams: ISheetDrawing[]): IDrawingJsonUndo1;
|
|
68
69
|
}
|
|
69
70
|
export declare const ISheetDrawingService: import("@wendellhu/redi").IdentifierDecorator<ISheetDrawingService>;
|
|
70
71
|
export {};
|
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/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);var _=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,r=(0,e.generateRandomId)(10)){let o=Array.from(new Set(t));if(o.length<2)return null;let s=this._fWorkbook.getId(),c=this.getSheetId(),l=this._injector.get(i.ISheetDrawingService);if(l.getDrawingByParam({unitId:s,subUnitId:c,drawingId:r}))return null;let u=o.map(e=>l.getDrawingByParam({unitId:s,subUnitId:c,drawingId:e}));if(u.some(e=>!e)||u.some(e=>!(0,n.isGroupableDrawingType)(e.drawingType)))return null;let d=u,f=(0,a.getGroupState)(0,0,d.map(e=>e.transform||{})),p={unitId:s,subUnitId:c,drawingId:r,drawingType:e.DrawingTypeEnum.DRAWING_GROUP,transform:f,groupBaseBound:{left:f.left,top:f.top,width:f.width,height:f.height}},m=d.map(e=>({...e,groupId:r}));return this._applyGroupDrawingOperation([{parent:p,children:m}],i.DrawingApplyType.GROUP)?r: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(_);var v=class extends t.FEnum{get DrawingType(){return e.DrawingTypeEnum}get SheetDrawingAnchorType(){return i.SheetDrawingAnchorType}};t.FEnum.extend(v);var y=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(y);var b=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(b)});
|
|
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._sheetSkeletonService=r,u(this,`_image`,void 0),u(this,`_placement`,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,r=this._sheetSkeletonService.getSkeleton(t,n);if(!r)throw Error(`Skeleton for unitId ${t} and subUnitId ${n} not found`);return e.sheetTransform??={from:{column:0,columnOffset:0,row:0,rowOffset:0},to:{column:0,columnOffset:0,row:0,rowOffset:0}},e.axisAlignSheetTransform??={from:{column:0,columnOffset:0,row:0,rowOffset:0},to:{column:0,columnOffset:0,row:0,rowOffset:0}},this._image=p(e,r),this}setSource(t,n){let r=n??e.ImageSourceType.URL;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}setPlacement(e){return this._placement=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??(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(){var e;let t=this._sheetSkeletonService;if(!this._placement&&(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)}if(((e=this._placement)==null?void 0:e.kind)===i.SheetDrawingAnchorType.None){let{left:e,top:t,width:n,height:r}=`bounds`in this._placement?this._placement.bounds:this._placement,a={from:{column:0,columnOffset:e,row:0,rowOffset:t},to:{column:0,columnOffset:e+n,row:0,rowOffset:t+r}};return(0,i.applySheetDrawingPlacement)({...this._image,transform:{left:e,top:t,width:n,height:r,flipY:this._image.flipY,flipX:this._image.flipX,angle:this._image.angle,skewX:this._image.skewX,skewY:this._image.skewY},sheetTransform:a,axisAlignSheetTransform:a},this._placement)}let r=m(this._image,t);if(!this._placement)return r;let a=t.ensureSkeleton(r.unitId,r.subUnitId);return(0,i.applySheetDrawingPlacement)(r,this._placement,a)}};h=f([d(2,(0,e.Inject)(r.SheetSkeletonService))],h);let g=class extends t.FBase{constructor(e,t,n,r,i){super(),this._image=e,this._commandService=t,this._injector=n,this._sheetDrawingService=r,this._sheetSkeletonService=i}getId(){return this._image.drawingId}getType(){return this._image.drawingType}getPlacement(){return(0,i.getSheetDrawingPlacement)(this._sheetDrawingService.getDrawingByParam({unitId:this._image.unitId,subUnitId:this._image.subUnitId,drawingId:this._image.drawingId})??this._image)}setPlacement(e){return this._commandService.syncExecuteCommand(i.SetSheetDrawingPlacementCommand.id,{unitId:this._image.unitId,subUnitId:this._image.subUnitId,drawings:[{drawingId:this._image.drawingId,placement:e}]})}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??e.ImageSourceType.URL;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??(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._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)),d(3,i.ISheetDrawingService),d(4,(0,e.Inject)(r.SheetSkeletonService))],g);var _=class extends o.FWorksheet{_initialize(t){this._sheetDrawingService=t.get(i.ISheetDrawingService),this._sheetSkeletonService=t.get(r.SheetSkeletonService),this._undoRedoService=t.get(e.IUndoRedoService)}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._sheetDrawingService.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._sheetDrawingService.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._sheetDrawingService.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}getDrawingPlacement(e){let t=this._sheetDrawingService.getDrawingByParam({unitId:this._fWorkbook.getId(),subUnitId:this.getSheetId(),drawingId:e});return t?(0,i.getSheetDrawingPlacement)(t):null}setDrawingPlacement(e,t){return this._commandService.syncExecuteCommand(i.SetSheetDrawingPlacementCommand.id,{unitId:this._fWorkbook.getId(),subUnitId:this.getSheetId(),drawings:[{drawingId:e,placement:t}]})}resolveDrawingPlacement(e){let t=e.kind===i.SheetDrawingAnchorType.None?void 0:this._sheetSkeletonService.ensureSkeleton(this._fWorkbook.getId(),this.getSheetId());if(e.kind!==i.SheetDrawingAnchorType.None&&!t)throw Error(`SHEET_DRAWING_PLACEMENT_SKELETON_REQUIRED`);return(0,i.normalizeSheetDrawingPlacement)(e,t)}getDrawingLayout(){let e=this._fWorkbook.getId(),t=this.getSheetId(),n=this._sheetSkeletonService.ensureSkeleton(e,t);if(!n)throw Error(`SHEET_DRAWING_PLACEMENT_SKELETON_REQUIRED`);let{startRow:r,endRow:a,startColumn:o,endColumn:s}=this._worksheet.getDataRealRange(),c=n.getCellWithCoordByIndex(r,o,!1),l=n.getCellWithCoordByIndex(a,s,!1),u=this._sheetDrawingService,d=u.getDrawingData(e,t),f=u.getDrawingOrder(e,t),p=[...f,...Object.keys(d).filter(e=>!f.includes(e))],m=[];for(let e of p){let t=d[e],n=t&&v(t);!t||!n||m.push({drawingId:e,drawingType:t.drawingType,bounds:n,placement:(0,i.getSheetDrawingPlacement)(t),groupId:t.groupId})}return{gridBounds:{left:0,top:0,width:n.columnTotalWidth,height:n.rowTotalHeight},dataBounds:{left:c.startX,top:c.startY,width:l.endX-c.startX,height:l.endY-c.startY},drawings:m}}newOverGridImage(){let e=this._fWorkbook.getId(),t=this.getSheetId();return this._injector.createInstance(h,e,t)}groupDrawings(t,r=(0,e.generateRandomId)(10)){let o=Array.from(new Set(t));if(o.length<2)return null;let s=this._fWorkbook.getId(),c=this.getSheetId(),l=this._sheetDrawingService;if(l.getDrawingByParam({unitId:s,subUnitId:c,drawingId:r}))return null;let u=o.map(e=>l.getDrawingByParam({unitId:s,subUnitId:c,drawingId:e}));if(u.some(e=>!e)||u.some(e=>!(0,n.isGroupableDrawingType)(e.drawingType)))return null;let d=u,f=(0,a.getGroupState)(0,0,d.map(e=>e.transform||{})),p={unitId:s,subUnitId:c,drawingId:r,drawingType:e.DrawingTypeEnum.DRAWING_GROUP,transform:f,groupBaseBound:{left:f.left,top:f.top,width:f.width,height:f.height}},m=d.map(e=>({...e,groupId:r}));return this._applyGroupDrawingOperation([{parent:p,children:m}],i.DrawingApplyType.GROUP)?r:null}ungroupDrawings(t){let n=this._fWorkbook.getId(),r=this.getSheetId(),o=this._sheetDrawingService,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(),i=this._sheetDrawingService;if(!t)return i.getDrawingsByGroup({unitId:n,subUnitId:r,drawingId:e});let a=i.getDrawingsByGroupNested({unitId:n,subUnitId:r,drawingId:e});return a?[...a.flatChildren||[],...a.groups.filter(t=>t.drawingId!==e)]:[]}getDrawingParentGroup(t){let n=this._fWorkbook.getId(),r=this.getSheetId(),i=this._sheetDrawingService,a=i.getDrawingByParam({unitId:n,subUnitId:r,drawingId:t});if(!(a!=null&&a.groupId))return null;let o=i.getDrawingByParam({unitId:n,subUnitId:r,drawingId:a.groupId});return!o||o.drawingType!==e.DrawingTypeEnum.DRAWING_GROUP?null:o}isDrawingGrouped(e){return this.getDrawingParentGroup(e)!==null}_applyGroupDrawingOperation(e,t){if(e.length===0)return!1;let n=this._sheetDrawingService,r=this._commandService,a=this._undoRedoService,{unitId:o,subUnitId:s,undo:c,redo:l,objects:u}=t===i.DrawingApplyType.GROUP?n.getGroupDrawingOp(e):n.getUngroupDrawingOp(e);if(r.syncExecuteCommand(i.SetDrawingApplyMutation.id,{op:l,unitId:o,subUnitId:s,objects:u,type:t})){let e=t===i.DrawingApplyType.GROUP?i.DrawingApplyType.UNGROUP:i.DrawingApplyType.GROUP;return a.pushUndoRedo({unitID:o,undoMutations:[{id:i.SetDrawingApplyMutation.id,params:{op:c,unitId:o,subUnitId:s,objects:this._invertGroupOperationObjects(u,t),type:e}}],redoMutations:[{id:i.SetDrawingApplyMutation.id,params:{op:l,unitId:o,subUnitId:s,objects:u,type:t}}]}),!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}))}})}};function v(e){let{left:t,top:n,width:r,height:i}=e.transform??{};return typeof t!=`number`||typeof n!=`number`||typeof r!=`number`||typeof i!=`number`||!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r)||!Number.isFinite(i)?null:{left:t,top:n,width:r,height:i}}o.FWorksheet.extend(_);var y=class extends t.FEnum{get DrawingType(){return e.DrawingTypeEnum}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)});
|