@annotorious/core 3.0.0-rc.30 → 3.0.0-rc.32

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