@univerjs/docs 0.16.1 → 0.17.0-insiders.20260318-5bef180

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/index.js CHANGED
@@ -1,609 +1 @@
1
- var ie = Object.defineProperty;
2
- var re = (i, e, t) => e in i ? ie(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t;
3
- var u = (i, e, t) => re(i, typeof e != "symbol" ? e + "" : e, t);
4
- import { CommandType as P, RxDisposable as V, UniverInstanceType as y, ICommandService as B, IUniverInstanceService as I, Inject as w, LocaleService as oe, isInternalEditorID as ce, JSONX as x, Disposable as Q, BuildTextUtils as C, Injector as ae, IConfigService as le, Plugin as ue, merge as de, createInterceptorKey as Z, DOCS_NORMAL_EDITOR_UNIT_ID_KEY as ge, DOCS_FORMULA_BAR_EDITOR_UNIT_ID_KEY as he, DisposableCollection as U, toDisposable as _e, remove as fe, composeInterceptors as Se } from "@univerjs/core";
5
- import { NORMAL_TEXT_SELECTION_PLUGIN_STYLE as Ie, DocumentSkeleton as pe, DocumentViewModel as me, IRenderManagerService as Re } from "@univerjs/engine-render";
6
- import { Subject as ve, BehaviorSubject as O, takeUntil as ee } from "rxjs";
7
- const k = {
8
- id: "doc.operation.set-selections",
9
- type: P.OPERATION,
10
- handler: () => !0
11
- };
12
- var xe = Object.getOwnPropertyDescriptor, Oe = (i, e, t, n) => {
13
- for (var s = n > 1 ? void 0 : n ? xe(e, t) : e, r = i.length - 1, o; r >= 0; r--)
14
- (o = i[r]) && (s = o(s) || s);
15
- return s;
16
- }, F = (i, e) => (t, n) => e(t, n, i);
17
- let m = class extends V {
18
- constructor(e, t) {
19
- super();
20
- u(this, "_currentSelection", null);
21
- u(this, "_textSelectionInfo", /* @__PURE__ */ new Map());
22
- u(this, "_textSelection$", new ve());
23
- u(this, "textSelection$", this._textSelection$.asObservable());
24
- u(this, "_refreshSelection$", new O(null));
25
- u(this, "refreshSelection$", this._refreshSelection$.asObservable());
26
- this._commandService = e, this._univerInstanceService = t, this._listenCurrentUnit();
27
- }
28
- _listenCurrentUnit() {
29
- this._univerInstanceService.getCurrentTypeOfUnit$(y.UNIVER_DOC).pipe(ee(this.dispose$)).subscribe((e) => {
30
- if (e == null)
31
- return;
32
- const t = e.getUnitId();
33
- this._setCurrentSelectionNotRefresh({
34
- unitId: t,
35
- subUnitId: t
36
- });
37
- });
38
- }
39
- __getCurrentSelection() {
40
- return this._currentSelection;
41
- }
42
- getSelectionInfo(e = this._currentSelection) {
43
- return this._getTextRanges(e);
44
- }
45
- refreshSelection(e = this._currentSelection) {
46
- e != null && this._refresh(e);
47
- }
48
- // **Only used in test case** because this does not go through the render layer.
49
- __TEST_ONLY_setCurrentSelection(e) {
50
- this._currentSelection = e, this._refresh(e);
51
- }
52
- getTextRanges(e = this._currentSelection) {
53
- var t;
54
- return (t = this._getTextRanges(e)) == null ? void 0 : t.textRanges;
55
- }
56
- getRectRanges(e = this._currentSelection) {
57
- var t;
58
- return (t = this._getTextRanges(e)) == null ? void 0 : t.rectRanges;
59
- }
60
- getDocRanges(e = this._currentSelection) {
61
- var r, o;
62
- const t = (r = this.getTextRanges(e)) != null ? r : [], n = (o = this.getRectRanges(e)) != null ? o : [];
63
- return [...t, ...n].filter((c) => c.startOffset != null && c.endOffset != null).sort((c, a) => c.startOffset > a.startOffset ? 1 : c.startOffset < a.startOffset ? -1 : 0);
64
- }
65
- getActiveTextRange() {
66
- const e = this._getTextRanges(this._currentSelection);
67
- if (e == null)
68
- return;
69
- const { textRanges: t } = e;
70
- return t.find((n) => n.isActive);
71
- }
72
- /**
73
- *
74
- * @deprecated
75
- */
76
- getActiveRectRange() {
77
- const e = this._getTextRanges(this._currentSelection);
78
- if (e == null)
79
- return;
80
- const { rectRanges: t } = e;
81
- return t.find((n) => n.isActive);
82
- }
83
- // **Only used in test case** because this does not go through the render layer.
84
- __TEST_ONLY_add(e, t = !0) {
85
- this._currentSelection != null && this._addByParam({
86
- ...this._currentSelection,
87
- textRanges: e,
88
- rectRanges: [],
89
- segmentId: "",
90
- segmentPage: -1,
91
- isEditing: t,
92
- style: Ie
93
- // mock style.
94
- });
95
- }
96
- // Use to replace the current editor selection.
97
- /**
98
- * @deprecated pls use replaceDocRanges.
99
- */
100
- replaceTextRanges(e, t = !0, n) {
101
- return this.replaceDocRanges(
102
- e,
103
- this._currentSelection,
104
- t,
105
- n
106
- );
107
- }
108
- replaceDocRanges(e, t = this._currentSelection, n = !0, s) {
109
- if (t == null)
110
- return;
111
- const { unitId: r, subUnitId: o } = t;
112
- this._refreshSelection$.next({
113
- unitId: r,
114
- subUnitId: o,
115
- docRanges: e,
116
- isEditing: n,
117
- options: s
118
- });
119
- }
120
- // Only use in doc-selection-render.controller.ts
121
- __replaceTextRangesWithNoRefresh(e, t) {
122
- if (this._currentSelection == null)
123
- return;
124
- const n = {
125
- ...e,
126
- ...t
127
- };
128
- this._replaceByParam(n), this._textSelection$.next(n);
129
- const { unitId: s, subUnitId: r, segmentId: o, style: c, textRanges: a, rectRanges: l, isEditing: d } = n, h = [...a, ...l].filter((g) => g.startOffset != null && g.endOffset != null).sort((g, _) => g.startOffset > _.startOffset ? 1 : g.startOffset < _.startOffset ? -1 : 0);
130
- this._commandService.executeCommand(k.id, {
131
- unitId: s,
132
- subUnitId: r,
133
- segmentId: o,
134
- style: c,
135
- isEditing: d,
136
- ranges: h
137
- });
138
- }
139
- dispose() {
140
- this._textSelection$.complete(), this._refreshSelection$.complete();
141
- }
142
- _setCurrentSelectionNotRefresh(e) {
143
- this._currentSelection = e;
144
- }
145
- _getTextRanges(e) {
146
- var s;
147
- if (e == null)
148
- return;
149
- const { unitId: t, subUnitId: n = "" } = e;
150
- return (s = this._textSelectionInfo.get(t)) == null ? void 0 : s.get(n);
151
- }
152
- _refresh(e) {
153
- const t = this._getTextRanges(e);
154
- if (t == null)
155
- return;
156
- const { textRanges: n, rectRanges: s } = t, r = [...n, ...s], { unitId: o, subUnitId: c } = e;
157
- this._refreshSelection$.next({
158
- unitId: o,
159
- subUnitId: c,
160
- docRanges: r,
161
- isEditing: !1
162
- });
163
- }
164
- _replaceByParam(e) {
165
- const { unitId: t, subUnitId: n, ...s } = e;
166
- this._textSelectionInfo.has(t) || this._textSelectionInfo.set(t, /* @__PURE__ */ new Map()), this._textSelectionInfo.get(t).set(n, { ...s });
167
- }
168
- _addByParam(e) {
169
- const { unitId: t, subUnitId: n, ...s } = e;
170
- this._textSelectionInfo.has(t) || this._textSelectionInfo.set(t, /* @__PURE__ */ new Map());
171
- const r = this._textSelectionInfo.get(t);
172
- r.has(n) ? r.get(n).textRanges.push(...e.textRanges) : r.set(n, { ...s });
173
- }
174
- };
175
- m = Oe([
176
- F(0, B),
177
- F(1, I)
178
- ], m);
179
- var Ce = Object.getOwnPropertyDescriptor, Me = (i, e, t, n) => {
180
- for (var s = n > 1 ? void 0 : n ? Ce(e, t) : e, r = i.length - 1, o; r >= 0; r--)
181
- (o = i[r]) && (s = o(s) || s);
182
- return s;
183
- }, W = (i, e) => (t, n) => e(t, n, i);
184
- let D = class extends V {
185
- constructor(e, t, n) {
186
- super();
187
- u(this, "_skeleton");
188
- u(this, "_docViewModel");
189
- u(this, "_currentSkeleton$", new O(null));
190
- u(this, "currentSkeleton$", this._currentSkeleton$.asObservable());
191
- // CurrentSkeletonBefore for pre-triggered logic during registration
192
- u(this, "_currentSkeletonBefore$", new O(null));
193
- u(this, "currentSkeletonBefore$", this._currentSkeletonBefore$.asObservable());
194
- u(this, "_currentViewModel$", new O(null));
195
- u(this, "currentViewModel$", this._currentViewModel$.asObservable());
196
- this._context = e, this._localeService = t, this._univerInstanceService = n, this._init(), this._univerInstanceService.getCurrentTypeOfUnit$(y.UNIVER_DOC).pipe(ee(this.dispose$)).subscribe((s) => {
197
- s && s.getUnitId() === this._context.unitId && this._update(s);
198
- });
199
- }
200
- dispose() {
201
- super.dispose(), this._currentSkeletonBefore$.complete(), this._currentSkeleton$.complete();
202
- }
203
- getSkeleton() {
204
- return this._skeleton;
205
- }
206
- getViewModel() {
207
- return this._docViewModel;
208
- }
209
- _init() {
210
- const e = this._context.unit;
211
- this._update(e);
212
- }
213
- _update(e) {
214
- const t = this._context.unitId;
215
- if (e.getBody() == null)
216
- return;
217
- this._docViewModel && ce(t) ? (this._docViewModel.reset(e), this._context.unit = e) : this._docViewModel || (this._docViewModel = this._buildDocViewModel(e)), this._skeleton || (this._skeleton = this._buildSkeleton(this._docViewModel));
218
- const n = this._skeleton;
219
- n.calculate(), this._currentSkeletonBefore$.next(n), this._currentSkeleton$.next(n), this._currentViewModel$.next(this._docViewModel);
220
- }
221
- _buildSkeleton(e) {
222
- return pe.create(e, this._localeService);
223
- }
224
- _buildDocViewModel(e) {
225
- return new me(e);
226
- }
227
- };
228
- D = Me([
229
- W(1, w(oe)),
230
- W(2, I)
231
- ], D);
232
- class te extends V {
233
- constructor() {
234
- super();
235
- u(this, "_docStateChangeParams$", new O(null));
236
- u(this, "docStateChangeParams$", this._docStateChangeParams$.asObservable());
237
- }
238
- emitStateChangeInfo(t) {
239
- this._docStateChangeParams$.next(t);
240
- }
241
- dispose() {
242
- super.dispose(), this._docStateChangeParams$.complete();
243
- }
244
- }
245
- const Y = "doc.mutation.rich-text-editing", M = {
246
- id: Y,
247
- type: P.MUTATION,
248
- // eslint-disable-next-line max-lines-per-function
249
- handler: (i, e) => {
250
- var G, z;
251
- const {
252
- unitId: t,
253
- segmentId: n = "",
254
- actions: s,
255
- textRanges: r,
256
- prevTextRanges: o,
257
- trigger: c,
258
- noHistory: a,
259
- isCompositionEnd: l,
260
- noNeedSetTextRange: d,
261
- debounce: h,
262
- isEditing: g = !0,
263
- isSync: _,
264
- syncer: f
265
- } = e, R = i.get(I), p = i.get(Re), v = i.get(te), S = R.getUniverDocInstance(t), j = (G = p.getRenderById(t)) == null ? void 0 : G.with(D).getViewModel();
266
- if (S == null || j == null)
267
- throw new Error(`DocumentDataModel or documentViewModel not found for unitId: ${t}`);
268
- const L = i.get(m), b = (z = L.getDocRanges()) != null ? z : [], ne = !!S.getSnapshot().disabled;
269
- if (x.isNoop(s) || s && s.length === 0 || ne)
270
- return {
271
- unitId: t,
272
- actions: [],
273
- textRanges: b
274
- };
275
- const X = x.invertWithDoc(s, S.getSnapshot());
276
- S.apply(s), j.reset(S), !d && r && c != null && !_ && queueMicrotask(() => {
277
- L.replaceDocRanges(r, { unitId: t, subUnitId: t }, g, e.options);
278
- });
279
- const se = {
280
- commandId: Y,
281
- unitId: t,
282
- segmentId: n,
283
- trigger: c,
284
- noHistory: a,
285
- debounce: h,
286
- redoState: {
287
- actions: s,
288
- textRanges: r
289
- },
290
- undoState: {
291
- actions: X,
292
- textRanges: o != null ? o : b
293
- },
294
- isCompositionEnd: l,
295
- isSync: _,
296
- syncer: f
297
- };
298
- return v.emitStateChangeInfo(se), {
299
- unitId: t,
300
- actions: X,
301
- textRanges: b
302
- };
303
- }
304
- }, De = {
305
- id: "doc.mutation.rename-doc",
306
- type: P.MUTATION,
307
- handler: (i, e) => {
308
- const n = i.get(I).getUnit(e.unitId, y.UNIVER_DOC);
309
- return n ? (n.setName(e.name), !0) : !1;
310
- }
311
- }, Te = "docs.config", K = {};
312
- var ye = Object.getOwnPropertyDescriptor, we = (i, e, t, n) => {
313
- for (var s = n > 1 ? void 0 : n ? ye(e, t) : e, r = i.length - 1, o; r >= 0; r--)
314
- (o = i[r]) && (s = o(s) || s);
315
- return s;
316
- }, $ = (i, e) => (t, n) => e(t, n, i);
317
- let T = class extends Q {
318
- constructor(i, e, t) {
319
- super(), this._commandService = i, this._textSelectionManagerService = e, this._univerInstanceService = t, this._initSelectionChange();
320
- }
321
- _transformCustomRange(i, e) {
322
- var o;
323
- const { startOffset: t, endOffset: n, collapsed: s } = e, r = (o = i.getCustomRanges()) == null ? void 0 : o.filter((c) => !c.wholeEntity || t <= c.startIndex && n > c.endIndex ? !1 : s ? c.startIndex < t && c.endIndex >= n : C.range.isIntersects(t, n - 1, c.startIndex, c.endIndex));
324
- if (r != null && r.length) {
325
- let c = t, a = n;
326
- return r.forEach((l) => {
327
- c = Math.min(l.startIndex, c), a = Math.max(l.endIndex + 1, a);
328
- }), {
329
- ...e,
330
- startOffset: c,
331
- endOffset: a,
332
- collapsed: c === a
333
- };
334
- }
335
- return e;
336
- }
337
- _initSelectionChange() {
338
- this.disposeWithMe(this._commandService.onCommandExecuted((i) => {
339
- if (i.id === k.id) {
340
- const e = i.params, { unitId: t, ranges: n, isEditing: s } = e, r = this._univerInstanceService.getUnit(t);
341
- if (!r)
342
- return;
343
- const o = n.map((c) => this._transformCustomRange(r, c));
344
- o.some((c, a) => n[a] !== c) && this._textSelectionManagerService.replaceTextRanges(o, s);
345
- }
346
- }));
347
- }
348
- };
349
- T = we([
350
- $(0, B),
351
- $(1, w(m)),
352
- $(2, I)
353
- ], T);
354
- var be = Object.getOwnPropertyDescriptor, Ue = (i, e, t, n) => {
355
- for (var s = n > 1 ? void 0 : n ? be(e, t) : e, r = i.length - 1, o; r >= 0; r--)
356
- (o = i[r]) && (s = o(s) || s);
357
- return s;
358
- }, H = (i, e) => (t, n) => e(t, n, i);
359
- const $e = "DOCS_PLUGIN";
360
- var N;
361
- let q = (N = class extends ue {
362
- // static override type = UniverInstanceType.UNIVER_DOC;
363
- constructor(i = K, e, t) {
364
- super(), this._config = i, this._injector = e, this._configService = t;
365
- const { ...n } = de(
366
- {},
367
- K,
368
- this._config
369
- );
370
- this._configService.setConfig(Te, n);
371
- }
372
- onStarting() {
373
- this._initializeDependencies(), this._initializeCommands();
374
- }
375
- _initializeCommands() {
376
- [
377
- M,
378
- De,
379
- k
380
- ].forEach((i) => {
381
- this._injector.get(B).registerCommand(i);
382
- });
383
- }
384
- _initializeDependencies() {
385
- [
386
- [m],
387
- [te],
388
- [T]
389
- ].forEach((i) => this._injector.add(i));
390
- }
391
- onReady() {
392
- this._injector.get(T);
393
- }
394
- }, u(N, "pluginName", $e), N);
395
- q = Ue([
396
- H(1, w(ae)),
397
- H(2, le)
398
- ], q);
399
- const Ee = Z("CUSTOM_RANGE"), Ne = Z("CUSTOM_DECORATION"), E = {
400
- CUSTOM_RANGE: Ee,
401
- CUSTOM_DECORATION: Ne
402
- };
403
- var Pe = Object.getOwnPropertyDescriptor, Ve = (i, e, t, n) => {
404
- for (var s = n > 1 ? void 0 : n ? Pe(e, t) : e, r = i.length - 1, o; r >= 0; r--)
405
- (o = i[r]) && (s = o(s) || s);
406
- return s;
407
- }, Be = (i, e) => (t, n) => e(t, n, i);
408
- let J = class extends Q {
409
- constructor(e, t) {
410
- super();
411
- u(this, "_interceptorsByName", /* @__PURE__ */ new Map());
412
- this._context = e, this._docSkeletonManagerService = t;
413
- const n = this._docSkeletonManagerService.getViewModel(), s = n.getDataModel().getUnitId();
414
- if (s === ge || s === he)
415
- return;
416
- this.disposeWithMe(this.interceptDocumentViewModel(n)), this.disposeWithMe(this.intercept(E.CUSTOM_RANGE, {
417
- priority: -1,
418
- handler: (o, c, a) => a(o)
419
- }));
420
- let r = new U();
421
- n.segmentViewModels$.subscribe((o) => {
422
- r.dispose(), r = new U(), o.forEach((c) => {
423
- r.add(this.interceptDocumentViewModel(c));
424
- });
425
- }), this.disposeWithMe(r);
426
- }
427
- intercept(e, t) {
428
- const n = e;
429
- this._interceptorsByName.has(n) || this._interceptorsByName.set(n, []);
430
- const s = this._interceptorsByName.get(n);
431
- return s.push(t), this._interceptorsByName.set(
432
- n,
433
- s.sort((r, o) => {
434
- var c, a;
435
- return ((c = o.priority) != null ? c : 0) - ((a = r.priority) != null ? a : 0);
436
- })
437
- ), this.disposeWithMe(_e(() => fe(this._interceptorsByName.get(n), t)));
438
- }
439
- fetchThroughInterceptors(e) {
440
- const t = e, n = this._interceptorsByName.get(t);
441
- return Se(n || []);
442
- }
443
- interceptDocumentViewModel(e) {
444
- const t = new U();
445
- return t.add(e.registerCustomRangeInterceptor({
446
- getCustomRange: (n) => {
447
- var s;
448
- return this.fetchThroughInterceptors(E.CUSTOM_RANGE)(
449
- e.getCustomRangeRaw(n),
450
- {
451
- index: n,
452
- unitId: e.getDataModel().getUnitId(),
453
- customRanges: (s = e.getDataModel().getCustomRanges()) != null ? s : []
454
- }
455
- );
456
- },
457
- getCustomDecoration: (n) => {
458
- var s;
459
- return this.fetchThroughInterceptors(E.CUSTOM_DECORATION)(
460
- e.getCustomDecorationRaw(n),
461
- {
462
- index: n,
463
- unitId: e.getDataModel().getUnitId(),
464
- customDecorations: (s = e.getDataModel().getCustomDecorations()) != null ? s : []
465
- }
466
- );
467
- }
468
- })), t;
469
- }
470
- };
471
- J = Ve([
472
- Be(1, w(D))
473
- ], J);
474
- function A(i, e = "") {
475
- if (!e)
476
- return ["body"];
477
- const { headers: t, footers: n } = i.getSnapshot();
478
- if (t == null && n == null)
479
- throw new Error("Document data model must have headers or footers when update by segment id");
480
- if ((t == null ? void 0 : t[e]) != null)
481
- return ["headers", e, "body"];
482
- if ((n == null ? void 0 : n[e]) != null)
483
- return ["footers", e, "body"];
484
- throw new Error("Segment id not found in headers or footers");
485
- }
486
- function Xe(i, e, t) {
487
- const { unitId: n, segmentId: s } = e, o = i.get(I).getUnit(n);
488
- if (!o)
489
- return !1;
490
- const c = {
491
- id: M.id,
492
- params: {
493
- unitId: e.unitId,
494
- actions: [],
495
- textRanges: void 0
496
- }
497
- }, a = x.getInstance(), l = C.customRange.add({ ...e, body: t });
498
- if (!l)
499
- return !1;
500
- const d = A(o, s);
501
- return c.params.actions = a.editOp(l.serialize(), d), c;
502
- }
503
- function Ge(i, e) {
504
- var S;
505
- const { rangeId: t, rangeType: n, wholeEntity: s, properties: r, unitId: o, selections: c } = e, a = i.get(m), l = i.get(I), d = c != null ? c : a.getTextRanges({ unitId: o, subUnitId: o }), h = (S = d == null ? void 0 : d[0]) == null ? void 0 : S.segmentId;
506
- if (!(d != null && d.length))
507
- return !1;
508
- const g = l.getUnit(o, y.UNIVER_DOC);
509
- if (!g)
510
- return !1;
511
- const _ = g.getSelfOrHeaderFooterModel(h).getBody();
512
- if (!_)
513
- return !1;
514
- const f = C.customRange.add({
515
- ranges: d,
516
- rangeId: t,
517
- rangeType: n,
518
- segmentId: h,
519
- wholeEntity: s,
520
- properties: r,
521
- body: _
522
- });
523
- if (!f)
524
- return !1;
525
- const R = x.getInstance(), p = {
526
- id: M.id,
527
- params: {
528
- unitId: o,
529
- actions: [],
530
- textRanges: f.selections,
531
- segmentId: h
532
- },
533
- textX: f
534
- }, v = A(g, h);
535
- return p.params.actions = R.editOp(f.serialize(), v), p;
536
- }
537
- function ze(i, e) {
538
- const { unitId: t, segmentId: n, insert: s } = e, o = i.get(I).getUnit(t);
539
- if (!o)
540
- return !1;
541
- const c = {
542
- id: M.id,
543
- params: {
544
- unitId: e.unitId,
545
- actions: [],
546
- textRanges: void 0,
547
- segmentId: n
548
- }
549
- }, a = x.getInstance(), l = C.customRange.delete({
550
- documentDataModel: o,
551
- rangeId: e.rangeId,
552
- insert: s,
553
- segmentId: n
554
- });
555
- if (!l)
556
- return !1;
557
- const d = A(o, n);
558
- return c.params.actions = a.editOp(l.serialize(), d), c.params.textRanges = l.selections, c;
559
- }
560
- function Fe(i, e) {
561
- var f, R, p, v;
562
- const { unitId: t, body: n, doc: s } = e;
563
- let r = s;
564
- if (r || (r = i.get(I).getUnit(t)), !r)
565
- return !1;
566
- const o = (f = e.selection) == null ? void 0 : f.segmentId, c = (R = r.getSelfOrHeaderFooterModel(o)) == null ? void 0 : R.getBody();
567
- if (!c) return !1;
568
- const a = i.get(m), l = (p = e.selection) != null ? p : a.getActiveTextRange();
569
- if (!l || !c)
570
- return !1;
571
- const d = (v = e.textRanges) != null ? v : [{
572
- startOffset: l.startOffset + n.dataStream.length,
573
- endOffset: l.startOffset + n.dataStream.length,
574
- collapsed: !0,
575
- segmentId: o
576
- }], h = C.selection.replace({
577
- selection: l,
578
- body: n,
579
- doc: r
580
- });
581
- if (!h)
582
- return !1;
583
- const g = {
584
- id: M.id,
585
- params: {
586
- unitId: t,
587
- actions: [],
588
- textRanges: d,
589
- debounce: !0,
590
- segmentId: o
591
- },
592
- textX: h
593
- }, _ = x.getInstance();
594
- return g.params.actions = _.editOp(h.serialize()), g;
595
- }
596
- export {
597
- E as DOC_INTERCEPTOR_POINT,
598
- J as DocInterceptorService,
599
- m as DocSelectionManagerService,
600
- D as DocSkeletonManagerService,
601
- te as DocStateEmitService,
602
- M as RichTextEditingMutation,
603
- k as SetTextSelectionsOperation,
604
- q as UniverDocsPlugin,
605
- Ge as addCustomRangeBySelectionFactory,
606
- Xe as addCustomRangeFactory,
607
- ze as deleteCustomRangeFactory,
608
- Fe as replaceSelectionFactory
609
- };
1
+ import{BuildTextUtils as e,CommandType as t,DOCS_FORMULA_BAR_EDITOR_UNIT_ID_KEY as n,DOCS_NORMAL_EDITOR_UNIT_ID_KEY as r,Disposable as i,DisposableCollection as a,ICommandService as o,IConfigService as s,IUniverInstanceService as c,Inject as l,Injector as u,JSONX as d,LocaleService as f,Plugin as p,RxDisposable as m,UniverInstanceType as h,composeInterceptors as g,createInterceptorKey as _,isInternalEditorID as v,merge as y,remove as b,toDisposable as x}from"@univerjs/core";import{DocumentSkeleton as S,DocumentViewModel as C,IRenderManagerService as w,NORMAL_TEXT_SELECTION_PLUGIN_STYLE as T}from"@univerjs/engine-render";import{BehaviorSubject as E,Subject as D,takeUntil as O}from"rxjs";const k={id:`doc.operation.set-selections`,type:t.OPERATION,handler:()=>!0};function A(e){"@babel/helpers - typeof";return A=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},A(e)}function j(e,t){if(A(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(A(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function M(e){var t=j(e,`string`);return A(t)==`symbol`?t:t+``}function N(e,t,n){return(t=M(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function P(e,t){return function(n,r){t(n,r,e)}}function F(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let I=class extends m{constructor(e,t){super(),this._commandService=e,this._univerInstanceService=t,N(this,`_currentSelection`,null),N(this,`_textSelectionInfo`,new Map),N(this,`_textSelection$`,new D),N(this,`textSelection$`,this._textSelection$.asObservable()),N(this,`_refreshSelection$`,new E(null)),N(this,`refreshSelection$`,this._refreshSelection$.asObservable()),this._listenCurrentUnit()}_listenCurrentUnit(){this._univerInstanceService.getCurrentTypeOfUnit$(h.UNIVER_DOC).pipe(O(this.dispose$)).subscribe(e=>{if(e==null)return;let t=e.getUnitId();this._setCurrentSelectionNotRefresh({unitId:t,subUnitId:t})})}__getCurrentSelection(){return this._currentSelection}getSelectionInfo(e=this._currentSelection){return this._getTextRanges(e)}refreshSelection(e=this._currentSelection){e!=null&&this._refresh(e)}__TEST_ONLY_setCurrentSelection(e){this._currentSelection=e,this._refresh(e)}getTextRanges(e=this._currentSelection){var t;return(t=this._getTextRanges(e))==null?void 0:t.textRanges}getRectRanges(e=this._currentSelection){var t;return(t=this._getTextRanges(e))==null?void 0:t.rectRanges}getDocRanges(e=this._currentSelection){var t,n;let r=(t=this.getTextRanges(e))==null?[]:t,i=(n=this.getRectRanges(e))==null?[]:n;return[...r,...i].filter(e=>e.startOffset!=null&&e.endOffset!=null).sort((e,t)=>e.startOffset>t.startOffset?1:e.startOffset<t.startOffset?-1:0)}getActiveTextRange(){let e=this._getTextRanges(this._currentSelection);if(e==null)return;let{textRanges:t}=e;return t.find(e=>e.isActive)}getActiveRectRange(){let e=this._getTextRanges(this._currentSelection);if(e==null)return;let{rectRanges:t}=e;return t.find(e=>e.isActive)}__TEST_ONLY_add(e,t=!0){this._currentSelection!=null&&this._addByParam({...this._currentSelection,textRanges:e,rectRanges:[],segmentId:``,segmentPage:-1,isEditing:t,style:T})}replaceTextRanges(e,t=!0,n){return this.replaceDocRanges(e,this._currentSelection,t,n)}replaceDocRanges(e,t=this._currentSelection,n=!0,r){if(t==null)return;let{unitId:i,subUnitId:a}=t;this._refreshSelection$.next({unitId:i,subUnitId:a,docRanges:e,isEditing:n,options:r})}__replaceTextRangesWithNoRefresh(e,t){if(this._currentSelection==null)return;let n={...e,...t};this._replaceByParam(n),this._textSelection$.next(n);let{unitId:r,subUnitId:i,segmentId:a,style:o,textRanges:s,rectRanges:c,isEditing:l}=n,u=[...s,...c].filter(e=>e.startOffset!=null&&e.endOffset!=null).sort((e,t)=>e.startOffset>t.startOffset?1:e.startOffset<t.startOffset?-1:0);this._commandService.executeCommand(k.id,{unitId:r,subUnitId:i,segmentId:a,style:o,isEditing:l,ranges:u})}dispose(){this._textSelection$.complete(),this._refreshSelection$.complete()}_setCurrentSelectionNotRefresh(e){this._currentSelection=e}_getTextRanges(e){var t;if(e==null)return;let{unitId:n,subUnitId:r=``}=e;return(t=this._textSelectionInfo.get(n))==null?void 0:t.get(r)}_refresh(e){let t=this._getTextRanges(e);if(t==null)return;let{textRanges:n,rectRanges:r}=t,i=[...n,...r],{unitId:a,subUnitId:o}=e;this._refreshSelection$.next({unitId:a,subUnitId:o,docRanges:i,isEditing:!1})}_replaceByParam(e){let{unitId:t,subUnitId:n,...r}=e;this._textSelectionInfo.has(t)||this._textSelectionInfo.set(t,new Map),this._textSelectionInfo.get(t).set(n,{...r})}_addByParam(e){let{unitId:t,subUnitId:n,...r}=e;this._textSelectionInfo.has(t)||this._textSelectionInfo.set(t,new Map);let i=this._textSelectionInfo.get(t);i.has(n)?i.get(n).textRanges.push(...e.textRanges):i.set(n,{...r})}};I=F([P(0,o),P(1,c)],I);let L=class extends m{constructor(e,t,n){super(),this._context=e,this._localeService=t,this._univerInstanceService=n,N(this,`_skeleton`,void 0),N(this,`_docViewModel`,void 0),N(this,`_currentSkeleton$`,new E(null)),N(this,`currentSkeleton$`,this._currentSkeleton$.asObservable()),N(this,`_currentSkeletonBefore$`,new E(null)),N(this,`currentSkeletonBefore$`,this._currentSkeletonBefore$.asObservable()),N(this,`_currentViewModel$`,new E(null)),N(this,`currentViewModel$`,this._currentViewModel$.asObservable()),this._init(),this._univerInstanceService.getCurrentTypeOfUnit$(h.UNIVER_DOC).pipe(O(this.dispose$)).subscribe(e=>{e&&e.getUnitId()===this._context.unitId&&this._update(e)})}dispose(){super.dispose(),this._currentSkeletonBefore$.complete(),this._currentSkeleton$.complete()}getSkeleton(){return this._skeleton}getViewModel(){return this._docViewModel}_init(){let e=this._context.unit;this._update(e)}_update(e){let t=this._context.unitId;if(e.getBody()==null)return;this._docViewModel&&v(t)?(this._docViewModel.reset(e),this._context.unit=e):this._docViewModel||(this._docViewModel=this._buildDocViewModel(e)),this._skeleton||(this._skeleton=this._buildSkeleton(this._docViewModel));let n=this._skeleton;n.calculate(),this._currentSkeletonBefore$.next(n),this._currentSkeleton$.next(n),this._currentViewModel$.next(this._docViewModel)}_buildSkeleton(e){return S.create(e,this._localeService)}_buildDocViewModel(e){return new C(e)}};L=F([P(1,l(f)),P(2,c)],L);var R=class extends m{constructor(){super(),N(this,`_docStateChangeParams$`,new E(null)),N(this,`docStateChangeParams$`,this._docStateChangeParams$.asObservable())}emitStateChangeInfo(e){this._docStateChangeParams$.next(e)}dispose(){super.dispose(),this._docStateChangeParams$.complete()}};const z=`doc.mutation.rich-text-editing`,B={id:z,type:t.MUTATION,handler:(e,t)=>{var n,r;let{unitId:i,segmentId:a=``,actions:o,textRanges:s,prevTextRanges:l,trigger:u,noHistory:f,isCompositionEnd:p,noNeedSetTextRange:m,debounce:h,isEditing:g=!0,isSync:_,syncer:v}=t,y=e.get(c),b=e.get(w),x=e.get(R),S=y.getUniverDocInstance(i),C=(n=b.getRenderById(i))==null?void 0:n.with(L).getViewModel();if(S==null||C==null)throw Error(`DocumentDataModel or documentViewModel not found for unitId: ${i}`);let T=e.get(I),E=(r=T.getDocRanges())==null?[]:r,D=!!S.getSnapshot().disabled;if(d.isNoop(o)||o&&o.length===0||D)return{unitId:i,actions:[],textRanges:E};let O=d.invertWithDoc(o,S.getSnapshot());S.apply(o),C.reset(S),!m&&s&&u!=null&&!_&&queueMicrotask(()=>{T.replaceDocRanges(s,{unitId:i,subUnitId:i},g,t.options)});let k={commandId:z,unitId:i,segmentId:a,trigger:u,noHistory:f,debounce:h,redoState:{actions:o,textRanges:s},undoState:{actions:O,textRanges:l==null?E:l},isCompositionEnd:p,isSync:_,syncer:v};return x.emitStateChangeInfo(k),{unitId:i,actions:O,textRanges:E}}};var V=`@univerjs/docs`,H=`0.17.0-insiders.20260318-5bef180`;const U={id:`doc.mutation.rename-doc`,type:t.MUTATION,handler:(e,t)=>{let n=e.get(c).getUnit(t.unitId,h.UNIVER_DOC);return n?(n.setName(t.name),!0):!1}},W=`docs.config`;Symbol(W);const G={};let K=class extends i{constructor(e,t,n){super(),this._commandService=e,this._textSelectionManagerService=t,this._univerInstanceService=n,this._initSelectionChange()}_transformCustomRange(t,n){var r;let{startOffset:i,endOffset:a,collapsed:o}=n,s=(r=t.getCustomRanges())==null?void 0:r.filter(t=>!t.wholeEntity||i<=t.startIndex&&a>t.endIndex?!1:o?t.startIndex<i&&t.endIndex>=a:e.range.isIntersects(i,a-1,t.startIndex,t.endIndex));if(s!=null&&s.length){let e=i,t=a;return s.forEach(n=>{e=Math.min(n.startIndex,e),t=Math.max(n.endIndex+1,t)}),{...n,startOffset:e,endOffset:t,collapsed:e===t}}return n}_initSelectionChange(){this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===k.id){let{unitId:t,ranges:n,isEditing:r}=e.params,i=this._univerInstanceService.getUnit(t);if(!i)return;let a=n.map(e=>this._transformCustomRange(i,e));a.some((e,t)=>n[t]!==e)&&this._textSelectionManagerService.replaceTextRanges(a,r)}}))}};K=F([P(0,o),P(1,l(I)),P(2,c)],K);let q=class extends p{constructor(e=G,t,n){super(),this._config=e,this._injector=t,this._configService=n;let{...r}=y({},G,this._config);this._configService.setConfig(W,r)}onStarting(){this._initializeDependencies(),this._initializeCommands()}_initializeCommands(){[B,U,k].forEach(e=>{this._injector.get(o).registerCommand(e)})}_initializeDependencies(){[[I],[R],[K]].forEach(e=>this._injector.add(e))}onReady(){this._injector.get(K)}};N(q,`pluginName`,`DOCS_PLUGIN`),N(q,`packageName`,V),N(q,`version`,H),q=F([P(1,l(u)),P(2,s)],q);const J={CUSTOM_RANGE:_(`CUSTOM_RANGE`),CUSTOM_DECORATION:_(`CUSTOM_DECORATION`)};let Y=class extends i{constructor(e,t){super(),this._context=e,this._docSkeletonManagerService=t,N(this,`_interceptorsByName`,new Map);let i=this._docSkeletonManagerService.getViewModel(),o=i.getDataModel().getUnitId();if(o===r||o===n)return;this.disposeWithMe(this.interceptDocumentViewModel(i)),this.disposeWithMe(this.intercept(J.CUSTOM_RANGE,{priority:-1,handler:(e,t,n)=>n(e)}));let s=new a;i.segmentViewModels$.subscribe(e=>{s.dispose(),s=new a,e.forEach(e=>{s.add(this.interceptDocumentViewModel(e))})}),this.disposeWithMe(s)}intercept(e,t){let n=e;this._interceptorsByName.has(n)||this._interceptorsByName.set(n,[]);let r=this._interceptorsByName.get(n);return r.push(t),this._interceptorsByName.set(n,r.sort((e,t)=>{var n,r;return((n=t.priority)==null?0:n)-((r=e.priority)==null?0:r)})),this.disposeWithMe(x(()=>b(this._interceptorsByName.get(n),t)))}fetchThroughInterceptors(e){let t=e;return g(this._interceptorsByName.get(t)||[])}interceptDocumentViewModel(e){let t=new a;return t.add(e.registerCustomRangeInterceptor({getCustomRange:t=>{var n;return this.fetchThroughInterceptors(J.CUSTOM_RANGE)(e.getCustomRangeRaw(t),{index:t,unitId:e.getDataModel().getUnitId(),customRanges:(n=e.getDataModel().getCustomRanges())==null?[]:n})},getCustomDecoration:t=>{var n;return this.fetchThroughInterceptors(J.CUSTOM_DECORATION)(e.getCustomDecorationRaw(t),{index:t,unitId:e.getDataModel().getUnitId(),customDecorations:(n=e.getDataModel().getCustomDecorations())==null?[]:n})}})),t}};Y=F([P(1,l(L))],Y);function X(e,t=``){if(!t)return[`body`];let{headers:n,footers:r}=e.getSnapshot();if(n==null&&r==null)throw Error(`Document data model must have headers or footers when update by segment id`);if((n==null?void 0:n[t])!=null)return[`headers`,t,`body`];if((r==null?void 0:r[t])!=null)return[`footers`,t,`body`];throw Error(`Segment id not found in headers or footers`)}function Z(t,n,r){let{unitId:i,segmentId:a}=n,o=t.get(c).getUnit(i);if(!o)return!1;let s={id:B.id,params:{unitId:n.unitId,actions:[],textRanges:void 0}},l=d.getInstance(),u=e.customRange.add({...n,body:r});if(!u)return!1;let f=X(o,a);return s.params.actions=l.editOp(u.serialize(),f),s}function Q(t,n){var r;let{rangeId:i,rangeType:a,wholeEntity:o,properties:s,unitId:l,selections:u}=n,f=t.get(I),p=t.get(c),m=u==null?f.getTextRanges({unitId:l,subUnitId:l}):u,g=m==null||(r=m[0])==null?void 0:r.segmentId;if(!(m!=null&&m.length))return!1;let _=p.getUnit(l,h.UNIVER_DOC);if(!_)return!1;let v=_.getSelfOrHeaderFooterModel(g).getBody();if(!v)return!1;let y=e.customRange.add({ranges:m,rangeId:i,rangeType:a,segmentId:g,wholeEntity:o,properties:s,body:v});if(!y)return!1;let b=d.getInstance(),x={id:B.id,params:{unitId:l,actions:[],textRanges:y.selections,segmentId:g},textX:y},S=X(_,g);return x.params.actions=b.editOp(y.serialize(),S),x}function $(t,n){let{unitId:r,segmentId:i,insert:a}=n,o=t.get(c).getUnit(r);if(!o)return!1;let s={id:B.id,params:{unitId:n.unitId,actions:[],textRanges:void 0,segmentId:i}},l=d.getInstance(),u=e.customRange.delete({documentDataModel:o,rangeId:n.rangeId,insert:a,segmentId:i});if(!u)return!1;let f=X(o,i);return s.params.actions=l.editOp(u.serialize(),f),s.params.textRanges=u.selections,s}function ee(t,n){var r,i,a,o;let{unitId:s,body:l,doc:u}=n,f=u;if(f||(f=t.get(c).getUnit(s)),!f)return!1;let p=(r=n.selection)==null?void 0:r.segmentId,m=(i=f.getSelfOrHeaderFooterModel(p))==null?void 0:i.getBody();if(!m)return!1;let h=t.get(I),g=(a=n.selection)==null?h.getActiveTextRange():a;if(!g||!m)return!1;let _=(o=n.textRanges)==null?[{startOffset:g.startOffset+l.dataStream.length,endOffset:g.startOffset+l.dataStream.length,collapsed:!0,segmentId:p}]:o,v=e.selection.replace({selection:g,body:l,doc:f});if(!v)return!1;let y={id:B.id,params:{unitId:s,actions:[],textRanges:_,debounce:!0,segmentId:p},textX:v},b=d.getInstance();return y.params.actions=b.editOp(v.serialize()),y}export{J as DOC_INTERCEPTOR_POINT,Y as DocInterceptorService,I as DocSelectionManagerService,L as DocSkeletonManagerService,R as DocStateEmitService,B as RichTextEditingMutation,k as SetTextSelectionsOperation,q as UniverDocsPlugin,Q as addCustomRangeBySelectionFactory,Z as addCustomRangeFactory,$ as deleteCustomRangeFactory,ee as replaceSelectionFactory};
@@ -1,5 +1,20 @@
1
- import { IMutation, IMutationCommonParams, JSONXActions, Nullable } from '@univerjs/core';
2
- import { ITextRangeWithStyle } from '@univerjs/engine-render';
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 { IMutation, IMutationCommonParams, JSONXActions, Nullable } from '@univerjs/core';
17
+ import type { ITextRangeWithStyle } from '@univerjs/engine-render';
3
18
  export interface IRichTextEditingMutationParams extends IMutationCommonParams {
4
19
  unitId: string;
5
20
  actions: JSONXActions;
@@ -1,4 +1,19 @@
1
- import { ICommand } from '@univerjs/core';
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 { ICommand } from '@univerjs/core';
2
17
  export interface IDocsRenameMutationParams {
3
18
  name: string;
4
19
  unitId: string;