@univerjs/docs-drawing 1.0.0-insiders.20260809-70eefdd → 1.0.0-rc.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/LICENSE +176 -0
- package/README.md +1 -2
- package/lib/cjs/facade.js +13 -9
- package/lib/cjs/index.js +163 -42
- package/lib/es/facade.js +15 -11
- package/lib/es/index.js +164 -45
- package/lib/facade.js +15 -11
- package/lib/index.js +164 -45
- package/lib/types/commands/commands/remove-doc-drawing.command.d.ts +2 -1
- package/lib/types/commands/commands/set-drawing-arrange.command.d.ts +6 -2
- package/lib/types/commands/commands/update-doc-drawing-transform.command.d.ts +3 -3
- package/lib/types/commands/commands/update-doc-drawing-wrapping-style.command.d.ts +0 -6
- package/lib/types/controllers/doc-drawing.controller.d.ts +1 -0
- package/lib/types/facade/f-document-image.d.ts +3 -2
- package/lib/types/index.d.ts +1 -0
- package/lib/types/services/doc-drawing-source.d.ts +27 -0
- package/lib/umd/facade.js +1 -1
- package/lib/umd/index.js +1 -1
- package/package.json +7 -7
package/lib/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
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, toDisposable, touchDependencies } from "@univerjs/core";
|
|
2
|
-
import { DocSelectionManagerService, RichTextEditingMutation, UniverDocsPlugin, getContentInsertRange, normalizeTextRange } from "@univerjs/docs";
|
|
1
|
+
import { ArrangeTypeEnum, BooleanNumber, BuildTextUtils, CommandType, DependentOn, Disposable, DrawingTypeEnum, 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
|
+
import { DocHistoryAction, DocSelectionManagerService, RichTextEditingMutation, UniverDocsPlugin, getContentInsertRange, normalizeTextRange } from "@univerjs/docs";
|
|
3
3
|
import { IDrawingManagerService, UnitDrawingService, UniverDrawingPlugin } from "@univerjs/drawing";
|
|
4
4
|
|
|
5
5
|
//#region src/commands/commands/insert-doc-drawing.command.ts
|
|
@@ -10,7 +10,7 @@ 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$notes, _snapshot$headers, _snapshot$footers;
|
|
14
14
|
if (!params) return false;
|
|
15
15
|
const commandService = accessor.get(ICommandService);
|
|
16
16
|
const univerInstanceService = accessor.get(IUniverInstanceService);
|
|
@@ -22,11 +22,17 @@ const InsertDocDrawingCommand = {
|
|
|
22
22
|
const { segmentId = "" } = resolvedTextRange;
|
|
23
23
|
if (!((_documentDataModel$ge = documentDataModel.getSelfOrHeaderFooterModel(segmentId)) === null || _documentDataModel$ge === void 0 ? void 0 : _documentDataModel$ge.getBody())) return false;
|
|
24
24
|
const snapshot = documentDataModel.getSnapshot();
|
|
25
|
-
const
|
|
25
|
+
const isFootnote = !!((_snapshot$notes = snapshot.notes) === null || _snapshot$notes === void 0 ? void 0 : _snapshot$notes[segmentId]);
|
|
26
|
+
if (isFootnote && drawings.some((drawing) => drawing.drawingType !== DrawingTypeEnum.DRAWING_IMAGE)) return false;
|
|
27
|
+
let 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
28
|
...drawing,
|
|
27
29
|
isMultiTransform: BooleanNumber.TRUE,
|
|
28
30
|
transforms: drawing.transforms ?? (drawing.transform ? [drawing.transform] : null)
|
|
29
31
|
})) : drawings;
|
|
32
|
+
if (isFootnote) targetDrawings = drawings.map((drawing) => ({
|
|
33
|
+
...drawing,
|
|
34
|
+
layoutType: PositionedObjectLayoutType.INLINE
|
|
35
|
+
}));
|
|
30
36
|
const actions = BuildTextUtils.drawing.add({
|
|
31
37
|
selection: resolvedTextRange,
|
|
32
38
|
documentDataModel,
|
|
@@ -37,6 +43,7 @@ const InsertDocDrawingCommand = {
|
|
|
37
43
|
id: RichTextEditingMutation.id,
|
|
38
44
|
params: {
|
|
39
45
|
unitId,
|
|
46
|
+
segmentId,
|
|
40
47
|
actions: [],
|
|
41
48
|
textRanges: []
|
|
42
49
|
}
|
|
@@ -139,13 +146,60 @@ var DocDrawingAdapterService = class {
|
|
|
139
146
|
}
|
|
140
147
|
};
|
|
141
148
|
|
|
149
|
+
//#endregion
|
|
150
|
+
//#region src/services/doc-drawing-source.ts
|
|
151
|
+
/** Resolve persisted drawing ownership independently of the current text selection. */
|
|
152
|
+
function findDocDrawing(snapshot, drawingId) {
|
|
153
|
+
var _snapshot$drawings;
|
|
154
|
+
const drawing = (_snapshot$drawings = snapshot.drawings) === null || _snapshot$drawings === void 0 ? void 0 : _snapshot$drawings[drawingId];
|
|
155
|
+
if (drawing) return {
|
|
156
|
+
drawing,
|
|
157
|
+
path: ["drawings", drawingId],
|
|
158
|
+
segmentId: ""
|
|
159
|
+
};
|
|
160
|
+
for (const [segmentId, note] of Object.entries(snapshot.notes ?? {})) {
|
|
161
|
+
var _note$drawings;
|
|
162
|
+
const drawing = (_note$drawings = note.drawings) === null || _note$drawings === void 0 ? void 0 : _note$drawings[drawingId];
|
|
163
|
+
if (drawing) return {
|
|
164
|
+
drawing,
|
|
165
|
+
path: [
|
|
166
|
+
"notes",
|
|
167
|
+
segmentId,
|
|
168
|
+
"drawings",
|
|
169
|
+
drawingId
|
|
170
|
+
],
|
|
171
|
+
segmentId
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/** The render registry is flat; persisted note resources retain their own scope. */
|
|
176
|
+
function collectDocDrawings(snapshot) {
|
|
177
|
+
let drawings = snapshot.drawings ?? {};
|
|
178
|
+
let drawingsOrder = snapshot.drawingsOrder ?? Object.keys(drawings);
|
|
179
|
+
let copied = false;
|
|
180
|
+
for (const note of Object.values(snapshot.notes ?? {})) {
|
|
181
|
+
if (!note.drawings || Object.keys(note.drawings).length === 0) continue;
|
|
182
|
+
if (!copied) {
|
|
183
|
+
drawings = { ...drawings };
|
|
184
|
+
drawingsOrder = [...drawingsOrder];
|
|
185
|
+
copied = true;
|
|
186
|
+
}
|
|
187
|
+
Object.assign(drawings, note.drawings);
|
|
188
|
+
drawingsOrder.push(...note.drawingsOrder ?? Object.keys(note.drawings));
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
drawings,
|
|
192
|
+
drawingsOrder
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
142
196
|
//#endregion
|
|
143
197
|
//#region src/commands/commands/remove-doc-drawing.command.ts
|
|
144
198
|
const RemoveDocDrawingCommand = {
|
|
145
199
|
id: "doc.command.remove-doc-image",
|
|
146
200
|
type: CommandType.COMMAND,
|
|
147
201
|
handler: (accessor, params) => {
|
|
148
|
-
var _documentDataModel$ge;
|
|
202
|
+
var _snapshot$notes, _documentDataModel$ge;
|
|
149
203
|
if (!params) return false;
|
|
150
204
|
const commandService = accessor.get(ICommandService);
|
|
151
205
|
const undoRedoService = accessor.get(IUndoRedoService);
|
|
@@ -157,13 +211,22 @@ const RemoveDocDrawingCommand = {
|
|
|
157
211
|
if (!documentDataModel || removeDrawings.length === 0) return false;
|
|
158
212
|
const activeTextRange = docSelectionManagerService.getActiveTextRange();
|
|
159
213
|
const contentInsertRange = (!textRange ? null : normalizeTextRange(textRange)) ?? getContentInsertRange(accessor, unitId);
|
|
160
|
-
const
|
|
214
|
+
const snapshot = documentDataModel.getSnapshot();
|
|
215
|
+
const noteSegments = removeDrawings.map(({ drawingId }) => {
|
|
216
|
+
var _findDocDrawing;
|
|
217
|
+
return ((_findDocDrawing = findDocDrawing(snapshot, drawingId)) === null || _findDocDrawing === void 0 ? void 0 : _findDocDrawing.segmentId) ?? "";
|
|
218
|
+
});
|
|
219
|
+
if (noteSegments.some((id) => id !== noteSegments[0])) return false;
|
|
220
|
+
const segmentId = noteSegments[0] || ((contentInsertRange === null || contentInsertRange === void 0 ? void 0 : contentInsertRange.segmentId) ?? (activeTextRange === null || activeTextRange === void 0 ? void 0 : activeTextRange.segmentId) ?? "");
|
|
221
|
+
const footnote = (_snapshot$notes = snapshot.notes) === null || _snapshot$notes === void 0 ? void 0 : _snapshot$notes[segmentId];
|
|
222
|
+
const source = footnote ?? snapshot;
|
|
223
|
+
const prefix = footnote ? ["notes", segmentId] : [];
|
|
161
224
|
const textX = new TextX();
|
|
162
225
|
const jsonX = JSONX.getInstance();
|
|
163
226
|
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) ?? [];
|
|
164
227
|
const removeCustomBlocks = removeDrawings.map((drawing) => customBlocks.find((customBlock) => customBlock.blockId === drawing.drawingId)).filter((block) => !!block).sort((a, b) => a.startIndex > b.startIndex ? 1 : -1);
|
|
165
228
|
if (removeCustomBlocks.length === 0) return false;
|
|
166
|
-
const drawings =
|
|
229
|
+
const drawings = source.drawings ?? {};
|
|
167
230
|
const removeDrawingParamById = new Map(removeDrawings.map((drawing) => [drawing.drawingId, drawing]));
|
|
168
231
|
const removeDrawingSnapshots = removeCustomBlocks.map((block) => drawings[block.blockId]).filter((drawing) => drawing != null);
|
|
169
232
|
const resourceRedoMutations = [];
|
|
@@ -203,12 +266,15 @@ const RemoveDocDrawingCommand = {
|
|
|
203
266
|
startOffset: cursorIndex,
|
|
204
267
|
endOffset: cursorIndex
|
|
205
268
|
}];
|
|
269
|
+
const historyActions = getHistoryActions(removeDrawings);
|
|
206
270
|
const doMutation = {
|
|
207
271
|
id: RichTextEditingMutation.id,
|
|
208
272
|
params: {
|
|
209
273
|
unitId,
|
|
274
|
+
segmentId,
|
|
210
275
|
actions: [],
|
|
211
|
-
textRanges
|
|
276
|
+
textRanges,
|
|
277
|
+
historyActions
|
|
212
278
|
}
|
|
213
279
|
};
|
|
214
280
|
const rawActions = [];
|
|
@@ -225,11 +291,21 @@ const RemoveDocDrawingCommand = {
|
|
|
225
291
|
memoryCursor.moveCursorTo(startIndex + 1);
|
|
226
292
|
}
|
|
227
293
|
rawActions.push(jsonX.editOp(textX.serialize(), getRichTextEditPath(documentDataModel, segmentId)));
|
|
228
|
-
|
|
294
|
+
const drawingOrder = source.drawingsOrder ?? [];
|
|
295
|
+
const resourceBlocks = [...removeCustomBlocks].sort((left, right) => drawingOrder.indexOf(right.blockId) - drawingOrder.indexOf(left.blockId));
|
|
296
|
+
for (const block of resourceBlocks) {
|
|
229
297
|
const { blockId } = block;
|
|
230
|
-
const drawingIndex =
|
|
231
|
-
rawActions.push(jsonX.removeOp([
|
|
232
|
-
|
|
298
|
+
const drawingIndex = drawingOrder.indexOf(blockId);
|
|
299
|
+
if (drawings[blockId]) rawActions.push(jsonX.removeOp([
|
|
300
|
+
...prefix,
|
|
301
|
+
"drawings",
|
|
302
|
+
blockId
|
|
303
|
+
], drawings[blockId]));
|
|
304
|
+
if (drawingIndex >= 0) rawActions.push(jsonX.removeOp([
|
|
305
|
+
...prefix,
|
|
306
|
+
"drawingsOrder",
|
|
307
|
+
drawingIndex
|
|
308
|
+
], blockId));
|
|
233
309
|
}
|
|
234
310
|
doMutation.params.actions = rawActions.reduce((acc, cur) => JSONX.compose(acc, cur), null);
|
|
235
311
|
const result = commandService.syncExecuteCommand(doMutation.id, doMutation.params);
|
|
@@ -242,6 +318,17 @@ const RemoveDocDrawingCommand = {
|
|
|
242
318
|
return Boolean(result);
|
|
243
319
|
}
|
|
244
320
|
};
|
|
321
|
+
function getHistoryActions(drawings) {
|
|
322
|
+
const historyActions = drawings.flatMap((drawing) => {
|
|
323
|
+
switch (drawing.drawingType) {
|
|
324
|
+
case DrawingTypeEnum.DRAWING_IMAGE: return [DocHistoryAction.DeleteImage];
|
|
325
|
+
case DrawingTypeEnum.DRAWING_SHAPE: return [DocHistoryAction.DeleteShape];
|
|
326
|
+
case DrawingTypeEnum.DRAWING_CHART: return [DocHistoryAction.DeleteChart];
|
|
327
|
+
default: return [];
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
return [...new Set(historyActions)];
|
|
331
|
+
}
|
|
245
332
|
function executeResourceMutationGroups(mutationGroups, commandService) {
|
|
246
333
|
const executedUndoGroups = [];
|
|
247
334
|
for (const mutationGroup of mutationGroups) {
|
|
@@ -283,6 +370,16 @@ function getArrangedDrawingOrder(drawingOrder, drawingIds, arrangeType) {
|
|
|
283
370
|
}
|
|
284
371
|
return arrangedDrawingOrder;
|
|
285
372
|
}
|
|
373
|
+
function getDrawingOrderAtIndex(drawingOrder, drawingIds, zOrder) {
|
|
374
|
+
if (drawingIds.length !== 1) return [...drawingOrder];
|
|
375
|
+
const arrangedDrawingOrder = [...drawingOrder];
|
|
376
|
+
const currentIndex = arrangedDrawingOrder.indexOf(drawingIds[0]);
|
|
377
|
+
if (currentIndex < 0) return arrangedDrawingOrder;
|
|
378
|
+
const [drawingId] = arrangedDrawingOrder.splice(currentIndex, 1);
|
|
379
|
+
const targetIndex = normalizeDrawingOrderIndex(zOrder, drawingOrder.length);
|
|
380
|
+
arrangedDrawingOrder.splice(targetIndex, 0, drawingId);
|
|
381
|
+
return arrangedDrawingOrder;
|
|
382
|
+
}
|
|
286
383
|
/**
|
|
287
384
|
* Converts the target order into granular JSONX move operations. This avoids replacing
|
|
288
385
|
* the entire drawingsOrder array and keeps collaboration conflicts scoped to moved items.
|
|
@@ -311,11 +408,11 @@ const SetDocDrawingArrangeCommand = {
|
|
|
311
408
|
handler: (accessor, params) => {
|
|
312
409
|
const commandService = accessor.get(ICommandService);
|
|
313
410
|
if (params == null) return false;
|
|
314
|
-
const { unitId, drawingIds
|
|
411
|
+
const { unitId, drawingIds } = params;
|
|
315
412
|
const documentDataModel = accessor.get(IUniverInstanceService).getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
316
413
|
const drawingOrder = documentDataModel === null || documentDataModel === void 0 ? void 0 : documentDataModel.getDrawingsOrder();
|
|
317
414
|
if (!drawingOrder) return false;
|
|
318
|
-
const actions = createDrawingOrderActions(drawingOrder, getArrangedDrawingOrder(drawingOrder, drawingIds, arrangeType));
|
|
415
|
+
const actions = createDrawingOrderActions(drawingOrder, params.zOrder !== void 0 ? getDrawingOrderAtIndex(drawingOrder, drawingIds, params.zOrder) : getArrangedDrawingOrder(drawingOrder, drawingIds, params.arrangeType));
|
|
319
416
|
if (JSONX.isNoop(actions)) return false;
|
|
320
417
|
const result = commandService.syncExecuteCommand(RichTextEditingMutation.id, {
|
|
321
418
|
unitId,
|
|
@@ -338,16 +435,22 @@ const UpdateDrawingDocTransformCommand = {
|
|
|
338
435
|
const { unitId, drawings } = params;
|
|
339
436
|
const documentDataModel = univerInstanceService.getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
340
437
|
if (!documentDataModel) return false;
|
|
341
|
-
const
|
|
438
|
+
const snapshot = documentDataModel.getSnapshot();
|
|
439
|
+
const historyAction = drawings.length > 0 && drawings.every(({ drawingId }) => {
|
|
440
|
+
var _findDocDrawing;
|
|
441
|
+
return ((_findDocDrawing = findDocDrawing(snapshot, drawingId)) === null || _findDocDrawing === void 0 ? void 0 : _findDocDrawing.drawing.drawingType) === DrawingTypeEnum.DRAWING_IMAGE;
|
|
442
|
+
}) ? DocHistoryAction.UpdateImage : void 0;
|
|
342
443
|
const jsonX = JSONX.getInstance();
|
|
343
444
|
const actions = [];
|
|
344
445
|
for (const { drawingId, key, value } of drawings) {
|
|
345
|
-
var
|
|
346
|
-
const
|
|
446
|
+
var _oldDrawing$docTransf;
|
|
447
|
+
const source = findDocDrawing(snapshot, drawingId);
|
|
448
|
+
if (!source) return false;
|
|
449
|
+
const oldDrawing = source.drawing;
|
|
450
|
+
const oldValue = key === "srcRect" ? oldDrawing === null || oldDrawing === void 0 ? void 0 : oldDrawing.srcRect : oldDrawing === null || oldDrawing === void 0 || (_oldDrawing$docTransf = oldDrawing.docTransform) === null || _oldDrawing$docTransf === void 0 ? void 0 : _oldDrawing$docTransf[key];
|
|
347
451
|
if (!Tools.diffValue(oldValue, value)) {
|
|
348
|
-
const path = [
|
|
349
|
-
|
|
350
|
-
drawingId,
|
|
452
|
+
const path = key === "srcRect" ? [...source.path, key] : [
|
|
453
|
+
...source.path,
|
|
351
454
|
"docTransform",
|
|
352
455
|
key
|
|
353
456
|
];
|
|
@@ -356,6 +459,7 @@ const UpdateDrawingDocTransformCommand = {
|
|
|
356
459
|
}
|
|
357
460
|
return Boolean(commandService.syncExecuteCommand(RichTextEditingMutation.id, {
|
|
358
461
|
unitId,
|
|
462
|
+
historyAction,
|
|
359
463
|
actions: actions.reduce((acc, action) => JSONX.compose(acc, action), null),
|
|
360
464
|
textRanges: null,
|
|
361
465
|
debounce: true
|
|
@@ -424,33 +528,33 @@ const UpdateDocDrawingWrappingStyleCommand = {
|
|
|
424
528
|
const commandService = accessor.get(ICommandService);
|
|
425
529
|
const documentDataModel = accessor.get(IUniverInstanceService).getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
426
530
|
if (!documentDataModel) return false;
|
|
427
|
-
const
|
|
531
|
+
const snapshot = documentDataModel.getSnapshot();
|
|
532
|
+
if (wrappingStyle !== "inline" && drawings.some(({ drawingId }) => {
|
|
533
|
+
var _findDocDrawing;
|
|
534
|
+
return (_findDocDrawing = findDocDrawing(snapshot, drawingId)) === null || _findDocDrawing === void 0 ? void 0 : _findDocDrawing.segmentId;
|
|
535
|
+
})) return false;
|
|
536
|
+
const historyAction = drawings.length > 0 && drawings.every(({ drawingId }) => {
|
|
537
|
+
var _findDocDrawing2;
|
|
538
|
+
return ((_findDocDrawing2 = findDocDrawing(snapshot, drawingId)) === null || _findDocDrawing2 === void 0 ? void 0 : _findDocDrawing2.drawing.drawingType) === DrawingTypeEnum.DRAWING_IMAGE;
|
|
539
|
+
}) ? DocHistoryAction.UpdateImage : void 0;
|
|
428
540
|
const jsonX = JSONX.getInstance();
|
|
429
541
|
const rawActions = [];
|
|
430
542
|
for (const drawing of drawings) {
|
|
431
|
-
const
|
|
432
|
-
|
|
543
|
+
const source = findDocDrawing(snapshot, drawing.drawingId);
|
|
544
|
+
const oldDrawing = source === null || source === void 0 ? void 0 : source.drawing;
|
|
545
|
+
if (!oldDrawing || !source) continue;
|
|
433
546
|
const layoutType = WRAPPING_STYLE_TO_LAYOUT_TYPE[wrappingStyle];
|
|
434
|
-
if (oldDrawing.layoutType !== layoutType) rawActions.push(jsonX.replaceOp([
|
|
435
|
-
"drawings",
|
|
436
|
-
drawing.drawingId,
|
|
437
|
-
"layoutType"
|
|
438
|
-
], oldDrawing.layoutType, layoutType));
|
|
547
|
+
if (oldDrawing.layoutType !== layoutType) rawActions.push(jsonX.replaceOp([...source.path, "layoutType"], oldDrawing.layoutType, layoutType));
|
|
439
548
|
if (wrappingStyle === "behindText" || wrappingStyle === "inFrontOfText") {
|
|
440
549
|
const behindDoc = wrappingStyle === "behindText" ? BooleanNumber.TRUE : BooleanNumber.FALSE;
|
|
441
|
-
if (oldDrawing.behindDoc !== behindDoc) rawActions.push(jsonX.replaceOp([
|
|
442
|
-
"drawings",
|
|
443
|
-
drawing.drawingId,
|
|
444
|
-
"behindDoc"
|
|
445
|
-
], oldDrawing.behindDoc, behindDoc));
|
|
550
|
+
if (oldDrawing.behindDoc !== behindDoc) rawActions.push(jsonX.replaceOp([...source.path, "behindDoc"], oldDrawing.behindDoc, behindDoc));
|
|
446
551
|
}
|
|
447
552
|
if (wrappingStyle !== "inline") for (const key of ["positionH", "positionV"]) {
|
|
448
553
|
var _drawing$docTransform;
|
|
449
554
|
const value = (_drawing$docTransform = drawing.docTransform) === null || _drawing$docTransform === void 0 ? void 0 : _drawing$docTransform[key];
|
|
450
555
|
const oldValue = oldDrawing.docTransform[key];
|
|
451
556
|
if (value && !Tools.diffValue(oldValue, value)) rawActions.push(jsonX.replaceOp([
|
|
452
|
-
|
|
453
|
-
drawing.drawingId,
|
|
557
|
+
...source.path,
|
|
454
558
|
"docTransform",
|
|
455
559
|
key
|
|
456
560
|
], oldValue, value));
|
|
@@ -460,6 +564,7 @@ const UpdateDocDrawingWrappingStyleCommand = {
|
|
|
460
564
|
id: RichTextEditingMutation.id,
|
|
461
565
|
params: {
|
|
462
566
|
unitId,
|
|
567
|
+
historyAction,
|
|
463
568
|
actions: rawActions.reduce((actions, action) => JSONX.compose(actions, action), null),
|
|
464
569
|
textRanges: null
|
|
465
570
|
}
|
|
@@ -540,7 +645,7 @@ let DocDrawingController = class DocDrawingController extends Disposable {
|
|
|
540
645
|
};
|
|
541
646
|
try {
|
|
542
647
|
return JSON.parse(json);
|
|
543
|
-
} catch
|
|
648
|
+
} catch {
|
|
544
649
|
return {
|
|
545
650
|
data: {},
|
|
546
651
|
order: []
|
|
@@ -553,10 +658,7 @@ let DocDrawingController = class DocDrawingController extends Disposable {
|
|
|
553
658
|
toJson: (unitId) => toJson(unitId),
|
|
554
659
|
parseJson: (json) => parseJson(json),
|
|
555
660
|
onUnLoad: (unitId) => {
|
|
556
|
-
this.
|
|
557
|
-
data: {},
|
|
558
|
-
order: []
|
|
559
|
-
});
|
|
661
|
+
this._unloadDrawingDataForUnit(unitId);
|
|
560
662
|
},
|
|
561
663
|
onLoad: (unitId, value) => {
|
|
562
664
|
this._setDrawingDataForUnit(unitId, {
|
|
@@ -566,6 +668,12 @@ let DocDrawingController = class DocDrawingController extends Disposable {
|
|
|
566
668
|
}
|
|
567
669
|
}));
|
|
568
670
|
}
|
|
671
|
+
_unloadDrawingDataForUnit(unitId) {
|
|
672
|
+
const documentDataModel = this._univerInstanceService.getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
673
|
+
documentDataModel === null || documentDataModel === void 0 || documentDataModel.resetDrawing({}, []);
|
|
674
|
+
this._docDrawingService.removeDrawingDataForUnit(unitId);
|
|
675
|
+
this._drawingManagerService.removeDrawingDataForUnit(unitId);
|
|
676
|
+
}
|
|
569
677
|
_setDrawingDataForUnit(unitId, drawingMapItem) {
|
|
570
678
|
const documentDataModel = this._univerInstanceService.getUnit(unitId);
|
|
571
679
|
if (documentDataModel == null) return;
|
|
@@ -576,17 +684,28 @@ let DocDrawingController = class DocDrawingController extends Disposable {
|
|
|
576
684
|
const dataModel = this._univerInstanceService.getUnit(unitId, UniverInstanceType.UNIVER_DOC);
|
|
577
685
|
if (!dataModel) return false;
|
|
578
686
|
const subUnitId = unitId;
|
|
579
|
-
const drawingDataModels = dataModel.
|
|
580
|
-
const drawingOrderModel = dataModel.getDrawingsOrder();
|
|
687
|
+
const { drawings: drawingDataModels, drawingsOrder: drawingOrderModel } = collectDocDrawings(dataModel.getSnapshot());
|
|
581
688
|
if (!drawingDataModels || !drawingOrderModel) return false;
|
|
689
|
+
const normalizedDrawingData = {};
|
|
690
|
+
for (const [drawingId, drawing] of Object.entries(drawingDataModels)) normalizedDrawingData[drawingId] = drawing.unitId === unitId && drawing.subUnitId === subUnitId ? drawing : {
|
|
691
|
+
...drawing,
|
|
692
|
+
unitId,
|
|
693
|
+
subUnitId
|
|
694
|
+
};
|
|
582
695
|
const subDrawings = { [subUnitId]: {
|
|
583
696
|
unitId,
|
|
584
697
|
subUnitId,
|
|
585
|
-
data:
|
|
698
|
+
data: normalizedDrawingData,
|
|
586
699
|
order: drawingOrderModel
|
|
587
700
|
} };
|
|
701
|
+
const renderDrawingData = {};
|
|
702
|
+
for (const [drawingId, drawing] of Object.entries(normalizedDrawingData)) renderDrawingData[drawingId] = {
|
|
703
|
+
...drawing,
|
|
704
|
+
hidden: true
|
|
705
|
+
};
|
|
588
706
|
const renderSubDrawings = { [subUnitId]: {
|
|
589
707
|
...subDrawings[subUnitId],
|
|
708
|
+
data: renderDrawingData,
|
|
590
709
|
order: getDocDrawingRenderOrder(drawingOrderModel, drawingDataModels)
|
|
591
710
|
} };
|
|
592
711
|
this._docDrawingService.registerDrawingData(unitId, subDrawings);
|
|
@@ -614,7 +733,7 @@ DocDrawingController = __decorate([
|
|
|
614
733
|
//#endregion
|
|
615
734
|
//#region package.json
|
|
616
735
|
var name = "@univerjs/docs-drawing";
|
|
617
|
-
var version = "1.0.0-
|
|
736
|
+
var version = "1.0.0-rc.0";
|
|
618
737
|
|
|
619
738
|
//#endregion
|
|
620
739
|
//#region src/config/config.ts
|
|
@@ -670,4 +789,4 @@ UniverDocsDrawingPlugin = __decorate([
|
|
|
670
789
|
], UniverDocsDrawingPlugin);
|
|
671
790
|
|
|
672
791
|
//#endregion
|
|
673
|
-
export { DOCS_DRAWING_PLUGIN, DocDrawingAdapterService, DocDrawingController, DocDrawingService, IDocDrawingAdapterService, IDocDrawingService, InsertDocDrawingCommand, RemoveDocDrawingCommand, SetDocDrawingArrangeCommand, TextWrappingStyle, UniverDocsDrawingPlugin, UpdateDocDrawingWrappingStyleCommand, UpdateDrawingDocTransformCommand, WRAPPING_STYLE_TO_LAYOUT_TYPE, getDocDrawingRenderOrder };
|
|
792
|
+
export { DOCS_DRAWING_PLUGIN, DocDrawingAdapterService, DocDrawingController, DocDrawingService, IDocDrawingAdapterService, IDocDrawingService, InsertDocDrawingCommand, RemoveDocDrawingCommand, SetDocDrawingArrangeCommand, TextWrappingStyle, UniverDocsDrawingPlugin, UpdateDocDrawingWrappingStyleCommand, UpdateDrawingDocTransformCommand, WRAPPING_STYLE_TO_LAYOUT_TYPE, collectDocDrawings, findDocDrawing, getDocDrawingRenderOrder };
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import type {
|
|
16
|
+
import type { ICommand, ITextRangeParam } from '@univerjs/core';
|
|
17
|
+
import { DrawingTypeEnum } from '@univerjs/core';
|
|
17
18
|
export interface IRemoveDocDrawingCommandParam {
|
|
18
19
|
unitId: string;
|
|
19
20
|
subUnitId: string;
|
|
@@ -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
|
*/
|
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import type { ICommand, IObjectPositionH, IObjectPositionV, ISize } from '@univerjs/core';
|
|
16
|
+
import type { ICommand, IObjectPositionH, IObjectPositionV, ISize, ISrcRect, Nullable } from '@univerjs/core';
|
|
17
17
|
export interface IDrawingDocTransform {
|
|
18
18
|
drawingId: string;
|
|
19
|
-
key: 'size' | 'angle' | 'positionH' | 'positionV' | 'flipX' | 'flipY';
|
|
20
|
-
value: ISize | number | boolean | IObjectPositionH | IObjectPositionV
|
|
19
|
+
key: 'size' | 'angle' | 'positionH' | 'positionV' | 'flipX' | 'flipY' | 'srcRect';
|
|
20
|
+
value: ISize | number | boolean | IObjectPositionH | IObjectPositionV | Nullable<ISrcRect>;
|
|
21
21
|
}
|
|
22
22
|
export interface IUpdateDrawingDocTransformCommandParams {
|
|
23
23
|
unitId: string;
|
|
@@ -16,12 +16,6 @@
|
|
|
16
16
|
import type { ICommand } from '@univerjs/core';
|
|
17
17
|
import type { IDocDrawing } from '../../services/doc-drawing.service';
|
|
18
18
|
import { PositionedObjectLayoutType } from '@univerjs/core';
|
|
19
|
-
/**
|
|
20
|
-
* Controls how a document drawing participates in text layout.
|
|
21
|
-
*
|
|
22
|
-
* `INLINE`, `WRAP_SQUARE`, and `WRAP_TOP_AND_BOTTOM` participate in text layout and can cause text to reflow.
|
|
23
|
-
* `BEHIND_TEXT` and `IN_FRONT_OF_TEXT` are overlay styles and do not cause text to reflow.
|
|
24
|
-
*/
|
|
25
19
|
export declare enum TextWrappingStyle {
|
|
26
20
|
/**
|
|
27
21
|
* Places the drawing in the text flow like a character.
|
|
@@ -32,6 +32,7 @@ export declare class DocDrawingController extends Disposable {
|
|
|
32
32
|
constructor(_docDrawingService: IDocDrawingService, _drawingManagerService: IDrawingManagerService, _resourceManagerService: IResourceManagerService, _univerInstanceService: IUniverInstanceService, _commandService: ICommandService);
|
|
33
33
|
private _init;
|
|
34
34
|
private _initSnapshot;
|
|
35
|
+
private _unloadDrawingDataForUnit;
|
|
35
36
|
private _setDrawingDataForUnit;
|
|
36
37
|
loadDrawingDataForUnit(unitId: string): boolean;
|
|
37
38
|
private _initCommands;
|
|
@@ -16,14 +16,15 @@
|
|
|
16
16
|
import type { ImageSourceType, Injector, IObjectPositionH, IObjectPositionV, ISize } from '@univerjs/core';
|
|
17
17
|
import type { IDocImage, TextWrappingStyle } from '@univerjs/docs-drawing';
|
|
18
18
|
import type { FDocument } from '@univerjs/docs/facade';
|
|
19
|
+
import { FBase } from '@univerjs/core/facade';
|
|
19
20
|
/**
|
|
20
21
|
* Facade API for an image in a document.
|
|
21
22
|
* @hideconstructor
|
|
22
23
|
*/
|
|
23
|
-
export declare class FDocumentImage {
|
|
24
|
+
export declare class FDocumentImage extends FBase {
|
|
24
25
|
private readonly _document;
|
|
25
26
|
private readonly _imageId;
|
|
26
|
-
|
|
27
|
+
protected readonly _injector: Injector;
|
|
27
28
|
constructor(_document: FDocument, _imageId: string, _injector: Injector);
|
|
28
29
|
/**
|
|
29
30
|
* Gets the id of the document containing the image.
|
package/lib/types/index.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ export { DocDrawingController } from './controllers/doc-drawing.controller';
|
|
|
30
30
|
export { UniverDocsDrawingPlugin } from './plugin';
|
|
31
31
|
export { DocDrawingAdapterService, IDocDrawingAdapterService } from './services/doc-drawing-adapter.service';
|
|
32
32
|
export type { IDocDrawingAdapter, IDocDrawingMutationInfos, IDocDrawingRemoveMutationInfoParams, } from './services/doc-drawing-adapter.service';
|
|
33
|
+
export { collectDocDrawings, findDocDrawing } from './services/doc-drawing-source';
|
|
33
34
|
export { DocDrawingService, IDocDrawingService } from './services/doc-drawing.service';
|
|
34
35
|
export type { IDocDrawing, IDocImage } from './services/doc-drawing.service';
|
|
35
36
|
export { type IDocFloatDom } from './services/doc-drawing.service';
|
|
@@ -0,0 +1,27 @@
|
|
|
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 { IDocumentData, IDrawings } from '@univerjs/core';
|
|
17
|
+
/** Resolve persisted drawing ownership independently of the current text selection. */
|
|
18
|
+
export declare function findDocDrawing(snapshot: IDocumentData, drawingId: string): {
|
|
19
|
+
drawing: IDrawings[string];
|
|
20
|
+
path: string[];
|
|
21
|
+
segmentId: string;
|
|
22
|
+
} | undefined;
|
|
23
|
+
/** The render registry is flat; persisted note resources retain their own scope. */
|
|
24
|
+
export declare function collectDocDrawings(snapshot: IDocumentData): {
|
|
25
|
+
drawings: IDrawings;
|
|
26
|
+
drawingsOrder: string[];
|
|
27
|
+
};
|
package/lib/umd/facade.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("@univerjs/core"),require("@univerjs/docs"),require("@univerjs/docs-drawing"),require("@univerjs/docs/facade"),require("@univerjs/drawing"),require("@univerjs/core/facade")):typeof define==`function`&&define.amd?define([`exports`,`@univerjs/core`,`@univerjs/docs`,`@univerjs/docs-drawing`,`@univerjs/docs/facade`,`@univerjs/drawing`,`@univerjs/core/facade`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverDocsDrawingFacade={},e.UniverCore,e.UniverDocs,e.UniverDocsDrawing,e.UniverDocsFacade,e.UniverDrawing,e.UniverCoreFacade))})(this,function(e,t,n,r,i,a,o){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var s=class{constructor(e,t,n){this._document=e,this._imageId=t,this._injector=n}getUnitId(){return this._document.getId()}getId(){return this._imageId}getSource(){var e;return(e=this.getImageData())==null?void 0:e.source}getSourceType(){var e;return(e=this.getImageData())==null?void 0:e.imageSourceType}getSize(){var e;return((e=this.getImageData())==null?void 0:e.docTransform.size)??null}getAngle(){var e;return(e=this.getImageData())==null?void 0:e.docTransform.angle}getPositionH(){var e;return((e=this.getImageData())==null?void 0:e.docTransform.positionH)??null}getPositionV(){var e;return((e=this.getImageData())==null?void 0:e.docTransform.positionV)??null}getImageData(){var e;let n=(e=this._document.getDocumentDataModel().
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("@univerjs/core"),require("@univerjs/docs"),require("@univerjs/docs-drawing"),require("@univerjs/docs/facade"),require("@univerjs/drawing"),require("@univerjs/core/facade")):typeof define==`function`&&define.amd?define([`exports`,`@univerjs/core`,`@univerjs/docs`,`@univerjs/docs-drawing`,`@univerjs/docs/facade`,`@univerjs/drawing`,`@univerjs/core/facade`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverDocsDrawingFacade={},e.UniverCore,e.UniverDocs,e.UniverDocsDrawing,e.UniverDocsFacade,e.UniverDrawing,e.UniverCoreFacade))})(this,function(e,t,n,r,i,a,o){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var s=class extends o.FBase{constructor(e,t,n){super(),this._document=e,this._imageId=t,this._injector=n}getUnitId(){return this._document.getId()}getId(){return this._imageId}getSource(){var e;return(e=this.getImageData())==null?void 0:e.source}getSourceType(){var e;return(e=this.getImageData())==null?void 0:e.imageSourceType}getSize(){var e;return((e=this.getImageData())==null?void 0:e.docTransform.size)??null}getAngle(){var e;return(e=this.getImageData())==null?void 0:e.docTransform.angle}getPositionH(){var e;return((e=this.getImageData())==null?void 0:e.docTransform.positionH)??null}getPositionV(){var e;return((e=this.getImageData())==null?void 0:e.docTransform.positionV)??null}getImageData(){var e;let n=(e=(0,r.findDocDrawing)(this._document.getDocumentDataModel().getSnapshot(),this._imageId))==null?void 0:e.drawing;return!n||n.drawingType!==t.DrawingTypeEnum.DRAWING_IMAGE?null:n}setSize(e,t){return this._updateTransform(`size`,{width:e,height:t})}setRotate(e){return this._updateTransform(`angle`,e)}setPositionH(e){return this._updateTransform(`positionH`,e)}setPositionV(e){return this._updateTransform(`positionV`,e)}setWrappingStyle(e){let n=this.getImageData();return n?this._injector.get(t.ICommandService).syncExecuteCommand(r.UpdateDocDrawingWrappingStyleCommand.id,{unitId:this.getUnitId(),subUnitId:this.getUnitId(),drawings:[n],wrappingStyle:e}):!1}setForward(){return this._arrange(t.ArrangeTypeEnum.forward)}setBackward(){return this._arrange(t.ArrangeTypeEnum.backward)}setBack(){return this._arrange(t.ArrangeTypeEnum.back)}setFront(){return this._arrange(t.ArrangeTypeEnum.front)}remove(){let e=this.getImageData(),n=this._getTextRange();return!e||!n?!1:this._injector.get(t.ICommandService).syncExecuteCommand(r.RemoveDocDrawingCommand.id,{unitId:this.getUnitId(),drawings:[{unitId:this.getUnitId(),subUnitId:this.getUnitId(),drawingId:this._imageId,drawingType:t.DrawingTypeEnum.DRAWING_IMAGE}],textRange:n})}_updateTransform(e,n){return this._injector.get(t.ICommandService).syncExecuteCommand(r.UpdateDrawingDocTransformCommand.id,{unitId:this.getUnitId(),subUnitId:this.getUnitId(),drawings:[{drawingId:this._imageId,key:e,value:n}]})}_arrange(e){return this._injector.get(t.ICommandService).syncExecuteCommand(r.SetDocDrawingArrangeCommand.id,{unitId:this.getUnitId(),subUnitId:this.getUnitId(),drawingIds:[this._imageId],arrangeType:e})}_getTextRange(){let{body:e,headers:t={},footers:n={},notes:r={}}=this._document.getDocumentDataModel().getSnapshot(),i=[{segmentId:``,body:e},...Object.entries(t).map(([e,t])=>({segmentId:e,body:t.body})),...Object.entries(n).map(([e,t])=>({segmentId:e,body:t.body})),...Object.entries(r).map(([e,t])=>({segmentId:e,body:t.body}))];for(let{segmentId:e,body:t}of i){var a;let n=t==null||(a=t.customBlocks)==null?void 0:a.find(e=>e.blockId===this._imageId);if(n)return{startOffset:n.startIndex,endOffset:n.startIndex,collapsed:!0,segmentId:e}}return null}},c=class extends i.FDocument{async insertImage(e){let i=this.getId(),a=(0,t.generateRandomId)(6),o=e.width!=null&&e.height!=null?{width:e.width,height:e.height}:l(await this._getIntrinsicSize(e.source,e.imageSourceType),e),c=(0,n.buildDocTransform)(o.width,o.height),u=e.wrappingStyle??r.TextWrappingStyle.INLINE,d={...c,angle:e.angle??c.angle,positionH:e.positionH??c.positionH,positionV:e.positionV??c.positionV},f=(0,n.docDrawingPositionToTransform)(d),p={unitId:i,subUnitId:i,drawingId:a,drawingType:t.DrawingTypeEnum.DRAWING_IMAGE,imageSourceType:e.imageSourceType,source:e.source,transform:f,docTransform:d,behindDoc:u===r.TextWrappingStyle.BEHIND_TEXT?t.BooleanNumber.TRUE:t.BooleanNumber.FALSE,title:``,description:``,layoutType:r.WRAPPING_STYLE_TO_LAYOUT_TYPE[u],wrapText:t.WrapTextType.BOTH_SIDES,distB:0,distL:0,distR:0,distT:0};return this._injector.get(t.ICommandService).syncExecuteCommand(r.InsertDocDrawingCommand.id,{unitId:i,drawings:[p],textRange:e.textRange})?this._injector.createInstance(s,this,a,this._injector):null}getImage(e){var n;let i=(n=(0,r.findDocDrawing)(this.getDocumentDataModel().getSnapshot(),e))==null?void 0:n.drawing;return!i||i.drawingType!==t.DrawingTypeEnum.DRAWING_IMAGE?null:this._injector.createInstance(s,this,e,this._injector)}getImages(){let{drawings:e,drawingsOrder:n}=(0,r.collectDocDrawings)(this.getDocumentDataModel().getSnapshot());return n.filter(n=>{var r;return((r=e[n])==null?void 0:r.drawingType)===t.DrawingTypeEnum.DRAWING_IMAGE}).map(e=>this._injector.createInstance(s,this,e,this._injector))}async _getIntrinsicSize(e,n){let r=this._injector.has(t.IImageIoService)?this._injector.get(t.IImageIoService):null,i=e;if(n===t.ImageSourceType.UUID&&r)i=await r.getImage(e);else if(n===t.ImageSourceType.URL&&this._injector.has(t.IURLImageService))try{i=await this._injector.get(t.IURLImageService).getImage(e)}catch{i=e}let{width:o,height:s,image:c}=await(0,a.getImageSize)(i);return r==null||r.addImageSourceCache(e,n,c),{width:o,height:s}}};function l(e,t){let{width:n,height:r}=e;if(t.width!=null&&t.height!=null)return{width:t.width,height:t.height};if(t.width!=null)return{width:t.width,height:r*t.width/n};if(t.height!=null)return{width:n*t.height/r,height:t.height};let i=Math.min(1,a.DRAWING_IMAGE_WIDTH_LIMIT/n,a.DRAWING_IMAGE_HEIGHT_LIMIT/r);return{width:n*i,height:r*i}}i.FDocument.extend(c);var u=class extends o.FEnum{get TextWrappingStyle(){return r.TextWrappingStyle}get DocsImageRelativeFromH(){return t.ObjectRelativeFromH}get DocsImageRelativeFromV(){return t.ObjectRelativeFromV}};o.FEnum.extend(u),e.FDocumentImage=s});
|
package/lib/umd/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("@univerjs/core"),require("@univerjs/docs"),require("@univerjs/drawing")):typeof define==`function`&&define.amd?define([`exports`,`@univerjs/core`,`@univerjs/docs`,`@univerjs/drawing`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverDocsDrawing={},e.UniverCore,e.UniverDocs,e.UniverDrawing))})(this,function(e,t,n,r){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let i={id:`doc.command.insert-doc-image`,type:t.CommandType.COMMAND,handler:(e,r)=>{var i,o,s;if(!r)return!1;let c=e.get(t.ICommandService),l=e.get(t.IUniverInstanceService),{unitId:u,drawings:d,textRange:f}=r,p=l.getUnit(u,t.UniverInstanceType.UNIVER_DOC);if(!p)return!1;let m=a(e,u,f);if(!m)return!1;let{segmentId:h=``}=m;if(!((i=p.getSelfOrHeaderFooterModel(h))!=null&&i.getBody()))return!1;let g=p.getSnapshot(),_=(o=g.headers)!=null&&o[h]||(s=g.footers)!=null&&s[h]?d.map(e=>({...e,isMultiTransform:t.BooleanNumber.TRUE,transforms:e.transforms??(e.transform?[e.transform]:null)})):d,v=t.BuildTextUtils.drawing.add({selection:m,documentDataModel:p,drawings:_});if(!v)return!1;let y={id:n.RichTextEditingMutation.id,params:{unitId:u,actions:[],textRanges:[]}};return y.params.actions=v,!!c.syncExecuteCommand(y.id,y.params)}};function a(e,t,r){let i=e.get(n.DocSelectionManagerService).getActiveTextRange(),a=(r?(0,n.normalizeTextRange)(r):null)??(0,n.getContentInsertRange)(e,t);return a?{...i,startOffset:a.startOffset,endOffset:a.endOffset,collapsed:a.startOffset===a.endOffset,segmentId:a.segmentId??(i==null?void 0:i.segmentId)??``}:i??null}function o(e){"@babel/helpers - typeof";return o=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},o(e)}function s(e,t){if(o(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(o(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function c(e){var t=s(e,`string`);return o(t)==`symbol`?t:t+``}function l(e,t,n){return(t=c(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let u=(0,t.createIdentifier)(`doc.drawing-adapter.service`);var d=class{constructor(){l(this,`_adapters`,[])}registerAdapter(e){return this._adapters.push(e),(0,t.toDisposable)(()=>{let t=this._adapters.indexOf(e);t>=0&&this._adapters.splice(t,1)})}getRemoveDrawingMutationInfos(e){let t={redoMutations:[],undoMutations:[]};for(let r of this._adapters){var n;let i=(n=r.getRemoveDrawingMutationInfos)==null?void 0:n.call(r,e);i&&(t.redoMutations.push(...i.redoMutations),t.undoMutations.push(...i.undoMutations))}return t}getEditDrawingCommandInfo(e){for(let n of this._adapters){var t;let r=(t=n.getEditDrawingCommandInfo)==null?void 0:t.call(n,e);if(r)return r}return null}};let f={id:`doc.command.remove-doc-image`,type:t.CommandType.COMMAND,handler:(e,r)=>{var i;if(!r)return!1;let a=e.get(t.ICommandService),o=e.get(t.IUndoRedoService),s=e.get(u),c=e.get(t.IUniverInstanceService),l=e.get(n.DocSelectionManagerService),{unitId:d,drawings:f,textRange:m}=r,h=c.getUnit(d,t.UniverInstanceType.UNIVER_DOC);if(!h||f.length===0)return!1;let g=l.getActiveTextRange(),_=(m?(0,n.normalizeTextRange)(m):null)??(0,n.getContentInsertRange)(e,d),v=(_==null?void 0:_.segmentId)??(g==null?void 0:g.segmentId)??``,y=new t.TextX,b=t.JSONX.getInstance(),x=((i=h.getSelfOrHeaderFooterModel(v))==null||(i=i.getBody())==null?void 0:i.customBlocks)??[],S=f.map(e=>x.find(t=>t.blockId===e.drawingId)).filter(e=>!!e).sort((e,t)=>e.startIndex>t.startIndex?1:-1);if(S.length===0)return!1;let C=h.getDrawings()??{},w=new Map(f.map(e=>[e.drawingId,e])),T=S.map(e=>C[e.blockId]).filter(e=>e!=null),E=[],D=[],O=[];for(let e of S){let{blockId:t}=e,n=C[t];if(n==null)continue;let r=w.get(t),i=s.getRemoveDrawingMutationInfos({unitId:d,subUnitId:(r==null?void 0:r.subUnitId)??d,drawing:n,removeDrawings:T});(i.redoMutations.length!==0||i.undoMutations.length!==0)&&(E.push(...i.redoMutations),D.push(...i.undoMutations),O.push(i))}if(!p(O,a))return!1;let k=`doc-drawing-remove-resource:${d}:${S.map(e=>e.blockId).join(`,`)}`,A=null;(E.length>0||D.length>0)&&(A=o.__tempBatchingUndoRedo(d),o.pushUndoRedo({unitID:d,redoMutations:E,undoMutations:D,id:k}));let j=new t.MemoryCursor,M=S[0].startIndex,N=[{startOffset:M,endOffset:M}],P={id:n.RichTextEditingMutation.id,params:{unitId:d,actions:[],textRanges:N}},F=[];for(let e of S){let{startIndex:n}=e;n>j.cursor&&y.push({t:t.TextXActionType.RETAIN,len:n-j.cursor}),y.push({t:t.TextXActionType.DELETE,len:1}),j.moveCursorTo(n+1)}F.push(b.editOp(y.serialize(),(0,t.getRichTextEditPath)(h,v)));for(let e of S){let{blockId:t}=e,n=h.getDrawingsOrder().indexOf(t);F.push(b.removeOp([`drawings`,t],C[t])),F.push(b.removeOp([`drawingsOrder`,n],t))}P.params.actions=F.reduce((e,n)=>t.JSONX.compose(e,n),null);let I=a.syncExecuteCommand(P.id,P.params);return!I&&A!=null?(A.dispose(),o.rollback(k,d),!1):(A==null||A.dispose(),!!I)}};function p(e,t){let n=[];for(let r of e){if(!h(r.redoMutations,t))return m([...n].reverse(),t),!1;n.push(r.undoMutations)}return!0}function m(e,t){e.forEach(e=>h(e,t))}function h(e,t){for(let n of e)if(!t.syncExecuteCommand(n.id,n.params))return!1;return!0}let g=`drawingsOrder`;function _(e,n,r){let i=new Set(n.filter(t=>e.includes(t))),a=[...e];if(i.size===0)return a;if(r===t.ArrangeTypeEnum.forward)for(let e=a.length-2;e>=0;e--)i.has(a[e])&&!i.has(a[e+1])&&([a[e],a[e+1]]=[a[e+1],a[e]]);else if(r===t.ArrangeTypeEnum.backward)for(let e=1;e<a.length;e++)i.has(a[e])&&!i.has(a[e-1])&&([a[e],a[e-1]]=[a[e-1],a[e]]);else if(r===t.ArrangeTypeEnum.front||r===t.ArrangeTypeEnum.back){let e=a.filter(e=>i.has(e)),n=a.filter(e=>!i.has(e));return r===t.ArrangeTypeEnum.front?[...n,...e]:[...e,...n]}return a}function v(e,n){let r=t.JSONX.getInstance(),i=[...e],a=[];for(let e=0;e<n.length;e++){let t=n[e],o=i.indexOf(t);if(o<0||o===e)continue;let s=r.moveOp([g,o],[g,e]);s&&a.push(s),i.splice(o,1),i.splice(e,0,t)}return a.reduce((e,n)=>t.JSONX.compose(e,n),null)}let y={id:`doc.command.set-drawing-arrange`,type:t.CommandType.COMMAND,handler:(e,r)=>{let i=e.get(t.ICommandService);if(r==null)return!1;let{unitId:a,drawingIds:o,arrangeType:s}=r,c=e.get(t.IUniverInstanceService).getUnit(a,t.UniverInstanceType.UNIVER_DOC),l=c==null?void 0:c.getDrawingsOrder();if(!l)return!1;let u=v(l,_(l,o,s));return!t.JSONX.isNoop(u)&&!!i.syncExecuteCommand(n.RichTextEditingMutation.id,{unitId:a,actions:u,textRanges:null})}},b={id:`doc.command.update-drawing-doc-transform`,type:t.CommandType.COMMAND,handler:(e,r)=>{if(!r)return!1;let i=e.get(t.ICommandService),a=e.get(t.IUniverInstanceService),{unitId:o,drawings:s}=r,c=a.getUnit(o,t.UniverInstanceType.UNIVER_DOC);if(!c)return!1;let l=c.getSnapshot().drawings??{},u=t.JSONX.getInstance(),d=[];for(let{drawingId:e,key:n,value:r}of s){var f;let i=(f=l[e])==null||(f=f.docTransform)==null?void 0:f[n];if(!t.Tools.diffValue(i,r)){let t=[`drawings`,e,`docTransform`,n];d.push(i===void 0?u.insertOp(t,r):u.replaceOp(t,i,r))}}return!!i.syncExecuteCommand(n.RichTextEditingMutation.id,{unitId:o,actions:d.reduce((e,n)=>t.JSONX.compose(e,n),null),textRanges:null,debounce:!0})}},x=function(e){return e.INLINE=`inline`,e.BEHIND_TEXT=`behindText`,e.IN_FRONT_OF_TEXT=`inFrontOfText`,e.WRAP_SQUARE=`wrapSquare`,e.WRAP_TOP_AND_BOTTOM=`wrapTopAndBottom`,e}({}),S={inline:t.PositionedObjectLayoutType.INLINE,wrapSquare:t.PositionedObjectLayoutType.WRAP_SQUARE,wrapTopAndBottom:t.PositionedObjectLayoutType.WRAP_TOP_AND_BOTTOM,inFrontOfText:t.PositionedObjectLayoutType.WRAP_NONE,behindText:t.PositionedObjectLayoutType.WRAP_NONE},C={id:`doc.command.update-doc-drawing-wrapping-style`,type:t.CommandType.COMMAND,handler:(e,r)=>{if(!r)return!1;let{drawings:i,wrappingStyle:a,unitId:o}=r,s=e.get(t.ICommandService),c=e.get(t.IUniverInstanceService).getUnit(o,t.UniverInstanceType.UNIVER_DOC);if(!c)return!1;let l=c.getDrawings()??{},u=t.JSONX.getInstance(),d=[];for(let e of i){let n=l[e.drawingId];if(!n)continue;let r=S[a];if(n.layoutType!==r&&d.push(u.replaceOp([`drawings`,e.drawingId,`layoutType`],n.layoutType,r)),a===`behindText`||a===`inFrontOfText`){let r=a===`behindText`?t.BooleanNumber.TRUE:t.BooleanNumber.FALSE;n.behindDoc!==r&&d.push(u.replaceOp([`drawings`,e.drawingId,`behindDoc`],n.behindDoc,r))}if(a!==`inline`)for(let r of[`positionH`,`positionV`]){var f;let i=(f=e.docTransform)==null?void 0:f[r],a=n.docTransform[r];i&&!t.Tools.diffValue(a,i)&&d.push(u.replaceOp([`drawings`,e.drawingId,`docTransform`,r],a,i))}}let p={id:n.RichTextEditingMutation.id,params:{unitId:o,actions:d.reduce((e,n)=>t.JSONX.compose(e,n),null),textRanges:null}};return!!s.syncExecuteCommand(p.id,p.params)}};var w=class extends r.UnitDrawingService{};let T=(0,t.createIdentifier)(`univer.doc.plugin.doc-drawing.service`);function E(e,t){return function(n,r){t(n,r,e)}}function D(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let O=`DOC_DRAWING_PLUGIN`;function k(e,t={}){return e.map((e,t)=>({drawingId:e,index:t})).sort((e,n)=>{let r=A(t[e.drawingId]);return r===A(t[n.drawingId])?e.index-n.index:r?-1:1}).map(({drawingId:e})=>e)}function A(e){return(e==null?void 0:e.layoutType)===t.PositionedObjectLayoutType.WRAP_NONE&&e.behindDoc===t.BooleanNumber.TRUE}let j=class extends t.Disposable{constructor(e,t,n,r,i){super(),this._docDrawingService=e,this._drawingManagerService=t,this._resourceManagerService=n,this._univerInstanceService=r,this._commandService=i,this._init()}_init(){this._initSnapshot(),this._initCommands()}_initSnapshot(){let e=e=>{let n=this._univerInstanceService.getUnit(e,t.UniverInstanceType.UNIVER_DOC);if(n){let e=n.getSnapshot().drawings,t=n.getSnapshot().drawingsOrder;return JSON.stringify({data:e??{},order:t??[]})}return``},n=e=>{if(!e)return{data:{},order:[]};try{return JSON.parse(e)}catch{return{data:{},order:[]}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:O,businesses:[t.UniverInstanceType.UNIVER_DOC],toJson:t=>e(t),parseJson:e=>n(e),onUnLoad:e=>{this._setDrawingDataForUnit(e,{data:{},order:[]})},onLoad:(e,t)=>{this._setDrawingDataForUnit(e,{data:t.data??{},order:t.order??[]})}}))}_setDrawingDataForUnit(e,t){let n=this._univerInstanceService.getUnit(e);n!=null&&(n.resetDrawing(t.data,t.order),this.loadDrawingDataForUnit(e))}loadDrawingDataForUnit(e){let n=this._univerInstanceService.getUnit(e,t.UniverInstanceType.UNIVER_DOC);if(!n)return!1;let r=e,i=n.getDrawings(),a=n.getDrawingsOrder();if(!i||!a)return!1;let o={[r]:{unitId:e,subUnitId:r,data:i,order:a}},s={[r]:{...o[r],order:k(a,i)}};return this._docDrawingService.registerDrawingData(e,o),this._drawingManagerService.registerDrawingData(e,s),!0}_initCommands(){[i,f,b,C,y].forEach(e=>this.disposeWithMe(this._commandService.registerCommand(e)))}};j=D([E(0,T),E(1,r.IDrawingManagerService),E(2,t.IResourceManagerService),E(3,t.IUniverInstanceService),E(4,t.ICommandService)],j);var M=`@univerjs/docs-drawing`,N=`1.0.0-insiders.20260809-70eefdd`;let P={},F=class extends t.Plugin{constructor(e=P,n,r){super(),this._config=e,this._injector=n,this._configService=r;let{...i}=(0,t.merge)({},P,this._config);this._configService.setConfig(`docs-drawing.config`,i)}onStarting(){[[j],[d],[u,{useClass:d}],[w],[T,{useClass:w}]].forEach(e=>this._injector.add(e)),(0,t.touchDependencies)(this._injector,[[j]])}};l(F,`pluginName`,O),l(F,`packageName`,M),l(F,`version`,N),l(F,`type`,t.UniverInstanceType.UNIVER_DOC),F=D([(0,t.DependentOn)(n.UniverDocsPlugin,r.UniverDrawingPlugin),E(1,(0,t.Inject)(t.Injector)),E(2,t.IConfigService)],F),e.DOCS_DRAWING_PLUGIN=O,e.DocDrawingAdapterService=d,Object.defineProperty(e,"DocDrawingController",{enumerable:!0,get:function(){return j}}),e.DocDrawingService=w,e.IDocDrawingAdapterService=u,e.IDocDrawingService=T,e.InsertDocDrawingCommand=i,e.RemoveDocDrawingCommand=f,e.SetDocDrawingArrangeCommand=y,e.TextWrappingStyle=x,Object.defineProperty(e,"UniverDocsDrawingPlugin",{enumerable:!0,get:function(){return F}}),e.UpdateDocDrawingWrappingStyleCommand=C,e.UpdateDrawingDocTransformCommand=b,e.WRAPPING_STYLE_TO_LAYOUT_TYPE=S,e.getDocDrawingRenderOrder=k});
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("@univerjs/core"),require("@univerjs/docs"),require("@univerjs/drawing")):typeof define==`function`&&define.amd?define([`exports`,`@univerjs/core`,`@univerjs/docs`,`@univerjs/drawing`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverDocsDrawing={},e.UniverCore,e.UniverDocs,e.UniverDrawing))})(this,function(e,t,n,r){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let i={id:`doc.command.insert-doc-image`,type:t.CommandType.COMMAND,handler:(e,r)=>{var i,o,s,c;if(!r)return!1;let l=e.get(t.ICommandService),u=e.get(t.IUniverInstanceService),{unitId:d,drawings:f,textRange:p}=r,m=u.getUnit(d,t.UniverInstanceType.UNIVER_DOC);if(!m)return!1;let h=a(e,d,p);if(!h)return!1;let{segmentId:g=``}=h;if(!((i=m.getSelfOrHeaderFooterModel(g))!=null&&i.getBody()))return!1;let _=m.getSnapshot(),v=!!((o=_.notes)!=null&&o[g]);if(v&&f.some(e=>e.drawingType!==t.DrawingTypeEnum.DRAWING_IMAGE))return!1;let y=(s=_.headers)!=null&&s[g]||(c=_.footers)!=null&&c[g]?f.map(e=>({...e,isMultiTransform:t.BooleanNumber.TRUE,transforms:e.transforms??(e.transform?[e.transform]:null)})):f;v&&(y=f.map(e=>({...e,layoutType:t.PositionedObjectLayoutType.INLINE})));let b=t.BuildTextUtils.drawing.add({selection:h,documentDataModel:m,drawings:y});if(!b)return!1;let x={id:n.RichTextEditingMutation.id,params:{unitId:d,segmentId:g,actions:[],textRanges:[]}};return x.params.actions=b,!!l.syncExecuteCommand(x.id,x.params)}};function a(e,t,r){let i=e.get(n.DocSelectionManagerService).getActiveTextRange(),a=(r?(0,n.normalizeTextRange)(r):null)??(0,n.getContentInsertRange)(e,t);return a?{...i,startOffset:a.startOffset,endOffset:a.endOffset,collapsed:a.startOffset===a.endOffset,segmentId:a.segmentId??(i==null?void 0:i.segmentId)??``}:i??null}function o(e){"@babel/helpers - typeof";return o=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},o(e)}function s(e,t){if(o(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(o(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function c(e){var t=s(e,`string`);return o(t)==`symbol`?t:t+``}function l(e,t,n){return(t=c(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let u=(0,t.createIdentifier)(`doc.drawing-adapter.service`);var d=class{constructor(){l(this,`_adapters`,[])}registerAdapter(e){return this._adapters.push(e),(0,t.toDisposable)(()=>{let t=this._adapters.indexOf(e);t>=0&&this._adapters.splice(t,1)})}getRemoveDrawingMutationInfos(e){let t={redoMutations:[],undoMutations:[]};for(let r of this._adapters){var n;let i=(n=r.getRemoveDrawingMutationInfos)==null?void 0:n.call(r,e);i&&(t.redoMutations.push(...i.redoMutations),t.undoMutations.push(...i.undoMutations))}return t}getEditDrawingCommandInfo(e){for(let n of this._adapters){var t;let r=(t=n.getEditDrawingCommandInfo)==null?void 0:t.call(n,e);if(r)return r}return null}};function f(e,t){var n;let r=(n=e.drawings)==null?void 0:n[t];if(r)return{drawing:r,path:[`drawings`,t],segmentId:``};for(let[n,r]of Object.entries(e.notes??{})){var i;let e=(i=r.drawings)==null?void 0:i[t];if(e)return{drawing:e,path:[`notes`,n,`drawings`,t],segmentId:n}}}function p(e){let t=e.drawings??{},n=e.drawingsOrder??Object.keys(t),r=!1;for(let i of Object.values(e.notes??{}))!i.drawings||Object.keys(i.drawings).length===0||(r||=(t={...t},n=[...n],!0),Object.assign(t,i.drawings),n.push(...i.drawingsOrder??Object.keys(i.drawings)));return{drawings:t,drawingsOrder:n}}let m={id:`doc.command.remove-doc-image`,type:t.CommandType.COMMAND,handler:(e,r)=>{var i,a;if(!r)return!1;let o=e.get(t.ICommandService),s=e.get(t.IUndoRedoService),c=e.get(u),l=e.get(t.IUniverInstanceService),d=e.get(n.DocSelectionManagerService),{unitId:p,drawings:m,textRange:_}=r,v=l.getUnit(p,t.UniverInstanceType.UNIVER_DOC);if(!v||m.length===0)return!1;let y=d.getActiveTextRange(),b=(_?(0,n.normalizeTextRange)(_):null)??(0,n.getContentInsertRange)(e,p),x=v.getSnapshot(),S=m.map(({drawingId:e})=>{var t;return((t=f(x,e))==null?void 0:t.segmentId)??``});if(S.some(e=>e!==S[0]))return!1;let C=S[0]||((b==null?void 0:b.segmentId)??(y==null?void 0:y.segmentId)??``),w=(i=x.notes)==null?void 0:i[C],T=w??x,E=w?[`notes`,C]:[],D=new t.TextX,O=t.JSONX.getInstance(),k=((a=v.getSelfOrHeaderFooterModel(C))==null||(a=a.getBody())==null?void 0:a.customBlocks)??[],A=m.map(e=>k.find(t=>t.blockId===e.drawingId)).filter(e=>!!e).sort((e,t)=>e.startIndex>t.startIndex?1:-1);if(A.length===0)return!1;let j=T.drawings??{},M=new Map(m.map(e=>[e.drawingId,e])),N=A.map(e=>j[e.blockId]).filter(e=>e!=null),P=[],F=[],I=[];for(let e of A){let{blockId:t}=e,n=j[t];if(n==null)continue;let r=M.get(t),i=c.getRemoveDrawingMutationInfos({unitId:p,subUnitId:(r==null?void 0:r.subUnitId)??p,drawing:n,removeDrawings:N});(i.redoMutations.length!==0||i.undoMutations.length!==0)&&(P.push(...i.redoMutations),F.push(...i.undoMutations),I.push(i))}if(!g(I,o))return!1;let L=`doc-drawing-remove-resource:${p}:${A.map(e=>e.blockId).join(`,`)}`,R=null;(P.length>0||F.length>0)&&(R=s.__tempBatchingUndoRedo(p),s.pushUndoRedo({unitID:p,redoMutations:P,undoMutations:F,id:L}));let z=new t.MemoryCursor,B=A[0].startIndex,V=[{startOffset:B,endOffset:B}],H=h(m),U={id:n.RichTextEditingMutation.id,params:{unitId:p,segmentId:C,actions:[],textRanges:V,historyActions:H}},W=[];for(let e of A){let{startIndex:n}=e;n>z.cursor&&D.push({t:t.TextXActionType.RETAIN,len:n-z.cursor}),D.push({t:t.TextXActionType.DELETE,len:1}),z.moveCursorTo(n+1)}W.push(O.editOp(D.serialize(),(0,t.getRichTextEditPath)(v,C)));let G=T.drawingsOrder??[],K=[...A].sort((e,t)=>G.indexOf(t.blockId)-G.indexOf(e.blockId));for(let e of K){let{blockId:t}=e,n=G.indexOf(t);j[t]&&W.push(O.removeOp([...E,`drawings`,t],j[t])),n>=0&&W.push(O.removeOp([...E,`drawingsOrder`,n],t))}U.params.actions=W.reduce((e,n)=>t.JSONX.compose(e,n),null);let q=o.syncExecuteCommand(U.id,U.params);return!q&&R!=null?(R.dispose(),s.rollback(L,p),!1):(R==null||R.dispose(),!!q)}};function h(e){let r=e.flatMap(e=>{switch(e.drawingType){case t.DrawingTypeEnum.DRAWING_IMAGE:return[n.DocHistoryAction.DeleteImage];case t.DrawingTypeEnum.DRAWING_SHAPE:return[n.DocHistoryAction.DeleteShape];case t.DrawingTypeEnum.DRAWING_CHART:return[n.DocHistoryAction.DeleteChart];default:return[]}});return[...new Set(r)]}function g(e,t){let n=[];for(let r of e){if(!v(r.redoMutations,t))return _([...n].reverse(),t),!1;n.push(r.undoMutations)}return!0}function _(e,t){e.forEach(e=>v(e,t))}function v(e,t){for(let n of e)if(!t.syncExecuteCommand(n.id,n.params))return!1;return!0}let y=`drawingsOrder`;function b(e,n,r){let i=new Set(n.filter(t=>e.includes(t))),a=[...e];if(i.size===0)return a;if(r===t.ArrangeTypeEnum.forward)for(let e=a.length-2;e>=0;e--)i.has(a[e])&&!i.has(a[e+1])&&([a[e],a[e+1]]=[a[e+1],a[e]]);else if(r===t.ArrangeTypeEnum.backward)for(let e=1;e<a.length;e++)i.has(a[e])&&!i.has(a[e-1])&&([a[e],a[e-1]]=[a[e-1],a[e]]);else if(r===t.ArrangeTypeEnum.front||r===t.ArrangeTypeEnum.back){let e=a.filter(e=>i.has(e)),n=a.filter(e=>!i.has(e));return r===t.ArrangeTypeEnum.front?[...n,...e]:[...e,...n]}return a}function x(e,n,r){if(n.length!==1)return[...e];let i=[...e],a=i.indexOf(n[0]);if(a<0)return i;let[o]=i.splice(a,1),s=(0,t.normalizeDrawingOrderIndex)(r,e.length);return i.splice(s,0,o),i}function S(e,n){let r=t.JSONX.getInstance(),i=[...e],a=[];for(let e=0;e<n.length;e++){let t=n[e],o=i.indexOf(t);if(o<0||o===e)continue;let s=r.moveOp([y,o],[y,e]);s&&a.push(s),i.splice(o,1),i.splice(e,0,t)}return a.reduce((e,n)=>t.JSONX.compose(e,n),null)}let C={id:`doc.command.set-drawing-arrange`,type:t.CommandType.COMMAND,handler:(e,r)=>{let i=e.get(t.ICommandService);if(r==null)return!1;let{unitId:a,drawingIds:o}=r,s=e.get(t.IUniverInstanceService).getUnit(a,t.UniverInstanceType.UNIVER_DOC),c=s==null?void 0:s.getDrawingsOrder();if(!c)return!1;let l=S(c,r.zOrder===void 0?b(c,o,r.arrangeType):x(c,o,r.zOrder));return!t.JSONX.isNoop(l)&&!!i.syncExecuteCommand(n.RichTextEditingMutation.id,{unitId:a,actions:l,textRanges:null})}},w={id:`doc.command.update-drawing-doc-transform`,type:t.CommandType.COMMAND,handler:(e,r)=>{if(!r)return!1;let i=e.get(t.ICommandService),a=e.get(t.IUniverInstanceService),{unitId:o,drawings:s}=r,c=a.getUnit(o,t.UniverInstanceType.UNIVER_DOC);if(!c)return!1;let l=c.getSnapshot(),u=s.length>0&&s.every(({drawingId:e})=>{var n;return((n=f(l,e))==null?void 0:n.drawing.drawingType)===t.DrawingTypeEnum.DRAWING_IMAGE})?n.DocHistoryAction.UpdateImage:void 0,d=t.JSONX.getInstance(),p=[];for(let{drawingId:e,key:n,value:r}of s){var m;let i=f(l,e);if(!i)return!1;let a=i.drawing,o=n===`srcRect`?a==null?void 0:a.srcRect:a==null||(m=a.docTransform)==null?void 0:m[n];if(!t.Tools.diffValue(o,r)){let e=n===`srcRect`?[...i.path,n]:[...i.path,`docTransform`,n];p.push(o===void 0?d.insertOp(e,r):d.replaceOp(e,o,r))}}return!!i.syncExecuteCommand(n.RichTextEditingMutation.id,{unitId:o,historyAction:u,actions:p.reduce((e,n)=>t.JSONX.compose(e,n),null),textRanges:null,debounce:!0})}},T=function(e){return e.INLINE=`inline`,e.BEHIND_TEXT=`behindText`,e.IN_FRONT_OF_TEXT=`inFrontOfText`,e.WRAP_SQUARE=`wrapSquare`,e.WRAP_TOP_AND_BOTTOM=`wrapTopAndBottom`,e}({}),E={inline:t.PositionedObjectLayoutType.INLINE,wrapSquare:t.PositionedObjectLayoutType.WRAP_SQUARE,wrapTopAndBottom:t.PositionedObjectLayoutType.WRAP_TOP_AND_BOTTOM,inFrontOfText:t.PositionedObjectLayoutType.WRAP_NONE,behindText:t.PositionedObjectLayoutType.WRAP_NONE},D={id:`doc.command.update-doc-drawing-wrapping-style`,type:t.CommandType.COMMAND,handler:(e,r)=>{if(!r)return!1;let{drawings:i,wrappingStyle:a,unitId:o}=r,s=e.get(t.ICommandService),c=e.get(t.IUniverInstanceService).getUnit(o,t.UniverInstanceType.UNIVER_DOC);if(!c)return!1;let l=c.getSnapshot();if(a!==`inline`&&i.some(({drawingId:e})=>{var t;return(t=f(l,e))==null?void 0:t.segmentId}))return!1;let u=i.length>0&&i.every(({drawingId:e})=>{var n;return((n=f(l,e))==null?void 0:n.drawing.drawingType)===t.DrawingTypeEnum.DRAWING_IMAGE})?n.DocHistoryAction.UpdateImage:void 0,d=t.JSONX.getInstance(),p=[];for(let e of i){let n=f(l,e.drawingId),r=n==null?void 0:n.drawing;if(!r||!n)continue;let i=E[a];if(r.layoutType!==i&&p.push(d.replaceOp([...n.path,`layoutType`],r.layoutType,i)),a===`behindText`||a===`inFrontOfText`){let e=a===`behindText`?t.BooleanNumber.TRUE:t.BooleanNumber.FALSE;r.behindDoc!==e&&p.push(d.replaceOp([...n.path,`behindDoc`],r.behindDoc,e))}if(a!==`inline`)for(let i of[`positionH`,`positionV`]){var m;let a=(m=e.docTransform)==null?void 0:m[i],o=r.docTransform[i];a&&!t.Tools.diffValue(o,a)&&p.push(d.replaceOp([...n.path,`docTransform`,i],o,a))}}let h={id:n.RichTextEditingMutation.id,params:{unitId:o,historyAction:u,actions:p.reduce((e,n)=>t.JSONX.compose(e,n),null),textRanges:null}};return!!s.syncExecuteCommand(h.id,h.params)}};var O=class extends r.UnitDrawingService{};let k=(0,t.createIdentifier)(`univer.doc.plugin.doc-drawing.service`);function A(e,t){return function(n,r){t(n,r,e)}}function j(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}let M=`DOC_DRAWING_PLUGIN`;function N(e,t={}){return e.map((e,t)=>({drawingId:e,index:t})).sort((e,n)=>{let r=P(t[e.drawingId]);return r===P(t[n.drawingId])?e.index-n.index:r?-1:1}).map(({drawingId:e})=>e)}function P(e){return(e==null?void 0:e.layoutType)===t.PositionedObjectLayoutType.WRAP_NONE&&e.behindDoc===t.BooleanNumber.TRUE}let F=class extends t.Disposable{constructor(e,t,n,r,i){super(),this._docDrawingService=e,this._drawingManagerService=t,this._resourceManagerService=n,this._univerInstanceService=r,this._commandService=i,this._init()}_init(){this._initSnapshot(),this._initCommands()}_initSnapshot(){let e=e=>{let n=this._univerInstanceService.getUnit(e,t.UniverInstanceType.UNIVER_DOC);if(n){let e=n.getSnapshot().drawings,t=n.getSnapshot().drawingsOrder;return JSON.stringify({data:e??{},order:t??[]})}return``},n=e=>{if(!e)return{data:{},order:[]};try{return JSON.parse(e)}catch{return{data:{},order:[]}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:M,businesses:[t.UniverInstanceType.UNIVER_DOC],toJson:t=>e(t),parseJson:e=>n(e),onUnLoad:e=>{this._unloadDrawingDataForUnit(e)},onLoad:(e,t)=>{this._setDrawingDataForUnit(e,{data:t.data??{},order:t.order??[]})}}))}_unloadDrawingDataForUnit(e){let n=this._univerInstanceService.getUnit(e,t.UniverInstanceType.UNIVER_DOC);n==null||n.resetDrawing({},[]),this._docDrawingService.removeDrawingDataForUnit(e),this._drawingManagerService.removeDrawingDataForUnit(e)}_setDrawingDataForUnit(e,t){let n=this._univerInstanceService.getUnit(e);n!=null&&(n.resetDrawing(t.data,t.order),this.loadDrawingDataForUnit(e))}loadDrawingDataForUnit(e){let n=this._univerInstanceService.getUnit(e,t.UniverInstanceType.UNIVER_DOC);if(!n)return!1;let r=e,{drawings:i,drawingsOrder:a}=p(n.getSnapshot());if(!i||!a)return!1;let o={};for(let[t,n]of Object.entries(i))o[t]=n.unitId===e&&n.subUnitId===r?n:{...n,unitId:e,subUnitId:r};let s={[r]:{unitId:e,subUnitId:r,data:o,order:a}},c={};for(let[e,t]of Object.entries(o))c[e]={...t,hidden:!0};let l={[r]:{...s[r],data:c,order:N(a,i)}};return this._docDrawingService.registerDrawingData(e,s),this._drawingManagerService.registerDrawingData(e,l),!0}_initCommands(){[i,m,w,D,C].forEach(e=>this.disposeWithMe(this._commandService.registerCommand(e)))}};F=j([A(0,k),A(1,r.IDrawingManagerService),A(2,t.IResourceManagerService),A(3,t.IUniverInstanceService),A(4,t.ICommandService)],F);var I=`@univerjs/docs-drawing`,L=`1.0.0-rc.0`;let R={},z=class extends t.Plugin{constructor(e=R,n,r){super(),this._config=e,this._injector=n,this._configService=r;let{...i}=(0,t.merge)({},R,this._config);this._configService.setConfig(`docs-drawing.config`,i)}onStarting(){[[F],[d],[u,{useClass:d}],[O],[k,{useClass:O}]].forEach(e=>this._injector.add(e)),(0,t.touchDependencies)(this._injector,[[F]])}};l(z,`pluginName`,M),l(z,`packageName`,I),l(z,`version`,L),l(z,`type`,t.UniverInstanceType.UNIVER_DOC),z=j([(0,t.DependentOn)(n.UniverDocsPlugin,r.UniverDrawingPlugin),A(1,(0,t.Inject)(t.Injector)),A(2,t.IConfigService)],z),e.DOCS_DRAWING_PLUGIN=M,e.DocDrawingAdapterService=d,Object.defineProperty(e,"DocDrawingController",{enumerable:!0,get:function(){return F}}),e.DocDrawingService=O,e.IDocDrawingAdapterService=u,e.IDocDrawingService=k,e.InsertDocDrawingCommand=i,e.RemoveDocDrawingCommand=m,e.SetDocDrawingArrangeCommand=C,e.TextWrappingStyle=T,Object.defineProperty(e,"UniverDocsDrawingPlugin",{enumerable:!0,get:function(){return z}}),e.UpdateDocDrawingWrappingStyleCommand=D,e.UpdateDrawingDocTransformCommand=w,e.WRAPPING_STYLE_TO_LAYOUT_TYPE=E,e.collectDocDrawings=p,e.findDocDrawing=f,e.getDocDrawingRenderOrder=N});
|