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