@annotorious/core 3.0.4 → 3.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/annotorious-core.es.js +270 -259
- package/dist/annotorious-core.es.js.map +1 -1
- package/dist/model/Annotator.d.ts.map +1 -1
- package/dist/model/FormatAdapter.d.ts +4 -0
- package/dist/model/FormatAdapter.d.ts.map +1 -1
- package/dist/utils/annotationUtils.d.ts +8 -0
- package/dist/utils/annotationUtils.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var q = Object.prototype.hasOwnProperty;
|
|
2
2
|
function I(e, n) {
|
|
3
3
|
var t, o;
|
|
4
4
|
if (e === n) return !0;
|
|
@@ -13,7 +13,7 @@ function I(e, n) {
|
|
|
13
13
|
if (!t || typeof e == "object") {
|
|
14
14
|
o = 0;
|
|
15
15
|
for (t in e)
|
|
16
|
-
if (
|
|
16
|
+
if (q.call(e, t) && ++o && !q.call(n, t) || !(t in n) || !I(e[t], n[t])) return !1;
|
|
17
17
|
return Object.keys(n).length === o;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
@@ -21,21 +21,21 @@ function I(e, n) {
|
|
|
21
21
|
}
|
|
22
22
|
function _() {
|
|
23
23
|
}
|
|
24
|
-
function
|
|
24
|
+
function X(e, n) {
|
|
25
25
|
return e != e ? n == n : e !== n || e && typeof e == "object" || typeof e == "function";
|
|
26
26
|
}
|
|
27
27
|
const k = [];
|
|
28
|
-
function
|
|
28
|
+
function M(e, n = _) {
|
|
29
29
|
let t;
|
|
30
30
|
const o = /* @__PURE__ */ new Set();
|
|
31
31
|
function i(b) {
|
|
32
|
-
if (
|
|
33
|
-
const
|
|
34
|
-
for (const
|
|
35
|
-
|
|
36
|
-
if (
|
|
37
|
-
for (let
|
|
38
|
-
k[
|
|
32
|
+
if (X(e, b) && (e = b, t)) {
|
|
33
|
+
const w = !k.length;
|
|
34
|
+
for (const g of o)
|
|
35
|
+
g[1](), k.push(g, e);
|
|
36
|
+
if (w) {
|
|
37
|
+
for (let g = 0; g < k.length; g += 2)
|
|
38
|
+
k[g][0](k[g + 1]);
|
|
39
39
|
k.length = 0;
|
|
40
40
|
}
|
|
41
41
|
}
|
|
@@ -43,22 +43,22 @@ function j(e, n = _) {
|
|
|
43
43
|
function f(b) {
|
|
44
44
|
i(b(e));
|
|
45
45
|
}
|
|
46
|
-
function
|
|
47
|
-
const
|
|
48
|
-
return o.add(
|
|
49
|
-
o.delete(
|
|
46
|
+
function y(b, w = _) {
|
|
47
|
+
const g = [b, w];
|
|
48
|
+
return o.add(g), o.size === 1 && (t = n(i, f) || _), b(e), () => {
|
|
49
|
+
o.delete(g), o.size === 0 && t && (t(), t = null);
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
|
-
return { set: i, update: f, subscribe:
|
|
52
|
+
return { set: i, update: f, subscribe: y };
|
|
53
53
|
}
|
|
54
|
-
const
|
|
55
|
-
const { subscribe: n, set: t } =
|
|
54
|
+
const Ue = (e) => {
|
|
55
|
+
const { subscribe: n, set: t } = M();
|
|
56
56
|
let o;
|
|
57
57
|
return n((i) => o = i), e.observe(({ changes: i }) => {
|
|
58
58
|
if (o) {
|
|
59
59
|
(i.deleted || []).some((b) => b.id === o) && t(void 0);
|
|
60
|
-
const
|
|
61
|
-
|
|
60
|
+
const y = (i.updated || []).find(({ oldValue: b }) => b.id === o);
|
|
61
|
+
y && t(y.newValue.id);
|
|
62
62
|
}
|
|
63
63
|
}), {
|
|
64
64
|
get current() {
|
|
@@ -68,53 +68,53 @@ const Se = (e) => {
|
|
|
68
68
|
set: t
|
|
69
69
|
};
|
|
70
70
|
};
|
|
71
|
-
var
|
|
72
|
-
const z = { selected: [] },
|
|
73
|
-
const { subscribe: t, set: o } =
|
|
71
|
+
var Z = /* @__PURE__ */ ((e) => (e.EDIT = "EDIT", e.SELECT = "SELECT", e.NONE = "NONE", e))(Z || {});
|
|
72
|
+
const z = { selected: [] }, Te = (e, n) => {
|
|
73
|
+
const { subscribe: t, set: o } = M(z);
|
|
74
74
|
let i = n, f = z;
|
|
75
|
-
t((
|
|
76
|
-
const
|
|
75
|
+
t((A) => f = A);
|
|
76
|
+
const y = () => {
|
|
77
77
|
I(f, z) || o(z);
|
|
78
78
|
}, b = () => {
|
|
79
|
-
var
|
|
80
|
-
return ((
|
|
81
|
-
},
|
|
79
|
+
var A;
|
|
80
|
+
return ((A = f.selected) == null ? void 0 : A.length) === 0;
|
|
81
|
+
}, w = (A) => {
|
|
82
82
|
if (b())
|
|
83
83
|
return !1;
|
|
84
|
-
const v = typeof
|
|
84
|
+
const v = typeof A == "string" ? A : A.id;
|
|
85
85
|
return f.selected.some((L) => L.id === v);
|
|
86
|
-
},
|
|
87
|
-
const L = e.getAnnotation(
|
|
86
|
+
}, g = (A, v) => {
|
|
87
|
+
const L = e.getAnnotation(A);
|
|
88
88
|
if (!L) {
|
|
89
|
-
console.warn("Invalid selection: " +
|
|
89
|
+
console.warn("Invalid selection: " + A);
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
92
|
-
switch (
|
|
92
|
+
switch (G(L, i)) {
|
|
93
93
|
case "EDIT":
|
|
94
|
-
o({ selected: [{ id:
|
|
94
|
+
o({ selected: [{ id: A, editable: !0 }], event: v });
|
|
95
95
|
break;
|
|
96
96
|
case "SELECT":
|
|
97
|
-
o({ selected: [{ id:
|
|
97
|
+
o({ selected: [{ id: A }], event: v });
|
|
98
98
|
break;
|
|
99
99
|
default:
|
|
100
100
|
o({ selected: [], event: v });
|
|
101
101
|
}
|
|
102
|
-
}, S = (
|
|
103
|
-
const L = Array.isArray(
|
|
102
|
+
}, S = (A, v) => {
|
|
103
|
+
const L = Array.isArray(A) ? A : [A], O = L.map((a) => e.getAnnotation(a)).filter((a) => !!a);
|
|
104
104
|
o({
|
|
105
105
|
selected: O.map((a) => {
|
|
106
|
-
const u = v === void 0 ?
|
|
106
|
+
const u = v === void 0 ? G(a, i) === "EDIT" : v;
|
|
107
107
|
return { id: a.id, editable: u };
|
|
108
108
|
})
|
|
109
|
-
}), O.length !== L.length && console.warn("Invalid selection",
|
|
110
|
-
}, r = (
|
|
109
|
+
}), O.length !== L.length && console.warn("Invalid selection", A);
|
|
110
|
+
}, r = (A) => {
|
|
111
111
|
if (b())
|
|
112
112
|
return !1;
|
|
113
113
|
const { selected: v } = f;
|
|
114
|
-
v.some(({ id: O }) =>
|
|
115
|
-
}, E = (
|
|
114
|
+
v.some(({ id: O }) => A.includes(O)) && o({ selected: v.filter(({ id: O }) => !A.includes(O)) });
|
|
115
|
+
}, E = (A) => i = A;
|
|
116
116
|
return e.observe(
|
|
117
|
-
({ changes:
|
|
117
|
+
({ changes: A }) => r((A.deleted || []).map((v) => v.id))
|
|
118
118
|
), {
|
|
119
119
|
get event() {
|
|
120
120
|
return f ? f.event : null;
|
|
@@ -125,115 +125,125 @@ const z = { selected: [] }, Ue = (e, n) => {
|
|
|
125
125
|
get userSelectAction() {
|
|
126
126
|
return i;
|
|
127
127
|
},
|
|
128
|
-
clear:
|
|
128
|
+
clear: y,
|
|
129
129
|
isEmpty: b,
|
|
130
|
-
isSelected:
|
|
130
|
+
isSelected: w,
|
|
131
131
|
setSelected: S,
|
|
132
132
|
setUserSelectAction: E,
|
|
133
133
|
subscribe: t,
|
|
134
|
-
userSelect:
|
|
134
|
+
userSelect: g
|
|
135
135
|
};
|
|
136
|
-
},
|
|
136
|
+
}, G = (e, n) => typeof n == "function" ? n(e) : n || "EDIT";
|
|
137
137
|
var D = [];
|
|
138
138
|
for (var Y = 0; Y < 256; ++Y)
|
|
139
139
|
D.push((Y + 256).toString(16).slice(1));
|
|
140
|
-
function
|
|
140
|
+
function K(e, n = 0) {
|
|
141
141
|
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]]).toLowerCase();
|
|
142
142
|
}
|
|
143
|
-
var $,
|
|
144
|
-
function
|
|
143
|
+
var $, ee = new Uint8Array(16);
|
|
144
|
+
function te() {
|
|
145
145
|
if (!$ && ($ = typeof crypto < "u" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto), !$))
|
|
146
146
|
throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
|
|
147
|
-
return $(
|
|
147
|
+
return $(ee);
|
|
148
148
|
}
|
|
149
|
-
var
|
|
150
|
-
const
|
|
151
|
-
randomUUID:
|
|
149
|
+
var ne = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto);
|
|
150
|
+
const H = {
|
|
151
|
+
randomUUID: ne
|
|
152
152
|
};
|
|
153
|
-
function
|
|
154
|
-
if (
|
|
155
|
-
return
|
|
153
|
+
function F(e, n, t) {
|
|
154
|
+
if (H.randomUUID && !n && !e)
|
|
155
|
+
return H.randomUUID();
|
|
156
156
|
e = e || {};
|
|
157
|
-
var o = e.random || (e.rng ||
|
|
158
|
-
return o[6] = o[6] & 15 | 64, o[8] = o[8] & 63 | 128,
|
|
157
|
+
var o = e.random || (e.rng || te)();
|
|
158
|
+
return o[6] = o[6] & 15 | 64, o[8] = o[8] & 63 | 128, K(o);
|
|
159
159
|
}
|
|
160
|
-
const
|
|
160
|
+
const Oe = (e) => {
|
|
161
161
|
const { creator: n, updatedBy: t } = e.target, o = e.bodies.reduce((i, f) => [...i, f.creator, f.updatedBy].filter(Boolean), []);
|
|
162
162
|
return [
|
|
163
163
|
n,
|
|
164
164
|
t,
|
|
165
165
|
...o
|
|
166
166
|
].filter((i) => i);
|
|
167
|
-
},
|
|
168
|
-
|
|
167
|
+
}, j = (e) => {
|
|
168
|
+
const n = (t) => {
|
|
169
|
+
const o = { ...t };
|
|
170
|
+
return t.created && typeof t.created == "string" && (o.created = new Date(t.created)), t.updated && typeof t.updated == "string" && (o.updated = new Date(t.updated)), o;
|
|
171
|
+
};
|
|
172
|
+
return {
|
|
173
|
+
...e,
|
|
174
|
+
bodies: (e.bodies || []).map(n),
|
|
175
|
+
target: n(e.target)
|
|
176
|
+
};
|
|
177
|
+
}, De = (e, n, t, o) => ({
|
|
178
|
+
id: F(),
|
|
169
179
|
annotation: typeof e == "string" ? e : e.id,
|
|
170
180
|
created: t || /* @__PURE__ */ new Date(),
|
|
171
181
|
creator: o,
|
|
172
182
|
...n
|
|
173
|
-
}),
|
|
183
|
+
}), oe = (e, n) => {
|
|
174
184
|
const t = new Set(e.bodies.map((o) => o.id));
|
|
175
185
|
return n.bodies.filter((o) => !t.has(o.id));
|
|
176
|
-
},
|
|
186
|
+
}, se = (e, n) => {
|
|
177
187
|
const t = new Set(n.bodies.map((o) => o.id));
|
|
178
188
|
return e.bodies.filter((o) => !t.has(o.id));
|
|
179
|
-
},
|
|
189
|
+
}, ie = (e, n) => n.bodies.map((t) => {
|
|
180
190
|
const o = e.bodies.find((i) => i.id === t.id);
|
|
181
191
|
return { newBody: t, oldBody: o && !I(o, t) ? o : void 0 };
|
|
182
|
-
}).filter(({ oldBody: t }) => t).map(({ oldBody: t, newBody: o }) => ({ oldBody: t, newBody: o })),
|
|
183
|
-
const t =
|
|
192
|
+
}).filter(({ oldBody: t }) => t).map(({ oldBody: t, newBody: o }) => ({ oldBody: t, newBody: o })), de = (e, n) => !I(e.target, n.target), J = (e, n) => {
|
|
193
|
+
const t = oe(e, n), o = se(e, n), i = ie(e, n);
|
|
184
194
|
return {
|
|
185
195
|
oldValue: e,
|
|
186
196
|
newValue: n,
|
|
187
197
|
bodiesCreated: t.length > 0 ? t : void 0,
|
|
188
198
|
bodiesDeleted: o.length > 0 ? o : void 0,
|
|
189
199
|
bodiesUpdated: i.length > 0 ? i : void 0,
|
|
190
|
-
targetUpdated:
|
|
200
|
+
targetUpdated: de(e, n) ? { oldTarget: e.target, newTarget: n.target } : void 0
|
|
191
201
|
};
|
|
192
202
|
};
|
|
193
|
-
var
|
|
194
|
-
const
|
|
195
|
-
var f,
|
|
203
|
+
var ae = /* @__PURE__ */ ((e) => (e.BODY_ONLY = "BODY_ONLY", e.TARGET_ONLY = "TARGET_ONLY", e))(ae || {}), T = /* @__PURE__ */ ((e) => (e.LOCAL = "LOCAL", e.REMOTE = "REMOTE", e.SILENT = "SILENT", e))(T || {});
|
|
204
|
+
const re = (e, n) => {
|
|
205
|
+
var f, y;
|
|
196
206
|
const { changes: t, origin: o } = n;
|
|
197
207
|
if (!(e.options.origin ? e.options.origin === o : o !== "SILENT"))
|
|
198
208
|
return !1;
|
|
199
209
|
if (e.options.ignore) {
|
|
200
|
-
const { ignore: b } = e.options,
|
|
201
|
-
if (!(
|
|
202
|
-
const S = (f = t.updated) == null ? void 0 : f.some((E) =>
|
|
210
|
+
const { ignore: b } = e.options, w = (S) => S && S.length > 0;
|
|
211
|
+
if (!(w(t.created) || w(t.deleted))) {
|
|
212
|
+
const S = (f = t.updated) == null ? void 0 : f.some((E) => w(E.bodiesCreated) || w(E.bodiesDeleted) || w(E.bodiesUpdated)), r = (y = t.updated) == null ? void 0 : y.some((E) => E.targetUpdated);
|
|
203
213
|
if (b === "BODY_ONLY" && S && !r || b === "TARGET_ONLY" && r && !S)
|
|
204
214
|
return !1;
|
|
205
215
|
}
|
|
206
216
|
}
|
|
207
217
|
if (e.options.annotations) {
|
|
208
218
|
const b = /* @__PURE__ */ new Set([
|
|
209
|
-
...(t.created || []).map((
|
|
210
|
-
...(t.deleted || []).map((
|
|
211
|
-
...(t.updated || []).map(({ oldValue:
|
|
219
|
+
...(t.created || []).map((g) => g.id),
|
|
220
|
+
...(t.deleted || []).map((g) => g.id),
|
|
221
|
+
...(t.updated || []).map(({ oldValue: g }) => g.id)
|
|
212
222
|
]);
|
|
213
|
-
return !!(Array.isArray(e.options.annotations) ? e.options.annotations : [e.options.annotations]).find((
|
|
223
|
+
return !!(Array.isArray(e.options.annotations) ? e.options.annotations : [e.options.annotations]).find((g) => b.has(g));
|
|
214
224
|
} else
|
|
215
225
|
return !0;
|
|
216
|
-
},
|
|
217
|
-
const t = new Set((e.created || []).map((r) => r.id)), o = new Set((e.updated || []).map(({ newValue: r }) => r.id)), i = new Set((n.created || []).map((r) => r.id)), f = new Set((n.deleted || []).map((r) => r.id)),
|
|
218
|
-
...(e.created || []).filter((r) => !f.has(r.id)).map((r) =>
|
|
226
|
+
}, ce = (e, n) => {
|
|
227
|
+
const t = new Set((e.created || []).map((r) => r.id)), o = new Set((e.updated || []).map(({ newValue: r }) => r.id)), i = new Set((n.created || []).map((r) => r.id)), f = new Set((n.deleted || []).map((r) => r.id)), y = new Set((n.updated || []).map(({ oldValue: r }) => r.id)), b = new Set((n.updated || []).filter(({ oldValue: r }) => t.has(r.id) || o.has(r.id)).map(({ oldValue: r }) => r.id)), w = [
|
|
228
|
+
...(e.created || []).filter((r) => !f.has(r.id)).map((r) => y.has(r.id) ? n.updated.find(({ oldValue: E }) => E.id === r.id).newValue : r),
|
|
219
229
|
...n.created || []
|
|
220
|
-
],
|
|
230
|
+
], g = [
|
|
221
231
|
...(e.deleted || []).filter((r) => !i.has(r.id)),
|
|
222
232
|
...(n.deleted || []).filter((r) => !t.has(r.id))
|
|
223
233
|
], S = [
|
|
224
234
|
...(e.updated || []).filter(({ newValue: r }) => !f.has(r.id)).map((r) => {
|
|
225
|
-
const { oldValue: E, newValue:
|
|
226
|
-
if (
|
|
227
|
-
const v = n.updated.find((L) => L.oldValue.id ===
|
|
228
|
-
return
|
|
235
|
+
const { oldValue: E, newValue: A } = r;
|
|
236
|
+
if (y.has(A.id)) {
|
|
237
|
+
const v = n.updated.find((L) => L.oldValue.id === A.id).newValue;
|
|
238
|
+
return J(E, v);
|
|
229
239
|
} else
|
|
230
240
|
return r;
|
|
231
241
|
}),
|
|
232
242
|
...(n.updated || []).filter(({ oldValue: r }) => !b.has(r.id))
|
|
233
243
|
];
|
|
234
|
-
return { created:
|
|
244
|
+
return { created: w, deleted: g, updated: S };
|
|
235
245
|
}, V = (e) => {
|
|
236
|
-
const n = e.id === void 0 ?
|
|
246
|
+
const n = e.id === void 0 ? F() : e.id;
|
|
237
247
|
return {
|
|
238
248
|
...e,
|
|
239
249
|
id: n,
|
|
@@ -246,7 +256,7 @@ const ae = (e, n) => {
|
|
|
246
256
|
annotation: n
|
|
247
257
|
}
|
|
248
258
|
};
|
|
249
|
-
},
|
|
259
|
+
}, le = (e) => e.id !== void 0, Re = () => {
|
|
250
260
|
const e = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map(), t = [], o = (d, c = {}) => {
|
|
251
261
|
t.push({ onChange: d, options: c });
|
|
252
262
|
}, i = (d) => {
|
|
@@ -263,9 +273,9 @@ const ae = (e, n) => {
|
|
|
263
273
|
state: [...e.values()]
|
|
264
274
|
};
|
|
265
275
|
t.forEach((p) => {
|
|
266
|
-
|
|
276
|
+
re(p, l) && p.onChange(l);
|
|
267
277
|
});
|
|
268
|
-
},
|
|
278
|
+
}, y = (d, c = T.LOCAL) => {
|
|
269
279
|
if (d.id && e.get(d.id))
|
|
270
280
|
throw Error(`Cannot add annotation ${d.id} - exists already`);
|
|
271
281
|
{
|
|
@@ -275,14 +285,14 @@ const ae = (e, n) => {
|
|
|
275
285
|
}, b = (d, c) => {
|
|
276
286
|
const l = V(typeof d == "string" ? c : d), p = typeof d == "string" ? d : d.id, U = p && e.get(p);
|
|
277
287
|
if (U) {
|
|
278
|
-
const C =
|
|
288
|
+
const C = J(U, l);
|
|
279
289
|
return p === l.id ? e.set(p, l) : (e.delete(p), e.set(l.id, l)), U.bodies.forEach((B) => n.delete(B.id)), l.bodies.forEach((B) => n.set(B.id, l.id)), C;
|
|
280
290
|
} else
|
|
281
291
|
console.warn(`Cannot update annotation ${p} - does not exist`);
|
|
282
|
-
},
|
|
283
|
-
const p =
|
|
292
|
+
}, w = (d, c = T.LOCAL, l = T.LOCAL) => {
|
|
293
|
+
const p = le(c) ? l : c, U = b(d, c);
|
|
284
294
|
U && f(p, { updated: [U] });
|
|
285
|
-
},
|
|
295
|
+
}, g = (d, c = T.LOCAL) => {
|
|
286
296
|
const l = d.reduce((p, U) => {
|
|
287
297
|
const C = b(U);
|
|
288
298
|
return C ? [...p, C] : p;
|
|
@@ -305,7 +315,7 @@ const ae = (e, n) => {
|
|
|
305
315
|
}, r = () => [...e.values()], E = (d = T.LOCAL) => {
|
|
306
316
|
const c = [...e.values()];
|
|
307
317
|
e.clear(), n.clear(), f(d, { deleted: c });
|
|
308
|
-
},
|
|
318
|
+
}, A = (d, c = !0, l = T.LOCAL) => {
|
|
309
319
|
const p = d.map(V);
|
|
310
320
|
if (c) {
|
|
311
321
|
const U = [...e.values()];
|
|
@@ -314,8 +324,8 @@ const ae = (e, n) => {
|
|
|
314
324
|
}), f(l, { created: p, deleted: U });
|
|
315
325
|
} else {
|
|
316
326
|
const U = d.reduce((C, B) => {
|
|
317
|
-
const
|
|
318
|
-
return
|
|
327
|
+
const W = B.id && e.get(B.id);
|
|
328
|
+
return W ? [...C, W] : C;
|
|
319
329
|
}, []);
|
|
320
330
|
if (U.length > 0)
|
|
321
331
|
throw Error(`Bulk insert would overwrite the following annotations: ${U.map((C) => C.id).join(", ")}`);
|
|
@@ -362,13 +372,13 @@ const ae = (e, n) => {
|
|
|
362
372
|
}, s = (d, c = T.LOCAL) => {
|
|
363
373
|
const l = d.map((p) => a(p)).filter(Boolean);
|
|
364
374
|
l.length > 0 && f(c, { updated: l });
|
|
365
|
-
},
|
|
375
|
+
}, h = (d) => {
|
|
366
376
|
const c = e.get(d);
|
|
367
377
|
return c ? { ...c } : void 0;
|
|
368
|
-
},
|
|
378
|
+
}, m = (d) => {
|
|
369
379
|
const c = n.get(d);
|
|
370
380
|
if (c) {
|
|
371
|
-
const p =
|
|
381
|
+
const p = h(c).bodies.find((U) => U.id === d);
|
|
372
382
|
if (p)
|
|
373
383
|
return p;
|
|
374
384
|
console.error(`Store integrity error: body ${d} in index, but not in annotation`);
|
|
@@ -396,7 +406,7 @@ const ae = (e, n) => {
|
|
|
396
406
|
}, x = (d, c = T.LOCAL) => {
|
|
397
407
|
const l = d.map((p) => R({ id: p.id, annotation: p.annotation }, p)).filter(Boolean);
|
|
398
408
|
f(c, { updated: l });
|
|
399
|
-
},
|
|
409
|
+
}, P = (d) => {
|
|
400
410
|
const c = e.get(d.annotation);
|
|
401
411
|
if (c) {
|
|
402
412
|
const l = {
|
|
@@ -418,40 +428,40 @@ const ae = (e, n) => {
|
|
|
418
428
|
console.warn(`Attempt to update target on missing annotation: ${d.annotation}`);
|
|
419
429
|
};
|
|
420
430
|
return {
|
|
421
|
-
addAnnotation:
|
|
431
|
+
addAnnotation: y,
|
|
422
432
|
addBody: S,
|
|
423
433
|
all: r,
|
|
424
|
-
bulkAddAnnotation:
|
|
434
|
+
bulkAddAnnotation: A,
|
|
425
435
|
bulkDeleteAnnotation: O,
|
|
426
436
|
bulkDeleteBodies: s,
|
|
427
|
-
bulkUpdateAnnotation:
|
|
437
|
+
bulkUpdateAnnotation: g,
|
|
428
438
|
bulkUpdateBodies: x,
|
|
429
439
|
bulkUpdateTargets: (d, c = T.LOCAL) => {
|
|
430
|
-
const l = d.map((p) =>
|
|
440
|
+
const l = d.map((p) => P(p)).filter(Boolean);
|
|
431
441
|
l.length > 0 && f(c, { updated: l });
|
|
432
442
|
},
|
|
433
443
|
clear: E,
|
|
434
444
|
deleteAnnotation: L,
|
|
435
445
|
deleteBody: u,
|
|
436
|
-
getAnnotation:
|
|
437
|
-
getBody:
|
|
446
|
+
getAnnotation: h,
|
|
447
|
+
getBody: m,
|
|
438
448
|
observe: o,
|
|
439
449
|
unobserve: i,
|
|
440
|
-
updateAnnotation:
|
|
450
|
+
updateAnnotation: w,
|
|
441
451
|
updateBody: N,
|
|
442
452
|
updateTarget: (d, c = T.LOCAL) => {
|
|
443
|
-
const l =
|
|
453
|
+
const l = P(d);
|
|
444
454
|
l && f(c, { updated: [l] });
|
|
445
455
|
}
|
|
446
456
|
};
|
|
447
|
-
},
|
|
457
|
+
}, Be = (e) => ({
|
|
448
458
|
...e,
|
|
449
459
|
subscribe: (t) => {
|
|
450
460
|
const o = (i) => t(i.state);
|
|
451
461
|
return e.observe(o), t(e.all()), () => e.unobserve(o);
|
|
452
462
|
}
|
|
453
463
|
});
|
|
454
|
-
let
|
|
464
|
+
let Q = () => ({
|
|
455
465
|
emit(e, ...n) {
|
|
456
466
|
for (let t = 0, o = this.events[e] || [], i = o.length; t < i; t++)
|
|
457
467
|
o[t](...n);
|
|
@@ -465,132 +475,132 @@ let J = () => ({
|
|
|
465
475
|
};
|
|
466
476
|
}
|
|
467
477
|
});
|
|
468
|
-
const
|
|
469
|
-
const n =
|
|
478
|
+
const ue = 250, Ie = (e) => {
|
|
479
|
+
const n = Q(), t = [];
|
|
470
480
|
let o = -1, i = !1, f = 0;
|
|
471
|
-
const
|
|
481
|
+
const y = (s) => {
|
|
472
482
|
if (!i) {
|
|
473
|
-
const { changes:
|
|
474
|
-
if (
|
|
475
|
-
t.splice(o + 1), t.push(
|
|
483
|
+
const { changes: h } = s, m = performance.now();
|
|
484
|
+
if (m - f > ue)
|
|
485
|
+
t.splice(o + 1), t.push(h), o = t.length - 1;
|
|
476
486
|
else {
|
|
477
487
|
const R = t.length - 1;
|
|
478
|
-
t[R] =
|
|
488
|
+
t[R] = ce(t[R], h);
|
|
479
489
|
}
|
|
480
|
-
f =
|
|
490
|
+
f = m;
|
|
481
491
|
}
|
|
482
492
|
i = !1;
|
|
483
493
|
};
|
|
484
|
-
e.observe(
|
|
485
|
-
const b = (s) => s && s.length > 0 && e.bulkDeleteAnnotation(s),
|
|
494
|
+
e.observe(y, { origin: T.LOCAL });
|
|
495
|
+
const b = (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: h }) => h)), S = (s) => s && s.length > 0 && e.bulkUpdateAnnotation(s.map(({ newValue: h }) => h)), r = (s) => s && s.length > 0 && e.bulkAddAnnotation(s, !1), E = (s) => s && s.length > 0 && e.bulkDeleteAnnotation(s);
|
|
486
496
|
return {
|
|
487
497
|
canRedo: () => t.length - 1 > o,
|
|
488
498
|
canUndo: () => o > -1,
|
|
489
|
-
destroy: () => e.unobserve(
|
|
490
|
-
on: (s,
|
|
499
|
+
destroy: () => e.unobserve(y),
|
|
500
|
+
on: (s, h) => n.on(s, h),
|
|
491
501
|
redo: () => {
|
|
492
502
|
if (t.length - 1 > o) {
|
|
493
503
|
i = !0;
|
|
494
|
-
const { created: s, updated:
|
|
495
|
-
|
|
504
|
+
const { created: s, updated: h, deleted: m } = t[o + 1];
|
|
505
|
+
w(s), S(h), E(m), n.emit("redo", t[o + 1]), o += 1;
|
|
496
506
|
}
|
|
497
507
|
},
|
|
498
508
|
undo: () => {
|
|
499
509
|
if (o > -1) {
|
|
500
510
|
i = !0;
|
|
501
|
-
const { created: s, updated:
|
|
502
|
-
b(s), h
|
|
511
|
+
const { created: s, updated: h, deleted: m } = t[o];
|
|
512
|
+
b(s), g(h), r(m), n.emit("undo", t[o]), o -= 1;
|
|
503
513
|
}
|
|
504
514
|
}
|
|
505
515
|
};
|
|
506
|
-
},
|
|
507
|
-
const { subscribe: e, set: n } =
|
|
516
|
+
}, xe = () => {
|
|
517
|
+
const { subscribe: e, set: n } = M([]);
|
|
508
518
|
return {
|
|
509
519
|
subscribe: e,
|
|
510
520
|
set: n
|
|
511
521
|
};
|
|
512
|
-
},
|
|
513
|
-
const { store: i, selection: f, hover:
|
|
514
|
-
let
|
|
522
|
+
}, ke = (e, n, t, o) => {
|
|
523
|
+
const { store: i, selection: f, hover: y, viewport: b } = e, w = /* @__PURE__ */ new Map();
|
|
524
|
+
let g = [], S, r;
|
|
515
525
|
const E = (a, u) => {
|
|
516
|
-
|
|
517
|
-
},
|
|
518
|
-
const s =
|
|
526
|
+
w.has(a) ? w.get(a).push(u) : w.set(a, [u]);
|
|
527
|
+
}, A = (a, u) => {
|
|
528
|
+
const s = w.get(a);
|
|
519
529
|
if (s) {
|
|
520
|
-
const
|
|
521
|
-
|
|
530
|
+
const h = s.indexOf(u);
|
|
531
|
+
h !== -1 && s.splice(h, 1);
|
|
522
532
|
}
|
|
523
533
|
}, v = (a, u, s) => {
|
|
524
|
-
|
|
525
|
-
|
|
534
|
+
w.has(a) && setTimeout(() => {
|
|
535
|
+
w.get(a).forEach((h) => {
|
|
526
536
|
if (t) {
|
|
527
|
-
const
|
|
528
|
-
|
|
537
|
+
const m = Array.isArray(u) ? u.map((N) => t.serialize(N)) : t.serialize(u), R = s ? s instanceof PointerEvent ? s : t.serialize(s) : void 0;
|
|
538
|
+
h(m, R);
|
|
529
539
|
} else
|
|
530
|
-
|
|
540
|
+
h(u, s);
|
|
531
541
|
});
|
|
532
542
|
}, 1);
|
|
533
543
|
}, L = () => {
|
|
534
544
|
const { selected: a } = f, u = (a || []).map(({ id: s }) => i.getAnnotation(s));
|
|
535
545
|
u.forEach((s) => {
|
|
536
|
-
const
|
|
537
|
-
(!
|
|
538
|
-
}),
|
|
539
|
-
const
|
|
540
|
-
return
|
|
546
|
+
const h = g.find((m) => m.id === s.id);
|
|
547
|
+
(!h || !I(h, s)) && v("updateAnnotation", s, h);
|
|
548
|
+
}), g = g.map((s) => {
|
|
549
|
+
const h = u.find(({ id: m }) => m === s.id);
|
|
550
|
+
return h || s;
|
|
541
551
|
});
|
|
542
552
|
};
|
|
543
553
|
f.subscribe(({ selected: a }) => {
|
|
544
|
-
if (!(
|
|
545
|
-
if (
|
|
546
|
-
|
|
547
|
-
else if (
|
|
548
|
-
|
|
554
|
+
if (!(g.length === 0 && a.length === 0)) {
|
|
555
|
+
if (g.length === 0 && a.length > 0)
|
|
556
|
+
g = a.map(({ id: u }) => i.getAnnotation(u));
|
|
557
|
+
else if (g.length > 0 && a.length === 0)
|
|
558
|
+
g.forEach((u) => {
|
|
549
559
|
const s = i.getAnnotation(u.id);
|
|
550
560
|
s && !I(s, u) && v("updateAnnotation", s, u);
|
|
551
|
-
}),
|
|
561
|
+
}), g = [];
|
|
552
562
|
else {
|
|
553
|
-
const u = new Set(
|
|
554
|
-
|
|
555
|
-
const R = i.getAnnotation(
|
|
556
|
-
R && !I(R,
|
|
557
|
-
}),
|
|
563
|
+
const u = new Set(g.map((m) => m.id)), s = new Set(a.map(({ id: m }) => m));
|
|
564
|
+
g.filter((m) => !s.has(m.id)).forEach((m) => {
|
|
565
|
+
const R = i.getAnnotation(m.id);
|
|
566
|
+
R && !I(R, m) && v("updateAnnotation", R, m);
|
|
567
|
+
}), g = [
|
|
558
568
|
// Remove annotations that were deselected
|
|
559
|
-
...
|
|
569
|
+
...g.filter((m) => s.has(m.id)),
|
|
560
570
|
// Add editable annotations that were selected
|
|
561
|
-
...a.filter(({ id:
|
|
571
|
+
...a.filter(({ id: m }) => !u.has(m)).map(({ id: m }) => i.getAnnotation(m))
|
|
562
572
|
];
|
|
563
573
|
}
|
|
564
|
-
v("selectionChanged",
|
|
574
|
+
v("selectionChanged", g);
|
|
565
575
|
}
|
|
566
|
-
}),
|
|
576
|
+
}), y.subscribe((a) => {
|
|
567
577
|
!S && a ? v("mouseEnterAnnotation", i.getAnnotation(a)) : S && !a ? v("mouseLeaveAnnotation", i.getAnnotation(S)) : S && a && (v("mouseLeaveAnnotation", i.getAnnotation(S)), v("mouseEnterAnnotation", i.getAnnotation(a))), S = a;
|
|
568
578
|
}), b == null || b.subscribe((a) => v("viewportIntersect", a.map((u) => i.getAnnotation(u)))), i.observe((a) => {
|
|
569
579
|
o && (r && clearTimeout(r), r = setTimeout(L, 1e3));
|
|
570
580
|
const { created: u, deleted: s } = a.changes;
|
|
571
|
-
(u || []).forEach((
|
|
572
|
-
...
|
|
573
|
-
...
|
|
574
|
-
...
|
|
575
|
-
].length > 0).forEach(({ oldValue:
|
|
576
|
-
const N =
|
|
577
|
-
|
|
581
|
+
(u || []).forEach((m) => v("createAnnotation", m)), (s || []).forEach((m) => v("deleteAnnotation", m)), (a.changes.updated || []).filter((m) => [
|
|
582
|
+
...m.bodiesCreated || [],
|
|
583
|
+
...m.bodiesDeleted || [],
|
|
584
|
+
...m.bodiesUpdated || []
|
|
585
|
+
].length > 0).forEach(({ oldValue: m, newValue: R }) => {
|
|
586
|
+
const N = g.find((x) => x.id === m.id) || m;
|
|
587
|
+
g = g.map((x) => x.id === m.id ? R : x), v("updateAnnotation", R, N);
|
|
578
588
|
});
|
|
579
589
|
}, { origin: T.LOCAL }), i.observe((a) => {
|
|
580
|
-
if (
|
|
581
|
-
const u = new Set(
|
|
582
|
-
s.length > 0 && (
|
|
583
|
-
const
|
|
584
|
-
return
|
|
590
|
+
if (g) {
|
|
591
|
+
const u = new Set(g.map((h) => h.id)), s = (a.changes.updated || []).filter(({ newValue: h }) => u.has(h.id)).map(({ newValue: h }) => h);
|
|
592
|
+
s.length > 0 && (g = g.map((h) => {
|
|
593
|
+
const m = s.find((R) => R.id === h.id);
|
|
594
|
+
return m || h;
|
|
585
595
|
}));
|
|
586
596
|
}
|
|
587
597
|
}, { origin: T.REMOTE });
|
|
588
598
|
const O = (a) => (u) => {
|
|
589
599
|
const { updated: s } = u;
|
|
590
|
-
a ? (s || []).forEach((
|
|
600
|
+
a ? (s || []).forEach((h) => v("updateAnnotation", h.oldValue, h.newValue)) : (s || []).forEach((h) => v("updateAnnotation", h.newValue, h.oldValue));
|
|
591
601
|
};
|
|
592
|
-
return n.on("undo", O(!0)), n.on("redo", O(!1)), { on: E, off:
|
|
593
|
-
},
|
|
602
|
+
return n.on("undo", O(!0)), n.on("redo", O(!1)), { on: E, off: A, emit: v };
|
|
603
|
+
}, Ne = (e) => (n) => n.map((t) => e.serialize(t)), fe = (e) => (n) => n.reduce((t, o) => {
|
|
594
604
|
const { parsed: i, error: f } = e.parse(o);
|
|
595
605
|
return f ? {
|
|
596
606
|
parsed: t.parsed,
|
|
@@ -601,21 +611,21 @@ const le = 250, Be = (e) => {
|
|
|
601
611
|
} : {
|
|
602
612
|
...t
|
|
603
613
|
};
|
|
604
|
-
}, { parsed: [], failed: [] }),
|
|
614
|
+
}, { parsed: [], failed: [] }), ze = (e, n, t) => {
|
|
605
615
|
const { store: o, selection: i } = e, f = (a) => {
|
|
606
616
|
if (t) {
|
|
607
617
|
const { parsed: u, error: s } = t.parse(a);
|
|
608
618
|
u ? o.addAnnotation(u, T.REMOTE) : console.error(s);
|
|
609
619
|
} else
|
|
610
|
-
o.addAnnotation(a, T.REMOTE);
|
|
611
|
-
},
|
|
620
|
+
o.addAnnotation(j(a), T.REMOTE);
|
|
621
|
+
}, y = () => i.clear(), b = () => o.clear(), w = (a) => {
|
|
612
622
|
const u = o.getAnnotation(a);
|
|
613
623
|
return t && u ? t.serialize(u) : u;
|
|
614
|
-
},
|
|
624
|
+
}, g = () => t ? o.all().map(t.serialize) : o.all(), S = () => {
|
|
615
625
|
var s;
|
|
616
|
-
const u = (((s = i.selected) == null ? void 0 : s.map((
|
|
626
|
+
const u = (((s = i.selected) == null ? void 0 : s.map((h) => h.id)) || []).map((h) => o.getAnnotation(h)).filter(Boolean);
|
|
617
627
|
return t ? u.map(t.serialize) : u;
|
|
618
|
-
}, r = (a, u = !0) => fetch(a).then((s) => s.json()).then((s) => (
|
|
628
|
+
}, r = (a, u = !0) => fetch(a).then((s) => s.json()).then((s) => (A(s, u), s)), E = (a) => {
|
|
619
629
|
if (typeof a == "string") {
|
|
620
630
|
const u = o.getAnnotation(a);
|
|
621
631
|
if (o.deleteAnnotation(a), u)
|
|
@@ -625,12 +635,12 @@ const le = 250, Be = (e) => {
|
|
|
625
635
|
if (u)
|
|
626
636
|
return o.deleteAnnotation(u), a;
|
|
627
637
|
}
|
|
628
|
-
},
|
|
638
|
+
}, A = (a, u = !0) => {
|
|
629
639
|
if (t) {
|
|
630
|
-
const { parsed:
|
|
631
|
-
|
|
640
|
+
const s = t.parseAll || fe(t), { parsed: h, failed: m } = s(a);
|
|
641
|
+
m.length > 0 && console.warn(`Discarded ${m.length} invalid annotations`, m), o.bulkAddAnnotation(h, u, T.REMOTE);
|
|
632
642
|
} else
|
|
633
|
-
o.bulkAddAnnotation(a, u, T.REMOTE);
|
|
643
|
+
o.bulkAddAnnotation(a.map(j), u, T.REMOTE);
|
|
634
644
|
}, v = (a, u) => {
|
|
635
645
|
a ? i.setSelected(a, u) : i.clear();
|
|
636
646
|
}, L = (a) => {
|
|
@@ -641,45 +651,45 @@ const le = 250, Be = (e) => {
|
|
|
641
651
|
return o.updateAnnotation(u), s;
|
|
642
652
|
} else {
|
|
643
653
|
const u = o.getAnnotation(a.id);
|
|
644
|
-
return o.updateAnnotation(a), u;
|
|
654
|
+
return o.updateAnnotation(j(a)), u;
|
|
645
655
|
}
|
|
646
656
|
};
|
|
647
657
|
return {
|
|
648
658
|
addAnnotation: f,
|
|
649
|
-
cancelSelected:
|
|
659
|
+
cancelSelected: y,
|
|
650
660
|
canRedo: n.canRedo,
|
|
651
661
|
canUndo: n.canUndo,
|
|
652
662
|
clearAnnotations: b,
|
|
653
|
-
getAnnotationById:
|
|
654
|
-
getAnnotations:
|
|
663
|
+
getAnnotationById: w,
|
|
664
|
+
getAnnotations: g,
|
|
655
665
|
getSelected: S,
|
|
656
666
|
loadAnnotations: r,
|
|
657
667
|
redo: n.redo,
|
|
658
668
|
removeAnnotation: E,
|
|
659
|
-
setAnnotations:
|
|
669
|
+
setAnnotations: A,
|
|
660
670
|
setSelected: v,
|
|
661
671
|
setUserSelectAction: L,
|
|
662
672
|
undo: n.undo,
|
|
663
673
|
updateAnnotation: O
|
|
664
674
|
};
|
|
665
|
-
},
|
|
666
|
-
let
|
|
675
|
+
}, pe = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
|
|
676
|
+
let ge = (e) => crypto.getRandomValues(new Uint8Array(e)), he = (e, n, t) => {
|
|
667
677
|
let o = (2 << Math.log(e.length - 1) / Math.LN2) - 1, i = -~(1.6 * o * n / e.length);
|
|
668
678
|
return (f = n) => {
|
|
669
|
-
let
|
|
679
|
+
let y = "";
|
|
670
680
|
for (; ; ) {
|
|
671
|
-
let b = t(i),
|
|
672
|
-
for (;
|
|
673
|
-
if (
|
|
681
|
+
let b = t(i), w = i;
|
|
682
|
+
for (; w--; )
|
|
683
|
+
if (y += e[b[w] & o] || "", y.length === f) return y;
|
|
674
684
|
}
|
|
675
685
|
};
|
|
676
|
-
},
|
|
686
|
+
}, me = (e, n = 21) => he(e, n, ge), Ae = (e = 21) => {
|
|
677
687
|
let n = "", t = crypto.getRandomValues(new Uint8Array(e));
|
|
678
688
|
for (; e--; )
|
|
679
|
-
n +=
|
|
689
|
+
n += pe[t[e] & 63];
|
|
680
690
|
return n;
|
|
681
691
|
};
|
|
682
|
-
const
|
|
692
|
+
const $e = () => ({ isGuest: !0, id: me("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_", 20)() }), be = (e) => {
|
|
683
693
|
const n = JSON.stringify(e);
|
|
684
694
|
let t = 0;
|
|
685
695
|
for (let o = 0, i = n.length; o < i; o++) {
|
|
@@ -687,28 +697,28 @@ const ze = () => ({ isGuest: !0, id: ge("1234567890abcdefghijklmnopqrstuvwxyzABC
|
|
|
687
697
|
t = (t << 5) - t + f, t |= 0;
|
|
688
698
|
}
|
|
689
699
|
return `${t}`;
|
|
690
|
-
},
|
|
691
|
-
const { id: o, type: i, purpose: f, value:
|
|
700
|
+
}, ve = (e) => e ? typeof e == "object" ? { ...e } : e : void 0, Ve = (e, n) => (Array.isArray(e) ? e : [e]).map((t) => {
|
|
701
|
+
const { id: o, type: i, purpose: f, value: y, created: b, modified: w, creator: g, ...S } = t;
|
|
692
702
|
return {
|
|
693
|
-
id: o || `temp-${
|
|
703
|
+
id: o || `temp-${be(t)}`,
|
|
694
704
|
annotation: n,
|
|
695
705
|
type: i,
|
|
696
706
|
purpose: f,
|
|
697
|
-
value:
|
|
698
|
-
creator:
|
|
707
|
+
value: y,
|
|
708
|
+
creator: ve(g),
|
|
699
709
|
created: b ? new Date(b) : void 0,
|
|
700
|
-
updated:
|
|
710
|
+
updated: w ? new Date(w) : void 0,
|
|
701
711
|
...S
|
|
702
712
|
};
|
|
703
|
-
}),
|
|
713
|
+
}), _e = (e) => e.map((n) => {
|
|
704
714
|
var b;
|
|
705
|
-
const { annotation: t, created: o, updated: i, ...f } = n,
|
|
715
|
+
const { annotation: t, created: o, updated: i, ...f } = n, y = {
|
|
706
716
|
...f,
|
|
707
717
|
created: o == null ? void 0 : o.toISOString(),
|
|
708
718
|
modified: i == null ? void 0 : i.toISOString()
|
|
709
719
|
};
|
|
710
|
-
return (b =
|
|
711
|
-
}),
|
|
720
|
+
return (b = y.id) != null && b.startsWith("temp-") && delete y.id, y;
|
|
721
|
+
}), Ee = [
|
|
712
722
|
"#ff7c00",
|
|
713
723
|
// orange
|
|
714
724
|
"#1ac938",
|
|
@@ -727,14 +737,14 @@ const ze = () => ({ isGuest: !0, id: ge("1234567890abcdefghijklmnopqrstuvwxyzABC
|
|
|
727
737
|
// cyan
|
|
728
738
|
"#023eff"
|
|
729
739
|
// blue
|
|
730
|
-
],
|
|
731
|
-
const e = [...
|
|
740
|
+
], we = () => {
|
|
741
|
+
const e = [...Ee];
|
|
732
742
|
return { assignRandomColor: () => {
|
|
733
743
|
const o = Math.floor(Math.random() * e.length), i = e[o];
|
|
734
744
|
return e.splice(o, 1), i;
|
|
735
745
|
}, releaseColor: (o) => e.push(o) };
|
|
736
746
|
}, ye = () => {
|
|
737
|
-
const e =
|
|
747
|
+
const e = we();
|
|
738
748
|
return { addUser: (o, i) => {
|
|
739
749
|
const f = e.assignRandomColor();
|
|
740
750
|
return {
|
|
@@ -743,17 +753,17 @@ const ze = () => ({ isGuest: !0, id: ge("1234567890abcdefghijklmnopqrstuvwxyzABC
|
|
|
743
753
|
color: f
|
|
744
754
|
};
|
|
745
755
|
}, removeUser: (o) => e.releaseColor(o.appearance.color) };
|
|
746
|
-
},
|
|
747
|
-
const n =
|
|
756
|
+
}, Ce = (e, n) => e.every((t) => e.includes(t)) && n.every((t) => e.includes(t)), Ye = Ae(), je = (e = ye()) => {
|
|
757
|
+
const n = Q(), t = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), i = (r, E) => {
|
|
748
758
|
if (t.has(r)) {
|
|
749
759
|
console.warn("Attempt to add user that is already present", r, E);
|
|
750
760
|
return;
|
|
751
761
|
}
|
|
752
|
-
const
|
|
762
|
+
const A = e.addUser(r, E);
|
|
753
763
|
t.set(r, {
|
|
754
764
|
...E,
|
|
755
765
|
presenceKey: r,
|
|
756
|
-
appearance:
|
|
766
|
+
appearance: A
|
|
757
767
|
});
|
|
758
768
|
}, f = (r) => {
|
|
759
769
|
const E = t.get(r);
|
|
@@ -762,63 +772,64 @@ const ze = () => ({ isGuest: !0, id: ge("1234567890abcdefghijklmnopqrstuvwxyzABC
|
|
|
762
772
|
return;
|
|
763
773
|
}
|
|
764
774
|
e.removeUser(E), t.delete(r);
|
|
765
|
-
},
|
|
766
|
-
const E = new Set(r.map((L) => L.presenceKey)),
|
|
767
|
-
|
|
775
|
+
}, y = (r) => {
|
|
776
|
+
const E = new Set(r.map((L) => L.presenceKey)), A = r.filter(({ presenceKey: L }) => !t.has(L)), v = Array.from(t.values()).filter((L) => !E.has(L.presenceKey));
|
|
777
|
+
A.forEach(({ presenceKey: L, user: O }) => i(L, O)), v.forEach((L) => {
|
|
768
778
|
const { presenceKey: O } = L;
|
|
769
779
|
o.has(O) && n.emit("selectionChange", L, null), f(O);
|
|
770
|
-
}), (
|
|
780
|
+
}), (A.length > 0 || v.length > 0) && n.emit("presence", g());
|
|
771
781
|
}, b = (r, E) => {
|
|
772
|
-
const
|
|
773
|
-
if (!
|
|
782
|
+
const A = t.get(r);
|
|
783
|
+
if (!A) {
|
|
774
784
|
console.warn("Activity notification from user that is not present");
|
|
775
785
|
return;
|
|
776
786
|
}
|
|
777
787
|
const v = o.get(r);
|
|
778
|
-
(!v || !
|
|
779
|
-
},
|
|
780
|
-
const
|
|
781
|
-
if (!
|
|
788
|
+
(!v || !Ce(v, E)) && (o.set(r, E), n.emit("selectionChange", A, E));
|
|
789
|
+
}, w = (r, E) => {
|
|
790
|
+
const A = t.get(r);
|
|
791
|
+
if (!A) {
|
|
782
792
|
console.warn("Selection change for user that is not present", r);
|
|
783
793
|
return;
|
|
784
794
|
}
|
|
785
|
-
E ? o.set(r, E) : o.delete(r), n.emit("selectionChange",
|
|
786
|
-
},
|
|
795
|
+
E ? o.set(r, E) : o.delete(r), n.emit("selectionChange", A, E);
|
|
796
|
+
}, g = () => [...Array.from(t.values())];
|
|
787
797
|
return {
|
|
788
|
-
getPresentUsers:
|
|
798
|
+
getPresentUsers: g,
|
|
789
799
|
notifyActivity: b,
|
|
790
800
|
on: (r, E) => n.on(r, E),
|
|
791
|
-
syncUsers:
|
|
792
|
-
updateSelection:
|
|
801
|
+
syncUsers: y,
|
|
802
|
+
updateSelection: w
|
|
793
803
|
};
|
|
794
804
|
};
|
|
795
805
|
export {
|
|
796
|
-
|
|
806
|
+
ae as Ignore,
|
|
797
807
|
T as Origin,
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
808
|
+
Ye as PRESENCE_KEY,
|
|
809
|
+
Z as UserSelectAction,
|
|
810
|
+
$e as createAnonymousGuest,
|
|
811
|
+
ze as createBaseAnnotator,
|
|
812
|
+
De as createBody,
|
|
803
813
|
ye as createDefaultAppearanceProvider,
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
814
|
+
Ue as createHoverState,
|
|
815
|
+
ke as createLifecycleObserver,
|
|
816
|
+
je as createPresenceState,
|
|
817
|
+
Te as createSelectionState,
|
|
818
|
+
Re as createStore,
|
|
819
|
+
Ie as createUndoStack,
|
|
820
|
+
xe as createViewportState,
|
|
821
|
+
we as defaultColorProvider,
|
|
822
|
+
J as diffAnnotations,
|
|
823
|
+
Oe as getContributors,
|
|
824
|
+
ce as mergeChanges,
|
|
825
|
+
G as onUserSelect,
|
|
826
|
+
fe as parseAll,
|
|
827
|
+
Ve as parseW3CBodies,
|
|
828
|
+
ve as parseW3CUser,
|
|
829
|
+
j as reviveDates,
|
|
830
|
+
Ne as serializeAll,
|
|
831
|
+
_e as serializeW3CBodies,
|
|
832
|
+
re as shouldNotify,
|
|
833
|
+
Be as toSvelteStore
|
|
823
834
|
};
|
|
824
835
|
//# sourceMappingURL=annotorious-core.es.js.map
|