@recogito/text-annotator 3.1.1 → 3.1.2

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.
@@ -1,13 +1,20 @@
1
- const re = "not-annotatable", nt = `.${re}`, rt = (t) => {
2
- var n;
3
- return !!(t instanceof HTMLElement ? t.closest(nt) : (n = t.parentElement) == null ? void 0 : n.closest(nt));
4
- }, Ce = (t) => {
5
- const e = t.commonAncestorContainer;
6
- return !rt(e);
7
- }, Le = (t) => t.addEventListener("click", (e) => {
1
+ import { colord as Z } from "colord";
2
+ import { dequal as at } from "dequal/lite";
3
+ import { v4 as J } from "uuid";
4
+ import { serializeW3CBodies as ct, parseW3CBodies as lt, parseW3CUser as dt, createStore as ut, createSelectionState as ft, createHoverState as gt, createViewportState as mt, Origin as K, createAnonymousGuest as pt, createUndoStack as ht, createLifecycleObserver as yt, createBaseAnnotator as bt } from "@annotorious/core";
5
+ import { Origin as he, UserSelectAction as ye, createBody as be } from "@annotorious/core";
6
+ import St from "rbush";
7
+ import _ from "hotkeys-js";
8
+ const tt = "not-annotatable", U = `.${tt}`, F = (t, n) => {
9
+ var o;
10
+ return t.contains(n) ? !!(n instanceof HTMLElement ? n.closest(U) : (o = n.parentElement) == null ? void 0 : o.closest(U)) : !0;
11
+ }, Ct = (t, n) => {
12
+ const e = n.commonAncestorContainer;
13
+ return !F(t, e);
14
+ }, wt = (t) => t.addEventListener("click", (n) => {
8
15
  // Allow clicks within not-annotatable elements
9
- !e.target.closest(nt) && !e.target.closest("a") && e.preventDefault();
10
- }), Et = (t) => ({
16
+ !n.target.closest(U) && !n.target.closest("a") && n.preventDefault();
17
+ }), X = (t) => ({
11
18
  ...t,
12
19
  type: t.type,
13
20
  x: t.x,
@@ -33,7 +40,7 @@ const re = "not-annotatable", nt = `.${re}`, rt = (t) => {
33
40
  pointerId: t.pointerId,
34
41
  pointerType: t.pointerType,
35
42
  timeStamp: t.timeStamp
36
- }), gt = (t) => ({
43
+ }), V = (t) => ({
37
44
  ...t,
38
45
  type: t.type,
39
46
  key: t.key,
@@ -49,2388 +56,816 @@ const re = "not-annotatable", nt = `.${re}`, rt = (t) => {
49
56
  defaultPrevented: t.defaultPrevented,
50
57
  detail: t.detail,
51
58
  timeStamp: t.timeStamp
52
- }), Te = typeof navigator < "u" && // @ts-ignore
53
- /mac/i.test(navigator.userAgentData ? navigator.userAgentData.platform : navigator.platform), Oe = (t) => {
59
+ }), Et = typeof navigator < "u" && // @ts-ignore
60
+ /mac/i.test(navigator.userAgentData ? navigator.userAgentData.platform : navigator.platform), At = (t) => {
54
61
  !t.hasAttribute("tabindex") && t.tabIndex < 0 && t.setAttribute("tabindex", "-1"), t.classList.add("no-focus-outline");
55
- }, Kt = (t, e = 10) => {
56
- let n;
62
+ }, D = (t, n = 10) => {
63
+ let e;
57
64
  return ((...o) => {
58
- clearTimeout(n), n = setTimeout(() => t.apply(void 0, o), e);
65
+ clearTimeout(e), e = setTimeout(() => t.apply(void 0, o), n);
59
66
  });
60
- }, Re = function* (t) {
61
- const e = document.createNodeIterator(
67
+ }, xt = function* (t) {
68
+ const n = document.createNodeIterator(
62
69
  t.commonAncestorContainer,
63
70
  NodeFilter.SHOW_ELEMENT,
64
- (o) => o instanceof HTMLElement && o.classList.contains(re) && !o.parentElement.closest(nt) && t.intersectsNode(o) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP
71
+ (o) => o instanceof HTMLElement && o.classList.contains(tt) && !o.parentElement.closest(U) && t.intersectsNode(o) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP
65
72
  );
66
- let n;
67
- for (; n = e.nextNode(); )
68
- n instanceof HTMLElement && (yield n);
69
- }, Me = (t) => {
70
- if (!Ce(t)) return [];
73
+ let e;
74
+ for (; e = n.nextNode(); )
75
+ e instanceof HTMLElement && (yield e);
76
+ }, vt = (t, n) => {
77
+ if (!Ct(t, n)) return [];
71
78
  const e = [];
72
- let n = null;
73
- for (const o of Re(t)) {
74
- let i;
75
- n ? (i = document.createRange(), i.setStartAfter(n), i.setEndBefore(o)) : (i = t.cloneRange(), i.setEndBefore(o)), i.collapsed || e.push(i), n = o;
76
- }
77
- if (n) {
78
- const o = t.cloneRange();
79
- o.setStartAfter(n), o.collapsed || e.push(o);
80
- }
81
- return e.length > 0 ? e : [t];
82
- }, Vt = (t) => {
83
- const e = t.cloneContents();
84
- return e.querySelectorAll(nt).forEach((n) => n.remove()), e;
85
- }, ke = (t, e, n = 10, o) => {
86
- const i = o ? t.startContainer.parentElement.closest(o) : e, s = document.createRange();
87
- s.setStart(i, 0), s.setEnd(t.startContainer, t.startOffset);
88
- const a = Vt(s).textContent, r = document.createRange();
89
- r.setStart(t.endContainer, t.endOffset), i === document.body ? r.setEnd(i, i.childNodes.length) : r.setEndAfter(i);
90
- const d = Vt(r).textContent;
79
+ let o = null;
80
+ for (const s of xt(n)) {
81
+ let r;
82
+ o ? (r = document.createRange(), r.setStartAfter(o), r.setEndBefore(s)) : (r = n.cloneRange(), r.setEndBefore(s)), r.collapsed || e.push(r), o = s;
83
+ }
84
+ if (o) {
85
+ const s = n.cloneRange();
86
+ s.setStartAfter(o), s.collapsed || e.push(s);
87
+ }
88
+ return e.length > 0 ? e : [n];
89
+ }, q = (t) => {
90
+ const n = t.cloneContents();
91
+ return n.querySelectorAll(U).forEach((e) => e.remove()), n;
92
+ }, Tt = (t, n, e = 10, o) => {
93
+ const s = o ? t.startContainer.parentElement.closest(o) : n, r = document.createRange();
94
+ r.setStart(s, 0), r.setEnd(t.startContainer, t.startOffset);
95
+ const l = q(r).textContent, u = document.createRange();
96
+ u.setStart(t.endContainer, t.endOffset), s === document.body ? u.setEnd(s, s.childNodes.length) : u.setEndAfter(s);
97
+ const m = q(u).textContent;
91
98
  return {
92
- prefix: a.substring(a.length - n),
93
- suffix: d.substring(0, n)
94
- };
95
- }, q = (t) => t.every((e) => e.range instanceof Range && !e.range.collapsed), Be = /^\s*$/, Ie = (t) => Be.test(t.toString()), Ue = (t, e) => {
96
- const n = (s) => Math.round(s * 10) / 10, o = {
97
- top: n(t.top),
98
- bottom: n(t.bottom),
99
- left: n(t.left),
100
- right: n(t.right)
101
- }, i = {
102
- top: n(e.top),
103
- bottom: n(e.bottom),
104
- left: n(e.left),
105
- right: n(e.right)
106
- };
107
- if (Math.abs(o.top - i.top) < 0.5 && Math.abs(o.bottom - i.bottom) < 0.5) {
108
- if (Math.abs(o.left - i.right) < 0.5 || Math.abs(o.right - i.left) < 0.5)
99
+ prefix: l.substring(l.length - e),
100
+ suffix: m.substring(0, e)
101
+ };
102
+ }, I = (t) => t.every((n) => n.range instanceof Range && !n.range.collapsed), Rt = /^\s*$/, Lt = (t) => Rt.test(t.toString()), kt = (t, n) => {
103
+ const e = (r) => Math.round(r * 10) / 10, o = {
104
+ top: e(t.top),
105
+ bottom: e(t.bottom),
106
+ left: e(t.left),
107
+ right: e(t.right)
108
+ }, s = {
109
+ top: e(n.top),
110
+ bottom: e(n.bottom),
111
+ left: e(n.left),
112
+ right: e(n.right)
113
+ };
114
+ if (Math.abs(o.top - s.top) < 0.5 && Math.abs(o.bottom - s.bottom) < 0.5) {
115
+ if (Math.abs(o.left - s.right) < 0.5 || Math.abs(o.right - s.left) < 0.5)
109
116
  return "inline-adjacent";
110
- if (o.left >= i.left && o.right <= i.right)
117
+ if (o.left >= s.left && o.right <= s.right)
111
118
  return "inline-is-contained";
112
- if (o.left <= i.left && o.right >= i.right)
119
+ if (o.left <= s.left && o.right >= s.right)
113
120
  return "inline-contains";
114
- } else if (o.top <= i.top && o.bottom >= i.bottom) {
115
- if (o.left <= i.left && o.right >= i.right)
121
+ } else if (o.top <= s.top && o.bottom >= s.bottom) {
122
+ if (o.left <= s.left && o.right >= s.right)
116
123
  return "block-contains";
117
- } else if (o.top >= i.top && o.bottom <= i.bottom && o.left >= i.left && o.right <= i.right)
124
+ } else if (o.top >= s.top && o.bottom <= s.bottom && o.left >= s.left && o.right <= s.right)
118
125
  return "block-is-contained";
119
- }, _e = (t, e) => {
120
- const n = Math.min(t.left, e.left), o = Math.max(t.right, e.right), i = Math.min(t.top, e.top), s = Math.max(t.bottom, e.bottom);
121
- return new DOMRect(n, i, o - n, s - i);
122
- }, Ne = (t) => t.reduce((e, n) => {
123
- if (n.width === 0 || n.height === 0)
124
- return e;
125
- let o = [...e], i = !1;
126
- for (const s of e) {
127
- const a = Ue(n, s);
128
- if (a === "inline-adjacent") {
129
- o = o.map((r) => r === s ? _e(n, s) : r), i = !0;
126
+ }, Ot = (t, n) => {
127
+ const e = Math.min(t.left, n.left), o = Math.max(t.right, n.right), s = Math.min(t.top, n.top), r = Math.max(t.bottom, n.bottom);
128
+ return new DOMRect(e, s, o - e, r - s);
129
+ }, Bt = (t) => t.reduce((n, e) => {
130
+ if (e.width === 0 || e.height === 0)
131
+ return n;
132
+ let o = [...n], s = !1;
133
+ for (const r of n) {
134
+ const l = kt(e, r);
135
+ if (l === "inline-adjacent") {
136
+ o = o.map((u) => u === r ? Ot(e, r) : u), s = !0;
130
137
  break;
131
- } else if (a === "inline-contains") {
132
- o = o.map((r) => r === s ? n : r), i = !0;
138
+ } else if (l === "inline-contains") {
139
+ o = o.map((u) => u === r ? e : u), s = !0;
133
140
  break;
134
- } else if (a === "inline-is-contained") {
135
- i = !0;
141
+ } else if (l === "inline-is-contained") {
142
+ s = !0;
136
143
  break;
137
- } else if (a === "block-contains" || a === "block-is-contained") {
138
- n.width < s.width && (o = o.map((r) => r === s ? n : r)), i = !0;
144
+ } else if (l === "block-contains" || l === "block-is-contained") {
145
+ e.width < r.width && (o = o.map((u) => u === r ? e : u)), s = !0;
139
146
  break;
140
147
  }
141
148
  }
142
- return i ? o : [...o, n];
143
- }, []), xo = (t) => ({
149
+ return s ? o : [...o, e];
150
+ }, []), ue = (t) => ({
144
151
  length: t.length,
145
- item: (e) => t[e],
152
+ item: (n) => t[n],
146
153
  [Symbol.iterator]: function* () {
147
- for (let e = 0; e < this.length; e++)
148
- yield this.item(e);
149
- }
150
- }), Ve = (t, e, n) => {
151
- const o = document.createRange(), i = n ? t.startContainer.parentElement.closest(n) : e;
152
- o.setStart(i, 0), o.setEnd(t.startContainer, t.startOffset);
153
- const s = Vt(o).textContent, a = t.toString(), r = s.length || 0, d = r + a.length;
154
- return n ? { quote: a, start: r, end: d, range: t, offsetReference: i } : { quote: a, start: r, end: d, range: t };
155
- }, ae = (t, e) => {
156
- var g, u;
157
- const { start: n, end: o } = t, i = t.offsetReference || e, s = document.createNodeIterator(
158
- e,
154
+ for (let n = 0; n < this.length; n++)
155
+ yield this.item(n);
156
+ }
157
+ }), It = (t, n, e) => {
158
+ const o = document.createRange(), s = e ? t.startContainer.parentElement.closest(e) : n;
159
+ o.setStart(s, 0), o.setEnd(t.startContainer, t.startOffset);
160
+ const r = q(o).textContent, l = t.toString(), u = r.length || 0, m = u + l.length;
161
+ return e ? { quote: l, start: u, end: m, range: t, offsetReference: s } : { quote: l, start: u, end: m, range: t };
162
+ }, et = (t, n) => {
163
+ var h, d;
164
+ const { start: e, end: o } = t, s = t.offsetReference || n, r = document.createNodeIterator(
165
+ n,
159
166
  NodeFilter.SHOW_TEXT,
160
- (h) => {
161
- var v;
162
- return (v = h.parentElement) != null && v.closest(nt) ? NodeFilter.FILTER_SKIP : NodeFilter.FILTER_ACCEPT;
167
+ (i) => {
168
+ var E;
169
+ return (E = i.parentElement) != null && E.closest(U) ? NodeFilter.FILTER_SKIP : NodeFilter.FILTER_ACCEPT;
163
170
  }
164
171
  );
165
- let a = 0;
166
- const r = document.createRange();
167
- let d = s.nextNode();
168
- d === null && console.error("Could not revive annotation target. Content missing.");
169
- let f = !i;
170
- for (; d !== null; ) {
171
- if (f || (f = typeof (i == null ? void 0 : i.contains) == "function" ? i.contains(d) : !1), f) {
172
- const h = ((g = d.textContent) == null ? void 0 : g.length) || 0;
173
- if (a + h > n) {
174
- r.setStart(d, n - a);
172
+ let l = 0;
173
+ const u = document.createRange();
174
+ let m = r.nextNode();
175
+ m === null && console.error("Could not revive annotation target. Content missing.");
176
+ let S = !s;
177
+ for (; m !== null; ) {
178
+ if (S || (S = typeof (s == null ? void 0 : s.contains) == "function" ? s.contains(m) : !1), S) {
179
+ const i = ((h = m.textContent) == null ? void 0 : h.length) || 0;
180
+ if (l + i > e) {
181
+ u.setStart(m, e - l);
175
182
  break;
176
183
  }
177
- a += h;
184
+ l += i;
178
185
  }
179
- d = s.nextNode();
186
+ m = r.nextNode();
180
187
  }
181
- for (; d !== null; ) {
182
- const h = ((u = d.textContent) == null ? void 0 : u.length) || 0;
183
- if (a + h >= o) {
184
- r.setEnd(d, o - a);
188
+ for (; m !== null; ) {
189
+ const i = ((d = m.textContent) == null ? void 0 : d.length) || 0;
190
+ if (l + i >= o) {
191
+ u.setEnd(m, o - l);
185
192
  break;
186
193
  }
187
- a += h, d = s.nextNode();
194
+ l += i, m = r.nextNode();
188
195
  }
189
196
  return {
190
197
  ...t,
191
- range: r
198
+ range: u
192
199
  };
193
- }, At = (t, e) => q(t.selector) ? t : {
200
+ }, W = (t, n) => I(t.selector) ? t : {
194
201
  ...t,
195
- selector: t.selector.map((n) => n.range instanceof Range && !n.range.collapsed ? n : ae(n, e))
196
- }, St = (t, e) => q(t.target.selector) ? t : { ...t, target: At(t.target, e) }, De = (t, e) => {
197
- const n = t.cloneRange();
198
- return e.contains(n.startContainer) || n.setStart(e, 0), e.contains(n.endContainer) || n.setEnd(e, e.childNodes.length), n;
199
- }, le = (t) => {
202
+ selector: t.selector.map((e) => e.range instanceof Range && !e.range.collapsed ? e : et(e, n))
203
+ }, z = (t, n) => I(t.target.selector) ? t : { ...t, target: W(t.target, n) }, Nt = (t, n) => {
204
+ const e = t.cloneRange();
205
+ return n.contains(e.startContainer) || e.setStart(n, 0), n.contains(e.endContainer) || e.setEnd(n, n.childNodes.length), e;
206
+ }, nt = (t) => {
200
207
  if (t === null)
201
208
  return document.scrollingElement;
202
- const { overflowY: e } = window.getComputedStyle(t);
203
- return e !== "visible" && e !== "hidden" && t.scrollHeight > t.clientHeight ? t : le(t.parentElement);
204
- }, Ke = (t, e) => (n) => {
205
- const o = typeof n == "string" ? n : n.id, i = (g) => {
206
- const u = s.getBoundingClientRect(), h = s.clientHeight, v = s.clientWidth, b = g.selector[0].range.getBoundingClientRect(), { width: p, height: x } = e.getAnnotationBounds(o), c = b.top - u.top, l = b.left - u.left, m = s.parentElement ? s.scrollTop : 0, S = s.parentElement ? s.scrollLeft : 0, E = c + m - (h - x) / 2, L = l + S - (v - p) / 2;
207
- s.scroll({ top: E, left: L, behavior: "smooth" });
208
- }, s = le(t);
209
- if (!s)
209
+ const { overflowY: n } = window.getComputedStyle(t);
210
+ return n !== "visible" && n !== "hidden" && t.scrollHeight > t.clientHeight ? t : nt(t.parentElement);
211
+ }, Ht = (t, n) => (e) => {
212
+ const o = typeof e == "string" ? e : e.id, s = (h) => {
213
+ const d = r.getBoundingClientRect(), i = r.clientHeight, E = r.clientWidth, w = h.selector[0].range.getBoundingClientRect(), { width: x, height: A } = n.getAnnotationBounds(o), a = w.top - d.top, c = w.left - d.left, y = r.parentElement ? r.scrollTop : 0, b = r.parentElement ? r.scrollLeft : 0, p = a + y - (i - A) / 2, f = c + b - (E - x) / 2;
214
+ r.scroll({ top: p, left: f, behavior: "smooth" });
215
+ }, r = nt(t);
216
+ if (!r)
210
217
  return console.warn(`The scroll parent is missing for the annotation: ${o}`, { container: t }), !1;
211
- const a = e.getAnnotation(o);
212
- if (!a)
218
+ const l = n.getAnnotation(o);
219
+ if (!l)
213
220
  return console.warn(`The annotation is missing in the store: ${o}`), !1;
214
- const { range: r } = a.target.selector[0];
215
- if (r && !r.collapsed)
216
- return i(a.target), !0;
217
- const d = At(a.target, t), { range: f } = d.selector[0];
218
- return f && !f.collapsed ? (i(d), !0) : !1;
219
- }, G = {
221
+ const { range: u } = l.target.selector[0];
222
+ if (u && !u.collapsed)
223
+ return s(l.target), !0;
224
+ const m = W(l.target, t), { range: S } = m.selector[0];
225
+ return S && !S.collapsed ? (s(m), !0) : !1;
226
+ }, N = {
220
227
  fill: "rgb(0, 128, 255)",
221
228
  fillOpacity: 0.18
222
- }, vt = {
229
+ }, Y = {
223
230
  fill: "rgb(0, 128, 255)",
224
231
  fillOpacity: 0.45
225
- }, Ye = (t, e, n, o, i) => {
226
- var a, r;
227
- const s = n ? typeof n == "function" ? n(t.annotation, t.state, i) || ((a = t.state) != null && a.selected ? vt : G) : n : (r = t.state) != null && r.selected ? vt : G;
228
- return o && o.paint(t, e) || s;
229
- }, Xe = (t) => {
230
- const { top: e, left: n } = t.getBoundingClientRect(), { innerWidth: o, innerHeight: i } = window, s = -n, a = -e, r = o - n, d = i - e;
231
- return { top: e, left: n, minX: s, minY: a, maxX: r, maxY: d };
232
- }, Pe = (t) => {
233
- let e = /* @__PURE__ */ new Set();
232
+ }, Mt = (t, n, e, o, s) => {
233
+ var l, u;
234
+ const r = e ? typeof e == "function" ? e(t.annotation, t.state, s) || ((l = t.state) != null && l.selected ? Y : N) : e : (u = t.state) != null && u.selected ? Y : N;
235
+ return o && o.paint(t, n) || r;
236
+ }, Pt = (t) => {
237
+ const { top: n, left: e } = t.getBoundingClientRect(), { innerWidth: o, innerHeight: s } = window, r = -e, l = -n, u = o - e, m = s - n;
238
+ return { top: n, left: e, minX: r, minY: l, maxX: u, maxY: m };
239
+ }, Kt = (t) => {
240
+ let n = /* @__PURE__ */ new Set();
234
241
  return (o) => {
235
- const i = o.map((s) => s.id);
236
- (e.size !== i.length || i.some((s) => !e.has(s))) && t.set(i), e = new Set(i);
237
- };
238
- }, Yt = (t, e, n, o) => {
239
- const { store: i, selection: s, hover: a } = e;
240
- let r, d, f;
241
- const g = Pe(n), u = (V) => {
242
- const { x: T, y: M } = t.getBoundingClientRect(), y = i.getAt(V.clientX - T, V.clientY - M, !1, d);
243
- y ? a.current !== y.id && (t.classList.add("hovered"), a.set(y.id)) : a.current && (t.classList.remove("hovered"), a.set(null));
244
- };
245
- t.addEventListener("pointermove", u);
246
- const h = (V = !1) => {
247
- f && f.clear();
248
- const T = Xe(t), { minX: M, minY: y, maxX: w, maxY: A } = T, C = d ? i.getIntersecting(M, y, w, A).filter(({ annotation: k }) => d(k)) : i.getIntersecting(M, y, w, A), I = s.selected.map(({ id: k }) => k), O = C.map(({ annotation: k, rects: P }) => {
249
- const Q = I.includes(k.id), Se = k.id === a.current;
242
+ const s = o.map((r) => r.id);
243
+ (n.size !== s.length || s.some((r) => !n.has(r))) && t.set(s), n = new Set(s);
244
+ };
245
+ }, j = (t, n, e, o) => {
246
+ const { store: s, selection: r, hover: l } = n;
247
+ let u, m, S;
248
+ const h = Kt(e), d = (g) => {
249
+ const { x: v, y: L } = t.getBoundingClientRect(), k = s.getAt(g.clientX - v, g.clientY - L, !1, m);
250
+ k ? l.current !== k.id && (t.classList.add("hovered"), l.set(k.id)) : l.current && (t.classList.remove("hovered"), l.set(null));
251
+ };
252
+ t.addEventListener("pointermove", d);
253
+ const i = (g = !1) => {
254
+ S && S.clear();
255
+ const v = Pt(t), { minX: L, minY: k, maxX: H, maxY: B } = v, $ = m ? s.getIntersecting(L, k, H, B).filter(({ annotation: O }) => m(O)) : s.getIntersecting(L, k, H, B), R = r.selected.map(({ id: O }) => O), M = $.map(({ annotation: O, rects: P }) => {
256
+ const rt = R.includes(O.id), it = O.id === l.current;
250
257
  return {
251
- annotation: k,
258
+ annotation: O,
252
259
  rects: P,
253
- state: { selected: Q, hovered: Se }
260
+ state: { selected: rt, hovered: it }
254
261
  };
255
262
  });
256
- o.redraw(O, T, r, f, V), setTimeout(() => g(C.map(({ annotation: k }) => k)), 1);
257
- }, v = (V) => {
258
- f = V, h();
259
- }, b = (V) => {
260
- r = V, h();
261
- }, p = (V) => {
262
- d = V, h(!1);
263
- }, x = () => h();
264
- i.observe(x);
265
- const c = s.subscribe(() => h()), l = a.subscribe(() => h()), m = () => h(!0);
266
- document.addEventListener("scroll", m, { capture: !0, passive: !0 });
267
- const S = Kt(() => {
268
- i.recalculatePositions(), f && f.reset(), h();
263
+ o.redraw(M, v, u, S, g), setTimeout(() => h($.map(({ annotation: O }) => O)), 1);
264
+ }, E = (g) => {
265
+ S = g, i();
266
+ }, w = (g) => {
267
+ u = g, i();
268
+ }, x = (g) => {
269
+ m = g, i(!1);
270
+ }, A = () => i();
271
+ s.observe(A);
272
+ const a = r.subscribe(() => i()), c = l.subscribe(() => i()), y = () => i(!0);
273
+ document.addEventListener("scroll", y, { capture: !0, passive: !0 });
274
+ const b = D(() => {
275
+ s.recalculatePositions(), S && S.reset(), i();
269
276
  });
270
- window.addEventListener("resize", S);
271
- const E = new ResizeObserver(S);
272
- E.observe(t);
273
- const L = { attributes: !0, childList: !0, subtree: !0 }, R = new MutationObserver((V) => {
274
- V.every((M) => M.target === t || t.contains(M.target)) || h(!0);
275
- });
276
- return R.observe(document.body, L), {
277
+ window.addEventListener("resize", b);
278
+ const p = new ResizeObserver(b);
279
+ p.observe(t);
280
+ const f = { attributes: !0, childList: !0, subtree: !0 }, C = new MutationObserver(D((g) => {
281
+ g.every((L) => L.target === t || t.contains(L.target)) || i(!0);
282
+ }, 150));
283
+ return C.observe(document.body, f), {
277
284
  destroy: () => {
278
- t.removeEventListener("pointermove", u), o.destroy(), i.unobserve(x), c(), l(), document.removeEventListener("scroll", m), window.removeEventListener("resize", S), E.disconnect(), R.disconnect();
285
+ t.removeEventListener("pointermove", d), o.destroy(), s.unobserve(A), a(), c(), document.removeEventListener("scroll", y), window.removeEventListener("resize", b), p.disconnect(), C.disconnect();
279
286
  },
280
- redraw: h,
281
- setStyle: b,
282
- setFilter: p,
283
- setPainter: v,
287
+ redraw: i,
288
+ setStyle: w,
289
+ setFilter: x,
290
+ setPainter: E,
284
291
  setVisible: o.setVisible
285
292
  };
286
- }, $e = () => {
293
+ }, Ut = () => {
287
294
  const t = document.createElement("canvas");
288
295
  return t.width = window.innerWidth, t.height = window.innerHeight, t.className = "r6o-canvas-highlight-layer bg", t;
289
- }, He = (t, e) => {
296
+ }, $t = (t, n) => {
290
297
  t.width = window.innerWidth, t.height = window.innerHeight;
291
- }, je = (t) => {
298
+ }, Ft = (t) => {
292
299
  t.classList.add("r6o-annotatable");
293
- const e = $e(), n = e.getContext("2d");
294
- document.body.appendChild(e);
295
- const o = (r, d, f, g) => requestAnimationFrame(() => {
296
- const { width: u, height: h } = e;
297
- n.clearRect(-0.5, -0.5, u + 1, h + 1), g && g.clear();
298
- const { top: v, left: b } = d;
299
- [...r].sort((x, c) => {
300
- const { annotation: { target: { created: l } } } = x, { annotation: { target: { created: m } } } = c;
301
- return l.getTime() - m.getTime();
302
- }).forEach((x) => {
303
- var S;
304
- const c = f ? typeof f == "function" ? f(x.annotation, x.state) : f : (S = x.state) != null && S.selected ? vt : G, l = g && g.paint(x, d) || c, m = x.rects.map(({ x: E, y: L, width: R, height: U }) => ({
305
- x: E + b,
306
- y: L + v,
307
- width: R,
308
- height: U
300
+ const n = Ut(), e = n.getContext("2d");
301
+ document.body.appendChild(n);
302
+ const o = (u, m, S, h) => requestAnimationFrame(() => {
303
+ const { width: d, height: i } = n;
304
+ e.clearRect(-0.5, -0.5, d + 1, i + 1), h && h.clear();
305
+ const { top: E, left: w } = m;
306
+ [...u].sort((A, a) => {
307
+ const { annotation: { target: { created: c } } } = A, { annotation: { target: { created: y } } } = a;
308
+ return c.getTime() - y.getTime();
309
+ }).forEach((A) => {
310
+ var b;
311
+ const a = S ? typeof S == "function" ? S(A.annotation, A.state) : S : (b = A.state) != null && b.selected ? Y : N, c = h && h.paint(A, m) || a, y = A.rects.map(({ x: p, y: f, width: C, height: T }) => ({
312
+ x: p + w,
313
+ y: f + E,
314
+ width: C,
315
+ height: T
309
316
  }));
310
- if (n.fillStyle = l.fill, n.globalAlpha = l.fillOpacity || 1, m.forEach(
311
- ({ x: E, y: L, width: R, height: U }) => n.fillRect(E, L, R, U)
312
- ), l.underlineColor) {
313
- n.globalAlpha = 1, n.strokeStyle = l.underlineColor, n.lineWidth = l.underlineThickness ?? 1;
314
- const E = l.underlineOffset ?? 0;
315
- m.forEach(({ x: L, y: R, width: U, height: V }) => {
316
- n.beginPath(), n.moveTo(L, R + V + E), n.lineTo(L + U, R + V + E), n.stroke();
317
+ if (e.fillStyle = c.fill, e.globalAlpha = c.fillOpacity || 1, y.forEach(
318
+ ({ x: p, y: f, width: C, height: T }) => e.fillRect(p, f, C, T)
319
+ ), c.underlineColor) {
320
+ e.globalAlpha = 1, e.strokeStyle = c.underlineColor, e.lineWidth = c.underlineThickness ?? 1;
321
+ const p = c.underlineOffset ?? 0;
322
+ y.forEach(({ x: f, y: C, width: T, height: g }) => {
323
+ e.beginPath(), e.moveTo(f, C + g + p), e.lineTo(f + T, C + g + p), e.stroke();
317
324
  });
318
325
  }
319
326
  });
320
- }), i = Kt(() => {
321
- He(e);
327
+ }), s = D(() => {
328
+ $t(n);
322
329
  });
323
- return window.addEventListener("resize", i), {
330
+ return window.addEventListener("resize", s), {
324
331
  destroy: () => {
325
- e.remove(), window.removeEventListener("resize", i);
332
+ n.remove(), window.removeEventListener("resize", s);
326
333
  },
327
- setVisible: (r) => {
334
+ setVisible: (u) => {
328
335
  console.log("setVisible not implemented on Canvas renderer");
329
336
  },
330
337
  redraw: o
331
338
  };
332
- }, ze = (t, e, n) => Yt(t, e, n, je(t));
333
- var Fe = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }, F = function(t) {
334
- return typeof t == "string" ? t.length > 0 : typeof t == "number";
335
- }, D = function(t, e, n) {
336
- return e === void 0 && (e = 0), n === void 0 && (n = Math.pow(10, e)), Math.round(n * t) / n + 0;
337
- }, $ = function(t, e, n) {
338
- return e === void 0 && (e = 0), n === void 0 && (n = 1), t > n ? n : t > e ? t : e;
339
- }, ce = function(t) {
340
- return (t = isFinite(t) ? t % 360 : 0) > 0 ? t : t + 360;
341
- }, $t = function(t) {
342
- return { r: $(t.r, 0, 255), g: $(t.g, 0, 255), b: $(t.b, 0, 255), a: $(t.a) };
343
- }, Ct = function(t) {
344
- return { r: D(t.r), g: D(t.g), b: D(t.b), a: D(t.a, 3) };
345
- }, We = /^#([0-9a-f]{3,8})$/i, pt = function(t) {
346
- var e = t.toString(16);
347
- return e.length < 2 ? "0" + e : e;
348
- }, de = function(t) {
349
- var e = t.r, n = t.g, o = t.b, i = t.a, s = Math.max(e, n, o), a = s - Math.min(e, n, o), r = a ? s === e ? (n - o) / a : s === n ? 2 + (o - e) / a : 4 + (e - n) / a : 0;
350
- return { h: 60 * (r < 0 ? r + 6 : r), s: s ? a / s * 100 : 0, v: s / 255 * 100, a: i };
351
- }, ue = function(t) {
352
- var e = t.h, n = t.s, o = t.v, i = t.a;
353
- e = e / 360 * 6, n /= 100, o /= 100;
354
- var s = Math.floor(e), a = o * (1 - n), r = o * (1 - (e - s) * n), d = o * (1 - (1 - e + s) * n), f = s % 6;
355
- return { r: 255 * [o, r, a, a, d, o][f], g: 255 * [d, o, o, r, a, a][f], b: 255 * [a, a, d, o, o, r][f], a: i };
356
- }, Ht = function(t) {
357
- return { h: ce(t.h), s: $(t.s, 0, 100), l: $(t.l, 0, 100), a: $(t.a) };
358
- }, jt = function(t) {
359
- return { h: D(t.h), s: D(t.s), l: D(t.l), a: D(t.a, 3) };
360
- }, zt = function(t) {
361
- return ue((n = (e = t).s, { h: e.h, s: (n *= ((o = e.l) < 50 ? o : 100 - o) / 100) > 0 ? 2 * n / (o + n) * 100 : 0, v: o + n, a: e.a }));
362
- var e, n, o;
363
- }, dt = function(t) {
364
- return { h: (e = de(t)).h, s: (i = (200 - (n = e.s)) * (o = e.v) / 100) > 0 && i < 200 ? n * o / 100 / (i <= 100 ? i : 200 - i) * 100 : 0, l: i / 2, a: e.a };
365
- var e, n, o, i;
366
- }, qe = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i, Ge = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i, Qe = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i, Je = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i, Ft = { string: [[function(t) {
367
- var e = We.exec(t);
368
- return e ? (t = e[1]).length <= 4 ? { r: parseInt(t[0] + t[0], 16), g: parseInt(t[1] + t[1], 16), b: parseInt(t[2] + t[2], 16), a: t.length === 4 ? D(parseInt(t[3] + t[3], 16) / 255, 2) : 1 } : t.length === 6 || t.length === 8 ? { r: parseInt(t.substr(0, 2), 16), g: parseInt(t.substr(2, 2), 16), b: parseInt(t.substr(4, 2), 16), a: t.length === 8 ? D(parseInt(t.substr(6, 2), 16) / 255, 2) : 1 } : null : null;
369
- }, "hex"], [function(t) {
370
- var e = Qe.exec(t) || Je.exec(t);
371
- return e ? e[2] !== e[4] || e[4] !== e[6] ? null : $t({ r: Number(e[1]) / (e[2] ? 100 / 255 : 1), g: Number(e[3]) / (e[4] ? 100 / 255 : 1), b: Number(e[5]) / (e[6] ? 100 / 255 : 1), a: e[7] === void 0 ? 1 : Number(e[7]) / (e[8] ? 100 : 1) }) : null;
372
- }, "rgb"], [function(t) {
373
- var e = qe.exec(t) || Ge.exec(t);
374
- if (!e) return null;
375
- var n, o, i = Ht({ h: (n = e[1], o = e[2], o === void 0 && (o = "deg"), Number(n) * (Fe[o] || 1)), s: Number(e[3]), l: Number(e[4]), a: e[5] === void 0 ? 1 : Number(e[5]) / (e[6] ? 100 : 1) });
376
- return zt(i);
377
- }, "hsl"]], object: [[function(t) {
378
- var e = t.r, n = t.g, o = t.b, i = t.a, s = i === void 0 ? 1 : i;
379
- return F(e) && F(n) && F(o) ? $t({ r: Number(e), g: Number(n), b: Number(o), a: Number(s) }) : null;
380
- }, "rgb"], [function(t) {
381
- var e = t.h, n = t.s, o = t.l, i = t.a, s = i === void 0 ? 1 : i;
382
- if (!F(e) || !F(n) || !F(o)) return null;
383
- var a = Ht({ h: Number(e), s: Number(n), l: Number(o), a: Number(s) });
384
- return zt(a);
385
- }, "hsl"], [function(t) {
386
- var e = t.h, n = t.s, o = t.v, i = t.a, s = i === void 0 ? 1 : i;
387
- if (!F(e) || !F(n) || !F(o)) return null;
388
- var a = (function(r) {
389
- return { h: ce(r.h), s: $(r.s, 0, 100), v: $(r.v, 0, 100), a: $(r.a) };
390
- })({ h: Number(e), s: Number(n), v: Number(o), a: Number(s) });
391
- return ue(a);
392
- }, "hsv"]] }, Wt = function(t, e) {
393
- for (var n = 0; n < e.length; n++) {
394
- var o = e[n][0](t);
395
- if (o) return [o, e[n][1]];
396
- }
397
- return [null, void 0];
398
- }, Ze = function(t) {
399
- return typeof t == "string" ? Wt(t.trim(), Ft.string) : typeof t == "object" && t !== null ? Wt(t, Ft.object) : [null, void 0];
400
- }, Lt = function(t, e) {
401
- var n = dt(t);
402
- return { h: n.h, s: $(n.s + 100 * e, 0, 100), l: n.l, a: n.a };
403
- }, Tt = function(t) {
404
- return (299 * t.r + 587 * t.g + 114 * t.b) / 1e3 / 255;
405
- }, qt = function(t, e) {
406
- var n = dt(t);
407
- return { h: n.h, s: n.s, l: $(n.l + 100 * e, 0, 100), a: n.a };
408
- }, Gt = (function() {
409
- function t(e) {
410
- this.parsed = Ze(e)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 };
411
- }
412
- return t.prototype.isValid = function() {
413
- return this.parsed !== null;
414
- }, t.prototype.brightness = function() {
415
- return D(Tt(this.rgba), 2);
416
- }, t.prototype.isDark = function() {
417
- return Tt(this.rgba) < 0.5;
418
- }, t.prototype.isLight = function() {
419
- return Tt(this.rgba) >= 0.5;
420
- }, t.prototype.toHex = function() {
421
- return e = Ct(this.rgba), n = e.r, o = e.g, i = e.b, a = (s = e.a) < 1 ? pt(D(255 * s)) : "", "#" + pt(n) + pt(o) + pt(i) + a;
422
- var e, n, o, i, s, a;
423
- }, t.prototype.toRgb = function() {
424
- return Ct(this.rgba);
425
- }, t.prototype.toRgbString = function() {
426
- return e = Ct(this.rgba), n = e.r, o = e.g, i = e.b, (s = e.a) < 1 ? "rgba(" + n + ", " + o + ", " + i + ", " + s + ")" : "rgb(" + n + ", " + o + ", " + i + ")";
427
- var e, n, o, i, s;
428
- }, t.prototype.toHsl = function() {
429
- return jt(dt(this.rgba));
430
- }, t.prototype.toHslString = function() {
431
- return e = jt(dt(this.rgba)), n = e.h, o = e.s, i = e.l, (s = e.a) < 1 ? "hsla(" + n + ", " + o + "%, " + i + "%, " + s + ")" : "hsl(" + n + ", " + o + "%, " + i + "%)";
432
- var e, n, o, i, s;
433
- }, t.prototype.toHsv = function() {
434
- return e = de(this.rgba), { h: D(e.h), s: D(e.s), v: D(e.v), a: D(e.a, 3) };
435
- var e;
436
- }, t.prototype.invert = function() {
437
- return j({ r: 255 - (e = this.rgba).r, g: 255 - e.g, b: 255 - e.b, a: e.a });
438
- var e;
439
- }, t.prototype.saturate = function(e) {
440
- return e === void 0 && (e = 0.1), j(Lt(this.rgba, e));
441
- }, t.prototype.desaturate = function(e) {
442
- return e === void 0 && (e = 0.1), j(Lt(this.rgba, -e));
443
- }, t.prototype.grayscale = function() {
444
- return j(Lt(this.rgba, -1));
445
- }, t.prototype.lighten = function(e) {
446
- return e === void 0 && (e = 0.1), j(qt(this.rgba, e));
447
- }, t.prototype.darken = function(e) {
448
- return e === void 0 && (e = 0.1), j(qt(this.rgba, -e));
449
- }, t.prototype.rotate = function(e) {
450
- return e === void 0 && (e = 15), this.hue(this.hue() + e);
451
- }, t.prototype.alpha = function(e) {
452
- return typeof e == "number" ? j({ r: (n = this.rgba).r, g: n.g, b: n.b, a: e }) : D(this.rgba.a, 3);
453
- var n;
454
- }, t.prototype.hue = function(e) {
455
- var n = dt(this.rgba);
456
- return typeof e == "number" ? j({ h: e, s: n.s, l: n.l, a: n.a }) : D(n.h);
457
- }, t.prototype.isEqual = function(e) {
458
- return this.toHex() === j(e).toHex();
459
- }, t;
460
- })(), j = function(t) {
461
- return t instanceof Gt ? t : new Gt(t);
462
- };
463
- const tn = (t) => [
464
- `background-color:${j((t == null ? void 0 : t.fill) || G.fill).alpha((t == null ? void 0 : t.fillOpacity) === void 0 ? G.fillOpacity : t.fillOpacity).toHex()}`,
339
+ }, _t = (t, n, e) => j(t, n, e, Ft(t)), Vt = (t) => [
340
+ `background-color:${Z((t == null ? void 0 : t.fill) || N.fill).alpha((t == null ? void 0 : t.fillOpacity) === void 0 ? N.fillOpacity : t.fillOpacity).toHex()}`,
465
341
  t != null && t.underlineThickness ? "text-decoration:underline" : void 0,
466
342
  t != null && t.underlineColor ? `text-decoration-color:${t.underlineColor}` : void 0,
467
343
  t != null && t.underlineOffset ? `text-underline-offset:${t.underlineOffset}px` : void 0,
468
344
  t != null && t.underlineThickness ? `text-decoration-thickness:${t.underlineThickness}px` : void 0
469
- ].filter(Boolean).join(";"), en = () => {
345
+ ].filter(Boolean).join(";"), Dt = () => {
470
346
  const t = document.createElement("style");
471
347
  document.getElementsByTagName("head")[0].appendChild(t);
472
- let e = /* @__PURE__ */ new Set();
348
+ let n = /* @__PURE__ */ new Set();
473
349
  return {
474
350
  destroy: () => {
475
351
  CSS.highlights.clear(), t.remove();
476
352
  },
477
- setVisible: (s) => {
353
+ setVisible: (r) => {
478
354
  console.log("setVisible not implemented on CSS Custom Highlights renderer");
479
355
  },
480
- redraw: (s, a, r, d) => {
481
- d && d.clear();
482
- const f = new Set(s.map((u) => u.annotation.id));
483
- Array.from(e).filter((u) => !f.has(u));
484
- const g = s.map((u) => {
485
- var b;
486
- const h = r ? typeof r == "function" ? r(u.annotation, u.state) : r : (b = u.state) != null && b.selected ? vt : G, v = d && d.paint(u, a) || h;
487
- return `::highlight(_${u.annotation.id}) { ${tn(v)} }`;
356
+ redraw: (r, l, u, m) => {
357
+ m && m.clear();
358
+ const S = new Set(r.map((d) => d.annotation.id));
359
+ Array.from(n).filter((d) => !S.has(d));
360
+ const h = r.map((d) => {
361
+ var w;
362
+ const i = u ? typeof u == "function" ? u(d.annotation, d.state) : u : (w = d.state) != null && w.selected ? Y : N, E = m && m.paint(d, l) || i;
363
+ return `::highlight(_${d.annotation.id}) { ${Vt(E)} }`;
488
364
  });
489
- t.innerHTML = g.join(`
490
- `), CSS.highlights.clear(), s.forEach(({ annotation: u }) => {
491
- const h = u.target.selector.map((b) => b.range), v = new Highlight(...h);
492
- CSS.highlights.set(`_${u.id}`, v);
493
- }), e = f;
365
+ t.innerHTML = h.join(`
366
+ `), CSS.highlights.clear(), r.forEach(({ annotation: d }) => {
367
+ const i = d.target.selector.map((w) => w.range), E = new Highlight(...i);
368
+ CSS.highlights.set(`_${d.id}`, E);
369
+ }), n = S;
494
370
  }
495
371
  };
496
- }, nn = (t, e, n) => Yt(t, e, n, en());
497
- var Qt = Object.prototype.hasOwnProperty;
498
- function Dt(t, e) {
499
- var n, o;
500
- if (t === e) return !0;
501
- if (t && e && (n = t.constructor) === e.constructor) {
502
- if (n === Date) return t.getTime() === e.getTime();
503
- if (n === RegExp) return t.toString() === e.toString();
504
- if (n === Array) {
505
- if ((o = t.length) === e.length)
506
- for (; o-- && Dt(t[o], e[o]); ) ;
507
- return o === -1;
508
- }
509
- if (!n || typeof t == "object") {
510
- o = 0;
511
- for (n in t)
512
- if (Qt.call(t, n) && ++o && !Qt.call(e, n) || !(n in e) || !Dt(t[n], e[n])) return !1;
513
- return Object.keys(e).length === o;
514
- }
515
- }
516
- return t !== t && e !== e;
517
- }
518
- const on = (t, e) => {
519
- const n = (s, a) => s.x <= a.x + a.width && s.x + s.width >= a.x && s.y <= a.y + a.height && s.y + s.height >= a.y, o = (s) => s.rects.reduce((a, r) => a + r.width, 0), i = e.filter(({ rects: s }) => s.some((a) => n(t, a)));
520
- return i.sort((s, a) => o(a) - o(s)), i.findIndex((s) => s.rects.includes(t));
521
- }, sn = (t) => {
372
+ }, Wt = (t, n, e) => j(t, n, e, Dt()), Yt = (t, n) => {
373
+ const e = (r, l) => r.x <= l.x + l.width && r.x + r.width >= l.x && r.y <= l.y + l.height && r.y + r.height >= l.y, o = (r) => r.rects.reduce((l, u) => l + u.width, 0), s = n.filter(({ rects: r }) => r.some((l) => e(t, l)));
374
+ return s.sort((r, l) => o(l) - o(r)), s.findIndex((r) => r.rects.includes(t));
375
+ }, Xt = (t) => {
522
376
  t.classList.add("r6o-annotatable");
523
- const e = document.createElement("div");
524
- e.className = "r6o-span-highlight-layer", t.insertBefore(e, t.firstChild);
525
- let n = [];
377
+ const n = document.createElement("div");
378
+ n.className = "r6o-span-highlight-layer", t.insertBefore(n, t.firstChild);
379
+ let e = [];
526
380
  return {
527
381
  destroy: () => {
528
- e.remove();
382
+ n.remove();
529
383
  },
530
- redraw: (a, r, d, f, g) => {
531
- const h = !(Dt(n, a) && g);
532
- if (!f && !h) return;
533
- h && (e.innerHTML = ""), [...a].sort((b, p) => {
534
- const { annotation: { target: { created: x } } } = b, { annotation: { target: { created: c } } } = p;
535
- return x && c ? x.getTime() - c.getTime() : 0;
536
- }).forEach((b) => {
537
- b.rects.map((p) => {
538
- const x = on(p, a), c = Ye(b, r, d, f, x);
539
- if (h) {
540
- const l = document.createElement("span");
541
- l.className = "r6o-annotation", l.dataset.annotation = b.annotation.id, l.style.left = `${p.x}px`, l.style.top = `${p.y}px`, l.style.width = `${p.width}px`, l.style.height = `${p.height}px`, l.style.backgroundColor = j((c == null ? void 0 : c.fill) || G.fill).alpha((c == null ? void 0 : c.fillOpacity) === void 0 ? G.fillOpacity : c.fillOpacity).toHex(), c.underlineStyle && (l.style.borderStyle = c.underlineStyle), c.underlineColor && (l.style.borderColor = c.underlineColor), c.underlineThickness && (l.style.borderBottomWidth = `${c.underlineThickness}px`), c.underlineOffset && (l.style.paddingBottom = `${c.underlineOffset}px`), e.appendChild(l);
384
+ redraw: (l, u, m, S, h) => {
385
+ const i = !(at(e, l) && h);
386
+ if (!S && !i) return;
387
+ i && (n.innerHTML = ""), [...l].sort((w, x) => {
388
+ const { annotation: { target: { created: A } } } = w, { annotation: { target: { created: a } } } = x;
389
+ return A && a ? A.getTime() - a.getTime() : 0;
390
+ }).forEach((w) => {
391
+ w.rects.map((x) => {
392
+ const A = Yt(x, l), a = Mt(w, u, m, S, A);
393
+ if (i) {
394
+ const c = document.createElement("span");
395
+ c.className = "r6o-annotation", c.dataset.annotation = w.annotation.id, c.style.left = `${x.x}px`, c.style.top = `${x.y}px`, c.style.width = `${x.width}px`, c.style.height = `${x.height}px`, c.style.backgroundColor = Z((a == null ? void 0 : a.fill) || N.fill).alpha((a == null ? void 0 : a.fillOpacity) === void 0 ? N.fillOpacity : a.fillOpacity).toHex(), a.underlineStyle && (c.style.borderStyle = a.underlineStyle), a.underlineColor && (c.style.borderColor = a.underlineColor), a.underlineThickness && (c.style.borderBottomWidth = `${a.underlineThickness}px`), a.underlineOffset && (c.style.paddingBottom = `${a.underlineOffset}px`), n.appendChild(c);
542
396
  }
543
397
  });
544
- }), n = a;
398
+ }), e = l;
545
399
  },
546
- setVisible: (a) => {
547
- a ? e.classList.remove("hidden") : e.classList.add("hidden");
548
- }
549
- };
550
- }, rn = (t, e, n) => Yt(t, e, n, sn(t)), K = [];
551
- for (let t = 0; t < 256; ++t)
552
- K.push((t + 256).toString(16).slice(1));
553
- function an(t, e = 0) {
554
- return (K[t[e + 0]] + K[t[e + 1]] + K[t[e + 2]] + K[t[e + 3]] + "-" + K[t[e + 4]] + K[t[e + 5]] + "-" + K[t[e + 6]] + K[t[e + 7]] + "-" + K[t[e + 8]] + K[t[e + 9]] + "-" + K[t[e + 10]] + K[t[e + 11]] + K[t[e + 12]] + K[t[e + 13]] + K[t[e + 14]] + K[t[e + 15]]).toLowerCase();
555
- }
556
- let Ot;
557
- const ln = new Uint8Array(16);
558
- function cn() {
559
- if (!Ot) {
560
- if (typeof crypto > "u" || !crypto.getRandomValues)
561
- throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
562
- Ot = crypto.getRandomValues.bind(crypto);
563
- }
564
- return Ot(ln);
565
- }
566
- const dn = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), Jt = { randomUUID: dn };
567
- function fe(t, e, n) {
568
- var i;
569
- if (Jt.randomUUID && !t)
570
- return Jt.randomUUID();
571
- t = t || {};
572
- const o = t.random ?? ((i = t.rng) == null ? void 0 : i.call(t)) ?? cn();
573
- if (o.length < 16)
574
- throw new Error("Random bytes length must be >= 16");
575
- return o[6] = o[6] & 15 | 64, o[8] = o[8] & 63 | 128, an(o);
576
- }
577
- var Zt = Object.prototype.hasOwnProperty;
578
- function J(t, e) {
579
- var n, o;
580
- if (t === e) return !0;
581
- if (t && e && (n = t.constructor) === e.constructor) {
582
- if (n === Date) return t.getTime() === e.getTime();
583
- if (n === RegExp) return t.toString() === e.toString();
584
- if (n === Array) {
585
- if ((o = t.length) === e.length)
586
- for (; o-- && J(t[o], e[o]); ) ;
587
- return o === -1;
588
- }
589
- if (!n || typeof t == "object") {
590
- o = 0;
591
- for (n in t)
592
- if (Zt.call(t, n) && ++o && !Zt.call(e, n) || !(n in e) || !J(t[n], e[n])) return !1;
593
- return Object.keys(e).length === o;
400
+ setVisible: (l) => {
401
+ l ? n.classList.remove("hidden") : n.classList.add("hidden");
594
402
  }
595
- }
596
- return t !== t && e !== e;
597
- }
598
- function Rt() {
599
- }
600
- function un(t, e) {
601
- return t != t ? e == e : t !== e || t && typeof t == "object" || typeof t == "function";
602
- }
603
- const Z = [];
604
- function Xt(t, e = Rt) {
605
- let n;
606
- const o = /* @__PURE__ */ new Set();
607
- function i(r) {
608
- if (un(t, r) && (t = r, n)) {
609
- const d = !Z.length;
610
- for (const f of o)
611
- f[1](), Z.push(f, t);
612
- if (d) {
613
- for (let f = 0; f < Z.length; f += 2)
614
- Z[f][0](Z[f + 1]);
615
- Z.length = 0;
616
- }
617
- }
618
- }
619
- function s(r) {
620
- i(r(t));
621
- }
622
- function a(r, d = Rt) {
623
- const f = [r, d];
624
- return o.add(f), o.size === 1 && (n = e(i, s) || Rt), r(t), () => {
625
- o.delete(f), o.size === 0 && n && (n(), n = null);
626
- };
627
- }
628
- return { set: i, update: s, subscribe: a };
629
- }
630
- const fn = (t) => {
631
- const { subscribe: e, set: n } = Xt();
632
- let o;
633
- return e((i) => o = i), t.observe(({ changes: i }) => {
634
- if (o) {
635
- (i.deleted || []).some((a) => a.id === o) && n(void 0);
636
- const s = (i.updated || []).find(({ oldValue: a }) => a.id === o);
637
- s && n(s.newValue.id);
638
- }
639
- }), {
640
- get current() {
641
- return o;
642
- },
643
- subscribe: e,
644
- set: n
645
- };
646
- };
647
- var hn = /* @__PURE__ */ ((t) => (t.EDIT = "EDIT", t.SELECT = "SELECT", t.NONE = "NONE", t))(hn || {});
648
- const mt = { selected: [] }, gn = (t, e, n) => {
649
- const { subscribe: o, set: i } = Xt(mt);
650
- let s = e, a = mt;
651
- o((p) => a = p);
652
- const r = () => {
653
- J(a, mt) || i(mt);
654
- }, d = () => {
655
- var p;
656
- return ((p = a.selected) == null ? void 0 : p.length) === 0;
657
- }, f = (p) => {
658
- if (d())
659
- return !1;
660
- const x = typeof p == "string" ? p : p.id;
661
- return a.selected.some((c) => c.id === x);
662
- }, g = (p, x) => {
663
- let c;
664
- if (Array.isArray(p)) {
665
- if (c = p.map((m) => t.getAnnotation(m)).filter(Boolean), c.length < p.length) {
666
- console.warn("Invalid selection: " + p.filter((m) => !c.some((S) => S.id === m)));
667
- return;
668
- }
669
- } else {
670
- const m = t.getAnnotation(p);
671
- if (!m) {
672
- console.warn("Invalid selection: " + p);
673
- return;
674
- }
675
- c = [m];
676
- }
677
- const l = c.reduce((m, S) => {
678
- const E = b(S);
679
- return E === "EDIT" ? [...m, { id: S.id, editable: !0 }] : E === "SELECT" ? [...m, { id: S.id }] : m;
680
- }, []);
681
- i({ selected: l, event: x });
682
- }, u = (p, x) => {
683
- const c = Array.isArray(p) ? p : [p], l = c.map((m) => t.getAnnotation(m)).filter((m) => !!m);
684
- i({
685
- selected: l.map((m) => {
686
- const S = x === void 0 ? b(m) === "EDIT" : x;
687
- return { id: m.id, editable: S };
688
- })
689
- }), l.length !== c.length && console.warn("Invalid selection", p);
690
- }, h = (p) => {
691
- if (d())
692
- return !1;
693
- const { selected: x } = a;
694
- x.some(({ id: c }) => p.includes(c)) && i({ selected: x.filter(({ id: c }) => !p.includes(c)) });
695
- }, v = (p) => {
696
- s = p, u(a.selected.map(({ id: x }) => x));
697
- }, b = (p) => pn(p, s, n);
698
- return t.observe(
699
- ({ changes: p }) => h((p.deleted || []).map((x) => x.id))
700
- ), {
701
- get event() {
702
- return a ? a.event : null;
703
- },
704
- get selected() {
705
- return a ? [...a.selected] : null;
706
- },
707
- get userSelectAction() {
708
- return s;
709
- },
710
- clear: r,
711
- evalSelectAction: b,
712
- isEmpty: d,
713
- isSelected: f,
714
- setSelected: u,
715
- setUserSelectAction: v,
716
- subscribe: o,
717
- userSelect: g
718
- };
719
- }, pn = (t, e, n) => {
720
- const o = n ? n.serialize(t) : t;
721
- return typeof e == "function" ? e(o) : e || "EDIT";
722
- }, Y = [];
723
- for (let t = 0; t < 256; ++t)
724
- Y.push((t + 256).toString(16).slice(1));
725
- function mn(t, e = 0) {
726
- return (Y[t[e + 0]] + Y[t[e + 1]] + Y[t[e + 2]] + Y[t[e + 3]] + "-" + Y[t[e + 4]] + Y[t[e + 5]] + "-" + Y[t[e + 6]] + Y[t[e + 7]] + "-" + Y[t[e + 8]] + Y[t[e + 9]] + "-" + Y[t[e + 10]] + Y[t[e + 11]] + Y[t[e + 12]] + Y[t[e + 13]] + Y[t[e + 14]] + Y[t[e + 15]]).toLowerCase();
727
- }
728
- let Mt;
729
- const yn = new Uint8Array(16);
730
- function bn() {
731
- if (!Mt) {
732
- if (typeof crypto > "u" || !crypto.getRandomValues)
733
- throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
734
- Mt = crypto.getRandomValues.bind(crypto);
735
- }
736
- return Mt(yn);
737
- }
738
- const wn = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), te = { randomUUID: wn };
739
- function he(t, e, n) {
740
- var o;
741
- if (te.randomUUID && !t)
742
- return te.randomUUID();
743
- t = t || {};
744
- const i = t.random ?? ((o = t.rng) == null ? void 0 : o.call(t)) ?? bn();
745
- if (i.length < 16)
746
- throw new Error("Random bytes length must be >= 16");
747
- return i[6] = i[6] & 15 | 64, i[8] = i[8] & 63 | 128, mn(i);
748
- }
749
- const kt = (t) => {
750
- const e = (n) => {
751
- const o = { ...n };
752
- return n.created && typeof n.created == "string" && (o.created = new Date(n.created)), n.updated && typeof n.updated == "string" && (o.updated = new Date(n.updated)), o;
753
- };
754
- return {
755
- ...t,
756
- bodies: (t.bodies || []).map(e),
757
- target: e(t.target)
758
- };
759
- }, Ao = (t, e, n, o) => ({
760
- id: he(),
761
- annotation: typeof t == "string" ? t : t.id,
762
- created: n || /* @__PURE__ */ new Date(),
763
- creator: o,
764
- ...e
765
- }), xn = (t, e) => {
766
- const n = new Set(t.bodies.map((o) => o.id));
767
- return e.bodies.filter((o) => !n.has(o.id));
768
- }, An = (t, e) => {
769
- const n = new Set(e.bodies.map((o) => o.id));
770
- return t.bodies.filter((o) => !n.has(o.id));
771
- }, vn = (t, e) => e.bodies.map((n) => {
772
- const o = t.bodies.find((i) => i.id === n.id);
773
- return { newBody: n, oldBody: o && !J(o, n) ? o : void 0 };
774
- }).filter(({ oldBody: n }) => n).map(({ oldBody: n, newBody: o }) => ({ oldBody: n, newBody: o })), En = (t, e) => !J(t.target, e.target), ge = (t, e) => {
775
- const n = xn(t, e), o = An(t, e), i = vn(t, e);
776
- return {
777
- oldValue: t,
778
- newValue: e,
779
- bodiesCreated: n.length > 0 ? n : void 0,
780
- bodiesDeleted: o.length > 0 ? o : void 0,
781
- bodiesUpdated: i.length > 0 ? i : void 0,
782
- targetUpdated: En(t, e) ? { oldTarget: t.target, newTarget: e.target } : void 0
783
403
  };
784
- };
785
- var B = /* @__PURE__ */ ((t) => (t.LOCAL = "LOCAL", t.REMOTE = "REMOTE", t.SILENT = "SILENT", t))(B || {});
786
- const Sn = (t, e) => {
787
- var n, o;
788
- const { changes: i, origin: s } = e;
789
- if (!(t.options.origin ? t.options.origin === s : s !== "SILENT"))
790
- return !1;
791
- if (t.options.ignore) {
792
- const { ignore: a } = t.options, r = (d) => d && d.length > 0;
793
- if (!(r(i.created) || r(i.deleted))) {
794
- const d = (n = i.updated) == null ? void 0 : n.some((g) => r(g.bodiesCreated) || r(g.bodiesDeleted) || r(g.bodiesUpdated)), f = (o = i.updated) == null ? void 0 : o.some((g) => g.targetUpdated);
795
- if (a === "BODY_ONLY" && d && !f || a === "TARGET_ONLY" && f && !d)
796
- return !1;
797
- }
798
- }
799
- if (t.options.annotations) {
800
- const a = /* @__PURE__ */ new Set([
801
- ...(i.created || []).map((r) => r.id),
802
- ...(i.deleted || []).map((r) => r.id),
803
- ...(i.updated || []).map(({ oldValue: r }) => r.id)
804
- ]);
805
- return !!(Array.isArray(t.options.annotations) ? t.options.annotations : [t.options.annotations]).find((r) => a.has(r));
806
- } else
807
- return !0;
808
- }, Cn = (t, e) => {
809
- const n = new Set((t.created || []).map((u) => u.id)), o = new Set((t.updated || []).map(({ newValue: u }) => u.id)), i = new Set((e.created || []).map((u) => u.id)), s = new Set((e.deleted || []).map((u) => u.id)), a = new Set((e.updated || []).map(({ oldValue: u }) => u.id)), r = new Set((e.updated || []).filter(({ oldValue: u }) => n.has(u.id) || o.has(u.id)).map(({ oldValue: u }) => u.id)), d = [
810
- ...(t.created || []).filter((u) => !s.has(u.id)).map((u) => a.has(u.id) ? e.updated.find(({ oldValue: h }) => h.id === u.id).newValue : u),
811
- ...e.created || []
812
- ], f = [
813
- ...(t.deleted || []).filter((u) => !i.has(u.id)),
814
- ...(e.deleted || []).filter((u) => !n.has(u.id))
815
- ], g = [
816
- ...(t.updated || []).filter(({ newValue: u }) => !s.has(u.id)).map((u) => {
817
- const { oldValue: h, newValue: v } = u;
818
- if (a.has(v.id)) {
819
- const b = e.updated.find((p) => p.oldValue.id === v.id).newValue;
820
- return ge(h, b);
821
- } else
822
- return u;
823
- }),
824
- ...(e.updated || []).filter(({ oldValue: u }) => !r.has(u.id))
825
- ];
826
- return { created: d, deleted: f, updated: g };
827
- }, yt = (t) => {
828
- const e = t.id === void 0 ? he() : t.id;
829
- return {
830
- ...t,
831
- id: e,
832
- bodies: t.bodies === void 0 ? [] : t.bodies.map((n) => ({
833
- ...n,
834
- annotation: e
835
- })),
836
- target: {
837
- ...t.target,
838
- annotation: e
839
- }
840
- };
841
- }, Ln = (t) => t.id !== void 0, Tn = () => {
842
- const t = /* @__PURE__ */ new Map(), e = /* @__PURE__ */ new Map(), n = [], o = (y, w = {}) => {
843
- n.push({ onChange: y, options: w });
844
- }, i = (y) => {
845
- const w = n.findIndex((A) => A.onChange == y);
846
- w > -1 && n.splice(w, 1);
847
- }, s = (y, w) => {
848
- const A = {
849
- origin: y,
850
- changes: {
851
- created: w.created || [],
852
- updated: w.updated || [],
853
- deleted: w.deleted || []
854
- },
855
- state: [...t.values()]
856
- };
857
- n.forEach((C) => {
858
- Sn(C, A) && C.onChange(A);
859
- });
860
- }, a = (y, w = B.LOCAL) => {
861
- if (y.id && t.get(y.id))
862
- throw Error(`Cannot add annotation ${y.id} - exists already`);
863
- {
864
- const A = yt(y);
865
- t.set(A.id, A), A.bodies.forEach((C) => e.set(C.id, A.id)), s(w, { created: [A] });
866
- }
867
- }, r = (y, w) => {
868
- const A = yt(typeof y == "string" ? w : y), C = typeof y == "string" ? y : y.id, I = C && t.get(C);
869
- if (I) {
870
- const O = ge(I, A);
871
- return C === A.id ? t.set(C, A) : (t.delete(C), t.set(A.id, A)), I.bodies.forEach((k) => e.delete(k.id)), A.bodies.forEach((k) => e.set(k.id, A.id)), O;
872
- } else
873
- console.warn(`Cannot update annotation ${C} - does not exist`);
874
- }, d = (y, w = B.LOCAL, A = B.LOCAL) => {
875
- const C = Ln(w) ? A : w, I = r(y, w);
876
- I && s(C, { updated: [I] });
877
- }, f = (y, w = B.LOCAL) => {
878
- t.get(y.id) ? d(y, w) : a(y, w);
879
- }, g = (y, w = B.LOCAL) => {
880
- const A = y.reduce((C, I) => {
881
- const O = r(I);
882
- return O ? [...C, O] : C;
883
- }, []);
884
- A.length > 0 && s(w, { updated: A });
885
- }, u = (y, w = B.LOCAL) => {
886
- const A = y.map(yt), { toAdd: C, toUpdate: I } = A.reduce((k, P) => t.get(P.id) ? { ...k, toUpdate: [...k.toUpdate, P] } : { ...k, toAdd: [...k.toAdd, P] }, { toAdd: [], toUpdate: [] }), O = I.map((k) => r(k, w)).filter(Boolean);
887
- C.forEach((k) => {
888
- t.set(k.id, k), k.bodies.forEach((P) => e.set(P.id, k.id));
889
- }), s(w, { created: C, updated: O });
890
- }, h = (y, w = B.LOCAL) => {
891
- const A = t.get(y.annotation);
892
- if (A) {
893
- const C = {
894
- ...A,
895
- bodies: [...A.bodies, y]
896
- };
897
- t.set(A.id, C), e.set(y.id, C.id), s(w, { updated: [{
898
- oldValue: A,
899
- newValue: C,
900
- bodiesCreated: [y]
901
- }] });
902
- } else
903
- console.warn(`Attempt to add body to missing annotation: ${y.annotation}`);
904
- }, v = () => [...t.values()], b = (y = B.LOCAL) => {
905
- const w = [...t.values()];
906
- t.clear(), e.clear(), s(y, { deleted: w });
907
- }, p = (y, w = !0, A = B.LOCAL) => {
908
- const C = y.map(yt);
909
- if (w) {
910
- const I = [...t.values()];
911
- t.clear(), e.clear(), C.forEach((O) => {
912
- t.set(O.id, O), O.bodies.forEach((k) => e.set(k.id, O.id));
913
- }), s(A, { created: C, deleted: I });
914
- } else {
915
- const I = y.reduce((O, k) => {
916
- const P = k.id && t.get(k.id);
917
- return P ? [...O, P] : O;
918
- }, []);
919
- if (I.length > 0)
920
- throw Error(`Bulk insert would overwrite the following annotations: ${I.map((O) => O.id).join(", ")}`);
921
- C.forEach((O) => {
922
- t.set(O.id, O), O.bodies.forEach((k) => e.set(k.id, O.id));
923
- }), s(A, { created: C });
924
- }
925
- }, x = (y) => {
926
- const w = typeof y == "string" ? y : y.id, A = t.get(w);
927
- if (A)
928
- return t.delete(w), A.bodies.forEach((C) => e.delete(C.id)), A;
929
- console.warn(`Attempt to delete missing annotation: ${w}`);
930
- }, c = (y, w = B.LOCAL) => {
931
- const A = x(y);
932
- A && s(w, { deleted: [A] });
933
- }, l = (y, w = B.LOCAL) => {
934
- const A = y.reduce((C, I) => {
935
- const O = x(I);
936
- return O ? [...C, O] : C;
937
- }, []);
938
- A.length > 0 && s(w, { deleted: A });
939
- }, m = (y) => {
940
- const w = t.get(y.annotation);
941
- if (w) {
942
- const A = w.bodies.find((C) => C.id === y.id);
943
- if (A) {
944
- e.delete(A.id);
945
- const C = {
946
- ...w,
947
- bodies: w.bodies.filter((I) => I.id !== y.id)
948
- };
949
- return t.set(w.id, C), {
950
- oldValue: w,
951
- newValue: C,
952
- bodiesDeleted: [A]
953
- };
954
- } else
955
- console.warn(`Attempt to delete missing body ${y.id} from annotation ${y.annotation}`);
956
- } else
957
- console.warn(`Attempt to delete body from missing annotation ${y.annotation}`);
958
- }, S = (y, w = B.LOCAL) => {
959
- const A = m(y);
960
- A && s(w, { updated: [A] });
961
- }, E = (y, w = B.LOCAL) => {
962
- const A = y.map((C) => m(C)).filter(Boolean);
963
- A.length > 0 && s(w, { updated: A });
964
- }, L = (y) => {
965
- const w = t.get(y);
966
- return w ? { ...w } : void 0;
967
- }, R = (y) => {
968
- const w = e.get(y);
969
- if (w) {
970
- const A = L(w).bodies.find((C) => C.id === y);
971
- if (A)
972
- return A;
973
- console.error(`Store integrity error: body ${y} in index, but not in annotation`);
974
- } else
975
- console.warn(`Attempt to retrieve missing body: ${y}`);
976
- }, U = (y, w) => {
977
- if (y.annotation !== w.annotation)
978
- throw "Annotation integrity violation: annotation ID must be the same when updating bodies";
979
- const A = t.get(y.annotation);
980
- if (A) {
981
- const C = A.bodies.find((O) => O.id === y.id), I = {
982
- ...A,
983
- bodies: A.bodies.map((O) => O.id === C.id ? w : O)
984
- };
985
- return t.set(A.id, I), C.id !== w.id && (e.delete(C.id), e.set(w.id, I.id)), {
986
- oldValue: A,
987
- newValue: I,
988
- bodiesUpdated: [{ oldBody: C, newBody: w }]
989
- };
990
- } else
991
- console.warn(`Attempt to add body to missing annotation ${y.annotation}`);
992
- }, V = (y, w, A = B.LOCAL) => {
993
- const C = U(y, w);
994
- C && s(A, { updated: [C] });
995
- }, T = (y, w = B.LOCAL) => {
996
- const A = y.map((C) => U({ id: C.id, annotation: C.annotation }, C)).filter(Boolean);
997
- s(w, { updated: A });
998
- }, M = (y) => {
999
- const w = t.get(y.annotation);
1000
- if (w) {
1001
- const A = {
1002
- ...w,
1003
- target: {
1004
- ...w.target,
1005
- ...y
1006
- }
1007
- };
1008
- return t.set(w.id, A), {
1009
- oldValue: w,
1010
- newValue: A,
1011
- targetUpdated: {
1012
- oldTarget: w.target,
1013
- newTarget: y
1014
- }
1015
- };
1016
- } else
1017
- console.warn(`Attempt to update target on missing annotation: ${y.annotation}`);
1018
- };
1019
- return {
1020
- addAnnotation: a,
1021
- addBody: h,
1022
- all: v,
1023
- bulkAddAnnotations: p,
1024
- bulkDeleteAnnotations: l,
1025
- bulkDeleteBodies: E,
1026
- bulkUpdateAnnotations: g,
1027
- bulkUpdateBodies: T,
1028
- bulkUpdateTargets: (y, w = B.LOCAL) => {
1029
- const A = y.map((C) => M(C)).filter(Boolean);
1030
- A.length > 0 && s(w, { updated: A });
1031
- },
1032
- bulkUpsertAnnotations: u,
1033
- clear: b,
1034
- deleteAnnotation: c,
1035
- deleteBody: S,
1036
- getAnnotation: L,
1037
- getBody: R,
1038
- observe: o,
1039
- unobserve: i,
1040
- updateAnnotation: d,
1041
- updateBody: V,
1042
- updateTarget: (y, w = B.LOCAL) => {
1043
- const A = M(y);
1044
- A && s(w, { updated: [A] });
1045
- },
1046
- upsertAnnotation: f
1047
- };
1048
- };
1049
- let On = () => ({
1050
- emit(t, ...e) {
1051
- for (let n = this.events[t] || [], o = 0, i = n.length; o < i; o++)
1052
- n[o](...e);
1053
- },
1054
- events: {},
1055
- on(t, e) {
1056
- var n;
1057
- return ((n = this.events)[t] || (n[t] = [])).push(e), () => {
1058
- var o;
1059
- this.events[t] = (o = this.events[t]) == null ? void 0 : o.filter((i) => e !== i);
1060
- };
1061
- }
1062
- });
1063
- const Rn = 250, Mn = (t, e) => {
1064
- const n = On(), o = [];
1065
- let i = -1, s = !1, a = 0;
1066
- const r = (b) => {
1067
- if (!s) {
1068
- const { changes: p } = b, x = performance.now();
1069
- if (x - a > Rn)
1070
- o.splice(i + 1), o.push(p), i = o.length - 1;
1071
- else {
1072
- const c = o.length - 1;
1073
- o[c] = Cn(o[c], p);
1074
- }
1075
- a = x;
1076
- }
1077
- s = !1;
1078
- };
1079
- t.observe(r, { origin: B.LOCAL });
1080
- const d = (b) => b && b.length > 0 && t.bulkDeleteAnnotations(b), f = (b) => b && b.length > 0 && t.bulkAddAnnotations(b, !1), g = (b) => b && b.length > 0 && t.bulkUpdateAnnotations(b.map(({ oldValue: p }) => p)), u = (b) => b && b.length > 0 && t.bulkUpdateAnnotations(b.map(({ newValue: p }) => p)), h = (b) => b && b.length > 0 && t.bulkAddAnnotations(b, !1), v = (b) => b && b.length > 0 && t.bulkDeleteAnnotations(b);
1081
- return {
1082
- canRedo: () => o.length - 1 > i,
1083
- canUndo: () => i > -1,
1084
- destroy: () => t.unobserve(r),
1085
- getHistory: () => ({ changes: [...o], pointer: i }),
1086
- on: (b, p) => n.on(b, p),
1087
- redo: () => {
1088
- if (o.length - 1 > i) {
1089
- s = !0;
1090
- const { created: b, updated: p, deleted: x } = o[i + 1];
1091
- f(b), u(p), v(x), n.emit("redo", o[i + 1]), i += 1;
1092
- }
1093
- },
1094
- undo: () => {
1095
- if (i > -1) {
1096
- s = !0;
1097
- const { created: b, updated: p, deleted: x } = o[i];
1098
- d(b), g(p), h(x), n.emit("undo", o[i]), i -= 1;
1099
- }
1100
- }
1101
- };
1102
- }, kn = () => {
1103
- const { subscribe: t, set: e } = Xt([]);
1104
- return {
1105
- subscribe: t,
1106
- set: e
1107
- };
1108
- }, Bn = (t, e, n, o) => {
1109
- const { hover: i, selection: s, store: a, viewport: r } = t, d = /* @__PURE__ */ new Map();
1110
- let f = [], g;
1111
- const u = (p, x) => {
1112
- d.has(p) ? d.get(p).push(x) : d.set(p, [x]);
1113
- }, h = (p, x) => {
1114
- const c = d.get(p);
1115
- if (c) {
1116
- const l = c.indexOf(x);
1117
- l !== -1 && c.splice(l, 1);
1118
- }
1119
- }, v = (p, x, c) => {
1120
- d.has(p) && setTimeout(() => {
1121
- d.get(p).forEach((l) => {
1122
- if (n) {
1123
- const m = Array.isArray(x) ? x.map((E) => n.serialize(E)) : n.serialize(x), S = c ? c instanceof PointerEvent ? c : n.serialize(c) : void 0;
1124
- l(m, S);
1125
- } else
1126
- l(x, c);
1127
- });
1128
- }, 1);
1129
- };
1130
- s.subscribe(({ selected: p }) => {
1131
- if (!(f.length === 0 && p.length === 0)) {
1132
- if (f.length === 0 && p.length > 0)
1133
- f = p.map(({ id: x }) => a.getAnnotation(x));
1134
- else if (f.length > 0 && p.length === 0)
1135
- f.forEach((x) => {
1136
- const c = a.getAnnotation(x.id);
1137
- c && !J(c, x) && v("updateAnnotation", c, x);
1138
- }), f = [];
1139
- else {
1140
- const x = new Set(f.map((l) => l.id)), c = new Set(p.map(({ id: l }) => l));
1141
- f.filter((l) => !c.has(l.id)).forEach((l) => {
1142
- const m = a.getAnnotation(l.id);
1143
- m && !J(m, l) && v("updateAnnotation", m, l);
1144
- }), f = [
1145
- // Remove annotations that were deselected
1146
- ...f.filter((l) => c.has(l.id)),
1147
- // Add editable annotations that were selected
1148
- ...p.filter(({ id: l }) => !x.has(l)).map(({ id: l }) => a.getAnnotation(l))
1149
- ];
1150
- }
1151
- v("selectionChanged", f);
1152
- }
1153
- }), i.subscribe((p) => {
1154
- !g && p ? v("mouseEnterAnnotation", a.getAnnotation(p)) : g && !p ? v("mouseLeaveAnnotation", a.getAnnotation(g)) : g && p && (v("mouseLeaveAnnotation", a.getAnnotation(g)), v("mouseEnterAnnotation", a.getAnnotation(p))), g = p;
1155
- }), r == null || r.subscribe((p) => v("viewportIntersect", p.map((x) => a.getAnnotation(x)))), a.observe((p) => {
1156
- const { created: x, deleted: c } = p.changes;
1157
- (x || []).forEach((l) => v("createAnnotation", l)), (c || []).forEach((l) => v("deleteAnnotation", l)), (p.changes.updated || []).filter((l) => [
1158
- ...l.bodiesCreated || [],
1159
- ...l.bodiesDeleted || [],
1160
- ...l.bodiesUpdated || []
1161
- ].length > 0).forEach(({ oldValue: l, newValue: m }) => {
1162
- const S = f.find((E) => E.id === l.id) || l;
1163
- f = f.map((E) => E.id === l.id ? m : E), v("updateAnnotation", m, S);
1164
- });
1165
- }, { origin: B.LOCAL }), a.observe((p) => {
1166
- if (f) {
1167
- const x = new Set(f.map((l) => l.id)), c = (p.changes.updated || []).filter(({ newValue: l }) => x.has(l.id)).map(({ newValue: l }) => l);
1168
- c.length > 0 && (f = f.map((l) => c.find((S) => S.id === l.id) || l));
1169
- }
1170
- }, { origin: B.REMOTE });
1171
- const b = (p) => (x) => {
1172
- const { updated: c } = x;
1173
- p ? (c || []).forEach((l) => v("updateAnnotation", l.oldValue, l.newValue)) : (c || []).forEach((l) => v("updateAnnotation", l.newValue, l.oldValue));
1174
- };
1175
- return e.on("undo", b(!0)), e.on("redo", b(!1)), { on: u, off: h, emit: v };
1176
- }, In = (t) => (e) => e.reduce((n, o) => {
1177
- const { parsed: i, error: s } = t.parse(o);
1178
- return s ? {
1179
- parsed: n.parsed,
1180
- failed: [...n.failed, o]
1181
- } : i ? {
1182
- parsed: [...n.parsed, i],
1183
- failed: n.failed
1184
- } : {
1185
- ...n
1186
- };
1187
- }, { parsed: [], failed: [] }), Un = (t, e, n) => {
1188
- const { store: o, selection: i } = t, s = (c) => {
1189
- if (n) {
1190
- const { parsed: l, error: m } = n.parse(c);
1191
- l ? o.addAnnotation(l, B.REMOTE) : console.error(m);
1192
- } else
1193
- o.addAnnotation(kt(c), B.REMOTE);
1194
- }, a = () => i.clear(), r = () => o.clear(), d = (c) => {
1195
- const l = o.getAnnotation(c);
1196
- return n && l ? n.serialize(l) : l;
1197
- }, f = () => n ? o.all().map(n.serialize) : o.all(), g = () => {
1198
- var c;
1199
- const l = (((c = i.selected) == null ? void 0 : c.map((m) => m.id)) || []).map((m) => o.getAnnotation(m)).filter(Boolean);
1200
- return n ? l.map(n.serialize) : l;
1201
- }, u = (c, l = !0) => fetch(c).then((m) => m.json()).then((m) => (v(m, l), m)), h = (c) => {
1202
- if (typeof c == "string") {
1203
- const l = o.getAnnotation(c);
1204
- if (o.deleteAnnotation(c), l)
1205
- return n ? n.serialize(l) : l;
1206
- } else {
1207
- const l = n ? n.parse(c).parsed : c;
1208
- if (l)
1209
- return o.deleteAnnotation(l), c;
1210
- }
1211
- }, v = (c, l = !0) => {
1212
- if (n) {
1213
- const m = n.parseAll || In(n), { parsed: S, failed: E } = m(c);
1214
- E.length > 0 && console.warn(`Discarded ${E.length} invalid annotations`, E), o.bulkAddAnnotations(S, l, B.REMOTE);
1215
- } else
1216
- o.bulkAddAnnotations(c.map(kt), l, B.REMOTE);
1217
- }, b = (c, l) => {
1218
- c ? i.setSelected(c, l) : i.clear();
1219
- }, p = (c) => {
1220
- i.clear(), i.setUserSelectAction(c);
1221
- }, x = (c) => {
1222
- if (n) {
1223
- const l = n.parse(c).parsed, m = n.serialize(o.getAnnotation(l.id));
1224
- return o.updateAnnotation(l), m;
1225
- } else {
1226
- const l = o.getAnnotation(c.id);
1227
- return o.updateAnnotation(kt(c)), l;
1228
- }
1229
- };
1230
- return {
1231
- addAnnotation: s,
1232
- cancelSelected: a,
1233
- canRedo: e.canRedo,
1234
- canUndo: e.canUndo,
1235
- clearAnnotations: r,
1236
- getAnnotationById: d,
1237
- getAnnotations: f,
1238
- getHistory: e.getHistory,
1239
- getSelected: g,
1240
- loadAnnotations: u,
1241
- redo: e.redo,
1242
- removeAnnotation: h,
1243
- setAnnotations: v,
1244
- setSelected: b,
1245
- setUserSelectAction: p,
1246
- undo: e.undo,
1247
- updateAnnotation: x
1248
- };
1249
- }, _n = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
1250
- let Nn = (t) => crypto.getRandomValues(new Uint8Array(t)), Vn = (t, e, n) => {
1251
- let o = (2 << Math.log2(t.length - 1)) - 1, i = -~(1.6 * o * e / t.length);
1252
- return (s = e) => {
1253
- let a = "";
1254
- for (; ; ) {
1255
- let r = n(i), d = i | 0;
1256
- for (; d--; )
1257
- if (a += t[r[d] & o] || "", a.length >= s) return a;
1258
- }
1259
- };
1260
- }, Dn = (t, e = 21) => Vn(t, e | 0, Nn), Kn = (t = 21) => {
1261
- let e = "", n = crypto.getRandomValues(new Uint8Array(t |= 0));
1262
- for (; t--; )
1263
- e += _n[n[t] & 63];
1264
- return e;
1265
- };
1266
- const Yn = () => ({ isGuest: !0, id: Dn("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_", 20)() }), Xn = (t) => {
1267
- const e = JSON.stringify(t);
1268
- let n = 0;
1269
- for (let o = 0, i = e.length; o < i; o++) {
1270
- let s = e.charCodeAt(o);
1271
- n = (n << 5) - n + s, n |= 0;
1272
- }
1273
- return `${n}`;
1274
- }, pe = (t) => t ? typeof t == "object" ? { ...t } : t : void 0, Pn = (t, e) => (Array.isArray(t) ? t : [t]).map((n) => {
1275
- const { id: o, type: i, purpose: s, value: a, created: r, modified: d, creator: f, ...g } = n;
1276
- return {
1277
- id: o || `temp-${Xn(n)}`,
1278
- annotation: e,
1279
- type: i,
1280
- purpose: s,
1281
- value: a,
1282
- creator: pe(f),
1283
- created: r ? new Date(r) : void 0,
1284
- updated: d ? new Date(d) : void 0,
1285
- ...g
1286
- };
1287
- }), $n = (t) => t.map((e) => {
1288
- var n;
1289
- const { annotation: o, created: i, updated: s, ...a } = e, r = {
1290
- ...a,
1291
- created: i == null ? void 0 : i.toISOString(),
1292
- modified: s == null ? void 0 : s.toISOString()
1293
- };
1294
- return (n = r.id) != null && n.startsWith("temp-") && delete r.id, r;
1295
- });
1296
- Kn();
1297
- const vo = (t, e) => ({
1298
- parse: (n) => zn(n),
1299
- serialize: (n) => Fn(n, t, e)
1300
- }), Hn = (t) => t.quote !== void 0 && t.start !== void 0 && t.end !== void 0, jn = (t) => {
404
+ }, zt = (t, n, e) => j(t, n, e, Xt(t)), fe = (t, n) => ({
405
+ parse: (e) => Gt(e),
406
+ serialize: (e) => Qt(e, t, n)
407
+ }), qt = (t) => t.quote !== void 0 && t.start !== void 0 && t.end !== void 0, jt = (t) => {
1301
408
  const {
1302
- id: e,
1303
- creator: n,
409
+ id: n,
410
+ creator: e,
1304
411
  created: o,
1305
- modified: i,
1306
- target: s
1307
- } = t, a = Array.isArray(s) ? s : [s];
1308
- if (a.length === 0)
412
+ modified: s,
413
+ target: r
414
+ } = t, l = Array.isArray(r) ? r : [r];
415
+ if (l.length === 0)
1309
416
  return { error: Error(`No targets found for annotation: ${t.id}`) };
1310
- const r = {
1311
- creator: pe(n),
417
+ const u = {
418
+ creator: dt(e),
1312
419
  created: o ? new Date(o) : void 0,
1313
- updated: i ? new Date(i) : void 0,
1314
- annotation: e,
420
+ updated: s ? new Date(s) : void 0,
421
+ annotation: n,
1315
422
  selector: [],
1316
423
  // @ts-expect-error: `styleClass` is not part of the core `TextAnnotationTarget` type
1317
- styleClass: "styleClass" in a[0] ? a[0].styleClass : void 0
424
+ styleClass: "styleClass" in l[0] ? l[0].styleClass : void 0
1318
425
  };
1319
- for (const d of a) {
1320
- const g = (Array.isArray(d.selector) ? d.selector : [d.selector]).reduce((u, h) => {
1321
- switch (h.type) {
426
+ for (const m of l) {
427
+ const h = (Array.isArray(m.selector) ? m.selector : [m.selector]).reduce((d, i) => {
428
+ switch (i.type) {
1322
429
  case "TextQuoteSelector":
1323
- u.quote = h.exact;
430
+ d.quote = i.exact;
1324
431
  break;
1325
432
  case "TextPositionSelector":
1326
- u.start = h.start, u.end = h.end;
433
+ d.start = i.start, d.end = i.end;
1327
434
  break;
1328
435
  }
1329
- return u;
436
+ return d;
1330
437
  }, {});
1331
- if (Hn(g))
1332
- r.selector.push(
438
+ if (qt(h))
439
+ u.selector.push(
1333
440
  {
1334
- ...g,
1335
- id: d.id,
441
+ ...h,
442
+ id: m.id,
1336
443
  // @ts-expect-error: `scope` is not part of the core `TextSelector` type
1337
- scope: d.scope
444
+ scope: m.scope
1338
445
  }
1339
446
  );
1340
447
  else {
1341
- const u = [
1342
- g.start ? void 0 : "TextPositionSelector",
1343
- g.quote ? void 0 : "TextQuoteSelector"
448
+ const d = [
449
+ h.start ? void 0 : "TextPositionSelector",
450
+ h.quote ? void 0 : "TextQuoteSelector"
1344
451
  ].filter(Boolean);
1345
- return { error: Error(`Missing selector types: ${u.join(" and ")} for annotation: ${t.id}`) };
452
+ return { error: Error(`Missing selector types: ${d.join(" and ")} for annotation: ${t.id}`) };
1346
453
  }
1347
454
  }
1348
- return { parsed: r };
1349
- }, zn = (t) => {
1350
- const e = t.id || fe(), {
1351
- creator: n,
455
+ return { parsed: u };
456
+ }, Gt = (t) => {
457
+ const n = t.id || J(), {
458
+ creator: e,
1352
459
  created: o,
1353
- modified: i,
1354
- body: s,
1355
- ...a
1356
- } = t, r = Pn(s, e), d = jn(t);
1357
- return "error" in d ? { error: d.error } : {
460
+ modified: s,
461
+ body: r,
462
+ ...l
463
+ } = t, u = lt(r, n), m = jt(t);
464
+ return "error" in m ? { error: m.error } : {
1358
465
  parsed: {
1359
- ...a,
1360
- id: e,
1361
- bodies: r,
1362
- target: d.parsed
1363
- }
1364
- };
1365
- }, Fn = (t, e, n) => {
1366
- const { bodies: o, target: i, ...s } = t, {
1367
- selector: a,
1368
- creator: r,
1369
- created: d,
1370
- updated: f,
1371
- ...g
1372
- } = i, u = a.map((h) => {
1373
- const { id: v, quote: b, start: p, end: x, range: c } = h, l = {
466
+ ...l,
467
+ id: n,
468
+ bodies: u,
469
+ target: m.parsed
470
+ }
471
+ };
472
+ }, Qt = (t, n, e) => {
473
+ const { bodies: o, target: s, ...r } = t, {
474
+ selector: l,
475
+ creator: u,
476
+ created: m,
477
+ updated: S,
478
+ ...h
479
+ } = s, d = l.map((i) => {
480
+ const { id: E, quote: w, start: x, end: A, range: a } = i, c = {
1374
481
  type: "TextQuoteSelector",
1375
- exact: b
482
+ exact: w
1376
483
  };
1377
- if (n) {
1378
- const { prefix: S, suffix: E } = ke(c, n);
1379
- l.prefix = S, l.suffix = E;
484
+ if (e) {
485
+ const { prefix: b, suffix: p } = Tt(a, e);
486
+ c.prefix = b, c.suffix = p;
1380
487
  }
1381
- const m = {
488
+ const y = {
1382
489
  type: "TextPositionSelector",
1383
- start: p,
1384
- end: x
490
+ start: x,
491
+ end: A
1385
492
  };
1386
493
  return {
1387
- ...g,
1388
- id: v,
494
+ ...h,
495
+ id: E,
1389
496
  // @ts-expect-error: `scope` is not part of the core `TextSelector` type
1390
- scope: "scope" in h ? h.scope : void 0,
1391
- source: e,
1392
- selector: [l, m]
497
+ scope: "scope" in i ? i.scope : void 0,
498
+ source: n,
499
+ selector: [c, y]
1393
500
  };
1394
501
  });
1395
502
  return {
1396
- ...s,
503
+ ...r,
1397
504
  "@context": "http://www.w3.org/ns/anno.jsonld",
1398
505
  id: t.id,
1399
506
  type: "Annotation",
1400
- body: $n(t.bodies),
1401
- creator: r,
1402
- created: d == null ? void 0 : d.toISOString(),
1403
- modified: f == null ? void 0 : f.toISOString(),
1404
- target: u
1405
- };
1406
- };
1407
- function me(t, e, n = 0, o = t.length - 1, i = Wn) {
1408
- for (; o > n; ) {
1409
- if (o - n > 600) {
1410
- const d = o - n + 1, f = e - n + 1, g = Math.log(d), u = 0.5 * Math.exp(2 * g / 3), h = 0.5 * Math.sqrt(g * u * (d - u) / d) * (f - d / 2 < 0 ? -1 : 1), v = Math.max(n, Math.floor(e - f * u / d + h)), b = Math.min(o, Math.floor(e + (d - f) * u / d + h));
1411
- me(t, e, v, b, i);
1412
- }
1413
- const s = t[e];
1414
- let a = n, r = o;
1415
- for (it(t, n, e), i(t[o], s) > 0 && it(t, n, o); a < r; ) {
1416
- for (it(t, a, r), a++, r--; i(t[a], s) < 0; ) a++;
1417
- for (; i(t[r], s) > 0; ) r--;
1418
- }
1419
- i(t[n], s) === 0 ? it(t, n, r) : (r++, it(t, r, o)), r <= e && (n = r + 1), e <= r && (o = r - 1);
1420
- }
1421
- }
1422
- function it(t, e, n) {
1423
- const o = t[e];
1424
- t[e] = t[n], t[n] = o;
1425
- }
1426
- function Wn(t, e) {
1427
- return t < e ? -1 : t > e ? 1 : 0;
1428
- }
1429
- class qn {
1430
- constructor(e = 9) {
1431
- this._maxEntries = Math.max(4, e), this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4)), this.clear();
1432
- }
1433
- all() {
1434
- return this._all(this.data, []);
1435
- }
1436
- search(e) {
1437
- let n = this.data;
1438
- const o = [];
1439
- if (!wt(e, n)) return o;
1440
- const i = this.toBBox, s = [];
1441
- for (; n; ) {
1442
- for (let a = 0; a < n.children.length; a++) {
1443
- const r = n.children[a], d = n.leaf ? i(r) : r;
1444
- wt(e, d) && (n.leaf ? o.push(r) : It(e, d) ? this._all(r, o) : s.push(r));
1445
- }
1446
- n = s.pop();
1447
- }
1448
- return o;
1449
- }
1450
- collides(e) {
1451
- let n = this.data;
1452
- if (!wt(e, n)) return !1;
1453
- const o = [];
1454
- for (; n; ) {
1455
- for (let i = 0; i < n.children.length; i++) {
1456
- const s = n.children[i], a = n.leaf ? this.toBBox(s) : s;
1457
- if (wt(e, a)) {
1458
- if (n.leaf || It(e, a)) return !0;
1459
- o.push(s);
1460
- }
1461
- }
1462
- n = o.pop();
1463
- }
1464
- return !1;
1465
- }
1466
- load(e) {
1467
- if (!(e && e.length)) return this;
1468
- if (e.length < this._minEntries) {
1469
- for (let o = 0; o < e.length; o++)
1470
- this.insert(e[o]);
1471
- return this;
1472
- }
1473
- let n = this._build(e.slice(), 0, e.length - 1, 0);
1474
- if (!this.data.children.length)
1475
- this.data = n;
1476
- else if (this.data.height === n.height)
1477
- this._splitRoot(this.data, n);
1478
- else {
1479
- if (this.data.height < n.height) {
1480
- const o = this.data;
1481
- this.data = n, n = o;
1482
- }
1483
- this._insert(n, this.data.height - n.height - 1, !0);
1484
- }
1485
- return this;
1486
- }
1487
- insert(e) {
1488
- return e && this._insert(e, this.data.height - 1), this;
1489
- }
1490
- clear() {
1491
- return this.data = et([]), this;
1492
- }
1493
- remove(e, n) {
1494
- if (!e) return this;
1495
- let o = this.data;
1496
- const i = this.toBBox(e), s = [], a = [];
1497
- let r, d, f;
1498
- for (; o || s.length; ) {
1499
- if (o || (o = s.pop(), d = s[s.length - 1], r = a.pop(), f = !0), o.leaf) {
1500
- const g = Gn(e, o.children, n);
1501
- if (g !== -1)
1502
- return o.children.splice(g, 1), s.push(o), this._condense(s), this;
1503
- }
1504
- !f && !o.leaf && It(o, i) ? (s.push(o), a.push(r), r = 0, d = o, o = o.children[0]) : d ? (r++, o = d.children[r], f = !1) : o = null;
1505
- }
1506
- return this;
1507
- }
1508
- toBBox(e) {
1509
- return e;
1510
- }
1511
- compareMinX(e, n) {
1512
- return e.minX - n.minX;
1513
- }
1514
- compareMinY(e, n) {
1515
- return e.minY - n.minY;
1516
- }
1517
- toJSON() {
1518
- return this.data;
1519
- }
1520
- fromJSON(e) {
1521
- return this.data = e, this;
1522
- }
1523
- _all(e, n) {
1524
- const o = [];
1525
- for (; e; )
1526
- e.leaf ? n.push(...e.children) : o.push(...e.children), e = o.pop();
1527
- return n;
1528
- }
1529
- _build(e, n, o, i) {
1530
- const s = o - n + 1;
1531
- let a = this._maxEntries, r;
1532
- if (s <= a)
1533
- return r = et(e.slice(n, o + 1)), tt(r, this.toBBox), r;
1534
- i || (i = Math.ceil(Math.log(s) / Math.log(a)), a = Math.ceil(s / Math.pow(a, i - 1))), r = et([]), r.leaf = !1, r.height = i;
1535
- const d = Math.ceil(s / a), f = d * Math.ceil(Math.sqrt(a));
1536
- ee(e, n, o, f, this.compareMinX);
1537
- for (let g = n; g <= o; g += f) {
1538
- const u = Math.min(g + f - 1, o);
1539
- ee(e, g, u, d, this.compareMinY);
1540
- for (let h = g; h <= u; h += d) {
1541
- const v = Math.min(h + d - 1, u);
1542
- r.children.push(this._build(e, h, v, i - 1));
1543
- }
1544
- }
1545
- return tt(r, this.toBBox), r;
1546
- }
1547
- _chooseSubtree(e, n, o, i) {
1548
- for (; i.push(n), !(n.leaf || i.length - 1 === o); ) {
1549
- let s = 1 / 0, a = 1 / 0, r;
1550
- for (let d = 0; d < n.children.length; d++) {
1551
- const f = n.children[d], g = Bt(f), u = Zn(e, f) - g;
1552
- u < a ? (a = u, s = g < s ? g : s, r = f) : u === a && g < s && (s = g, r = f);
1553
- }
1554
- n = r || n.children[0];
1555
- }
1556
- return n;
1557
- }
1558
- _insert(e, n, o) {
1559
- const i = o ? e : this.toBBox(e), s = [], a = this._chooseSubtree(i, this.data, n, s);
1560
- for (a.children.push(e), lt(a, i); n >= 0 && s[n].children.length > this._maxEntries; )
1561
- this._split(s, n), n--;
1562
- this._adjustParentBBoxes(i, s, n);
1563
- }
1564
- // split overflowed node into two
1565
- _split(e, n) {
1566
- const o = e[n], i = o.children.length, s = this._minEntries;
1567
- this._chooseSplitAxis(o, s, i);
1568
- const a = this._chooseSplitIndex(o, s, i), r = et(o.children.splice(a, o.children.length - a));
1569
- r.height = o.height, r.leaf = o.leaf, tt(o, this.toBBox), tt(r, this.toBBox), n ? e[n - 1].children.push(r) : this._splitRoot(o, r);
1570
- }
1571
- _splitRoot(e, n) {
1572
- this.data = et([e, n]), this.data.height = e.height + 1, this.data.leaf = !1, tt(this.data, this.toBBox);
1573
- }
1574
- _chooseSplitIndex(e, n, o) {
1575
- let i, s = 1 / 0, a = 1 / 0;
1576
- for (let r = n; r <= o - n; r++) {
1577
- const d = at(e, 0, r, this.toBBox), f = at(e, r, o, this.toBBox), g = to(d, f), u = Bt(d) + Bt(f);
1578
- g < s ? (s = g, i = r, a = u < a ? u : a) : g === s && u < a && (a = u, i = r);
1579
- }
1580
- return i || o - n;
1581
- }
1582
- // sorts node children by the best axis for split
1583
- _chooseSplitAxis(e, n, o) {
1584
- const i = e.leaf ? this.compareMinX : Qn, s = e.leaf ? this.compareMinY : Jn, a = this._allDistMargin(e, n, o, i), r = this._allDistMargin(e, n, o, s);
1585
- a < r && e.children.sort(i);
1586
- }
1587
- // total margin of all possible split distributions where each node is at least m full
1588
- _allDistMargin(e, n, o, i) {
1589
- e.children.sort(i);
1590
- const s = this.toBBox, a = at(e, 0, n, s), r = at(e, o - n, o, s);
1591
- let d = bt(a) + bt(r);
1592
- for (let f = n; f < o - n; f++) {
1593
- const g = e.children[f];
1594
- lt(a, e.leaf ? s(g) : g), d += bt(a);
1595
- }
1596
- for (let f = o - n - 1; f >= n; f--) {
1597
- const g = e.children[f];
1598
- lt(r, e.leaf ? s(g) : g), d += bt(r);
1599
- }
1600
- return d;
1601
- }
1602
- _adjustParentBBoxes(e, n, o) {
1603
- for (let i = o; i >= 0; i--)
1604
- lt(n[i], e);
1605
- }
1606
- _condense(e) {
1607
- for (let n = e.length - 1, o; n >= 0; n--)
1608
- e[n].children.length === 0 ? n > 0 ? (o = e[n - 1].children, o.splice(o.indexOf(e[n]), 1)) : this.clear() : tt(e[n], this.toBBox);
1609
- }
1610
- }
1611
- function Gn(t, e, n) {
1612
- if (!n) return e.indexOf(t);
1613
- for (let o = 0; o < e.length; o++)
1614
- if (n(t, e[o])) return o;
1615
- return -1;
1616
- }
1617
- function tt(t, e) {
1618
- at(t, 0, t.children.length, e, t);
1619
- }
1620
- function at(t, e, n, o, i) {
1621
- i || (i = et(null)), i.minX = 1 / 0, i.minY = 1 / 0, i.maxX = -1 / 0, i.maxY = -1 / 0;
1622
- for (let s = e; s < n; s++) {
1623
- const a = t.children[s];
1624
- lt(i, t.leaf ? o(a) : a);
1625
- }
1626
- return i;
1627
- }
1628
- function lt(t, e) {
1629
- return t.minX = Math.min(t.minX, e.minX), t.minY = Math.min(t.minY, e.minY), t.maxX = Math.max(t.maxX, e.maxX), t.maxY = Math.max(t.maxY, e.maxY), t;
1630
- }
1631
- function Qn(t, e) {
1632
- return t.minX - e.minX;
1633
- }
1634
- function Jn(t, e) {
1635
- return t.minY - e.minY;
1636
- }
1637
- function Bt(t) {
1638
- return (t.maxX - t.minX) * (t.maxY - t.minY);
1639
- }
1640
- function bt(t) {
1641
- return t.maxX - t.minX + (t.maxY - t.minY);
1642
- }
1643
- function Zn(t, e) {
1644
- return (Math.max(e.maxX, t.maxX) - Math.min(e.minX, t.minX)) * (Math.max(e.maxY, t.maxY) - Math.min(e.minY, t.minY));
1645
- }
1646
- function to(t, e) {
1647
- const n = Math.max(t.minX, e.minX), o = Math.max(t.minY, e.minY), i = Math.min(t.maxX, e.maxX), s = Math.min(t.maxY, e.maxY);
1648
- return Math.max(0, i - n) * Math.max(0, s - o);
1649
- }
1650
- function It(t, e) {
1651
- return t.minX <= e.minX && t.minY <= e.minY && e.maxX <= t.maxX && e.maxY <= t.maxY;
1652
- }
1653
- function wt(t, e) {
1654
- return e.minX <= t.maxX && e.minY <= t.maxY && e.maxX >= t.minX && e.maxY >= t.minY;
1655
- }
1656
- function et(t) {
1657
- return {
1658
- children: t,
1659
- height: 1,
1660
- leaf: !0,
1661
- minX: 1 / 0,
1662
- minY: 1 / 0,
1663
- maxX: -1 / 0,
1664
- maxY: -1 / 0
1665
- };
1666
- }
1667
- function ee(t, e, n, o, i) {
1668
- const s = [e, n];
1669
- for (; s.length; ) {
1670
- if (n = s.pop(), e = s.pop(), n - e <= o) continue;
1671
- const a = e + Math.ceil((n - e) / o / 2) * o;
1672
- me(t, a, e, n, i), s.push(e, a, a, n);
1673
- }
1674
- }
1675
- const eo = (t, e) => {
1676
- const n = new qn(), o = /* @__PURE__ */ new Map(), i = (c, l) => {
1677
- const m = c.selector.flatMap((E) => {
1678
- const L = q([E]) ? E.range : ae(E, e).range;
1679
- return Array.from(L.getClientRects());
1680
- }), S = Ne(m).map(({ left: E, top: L, right: R, bottom: U }) => new DOMRect(E - l.left, L - l.top, R - E, U - L));
1681
- return S.map((E) => {
1682
- const { x: L, y: R, width: U, height: V } = E;
507
+ body: ct(t.bodies),
508
+ creator: u,
509
+ created: m == null ? void 0 : m.toISOString(),
510
+ modified: S == null ? void 0 : S.toISOString(),
511
+ target: d
512
+ };
513
+ }, Zt = (t, n) => {
514
+ const e = new St(), o = /* @__PURE__ */ new Map(), s = (a, c) => {
515
+ const y = a.selector.flatMap((p) => {
516
+ const f = I([p]) ? p.range : et(p, n).range;
517
+ return Array.from(f.getClientRects());
518
+ }), b = Bt(y).map(({ left: p, top: f, right: C, bottom: T }) => new DOMRect(p - c.left, f - c.top, C - p, T - f));
519
+ return b.map((p) => {
520
+ const { x: f, y: C, width: T, height: g } = p;
1683
521
  return {
1684
- minX: L,
1685
- minY: R,
1686
- maxX: L + U,
1687
- maxY: R + V,
522
+ minX: f,
523
+ minY: C,
524
+ maxX: f + T,
525
+ maxY: C + g,
1688
526
  annotation: {
1689
- id: c.annotation,
1690
- rects: S
527
+ id: a.annotation,
528
+ rects: b
1691
529
  }
1692
530
  };
1693
531
  });
1694
- }, s = () => [...o.values()], a = () => {
1695
- n.clear(), o.clear();
1696
- }, r = (c) => {
1697
- const l = i(c, e.getBoundingClientRect());
1698
- l.length !== 0 && (l.forEach((m) => n.insert(m)), o.set(c.annotation, l));
1699
- }, d = (c) => {
1700
- const l = o.get(c.annotation);
1701
- l && (l.forEach((m) => n.remove(m)), o.delete(c.annotation));
1702
- }, f = (c) => {
1703
- d(c), r(c);
1704
- }, g = (c, l = !0) => {
1705
- l && a();
1706
- const m = e.getBoundingClientRect(), S = c.map((L) => ({ target: L, rects: i(L, m) }));
1707
- S.forEach(({ target: L, rects: R }) => {
1708
- R.length > 0 && o.set(L.annotation, R);
532
+ }, r = () => [...o.values()], l = () => {
533
+ e.clear(), o.clear();
534
+ }, u = (a) => {
535
+ const c = s(a, n.getBoundingClientRect());
536
+ c.length !== 0 && (c.forEach((y) => e.insert(y)), o.set(a.annotation, c));
537
+ }, m = (a) => {
538
+ const c = o.get(a.annotation);
539
+ c && (c.forEach((y) => e.remove(y)), o.delete(a.annotation));
540
+ }, S = (a) => {
541
+ m(a), u(a);
542
+ }, h = (a, c = !0) => {
543
+ c && l();
544
+ const y = n.getBoundingClientRect(), b = a.map((f) => ({ target: f, rects: s(f, y) }));
545
+ b.forEach(({ target: f, rects: C }) => {
546
+ C.length > 0 && o.set(f.annotation, C);
1709
547
  });
1710
- const E = S.flatMap(({ rects: L }) => L);
1711
- n.load(E);
1712
- }, u = (c, l, m = !1) => {
1713
- const S = n.search({
1714
- minX: c,
1715
- minY: l,
1716
- maxX: c,
1717
- maxY: l
1718
- }), E = (L) => L.annotation.rects.reduce((R, U) => R + U.width * U.height, 0);
1719
- return S.length > 0 ? (S.sort((L, R) => E(L) - E(R)), m ? S.map((L) => L.annotation.id) : [S[0].annotation.id]) : [];
1720
- }, h = (c) => {
1721
- const l = v(c);
1722
- if (l.length === 0)
548
+ const p = b.flatMap(({ rects: f }) => f);
549
+ e.load(p);
550
+ }, d = (a, c, y = !1) => {
551
+ const b = e.search({
552
+ minX: a,
553
+ minY: c,
554
+ maxX: a,
555
+ maxY: c
556
+ }), p = (f) => f.annotation.rects.reduce((C, T) => C + T.width * T.height, 0);
557
+ return b.length > 0 ? (b.sort((f, C) => p(f) - p(C)), y ? b.map((f) => f.annotation.id) : [b[0].annotation.id]) : [];
558
+ }, i = (a) => {
559
+ const c = E(a);
560
+ if (c.length === 0)
1723
561
  return;
1724
- let m = l[0].left, S = l[0].top, E = l[0].right, L = l[0].bottom;
1725
- for (let R = 1; R < l.length; R++) {
1726
- const U = l[R];
1727
- m = Math.min(m, U.left), S = Math.min(S, U.top), E = Math.max(E, U.right), L = Math.max(L, U.bottom);
562
+ let y = c[0].left, b = c[0].top, p = c[0].right, f = c[0].bottom;
563
+ for (let C = 1; C < c.length; C++) {
564
+ const T = c[C];
565
+ y = Math.min(y, T.left), b = Math.min(b, T.top), p = Math.max(p, T.right), f = Math.max(f, T.bottom);
1728
566
  }
1729
- return new DOMRect(m, S, E - m, L - S);
1730
- }, v = (c) => {
1731
- const l = o.get(c);
1732
- return l ? l[0].annotation.rects : [];
567
+ return new DOMRect(y, b, p - y, f - b);
568
+ }, E = (a) => {
569
+ const c = o.get(a);
570
+ return c ? c[0].annotation.rects : [];
1733
571
  };
1734
572
  return {
1735
- all: s,
1736
- clear: a,
1737
- getAt: u,
1738
- getAnnotationBounds: h,
1739
- getAnnotationRects: v,
1740
- getIntersecting: (c, l, m, S) => {
1741
- const E = n.search({ minX: c, minY: l, maxX: m, maxY: S }), L = new Set(E.map((R) => R.annotation.id));
1742
- return Array.from(L).map((R) => ({
1743
- annotation: t.getAnnotation(R),
1744
- rects: v(R)
1745
- })).filter((R) => !!R.annotation);
573
+ all: r,
574
+ clear: l,
575
+ getAt: d,
576
+ getAnnotationBounds: i,
577
+ getAnnotationRects: E,
578
+ getIntersecting: (a, c, y, b) => {
579
+ const p = e.search({ minX: a, minY: c, maxX: y, maxY: b }), f = new Set(p.map((C) => C.annotation.id));
580
+ return Array.from(f).map((C) => ({
581
+ annotation: t.getAnnotation(C),
582
+ rects: E(C)
583
+ })).filter((C) => !!C.annotation);
1746
584
  },
1747
- insert: r,
1748
- recalculate: () => g(t.all().map((c) => c.target), !0),
1749
- remove: d,
1750
- set: g,
1751
- size: () => n.all().length,
1752
- update: f
1753
- };
1754
- }, no = (t, e) => {
1755
- const n = Tn(), o = eo(n, t), i = gn(n, e.userSelectAction, e.adapter), s = fn(n), a = kn(), r = (c, l = B.LOCAL) => {
1756
- const m = St(c, t), S = q(m.target.selector);
1757
- return S && n.addAnnotation(m, l), S;
1758
- }, d = (c, l = !0, m = B.LOCAL) => {
1759
- const S = c.map((L) => St(L, t)), E = S.filter((L) => !q(L.target.selector));
1760
- return n.bulkAddAnnotations(S, l, m), E;
1761
- }, f = (c, l = B.LOCAL) => {
1762
- const m = c.map((E) => St(E, t)), S = m.filter((E) => !q(E.target.selector));
1763
- return m.forEach((E) => {
1764
- n.getAnnotation(E.id) ? n.updateAnnotation(E, l) : n.addAnnotation(E, l);
1765
- }), S;
1766
- }, g = (c, l = B.LOCAL) => {
1767
- const m = At(c, t);
1768
- n.updateTarget(m, l);
1769
- }, u = (c, l = B.LOCAL) => {
1770
- const m = c.map((S) => At(S, t));
1771
- n.bulkUpdateTargets(m, l);
1772
- };
1773
- function h(c, l, m, S) {
1774
- const E = m || !!S, L = o.getAt(c, l, E).map((U) => n.getAnnotation(U)), R = S ? L.filter(S) : L;
1775
- if (R.length !== 0)
1776
- return m ? R : R[0];
1777
- }
1778
- const v = (c) => {
1779
- if (o.getAnnotationRects(c).length !== 0)
1780
- return o.getAnnotationBounds(c);
1781
- }, b = (c, l, m, S) => o.getIntersecting(c, l, m, S), p = (c) => o.getAnnotationRects(c), x = () => o.recalculate();
1782
- return n.observe(({ changes: c }) => {
1783
- const l = (c.deleted || []).filter((E) => q(E.target.selector)), m = (c.created || []).filter((E) => q(E.target.selector)), S = (c.updated || []).filter((E) => q(E.newValue.target.selector));
1784
- (l == null ? void 0 : l.length) > 0 && l.forEach((E) => o.remove(E.target)), m.length > 0 && o.set(m.map((E) => E.target), !1), (S == null ? void 0 : S.length) > 0 && S.forEach(({ newValue: E }) => o.update(E.target));
585
+ insert: u,
586
+ recalculate: () => h(t.all().map((a) => a.target), !0),
587
+ remove: m,
588
+ set: h,
589
+ size: () => e.all().length,
590
+ update: S
591
+ };
592
+ }, Jt = (t, n) => {
593
+ const e = ut(), o = Zt(e, t), s = ft(e, n.userSelectAction, n.adapter), r = gt(e), l = mt(), u = (a, c = K.LOCAL) => {
594
+ const y = z(a, t), b = I(y.target.selector);
595
+ return b && e.addAnnotation(y, c), b;
596
+ }, m = (a, c = !0, y = K.LOCAL) => {
597
+ const b = a.map((f) => z(f, t)), p = b.filter((f) => !I(f.target.selector));
598
+ return e.bulkAddAnnotations(b, c, y), p;
599
+ }, S = (a, c = K.LOCAL) => {
600
+ const y = a.map((p) => z(p, t)), b = y.filter((p) => !I(p.target.selector));
601
+ return y.forEach((p) => {
602
+ e.getAnnotation(p.id) ? e.updateAnnotation(p, c) : e.addAnnotation(p, c);
603
+ }), b;
604
+ }, h = (a, c = K.LOCAL) => {
605
+ const y = W(a, t);
606
+ e.updateTarget(y, c);
607
+ }, d = (a, c = K.LOCAL) => {
608
+ const y = a.map((b) => W(b, t));
609
+ e.bulkUpdateTargets(y, c);
610
+ };
611
+ function i(a, c, y, b) {
612
+ const p = y || !!b, f = o.getAt(a, c, p).map((T) => e.getAnnotation(T)), C = b ? f.filter(b) : f;
613
+ if (C.length !== 0)
614
+ return y ? C : C[0];
615
+ }
616
+ const E = (a) => {
617
+ if (o.getAnnotationRects(a).length !== 0)
618
+ return o.getAnnotationBounds(a);
619
+ }, w = (a, c, y, b) => o.getIntersecting(a, c, y, b), x = (a) => o.getAnnotationRects(a), A = () => o.recalculate();
620
+ return e.observe(({ changes: a }) => {
621
+ const c = (a.deleted || []).filter((p) => I(p.target.selector)), y = (a.created || []).filter((p) => I(p.target.selector)), b = (a.updated || []).filter((p) => I(p.newValue.target.selector));
622
+ (c == null ? void 0 : c.length) > 0 && c.forEach((p) => o.remove(p.target)), y.length > 0 && o.set(y.map((p) => p.target), !1), (b == null ? void 0 : b.length) > 0 && b.forEach(({ newValue: p }) => o.update(p.target));
1785
623
  }), {
1786
624
  store: {
1787
- ...n,
1788
- addAnnotation: r,
1789
- bulkAddAnnotations: d,
1790
- bulkUpdateTargets: u,
1791
- bulkUpsertAnnotations: f,
1792
- getAnnotationBounds: v,
1793
- getAnnotationRects: p,
1794
- getIntersecting: b,
1795
- getAt: h,
1796
- recalculatePositions: x,
1797
- updateTarget: g
625
+ ...e,
626
+ addAnnotation: u,
627
+ bulkAddAnnotations: m,
628
+ bulkUpdateTargets: d,
629
+ bulkUpsertAnnotations: S,
630
+ getAnnotationBounds: E,
631
+ getAnnotationRects: x,
632
+ getIntersecting: w,
633
+ getAt: i,
634
+ recalculatePositions: A,
635
+ updateTarget: h
1798
636
  },
1799
- selection: i,
1800
- hover: s,
1801
- viewport: a
637
+ selection: s,
638
+ hover: r,
639
+ viewport: l
1802
640
  };
1803
- }, oo = () => {
641
+ }, te = () => {
1804
642
  const t = document.createElement("canvas");
1805
643
  t.width = 2 * window.innerWidth, t.height = 2 * window.innerHeight, t.className = "r6o-presence-layer";
1806
- const e = t.getContext("2d");
1807
- return e.scale(2, 2), e.translate(0.5, 0.5), t;
1808
- }, io = (t, e = {}) => {
1809
- const n = oo(), o = n.getContext("2d");
1810
- document.body.appendChild(n);
1811
- const i = /* @__PURE__ */ new Map(), s = (g) => Array.from(i.entries()).filter(([u, h]) => h.presenceKey === g.presenceKey).map(([u, h]) => u);
1812
- return t.on("selectionChange", (g, u) => {
1813
- s(g).forEach((v) => i.delete(v)), u && u.forEach((v) => i.set(v, g));
644
+ const n = t.getContext("2d");
645
+ return n.scale(2, 2), n.translate(0.5, 0.5), t;
646
+ }, ee = (t, n = {}) => {
647
+ const e = te(), o = e.getContext("2d");
648
+ document.body.appendChild(e);
649
+ const s = /* @__PURE__ */ new Map(), r = (h) => Array.from(s.entries()).filter(([d, i]) => i.presenceKey === h.presenceKey).map(([d, i]) => d);
650
+ return t.on("selectionChange", (h, d) => {
651
+ r(h).forEach((E) => s.delete(E)), d && d.forEach((E) => s.set(E, h));
1814
652
  }), {
1815
653
  clear: () => {
1816
- const { width: g, height: u } = n;
1817
- o.clearRect(-0.5, -0.5, g + 1, u + 1);
654
+ const { width: h, height: d } = e;
655
+ o.clearRect(-0.5, -0.5, h + 1, d + 1);
1818
656
  },
1819
657
  destroy: () => {
1820
- n.remove();
658
+ e.remove();
1821
659
  },
1822
- paint: (g, u, h) => {
1823
- e.font && (o.font = e.font);
1824
- const v = i.get(g.annotation.id);
1825
- if (v) {
1826
- const { height: b } = g.rects[0], p = g.rects[0].x + u.left, x = g.rects[0].y + u.top;
1827
- o.fillStyle = v.appearance.color, o.fillRect(p - 2, x - 2.5, 2, b + 5);
1828
- const c = o.measureText(v.appearance.label), l = c.width + 6, m = c.actualBoundingBoxAscent + c.actualBoundingBoxDescent + 8, S = c.fontBoundingBoxAscent ? 8 : 6.5;
1829
- return o.fillRect(p - 2, x - 2.5 - m, l, m), o.fillStyle = "#fff", o.fillText(v.appearance.label, p + 1, x - S), {
1830
- fill: v.appearance.color,
1831
- fillOpacity: h ? 0.45 : 0.18
660
+ paint: (h, d, i) => {
661
+ n.font && (o.font = n.font);
662
+ const E = s.get(h.annotation.id);
663
+ if (E) {
664
+ const { height: w } = h.rects[0], x = h.rects[0].x + d.left, A = h.rects[0].y + d.top;
665
+ o.fillStyle = E.appearance.color, o.fillRect(x - 2, A - 2.5, 2, w + 5);
666
+ const a = o.measureText(E.appearance.label), c = a.width + 6, y = a.actualBoundingBoxAscent + a.actualBoundingBoxDescent + 8, b = a.fontBoundingBoxAscent ? 8 : 6.5;
667
+ return o.fillRect(x - 2, A - 2.5 - y, c, y), o.fillStyle = "#fff", o.fillText(E.appearance.label, x + 1, A - b), {
668
+ fill: E.appearance.color,
669
+ fillOpacity: i ? 0.45 : 0.18
1832
670
  };
1833
671
  }
1834
672
  },
1835
673
  reset: () => {
1836
- n.width = 2 * window.innerWidth, n.height = 2 * window.innerHeight;
1837
- const g = n.getContext("2d");
1838
- g.scale(2, 2), g.translate(0.5, 0.5);
674
+ e.width = 2 * window.innerWidth, e.height = 2 * window.innerHeight;
675
+ const h = e.getContext("2d");
676
+ h.scale(2, 2), h.translate(0.5, 0.5);
1839
677
  }
1840
678
  };
1841
- }, Ut = typeof navigator < "u" ? navigator.userAgent.toLowerCase().indexOf("firefox") > 0 : !1;
1842
- function _t(t, e, n, o) {
1843
- t.addEventListener ? t.addEventListener(e, n, o) : t.attachEvent && t.attachEvent("on".concat(e), n);
1844
- }
1845
- function st(t, e, n, o) {
1846
- t.removeEventListener ? t.removeEventListener(e, n, o) : t.detachEvent && t.detachEvent("on".concat(e), n);
1847
- }
1848
- function ye(t, e) {
1849
- const n = e.slice(0, e.length - 1);
1850
- for (let o = 0; o < n.length; o++) n[o] = t[n[o].toLowerCase()];
1851
- return n;
1852
- }
1853
- function be(t) {
1854
- typeof t != "string" && (t = ""), t = t.replace(/\s/g, "");
1855
- const e = t.split(",");
1856
- let n = e.lastIndexOf("");
1857
- for (; n >= 0; )
1858
- e[n - 1] += ",", e.splice(n, 1), n = e.lastIndexOf("");
1859
- return e;
1860
- }
1861
- function so(t, e) {
1862
- const n = t.length >= e.length ? t : e, o = t.length >= e.length ? e : t;
1863
- let i = !0;
1864
- for (let s = 0; s < n.length; s++)
1865
- o.indexOf(n[s]) === -1 && (i = !1);
1866
- return i;
1867
- }
1868
- const ft = {
1869
- backspace: 8,
1870
- "⌫": 8,
1871
- tab: 9,
1872
- clear: 12,
1873
- enter: 13,
1874
- "↩": 13,
1875
- return: 13,
1876
- esc: 27,
1877
- escape: 27,
1878
- space: 32,
1879
- left: 37,
1880
- up: 38,
1881
- right: 39,
1882
- down: 40,
1883
- /// https://w3c.github.io/uievents/#events-keyboard-key-location
1884
- arrowup: 38,
1885
- arrowdown: 40,
1886
- arrowleft: 37,
1887
- arrowright: 39,
1888
- del: 46,
1889
- delete: 46,
1890
- ins: 45,
1891
- insert: 45,
1892
- home: 36,
1893
- end: 35,
1894
- pageup: 33,
1895
- pagedown: 34,
1896
- capslock: 20,
1897
- num_0: 96,
1898
- num_1: 97,
1899
- num_2: 98,
1900
- num_3: 99,
1901
- num_4: 100,
1902
- num_5: 101,
1903
- num_6: 102,
1904
- num_7: 103,
1905
- num_8: 104,
1906
- num_9: 105,
1907
- num_multiply: 106,
1908
- num_add: 107,
1909
- num_enter: 108,
1910
- num_subtract: 109,
1911
- num_decimal: 110,
1912
- num_divide: 111,
1913
- "⇪": 20,
1914
- ",": 188,
1915
- ".": 190,
1916
- "/": 191,
1917
- "`": 192,
1918
- "-": Ut ? 173 : 189,
1919
- "=": Ut ? 61 : 187,
1920
- ";": Ut ? 59 : 186,
1921
- "'": 222,
1922
- "{": 219,
1923
- "}": 221,
1924
- "[": 219,
1925
- "]": 221,
1926
- "\\": 220
1927
- }, z = {
1928
- // shiftKey
1929
- "⇧": 16,
1930
- shift: 16,
1931
- // altKey
1932
- "⌥": 18,
1933
- alt: 18,
1934
- option: 18,
1935
- // ctrlKey
1936
- "⌃": 17,
1937
- ctrl: 17,
1938
- control: 17,
1939
- // metaKey
1940
- "⌘": 91,
1941
- cmd: 91,
1942
- meta: 91,
1943
- command: 91
1944
- }, ct = {
1945
- 16: "shiftKey",
1946
- 18: "altKey",
1947
- 17: "ctrlKey",
1948
- 91: "metaKey",
1949
- shiftKey: 16,
1950
- ctrlKey: 17,
1951
- altKey: 18,
1952
- metaKey: 91
1953
- }, X = {
1954
- 16: !1,
1955
- 18: !1,
1956
- 17: !1,
1957
- 91: !1
1958
- }, N = {};
1959
- for (let t = 1; t < 20; t++)
1960
- ft["f".concat(t)] = 111 + t;
1961
- let _ = [], ut = null, we = "all";
1962
- const W = /* @__PURE__ */ new Map(), ot = (t) => ft[t.toLowerCase()] || z[t.toLowerCase()] || t.toUpperCase().charCodeAt(0), ro = (t) => Object.keys(ft).find((e) => ft[e] === t), ao = (t) => Object.keys(z).find((e) => z[e] === t);
1963
- function xe(t) {
1964
- we = t || "all";
1965
- }
1966
- function ht() {
1967
- return we || "all";
1968
- }
1969
- function lo() {
1970
- return _.slice(0);
1971
- }
1972
- function co() {
1973
- return _.map((t) => ro(t) || ao(t) || String.fromCharCode(t));
1974
- }
1975
- function uo() {
1976
- const t = [];
1977
- return Object.keys(N).forEach((e) => {
1978
- N[e].forEach((n) => {
1979
- let {
1980
- key: o,
1981
- scope: i,
1982
- mods: s,
1983
- shortcut: a
1984
- } = n;
1985
- t.push({
1986
- scope: i,
1987
- shortcut: a,
1988
- mods: s,
1989
- keys: o.split("+").map((r) => ot(r))
1990
- });
1991
- });
1992
- }), t;
1993
- }
1994
- function fo(t) {
1995
- const e = t.target || t.srcElement, {
1996
- tagName: n
1997
- } = e;
1998
- let o = !0;
1999
- const i = n === "INPUT" && !["checkbox", "radio", "range", "button", "file", "reset", "submit", "color"].includes(e.type);
2000
- return (e.isContentEditable || (i || n === "TEXTAREA" || n === "SELECT") && !e.readOnly) && (o = !1), o;
2001
- }
2002
- function ho(t) {
2003
- return typeof t == "string" && (t = ot(t)), _.indexOf(t) !== -1;
2004
- }
2005
- function go(t, e) {
2006
- let n, o;
2007
- t || (t = ht());
2008
- for (const i in N)
2009
- if (Object.prototype.hasOwnProperty.call(N, i))
2010
- for (n = N[i], o = 0; o < n.length; )
2011
- n[o].scope === t ? n.splice(o, 1).forEach((a) => {
2012
- let {
2013
- element: r
2014
- } = a;
2015
- return Pt(r);
2016
- }) : o++;
2017
- ht() === t && xe(e || "all");
2018
- }
2019
- function po(t) {
2020
- let e = t.keyCode || t.which || t.charCode;
2021
- t.key && t.key.toLowerCase() === "capslock" && (e = ot(t.key));
2022
- const n = _.indexOf(e);
2023
- if (n >= 0 && _.splice(n, 1), t.key && t.key.toLowerCase() === "meta" && _.splice(0, _.length), (e === 93 || e === 224) && (e = 91), e in X) {
2024
- X[e] = !1;
2025
- for (const o in z) z[o] === e && (H[o] = !1);
2026
- }
2027
- }
2028
- function Ae(t) {
2029
- if (typeof t > "u")
2030
- Object.keys(N).forEach((i) => {
2031
- Array.isArray(N[i]) && N[i].forEach((s) => xt(s)), delete N[i];
2032
- }), Pt(null);
2033
- else if (Array.isArray(t))
2034
- t.forEach((i) => {
2035
- i.key && xt(i);
2036
- });
2037
- else if (typeof t == "object")
2038
- t.key && xt(t);
2039
- else if (typeof t == "string") {
2040
- for (var e = arguments.length, n = new Array(e > 1 ? e - 1 : 0), o = 1; o < e; o++)
2041
- n[o - 1] = arguments[o];
2042
- let [i, s] = n;
2043
- typeof i == "function" && (s = i, i = ""), xt({
2044
- key: t,
2045
- scope: i,
2046
- method: s,
2047
- splitKey: "+"
2048
- });
2049
- }
2050
- }
2051
- const xt = (t) => {
2052
- let {
2053
- key: e,
2054
- scope: n,
2055
- method: o,
2056
- splitKey: i = "+"
2057
- } = t;
2058
- be(e).forEach((a) => {
2059
- const r = a.split(i), d = r.length, f = r[d - 1], g = f === "*" ? "*" : ot(f);
2060
- if (!N[g]) return;
2061
- n || (n = ht());
2062
- const u = d > 1 ? ye(z, r) : [], h = [];
2063
- N[g] = N[g].filter((v) => {
2064
- const p = (o ? v.method === o : !0) && v.scope === n && so(v.mods, u);
2065
- return p && h.push(v.element), !p;
2066
- }), h.forEach((v) => Pt(v));
2067
- });
2068
- };
2069
- function ne(t, e, n, o) {
2070
- if (e.element !== o)
2071
- return;
2072
- let i;
2073
- if (e.scope === n || e.scope === "all") {
2074
- i = e.mods.length > 0;
2075
- for (const s in X)
2076
- Object.prototype.hasOwnProperty.call(X, s) && (!X[s] && e.mods.indexOf(+s) > -1 || X[s] && e.mods.indexOf(+s) === -1) && (i = !1);
2077
- (e.mods.length === 0 && !X[16] && !X[18] && !X[17] && !X[91] || i || e.shortcut === "*") && (e.keys = [], e.keys = e.keys.concat(_), e.method(t, e) === !1 && (t.preventDefault ? t.preventDefault() : t.returnValue = !1, t.stopPropagation && t.stopPropagation(), t.cancelBubble && (t.cancelBubble = !0)));
2078
- }
2079
- }
2080
- function oe(t, e) {
2081
- const n = N["*"];
2082
- let o = t.keyCode || t.which || t.charCode;
2083
- if (t.key && t.key.toLowerCase() === "capslock" || !H.filter.call(this, t)) return;
2084
- if ((o === 93 || o === 224) && (o = 91), _.indexOf(o) === -1 && o !== 229 && _.push(o), ["metaKey", "ctrlKey", "altKey", "shiftKey"].forEach((r) => {
2085
- const d = ct[r];
2086
- t[r] && _.indexOf(d) === -1 ? _.push(d) : !t[r] && _.indexOf(d) > -1 ? _.splice(_.indexOf(d), 1) : r === "metaKey" && t[r] && (_ = _.filter((f) => f in ct || f === o));
2087
- }), o in X) {
2088
- X[o] = !0;
2089
- for (const r in z)
2090
- if (Object.prototype.hasOwnProperty.call(z, r)) {
2091
- const d = ct[z[r]];
2092
- H[r] = t[d];
2093
- }
2094
- if (!n) return;
2095
- }
2096
- for (const r in X)
2097
- Object.prototype.hasOwnProperty.call(X, r) && (X[r] = t[ct[r]]);
2098
- t.getModifierState && !(t.altKey && !t.ctrlKey) && t.getModifierState("AltGraph") && (_.indexOf(17) === -1 && _.push(17), _.indexOf(18) === -1 && _.push(18), X[17] = !0, X[18] = !0);
2099
- const i = ht();
2100
- if (n)
2101
- for (let r = 0; r < n.length; r++)
2102
- n[r].scope === i && (t.type === "keydown" && n[r].keydown || t.type === "keyup" && n[r].keyup) && ne(t, n[r], i, e);
2103
- if (!(o in N)) return;
2104
- const s = N[o], a = s.length;
2105
- for (let r = 0; r < a; r++)
2106
- if ((t.type === "keydown" && s[r].keydown || t.type === "keyup" && s[r].keyup) && s[r].key) {
2107
- const d = s[r], {
2108
- splitKey: f
2109
- } = d, g = d.key.split(f), u = [];
2110
- for (let h = 0; h < g.length; h++)
2111
- u.push(ot(g[h]));
2112
- u.sort().join("") === _.sort().join("") && ne(t, d, i, e);
2113
- }
2114
- }
2115
- function H(t, e, n) {
2116
- _ = [];
2117
- const o = be(t);
2118
- let i = [], s = "all", a = document, r = 0, d = !1, f = !0, g = "+", u = !1, h = !1;
2119
- for (n === void 0 && typeof e == "function" && (n = e), Object.prototype.toString.call(e) === "[object Object]" && (e.scope && (s = e.scope), e.element && (a = e.element), e.keyup && (d = e.keyup), e.keydown !== void 0 && (f = e.keydown), e.capture !== void 0 && (u = e.capture), typeof e.splitKey == "string" && (g = e.splitKey), e.single === !0 && (h = !0)), typeof e == "string" && (s = e), h && Ae(t, s); r < o.length; r++)
2120
- t = o[r].split(g), i = [], t.length > 1 && (i = ye(z, t)), t = t[t.length - 1], t = t === "*" ? "*" : ot(t), t in N || (N[t] = []), N[t].push({
2121
- keyup: d,
2122
- keydown: f,
2123
- scope: s,
2124
- mods: i,
2125
- shortcut: o[r],
2126
- method: n,
2127
- key: o[r],
2128
- splitKey: g,
2129
- element: a
2130
- });
2131
- if (typeof a < "u" && window) {
2132
- if (!W.has(a)) {
2133
- const v = function() {
2134
- let p = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : window.event;
2135
- return oe(p, a);
2136
- }, b = function() {
2137
- let p = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : window.event;
2138
- oe(p, a), po(p);
2139
- };
2140
- W.set(a, {
2141
- keydownListener: v,
2142
- keyupListenr: b,
2143
- capture: u
2144
- }), _t(a, "keydown", v, u), _t(a, "keyup", b, u);
2145
- }
2146
- if (!ut) {
2147
- const v = () => {
2148
- _ = [];
2149
- };
2150
- ut = {
2151
- listener: v,
2152
- capture: u
2153
- }, _t(window, "focus", v, u);
2154
- }
2155
- }
2156
- }
2157
- function mo(t) {
2158
- let e = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "all";
2159
- Object.keys(N).forEach((n) => {
2160
- N[n].filter((i) => i.scope === e && i.shortcut === t).forEach((i) => {
2161
- i && i.method && i.method();
2162
- });
2163
- });
2164
- }
2165
- function Pt(t) {
2166
- const e = Object.values(N).flat();
2167
- if (e.findIndex((o) => {
2168
- let {
2169
- element: i
2170
- } = o;
2171
- return i === t;
2172
- }) < 0) {
2173
- const {
2174
- keydownListener: o,
2175
- keyupListenr: i,
2176
- capture: s
2177
- } = W.get(t) || {};
2178
- o && i && (st(t, "keyup", i, s), st(t, "keydown", o, s), W.delete(t));
2179
- }
2180
- if ((e.length <= 0 || W.size <= 0) && (Object.keys(W).forEach((i) => {
2181
- const {
2182
- keydownListener: s,
2183
- keyupListenr: a,
2184
- capture: r
2185
- } = W.get(i) || {};
2186
- s && a && (st(i, "keyup", a, r), st(i, "keydown", s, r), W.delete(i));
2187
- }), W.clear(), Object.keys(N).forEach((i) => delete N[i]), ut)) {
2188
- const {
2189
- listener: i,
2190
- capture: s
2191
- } = ut;
2192
- st(window, "focus", i, s), ut = null;
2193
- }
2194
- }
2195
- const Nt = {
2196
- getPressedKeyString: co,
2197
- setScope: xe,
2198
- getScope: ht,
2199
- deleteScope: go,
2200
- getPressedKeyCodes: lo,
2201
- getAllKeyCodes: uo,
2202
- isPressed: ho,
2203
- filter: fo,
2204
- trigger: mo,
2205
- unbind: Ae,
2206
- keyMap: ft,
2207
- modifier: z,
2208
- modifierMap: ct
2209
- };
2210
- for (const t in Nt)
2211
- Object.prototype.hasOwnProperty.call(Nt, t) && (H[t] = Nt[t]);
2212
- if (typeof window < "u") {
2213
- const t = window.hotkeys;
2214
- H.noConflict = (e) => (e && window.hotkeys === H && (window.hotkeys = t), H), window.hotkeys = H;
2215
- }
2216
- const ie = 300, ve = ["up", "down", "left", "right"], Ee = Te ? "⌘+a" : "ctrl+a", yo = [
2217
- ...ve.map((t) => `shift+${t}`),
2218
- Ee
2219
- ], bo = (t, e, n) => {
679
+ }, G = 300, ot = ["up", "down", "left", "right"], st = Et ? "⌘+a" : "ctrl+a", ne = [
680
+ ...ot.map((t) => `shift+${t}`),
681
+ st
682
+ ], oe = (t, n, e) => {
2220
683
  let o;
2221
- const { annotatingEnabled: i, offsetReferenceSelector: s, selectionMode: a } = n, r = (T) => o = T;
2222
- let d;
2223
- const f = (T) => d = T, { store: g, selection: u } = e;
2224
- let h, v, b;
2225
- const p = (T) => {
2226
- const M = T;
2227
- return M.ctrlKey || M.metaKey;
2228
- }, x = (T) => {
2229
- if (v !== !1)
2230
- if (rt(T.target))
2231
- h = void 0;
2232
- else {
2233
- const { selected: M } = u;
2234
- if (p({ ...T, ...b }) && M.length === 1 && M[0].editable) {
2235
- const y = g.getAnnotation(M[0].id);
2236
- h = {
2237
- previous: {
2238
- ...y.target
2239
- },
2240
- next: {
2241
- annotation: y.id,
2242
- selector: [],
2243
- created: y.target.created,
2244
- creator: y.target.creator,
2245
- updated: /* @__PURE__ */ new Date(),
2246
- updatedBy: o
2247
- }
2248
- };
2249
- } else
2250
- h = {
2251
- next: {
2252
- annotation: fe(),
2253
- selector: [],
2254
- created: /* @__PURE__ */ new Date(),
2255
- creator: o
2256
- }
2257
- };
2258
- }
2259
- }, c = Kt((T) => {
2260
- const M = document.getSelection();
2261
- if (!(M != null && M.anchorNode))
684
+ const { annotatingEnabled: s, offsetReferenceSelector: r, selectionMode: l } = e, u = (g) => o = g;
685
+ let m;
686
+ const S = (g) => m = g, { store: h, selection: d } = n;
687
+ let i, E, w;
688
+ const x = (g) => {
689
+ E !== !1 && (i = F(t, g.target) ? void 0 : {
690
+ annotation: J(),
691
+ selector: [],
692
+ creator: o,
693
+ created: /* @__PURE__ */ new Date()
694
+ });
695
+ }, A = D((g) => {
696
+ const v = document.getSelection();
697
+ if (!(v != null && v.anchorNode))
2262
698
  return;
2263
- if (rt(M.anchorNode)) {
2264
- h = void 0;
699
+ if (F(t, v.anchorNode)) {
700
+ i = void 0;
2265
701
  return;
2266
702
  }
2267
- const y = T.timeStamp - ((b == null ? void 0 : b.timeStamp) || T.timeStamp);
2268
- if ((b == null ? void 0 : b.type) === "pointerdown" && (y < 1e3 && !h || M.isCollapsed && y < ie) && x(b || T), !h) return;
2269
- if (M.isCollapsed) {
2270
- g.getAnnotation(h.next.annotation) && !p(b) && (u.clear(), g.deleteAnnotation(h.next.annotation));
703
+ const L = g.timeStamp - ((w == null ? void 0 : w.timeStamp) || g.timeStamp);
704
+ if ((w == null ? void 0 : w.type) === "pointerdown" && (L < 1e3 && !i || v.isCollapsed && L < G) && x(w || g), !i) return;
705
+ if (v.isCollapsed) {
706
+ h.getAnnotation(i.annotation) && (d.clear(), h.deleteAnnotation(i.annotation));
2271
707
  return;
2272
708
  }
2273
- const A = Array.from(Array(M.rangeCount).keys()).map((O) => M.getRangeAt(O)).map((O) => De(O, t));
2274
- if (A.every((O) => Ie(O))) return;
2275
- const C = A.flatMap((O) => Me(O.cloneRange()));
2276
- (C.length !== h.next.selector.length || C.some((O, k) => {
2277
- var P;
2278
- return O.toString() !== ((P = h.next.selector[k]) == null ? void 0 : P.quote);
2279
- })) && (h = {
2280
- ...h,
2281
- next: {
2282
- ...h.next,
2283
- selector: [
2284
- ...h.previous ? h.previous.selector : [],
2285
- ...C.map((O) => Ve(O, t, s))
2286
- ],
2287
- updated: /* @__PURE__ */ new Date()
2288
- }
2289
- }, g.getAnnotation(h.next.annotation) ? g.updateTarget(h.next, B.LOCAL) : p(b) || u.clear());
2290
- }), l = (T) => {
2291
- rt(T.target) || (b = Et(T), v = b.button === 0);
2292
- }, m = (T) => {
2293
- if (rt(T.target) || !v) return;
2294
- const M = () => {
2295
- const { x: w, y: A } = t.getBoundingClientRect(), C = T.target instanceof Node && t.contains(T.target) && g.getAt(T.clientX - w, T.clientY - A, a === "all", d);
2296
- if (C) {
2297
- const { selected: I } = u, O = new Set(I.map((Q) => Q.id)), k = Array.isArray(C) ? C.map((Q) => Q.id) : [C.id];
2298
- (O.size !== k.length || !k.every((Q) => O.has(Q))) && u.userSelect(k, T);
2299
- } else p(T) || u.clear();
2300
- }, y = T.timeStamp - b.timeStamp;
709
+ const H = Array.from(Array(v.rangeCount).keys()).map((R) => v.getRangeAt(R)).map((R) => Nt(R, t));
710
+ if (H.every((R) => Lt(R))) return;
711
+ const B = H.flatMap((R) => vt(t, R.cloneRange()));
712
+ (B.length !== i.selector.length || B.some((R, M) => {
713
+ var O;
714
+ return R.toString() !== ((O = i.selector[M]) == null ? void 0 : O.quote);
715
+ })) && (i = {
716
+ ...i,
717
+ selector: B.map((R) => It(R, t, r)),
718
+ updated: /* @__PURE__ */ new Date()
719
+ }, h.getAnnotation(i.annotation) ? h.updateTarget(i, K.LOCAL) : d.clear());
720
+ }), a = (g) => {
721
+ F(t, g.target) || (w = X(g), E = w.button === 0);
722
+ }, c = (g) => {
723
+ if (!E) return;
724
+ if (F(t, g.target)) {
725
+ e.dismissOnClickOutside && d.clear();
726
+ return;
727
+ }
728
+ const v = () => {
729
+ const { x: k, y: H } = t.getBoundingClientRect(), B = g.target instanceof Node && t.contains(g.target) && h.getAt(g.clientX - k, g.clientY - H, l === "all", m);
730
+ if (B) {
731
+ const { selected: $ } = d, R = new Set($.map((P) => P.id)), M = Array.isArray(B) ? B.map((P) => P.id) : [B.id];
732
+ (R.size !== M.length || !M.every((P) => R.has(P))) && d.userSelect(M, g);
733
+ } else
734
+ d.clear();
735
+ }, L = g.timeStamp - w.timeStamp;
2301
736
  setTimeout(() => {
2302
- const w = document.getSelection();
2303
- w != null && w.isCollapsed && y < ie ? (h = void 0, M()) : h && h.next.selector.length > 0 && (U(), u.userSelect(h.next.annotation, Et(T)));
737
+ const k = document.getSelection();
738
+ k != null && k.isCollapsed && L < G ? (i = void 0, v()) : i && i.selector.length > 0 && (C(), d.userSelect(i.annotation, X(g)));
2304
739
  });
2305
- }, S = (T) => {
2306
- const M = document.getSelection();
2307
- M != null && M.isCollapsed || ((!h || h.next.selector.length === 0) && c(T), h && (U(), u.userSelect(h.next.annotation, Et(T))));
2308
- }, E = (T) => {
2309
- T.key === "Shift" && h && (document.getSelection().isCollapsed || (U(), u.userSelect(h.next.annotation, gt(T))));
2310
- }, L = (T) => {
2311
- const M = () => setTimeout(() => {
2312
- (h == null ? void 0 : h.next.selector.length) > 0 && (u.clear(), g.addAnnotation({
2313
- id: h.next.annotation,
740
+ }, y = (g) => {
741
+ const v = document.getSelection();
742
+ v != null && v.isCollapsed || ((!i || i.selector.length === 0) && A(g), i && (C(), d.userSelect(i.annotation, X(g))));
743
+ }, b = (g) => {
744
+ g.key === "Shift" && i && (document.getSelection().isCollapsed || (C(), d.userSelect(i.annotation, V(g))));
745
+ }, p = (g) => {
746
+ const v = () => setTimeout(() => {
747
+ (i == null ? void 0 : i.selector.length) > 0 && (d.clear(), h.addAnnotation({
748
+ id: i.annotation,
2314
749
  bodies: [],
2315
- target: h.next
2316
- }), u.userSelect(h.next.annotation, gt(T))), document.removeEventListener("selectionchange", M);
750
+ target: i
751
+ }), d.userSelect(i.annotation, V(g))), document.removeEventListener("selectionchange", v);
2317
752
  }, 100);
2318
- document.addEventListener("selectionchange", M), x(T);
753
+ document.addEventListener("selectionchange", v), x(g);
2319
754
  };
2320
- H(yo.join(","), { element: t, keydown: !0, keyup: !1 }, (T) => {
2321
- T.repeat || (b = gt(T));
2322
- }), H(Ee, { keydown: !0, keyup: !1 }, (T) => {
2323
- b = gt(T), L(T);
755
+ _(ne.join(","), { element: t, keydown: !0, keyup: !1 }, (g) => {
756
+ g.repeat || (w = V(g));
757
+ }), _(st, { keydown: !0, keyup: !1 }, (g) => {
758
+ w = V(g), p(g);
2324
759
  });
2325
- const R = (T) => {
2326
- T.repeat || T.target !== t && T.target !== document.body || (h = void 0, u.clear());
2327
- };
2328
- H(ve.join(","), { keydown: !0, keyup: !1 }, R);
2329
- const U = () => {
2330
- const T = g.getAnnotation(h.next.annotation);
2331
- if (!T) {
2332
- g.addAnnotation({
2333
- id: h.next.annotation,
760
+ const f = (g) => {
761
+ g.repeat || g.target !== t && g.target !== document.body || (i = void 0, d.clear());
762
+ };
763
+ _(ot.join(","), { keydown: !0, keyup: !1 }, f);
764
+ const C = () => {
765
+ const g = h.getAnnotation(i.annotation);
766
+ if (!g) {
767
+ h.addAnnotation({
768
+ id: i.annotation,
2334
769
  bodies: [],
2335
- target: h.next
770
+ target: i
2336
771
  });
2337
772
  return;
2338
773
  }
2339
- const { target: { updated: M } } = T, { updated: y } = h.next;
2340
- (!M || !y || M < y) && g.updateTarget(h.next);
774
+ const { target: { updated: v } } = g, { updated: L } = i;
775
+ (!v || !L || v < L) && h.updateTarget(i);
2341
776
  };
2342
- return t.addEventListener("pointerdown", l), document.addEventListener("pointerup", m), document.addEventListener("contextmenu", S), i && (t.addEventListener("keyup", E), t.addEventListener("selectstart", x), document.addEventListener("selectionchange", c)), {
777
+ return t.addEventListener("pointerdown", a), document.addEventListener("pointerup", c), document.addEventListener("contextmenu", y), s && (t.addEventListener("keyup", b), t.addEventListener("selectstart", x), document.addEventListener("selectionchange", A)), {
2343
778
  destroy: () => {
2344
- t.removeEventListener("pointerdown", l), document.removeEventListener("pointerup", m), document.removeEventListener("contextmenu", S), t.removeEventListener("keyup", E), t.removeEventListener("selectstart", x), document.removeEventListener("selectionchange", c), H.unbind();
779
+ t.removeEventListener("pointerdown", a), document.removeEventListener("pointerup", c), document.removeEventListener("contextmenu", y), t.removeEventListener("keyup", b), t.removeEventListener("selectstart", x), document.removeEventListener("selectionchange", A), _.unbind();
2345
780
  },
2346
- setFilter: f,
2347
- setUser: r
781
+ setFilter: S,
782
+ setUser: u
2348
783
  };
2349
- }, wo = (t, e) => ({
784
+ }, se = (t, n) => ({
2350
785
  ...t,
2351
- annotatingEnabled: t.annotatingEnabled ?? e.annotatingEnabled,
2352
- user: t.user || e.user
2353
- }), se = "SPANS", Eo = (t, e = {}) => {
2354
- Le(t), Oe(t);
2355
- const n = wo(e, {
786
+ annotatingEnabled: t.annotatingEnabled ?? n.annotatingEnabled,
787
+ user: t.user || n.user
788
+ }), Q = "SPANS", ge = (t, n = {}) => {
789
+ wt(t), At(t);
790
+ const e = se(n, {
2356
791
  annotatingEnabled: !0,
2357
- user: Yn()
2358
- }), o = no(t, n), { selection: i, viewport: s } = o, a = o.store, r = Mn(a), d = Bn(o, r, n.adapter);
2359
- let f = n.user;
2360
- const g = n.renderer === "CSS_HIGHLIGHTS" ? CSS.highlights ? "CSS_HIGHLIGHTS" : se : n.renderer || se, u = g === "SPANS" ? rn(t, o, s) : g === "CSS_HIGHLIGHTS" ? nn(t, o, s) : g === "CANVAS" ? ze(t, o, s) : void 0;
2361
- if (!u)
2362
- throw `Unknown renderer implementation: ${g}`;
2363
- console.debug(`Using ${g} renderer`), n.style && u.setStyle(n.style);
2364
- const h = bo(t, o, n);
2365
- return h.setUser(f), {
2366
- ...Un(o, r, n.adapter),
792
+ user: pt()
793
+ }), o = Jt(t, e), { selection: s, viewport: r } = o, l = o.store, u = ht(l), m = yt(o, u, e.adapter);
794
+ let S = e.user;
795
+ const h = e.renderer === "CSS_HIGHLIGHTS" ? CSS.highlights ? "CSS_HIGHLIGHTS" : Q : e.renderer || Q, d = h === "SPANS" ? zt(t, o, r) : h === "CSS_HIGHLIGHTS" ? Wt(t, o, r) : h === "CANVAS" ? _t(t, o, r) : void 0;
796
+ if (!d)
797
+ throw `Unknown renderer implementation: ${h}`;
798
+ console.debug(`Using ${h} renderer`), e.style && d.setStyle(e.style);
799
+ const i = oe(t, o, e);
800
+ return i.setUser(S), {
801
+ ...bt(o, u, e.adapter),
2367
802
  destroy: () => {
2368
- u.destroy(), h.destroy(), r.destroy();
803
+ d.destroy(), i.destroy(), u.destroy();
2369
804
  },
2370
805
  element: t,
2371
- getUser: () => f,
2372
- setFilter: (L) => {
2373
- u.setFilter(L), h.setFilter(L);
806
+ getUser: () => S,
807
+ setFilter: (f) => {
808
+ d.setFilter(f), i.setFilter(f);
2374
809
  },
2375
- setStyle: (L) => u.setStyle(L),
2376
- setUser: (L) => {
2377
- f = L, h.setUser(L);
810
+ setStyle: (f) => d.setStyle(f),
811
+ setUser: (f) => {
812
+ S = f, i.setUser(f);
2378
813
  },
2379
- setSelected: (L) => {
2380
- L ? i.setSelected(L) : i.clear();
814
+ setSelected: (f) => {
815
+ f ? s.setSelected(f) : s.clear();
2381
816
  },
2382
- setPresenceProvider: (L) => {
2383
- L && (u.setPainter(io(L, n.presence)), L.on("selectionChange", () => u.redraw()));
817
+ setPresenceProvider: (f) => {
818
+ f && (d.setPainter(ee(f, e.presence)), f.on("selectionChange", () => d.redraw()));
2384
819
  },
2385
- setVisible: (L) => u.setVisible(L),
2386
- on: d.on,
2387
- off: d.off,
2388
- scrollIntoView: Ke(t, a),
820
+ setVisible: (f) => d.setVisible(f),
821
+ on: m.on,
822
+ off: m.off,
823
+ scrollIntoView: Ht(t, l),
2389
824
  state: o
2390
825
  };
2391
826
  };
2392
827
  export {
2393
- vt as DEFAULT_SELECTED_STYLE,
2394
- G as DEFAULT_STYLE,
2395
- re as NOT_ANNOTATABLE_CLASS,
2396
- nt as NOT_ANNOTATABLE_SELECTOR,
2397
- B as Origin,
2398
- bo as SelectionHandler,
2399
- hn as UserSelectAction,
2400
- vo as W3CTextFormat,
2401
- Le as cancelSingleClickEvents,
2402
- gt as cloneKeyboardEvent,
2403
- Et as clonePointerEvent,
2404
- Ao as createBody,
2405
- ze as createCanvasRenderer,
2406
- nn as createHighlightsRenderer,
2407
- io as createPresencePainter,
2408
- en as createRenderer,
2409
- rn as createSpansRenderer,
2410
- Eo as createTextAnnotator,
2411
- no as createTextAnnotatorState,
2412
- Kt as debounce,
2413
- wo as fillDefaults,
2414
- ke as getQuoteContext,
2415
- Vt as getRangeAnnotatableContents,
2416
- Te as isMac,
2417
- rt as isNotAnnotatable,
2418
- Ce as isRangeAnnotatable,
2419
- q as isRevived,
2420
- Ie as isWhitespaceOrEmpty,
2421
- Ne as mergeClientRects,
2422
- Ye as paint,
2423
- zn as parseW3CTextAnnotation,
2424
- Oe as programmaticallyFocusable,
2425
- Ve as rangeToSelector,
2426
- St as reviveAnnotation,
2427
- ae as reviveSelector,
2428
- At as reviveTarget,
2429
- Ke as scrollIntoView,
2430
- Fn as serializeW3CTextAnnotation,
2431
- Me as splitAnnotatableRanges,
2432
- xo as toDomRectList,
2433
- De as trimRangeToContainer,
2434
- Be as whitespaceOrEmptyRegex
828
+ Y as DEFAULT_SELECTED_STYLE,
829
+ N as DEFAULT_STYLE,
830
+ tt as NOT_ANNOTATABLE_CLASS,
831
+ U as NOT_ANNOTATABLE_SELECTOR,
832
+ he as Origin,
833
+ oe as SelectionHandler,
834
+ ye as UserSelectAction,
835
+ fe as W3CTextFormat,
836
+ wt as cancelSingleClickEvents,
837
+ V as cloneKeyboardEvent,
838
+ X as clonePointerEvent,
839
+ be as createBody,
840
+ _t as createCanvasRenderer,
841
+ Wt as createHighlightsRenderer,
842
+ ee as createPresencePainter,
843
+ Dt as createRenderer,
844
+ zt as createSpansRenderer,
845
+ ge as createTextAnnotator,
846
+ Jt as createTextAnnotatorState,
847
+ D as debounce,
848
+ se as fillDefaults,
849
+ Tt as getQuoteContext,
850
+ q as getRangeAnnotatableContents,
851
+ Et as isMac,
852
+ F as isNotAnnotatable,
853
+ Ct as isRangeAnnotatable,
854
+ I as isRevived,
855
+ Lt as isWhitespaceOrEmpty,
856
+ Bt as mergeClientRects,
857
+ Mt as paint,
858
+ Gt as parseW3CTextAnnotation,
859
+ At as programmaticallyFocusable,
860
+ It as rangeToSelector,
861
+ z as reviveAnnotation,
862
+ et as reviveSelector,
863
+ W as reviveTarget,
864
+ Ht as scrollIntoView,
865
+ Qt as serializeW3CTextAnnotation,
866
+ vt as splitAnnotatableRanges,
867
+ ue as toDomRectList,
868
+ Nt as trimRangeToContainer,
869
+ Rt as whitespaceOrEmptyRegex
2435
870
  };
2436
871
  //# sourceMappingURL=text-annotator.es.js.map