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