@annotorious/core 3.0.6 → 3.0.8
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.
|
@@ -21,43 +21,43 @@ function I(e, n) {
|
|
|
21
21
|
}
|
|
22
22
|
function _() {
|
|
23
23
|
}
|
|
24
|
-
function
|
|
24
|
+
function Z(e, n) {
|
|
25
25
|
return e != e ? n == n : e !== n || e && typeof e == "object" || typeof e == "function";
|
|
26
26
|
}
|
|
27
27
|
const x = [];
|
|
28
28
|
function M(e, n = _) {
|
|
29
29
|
let t;
|
|
30
30
|
const o = /* @__PURE__ */ new Set();
|
|
31
|
-
function
|
|
32
|
-
if (
|
|
31
|
+
function d(v) {
|
|
32
|
+
if (Z(e, v) && (e = v, t)) {
|
|
33
33
|
const w = !x.length;
|
|
34
|
-
for (const
|
|
35
|
-
|
|
34
|
+
for (const g of o)
|
|
35
|
+
g[1](), x.push(g, e);
|
|
36
36
|
if (w) {
|
|
37
|
-
for (let
|
|
38
|
-
x[
|
|
37
|
+
for (let g = 0; g < x.length; g += 2)
|
|
38
|
+
x[g][0](x[g + 1]);
|
|
39
39
|
x.length = 0;
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
function
|
|
44
|
-
|
|
43
|
+
function p(v) {
|
|
44
|
+
d(v(e));
|
|
45
45
|
}
|
|
46
46
|
function m(v, w = _) {
|
|
47
|
-
const
|
|
48
|
-
return o.add(
|
|
49
|
-
o.delete(
|
|
47
|
+
const g = [v, w];
|
|
48
|
+
return o.add(g), o.size === 1 && (t = n(d, p) || _), v(e), () => {
|
|
49
|
+
o.delete(g), o.size === 0 && t && (t(), t = null);
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
|
-
return { set:
|
|
52
|
+
return { set: d, update: p, subscribe: m };
|
|
53
53
|
}
|
|
54
54
|
const Ue = (e) => {
|
|
55
55
|
const { subscribe: n, set: t } = M();
|
|
56
56
|
let o;
|
|
57
|
-
return n((
|
|
57
|
+
return n((d) => o = d), e.observe(({ changes: d }) => {
|
|
58
58
|
if (o) {
|
|
59
|
-
(
|
|
60
|
-
const m = (
|
|
59
|
+
(d.deleted || []).some((v) => v.id === o) && t(void 0);
|
|
60
|
+
const m = (d.updated || []).find(({ oldValue: v }) => v.id === o);
|
|
61
61
|
m && t(m.newValue.id);
|
|
62
62
|
}
|
|
63
63
|
}), {
|
|
@@ -68,53 +68,53 @@ const Ue = (e) => {
|
|
|
68
68
|
set: t
|
|
69
69
|
};
|
|
70
70
|
};
|
|
71
|
-
var
|
|
71
|
+
var F = /* @__PURE__ */ ((e) => (e.EDIT = "EDIT", e.SELECT = "SELECT", e.NONE = "NONE", e))(F || {});
|
|
72
72
|
const z = { selected: [] }, Te = (e, n, t) => {
|
|
73
|
-
const { subscribe: o, set:
|
|
74
|
-
let
|
|
73
|
+
const { subscribe: o, set: d } = M(z);
|
|
74
|
+
let p = n, m = z;
|
|
75
75
|
o((h) => m = h);
|
|
76
76
|
const v = () => {
|
|
77
|
-
I(m, z) ||
|
|
77
|
+
I(m, z) || d(z);
|
|
78
78
|
}, w = () => {
|
|
79
79
|
var h;
|
|
80
80
|
return ((h = m.selected) == null ? void 0 : h.length) === 0;
|
|
81
|
-
},
|
|
81
|
+
}, g = (h) => {
|
|
82
82
|
if (w())
|
|
83
83
|
return !1;
|
|
84
|
-
const
|
|
85
|
-
return m.selected.some((O) => O.id ===
|
|
86
|
-
}, L = (h,
|
|
84
|
+
const C = typeof h == "string" ? h : h.id;
|
|
85
|
+
return m.selected.some((O) => O.id === C);
|
|
86
|
+
}, L = (h, C) => {
|
|
87
87
|
const O = e.getAnnotation(h);
|
|
88
88
|
if (!O) {
|
|
89
89
|
console.warn("Invalid selection: " + h);
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
92
|
-
switch (G(O,
|
|
92
|
+
switch (G(O, p, t)) {
|
|
93
93
|
case "EDIT":
|
|
94
|
-
|
|
94
|
+
d({ selected: [{ id: h, editable: !0 }], event: C });
|
|
95
95
|
break;
|
|
96
96
|
case "SELECT":
|
|
97
|
-
|
|
97
|
+
d({ selected: [{ id: h }], event: C });
|
|
98
98
|
break;
|
|
99
99
|
default:
|
|
100
|
-
|
|
100
|
+
d({ selected: [], event: C });
|
|
101
101
|
}
|
|
102
|
-
}, a = (h,
|
|
103
|
-
const O = Array.isArray(h) ? h : [h],
|
|
104
|
-
|
|
105
|
-
selected:
|
|
106
|
-
const s =
|
|
102
|
+
}, a = (h, C) => {
|
|
103
|
+
const O = Array.isArray(h) ? h : [h], r = O.map((u) => e.getAnnotation(u)).filter((u) => !!u);
|
|
104
|
+
d({
|
|
105
|
+
selected: r.map((u) => {
|
|
106
|
+
const s = C === void 0 ? G(u, p, t) === "EDIT" : C;
|
|
107
107
|
return { id: u.id, editable: s };
|
|
108
108
|
})
|
|
109
|
-
}),
|
|
109
|
+
}), r.length !== O.length && console.warn("Invalid selection", h);
|
|
110
110
|
}, E = (h) => {
|
|
111
111
|
if (w())
|
|
112
112
|
return !1;
|
|
113
|
-
const { selected:
|
|
114
|
-
|
|
115
|
-
}, U = (h) =>
|
|
113
|
+
const { selected: C } = m;
|
|
114
|
+
C.some(({ id: r }) => h.includes(r)) && d({ selected: C.filter(({ id: r }) => !h.includes(r)) });
|
|
115
|
+
}, U = (h) => p = h;
|
|
116
116
|
return e.observe(
|
|
117
|
-
({ changes: h }) => E((h.deleted || []).map((
|
|
117
|
+
({ changes: h }) => E((h.deleted || []).map((C) => C.id))
|
|
118
118
|
), {
|
|
119
119
|
get event() {
|
|
120
120
|
return m ? m.event : null;
|
|
@@ -123,11 +123,11 @@ const z = { selected: [] }, Te = (e, n, t) => {
|
|
|
123
123
|
return m ? [...m.selected] : null;
|
|
124
124
|
},
|
|
125
125
|
get userSelectAction() {
|
|
126
|
-
return
|
|
126
|
+
return p;
|
|
127
127
|
},
|
|
128
128
|
clear: v,
|
|
129
129
|
isEmpty: w,
|
|
130
|
-
isSelected:
|
|
130
|
+
isSelected: g,
|
|
131
131
|
setSelected: a,
|
|
132
132
|
setUserSelectAction: U,
|
|
133
133
|
subscribe: o,
|
|
@@ -153,7 +153,7 @@ var ne = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(cryp
|
|
|
153
153
|
const H = {
|
|
154
154
|
randomUUID: ne
|
|
155
155
|
};
|
|
156
|
-
function
|
|
156
|
+
function J(e, n, t) {
|
|
157
157
|
if (H.randomUUID && !n && !e)
|
|
158
158
|
return H.randomUUID();
|
|
159
159
|
e = e || {};
|
|
@@ -161,12 +161,12 @@ function F(e, n, t) {
|
|
|
161
161
|
return o[6] = o[6] & 15 | 64, o[8] = o[8] & 63 | 128, K(o);
|
|
162
162
|
}
|
|
163
163
|
const Oe = (e) => {
|
|
164
|
-
const { creator: n, updatedBy: t } = e.target, o = e.bodies.reduce((
|
|
164
|
+
const { creator: n, updatedBy: t } = e.target, o = e.bodies.reduce((d, p) => [...d, p.creator, p.updatedBy].filter(Boolean), []);
|
|
165
165
|
return [
|
|
166
166
|
n,
|
|
167
167
|
t,
|
|
168
168
|
...o
|
|
169
|
-
].filter((
|
|
169
|
+
].filter((d) => d);
|
|
170
170
|
}, j = (e) => {
|
|
171
171
|
const n = (t) => {
|
|
172
172
|
const o = { ...t };
|
|
@@ -178,7 +178,7 @@ const Oe = (e) => {
|
|
|
178
178
|
target: n(e.target)
|
|
179
179
|
};
|
|
180
180
|
}, De = (e, n, t, o) => ({
|
|
181
|
-
id:
|
|
181
|
+
id: J(),
|
|
182
182
|
annotation: typeof e == "string" ? e : e.id,
|
|
183
183
|
created: t || /* @__PURE__ */ new Date(),
|
|
184
184
|
creator: o,
|
|
@@ -190,63 +190,63 @@ const Oe = (e) => {
|
|
|
190
190
|
const t = new Set(n.bodies.map((o) => o.id));
|
|
191
191
|
return e.bodies.filter((o) => !t.has(o.id));
|
|
192
192
|
}, ie = (e, n) => n.bodies.map((t) => {
|
|
193
|
-
const o = e.bodies.find((
|
|
193
|
+
const o = e.bodies.find((d) => d.id === t.id);
|
|
194
194
|
return { newBody: t, oldBody: o && !I(o, t) ? o : void 0 };
|
|
195
|
-
}).filter(({ oldBody: t }) => t).map(({ oldBody: t, newBody: o }) => ({ oldBody: t, newBody: o })), de = (e, n) => !I(e.target, n.target),
|
|
196
|
-
const t = oe(e, n), o = se(e, n),
|
|
195
|
+
}).filter(({ oldBody: t }) => t).map(({ oldBody: t, newBody: o }) => ({ oldBody: t, newBody: o })), de = (e, n) => !I(e.target, n.target), Q = (e, n) => {
|
|
196
|
+
const t = oe(e, n), o = se(e, n), d = ie(e, n);
|
|
197
197
|
return {
|
|
198
198
|
oldValue: e,
|
|
199
199
|
newValue: n,
|
|
200
200
|
bodiesCreated: t.length > 0 ? t : void 0,
|
|
201
201
|
bodiesDeleted: o.length > 0 ? o : void 0,
|
|
202
|
-
bodiesUpdated:
|
|
202
|
+
bodiesUpdated: d.length > 0 ? d : void 0,
|
|
203
203
|
targetUpdated: de(e, n) ? { oldTarget: e.target, newTarget: n.target } : void 0
|
|
204
204
|
};
|
|
205
205
|
};
|
|
206
206
|
var re = /* @__PURE__ */ ((e) => (e.BODY_ONLY = "BODY_ONLY", e.TARGET_ONLY = "TARGET_ONLY", e))(re || {}), T = /* @__PURE__ */ ((e) => (e.LOCAL = "LOCAL", e.REMOTE = "REMOTE", e.SILENT = "SILENT", e))(T || {});
|
|
207
207
|
const ae = (e, n) => {
|
|
208
|
-
var
|
|
208
|
+
var p, m;
|
|
209
209
|
const { changes: t, origin: o } = n;
|
|
210
210
|
if (!(e.options.origin ? e.options.origin === o : o !== "SILENT"))
|
|
211
211
|
return !1;
|
|
212
212
|
if (e.options.ignore) {
|
|
213
213
|
const { ignore: v } = e.options, w = (L) => L && L.length > 0;
|
|
214
214
|
if (!(w(t.created) || w(t.deleted))) {
|
|
215
|
-
const L = (
|
|
215
|
+
const L = (p = t.updated) == null ? void 0 : p.some((E) => w(E.bodiesCreated) || w(E.bodiesDeleted) || w(E.bodiesUpdated)), a = (m = t.updated) == null ? void 0 : m.some((E) => E.targetUpdated);
|
|
216
216
|
if (v === "BODY_ONLY" && L && !a || v === "TARGET_ONLY" && a && !L)
|
|
217
217
|
return !1;
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
220
|
if (e.options.annotations) {
|
|
221
221
|
const v = /* @__PURE__ */ new Set([
|
|
222
|
-
...(t.created || []).map((
|
|
223
|
-
...(t.deleted || []).map((
|
|
224
|
-
...(t.updated || []).map(({ oldValue:
|
|
222
|
+
...(t.created || []).map((g) => g.id),
|
|
223
|
+
...(t.deleted || []).map((g) => g.id),
|
|
224
|
+
...(t.updated || []).map(({ oldValue: g }) => g.id)
|
|
225
225
|
]);
|
|
226
|
-
return !!(Array.isArray(e.options.annotations) ? e.options.annotations : [e.options.annotations]).find((
|
|
226
|
+
return !!(Array.isArray(e.options.annotations) ? e.options.annotations : [e.options.annotations]).find((g) => v.has(g));
|
|
227
227
|
} else
|
|
228
228
|
return !0;
|
|
229
229
|
}, ce = (e, n) => {
|
|
230
|
-
const t = new Set((e.created || []).map((a) => a.id)), o = new Set((e.updated || []).map(({ newValue: a }) => a.id)),
|
|
231
|
-
...(e.created || []).filter((a) => !
|
|
230
|
+
const t = new Set((e.created || []).map((a) => a.id)), o = new Set((e.updated || []).map(({ newValue: a }) => a.id)), d = new Set((n.created || []).map((a) => a.id)), p = new Set((n.deleted || []).map((a) => a.id)), m = new Set((n.updated || []).map(({ oldValue: a }) => a.id)), v = new Set((n.updated || []).filter(({ oldValue: a }) => t.has(a.id) || o.has(a.id)).map(({ oldValue: a }) => a.id)), w = [
|
|
231
|
+
...(e.created || []).filter((a) => !p.has(a.id)).map((a) => m.has(a.id) ? n.updated.find(({ oldValue: E }) => E.id === a.id).newValue : a),
|
|
232
232
|
...n.created || []
|
|
233
|
-
],
|
|
234
|
-
...(e.deleted || []).filter((a) => !
|
|
233
|
+
], g = [
|
|
234
|
+
...(e.deleted || []).filter((a) => !d.has(a.id)),
|
|
235
235
|
...(n.deleted || []).filter((a) => !t.has(a.id))
|
|
236
236
|
], L = [
|
|
237
|
-
...(e.updated || []).filter(({ newValue: a }) => !
|
|
237
|
+
...(e.updated || []).filter(({ newValue: a }) => !p.has(a.id)).map((a) => {
|
|
238
238
|
const { oldValue: E, newValue: U } = a;
|
|
239
239
|
if (m.has(U.id)) {
|
|
240
|
-
const h = n.updated.find((
|
|
241
|
-
return
|
|
240
|
+
const h = n.updated.find((C) => C.oldValue.id === U.id).newValue;
|
|
241
|
+
return Q(E, h);
|
|
242
242
|
} else
|
|
243
243
|
return a;
|
|
244
244
|
}),
|
|
245
245
|
...(n.updated || []).filter(({ oldValue: a }) => !v.has(a.id))
|
|
246
246
|
];
|
|
247
|
-
return { created: w, deleted:
|
|
247
|
+
return { created: w, deleted: g, updated: L };
|
|
248
248
|
}, V = (e) => {
|
|
249
|
-
const n = e.id === void 0 ?
|
|
249
|
+
const n = e.id === void 0 ? J() : e.id;
|
|
250
250
|
return {
|
|
251
251
|
...e,
|
|
252
252
|
id: n,
|
|
@@ -262,10 +262,10 @@ const ae = (e, n) => {
|
|
|
262
262
|
}, le = (e) => e.id !== void 0, Re = () => {
|
|
263
263
|
const e = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map(), t = [], o = (i, c = {}) => {
|
|
264
264
|
t.push({ onChange: i, options: c });
|
|
265
|
-
},
|
|
265
|
+
}, d = (i) => {
|
|
266
266
|
const c = t.findIndex((l) => l.onChange == i);
|
|
267
267
|
c > -1 && t.splice(c, 1);
|
|
268
|
-
},
|
|
268
|
+
}, p = (i, c) => {
|
|
269
269
|
const l = {
|
|
270
270
|
origin: i,
|
|
271
271
|
changes: {
|
|
@@ -283,24 +283,24 @@ const ae = (e, n) => {
|
|
|
283
283
|
throw Error(`Cannot add annotation ${i.id} - exists already`);
|
|
284
284
|
{
|
|
285
285
|
const f = V(i);
|
|
286
|
-
e.set(f.id, f), f.bodies.forEach((S) => n.set(S.id, f.id)),
|
|
286
|
+
e.set(f.id, f), f.bodies.forEach((S) => n.set(S.id, f.id)), p(c, { created: [f] });
|
|
287
287
|
}
|
|
288
288
|
}, v = (i, c) => {
|
|
289
289
|
const l = V(typeof i == "string" ? c : i), f = typeof i == "string" ? i : i.id, S = f && e.get(f);
|
|
290
290
|
if (S) {
|
|
291
|
-
const
|
|
292
|
-
return f === l.id ? e.set(f, l) : (e.delete(f), e.set(l.id, l)), S.bodies.forEach((B) => n.delete(B.id)), l.bodies.forEach((B) => n.set(B.id, l.id)),
|
|
291
|
+
const y = Q(S, l);
|
|
292
|
+
return f === l.id ? e.set(f, l) : (e.delete(f), e.set(l.id, l)), S.bodies.forEach((B) => n.delete(B.id)), l.bodies.forEach((B) => n.set(B.id, l.id)), y;
|
|
293
293
|
} else
|
|
294
294
|
console.warn(`Cannot update annotation ${f} - does not exist`);
|
|
295
295
|
}, w = (i, c = T.LOCAL, l = T.LOCAL) => {
|
|
296
296
|
const f = le(c) ? l : c, S = v(i, c);
|
|
297
|
-
S &&
|
|
298
|
-
},
|
|
297
|
+
S && p(f, { updated: [S] });
|
|
298
|
+
}, g = (i, c = T.LOCAL) => {
|
|
299
299
|
const l = i.reduce((f, S) => {
|
|
300
|
-
const
|
|
301
|
-
return
|
|
300
|
+
const y = v(S);
|
|
301
|
+
return y ? [...f, y] : f;
|
|
302
302
|
}, []);
|
|
303
|
-
l.length > 0 &&
|
|
303
|
+
l.length > 0 && p(c, { updated: l });
|
|
304
304
|
}, L = (i, c = T.LOCAL) => {
|
|
305
305
|
const l = e.get(i.annotation);
|
|
306
306
|
if (l) {
|
|
@@ -308,7 +308,7 @@ const ae = (e, n) => {
|
|
|
308
308
|
...l,
|
|
309
309
|
bodies: [...l.bodies, i]
|
|
310
310
|
};
|
|
311
|
-
e.set(l.id, f), n.set(i.id, f.id),
|
|
311
|
+
e.set(l.id, f), n.set(i.id, f.id), p(c, { updated: [{
|
|
312
312
|
oldValue: l,
|
|
313
313
|
newValue: f,
|
|
314
314
|
bodiesCreated: [i]
|
|
@@ -317,40 +317,40 @@ const ae = (e, n) => {
|
|
|
317
317
|
console.warn(`Attempt to add body to missing annotation: ${i.annotation}`);
|
|
318
318
|
}, a = () => [...e.values()], E = (i = T.LOCAL) => {
|
|
319
319
|
const c = [...e.values()];
|
|
320
|
-
e.clear(), n.clear(),
|
|
320
|
+
e.clear(), n.clear(), p(i, { deleted: c });
|
|
321
321
|
}, U = (i, c = !0, l = T.LOCAL) => {
|
|
322
322
|
const f = i.map(V);
|
|
323
323
|
if (c) {
|
|
324
324
|
const S = [...e.values()];
|
|
325
|
-
e.clear(), n.clear(), f.forEach((
|
|
326
|
-
e.set(
|
|
327
|
-
}),
|
|
325
|
+
e.clear(), n.clear(), f.forEach((y) => {
|
|
326
|
+
e.set(y.id, y), y.bodies.forEach((B) => n.set(B.id, y.id));
|
|
327
|
+
}), p(l, { created: f, deleted: S });
|
|
328
328
|
} else {
|
|
329
|
-
const S = i.reduce((
|
|
329
|
+
const S = i.reduce((y, B) => {
|
|
330
330
|
const W = B.id && e.get(B.id);
|
|
331
|
-
return W ? [...
|
|
331
|
+
return W ? [...y, W] : y;
|
|
332
332
|
}, []);
|
|
333
333
|
if (S.length > 0)
|
|
334
|
-
throw Error(`Bulk insert would overwrite the following annotations: ${S.map((
|
|
335
|
-
f.forEach((
|
|
336
|
-
e.set(
|
|
337
|
-
}),
|
|
334
|
+
throw Error(`Bulk insert would overwrite the following annotations: ${S.map((y) => y.id).join(", ")}`);
|
|
335
|
+
f.forEach((y) => {
|
|
336
|
+
e.set(y.id, y), y.bodies.forEach((B) => n.set(B.id, y.id));
|
|
337
|
+
}), p(l, { created: f });
|
|
338
338
|
}
|
|
339
339
|
}, h = (i) => {
|
|
340
340
|
const c = typeof i == "string" ? i : i.id, l = e.get(c);
|
|
341
341
|
if (l)
|
|
342
342
|
return e.delete(c), l.bodies.forEach((f) => n.delete(f.id)), l;
|
|
343
343
|
console.warn(`Attempt to delete missing annotation: ${c}`);
|
|
344
|
-
},
|
|
344
|
+
}, C = (i, c = T.LOCAL) => {
|
|
345
345
|
const l = h(i);
|
|
346
|
-
l &&
|
|
346
|
+
l && p(c, { deleted: [l] });
|
|
347
347
|
}, O = (i, c = T.LOCAL) => {
|
|
348
348
|
const l = i.reduce((f, S) => {
|
|
349
|
-
const
|
|
350
|
-
return
|
|
349
|
+
const y = h(S);
|
|
350
|
+
return y ? [...f, y] : f;
|
|
351
351
|
}, []);
|
|
352
|
-
l.length > 0 &&
|
|
353
|
-
},
|
|
352
|
+
l.length > 0 && p(c, { deleted: l });
|
|
353
|
+
}, r = (i) => {
|
|
354
354
|
const c = e.get(i.annotation);
|
|
355
355
|
if (c) {
|
|
356
356
|
const l = c.bodies.find((f) => f.id === i.id);
|
|
@@ -358,7 +358,7 @@ const ae = (e, n) => {
|
|
|
358
358
|
n.delete(l.id);
|
|
359
359
|
const f = {
|
|
360
360
|
...c,
|
|
361
|
-
bodies: c.bodies.filter((
|
|
361
|
+
bodies: c.bodies.filter((y) => y.id !== i.id)
|
|
362
362
|
};
|
|
363
363
|
return e.set(c.id, f), {
|
|
364
364
|
oldValue: c,
|
|
@@ -370,11 +370,11 @@ const ae = (e, n) => {
|
|
|
370
370
|
} else
|
|
371
371
|
console.warn(`Attempt to delete body from missing annotation ${i.annotation}`);
|
|
372
372
|
}, u = (i, c = T.LOCAL) => {
|
|
373
|
-
const l =
|
|
374
|
-
l &&
|
|
373
|
+
const l = r(i);
|
|
374
|
+
l && p(c, { updated: [l] });
|
|
375
375
|
}, s = (i, c = T.LOCAL) => {
|
|
376
|
-
const l = i.map((f) =>
|
|
377
|
-
l.length > 0 &&
|
|
376
|
+
const l = i.map((f) => r(f)).filter(Boolean);
|
|
377
|
+
l.length > 0 && p(c, { updated: l });
|
|
378
378
|
}, A = (i) => {
|
|
379
379
|
const c = e.get(i);
|
|
380
380
|
return c ? { ...c } : void 0;
|
|
@@ -392,9 +392,9 @@ const ae = (e, n) => {
|
|
|
392
392
|
throw "Annotation integrity violation: annotation ID must be the same when updating bodies";
|
|
393
393
|
const l = e.get(i.annotation);
|
|
394
394
|
if (l) {
|
|
395
|
-
const f = l.bodies.find((
|
|
395
|
+
const f = l.bodies.find((y) => y.id === i.id), S = {
|
|
396
396
|
...l,
|
|
397
|
-
bodies: l.bodies.map((
|
|
397
|
+
bodies: l.bodies.map((y) => y.id === f.id ? c : y)
|
|
398
398
|
};
|
|
399
399
|
return e.set(l.id, S), f.id !== c.id && (n.delete(f.id), n.set(c.id, S.id)), {
|
|
400
400
|
oldValue: l,
|
|
@@ -405,10 +405,10 @@ const ae = (e, n) => {
|
|
|
405
405
|
console.warn(`Attempt to add body to missing annotation ${i.annotation}`);
|
|
406
406
|
}, N = (i, c, l = T.LOCAL) => {
|
|
407
407
|
const f = R(i, c);
|
|
408
|
-
f &&
|
|
408
|
+
f && p(l, { updated: [f] });
|
|
409
409
|
}, k = (i, c = T.LOCAL) => {
|
|
410
410
|
const l = i.map((f) => R({ id: f.id, annotation: f.annotation }, f)).filter(Boolean);
|
|
411
|
-
|
|
411
|
+
p(c, { updated: l });
|
|
412
412
|
}, P = (i) => {
|
|
413
413
|
const c = e.get(i.annotation);
|
|
414
414
|
if (c) {
|
|
@@ -437,36 +437,36 @@ const ae = (e, n) => {
|
|
|
437
437
|
bulkAddAnnotation: U,
|
|
438
438
|
bulkDeleteAnnotation: O,
|
|
439
439
|
bulkDeleteBodies: s,
|
|
440
|
-
bulkUpdateAnnotation:
|
|
440
|
+
bulkUpdateAnnotation: g,
|
|
441
441
|
bulkUpdateBodies: k,
|
|
442
442
|
bulkUpdateTargets: (i, c = T.LOCAL) => {
|
|
443
443
|
const l = i.map((f) => P(f)).filter(Boolean);
|
|
444
|
-
l.length > 0 &&
|
|
444
|
+
l.length > 0 && p(c, { updated: l });
|
|
445
445
|
},
|
|
446
446
|
clear: E,
|
|
447
|
-
deleteAnnotation:
|
|
447
|
+
deleteAnnotation: C,
|
|
448
448
|
deleteBody: u,
|
|
449
449
|
getAnnotation: A,
|
|
450
450
|
getBody: b,
|
|
451
451
|
observe: o,
|
|
452
|
-
unobserve:
|
|
452
|
+
unobserve: d,
|
|
453
453
|
updateAnnotation: w,
|
|
454
454
|
updateBody: N,
|
|
455
455
|
updateTarget: (i, c = T.LOCAL) => {
|
|
456
456
|
const l = P(i);
|
|
457
|
-
l &&
|
|
457
|
+
l && p(c, { updated: [l] });
|
|
458
458
|
}
|
|
459
459
|
};
|
|
460
460
|
}, Be = (e) => ({
|
|
461
461
|
...e,
|
|
462
462
|
subscribe: (t) => {
|
|
463
|
-
const o = (
|
|
463
|
+
const o = (d) => t(d.state);
|
|
464
464
|
return e.observe(o), t(e.all()), () => e.unobserve(o);
|
|
465
465
|
}
|
|
466
466
|
});
|
|
467
|
-
let
|
|
467
|
+
let X = () => ({
|
|
468
468
|
emit(e, ...n) {
|
|
469
|
-
for (let t = 0, o = this.events[e] || [],
|
|
469
|
+
for (let t = 0, o = this.events[e] || [], d = o.length; t < d; t++)
|
|
470
470
|
o[t](...n);
|
|
471
471
|
},
|
|
472
472
|
events: {},
|
|
@@ -474,28 +474,28 @@ let Q = () => ({
|
|
|
474
474
|
var t;
|
|
475
475
|
return ((t = this.events)[e] || (t[e] = [])).push(n), () => {
|
|
476
476
|
var o;
|
|
477
|
-
this.events[e] = (o = this.events[e]) == null ? void 0 : o.filter((
|
|
477
|
+
this.events[e] = (o = this.events[e]) == null ? void 0 : o.filter((d) => n !== d);
|
|
478
478
|
};
|
|
479
479
|
}
|
|
480
480
|
});
|
|
481
481
|
const ue = 250, Ie = (e) => {
|
|
482
|
-
const n =
|
|
483
|
-
let o = -1,
|
|
482
|
+
const n = X(), t = [];
|
|
483
|
+
let o = -1, d = !1, p = 0;
|
|
484
484
|
const m = (s) => {
|
|
485
|
-
if (!
|
|
485
|
+
if (!d) {
|
|
486
486
|
const { changes: A } = s, b = performance.now();
|
|
487
|
-
if (b -
|
|
487
|
+
if (b - p > ue)
|
|
488
488
|
t.splice(o + 1), t.push(A), o = t.length - 1;
|
|
489
489
|
else {
|
|
490
490
|
const R = t.length - 1;
|
|
491
491
|
t[R] = ce(t[R], A);
|
|
492
492
|
}
|
|
493
|
-
|
|
493
|
+
p = b;
|
|
494
494
|
}
|
|
495
|
-
|
|
495
|
+
d = !1;
|
|
496
496
|
};
|
|
497
497
|
e.observe(m, { origin: T.LOCAL });
|
|
498
|
-
const v = (s) => s && s.length > 0 && e.bulkDeleteAnnotation(s), w = (s) => s && s.length > 0 && e.bulkAddAnnotation(s, !1),
|
|
498
|
+
const v = (s) => s && s.length > 0 && e.bulkDeleteAnnotation(s), w = (s) => s && s.length > 0 && e.bulkAddAnnotation(s, !1), g = (s) => s && s.length > 0 && e.bulkUpdateAnnotation(s.map(({ oldValue: A }) => A)), L = (s) => s && s.length > 0 && e.bulkUpdateAnnotation(s.map(({ newValue: A }) => A)), a = (s) => s && s.length > 0 && e.bulkAddAnnotation(s, !1), E = (s) => s && s.length > 0 && e.bulkDeleteAnnotation(s);
|
|
499
499
|
return {
|
|
500
500
|
canRedo: () => t.length - 1 > o,
|
|
501
501
|
canUndo: () => o > -1,
|
|
@@ -503,16 +503,16 @@ const ue = 250, Ie = (e) => {
|
|
|
503
503
|
on: (s, A) => n.on(s, A),
|
|
504
504
|
redo: () => {
|
|
505
505
|
if (t.length - 1 > o) {
|
|
506
|
-
|
|
506
|
+
d = !0;
|
|
507
507
|
const { created: s, updated: A, deleted: b } = t[o + 1];
|
|
508
508
|
w(s), L(A), E(b), n.emit("redo", t[o + 1]), o += 1;
|
|
509
509
|
}
|
|
510
510
|
},
|
|
511
511
|
undo: () => {
|
|
512
512
|
if (o > -1) {
|
|
513
|
-
|
|
513
|
+
d = !0;
|
|
514
514
|
const { created: s, updated: A, deleted: b } = t[o];
|
|
515
|
-
v(s),
|
|
515
|
+
v(s), g(A), a(b), n.emit("undo", t[o]), o -= 1;
|
|
516
516
|
}
|
|
517
517
|
}
|
|
518
518
|
};
|
|
@@ -523,19 +523,19 @@ const ue = 250, Ie = (e) => {
|
|
|
523
523
|
set: n
|
|
524
524
|
};
|
|
525
525
|
}, xe = (e, n, t, o) => {
|
|
526
|
-
const { hover:
|
|
527
|
-
let
|
|
528
|
-
const E = (
|
|
529
|
-
w.has(
|
|
530
|
-
}, U = (
|
|
531
|
-
const s = w.get(
|
|
526
|
+
const { hover: d, selection: p, store: m, viewport: v } = e, w = /* @__PURE__ */ new Map();
|
|
527
|
+
let g = [], L, a;
|
|
528
|
+
const E = (r, u) => {
|
|
529
|
+
w.has(r) ? w.get(r).push(u) : w.set(r, [u]);
|
|
530
|
+
}, U = (r, u) => {
|
|
531
|
+
const s = w.get(r);
|
|
532
532
|
if (s) {
|
|
533
533
|
const A = s.indexOf(u);
|
|
534
534
|
A !== -1 && s.splice(A, 1);
|
|
535
535
|
}
|
|
536
|
-
}, h = (
|
|
537
|
-
w.has(
|
|
538
|
-
w.get(
|
|
536
|
+
}, h = (r, u, s) => {
|
|
537
|
+
w.has(r) && setTimeout(() => {
|
|
538
|
+
w.get(r).forEach((A) => {
|
|
539
539
|
if (t) {
|
|
540
540
|
const b = Array.isArray(u) ? u.map((N) => t.serialize(N)) : t.serialize(u), R = s ? s instanceof PointerEvent ? s : t.serialize(s) : void 0;
|
|
541
541
|
A(b, R);
|
|
@@ -543,147 +543,156 @@ const ue = 250, Ie = (e) => {
|
|
|
543
543
|
A(u, s);
|
|
544
544
|
});
|
|
545
545
|
}, 1);
|
|
546
|
-
},
|
|
547
|
-
const { selected:
|
|
546
|
+
}, C = () => {
|
|
547
|
+
const { selected: r } = p, u = (r || []).map(({ id: s }) => m.getAnnotation(s));
|
|
548
548
|
u.forEach((s) => {
|
|
549
|
-
const A =
|
|
549
|
+
const A = g.find((b) => b.id === s.id);
|
|
550
550
|
(!A || !I(A, s)) && h("updateAnnotation", s, A);
|
|
551
|
-
}),
|
|
551
|
+
}), g = g.map((s) => {
|
|
552
552
|
const A = u.find(({ id: b }) => b === s.id);
|
|
553
553
|
return A || s;
|
|
554
554
|
});
|
|
555
555
|
};
|
|
556
|
-
|
|
557
|
-
if (!(
|
|
558
|
-
if (
|
|
559
|
-
|
|
560
|
-
else if (
|
|
561
|
-
|
|
556
|
+
p.subscribe(({ selected: r }) => {
|
|
557
|
+
if (!(g.length === 0 && r.length === 0)) {
|
|
558
|
+
if (g.length === 0 && r.length > 0)
|
|
559
|
+
g = r.map(({ id: u }) => m.getAnnotation(u));
|
|
560
|
+
else if (g.length > 0 && r.length === 0)
|
|
561
|
+
g.forEach((u) => {
|
|
562
562
|
const s = m.getAnnotation(u.id);
|
|
563
563
|
s && !I(s, u) && h("updateAnnotation", s, u);
|
|
564
|
-
}),
|
|
564
|
+
}), g = [];
|
|
565
565
|
else {
|
|
566
|
-
const u = new Set(
|
|
567
|
-
|
|
566
|
+
const u = new Set(g.map((b) => b.id)), s = new Set(r.map(({ id: b }) => b));
|
|
567
|
+
g.filter((b) => !s.has(b.id)).forEach((b) => {
|
|
568
568
|
const R = m.getAnnotation(b.id);
|
|
569
569
|
R && !I(R, b) && h("updateAnnotation", R, b);
|
|
570
|
-
}),
|
|
570
|
+
}), g = [
|
|
571
571
|
// Remove annotations that were deselected
|
|
572
|
-
...
|
|
572
|
+
...g.filter((b) => s.has(b.id)),
|
|
573
573
|
// Add editable annotations that were selected
|
|
574
|
-
...
|
|
574
|
+
...r.filter(({ id: b }) => !u.has(b)).map(({ id: b }) => m.getAnnotation(b))
|
|
575
575
|
];
|
|
576
576
|
}
|
|
577
|
-
h("selectionChanged",
|
|
577
|
+
h("selectionChanged", g);
|
|
578
578
|
}
|
|
579
|
-
}),
|
|
580
|
-
!L &&
|
|
581
|
-
}), v == null || v.subscribe((
|
|
582
|
-
o && (a && clearTimeout(a), a = setTimeout(
|
|
583
|
-
const { created: u, deleted: s } =
|
|
584
|
-
(u || []).forEach((b) => h("createAnnotation", b)), (s || []).forEach((b) => h("deleteAnnotation", b)), (
|
|
579
|
+
}), d.subscribe((r) => {
|
|
580
|
+
!L && r ? h("mouseEnterAnnotation", m.getAnnotation(r)) : L && !r ? h("mouseLeaveAnnotation", m.getAnnotation(L)) : L && r && (h("mouseLeaveAnnotation", m.getAnnotation(L)), h("mouseEnterAnnotation", m.getAnnotation(r))), L = r;
|
|
581
|
+
}), v == null || v.subscribe((r) => h("viewportIntersect", r.map((u) => m.getAnnotation(u)))), m.observe((r) => {
|
|
582
|
+
o && (a && clearTimeout(a), a = setTimeout(C, 1e3));
|
|
583
|
+
const { created: u, deleted: s } = r.changes;
|
|
584
|
+
(u || []).forEach((b) => h("createAnnotation", b)), (s || []).forEach((b) => h("deleteAnnotation", b)), (r.changes.updated || []).filter((b) => [
|
|
585
585
|
...b.bodiesCreated || [],
|
|
586
586
|
...b.bodiesDeleted || [],
|
|
587
587
|
...b.bodiesUpdated || []
|
|
588
588
|
].length > 0).forEach(({ oldValue: b, newValue: R }) => {
|
|
589
|
-
const N =
|
|
590
|
-
|
|
589
|
+
const N = g.find((k) => k.id === b.id) || b;
|
|
590
|
+
g = g.map((k) => k.id === b.id ? R : k), h("updateAnnotation", R, N);
|
|
591
591
|
});
|
|
592
|
-
}, { origin: T.LOCAL }), m.observe((
|
|
593
|
-
if (
|
|
594
|
-
const u = new Set(
|
|
595
|
-
s.length > 0 && (
|
|
592
|
+
}, { origin: T.LOCAL }), m.observe((r) => {
|
|
593
|
+
if (g) {
|
|
594
|
+
const u = new Set(g.map((A) => A.id)), s = (r.changes.updated || []).filter(({ newValue: A }) => u.has(A.id)).map(({ newValue: A }) => A);
|
|
595
|
+
s.length > 0 && (g = g.map((A) => {
|
|
596
596
|
const b = s.find((R) => R.id === A.id);
|
|
597
597
|
return b || A;
|
|
598
598
|
}));
|
|
599
599
|
}
|
|
600
600
|
}, { origin: T.REMOTE });
|
|
601
|
-
const O = (
|
|
601
|
+
const O = (r) => (u) => {
|
|
602
602
|
const { updated: s } = u;
|
|
603
|
-
|
|
603
|
+
r ? (s || []).forEach((A) => h("updateAnnotation", A.oldValue, A.newValue)) : (s || []).forEach((A) => h("updateAnnotation", A.newValue, A.oldValue));
|
|
604
604
|
};
|
|
605
605
|
return n.on("undo", O(!0)), n.on("redo", O(!1)), { on: E, off: U, emit: h };
|
|
606
606
|
}, Ne = (e) => (n) => n.map((t) => e.serialize(t)), fe = (e) => (n) => n.reduce((t, o) => {
|
|
607
|
-
const { parsed:
|
|
608
|
-
return
|
|
607
|
+
const { parsed: d, error: p } = e.parse(o);
|
|
608
|
+
return p ? {
|
|
609
609
|
parsed: t.parsed,
|
|
610
610
|
failed: [...t.failed, o]
|
|
611
|
-
} :
|
|
612
|
-
parsed: [...t.parsed,
|
|
611
|
+
} : d ? {
|
|
612
|
+
parsed: [...t.parsed, d],
|
|
613
613
|
failed: t.failed
|
|
614
614
|
} : {
|
|
615
615
|
...t
|
|
616
616
|
};
|
|
617
617
|
}, { parsed: [], failed: [] }), ze = (e, n, t) => {
|
|
618
|
-
const { store: o, selection:
|
|
618
|
+
const { store: o, selection: d } = e, p = (r) => {
|
|
619
619
|
if (t) {
|
|
620
|
-
const { parsed: u, error: s } = t.parse(
|
|
620
|
+
const { parsed: u, error: s } = t.parse(r);
|
|
621
621
|
u ? o.addAnnotation(u, T.REMOTE) : console.error(s);
|
|
622
622
|
} else
|
|
623
|
-
o.addAnnotation(j(
|
|
624
|
-
}, m = () =>
|
|
625
|
-
const u = o.getAnnotation(
|
|
623
|
+
o.addAnnotation(j(r), T.REMOTE);
|
|
624
|
+
}, m = () => d.clear(), v = () => o.clear(), w = (r) => {
|
|
625
|
+
const u = o.getAnnotation(r);
|
|
626
626
|
return t && u ? t.serialize(u) : u;
|
|
627
|
-
},
|
|
627
|
+
}, g = () => t ? o.all().map(t.serialize) : o.all(), L = () => {
|
|
628
628
|
var s;
|
|
629
|
-
const u = (((s =
|
|
629
|
+
const u = (((s = d.selected) == null ? void 0 : s.map((A) => A.id)) || []).map((A) => o.getAnnotation(A)).filter(Boolean);
|
|
630
630
|
return t ? u.map(t.serialize) : u;
|
|
631
|
-
}, a = (
|
|
632
|
-
if (typeof
|
|
633
|
-
const u = o.getAnnotation(
|
|
634
|
-
if (o.deleteAnnotation(
|
|
631
|
+
}, a = (r, u = !0) => fetch(r).then((s) => s.json()).then((s) => (U(s, u), s)), E = (r) => {
|
|
632
|
+
if (typeof r == "string") {
|
|
633
|
+
const u = o.getAnnotation(r);
|
|
634
|
+
if (o.deleteAnnotation(r), u)
|
|
635
635
|
return t ? t.serialize(u) : u;
|
|
636
636
|
} else {
|
|
637
|
-
const u = t ? t.parse(
|
|
637
|
+
const u = t ? t.parse(r).parsed : r;
|
|
638
638
|
if (u)
|
|
639
|
-
return o.deleteAnnotation(u),
|
|
639
|
+
return o.deleteAnnotation(u), r;
|
|
640
640
|
}
|
|
641
|
-
}, U = (
|
|
641
|
+
}, U = (r, u = !0) => {
|
|
642
642
|
if (t) {
|
|
643
|
-
const s = t.parseAll || fe(t), { parsed: A, failed: b } = s(
|
|
643
|
+
const s = t.parseAll || fe(t), { parsed: A, failed: b } = s(r);
|
|
644
644
|
b.length > 0 && console.warn(`Discarded ${b.length} invalid annotations`, b), o.bulkAddAnnotation(A, u, T.REMOTE);
|
|
645
645
|
} else
|
|
646
|
-
o.bulkAddAnnotation(
|
|
647
|
-
}, h = (
|
|
648
|
-
|
|
649
|
-
},
|
|
650
|
-
|
|
651
|
-
}, O = (
|
|
646
|
+
o.bulkAddAnnotation(r.map(j), u, T.REMOTE);
|
|
647
|
+
}, h = (r, u) => {
|
|
648
|
+
r ? d.setSelected(r, u) : d.clear();
|
|
649
|
+
}, C = (r) => {
|
|
650
|
+
d.clear(), d.setUserSelectAction(r);
|
|
651
|
+
}, O = (r) => {
|
|
652
652
|
if (t) {
|
|
653
|
-
const u = t.parse(
|
|
653
|
+
const u = t.parse(r).parsed, s = t.serialize(o.getAnnotation(u.id));
|
|
654
654
|
return o.updateAnnotation(u), s;
|
|
655
655
|
} else {
|
|
656
|
-
const u = o.getAnnotation(
|
|
657
|
-
return o.updateAnnotation(j(
|
|
656
|
+
const u = o.getAnnotation(r.id);
|
|
657
|
+
return o.updateAnnotation(j(r)), u;
|
|
658
658
|
}
|
|
659
659
|
};
|
|
660
660
|
return {
|
|
661
|
-
addAnnotation:
|
|
661
|
+
addAnnotation: p,
|
|
662
662
|
cancelSelected: m,
|
|
663
663
|
canRedo: n.canRedo,
|
|
664
664
|
canUndo: n.canUndo,
|
|
665
665
|
clearAnnotations: v,
|
|
666
666
|
getAnnotationById: w,
|
|
667
|
-
getAnnotations:
|
|
667
|
+
getAnnotations: g,
|
|
668
668
|
getSelected: L,
|
|
669
669
|
loadAnnotations: a,
|
|
670
670
|
redo: n.redo,
|
|
671
671
|
removeAnnotation: E,
|
|
672
672
|
setAnnotations: U,
|
|
673
673
|
setSelected: h,
|
|
674
|
-
setUserSelectAction:
|
|
674
|
+
setUserSelectAction: C,
|
|
675
675
|
undo: n.undo,
|
|
676
676
|
updateAnnotation: O
|
|
677
677
|
};
|
|
678
|
+
}, $e = (e, n, t) => typeof n == "function" ? n(e, t) : n, Ve = (e, n) => typeof e != "function" && typeof n != "function" ? {
|
|
679
|
+
...e || {},
|
|
680
|
+
...n || {}
|
|
681
|
+
} : (t, o) => {
|
|
682
|
+
const d = typeof e == "function" ? e(t, o) : e, p = typeof n == "function" ? n(t, o) : n;
|
|
683
|
+
return {
|
|
684
|
+
...d || {},
|
|
685
|
+
...p || {}
|
|
686
|
+
};
|
|
678
687
|
}, pe = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
|
|
679
688
|
let ge = (e) => crypto.getRandomValues(new Uint8Array(e)), he = (e, n, t) => {
|
|
680
|
-
let o = (2 << Math.log(e.length - 1) / Math.LN2) - 1,
|
|
681
|
-
return (
|
|
689
|
+
let o = (2 << Math.log(e.length - 1) / Math.LN2) - 1, d = -~(1.6 * o * n / e.length);
|
|
690
|
+
return (p = n) => {
|
|
682
691
|
let m = "";
|
|
683
692
|
for (; ; ) {
|
|
684
|
-
let v = t(
|
|
693
|
+
let v = t(d), w = d;
|
|
685
694
|
for (; w--; )
|
|
686
|
-
if (m += e[v[w] & o] || "", m.length ===
|
|
695
|
+
if (m += e[v[w] & o] || "", m.length === p) return m;
|
|
687
696
|
}
|
|
688
697
|
};
|
|
689
698
|
}, me = (e, n = 21) => he(e, n, ge), Ae = (e = 21) => {
|
|
@@ -692,33 +701,33 @@ let ge = (e) => crypto.getRandomValues(new Uint8Array(e)), he = (e, n, t) => {
|
|
|
692
701
|
n += pe[t[e] & 63];
|
|
693
702
|
return n;
|
|
694
703
|
};
|
|
695
|
-
const
|
|
704
|
+
const _e = () => ({ isGuest: !0, id: me("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_", 20)() }), be = (e) => {
|
|
696
705
|
const n = JSON.stringify(e);
|
|
697
706
|
let t = 0;
|
|
698
|
-
for (let o = 0,
|
|
699
|
-
let
|
|
700
|
-
t = (t << 5) - t +
|
|
707
|
+
for (let o = 0, d = n.length; o < d; o++) {
|
|
708
|
+
let p = n.charCodeAt(o);
|
|
709
|
+
t = (t << 5) - t + p, t |= 0;
|
|
701
710
|
}
|
|
702
711
|
return `${t}`;
|
|
703
|
-
}, ve = (e) => e ? typeof e == "object" ? { ...e } : e : void 0,
|
|
704
|
-
const { id: o, type:
|
|
712
|
+
}, ve = (e) => e ? typeof e == "object" ? { ...e } : e : void 0, Ye = (e, n) => (Array.isArray(e) ? e : [e]).map((t) => {
|
|
713
|
+
const { id: o, type: d, purpose: p, value: m, created: v, modified: w, creator: g, ...L } = t;
|
|
705
714
|
return {
|
|
706
715
|
id: o || `temp-${be(t)}`,
|
|
707
716
|
annotation: n,
|
|
708
|
-
type:
|
|
709
|
-
purpose:
|
|
717
|
+
type: d,
|
|
718
|
+
purpose: p,
|
|
710
719
|
value: m,
|
|
711
|
-
creator: ve(
|
|
720
|
+
creator: ve(g),
|
|
712
721
|
created: v ? new Date(v) : void 0,
|
|
713
722
|
updated: w ? new Date(w) : void 0,
|
|
714
723
|
...L
|
|
715
724
|
};
|
|
716
|
-
}),
|
|
725
|
+
}), je = (e) => e.map((n) => {
|
|
717
726
|
var v;
|
|
718
|
-
const { annotation: t, created: o, updated:
|
|
719
|
-
...
|
|
727
|
+
const { annotation: t, created: o, updated: d, ...p } = n, m = {
|
|
728
|
+
...p,
|
|
720
729
|
created: o == null ? void 0 : o.toISOString(),
|
|
721
|
-
modified:
|
|
730
|
+
modified: d == null ? void 0 : d.toISOString()
|
|
722
731
|
};
|
|
723
732
|
return (v = m.id) != null && v.startsWith("temp-") && delete m.id, m;
|
|
724
733
|
}), Ee = [
|
|
@@ -743,21 +752,21 @@ const $e = () => ({ isGuest: !0, id: me("1234567890abcdefghijklmnopqrstuvwxyzABC
|
|
|
743
752
|
], we = () => {
|
|
744
753
|
const e = [...Ee];
|
|
745
754
|
return { assignRandomColor: () => {
|
|
746
|
-
const o = Math.floor(Math.random() * e.length),
|
|
747
|
-
return e.splice(o, 1),
|
|
755
|
+
const o = Math.floor(Math.random() * e.length), d = e[o];
|
|
756
|
+
return e.splice(o, 1), d;
|
|
748
757
|
}, releaseColor: (o) => e.push(o) };
|
|
749
|
-
},
|
|
758
|
+
}, Ce = () => {
|
|
750
759
|
const e = we();
|
|
751
|
-
return { addUser: (o,
|
|
752
|
-
const
|
|
760
|
+
return { addUser: (o, d) => {
|
|
761
|
+
const p = e.assignRandomColor();
|
|
753
762
|
return {
|
|
754
|
-
label:
|
|
755
|
-
avatar:
|
|
756
|
-
color:
|
|
763
|
+
label: d.name || d.id,
|
|
764
|
+
avatar: d.avatar,
|
|
765
|
+
color: p
|
|
757
766
|
};
|
|
758
767
|
}, removeUser: (o) => e.releaseColor(o.appearance.color) };
|
|
759
|
-
},
|
|
760
|
-
const n =
|
|
768
|
+
}, ye = (e, n) => e.every((t) => e.includes(t)) && n.every((t) => e.includes(t)), Me = Ae(), Pe = (e = Ce()) => {
|
|
769
|
+
const n = X(), t = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), d = (a, E) => {
|
|
761
770
|
if (t.has(a)) {
|
|
762
771
|
console.warn("Attempt to add user that is already present", a, E);
|
|
763
772
|
return;
|
|
@@ -768,7 +777,7 @@ const $e = () => ({ isGuest: !0, id: me("1234567890abcdefghijklmnopqrstuvwxyzABC
|
|
|
768
777
|
presenceKey: a,
|
|
769
778
|
appearance: U
|
|
770
779
|
});
|
|
771
|
-
},
|
|
780
|
+
}, p = (a) => {
|
|
772
781
|
const E = t.get(a);
|
|
773
782
|
if (!E) {
|
|
774
783
|
console.warn("Attempt to remove user that is not present", a);
|
|
@@ -776,11 +785,11 @@ const $e = () => ({ isGuest: !0, id: me("1234567890abcdefghijklmnopqrstuvwxyzABC
|
|
|
776
785
|
}
|
|
777
786
|
e.removeUser(E), t.delete(a);
|
|
778
787
|
}, m = (a) => {
|
|
779
|
-
const E = new Set(a.map((
|
|
780
|
-
U.forEach(({ presenceKey:
|
|
781
|
-
const { presenceKey: O } =
|
|
782
|
-
o.has(O) && n.emit("selectionChange",
|
|
783
|
-
}), (U.length > 0 || h.length > 0) && n.emit("presence",
|
|
788
|
+
const E = new Set(a.map((C) => C.presenceKey)), U = a.filter(({ presenceKey: C }) => !t.has(C)), h = Array.from(t.values()).filter((C) => !E.has(C.presenceKey));
|
|
789
|
+
U.forEach(({ presenceKey: C, user: O }) => d(C, O)), h.forEach((C) => {
|
|
790
|
+
const { presenceKey: O } = C;
|
|
791
|
+
o.has(O) && n.emit("selectionChange", C, null), p(O);
|
|
792
|
+
}), (U.length > 0 || h.length > 0) && n.emit("presence", g());
|
|
784
793
|
}, v = (a, E) => {
|
|
785
794
|
const U = t.get(a);
|
|
786
795
|
if (!U) {
|
|
@@ -788,7 +797,7 @@ const $e = () => ({ isGuest: !0, id: me("1234567890abcdefghijklmnopqrstuvwxyzABC
|
|
|
788
797
|
return;
|
|
789
798
|
}
|
|
790
799
|
const h = o.get(a);
|
|
791
|
-
(!h || !
|
|
800
|
+
(!h || !ye(h, E)) && (o.set(a, E), n.emit("selectionChange", U, E));
|
|
792
801
|
}, w = (a, E) => {
|
|
793
802
|
const U = t.get(a);
|
|
794
803
|
if (!U) {
|
|
@@ -796,9 +805,9 @@ const $e = () => ({ isGuest: !0, id: me("1234567890abcdefghijklmnopqrstuvwxyzABC
|
|
|
796
805
|
return;
|
|
797
806
|
}
|
|
798
807
|
E ? o.set(a, E) : o.delete(a), n.emit("selectionChange", U, E);
|
|
799
|
-
},
|
|
808
|
+
}, g = () => [...Array.from(t.values())];
|
|
800
809
|
return {
|
|
801
|
-
getPresentUsers:
|
|
810
|
+
getPresentUsers: g,
|
|
802
811
|
notifyActivity: v,
|
|
803
812
|
on: (a, E) => n.on(a, E),
|
|
804
813
|
syncUsers: m,
|
|
@@ -808,30 +817,32 @@ const $e = () => ({ isGuest: !0, id: me("1234567890abcdefghijklmnopqrstuvwxyzABC
|
|
|
808
817
|
export {
|
|
809
818
|
re as Ignore,
|
|
810
819
|
T as Origin,
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
820
|
+
Me as PRESENCE_KEY,
|
|
821
|
+
F as UserSelectAction,
|
|
822
|
+
Ve as chainStyles,
|
|
823
|
+
$e as computeStyle,
|
|
824
|
+
_e as createAnonymousGuest,
|
|
814
825
|
ze as createBaseAnnotator,
|
|
815
826
|
De as createBody,
|
|
816
|
-
|
|
827
|
+
Ce as createDefaultAppearanceProvider,
|
|
817
828
|
Ue as createHoverState,
|
|
818
829
|
xe as createLifecycleObserver,
|
|
819
|
-
|
|
830
|
+
Pe as createPresenceState,
|
|
820
831
|
Te as createSelectionState,
|
|
821
832
|
Re as createStore,
|
|
822
833
|
Ie as createUndoStack,
|
|
823
834
|
ke as createViewportState,
|
|
824
835
|
we as defaultColorProvider,
|
|
825
|
-
|
|
836
|
+
Q as diffAnnotations,
|
|
826
837
|
Oe as getContributors,
|
|
827
838
|
ce as mergeChanges,
|
|
828
839
|
G as onUserSelect,
|
|
829
840
|
fe as parseAll,
|
|
830
|
-
|
|
841
|
+
Ye as parseW3CBodies,
|
|
831
842
|
ve as parseW3CUser,
|
|
832
843
|
j as reviveDates,
|
|
833
844
|
Ne as serializeAll,
|
|
834
|
-
|
|
845
|
+
je as serializeW3CBodies,
|
|
835
846
|
ae as shouldNotify,
|
|
836
847
|
Be as toSvelteStore
|
|
837
848
|
};
|