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

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 (94) hide show
  1. package/dist/annotorious-core.es.js +784 -0
  2. package/dist/annotorious-core.es.js.map +1 -0
  3. package/{src/index.ts → dist/index.d.ts} +1 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/lifecycle/Lifecycle.d.ts +11 -0
  6. package/dist/lifecycle/Lifecycle.d.ts.map +1 -0
  7. package/dist/lifecycle/LifecycleEvents.d.ts +13 -0
  8. package/dist/lifecycle/LifecycleEvents.d.ts.map +1 -0
  9. package/dist/lifecycle/index.d.ts +3 -0
  10. package/dist/lifecycle/index.d.ts.map +1 -0
  11. package/dist/model/Annotation.d.ts +34 -0
  12. package/dist/model/Annotation.d.ts.map +1 -0
  13. package/dist/model/AnnotationState.d.ts +8 -0
  14. package/dist/model/AnnotationState.d.ts.map +1 -0
  15. package/dist/model/Annotator.d.ts +65 -0
  16. package/dist/model/Annotator.d.ts.map +1 -0
  17. package/dist/model/DrawingStyle.d.ts +17 -0
  18. package/dist/model/DrawingStyle.d.ts.map +1 -0
  19. package/dist/model/Filter.d.ts +4 -0
  20. package/dist/model/Filter.d.ts.map +1 -0
  21. package/dist/model/FormatAdapter.d.ts +16 -0
  22. package/dist/model/FormatAdapter.d.ts.map +1 -0
  23. package/dist/model/User.d.ts +11 -0
  24. package/dist/model/User.d.ts.map +1 -0
  25. package/dist/model/W3CAnnotation.d.ts +43 -0
  26. package/dist/model/W3CAnnotation.d.ts.map +1 -0
  27. package/{src/model/index.ts → dist/model/index.d.ts} +3 -1
  28. package/dist/model/index.d.ts.map +1 -0
  29. package/dist/presence/Appearance.d.ts +6 -0
  30. package/dist/presence/Appearance.d.ts.map +1 -0
  31. package/dist/presence/AppearanceProvider.d.ts +17 -0
  32. package/dist/presence/AppearanceProvider.d.ts.map +1 -0
  33. package/dist/presence/ColorPalette.d.ts +3 -0
  34. package/dist/presence/ColorPalette.d.ts.map +1 -0
  35. package/dist/presence/PresenceEvents.d.ts +7 -0
  36. package/dist/presence/PresenceEvents.d.ts.map +1 -0
  37. package/dist/presence/PresenceProvider.d.ts +6 -0
  38. package/dist/presence/PresenceProvider.d.ts.map +1 -0
  39. package/dist/presence/PresenceState.d.ts +19 -0
  40. package/dist/presence/PresenceState.d.ts.map +1 -0
  41. package/dist/presence/PresentUser.d.ts +8 -0
  42. package/dist/presence/PresentUser.d.ts.map +1 -0
  43. package/{src/presence/index.ts → dist/presence/index.d.ts} +2 -1
  44. package/dist/presence/index.d.ts.map +1 -0
  45. package/dist/state/Hover.d.ts +10 -0
  46. package/dist/state/Hover.d.ts.map +1 -0
  47. package/dist/state/Selection.d.ts +31 -0
  48. package/dist/state/Selection.d.ts.map +1 -0
  49. package/dist/state/Store.d.ts +35 -0
  50. package/dist/state/Store.d.ts.map +1 -0
  51. package/dist/state/StoreObserver.d.ts +58 -0
  52. package/dist/state/StoreObserver.d.ts.map +1 -0
  53. package/dist/state/SvelteStore.d.ts +23 -0
  54. package/dist/state/SvelteStore.d.ts.map +1 -0
  55. package/dist/state/UndoStack.d.ts +19 -0
  56. package/dist/state/UndoStack.d.ts.map +1 -0
  57. package/dist/state/Viewport.d.ts +6 -0
  58. package/dist/state/Viewport.d.ts.map +1 -0
  59. package/{src/state/index.ts → dist/state/index.d.ts} +2 -1
  60. package/dist/state/index.d.ts.map +1 -0
  61. package/dist/utils/annotationUtils.d.ts +12 -0
  62. package/dist/utils/annotationUtils.d.ts.map +1 -0
  63. package/dist/utils/diffAnnotations.d.ts +5 -0
  64. package/dist/utils/diffAnnotations.d.ts.map +1 -0
  65. package/{src/utils/index.ts → dist/utils/index.d.ts} +1 -1
  66. package/dist/utils/index.d.ts.map +1 -0
  67. package/package.json +20 -17
  68. package/src/lifecycle/Lifecycle.ts +0 -197
  69. package/src/lifecycle/LifecycleEvents.ts +0 -21
  70. package/src/lifecycle/index.ts +0 -2
  71. package/src/model/Annotation.ts +0 -73
  72. package/src/model/Annotator.ts +0 -161
  73. package/src/model/DrawingStyle.ts +0 -19
  74. package/src/model/Filter.ts +0 -3
  75. package/src/model/FormatAdapter.ts +0 -36
  76. package/src/model/User.ts +0 -19
  77. package/src/model/W3CAnnotation.ts +0 -118
  78. package/src/presence/Appearance.ts +0 -9
  79. package/src/presence/AppearanceProvider.ts +0 -53
  80. package/src/presence/ColorPalette.ts +0 -14
  81. package/src/presence/PresenceEvents.ts +0 -9
  82. package/src/presence/PresenceProvider.ts +0 -7
  83. package/src/presence/PresenceState.ts +0 -145
  84. package/src/presence/PresentUser.ts +0 -10
  85. package/src/state/Hover.ts +0 -34
  86. package/src/state/Selection.ts +0 -113
  87. package/src/state/Store.ts +0 -344
  88. package/src/state/StoreObserver.ts +0 -194
  89. package/src/state/SvelteStore.ts +0 -54
  90. package/src/state/UndoStack.ts +0 -112
  91. package/src/state/Viewport.ts +0 -14
  92. package/src/utils/annotationUtils.ts +0 -33
  93. package/src/utils/diffAnnotations.ts +0 -39
  94. package/src/vite-env.d.ts +0 -1
@@ -0,0 +1,784 @@
1
+ var M = Object.prototype.hasOwnProperty;
2
+ function B(e, n) {
3
+ var t, o;
4
+ if (e === n) return !0;
5
+ if (e && n && (t = e.constructor) === n.constructor) {
6
+ if (t === Date) return e.getTime() === n.getTime();
7
+ if (t === RegExp) return e.toString() === n.toString();
8
+ if (t === Array) {
9
+ if ((o = e.length) === n.length)
10
+ for (; o-- && B(e[o], n[o]); ) ;
11
+ return o === -1;
12
+ }
13
+ if (!t || typeof e == "object") {
14
+ o = 0;
15
+ for (t in e)
16
+ if (M.call(e, t) && ++o && !M.call(n, t) || !(t in n) || !B(e[t], n[t])) return !1;
17
+ return Object.keys(n).length === o;
18
+ }
19
+ }
20
+ return e !== e && n !== n;
21
+ }
22
+ function z() {
23
+ }
24
+ function H(e, n) {
25
+ return e != e ? n == n : e !== n || e && typeof e == "object" || typeof e == "function";
26
+ }
27
+ const k = [];
28
+ function Y(e, n = z) {
29
+ let t;
30
+ const o = /* @__PURE__ */ new Set();
31
+ function i(b) {
32
+ if (H(e, b) && (e = b, t)) {
33
+ const y = !k.length;
34
+ for (const u of o)
35
+ u[1](), k.push(u, e);
36
+ if (y) {
37
+ for (let u = 0; u < k.length; u += 2)
38
+ k[u][0](k[u + 1]);
39
+ k.length = 0;
40
+ }
41
+ }
42
+ }
43
+ function p(b) {
44
+ i(b(e));
45
+ }
46
+ function w(b, y = z) {
47
+ const u = [b, y];
48
+ return o.add(u), o.size === 1 && (t = n(i, p) || z), b(e), () => {
49
+ o.delete(u), o.size === 0 && t && (t(), t = null);
50
+ };
51
+ }
52
+ return { set: i, update: p, subscribe: w };
53
+ }
54
+ const Ce = (e) => {
55
+ const { subscribe: n, set: t } = Y();
56
+ let o;
57
+ return n((i) => o = i), e.observe(({ changes: i }) => {
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);
61
+ w && t(w.newValue.id);
62
+ }
63
+ }), {
64
+ get current() {
65
+ return o;
66
+ },
67
+ subscribe: n,
68
+ set: t
69
+ };
70
+ };
71
+ var F = /* @__PURE__ */ ((e) => (e.EDIT = "EDIT", e.SELECT = "SELECT", e.NONE = "NONE", e))(F || {});
72
+ const V = { selected: [] }, Le = (e, n = "EDIT") => {
73
+ const { subscribe: t, set: o } = Y(V);
74
+ let i = V;
75
+ t((s) => i = s);
76
+ const p = () => o(V), w = () => {
77
+ var s;
78
+ return ((s = i.selected) == null ? void 0 : s.length) === 0;
79
+ }, b = (s) => {
80
+ if (i.selected.length === 0)
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);
93
+ o({
94
+ selected: v.map((S) => {
95
+ const E = h === void 0 ? P(S, n) === "EDIT" : h;
96
+ return { id: S.id, editable: E };
97
+ })
98
+ }), v.length !== L.length && console.warn("Invalid selection", s);
99
+ }, U = (s) => {
100
+ if (i.selected.length === 0)
101
+ 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;
110
+ },
111
+ get pointerEvent() {
112
+ return i ? i.pointerEvent : null;
113
+ },
114
+ isEmpty: w,
115
+ isSelected: b,
116
+ setSelected: u,
117
+ subscribe: t
118
+ };
119
+ }, P = (e, n) => typeof n == "function" ? n(e) || "EDIT" : n || "EDIT";
120
+ var D = [];
121
+ for (var _ = 0; _ < 256; ++_)
122
+ D.push((_ + 256).toString(16).slice(1));
123
+ function J(e, n = 0) {
124
+ return (D[e[n + 0]] + D[e[n + 1]] + D[e[n + 2]] + D[e[n + 3]] + "-" + D[e[n + 4]] + D[e[n + 5]] + "-" + D[e[n + 6]] + D[e[n + 7]] + "-" + D[e[n + 8]] + D[e[n + 9]] + "-" + D[e[n + 10]] + D[e[n + 11]] + D[e[n + 12]] + D[e[n + 13]] + D[e[n + 14]] + D[e[n + 15]]).toLowerCase();
125
+ }
126
+ var $, Q = new Uint8Array(16);
127
+ function X() {
128
+ if (!$ && ($ = typeof crypto < "u" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto), !$))
129
+ throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
130
+ return $(Q);
131
+ }
132
+ var Z = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto);
133
+ const W = {
134
+ randomUUID: Z
135
+ };
136
+ function K(e, n, t) {
137
+ if (W.randomUUID && !n && !e)
138
+ return W.randomUUID();
139
+ e = e || {};
140
+ var o = e.random || (e.rng || X)();
141
+ return o[6] = o[6] & 15 | 64, o[8] = o[8] & 63 | 128, J(o);
142
+ }
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), []);
145
+ return [
146
+ n,
147
+ t,
148
+ ...o
149
+ ].filter((i) => i);
150
+ }, Se = (e, n, t, o) => ({
151
+ id: K(),
152
+ annotation: e.id,
153
+ created: t || /* @__PURE__ */ new Date(),
154
+ creator: o,
155
+ ...n
156
+ }), ee = (e, n) => {
157
+ const t = new Set(e.bodies.map((o) => o.id));
158
+ return n.bodies.filter((o) => !t.has(o.id));
159
+ }, te = (e, n) => {
160
+ const t = new Set(n.bodies.map((o) => o.id));
161
+ return e.bodies.filter((o) => !t.has(o.id));
162
+ }, ne = (e, n) => n.bodies.map((t) => {
163
+ const o = e.bodies.find((i) => i.id === t.id);
164
+ return { newBody: t, oldBody: o && !B(o, t) ? o : void 0 };
165
+ }).filter(({ oldBody: t }) => t).map(({ oldBody: t, newBody: o }) => ({ oldBody: t, newBody: o })), 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);
167
+ return {
168
+ oldValue: e,
169
+ newValue: n,
170
+ bodiesCreated: t.length > 0 ? t : void 0,
171
+ bodiesDeleted: o.length > 0 ? o : void 0,
172
+ bodiesUpdated: i.length > 0 ? i : void 0,
173
+ targetUpdated: oe(e, n) ? { oldTarget: e.target, newTarget: n.target } : void 0
174
+ };
175
+ };
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 || {});
177
+ const ie = (e, n) => {
178
+ var p, w;
179
+ const { changes: t, origin: o } = n;
180
+ if (!(!e.options.origin || e.options.origin === o))
181
+ return !1;
182
+ if (e.options.ignore) {
183
+ const { ignore: b } = e.options, y = (U) => U && U.length > 0;
184
+ 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)
187
+ return !1;
188
+ }
189
+ }
190
+ if (e.options.annotations) {
191
+ 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)
195
+ ]);
196
+ return !!(Array.isArray(e.options.annotations) ? e.options.annotations : [e.options.annotations]).find((u) => b.has(u));
197
+ } else
198
+ return !0;
199
+ }, 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),
202
+ ...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);
212
+ } else
213
+ return s;
214
+ }),
215
+ ...(n.updated || []).filter(({ oldValue: s }) => !b.has(s.id))
216
+ ];
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,
225
+ changes: {
226
+ created: r.created || [],
227
+ updated: r.updated || [],
228
+ deleted: r.deleted || []
229
+ },
230
+ state: [...e.values()]
231
+ };
232
+ t.forEach((f) => {
233
+ ie(f, c) && f.onChange(c);
234
+ });
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);
241
+ 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;
244
+ } 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) => {
251
+ const T = b(C);
252
+ return T ? [...f, T] : f;
253
+ }, []);
254
+ c.length > 0 && p(r, { updated: c });
255
+ }, U = (d, r = O.LOCAL) => {
256
+ const c = e.get(d.annotation);
257
+ if (c) {
258
+ const f = {
259
+ ...c,
260
+ bodies: [...c.bodies, d]
261
+ };
262
+ e.set(c.id, f), n.set(d.id, f.id), p(r, { updated: [{
263
+ oldValue: c,
264
+ newValue: f,
265
+ bodiesCreated: [d]
266
+ }] });
267
+ } 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) => {
276
+ e.set(C.id, C), C.bodies.forEach((T) => n.set(T.id, C.id));
277
+ }), p(c, { created: d, deleted: f });
278
+ } else {
279
+ const f = d.reduce((C, T) => {
280
+ const x = e.get(T.id);
281
+ return x ? [...C, x] : C;
282
+ }, []);
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) => {
286
+ e.set(C.id, C), C.bodies.forEach((T) => n.set(T.id, C.id));
287
+ }), p(c, { created: d });
288
+ }
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) => {
299
+ const T = v(C);
300
+ return T ? [...f, T] : f;
301
+ }, []);
302
+ c.length > 0 && p(r, { deleted: c });
303
+ }, l = (d) => {
304
+ const r = e.get(d.annotation);
305
+ if (r) {
306
+ const c = r.bodies.find((f) => f.id === d.id);
307
+ if (c) {
308
+ n.delete(c.id);
309
+ const f = {
310
+ ...r,
311
+ bodies: r.bodies.filter((T) => T.id !== d.id)
312
+ };
313
+ return e.set(r.id, f), {
314
+ oldValue: r,
315
+ newValue: f,
316
+ bodiesDeleted: [c]
317
+ };
318
+ } else
319
+ console.warn(`Attempt to delete missing body ${d.id} from annotation ${d.annotation}`);
320
+ } 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`);
338
+ } else
339
+ console.warn(`Attempt to retrieve missing body: ${d}`);
340
+ }, R = (d, r) => {
341
+ if (d.annotation !== r.annotation)
342
+ 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)
348
+ };
349
+ return e.set(c.id, C), f.id !== r.id && (n.delete(f.id), n.set(r.id, C.id)), {
350
+ oldValue: c,
351
+ newValue: C,
352
+ bodiesUpdated: [{ oldBody: f, newBody: r }]
353
+ };
354
+ } 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
+ target: {
368
+ ...r.target,
369
+ ...d
370
+ }
371
+ };
372
+ return e.set(r.id, c), {
373
+ oldValue: r,
374
+ newValue: c,
375
+ targetUpdated: {
376
+ oldTarget: r.target,
377
+ newTarget: d
378
+ }
379
+ };
380
+ } else
381
+ console.warn(`Attempt to update target on missing annotation: ${d.annotation}`);
382
+ };
383
+ return {
384
+ 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 });
395
+ },
396
+ clear: h,
397
+ deleteAnnotation: S,
398
+ deleteBody: g,
399
+ getAnnotation: m,
400
+ getBody: A,
401
+ observe: o,
402
+ unobserve: i,
403
+ updateAnnotation: y,
404
+ updateBody: N,
405
+ updateTarget: (d, r = O.LOCAL) => {
406
+ const c = j(d);
407
+ c && p(r, { updated: [c] });
408
+ }
409
+ };
410
+ }, Te = (e) => ({
411
+ ...e,
412
+ subscribe: (t) => {
413
+ const o = (i) => t(i.state);
414
+ return e.observe(o), t(e.all()), () => e.unobserve(o);
415
+ }
416
+ });
417
+ let G = () => ({
418
+ emit(e, ...n) {
419
+ for (let t = 0, o = this.events[e] || [], i = o.length; t < i; t++)
420
+ o[t](...n);
421
+ },
422
+ events: {},
423
+ on(e, n) {
424
+ var t;
425
+ return ((t = this.events)[e] || (t[e] = [])).push(n), () => {
426
+ var o;
427
+ this.events[e] = (o = this.events[e]) == null ? void 0 : o.filter((i) => n !== i);
428
+ };
429
+ }
430
+ });
431
+ const re = 250, De = (e) => {
432
+ 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;
439
+ else {
440
+ const R = t.length - 1;
441
+ t[R] = de(t[R], m);
442
+ }
443
+ p = A;
444
+ }
445
+ i = !1;
446
+ };
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);
449
+ return {
450
+ canRedo: () => t.length - 1 > o,
451
+ canUndo: () => o > -1,
452
+ destroy: () => e.unobserve(w),
453
+ on: (a, m) => n.on(a, m),
454
+ redo: () => {
455
+ 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;
459
+ }
460
+ },
461
+ undo: () => {
462
+ 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;
466
+ }
467
+ }
468
+ };
469
+ }, Re = () => {
470
+ const { subscribe: e, set: n } = Y([]);
471
+ return {
472
+ subscribe: e,
473
+ set: n
474
+ };
475
+ }, 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);
485
+ }
486
+ }, v = (l, g, a) => {
487
+ y.has(l) && setTimeout(() => {
488
+ y.get(l).forEach((m) => {
489
+ 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);
492
+ } else
493
+ m(g, a);
494
+ });
495
+ }, 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;
504
+ });
505
+ };
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 = [];
515
+ 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);
519
+ R && !B(R, A) && v("updateAnnotation", R, A);
520
+ }), u = [
521
+ // Remove annotations that were deselected
522
+ ...u.filter((A) => a.has(A.id)),
523
+ // Add editable annotations that were selected
524
+ ...l.filter(({ id: A }) => !g.has(A)).map(({ id: A }) => i.getAnnotation(A))
525
+ ];
526
+ }
527
+ v("selectionChanged", u);
528
+ }
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) => [
535
+ ...A.bodiesCreated || [],
536
+ ...A.bodiesDeleted || [],
537
+ ...A.bodiesUpdated || []
538
+ ].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);
541
+ });
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;
548
+ }));
549
+ }
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));
554
+ };
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 ? {
559
+ parsed: t.parsed,
560
+ failed: [...t.failed, o]
561
+ } : i ? {
562
+ parsed: [...t.parsed, i],
563
+ failed: t.failed
564
+ } : {
565
+ ...t
566
+ };
567
+ }, { parsed: [], failed: [] }), xe = (e, n, t) => {
568
+ const { store: o, selection: i } = e, p = (E) => {
569
+ if (t) {
570
+ const { parsed: l, error: g } = t.parse(E);
571
+ l ? o.addAnnotation(l, O.REMOTE) : console.error(g);
572
+ } 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;
586
+ } else {
587
+ const l = t ? t.parse(E).parsed : E;
588
+ if (l)
589
+ return o.deleteAnnotation(l), E;
590
+ }
591
+ }, L = (E, l = !0) => {
592
+ 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);
595
+ } else
596
+ o.bulkAddAnnotation(E, l, O.REMOTE);
597
+ }, v = (E, l) => {
598
+ E ? i.setSelected(E, l) : i.clear();
599
+ }, S = (E) => {
600
+ if (t) {
601
+ const l = t.parse(E).parsed, g = t.serialize(o.getAnnotation(l.id));
602
+ return o.updateAnnotation(l), g;
603
+ } else {
604
+ const l = o.getAnnotation(E.id);
605
+ return o.updateAnnotation(E), l;
606
+ }
607
+ };
608
+ return {
609
+ addAnnotation: p,
610
+ cancelSelected: w,
611
+ canRedo: n.canRedo,
612
+ canUndo: n.canUndo,
613
+ clearAnnotations: b,
614
+ getAnnotationById: y,
615
+ getAnnotations: u,
616
+ getSelected: U,
617
+ loadAnnotations: s,
618
+ redo: n.redo,
619
+ removeAnnotation: h,
620
+ setAnnotations: L,
621
+ setSelected: v,
622
+ undo: n.undo,
623
+ updateAnnotation: S
624
+ };
625
+ }, le = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
626
+ 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) => {
629
+ let w = "";
630
+ for (; ; ) {
631
+ let b = t(i), y = i;
632
+ for (; y--; )
633
+ if (w += e[b[y] & o] || "", w.length === p) return w;
634
+ }
635
+ };
636
+ }, pe = (e, n = 21) => fe(e, n, ue), he = (e = 21) => {
637
+ let n = "", t = crypto.getRandomValues(new Uint8Array(e));
638
+ for (; e--; )
639
+ n += le[t[e] & 63];
640
+ return n;
641
+ };
642
+ const ke = () => ({ isGuest: !0, id: pe("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_", 20)() }), ge = (e) => {
643
+ const n = JSON.stringify(e);
644
+ 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;
648
+ }
649
+ return `${t}`;
650
+ }, 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;
652
+ return {
653
+ id: o || `temp-${ge(t)}`,
654
+ annotation: n,
655
+ type: i,
656
+ purpose: p,
657
+ value: w,
658
+ creator: me(u),
659
+ created: b ? new Date(b) : void 0,
660
+ updated: y ? new Date(y) : void 0,
661
+ ...U
662
+ };
663
+ }), $e = (e) => e.map((n) => {
664
+ var b;
665
+ const { annotation: t, created: o, updated: i, ...p } = n, w = {
666
+ ...p,
667
+ created: o == null ? void 0 : o.toISOString(),
668
+ modified: i == null ? void 0 : i.toISOString()
669
+ };
670
+ return (b = w.id) != null && b.startsWith("temp-") && delete w.id, w;
671
+ }), Ae = [
672
+ "#ff7c00",
673
+ // orange
674
+ "#1ac938",
675
+ // green
676
+ "#e8000b",
677
+ // red
678
+ "#8b2be2",
679
+ // purple
680
+ "#9f4800",
681
+ // brown
682
+ "#f14cc1",
683
+ // pink
684
+ "#ffc400",
685
+ // khaki
686
+ "#00d7ff",
687
+ // cyan
688
+ "#023eff"
689
+ // blue
690
+ ], be = () => {
691
+ const e = [...Ae];
692
+ return { assignRandomColor: () => {
693
+ const o = Math.floor(Math.random() * e.length), i = e[o];
694
+ return e.splice(o, 1), i;
695
+ }, releaseColor: (o) => e.push(o) };
696
+ }, ve = () => {
697
+ const e = be();
698
+ return { addUser: (o, i) => {
699
+ const p = e.assignRandomColor();
700
+ return {
701
+ label: i.name || i.id,
702
+ avatar: i.avatar,
703
+ color: p
704
+ };
705
+ }, removeUser: (o) => e.releaseColor(o.appearance.color) };
706
+ }, 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);
710
+ return;
711
+ }
712
+ const L = e.addUser(s, h);
713
+ t.set(s, {
714
+ ...h,
715
+ presenceKey: s,
716
+ appearance: L
717
+ });
718
+ }, p = (s) => {
719
+ const h = t.get(s);
720
+ if (!h) {
721
+ console.warn("Attempt to remove user that is not present", s);
722
+ return;
723
+ }
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) {
734
+ console.warn("Activity notification from user that is not present");
735
+ return;
736
+ }
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);
743
+ return;
744
+ }
745
+ h ? o.set(s, h) : o.delete(s), n.emit("selectionChange", L, h);
746
+ }, u = () => [...Array.from(t.values())];
747
+ return {
748
+ getPresentUsers: u,
749
+ notifyActivity: b,
750
+ on: (s, h) => n.on(s, h),
751
+ syncUsers: w,
752
+ updateSelection: y
753
+ };
754
+ };
755
+ export {
756
+ se as Ignore,
757
+ O as Origin,
758
+ ze as PRESENCE_KEY,
759
+ F as PointerSelectAction,
760
+ ke as createAnonymousGuest,
761
+ xe as createBaseAnnotator,
762
+ Se as createBody,
763
+ ve as createDefaultAppearenceProvider,
764
+ Ce as createHoverState,
765
+ Be as createLifecycleObserver,
766
+ Ve as createPresenceState,
767
+ Le as createSelectionState,
768
+ Oe as createStore,
769
+ De as createUndoStack,
770
+ Re as createViewportState,
771
+ be as defaultColorProvider,
772
+ q as diffAnnotations,
773
+ Ue as getContributors,
774
+ de as mergeChanges,
775
+ P as onPointerSelect,
776
+ ce as parseAll,
777
+ Ne as parseW3CBodies,
778
+ me as parseW3CUser,
779
+ Ie as serializeAll,
780
+ $e as serializeW3CBodies,
781
+ ie as shouldNotify,
782
+ Te as toSvelteStore
783
+ };
784
+ //# sourceMappingURL=annotorious-core.es.js.map