@prose-reader/enhancer-annotations 1.209.0 → 1.210.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 +22 -21
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +22 -21
- package/dist/index.umd.cjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -350,27 +350,28 @@ const consolidate = (highlight, reader) => {
|
|
|
350
350
|
);
|
|
351
351
|
};
|
|
352
352
|
|
|
353
|
-
const
|
|
353
|
+
const d = () => {
|
|
354
|
+
if (!(typeof window > "u"))
|
|
355
|
+
return window;
|
|
356
|
+
};
|
|
357
|
+
function E() {
|
|
358
|
+
var n;
|
|
359
|
+
const e = (n = d()) == null ? void 0 : n.__PROSE_READER_DEBUG;
|
|
360
|
+
return e === true || e === "true";
|
|
361
|
+
}
|
|
362
|
+
const i = (e) => `[${e}]`, s = (e, n = E()) => ({
|
|
354
363
|
namespace: (t, o) => s(`${e} ${t}`, o),
|
|
355
|
-
debug:
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
} : e ? Function.prototype.bind.call(console.warn, console, i(e)) : Function.prototype.bind.call(console.warn, console),
|
|
367
|
-
error: !n || (window == null ? void 0 : window.__PROSE_READER_DEBUG) !== true ? () => {
|
|
368
|
-
} : e ? Function.prototype.bind.call(
|
|
369
|
-
console.error,
|
|
370
|
-
console,
|
|
371
|
-
i(e)
|
|
372
|
-
) : Function.prototype.bind.call(console.error, console)
|
|
373
|
-
}), D = {
|
|
364
|
+
debug: n ? e ? Function.prototype.bind.call(console.debug, console, i(e)) : Function.prototype.bind.call(console.debug, console) : () => {
|
|
365
|
+
},
|
|
366
|
+
info: n ? e ? Function.prototype.bind.call(console.info, console, i(e)) : Function.prototype.bind.call(console.info, console) : () => {
|
|
367
|
+
},
|
|
368
|
+
log: n ? e ? Function.prototype.bind.call(console.log, console, i(e)) : Function.prototype.bind.call(console.log, console) : () => {
|
|
369
|
+
},
|
|
370
|
+
warn: n ? e ? Function.prototype.bind.call(console.warn, console, i(e)) : Function.prototype.bind.call(console.warn, console) : () => {
|
|
371
|
+
},
|
|
372
|
+
error: n ? e ? Function.prototype.bind.call(console.error, console, i(e)) : Function.prototype.bind.call(console.error, console) : () => {
|
|
373
|
+
}
|
|
374
|
+
}), b = {
|
|
374
375
|
...s(),
|
|
375
376
|
namespace: (e, n) => s(e, n)
|
|
376
377
|
};
|
|
@@ -378,7 +379,7 @@ const i = (e) => `[${e}]`, s = (e, n) => ({
|
|
|
378
379
|
const name = "@prose-reader/enhancer-annotations";
|
|
379
380
|
|
|
380
381
|
const IS_DEBUG_ENABLED = true;
|
|
381
|
-
const report =
|
|
382
|
+
const report = b.namespace(name, IS_DEBUG_ENABLED);
|
|
382
383
|
|
|
383
384
|
const annotationsEnhancer = (next) => (options) => {
|
|
384
385
|
const reader = next(options);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/Commands.ts","../src/highlights/Highlight.ts","../src/highlights/utils.ts","../src/highlights/SpineItemHighlight.ts","../src/highlights/SpineItemHighlights.ts","../src/highlights/ReaderHighlights.ts","../src/highlights/consolidate.ts","../../shared/dist/index.js","../src/report.ts","../src/annotationsEnhancer.ts"],"sourcesContent":["import { DestroyableClass } from \"@prose-reader/core\"\nimport { filter, Subject } from \"rxjs\"\nimport type { SerializableHighlight } from \"./types\"\n\ntype HighlightParams = {\n selection: Selection\n itemIndex: number\n color?: string\n contents?: string[]\n}\n\ntype Command =\n | { type: \"highlight\"; data: HighlightParams }\n | { type: \"add\"; data: SerializableHighlight | SerializableHighlight[] }\n | { type: \"delete\"; id: string }\n | {\n type: \"update\"\n id: string\n data: Pick<HighlightParams, \"color\" | \"contents\">\n }\n | { type: \"select\"; id: string | undefined }\n | { type: \"reset\" }\n\nexport class Commands extends DestroyableClass {\n private commandSubject = new Subject<Command>()\n\n public readonly highlight$ = this.commandSubject.pipe(\n filter((command) => command.type === \"highlight\"),\n )\n public readonly add$ = this.commandSubject.pipe(\n filter((command) => command.type === \"add\"),\n )\n public readonly delete$ = this.commandSubject.pipe(\n filter((command) => command.type === \"delete\"),\n )\n public readonly update$ = this.commandSubject.pipe(\n filter((command) => command.type === \"update\"),\n )\n public readonly select$ = this.commandSubject.pipe(\n filter((command) => command.type === \"select\"),\n )\n public readonly reset$ = this.commandSubject.pipe(\n filter((command) => command.type === \"reset\"),\n )\n\n highlight = (params: HighlightParams) => {\n this.commandSubject.next({ type: \"highlight\", data: params })\n }\n\n add = (data: SerializableHighlight | SerializableHighlight[]) => {\n this.commandSubject.next({ type: \"add\", data })\n }\n\n delete = (id: string) => {\n this.commandSubject.next({ type: \"delete\", id })\n }\n\n update = (id: string, data: Pick<HighlightParams, \"color\" | \"contents\">) => {\n this.commandSubject.next({ type: \"update\", id, data })\n }\n\n select = (id: string | undefined) => {\n this.commandSubject.next({ type: \"select\", id })\n }\n\n reset = () => {\n this.commandSubject.next({ type: \"reset\" })\n }\n\n destroy() {\n super.destroy()\n this.commandSubject.complete()\n }\n}\n","import type { Commands } from \"../Commands\"\nimport type { SerializableHighlight } from \"../types\"\n\nexport class ProseHighlight {\n public cfi: string\n public endCfi: string | undefined\n public itemIndex?: number\n public color?: string\n public contents?: string[]\n public range?: Range\n public selectionAsText?: string\n /**\n * Unique local ID. This is to ensure unicity\n * for duplicate selections\n */\n public id: string\n\n constructor(params: SerializableHighlight & { itemIndex?: number }) {\n this.cfi = params.cfi\n this.endCfi = params.endCfi\n this.itemIndex = params.itemIndex\n this.color = params.color\n this.contents = params.contents\n this.id = params.id\n this.selectionAsText = params.selectionAsText\n }\n\n update(params: Parameters<Commands[\"update\"]>[1]) {\n Object.assign(this, params)\n\n return this\n }\n\n toJSON(): SerializableHighlight {\n return {\n cfi: this.cfi,\n endCfi: this.endCfi,\n color: this.color,\n contents: this.contents,\n id: this.id,\n selectionAsText: this.selectionAsText,\n }\n }\n}\n","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 type Observable,\n fromEvent,\n map,\n share,\n skip,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\nimport { createElementForRange } from \"./utils\"\n\nexport class SpineItemHighlight extends DestroyableClass {\n private container: HTMLElement\n\n public readonly tap$: Observable<{ event: Event; highlight: ProseHighlight }>\n\n constructor(\n private spineItem: SpineItem,\n private containerElement: HTMLElement,\n private reader: Reader,\n public readonly highlight: ProseHighlight,\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.render()\n\n this.isSelected\n .pipe(\n skip(1),\n tap((isSelected) => {\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 takeUntil(this.destroy$),\n )\n .subscribe()\n }\n\n public render() {\n this.container.innerHTML = \"\"\n\n const range = this.highlight.range\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.color ?? \"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.contents?.length) {\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\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 type Observable,\n distinctUntilChanged,\n map,\n merge,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n} from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\nimport { SpineItemHighlight } from \"./SpineItemHighlight\"\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 highlights$: Observable<ProseHighlight[]>,\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.highlights$.pipe(\n switchMap((annotations) => {\n this.highlights.forEach((highlight) => highlight.destroy())\n this.highlights = []\n\n annotations.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 highlights$.subscribe()\n }\n\n layout() {\n const firstLayerElement =\n this.spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n layoutAnnotationLayer(firstLayerElement, this.layer)\n\n this.highlights.forEach((highlight) => highlight.render())\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 { BehaviorSubject, map, merge, switchMap } from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\nimport { SpineItemHighlights } from \"./SpineItemHighlights\"\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: BehaviorSubject<ProseHighlight[]>,\n private selectedHighlight: BehaviorSubject<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 this.spineItemHighlights.value.forEach((item) => item.layout())\n }\n}\n","import type { Reader } from \"@prose-reader/core\"\nimport { map, of, tap, withLatestFrom } from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\n\nexport const consolidate = (highlight: ProseHighlight, reader: Reader) => {\n const { itemIndex } = reader.cfi.parseCfi(highlight.cfi ?? \"\")\n const spineItem = reader.spineItemsManager.get(itemIndex)\n\n if (!spineItem) return of(highlight)\n\n return of(highlight).pipe(\n withLatestFrom(spineItem.isReady$),\n tap(([, isItemReady]) => {\n const startCfi = reader.cfi.resolveCfi({ cfi: highlight.cfi ?? \"\" })\n const resolvedFocusCfi = reader.cfi.resolveCfi({\n cfi: highlight.endCfi ?? \"\",\n })\n\n if (startCfi?.node && resolvedFocusCfi?.node && isItemReady) {\n const range = startCfi?.node.ownerDocument?.createRange()\n range?.setStart(startCfi?.node, startCfi.offset ?? 0)\n range?.setEnd(resolvedFocusCfi?.node, resolvedFocusCfi.offset ?? 0)\n\n highlight.range = range\n highlight.selectionAsText = range?.toString()\n } else {\n highlight.range = undefined\n }\n }),\n map(() => highlight),\n )\n}\n","const p = (e) => {\n var n, t;\n return ((t = (n = e.split(/[#?]/)[0]) == null ? void 0 : n.split(\".\").pop()) == null ? void 0 : t.trim()) || \"\";\n};\nfunction f(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 l = 0; l < e.length; l++) {\n let r = e[l];\n if (typeof r != \"string\")\n throw new TypeError(`Url must be a string. Received ${r}`);\n r !== \"\" && (l > 0 && (r = r.replace(/^[/]+/, \"\")), l < e.length - 1 ? r = r.replace(/[/]+$/, \"\") : r = r.replace(/[/]+$/, \"/\"), n.push(r));\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 h(...e) {\n const n = Array.from(Array.isArray(e[0]) ? e[0] : e);\n return f(n);\n}\nfunction R(e) {\n const n = e.split(\"/\");\n return n.pop(), n.join(\"/\");\n}\nconst E = (e) => {\n switch (p(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 }\n}, d = ({\n mimeType: e,\n uri: n\n}) => {\n const t = e ?? E(n ?? \"\");\n return t == null ? void 0 : t.startsWith(\"application/xhtml+xml\");\n}, w = (e) => e.length ? e.indexOf(\";\") ? e.substring(0, e.indexOf(\";\")) : e : void 0, _ = \"prose-reader-resource-error\", a = Object.prototype.hasOwnProperty, g = (e, n) => e === n ? e !== 0 || n !== 0 || 1 / e === 1 / n : !1, y = (e, n, t) => {\n if (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), l = Object.keys(n);\n if (o.length !== l.length)\n return !1;\n const r = t && typeof t.customEqual == \"function\" ? t.customEqual : g;\n for (let c = 0; c < o.length; c++) {\n const u = o[c] || \"\";\n if (!a.call(n, u) || !r(e[u], n[u]))\n return !1;\n }\n return !0;\n}, O = (e, n) => e.reduce(\n (t, o) => {\n const l = n(o);\n return t[l] || (t[l] = []), t[l].push(o), t;\n },\n {}\n);\nfunction m(e, n) {\n const t = { ...e };\n for (const o in n)\n if (Object.prototype.hasOwnProperty.call(n, o)) {\n const l = n[o];\n (l !== void 0 || !(o in e)) && (t[o] = l);\n }\n return t;\n}\nconst i = (e) => `[${e}]`, s = (e, n) => ({\n namespace: (t, o) => s(`${e} ${t}`, o),\n debug: !n || (window == null ? void 0 : window.__PROSE_READER_DEBUG) !== !0 ? () => {\n } : e ? Function.prototype.bind.call(\n console.debug,\n console,\n i(e)\n ) : Function.prototype.bind.call(console.debug, console),\n info: !n || (window == null ? void 0 : window.__PROSE_READER_DEBUG) !== !0 ? () => {\n } : e ? Function.prototype.bind.call(console.info, console, i(e)) : Function.prototype.bind.call(console.info, console),\n log: !n || (window == null ? void 0 : window.__PROSE_READER_DEBUG) !== !0 ? () => {\n } : e ? Function.prototype.bind.call(console.log, console, i(e)) : Function.prototype.bind.call(console.log, console),\n warn: !n || (window == null ? void 0 : window.__PROSE_READER_DEBUG) !== !0 ? () => {\n } : e ? Function.prototype.bind.call(console.warn, console, i(e)) : Function.prototype.bind.call(console.warn, console),\n error: !n || (window == null ? void 0 : window.__PROSE_READER_DEBUG) !== !0 ? () => {\n } : e ? Function.prototype.bind.call(\n console.error,\n console,\n i(e)\n ) : Function.prototype.bind.call(console.error, console)\n}), D = {\n ...s(),\n namespace: (e, n) => s(e, n)\n}, x = (e, n) => e === n ? !0 : e.length !== n.length ? !1 : e.every((t, o) => t === n[o]);\nexport {\n _ as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,\n D as Report,\n x as arrayEqual,\n E as detectMimeTypeFromName,\n R as getParentPath,\n p as getUrlExtension,\n O as groupBy,\n g as is,\n y as isShallowEqual,\n d as isXmlBasedMimeType,\n w as parseContentType,\n m as shallowMergeIfDefined,\n h 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 type { Reader } from \"@prose-reader/core\"\nimport { isDefined } from \"reactjrx\"\nimport {\n BehaviorSubject,\n debounceTime,\n distinctUntilChanged,\n filter,\n forkJoin,\n map,\n merge,\n mergeMap,\n share,\n takeUntil,\n tap,\n withLatestFrom,\n} from \"rxjs\"\nimport { Commands } from \"./Commands\"\nimport { ProseHighlight } from \"./highlights/Highlight\"\nimport { ReaderHighlights } from \"./highlights/ReaderHighlights\"\nimport { consolidate } from \"./highlights/consolidate\"\nimport { report } from \"./report\"\nimport type { AnnotationsEnhancerAPI } from \"./types\"\n\nexport type { AnnotationsEnhancerAPI }\n\nexport const annotationsEnhancer =\n <InheritOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (options: InheritOptions): InheritOutput & AnnotationsEnhancerAPI => {\n const reader = next(options)\n const commands = new Commands()\n const highlightsSubject = new BehaviorSubject<ProseHighlight[]>([])\n const selectedHighlightSubject = new BehaviorSubject<string | undefined>(\n undefined,\n )\n\n const highlights$ = highlightsSubject\n .asObservable()\n .pipe(distinctUntilChanged())\n\n const readerHighlights = new ReaderHighlights(\n reader,\n highlightsSubject,\n selectedHighlightSubject,\n )\n\n const highlighted$ = commands.highlight$.pipe(\n map(({ data: { itemIndex, selection, ...rest } }) => {\n const spineItem = reader.spineItemsManager.get(itemIndex)\n\n if (!spineItem) return undefined\n\n const range = reader.selection.createOrderedRangeFromSelection({\n selection,\n spineItem,\n })\n\n if (!range) return undefined\n\n const { start: startCfi, end: endCfi } =\n reader.cfi.generateCfiFromRange(range, spineItem.item)\n\n const highlight = new ProseHighlight({\n cfi: startCfi,\n endCfi,\n itemIndex,\n id: window.crypto.randomUUID(),\n ...rest,\n })\n\n highlightsSubject.next([...highlightsSubject.getValue(), highlight])\n\n return [highlight.id]\n }),\n filter(isDefined),\n share(),\n )\n\n const add$ = commands.add$.pipe(\n map(({ data }) => {\n const annotations = Array.isArray(data) ? data : [data]\n\n const addedHighlights = annotations.map((annotation) => {\n const { itemIndex } = reader.cfi.parseCfi(annotation.cfi ?? \"\")\n\n const highlight = new ProseHighlight({ ...annotation, itemIndex })\n\n return highlight\n })\n\n highlightsSubject.next([\n ...highlightsSubject.getValue(),\n ...addedHighlights,\n ])\n }),\n )\n\n const delete$ = commands.delete$.pipe(\n tap(({ id }) => {\n highlightsSubject.next(\n highlightsSubject\n .getValue()\n .filter((highlight) => highlight.id !== id),\n )\n }),\n )\n\n const update$ = commands.update$.pipe(\n tap(({ id, data }) => {\n highlightsSubject.next(\n highlightsSubject.getValue().map((highlight) => {\n return highlight.id === id ? highlight.update(data) : highlight\n }),\n )\n }),\n )\n\n const select$ = commands.select$.pipe(\n tap(({ id }) => {\n selectedHighlightSubject.next(id)\n }),\n )\n\n const reset$ = commands.reset$.pipe(\n tap(() => {\n highlightsSubject.next([])\n }),\n )\n\n const highlightsConsolidation$ = merge(highlighted$, reader.layout$).pipe(\n debounceTime(50),\n withLatestFrom(highlights$),\n mergeMap(() =>\n forkJoin(\n highlightsSubject.value.map((highlight) =>\n consolidate(highlight, reader),\n ),\n ),\n ),\n tap((consolidatedHighlights) => {\n const consolidatedExistingHighlights = highlightsSubject.value.map(\n (highlight) =>\n consolidatedHighlights.find((c) => c.id === highlight.id) ??\n highlight,\n )\n\n highlightsSubject.next(consolidatedExistingHighlights)\n\n readerHighlights.layout()\n }),\n )\n\n merge(\n highlighted$,\n add$,\n delete$,\n update$,\n select$,\n reset$,\n highlightsConsolidation$,\n highlights$.pipe(\n tap((annotations) => {\n report.debug(\"highlights\", annotations)\n }),\n ),\n )\n .pipe(takeUntil(reader.$.destroy$))\n .subscribe()\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_ANNOTATIONS: true,\n destroy: () => {\n highlightsSubject.complete()\n commands.destroy()\n readerHighlights.destroy()\n reader.destroy()\n },\n annotations: {\n highlights$,\n highlightTap$: readerHighlights.tap$,\n isTargetWithinHighlight: readerHighlights.isTargetWithinHighlight,\n highlight: commands.highlight,\n add: commands.add,\n delete: commands.delete,\n update: commands.update,\n select: commands.select,\n reset: commands.reset,\n },\n }\n }\n"],"names":["isSelected","highlights","Report"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/Commands.ts","../src/highlights/Highlight.ts","../src/highlights/utils.ts","../src/highlights/SpineItemHighlight.ts","../src/highlights/SpineItemHighlights.ts","../src/highlights/ReaderHighlights.ts","../src/highlights/consolidate.ts","../../shared/dist/index.js","../src/report.ts","../src/annotationsEnhancer.ts"],"sourcesContent":["import { DestroyableClass } from \"@prose-reader/core\"\nimport { filter, Subject } from \"rxjs\"\nimport type { SerializableHighlight } from \"./types\"\n\ntype HighlightParams = {\n selection: Selection\n itemIndex: number\n color?: string\n contents?: string[]\n}\n\ntype Command =\n | { type: \"highlight\"; data: HighlightParams }\n | { type: \"add\"; data: SerializableHighlight | SerializableHighlight[] }\n | { type: \"delete\"; id: string }\n | {\n type: \"update\"\n id: string\n data: Pick<HighlightParams, \"color\" | \"contents\">\n }\n | { type: \"select\"; id: string | undefined }\n | { type: \"reset\" }\n\nexport class Commands extends DestroyableClass {\n private commandSubject = new Subject<Command>()\n\n public readonly highlight$ = this.commandSubject.pipe(\n filter((command) => command.type === \"highlight\"),\n )\n public readonly add$ = this.commandSubject.pipe(\n filter((command) => command.type === \"add\"),\n )\n public readonly delete$ = this.commandSubject.pipe(\n filter((command) => command.type === \"delete\"),\n )\n public readonly update$ = this.commandSubject.pipe(\n filter((command) => command.type === \"update\"),\n )\n public readonly select$ = this.commandSubject.pipe(\n filter((command) => command.type === \"select\"),\n )\n public readonly reset$ = this.commandSubject.pipe(\n filter((command) => command.type === \"reset\"),\n )\n\n highlight = (params: HighlightParams) => {\n this.commandSubject.next({ type: \"highlight\", data: params })\n }\n\n add = (data: SerializableHighlight | SerializableHighlight[]) => {\n this.commandSubject.next({ type: \"add\", data })\n }\n\n delete = (id: string) => {\n this.commandSubject.next({ type: \"delete\", id })\n }\n\n update = (id: string, data: Pick<HighlightParams, \"color\" | \"contents\">) => {\n this.commandSubject.next({ type: \"update\", id, data })\n }\n\n select = (id: string | undefined) => {\n this.commandSubject.next({ type: \"select\", id })\n }\n\n reset = () => {\n this.commandSubject.next({ type: \"reset\" })\n }\n\n destroy() {\n super.destroy()\n this.commandSubject.complete()\n }\n}\n","import type { Commands } from \"../Commands\"\nimport type { SerializableHighlight } from \"../types\"\n\nexport class ProseHighlight {\n public cfi: string\n public endCfi: string | undefined\n public itemIndex?: number\n public color?: string\n public contents?: string[]\n public range?: Range\n public selectionAsText?: string\n /**\n * Unique local ID. This is to ensure unicity\n * for duplicate selections\n */\n public id: string\n\n constructor(params: SerializableHighlight & { itemIndex?: number }) {\n this.cfi = params.cfi\n this.endCfi = params.endCfi\n this.itemIndex = params.itemIndex\n this.color = params.color\n this.contents = params.contents\n this.id = params.id\n this.selectionAsText = params.selectionAsText\n }\n\n update(params: Parameters<Commands[\"update\"]>[1]) {\n Object.assign(this, params)\n\n return this\n }\n\n toJSON(): SerializableHighlight {\n return {\n cfi: this.cfi,\n endCfi: this.endCfi,\n color: this.color,\n contents: this.contents,\n id: this.id,\n selectionAsText: this.selectionAsText,\n }\n }\n}\n","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 type Observable,\n fromEvent,\n map,\n share,\n skip,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\nimport { createElementForRange } from \"./utils\"\n\nexport class SpineItemHighlight extends DestroyableClass {\n private container: HTMLElement\n\n public readonly tap$: Observable<{ event: Event; highlight: ProseHighlight }>\n\n constructor(\n private spineItem: SpineItem,\n private containerElement: HTMLElement,\n private reader: Reader,\n public readonly highlight: ProseHighlight,\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.render()\n\n this.isSelected\n .pipe(\n skip(1),\n tap((isSelected) => {\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 takeUntil(this.destroy$),\n )\n .subscribe()\n }\n\n public render() {\n this.container.innerHTML = \"\"\n\n const range = this.highlight.range\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.color ?? \"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.contents?.length) {\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\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 type Observable,\n distinctUntilChanged,\n map,\n merge,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n} from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\nimport { SpineItemHighlight } from \"./SpineItemHighlight\"\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 highlights$: Observable<ProseHighlight[]>,\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.highlights$.pipe(\n switchMap((annotations) => {\n this.highlights.forEach((highlight) => highlight.destroy())\n this.highlights = []\n\n annotations.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 highlights$.subscribe()\n }\n\n layout() {\n const firstLayerElement =\n this.spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n layoutAnnotationLayer(firstLayerElement, this.layer)\n\n this.highlights.forEach((highlight) => highlight.render())\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 { BehaviorSubject, map, merge, switchMap } from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\nimport { SpineItemHighlights } from \"./SpineItemHighlights\"\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: BehaviorSubject<ProseHighlight[]>,\n private selectedHighlight: BehaviorSubject<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 this.spineItemHighlights.value.forEach((item) => item.layout())\n }\n}\n","import type { Reader } from \"@prose-reader/core\"\nimport { map, of, tap, withLatestFrom } from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\n\nexport const consolidate = (highlight: ProseHighlight, reader: Reader) => {\n const { itemIndex } = reader.cfi.parseCfi(highlight.cfi ?? \"\")\n const spineItem = reader.spineItemsManager.get(itemIndex)\n\n if (!spineItem) return of(highlight)\n\n return of(highlight).pipe(\n withLatestFrom(spineItem.isReady$),\n tap(([, isItemReady]) => {\n const startCfi = reader.cfi.resolveCfi({ cfi: highlight.cfi ?? \"\" })\n const resolvedFocusCfi = reader.cfi.resolveCfi({\n cfi: highlight.endCfi ?? \"\",\n })\n\n if (startCfi?.node && resolvedFocusCfi?.node && isItemReady) {\n const range = startCfi?.node.ownerDocument?.createRange()\n range?.setStart(startCfi?.node, startCfi.offset ?? 0)\n range?.setEnd(resolvedFocusCfi?.node, resolvedFocusCfi.offset ?? 0)\n\n highlight.range = range\n highlight.selectionAsText = range?.toString()\n } else {\n highlight.range = undefined\n }\n }),\n map(() => highlight),\n )\n}\n","const p = (e) => {\n var n, t;\n return ((t = (n = e.split(/[#?]/)[0]) == null ? void 0 : n.split(\".\").pop()) == null ? void 0 : t.trim()) || \"\";\n};\nfunction f(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 l = 0; l < e.length; l++) {\n let r = e[l];\n if (typeof r != \"string\")\n throw new TypeError(`Url must be a string. Received ${r}`);\n r !== \"\" && (l > 0 && (r = r.replace(/^[/]+/, \"\")), l < e.length - 1 ? r = r.replace(/[/]+$/, \"\") : r = r.replace(/[/]+$/, \"/\"), n.push(r));\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 w(...e) {\n const n = Array.from(Array.isArray(e[0]) ? e[0] : e);\n return f(n);\n}\nfunction y(e) {\n const n = e.split(\"/\");\n return n.pop(), n.join(\"/\");\n}\nconst a = (e) => {\n switch (p(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 }\n}, R = ({\n mimeType: e,\n uri: n\n}) => {\n const t = e ?? a(n ?? \"\");\n return t == null ? void 0 : t.startsWith(\"application/xhtml+xml\");\n}, m = (e) => e.length ? e.indexOf(\";\") ? e.substring(0, e.indexOf(\";\")) : e : void 0, O = \"prose-reader-resource-error\", g = Object.prototype.hasOwnProperty, h = (e, n) => e === n ? e !== 0 || n !== 0 || 1 / e === 1 / n : !1, x = (e, n, t) => {\n if (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), l = Object.keys(n);\n if (o.length !== l.length)\n return !1;\n const r = t && typeof t.customEqual == \"function\" ? t.customEqual : h;\n for (let c = 0; c < o.length; c++) {\n const u = o[c] || \"\";\n if (!g.call(n, u) || !r(e[u], n[u]))\n return !1;\n }\n return !0;\n}, F = (e, n) => e.reduce(\n (t, o) => {\n const l = n(o);\n return t[l] || (t[l] = []), t[l].push(o), t;\n },\n {}\n);\nfunction $(e, n) {\n const t = { ...e };\n for (const o in n)\n if (Object.prototype.hasOwnProperty.call(n, o)) {\n const l = n[o];\n (l !== void 0 || !(o in e)) && (t[o] = l);\n }\n return t;\n}\nconst d = () => {\n if (!(typeof window > \"u\"))\n return window;\n};\nfunction E() {\n var n;\n const e = (n = d()) == null ? void 0 : n.__PROSE_READER_DEBUG;\n return e === !0 || e === \"true\";\n}\nconst i = (e) => `[${e}]`, s = (e, n = E()) => ({\n namespace: (t, o) => s(`${e} ${t}`, o),\n debug: n ? e ? Function.prototype.bind.call(console.debug, console, i(e)) : Function.prototype.bind.call(console.debug, console) : () => {\n },\n info: n ? e ? Function.prototype.bind.call(console.info, console, i(e)) : Function.prototype.bind.call(console.info, console) : () => {\n },\n log: n ? e ? Function.prototype.bind.call(console.log, console, i(e)) : Function.prototype.bind.call(console.log, console) : () => {\n },\n warn: n ? e ? Function.prototype.bind.call(console.warn, console, i(e)) : Function.prototype.bind.call(console.warn, console) : () => {\n },\n error: n ? e ? Function.prototype.bind.call(console.error, console, i(e)) : Function.prototype.bind.call(console.error, console) : () => {\n }\n}), b = {\n ...s(),\n namespace: (e, n) => s(e, n)\n}, _ = (e, n) => e === n ? !0 : e.length !== n.length ? !1 : e.every((t, o) => t === n[o]);\nexport {\n O as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,\n b as Report,\n _ as arrayEqual,\n a as detectMimeTypeFromName,\n y as getParentPath,\n p as getUrlExtension,\n F as groupBy,\n h as is,\n x as isShallowEqual,\n R as isXmlBasedMimeType,\n m as parseContentType,\n $ as shallowMergeIfDefined,\n w 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 type { Reader } from \"@prose-reader/core\"\nimport { isDefined } from \"reactjrx\"\nimport {\n BehaviorSubject,\n debounceTime,\n distinctUntilChanged,\n filter,\n forkJoin,\n map,\n merge,\n mergeMap,\n share,\n takeUntil,\n tap,\n withLatestFrom,\n} from \"rxjs\"\nimport { Commands } from \"./Commands\"\nimport { ProseHighlight } from \"./highlights/Highlight\"\nimport { ReaderHighlights } from \"./highlights/ReaderHighlights\"\nimport { consolidate } from \"./highlights/consolidate\"\nimport { report } from \"./report\"\nimport type { AnnotationsEnhancerAPI } from \"./types\"\n\nexport type { AnnotationsEnhancerAPI }\n\nexport const annotationsEnhancer =\n <InheritOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (options: InheritOptions): InheritOutput & AnnotationsEnhancerAPI => {\n const reader = next(options)\n const commands = new Commands()\n const highlightsSubject = new BehaviorSubject<ProseHighlight[]>([])\n const selectedHighlightSubject = new BehaviorSubject<string | undefined>(\n undefined,\n )\n\n const highlights$ = highlightsSubject\n .asObservable()\n .pipe(distinctUntilChanged())\n\n const readerHighlights = new ReaderHighlights(\n reader,\n highlightsSubject,\n selectedHighlightSubject,\n )\n\n const highlighted$ = commands.highlight$.pipe(\n map(({ data: { itemIndex, selection, ...rest } }) => {\n const spineItem = reader.spineItemsManager.get(itemIndex)\n\n if (!spineItem) return undefined\n\n const range = reader.selection.createOrderedRangeFromSelection({\n selection,\n spineItem,\n })\n\n if (!range) return undefined\n\n const { start: startCfi, end: endCfi } =\n reader.cfi.generateCfiFromRange(range, spineItem.item)\n\n const highlight = new ProseHighlight({\n cfi: startCfi,\n endCfi,\n itemIndex,\n id: window.crypto.randomUUID(),\n ...rest,\n })\n\n highlightsSubject.next([...highlightsSubject.getValue(), highlight])\n\n return [highlight.id]\n }),\n filter(isDefined),\n share(),\n )\n\n const add$ = commands.add$.pipe(\n map(({ data }) => {\n const annotations = Array.isArray(data) ? data : [data]\n\n const addedHighlights = annotations.map((annotation) => {\n const { itemIndex } = reader.cfi.parseCfi(annotation.cfi ?? \"\")\n\n const highlight = new ProseHighlight({ ...annotation, itemIndex })\n\n return highlight\n })\n\n highlightsSubject.next([\n ...highlightsSubject.getValue(),\n ...addedHighlights,\n ])\n }),\n )\n\n const delete$ = commands.delete$.pipe(\n tap(({ id }) => {\n highlightsSubject.next(\n highlightsSubject\n .getValue()\n .filter((highlight) => highlight.id !== id),\n )\n }),\n )\n\n const update$ = commands.update$.pipe(\n tap(({ id, data }) => {\n highlightsSubject.next(\n highlightsSubject.getValue().map((highlight) => {\n return highlight.id === id ? highlight.update(data) : highlight\n }),\n )\n }),\n )\n\n const select$ = commands.select$.pipe(\n tap(({ id }) => {\n selectedHighlightSubject.next(id)\n }),\n )\n\n const reset$ = commands.reset$.pipe(\n tap(() => {\n highlightsSubject.next([])\n }),\n )\n\n const highlightsConsolidation$ = merge(highlighted$, reader.layout$).pipe(\n debounceTime(50),\n withLatestFrom(highlights$),\n mergeMap(() =>\n forkJoin(\n highlightsSubject.value.map((highlight) =>\n consolidate(highlight, reader),\n ),\n ),\n ),\n tap((consolidatedHighlights) => {\n const consolidatedExistingHighlights = highlightsSubject.value.map(\n (highlight) =>\n consolidatedHighlights.find((c) => c.id === highlight.id) ??\n highlight,\n )\n\n highlightsSubject.next(consolidatedExistingHighlights)\n\n readerHighlights.layout()\n }),\n )\n\n merge(\n highlighted$,\n add$,\n delete$,\n update$,\n select$,\n reset$,\n highlightsConsolidation$,\n highlights$.pipe(\n tap((annotations) => {\n report.debug(\"highlights\", annotations)\n }),\n ),\n )\n .pipe(takeUntil(reader.$.destroy$))\n .subscribe()\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_ANNOTATIONS: true,\n destroy: () => {\n highlightsSubject.complete()\n commands.destroy()\n readerHighlights.destroy()\n reader.destroy()\n },\n annotations: {\n highlights$,\n highlightTap$: readerHighlights.tap$,\n isTargetWithinHighlight: readerHighlights.isTargetWithinHighlight,\n highlight: commands.highlight,\n add: commands.add,\n delete: commands.delete,\n update: commands.update,\n select: commands.select,\n reset: commands.reset,\n },\n }\n }\n"],"names":["isSelected","highlights","Report"],"mappings":"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"}
|
package/dist/index.umd.cjs
CHANGED
|
@@ -352,27 +352,28 @@
|
|
|
352
352
|
);
|
|
353
353
|
};
|
|
354
354
|
|
|
355
|
-
const
|
|
355
|
+
const d = () => {
|
|
356
|
+
if (!(typeof window > "u"))
|
|
357
|
+
return window;
|
|
358
|
+
};
|
|
359
|
+
function E() {
|
|
360
|
+
var n;
|
|
361
|
+
const e = (n = d()) == null ? void 0 : n.__PROSE_READER_DEBUG;
|
|
362
|
+
return e === true || e === "true";
|
|
363
|
+
}
|
|
364
|
+
const i = (e) => `[${e}]`, s = (e, n = E()) => ({
|
|
356
365
|
namespace: (t, o) => s(`${e} ${t}`, o),
|
|
357
|
-
debug:
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
} : e ? Function.prototype.bind.call(console.warn, console, i(e)) : Function.prototype.bind.call(console.warn, console),
|
|
369
|
-
error: !n || (window == null ? void 0 : window.__PROSE_READER_DEBUG) !== true ? () => {
|
|
370
|
-
} : e ? Function.prototype.bind.call(
|
|
371
|
-
console.error,
|
|
372
|
-
console,
|
|
373
|
-
i(e)
|
|
374
|
-
) : Function.prototype.bind.call(console.error, console)
|
|
375
|
-
}), D = {
|
|
366
|
+
debug: n ? e ? Function.prototype.bind.call(console.debug, console, i(e)) : Function.prototype.bind.call(console.debug, console) : () => {
|
|
367
|
+
},
|
|
368
|
+
info: n ? e ? Function.prototype.bind.call(console.info, console, i(e)) : Function.prototype.bind.call(console.info, console) : () => {
|
|
369
|
+
},
|
|
370
|
+
log: n ? e ? Function.prototype.bind.call(console.log, console, i(e)) : Function.prototype.bind.call(console.log, console) : () => {
|
|
371
|
+
},
|
|
372
|
+
warn: n ? e ? Function.prototype.bind.call(console.warn, console, i(e)) : Function.prototype.bind.call(console.warn, console) : () => {
|
|
373
|
+
},
|
|
374
|
+
error: n ? e ? Function.prototype.bind.call(console.error, console, i(e)) : Function.prototype.bind.call(console.error, console) : () => {
|
|
375
|
+
}
|
|
376
|
+
}), b = {
|
|
376
377
|
...s(),
|
|
377
378
|
namespace: (e, n) => s(e, n)
|
|
378
379
|
};
|
|
@@ -380,7 +381,7 @@
|
|
|
380
381
|
const name = "@prose-reader/enhancer-annotations";
|
|
381
382
|
|
|
382
383
|
const IS_DEBUG_ENABLED = true;
|
|
383
|
-
const report =
|
|
384
|
+
const report = b.namespace(name, IS_DEBUG_ENABLED);
|
|
384
385
|
|
|
385
386
|
const annotationsEnhancer = (next) => (options) => {
|
|
386
387
|
const reader = next(options);
|
package/dist/index.umd.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.cjs","sources":["../src/Commands.ts","../src/highlights/Highlight.ts","../src/highlights/utils.ts","../src/highlights/SpineItemHighlight.ts","../src/highlights/SpineItemHighlights.ts","../src/highlights/ReaderHighlights.ts","../src/highlights/consolidate.ts","../../shared/dist/index.js","../src/report.ts","../src/annotationsEnhancer.ts"],"sourcesContent":["import { DestroyableClass } from \"@prose-reader/core\"\nimport { filter, Subject } from \"rxjs\"\nimport type { SerializableHighlight } from \"./types\"\n\ntype HighlightParams = {\n selection: Selection\n itemIndex: number\n color?: string\n contents?: string[]\n}\n\ntype Command =\n | { type: \"highlight\"; data: HighlightParams }\n | { type: \"add\"; data: SerializableHighlight | SerializableHighlight[] }\n | { type: \"delete\"; id: string }\n | {\n type: \"update\"\n id: string\n data: Pick<HighlightParams, \"color\" | \"contents\">\n }\n | { type: \"select\"; id: string | undefined }\n | { type: \"reset\" }\n\nexport class Commands extends DestroyableClass {\n private commandSubject = new Subject<Command>()\n\n public readonly highlight$ = this.commandSubject.pipe(\n filter((command) => command.type === \"highlight\"),\n )\n public readonly add$ = this.commandSubject.pipe(\n filter((command) => command.type === \"add\"),\n )\n public readonly delete$ = this.commandSubject.pipe(\n filter((command) => command.type === \"delete\"),\n )\n public readonly update$ = this.commandSubject.pipe(\n filter((command) => command.type === \"update\"),\n )\n public readonly select$ = this.commandSubject.pipe(\n filter((command) => command.type === \"select\"),\n )\n public readonly reset$ = this.commandSubject.pipe(\n filter((command) => command.type === \"reset\"),\n )\n\n highlight = (params: HighlightParams) => {\n this.commandSubject.next({ type: \"highlight\", data: params })\n }\n\n add = (data: SerializableHighlight | SerializableHighlight[]) => {\n this.commandSubject.next({ type: \"add\", data })\n }\n\n delete = (id: string) => {\n this.commandSubject.next({ type: \"delete\", id })\n }\n\n update = (id: string, data: Pick<HighlightParams, \"color\" | \"contents\">) => {\n this.commandSubject.next({ type: \"update\", id, data })\n }\n\n select = (id: string | undefined) => {\n this.commandSubject.next({ type: \"select\", id })\n }\n\n reset = () => {\n this.commandSubject.next({ type: \"reset\" })\n }\n\n destroy() {\n super.destroy()\n this.commandSubject.complete()\n }\n}\n","import type { Commands } from \"../Commands\"\nimport type { SerializableHighlight } from \"../types\"\n\nexport class ProseHighlight {\n public cfi: string\n public endCfi: string | undefined\n public itemIndex?: number\n public color?: string\n public contents?: string[]\n public range?: Range\n public selectionAsText?: string\n /**\n * Unique local ID. This is to ensure unicity\n * for duplicate selections\n */\n public id: string\n\n constructor(params: SerializableHighlight & { itemIndex?: number }) {\n this.cfi = params.cfi\n this.endCfi = params.endCfi\n this.itemIndex = params.itemIndex\n this.color = params.color\n this.contents = params.contents\n this.id = params.id\n this.selectionAsText = params.selectionAsText\n }\n\n update(params: Parameters<Commands[\"update\"]>[1]) {\n Object.assign(this, params)\n\n return this\n }\n\n toJSON(): SerializableHighlight {\n return {\n cfi: this.cfi,\n endCfi: this.endCfi,\n color: this.color,\n contents: this.contents,\n id: this.id,\n selectionAsText: this.selectionAsText,\n }\n }\n}\n","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 type Observable,\n fromEvent,\n map,\n share,\n skip,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\nimport { createElementForRange } from \"./utils\"\n\nexport class SpineItemHighlight extends DestroyableClass {\n private container: HTMLElement\n\n public readonly tap$: Observable<{ event: Event; highlight: ProseHighlight }>\n\n constructor(\n private spineItem: SpineItem,\n private containerElement: HTMLElement,\n private reader: Reader,\n public readonly highlight: ProseHighlight,\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.render()\n\n this.isSelected\n .pipe(\n skip(1),\n tap((isSelected) => {\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 takeUntil(this.destroy$),\n )\n .subscribe()\n }\n\n public render() {\n this.container.innerHTML = \"\"\n\n const range = this.highlight.range\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.color ?? \"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.contents?.length) {\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\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 type Observable,\n distinctUntilChanged,\n map,\n merge,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n} from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\nimport { SpineItemHighlight } from \"./SpineItemHighlight\"\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 highlights$: Observable<ProseHighlight[]>,\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.highlights$.pipe(\n switchMap((annotations) => {\n this.highlights.forEach((highlight) => highlight.destroy())\n this.highlights = []\n\n annotations.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 highlights$.subscribe()\n }\n\n layout() {\n const firstLayerElement =\n this.spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n layoutAnnotationLayer(firstLayerElement, this.layer)\n\n this.highlights.forEach((highlight) => highlight.render())\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 { BehaviorSubject, map, merge, switchMap } from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\nimport { SpineItemHighlights } from \"./SpineItemHighlights\"\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: BehaviorSubject<ProseHighlight[]>,\n private selectedHighlight: BehaviorSubject<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 this.spineItemHighlights.value.forEach((item) => item.layout())\n }\n}\n","import type { Reader } from \"@prose-reader/core\"\nimport { map, of, tap, withLatestFrom } from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\n\nexport const consolidate = (highlight: ProseHighlight, reader: Reader) => {\n const { itemIndex } = reader.cfi.parseCfi(highlight.cfi ?? \"\")\n const spineItem = reader.spineItemsManager.get(itemIndex)\n\n if (!spineItem) return of(highlight)\n\n return of(highlight).pipe(\n withLatestFrom(spineItem.isReady$),\n tap(([, isItemReady]) => {\n const startCfi = reader.cfi.resolveCfi({ cfi: highlight.cfi ?? \"\" })\n const resolvedFocusCfi = reader.cfi.resolveCfi({\n cfi: highlight.endCfi ?? \"\",\n })\n\n if (startCfi?.node && resolvedFocusCfi?.node && isItemReady) {\n const range = startCfi?.node.ownerDocument?.createRange()\n range?.setStart(startCfi?.node, startCfi.offset ?? 0)\n range?.setEnd(resolvedFocusCfi?.node, resolvedFocusCfi.offset ?? 0)\n\n highlight.range = range\n highlight.selectionAsText = range?.toString()\n } else {\n highlight.range = undefined\n }\n }),\n map(() => highlight),\n )\n}\n","const p = (e) => {\n var n, t;\n return ((t = (n = e.split(/[#?]/)[0]) == null ? void 0 : n.split(\".\").pop()) == null ? void 0 : t.trim()) || \"\";\n};\nfunction f(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 l = 0; l < e.length; l++) {\n let r = e[l];\n if (typeof r != \"string\")\n throw new TypeError(`Url must be a string. Received ${r}`);\n r !== \"\" && (l > 0 && (r = r.replace(/^[/]+/, \"\")), l < e.length - 1 ? r = r.replace(/[/]+$/, \"\") : r = r.replace(/[/]+$/, \"/\"), n.push(r));\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 h(...e) {\n const n = Array.from(Array.isArray(e[0]) ? e[0] : e);\n return f(n);\n}\nfunction R(e) {\n const n = e.split(\"/\");\n return n.pop(), n.join(\"/\");\n}\nconst E = (e) => {\n switch (p(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 }\n}, d = ({\n mimeType: e,\n uri: n\n}) => {\n const t = e ?? E(n ?? \"\");\n return t == null ? void 0 : t.startsWith(\"application/xhtml+xml\");\n}, w = (e) => e.length ? e.indexOf(\";\") ? e.substring(0, e.indexOf(\";\")) : e : void 0, _ = \"prose-reader-resource-error\", a = Object.prototype.hasOwnProperty, g = (e, n) => e === n ? e !== 0 || n !== 0 || 1 / e === 1 / n : !1, y = (e, n, t) => {\n if (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), l = Object.keys(n);\n if (o.length !== l.length)\n return !1;\n const r = t && typeof t.customEqual == \"function\" ? t.customEqual : g;\n for (let c = 0; c < o.length; c++) {\n const u = o[c] || \"\";\n if (!a.call(n, u) || !r(e[u], n[u]))\n return !1;\n }\n return !0;\n}, O = (e, n) => e.reduce(\n (t, o) => {\n const l = n(o);\n return t[l] || (t[l] = []), t[l].push(o), t;\n },\n {}\n);\nfunction m(e, n) {\n const t = { ...e };\n for (const o in n)\n if (Object.prototype.hasOwnProperty.call(n, o)) {\n const l = n[o];\n (l !== void 0 || !(o in e)) && (t[o] = l);\n }\n return t;\n}\nconst i = (e) => `[${e}]`, s = (e, n) => ({\n namespace: (t, o) => s(`${e} ${t}`, o),\n debug: !n || (window == null ? void 0 : window.__PROSE_READER_DEBUG) !== !0 ? () => {\n } : e ? Function.prototype.bind.call(\n console.debug,\n console,\n i(e)\n ) : Function.prototype.bind.call(console.debug, console),\n info: !n || (window == null ? void 0 : window.__PROSE_READER_DEBUG) !== !0 ? () => {\n } : e ? Function.prototype.bind.call(console.info, console, i(e)) : Function.prototype.bind.call(console.info, console),\n log: !n || (window == null ? void 0 : window.__PROSE_READER_DEBUG) !== !0 ? () => {\n } : e ? Function.prototype.bind.call(console.log, console, i(e)) : Function.prototype.bind.call(console.log, console),\n warn: !n || (window == null ? void 0 : window.__PROSE_READER_DEBUG) !== !0 ? () => {\n } : e ? Function.prototype.bind.call(console.warn, console, i(e)) : Function.prototype.bind.call(console.warn, console),\n error: !n || (window == null ? void 0 : window.__PROSE_READER_DEBUG) !== !0 ? () => {\n } : e ? Function.prototype.bind.call(\n console.error,\n console,\n i(e)\n ) : Function.prototype.bind.call(console.error, console)\n}), D = {\n ...s(),\n namespace: (e, n) => s(e, n)\n}, x = (e, n) => e === n ? !0 : e.length !== n.length ? !1 : e.every((t, o) => t === n[o]);\nexport {\n _ as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,\n D as Report,\n x as arrayEqual,\n E as detectMimeTypeFromName,\n R as getParentPath,\n p as getUrlExtension,\n O as groupBy,\n g as is,\n y as isShallowEqual,\n d as isXmlBasedMimeType,\n w as parseContentType,\n m as shallowMergeIfDefined,\n h 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 type { Reader } from \"@prose-reader/core\"\nimport { isDefined } from \"reactjrx\"\nimport {\n BehaviorSubject,\n debounceTime,\n distinctUntilChanged,\n filter,\n forkJoin,\n map,\n merge,\n mergeMap,\n share,\n takeUntil,\n tap,\n withLatestFrom,\n} from \"rxjs\"\nimport { Commands } from \"./Commands\"\nimport { ProseHighlight } from \"./highlights/Highlight\"\nimport { ReaderHighlights } from \"./highlights/ReaderHighlights\"\nimport { consolidate } from \"./highlights/consolidate\"\nimport { report } from \"./report\"\nimport type { AnnotationsEnhancerAPI } from \"./types\"\n\nexport type { AnnotationsEnhancerAPI }\n\nexport const annotationsEnhancer =\n <InheritOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (options: InheritOptions): InheritOutput & AnnotationsEnhancerAPI => {\n const reader = next(options)\n const commands = new Commands()\n const highlightsSubject = new BehaviorSubject<ProseHighlight[]>([])\n const selectedHighlightSubject = new BehaviorSubject<string | undefined>(\n undefined,\n )\n\n const highlights$ = highlightsSubject\n .asObservable()\n .pipe(distinctUntilChanged())\n\n const readerHighlights = new ReaderHighlights(\n reader,\n highlightsSubject,\n selectedHighlightSubject,\n )\n\n const highlighted$ = commands.highlight$.pipe(\n map(({ data: { itemIndex, selection, ...rest } }) => {\n const spineItem = reader.spineItemsManager.get(itemIndex)\n\n if (!spineItem) return undefined\n\n const range = reader.selection.createOrderedRangeFromSelection({\n selection,\n spineItem,\n })\n\n if (!range) return undefined\n\n const { start: startCfi, end: endCfi } =\n reader.cfi.generateCfiFromRange(range, spineItem.item)\n\n const highlight = new ProseHighlight({\n cfi: startCfi,\n endCfi,\n itemIndex,\n id: window.crypto.randomUUID(),\n ...rest,\n })\n\n highlightsSubject.next([...highlightsSubject.getValue(), highlight])\n\n return [highlight.id]\n }),\n filter(isDefined),\n share(),\n )\n\n const add$ = commands.add$.pipe(\n map(({ data }) => {\n const annotations = Array.isArray(data) ? data : [data]\n\n const addedHighlights = annotations.map((annotation) => {\n const { itemIndex } = reader.cfi.parseCfi(annotation.cfi ?? \"\")\n\n const highlight = new ProseHighlight({ ...annotation, itemIndex })\n\n return highlight\n })\n\n highlightsSubject.next([\n ...highlightsSubject.getValue(),\n ...addedHighlights,\n ])\n }),\n )\n\n const delete$ = commands.delete$.pipe(\n tap(({ id }) => {\n highlightsSubject.next(\n highlightsSubject\n .getValue()\n .filter((highlight) => highlight.id !== id),\n )\n }),\n )\n\n const update$ = commands.update$.pipe(\n tap(({ id, data }) => {\n highlightsSubject.next(\n highlightsSubject.getValue().map((highlight) => {\n return highlight.id === id ? highlight.update(data) : highlight\n }),\n )\n }),\n )\n\n const select$ = commands.select$.pipe(\n tap(({ id }) => {\n selectedHighlightSubject.next(id)\n }),\n )\n\n const reset$ = commands.reset$.pipe(\n tap(() => {\n highlightsSubject.next([])\n }),\n )\n\n const highlightsConsolidation$ = merge(highlighted$, reader.layout$).pipe(\n debounceTime(50),\n withLatestFrom(highlights$),\n mergeMap(() =>\n forkJoin(\n highlightsSubject.value.map((highlight) =>\n consolidate(highlight, reader),\n ),\n ),\n ),\n tap((consolidatedHighlights) => {\n const consolidatedExistingHighlights = highlightsSubject.value.map(\n (highlight) =>\n consolidatedHighlights.find((c) => c.id === highlight.id) ??\n highlight,\n )\n\n highlightsSubject.next(consolidatedExistingHighlights)\n\n readerHighlights.layout()\n }),\n )\n\n merge(\n highlighted$,\n add$,\n delete$,\n update$,\n select$,\n reset$,\n highlightsConsolidation$,\n highlights$.pipe(\n tap((annotations) => {\n report.debug(\"highlights\", annotations)\n }),\n ),\n )\n .pipe(takeUntil(reader.$.destroy$))\n .subscribe()\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_ANNOTATIONS: true,\n destroy: () => {\n highlightsSubject.complete()\n commands.destroy()\n readerHighlights.destroy()\n reader.destroy()\n },\n annotations: {\n highlights$,\n highlightTap$: readerHighlights.tap$,\n isTargetWithinHighlight: readerHighlights.isTargetWithinHighlight,\n highlight: commands.highlight,\n add: commands.add,\n delete: commands.delete,\n update: commands.update,\n select: commands.select,\n reset: commands.reset,\n },\n }\n }\n"],"names":["DestroyableClass","Subject","filter","fromEvent","map","share","skip","tap","isSelected","takeUntil","switchMap","distinctUntilChanged","of","shareReplay","merge","highlights","BehaviorSubject","withLatestFrom","Report","isDefined","debounceTime","mergeMap","forkJoin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.cjs","sources":["../src/Commands.ts","../src/highlights/Highlight.ts","../src/highlights/utils.ts","../src/highlights/SpineItemHighlight.ts","../src/highlights/SpineItemHighlights.ts","../src/highlights/ReaderHighlights.ts","../src/highlights/consolidate.ts","../../shared/dist/index.js","../src/report.ts","../src/annotationsEnhancer.ts"],"sourcesContent":["import { DestroyableClass } from \"@prose-reader/core\"\nimport { filter, Subject } from \"rxjs\"\nimport type { SerializableHighlight } from \"./types\"\n\ntype HighlightParams = {\n selection: Selection\n itemIndex: number\n color?: string\n contents?: string[]\n}\n\ntype Command =\n | { type: \"highlight\"; data: HighlightParams }\n | { type: \"add\"; data: SerializableHighlight | SerializableHighlight[] }\n | { type: \"delete\"; id: string }\n | {\n type: \"update\"\n id: string\n data: Pick<HighlightParams, \"color\" | \"contents\">\n }\n | { type: \"select\"; id: string | undefined }\n | { type: \"reset\" }\n\nexport class Commands extends DestroyableClass {\n private commandSubject = new Subject<Command>()\n\n public readonly highlight$ = this.commandSubject.pipe(\n filter((command) => command.type === \"highlight\"),\n )\n public readonly add$ = this.commandSubject.pipe(\n filter((command) => command.type === \"add\"),\n )\n public readonly delete$ = this.commandSubject.pipe(\n filter((command) => command.type === \"delete\"),\n )\n public readonly update$ = this.commandSubject.pipe(\n filter((command) => command.type === \"update\"),\n )\n public readonly select$ = this.commandSubject.pipe(\n filter((command) => command.type === \"select\"),\n )\n public readonly reset$ = this.commandSubject.pipe(\n filter((command) => command.type === \"reset\"),\n )\n\n highlight = (params: HighlightParams) => {\n this.commandSubject.next({ type: \"highlight\", data: params })\n }\n\n add = (data: SerializableHighlight | SerializableHighlight[]) => {\n this.commandSubject.next({ type: \"add\", data })\n }\n\n delete = (id: string) => {\n this.commandSubject.next({ type: \"delete\", id })\n }\n\n update = (id: string, data: Pick<HighlightParams, \"color\" | \"contents\">) => {\n this.commandSubject.next({ type: \"update\", id, data })\n }\n\n select = (id: string | undefined) => {\n this.commandSubject.next({ type: \"select\", id })\n }\n\n reset = () => {\n this.commandSubject.next({ type: \"reset\" })\n }\n\n destroy() {\n super.destroy()\n this.commandSubject.complete()\n }\n}\n","import type { Commands } from \"../Commands\"\nimport type { SerializableHighlight } from \"../types\"\n\nexport class ProseHighlight {\n public cfi: string\n public endCfi: string | undefined\n public itemIndex?: number\n public color?: string\n public contents?: string[]\n public range?: Range\n public selectionAsText?: string\n /**\n * Unique local ID. This is to ensure unicity\n * for duplicate selections\n */\n public id: string\n\n constructor(params: SerializableHighlight & { itemIndex?: number }) {\n this.cfi = params.cfi\n this.endCfi = params.endCfi\n this.itemIndex = params.itemIndex\n this.color = params.color\n this.contents = params.contents\n this.id = params.id\n this.selectionAsText = params.selectionAsText\n }\n\n update(params: Parameters<Commands[\"update\"]>[1]) {\n Object.assign(this, params)\n\n return this\n }\n\n toJSON(): SerializableHighlight {\n return {\n cfi: this.cfi,\n endCfi: this.endCfi,\n color: this.color,\n contents: this.contents,\n id: this.id,\n selectionAsText: this.selectionAsText,\n }\n }\n}\n","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 type Observable,\n fromEvent,\n map,\n share,\n skip,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\nimport { createElementForRange } from \"./utils\"\n\nexport class SpineItemHighlight extends DestroyableClass {\n private container: HTMLElement\n\n public readonly tap$: Observable<{ event: Event; highlight: ProseHighlight }>\n\n constructor(\n private spineItem: SpineItem,\n private containerElement: HTMLElement,\n private reader: Reader,\n public readonly highlight: ProseHighlight,\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.render()\n\n this.isSelected\n .pipe(\n skip(1),\n tap((isSelected) => {\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 takeUntil(this.destroy$),\n )\n .subscribe()\n }\n\n public render() {\n this.container.innerHTML = \"\"\n\n const range = this.highlight.range\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.color ?? \"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.contents?.length) {\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\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 type Observable,\n distinctUntilChanged,\n map,\n merge,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n} from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\nimport { SpineItemHighlight } from \"./SpineItemHighlight\"\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 highlights$: Observable<ProseHighlight[]>,\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.highlights$.pipe(\n switchMap((annotations) => {\n this.highlights.forEach((highlight) => highlight.destroy())\n this.highlights = []\n\n annotations.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 highlights$.subscribe()\n }\n\n layout() {\n const firstLayerElement =\n this.spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n layoutAnnotationLayer(firstLayerElement, this.layer)\n\n this.highlights.forEach((highlight) => highlight.render())\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 { BehaviorSubject, map, merge, switchMap } from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\nimport { SpineItemHighlights } from \"./SpineItemHighlights\"\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: BehaviorSubject<ProseHighlight[]>,\n private selectedHighlight: BehaviorSubject<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 this.spineItemHighlights.value.forEach((item) => item.layout())\n }\n}\n","import type { Reader } from \"@prose-reader/core\"\nimport { map, of, tap, withLatestFrom } from \"rxjs\"\nimport type { ProseHighlight } from \"./Highlight\"\n\nexport const consolidate = (highlight: ProseHighlight, reader: Reader) => {\n const { itemIndex } = reader.cfi.parseCfi(highlight.cfi ?? \"\")\n const spineItem = reader.spineItemsManager.get(itemIndex)\n\n if (!spineItem) return of(highlight)\n\n return of(highlight).pipe(\n withLatestFrom(spineItem.isReady$),\n tap(([, isItemReady]) => {\n const startCfi = reader.cfi.resolveCfi({ cfi: highlight.cfi ?? \"\" })\n const resolvedFocusCfi = reader.cfi.resolveCfi({\n cfi: highlight.endCfi ?? \"\",\n })\n\n if (startCfi?.node && resolvedFocusCfi?.node && isItemReady) {\n const range = startCfi?.node.ownerDocument?.createRange()\n range?.setStart(startCfi?.node, startCfi.offset ?? 0)\n range?.setEnd(resolvedFocusCfi?.node, resolvedFocusCfi.offset ?? 0)\n\n highlight.range = range\n highlight.selectionAsText = range?.toString()\n } else {\n highlight.range = undefined\n }\n }),\n map(() => highlight),\n )\n}\n","const p = (e) => {\n var n, t;\n return ((t = (n = e.split(/[#?]/)[0]) == null ? void 0 : n.split(\".\").pop()) == null ? void 0 : t.trim()) || \"\";\n};\nfunction f(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 l = 0; l < e.length; l++) {\n let r = e[l];\n if (typeof r != \"string\")\n throw new TypeError(`Url must be a string. Received ${r}`);\n r !== \"\" && (l > 0 && (r = r.replace(/^[/]+/, \"\")), l < e.length - 1 ? r = r.replace(/[/]+$/, \"\") : r = r.replace(/[/]+$/, \"/\"), n.push(r));\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 w(...e) {\n const n = Array.from(Array.isArray(e[0]) ? e[0] : e);\n return f(n);\n}\nfunction y(e) {\n const n = e.split(\"/\");\n return n.pop(), n.join(\"/\");\n}\nconst a = (e) => {\n switch (p(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 }\n}, R = ({\n mimeType: e,\n uri: n\n}) => {\n const t = e ?? a(n ?? \"\");\n return t == null ? void 0 : t.startsWith(\"application/xhtml+xml\");\n}, m = (e) => e.length ? e.indexOf(\";\") ? e.substring(0, e.indexOf(\";\")) : e : void 0, O = \"prose-reader-resource-error\", g = Object.prototype.hasOwnProperty, h = (e, n) => e === n ? e !== 0 || n !== 0 || 1 / e === 1 / n : !1, x = (e, n, t) => {\n if (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), l = Object.keys(n);\n if (o.length !== l.length)\n return !1;\n const r = t && typeof t.customEqual == \"function\" ? t.customEqual : h;\n for (let c = 0; c < o.length; c++) {\n const u = o[c] || \"\";\n if (!g.call(n, u) || !r(e[u], n[u]))\n return !1;\n }\n return !0;\n}, F = (e, n) => e.reduce(\n (t, o) => {\n const l = n(o);\n return t[l] || (t[l] = []), t[l].push(o), t;\n },\n {}\n);\nfunction $(e, n) {\n const t = { ...e };\n for (const o in n)\n if (Object.prototype.hasOwnProperty.call(n, o)) {\n const l = n[o];\n (l !== void 0 || !(o in e)) && (t[o] = l);\n }\n return t;\n}\nconst d = () => {\n if (!(typeof window > \"u\"))\n return window;\n};\nfunction E() {\n var n;\n const e = (n = d()) == null ? void 0 : n.__PROSE_READER_DEBUG;\n return e === !0 || e === \"true\";\n}\nconst i = (e) => `[${e}]`, s = (e, n = E()) => ({\n namespace: (t, o) => s(`${e} ${t}`, o),\n debug: n ? e ? Function.prototype.bind.call(console.debug, console, i(e)) : Function.prototype.bind.call(console.debug, console) : () => {\n },\n info: n ? e ? Function.prototype.bind.call(console.info, console, i(e)) : Function.prototype.bind.call(console.info, console) : () => {\n },\n log: n ? e ? Function.prototype.bind.call(console.log, console, i(e)) : Function.prototype.bind.call(console.log, console) : () => {\n },\n warn: n ? e ? Function.prototype.bind.call(console.warn, console, i(e)) : Function.prototype.bind.call(console.warn, console) : () => {\n },\n error: n ? e ? Function.prototype.bind.call(console.error, console, i(e)) : Function.prototype.bind.call(console.error, console) : () => {\n }\n}), b = {\n ...s(),\n namespace: (e, n) => s(e, n)\n}, _ = (e, n) => e === n ? !0 : e.length !== n.length ? !1 : e.every((t, o) => t === n[o]);\nexport {\n O as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,\n b as Report,\n _ as arrayEqual,\n a as detectMimeTypeFromName,\n y as getParentPath,\n p as getUrlExtension,\n F as groupBy,\n h as is,\n x as isShallowEqual,\n R as isXmlBasedMimeType,\n m as parseContentType,\n $ as shallowMergeIfDefined,\n w 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 type { Reader } from \"@prose-reader/core\"\nimport { isDefined } from \"reactjrx\"\nimport {\n BehaviorSubject,\n debounceTime,\n distinctUntilChanged,\n filter,\n forkJoin,\n map,\n merge,\n mergeMap,\n share,\n takeUntil,\n tap,\n withLatestFrom,\n} from \"rxjs\"\nimport { Commands } from \"./Commands\"\nimport { ProseHighlight } from \"./highlights/Highlight\"\nimport { ReaderHighlights } from \"./highlights/ReaderHighlights\"\nimport { consolidate } from \"./highlights/consolidate\"\nimport { report } from \"./report\"\nimport type { AnnotationsEnhancerAPI } from \"./types\"\n\nexport type { AnnotationsEnhancerAPI }\n\nexport const annotationsEnhancer =\n <InheritOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (options: InheritOptions): InheritOutput & AnnotationsEnhancerAPI => {\n const reader = next(options)\n const commands = new Commands()\n const highlightsSubject = new BehaviorSubject<ProseHighlight[]>([])\n const selectedHighlightSubject = new BehaviorSubject<string | undefined>(\n undefined,\n )\n\n const highlights$ = highlightsSubject\n .asObservable()\n .pipe(distinctUntilChanged())\n\n const readerHighlights = new ReaderHighlights(\n reader,\n highlightsSubject,\n selectedHighlightSubject,\n )\n\n const highlighted$ = commands.highlight$.pipe(\n map(({ data: { itemIndex, selection, ...rest } }) => {\n const spineItem = reader.spineItemsManager.get(itemIndex)\n\n if (!spineItem) return undefined\n\n const range = reader.selection.createOrderedRangeFromSelection({\n selection,\n spineItem,\n })\n\n if (!range) return undefined\n\n const { start: startCfi, end: endCfi } =\n reader.cfi.generateCfiFromRange(range, spineItem.item)\n\n const highlight = new ProseHighlight({\n cfi: startCfi,\n endCfi,\n itemIndex,\n id: window.crypto.randomUUID(),\n ...rest,\n })\n\n highlightsSubject.next([...highlightsSubject.getValue(), highlight])\n\n return [highlight.id]\n }),\n filter(isDefined),\n share(),\n )\n\n const add$ = commands.add$.pipe(\n map(({ data }) => {\n const annotations = Array.isArray(data) ? data : [data]\n\n const addedHighlights = annotations.map((annotation) => {\n const { itemIndex } = reader.cfi.parseCfi(annotation.cfi ?? \"\")\n\n const highlight = new ProseHighlight({ ...annotation, itemIndex })\n\n return highlight\n })\n\n highlightsSubject.next([\n ...highlightsSubject.getValue(),\n ...addedHighlights,\n ])\n }),\n )\n\n const delete$ = commands.delete$.pipe(\n tap(({ id }) => {\n highlightsSubject.next(\n highlightsSubject\n .getValue()\n .filter((highlight) => highlight.id !== id),\n )\n }),\n )\n\n const update$ = commands.update$.pipe(\n tap(({ id, data }) => {\n highlightsSubject.next(\n highlightsSubject.getValue().map((highlight) => {\n return highlight.id === id ? highlight.update(data) : highlight\n }),\n )\n }),\n )\n\n const select$ = commands.select$.pipe(\n tap(({ id }) => {\n selectedHighlightSubject.next(id)\n }),\n )\n\n const reset$ = commands.reset$.pipe(\n tap(() => {\n highlightsSubject.next([])\n }),\n )\n\n const highlightsConsolidation$ = merge(highlighted$, reader.layout$).pipe(\n debounceTime(50),\n withLatestFrom(highlights$),\n mergeMap(() =>\n forkJoin(\n highlightsSubject.value.map((highlight) =>\n consolidate(highlight, reader),\n ),\n ),\n ),\n tap((consolidatedHighlights) => {\n const consolidatedExistingHighlights = highlightsSubject.value.map(\n (highlight) =>\n consolidatedHighlights.find((c) => c.id === highlight.id) ??\n highlight,\n )\n\n highlightsSubject.next(consolidatedExistingHighlights)\n\n readerHighlights.layout()\n }),\n )\n\n merge(\n highlighted$,\n add$,\n delete$,\n update$,\n select$,\n reset$,\n highlightsConsolidation$,\n highlights$.pipe(\n tap((annotations) => {\n report.debug(\"highlights\", annotations)\n }),\n ),\n )\n .pipe(takeUntil(reader.$.destroy$))\n .subscribe()\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_ANNOTATIONS: true,\n destroy: () => {\n highlightsSubject.complete()\n commands.destroy()\n readerHighlights.destroy()\n reader.destroy()\n },\n annotations: {\n highlights$,\n highlightTap$: readerHighlights.tap$,\n isTargetWithinHighlight: readerHighlights.isTargetWithinHighlight,\n highlight: commands.highlight,\n add: commands.add,\n delete: commands.delete,\n update: commands.update,\n select: commands.select,\n reset: commands.reset,\n },\n }\n }\n"],"names":["DestroyableClass","Subject","filter","fromEvent","map","share","skip","tap","isSelected","takeUntil","switchMap","distinctUntilChanged","of","shareReplay","merge","highlights","BehaviorSubject","withLatestFrom","Report","isDefined","debounceTime","mergeMap","forkJoin"],"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.210.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": "d4d195dfe67e1e5797f05848f6d7363178f605db"
|
|
25
25
|
}
|