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

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