@recogito/text-annotator 3.1.1 → 3.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,21 @@
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 J } from "colord";
2
+ import { dequal as at } from "dequal/lite";
3
+ import { v4 as tt } 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 be, UserSelectAction as Se, createBody as Ce } from "@annotorious/core";
6
+ import St from "rbush";
7
+ import D from "hotkeys-js";
8
+ import { poll as Ct } from "poll";
9
+ const et = "not-annotatable", U = `.${et}`, F = (t, n) => {
10
+ var o;
11
+ return t.contains(n) ? !!(n instanceof HTMLElement ? n.closest(U) : (o = n.parentElement) == null ? void 0 : o.closest(U)) : !0;
12
+ }, wt = (t, n) => {
13
+ const e = n.commonAncestorContainer;
14
+ return !F(t, e);
15
+ }, Et = (t) => t.addEventListener("click", (n) => {
8
16
  // Allow clicks within not-annotatable elements
9
- !e.target.closest(nt) && !e.target.closest("a") && e.preventDefault();
10
- }), Et = (t) => ({
17
+ !n.target.closest(U) && !n.target.closest("a") && n.preventDefault();
18
+ }), z = (t) => ({
11
19
  ...t,
12
20
  type: t.type,
13
21
  x: t.x,
@@ -33,7 +41,7 @@ const re = "not-annotatable", nt = `.${re}`, rt = (t) => {
33
41
  pointerId: t.pointerId,
34
42
  pointerType: t.pointerType,
35
43
  timeStamp: t.timeStamp
36
- }), gt = (t) => ({
44
+ }), V = (t) => ({
37
45
  ...t,
38
46
  type: t.type,
39
47
  key: t.key,
@@ -49,2388 +57,826 @@ const re = "not-annotatable", nt = `.${re}`, rt = (t) => {
49
57
  defaultPrevented: t.defaultPrevented,
50
58
  detail: t.detail,
51
59
  timeStamp: t.timeStamp
52
- }), Te = typeof navigator < "u" && // @ts-ignore
53
- /mac/i.test(navigator.userAgentData ? navigator.userAgentData.platform : navigator.platform), Oe = (t) => {
60
+ }), At = typeof navigator < "u" && // @ts-ignore
61
+ /mac/i.test(navigator.userAgentData ? navigator.userAgentData.platform : navigator.platform), xt = (t) => {
54
62
  !t.hasAttribute("tabindex") && t.tabIndex < 0 && t.setAttribute("tabindex", "-1"), t.classList.add("no-focus-outline");
55
- }, Kt = (t, e = 10) => {
56
- let n;
63
+ }, W = (t, n = 10) => {
64
+ let e;
57
65
  return ((...o) => {
58
- clearTimeout(n), n = setTimeout(() => t.apply(void 0, o), e);
66
+ clearTimeout(e), e = setTimeout(() => t.apply(void 0, o), n);
59
67
  });
60
- }, Re = function* (t) {
61
- const e = document.createNodeIterator(
68
+ }, vt = function* (t) {
69
+ const n = document.createNodeIterator(
62
70
  t.commonAncestorContainer,
63
71
  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
72
+ (o) => o instanceof HTMLElement && o.classList.contains(et) && !o.parentElement.closest(U) && t.intersectsNode(o) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP
65
73
  );
66
- let n;
67
- for (; n = e.nextNode(); )
68
- n instanceof HTMLElement && (yield n);
69
- }, Me = (t) => {
70
- if (!Ce(t)) return [];
74
+ let e;
75
+ for (; e = n.nextNode(); )
76
+ e instanceof HTMLElement && (yield e);
77
+ }, Tt = (t, n) => {
78
+ if (!wt(t, n)) return [];
71
79
  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;
80
+ let o = null;
81
+ for (const s of vt(n)) {
82
+ let r;
83
+ o ? (r = document.createRange(), r.setStartAfter(o), r.setEndBefore(s)) : (r = n.cloneRange(), r.setEndBefore(s)), r.collapsed || e.push(r), o = s;
84
+ }
85
+ if (o) {
86
+ const s = n.cloneRange();
87
+ s.setStartAfter(o), s.collapsed || e.push(s);
88
+ }
89
+ return e.length > 0 ? e : [n];
90
+ }, j = (t) => {
91
+ const n = t.cloneContents();
92
+ return n.querySelectorAll(U).forEach((e) => e.remove()), n;
93
+ }, Rt = (t, n, e = 10, o) => {
94
+ const s = o ? t.startContainer.parentElement.closest(o) : n, r = document.createRange();
95
+ r.setStart(s, 0), r.setEnd(t.startContainer, t.startOffset);
96
+ const l = j(r).textContent, u = document.createRange();
97
+ u.setStart(t.endContainer, t.endOffset), s === document.body ? u.setEnd(s, s.childNodes.length) : u.setEndAfter(s);
98
+ const g = j(u).textContent;
91
99
  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)
100
+ prefix: l.substring(l.length - e),
101
+ suffix: g.substring(0, e)
102
+ };
103
+ }, P = (t) => t.every((n) => n.range instanceof Range && !n.range.collapsed), Lt = /^\s*$/, kt = (t) => Lt.test(t.toString()), Ot = (t, n) => {
104
+ const e = (r) => Math.round(r * 10) / 10, o = {
105
+ top: e(t.top),
106
+ bottom: e(t.bottom),
107
+ left: e(t.left),
108
+ right: e(t.right)
109
+ }, s = {
110
+ top: e(n.top),
111
+ bottom: e(n.bottom),
112
+ left: e(n.left),
113
+ right: e(n.right)
114
+ };
115
+ if (Math.abs(o.top - s.top) < 0.5 && Math.abs(o.bottom - s.bottom) < 0.5) {
116
+ if (Math.abs(o.left - s.right) < 0.5 || Math.abs(o.right - s.left) < 0.5)
109
117
  return "inline-adjacent";
110
- if (o.left >= i.left && o.right <= i.right)
118
+ if (o.left >= s.left && o.right <= s.right)
111
119
  return "inline-is-contained";
112
- if (o.left <= i.left && o.right >= i.right)
120
+ if (o.left <= s.left && o.right >= s.right)
113
121
  return "inline-contains";
114
- } else if (o.top <= i.top && o.bottom >= i.bottom) {
115
- if (o.left <= i.left && o.right >= i.right)
122
+ } else if (o.top <= s.top && o.bottom >= s.bottom) {
123
+ if (o.left <= s.left && o.right >= s.right)
116
124
  return "block-contains";
117
- } else if (o.top >= i.top && o.bottom <= i.bottom && o.left >= i.left && o.right <= i.right)
125
+ } else if (o.top >= s.top && o.bottom <= s.bottom && o.left >= s.left && o.right <= s.right)
118
126
  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;
127
+ }, It = (t, n) => {
128
+ 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);
129
+ return new DOMRect(e, s, o - e, r - s);
130
+ }, Bt = (t) => t.reduce((n, e) => {
131
+ if (e.width === 0 || e.height === 0)
132
+ return n;
133
+ let o = [...n], s = !1;
134
+ for (const r of n) {
135
+ const l = Ot(e, r);
136
+ if (l === "inline-adjacent") {
137
+ o = o.map((u) => u === r ? It(e, r) : u), s = !0;
130
138
  break;
131
- } else if (a === "inline-contains") {
132
- o = o.map((r) => r === s ? n : r), i = !0;
139
+ } else if (l === "inline-contains") {
140
+ o = o.map((u) => u === r ? e : u), s = !0;
133
141
  break;
134
- } else if (a === "inline-is-contained") {
135
- i = !0;
142
+ } else if (l === "inline-is-contained") {
143
+ s = !0;
136
144
  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;
145
+ } else if (l === "block-contains" || l === "block-is-contained") {
146
+ e.width < r.width && (o = o.map((u) => u === r ? e : u)), s = !0;
139
147
  break;
140
148
  }
141
149
  }
142
- return i ? o : [...o, n];
143
- }, []), xo = (t) => ({
150
+ return s ? o : [...o, e];
151
+ }, []), ge = (t) => ({
144
152
  length: t.length,
145
- item: (e) => t[e],
153
+ item: (n) => t[n],
146
154
  [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,
155
+ for (let n = 0; n < this.length; n++)
156
+ yield this.item(n);
157
+ }
158
+ }), Nt = (t, n, e) => {
159
+ const o = document.createRange(), s = e ? t.startContainer.parentElement.closest(e) : n;
160
+ o.setStart(s, 0), o.setEnd(t.startContainer, t.startOffset);
161
+ const r = j(o).textContent, l = t.toString(), u = r.length || 0, g = u + l.length;
162
+ return e ? { quote: l, start: u, end: g, range: t, offsetReference: s } : { quote: l, start: u, end: g, range: t };
163
+ }, nt = (t, n) => {
164
+ var p, d;
165
+ const { start: e, end: o } = t, s = t.offsetReference || n, r = document.createNodeIterator(
166
+ n,
159
167
  NodeFilter.SHOW_TEXT,
160
- (h) => {
161
- var v;
162
- return (v = h.parentElement) != null && v.closest(nt) ? NodeFilter.FILTER_SKIP : NodeFilter.FILTER_ACCEPT;
168
+ (i) => {
169
+ var E;
170
+ return (E = i.parentElement) != null && E.closest(U) ? NodeFilter.FILTER_SKIP : NodeFilter.FILTER_ACCEPT;
163
171
  }
164
172
  );
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);
173
+ let l = 0;
174
+ const u = document.createRange();
175
+ let g = r.nextNode();
176
+ g === null && console.error("Could not revive annotation target. Content missing.");
177
+ let S = !s;
178
+ for (; g !== null; ) {
179
+ if (S || (S = typeof (s == null ? void 0 : s.contains) == "function" ? s.contains(g) : !1), S) {
180
+ const i = ((p = g.textContent) == null ? void 0 : p.length) || 0;
181
+ if (l + i > e) {
182
+ u.setStart(g, e - l);
175
183
  break;
176
184
  }
177
- a += h;
185
+ l += i;
178
186
  }
179
- d = s.nextNode();
187
+ g = r.nextNode();
180
188
  }
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);
189
+ for (; g !== null; ) {
190
+ const i = ((d = g.textContent) == null ? void 0 : d.length) || 0;
191
+ if (l + i >= o) {
192
+ u.setEnd(g, o - l);
185
193
  break;
186
194
  }
187
- a += h, d = s.nextNode();
195
+ l += i, g = r.nextNode();
188
196
  }
189
197
  return {
190
198
  ...t,
191
- range: r
199
+ range: u
192
200
  };
193
- }, At = (t, e) => q(t.selector) ? t : {
201
+ }, Y = (t, n) => P(t.selector) ? t : {
194
202
  ...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) => {
203
+ selector: t.selector.map((e) => e.range instanceof Range && !e.range.collapsed ? e : nt(e, n))
204
+ }, q = (t, n) => P(t.target.selector) ? t : { ...t, target: Y(t.target, n) }, Pt = (t, n) => {
205
+ const e = t.cloneRange();
206
+ return n.contains(e.startContainer) || e.setStart(n, 0), n.contains(e.endContainer) || e.setEnd(n, n.childNodes.length), e;
207
+ }, ot = (t) => {
200
208
  if (t === null)
201
209
  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)
210
+ const { overflowY: n } = window.getComputedStyle(t);
211
+ return n !== "visible" && n !== "hidden" && t.scrollHeight > t.clientHeight ? t : ot(t.parentElement);
212
+ }, Mt = (t, n) => (e) => {
213
+ const o = typeof e == "string" ? e : e.id, s = (p) => {
214
+ const d = r.getBoundingClientRect(), i = r.clientHeight, E = r.clientWidth, C = p.selector[0].range.getBoundingClientRect(), { width: v, height: x } = n.getAnnotationBounds(o), a = C.top - d.top, c = C.left - d.left, b = r.parentElement ? r.scrollTop : 0, y = r.parentElement ? r.scrollLeft : 0, m = a + b - (i - x) / 2, f = c + y - (E - v) / 2;
215
+ r.scroll({ top: m, left: f, behavior: "smooth" });
216
+ }, r = ot(t);
217
+ if (!r)
210
218
  return console.warn(`The scroll parent is missing for the annotation: ${o}`, { container: t }), !1;
211
- const a = e.getAnnotation(o);
212
- if (!a)
219
+ const l = n.getAnnotation(o);
220
+ if (!l)
213
221
  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 = {
222
+ const { range: u } = l.target.selector[0];
223
+ if (u && !u.collapsed)
224
+ return s(l.target), !0;
225
+ const g = Y(l.target, t), { range: S } = g.selector[0];
226
+ return S && !S.collapsed ? (s(g), !0) : !1;
227
+ }, M = {
220
228
  fill: "rgb(0, 128, 255)",
221
229
  fillOpacity: 0.18
222
- }, vt = {
230
+ }, X = {
223
231
  fill: "rgb(0, 128, 255)",
224
232
  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();
233
+ }, Ht = (t, n, e, o, s) => {
234
+ var l, u;
235
+ const r = e ? typeof e == "function" ? e(t.annotation, t.state, s) || ((l = t.state) != null && l.selected ? X : M) : e : (u = t.state) != null && u.selected ? X : M;
236
+ return o && o.paint(t, n) || r;
237
+ }, Kt = (t) => {
238
+ const { top: n, left: e } = t.getBoundingClientRect(), { innerWidth: o, innerHeight: s } = window, r = -e, l = -n, u = o - e, g = s - n;
239
+ return { top: n, left: e, minX: r, minY: l, maxX: u, maxY: g };
240
+ }, Ut = (t) => {
241
+ let n = /* @__PURE__ */ new Set();
234
242
  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;
243
+ const s = o.map((r) => r.id);
244
+ (n.size !== s.length || s.some((r) => !n.has(r))) && t.set(s), n = new Set(s);
245
+ };
246
+ }, G = (t, n, e, o) => {
247
+ const { store: s, selection: r, hover: l } = n;
248
+ let u, g, S;
249
+ const p = Ut(e), d = (R) => {
250
+ const { x: h, y: A } = t.getBoundingClientRect(), L = s.getAt(R.clientX - h, R.clientY - A, !1, g);
251
+ L ? l.current !== L.id && (t.classList.add("hovered"), l.set(L.id)) : l.current && (t.classList.remove("hovered"), l.set(null));
252
+ };
253
+ t.addEventListener("pointermove", d);
254
+ const i = (R = !1) => {
255
+ S && S.clear();
256
+ const h = Kt(t), { minX: A, minY: L, maxX: B, maxY: N } = h, I = g ? s.getIntersecting(A, L, B, N).filter(({ annotation: O }) => g(O)) : s.getIntersecting(A, L, B, N), _ = r.selected.map(({ id: O }) => O), k = I.map(({ annotation: O, rects: $ }) => {
257
+ const H = _.includes(O.id), it = O.id === l.current;
250
258
  return {
251
- annotation: k,
252
- rects: P,
253
- state: { selected: Q, hovered: Se }
259
+ annotation: O,
260
+ rects: $,
261
+ state: { selected: H, hovered: it }
254
262
  };
255
263
  });
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();
269
- });
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);
264
+ o.redraw(k, h, u, S, R), setTimeout(() => p(I.map(({ annotation: O }) => O)), 1);
265
+ }, E = (R) => {
266
+ S = R, i();
267
+ }, C = (R) => {
268
+ u = R, i();
269
+ }, v = (R) => {
270
+ g = R, i(!1);
271
+ }, x = () => i();
272
+ s.observe(x);
273
+ const a = r.subscribe(() => i()), c = l.subscribe(() => i()), b = () => i(!0);
274
+ document.addEventListener("scroll", b, { capture: !0, passive: !0 });
275
+ const y = W(() => {
276
+ s.recalculatePositions(), S && S.reset(), i();
275
277
  });
276
- return R.observe(document.body, L), {
278
+ window.addEventListener("resize", y);
279
+ const m = new ResizeObserver(y);
280
+ m.observe(t);
281
+ const f = { attributes: !0, childList: !0, subtree: !0 }, w = new MutationObserver(W((R) => {
282
+ R.every((A) => A.target === t || t.contains(A.target)) || i(!0);
283
+ }, 150));
284
+ return w.observe(document.body, f), {
277
285
  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();
286
+ t.removeEventListener("pointermove", d), o.destroy(), s.unobserve(x), a(), c(), document.removeEventListener("scroll", b), window.removeEventListener("resize", y), m.disconnect(), w.disconnect();
279
287
  },
280
- redraw: h,
281
- setStyle: b,
282
- setFilter: p,
283
- setPainter: v,
288
+ redraw: i,
289
+ setStyle: C,
290
+ setFilter: v,
291
+ setPainter: E,
284
292
  setVisible: o.setVisible
285
293
  };
286
- }, $e = () => {
294
+ }, $t = () => {
287
295
  const t = document.createElement("canvas");
288
296
  return t.width = window.innerWidth, t.height = window.innerHeight, t.className = "r6o-canvas-highlight-layer bg", t;
289
- }, He = (t, e) => {
297
+ }, Ft = (t, n) => {
290
298
  t.width = window.innerWidth, t.height = window.innerHeight;
291
- }, je = (t) => {
299
+ }, _t = (t) => {
292
300
  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();
301
+ const n = $t(), e = n.getContext("2d");
302
+ document.body.appendChild(n);
303
+ const o = (u, g, S, p) => requestAnimationFrame(() => {
304
+ const { width: d, height: i } = n;
305
+ e.clearRect(-0.5, -0.5, d + 1, i + 1), p && p.clear();
306
+ const { top: E, left: C } = g;
307
+ [...u].sort((x, a) => {
308
+ const { annotation: { target: { created: c } } } = x, { annotation: { target: { created: b } } } = a;
309
+ return c.getTime() - b.getTime();
302
310
  }).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
311
+ var y;
312
+ const a = S ? typeof S == "function" ? S(x.annotation, x.state) : S : (y = x.state) != null && y.selected ? X : M, c = p && p.paint(x, g) || a, b = x.rects.map(({ x: m, y: f, width: w, height: T }) => ({
313
+ x: m + C,
314
+ y: f + E,
315
+ width: w,
316
+ height: T
309
317
  }));
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();
318
+ if (e.fillStyle = c.fill, e.globalAlpha = c.fillOpacity || 1, b.forEach(
319
+ ({ x: m, y: f, width: w, height: T }) => e.fillRect(m, f, w, T)
320
+ ), c.underlineColor) {
321
+ e.globalAlpha = 1, e.strokeStyle = c.underlineColor, e.lineWidth = c.underlineThickness ?? 1;
322
+ const m = c.underlineOffset ?? 0;
323
+ b.forEach(({ x: f, y: w, width: T, height: R }) => {
324
+ e.beginPath(), e.moveTo(f, w + R + m), e.lineTo(f + T, w + R + m), e.stroke();
317
325
  });
318
326
  }
319
327
  });
320
- }), i = Kt(() => {
321
- He(e);
328
+ }), s = W(() => {
329
+ Ft(n);
322
330
  });
323
- return window.addEventListener("resize", i), {
331
+ return window.addEventListener("resize", s), {
324
332
  destroy: () => {
325
- e.remove(), window.removeEventListener("resize", i);
333
+ n.remove(), window.removeEventListener("resize", s);
326
334
  },
327
- setVisible: (r) => {
335
+ setVisible: (u) => {
328
336
  console.log("setVisible not implemented on Canvas renderer");
329
337
  },
330
338
  redraw: o
331
339
  };
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()}`,
340
+ }, Dt = (t, n, e) => G(t, n, e, _t(t)), Vt = (t) => [
341
+ `background-color:${J((t == null ? void 0 : t.fill) || M.fill).alpha((t == null ? void 0 : t.fillOpacity) === void 0 ? M.fillOpacity : t.fillOpacity).toHex()}`,
465
342
  t != null && t.underlineThickness ? "text-decoration:underline" : void 0,
466
343
  t != null && t.underlineColor ? `text-decoration-color:${t.underlineColor}` : void 0,
467
344
  t != null && t.underlineOffset ? `text-underline-offset:${t.underlineOffset}px` : void 0,
468
345
  t != null && t.underlineThickness ? `text-decoration-thickness:${t.underlineThickness}px` : void 0
469
- ].filter(Boolean).join(";"), en = () => {
346
+ ].filter(Boolean).join(";"), Wt = () => {
470
347
  const t = document.createElement("style");
471
348
  document.getElementsByTagName("head")[0].appendChild(t);
472
- let e = /* @__PURE__ */ new Set();
349
+ let n = /* @__PURE__ */ new Set();
473
350
  return {
474
351
  destroy: () => {
475
352
  CSS.highlights.clear(), t.remove();
476
353
  },
477
- setVisible: (s) => {
354
+ setVisible: (r) => {
478
355
  console.log("setVisible not implemented on CSS Custom Highlights renderer");
479
356
  },
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)} }`;
357
+ redraw: (r, l, u, g) => {
358
+ g && g.clear();
359
+ const S = new Set(r.map((d) => d.annotation.id));
360
+ Array.from(n).filter((d) => !S.has(d));
361
+ const p = r.map((d) => {
362
+ var C;
363
+ const i = u ? typeof u == "function" ? u(d.annotation, d.state) : u : (C = d.state) != null && C.selected ? X : M, E = g && g.paint(d, l) || i;
364
+ return `::highlight(_${d.annotation.id}) { ${Vt(E)} }`;
488
365
  });
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;
366
+ t.innerHTML = p.join(`
367
+ `), CSS.highlights.clear(), r.forEach(({ annotation: d }) => {
368
+ const i = d.target.selector.map((C) => C.range), E = new Highlight(...i);
369
+ CSS.highlights.set(`_${d.id}`, E);
370
+ }), n = S;
494
371
  }
495
372
  };
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) => {
373
+ }, Yt = (t, n, e) => G(t, n, e, Wt()), Xt = (t, n) => {
374
+ 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)));
375
+ return s.sort((r, l) => o(l) - o(r)), s.findIndex((r) => r.rects.includes(t));
376
+ }, zt = (t) => {
522
377
  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 = [];
378
+ const n = document.createElement("div");
379
+ n.className = "r6o-span-highlight-layer", t.insertBefore(n, t.firstChild);
380
+ let e = [];
526
381
  return {
527
382
  destroy: () => {
528
- e.remove();
383
+ n.remove();
529
384
  },
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);
385
+ redraw: (l, u, g, S, p) => {
386
+ const i = !(at(e, l) && p);
387
+ if (!S && !i) return;
388
+ i && (n.innerHTML = ""), [...l].sort((C, v) => {
389
+ const { annotation: { target: { created: x } } } = C, { annotation: { target: { created: a } } } = v;
390
+ return x && a ? x.getTime() - a.getTime() : 0;
391
+ }).forEach((C) => {
392
+ C.rects.map((v) => {
393
+ const x = Xt(v, l), a = Ht(C, u, g, S, x);
394
+ if (i) {
395
+ const c = document.createElement("span");
396
+ c.className = "r6o-annotation", c.dataset.annotation = C.annotation.id, c.style.left = `${v.x}px`, c.style.top = `${v.y}px`, c.style.width = `${v.width}px`, c.style.height = `${v.height}px`, c.style.backgroundColor = J((a == null ? void 0 : a.fill) || M.fill).alpha((a == null ? void 0 : a.fillOpacity) === void 0 ? M.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
397
  }
543
398
  });
544
- }), n = a;
545
- },
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;
594
- }
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;
399
+ }), e = l;
642
400
  },
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
- };
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;
401
+ setVisible: (l) => {
402
+ l ? n.classList.remove("hidden") : n.classList.add("hidden");
1228
403
  }
1229
404
  };
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) => {
405
+ }, qt = (t, n, e) => G(t, n, e, zt(t)), me = (t, n) => ({
406
+ parse: (e) => Qt(e),
407
+ serialize: (e) => Zt(e, t, n)
408
+ }), jt = (t) => t.quote !== void 0 && t.start !== void 0 && t.end !== void 0, Gt = (t) => {
1301
409
  const {
1302
- id: e,
1303
- creator: n,
410
+ id: n,
411
+ creator: e,
1304
412
  created: o,
1305
- modified: i,
1306
- target: s
1307
- } = t, a = Array.isArray(s) ? s : [s];
1308
- if (a.length === 0)
413
+ modified: s,
414
+ target: r
415
+ } = t, l = Array.isArray(r) ? r : [r];
416
+ if (l.length === 0)
1309
417
  return { error: Error(`No targets found for annotation: ${t.id}`) };
1310
- const r = {
1311
- creator: pe(n),
418
+ const u = {
419
+ creator: dt(e),
1312
420
  created: o ? new Date(o) : void 0,
1313
- updated: i ? new Date(i) : void 0,
1314
- annotation: e,
421
+ updated: s ? new Date(s) : void 0,
422
+ annotation: n,
1315
423
  selector: [],
1316
424
  // @ts-expect-error: `styleClass` is not part of the core `TextAnnotationTarget` type
1317
- styleClass: "styleClass" in a[0] ? a[0].styleClass : void 0
425
+ styleClass: "styleClass" in l[0] ? l[0].styleClass : void 0
1318
426
  };
1319
- for (const d of a) {
1320
- const g = (Array.isArray(d.selector) ? d.selector : [d.selector]).reduce((u, h) => {
1321
- switch (h.type) {
427
+ for (const g of l) {
428
+ const p = (Array.isArray(g.selector) ? g.selector : [g.selector]).reduce((d, i) => {
429
+ switch (i.type) {
1322
430
  case "TextQuoteSelector":
1323
- u.quote = h.exact;
431
+ d.quote = i.exact;
1324
432
  break;
1325
433
  case "TextPositionSelector":
1326
- u.start = h.start, u.end = h.end;
434
+ d.start = i.start, d.end = i.end;
1327
435
  break;
1328
436
  }
1329
- return u;
437
+ return d;
1330
438
  }, {});
1331
- if (Hn(g))
1332
- r.selector.push(
439
+ if (jt(p))
440
+ u.selector.push(
1333
441
  {
1334
- ...g,
1335
- id: d.id,
442
+ ...p,
443
+ id: g.id,
1336
444
  // @ts-expect-error: `scope` is not part of the core `TextSelector` type
1337
- scope: d.scope
445
+ scope: g.scope
1338
446
  }
1339
447
  );
1340
448
  else {
1341
- const u = [
1342
- g.start ? void 0 : "TextPositionSelector",
1343
- g.quote ? void 0 : "TextQuoteSelector"
449
+ const d = [
450
+ p.start ? void 0 : "TextPositionSelector",
451
+ p.quote ? void 0 : "TextQuoteSelector"
1344
452
  ].filter(Boolean);
1345
- return { error: Error(`Missing selector types: ${u.join(" and ")} for annotation: ${t.id}`) };
453
+ return { error: Error(`Missing selector types: ${d.join(" and ")} for annotation: ${t.id}`) };
1346
454
  }
1347
455
  }
1348
- return { parsed: r };
1349
- }, zn = (t) => {
1350
- const e = t.id || fe(), {
1351
- creator: n,
456
+ return { parsed: u };
457
+ }, Qt = (t) => {
458
+ const n = t.id || tt(), {
459
+ creator: e,
1352
460
  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 } : {
461
+ modified: s,
462
+ body: r,
463
+ ...l
464
+ } = t, u = lt(r, n), g = Gt(t);
465
+ return "error" in g ? { error: g.error } : {
1358
466
  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 = {
467
+ ...l,
468
+ id: n,
469
+ bodies: u,
470
+ target: g.parsed
471
+ }
472
+ };
473
+ }, Zt = (t, n, e) => {
474
+ const { bodies: o, target: s, ...r } = t, {
475
+ selector: l,
476
+ creator: u,
477
+ created: g,
478
+ updated: S,
479
+ ...p
480
+ } = s, d = l.map((i) => {
481
+ const { id: E, quote: C, start: v, end: x, range: a } = i, c = {
1374
482
  type: "TextQuoteSelector",
1375
- exact: b
483
+ exact: C
1376
484
  };
1377
- if (n) {
1378
- const { prefix: S, suffix: E } = ke(c, n);
1379
- l.prefix = S, l.suffix = E;
485
+ if (e) {
486
+ const { prefix: y, suffix: m } = Rt(a, e);
487
+ c.prefix = y, c.suffix = m;
1380
488
  }
1381
- const m = {
489
+ const b = {
1382
490
  type: "TextPositionSelector",
1383
- start: p,
491
+ start: v,
1384
492
  end: x
1385
493
  };
1386
494
  return {
1387
- ...g,
1388
- id: v,
495
+ ...p,
496
+ id: E,
1389
497
  // @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]
498
+ scope: "scope" in i ? i.scope : void 0,
499
+ source: n,
500
+ selector: [c, b]
1393
501
  };
1394
502
  });
1395
503
  return {
1396
- ...s,
504
+ ...r,
1397
505
  "@context": "http://www.w3.org/ns/anno.jsonld",
1398
506
  id: t.id,
1399
507
  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;
508
+ body: ct(t.bodies),
509
+ creator: u,
510
+ created: g == null ? void 0 : g.toISOString(),
511
+ modified: S == null ? void 0 : S.toISOString(),
512
+ target: d
513
+ };
514
+ }, Jt = (t, n) => {
515
+ const e = new St(), o = /* @__PURE__ */ new Map(), s = (a, c) => {
516
+ const b = a.selector.flatMap((m) => {
517
+ const f = P([m]) ? m.range : nt(m, n).range;
518
+ return Array.from(f.getClientRects());
519
+ }), y = Bt(b).map(({ left: m, top: f, right: w, bottom: T }) => new DOMRect(m - c.left, f - c.top, w - m, T - f));
520
+ return y.map((m) => {
521
+ const { x: f, y: w, width: T, height: R } = m;
1683
522
  return {
1684
- minX: L,
1685
- minY: R,
1686
- maxX: L + U,
1687
- maxY: R + V,
523
+ minX: f,
524
+ minY: w,
525
+ maxX: f + T,
526
+ maxY: w + R,
1688
527
  annotation: {
1689
- id: c.annotation,
1690
- rects: S
528
+ id: a.annotation,
529
+ rects: y
1691
530
  }
1692
531
  };
1693
532
  });
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);
533
+ }, r = () => [...o.values()], l = () => {
534
+ e.clear(), o.clear();
535
+ }, u = (a) => {
536
+ const c = s(a, n.getBoundingClientRect());
537
+ c.length !== 0 && (c.forEach((b) => e.insert(b)), o.set(a.annotation, c));
538
+ }, g = (a) => {
539
+ const c = o.get(a.annotation);
540
+ c && (c.forEach((b) => e.remove(b)), o.delete(a.annotation));
541
+ }, S = (a) => {
542
+ g(a), u(a);
543
+ }, p = (a, c = !0) => {
544
+ c && l();
545
+ const b = n.getBoundingClientRect(), y = a.map((f) => ({ target: f, rects: s(f, b) }));
546
+ y.forEach(({ target: f, rects: w }) => {
547
+ w.length > 0 && o.set(f.annotation, w);
1709
548
  });
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)
549
+ const m = y.flatMap(({ rects: f }) => f);
550
+ e.load(m);
551
+ }, d = (a, c, b = !1) => {
552
+ const y = e.search({
553
+ minX: a,
554
+ minY: c,
555
+ maxX: a,
556
+ maxY: c
557
+ }), m = (f) => f.annotation.rects.reduce((w, T) => w + T.width * T.height, 0);
558
+ return y.length > 0 ? (y.sort((f, w) => m(f) - m(w)), b ? y.map((f) => f.annotation.id) : [y[0].annotation.id]) : [];
559
+ }, i = (a) => {
560
+ const c = E(a);
561
+ if (c.length === 0)
1723
562
  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);
563
+ let b = c[0].left, y = c[0].top, m = c[0].right, f = c[0].bottom;
564
+ for (let w = 1; w < c.length; w++) {
565
+ const T = c[w];
566
+ b = Math.min(b, T.left), y = Math.min(y, T.top), m = Math.max(m, T.right), f = Math.max(f, T.bottom);
1728
567
  }
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 : [];
568
+ return new DOMRect(b, y, m - b, f - y);
569
+ }, E = (a) => {
570
+ const c = o.get(a);
571
+ return c ? c[0].annotation.rects : [];
1733
572
  };
1734
573
  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);
574
+ all: r,
575
+ clear: l,
576
+ getAt: d,
577
+ getAnnotationBounds: i,
578
+ getAnnotationRects: E,
579
+ getIntersecting: (a, c, b, y) => {
580
+ const m = e.search({ minX: a, minY: c, maxX: b, maxY: y }), f = new Set(m.map((w) => w.annotation.id));
581
+ return Array.from(f).map((w) => ({
582
+ annotation: t.getAnnotation(w),
583
+ rects: E(w)
584
+ })).filter((w) => !!w.annotation);
1746
585
  },
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));
586
+ insert: u,
587
+ recalculate: () => p(t.all().map((a) => a.target), !0),
588
+ remove: g,
589
+ set: p,
590
+ size: () => e.all().length,
591
+ update: S
592
+ };
593
+ }, te = (t, n) => {
594
+ const e = ut(), o = Jt(e, t), s = ft(e, n.userSelectAction, n.adapter), r = gt(e), l = mt(), u = (a, c = K.LOCAL) => {
595
+ const b = q(a, t), y = P(b.target.selector);
596
+ return y && e.addAnnotation(b, c), y;
597
+ }, g = (a, c = !0, b = K.LOCAL) => {
598
+ const y = a.map((f) => q(f, t)), m = y.filter((f) => !P(f.target.selector));
599
+ return e.bulkAddAnnotations(y, c, b), m;
600
+ }, S = (a, c = K.LOCAL) => {
601
+ const b = a.map((m) => q(m, t)), y = b.filter((m) => !P(m.target.selector));
602
+ return b.forEach((m) => {
603
+ e.getAnnotation(m.id) ? e.updateAnnotation(m, c) : e.addAnnotation(m, c);
604
+ }), y;
605
+ }, p = (a, c = K.LOCAL) => {
606
+ const b = Y(a, t);
607
+ e.updateTarget(b, c);
608
+ }, d = (a, c = K.LOCAL) => {
609
+ const b = a.map((y) => Y(y, t));
610
+ e.bulkUpdateTargets(b, c);
611
+ };
612
+ function i(a, c, b, y) {
613
+ const m = b || !!y, f = o.getAt(a, c, m).map((T) => e.getAnnotation(T)), w = y ? f.filter(y) : f;
614
+ if (w.length !== 0)
615
+ return b ? w : w[0];
616
+ }
617
+ const E = (a) => {
618
+ if (o.getAnnotationRects(a).length !== 0)
619
+ return o.getAnnotationBounds(a);
620
+ }, C = (a, c, b, y) => o.getIntersecting(a, c, b, y), v = (a) => o.getAnnotationRects(a), x = () => o.recalculate();
621
+ return e.observe(({ changes: a }) => {
622
+ const c = (a.deleted || []).filter((m) => P(m.target.selector)), b = (a.created || []).filter((m) => P(m.target.selector)), y = (a.updated || []).filter((m) => P(m.newValue.target.selector));
623
+ (c == null ? void 0 : c.length) > 0 && c.forEach((m) => o.remove(m.target)), b.length > 0 && o.set(b.map((m) => m.target), !1), (y == null ? void 0 : y.length) > 0 && y.forEach(({ newValue: m }) => o.update(m.target));
1785
624
  }), {
1786
625
  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,
626
+ ...e,
627
+ addAnnotation: u,
628
+ bulkAddAnnotations: g,
629
+ bulkUpdateTargets: d,
630
+ bulkUpsertAnnotations: S,
631
+ getAnnotationBounds: E,
632
+ getAnnotationRects: v,
633
+ getIntersecting: C,
634
+ getAt: i,
1796
635
  recalculatePositions: x,
1797
- updateTarget: g
636
+ updateTarget: p
1798
637
  },
1799
- selection: i,
1800
- hover: s,
1801
- viewport: a
638
+ selection: s,
639
+ hover: r,
640
+ viewport: l
1802
641
  };
1803
- }, oo = () => {
642
+ }, ee = () => {
1804
643
  const t = document.createElement("canvas");
1805
644
  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));
645
+ const n = t.getContext("2d");
646
+ return n.scale(2, 2), n.translate(0.5, 0.5), t;
647
+ }, ne = (t, n = {}) => {
648
+ const e = ee(), o = e.getContext("2d");
649
+ document.body.appendChild(e);
650
+ const s = /* @__PURE__ */ new Map(), r = (p) => Array.from(s.entries()).filter(([d, i]) => i.presenceKey === p.presenceKey).map(([d, i]) => d);
651
+ return t.on("selectionChange", (p, d) => {
652
+ r(p).forEach((E) => s.delete(E)), d && d.forEach((E) => s.set(E, p));
1814
653
  }), {
1815
654
  clear: () => {
1816
- const { width: g, height: u } = n;
1817
- o.clearRect(-0.5, -0.5, g + 1, u + 1);
655
+ const { width: p, height: d } = e;
656
+ o.clearRect(-0.5, -0.5, p + 1, d + 1);
1818
657
  },
1819
658
  destroy: () => {
1820
- n.remove();
659
+ e.remove();
1821
660
  },
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
661
+ paint: (p, d, i) => {
662
+ n.font && (o.font = n.font);
663
+ const E = s.get(p.annotation.id);
664
+ if (E) {
665
+ const { height: C } = p.rects[0], v = p.rects[0].x + d.left, x = p.rects[0].y + d.top;
666
+ o.fillStyle = E.appearance.color, o.fillRect(v - 2, x - 2.5, 2, C + 5);
667
+ const a = o.measureText(E.appearance.label), c = a.width + 6, b = a.actualBoundingBoxAscent + a.actualBoundingBoxDescent + 8, y = a.fontBoundingBoxAscent ? 8 : 6.5;
668
+ return o.fillRect(v - 2, x - 2.5 - b, c, b), o.fillStyle = "#fff", o.fillText(E.appearance.label, v + 1, x - y), {
669
+ fill: E.appearance.color,
670
+ fillOpacity: i ? 0.45 : 0.18
1832
671
  };
1833
672
  }
1834
673
  },
1835
674
  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);
675
+ e.width = 2 * window.innerWidth, e.height = 2 * window.innerHeight;
676
+ const p = e.getContext("2d");
677
+ p.scale(2, 2), p.translate(0.5, 0.5);
1839
678
  }
1840
679
  };
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) => {
680
+ }, Q = 300, st = ["up", "down", "left", "right"], rt = At ? "⌘+a" : "ctrl+a", oe = [
681
+ ...st.map((t) => `shift+${t}`),
682
+ rt
683
+ ], se = (t, n, e) => {
2220
684
  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))
685
+ const { annotatingEnabled: s, offsetReferenceSelector: r, selectionMode: l } = e, u = (h) => o = h;
686
+ let g;
687
+ const S = (h) => g = h, { store: p, selection: d } = n;
688
+ let i, E, C;
689
+ const v = (h) => {
690
+ E !== !1 && (i = F(t, h.target) ? void 0 : {
691
+ annotation: tt(),
692
+ selector: [],
693
+ creator: o,
694
+ created: /* @__PURE__ */ new Date()
695
+ });
696
+ }, x = W((h) => {
697
+ const A = document.getSelection();
698
+ if (!(A != null && A.anchorNode))
699
+ return;
700
+ if (F(t, A.anchorNode)) {
701
+ i = void 0;
2262
702
  return;
2263
- if (rt(M.anchorNode)) {
2264
- h = void 0;
703
+ }
704
+ const L = h.timeStamp - ((C == null ? void 0 : C.timeStamp) || h.timeStamp);
705
+ if ((C == null ? void 0 : C.type) === "pointerdown" && (L < 1e3 && !i || A.isCollapsed && L < Q) && v(C || h), !i) return;
706
+ if (A.isCollapsed) {
707
+ p.getAnnotation(i.annotation) && (d.clear(), p.deleteAnnotation(i.annotation));
2265
708
  return;
2266
709
  }
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));
710
+ const N = Array.from(Array(A.rangeCount).keys()).map((k) => A.getRangeAt(k)).map((k) => Pt(k, t));
711
+ if (N.every((k) => kt(k))) return;
712
+ const I = N.flatMap((k) => Tt(t, k.cloneRange()));
713
+ (I.length !== i.selector.length || I.some((k, O) => {
714
+ var $;
715
+ return k.toString() !== (($ = i.selector[O]) == null ? void 0 : $.quote);
716
+ })) && (i = {
717
+ ...i,
718
+ selector: I.map((k) => Nt(k, t, r)),
719
+ updated: /* @__PURE__ */ new Date()
720
+ }, p.getAnnotation(i.annotation) ? p.updateTarget(i, K.LOCAL) : d.clear());
721
+ }), a = (h) => {
722
+ F(t, h.target) || (C = z(h), E = C.button === 0);
723
+ }, c = async (h) => {
724
+ if (!E) return;
725
+ if (F(t, h.target)) {
726
+ e.dismissOnClickOutside && d.clear();
2271
727
  return;
2272
728
  }
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()
729
+ const A = () => {
730
+ const { x: B, y: N } = t.getBoundingClientRect(), I = h.target instanceof Node && t.contains(h.target) && p.getAt(h.clientX - B, h.clientY - N, l === "all", g);
731
+ if (I) {
732
+ const { selected: _ } = d, k = new Set(_.map((H) => H.id)), O = Array.isArray(I) ? I.map((H) => H.id) : [I.id];
733
+ (k.size !== O.length || !O.every((H) => k.has(H))) && d.userSelect(O, h);
734
+ } else
735
+ d.clear();
736
+ };
737
+ if (h.timeStamp - C.timeStamp < Q) {
738
+ await b();
739
+ const B = document.getSelection();
740
+ if (B != null && B.isCollapsed) {
741
+ i = void 0, A();
742
+ return;
2288
743
  }
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;
2301
- 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)));
2304
- });
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,
744
+ }
745
+ i && i.selector.length > 0 && (T(), d.userSelect(i.annotation, z(h)));
746
+ }, b = async () => {
747
+ const h = document.getSelection();
748
+ let A = !1, L = h == null ? void 0 : h.isCollapsed;
749
+ const B = () => L || A, N = 1;
750
+ return setTimeout(() => A = !0, 50), Ct(() => L = h == null ? void 0 : h.isCollapsed, N, B);
751
+ }, y = (h) => {
752
+ const A = document.getSelection();
753
+ A != null && A.isCollapsed || ((!i || i.selector.length === 0) && x(h), i && (T(), d.userSelect(i.annotation, z(h))));
754
+ }, m = (h) => {
755
+ h.key === "Shift" && i && (document.getSelection().isCollapsed || (T(), d.userSelect(i.annotation, V(h))));
756
+ }, f = (h) => {
757
+ const A = () => setTimeout(() => {
758
+ (i == null ? void 0 : i.selector.length) > 0 && (d.clear(), p.addAnnotation({
759
+ id: i.annotation,
2314
760
  bodies: [],
2315
- target: h.next
2316
- }), u.userSelect(h.next.annotation, gt(T))), document.removeEventListener("selectionchange", M);
761
+ target: i
762
+ }), d.userSelect(i.annotation, V(h))), document.removeEventListener("selectionchange", A);
2317
763
  }, 100);
2318
- document.addEventListener("selectionchange", M), x(T);
764
+ document.addEventListener("selectionchange", A), v(h);
2319
765
  };
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);
766
+ D(oe.join(","), { element: t, keydown: !0, keyup: !1 }, (h) => {
767
+ h.repeat || (C = V(h));
768
+ }), D(rt, { keydown: !0, keyup: !1 }, (h) => {
769
+ C = V(h), f(h);
2324
770
  });
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,
771
+ const w = (h) => {
772
+ h.repeat || h.target !== t && h.target !== document.body || (i = void 0, d.clear());
773
+ };
774
+ D(st.join(","), { keydown: !0, keyup: !1 }, w);
775
+ const T = () => {
776
+ const h = p.getAnnotation(i.annotation);
777
+ if (!h) {
778
+ p.addAnnotation({
779
+ id: i.annotation,
2334
780
  bodies: [],
2335
- target: h.next
781
+ target: i
2336
782
  });
2337
783
  return;
2338
784
  }
2339
- const { target: { updated: M } } = T, { updated: y } = h.next;
2340
- (!M || !y || M < y) && g.updateTarget(h.next);
785
+ const { target: { updated: A } } = h, { updated: L } = i;
786
+ (!A || !L || A < L) && p.updateTarget(i);
2341
787
  };
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)), {
788
+ return t.addEventListener("pointerdown", a), document.addEventListener("pointerup", c), document.addEventListener("contextmenu", y), s && (t.addEventListener("keyup", m), t.addEventListener("selectstart", v), document.addEventListener("selectionchange", x)), {
2343
789
  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();
790
+ t.removeEventListener("pointerdown", a), document.removeEventListener("pointerup", c), document.removeEventListener("contextmenu", y), t.removeEventListener("keyup", m), t.removeEventListener("selectstart", v), document.removeEventListener("selectionchange", x), D.unbind();
2345
791
  },
2346
- setFilter: f,
2347
- setUser: r
792
+ setFilter: S,
793
+ setUser: u
2348
794
  };
2349
- }, wo = (t, e) => ({
795
+ }, re = (t, n) => ({
2350
796
  ...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, {
797
+ annotatingEnabled: t.annotatingEnabled ?? n.annotatingEnabled,
798
+ user: t.user || n.user
799
+ }), Z = "SPANS", pe = (t, n = {}) => {
800
+ Et(t), xt(t);
801
+ const e = re(n, {
2356
802
  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),
803
+ user: pt()
804
+ }), o = te(t, e), { selection: s, viewport: r } = o, l = o.store, u = ht(l), g = yt(o, u, e.adapter);
805
+ let S = e.user;
806
+ const p = e.renderer === "CSS_HIGHLIGHTS" ? CSS.highlights ? "CSS_HIGHLIGHTS" : Z : e.renderer || Z, d = p === "SPANS" ? qt(t, o, r) : p === "CSS_HIGHLIGHTS" ? Yt(t, o, r) : p === "CANVAS" ? Dt(t, o, r) : void 0;
807
+ if (!d)
808
+ throw `Unknown renderer implementation: ${p}`;
809
+ console.debug(`Using ${p} renderer`), e.style && d.setStyle(e.style);
810
+ const i = se(t, o, e);
811
+ return i.setUser(S), {
812
+ ...bt(o, u, e.adapter),
2367
813
  destroy: () => {
2368
- u.destroy(), h.destroy(), r.destroy();
814
+ d.destroy(), i.destroy(), u.destroy();
2369
815
  },
2370
816
  element: t,
2371
- getUser: () => f,
2372
- setFilter: (L) => {
2373
- u.setFilter(L), h.setFilter(L);
817
+ getUser: () => S,
818
+ setFilter: (f) => {
819
+ d.setFilter(f), i.setFilter(f);
2374
820
  },
2375
- setStyle: (L) => u.setStyle(L),
2376
- setUser: (L) => {
2377
- f = L, h.setUser(L);
821
+ setStyle: (f) => d.setStyle(f),
822
+ setUser: (f) => {
823
+ S = f, i.setUser(f);
2378
824
  },
2379
- setSelected: (L) => {
2380
- L ? i.setSelected(L) : i.clear();
825
+ setSelected: (f) => {
826
+ f ? s.setSelected(f) : s.clear();
2381
827
  },
2382
- setPresenceProvider: (L) => {
2383
- L && (u.setPainter(io(L, n.presence)), L.on("selectionChange", () => u.redraw()));
828
+ setPresenceProvider: (f) => {
829
+ f && (d.setPainter(ne(f, e.presence)), f.on("selectionChange", () => d.redraw()));
2384
830
  },
2385
- setVisible: (L) => u.setVisible(L),
2386
- on: d.on,
2387
- off: d.off,
2388
- scrollIntoView: Ke(t, a),
831
+ setVisible: (f) => d.setVisible(f),
832
+ on: g.on,
833
+ off: g.off,
834
+ scrollIntoView: Mt(t, l),
2389
835
  state: o
2390
836
  };
2391
837
  };
2392
838
  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
839
+ X as DEFAULT_SELECTED_STYLE,
840
+ M as DEFAULT_STYLE,
841
+ et as NOT_ANNOTATABLE_CLASS,
842
+ U as NOT_ANNOTATABLE_SELECTOR,
843
+ be as Origin,
844
+ se as SelectionHandler,
845
+ Se as UserSelectAction,
846
+ me as W3CTextFormat,
847
+ Et as cancelSingleClickEvents,
848
+ V as cloneKeyboardEvent,
849
+ z as clonePointerEvent,
850
+ Ce as createBody,
851
+ Dt as createCanvasRenderer,
852
+ Yt as createHighlightsRenderer,
853
+ ne as createPresencePainter,
854
+ Wt as createRenderer,
855
+ qt as createSpansRenderer,
856
+ pe as createTextAnnotator,
857
+ te as createTextAnnotatorState,
858
+ W as debounce,
859
+ re as fillDefaults,
860
+ Rt as getQuoteContext,
861
+ j as getRangeAnnotatableContents,
862
+ At as isMac,
863
+ F as isNotAnnotatable,
864
+ wt as isRangeAnnotatable,
865
+ P as isRevived,
866
+ kt as isWhitespaceOrEmpty,
867
+ Bt as mergeClientRects,
868
+ Ht as paint,
869
+ Qt as parseW3CTextAnnotation,
870
+ xt as programmaticallyFocusable,
871
+ Nt as rangeToSelector,
872
+ q as reviveAnnotation,
873
+ nt as reviveSelector,
874
+ Y as reviveTarget,
875
+ Mt as scrollIntoView,
876
+ Zt as serializeW3CTextAnnotation,
877
+ Tt as splitAnnotatableRanges,
878
+ ge as toDomRectList,
879
+ Pt as trimRangeToContainer,
880
+ Lt as whitespaceOrEmptyRegex
2435
881
  };
2436
882
  //# sourceMappingURL=text-annotator.es.js.map