@prose-reader/enhancer-pdf 1.164.0 → 1.166.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.
@@ -10,5 +10,5 @@ export declare const isPdfJsArchive: (archive: Archive) => archive is PdfJsArchi
10
10
  * Make sure the urls are on the same origin or the cors header is set otherwise
11
11
  * the resource cannot be consumed as it is on the web.
12
12
  */
13
- export declare const createArchiveFromPdf: (file: Blob) => Promise<Archive>;
13
+ export declare const createArchiveFromPdf: (file: Blob, filename: string) => Promise<Archive>;
14
14
  export {};
package/dist/index.js CHANGED
@@ -23,7 +23,10 @@ const layoutCanvas = (pageProxy, canvas, context) => {
23
23
  const pixelRatioScale = window.devicePixelRatio || 1;
24
24
  const { height: pageHeight, width: pageWidth } = context.getPageSize();
25
25
  const { width: viewportWidth, height: viewportHeight } = pageProxy.getViewport({ scale: 1 });
26
- const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight);
26
+ const pageScale = Math.max(
27
+ pageWidth / viewportWidth,
28
+ pageHeight / viewportHeight
29
+ );
27
30
  const viewport = pageProxy.getViewport({ scale: pageScale });
28
31
  const viewportRatio = viewport.width / viewport.height;
29
32
  const pageRatio = pageWidth / pageHeight;
@@ -32,8 +35,8 @@ const layoutCanvas = (pageProxy, canvas, context) => {
32
35
  const canvasHeight = viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight;
33
36
  canvas.width = Math.floor(viewport.width * pixelRatioScale);
34
37
  canvas.height = Math.floor(viewport.height * pixelRatioScale);
35
- canvas.style.width = Math.floor(canvasWidth) + "px";
36
- canvas.style.height = Math.floor(canvasHeight) + "px";
38
+ canvas.style.width = `${Math.floor(canvasWidth)}px`;
39
+ canvas.style.height = `${Math.floor(canvasHeight)}px`;
37
40
  };
38
41
 
39
42
  class PdfRenderer extends DocumentRenderer {
@@ -145,25 +148,27 @@ class PdfRenderer extends DocumentRenderer {
145
148
  })
146
149
  );
147
150
  }
148
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
149
151
  onLayout({
150
152
  spreadPosition
151
153
  }) {
152
154
  const frameElement = this.getFrameElement();
153
155
  const canvas = this.getCanvas();
154
- if (!frameElement || !canvas) return of(void 0);
156
+ if (!frameElement || !canvas) return of(undefined);
155
157
  const { height: pageHeight, width: pageWidth } = this.context.getPageSize();
156
158
  layoutLayers(this.layers, this.context, spreadPosition);
157
159
  const context = canvas?.getContext("2d");
158
160
  const pixelRatioScale = window.devicePixelRatio || 1;
159
- if (!this.pageProxy || !context) return of(void 0);
161
+ if (!this.pageProxy || !context) return of(undefined);
160
162
  if (this.renderTask) {
161
163
  this.renderTask.cancel();
162
- this.renderTask = void 0;
164
+ this.renderTask = undefined;
163
165
  }
164
166
  layoutCanvas(this.pageProxy, canvas, this.context);
165
167
  const { width: viewportWidth, height: viewportHeight } = this.pageProxy.getViewport({ scale: 1 });
166
- const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight);
168
+ const pageScale = Math.max(
169
+ pageWidth / viewportWidth,
170
+ pageHeight / viewportHeight
171
+ );
167
172
  const viewport = this.pageProxy.getViewport({ scale: pageScale });
168
173
  const transform = pixelRatioScale !== 1 ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0] : null;
169
174
  this.renderTask = this.pageProxy?.render({
@@ -175,21 +180,25 @@ class PdfRenderer extends DocumentRenderer {
175
180
  map(() => {
176
181
  const frameDoc = frameElement?.contentDocument;
177
182
  if (!frameDoc || !frameElement) {
178
- return void 0;
183
+ return undefined;
179
184
  }
180
185
  frameDoc.body.innerHTML = ``;
181
186
  const pdfPage = this.pageProxy;
182
- if (!pdfPage) return void 0;
187
+ if (!pdfPage) return undefined;
183
188
  const textLayerElement = frameDoc.createElement(`div`);
184
189
  textLayerElement.setAttribute("class", "textLayer");
185
190
  frameDoc.body.appendChild(textLayerElement);
186
191
  const canvasScale = canvas.clientWidth / viewportWidth;
187
- textLayerElement.style.top = canvas.offsetTop + "px";
188
- textLayerElement.style.left = canvas.offsetLeft + "px";
192
+ textLayerElement.style.top = `${canvas.offsetTop}px`;
193
+ textLayerElement.style.left = `${canvas.offsetLeft}px`;
189
194
  textLayerElement.style.height = canvas.style.height;
190
195
  textLayerElement.style.width = canvas.style.width;
191
196
  removeCSS(frameElement, "pdf-scale-scale");
192
- injectCSS(frameElement, "pdf-scale-scale", `:root { --scale-factor: ${canvasScale}; }`);
197
+ injectCSS(
198
+ frameElement,
199
+ "pdf-scale-scale",
200
+ `:root { --scale-factor: ${canvasScale}; }`
201
+ );
193
202
  if (this.textLayer) {
194
203
  this.textLayer.cancel();
195
204
  }
@@ -200,13 +209,13 @@ class PdfRenderer extends DocumentRenderer {
200
209
  });
201
210
  return from(this.textLayer.render());
202
211
  }),
203
- map(() => void 0),
212
+ map(() => undefined),
204
213
  catchError((e) => {
205
214
  if (!(e instanceof RenderingCancelledException)) console.error(e);
206
- return of(void 0);
215
+ return of(undefined);
207
216
  }),
208
217
  finalize(() => {
209
- this.renderTask = void 0;
218
+ this.renderTask = undefined;
210
219
  })
211
220
  );
212
221
  }
@@ -236,7 +245,7 @@ class PdfRenderer extends DocumentRenderer {
236
245
 
237
246
  const PDF_SYMBOL = Symbol(`pdfjs`);
238
247
  const isPdfJsArchive = (archive) => "_symbol" in archive && archive._symbol === PDF_SYMBOL;
239
- const createArchiveFromPdf = async (file) => {
248
+ const createArchiveFromPdf = async (file, filename) => {
240
249
  const loadingTask = pdfjsLib.getDocument(await file.arrayBuffer());
241
250
  const pdf = await loadingTask.promise;
242
251
  const pages = Array.from({ length: pdf.numPages });
@@ -264,7 +273,7 @@ const createArchiveFromPdf = async (file) => {
264
273
  string: async () => opfFileData
265
274
  };
266
275
  const archive = {
267
- filename: file.name,
276
+ filename,
268
277
  proxyDocument: pdf,
269
278
  _symbol: PDF_SYMBOL,
270
279
  files: [
@@ -310,10 +319,10 @@ const pdfEnhancer = (next) => (options) => {
310
319
  },
311
320
  getResource: (item) => options.pdf.getArchiveForItem(item).pipe(
312
321
  mergeMap((archive) => {
313
- if (!archive) return of(void 0);
322
+ if (!archive) return of(undefined);
314
323
  if (!isPdfJsArchive(archive)) {
315
324
  console.warn(`You provided an invalid pdf archive`);
316
- return of(void 0);
325
+ return of(undefined);
317
326
  }
318
327
  const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri)) - 1;
319
328
  return from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/renderer/layout.ts","../src/renderer/PdfRenderer.ts","../src/createArchiveFromPdf.ts","../src/pdfEnhancer.ts"],"sourcesContent":["import { Reader } from \"@prose-reader/core\"\nimport { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutLayers = (\n layers: { element: HTMLElement }[],\n context: Reader[\"context\"],\n spreadPosition: `none` | `left` | `right`,\n) => {\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n\n layers.forEach(({ element }) => {\n element.style.width = `${pageWidth}px`\n element.style.height = `${pageHeight}px`\n\n if (spreadPosition === `right`) {\n element.style.justifyContent = `flex-start`\n } else if (spreadPosition === `left`) {\n element.style.justifyContent = `flex-end`\n } else {\n element.style.justifyContent = `center`\n }\n })\n}\n\nexport const layoutCanvas = (pageProxy: PDFPageProxy, canvas: HTMLCanvasElement, context: Reader[\"context\"]) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n const { width: viewportWidth, height: viewportHeight } = pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight)\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = pageProxy.getViewport({ scale: pageScale })\n\n // Then wedefine which axis should stretch or shrink to ratio\n const viewportRatio = viewport.width / viewport.height\n const pageRatio = pageWidth / pageHeight\n const isWiderThanPage = viewportRatio > pageRatio\n const canvasWidth = isWiderThanPage ? pageWidth : pageHeight * viewportRatio\n const canvasHeight = viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight\n\n canvas.width = Math.floor(viewport.width * pixelRatioScale)\n canvas.height = Math.floor(viewport.height * pixelRatioScale)\n canvas.style.width = Math.floor(canvasWidth) + \"px\"\n canvas.style.height = Math.floor(canvasHeight) + \"px\"\n}\n","import { catchError, EMPTY, finalize, from, map, Observable, of, switchMap, tap } from \"rxjs\"\nimport { PDFPageProxy, RenderingCancelledException, RenderTask, TextLayer } from \"pdfjs-dist\"\nimport { DocumentRenderer, injectCSS, removeCSS, waitForFrameLoad, waitForFrameReady, waitForSwitch } from \"@prose-reader/core\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutLayers } from \"./layout\"\n\nexport class PdfRenderer extends DocumentRenderer {\n private pageProxy: PDFPageProxy | undefined\n private renderTask: RenderTask | undefined\n private textLayer: TextLayer | undefined\n\n constructor(\n private pdfViewerStyle: string,\n params: ConstructorParameters<typeof DocumentRenderer>[0],\n ) {\n super(params)\n }\n\n private getCanvas() {\n const element = this.layers[0]?.element.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.layers[1]?.element.children[0]\n\n if (!(frame instanceof HTMLIFrameElement)) return\n\n return frame\n }\n\n private getPageProxy() {\n if (this.pageProxy) return of(this.pageProxy)\n\n return from(this.resourcesHandler.fetchResource()).pipe(\n switchMap((resource) => {\n if (!(\"custom\" in resource)) return EMPTY\n\n this.pageProxy = resource.data as PDFPageProxy\n\n return of(this.pageProxy)\n }),\n )\n }\n\n onUnload(): Observable<unknown> {\n this.layers.forEach(({ element }) => {\n element.remove()\n })\n\n this.layers = []\n\n if (this.renderTask) {\n this.renderTask.cancel()\n }\n\n this.textLayer?.cancel()\n this.pageProxy?.cleanup()\n\n return EMPTY\n }\n\n onCreateDocument(): Observable<unknown> {\n const frameElement = document.createElement(`iframe`)\n frameElement.style.cssText = `\n overflow: hidden;\n height: 100%;\n width: 100%;\n `\n\n frameElement.setAttribute(\"tabIndex\", \"0\")\n frameElement.setAttribute(\"frameBorder\", \"0\")\n frameElement.setAttribute(`src`, \"about:blank\")\n\n const frameContainer = this.containerElement.ownerDocument.createElement(\"div\")\n frameContainer.style.cssText = `\n mix-blend-mode: multiply;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n `\n\n /**\n * The canvas is never attached to the DOM and will be used for offscreen rendering\n * then copied into the frame.\n */\n const canvas = this.containerElement.ownerDocument.createElement(\"canvas\")\n const canvasContainer = this.containerElement.ownerDocument.createElement(\"div\")\n canvasContainer.style.cssText = `\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: clip;\n `\n\n frameContainer.appendChild(frameElement)\n canvasContainer.appendChild(canvas)\n\n this.layers = [\n {\n element: canvasContainer,\n },\n {\n element: frameContainer,\n },\n ]\n\n return EMPTY\n }\n\n onLoadDocument(): Observable<unknown> {\n return this.getPageProxy().pipe(\n switchMap(() => {\n const frameElement = this.getFrameElement()\n\n if (!frameElement) return EMPTY\n\n return of(frameElement).pipe(\n waitForSwitch(this.context.bridgeEvent.viewportFree$),\n tap(() => {\n this.layers.forEach(({ element }) => {\n this.containerElement.appendChild(element)\n })\n }),\n waitForFrameLoad,\n tap(() => {\n injectCSS(frameElement, \"pdfjs-viewer-style\", this.pdfViewerStyle)\n injectCSS(frameElement, \"enhancer-pdf-style\", pdfFrameStyle)\n\n const body = frameElement?.contentDocument?.body\n\n if (body) {\n const canvas = body.ownerDocument.createElement(`canvas`)\n\n body.appendChild(canvas)\n }\n }),\n waitForFrameReady,\n )\n }),\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLayout({\n spreadPosition,\n }: {\n minPageSpread: number\n blankPagePosition: `before` | `after` | `none`\n spreadPosition: `none` | `left` | `right`\n }) {\n const frameElement = this.getFrameElement()\n const canvas = this.getCanvas()\n\n if (!frameElement || !canvas) return of(undefined)\n\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = this.context.getPageSize()\n\n layoutLayers(this.layers, this.context, spreadPosition)\n\n const context = canvas?.getContext(\"2d\")\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n\n if (!this.pageProxy || !context) return of(undefined)\n\n if (this.renderTask) {\n this.renderTask.cancel()\n this.renderTask = undefined\n }\n\n layoutCanvas(this.pageProxy, canvas, this.context)\n\n const { width: viewportWidth, height: viewportHeight } = this.pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight)\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = this.pageProxy.getViewport({ scale: pageScale })\n\n const transform = pixelRatioScale !== 1 ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0] : null\n\n this.renderTask = this.pageProxy?.render({\n ...(transform && { transform }),\n canvasContext: context,\n viewport,\n })\n\n return from(this.renderTask?.promise).pipe(\n map(() => {\n const frameDoc = frameElement?.contentDocument\n\n if (!frameDoc || !frameElement) {\n return undefined\n }\n\n frameDoc.body.innerHTML = ``\n\n // const frameCanvas = copyCanvasToFrame(canvas, frameDoc)\n const pdfPage = this.pageProxy\n\n if (!pdfPage) return undefined\n\n const textLayerElement = frameDoc.createElement(`div`)\n // Set it's class to textLayer which have required CSS styles\n textLayerElement.setAttribute(\"class\", \"textLayer\")\n frameDoc.body.appendChild(textLayerElement)\n\n const canvasScale = canvas.clientWidth / viewportWidth\n\n textLayerElement.style.top = canvas.offsetTop + \"px\"\n textLayerElement.style.left = canvas.offsetLeft + \"px\"\n textLayerElement.style.height = canvas.style.height\n textLayerElement.style.width = canvas.style.width\n\n removeCSS(frameElement, \"pdf-scale-scale\")\n injectCSS(frameElement, \"pdf-scale-scale\", `:root { --scale-factor: ${canvasScale}; }`)\n\n if (this.textLayer) {\n this.textLayer.cancel()\n }\n\n this.textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pdfPage.streamTextContent(),\n viewport,\n })\n\n return from(this.textLayer.render())\n }),\n map(() => undefined),\n catchError((e) => {\n if (!(e instanceof RenderingCancelledException)) console.error(e)\n\n return of(undefined)\n }),\n finalize(() => {\n this.renderTask = undefined\n }),\n )\n }\n\n /**\n * @important\n * We should keep the same node structure to preserve CFI integrity.\n */\n onRenderHeadless() {\n return this.getPageProxy().pipe(\n switchMap((pageProxy) => {\n const headlessDocument = document.implementation.createHTMLDocument()\n const textLayerElement = headlessDocument.createElement(\"div\")\n\n headlessDocument.body.appendChild(textLayerElement)\n\n const textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pageProxy.streamTextContent(),\n viewport: pageProxy.getViewport({ scale: 1 }),\n })\n\n return from(textLayer.render()).pipe(map(() => headlessDocument))\n }),\n )\n }\n\n getDocumentFrame() {\n return this.getFrameElement()\n }\n}\n","import { Archive } from \"@prose-reader/streamer\"\nimport * as pdfjsLib from \"pdfjs-dist\"\n\ntype PdfJsArchive = Archive & {\n _symbol: symbol\n proxyDocument: pdfjsLib.PDFDocumentProxy\n}\n\nconst PDF_SYMBOL = Symbol(`pdfjs`)\n\nexport const isPdfJsArchive = (archive: Archive): archive is PdfJsArchive =>\n \"_symbol\" in archive && archive._symbol === PDF_SYMBOL\n\n/**\n * @important\n * Make sure the urls are on the same origin or the cors header is set otherwise\n * the resource cannot be consumed as it is on the web.\n */\nexport const createArchiveFromPdf = async (file: Blob): Promise<Archive> => {\n const loadingTask = pdfjsLib.getDocument(await file.arrayBuffer())\n\n const pdf = await loadingTask.promise\n\n const pages = Array.from({ length: pdf.numPages })\n\n const opfFileData = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?><package xmlns=\"http://www.idpf.org/2007/opf\" version=\"2.0\" unique-identifier=\"bookid\">\n <metadata>\n <meta property=\"rendition:layout\">pre-paginated</meta>\n </metadata>\n <manifest>\n ${pages.map((_, index) => `<item id=\"${index}\" href=\"${index}.pdf\" />`).join(`\\n`)}\n </manifest>\n <spine>\n ${pages.map((_, index) => `<itemref idref=\"${index}\" />`).join(`\\n`)}\n </spine>\n </package>\n `\n\n const opfFile: Archive[`files`][number] = {\n dir: false,\n basename: `content.opf`,\n uri: `content.opf`,\n size: 0,\n blob: async () => new Blob(),\n string: async () => opfFileData,\n }\n\n const archive = {\n filename: file.name,\n proxyDocument: pdf,\n _symbol: PDF_SYMBOL,\n files: [\n opfFile,\n ...pages.map((_, index) => ({\n dir: false,\n blob: async () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n basename: `${index}.pdf`,\n size: 0,\n string: () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n uri: `${index}.pdf`,\n })),\n ],\n close: () => {\n return pdf.cleanup()\n },\n } satisfies PdfJsArchive\n\n return archive as Archive\n}\n","import { createReader, Reader } from \"@prose-reader/core\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport { EnhancerOptions } from \"./types\"\nimport { from, map, mergeMap, of } from \"rxjs\"\nimport { isPdfJsArchive } from \"./createArchiveFromPdf\"\n\ntype CreateReader = typeof createReader\ntype CreateReaderOptions = Parameters<CreateReader>[0]\n\nexport const pdfEnhancer =\n <InheritOptions extends CreateReaderOptions, InheritOutput extends Reader>(next: (options: InheritOptions) => InheritOutput) =>\n (options: InheritOptions & EnhancerOptions): InheritOutput => {\n const reader = next({\n ...options,\n /**\n * We have a special renderer for pdf so we need to inject it\n * for the relevant items. The enhancer could be configurable but for\n * the sake of simplicity we will assume that an item ending with .pdf should\n * be treated as a pdf document.\n *\n * The `getRenderer` hook should be non destructive, if we detect a renderer already\n * setup we should return it.\n */\n getRenderer(item) {\n const maybeFactory = options.getRenderer?.(item)\n\n if (!maybeFactory && item.href.endsWith(`.pdf`)) {\n return (params) => new PdfRenderer(options.pdf.pdfjsViewerInlineCss, params)\n }\n\n return maybeFactory\n },\n getResource: (item) =>\n options.pdf.getArchiveForItem(item).pipe(\n mergeMap((archive) => {\n if (!archive) return of(undefined)\n\n if (!isPdfJsArchive(archive)) {\n console.warn(`You provided an invalid pdf archive`)\n\n return of(undefined)\n }\n\n // we account for opf file\n const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri)) - 1\n\n return from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(\n map((pageProxy) => ({\n custom: true as const,\n data: pageProxy,\n })),\n )\n }),\n ),\n })\n\n return reader\n }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/renderer/layout.ts","../src/renderer/PdfRenderer.ts","../src/createArchiveFromPdf.ts","../src/pdfEnhancer.ts"],"sourcesContent":["import type { Reader } from \"@prose-reader/core\"\nimport type { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutLayers = (\n layers: { element: HTMLElement }[],\n context: Reader[\"context\"],\n spreadPosition: `none` | `left` | `right`,\n) => {\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n\n layers.forEach(({ element }) => {\n element.style.width = `${pageWidth}px`\n element.style.height = `${pageHeight}px`\n\n if (spreadPosition === `right`) {\n element.style.justifyContent = `flex-start`\n } else if (spreadPosition === `left`) {\n element.style.justifyContent = `flex-end`\n } else {\n element.style.justifyContent = `center`\n }\n })\n}\n\nexport const layoutCanvas = (\n pageProxy: PDFPageProxy,\n canvas: HTMLCanvasElement,\n context: Reader[\"context\"],\n) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n const { width: viewportWidth, height: viewportHeight } =\n pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = pageProxy.getViewport({ scale: pageScale })\n\n // Then wedefine which axis should stretch or shrink to ratio\n const viewportRatio = viewport.width / viewport.height\n const pageRatio = pageWidth / pageHeight\n const isWiderThanPage = viewportRatio > pageRatio\n const canvasWidth = isWiderThanPage ? pageWidth : pageHeight * viewportRatio\n const canvasHeight =\n viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight\n\n canvas.width = Math.floor(viewport.width * pixelRatioScale)\n canvas.height = Math.floor(viewport.height * pixelRatioScale)\n canvas.style.width = `${Math.floor(canvasWidth)}px`\n canvas.style.height = `${Math.floor(canvasHeight)}px`\n}\n","import {\n catchError,\n EMPTY,\n finalize,\n from,\n map,\n type Observable,\n of,\n switchMap,\n tap,\n} from \"rxjs\"\nimport {\n type PDFPageProxy,\n RenderingCancelledException,\n type RenderTask,\n TextLayer,\n} from \"pdfjs-dist\"\nimport {\n DocumentRenderer,\n injectCSS,\n removeCSS,\n waitForFrameLoad,\n waitForFrameReady,\n waitForSwitch,\n} from \"@prose-reader/core\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutLayers } from \"./layout\"\n\nexport class PdfRenderer extends DocumentRenderer {\n private pageProxy: PDFPageProxy | undefined\n private renderTask: RenderTask | undefined\n private textLayer: TextLayer | undefined\n\n constructor(\n private pdfViewerStyle: string,\n params: ConstructorParameters<typeof DocumentRenderer>[0],\n ) {\n super(params)\n }\n\n private getCanvas() {\n const element = this.layers[0]?.element.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.layers[1]?.element.children[0]\n\n if (!(frame instanceof HTMLIFrameElement)) return\n\n return frame\n }\n\n private getPageProxy() {\n if (this.pageProxy) return of(this.pageProxy)\n\n return from(this.resourcesHandler.fetchResource()).pipe(\n switchMap((resource) => {\n if (!(\"custom\" in resource)) return EMPTY\n\n this.pageProxy = resource.data as PDFPageProxy\n\n return of(this.pageProxy)\n }),\n )\n }\n\n onUnload(): Observable<unknown> {\n this.layers.forEach(({ element }) => {\n element.remove()\n })\n\n this.layers = []\n\n if (this.renderTask) {\n this.renderTask.cancel()\n }\n\n this.textLayer?.cancel()\n this.pageProxy?.cleanup()\n\n return EMPTY\n }\n\n onCreateDocument(): Observable<unknown> {\n const frameElement = document.createElement(`iframe`)\n frameElement.style.cssText = `\n overflow: hidden;\n height: 100%;\n width: 100%;\n `\n\n frameElement.setAttribute(\"tabIndex\", \"0\")\n frameElement.setAttribute(\"frameBorder\", \"0\")\n frameElement.setAttribute(`src`, \"about:blank\")\n\n const frameContainer =\n this.containerElement.ownerDocument.createElement(\"div\")\n frameContainer.style.cssText = `\n mix-blend-mode: multiply;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n `\n\n /**\n * The canvas is never attached to the DOM and will be used for offscreen rendering\n * then copied into the frame.\n */\n const canvas = this.containerElement.ownerDocument.createElement(\"canvas\")\n const canvasContainer =\n this.containerElement.ownerDocument.createElement(\"div\")\n canvasContainer.style.cssText = `\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: clip;\n `\n\n frameContainer.appendChild(frameElement)\n canvasContainer.appendChild(canvas)\n\n this.layers = [\n {\n element: canvasContainer,\n },\n {\n element: frameContainer,\n },\n ]\n\n return EMPTY\n }\n\n onLoadDocument(): Observable<unknown> {\n return this.getPageProxy().pipe(\n switchMap(() => {\n const frameElement = this.getFrameElement()\n\n if (!frameElement) return EMPTY\n\n return of(frameElement).pipe(\n waitForSwitch(this.context.bridgeEvent.viewportFree$),\n tap(() => {\n this.layers.forEach(({ element }) => {\n this.containerElement.appendChild(element)\n })\n }),\n waitForFrameLoad,\n tap(() => {\n injectCSS(frameElement, \"pdfjs-viewer-style\", this.pdfViewerStyle)\n injectCSS(frameElement, \"enhancer-pdf-style\", pdfFrameStyle)\n\n const body = frameElement?.contentDocument?.body\n\n if (body) {\n const canvas = body.ownerDocument.createElement(`canvas`)\n\n body.appendChild(canvas)\n }\n }),\n waitForFrameReady,\n )\n }),\n )\n }\n\n onLayout({\n spreadPosition,\n }: {\n minPageSpread: number\n blankPagePosition: `before` | `after` | `none`\n spreadPosition: `none` | `left` | `right`\n }) {\n const frameElement = this.getFrameElement()\n const canvas = this.getCanvas()\n\n if (!frameElement || !canvas) return of(undefined)\n\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = this.context.getPageSize()\n\n layoutLayers(this.layers, this.context, spreadPosition)\n\n const context = canvas?.getContext(\"2d\")\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n\n if (!this.pageProxy || !context) return of(undefined)\n\n if (this.renderTask) {\n this.renderTask.cancel()\n this.renderTask = undefined\n }\n\n layoutCanvas(this.pageProxy, canvas, this.context)\n\n const { width: viewportWidth, height: viewportHeight } =\n this.pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = this.pageProxy.getViewport({ scale: pageScale })\n\n const transform =\n pixelRatioScale !== 1\n ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0]\n : null\n\n this.renderTask = this.pageProxy?.render({\n ...(transform && { transform }),\n canvasContext: context,\n viewport,\n })\n\n return from(this.renderTask?.promise).pipe(\n map(() => {\n const frameDoc = frameElement?.contentDocument\n\n if (!frameDoc || !frameElement) {\n return undefined\n }\n\n frameDoc.body.innerHTML = ``\n\n // const frameCanvas = copyCanvasToFrame(canvas, frameDoc)\n const pdfPage = this.pageProxy\n\n if (!pdfPage) return undefined\n\n const textLayerElement = frameDoc.createElement(`div`)\n // Set it's class to textLayer which have required CSS styles\n textLayerElement.setAttribute(\"class\", \"textLayer\")\n frameDoc.body.appendChild(textLayerElement)\n\n const canvasScale = canvas.clientWidth / viewportWidth\n\n textLayerElement.style.top = `${canvas.offsetTop}px`\n textLayerElement.style.left = `${canvas.offsetLeft}px`\n textLayerElement.style.height = canvas.style.height\n textLayerElement.style.width = canvas.style.width\n\n removeCSS(frameElement, \"pdf-scale-scale\")\n injectCSS(\n frameElement,\n \"pdf-scale-scale\",\n `:root { --scale-factor: ${canvasScale}; }`,\n )\n\n if (this.textLayer) {\n this.textLayer.cancel()\n }\n\n this.textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pdfPage.streamTextContent(),\n viewport,\n })\n\n return from(this.textLayer.render())\n }),\n map(() => undefined),\n catchError((e) => {\n if (!(e instanceof RenderingCancelledException)) console.error(e)\n\n return of(undefined)\n }),\n finalize(() => {\n this.renderTask = undefined\n }),\n )\n }\n\n /**\n * @important\n * We should keep the same node structure to preserve CFI integrity.\n */\n onRenderHeadless() {\n return this.getPageProxy().pipe(\n switchMap((pageProxy) => {\n const headlessDocument = document.implementation.createHTMLDocument()\n const textLayerElement = headlessDocument.createElement(\"div\")\n\n headlessDocument.body.appendChild(textLayerElement)\n\n const textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pageProxy.streamTextContent(),\n viewport: pageProxy.getViewport({ scale: 1 }),\n })\n\n return from(textLayer.render()).pipe(map(() => headlessDocument))\n }),\n )\n }\n\n getDocumentFrame() {\n return this.getFrameElement()\n }\n}\n","import type { Archive } from \"@prose-reader/streamer\"\nimport * as pdfjsLib from \"pdfjs-dist\"\n\ntype PdfJsArchive = Archive & {\n _symbol: symbol\n proxyDocument: pdfjsLib.PDFDocumentProxy\n}\n\nconst PDF_SYMBOL = Symbol(`pdfjs`)\n\nexport const isPdfJsArchive = (archive: Archive): archive is PdfJsArchive =>\n \"_symbol\" in archive && archive._symbol === PDF_SYMBOL\n\n/**\n * @important\n * Make sure the urls are on the same origin or the cors header is set otherwise\n * the resource cannot be consumed as it is on the web.\n */\nexport const createArchiveFromPdf = async (\n file: Blob,\n filename: string,\n): Promise<Archive> => {\n const loadingTask = pdfjsLib.getDocument(await file.arrayBuffer())\n\n const pdf = await loadingTask.promise\n\n const pages = Array.from({ length: pdf.numPages })\n\n const opfFileData = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?><package xmlns=\"http://www.idpf.org/2007/opf\" version=\"2.0\" unique-identifier=\"bookid\">\n <metadata>\n <meta property=\"rendition:layout\">pre-paginated</meta>\n </metadata>\n <manifest>\n ${pages.map((_, index) => `<item id=\"${index}\" href=\"${index}.pdf\" />`).join(`\\n`)}\n </manifest>\n <spine>\n ${pages.map((_, index) => `<itemref idref=\"${index}\" />`).join(`\\n`)}\n </spine>\n </package>\n `\n\n const opfFile: Archive[`files`][number] = {\n dir: false,\n basename: `content.opf`,\n uri: `content.opf`,\n size: 0,\n blob: async () => new Blob(),\n string: async () => opfFileData,\n }\n\n const archive = {\n filename,\n proxyDocument: pdf,\n _symbol: PDF_SYMBOL,\n files: [\n opfFile,\n ...pages.map((_, index) => ({\n dir: false,\n blob: async () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n basename: `${index}.pdf`,\n size: 0,\n string: () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n uri: `${index}.pdf`,\n })),\n ],\n close: () => {\n return pdf.cleanup()\n },\n } satisfies PdfJsArchive\n\n return archive as Archive\n}\n","import type { createReader, Reader } from \"@prose-reader/core\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport type { EnhancerOptions } from \"./types\"\nimport { from, map, mergeMap, of } from \"rxjs\"\nimport { isPdfJsArchive } from \"./createArchiveFromPdf\"\n\ntype CreateReader = typeof createReader\ntype CreateReaderOptions = Parameters<CreateReader>[0]\n\nexport const pdfEnhancer =\n <InheritOptions extends CreateReaderOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (options: InheritOptions & EnhancerOptions): InheritOutput => {\n const reader = next({\n ...options,\n /**\n * We have a special renderer for pdf so we need to inject it\n * for the relevant items. The enhancer could be configurable but for\n * the sake of simplicity we will assume that an item ending with .pdf should\n * be treated as a pdf document.\n *\n * The `getRenderer` hook should be non destructive, if we detect a renderer already\n * setup we should return it.\n */\n getRenderer(item) {\n const maybeFactory = options.getRenderer?.(item)\n\n if (!maybeFactory && item.href.endsWith(`.pdf`)) {\n return (params) =>\n new PdfRenderer(options.pdf.pdfjsViewerInlineCss, params)\n }\n\n return maybeFactory\n },\n getResource: (item) =>\n options.pdf.getArchiveForItem(item).pipe(\n mergeMap((archive) => {\n if (!archive) return of(undefined)\n\n if (!isPdfJsArchive(archive)) {\n console.warn(`You provided an invalid pdf archive`)\n\n return of(undefined)\n }\n\n // we account for opf file\n const fileIndex =\n archive.files.findIndex((file) => item.href.endsWith(file.uri)) -\n 1\n\n return from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(\n map((pageProxy) => ({\n custom: true as const,\n data: pageProxy,\n })),\n )\n }),\n ),\n })\n\n return reader\n }\n"],"names":[],"mappings":"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"}
@@ -43,7 +43,10 @@
43
43
  const pixelRatioScale = window.devicePixelRatio || 1;
44
44
  const { height: pageHeight, width: pageWidth } = context.getPageSize();
45
45
  const { width: viewportWidth, height: viewportHeight } = pageProxy.getViewport({ scale: 1 });
46
- const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight);
46
+ const pageScale = Math.max(
47
+ pageWidth / viewportWidth,
48
+ pageHeight / viewportHeight
49
+ );
47
50
  const viewport = pageProxy.getViewport({ scale: pageScale });
48
51
  const viewportRatio = viewport.width / viewport.height;
49
52
  const pageRatio = pageWidth / pageHeight;
@@ -52,8 +55,8 @@
52
55
  const canvasHeight = viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight;
53
56
  canvas.width = Math.floor(viewport.width * pixelRatioScale);
54
57
  canvas.height = Math.floor(viewport.height * pixelRatioScale);
55
- canvas.style.width = Math.floor(canvasWidth) + "px";
56
- canvas.style.height = Math.floor(canvasHeight) + "px";
58
+ canvas.style.width = `${Math.floor(canvasWidth)}px`;
59
+ canvas.style.height = `${Math.floor(canvasHeight)}px`;
57
60
  };
58
61
 
59
62
  class PdfRenderer extends core.DocumentRenderer {
@@ -165,25 +168,27 @@
165
168
  })
166
169
  );
167
170
  }
168
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
169
171
  onLayout({
170
172
  spreadPosition
171
173
  }) {
172
174
  const frameElement = this.getFrameElement();
173
175
  const canvas = this.getCanvas();
174
- if (!frameElement || !canvas) return rxjs.of(void 0);
176
+ if (!frameElement || !canvas) return rxjs.of(undefined);
175
177
  const { height: pageHeight, width: pageWidth } = this.context.getPageSize();
176
178
  layoutLayers(this.layers, this.context, spreadPosition);
177
179
  const context = canvas?.getContext("2d");
178
180
  const pixelRatioScale = window.devicePixelRatio || 1;
179
- if (!this.pageProxy || !context) return rxjs.of(void 0);
181
+ if (!this.pageProxy || !context) return rxjs.of(undefined);
180
182
  if (this.renderTask) {
181
183
  this.renderTask.cancel();
182
- this.renderTask = void 0;
184
+ this.renderTask = undefined;
183
185
  }
184
186
  layoutCanvas(this.pageProxy, canvas, this.context);
185
187
  const { width: viewportWidth, height: viewportHeight } = this.pageProxy.getViewport({ scale: 1 });
186
- const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight);
188
+ const pageScale = Math.max(
189
+ pageWidth / viewportWidth,
190
+ pageHeight / viewportHeight
191
+ );
187
192
  const viewport = this.pageProxy.getViewport({ scale: pageScale });
188
193
  const transform = pixelRatioScale !== 1 ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0] : null;
189
194
  this.renderTask = this.pageProxy?.render({
@@ -195,21 +200,25 @@
195
200
  rxjs.map(() => {
196
201
  const frameDoc = frameElement?.contentDocument;
197
202
  if (!frameDoc || !frameElement) {
198
- return void 0;
203
+ return undefined;
199
204
  }
200
205
  frameDoc.body.innerHTML = ``;
201
206
  const pdfPage = this.pageProxy;
202
- if (!pdfPage) return void 0;
207
+ if (!pdfPage) return undefined;
203
208
  const textLayerElement = frameDoc.createElement(`div`);
204
209
  textLayerElement.setAttribute("class", "textLayer");
205
210
  frameDoc.body.appendChild(textLayerElement);
206
211
  const canvasScale = canvas.clientWidth / viewportWidth;
207
- textLayerElement.style.top = canvas.offsetTop + "px";
208
- textLayerElement.style.left = canvas.offsetLeft + "px";
212
+ textLayerElement.style.top = `${canvas.offsetTop}px`;
213
+ textLayerElement.style.left = `${canvas.offsetLeft}px`;
209
214
  textLayerElement.style.height = canvas.style.height;
210
215
  textLayerElement.style.width = canvas.style.width;
211
216
  core.removeCSS(frameElement, "pdf-scale-scale");
212
- core.injectCSS(frameElement, "pdf-scale-scale", `:root { --scale-factor: ${canvasScale}; }`);
217
+ core.injectCSS(
218
+ frameElement,
219
+ "pdf-scale-scale",
220
+ `:root { --scale-factor: ${canvasScale}; }`
221
+ );
213
222
  if (this.textLayer) {
214
223
  this.textLayer.cancel();
215
224
  }
@@ -220,13 +229,13 @@
220
229
  });
221
230
  return rxjs.from(this.textLayer.render());
222
231
  }),
223
- rxjs.map(() => void 0),
232
+ rxjs.map(() => undefined),
224
233
  rxjs.catchError((e) => {
225
234
  if (!(e instanceof pdfjsLib.RenderingCancelledException)) console.error(e);
226
- return rxjs.of(void 0);
235
+ return rxjs.of(undefined);
227
236
  }),
228
237
  rxjs.finalize(() => {
229
- this.renderTask = void 0;
238
+ this.renderTask = undefined;
230
239
  })
231
240
  );
232
241
  }
@@ -256,7 +265,7 @@
256
265
 
257
266
  const PDF_SYMBOL = Symbol(`pdfjs`);
258
267
  const isPdfJsArchive = (archive) => "_symbol" in archive && archive._symbol === PDF_SYMBOL;
259
- const createArchiveFromPdf = async (file) => {
268
+ const createArchiveFromPdf = async (file, filename) => {
260
269
  const loadingTask = pdfjsLib__namespace.getDocument(await file.arrayBuffer());
261
270
  const pdf = await loadingTask.promise;
262
271
  const pages = Array.from({ length: pdf.numPages });
@@ -284,7 +293,7 @@
284
293
  string: async () => opfFileData
285
294
  };
286
295
  const archive = {
287
- filename: file.name,
296
+ filename,
288
297
  proxyDocument: pdf,
289
298
  _symbol: PDF_SYMBOL,
290
299
  files: [
@@ -330,10 +339,10 @@
330
339
  },
331
340
  getResource: (item) => options.pdf.getArchiveForItem(item).pipe(
332
341
  rxjs.mergeMap((archive) => {
333
- if (!archive) return rxjs.of(void 0);
342
+ if (!archive) return rxjs.of(undefined);
334
343
  if (!isPdfJsArchive(archive)) {
335
344
  console.warn(`You provided an invalid pdf archive`);
336
- return rxjs.of(void 0);
345
+ return rxjs.of(undefined);
337
346
  }
338
347
  const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri)) - 1;
339
348
  return rxjs.from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.cjs","sources":["../src/renderer/layout.ts","../src/renderer/PdfRenderer.ts","../src/createArchiveFromPdf.ts","../src/pdfEnhancer.ts"],"sourcesContent":["import { Reader } from \"@prose-reader/core\"\nimport { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutLayers = (\n layers: { element: HTMLElement }[],\n context: Reader[\"context\"],\n spreadPosition: `none` | `left` | `right`,\n) => {\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n\n layers.forEach(({ element }) => {\n element.style.width = `${pageWidth}px`\n element.style.height = `${pageHeight}px`\n\n if (spreadPosition === `right`) {\n element.style.justifyContent = `flex-start`\n } else if (spreadPosition === `left`) {\n element.style.justifyContent = `flex-end`\n } else {\n element.style.justifyContent = `center`\n }\n })\n}\n\nexport const layoutCanvas = (pageProxy: PDFPageProxy, canvas: HTMLCanvasElement, context: Reader[\"context\"]) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n const { width: viewportWidth, height: viewportHeight } = pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight)\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = pageProxy.getViewport({ scale: pageScale })\n\n // Then wedefine which axis should stretch or shrink to ratio\n const viewportRatio = viewport.width / viewport.height\n const pageRatio = pageWidth / pageHeight\n const isWiderThanPage = viewportRatio > pageRatio\n const canvasWidth = isWiderThanPage ? pageWidth : pageHeight * viewportRatio\n const canvasHeight = viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight\n\n canvas.width = Math.floor(viewport.width * pixelRatioScale)\n canvas.height = Math.floor(viewport.height * pixelRatioScale)\n canvas.style.width = Math.floor(canvasWidth) + \"px\"\n canvas.style.height = Math.floor(canvasHeight) + \"px\"\n}\n","import { catchError, EMPTY, finalize, from, map, Observable, of, switchMap, tap } from \"rxjs\"\nimport { PDFPageProxy, RenderingCancelledException, RenderTask, TextLayer } from \"pdfjs-dist\"\nimport { DocumentRenderer, injectCSS, removeCSS, waitForFrameLoad, waitForFrameReady, waitForSwitch } from \"@prose-reader/core\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutLayers } from \"./layout\"\n\nexport class PdfRenderer extends DocumentRenderer {\n private pageProxy: PDFPageProxy | undefined\n private renderTask: RenderTask | undefined\n private textLayer: TextLayer | undefined\n\n constructor(\n private pdfViewerStyle: string,\n params: ConstructorParameters<typeof DocumentRenderer>[0],\n ) {\n super(params)\n }\n\n private getCanvas() {\n const element = this.layers[0]?.element.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.layers[1]?.element.children[0]\n\n if (!(frame instanceof HTMLIFrameElement)) return\n\n return frame\n }\n\n private getPageProxy() {\n if (this.pageProxy) return of(this.pageProxy)\n\n return from(this.resourcesHandler.fetchResource()).pipe(\n switchMap((resource) => {\n if (!(\"custom\" in resource)) return EMPTY\n\n this.pageProxy = resource.data as PDFPageProxy\n\n return of(this.pageProxy)\n }),\n )\n }\n\n onUnload(): Observable<unknown> {\n this.layers.forEach(({ element }) => {\n element.remove()\n })\n\n this.layers = []\n\n if (this.renderTask) {\n this.renderTask.cancel()\n }\n\n this.textLayer?.cancel()\n this.pageProxy?.cleanup()\n\n return EMPTY\n }\n\n onCreateDocument(): Observable<unknown> {\n const frameElement = document.createElement(`iframe`)\n frameElement.style.cssText = `\n overflow: hidden;\n height: 100%;\n width: 100%;\n `\n\n frameElement.setAttribute(\"tabIndex\", \"0\")\n frameElement.setAttribute(\"frameBorder\", \"0\")\n frameElement.setAttribute(`src`, \"about:blank\")\n\n const frameContainer = this.containerElement.ownerDocument.createElement(\"div\")\n frameContainer.style.cssText = `\n mix-blend-mode: multiply;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n `\n\n /**\n * The canvas is never attached to the DOM and will be used for offscreen rendering\n * then copied into the frame.\n */\n const canvas = this.containerElement.ownerDocument.createElement(\"canvas\")\n const canvasContainer = this.containerElement.ownerDocument.createElement(\"div\")\n canvasContainer.style.cssText = `\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: clip;\n `\n\n frameContainer.appendChild(frameElement)\n canvasContainer.appendChild(canvas)\n\n this.layers = [\n {\n element: canvasContainer,\n },\n {\n element: frameContainer,\n },\n ]\n\n return EMPTY\n }\n\n onLoadDocument(): Observable<unknown> {\n return this.getPageProxy().pipe(\n switchMap(() => {\n const frameElement = this.getFrameElement()\n\n if (!frameElement) return EMPTY\n\n return of(frameElement).pipe(\n waitForSwitch(this.context.bridgeEvent.viewportFree$),\n tap(() => {\n this.layers.forEach(({ element }) => {\n this.containerElement.appendChild(element)\n })\n }),\n waitForFrameLoad,\n tap(() => {\n injectCSS(frameElement, \"pdfjs-viewer-style\", this.pdfViewerStyle)\n injectCSS(frameElement, \"enhancer-pdf-style\", pdfFrameStyle)\n\n const body = frameElement?.contentDocument?.body\n\n if (body) {\n const canvas = body.ownerDocument.createElement(`canvas`)\n\n body.appendChild(canvas)\n }\n }),\n waitForFrameReady,\n )\n }),\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLayout({\n spreadPosition,\n }: {\n minPageSpread: number\n blankPagePosition: `before` | `after` | `none`\n spreadPosition: `none` | `left` | `right`\n }) {\n const frameElement = this.getFrameElement()\n const canvas = this.getCanvas()\n\n if (!frameElement || !canvas) return of(undefined)\n\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = this.context.getPageSize()\n\n layoutLayers(this.layers, this.context, spreadPosition)\n\n const context = canvas?.getContext(\"2d\")\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n\n if (!this.pageProxy || !context) return of(undefined)\n\n if (this.renderTask) {\n this.renderTask.cancel()\n this.renderTask = undefined\n }\n\n layoutCanvas(this.pageProxy, canvas, this.context)\n\n const { width: viewportWidth, height: viewportHeight } = this.pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(pageWidth / viewportWidth, pageHeight / viewportHeight)\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = this.pageProxy.getViewport({ scale: pageScale })\n\n const transform = pixelRatioScale !== 1 ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0] : null\n\n this.renderTask = this.pageProxy?.render({\n ...(transform && { transform }),\n canvasContext: context,\n viewport,\n })\n\n return from(this.renderTask?.promise).pipe(\n map(() => {\n const frameDoc = frameElement?.contentDocument\n\n if (!frameDoc || !frameElement) {\n return undefined\n }\n\n frameDoc.body.innerHTML = ``\n\n // const frameCanvas = copyCanvasToFrame(canvas, frameDoc)\n const pdfPage = this.pageProxy\n\n if (!pdfPage) return undefined\n\n const textLayerElement = frameDoc.createElement(`div`)\n // Set it's class to textLayer which have required CSS styles\n textLayerElement.setAttribute(\"class\", \"textLayer\")\n frameDoc.body.appendChild(textLayerElement)\n\n const canvasScale = canvas.clientWidth / viewportWidth\n\n textLayerElement.style.top = canvas.offsetTop + \"px\"\n textLayerElement.style.left = canvas.offsetLeft + \"px\"\n textLayerElement.style.height = canvas.style.height\n textLayerElement.style.width = canvas.style.width\n\n removeCSS(frameElement, \"pdf-scale-scale\")\n injectCSS(frameElement, \"pdf-scale-scale\", `:root { --scale-factor: ${canvasScale}; }`)\n\n if (this.textLayer) {\n this.textLayer.cancel()\n }\n\n this.textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pdfPage.streamTextContent(),\n viewport,\n })\n\n return from(this.textLayer.render())\n }),\n map(() => undefined),\n catchError((e) => {\n if (!(e instanceof RenderingCancelledException)) console.error(e)\n\n return of(undefined)\n }),\n finalize(() => {\n this.renderTask = undefined\n }),\n )\n }\n\n /**\n * @important\n * We should keep the same node structure to preserve CFI integrity.\n */\n onRenderHeadless() {\n return this.getPageProxy().pipe(\n switchMap((pageProxy) => {\n const headlessDocument = document.implementation.createHTMLDocument()\n const textLayerElement = headlessDocument.createElement(\"div\")\n\n headlessDocument.body.appendChild(textLayerElement)\n\n const textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pageProxy.streamTextContent(),\n viewport: pageProxy.getViewport({ scale: 1 }),\n })\n\n return from(textLayer.render()).pipe(map(() => headlessDocument))\n }),\n )\n }\n\n getDocumentFrame() {\n return this.getFrameElement()\n }\n}\n","import { Archive } from \"@prose-reader/streamer\"\nimport * as pdfjsLib from \"pdfjs-dist\"\n\ntype PdfJsArchive = Archive & {\n _symbol: symbol\n proxyDocument: pdfjsLib.PDFDocumentProxy\n}\n\nconst PDF_SYMBOL = Symbol(`pdfjs`)\n\nexport const isPdfJsArchive = (archive: Archive): archive is PdfJsArchive =>\n \"_symbol\" in archive && archive._symbol === PDF_SYMBOL\n\n/**\n * @important\n * Make sure the urls are on the same origin or the cors header is set otherwise\n * the resource cannot be consumed as it is on the web.\n */\nexport const createArchiveFromPdf = async (file: Blob): Promise<Archive> => {\n const loadingTask = pdfjsLib.getDocument(await file.arrayBuffer())\n\n const pdf = await loadingTask.promise\n\n const pages = Array.from({ length: pdf.numPages })\n\n const opfFileData = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?><package xmlns=\"http://www.idpf.org/2007/opf\" version=\"2.0\" unique-identifier=\"bookid\">\n <metadata>\n <meta property=\"rendition:layout\">pre-paginated</meta>\n </metadata>\n <manifest>\n ${pages.map((_, index) => `<item id=\"${index}\" href=\"${index}.pdf\" />`).join(`\\n`)}\n </manifest>\n <spine>\n ${pages.map((_, index) => `<itemref idref=\"${index}\" />`).join(`\\n`)}\n </spine>\n </package>\n `\n\n const opfFile: Archive[`files`][number] = {\n dir: false,\n basename: `content.opf`,\n uri: `content.opf`,\n size: 0,\n blob: async () => new Blob(),\n string: async () => opfFileData,\n }\n\n const archive = {\n filename: file.name,\n proxyDocument: pdf,\n _symbol: PDF_SYMBOL,\n files: [\n opfFile,\n ...pages.map((_, index) => ({\n dir: false,\n blob: async () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n basename: `${index}.pdf`,\n size: 0,\n string: () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n uri: `${index}.pdf`,\n })),\n ],\n close: () => {\n return pdf.cleanup()\n },\n } satisfies PdfJsArchive\n\n return archive as Archive\n}\n","import { createReader, Reader } from \"@prose-reader/core\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport { EnhancerOptions } from \"./types\"\nimport { from, map, mergeMap, of } from \"rxjs\"\nimport { isPdfJsArchive } from \"./createArchiveFromPdf\"\n\ntype CreateReader = typeof createReader\ntype CreateReaderOptions = Parameters<CreateReader>[0]\n\nexport const pdfEnhancer =\n <InheritOptions extends CreateReaderOptions, InheritOutput extends Reader>(next: (options: InheritOptions) => InheritOutput) =>\n (options: InheritOptions & EnhancerOptions): InheritOutput => {\n const reader = next({\n ...options,\n /**\n * We have a special renderer for pdf so we need to inject it\n * for the relevant items. The enhancer could be configurable but for\n * the sake of simplicity we will assume that an item ending with .pdf should\n * be treated as a pdf document.\n *\n * The `getRenderer` hook should be non destructive, if we detect a renderer already\n * setup we should return it.\n */\n getRenderer(item) {\n const maybeFactory = options.getRenderer?.(item)\n\n if (!maybeFactory && item.href.endsWith(`.pdf`)) {\n return (params) => new PdfRenderer(options.pdf.pdfjsViewerInlineCss, params)\n }\n\n return maybeFactory\n },\n getResource: (item) =>\n options.pdf.getArchiveForItem(item).pipe(\n mergeMap((archive) => {\n if (!archive) return of(undefined)\n\n if (!isPdfJsArchive(archive)) {\n console.warn(`You provided an invalid pdf archive`)\n\n return of(undefined)\n }\n\n // we account for opf file\n const fileIndex = archive.files.findIndex((file) => item.href.endsWith(file.uri)) - 1\n\n return from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(\n map((pageProxy) => ({\n custom: true as const,\n data: pageProxy,\n })),\n )\n }),\n ),\n })\n\n return reader\n }\n"],"names":["DocumentRenderer","of","from","switchMap","EMPTY","waitForSwitch","tap","waitForFrameLoad","injectCSS","waitForFrameReady","map","removeCSS","TextLayer","catchError","RenderingCancelledException","finalize","pdfjsLib","mergeMap"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAGO,MAAM,YAAe,GAAA,CAC1B,MACA,EAAA,OAAA,EACA,cACG,KAAA;EAEH,EAAA,MAAM,EAAE,MAAQ,EAAA,UAAA,EAAY,OAAO,SAAU,EAAA,GAAI,QAAQ,WAAY,EAAA;EAErE,EAAA,MAAA,CAAO,OAAQ,CAAA,CAAC,EAAE,OAAA,EAAc,KAAA;EAC9B,IAAQ,OAAA,CAAA,KAAA,CAAM,KAAQ,GAAA,CAAA,EAAG,SAAS,CAAA,EAAA,CAAA;EAClC,IAAQ,OAAA,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,EAAG,UAAU,CAAA,EAAA,CAAA;EAEpC,IAAA,IAAI,mBAAmB,CAAS,KAAA,CAAA,EAAA;EAC9B,MAAA,OAAA,CAAQ,MAAM,cAAiB,GAAA,CAAA,UAAA,CAAA;EAAA,KACjC,MAAA,IAAW,mBAAmB,CAAQ,IAAA,CAAA,EAAA;EACpC,MAAA,OAAA,CAAQ,MAAM,cAAiB,GAAA,CAAA,QAAA,CAAA;EAAA,KAC1B,MAAA;EACL,MAAA,OAAA,CAAQ,MAAM,cAAiB,GAAA,CAAA,MAAA,CAAA;EAAA;EACjC,GACD,CAAA;EACH,CAAA;EAEO,MAAM,YAAe,GAAA,CAAC,SAAyB,EAAA,MAAA,EAA2B,OAA+B,KAAA;EAE9G,EAAM,MAAA,eAAA,GAAkB,OAAO,gBAAoB,IAAA,CAAA;EACnD,EAAA,MAAM,EAAE,MAAQ,EAAA,UAAA,EAAY,OAAO,SAAU,EAAA,GAAI,QAAQ,WAAY,EAAA;EACrE,EAAM,MAAA,EAAE,KAAO,EAAA,aAAA,EAAe,MAAQ,EAAA,cAAA,EAAmB,GAAA,SAAA,CAAU,WAAY,CAAA,EAAE,KAAO,EAAA,CAAA,EAAG,CAAA;EAC3F,EAAA,MAAM,YAAY,IAAK,CAAA,GAAA,CAAI,SAAY,GAAA,aAAA,EAAe,aAAa,cAAc,CAAA;EAGjF,EAAA,MAAM,WAAW,SAAU,CAAA,WAAA,CAAY,EAAE,KAAA,EAAO,WAAW,CAAA;EAG3D,EAAM,MAAA,aAAA,GAAgB,QAAS,CAAA,KAAA,GAAQ,QAAS,CAAA,MAAA;EAChD,EAAA,MAAM,YAAY,SAAY,GAAA,UAAA;EAC9B,EAAA,MAAM,kBAAkB,aAAgB,GAAA,SAAA;EACxC,EAAM,MAAA,WAAA,GAAc,eAAkB,GAAA,SAAA,GAAY,UAAa,GAAA,aAAA;EAC/D,EAAA,MAAM,YAAe,GAAA,aAAA,GAAgB,SAAY,GAAA,SAAA,GAAY,aAAgB,GAAA,UAAA;EAE7E,EAAA,MAAA,CAAO,KAAQ,GAAA,IAAA,CAAK,KAAM,CAAA,QAAA,CAAS,QAAQ,eAAe,CAAA;EAC1D,EAAA,MAAA,CAAO,MAAS,GAAA,IAAA,CAAK,KAAM,CAAA,QAAA,CAAS,SAAS,eAAe,CAAA;EAC5D,EAAA,MAAA,CAAO,KAAM,CAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,CAAM,WAAW,CAAI,GAAA,IAAA;EAC/C,EAAA,MAAA,CAAO,KAAM,CAAA,MAAA,GAAS,IAAK,CAAA,KAAA,CAAM,YAAY,CAAI,GAAA,IAAA;EACnD,CAAA;;ECxCO,MAAM,oBAAoBA,qBAAiB,CAAA;EAAA,EAKhD,WAAA,CACU,gBACR,MACA,EAAA;EACA,IAAA,KAAA,CAAM,MAAM,CAAA;EAHJ,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;EAAA;EAIV,EATQ,SAAA;EAAA,EACA,UAAA;EAAA,EACA,SAAA;EAAA,EASA,SAAY,GAAA;EAClB,IAAA,MAAM,UAAU,IAAK,CAAA,MAAA,CAAO,CAAC,CAAG,EAAA,OAAA,CAAQ,SAAS,CAAC,CAAA;EAElD,IAAI,IAAA,EAAE,mBAAmB,iBAAoB,CAAA,EAAA;EAE7C,IAAO,OAAA,OAAA;EAAA;EACT,EAEQ,eAAkB,GAAA;EACxB,IAAA,MAAM,QAAQ,IAAK,CAAA,MAAA,CAAO,CAAC,CAAG,EAAA,OAAA,CAAQ,SAAS,CAAC,CAAA;EAEhD,IAAI,IAAA,EAAE,iBAAiB,iBAAoB,CAAA,EAAA;EAE3C,IAAO,OAAA,KAAA;EAAA;EACT,EAEQ,YAAe,GAAA;EACrB,IAAA,IAAI,IAAK,CAAA,SAAA,EAAkB,OAAAC,OAAA,CAAG,KAAK,SAAS,CAAA;EAE5C,IAAA,OAAOC,SAAK,CAAA,IAAA,CAAK,gBAAiB,CAAA,aAAA,EAAe,CAAE,CAAA,IAAA;EAAA,MACjDC,cAAA,CAAU,CAAC,QAAa,KAAA;EACtB,QAAI,IAAA,EAAE,QAAY,IAAA,QAAA,CAAA,EAAkB,OAAAC,UAAA;EAEpC,QAAA,IAAA,CAAK,YAAY,QAAS,CAAA,IAAA;EAE1B,QAAO,OAAAH,OAAA,CAAG,KAAK,SAAS,CAAA;EAAA,OACzB;EAAA,KACH;EAAA;EACF,EAEA,QAAgC,GAAA;EAC9B,IAAA,IAAA,CAAK,MAAO,CAAA,OAAA,CAAQ,CAAC,EAAE,SAAc,KAAA;EACnC,MAAA,OAAA,CAAQ,MAAO,EAAA;EAAA,KAChB,CAAA;EAED,IAAA,IAAA,CAAK,SAAS,EAAC;EAEf,IAAA,IAAI,KAAK,UAAY,EAAA;EACnB,MAAA,IAAA,CAAK,WAAW,MAAO,EAAA;EAAA;EAGzB,IAAA,IAAA,CAAK,WAAW,MAAO,EAAA;EACvB,IAAA,IAAA,CAAK,WAAW,OAAQ,EAAA;EAExB,IAAO,OAAAG,UAAA;EAAA;EACT,EAEA,gBAAwC,GAAA;EACtC,IAAM,MAAA,YAAA,GAAe,QAAS,CAAA,aAAA,CAAc,CAAQ,MAAA,CAAA,CAAA;EACpD,IAAA,YAAA,CAAa,MAAM,OAAU,GAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;EAM7B,IAAa,YAAA,CAAA,YAAA,CAAa,YAAY,GAAG,CAAA;EACzC,IAAa,YAAA,CAAA,YAAA,CAAa,eAAe,GAAG,CAAA;EAC5C,IAAa,YAAA,CAAA,YAAA,CAAa,OAAO,aAAa,CAAA;EAE9C,IAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,gBAAiB,CAAA,aAAA,CAAc,cAAc,KAAK,CAAA;EAC9E,IAAA,cAAA,CAAe,MAAM,OAAU,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;EAc/B,IAAA,MAAM,MAAS,GAAA,IAAA,CAAK,gBAAiB,CAAA,aAAA,CAAc,cAAc,QAAQ,CAAA;EACzE,IAAA,MAAM,eAAkB,GAAA,IAAA,CAAK,gBAAiB,CAAA,aAAA,CAAc,cAAc,KAAK,CAAA;EAC/E,IAAA,eAAA,CAAgB,MAAM,OAAU,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;EAShC,IAAA,cAAA,CAAe,YAAY,YAAY,CAAA;EACvC,IAAA,eAAA,CAAgB,YAAY,MAAM,CAAA;EAElC,IAAA,IAAA,CAAK,MAAS,GAAA;EAAA,MACZ;EAAA,QACE,OAAS,EAAA;EAAA,OACX;EAAA,MACA;EAAA,QACE,OAAS,EAAA;EAAA;EACX,KACF;EAEA,IAAO,OAAAA,UAAA;EAAA;EACT,EAEA,cAAsC,GAAA;EACpC,IAAO,OAAA,IAAA,CAAK,cAAe,CAAA,IAAA;EAAA,MACzBD,eAAU,MAAM;EACd,QAAM,MAAA,YAAA,GAAe,KAAK,eAAgB,EAAA;EAE1C,QAAI,IAAA,CAAC,cAAqB,OAAAC,UAAA;EAE1B,QAAO,OAAAH,OAAA,CAAG,YAAY,CAAE,CAAA,IAAA;EAAA,UACtBI,kBAAc,CAAA,IAAA,CAAK,OAAQ,CAAA,WAAA,CAAY,aAAa,CAAA;EAAA,UACpDC,SAAI,MAAM;EACR,YAAA,IAAA,CAAK,MAAO,CAAA,OAAA,CAAQ,CAAC,EAAE,SAAc,KAAA;EACnC,cAAK,IAAA,CAAA,gBAAA,CAAiB,YAAY,OAAO,CAAA;EAAA,aAC1C,CAAA;EAAA,WACF,CAAA;EAAA,UACDC,qBAAA;EAAA,UACAD,SAAI,MAAM;EACR,YAAUE,cAAA,CAAA,YAAA,EAAc,oBAAsB,EAAA,IAAA,CAAK,cAAc,CAAA;EACjE,YAAUA,cAAA,CAAA,YAAA,EAAc,sBAAsB,aAAa,CAAA;EAE3D,YAAM,MAAA,IAAA,GAAO,cAAc,eAAiB,EAAA,IAAA;EAE5C,YAAA,IAAI,IAAM,EAAA;EACR,cAAA,MAAM,MAAS,GAAA,IAAA,CAAK,aAAc,CAAA,aAAA,CAAc,CAAQ,MAAA,CAAA,CAAA;EAExD,cAAA,IAAA,CAAK,YAAY,MAAM,CAAA;EAAA;EACzB,WACD,CAAA;EAAA,UACDC;EAAA,SACF;EAAA,OACD;EAAA,KACH;EAAA;EACF;EAAA,EAGA,QAAS,CAAA;EAAA,IACP;EAAA,GAKC,EAAA;EACD,IAAM,MAAA,YAAA,GAAe,KAAK,eAAgB,EAAA;EAC1C,IAAM,MAAA,MAAA,GAAS,KAAK,SAAU,EAAA;EAE9B,IAAA,IAAI,CAAC,YAAgB,IAAA,CAAC,MAAQ,EAAA,OAAOR,QAAG,KAAS,CAAA,CAAA;EAGjD,IAAM,MAAA,EAAE,QAAQ,UAAY,EAAA,KAAA,EAAO,WAAc,GAAA,IAAA,CAAK,QAAQ,WAAY,EAAA;EAE1E,IAAA,YAAA,CAAa,IAAK,CAAA,MAAA,EAAQ,IAAK,CAAA,OAAA,EAAS,cAAc,CAAA;EAEtD,IAAM,MAAA,OAAA,GAAU,MAAQ,EAAA,UAAA,CAAW,IAAI,CAAA;EAEvC,IAAM,MAAA,eAAA,GAAkB,OAAO,gBAAoB,IAAA,CAAA;EAEnD,IAAA,IAAI,CAAC,IAAK,CAAA,SAAA,IAAa,CAAC,OAAS,EAAA,OAAOA,QAAG,KAAS,CAAA,CAAA;EAEpD,IAAA,IAAI,KAAK,UAAY,EAAA;EACnB,MAAA,IAAA,CAAK,WAAW,MAAO,EAAA;EACvB,MAAA,IAAA,CAAK,UAAa,GAAA,KAAA,CAAA;EAAA;EAGpB,IAAA,YAAA,CAAa,IAAK,CAAA,SAAA,EAAW,MAAQ,EAAA,IAAA,CAAK,OAAO,CAAA;EAEjD,IAAA,MAAM,EAAE,KAAA,EAAO,aAAe,EAAA,MAAA,EAAQ,cAAe,EAAA,GAAI,IAAK,CAAA,SAAA,CAAU,WAAY,CAAA,EAAE,KAAO,EAAA,CAAA,EAAG,CAAA;EAChG,IAAA,MAAM,YAAY,IAAK,CAAA,GAAA,CAAI,SAAY,GAAA,aAAA,EAAe,aAAa,cAAc,CAAA;EAGjF,IAAA,MAAM,WAAW,IAAK,CAAA,SAAA,CAAU,YAAY,EAAE,KAAA,EAAO,WAAW,CAAA;EAEhE,IAAM,MAAA,SAAA,GAAY,eAAoB,KAAA,CAAA,GAAI,CAAC,eAAA,EAAiB,GAAG,CAAG,EAAA,eAAA,EAAiB,CAAG,EAAA,CAAC,CAAI,GAAA,IAAA;EAE3F,IAAK,IAAA,CAAA,UAAA,GAAa,IAAK,CAAA,SAAA,EAAW,MAAO,CAAA;EAAA,MACvC,GAAI,SAAa,IAAA,EAAE,SAAU,EAAA;EAAA,MAC7B,aAAe,EAAA,OAAA;EAAA,MACf;EAAA,KACD,CAAA;EAED,IAAA,OAAOC,SAAK,CAAA,IAAA,CAAK,UAAY,EAAA,OAAO,CAAE,CAAA,IAAA;EAAA,MACpCQ,SAAI,MAAM;EACR,QAAA,MAAM,WAAW,YAAc,EAAA,eAAA;EAE/B,QAAI,IAAA,CAAC,QAAY,IAAA,CAAC,YAAc,EAAA;EAC9B,UAAO,OAAA,KAAA,CAAA;EAAA;EAGT,QAAA,QAAA,CAAS,KAAK,SAAY,GAAA,CAAA,CAAA;EAG1B,QAAA,MAAM,UAAU,IAAK,CAAA,SAAA;EAErB,QAAI,IAAA,CAAC,SAAgB,OAAA,KAAA,CAAA;EAErB,QAAM,MAAA,gBAAA,GAAmB,QAAS,CAAA,aAAA,CAAc,CAAK,GAAA,CAAA,CAAA;EAErD,QAAiB,gBAAA,CAAA,YAAA,CAAa,SAAS,WAAW,CAAA;EAClD,QAAS,QAAA,CAAA,IAAA,CAAK,YAAY,gBAAgB,CAAA;EAE1C,QAAM,MAAA,WAAA,GAAc,OAAO,WAAc,GAAA,aAAA;EAEzC,QAAiB,gBAAA,CAAA,KAAA,CAAM,GAAM,GAAA,MAAA,CAAO,SAAY,GAAA,IAAA;EAChD,QAAiB,gBAAA,CAAA,KAAA,CAAM,IAAO,GAAA,MAAA,CAAO,UAAa,GAAA,IAAA;EAClD,QAAiB,gBAAA,CAAA,KAAA,CAAM,MAAS,GAAA,MAAA,CAAO,KAAM,CAAA,MAAA;EAC7C,QAAiB,gBAAA,CAAA,KAAA,CAAM,KAAQ,GAAA,MAAA,CAAO,KAAM,CAAA,KAAA;EAE5C,QAAAC,cAAA,CAAU,cAAc,iBAAiB,CAAA;EACzC,QAAAH,cAAA,CAAU,YAAc,EAAA,iBAAA,EAAmB,CAA2B,wBAAA,EAAA,WAAW,CAAK,GAAA,CAAA,CAAA;EAEtF,QAAA,IAAI,KAAK,SAAW,EAAA;EAClB,UAAA,IAAA,CAAK,UAAU,MAAO,EAAA;EAAA;EAGxB,QAAK,IAAA,CAAA,SAAA,GAAY,IAAII,kBAAU,CAAA;EAAA,UAC7B,SAAW,EAAA,gBAAA;EAAA,UACX,iBAAA,EAAmB,QAAQ,iBAAkB,EAAA;EAAA,UAC7C;EAAA,SACD,CAAA;EAED,QAAA,OAAOV,SAAK,CAAA,IAAA,CAAK,SAAU,CAAA,MAAA,EAAQ,CAAA;EAAA,OACpC,CAAA;EAAA,MACDQ,QAAA,CAAI,MAAM,KAAS,CAAA,CAAA;EAAA,MACnBG,eAAA,CAAW,CAAC,CAAM,KAAA;EAChB,QAAA,IAAI,EAAE,CAAA,YAAaC,oCAA8B,CAAA,EAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;EAEhE,QAAA,OAAOb,QAAG,KAAS,CAAA,CAAA;EAAA,OACpB,CAAA;EAAA,MACDc,cAAS,MAAM;EACb,QAAA,IAAA,CAAK,UAAa,GAAA,KAAA,CAAA;EAAA,OACnB;EAAA,KACH;EAAA;EACF;EAAA;EAAA;EAAA;EAAA,EAMA,gBAAmB,GAAA;EACjB,IAAO,OAAA,IAAA,CAAK,cAAe,CAAA,IAAA;EAAA,MACzBZ,cAAA,CAAU,CAAC,SAAc,KAAA;EACvB,QAAM,MAAA,gBAAA,GAAmB,QAAS,CAAA,cAAA,CAAe,kBAAmB,EAAA;EACpE,QAAM,MAAA,gBAAA,GAAmB,gBAAiB,CAAA,aAAA,CAAc,KAAK,CAAA;EAE7D,QAAiB,gBAAA,CAAA,IAAA,CAAK,YAAY,gBAAgB,CAAA;EAElD,QAAM,MAAA,SAAA,GAAY,IAAIS,kBAAU,CAAA;EAAA,UAC9B,SAAW,EAAA,gBAAA;EAAA,UACX,iBAAA,EAAmB,UAAU,iBAAkB,EAAA;EAAA,UAC/C,UAAU,SAAU,CAAA,WAAA,CAAY,EAAE,KAAA,EAAO,GAAG;EAAA,SAC7C,CAAA;EAED,QAAO,OAAAV,SAAA,CAAK,UAAU,MAAO,EAAC,EAAE,IAAK,CAAAQ,QAAA,CAAI,MAAM,gBAAgB,CAAC,CAAA;EAAA,OACjE;EAAA,KACH;EAAA;EACF,EAEA,gBAAmB,GAAA;EACjB,IAAA,OAAO,KAAK,eAAgB,EAAA;EAAA;EAEhC;;EC5QA,MAAM,UAAA,GAAa,OAAO,CAAO,KAAA,CAAA,CAAA;AAE1B,QAAM,iBAAiB,CAAC,OAAA,KAC7B,SAAa,IAAA,OAAA,IAAW,QAAQ,OAAY,KAAA;AAOjC,QAAA,oBAAA,GAAuB,OAAO,IAAiC,KAAA;EAC1E,EAAA,MAAM,cAAcM,mBAAS,CAAA,WAAA,CAAY,MAAM,IAAA,CAAK,aAAa,CAAA;EAEjE,EAAM,MAAA,GAAA,GAAM,MAAM,WAAY,CAAA,OAAA;EAE9B,EAAA,MAAM,QAAQ,KAAM,CAAA,IAAA,CAAK,EAAE,MAAQ,EAAA,GAAA,CAAI,UAAU,CAAA;EAEjD,EAAA,MAAM,WAAc,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMZ,EAAA,KAAA,CAAM,GAAI,CAAA,CAAC,CAAG,EAAA,KAAA,KAAU,CAAa,UAAA,EAAA,KAAK,CAAW,QAAA,EAAA,KAAK,CAAU,QAAA,CAAA,CAAA,CAAE,IAAK,CAAA;AAAA,CAAI,CAAC;AAAA;AAAA;AAAA,QAGhF,EAAA,KAAA,CAAM,IAAI,CAAC,CAAA,EAAG,UAAU,CAAmB,gBAAA,EAAA,KAAK,CAAM,IAAA,CAAA,CAAA,CAAE,IAAK,CAAA;AAAA,CAAI,CAAC;AAAA;AAAA;AAAA,EAAA,CAAA;EAK1E,EAAA,MAAM,OAAoC,GAAA;EAAA,IACxC,GAAK,EAAA,KAAA;EAAA,IACL,QAAU,EAAA,CAAA,WAAA,CAAA;EAAA,IACV,GAAK,EAAA,CAAA,WAAA,CAAA;EAAA,IACL,IAAM,EAAA,CAAA;EAAA,IACN,IAAA,EAAM,YAAY,IAAI,IAAK,EAAA;EAAA,IAC3B,QAAQ,YAAY;EAAA,GACtB;EAEA,EAAA,MAAM,OAAU,GAAA;EAAA,IACd,UAAU,IAAK,CAAA,IAAA;EAAA,IACf,aAAe,EAAA,GAAA;EAAA,IACf,OAAS,EAAA,UAAA;EAAA,IACT,KAAO,EAAA;EAAA,MACL,OAAA;EAAA,MACA,GAAG,KAAA,CAAM,GAAI,CAAA,CAAC,GAAG,KAAW,MAAA;EAAA,QAC1B,GAAK,EAAA,KAAA;EAAA,QACL,MAAM,YAAY;EAChB,UAAM,MAAA,IAAI,MAAM,6BAA6B,CAAA;EAAA,SAC/C;EAAA,QACA,QAAA,EAAU,GAAG,KAAK,CAAA,IAAA,CAAA;EAAA,QAClB,IAAM,EAAA,CAAA;EAAA,QACN,QAAQ,MAAM;EACZ,UAAM,MAAA,IAAI,MAAM,6BAA6B,CAAA;EAAA,SAC/C;EAAA,QACA,GAAA,EAAK,GAAG,KAAK,CAAA,IAAA;EAAA,OACb,CAAA;EAAA,KACJ;EAAA,IACA,OAAO,MAAM;EACX,MAAA,OAAO,IAAI,OAAQ,EAAA;EAAA;EACrB,GACF;EAEA,EAAO,OAAA,OAAA;EACT;;AChEO,QAAM,WACX,GAAA,CAA2E,IAC3E,KAAA,CAAC,OAA6D,KAAA;EAC5D,EAAA,MAAM,SAAS,IAAK,CAAA;EAAA,IAClB,GAAG,OAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAUH,YAAY,IAAM,EAAA;EAChB,MAAM,MAAA,YAAA,GAAe,OAAQ,CAAA,WAAA,GAAc,IAAI,CAAA;EAE/C,MAAA,IAAI,CAAC,YAAgB,IAAA,IAAA,CAAK,IAAK,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA;EAC/C,QAAA,OAAO,CAAC,MAAW,KAAA,IAAI,YAAY,OAAQ,CAAA,GAAA,CAAI,sBAAsB,MAAM,CAAA;EAAA;EAG7E,MAAO,OAAA,YAAA;EAAA,KACT;EAAA,IACA,aAAa,CAAC,IAAA,KACZ,QAAQ,GAAI,CAAA,iBAAA,CAAkB,IAAI,CAAE,CAAA,IAAA;EAAA,MAClCC,aAAA,CAAS,CAAC,OAAY,KAAA;EACpB,QAAA,IAAI,CAAC,OAAA,EAAgB,OAAAhB,OAAA,CAAG,KAAS,CAAA,CAAA;EAEjC,QAAI,IAAA,CAAC,cAAe,CAAA,OAAO,CAAG,EAAA;EAC5B,UAAA,OAAA,CAAQ,KAAK,CAAqC,mCAAA,CAAA,CAAA;EAElD,UAAA,OAAOA,QAAG,KAAS,CAAA,CAAA;EAAA;EAIrB,QAAA,MAAM,SAAY,GAAA,OAAA,CAAQ,KAAM,CAAA,SAAA,CAAU,CAAC,IAAA,KAAS,IAAK,CAAA,IAAA,CAAK,QAAS,CAAA,IAAA,CAAK,GAAG,CAAC,CAAI,GAAA,CAAA;EAEpF,QAAA,OAAOC,UAAK,OAAQ,CAAA,aAAA,CAAc,QAAQ,SAAY,GAAA,CAAC,CAAC,CAAE,CAAA,IAAA;EAAA,UACxDQ,QAAA,CAAI,CAAC,SAAe,MAAA;EAAA,YAClB,MAAQ,EAAA,IAAA;EAAA,YACR,IAAM,EAAA;EAAA,WACN,CAAA;EAAA,SACJ;EAAA,OACD;EAAA;EACH,GACH,CAAA;EAED,EAAO,OAAA,MAAA;EACT;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.umd.cjs","sources":["../src/renderer/layout.ts","../src/renderer/PdfRenderer.ts","../src/createArchiveFromPdf.ts","../src/pdfEnhancer.ts"],"sourcesContent":["import type { Reader } from \"@prose-reader/core\"\nimport type { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutLayers = (\n layers: { element: HTMLElement }[],\n context: Reader[\"context\"],\n spreadPosition: `none` | `left` | `right`,\n) => {\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n\n layers.forEach(({ element }) => {\n element.style.width = `${pageWidth}px`\n element.style.height = `${pageHeight}px`\n\n if (spreadPosition === `right`) {\n element.style.justifyContent = `flex-start`\n } else if (spreadPosition === `left`) {\n element.style.justifyContent = `flex-end`\n } else {\n element.style.justifyContent = `center`\n }\n })\n}\n\nexport const layoutCanvas = (\n pageProxy: PDFPageProxy,\n canvas: HTMLCanvasElement,\n context: Reader[\"context\"],\n) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = context.getPageSize()\n const { width: viewportWidth, height: viewportHeight } =\n pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = pageProxy.getViewport({ scale: pageScale })\n\n // Then wedefine which axis should stretch or shrink to ratio\n const viewportRatio = viewport.width / viewport.height\n const pageRatio = pageWidth / pageHeight\n const isWiderThanPage = viewportRatio > pageRatio\n const canvasWidth = isWiderThanPage ? pageWidth : pageHeight * viewportRatio\n const canvasHeight =\n viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight\n\n canvas.width = Math.floor(viewport.width * pixelRatioScale)\n canvas.height = Math.floor(viewport.height * pixelRatioScale)\n canvas.style.width = `${Math.floor(canvasWidth)}px`\n canvas.style.height = `${Math.floor(canvasHeight)}px`\n}\n","import {\n catchError,\n EMPTY,\n finalize,\n from,\n map,\n type Observable,\n of,\n switchMap,\n tap,\n} from \"rxjs\"\nimport {\n type PDFPageProxy,\n RenderingCancelledException,\n type RenderTask,\n TextLayer,\n} from \"pdfjs-dist\"\nimport {\n DocumentRenderer,\n injectCSS,\n removeCSS,\n waitForFrameLoad,\n waitForFrameReady,\n waitForSwitch,\n} from \"@prose-reader/core\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutLayers } from \"./layout\"\n\nexport class PdfRenderer extends DocumentRenderer {\n private pageProxy: PDFPageProxy | undefined\n private renderTask: RenderTask | undefined\n private textLayer: TextLayer | undefined\n\n constructor(\n private pdfViewerStyle: string,\n params: ConstructorParameters<typeof DocumentRenderer>[0],\n ) {\n super(params)\n }\n\n private getCanvas() {\n const element = this.layers[0]?.element.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.layers[1]?.element.children[0]\n\n if (!(frame instanceof HTMLIFrameElement)) return\n\n return frame\n }\n\n private getPageProxy() {\n if (this.pageProxy) return of(this.pageProxy)\n\n return from(this.resourcesHandler.fetchResource()).pipe(\n switchMap((resource) => {\n if (!(\"custom\" in resource)) return EMPTY\n\n this.pageProxy = resource.data as PDFPageProxy\n\n return of(this.pageProxy)\n }),\n )\n }\n\n onUnload(): Observable<unknown> {\n this.layers.forEach(({ element }) => {\n element.remove()\n })\n\n this.layers = []\n\n if (this.renderTask) {\n this.renderTask.cancel()\n }\n\n this.textLayer?.cancel()\n this.pageProxy?.cleanup()\n\n return EMPTY\n }\n\n onCreateDocument(): Observable<unknown> {\n const frameElement = document.createElement(`iframe`)\n frameElement.style.cssText = `\n overflow: hidden;\n height: 100%;\n width: 100%;\n `\n\n frameElement.setAttribute(\"tabIndex\", \"0\")\n frameElement.setAttribute(\"frameBorder\", \"0\")\n frameElement.setAttribute(`src`, \"about:blank\")\n\n const frameContainer =\n this.containerElement.ownerDocument.createElement(\"div\")\n frameContainer.style.cssText = `\n mix-blend-mode: multiply;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n `\n\n /**\n * The canvas is never attached to the DOM and will be used for offscreen rendering\n * then copied into the frame.\n */\n const canvas = this.containerElement.ownerDocument.createElement(\"canvas\")\n const canvasContainer =\n this.containerElement.ownerDocument.createElement(\"div\")\n canvasContainer.style.cssText = `\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: clip;\n `\n\n frameContainer.appendChild(frameElement)\n canvasContainer.appendChild(canvas)\n\n this.layers = [\n {\n element: canvasContainer,\n },\n {\n element: frameContainer,\n },\n ]\n\n return EMPTY\n }\n\n onLoadDocument(): Observable<unknown> {\n return this.getPageProxy().pipe(\n switchMap(() => {\n const frameElement = this.getFrameElement()\n\n if (!frameElement) return EMPTY\n\n return of(frameElement).pipe(\n waitForSwitch(this.context.bridgeEvent.viewportFree$),\n tap(() => {\n this.layers.forEach(({ element }) => {\n this.containerElement.appendChild(element)\n })\n }),\n waitForFrameLoad,\n tap(() => {\n injectCSS(frameElement, \"pdfjs-viewer-style\", this.pdfViewerStyle)\n injectCSS(frameElement, \"enhancer-pdf-style\", pdfFrameStyle)\n\n const body = frameElement?.contentDocument?.body\n\n if (body) {\n const canvas = body.ownerDocument.createElement(`canvas`)\n\n body.appendChild(canvas)\n }\n }),\n waitForFrameReady,\n )\n }),\n )\n }\n\n onLayout({\n spreadPosition,\n }: {\n minPageSpread: number\n blankPagePosition: `before` | `after` | `none`\n spreadPosition: `none` | `left` | `right`\n }) {\n const frameElement = this.getFrameElement()\n const canvas = this.getCanvas()\n\n if (!frameElement || !canvas) return of(undefined)\n\n // first we try to get the desired viewport for a confortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = this.context.getPageSize()\n\n layoutLayers(this.layers, this.context, spreadPosition)\n\n const context = canvas?.getContext(\"2d\")\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n\n if (!this.pageProxy || !context) return of(undefined)\n\n if (this.renderTask) {\n this.renderTask.cancel()\n this.renderTask = undefined\n }\n\n layoutCanvas(this.pageProxy, canvas, this.context)\n\n const { width: viewportWidth, height: viewportHeight } =\n this.pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = this.pageProxy.getViewport({ scale: pageScale })\n\n const transform =\n pixelRatioScale !== 1\n ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0]\n : null\n\n this.renderTask = this.pageProxy?.render({\n ...(transform && { transform }),\n canvasContext: context,\n viewport,\n })\n\n return from(this.renderTask?.promise).pipe(\n map(() => {\n const frameDoc = frameElement?.contentDocument\n\n if (!frameDoc || !frameElement) {\n return undefined\n }\n\n frameDoc.body.innerHTML = ``\n\n // const frameCanvas = copyCanvasToFrame(canvas, frameDoc)\n const pdfPage = this.pageProxy\n\n if (!pdfPage) return undefined\n\n const textLayerElement = frameDoc.createElement(`div`)\n // Set it's class to textLayer which have required CSS styles\n textLayerElement.setAttribute(\"class\", \"textLayer\")\n frameDoc.body.appendChild(textLayerElement)\n\n const canvasScale = canvas.clientWidth / viewportWidth\n\n textLayerElement.style.top = `${canvas.offsetTop}px`\n textLayerElement.style.left = `${canvas.offsetLeft}px`\n textLayerElement.style.height = canvas.style.height\n textLayerElement.style.width = canvas.style.width\n\n removeCSS(frameElement, \"pdf-scale-scale\")\n injectCSS(\n frameElement,\n \"pdf-scale-scale\",\n `:root { --scale-factor: ${canvasScale}; }`,\n )\n\n if (this.textLayer) {\n this.textLayer.cancel()\n }\n\n this.textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pdfPage.streamTextContent(),\n viewport,\n })\n\n return from(this.textLayer.render())\n }),\n map(() => undefined),\n catchError((e) => {\n if (!(e instanceof RenderingCancelledException)) console.error(e)\n\n return of(undefined)\n }),\n finalize(() => {\n this.renderTask = undefined\n }),\n )\n }\n\n /**\n * @important\n * We should keep the same node structure to preserve CFI integrity.\n */\n onRenderHeadless() {\n return this.getPageProxy().pipe(\n switchMap((pageProxy) => {\n const headlessDocument = document.implementation.createHTMLDocument()\n const textLayerElement = headlessDocument.createElement(\"div\")\n\n headlessDocument.body.appendChild(textLayerElement)\n\n const textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pageProxy.streamTextContent(),\n viewport: pageProxy.getViewport({ scale: 1 }),\n })\n\n return from(textLayer.render()).pipe(map(() => headlessDocument))\n }),\n )\n }\n\n getDocumentFrame() {\n return this.getFrameElement()\n }\n}\n","import type { Archive } from \"@prose-reader/streamer\"\nimport * as pdfjsLib from \"pdfjs-dist\"\n\ntype PdfJsArchive = Archive & {\n _symbol: symbol\n proxyDocument: pdfjsLib.PDFDocumentProxy\n}\n\nconst PDF_SYMBOL = Symbol(`pdfjs`)\n\nexport const isPdfJsArchive = (archive: Archive): archive is PdfJsArchive =>\n \"_symbol\" in archive && archive._symbol === PDF_SYMBOL\n\n/**\n * @important\n * Make sure the urls are on the same origin or the cors header is set otherwise\n * the resource cannot be consumed as it is on the web.\n */\nexport const createArchiveFromPdf = async (\n file: Blob,\n filename: string,\n): Promise<Archive> => {\n const loadingTask = pdfjsLib.getDocument(await file.arrayBuffer())\n\n const pdf = await loadingTask.promise\n\n const pages = Array.from({ length: pdf.numPages })\n\n const opfFileData = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?><package xmlns=\"http://www.idpf.org/2007/opf\" version=\"2.0\" unique-identifier=\"bookid\">\n <metadata>\n <meta property=\"rendition:layout\">pre-paginated</meta>\n </metadata>\n <manifest>\n ${pages.map((_, index) => `<item id=\"${index}\" href=\"${index}.pdf\" />`).join(`\\n`)}\n </manifest>\n <spine>\n ${pages.map((_, index) => `<itemref idref=\"${index}\" />`).join(`\\n`)}\n </spine>\n </package>\n `\n\n const opfFile: Archive[`files`][number] = {\n dir: false,\n basename: `content.opf`,\n uri: `content.opf`,\n size: 0,\n blob: async () => new Blob(),\n string: async () => opfFileData,\n }\n\n const archive = {\n filename,\n proxyDocument: pdf,\n _symbol: PDF_SYMBOL,\n files: [\n opfFile,\n ...pages.map((_, index) => ({\n dir: false,\n blob: async () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n basename: `${index}.pdf`,\n size: 0,\n string: () => {\n throw new Error(\"Unable to get blob from pdf\")\n },\n uri: `${index}.pdf`,\n })),\n ],\n close: () => {\n return pdf.cleanup()\n },\n } satisfies PdfJsArchive\n\n return archive as Archive\n}\n","import type { createReader, Reader } from \"@prose-reader/core\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport type { EnhancerOptions } from \"./types\"\nimport { from, map, mergeMap, of } from \"rxjs\"\nimport { isPdfJsArchive } from \"./createArchiveFromPdf\"\n\ntype CreateReader = typeof createReader\ntype CreateReaderOptions = Parameters<CreateReader>[0]\n\nexport const pdfEnhancer =\n <InheritOptions extends CreateReaderOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (options: InheritOptions & EnhancerOptions): InheritOutput => {\n const reader = next({\n ...options,\n /**\n * We have a special renderer for pdf so we need to inject it\n * for the relevant items. The enhancer could be configurable but for\n * the sake of simplicity we will assume that an item ending with .pdf should\n * be treated as a pdf document.\n *\n * The `getRenderer` hook should be non destructive, if we detect a renderer already\n * setup we should return it.\n */\n getRenderer(item) {\n const maybeFactory = options.getRenderer?.(item)\n\n if (!maybeFactory && item.href.endsWith(`.pdf`)) {\n return (params) =>\n new PdfRenderer(options.pdf.pdfjsViewerInlineCss, params)\n }\n\n return maybeFactory\n },\n getResource: (item) =>\n options.pdf.getArchiveForItem(item).pipe(\n mergeMap((archive) => {\n if (!archive) return of(undefined)\n\n if (!isPdfJsArchive(archive)) {\n console.warn(`You provided an invalid pdf archive`)\n\n return of(undefined)\n }\n\n // we account for opf file\n const fileIndex =\n archive.files.findIndex((file) => item.href.endsWith(file.uri)) -\n 1\n\n return from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(\n map((pageProxy) => ({\n custom: true as const,\n data: pageProxy,\n })),\n )\n }),\n ),\n })\n\n return reader\n }\n"],"names":["DocumentRenderer","of","from","switchMap","EMPTY","waitForSwitch","tap","waitForFrameLoad","injectCSS","waitForFrameReady","map","removeCSS","TextLayer","catchError","RenderingCancelledException","finalize","pdfjsLib","mergeMap"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prose-reader/enhancer-pdf",
3
- "version": "1.164.0",
3
+ "version": "1.166.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.umd.cjs",
6
6
  "module": "./dist/index.js",
@@ -16,9 +16,7 @@
16
16
  },
17
17
  "scripts": {
18
18
  "start": "vite build --watch --mode development",
19
- "build": "tsc && vite build",
20
- "lint:read": "prettier --check . && eslint . --ext .ts,.tsx,.js,.jsx",
21
- "lint:write": "prettier --write . && eslint --fix . --ext .ts,.tsx,.js,.jsx"
19
+ "build": "tsc && vite build"
22
20
  },
23
21
  "devDependencies": {
24
22
  "pdfjs-dist": "^4.8.69"
@@ -28,5 +26,5 @@
28
26
  "pdfjs-dist": "^4.8.69",
29
27
  "rxjs": "*"
30
28
  },
31
- "gitHead": "6f037c838ab7ea03dcb34000c7896e496efd1782"
29
+ "gitHead": "949886f6d3d44e3b3034bf8d71bbb1abe7e76fb4"
32
30
  }