{"version":3,"file":"ngx-print.mjs","sources":["../../../src/lib/ngx-print.base.ts","../../../src/lib/ngx-print.service.ts","../../../src/lib/print-options.ts","../../../src/lib/ngx-print.directive.ts","../../../src/lib/ngx-print.module.ts","../../../src/public_api.ts","../../../src/ngx-print.ts"],"sourcesContent":["import { CSP_NONCE, Inject, Injectable, Optional } from '@angular/core';\r\nimport { PrintOptions } from './print-options';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class PrintBase {\r\n  private _printStyle: string[] = [];\r\n  private _styleSheetFile: string = '';\r\n\r\n  constructor(@Inject(CSP_NONCE) @Optional() private nonce?: string | null) {}\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 in values) {\r\n      if (Object.prototype.hasOwnProperty.call(values, key)) {\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   *\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 = function (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 (let i = 0; i < elements.length; i++) {\r\n      const element = elements[i];\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 (let i = 0; i < elements.length; i++) {\r\n      const element = elements[i];\r\n      const selectedIdx = element.selectedIndex;\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 (let i = 0; i < elements.length; i++) {\r\n      const element = elements[i];\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 (let i = 0; i < elements.length; i++) {\r\n      const element = this.canvasToImageHtml(elements[i]);\r\n      elements[i].insertAdjacentHTML('afterend', element);\r\n      elements[i].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  //#endregion\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    let styles = '',\r\n      links = '',\r\n      popOut = 'top=0,left=0,height=auto,width=auto';\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    // 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    if (printOptions.openNewTab) {\r\n      popOut = '';\r\n    }\r\n\r\n    const printContents = this.getHtmlContents(printOptions.printSectionId);\r\n    if (!printContents) {\r\n      // Handle the case where the specified print section is not found.\r\n      console.error(`Print section with id ${printOptions.printSectionId} not found.`);\r\n      return;\r\n    }\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\r\n    // Create the HTML structure\r\n    const doc = popupWin.document;\r\n\r\n    // Set up the basic HTML structure\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 base tag, styles, and links\r\n    if (baseTag) {\r\n      head.innerHTML += baseTag;\r\n    }\r\n    head.innerHTML += this.returnStyleValues();\r\n    head.innerHTML += this.returnStyleSheetLinkTags();\r\n    head.innerHTML += styles;\r\n    head.innerHTML += links;\r\n\r\n    // Set body class if provided\r\n    if (printOptions.bodyClass) {\r\n      body.className = printOptions.bodyClass;\r\n    }\r\n\r\n    // Insert print contents\r\n    body.innerHTML += printContents;\r\n\r\n    // Add script\r\n    const script = doc.createElement('script');\r\n    script.defer = true;\r\n    script.textContent = `\r\n  function triggerPrint(event) {\r\n    window.removeEventListener('load', triggerPrint, false);\r\n    ${\r\n      printOptions.previewOnly\r\n        ? ''\r\n        : `setTimeout(function() {\r\n      closeWindow(window.print());\r\n    }, ${printOptions.printDelay});`\r\n    }\r\n  }\r\n  function closeWindow(){\r\n    ${printOptions.closeWindow ? 'window.close();' : ''}\r\n  }\r\n  window.addEventListener('load', triggerPrint, false);\r\n`;\r\n    body.appendChild(script);\r\n\r\n    // Assemble the document\r\n    html.appendChild(head);\r\n    html.appendChild(body);\r\n    doc.appendChild(html);\r\n\r\n    popupWin.document.close();\r\n  }\r\n}\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  /**\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 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","export class PrintOptions {\r\n  printSectionId: string = '';\r\n  printTitle: string = '';\r\n  useExistingCss: boolean = false;\r\n  bodyClass: string = '';\r\n  openNewTab: boolean = false;\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 } from '@angular/core';\r\nimport { PrintBase } from './ngx-print.base';\r\nimport { PrintOptions } from './print-options';\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   * 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   * Whether to open a new window or default to new window.\r\n   *\r\n   */\r\n  @Input() set openNewTab(value: boolean) {\r\n    this.printOptions = { ...this.printOptions, openNewTab: 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 print(): void {\r\n    super.print(this.printOptions);\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","/*\r\n * Public API Surface of ngx-print\r\n */\r\nexport { NgxPrintService } from './lib/ngx-print.service';\r\nexport { NgxPrintDirective } from './lib/ngx-print.directive';\r\nexport { NgxPrintModule } from './lib/ngx-print.module';\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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"}