@annotorious/core 3.0.0-rc.2 → 3.0.0-rc.20

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