@univerjs/docs 0.16.1 → 0.17.0-insiders.20260318-d69dc16

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/es/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-d69dc16`;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};