@recogito/text-annotator 4.0.0-beta → 4.0.1-beta

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