{"version":3,"file":"ngx-pdf-viewer.mjs","sources":["../../../projects/ngx-pdf-viewer/src/lib/core/config/viewer-config.ts","../../../projects/ngx-pdf-viewer/src/lib/core/models/viewer-error.model.ts","../../../projects/ngx-pdf-viewer/src/lib/core/models/viewer.model.ts","../../../projects/ngx-pdf-viewer/src/lib/core/utils/pdf-file-actions.ts","../../../projects/ngx-pdf-viewer/src/lib/core/constants/viewer-constants.ts","../../../projects/ngx-pdf-viewer/src/lib/core/utils/pdf-scale.ts","../../../projects/ngx-pdf-viewer/src/lib/core/utils/pdf-thumbnail.ts","../../../projects/ngx-pdf-viewer/src/lib/core/utils/pdf-document-params.ts","../../../projects/ngx-pdf-viewer/src/lib/core/utils/pdf-worker.ts","../../../projects/ngx-pdf-viewer/src/lib/core/utils/pdf-event-bus.ts","../../../projects/ngx-pdf-viewer/src/lib/viewer/services/viewer-bridge.service.ts","../../../projects/ngx-pdf-viewer/src/lib/viewer/services/viewer-facade.service.ts","../../../projects/ngx-pdf-viewer/src/lib/viewer/services/viewer-actions.service.ts","../../../projects/ngx-pdf-viewer/src/lib/viewer/services/viewer-lifecycle.service.ts","../../../projects/ngx-pdf-viewer/src/lib/viewer/services/viewer-scale.service.ts","../../../projects/ngx-pdf-viewer/src/lib/viewer/services/viewer-sync.service.ts","../../../projects/ngx-pdf-viewer/src/lib/viewer/services/viewer-pdfjs.service.ts","../../../projects/ngx-pdf-viewer/src/lib/core/utils/pdf-hand-tool.ts","../../../projects/ngx-pdf-viewer/src/lib/viewer/services/viewer-host.service.ts","../../../projects/ngx-pdf-viewer/src/lib/viewer/viewer-component.ts","../../../projects/ngx-pdf-viewer/src/lib/viewer/viewer-component.html","../../../projects/ngx-pdf-viewer/src/lib/index.ts","../../../projects/ngx-pdf-viewer/src/public-api.ts","../../../projects/ngx-pdf-viewer/src/ngx-pdf-viewer.ts"],"sourcesContent":["import { InjectionToken, type Provider } from '@angular/core';\nimport type { PdfViewerConfig } from '../models/viewer.model';\n\nexport const PDF_VIEWER_CONFIG = new InjectionToken<PdfViewerConfig>('PDF_VIEWER_CONFIG', {\n  providedIn: 'root',\n  factory: () => ({ enableHandTool: false }),\n});\n\n/**\n * Provides PDF viewer configuration. Use in app config or component providers.\n *\n * Every field is optional: pdf.js and all of its runtime resources resolve\n * against a pinned CDN by default, so this is only needed to self-host, point\n * at a different CDN, or change viewer behaviour.\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n *   providers: [\n *     providePdfViewerConfig({\n *       cdnBaseUrl: '/assets/pdfjs/', // self-hosted mirror of the pdfjs-dist package\n *       enableHandTool: true,\n *     }),\n *   ],\n * };\n * ```\n *\n * @param config - Configuration overrides\n * @returns Provider for {@link PDF_VIEWER_CONFIG}\n */\nexport function providePdfViewerConfig(config: PdfViewerConfig): Provider {\n  return { provide: PDF_VIEWER_CONFIG, useValue: { ...config } };\n}\n\nexport function isSSR(): boolean {\n  return typeof window === 'undefined' || typeof document === 'undefined';\n}\n","export type PdfViewerErrorCode =\n  'LOAD_FAILED' | 'PASSWORD_REQUIRED' | 'PASSWORD_CANCELLED' | 'INVALID_SOURCE' | 'INVALID_STATE' | 'RENDER_FAILED';\n\nexport class PdfViewerError extends Error {\n  override name = 'PdfViewerError';\n  constructor(\n    readonly code: PdfViewerErrorCode,\n    message: string,\n    override readonly cause?: unknown,\n  ) {\n    super(message);\n  }\n}\n\nexport function toPdfViewerError(err: unknown): PdfViewerError {\n  if (err instanceof PdfViewerError) return err;\n  const name = err instanceof Error ? err.name : '';\n  if (name === 'PasswordException') {\n    return new PdfViewerError('PASSWORD_REQUIRED', err instanceof Error ? err.message : String(err), err);\n  }\n  const msg = err instanceof Error ? err.message : String(err);\n  return new PdfViewerError('LOAD_FAILED', msg || 'Failed to load PDF document.', err);\n}\n","import type { PDFDocumentProxy } from './pdf-document.model';\nimport type { PDFJsBundle, PDFViewer } from './pdfjs-api.model';\n\nexport type ZoomScale = 'page-height' | 'page-fit' | 'page-width';\nexport type ExternalLinkTarget = 'blank' | 'none' | 'self' | 'parent' | 'top';\n\nexport enum RenderTextMode {\n  DISABLED = 0,\n  ENABLED = 1,\n  ENHANCED = 2,\n}\n\nexport type AnnotationDisplayMode = 'none' | 'enabled' | 'forms' | 'storage';\n\nexport interface PdfViewerOptions {\n  src?: string | Uint8Array | Record<string, unknown>;\n  page?: number;\n  renderText?: boolean;\n  renderTextMode?: RenderTextMode;\n  originalSize?: boolean;\n  stickToPage?: boolean;\n  zoom?: number;\n  zoomScale?: ZoomScale;\n  rotation?: number;\n  autoresize?: boolean;\n  fitToPage?: boolean;\n  showBorders?: boolean;\n  cMapsUrl?: string | null;\n  externalLinkTarget?: ExternalLinkTarget;\n  locale?: string;\n  annotationMode?: number;\n}\n\nexport interface PdfViewerState {\n  isLoading: boolean;\n  isInitialized: boolean;\n  isVisible: boolean;\n  currentPage: number;\n  totalPages: number;\n  error: Error | null;\n}\n\nexport interface ScaleCalculationParams {\n  viewportWidth: number;\n  viewportHeight: number;\n  containerWidth: number;\n  containerHeight: number;\n  zoom: number;\n  zoomScale: ZoomScale;\n  showBorders: boolean;\n}\n\nexport interface PdfViewerEvents {\n  pageRendered: (event: CustomEvent) => void;\n  pagesInitialized: (event: CustomEvent) => void;\n  textLayerRendered: (event: CustomEvent) => void;\n  pageChanging: (pageNumber: number) => void;\n  searchMatchesChange: (matches: PdfSearchMatches | null) => void;\n}\n\n/** Aggregated state for viewer sync - used to reduce effect count */\nexport interface ViewerSyncState {\n  doc: PDFDocumentProxy;\n  scale: {\n    zoom: number;\n    zoomScale: ZoomScale;\n    rotation: number;\n    originalSize: boolean;\n    fitToPage: boolean;\n    showBorders: boolean;\n  };\n  reconfigure: {\n    renderText: boolean;\n    renderTextMode: RenderTextMode;\n    annotationMode: number;\n  };\n  page: number;\n  stickToPage: boolean;\n  enableHandTool: boolean;\n}\n\n/** Configuration for PDF.js loading and viewer behavior. pdf.js loads from a CDN by default — see Getting Started. */\nexport interface PdfViewerConfig {\n  /** Overrides the default CDN base URL (e.g. cdnjs, unpkg, or a self-hosted mirror). */\n  cdnBaseUrl?: string;\n  /** Override the PDF.js worker URL (rarely needed; defaults to the CDN's). */\n  workerSrc?: string;\n  /** Override the CMap URL for CJK text rendering (rarely needed; defaults to the CDN's). */\n  cMapsUrl?: string | null;\n  /** Override the standard-fonts URL (rarely needed; defaults to the CDN's). */\n  standardFontDataUrl?: string | null;\n  /**\n   * Override the URL of pdf.js's WebAssembly decoders — OpenJPEG (JPEG 2000),\n   * JBIG2 and QCMS (rarely needed; defaults to the CDN's). Without it pdf.js\n   * cannot decode those images at all, so self-hosting means serving pdf.js's\n   * `wasm/` directory alongside the other overrides.\n   */\n  wasmUrl?: string | null;\n  /** Override the URL of pdf.js's CMYK ICC profile (rarely needed; defaults to the CDN's). */\n  iccUrl?: string | null;\n  /** Base path pdf.js resolves annotation-layer images against. */\n  imageResourcesPath?: string;\n  /** Default for the component's `[enableHandTool]` input, which still wins when bound. */\n  enableHandTool?: boolean;\n  /**\n   * Maximum canvas area (in pixels) pdf.js will render a page at.\n   *\n   * Leave this unset unless you have measured a problem. pdf.js already picks\n   * a platform-aware default: 2**25 (33,554,432) on desktop, and 5,242,880 on\n   * iOS/Android where canvas memory is scarce. Past the cap it renders at a\n   * lower effective pixel ratio (a softer page) instead of allocating.\n   *\n   * Overriding raises the mobile cap too. Budget accordingly: one page canvas\n   * at page-width zoom on a HiDPI display is already ~25 MB, and pdf.js keeps\n   * up to 10 rendered pages buffered. Pass 0 to disable the cap entirely.\n   */\n  maxCanvasPixels?: number;\n}\n\nexport interface ScaleContext {\n  container: HTMLDivElement;\n  doc: PDFDocumentProxy;\n  viewer: PDFViewer;\n  onError: (err: Error) => void;\n}\n\nexport interface PdfViewerBridgeConfig {\n  container: HTMLDivElement;\n  renderText: boolean;\n  renderTextMode: RenderTextMode;\n  showBorders: boolean;\n  externalLinkTarget: ExternalLinkTarget;\n  annotationMode: number;\n  locale: string;\n  imageResourcesPath?: string;\n  maxCanvasPixels?: number;\n}\n\nexport interface InitContext {\n  container: HTMLDivElement;\n  pdfjsBundle: PDFJsBundle;\n  options: PdfViewerOptions;\n  events: PdfViewerEvents;\n}\n\nexport interface SyncStateTracker {\n  lastReconfigureKey: string;\n  /**\n   * Fingerprint of the last applied scale config, so the page echoes produced\n   * by scrolling don't re-run the whole scale pipeline many times a second.\n   */\n  lastScaleKey: string;\n  lastEmittedDoc: PDFDocumentProxy | null;\n  getLatestScrolledPage: () => number;\n  setLatestScrolledPage: (page: number) => void;\n}\n\nexport type HandToolCleanup = () => void;\n\n/** Options for text search delegation to the PDF.js find controller */\nexport interface SearchOptions {\n  highlightAll?: boolean;\n  caseSensitive?: boolean;\n  entireWord?: boolean;\n}\n\n/** Current match position and total match count for an active search */\nexport interface PdfSearchMatches {\n  current: number;\n  total: number;\n}\n\n/** Rendered thumbnail data for a single PDF page */\nexport interface ThumbnailData {\n  url: string;\n  width: number;\n  height: number;\n}\n","/** Grace period before an object URL is revoked, so the browser can start reading it. */\nconst DOWNLOAD_REVOKE_DELAY_MS = 1000;\n\nexport async function downloadBytes(data: Uint8Array, filename = 'document.pdf'): Promise<void> {\n  const blob = new Blob([data.slice().buffer as ArrayBuffer], { type: 'application/pdf' });\n  const url = URL.createObjectURL(blob);\n  const anchor = document.createElement('a');\n  anchor.href = url;\n  anchor.download = filename;\n  document.body.appendChild(anchor);\n  anchor.click();\n  anchor.remove();\n  setTimeout(() => URL.revokeObjectURL(url), DOWNLOAD_REVOKE_DELAY_MS);\n}\n\nexport async function printBytes(data: Uint8Array): Promise<void> {\n  const blob = new Blob([data as BlobPart], { type: 'application/pdf' });\n  const url = URL.createObjectURL(blob);\n  const iframe = document.createElement('iframe');\n  iframe.style.position = 'fixed';\n  iframe.style.left = '-9999px';\n  iframe.style.top = '0';\n  iframe.style.width = '0';\n  iframe.style.height = '0';\n  iframe.style.border = '0';\n  iframe.setAttribute('aria-hidden', 'true');\n  iframe.src = url;\n  document.body.appendChild(iframe);\n  try {\n    await new Promise<void>((resolve) => {\n      let settled = false;\n      const done = () => {\n        if (!settled) {\n          settled = true;\n          resolve();\n        }\n      };\n      iframe.onload = done;\n      setTimeout(done, 2000);\n    });\n    const win = iframe.contentWindow as Window | null;\n    win?.focus?.();\n    win?.print();\n  } finally {\n    // Keep iframe alive while native print dialog is open, then clean up.\n    setTimeout(() => {\n      if (iframe.parentNode) document.body.removeChild(iframe);\n      URL.revokeObjectURL(url);\n    }, 1500);\n  }\n}\n","/** CSS units conversion factor: 96 DPI / 72 points per inch */\nexport const CSS_UNITS = 96.0 / 72.0;\n\nexport const BORDER_WIDTH = 9;\n\n/** Scale increment for snapping (e.g. 0.05 = 5% steps: 0.5, 0.55, 1.0, 1.05...) */\nexport const SCALE_INCREMENT = 0.05;\n\nexport const RESIZE_DEBOUNCE_TIME = 100;\n\nexport const PAGE_CHANGE_DEBOUNCE_TIME = 100;\n\nexport const HAND_TOOL_CLASSES = {\n  GRAB: 'grab-to-pan-grab',\n  GRABBING: 'grab-to-pan-grabbing',\n} as const;\n","import { BORDER_WIDTH, CSS_UNITS, SCALE_INCREMENT } from '../constants/viewer-constants';\nimport type { ScaleCalculationParams } from '../models/viewer.model';\n\n/**\n * Computes container/viewport ratio when both dimensions are valid.\n * Returns null when either is zero or invalid.\n */\nfunction computeRatio(container: number, viewport: number): number | null {\n  return container > 0 && viewport > 0 && Number.isFinite(container) && Number.isFinite(viewport)\n    ? container / viewport\n    : null;\n}\n\n/**\n * Snaps scale to the nearest increment for clean, predictable zoom levels.\n */\nexport function roundScaleToIncrement(scale: number, increment = SCALE_INCREMENT): number {\n  if (Number.isFinite(scale) && scale > 0) {\n    const snapped = Math.round(scale / increment) * increment;\n    return snapped >= increment ? snapped : increment;\n  }\n  return 1;\n}\n\n/**\n * Calculates the scale factor for PDF page rendering based on container dimensions,\n * zoom settings, and scale mode.\n */\nexport function calculatePdfScale({\n  viewportWidth,\n  viewportHeight,\n  containerWidth,\n  containerHeight,\n  zoom,\n  zoomScale,\n  showBorders,\n}: ScaleCalculationParams): number {\n  if (viewportWidth <= 0 || viewportHeight <= 0) return 1;\n\n  const border = showBorders ? 2 * BORDER_WIDTH : 0;\n  const availableWidth = containerWidth - border;\n  const availableHeight = containerHeight - border;\n\n  const widthRatio = computeRatio(availableWidth, viewportWidth);\n  const heightRatio = computeRatio(availableHeight, viewportHeight);\n\n  const getRatio = (): number => {\n    switch (zoomScale) {\n      case 'page-fit': {\n        const ratios = [widthRatio, heightRatio].filter((r): r is number => r != null && r > 0);\n        return ratios.length ? Math.min(...ratios) : 1;\n      }\n      case 'page-height':\n        return heightRatio ?? 1;\n      case 'page-width':\n      default:\n        return widthRatio ?? 1;\n    }\n  };\n\n  const scale = (zoom * getRatio()) / CSS_UNITS;\n  return roundScaleToIncrement(scale);\n}\n\n/**\n * Coerces a value to a valid integer page number for PDF.js APIs.\n * PDF.js requires Number.isInteger(pageNumber).\n *\n * @param value - Page number (may be string from bindings/URL/events)\n * @returns Integer between 1 and totalPages (or 1 if totalPages invalid)\n */\nexport function toIntegerPageNumber(value: unknown, totalPages?: number): number {\n  const n = typeof value === 'number' ? value : parseInt(String(value), 10);\n  const page = Number.isFinite(n) && n > 0 ? Math.floor(n) : 1;\n  const max = totalPages != null && totalPages > 0 ? totalPages : page;\n  return Math.max(1, Math.min(page, max));\n}\n\nexport function normalizePageNumber(page: number, totalPages: number): number {\n  return toIntegerPageNumber(page, totalPages);\n}\n","import type { PDFPageProxy } from '../models/pdf-document.model';\nimport type { ThumbnailData } from '../models/viewer.model';\n\nexport const THUMBNAIL_MAX_WIDTH = 150;\n\nexport async function renderPageThumbnail(\n  page: PDFPageProxy,\n  maxWidth: number = THUMBNAIL_MAX_WIDTH,\n): Promise<ThumbnailData> {\n  const baseViewport = page.getViewport({ scale: 1 });\n  const scale = maxWidth / baseViewport.width;\n  const viewport = page.getViewport({ scale });\n  const canvas = document.createElement('canvas');\n  canvas.width = Math.ceil(viewport.width);\n  canvas.height = Math.ceil(viewport.height);\n  const context = canvas.getContext('2d');\n  if (!context) throw new Error('Canvas 2D context unavailable.');\n  await page.render({ canvasContext: context, viewport, background: '#ffffff' }).promise;\n  return { url: canvas.toDataURL('image/png'), width: canvas.width, height: canvas.height };\n}\n","import type { DocumentParamsInput, PDFDocumentParameters, PDFSource } from '../models/pdf-document.model';\n\nexport function buildDocumentParams({\n  src,\n  cMapsUrl,\n  standardFontDataUrl,\n  wasmUrl,\n  iccUrl,\n  enableXfa = true,\n}: DocumentParamsInput): PDFDocumentParameters {\n  if (!src) throw new Error('PDF source is required');\n\n  const baseParams: PDFDocumentParameters = {\n    cMapUrl: cMapsUrl ?? undefined,\n    cMapPacked: true,\n    standardFontDataUrl: standardFontDataUrl ?? undefined,\n    wasmUrl: wasmUrl ?? undefined,\n    iccUrl: iccUrl ?? undefined,\n    enableXfa,\n    isEvalSupported: false,\n  };\n\n  if (typeof src === 'string') return { ...baseParams, url: src };\n  if (src instanceof Uint8Array || src instanceof ArrayBuffer) return { ...baseParams, data: src as Uint8Array };\n  if (src instanceof URL) return { ...baseParams, url: src.toString() };\n  // Defaults first: an explicit `cMapUrl` / `enableXfa` on a caller-supplied\n  // parameters object must win, not be overwritten by the derived defaults.\n  return { ...baseParams, ...(src as PDFDocumentParameters) };\n}\n\nexport function isValidPdfSource(value: unknown): value is PDFSource {\n  if (!value) return false;\n\n  const type = typeof value;\n  if (type === 'string' || value instanceof Uint8Array || value instanceof ArrayBuffer || value instanceof URL)\n    return true;\n\n  if (type === 'object' && value !== null) {\n    const obj = value as Record<string, unknown>;\n    return 'url' in obj || 'data' in obj || 'range' in obj;\n  }\n  return false;\n}\n","import { isSSR } from '../config/viewer-config';\nimport type { PDFJsLib } from '../models/pdfjs-api.model';\nimport type { PdfViewerConfig } from '../models/viewer.model';\n\n/** pdfjs-dist version this library's hand-typed API surface was written against. */\nexport const PDFJS_VERSION = '6.3.289';\n\nconst DEFAULT_CDN_BASE_URL = `https://cdn.jsdelivr.net/npm/pdfjs-dist@${PDFJS_VERSION}/`;\n\ntype CdnConfig = Pick<PdfViewerConfig, 'cdnBaseUrl'>;\n\n/**\n * Resolves the CDN root every other default URL hangs off, always with a\n * trailing slash — pdf.js concatenates filenames onto these bases directly\n * (`${wasmUrl}qcms_bg.wasm`), so a missing slash silently produces 404s.\n */\nexport function resolveCdnBaseUrl(config?: CdnConfig): string {\n  const base = config?.cdnBaseUrl?.trim() || DEFAULT_CDN_BASE_URL;\n  return base.endsWith('/') ? base : `${base}/`;\n}\n\n/** Default worker URL, pinned to {@link PDFJS_VERSION}. */\nexport function resolveDefaultWorkerSrc(config?: CdnConfig): string {\n  return `${resolveCdnBaseUrl(config)}build/pdf.worker.min.mjs`;\n}\n\n/** Default CMap URL for CJK text rendering. */\nexport function resolveDefaultCMapsUrl(config?: CdnConfig): string {\n  return `${resolveCdnBaseUrl(config)}cmaps/`;\n}\n\n/** Default standard-fonts URL, used for the 14 standard PDF fonts. */\nexport function resolveDefaultStandardFontDataUrl(config?: CdnConfig): string {\n  return `${resolveCdnBaseUrl(config)}standard_fonts/`;\n}\n\n/**\n * Default URL for pdf.js's WebAssembly decoders (OpenJPEG for JPEG 2000, JBIG2,\n * and QCMS for colour management). pdf.js has no fallback for this: left unset\n * it warns and those images fail to decode, so it is a default, not an extra.\n */\nexport function resolveDefaultWasmUrl(config?: CdnConfig): string {\n  return `${resolveCdnBaseUrl(config)}wasm/`;\n}\n\n/** Default URL for the bundled ICC profile pdf.js uses for CMYK colour spaces. */\nexport function resolveDefaultIccUrl(config?: CdnConfig): string {\n  return `${resolveCdnBaseUrl(config)}iccs/`;\n}\n\n/**\n * Sets GlobalWorkerOptions.workerSrc exactly once per app lifetime. Cross-origin\n * URLs (the CDN default included) are handled by pdf.js itself: it wraps the\n * worker in a same-origin blob shim that imports the real URL from inside the\n * worker, working around the same-origin restriction on `new Worker()`.\n */\nexport function ensureWorkerConfigured(lib: PDFJsLib, config?: PdfViewerConfig): void {\n  if (isSSR()) return;\n  if (lib.GlobalWorkerOptions.workerSrc || lib.GlobalWorkerOptions.workerPort) return;\n  lib.GlobalWorkerOptions.workerSrc = config?.workerSrc ?? resolveDefaultWorkerSrc(config);\n}\n\nconst STYLESHEET_MARKER = 'data-ngx-pdf-viewer-style';\n\n/**\n * Injects pdf.js's own stylesheet (required for text/annotation layer\n * positioning), once per app lifetime.\n *\n * Prepended rather than appended: pdf_viewer.css declares generic `:root`\n * custom properties and `color-scheme`, so injecting it last would let vendor\n * CSS outrank the host application's own equally-specific rules. First in\n * `<head>` keeps the host's styles authoritative.\n */\nexport function ensureStylesheetLoaded(config?: CdnConfig): Promise<void> {\n  if (isSSR()) return Promise.resolve();\n  if (document.querySelector(`[${STYLESHEET_MARKER}]`)) return Promise.resolve();\n\n  const href = `${resolveCdnBaseUrl(config)}web/pdf_viewer.css`;\n  const link = document.createElement('link');\n  link.rel = 'stylesheet';\n  link.href = href;\n  link.setAttribute(STYLESHEET_MARKER, '');\n\n  return new Promise((resolve) => {\n    link.onload = () => resolve();\n    link.onerror = () => {\n      console.warn(\n        `ngx-pdf-viewer: could not load pdf.js's stylesheet from ${href}. ` +\n          'Text and annotation layers will be mispositioned. Check network access or ' +\n          'your Content-Security-Policy `style-src`, or self-host it via `cdnBaseUrl`.',\n      );\n      resolve();\n    };\n    document.head.prepend(link);\n  });\n}\n","import type { DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport type { EventBus } from '../models/pdfjs-api.model';\n\ninterface EventForwardRule {\n  event: string;\n  target: 'window' | 'container';\n  detail?: string[];\n  customEventName?: (payload: Record<string, unknown>) => string;\n}\n\nconst DEFAULT_FORWARD_RULES: EventForwardRule[] = [\n  { event: 'documentload', target: 'window' },\n  { event: 'pagerendered', target: 'container', detail: ['pageNumber', 'cssTransform'] },\n  { event: 'textlayerrendered', target: 'container', detail: ['pageNumber'] },\n  { event: 'pagechanging', target: 'container', detail: ['pageNumber'] },\n  { event: 'pagesinit', target: 'container' },\n  { event: 'pagesloaded', target: 'container', detail: ['pagesCount'] },\n  { event: 'scalechange', target: 'container', detail: ['scale', 'presetValue'] },\n];\n\nfunction extractEventDetail(payload: Record<string, unknown>, keys: string[]): Record<string, unknown> {\n  return Object.fromEntries(keys.filter((key) => payload[key] !== undefined).map((key) => [key, payload[key]]));\n}\n\nfunction forwardEventToDom(\n  eventBus: EventBus,\n  rule: EventForwardRule,\n  container: HTMLElement,\n  destroyRef: DestroyRef,\n): void {\n  fromEvent(eventBus, rule.event)\n    .pipe(takeUntilDestroyed(destroyRef))\n    .subscribe((event: unknown) => {\n      const payload = event as Record<string, unknown>;\n      const target = rule.target === 'window' ? window : container;\n\n      const eventName = rule.customEventName?.(payload) ?? rule.event;\n      const detail = rule.detail ? extractEventDetail(payload, rule.detail) : {};\n\n      target.dispatchEvent(\n        new CustomEvent(eventName, {\n          bubbles: true,\n          cancelable: true,\n          detail,\n        }),\n      );\n    });\n}\n\nexport function createEventBus(\n  EventBusConstructor: new () => EventBus,\n  container: HTMLElement,\n  destroyRef: DestroyRef,\n): EventBus {\n  const eventBus = new EventBusConstructor();\n\n  for (const rule of DEFAULT_FORWARD_RULES) {\n    forwardEventToDom(eventBus, rule, container, destroyRef);\n  }\n\n  return eventBus;\n}\n","import { DestroyRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { PAGE_CHANGE_DEBOUNCE_TIME } from '../../core/constants/viewer-constants';\nimport type { PDFDocumentProxy } from '../../core/models/pdf-document.model';\nimport type {\n  ExternalLinkTarget,\n  PdfSearchMatches,\n  PdfViewerBridgeConfig,\n  PdfViewerEvents,\n  SearchOptions,\n} from '../../core/models/viewer.model';\nimport type {\n  EventBus,\n  PDFFindController,\n  PDFJsViewer,\n  PDFLinkService,\n  PDFViewer,\n  PDFViewerConstructorOptions,\n} from '../../core/models/pdfjs-api.model';\nimport { createEventBus } from '../../core/utils/pdf-event-bus';\nimport { toIntegerPageNumber } from '../../core/utils/pdf-scale';\n\n/**\n * Service that bridges Angular component with PDF.js viewer.\n * Manages EventBus, LinkService, FindController, and PDFViewer lifecycle.\n */\n@Injectable()\nexport class PdfViewerBridgeService {\n  private readonly destroyRef = inject(DestroyRef);\n\n  private eventBus!: EventBus;\n  private linkService!: PDFLinkService;\n  private findController!: PDFFindController;\n  private viewer!: PDFViewer;\n  private pdfjsViewer!: PDFJsViewer;\n\n  private readonly pageChange$ = new Subject<number>();\n  private lastQuery = '';\n  private lastOptions: SearchOptions = {};\n\n  get pdfViewer(): PDFViewer {\n    return this.viewer;\n  }\n\n  get bus(): EventBus {\n    return this.eventBus;\n  }\n\n  initialize(pdfjsViewer: PDFJsViewer, config: PdfViewerBridgeConfig, events: PdfViewerEvents): void {\n    this.pdfjsViewer = pdfjsViewer;\n    this.eventBus = createEventBus(pdfjsViewer.EventBus, config.container, this.destroyRef);\n    this.setupEventListeners(events);\n    this.initializeLinkService(config.externalLinkTarget);\n    this.initializeFindController();\n    this.initializeViewer(config);\n  }\n\n  /** Reconfigures the viewer with new settings (e.g., when renderText changes). */\n  reconfigure(config: PdfViewerBridgeConfig): void {\n    // Replace the inner viewer div with a fresh one to avoid stale DOM from the previous viewer.\n    const viewerDiv = config.container?.firstElementChild as HTMLElement | null;\n    if (viewerDiv?.parentNode) {\n      const newViewerDiv = document.createElement('div');\n      newViewerDiv.className = viewerDiv.className || 'pdfViewer';\n      viewerDiv.parentNode.replaceChild(newViewerDiv, viewerDiv);\n    }\n\n    // Detach the outgoing find controller from the document. It keeps listening to\n    // 'find' events on the shared event bus; resetting its document makes those\n    // handlers no-ops so stale instances never drive a search after reconfigure.\n    this.findController?.setDocument(null);\n\n    this.initializeLinkService(config.externalLinkTarget);\n    this.initializeFindController();\n    this.initializeViewer(config);\n  }\n\n  setDocument(document: PDFDocumentProxy | null): void {\n    if (!this.linkService || !this.viewer) return;\n    this.linkService.setDocument(document as unknown, null);\n    this.findController?.setDocument(document as unknown);\n    this.viewer.setDocument(document as unknown);\n  }\n\n  setCurrentPage(pageNumber: number): void {\n    if (this.viewer) {\n      this.viewer._currentPageNumber = toIntegerPageNumber(pageNumber);\n    }\n  }\n\n  scrollPageIntoView(pageNumber: number, ignoreDestinationZoom = false): void {\n    // Page views are created asynchronously inside pdf.js after `setDocument`;\n    // calling this before they exist is a harmless no-op there, but it logs a\n    // console error on every load, so skip it until pages actually exist.\n    if (this.viewer && this.viewer._pages.length > 0) {\n      this.viewer.scrollPageIntoView({\n        pageNumber: toIntegerPageNumber(pageNumber),\n        ignoreDestinationZoom,\n      });\n    }\n  }\n\n  forceRendering(): void {\n    if (this.viewer) {\n      this.viewer.forceRendering();\n    }\n  }\n\n  search(query: string, options: SearchOptions = {}): void {\n    if (!this.eventBus || !query) return;\n    this.lastQuery = query;\n    this.lastOptions = options;\n    this.eventBus.dispatch('find', {\n      source: this,\n      type: '',\n      query,\n      phraseSearch: true,\n      caseSensitive: options.caseSensitive ?? false,\n      entireWord: options.entireWord ?? false,\n      highlightAll: options.highlightAll ?? true,\n      findPrevious: false,\n      matchDiacritics: true,\n    });\n  }\n\n  /** Re-runs the last search to jump to the next or previous match. */\n  findAgain(findPrevious: boolean): void {\n    if (!this.eventBus || !this.lastQuery) return;\n    this.eventBus.dispatch('find', {\n      source: this,\n      type: 'again',\n      query: this.lastQuery,\n      phraseSearch: true,\n      caseSensitive: this.lastOptions.caseSensitive ?? false,\n      entireWord: this.lastOptions.entireWord ?? false,\n      highlightAll: this.lastOptions.highlightAll ?? true,\n      findPrevious,\n      matchDiacritics: true,\n    });\n  }\n\n  clearSearch(): void {\n    this.lastQuery = '';\n    if (!this.eventBus) return;\n    this.eventBus.dispatch('find', {\n      source: this,\n      type: '',\n      query: '',\n      phraseSearch: true,\n      caseSensitive: false,\n      entireWord: false,\n      highlightAll: false,\n      findPrevious: false,\n      matchDiacritics: true,\n    });\n  }\n\n  navigateToDestination(destination: unknown): void {\n    if (!this.linkService || destination == null) return;\n    this.linkService.navigateTo(destination);\n  }\n\n  private setupEventListeners(events: PdfViewerEvents): void {\n    fromEvent(this.eventBus, 'pagerendered')\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((event) => events.pageRendered(event as CustomEvent));\n\n    fromEvent(this.eventBus, 'pagesinit')\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((event) => events.pagesInitialized(event as CustomEvent));\n\n    fromEvent(this.eventBus, 'textlayerrendered')\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((event) => events.textLayerRendered(event as CustomEvent));\n\n    // Page changing event (debounced) - coerce to integer (PDF.js may emit string from URL hash)\n    fromEvent<CustomEvent>(this.eventBus, 'pagechanging')\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((event) => {\n        const raw = event.detail?.pageNumber ?? (event as unknown as { pageNumber: number }).pageNumber;\n        this.pageChange$.next(toIntegerPageNumber(raw));\n      });\n\n    this.pageChange$\n      .pipe(debounceTime(PAGE_CHANGE_DEBOUNCE_TIME), takeUntilDestroyed(this.destroyRef))\n      .subscribe((pageNumber) => events.pageChanging(pageNumber));\n\n    // Search match count/state updates from the find controller\n    const emitSearchMatches = (event: CustomEvent): void => {\n      const matches = (event as unknown as { matchesCount?: PdfSearchMatches }).matchesCount;\n      events.searchMatchesChange(matches && matches.total > 0 ? matches : null);\n    };\n    fromEvent<CustomEvent>(this.eventBus, 'updatefindmatchescount')\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(emitSearchMatches);\n    fromEvent<CustomEvent>(this.eventBus, 'updatefindcontrolstate')\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(emitSearchMatches);\n  }\n\n  private initializeLinkService(externalLinkTarget: ExternalLinkTarget): void {\n    const config: { eventBus: EventBus; externalLinkTarget?: number } = {\n      eventBus: this.eventBus,\n    };\n\n    const linkTarget = this.getLinkTargetValue(externalLinkTarget);\n    if (linkTarget !== null) {\n      config.externalLinkTarget = linkTarget;\n    }\n\n    this.linkService = new this.pdfjsViewer.PDFLinkService(config);\n  }\n\n  private initializeFindController(): void {\n    this.findController = new this.pdfjsViewer.PDFFindController({\n      eventBus: this.eventBus,\n      linkService: this.linkService,\n    });\n  }\n\n  private initializeViewer(config: PdfViewerBridgeConfig): void {\n    const viewerElement = config.container?.firstElementChild as HTMLDivElement | null;\n    const viewerOptions: PDFViewerConstructorOptions = {\n      container: config.container,\n      viewer: viewerElement ?? undefined,\n      eventBus: this.eventBus,\n      linkService: this.linkService,\n      findController: this.findController,\n      textLayerMode: config.renderText ? config.renderTextMode : 0,\n      annotationMode: config.annotationMode,\n      enableAutoLinking: false,\n      removePageBorders: !config.showBorders,\n      imageResourcesPath: config.imageResourcesPath,\n      maxCanvasPixels: config.maxCanvasPixels,\n      l10n: new this.pdfjsViewer.GenericL10n(config.locale ?? 'en'),\n    };\n\n    this.viewer = new this.pdfjsViewer.PDFViewer(viewerOptions);\n    this.linkService.setViewer(this.viewer as unknown);\n  }\n\n  private getLinkTargetValue(target: ExternalLinkTarget): number | null {\n    const LinkTarget = this.pdfjsViewer.LinkTarget;\n    if (!LinkTarget) return null;\n\n    switch (target) {\n      case 'blank':\n        return LinkTarget.BLANK;\n      case 'none':\n        return LinkTarget.NONE;\n      case 'self':\n        return LinkTarget.SELF;\n      case 'parent':\n        return LinkTarget.PARENT;\n      case 'top':\n        return LinkTarget.TOP;\n      default:\n        return null;\n    }\n  }\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { from, Observable } from 'rxjs';\nimport { isSSR, PDF_VIEWER_CONFIG } from '../../core/config/viewer-config';\nimport type {\n  PDFDocumentLoadingTask,\n  PDFDocumentProxy,\n  PDFPageProxy,\n  PDFProgressData,\n  PDFSource,\n} from '../../core/models/pdf-document.model';\nimport { PdfViewerError, toPdfViewerError } from '../../core/models/viewer-error.model';\nimport {\n  RenderTextMode,\n  type PdfViewerBridgeConfig,\n  type PdfViewerEvents,\n  type PdfViewerOptions,\n} from '../../core/models/viewer.model';\nimport type { PDFJsBundle } from '../../core/models/pdfjs-api.model';\nimport { buildDocumentParams, isValidPdfSource } from '../../core/utils/pdf-document-params';\nimport { toIntegerPageNumber } from '../../core/utils/pdf-scale';\nimport {\n  resolveDefaultCMapsUrl,\n  resolveDefaultIccUrl,\n  resolveDefaultStandardFontDataUrl,\n  resolveDefaultWasmUrl,\n} from '../../core/utils/pdf-worker';\nimport { PdfViewerBridgeService } from './viewer-bridge.service';\n\n/**\n * Facade service that orchestrates PDF loading, rendering, and lifecycle management.\n * Uses signals for state and DestroyRef for cleanup.\n */\n@Injectable()\nexport class PdfViewerFacadeService {\n  private readonly bridge = inject(PdfViewerBridgeService);\n  private readonly config = inject(PDF_VIEWER_CONFIG, { optional: true });\n\n  readonly currentDocument = signal<PDFDocumentProxy | null>(null);\n  readonly loadError = signal<PdfViewerError | null>(null);\n  readonly loadProgress = signal<PDFProgressData | null>(null);\n\n  private currentLoadingTask: PDFDocumentLoadingTask | null = null;\n  private lastLoadedSrcRef: unknown = null;\n  private passwordAbort = false;\n\n  private isSameSource(src: PDFSource): boolean {\n    if (typeof src === 'string') return this.lastLoadedSrcRef === src;\n    if (src instanceof Uint8Array) {\n      return this.lastLoadedSrcRef === src;\n    }\n    return false;\n  }\n\n  /** Resolved CMap URL. Priority: component input > PDF_VIEWER_CONFIG > CDN default. */\n  getCMapsUrl(inputOverride?: string | null): string {\n    if (inputOverride !== null && inputOverride !== undefined) return inputOverride;\n    return this.config?.cMapsUrl ?? resolveDefaultCMapsUrl(this.config ?? undefined);\n  }\n\n  /** Resolved standard-fonts URL. Priority: PDF_VIEWER_CONFIG > CDN default. */\n  getStandardFontDataUrl(): string {\n    return this.config?.standardFontDataUrl ?? resolveDefaultStandardFontDataUrl(this.config ?? undefined);\n  }\n\n  /** Resolved WebAssembly-decoder URL. Priority: PDF_VIEWER_CONFIG > CDN default. */\n  getWasmUrl(): string {\n    return this.config?.wasmUrl ?? resolveDefaultWasmUrl(this.config ?? undefined);\n  }\n\n  /** Resolved ICC-profile URL. Priority: PDF_VIEWER_CONFIG > CDN default. */\n  getIccUrl(): string {\n    return this.config?.iccUrl ?? resolveDefaultIccUrl(this.config ?? undefined);\n  }\n\n  /** Resolved hand-tool flag. Priority: component input > PDF_VIEWER_CONFIG > off. */\n  getEnableHandTool(inputOverride?: boolean): boolean {\n    return inputOverride ?? this.config?.enableHandTool ?? false;\n  }\n\n  getImageResourcesPath(): string | undefined {\n    return this.config?.imageResourcesPath;\n  }\n\n  async initialize(\n    pdfjsBundle: PDFJsBundle,\n    container: HTMLDivElement,\n    options: PdfViewerOptions,\n    events: PdfViewerEvents,\n  ): Promise<void> {\n    if (isSSR()) return;\n\n    const bridgeConfig: PdfViewerBridgeConfig = {\n      container,\n      renderText: options.renderText ?? true,\n      renderTextMode: options.renderTextMode ?? RenderTextMode.ENABLED,\n      showBorders: options.showBorders ?? false,\n      externalLinkTarget: options.externalLinkTarget ?? 'blank',\n      annotationMode: options.annotationMode ?? 1,\n      locale: options.locale ?? 'en',\n      imageResourcesPath: this.getImageResourcesPath(),\n      maxCanvasPixels: this.config?.maxCanvasPixels,\n    };\n\n    this.bridge.initialize(pdfjsBundle.viewer, bridgeConfig, events);\n  }\n\n  async reconfigure(pdfjsBundle: PDFJsBundle, container: HTMLDivElement, options: PdfViewerOptions): Promise<void> {\n    const bridgeConfig: PdfViewerBridgeConfig = {\n      container,\n      renderText: options.renderText ?? true,\n      renderTextMode: options.renderTextMode ?? RenderTextMode.ENABLED,\n      showBorders: options.showBorders ?? false,\n      externalLinkTarget: options.externalLinkTarget ?? 'blank',\n      annotationMode: options.annotationMode ?? 1,\n      locale: options.locale ?? 'en',\n      imageResourcesPath: this.getImageResourcesPath(),\n      maxCanvasPixels: this.config?.maxCanvasPixels,\n    };\n\n    this.bridge.reconfigure(bridgeConfig);\n  }\n\n  /** Loads a PDF document from the specified source; cMapsUrl must already be resolved (see {@link getCMapsUrl}). */\n  async loadDocument(\n    src: PDFSource | undefined,\n    cMapsUrl: string,\n    pdfjsBundle: PDFJsBundle,\n    passwordProvider?: (reason: number) => Promise<string | null>,\n  ): Promise<void> {\n    if (!src || !isValidPdfSource(src)) {\n      this.loadError.set(new PdfViewerError('INVALID_SOURCE', 'Invalid PDF source'));\n      return;\n    }\n\n    if (this.isSameSource(src) && this.currentDocument()) return;\n\n    this.loadError.set(null);\n    this.loadProgress.set(null);\n    this.passwordAbort = false;\n\n    try {\n      await this.cleanup();\n\n      const params = buildDocumentParams({\n        src,\n        cMapsUrl,\n        standardFontDataUrl: this.getStandardFontDataUrl(),\n        wasmUrl: this.getWasmUrl(),\n        iccUrl: this.getIccUrl(),\n      });\n      const loadingTask = pdfjsBundle.lib.getDocument(params);\n      this.currentLoadingTask = loadingTask;\n\n      loadingTask.onProgress = (data: PDFProgressData) => this.loadProgress.set(data);\n\n      const abortWithPasswordError = async (\n        code: 'PASSWORD_REQUIRED' | 'PASSWORD_CANCELLED',\n        message: string,\n        cause?: unknown,\n      ): Promise<void> => {\n        // Mark the abort before destroying so the loadDocument catch block does\n        // not overwrite the intentional password error when pdf.js rejects the\n        // pending load promise in response to destroy().\n        this.passwordAbort = true;\n        this.currentLoadingTask = null;\n        this.loadError.set(new PdfViewerError(code, message, cause));\n        await loadingTask.destroy().catch(() => {});\n      };\n\n      loadingTask.onPassword = (callback: (password: string) => void, reason: number): void => {\n        void (async () => {\n          if (!passwordProvider) {\n            await abortWithPasswordError(\n              'PASSWORD_REQUIRED',\n              'This PDF is password protected. Provide a passwordProvider input to unlock it.',\n            );\n            return;\n          }\n          let password: string | null;\n          try {\n            password = await passwordProvider(reason);\n          } catch (err) {\n            await abortWithPasswordError('PASSWORD_CANCELLED', 'Password prompt failed or was cancelled.', err);\n            return;\n          }\n          if (password == null) {\n            await abortWithPasswordError('PASSWORD_CANCELLED', 'Password prompt cancelled.');\n            return;\n          }\n          try {\n            callback(password);\n          } catch (err) {\n            await abortWithPasswordError('PASSWORD_CANCELLED', 'Password prompt failed or was cancelled.', err);\n          }\n        })();\n      };\n\n      const document = await loadingTask.promise;\n      this.currentDocument.set(document);\n      this.lastLoadedSrcRef = src;\n      this.loadProgress.set(null);\n\n      this.bridge.setDocument(document);\n    } catch (error) {\n      if (this.passwordAbort) return;\n      this.lastLoadedSrcRef = null;\n      this.loadProgress.set(null);\n      this.loadError.set(toPdfViewerError(error));\n    }\n  }\n\n  getPage(pageNumber: number): Observable<PDFPageProxy> {\n    const doc = this.currentDocument();\n    if (!doc) throw new Error('No document loaded');\n\n    return from(doc.getPage(toIntegerPageNumber(pageNumber, doc.numPages)));\n  }\n\n  getPdfViewer() {\n    return this.bridge.pdfViewer;\n  }\n\n  /** Sets the PDF document in the viewer, link service, and find controller. */\n  setDocument(document: PDFDocumentProxy | null): void {\n    this.bridge.setDocument(document);\n  }\n\n  setCurrentPage(pageNumber: number): void {\n    this.bridge.setCurrentPage(toIntegerPageNumber(pageNumber));\n  }\n\n  scrollToPage(pageNumber: number, ignoreZoom = false): void {\n    this.bridge.scrollPageIntoView(toIntegerPageNumber(pageNumber), ignoreZoom);\n  }\n\n  forceRendering(): void {\n    this.bridge.forceRendering();\n  }\n\n  /**\n   * Navigates to an internal PDF destination, such as a table-of-contents entry.\n   */\n  navigateToDestination(destination: unknown): void {\n    this.bridge.navigateToDestination(destination);\n  }\n\n  async cleanup(): Promise<void> {\n    // Detach the viewer first so pdf.js cancels in-flight rendering before the\n    // transport goes away.\n    this.bridge.setDocument(null);\n\n    // Destroying the loading task is what tears the document down —\n    // PDFDocumentProxy has no destroy() in pdf.js 6, only cleanup().\n    // Swallowed: this runs on the path to loading the next document.\n    const task = this.currentLoadingTask;\n    this.currentLoadingTask = null;\n    if (task && !task.destroyed) await task.destroy().catch(() => {});\n\n    this.loadProgress.set(null);\n    this.currentDocument.set(null);\n    this.lastLoadedSrcRef = null;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { PDFDocumentMetadata, PDFDocumentProxy, PDFOutlineItem } from '../../core/models/pdf-document.model';\nimport { PdfViewerError } from '../../core/models/viewer-error.model';\nimport type { ThumbnailData } from '../../core/models/viewer.model';\nimport { downloadBytes, printBytes } from '../../core/utils/pdf-file-actions';\nimport { normalizePageNumber } from '../../core/utils/pdf-scale';\nimport { renderPageThumbnail } from '../../core/utils/pdf-thumbnail';\nimport { PdfViewerFacadeService } from './viewer-facade.service';\n\n@Injectable()\nexport class PdfViewerDocumentActionsService {\n  private readonly facade = inject(PdfViewerFacadeService);\n\n  async getOutline(): Promise<PDFOutlineItem[]> {\n    const document = this.getCurrentDocument();\n    return this.normalizeOutlineItems(await document.getOutline());\n  }\n\n  async getMetadata(): Promise<PDFDocumentMetadata> {\n    return this.getCurrentDocument().getMetadata();\n  }\n\n  navigateToOutline(item: PDFOutlineItem): void {\n    this.facade.navigateToDestination(item.dest);\n  }\n\n  async getThumbnail(page: number): Promise<ThumbnailData> {\n    const document = this.getCurrentDocument();\n    const proxy = await document.getPage(normalizePageNumber(page, document.numPages));\n    return renderPageThumbnail(proxy);\n  }\n\n  async download(filename?: string): Promise<void> {\n    await downloadBytes(await this.getCurrentDocument().getData(), filename);\n  }\n\n  async print(): Promise<void> {\n    await printBytes(await this.getCurrentDocument().getData());\n  }\n\n  getPageCount(): number {\n    return this.facade.currentDocument()?.numPages ?? 0;\n  }\n\n  private getCurrentDocument(): PDFDocumentProxy {\n    const document = this.facade.currentDocument();\n    if (!document) throw new PdfViewerError('INVALID_STATE', 'No document loaded.');\n    return document;\n  }\n\n  private normalizeOutlineItems(items?: PDFOutlineItem[] | null): PDFOutlineItem[] {\n    return (items ?? []).map((item) => ({\n      ...item,\n      title: item.title ?? '',\n      items: this.normalizeOutlineItems(item.items),\n    }));\n  }\n}\n","import { Injectable } from '@angular/core';\nimport type { InitContext, PdfViewerOptions, ViewerSyncState } from '../../core/models/viewer.model';\nimport { toPdfViewerError } from '../../core/models/viewer-error.model';\nimport type { PdfViewerFacadeService } from './viewer-facade.service';\n\n/** Handles viewer lifecycle: initialization and reconfiguration. */\n@Injectable()\nexport class PdfViewerLifecycleService {\n  async initialize(facade: PdfViewerFacadeService, context: InitContext): Promise<void> {\n    await facade.initialize(context.pdfjsBundle, context.container, context.options, context.events);\n  }\n\n  /**\n   * Reconfigures the viewer when renderText/renderTextMode change.\n   * Calls onComplete when done so the caller can update scale.\n   */\n  async reconfigure(\n    facade: PdfViewerFacadeService,\n    pdfjsBundle: NonNullable<InitContext['pdfjsBundle']>,\n    container: HTMLDivElement,\n    config: ViewerSyncState['reconfigure'],\n    extraOptions: Pick<PdfViewerOptions, 'showBorders' | 'externalLinkTarget' | 'locale'>,\n    onComplete: () => void,\n    onError: (err: Error) => void,\n  ): Promise<void> {\n    try {\n      const options: PdfViewerOptions = { ...config, ...extraOptions };\n      await facade.reconfigure(pdfjsBundle, container, options);\n    } catch (err) {\n      onError(toPdfViewerError(err));\n      onComplete();\n      return;\n    }\n\n    const doc = facade.currentDocument();\n    if (!doc) {\n      onComplete();\n      return;\n    }\n\n    try {\n      // Wire the document through the full bridge path so the freshly created\n      // link service, find controller, and viewer all receive it. Calling only\n      // viewer.setDocument would leave the new find controller without the\n      // document, so search results could never surface as highlights.\n      facade.setDocument(doc);\n      const viewer = facade.getPdfViewer();\n      if (viewer.firstPagePromise) await viewer.firstPagePromise;\n    } catch (err) {\n      onError(toPdfViewerError(err));\n    }\n    onComplete();\n  }\n}\n","import { DestroyRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { take } from 'rxjs/operators';\nimport type { PDFPageProxy } from '../../core/models/pdf-document.model';\nimport { toPdfViewerError } from '../../core/models/viewer-error.model';\nimport type { ScaleContext, ViewerSyncState } from '../../core/models/viewer.model';\nimport { calculatePdfScale, roundScaleToIncrement, toIntegerPageNumber } from '../../core/utils/pdf-scale';\nimport type { PdfViewerFacadeService } from './viewer-facade.service';\n\n/** Handles PDF viewer scale/zoom logic only. */\n@Injectable()\nexport class PdfViewerScaleService {\n  private readonly destroyRef = inject(DestroyRef);\n\n  /**\n   * Applies rotation and scale, then triggers rendering.\n   *\n   * Does not move the scroll position: pdf.js's `currentScale` setter already\n   * re-anchors the view through `_location`, preserving the intra-page offset.\n   */\n  updateScaleAndRender(\n    facade: PdfViewerFacadeService,\n    context: ScaleContext,\n    scaleConfig: ViewerSyncState['scale'],\n  ): void {\n    const { viewer } = context;\n\n    const apply = (): void => {\n      if (viewer.pagesRotation !== scaleConfig.rotation) {\n        viewer.pagesRotation = scaleConfig.rotation;\n      }\n      this.applyScale(facade, context, scaleConfig);\n    };\n\n    if (viewer.firstPagePromise) {\n      viewer.firstPagePromise.then(apply);\n    } else {\n      apply();\n    }\n  }\n\n  applyScale(facade: PdfViewerFacadeService, context: ScaleContext, scaleConfig: ViewerSyncState['scale']): void {\n    const { container, doc, viewer, onError } = context;\n    const pageNumber = toIntegerPageNumber(viewer.currentPageNumber, doc.numPages);\n\n    facade\n      .getPage(pageNumber)\n      // take(1) so each call's subscription completes rather than living on\n      // until component teardown.\n      .pipe(take(1), takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (page: PDFPageProxy) => {\n          const totalRotation = scaleConfig.rotation + page.rotate;\n          const viewport = page.getViewport({ scale: 1, rotation: totalRotation });\n\n          const isOriginalSize = scaleConfig.originalSize;\n          const scale = isOriginalSize\n            ? roundScaleToIncrement(scaleConfig.zoom)\n            : calculatePdfScale({\n                viewportWidth: viewport.width,\n                viewportHeight: viewport.height,\n                containerWidth: container.clientWidth,\n                containerHeight: container.clientHeight,\n                zoom: scaleConfig.zoom,\n                zoomScale: scaleConfig.zoomScale,\n                showBorders: scaleConfig.showBorders,\n              });\n\n          viewer.currentScale = scale;\n\n          facade.forceRendering();\n        },\n        error: (err) => onError(toPdfViewerError(err)),\n      });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport type { PDFDocumentProxy } from '../../core/models/pdf-document.model';\nimport type { ScaleContext, SyncStateTracker, ViewerSyncState } from '../../core/models/viewer.model';\nimport { normalizePageNumber, toIntegerPageNumber } from '../../core/utils/pdf-scale';\nimport type { PdfViewerFacadeService } from './viewer-facade.service';\nimport type { PdfViewerScaleService } from './viewer-scale.service';\n\n/** Orchestrates viewer sync: reconfigure, page navigation, scale, hand tool, stick-to-page. */\n@Injectable()\nexport class PdfViewerSyncService {\n  /**\n   * Syncs viewer state - reconfigure, page nav, scale, stick-to-page.\n   * Hand tool is left to component (DOM-specific).\n   */\n  sync(\n    state: ViewerSyncState,\n    tracker: SyncStateTracker,\n    context: {\n      container: HTMLDivElement | null;\n      scaleService: PdfViewerScaleService;\n      facade: PdfViewerFacadeService;\n      onReconfigure: (config: ViewerSyncState['reconfigure']) => Promise<void>;\n      onHandTool: (enabled: boolean) => void;\n      onLoadComplete: (doc: PDFDocumentProxy) => void;\n      onError?: (err: Error) => void;\n    },\n  ): void {\n    if (state.doc !== tracker.lastEmittedDoc) {\n      tracker.lastEmittedDoc = state.doc;\n      // A different document may have a different page size, so the scale has\n      // to be recomputed even if every scale input stayed the same.\n      tracker.lastScaleKey = '';\n      context.onLoadComplete(state.doc);\n    }\n\n    context.onHandTool(state.enableHandTool);\n\n    const reconfigureKey = `${state.reconfigure.renderText}-${state.reconfigure.renderTextMode}-${state.reconfigure.annotationMode}`;\n    if (reconfigureKey !== tracker.lastReconfigureKey) {\n      tracker.lastReconfigureKey = reconfigureKey;\n      void context.onReconfigure(state.reconfigure);\n      return;\n    }\n\n    // Only an explicit page change navigates: while scrolling, `pagechanging`\n    // is echoed back into `page`, and latestScrolledPage already holds it.\n    const targetPage = normalizePageNumber(state.page, state.doc.numPages);\n    if (targetPage !== tracker.getLatestScrolledPage()) {\n      tracker.setLatestScrolledPage(targetPage);\n      context.facade.scrollToPage(targetPage, true);\n\n      if (state.stickToPage) {\n        // Re-assert once pdf.js settles its own scroll-driven page tracking.\n        setTimeout(() => {\n          const viewer = context.facade.getPdfViewer();\n          if (viewer) {\n            viewer.currentPageNumber = toIntegerPageNumber(targetPage, state.doc.numPages);\n          }\n        });\n      }\n    }\n\n    const scaleKey = buildScaleKey(state.scale);\n    if (context.container && scaleKey !== tracker.lastScaleKey) {\n      tracker.lastScaleKey = scaleKey;\n      const viewer = context.facade.getPdfViewer();\n      const scaleContext: ScaleContext = {\n        container: context.container,\n        doc: state.doc,\n        viewer,\n        onError: context.onError ?? (() => {}),\n      };\n      context.scaleService.updateScaleAndRender(context.facade, scaleContext, state.scale);\n    }\n  }\n}\n\n/**\n * Fingerprints everything `updateScaleAndRender` reads. Resize-driven scale\n * changes bypass sync — the component calls the scale service directly.\n */\nfunction buildScaleKey(scale: ViewerSyncState['scale']): string {\n  return [scale.zoom, scale.zoomScale, scale.rotation, scale.originalSize, scale.fitToPage, scale.showBorders].join(\n    '|',\n  );\n}\n","import { Injectable, inject } from '@angular/core';\nimport { isSSR, PDF_VIEWER_CONFIG } from '../../core/config/viewer-config';\nimport type { PDFJsBundle, PDFJsLib, PDFJsViewer } from '../../core/models/pdfjs-api.model';\nimport { ensureStylesheetLoaded, ensureWorkerConfigured, resolveCdnBaseUrl } from '../../core/utils/pdf-worker';\n\n/**\n * Loads pdf.js — core, viewer, and stylesheet — from a CDN, no host\n * `pdfjs-dist` install needed. URLs are runtime-computed template strings\n * rather than literals: bundlers only ever treat this as an opaque runtime\n * fetch this way, so it stays a separate, lazily-loaded chunk and never\n * affects the host's own build.\n *\n * Core/viewer load sequentially (pdf_viewer.mjs reads globalThis.pdfjsLib);\n * the stylesheet loads in parallel and is awaited before returning.\n */\n@Injectable({ providedIn: 'root' })\nexport class PdfjsService {\n  private readonly config = inject(PDF_VIEWER_CONFIG, { optional: true });\n  private loadPromise: Promise<PDFJsBundle> | null = null;\n\n  async load(): Promise<PDFJsBundle> {\n    if (isSSR()) {\n      throw new Error(\n        'ngx-pdf-viewer: PDF.js cannot be initialized during SSR. ' +\n          'Ensure the component renders only in the browser.',\n      );\n    }\n    this.loadPromise ??= this.loadBundle().catch((error: unknown) => {\n      this.loadPromise = null;\n      throw error;\n    });\n    return this.loadPromise;\n  }\n\n  private async loadBundle(): Promise<PDFJsBundle> {\n    const baseUrl = resolveCdnBaseUrl(this.config ?? undefined);\n    const stylesheetLoaded = ensureStylesheetLoaded(this.config ?? undefined);\n\n    const libModule = (await import(\n      /* webpackIgnore: true */ /* @vite-ignore */ `${baseUrl}build/pdf.min.mjs`\n    )) as Record<string, unknown>;\n    const lib = extractDefault<PDFJsLib>(libModule);\n\n    // pdf_viewer.mjs expects globalThis.pdfjsLib to exist when evaluated.\n    (globalThis as { pdfjsLib?: unknown }).pdfjsLib ??= lib;\n\n    const viewerModule = (await import(\n      /* webpackIgnore: true */ /* @vite-ignore */ `${baseUrl}web/pdf_viewer.mjs`\n    )) as Record<string, unknown>;\n    const viewer = extractDefault<PDFJsViewer>(viewerModule);\n\n    ensureWorkerConfigured(lib, this.config ?? undefined);\n    await stylesheetLoaded;\n\n    return {\n      lib,\n      viewer,\n      AnnotationMode: libModule['AnnotationMode'] as PDFJsBundle['AnnotationMode'],\n      AnnotationEditorType: libModule['AnnotationEditorType'] as PDFJsBundle['AnnotationEditorType'],\n    };\n  }\n}\n\nfunction extractDefault<T>(module: unknown): T {\n  const mod = module as { default?: T };\n  return mod.default ?? (module as T);\n}\n","import { HAND_TOOL_CLASSES } from '../constants/viewer-constants';\nimport type { HandToolCleanup } from '../models/viewer.model';\n\ninterface PanState {\n  x: number;\n  y: number;\n  scrollLeft: number;\n  scrollTop: number;\n}\n\nconst OVERLAY_STYLE: Partial<CSSStyleDeclaration> = {\n  position: 'fixed',\n  inset: '0',\n  cursor: 'grabbing',\n  zIndex: '50000',\n  pointerEvents: 'auto',\n};\n\nfunction createOverlay(className: string): HTMLDivElement {\n  const overlay = document.createElement('div');\n  overlay.className = className;\n  Object.assign(overlay.style, OVERLAY_STYLE);\n  return overlay;\n}\n\n/**\n * Sets up grab-to-pan (hand tool) on a scrollable container.\n * Left-click and drag pans the content.\n */\nexport function setupHandTool(container: HTMLElement, enabled: boolean): HandToolCleanup {\n  if (!enabled) {\n    container.classList.remove(HAND_TOOL_CLASSES.GRAB);\n    return () => {};\n  }\n\n  container.classList.add(HAND_TOOL_CLASSES.GRAB);\n\n  let panState: PanState | null = null;\n  const overlay = createOverlay(HAND_TOOL_CLASSES.GRABBING);\n\n  function handleMouseMove(event: MouseEvent): void {\n    if (!panState) return;\n    event.preventDefault();\n    container.scrollLeft = panState.scrollLeft + (panState.x - event.clientX);\n    container.scrollTop = panState.scrollTop + (panState.y - event.clientY);\n  }\n\n  function endPanSession(): void {\n    panState = null;\n    overlay.remove();\n    window.removeEventListener('mousemove', handleMouseMove);\n    window.removeEventListener('mouseup', endPanSession);\n  }\n\n  /**\n   * Starts a pan session if user left-clicks the container.\n   */\n  function handleMouseDown(event: MouseEvent): void {\n    if (event.button !== 0) return;\n    event.preventDefault();\n\n    panState = {\n      x: event.clientX,\n      y: event.clientY,\n      scrollLeft: container.scrollLeft,\n      scrollTop: container.scrollTop,\n    };\n\n    container.append(overlay);\n    window.addEventListener('mousemove', handleMouseMove, { passive: false });\n    window.addEventListener('mouseup', endPanSession);\n  }\n\n  container.addEventListener('mousedown', handleMouseDown);\n\n  return (): void => {\n    endPanSession();\n    container.classList.remove(HAND_TOOL_CLASSES.GRAB);\n    container.removeEventListener('mousedown', handleMouseDown);\n  };\n}\n","import { DestroyRef, ElementRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime, filter } from 'rxjs/operators';\nimport { isSSR } from '../../core/config/viewer-config';\nimport { RESIZE_DEBOUNCE_TIME } from '../../core/constants/viewer-constants';\nimport type { HandToolCleanup } from '../../core/models/viewer.model';\nimport { setupHandTool } from '../../core/utils/pdf-hand-tool';\n\n@Injectable()\nexport class PdfViewerHostService {\n  private readonly hostElement = inject(ElementRef<HTMLElement>);\n  private readonly destroyRef = inject(DestroyRef);\n  private handToolCleanup: HandToolCleanup | null = null;\n  private handToolContainer: HTMLElement | null = null;\n  private handToolEnabled: boolean | null = null;\n\n  observeVisibility(onVisibilityChange: (visible: boolean) => void): void {\n    if (isSSR()) return;\n    if (typeof IntersectionObserver === 'undefined') {\n      onVisibilityChange(true);\n      return;\n    }\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        onVisibilityChange(entries.some((entry) => entry.isIntersecting));\n      },\n      { threshold: 0 },\n    );\n    observer.observe(this.hostElement.nativeElement);\n    this.destroyRef.onDestroy(() => observer.disconnect());\n  }\n\n  observeResize(shouldResize: () => boolean, onResize: () => void): void {\n    if (isSSR()) return;\n\n    fromEvent(window, 'resize')\n      .pipe(filter(shouldResize), debounceTime(RESIZE_DEBOUNCE_TIME), takeUntilDestroyed(this.destroyRef))\n      .subscribe(onResize);\n\n    if (typeof ResizeObserver === 'undefined') return;\n    const observer = new ResizeObserver(() => {\n      if (shouldResize()) onResize();\n    });\n    observer.observe(this.hostElement.nativeElement);\n    this.destroyRef.onDestroy(() => observer.disconnect());\n  }\n\n  /**\n   * Idempotent: re-running with the same container and flag is a no-op, because\n   * a rebuild runs the cleanup, which would cancel an in-progress pan.\n   */\n  setHandTool(container: HTMLElement, enabled: boolean): void {\n    if (this.handToolContainer === container && this.handToolEnabled === enabled) return;\n    this.clearHandTool();\n    this.handToolContainer = container;\n    this.handToolEnabled = enabled;\n    this.handToolCleanup = setupHandTool(container, enabled);\n  }\n\n  clearHandTool(): void {\n    this.handToolCleanup?.();\n    this.handToolCleanup = null;\n    this.handToolContainer = null;\n    this.handToolEnabled = null;\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  output,\n  signal,\n  TemplateRef,\n  viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { isSSR } from '../core/config/viewer-config';\nimport type {\n  PDFDocumentProxy,\n  PDFDocumentMetadata,\n  PDFOutlineItem,\n  PDFProgressData,\n  PDFSource,\n} from '../core/models/pdf-document.model';\nimport type { PDFJsBundle } from '../core/models/pdfjs-api.model';\nimport { PdfViewerError, toPdfViewerError } from '../core/models/viewer-error.model';\nimport {\n  RenderTextMode,\n  type AnnotationDisplayMode,\n  type ExternalLinkTarget,\n  type PdfSearchMatches,\n  type PdfViewerOptions,\n  type ScaleContext,\n  type SearchOptions,\n  type SyncStateTracker,\n  type ThumbnailData,\n  type ViewerSyncState,\n  type ZoomScale,\n} from '../core/models/viewer.model';\nimport { PdfViewerDocumentActionsService } from './services/viewer-actions.service';\nimport { PdfViewerFacadeService } from './services/viewer-facade.service';\nimport { PdfViewerLifecycleService } from './services/viewer-lifecycle.service';\nimport { PdfViewerScaleService } from './services/viewer-scale.service';\nimport { PdfViewerSyncService } from './services/viewer-sync.service';\nimport { PdfViewerBridgeService } from './services/viewer-bridge.service';\nimport { PdfjsService } from './services/viewer-pdfjs.service';\nimport { toIntegerPageNumber } from '../core/utils/pdf-scale';\nimport { PdfViewerHostService } from './services/viewer-host.service';\n\n@Component({\n  selector: 'ngx-pdf-viewer',\n  standalone: true,\n  templateUrl: './viewer-component.html',\n  styleUrls: ['./viewer-component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    PdfViewerBridgeService,\n    PdfViewerDocumentActionsService,\n    PdfViewerFacadeService,\n    PdfViewerScaleService,\n    PdfViewerSyncService,\n    PdfViewerLifecycleService,\n    PdfViewerHostService,\n  ],\n  imports: [NgTemplateOutlet],\n})\nexport class PdfViewerComponent implements AfterViewInit {\n  private readonly facade = inject(PdfViewerFacadeService);\n  private readonly documentActions = inject(PdfViewerDocumentActionsService);\n  private readonly bridge = inject(PdfViewerBridgeService);\n  private readonly pdfjs = inject(PdfjsService);\n  private readonly scaleService = inject(PdfViewerScaleService);\n  private readonly syncService = inject(PdfViewerSyncService);\n  private readonly lifecycleService = inject(PdfViewerLifecycleService);\n  private readonly hostService = inject(PdfViewerHostService);\n  private readonly destroyRef = inject(DestroyRef);\n\n  readonly containerRef = viewChild<ElementRef<HTMLDivElement>>('pdfViewerContainer');\n\n  readonly src = input<string | Uint8Array | PDFSource | undefined>();\n  readonly page = input<number>(1);\n  readonly renderText = input<boolean>(true);\n  readonly renderTextMode = input<RenderTextMode>(RenderTextMode.ENABLED);\n  readonly originalSize = input<boolean>(false);\n  readonly stickToPage = input<boolean>(false);\n  readonly zoom = input<number>(1);\n  readonly zoomScale = input<ZoomScale>('page-width');\n  readonly rotation = input<number>(0);\n  readonly autoresize = input<boolean>(true);\n  readonly fitToPage = input<boolean>(true);\n  readonly showBorders = input<boolean>(false);\n  readonly cMapsUrl = input<string | null>(null);\n  readonly externalLinkTarget = input<ExternalLinkTarget>('blank');\n  readonly enableHandTool = input<boolean | undefined>(undefined);\n  readonly annotationMode = input<AnnotationDisplayMode>('enabled');\n  readonly locale = input<string>('en');\n  readonly passwordProvider = input<((reason: number) => Promise<string | null>) | undefined>();\n  readonly loadingTemplate = input<TemplateRef<unknown> | null>(null);\n  readonly isLoading = signal(false);\n\n  readonly afterLoadComplete = output<PDFDocumentProxy>();\n  readonly pageRendered = output<CustomEvent>();\n  readonly pagesInitialized = output<CustomEvent>();\n  readonly textLayerRendered = output<CustomEvent>();\n  // eslint-disable-next-line @angular-eslint/no-output-native -- intentional breaking rename per v1 API\n  readonly error = output<PdfViewerError>();\n  // eslint-disable-next-line @angular-eslint/no-output-native -- intentional breaking rename per v1 API\n  readonly progress = output<PDFProgressData>();\n  readonly pageChange = output<number>();\n  readonly outlineLoaded = output<PDFOutlineItem[]>();\n  readonly searchResults = output<PdfSearchMatches | null>();\n\n  private readonly isVisible = signal(false);\n  private readonly isInitialized = signal(false);\n  private readonly latestScrolledPage = signal(0);\n  private pdfjsBundle: PDFJsBundle | null = null;\n  private destroyed = false;\n  private initializePromise: Promise<void> | null = null;\n  private loadRequestId = 0;\n\n  private readonly viewerReady = computed(() => this.isVisible() && this.isInitialized() && !!this.pdfjsBundle);\n  private readonly currentDocument = this.facade.currentDocument;\n\n  private readonly viewerState = computed((): ViewerSyncState | null => {\n    const doc = this.currentDocument();\n    if (!this.viewerReady() || !doc) return null;\n\n    return {\n      doc,\n      scale: this.getScaleConfig(),\n      reconfigure: {\n        renderText: this.renderText(),\n        renderTextMode: this.renderTextMode(),\n        annotationMode: this.resolveAnnotationMode(this.pdfjsBundle),\n      },\n      page: this.page(),\n      stickToPage: this.stickToPage(),\n      enableHandTool: this.facade.getEnableHandTool(this.enableHandTool()),\n    };\n  });\n\n  private readonly syncTracker: SyncStateTracker = {\n    lastReconfigureKey: '',\n    lastScaleKey: '',\n    lastEmittedDoc: null,\n    getLatestScrolledPage: () => this.latestScrolledPage(),\n    setLatestScrolledPage: (page) => this.latestScrolledPage.set(page),\n  };\n\n  constructor() {\n    if (isSSR()) return;\n\n    this.destroyRef.onDestroy(() => {\n      this.destroyed = true;\n      void this.cleanup();\n    });\n\n    effect(() => {\n      const src = this.src();\n      if (this.viewerReady() && src) this.loadPdf();\n    });\n\n    effect(() => {\n      const state = this.viewerState();\n      if (!state) return;\n      this.syncService.sync(state, this.syncTracker, {\n        container: this.containerRef()?.nativeElement ?? null,\n        scaleService: this.scaleService,\n        facade: this.facade,\n        onReconfigure: (config) => this.reconfigureViewer(config),\n        onHandTool: (enabled) => this.updateHandTool(enabled),\n        onLoadComplete: (doc) => {\n          this.afterLoadComplete.emit(doc);\n          void this.documentActions\n            .getOutline()\n            .then((outline) => this.outlineLoaded.emit(outline))\n            .catch(() => {});\n        },\n        onError: (err) => this.error.emit(toPdfViewerError(err)),\n      });\n    });\n\n    this.hostService.observeResize(\n      () => this.autoresize() && !!this.currentDocument(),\n      () => this.applyScaleUpdate(),\n    );\n    this.setupFacadeEventHandlers();\n  }\n\n  ngAfterViewInit(): void {\n    this.setupVisibilityObserver();\n  }\n\n  private setupVisibilityObserver(): void {\n    this.hostService.observeVisibility((visible) => {\n      if (visible && !this.isInitialized()) void this.initializeOnce();\n      this.isVisible.set(visible);\n    });\n  }\n\n  private initializeOnce(): Promise<void> {\n    this.initializePromise ??= this.doInitialize();\n    return this.initializePromise;\n  }\n\n  private async doInitialize(): Promise<void> {\n    if (this.isInitialized() || this.destroyed) return;\n    try {\n      const bundle = await this.pdfjs.load();\n      if (this.destroyed) return;\n      this.pdfjsBundle = bundle;\n      const container = this.containerRef()?.nativeElement;\n      if (!container) {\n        if (!this.destroyed) this.initializePromise = null;\n        return;\n      }\n      if (this.destroyed) return;\n      await this.initializeViewer(container);\n      if (!this.destroyed) this.isInitialized.set(true);\n    } catch (error) {\n      this.initializePromise = null;\n      if (!this.destroyed) this.error.emit(toPdfViewerError(error));\n    }\n  }\n\n  private async initializeViewer(container: HTMLDivElement): Promise<void> {\n    if (!this.pdfjsBundle) return;\n\n    const options: PdfViewerOptions = {\n      renderText: this.renderText(),\n      renderTextMode: this.renderTextMode(),\n      showBorders: this.showBorders(),\n      externalLinkTarget: this.externalLinkTarget(),\n      annotationMode: this.resolveAnnotationMode(this.pdfjsBundle),\n      locale: this.locale(),\n    };\n\n    await this.lifecycleService.initialize(this.facade, {\n      container,\n      pdfjsBundle: this.pdfjsBundle,\n      options,\n      events: {\n        pageRendered: (e) => this.pageRendered.emit(e),\n        pagesInitialized: (e) => this.pagesInitialized.emit(e),\n        textLayerRendered: (e) => this.textLayerRendered.emit(e),\n        pageChanging: (page) => {\n          const num = toIntegerPageNumber(page);\n          this.latestScrolledPage.set(num);\n          this.pageChange.emit(num);\n        },\n        searchMatchesChange: (matches) => this.searchResults.emit(matches),\n      },\n    });\n\n    // The initial configuration is applied above; record it so the first sync()\n    // does not trigger a redundant reconfigure. Reconstituting the viewer would\n    // create a second PDFFindController: the pages would keep highlighting from\n    // the new idle controller while search dispatches run through the old one.\n    this.syncTracker.lastReconfigureKey = this.getReconfigureKey(options);\n  }\n\n  private getReconfigureKey(\n    options: Pick<PdfViewerOptions, 'renderText' | 'renderTextMode' | 'annotationMode'>,\n  ): string {\n    return `${options.renderText}-${options.renderTextMode}-${options.annotationMode}`;\n  }\n\n  private async reconfigureViewer(config: ViewerSyncState['reconfigure']): Promise<void> {\n    if (this.destroyed) return;\n    if (!this.pdfjsBundle) return;\n\n    const container = this.containerRef()?.nativeElement;\n    if (!container) return;\n\n    await this.lifecycleService.reconfigure(\n      this.facade,\n      this.pdfjsBundle,\n      container,\n      config,\n      {\n        showBorders: this.showBorders(),\n        externalLinkTarget: this.externalLinkTarget(),\n        locale: this.locale(),\n      },\n      () => this.applyScaleUpdate(),\n      (err) => this.error.emit(toPdfViewerError(err)),\n    );\n  }\n\n  private applyScaleUpdate(): void {\n    const doc = this.currentDocument();\n    const container = this.containerRef()?.nativeElement;\n    const viewer = this.facade.getPdfViewer();\n    if (!doc || !container || !viewer) return;\n\n    const context: ScaleContext = {\n      container,\n      doc,\n      viewer,\n      onError: (err) => this.error.emit(toPdfViewerError(err)),\n    };\n    this.scaleService.updateScaleAndRender(this.facade, context, this.getScaleConfig());\n  }\n\n  private async loadPdf(): Promise<void> {\n    const src = this.src();\n    if (!src || !this.pdfjsBundle) return;\n\n    const requestId = ++this.loadRequestId;\n    this.isLoading.set(true);\n    const cMapsUrl = this.facade.getCMapsUrl(this.cMapsUrl());\n    try {\n      await this.facade.loadDocument(src, cMapsUrl, this.pdfjsBundle, this.passwordProvider());\n    } finally {\n      if (requestId === this.loadRequestId) this.isLoading.set(false);\n    }\n  }\n\n  /**\n   * Searches the loaded document for the given query via the PDF.js find controller.\n   */\n  search(query: string, options?: SearchOptions): void {\n    this.bridge.search(query, options);\n  }\n\n  /**\n   * Jumps to the next match for the most recent search.\n   */\n  findNext(): void {\n    this.bridge.findAgain(false);\n  }\n\n  /**\n   * Jumps to the previous match for the most recent search.\n   */\n  findPrevious(): void {\n    this.bridge.findAgain(true);\n  }\n\n  /**\n   * Clears the active search and its highlights.\n   */\n  clearSearch(): void {\n    this.bridge.clearSearch();\n    this.searchResults.emit(null);\n  }\n\n  /**\n   * Gets the document outline, or an empty array when none exists.\n   */\n  async getOutline(): Promise<PDFOutlineItem[]> {\n    return this.documentActions.getOutline();\n  }\n\n  /**\n   * Gets the metadata embedded in the current document.\n   */\n  async getMetadata(): Promise<PDFDocumentMetadata> {\n    return this.documentActions.getMetadata();\n  }\n\n  /**\n   * Navigates to an internal table-of-contents entry.\n   */\n  navigateToOutline(item: PDFOutlineItem): void {\n    this.documentActions.navigateToOutline(item);\n  }\n\n  /**\n   * Renders a thumbnail for the given page at a max width of 150px.\n   */\n  async getThumbnail(page: number): Promise<ThumbnailData> {\n    return this.documentActions.getThumbnail(page);\n  }\n\n  /**\n   * Downloads the current document's raw bytes as a PDF file.\n   */\n  async download(filename?: string): Promise<void> {\n    await this.documentActions.download(filename);\n  }\n\n  /**\n   * Prints the current document by loading it into a hidden iframe.\n   */\n  async print(): Promise<void> {\n    await this.documentActions.print();\n  }\n\n  /**\n   * Gets the number of pages in the current document (0 when none is loaded).\n   */\n  getPageCount(): number {\n    return this.documentActions.getPageCount();\n  }\n\n  private setupFacadeEventHandlers(): void {\n    effect(() => {\n      const err = this.facade.loadError();\n      if (err) this.error.emit(err);\n    });\n\n    effect(() => {\n      const progress = this.facade.loadProgress();\n      if (progress) this.progress.emit(progress);\n    });\n  }\n\n  private resolveAnnotationMode(bundle: PDFJsBundle | null): number {\n    const am = bundle?.AnnotationMode;\n    switch (this.annotationMode()) {\n      case 'none':\n        return 0;\n      case 'forms':\n        return am?.ENABLE_FORMS ?? 2;\n      case 'storage':\n        return am?.ENABLE_STORAGE ?? 3;\n      case 'enabled':\n      default:\n        return am?.ENABLE ?? 1;\n    }\n  }\n\n  private getScaleConfig(): ViewerSyncState['scale'] {\n    return {\n      zoom: this.zoom(),\n      zoomScale: this.zoomScale(),\n      rotation: this.rotation(),\n      originalSize: this.originalSize(),\n      fitToPage: this.fitToPage(),\n      showBorders: this.showBorders(),\n    };\n  }\n\n  private updateHandTool(enabled: boolean): void {\n    const container = this.containerRef()?.nativeElement;\n    if (!container) return;\n\n    this.hostService.setHandTool(container, enabled);\n  }\n\n  private async cleanup(): Promise<void> {\n    this.hostService.clearHandTool();\n    this.syncTracker.lastReconfigureKey = '';\n    this.syncTracker.lastScaleKey = '';\n    this.syncTracker.lastEmittedDoc = null;\n    await this.facade.cleanup();\n  }\n}\n","<div #pdfViewerContainer class=\"ngx-pdf-viewer-container\" [attr.aria-busy]=\"isLoading()\">\n  <div class=\"pdfViewer\"></div>\n  @if (isLoading()) {\n    @if (loadingTemplate(); as template) {\n      <ng-container [ngTemplateOutlet]=\"template\" />\n    } @else {\n      <div class=\"pdf-viewer-loading\" role=\"status\" aria-live=\"polite\">Loading document...</div>\n    }\n  }\n</div>\n","/**\n * ngx-pdf-viewer - Headless Angular PDF Viewer Library\n */\n\n// Component + config\nexport { PdfViewerComponent } from './viewer/viewer-component';\nexport { isSSR, PDF_VIEWER_CONFIG, providePdfViewerConfig } from './core/config/viewer-config';\nexport { PdfjsService } from './viewer/services/viewer-pdfjs.service';\n\n// Errors\nexport { PdfViewerError, toPdfViewerError } from './core/models/viewer-error.model';\nexport type { PdfViewerErrorCode } from './core/models/viewer-error.model';\n\n// Models\nexport type {\n  DocumentParamsInput,\n  PDFDocumentLoadingTask,\n  PDFDocumentMetadata,\n  PDFDocumentParameters,\n  PDFDocumentProxy,\n  PDFPageProxy,\n  PDFProgressData,\n  PDFSource,\n  PDFOutlineItem,\n} from './core/models/pdf-document.model';\nexport {\n  RenderTextMode,\n  type AnnotationDisplayMode,\n  type ExternalLinkTarget,\n  type HandToolCleanup,\n  type PdfSearchMatches,\n  type PdfViewerOptions,\n  type PdfViewerConfig,\n  type ScaleCalculationParams,\n  type SearchOptions,\n  type ThumbnailData,\n  type ZoomScale,\n} from './core/models/viewer.model';\nexport type {\n  EventBus,\n  PDFFindController,\n  PDFJsBundle,\n  PDFJsLib,\n  PDFJsViewer,\n  PDFLinkService,\n  PDFViewer,\n} from './core/models/pdfjs-api.model';\n\n// Constants\nexport {\n  BORDER_WIDTH,\n  CSS_UNITS,\n  PAGE_CHANGE_DEBOUNCE_TIME,\n  RESIZE_DEBOUNCE_TIME,\n  SCALE_INCREMENT,\n} from './core/constants/viewer-constants';\n\n// Utils\nexport { createEventBus } from './core/utils/pdf-event-bus';\nexport { setupHandTool } from './core/utils/pdf-hand-tool';\nexport { buildDocumentParams, isValidPdfSource } from './core/utils/pdf-document-params';\nexport {\n  calculatePdfScale,\n  normalizePageNumber,\n  roundScaleToIncrement,\n  toIntegerPageNumber,\n} from './core/utils/pdf-scale';\nexport {\n  ensureStylesheetLoaded,\n  ensureWorkerConfigured,\n  PDFJS_VERSION,\n  resolveCdnBaseUrl,\n  resolveDefaultCMapsUrl,\n  resolveDefaultIccUrl,\n  resolveDefaultStandardFontDataUrl,\n  resolveDefaultWasmUrl,\n  resolveDefaultWorkerSrc,\n} from './core/utils/pdf-worker';\nexport { renderPageThumbnail, THUMBNAIL_MAX_WIDTH } from './core/utils/pdf-thumbnail';\nexport { downloadBytes, printBytes } from './core/utils/pdf-file-actions';\n","/**\n * Public API Surface of ngx-pdf-viewer\n */\n\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}