@fileverse-dev/ddoc 7.0.2 → 7.1.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.
Files changed (29) hide show
  1. package/dist/{ddoc-persistence-DLdSviUr.mjs → ddoc-persistence-DwgX_Jov.mjs} +1 -1
  2. package/dist/headless-editor-utils.es.js +1 -1
  3. package/dist/{index-DzUWhgai.mjs → index-C27hDm2f.mjs} +1 -1
  4. package/dist/index.es.js +8100 -7662
  5. package/dist/package/components/inline-comment/comment-drawer-desktop.d.ts +1 -0
  6. package/dist/package/components/inline-comment/comment-drawer.d.ts +1 -1
  7. package/dist/package/components/inline-comment/types.d.ts +1 -0
  8. package/dist/package/components/inline-comment/use-comment-drawer-filters.d.ts +6 -2
  9. package/dist/package/components/tabs/confirm-delete-modal.d.ts +1 -1
  10. package/dist/package/components/tabs/document-mobile-tab-panel.d.ts +3 -1
  11. package/dist/package/components/tabs/document-tabs-sidebar.d.ts +13 -4
  12. package/dist/package/components/tabs/tab-item.d.ts +9 -3
  13. package/dist/package/components/tabs/use-tab-tree-view.d.ts +36 -0
  14. package/dist/package/components/tabs/utils/__tests__/subtab-test-helpers.d.ts +11 -0
  15. package/dist/package/components/tabs/utils/__tests__/v7/v7-tab-ops.d.ts +15 -0
  16. package/dist/package/components/tabs/utils/__tests__/v7/v7-tab-utils.d.ts +45 -0
  17. package/dist/package/components/tabs/utils/tab-operations.d.ts +37 -0
  18. package/dist/package/components/tabs/utils/tab-utils.d.ts +25 -1
  19. package/dist/package/components/toc/document-outline.d.ts +1 -1
  20. package/dist/package/components/toc/types.d.ts +4 -0
  21. package/dist/package/hooks/use-tab-manager.d.ts +1 -0
  22. package/dist/package/types.d.ts +5 -0
  23. package/dist/package/use-ddoc-editor.d.ts +1 -0
  24. package/dist/persistence.es.js +1 -1
  25. package/dist/style.css +1 -1
  26. package/dist/tab-utils-Cvs3qmhi.mjs +340 -0
  27. package/dist/{use-headless-editor-CbMBM1S_.mjs → use-headless-editor-Bs_4LOHk.mjs} +3 -3
  28. package/package.json +2 -2
  29. package/dist/tab-utils-BNFvrUAj.mjs +0 -284
@@ -0,0 +1,340 @@
1
+ import { fromUint8Array as L, toUint8Array as B } from "js-base64";
2
+ import * as h from "yjs";
3
+ const R = "default", j = "Tab 1", U = "ddocTabs", N = "tabs_order", C = "tabs_name_registry", b = "tabs_emoji_registry", z = "tabs_state", K = "tabs_delete_registry", O = "activeTabId", k = "tabs_parent_registry", P = 3, re = (e) => Math.min(Math.max(e.depth ?? 1, 1), P);
4
+ function E(e) {
5
+ return {
6
+ order: e.getArray(N),
7
+ nameById: e.getMap(C),
8
+ emojiById: e.getMap(b),
9
+ tabState: e.getMap(z),
10
+ // Soft-deleted tabs keep their fragment for undo and late peer updates.
11
+ // This tombstone stops self-heal from resurrecting deleted tabs from stale tab metadata.
12
+ deletedById: e.getMap(K),
13
+ // Reading a root that was never written adds nothing to the doc, so a doc
14
+ // without subtabs stays byte-for-byte the same.
15
+ parentById: e.getMap(k)
16
+ };
17
+ }
18
+ function v(e, t) {
19
+ if (e)
20
+ try {
21
+ if (Array.isArray(e)) {
22
+ const n = e.map((r) => B(r));
23
+ h.applyUpdate(t, h.mergeUpdates(n), "self");
24
+ return;
25
+ }
26
+ h.applyUpdate(t, B(e), "self");
27
+ } catch (n) {
28
+ console.log(n);
29
+ }
30
+ }
31
+ function M(e) {
32
+ return e ? e.toArray().filter((t) => typeof t == "string") : [];
33
+ }
34
+ function X(e) {
35
+ const t = e.getMap(U), n = t.get("order"), r = t.get("tabs"), s = t.get("activeTabId"), c = M(
36
+ n instanceof h.Array ? n : null
37
+ ), o = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map();
38
+ return r instanceof h.Map && r.forEach((m, a) => {
39
+ if (!(m instanceof h.Map) || typeof a != "string") return;
40
+ const i = m.get("name"), l = m.get("emoji");
41
+ typeof i == "string" && o.set(a, i), (typeof l == "string" || l === null) && f.set(a, l);
42
+ }), {
43
+ order: c,
44
+ names: o,
45
+ emojis: f,
46
+ activeTabId: s instanceof h.Text && s.toString() || null,
47
+ deletedIds: /* @__PURE__ */ new Set(),
48
+ hasData: c.length > 0 || o.size > 0 || f.size > 0 || s instanceof h.Text && s.length > 0
49
+ };
50
+ }
51
+ function V(e) {
52
+ const t = E(e), n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Set();
53
+ t.nameById.forEach((f, m) => {
54
+ typeof f == "string" && n.set(m, f);
55
+ }), t.emojiById.forEach((f, m) => {
56
+ (typeof f == "string" || f === null) && r.set(m, f);
57
+ }), t.deletedById.forEach((f, m) => {
58
+ f === !0 && s.add(m);
59
+ });
60
+ const c = t.tabState.get(O), o = typeof c == "string" ? c : null;
61
+ return {
62
+ order: M(t.order),
63
+ names: n,
64
+ emojis: r,
65
+ activeTabId: o,
66
+ deletedIds: s,
67
+ hasData: t.order.length > 0 || t.nameById.size > 0 || t.emojiById.size > 0 || t.deletedById.size > 0 || o !== null
68
+ };
69
+ }
70
+ function S(e) {
71
+ const t = /* @__PURE__ */ new Set(), n = [];
72
+ return e.forEach((r) => {
73
+ t.has(r) || (t.add(r), n.push(r));
74
+ }), n;
75
+ }
76
+ function Y(e) {
77
+ return e === 0 ? j : `Tab ${e + 1}`;
78
+ }
79
+ function W(e, t) {
80
+ return S([
81
+ ...e.order,
82
+ ...t.order,
83
+ ...Array.from(e.names.keys()),
84
+ ...Array.from(e.emojis.keys()),
85
+ ...Array.from(t.names.keys()),
86
+ ...Array.from(t.emojis.keys())
87
+ ]);
88
+ }
89
+ function G(e, t) {
90
+ const n = new Set(e.deletedIds);
91
+ t.forEach((a) => {
92
+ a.deletedIds.forEach((i) => n.add(i));
93
+ });
94
+ const r = /* @__PURE__ */ new Set(), s = [];
95
+ e.order.forEach((a) => {
96
+ !n.has(a) && !r.has(a) && (r.add(a), s.push(a));
97
+ });
98
+ const c = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map();
99
+ e.names.forEach((a, i) => {
100
+ n.has(i) || c.set(i, a);
101
+ }), e.emojis.forEach((a, i) => {
102
+ n.has(i) || o.set(i, a);
103
+ }), t.forEach((a) => {
104
+ a.order.forEach((i) => {
105
+ n.has(i) || (r.has(i) || (r.add(i), s.push(i)), !c.has(i) && a.names.has(i) && c.set(i, a.names.get(i) ?? j), o.has(i) || o.set(
106
+ i,
107
+ a.emojis.has(i) ? a.emojis.get(i) ?? null : null
108
+ ));
109
+ });
110
+ }), s.forEach((a, i) => {
111
+ c.has(a) || c.set(a, Y(i)), (!o.has(a) || o.get(a) === void 0) && o.set(a, null);
112
+ });
113
+ const m = [
114
+ e.activeTabId,
115
+ ...t.map((a) => a.activeTabId)
116
+ ].find(
117
+ (a) => !!a && r.has(a) && !n.has(a)
118
+ ) ?? s[0] ?? null;
119
+ return {
120
+ order: s,
121
+ names: c,
122
+ emojis: o,
123
+ activeTabId: m,
124
+ deletedIds: n
125
+ };
126
+ }
127
+ function H(e, t, n) {
128
+ const r = (n == null ? void 0 : n.createDefaultTabIfMissing) ?? !1, s = new Set(e.deletedIds), c = W(
129
+ e,
130
+ t
131
+ ).filter((l) => !s.has(l)), o = S([
132
+ ...e.order,
133
+ ...t.order
134
+ ]);
135
+ c.forEach((l) => {
136
+ o.includes(l) || o.push(l);
137
+ }), o.length === 0 && r && o.push(R);
138
+ const f = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map();
139
+ o.forEach((l, y) => {
140
+ const p = e.names.get(l) ?? t.names.get(l) ?? Y(y), A = e.emojis.has(l) ? e.emojis.get(l) ?? null : t.emojis.has(l) ? t.emojis.get(l) ?? null : null;
141
+ f.set(l, p), m.set(l, A);
142
+ });
143
+ const i = [
144
+ e.activeTabId,
145
+ t.activeTabId
146
+ ].find(
147
+ (l) => !!l && o.includes(l)
148
+ ) ?? o[0] ?? null;
149
+ return {
150
+ order: o,
151
+ names: f,
152
+ emojis: m,
153
+ activeTabId: i,
154
+ deletedIds: s
155
+ };
156
+ }
157
+ function q(e, t) {
158
+ return e.length !== t.length ? !1 : e.every((n, r) => n === t[r]);
159
+ }
160
+ function J(e, t) {
161
+ const n = M(e);
162
+ return q(n, t) ? !1 : (e.length > 0 && e.delete(0, e.length), t.length > 0 && e.insert(0, t), !0);
163
+ }
164
+ function $(e, t, n) {
165
+ const r = e.get(t);
166
+ return n === null ? r === void 0 ? !1 : (e.delete(t), !0) : r === n ? !1 : (e.set(t, n), !0);
167
+ }
168
+ function _(e, t) {
169
+ let n = !1;
170
+ return Array.from(e.keys()).forEach((r) => {
171
+ t.has(r) || (e.delete(r), n = !0);
172
+ }), t.forEach((r, s) => {
173
+ e.get(s) !== r && (e.set(s, r), n = !0);
174
+ }), n;
175
+ }
176
+ function F(e, t, n = "self") {
177
+ const r = E(e);
178
+ let s = !1;
179
+ const c = new Map(
180
+ Array.from(t.deletedIds, (o) => [o, !0])
181
+ );
182
+ return e.transact(() => {
183
+ t.order.forEach((o) => {
184
+ e.getXmlFragment(o);
185
+ }), s = J(r.order, t.order) || s, s = _(r.nameById, t.names) || s, s = _(r.emojiById, t.emojis) || s, s = $(
186
+ r.tabState,
187
+ O,
188
+ t.activeTabId
189
+ ) || s, s = _(r.deletedById, c) || s;
190
+ }, n), s;
191
+ }
192
+ function w(e, t) {
193
+ const n = V(e), r = X(e), s = H(
194
+ n,
195
+ r,
196
+ t
197
+ );
198
+ return {
199
+ tabSnapshotV2: n,
200
+ legacySnapshot: r,
201
+ resolvedTabState: s
202
+ };
203
+ }
204
+ function I(e, t, n = "self") {
205
+ const { resolvedTabState: r } = w(e, t);
206
+ return F(e, r, n);
207
+ }
208
+ function se(e, t, n) {
209
+ v(e, t);
210
+ const r = I(t, {
211
+ ...n,
212
+ createDefaultTabIfMissing: (n == null ? void 0 : n.createDefaultTabIfMissing) ?? !0
213
+ }), s = E(t), c = x(s), o = Q(s) || R;
214
+ return {
215
+ tabList: c,
216
+ // A stored open tab that is not shown (under a deleted tab) opens the
217
+ // first tab instead.
218
+ activeTabId: c.length === 0 || c.some((f) => f.id === o) ? o : c[0].id,
219
+ didWrite: r
220
+ };
221
+ }
222
+ function ae(e) {
223
+ return E(e);
224
+ }
225
+ function oe(e, t, n = "self") {
226
+ const r = I(e, t, n);
227
+ return {
228
+ ...E(e),
229
+ didWrite: r
230
+ };
231
+ }
232
+ function ie(e, t) {
233
+ const n = e.map((o) => {
234
+ const f = new h.Doc();
235
+ return v(o, f), w(f, t).resolvedTabState;
236
+ }), r = new h.Doc();
237
+ v(e, r);
238
+ const { resolvedTabState: s } = w(
239
+ r,
240
+ t
241
+ ), c = G(
242
+ s,
243
+ n
244
+ );
245
+ return F(r, c), L(h.encodeStateAsUpdate(r));
246
+ }
247
+ function Q(e) {
248
+ const t = e.tabState.get(O);
249
+ return typeof t == "string" ? t : null;
250
+ }
251
+ function Z(e, t) {
252
+ return e.nameById.has(t) ? {
253
+ name: e.nameById.get(t) ?? j,
254
+ emoji: e.emojiById.has(t) ? e.emojiById.get(t) ?? null : null
255
+ } : null;
256
+ }
257
+ function x(e) {
258
+ const t = te(e), n = e.parentById;
259
+ return !n || n.size === 0 ? t : ee(t, n, e.deletedById);
260
+ }
261
+ function ee(e, t, n) {
262
+ const r = new Set(e.map((u) => u.id)), s = /* @__PURE__ */ new Set();
263
+ n == null || n.forEach((u, d) => {
264
+ u === !0 && !r.has(d) && s.add(d);
265
+ });
266
+ const c = (u) => {
267
+ const d = t.get(u);
268
+ return typeof d == "string" && d !== u ? d : null;
269
+ }, o = (u) => {
270
+ const d = /* @__PURE__ */ new Set([u]);
271
+ let g = c(u);
272
+ for (; g && !d.has(g); ) {
273
+ if (s.has(g)) return !0;
274
+ d.add(g), g = c(g);
275
+ }
276
+ return !1;
277
+ }, f = e.filter((u) => !o(u.id)), m = f.length > 0 ? f : e, a = new Set(m.map((u) => u.id)), i = (u) => {
278
+ const d = c(u);
279
+ if (!d || !a.has(d)) return null;
280
+ const g = /* @__PURE__ */ new Set();
281
+ let T = d;
282
+ for (; T && a.has(T) && !g.has(T); ) {
283
+ if (T === u) return null;
284
+ g.add(T), T = c(T);
285
+ }
286
+ return d;
287
+ }, l = "", y = /* @__PURE__ */ new Map();
288
+ m.forEach((u) => {
289
+ const d = i(u.id) ?? l, g = y.get(d);
290
+ g ? g.push(u) : y.set(d, [u]);
291
+ });
292
+ const p = [], A = (u, d) => {
293
+ var g;
294
+ (g = y.get(u)) == null || g.forEach((T) => {
295
+ var D;
296
+ p.push({
297
+ ...T,
298
+ parentId: u === l ? null : u,
299
+ depth: d,
300
+ hasChildren: (((D = y.get(T.id)) == null ? void 0 : D.length) ?? 0) > 0
301
+ }), A(T.id, d + 1);
302
+ });
303
+ };
304
+ return A(l, 1), p;
305
+ }
306
+ function te(e) {
307
+ const t = /* @__PURE__ */ new Set();
308
+ return M(e.order).filter((n) => t.has(n) ? !1 : (t.add(n), !0)).map((n) => {
309
+ const r = Z(
310
+ e,
311
+ n
312
+ );
313
+ return r ? {
314
+ id: n,
315
+ name: r.name,
316
+ emoji: r.emoji
317
+ } : null;
318
+ }).filter((n) => n !== null);
319
+ }
320
+ function ce(e) {
321
+ return e.toArray().map((t) => t instanceof h.XmlElement || t instanceof h.XmlText ? t.clone() : null).filter((t) => t !== null);
322
+ }
323
+ export {
324
+ O as A,
325
+ R as D,
326
+ U as L,
327
+ P as M,
328
+ N as O,
329
+ z as S,
330
+ ae as a,
331
+ x as b,
332
+ Z as c,
333
+ Q as d,
334
+ ce as e,
335
+ se as f,
336
+ re as g,
337
+ j as h,
338
+ ie as m,
339
+ oe as s
340
+ };
@@ -40,7 +40,7 @@ import SC from "katex";
40
40
  import { List as TC } from "react-window";
41
41
  import { create as My, useStore as AC, createStore as EC } from "zustand";
42
42
  import { fromUint8Array as fn, toUint8Array as yp } from "js-base64";
43
- import { D as Hr, O as MC, L as NC, m as bp, g as OC, A as DC } from "./tab-utils-BNFvrUAj.mjs";
43
+ import { D as Hr, O as MC, L as NC, m as bp, a as OC, A as DC } from "./tab-utils-Cvs3qmhi.mjs";
44
44
  import { getAddressName as IC } from "@fileverse/ens";
45
45
  import RC from "embla-carousel-react";
46
46
  import { useMediaQuery as Ny, useOnClickOutside as LC } from "usehooks-ts";
@@ -39983,7 +39983,7 @@ ${u}
39983
39983
  f = h.showLoader(), p = h.removeLoader;
39984
39984
  }
39985
39985
  try {
39986
- const h = await a.arrayBuffer(), { default: m } = await import("./index-DzUWhgai.mjs").then((v) => v.i), { value: g } = await m.convertToHtml(
39986
+ const h = await a.arrayBuffer(), { default: m } = await import("./index-C27hDm2f.mjs").then((v) => v.i), { value: g } = await m.convertToHtml(
39987
39987
  { arrayBuffer: h },
39988
39988
  {
39989
39989
  styleMap: hk,
@@ -44301,7 +44301,7 @@ const G5 = (t, e) => {
44301
44301
  async function d(f, p, h) {
44302
44302
  if (f.type === "application/vnd.openxmlformats-officedocument.wordprocessingml.document" || f.name.endsWith(".docx"))
44303
44303
  try {
44304
- const m = await f.arrayBuffer(), { default: g } = await import("./index-DzUWhgai.mjs").then((C) => C.i), { value: y } = await g.convertToHtml(
44304
+ const m = await f.arrayBuffer(), { default: g } = await import("./index-C27hDm2f.mjs").then((C) => C.i), { value: y } = await g.convertToHtml(
44305
44305
  { arrayBuffer: m },
44306
44306
  {
44307
44307
  styleMap: hk,
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@fileverse-dev/ddoc",
3
3
  "private": false,
4
4
  "description": "DDoc",
5
- "version": "7.0.2",
5
+ "version": "7.1.0",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "git+https://github.com/fileverse/fileverse-ddocs.git"
@@ -205,4 +205,4 @@
205
205
  "vitest": "^2.1.0",
206
206
  "yjs": "13.6.30"
207
207
  }
208
- }
208
+ }
@@ -1,284 +0,0 @@
1
- import { fromUint8Array as R, toUint8Array as p } from "js-base64";
2
- import * as d from "yjs";
3
- const M = "default", E = "Tab 1", Y = "ddocTabs", F = "tabs_order", S = "tabs_name_registry", N = "tabs_emoji_registry", U = "tabs_state", L = "tabs_delete_registry", A = "activeTabId";
4
- function m(e) {
5
- return {
6
- order: e.getArray(F),
7
- nameById: e.getMap(S),
8
- emojiById: e.getMap(N),
9
- tabState: e.getMap(U),
10
- // Soft-deleted tabs keep their fragment for undo and late peer updates.
11
- // This tombstone stops self-heal from resurrecting deleted tabs from stale tab metadata.
12
- deletedById: e.getMap(L)
13
- };
14
- }
15
- function h(e, t) {
16
- if (e)
17
- try {
18
- if (Array.isArray(e)) {
19
- const n = e.map((r) => p(r));
20
- d.applyUpdate(t, d.mergeUpdates(n), "self");
21
- return;
22
- }
23
- d.applyUpdate(t, p(e), "self");
24
- } catch (n) {
25
- console.log(n);
26
- }
27
- }
28
- function g(e) {
29
- return e ? e.toArray().filter((t) => typeof t == "string") : [];
30
- }
31
- function C(e) {
32
- const t = e.getMap(Y), n = t.get("order"), r = t.get("tabs"), s = t.get("activeTabId"), l = g(
33
- n instanceof d.Array ? n : null
34
- ), o = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map();
35
- return r instanceof d.Map && r.forEach((u, a) => {
36
- if (!(u instanceof d.Map) || typeof a != "string") return;
37
- const i = u.get("name"), c = u.get("emoji");
38
- typeof i == "string" && o.set(a, i), (typeof c == "string" || c === null) && f.set(a, c);
39
- }), {
40
- order: l,
41
- names: o,
42
- emojis: f,
43
- activeTabId: s instanceof d.Text && s.toString() || null,
44
- deletedIds: /* @__PURE__ */ new Set(),
45
- hasData: l.length > 0 || o.size > 0 || f.size > 0 || s instanceof d.Text && s.length > 0
46
- };
47
- }
48
- function I(e) {
49
- const t = m(e), n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Set();
50
- t.nameById.forEach((f, u) => {
51
- typeof f == "string" && n.set(u, f);
52
- }), t.emojiById.forEach((f, u) => {
53
- (typeof f == "string" || f === null) && r.set(u, f);
54
- }), t.deletedById.forEach((f, u) => {
55
- f === !0 && s.add(u);
56
- });
57
- const l = t.tabState.get(A), o = typeof l == "string" ? l : null;
58
- return {
59
- order: g(t.order),
60
- names: n,
61
- emojis: r,
62
- activeTabId: o,
63
- deletedIds: s,
64
- hasData: t.order.length > 0 || t.nameById.size > 0 || t.emojiById.size > 0 || t.deletedById.size > 0 || o !== null
65
- };
66
- }
67
- function _(e) {
68
- const t = /* @__PURE__ */ new Set(), n = [];
69
- return e.forEach((r) => {
70
- t.has(r) || (t.add(r), n.push(r));
71
- }), n;
72
- }
73
- function j(e) {
74
- return e === 0 ? E : `Tab ${e + 1}`;
75
- }
76
- function K(e, t) {
77
- return _([
78
- ...e.order,
79
- ...t.order,
80
- ...Array.from(e.names.keys()),
81
- ...Array.from(e.emojis.keys()),
82
- ...Array.from(t.names.keys()),
83
- ...Array.from(t.emojis.keys())
84
- ]);
85
- }
86
- function b(e, t) {
87
- const n = new Set(e.deletedIds);
88
- t.forEach((a) => {
89
- a.deletedIds.forEach((i) => n.add(i));
90
- });
91
- const r = /* @__PURE__ */ new Set(), s = [];
92
- e.order.forEach((a) => {
93
- !n.has(a) && !r.has(a) && (r.add(a), s.push(a));
94
- });
95
- const l = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map();
96
- e.names.forEach((a, i) => {
97
- n.has(i) || l.set(i, a);
98
- }), e.emojis.forEach((a, i) => {
99
- n.has(i) || o.set(i, a);
100
- }), t.forEach((a) => {
101
- a.order.forEach((i) => {
102
- n.has(i) || (r.has(i) || (r.add(i), s.push(i)), !l.has(i) && a.names.has(i) && l.set(i, a.names.get(i) ?? E), o.has(i) || o.set(
103
- i,
104
- a.emojis.has(i) ? a.emojis.get(i) ?? null : null
105
- ));
106
- });
107
- }), s.forEach((a, i) => {
108
- l.has(a) || l.set(a, j(i)), (!o.has(a) || o.get(a) === void 0) && o.set(a, null);
109
- });
110
- const u = [
111
- e.activeTabId,
112
- ...t.map((a) => a.activeTabId)
113
- ].find(
114
- (a) => !!a && r.has(a) && !n.has(a)
115
- ) ?? s[0] ?? null;
116
- return {
117
- order: s,
118
- names: l,
119
- emojis: o,
120
- activeTabId: u,
121
- deletedIds: n
122
- };
123
- }
124
- function z(e, t, n) {
125
- const r = (n == null ? void 0 : n.createDefaultTabIfMissing) ?? !1, s = new Set(e.deletedIds), l = K(
126
- e,
127
- t
128
- ).filter((c) => !s.has(c)), o = _([
129
- ...e.order,
130
- ...t.order
131
- ]);
132
- l.forEach((c) => {
133
- o.includes(c) || o.push(c);
134
- }), o.length === 0 && r && o.push(M);
135
- const f = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map();
136
- o.forEach((c, D) => {
137
- const B = e.names.get(c) ?? t.names.get(c) ?? j(D), O = e.emojis.has(c) ? e.emojis.get(c) ?? null : t.emojis.has(c) ? t.emojis.get(c) ?? null : null;
138
- f.set(c, B), u.set(c, O);
139
- });
140
- const i = [
141
- e.activeTabId,
142
- t.activeTabId
143
- ].find(
144
- (c) => !!c && o.includes(c)
145
- ) ?? o[0] ?? null;
146
- return {
147
- order: o,
148
- names: f,
149
- emojis: u,
150
- activeTabId: i,
151
- deletedIds: s
152
- };
153
- }
154
- function k(e, t) {
155
- return e.length !== t.length ? !1 : e.every((n, r) => n === t[r]);
156
- }
157
- function V(e, t) {
158
- const n = g(e);
159
- return k(n, t) ? !1 : (e.length > 0 && e.delete(0, e.length), t.length > 0 && e.insert(0, t), !0);
160
- }
161
- function W(e, t, n) {
162
- const r = e.get(t);
163
- return n === null ? r === void 0 ? !1 : (e.delete(t), !0) : r === n ? !1 : (e.set(t, n), !0);
164
- }
165
- function T(e, t) {
166
- let n = !1;
167
- return Array.from(e.keys()).forEach((r) => {
168
- t.has(r) || (e.delete(r), n = !0);
169
- }), t.forEach((r, s) => {
170
- e.get(s) !== r && (e.set(s, r), n = !0);
171
- }), n;
172
- }
173
- function v(e, t, n = "self") {
174
- const r = m(e);
175
- let s = !1;
176
- const l = new Map(
177
- Array.from(t.deletedIds, (o) => [o, !0])
178
- );
179
- return e.transact(() => {
180
- t.order.forEach((o) => {
181
- e.getXmlFragment(o);
182
- }), s = V(r.order, t.order) || s, s = T(r.nameById, t.names) || s, s = T(r.emojiById, t.emojis) || s, s = W(
183
- r.tabState,
184
- A,
185
- t.activeTabId
186
- ) || s, s = T(r.deletedById, l) || s;
187
- }, n), s;
188
- }
189
- function y(e, t) {
190
- const n = I(e), r = C(e), s = z(
191
- n,
192
- r,
193
- t
194
- );
195
- return {
196
- tabSnapshotV2: n,
197
- legacySnapshot: r,
198
- resolvedTabState: s
199
- };
200
- }
201
- function w(e, t, n = "self") {
202
- const { resolvedTabState: r } = y(e, t);
203
- return v(e, r, n);
204
- }
205
- function P(e, t, n) {
206
- h(e, t);
207
- const r = w(t, {
208
- ...n,
209
- createDefaultTabIfMissing: (n == null ? void 0 : n.createDefaultTabIfMissing) ?? !0
210
- }), s = m(t);
211
- return {
212
- tabList: q(s),
213
- activeTabId: X(s) || M,
214
- didWrite: r
215
- };
216
- }
217
- function $(e) {
218
- return m(e);
219
- }
220
- function H(e, t, n = "self") {
221
- const r = w(e, t, n);
222
- return {
223
- ...m(e),
224
- didWrite: r
225
- };
226
- }
227
- function Q(e, t) {
228
- const n = e.map((o) => {
229
- const f = new d.Doc();
230
- return h(o, f), y(f, t).resolvedTabState;
231
- }), r = new d.Doc();
232
- h(e, r);
233
- const { resolvedTabState: s } = y(
234
- r,
235
- t
236
- ), l = b(
237
- s,
238
- n
239
- );
240
- return v(r, l), R(d.encodeStateAsUpdate(r));
241
- }
242
- function X(e) {
243
- const t = e.tabState.get(A);
244
- return typeof t == "string" ? t : null;
245
- }
246
- function G(e, t) {
247
- return e.nameById.has(t) ? {
248
- name: e.nameById.get(t) ?? E,
249
- emoji: e.emojiById.has(t) ? e.emojiById.get(t) ?? null : null
250
- } : null;
251
- }
252
- function q(e) {
253
- const t = /* @__PURE__ */ new Set();
254
- return g(e.order).filter((n) => t.has(n) ? !1 : (t.add(n), !0)).map((n) => {
255
- const r = G(
256
- e,
257
- n
258
- );
259
- return r ? {
260
- id: n,
261
- name: r.name,
262
- emoji: r.emoji
263
- } : null;
264
- }).filter((n) => n !== null);
265
- }
266
- function Z(e) {
267
- return e.toArray().map((t) => t instanceof d.XmlElement || t instanceof d.XmlText ? t.clone() : null).filter((t) => t !== null);
268
- }
269
- export {
270
- A,
271
- M as D,
272
- Y as L,
273
- F as O,
274
- U as S,
275
- G as a,
276
- X as b,
277
- Z as c,
278
- P as d,
279
- q as e,
280
- E as f,
281
- $ as g,
282
- Q as m,
283
- H as s
284
- };