@prose-reader/enhancer-annotations 1.295.0 → 1.297.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.
- package/dist/index.js +27 -12
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +26 -11
- package/dist/index.umd.cjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DestroyableClass, ReactiveEntity, isShallowEqual
|
|
1
|
+
import { setStylePropertyIfChanged, setPropertyIfChanged, DestroyableClass, ReactiveEntity, isShallowEqual } from '@prose-reader/core';
|
|
2
2
|
import { fromEvent, map, share, shareReplay, tap, merge, takeUntil, first, withLatestFrom, switchMap, distinctUntilChanged, of, forkJoin, defaultIfEmpty, BehaviorSubject, NEVER, debounceTime, combineLatest } from 'rxjs';
|
|
3
3
|
|
|
4
4
|
const createElementForRange = (range, container, color) => {
|
|
@@ -38,7 +38,7 @@ const createElementForRange = (range, container, color) => {
|
|
|
38
38
|
});
|
|
39
39
|
};
|
|
40
40
|
const copyPositionStyle = (source, target) => {
|
|
41
|
-
target.style
|
|
41
|
+
setPropertyIfChanged(target.style, `cssText`, source.style.cssText);
|
|
42
42
|
};
|
|
43
43
|
const createAnnotationLayer = (container, layer) => {
|
|
44
44
|
const annotationLayer = container.ownerDocument.createElement("div");
|
|
@@ -49,11 +49,11 @@ const createAnnotationLayer = (container, layer) => {
|
|
|
49
49
|
const layoutAnnotationLayer = (layer, annotationLayer) => {
|
|
50
50
|
copyPositionStyle(layer, annotationLayer);
|
|
51
51
|
if (layer.style.position === "") {
|
|
52
|
-
annotationLayer.style
|
|
53
|
-
annotationLayer.style
|
|
52
|
+
setStylePropertyIfChanged(annotationLayer.style, `position`, `absolute`);
|
|
53
|
+
setStylePropertyIfChanged(annotationLayer.style, `top`, `0`);
|
|
54
54
|
}
|
|
55
|
-
annotationLayer.style
|
|
56
|
-
annotationLayer.style
|
|
55
|
+
setStylePropertyIfChanged(annotationLayer.style, `opacity`, `1`);
|
|
56
|
+
setStylePropertyIfChanged(annotationLayer.style, `pointer-events`, `none`);
|
|
57
57
|
};
|
|
58
58
|
|
|
59
59
|
class SpineItemHighlight extends DestroyableClass {
|
|
@@ -95,7 +95,11 @@ class SpineItemHighlight extends DestroyableClass {
|
|
|
95
95
|
updateStateOnSelection(isSelected) {
|
|
96
96
|
Array.from(this.container.children).forEach((child) => {
|
|
97
97
|
if (child instanceof HTMLElement) {
|
|
98
|
-
|
|
98
|
+
setStylePropertyIfChanged(
|
|
99
|
+
child.style,
|
|
100
|
+
`border`,
|
|
101
|
+
isSelected ? "3px dashed red" : "3px dashed transparent"
|
|
102
|
+
);
|
|
99
103
|
}
|
|
100
104
|
});
|
|
101
105
|
}
|
|
@@ -104,7 +108,7 @@ class SpineItemHighlight extends DestroyableClass {
|
|
|
104
108
|
first(),
|
|
105
109
|
withLatestFrom(this.isSelected),
|
|
106
110
|
map(([resolvedCfi, isSelected]) => {
|
|
107
|
-
if (!resolvedCfi
|
|
111
|
+
if (!resolvedCfi?.isCfiRange) return void 0;
|
|
108
112
|
const range = resolvedCfi.range;
|
|
109
113
|
this.container.innerHTML = "";
|
|
110
114
|
if (!range) {
|
|
@@ -239,9 +243,12 @@ class ReaderHighlights extends DestroyableClass {
|
|
|
239
243
|
this.reader = reader;
|
|
240
244
|
this.highlights = highlights;
|
|
241
245
|
this.selectedHighlight = selectedHighlight;
|
|
246
|
+
const cleanupByItemId = /* @__PURE__ */ new Map();
|
|
242
247
|
this.reader.hookManager.register(
|
|
243
248
|
"item.onDocumentLoad",
|
|
244
|
-
({ itemId
|
|
249
|
+
async ({ itemId }) => {
|
|
250
|
+
cleanupByItemId.get(itemId)?.();
|
|
251
|
+
cleanupByItemId.delete(itemId);
|
|
245
252
|
const spineItem = reader.spineItemsManager.get(itemId);
|
|
246
253
|
if (!spineItem) return;
|
|
247
254
|
const spineItemHighlights$ = this.highlights.pipe(
|
|
@@ -261,12 +268,20 @@ class ReaderHighlights extends DestroyableClass {
|
|
|
261
268
|
...this.spineItemHighlights.getValue(),
|
|
262
269
|
spineItemHighlights
|
|
263
270
|
]);
|
|
264
|
-
|
|
271
|
+
const cleanup = () => {
|
|
265
272
|
this.spineItemHighlights.next(
|
|
266
273
|
this.spineItemHighlights.getValue().filter((layer) => layer !== spineItemHighlights)
|
|
267
274
|
);
|
|
268
275
|
spineItemHighlights.destroy();
|
|
269
|
-
}
|
|
276
|
+
};
|
|
277
|
+
cleanupByItemId.set(itemId, cleanup);
|
|
278
|
+
}
|
|
279
|
+
);
|
|
280
|
+
this.reader.hookManager.register(
|
|
281
|
+
"item.onDocumentUnload",
|
|
282
|
+
async ({ itemId }) => {
|
|
283
|
+
cleanupByItemId.get(itemId)?.();
|
|
284
|
+
cleanupByItemId.delete(itemId);
|
|
270
285
|
}
|
|
271
286
|
);
|
|
272
287
|
this.tap$ = this.spineItemHighlights.pipe(
|
|
@@ -486,7 +501,7 @@ const annotationsEnhancer = (next) => (options) => {
|
|
|
486
501
|
const cfiWithRangeOrFirstNodeOrRoot = range ? reader.cfi.generateCfiFromRange(range, spineItem.item) : pageEntry?.firstVisibleNode ? reader.cfi.generateCfiForSpineItemPage({
|
|
487
502
|
spineItem: spineItem.item,
|
|
488
503
|
pageNode: pageEntry.firstVisibleNode
|
|
489
|
-
}) : generateRootCfi(spineItem.item);
|
|
504
|
+
}) : reader.cfi.generateRootCfi(spineItem.item);
|
|
490
505
|
const highlight = {
|
|
491
506
|
cfi: cfiWithRangeOrFirstNodeOrRoot,
|
|
492
507
|
itemIndex: spineItem.index,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/annotations/utils.ts","../src/annotations/SpineItemHighlight.ts","../src/annotations/SpineItemHighlights.ts","../src/annotations/ReaderHighlights.ts","../../shared/dist/index.js","../src/report.ts","../src/Settings.ts","../src/annotationsEnhancer.ts"],"sourcesContent":["export const createElementForRange = (\n range: Range,\n container: HTMLElement,\n color: string,\n) => {\n // Get all rects and group them by line (based on vertical position)\n const rects = Array.from(range.getClientRects())\n const lineGroups = new Map<number, DOMRect[]>()\n\n rects.forEach((rect) => {\n const lineY = Math.round(rect.top) // Round to handle minor pixel differences\n if (!lineGroups.has(lineY)) {\n lineGroups.set(lineY, [])\n }\n lineGroups.get(lineY)?.push(rect)\n })\n\n // Create one highlight element per line\n return Array.from(lineGroups.values()).map((lineRects) => {\n // Find the leftmost and rightmost points\n const left = Math.min(...lineRects.map((r) => r.left))\n const right = Math.max(...lineRects.map((r) => r.right))\n const top = lineRects[0]?.top\n const height = lineRects[0]?.height\n\n const rectEltContainer = container.ownerDocument.createElement(\"div\")\n const rectElt = container.ownerDocument.createElement(\"div\")\n rectEltContainer.style.cssText = `\n position: absolute;\n width: ${right - left}px;\n height: ${height}px;\n top: ${top}px;\n left: ${left}px;\n box-sizing: border-box;\n border: 3px dashed transparent;\n `\n rectElt.style.cssText = `\n height: 100%;\n width: 100%;\n opacity: 40%;\n background-color: ${color}\n `\n\n rectEltContainer.appendChild(rectElt)\n\n return rectEltContainer\n })\n}\n\nexport const copyPositionStyle = (source: HTMLElement, target: HTMLElement) => {\n target.style.cssText = source.style.cssText\n}\n\nexport const createAnnotationLayer = (\n container: HTMLElement,\n layer: HTMLElement,\n) => {\n const annotationLayer = container.ownerDocument.createElement(\"div\")\n\n layoutAnnotationLayer(layer, annotationLayer)\n\n container.appendChild(annotationLayer)\n\n return annotationLayer\n}\n\nexport const layoutAnnotationLayer = (\n layer: HTMLElement,\n annotationLayer: HTMLElement,\n) => {\n copyPositionStyle(layer, annotationLayer)\n\n if (layer.style.position === \"\") {\n annotationLayer.style.position = \"absolute\"\n annotationLayer.style.top = \"0\"\n }\n\n // annotationLayer.style.backgroundColor = \"red\"\n annotationLayer.style.opacity = \"1\"\n annotationLayer.style.pointerEvents = \"none\"\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n first,\n fromEvent,\n map,\n merge,\n type Observable,\n share,\n shareReplay,\n takeUntil,\n tap,\n withLatestFrom,\n} from \"rxjs\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createElementForRange } from \"./utils\"\n\nexport class SpineItemHighlight extends DestroyableClass {\n private container: HTMLElement\n public readonly tap$: Observable<{\n event: Event\n highlight: RuntimeAnnotation\n }>\n private resolvedCfi$: Observable<ReturnType<Reader[\"cfi\"][\"resolveCfi\"]>>\n\n constructor(\n private spineItem: SpineItem,\n private containerElement: HTMLElement,\n private reader: Reader,\n public highlight: RuntimeAnnotation,\n private isSelected: Observable<boolean>,\n ) {\n super()\n\n void this.spineItem\n void this.reader\n\n this.container = this.containerElement.ownerDocument.createElement(\"div\")\n this.container.dataset.highlightContainer = this.highlight.id\n this.containerElement.appendChild(this.container)\n\n this.tap$ = fromEvent(this.container, \"click\").pipe(\n map((event) => ({ event, highlight: this.highlight })),\n share(),\n )\n\n this.resolvedCfi$ = this.spineItem.watch(\"isLoaded\").pipe(\n map(() => this.reader.cfi.resolveCfi({ cfi: this.highlight.cfi })),\n shareReplay({ refCount: true, bufferSize: 1 }),\n )\n\n const updateStateOnSelection$ = this.isSelected.pipe(\n tap((isSelected) => {\n this.updateStateOnSelection(isSelected)\n }),\n )\n\n merge(this.resolvedCfi$, updateStateOnSelection$)\n .pipe(takeUntil(this.destroy$))\n .subscribe()\n }\n\n public updateStateOnSelection(isSelected: boolean) {\n Array.from(this.container.children).forEach((child) => {\n if (child instanceof HTMLElement) {\n child.style.border = isSelected\n ? \"3px dashed red\"\n : \"3px dashed transparent\"\n }\n })\n }\n\n public render() {\n return this.resolvedCfi$.pipe(\n first(),\n withLatestFrom(this.isSelected),\n map(([resolvedCfi, isSelected]) => {\n if (!resolvedCfi || !resolvedCfi.isCfiRange) return undefined\n\n const range = resolvedCfi.range\n\n this.container.innerHTML = \"\"\n\n /**\n * The nodes can be undefined if the cfi is not found.\n * This can happens if the item is not loaded (legit) or if the cfi\n * are just invalid.\n */\n if (!range) {\n return\n }\n\n const rectElements = createElementForRange(\n range,\n this.container,\n this.highlight.highlightColor ?? \"yellow\",\n )\n\n rectElements.forEach((elt) => {\n elt.style.pointerEvents = \"initial\"\n elt.style.cursor = \"pointer\"\n elt.dataset.highlightRect = this.highlight.id\n\n this.container.appendChild(elt)\n })\n\n const firstElement = rectElements[0]\n\n if (firstElement && this.highlight.notes) {\n const noteIcon = document.createElement(\"span\")\n noteIcon.textContent = \"📝\"\n noteIcon.style.position = \"absolute\"\n noteIcon.style.top = \"0\"\n noteIcon.style.left = \"0\"\n noteIcon.style.transform = \"translate(-0%, -80%)\"\n noteIcon.style.fontSize = \"18px\"\n noteIcon.style.opacity = \"50%\"\n firstElement.appendChild(noteIcon)\n }\n\n this.updateStateOnSelection(isSelected)\n\n return null\n }),\n )\n }\n\n isWithinTarget(target: Node) {\n return this.container.contains(target)\n }\n\n public destroy() {\n super.destroy()\n\n this.container.remove()\n }\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n defaultIfEmpty,\n distinctUntilChanged,\n forkJoin,\n map,\n merge,\n type Observable,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n} from \"rxjs\"\nimport { SpineItemHighlight } from \"./SpineItemHighlight\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createAnnotationLayer, layoutAnnotationLayer } from \"./utils\"\n\nexport class SpineItemHighlights extends DestroyableClass {\n private layer: HTMLElement\n private highlights: SpineItemHighlight[] = []\n\n public readonly tap$: SpineItemHighlight[\"tap$\"]\n\n constructor(\n private annotations$: Observable<RuntimeAnnotation[]>,\n private spineItem: SpineItem,\n private reader: Reader,\n private selectedHighlight: Observable<string | undefined>,\n ) {\n super()\n\n const firstLayerElement =\n spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n this.layer = createAnnotationLayer(\n this.spineItem.containerElement,\n firstLayerElement,\n )\n\n const itemHighlights$ = this.annotations$.pipe(\n switchMap((annotations) => {\n const newAnnotations = annotations.filter(\n (annotation) =>\n !this.highlights.some(\n (highlight) => highlight.highlight.id === annotation.id,\n ),\n )\n const oldAnnotations = this.highlights.filter(\n (highlight) =>\n highlight.highlight.itemIndex !== this.spineItem.item.index,\n )\n\n this.highlights.forEach((highlight, index) => {\n const existingAnnotation = annotations.find(\n (annotation) => annotation.id === highlight.highlight.id,\n )\n\n if (oldAnnotations.includes(highlight)) {\n highlight.destroy()\n this.highlights = this.highlights.splice(index, 1)\n }\n\n if (existingAnnotation) {\n highlight.highlight = existingAnnotation\n }\n })\n\n newAnnotations.forEach((annotation) => {\n if (annotation.itemIndex !== this.spineItem.item.index) return\n\n const isSelected$ = this.selectedHighlight.pipe(\n map((id) => id === annotation.id),\n distinctUntilChanged(),\n )\n\n const spineItemHighlight = new SpineItemHighlight(\n this.spineItem,\n this.layer,\n this.reader,\n annotation,\n isSelected$,\n )\n\n this.highlights.push(spineItemHighlight)\n })\n\n return of(this.highlights)\n }),\n shareReplay(1),\n takeUntil(this.destroy$),\n )\n\n this.tap$ = itemHighlights$.pipe(\n switchMap((highlights) =>\n merge(...highlights.map((highlight) => highlight.tap$)),\n ),\n )\n\n annotations$.subscribe()\n }\n\n layout() {\n const firstLayerElement =\n this.spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n layoutAnnotationLayer(firstLayerElement, this.layer)\n\n return forkJoin(\n this.highlights.map((highlight) => highlight.render()),\n ).pipe(defaultIfEmpty(null))\n }\n\n getHighlightsForTarget(target: EventTarget) {\n return this.highlights.filter(\n (highlight) => target instanceof Node && highlight.isWithinTarget(target),\n )\n }\n\n destroy() {\n super.destroy()\n\n this.layer.remove()\n }\n}\n","import { DestroyableClass, type Reader } from \"@prose-reader/core\"\nimport {\n BehaviorSubject,\n defaultIfEmpty,\n forkJoin,\n map,\n merge,\n type Observable,\n switchMap,\n} from \"rxjs\"\nimport { SpineItemHighlights } from \"./SpineItemHighlights\"\nimport type { RuntimeAnnotation } from \"./types\"\n\nexport class ReaderHighlights extends DestroyableClass {\n private spineItemHighlights = new BehaviorSubject<SpineItemHighlights[]>([])\n\n public tap$: SpineItemHighlights[\"tap$\"]\n\n constructor(\n private reader: Reader,\n private highlights: Observable<RuntimeAnnotation[]>,\n private selectedHighlight: Observable<string | undefined>,\n ) {\n super()\n\n this.reader.hookManager.register(\n \"item.onDocumentLoad\",\n ({ itemId, destroy }) => {\n const spineItem = reader.spineItemsManager.get(itemId)\n\n if (!spineItem) return\n\n const spineItemHighlights$ = this.highlights.pipe(\n map((highlights) =>\n highlights.filter(\n (highlight) => highlight.itemIndex === spineItem.item.index,\n ),\n ),\n )\n\n const spineItemHighlights = new SpineItemHighlights(\n spineItemHighlights$,\n spineItem,\n reader,\n this.selectedHighlight,\n )\n\n this.spineItemHighlights.next([\n ...this.spineItemHighlights.getValue(),\n spineItemHighlights,\n ])\n\n destroy(() => {\n this.spineItemHighlights.next(\n this.spineItemHighlights\n .getValue()\n .filter((layer) => layer !== spineItemHighlights),\n )\n\n spineItemHighlights.destroy()\n })\n },\n )\n\n this.tap$ = this.spineItemHighlights.pipe(\n switchMap((layers) => merge(...layers.map((layer) => layer.tap$))),\n )\n }\n\n getHighlightsForTarget = (target: EventTarget) => {\n return this.spineItemHighlights\n .getValue()\n .flatMap((layer) => layer.getHighlightsForTarget(target))\n .map((annotation) => annotation.highlight)\n }\n\n isTargetWithinHighlight = (target: EventTarget) => {\n return !!this.getHighlightsForTarget(target).length\n }\n\n public layout() {\n return forkJoin(\n this.spineItemHighlights.value.map((item) => item.layout()),\n ).pipe(defaultIfEmpty(null))\n }\n}\n","const y = (e, n) => e === n ? !0 : e.length !== n.length ? !1 : e.every((t, o) => t === n[o]), f = (e) => e.split(/[#?]/)[0]?.split(\".\").pop()?.trim() || \"\";\nfunction d(e) {\n const n = [];\n if (e.length === 0)\n return \"\";\n if (typeof e[0] != \"string\")\n throw new TypeError(`Url must be a string. Received ${e[0]}`);\n e[0].match(/^[^/:]+:\\/*$/) && e.length > 1 && (e[0] = e.shift() + e[0]), e[0].match(/^file:\\/\\/\\//) ? e[0] = e[0].replace(/^([^/:]+):\\/*/, \"$1:///\") : e[0] = e[0].replace(/^([^/:]+):\\/*/, \"$1://\");\n for (let r = 0; r < e.length; r++) {\n let l = e[r];\n if (typeof l != \"string\")\n throw new TypeError(`Url must be a string. Received ${l}`);\n l !== \"\" && (r > 0 && (l = l.replace(/^[/]+/, \"\")), r < e.length - 1 ? l = l.replace(/[/]+$/, \"\") : l = l.replace(/[/]+$/, \"/\"), n.push(l));\n }\n let t = n.join(\"/\");\n t = t.replace(/\\/(\\?|&|#[^!])/g, \"$1\");\n const o = t.split(\"?\");\n return t = o.shift() + (o.length > 0 ? \"?\" : \"\") + o.join(\"&\"), t;\n}\nfunction R(...e) {\n const n = Array.from(Array.isArray(e[0]) ? e[0] : e);\n return d(n);\n}\nfunction $(e) {\n const n = e.split(\"/\");\n return n.pop(), n.join(\"/\");\n}\nconst h = (e) => {\n switch (f(e)) {\n case \"png\":\n return \"image/png\";\n case \"jpg\":\n return \"image/jpg\";\n case \"jpeg\":\n return \"image/jpeg\";\n case \"txt\":\n return \"text/plain\";\n case \"webp\":\n return \"image/webp\";\n case \"xhtml\":\n return \"application/xhtml+xml\";\n case \"mp3\":\n return \"audio/mpeg\";\n case \"m4a\":\n case \"m4b\":\n return \"audio/mp4\";\n case \"aac\":\n return \"audio/aac\";\n case \"ogg\":\n case \"oga\":\n return \"audio/ogg\";\n case \"wav\":\n return \"audio/wav\";\n case \"flac\":\n return \"audio/flac\";\n case \"opus\":\n return \"audio/opus\";\n }\n}, x = ({\n mimeType: e,\n uri: n\n}) => (e ?? h(n ?? \"\"))?.startsWith(\"application/xhtml+xml\"), _ = (e) => e.startsWith(\"image/\") || e.startsWith(\"audio/\") || e.startsWith(\"video/\"), C = (e) => {\n if (!e.length) return;\n const n = e.indexOf(\";\");\n return n >= 0 ? e.substring(0, n) : e;\n}, v = (e, n, t) => {\n if (Object.is(e, n))\n return !0;\n if (typeof e != \"object\" || e === null || typeof n != \"object\" || n === null)\n return !1;\n const o = Object.keys(e), r = Object.keys(n);\n if (o.length !== r.length)\n return !1;\n const l = t?.customEqual ?? Object.is, c = e, s = n;\n for (const i of o)\n if (!Object.hasOwn(s, i) || !l(c[i], s[i]))\n return !1;\n return !0;\n}, F = (e, n) => e.reduce(\n (t, o) => {\n const r = n(o);\n return t[r] || (t[r] = []), t[r].push(o), t;\n },\n {}\n);\nfunction T(e, n) {\n const t = { ...e };\n for (const o in n)\n if (Object.hasOwn(n, o)) {\n const r = n[o];\n (r !== void 0 || !(o in e)) && (t[o] = r);\n }\n return t;\n}\nconst m = () => {\n if (!(typeof window > \"u\"))\n return window;\n};\nfunction b() {\n const e = m()?.__PROSE_READER_DEBUG;\n return e === !0 || e === \"true\";\n}\nconst E = (e, n) => typeof e == \"boolean\" ? {\n enabled: e,\n options: n\n} : {\n enabled: e?.enabled,\n options: e ?? n\n}, w = (e) => e.at(-1)?.color, u = (e) => {\n if (!e.length)\n return;\n if (!e.some((o) => o.color))\n return [e.map((o) => o.label).join(\" \")];\n let n = \"\";\n const t = [];\n for (const o of e)\n n += `%c${n ? ` ${o.label}` : o.label}`, t.push(\n o.color ? `color: ${o.color}` : \"\"\n );\n return [n, ...t];\n}, p = (e = [], n = b()) => {\n let t = n;\n const o = {\n enable: (c) => {\n l(c);\n },\n namespace: (c, s, i) => {\n const a = E(\n s,\n i\n ), g = a.options?.color ?? w(e);\n return p(\n [\n ...e,\n {\n label: `[${c}]`,\n color: g\n }\n ],\n a.enabled ?? t\n );\n },\n isEnabled: () => t,\n debug: () => {\n },\n info: () => {\n },\n log: () => {\n },\n groupCollapsed: () => {\n },\n groupEnd: () => {\n },\n getGroupArgs: (c) => {\n const s = u(e);\n if (!s)\n return [c];\n const [i, ...a] = s;\n return [`${i} ${c}`, ...a];\n },\n warn: () => {\n },\n error: () => {\n }\n }, r = (c) => {\n if (!c) {\n o.debug = () => {\n }, o.info = () => {\n }, o.log = () => {\n }, o.groupCollapsed = () => {\n }, o.groupEnd = () => {\n }, o.warn = () => {\n }, o.error = () => {\n };\n return;\n }\n const s = u(e) ?? [];\n o.debug = Function.prototype.bind.call(\n console.debug,\n console,\n ...s\n ), o.info = Function.prototype.bind.call(\n console.info,\n console,\n ...s\n ), o.log = Function.prototype.bind.call(\n console.log,\n console,\n ...s\n ), o.groupCollapsed = Function.prototype.bind.call(\n console.groupCollapsed,\n console\n ), o.groupEnd = Function.prototype.bind.call(console.groupEnd, console), o.warn = Function.prototype.bind.call(\n console.warn,\n console,\n ...s\n ), o.error = Function.prototype.bind.call(\n console.error,\n console,\n ...s\n );\n }, l = (c) => {\n t !== c && (t = c, r(t));\n };\n return r(t), o;\n}, M = p(), O = \"prose-reader-resource-error\", k = (e) => e.replaceAll(\"&\", \"&\").replaceAll('\"', \""\").replaceAll(\"'\", \"'\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\nexport {\n O as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,\n M as Report,\n y as arrayEqual,\n h as detectMimeTypeFromName,\n k as escapeXmlAttributeValue,\n $ as getParentPath,\n f as getUrlExtension,\n F as groupBy,\n _ as isMediaContentMimeType,\n v as isShallowEqual,\n x as isXmlBasedMimeType,\n C as parseContentType,\n T as shallowMergeIfDefined,\n R as urlJoin\n};\n//# sourceMappingURL=index.js.map\n","import { Report } from \"@prose-reader/shared\"\nimport { name } from \"../package.json\"\n\nconst IS_DEBUG_ENABLED = true\n\nexport const report = Report.namespace(name, IS_DEBUG_ENABLED)\n","import { ReactiveEntity } from \"@prose-reader/core\"\nimport type { AnnotationsEnhancerOptions } from \"./types\"\n\nexport class Settings extends ReactiveEntity<AnnotationsEnhancerOptions> {\n update(settings: AnnotationsEnhancerOptions) {\n super.mergeCompare(settings)\n }\n}\n","import {\n generateRootCfi,\n isShallowEqual,\n type Reader,\n} from \"@prose-reader/core\"\nimport {\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n map,\n merge,\n NEVER,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport { ReaderHighlights } from \"./annotations/ReaderHighlights\"\nimport type { RuntimeAnnotation } from \"./annotations/types\"\nimport { report } from \"./report\"\nimport { Settings } from \"./Settings\"\nimport type {\n AnnotateAbsolutePageParams,\n AnnotateParams,\n AnnotationsEnhancerAPI,\n AnnotationsEnhancerOptions,\n} from \"./types\"\n\nexport type { AnnotationsEnhancerAPI }\n\nexport const annotationsEnhancer =\n <InheritOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (\n options: InheritOptions & { annotations?: AnnotationsEnhancerOptions },\n ): InheritOutput & AnnotationsEnhancerAPI => {\n const { annotations: annotationsOptions, ...rest } = options\n const settings = new Settings({\n annotations$: annotationsOptions?.annotations$,\n })\n const reader = next(rest as InheritOptions)\n\n const annotations$ = settings\n .watch(\"annotations$\")\n .pipe(switchMap((annotations) => annotations ?? NEVER))\n\n const runtimeAnnotations$ = annotations$.pipe(\n distinctUntilChanged(isShallowEqual),\n map((annotations) => {\n const runtimeAnnotations: RuntimeAnnotation[] = annotations.map(\n (annotation) => {\n const { itemIndex = 0 } = reader.cfi.parseCfi(annotation.cfi ?? \"\")\n\n const highlight = {\n ...annotation,\n itemIndex,\n } satisfies RuntimeAnnotation\n\n return highlight\n },\n )\n\n return runtimeAnnotations\n }),\n tap((annotations) => {\n report.debug(\"annotations\", annotations)\n }),\n shareReplay({\n refCount: true,\n bufferSize: 1,\n }),\n )\n\n const selectedHighlight$ = runtimeAnnotations$.pipe(\n map(\n (annotations) =>\n annotations.find((annotation) => annotation.selected)?.id,\n ),\n distinctUntilChanged(),\n shareReplay({ refCount: true, bufferSize: 1 }),\n )\n\n const readerHighlights = new ReaderHighlights(\n reader,\n runtimeAnnotations$,\n selectedHighlight$,\n )\n\n const resolveItemInformation = (params: {\n absolutePageIndex?: number\n itemIndex?: number\n }) => {\n if (params.itemIndex !== undefined)\n return { itemIndex: params.itemIndex, pageIndex: undefined }\n\n if (params.absolutePageIndex !== undefined) {\n return reader.spine.pages.fromAbsolutePageIndex(\n params.absolutePageIndex,\n )\n }\n\n return undefined\n }\n\n const createAnnotation = ({\n selection,\n ...rest\n }: (AnnotateParams | AnnotateAbsolutePageParams) & {\n absolutePageIndex?: number\n }) => {\n const { itemIndex, pageIndex = 0 } = resolveItemInformation(rest) ?? {}\n const spineItem = reader.spineItemsManager.get(itemIndex)\n const id = window.crypto.randomUUID()\n\n if (!spineItem) return undefined\n\n const range = selection\n ? reader.selection.createOrderedRangeFromSelection({\n selection,\n spineItem,\n })\n : undefined\n\n const pageEntry = reader.spine.pages.fromSpineItemPageIndex(\n spineItem,\n pageIndex,\n )\n\n const cfiWithRangeOrFirstNodeOrRoot = range\n ? reader.cfi.generateCfiFromRange(range, spineItem.item)\n : pageEntry?.firstVisibleNode\n ? reader.cfi.generateCfiForSpineItemPage({\n spineItem: spineItem.item,\n pageNode: pageEntry.firstVisibleNode,\n })\n : generateRootCfi(spineItem.item)\n\n const highlight = {\n cfi: cfiWithRangeOrFirstNodeOrRoot,\n itemIndex: spineItem.index,\n id,\n ...rest,\n } satisfies RuntimeAnnotation\n\n return highlight\n }\n\n const renderAnnotations$ = merge(runtimeAnnotations$, reader.layout$).pipe(\n debounceTime(50),\n switchMap(() => readerHighlights.layout()),\n )\n\n const candidates$ = reader.layoutInfo$.pipe(\n switchMap(({ pages }) =>\n combineLatest(\n pages.map((page) => {\n const item = reader.spineItemsManager.get(page.itemIndex)\n\n if (!item) return of(false)\n\n // pre-paginated can always be annotated on their unique page\n if (item.renditionLayout === \"pre-paginated\") return of(true)\n\n if (page.firstVisibleNode) return of(true)\n\n return of(false)\n }),\n ),\n ),\n )\n\n merge(renderAnnotations$, annotations$)\n .pipe(takeUntil(reader.$.destroy$))\n .subscribe()\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_ANNOTATIONS: true,\n destroy: () => {\n readerHighlights.destroy()\n reader.destroy()\n },\n annotations: {\n annotations$: runtimeAnnotations$,\n highlightTap$: readerHighlights.tap$,\n candidates$,\n isTargetWithinHighlight: readerHighlights.isTargetWithinHighlight,\n createAnnotation,\n update: settings.update.bind(settings),\n },\n }\n }\n"],"names":["isSelected","highlights","Report","rest"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/annotations/utils.ts","../src/annotations/SpineItemHighlight.ts","../src/annotations/SpineItemHighlights.ts","../src/annotations/ReaderHighlights.ts","../../shared/dist/index.js","../src/report.ts","../src/Settings.ts","../src/annotationsEnhancer.ts"],"sourcesContent":["import {\n setPropertyIfChanged,\n setStylePropertyIfChanged,\n} from \"@prose-reader/core\"\n\nexport const createElementForRange = (\n range: Range,\n container: HTMLElement,\n color: string,\n) => {\n // Get all rects and group them by line (based on vertical position)\n const rects = Array.from(range.getClientRects())\n const lineGroups = new Map<number, DOMRect[]>()\n\n rects.forEach((rect) => {\n const lineY = Math.round(rect.top) // Round to handle minor pixel differences\n if (!lineGroups.has(lineY)) {\n lineGroups.set(lineY, [])\n }\n lineGroups.get(lineY)?.push(rect)\n })\n\n // Create one highlight element per line\n return Array.from(lineGroups.values()).map((lineRects) => {\n // Find the leftmost and rightmost points\n const left = Math.min(...lineRects.map((r) => r.left))\n const right = Math.max(...lineRects.map((r) => r.right))\n const top = lineRects[0]?.top\n const height = lineRects[0]?.height\n\n const rectEltContainer = container.ownerDocument.createElement(\"div\")\n const rectElt = container.ownerDocument.createElement(\"div\")\n rectEltContainer.style.cssText = `\n position: absolute;\n width: ${right - left}px;\n height: ${height}px;\n top: ${top}px;\n left: ${left}px;\n box-sizing: border-box;\n border: 3px dashed transparent;\n `\n rectElt.style.cssText = `\n height: 100%;\n width: 100%;\n opacity: 40%;\n background-color: ${color}\n `\n\n rectEltContainer.appendChild(rectElt)\n\n return rectEltContainer\n })\n}\n\nexport const copyPositionStyle = (source: HTMLElement, target: HTMLElement) => {\n setPropertyIfChanged(target.style, `cssText`, source.style.cssText)\n}\n\nexport const createAnnotationLayer = (\n container: HTMLElement,\n layer: HTMLElement,\n) => {\n const annotationLayer = container.ownerDocument.createElement(\"div\")\n\n layoutAnnotationLayer(layer, annotationLayer)\n\n container.appendChild(annotationLayer)\n\n return annotationLayer\n}\n\nexport const layoutAnnotationLayer = (\n layer: HTMLElement,\n annotationLayer: HTMLElement,\n) => {\n copyPositionStyle(layer, annotationLayer)\n\n if (layer.style.position === \"\") {\n setStylePropertyIfChanged(annotationLayer.style, `position`, `absolute`)\n setStylePropertyIfChanged(annotationLayer.style, `top`, `0`)\n }\n\n // annotationLayer.style.backgroundColor = \"red\"\n setStylePropertyIfChanged(annotationLayer.style, `opacity`, `1`)\n setStylePropertyIfChanged(annotationLayer.style, `pointer-events`, `none`)\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n setStylePropertyIfChanged,\n} from \"@prose-reader/core\"\nimport {\n first,\n fromEvent,\n map,\n merge,\n type Observable,\n share,\n shareReplay,\n takeUntil,\n tap,\n withLatestFrom,\n} from \"rxjs\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createElementForRange } from \"./utils\"\n\nexport class SpineItemHighlight extends DestroyableClass {\n private container: HTMLElement\n public readonly tap$: Observable<{\n event: Event\n highlight: RuntimeAnnotation\n }>\n private resolvedCfi$: Observable<ReturnType<Reader[\"cfi\"][\"resolveCfi\"]>>\n\n constructor(\n private spineItem: SpineItem,\n private containerElement: HTMLElement,\n private reader: Reader,\n public highlight: RuntimeAnnotation,\n private isSelected: Observable<boolean>,\n ) {\n super()\n\n void this.spineItem\n void this.reader\n\n this.container = this.containerElement.ownerDocument.createElement(\"div\")\n this.container.dataset.highlightContainer = this.highlight.id\n this.containerElement.appendChild(this.container)\n\n this.tap$ = fromEvent(this.container, \"click\").pipe(\n map((event) => ({ event, highlight: this.highlight })),\n share(),\n )\n\n this.resolvedCfi$ = this.spineItem.watch(\"isLoaded\").pipe(\n map(() => this.reader.cfi.resolveCfi({ cfi: this.highlight.cfi })),\n shareReplay({ refCount: true, bufferSize: 1 }),\n )\n\n const updateStateOnSelection$ = this.isSelected.pipe(\n tap((isSelected) => {\n this.updateStateOnSelection(isSelected)\n }),\n )\n\n merge(this.resolvedCfi$, updateStateOnSelection$)\n .pipe(takeUntil(this.destroy$))\n .subscribe()\n }\n\n public updateStateOnSelection(isSelected: boolean) {\n Array.from(this.container.children).forEach((child) => {\n if (child instanceof HTMLElement) {\n setStylePropertyIfChanged(\n child.style,\n `border`,\n isSelected ? \"3px dashed red\" : \"3px dashed transparent\",\n )\n }\n })\n }\n\n public render() {\n return this.resolvedCfi$.pipe(\n first(),\n withLatestFrom(this.isSelected),\n map(([resolvedCfi, isSelected]) => {\n if (!resolvedCfi?.isCfiRange) return undefined\n\n const range = resolvedCfi.range\n\n this.container.innerHTML = \"\"\n\n /**\n * The nodes can be undefined if the cfi is not found.\n * This can happens if the item is not loaded (legit) or if the cfi\n * are just invalid.\n */\n if (!range) {\n return\n }\n\n const rectElements = createElementForRange(\n range,\n this.container,\n this.highlight.highlightColor ?? \"yellow\",\n )\n\n rectElements.forEach((elt) => {\n elt.style.pointerEvents = \"initial\"\n elt.style.cursor = \"pointer\"\n elt.dataset.highlightRect = this.highlight.id\n\n this.container.appendChild(elt)\n })\n\n const firstElement = rectElements[0]\n\n if (firstElement && this.highlight.notes) {\n const noteIcon = document.createElement(\"span\")\n noteIcon.textContent = \"📝\"\n noteIcon.style.position = \"absolute\"\n noteIcon.style.top = \"0\"\n noteIcon.style.left = \"0\"\n noteIcon.style.transform = \"translate(-0%, -80%)\"\n noteIcon.style.fontSize = \"18px\"\n noteIcon.style.opacity = \"50%\"\n firstElement.appendChild(noteIcon)\n }\n\n this.updateStateOnSelection(isSelected)\n\n return null\n }),\n )\n }\n\n isWithinTarget(target: Node) {\n return this.container.contains(target)\n }\n\n public destroy() {\n super.destroy()\n\n this.container.remove()\n }\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n defaultIfEmpty,\n distinctUntilChanged,\n forkJoin,\n map,\n merge,\n type Observable,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n} from \"rxjs\"\nimport { SpineItemHighlight } from \"./SpineItemHighlight\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createAnnotationLayer, layoutAnnotationLayer } from \"./utils\"\n\nexport class SpineItemHighlights extends DestroyableClass {\n private layer: HTMLElement\n private highlights: SpineItemHighlight[] = []\n\n public readonly tap$: SpineItemHighlight[\"tap$\"]\n\n constructor(\n private annotations$: Observable<RuntimeAnnotation[]>,\n private spineItem: SpineItem,\n private reader: Reader,\n private selectedHighlight: Observable<string | undefined>,\n ) {\n super()\n\n const firstLayerElement =\n spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n this.layer = createAnnotationLayer(\n this.spineItem.containerElement,\n firstLayerElement,\n )\n\n const itemHighlights$ = this.annotations$.pipe(\n switchMap((annotations) => {\n const newAnnotations = annotations.filter(\n (annotation) =>\n !this.highlights.some(\n (highlight) => highlight.highlight.id === annotation.id,\n ),\n )\n const oldAnnotations = this.highlights.filter(\n (highlight) =>\n highlight.highlight.itemIndex !== this.spineItem.item.index,\n )\n\n this.highlights.forEach((highlight, index) => {\n const existingAnnotation = annotations.find(\n (annotation) => annotation.id === highlight.highlight.id,\n )\n\n if (oldAnnotations.includes(highlight)) {\n highlight.destroy()\n this.highlights = this.highlights.splice(index, 1)\n }\n\n if (existingAnnotation) {\n highlight.highlight = existingAnnotation\n }\n })\n\n newAnnotations.forEach((annotation) => {\n if (annotation.itemIndex !== this.spineItem.item.index) return\n\n const isSelected$ = this.selectedHighlight.pipe(\n map((id) => id === annotation.id),\n distinctUntilChanged(),\n )\n\n const spineItemHighlight = new SpineItemHighlight(\n this.spineItem,\n this.layer,\n this.reader,\n annotation,\n isSelected$,\n )\n\n this.highlights.push(spineItemHighlight)\n })\n\n return of(this.highlights)\n }),\n shareReplay(1),\n takeUntil(this.destroy$),\n )\n\n this.tap$ = itemHighlights$.pipe(\n switchMap((highlights) =>\n merge(...highlights.map((highlight) => highlight.tap$)),\n ),\n )\n\n annotations$.subscribe()\n }\n\n layout() {\n const firstLayerElement =\n this.spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n layoutAnnotationLayer(firstLayerElement, this.layer)\n\n return forkJoin(\n this.highlights.map((highlight) => highlight.render()),\n ).pipe(defaultIfEmpty(null))\n }\n\n getHighlightsForTarget(target: EventTarget) {\n return this.highlights.filter(\n (highlight) => target instanceof Node && highlight.isWithinTarget(target),\n )\n }\n\n destroy() {\n super.destroy()\n\n this.layer.remove()\n }\n}\n","import { DestroyableClass, type Reader } from \"@prose-reader/core\"\nimport {\n BehaviorSubject,\n defaultIfEmpty,\n forkJoin,\n map,\n merge,\n type Observable,\n switchMap,\n} from \"rxjs\"\nimport { SpineItemHighlights } from \"./SpineItemHighlights\"\nimport type { RuntimeAnnotation } from \"./types\"\n\nexport class ReaderHighlights extends DestroyableClass {\n private spineItemHighlights = new BehaviorSubject<SpineItemHighlights[]>([])\n\n public tap$: SpineItemHighlights[\"tap$\"]\n\n constructor(\n private reader: Reader,\n private highlights: Observable<RuntimeAnnotation[]>,\n private selectedHighlight: Observable<string | undefined>,\n ) {\n super()\n\n const cleanupByItemId = new Map<string, () => void>()\n\n this.reader.hookManager.register(\n \"item.onDocumentLoad\",\n async ({ itemId }) => {\n cleanupByItemId.get(itemId)?.()\n cleanupByItemId.delete(itemId)\n\n const spineItem = reader.spineItemsManager.get(itemId)\n\n if (!spineItem) return\n\n const spineItemHighlights$ = this.highlights.pipe(\n map((highlights) =>\n highlights.filter(\n (highlight) => highlight.itemIndex === spineItem.item.index,\n ),\n ),\n )\n\n const spineItemHighlights = new SpineItemHighlights(\n spineItemHighlights$,\n spineItem,\n reader,\n this.selectedHighlight,\n )\n\n this.spineItemHighlights.next([\n ...this.spineItemHighlights.getValue(),\n spineItemHighlights,\n ])\n\n const cleanup = () => {\n this.spineItemHighlights.next(\n this.spineItemHighlights\n .getValue()\n .filter((layer) => layer !== spineItemHighlights),\n )\n\n spineItemHighlights.destroy()\n }\n\n cleanupByItemId.set(itemId, cleanup)\n },\n )\n\n this.reader.hookManager.register(\n \"item.onDocumentUnload\",\n async ({ itemId }) => {\n cleanupByItemId.get(itemId)?.()\n cleanupByItemId.delete(itemId)\n },\n )\n\n this.tap$ = this.spineItemHighlights.pipe(\n switchMap((layers) => merge(...layers.map((layer) => layer.tap$))),\n )\n }\n\n getHighlightsForTarget = (target: EventTarget) => {\n return this.spineItemHighlights\n .getValue()\n .flatMap((layer) => layer.getHighlightsForTarget(target))\n .map((annotation) => annotation.highlight)\n }\n\n isTargetWithinHighlight = (target: EventTarget) => {\n return !!this.getHighlightsForTarget(target).length\n }\n\n public layout() {\n return forkJoin(\n this.spineItemHighlights.value.map((item) => item.layout()),\n ).pipe(defaultIfEmpty(null))\n }\n}\n","const y = (e, n) => e === n ? !0 : e.length !== n.length ? !1 : e.every((t, o) => t === n[o]), f = (e) => e.split(/[#?]/)[0]?.split(\".\").pop()?.trim() || \"\";\nfunction d(e) {\n const n = [];\n if (e.length === 0)\n return \"\";\n if (typeof e[0] != \"string\")\n throw new TypeError(`Url must be a string. Received ${e[0]}`);\n e[0].match(/^[^/:]+:\\/*$/) && e.length > 1 && (e[0] = e.shift() + e[0]), e[0].match(/^file:\\/\\/\\//) ? e[0] = e[0].replace(/^([^/:]+):\\/*/, \"$1:///\") : e[0] = e[0].replace(/^([^/:]+):\\/*/, \"$1://\");\n for (let r = 0; r < e.length; r++) {\n let l = e[r];\n if (typeof l != \"string\")\n throw new TypeError(`Url must be a string. Received ${l}`);\n l !== \"\" && (r > 0 && (l = l.replace(/^[/]+/, \"\")), r < e.length - 1 ? l = l.replace(/[/]+$/, \"\") : l = l.replace(/[/]+$/, \"/\"), n.push(l));\n }\n let t = n.join(\"/\");\n t = t.replace(/\\/(\\?|&|#[^!])/g, \"$1\");\n const o = t.split(\"?\");\n return t = o.shift() + (o.length > 0 ? \"?\" : \"\") + o.join(\"&\"), t;\n}\nfunction R(...e) {\n const n = Array.from(Array.isArray(e[0]) ? e[0] : e);\n return d(n);\n}\nfunction $(e) {\n const n = e.split(\"/\");\n return n.pop(), n.join(\"/\");\n}\nconst h = (e) => {\n switch (f(e)) {\n case \"png\":\n return \"image/png\";\n case \"jpg\":\n return \"image/jpg\";\n case \"jpeg\":\n return \"image/jpeg\";\n case \"txt\":\n return \"text/plain\";\n case \"webp\":\n return \"image/webp\";\n case \"xhtml\":\n return \"application/xhtml+xml\";\n case \"mp3\":\n return \"audio/mpeg\";\n case \"m4a\":\n case \"m4b\":\n return \"audio/mp4\";\n case \"aac\":\n return \"audio/aac\";\n case \"ogg\":\n case \"oga\":\n return \"audio/ogg\";\n case \"wav\":\n return \"audio/wav\";\n case \"flac\":\n return \"audio/flac\";\n case \"opus\":\n return \"audio/opus\";\n }\n}, x = ({\n mimeType: e,\n uri: n\n}) => (e ?? h(n ?? \"\"))?.startsWith(\"application/xhtml+xml\"), _ = (e) => e.startsWith(\"image/\") || e.startsWith(\"audio/\") || e.startsWith(\"video/\"), C = (e) => {\n if (!e.length) return;\n const n = e.indexOf(\";\");\n return n >= 0 ? e.substring(0, n) : e;\n}, v = (e, n, t) => {\n if (Object.is(e, n))\n return !0;\n if (typeof e != \"object\" || e === null || typeof n != \"object\" || n === null)\n return !1;\n const o = Object.keys(e), r = Object.keys(n);\n if (o.length !== r.length)\n return !1;\n const l = t?.customEqual ?? Object.is, c = e, s = n;\n for (const i of o)\n if (!Object.hasOwn(s, i) || !l(c[i], s[i]))\n return !1;\n return !0;\n}, F = (e, n) => e.reduce(\n (t, o) => {\n const r = n(o);\n return t[r] || (t[r] = []), t[r].push(o), t;\n },\n {}\n);\nfunction T(e, n) {\n const t = { ...e };\n for (const o in n)\n if (Object.hasOwn(n, o)) {\n const r = n[o];\n (r !== void 0 || !(o in e)) && (t[o] = r);\n }\n return t;\n}\nconst m = () => {\n if (!(typeof window > \"u\"))\n return window;\n};\nfunction b() {\n const e = m()?.__PROSE_READER_DEBUG;\n return e === !0 || e === \"true\";\n}\nconst E = (e, n) => typeof e == \"boolean\" ? {\n enabled: e,\n options: n\n} : {\n enabled: e?.enabled,\n options: e ?? n\n}, w = (e) => e.at(-1)?.color, u = (e) => {\n if (!e.length)\n return;\n if (!e.some((o) => o.color))\n return [e.map((o) => o.label).join(\" \")];\n let n = \"\";\n const t = [];\n for (const o of e)\n n += `%c${n ? ` ${o.label}` : o.label}`, t.push(\n o.color ? `color: ${o.color}` : \"\"\n );\n return [n, ...t];\n}, p = (e = [], n = b()) => {\n let t = n;\n const o = {\n enable: (c) => {\n l(c);\n },\n namespace: (c, s, i) => {\n const a = E(\n s,\n i\n ), g = a.options?.color ?? w(e);\n return p(\n [\n ...e,\n {\n label: `[${c}]`,\n color: g\n }\n ],\n a.enabled ?? t\n );\n },\n isEnabled: () => t,\n debug: () => {\n },\n info: () => {\n },\n log: () => {\n },\n groupCollapsed: () => {\n },\n groupEnd: () => {\n },\n getGroupArgs: (c) => {\n const s = u(e);\n if (!s)\n return [c];\n const [i, ...a] = s;\n return [`${i} ${c}`, ...a];\n },\n warn: () => {\n },\n error: () => {\n }\n }, r = (c) => {\n if (!c) {\n o.debug = () => {\n }, o.info = () => {\n }, o.log = () => {\n }, o.groupCollapsed = () => {\n }, o.groupEnd = () => {\n }, o.warn = () => {\n }, o.error = () => {\n };\n return;\n }\n const s = u(e) ?? [];\n o.debug = Function.prototype.bind.call(\n console.debug,\n console,\n ...s\n ), o.info = Function.prototype.bind.call(\n console.info,\n console,\n ...s\n ), o.log = Function.prototype.bind.call(\n console.log,\n console,\n ...s\n ), o.groupCollapsed = Function.prototype.bind.call(\n console.groupCollapsed,\n console\n ), o.groupEnd = Function.prototype.bind.call(console.groupEnd, console), o.warn = Function.prototype.bind.call(\n console.warn,\n console,\n ...s\n ), o.error = Function.prototype.bind.call(\n console.error,\n console,\n ...s\n );\n }, l = (c) => {\n t !== c && (t = c, r(t));\n };\n return r(t), o;\n}, M = p(), O = \"prose-reader-resource-error\", k = (e) => e.replaceAll(\"&\", \"&\").replaceAll('\"', \""\").replaceAll(\"'\", \"'\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\nexport {\n O as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,\n M as Report,\n y as arrayEqual,\n h as detectMimeTypeFromName,\n k as escapeXmlAttributeValue,\n $ as getParentPath,\n f as getUrlExtension,\n F as groupBy,\n _ as isMediaContentMimeType,\n v as isShallowEqual,\n x as isXmlBasedMimeType,\n C as parseContentType,\n T as shallowMergeIfDefined,\n R as urlJoin\n};\n//# sourceMappingURL=index.js.map\n","import { Report } from \"@prose-reader/shared\"\nimport { name } from \"../package.json\"\n\nconst IS_DEBUG_ENABLED = true\n\nexport const report = Report.namespace(name, IS_DEBUG_ENABLED)\n","import { ReactiveEntity } from \"@prose-reader/core\"\nimport type { AnnotationsEnhancerOptions } from \"./types\"\n\nexport class Settings extends ReactiveEntity<AnnotationsEnhancerOptions> {\n update(settings: AnnotationsEnhancerOptions) {\n super.mergeCompare(settings)\n }\n}\n","import { isShallowEqual, type Reader } from \"@prose-reader/core\"\nimport {\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n map,\n merge,\n NEVER,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport { ReaderHighlights } from \"./annotations/ReaderHighlights\"\nimport type { RuntimeAnnotation } from \"./annotations/types\"\nimport { report } from \"./report\"\nimport { Settings } from \"./Settings\"\nimport type {\n AnnotateAbsolutePageParams,\n AnnotateParams,\n AnnotationsEnhancerAPI,\n AnnotationsEnhancerOptions,\n} from \"./types\"\n\nexport type { AnnotationsEnhancerAPI }\n\nexport const annotationsEnhancer =\n <InheritOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (\n options: InheritOptions & { annotations?: AnnotationsEnhancerOptions },\n ): InheritOutput & AnnotationsEnhancerAPI => {\n const { annotations: annotationsOptions, ...rest } = options\n const settings = new Settings({\n annotations$: annotationsOptions?.annotations$,\n })\n const reader = next(rest as InheritOptions)\n\n const annotations$ = settings\n .watch(\"annotations$\")\n .pipe(switchMap((annotations) => annotations ?? NEVER))\n\n const runtimeAnnotations$ = annotations$.pipe(\n distinctUntilChanged(isShallowEqual),\n map((annotations) => {\n const runtimeAnnotations: RuntimeAnnotation[] = annotations.map(\n (annotation) => {\n const { itemIndex = 0 } = reader.cfi.parseCfi(annotation.cfi ?? \"\")\n\n const highlight = {\n ...annotation,\n itemIndex,\n } satisfies RuntimeAnnotation\n\n return highlight\n },\n )\n\n return runtimeAnnotations\n }),\n tap((annotations) => {\n report.debug(\"annotations\", annotations)\n }),\n shareReplay({\n refCount: true,\n bufferSize: 1,\n }),\n )\n\n const selectedHighlight$ = runtimeAnnotations$.pipe(\n map(\n (annotations) =>\n annotations.find((annotation) => annotation.selected)?.id,\n ),\n distinctUntilChanged(),\n shareReplay({ refCount: true, bufferSize: 1 }),\n )\n\n const readerHighlights = new ReaderHighlights(\n reader,\n runtimeAnnotations$,\n selectedHighlight$,\n )\n\n const resolveItemInformation = (params: {\n absolutePageIndex?: number\n itemIndex?: number\n }) => {\n if (params.itemIndex !== undefined)\n return { itemIndex: params.itemIndex, pageIndex: undefined }\n\n if (params.absolutePageIndex !== undefined) {\n return reader.spine.pages.fromAbsolutePageIndex(\n params.absolutePageIndex,\n )\n }\n\n return undefined\n }\n\n const createAnnotation = ({\n selection,\n ...rest\n }: (AnnotateParams | AnnotateAbsolutePageParams) & {\n absolutePageIndex?: number\n }) => {\n const { itemIndex, pageIndex = 0 } = resolveItemInformation(rest) ?? {}\n const spineItem = reader.spineItemsManager.get(itemIndex)\n const id = window.crypto.randomUUID()\n\n if (!spineItem) return undefined\n\n const range = selection\n ? reader.selection.createOrderedRangeFromSelection({\n selection,\n spineItem,\n })\n : undefined\n\n const pageEntry = reader.spine.pages.fromSpineItemPageIndex(\n spineItem,\n pageIndex,\n )\n\n const cfiWithRangeOrFirstNodeOrRoot = range\n ? reader.cfi.generateCfiFromRange(range, spineItem.item)\n : pageEntry?.firstVisibleNode\n ? reader.cfi.generateCfiForSpineItemPage({\n spineItem: spineItem.item,\n pageNode: pageEntry.firstVisibleNode,\n })\n : reader.cfi.generateRootCfi(spineItem.item)\n\n const highlight = {\n cfi: cfiWithRangeOrFirstNodeOrRoot,\n itemIndex: spineItem.index,\n id,\n ...rest,\n } satisfies RuntimeAnnotation\n\n return highlight\n }\n\n const renderAnnotations$ = merge(runtimeAnnotations$, reader.layout$).pipe(\n debounceTime(50),\n switchMap(() => readerHighlights.layout()),\n )\n\n const candidates$ = reader.layoutInfo$.pipe(\n switchMap(({ pages }) =>\n combineLatest(\n pages.map((page) => {\n const item = reader.spineItemsManager.get(page.itemIndex)\n\n if (!item) return of(false)\n\n // pre-paginated can always be annotated on their unique page\n if (item.renditionLayout === \"pre-paginated\") return of(true)\n\n if (page.firstVisibleNode) return of(true)\n\n return of(false)\n }),\n ),\n ),\n )\n\n merge(renderAnnotations$, annotations$)\n .pipe(takeUntil(reader.$.destroy$))\n .subscribe()\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_ANNOTATIONS: true,\n destroy: () => {\n readerHighlights.destroy()\n reader.destroy()\n },\n annotations: {\n annotations$: runtimeAnnotations$,\n highlightTap$: readerHighlights.tap$,\n candidates$,\n isTargetWithinHighlight: readerHighlights.isTargetWithinHighlight,\n createAnnotation,\n update: settings.update.bind(settings),\n },\n }\n }\n"],"names":["isSelected","highlights","Report","rest"],"mappings":"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"}
|
package/dist/index.umd.cjs
CHANGED
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
});
|
|
42
42
|
};
|
|
43
43
|
const copyPositionStyle = (source, target) => {
|
|
44
|
-
target.style
|
|
44
|
+
core.setPropertyIfChanged(target.style, `cssText`, source.style.cssText);
|
|
45
45
|
};
|
|
46
46
|
const createAnnotationLayer = (container, layer) => {
|
|
47
47
|
const annotationLayer = container.ownerDocument.createElement("div");
|
|
@@ -52,11 +52,11 @@
|
|
|
52
52
|
const layoutAnnotationLayer = (layer, annotationLayer) => {
|
|
53
53
|
copyPositionStyle(layer, annotationLayer);
|
|
54
54
|
if (layer.style.position === "") {
|
|
55
|
-
annotationLayer.style
|
|
56
|
-
annotationLayer.style
|
|
55
|
+
core.setStylePropertyIfChanged(annotationLayer.style, `position`, `absolute`);
|
|
56
|
+
core.setStylePropertyIfChanged(annotationLayer.style, `top`, `0`);
|
|
57
57
|
}
|
|
58
|
-
annotationLayer.style
|
|
59
|
-
annotationLayer.style
|
|
58
|
+
core.setStylePropertyIfChanged(annotationLayer.style, `opacity`, `1`);
|
|
59
|
+
core.setStylePropertyIfChanged(annotationLayer.style, `pointer-events`, `none`);
|
|
60
60
|
};
|
|
61
61
|
|
|
62
62
|
class SpineItemHighlight extends core.DestroyableClass {
|
|
@@ -98,7 +98,11 @@
|
|
|
98
98
|
updateStateOnSelection(isSelected) {
|
|
99
99
|
Array.from(this.container.children).forEach((child) => {
|
|
100
100
|
if (child instanceof HTMLElement) {
|
|
101
|
-
|
|
101
|
+
core.setStylePropertyIfChanged(
|
|
102
|
+
child.style,
|
|
103
|
+
`border`,
|
|
104
|
+
isSelected ? "3px dashed red" : "3px dashed transparent"
|
|
105
|
+
);
|
|
102
106
|
}
|
|
103
107
|
});
|
|
104
108
|
}
|
|
@@ -107,7 +111,7 @@
|
|
|
107
111
|
rxjs.first(),
|
|
108
112
|
rxjs.withLatestFrom(this.isSelected),
|
|
109
113
|
rxjs.map(([resolvedCfi, isSelected]) => {
|
|
110
|
-
if (!resolvedCfi
|
|
114
|
+
if (!resolvedCfi?.isCfiRange) return void 0;
|
|
111
115
|
const range = resolvedCfi.range;
|
|
112
116
|
this.container.innerHTML = "";
|
|
113
117
|
if (!range) {
|
|
@@ -242,9 +246,12 @@
|
|
|
242
246
|
this.reader = reader;
|
|
243
247
|
this.highlights = highlights;
|
|
244
248
|
this.selectedHighlight = selectedHighlight;
|
|
249
|
+
const cleanupByItemId = /* @__PURE__ */ new Map();
|
|
245
250
|
this.reader.hookManager.register(
|
|
246
251
|
"item.onDocumentLoad",
|
|
247
|
-
({ itemId
|
|
252
|
+
async ({ itemId }) => {
|
|
253
|
+
cleanupByItemId.get(itemId)?.();
|
|
254
|
+
cleanupByItemId.delete(itemId);
|
|
248
255
|
const spineItem = reader.spineItemsManager.get(itemId);
|
|
249
256
|
if (!spineItem) return;
|
|
250
257
|
const spineItemHighlights$ = this.highlights.pipe(
|
|
@@ -264,12 +271,20 @@
|
|
|
264
271
|
...this.spineItemHighlights.getValue(),
|
|
265
272
|
spineItemHighlights
|
|
266
273
|
]);
|
|
267
|
-
|
|
274
|
+
const cleanup = () => {
|
|
268
275
|
this.spineItemHighlights.next(
|
|
269
276
|
this.spineItemHighlights.getValue().filter((layer) => layer !== spineItemHighlights)
|
|
270
277
|
);
|
|
271
278
|
spineItemHighlights.destroy();
|
|
272
|
-
}
|
|
279
|
+
};
|
|
280
|
+
cleanupByItemId.set(itemId, cleanup);
|
|
281
|
+
}
|
|
282
|
+
);
|
|
283
|
+
this.reader.hookManager.register(
|
|
284
|
+
"item.onDocumentUnload",
|
|
285
|
+
async ({ itemId }) => {
|
|
286
|
+
cleanupByItemId.get(itemId)?.();
|
|
287
|
+
cleanupByItemId.delete(itemId);
|
|
273
288
|
}
|
|
274
289
|
);
|
|
275
290
|
this.tap$ = this.spineItemHighlights.pipe(
|
|
@@ -489,7 +504,7 @@
|
|
|
489
504
|
const cfiWithRangeOrFirstNodeOrRoot = range ? reader.cfi.generateCfiFromRange(range, spineItem.item) : pageEntry?.firstVisibleNode ? reader.cfi.generateCfiForSpineItemPage({
|
|
490
505
|
spineItem: spineItem.item,
|
|
491
506
|
pageNode: pageEntry.firstVisibleNode
|
|
492
|
-
}) :
|
|
507
|
+
}) : reader.cfi.generateRootCfi(spineItem.item);
|
|
493
508
|
const highlight = {
|
|
494
509
|
cfi: cfiWithRangeOrFirstNodeOrRoot,
|
|
495
510
|
itemIndex: spineItem.index,
|
package/dist/index.umd.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.cjs","sources":["../src/annotations/utils.ts","../src/annotations/SpineItemHighlight.ts","../src/annotations/SpineItemHighlights.ts","../src/annotations/ReaderHighlights.ts","../../shared/dist/index.js","../src/report.ts","../src/Settings.ts","../src/annotationsEnhancer.ts"],"sourcesContent":["export const createElementForRange = (\n range: Range,\n container: HTMLElement,\n color: string,\n) => {\n // Get all rects and group them by line (based on vertical position)\n const rects = Array.from(range.getClientRects())\n const lineGroups = new Map<number, DOMRect[]>()\n\n rects.forEach((rect) => {\n const lineY = Math.round(rect.top) // Round to handle minor pixel differences\n if (!lineGroups.has(lineY)) {\n lineGroups.set(lineY, [])\n }\n lineGroups.get(lineY)?.push(rect)\n })\n\n // Create one highlight element per line\n return Array.from(lineGroups.values()).map((lineRects) => {\n // Find the leftmost and rightmost points\n const left = Math.min(...lineRects.map((r) => r.left))\n const right = Math.max(...lineRects.map((r) => r.right))\n const top = lineRects[0]?.top\n const height = lineRects[0]?.height\n\n const rectEltContainer = container.ownerDocument.createElement(\"div\")\n const rectElt = container.ownerDocument.createElement(\"div\")\n rectEltContainer.style.cssText = `\n position: absolute;\n width: ${right - left}px;\n height: ${height}px;\n top: ${top}px;\n left: ${left}px;\n box-sizing: border-box;\n border: 3px dashed transparent;\n `\n rectElt.style.cssText = `\n height: 100%;\n width: 100%;\n opacity: 40%;\n background-color: ${color}\n `\n\n rectEltContainer.appendChild(rectElt)\n\n return rectEltContainer\n })\n}\n\nexport const copyPositionStyle = (source: HTMLElement, target: HTMLElement) => {\n target.style.cssText = source.style.cssText\n}\n\nexport const createAnnotationLayer = (\n container: HTMLElement,\n layer: HTMLElement,\n) => {\n const annotationLayer = container.ownerDocument.createElement(\"div\")\n\n layoutAnnotationLayer(layer, annotationLayer)\n\n container.appendChild(annotationLayer)\n\n return annotationLayer\n}\n\nexport const layoutAnnotationLayer = (\n layer: HTMLElement,\n annotationLayer: HTMLElement,\n) => {\n copyPositionStyle(layer, annotationLayer)\n\n if (layer.style.position === \"\") {\n annotationLayer.style.position = \"absolute\"\n annotationLayer.style.top = \"0\"\n }\n\n // annotationLayer.style.backgroundColor = \"red\"\n annotationLayer.style.opacity = \"1\"\n annotationLayer.style.pointerEvents = \"none\"\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n first,\n fromEvent,\n map,\n merge,\n type Observable,\n share,\n shareReplay,\n takeUntil,\n tap,\n withLatestFrom,\n} from \"rxjs\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createElementForRange } from \"./utils\"\n\nexport class SpineItemHighlight extends DestroyableClass {\n private container: HTMLElement\n public readonly tap$: Observable<{\n event: Event\n highlight: RuntimeAnnotation\n }>\n private resolvedCfi$: Observable<ReturnType<Reader[\"cfi\"][\"resolveCfi\"]>>\n\n constructor(\n private spineItem: SpineItem,\n private containerElement: HTMLElement,\n private reader: Reader,\n public highlight: RuntimeAnnotation,\n private isSelected: Observable<boolean>,\n ) {\n super()\n\n void this.spineItem\n void this.reader\n\n this.container = this.containerElement.ownerDocument.createElement(\"div\")\n this.container.dataset.highlightContainer = this.highlight.id\n this.containerElement.appendChild(this.container)\n\n this.tap$ = fromEvent(this.container, \"click\").pipe(\n map((event) => ({ event, highlight: this.highlight })),\n share(),\n )\n\n this.resolvedCfi$ = this.spineItem.watch(\"isLoaded\").pipe(\n map(() => this.reader.cfi.resolveCfi({ cfi: this.highlight.cfi })),\n shareReplay({ refCount: true, bufferSize: 1 }),\n )\n\n const updateStateOnSelection$ = this.isSelected.pipe(\n tap((isSelected) => {\n this.updateStateOnSelection(isSelected)\n }),\n )\n\n merge(this.resolvedCfi$, updateStateOnSelection$)\n .pipe(takeUntil(this.destroy$))\n .subscribe()\n }\n\n public updateStateOnSelection(isSelected: boolean) {\n Array.from(this.container.children).forEach((child) => {\n if (child instanceof HTMLElement) {\n child.style.border = isSelected\n ? \"3px dashed red\"\n : \"3px dashed transparent\"\n }\n })\n }\n\n public render() {\n return this.resolvedCfi$.pipe(\n first(),\n withLatestFrom(this.isSelected),\n map(([resolvedCfi, isSelected]) => {\n if (!resolvedCfi || !resolvedCfi.isCfiRange) return undefined\n\n const range = resolvedCfi.range\n\n this.container.innerHTML = \"\"\n\n /**\n * The nodes can be undefined if the cfi is not found.\n * This can happens if the item is not loaded (legit) or if the cfi\n * are just invalid.\n */\n if (!range) {\n return\n }\n\n const rectElements = createElementForRange(\n range,\n this.container,\n this.highlight.highlightColor ?? \"yellow\",\n )\n\n rectElements.forEach((elt) => {\n elt.style.pointerEvents = \"initial\"\n elt.style.cursor = \"pointer\"\n elt.dataset.highlightRect = this.highlight.id\n\n this.container.appendChild(elt)\n })\n\n const firstElement = rectElements[0]\n\n if (firstElement && this.highlight.notes) {\n const noteIcon = document.createElement(\"span\")\n noteIcon.textContent = \"📝\"\n noteIcon.style.position = \"absolute\"\n noteIcon.style.top = \"0\"\n noteIcon.style.left = \"0\"\n noteIcon.style.transform = \"translate(-0%, -80%)\"\n noteIcon.style.fontSize = \"18px\"\n noteIcon.style.opacity = \"50%\"\n firstElement.appendChild(noteIcon)\n }\n\n this.updateStateOnSelection(isSelected)\n\n return null\n }),\n )\n }\n\n isWithinTarget(target: Node) {\n return this.container.contains(target)\n }\n\n public destroy() {\n super.destroy()\n\n this.container.remove()\n }\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n defaultIfEmpty,\n distinctUntilChanged,\n forkJoin,\n map,\n merge,\n type Observable,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n} from \"rxjs\"\nimport { SpineItemHighlight } from \"./SpineItemHighlight\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createAnnotationLayer, layoutAnnotationLayer } from \"./utils\"\n\nexport class SpineItemHighlights extends DestroyableClass {\n private layer: HTMLElement\n private highlights: SpineItemHighlight[] = []\n\n public readonly tap$: SpineItemHighlight[\"tap$\"]\n\n constructor(\n private annotations$: Observable<RuntimeAnnotation[]>,\n private spineItem: SpineItem,\n private reader: Reader,\n private selectedHighlight: Observable<string | undefined>,\n ) {\n super()\n\n const firstLayerElement =\n spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n this.layer = createAnnotationLayer(\n this.spineItem.containerElement,\n firstLayerElement,\n )\n\n const itemHighlights$ = this.annotations$.pipe(\n switchMap((annotations) => {\n const newAnnotations = annotations.filter(\n (annotation) =>\n !this.highlights.some(\n (highlight) => highlight.highlight.id === annotation.id,\n ),\n )\n const oldAnnotations = this.highlights.filter(\n (highlight) =>\n highlight.highlight.itemIndex !== this.spineItem.item.index,\n )\n\n this.highlights.forEach((highlight, index) => {\n const existingAnnotation = annotations.find(\n (annotation) => annotation.id === highlight.highlight.id,\n )\n\n if (oldAnnotations.includes(highlight)) {\n highlight.destroy()\n this.highlights = this.highlights.splice(index, 1)\n }\n\n if (existingAnnotation) {\n highlight.highlight = existingAnnotation\n }\n })\n\n newAnnotations.forEach((annotation) => {\n if (annotation.itemIndex !== this.spineItem.item.index) return\n\n const isSelected$ = this.selectedHighlight.pipe(\n map((id) => id === annotation.id),\n distinctUntilChanged(),\n )\n\n const spineItemHighlight = new SpineItemHighlight(\n this.spineItem,\n this.layer,\n this.reader,\n annotation,\n isSelected$,\n )\n\n this.highlights.push(spineItemHighlight)\n })\n\n return of(this.highlights)\n }),\n shareReplay(1),\n takeUntil(this.destroy$),\n )\n\n this.tap$ = itemHighlights$.pipe(\n switchMap((highlights) =>\n merge(...highlights.map((highlight) => highlight.tap$)),\n ),\n )\n\n annotations$.subscribe()\n }\n\n layout() {\n const firstLayerElement =\n this.spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n layoutAnnotationLayer(firstLayerElement, this.layer)\n\n return forkJoin(\n this.highlights.map((highlight) => highlight.render()),\n ).pipe(defaultIfEmpty(null))\n }\n\n getHighlightsForTarget(target: EventTarget) {\n return this.highlights.filter(\n (highlight) => target instanceof Node && highlight.isWithinTarget(target),\n )\n }\n\n destroy() {\n super.destroy()\n\n this.layer.remove()\n }\n}\n","import { DestroyableClass, type Reader } from \"@prose-reader/core\"\nimport {\n BehaviorSubject,\n defaultIfEmpty,\n forkJoin,\n map,\n merge,\n type Observable,\n switchMap,\n} from \"rxjs\"\nimport { SpineItemHighlights } from \"./SpineItemHighlights\"\nimport type { RuntimeAnnotation } from \"./types\"\n\nexport class ReaderHighlights extends DestroyableClass {\n private spineItemHighlights = new BehaviorSubject<SpineItemHighlights[]>([])\n\n public tap$: SpineItemHighlights[\"tap$\"]\n\n constructor(\n private reader: Reader,\n private highlights: Observable<RuntimeAnnotation[]>,\n private selectedHighlight: Observable<string | undefined>,\n ) {\n super()\n\n this.reader.hookManager.register(\n \"item.onDocumentLoad\",\n ({ itemId, destroy }) => {\n const spineItem = reader.spineItemsManager.get(itemId)\n\n if (!spineItem) return\n\n const spineItemHighlights$ = this.highlights.pipe(\n map((highlights) =>\n highlights.filter(\n (highlight) => highlight.itemIndex === spineItem.item.index,\n ),\n ),\n )\n\n const spineItemHighlights = new SpineItemHighlights(\n spineItemHighlights$,\n spineItem,\n reader,\n this.selectedHighlight,\n )\n\n this.spineItemHighlights.next([\n ...this.spineItemHighlights.getValue(),\n spineItemHighlights,\n ])\n\n destroy(() => {\n this.spineItemHighlights.next(\n this.spineItemHighlights\n .getValue()\n .filter((layer) => layer !== spineItemHighlights),\n )\n\n spineItemHighlights.destroy()\n })\n },\n )\n\n this.tap$ = this.spineItemHighlights.pipe(\n switchMap((layers) => merge(...layers.map((layer) => layer.tap$))),\n )\n }\n\n getHighlightsForTarget = (target: EventTarget) => {\n return this.spineItemHighlights\n .getValue()\n .flatMap((layer) => layer.getHighlightsForTarget(target))\n .map((annotation) => annotation.highlight)\n }\n\n isTargetWithinHighlight = (target: EventTarget) => {\n return !!this.getHighlightsForTarget(target).length\n }\n\n public layout() {\n return forkJoin(\n this.spineItemHighlights.value.map((item) => item.layout()),\n ).pipe(defaultIfEmpty(null))\n }\n}\n","const y = (e, n) => e === n ? !0 : e.length !== n.length ? !1 : e.every((t, o) => t === n[o]), f = (e) => e.split(/[#?]/)[0]?.split(\".\").pop()?.trim() || \"\";\nfunction d(e) {\n const n = [];\n if (e.length === 0)\n return \"\";\n if (typeof e[0] != \"string\")\n throw new TypeError(`Url must be a string. Received ${e[0]}`);\n e[0].match(/^[^/:]+:\\/*$/) && e.length > 1 && (e[0] = e.shift() + e[0]), e[0].match(/^file:\\/\\/\\//) ? e[0] = e[0].replace(/^([^/:]+):\\/*/, \"$1:///\") : e[0] = e[0].replace(/^([^/:]+):\\/*/, \"$1://\");\n for (let r = 0; r < e.length; r++) {\n let l = e[r];\n if (typeof l != \"string\")\n throw new TypeError(`Url must be a string. Received ${l}`);\n l !== \"\" && (r > 0 && (l = l.replace(/^[/]+/, \"\")), r < e.length - 1 ? l = l.replace(/[/]+$/, \"\") : l = l.replace(/[/]+$/, \"/\"), n.push(l));\n }\n let t = n.join(\"/\");\n t = t.replace(/\\/(\\?|&|#[^!])/g, \"$1\");\n const o = t.split(\"?\");\n return t = o.shift() + (o.length > 0 ? \"?\" : \"\") + o.join(\"&\"), t;\n}\nfunction R(...e) {\n const n = Array.from(Array.isArray(e[0]) ? e[0] : e);\n return d(n);\n}\nfunction $(e) {\n const n = e.split(\"/\");\n return n.pop(), n.join(\"/\");\n}\nconst h = (e) => {\n switch (f(e)) {\n case \"png\":\n return \"image/png\";\n case \"jpg\":\n return \"image/jpg\";\n case \"jpeg\":\n return \"image/jpeg\";\n case \"txt\":\n return \"text/plain\";\n case \"webp\":\n return \"image/webp\";\n case \"xhtml\":\n return \"application/xhtml+xml\";\n case \"mp3\":\n return \"audio/mpeg\";\n case \"m4a\":\n case \"m4b\":\n return \"audio/mp4\";\n case \"aac\":\n return \"audio/aac\";\n case \"ogg\":\n case \"oga\":\n return \"audio/ogg\";\n case \"wav\":\n return \"audio/wav\";\n case \"flac\":\n return \"audio/flac\";\n case \"opus\":\n return \"audio/opus\";\n }\n}, x = ({\n mimeType: e,\n uri: n\n}) => (e ?? h(n ?? \"\"))?.startsWith(\"application/xhtml+xml\"), _ = (e) => e.startsWith(\"image/\") || e.startsWith(\"audio/\") || e.startsWith(\"video/\"), C = (e) => {\n if (!e.length) return;\n const n = e.indexOf(\";\");\n return n >= 0 ? e.substring(0, n) : e;\n}, v = (e, n, t) => {\n if (Object.is(e, n))\n return !0;\n if (typeof e != \"object\" || e === null || typeof n != \"object\" || n === null)\n return !1;\n const o = Object.keys(e), r = Object.keys(n);\n if (o.length !== r.length)\n return !1;\n const l = t?.customEqual ?? Object.is, c = e, s = n;\n for (const i of o)\n if (!Object.hasOwn(s, i) || !l(c[i], s[i]))\n return !1;\n return !0;\n}, F = (e, n) => e.reduce(\n (t, o) => {\n const r = n(o);\n return t[r] || (t[r] = []), t[r].push(o), t;\n },\n {}\n);\nfunction T(e, n) {\n const t = { ...e };\n for (const o in n)\n if (Object.hasOwn(n, o)) {\n const r = n[o];\n (r !== void 0 || !(o in e)) && (t[o] = r);\n }\n return t;\n}\nconst m = () => {\n if (!(typeof window > \"u\"))\n return window;\n};\nfunction b() {\n const e = m()?.__PROSE_READER_DEBUG;\n return e === !0 || e === \"true\";\n}\nconst E = (e, n) => typeof e == \"boolean\" ? {\n enabled: e,\n options: n\n} : {\n enabled: e?.enabled,\n options: e ?? n\n}, w = (e) => e.at(-1)?.color, u = (e) => {\n if (!e.length)\n return;\n if (!e.some((o) => o.color))\n return [e.map((o) => o.label).join(\" \")];\n let n = \"\";\n const t = [];\n for (const o of e)\n n += `%c${n ? ` ${o.label}` : o.label}`, t.push(\n o.color ? `color: ${o.color}` : \"\"\n );\n return [n, ...t];\n}, p = (e = [], n = b()) => {\n let t = n;\n const o = {\n enable: (c) => {\n l(c);\n },\n namespace: (c, s, i) => {\n const a = E(\n s,\n i\n ), g = a.options?.color ?? w(e);\n return p(\n [\n ...e,\n {\n label: `[${c}]`,\n color: g\n }\n ],\n a.enabled ?? t\n );\n },\n isEnabled: () => t,\n debug: () => {\n },\n info: () => {\n },\n log: () => {\n },\n groupCollapsed: () => {\n },\n groupEnd: () => {\n },\n getGroupArgs: (c) => {\n const s = u(e);\n if (!s)\n return [c];\n const [i, ...a] = s;\n return [`${i} ${c}`, ...a];\n },\n warn: () => {\n },\n error: () => {\n }\n }, r = (c) => {\n if (!c) {\n o.debug = () => {\n }, o.info = () => {\n }, o.log = () => {\n }, o.groupCollapsed = () => {\n }, o.groupEnd = () => {\n }, o.warn = () => {\n }, o.error = () => {\n };\n return;\n }\n const s = u(e) ?? [];\n o.debug = Function.prototype.bind.call(\n console.debug,\n console,\n ...s\n ), o.info = Function.prototype.bind.call(\n console.info,\n console,\n ...s\n ), o.log = Function.prototype.bind.call(\n console.log,\n console,\n ...s\n ), o.groupCollapsed = Function.prototype.bind.call(\n console.groupCollapsed,\n console\n ), o.groupEnd = Function.prototype.bind.call(console.groupEnd, console), o.warn = Function.prototype.bind.call(\n console.warn,\n console,\n ...s\n ), o.error = Function.prototype.bind.call(\n console.error,\n console,\n ...s\n );\n }, l = (c) => {\n t !== c && (t = c, r(t));\n };\n return r(t), o;\n}, M = p(), O = \"prose-reader-resource-error\", k = (e) => e.replaceAll(\"&\", \"&\").replaceAll('\"', \""\").replaceAll(\"'\", \"'\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\nexport {\n O as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,\n M as Report,\n y as arrayEqual,\n h as detectMimeTypeFromName,\n k as escapeXmlAttributeValue,\n $ as getParentPath,\n f as getUrlExtension,\n F as groupBy,\n _ as isMediaContentMimeType,\n v as isShallowEqual,\n x as isXmlBasedMimeType,\n C as parseContentType,\n T as shallowMergeIfDefined,\n R as urlJoin\n};\n//# sourceMappingURL=index.js.map\n","import { Report } from \"@prose-reader/shared\"\nimport { name } from \"../package.json\"\n\nconst IS_DEBUG_ENABLED = true\n\nexport const report = Report.namespace(name, IS_DEBUG_ENABLED)\n","import { ReactiveEntity } from \"@prose-reader/core\"\nimport type { AnnotationsEnhancerOptions } from \"./types\"\n\nexport class Settings extends ReactiveEntity<AnnotationsEnhancerOptions> {\n update(settings: AnnotationsEnhancerOptions) {\n super.mergeCompare(settings)\n }\n}\n","import {\n generateRootCfi,\n isShallowEqual,\n type Reader,\n} from \"@prose-reader/core\"\nimport {\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n map,\n merge,\n NEVER,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport { ReaderHighlights } from \"./annotations/ReaderHighlights\"\nimport type { RuntimeAnnotation } from \"./annotations/types\"\nimport { report } from \"./report\"\nimport { Settings } from \"./Settings\"\nimport type {\n AnnotateAbsolutePageParams,\n AnnotateParams,\n AnnotationsEnhancerAPI,\n AnnotationsEnhancerOptions,\n} from \"./types\"\n\nexport type { AnnotationsEnhancerAPI }\n\nexport const annotationsEnhancer =\n <InheritOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (\n options: InheritOptions & { annotations?: AnnotationsEnhancerOptions },\n ): InheritOutput & AnnotationsEnhancerAPI => {\n const { annotations: annotationsOptions, ...rest } = options\n const settings = new Settings({\n annotations$: annotationsOptions?.annotations$,\n })\n const reader = next(rest as InheritOptions)\n\n const annotations$ = settings\n .watch(\"annotations$\")\n .pipe(switchMap((annotations) => annotations ?? NEVER))\n\n const runtimeAnnotations$ = annotations$.pipe(\n distinctUntilChanged(isShallowEqual),\n map((annotations) => {\n const runtimeAnnotations: RuntimeAnnotation[] = annotations.map(\n (annotation) => {\n const { itemIndex = 0 } = reader.cfi.parseCfi(annotation.cfi ?? \"\")\n\n const highlight = {\n ...annotation,\n itemIndex,\n } satisfies RuntimeAnnotation\n\n return highlight\n },\n )\n\n return runtimeAnnotations\n }),\n tap((annotations) => {\n report.debug(\"annotations\", annotations)\n }),\n shareReplay({\n refCount: true,\n bufferSize: 1,\n }),\n )\n\n const selectedHighlight$ = runtimeAnnotations$.pipe(\n map(\n (annotations) =>\n annotations.find((annotation) => annotation.selected)?.id,\n ),\n distinctUntilChanged(),\n shareReplay({ refCount: true, bufferSize: 1 }),\n )\n\n const readerHighlights = new ReaderHighlights(\n reader,\n runtimeAnnotations$,\n selectedHighlight$,\n )\n\n const resolveItemInformation = (params: {\n absolutePageIndex?: number\n itemIndex?: number\n }) => {\n if (params.itemIndex !== undefined)\n return { itemIndex: params.itemIndex, pageIndex: undefined }\n\n if (params.absolutePageIndex !== undefined) {\n return reader.spine.pages.fromAbsolutePageIndex(\n params.absolutePageIndex,\n )\n }\n\n return undefined\n }\n\n const createAnnotation = ({\n selection,\n ...rest\n }: (AnnotateParams | AnnotateAbsolutePageParams) & {\n absolutePageIndex?: number\n }) => {\n const { itemIndex, pageIndex = 0 } = resolveItemInformation(rest) ?? {}\n const spineItem = reader.spineItemsManager.get(itemIndex)\n const id = window.crypto.randomUUID()\n\n if (!spineItem) return undefined\n\n const range = selection\n ? reader.selection.createOrderedRangeFromSelection({\n selection,\n spineItem,\n })\n : undefined\n\n const pageEntry = reader.spine.pages.fromSpineItemPageIndex(\n spineItem,\n pageIndex,\n )\n\n const cfiWithRangeOrFirstNodeOrRoot = range\n ? reader.cfi.generateCfiFromRange(range, spineItem.item)\n : pageEntry?.firstVisibleNode\n ? reader.cfi.generateCfiForSpineItemPage({\n spineItem: spineItem.item,\n pageNode: pageEntry.firstVisibleNode,\n })\n : generateRootCfi(spineItem.item)\n\n const highlight = {\n cfi: cfiWithRangeOrFirstNodeOrRoot,\n itemIndex: spineItem.index,\n id,\n ...rest,\n } satisfies RuntimeAnnotation\n\n return highlight\n }\n\n const renderAnnotations$ = merge(runtimeAnnotations$, reader.layout$).pipe(\n debounceTime(50),\n switchMap(() => readerHighlights.layout()),\n )\n\n const candidates$ = reader.layoutInfo$.pipe(\n switchMap(({ pages }) =>\n combineLatest(\n pages.map((page) => {\n const item = reader.spineItemsManager.get(page.itemIndex)\n\n if (!item) return of(false)\n\n // pre-paginated can always be annotated on their unique page\n if (item.renditionLayout === \"pre-paginated\") return of(true)\n\n if (page.firstVisibleNode) return of(true)\n\n return of(false)\n }),\n ),\n ),\n )\n\n merge(renderAnnotations$, annotations$)\n .pipe(takeUntil(reader.$.destroy$))\n .subscribe()\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_ANNOTATIONS: true,\n destroy: () => {\n readerHighlights.destroy()\n reader.destroy()\n },\n annotations: {\n annotations$: runtimeAnnotations$,\n highlightTap$: readerHighlights.tap$,\n candidates$,\n isTargetWithinHighlight: readerHighlights.isTargetWithinHighlight,\n createAnnotation,\n update: settings.update.bind(settings),\n },\n }\n }\n"],"names":["DestroyableClass","fromEvent","map","share","shareReplay","tap","isSelected","merge","takeUntil","first","withLatestFrom","switchMap","distinctUntilChanged","of","forkJoin","defaultIfEmpty","highlights","BehaviorSubject","Report","ReactiveEntity","NEVER","isShallowEqual","rest","generateRootCfi","debounceTime","combineLatest"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.cjs","sources":["../src/annotations/utils.ts","../src/annotations/SpineItemHighlight.ts","../src/annotations/SpineItemHighlights.ts","../src/annotations/ReaderHighlights.ts","../../shared/dist/index.js","../src/report.ts","../src/Settings.ts","../src/annotationsEnhancer.ts"],"sourcesContent":["import {\n setPropertyIfChanged,\n setStylePropertyIfChanged,\n} from \"@prose-reader/core\"\n\nexport const createElementForRange = (\n range: Range,\n container: HTMLElement,\n color: string,\n) => {\n // Get all rects and group them by line (based on vertical position)\n const rects = Array.from(range.getClientRects())\n const lineGroups = new Map<number, DOMRect[]>()\n\n rects.forEach((rect) => {\n const lineY = Math.round(rect.top) // Round to handle minor pixel differences\n if (!lineGroups.has(lineY)) {\n lineGroups.set(lineY, [])\n }\n lineGroups.get(lineY)?.push(rect)\n })\n\n // Create one highlight element per line\n return Array.from(lineGroups.values()).map((lineRects) => {\n // Find the leftmost and rightmost points\n const left = Math.min(...lineRects.map((r) => r.left))\n const right = Math.max(...lineRects.map((r) => r.right))\n const top = lineRects[0]?.top\n const height = lineRects[0]?.height\n\n const rectEltContainer = container.ownerDocument.createElement(\"div\")\n const rectElt = container.ownerDocument.createElement(\"div\")\n rectEltContainer.style.cssText = `\n position: absolute;\n width: ${right - left}px;\n height: ${height}px;\n top: ${top}px;\n left: ${left}px;\n box-sizing: border-box;\n border: 3px dashed transparent;\n `\n rectElt.style.cssText = `\n height: 100%;\n width: 100%;\n opacity: 40%;\n background-color: ${color}\n `\n\n rectEltContainer.appendChild(rectElt)\n\n return rectEltContainer\n })\n}\n\nexport const copyPositionStyle = (source: HTMLElement, target: HTMLElement) => {\n setPropertyIfChanged(target.style, `cssText`, source.style.cssText)\n}\n\nexport const createAnnotationLayer = (\n container: HTMLElement,\n layer: HTMLElement,\n) => {\n const annotationLayer = container.ownerDocument.createElement(\"div\")\n\n layoutAnnotationLayer(layer, annotationLayer)\n\n container.appendChild(annotationLayer)\n\n return annotationLayer\n}\n\nexport const layoutAnnotationLayer = (\n layer: HTMLElement,\n annotationLayer: HTMLElement,\n) => {\n copyPositionStyle(layer, annotationLayer)\n\n if (layer.style.position === \"\") {\n setStylePropertyIfChanged(annotationLayer.style, `position`, `absolute`)\n setStylePropertyIfChanged(annotationLayer.style, `top`, `0`)\n }\n\n // annotationLayer.style.backgroundColor = \"red\"\n setStylePropertyIfChanged(annotationLayer.style, `opacity`, `1`)\n setStylePropertyIfChanged(annotationLayer.style, `pointer-events`, `none`)\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n setStylePropertyIfChanged,\n} from \"@prose-reader/core\"\nimport {\n first,\n fromEvent,\n map,\n merge,\n type Observable,\n share,\n shareReplay,\n takeUntil,\n tap,\n withLatestFrom,\n} from \"rxjs\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createElementForRange } from \"./utils\"\n\nexport class SpineItemHighlight extends DestroyableClass {\n private container: HTMLElement\n public readonly tap$: Observable<{\n event: Event\n highlight: RuntimeAnnotation\n }>\n private resolvedCfi$: Observable<ReturnType<Reader[\"cfi\"][\"resolveCfi\"]>>\n\n constructor(\n private spineItem: SpineItem,\n private containerElement: HTMLElement,\n private reader: Reader,\n public highlight: RuntimeAnnotation,\n private isSelected: Observable<boolean>,\n ) {\n super()\n\n void this.spineItem\n void this.reader\n\n this.container = this.containerElement.ownerDocument.createElement(\"div\")\n this.container.dataset.highlightContainer = this.highlight.id\n this.containerElement.appendChild(this.container)\n\n this.tap$ = fromEvent(this.container, \"click\").pipe(\n map((event) => ({ event, highlight: this.highlight })),\n share(),\n )\n\n this.resolvedCfi$ = this.spineItem.watch(\"isLoaded\").pipe(\n map(() => this.reader.cfi.resolveCfi({ cfi: this.highlight.cfi })),\n shareReplay({ refCount: true, bufferSize: 1 }),\n )\n\n const updateStateOnSelection$ = this.isSelected.pipe(\n tap((isSelected) => {\n this.updateStateOnSelection(isSelected)\n }),\n )\n\n merge(this.resolvedCfi$, updateStateOnSelection$)\n .pipe(takeUntil(this.destroy$))\n .subscribe()\n }\n\n public updateStateOnSelection(isSelected: boolean) {\n Array.from(this.container.children).forEach((child) => {\n if (child instanceof HTMLElement) {\n setStylePropertyIfChanged(\n child.style,\n `border`,\n isSelected ? \"3px dashed red\" : \"3px dashed transparent\",\n )\n }\n })\n }\n\n public render() {\n return this.resolvedCfi$.pipe(\n first(),\n withLatestFrom(this.isSelected),\n map(([resolvedCfi, isSelected]) => {\n if (!resolvedCfi?.isCfiRange) return undefined\n\n const range = resolvedCfi.range\n\n this.container.innerHTML = \"\"\n\n /**\n * The nodes can be undefined if the cfi is not found.\n * This can happens if the item is not loaded (legit) or if the cfi\n * are just invalid.\n */\n if (!range) {\n return\n }\n\n const rectElements = createElementForRange(\n range,\n this.container,\n this.highlight.highlightColor ?? \"yellow\",\n )\n\n rectElements.forEach((elt) => {\n elt.style.pointerEvents = \"initial\"\n elt.style.cursor = \"pointer\"\n elt.dataset.highlightRect = this.highlight.id\n\n this.container.appendChild(elt)\n })\n\n const firstElement = rectElements[0]\n\n if (firstElement && this.highlight.notes) {\n const noteIcon = document.createElement(\"span\")\n noteIcon.textContent = \"📝\"\n noteIcon.style.position = \"absolute\"\n noteIcon.style.top = \"0\"\n noteIcon.style.left = \"0\"\n noteIcon.style.transform = \"translate(-0%, -80%)\"\n noteIcon.style.fontSize = \"18px\"\n noteIcon.style.opacity = \"50%\"\n firstElement.appendChild(noteIcon)\n }\n\n this.updateStateOnSelection(isSelected)\n\n return null\n }),\n )\n }\n\n isWithinTarget(target: Node) {\n return this.container.contains(target)\n }\n\n public destroy() {\n super.destroy()\n\n this.container.remove()\n }\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n defaultIfEmpty,\n distinctUntilChanged,\n forkJoin,\n map,\n merge,\n type Observable,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n} from \"rxjs\"\nimport { SpineItemHighlight } from \"./SpineItemHighlight\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createAnnotationLayer, layoutAnnotationLayer } from \"./utils\"\n\nexport class SpineItemHighlights extends DestroyableClass {\n private layer: HTMLElement\n private highlights: SpineItemHighlight[] = []\n\n public readonly tap$: SpineItemHighlight[\"tap$\"]\n\n constructor(\n private annotations$: Observable<RuntimeAnnotation[]>,\n private spineItem: SpineItem,\n private reader: Reader,\n private selectedHighlight: Observable<string | undefined>,\n ) {\n super()\n\n const firstLayerElement =\n spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n this.layer = createAnnotationLayer(\n this.spineItem.containerElement,\n firstLayerElement,\n )\n\n const itemHighlights$ = this.annotations$.pipe(\n switchMap((annotations) => {\n const newAnnotations = annotations.filter(\n (annotation) =>\n !this.highlights.some(\n (highlight) => highlight.highlight.id === annotation.id,\n ),\n )\n const oldAnnotations = this.highlights.filter(\n (highlight) =>\n highlight.highlight.itemIndex !== this.spineItem.item.index,\n )\n\n this.highlights.forEach((highlight, index) => {\n const existingAnnotation = annotations.find(\n (annotation) => annotation.id === highlight.highlight.id,\n )\n\n if (oldAnnotations.includes(highlight)) {\n highlight.destroy()\n this.highlights = this.highlights.splice(index, 1)\n }\n\n if (existingAnnotation) {\n highlight.highlight = existingAnnotation\n }\n })\n\n newAnnotations.forEach((annotation) => {\n if (annotation.itemIndex !== this.spineItem.item.index) return\n\n const isSelected$ = this.selectedHighlight.pipe(\n map((id) => id === annotation.id),\n distinctUntilChanged(),\n )\n\n const spineItemHighlight = new SpineItemHighlight(\n this.spineItem,\n this.layer,\n this.reader,\n annotation,\n isSelected$,\n )\n\n this.highlights.push(spineItemHighlight)\n })\n\n return of(this.highlights)\n }),\n shareReplay(1),\n takeUntil(this.destroy$),\n )\n\n this.tap$ = itemHighlights$.pipe(\n switchMap((highlights) =>\n merge(...highlights.map((highlight) => highlight.tap$)),\n ),\n )\n\n annotations$.subscribe()\n }\n\n layout() {\n const firstLayerElement =\n this.spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n layoutAnnotationLayer(firstLayerElement, this.layer)\n\n return forkJoin(\n this.highlights.map((highlight) => highlight.render()),\n ).pipe(defaultIfEmpty(null))\n }\n\n getHighlightsForTarget(target: EventTarget) {\n return this.highlights.filter(\n (highlight) => target instanceof Node && highlight.isWithinTarget(target),\n )\n }\n\n destroy() {\n super.destroy()\n\n this.layer.remove()\n }\n}\n","import { DestroyableClass, type Reader } from \"@prose-reader/core\"\nimport {\n BehaviorSubject,\n defaultIfEmpty,\n forkJoin,\n map,\n merge,\n type Observable,\n switchMap,\n} from \"rxjs\"\nimport { SpineItemHighlights } from \"./SpineItemHighlights\"\nimport type { RuntimeAnnotation } from \"./types\"\n\nexport class ReaderHighlights extends DestroyableClass {\n private spineItemHighlights = new BehaviorSubject<SpineItemHighlights[]>([])\n\n public tap$: SpineItemHighlights[\"tap$\"]\n\n constructor(\n private reader: Reader,\n private highlights: Observable<RuntimeAnnotation[]>,\n private selectedHighlight: Observable<string | undefined>,\n ) {\n super()\n\n const cleanupByItemId = new Map<string, () => void>()\n\n this.reader.hookManager.register(\n \"item.onDocumentLoad\",\n async ({ itemId }) => {\n cleanupByItemId.get(itemId)?.()\n cleanupByItemId.delete(itemId)\n\n const spineItem = reader.spineItemsManager.get(itemId)\n\n if (!spineItem) return\n\n const spineItemHighlights$ = this.highlights.pipe(\n map((highlights) =>\n highlights.filter(\n (highlight) => highlight.itemIndex === spineItem.item.index,\n ),\n ),\n )\n\n const spineItemHighlights = new SpineItemHighlights(\n spineItemHighlights$,\n spineItem,\n reader,\n this.selectedHighlight,\n )\n\n this.spineItemHighlights.next([\n ...this.spineItemHighlights.getValue(),\n spineItemHighlights,\n ])\n\n const cleanup = () => {\n this.spineItemHighlights.next(\n this.spineItemHighlights\n .getValue()\n .filter((layer) => layer !== spineItemHighlights),\n )\n\n spineItemHighlights.destroy()\n }\n\n cleanupByItemId.set(itemId, cleanup)\n },\n )\n\n this.reader.hookManager.register(\n \"item.onDocumentUnload\",\n async ({ itemId }) => {\n cleanupByItemId.get(itemId)?.()\n cleanupByItemId.delete(itemId)\n },\n )\n\n this.tap$ = this.spineItemHighlights.pipe(\n switchMap((layers) => merge(...layers.map((layer) => layer.tap$))),\n )\n }\n\n getHighlightsForTarget = (target: EventTarget) => {\n return this.spineItemHighlights\n .getValue()\n .flatMap((layer) => layer.getHighlightsForTarget(target))\n .map((annotation) => annotation.highlight)\n }\n\n isTargetWithinHighlight = (target: EventTarget) => {\n return !!this.getHighlightsForTarget(target).length\n }\n\n public layout() {\n return forkJoin(\n this.spineItemHighlights.value.map((item) => item.layout()),\n ).pipe(defaultIfEmpty(null))\n }\n}\n","const y = (e, n) => e === n ? !0 : e.length !== n.length ? !1 : e.every((t, o) => t === n[o]), f = (e) => e.split(/[#?]/)[0]?.split(\".\").pop()?.trim() || \"\";\nfunction d(e) {\n const n = [];\n if (e.length === 0)\n return \"\";\n if (typeof e[0] != \"string\")\n throw new TypeError(`Url must be a string. Received ${e[0]}`);\n e[0].match(/^[^/:]+:\\/*$/) && e.length > 1 && (e[0] = e.shift() + e[0]), e[0].match(/^file:\\/\\/\\//) ? e[0] = e[0].replace(/^([^/:]+):\\/*/, \"$1:///\") : e[0] = e[0].replace(/^([^/:]+):\\/*/, \"$1://\");\n for (let r = 0; r < e.length; r++) {\n let l = e[r];\n if (typeof l != \"string\")\n throw new TypeError(`Url must be a string. Received ${l}`);\n l !== \"\" && (r > 0 && (l = l.replace(/^[/]+/, \"\")), r < e.length - 1 ? l = l.replace(/[/]+$/, \"\") : l = l.replace(/[/]+$/, \"/\"), n.push(l));\n }\n let t = n.join(\"/\");\n t = t.replace(/\\/(\\?|&|#[^!])/g, \"$1\");\n const o = t.split(\"?\");\n return t = o.shift() + (o.length > 0 ? \"?\" : \"\") + o.join(\"&\"), t;\n}\nfunction R(...e) {\n const n = Array.from(Array.isArray(e[0]) ? e[0] : e);\n return d(n);\n}\nfunction $(e) {\n const n = e.split(\"/\");\n return n.pop(), n.join(\"/\");\n}\nconst h = (e) => {\n switch (f(e)) {\n case \"png\":\n return \"image/png\";\n case \"jpg\":\n return \"image/jpg\";\n case \"jpeg\":\n return \"image/jpeg\";\n case \"txt\":\n return \"text/plain\";\n case \"webp\":\n return \"image/webp\";\n case \"xhtml\":\n return \"application/xhtml+xml\";\n case \"mp3\":\n return \"audio/mpeg\";\n case \"m4a\":\n case \"m4b\":\n return \"audio/mp4\";\n case \"aac\":\n return \"audio/aac\";\n case \"ogg\":\n case \"oga\":\n return \"audio/ogg\";\n case \"wav\":\n return \"audio/wav\";\n case \"flac\":\n return \"audio/flac\";\n case \"opus\":\n return \"audio/opus\";\n }\n}, x = ({\n mimeType: e,\n uri: n\n}) => (e ?? h(n ?? \"\"))?.startsWith(\"application/xhtml+xml\"), _ = (e) => e.startsWith(\"image/\") || e.startsWith(\"audio/\") || e.startsWith(\"video/\"), C = (e) => {\n if (!e.length) return;\n const n = e.indexOf(\";\");\n return n >= 0 ? e.substring(0, n) : e;\n}, v = (e, n, t) => {\n if (Object.is(e, n))\n return !0;\n if (typeof e != \"object\" || e === null || typeof n != \"object\" || n === null)\n return !1;\n const o = Object.keys(e), r = Object.keys(n);\n if (o.length !== r.length)\n return !1;\n const l = t?.customEqual ?? Object.is, c = e, s = n;\n for (const i of o)\n if (!Object.hasOwn(s, i) || !l(c[i], s[i]))\n return !1;\n return !0;\n}, F = (e, n) => e.reduce(\n (t, o) => {\n const r = n(o);\n return t[r] || (t[r] = []), t[r].push(o), t;\n },\n {}\n);\nfunction T(e, n) {\n const t = { ...e };\n for (const o in n)\n if (Object.hasOwn(n, o)) {\n const r = n[o];\n (r !== void 0 || !(o in e)) && (t[o] = r);\n }\n return t;\n}\nconst m = () => {\n if (!(typeof window > \"u\"))\n return window;\n};\nfunction b() {\n const e = m()?.__PROSE_READER_DEBUG;\n return e === !0 || e === \"true\";\n}\nconst E = (e, n) => typeof e == \"boolean\" ? {\n enabled: e,\n options: n\n} : {\n enabled: e?.enabled,\n options: e ?? n\n}, w = (e) => e.at(-1)?.color, u = (e) => {\n if (!e.length)\n return;\n if (!e.some((o) => o.color))\n return [e.map((o) => o.label).join(\" \")];\n let n = \"\";\n const t = [];\n for (const o of e)\n n += `%c${n ? ` ${o.label}` : o.label}`, t.push(\n o.color ? `color: ${o.color}` : \"\"\n );\n return [n, ...t];\n}, p = (e = [], n = b()) => {\n let t = n;\n const o = {\n enable: (c) => {\n l(c);\n },\n namespace: (c, s, i) => {\n const a = E(\n s,\n i\n ), g = a.options?.color ?? w(e);\n return p(\n [\n ...e,\n {\n label: `[${c}]`,\n color: g\n }\n ],\n a.enabled ?? t\n );\n },\n isEnabled: () => t,\n debug: () => {\n },\n info: () => {\n },\n log: () => {\n },\n groupCollapsed: () => {\n },\n groupEnd: () => {\n },\n getGroupArgs: (c) => {\n const s = u(e);\n if (!s)\n return [c];\n const [i, ...a] = s;\n return [`${i} ${c}`, ...a];\n },\n warn: () => {\n },\n error: () => {\n }\n }, r = (c) => {\n if (!c) {\n o.debug = () => {\n }, o.info = () => {\n }, o.log = () => {\n }, o.groupCollapsed = () => {\n }, o.groupEnd = () => {\n }, o.warn = () => {\n }, o.error = () => {\n };\n return;\n }\n const s = u(e) ?? [];\n o.debug = Function.prototype.bind.call(\n console.debug,\n console,\n ...s\n ), o.info = Function.prototype.bind.call(\n console.info,\n console,\n ...s\n ), o.log = Function.prototype.bind.call(\n console.log,\n console,\n ...s\n ), o.groupCollapsed = Function.prototype.bind.call(\n console.groupCollapsed,\n console\n ), o.groupEnd = Function.prototype.bind.call(console.groupEnd, console), o.warn = Function.prototype.bind.call(\n console.warn,\n console,\n ...s\n ), o.error = Function.prototype.bind.call(\n console.error,\n console,\n ...s\n );\n }, l = (c) => {\n t !== c && (t = c, r(t));\n };\n return r(t), o;\n}, M = p(), O = \"prose-reader-resource-error\", k = (e) => e.replaceAll(\"&\", \"&\").replaceAll('\"', \""\").replaceAll(\"'\", \"'\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\nexport {\n O as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,\n M as Report,\n y as arrayEqual,\n h as detectMimeTypeFromName,\n k as escapeXmlAttributeValue,\n $ as getParentPath,\n f as getUrlExtension,\n F as groupBy,\n _ as isMediaContentMimeType,\n v as isShallowEqual,\n x as isXmlBasedMimeType,\n C as parseContentType,\n T as shallowMergeIfDefined,\n R as urlJoin\n};\n//# sourceMappingURL=index.js.map\n","import { Report } from \"@prose-reader/shared\"\nimport { name } from \"../package.json\"\n\nconst IS_DEBUG_ENABLED = true\n\nexport const report = Report.namespace(name, IS_DEBUG_ENABLED)\n","import { ReactiveEntity } from \"@prose-reader/core\"\nimport type { AnnotationsEnhancerOptions } from \"./types\"\n\nexport class Settings extends ReactiveEntity<AnnotationsEnhancerOptions> {\n update(settings: AnnotationsEnhancerOptions) {\n super.mergeCompare(settings)\n }\n}\n","import { isShallowEqual, type Reader } from \"@prose-reader/core\"\nimport {\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n map,\n merge,\n NEVER,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport { ReaderHighlights } from \"./annotations/ReaderHighlights\"\nimport type { RuntimeAnnotation } from \"./annotations/types\"\nimport { report } from \"./report\"\nimport { Settings } from \"./Settings\"\nimport type {\n AnnotateAbsolutePageParams,\n AnnotateParams,\n AnnotationsEnhancerAPI,\n AnnotationsEnhancerOptions,\n} from \"./types\"\n\nexport type { AnnotationsEnhancerAPI }\n\nexport const annotationsEnhancer =\n <InheritOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (\n options: InheritOptions & { annotations?: AnnotationsEnhancerOptions },\n ): InheritOutput & AnnotationsEnhancerAPI => {\n const { annotations: annotationsOptions, ...rest } = options\n const settings = new Settings({\n annotations$: annotationsOptions?.annotations$,\n })\n const reader = next(rest as InheritOptions)\n\n const annotations$ = settings\n .watch(\"annotations$\")\n .pipe(switchMap((annotations) => annotations ?? NEVER))\n\n const runtimeAnnotations$ = annotations$.pipe(\n distinctUntilChanged(isShallowEqual),\n map((annotations) => {\n const runtimeAnnotations: RuntimeAnnotation[] = annotations.map(\n (annotation) => {\n const { itemIndex = 0 } = reader.cfi.parseCfi(annotation.cfi ?? \"\")\n\n const highlight = {\n ...annotation,\n itemIndex,\n } satisfies RuntimeAnnotation\n\n return highlight\n },\n )\n\n return runtimeAnnotations\n }),\n tap((annotations) => {\n report.debug(\"annotations\", annotations)\n }),\n shareReplay({\n refCount: true,\n bufferSize: 1,\n }),\n )\n\n const selectedHighlight$ = runtimeAnnotations$.pipe(\n map(\n (annotations) =>\n annotations.find((annotation) => annotation.selected)?.id,\n ),\n distinctUntilChanged(),\n shareReplay({ refCount: true, bufferSize: 1 }),\n )\n\n const readerHighlights = new ReaderHighlights(\n reader,\n runtimeAnnotations$,\n selectedHighlight$,\n )\n\n const resolveItemInformation = (params: {\n absolutePageIndex?: number\n itemIndex?: number\n }) => {\n if (params.itemIndex !== undefined)\n return { itemIndex: params.itemIndex, pageIndex: undefined }\n\n if (params.absolutePageIndex !== undefined) {\n return reader.spine.pages.fromAbsolutePageIndex(\n params.absolutePageIndex,\n )\n }\n\n return undefined\n }\n\n const createAnnotation = ({\n selection,\n ...rest\n }: (AnnotateParams | AnnotateAbsolutePageParams) & {\n absolutePageIndex?: number\n }) => {\n const { itemIndex, pageIndex = 0 } = resolveItemInformation(rest) ?? {}\n const spineItem = reader.spineItemsManager.get(itemIndex)\n const id = window.crypto.randomUUID()\n\n if (!spineItem) return undefined\n\n const range = selection\n ? reader.selection.createOrderedRangeFromSelection({\n selection,\n spineItem,\n })\n : undefined\n\n const pageEntry = reader.spine.pages.fromSpineItemPageIndex(\n spineItem,\n pageIndex,\n )\n\n const cfiWithRangeOrFirstNodeOrRoot = range\n ? reader.cfi.generateCfiFromRange(range, spineItem.item)\n : pageEntry?.firstVisibleNode\n ? reader.cfi.generateCfiForSpineItemPage({\n spineItem: spineItem.item,\n pageNode: pageEntry.firstVisibleNode,\n })\n : reader.cfi.generateRootCfi(spineItem.item)\n\n const highlight = {\n cfi: cfiWithRangeOrFirstNodeOrRoot,\n itemIndex: spineItem.index,\n id,\n ...rest,\n } satisfies RuntimeAnnotation\n\n return highlight\n }\n\n const renderAnnotations$ = merge(runtimeAnnotations$, reader.layout$).pipe(\n debounceTime(50),\n switchMap(() => readerHighlights.layout()),\n )\n\n const candidates$ = reader.layoutInfo$.pipe(\n switchMap(({ pages }) =>\n combineLatest(\n pages.map((page) => {\n const item = reader.spineItemsManager.get(page.itemIndex)\n\n if (!item) return of(false)\n\n // pre-paginated can always be annotated on their unique page\n if (item.renditionLayout === \"pre-paginated\") return of(true)\n\n if (page.firstVisibleNode) return of(true)\n\n return of(false)\n }),\n ),\n ),\n )\n\n merge(renderAnnotations$, annotations$)\n .pipe(takeUntil(reader.$.destroy$))\n .subscribe()\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_ANNOTATIONS: true,\n destroy: () => {\n readerHighlights.destroy()\n reader.destroy()\n },\n annotations: {\n annotations$: runtimeAnnotations$,\n highlightTap$: readerHighlights.tap$,\n candidates$,\n isTargetWithinHighlight: readerHighlights.isTargetWithinHighlight,\n createAnnotation,\n update: settings.update.bind(settings),\n },\n }\n }\n"],"names":["setPropertyIfChanged","setStylePropertyIfChanged","DestroyableClass","fromEvent","map","share","shareReplay","tap","isSelected","merge","takeUntil","first","withLatestFrom","switchMap","distinctUntilChanged","of","forkJoin","defaultIfEmpty","highlights","BehaviorSubject","Report","ReactiveEntity","NEVER","isShallowEqual","rest","debounceTime","combineLatest"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prose-reader/enhancer-annotations",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.297.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.umd.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -21,5 +21,5 @@
|
|
|
21
21
|
"peerDependencies": {
|
|
22
22
|
"@prose-reader/core": "^1.117.0"
|
|
23
23
|
},
|
|
24
|
-
"gitHead": "
|
|
24
|
+
"gitHead": "28c3e3cc50036fc624fc48111e0461251026c177"
|
|
25
25
|
}
|