{"version":3,"file":"codewithrajat-rm-ng-pdf-export.mjs","sources":["../../../projects/rm-ng-pdf-export/src/lib/tokens/pdf-export-config.token.ts","../../../projects/rm-ng-pdf-export/src/lib/services/pdf-export.service.ts","../../../projects/rm-ng-pdf-export/src/lib/directives/pdf-export.directive.ts","../../../projects/rm-ng-pdf-export/src/lib/components/pdf-export.component.ts","../../../projects/rm-ng-pdf-export/src/codewithrajat-rm-ng-pdf-export.ts"],"sourcesContent":["// pdf-export-config.token.ts\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport type PageSize = 'A4' | 'A3' | 'A5' | 'Letter' | 'Legal' | 'Tabloid' | 'Ledger' | 'Executive' | 'B4' | 'B5';\r\nexport type PageOrientation = 'portrait' | 'landscape';\r\n\r\nexport interface PdfExportConfig {\r\n  pageSize?: PageSize; // e.g. 'A4'\r\n  orientation?: PageOrientation;\r\n  margins?: { top: number; bottom: number; left: number; right: number };\r\n  filename?: string;\r\n  metadata?: { title?: string; author?: string; subject?: string };\r\n  openInNewTab?: boolean;\r\n}\r\n\r\nexport const PDF_EXPORT_CONFIG = new InjectionToken<PdfExportConfig>('PDF_EXPORT_CONFIG');\r\n","import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport {PDFDocument, PDFImage, PDFPage} from 'pdf-lib';\r\nimport { PDF_EXPORT_CONFIG, PdfExportConfig } from '../tokens/pdf-export-config.token';\r\nimport html2canvas from 'html2canvas';\r\n\r\ninterface PageDimensions {\r\n  width: number;\r\n  height: number;\r\n}\r\n\r\ninterface PageSizeDefinition {\r\n  name: string;\r\n  width: number;  // in points\r\n  height: number; // in points\r\n}\r\n\r\ninterface ContentBreakPoint {\r\n  y: number;\r\n  priority: number; // Higher number = better break point\r\n  elementType: string;\r\n}\r\n\r\n@Injectable()\r\nexport class PdfExportService {\r\n  // Predefined page sizes in points (72 DPI)\r\n  private readonly PAGE_SIZES: Record<string, PageSizeDefinition> = {\r\n    'A4': { name: 'A4', width: 595.28, height: 841.89 },\r\n    'A3': { name: 'A3', width: 841.89, height: 1190.55 },\r\n    'A5': { name: 'A5', width: 419.53, height: 595.28 },\r\n    'Letter': { name: 'Letter', width: 612, height: 792 },\r\n    'Legal': { name: 'Legal', width: 612, height: 1008 },\r\n    'Tabloid': { name: 'Tabloid', width: 792, height: 1224 },\r\n    'Ledger': { name: 'Ledger', width: 1224, height: 792 },\r\n    'Executive': { name: 'Executive', width: 522, height: 756 },\r\n    'B4': { name: 'B4', width: 708.66, height: 1000.63 },\r\n    'B5': { name: 'B5', width: 498.90, height: 708.66 }\r\n  };\r\n\r\n  constructor(\r\n    @Inject(PDF_EXPORT_CONFIG) private readonly config: PdfExportConfig,\r\n    @Inject(PLATFORM_ID) private readonly platformId: object\r\n  ) {}\r\n\r\n  async exportHtml(element: HTMLElement, overrideConfig?: PdfExportConfig): Promise<void> {\r\n    if (!isPlatformBrowser(this.platformId)) {\r\n      throw new Error('PDF export is only supported in browser environments.');\r\n    }\r\n\r\n    const config = { ...this.config, ...overrideConfig };\r\n\r\n    // Get page dimensions based on configuration\r\n    const pageSize = config.pageSize || 'A4';\r\n    const orientation = config.orientation || 'portrait';\r\n    const pageDimensions = this._getPageDimensions(pageSize, orientation);\r\n\r\n    // Enhanced html2canvas options for high-quality PDF output\r\n    const html2canvasOptions = {\r\n      scale: 3, // Higher scale for crystal-clear resolution (3x)\r\n      useCORS: true, // Enable CORS for external images\r\n      allowTaint: false, // Prevent tainted canvas\r\n      backgroundColor: '#ffffff', // Ensure white background\r\n      logging: false, // Disable console logging\r\n      imageTimeout: 15000, // Timeout for image loading\r\n      removeContainer: true, // Clean up temporary containers\r\n      foreignObjectRendering: true, // Better text rendering\r\n      // High-quality rendering options\r\n      imageSmoothingEnabled: true,\r\n      imageSmoothingQuality: 'high' as any,\r\n      letterRendering: true, // Better letter/font rendering\r\n      // Preserve margins and padding by capturing full element bounds\r\n      x: 0,\r\n      y: 0,\r\n      scrollX: 0,\r\n      scrollY: 0,\r\n      // Capture with original dimensions to preserve layout\r\n      width: element.scrollWidth,\r\n      height: element.scrollHeight,\r\n      // Additional quality options\r\n      dpi: 300, // High DPI for print quality\r\n      windowWidth: window.innerWidth,\r\n      windowHeight: window.innerHeight\r\n    };\r\n\r\n    // Convert HTML element to canvas with enhanced options\r\n    const canvas: HTMLCanvasElement = await html2canvas(element, html2canvasOptions);\r\n\r\n    // Calculate scale factor with margin consideration\r\n    const scaleFactor = this._calculateScaleFactorWithMargins(canvas.width, pageDimensions.width, element);\r\n\r\n    // Detect optimal break points in the content\r\n    const breakPoints = this._detectContentBreakPoints(element, canvas, scaleFactor);\r\n\r\n    // Calculate smart page breaks\r\n    const pageBreaks = this._calculateSmartPageBreaks(canvas.height, scaleFactor, pageDimensions.height, breakPoints);\r\n\r\n    // Create PDF document\r\n    const pdf: PDFDocument = await PDFDocument.create();\r\n\r\n    // Add metadata if provided\r\n    if (config.metadata) {\r\n      pdf.setTitle(config.metadata.title || '');\r\n      pdf.setAuthor(config.metadata.author || '');\r\n      pdf.setSubject(config.metadata.subject || '');\r\n    }\r\n\r\n    // Generate each page with smart breaks and improved quality\r\n    for (let pageIndex = 0; pageIndex < pageBreaks.length; pageIndex++) {\r\n      const currentBreak = pageBreaks[pageIndex];\r\n      const nextBreak = pageBreaks[pageIndex + 1];\r\n\r\n      // Create canvas for this page with smart bounds\r\n      const pageCanvas = this._createSmartPageCanvas(\r\n        canvas,\r\n        currentBreak,\r\n        nextBreak,\r\n        scaleFactor,\r\n        pageDimensions\r\n      );\r\n\r\n      // Convert page canvas to high-quality image data\r\n      const pageImgData = pageCanvas.toDataURL('image/png', 1.0); // Maximum quality (1.0)\r\n\r\n      // Add page to PDF with configured dimensions\r\n      const page: PDFPage = pdf.addPage([pageDimensions.width, pageDimensions.height]);\r\n\r\n      // Embed the image and draw it on the page\r\n      const png: PDFImage = await pdf.embedPng(pageImgData);\r\n      page.drawImage(png, {\r\n        x: 0,\r\n        y: 0,\r\n        width: pageDimensions.width,\r\n        height: pageDimensions.height\r\n      });\r\n    }\r\n\r\n    // Save and download the PDF\r\n    const bytes: Uint8Array = await pdf.save();\r\n    this._triggerDownload(bytes, config.filename || 'document.pdf', config.openInNewTab);\r\n  }\r\n\r\n  private _triggerDownload(data: Uint8Array, filename: string, openInNewTab?: boolean): void {\r\n    const blob = new Blob([data as BlobPart], { type: 'application/pdf' });\r\n    const url: string = URL.createObjectURL(blob);\r\n\r\n    if (openInNewTab) {\r\n      window.open(url, '_blank');\r\n    } else {\r\n      const a: HTMLAnchorElement = document.createElement('a');\r\n      a.href = url;\r\n      a.download = filename;\r\n      a.click();\r\n    }\r\n\r\n    URL.revokeObjectURL(url);\r\n  }\r\n\r\n  private _widthPxToPt(px: number): number {\r\n    return (px * 72) / 96;\r\n  }\r\n\r\n  private _heightPxToPt(px: number): number {\r\n    return (px * 72) / 96;\r\n  }\r\n\r\n  /**\r\n   * Get page dimensions based on page size and orientation\r\n   */\r\n  private _getPageDimensions(pageSize: string = 'A4', orientation: 'portrait' | 'landscape' = 'portrait'): PageDimensions {\r\n    const pageDef = this.PAGE_SIZES[pageSize.toUpperCase()];\r\n    if (!pageDef) {\r\n      throw new Error(`Unsupported page size: ${pageSize}. Supported sizes: ${Object.keys(this.PAGE_SIZES).join(', ')}`);\r\n    }\r\n\r\n    if (orientation === 'landscape') {\r\n      return {\r\n        width: pageDef.height,\r\n        height: pageDef.width\r\n      };\r\n    } else {\r\n      return {\r\n        width: pageDef.width,\r\n        height: pageDef.height\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get available page sizes\r\n   */\r\n  public getAvailablePageSizes(): string[] {\r\n    return Object.keys(this.PAGE_SIZES);\r\n  }\r\n\r\n  /**\r\n   * Calculate the scale factor to fit content width to page width\r\n   */\r\n  private _calculateScaleFactor(canvasWidth: number, pageWidth: number): number {\r\n    const contentWidthInPoints = this._widthPxToPt(canvasWidth);\r\n    return pageWidth / contentWidthInPoints;\r\n  }\r\n\r\n  /**\r\n   * Calculate scale factor with margin preservation\r\n   */\r\n  private _calculateScaleFactorWithMargins(canvasWidth: number, pageWidth: number, element: HTMLElement): number {\r\n    // Get element's computed style to understand margins and padding\r\n    const computedStyle = window.getComputedStyle(element);\r\n    const marginLeft = parseFloat(computedStyle.marginLeft) || 0;\r\n    const marginRight = parseFloat(computedStyle.marginRight) || 0;\r\n    const paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;\r\n    const paddingRight = parseFloat(computedStyle.paddingRight) || 0;\r\n\r\n    // Calculate effective content width (excluding margins/padding if needed)\r\n    const totalHorizontalSpacing = marginLeft + marginRight + paddingLeft + paddingRight;\r\n\r\n    // Get the actual content width from the element\r\n    const elementWidth = element.offsetWidth;\r\n    const elementScrollWidth = element.scrollWidth;\r\n\r\n    // Use the larger width to ensure full content capture\r\n    const effectiveWidth = Math.max(elementWidth, elementScrollWidth, canvasWidth);\r\n\r\n    // Convert to points and calculate scale factor\r\n    const contentWidthInPoints = this._widthPxToPt(effectiveWidth);\r\n\r\n    // Leave some margin in PDF (10% on each side for better appearance)\r\n    const pdfMargin = pageWidth * 0.1; // 5% margin on each side\r\n    const availablePageWidth = pageWidth - pdfMargin;\r\n\r\n    const scaleFactor = availablePageWidth / contentWidthInPoints;\r\n\r\n    // Ensure scale factor doesn't exceed 1 for high-resolution displays\r\n    return Math.min(scaleFactor, 1);\r\n  }\r\n\r\n  /**\r\n   * Calculate how many pages are needed for the given content height\r\n   */\r\n  private _calculateRequiredPages(canvasHeight: number, scaleFactor: number, pageHeight: number): number {\r\n    const scaledHeightInPoints = this._heightPxToPt(canvasHeight) * scaleFactor;\r\n    return Math.ceil(scaledHeightInPoints / pageHeight);\r\n  }\r\n\r\n  /**\r\n   * Detect optimal content break points by analyzing element boundaries\r\n   */\r\n  private _detectContentBreakPoints(element: HTMLElement, canvas: HTMLCanvasElement, scaleFactor: number): ContentBreakPoint[] {\r\n    const breakPoints: ContentBreakPoint[] = [];\r\n\r\n    // Add start point\r\n    breakPoints.push({ y: 0, priority: 10, elementType: 'start' });\r\n\r\n    // Find elements with page-break CSS properties\r\n    const sectionsElements = element.querySelectorAll('.pdf-section, section, .content-block, .blog-card, .feature-card');\r\n\r\n    sectionsElements.forEach((el) => {\r\n      const htmlEl = el as HTMLElement;\r\n      const rect = htmlEl.getBoundingClientRect();\r\n      const elementRect = element.getBoundingClientRect();\r\n\r\n      // Calculate relative position to the exported element\r\n      const relativeTop = rect.top - elementRect.top;\r\n      const relativeBottom = rect.bottom - elementRect.top;\r\n\r\n      // Convert to canvas coordinates\r\n      const canvasTop = relativeTop * (canvas.height / element.scrollHeight);\r\n      const canvasBottom = relativeBottom * (canvas.height / element.scrollHeight);\r\n\r\n      // Check CSS page-break properties\r\n      const computedStyle = window.getComputedStyle(htmlEl);\r\n      const pageBreakBefore = computedStyle.getPropertyValue('page-break-before');\r\n      const pageBreakAfter = computedStyle.getPropertyValue('page-break-after');\r\n      const pageBreakInside = computedStyle.getPropertyValue('page-break-inside');\r\n\r\n      // Add break point before element if requested\r\n      if (pageBreakBefore === 'always' || pageBreakBefore === 'auto') {\r\n        breakPoints.push({\r\n          y: canvasTop,\r\n          priority: pageBreakBefore === 'always' ? 9 : 7,\r\n          elementType: htmlEl.className || htmlEl.tagName.toLowerCase()\r\n        });\r\n      }\r\n\r\n      // Add break point after element if requested\r\n      if (pageBreakAfter === 'always' || pageBreakAfter === 'auto') {\r\n        breakPoints.push({\r\n          y: canvasBottom,\r\n          priority: pageBreakAfter === 'always' ? 9 : 7,\r\n          elementType: htmlEl.className || htmlEl.tagName.toLowerCase()\r\n        });\r\n      }\r\n\r\n      // If element should not be broken inside, add high-priority boundaries\r\n      if (pageBreakInside === 'avoid') {\r\n        breakPoints.push({\r\n          y: canvasTop,\r\n          priority: 8,\r\n          elementType: `${htmlEl.className || htmlEl.tagName.toLowerCase()}-start`\r\n        });\r\n        breakPoints.push({\r\n          y: canvasBottom,\r\n          priority: 8,\r\n          elementType: `${htmlEl.className || htmlEl.tagName.toLowerCase()}-end`\r\n        });\r\n      }\r\n    });\r\n\r\n    // Add end point\r\n    breakPoints.push({ y: canvas.height, priority: 10, elementType: 'end' });\r\n\r\n    // Sort by Y position\r\n    breakPoints.sort((a, b) => a.y - b.y);\r\n\r\n    // Remove duplicates and very close points\r\n    const cleanedBreakPoints: ContentBreakPoint[] = [];\r\n    for (let i = 0; i < breakPoints.length; i++) {\r\n      const current = breakPoints[i];\r\n      const lastAdded = cleanedBreakPoints[cleanedBreakPoints.length - 1];\r\n\r\n      // Keep if it's the first point or far enough from the last point\r\n      if (!lastAdded || Math.abs(current.y - lastAdded.y) > 20) {\r\n        cleanedBreakPoints.push(current);\r\n      } else if (current.priority > lastAdded.priority) {\r\n        // Replace with higher priority point\r\n        cleanedBreakPoints[cleanedBreakPoints.length - 1] = current;\r\n      }\r\n    }\r\n\r\n    return cleanedBreakPoints;\r\n  }\r\n\r\n  /**\r\n   * Calculate smart page breaks that respect content boundaries\r\n   */\r\n  private _calculateSmartPageBreaks(canvasHeight: number, scaleFactor: number, pageHeight: number, breakPoints: ContentBreakPoint[]): number[] {\r\n    const pageHeightPx = (pageHeight * 96) / 72 / scaleFactor;\r\n    const pageBreaks: number[] = [];\r\n\r\n    let currentPageStart = 0;\r\n    pageBreaks.push(currentPageStart);\r\n\r\n    while (currentPageStart < canvasHeight) {\r\n      const idealPageEnd = currentPageStart + pageHeightPx;\r\n\r\n      if (idealPageEnd >= canvasHeight) {\r\n        // Last page\r\n        break;\r\n      }\r\n\r\n      // Find the best break point near the ideal page end\r\n      let bestBreakPoint = idealPageEnd;\r\n      let bestPriority = 0;\r\n\r\n      // Look for break points within a reasonable range of the ideal end\r\n      const searchRange = pageHeightPx * 0.2; // 20% of page height\r\n      const searchStart = Math.max(currentPageStart + pageHeightPx * 0.5, idealPageEnd - searchRange);\r\n      const searchEnd = idealPageEnd + searchRange;\r\n\r\n      for (const breakPoint of breakPoints) {\r\n        if (breakPoint.y >= searchStart && breakPoint.y <= searchEnd && breakPoint.y > currentPageStart) {\r\n          if (breakPoint.priority > bestPriority) {\r\n            bestBreakPoint = breakPoint.y;\r\n            bestPriority = breakPoint.priority;\r\n          }\r\n        }\r\n      }\r\n\r\n      // If no good break point found, use the ideal position\r\n      if (bestPriority === 0) {\r\n        bestBreakPoint = idealPageEnd;\r\n      }\r\n\r\n      currentPageStart = bestBreakPoint;\r\n      pageBreaks.push(currentPageStart);\r\n    }\r\n\r\n    return pageBreaks;\r\n  }\r\n\r\n  /**\r\n   * Create a canvas section for a specific page with smart boundaries\r\n   */\r\n  private _createSmartPageCanvas(\r\n    sourceCanvas: HTMLCanvasElement,\r\n    pageStartY: number,\r\n    pageEndY: number | undefined,\r\n    scaleFactor: number,\r\n    pageDimensions: PageDimensions\r\n  ): HTMLCanvasElement {\r\n    const pageCanvas = document.createElement('canvas');\r\n    const ctx = pageCanvas.getContext('2d')!;\r\n\r\n    // Ultra high resolution canvas for crystal-clear quality (4x)\r\n    const resolution = 4;\r\n    const pageWidthPx = (pageDimensions.width * 96) / 72;\r\n    const pageHeightPx = (pageDimensions.height * 96) / 72;\r\n\r\n    // Set canvas size with ultra high resolution\r\n    pageCanvas.width = pageWidthPx * resolution;\r\n    pageCanvas.height = pageHeightPx * resolution;\r\n\r\n    // Scale the canvas back down using CSS\r\n    pageCanvas.style.width = pageWidthPx + 'px';\r\n    pageCanvas.style.height = pageHeightPx + 'px';\r\n\r\n    // Scale the context to match the ultra high resolution\r\n    ctx.scale(resolution, resolution);\r\n\r\n    // Enable maximum quality image rendering\r\n    ctx.imageSmoothingEnabled = true;\r\n    ctx.imageSmoothingQuality = 'high';\r\n\r\n    // Additional quality settings for crisp rendering\r\n    ctx.textBaseline = 'top';\r\n    ctx.fillStyle = 'white';\r\n    ctx.fillRect(0, 0, pageWidthPx, pageHeightPx);\r\n\r\n    // Calculate margins for better appearance (5% on each side)\r\n    const marginX = pageWidthPx * 0.05;\r\n    const marginY = pageHeightPx * 0.05;\r\n    const availableWidth = pageWidthPx - (marginX * 2);\r\n    const availableHeight = pageHeightPx - (marginY * 2);\r\n\r\n    // Calculate source height for this page\r\n    const sourceHeight = pageEndY ? (pageEndY - pageStartY) : (sourceCanvas.height - pageStartY);\r\n\r\n    if (sourceHeight > 0) {\r\n      // Calculate scaled dimensions while preserving aspect ratio\r\n      const sourceAspectRatio = sourceCanvas.width / sourceHeight;\r\n      let destWidth = availableWidth;\r\n      let destHeight = destWidth / sourceAspectRatio;\r\n\r\n      // If height exceeds available space, scale by height instead\r\n      if (destHeight > availableHeight) {\r\n        destHeight = availableHeight;\r\n        destWidth = destHeight * sourceAspectRatio;\r\n      }\r\n\r\n      // Center the content horizontally if it's smaller than available width\r\n      const offsetX = marginX + (availableWidth - destWidth) / 2;\r\n      const offsetY = marginY;\r\n\r\n      // Draw the source canvas section onto the page canvas with margins and high quality\r\n      ctx.drawImage(\r\n        sourceCanvas,\r\n        0, pageStartY, sourceCanvas.width, sourceHeight, // source (x, y, width, height)\r\n        offsetX, offsetY, destWidth, destHeight // destination (x, y, width, height)\r\n      );\r\n    }\r\n\r\n    return pageCanvas;\r\n  }\r\n\r\n  /**\r\n   * Create a canvas section for a specific page\r\n   */\r\n  private _createPageCanvas(sourceCanvas: HTMLCanvasElement, pageIndex: number, scaleFactor: number, pageDimensions: PageDimensions): HTMLCanvasElement {\r\n    const pageCanvas = document.createElement('canvas');\r\n    const ctx = pageCanvas.getContext('2d')!;\r\n\r\n    // Higher resolution for better quality\r\n    const resolution = 2;\r\n    const pageWidthPx = (pageDimensions.width * 96) / 72;\r\n    const pageHeightPx = (pageDimensions.height * 96) / 72;\r\n\r\n    // Set canvas size with high resolution\r\n    pageCanvas.width = pageWidthPx * resolution;\r\n    pageCanvas.height = pageHeightPx * resolution;\r\n\r\n    // Scale the canvas back down using CSS\r\n    pageCanvas.style.width = pageWidthPx + 'px';\r\n    pageCanvas.style.height = pageHeightPx + 'px';\r\n\r\n    // Scale the context to match the device pixel ratio\r\n    ctx.scale(resolution, resolution);\r\n\r\n    // Enable high-quality image rendering\r\n    ctx.imageSmoothingEnabled = true;\r\n    ctx.imageSmoothingQuality = 'high';\r\n\r\n    // Fill with white background\r\n    ctx.fillStyle = 'white';\r\n    ctx.fillRect(0, 0, pageWidthPx, pageHeightPx);\r\n\r\n    // Add margins for better appearance\r\n    const marginX = pageWidthPx * 0.05;\r\n    const marginY = pageHeightPx * 0.05;\r\n    const availableWidth = pageWidthPx - (marginX * 2);\r\n    const availableHeight = pageHeightPx - (marginY * 2);\r\n\r\n    // Calculate the height of content that fits on one page in source canvas pixels\r\n    const contentHeightPerPage = availableHeight / scaleFactor;\r\n\r\n    // Calculate source coordinates for this page\r\n    const sourceY = pageIndex * contentHeightPerPage;\r\n    const sourceHeight = Math.min(contentHeightPerPage, sourceCanvas.height - sourceY);\r\n\r\n    if (sourceHeight > 0) {\r\n      // Calculate scaled dimensions while preserving aspect ratio\r\n      const sourceAspectRatio = sourceCanvas.width / sourceHeight;\r\n      let destWidth = availableWidth;\r\n      let destHeight = destWidth / sourceAspectRatio;\r\n\r\n      // If height exceeds available space, scale by height instead\r\n      if (destHeight > availableHeight) {\r\n        destHeight = availableHeight;\r\n        destWidth = destHeight * sourceAspectRatio;\r\n      }\r\n\r\n      // Center the content\r\n      const offsetX = marginX + (availableWidth - destWidth) / 2;\r\n      const offsetY = marginY;\r\n\r\n      // Draw the source canvas section onto the page canvas with margins and high quality\r\n      ctx.drawImage(\r\n        sourceCanvas,\r\n        0, sourceY, sourceCanvas.width, sourceHeight, // source (x, y, width, height)\r\n        offsetX, offsetY, destWidth, destHeight // destination (x, y, width, height)\r\n      );\r\n    }\r\n\r\n    return pageCanvas;\r\n  }\r\n}\r\n","// pdf-export.directive.ts\r\nimport {Directive, ElementRef, HostListener, Input} from '@angular/core';\r\nimport { PdfExportService } from '../services/pdf-export.service';\r\nimport {PdfExportConfig, PageSize, PageOrientation} from '../tokens/pdf-export-config.token';\r\n\r\n@Directive({\r\n  selector: '[rmPdfExport]',\r\n  standalone: true,\r\n})\r\n\r\nexport class PdfExportDirective {\r\n  // Individual configuration inputs\r\n  @Input() pageSize?: PageSize;\r\n  @Input() orientation?: PageOrientation;\r\n  @Input() filename?: string;\r\n  @Input() openInNewTab?: boolean;\r\n\r\n  // Full configuration object input (takes precedence)\r\n  @Input() pdfConfig?: PdfExportConfig;\r\n\r\n  constructor(private readonly el: ElementRef, private readonly svc: PdfExportService) {}\r\n\r\n  @HostListener('click')\r\n  async onClick(): Promise<void> {\r\n    // Build configuration from individual inputs or use provided config\r\n    const config: PdfExportConfig = this.pdfConfig || {\r\n      pageSize: this.pageSize,\r\n      orientation: this.orientation,\r\n      filename: this.filename,\r\n      openInNewTab: this.openInNewTab\r\n    };\r\n\r\n    await this.svc.exportHtml(this.el.nativeElement, config);\r\n  }\r\n}\r\n","// pdf-export.component.ts\r\nimport { Component, ContentChild, ElementRef, Input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { PdfExportService } from '../services/pdf-export.service';\r\nimport { PdfExportConfig, PageSize, PageOrientation } from '../tokens/pdf-export-config.token';\r\n\r\n@Component({\r\n  selector: 'rm-pdf-export',\r\n  changeDetection: ChangeDetectionStrategy.Eager,\r\n  template: `<ng-content></ng-content><button (click)=\"export()\">Export PDF</button>`\r\n})\r\nexport class PdfExportComponent {\r\n  @ContentChild('pdfContent', { read: ElementRef, static: true }) content!: ElementRef;\r\n\r\n  // Individual configuration inputs\r\n  @Input() pageSize?: PageSize;\r\n  @Input() orientation?: PageOrientation;\r\n  @Input() filename?: string;\r\n  @Input() openInNewTab?: boolean;\r\n\r\n  // Full configuration object input (takes precedence)\r\n  @Input() pdfConfig?: PdfExportConfig;\r\n\r\n  constructor(private readonly svc: PdfExportService) {}\r\n\r\n  async export(): Promise<void> {\r\n    // Build configuration from individual inputs or use provided config\r\n    const config: PdfExportConfig = this.pdfConfig || {\r\n      pageSize: this.pageSize,\r\n      orientation: this.orientation,\r\n      filename: this.filename,\r\n      openInNewTab: this.openInNewTab\r\n    };\r\n\r\n    await this.svc.exportHtml(this.content.nativeElement, config);\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PdfExportService"],"mappings":"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"}