@annotorious/core 3.0.0-rc.1 → 3.0.0-rc.11

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 (89) hide show
  1. package/dist/annotorious-core.es.js +767 -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 +10 -0
  6. package/dist/lifecycle/Lifecycle.d.ts.map +1 -0
  7. package/dist/lifecycle/LifecycleEvents.d.ts +12 -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 +32 -0
  12. package/dist/model/Annotation.d.ts.map +1 -0
  13. package/dist/model/Annotator.d.ts +63 -0
  14. package/dist/model/Annotator.d.ts.map +1 -0
  15. package/{src/model/DrawingStyle.ts → dist/model/DrawingStyle.d.ts} +7 -14
  16. package/dist/model/DrawingStyle.d.ts.map +1 -0
  17. package/dist/model/Filter.d.ts +3 -0
  18. package/dist/model/Filter.d.ts.map +1 -0
  19. package/dist/model/FormatAdapter.d.ts +15 -0
  20. package/dist/model/FormatAdapter.d.ts.map +1 -0
  21. package/dist/model/User.d.ts +11 -0
  22. package/dist/model/User.d.ts.map +1 -0
  23. package/dist/model/W3CAnnotation.d.ts +38 -0
  24. package/dist/model/W3CAnnotation.d.ts.map +1 -0
  25. package/{src/model/index.ts → dist/model/index.d.ts} +3 -1
  26. package/dist/model/index.d.ts.map +1 -0
  27. package/dist/presence/Appearance.d.ts +6 -0
  28. package/dist/presence/Appearance.d.ts.map +1 -0
  29. package/dist/presence/AppearanceProvider.d.ts +16 -0
  30. package/dist/presence/AppearanceProvider.d.ts.map +1 -0
  31. package/dist/presence/ColorPalette.d.ts +3 -0
  32. package/dist/presence/ColorPalette.d.ts.map +1 -0
  33. package/dist/presence/PresenceEvents.d.ts +6 -0
  34. package/dist/presence/PresenceEvents.d.ts.map +1 -0
  35. package/dist/presence/PresenceProvider.d.ts +5 -0
  36. package/dist/presence/PresenceProvider.d.ts.map +1 -0
  37. package/dist/presence/PresenceState.d.ts +18 -0
  38. package/dist/presence/PresenceState.d.ts.map +1 -0
  39. package/dist/presence/PresentUser.d.ts +7 -0
  40. package/dist/presence/PresentUser.d.ts.map +1 -0
  41. package/{src/presence/index.ts → dist/presence/index.d.ts} +2 -1
  42. package/dist/presence/index.d.ts.map +1 -0
  43. package/dist/state/Hover.d.ts +34 -0
  44. package/dist/state/Hover.d.ts.map +1 -0
  45. package/dist/state/Selection.d.ts +55 -0
  46. package/dist/state/Selection.d.ts.map +1 -0
  47. package/dist/state/Store.d.ts +30 -0
  48. package/dist/state/Store.d.ts.map +1 -0
  49. package/dist/state/StoreObserver.d.ts +57 -0
  50. package/dist/state/StoreObserver.d.ts.map +1 -0
  51. package/dist/state/SvelteStore.d.ts +48 -0
  52. package/dist/state/SvelteStore.d.ts.map +1 -0
  53. package/dist/state/UndoStack.d.ts +44 -0
  54. package/dist/state/UndoStack.d.ts.map +1 -0
  55. package/dist/state/Viewport.d.ts +6 -0
  56. package/dist/state/Viewport.d.ts.map +1 -0
  57. package/{src/state/index.ts → dist/state/index.d.ts} +3 -1
  58. package/dist/state/index.d.ts.map +1 -0
  59. package/dist/utils/annotationUtils.d.ts +11 -0
  60. package/dist/utils/annotationUtils.d.ts.map +1 -0
  61. package/dist/utils/diffAnnotations.d.ts +4 -0
  62. package/dist/utils/diffAnnotations.d.ts.map +1 -0
  63. package/{src/utils/index.ts → dist/utils/index.d.ts} +1 -1
  64. package/dist/utils/index.d.ts.map +1 -0
  65. package/package.json +6 -5
  66. package/src/lifecycle/Lifecycle.ts +0 -197
  67. package/src/lifecycle/LifecycleEvents.ts +0 -21
  68. package/src/lifecycle/index.ts +0 -2
  69. package/src/model/Annotation.ts +0 -57
  70. package/src/model/Annotator.ts +0 -151
  71. package/src/model/FormatAdapter.ts +0 -36
  72. package/src/model/User.ts +0 -19
  73. package/src/model/W3CAnnotation.ts +0 -118
  74. package/src/presence/Appearance.ts +0 -9
  75. package/src/presence/AppearanceProvider.ts +0 -53
  76. package/src/presence/ColorPalette.ts +0 -14
  77. package/src/presence/PresenceEvents.ts +0 -9
  78. package/src/presence/PresenceProvider.ts +0 -7
  79. package/src/presence/PresenceState.ts +0 -145
  80. package/src/presence/PresentUser.ts +0 -10
  81. package/src/state/Hover.ts +0 -34
  82. package/src/state/Selection.ts +0 -113
  83. package/src/state/Store.ts +0 -327
  84. package/src/state/StoreObserver.ts +0 -149
  85. package/src/state/SvelteStore.ts +0 -54
  86. package/src/state/Viewport.ts +0 -14
  87. package/src/utils/annotationUtils.ts +0 -33
  88. package/src/utils/diffAnnotations.ts +0 -33
  89. package/src/vite-env.d.ts +0 -1
@@ -0,0 +1,767 @@
1
+ var Y = Object.prototype.hasOwnProperty;
2
+ function B(e, n) {
3
+ var t, o;
4
+ if (e === n)
5
+ return !0;
6
+ 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();
11
+ if (t === Array) {
12
+ if ((o = e.length) === n.length)
13
+ for (; o-- && B(e[o], n[o]); )
14
+ ;
15
+ return o === -1;
16
+ }
17
+ if (!t || typeof e == "object") {
18
+ o = 0;
19
+ 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;
22
+ return Object.keys(n).length === o;
23
+ }
24
+ }
25
+ return e !== e && n !== n;
26
+ }
27
+ function $() {
28
+ }
29
+ function q(e, n) {
30
+ return e != e ? n == n : e !== n || e && typeof e == "object" || typeof e == "function";
31
+ }
32
+ const k = [];
33
+ function _(e, n = $) {
34
+ let t;
35
+ const o = /* @__PURE__ */ new Set();
36
+ 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;
45
+ }
46
+ }
47
+ }
48
+ function h(b) {
49
+ i(b(e));
50
+ }
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);
55
+ };
56
+ }
57
+ return { set: i, update: h, subscribe: U };
58
+ }
59
+ const Ee = (e) => {
60
+ const { subscribe: n, set: t } = _(null);
61
+ let o = null;
62
+ return n((i) => o = i), e.observe(({ changes: i }) => {
63
+ 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);
67
+ }
68
+ }), {
69
+ get current() {
70
+ return o;
71
+ },
72
+ subscribe: n,
73
+ set: t
74
+ };
75
+ };
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)
86
+ 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)
101
+ 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,
108
+ get selected() {
109
+ return i ? [...i.selected] : null;
110
+ },
111
+ get pointerEvent() {
112
+ return i ? i.pointerEvent : null;
113
+ },
114
+ isEmpty: U,
115
+ isSelected: b,
116
+ setSelected: u,
117
+ subscribe: t
118
+ };
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);
126
+ }
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]];
132
+ }
133
+ const Q = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), j = {
134
+ randomUUID: Q
135
+ };
136
+ function X(e, n, t) {
137
+ if (j.randomUUID && !n && !e)
138
+ return j.randomUUID();
139
+ 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);
148
+ }
149
+ const ve = (e) => {
150
+ const { creator: n, updatedBy: t } = e.target, o = e.bodies.reduce((i, h) => [...i, h.creator, h.updatedBy], []);
151
+ return [
152
+ n,
153
+ t,
154
+ ...o
155
+ ].filter((i) => i);
156
+ }, Ce = (e, n, t, o) => ({
157
+ id: X(),
158
+ annotation: e.id,
159
+ created: t || /* @__PURE__ */ new Date(),
160
+ creator: o,
161
+ ...n
162
+ }), Z = (e, n) => {
163
+ const t = new Set(e.bodies.map((o) => o.id));
164
+ return n.bodies.filter((o) => !t.has(o.id));
165
+ }, K = (e, n) => {
166
+ const t = new Set(n.bodies.map((o) => o.id));
167
+ return e.bodies.filter((o) => !t.has(o.id));
168
+ }, ee = (e, n) => n.bodies.map((t) => {
169
+ 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);
173
+ return {
174
+ oldValue: e,
175
+ newValue: n,
176
+ bodiesCreated: t.length > 0 ? t : void 0,
177
+ bodiesDeleted: o.length > 0 ? o : void 0,
178
+ bodiesUpdated: i.length > 0 ? i : void 0,
179
+ targetUpdated: te(e, n) ? { oldTarget: e.target, newTarget: n.target } : void 0
180
+ };
181
+ };
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;
185
+ const { changes: t, origin: o } = n;
186
+ if (!(!e.options.origin || e.options.origin === o))
187
+ return !1;
188
+ 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)
193
+ return !1;
194
+ }
195
+ }
196
+ if (e.options.annotations) {
197
+ 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)
201
+ ]);
202
+ return !!(Array.isArray(e.options.annotations) ? e.options.annotations : [e.options.annotations]).find((u) => b.has(u));
203
+ } else
204
+ 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),
208
+ ...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);
218
+ } else
219
+ return s;
220
+ }),
221
+ ...(n.updated || []).filter(({ oldValue: s }) => !b.has(s.id))
222
+ ];
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,
231
+ changes: {
232
+ created: l.created || [],
233
+ updated: l.updated || [],
234
+ deleted: l.deleted || []
235
+ },
236
+ state: [...e.values()]
237
+ };
238
+ t.forEach((p) => {
239
+ oe(p, a) && p.onChange(a);
240
+ });
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;
250
+ } else
251
+ 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;
259
+ }, []);
260
+ a.length > 0 && h(l, { updated: a });
261
+ }, T = (r, l = O.LOCAL) => {
262
+ const a = e.get(r.annotation);
263
+ if (a) {
264
+ const p = {
265
+ ...a,
266
+ bodies: [...a.bodies, r]
267
+ };
268
+ e.set(a.id, p), n.set(r.id, p.id), h(l, { updated: [{
269
+ oldValue: a,
270
+ newValue: p,
271
+ bodiesCreated: [r]
272
+ }] });
273
+ } 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 });
284
+ } else {
285
+ const p = r.reduce((C, D) => {
286
+ const x = e.get(D.id);
287
+ return x ? [...C, x] : C;
288
+ }, []);
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 });
294
+ }
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;
307
+ }, []);
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)
318
+ };
319
+ e.set(a.id, C), h(l, { updated: [{
320
+ oldValue: a,
321
+ newValue: C,
322
+ bodiesDeleted: [p]
323
+ }] });
324
+ } else
325
+ console.warn(`Attempt to delete missing body ${r.id} from annotation ${r.annotation}`);
326
+ } 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);
335
+ if (p)
336
+ return p;
337
+ console.error(`Store integrity error: body ${r} in index, but not in annotation`);
338
+ } else
339
+ console.warn(`Attempt to retrieve missing body: ${r}`);
340
+ }, E = (r, l) => {
341
+ if (r.annotation !== l.annotation)
342
+ 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)
348
+ };
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 }]
353
+ };
354
+ } 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,
367
+ target: {
368
+ ...l.target,
369
+ ...r
370
+ }
371
+ };
372
+ return e.set(l.id, a), {
373
+ oldValue: l,
374
+ newValue: a,
375
+ targetUpdated: {
376
+ oldTarget: l.target,
377
+ newTarget: r
378
+ }
379
+ };
380
+ } else
381
+ console.warn(`Attempt to update target on missing annotation: ${r.annotation}`);
382
+ };
383
+ 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 });
394
+ },
395
+ clear: f,
396
+ deleteAnnotation: L,
397
+ deleteBody: c,
398
+ getAnnotation: m,
399
+ getBody: d,
400
+ observe: o,
401
+ 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] });
407
+ }
408
+ };
409
+ }, ye = (e) => ({
410
+ ...e,
411
+ subscribe: (t) => {
412
+ const o = (i) => t(i.state);
413
+ return e.observe(o), t(e.all()), () => e.unobserve(o);
414
+ }
415
+ });
416
+ let P = () => ({
417
+ emit(e, ...n) {
418
+ let t = this.events[e] || [];
419
+ for (let o = 0, i = t.length; o < i; o++)
420
+ t[o](...n);
421
+ },
422
+ events: {},
423
+ on(e, n) {
424
+ var t;
425
+ return (t = this.events[e]) != null && t.push(n) || (this.events[e] = [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 de = 250, Ue = (e) => {
432
+ const n = P(), t = [];
433
+ let o = -1, i = !1, h = 0;
434
+ const U = (d) => {
435
+ 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;
439
+ else {
440
+ const S = t.length - 1;
441
+ t[S] = se(t[S], E);
442
+ }
443
+ h = g;
444
+ }
445
+ i = !1;
446
+ };
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);
449
+ return {
450
+ canRedo: () => t.length - 1 > o,
451
+ canUndo: () => o > -1,
452
+ destroy: () => e.unobserve(U),
453
+ on: (d, E) => n.on(d, E),
454
+ redo: () => {
455
+ if (t.length - 1 > o) {
456
+ 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;
459
+ }
460
+ },
461
+ undo: () => {
462
+ if (o > -1) {
463
+ 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;
466
+ }
467
+ }
468
+ };
469
+ }, Le = () => {
470
+ const { subscribe: e, set: n } = _([]);
471
+ return {
472
+ subscribe: e,
473
+ set: n
474
+ };
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) => {
486
+ 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);
489
+ } else
490
+ E(m, d);
491
+ });
492
+ }, 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;
501
+ });
502
+ };
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 = [];
512
+ 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 = [
518
+ // Remove annotations that were deselected
519
+ ...u.filter((g) => d.has(g.id)),
520
+ // Add editable annotations that were selected
521
+ ...c.filter(({ id: g }) => !m.has(g)).map(({ id: g }) => i.getAnnotation(g))
522
+ ];
523
+ }
524
+ A("selectionChanged", u);
525
+ }
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);
538
+ });
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;
545
+ }));
546
+ }
547
+ }, { 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));
551
+ };
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 ? {
556
+ parsed: t.parsed,
557
+ failed: [...t.failed, o]
558
+ } : {
559
+ parsed: [...t.parsed, i],
560
+ failed: t.failed
561
+ };
562
+ }, { parsed: [], failed: [] }), Oe = (e, n, t) => {
563
+ const { store: o, selection: i } = e, h = (w) => {
564
+ if (t) {
565
+ const { parsed: c, error: m } = t.parse(w);
566
+ c ? o.addAnnotation(c, O.REMOTE) : console.error(m);
567
+ } 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;
580
+ } else {
581
+ const c = t ? t.parse(w).parsed : w;
582
+ return o.deleteAnnotation(c), w;
583
+ }
584
+ }, y = (w) => {
585
+ 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);
588
+ } else
589
+ o.bulkAddAnnotation(w, !0, O.REMOTE);
590
+ }, A = (w) => {
591
+ w ? i.setSelected(w) : i.clear();
592
+ }, L = (w) => {
593
+ if (t) {
594
+ const c = t.parse(w).parsed, m = t.serialize(o.getAnnotation(c.id));
595
+ return o.updateAnnotation(c), m;
596
+ } else {
597
+ const c = o.getAnnotation(w.id);
598
+ return o.updateAnnotation(w), c;
599
+ }
600
+ };
601
+ return {
602
+ addAnnotation: h,
603
+ cancelSelected: U,
604
+ canRedo: n.canRedo,
605
+ canUndo: n.canUndo,
606
+ clearAnnotations: b,
607
+ getAnnotationById: v,
608
+ getAnnotations: u,
609
+ getSelected: T,
610
+ loadAnnotations: s,
611
+ redo: n.redo,
612
+ removeAnnotation: f,
613
+ setAnnotations: y,
614
+ setSelected: A,
615
+ undo: n.undo,
616
+ updateAnnotation: L
617
+ };
618
+ };
619
+ let ae = (e) => crypto.getRandomValues(new Uint8Array(e)), ce = (e, n, t) => {
620
+ 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 = "";
623
+ for (; ; ) {
624
+ let b = t(i), v = i;
625
+ for (; v--; )
626
+ if (U += e[b[v] & o] || "", U.length === h)
627
+ return U;
628
+ }
629
+ };
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) => {
632
+ const n = JSON.stringify(e);
633
+ let t = 0;
634
+ for (let o = 0, i = n.length; o < i; o++) {
635
+ let h = n.charCodeAt(o);
636
+ t = (t << 5) - t + h, t |= 0;
637
+ }
638
+ 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;
641
+ return {
642
+ id: o || `temp-${fe(t)}`,
643
+ annotation: n,
644
+ type: i,
645
+ purpose: h,
646
+ value: U,
647
+ created: b,
648
+ creator: v ? typeof v == "object" ? { ...v } : v : void 0,
649
+ ...u
650
+ };
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 = [
656
+ "#ff7c00",
657
+ // orange
658
+ "#1ac938",
659
+ // green
660
+ "#e8000b",
661
+ // red
662
+ "#8b2be2",
663
+ // purple
664
+ "#9f4800",
665
+ // brown
666
+ "#f14cc1",
667
+ // pink
668
+ "#ffc400",
669
+ // khaki
670
+ "#00d7ff",
671
+ // cyan
672
+ "#023eff"
673
+ // blue
674
+ ], he = () => {
675
+ const e = [...pe];
676
+ return { assignRandomColor: () => {
677
+ const o = Math.floor(Math.random() * e.length), i = e[o];
678
+ return e.splice(o, 1), i;
679
+ }, releaseColor: (o) => e.push(o) };
680
+ }, ge = () => {
681
+ const e = he();
682
+ return { addUser: (o, i) => {
683
+ const h = e.assignRandomColor();
684
+ return {
685
+ label: i.name || i.id,
686
+ avatar: i.avatar,
687
+ color: h
688
+ };
689
+ }, 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);
694
+ return;
695
+ }
696
+ const y = e.addUser(s, f);
697
+ t.set(s, {
698
+ ...f,
699
+ presenceKey: s,
700
+ appearance: y
701
+ });
702
+ }, h = (s) => {
703
+ const f = t.get(s);
704
+ if (!f) {
705
+ console.warn("Attempt to remove user that is not present", s);
706
+ return;
707
+ }
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) {
718
+ console.warn("Activity notification from user that is not present");
719
+ return;
720
+ }
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);
727
+ return;
728
+ }
729
+ f ? o.set(s, f) : o.delete(s), n.emit("selectionChange", y, f);
730
+ }, u = () => [...Array.from(t.values())];
731
+ return {
732
+ getPresentUsers: u,
733
+ notifyActivity: b,
734
+ on: (s, f) => n.on(s, f),
735
+ syncUsers: U,
736
+ updateSelection: v
737
+ };
738
+ };
739
+ export {
740
+ ne as Ignore,
741
+ 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
766
+ };
767
+ //# sourceMappingURL=annotorious-core.es.js.map