@prose-reader/enhancer-annotations 1.269.0 → 1.271.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 +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +1 -1
- package/dist/index.umd.cjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -457,7 +457,7 @@ const annotationsEnhancer = (next) => (options) => {
|
|
|
457
457
|
const delete$ = commands.delete$.pipe(
|
|
458
458
|
tap(({ id }) => {
|
|
459
459
|
annotationsSubject.next(
|
|
460
|
-
annotationsSubject.
|
|
460
|
+
annotationsSubject.value.filter((highlight) => highlight.id !== id)
|
|
461
461
|
);
|
|
462
462
|
})
|
|
463
463
|
);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/annotations/utils.ts","../src/annotations/SpineItemHighlight.ts","../src/annotations/SpineItemHighlights.ts","../src/annotations/ReaderHighlights.ts","../src/Commands.ts","../../shared/dist/index.js","../src/report.ts","../src/annotationsEnhancer.ts"],"sourcesContent":["export const createElementForRange = (\n range: Range,\n container: HTMLElement,\n color: string,\n) => {\n // Get all rects and group them by line (based on vertical position)\n const rects = Array.from(range.getClientRects())\n const lineGroups = new Map<number, DOMRect[]>()\n\n rects.forEach((rect) => {\n const lineY = Math.round(rect.top) // Round to handle minor pixel differences\n if (!lineGroups.has(lineY)) {\n lineGroups.set(lineY, [])\n }\n lineGroups.get(lineY)?.push(rect)\n })\n\n // Create one highlight element per line\n return Array.from(lineGroups.values()).map((lineRects) => {\n // Find the leftmost and rightmost points\n const left = Math.min(...lineRects.map((r) => r.left))\n const right = Math.max(...lineRects.map((r) => r.right))\n const top = lineRects[0]?.top\n const height = lineRects[0]?.height\n\n const rectEltContainer = container.ownerDocument.createElement(\"div\")\n const rectElt = container.ownerDocument.createElement(\"div\")\n rectEltContainer.style.cssText = `\n position: absolute;\n width: ${right - left}px;\n height: ${height}px;\n top: ${top}px;\n left: ${left}px;\n box-sizing: border-box;\n border: 3px dashed transparent;\n `\n rectElt.style.cssText = `\n height: 100%;\n width: 100%;\n opacity: 40%;\n background-color: ${color}\n `\n\n rectEltContainer.appendChild(rectElt)\n\n return rectEltContainer\n })\n}\n\nexport const copyPositionStyle = (source: HTMLElement, target: HTMLElement) => {\n target.style.cssText = source.style.cssText\n}\n\nexport const createAnnotationLayer = (\n container: HTMLElement,\n layer: HTMLElement,\n) => {\n const annotationLayer = container.ownerDocument.createElement(\"div\")\n\n layoutAnnotationLayer(layer, annotationLayer)\n\n container.appendChild(annotationLayer)\n\n return annotationLayer\n}\n\nexport const layoutAnnotationLayer = (\n layer: HTMLElement,\n annotationLayer: HTMLElement,\n) => {\n copyPositionStyle(layer, annotationLayer)\n\n if (layer.style.position === \"\") {\n annotationLayer.style.position = \"absolute\"\n annotationLayer.style.top = \"0\"\n }\n\n // annotationLayer.style.backgroundColor = \"red\"\n annotationLayer.style.opacity = \"1\"\n annotationLayer.style.pointerEvents = \"none\"\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n first,\n fromEvent,\n map,\n merge,\n type Observable,\n share,\n shareReplay,\n skip,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createElementForRange } from \"./utils\"\n\nexport class SpineItemHighlight extends DestroyableClass {\n private container: HTMLElement\n public readonly tap$: Observable<{\n event: Event\n highlight: RuntimeAnnotation\n }>\n private resolvedCfi$: Observable<ReturnType<Reader[\"cfi\"][\"resolveCfi\"]>>\n\n constructor(\n private spineItem: SpineItem,\n private containerElement: HTMLElement,\n private reader: Reader,\n public readonly highlight: RuntimeAnnotation,\n private isSelected: Observable<boolean>,\n ) {\n super()\n\n void this.spineItem\n void this.reader\n\n this.container = this.containerElement.ownerDocument.createElement(\"div\")\n this.container.dataset.highlightContainer = this.highlight.id\n this.containerElement.appendChild(this.container)\n\n this.tap$ = fromEvent(this.container, \"click\").pipe(\n map((event) => ({ event, highlight: this.highlight })),\n share(),\n )\n\n this.resolvedCfi$ = this.spineItem.watch(\"isLoaded\").pipe(\n map(() => this.reader.cfi.resolveCfi({ cfi: this.highlight.cfi })),\n shareReplay({ refCount: true, bufferSize: 1 }),\n )\n\n 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 merge(this.resolvedCfi$).pipe(takeUntil(this.destroy$)).subscribe()\n }\n\n public render() {\n return this.resolvedCfi$.pipe(\n first(),\n map((resolvedCfi) => {\n if (!resolvedCfi || !resolvedCfi.isCfiRange) return undefined\n\n const range = resolvedCfi.range\n\n this.container.innerHTML = \"\"\n\n /**\n * The nodes can be undefined if the cfi is not found.\n * This can happens if the item is not loaded (legit) or if the cfi\n * are just invalid.\n */\n if (!range) {\n return\n }\n\n const rectElements = createElementForRange(\n range,\n this.container,\n this.highlight.highlightColor ?? \"yellow\",\n )\n\n rectElements.forEach((elt) => {\n elt.style.pointerEvents = \"initial\"\n elt.style.cursor = \"pointer\"\n elt.dataset.highlightRect = this.highlight.id\n\n this.container.appendChild(elt)\n })\n\n const firstElement = rectElements[0]\n\n if (firstElement && this.highlight.notes) {\n const noteIcon = document.createElement(\"span\")\n noteIcon.textContent = \"📝\"\n noteIcon.style.position = \"absolute\"\n noteIcon.style.top = \"0\"\n noteIcon.style.left = \"0\"\n noteIcon.style.transform = \"translate(-0%, -80%)\"\n noteIcon.style.fontSize = \"18px\"\n noteIcon.style.opacity = \"50%\"\n firstElement.appendChild(noteIcon)\n }\n\n return null\n }),\n )\n }\n\n isWithinTarget(target: Node) {\n return this.container.contains(target)\n }\n\n public destroy() {\n super.destroy()\n\n this.container.remove()\n }\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n defaultIfEmpty,\n distinctUntilChanged,\n forkJoin,\n map,\n merge,\n type Observable,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n} from \"rxjs\"\nimport { SpineItemHighlight } from \"./SpineItemHighlight\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createAnnotationLayer, layoutAnnotationLayer } from \"./utils\"\n\nexport class SpineItemHighlights extends DestroyableClass {\n private layer: HTMLElement\n private highlights: SpineItemHighlight[] = []\n\n public readonly tap$: SpineItemHighlight[\"tap$\"]\n\n constructor(\n private annotations$: Observable<RuntimeAnnotation[]>,\n private spineItem: SpineItem,\n private reader: Reader,\n private selectedHighlight: Observable<string | undefined>,\n ) {\n super()\n\n const firstLayerElement =\n spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n this.layer = createAnnotationLayer(\n this.spineItem.containerElement,\n firstLayerElement,\n )\n\n const itemHighlights$ = this.annotations$.pipe(\n switchMap((annotations) => {\n this.highlights.forEach((highlight) => {\n highlight.destroy()\n })\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 annotations$.subscribe()\n }\n\n layout() {\n const firstLayerElement =\n this.spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n layoutAnnotationLayer(firstLayerElement, this.layer)\n\n return forkJoin(\n this.highlights.map((highlight) => highlight.render()),\n ).pipe(defaultIfEmpty(null))\n }\n\n getHighlightsForTarget(target: EventTarget) {\n return this.highlights.filter(\n (highlight) => target instanceof Node && highlight.isWithinTarget(target),\n )\n }\n\n destroy() {\n super.destroy()\n\n this.layer.remove()\n }\n}\n","import { DestroyableClass, type Reader } from \"@prose-reader/core\"\nimport {\n BehaviorSubject,\n defaultIfEmpty,\n forkJoin,\n map,\n merge,\n switchMap,\n} from \"rxjs\"\nimport { SpineItemHighlights } from \"./SpineItemHighlights\"\nimport type { RuntimeAnnotation } from \"./types\"\n\nexport class ReaderHighlights extends DestroyableClass {\n private spineItemHighlights = new BehaviorSubject<SpineItemHighlights[]>([])\n\n public tap$: SpineItemHighlights[\"tap$\"]\n\n constructor(\n private reader: Reader,\n private highlights: BehaviorSubject<RuntimeAnnotation[]>,\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 return forkJoin(\n this.spineItemHighlights.value.map((item) => item.layout()),\n ).pipe(defaultIfEmpty(null))\n }\n}\n","import { DestroyableClass } from \"@prose-reader/core\"\nimport { filter, Subject } from \"rxjs\"\nimport type { Annotation } from \"./types\"\n\ntype AnnotationSharedParams = Omit<Annotation, \"id\" | \"cfi\"> & {\n selection?: Selection\n}\n\ntype AnnotateParams = AnnotationSharedParams & {\n itemIndex: number\n}\n\ntype AnnotateAbsolutePageParams = AnnotationSharedParams & {\n absolutePageIndex: number\n}\n\ntype Command =\n | {\n type: \"annotate\"\n data: (AnnotateParams | AnnotateAbsolutePageParams) & {\n absolutePageIndex?: number\n }\n }\n | { type: \"add\"; data: Annotation | Annotation[] }\n | { type: \"delete\"; id: string }\n | {\n type: \"update\"\n id: string\n data: Pick<AnnotationSharedParams, \"highlightColor\" | \"notes\">\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 annotate$ = this.commandSubject.pipe(\n filter((command) => command.type === \"annotate\"),\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 annotate = (params: AnnotateParams) => {\n this.commandSubject.next({ type: \"annotate\", data: params })\n }\n\n annotateAbsolutePage = (params: AnnotateAbsolutePageParams) => {\n this.commandSubject.next({ type: \"annotate\", data: params })\n }\n\n add = (data: Annotation | Annotation[]) => {\n this.commandSubject.next({ type: \"add\", data })\n }\n\n delete = (id: string) => {\n this.commandSubject.next({ type: \"delete\", id })\n }\n\n update = (\n id: string,\n data: Pick<AnnotationSharedParams, \"highlightColor\" | \"notes\">,\n ) => {\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","const a = (o, n) => o === n ? !0 : o.length !== n.length ? !1 : o.every((e, t) => e === n[t]), f = (o) => o.split(/[#?]/)[0]?.split(\".\").pop()?.trim() || \"\";\nfunction s(o) {\n const n = [];\n if (o.length === 0)\n return \"\";\n if (typeof o[0] != \"string\")\n throw new TypeError(`Url must be a string. Received ${o[0]}`);\n o[0].match(/^[^/:]+:\\/*$/) && o.length > 1 && (o[0] = o.shift() + o[0]), o[0].match(/^file:\\/\\/\\//) ? o[0] = o[0].replace(/^([^/:]+):\\/*/, \"$1:///\") : o[0] = o[0].replace(/^([^/:]+):\\/*/, \"$1://\");\n for (let l = 0; l < o.length; l++) {\n let r = o[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 < o.length - 1 ? r = r.replace(/[/]+$/, \"\") : r = r.replace(/[/]+$/, \"/\"), n.push(r));\n }\n let e = n.join(\"/\");\n e = e.replace(/\\/(\\?|&|#[^!])/g, \"$1\");\n const t = e.split(\"?\");\n return e = t.shift() + (t.length > 0 ? \"?\" : \"\") + t.join(\"&\"), e;\n}\nfunction E(...o) {\n const n = Array.from(Array.isArray(o[0]) ? o[0] : o);\n return s(n);\n}\nfunction y(o) {\n const n = o.split(\"/\");\n return n.pop(), n.join(\"/\");\n}\nconst p = (o) => {\n switch (f(o)) {\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}, w = ({\n mimeType: o,\n uri: n\n}) => (o ?? p(n ?? \"\"))?.startsWith(\"application/xhtml+xml\"), R = (o) => o.length ? o.indexOf(\";\") ? o.substring(0, o.indexOf(\";\")) : o : void 0, g = Object.prototype.hasOwnProperty, d = (o, n) => o === n ? o !== 0 || n !== 0 || 1 / o === 1 / n : !1, m = (o, n, e) => {\n if (o === n)\n return !0;\n if (typeof o != \"object\" || o === null || typeof n != \"object\" || n === null)\n return !1;\n const t = Object.keys(o), l = Object.keys(n);\n if (t.length !== l.length)\n return !1;\n const r = e && typeof e.customEqual == \"function\" ? e.customEqual : d;\n for (let c = 0; c < t.length; c++) {\n const i = t[c] || \"\";\n if (!g.call(n, i) || !r(o[i], n[i]))\n return !1;\n }\n return !0;\n}, v = (o, n) => o.reduce(\n (e, t) => {\n const l = n(t);\n return e[l] || (e[l] = []), e[l].push(t), e;\n },\n {}\n);\nfunction O(o, n) {\n const e = { ...o };\n for (const t in n)\n if (Object.hasOwn(n, t)) {\n const l = n[t];\n (l !== void 0 || !(t in o)) && (e[t] = l);\n }\n return e;\n}\nconst h = () => {\n if (!(typeof window > \"u\"))\n return window;\n};\nfunction $() {\n const o = h()?.__PROSE_READER_DEBUG;\n return o === !0 || o === \"true\";\n}\nconst u = (o, n = $(), e) => ({\n namespace: (t, l) => u(`${o} [${t}]`, l, e),\n debug: n ? o ? Function.prototype.bind.call(\n console.debug,\n console,\n o,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.debug,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n },\n info: n ? o ? Function.prototype.bind.call(\n console.info,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.info,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n },\n log: n ? o ? Function.prototype.bind.call(\n console.log,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(console.log, console) : () => {\n },\n warn: n ? o ? Function.prototype.bind.call(\n console.warn,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.warn,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n },\n error: n ? o ? Function.prototype.bind.call(\n console.error,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.error,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n }\n}), _ = {\n ...u(),\n namespace: (o, n, e) => u(`[${o}]`, n, e)\n}, x = \"prose-reader-resource-error\";\nexport {\n x as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,\n _ as Report,\n a as arrayEqual,\n p as detectMimeTypeFromName,\n y as getParentPath,\n f as getUrlExtension,\n v as groupBy,\n d as is,\n m as isShallowEqual,\n w as isXmlBasedMimeType,\n R as parseContentType,\n O as shallowMergeIfDefined,\n E 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 { isDefined, type Reader } from \"@prose-reader/core\"\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n merge,\n of,\n share,\n shareReplay,\n switchMap,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport { ReaderHighlights } from \"./annotations/ReaderHighlights\"\nimport type { RuntimeAnnotation } from \"./annotations/types\"\nimport { Commands } from \"./Commands\"\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 annotationsSubject = new BehaviorSubject<RuntimeAnnotation[]>([])\n const selectedHighlightSubject = new BehaviorSubject<string | undefined>(\n undefined,\n )\n\n const annotations$ = annotationsSubject.asObservable().pipe(\n distinctUntilChanged(),\n tap((annotations) => {\n report.debug(\"annotations\", annotations)\n }),\n shareReplay({\n refCount: true,\n bufferSize: 1,\n }),\n )\n\n const readerHighlights = new ReaderHighlights(\n reader,\n annotationsSubject,\n selectedHighlightSubject,\n )\n\n const resolveItemInformation = (params: {\n absolutePageIndex?: number\n itemIndex?: number\n }) => {\n if (params.itemIndex !== undefined)\n return { itemIndex: params.itemIndex, pageIndex: undefined }\n\n if (params.absolutePageIndex !== undefined) {\n return reader.spine.pages.fromAbsolutePageIndex(\n params.absolutePageIndex,\n )\n }\n\n return undefined\n }\n\n const annotated$ = commands.annotate$.pipe(\n map(({ data: { selection, ...rest } }) => {\n const { itemIndex, pageIndex = 0 } = resolveItemInformation(rest) ?? {}\n const spineItem = reader.spineItemsManager.get(itemIndex)\n\n if (!spineItem) return undefined\n\n const range = selection\n ? reader.selection.createOrderedRangeFromSelection({\n selection,\n spineItem,\n })\n : undefined\n\n const cfi = range\n ? reader.cfi.generateCfiFromRange(range, spineItem.item)\n : reader.cfi.generateCfiForSpineItemPage({ pageIndex, spineItem })\n\n const highlight = {\n cfi,\n itemIndex: spineItem.index,\n id: window.crypto.randomUUID(),\n ...rest,\n } satisfies RuntimeAnnotation\n\n annotationsSubject.next([...annotationsSubject.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 = 0 } = reader.cfi.parseCfi(annotation.cfi ?? \"\")\n\n const highlight = {\n ...annotation,\n itemIndex,\n } satisfies RuntimeAnnotation\n\n return highlight\n })\n\n annotationsSubject.next([\n ...annotationsSubject.getValue(),\n ...addedHighlights,\n ])\n }),\n )\n\n const delete$ = commands.delete$.pipe(\n tap(({ id }) => {\n annotationsSubject.next(\n annotationsSubject\n .getValue()\n .filter((highlight) => highlight.id !== id),\n )\n }),\n )\n\n const update$ = commands.update$.pipe(\n tap(({ id, data }) => {\n annotationsSubject.next(\n annotationsSubject.getValue().map((highlight) => {\n return highlight.id === id ? { ...highlight, ...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 annotationsSubject.next([])\n }),\n )\n\n const renderAnnotations$ = merge(annotations$, reader.layout$).pipe(\n debounceTime(50),\n switchMap(() => readerHighlights.layout()),\n )\n\n const candidates$ = reader.layoutInfo$.pipe(\n switchMap(({ pages }) =>\n combineLatest(\n pages.map((page) => {\n const item = reader.spineItemsManager.get(page.itemIndex)\n\n if (!item) return of(false)\n\n // pre-paginated can always be annotated on their unique page\n if (item.renditionLayout === \"pre-paginated\") return of(true)\n\n if (page.firstVisibleNode) return of(true)\n\n return of(false)\n }),\n ),\n ),\n )\n\n merge(\n annotated$,\n add$,\n delete$,\n update$,\n select$,\n reset$,\n renderAnnotations$,\n annotations$,\n )\n .pipe(takeUntil(reader.$.destroy$))\n .subscribe()\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_ANNOTATIONS: true,\n destroy: () => {\n annotationsSubject.complete()\n commands.destroy()\n readerHighlights.destroy()\n reader.destroy()\n },\n annotations: {\n annotations$: annotations$,\n highlightTap$: readerHighlights.tap$,\n candidates$,\n isTargetWithinHighlight: readerHighlights.isTargetWithinHighlight,\n annotate: commands.annotate,\n annotateAbsolutePage: commands.annotateAbsolutePage,\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/annotations/utils.ts","../src/annotations/SpineItemHighlight.ts","../src/annotations/SpineItemHighlights.ts","../src/annotations/ReaderHighlights.ts","../src/Commands.ts","../../shared/dist/index.js","../src/report.ts","../src/annotationsEnhancer.ts"],"sourcesContent":["export const createElementForRange = (\n range: Range,\n container: HTMLElement,\n color: string,\n) => {\n // Get all rects and group them by line (based on vertical position)\n const rects = Array.from(range.getClientRects())\n const lineGroups = new Map<number, DOMRect[]>()\n\n rects.forEach((rect) => {\n const lineY = Math.round(rect.top) // Round to handle minor pixel differences\n if (!lineGroups.has(lineY)) {\n lineGroups.set(lineY, [])\n }\n lineGroups.get(lineY)?.push(rect)\n })\n\n // Create one highlight element per line\n return Array.from(lineGroups.values()).map((lineRects) => {\n // Find the leftmost and rightmost points\n const left = Math.min(...lineRects.map((r) => r.left))\n const right = Math.max(...lineRects.map((r) => r.right))\n const top = lineRects[0]?.top\n const height = lineRects[0]?.height\n\n const rectEltContainer = container.ownerDocument.createElement(\"div\")\n const rectElt = container.ownerDocument.createElement(\"div\")\n rectEltContainer.style.cssText = `\n position: absolute;\n width: ${right - left}px;\n height: ${height}px;\n top: ${top}px;\n left: ${left}px;\n box-sizing: border-box;\n border: 3px dashed transparent;\n `\n rectElt.style.cssText = `\n height: 100%;\n width: 100%;\n opacity: 40%;\n background-color: ${color}\n `\n\n rectEltContainer.appendChild(rectElt)\n\n return rectEltContainer\n })\n}\n\nexport const copyPositionStyle = (source: HTMLElement, target: HTMLElement) => {\n target.style.cssText = source.style.cssText\n}\n\nexport const createAnnotationLayer = (\n container: HTMLElement,\n layer: HTMLElement,\n) => {\n const annotationLayer = container.ownerDocument.createElement(\"div\")\n\n layoutAnnotationLayer(layer, annotationLayer)\n\n container.appendChild(annotationLayer)\n\n return annotationLayer\n}\n\nexport const layoutAnnotationLayer = (\n layer: HTMLElement,\n annotationLayer: HTMLElement,\n) => {\n copyPositionStyle(layer, annotationLayer)\n\n if (layer.style.position === \"\") {\n annotationLayer.style.position = \"absolute\"\n annotationLayer.style.top = \"0\"\n }\n\n // annotationLayer.style.backgroundColor = \"red\"\n annotationLayer.style.opacity = \"1\"\n annotationLayer.style.pointerEvents = \"none\"\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n first,\n fromEvent,\n map,\n merge,\n type Observable,\n share,\n shareReplay,\n skip,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createElementForRange } from \"./utils\"\n\nexport class SpineItemHighlight extends DestroyableClass {\n private container: HTMLElement\n public readonly tap$: Observable<{\n event: Event\n highlight: RuntimeAnnotation\n }>\n private resolvedCfi$: Observable<ReturnType<Reader[\"cfi\"][\"resolveCfi\"]>>\n\n constructor(\n private spineItem: SpineItem,\n private containerElement: HTMLElement,\n private reader: Reader,\n public readonly highlight: RuntimeAnnotation,\n private isSelected: Observable<boolean>,\n ) {\n super()\n\n void this.spineItem\n void this.reader\n\n this.container = this.containerElement.ownerDocument.createElement(\"div\")\n this.container.dataset.highlightContainer = this.highlight.id\n this.containerElement.appendChild(this.container)\n\n this.tap$ = fromEvent(this.container, \"click\").pipe(\n map((event) => ({ event, highlight: this.highlight })),\n share(),\n )\n\n this.resolvedCfi$ = this.spineItem.watch(\"isLoaded\").pipe(\n map(() => this.reader.cfi.resolveCfi({ cfi: this.highlight.cfi })),\n shareReplay({ refCount: true, bufferSize: 1 }),\n )\n\n 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 merge(this.resolvedCfi$).pipe(takeUntil(this.destroy$)).subscribe()\n }\n\n public render() {\n return this.resolvedCfi$.pipe(\n first(),\n map((resolvedCfi) => {\n if (!resolvedCfi || !resolvedCfi.isCfiRange) return undefined\n\n const range = resolvedCfi.range\n\n this.container.innerHTML = \"\"\n\n /**\n * The nodes can be undefined if the cfi is not found.\n * This can happens if the item is not loaded (legit) or if the cfi\n * are just invalid.\n */\n if (!range) {\n return\n }\n\n const rectElements = createElementForRange(\n range,\n this.container,\n this.highlight.highlightColor ?? \"yellow\",\n )\n\n rectElements.forEach((elt) => {\n elt.style.pointerEvents = \"initial\"\n elt.style.cursor = \"pointer\"\n elt.dataset.highlightRect = this.highlight.id\n\n this.container.appendChild(elt)\n })\n\n const firstElement = rectElements[0]\n\n if (firstElement && this.highlight.notes) {\n const noteIcon = document.createElement(\"span\")\n noteIcon.textContent = \"📝\"\n noteIcon.style.position = \"absolute\"\n noteIcon.style.top = \"0\"\n noteIcon.style.left = \"0\"\n noteIcon.style.transform = \"translate(-0%, -80%)\"\n noteIcon.style.fontSize = \"18px\"\n noteIcon.style.opacity = \"50%\"\n firstElement.appendChild(noteIcon)\n }\n\n return null\n }),\n )\n }\n\n isWithinTarget(target: Node) {\n return this.container.contains(target)\n }\n\n public destroy() {\n super.destroy()\n\n this.container.remove()\n }\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n defaultIfEmpty,\n distinctUntilChanged,\n forkJoin,\n map,\n merge,\n type Observable,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n} from \"rxjs\"\nimport { SpineItemHighlight } from \"./SpineItemHighlight\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createAnnotationLayer, layoutAnnotationLayer } from \"./utils\"\n\nexport class SpineItemHighlights extends DestroyableClass {\n private layer: HTMLElement\n private highlights: SpineItemHighlight[] = []\n\n public readonly tap$: SpineItemHighlight[\"tap$\"]\n\n constructor(\n private annotations$: Observable<RuntimeAnnotation[]>,\n private spineItem: SpineItem,\n private reader: Reader,\n private selectedHighlight: Observable<string | undefined>,\n ) {\n super()\n\n const firstLayerElement =\n spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n this.layer = createAnnotationLayer(\n this.spineItem.containerElement,\n firstLayerElement,\n )\n\n const itemHighlights$ = this.annotations$.pipe(\n switchMap((annotations) => {\n this.highlights.forEach((highlight) => {\n highlight.destroy()\n })\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 annotations$.subscribe()\n }\n\n layout() {\n const firstLayerElement =\n this.spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n layoutAnnotationLayer(firstLayerElement, this.layer)\n\n return forkJoin(\n this.highlights.map((highlight) => highlight.render()),\n ).pipe(defaultIfEmpty(null))\n }\n\n getHighlightsForTarget(target: EventTarget) {\n return this.highlights.filter(\n (highlight) => target instanceof Node && highlight.isWithinTarget(target),\n )\n }\n\n destroy() {\n super.destroy()\n\n this.layer.remove()\n }\n}\n","import { DestroyableClass, type Reader } from \"@prose-reader/core\"\nimport {\n BehaviorSubject,\n defaultIfEmpty,\n forkJoin,\n map,\n merge,\n switchMap,\n} from \"rxjs\"\nimport { SpineItemHighlights } from \"./SpineItemHighlights\"\nimport type { RuntimeAnnotation } from \"./types\"\n\nexport class ReaderHighlights extends DestroyableClass {\n private spineItemHighlights = new BehaviorSubject<SpineItemHighlights[]>([])\n\n public tap$: SpineItemHighlights[\"tap$\"]\n\n constructor(\n private reader: Reader,\n private highlights: BehaviorSubject<RuntimeAnnotation[]>,\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 return forkJoin(\n this.spineItemHighlights.value.map((item) => item.layout()),\n ).pipe(defaultIfEmpty(null))\n }\n}\n","import { DestroyableClass } from \"@prose-reader/core\"\nimport { filter, Subject } from \"rxjs\"\nimport type { Annotation } from \"./types\"\n\ntype AnnotationSharedParams = Omit<Annotation, \"id\" | \"cfi\"> & {\n selection?: Selection\n}\n\ntype AnnotateParams = AnnotationSharedParams & {\n itemIndex: number\n}\n\ntype AnnotateAbsolutePageParams = AnnotationSharedParams & {\n absolutePageIndex: number\n}\n\ntype Command =\n | {\n type: \"annotate\"\n data: (AnnotateParams | AnnotateAbsolutePageParams) & {\n absolutePageIndex?: number\n }\n }\n | { type: \"add\"; data: Annotation | Annotation[] }\n | { type: \"delete\"; id: string }\n | {\n type: \"update\"\n id: string\n data: Pick<AnnotationSharedParams, \"highlightColor\" | \"notes\">\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 annotate$ = this.commandSubject.pipe(\n filter((command) => command.type === \"annotate\"),\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 annotate = (params: AnnotateParams) => {\n this.commandSubject.next({ type: \"annotate\", data: params })\n }\n\n annotateAbsolutePage = (params: AnnotateAbsolutePageParams) => {\n this.commandSubject.next({ type: \"annotate\", data: params })\n }\n\n add = (data: Annotation | Annotation[]) => {\n this.commandSubject.next({ type: \"add\", data })\n }\n\n delete = (id: string) => {\n this.commandSubject.next({ type: \"delete\", id })\n }\n\n update = (\n id: string,\n data: Pick<AnnotationSharedParams, \"highlightColor\" | \"notes\">,\n ) => {\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","const a = (o, n) => o === n ? !0 : o.length !== n.length ? !1 : o.every((e, t) => e === n[t]), f = (o) => o.split(/[#?]/)[0]?.split(\".\").pop()?.trim() || \"\";\nfunction s(o) {\n const n = [];\n if (o.length === 0)\n return \"\";\n if (typeof o[0] != \"string\")\n throw new TypeError(`Url must be a string. Received ${o[0]}`);\n o[0].match(/^[^/:]+:\\/*$/) && o.length > 1 && (o[0] = o.shift() + o[0]), o[0].match(/^file:\\/\\/\\//) ? o[0] = o[0].replace(/^([^/:]+):\\/*/, \"$1:///\") : o[0] = o[0].replace(/^([^/:]+):\\/*/, \"$1://\");\n for (let l = 0; l < o.length; l++) {\n let r = o[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 < o.length - 1 ? r = r.replace(/[/]+$/, \"\") : r = r.replace(/[/]+$/, \"/\"), n.push(r));\n }\n let e = n.join(\"/\");\n e = e.replace(/\\/(\\?|&|#[^!])/g, \"$1\");\n const t = e.split(\"?\");\n return e = t.shift() + (t.length > 0 ? \"?\" : \"\") + t.join(\"&\"), e;\n}\nfunction E(...o) {\n const n = Array.from(Array.isArray(o[0]) ? o[0] : o);\n return s(n);\n}\nfunction y(o) {\n const n = o.split(\"/\");\n return n.pop(), n.join(\"/\");\n}\nconst p = (o) => {\n switch (f(o)) {\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}, w = ({\n mimeType: o,\n uri: n\n}) => (o ?? p(n ?? \"\"))?.startsWith(\"application/xhtml+xml\"), R = (o) => o.length ? o.indexOf(\";\") ? o.substring(0, o.indexOf(\";\")) : o : void 0, g = Object.prototype.hasOwnProperty, d = (o, n) => o === n ? o !== 0 || n !== 0 || 1 / o === 1 / n : !1, m = (o, n, e) => {\n if (o === n)\n return !0;\n if (typeof o != \"object\" || o === null || typeof n != \"object\" || n === null)\n return !1;\n const t = Object.keys(o), l = Object.keys(n);\n if (t.length !== l.length)\n return !1;\n const r = e && typeof e.customEqual == \"function\" ? e.customEqual : d;\n for (let c = 0; c < t.length; c++) {\n const i = t[c] || \"\";\n if (!g.call(n, i) || !r(o[i], n[i]))\n return !1;\n }\n return !0;\n}, v = (o, n) => o.reduce(\n (e, t) => {\n const l = n(t);\n return e[l] || (e[l] = []), e[l].push(t), e;\n },\n {}\n);\nfunction O(o, n) {\n const e = { ...o };\n for (const t in n)\n if (Object.hasOwn(n, t)) {\n const l = n[t];\n (l !== void 0 || !(t in o)) && (e[t] = l);\n }\n return e;\n}\nconst h = () => {\n if (!(typeof window > \"u\"))\n return window;\n};\nfunction $() {\n const o = h()?.__PROSE_READER_DEBUG;\n return o === !0 || o === \"true\";\n}\nconst u = (o, n = $(), e) => ({\n namespace: (t, l) => u(`${o} [${t}]`, l, e),\n debug: n ? o ? Function.prototype.bind.call(\n console.debug,\n console,\n o,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.debug,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n },\n info: n ? o ? Function.prototype.bind.call(\n console.info,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.info,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n },\n log: n ? o ? Function.prototype.bind.call(\n console.log,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(console.log, console) : () => {\n },\n warn: n ? o ? Function.prototype.bind.call(\n console.warn,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.warn,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n },\n error: n ? o ? Function.prototype.bind.call(\n console.error,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.error,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n }\n}), _ = {\n ...u(),\n namespace: (o, n, e) => u(`[${o}]`, n, e)\n}, x = \"prose-reader-resource-error\";\nexport {\n x as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,\n _ as Report,\n a as arrayEqual,\n p as detectMimeTypeFromName,\n y as getParentPath,\n f as getUrlExtension,\n v as groupBy,\n d as is,\n m as isShallowEqual,\n w as isXmlBasedMimeType,\n R as parseContentType,\n O as shallowMergeIfDefined,\n E 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 { isDefined, type Reader } from \"@prose-reader/core\"\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n merge,\n of,\n share,\n shareReplay,\n switchMap,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport { ReaderHighlights } from \"./annotations/ReaderHighlights\"\nimport type { RuntimeAnnotation } from \"./annotations/types\"\nimport { Commands } from \"./Commands\"\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 annotationsSubject = new BehaviorSubject<RuntimeAnnotation[]>([])\n const selectedHighlightSubject = new BehaviorSubject<string | undefined>(\n undefined,\n )\n\n const annotations$ = annotationsSubject.asObservable().pipe(\n distinctUntilChanged(),\n tap((annotations) => {\n report.debug(\"annotations\", annotations)\n }),\n shareReplay({\n refCount: true,\n bufferSize: 1,\n }),\n )\n\n const readerHighlights = new ReaderHighlights(\n reader,\n annotationsSubject,\n selectedHighlightSubject,\n )\n\n const resolveItemInformation = (params: {\n absolutePageIndex?: number\n itemIndex?: number\n }) => {\n if (params.itemIndex !== undefined)\n return { itemIndex: params.itemIndex, pageIndex: undefined }\n\n if (params.absolutePageIndex !== undefined) {\n return reader.spine.pages.fromAbsolutePageIndex(\n params.absolutePageIndex,\n )\n }\n\n return undefined\n }\n\n const annotated$ = commands.annotate$.pipe(\n map(({ data: { selection, ...rest } }) => {\n const { itemIndex, pageIndex = 0 } = resolveItemInformation(rest) ?? {}\n const spineItem = reader.spineItemsManager.get(itemIndex)\n\n if (!spineItem) return undefined\n\n const range = selection\n ? reader.selection.createOrderedRangeFromSelection({\n selection,\n spineItem,\n })\n : undefined\n\n const cfi = range\n ? reader.cfi.generateCfiFromRange(range, spineItem.item)\n : reader.cfi.generateCfiForSpineItemPage({ pageIndex, spineItem })\n\n const highlight = {\n cfi,\n itemIndex: spineItem.index,\n id: window.crypto.randomUUID(),\n ...rest,\n } satisfies RuntimeAnnotation\n\n annotationsSubject.next([...annotationsSubject.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 = 0 } = reader.cfi.parseCfi(annotation.cfi ?? \"\")\n\n const highlight = {\n ...annotation,\n itemIndex,\n } satisfies RuntimeAnnotation\n\n return highlight\n })\n\n annotationsSubject.next([\n ...annotationsSubject.getValue(),\n ...addedHighlights,\n ])\n }),\n )\n\n const delete$ = commands.delete$.pipe(\n tap(({ id }) => {\n annotationsSubject.next(\n annotationsSubject.value.filter((highlight) => highlight.id !== id),\n )\n }),\n )\n\n const update$ = commands.update$.pipe(\n tap(({ id, data }) => {\n annotationsSubject.next(\n annotationsSubject.getValue().map((highlight) => {\n return highlight.id === id ? { ...highlight, ...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 annotationsSubject.next([])\n }),\n )\n\n const renderAnnotations$ = merge(annotations$, reader.layout$).pipe(\n debounceTime(50),\n switchMap(() => readerHighlights.layout()),\n )\n\n const candidates$ = reader.layoutInfo$.pipe(\n switchMap(({ pages }) =>\n combineLatest(\n pages.map((page) => {\n const item = reader.spineItemsManager.get(page.itemIndex)\n\n if (!item) return of(false)\n\n // pre-paginated can always be annotated on their unique page\n if (item.renditionLayout === \"pre-paginated\") return of(true)\n\n if (page.firstVisibleNode) return of(true)\n\n return of(false)\n }),\n ),\n ),\n )\n\n merge(\n annotated$,\n add$,\n delete$,\n update$,\n select$,\n reset$,\n renderAnnotations$,\n annotations$,\n )\n .pipe(takeUntil(reader.$.destroy$))\n .subscribe()\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_ANNOTATIONS: true,\n destroy: () => {\n annotationsSubject.complete()\n commands.destroy()\n readerHighlights.destroy()\n reader.destroy()\n },\n annotations: {\n annotations$: annotations$,\n highlightTap$: readerHighlights.tap$,\n candidates$,\n isTargetWithinHighlight: readerHighlights.isTargetWithinHighlight,\n annotate: commands.annotate,\n annotateAbsolutePage: commands.annotateAbsolutePage,\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
|
@@ -460,7 +460,7 @@
|
|
|
460
460
|
const delete$ = commands.delete$.pipe(
|
|
461
461
|
rxjs.tap(({ id }) => {
|
|
462
462
|
annotationsSubject.next(
|
|
463
|
-
annotationsSubject.
|
|
463
|
+
annotationsSubject.value.filter((highlight) => highlight.id !== id)
|
|
464
464
|
);
|
|
465
465
|
})
|
|
466
466
|
);
|
package/dist/index.umd.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.cjs","sources":["../src/annotations/utils.ts","../src/annotations/SpineItemHighlight.ts","../src/annotations/SpineItemHighlights.ts","../src/annotations/ReaderHighlights.ts","../src/Commands.ts","../../shared/dist/index.js","../src/report.ts","../src/annotationsEnhancer.ts"],"sourcesContent":["export const createElementForRange = (\n range: Range,\n container: HTMLElement,\n color: string,\n) => {\n // Get all rects and group them by line (based on vertical position)\n const rects = Array.from(range.getClientRects())\n const lineGroups = new Map<number, DOMRect[]>()\n\n rects.forEach((rect) => {\n const lineY = Math.round(rect.top) // Round to handle minor pixel differences\n if (!lineGroups.has(lineY)) {\n lineGroups.set(lineY, [])\n }\n lineGroups.get(lineY)?.push(rect)\n })\n\n // Create one highlight element per line\n return Array.from(lineGroups.values()).map((lineRects) => {\n // Find the leftmost and rightmost points\n const left = Math.min(...lineRects.map((r) => r.left))\n const right = Math.max(...lineRects.map((r) => r.right))\n const top = lineRects[0]?.top\n const height = lineRects[0]?.height\n\n const rectEltContainer = container.ownerDocument.createElement(\"div\")\n const rectElt = container.ownerDocument.createElement(\"div\")\n rectEltContainer.style.cssText = `\n position: absolute;\n width: ${right - left}px;\n height: ${height}px;\n top: ${top}px;\n left: ${left}px;\n box-sizing: border-box;\n border: 3px dashed transparent;\n `\n rectElt.style.cssText = `\n height: 100%;\n width: 100%;\n opacity: 40%;\n background-color: ${color}\n `\n\n rectEltContainer.appendChild(rectElt)\n\n return rectEltContainer\n })\n}\n\nexport const copyPositionStyle = (source: HTMLElement, target: HTMLElement) => {\n target.style.cssText = source.style.cssText\n}\n\nexport const createAnnotationLayer = (\n container: HTMLElement,\n layer: HTMLElement,\n) => {\n const annotationLayer = container.ownerDocument.createElement(\"div\")\n\n layoutAnnotationLayer(layer, annotationLayer)\n\n container.appendChild(annotationLayer)\n\n return annotationLayer\n}\n\nexport const layoutAnnotationLayer = (\n layer: HTMLElement,\n annotationLayer: HTMLElement,\n) => {\n copyPositionStyle(layer, annotationLayer)\n\n if (layer.style.position === \"\") {\n annotationLayer.style.position = \"absolute\"\n annotationLayer.style.top = \"0\"\n }\n\n // annotationLayer.style.backgroundColor = \"red\"\n annotationLayer.style.opacity = \"1\"\n annotationLayer.style.pointerEvents = \"none\"\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n first,\n fromEvent,\n map,\n merge,\n type Observable,\n share,\n shareReplay,\n skip,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createElementForRange } from \"./utils\"\n\nexport class SpineItemHighlight extends DestroyableClass {\n private container: HTMLElement\n public readonly tap$: Observable<{\n event: Event\n highlight: RuntimeAnnotation\n }>\n private resolvedCfi$: Observable<ReturnType<Reader[\"cfi\"][\"resolveCfi\"]>>\n\n constructor(\n private spineItem: SpineItem,\n private containerElement: HTMLElement,\n private reader: Reader,\n public readonly highlight: RuntimeAnnotation,\n private isSelected: Observable<boolean>,\n ) {\n super()\n\n void this.spineItem\n void this.reader\n\n this.container = this.containerElement.ownerDocument.createElement(\"div\")\n this.container.dataset.highlightContainer = this.highlight.id\n this.containerElement.appendChild(this.container)\n\n this.tap$ = fromEvent(this.container, \"click\").pipe(\n map((event) => ({ event, highlight: this.highlight })),\n share(),\n )\n\n this.resolvedCfi$ = this.spineItem.watch(\"isLoaded\").pipe(\n map(() => this.reader.cfi.resolveCfi({ cfi: this.highlight.cfi })),\n shareReplay({ refCount: true, bufferSize: 1 }),\n )\n\n 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 merge(this.resolvedCfi$).pipe(takeUntil(this.destroy$)).subscribe()\n }\n\n public render() {\n return this.resolvedCfi$.pipe(\n first(),\n map((resolvedCfi) => {\n if (!resolvedCfi || !resolvedCfi.isCfiRange) return undefined\n\n const range = resolvedCfi.range\n\n this.container.innerHTML = \"\"\n\n /**\n * The nodes can be undefined if the cfi is not found.\n * This can happens if the item is not loaded (legit) or if the cfi\n * are just invalid.\n */\n if (!range) {\n return\n }\n\n const rectElements = createElementForRange(\n range,\n this.container,\n this.highlight.highlightColor ?? \"yellow\",\n )\n\n rectElements.forEach((elt) => {\n elt.style.pointerEvents = \"initial\"\n elt.style.cursor = \"pointer\"\n elt.dataset.highlightRect = this.highlight.id\n\n this.container.appendChild(elt)\n })\n\n const firstElement = rectElements[0]\n\n if (firstElement && this.highlight.notes) {\n const noteIcon = document.createElement(\"span\")\n noteIcon.textContent = \"📝\"\n noteIcon.style.position = \"absolute\"\n noteIcon.style.top = \"0\"\n noteIcon.style.left = \"0\"\n noteIcon.style.transform = \"translate(-0%, -80%)\"\n noteIcon.style.fontSize = \"18px\"\n noteIcon.style.opacity = \"50%\"\n firstElement.appendChild(noteIcon)\n }\n\n return null\n }),\n )\n }\n\n isWithinTarget(target: Node) {\n return this.container.contains(target)\n }\n\n public destroy() {\n super.destroy()\n\n this.container.remove()\n }\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n defaultIfEmpty,\n distinctUntilChanged,\n forkJoin,\n map,\n merge,\n type Observable,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n} from \"rxjs\"\nimport { SpineItemHighlight } from \"./SpineItemHighlight\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createAnnotationLayer, layoutAnnotationLayer } from \"./utils\"\n\nexport class SpineItemHighlights extends DestroyableClass {\n private layer: HTMLElement\n private highlights: SpineItemHighlight[] = []\n\n public readonly tap$: SpineItemHighlight[\"tap$\"]\n\n constructor(\n private annotations$: Observable<RuntimeAnnotation[]>,\n private spineItem: SpineItem,\n private reader: Reader,\n private selectedHighlight: Observable<string | undefined>,\n ) {\n super()\n\n const firstLayerElement =\n spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n this.layer = createAnnotationLayer(\n this.spineItem.containerElement,\n firstLayerElement,\n )\n\n const itemHighlights$ = this.annotations$.pipe(\n switchMap((annotations) => {\n this.highlights.forEach((highlight) => {\n highlight.destroy()\n })\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 annotations$.subscribe()\n }\n\n layout() {\n const firstLayerElement =\n this.spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n layoutAnnotationLayer(firstLayerElement, this.layer)\n\n return forkJoin(\n this.highlights.map((highlight) => highlight.render()),\n ).pipe(defaultIfEmpty(null))\n }\n\n getHighlightsForTarget(target: EventTarget) {\n return this.highlights.filter(\n (highlight) => target instanceof Node && highlight.isWithinTarget(target),\n )\n }\n\n destroy() {\n super.destroy()\n\n this.layer.remove()\n }\n}\n","import { DestroyableClass, type Reader } from \"@prose-reader/core\"\nimport {\n BehaviorSubject,\n defaultIfEmpty,\n forkJoin,\n map,\n merge,\n switchMap,\n} from \"rxjs\"\nimport { SpineItemHighlights } from \"./SpineItemHighlights\"\nimport type { RuntimeAnnotation } from \"./types\"\n\nexport class ReaderHighlights extends DestroyableClass {\n private spineItemHighlights = new BehaviorSubject<SpineItemHighlights[]>([])\n\n public tap$: SpineItemHighlights[\"tap$\"]\n\n constructor(\n private reader: Reader,\n private highlights: BehaviorSubject<RuntimeAnnotation[]>,\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 return forkJoin(\n this.spineItemHighlights.value.map((item) => item.layout()),\n ).pipe(defaultIfEmpty(null))\n }\n}\n","import { DestroyableClass } from \"@prose-reader/core\"\nimport { filter, Subject } from \"rxjs\"\nimport type { Annotation } from \"./types\"\n\ntype AnnotationSharedParams = Omit<Annotation, \"id\" | \"cfi\"> & {\n selection?: Selection\n}\n\ntype AnnotateParams = AnnotationSharedParams & {\n itemIndex: number\n}\n\ntype AnnotateAbsolutePageParams = AnnotationSharedParams & {\n absolutePageIndex: number\n}\n\ntype Command =\n | {\n type: \"annotate\"\n data: (AnnotateParams | AnnotateAbsolutePageParams) & {\n absolutePageIndex?: number\n }\n }\n | { type: \"add\"; data: Annotation | Annotation[] }\n | { type: \"delete\"; id: string }\n | {\n type: \"update\"\n id: string\n data: Pick<AnnotationSharedParams, \"highlightColor\" | \"notes\">\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 annotate$ = this.commandSubject.pipe(\n filter((command) => command.type === \"annotate\"),\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 annotate = (params: AnnotateParams) => {\n this.commandSubject.next({ type: \"annotate\", data: params })\n }\n\n annotateAbsolutePage = (params: AnnotateAbsolutePageParams) => {\n this.commandSubject.next({ type: \"annotate\", data: params })\n }\n\n add = (data: Annotation | Annotation[]) => {\n this.commandSubject.next({ type: \"add\", data })\n }\n\n delete = (id: string) => {\n this.commandSubject.next({ type: \"delete\", id })\n }\n\n update = (\n id: string,\n data: Pick<AnnotationSharedParams, \"highlightColor\" | \"notes\">,\n ) => {\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","const a = (o, n) => o === n ? !0 : o.length !== n.length ? !1 : o.every((e, t) => e === n[t]), f = (o) => o.split(/[#?]/)[0]?.split(\".\").pop()?.trim() || \"\";\nfunction s(o) {\n const n = [];\n if (o.length === 0)\n return \"\";\n if (typeof o[0] != \"string\")\n throw new TypeError(`Url must be a string. Received ${o[0]}`);\n o[0].match(/^[^/:]+:\\/*$/) && o.length > 1 && (o[0] = o.shift() + o[0]), o[0].match(/^file:\\/\\/\\//) ? o[0] = o[0].replace(/^([^/:]+):\\/*/, \"$1:///\") : o[0] = o[0].replace(/^([^/:]+):\\/*/, \"$1://\");\n for (let l = 0; l < o.length; l++) {\n let r = o[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 < o.length - 1 ? r = r.replace(/[/]+$/, \"\") : r = r.replace(/[/]+$/, \"/\"), n.push(r));\n }\n let e = n.join(\"/\");\n e = e.replace(/\\/(\\?|&|#[^!])/g, \"$1\");\n const t = e.split(\"?\");\n return e = t.shift() + (t.length > 0 ? \"?\" : \"\") + t.join(\"&\"), e;\n}\nfunction E(...o) {\n const n = Array.from(Array.isArray(o[0]) ? o[0] : o);\n return s(n);\n}\nfunction y(o) {\n const n = o.split(\"/\");\n return n.pop(), n.join(\"/\");\n}\nconst p = (o) => {\n switch (f(o)) {\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}, w = ({\n mimeType: o,\n uri: n\n}) => (o ?? p(n ?? \"\"))?.startsWith(\"application/xhtml+xml\"), R = (o) => o.length ? o.indexOf(\";\") ? o.substring(0, o.indexOf(\";\")) : o : void 0, g = Object.prototype.hasOwnProperty, d = (o, n) => o === n ? o !== 0 || n !== 0 || 1 / o === 1 / n : !1, m = (o, n, e) => {\n if (o === n)\n return !0;\n if (typeof o != \"object\" || o === null || typeof n != \"object\" || n === null)\n return !1;\n const t = Object.keys(o), l = Object.keys(n);\n if (t.length !== l.length)\n return !1;\n const r = e && typeof e.customEqual == \"function\" ? e.customEqual : d;\n for (let c = 0; c < t.length; c++) {\n const i = t[c] || \"\";\n if (!g.call(n, i) || !r(o[i], n[i]))\n return !1;\n }\n return !0;\n}, v = (o, n) => o.reduce(\n (e, t) => {\n const l = n(t);\n return e[l] || (e[l] = []), e[l].push(t), e;\n },\n {}\n);\nfunction O(o, n) {\n const e = { ...o };\n for (const t in n)\n if (Object.hasOwn(n, t)) {\n const l = n[t];\n (l !== void 0 || !(t in o)) && (e[t] = l);\n }\n return e;\n}\nconst h = () => {\n if (!(typeof window > \"u\"))\n return window;\n};\nfunction $() {\n const o = h()?.__PROSE_READER_DEBUG;\n return o === !0 || o === \"true\";\n}\nconst u = (o, n = $(), e) => ({\n namespace: (t, l) => u(`${o} [${t}]`, l, e),\n debug: n ? o ? Function.prototype.bind.call(\n console.debug,\n console,\n o,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.debug,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n },\n info: n ? o ? Function.prototype.bind.call(\n console.info,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.info,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n },\n log: n ? o ? Function.prototype.bind.call(\n console.log,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(console.log, console) : () => {\n },\n warn: n ? o ? Function.prototype.bind.call(\n console.warn,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.warn,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n },\n error: n ? o ? Function.prototype.bind.call(\n console.error,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.error,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n }\n}), _ = {\n ...u(),\n namespace: (o, n, e) => u(`[${o}]`, n, e)\n}, x = \"prose-reader-resource-error\";\nexport {\n x as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,\n _ as Report,\n a as arrayEqual,\n p as detectMimeTypeFromName,\n y as getParentPath,\n f as getUrlExtension,\n v as groupBy,\n d as is,\n m as isShallowEqual,\n w as isXmlBasedMimeType,\n R as parseContentType,\n O as shallowMergeIfDefined,\n E 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 { isDefined, type Reader } from \"@prose-reader/core\"\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n merge,\n of,\n share,\n shareReplay,\n switchMap,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport { ReaderHighlights } from \"./annotations/ReaderHighlights\"\nimport type { RuntimeAnnotation } from \"./annotations/types\"\nimport { Commands } from \"./Commands\"\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 annotationsSubject = new BehaviorSubject<RuntimeAnnotation[]>([])\n const selectedHighlightSubject = new BehaviorSubject<string | undefined>(\n undefined,\n )\n\n const annotations$ = annotationsSubject.asObservable().pipe(\n distinctUntilChanged(),\n tap((annotations) => {\n report.debug(\"annotations\", annotations)\n }),\n shareReplay({\n refCount: true,\n bufferSize: 1,\n }),\n )\n\n const readerHighlights = new ReaderHighlights(\n reader,\n annotationsSubject,\n selectedHighlightSubject,\n )\n\n const resolveItemInformation = (params: {\n absolutePageIndex?: number\n itemIndex?: number\n }) => {\n if (params.itemIndex !== undefined)\n return { itemIndex: params.itemIndex, pageIndex: undefined }\n\n if (params.absolutePageIndex !== undefined) {\n return reader.spine.pages.fromAbsolutePageIndex(\n params.absolutePageIndex,\n )\n }\n\n return undefined\n }\n\n const annotated$ = commands.annotate$.pipe(\n map(({ data: { selection, ...rest } }) => {\n const { itemIndex, pageIndex = 0 } = resolveItemInformation(rest) ?? {}\n const spineItem = reader.spineItemsManager.get(itemIndex)\n\n if (!spineItem) return undefined\n\n const range = selection\n ? reader.selection.createOrderedRangeFromSelection({\n selection,\n spineItem,\n })\n : undefined\n\n const cfi = range\n ? reader.cfi.generateCfiFromRange(range, spineItem.item)\n : reader.cfi.generateCfiForSpineItemPage({ pageIndex, spineItem })\n\n const highlight = {\n cfi,\n itemIndex: spineItem.index,\n id: window.crypto.randomUUID(),\n ...rest,\n } satisfies RuntimeAnnotation\n\n annotationsSubject.next([...annotationsSubject.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 = 0 } = reader.cfi.parseCfi(annotation.cfi ?? \"\")\n\n const highlight = {\n ...annotation,\n itemIndex,\n } satisfies RuntimeAnnotation\n\n return highlight\n })\n\n annotationsSubject.next([\n ...annotationsSubject.getValue(),\n ...addedHighlights,\n ])\n }),\n )\n\n const delete$ = commands.delete$.pipe(\n tap(({ id }) => {\n annotationsSubject.next(\n annotationsSubject\n .getValue()\n .filter((highlight) => highlight.id !== id),\n )\n }),\n )\n\n const update$ = commands.update$.pipe(\n tap(({ id, data }) => {\n annotationsSubject.next(\n annotationsSubject.getValue().map((highlight) => {\n return highlight.id === id ? { ...highlight, ...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 annotationsSubject.next([])\n }),\n )\n\n const renderAnnotations$ = merge(annotations$, reader.layout$).pipe(\n debounceTime(50),\n switchMap(() => readerHighlights.layout()),\n )\n\n const candidates$ = reader.layoutInfo$.pipe(\n switchMap(({ pages }) =>\n combineLatest(\n pages.map((page) => {\n const item = reader.spineItemsManager.get(page.itemIndex)\n\n if (!item) return of(false)\n\n // pre-paginated can always be annotated on their unique page\n if (item.renditionLayout === \"pre-paginated\") return of(true)\n\n if (page.firstVisibleNode) return of(true)\n\n return of(false)\n }),\n ),\n ),\n )\n\n merge(\n annotated$,\n add$,\n delete$,\n update$,\n select$,\n reset$,\n renderAnnotations$,\n annotations$,\n )\n .pipe(takeUntil(reader.$.destroy$))\n .subscribe()\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_ANNOTATIONS: true,\n destroy: () => {\n annotationsSubject.complete()\n commands.destroy()\n readerHighlights.destroy()\n reader.destroy()\n },\n annotations: {\n annotations$: annotations$,\n highlightTap$: readerHighlights.tap$,\n candidates$,\n isTargetWithinHighlight: readerHighlights.isTargetWithinHighlight,\n annotate: commands.annotate,\n annotateAbsolutePage: commands.annotateAbsolutePage,\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","fromEvent","map","share","shareReplay","skip","tap","isSelected","takeUntil","merge","first","switchMap","distinctUntilChanged","of","forkJoin","defaultIfEmpty","highlights","BehaviorSubject","Subject","filter","Report","isDefined","debounceTime","combineLatest"],"mappings":";;;;;;EAAO,MAAM,qBAAA,GAAwB,CACnC,KAAA,EACA,SAAA,EACA,KAAA,KACG;EAEH,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,gBAAgB,CAAA;EAC/C,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAuB;EAE9C,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;EACtB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;EACjC,IAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,EAAG;EAC1B,MAAA,UAAA,CAAW,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA;EAAA,IAC1B;EACA,IAAA,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA;EAAA,EAClC,CAAC,CAAA;EAGD,EAAA,OAAO,KAAA,CAAM,KAAK,UAAA,CAAW,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,SAAA,KAAc;EAExD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAG,SAAA,CAAU,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;EACrD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,SAAA,CAAU,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAC,CAAA;EACvD,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,CAAC,CAAA,EAAG,GAAA;EAC1B,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,CAAC,CAAA,EAAG,MAAA;EAE7B,IAAA,MAAM,gBAAA,GAAmB,SAAA,CAAU,aAAA,CAAc,aAAA,CAAc,KAAK,CAAA;EACpE,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,aAAA,CAAc,aAAA,CAAc,KAAK,CAAA;EAC3D,IAAA,gBAAA,CAAiB,MAAM,OAAA,GAAU;AAAA;AAAA,eAAA,EAEpB,QAAQ,IAAI,CAAA;AAAA,gBAAA,EACX,MAAM,CAAA;AAAA,aAAA,EACT,GAAG,CAAA;AAAA,cAAA,EACF,IAAI,CAAA;AAAA;AAAA;AAAA,IAAA,CAAA;EAIhB,IAAA,OAAA,CAAQ,MAAM,OAAA,GAAU;AAAA;AAAA;AAAA;AAAA,0BAAA,EAIA,KAAK;AAAA,IAAA,CAAA;EAG7B,IAAA,gBAAA,CAAiB,YAAY,OAAO,CAAA;EAEpC,IAAA,OAAO,gBAAA;EAAA,EACT,CAAC,CAAA;EACH,CAAA;EAEO,MAAM,iBAAA,GAAoB,CAAC,MAAA,EAAqB,MAAA,KAAwB;EAC7E,EAAA,MAAA,CAAO,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,OAAA;EACtC,CAAA;EAEO,MAAM,qBAAA,GAAwB,CACnC,SAAA,EACA,KAAA,KACG;EACH,EAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,aAAA,CAAc,aAAA,CAAc,KAAK,CAAA;EAEnE,EAAA,qBAAA,CAAsB,OAAO,eAAe,CAAA;EAE5C,EAAA,SAAA,CAAU,YAAY,eAAe,CAAA;EAErC,EAAA,OAAO,eAAA;EACT,CAAA;EAEO,MAAM,qBAAA,GAAwB,CACnC,KAAA,EACA,eAAA,KACG;EACH,EAAA,iBAAA,CAAkB,OAAO,eAAe,CAAA;EAExC,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,QAAA,KAAa,EAAA,EAAI;EAC/B,IAAA,eAAA,CAAgB,MAAM,QAAA,GAAW,UAAA;EACjC,IAAA,eAAA,CAAgB,MAAM,GAAA,GAAM,GAAA;EAAA,EAC9B;EAGA,EAAA,eAAA,CAAgB,MAAM,OAAA,GAAU,GAAA;EAChC,EAAA,eAAA,CAAgB,MAAM,aAAA,GAAgB,MAAA;EACxC,CAAA;;EC5DO,MAAM,2BAA2BA,qBAAA,CAAiB;EAAA,EAQvD,WAAA,CACU,SAAA,EACA,gBAAA,EACA,MAAA,EACQ,WACR,UAAA,EACR;EACA,IAAA,KAAA,EAAM;EANE,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;EACA,IAAA,IAAA,CAAA,gBAAA,GAAA,gBAAA;EACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;EACQ,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;EACR,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;EAIR,IAAA,KAAK,IAAA,CAAK,SAAA;EACV,IAAA,KAAK,IAAA,CAAK,MAAA;EAEV,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,gBAAA,CAAiB,aAAA,CAAc,cAAc,KAAK,CAAA;EACxE,IAAA,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,kBAAA,GAAqB,IAAA,CAAK,SAAA,CAAU,EAAA;EAC3D,IAAA,IAAA,CAAK,gBAAA,CAAiB,WAAA,CAAY,IAAA,CAAK,SAAS,CAAA;EAEhD,IAAA,IAAA,CAAK,IAAA,GAAOC,cAAA,CAAU,IAAA,CAAK,SAAA,EAAW,OAAO,CAAA,CAAE,IAAA;EAAA,MAC7CC,QAAA,CAAI,CAAC,KAAA,MAAW,EAAE,OAAO,SAAA,EAAW,IAAA,CAAK,WAAU,CAAE,CAAA;EAAA,MACrDC,UAAA;EAAM,KACR;EAEA,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,UAAU,CAAA,CAAE,IAAA;EAAA,MACnDD,QAAA,CAAI,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,UAAA,CAAW,EAAE,GAAA,EAAK,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,CAAC,CAAA;EAAA,MACjEE,iBAAY,EAAE,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,GAAG;EAAA,KAC/C;EAEA,IAAA,IAAA,CAAK,UAAA,CACF,IAAA;EAAA,MACCC,UAAK,CAAC,CAAA;EAAA,MACNC,QAAA,CAAI,CAACC,WAAAA,KAAe;EAClB,QAAA,KAAA,CAAM,KAAK,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,KAAA,KAAU;EACrD,UAAA,IAAI,iBAAiB,WAAA,EAAa;EAChC,YAAA,KAAA,CAAM,KAAA,CAAM,MAAA,GAASA,WAAAA,GACjB,gBAAA,GACA,wBAAA;EAAA,UACN;EAAA,QACF,CAAC,CAAA;EAAA,MACH,CAAC,CAAA;EAAA,MACDC,cAAA,CAAU,KAAK,QAAQ;EAAA,MAExB,SAAA,EAAU;EAEb,IAAAC,UAAA,CAAM,IAAA,CAAK,YAAY,CAAA,CAAE,IAAA,CAAKD,eAAU,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,SAAA,EAAU;EAAA,EACpE;EAAA,EAlDQ,SAAA;EAAA,EACQ,IAAA;EAAA,EAIR,YAAA;EAAA,EA+CD,MAAA,GAAS;EACd,IAAA,OAAO,KAAK,YAAA,CAAa,IAAA;EAAA,MACvBE,UAAA,EAAM;EAAA,MACNR,QAAA,CAAI,CAAC,WAAA,KAAgB;EACnB,QAAA,IAAI,CAAC,WAAA,IAAe,CAAC,WAAA,CAAY,YAAY,OAAO,MAAA;EAEpD,QAAA,MAAM,QAAQ,WAAA,CAAY,KAAA;EAE1B,QAAA,IAAA,CAAK,UAAU,SAAA,GAAY,EAAA;EAO3B,QAAA,IAAI,CAAC,KAAA,EAAO;EACV,UAAA;EAAA,QACF;EAEA,QAAA,MAAM,YAAA,GAAe,qBAAA;EAAA,UACnB,KAAA;EAAA,UACA,IAAA,CAAK,SAAA;EAAA,UACL,IAAA,CAAK,UAAU,cAAA,IAAkB;EAAA,SACnC;EAEA,QAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,GAAA,KAAQ;EAC5B,UAAA,GAAA,CAAI,MAAM,aAAA,GAAgB,SAAA;EAC1B,UAAA,GAAA,CAAI,MAAM,MAAA,GAAS,SAAA;EACnB,UAAA,GAAA,CAAI,OAAA,CAAQ,aAAA,GAAgB,IAAA,CAAK,SAAA,CAAU,EAAA;EAE3C,UAAA,IAAA,CAAK,SAAA,CAAU,YAAY,GAAG,CAAA;EAAA,QAChC,CAAC,CAAA;EAED,QAAA,MAAM,YAAA,GAAe,aAAa,CAAC,CAAA;EAEnC,QAAA,IAAI,YAAA,IAAgB,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO;EACxC,UAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;EAC9C,UAAA,QAAA,CAAS,WAAA,GAAc,IAAA;EACvB,UAAA,QAAA,CAAS,MAAM,QAAA,GAAW,UAAA;EAC1B,UAAA,QAAA,CAAS,MAAM,GAAA,GAAM,GAAA;EACrB,UAAA,QAAA,CAAS,MAAM,IAAA,GAAO,GAAA;EACtB,UAAA,QAAA,CAAS,MAAM,SAAA,GAAY,sBAAA;EAC3B,UAAA,QAAA,CAAS,MAAM,QAAA,GAAW,MAAA;EAC1B,UAAA,QAAA,CAAS,MAAM,OAAA,GAAU,KAAA;EACzB,UAAA,YAAA,CAAa,YAAY,QAAQ,CAAA;EAAA,QACnC;EAEA,QAAA,OAAO,IAAA;EAAA,MACT,CAAC;EAAA,KACH;EAAA,EACF;EAAA,EAEA,eAAe,MAAA,EAAc;EAC3B,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA;EAAA,EACvC;EAAA,EAEO,OAAA,GAAU;EACf,IAAA,KAAA,CAAM,OAAA,EAAQ;EAEd,IAAA,IAAA,CAAK,UAAU,MAAA,EAAO;EAAA,EACxB;EACF;;ECjHO,MAAM,4BAA4BF,qBAAA,CAAiB;EAAA,EAMxD,WAAA,CACU,YAAA,EACA,SAAA,EACA,MAAA,EACA,iBAAA,EACR;EACA,IAAA,KAAA,EAAM;EALE,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;EACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;EACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;EACA,IAAA,IAAA,CAAA,iBAAA,GAAA,iBAAA;EAIR,IAAA,MAAM,oBACJ,SAAA,CAAU,QAAA,CAAS,iBAAA,IAAqB,QAAA,CAAS,cAAc,KAAK,CAAA;EAEtE,IAAA,IAAA,CAAK,KAAA,GAAQ,qBAAA;EAAA,MACX,KAAK,SAAA,CAAU,gBAAA;EAAA,MACf;EAAA,KACF;EAEA,IAAA,MAAM,eAAA,GAAkB,KAAK,YAAA,CAAa,IAAA;EAAA,MACxCW,cAAA,CAAU,CAAC,WAAA,KAAgB;EACzB,QAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,KAAc;EACrC,UAAA,SAAA,CAAU,OAAA,EAAQ;EAAA,QACpB,CAAC,CAAA;EACD,QAAA,IAAA,CAAK,aAAa,EAAC;EAEnB,QAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,UAAA,KAAe;EAClC,UAAA,IAAI,UAAA,CAAW,SAAA,KAAc,IAAA,CAAK,SAAA,CAAU,KAAK,KAAA,EAAO;EAExD,UAAA,MAAM,WAAA,GAAc,KAAK,iBAAA,CAAkB,IAAA;EAAA,YACzCT,QAAA,CAAI,CAAC,EAAA,KAAO,EAAA,KAAO,WAAW,EAAE,CAAA;EAAA,YAChCU,yBAAA;EAAqB,WACvB;EAEA,UAAA,MAAM,qBAAqB,IAAI,kBAAA;EAAA,YAC7B,IAAA,CAAK,SAAA;EAAA,YACL,IAAA,CAAK,KAAA;EAAA,YACL,IAAA,CAAK,MAAA;EAAA,YACL,UAAA;EAAA,YACA;EAAA,WACF;EAEA,UAAA,IAAA,CAAK,UAAA,CAAW,KAAK,kBAAkB,CAAA;EAAA,QACzC,CAAC,CAAA;EAED,QAAA,OAAOC,OAAA,CAAG,KAAK,UAAU,CAAA;EAAA,MAC3B,CAAC,CAAA;EAAA,MACDT,iBAAY,CAAC,CAAA;EAAA,MACbI,cAAA,CAAU,KAAK,QAAQ;EAAA,KACzB;EAEA,IAAA,IAAA,CAAK,OAAO,eAAA,CAAgB,IAAA;EAAA,MAC1BG,cAAA;EAAA,QAAU,CAAC,UAAA,KACTF,UAAA,CAAM,GAAG,UAAA,CAAW,IAAI,CAAC,SAAA,KAAc,SAAA,CAAU,IAAI,CAAC;EAAA;EACxD,KACF;EAEA,IAAA,YAAA,CAAa,SAAA,EAAU;EAAA,EACzB;EAAA,EA5DQ,KAAA;EAAA,EACA,aAAmC,EAAC;EAAA,EAE5B,IAAA;EAAA,EA2DhB,MAAA,GAAS;EACP,IAAA,MAAM,oBACJ,IAAA,CAAK,SAAA,CAAU,SAAS,iBAAA,IAAqB,QAAA,CAAS,cAAc,KAAK,CAAA;EAE3E,IAAA,qBAAA,CAAsB,iBAAA,EAAmB,KAAK,KAAK,CAAA;EAEnD,IAAA,OAAOK,aAAA;EAAA,MACL,KAAK,UAAA,CAAW,GAAA,CAAI,CAAC,SAAA,KAAc,SAAA,CAAU,QAAQ;EAAA,KACvD,CAAE,IAAA,CAAKC,mBAAA,CAAe,IAAI,CAAC,CAAA;EAAA,EAC7B;EAAA,EAEA,uBAAuB,MAAA,EAAqB;EAC1C,IAAA,OAAO,KAAK,UAAA,CAAW,MAAA;EAAA,MACrB,CAAC,SAAA,KAAc,MAAA,YAAkB,IAAA,IAAQ,SAAA,CAAU,eAAe,MAAM;EAAA,KAC1E;EAAA,EACF;EAAA,EAEA,OAAA,GAAU;EACR,IAAA,KAAA,CAAM,OAAA,EAAQ;EAEd,IAAA,IAAA,CAAK,MAAM,MAAA,EAAO;EAAA,EACpB;EACF;;EC9FO,MAAM,yBAAyBf,qBAAA,CAAiB;EAAA,EAKrD,WAAA,CACU,MAAA,EACA,UAAA,EACA,iBAAA,EACR;EACA,IAAA,KAAA,EAAM;EAJE,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;EACA,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;EACA,IAAA,IAAA,CAAA,iBAAA,GAAA,iBAAA;EAIR,IAAA,IAAA,CAAK,OAAO,WAAA,CAAY,QAAA;EAAA,MACtB,qBAAA;EAAA,MACA,CAAC,EAAE,MAAA,EAAQ,OAAA,EAAQ,KAAM;EACvB,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,iBAAA,CAAkB,GAAA,CAAI,MAAM,CAAA;EAErD,QAAA,IAAI,CAAC,SAAA,EAAW;EAEhB,QAAA,MAAM,oBAAA,GAAuB,KAAK,UAAA,CAAW,IAAA;EAAA,UAC3CE,QAAA;EAAA,YAAI,CAACc,gBACHA,WAAAA,CAAW,MAAA;EAAA,cACT,CAAC,SAAA,KAAc,SAAA,CAAU,SAAA,KAAc,UAAU,IAAA,CAAK;EAAA;EACxD;EACF,SACF;EAEA,QAAA,MAAM,sBAAsB,IAAI,mBAAA;EAAA,UAC9B,oBAAA;EAAA,UACA,SAAA;EAAA,UACA,MAAA;EAAA,UACA,IAAA,CAAK;EAAA,SACP;EAEA,QAAA,IAAA,CAAK,oBAAoB,IAAA,CAAK;EAAA,UAC5B,GAAG,IAAA,CAAK,mBAAA,CAAoB,QAAA,EAAS;EAAA,UACrC;EAAA,SACD,CAAA;EAED,QAAA,OAAA,CAAQ,MAAM;EACZ,UAAA,IAAA,CAAK,mBAAA,CAAoB,IAAA;EAAA,YACvB,IAAA,CAAK,oBACF,QAAA,EAAS,CACT,OAAO,CAAC,KAAA,KAAU,UAAU,mBAAmB;EAAA,WACpD;EAEA,UAAA,mBAAA,CAAoB,OAAA,EAAQ;EAAA,QAC9B,CAAC,CAAA;EAAA,MACH;EAAA,KACF;EAEA,IAAA,IAAA,CAAK,IAAA,GAAO,KAAK,mBAAA,CAAoB,IAAA;EAAA,MACnCL,cAAA,CAAU,CAAC,MAAA,KAAWF,UAAA,CAAM,GAAG,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAC,CAAC;EAAA,KACnE;EAAA,EACF;EAAA,EArDQ,mBAAA,GAAsB,IAAIQ,oBAAA,CAAuC,EAAE,CAAA;EAAA,EAEpE,IAAA;EAAA,EAqDP,sBAAA,GAAyB,CAAC,MAAA,KAAwB;EAChD,IAAA,OAAO,KAAK,mBAAA,CACT,QAAA,EAAS,CACT,OAAA,CAAQ,CAAC,KAAA,KAAU,KAAA,CAAM,sBAAA,CAAuB,MAAM,CAAC,CAAA,CACvD,GAAA,CAAI,CAAC,UAAA,KAAe,WAAW,SAAS,CAAA;EAAA,EAC7C,CAAA;EAAA,EAEA,uBAAA,GAA0B,CAAC,MAAA,KAAwB;EACjD,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,sBAAA,CAAuB,MAAM,CAAA,CAAE,MAAA;EAAA,EAC/C,CAAA;EAAA,EAEO,MAAA,GAAS;EACd,IAAA,OAAOH,aAAA;EAAA,MACL,IAAA,CAAK,oBAAoB,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,QAAQ;EAAA,KAC5D,CAAE,IAAA,CAAKC,mBAAA,CAAe,IAAI,CAAC,CAAA;EAAA,EAC7B;EACF;;ECnDO,MAAM,iBAAiBf,qBAAA,CAAiB;EAAA,EACrC,cAAA,GAAiB,IAAIkB,YAAA,EAAiB;EAAA,EAE9B,SAAA,GAAY,KAAK,cAAA,CAAe,IAAA;EAAA,IAC9CC,WAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,UAAU;EAAA,GACjD;EAAA,EACgB,IAAA,GAAO,KAAK,cAAA,CAAe,IAAA;EAAA,IACzCA,WAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,KAAK;EAAA,GAC5C;EAAA,EACgB,OAAA,GAAU,KAAK,cAAA,CAAe,IAAA;EAAA,IAC5CA,WAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,QAAQ;EAAA,GAC/C;EAAA,EACgB,OAAA,GAAU,KAAK,cAAA,CAAe,IAAA;EAAA,IAC5CA,WAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,QAAQ;EAAA,GAC/C;EAAA,EACgB,OAAA,GAAU,KAAK,cAAA,CAAe,IAAA;EAAA,IAC5CA,WAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,QAAQ;EAAA,GAC/C;EAAA,EACgB,MAAA,GAAS,KAAK,cAAA,CAAe,IAAA;EAAA,IAC3CA,WAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,OAAO;EAAA,GAC9C;EAAA,EAEA,QAAA,GAAW,CAAC,MAAA,KAA2B;EACrC,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,EAAE,MAAM,UAAA,EAAY,IAAA,EAAM,QAAQ,CAAA;EAAA,EAC7D,CAAA;EAAA,EAEA,oBAAA,GAAuB,CAAC,MAAA,KAAuC;EAC7D,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,EAAE,MAAM,UAAA,EAAY,IAAA,EAAM,QAAQ,CAAA;EAAA,EAC7D,CAAA;EAAA,EAEA,GAAA,GAAM,CAAC,IAAA,KAAoC;EACzC,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;EAAA,EAChD,CAAA;EAAA,EAEA,MAAA,GAAS,CAAC,EAAA,KAAe;EACvB,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,IAAI,CAAA;EAAA,EACjD,CAAA;EAAA,EAEA,MAAA,GAAS,CACP,EAAA,EACA,IAAA,KACG;EACH,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,EAAE,MAAM,QAAA,EAAU,EAAA,EAAI,MAAM,CAAA;EAAA,EACvD,CAAA;EAAA,EAEA,MAAA,GAAS,CAAC,EAAA,KAA2B;EACnC,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,IAAI,CAAA;EAAA,EACjD,CAAA;EAAA,EAEA,QAAQ,MAAM;EACZ,IAAA,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,EAAE,IAAA,EAAM,SAAS,CAAA;EAAA,EAC5C,CAAA;EAAA,EAEA,OAAA,GAAU;EACR,IAAA,KAAA,CAAM,OAAA,EAAQ;EACd,IAAA,IAAA,CAAK,eAAe,QAAA,EAAS;EAAA,EAC/B;EACF;;ECdA,MAAM,CAAC,GAAG,MAAM;EAChB,EAAE,IAAI,EAAE,OAAO,MAAM,GAAG,GAAG,CAAC;EAC5B,IAAI,OAAO,MAAM;EACjB,CAAC;EACD,SAAS,CAAC,GAAG;EACb,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,oBAAoB;EACrC,EAAE,OAAO,CAAC,KAAK,IAAE,IAAI,CAAC,KAAK,MAAM;EACjC;AACK,QAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM;EAC9B,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAC7C,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;EAC7C,IAAI,OAAO,CAAC,KAAK;EACjB,IAAI,OAAO;EACX,IAAI,CAAC;EACL,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;EACZ,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;EACrC,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;EAClC,IAAI,OAAO,CAAC,KAAK;EACjB,IAAI,OAAO;EACX,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;EACZ,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;EACrC,GAAG,GAAG,MAAM;EACZ,EAAE,CAAC;EACH,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;EAC5C,IAAI,OAAO,CAAC,IAAI;EAChB,IAAI,OAAO;EACX,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;EACZ,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;EACrC,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;EAClC,IAAI,OAAO,CAAC,IAAI;EAChB,IAAI,OAAO;EACX,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;EACZ,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;EACrC,GAAG,GAAG,MAAM;EACZ,EAAE,CAAC;EACH,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;EAC3C,IAAI,OAAO,CAAC,GAAG;EACf,IAAI,OAAO;EACX,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;EACZ,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;EACrC,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,MAAM;EACjE,EAAE,CAAC;EACH,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;EAC5C,IAAI,OAAO,CAAC,IAAI;EAChB,IAAI,OAAO;EACX,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;EACZ,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;EACrC,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;EAClC,IAAI,OAAO,CAAC,IAAI;EAChB,IAAI,OAAO;EACX,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;EACZ,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;EACrC,GAAG,GAAG,MAAM;EACZ,EAAE,CAAC;EACH,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;EAC7C,IAAI,OAAO,CAAC,KAAK;EACjB,IAAI,OAAO;EACX,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;EACZ,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;EACrC,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;EAClC,IAAI,OAAO,CAAC,KAAK;EACjB,IAAI,OAAO;EACX,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;EACZ,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;EACrC,GAAG,GAAG,MAAM;EACZ,EAAE;EACF,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;EACR,EAAE,GAAG,CAAC,EAAE;EACR,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;EAC1C,CAAC;;;;EC9ID,MAAM,gBAAA,GAAmB,IAAA;EAElB,MAAM,MAAA,GAASC,CAAA,CAAO,SAAA,CAAU,IAAA,EAAM,gBAAgB,CAAA;;ACmBtD,QAAM,mBAAA,GACX,CACE,IAAA,KAEF,CAAC,OAAA,KAAoE;EACnE,EAAA,MAAM,MAAA,GAAS,KAAK,OAAO,CAAA;EAC3B,EAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;EAC9B,EAAA,MAAM,kBAAA,GAAqB,IAAIH,oBAAA,CAAqC,EAAE,CAAA;EACtE,EAAA,MAAM,2BAA2B,IAAIA,oBAAA;EAAA,IACnC;EAAA,GACF;EAEA,EAAA,MAAM,YAAA,GAAe,kBAAA,CAAmB,YAAA,EAAa,CAAE,IAAA;EAAA,IACrDL,yBAAA,EAAqB;EAAA,IACrBN,QAAA,CAAI,CAAC,WAAA,KAAgB;EACnB,MAAA,MAAA,CAAO,KAAA,CAAM,eAAe,WAAW,CAAA;EAAA,IACzC,CAAC,CAAA;EAAA,IACDF,gBAAA,CAAY;EAAA,MACV,QAAA,EAAU,IAAA;EAAA,MACV,UAAA,EAAY;EAAA,KACb;EAAA,GACH;EAEA,EAAA,MAAM,mBAAmB,IAAI,gBAAA;EAAA,IAC3B,MAAA;EAAA,IACA,kBAAA;EAAA,IACA;EAAA,GACF;EAEA,EAAA,MAAM,sBAAA,GAAyB,CAAC,MAAA,KAG1B;EACJ,IAAA,IAAI,OAAO,SAAA,KAAc,MAAA;EACvB,MAAA,OAAO,EAAE,SAAA,EAAW,MAAA,CAAO,SAAA,EAAW,WAAW,MAAA,EAAU;EAE7D,IAAA,IAAI,MAAA,CAAO,sBAAsB,MAAA,EAAW;EAC1C,MAAA,OAAO,MAAA,CAAO,MAAM,KAAA,CAAM,qBAAA;EAAA,QACxB,MAAA,CAAO;EAAA,OACT;EAAA,IACF;EAEA,IAAA,OAAO,MAAA;EAAA,EACT,CAAA;EAEA,EAAA,MAAM,UAAA,GAAa,SAAS,SAAA,CAAU,IAAA;EAAA,IACpCF,QAAA,CAAI,CAAC,EAAE,IAAA,EAAM,EAAE,SAAA,EAAW,GAAG,IAAA,EAAK,EAAE,KAAM;EACxC,MAAA,MAAM,EAAE,WAAW,SAAA,GAAY,CAAA,KAAM,sBAAA,CAAuB,IAAI,KAAK,EAAC;EACtE,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,iBAAA,CAAkB,GAAA,CAAI,SAAS,CAAA;EAExD,MAAA,IAAI,CAAC,WAAW,OAAO,MAAA;EAEvB,MAAA,MAAM,KAAA,GAAQ,SAAA,GACV,MAAA,CAAO,SAAA,CAAU,+BAAA,CAAgC;EAAA,QAC/C,SAAA;EAAA,QACA;EAAA,OACD,CAAA,GACD,MAAA;EAEJ,MAAA,MAAM,GAAA,GAAM,KAAA,GACR,MAAA,CAAO,GAAA,CAAI,qBAAqB,KAAA,EAAO,SAAA,CAAU,IAAI,CAAA,GACrD,OAAO,GAAA,CAAI,2BAAA,CAA4B,EAAE,SAAA,EAAW,WAAW,CAAA;EAEnE,MAAA,MAAM,SAAA,GAAY;EAAA,QAChB,GAAA;EAAA,QACA,WAAW,SAAA,CAAU,KAAA;EAAA,QACrB,EAAA,EAAI,MAAA,CAAO,MAAA,CAAO,UAAA,EAAW;EAAA,QAC7B,GAAG;EAAA,OACL;EAEA,MAAA,kBAAA,CAAmB,KAAK,CAAC,GAAG,mBAAmB,QAAA,EAAS,EAAG,SAAS,CAAC,CAAA;EAErE,MAAA,OAAO,CAAC,UAAU,EAAE,CAAA;EAAA,IACtB,CAAC,CAAA;EAAA,IACDiB,YAAOE,cAAS,CAAA;EAAA,IAChBlB,UAAA;EAAM,GACR;EAEA,EAAA,MAAM,IAAA,GAAO,SAAS,IAAA,CAAK,IAAA;EAAA,IACzBD,QAAA,CAAI,CAAC,EAAE,IAAA,EAAK,KAAM;EAChB,MAAA,MAAM,cAAc,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA,GAAO,CAAC,IAAI,CAAA;EAEtD,MAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,GAAA,CAAI,CAAC,UAAA,KAAe;EACtD,QAAA,MAAM,EAAE,YAAY,CAAA,EAAE,GAAI,OAAO,GAAA,CAAI,QAAA,CAAS,UAAA,CAAW,GAAA,IAAO,EAAE,CAAA;EAElE,QAAA,MAAM,SAAA,GAAY;EAAA,UAChB,GAAG,UAAA;EAAA,UACH;EAAA,SACF;EAEA,QAAA,OAAO,SAAA;EAAA,MACT,CAAC,CAAA;EAED,MAAA,kBAAA,CAAmB,IAAA,CAAK;EAAA,QACtB,GAAG,mBAAmB,QAAA,EAAS;EAAA,QAC/B,GAAG;EAAA,OACJ,CAAA;EAAA,IACH,CAAC;EAAA,GACH;EAEA,EAAA,MAAM,OAAA,GAAU,SAAS,OAAA,CAAQ,IAAA;EAAA,IAC/BI,QAAA,CAAI,CAAC,EAAE,EAAA,EAAG,KAAM;EACd,MAAA,kBAAA,CAAmB,IAAA;EAAA,QACjB,kBAAA,CACG,UAAS,CACT,MAAA,CAAO,CAAC,SAAA,KAAc,SAAA,CAAU,OAAO,EAAE;EAAA,OAC9C;EAAA,IACF,CAAC;EAAA,GACH;EAEA,EAAA,MAAM,OAAA,GAAU,SAAS,OAAA,CAAQ,IAAA;EAAA,IAC/BA,QAAA,CAAI,CAAC,EAAE,EAAA,EAAI,MAAK,KAAM;EACpB,MAAA,kBAAA,CAAmB,IAAA;EAAA,QACjB,kBAAA,CAAmB,QAAA,EAAS,CAAE,GAAA,CAAI,CAAC,SAAA,KAAc;EAC/C,UAAA,OAAO,SAAA,CAAU,OAAO,EAAA,GAAK,EAAE,GAAG,SAAA,EAAW,GAAG,MAAK,GAAI,SAAA;EAAA,QAC3D,CAAC;EAAA,OACH;EAAA,IACF,CAAC;EAAA,GACH;EAEA,EAAA,MAAM,OAAA,GAAU,SAAS,OAAA,CAAQ,IAAA;EAAA,IAC/BA,QAAA,CAAI,CAAC,EAAE,EAAA,EAAG,KAAM;EACd,MAAA,wBAAA,CAAyB,KAAK,EAAE,CAAA;EAAA,IAClC,CAAC;EAAA,GACH;EAEA,EAAA,MAAM,MAAA,GAAS,SAAS,MAAA,CAAO,IAAA;EAAA,IAC7BA,SAAI,MAAM;EACR,MAAA,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;EAAA,IAC5B,CAAC;EAAA,GACH;EAEA,EAAA,MAAM,kBAAA,GAAqBG,UAAA,CAAM,YAAA,EAAc,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA;EAAA,IAC7Da,kBAAa,EAAE,CAAA;EAAA,IACfX,cAAA,CAAU,MAAM,gBAAA,CAAiB,MAAA,EAAQ;EAAA,GAC3C;EAEA,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,CAAY,IAAA;EAAA,IACrCA,cAAA;EAAA,MAAU,CAAC,EAAE,KAAA,EAAM,KACjBY,kBAAA;EAAA,QACE,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;EAClB,UAAA,MAAM,IAAA,GAAO,MAAA,CAAO,iBAAA,CAAkB,GAAA,CAAI,KAAK,SAAS,CAAA;EAExD,UAAA,IAAI,CAAC,IAAA,EAAM,OAAOV,OAAA,CAAG,KAAK,CAAA;EAG1B,UAAA,IAAI,IAAA,CAAK,eAAA,KAAoB,eAAA,EAAiB,OAAOA,QAAG,IAAI,CAAA;EAE5D,UAAA,IAAI,IAAA,CAAK,gBAAA,EAAkB,OAAOA,OAAA,CAAG,IAAI,CAAA;EAEzC,UAAA,OAAOA,QAAG,KAAK,CAAA;EAAA,QACjB,CAAC;EAAA;EACH;EACF,GACF;EAEA,EAAAJ,UAAA;EAAA,IACE,UAAA;EAAA,IACA,IAAA;EAAA,IACA,OAAA;EAAA,IACA,OAAA;EAAA,IACA,OAAA;EAAA,IACA,MAAA;EAAA,IACA,kBAAA;EAAA,IACA;EAAA,GACF,CACG,KAAKD,cAAA,CAAU,MAAA,CAAO,EAAE,QAAQ,CAAC,EACjC,SAAA,EAAU;EAEb,EAAA,OAAO;EAAA,IACL,GAAG,MAAA;EAAA,IACH,mCAAA,EAAqC,IAAA;EAAA,IACrC,SAAS,MAAM;EACb,MAAA,kBAAA,CAAmB,QAAA,EAAS;EAC5B,MAAA,QAAA,CAAS,OAAA,EAAQ;EACjB,MAAA,gBAAA,CAAiB,OAAA,EAAQ;EACzB,MAAA,MAAA,CAAO,OAAA,EAAQ;EAAA,IACjB,CAAA;EAAA,IACA,WAAA,EAAa;EAAA,MACX,YAAA;EAAA,MACA,eAAe,gBAAA,CAAiB,IAAA;EAAA,MAChC,WAAA;EAAA,MACA,yBAAyB,gBAAA,CAAiB,uBAAA;EAAA,MAC1C,UAAU,QAAA,CAAS,QAAA;EAAA,MACnB,sBAAsB,QAAA,CAAS,oBAAA;EAAA,MAC/B,KAAK,QAAA,CAAS,GAAA;EAAA,MACd,QAAQ,QAAA,CAAS,MAAA;EAAA,MACjB,QAAQ,QAAA,CAAS,MAAA;EAAA,MACjB,QAAQ,QAAA,CAAS,MAAA;EAAA,MACjB,OAAO,QAAA,CAAS;EAAA;EAClB,GACF;EACF;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.umd.cjs","sources":["../src/annotations/utils.ts","../src/annotations/SpineItemHighlight.ts","../src/annotations/SpineItemHighlights.ts","../src/annotations/ReaderHighlights.ts","../src/Commands.ts","../../shared/dist/index.js","../src/report.ts","../src/annotationsEnhancer.ts"],"sourcesContent":["export const createElementForRange = (\n range: Range,\n container: HTMLElement,\n color: string,\n) => {\n // Get all rects and group them by line (based on vertical position)\n const rects = Array.from(range.getClientRects())\n const lineGroups = new Map<number, DOMRect[]>()\n\n rects.forEach((rect) => {\n const lineY = Math.round(rect.top) // Round to handle minor pixel differences\n if (!lineGroups.has(lineY)) {\n lineGroups.set(lineY, [])\n }\n lineGroups.get(lineY)?.push(rect)\n })\n\n // Create one highlight element per line\n return Array.from(lineGroups.values()).map((lineRects) => {\n // Find the leftmost and rightmost points\n const left = Math.min(...lineRects.map((r) => r.left))\n const right = Math.max(...lineRects.map((r) => r.right))\n const top = lineRects[0]?.top\n const height = lineRects[0]?.height\n\n const rectEltContainer = container.ownerDocument.createElement(\"div\")\n const rectElt = container.ownerDocument.createElement(\"div\")\n rectEltContainer.style.cssText = `\n position: absolute;\n width: ${right - left}px;\n height: ${height}px;\n top: ${top}px;\n left: ${left}px;\n box-sizing: border-box;\n border: 3px dashed transparent;\n `\n rectElt.style.cssText = `\n height: 100%;\n width: 100%;\n opacity: 40%;\n background-color: ${color}\n `\n\n rectEltContainer.appendChild(rectElt)\n\n return rectEltContainer\n })\n}\n\nexport const copyPositionStyle = (source: HTMLElement, target: HTMLElement) => {\n target.style.cssText = source.style.cssText\n}\n\nexport const createAnnotationLayer = (\n container: HTMLElement,\n layer: HTMLElement,\n) => {\n const annotationLayer = container.ownerDocument.createElement(\"div\")\n\n layoutAnnotationLayer(layer, annotationLayer)\n\n container.appendChild(annotationLayer)\n\n return annotationLayer\n}\n\nexport const layoutAnnotationLayer = (\n layer: HTMLElement,\n annotationLayer: HTMLElement,\n) => {\n copyPositionStyle(layer, annotationLayer)\n\n if (layer.style.position === \"\") {\n annotationLayer.style.position = \"absolute\"\n annotationLayer.style.top = \"0\"\n }\n\n // annotationLayer.style.backgroundColor = \"red\"\n annotationLayer.style.opacity = \"1\"\n annotationLayer.style.pointerEvents = \"none\"\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n first,\n fromEvent,\n map,\n merge,\n type Observable,\n share,\n shareReplay,\n skip,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createElementForRange } from \"./utils\"\n\nexport class SpineItemHighlight extends DestroyableClass {\n private container: HTMLElement\n public readonly tap$: Observable<{\n event: Event\n highlight: RuntimeAnnotation\n }>\n private resolvedCfi$: Observable<ReturnType<Reader[\"cfi\"][\"resolveCfi\"]>>\n\n constructor(\n private spineItem: SpineItem,\n private containerElement: HTMLElement,\n private reader: Reader,\n public readonly highlight: RuntimeAnnotation,\n private isSelected: Observable<boolean>,\n ) {\n super()\n\n void this.spineItem\n void this.reader\n\n this.container = this.containerElement.ownerDocument.createElement(\"div\")\n this.container.dataset.highlightContainer = this.highlight.id\n this.containerElement.appendChild(this.container)\n\n this.tap$ = fromEvent(this.container, \"click\").pipe(\n map((event) => ({ event, highlight: this.highlight })),\n share(),\n )\n\n this.resolvedCfi$ = this.spineItem.watch(\"isLoaded\").pipe(\n map(() => this.reader.cfi.resolveCfi({ cfi: this.highlight.cfi })),\n shareReplay({ refCount: true, bufferSize: 1 }),\n )\n\n 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 merge(this.resolvedCfi$).pipe(takeUntil(this.destroy$)).subscribe()\n }\n\n public render() {\n return this.resolvedCfi$.pipe(\n first(),\n map((resolvedCfi) => {\n if (!resolvedCfi || !resolvedCfi.isCfiRange) return undefined\n\n const range = resolvedCfi.range\n\n this.container.innerHTML = \"\"\n\n /**\n * The nodes can be undefined if the cfi is not found.\n * This can happens if the item is not loaded (legit) or if the cfi\n * are just invalid.\n */\n if (!range) {\n return\n }\n\n const rectElements = createElementForRange(\n range,\n this.container,\n this.highlight.highlightColor ?? \"yellow\",\n )\n\n rectElements.forEach((elt) => {\n elt.style.pointerEvents = \"initial\"\n elt.style.cursor = \"pointer\"\n elt.dataset.highlightRect = this.highlight.id\n\n this.container.appendChild(elt)\n })\n\n const firstElement = rectElements[0]\n\n if (firstElement && this.highlight.notes) {\n const noteIcon = document.createElement(\"span\")\n noteIcon.textContent = \"📝\"\n noteIcon.style.position = \"absolute\"\n noteIcon.style.top = \"0\"\n noteIcon.style.left = \"0\"\n noteIcon.style.transform = \"translate(-0%, -80%)\"\n noteIcon.style.fontSize = \"18px\"\n noteIcon.style.opacity = \"50%\"\n firstElement.appendChild(noteIcon)\n }\n\n return null\n }),\n )\n }\n\n isWithinTarget(target: Node) {\n return this.container.contains(target)\n }\n\n public destroy() {\n super.destroy()\n\n this.container.remove()\n }\n}\n","import {\n DestroyableClass,\n type Reader,\n type SpineItem,\n} from \"@prose-reader/core\"\nimport {\n defaultIfEmpty,\n distinctUntilChanged,\n forkJoin,\n map,\n merge,\n type Observable,\n of,\n shareReplay,\n switchMap,\n takeUntil,\n} from \"rxjs\"\nimport { SpineItemHighlight } from \"./SpineItemHighlight\"\nimport type { RuntimeAnnotation } from \"./types\"\nimport { createAnnotationLayer, layoutAnnotationLayer } from \"./utils\"\n\nexport class SpineItemHighlights extends DestroyableClass {\n private layer: HTMLElement\n private highlights: SpineItemHighlight[] = []\n\n public readonly tap$: SpineItemHighlight[\"tap$\"]\n\n constructor(\n private annotations$: Observable<RuntimeAnnotation[]>,\n private spineItem: SpineItem,\n private reader: Reader,\n private selectedHighlight: Observable<string | undefined>,\n ) {\n super()\n\n const firstLayerElement =\n spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n this.layer = createAnnotationLayer(\n this.spineItem.containerElement,\n firstLayerElement,\n )\n\n const itemHighlights$ = this.annotations$.pipe(\n switchMap((annotations) => {\n this.highlights.forEach((highlight) => {\n highlight.destroy()\n })\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 annotations$.subscribe()\n }\n\n layout() {\n const firstLayerElement =\n this.spineItem.renderer.documentContainer ?? document.createElement(\"div\")\n\n layoutAnnotationLayer(firstLayerElement, this.layer)\n\n return forkJoin(\n this.highlights.map((highlight) => highlight.render()),\n ).pipe(defaultIfEmpty(null))\n }\n\n getHighlightsForTarget(target: EventTarget) {\n return this.highlights.filter(\n (highlight) => target instanceof Node && highlight.isWithinTarget(target),\n )\n }\n\n destroy() {\n super.destroy()\n\n this.layer.remove()\n }\n}\n","import { DestroyableClass, type Reader } from \"@prose-reader/core\"\nimport {\n BehaviorSubject,\n defaultIfEmpty,\n forkJoin,\n map,\n merge,\n switchMap,\n} from \"rxjs\"\nimport { SpineItemHighlights } from \"./SpineItemHighlights\"\nimport type { RuntimeAnnotation } from \"./types\"\n\nexport class ReaderHighlights extends DestroyableClass {\n private spineItemHighlights = new BehaviorSubject<SpineItemHighlights[]>([])\n\n public tap$: SpineItemHighlights[\"tap$\"]\n\n constructor(\n private reader: Reader,\n private highlights: BehaviorSubject<RuntimeAnnotation[]>,\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 return forkJoin(\n this.spineItemHighlights.value.map((item) => item.layout()),\n ).pipe(defaultIfEmpty(null))\n }\n}\n","import { DestroyableClass } from \"@prose-reader/core\"\nimport { filter, Subject } from \"rxjs\"\nimport type { Annotation } from \"./types\"\n\ntype AnnotationSharedParams = Omit<Annotation, \"id\" | \"cfi\"> & {\n selection?: Selection\n}\n\ntype AnnotateParams = AnnotationSharedParams & {\n itemIndex: number\n}\n\ntype AnnotateAbsolutePageParams = AnnotationSharedParams & {\n absolutePageIndex: number\n}\n\ntype Command =\n | {\n type: \"annotate\"\n data: (AnnotateParams | AnnotateAbsolutePageParams) & {\n absolutePageIndex?: number\n }\n }\n | { type: \"add\"; data: Annotation | Annotation[] }\n | { type: \"delete\"; id: string }\n | {\n type: \"update\"\n id: string\n data: Pick<AnnotationSharedParams, \"highlightColor\" | \"notes\">\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 annotate$ = this.commandSubject.pipe(\n filter((command) => command.type === \"annotate\"),\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 annotate = (params: AnnotateParams) => {\n this.commandSubject.next({ type: \"annotate\", data: params })\n }\n\n annotateAbsolutePage = (params: AnnotateAbsolutePageParams) => {\n this.commandSubject.next({ type: \"annotate\", data: params })\n }\n\n add = (data: Annotation | Annotation[]) => {\n this.commandSubject.next({ type: \"add\", data })\n }\n\n delete = (id: string) => {\n this.commandSubject.next({ type: \"delete\", id })\n }\n\n update = (\n id: string,\n data: Pick<AnnotationSharedParams, \"highlightColor\" | \"notes\">,\n ) => {\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","const a = (o, n) => o === n ? !0 : o.length !== n.length ? !1 : o.every((e, t) => e === n[t]), f = (o) => o.split(/[#?]/)[0]?.split(\".\").pop()?.trim() || \"\";\nfunction s(o) {\n const n = [];\n if (o.length === 0)\n return \"\";\n if (typeof o[0] != \"string\")\n throw new TypeError(`Url must be a string. Received ${o[0]}`);\n o[0].match(/^[^/:]+:\\/*$/) && o.length > 1 && (o[0] = o.shift() + o[0]), o[0].match(/^file:\\/\\/\\//) ? o[0] = o[0].replace(/^([^/:]+):\\/*/, \"$1:///\") : o[0] = o[0].replace(/^([^/:]+):\\/*/, \"$1://\");\n for (let l = 0; l < o.length; l++) {\n let r = o[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 < o.length - 1 ? r = r.replace(/[/]+$/, \"\") : r = r.replace(/[/]+$/, \"/\"), n.push(r));\n }\n let e = n.join(\"/\");\n e = e.replace(/\\/(\\?|&|#[^!])/g, \"$1\");\n const t = e.split(\"?\");\n return e = t.shift() + (t.length > 0 ? \"?\" : \"\") + t.join(\"&\"), e;\n}\nfunction E(...o) {\n const n = Array.from(Array.isArray(o[0]) ? o[0] : o);\n return s(n);\n}\nfunction y(o) {\n const n = o.split(\"/\");\n return n.pop(), n.join(\"/\");\n}\nconst p = (o) => {\n switch (f(o)) {\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}, w = ({\n mimeType: o,\n uri: n\n}) => (o ?? p(n ?? \"\"))?.startsWith(\"application/xhtml+xml\"), R = (o) => o.length ? o.indexOf(\";\") ? o.substring(0, o.indexOf(\";\")) : o : void 0, g = Object.prototype.hasOwnProperty, d = (o, n) => o === n ? o !== 0 || n !== 0 || 1 / o === 1 / n : !1, m = (o, n, e) => {\n if (o === n)\n return !0;\n if (typeof o != \"object\" || o === null || typeof n != \"object\" || n === null)\n return !1;\n const t = Object.keys(o), l = Object.keys(n);\n if (t.length !== l.length)\n return !1;\n const r = e && typeof e.customEqual == \"function\" ? e.customEqual : d;\n for (let c = 0; c < t.length; c++) {\n const i = t[c] || \"\";\n if (!g.call(n, i) || !r(o[i], n[i]))\n return !1;\n }\n return !0;\n}, v = (o, n) => o.reduce(\n (e, t) => {\n const l = n(t);\n return e[l] || (e[l] = []), e[l].push(t), e;\n },\n {}\n);\nfunction O(o, n) {\n const e = { ...o };\n for (const t in n)\n if (Object.hasOwn(n, t)) {\n const l = n[t];\n (l !== void 0 || !(t in o)) && (e[t] = l);\n }\n return e;\n}\nconst h = () => {\n if (!(typeof window > \"u\"))\n return window;\n};\nfunction $() {\n const o = h()?.__PROSE_READER_DEBUG;\n return o === !0 || o === \"true\";\n}\nconst u = (o, n = $(), e) => ({\n namespace: (t, l) => u(`${o} [${t}]`, l, e),\n debug: n ? o ? Function.prototype.bind.call(\n console.debug,\n console,\n o,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.debug,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n },\n info: n ? o ? Function.prototype.bind.call(\n console.info,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.info,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n },\n log: n ? o ? Function.prototype.bind.call(\n console.log,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(console.log, console) : () => {\n },\n warn: n ? o ? Function.prototype.bind.call(\n console.warn,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.warn,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n },\n error: n ? o ? Function.prototype.bind.call(\n console.error,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : Function.prototype.bind.call(\n console.error,\n console,\n `%c${o}`,\n e?.color ? `color: ${e.color}` : void 0\n ) : () => {\n }\n}), _ = {\n ...u(),\n namespace: (o, n, e) => u(`[${o}]`, n, e)\n}, x = \"prose-reader-resource-error\";\nexport {\n x as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,\n _ as Report,\n a as arrayEqual,\n p as detectMimeTypeFromName,\n y as getParentPath,\n f as getUrlExtension,\n v as groupBy,\n d as is,\n m as isShallowEqual,\n w as isXmlBasedMimeType,\n R as parseContentType,\n O as shallowMergeIfDefined,\n E 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 { isDefined, type Reader } from \"@prose-reader/core\"\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n merge,\n of,\n share,\n shareReplay,\n switchMap,\n takeUntil,\n tap,\n} from \"rxjs\"\nimport { ReaderHighlights } from \"./annotations/ReaderHighlights\"\nimport type { RuntimeAnnotation } from \"./annotations/types\"\nimport { Commands } from \"./Commands\"\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 annotationsSubject = new BehaviorSubject<RuntimeAnnotation[]>([])\n const selectedHighlightSubject = new BehaviorSubject<string | undefined>(\n undefined,\n )\n\n const annotations$ = annotationsSubject.asObservable().pipe(\n distinctUntilChanged(),\n tap((annotations) => {\n report.debug(\"annotations\", annotations)\n }),\n shareReplay({\n refCount: true,\n bufferSize: 1,\n }),\n )\n\n const readerHighlights = new ReaderHighlights(\n reader,\n annotationsSubject,\n selectedHighlightSubject,\n )\n\n const resolveItemInformation = (params: {\n absolutePageIndex?: number\n itemIndex?: number\n }) => {\n if (params.itemIndex !== undefined)\n return { itemIndex: params.itemIndex, pageIndex: undefined }\n\n if (params.absolutePageIndex !== undefined) {\n return reader.spine.pages.fromAbsolutePageIndex(\n params.absolutePageIndex,\n )\n }\n\n return undefined\n }\n\n const annotated$ = commands.annotate$.pipe(\n map(({ data: { selection, ...rest } }) => {\n const { itemIndex, pageIndex = 0 } = resolveItemInformation(rest) ?? {}\n const spineItem = reader.spineItemsManager.get(itemIndex)\n\n if (!spineItem) return undefined\n\n const range = selection\n ? reader.selection.createOrderedRangeFromSelection({\n selection,\n spineItem,\n })\n : undefined\n\n const cfi = range\n ? reader.cfi.generateCfiFromRange(range, spineItem.item)\n : reader.cfi.generateCfiForSpineItemPage({ pageIndex, spineItem })\n\n const highlight = {\n cfi,\n itemIndex: spineItem.index,\n id: window.crypto.randomUUID(),\n ...rest,\n } satisfies RuntimeAnnotation\n\n annotationsSubject.next([...annotationsSubject.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 = 0 } = reader.cfi.parseCfi(annotation.cfi ?? \"\")\n\n const highlight = {\n ...annotation,\n itemIndex,\n } satisfies RuntimeAnnotation\n\n return highlight\n })\n\n annotationsSubject.next([\n ...annotationsSubject.getValue(),\n ...addedHighlights,\n ])\n }),\n )\n\n const delete$ = commands.delete$.pipe(\n tap(({ id }) => {\n annotationsSubject.next(\n annotationsSubject.value.filter((highlight) => highlight.id !== id),\n )\n }),\n )\n\n const update$ = commands.update$.pipe(\n tap(({ id, data }) => {\n annotationsSubject.next(\n annotationsSubject.getValue().map((highlight) => {\n return highlight.id === id ? { ...highlight, ...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 annotationsSubject.next([])\n }),\n )\n\n const renderAnnotations$ = merge(annotations$, reader.layout$).pipe(\n debounceTime(50),\n switchMap(() => readerHighlights.layout()),\n )\n\n const candidates$ = reader.layoutInfo$.pipe(\n switchMap(({ pages }) =>\n combineLatest(\n pages.map((page) => {\n const item = reader.spineItemsManager.get(page.itemIndex)\n\n if (!item) return of(false)\n\n // pre-paginated can always be annotated on their unique page\n if (item.renditionLayout === \"pre-paginated\") return of(true)\n\n if (page.firstVisibleNode) return of(true)\n\n return of(false)\n }),\n ),\n ),\n )\n\n merge(\n annotated$,\n add$,\n delete$,\n update$,\n select$,\n reset$,\n renderAnnotations$,\n annotations$,\n )\n .pipe(takeUntil(reader.$.destroy$))\n .subscribe()\n\n return {\n ...reader,\n __PROSE_READER_ENHANCER_ANNOTATIONS: true,\n destroy: () => {\n annotationsSubject.complete()\n commands.destroy()\n readerHighlights.destroy()\n reader.destroy()\n },\n annotations: {\n annotations$: annotations$,\n highlightTap$: readerHighlights.tap$,\n candidates$,\n isTargetWithinHighlight: readerHighlights.isTargetWithinHighlight,\n annotate: commands.annotate,\n annotateAbsolutePage: commands.annotateAbsolutePage,\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","fromEvent","map","share","shareReplay","skip","tap","isSelected","takeUntil","merge","first","switchMap","distinctUntilChanged","of","forkJoin","defaultIfEmpty","highlights","BehaviorSubject","Subject","filter","Report","isDefined","debounceTime","combineLatest"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prose-reader/enhancer-annotations",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.271.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": "41073a47a0480bdc7b9f646579cfb4182b188ca7"
|
|
25
25
|
}
|