@annotorious/svelte 3.0.0-rc.21 → 3.0.0-rc.3
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.
- package/dist/annotorious-svelte.es.js +14 -17
- package/dist/annotorious-svelte.es.js.map +1 -1
- package/dist/annotorious-svelte.es10.js +2 -26
- package/dist/annotorious-svelte.es10.js.map +1 -1
- package/dist/annotorious-svelte.es11.js +20640 -89
- package/dist/annotorious-svelte.es11.js.map +1 -1
- package/dist/annotorious-svelte.es12.js +122 -2
- package/dist/annotorious-svelte.es12.js.map +1 -1
- package/dist/annotorious-svelte.es13.js +2 -2
- package/dist/annotorious-svelte.es13.js.map +1 -1
- package/dist/annotorious-svelte.es14.js +16 -27435
- package/dist/annotorious-svelte.es14.js.map +1 -1
- package/dist/annotorious-svelte.es15.js +3 -119
- package/dist/annotorious-svelte.es15.js.map +1 -1
- package/dist/annotorious-svelte.es16.js +10 -1
- package/dist/annotorious-svelte.es16.js.map +1 -1
- package/dist/annotorious-svelte.es17.js +6 -55
- package/dist/annotorious-svelte.es17.js.map +1 -1
- package/dist/annotorious-svelte.es18.js +5 -0
- package/dist/annotorious-svelte.es18.js.map +1 -0
- package/dist/annotorious-svelte.es2.js +25 -30
- package/dist/annotorious-svelte.es2.js.map +1 -1
- package/dist/annotorious-svelte.es3.js +2 -95
- package/dist/annotorious-svelte.es3.js.map +1 -1
- package/dist/annotorious-svelte.es4.js +8 -4238
- package/dist/annotorious-svelte.es4.js.map +1 -1
- package/dist/annotorious-svelte.es5.js +1263 -86
- package/dist/annotorious-svelte.es5.js.map +1 -1
- package/dist/annotorious-svelte.es6.js +87 -104
- package/dist/annotorious-svelte.es6.js.map +1 -1
- package/dist/annotorious-svelte.es7.js +118 -92
- package/dist/annotorious-svelte.es7.js.map +1 -1
- package/dist/annotorious-svelte.es8.js +303 -31
- package/dist/annotorious-svelte.es8.js.map +1 -1
- package/dist/annotorious-svelte.es9.js +8 -31
- package/dist/annotorious-svelte.es9.js.map +1 -1
- package/dist/index.d.ts +8 -11
- package/dist/index.d.ts.map +1 -1
- package/package.json +11 -22
- package/src/index.ts +21 -40
- package/vite.config.js +0 -1
- /package/dist/{annotorious-svelte.css → style.css} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotorious-svelte.es3.js","sources":["../../annotorious-core/dist/annotorious-core.es.js"],"sourcesContent":["var _ = Object.prototype.hasOwnProperty;\nfunction x(e, n) {\n var t, o;\n if (e === n)\n return !0;\n if (e && n && (t = e.constructor) === n.constructor) {\n if (t === Date)\n return e.getTime() === n.getTime();\n if (t === RegExp)\n return e.toString() === n.toString();\n if (t === Array) {\n if ((o = e.length) === n.length)\n for (; o-- && x(e[o], n[o]); )\n ;\n return o === -1;\n }\n if (!t || typeof e == \"object\") {\n o = 0;\n for (t in e)\n if (_.call(e, t) && ++o && !_.call(n, t) || !(t in n) || !x(e[t], n[t]))\n return !1;\n return Object.keys(n).length === o;\n }\n }\n return e !== e && n !== n;\n}\nfunction z() {\n}\nfunction W(e, n) {\n return e != e ? n == n : e !== n || e && typeof e == \"object\" || typeof e == \"function\";\n}\nconst k = [];\nfunction Y(e, n = z) {\n let t;\n const o = /* @__PURE__ */ new Set();\n function i(E) {\n if (W(e, E) && (e = E, t)) {\n const w = !k.length;\n for (const u of o)\n u[1](), k.push(u, e);\n if (w) {\n for (let u = 0; u < k.length; u += 2)\n k[u][0](k[u + 1]);\n k.length = 0;\n }\n }\n }\n function p(E) {\n i(E(e));\n }\n function U(E, w = z) {\n const u = [E, w];\n return o.add(u), o.size === 1 && (t = n(i, p) || z), E(e), () => {\n o.delete(u), o.size === 0 && t && (t(), t = null);\n };\n }\n return { set: i, update: p, subscribe: U };\n}\nconst ve = (e) => {\n const { subscribe: n, set: t } = Y();\n let o;\n return n((i) => o = i), e.observe(({ changes: i }) => {\n if (o) {\n (i.deleted || []).some((E) => E.id === o) && t(void 0);\n const U = (i.updated || []).find(({ oldValue: E }) => E.id === o);\n U && t(U.newValue.id);\n }\n }), {\n get current() {\n return o;\n },\n subscribe: n,\n set: t\n };\n};\nvar q = /* @__PURE__ */ ((e) => (e.EDIT = \"EDIT\", e.SELECT = \"SELECT\", e.NONE = \"NONE\", e))(q || {});\nconst V = { selected: [] }, ye = (e, n = \"EDIT\") => {\n const { subscribe: t, set: o } = Y(V);\n let i = V;\n t((s) => i = s);\n const p = () => o(V), U = () => {\n var s;\n return ((s = i.selected) == null ? void 0 : s.length) === 0;\n }, E = (s) => {\n if (i.selected.length === 0)\n return !1;\n const h = typeof s == \"string\" ? s : s.id;\n return i.selected.some((C) => C.id === h);\n }, w = (s, h) => {\n const C = e.getAnnotation(s);\n if (C) {\n const b = G(C, n);\n o(b === \"EDIT\" ? { selected: [{ id: s, editable: !0 }], pointerEvent: h } : b === \"SELECT\" ? { selected: [{ id: s }], pointerEvent: h } : { selected: [], pointerEvent: h });\n } else\n console.warn(\"Invalid selection: \" + s);\n }, u = (s, h = !0) => {\n const C = Array.isArray(s) ? s : [s], b = C.map((S) => e.getAnnotation(S)).filter(Boolean);\n o({ selected: b.map(({ id: S }) => ({ id: S, editable: h })) }), b.length !== C.length && console.warn(\"Invalid selection\", s);\n }, L = (s) => {\n if (i.selected.length === 0)\n return !1;\n const { selected: h } = i;\n h.filter(({ id: b }) => s.includes(b)).length > 0 && o({ selected: h.filter(({ id: b }) => !s.includes(b)) });\n };\n return e.observe(({ changes: s }) => L((s.deleted || []).map((h) => h.id))), {\n clear: p,\n clickSelect: w,\n get selected() {\n return i ? [...i.selected] : null;\n },\n get pointerEvent() {\n return i ? i.pointerEvent : null;\n },\n isEmpty: U,\n isSelected: E,\n setSelected: u,\n subscribe: t\n };\n}, G = (e, n) => typeof n == \"function\" ? n(e) || \"EDIT\" : n || \"EDIT\";\nlet $;\nconst H = new Uint8Array(16);\nfunction F() {\n if (!$ && ($ = typeof crypto < \"u\" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto), !$))\n throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");\n return $(H);\n}\nconst D = [];\nfor (let e = 0; e < 256; ++e)\n D.push((e + 256).toString(16).slice(1));\nfunction J(e, n = 0) {\n 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]];\n}\nconst Q = typeof crypto < \"u\" && crypto.randomUUID && crypto.randomUUID.bind(crypto), j = {\n randomUUID: Q\n};\nfunction X(e, n, t) {\n if (j.randomUUID && !n && !e)\n return j.randomUUID();\n e = e || {};\n const o = e.random || (e.rng || F)();\n if (o[6] = o[6] & 15 | 64, o[8] = o[8] & 63 | 128, n) {\n t = t || 0;\n for (let i = 0; i < 16; ++i)\n n[t + i] = o[i];\n return n;\n }\n return J(o);\n}\nconst we = (e) => {\n const { creator: n, updatedBy: t } = e.target, o = e.bodies.reduce((i, p) => [...i, p.creator, p.updatedBy].filter(Boolean), []);\n return [\n n,\n t,\n ...o\n ].filter((i) => i);\n}, Ce = (e, n, t, o) => ({\n id: X(),\n annotation: e.id,\n created: t || /* @__PURE__ */ new Date(),\n creator: o,\n ...n\n}), Z = (e, n) => {\n const t = new Set(e.bodies.map((o) => o.id));\n return n.bodies.filter((o) => !t.has(o.id));\n}, K = (e, n) => {\n const t = new Set(n.bodies.map((o) => o.id));\n return e.bodies.filter((o) => !t.has(o.id));\n}, ee = (e, n) => n.bodies.map((t) => {\n const o = e.bodies.find((i) => i.id === t.id);\n return { newBody: t, oldBody: o && !x(o, t) ? o : void 0 };\n}).filter(({ oldBody: t }) => t).map(({ oldBody: t, newBody: o }) => ({ oldBody: t, newBody: o })), te = (e, n) => !x(e.target, n.target), M = (e, n) => {\n const t = Z(e, n), o = K(e, n), i = ee(e, n);\n return {\n oldValue: e,\n newValue: n,\n bodiesCreated: t.length > 0 ? t : void 0,\n bodiesDeleted: o.length > 0 ? o : void 0,\n bodiesUpdated: i.length > 0 ? i : void 0,\n targetUpdated: te(e, n) ? { oldTarget: e.target, newTarget: n.target } : void 0\n };\n};\nvar 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 || {});\nconst oe = (e, n) => {\n var p, U;\n const { changes: t, origin: o } = n;\n if (!(!e.options.origin || e.options.origin === o))\n return !1;\n if (e.options.ignore) {\n const { ignore: E } = e.options, w = (L) => L && L.length > 0;\n if (!(w(t.created) || w(t.deleted))) {\n 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);\n if (E === \"BODY_ONLY\" && L && !s || E === \"TARGET_ONLY\" && s && !L)\n return !1;\n }\n }\n if (e.options.annotations) {\n const E = /* @__PURE__ */ new Set([\n ...(t.created || []).map((u) => u.id),\n ...(t.deleted || []).map((u) => u.id),\n ...(t.updated || []).map(({ oldValue: u }) => u.id)\n ]);\n return !!(Array.isArray(e.options.annotations) ? e.options.annotations : [e.options.annotations]).find((u) => E.has(u));\n } else\n return !0;\n}, se = (e, n) => {\n 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 = [\n ...(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),\n ...n.created || []\n ], u = [\n ...(e.deleted || []).filter((s) => !i.has(s.id)),\n ...(n.deleted || []).filter((s) => !t.has(s.id))\n ], L = [\n ...(e.updated || []).filter(({ newValue: s }) => !p.has(s.id)).map((s) => {\n const { oldValue: h, newValue: C } = s;\n if (U.has(C.id)) {\n const b = n.updated.find((S) => S.oldValue.id === C.id).newValue;\n return M(h, b);\n } else\n return s;\n }),\n ...(n.updated || []).filter(({ oldValue: s }) => !E.has(s.id))\n ];\n return { created: w, deleted: u, updated: L };\n}, ie = (e) => e.id !== void 0, Ue = () => {\n const e = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map(), t = [], o = (d, l = {}) => t.push({ onChange: d, options: l }), i = (d) => {\n const l = t.findIndex((a) => a.onChange == d);\n l > -1 && t.splice(l, 1);\n }, p = (d, l) => {\n const a = {\n origin: d,\n changes: {\n created: l.created || [],\n updated: l.updated || [],\n deleted: l.deleted || []\n },\n state: [...e.values()]\n };\n t.forEach((f) => {\n oe(f, a) && f.onChange(a);\n });\n }, U = (d, l = O.LOCAL) => {\n if (e.get(d.id))\n throw Error(`Cannot add annotation ${d.id} - exists already`);\n e.set(d.id, d), d.bodies.forEach((f) => n.set(f.id, d.id)), p(l, { created: [d] });\n }, E = (d, l) => {\n const a = typeof d == \"string\" ? l : d, f = typeof d == \"string\" ? d : d.id, v = e.get(f);\n if (v) {\n const T = M(v, a);\n 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;\n } else\n console.warn(`Cannot update annotation ${f} - does not exist`);\n }, w = (d, l = O.LOCAL, a = O.LOCAL) => {\n const f = ie(l) ? a : l, v = E(d, l);\n v && p(f, { updated: [v] });\n }, u = (d, l = O.LOCAL) => {\n const a = d.reduce((f, v) => {\n const T = E(v);\n return T ? [...f, T] : f;\n }, []);\n a.length > 0 && p(l, { updated: a });\n }, L = (d, l = O.LOCAL) => {\n const a = e.get(d.annotation);\n if (a) {\n const f = {\n ...a,\n bodies: [...a.bodies, d]\n };\n e.set(a.id, f), n.set(d.id, f.id), p(l, { updated: [{\n oldValue: a,\n newValue: f,\n bodiesCreated: [d]\n }] });\n } else\n console.warn(`Attempt to add body to missing annotation: ${d.annotation}`);\n }, s = () => [...e.values()], h = (d = O.LOCAL) => {\n const l = [...e.values()];\n e.clear(), n.clear(), p(d, { deleted: l });\n }, C = (d, l = !0, a = O.LOCAL) => {\n if (l) {\n const f = [...e.values()];\n e.clear(), n.clear(), d.forEach((v) => {\n e.set(v.id, v), v.bodies.forEach((T) => n.set(T.id, v.id));\n }), p(a, { created: d, deleted: f });\n } else {\n const f = d.reduce((v, T) => {\n const B = e.get(T.id);\n return B ? [...v, B] : v;\n }, []);\n if (f.length > 0)\n throw Error(`Bulk insert would overwrite the following annotations: ${f.map((v) => v.id).join(\", \")}`);\n d.forEach((v) => {\n e.set(v.id, v), v.bodies.forEach((T) => n.set(T.id, v.id));\n }), p(a, { created: d });\n }\n }, b = (d) => {\n const l = typeof d == \"string\" ? d : d.id, a = e.get(l);\n if (a)\n return e.delete(l), a.bodies.forEach((f) => n.delete(f.id)), a;\n console.warn(`Attempt to delete missing annotation: ${l}`);\n }, S = (d, l = O.LOCAL) => {\n const a = b(d);\n a && p(l, { deleted: [a] });\n }, y = (d, l = O.LOCAL) => {\n const a = d.reduce((f, v) => {\n const T = b(v);\n return T ? [...f, T] : f;\n }, []);\n a.length > 0 && p(l, { deleted: a });\n }, c = (d, l = O.LOCAL) => {\n const a = e.get(d.annotation);\n if (a) {\n const f = a.bodies.find((v) => v.id === d.id);\n if (f) {\n n.delete(f.id);\n const v = {\n ...a,\n bodies: a.bodies.filter((B) => B.id !== d.id)\n };\n e.set(a.id, v), p(l, { updated: [{\n oldValue: a,\n newValue: v,\n bodiesDeleted: [f]\n }] });\n } else\n console.warn(`Attempt to delete missing body ${d.id} from annotation ${d.annotation}`);\n } else\n console.warn(`Attempt to delete body from missing annotation ${d.annotation}`);\n }, g = (d) => {\n const l = e.get(d);\n return l ? { ...l } : void 0;\n }, r = (d) => {\n const l = n.get(d);\n if (l) {\n const f = g(l).bodies.find((v) => v.id === d);\n if (f)\n return f;\n console.error(`Store integrity error: body ${d} in index, but not in annotation`);\n } else\n console.warn(`Attempt to retrieve missing body: ${d}`);\n }, A = (d, l) => {\n if (d.annotation !== l.annotation)\n throw \"Annotation integrity violation: annotation ID must be the same when updating bodies\";\n const a = e.get(d.annotation);\n if (a) {\n const f = a.bodies.find((T) => T.id === d.id), v = {\n ...a,\n bodies: a.bodies.map((T) => T.id === f.id ? l : T)\n };\n return e.set(a.id, v), f.id !== l.id && (n.delete(f.id), n.set(l.id, v.id)), {\n oldValue: a,\n newValue: v,\n bodiesUpdated: [{ oldBody: f, newBody: l }]\n };\n } else\n console.warn(`Attempt to add body to missing annotation ${d.annotation}`);\n }, m = (d, l, a = O.LOCAL) => {\n const f = A(d, l);\n f && p(a, { updated: [f] });\n }, R = (d, l = O.LOCAL) => {\n const a = d.map((f) => A({ id: f.id, annotation: f.annotation }, f)).filter(Boolean);\n p(l, { updated: a });\n }, I = (d) => {\n const l = e.get(d.annotation);\n if (l) {\n const a = {\n ...l,\n target: {\n ...l.target,\n ...d\n }\n };\n return e.set(l.id, a), {\n oldValue: l,\n newValue: a,\n targetUpdated: {\n oldTarget: l.target,\n newTarget: d\n }\n };\n } else\n console.warn(`Attempt to update target on missing annotation: ${d.annotation}`);\n };\n return {\n addAnnotation: U,\n addBody: L,\n all: s,\n bulkAddAnnotation: C,\n bulkDeleteAnnotation: y,\n bulkUpdateAnnotation: u,\n bulkUpdateBodies: R,\n bulkUpdateTargets: (d, l = O.LOCAL) => {\n const a = d.map((f) => I(f)).filter(Boolean);\n a.length > 0 && p(l, { updated: a });\n },\n clear: h,\n deleteAnnotation: S,\n deleteBody: c,\n getAnnotation: g,\n getBody: r,\n observe: o,\n unobserve: i,\n updateAnnotation: w,\n updateBody: m,\n updateTarget: (d, l = O.LOCAL) => {\n const a = I(d);\n a && p(l, { updated: [a] });\n }\n };\n}, Le = (e) => ({\n ...e,\n subscribe: (t) => {\n const o = (i) => t(i.state);\n return e.observe(o), t(e.all()), () => e.unobserve(o);\n }\n});\nlet P = () => ({\n emit(e, ...n) {\n for (let t = 0, o = this.events[e] || [], i = o.length; t < i; t++)\n o[t](...n);\n },\n events: {},\n on(e, n) {\n var t;\n return ((t = this.events)[e] || (t[e] = [])).push(n), () => {\n var o;\n this.events[e] = (o = this.events[e]) == null ? void 0 : o.filter((i) => n !== i);\n };\n }\n});\nconst de = 250, Se = (e) => {\n const n = P(), t = [];\n let o = -1, i = !1, p = 0;\n const U = (r) => {\n if (!i) {\n const { changes: A } = r, m = performance.now();\n if (m - p > de)\n t.splice(o + 1), t.push(A), o = t.length - 1;\n else {\n const R = t.length - 1;\n t[R] = se(t[R], A);\n }\n p = m;\n }\n i = !1;\n };\n e.observe(U, { origin: O.LOCAL });\n 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);\n return {\n canRedo: () => t.length - 1 > o,\n canUndo: () => o > -1,\n destroy: () => e.unobserve(U),\n on: (r, A) => n.on(r, A),\n redo: () => {\n if (t.length - 1 > o) {\n i = !0;\n const { created: r, updated: A, deleted: m } = t[o + 1];\n w(r), L(A), h(m), n.emit(\"redo\", t[o + 1]), o += 1;\n }\n },\n undo: () => {\n if (o > -1) {\n i = !0;\n const { created: r, updated: A, deleted: m } = t[o];\n E(r), u(A), s(m), n.emit(\"undo\", t[o]), o -= 1;\n }\n }\n };\n}, Oe = () => {\n const { subscribe: e, set: n } = Y([]);\n return {\n subscribe: e,\n set: n\n };\n}, Te = (e, n, t, o) => {\n const { store: i, selection: p, hover: U, viewport: E } = e, w = /* @__PURE__ */ new Map();\n let u = [], L, s;\n const h = (c, g) => {\n w.has(c) ? w.get(c).push(g) : w.set(c, [g]);\n }, C = (c, g) => {\n const r = w.get(c);\n r && r.indexOf(g) > 0 && r.splice(r.indexOf(g), 1);\n }, b = (c, g, r) => {\n w.has(c) && setTimeout(() => {\n w.get(c).forEach((A) => {\n if (t) {\n 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;\n A(m, R);\n } else\n A(g, r);\n });\n }, 1);\n }, S = () => {\n const { selected: c } = p, g = (c || []).map(({ id: r }) => i.getAnnotation(r));\n g.forEach((r) => {\n const A = u.find((m) => m.id === r.id);\n (!A || !x(A, r)) && b(\"updateAnnotation\", r, A);\n }), u = u.map((r) => {\n const A = g.find(({ id: m }) => m === r.id);\n return A || r;\n });\n };\n p.subscribe(({ selected: c }) => {\n if (!(u.length === 0 && c.length === 0)) {\n if (u.length === 0 && c.length > 0)\n u = c.map(({ id: g }) => i.getAnnotation(g));\n else if (u.length > 0 && c.length === 0)\n u.forEach((g) => {\n const r = i.getAnnotation(g.id);\n r && !x(r, g) && b(\"updateAnnotation\", r, g);\n }), u = [];\n else {\n const g = new Set(u.map((m) => m.id)), r = new Set(c.map(({ id: m }) => m));\n u.filter((m) => !r.has(m.id)).forEach((m) => {\n const R = i.getAnnotation(m.id);\n R && !x(R, m) && b(\"updateAnnotation\", R, m);\n }), u = [\n // Remove annotations that were deselected\n ...u.filter((m) => r.has(m.id)),\n // Add editable annotations that were selected\n ...c.filter(({ id: m }) => !g.has(m)).map(({ id: m }) => i.getAnnotation(m))\n ];\n }\n b(\"selectionChanged\", u);\n }\n }), U.subscribe((c) => {\n !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;\n }), E == null || E.subscribe((c) => b(\"viewportIntersect\", c.map((g) => i.getAnnotation(g)))), i.observe((c) => {\n o && (s && clearTimeout(s), s = setTimeout(S, 1e3));\n const { created: g, deleted: r } = c.changes;\n (g || []).forEach((m) => b(\"createAnnotation\", m)), (r || []).forEach((m) => b(\"deleteAnnotation\", m)), (c.changes.updated || []).filter((m) => [\n ...m.bodiesCreated || [],\n ...m.bodiesDeleted || [],\n ...m.bodiesUpdated || []\n ].length > 0).forEach(({ oldValue: m, newValue: R }) => {\n const I = u.find((N) => N.id === m.id) || m;\n u = u.map((N) => N.id === m.id ? R : N), b(\"updateAnnotation\", R, I);\n });\n }, { origin: O.LOCAL }), i.observe((c) => {\n if (u) {\n const g = new Set(u.map((A) => A.id)), r = (c.changes.updated || []).filter(({ newValue: A }) => g.has(A.id)).map(({ newValue: A }) => A);\n r.length > 0 && (u = u.map((A) => {\n const m = r.find((R) => R.id === A.id);\n return m || A;\n }));\n }\n }, { origin: O.REMOTE });\n const y = (c) => (g) => {\n const { updated: r } = g;\n c ? (r || []).forEach((A) => b(\"updateAnnotation\", A.oldValue, A.newValue)) : (r || []).forEach((A) => b(\"updateAnnotation\", A.newValue, A.oldValue));\n };\n return n.on(\"undo\", y(!0)), n.on(\"redo\", y(!1)), { on: h, off: C, emit: b };\n}, De = (e) => (n) => n.map((t) => e.serialize(t)), re = (e) => (n) => n.reduce((t, o) => {\n const { parsed: i, error: p } = e.parse(o);\n return p ? {\n parsed: t.parsed,\n failed: [...t.failed, o]\n } : i ? {\n parsed: [...t.parsed, i],\n failed: t.failed\n } : {\n ...t\n };\n}, { parsed: [], failed: [] }), Re = (e, n, t) => {\n const { store: o, selection: i } = e, p = (y) => {\n if (t) {\n const { parsed: c, error: g } = t.parse(y);\n c ? o.addAnnotation(c, O.REMOTE) : console.error(g);\n } else\n o.addAnnotation(y, O.REMOTE);\n }, U = () => i.clear(), E = () => o.clear(), w = (y) => {\n const c = o.getAnnotation(y);\n return t && c ? t.serialize(c) : c;\n }, u = () => t ? o.all().map(t.serialize) : o.all(), L = () => {\n var g;\n const c = (((g = i.selected) == null ? void 0 : g.map((r) => r.id)) || []).map((r) => o.getAnnotation(r)).filter(Boolean);\n return t ? c.map(t.serialize) : c;\n }, s = (y, c = !0) => fetch(y).then((g) => g.json()).then((g) => (C(g, c), g)), h = (y) => {\n if (typeof y == \"string\") {\n const c = o.getAnnotation(y);\n if (o.deleteAnnotation(y), c)\n return t ? t.serialize(c) : c;\n } else {\n const c = t ? t.parse(y).parsed : y;\n if (c)\n return o.deleteAnnotation(c), y;\n }\n }, C = (y, c = !0) => {\n if (t) {\n const { parsed: g, failed: r } = re(t)(y);\n r.length > 0 && console.warn(`Discarded ${r.length} invalid annotations`, r), o.bulkAddAnnotation(g, c, O.REMOTE);\n } else\n o.bulkAddAnnotation(y, c, O.REMOTE);\n }, b = (y) => {\n y ? i.setSelected(y) : i.clear();\n }, S = (y) => {\n if (t) {\n const c = t.parse(y).parsed, g = t.serialize(o.getAnnotation(c.id));\n return o.updateAnnotation(c), g;\n } else {\n const c = o.getAnnotation(y.id);\n return o.updateAnnotation(y), c;\n }\n };\n return {\n addAnnotation: p,\n cancelSelected: U,\n canRedo: n.canRedo,\n canUndo: n.canUndo,\n clearAnnotations: E,\n getAnnotationById: w,\n getAnnotations: u,\n getSelected: L,\n loadAnnotations: s,\n redo: n.redo,\n removeAnnotation: h,\n setAnnotations: C,\n setSelected: b,\n undo: n.undo,\n updateAnnotation: S\n };\n}, ae = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nlet ce = (e) => crypto.getRandomValues(new Uint8Array(e)), le = (e, n, t) => {\n let o = (2 << Math.log(e.length - 1) / Math.LN2) - 1, i = -~(1.6 * o * n / e.length);\n return (p = n) => {\n let U = \"\";\n for (; ; ) {\n let E = t(i), w = i;\n for (; w--; )\n if (U += e[E[w] & o] || \"\", U.length === p)\n return U;\n }\n };\n}, ue = (e, n = 21) => le(e, n, ce), fe = (e = 21) => {\n let n = \"\", t = crypto.getRandomValues(new Uint8Array(e));\n for (; e--; )\n n += ae[t[e] & 63];\n return n;\n};\nconst Be = () => ({ isGuest: !0, id: ue(\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_\", 20)() }), pe = (e) => {\n const n = JSON.stringify(e);\n let t = 0;\n for (let o = 0, i = n.length; o < i; o++) {\n let p = n.charCodeAt(o);\n t = (t << 5) - t + p, t |= 0;\n }\n return `${t}`;\n}, he = (e) => e ? typeof e == \"object\" ? { ...e } : e : void 0, xe = (e, n) => (Array.isArray(e) ? e : [e]).map((t) => {\n const { id: o, type: i, purpose: p, value: U, created: E, creator: w, ...u } = t;\n return {\n id: o || `temp-${pe(t)}`,\n annotation: n,\n type: i,\n purpose: p,\n value: U,\n created: E ? new Date(E) : void 0,\n creator: he(w),\n ...u\n };\n}), Ie = (e) => e.map((n) => {\n var o, i;\n const t = { ...n };\n return delete t.annotation, (o = t.id) != null && o.startsWith(\"temp-\") && delete t.id, { ...t, created: (i = t.created) == null ? void 0 : i.toISOString() };\n}), ge = [\n \"#ff7c00\",\n // orange\n \"#1ac938\",\n // green\n \"#e8000b\",\n // red\n \"#8b2be2\",\n // purple\n \"#9f4800\",\n // brown\n \"#f14cc1\",\n // pink\n \"#ffc400\",\n // khaki\n \"#00d7ff\",\n // cyan\n \"#023eff\"\n // blue\n], me = () => {\n const e = [...ge];\n return { assignRandomColor: () => {\n const o = Math.floor(Math.random() * e.length), i = e[o];\n return e.splice(o, 1), i;\n }, releaseColor: (o) => e.push(o) };\n}, Ae = () => {\n const e = me();\n return { addUser: (o, i) => {\n const p = e.assignRandomColor();\n return {\n label: i.name || i.id,\n avatar: i.avatar,\n color: p\n };\n }, removeUser: (o) => e.releaseColor(o.appearance.color) };\n}, be = (e, n) => e.every((t) => e.includes(t)) && n.every((t) => e.includes(t)), ke = fe(), Ne = (e = Ae()) => {\n const n = P(), t = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), i = (s, h) => {\n if (t.has(s)) {\n console.warn(\"Attempt to add user that is already present\", s, h);\n return;\n }\n const C = e.addUser(s, h);\n t.set(s, {\n ...h,\n presenceKey: s,\n appearance: C\n });\n }, p = (s) => {\n const h = t.get(s);\n if (!h) {\n console.warn(\"Attempt to remove user that is not present\", s);\n return;\n }\n e.removeUser(h), t.delete(s);\n }, U = (s) => {\n 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));\n C.forEach(({ presenceKey: S, user: y }) => i(S, y)), b.forEach((S) => {\n const { presenceKey: y } = S;\n o.has(y) && n.emit(\"selectionChange\", S, null), p(y);\n }), (C.length > 0 || b.length > 0) && n.emit(\"presence\", u());\n }, E = (s, h) => {\n const C = t.get(s);\n if (!C) {\n console.warn(\"Activity notification from user that is not present\");\n return;\n }\n const b = o.get(s);\n (!b || !be(b, h)) && (o.set(s, h), n.emit(\"selectionChange\", C, h));\n }, w = (s, h) => {\n const C = t.get(s);\n if (!C) {\n console.warn(\"Selection change for user that is not present\", s);\n return;\n }\n h ? o.set(s, h) : o.delete(s), n.emit(\"selectionChange\", C, h);\n }, u = () => [...Array.from(t.values())];\n return {\n getPresentUsers: u,\n notifyActivity: E,\n on: (s, h) => n.on(s, h),\n syncUsers: U,\n updateSelection: w\n };\n};\nexport {\n ne as Ignore,\n O as Origin,\n ke as PRESENCE_KEY,\n q as PointerSelectAction,\n Be as createAnonymousGuest,\n Re as createBaseAnnotator,\n Ce as createBody,\n Ae as createDefaultAppearenceProvider,\n ve as createHoverState,\n Te as createLifecyleObserver,\n Ne as createPresenceState,\n ye as createSelectionState,\n Ue as createStore,\n Se as createUndoStack,\n Oe as createViewportState,\n me as defaultColorProvider,\n M as diffAnnotations,\n we as getContributors,\n se as mergeChanges,\n G as onPointerSelect,\n re as parseAll,\n xe as parseW3CBodies,\n he as parseW3CUser,\n De as serializeAll,\n Ie as serializeW3CBodies,\n oe as shouldNotify,\n Le as toSvelteStore\n};\n//# sourceMappingURL=annotorious-core.es.js.map\n"],"names":["q","e","$","H","F","D","J","n","Q","j","X","t","o","i","Ce","O","Le","ae","ce","le","p","U","E","w","ue","fe","Be","ge","me"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"annotorious-svelte.es3.js","sources":["../../annotorious-core/src/state/Selection.ts"],"sourcesContent":["import { writable } from 'svelte/store';\nimport type { Annotation } from '../model';\nimport type { Store } from './Store';\n \nexport type Selection = {\n\n selected: { id: string, editable?: boolean }[],\n\n pointerEvent?: PointerEvent;\n\n}\n\nexport type SelectionState<T extends Annotation> = ReturnType<typeof createSelectionState<T>>;\n\nexport enum PointerSelectAction {\n\n EDIT = 'EDIT', // Make annotation target(s) editable on pointer select\n \n SELECT = 'SELECT', // Just select, but don't make editable\n\n NONE = 'NONE' // Click won't select - annotation is completely inert\n\n}\n\nconst EMPTY: Selection = { selected: [] };\n\nexport const createSelectionState = <T extends Annotation>(\n store: Store<T>,\n selectAction: PointerSelectAction | ((a: Annotation) => PointerSelectAction) = PointerSelectAction.EDIT\n) => {\n const { subscribe, set } = writable<Selection>(EMPTY);\n\n let currentSelection: Selection = EMPTY;\n\n subscribe(updated => currentSelection = updated);\n\n const clear = () => set(EMPTY);\n\n const isEmpty = () => currentSelection.selected?.length === 0;\n\n const isSelected = (annotationOrId: T | string) => {\n if (currentSelection.selected.length === 0)\n return false;\n\n const id = typeof annotationOrId === 'string' ? annotationOrId : annotationOrId.id;\n return currentSelection.selected.some(i => i.id === id);\n }\n\n // TODO enable CTRL select\n const clickSelect = (id: string, pointerEvent: PointerEvent) => {\n const annotation = store.getAnnotation(id);\n if (annotation) {\n const action = onPointerSelect(annotation, selectAction);\n if (action === PointerSelectAction.EDIT)\n set({ selected: [{ id, editable: true }], pointerEvent }); \n else if (action === PointerSelectAction.SELECT)\n set({ selected: [{ id }], pointerEvent }); \n else\n set({ selected: [], pointerEvent });\n } else {\n console.warn('Invalid selection: ' + id);\n }\n }\n\n const setSelected = (idOrIds: string | string[], editable: boolean = true) => {\n const ids = Array.isArray(idOrIds) ? idOrIds : [idOrIds];\n\n // Remove invalid\n const annotations = \n ids.map(id => store.getAnnotation(id)).filter(a => a); \n\n set({ selected: annotations.map(({ id }) => ({ id, editable })) });\n \n if (annotations.length !== ids.length)\n console.warn('Invalid selection', idOrIds);\n }\n\n const removeFromSelection = (ids: string[]) => {\n if (currentSelection.selected.length === 0)\n return false;\n\n const { selected } = currentSelection;\n\n // Checks which of the given annotations are actually in the selection\n const toRemove = selected.filter(({ id }) => ids.includes(id))\n\n if (toRemove.length > 0)\n set({ selected: selected.filter(({ id }) => !ids.includes(id)) });\n }\n\n // Track store delete and update events\n store.observe(({ changes }) =>\n removeFromSelection(changes.deleted.map(a => a.id)));\n\n return { \n clear, \n clickSelect, \n get selected() { return currentSelection ? [...currentSelection.selected ] : null},\n get pointerEvent() { return currentSelection ? currentSelection.pointerEvent : null },\n isEmpty, \n isSelected, \n setSelected, \n subscribe \n };\n\n}\n\nexport const onPointerSelect = (\n annotation: Annotation, \n action?: PointerSelectAction | ((a: Annotation) => PointerSelectAction)\n): PointerSelectAction => (typeof action === 'function') ?\n (action(annotation) || PointerSelectAction.EDIT) : \n (action || PointerSelectAction.EDIT);\n"],"names":["PointerSelectAction"],"mappings":"AAcY,IAAAA,sBAAAA,OAEVA,EAAA,OAAO,QAEPA,EAAA,SAAS,UAETA,EAAA,OAAO,QANGA,IAAAA,KAAA,CAAA,CAAA;"}
|