@univerjs/docs-drawing 1.0.0-alpha.8 → 1.0.0-beta.1
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 +14 -16
- package/lib/cjs/index.js +44 -95
- package/lib/es/facade.js +14 -16
- package/lib/es/index.js +45 -96
- package/lib/facade.js +14 -16
- package/lib/index.js +45 -96
- package/lib/types/commands/commands/set-drawing-arrange.command.d.ts +6 -2
- package/lib/types/facade/f-document-image.d.ts +1 -1
- package/lib/types/facade/f-document.d.ts +2 -2
- package/lib/types/facade/f-enum.d.ts +5 -4
- package/lib/umd/facade.js +1 -1
- package/lib/umd/index.js +1 -1
- package/package.json +6 -6
package/lib/es/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ArrangeTypeEnum, BooleanNumber, BuildTextUtils, CommandType, DependentOn, Disposable, ICommandService, IConfigService, IResourceManagerService, IUndoRedoService, IUniverInstanceService, Inject, Injector, JSONX, MemoryCursor, Plugin, PositionedObjectLayoutType, TextX, TextXActionType, Tools, UniverInstanceType, createIdentifier,
|
|
1
|
+
import { ArrangeTypeEnum, BooleanNumber, BuildTextUtils, CommandType, DependentOn, Disposable, ICommandService, IConfigService, IResourceManagerService, IUndoRedoService, IUniverInstanceService, Inject, Injector, JSONX, MemoryCursor, Plugin, PositionedObjectLayoutType, TextX, TextXActionType, Tools, UniverInstanceType, createIdentifier, getRichTextEditPath, merge, normalizeDrawingOrderIndex, toDisposable, touchDependencies } from "@univerjs/core";
|
|
2
2
|
import { DocSelectionManagerService, RichTextEditingMutation, UniverDocsPlugin, getContentInsertRange, normalizeTextRange } from "@univerjs/docs";
|
|
3
3
|
import { IDrawingManagerService, UnitDrawingService, UniverDrawingPlugin } from "@univerjs/drawing";
|
|
4
4
|
|
|
@@ -10,81 +10,29 @@ const InsertDocDrawingCommand = {
|
|
|
10
10
|
id: "doc.command.insert-doc-image",
|
|
11
11
|
type: CommandType.COMMAND,
|
|
12
12
|
handler: (accessor, params) => {
|
|
13
|
-
var _documentDataModel$ge, _snapshot$headers, _snapshot$footers
|
|
13
|
+
var _documentDataModel$ge, _snapshot$headers, _snapshot$footers;
|
|
14
14
|
if (!params) return false;
|
|
15
15
|
const commandService = accessor.get(ICommandService);
|
|
16
16
|
const univerInstanceService = accessor.get(IUniverInstanceService);
|
|
17
17
|
const { unitId, drawings, textRange } = params;
|
|
18
18
|
const documentDataModel = univerInstanceService.getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
19
19
|
if (!documentDataModel) return false;
|
|
20
|
-
const
|
|
21
|
-
if (!
|
|
22
|
-
const {
|
|
23
|
-
|
|
24
|
-
if (!body) return false;
|
|
25
|
-
const textX = new TextX();
|
|
26
|
-
const jsonX = JSONX.getInstance();
|
|
27
|
-
const rawActions = [];
|
|
20
|
+
const resolvedTextRange = resolveDocDrawingInsertTextRange(accessor, unitId, textRange);
|
|
21
|
+
if (!resolvedTextRange) return false;
|
|
22
|
+
const { segmentId = "" } = resolvedTextRange;
|
|
23
|
+
if (!((_documentDataModel$ge = documentDataModel.getSelfOrHeaderFooterModel(segmentId)) === null || _documentDataModel$ge === void 0 ? void 0 : _documentDataModel$ge.getBody())) return false;
|
|
28
24
|
const snapshot = documentDataModel.getSnapshot();
|
|
29
|
-
const targetDrawings = !!((_snapshot$headers = snapshot.headers) === null || _snapshot$headers === void 0 ? void 0 : _snapshot$headers[segmentId]) || !!((_snapshot$footers = snapshot.footers) === null || _snapshot$footers === void 0 ? void 0 : _snapshot$footers[segmentId]) ? drawings.map((drawing) => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
let removeDrawingLen = 0;
|
|
39
|
-
if (collapsed) {
|
|
40
|
-
if (startOffset > 0) textX.push({
|
|
41
|
-
t: TextXActionType.RETAIN,
|
|
42
|
-
len: startOffset
|
|
43
|
-
});
|
|
44
|
-
} else {
|
|
45
|
-
var _documentDataModel$ge2, _documentDataModel$ge3;
|
|
46
|
-
const dos = BuildTextUtils.selection.delete([targetTextRange], body, 0, null, false);
|
|
47
|
-
textX.push(...dos);
|
|
48
|
-
const removedCustomBlockIds = getCustomBlockIdsInSelections(body, [targetTextRange]);
|
|
49
|
-
const drawings = (_documentDataModel$ge2 = documentDataModel.getDrawings()) !== null && _documentDataModel$ge2 !== void 0 ? _documentDataModel$ge2 : {};
|
|
50
|
-
const drawingOrder = (_documentDataModel$ge3 = documentDataModel.getDrawingsOrder()) !== null && _documentDataModel$ge3 !== void 0 ? _documentDataModel$ge3 : [];
|
|
51
|
-
const sortedRemovedCustomBlockIds = removedCustomBlockIds.sort((a, b) => {
|
|
52
|
-
if (drawingOrder.indexOf(a) > drawingOrder.indexOf(b)) return -1;
|
|
53
|
-
else if (drawingOrder.indexOf(a) < drawingOrder.indexOf(b)) return 1;
|
|
54
|
-
return 0;
|
|
55
|
-
});
|
|
56
|
-
if (sortedRemovedCustomBlockIds.length > 0) for (const blockId of sortedRemovedCustomBlockIds) {
|
|
57
|
-
const drawing = drawings[blockId];
|
|
58
|
-
const drawingIndex = drawingOrder.indexOf(blockId);
|
|
59
|
-
if (drawing == null || drawingIndex < 0) continue;
|
|
60
|
-
const removeDrawingAction = jsonX.removeOp(["drawings", blockId], drawing);
|
|
61
|
-
const removeDrawingOrderAction = jsonX.removeOp(["drawingsOrder", drawingIndex], blockId);
|
|
62
|
-
rawActions.push(removeDrawingAction);
|
|
63
|
-
rawActions.push(removeDrawingOrderAction);
|
|
64
|
-
removeDrawingLen++;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
textX.push({
|
|
68
|
-
t: TextXActionType.INSERT,
|
|
69
|
-
body: {
|
|
70
|
-
dataStream: "\b".repeat(targetDrawings.length),
|
|
71
|
-
customBlocks: targetDrawings.map((drawing, i) => ({
|
|
72
|
-
startIndex: i,
|
|
73
|
-
blockId: drawing.drawingId
|
|
74
|
-
}))
|
|
75
|
-
},
|
|
76
|
-
len: targetDrawings.length
|
|
25
|
+
const targetDrawings = !!((_snapshot$headers = snapshot.headers) === null || _snapshot$headers === void 0 ? void 0 : _snapshot$headers[segmentId]) || !!((_snapshot$footers = snapshot.footers) === null || _snapshot$footers === void 0 ? void 0 : _snapshot$footers[segmentId]) ? drawings.map((drawing) => ({
|
|
26
|
+
...drawing,
|
|
27
|
+
isMultiTransform: BooleanNumber.TRUE,
|
|
28
|
+
transforms: drawing.transforms ?? (drawing.transform ? [drawing.transform] : null)
|
|
29
|
+
})) : drawings;
|
|
30
|
+
const actions = BuildTextUtils.drawing.add({
|
|
31
|
+
selection: resolvedTextRange,
|
|
32
|
+
documentDataModel,
|
|
33
|
+
drawings: targetDrawings
|
|
77
34
|
});
|
|
78
|
-
|
|
79
|
-
const placeHolderAction = jsonX.editOp(textX.serialize(), path);
|
|
80
|
-
rawActions.push(placeHolderAction);
|
|
81
|
-
for (const drawing of targetDrawings) {
|
|
82
|
-
const { drawingId } = drawing;
|
|
83
|
-
const addDrawingAction = jsonX.insertOp(["drawings", drawingId], drawing);
|
|
84
|
-
const addDrawingOrderAction = jsonX.insertOp(["drawingsOrder", drawingOrderLength - removeDrawingLen], drawingId);
|
|
85
|
-
rawActions.push(addDrawingAction);
|
|
86
|
-
rawActions.push(addDrawingOrderAction);
|
|
87
|
-
}
|
|
35
|
+
if (!actions) return false;
|
|
88
36
|
const doMutation = {
|
|
89
37
|
id: RichTextEditingMutation.id,
|
|
90
38
|
params: {
|
|
@@ -93,25 +41,21 @@ const InsertDocDrawingCommand = {
|
|
|
93
41
|
textRanges: []
|
|
94
42
|
}
|
|
95
43
|
};
|
|
96
|
-
doMutation.params.actions =
|
|
97
|
-
return JSONX.compose(acc, cur);
|
|
98
|
-
}, null);
|
|
44
|
+
doMutation.params.actions = actions;
|
|
99
45
|
const result = commandService.syncExecuteCommand(doMutation.id, doMutation.params);
|
|
100
46
|
return Boolean(result);
|
|
101
47
|
}
|
|
102
48
|
};
|
|
103
49
|
function resolveDocDrawingInsertTextRange(accessor, unitId, textRange) {
|
|
104
|
-
var _ref, _contentInsertRange$s;
|
|
105
50
|
const activeTextRange = accessor.get(DocSelectionManagerService).getActiveTextRange();
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
if (!contentInsertRange) return activeTextRange !== null && activeTextRange !== void 0 ? activeTextRange : null;
|
|
51
|
+
const contentInsertRange = (textRange ? normalizeTextRange(textRange) : null) ?? getContentInsertRange(accessor, unitId);
|
|
52
|
+
if (!contentInsertRange) return activeTextRange ?? null;
|
|
109
53
|
return {
|
|
110
54
|
...activeTextRange,
|
|
111
55
|
startOffset: contentInsertRange.startOffset,
|
|
112
56
|
endOffset: contentInsertRange.endOffset,
|
|
113
57
|
collapsed: contentInsertRange.startOffset === contentInsertRange.endOffset,
|
|
114
|
-
segmentId:
|
|
58
|
+
segmentId: contentInsertRange.segmentId ?? (activeTextRange === null || activeTextRange === void 0 ? void 0 : activeTextRange.segmentId) ?? ""
|
|
115
59
|
};
|
|
116
60
|
}
|
|
117
61
|
|
|
@@ -201,7 +145,7 @@ const RemoveDocDrawingCommand = {
|
|
|
201
145
|
id: "doc.command.remove-doc-image",
|
|
202
146
|
type: CommandType.COMMAND,
|
|
203
147
|
handler: (accessor, params) => {
|
|
204
|
-
var
|
|
148
|
+
var _documentDataModel$ge;
|
|
205
149
|
if (!params) return false;
|
|
206
150
|
const commandService = accessor.get(ICommandService);
|
|
207
151
|
const undoRedoService = accessor.get(IUndoRedoService);
|
|
@@ -212,29 +156,27 @@ const RemoveDocDrawingCommand = {
|
|
|
212
156
|
const documentDataModel = univerInstanceService.getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
213
157
|
if (!documentDataModel || removeDrawings.length === 0) return false;
|
|
214
158
|
const activeTextRange = docSelectionManagerService.getActiveTextRange();
|
|
215
|
-
const
|
|
216
|
-
const
|
|
217
|
-
const segmentId = (_ref = (_contentInsertRange$s = contentInsertRange === null || contentInsertRange === void 0 ? void 0 : contentInsertRange.segmentId) !== null && _contentInsertRange$s !== void 0 ? _contentInsertRange$s : activeTextRange === null || activeTextRange === void 0 ? void 0 : activeTextRange.segmentId) !== null && _ref !== void 0 ? _ref : "";
|
|
159
|
+
const contentInsertRange = (!textRange ? null : normalizeTextRange(textRange)) ?? getContentInsertRange(accessor, unitId);
|
|
160
|
+
const segmentId = (contentInsertRange === null || contentInsertRange === void 0 ? void 0 : contentInsertRange.segmentId) ?? (activeTextRange === null || activeTextRange === void 0 ? void 0 : activeTextRange.segmentId) ?? "";
|
|
218
161
|
const textX = new TextX();
|
|
219
162
|
const jsonX = JSONX.getInstance();
|
|
220
|
-
const customBlocks = (_documentDataModel$ge =
|
|
163
|
+
const customBlocks = ((_documentDataModel$ge = documentDataModel.getSelfOrHeaderFooterModel(segmentId)) === null || _documentDataModel$ge === void 0 || (_documentDataModel$ge = _documentDataModel$ge.getBody()) === null || _documentDataModel$ge === void 0 ? void 0 : _documentDataModel$ge.customBlocks) ?? [];
|
|
221
164
|
const removeCustomBlocks = removeDrawings.map((drawing) => customBlocks.find((customBlock) => customBlock.blockId === drawing.drawingId)).filter((block) => !!block).sort((a, b) => a.startIndex > b.startIndex ? 1 : -1);
|
|
222
165
|
if (removeCustomBlocks.length === 0) return false;
|
|
223
|
-
const drawings =
|
|
166
|
+
const drawings = documentDataModel.getDrawings() ?? {};
|
|
224
167
|
const removeDrawingParamById = new Map(removeDrawings.map((drawing) => [drawing.drawingId, drawing]));
|
|
225
168
|
const removeDrawingSnapshots = removeCustomBlocks.map((block) => drawings[block.blockId]).filter((drawing) => drawing != null);
|
|
226
169
|
const resourceRedoMutations = [];
|
|
227
170
|
const resourceUndoMutations = [];
|
|
228
171
|
const resourceMutationGroups = [];
|
|
229
172
|
for (const block of removeCustomBlocks) {
|
|
230
|
-
var _removeDrawingParam$s;
|
|
231
173
|
const { blockId } = block;
|
|
232
174
|
const drawing = drawings[blockId];
|
|
233
175
|
if (drawing == null) continue;
|
|
234
176
|
const removeDrawingParam = removeDrawingParamById.get(blockId);
|
|
235
177
|
const mutationInfos = drawingAdapterService.getRemoveDrawingMutationInfos({
|
|
236
178
|
unitId,
|
|
237
|
-
subUnitId: (
|
|
179
|
+
subUnitId: (removeDrawingParam === null || removeDrawingParam === void 0 ? void 0 : removeDrawingParam.subUnitId) ?? unitId,
|
|
238
180
|
drawing,
|
|
239
181
|
removeDrawings: removeDrawingSnapshots
|
|
240
182
|
});
|
|
@@ -341,6 +283,16 @@ function getArrangedDrawingOrder(drawingOrder, drawingIds, arrangeType) {
|
|
|
341
283
|
}
|
|
342
284
|
return arrangedDrawingOrder;
|
|
343
285
|
}
|
|
286
|
+
function getDrawingOrderAtIndex(drawingOrder, drawingIds, zOrder) {
|
|
287
|
+
if (drawingIds.length !== 1) return [...drawingOrder];
|
|
288
|
+
const arrangedDrawingOrder = [...drawingOrder];
|
|
289
|
+
const currentIndex = arrangedDrawingOrder.indexOf(drawingIds[0]);
|
|
290
|
+
if (currentIndex < 0) return arrangedDrawingOrder;
|
|
291
|
+
const [drawingId] = arrangedDrawingOrder.splice(currentIndex, 1);
|
|
292
|
+
const targetIndex = normalizeDrawingOrderIndex(zOrder, drawingOrder.length);
|
|
293
|
+
arrangedDrawingOrder.splice(targetIndex, 0, drawingId);
|
|
294
|
+
return arrangedDrawingOrder;
|
|
295
|
+
}
|
|
344
296
|
/**
|
|
345
297
|
* Converts the target order into granular JSONX move operations. This avoids replacing
|
|
346
298
|
* the entire drawingsOrder array and keeps collaboration conflicts scoped to moved items.
|
|
@@ -369,11 +321,11 @@ const SetDocDrawingArrangeCommand = {
|
|
|
369
321
|
handler: (accessor, params) => {
|
|
370
322
|
const commandService = accessor.get(ICommandService);
|
|
371
323
|
if (params == null) return false;
|
|
372
|
-
const { unitId, drawingIds
|
|
324
|
+
const { unitId, drawingIds } = params;
|
|
373
325
|
const documentDataModel = accessor.get(IUniverInstanceService).getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
374
326
|
const drawingOrder = documentDataModel === null || documentDataModel === void 0 ? void 0 : documentDataModel.getDrawingsOrder();
|
|
375
327
|
if (!drawingOrder) return false;
|
|
376
|
-
const actions = createDrawingOrderActions(drawingOrder, getArrangedDrawingOrder(drawingOrder, drawingIds, arrangeType));
|
|
328
|
+
const actions = createDrawingOrderActions(drawingOrder, params.zOrder !== void 0 ? getDrawingOrderAtIndex(drawingOrder, drawingIds, params.zOrder) : getArrangedDrawingOrder(drawingOrder, drawingIds, params.arrangeType));
|
|
377
329
|
if (JSONX.isNoop(actions)) return false;
|
|
378
330
|
const result = commandService.syncExecuteCommand(RichTextEditingMutation.id, {
|
|
379
331
|
unitId,
|
|
@@ -390,14 +342,13 @@ const UpdateDrawingDocTransformCommand = {
|
|
|
390
342
|
id: "doc.command.update-drawing-doc-transform",
|
|
391
343
|
type: CommandType.COMMAND,
|
|
392
344
|
handler: (accessor, params) => {
|
|
393
|
-
var _documentDataModel$ge;
|
|
394
345
|
if (!params) return false;
|
|
395
346
|
const commandService = accessor.get(ICommandService);
|
|
396
347
|
const univerInstanceService = accessor.get(IUniverInstanceService);
|
|
397
348
|
const { unitId, drawings } = params;
|
|
398
349
|
const documentDataModel = univerInstanceService.getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
399
350
|
if (!documentDataModel) return false;
|
|
400
|
-
const oldDrawings =
|
|
351
|
+
const oldDrawings = documentDataModel.getSnapshot().drawings ?? {};
|
|
401
352
|
const jsonX = JSONX.getInstance();
|
|
402
353
|
const actions = [];
|
|
403
354
|
for (const { drawingId, key, value } of drawings) {
|
|
@@ -478,13 +429,12 @@ const UpdateDocDrawingWrappingStyleCommand = {
|
|
|
478
429
|
id: "doc.command.update-doc-drawing-wrapping-style",
|
|
479
430
|
type: CommandType.COMMAND,
|
|
480
431
|
handler: (accessor, params) => {
|
|
481
|
-
var _documentDataModel$ge;
|
|
482
432
|
if (!params) return false;
|
|
483
433
|
const { drawings, wrappingStyle, unitId } = params;
|
|
484
434
|
const commandService = accessor.get(ICommandService);
|
|
485
435
|
const documentDataModel = accessor.get(IUniverInstanceService).getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
486
436
|
if (!documentDataModel) return false;
|
|
487
|
-
const oldDrawings =
|
|
437
|
+
const oldDrawings = documentDataModel.getDrawings() ?? {};
|
|
488
438
|
const jsonX = JSONX.getInstance();
|
|
489
439
|
const rawActions = [];
|
|
490
440
|
for (const drawing of drawings) {
|
|
@@ -587,8 +537,8 @@ let DocDrawingController = class DocDrawingController extends Disposable {
|
|
|
587
537
|
const drawings = doc.getSnapshot().drawings;
|
|
588
538
|
const drawingOrder = doc.getSnapshot().drawingsOrder;
|
|
589
539
|
return JSON.stringify({
|
|
590
|
-
data: drawings
|
|
591
|
-
order: drawingOrder
|
|
540
|
+
data: drawings ?? {},
|
|
541
|
+
order: drawingOrder ?? []
|
|
592
542
|
});
|
|
593
543
|
}
|
|
594
544
|
return "";
|
|
@@ -619,10 +569,9 @@ let DocDrawingController = class DocDrawingController extends Disposable {
|
|
|
619
569
|
});
|
|
620
570
|
},
|
|
621
571
|
onLoad: (unitId, value) => {
|
|
622
|
-
var _value$data, _value$order;
|
|
623
572
|
this._setDrawingDataForUnit(unitId, {
|
|
624
|
-
data:
|
|
625
|
-
order:
|
|
573
|
+
data: value.data ?? {},
|
|
574
|
+
order: value.order ?? []
|
|
626
575
|
});
|
|
627
576
|
}
|
|
628
577
|
}));
|
|
@@ -675,7 +624,7 @@ DocDrawingController = __decorate([
|
|
|
675
624
|
//#endregion
|
|
676
625
|
//#region package.json
|
|
677
626
|
var name = "@univerjs/docs-drawing";
|
|
678
|
-
var version = "1.0.0-
|
|
627
|
+
var version = "1.0.0-beta.1";
|
|
679
628
|
|
|
680
629
|
//#endregion
|
|
681
630
|
//#region src/config/config.ts
|
package/lib/facade.js
CHANGED
|
@@ -96,8 +96,8 @@ var FDocumentImage = class {
|
|
|
96
96
|
* ```
|
|
97
97
|
*/
|
|
98
98
|
getSize() {
|
|
99
|
-
var _this$
|
|
100
|
-
return (
|
|
99
|
+
var _this$getImageData3;
|
|
100
|
+
return ((_this$getImageData3 = this.getImageData()) === null || _this$getImageData3 === void 0 ? void 0 : _this$getImageData3.docTransform.size) ?? null;
|
|
101
101
|
}
|
|
102
102
|
/**
|
|
103
103
|
* Gets the current clockwise rotation angle.
|
|
@@ -130,8 +130,8 @@ var FDocumentImage = class {
|
|
|
130
130
|
* ```
|
|
131
131
|
*/
|
|
132
132
|
getPositionH() {
|
|
133
|
-
var _this$
|
|
134
|
-
return (
|
|
133
|
+
var _this$getImageData5;
|
|
134
|
+
return ((_this$getImageData5 = this.getImageData()) === null || _this$getImageData5 === void 0 ? void 0 : _this$getImageData5.docTransform.positionH) ?? null;
|
|
135
135
|
}
|
|
136
136
|
/**
|
|
137
137
|
* Gets the current vertical position.
|
|
@@ -147,8 +147,8 @@ var FDocumentImage = class {
|
|
|
147
147
|
* ```
|
|
148
148
|
*/
|
|
149
149
|
getPositionV() {
|
|
150
|
-
var _this$
|
|
151
|
-
return (
|
|
150
|
+
var _this$getImageData6;
|
|
151
|
+
return ((_this$getImageData6 = this.getImageData()) === null || _this$getImageData6 === void 0 ? void 0 : _this$getImageData6.docTransform.positionV) ?? null;
|
|
152
152
|
}
|
|
153
153
|
/**
|
|
154
154
|
* Gets the current raw document image data.
|
|
@@ -272,7 +272,7 @@ var FDocumentImage = class {
|
|
|
272
272
|
*
|
|
273
273
|
* if (image) {
|
|
274
274
|
* // Float the image beside body text without covering it.
|
|
275
|
-
* const success = image.setWrappingStyle(univerAPI.Enum.
|
|
275
|
+
* const success = image.setWrappingStyle(univerAPI.Enum.TextWrappingStyle.WRAP_SQUARE);
|
|
276
276
|
* console.log(success);
|
|
277
277
|
* }
|
|
278
278
|
* ```
|
|
@@ -437,7 +437,6 @@ var FDocumentImage = class {
|
|
|
437
437
|
//#region src/facade/f-document.ts
|
|
438
438
|
var FDocumentImageMixin = class extends FDocument {
|
|
439
439
|
async insertImage(options) {
|
|
440
|
-
var _options$wrappingStyl, _options$angle, _options$positionH, _options$positionV;
|
|
441
440
|
const unitId = this.getId();
|
|
442
441
|
const imageId = generateRandomId(6);
|
|
443
442
|
const size = options.width != null && options.height != null ? {
|
|
@@ -445,12 +444,12 @@ var FDocumentImageMixin = class extends FDocument {
|
|
|
445
444
|
height: options.height
|
|
446
445
|
} : resolveImageSize(await this._getIntrinsicSize(options.source, options.imageSourceType), options);
|
|
447
446
|
const defaultTransform = buildDocTransform(size.width, size.height);
|
|
448
|
-
const wrappingStyle =
|
|
447
|
+
const wrappingStyle = options.wrappingStyle ?? TextWrappingStyle.INLINE;
|
|
449
448
|
const docTransform = {
|
|
450
449
|
...defaultTransform,
|
|
451
|
-
angle:
|
|
452
|
-
positionH:
|
|
453
|
-
positionV:
|
|
450
|
+
angle: options.angle ?? defaultTransform.angle,
|
|
451
|
+
positionH: options.positionH ?? defaultTransform.positionH,
|
|
452
|
+
positionV: options.positionV ?? defaultTransform.positionV
|
|
454
453
|
};
|
|
455
454
|
const transform = docDrawingPositionToTransform(docTransform);
|
|
456
455
|
const drawing = {
|
|
@@ -486,10 +485,9 @@ var FDocumentImageMixin = class extends FDocument {
|
|
|
486
485
|
return this._injector.createInstance(FDocumentImage, this, imageId, this._injector);
|
|
487
486
|
}
|
|
488
487
|
getImages() {
|
|
489
|
-
var _documentDataModel$ge, _documentDataModel$ge2;
|
|
490
488
|
const documentDataModel = this.getDocumentDataModel();
|
|
491
|
-
const drawings =
|
|
492
|
-
return (
|
|
489
|
+
const drawings = documentDataModel.getDrawings() ?? {};
|
|
490
|
+
return (documentDataModel.getDrawingsOrder() ?? Object.keys(drawings)).filter((drawingId) => {
|
|
493
491
|
var _drawings$drawingId;
|
|
494
492
|
return ((_drawings$drawingId = drawings[drawingId]) === null || _drawings$drawingId === void 0 ? void 0 : _drawings$drawingId.drawingType) === DrawingTypeEnum.DRAWING_IMAGE;
|
|
495
493
|
}).map((drawingId) => this._injector.createInstance(FDocumentImage, this, drawingId, this._injector));
|
|
@@ -551,7 +549,7 @@ FDocument.extend(FDocumentImageMixin);
|
|
|
551
549
|
* limitations under the License.
|
|
552
550
|
*/
|
|
553
551
|
var FDocumentImageEnumMixin = class extends FEnum {
|
|
554
|
-
get
|
|
552
|
+
get TextWrappingStyle() {
|
|
555
553
|
return TextWrappingStyle;
|
|
556
554
|
}
|
|
557
555
|
get DocsImageRelativeFromH() {
|
package/lib/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ArrangeTypeEnum, BooleanNumber, BuildTextUtils, CommandType, DependentOn, Disposable, ICommandService, IConfigService, IResourceManagerService, IUndoRedoService, IUniverInstanceService, Inject, Injector, JSONX, MemoryCursor, Plugin, PositionedObjectLayoutType, TextX, TextXActionType, Tools, UniverInstanceType, createIdentifier,
|
|
1
|
+
import { ArrangeTypeEnum, BooleanNumber, BuildTextUtils, CommandType, DependentOn, Disposable, ICommandService, IConfigService, IResourceManagerService, IUndoRedoService, IUniverInstanceService, Inject, Injector, JSONX, MemoryCursor, Plugin, PositionedObjectLayoutType, TextX, TextXActionType, Tools, UniverInstanceType, createIdentifier, getRichTextEditPath, merge, normalizeDrawingOrderIndex, toDisposable, touchDependencies } from "@univerjs/core";
|
|
2
2
|
import { DocSelectionManagerService, RichTextEditingMutation, UniverDocsPlugin, getContentInsertRange, normalizeTextRange } from "@univerjs/docs";
|
|
3
3
|
import { IDrawingManagerService, UnitDrawingService, UniverDrawingPlugin } from "@univerjs/drawing";
|
|
4
4
|
|
|
@@ -10,81 +10,29 @@ const InsertDocDrawingCommand = {
|
|
|
10
10
|
id: "doc.command.insert-doc-image",
|
|
11
11
|
type: CommandType.COMMAND,
|
|
12
12
|
handler: (accessor, params) => {
|
|
13
|
-
var _documentDataModel$ge, _snapshot$headers, _snapshot$footers
|
|
13
|
+
var _documentDataModel$ge, _snapshot$headers, _snapshot$footers;
|
|
14
14
|
if (!params) return false;
|
|
15
15
|
const commandService = accessor.get(ICommandService);
|
|
16
16
|
const univerInstanceService = accessor.get(IUniverInstanceService);
|
|
17
17
|
const { unitId, drawings, textRange } = params;
|
|
18
18
|
const documentDataModel = univerInstanceService.getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
19
19
|
if (!documentDataModel) return false;
|
|
20
|
-
const
|
|
21
|
-
if (!
|
|
22
|
-
const {
|
|
23
|
-
|
|
24
|
-
if (!body) return false;
|
|
25
|
-
const textX = new TextX();
|
|
26
|
-
const jsonX = JSONX.getInstance();
|
|
27
|
-
const rawActions = [];
|
|
20
|
+
const resolvedTextRange = resolveDocDrawingInsertTextRange(accessor, unitId, textRange);
|
|
21
|
+
if (!resolvedTextRange) return false;
|
|
22
|
+
const { segmentId = "" } = resolvedTextRange;
|
|
23
|
+
if (!((_documentDataModel$ge = documentDataModel.getSelfOrHeaderFooterModel(segmentId)) === null || _documentDataModel$ge === void 0 ? void 0 : _documentDataModel$ge.getBody())) return false;
|
|
28
24
|
const snapshot = documentDataModel.getSnapshot();
|
|
29
|
-
const targetDrawings = !!((_snapshot$headers = snapshot.headers) === null || _snapshot$headers === void 0 ? void 0 : _snapshot$headers[segmentId]) || !!((_snapshot$footers = snapshot.footers) === null || _snapshot$footers === void 0 ? void 0 : _snapshot$footers[segmentId]) ? drawings.map((drawing) => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
let removeDrawingLen = 0;
|
|
39
|
-
if (collapsed) {
|
|
40
|
-
if (startOffset > 0) textX.push({
|
|
41
|
-
t: TextXActionType.RETAIN,
|
|
42
|
-
len: startOffset
|
|
43
|
-
});
|
|
44
|
-
} else {
|
|
45
|
-
var _documentDataModel$ge2, _documentDataModel$ge3;
|
|
46
|
-
const dos = BuildTextUtils.selection.delete([targetTextRange], body, 0, null, false);
|
|
47
|
-
textX.push(...dos);
|
|
48
|
-
const removedCustomBlockIds = getCustomBlockIdsInSelections(body, [targetTextRange]);
|
|
49
|
-
const drawings = (_documentDataModel$ge2 = documentDataModel.getDrawings()) !== null && _documentDataModel$ge2 !== void 0 ? _documentDataModel$ge2 : {};
|
|
50
|
-
const drawingOrder = (_documentDataModel$ge3 = documentDataModel.getDrawingsOrder()) !== null && _documentDataModel$ge3 !== void 0 ? _documentDataModel$ge3 : [];
|
|
51
|
-
const sortedRemovedCustomBlockIds = removedCustomBlockIds.sort((a, b) => {
|
|
52
|
-
if (drawingOrder.indexOf(a) > drawingOrder.indexOf(b)) return -1;
|
|
53
|
-
else if (drawingOrder.indexOf(a) < drawingOrder.indexOf(b)) return 1;
|
|
54
|
-
return 0;
|
|
55
|
-
});
|
|
56
|
-
if (sortedRemovedCustomBlockIds.length > 0) for (const blockId of sortedRemovedCustomBlockIds) {
|
|
57
|
-
const drawing = drawings[blockId];
|
|
58
|
-
const drawingIndex = drawingOrder.indexOf(blockId);
|
|
59
|
-
if (drawing == null || drawingIndex < 0) continue;
|
|
60
|
-
const removeDrawingAction = jsonX.removeOp(["drawings", blockId], drawing);
|
|
61
|
-
const removeDrawingOrderAction = jsonX.removeOp(["drawingsOrder", drawingIndex], blockId);
|
|
62
|
-
rawActions.push(removeDrawingAction);
|
|
63
|
-
rawActions.push(removeDrawingOrderAction);
|
|
64
|
-
removeDrawingLen++;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
textX.push({
|
|
68
|
-
t: TextXActionType.INSERT,
|
|
69
|
-
body: {
|
|
70
|
-
dataStream: "\b".repeat(targetDrawings.length),
|
|
71
|
-
customBlocks: targetDrawings.map((drawing, i) => ({
|
|
72
|
-
startIndex: i,
|
|
73
|
-
blockId: drawing.drawingId
|
|
74
|
-
}))
|
|
75
|
-
},
|
|
76
|
-
len: targetDrawings.length
|
|
25
|
+
const targetDrawings = !!((_snapshot$headers = snapshot.headers) === null || _snapshot$headers === void 0 ? void 0 : _snapshot$headers[segmentId]) || !!((_snapshot$footers = snapshot.footers) === null || _snapshot$footers === void 0 ? void 0 : _snapshot$footers[segmentId]) ? drawings.map((drawing) => ({
|
|
26
|
+
...drawing,
|
|
27
|
+
isMultiTransform: BooleanNumber.TRUE,
|
|
28
|
+
transforms: drawing.transforms ?? (drawing.transform ? [drawing.transform] : null)
|
|
29
|
+
})) : drawings;
|
|
30
|
+
const actions = BuildTextUtils.drawing.add({
|
|
31
|
+
selection: resolvedTextRange,
|
|
32
|
+
documentDataModel,
|
|
33
|
+
drawings: targetDrawings
|
|
77
34
|
});
|
|
78
|
-
|
|
79
|
-
const placeHolderAction = jsonX.editOp(textX.serialize(), path);
|
|
80
|
-
rawActions.push(placeHolderAction);
|
|
81
|
-
for (const drawing of targetDrawings) {
|
|
82
|
-
const { drawingId } = drawing;
|
|
83
|
-
const addDrawingAction = jsonX.insertOp(["drawings", drawingId], drawing);
|
|
84
|
-
const addDrawingOrderAction = jsonX.insertOp(["drawingsOrder", drawingOrderLength - removeDrawingLen], drawingId);
|
|
85
|
-
rawActions.push(addDrawingAction);
|
|
86
|
-
rawActions.push(addDrawingOrderAction);
|
|
87
|
-
}
|
|
35
|
+
if (!actions) return false;
|
|
88
36
|
const doMutation = {
|
|
89
37
|
id: RichTextEditingMutation.id,
|
|
90
38
|
params: {
|
|
@@ -93,25 +41,21 @@ const InsertDocDrawingCommand = {
|
|
|
93
41
|
textRanges: []
|
|
94
42
|
}
|
|
95
43
|
};
|
|
96
|
-
doMutation.params.actions =
|
|
97
|
-
return JSONX.compose(acc, cur);
|
|
98
|
-
}, null);
|
|
44
|
+
doMutation.params.actions = actions;
|
|
99
45
|
const result = commandService.syncExecuteCommand(doMutation.id, doMutation.params);
|
|
100
46
|
return Boolean(result);
|
|
101
47
|
}
|
|
102
48
|
};
|
|
103
49
|
function resolveDocDrawingInsertTextRange(accessor, unitId, textRange) {
|
|
104
|
-
var _ref, _contentInsertRange$s;
|
|
105
50
|
const activeTextRange = accessor.get(DocSelectionManagerService).getActiveTextRange();
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
if (!contentInsertRange) return activeTextRange !== null && activeTextRange !== void 0 ? activeTextRange : null;
|
|
51
|
+
const contentInsertRange = (textRange ? normalizeTextRange(textRange) : null) ?? getContentInsertRange(accessor, unitId);
|
|
52
|
+
if (!contentInsertRange) return activeTextRange ?? null;
|
|
109
53
|
return {
|
|
110
54
|
...activeTextRange,
|
|
111
55
|
startOffset: contentInsertRange.startOffset,
|
|
112
56
|
endOffset: contentInsertRange.endOffset,
|
|
113
57
|
collapsed: contentInsertRange.startOffset === contentInsertRange.endOffset,
|
|
114
|
-
segmentId:
|
|
58
|
+
segmentId: contentInsertRange.segmentId ?? (activeTextRange === null || activeTextRange === void 0 ? void 0 : activeTextRange.segmentId) ?? ""
|
|
115
59
|
};
|
|
116
60
|
}
|
|
117
61
|
|
|
@@ -201,7 +145,7 @@ const RemoveDocDrawingCommand = {
|
|
|
201
145
|
id: "doc.command.remove-doc-image",
|
|
202
146
|
type: CommandType.COMMAND,
|
|
203
147
|
handler: (accessor, params) => {
|
|
204
|
-
var
|
|
148
|
+
var _documentDataModel$ge;
|
|
205
149
|
if (!params) return false;
|
|
206
150
|
const commandService = accessor.get(ICommandService);
|
|
207
151
|
const undoRedoService = accessor.get(IUndoRedoService);
|
|
@@ -212,29 +156,27 @@ const RemoveDocDrawingCommand = {
|
|
|
212
156
|
const documentDataModel = univerInstanceService.getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
213
157
|
if (!documentDataModel || removeDrawings.length === 0) return false;
|
|
214
158
|
const activeTextRange = docSelectionManagerService.getActiveTextRange();
|
|
215
|
-
const
|
|
216
|
-
const
|
|
217
|
-
const segmentId = (_ref = (_contentInsertRange$s = contentInsertRange === null || contentInsertRange === void 0 ? void 0 : contentInsertRange.segmentId) !== null && _contentInsertRange$s !== void 0 ? _contentInsertRange$s : activeTextRange === null || activeTextRange === void 0 ? void 0 : activeTextRange.segmentId) !== null && _ref !== void 0 ? _ref : "";
|
|
159
|
+
const contentInsertRange = (!textRange ? null : normalizeTextRange(textRange)) ?? getContentInsertRange(accessor, unitId);
|
|
160
|
+
const segmentId = (contentInsertRange === null || contentInsertRange === void 0 ? void 0 : contentInsertRange.segmentId) ?? (activeTextRange === null || activeTextRange === void 0 ? void 0 : activeTextRange.segmentId) ?? "";
|
|
218
161
|
const textX = new TextX();
|
|
219
162
|
const jsonX = JSONX.getInstance();
|
|
220
|
-
const customBlocks = (_documentDataModel$ge =
|
|
163
|
+
const customBlocks = ((_documentDataModel$ge = documentDataModel.getSelfOrHeaderFooterModel(segmentId)) === null || _documentDataModel$ge === void 0 || (_documentDataModel$ge = _documentDataModel$ge.getBody()) === null || _documentDataModel$ge === void 0 ? void 0 : _documentDataModel$ge.customBlocks) ?? [];
|
|
221
164
|
const removeCustomBlocks = removeDrawings.map((drawing) => customBlocks.find((customBlock) => customBlock.blockId === drawing.drawingId)).filter((block) => !!block).sort((a, b) => a.startIndex > b.startIndex ? 1 : -1);
|
|
222
165
|
if (removeCustomBlocks.length === 0) return false;
|
|
223
|
-
const drawings =
|
|
166
|
+
const drawings = documentDataModel.getDrawings() ?? {};
|
|
224
167
|
const removeDrawingParamById = new Map(removeDrawings.map((drawing) => [drawing.drawingId, drawing]));
|
|
225
168
|
const removeDrawingSnapshots = removeCustomBlocks.map((block) => drawings[block.blockId]).filter((drawing) => drawing != null);
|
|
226
169
|
const resourceRedoMutations = [];
|
|
227
170
|
const resourceUndoMutations = [];
|
|
228
171
|
const resourceMutationGroups = [];
|
|
229
172
|
for (const block of removeCustomBlocks) {
|
|
230
|
-
var _removeDrawingParam$s;
|
|
231
173
|
const { blockId } = block;
|
|
232
174
|
const drawing = drawings[blockId];
|
|
233
175
|
if (drawing == null) continue;
|
|
234
176
|
const removeDrawingParam = removeDrawingParamById.get(blockId);
|
|
235
177
|
const mutationInfos = drawingAdapterService.getRemoveDrawingMutationInfos({
|
|
236
178
|
unitId,
|
|
237
|
-
subUnitId: (
|
|
179
|
+
subUnitId: (removeDrawingParam === null || removeDrawingParam === void 0 ? void 0 : removeDrawingParam.subUnitId) ?? unitId,
|
|
238
180
|
drawing,
|
|
239
181
|
removeDrawings: removeDrawingSnapshots
|
|
240
182
|
});
|
|
@@ -341,6 +283,16 @@ function getArrangedDrawingOrder(drawingOrder, drawingIds, arrangeType) {
|
|
|
341
283
|
}
|
|
342
284
|
return arrangedDrawingOrder;
|
|
343
285
|
}
|
|
286
|
+
function getDrawingOrderAtIndex(drawingOrder, drawingIds, zOrder) {
|
|
287
|
+
if (drawingIds.length !== 1) return [...drawingOrder];
|
|
288
|
+
const arrangedDrawingOrder = [...drawingOrder];
|
|
289
|
+
const currentIndex = arrangedDrawingOrder.indexOf(drawingIds[0]);
|
|
290
|
+
if (currentIndex < 0) return arrangedDrawingOrder;
|
|
291
|
+
const [drawingId] = arrangedDrawingOrder.splice(currentIndex, 1);
|
|
292
|
+
const targetIndex = normalizeDrawingOrderIndex(zOrder, drawingOrder.length);
|
|
293
|
+
arrangedDrawingOrder.splice(targetIndex, 0, drawingId);
|
|
294
|
+
return arrangedDrawingOrder;
|
|
295
|
+
}
|
|
344
296
|
/**
|
|
345
297
|
* Converts the target order into granular JSONX move operations. This avoids replacing
|
|
346
298
|
* the entire drawingsOrder array and keeps collaboration conflicts scoped to moved items.
|
|
@@ -369,11 +321,11 @@ const SetDocDrawingArrangeCommand = {
|
|
|
369
321
|
handler: (accessor, params) => {
|
|
370
322
|
const commandService = accessor.get(ICommandService);
|
|
371
323
|
if (params == null) return false;
|
|
372
|
-
const { unitId, drawingIds
|
|
324
|
+
const { unitId, drawingIds } = params;
|
|
373
325
|
const documentDataModel = accessor.get(IUniverInstanceService).getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
374
326
|
const drawingOrder = documentDataModel === null || documentDataModel === void 0 ? void 0 : documentDataModel.getDrawingsOrder();
|
|
375
327
|
if (!drawingOrder) return false;
|
|
376
|
-
const actions = createDrawingOrderActions(drawingOrder, getArrangedDrawingOrder(drawingOrder, drawingIds, arrangeType));
|
|
328
|
+
const actions = createDrawingOrderActions(drawingOrder, params.zOrder !== void 0 ? getDrawingOrderAtIndex(drawingOrder, drawingIds, params.zOrder) : getArrangedDrawingOrder(drawingOrder, drawingIds, params.arrangeType));
|
|
377
329
|
if (JSONX.isNoop(actions)) return false;
|
|
378
330
|
const result = commandService.syncExecuteCommand(RichTextEditingMutation.id, {
|
|
379
331
|
unitId,
|
|
@@ -390,14 +342,13 @@ const UpdateDrawingDocTransformCommand = {
|
|
|
390
342
|
id: "doc.command.update-drawing-doc-transform",
|
|
391
343
|
type: CommandType.COMMAND,
|
|
392
344
|
handler: (accessor, params) => {
|
|
393
|
-
var _documentDataModel$ge;
|
|
394
345
|
if (!params) return false;
|
|
395
346
|
const commandService = accessor.get(ICommandService);
|
|
396
347
|
const univerInstanceService = accessor.get(IUniverInstanceService);
|
|
397
348
|
const { unitId, drawings } = params;
|
|
398
349
|
const documentDataModel = univerInstanceService.getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
399
350
|
if (!documentDataModel) return false;
|
|
400
|
-
const oldDrawings =
|
|
351
|
+
const oldDrawings = documentDataModel.getSnapshot().drawings ?? {};
|
|
401
352
|
const jsonX = JSONX.getInstance();
|
|
402
353
|
const actions = [];
|
|
403
354
|
for (const { drawingId, key, value } of drawings) {
|
|
@@ -478,13 +429,12 @@ const UpdateDocDrawingWrappingStyleCommand = {
|
|
|
478
429
|
id: "doc.command.update-doc-drawing-wrapping-style",
|
|
479
430
|
type: CommandType.COMMAND,
|
|
480
431
|
handler: (accessor, params) => {
|
|
481
|
-
var _documentDataModel$ge;
|
|
482
432
|
if (!params) return false;
|
|
483
433
|
const { drawings, wrappingStyle, unitId } = params;
|
|
484
434
|
const commandService = accessor.get(ICommandService);
|
|
485
435
|
const documentDataModel = accessor.get(IUniverInstanceService).getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
486
436
|
if (!documentDataModel) return false;
|
|
487
|
-
const oldDrawings =
|
|
437
|
+
const oldDrawings = documentDataModel.getDrawings() ?? {};
|
|
488
438
|
const jsonX = JSONX.getInstance();
|
|
489
439
|
const rawActions = [];
|
|
490
440
|
for (const drawing of drawings) {
|
|
@@ -587,8 +537,8 @@ let DocDrawingController = class DocDrawingController extends Disposable {
|
|
|
587
537
|
const drawings = doc.getSnapshot().drawings;
|
|
588
538
|
const drawingOrder = doc.getSnapshot().drawingsOrder;
|
|
589
539
|
return JSON.stringify({
|
|
590
|
-
data: drawings
|
|
591
|
-
order: drawingOrder
|
|
540
|
+
data: drawings ?? {},
|
|
541
|
+
order: drawingOrder ?? []
|
|
592
542
|
});
|
|
593
543
|
}
|
|
594
544
|
return "";
|
|
@@ -619,10 +569,9 @@ let DocDrawingController = class DocDrawingController extends Disposable {
|
|
|
619
569
|
});
|
|
620
570
|
},
|
|
621
571
|
onLoad: (unitId, value) => {
|
|
622
|
-
var _value$data, _value$order;
|
|
623
572
|
this._setDrawingDataForUnit(unitId, {
|
|
624
|
-
data:
|
|
625
|
-
order:
|
|
573
|
+
data: value.data ?? {},
|
|
574
|
+
order: value.order ?? []
|
|
626
575
|
});
|
|
627
576
|
}
|
|
628
577
|
}));
|
|
@@ -675,7 +624,7 @@ DocDrawingController = __decorate([
|
|
|
675
624
|
//#endregion
|
|
676
625
|
//#region package.json
|
|
677
626
|
var name = "@univerjs/docs-drawing";
|
|
678
|
-
var version = "1.0.0-
|
|
627
|
+
var version = "1.0.0-beta.1";
|
|
679
628
|
|
|
680
629
|
//#endregion
|
|
681
630
|
//#region src/config/config.ts
|
|
@@ -16,9 +16,13 @@
|
|
|
16
16
|
import type { ICommand } from '@univerjs/core';
|
|
17
17
|
import type { IDrawingOrderMapParam } from '@univerjs/drawing';
|
|
18
18
|
import { ArrangeTypeEnum } from '@univerjs/core';
|
|
19
|
-
export
|
|
19
|
+
export type ISetDocDrawingArrangeCommandParams = IDrawingOrderMapParam & ({
|
|
20
20
|
arrangeType: ArrangeTypeEnum;
|
|
21
|
-
|
|
21
|
+
zOrder?: never;
|
|
22
|
+
} | {
|
|
23
|
+
arrangeType?: never;
|
|
24
|
+
zOrder: number;
|
|
25
|
+
});
|
|
22
26
|
/**
|
|
23
27
|
* The command to arrange drawings.
|
|
24
28
|
*/
|