@soomo/text-annotator 3.0.0-staging.25 → 3.0.0-staging.26
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.
|
@@ -34,7 +34,7 @@ const P = {
|
|
|
34
34
|
o.setStartAfter(n), o.collapsed || e.push(o);
|
|
35
35
|
}
|
|
36
36
|
return e.length > 0 ? e : [t];
|
|
37
|
-
},
|
|
37
|
+
}, gt = (t) => {
|
|
38
38
|
const e = t.cloneContents();
|
|
39
39
|
return e.querySelectorAll(D).forEach((n) => n.remove()), e;
|
|
40
40
|
}, te = (t) => {
|
|
@@ -72,30 +72,30 @@ const P = {
|
|
|
72
72
|
endContainer: i,
|
|
73
73
|
endOffset: r
|
|
74
74
|
} = t, s = Array.from(e.childNodes).map((l) => {
|
|
75
|
-
const
|
|
76
|
-
return l.nodeName === "CANVAS" ? l :
|
|
75
|
+
const p = l.cloneNode(!0);
|
|
76
|
+
return l.nodeName === "CANVAS" ? l : p;
|
|
77
77
|
}), c = wt(n, e), u = wt(i, e), h = () => {
|
|
78
78
|
const l = e;
|
|
79
79
|
l.replaceChildren(...s);
|
|
80
|
-
const
|
|
81
|
-
return t.setStart(
|
|
80
|
+
const p = xt(c, l), f = xt(u, l);
|
|
81
|
+
return t.setStart(p, o), t.setEnd(f, r), t;
|
|
82
82
|
}, m = (l) => {
|
|
83
|
-
const
|
|
84
|
-
return l.surroundContents(
|
|
83
|
+
const p = document.createElement("SPAN");
|
|
84
|
+
return l.surroundContents(p), p;
|
|
85
85
|
};
|
|
86
86
|
if (n === i)
|
|
87
87
|
throw "Not implemented";
|
|
88
88
|
{
|
|
89
89
|
const l = document.createRange();
|
|
90
90
|
l.selectNodeContents(n), l.setStart(n, o);
|
|
91
|
-
const
|
|
91
|
+
const p = m(l), f = document.createRange();
|
|
92
92
|
f.selectNode(i), f.setEnd(i, r);
|
|
93
|
-
const w = m(f),
|
|
93
|
+
const w = m(f), g = ne(t).reverse().map((d) => {
|
|
94
94
|
var y;
|
|
95
95
|
const a = document.createElement("SPAN");
|
|
96
96
|
return (y = d.parentNode) == null || y.insertBefore(a, d), a.appendChild(d), a;
|
|
97
97
|
});
|
|
98
|
-
return { unwrap: h, nodes: [
|
|
98
|
+
return { unwrap: h, nodes: [p, ...g, w] };
|
|
99
99
|
}
|
|
100
100
|
}, ne = (t) => {
|
|
101
101
|
const {
|
|
@@ -119,9 +119,9 @@ const P = {
|
|
|
119
119
|
}, oe = (t, e, n = 10, o) => {
|
|
120
120
|
const i = o ? t.startContainer.parentElement.closest(o) : e, r = document.createRange();
|
|
121
121
|
r.setStart(i, 0), r.setEnd(t.startContainer, t.startOffset);
|
|
122
|
-
const s =
|
|
122
|
+
const s = gt(r).textContent, c = document.createRange();
|
|
123
123
|
c.setStart(t.endContainer, t.endOffset), i === document.body ? c.setEnd(i, i.childNodes.length) : c.setEndAfter(i);
|
|
124
|
-
const u =
|
|
124
|
+
const u = gt(c).textContent;
|
|
125
125
|
return {
|
|
126
126
|
prefix: s.substring(s.length - n),
|
|
127
127
|
suffix: u.substring(0, n)
|
|
@@ -177,16 +177,16 @@ const P = {
|
|
|
177
177
|
}, []), le = (t, e, n) => {
|
|
178
178
|
const o = document.createRange(), i = n ? t.startContainer.parentElement.closest(n) : e;
|
|
179
179
|
o.setStart(i, 0), o.setEnd(t.startContainer, t.startOffset);
|
|
180
|
-
const r =
|
|
180
|
+
const r = gt(o).textContent, s = t.toString(), c = r.length || 0, u = c + s.length;
|
|
181
181
|
return n ? { quote: s, start: c, end: u, range: t, offsetReference: i } : { quote: s, start: c, end: u, range: t };
|
|
182
182
|
}, Dt = (t, e) => {
|
|
183
183
|
var m, l;
|
|
184
184
|
const { start: n, end: o } = t, i = t.offsetReference || e, r = document.createNodeIterator(
|
|
185
185
|
e,
|
|
186
186
|
NodeFilter.SHOW_TEXT,
|
|
187
|
-
(
|
|
187
|
+
(p) => {
|
|
188
188
|
var f;
|
|
189
|
-
return (f =
|
|
189
|
+
return (f = p.parentElement) != null && f.closest(D) ? NodeFilter.FILTER_SKIP : NodeFilter.FILTER_ACCEPT;
|
|
190
190
|
}
|
|
191
191
|
);
|
|
192
192
|
let s = 0;
|
|
@@ -196,22 +196,22 @@ const P = {
|
|
|
196
196
|
let h = !i;
|
|
197
197
|
for (; u !== null; ) {
|
|
198
198
|
if (h || (h = i == null ? void 0 : i.contains(u)), h) {
|
|
199
|
-
const
|
|
200
|
-
if (s +
|
|
199
|
+
const p = ((m = u.textContent) == null ? void 0 : m.length) || 0;
|
|
200
|
+
if (s + p > n) {
|
|
201
201
|
c.setStart(u, n - s);
|
|
202
202
|
break;
|
|
203
203
|
}
|
|
204
|
-
s +=
|
|
204
|
+
s += p;
|
|
205
205
|
}
|
|
206
206
|
u = r.nextNode();
|
|
207
207
|
}
|
|
208
208
|
for (; u !== null; ) {
|
|
209
|
-
const
|
|
210
|
-
if (s +
|
|
209
|
+
const p = ((l = u.textContent) == null ? void 0 : l.length) || 0;
|
|
210
|
+
if (s + p >= o) {
|
|
211
211
|
c.setEnd(u, o - s);
|
|
212
212
|
break;
|
|
213
213
|
}
|
|
214
|
-
s +=
|
|
214
|
+
s += p, u = r.nextNode();
|
|
215
215
|
}
|
|
216
216
|
return {
|
|
217
217
|
...t,
|
|
@@ -237,7 +237,7 @@ const P = {
|
|
|
237
237
|
x ? s.current !== x.id && (t.classList.add("hovered"), s.set(x.id)) : s.current && (t.classList.remove("hovered"), s.set(null));
|
|
238
238
|
};
|
|
239
239
|
t.addEventListener("pointermove", l);
|
|
240
|
-
const
|
|
240
|
+
const p = (B = !1) => {
|
|
241
241
|
h && h.clear();
|
|
242
242
|
const M = de(t), { minX: b, minY: x, maxX: A, maxY: C } = M, R = u ? i.getIntersecting(b, x, A, C).filter(({ annotation: _ }) => u(_)) : i.getIntersecting(b, x, A, C), O = r.selected.map(({ id: _ }) => _), H = R.map(({ annotation: _, rects: qt }) => {
|
|
243
243
|
const jt = O.includes(_.id), Gt = _.id === s.current;
|
|
@@ -245,29 +245,29 @@ const P = {
|
|
|
245
245
|
});
|
|
246
246
|
o.redraw(H, M, c, h, B), setTimeout(() => m(R.map(({ annotation: _ }) => _)), 1);
|
|
247
247
|
}, f = (B) => {
|
|
248
|
-
h = B,
|
|
248
|
+
h = B, p();
|
|
249
249
|
}, w = (B) => {
|
|
250
|
-
c = B,
|
|
250
|
+
c = B, p();
|
|
251
251
|
}, v = (B) => {
|
|
252
|
-
u = B,
|
|
253
|
-
},
|
|
254
|
-
i.observe(
|
|
255
|
-
const d = r.subscribe(() =>
|
|
252
|
+
u = B, p(!1);
|
|
253
|
+
}, g = () => p();
|
|
254
|
+
i.observe(g);
|
|
255
|
+
const d = r.subscribe(() => p()), a = () => p(!0);
|
|
256
256
|
document.addEventListener("scroll", a, { capture: !0, passive: !0 });
|
|
257
257
|
const y = bt(() => {
|
|
258
|
-
i.recalculatePositions(), h && h.reset(),
|
|
258
|
+
i.recalculatePositions(), h && h.reset(), p();
|
|
259
259
|
});
|
|
260
260
|
window.addEventListener("resize", y);
|
|
261
261
|
const S = new ResizeObserver(y);
|
|
262
262
|
S.observe(t);
|
|
263
263
|
const L = { attributes: !0, childList: !0, subtree: !0 }, E = new MutationObserver((B) => {
|
|
264
|
-
B.every((b) => b.target === t || t.contains(b.target)) ||
|
|
264
|
+
B.every((b) => b.target === t || t.contains(b.target)) || p(!0);
|
|
265
265
|
});
|
|
266
266
|
return E.observe(document.body, L), {
|
|
267
267
|
destroy: () => {
|
|
268
|
-
t.removeEventListener("pointermove", l), o.destroy(), i.unobserve(
|
|
268
|
+
t.removeEventListener("pointermove", l), o.destroy(), i.unobserve(g), d(), document.removeEventListener("scroll", a), window.removeEventListener("resize", y), S.disconnect(), E.disconnect();
|
|
269
269
|
},
|
|
270
|
-
redraw:
|
|
270
|
+
redraw: p,
|
|
271
271
|
setStyle: w,
|
|
272
272
|
setFilter: v,
|
|
273
273
|
setPainter: f,
|
|
@@ -278,39 +278,32 @@ const P = {
|
|
|
278
278
|
return t.width = window.innerWidth, t.height = window.innerHeight, t.className = "r6o-highlight-layer bg", t;
|
|
279
279
|
}, fe = (t, e) => {
|
|
280
280
|
t.width = window.innerWidth, t.height = window.innerHeight;
|
|
281
|
-
},
|
|
281
|
+
}, pe = (t) => {
|
|
282
282
|
t.classList.add("r6o-annotatable");
|
|
283
283
|
const e = he(), n = e.getContext("2d");
|
|
284
|
-
|
|
284
|
+
document.body.appendChild(e);
|
|
285
285
|
const o = (c, u, h, m) => requestAnimationFrame(() => {
|
|
286
|
-
const { width: l, height:
|
|
287
|
-
n.clearRect(-0.5, -0.5, l + 1,
|
|
286
|
+
const { width: l, height: p } = e;
|
|
287
|
+
n.clearRect(-0.5, -0.5, l + 1, p + 1), m && m.clear();
|
|
288
288
|
const { top: f, left: w } = u;
|
|
289
|
-
[...c].sort((
|
|
290
|
-
const { annotation: { target: { created: a } } } =
|
|
289
|
+
[...c].sort((g, d) => {
|
|
290
|
+
const { annotation: { target: { created: a } } } = g, { annotation: { target: { created: y } } } = d;
|
|
291
291
|
return a.getTime() - y.getTime();
|
|
292
|
-
}).forEach((
|
|
293
|
-
var
|
|
294
|
-
const d = h ? typeof h == "function" ? h(
|
|
295
|
-
x:
|
|
296
|
-
y:
|
|
297
|
-
width:
|
|
298
|
-
height:
|
|
292
|
+
}).forEach((g) => {
|
|
293
|
+
var S;
|
|
294
|
+
const d = h ? typeof h == "function" ? h(g.annotation, g.state) : h : (S = g.state) != null && S.selected ? ot : P, a = m && m.paint(g, u) || d, y = g.rects.map(({ x: L, y: E, width: T, height: B }) => ({
|
|
295
|
+
x: L + w,
|
|
296
|
+
y: E + f,
|
|
297
|
+
width: T,
|
|
298
|
+
height: B
|
|
299
299
|
}));
|
|
300
|
-
n.fillStyle = a.fill, n.globalAlpha = a.fillOpacity || 1
|
|
301
|
-
|
|
302
|
-
if (y.forEach(
|
|
303
|
-
({ x: E, y: T, width: B, height: M }) => n.fillRect(
|
|
304
|
-
E,
|
|
305
|
-
T - S / 2,
|
|
306
|
-
B,
|
|
307
|
-
M + S
|
|
308
|
-
)
|
|
300
|
+
if (n.fillStyle = a.fill, n.globalAlpha = a.fillOpacity || 1, y.forEach(
|
|
301
|
+
({ x: L, y: E, width: T, height: B }) => n.fillRect(L, E, T, B)
|
|
309
302
|
), a.underlineColor) {
|
|
310
303
|
n.globalAlpha = 1, n.strokeStyle = a.underlineColor, n.lineWidth = a.underlineThickness ?? 1;
|
|
311
|
-
const
|
|
312
|
-
y.forEach(({ x:
|
|
313
|
-
n.beginPath(), n.moveTo(
|
|
304
|
+
const L = a.underlineOffset ?? 0;
|
|
305
|
+
y.forEach(({ x: E, y: T, width: B, height: M }) => {
|
|
306
|
+
n.beginPath(), n.moveTo(E, T + M + L), n.lineTo(E + B, T + M + L), n.stroke();
|
|
314
307
|
});
|
|
315
308
|
}
|
|
316
309
|
});
|
|
@@ -319,14 +312,14 @@ const P = {
|
|
|
319
312
|
});
|
|
320
313
|
return window.addEventListener("resize", i), {
|
|
321
314
|
destroy: () => {
|
|
322
|
-
|
|
315
|
+
e.remove(), window.removeEventListener("resize", i);
|
|
323
316
|
},
|
|
324
317
|
setVisible: (c) => {
|
|
325
318
|
console.log("setVisible not implemented on Canvas renderer");
|
|
326
319
|
},
|
|
327
320
|
redraw: o
|
|
328
321
|
};
|
|
329
|
-
},
|
|
322
|
+
}, ge = (t, e, n) => vt(t, e, n, pe(t));
|
|
330
323
|
var me = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }, X = function(t) {
|
|
331
324
|
return typeof t == "string" ? t.length > 0 : typeof t == "number";
|
|
332
325
|
}, I = function(t, e, n) {
|
|
@@ -480,12 +473,12 @@ const Ee = (t) => [
|
|
|
480
473
|
Array.from(e).filter((l) => !h.has(l));
|
|
481
474
|
const m = r.map((l) => {
|
|
482
475
|
var w;
|
|
483
|
-
const
|
|
476
|
+
const p = c ? typeof c == "function" ? c(l.annotation, l.state) : c : (w = l.state) != null && w.selected ? ot : P, f = u && u.paint(l, s) || p;
|
|
484
477
|
return `::highlight(_${l.annotation.id}) { ${Ee(f)} }`;
|
|
485
478
|
});
|
|
486
479
|
t.innerHTML = m.join(`
|
|
487
480
|
`), CSS.highlights.clear(), r.forEach(({ annotation: l }) => {
|
|
488
|
-
const
|
|
481
|
+
const p = l.target.selector.map((w) => w.range), f = new Highlight(...p);
|
|
489
482
|
CSS.highlights.set(`_${l.id}`, f);
|
|
490
483
|
}), e = h;
|
|
491
484
|
}
|
|
@@ -525,18 +518,16 @@ const Le = (t, e) => {
|
|
|
525
518
|
e.remove();
|
|
526
519
|
},
|
|
527
520
|
redraw: (s, c, u, h, m) => {
|
|
528
|
-
const
|
|
529
|
-
if (!h && !
|
|
530
|
-
|
|
521
|
+
const p = !(mt(n, s) && m);
|
|
522
|
+
if (!h && !p) return;
|
|
523
|
+
p && (e.innerHTML = "");
|
|
531
524
|
const f = s.reduce((w, { rects: v }) => [...w, ...v], []);
|
|
532
525
|
s.forEach((w) => {
|
|
533
526
|
w.rects.map((v) => {
|
|
534
|
-
const
|
|
535
|
-
if (
|
|
527
|
+
const g = Le(v, f), d = Kt(w, c, u, h, g);
|
|
528
|
+
if (p) {
|
|
536
529
|
const a = document.createElement("span");
|
|
537
|
-
a.className = "r6o-annotation", a.dataset.annotation = w.annotation.id, a.style.left = `${v.x}px`, a.style.top = `${v.y}px`, a.style.width = `${v.width}px`, a.style.height = `${v.height}px
|
|
538
|
-
const y = Y((d == null ? void 0 : d.fill) || P.fill).alpha((d == null ? void 0 : d.fillOpacity) === void 0 ? P.fillOpacity : d.fillOpacity).toHex();
|
|
539
|
-
a.style.backgroundColor = y, d.underlineStyle && (a.style.borderStyle = d.underlineStyle), d.underlineColor && (a.style.borderColor = d.underlineColor), d.underlineThickness && (a.style.borderBottomWidth = `${d.underlineThickness}px`), d.underlineOffset && (a.style.paddingBottom = `${d.underlineOffset}px`), e.appendChild(a);
|
|
530
|
+
a.className = "r6o-annotation", a.dataset.annotation = w.annotation.id, a.style.left = `${v.x}px`, a.style.top = `${v.y}px`, a.style.width = `${v.width}px`, a.style.height = `${v.height}px`, a.style.backgroundColor = Y((d == null ? void 0 : d.fill) || P.fill).alpha((d == null ? void 0 : d.fillOpacity) === void 0 ? P.fillOpacity : d.fillOpacity).toHex(), d.underlineStyle && (a.style.borderStyle = d.underlineStyle), d.underlineColor && (a.style.borderColor = d.underlineColor), d.underlineThickness && (a.style.borderBottomWidth = `${d.underlineThickness}px`), d.underlineOffset && (a.style.paddingBottom = `${d.underlineOffset}px`), e.appendChild(a);
|
|
540
531
|
}
|
|
541
532
|
});
|
|
542
533
|
}), n = s;
|
|
@@ -650,30 +641,30 @@ const ut = { selected: [] }, ke = (t, e = "EDIT") => {
|
|
|
650
641
|
}, c = (l) => {
|
|
651
642
|
if (i.selected.length === 0)
|
|
652
643
|
return !1;
|
|
653
|
-
const
|
|
654
|
-
return i.selected.some((f) => f.id ===
|
|
655
|
-
}, u = (l,
|
|
644
|
+
const p = typeof l == "string" ? l : l.id;
|
|
645
|
+
return i.selected.some((f) => f.id === p);
|
|
646
|
+
}, u = (l, p) => {
|
|
656
647
|
const f = t.getAnnotation(l);
|
|
657
648
|
if (f) {
|
|
658
649
|
const w = It(f, e);
|
|
659
|
-
o(w === "EDIT" ? { selected: [{ id: l, editable: !0 }], pointerEvent:
|
|
650
|
+
o(w === "EDIT" ? { selected: [{ id: l, editable: !0 }], pointerEvent: p } : w === "SELECT" ? { selected: [{ id: l }], pointerEvent: p } : { selected: [], pointerEvent: p });
|
|
660
651
|
} else
|
|
661
652
|
console.warn("Invalid selection: " + l);
|
|
662
|
-
}, h = (l,
|
|
653
|
+
}, h = (l, p) => {
|
|
663
654
|
const f = Array.isArray(l) ? l : [l], w = f.map((v) => t.getAnnotation(v)).filter(Boolean);
|
|
664
655
|
o({
|
|
665
656
|
selected: w.map((v) => {
|
|
666
|
-
const
|
|
667
|
-
return { id: v.id, editable:
|
|
657
|
+
const g = p === void 0 ? It(v, e) === "EDIT" : p;
|
|
658
|
+
return { id: v.id, editable: g };
|
|
668
659
|
})
|
|
669
660
|
}), w.length !== f.length && console.warn("Invalid selection", l);
|
|
670
661
|
}, m = (l) => {
|
|
671
662
|
if (i.selected.length === 0)
|
|
672
663
|
return !1;
|
|
673
|
-
const { selected:
|
|
674
|
-
|
|
664
|
+
const { selected: p } = i;
|
|
665
|
+
p.filter(({ id: f }) => l.includes(f)).length > 0 && o({ selected: p.filter(({ id: f }) => !l.includes(f)) });
|
|
675
666
|
};
|
|
676
|
-
return t.observe(({ changes: l }) => m((l.deleted || []).map((
|
|
667
|
+
return t.observe(({ changes: l }) => m((l.deleted || []).map((p) => p.id))), {
|
|
677
668
|
clear: r,
|
|
678
669
|
clickSelect: u,
|
|
679
670
|
get selected() {
|
|
@@ -762,17 +753,17 @@ const We = (t, e) => {
|
|
|
762
753
|
return !0;
|
|
763
754
|
}, qe = (t, e) => {
|
|
764
755
|
const n = new Set((t.created || []).map((l) => l.id)), o = new Set((t.updated || []).map(({ newValue: l }) => l.id)), i = new Set((e.created || []).map((l) => l.id)), r = new Set((e.deleted || []).map((l) => l.id)), s = new Set((e.updated || []).map(({ oldValue: l }) => l.id)), c = new Set((e.updated || []).filter(({ oldValue: l }) => n.has(l.id) || o.has(l.id)).map(({ oldValue: l }) => l.id)), u = [
|
|
765
|
-
...(t.created || []).filter((l) => !r.has(l.id)).map((l) => s.has(l.id) ? e.updated.find(({ oldValue:
|
|
756
|
+
...(t.created || []).filter((l) => !r.has(l.id)).map((l) => s.has(l.id) ? e.updated.find(({ oldValue: p }) => p.id === l.id).newValue : l),
|
|
766
757
|
...e.created || []
|
|
767
758
|
], h = [
|
|
768
759
|
...(t.deleted || []).filter((l) => !i.has(l.id)),
|
|
769
760
|
...(e.deleted || []).filter((l) => !n.has(l.id))
|
|
770
761
|
], m = [
|
|
771
762
|
...(t.updated || []).filter(({ newValue: l }) => !r.has(l.id)).map((l) => {
|
|
772
|
-
const { oldValue:
|
|
763
|
+
const { oldValue: p, newValue: f } = l;
|
|
773
764
|
if (s.has(f.id)) {
|
|
774
765
|
const w = e.updated.find((v) => v.oldValue.id === f.id).newValue;
|
|
775
|
-
return Pt(
|
|
766
|
+
return Pt(p, w);
|
|
776
767
|
} else
|
|
777
768
|
return l;
|
|
778
769
|
}),
|
|
@@ -830,7 +821,7 @@ const We = (t, e) => {
|
|
|
830
821
|
}] });
|
|
831
822
|
} else
|
|
832
823
|
console.warn(`Attempt to add body to missing annotation: ${b.annotation}`);
|
|
833
|
-
}, l = () => [...t.values()],
|
|
824
|
+
}, l = () => [...t.values()], p = (b = N.LOCAL) => {
|
|
834
825
|
const x = [...t.values()];
|
|
835
826
|
t.clear(), e.clear(), r(b, { deleted: x });
|
|
836
827
|
}, f = (b, x = !0, A = N.LOCAL) => {
|
|
@@ -858,7 +849,7 @@ const We = (t, e) => {
|
|
|
858
849
|
}, v = (b, x = N.LOCAL) => {
|
|
859
850
|
const A = w(b);
|
|
860
851
|
A && r(x, { deleted: [A] });
|
|
861
|
-
},
|
|
852
|
+
}, g = (b, x = N.LOCAL) => {
|
|
862
853
|
const A = b.reduce((C, R) => {
|
|
863
854
|
const O = w(R);
|
|
864
855
|
return O ? [...C, O] : C;
|
|
@@ -949,7 +940,7 @@ const We = (t, e) => {
|
|
|
949
940
|
addBody: m,
|
|
950
941
|
all: l,
|
|
951
942
|
bulkAddAnnotation: f,
|
|
952
|
-
bulkDeleteAnnotation:
|
|
943
|
+
bulkDeleteAnnotation: g,
|
|
953
944
|
bulkDeleteBodies: y,
|
|
954
945
|
bulkUpdateAnnotation: h,
|
|
955
946
|
bulkUpdateBodies: B,
|
|
@@ -957,7 +948,7 @@ const We = (t, e) => {
|
|
|
957
948
|
const A = b.map((C) => M(C)).filter(Boolean);
|
|
958
949
|
A.length > 0 && r(x, { updated: A });
|
|
959
950
|
},
|
|
960
|
-
clear:
|
|
951
|
+
clear: p,
|
|
961
952
|
deleteAnnotation: v,
|
|
962
953
|
deleteBody: a,
|
|
963
954
|
getAnnotation: S,
|
|
@@ -995,15 +986,15 @@ const Qe = 250, Je = (t) => {
|
|
|
995
986
|
if (v - r > Qe)
|
|
996
987
|
n.splice(o + 1), n.push(w), o = n.length - 1;
|
|
997
988
|
else {
|
|
998
|
-
const
|
|
999
|
-
n[
|
|
989
|
+
const g = n.length - 1;
|
|
990
|
+
n[g] = qe(n[g], w);
|
|
1000
991
|
}
|
|
1001
992
|
r = v;
|
|
1002
993
|
}
|
|
1003
994
|
i = !1;
|
|
1004
995
|
};
|
|
1005
996
|
t.observe(s, { origin: N.LOCAL });
|
|
1006
|
-
const c = (f) => f && f.length > 0 && t.bulkDeleteAnnotation(f), u = (f) => f && f.length > 0 && t.bulkAddAnnotation(f, !1), h = (f) => f && f.length > 0 && t.bulkUpdateAnnotation(f.map(({ oldValue: w }) => w)), m = (f) => f && f.length > 0 && t.bulkUpdateAnnotation(f.map(({ newValue: w }) => w)), l = (f) => f && f.length > 0 && t.bulkAddAnnotation(f, !1),
|
|
997
|
+
const c = (f) => f && f.length > 0 && t.bulkDeleteAnnotation(f), u = (f) => f && f.length > 0 && t.bulkAddAnnotation(f, !1), h = (f) => f && f.length > 0 && t.bulkUpdateAnnotation(f.map(({ oldValue: w }) => w)), m = (f) => f && f.length > 0 && t.bulkUpdateAnnotation(f.map(({ newValue: w }) => w)), l = (f) => f && f.length > 0 && t.bulkAddAnnotation(f, !1), p = (f) => f && f.length > 0 && t.bulkDeleteAnnotation(f);
|
|
1007
998
|
return {
|
|
1008
999
|
canRedo: () => n.length - 1 > o,
|
|
1009
1000
|
canUndo: () => o > -1,
|
|
@@ -1013,7 +1004,7 @@ const Qe = 250, Je = (t) => {
|
|
|
1013
1004
|
if (n.length - 1 > o) {
|
|
1014
1005
|
i = !0;
|
|
1015
1006
|
const { created: f, updated: w, deleted: v } = n[o + 1];
|
|
1016
|
-
u(f), m(w),
|
|
1007
|
+
u(f), m(w), p(v), e.emit("redo", n[o + 1]), o += 1;
|
|
1017
1008
|
}
|
|
1018
1009
|
},
|
|
1019
1010
|
undo: () => {
|
|
@@ -1033,36 +1024,36 @@ const Qe = 250, Je = (t) => {
|
|
|
1033
1024
|
}, tn = (t, e, n, o) => {
|
|
1034
1025
|
const { store: i, selection: r, hover: s, viewport: c } = t, u = /* @__PURE__ */ new Map();
|
|
1035
1026
|
let h = [], m;
|
|
1036
|
-
const l = (v,
|
|
1037
|
-
u.has(v) ? u.get(v).push(
|
|
1038
|
-
},
|
|
1027
|
+
const l = (v, g) => {
|
|
1028
|
+
u.has(v) ? u.get(v).push(g) : u.set(v, [g]);
|
|
1029
|
+
}, p = (v, g) => {
|
|
1039
1030
|
const d = u.get(v);
|
|
1040
1031
|
if (d) {
|
|
1041
|
-
const a = d.indexOf(
|
|
1032
|
+
const a = d.indexOf(g);
|
|
1042
1033
|
a !== -1 && d.splice(a, 1);
|
|
1043
1034
|
}
|
|
1044
|
-
}, f = (v,
|
|
1035
|
+
}, f = (v, g, d) => {
|
|
1045
1036
|
u.has(v) && setTimeout(() => {
|
|
1046
1037
|
u.get(v).forEach((a) => {
|
|
1047
1038
|
if (n) {
|
|
1048
|
-
const y = Array.isArray(
|
|
1039
|
+
const y = Array.isArray(g) ? g.map((L) => n.serialize(L)) : n.serialize(g), S = d ? d instanceof PointerEvent ? d : n.serialize(d) : void 0;
|
|
1049
1040
|
a(y, S);
|
|
1050
1041
|
} else
|
|
1051
|
-
a(
|
|
1042
|
+
a(g, d);
|
|
1052
1043
|
});
|
|
1053
1044
|
}, 1);
|
|
1054
1045
|
};
|
|
1055
1046
|
r.subscribe(({ selected: v }) => {
|
|
1056
1047
|
if (!(h.length === 0 && v.length === 0)) {
|
|
1057
1048
|
if (h.length === 0 && v.length > 0)
|
|
1058
|
-
h = v.map(({ id:
|
|
1049
|
+
h = v.map(({ id: g }) => i.getAnnotation(g));
|
|
1059
1050
|
else if (h.length > 0 && v.length === 0)
|
|
1060
|
-
h.forEach((
|
|
1061
|
-
const d = i.getAnnotation(
|
|
1062
|
-
d && !q(d,
|
|
1051
|
+
h.forEach((g) => {
|
|
1052
|
+
const d = i.getAnnotation(g.id);
|
|
1053
|
+
d && !q(d, g) && f("updateAnnotation", d, g);
|
|
1063
1054
|
}), h = [];
|
|
1064
1055
|
else {
|
|
1065
|
-
const
|
|
1056
|
+
const g = new Set(h.map((a) => a.id)), d = new Set(v.map(({ id: a }) => a));
|
|
1066
1057
|
h.filter((a) => !d.has(a.id)).forEach((a) => {
|
|
1067
1058
|
const y = i.getAnnotation(a.id);
|
|
1068
1059
|
y && !q(y, a) && f("updateAnnotation", y, a);
|
|
@@ -1070,16 +1061,16 @@ const Qe = 250, Je = (t) => {
|
|
|
1070
1061
|
// Remove annotations that were deselected
|
|
1071
1062
|
...h.filter((a) => d.has(a.id)),
|
|
1072
1063
|
// Add editable annotations that were selected
|
|
1073
|
-
...v.filter(({ id: a }) => !
|
|
1064
|
+
...v.filter(({ id: a }) => !g.has(a)).map(({ id: a }) => i.getAnnotation(a))
|
|
1074
1065
|
];
|
|
1075
1066
|
}
|
|
1076
1067
|
f("selectionChanged", h);
|
|
1077
1068
|
}
|
|
1078
1069
|
}), s.subscribe((v) => {
|
|
1079
1070
|
!m && v ? f("mouseEnterAnnotation", i.getAnnotation(v)) : m && !v ? f("mouseLeaveAnnotation", i.getAnnotation(m)) : m && v && (f("mouseLeaveAnnotation", i.getAnnotation(m)), f("mouseEnterAnnotation", i.getAnnotation(v))), m = v;
|
|
1080
|
-
}), c == null || c.subscribe((v) => f("viewportIntersect", v.map((
|
|
1081
|
-
const { created:
|
|
1082
|
-
(
|
|
1071
|
+
}), c == null || c.subscribe((v) => f("viewportIntersect", v.map((g) => i.getAnnotation(g)))), i.observe((v) => {
|
|
1072
|
+
const { created: g, deleted: d } = v.changes;
|
|
1073
|
+
(g || []).forEach((a) => f("createAnnotation", a)), (d || []).forEach((a) => f("deleteAnnotation", a)), (v.changes.updated || []).filter((a) => [
|
|
1083
1074
|
...a.bodiesCreated || [],
|
|
1084
1075
|
...a.bodiesDeleted || [],
|
|
1085
1076
|
...a.bodiesUpdated || []
|
|
@@ -1089,15 +1080,15 @@ const Qe = 250, Je = (t) => {
|
|
|
1089
1080
|
});
|
|
1090
1081
|
}, { origin: N.LOCAL }), i.observe((v) => {
|
|
1091
1082
|
if (h) {
|
|
1092
|
-
const
|
|
1083
|
+
const g = new Set(h.map((a) => a.id)), d = (v.changes.updated || []).filter(({ newValue: a }) => g.has(a.id)).map(({ newValue: a }) => a);
|
|
1093
1084
|
d.length > 0 && (h = h.map((a) => d.find((S) => S.id === a.id) || a));
|
|
1094
1085
|
}
|
|
1095
1086
|
}, { origin: N.REMOTE });
|
|
1096
|
-
const w = (v) => (
|
|
1097
|
-
const { updated: d } =
|
|
1087
|
+
const w = (v) => (g) => {
|
|
1088
|
+
const { updated: d } = g;
|
|
1098
1089
|
v ? (d || []).forEach((a) => f("updateAnnotation", a.oldValue, a.newValue)) : (d || []).forEach((a) => f("updateAnnotation", a.newValue, a.oldValue));
|
|
1099
1090
|
};
|
|
1100
|
-
return e.on("undo", w(!0)), e.on("redo", w(!1)), { on: l, off:
|
|
1091
|
+
return e.on("undo", w(!0)), e.on("redo", w(!1)), { on: l, off: p, emit: f };
|
|
1101
1092
|
}, en = (t) => (e) => e.reduce((n, o) => {
|
|
1102
1093
|
const { parsed: i, error: r } = t.parse(o);
|
|
1103
1094
|
return r ? {
|
|
@@ -1110,44 +1101,44 @@ const Qe = 250, Je = (t) => {
|
|
|
1110
1101
|
...n
|
|
1111
1102
|
};
|
|
1112
1103
|
}, { parsed: [], failed: [] }), nn = (t, e, n) => {
|
|
1113
|
-
const { store: o, selection: i } = t, r = (
|
|
1104
|
+
const { store: o, selection: i } = t, r = (g) => {
|
|
1114
1105
|
if (n) {
|
|
1115
|
-
const { parsed: d, error: a } = n.parse(
|
|
1106
|
+
const { parsed: d, error: a } = n.parse(g);
|
|
1116
1107
|
d ? o.addAnnotation(d, N.REMOTE) : console.error(a);
|
|
1117
1108
|
} else
|
|
1118
|
-
o.addAnnotation(
|
|
1119
|
-
}, s = () => i.clear(), c = () => o.clear(), u = (
|
|
1120
|
-
const d = o.getAnnotation(
|
|
1109
|
+
o.addAnnotation(g, N.REMOTE);
|
|
1110
|
+
}, s = () => i.clear(), c = () => o.clear(), u = (g) => {
|
|
1111
|
+
const d = o.getAnnotation(g);
|
|
1121
1112
|
return n && d ? n.serialize(d) : d;
|
|
1122
1113
|
}, h = () => n ? o.all().map(n.serialize) : o.all(), m = () => {
|
|
1123
|
-
var
|
|
1124
|
-
const d = (((
|
|
1114
|
+
var g;
|
|
1115
|
+
const d = (((g = i.selected) == null ? void 0 : g.map((a) => a.id)) || []).map((a) => o.getAnnotation(a)).filter(Boolean);
|
|
1125
1116
|
return n ? d.map(n.serialize) : d;
|
|
1126
|
-
}, l = (
|
|
1127
|
-
if (typeof
|
|
1128
|
-
const d = o.getAnnotation(
|
|
1129
|
-
if (o.deleteAnnotation(
|
|
1117
|
+
}, l = (g, d = !0) => fetch(g).then((a) => a.json()).then((a) => (f(a, d), a)), p = (g) => {
|
|
1118
|
+
if (typeof g == "string") {
|
|
1119
|
+
const d = o.getAnnotation(g);
|
|
1120
|
+
if (o.deleteAnnotation(g), d)
|
|
1130
1121
|
return n ? n.serialize(d) : d;
|
|
1131
1122
|
} else {
|
|
1132
|
-
const d = n ? n.parse(
|
|
1123
|
+
const d = n ? n.parse(g).parsed : g;
|
|
1133
1124
|
if (d)
|
|
1134
|
-
return o.deleteAnnotation(d),
|
|
1125
|
+
return o.deleteAnnotation(d), g;
|
|
1135
1126
|
}
|
|
1136
|
-
}, f = (
|
|
1127
|
+
}, f = (g, d = !0) => {
|
|
1137
1128
|
if (n) {
|
|
1138
|
-
const { parsed: a, failed: y } = en(n)(
|
|
1129
|
+
const { parsed: a, failed: y } = en(n)(g);
|
|
1139
1130
|
y.length > 0 && console.warn(`Discarded ${y.length} invalid annotations`, y), o.bulkAddAnnotation(a, d, N.REMOTE);
|
|
1140
1131
|
} else
|
|
1141
|
-
o.bulkAddAnnotation(
|
|
1142
|
-
}, w = (
|
|
1143
|
-
|
|
1144
|
-
}, v = (
|
|
1132
|
+
o.bulkAddAnnotation(g, d, N.REMOTE);
|
|
1133
|
+
}, w = (g, d) => {
|
|
1134
|
+
g ? i.setSelected(g, d) : i.clear();
|
|
1135
|
+
}, v = (g) => {
|
|
1145
1136
|
if (n) {
|
|
1146
|
-
const d = n.parse(
|
|
1137
|
+
const d = n.parse(g).parsed, a = n.serialize(o.getAnnotation(d.id));
|
|
1147
1138
|
return o.updateAnnotation(d), a;
|
|
1148
1139
|
} else {
|
|
1149
|
-
const d = o.getAnnotation(
|
|
1150
|
-
return o.updateAnnotation(
|
|
1140
|
+
const d = o.getAnnotation(g.id);
|
|
1141
|
+
return o.updateAnnotation(g), d;
|
|
1151
1142
|
}
|
|
1152
1143
|
};
|
|
1153
1144
|
return {
|
|
@@ -1161,7 +1152,7 @@ const Qe = 250, Je = (t) => {
|
|
|
1161
1152
|
getSelected: m,
|
|
1162
1153
|
loadAnnotations: l,
|
|
1163
1154
|
redo: e.redo,
|
|
1164
|
-
removeAnnotation:
|
|
1155
|
+
removeAnnotation: p,
|
|
1165
1156
|
setAnnotations: f,
|
|
1166
1157
|
setSelected: w,
|
|
1167
1158
|
undo: e.undo,
|
|
@@ -1216,9 +1207,9 @@ const ln = () => ({ isGuest: !0, id: an("1234567890abcdefghijklmnopqrstuvwxyzABC
|
|
|
1216
1207
|
});
|
|
1217
1208
|
cn();
|
|
1218
1209
|
const Un = (t, e) => ({
|
|
1219
|
-
parse: (n) =>
|
|
1210
|
+
parse: (n) => gn(n),
|
|
1220
1211
|
serialize: (n) => mn(n, t, e)
|
|
1221
|
-
}), fn = (t) => t.quote !== void 0 && t.start !== void 0 && t.end !== void 0,
|
|
1212
|
+
}), fn = (t) => t.quote !== void 0 && t.start !== void 0 && t.end !== void 0, pn = (t) => {
|
|
1222
1213
|
const {
|
|
1223
1214
|
id: e,
|
|
1224
1215
|
creator: n,
|
|
@@ -1237,13 +1228,13 @@ const Un = (t, e) => ({
|
|
|
1237
1228
|
styleClass: s[0].styleClass
|
|
1238
1229
|
};
|
|
1239
1230
|
for (const u of s) {
|
|
1240
|
-
const m = (Array.isArray(u.selector) ? u.selector : [u.selector]).reduce((l,
|
|
1241
|
-
switch (
|
|
1231
|
+
const m = (Array.isArray(u.selector) ? u.selector : [u.selector]).reduce((l, p) => {
|
|
1232
|
+
switch (p.type) {
|
|
1242
1233
|
case "TextQuoteSelector":
|
|
1243
|
-
l.quote =
|
|
1234
|
+
l.quote = p.exact;
|
|
1244
1235
|
break;
|
|
1245
1236
|
case "TextPositionSelector":
|
|
1246
|
-
l.start =
|
|
1237
|
+
l.start = p.start, l.end = p.end;
|
|
1247
1238
|
break;
|
|
1248
1239
|
}
|
|
1249
1240
|
return l;
|
|
@@ -1259,14 +1250,14 @@ const Un = (t, e) => ({
|
|
|
1259
1250
|
}
|
|
1260
1251
|
}
|
|
1261
1252
|
return { parsed: c };
|
|
1262
|
-
},
|
|
1253
|
+
}, gn = (t) => {
|
|
1263
1254
|
const e = t.id || Ht(), {
|
|
1264
1255
|
creator: n,
|
|
1265
1256
|
created: o,
|
|
1266
1257
|
modified: i,
|
|
1267
1258
|
body: r,
|
|
1268
1259
|
...s
|
|
1269
|
-
} = t, c = un(r, e), u =
|
|
1260
|
+
} = t, c = un(r, e), u = pn(t);
|
|
1270
1261
|
return "error" in u ? { error: u.error } : {
|
|
1271
1262
|
parsed: {
|
|
1272
1263
|
...s,
|
|
@@ -1282,8 +1273,8 @@ const Un = (t, e) => ({
|
|
|
1282
1273
|
created: u,
|
|
1283
1274
|
updated: h,
|
|
1284
1275
|
...m
|
|
1285
|
-
} = i, l = s.map((
|
|
1286
|
-
const { quote: f, start: w, end: v, range:
|
|
1276
|
+
} = i, l = s.map((p) => {
|
|
1277
|
+
const { quote: f, start: w, end: v, range: g } = p, { prefix: d, suffix: a } = oe(g, n), y = [{
|
|
1287
1278
|
type: "TextQuoteSelector",
|
|
1288
1279
|
exact: f,
|
|
1289
1280
|
prefix: d,
|
|
@@ -1295,7 +1286,7 @@ const Un = (t, e) => ({
|
|
|
1295
1286
|
}];
|
|
1296
1287
|
return {
|
|
1297
1288
|
...m,
|
|
1298
|
-
id:
|
|
1289
|
+
id: p.id,
|
|
1299
1290
|
source: e,
|
|
1300
1291
|
selector: y
|
|
1301
1292
|
};
|
|
@@ -1321,12 +1312,12 @@ function zt(t, e, n, o, i) {
|
|
|
1321
1312
|
var r = o - n + 1, s = e - n + 1, c = Math.log(r), u = 0.5 * Math.exp(2 * c / 3), h = 0.5 * Math.sqrt(c * u * (r - u) / r) * (s - r / 2 < 0 ? -1 : 1), m = Math.max(n, Math.floor(e - s * u / r + h)), l = Math.min(o, Math.floor(e + (r - s) * u / r + h));
|
|
1322
1313
|
zt(t, e, m, l, i);
|
|
1323
1314
|
}
|
|
1324
|
-
var
|
|
1325
|
-
for (j(t, n, e), i(t[o],
|
|
1326
|
-
for (j(t, f, w), f++, w--; i(t[f],
|
|
1327
|
-
for (; i(t[w],
|
|
1315
|
+
var p = t[e], f = n, w = o;
|
|
1316
|
+
for (j(t, n, e), i(t[o], p) > 0 && j(t, n, o); f < w; ) {
|
|
1317
|
+
for (j(t, f, w), f++, w--; i(t[f], p) < 0; ) f++;
|
|
1318
|
+
for (; i(t[w], p) > 0; ) w--;
|
|
1328
1319
|
}
|
|
1329
|
-
i(t[n],
|
|
1320
|
+
i(t[n], p) === 0 ? j(t, n, w) : (w++, j(t, w, o)), w <= e && (n = w + 1), e <= w && (o = w - 1);
|
|
1330
1321
|
}
|
|
1331
1322
|
}
|
|
1332
1323
|
function j(t, e, n) {
|
|
@@ -1351,7 +1342,7 @@ class yn {
|
|
|
1351
1342
|
for (; n; ) {
|
|
1352
1343
|
for (let s = 0; s < n.children.length; s++) {
|
|
1353
1344
|
const c = n.children[s], u = n.leaf ? i(c) : c;
|
|
1354
|
-
nt(e, u) && (n.leaf ? o.push(c) :
|
|
1345
|
+
nt(e, u) && (n.leaf ? o.push(c) : pt(e, u) ? this._all(c, o) : r.push(c));
|
|
1355
1346
|
}
|
|
1356
1347
|
n = r.pop();
|
|
1357
1348
|
}
|
|
@@ -1365,7 +1356,7 @@ class yn {
|
|
|
1365
1356
|
for (let i = 0; i < n.children.length; i++) {
|
|
1366
1357
|
const r = n.children[i], s = n.leaf ? this.toBBox(r) : r;
|
|
1367
1358
|
if (nt(e, s)) {
|
|
1368
|
-
if (n.leaf ||
|
|
1359
|
+
if (n.leaf || pt(e, s)) return !0;
|
|
1369
1360
|
o.push(r);
|
|
1370
1361
|
}
|
|
1371
1362
|
}
|
|
@@ -1411,7 +1402,7 @@ class yn {
|
|
|
1411
1402
|
if (m !== -1)
|
|
1412
1403
|
return o.children.splice(m, 1), r.push(o), this._condense(r), this;
|
|
1413
1404
|
}
|
|
1414
|
-
!h && !o.leaf &&
|
|
1405
|
+
!h && !o.leaf && pt(o, i) ? (r.push(o), s.push(c), c = 0, u = o, o = o.children[0]) : u ? (c++, o = u.children[c], h = !1) : o = null;
|
|
1415
1406
|
}
|
|
1416
1407
|
return this;
|
|
1417
1408
|
}
|
|
@@ -1447,9 +1438,9 @@ class yn {
|
|
|
1447
1438
|
for (let m = n; m <= o; m += h) {
|
|
1448
1439
|
const l = Math.min(m + h - 1, o);
|
|
1449
1440
|
Ut(e, m, l, u, this.compareMinY);
|
|
1450
|
-
for (let
|
|
1451
|
-
const f = Math.min(
|
|
1452
|
-
c.children.push(this._build(e,
|
|
1441
|
+
for (let p = m; p <= l; p += u) {
|
|
1442
|
+
const f = Math.min(p + u - 1, l);
|
|
1443
|
+
c.children.push(this._build(e, p, f, i - 1));
|
|
1453
1444
|
}
|
|
1454
1445
|
}
|
|
1455
1446
|
return z(c, this.toBBox), c;
|
|
@@ -1557,7 +1548,7 @@ function Sn(t, e) {
|
|
|
1557
1548
|
const n = Math.max(t.minX, e.minX), o = Math.max(t.minY, e.minY), i = Math.min(t.maxX, e.maxX), r = Math.min(t.maxY, e.maxY);
|
|
1558
1549
|
return Math.max(0, i - n) * Math.max(0, r - o);
|
|
1559
1550
|
}
|
|
1560
|
-
function
|
|
1551
|
+
function pt(t, e) {
|
|
1561
1552
|
return t.minX <= e.minX && t.minY <= e.minY && e.maxX <= t.maxX && e.maxY <= t.maxY;
|
|
1562
1553
|
}
|
|
1563
1554
|
function nt(t, e) {
|
|
@@ -1625,7 +1616,7 @@ const Cn = (t, e) => {
|
|
|
1625
1616
|
maxY: a
|
|
1626
1617
|
}), L = (E) => E.annotation.rects.reduce((T, B) => T + B.width * B.height, 0);
|
|
1627
1618
|
return S.length > 0 ? (S.sort((E, T) => L(E) - L(T)), y ? S.map((E) => E.annotation.id) : [S[0].annotation.id]) : [];
|
|
1628
|
-
},
|
|
1619
|
+
}, p = (d) => {
|
|
1629
1620
|
const a = f(d);
|
|
1630
1621
|
if (a.length === 0)
|
|
1631
1622
|
return;
|
|
@@ -1643,7 +1634,7 @@ const Cn = (t, e) => {
|
|
|
1643
1634
|
all: r,
|
|
1644
1635
|
clear: s,
|
|
1645
1636
|
getAt: l,
|
|
1646
|
-
getAnnotationBounds:
|
|
1637
|
+
getAnnotationBounds: p,
|
|
1647
1638
|
getAnnotationRects: f,
|
|
1648
1639
|
getIntersecting: (d, a, y, S) => {
|
|
1649
1640
|
const L = n.search({ minX: d, minY: a, maxX: y, maxY: S }), E = new Set(L.map((T) => T.annotation.id));
|
|
@@ -1660,39 +1651,39 @@ const Cn = (t, e) => {
|
|
|
1660
1651
|
update: h
|
|
1661
1652
|
};
|
|
1662
1653
|
}, Ln = (t, e) => {
|
|
1663
|
-
const n = Ge(), o = Cn(n, t), i = ke(n, e), r = Ve(n), s = Ze(), c = (v,
|
|
1654
|
+
const n = Ge(), o = Cn(n, t), i = ke(n, e), r = Ve(n), s = Ze(), c = (v, g = N.LOCAL) => {
|
|
1664
1655
|
const d = rt(v, t), a = $(d.target.selector);
|
|
1665
|
-
return a && n.addAnnotation(d,
|
|
1666
|
-
}, u = (v,
|
|
1656
|
+
return a && n.addAnnotation(d, g), a;
|
|
1657
|
+
}, u = (v, g = !0, d = N.LOCAL) => {
|
|
1667
1658
|
const a = v.map((S) => rt(S, t)), y = a.filter((S) => !$(S.target.selector));
|
|
1668
|
-
return y.length > 0 ? (console.warn("Could not revive all targets for these annotations:", y), n.bulkAddAnnotation(a,
|
|
1669
|
-
}, h = (v,
|
|
1659
|
+
return y.length > 0 ? (console.warn("Could not revive all targets for these annotations:", y), n.bulkAddAnnotation(a, g, d), y) : (n.bulkAddAnnotation(a, g, d), []);
|
|
1660
|
+
}, h = (v, g = N.LOCAL) => {
|
|
1670
1661
|
const d = v.map((y) => rt(y, t)), a = d.filter((y) => !$(y.target.selector));
|
|
1671
1662
|
return a.length > 0 && console.warn("Could not revive all targets for these annotations:", a), d.forEach((y) => {
|
|
1672
|
-
n.getAnnotation(y.id) ? n.updateAnnotation(y,
|
|
1663
|
+
n.getAnnotation(y.id) ? n.updateAnnotation(y, g) : n.addAnnotation(y, g);
|
|
1673
1664
|
}), a;
|
|
1674
|
-
}, m = (v,
|
|
1665
|
+
}, m = (v, g = N.LOCAL) => {
|
|
1675
1666
|
const d = it(v, t);
|
|
1676
|
-
n.updateTarget(d,
|
|
1677
|
-
}, l = (v,
|
|
1667
|
+
n.updateTarget(d, g);
|
|
1668
|
+
}, l = (v, g = N.LOCAL) => {
|
|
1678
1669
|
const d = v.map((a) => it(a, t));
|
|
1679
|
-
n.bulkUpdateTargets(d,
|
|
1680
|
-
},
|
|
1681
|
-
const a = o.getAt(v,
|
|
1670
|
+
n.bulkUpdateTargets(d, g);
|
|
1671
|
+
}, p = (v, g, d) => {
|
|
1672
|
+
const a = o.getAt(v, g, !!d).map((S) => n.getAnnotation(S)), y = d ? a.filter(d) : a;
|
|
1682
1673
|
return y.length > 0 ? y[0] : void 0;
|
|
1683
|
-
}, f = (v,
|
|
1674
|
+
}, f = (v, g, d, a = 5) => {
|
|
1684
1675
|
const y = o.getAnnotationRects(v);
|
|
1685
1676
|
if (y.length !== 0) {
|
|
1686
|
-
if (
|
|
1687
|
-
const S = y.find(({ top: L, right: E, bottom: T, left: B }) =>
|
|
1677
|
+
if (g && d) {
|
|
1678
|
+
const S = y.find(({ top: L, right: E, bottom: T, left: B }) => g >= B - a && g <= E + a && d >= L - a && d <= T + a);
|
|
1688
1679
|
if (S) return S;
|
|
1689
1680
|
}
|
|
1690
1681
|
return o.getAnnotationBounds(v);
|
|
1691
1682
|
}
|
|
1692
1683
|
}, w = () => o.recalculate();
|
|
1693
1684
|
return n.observe(({ changes: v }) => {
|
|
1694
|
-
const
|
|
1695
|
-
(
|
|
1685
|
+
const g = (v.deleted || []).filter((y) => $(y.target.selector)), d = (v.created || []).filter((y) => $(y.target.selector)), a = (v.updated || []).filter((y) => $(y.newValue.target.selector));
|
|
1686
|
+
(g == null ? void 0 : g.length) > 0 && g.forEach((y) => o.remove(y.target)), d.length > 0 && o.set(d.map((y) => y.target), !1), (a == null ? void 0 : a.length) > 0 && a.forEach(({ newValue: y }) => o.update(y.target));
|
|
1696
1687
|
}), {
|
|
1697
1688
|
store: {
|
|
1698
1689
|
...n,
|
|
@@ -1701,7 +1692,7 @@ const Cn = (t, e) => {
|
|
|
1701
1692
|
bulkUpdateTargets: l,
|
|
1702
1693
|
bulkUpsertAnnotations: h,
|
|
1703
1694
|
getAnnotationBounds: f,
|
|
1704
|
-
getAt:
|
|
1695
|
+
getAt: p,
|
|
1705
1696
|
getIntersecting: o.getIntersecting,
|
|
1706
1697
|
recalculatePositions: w,
|
|
1707
1698
|
updateTarget: m
|
|
@@ -1717,26 +1708,26 @@ const Cn = (t, e) => {
|
|
|
1717
1708
|
return e.scale(2, 2), e.translate(0.5, 0.5), t;
|
|
1718
1709
|
}, Tn = (t, e, n = {}) => {
|
|
1719
1710
|
const o = Bn(), i = o.getContext("2d");
|
|
1720
|
-
|
|
1721
|
-
const r = /* @__PURE__ */ new Map(), s = (l) => Array.from(r.entries()).filter(([
|
|
1722
|
-
return e.on("selectionChange", (l,
|
|
1723
|
-
s(l).forEach((w) => r.delete(w)),
|
|
1711
|
+
document.body.appendChild(o);
|
|
1712
|
+
const r = /* @__PURE__ */ new Map(), s = (l) => Array.from(r.entries()).filter(([p, f]) => f.presenceKey === l.presenceKey).map(([p, f]) => p);
|
|
1713
|
+
return e.on("selectionChange", (l, p) => {
|
|
1714
|
+
s(l).forEach((w) => r.delete(w)), p && p.forEach((w) => r.set(w, l));
|
|
1724
1715
|
}), {
|
|
1725
1716
|
clear: () => {
|
|
1726
|
-
const { width: l, height:
|
|
1727
|
-
i.clearRect(-0.5, -0.5, l + 1,
|
|
1717
|
+
const { width: l, height: p } = o;
|
|
1718
|
+
i.clearRect(-0.5, -0.5, l + 1, p + 1);
|
|
1728
1719
|
},
|
|
1729
1720
|
destroy: () => {
|
|
1730
1721
|
o.remove();
|
|
1731
1722
|
},
|
|
1732
|
-
paint: (l,
|
|
1723
|
+
paint: (l, p, f) => {
|
|
1733
1724
|
n.font && (i.font = n.font);
|
|
1734
1725
|
const w = r.get(l.annotation.id);
|
|
1735
1726
|
if (w) {
|
|
1736
|
-
const { height: v } = l.rects[0],
|
|
1737
|
-
i.fillStyle = w.appearance.color, i.fillRect(
|
|
1727
|
+
const { height: v } = l.rects[0], g = l.rects[0].x + p.left, d = l.rects[0].y + p.top;
|
|
1728
|
+
i.fillStyle = w.appearance.color, i.fillRect(g - 2, d - 2.5, 2, v + 5);
|
|
1738
1729
|
const a = i.measureText(w.appearance.label), y = a.width + 6, S = a.actualBoundingBoxAscent + a.actualBoundingBoxDescent + 8, L = a.fontBoundingBoxAscent ? 8 : 6.5;
|
|
1739
|
-
return i.fillRect(
|
|
1730
|
+
return i.fillRect(g - 2, d - 2.5 - S, y, S), i.fillStyle = "#fff", i.fillText(w.appearance.label, g + 1, d - L), {
|
|
1740
1731
|
fill: w.appearance.color,
|
|
1741
1732
|
fillOpacity: f ? 0.45 : 0.18
|
|
1742
1733
|
};
|
|
@@ -1755,7 +1746,7 @@ const Cn = (t, e) => {
|
|
|
1755
1746
|
return e !== "visible" && e !== "hidden" && t.scrollHeight > t.clientHeight ? t : Wt(t.parentElement);
|
|
1756
1747
|
}, Rn = (t, e) => (n) => {
|
|
1757
1748
|
const o = typeof n == "string" ? n : n.id, i = (s) => {
|
|
1758
|
-
const c = r.getBoundingClientRect(), u = r.clientHeight, h = r.clientWidth, m = s.selector[0].range.getBoundingClientRect(), { width: l, height:
|
|
1749
|
+
const c = r.getBoundingClientRect(), u = r.clientHeight, h = r.clientWidth, m = s.selector[0].range.getBoundingClientRect(), { width: l, height: p } = e.getAnnotationBounds(o), f = m.top - c.top, w = m.left - c.left, v = r.parentElement ? r.scrollTop : 0, g = r.parentElement ? r.scrollLeft : 0, d = f + v - (u - p) / 2, a = w + g - (h - l) / 2;
|
|
1759
1750
|
r.scroll({ top: d, left: a, behavior: "smooth" });
|
|
1760
1751
|
}, r = Wt(t);
|
|
1761
1752
|
if (r) {
|
|
@@ -1778,7 +1769,7 @@ const Cn = (t, e) => {
|
|
|
1778
1769
|
const r = (a) => i = a;
|
|
1779
1770
|
let s;
|
|
1780
1771
|
const c = (a) => s = a, { store: u, selection: h } = e;
|
|
1781
|
-
let m, l = !1,
|
|
1772
|
+
let m, l = !1, p;
|
|
1782
1773
|
const f = (a) => {
|
|
1783
1774
|
var S;
|
|
1784
1775
|
if (!l) return;
|
|
@@ -1797,7 +1788,7 @@ const Cn = (t, e) => {
|
|
|
1797
1788
|
m = void 0;
|
|
1798
1789
|
return;
|
|
1799
1790
|
}
|
|
1800
|
-
if (a.timeStamp - ((
|
|
1791
|
+
if (a.timeStamp - ((p == null ? void 0 : p.timeStamp) || a.timeStamp) < 1e3 && !m && f(p), y.isCollapsed || !l || !m) return;
|
|
1801
1792
|
const L = y.getRangeAt(0);
|
|
1802
1793
|
if (re(L)) return;
|
|
1803
1794
|
const E = Zt(L.cloneRange());
|
|
@@ -1812,15 +1803,15 @@ const Cn = (t, e) => {
|
|
|
1812
1803
|
id: m.annotation,
|
|
1813
1804
|
bodies: [],
|
|
1814
1805
|
target: m
|
|
1815
|
-
}, N.LOCAL), h.clickSelect(m.annotation,
|
|
1806
|
+
}, N.LOCAL), h.clickSelect(m.annotation, p)));
|
|
1816
1807
|
});
|
|
1817
1808
|
n && document.addEventListener("selectionchange", w);
|
|
1818
1809
|
const v = (a) => {
|
|
1819
1810
|
const { target: y, timeStamp: S, offsetX: L, offsetY: E, type: T } = a;
|
|
1820
|
-
|
|
1811
|
+
p = { ...a, target: y, timeStamp: S, offsetX: L, offsetY: E, type: T }, l = a.button === 0;
|
|
1821
1812
|
};
|
|
1822
1813
|
t.addEventListener("pointerdown", v);
|
|
1823
|
-
const
|
|
1814
|
+
const g = (a) => {
|
|
1824
1815
|
var E;
|
|
1825
1816
|
if (!!((E = a.target.parentElement) != null && E.closest(D)) || !l)
|
|
1826
1817
|
return;
|
|
@@ -1830,12 +1821,12 @@ const Cn = (t, e) => {
|
|
|
1830
1821
|
const { selected: b } = h;
|
|
1831
1822
|
(b.length !== 1 || b[0].id !== M.id) && h.clickSelect(M.id, a);
|
|
1832
1823
|
} else h.isEmpty() || h.clear();
|
|
1833
|
-
}, L = a.timeStamp -
|
|
1824
|
+
}, L = a.timeStamp - p.timeStamp;
|
|
1834
1825
|
document.getSelection().isCollapsed && L < 300 ? (m = void 0, S()) : m && h.clickSelect(m.annotation, a);
|
|
1835
1826
|
};
|
|
1836
|
-
return document.addEventListener("pointerup",
|
|
1827
|
+
return document.addEventListener("pointerup", g), {
|
|
1837
1828
|
destroy: () => {
|
|
1838
|
-
t.removeEventListener("selectstart", f), document.removeEventListener("selectionchange", w), t.removeEventListener("pointerdown", v), document.removeEventListener("pointerup",
|
|
1829
|
+
t.removeEventListener("selectstart", f), document.removeEventListener("selectionchange", w), t.removeEventListener("pointerdown", v), document.removeEventListener("pointerup", g);
|
|
1839
1830
|
},
|
|
1840
1831
|
setFilter: c,
|
|
1841
1832
|
setUser: r
|
|
@@ -1847,16 +1838,16 @@ const Cn = (t, e) => {
|
|
|
1847
1838
|
user: ln()
|
|
1848
1839
|
}), o = Ln(t, n.pointerAction), { selection: i, viewport: r } = o, s = o.store, c = Je(s), u = tn(o, c, n.adapter);
|
|
1849
1840
|
let h = n.user;
|
|
1850
|
-
const m = n.renderer === "CSS_HIGHLIGHTS" ? CSS.highlights ? "CSS_HIGHLIGHTS" : kt : n.renderer || kt, l = m === "SPANS" ? Te(t, o, r) : m === "CSS_HIGHLIGHTS" ? Ce(t, o, r) : m === "CANVAS" ?
|
|
1841
|
+
const m = n.renderer === "CSS_HIGHLIGHTS" ? CSS.highlights ? "CSS_HIGHLIGHTS" : kt : n.renderer || kt, l = m === "SPANS" ? Te(t, o, r) : m === "CSS_HIGHLIGHTS" ? Ce(t, o, r) : m === "CANVAS" ? ge(t, o, r) : void 0;
|
|
1851
1842
|
if (!l)
|
|
1852
1843
|
throw `Unknown renderer implementation: ${m}`;
|
|
1853
1844
|
console.debug(`Using ${m} renderer`), n.style && l.setStyle(n.style);
|
|
1854
|
-
const
|
|
1855
|
-
|
|
1845
|
+
const p = Mn(t, o, n.annotationEnabled, n.offsetReferenceSelector);
|
|
1846
|
+
p.setUser(h);
|
|
1856
1847
|
const f = nn(o, c, n.adapter), w = () => h, v = (E) => {
|
|
1857
|
-
l.setFilter(E),
|
|
1858
|
-
},
|
|
1859
|
-
h = E,
|
|
1848
|
+
l.setFilter(E), p.setFilter(E);
|
|
1849
|
+
}, g = (E) => l.setStyle(E), d = (E) => {
|
|
1850
|
+
h = E, p.setUser(E);
|
|
1860
1851
|
}, a = (E) => {
|
|
1861
1852
|
E && (l.setPainter(Tn(t, E, n.presence)), E.on("selectionChange", () => l.redraw()));
|
|
1862
1853
|
}, y = (E) => {
|
|
@@ -1865,12 +1856,12 @@ const Cn = (t, e) => {
|
|
|
1865
1856
|
return {
|
|
1866
1857
|
...f,
|
|
1867
1858
|
destroy: () => {
|
|
1868
|
-
l.destroy(),
|
|
1859
|
+
l.destroy(), p.destroy(), c.destroy();
|
|
1869
1860
|
},
|
|
1870
1861
|
element: t,
|
|
1871
1862
|
getUser: w,
|
|
1872
1863
|
setFilter: v,
|
|
1873
|
-
setStyle:
|
|
1864
|
+
setStyle: g,
|
|
1874
1865
|
redraw: l.redraw.bind(l),
|
|
1875
1866
|
setUser: d,
|
|
1876
1867
|
setSelected: y,
|
|
@@ -1892,7 +1883,7 @@ export {
|
|
|
1892
1883
|
Un as W3CTextFormat,
|
|
1893
1884
|
te as cancelSingleClickEvents,
|
|
1894
1885
|
Vn as createBody,
|
|
1895
|
-
|
|
1886
|
+
ge as createCanvasRenderer,
|
|
1896
1887
|
Ce as createHighlightsRenderer,
|
|
1897
1888
|
Se as createRenderer,
|
|
1898
1889
|
Te as createSpansRenderer,
|
|
@@ -1903,12 +1894,12 @@ export {
|
|
|
1903
1894
|
On as getAnnotatableFragment,
|
|
1904
1895
|
In as getClientRectsPonyfill,
|
|
1905
1896
|
oe as getQuoteContext,
|
|
1906
|
-
|
|
1897
|
+
gt as getRangeAnnotatableContents,
|
|
1907
1898
|
$ as isRevived,
|
|
1908
1899
|
re as isWhitespaceOrEmpty,
|
|
1909
1900
|
ce as mergeClientRects,
|
|
1910
1901
|
Kt as paint,
|
|
1911
|
-
|
|
1902
|
+
gn as parseW3CTextAnnotation,
|
|
1912
1903
|
le as rangeToSelector,
|
|
1913
1904
|
rt as reviveAnnotation,
|
|
1914
1905
|
Dt as reviveSelector,
|