{"version":3,"file":"ngx-print.mjs","sources":["../../../src/lib/print-options.ts","../../../src/lib/ngx-print.base.ts","../../../src/lib/ngx-print.directive.ts","../../../src/lib/ngx-print.module.ts","../../../src/lib/ngx-print.service.ts","../../../src/public_api.ts","../../../src/ngx-print.ts"],"sourcesContent":["export class PrintOptions {\r\n  printSectionId = '';\r\n  printTitle = '';\r\n  useExistingCss = false;\r\n  bodyClass = '';\r\n  printMethod: 'window' | 'tab' | 'iframe' = 'window';\r\n  previewOnly = false;\r\n  closeWindow = true;\r\n  printDelay = 0;\r\n\r\n  constructor(options?: Partial<PrintOptions>) {\r\n    if (options) {\r\n      Object.assign(this, options);\r\n    }\r\n  }\r\n}\r\n","import { CSP_NONCE, DOCUMENT, inject, Service } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { PrintOptions } from './print-options';\r\n\r\n/** For example:\r\n * {\r\n *     'h2': { 'border': 'solid 1px' },\r\n *     'h1': { 'color': 'red', 'border': '1px solid' },\r\n *   */\r\nexport type PrintStyle = Record<string, Record<string, string>>;\r\n\r\n/**\r\n * Either a {@link PrintStyle} object, or a raw CSS string (e.g. `'h1 { color: red; }'`)\r\n * to be injected into the print document's <style> tag as-is.\r\n */\r\nexport type PrintStyleInput = PrintStyle | string;\r\n\r\n@Service()\r\nexport class PrintBase {\r\n  private document = inject(DOCUMENT);\r\n  private nonce = inject(CSP_NONCE, { optional: true });\r\n\r\n  private _iframeElement: HTMLIFrameElement | undefined;\r\n  private _printStyle: string[] = [];\r\n  private _styleSheetFile = '';\r\n  protected printComplete = new Subject<void>();\r\n\r\n  //#region Getters and Setters\r\n  /**\r\n   * Sets the print styles based on the provided values.\r\n   *\r\n   * @param values - Either a key-value pairs object representing print styles, or a raw CSS string.\r\n   * @protected\r\n   */\r\n  protected setPrintStyle(values: PrintStyleInput) {\r\n    if (typeof values === 'string') {\r\n      this._printStyle = values ? [values] : [];\r\n      return;\r\n    }\r\n\r\n    this._printStyle = [];\r\n    for (const [selector, declarations] of Object.entries(values)) {\r\n      // Built declaration-by-declaration (rather than via JSON.stringify + a quote-stripping\r\n      // regex) so that quotes and commas that are part of a CSS value (e.g. quoted font names,\r\n      // comma-separated font-family fallback lists) survive instead of being stripped/mangled.\r\n      const body = Object.entries(declarations)\r\n        .map(([property, value]) => `${property}:${value}`)\r\n        .join(';');\r\n      this._printStyle.push(`${selector}{${body}}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @returns the string that create the stylesheet which will be injected\r\n   * later within <style></style> tag.\r\n   */\r\n  public returnStyleValues(): string {\r\n    const styleNonce = this.nonce ? ` nonce=\"${this.nonce}\"` : '';\r\n    return `<style${styleNonce}> ${this._printStyle.join(' ')} </style>`;\r\n  }\r\n\r\n  /**\r\n   * @returns string which contains the link tags containing the css which will\r\n   * be injected later within <head></head> tag.\r\n   *\r\n   */\r\n  private returnStyleSheetLinkTags(): string {\r\n    return this._styleSheetFile;\r\n  }\r\n\r\n  /**\r\n   * Sets the style sheet file based on the provided CSS list.\r\n   *\r\n   * @param {string} cssList - CSS file or list of CSS files.\r\n   * @protected\r\n   */\r\n  // prettier-ignore\r\n  protected setStyleSheetFile(cssList: string): void {\r\n    if (!cssList) {\r\n      this._styleSheetFile = '';\r\n      return;\r\n    }\r\n    const files = cssList.split(',').map(f => f.trim());\r\n    const nonceAttr = this.nonce ? ` nonce=\"${this.nonce}\"` : '';\r\n    this._styleSheetFile = files\r\n      .map(url => `<link${nonceAttr} rel=\"stylesheet\" type=\"text/css\" href=\"${url}\">`)\r\n      .join('');\r\n  }\r\n\r\n  //#endregion\r\n\r\n  //#region Private methods used by PrintBase\r\n\r\n  private syncFormValues(source: HTMLElement, clone: HTMLElement): void {\r\n    // Select all form elements\r\n    const selector = 'input, select, textarea';\r\n    const sourceEls = source.querySelectorAll(selector);\r\n    const cloneEls = clone.querySelectorAll(selector);\r\n\r\n    for (let i = 0; i < sourceEls.length; i++) {\r\n      const srcNode = sourceEls[i] as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n      const cloneNode = cloneEls[i] as typeof srcNode;\r\n\r\n      if (srcNode instanceof HTMLInputElement) {\r\n        if (srcNode.type === 'checkbox' || srcNode.type === 'radio') {\r\n          if (srcNode.checked) cloneNode.setAttribute('checked', '');\r\n          else cloneNode.removeAttribute('checked'); // Remove if unchecked\r\n        } else if (srcNode.type === 'file') {\r\n          // File inputs can't be set programmatically for security\r\n          continue;\r\n        } else {\r\n          cloneNode.setAttribute('value', srcNode.value);\r\n        }\r\n      } else if (srcNode instanceof HTMLTextAreaElement) {\r\n        cloneNode.textContent = srcNode.value; // Use textContent, not innerHTML\r\n      } else if (srcNode instanceof HTMLSelectElement) {\r\n        Array.from((cloneNode as HTMLSelectElement).options).forEach((opt, idx) => {\r\n          if (idx === srcNode.selectedIndex) {\r\n            opt.setAttribute('selected', '');\r\n          } else {\r\n            opt.removeAttribute('selected'); // Remove from non-selected\r\n          }\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Converts a canvas element to an image and returns its HTML string.\r\n   *\r\n   * @param {HTMLCanvasElement} canvasElm - The canvas element to convert.\r\n   * @returns {HTMLImageElement | null} - HTML Element of the image.\r\n   * @private\r\n   */\r\n  private canvasToImageHtml(canvasElm: HTMLCanvasElement): HTMLImageElement | null {\r\n    try {\r\n      const dataUrl = canvasElm.toDataURL(); // may throw if canvas is tainted\r\n      const img = this.document.createElement('img');\r\n      img.src = dataUrl;\r\n      img.style.maxWidth = '100%';\r\n\r\n      // Preserve displayed size (not just bitmap size)\r\n      const rect = canvasElm.getBoundingClientRect();\r\n      if (rect.width) img.style.width = `${rect.width}px`;\r\n      if (rect.height) img.style.height = `${rect.height}px`;\r\n\r\n      return img;\r\n    } catch (err) {\r\n      console.warn(`Canvas conversion failed for ${canvasElm}. Likely the canvas is tainted:`, err);\r\n      // If toDataURL() fails (e.g., tainted canvas), keep canvas as-is in print output\r\n      return null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Includes canvas contents in the print section via img tags.\r\n   *\r\n   * @private\r\n   * @param source\r\n   * @param clone\r\n   */\r\n  private updateCanvasToImage(source: HTMLElement, clone: HTMLElement): void {\r\n    const sourceCanvases = source.querySelectorAll('canvas');\r\n    const cloneCanvases = clone.querySelectorAll('canvas');\r\n\r\n    for (let i = 0; i < sourceCanvases.length; i++) {\r\n      const srcCanvas = sourceCanvases[i];\r\n      const cloneCanvas = cloneCanvases[i];\r\n      const img = this.canvasToImageHtml(srcCanvas);\r\n      if (img) {\r\n        cloneCanvas.replaceWith(img);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Retrieves the HTML content of a specified printing section.\r\n   *\r\n   * @param {string} printSectionId - Id of the printing section.\r\n   * @returns {string | null} - HTML content of the printing section, or null if not found.\r\n   * @private\r\n   */\r\n  private getHtmlContents(printSectionId: string): string | null {\r\n    const sourceElm = this.document.getElementById(printSectionId);\r\n    if (!sourceElm) return null;\r\n\r\n    const cloneElm = sourceElm.cloneNode(true) as HTMLElement; // cloneNode(true) deep clones subtree\r\n\r\n    this.syncFormValues(sourceElm, cloneElm);\r\n    this.updateCanvasToImage(sourceElm, cloneElm);\r\n\r\n    return cloneElm.outerHTML;\r\n  }\r\n\r\n  /**\r\n   * Retrieves the HTML content of elements with the specified tag.\r\n   *\r\n   * @param {keyof HTMLElementTagNameMap} tag - HTML tag name.\r\n   * @returns {string} - Concatenated outerHTML of elements with the specified tag.\r\n   * @private\r\n   */\r\n  private getElementTag(tag: keyof HTMLElementTagNameMap): string {\r\n    const html: string[] = [];\r\n    const elements = this.document.getElementsByTagName(tag);\r\n    for (const el of Array.from(elements)) {\r\n      html.push((el as Element).outerHTML);\r\n    }\r\n    return html.join('\\r\\n');\r\n  }\r\n\r\n  //#endregion\r\n\r\n  protected notifyPrintComplete() {\r\n    this.printComplete.next();\r\n  }\r\n\r\n  /**\r\n   * Prints the specified content using the provided print options.\r\n   *\r\n   * @public\r\n   * @param printOptionInput - Options for printing.\r\n   */\r\n  protected print(printOptionInput?: Partial<PrintOptions>): void {\r\n    const printOptions = new PrintOptions(printOptionInput);\r\n    if (printOptions.printMethod === 'iframe') {\r\n      this.printWithIframe(printOptions);\r\n    } else {\r\n      this.printWithWindow(printOptions);\r\n    }\r\n  }\r\n\r\n  protected printWithWindow(printOptions: PrintOptions) {\r\n    // If the openNewTab option is set to true, then set the popOut option to an empty string\r\n    // This will cause the print dialog to open in a new tab.\r\n    const popOut = printOptions.printMethod === 'tab' ? '' : 'top=0,left=0,height=auto,width=auto';\r\n\r\n    const popupWin = window.open('', '_blank', popOut);\r\n\r\n    if (!popupWin) {\r\n      // the popup window could not be opened.\r\n      console.error('Could not open print window.');\r\n      return;\r\n    }\r\n\r\n    popupWin.document.open();\r\n    // Create the HTML structure\r\n    this.buildPrintDocument(popupWin.document, printOptions);\r\n\r\n    popupWin.document.close();\r\n\r\n    // Listen for the window closing\r\n    const checkClosedInterval = setInterval(() => {\r\n      if (popupWin.closed) {\r\n        clearInterval(checkClosedInterval);\r\n        this.notifyPrintComplete();\r\n      }\r\n    }, 500);\r\n\r\n    popupWin.addEventListener('load', () => {\r\n      if (!printOptions.previewOnly) {\r\n        setTimeout(() => {\r\n          popupWin.print();\r\n          if (printOptions.closeWindow) popupWin.close();\r\n        }, printOptions.printDelay || 0);\r\n      }\r\n    });\r\n  }\r\n\r\n  private printWithIframe(printOptions: PrintOptions): void {\r\n    if (this._iframeElement) {\r\n      this._iframeElement.remove();\r\n    }\r\n    this._iframeElement = this.document.createElement('iframe');\r\n    const iframe = this._iframeElement;\r\n    iframe.id = 'print-iframe-' + new Date().getTime();\r\n    iframe.style.position = 'absolute';\r\n    iframe.style.left = '-9999px';\r\n    iframe.style.top = '-9999px';\r\n    iframe.style.width = '0px';\r\n    iframe.style.height = '0px';\r\n    iframe.ariaHidden = 'true';\r\n\r\n    this.document.body.appendChild(iframe);\r\n\r\n    const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document;\r\n    if (!iframeDoc) {\r\n      console.error('Could not access iframe document.');\r\n      this.document.body.removeChild(iframe);\r\n      return;\r\n    }\r\n\r\n    iframeDoc.open();\r\n    const success = this.buildPrintDocument(iframeDoc, printOptions);\r\n    if (!success) {\r\n      iframeDoc.close();\r\n      this.document.body.removeChild(iframe);\r\n      return;\r\n    }\r\n    iframeDoc.close();\r\n\r\n    iframe.onload = () => {\r\n      const printWindow = iframe.contentWindow;\r\n      if (!printWindow) {\r\n        console.error('Could not access iframe window.');\r\n        this.document.body.removeChild(iframe);\r\n        return;\r\n      }\r\n\r\n      setTimeout(() => {\r\n        if (printOptions.previewOnly) {\r\n          return;\r\n        }\r\n        printWindow.focus();\r\n        printWindow.print();\r\n\r\n        const mediaQueryList = printWindow.matchMedia('print');\r\n        const listener = (mql: MediaQueryListEvent) => {\r\n          if (!mql.matches) {\r\n            this.notifyPrintComplete();\r\n            mediaQueryList.removeEventListener('change', listener);\r\n          }\r\n        };\r\n\r\n        mediaQueryList.addEventListener('change', listener);\r\n      }, printOptions.printDelay || 0);\r\n    };\r\n  }\r\n\r\n  private prepareDocumentComponents(printOptions: PrintOptions) {\r\n    let styles = '';\r\n    let links = '';\r\n    const baseTag = this.getElementTag('base');\r\n\r\n    if (printOptions.useExistingCss) {\r\n      styles = this.getElementTag('style');\r\n      links = this.getElementTag('link');\r\n    }\r\n\r\n    const printContents = this.getHtmlContents(printOptions.printSectionId);\r\n\r\n    return { styles, links, baseTag, printContents };\r\n  }\r\n\r\n  private buildPrintDocument(doc: Document, printOptions: PrintOptions): boolean {\r\n    const components = this.prepareDocumentComponents(printOptions);\r\n\r\n    if (!components.printContents) {\r\n      console.error(`Print section with id \"${printOptions.printSectionId}\" not found.`);\r\n      return false;\r\n    }\r\n\r\n    const html = doc.createElement('html');\r\n    const head = doc.createElement('head');\r\n    const body = doc.createElement('body');\r\n\r\n    // Set title\r\n    const title = doc.createElement('title');\r\n    title.textContent = printOptions.printTitle || '';\r\n    head.appendChild(title);\r\n\r\n    // Add all head content\r\n    if (components.baseTag) {\r\n      head.innerHTML += components.baseTag;\r\n    }\r\n    head.innerHTML += this.returnStyleValues();\r\n    head.innerHTML += this.returnStyleSheetLinkTags();\r\n    head.innerHTML += components.styles;\r\n    head.innerHTML += components.links;\r\n\r\n    // Set body class and content\r\n    if (printOptions.bodyClass) body.className = printOptions.bodyClass;\r\n    body.innerHTML += components.printContents;\r\n\r\n    // Assemble document\r\n    html.appendChild(head);\r\n    html.appendChild(body);\r\n    doc.appendChild(html);\r\n\r\n    return true;\r\n  }\r\n}\r\n","import { Directive, input, output } from '@angular/core';\r\nimport { PrintBase, PrintStyleInput } from './ngx-print.base';\r\nimport { PrintOptions } from './print-options';\r\nimport { take } from 'rxjs';\r\n\r\n@Directive({\r\n  selector: '[ngxPrint]',\r\n  standalone: true,\r\n  host: {\r\n    '(click)': 'print()',\r\n  },\r\n})\r\nexport class NgxPrintDirective extends PrintBase {\r\n  /**\r\n   * Prevents the print dialog from opening on the window\r\n   */\r\n  readonly previewOnly = input(false);\r\n\r\n  readonly printSectionId = input('');\r\n\r\n  readonly printTitle = input('');\r\n\r\n  readonly useExistingCss = input(false);\r\n\r\n  /**\r\n   * A delay in milliseconds to force the print dialog to wait before opened. Default: 0\r\n   */\r\n  readonly printDelay = input(0);\r\n\r\n  /**\r\n   * Whether to close the window after print() returns.\r\n   */\r\n  readonly closeWindow = input(true);\r\n\r\n  /**\r\n   * Class attribute to apply to the body element.\r\n   */\r\n  readonly bodyClass = input('');\r\n\r\n  /**\r\n   * Which PrintMethod (iframe/window/tab) to use.\r\n   */\r\n  readonly printMethod = input<PrintOptions['printMethod']>('window');\r\n\r\n  readonly printStyle = input<PrintStyleInput>({});\r\n\r\n  readonly styleSheetFile = input('');\r\n\r\n  readonly printCompleted = output<void>();\r\n\r\n  public override print(): void {\r\n    // Inputs carry side effects on PrintBase's internal style state, so they're applied\r\n    // synchronously here rather than via effect() (effects shouldn't propagate state).\r\n    super.setPrintStyle(this.printStyle());\r\n    super.setStyleSheetFile(this.styleSheetFile());\r\n\r\n    super.print({\r\n      printSectionId: this.printSectionId(),\r\n      printTitle: this.printTitle(),\r\n      useExistingCss: this.useExistingCss(),\r\n      bodyClass: this.bodyClass(),\r\n      printMethod: this.printMethod(),\r\n      previewOnly: this.previewOnly(),\r\n      closeWindow: this.closeWindow(),\r\n      printDelay: this.printDelay(),\r\n    });\r\n\r\n    this.printComplete.pipe(take(1)).subscribe(() => {\r\n      this.printCompleted.emit();\r\n    });\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { NgxPrintDirective } from './ngx-print.directive';\r\n\r\n@NgModule({\r\n  imports: [NgxPrintDirective],\r\n  exports: [NgxPrintDirective],\r\n})\r\nexport class NgxPrintModule {}\r\n","import { Service } from '@angular/core';\r\nimport { PrintBase, PrintStyleInput } from './ngx-print.base';\r\nimport { PrintOptions } from './print-options';\r\n\r\n/**\r\n * Service for handling printing functionality in Angular applications.\r\n * Extends the base printing class (PrintBase).\r\n *\r\n * @export\r\n * @class NgxPrintService\r\n * @extends {PrintBase}\r\n */\r\n@Service()\r\nexport class NgxPrintService extends PrintBase {\r\n  printComplete$ = this.printComplete.asObservable();\r\n\r\n  /**\r\n   * Initiates the printing process using the provided print options.\r\n   *\r\n   * @param {PrintOptions} printOptions - Options for configuring the printing process.\r\n   * @memberof NgxPrintService\r\n   * @returns {void}\r\n   */\r\n  public override print(printOptions?: Partial<PrintOptions>): void {\r\n    // Call the print method in the parent class\r\n    super.print(printOptions);\r\n  }\r\n\r\n  /**\r\n   * Sets the print style for the printing process.\r\n   *\r\n   * @param values - Either a dictionary representing the print styles, or a raw CSS string.\r\n   * @memberof NgxPrintService\r\n   * @setter\r\n   */\r\n  set printStyle(values: PrintStyleInput) {\r\n    super.setPrintStyle(values);\r\n  }\r\n\r\n  /**\r\n   * Sets the stylesheet file for the printing process.\r\n   *\r\n   * @param {string} cssList - A string representing the path to the stylesheet file.\r\n   * @memberof NgxPrintService\r\n   * @setter\r\n   */\r\n  set styleSheetFile(cssList: string) {\r\n    super.setStyleSheetFile(cssList);\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of ngx-print\r\n */\r\nexport { NgxPrintDirective } from './lib/ngx-print.directive';\r\nexport { NgxPrintModule } from './lib/ngx-print.module';\r\nexport { NgxPrintService } from './lib/ngx-print.service';\r\nexport { PrintOptions } from './lib/print-options';\r\nexport { PrintStyle, PrintStyleInput } from './lib/ngx-print.base';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}