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