@annotorious/core 3.0.0-rc.9 → 3.0.1

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