@soomo/text-annotator 4.1.3-staging.0 → 4.2.0-staging.0

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,17 +1,21 @@
1
1
  import { v4 as dt } from "uuid";
2
- import { parseW3CBodies as Tt, serializeW3CBodies as At, parseW3CUser as Rt, UserSelectAction as vt, createStore as wt, createSelectionState as xt, createHoverState as Lt, createViewportState as Nt, Origin as K, createAnonymousGuest as Ot, createUndoStack as kt, createLifecycleObserver as Mt, createBaseAnnotator as Bt } from "@annotorious/core";
3
- import { Origin as _e, UserSelectAction as Ie, createBody as De } from "@annotorious/core";
2
+ import { parseW3CBodies as At, serializeW3CBodies as vt, parseW3CUser as Rt, UserSelectAction as wt, createStore as xt, createSelectionState as Lt, createHoverState as Nt, createViewportState as Ot, Origin as F, createAnonymousGuest as kt, createUndoStack as _t, createLifecycleObserver as Mt, createBaseAnnotator as Bt } from "@annotorious/core";
3
+ import { Origin as De, UserSelectAction as Pe, createBody as He } from "@annotorious/core";
4
4
  import { createNanoEvents as ut } from "nanoevents";
5
5
  import { colord as ot } from "colord";
6
- import { dequal as _t } from "dequal/lite";
7
- import It from "rbush";
8
- import Dt from "debounce";
6
+ import { dequal as It } from "dequal/lite";
7
+ import Dt from "rbush";
8
+ import Pt from "debounce";
9
9
  import G from "hotkeys-js";
10
- import { poll as Pt } from "poll";
11
- const ft = typeof navigator < "u" && navigator.platform.startsWith("Mac"), gt = "not-annotatable", $ = `.${gt}`, Z = (t, e) => t.contains(e) ? !!(e instanceof HTMLElement ? e.closest($) : e.parentElement?.closest($)) : !0, mt = (t, e) => {
10
+ import { poll as Ht } from "poll";
11
+ const Le = (t) => t.target.selector.every(I), ft = (t) => t.selector.every(I);
12
+ function I(t) {
13
+ return Array.isArray(t) ? t.every((e) => "range" in e && e.range instanceof Range && !e.range.collapsed) : "range" in t && t.range instanceof Range && !t.range.collapsed;
14
+ }
15
+ const gt = typeof navigator < "u" && navigator.platform.startsWith("Mac"), mt = "not-annotatable", W = `.${mt}`, Z = (t, e) => t.contains(e) ? !!(e instanceof HTMLElement ? e.closest(W) : e.parentElement?.closest(W)) : !0, pt = (t, e) => {
12
16
  const o = e.commonAncestorContainer;
13
17
  return !Z(t, o);
14
- }, pt = /^\s*$/, Ht = (t) => pt.test(t.toString()), xe = (t) => pt.test(t.textContent || ""), Ut = (t) => {
18
+ }, ht = /^\s*$/, Ut = (t) => ht.test(t.toString()), Ne = (t) => ht.test(t.textContent || ""), Kt = (t) => {
15
19
  if (t.length === 0) return [];
16
20
  if (t.length === 1) return [t[0]];
17
21
  t.sort((s, n) => {
@@ -20,22 +24,22 @@ const ft = typeof navigator < "u" && navigator.platform.startsWith("Mac"), gt =
20
24
  });
21
25
  const [e, ...o] = t, i = o.reduce((s, n) => s.current.compareBoundaryPoints(Range.START_TO_END, n) >= 0 ? (s.current.compareBoundaryPoints(Range.END_TO_END, n) < 0 && s.current.setEnd(n.endContainer, n.endOffset), s) : (s.merged.push(s.current), s.current = n.cloneRange(), s), { merged: [], current: e.cloneRange() });
22
26
  return [...i.merged, i.current];
23
- }, Kt = (t) => {
27
+ }, Ft = (t) => {
24
28
  (!t.hasAttribute("tabindex") || t.tabIndex < -1) && t.setAttribute("tabindex", "-1"), t.classList.add("no-focus-outline");
25
- }, $t = function* (t) {
29
+ }, Wt = function* (t) {
26
30
  const e = document.createTreeWalker(
27
31
  t.commonAncestorContainer,
28
32
  NodeFilter.SHOW_ELEMENT,
29
- (i) => i instanceof HTMLElement && i.classList.contains(gt) && !i.parentElement?.closest($) && t.intersectsNode(i) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP
33
+ (i) => i instanceof HTMLElement && i.classList.contains(mt) && !i.parentElement?.closest(W) && t.intersectsNode(i) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP
30
34
  );
31
35
  let o;
32
36
  for (; o = e.nextNode(); )
33
37
  o instanceof HTMLElement && (yield o);
34
- }, Ft = (t, e) => {
35
- if (!mt(t, e)) return [];
38
+ }, $t = (t, e) => {
39
+ if (!pt(t, e)) return [];
36
40
  const o = [];
37
41
  let i = null;
38
- for (const s of $t(e)) {
42
+ for (const s of Wt(e)) {
39
43
  let n;
40
44
  i ? (n = document.createRange(), n.setStartAfter(i), n.setEndBefore(s)) : (n = e.cloneRange(), n.setEndBefore(s)), n.collapsed || o.push(n), i = s;
41
45
  }
@@ -46,72 +50,72 @@ const ft = typeof navigator < "u" && navigator.platform.startsWith("Mac"), gt =
46
50
  return o.length > 0 ? o : [e];
47
51
  }, st = (t) => {
48
52
  const e = t.cloneContents();
49
- return e.querySelectorAll($).forEach((o) => o.remove()), e;
50
- }, Wt = (t, e) => {
53
+ return e.querySelectorAll(W).forEach((o) => o.remove()), e;
54
+ }, Yt = (t, e) => {
51
55
  const o = t.cloneRange();
52
56
  return e.contains(o.startContainer) || o.setStart(e, 0), e.contains(o.endContainer) || o.setEnd(e, e.childNodes.length), o;
53
- }, it = new Intl.Segmenter(void 0, { granularity: "grapheme" }), Yt = (t, e, o = 10, i) => {
57
+ }, it = new Intl.Segmenter(void 0, { granularity: "grapheme" }), Xt = (t, e, o = 10, i) => {
54
58
  const s = i ? t.startContainer.parentElement.closest(i) : e, n = document.createRange();
55
59
  n.setStart(s, 0), n.setEnd(t.startContainer, t.startOffset);
56
60
  const r = st(n).textContent, a = document.createRange();
57
61
  a.setStart(t.endContainer, t.endOffset), s === document.body ? a.setEnd(s, s.childNodes.length) : a.setEndAfter(s);
58
- const l = st(a).textContent, m = [...it.segment(r)], g = [...it.segment(l)];
62
+ const c = st(a).textContent, m = [...it.segment(r)], f = [...it.segment(c)];
59
63
  return {
60
- prefix: m.slice(-o).map((h) => h.segment).join(""),
61
- suffix: g.slice(0, o).map((h) => h.segment).join("")
64
+ prefix: m.slice(-o).map((y) => y.segment).join(""),
65
+ suffix: f.slice(0, o).map((y) => y.segment).join("")
62
66
  };
63
- }, Xt = (t, e, o) => {
67
+ }, Vt = (t, e, o) => {
64
68
  const i = document.createRange(), s = o ? t.startContainer.parentElement.closest(o) : e;
65
69
  i.setStart(s, 0), i.setEnd(t.startContainer, t.startOffset);
66
- const n = st(i).textContent, r = t.toString(), a = n.length || 0, l = a + r.length;
67
- return o ? { quote: r, start: a, end: l, range: t, offsetReference: s } : { quote: r, start: a, end: l, range: t };
68
- }, I = (t) => t.every((e) => e.range instanceof Range && !e.range.collapsed), ht = (t, e) => {
70
+ const n = st(i).textContent, r = t.toString(), a = n.length || 0, c = a + r.length;
71
+ return o ? { quote: r, start: a, end: c, range: t, offsetReference: s } : { quote: r, start: a, end: c, range: t };
72
+ }, yt = (t, e) => {
69
73
  const { start: o, end: i } = t, s = t.offsetReference || e, n = document.createTreeWalker(
70
74
  e,
71
75
  NodeFilter.SHOW_TEXT,
72
- (g) => g.parentElement?.closest($) ? NodeFilter.FILTER_SKIP : NodeFilter.FILTER_ACCEPT
76
+ (f) => f.parentElement?.closest(W) ? NodeFilter.FILTER_SKIP : NodeFilter.FILTER_ACCEPT
73
77
  );
74
78
  let r = 0;
75
79
  const a = document.createRange();
76
- let l = n.nextNode();
77
- l === null && console.error("Could not revive annotation target. Content missing.");
80
+ let c = n.nextNode();
81
+ c === null && console.error("Could not revive annotation target. Content missing.");
78
82
  let m = !s;
79
- for (; l !== null; ) {
80
- if (m ||= typeof s?.contains == "function" ? s.contains(l) : !1, m) {
81
- const g = l.textContent?.length || 0;
82
- if (r + g > o) {
83
- a.setStart(l, o - r);
83
+ for (; c !== null; ) {
84
+ if (m ||= typeof s?.contains == "function" ? s.contains(c) : !1, m) {
85
+ const f = c.textContent?.length || 0;
86
+ if (r + f > o) {
87
+ a.setStart(c, o - r);
84
88
  break;
85
89
  }
86
- r += g;
90
+ r += f;
87
91
  }
88
- l = n.nextNode();
92
+ c = n.nextNode();
89
93
  }
90
- for (; l !== null; ) {
91
- const g = l.textContent?.length || 0;
92
- if (r + g >= i) {
93
- a.setEnd(l, i - r);
94
+ for (; c !== null; ) {
95
+ const f = c.textContent?.length || 0;
96
+ if (r + f >= i) {
97
+ a.setEnd(c, i - r);
94
98
  break;
95
99
  }
96
- r += g, l = n.nextNode();
100
+ r += f, c = n.nextNode();
97
101
  }
98
102
  return {
99
103
  ...t,
100
104
  range: a
101
105
  };
102
- }, J = (t, e) => I(t.selector) ? t : {
106
+ }, J = (t, e, o = (i, s) => yt(i, s)) => ft(t) ? t : {
103
107
  ...t,
104
- selector: t.selector.map((o) => o.range instanceof Range && !o.range.collapsed ? o : ht(o, e))
105
- }, tt = (t, e) => I(t.target.selector) ? t : { ...t, target: J(t.target, e) }, yt = (t) => {
108
+ selector: t.selector.map((i) => I(i) ? i : o(i, e))
109
+ }, tt = (t, e, o) => ft(t.target) ? t : { ...t, target: J(t.target, e, o) }, St = (t) => {
106
110
  if (!t)
107
111
  return document.scrollingElement;
108
112
  const { overflowY: e } = window.getComputedStyle(t);
109
- return e !== "visible" && e !== "hidden" && t.scrollHeight > t.clientHeight ? t : yt(t.parentElement);
113
+ return e !== "visible" && e !== "hidden" && t.scrollHeight > t.clientHeight ? t : St(t.parentElement);
110
114
  }, at = (t, e, o) => {
111
- const i = o.getBoundingClientRect(), s = o.clientHeight, n = o.clientWidth, r = e.selector[0].range.getBoundingClientRect(), { width: a, height: l } = t.getAnnotationBounds(e.annotation), m = r.top - i.top, g = r.left - i.left, h = o.parentElement ? o.scrollTop : 0, p = o.parentElement ? o.scrollLeft : 0, v = m + h - (s - l) / 2, f = g + p - (n - a) / 2;
112
- o.scroll({ top: v, left: f, behavior: "smooth" });
113
- }, Vt = (t, e) => (o, i) => {
114
- const s = typeof o == "string" ? o : o.id, n = i ? typeof i == "string" ? document.getElementById(i) : i : yt(t);
115
+ const i = o.getBoundingClientRect(), s = o.clientHeight, n = o.clientWidth, r = e.selector[0].range.getBoundingClientRect(), { width: a, height: c } = t.getAnnotationBounds(e.annotation), m = r.top - i.top, f = r.left - i.left, y = o.parentElement ? o.scrollTop : 0, g = o.parentElement ? o.scrollLeft : 0, R = m + y - (s - c) / 2, l = f + g - (n - a) / 2;
116
+ o.scroll({ top: R, left: l, behavior: "smooth" });
117
+ }, zt = (t, e) => (o, i) => {
118
+ const s = typeof o == "string" ? o : o.id, n = i ? typeof i == "string" ? document.getElementById(i) : i : St(t);
115
119
  if (!n)
116
120
  return console.warn(`The scroll parent is missing for the annotation: ${s}`, { container: t }), !1;
117
121
  const r = e.getAnnotation(s);
@@ -120,12 +124,12 @@ const ft = typeof navigator < "u" && navigator.platform.startsWith("Mac"), gt =
120
124
  const { range: a } = r.target.selector[0];
121
125
  if (a && !a.collapsed)
122
126
  return at(e, r.target, n), !0;
123
- const l = J(r.target, t), { range: m } = l.selector[0];
124
- return m && !m.collapsed ? (at(e, l, n), !0) : !1;
125
- }, Le = (t, e) => ({
126
- parse: (o) => qt(o),
127
- serialize: (o) => Gt(o, t, e)
128
- }), zt = (t) => t.quote !== void 0 && t.start !== void 0 && t.end !== void 0, jt = (t) => {
127
+ const c = J(r.target, t), { range: m } = c.selector[0];
128
+ return m && !m.collapsed ? (at(e, c, n), !0) : !1;
129
+ }, Oe = (t, e) => ({
130
+ parse: (o) => Gt(o),
131
+ serialize: (o) => Qt(o, t, e)
132
+ }), qt = (t) => t.quote !== void 0 && t.start !== void 0 && t.end !== void 0, jt = (t) => {
129
133
  const {
130
134
  id: e,
131
135
  creator: o,
@@ -144,80 +148,82 @@ const ft = typeof navigator < "u" && navigator.platform.startsWith("Mac"), gt =
144
148
  // @ts-expect-error: `styleClass` is not part of the core `TextAnnotationTarget` type
145
149
  styleClass: "styleClass" in r[0] ? r[0].styleClass : void 0
146
150
  };
147
- for (const l of r) {
148
- const g = (Array.isArray(l.selector) ? l.selector : [l.selector]).reduce((h, p) => {
149
- switch (p.type) {
151
+ for (const c of r) {
152
+ const f = (Array.isArray(c.selector) ? c.selector : [c.selector]).reduce((y, g) => {
153
+ switch (g.type) {
150
154
  case "TextQuoteSelector":
151
- h.quote = p.exact;
155
+ y.quote = g.exact;
152
156
  break;
153
157
  case "TextPositionSelector":
154
- h.start = p.start, h.end = p.end;
158
+ y.start = g.start, y.end = g.end;
155
159
  break;
156
160
  }
157
- return h;
161
+ return y;
158
162
  }, {});
159
- if (a.outdated ||= "outdated" in l ? l.outdated : void 0, a.migrationPending ||= "migrationPending" in l ? l.migrationPending : void 0, zt(g))
163
+ if (a.outdated ||= "outdated" in c ? c.outdated : void 0, a.migrationPending ||= "migrationPending" in c ? c.migrationPending : void 0, qt(f))
160
164
  a.selector.push(
161
165
  {
162
- ...g,
163
- id: l.id,
166
+ ...f,
167
+ id: c.id,
164
168
  // @ts-expect-error: `scope` is not part of the core `TextSelector` type
165
- scope: l.scope
169
+ scope: c.scope
166
170
  }
167
171
  );
168
172
  else {
169
- const h = [
170
- g.start ? void 0 : "TextPositionSelector",
171
- g.quote ? void 0 : "TextQuoteSelector"
173
+ const y = [
174
+ f.start ? void 0 : "TextPositionSelector",
175
+ f.quote ? void 0 : "TextQuoteSelector"
172
176
  ].filter(Boolean);
173
- return { error: Error(`Missing selector types: ${h.join(" and ")} for annotation: ${t.id}`) };
177
+ return { error: Error(`Missing selector types: ${y.join(" and ")} for annotation: ${t.id}`) };
174
178
  }
175
179
  }
176
180
  return { parsed: a };
177
- }, qt = (t) => {
181
+ }, Gt = (t) => {
178
182
  const e = t.id || dt(), {
179
183
  creator: o,
180
184
  created: i,
181
185
  modified: s,
182
186
  body: n,
183
187
  ...r
184
- } = t, a = Tt(n, e), l = jt(t);
185
- return "error" in l ? { error: l.error } : {
188
+ } = t, a = At(n, e), c = jt(t);
189
+ return "error" in c ? { error: c.error } : {
186
190
  parsed: {
187
191
  ...r,
188
192
  id: e,
189
193
  bodies: a,
190
- target: l.parsed
194
+ target: c.parsed
191
195
  }
192
196
  };
193
- }, Gt = (t, e, o) => {
197
+ }, Qt = (t, e, o) => {
194
198
  const { bodies: i, target: s, ...n } = t, {
195
199
  selector: r,
196
200
  creator: a,
197
- created: l,
201
+ created: c,
198
202
  updated: m,
199
- ...g
200
- } = s, h = r.map((p) => {
201
- const { id: v, quote: f, start: x, end: N, range: A } = p, E = {
203
+ ...f
204
+ } = s, y = r.map((g) => {
205
+ const { id: R, quote: l } = g, L = {
202
206
  type: "TextQuoteSelector",
203
- exact: f
207
+ exact: l
204
208
  };
205
- if (o) {
206
- const { prefix: y, suffix: c } = Yt(A, o);
207
- E.prefix = y, E.suffix = c;
209
+ if (o && "range" in g) {
210
+ const { prefix: S, suffix: x } = Xt(g.range, o);
211
+ L.prefix = S, L.suffix = x;
208
212
  }
209
- const b = {
213
+ if (!("start" in g))
214
+ throw new Error("W3C serialization requires TextSelector with start/end");
215
+ const { start: N, end: A } = g, h = {
210
216
  type: "TextPositionSelector",
211
- start: x,
212
- end: N
217
+ start: N,
218
+ end: A
213
219
  };
214
220
  return {
215
- ...g,
216
- id: v,
221
+ ...f,
222
+ id: R,
217
223
  // @ts-expect-error: `scope` is not part of the core `TextSelector` type
218
- scope: "scope" in p ? p.scope : void 0,
224
+ scope: "scope" in g ? g.scope : void 0,
219
225
  source: e,
220
- selector: [E, b]
226
+ selector: [L, h]
221
227
  };
222
228
  });
223
229
  return {
@@ -225,15 +231,15 @@ const ft = typeof navigator < "u" && navigator.platform.startsWith("Mac"), gt =
225
231
  "@context": "http://www.w3.org/ns/anno.jsonld",
226
232
  id: t.id,
227
233
  type: "Annotation",
228
- body: At(t.bodies),
234
+ body: vt(t.bodies),
229
235
  creator: a,
230
- created: l?.toISOString(),
236
+ created: c?.toISOString(),
231
237
  modified: m?.toISOString(),
232
- target: h
238
+ target: y
233
239
  };
234
- }, Qt = (t) => t.addEventListener("click", (e) => {
240
+ }, Zt = (t) => t.addEventListener("click", (e) => {
235
241
  // Allow clicks within not-annotatable elements
236
- !e.target.closest($) && !e.target.closest("a") && e.preventDefault();
242
+ !e.target.closest(W) && !e.target.closest("a") && e.preventDefault();
237
243
  }), et = (t) => ({
238
244
  ...t,
239
245
  type: t.type,
@@ -281,61 +287,61 @@ const ft = typeof navigator < "u" && navigator.platform.startsWith("Mac"), gt =
281
287
  return ((...i) => {
282
288
  clearTimeout(o), o = setTimeout(() => t.apply(void 0, i), e);
283
289
  });
284
- }, St = (t, e, o, i) => {
290
+ }, Et = (t, e, o, i) => {
285
291
  const { store: s, selection: n, hover: r } = o, a = ut();
286
- let l;
292
+ let c;
287
293
  const m = /* @__PURE__ */ new Map();
288
- let g;
289
- const h = ce(i), p = (S) => {
290
- const { x: T, y: O } = e.getBoundingClientRect(), B = s.getAt(S.clientX - T, S.clientY - O, !1, g);
291
- B && o.selection.evalSelectAction(B) !== vt.NONE ? r.current !== B.id && (e.classList.add("hovered"), r.set(B.id)) : r.current && (e.classList.remove("hovered"), r.set(null));
294
+ let f;
295
+ const y = le(i), g = (T) => {
296
+ const { x: b, y: v } = e.getBoundingClientRect(), k = s.getAt(T.clientX - b, T.clientY - v, !1, f);
297
+ k && o.selection.evalSelectAction(k) !== wt.NONE ? r.current !== k.id && (e.classList.add("hovered"), r.set(k.id)) : r.current && (e.classList.remove("hovered"), r.set(null));
292
298
  };
293
- e.addEventListener("pointermove", p);
294
- const v = nt((S = !1) => requestAnimationFrame(() => {
295
- const T = ae(e), { minX: O, minY: B, maxX: V, maxY: z } = T, j = g ? s.getIntersecting(O, B, V, z).filter(({ annotation: u }) => g?.(u)) : s.getIntersecting(O, B, V, z), F = n.selected.map(({ id: u }) => u), W = j.map(({ annotation: u, rects: C }) => {
296
- const M = F.includes(u.id), D = u.id === r.current;
299
+ e.addEventListener("pointermove", g);
300
+ const R = nt((T = !1) => requestAnimationFrame(() => {
301
+ const b = ce(e), { minX: v, minY: k, maxX: K, maxY: z } = b, q = f ? s.getIntersecting(v, k, K, z).filter(({ annotation: u }) => f?.(u)) : s.getIntersecting(v, k, K, z), $ = n.selected.map(({ id: u }) => u), Y = q.map(({ annotation: u, rects: C }) => {
302
+ const M = $.includes(u.id), D = u.id === r.current;
297
303
  return {
298
304
  annotation: u,
299
305
  rects: C,
300
306
  state: { selected: M, hovered: D }
301
307
  };
302
308
  });
303
- t.redraw(W, T, l, m, S), setTimeout(() => {
304
- h(j.map(({ annotation: u }) => u)), a.emit("onRedraw");
309
+ t.redraw(Y, b, c, m, T), setTimeout(() => {
310
+ y(q.map(({ annotation: u }) => u)), a.emit("onRedraw");
305
311
  }, 1);
306
- }), 10), f = (S, T) => {
307
- T ? S ? m.set(T, S) : m.delete(T) : l = S, v(!0);
308
- }, x = (S) => {
309
- g = S, v(!1);
310
- }, N = (S, T) => a.on(S, T), A = () => {
311
- v();
312
+ }), 10), l = (T, b) => {
313
+ b ? T ? m.set(b, T) : m.delete(b) : c = T, R(!0);
314
+ }, L = (T) => {
315
+ f = T, R(!1);
316
+ }, N = (T, b) => a.on(T, b), A = () => {
317
+ R();
312
318
  };
313
319
  s.observe(A);
314
- const E = n.subscribe(() => {
315
- v();
316
- }), b = r.subscribe(() => {
317
- v();
318
- }), y = () => {
319
- v(!0);
320
+ const h = n.subscribe(() => {
321
+ R();
322
+ }), S = r.subscribe(() => {
323
+ R();
324
+ }), x = () => {
325
+ R(!0);
320
326
  };
321
- document.addEventListener("scroll", y, { capture: !0, passive: !0 });
322
- const c = nt(() => {
323
- s.recalculatePositions(), v();
327
+ document.addEventListener("scroll", x, { capture: !0, passive: !0 });
328
+ const E = nt(() => {
329
+ s.recalculatePositions(), R();
324
330
  }, 10);
325
- window.addEventListener("resize", c);
326
- const d = new ResizeObserver(c);
331
+ window.addEventListener("resize", E);
332
+ const d = new ResizeObserver(E);
327
333
  d.observe(e);
328
- const R = { attributes: !0, childList: !0, subtree: !0 }, w = new MutationObserver(nt((S) => {
329
- S.every((O) => O.target === e || e.contains(O.target)) || v(!0);
334
+ const p = { attributes: !0, childList: !0, subtree: !0 }, w = new MutationObserver(nt((T) => {
335
+ T.every((v) => v.target === e || e.contains(v.target)) || R(!0);
330
336
  }, 150));
331
- return w.observe(document.body, R), {
337
+ return w.observe(document.body, p), {
332
338
  destroy: () => {
333
- e.removeEventListener("pointermove", p), t.destroy(), s.unobserve(A), E(), b(), document.removeEventListener("scroll", y), window.removeEventListener("resize", c), d.disconnect(), w.disconnect();
339
+ e.removeEventListener("pointermove", g), t.destroy(), s.unobserve(A), h(), S(), document.removeEventListener("scroll", x), window.removeEventListener("resize", E), d.disconnect(), w.disconnect();
334
340
  },
335
341
  on: N,
336
- redraw: v,
337
- setStyle: f,
338
- setFilter: x,
342
+ redraw: R,
343
+ setStyle: l,
344
+ setFilter: L,
339
345
  setVisible: t.setVisible.bind(t)
340
346
  };
341
347
  }, U = {
@@ -344,10 +350,10 @@ const ft = typeof navigator < "u" && navigator.platform.startsWith("Mac"), gt =
344
350
  }, rt = {
345
351
  fill: "rgb(0, 128, 255)",
346
352
  fillOpacity: 0.45
347
- }, Zt = (t) => t?.fillOpacity !== void 0 ? ot(t?.fill || U.fill).alpha(t.fillOpacity).toHex() : t?.fill ? t.fill : ot(U.fill).alpha(U.fillOpacity).toHex(), Et = (t, e, o) => e ? typeof e == "function" ? e(t.annotation, t.state, o) || (t.state?.selected ? rt : U) : e : t.state?.selected ? rt : U, Jt = (t, e) => {
353
+ }, Jt = (t) => t?.fillOpacity !== void 0 ? ot(t?.fill || U.fill).alpha(t.fillOpacity).toHex() : t?.fill ? t.fill : ot(U.fill).alpha(U.fillOpacity).toHex(), bt = (t, e, o) => e ? typeof e == "function" ? e(t.annotation, t.state, o) || (t.state?.selected ? rt : U) : e : t.state?.selected ? rt : U, te = (t, e) => {
348
354
  const o = (n, r) => n.x <= r.x + r.width && n.x + n.width >= r.x && n.y <= r.y + r.height && n.y + n.height >= r.y, i = (n) => n.rects.reduce((r, a) => r + a.width, 0), s = e.filter(({ rects: n }) => n.some((r) => o(t, r)));
349
355
  return s.sort((n, r) => i(r) - i(n)), s.findIndex((n) => n.rects.includes(t));
350
- }, te = (t) => {
356
+ }, ee = (t) => {
351
357
  const e = [], o = document.createTreeWalker(
352
358
  t.commonAncestorContainer,
353
359
  NodeFilter.SHOW_TEXT
@@ -366,27 +372,27 @@ const ft = typeof navigator < "u" && navigator.platform.startsWith("Mac"), gt =
366
372
  if (a.selectNode(n), t.startContainer.nodeType === Node.TEXT_NODE)
367
373
  a.setStart(n, t.startOffset);
368
374
  else {
369
- const g = t.startContainer.childNodes[t.startOffset];
370
- g ? a.setStartBefore(g) : a.setStartAfter(t.startContainer);
375
+ const f = t.startContainer.childNodes[t.startOffset];
376
+ f ? a.setStartBefore(f) : a.setStartAfter(t.startContainer);
371
377
  }
372
- const l = document.createRange();
373
- if (l.selectNode(r), t.endContainer.nodeType === Node.TEXT_NODE)
374
- l.setEnd(r, t.endOffset);
378
+ const c = document.createRange();
379
+ if (c.selectNode(r), t.endContainer.nodeType === Node.TEXT_NODE)
380
+ c.setEnd(r, t.endOffset);
375
381
  else {
376
- const g = t.endContainer.childNodes[t.endOffset];
377
- g ? l.setEndBefore(g) : l.setEndAfter(t.endContainer);
382
+ const f = t.endContainer.childNodes[t.endOffset];
383
+ f ? c.setEndBefore(f) : c.setEndAfter(t.endContainer);
378
384
  }
379
- const m = (g) => {
380
- const h = document.createRange();
381
- return h.selectNode(g), Array.from(h.getClientRects());
385
+ const m = (f) => {
386
+ const y = document.createRange();
387
+ return y.selectNode(f), Array.from(y.getClientRects());
382
388
  };
383
389
  return [
384
390
  ...Array.from(a.getClientRects()),
385
391
  ...e.slice(1, -1).flatMap(m),
386
- ...Array.from(l.getClientRects())
392
+ ...Array.from(c.getClientRects())
387
393
  ];
388
394
  }
389
- }, ee = (t, e, o, i) => {
395
+ }, ne = (t, e, o, i) => {
390
396
  const s = (a) => Math.round(a * 10) / 10, n = {
391
397
  top: s(t.top),
392
398
  bottom: s(t.bottom),
@@ -410,44 +416,44 @@ const ft = typeof navigator < "u" && navigator.platform.startsWith("Mac"), gt =
410
416
  return "block-contains";
411
417
  } else if (n.top >= r.top && n.bottom <= r.bottom && n.left >= r.left && n.right <= r.right)
412
418
  return "block-is-contained";
413
- }, ne = (t, e) => {
419
+ }, oe = (t, e) => {
414
420
  const o = Math.min(t.left, e.left), i = Math.max(t.right, e.right), s = Math.min(t.top, e.top), n = Math.max(t.bottom, e.bottom);
415
421
  return new DOMRect(o, s, i - o, n - s);
416
- }, oe = (t, e = 0.5, o = 0.5) => t.reduce((i, s) => {
422
+ }, se = (t, e = 0.5, o = 0.5) => t.reduce((i, s) => {
417
423
  if (s.width === 0 || s.height === 0)
418
424
  return i;
419
425
  let n = [...i], r = !1;
420
426
  for (const a of i) {
421
- const l = ee(s, a, e, o);
422
- if (l === "inline-adjacent") {
423
- n = n.map((m) => m === a ? ne(s, a) : m), r = !0;
427
+ const c = ne(s, a, e, o);
428
+ if (c === "inline-adjacent") {
429
+ n = n.map((m) => m === a ? oe(s, a) : m), r = !0;
424
430
  break;
425
- } else if (l === "inline-contains") {
431
+ } else if (c === "inline-contains") {
426
432
  n = n.map((m) => m === a ? s : m), r = !0;
427
433
  break;
428
- } else if (l === "inline-is-contained") {
434
+ } else if (c === "inline-is-contained") {
429
435
  r = !0;
430
436
  break;
431
- } else if (l === "block-contains" || l === "block-is-contained") {
437
+ } else if (c === "block-contains" || c === "block-is-contained") {
432
438
  s.width < a.width && (n = n.map((m) => m === a ? s : m)), s.width === a.width && s.height < a.width && (n = n.map((m) => m === a ? s : m)), r = !0;
433
439
  break;
434
440
  }
435
441
  }
436
442
  return r ? n : [...n, s];
437
- }, []), Ne = (t) => ({
443
+ }, []), ke = (t) => ({
438
444
  length: t.length,
439
445
  item: (e) => t[e],
440
446
  [Symbol.iterator]: function* () {
441
447
  for (let e = 0; e < this.length; e++)
442
448
  yield this.item(e);
443
449
  }
444
- }), se = (t, e) => {
450
+ }), re = (t, e) => {
445
451
  const { left: o, top: i, right: s, bottom: n } = t;
446
452
  return new DOMRect(o - e.left, i - e.top, s - o, n - i);
447
- }, Oe = (t, e) => {
453
+ }, _e = (t, e) => {
448
454
  const { left: o, top: i, right: s, bottom: n } = t;
449
455
  return new DOMRect(o + e.left, i + e.top, s - o, n - i);
450
- }, re = (t) => {
456
+ }, ie = (t) => {
451
457
  t.classList.add("r6o-annotatable");
452
458
  const e = document.createElement("div");
453
459
  e.className = "r6o-span-highlight-layer", t.appendChild(e);
@@ -456,331 +462,336 @@ const ft = typeof navigator < "u" && navigator.platform.startsWith("Mac"), gt =
456
462
  destroy: () => {
457
463
  e.remove();
458
464
  },
459
- redraw: (r, a, l, m, g) => {
460
- const h = performance.now();
461
- if (!(!_t(o, r) || g)) return;
462
- e.innerHTML = "", [...r].sort((x, N) => {
463
- const { annotation: { target: { created: A } } } = x, { annotation: { target: { created: E } } } = N;
464
- return A && E ? A.getTime() - E.getTime() : 0;
465
- }).forEach((x) => {
466
- const N = m?.get(x.annotation.id) || l;
467
- x.rects.map((A) => {
468
- const E = Jt(A, r), b = Et(x, N, E), y = document.createElement("span");
469
- y.className = "r6o-annotation", y.dataset.annotation = x.annotation.id, y.style.left = `${A.x}px`, y.style.top = `${A.y}px`, y.style.width = `${A.width}px`, y.style.height = `${A.height}px`, y.style.backgroundColor = Zt(b), b.underlineStyle && (y.style.borderStyle = b.underlineStyle), b.underlineColor && (y.style.borderColor = b.underlineColor), b.underlineThickness && (y.style.borderBottomWidth = `${b.underlineThickness}px`), b.underlineOffset && (y.style.paddingBottom = `${b.underlineOffset}px`), e.appendChild(y);
465
+ redraw: (r, a, c, m, f) => {
466
+ if (!(!It(o, r) || f)) return;
467
+ e.innerHTML = "", [...r].sort((l, L) => {
468
+ const { annotation: { target: { created: N } } } = l, { annotation: { target: { created: A } } } = L;
469
+ return N && A ? N.getTime() - A.getTime() : 0;
470
+ }).forEach((l) => {
471
+ const L = m?.get(l.annotation.id) || c;
472
+ l.rects.map((N) => {
473
+ const A = te(N, r), h = bt(l, L, A), S = document.createElement("span");
474
+ S.className = "r6o-annotation", S.dataset.annotation = l.annotation.id, S.style.left = `${N.x}px`, S.style.top = `${N.y}px`, S.style.width = `${N.width}px`, S.style.height = `${N.height}px`, S.style.backgroundColor = Jt(h), h.underlineStyle && (S.style.borderStyle = h.underlineStyle), h.underlineColor && (S.style.borderColor = h.underlineColor), h.underlineThickness && (S.style.borderBottomWidth = `${h.underlineThickness}px`), h.underlineOffset && (S.style.paddingBottom = `${h.underlineOffset}px`), e.appendChild(S);
470
475
  });
471
- }), o = r, console.log(`Took ${performance.now() - h} ms`);
476
+ }), o = r;
472
477
  },
473
478
  setVisible: (r) => {
474
479
  r ? e.classList.remove("hidden") : e.classList.add("hidden");
475
480
  }
476
481
  };
477
- }, ie = (t, e, o) => St(re(t), t, e, o), ae = (t) => {
478
- const { top: e, left: o } = t.getBoundingClientRect(), { innerWidth: i, innerHeight: s } = window, n = -o, r = -e, a = i - o, l = s - e;
479
- return { top: e, left: o, minX: n, minY: r, maxX: a, maxY: l };
480
- }, ce = (t) => {
482
+ }, ae = (t, e, o) => Et(ie(t), t, e, o), ce = (t) => {
483
+ const { top: e, left: o } = t.getBoundingClientRect(), { innerWidth: i, innerHeight: s } = window, n = -o, r = -e, a = i - o, c = s - e;
484
+ return { top: e, left: o, minX: n, minY: r, maxX: a, maxY: c };
485
+ }, le = (t) => {
481
486
  let e = /* @__PURE__ */ new Set();
482
487
  return (i) => {
483
488
  const s = i.map((n) => n.id);
484
489
  (e.size !== s.length || s.some((n) => !e.has(n))) && t.set(s), e = new Set(s);
485
490
  };
486
- }, le = (t, e, o, i) => {
487
- const s = new It(), n = /* @__PURE__ */ new Map(), r = ut(), a = (c, d) => {
488
- const R = c.selector.flatMap((L) => {
489
- const S = I([L]) ? L.range : ht(L, e).range;
490
- return te(S);
491
- }), w = oe(R, o, i).map((L) => se(L, d));
492
- return w.map((L) => {
493
- const { x: S, y: T, width: O, height: B } = L;
491
+ }, de = (t, e, o, i, s) => {
492
+ const n = new Dt(), r = /* @__PURE__ */ new Map(), a = ut(), c = (d, p) => {
493
+ const w = d.selector.flatMap((T) => {
494
+ const b = (s ? s(T, e) : yt(T, e))?.range;
495
+ return ee(b);
496
+ }), O = se(w, o, i).map((T) => re(T, p));
497
+ return O.map((T) => {
498
+ const { x: b, y: v, width: k, height: K } = T;
494
499
  return {
495
- minX: S,
496
- minY: T,
497
- maxX: S + O,
498
- maxY: T + B,
500
+ minX: b,
501
+ minY: v,
502
+ maxX: b + k,
503
+ maxY: v + K,
499
504
  annotation: {
500
- id: c.annotation,
501
- rects: w
505
+ id: d.annotation,
506
+ rects: O
502
507
  }
503
508
  };
504
509
  });
505
- }, l = () => [...n.values()], m = () => {
506
- s.clear(), n.clear();
507
- }, g = (c) => {
508
- const d = a(c, e.getBoundingClientRect());
509
- d.length !== 0 && (d.forEach((R) => s.insert(R)), n.set(c.annotation, d));
510
- }, h = (c) => {
511
- const d = n.get(c.annotation);
512
- d && (d.forEach((R) => s.remove(R)), n.delete(c.annotation));
513
- }, p = (c) => {
514
- h(c), g(c);
515
- }, v = (c, d = !0) => {
516
- d && m();
517
- const R = e.getBoundingClientRect(), w = c.map((S) => ({ target: S, rects: a(S, R) }));
518
- w.forEach(({ target: S, rects: T }) => {
519
- T.length > 0 && n.set(S.annotation, T);
510
+ }, m = () => [...r.values()], f = () => {
511
+ n.clear(), r.clear();
512
+ }, y = (d) => {
513
+ const p = c(d, e.getBoundingClientRect());
514
+ p.length !== 0 && (p.forEach((w) => n.insert(w)), r.set(d.annotation, p));
515
+ }, g = (d) => {
516
+ const p = r.get(d.annotation);
517
+ p && (p.forEach((w) => n.remove(w)), r.delete(d.annotation));
518
+ }, R = (d) => {
519
+ g(d), y(d);
520
+ }, l = (d, p = !0) => {
521
+ p && f();
522
+ const w = e.getBoundingClientRect(), O = d.map((b) => ({ target: b, rects: c(b, w) }));
523
+ O.forEach(({ target: b, rects: v }) => {
524
+ v.length > 0 && r.set(b.annotation, v);
520
525
  });
521
- const L = w.flatMap(({ rects: S }) => S);
522
- s.load(L);
523
- }, f = (c, d, R = !1) => {
524
- const w = s.search({
525
- minX: c,
526
- minY: d,
527
- maxX: c,
528
- maxY: d
529
- }), L = (S) => S.annotation.rects.reduce((T, O) => T + O.width * O.height, 0);
530
- return w.length > 0 ? (w.sort((S, T) => L(S) - L(T)), R ? w.map((S) => S.annotation.id) : [w[0].annotation.id]) : [];
531
- }, x = (c) => {
532
- const d = N(c);
533
- if (d.length === 0)
526
+ const T = O.flatMap(({ rects: b }) => b);
527
+ n.load(T);
528
+ }, L = (d, p, w = !1) => {
529
+ const O = n.search({
530
+ minX: d,
531
+ minY: p,
532
+ maxX: d,
533
+ maxY: p
534
+ }), T = (b) => b.annotation.rects.reduce((v, k) => v + k.width * k.height, 0);
535
+ return O.length > 0 ? (O.sort((b, v) => T(b) - T(v)), w ? O.map((b) => b.annotation.id) : [O[0].annotation.id]) : [];
536
+ }, N = (d) => {
537
+ const p = A(d);
538
+ if (p.length === 0)
534
539
  return;
535
- let R = d[0].left, w = d[0].top, L = d[0].right, S = d[0].bottom;
536
- for (let T = 1; T < d.length; T++) {
537
- const O = d[T];
538
- R = Math.min(R, O.left), w = Math.min(w, O.top), L = Math.max(L, O.right), S = Math.max(S, O.bottom);
540
+ let w = p[0].left, O = p[0].top, T = p[0].right, b = p[0].bottom;
541
+ for (let v = 1; v < p.length; v++) {
542
+ const k = p[v];
543
+ w = Math.min(w, k.left), O = Math.min(O, k.top), T = Math.max(T, k.right), b = Math.max(b, k.bottom);
539
544
  }
540
- return new DOMRect(R, w, L - R, S - w);
541
- }, N = (c) => {
542
- const d = n.get(c);
543
- return d ? d[0].annotation.rects : [];
545
+ return new DOMRect(w, O, T - w, b - O);
546
+ }, A = (d) => {
547
+ const p = r.get(d);
548
+ return p ? p[0].annotation.rects : [];
544
549
  };
545
550
  return {
546
- all: l,
547
- clear: m,
548
- getAt: f,
549
- getAnnotationBounds: x,
550
- getAnnotationRects: N,
551
- getIntersecting: (c, d, R, w) => {
552
- const L = s.search({ minX: c, minY: d, maxX: R, maxY: w }), S = new Set(L.map((T) => T.annotation.id));
553
- return Array.from(S).map((T) => ({
554
- annotation: t.getAnnotation(T),
555
- rects: N(T)
556
- })).filter((T) => !!T.annotation);
551
+ all: m,
552
+ clear: f,
553
+ getAt: L,
554
+ getAnnotationBounds: N,
555
+ getAnnotationRects: A,
556
+ getIntersecting: (d, p, w, O) => {
557
+ const T = n.search({ minX: d, minY: p, maxX: w, maxY: O }), b = new Set(T.map((v) => v.annotation.id));
558
+ return Array.from(b).map((v) => ({
559
+ annotation: t.getAnnotation(v),
560
+ rects: A(v)
561
+ })).filter((v) => !!v.annotation);
557
562
  },
558
- insert: g,
563
+ insert: y,
559
564
  recalculate: () => {
560
- v(t.all().map((c) => c.target), !0), r.emit("recalculate");
565
+ l(t.all().map((d) => d.target), !0), a.emit("recalculate");
561
566
  },
562
- remove: h,
563
- set: v,
564
- size: () => s.all().length,
565
- update: p,
566
- on: (c, d) => r.on(c, d)
567
+ remove: g,
568
+ set: l,
569
+ size: () => n.all().length,
570
+ update: R,
571
+ on: (d, p) => a.on(d, p)
567
572
  };
568
- }, de = (t, e) => {
569
- const o = wt(), i = le(o, t, e.mergeHighlights?.horizontalTolerance, e.mergeHighlights?.verticalTolerance), s = xt(o, e.userSelectAction, e.adapter), n = Lt(o), r = Nt(), a = (E, b = K.LOCAL) => {
570
- const y = tt(E, t), c = I(y.target.selector);
571
- return c && o.addAnnotation(y, b), c;
572
- }, l = (E, b = !0, y = K.LOCAL) => {
573
- const c = E.map((R) => tt(R, t)), d = c.filter((R) => !I(R.target.selector));
574
- return o.bulkAddAnnotations(c, b, y), d;
575
- }, m = (E, b = K.LOCAL) => {
576
- const y = E.map((d) => tt(d, t)), c = y.filter((d) => !I(d.target.selector));
577
- return y.forEach((d) => {
578
- o.getAnnotation(d.id) ? o.updateAnnotation(d, b) : o.addAnnotation(d, b);
579
- }), c;
580
- }, g = (E, b = K.LOCAL) => {
581
- const y = J(E, t);
582
- o.updateTarget(y, b);
583
- }, h = (E, b = K.LOCAL) => {
584
- const y = E.map((c) => J(c, t));
585
- o.bulkUpdateTargets(y, b);
573
+ }, ue = (t, e) => {
574
+ const o = xt(), i = de(
575
+ o,
576
+ t,
577
+ e.mergeHighlights?.horizontalTolerance,
578
+ e.mergeHighlights?.verticalTolerance,
579
+ e.selectorReviveFn
580
+ ), s = Lt(o, e.userSelectAction, e.adapter), n = Nt(o), r = Ot(), a = (h, S = F.LOCAL) => {
581
+ const x = tt(h, t, e.selectorReviveFn), E = I(x.target.selector);
582
+ return E && o.addAnnotation(x, S), E;
583
+ }, c = (h, S = !0, x = F.LOCAL) => {
584
+ const E = h.map((p) => tt(p, t)), d = E.filter((p) => !I(p.target.selector));
585
+ return o.bulkAddAnnotations(E, S, x), d;
586
+ }, m = (h, S = F.LOCAL) => {
587
+ const x = h.map((d) => tt(d, t)), E = x.filter((d) => !I(d.target.selector));
588
+ return x.forEach((d) => {
589
+ o.getAnnotation(d.id) ? o.updateAnnotation(d, S) : o.addAnnotation(d, S);
590
+ }), E;
591
+ }, f = (h, S = F.LOCAL) => {
592
+ const x = J(h, t);
593
+ o.updateTarget(x, S);
594
+ }, y = (h, S = F.LOCAL) => {
595
+ const x = h.map((E) => J(E, t));
596
+ o.bulkUpdateTargets(x, S);
586
597
  };
587
- function p(E, b, y, c) {
588
- const d = y || !!c, R = i.getAt(E, b, d).map((L) => o.getAnnotation(L)).filter(Boolean), w = c ? R.filter(c) : R;
598
+ function g(h, S, x, E) {
599
+ const d = x || !!E, p = i.getAt(h, S, d).map((O) => o.getAnnotation(O)).filter(Boolean), w = E ? p.filter(E) : p;
589
600
  if (w.length !== 0)
590
- return y ? w : w[0];
601
+ return x ? w : w[0];
591
602
  }
592
- const v = (E) => i.getAnnotationRects(E).length > 0 ? i.getAnnotationBounds(E) : void 0, f = (E, b, y, c) => i.getIntersecting(E, b, y, c), x = (E) => i.getAnnotationRects(E), N = () => i.recalculate(), A = (E) => i.on("recalculate", E);
593
- return o.observe(({ changes: E }) => {
594
- const b = (E.deleted || []).filter((d) => I(d.target.selector)), y = (E.created || []).filter((d) => I(d.target.selector)), c = (E.updated || []).filter((d) => I(d.newValue.target.selector));
595
- b?.length > 0 && b.forEach((d) => i.remove(d.target)), y.length > 0 && i.set(y.map((d) => d.target), !1), c?.length > 0 && c.forEach(({ newValue: d }) => i.update(d.target));
603
+ const R = (h) => i.getAnnotationRects(h).length > 0 ? i.getAnnotationBounds(h) : void 0, l = (h, S, x, E) => i.getIntersecting(h, S, x, E), L = (h) => i.getAnnotationRects(h), N = () => i.recalculate(), A = (h) => i.on("recalculate", h);
604
+ return o.observe(({ changes: h }) => {
605
+ const S = (h.deleted || []).filter((d) => I(d.target.selector)), x = (h.created || []).filter((d) => I(d.target.selector)), E = (h.updated || []).filter((d) => I(d.newValue.target.selector));
606
+ S?.length > 0 && S.forEach((d) => i.remove(d.target)), x.length > 0 && i.set(x.map((d) => d.target), !1), E?.length > 0 && E.forEach(({ newValue: d }) => i.update(d.target));
596
607
  }), {
597
608
  store: {
598
609
  ...o,
599
610
  addAnnotation: a,
600
- bulkAddAnnotations: l,
601
- bulkUpdateTargets: h,
611
+ bulkAddAnnotations: c,
612
+ bulkUpdateTargets: y,
602
613
  bulkUpsertAnnotations: m,
603
- getAnnotationBounds: v,
604
- getAnnotationRects: x,
605
- getIntersecting: f,
606
- getAt: p,
614
+ getAnnotationBounds: R,
615
+ getAnnotationRects: L,
616
+ getIntersecting: l,
617
+ getAt: g,
607
618
  recalculatePositions: N,
608
619
  onRecalculatePositions: A,
609
- updateTarget: g
620
+ updateTarget: f
610
621
  },
611
622
  selection: s,
612
623
  hover: n,
613
624
  viewport: r
614
625
  };
615
- }, ct = 300, bt = ["up", "down", "left", "right"], Ct = ft ? "⌘+a" : "ctrl+a", ue = [
616
- ...bt.map((t) => `shift+${t}`),
617
- Ct
618
- ], fe = (t, e, o, i) => {
626
+ }, ct = 300, Ct = ["up", "down", "left", "right"], Tt = gt ? "⌘+a" : "ctrl+a", fe = [
627
+ ...Ct.map((t) => `shift+${t}`),
628
+ Tt
629
+ ], ge = (t, e, o, i) => {
619
630
  const { store: s, selection: n } = e;
620
631
  let r;
621
632
  const {
622
633
  annotatingEnabled: a,
623
- offsetReferenceSelector: l,
634
+ offsetReferenceSelector: c,
624
635
  selectionMode: m,
625
- dismissOnNotAnnotatable: g = "NEVER"
636
+ dismissOnNotAnnotatable: f = "NEVER"
626
637
  } = i;
627
- let h, p = a, v = "CREATE_NEW", f, x, N, A;
628
- const E = (u) => {
629
- p = u, w.clear(), u || (x = void 0, f = void 0, N = void 0, A = void 0);
630
- }, b = (u) => v = u || "CREATE_NEW", y = (u) => h = u, c = (u) => r = u, d = (u) => {
631
- if (v === "ADD_TO_CURRENT")
638
+ let y, g = a, R = "CREATE_NEW", l, L, N, A;
639
+ const h = (u) => {
640
+ g = u, w.clear(), u || (L = void 0, l = void 0, N = void 0, A = void 0);
641
+ }, S = (u) => R = u || "CREATE_NEW", x = (u) => y = u, E = (u) => r = u, d = (u) => {
642
+ if (R === "ADD_TO_CURRENT")
632
643
  return !0;
633
644
  if (i.allowModifierSelect) {
634
645
  const C = u;
635
- return ft ? C.metaKey : C.ctrlKey;
646
+ return gt ? C.metaKey : C.ctrlKey;
636
647
  } else
637
648
  return !1;
638
- }, R = () => {
639
- if (!p || N === !1) return;
649
+ }, p = () => {
650
+ if (!g || N === !1) return;
640
651
  const { selected: u } = n;
641
- if ((d(A) || v === "REPLACE_CURRENT") && u.length === 1 && u[0].editable) {
652
+ if ((d(A) || R === "REPLACE_CURRENT") && u.length === 1 && u[0].editable) {
642
653
  const M = s.getAnnotation(u[0].id);
643
654
  if (M?.target) {
644
- x = M.target, f = {
655
+ L = M.target, l = {
645
656
  annotation: M.id,
646
657
  selector: [],
647
- created: x.created,
648
- creator: x.creator,
658
+ created: L.created,
659
+ creator: L.creator,
649
660
  updated: /* @__PURE__ */ new Date(),
650
661
  updatedBy: r
651
662
  };
652
663
  return;
653
664
  }
654
665
  }
655
- x = void 0, f = {
666
+ L = void 0, l = {
656
667
  annotation: dt(),
657
668
  selector: [],
658
669
  created: /* @__PURE__ */ new Date(),
659
670
  creator: r
660
671
  };
661
- }, w = Dt((u) => {
662
- if (!p) return;
672
+ }, w = Pt((u) => {
673
+ if (!g) return;
663
674
  const C = document.getSelection();
664
675
  if (!C?.anchorNode) return;
665
- const D = F().map((k) => Wt(k, t));
666
- if (D.every((k) => !mt(t, k))) {
667
- f = void 0;
676
+ const D = $().map((_) => Yt(_, t));
677
+ if (D.every((_) => !pt(t, _))) {
678
+ l = void 0;
668
679
  return;
669
680
  }
670
681
  const P = u.timeStamp - (A?.timeStamp || u.timeStamp);
671
- if (A?.type === "pointerdown" && (P < 1e3 && !f || C.isCollapsed && P < ct) && R(), !f && (R(), !f))
682
+ if (A?.type === "pointerdown" && (P < 1e3 && !l || C.isCollapsed && P < ct) && p(), !l && (p(), !l))
672
683
  return;
673
684
  if (C.isCollapsed) {
674
- s.getAnnotation(f.annotation) && !(d(A) || v === "REPLACE_CURRENT") && (n.clear(), s.deleteAnnotation(f.annotation));
685
+ s.getAnnotation(l.annotation) && !(d(A) || R === "REPLACE_CURRENT") && (n.clear(), s.deleteAnnotation(l.annotation));
675
686
  return;
676
687
  }
677
- if (D.every((k) => Ht(k))) return;
678
- const _ = D.flatMap((k) => Ft(t, k.cloneRange()));
679
- if (!(_.length > 0 && !f || _.length !== f.selector.length || _.some((k, Y) => k.toString() !== f?.selector[Y]?.quote))) return;
680
- const q = d(A) && x ? Ut([
681
- ...x.selector.map((k) => k.range),
682
- ..._
683
- ]) : _;
684
- f = {
685
- ...f,
686
- selector: q.map((k) => Xt(k, t, l)),
688
+ if (D.every((_) => Ut(_))) return;
689
+ const B = D.flatMap((_) => $t(t, _.cloneRange()));
690
+ if (!(B.length > 0 && !l || B.length !== l.selector.length || B.some((_, X) => _.toString() !== l?.selector[X]?.quote))) return;
691
+ const j = d(A) && L ? Kt([
692
+ ...L.selector.map((_) => _.range),
693
+ ...B
694
+ ]) : B;
695
+ l = {
696
+ ...l,
697
+ selector: j.map((_) => Vt(_, t, c)),
687
698
  updated: /* @__PURE__ */ new Date()
688
- }, !(d(A) || v === "REPLACE_CURRENT") && (s.getAnnotation(f.annotation) ? s.updateTarget(f, K.LOCAL) : n.clear());
689
- }, 10), L = (u) => {
699
+ }, !(d(A) || R === "REPLACE_CURRENT") && (s.getAnnotation(l.annotation) ? s.updateTarget(l, F.LOCAL) : n.clear());
700
+ }, 10), O = (u) => {
690
701
  A = et(u), N = A.button === 0;
691
- }, S = async (u) => {
702
+ }, T = async (u) => {
692
703
  if (!N) return;
693
704
  const C = et(u), M = () => {
694
- const { x: P, y: _ } = t.getBoundingClientRect();
705
+ const { x: P, y: B } = t.getBoundingClientRect();
695
706
  if (Z(t, C.target)) {
696
- (typeof g == "function" ? g(C, t) : g === "ALWAYS") && n.clear();
707
+ (typeof f == "function" ? f(C, t) : f === "ALWAYS") && n.clear();
697
708
  return;
698
709
  }
699
710
  const H = C.target instanceof Node && t.contains(C.target) && s.getAt(
700
711
  C.clientX - P,
701
- C.clientY - _,
712
+ C.clientY - B,
702
713
  m === "all",
703
- h
714
+ y
704
715
  );
705
716
  if (H) {
706
- const { selected: q } = n, k = new Set(q.map((X) => X.id)), Y = Array.isArray(H) ? H.map((X) => X.id) : [H.id];
707
- (k.size !== Y.length || !Y.every((X) => k.has(X))) && (o.emit("clickAnnotation", H), n.userSelect(Y, C));
717
+ const { selected: j } = n, _ = new Set(j.map((V) => V.id)), X = Array.isArray(H) ? H.map((V) => V.id) : [H.id];
718
+ (_.size !== X.length || !X.every((V) => _.has(V))) && (o.emit("clickAnnotation", H), n.userSelect(X, C));
708
719
  } else
709
720
  n.clear();
710
721
  };
711
722
  if (C.timeStamp - (A?.timeStamp || 0) < ct) {
712
- await T();
713
- const P = document.getSelection(), _ = Z(t, A?.target), H = Z(t, C.target);
714
- if (P?.isCollapsed || _ && H) {
715
- f = void 0, M();
723
+ await b();
724
+ const P = document.getSelection(), B = Z(t, A?.target), H = Z(t, C.target);
725
+ if (P?.isCollapsed || B && H) {
726
+ l = void 0, M();
716
727
  return;
717
728
  }
718
729
  }
719
- f && f.selector.length > 0 && (W(), n.userSelect(f.annotation, C));
720
- }, T = async () => {
730
+ l && l.selector.length > 0 && (Y(), n.userSelect(l.annotation, C));
731
+ }, b = async () => {
721
732
  const u = document.getSelection();
722
733
  let C = !1, M = u?.isCollapsed;
723
734
  const D = () => M || C, P = 1;
724
- return setTimeout(() => C = !0, 50), Pt(() => M = u?.isCollapsed, P, D);
725
- }, O = (u) => {
726
- document.getSelection()?.isCollapsed || ((!f || f.selector.length === 0) && w(u), f && (W(), n.userSelect(f.annotation, et(u))));
727
- }, B = (u) => {
728
- if (p && !u.repeat && F().length !== 0 && u.key === "Shift" && f) {
735
+ return setTimeout(() => C = !0, 50), Ht(() => M = u?.isCollapsed, P, D);
736
+ }, v = (u) => {
737
+ document.getSelection()?.isCollapsed || ((!l || l.selector.length === 0) && w(u), l && (Y(), n.userSelect(l.annotation, et(u))));
738
+ }, k = (u) => {
739
+ if (g && !u.repeat && $().length !== 0 && u.key === "Shift" && l) {
729
740
  const C = document.getSelection();
730
- C && !C.isCollapsed && (W(), n.userSelect(f.annotation, Q(u)));
741
+ C && !C.isCollapsed && (Y(), n.userSelect(l.annotation, Q(u)));
731
742
  }
732
- }, V = (u) => {
743
+ }, K = (u) => {
733
744
  const C = () => setTimeout(() => {
734
- f && (f.selector.length > 0 && (n.clear(), s.addAnnotation({
735
- id: f.annotation,
745
+ l && (l.selector.length > 0 && (n.clear(), s.addAnnotation({
746
+ id: l.annotation,
736
747
  bodies: [],
737
- target: f
738
- }), n.userSelect(f.annotation, Q(u))), document.removeEventListener("selectionchange", C));
748
+ target: l
749
+ }), n.userSelect(l.annotation, Q(u))), document.removeEventListener("selectionchange", C));
739
750
  }, 100);
740
- document.addEventListener("selectionchange", C), R();
751
+ document.addEventListener("selectionchange", C), p();
741
752
  };
742
- G(ue.join(","), { element: t, keydown: !0, keyup: !1 }, (u) => {
753
+ G(fe.join(","), { element: t, keydown: !0, keyup: !1 }, (u) => {
743
754
  u.repeat || (A = Q(u));
744
- }), G(Ct, { keydown: !0, keyup: !1 }, (u) => {
745
- A = Q(u), V(u);
755
+ }), G(Tt, { keydown: !0, keyup: !1 }, (u) => {
756
+ A = Q(u), K(u);
746
757
  });
747
758
  const z = (u) => {
748
- u.repeat || F().length !== 0 && (f = void 0, n.clear());
759
+ u.repeat || $().length !== 0 && (l = void 0, n.clear());
749
760
  };
750
- G(bt.join(","), { keydown: !0, keyup: !1 }, z), document.addEventListener("pointerdown", L), document.addEventListener("pointerup", S), document.addEventListener("contextmenu", O), document.addEventListener("keyup", B), t.addEventListener("selectstart", R), document.addEventListener("selectionchange", w);
751
- const j = () => {
752
- f = void 0, x = void 0, N = void 0, A = void 0, w.clear(), document.removeEventListener("pointerdown", L), document.removeEventListener("pointerup", S), document.removeEventListener("contextmenu", O), document.removeEventListener("keyup", B), t.removeEventListener("selectstart", R), document.removeEventListener("selectionchange", w), G.unbind();
753
- }, F = () => {
761
+ G(Ct.join(","), { keydown: !0, keyup: !1 }, z), document.addEventListener("pointerdown", O), document.addEventListener("pointerup", T), document.addEventListener("contextmenu", v), document.addEventListener("keyup", k), t.addEventListener("selectstart", p), document.addEventListener("selectionchange", w);
762
+ const q = () => {
763
+ l = void 0, L = void 0, N = void 0, A = void 0, w.clear(), document.removeEventListener("pointerdown", O), document.removeEventListener("pointerup", T), document.removeEventListener("contextmenu", v), document.removeEventListener("keyup", k), t.removeEventListener("selectstart", p), document.removeEventListener("selectionchange", w), G.unbind();
764
+ }, $ = () => {
754
765
  const u = document.getSelection();
755
766
  return u ? Array.from(Array(u.rangeCount).keys()).map((C) => u.getRangeAt(C)).filter((C) => C.intersectsNode(t)) : [];
756
- }, W = () => {
757
- if (!f) return;
758
- const u = s.getAnnotation(f.annotation);
767
+ }, Y = () => {
768
+ if (!l) return;
769
+ const u = s.getAnnotation(l.annotation);
759
770
  if (!u)
760
771
  s.addAnnotation({
761
- id: f.annotation,
772
+ id: l.annotation,
762
773
  bodies: [],
763
- target: f
774
+ target: l
764
775
  });
765
776
  else {
766
- const { target: { updated: C } } = u, { updated: M } = f;
767
- (!C || !M || C < M) && s.updateTarget(f);
777
+ const { target: { updated: C } } = u, { updated: M } = l;
778
+ (!C || !M || C < M) && s.updateTarget(l);
768
779
  }
769
780
  };
770
781
  return {
771
- destroy: j,
772
- setFilter: y,
773
- setUser: c,
774
- setAnnotatingEnabled: E,
775
- setAnnotatingMode: b
782
+ destroy: q,
783
+ setFilter: x,
784
+ setUser: E,
785
+ setAnnotatingEnabled: h,
786
+ setAnnotatingMode: S
776
787
  };
777
- }, ge = (t) => [
788
+ }, me = (t) => [
778
789
  `background-color:${ot(t?.fill || U.fill).alpha(t?.fillOpacity === void 0 ? U.fillOpacity : t.fillOpacity).toHex()}`,
779
790
  t?.underlineThickness ? "text-decoration:underline" : void 0,
780
791
  t?.underlineColor ? `text-decoration-color:${t.underlineColor}` : void 0,
781
792
  t?.underlineOffset ? `text-underline-offset:${t.underlineOffset}px` : void 0,
782
793
  t?.underlineThickness ? `text-decoration-thickness:${t.underlineThickness}px` : void 0
783
- ].filter(Boolean).join(";"), me = () => {
794
+ ].filter(Boolean).join(";"), pe = () => {
784
795
  const t = document.createElement("style");
785
796
  document.getElementsByTagName("head")[0].appendChild(t);
786
797
  let e = /* @__PURE__ */ new Set();
@@ -791,138 +802,140 @@ const ft = typeof navigator < "u" && navigator.platform.startsWith("Mac"), gt =
791
802
  setVisible: (n) => {
792
803
  console.log("setVisible not implemented on CSS Custom Highlights renderer");
793
804
  },
794
- redraw: (n, r, a, l, m) => {
795
- const g = new Set(n.map((p) => p.annotation.id));
796
- Array.from(e).filter((p) => !g.has(p));
797
- const h = n.map((p) => {
798
- a ? typeof a == "function" && a(p.annotation, p.state) : p.state?.selected;
799
- const v = Et(p, a);
800
- return `::highlight(_${p.annotation.id}) { ${ge(v)} }`;
805
+ redraw: (n, r, a, c, m) => {
806
+ const f = new Set(n.map((g) => g.annotation.id));
807
+ Array.from(e).filter((g) => !f.has(g));
808
+ const y = n.map((g) => {
809
+ a ? typeof a == "function" && a(g.annotation, g.state) : g.state?.selected;
810
+ const R = bt(g, a);
811
+ return `::highlight(_${g.annotation.id}) { ${me(R)} }`;
801
812
  });
802
- t.innerHTML = h.join(`
803
- `), CSS.highlights.clear(), n.forEach(({ annotation: p }) => {
804
- const v = p.target.selector.map((x) => x.range), f = new Highlight(...v);
805
- CSS.highlights.set(`_${p.id}`, f);
806
- }), e = g;
813
+ t.innerHTML = y.join(`
814
+ `), CSS.highlights.clear(), n.forEach(({ annotation: g }) => {
815
+ const R = g.target.selector.map((L) => L.range), l = new Highlight(...R);
816
+ CSS.highlights.set(`_${g.id}`, l);
817
+ }), e = f;
807
818
  }
808
819
  };
809
- }, pe = (t, e, o) => St(me(), t, e, o), he = (t, e) => ({
820
+ }, he = (t, e, o) => Et(pe(), t, e, o), ye = (t, e) => ({
810
821
  ...t,
811
822
  annotatingEnabled: t.annotatingEnabled ?? e.annotatingEnabled,
812
823
  user: t.user || e.user
813
- }), lt = "SPANS", ke = (t, e = {}) => {
814
- Qt(t), Kt(t);
815
- const o = he(e, {
824
+ }), lt = "SPANS", Me = (t, e = {}) => {
825
+ Zt(t), Ft(t);
826
+ const o = ye(e, {
816
827
  annotatingEnabled: !0,
817
- user: Ot()
818
- }), i = de(t, o), { selection: s, viewport: n } = i, r = i.store, a = kt(r), l = Mt(i, a, o.adapter);
828
+ user: kt()
829
+ }), i = ue(t, o), { selection: s, viewport: n } = i, r = i.store, a = _t(r), c = Mt(i, a, o.adapter);
819
830
  let m = o.user;
820
- const g = typeof o.renderer != "function" ? o.renderer === "CSS_HIGHLIGHTS" ? CSS.highlights ? "CSS_HIGHLIGHTS" : lt : o.renderer || lt : null, h = g === null ? o.renderer(
831
+ const f = typeof o.renderer != "function" ? o.renderer === "CSS_HIGHLIGHTS" ? CSS.highlights ? "CSS_HIGHLIGHTS" : lt : o.renderer || lt : null, y = f === null ? o.renderer(
821
832
  t,
822
833
  i,
823
834
  n
824
- ) : g === "SPANS" ? ie(
835
+ ) : f === "SPANS" ? ae(
825
836
  t,
826
837
  i,
827
838
  n
828
- ) : g === "CSS_HIGHLIGHTS" ? pe(
839
+ ) : f === "CSS_HIGHLIGHTS" ? he(
829
840
  t,
830
841
  i,
831
842
  n
832
843
  ) : void 0;
833
- if (!h)
844
+ if (!y)
834
845
  throw `Unknown renderer implementation: ${o.renderer}`;
835
- console.debug(g ? `Using ${g} renderer` : "Using custom renderer implementation"), o.style && h.setStyle(o.style);
836
- const p = fe(
846
+ console.debug(f ? `Using ${f} renderer` : "Using custom renderer implementation"), o.style && y.setStyle(o.style);
847
+ const g = ge(
837
848
  t,
838
849
  i,
839
- l,
850
+ c,
840
851
  o
841
852
  );
842
- p.setUser(m);
843
- const v = Bt(i, a, o.adapter), f = () => m, x = (c) => {
844
- p.setAnnotatingEnabled(
845
- c === void 0 ? !0 : c
853
+ g.setUser(m);
854
+ const R = Bt(i, a, o.adapter), l = () => m, L = (E) => {
855
+ g.setAnnotatingEnabled(
856
+ E === void 0 ? !0 : E
846
857
  );
847
- }, N = (c) => {
848
- p.setAnnotatingMode(c);
849
- }, A = (c) => {
850
- h.setFilter(c), p.setFilter(c);
851
- }, E = (c) => {
852
- m = c, p.setUser(c);
853
- }, b = (c) => {
854
- c ? s.setSelected(c) : s.clear();
858
+ }, N = (E) => {
859
+ g.setAnnotatingMode(E);
860
+ }, A = (E) => {
861
+ y.setFilter(E), g.setFilter(E);
862
+ }, h = (E) => {
863
+ m = E, g.setUser(E);
864
+ }, S = (E) => {
865
+ E ? s.setSelected(E) : s.clear();
855
866
  };
856
867
  return {
857
- ...v,
868
+ ...R,
858
869
  destroy: () => {
859
- h.destroy(), p.destroy(), a.destroy();
870
+ y.destroy(), g.destroy(), a.destroy();
860
871
  },
861
872
  element: t,
862
- getUser: f,
863
- renderer: h,
864
- setAnnotatingEnabled: x,
873
+ getUser: l,
874
+ renderer: y,
875
+ setAnnotatingEnabled: L,
865
876
  setAnnotatingMode: N,
866
877
  setFilter: A,
867
- setStyle: h.setStyle.bind(h),
868
- setUser: E,
869
- setSelected: b,
870
- setVisible: h.setVisible.bind(h),
871
- on: l.on,
872
- off: l.off,
878
+ setStyle: y.setStyle.bind(y),
879
+ setUser: h,
880
+ setSelected: S,
881
+ setVisible: y.setVisible.bind(y),
882
+ on: c.on,
883
+ off: c.off,
873
884
  // @ts-ignore - temporary
874
- scrollIntoView: Vt(t, r),
885
+ scrollIntoView: zt(t, r),
875
886
  state: i
876
887
  };
877
888
  };
878
889
  export {
879
890
  rt as DEFAULT_SELECTED_STYLE,
880
891
  U as DEFAULT_STYLE,
881
- gt as NOT_ANNOTATABLE_CLASS,
882
- $ as NOT_ANNOTATABLE_SELECTOR,
883
- _e as Origin,
884
- Ie as UserSelectAction,
885
- Le as W3CTextFormat,
886
- Qt as cancelSingleClickEvents,
892
+ mt as NOT_ANNOTATABLE_CLASS,
893
+ W as NOT_ANNOTATABLE_SELECTOR,
894
+ De as Origin,
895
+ Pe as UserSelectAction,
896
+ Oe as W3CTextFormat,
897
+ Zt as cancelSingleClickEvents,
887
898
  Q as cloneKeyboardEvent,
888
899
  et as clonePointerEvent,
889
- Et as computeStyle,
890
- Jt as computeZIndex,
891
- De as createBody,
892
- St as createRenderer,
893
- fe as createSelectionHandler,
894
- ie as createSpansRenderer,
895
- ke as createTextAnnotator,
896
- de as createTextAnnotatorState,
900
+ bt as computeStyle,
901
+ te as computeZIndex,
902
+ He as createBody,
903
+ Et as createRenderer,
904
+ ge as createSelectionHandler,
905
+ ae as createSpansRenderer,
906
+ Me as createTextAnnotator,
907
+ ue as createTextAnnotatorState,
897
908
  nt as debounce,
898
- he as fillDefaults,
899
- Zt as getBackgroundColor,
900
- te as getHighlightClientRects,
901
- Yt as getQuoteContext,
909
+ ye as fillDefaults,
910
+ Jt as getBackgroundColor,
911
+ ee as getHighlightClientRects,
912
+ Xt as getQuoteContext,
902
913
  st as getRangeAnnotatableContents,
903
- ae as getViewportBounds,
904
- ft as isMac,
905
- xe as isNodeWhitespaceOrEmpty,
914
+ ce as getViewportBounds,
915
+ gt as isMac,
916
+ Ne as isNodeWhitespaceOrEmpty,
906
917
  Z as isNotAnnotatable,
907
- mt as isRangeAnnotatable,
908
- Ht as isRangeWhitespaceOrEmpty,
918
+ pt as isRangeAnnotatable,
919
+ Ut as isRangeWhitespaceOrEmpty,
909
920
  I as isRevived,
910
- oe as mergeClientRects,
911
- Ut as mergeRanges,
912
- qt as parseW3CTextAnnotation,
913
- Kt as programmaticallyFocusable,
914
- Xt as rangeToSelector,
921
+ Le as isRevivedAnnotation,
922
+ ft as isRevivedTarget,
923
+ se as mergeClientRects,
924
+ Kt as mergeRanges,
925
+ Gt as parseW3CTextAnnotation,
926
+ Ft as programmaticallyFocusable,
927
+ Vt as rangeToSelector,
915
928
  tt as reviveAnnotation,
916
- ht as reviveSelector,
917
929
  J as reviveTarget,
918
- Vt as scrollIntoView,
919
- Gt as serializeW3CTextAnnotation,
920
- Ft as splitAnnotatableRanges,
921
- Ne as toDomRectList,
922
- se as toParentBounds,
923
- Oe as toViewportBounds,
924
- ce as trackViewport,
925
- Wt as trimRangeToContainer,
926
- pt as whitespaceOrEmptyRegex
930
+ yt as reviveTextSelector,
931
+ zt as scrollIntoView,
932
+ Qt as serializeW3CTextAnnotation,
933
+ $t as splitAnnotatableRanges,
934
+ ke as toDomRectList,
935
+ re as toParentBounds,
936
+ _e as toViewportBounds,
937
+ le as trackViewport,
938
+ Yt as trimRangeToContainer,
939
+ ht as whitespaceOrEmptyRegex
927
940
  };
928
941
  //# sourceMappingURL=text-annotator.es.js.map