{"version":3,"file":"img-pdf-viewer.mjs","sources":["../../../projects/img-pdf-viewer/src/lib/Common.constant.ts","../../../projects/img-pdf-viewer/src/lib/icons/icons.constant.ts","../../../projects/img-pdf-viewer/src/lib/utils.ts","../../../projects/img-pdf-viewer/src/lib/img-pdf-viewer.service.ts","../../../projects/img-pdf-viewer/src/lib/error-boundary.service.ts","../../../projects/img-pdf-viewer/src/lib/modal/modal.component.ts","../../../projects/img-pdf-viewer/src/lib/modal/modal.component.html","../../../projects/img-pdf-viewer/src/lib/safe-html.pipe.ts","../../../projects/img-pdf-viewer/src/lib/toolbar.component.ts","../../../projects/img-pdf-viewer/src/lib/pdf-config.ts","../../../projects/img-pdf-viewer/src/lib/pdf-viewer.component.ts","../../../projects/img-pdf-viewer/src/lib/image-viewer.component.ts","../../../projects/img-pdf-viewer/src/lib/img-pdf-viewer.component.ts","../../../projects/img-pdf-viewer/src/lib/img-pdf-viewer.component.html","../../../projects/img-pdf-viewer/src/lib/img-pdf-viewer.module.ts","../../../projects/img-pdf-viewer/src/public-api.ts","../../../projects/img-pdf-viewer/src/img-pdf-viewer.ts"],"sourcesContent":["export class CommonConstant {\n  public static readonly BOOLEAN = 'boolean';\n  public static readonly PDFTYPE = 'pdf';\n  public static readonly IMAGETYPE = 'image';\n  public static readonly LARGEMODAL = 'lg';\n}\n","export const Icons = {\n  zoomIn:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line></svg>',\n\n  zoomOut:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line></svg>',\n\n  rotateLeft:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"></path><path d=\"M3 3v5h5\"></path></svg>',\n\n  rotateRight:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a9 9 0 1 1-9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"></path><path d=\"M21 3v5h-5\"></path></svg>',\n\n  download:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"7 10 12 15 17 10\"></polyline><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line></svg>',\n\n  fullscreen:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"></path></svg>',\n\n  fullscreenExit:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"></path></svg>',\n\n  prevPage:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"></polyline></svg>',\n\n  nextPage:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>',\n\n  externalLink:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line></svg>',\n\n  viewSingle:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect></svg>',\n\n  viewContinuous:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect></svg>',\n\n  file: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\"></path><polyline points=\"13 2 13 9 20 9\"></polyline></svg>',\n\n  noDocument:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"></line><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"></line><polyline points=\"10 9 9 9 8 9\"></polyline></svg>',\n\n  unsupported:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"></path><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line></svg>',\n\n  error:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"></path><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"></line><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line></svg>',\n\n  retry:\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"23 4 23 10 17 10\"></polyline><polyline points=\"1 20 1 14 7 14\"></polyline><path d=\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\"></path></svg>',\n};\n","import { DocumentType, DocumentInfo } from './types';\n\n/**\n * Detect document type from URL or file extension\n */\nexport function detectDocumentType(url: string): DocumentType {\n  const extension = getFileExtension(url);\n\n  switch (extension.toLowerCase()) {\n    case 'pdf':\n      return 'pdf';\n    case 'jpg':\n    case 'jpeg':\n    case 'png':\n    case 'gif':\n    case 'webp':\n    case 'svg':\n    case 'bmp':\n    case 'tiff':\n    case 'ico':\n      return 'image';\n    default:\n      // Industrial Heuristics: Look for markers anywhere in the path\n      if (!url) return 'unknown';\n      const lowerUrl = url.toLowerCase().split('?')[0];\n\n      // PDF markers (very likely to be a PDF)\n      const isLikelyPdf =\n        lowerUrl.includes('/pdf') ||\n        lowerUrl.includes('pdf/') ||\n        lowerUrl.includes('=pdf') ||\n        lowerUrl.includes('format=pdf') ||\n        lowerUrl.includes('document/pdf');\n\n      if (isLikelyPdf) return 'pdf';\n\n      // Image markers (likely to be an image)\n      const isLikelyImage =\n        lowerUrl.includes('/image') ||\n        lowerUrl.includes('/img') ||\n        lowerUrl.includes('images/') ||\n        lowerUrl.includes('format=jpg') ||\n        lowerUrl.includes('format=png');\n\n      if (isLikelyImage) return 'image';\n\n      return 'unknown';\n  }\n}\n\n/**\n * Detect document type from content-type header\n */\nexport function detectDocumentTypeFromContentType(\n  contentType: string\n): DocumentType {\n  if (!contentType) return 'unknown';\n\n  const type = contentType.toLowerCase();\n\n  if (type.includes('application/pdf')) {\n    return 'pdf';\n  }\n\n  if (type.includes('image/')) {\n    return 'image';\n  }\n\n  return 'unknown';\n}\n\n/**\n * Detect document type by file signature using proxy\n */\nasync function detectDocumentTypeBySignature(\n  url: string,\n  proxyUrl?: string\n): Promise<DocumentType> {\n  try {\n    const proxiedUrl = await tryLoadWithProxy(url, proxyUrl);\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), 5000);\n\n    const response = await fetch(proxiedUrl, {\n      method: 'GET',\n      signal: controller.signal,\n      headers: {\n        Range: 'bytes=0-1023', // Only fetch first 1KB\n      },\n    });\n\n    clearTimeout(timeoutId);\n\n    if (response.ok) {\n      const arrayBuffer = await response.arrayBuffer();\n      const uint8Array = new Uint8Array(arrayBuffer);\n\n      // Check for PDF signature (%PDF)\n      if (\n        uint8Array.length >= 4 &&\n        uint8Array[0] === 0x25 && // %\n        uint8Array[1] === 0x50 && // P\n        uint8Array[2] === 0x44 && // D\n        uint8Array[3] === 0x46\n      ) {\n        // F\n        return 'pdf';\n      }\n\n      // Check for image signatures\n      if (uint8Array.length >= 8) {\n        // JPEG signature: FF D8 FF\n        if (\n          uint8Array[0] === 0xff &&\n          uint8Array[1] === 0xd8 &&\n          uint8Array[2] === 0xff\n        ) {\n          return 'image';\n        }\n\n        // PNG signature: 89 50 4E 47 0D 0A 1A 0A\n        if (\n          uint8Array[0] === 0x89 &&\n          uint8Array[1] === 0x50 &&\n          uint8Array[2] === 0x4e &&\n          uint8Array[3] === 0x47\n        ) {\n          return 'image';\n        }\n      }\n    }\n  } catch (error) {\n    // Signature detection failed\n  }\n\n  return 'unknown';\n}\n\n/**\n * Async document type detection using content-type header\n */\nexport async function detectDocumentTypeAsync(\n  url: string,\n  proxyUrl?: string\n): Promise<DocumentType> {\n  // First try extension-based detection\n  const extensionType = detectDocumentType(url);\n  if (extensionType !== 'unknown') {\n    return extensionType;\n  }\n\n  // For URLs without extension, try to detect from content-type\n  // First try direct access\n  try {\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), 3000);\n\n    const response = await fetch(url, {\n      method: 'HEAD',\n      signal: controller.signal,\n      mode: 'cors',\n    });\n\n    if (response.ok) {\n      const contentType = response.headers.get('content-type');\n      const detectedType = detectDocumentTypeFromContentType(contentType || '');\n\n      if (detectedType !== 'unknown') {\n        return detectedType;\n      }\n    }\n  } catch (error) {\n    // Direct content-type detection failed\n  }\n\n  // If direct access fails due to CORS, try with proxy\n  try {\n    const proxiedUrl = proxyUrl\n      ? `${proxyUrl}${encodeURIComponent(url)}`\n      : await tryLoadWithProxy(url);\n    if (proxiedUrl !== url) {\n      const controller = new AbortController();\n      const timeoutId = setTimeout(() => controller.abort(), 5000);\n\n      const response = await fetch(proxiedUrl, {\n        method: 'HEAD',\n        signal: controller.signal,\n        mode: 'cors',\n      });\n\n      clearTimeout(timeoutId);\n\n      if (response.ok) {\n        const contentType = response.headers.get('content-type');\n        const detectedType = detectDocumentTypeFromContentType(\n          contentType || ''\n        );\n\n        if (detectedType !== 'unknown') {\n          return detectedType;\n        }\n      }\n    }\n  } catch (error) {\n    // Proxy content-type detection failed\n  }\n\n  // Final fallback: try to detect by file signature using proxy\n  const signatureType = await detectDocumentTypeBySignature(url, proxyUrl);\n  if (signatureType !== 'unknown') {\n    return signatureType;\n  }\n\n  return 'unknown';\n}\n\n/**\n * Extract file extension from URL (segment-aware and parameters-safe)\n */\nexport function getFileExtension(url: string): string {\n  if (!url) return '';\n  try {\n    const urlWithoutParams = url.split('?')[0].split('#')[0];\n    const parts = urlWithoutParams.split('/');\n    const lastSegment = parts[parts.length - 1];\n    const dotIndex = lastSegment.lastIndexOf('.');\n    if (dotIndex > 0 && dotIndex < lastSegment.length - 1) {\n      return lastSegment.substring(dotIndex + 1).toLowerCase();\n    }\n  } catch (e) {\n    // Fallback to simple split if URL is weird\n    const cleanUrl = url.split('?')[0];\n    const pieces = cleanUrl.split('.');\n    if (pieces.length > 1) return pieces[pieces.length - 1].toLowerCase();\n  }\n  return '';\n}\n\n/**\n * Extract filename from URL\n */\nexport function getFileName(url: string): string {\n  const cleanUrl = url.split('?')[0];\n  const parts = cleanUrl.split('/');\n  return parts[parts.length - 1] || 'document';\n}\n\n/**\n * Format file size in human readable format\n */\nexport function formatFileSize(bytes: number): string {\n  if (bytes === 0) return '0 Bytes';\n\n  const k = 1024;\n  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n  return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\n}\n\n/**\n * Check if document type supports pagination\n */\nexport function supportsPagination(type: DocumentType): boolean {\n  return ['pdf'].includes(type);\n}\n\n/**\n * Check if document type supports zoom\n */\nexport function supportsZoom(type: DocumentType): boolean {\n  return ['pdf', 'image'].includes(type);\n}\n\n/**\n * Check if document type supports rotation\n */\nexport function supportsRotation(type: DocumentType): boolean {\n  return ['pdf', 'image'].includes(type);\n}\n\n/**\n * Check if URL string is valid\n */\nexport function isValidUrl(url: string): boolean {\n  if (!url || typeof url !== 'string') return false;\n\n  // Data URLs (e.g., base64 PDFs)\n  if (url.startsWith('data:')) return true;\n\n  // Blob/Object URLs\n  if (url.startsWith('blob:')) return true;\n\n  // Absolute http(s) URLs\n  if (/^https?:\\/\\//i.test(url)) return true;\n\n  // Root-relative or relative paths for assets served from public\n  if (url.startsWith('/') || url.startsWith('./') || url.startsWith('../'))\n    return true;\n\n  // As a last resort, try URL parsing with current origin if available\n  try {\n    const base =\n      typeof window !== 'undefined'\n        ? window.location.origin\n        : 'http://localhost';\n    new URL(url, base);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Create download link for a document\n */\nexport async function downloadDocument(\n  url: string,\n  filename?: string\n): Promise<void> {\n  try {\n    // For cross-origin URLs, fetch as blob first\n    const response = await fetch(url);\n    if (!response.ok) {\n      throw new Error(`Failed to fetch document: ${response.statusText}`);\n    }\n\n    const blob = await response.blob();\n    const blobUrl = URL.createObjectURL(blob);\n\n    const link = document.createElement('a');\n    link.href = blobUrl;\n    link.download = filename || getFileName(url);\n\n    // Append to body, click, and remove\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n\n    // Clean up blob URL after a delay\n    setTimeout(() => URL.revokeObjectURL(blobUrl), 100);\n  } catch (error) {\n    // Fallback: open in new tab if download fails\n    window.open(url, '_blank');\n  }\n}\n\n/**\n * Enter fullscreen mode\n */\nexport function enterFullscreen(element: HTMLElement): Promise<void> {\n  if (element.requestFullscreen) {\n    return element.requestFullscreen();\n  } else if ((element as any).webkitRequestFullscreen) {\n    return (element as any).webkitRequestFullscreen();\n  } else if ((element as any).msRequestFullscreen) {\n    return (element as any).msRequestFullscreen();\n  } else if ((element as any).mozRequestFullScreen) {\n    return (element as any).mozRequestFullScreen();\n  }\n  return Promise.reject('Fullscreen not supported');\n}\n\n/**\n * Exit fullscreen mode\n */\nexport function exitFullscreen(): Promise<void> {\n  if (document.exitFullscreen) {\n    return document.exitFullscreen();\n  } else if ((document as any).webkitExitFullscreen) {\n    return (document as any).webkitExitFullscreen();\n  } else if ((document as any).msExitFullscreen) {\n    return (document as any).msExitFullscreen();\n  } else if ((document as any).mozCancelFullScreen) {\n    return (document as any).mozCancelFullScreen();\n  }\n  return Promise.reject('Exit fullscreen not supported');\n}\n\n/**\n * Check if currently in fullscreen mode\n */\nexport function isFullscreen(): boolean {\n  return !!(\n    document.fullscreenElement ||\n    (document as any).webkitFullscreenElement ||\n    (document as any).msFullscreenElement ||\n    (document as any).mozFullScreenElement\n  );\n}\n\n/**\n * Check if a URL is external (not from the same origin)\n */\nexport function isExternalUrl(url: string): boolean {\n  // Skip data URLs\n  if (url.startsWith('data:')) {\n    return false;\n  }\n\n  try {\n    const urlObj = new URL(url);\n    const currentOrigin = window.location.origin;\n    return urlObj.origin !== currentOrigin;\n  } catch (e) {\n    // If URL parsing fails, assume it's a relative URL (internal)\n    return false;\n  }\n}\n\n/**\n * Apply a CORS proxy to an external URL\n */\nexport function applyCorsProxy(url: string, proxyIndex = 0): string {\n  const CORS_PROXIES = [\n    'https://api.allorigins.win/raw?url=',\n    'https://corsproxy.io/?',\n    'https://cors-anywhere.herokuapp.com/',\n    'https://thingproxy.freeboard.io/fetch/',\n    'https://cors.bridged.cc/',\n  ];\n\n  // Skip for data URLs or internal URLs\n  if (url.startsWith('data:') || !isExternalUrl(url)) {\n    return url;\n  }\n\n  // Use a proxy service to bypass CORS\n  const proxy = CORS_PROXIES[proxyIndex % CORS_PROXIES.length];\n  return `${proxy}${encodeURIComponent(url)}`;\n}\n\n/**\n * Try loading a URL through different CORS proxies\n */\nexport async function tryLoadWithProxy(\n  url: string,\n  customProxyUrl?: string\n): Promise<string> {\n  // Skip for data URLs or internal URLs\n  if (url.startsWith('data:') || !isExternalUrl(url)) {\n    return url;\n  }\n\n  // Smart Proxy Strategy:\n  // 1. Try direct URL with CORS mode first.\n  // 2. If it works, we don't need a proxy (avoiding proxy bottlenecks).\n  // 3. Only if direct fails, we use the user-provided proxy or public ones.\n  try {\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), 3000); // Quick check\n\n    const response = await fetch(url, {\n      method: 'HEAD',\n      signal: controller.signal,\n      mode: 'cors',\n    });\n\n    clearTimeout(timeoutId);\n    if (response.ok) {\n      return url; // Directly accessible!\n    }\n  } catch (e) {\n    // Direct access failed, will proceed to proxy\n  }\n\n  // Use custom proxy if provided\n  if (customProxyUrl) {\n    return `${customProxyUrl}${encodeURIComponent(url)}`;\n  }\n\n  // For images, if custom proxy is NOT provided, we have one more trick:\n  // Try direct access WITHOUT CORS (img tags often work fine where fetch fails)\n  const documentType = detectDocumentType(url);\n  if (documentType === 'image') {\n    try {\n      const controller = new AbortController();\n      const timeoutId = setTimeout(() => controller.abort(), 3000);\n\n      const response = await fetch(url, {\n        method: 'HEAD',\n        signal: controller.signal,\n      });\n\n      clearTimeout(timeoutId);\n      if (response.ok) {\n        return url;\n      }\n    } catch (e) {\n      // Direct non-CORS access failed\n    }\n  }\n\n  // Try each proxy with timeout\n  const CORS_PROXIES = [\n    'https://api.allorigins.win/raw?url=',\n    'https://corsproxy.io/?',\n    'https://cors-anywhere.herokuapp.com/',\n    'https://thingproxy.freeboard.io/fetch/',\n    'https://cors.bridged.cc/',\n  ];\n\n  for (let i = 0; i < CORS_PROXIES.length; i++) {\n    const proxiedUrl = applyCorsProxy(url, i);\n    try {\n      const controller = new AbortController();\n      const timeoutId = setTimeout(() => controller.abort(), 8000); // 8 second timeout for proxies\n\n      const response = await fetch(proxiedUrl, {\n        method: 'HEAD',\n        signal: controller.signal,\n        mode: 'cors',\n      });\n\n      clearTimeout(timeoutId);\n      if (response.ok) {\n        return proxiedUrl;\n      }\n    } catch (e) {\n      // Proxy failed\n      continue;\n    }\n  }\n\n  // If all proxies fail, return the original URL\n  return url;\n}\n\n/**\n * Create a blob URL from a data URL\n */\nexport function createBlobFromDataUrl(dataUrl: string): string | null {\n  try {\n    const base64Data = dataUrl.split(',')[1];\n    const binaryData = atob(base64Data);\n    const array = new Uint8Array(binaryData.length);\n\n    for (let i = 0; i < binaryData.length; i++) {\n      array[i] = binaryData.charCodeAt(i);\n    }\n\n    const blob = new Blob([array], { type: 'application/pdf' });\n    return URL.createObjectURL(blob);\n  } catch (error) {\n    return null;\n  }\n}\n\n/**\n * Revoke a blob URL to prevent memory leaks\n */\nexport function revokeBlobUrl(url: string): void {\n  if (url.startsWith('blob:')) {\n    URL.revokeObjectURL(url);\n  }\n}\n\n/**\n * Get document info from URL\n */\nexport function getDocumentInfo(url: string, type: DocumentType): DocumentInfo {\n  return {\n    type,\n    fileName: getFileName(url),\n  };\n}\n\n/**\n * Debounce function for performance optimization\n */\nexport function debounce<T extends (...args: any[]) => any>(\n  func: T,\n  wait: number\n): (...args: Parameters<T>) => void {\n  let timeout: any;\n  return (...args: Parameters<T>) => {\n    clearTimeout(timeout);\n    timeout = setTimeout(() => func.apply(this, args), wait);\n  };\n}\n\n/**\n * Throttle function for performance optimization\n */\nexport function throttle<T extends (...args: any[]) => any>(\n  func: T,\n  limit: number\n): (...args: Parameters<T>) => void {\n  let inThrottle: boolean;\n  return (...args: Parameters<T>) => {\n    if (!inThrottle) {\n      func.apply(this, args);\n      inThrottle = true;\n      setTimeout(() => (inThrottle = false), limit);\n    }\n  };\n}\n","import { Injectable } from '@angular/core';\nimport { DocumentType } from './types';\nimport {\n  downloadDocument,\n  getFileName,\n  detectDocumentType,\n  isValidUrl,\n  createBlobFromDataUrl,\n  revokeBlobUrl,\n} from './utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ImgPdfViewerService {\n  constructor() {}\n\n  /**\n   * Download a blob URL\n   */\n  downloadBlob(blob: string, fileName: string): void {\n    const link = document.createElement('a');\n    link.download = fileName;\n    link.href = blob;\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n  }\n\n  /**\n   * Download a resource from URL\n   */\n  async downloadResource(url: string, fileName: string = ''): Promise<void> {\n    if (!url) {\n      return;\n    }\n\n    if (!fileName) {\n      fileName = this.getFileName(url);\n    }\n\n    // Use the utility function for better error handling\n    await downloadDocument(url, fileName);\n  }\n\n  /**\n   * Get file name from URL\n   */\n  getFileName(url: string): string {\n    return getFileName(url);\n  }\n\n  /**\n   * Check file type from URL or filename\n   */\n  fileTypeChecker(file: string): DocumentType {\n    if (!file) {\n      return 'unknown';\n    }\n\n    const extension = file.split('.').pop()?.toLowerCase();\n    if (!extension) {\n      return 'unknown';\n    }\n\n    const imageExtensions = [\n      'png',\n      'jpeg',\n      'jpg',\n      'gif',\n      'webp',\n      'svg',\n      'bmp',\n      'tiff',\n      'ico',\n      'apng',\n    ];\n\n    if (extension === 'pdf') {\n      return 'pdf';\n    } else if (imageExtensions.includes(extension)) {\n      return 'image';\n    } else {\n      return 'unknown';\n    }\n  }\n\n  /**\n   * Open blob in new window\n   */\n  openBlobInNewWindow(url: string): void {\n    if (!url) {\n      return;\n    }\n\n    // For data URLs, convert to blob URL first\n    if (url.startsWith('data:')) {\n      const blobUrl = createBlobFromDataUrl(url);\n      if (blobUrl) {\n        window.open(blobUrl, '_blank', 'noopener,noreferrer');\n        // Clean up blob URL after a delay\n        setTimeout(() => revokeBlobUrl(blobUrl), 1000);\n        return;\n      }\n    }\n\n    // For regular URLs, try to fetch and create blob\n    fetch(url, {\n      headers: new Headers({\n        Origin: location.origin,\n      }),\n      mode: 'cors',\n    })\n      .then((response) => {\n        if (!response.ok) {\n          throw new Error(`HTTP error! status: ${response.status}`);\n        }\n        return response.blob();\n      })\n      .then((blob) => {\n        const blobUrl = URL.createObjectURL(blob);\n        window.open(blobUrl, '_blank', 'noopener,noreferrer');\n        // Clean up blob URL after a delay\n        setTimeout(() => revokeBlobUrl(blobUrl), 1000);\n      })\n      .catch((error) => {\n        // Fallback: try to open the original URL\n        window.open(url, '_blank', 'noopener,noreferrer');\n      });\n  }\n\n  /**\n   * Validate URL\n   */\n  isValidUrl(url: string): boolean {\n    return isValidUrl(url);\n  }\n\n  /**\n   * Detect document type\n   */\n  detectDocumentType(url: string): DocumentType {\n    return detectDocumentType(url);\n  }\n\n  /**\n   * Get file size from URL (if accessible)\n   */\n  async getFileSize(url: string): Promise<number | null> {\n    try {\n      const response = await fetch(url, { method: 'HEAD' });\n      const contentLength = response.headers.get('content-length');\n      return contentLength ? parseInt(contentLength, 10) : null;\n    } catch (error) {\n      return null;\n    }\n  }\n\n  /**\n   * Get MIME type from URL\n   */\n  async getMimeType(url: string): Promise<string | null> {\n    try {\n      const response = await fetch(url, { method: 'HEAD' });\n      return response.headers.get('content-type');\n    } catch (error) {\n      return null;\n    }\n  }\n\n  /**\n   * Check if URL is accessible\n   */\n  async isUrlAccessible(url: string): Promise<boolean> {\n    try {\n      const response = await fetch(url, { method: 'HEAD' });\n      return response.ok;\n    } catch (error) {\n      return false;\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ErrorInfo } from './types';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ErrorBoundaryService {\n  private errorSubject = new BehaviorSubject<ErrorInfo | null>(null);\n  public error$ = this.errorSubject.asObservable();\n\n  /**\n   * Report an error to the error boundary\n   */\n  reportError(error: Error | string, context?: string): void {\n    const errorInfo: ErrorInfo = {\n      message: typeof error === 'string' ? error : error.message,\n      code:\n        typeof error === 'object' && 'code' in error\n          ? (error as any).code\n          : undefined,\n      details: typeof error === 'object' ? error : { context },\n      timestamp: new Date(),\n      retryable: this.isRetryableError(error),\n    };\n\n    this.errorSubject.next(errorInfo);\n  }\n\n  /**\n   * Clear the current error\n   */\n  clearError(): void {\n    this.errorSubject.next(null);\n  }\n\n  /**\n   * Check if an error is retryable\n   */\n  private isRetryableError(error: Error | string): boolean {\n    if (typeof error === 'string') {\n      return (\n        error.includes('network') ||\n        error.includes('timeout') ||\n        error.includes('CORS')\n      );\n    }\n\n    const message = error.message?.toLowerCase() || '';\n    return (\n      message.includes('network') ||\n      message.includes('timeout') ||\n      message.includes('cors') ||\n      message.includes('fetch')\n    );\n  }\n\n  /**\n   * Get current error\n   */\n  getCurrentError(): ErrorInfo | null {\n    return this.errorSubject.value;\n  }\n}\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  ElementRef,\n  HostListener,\n} from '@angular/core';\n\n@Component({\n  selector: 'lib-custom-modal',\n  templateUrl: './modal.component.html',\n  styleUrls: ['./modal.component.css'],\n})\nexport class CustomModalComponent {\n  @Input() size:\n    | 'xs'\n    | 'sm'\n    | 'md'\n    | 'lg'\n    | 'xl'\n    | '2xl'\n    | '3xl'\n    | '4xl'\n    | '5xl'\n    | 'full' = 'md';\n  @Input() title: string = '';\n  @Input() isOpen: boolean = false;\n\n  @Output() close = new EventEmitter<void>();\n\n  constructor(private elementRef: ElementRef) {}\n\n  onClose(): void {\n    this.close.emit();\n  }\n\n  // Close when clicking backdrop\n  @HostListener('document:keydown.escape', ['$event'])\n  onEscapeKey(event: KeyboardEvent) {\n    if (this.isOpen) {\n      this.onClose();\n    }\n  }\n\n  onBackdropClick(event: MouseEvent): void {\n    // Only close if the click was directly on the backdrop (not inside the modal)\n    if ((event.target as HTMLElement).classList.contains('modal-backdrop')) {\n      this.onClose();\n    }\n  }\n}\n","<div class=\"modal-backdrop\" *ngIf=\"isOpen\" (click)=\"onBackdropClick($event)\">\n  <div class=\"modal-content\" [ngClass]=\"'modal-' + size\">\n    <div class=\"modal-header\" *ngIf=\"title\">\n      <h3>{{ title }}</h3>\n      <button class=\"close-btn\" (click)=\"onClose()\">&times;</button>\n    </div>\n    \n    <div class=\"modal-body\">\n      <ng-content></ng-content>\n    </div>\n    \n    <!-- Optional Footer if needed -->\n    <!-- <div class=\"modal-footer\"></div> -->\n  </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({\n  name: 'safeHtml',\n})\nexport class SafeHtmlPipe implements PipeTransform {\n  constructor(private sanitizer: DomSanitizer) {}\n\n  transform(html: string): SafeHtml {\n    return this.sanitizer.bypassSecurityTrustHtml(html);\n  }\n}\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n} from '@angular/core';\nimport { DocumentType, ViewerState, ToolbarAction } from './types';\nimport { supportsPagination, supportsZoom, supportsRotation } from './utils';\nimport { Icons } from './icons/icons.constant';\n\n@Component({\n  selector: 'ngx-document-toolbar',\n  template: `\n    <div class=\"document-toolbar\" [class.embedded]=\"embedded\">\n      <!-- Main toolbar with action buttons -->\n      <div class=\"toolbar-main\">\n        <!-- Left section - Page navigation and view mode toggle -->\n        <div class=\"toolbar-section toolbar-left\">\n          <!-- Page Navigation -->\n          <div *ngIf=\"canPaginate\" class=\"page-navigation\">\n            <button\n              class=\"toolbar-btn\"\n              [disabled]=\"\n                state.currentPage <= 1 || state.viewMode === 'continuous'\n              \"\n              (click)=\"handlePreviousPage()\"\n              [attr.aria-label]=\"'Previous page'\"\n              title=\"Previous page\"\n            >\n              <div\n                class=\"svg-icon\"\n                [innerHTML]=\"icons.prevPage | safeHtml\"\n              ></div>\n            </button>\n\n            <div class=\"page-info\">\n              <span class=\"current-page\">{{ state.currentPage || 1 }}</span>\n              <span class=\"separator\">/</span>\n              <span class=\"total-pages\">{{ state.totalPages || 1 }}</span>\n            </div>\n\n            <button\n              class=\"toolbar-btn\"\n              [disabled]=\"\n                state.currentPage >= state.totalPages ||\n                state.viewMode === 'continuous'\n              \"\n              (click)=\"handleNextPage()\"\n              [attr.aria-label]=\"'Next page'\"\n              title=\"Next page\"\n            >\n              <div\n                class=\"svg-icon\"\n                [innerHTML]=\"icons.nextPage | safeHtml\"\n              ></div>\n            </button>\n          </div>\n\n          <!-- View Mode Toggle - Only for PDFs -->\n          <button\n            *ngIf=\"documentType === 'pdf' && showViewModeToggle\"\n            class=\"toolbar-btn view-mode-btn\"\n            (click)=\"handleToggleViewMode()\"\n            [attr.aria-label]=\"\n              state.viewMode === 'single'\n                ? 'Switch to continuous scroll'\n                : 'Switch to single page'\n            \"\n            [title]=\"\n              state.viewMode === 'single'\n                ? 'Switch to continuous scroll'\n                : 'Switch to single page'\n            \"\n          >\n            <div\n              class=\"svg-icon\"\n              [innerHTML]=\"\n                (state.viewMode === 'single'\n                  ? icons.viewContinuous\n                  : icons.viewSingle\n                ) | safeHtml\n              \"\n            ></div>\n          </button>\n        </div>\n\n        <!-- Center section - Zoom controls -->\n        <div *ngIf=\"canZoom && showZoom\" class=\"toolbar-section toolbar-center\">\n          <div class=\"zoom-controls\">\n            <button\n              class=\"toolbar-btn\"\n              [disabled]=\"state.zoom <= 25\"\n              (click)=\"handleZoomOut()\"\n              [attr.aria-label]=\"'Zoom out'\"\n              title=\"Zoom out\"\n            >\n              <div\n                class=\"svg-icon\"\n                [innerHTML]=\"icons.zoomOut | safeHtml\"\n              ></div>\n            </button>\n\n            <button\n              class=\"toolbar-btn zoom-display\"\n              (click)=\"handleZoomReset()\"\n              [attr.aria-label]=\"'Reset zoom'\"\n              title=\"Reset zoom\"\n            >\n              {{ Math.round(state.zoom) }}%\n            </button>\n\n            <button\n              class=\"toolbar-btn\"\n              [disabled]=\"state.zoom >= 300\"\n              (click)=\"handleZoomIn()\"\n              [attr.aria-label]=\"'Zoom in'\"\n              title=\"Zoom in\"\n            >\n              <div class=\"svg-icon\" [innerHTML]=\"icons.zoomIn | safeHtml\"></div>\n            </button>\n          </div>\n        </div>\n\n        <!-- Right section - Action buttons -->\n        <div class=\"toolbar-section toolbar-right\">\n          <!-- Rotation controls -->\n          <div *ngIf=\"canRotate && showRotation\" class=\"rotation-controls\">\n            <button\n              class=\"toolbar-btn\"\n              (click)=\"handleRotateLeft()\"\n              [attr.aria-label]=\"'Rotate left'\"\n              title=\"Rotate left\"\n            >\n              <div\n                class=\"svg-icon\"\n                [innerHTML]=\"icons.rotateLeft | safeHtml\"\n              ></div>\n            </button>\n\n            <button\n              class=\"toolbar-btn\"\n              (click)=\"handleRotateRight()\"\n              [attr.aria-label]=\"'Rotate right'\"\n              title=\"Rotate right\"\n            >\n              <div\n                class=\"svg-icon\"\n                [innerHTML]=\"icons.rotateRight | safeHtml\"\n              ></div>\n            </button>\n          </div>\n\n          <!-- Divider -->\n          <div\n            *ngIf=\"\n              canRotate &&\n              showRotation &&\n              (showDownload || showInNewTab || showFullscreen)\n            \"\n            class=\"divider\"\n          ></div>\n\n          <!-- Download button -->\n          <button\n            *ngIf=\"showDownload\"\n            class=\"toolbar-btn download-btn\"\n            (click)=\"handleDownload()\"\n            [attr.aria-label]=\"'Download document'\"\n            title=\"Download document\"\n          >\n            <div class=\"svg-icon\" [innerHTML]=\"icons.download | safeHtml\"></div>\n          </button>\n\n          <!-- Open in new tab button -->\n          <button\n            *ngIf=\"showInNewTab\"\n            class=\"toolbar-btn new-tab-btn\"\n            (click)=\"handleOpenInNewTab()\"\n            [attr.aria-label]=\"'Open in new tab'\"\n            title=\"Open in new tab\"\n          >\n            <div\n              class=\"svg-icon\"\n              [innerHTML]=\"icons.externalLink | safeHtml\"\n            ></div>\n          </button>\n\n          <!-- Fullscreen button -->\n          <button\n            *ngIf=\"showFullscreen\"\n            class=\"toolbar-btn fullscreen-btn\"\n            (click)=\"handleFullscreen()\"\n            [attr.aria-label]=\"\n              state.fullscreen ? 'Exit fullscreen' : 'Enter fullscreen'\n            \"\n            [title]=\"state.fullscreen ? 'Exit fullscreen' : 'Enter fullscreen'\"\n          >\n            <div\n              class=\"svg-icon\"\n              [innerHTML]=\"\n                (state.fullscreen ? icons.fullscreenExit : icons.fullscreen)\n                  | safeHtml\n              \"\n            ></div>\n          </button>\n        </div>\n      </div>\n\n      <!-- Filename display -->\n      <div *ngIf=\"state.documentInfo && !embedded\" class=\"filename-display\">\n        <div\n          class=\"svg-icon file-icon\"\n          [innerHTML]=\"icons.file | safeHtml\"\n        ></div>\n        <span\n          class=\"filename\"\n          [title]=\"state.documentInfo.fileName || 'Document'\"\n        >\n          {{ state.documentInfo.fileName || 'Document' }}\n        </span>\n      </div>\n    </div>\n  `,\n  styleUrls: ['./toolbar.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarComponent {\n  @Input() state!: ViewerState;\n  @Input() documentType: DocumentType = 'unknown';\n  @Input() embedded = false;\n\n  // Feature flags\n  @Input() showDownload = true;\n  @Input() showInNewTab = true;\n  @Input() showZoom = true;\n  @Input() showRotation = true;\n  @Input() showFullscreen = true;\n  @Input() showViewModeToggle = true;\n\n  @Output() onDownload = new EventEmitter<void>();\n  @Output() onOpenInNewTab = new EventEmitter<void>();\n  @Output() onPrint = new EventEmitter<void>();\n  @Output() onZoomIn = new EventEmitter<void>();\n  @Output() onZoomOut = new EventEmitter<void>();\n  @Output() onZoomReset = new EventEmitter<void>();\n  @Output() onRotateLeft = new EventEmitter<void>();\n  @Output() onRotateRight = new EventEmitter<void>();\n  @Output() onPreviousPage = new EventEmitter<void>();\n  @Output() onNextPage = new EventEmitter<void>();\n  @Output() onFullscreen = new EventEmitter<void>();\n  @Output() onToggleViewMode = new EventEmitter<void>();\n\n  Math = Math;\n  icons = Icons;\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  get canZoom(): boolean {\n    return supportsZoom(this.documentType);\n  }\n\n  get canRotate(): boolean {\n    return supportsRotation(this.documentType);\n  }\n\n  get canPaginate(): boolean {\n    return supportsPagination(this.documentType);\n  }\n\n  // Handlers\n  handleDownload(): void {\n    this.onDownload.emit();\n  }\n\n  handleOpenInNewTab(): void {\n    this.onOpenInNewTab.emit();\n  }\n\n  handleZoomIn(): void {\n    this.onZoomIn.emit();\n  }\n\n  handleZoomOut(): void {\n    this.onZoomOut.emit();\n  }\n\n  handleZoomReset(): void {\n    this.onZoomReset.emit();\n  }\n\n  handleRotateLeft(): void {\n    this.onRotateLeft.emit();\n  }\n\n  handleRotateRight(): void {\n    this.onRotateRight.emit();\n  }\n\n  handlePreviousPage(): void {\n    if (this.state.currentPage > 1) {\n      this.onPreviousPage.emit();\n    }\n  }\n\n  handleNextPage(): void {\n    if (this.state.currentPage < this.state.totalPages) {\n      this.onNextPage.emit();\n    }\n  }\n\n  handleFullscreen(): void {\n    this.onFullscreen.emit();\n  }\n\n  handleToggleViewMode(): void {\n    this.onToggleViewMode.emit();\n  }\n}\n","import * as pdfjsLib from 'pdfjs-dist';\n\n// Extend Promise interface for withResolvers polyfill\ndeclare global {\n  interface PromiseConstructor {\n    withResolvers?<T>(): {\n      promise: Promise<T>;\n      resolve: (value: T | PromiseLike<T>) => void;\n      reject: (reason?: any) => void;\n    };\n  }\n}\n\n// Polyfill for Promise.withResolvers (needed for older browsers)\nif (typeof window !== 'undefined' && !Promise.withResolvers) {\n  (Promise as any).withResolvers = function <T>() {\n    let resolve: (value: T | PromiseLike<T>) => void;\n    let reject: (reason?: any) => void;\n    const promise = new Promise<T>((res, rej) => {\n      resolve = res;\n      reject = rej;\n    });\n    return { promise, resolve: resolve!, reject: reject! };\n  };\n}\n\n// Configure PDF.js worker\nif (typeof window !== 'undefined') {\n  // Use CDN for worker in browser - updated for v5+\n  pdfjsLib.GlobalWorkerOptions.workerSrc = `https://unpkg.com/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`;\n}\n\n// Default options for PDF documents\nexport const defaultPdfOptions = {\n  cMapUrl: `https://unpkg.com/pdfjs-dist@${pdfjsLib.version}/cmaps/`,\n  cMapPacked: true,\n  standardFontDataUrl: `https://unpkg.com/pdfjs-dist@${pdfjsLib.version}/standard_fonts/`,\n  disableAutoFetch: false,\n  disableStream: false,\n  disableFontFace: false,\n  isEvalSupported: true,\n  withCredentials: false,\n  enableXfa: false,\n  useSystemFonts: false,\n  maxImageSize: 1024 * 1024, // 1MB\n  disableRange: false,\n  disableCreateObjectURL: false,\n  disableWebGL: false,\n  disableWorker: false,\n  disableOffscreenCanvas: false,\n  disableIsRemotePdfFile: false,\n};\n\nexport { pdfjsLib };\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  OnInit,\n  OnDestroy,\n  OnChanges,\n  SimpleChanges,\n  ViewChild,\n  ElementRef,\n  ChangeDetectorRef,\n  NgZone,\n  AfterViewInit,\n  ViewChildren,\n  QueryList,\n} from '@angular/core';\nimport * as pdfjsLib from 'pdfjs-dist';\nimport { PDFDocumentProxy, PDFPageProxy } from 'pdfjs-dist';\nimport { DocumentType, PDFPageInfo, ErrorInfo } from './types';\nimport { ErrorBoundaryService } from './error-boundary.service';\nimport {\n  isExternalUrl,\n  tryLoadWithProxy,\n  createBlobFromDataUrl,\n  revokeBlobUrl,\n} from './utils';\nimport { defaultPdfOptions } from './pdf-config';\n\n@Component({\n  selector: 'ngx-pdf-viewer',\n  template: `\n    <div\n      class=\"pdf-viewer-container\"\n      [class.fullscreen]=\"fullscreen\"\n      [style.height]=\"height\"\n      [style.width]=\"width\"\n    >\n      <!-- Loading State -->\n      <div *ngIf=\"loading\" class=\"loading-container\">\n        <div class=\"loading-spinner\"></div>\n        <div class=\"loading-text\">\n          <p>Loading PDF...</p>\n          <p *ngIf=\"totalPages > 0\" class=\"page-info\">\n            Page {{ currentPage }} of {{ totalPages }}\n          </p>\n          <p class=\"renderer-info\">Using PDF.js renderer</p>\n          <p *ngIf=\"isExternal\" class=\"proxy-info\">\n            Trying CORS proxies for external document...\n          </p>\n        </div>\n      </div>\n\n      <!-- Error State -->\n      <div *ngIf=\"error && !loading\" class=\"error-container\">\n        <div class=\"error-content\">\n          <div class=\"error-icon\">⚠️</div>\n          <h3>Failed to Load PDF</h3>\n          <p>{{ error }}</p>\n          <div *ngIf=\"isCorsError\" class=\"cors-tip\">\n            <strong>Tip:</strong> This PDF is hosted on a server that doesn't\n            allow cross-origin access. You can try opening it in a new tab or\n            downloading it directly.\n          </div>\n          <div class=\"error-actions\">\n            <button (click)=\"retry()\" class=\"btn btn-outline\">Retry</button>\n            <button (click)=\"openInNewTab()\" class=\"btn btn-outline\">\n              Open in New Tab\n            </button>\n            <button (click)=\"download()\" class=\"btn btn-outline\">\n              Download\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <!-- PDF Content -->\n      <div\n        *ngIf=\"!loading && !error\"\n        class=\"pdf-content\"\n        [class.continuous]=\"viewMode === 'continuous'\"\n      >\n        <!-- Single Page Mode -->\n        <div *ngIf=\"viewMode === 'single'\" class=\"single-page-container\">\n          <canvas #pdfCanvas class=\"pdf-canvas\"></canvas>\n        </div>\n\n        <!-- Continuous Mode -->\n        <div *ngIf=\"viewMode === 'continuous'\" class=\"continuous-pages\">\n          <div\n            *ngFor=\"let page of pages; let i = index\"\n            class=\"page-container\"\n            [class.loaded]=\"loadedPages.has(i + 1)\"\n          >\n            <canvas #pageCanvas class=\"pdf-canvas page-canvas\"></canvas>\n            <div class=\"page-number\">{{ i + 1 }}</div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Page Info Overlay (Single Page Mode) -->\n      <div\n        *ngIf=\"!loading && !error && viewMode === 'single' && totalPages > 0\"\n        class=\"page-info-overlay\"\n      >\n        {{ currentPage }} / {{ totalPages }}\n      </div>\n    </div>\n  `,\n  styleUrls: ['./pdf-viewer.component.css'],\n})\nexport class PdfViewerComponent\n  implements OnInit, OnDestroy, OnChanges, AfterViewInit\n{\n  @Input() src: string = '';\n  @Input() currentPage: number = 1;\n  @Input() zoom: number = 100;\n  @Input() rotation: number = 0;\n  @Input() viewMode: 'single' | 'continuous' = 'single';\n  @Input() height: string = '100%';\n  @Input() width: string = '100%';\n  @Input() fullscreen: boolean = false;\n  @Input() proxyUrl?: string;\n\n  @Output() onLoad = new EventEmitter<{ totalPages: number }>();\n  @Output() onError = new EventEmitter<string>();\n  @Output() onPageChange = new EventEmitter<number>();\n\n  @ViewChild('pdfCanvas', { static: false })\n  pdfCanvas!: ElementRef<HTMLCanvasElement>;\n  @ViewChildren('pageCanvas') pageCanvases!: QueryList<\n    ElementRef<HTMLCanvasElement>\n  >;\n\n  loading = true;\n  error: string | null = null;\n  totalPages = 0;\n  pages: number[] = [];\n  loadedPages = new Set<number>();\n  pdfDocument: PDFDocumentProxy | null = null;\n  proxiedSrc = '';\n  isExternal = false;\n  isCorsError = false;\n\n  private containerWidth = 0;\n  private abortController: AbortController | null = null;\n  private timeoutId: number | null = null;\n  private heartbeatId: number | null = null;\n  private lastActivity = Date.now();\n  private renderTasks = new Map<number, any>(); // Track active render tasks\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    private ngZone: NgZone,\n    private errorBoundary: ErrorBoundaryService\n  ) {}\n\n  ngOnInit(): void {\n    // Set up PDF.js worker for out-of-the-box functionality\n    if (typeof window !== 'undefined' && 'Worker' in window) {\n      (\n        pdfjsLib as any\n      ).GlobalWorkerOptions.workerSrc = `https://unpkg.com/pdfjs-dist@${\n        (pdfjsLib as any).version\n      }/build/pdf.worker.min.js`;\n    }\n\n    this.initializePdf();\n\n    // Listen for window resize events to handle DPR changes\n    window.addEventListener('resize', this.onWindowResize.bind(this));\n  }\n\n  ngAfterViewInit(): void {\n    this.pageCanvases.changes.subscribe(() => {\n      if (this.viewMode === 'continuous' && !this.loading && this.pdfDocument) {\n        this.renderAllPages();\n      }\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['src'] && !changes['src'].firstChange) {\n      this.initializePdf();\n    }\n    if (changes['currentPage'] && !changes['currentPage'].firstChange) {\n      this.renderCurrentPage();\n    }\n    if (changes['zoom'] && !changes['zoom'].firstChange) {\n      if (this.viewMode === 'continuous') {\n        this.renderAllPages();\n      } else {\n        this.renderCurrentPage();\n      }\n    }\n    if (changes['rotation'] && !changes['rotation'].firstChange) {\n      if (this.viewMode === 'continuous') {\n        this.renderAllPages();\n      } else {\n        this.renderCurrentPage();\n      }\n    }\n    if (changes['viewMode'] && !changes['viewMode'].firstChange) {\n      if (this.viewMode === 'continuous') {\n        // Trigger change detection and wait for DOM to update\n        this.cdr.detectChanges();\n        setTimeout(() => {\n          this.renderAllPages();\n        }, 0);\n      } else {\n        this.renderCurrentPage();\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    // Remove event listeners\n    window.removeEventListener('resize', this.onWindowResize.bind(this));\n    this.cleanup();\n  }\n\n  private onWindowResize(): void {\n    // Re-render on window resize to handle DPR changes\n    if (this.pdfDocument && !this.loading) {\n      setTimeout(() => {\n        if (this.viewMode === 'continuous') {\n          this.renderAllPages();\n        } else {\n          this.renderCurrentPage();\n        }\n      }, 100); // Small delay to ensure resize is complete\n    }\n  }\n\n  private async initializePdf(): Promise<void> {\n    this.cleanup();\n    this.loading = true;\n    this.error = null;\n    this.totalPages = 0;\n    this.pages = [];\n    this.loadedPages.clear();\n\n    if (!this.src) {\n      this.setError('No PDF source provided');\n      return;\n    }\n\n    try {\n      // Check network connectivity\n      if (!navigator.onLine) {\n        this.setError(\n          'No internet connection. Please check your network and try again.'\n        );\n        return;\n      }\n\n      // Handle different URL types\n      if (this.src.startsWith('blob:') || this.src.startsWith('data:')) {\n        this.proxiedSrc = this.src;\n        this.isExternal = false;\n      } else if (isExternalUrl(this.src)) {\n        this.isExternal = true;\n        this.proxiedSrc = await tryLoadWithProxy(this.src, this.proxyUrl);\n      } else {\n        this.proxiedSrc = this.src;\n        this.isExternal = false;\n      }\n\n      // Convert data URL to blob if needed\n      if (this.proxiedSrc.startsWith('data:application/pdf;base64,')) {\n        const blobUrl = createBlobFromDataUrl(this.proxiedSrc);\n        if (blobUrl) {\n          this.proxiedSrc = blobUrl;\n        }\n      }\n\n      await this.loadPdfDocument();\n    } catch (error) {\n      this.setError(`Failed to load PDF: ${error}`);\n    }\n  }\n\n  private async loadPdfDocument(): Promise<void> {\n    try {\n      this.abortController = new AbortController();\n\n      // Set loading timeout\n      this.timeoutId = window.setTimeout(() => {\n        if (this.loading) {\n          this.setError('PDF loading timeout');\n        }\n      }, 30000); // Increased timeout to 30 seconds\n\n      const loadingTask = pdfjsLib.getDocument({\n        url: this.proxiedSrc,\n        ...defaultPdfOptions,\n      });\n\n      this.pdfDocument = await loadingTask.promise;\n\n      // Clear timeout on successful load\n      if (this.timeoutId) {\n        clearTimeout(this.timeoutId);\n        this.timeoutId = null;\n      }\n\n      this.totalPages = this.pdfDocument.numPages;\n      this.pages = Array.from({ length: this.totalPages }, (_, i) => i + 1);\n\n      this.loading = false;\n      this.error = null;\n\n      this.ngZone.run(() => {\n        this.onLoad.emit({ totalPages: this.totalPages });\n        this.cdr.detectChanges();\n      });\n\n      // Start heartbeat monitoring\n      this.startHeartbeat();\n\n      // Render pages based on view mode\n      if (this.viewMode === 'continuous') {\n        // Wait for DOM to update with canvas elements\n        setTimeout(() => {\n          this.renderAllPages();\n        }, 0);\n      } else {\n        this.renderCurrentPage();\n      }\n    } catch (error: any) {\n      // Clear timeout on error\n      if (this.timeoutId) {\n        clearTimeout(this.timeoutId);\n        this.timeoutId = null;\n      }\n\n      this.setError(`Failed to load PDF document: ${error.message}`);\n    }\n  }\n\n  private async renderCurrentPage(): Promise<void> {\n    if (!this.pdfDocument || this.loading) return;\n\n    try {\n      // Cancel any existing render task for current page\n      if (this.renderTasks.has(this.currentPage)) {\n        this.renderTasks.get(this.currentPage)?.cancel();\n        this.renderTasks.delete(this.currentPage);\n      }\n\n      const page = await this.pdfDocument.getPage(this.currentPage);\n      const canvas = this.pdfCanvas?.nativeElement;\n\n      if (!canvas) {\n        return;\n      }\n\n      const context = canvas.getContext('2d');\n      if (!context) {\n        return;\n      }\n\n      // Get device pixel ratio for high-DPI displays\n      const devicePixelRatio = window.devicePixelRatio || 1;\n      const scale = this.zoom / 100;\n      const viewport = page.getViewport({ scale, rotation: this.rotation });\n\n      // Set canvas dimensions with device pixel ratio\n      const scaledWidth = viewport.width * devicePixelRatio;\n      const scaledHeight = viewport.height * devicePixelRatio;\n\n      // Set canvas internal size (actual pixels)\n      canvas.width = scaledWidth;\n      canvas.height = scaledHeight;\n\n      // Set canvas display size (CSS pixels)\n      canvas.style.width = viewport.width + 'px';\n      canvas.style.height = viewport.height + 'px';\n\n      // Scale the context to match device pixel ratio\n      context.scale(devicePixelRatio, devicePixelRatio);\n\n      // Clear canvas before rendering\n      context.clearRect(0, 0, viewport.width, viewport.height);\n\n      // Enable high-quality image rendering\n      context.imageSmoothingEnabled = true;\n      context.imageSmoothingQuality = 'high';\n\n      const renderContext = {\n        canvasContext: context,\n        viewport: viewport,\n        canvas: canvas,\n      };\n\n      // Store the render task\n      const renderTask = page.render(renderContext);\n      this.renderTasks.set(this.currentPage, renderTask);\n\n      await renderTask.promise;\n      this.loadedPages.add(this.currentPage);\n\n      // Remove completed task\n      this.renderTasks.delete(this.currentPage);\n      this.updateActivity();\n    } catch (error: any) {\n      this.errorBoundary.reportError(error, 'PDF page rendering');\n    }\n  }\n\n  // Internal state\n  private isRendering = false;\n\n  private async renderAllPages(): Promise<void> {\n    if (!this.pdfDocument || this.loading || this.viewMode !== 'continuous')\n      return;\n    if (this.isRendering) return; // Prevent concurrent render processes\n\n    const canvasElements = this.pageCanvases ? this.pageCanvases.toArray() : [];\n    if (canvasElements.length === 0) {\n      return;\n    }\n\n    this.isRendering = true;\n\n    try {\n      const devicePixelRatio = window.devicePixelRatio || 1;\n\n      // Cancel any existing render tasks\n      this.cancelAllRenderTasks();\n\n      // Render pages sequentially\n      for (let i = 0; i < this.pages.length; i++) {\n        const pageNumber = i + 1;\n        const canvasRef = canvasElements[i];\n\n        if (!canvasRef) continue;\n\n        const canvas = canvasRef.nativeElement;\n\n        try {\n          const page = await this.pdfDocument.getPage(pageNumber);\n          const context = canvas.getContext('2d');\n\n          if (!context) continue;\n\n          const scale = this.zoom / 100;\n          const viewport = page.getViewport({ scale, rotation: this.rotation });\n\n          canvas.width = viewport.width * devicePixelRatio;\n          canvas.height = viewport.height * devicePixelRatio;\n          canvas.style.width = viewport.width + 'px';\n          canvas.style.height = viewport.height + 'px';\n\n          context.scale(devicePixelRatio, devicePixelRatio);\n          context.clearRect(0, 0, viewport.width, viewport.height);\n\n          const renderContext = {\n            canvasContext: context,\n            viewport: viewport,\n            canvas: canvas,\n          };\n\n          const renderTask = page.render(renderContext);\n          this.renderTasks.set(pageNumber, renderTask);\n\n          await renderTask.promise;\n\n          this.loadedPages.add(pageNumber);\n          this.renderTasks.delete(pageNumber);\n        } catch (error: any) {\n          this.renderTasks.delete(pageNumber);\n        }\n      }\n    } catch (error: any) {\n      // Failed to render all pages\n    } finally {\n      this.isRendering = false;\n    }\n  }\n\n  private setError(message: string): void {\n    this.loading = false;\n    this.error = message;\n    this.isCorsError = message.toLowerCase().includes('cors');\n\n    this.ngZone.run(() => {\n      this.onError.emit(message);\n      this.cdr.detectChanges();\n    });\n  }\n\n  retry(): void {\n    this.stopHeartbeat();\n    this.initializePdf();\n  }\n\n  openInNewTab(): void {\n    window.open(this.src, '_blank', 'noopener,noreferrer');\n  }\n\n  download(): void {\n    const link = document.createElement('a');\n    link.href = this.src;\n    link.download = this.getFileName();\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n  }\n\n  private getFileName(): string {\n    const parts = this.src.split('/');\n    return parts[parts.length - 1] || 'document.pdf';\n  }\n\n  private startHeartbeat(): void {\n    this.stopHeartbeat();\n    this.lastActivity = Date.now();\n\n    this.heartbeatId = window.setInterval(() => {\n      const timeSinceLastActivity = Date.now() - this.lastActivity;\n\n      // If no activity for 60 seconds, consider the document unresponsive\n      if (timeSinceLastActivity > 60000) {\n        this.retry();\n      }\n    }, 10000); // Check every 10 seconds\n  }\n\n  private stopHeartbeat(): void {\n    if (this.heartbeatId) {\n      clearInterval(this.heartbeatId);\n      this.heartbeatId = null;\n    }\n  }\n\n  private updateActivity(): void {\n    this.lastActivity = Date.now();\n  }\n\n  private cancelAllRenderTasks(): void {\n    this.renderTasks.forEach((task, pageNumber) => {\n      try {\n        task.cancel();\n      } catch (error) {\n        // Could not cancel render task\n      }\n    });\n    this.renderTasks.clear();\n  }\n\n  private cleanup(): void {\n    // Stop heartbeat\n    this.stopHeartbeat();\n\n    // Clear timeout\n    if (this.timeoutId) {\n      clearTimeout(this.timeoutId);\n      this.timeoutId = null;\n    }\n\n    // Abort any ongoing requests\n    if (this.abortController) {\n      this.abortController.abort();\n      this.abortController = null;\n    }\n\n    // Cancel all active render tasks\n    this.cancelAllRenderTasks();\n\n    // Clean up PDF document\n    if (this.pdfDocument) {\n      try {\n        this.pdfDocument.destroy();\n      } catch (error) {\n        // Error destroying PDF document\n      }\n      this.pdfDocument = null;\n    }\n\n    // Clean up blob URLs\n    if (this.proxiedSrc && this.proxiedSrc.startsWith('blob:')) {\n      revokeBlobUrl(this.proxiedSrc);\n    }\n\n    // Reset state\n    this.loadedPages.clear();\n    this.loading = false;\n    this.error = null;\n  }\n}\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  OnInit,\n  OnDestroy,\n  OnChanges,\n  SimpleChanges,\n  ViewChild,\n  ElementRef,\n  ChangeDetectorRef,\n  NgZone,\n  HostListener,\n} from '@angular/core';\nimport { DocumentType, ImageInfo } from './types';\nimport { ErrorBoundaryService } from './error-boundary.service';\nimport { isExternalUrl, tryLoadWithProxy } from './utils';\n\n@Component({\n  selector: 'ngx-image-viewer',\n  template: `\n    <div\n      class=\"image-viewer-container\"\n      [style.height]=\"height\"\n      [style.width]=\"width\"\n    >\n      <!-- Loading State -->\n      <div *ngIf=\"loading\" class=\"loading-container\">\n        <div class=\"loading-spinner\"></div>\n        <div class=\"loading-text\">\n          <p>Loading image...</p>\n          <p class=\"renderer-info\">Preparing for display</p>\n        </div>\n      </div>\n\n      <!-- Error State -->\n      <div *ngIf=\"error\" class=\"error-container\">\n        <div class=\"error-content\">\n          <div class=\"error-icon\">🖼️</div>\n          <h3>Failed to Load Image</h3>\n          <p>{{ error }}</p>\n          <div class=\"troubleshooting-tips\">\n            <p class=\"tip-title\">Troubleshooting:</p>\n            <ul>\n              <li>Verify the image URL is accessible</li>\n              <li>Check if CORS headers allow this domain</li>\n              <li>Ensure the image format is supported</li>\n            </ul>\n          </div>\n          <div class=\"error-actions\">\n            <button (click)=\"retry()\" class=\"btn btn-outline\">Retry</button>\n            <button (click)=\"openInNewTab()\" class=\"btn btn-outline\">\n              Open in New Tab\n            </button>\n            <button (click)=\"download()\" class=\"btn btn-outline\">\n              Download\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <!-- Image Content -->\n      <div\n        *ngIf=\"!error\"\n        class=\"image-content\"\n        [class.dragging]=\"isDragging\"\n        (mousedown)=\"onMouseDown($event)\"\n        (mousemove)=\"onMouseMove($event)\"\n        (mouseup)=\"onMouseUp()\"\n        (mouseleave)=\"onMouseUp()\"\n        (wheel)=\"onWheel($event)\"\n      >\n        <img\n          *ngIf=\"proxiedSrc\"\n          #imageElement\n          [src]=\"proxiedSrc\"\n          [alt]=\"imageInfo?.alt || 'Document'\"\n          class=\"image-element\"\n          [class.zoomable]=\"zoom > 100\"\n          [class.dragging]=\"isDragging\"\n          [style.transform]=\"getImageTransform()\"\n          [style.transform-origin]=\"'center'\"\n          [style.max-width]=\"zoom <= 100 ? '100%' : 'none'\"\n          [style.max-height]=\"zoom <= 100 ? '100%' : 'none'\"\n          (load)=\"onImageLoad($event)\"\n          (error)=\"onImageError($event)\"\n          draggable=\"false\"\n        />\n\n        <!-- Image Info Overlay -->\n        <div *ngIf=\"imageInfo && !loading\" class=\"image-info-overlay\">\n          {{ imageInfo.naturalWidth }} × {{ imageInfo.naturalHeight }}\n          <span *ngIf=\"imageType === 'vector'\"> (SVG)</span>\n          <span *ngIf=\"imageType === 'animated'\"> (GIF)</span>\n        </div>\n\n        <!-- Pan Hint for Zoomed Images -->\n        <div *ngIf=\"zoom > 100 && !loading && !error\" class=\"pan-hint\">\n          <span class=\"pan-icon\">✋</span>\n          Drag to pan\n        </div>\n      </div>\n    </div>\n  `,\n  styleUrls: ['./image-viewer.component.css'],\n})\nexport class ImageViewerComponent implements OnInit, OnDestroy, OnChanges {\n  @Input() src: string = '';\n  @Input() zoom: number = 100;\n  @Input() rotation: number = 0;\n  @Input() height: string = '100%';\n  @Input() width: string = '100%';\n  @Input() proxyUrl?: string;\n\n  @Output() onLoad = new EventEmitter<ImageInfo>();\n  @Output() onError = new EventEmitter<string>();\n  @Output() onZoomChange = new EventEmitter<number>();\n  @Output() onRotationChange = new EventEmitter<number>();\n\n  @ViewChild('imageElement', { static: false })\n  imageElement!: ElementRef<HTMLImageElement>;\n\n  loading = true;\n  error: string | null = null;\n  imageInfo: ImageInfo | null = null;\n  proxiedSrc = '';\n  isExternal = false;\n  isDragging = false;\n  dragStart = { x: 0, y: 0 };\n  imagePosition = { x: 0, y: 0 };\n  imageType: 'raster' | 'vector' | 'animated' = 'raster';\n\n  private wheelTimeout: number | null = null;\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    private ngZone: NgZone,\n    private errorBoundary: ErrorBoundaryService\n  ) {}\n\n  ngOnInit(): void {\n    this.initializeImage();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['src'] && !changes['src'].firstChange) {\n      this.initializeImage();\n    }\n    if (changes['zoom'] && !changes['zoom'].firstChange) {\n      this.resetPositionIfNeeded();\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.wheelTimeout) {\n      clearTimeout(this.wheelTimeout);\n    }\n  }\n\n  @HostListener('window:resize', ['$event'])\n  onResize(): void {\n    this.resetPositionIfNeeded();\n  }\n\n  private async initializeImage(): Promise<void> {\n    this.loading = true;\n    this.error = null;\n    this.imageInfo = null;\n    this.imagePosition = { x: 0, y: 0 };\n\n    if (!this.src) {\n      this.setError('No image source provided');\n      return;\n    }\n\n    try {\n      // Handle different URL types\n      if (this.src.startsWith('blob:') || this.src.startsWith('data:')) {\n        this.proxiedSrc = this.src;\n        this.isExternal = false;\n      } else if (isExternalUrl(this.src)) {\n        this.isExternal = true;\n        this.proxiedSrc = await tryLoadWithProxy(this.src, this.proxyUrl);\n      } else {\n        this.proxiedSrc = this.src;\n        this.isExternal = false;\n      }\n\n      // Detect image type\n      this.imageType = this.detectImageType(this.src);\n      this.cdr.detectChanges();\n    } catch (error) {\n      this.setError(`Failed to load image: ${error}`);\n    }\n  }\n\n  private detectImageType(src: string): 'raster' | 'vector' | 'animated' {\n    const extension = src.split('.').pop()?.toLowerCase();\n    if (['svg'].includes(extension || '')) return 'vector';\n    if (['gif'].includes(extension || '')) return 'animated';\n    return 'raster';\n  }\n\n  onImageLoad(event: Event): void {\n    const img = event.target as HTMLImageElement;\n\n    if (img.naturalWidth > 0 && img.naturalHeight > 0) {\n      this.imageInfo = {\n        naturalWidth: img.naturalWidth,\n        naturalHeight: img.naturalHeight,\n        src: this.proxiedSrc,\n        alt: img.alt || 'Document',\n      };\n\n      this.loading = false;\n      this.error = null;\n\n      this.ngZone.run(() => {\n        this.onLoad.emit(this.imageInfo!);\n        this.cdr.detectChanges();\n      });\n    } else {\n      this.setError('Image has zero dimensions');\n    }\n  }\n\n  onImageError(event: Event): void {\n    const errorMessage = (this.proxiedSrc || this.src).startsWith('blob:')\n      ? 'Invalid blob URL'\n      : 'Network error or unsupported format';\n\n    this.setError(`Failed to load image: ${errorMessage}`);\n  }\n\n  onMouseDown(event: MouseEvent): void {\n    if (this.zoom > 100 && !this.loading && !this.error) {\n      this.isDragging = true;\n      this.dragStart = {\n        x: event.clientX - this.imagePosition.x,\n        y: event.clientY - this.imagePosition.y,\n      };\n      event.preventDefault();\n    }\n  }\n\n  onMouseMove(event: MouseEvent): void {\n    if (this.isDragging && this.zoom > 100) {\n      this.imagePosition = {\n        x: event.clientX - this.dragStart.x,\n        y: event.clientY - this.dragStart.y,\n      };\n    }\n  }\n\n  onMouseUp(): void {\n    this.isDragging = false;\n  }\n\n  onWheel(event: WheelEvent): void {\n    if (this.wheelTimeout) {\n      clearTimeout(this.wheelTimeout);\n    }\n\n    this.wheelTimeout = window.setTimeout(() => {\n      // Handle zoom with mouse wheel\n      const delta = event.deltaY > 0 ? -10 : 10;\n      const newZoom = Math.max(50, Math.min(300, this.zoom + delta));\n\n      if (newZoom !== this.zoom) {\n        this.ngZone.run(() => {\n          this.onZoomChange.emit(newZoom);\n        });\n      }\n    }, 50);\n\n    event.preventDefault();\n  }\n\n  private resetPositionIfNeeded(): void {\n    if (this.zoom === 100) {\n      this.imagePosition = { x: 0, y: 0 };\n    }\n  }\n\n  getImageTransform(): string {\n    return `scale(${this.zoom / 100}) rotate(${this.rotation}deg) translate(${\n      this.imagePosition.x\n    }px, ${this.imagePosition.y}px)`;\n  }\n\n  private setError(message: string): void {\n    this.loading = false;\n    this.error = message;\n\n    this.ngZone.run(() => {\n      this.onError.emit(message);\n      this.cdr.detectChanges();\n    });\n\n    this.errorBoundary.reportError(message, 'Image loading');\n  }\n\n  retry(): void {\n    this.initializeImage();\n  }\n\n  openInNewTab(): void {\n    window.open(this.src, '_blank', 'noopener,noreferrer');\n  }\n\n  download(): void {\n    const link = document.createElement('a');\n    link.href = this.src;\n    link.download = this.getFileName();\n    link.target = '_blank';\n    link.rel = 'noopener noreferrer';\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n  }\n\n  private getFileName(): string {\n    const parts = this.src.split('/');\n    return parts[parts.length - 1] || 'image';\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  Input,\n  OnInit,\n  OnDestroy,\n  OnChanges,\n  SimpleChanges,\n  Output,\n  EventEmitter,\n  ViewChild,\n  ChangeDetectorRef,\n  NgZone,\n  Inject,\n  Optional,\n} from '@angular/core';\nimport { CommonConstant } from './Common.constant';\nimport { Icons } from './icons/icons.constant';\nimport {\n  DocumentViewerConfig,\n  DocumentType,\n  DocumentInfo,\n  ViewerState,\n} from './types';\nimport { ImgPdfViewerService } from './img-pdf-viewer.service';\nimport { ErrorBoundaryService } from './error-boundary.service';\nimport {\n  detectDocumentType,\n  detectDocumentTypeAsync,\n  isValidUrl,\n  enterFullscreen,\n  exitFullscreen,\n  isFullscreen,\n} from './utils';\n\n@Component({\n  selector: 'ngx-imgPdf-viewer',\n  templateUrl: './img-pdf-viewer.component.html',\n  styleUrls: ['./img-pdf-viewer.component.css'],\n})\nexport class ImgPdfViewerComponent implements OnInit, OnDestroy, OnChanges {\n  // Inputs - New API\n  @Input() documentUrl: string = '';\n  @Input() documentType?: DocumentType;\n  @Input() title?: string;\n  @Input() config?: DocumentViewerConfig;\n\n  // Legacy inputs for backward compatibility\n  @Input() documentURL: string = '';\n  @Input() docPreviewConfig: any = {};\n\n  // Outputs\n  @Output() onError = new EventEmitter<string>();\n  @Output() onLoad = new EventEmitter<DocumentInfo>();\n  @Output() onZoomChange = new EventEmitter<number>();\n  @Output() onRotationChange = new EventEmitter<number>();\n  @Output() onPageChange = new EventEmitter<number>();\n\n  // ViewChild references\n  @ViewChild('containerRef', { static: false })\n  containerRef!: ElementRef<HTMLDivElement>;\n\n  // Component state\n  state: ViewerState = {\n    currentPage: 1,\n    totalPages: 1,\n    zoom: 100,\n    rotation: 0,\n    loading: true,\n    error: null,\n    fullscreen: false,\n    documentInfo: null,\n    viewMode: 'single',\n  };\n\n  // Computed properties\n  get effectiveDocumentUrl(): string {\n    return this.documentUrl || this.documentURL;\n  }\n\n  get detectedDocumentType(): DocumentType {\n    // 1. Explicit type override from Input\n    if (this.documentType && this.documentType !== 'unknown') {\n      return this.documentType;\n    }\n\n    // 2. Already detected type in state (from async detection)\n    if (\n      this.state.documentInfo?.type &&\n      this.state.documentInfo.type !== 'unknown'\n    ) {\n      return this.state.documentInfo.type;\n    }\n\n    // 3. Heuristic / Extension check\n    if (!this.effectiveDocumentUrl) return 'unknown';\n    const heuristicType = detectDocumentType(this.effectiveDocumentUrl);\n\n    // 4. Config fallback\n    if (heuristicType === 'unknown' && this.mergedConfig.fallbackType) {\n      return this.mergedConfig.fallbackType;\n    }\n\n    return heuristicType;\n  }\n\n  // Async document type detection for URLs without extensions\n  async getDetectedDocumentTypeAsync(): Promise<DocumentType> {\n    if (this.documentType) {\n      return this.documentType;\n    }\n\n    const url = this.effectiveDocumentUrl;\n    if (!url) {\n      return 'unknown';\n    }\n\n    return await detectDocumentTypeAsync(url, this.mergedConfig.proxyUrl);\n  }\n\n  get mergedConfig(): DocumentViewerConfig {\n    // Start with defaults\n    const defaultConfig: DocumentViewerConfig = {\n      showToolbar: true,\n      showDownload: true,\n      showZoom: true,\n      showRotation: true,\n      showFullscreen: true,\n      showInNewTab: true,\n      showPagination: true,\n      showViewModeToggle: true,\n      height: '100vh', // Full viewport height by default\n      width: '100%',\n      embedded: false,\n      initialZoom: 100,\n      maxZoom: 300,\n      minZoom: 50,\n      viewMode: 'single',\n      modalSize: 'lg',\n    };\n\n    // Merge with new API config\n    const newApiConfig = this.config || {};\n\n    // Merge with legacy config if present\n    const legacyConfig: DocumentViewerConfig = {};\n    if (this.docPreviewConfig) {\n      legacyConfig.showToolbar =\n        this.docPreviewConfig.zoomIn !== false ||\n        this.docPreviewConfig.zoomOut !== false ||\n        this.docPreviewConfig.rotate !== false;\n      legacyConfig.showDownload = this.docPreviewConfig.download !== false;\n      legacyConfig.showZoom =\n        this.docPreviewConfig.zoomIn !== false ||\n        this.docPreviewConfig.zoomOut !== false;\n      legacyConfig.showRotation = this.docPreviewConfig.rotate !== false;\n      legacyConfig.showFullscreen = this.docPreviewConfig.openModal !== false;\n      legacyConfig.showPagination =\n        this.docPreviewConfig.pageIndicator !== false;\n      legacyConfig.height = this.docPreviewConfig.docScreenWidth || '100%';\n      legacyConfig.modalSize = this.docPreviewConfig.modalSize || 'lg';\n      legacyConfig.className = this.docPreviewConfig.customStyle || '';\n    }\n\n    return { ...defaultConfig, ...legacyConfig, ...newApiConfig };\n  }\n\n  // Legacy properties for backward compatibility\n  get legacyDocPreviewConfig(): any {\n    return {\n      zoomIn: this.mergedConfig.showZoom,\n      zoomOut: this.mergedConfig.showZoom,\n      rotate: this.mergedConfig.showRotation,\n      pageIndicator: this.mergedConfig.showPagination,\n      download: this.mergedConfig.showDownload,\n      openModal: this.mergedConfig.showFullscreen,\n      close: true,\n      docScreenWidth: this.mergedConfig.width,\n      modalSize: this.mergedConfig.modalSize,\n      customStyle: this.mergedConfig.customStyle || '',\n    };\n  }\n\n  get legacyDocumentURL(): string {\n    return this.documentUrl;\n  }\n\n  get fileName(): string {\n    return this.title || this.state.documentInfo?.fileName || 'document';\n  }\n\n  // Internal state\n  isModalOpen = false;\n  icons = Icons;\n  private fullscreenChangeListener?: () => void;\n\n  constructor(\n    private _helper: ImgPdfViewerService,\n    private cdr: ChangeDetectorRef,\n    private ngZone: NgZone,\n    private errorBoundary: ErrorBoundaryService\n  ) {}\n\n  ngOnInit(): void {\n    this.initializeViewer();\n    this.setupFullscreenListener();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (\n      (changes['documentUrl'] && !changes['documentUrl'].firstChange) ||\n      (changes['documentURL'] && !changes['documentURL'].firstChange)\n    ) {\n      this.initializeViewer();\n    }\n    if (changes['config'] && !changes['config'].firstChange) {\n      this.updateConfig();\n    }\n    if (\n      changes['docPreviewConfig'] &&\n      !changes['docPreviewConfig'].firstChange\n    ) {\n      this.updateConfig();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.cleanup();\n  }\n\n  async initializeViewer(): Promise<void> {\n    if (!this.effectiveDocumentUrl) {\n      this.setError('No document URL provided');\n      return;\n    }\n\n    if (!isValidUrl(this.effectiveDocumentUrl)) {\n      this.setError('Invalid document URL provided');\n      return;\n    }\n\n    this.state = {\n      ...this.state,\n      loading: true,\n      error: null,\n      zoom: this.mergedConfig.initialZoom || 100,\n      rotation: 0,\n      currentPage: 1,\n      viewMode: this.mergedConfig.viewMode || 'single',\n    };\n\n    // Use async document type detection for better accuracy\n    await this.initializeDocumentInfoAsync();\n  }\n\n  private initializeDocumentInfo(): void {\n    const documentInfo: DocumentInfo = {\n      type: this.detectedDocumentType,\n      fileName:\n        this.title || this._helper.getFileName(this.effectiveDocumentUrl),\n    };\n\n    this.state = {\n      ...this.state,\n      documentInfo,\n    };\n\n    this.ngZone.run(() => {\n      this.onLoad.emit(documentInfo);\n      this.cdr.detectChanges();\n    });\n  }\n\n  private async initializeDocumentInfoAsync(): Promise<void> {\n    try {\n      // Use async detection for better accuracy, especially for URLs without extensions\n      let detectedType = await this.getDetectedDocumentTypeAsync();\n\n      // Industrial Fallback Logic:\n      // 1. If auto-detection returns unknown, check config.fallbackType\n      if (detectedType === 'unknown' && this.mergedConfig.fallbackType) {\n        detectedType = this.mergedConfig.fallbackType;\n      }\n\n      // 2. Final heuristic fallback: if still unknown but URL path looks like PDF/Image,\n      // the synchronous detectDocumentType (called inside getDetectedDocumentTypeAsync)\n      // has already tried heuristics. If it's still unknown here, we can try one last\n      // \"hopeful\" guess if the URL contains keywords but wasn't caught yet.\n\n      const documentInfo: DocumentInfo = {\n        type: detectedType,\n        fileName:\n          this.title || this._helper.getFileName(this.effectiveDocumentUrl),\n      };\n\n      this.state = {\n        ...this.state,\n        documentInfo,\n        loading: false,\n      };\n\n      this.ngZone.run(() => {\n        this.onLoad.emit(documentInfo);\n        this.cdr.detectChanges();\n      });\n    } catch (error) {\n      this.setError('Failed to detect document type');\n    }\n  }\n\n  private updateConfig(): void {\n    // Update state based on new config\n    if (\n      this.mergedConfig.initialZoom &&\n      this.mergedConfig.initialZoom !== this.state.zoom\n    ) {\n      this.state.zoom = this.mergedConfig.initialZoom;\n    }\n    if (\n      this.mergedConfig.viewMode &&\n      this.mergedConfig.viewMode !== this.state.viewMode\n    ) {\n      this.state.viewMode = this.mergedConfig.viewMode;\n    }\n  }\n\n  private setupFullscreenListener(): void {\n    this.fullscreenChangeListener = () => {\n      this.state.fullscreen = isFullscreen();\n      this.cdr.detectChanges();\n    };\n\n    document.addEventListener(\n      'fullscreenchange',\n      this.fullscreenChangeListener\n    );\n    document.addEventListener(\n      'webkitfullscreenchange',\n      this.fullscreenChangeListener\n    );\n    document.addEventListener(\n      'mozfullscreenchange',\n      this.fullscreenChangeListener\n    );\n    document.addEventListener(\n      'MSFullscreenChange',\n      this.fullscreenChangeListener\n    );\n  }\n\n  private cleanup(): void {\n    if (this.fullscreenChangeListener) {\n      document.removeEventListener(\n        'fullscreenchange',\n        this.fullscreenChangeListener\n      );\n      document.removeEventListener(\n        'webkitfullscreenchange',\n        this.fullscreenChangeListener\n      );\n      document.removeEventListener(\n        'mozfullscreenchange',\n        this.fullscreenChangeListener\n      );\n      document.removeEventListener(\n        'MSFullscreenChange',\n        this.fullscreenChangeListener\n      );\n    }\n  }\n\n  private setError(message: string): void {\n    this.state = {\n      ...this.state,\n      loading: false,\n      error: message,\n    };\n\n    this.ngZone.run(() => {\n      this.onError.emit(message);\n      this.cdr.detectChanges();\n    });\n\n    this.errorBoundary.reportError(message, 'Document viewer');\n  }\n\n  // Event handlers\n  onDocumentLoad(info: DocumentInfo): void {\n    this.state = {\n      ...this.state,\n      loading: false,\n      error: null,\n      documentInfo: info,\n      totalPages: info.totalPages || this.state.totalPages,\n    };\n\n    this.ngZone.run(() => {\n      this.onLoad.emit(info);\n      this.cdr.detectChanges();\n    });\n  }\n\n  onDocumentError(error: string): void {\n    this.setError(error);\n\n    // Auto-retry for timeout errors\n    if (error.includes('timeout') || error.includes('network')) {\n      setTimeout(() => {\n        if (this.state.error) {\n          this.initializeViewer();\n        }\n      }, 2000);\n    }\n  }\n\n  onZoomIn(): void {\n    const newZoom = Math.min(\n      this.state.zoom + 25,\n      this.mergedConfig.maxZoom || 300\n    );\n    this.updateZoom(newZoom);\n  }\n\n  onZoomOut(): void {\n    const newZoom = Math.max(\n      this.state.zoom - 25,\n      this.mergedConfig.minZoom || 50\n    );\n    this.updateZoom(newZoom);\n  }\n\n  onZoomReset(): void {\n    this.updateZoom(this.mergedConfig.initialZoom || 100);\n  }\n\n  updateZoom(zoom: number): void {\n    this.state = { ...this.state, zoom };\n    this.ngZone.run(() => {\n      this.onZoomChange.emit(zoom);\n      this.cdr.detectChanges();\n    });\n  }\n\n  onRotateLeft(): void {\n    this.updateRotation(this.state.rotation - 90);\n  }\n\n  onRotateRight(): void {\n    this.updateRotation(this.state.rotation + 90);\n  }\n\n  updateRotation(rotation: number): void {\n    // Normalize rotation to 0-360 range\n    const normalizedRotation = ((rotation % 360) + 360) % 360;\n    this.state = { ...this.state, rotation: normalizedRotation };\n    this.ngZone.run(() => {\n      this.onRotationChange.emit(normalizedRotation);\n      this.cdr.detectChanges();\n    });\n  }\n\n  onPreviousPage(): void {\n    if (this.state.currentPage > 1) {\n      const newPage = this.state.currentPage - 1;\n      this.updatePage(newPage);\n    }\n  }\n\n  onNextPage(): void {\n    if (this.state.currentPage < this.state.totalPages) {\n      const newPage = this.state.currentPage + 1;\n      this.updatePage(newPage);\n    }\n  }\n\n  updatePage(page: number): void {\n    this.state = { ...this.state, currentPage: page };\n    this.ngZone.run(() => {\n      this.onPageChange.emit(page);\n      this.cdr.detectChanges();\n    });\n  }\n\n  onToggleViewMode(): void {\n    const newViewMode =\n      this.state.viewMode === 'single' ? 'continuous' : 'single';\n    this.state = { ...this.state, viewMode: newViewMode };\n    this.cdr.detectChanges();\n  }\n\n  onDownload(): void {\n    this._helper.downloadResource(this.effectiveDocumentUrl, this.fileName);\n  }\n\n  onOpenInNewTab(): void {\n    window.open(this.effectiveDocumentUrl, '_blank', 'noopener,noreferrer');\n  }\n\n  async onFullscreen(): Promise<void> {\n    if (!this.containerRef?.nativeElement) return;\n\n    try {\n      if (this.state.fullscreen) {\n        await exitFullscreen();\n      } else {\n        await enterFullscreen(this.containerRef.nativeElement);\n      }\n    } catch (error) {\n      this.errorBoundary.reportError(error as Error, 'Fullscreen operation');\n    }\n  }\n\n  // Legacy methods for backward compatibility\n  closeModal(): void {\n    this.isModalOpen = false;\n  }\n\n  openModal(): void {\n    this.isModalOpen = true;\n  }\n\n  downloadFile(): void {\n    this.onDownload();\n  }\n\n  upDateZoom(zoomType: string): void {\n    switch (zoomType) {\n      case 'increment':\n        this.onZoomIn();\n        break;\n      case 'decrement':\n        this.onZoomOut();\n        break;\n      default:\n        this.onZoomReset();\n        break;\n    }\n  }\n\n  rotateDoc(): void {\n    this.onRotateRight();\n  }\n\n  viewInFullScreen(): void {\n    this.openModal();\n  }\n\n  // Legacy getters for backward compatibility\n  get zoom_in(): number {\n    return this.state.zoom / 100;\n  }\n\n  set zoom_in(value: number) {\n    this.state.zoom = value * 100;\n  }\n\n  get rotation(): number {\n    return this.state.rotation;\n  }\n\n  set rotation(value: number) {\n    this.state.rotation = value;\n  }\n\n  get isArchieved(): boolean {\n    return !!this.state.error;\n  }\n\n  get pdfType(): string {\n    return CommonConstant.PDFTYPE;\n  }\n\n  get imageType(): string {\n    return CommonConstant.IMAGETYPE;\n  }\n\n  get inputModelRef(): any {\n    return null;\n  }\n\n  set inputModelRef(value: any) {\n    // Deprecated\n  }\n}\n","<!-- Custom Modal Wrapper -->\n<lib-custom-modal\n  [isOpen]=\"isModalOpen\"\n  [size]=\"mergedConfig.modalSize || 'lg'\"\n  [title]=\"fileName\"\n  (close)=\"closeModal()\"\n>\n  <ng-container *ngTemplateOutlet=\"viewerContent\"></ng-container>\n</lib-custom-modal>\n\n<div *ngIf=\"!isModalOpen\"\n  #containerRef\n  class=\"document-viewer-container\"\n  [class.fullscreen]=\"state.fullscreen\"\n  [class.embedded]=\"mergedConfig.embedded\"\n  [style.height]=\"mergedConfig.height\"\n  [style.width]=\"mergedConfig.width\"\n  [ngClass]=\"mergedConfig.className\"\n>\n  <ng-container *ngTemplateOutlet=\"viewerContent\"></ng-container>\n</div>\n\n\n<!-- Reusable Viewer Content -->\n<ng-template #viewerContent>\n  <div [class.in-modal]=\"isModalOpen\">\n    <!-- No Document State -->\n    <div *ngIf=\"!effectiveDocumentUrl\" class=\"no-document-state\">\n      <div class=\"no-document-content\">\n        <div class=\"svg-icon big-icon\" [innerHTML]=\"icons.noDocument | safeHtml\"></div>\n        <h3>No Document Found</h3>\n        <p>Please provide a document URL to preview</p>\n      </div>\n    </div>\n\n    <!-- Document Content -->\n    <div *ngIf=\"effectiveDocumentUrl\" class=\"document-content\">\n      <!-- Toolbar -->\n      <ngx-document-toolbar\n        *ngIf=\"mergedConfig.showToolbar\"\n        [state]=\"state\"\n        [documentType]=\"detectedDocumentType\"\n        [showDownload]=\"mergedConfig.showDownload\"\n        [showInNewTab]=\"mergedConfig.showInNewTab\"\n        [showZoom]=\"mergedConfig.showZoom\"\n        [showRotation]=\"mergedConfig.showRotation\"\n        [showFullscreen]=\"mergedConfig.showFullscreen\"\n        [showViewModeToggle]=\"mergedConfig.showViewModeToggle\"\n        [embedded]=\"mergedConfig.embedded\"\n        (onDownload)=\"onDownload()\"\n        (onOpenInNewTab)=\"onOpenInNewTab()\"\n        (onZoomIn)=\"onZoomIn()\"\n        (onZoomOut)=\"onZoomOut()\"\n        (onZoomReset)=\"onZoomReset()\"\n        (onRotateLeft)=\"onRotateLeft()\"\n        (onRotateRight)=\"onRotateRight()\"\n        (onPreviousPage)=\"onPreviousPage()\"\n        (onNextPage)=\"onNextPage()\"\n        (onFullscreen)=\"onFullscreen()\"\n        (onToggleViewMode)=\"onToggleViewMode()\"\n      ></ngx-document-toolbar>\n\n      <!-- Document Viewer -->\n      <div class=\"viewer-container\">\n        <!-- PDF Viewer -->\n        <ngx-pdf-viewer\n          *ngIf=\"detectedDocumentType === 'pdf' && !state.error\"\n          [src]=\"effectiveDocumentUrl\"\n          [currentPage]=\"state.currentPage\"\n          [zoom]=\"state.zoom\"\n          [rotation]=\"state.rotation\"\n          [viewMode]=\"state.viewMode\"\n          [height]=\"mergedConfig.embedded ? '100%' : 'calc(100% - 60px)'\"\n          [width]=\"'100%'\"\n          [proxyUrl]=\"mergedConfig.proxyUrl\"\n          (onLoad)=\"onDocumentLoad({ type: 'pdf', totalPages: $event.totalPages })\"\n          (onError)=\"onDocumentError($event)\"\n          (onPageChange)=\"updatePage($event)\"\n        ></ngx-pdf-viewer>\n\n        <!-- Image Viewer -->\n        <ngx-image-viewer\n          *ngIf=\"detectedDocumentType === 'image' && !state.error\"\n          [src]=\"effectiveDocumentUrl\"\n          [zoom]=\"state.zoom\"\n          [rotation]=\"state.rotation\"\n          [height]=\"mergedConfig.embedded ? '100%' : 'calc(100% - 60px)'\"\n          [width]=\"'100%'\"\n          [proxyUrl]=\"mergedConfig.proxyUrl\"\n          (onLoad)=\"onDocumentLoad({ type: 'image', fileName: $event.alt, dimensions: { width: $event.naturalWidth, height: $event.naturalHeight } })\"\n          (onError)=\"onDocumentError($event)\"\n          (onZoomChange)=\"updateZoom($event)\"\n          (onRotationChange)=\"updateRotation($event)\"\n        ></ngx-image-viewer>\n\n        <!-- Unsupported Document Type -->\n        <div *ngIf=\"detectedDocumentType === 'unknown' && !state.loading\" class=\"unsupported-state\">\n          <div class=\"unsupported-content\">\n            <div class=\"svg-icon big-icon\" [innerHTML]=\"icons.unsupported | safeHtml\"></div>\n            <h3>Unsupported Document Type</h3>\n            <p>This document format is not supported for preview</p>\n            <div class=\"unsupported-actions\">\n              <button class=\"btn btn-primary\" (click)=\"onDownload()\">\n                <div class=\"svg-icon btn-icon\" [innerHTML]=\"icons.download | safeHtml\"></div>\n                Download to view\n              </button>\n              <button class=\"btn btn-secondary\" (click)=\"onOpenInNewTab()\">\n                 <div class=\"svg-icon btn-icon\" [innerHTML]=\"icons.externalLink | safeHtml\"></div>\n                Open in new tab\n              </button>\n            </div>\n          </div>\n        </div>\n\n        <!-- Error State -->\n        <div *ngIf=\"state.error\" class=\"error-state\">\n          <div class=\"error-content\">\n            <div class=\"svg-icon big-icon\" [innerHTML]=\"icons.error | safeHtml\"></div>\n            <h3>Failed to Load Document</h3>\n            <p>{{ state.error }}</p>\n            <div class=\"error-actions\">\n              <button class=\"btn btn-primary\" (click)=\"initializeViewer()\">\n                <div class=\"svg-icon btn-icon\" [innerHTML]=\"icons.retry | safeHtml\"></div>\n                Retry\n              </button>\n              <button class=\"btn btn-secondary\" (click)=\"onOpenInNewTab()\">\n                <div class=\"svg-icon btn-icon\" [innerHTML]=\"icons.externalLink | safeHtml\"></div>\n                Open in new tab\n              </button>\n              <button class=\"btn btn-secondary\" (click)=\"onDownload()\">\n                <div class=\"svg-icon btn-icon\" [innerHTML]=\"icons.download | safeHtml\"></div>\n                Download\n              </button>\n            </div>\n          </div>\n        </div>\n\n        <!-- Loading State -->\n        <div *ngIf=\"state.loading\" class=\"loading-state\">\n          <div class=\"loading-content\">\n            <div class=\"loading-spinner\"></div>\n            <div class=\"loading-text\">\n              <p>Loading document...</p>\n              <p *ngIf=\"state.documentInfo\" class=\"document-info\">\n                {{ state.documentInfo.fileName }}\n              </p>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n// Components\nimport { ImgPdfViewerComponent } from './img-pdf-viewer.component';\nimport { PdfViewerComponent } from './pdf-viewer.component';\nimport { ImageViewerComponent } from './image-viewer.component';\nimport { ToolbarComponent } from './toolbar.component';\nimport { CustomModalComponent } from './modal/modal.component';\n\n// Services\nimport { ImgPdfViewerService } from './img-pdf-viewer.service';\nimport { ErrorBoundaryService } from './error-boundary.service';\nimport { SafeHtmlPipe } from './safe-html.pipe';\n\n@NgModule({\n  declarations: [\n    ImgPdfViewerComponent,\n    PdfViewerComponent,\n    ImageViewerComponent,\n    ToolbarComponent,\n    CustomModalComponent,\n    SafeHtmlPipe,\n  ],\n  imports: [CommonModule, FormsModule],\n  providers: [ImgPdfViewerService, ErrorBoundaryService],\n  exports: [\n    ImgPdfViewerComponent,\n    PdfViewerComponent,\n    ImageViewerComponent,\n    ToolbarComponent,\n  ],\n})\nexport class ImgPdfViewerModule {}\n","/*\n * Public API Surface of img-pdf-viewer\n */\n\n// Main module\nexport * from './lib/img-pdf-viewer.module';\n\n// Components\nexport * from './lib/img-pdf-viewer.component';\nexport * from './lib/pdf-viewer.component';\nexport * from './lib/image-viewer.component';\nexport * from './lib/toolbar.component';\n\n// Services\nexport * from './lib/img-pdf-viewer.service';\nexport * from './lib/error-boundary.service';\n\n// Types and interfaces\nexport * from './lib/types';\n\n// Utilities\nexport * from './lib/utils';\n\n// Configuration\nexport * from './lib/pdf-config';\n\n// Legacy exports for backward compatibility\nexport * from './lib/docConfig';\nexport * from './lib/Common.constant';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.SafeHtmlPipe","i1.ErrorBoundaryService","i2","i1.ImgPdfViewerService","i2.ErrorBoundaryService","i3.CustomModalComponent","i4.ToolbarComponent","i5.PdfViewerComponent","i6.ImageViewerComponent","i7","i8.SafeHtmlPipe"],"mappings":"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"}