@annotorious/core 3.0.0-rc.24 → 3.0.0-rc.26
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var j = Object.prototype.hasOwnProperty;
|
|
2
|
-
function
|
|
2
|
+
function B(e, n) {
|
|
3
3
|
var t, o;
|
|
4
4
|
if (e === n)
|
|
5
5
|
return !0;
|
|
@@ -10,14 +10,14 @@ function x(e, n) {
|
|
|
10
10
|
return e.toString() === n.toString();
|
|
11
11
|
if (t === Array) {
|
|
12
12
|
if ((o = e.length) === n.length)
|
|
13
|
-
for (; o-- &&
|
|
13
|
+
for (; o-- && B(e[o], n[o]); )
|
|
14
14
|
;
|
|
15
15
|
return o === -1;
|
|
16
16
|
}
|
|
17
17
|
if (!t || typeof e == "object") {
|
|
18
18
|
o = 0;
|
|
19
19
|
for (t in e)
|
|
20
|
-
if (j.call(e, t) && ++o && !j.call(n, t) || !(t in n) || !
|
|
20
|
+
if (j.call(e, t) && ++o && !j.call(n, t) || !(t in n) || !B(e[t], n[t]))
|
|
21
21
|
return !1;
|
|
22
22
|
return Object.keys(n).length === o;
|
|
23
23
|
}
|
|
@@ -26,44 +26,44 @@ function x(e, n) {
|
|
|
26
26
|
}
|
|
27
27
|
function z() {
|
|
28
28
|
}
|
|
29
|
-
function
|
|
29
|
+
function q(e, n) {
|
|
30
30
|
return e != e ? n == n : e !== n || e && typeof e == "object" || typeof e == "function";
|
|
31
31
|
}
|
|
32
|
-
const
|
|
33
|
-
function
|
|
32
|
+
const k = [];
|
|
33
|
+
function _(e, n = z) {
|
|
34
34
|
let t;
|
|
35
35
|
const o = /* @__PURE__ */ new Set();
|
|
36
36
|
function i(b) {
|
|
37
|
-
if (
|
|
38
|
-
const
|
|
37
|
+
if (q(e, b) && (e = b, t)) {
|
|
38
|
+
const v = !k.length;
|
|
39
39
|
for (const u of o)
|
|
40
|
-
u[1](),
|
|
41
|
-
if (
|
|
42
|
-
for (let u = 0; u <
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
u[1](), k.push(u, e);
|
|
41
|
+
if (v) {
|
|
42
|
+
for (let u = 0; u < k.length; u += 2)
|
|
43
|
+
k[u][0](k[u + 1]);
|
|
44
|
+
k.length = 0;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
function
|
|
48
|
+
function p(b) {
|
|
49
49
|
i(b(e));
|
|
50
50
|
}
|
|
51
|
-
function
|
|
52
|
-
const u = [b,
|
|
53
|
-
return o.add(u), o.size === 1 && (t = n(i,
|
|
51
|
+
function w(b, v = z) {
|
|
52
|
+
const u = [b, v];
|
|
53
|
+
return o.add(u), o.size === 1 && (t = n(i, p) || z), b(e), () => {
|
|
54
54
|
o.delete(u), o.size === 0 && t && (t(), t = null);
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
|
-
return { set: i, update:
|
|
57
|
+
return { set: i, update: p, subscribe: w };
|
|
58
58
|
}
|
|
59
|
-
const
|
|
60
|
-
const { subscribe: n, set: t } =
|
|
59
|
+
const we = (e) => {
|
|
60
|
+
const { subscribe: n, set: t } = _();
|
|
61
61
|
let o;
|
|
62
62
|
return n((i) => o = i), e.observe(({ changes: i }) => {
|
|
63
63
|
if (o) {
|
|
64
64
|
(i.deleted || []).some((b) => b.id === o) && t(void 0);
|
|
65
|
-
const
|
|
66
|
-
|
|
65
|
+
const w = (i.updated || []).find(({ oldValue: b }) => b.id === o);
|
|
66
|
+
w && t(w.newValue.id);
|
|
67
67
|
}
|
|
68
68
|
}), {
|
|
69
69
|
get current() {
|
|
@@ -73,82 +73,82 @@ const Ce = (e) => {
|
|
|
73
73
|
set: t
|
|
74
74
|
};
|
|
75
75
|
};
|
|
76
|
-
var
|
|
77
|
-
const V = { selected: [] },
|
|
78
|
-
const { subscribe: t, set: o } =
|
|
76
|
+
var G = /* @__PURE__ */ ((e) => (e.EDIT = "EDIT", e.SELECT = "SELECT", e.NONE = "NONE", e))(G || {});
|
|
77
|
+
const V = { selected: [] }, Ce = (e, n = "EDIT") => {
|
|
78
|
+
const { subscribe: t, set: o } = _(V);
|
|
79
79
|
let i = V;
|
|
80
80
|
t((s) => i = s);
|
|
81
|
-
const
|
|
81
|
+
const p = () => o(V), w = () => {
|
|
82
82
|
var s;
|
|
83
83
|
return ((s = i.selected) == null ? void 0 : s.length) === 0;
|
|
84
84
|
}, b = (s) => {
|
|
85
85
|
if (i.selected.length === 0)
|
|
86
86
|
return !1;
|
|
87
|
-
const
|
|
88
|
-
return i.selected.some((
|
|
89
|
-
},
|
|
90
|
-
const
|
|
91
|
-
if (
|
|
92
|
-
const E =
|
|
93
|
-
o(E === "EDIT" ? { selected: [{ id: s, editable: !0 }], pointerEvent:
|
|
87
|
+
const h = typeof s == "string" ? s : s.id;
|
|
88
|
+
return i.selected.some((L) => L.id === h);
|
|
89
|
+
}, v = (s, h) => {
|
|
90
|
+
const L = e.getAnnotation(s);
|
|
91
|
+
if (L) {
|
|
92
|
+
const E = H(L, n);
|
|
93
|
+
o(E === "EDIT" ? { selected: [{ id: s, editable: !0 }], pointerEvent: h } : E === "SELECT" ? { selected: [{ id: s }], pointerEvent: h } : { selected: [], pointerEvent: h });
|
|
94
94
|
} else
|
|
95
95
|
console.warn("Invalid selection: " + s);
|
|
96
|
-
}, u = (s,
|
|
97
|
-
const
|
|
98
|
-
o({ selected: E.map(({ id: S }) => ({ id: S, editable:
|
|
96
|
+
}, u = (s, h = !0) => {
|
|
97
|
+
const L = Array.isArray(s) ? s : [s], E = L.map((S) => e.getAnnotation(S)).filter(Boolean);
|
|
98
|
+
o({ selected: E.map(({ id: S }) => ({ id: S, editable: h })) }), E.length !== L.length && console.warn("Invalid selection", s);
|
|
99
99
|
}, U = (s) => {
|
|
100
100
|
if (i.selected.length === 0)
|
|
101
101
|
return !1;
|
|
102
|
-
const { selected:
|
|
103
|
-
|
|
102
|
+
const { selected: h } = i;
|
|
103
|
+
h.filter(({ id: E }) => s.includes(E)).length > 0 && o({ selected: h.filter(({ id: E }) => !s.includes(E)) });
|
|
104
104
|
};
|
|
105
|
-
return e.observe(({ changes: s }) => U((s.deleted || []).map((
|
|
106
|
-
clear:
|
|
107
|
-
clickSelect:
|
|
105
|
+
return e.observe(({ changes: s }) => U((s.deleted || []).map((h) => h.id))), {
|
|
106
|
+
clear: p,
|
|
107
|
+
clickSelect: v,
|
|
108
108
|
get selected() {
|
|
109
109
|
return i ? [...i.selected] : null;
|
|
110
110
|
},
|
|
111
111
|
get pointerEvent() {
|
|
112
112
|
return i ? i.pointerEvent : null;
|
|
113
113
|
},
|
|
114
|
-
isEmpty:
|
|
114
|
+
isEmpty: w,
|
|
115
115
|
isSelected: b,
|
|
116
116
|
setSelected: u,
|
|
117
117
|
subscribe: t
|
|
118
118
|
};
|
|
119
|
-
},
|
|
119
|
+
}, H = (e, n) => typeof n == "function" ? n(e) || "EDIT" : n || "EDIT";
|
|
120
120
|
let $;
|
|
121
|
-
const
|
|
122
|
-
function
|
|
121
|
+
const F = new Uint8Array(16);
|
|
122
|
+
function J() {
|
|
123
123
|
if (!$ && ($ = typeof crypto < "u" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto), !$))
|
|
124
124
|
throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
|
|
125
|
-
return $(
|
|
125
|
+
return $(F);
|
|
126
126
|
}
|
|
127
|
-
const
|
|
127
|
+
const D = [];
|
|
128
128
|
for (let e = 0; e < 256; ++e)
|
|
129
|
-
|
|
130
|
-
function
|
|
131
|
-
return
|
|
129
|
+
D.push((e + 256).toString(16).slice(1));
|
|
130
|
+
function Q(e, n = 0) {
|
|
131
|
+
return D[e[n + 0]] + D[e[n + 1]] + D[e[n + 2]] + D[e[n + 3]] + "-" + D[e[n + 4]] + D[e[n + 5]] + "-" + D[e[n + 6]] + D[e[n + 7]] + "-" + D[e[n + 8]] + D[e[n + 9]] + "-" + D[e[n + 10]] + D[e[n + 11]] + D[e[n + 12]] + D[e[n + 13]] + D[e[n + 14]] + D[e[n + 15]];
|
|
132
132
|
}
|
|
133
|
-
const
|
|
134
|
-
randomUUID:
|
|
133
|
+
const X = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), M = {
|
|
134
|
+
randomUUID: X
|
|
135
135
|
};
|
|
136
|
-
function
|
|
136
|
+
function Z(e, n, t) {
|
|
137
137
|
if (M.randomUUID && !n && !e)
|
|
138
138
|
return M.randomUUID();
|
|
139
139
|
e = e || {};
|
|
140
|
-
const o = e.random || (e.rng ||
|
|
141
|
-
return o[6] = o[6] & 15 | 64, o[8] = o[8] & 63 | 128,
|
|
140
|
+
const o = e.random || (e.rng || J)();
|
|
141
|
+
return o[6] = o[6] & 15 | 64, o[8] = o[8] & 63 | 128, Q(o);
|
|
142
142
|
}
|
|
143
143
|
const Le = (e) => {
|
|
144
|
-
const { creator: n, updatedBy: t } = e.target, o = e.bodies.reduce((i,
|
|
144
|
+
const { creator: n, updatedBy: t } = e.target, o = e.bodies.reduce((i, p) => [...i, p.creator, p.updatedBy].filter(Boolean), []);
|
|
145
145
|
return [
|
|
146
146
|
n,
|
|
147
147
|
t,
|
|
148
148
|
...o
|
|
149
149
|
].filter((i) => i);
|
|
150
150
|
}, Ue = (e, n, t, o) => ({
|
|
151
|
-
id:
|
|
151
|
+
id: Z(),
|
|
152
152
|
annotation: e.id,
|
|
153
153
|
created: t || /* @__PURE__ */ new Date(),
|
|
154
154
|
creator: o,
|
|
@@ -161,8 +161,8 @@ const Le = (e) => {
|
|
|
161
161
|
return e.bodies.filter((o) => !t.has(o.id));
|
|
162
162
|
}, te = (e, n) => n.bodies.map((t) => {
|
|
163
163
|
const o = e.bodies.find((i) => i.id === t.id);
|
|
164
|
-
return { newBody: t, oldBody: o && !
|
|
165
|
-
}).filter(({ oldBody: t }) => t).map(({ oldBody: t, newBody: o }) => ({ oldBody: t, newBody: o })), ne = (e, n) => !
|
|
164
|
+
return { newBody: t, oldBody: o && !B(o, t) ? o : void 0 };
|
|
165
|
+
}).filter(({ oldBody: t }) => t).map(({ oldBody: t, newBody: o }) => ({ oldBody: t, newBody: o })), ne = (e, n) => !B(e.target, n.target), P = (e, n) => {
|
|
166
166
|
const t = K(e, n), o = ee(e, n), i = te(e, n);
|
|
167
167
|
return {
|
|
168
168
|
oldValue: e,
|
|
@@ -175,14 +175,14 @@ const Le = (e) => {
|
|
|
175
175
|
};
|
|
176
176
|
var oe = /* @__PURE__ */ ((e) => (e.BODY_ONLY = "BODY_ONLY", e.TARGET_ONLY = "TARGET_ONLY", e))(oe || {}), O = /* @__PURE__ */ ((e) => (e.LOCAL = "LOCAL", e.REMOTE = "REMOTE", e))(O || {});
|
|
177
177
|
const se = (e, n) => {
|
|
178
|
-
var
|
|
178
|
+
var p, w;
|
|
179
179
|
const { changes: t, origin: o } = n;
|
|
180
180
|
if (!(!e.options.origin || e.options.origin === o))
|
|
181
181
|
return !1;
|
|
182
182
|
if (e.options.ignore) {
|
|
183
|
-
const { ignore: b } = e.options,
|
|
184
|
-
if (!(
|
|
185
|
-
const U = (
|
|
183
|
+
const { ignore: b } = e.options, v = (U) => U && U.length > 0;
|
|
184
|
+
if (!(v(t.created) || v(t.deleted))) {
|
|
185
|
+
const U = (p = t.updated) == null ? void 0 : p.some((h) => v(h.bodiesCreated) || v(h.bodiesDeleted) || v(h.bodiesUpdated)), s = (w = t.updated) == null ? void 0 : w.some((h) => h.targetUpdated);
|
|
186
186
|
if (b === "BODY_ONLY" && U && !s || b === "TARGET_ONLY" && s && !U)
|
|
187
187
|
return !1;
|
|
188
188
|
}
|
|
@@ -197,183 +197,183 @@ const se = (e, n) => {
|
|
|
197
197
|
} else
|
|
198
198
|
return !0;
|
|
199
199
|
}, ie = (e, n) => {
|
|
200
|
-
const t = new Set((e.created || []).map((s) => s.id)), o = new Set((e.updated || []).map(({ newValue: s }) => s.id)), i = new Set((n.created || []).map((s) => s.id)),
|
|
201
|
-
...(e.created || []).filter((s) => !
|
|
200
|
+
const t = new Set((e.created || []).map((s) => s.id)), o = new Set((e.updated || []).map(({ newValue: s }) => s.id)), i = new Set((n.created || []).map((s) => s.id)), p = new Set((n.deleted || []).map((s) => s.id)), w = new Set((n.updated || []).map(({ oldValue: s }) => s.id)), b = new Set((n.updated || []).filter(({ oldValue: s }) => t.has(s.id) || o.has(s.id)).map(({ oldValue: s }) => s.id)), v = [
|
|
201
|
+
...(e.created || []).filter((s) => !p.has(s.id)).map((s) => w.has(s.id) ? n.updated.find(({ oldValue: h }) => h.id === s.id).newValue : s),
|
|
202
202
|
...n.created || []
|
|
203
203
|
], u = [
|
|
204
204
|
...(e.deleted || []).filter((s) => !i.has(s.id)),
|
|
205
205
|
...(n.deleted || []).filter((s) => !t.has(s.id))
|
|
206
206
|
], U = [
|
|
207
|
-
...(e.updated || []).filter(({ newValue: s }) => !
|
|
208
|
-
const { oldValue:
|
|
209
|
-
if (
|
|
210
|
-
const E = n.updated.find((S) => S.oldValue.id ===
|
|
211
|
-
return
|
|
207
|
+
...(e.updated || []).filter(({ newValue: s }) => !p.has(s.id)).map((s) => {
|
|
208
|
+
const { oldValue: h, newValue: L } = s;
|
|
209
|
+
if (w.has(L.id)) {
|
|
210
|
+
const E = n.updated.find((S) => S.oldValue.id === L.id).newValue;
|
|
211
|
+
return P(h, E);
|
|
212
212
|
} else
|
|
213
213
|
return s;
|
|
214
214
|
}),
|
|
215
215
|
...(n.updated || []).filter(({ oldValue: s }) => !b.has(s.id))
|
|
216
216
|
];
|
|
217
|
-
return { created:
|
|
217
|
+
return { created: v, deleted: u, updated: U };
|
|
218
218
|
}, de = (e) => e.id !== void 0, Se = () => {
|
|
219
|
-
const e = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map(), t = [], o = (d,
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
},
|
|
223
|
-
const
|
|
219
|
+
const e = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map(), t = [], o = (d, r = {}) => t.push({ onChange: d, options: r }), i = (d) => {
|
|
220
|
+
const r = t.findIndex((c) => c.onChange == d);
|
|
221
|
+
r > -1 && t.splice(r, 1);
|
|
222
|
+
}, p = (d, r) => {
|
|
223
|
+
const c = {
|
|
224
224
|
origin: d,
|
|
225
225
|
changes: {
|
|
226
|
-
created:
|
|
227
|
-
updated:
|
|
228
|
-
deleted:
|
|
226
|
+
created: r.created || [],
|
|
227
|
+
updated: r.updated || [],
|
|
228
|
+
deleted: r.deleted || []
|
|
229
229
|
},
|
|
230
230
|
state: [...e.values()]
|
|
231
231
|
};
|
|
232
|
-
t.forEach((
|
|
233
|
-
se(
|
|
232
|
+
t.forEach((f) => {
|
|
233
|
+
se(f, c) && f.onChange(c);
|
|
234
234
|
});
|
|
235
|
-
},
|
|
235
|
+
}, w = (d, r = O.LOCAL) => {
|
|
236
236
|
if (e.get(d.id))
|
|
237
237
|
throw Error(`Cannot add annotation ${d.id} - exists already`);
|
|
238
|
-
e.set(d.id, d), d.bodies.forEach((
|
|
239
|
-
}, b = (d,
|
|
240
|
-
const
|
|
238
|
+
e.set(d.id, d), d.bodies.forEach((f) => n.set(f.id, d.id)), p(r, { created: [d] });
|
|
239
|
+
}, b = (d, r) => {
|
|
240
|
+
const c = typeof d == "string" ? r : d, f = typeof d == "string" ? d : d.id, C = e.get(f);
|
|
241
241
|
if (C) {
|
|
242
|
-
const
|
|
243
|
-
return
|
|
242
|
+
const T = P(C, c);
|
|
243
|
+
return f === c.id ? e.set(f, c) : (e.delete(f), e.set(c.id, c)), C.bodies.forEach((I) => n.delete(I.id)), c.bodies.forEach((I) => n.set(I.id, c.id)), T;
|
|
244
244
|
} else
|
|
245
|
-
console.warn(`Cannot update annotation ${
|
|
246
|
-
},
|
|
247
|
-
const
|
|
248
|
-
C &&
|
|
249
|
-
}, u = (d,
|
|
250
|
-
const
|
|
251
|
-
const
|
|
252
|
-
return
|
|
245
|
+
console.warn(`Cannot update annotation ${f} - does not exist`);
|
|
246
|
+
}, v = (d, r = O.LOCAL, c = O.LOCAL) => {
|
|
247
|
+
const f = de(r) ? c : r, C = b(d, r);
|
|
248
|
+
C && p(f, { updated: [C] });
|
|
249
|
+
}, u = (d, r = O.LOCAL) => {
|
|
250
|
+
const c = d.reduce((f, C) => {
|
|
251
|
+
const T = b(C);
|
|
252
|
+
return T ? [...f, T] : f;
|
|
253
253
|
}, []);
|
|
254
|
-
|
|
255
|
-
}, U = (d,
|
|
256
|
-
const
|
|
257
|
-
if (
|
|
258
|
-
const
|
|
259
|
-
...
|
|
260
|
-
bodies: [...
|
|
254
|
+
c.length > 0 && p(r, { updated: c });
|
|
255
|
+
}, U = (d, r = O.LOCAL) => {
|
|
256
|
+
const c = e.get(d.annotation);
|
|
257
|
+
if (c) {
|
|
258
|
+
const f = {
|
|
259
|
+
...c,
|
|
260
|
+
bodies: [...c.bodies, d]
|
|
261
261
|
};
|
|
262
|
-
e.set(
|
|
263
|
-
oldValue:
|
|
264
|
-
newValue:
|
|
262
|
+
e.set(c.id, f), n.set(d.id, f.id), p(r, { updated: [{
|
|
263
|
+
oldValue: c,
|
|
264
|
+
newValue: f,
|
|
265
265
|
bodiesCreated: [d]
|
|
266
266
|
}] });
|
|
267
267
|
} else
|
|
268
268
|
console.warn(`Attempt to add body to missing annotation: ${d.annotation}`);
|
|
269
|
-
}, s = () => [...e.values()],
|
|
270
|
-
const
|
|
271
|
-
e.clear(), n.clear(),
|
|
272
|
-
},
|
|
273
|
-
if (
|
|
274
|
-
const
|
|
269
|
+
}, s = () => [...e.values()], h = (d = O.LOCAL) => {
|
|
270
|
+
const r = [...e.values()];
|
|
271
|
+
e.clear(), n.clear(), p(d, { deleted: r });
|
|
272
|
+
}, L = (d, r = !0, c = O.LOCAL) => {
|
|
273
|
+
if (r) {
|
|
274
|
+
const f = [...e.values()];
|
|
275
275
|
e.clear(), n.clear(), d.forEach((C) => {
|
|
276
|
-
e.set(C.id, C), C.bodies.forEach((
|
|
277
|
-
}),
|
|
276
|
+
e.set(C.id, C), C.bodies.forEach((T) => n.set(T.id, C.id));
|
|
277
|
+
}), p(c, { created: d, deleted: f });
|
|
278
278
|
} else {
|
|
279
|
-
const
|
|
280
|
-
const
|
|
281
|
-
return
|
|
279
|
+
const f = d.reduce((C, T) => {
|
|
280
|
+
const I = e.get(T.id);
|
|
281
|
+
return I ? [...C, I] : C;
|
|
282
282
|
}, []);
|
|
283
|
-
if (
|
|
284
|
-
throw Error(`Bulk insert would overwrite the following annotations: ${
|
|
283
|
+
if (f.length > 0)
|
|
284
|
+
throw Error(`Bulk insert would overwrite the following annotations: ${f.map((C) => C.id).join(", ")}`);
|
|
285
285
|
d.forEach((C) => {
|
|
286
|
-
e.set(C.id, C), C.bodies.forEach((
|
|
287
|
-
}),
|
|
286
|
+
e.set(C.id, C), C.bodies.forEach((T) => n.set(T.id, C.id));
|
|
287
|
+
}), p(c, { created: d });
|
|
288
288
|
}
|
|
289
289
|
}, E = (d) => {
|
|
290
|
-
const
|
|
291
|
-
if (
|
|
292
|
-
return e.delete(
|
|
293
|
-
console.warn(`Attempt to delete missing annotation: ${
|
|
294
|
-
}, S = (d,
|
|
295
|
-
const
|
|
296
|
-
|
|
297
|
-
},
|
|
298
|
-
const
|
|
299
|
-
const
|
|
300
|
-
return
|
|
290
|
+
const r = typeof d == "string" ? d : d.id, c = e.get(r);
|
|
291
|
+
if (c)
|
|
292
|
+
return e.delete(r), c.bodies.forEach((f) => n.delete(f.id)), c;
|
|
293
|
+
console.warn(`Attempt to delete missing annotation: ${r}`);
|
|
294
|
+
}, S = (d, r = O.LOCAL) => {
|
|
295
|
+
const c = E(d);
|
|
296
|
+
c && p(r, { deleted: [c] });
|
|
297
|
+
}, y = (d, r = O.LOCAL) => {
|
|
298
|
+
const c = d.reduce((f, C) => {
|
|
299
|
+
const T = E(C);
|
|
300
|
+
return T ? [...f, T] : f;
|
|
301
301
|
}, []);
|
|
302
|
-
|
|
303
|
-
},
|
|
304
|
-
const
|
|
305
|
-
if (
|
|
306
|
-
const
|
|
307
|
-
if (
|
|
308
|
-
n.delete(
|
|
309
|
-
const
|
|
310
|
-
...
|
|
311
|
-
bodies:
|
|
302
|
+
c.length > 0 && p(r, { deleted: c });
|
|
303
|
+
}, l = (d) => {
|
|
304
|
+
const r = e.get(d.annotation);
|
|
305
|
+
if (r) {
|
|
306
|
+
const c = r.bodies.find((f) => f.id === d.id);
|
|
307
|
+
if (c) {
|
|
308
|
+
n.delete(c.id);
|
|
309
|
+
const f = {
|
|
310
|
+
...r,
|
|
311
|
+
bodies: r.bodies.filter((T) => T.id !== d.id)
|
|
312
312
|
};
|
|
313
|
-
return e.set(
|
|
314
|
-
oldValue:
|
|
315
|
-
newValue:
|
|
316
|
-
bodiesDeleted: [
|
|
313
|
+
return e.set(r.id, f), {
|
|
314
|
+
oldValue: r,
|
|
315
|
+
newValue: f,
|
|
316
|
+
bodiesDeleted: [c]
|
|
317
317
|
};
|
|
318
318
|
} else
|
|
319
319
|
console.warn(`Attempt to delete missing body ${d.id} from annotation ${d.annotation}`);
|
|
320
320
|
} else
|
|
321
321
|
console.warn(`Attempt to delete body from missing annotation ${d.annotation}`);
|
|
322
|
-
},
|
|
323
|
-
const
|
|
324
|
-
|
|
325
|
-
},
|
|
326
|
-
const
|
|
327
|
-
|
|
328
|
-
},
|
|
329
|
-
const
|
|
330
|
-
return
|
|
331
|
-
},
|
|
332
|
-
const
|
|
333
|
-
if (
|
|
334
|
-
const
|
|
335
|
-
if (
|
|
336
|
-
return
|
|
322
|
+
}, g = (d, r = O.LOCAL) => {
|
|
323
|
+
const c = l(d);
|
|
324
|
+
c && p(r, { updated: [c] });
|
|
325
|
+
}, a = (d, r = O.LOCAL) => {
|
|
326
|
+
const c = d.map((f) => l(f)).filter(Boolean);
|
|
327
|
+
c.length > 0 && p(r, { updated: c });
|
|
328
|
+
}, A = (d) => {
|
|
329
|
+
const r = e.get(d);
|
|
330
|
+
return r ? { ...r } : void 0;
|
|
331
|
+
}, m = (d) => {
|
|
332
|
+
const r = n.get(d);
|
|
333
|
+
if (r) {
|
|
334
|
+
const f = A(r).bodies.find((C) => C.id === d);
|
|
335
|
+
if (f)
|
|
336
|
+
return f;
|
|
337
337
|
console.error(`Store integrity error: body ${d} in index, but not in annotation`);
|
|
338
338
|
} else
|
|
339
339
|
console.warn(`Attempt to retrieve missing body: ${d}`);
|
|
340
|
-
},
|
|
341
|
-
if (d.annotation !==
|
|
340
|
+
}, R = (d, r) => {
|
|
341
|
+
if (d.annotation !== r.annotation)
|
|
342
342
|
throw "Annotation integrity violation: annotation ID must be the same when updating bodies";
|
|
343
|
-
const
|
|
344
|
-
if (
|
|
345
|
-
const
|
|
346
|
-
...
|
|
347
|
-
bodies:
|
|
343
|
+
const c = e.get(d.annotation);
|
|
344
|
+
if (c) {
|
|
345
|
+
const f = c.bodies.find((T) => T.id === d.id), C = {
|
|
346
|
+
...c,
|
|
347
|
+
bodies: c.bodies.map((T) => T.id === f.id ? r : T)
|
|
348
348
|
};
|
|
349
|
-
return e.set(
|
|
350
|
-
oldValue:
|
|
349
|
+
return e.set(c.id, C), f.id !== r.id && (n.delete(f.id), n.set(r.id, C.id)), {
|
|
350
|
+
oldValue: c,
|
|
351
351
|
newValue: C,
|
|
352
|
-
bodiesUpdated: [{ oldBody:
|
|
352
|
+
bodiesUpdated: [{ oldBody: f, newBody: r }]
|
|
353
353
|
};
|
|
354
354
|
} else
|
|
355
355
|
console.warn(`Attempt to add body to missing annotation ${d.annotation}`);
|
|
356
|
-
},
|
|
357
|
-
const
|
|
358
|
-
|
|
359
|
-
},
|
|
360
|
-
const
|
|
361
|
-
|
|
362
|
-
},
|
|
363
|
-
const
|
|
364
|
-
if (
|
|
365
|
-
const
|
|
366
|
-
...
|
|
356
|
+
}, N = (d, r, c = O.LOCAL) => {
|
|
357
|
+
const f = R(d, r);
|
|
358
|
+
f && p(c, { updated: [f] });
|
|
359
|
+
}, x = (d, r = O.LOCAL) => {
|
|
360
|
+
const c = d.map((f) => R({ id: f.id, annotation: f.annotation }, f)).filter(Boolean);
|
|
361
|
+
p(r, { updated: c });
|
|
362
|
+
}, Y = (d) => {
|
|
363
|
+
const r = e.get(d.annotation);
|
|
364
|
+
if (r) {
|
|
365
|
+
const c = {
|
|
366
|
+
...r,
|
|
367
367
|
target: {
|
|
368
|
-
...
|
|
368
|
+
...r.target,
|
|
369
369
|
...d
|
|
370
370
|
}
|
|
371
371
|
};
|
|
372
|
-
return e.set(
|
|
373
|
-
oldValue:
|
|
374
|
-
newValue:
|
|
372
|
+
return e.set(r.id, c), {
|
|
373
|
+
oldValue: r,
|
|
374
|
+
newValue: c,
|
|
375
375
|
targetUpdated: {
|
|
376
|
-
oldTarget:
|
|
376
|
+
oldTarget: r.target,
|
|
377
377
|
newTarget: d
|
|
378
378
|
}
|
|
379
379
|
};
|
|
@@ -381,30 +381,30 @@ const se = (e, n) => {
|
|
|
381
381
|
console.warn(`Attempt to update target on missing annotation: ${d.annotation}`);
|
|
382
382
|
};
|
|
383
383
|
return {
|
|
384
|
-
addAnnotation:
|
|
384
|
+
addAnnotation: w,
|
|
385
385
|
addBody: U,
|
|
386
386
|
all: s,
|
|
387
|
-
bulkAddAnnotation:
|
|
388
|
-
bulkDeleteAnnotation:
|
|
389
|
-
bulkDeleteBodies:
|
|
387
|
+
bulkAddAnnotation: L,
|
|
388
|
+
bulkDeleteAnnotation: y,
|
|
389
|
+
bulkDeleteBodies: a,
|
|
390
390
|
bulkUpdateAnnotation: u,
|
|
391
|
-
bulkUpdateBodies:
|
|
392
|
-
bulkUpdateTargets: (d,
|
|
393
|
-
const
|
|
394
|
-
|
|
391
|
+
bulkUpdateBodies: x,
|
|
392
|
+
bulkUpdateTargets: (d, r = O.LOCAL) => {
|
|
393
|
+
const c = d.map((f) => Y(f)).filter(Boolean);
|
|
394
|
+
c.length > 0 && p(r, { updated: c });
|
|
395
395
|
},
|
|
396
|
-
clear:
|
|
396
|
+
clear: h,
|
|
397
397
|
deleteAnnotation: S,
|
|
398
|
-
deleteBody:
|
|
399
|
-
getAnnotation:
|
|
400
|
-
getBody:
|
|
398
|
+
deleteBody: g,
|
|
399
|
+
getAnnotation: A,
|
|
400
|
+
getBody: m,
|
|
401
401
|
observe: o,
|
|
402
402
|
unobserve: i,
|
|
403
|
-
updateAnnotation:
|
|
404
|
-
updateBody:
|
|
405
|
-
updateTarget: (d,
|
|
406
|
-
const
|
|
407
|
-
|
|
403
|
+
updateAnnotation: v,
|
|
404
|
+
updateBody: N,
|
|
405
|
+
updateTarget: (d, r = O.LOCAL) => {
|
|
406
|
+
const c = Y(d);
|
|
407
|
+
c && p(r, { updated: [c] });
|
|
408
408
|
}
|
|
409
409
|
};
|
|
410
410
|
}, Oe = (e) => ({
|
|
@@ -414,7 +414,7 @@ const se = (e, n) => {
|
|
|
414
414
|
return e.observe(o), t(e.all()), () => e.unobserve(o);
|
|
415
415
|
}
|
|
416
416
|
});
|
|
417
|
-
let
|
|
417
|
+
let W = () => ({
|
|
418
418
|
emit(e, ...n) {
|
|
419
419
|
for (let t = 0, o = this.events[e] || [], i = o.length; t < i; t++)
|
|
420
420
|
o[t](...n);
|
|
@@ -429,133 +429,130 @@ let q = () => ({
|
|
|
429
429
|
}
|
|
430
430
|
});
|
|
431
431
|
const ae = 250, Te = (e) => {
|
|
432
|
-
const n =
|
|
433
|
-
let o = -1, i = !1,
|
|
434
|
-
const
|
|
432
|
+
const n = W(), t = [];
|
|
433
|
+
let o = -1, i = !1, p = 0;
|
|
434
|
+
const w = (a) => {
|
|
435
435
|
if (!i) {
|
|
436
|
-
const { changes:
|
|
437
|
-
if (
|
|
438
|
-
t.splice(o + 1), t.push(
|
|
436
|
+
const { changes: A } = a, m = performance.now();
|
|
437
|
+
if (m - p > ae)
|
|
438
|
+
t.splice(o + 1), t.push(A), o = t.length - 1;
|
|
439
439
|
else {
|
|
440
|
-
const
|
|
441
|
-
t[
|
|
440
|
+
const R = t.length - 1;
|
|
441
|
+
t[R] = ie(t[R], A);
|
|
442
442
|
}
|
|
443
|
-
|
|
443
|
+
p = m;
|
|
444
444
|
}
|
|
445
445
|
i = !1;
|
|
446
446
|
};
|
|
447
|
-
e.observe(
|
|
448
|
-
const b = (
|
|
449
|
-
...f,
|
|
450
|
-
id: P()
|
|
451
|
-
})), y = (l) => l && l.length > 0 && e.bulkDeleteAnnotation(l), u = (l) => l && l.length > 0 && e.bulkAddAnnotation(b(l), !1), U = (l) => l && l.length > 0 && e.bulkUpdateAnnotation(l.map(({ oldValue: f }) => f)), s = (l) => l && l.length > 0 && e.bulkUpdateAnnotation(l.map(({ newValue: f }) => f)), g = (l) => l && l.length > 0 && e.bulkAddAnnotation(b(l), !1), w = (l) => l && l.length > 0 && e.bulkDeleteAnnotation(l);
|
|
447
|
+
e.observe(w, { origin: O.LOCAL });
|
|
448
|
+
const b = (a) => a && a.length > 0 && e.bulkDeleteAnnotation(a), v = (a) => a && a.length > 0 && e.bulkAddAnnotation(a, !1), u = (a) => a && a.length > 0 && e.bulkUpdateAnnotation(a.map(({ oldValue: A }) => A)), U = (a) => a && a.length > 0 && e.bulkUpdateAnnotation(a.map(({ newValue: A }) => A)), s = (a) => a && a.length > 0 && e.bulkAddAnnotation(a, !1), h = (a) => a && a.length > 0 && e.bulkDeleteAnnotation(a);
|
|
452
449
|
return {
|
|
453
450
|
canRedo: () => t.length - 1 > o,
|
|
454
451
|
canUndo: () => o > -1,
|
|
455
|
-
destroy: () => e.unobserve(
|
|
456
|
-
on: (
|
|
452
|
+
destroy: () => e.unobserve(w),
|
|
453
|
+
on: (a, A) => n.on(a, A),
|
|
457
454
|
redo: () => {
|
|
458
455
|
if (t.length - 1 > o) {
|
|
459
456
|
i = !0;
|
|
460
|
-
const { created:
|
|
461
|
-
|
|
457
|
+
const { created: a, updated: A, deleted: m } = t[o + 1];
|
|
458
|
+
v(a), U(A), h(m), n.emit("redo", t[o + 1]), o += 1;
|
|
462
459
|
}
|
|
463
460
|
},
|
|
464
461
|
undo: () => {
|
|
465
462
|
if (o > -1) {
|
|
466
463
|
i = !0;
|
|
467
|
-
const { created:
|
|
468
|
-
|
|
464
|
+
const { created: a, updated: A, deleted: m } = t[o];
|
|
465
|
+
b(a), u(A), s(m), n.emit("undo", t[o]), o -= 1;
|
|
469
466
|
}
|
|
470
467
|
}
|
|
471
468
|
};
|
|
472
469
|
}, De = () => {
|
|
473
|
-
const { subscribe: e, set: n } =
|
|
470
|
+
const { subscribe: e, set: n } = _([]);
|
|
474
471
|
return {
|
|
475
472
|
subscribe: e,
|
|
476
473
|
set: n
|
|
477
474
|
};
|
|
478
475
|
}, Re = (e, n, t, o) => {
|
|
479
|
-
const { store: i, selection:
|
|
476
|
+
const { store: i, selection: p, hover: w, viewport: b } = e, v = /* @__PURE__ */ new Map();
|
|
480
477
|
let u = [], U, s;
|
|
481
|
-
const
|
|
482
|
-
|
|
483
|
-
},
|
|
484
|
-
const
|
|
485
|
-
|
|
486
|
-
}, E = (
|
|
487
|
-
|
|
488
|
-
|
|
478
|
+
const h = (l, g) => {
|
|
479
|
+
v.has(l) ? v.get(l).push(g) : v.set(l, [g]);
|
|
480
|
+
}, L = (l, g) => {
|
|
481
|
+
const a = v.get(l);
|
|
482
|
+
a && a.indexOf(g) > 0 && a.splice(a.indexOf(g), 1);
|
|
483
|
+
}, E = (l, g, a) => {
|
|
484
|
+
v.has(l) && setTimeout(() => {
|
|
485
|
+
v.get(l).forEach((A) => {
|
|
489
486
|
if (t) {
|
|
490
|
-
const
|
|
491
|
-
|
|
487
|
+
const m = Array.isArray(g) ? g.map((N) => t.serialize(N)) : t.serialize(g), R = a ? a instanceof PointerEvent ? a : t.serialize(a) : void 0;
|
|
488
|
+
A(m, R);
|
|
492
489
|
} else
|
|
493
|
-
|
|
490
|
+
A(g, a);
|
|
494
491
|
});
|
|
495
492
|
}, 1);
|
|
496
493
|
}, S = () => {
|
|
497
|
-
const { selected:
|
|
498
|
-
|
|
499
|
-
const
|
|
500
|
-
(!
|
|
501
|
-
}), u = u.map((
|
|
502
|
-
const
|
|
503
|
-
return
|
|
494
|
+
const { selected: l } = p, g = (l || []).map(({ id: a }) => i.getAnnotation(a));
|
|
495
|
+
g.forEach((a) => {
|
|
496
|
+
const A = u.find((m) => m.id === a.id);
|
|
497
|
+
(!A || !B(A, a)) && E("updateAnnotation", a, A);
|
|
498
|
+
}), u = u.map((a) => {
|
|
499
|
+
const A = g.find(({ id: m }) => m === a.id);
|
|
500
|
+
return A || a;
|
|
504
501
|
});
|
|
505
502
|
};
|
|
506
|
-
|
|
507
|
-
if (!(u.length === 0 &&
|
|
508
|
-
if (u.length === 0 &&
|
|
509
|
-
u =
|
|
510
|
-
else if (u.length > 0 &&
|
|
511
|
-
u.forEach((
|
|
512
|
-
const
|
|
513
|
-
|
|
503
|
+
p.subscribe(({ selected: l }) => {
|
|
504
|
+
if (!(u.length === 0 && l.length === 0)) {
|
|
505
|
+
if (u.length === 0 && l.length > 0)
|
|
506
|
+
u = l.map(({ id: g }) => i.getAnnotation(g));
|
|
507
|
+
else if (u.length > 0 && l.length === 0)
|
|
508
|
+
u.forEach((g) => {
|
|
509
|
+
const a = i.getAnnotation(g.id);
|
|
510
|
+
a && !B(a, g) && E("updateAnnotation", a, g);
|
|
514
511
|
}), u = [];
|
|
515
512
|
else {
|
|
516
|
-
const
|
|
517
|
-
u.filter((
|
|
518
|
-
const
|
|
519
|
-
|
|
513
|
+
const g = new Set(u.map((m) => m.id)), a = new Set(l.map(({ id: m }) => m));
|
|
514
|
+
u.filter((m) => !a.has(m.id)).forEach((m) => {
|
|
515
|
+
const R = i.getAnnotation(m.id);
|
|
516
|
+
R && !B(R, m) && E("updateAnnotation", R, m);
|
|
520
517
|
}), u = [
|
|
521
518
|
// Remove annotations that were deselected
|
|
522
|
-
...u.filter((
|
|
519
|
+
...u.filter((m) => a.has(m.id)),
|
|
523
520
|
// Add editable annotations that were selected
|
|
524
|
-
...
|
|
521
|
+
...l.filter(({ id: m }) => !g.has(m)).map(({ id: m }) => i.getAnnotation(m))
|
|
525
522
|
];
|
|
526
523
|
}
|
|
527
524
|
E("selectionChanged", u);
|
|
528
525
|
}
|
|
529
|
-
}),
|
|
530
|
-
!U &&
|
|
531
|
-
}), b == null || b.subscribe((
|
|
526
|
+
}), w.subscribe((l) => {
|
|
527
|
+
!U && l ? E("mouseEnterAnnotation", i.getAnnotation(l)) : U && !l ? E("mouseLeaveAnnotation", i.getAnnotation(U)) : U && l && (E("mouseLeaveAnnotation", i.getAnnotation(U)), E("mouseEnterAnnotation", i.getAnnotation(l))), U = l;
|
|
528
|
+
}), b == null || b.subscribe((l) => E("viewportIntersect", l.map((g) => i.getAnnotation(g)))), i.observe((l) => {
|
|
532
529
|
o && (s && clearTimeout(s), s = setTimeout(S, 1e3));
|
|
533
|
-
const { created:
|
|
534
|
-
(
|
|
535
|
-
...
|
|
536
|
-
...
|
|
537
|
-
...
|
|
538
|
-
].length > 0).forEach(({ oldValue:
|
|
539
|
-
const
|
|
540
|
-
u = u.map((
|
|
530
|
+
const { created: g, deleted: a } = l.changes;
|
|
531
|
+
(g || []).forEach((m) => E("createAnnotation", m)), (a || []).forEach((m) => E("deleteAnnotation", m)), (l.changes.updated || []).filter((m) => [
|
|
532
|
+
...m.bodiesCreated || [],
|
|
533
|
+
...m.bodiesDeleted || [],
|
|
534
|
+
...m.bodiesUpdated || []
|
|
535
|
+
].length > 0).forEach(({ oldValue: m, newValue: R }) => {
|
|
536
|
+
const N = u.find((x) => x.id === m.id) || m;
|
|
537
|
+
u = u.map((x) => x.id === m.id ? R : x), E("updateAnnotation", R, N);
|
|
541
538
|
});
|
|
542
|
-
}, { origin: O.LOCAL }), i.observe((
|
|
539
|
+
}, { origin: O.LOCAL }), i.observe((l) => {
|
|
543
540
|
if (u) {
|
|
544
|
-
const
|
|
545
|
-
|
|
546
|
-
const
|
|
547
|
-
return
|
|
541
|
+
const g = new Set(u.map((A) => A.id)), a = (l.changes.updated || []).filter(({ newValue: A }) => g.has(A.id)).map(({ newValue: A }) => A);
|
|
542
|
+
a.length > 0 && (u = u.map((A) => {
|
|
543
|
+
const m = a.find((R) => R.id === A.id);
|
|
544
|
+
return m || A;
|
|
548
545
|
}));
|
|
549
546
|
}
|
|
550
547
|
}, { origin: O.REMOTE });
|
|
551
|
-
const
|
|
552
|
-
const { updated:
|
|
553
|
-
|
|
548
|
+
const y = (l) => (g) => {
|
|
549
|
+
const { updated: a } = g;
|
|
550
|
+
l ? (a || []).forEach((A) => E("updateAnnotation", A.oldValue, A.newValue)) : (a || []).forEach((A) => E("updateAnnotation", A.newValue, A.oldValue));
|
|
554
551
|
};
|
|
555
|
-
return n.on("undo",
|
|
552
|
+
return n.on("undo", y(!0)), n.on("redo", y(!1)), { on: h, off: L, emit: E };
|
|
556
553
|
}, Be = (e) => (n) => n.map((t) => e.serialize(t)), re = (e) => (n) => n.reduce((t, o) => {
|
|
557
|
-
const { parsed: i, error:
|
|
558
|
-
return
|
|
554
|
+
const { parsed: i, error: p } = e.parse(o);
|
|
555
|
+
return p ? {
|
|
559
556
|
parsed: t.parsed,
|
|
560
557
|
failed: [...t.failed, o]
|
|
561
558
|
} : i ? {
|
|
@@ -565,59 +562,59 @@ const ae = 250, Te = (e) => {
|
|
|
565
562
|
...t
|
|
566
563
|
};
|
|
567
564
|
}, { parsed: [], failed: [] }), xe = (e, n, t) => {
|
|
568
|
-
const { store: o, selection: i } = e,
|
|
565
|
+
const { store: o, selection: i } = e, p = (y) => {
|
|
569
566
|
if (t) {
|
|
570
|
-
const { parsed:
|
|
571
|
-
|
|
567
|
+
const { parsed: l, error: g } = t.parse(y);
|
|
568
|
+
l ? o.addAnnotation(l, O.REMOTE) : console.error(g);
|
|
572
569
|
} else
|
|
573
|
-
o.addAnnotation(
|
|
574
|
-
},
|
|
575
|
-
const
|
|
576
|
-
return t &&
|
|
570
|
+
o.addAnnotation(y, O.REMOTE);
|
|
571
|
+
}, w = () => i.clear(), b = () => o.clear(), v = (y) => {
|
|
572
|
+
const l = o.getAnnotation(y);
|
|
573
|
+
return t && l ? t.serialize(l) : l;
|
|
577
574
|
}, u = () => t ? o.all().map(t.serialize) : o.all(), U = () => {
|
|
578
|
-
var
|
|
579
|
-
const
|
|
580
|
-
return t ?
|
|
581
|
-
}, s = (
|
|
582
|
-
if (typeof
|
|
583
|
-
const
|
|
584
|
-
if (o.deleteAnnotation(
|
|
585
|
-
return t ? t.serialize(
|
|
575
|
+
var g;
|
|
576
|
+
const l = (((g = i.selected) == null ? void 0 : g.map((a) => a.id)) || []).map((a) => o.getAnnotation(a)).filter(Boolean);
|
|
577
|
+
return t ? l.map(t.serialize) : l;
|
|
578
|
+
}, s = (y, l = !0) => fetch(y).then((g) => g.json()).then((g) => (L(g, l), g)), h = (y) => {
|
|
579
|
+
if (typeof y == "string") {
|
|
580
|
+
const l = o.getAnnotation(y);
|
|
581
|
+
if (o.deleteAnnotation(y), l)
|
|
582
|
+
return t ? t.serialize(l) : l;
|
|
586
583
|
} else {
|
|
587
|
-
const
|
|
588
|
-
if (
|
|
589
|
-
return o.deleteAnnotation(
|
|
584
|
+
const l = t ? t.parse(y).parsed : y;
|
|
585
|
+
if (l)
|
|
586
|
+
return o.deleteAnnotation(l), y;
|
|
590
587
|
}
|
|
591
|
-
},
|
|
588
|
+
}, L = (y, l = !0) => {
|
|
592
589
|
if (t) {
|
|
593
|
-
const { parsed:
|
|
594
|
-
|
|
590
|
+
const { parsed: g, failed: a } = re(t)(y);
|
|
591
|
+
a.length > 0 && console.warn(`Discarded ${a.length} invalid annotations`, a), o.bulkAddAnnotation(g, l, O.REMOTE);
|
|
595
592
|
} else
|
|
596
|
-
o.bulkAddAnnotation(
|
|
597
|
-
}, E = (
|
|
598
|
-
|
|
599
|
-
}, S = (
|
|
593
|
+
o.bulkAddAnnotation(y, l, O.REMOTE);
|
|
594
|
+
}, E = (y) => {
|
|
595
|
+
y ? i.setSelected(y) : i.clear();
|
|
596
|
+
}, S = (y) => {
|
|
600
597
|
if (t) {
|
|
601
|
-
const
|
|
602
|
-
return o.updateAnnotation(
|
|
598
|
+
const l = t.parse(y).parsed, g = t.serialize(o.getAnnotation(l.id));
|
|
599
|
+
return o.updateAnnotation(l), g;
|
|
603
600
|
} else {
|
|
604
|
-
const
|
|
605
|
-
return o.updateAnnotation(
|
|
601
|
+
const l = o.getAnnotation(y.id);
|
|
602
|
+
return o.updateAnnotation(y), l;
|
|
606
603
|
}
|
|
607
604
|
};
|
|
608
605
|
return {
|
|
609
|
-
addAnnotation:
|
|
610
|
-
cancelSelected:
|
|
606
|
+
addAnnotation: p,
|
|
607
|
+
cancelSelected: w,
|
|
611
608
|
canRedo: n.canRedo,
|
|
612
609
|
canUndo: n.canUndo,
|
|
613
610
|
clearAnnotations: b,
|
|
614
|
-
getAnnotationById:
|
|
611
|
+
getAnnotationById: v,
|
|
615
612
|
getAnnotations: u,
|
|
616
613
|
getSelected: U,
|
|
617
614
|
loadAnnotations: s,
|
|
618
615
|
redo: n.redo,
|
|
619
|
-
removeAnnotation:
|
|
620
|
-
setAnnotations:
|
|
616
|
+
removeAnnotation: h,
|
|
617
|
+
setAnnotations: L,
|
|
621
618
|
setSelected: E,
|
|
622
619
|
undo: n.undo,
|
|
623
620
|
updateAnnotation: S
|
|
@@ -625,13 +622,13 @@ const ae = 250, Te = (e) => {
|
|
|
625
622
|
}, ce = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
|
|
626
623
|
let le = (e) => crypto.getRandomValues(new Uint8Array(e)), ue = (e, n, t) => {
|
|
627
624
|
let o = (2 << Math.log(e.length - 1) / Math.LN2) - 1, i = -~(1.6 * o * n / e.length);
|
|
628
|
-
return (
|
|
629
|
-
let
|
|
625
|
+
return (p = n) => {
|
|
626
|
+
let w = "";
|
|
630
627
|
for (; ; ) {
|
|
631
|
-
let b = t(i),
|
|
632
|
-
for (;
|
|
633
|
-
if (
|
|
634
|
-
return
|
|
628
|
+
let b = t(i), v = i;
|
|
629
|
+
for (; v--; )
|
|
630
|
+
if (w += e[b[v] & o] || "", w.length === p)
|
|
631
|
+
return w;
|
|
635
632
|
}
|
|
636
633
|
};
|
|
637
634
|
}, fe = (e, n = 21) => ue(e, n, le), pe = (e = 21) => {
|
|
@@ -644,26 +641,31 @@ const Ie = () => ({ isGuest: !0, id: fe("1234567890abcdefghijklmnopqrstuvwxyzABC
|
|
|
644
641
|
const n = JSON.stringify(e);
|
|
645
642
|
let t = 0;
|
|
646
643
|
for (let o = 0, i = n.length; o < i; o++) {
|
|
647
|
-
let
|
|
648
|
-
t = (t << 5) - t +
|
|
644
|
+
let p = n.charCodeAt(o);
|
|
645
|
+
t = (t << 5) - t + p, t |= 0;
|
|
649
646
|
}
|
|
650
647
|
return `${t}`;
|
|
651
648
|
}, ge = (e) => e ? typeof e == "object" ? { ...e } : e : void 0, ke = (e, n) => (Array.isArray(e) ? e : [e]).map((t) => {
|
|
652
|
-
const { id: o, type: i, purpose:
|
|
649
|
+
const { id: o, type: i, purpose: p, value: w, created: b, modified: v, creator: u, ...U } = t;
|
|
653
650
|
return {
|
|
654
651
|
id: o || `temp-${he(t)}`,
|
|
655
652
|
annotation: n,
|
|
656
653
|
type: i,
|
|
657
|
-
purpose:
|
|
658
|
-
value:
|
|
654
|
+
purpose: p,
|
|
655
|
+
value: w,
|
|
656
|
+
creator: ge(u),
|
|
659
657
|
created: b ? new Date(b) : void 0,
|
|
660
|
-
|
|
661
|
-
...
|
|
658
|
+
updated: v ? new Date(v) : void 0,
|
|
659
|
+
...U
|
|
662
660
|
};
|
|
663
661
|
}), Ne = (e) => e.map((n) => {
|
|
664
|
-
var
|
|
665
|
-
const t
|
|
666
|
-
|
|
662
|
+
var b;
|
|
663
|
+
const { annotation: t, created: o, updated: i, ...p } = n, w = {
|
|
664
|
+
...p,
|
|
665
|
+
created: o == null ? void 0 : o.toISOString(),
|
|
666
|
+
modified: i == null ? void 0 : i.toISOString()
|
|
667
|
+
};
|
|
668
|
+
return (b = w.id) != null && b.startsWith("temp-") && delete w.id, w;
|
|
667
669
|
}), me = [
|
|
668
670
|
"#ff7c00",
|
|
669
671
|
// orange
|
|
@@ -692,83 +694,83 @@ const Ie = () => ({ isGuest: !0, id: fe("1234567890abcdefghijklmnopqrstuvwxyzABC
|
|
|
692
694
|
}, be = () => {
|
|
693
695
|
const e = Ae();
|
|
694
696
|
return { addUser: (o, i) => {
|
|
695
|
-
const
|
|
697
|
+
const p = e.assignRandomColor();
|
|
696
698
|
return {
|
|
697
699
|
label: i.name || i.id,
|
|
698
700
|
avatar: i.avatar,
|
|
699
|
-
color:
|
|
701
|
+
color: p
|
|
700
702
|
};
|
|
701
703
|
}, removeUser: (o) => e.releaseColor(o.appearance.color) };
|
|
702
704
|
}, Ee = (e, n) => e.every((t) => e.includes(t)) && n.every((t) => e.includes(t)), $e = pe(), ze = (e = be()) => {
|
|
703
|
-
const n =
|
|
705
|
+
const n = W(), t = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), i = (s, h) => {
|
|
704
706
|
if (t.has(s)) {
|
|
705
|
-
console.warn("Attempt to add user that is already present", s,
|
|
707
|
+
console.warn("Attempt to add user that is already present", s, h);
|
|
706
708
|
return;
|
|
707
709
|
}
|
|
708
|
-
const
|
|
710
|
+
const L = e.addUser(s, h);
|
|
709
711
|
t.set(s, {
|
|
710
|
-
...
|
|
712
|
+
...h,
|
|
711
713
|
presenceKey: s,
|
|
712
|
-
appearance:
|
|
714
|
+
appearance: L
|
|
713
715
|
});
|
|
714
|
-
},
|
|
715
|
-
const
|
|
716
|
-
if (!
|
|
716
|
+
}, p = (s) => {
|
|
717
|
+
const h = t.get(s);
|
|
718
|
+
if (!h) {
|
|
717
719
|
console.warn("Attempt to remove user that is not present", s);
|
|
718
720
|
return;
|
|
719
721
|
}
|
|
720
|
-
e.removeUser(
|
|
721
|
-
},
|
|
722
|
-
const
|
|
723
|
-
|
|
724
|
-
const { presenceKey:
|
|
725
|
-
o.has(
|
|
726
|
-
}), (
|
|
727
|
-
}, b = (s,
|
|
728
|
-
const
|
|
729
|
-
if (!
|
|
722
|
+
e.removeUser(h), t.delete(s);
|
|
723
|
+
}, w = (s) => {
|
|
724
|
+
const h = new Set(s.map((S) => S.presenceKey)), L = s.filter(({ presenceKey: S }) => !t.has(S)), E = Array.from(t.values()).filter((S) => !h.has(S.presenceKey));
|
|
725
|
+
L.forEach(({ presenceKey: S, user: y }) => i(S, y)), E.forEach((S) => {
|
|
726
|
+
const { presenceKey: y } = S;
|
|
727
|
+
o.has(y) && n.emit("selectionChange", S, null), p(y);
|
|
728
|
+
}), (L.length > 0 || E.length > 0) && n.emit("presence", u());
|
|
729
|
+
}, b = (s, h) => {
|
|
730
|
+
const L = t.get(s);
|
|
731
|
+
if (!L) {
|
|
730
732
|
console.warn("Activity notification from user that is not present");
|
|
731
733
|
return;
|
|
732
734
|
}
|
|
733
735
|
const E = o.get(s);
|
|
734
|
-
(!E || !Ee(E,
|
|
735
|
-
},
|
|
736
|
-
const
|
|
737
|
-
if (!
|
|
736
|
+
(!E || !Ee(E, h)) && (o.set(s, h), n.emit("selectionChange", L, h));
|
|
737
|
+
}, v = (s, h) => {
|
|
738
|
+
const L = t.get(s);
|
|
739
|
+
if (!L) {
|
|
738
740
|
console.warn("Selection change for user that is not present", s);
|
|
739
741
|
return;
|
|
740
742
|
}
|
|
741
|
-
|
|
743
|
+
h ? o.set(s, h) : o.delete(s), n.emit("selectionChange", L, h);
|
|
742
744
|
}, u = () => [...Array.from(t.values())];
|
|
743
745
|
return {
|
|
744
746
|
getPresentUsers: u,
|
|
745
747
|
notifyActivity: b,
|
|
746
|
-
on: (s,
|
|
747
|
-
syncUsers:
|
|
748
|
-
updateSelection:
|
|
748
|
+
on: (s, h) => n.on(s, h),
|
|
749
|
+
syncUsers: w,
|
|
750
|
+
updateSelection: v
|
|
749
751
|
};
|
|
750
752
|
};
|
|
751
753
|
export {
|
|
752
754
|
oe as Ignore,
|
|
753
755
|
O as Origin,
|
|
754
756
|
$e as PRESENCE_KEY,
|
|
755
|
-
|
|
757
|
+
G as PointerSelectAction,
|
|
756
758
|
Ie as createAnonymousGuest,
|
|
757
759
|
xe as createBaseAnnotator,
|
|
758
760
|
Ue as createBody,
|
|
759
761
|
be as createDefaultAppearenceProvider,
|
|
760
|
-
|
|
762
|
+
we as createHoverState,
|
|
761
763
|
Re as createLifecyleObserver,
|
|
762
764
|
ze as createPresenceState,
|
|
763
|
-
|
|
765
|
+
Ce as createSelectionState,
|
|
764
766
|
Se as createStore,
|
|
765
767
|
Te as createUndoStack,
|
|
766
768
|
De as createViewportState,
|
|
767
769
|
Ae as defaultColorProvider,
|
|
768
|
-
|
|
770
|
+
P as diffAnnotations,
|
|
769
771
|
Le as getContributors,
|
|
770
772
|
ie as mergeChanges,
|
|
771
|
-
|
|
773
|
+
H as onPointerSelect,
|
|
772
774
|
re as parseAll,
|
|
773
775
|
ke as parseW3CBodies,
|
|
774
776
|
ge as parseW3CUser,
|