{"version":3,"file":"ngx-print.mjs","sources":["../../../src/lib/ngx-print.base.ts","../../../src/lib/print-options.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":["import { CSP_NONCE, inject, Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { PrintOptions } from './print-options';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class PrintBase {\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: string = '';\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 {Object} values - Key-value pairs representing print styles.\r\n   * @protected\r\n   */\r\n  protected setPrintStyle(values: { [key: string]: { [key: string]: string } }) {\r\n    this._printStyle = [];\r\n    for (const key of Object.keys(values)) {\r\n      this._printStyle.push((key + JSON.stringify(values[key])).replace(/['\"]+/g, ''));\r\n    }\r\n  }\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   * -join/replace to transform an array objects to css-styled string\r\n   */\r\n  public returnStyleValues() {\r\n    const styleNonce = this.nonce ? ` nonce=\"${this.nonce}\"` : '';\r\n    return `<style${styleNonce}> ${this._printStyle.join(' ').replace(/,/g, ';')} </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() {\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  protected setStyleSheetFile(cssList: string) {\r\n    const linkTagFn = (cssFileName: string) => {\r\n      return `<link rel=\"stylesheet\" type=\"text/css\" href=\"${cssFileName}\">`;\r\n    };\r\n\r\n    if (cssList.indexOf(',') !== -1) {\r\n      const valueArr = cssList.split(',');\r\n      this._styleSheetFile = valueArr.map(val => linkTagFn(val)).join('');\r\n    } else {\r\n      this._styleSheetFile = linkTagFn(cssList);\r\n    }\r\n  }\r\n\r\n  //#endregion\r\n\r\n  //#region Private methods used by PrintBase\r\n\r\n  /**\r\n   * Updates the default values for input elements.\r\n   *\r\n   * @param {HTMLCollectionOf<HTMLInputElement>} elements - Collection of input elements.\r\n   * @private\r\n   */\r\n  private updateInputDefaults(elements: HTMLCollectionOf<HTMLInputElement>): void {\r\n    for (const element of Array.from(elements)) {\r\n      element['defaultValue'] = element.value;\r\n      if (element['checked']) element['defaultChecked'] = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Updates the default values for select elements.\r\n   *\r\n   * @param {HTMLCollectionOf<HTMLSelectElement>} elements - Collection of select elements.\r\n   * @private\r\n   */\r\n  private updateSelectDefaults(elements: HTMLCollectionOf<HTMLSelectElement>): void {\r\n    for (const element of Array.from(elements)) {\r\n      const selectedIdx = element.selectedIndex;\r\n      if (selectedIdx < 0 || selectedIdx >= element.options.length) continue;\r\n      const selectedOption: HTMLOptionElement = element.options[selectedIdx];\r\n\r\n      selectedOption.defaultSelected = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Updates the default values for textarea elements.\r\n   *\r\n   * @param {HTMLCollectionOf<HTMLTextAreaElement>} elements - Collection of textarea elements.\r\n   * @private\r\n   */\r\n  private updateTextAreaDefaults(elements: HTMLCollectionOf<HTMLTextAreaElement>): void {\r\n    for (const element of Array.from(elements)) {\r\n      element['defaultValue'] = element.value;\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} element - The canvas element to convert.\r\n   * @returns {string} - HTML string of the image.\r\n   * @private\r\n   */\r\n  private canvasToImageHtml(element: HTMLCanvasElement): string {\r\n    const dataUrl = element.toDataURL();\r\n    return `<img src=\"${dataUrl}\" style=\"max-width: 100%;\">`;\r\n  }\r\n\r\n  /**\r\n   * Includes canvas contents in the print section via img tags.\r\n   *\r\n   * @param {HTMLCollectionOf<HTMLCanvasElement>} elements - Collection of canvas elements.\r\n   * @private\r\n   */\r\n  private updateCanvasToImage(elements: HTMLCollectionOf<HTMLCanvasElement>): void {\r\n    for (const canvasElement of Array.from(elements)) {\r\n      const imgHtml = this.canvasToImageHtml(canvasElement);\r\n      canvasElement.insertAdjacentHTML('afterend', imgHtml);\r\n      canvasElement.remove();\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 printContents = document.getElementById(printSectionId);\r\n    if (!printContents) return null;\r\n\r\n    const inputEls = printContents.getElementsByTagName('input');\r\n    const selectEls = printContents.getElementsByTagName('select');\r\n    const textAreaEls = printContents.getElementsByTagName('textarea');\r\n    const canvasEls = printContents.getElementsByTagName('canvas');\r\n\r\n    this.updateInputDefaults(inputEls);\r\n    this.updateSelectDefaults(selectEls);\r\n    this.updateTextAreaDefaults(textAreaEls);\r\n    this.updateCanvasToImage(canvasEls);\r\n\r\n    return printContents.innerHTML;\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 = document.getElementsByTagName(tag);\r\n    for (let index = 0; index < elements.length; index++) {\r\n      html.push(elements[index].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   * @param {PrintOptions} printOptions - Options for printing.\r\n   * @public\r\n   */\r\n  protected print(printOptions: PrintOptions): void {\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 = 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\r\n    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      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      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        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 | MediaQueryList) => {\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) head.innerHTML += components.baseTag;\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","export class PrintOptions {\r\n  printSectionId: string = '';\r\n  printTitle: string = '';\r\n  useExistingCss: boolean = false;\r\n  bodyClass: string = '';\r\n  printMethod: 'window' | 'tab' | 'iframe' = 'window';\r\n  previewOnly: boolean = false;\r\n  closeWindow: boolean = true;\r\n  printDelay: number = 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 { Directive, HostListener, Input, output } from '@angular/core';\r\nimport { PrintBase } 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})\r\nexport class NgxPrintDirective extends PrintBase {\r\n  private printOptions = new PrintOptions();\r\n\r\n  /**\r\n   * Prevents the print dialog from opening on the window\r\n   *\r\n   * @memberof NgxPrintDirective\r\n   */\r\n  @Input() set previewOnly(value: boolean) {\r\n    this.printOptions = { ...this.printOptions, previewOnly: value };\r\n  }\r\n\r\n  /**\r\n   *\r\n   *\r\n   * @memberof NgxPrintDirective\r\n   */\r\n  @Input() set printSectionId(value: string) {\r\n    this.printOptions = { ...this.printOptions, printSectionId: value };\r\n  }\r\n\r\n  /**\r\n   *\r\n   *\r\n   * @memberof NgxPrintDirective\r\n   */\r\n  @Input() set printTitle(value: string) {\r\n    this.printOptions = { ...this.printOptions, printTitle: value };\r\n  }\r\n\r\n  /**\r\n   *\r\n   *\r\n   * @memberof NgxPrintDirective\r\n   */\r\n  @Input() set useExistingCss(value: boolean) {\r\n    this.printOptions = { ...this.printOptions, useExistingCss: value };\r\n  }\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   * @memberof NgxPrintDirective\r\n   */\r\n  @Input() set printDelay(value: number) {\r\n    this.printOptions = { ...this.printOptions, printDelay: value };\r\n  }\r\n\r\n  /**\r\n   * Whether to close the window after print() returns.\r\n   *\r\n   */\r\n  @Input() set closeWindow(value: boolean) {\r\n    this.printOptions = { ...this.printOptions, closeWindow: value };\r\n  }\r\n\r\n  /**\r\n   * Class attribute to apply to the body element.\r\n   *\r\n   */\r\n  @Input() set bodyClass(value: string) {\r\n    this.printOptions = { ...this.printOptions, bodyClass: value };\r\n  }\r\n\r\n  /**\r\n   * Which PrintMethod (iframe/window/tab) to use.\r\n   *\r\n   */\r\n  @Input() set printMethod(value: typeof PrintOptions.prototype.printMethod) {\r\n    this.printOptions = { ...this.printOptions, printMethod: value };\r\n  }\r\n\r\n  /**\r\n   *\r\n   *\r\n   * @memberof NgxPrintDirective\r\n   */\r\n  @Input()\r\n  set printStyle(values: { [key: string]: { [key: string]: string } }) {\r\n    super.setPrintStyle(values);\r\n  }\r\n\r\n  /**\r\n   * @memberof NgxPrintDirective\r\n   * @param cssList\r\n   */\r\n  @Input()\r\n  set styleSheetFile(cssList: string) {\r\n    super.setStyleSheetFile(cssList);\r\n  }\r\n\r\n  /**\r\n   *\r\n   *\r\n   * @memberof NgxPrintDirective\r\n   */\r\n  @HostListener('click')\r\n  public override print(): void {\r\n    super.print(this.printOptions);\r\n    this.printComplete.pipe(take(1)).subscribe(() => {\r\n      this.printCompleted.emit(undefined);\r\n    });\r\n  }\r\n\r\n  readonly printCompleted = output<void>();\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 { Injectable } from '@angular/core';\r\nimport { PrintBase } 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@Injectable({\r\n  providedIn: 'root',\r\n})\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: 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 {{ [key: string]: { [key: string]: string } }} values - A dictionary representing the print styles.\r\n   * @memberof NgxPrintService\r\n   * @setter\r\n   */\r\n  set printStyle(values: { [key: string]: { [key: string]: string } }) {\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\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}